diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index ca79ca5..6119236 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -4,3 +4,8 @@ updates:
directory: /
schedule:
interval: weekly
+
+ - package-ecosystem: npm
+ directory: /workflow-inputs
+ schedule:
+ interval: weekly
diff --git a/.github/workflows/workflow-inputs-ci.yml b/.github/workflows/workflow-inputs-ci.yml
new file mode 100644
index 0000000..bf3c73b
--- /dev/null
+++ b/.github/workflows/workflow-inputs-ci.yml
@@ -0,0 +1,48 @@
+name: Workflow Inputs CI
+
+on:
+ push:
+ branches: [main]
+ paths:
+ - "workflow-inputs/**"
+ - ".github/workflows/workflow-inputs-ci.yml"
+ pull_request:
+ paths:
+ - "workflow-inputs/**"
+ - ".github/workflows/workflow-inputs-ci.yml"
+
+permissions:
+ contents: read
+
+defaults:
+ run:
+ working-directory: workflow-inputs
+
+jobs:
+ build:
+ name: Build & test
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v6
+
+ - name: Set up Vite+
+ uses: voidzero-dev/setup-vp@v1
+
+ - name: Install dependencies
+ run: vp install
+
+ - name: Format, lint, type-check
+ run: vp check
+
+ - name: Run tests
+ run: vp test run
+
+ - name: Build action bundle
+ run: vp pack
+
+ - name: Verify dist/ is up to date
+ run: |
+ if ! git diff --exit-code dist/; then
+ echo "::error::The committed workflow-inputs/dist/ is out of date. Run 'vp pack' inside workflow-inputs/ and commit the result."
+ exit 1
+ fi
diff --git a/.github/workflows/workflow-inputs-e2e.yml b/.github/workflows/workflow-inputs-e2e.yml
new file mode 100644
index 0000000..f15ef7d
--- /dev/null
+++ b/.github/workflows/workflow-inputs-e2e.yml
@@ -0,0 +1,95 @@
+name: Workflow Inputs E2E
+
+# End-to-end smoke test for the workflow-inputs action.
+#
+# Declares its own workflow_dispatch inputs purely as test fixtures — the
+# action runs against this very workflow file and renders a summary, which
+# the assertion step then verifies.
+#
+# Triggers on push and pull_request (scoped to workflow-inputs/ changes) so
+# every code change gets an end-to-end smoke test, and on workflow_dispatch
+# so maintainers can rerun manually.
+
+on:
+ push:
+ branches: [main]
+ paths:
+ - "workflow-inputs/**"
+ - ".github/workflows/workflow-inputs-e2e.yml"
+ pull_request:
+ paths:
+ - "workflow-inputs/**"
+ - ".github/workflows/workflow-inputs-e2e.yml"
+ workflow_dispatch:
+ inputs:
+ environment:
+ description: Where the e2e step pretends to deploy.
+ type: choice
+ options:
+ - staging
+ - production
+ default: staging
+ dry-run:
+ description: Skip the (pretend) deploy.
+ type: boolean
+ default: true
+ version:
+ description: Version label.
+ type: string
+ default: 0.0.0-e2e
+ github_token:
+ description: Should be redacted by the default mask pattern.
+ type: string
+ default: ghp_thisisnotreal
+
+permissions:
+ contents: read
+
+jobs:
+ e2e:
+ name: End-to-end smoke test
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v6
+
+ - name: Set up Vite+
+ uses: voidzero-dev/setup-vp@v1
+
+ - name: Install dependencies
+ working-directory: workflow-inputs
+ run: vp install
+
+ # Rebuild the bundle from source rather than trusting the committed
+ # dist/. Decouples this workflow from workflow-inputs-ci.yml: even if
+ # dist/ is stale on main, this still tests the current source code.
+ - name: Build action bundle
+ working-directory: workflow-inputs
+ run: vp pack
+
+ - name: Run the action against this workflow
+ id: action
+ uses: ./workflow-inputs
+
+ - name: Verify the rendered summary
+ env:
+ SUMMARY: ${{ steps.action.outputs.summary }}
+ run: |
+ set -euo pipefail
+ # Each declared input should appear as a row.
+ for name in environment dry-run version github_token; do
+ if ! printf '%s' "$SUMMARY" | grep -qE "^\| ${name} \|"; then
+ echo "::error::Expected the summary to contain a row for '${name}'."
+ printf '%s' "$SUMMARY"
+ exit 1
+ fi
+ done
+ # The fake token must be masked.
+ if printf '%s' "$SUMMARY" | grep -q 'ghp_thisisnotreal'; then
+ echo "::error::Expected the github_token value to be masked."
+ exit 1
+ fi
+ if ! printf '%s' "$SUMMARY" | grep -q '\*\*\*'; then
+ echo "::error::Expected the masked placeholder (***) to appear."
+ exit 1
+ fi
+ echo "Summary verified."
diff --git a/README.md b/README.md
index d474064..673b6c7 100644
--- a/README.md
+++ b/README.md
@@ -4,10 +4,11 @@ GitHub actions and workflows for Solana projects.
## Actions
-| Name | Description |
-|------------------|-------------|
-| `install-solana` | Install Solana CLI tool with optional caching and verify the installed version |
-| `setup-ubuntu` | Setup Ubuntu runner for program repo CI jobs |
+| Name | Description |
+|-------------------|-------------|
+| `install-solana` | Install Solana CLI tool with optional caching and verify the installed version |
+| `setup-ubuntu` | Setup Ubuntu runner for program repo CI jobs |
+| `workflow-inputs` | Render the inputs of the current workflow run as a markdown table in the GitHub Actions job summary |
## Workflows
diff --git a/workflow-inputs/.gitignore b/workflow-inputs/.gitignore
new file mode 100644
index 0000000..885abfc
--- /dev/null
+++ b/workflow-inputs/.gitignore
@@ -0,0 +1,8 @@
+node_modules/
+.vite-plus/
+*.tsbuildinfo
+
+# Override the global gitignore which excludes dist/. JS GitHub Actions
+# require the bundled output to be committed so the runner can execute it.
+!dist/
+!dist/**
diff --git a/workflow-inputs/README.md b/workflow-inputs/README.md
new file mode 100644
index 0000000..fd3bf01
--- /dev/null
+++ b/workflow-inputs/README.md
@@ -0,0 +1,120 @@
+# workflow-inputs
+
+A GitHub Action that renders the inputs of the current workflow run as a markdown table in the [job summary](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/adding-a-job-summary). Useful for `workflow_dispatch` runs so anyone reviewing the run later can see exactly what inputs triggered it — something the GitHub Actions UI doesn't show out of the box.
+
+## Why?
+
+When you dispatch a workflow manually, GitHub remembers the input values it triggered with, but it doesn't surface them in the run UI. If you come back three months later and want to know what the deploy was, you can't tell without re-running it. This action solves that by writing the inputs to the job summary, where they're easy to find later.
+
+## Usage
+
+```yaml
+name: Deploy
+
+on:
+ workflow_dispatch:
+ inputs:
+ environment:
+ description: Where to deploy
+ type: choice
+ options: [staging, production]
+ default: staging
+ dry-run:
+ description: Skip the actual deploy
+ type: boolean
+ default: false
+
+jobs:
+ deploy:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: solana-program/actions/workflow-inputs@v1
+ # … rest of the deploy steps
+```
+
+That's it. After the action runs, the job summary will contain a table with each input's name, value, type, and description.
+
+> [!NOTE]
+> `actions/checkout` should run before this action. The action reads the calling workflow's YAML file from the workspace to extract input descriptions, types, and defaults. Without checkout, the summary still works but only shows the values that were passed (no descriptions).
+
+## Inputs
+
+| Input | Default | Description |
+| --------------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `title` | `Workflow inputs` | Heading for the summary section. |
+| `inputs-json` | _(none)_ | Optional explicit JSON object of inputs. Pass `${{ toJSON(inputs) }}` to override the default behavior of reading from `github.event.inputs`. |
+| `mask-patterns` | (?i)(secret\|token\|password\|api[_-]?key) | Comma-separated regex patterns. Input keys matching any pattern have their values redacted. Prefix a pattern with `(?i)` for case-insensitive matching. |
+| `show-defaults` | `true` | Tag inputs that fell back to their declared default with `(default)` in the summary. |
+
+## Outputs
+
+| Output | Description |
+| --------- | -------------------------------------------------------------------------------------------------------------------------------- |
+| `summary` | The rendered markdown summary, also written to `$GITHUB_STEP_SUMMARY`. Useful for piping into a Slack/Discord notification step. |
+
+## Example: piping the summary to Slack
+
+```yaml
+- uses: solana-program/actions/workflow-inputs@v1
+ id: inputs
+- uses: slackapi/slack-github-action@v2
+ with:
+ payload: |
+ {
+ "text": ${{ toJSON(steps.inputs.outputs.summary) }}
+ }
+```
+
+## Example: explicit `inputs-json`
+
+If you'd rather not rely on the action reading the workflow file (e.g. you don't run `actions/checkout`), pass the inputs explicitly:
+
+```yaml
+- uses: solana-program/actions/workflow-inputs@v1
+ with:
+ inputs-json: ${{ toJSON(inputs) }}
+```
+
+## Triggers supported
+
+- `workflow_dispatch` — the primary use case.
+- `workflow_call` — reusable workflows. Same input schema shape.
+- Any other trigger — values from `github.event.inputs` will still render if present, but no schema will be discovered.
+
+## Secret masking
+
+By default, input keys matching `(?i)(secret|token|password|api[_-]?key)` have their values replaced with `***`. The runner's own `::add-mask::` mechanism is independent and is honored by GitHub when it renders summaries — this layer is an extra belt to go with the runner's braces.
+
+To extend the patterns:
+
+```yaml
+- uses: solana-program/actions/workflow-inputs@v1
+ with:
+ mask-patterns: "(?i)(secret|token|password|api[_-]?key),(?i)credential"
+```
+
+To disable masking entirely:
+
+```yaml
+- uses: solana-program/actions/workflow-inputs@v1
+ with:
+ mask-patterns: "$^" # Matches nothing.
+```
+
+## Development
+
+This project uses [Vite+](https://viteplus.dev) as its toolchain.
+
+```bash
+vp install # install dependencies
+vp check # format, lint, type-check
+vp test # run the test suite
+vp pack # build the action bundle into dist/index.js
+```
+
+After changes to anything in `src/`, run `vp pack` and commit the updated `dist/index.js` — it's the file the runner actually executes.
+
+## Acknowledgments
+
+Inspired by a Slack thread where Jon pointed out that GitHub Actions doesn't show the parameters used in a manual workflow run, so figuring out what happened in a deploy after the fact is harder than it should be. This action puts those parameters where you can find them later.
diff --git a/workflow-inputs/action.yml b/workflow-inputs/action.yml
new file mode 100644
index 0000000..35548ef
--- /dev/null
+++ b/workflow-inputs/action.yml
@@ -0,0 +1,42 @@
+name: "Workflow Inputs Summary"
+description: >-
+ Render the inputs of the current workflow run as a markdown table in the
+ GitHub Actions job summary. Useful for `workflow_dispatch` runs so anyone
+ reviewing the run later can see what inputs triggered it.
+author: "Loris Leiva"
+branding:
+ icon: "list"
+ color: "blue"
+
+inputs:
+ title:
+ description: "Heading for the summary section."
+ required: false
+ default: "Workflow inputs"
+ inputs-json:
+ description: >-
+ Optional JSON object of inputs. When provided, this is used in place of
+ github.event.inputs. See the README for usage with toJSON(inputs).
+ required: false
+ default: ""
+ mask-patterns:
+ description: >-
+ Comma-separated regex patterns. Input keys matching any pattern have
+ their values redacted in the summary. Prefix a pattern with `(?i)` for
+ case-insensitive matching.
+ required: false
+ default: "(?i)(secret|token|password|api[_-]?key)"
+ show-defaults:
+ description: >-
+ When true, inputs falling back to their declared default are tagged with
+ `(default)` in the summary.
+ required: false
+ default: "true"
+
+outputs:
+ summary:
+ description: "The rendered markdown summary, also written to $GITHUB_STEP_SUMMARY."
+
+runs:
+ using: "node24"
+ main: "dist/index.js"
diff --git a/workflow-inputs/dist/index.js b/workflow-inputs/dist/index.js
new file mode 100644
index 0000000..f1e3140
--- /dev/null
+++ b/workflow-inputs/dist/index.js
@@ -0,0 +1,22090 @@
+import { createRequire } from "node:module";
+import { promises } from "node:fs";
+import path from "node:path";
+//#region \0rolldown/runtime.js
+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 __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
+var __copyProps = (to, from, except, desc) => {
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
+ key = keys[i];
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
+ get: ((k) => from[k]).bind(null, key),
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
+ });
+ }
+ return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
+ value: mod,
+ enumerable: true
+}) : target, mod));
+var __require = /* @__PURE__ */ createRequire(import.meta.url);
+//#endregion
+//#region node_modules/.pnpm/@actions+core@1.11.1/node_modules/@actions/core/lib/utils.js
+var require_utils$3 = /* @__PURE__ */ __commonJSMin(((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.toCommandProperties = exports.toCommandValue = void 0;
+ /**
+ * Sanitizes an input into a string so it can be passed into issueCommand safely
+ * @param input input to sanitize into a string
+ */
+ function toCommandValue(input) {
+ if (input === null || input === void 0) return "";
+ else if (typeof input === "string" || input instanceof String) return input;
+ return JSON.stringify(input);
+ }
+ exports.toCommandValue = toCommandValue;
+ /**
+ *
+ * @param annotationProperties
+ * @returns The command properties to send with the actual annotation command
+ * See IssueCommandProperties: https://github.com/actions/runner/blob/main/src/Runner.Worker/ActionCommandManager.cs#L646
+ */
+ 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
+ };
+ }
+ exports.toCommandProperties = toCommandProperties;
+}));
+//#endregion
+//#region node_modules/.pnpm/@actions+core@1.11.1/node_modules/@actions/core/lib/command.js
+var require_command = /* @__PURE__ */ __commonJSMin(((exports) => {
+ var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === void 0) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) desc = {
+ enumerable: true,
+ get: function() {
+ return m[k];
+ }
+ };
+ Object.defineProperty(o, k2, desc);
+ }) : (function(o, m, k, k2) {
+ if (k2 === void 0) k2 = k;
+ o[k2] = m[k];
+ }));
+ var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", {
+ enumerable: true,
+ value: v
+ });
+ }) : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar = exports && exports.__importStar || function(mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) {
+ for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ }
+ __setModuleDefault(result, mod);
+ return result;
+ };
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.issue = exports.issueCommand = void 0;
+ const os$3 = __importStar(__require("os"));
+ const utils_1 = require_utils$3();
+ /**
+ * Commands
+ *
+ * Command Format:
+ * ::name key=value,key=value::message
+ *
+ * Examples:
+ * ::warning::This is the message
+ * ::set-env name=MY_VAR::some value
+ */
+ function issueCommand(command, properties, message) {
+ const cmd = new Command(command, properties, message);
+ process.stdout.write(cmd.toString() + os$3.EOL);
+ }
+ exports.issueCommand = issueCommand;
+ function issue(name, message = "") {
+ issueCommand(name, {}, message);
+ }
+ exports.issue = issue;
+ const 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 (0, utils_1.toCommandValue)(s).replace(/%/g, "%25").replace(/\r/g, "%0D").replace(/\n/g, "%0A");
+ }
+ function escapeProperty(s) {
+ return (0, utils_1.toCommandValue)(s).replace(/%/g, "%25").replace(/\r/g, "%0D").replace(/\n/g, "%0A").replace(/:/g, "%3A").replace(/,/g, "%2C");
+ }
+}));
+//#endregion
+//#region node_modules/.pnpm/@actions+core@1.11.1/node_modules/@actions/core/lib/file-command.js
+var require_file_command = /* @__PURE__ */ __commonJSMin(((exports) => {
+ var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === void 0) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) desc = {
+ enumerable: true,
+ get: function() {
+ return m[k];
+ }
+ };
+ Object.defineProperty(o, k2, desc);
+ }) : (function(o, m, k, k2) {
+ if (k2 === void 0) k2 = k;
+ o[k2] = m[k];
+ }));
+ var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", {
+ enumerable: true,
+ value: v
+ });
+ }) : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar = exports && exports.__importStar || function(mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) {
+ for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ }
+ __setModuleDefault(result, mod);
+ return result;
+ };
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.prepareKeyValueMessage = exports.issueFileCommand = void 0;
+ const crypto = __importStar(__require("crypto"));
+ const fs$1 = __importStar(__require("fs"));
+ const os$2 = __importStar(__require("os"));
+ const utils_1 = require_utils$3();
+ function issueFileCommand(command, message) {
+ const filePath = process.env[`GITHUB_${command}`];
+ if (!filePath) throw new Error(`Unable to find environment variable for file command ${command}`);
+ if (!fs$1.existsSync(filePath)) throw new Error(`Missing file at path: ${filePath}`);
+ fs$1.appendFileSync(filePath, `${(0, utils_1.toCommandValue)(message)}${os$2.EOL}`, { encoding: "utf8" });
+ }
+ exports.issueFileCommand = issueFileCommand;
+ function prepareKeyValueMessage(key, value) {
+ const delimiter = `ghadelimiter_${crypto.randomUUID()}`;
+ const convertedValue = (0, utils_1.toCommandValue)(value);
+ if (key.includes(delimiter)) throw new Error(`Unexpected input: name should not contain the delimiter "${delimiter}"`);
+ if (convertedValue.includes(delimiter)) throw new Error(`Unexpected input: value should not contain the delimiter "${delimiter}"`);
+ return `${key}<<${delimiter}${os$2.EOL}${convertedValue}${os$2.EOL}${delimiter}`;
+ }
+ exports.prepareKeyValueMessage = prepareKeyValueMessage;
+}));
+//#endregion
+//#region node_modules/.pnpm/@actions+http-client@2.2.3/node_modules/@actions/http-client/lib/proxy.js
+var require_proxy = /* @__PURE__ */ __commonJSMin(((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.checkBypass = exports.getProxyUrl = void 0;
+ function getProxyUrl(reqUrl) {
+ const usingSsl = reqUrl.protocol === "https:";
+ if (checkBypass(reqUrl)) return;
+ const proxyVar = (() => {
+ if (usingSsl) return process.env["https_proxy"] || process.env["HTTPS_PROXY"];
+ else return process.env["http_proxy"] || process.env["HTTP_PROXY"];
+ })();
+ if (proxyVar) try {
+ return new DecodedURL(proxyVar);
+ } catch (_a) {
+ if (!proxyVar.startsWith("http://") && !proxyVar.startsWith("https://")) return new DecodedURL(`http://${proxyVar}`);
+ }
+ else return;
+ }
+ exports.getProxyUrl = getProxyUrl;
+ function checkBypass(reqUrl) {
+ if (!reqUrl.hostname) return false;
+ const reqHost = reqUrl.hostname;
+ if (isLoopbackAddress(reqHost)) return true;
+ const noProxy = process.env["no_proxy"] || process.env["NO_PROXY"] || "";
+ if (!noProxy) return false;
+ let reqPort;
+ if (reqUrl.port) reqPort = Number(reqUrl.port);
+ else if (reqUrl.protocol === "http:") reqPort = 80;
+ else if (reqUrl.protocol === "https:") reqPort = 443;
+ const upperReqHosts = [reqUrl.hostname.toUpperCase()];
+ if (typeof reqPort === "number") upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`);
+ for (const upperNoProxyItem of noProxy.split(",").map((x) => x.trim().toUpperCase()).filter((x) => x)) if (upperNoProxyItem === "*" || upperReqHosts.some((x) => x === upperNoProxyItem || x.endsWith(`.${upperNoProxyItem}`) || upperNoProxyItem.startsWith(".") && x.endsWith(`${upperNoProxyItem}`))) return true;
+ return false;
+ }
+ exports.checkBypass = checkBypass;
+ function isLoopbackAddress(host) {
+ const hostLower = host.toLowerCase();
+ return hostLower === "localhost" || hostLower.startsWith("127.") || hostLower.startsWith("[::1]") || hostLower.startsWith("[0:0:0:0:0:0:0:1]");
+ }
+ var DecodedURL = class extends URL {
+ constructor(url, base) {
+ super(url, base);
+ this._decodedUsername = decodeURIComponent(super.username);
+ this._decodedPassword = decodeURIComponent(super.password);
+ }
+ get username() {
+ return this._decodedUsername;
+ }
+ get password() {
+ return this._decodedPassword;
+ }
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/tunnel@0.0.6/node_modules/tunnel/lib/tunnel.js
+var require_tunnel$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
+ __require("net");
+ var tls = __require("tls");
+ var http$2 = __require("http");
+ var https$1 = __require("https");
+ var events$1 = __require("events");
+ __require("assert");
+ var util$1 = __require("util");
+ exports.httpOverHttp = httpOverHttp;
+ exports.httpsOverHttp = httpsOverHttp;
+ exports.httpOverHttps = httpOverHttps;
+ exports.httpsOverHttps = httpsOverHttps;
+ function httpOverHttp(options) {
+ var agent = new TunnelingAgent(options);
+ agent.request = http$2.request;
+ return agent;
+ }
+ function httpsOverHttp(options) {
+ var agent = new TunnelingAgent(options);
+ agent.request = http$2.request;
+ agent.createSocket = createSecureSocket;
+ agent.defaultPort = 443;
+ return agent;
+ }
+ function httpOverHttps(options) {
+ var agent = new TunnelingAgent(options);
+ agent.request = https$1.request;
+ return agent;
+ }
+ function httpsOverHttps(options) {
+ var agent = new TunnelingAgent(options);
+ agent.request = https$1.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$2.Agent.defaultMaxSockets;
+ self.requests = [];
+ self.sockets = [];
+ self.on("free", function onFree(socket, host, port, localAddress) {
+ var options = toOptions(host, port, localAddress);
+ for (var i = 0, len = self.requests.length; i < len; ++i) {
+ var pending = self.requests[i];
+ if (pending.host === options.host && pending.port === options.port) {
+ self.requests.splice(i, 1);
+ pending.request.onSocket(socket);
+ return;
+ }
+ }
+ socket.destroy();
+ self.removeSocket(socket);
+ });
+ }
+ util$1.inherits(TunnelingAgent, events$1.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");
+ }
+ debug("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) {
+ debug("tunneling socket could not be established, statusCode=%d", res.statusCode);
+ socket.destroy();
+ var error = /* @__PURE__ */ new Error("tunneling socket could not be established, statusCode=" + res.statusCode);
+ error.code = "ECONNRESET";
+ options.request.emit("error", error);
+ self.removeSocket(placeholder);
+ return;
+ }
+ if (head.length > 0) {
+ debug("got illegal response body from proxy");
+ socket.destroy();
+ var error = /* @__PURE__ */ new Error("got illegal response body from proxy");
+ error.code = "ECONNRESET";
+ options.request.emit("error", error);
+ self.removeSocket(placeholder);
+ return;
+ }
+ debug("tunneling connection has established");
+ self.sockets[self.sockets.indexOf(placeholder)] = socket;
+ return cb(socket);
+ }
+ function onError(cause) {
+ connectReq.removeAllListeners();
+ debug("tunneling socket could not be established, cause=%s\n", cause.message, cause.stack);
+ var error = /* @__PURE__ */ new Error("tunneling socket could not be established, cause=" + cause.message);
+ error.code = "ECONNRESET";
+ options.request.emit("error", error);
+ 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(socket) {
+ pending.request.onSocket(socket);
+ });
+ };
+ 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 debug;
+ if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) debug = 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 debug = function() {};
+ exports.debug = debug;
+}));
+//#endregion
+//#region node_modules/.pnpm/tunnel@0.0.6/node_modules/tunnel/index.js
+var require_tunnel = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ module.exports = require_tunnel$1();
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/core/symbols.js
+var require_symbols$4 = /* @__PURE__ */ __commonJSMin(((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"),
+ kHeadersList: Symbol("headers list"),
+ 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"),
+ 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"),
+ 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"),
+ kHTTP2BuildRequest: Symbol("http2 build request"),
+ kHTTP1BuildRequest: Symbol("http1 build request"),
+ kHTTP2CopyHeaders: Symbol("http2 copy headers"),
+ kHTTPConnVersion: Symbol("http connection version"),
+ kRetryHandlerDefaultRetry: Symbol("retry agent default retry"),
+ kConstruct: Symbol("constructable")
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/core/errors.js
+var require_errors = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ var UndiciError = class extends Error {
+ constructor(message) {
+ super(message);
+ this.name = "UndiciError";
+ this.code = "UND_ERR";
+ }
+ };
+ var ConnectTimeoutError = class ConnectTimeoutError extends UndiciError {
+ constructor(message) {
+ super(message);
+ Error.captureStackTrace(this, ConnectTimeoutError);
+ this.name = "ConnectTimeoutError";
+ this.message = message || "Connect Timeout Error";
+ this.code = "UND_ERR_CONNECT_TIMEOUT";
+ }
+ };
+ var HeadersTimeoutError = class HeadersTimeoutError extends UndiciError {
+ constructor(message) {
+ super(message);
+ Error.captureStackTrace(this, HeadersTimeoutError);
+ this.name = "HeadersTimeoutError";
+ this.message = message || "Headers Timeout Error";
+ this.code = "UND_ERR_HEADERS_TIMEOUT";
+ }
+ };
+ var HeadersOverflowError = class HeadersOverflowError extends UndiciError {
+ constructor(message) {
+ super(message);
+ Error.captureStackTrace(this, HeadersOverflowError);
+ this.name = "HeadersOverflowError";
+ this.message = message || "Headers Overflow Error";
+ this.code = "UND_ERR_HEADERS_OVERFLOW";
+ }
+ };
+ var BodyTimeoutError = class BodyTimeoutError extends UndiciError {
+ constructor(message) {
+ super(message);
+ Error.captureStackTrace(this, BodyTimeoutError);
+ this.name = "BodyTimeoutError";
+ this.message = message || "Body Timeout Error";
+ this.code = "UND_ERR_BODY_TIMEOUT";
+ }
+ };
+ var ResponseStatusCodeError = class ResponseStatusCodeError extends UndiciError {
+ constructor(message, statusCode, headers, body) {
+ super(message);
+ Error.captureStackTrace(this, ResponseStatusCodeError);
+ 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;
+ }
+ };
+ var InvalidArgumentError = class InvalidArgumentError extends UndiciError {
+ constructor(message) {
+ super(message);
+ Error.captureStackTrace(this, InvalidArgumentError);
+ this.name = "InvalidArgumentError";
+ this.message = message || "Invalid Argument Error";
+ this.code = "UND_ERR_INVALID_ARG";
+ }
+ };
+ var InvalidReturnValueError = class InvalidReturnValueError extends UndiciError {
+ constructor(message) {
+ super(message);
+ Error.captureStackTrace(this, InvalidReturnValueError);
+ this.name = "InvalidReturnValueError";
+ this.message = message || "Invalid Return Value Error";
+ this.code = "UND_ERR_INVALID_RETURN_VALUE";
+ }
+ };
+ var RequestAbortedError = class RequestAbortedError extends UndiciError {
+ constructor(message) {
+ super(message);
+ Error.captureStackTrace(this, RequestAbortedError);
+ this.name = "AbortError";
+ this.message = message || "Request aborted";
+ this.code = "UND_ERR_ABORTED";
+ }
+ };
+ var InformationalError = class InformationalError extends UndiciError {
+ constructor(message) {
+ super(message);
+ Error.captureStackTrace(this, InformationalError);
+ this.name = "InformationalError";
+ this.message = message || "Request information";
+ this.code = "UND_ERR_INFO";
+ }
+ };
+ var RequestContentLengthMismatchError = class RequestContentLengthMismatchError extends UndiciError {
+ constructor(message) {
+ super(message);
+ Error.captureStackTrace(this, RequestContentLengthMismatchError);
+ this.name = "RequestContentLengthMismatchError";
+ this.message = message || "Request body length does not match content-length header";
+ this.code = "UND_ERR_REQ_CONTENT_LENGTH_MISMATCH";
+ }
+ };
+ var ResponseContentLengthMismatchError = class ResponseContentLengthMismatchError extends UndiciError {
+ constructor(message) {
+ super(message);
+ Error.captureStackTrace(this, ResponseContentLengthMismatchError);
+ this.name = "ResponseContentLengthMismatchError";
+ this.message = message || "Response body length does not match content-length header";
+ this.code = "UND_ERR_RES_CONTENT_LENGTH_MISMATCH";
+ }
+ };
+ var ClientDestroyedError = class ClientDestroyedError extends UndiciError {
+ constructor(message) {
+ super(message);
+ Error.captureStackTrace(this, ClientDestroyedError);
+ this.name = "ClientDestroyedError";
+ this.message = message || "The client is destroyed";
+ this.code = "UND_ERR_DESTROYED";
+ }
+ };
+ var ClientClosedError = class ClientClosedError extends UndiciError {
+ constructor(message) {
+ super(message);
+ Error.captureStackTrace(this, ClientClosedError);
+ this.name = "ClientClosedError";
+ this.message = message || "The client is closed";
+ this.code = "UND_ERR_CLOSED";
+ }
+ };
+ var SocketError = class SocketError extends UndiciError {
+ constructor(message, socket) {
+ super(message);
+ Error.captureStackTrace(this, SocketError);
+ this.name = "SocketError";
+ this.message = message || "Socket error";
+ this.code = "UND_ERR_SOCKET";
+ this.socket = socket;
+ }
+ };
+ var NotSupportedError = class NotSupportedError extends UndiciError {
+ constructor(message) {
+ super(message);
+ Error.captureStackTrace(this, NotSupportedError);
+ this.name = "NotSupportedError";
+ this.message = message || "Not supported error";
+ this.code = "UND_ERR_NOT_SUPPORTED";
+ }
+ };
+ var BalancedPoolMissingUpstreamError = class extends UndiciError {
+ constructor(message) {
+ super(message);
+ Error.captureStackTrace(this, NotSupportedError);
+ this.name = "MissingUpstreamError";
+ this.message = message || "No upstream has been added to the BalancedPool";
+ this.code = "UND_ERR_BPL_MISSING_UPSTREAM";
+ }
+ };
+ module.exports = {
+ HTTPParserError: class HTTPParserError extends Error {
+ constructor(message, code, data) {
+ super(message);
+ Error.captureStackTrace(this, HTTPParserError);
+ this.name = "HTTPParserError";
+ this.code = code ? `HPE_${code}` : void 0;
+ this.data = data ? data.toString() : void 0;
+ }
+ },
+ UndiciError,
+ HeadersTimeoutError,
+ HeadersOverflowError,
+ BodyTimeoutError,
+ RequestContentLengthMismatchError,
+ ConnectTimeoutError,
+ ResponseStatusCodeError,
+ InvalidArgumentError,
+ InvalidReturnValueError,
+ RequestAbortedError,
+ ClientDestroyedError,
+ ClientClosedError,
+ InformationalError,
+ SocketError,
+ NotSupportedError,
+ ResponseContentLengthMismatchError,
+ BalancedPoolMissingUpstreamError,
+ ResponseExceededMaxSizeError: class ResponseExceededMaxSizeError extends UndiciError {
+ constructor(message) {
+ super(message);
+ Error.captureStackTrace(this, ResponseExceededMaxSizeError);
+ this.name = "ResponseExceededMaxSizeError";
+ this.message = message || "Response content exceeded max size";
+ this.code = "UND_ERR_RES_EXCEEDED_MAX_SIZE";
+ }
+ },
+ RequestRetryError: class RequestRetryError extends UndiciError {
+ constructor(message, code, { headers, data }) {
+ super(message);
+ Error.captureStackTrace(this, RequestRetryError);
+ this.name = "RequestRetryError";
+ this.message = message || "Request retry error";
+ this.code = "UND_ERR_REQ_RETRY";
+ this.statusCode = code;
+ this.data = data;
+ this.headers = headers;
+ }
+ }
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/core/constants.js
+var require_constants$4 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ /** @type {Record} */
+ const headerNameLowerCasedRecord = {};
+ const 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
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/core/util.js
+var require_util$6 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const assert$19 = __require("assert");
+ const { kDestroyed, kBodyUsed } = require_symbols$4();
+ const { IncomingMessage } = __require("http");
+ const stream = __require("stream");
+ const net$2 = __require("net");
+ const { InvalidArgumentError } = require_errors();
+ const { Blob: Blob$4 } = __require("buffer");
+ const nodeUtil = __require("util");
+ const { stringify } = __require("querystring");
+ const { headerNameLowerCasedRecord } = require_constants$4();
+ const [nodeMajor, nodeMinor] = process.versions.node.split(".").map((v) => Number(v));
+ function nop() {}
+ function isStream(obj) {
+ return obj && typeof obj === "object" && typeof obj.pipe === "function" && typeof obj.on === "function";
+ }
+ function isBlobLike(object) {
+ return Blob$4 && object instanceof Blob$4 || object && typeof object === "object" && (typeof object.stream === "function" || typeof object.arrayBuffer === "function") && /^(Blob|File)$/.test(object[Symbol.toStringTag]);
+ }
+ 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 parseURL(url) {
+ if (typeof url === "string") {
+ url = new URL(url);
+ if (!/^https?:/.test(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 (!/^https?:/.test(url.origin || url.protocol)) throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`.");
+ if (!(url instanceof URL)) {
+ if (url.port != null && url.port !== "" && !Number.isFinite(parseInt(url.port))) 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.");
+ 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.endsWith("/")) origin = origin.substring(0, origin.length - 1);
+ if (path && !path.startsWith("/")) path = `/${path}`;
+ url = new URL(origin + path);
+ }
+ 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 idx = host.indexOf("]");
+ assert$19(idx !== -1);
+ return host.substring(1, idx);
+ }
+ const idx = host.indexOf(":");
+ if (idx === -1) return host;
+ return host.substring(0, idx);
+ }
+ function getServerName(host) {
+ if (!host) return null;
+ assert$19.strictEqual(typeof host, "string");
+ const servername = getHostname(host);
+ if (net$2.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(stream) {
+ return !stream || !!(stream.destroyed || stream[kDestroyed]);
+ }
+ function isReadableAborted(stream) {
+ const state = stream && stream._readableState;
+ return isDestroyed(stream) && state && !state.endEmitted;
+ }
+ function destroy(stream, err) {
+ if (stream == null || !isStream(stream) || isDestroyed(stream)) return;
+ if (typeof stream.destroy === "function") {
+ if (Object.getPrototypeOf(stream).constructor === IncomingMessage) stream.socket = null;
+ stream.destroy(err);
+ } else if (err) process.nextTick((stream, err) => {
+ stream.emit("error", err);
+ }, stream, err);
+ if (stream.destroyed !== true) stream[kDestroyed] = true;
+ }
+ const KEEPALIVE_TIMEOUT_EXPR = /timeout=(\d+)/;
+ function parseKeepAliveTimeout(val) {
+ const m = val.toString().match(KEEPALIVE_TIMEOUT_EXPR);
+ return m ? parseInt(m[1], 10) * 1e3 : null;
+ }
+ /**
+ * Retrieves a header name and returns its lowercase value.
+ * @param {string | Buffer} value Header name
+ * @returns {string}
+ */
+ function headerNameToString(value) {
+ return headerNameLowerCasedRecord[value] || value.toLowerCase();
+ }
+ function parseHeaders(headers, obj = {}) {
+ if (!Array.isArray(headers)) return headers;
+ for (let i = 0; i < headers.length; i += 2) {
+ const key = headers[i].toString().toLowerCase();
+ let val = obj[key];
+ if (!val) if (Array.isArray(headers[i + 1])) obj[key] = headers[i + 1].map((x) => x.toString("utf8"));
+ else obj[key] = headers[i + 1].toString("utf8");
+ else {
+ if (!Array.isArray(val)) {
+ val = [val];
+ obj[key] = val;
+ }
+ val.push(headers[i + 1].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 ret = [];
+ let hasContentLength = false;
+ let contentDispositionIdx = -1;
+ for (let n = 0; n < headers.length; n += 2) {
+ const key = headers[n + 0].toString();
+ const val = headers[n + 1].toString("utf8");
+ if (key.length === 14 && (key === "content-length" || key.toLowerCase() === "content-length")) {
+ ret.push(key, val);
+ hasContentLength = true;
+ } else if (key.length === 19 && (key === "content-disposition" || key.toLowerCase() === "content-disposition")) contentDispositionIdx = ret.push(key, val) - 1;
+ else ret.push(key, 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 ? stream.isDisturbed(body) || body[kBodyUsed] : body[kBodyUsed] || body.readableDidRead || body._readableState && body._readableState.dataEmitted || isReadableAborted(body)));
+ }
+ function isErrored(body) {
+ return !!(body && (stream.isErrored ? stream.isErrored(body) : /state: 'errored'/.test(nodeUtil.inspect(body))));
+ }
+ function isReadable(body) {
+ return !!(body && (stream.isReadable ? stream.isReadable(body) : /state: 'readable'/.test(nodeUtil.inspect(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
+ };
+ }
+ async function* convertIterableToBuffer(iterable) {
+ for await (const chunk of iterable) yield Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
+ }
+ let ReadableStream;
+ function ReadableStreamFrom(iterable) {
+ if (!ReadableStream) ReadableStream = __require("stream/web").ReadableStream;
+ if (ReadableStream.from) return ReadableStream.from(convertIterableToBuffer(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();
+ });
+ else {
+ const buf = Buffer.isBuffer(value) ? value : Buffer.from(value);
+ controller.enqueue(new Uint8Array(buf));
+ }
+ return controller.desiredSize > 0;
+ },
+ async cancel(reason) {
+ await iterator.return();
+ }
+ }, 0);
+ }
+ 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 throwIfAborted(signal) {
+ if (!signal) return;
+ if (typeof signal.throwIfAborted === "function") signal.throwIfAborted();
+ else if (signal.aborted) {
+ const err = /* @__PURE__ */ new Error("The operation was aborted");
+ err.name = "AbortError";
+ throw err;
+ }
+ }
+ 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);
+ }
+ const hasToWellFormed = !!String.prototype.toWellFormed;
+ /**
+ * @param {string} val
+ */
+ function toUSVString(val) {
+ if (hasToWellFormed) return `${val}`.toWellFormed();
+ else if (nodeUtil.toUSVString) return nodeUtil.toUSVString(val);
+ return `${val}`;
+ }
+ 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;
+ }
+ const kEnumerableProperty = Object.create(null);
+ kEnumerableProperty.enumerable = true;
+ module.exports = {
+ kEnumerableProperty,
+ nop,
+ isDisturbed,
+ isErrored,
+ isReadable,
+ toUSVString,
+ isReadableAborted,
+ isBlobLike,
+ parseOrigin,
+ parseURL,
+ getServerName,
+ isStream,
+ isIterable,
+ isAsyncIterable,
+ isDestroyed,
+ headerNameToString,
+ parseRawHeaders,
+ parseHeaders,
+ parseKeepAliveTimeout,
+ destroy,
+ bodyLength,
+ deepClone,
+ ReadableStreamFrom,
+ isBuffer,
+ validateHandler,
+ getSocketInfo,
+ isFormDataLike,
+ buildURL,
+ throwIfAborted,
+ addAbortListener,
+ parseRangeHeader,
+ nodeMajor,
+ nodeMinor,
+ nodeHasAutoSelectFamily: nodeMajor > 18 || nodeMajor === 18 && nodeMinor >= 13,
+ safeHTTPMethods: [
+ "GET",
+ "HEAD",
+ "OPTIONS",
+ "TRACE"
+ ]
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/timers.js
+var require_timers = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ let fastNow = Date.now();
+ let fastNowTimeout;
+ const fastTimers = [];
+ function onTimeout() {
+ fastNow = Date.now();
+ let len = fastTimers.length;
+ let idx = 0;
+ while (idx < len) {
+ const timer = fastTimers[idx];
+ if (timer.state === 0) timer.state = fastNow + timer.delay;
+ else if (timer.state > 0 && fastNow >= timer.state) {
+ timer.state = -1;
+ timer.callback(timer.opaque);
+ }
+ if (timer.state === -1) {
+ timer.state = -2;
+ if (idx !== len - 1) fastTimers[idx] = fastTimers.pop();
+ else fastTimers.pop();
+ len -= 1;
+ } else idx += 1;
+ }
+ if (fastTimers.length > 0) refreshTimeout();
+ }
+ function refreshTimeout() {
+ if (fastNowTimeout && fastNowTimeout.refresh) fastNowTimeout.refresh();
+ else {
+ clearTimeout(fastNowTimeout);
+ fastNowTimeout = setTimeout(onTimeout, 1e3);
+ if (fastNowTimeout.unref) fastNowTimeout.unref();
+ }
+ }
+ var Timeout = class {
+ constructor(callback, delay, opaque) {
+ this.callback = callback;
+ this.delay = delay;
+ this.opaque = opaque;
+ this.state = -2;
+ this.refresh();
+ }
+ refresh() {
+ if (this.state === -2) {
+ fastTimers.push(this);
+ if (!fastNowTimeout || fastTimers.length === 1) refreshTimeout();
+ }
+ this.state = 0;
+ }
+ clear() {
+ this.state = -1;
+ }
+ };
+ module.exports = {
+ setTimeout(callback, delay, opaque) {
+ return delay < 1e3 ? setTimeout(callback, delay, opaque) : new Timeout(callback, delay, opaque);
+ },
+ clearTimeout(timeout) {
+ if (timeout instanceof Timeout) timeout.clear();
+ else clearTimeout(timeout);
+ }
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/@fastify+busboy@2.1.1/node_modules/@fastify/busboy/deps/streamsearch/sbmh.js
+var require_sbmh = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ /**
+ * Copyright Brian White. All rights reserved.
+ *
+ * @see https://github.com/mscdex/streamsearch
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Based heavily on the Streaming Boyer-Moore-Horspool C++ implementation
+ * by Hongli Lai at: https://github.com/FooBarWidget/boyer-moore-horspool
+ */
+ const EventEmitter$2 = __require("node:events").EventEmitter;
+ const inherits$5 = __require("node:util").inherits;
+ function SBMH(needle) {
+ if (typeof needle === "string") needle = Buffer.from(needle);
+ if (!Buffer.isBuffer(needle)) throw new TypeError("The needle has to be a String or a Buffer.");
+ const needleLength = needle.length;
+ if (needleLength === 0) throw new Error("The needle cannot be an empty String/Buffer.");
+ if (needleLength > 256) throw new Error("The needle cannot have a length bigger than 256.");
+ this.maxMatches = Infinity;
+ this.matches = 0;
+ this._occ = new Array(256).fill(needleLength);
+ this._lookbehind_size = 0;
+ this._needle = needle;
+ this._bufpos = 0;
+ this._lookbehind = Buffer.alloc(needleLength);
+ for (var i = 0; i < needleLength - 1; ++i) this._occ[needle[i]] = needleLength - 1 - i;
+ }
+ inherits$5(SBMH, EventEmitter$2);
+ SBMH.prototype.reset = function() {
+ this._lookbehind_size = 0;
+ this.matches = 0;
+ this._bufpos = 0;
+ };
+ SBMH.prototype.push = function(chunk, pos) {
+ if (!Buffer.isBuffer(chunk)) chunk = Buffer.from(chunk, "binary");
+ const chlen = chunk.length;
+ this._bufpos = pos || 0;
+ let r;
+ while (r !== chlen && this.matches < this.maxMatches) r = this._sbmh_feed(chunk);
+ return r;
+ };
+ SBMH.prototype._sbmh_feed = function(data) {
+ const len = data.length;
+ const needle = this._needle;
+ const needleLength = needle.length;
+ const lastNeedleChar = needle[needleLength - 1];
+ let pos = -this._lookbehind_size;
+ let ch;
+ if (pos < 0) {
+ while (pos < 0 && pos <= len - needleLength) {
+ ch = this._sbmh_lookup_char(data, pos + needleLength - 1);
+ if (ch === lastNeedleChar && this._sbmh_memcmp(data, pos, needleLength - 1)) {
+ this._lookbehind_size = 0;
+ ++this.matches;
+ this.emit("info", true);
+ return this._bufpos = pos + needleLength;
+ }
+ pos += this._occ[ch];
+ }
+ if (pos < 0) while (pos < 0 && !this._sbmh_memcmp(data, pos, len - pos)) ++pos;
+ if (pos >= 0) {
+ this.emit("info", false, this._lookbehind, 0, this._lookbehind_size);
+ this._lookbehind_size = 0;
+ } else {
+ const bytesToCutOff = this._lookbehind_size + pos;
+ if (bytesToCutOff > 0) this.emit("info", false, this._lookbehind, 0, bytesToCutOff);
+ this._lookbehind.copy(this._lookbehind, 0, bytesToCutOff, this._lookbehind_size - bytesToCutOff);
+ this._lookbehind_size -= bytesToCutOff;
+ data.copy(this._lookbehind, this._lookbehind_size);
+ this._lookbehind_size += len;
+ this._bufpos = len;
+ return len;
+ }
+ }
+ pos += (pos >= 0) * this._bufpos;
+ if (data.indexOf(needle, pos) !== -1) {
+ pos = data.indexOf(needle, pos);
+ ++this.matches;
+ if (pos > 0) this.emit("info", true, data, this._bufpos, pos);
+ else this.emit("info", true);
+ return this._bufpos = pos + needleLength;
+ } else pos = len - needleLength;
+ while (pos < len && (data[pos] !== needle[0] || Buffer.compare(data.subarray(pos, pos + len - pos), needle.subarray(0, len - pos)) !== 0)) ++pos;
+ if (pos < len) {
+ data.copy(this._lookbehind, 0, pos, pos + (len - pos));
+ this._lookbehind_size = len - pos;
+ }
+ if (pos > 0) this.emit("info", false, data, this._bufpos, pos < len ? pos : len);
+ this._bufpos = len;
+ return len;
+ };
+ SBMH.prototype._sbmh_lookup_char = function(data, pos) {
+ return pos < 0 ? this._lookbehind[this._lookbehind_size + pos] : data[pos];
+ };
+ SBMH.prototype._sbmh_memcmp = function(data, pos, len) {
+ for (var i = 0; i < len; ++i) if (this._sbmh_lookup_char(data, pos + i) !== this._needle[i]) return false;
+ return true;
+ };
+ module.exports = SBMH;
+}));
+//#endregion
+//#region node_modules/.pnpm/@fastify+busboy@2.1.1/node_modules/@fastify/busboy/deps/dicer/lib/PartStream.js
+var require_PartStream = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const inherits$4 = __require("node:util").inherits;
+ const ReadableStream$1 = __require("node:stream").Readable;
+ function PartStream(opts) {
+ ReadableStream$1.call(this, opts);
+ }
+ inherits$4(PartStream, ReadableStream$1);
+ PartStream.prototype._read = function(n) {};
+ module.exports = PartStream;
+}));
+//#endregion
+//#region node_modules/.pnpm/@fastify+busboy@2.1.1/node_modules/@fastify/busboy/lib/utils/getLimit.js
+var require_getLimit = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ module.exports = function getLimit(limits, name, defaultLimit) {
+ if (!limits || limits[name] === void 0 || limits[name] === null) return defaultLimit;
+ if (typeof limits[name] !== "number" || isNaN(limits[name])) throw new TypeError("Limit " + name + " is not a valid number");
+ return limits[name];
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/@fastify+busboy@2.1.1/node_modules/@fastify/busboy/deps/dicer/lib/HeaderParser.js
+var require_HeaderParser = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const EventEmitter$1 = __require("node:events").EventEmitter;
+ const inherits$3 = __require("node:util").inherits;
+ const getLimit = require_getLimit();
+ const StreamSearch = require_sbmh();
+ const B_DCRLF = Buffer.from("\r\n\r\n");
+ const RE_CRLF = /\r\n/g;
+ const RE_HDR = /^([^:]+):[ \t]?([\x00-\xFF]+)?$/;
+ function HeaderParser(cfg) {
+ EventEmitter$1.call(this);
+ cfg = cfg || {};
+ const self = this;
+ this.nread = 0;
+ this.maxed = false;
+ this.npairs = 0;
+ this.maxHeaderPairs = getLimit(cfg, "maxHeaderPairs", 2e3);
+ this.maxHeaderSize = getLimit(cfg, "maxHeaderSize", 80 * 1024);
+ this.buffer = "";
+ this.header = {};
+ this.finished = false;
+ this.ss = new StreamSearch(B_DCRLF);
+ this.ss.on("info", function(isMatch, data, start, end) {
+ if (data && !self.maxed) {
+ if (self.nread + end - start >= self.maxHeaderSize) {
+ end = self.maxHeaderSize - self.nread + start;
+ self.nread = self.maxHeaderSize;
+ self.maxed = true;
+ } else self.nread += end - start;
+ self.buffer += data.toString("binary", start, end);
+ }
+ if (isMatch) self._finish();
+ });
+ }
+ inherits$3(HeaderParser, EventEmitter$1);
+ HeaderParser.prototype.push = function(data) {
+ const r = this.ss.push(data);
+ if (this.finished) return r;
+ };
+ HeaderParser.prototype.reset = function() {
+ this.finished = false;
+ this.buffer = "";
+ this.header = {};
+ this.ss.reset();
+ };
+ HeaderParser.prototype._finish = function() {
+ if (this.buffer) this._parseHeader();
+ this.ss.matches = this.ss.maxMatches;
+ const header = this.header;
+ this.header = {};
+ this.buffer = "";
+ this.finished = true;
+ this.nread = this.npairs = 0;
+ this.maxed = false;
+ this.emit("header", header);
+ };
+ HeaderParser.prototype._parseHeader = function() {
+ if (this.npairs === this.maxHeaderPairs) return;
+ const lines = this.buffer.split(RE_CRLF);
+ const len = lines.length;
+ let m, h;
+ for (var i = 0; i < len; ++i) {
+ if (lines[i].length === 0) continue;
+ if (lines[i][0] === " " || lines[i][0] === " ") {
+ if (h) {
+ this.header[h][this.header[h].length - 1] += lines[i];
+ continue;
+ }
+ }
+ const posColon = lines[i].indexOf(":");
+ if (posColon === -1 || posColon === 0) return;
+ m = RE_HDR.exec(lines[i]);
+ h = m[1].toLowerCase();
+ this.header[h] = this.header[h] || [];
+ this.header[h].push(m[2] || "");
+ if (++this.npairs === this.maxHeaderPairs) break;
+ }
+ };
+ module.exports = HeaderParser;
+}));
+//#endregion
+//#region node_modules/.pnpm/@fastify+busboy@2.1.1/node_modules/@fastify/busboy/deps/dicer/lib/Dicer.js
+var require_Dicer = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const WritableStream$1 = __require("node:stream").Writable;
+ const inherits$2 = __require("node:util").inherits;
+ const StreamSearch = require_sbmh();
+ const PartStream = require_PartStream();
+ const HeaderParser = require_HeaderParser();
+ const DASH = 45;
+ const B_ONEDASH = Buffer.from("-");
+ const B_CRLF = Buffer.from("\r\n");
+ const EMPTY_FN = function() {};
+ function Dicer(cfg) {
+ if (!(this instanceof Dicer)) return new Dicer(cfg);
+ WritableStream$1.call(this, cfg);
+ if (!cfg || !cfg.headerFirst && typeof cfg.boundary !== "string") throw new TypeError("Boundary required");
+ if (typeof cfg.boundary === "string") this.setBoundary(cfg.boundary);
+ else this._bparser = void 0;
+ this._headerFirst = cfg.headerFirst;
+ this._dashes = 0;
+ this._parts = 0;
+ this._finished = false;
+ this._realFinish = false;
+ this._isPreamble = true;
+ this._justMatched = false;
+ this._firstWrite = true;
+ this._inHeader = true;
+ this._part = void 0;
+ this._cb = void 0;
+ this._ignoreData = false;
+ this._partOpts = { highWaterMark: cfg.partHwm };
+ this._pause = false;
+ const self = this;
+ this._hparser = new HeaderParser(cfg);
+ this._hparser.on("header", function(header) {
+ self._inHeader = false;
+ self._part.emit("header", header);
+ });
+ }
+ inherits$2(Dicer, WritableStream$1);
+ Dicer.prototype.emit = function(ev) {
+ if (ev === "finish" && !this._realFinish) {
+ if (!this._finished) {
+ const self = this;
+ process.nextTick(function() {
+ self.emit("error", /* @__PURE__ */ new Error("Unexpected end of multipart data"));
+ if (self._part && !self._ignoreData) {
+ const type = self._isPreamble ? "Preamble" : "Part";
+ self._part.emit("error", /* @__PURE__ */ new Error(type + " terminated early due to unexpected end of multipart data"));
+ self._part.push(null);
+ process.nextTick(function() {
+ self._realFinish = true;
+ self.emit("finish");
+ self._realFinish = false;
+ });
+ return;
+ }
+ self._realFinish = true;
+ self.emit("finish");
+ self._realFinish = false;
+ });
+ }
+ } else WritableStream$1.prototype.emit.apply(this, arguments);
+ };
+ Dicer.prototype._write = function(data, encoding, cb) {
+ if (!this._hparser && !this._bparser) return cb();
+ if (this._headerFirst && this._isPreamble) {
+ if (!this._part) {
+ this._part = new PartStream(this._partOpts);
+ if (this.listenerCount("preamble") !== 0) this.emit("preamble", this._part);
+ else this._ignore();
+ }
+ const r = this._hparser.push(data);
+ if (!this._inHeader && r !== void 0 && r < data.length) data = data.slice(r);
+ else return cb();
+ }
+ if (this._firstWrite) {
+ this._bparser.push(B_CRLF);
+ this._firstWrite = false;
+ }
+ this._bparser.push(data);
+ if (this._pause) this._cb = cb;
+ else cb();
+ };
+ Dicer.prototype.reset = function() {
+ this._part = void 0;
+ this._bparser = void 0;
+ this._hparser = void 0;
+ };
+ Dicer.prototype.setBoundary = function(boundary) {
+ const self = this;
+ this._bparser = new StreamSearch("\r\n--" + boundary);
+ this._bparser.on("info", function(isMatch, data, start, end) {
+ self._oninfo(isMatch, data, start, end);
+ });
+ };
+ Dicer.prototype._ignore = function() {
+ if (this._part && !this._ignoreData) {
+ this._ignoreData = true;
+ this._part.on("error", EMPTY_FN);
+ this._part.resume();
+ }
+ };
+ Dicer.prototype._oninfo = function(isMatch, data, start, end) {
+ let buf;
+ const self = this;
+ let i = 0;
+ let r;
+ let shouldWriteMore = true;
+ if (!this._part && this._justMatched && data) {
+ while (this._dashes < 2 && start + i < end) if (data[start + i] === DASH) {
+ ++i;
+ ++this._dashes;
+ } else {
+ if (this._dashes) buf = B_ONEDASH;
+ this._dashes = 0;
+ break;
+ }
+ if (this._dashes === 2) {
+ if (start + i < end && this.listenerCount("trailer") !== 0) this.emit("trailer", data.slice(start + i, end));
+ this.reset();
+ this._finished = true;
+ if (self._parts === 0) {
+ self._realFinish = true;
+ self.emit("finish");
+ self._realFinish = false;
+ }
+ }
+ if (this._dashes) return;
+ }
+ if (this._justMatched) this._justMatched = false;
+ if (!this._part) {
+ this._part = new PartStream(this._partOpts);
+ this._part._read = function(n) {
+ self._unpause();
+ };
+ if (this._isPreamble && this.listenerCount("preamble") !== 0) this.emit("preamble", this._part);
+ else if (this._isPreamble !== true && this.listenerCount("part") !== 0) this.emit("part", this._part);
+ else this._ignore();
+ if (!this._isPreamble) this._inHeader = true;
+ }
+ if (data && start < end && !this._ignoreData) {
+ if (this._isPreamble || !this._inHeader) {
+ if (buf) shouldWriteMore = this._part.push(buf);
+ shouldWriteMore = this._part.push(data.slice(start, end));
+ if (!shouldWriteMore) this._pause = true;
+ } else if (!this._isPreamble && this._inHeader) {
+ if (buf) this._hparser.push(buf);
+ r = this._hparser.push(data.slice(start, end));
+ if (!this._inHeader && r !== void 0 && r < end) this._oninfo(false, data, start + r, end);
+ }
+ }
+ if (isMatch) {
+ this._hparser.reset();
+ if (this._isPreamble) this._isPreamble = false;
+ else if (start !== end) {
+ ++this._parts;
+ this._part.on("end", function() {
+ if (--self._parts === 0) if (self._finished) {
+ self._realFinish = true;
+ self.emit("finish");
+ self._realFinish = false;
+ } else self._unpause();
+ });
+ }
+ this._part.push(null);
+ this._part = void 0;
+ this._ignoreData = false;
+ this._justMatched = true;
+ this._dashes = 0;
+ }
+ };
+ Dicer.prototype._unpause = function() {
+ if (!this._pause) return;
+ this._pause = false;
+ if (this._cb) {
+ const cb = this._cb;
+ this._cb = void 0;
+ cb();
+ }
+ };
+ module.exports = Dicer;
+}));
+//#endregion
+//#region node_modules/.pnpm/@fastify+busboy@2.1.1/node_modules/@fastify/busboy/lib/utils/decodeText.js
+var require_decodeText = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const utf8Decoder = new TextDecoder("utf-8");
+ const textDecoders = new Map([["utf-8", utf8Decoder], ["utf8", utf8Decoder]]);
+ function getDecoder(charset) {
+ let lc;
+ while (true) switch (charset) {
+ case "utf-8":
+ case "utf8": return decoders.utf8;
+ case "latin1":
+ case "ascii":
+ case "us-ascii":
+ case "iso-8859-1":
+ case "iso8859-1":
+ case "iso88591":
+ case "iso_8859-1":
+ case "windows-1252":
+ case "iso_8859-1:1987":
+ case "cp1252":
+ case "x-cp1252": return decoders.latin1;
+ case "utf16le":
+ case "utf-16le":
+ case "ucs2":
+ case "ucs-2": return decoders.utf16le;
+ case "base64": return decoders.base64;
+ default:
+ if (lc === void 0) {
+ lc = true;
+ charset = charset.toLowerCase();
+ continue;
+ }
+ return decoders.other.bind(charset);
+ }
+ }
+ const decoders = {
+ utf8: (data, sourceEncoding) => {
+ if (data.length === 0) return "";
+ if (typeof data === "string") data = Buffer.from(data, sourceEncoding);
+ return data.utf8Slice(0, data.length);
+ },
+ latin1: (data, sourceEncoding) => {
+ if (data.length === 0) return "";
+ if (typeof data === "string") return data;
+ return data.latin1Slice(0, data.length);
+ },
+ utf16le: (data, sourceEncoding) => {
+ if (data.length === 0) return "";
+ if (typeof data === "string") data = Buffer.from(data, sourceEncoding);
+ return data.ucs2Slice(0, data.length);
+ },
+ base64: (data, sourceEncoding) => {
+ if (data.length === 0) return "";
+ if (typeof data === "string") data = Buffer.from(data, sourceEncoding);
+ return data.base64Slice(0, data.length);
+ },
+ other: (data, sourceEncoding) => {
+ if (data.length === 0) return "";
+ if (typeof data === "string") data = Buffer.from(data, sourceEncoding);
+ if (textDecoders.has(exports.toString())) try {
+ return textDecoders.get(exports).decode(data);
+ } catch {}
+ return typeof data === "string" ? data : data.toString();
+ }
+ };
+ function decodeText(text, sourceEncoding, destEncoding) {
+ if (text) return getDecoder(destEncoding)(text, sourceEncoding);
+ return text;
+ }
+ module.exports = decodeText;
+}));
+//#endregion
+//#region node_modules/.pnpm/@fastify+busboy@2.1.1/node_modules/@fastify/busboy/lib/utils/parseParams.js
+var require_parseParams = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const decodeText = require_decodeText();
+ const RE_ENCODED = /%[a-fA-F0-9][a-fA-F0-9]/g;
+ const EncodedLookup = {
+ "%00": "\0",
+ "%01": "",
+ "%02": "",
+ "%03": "",
+ "%04": "",
+ "%05": "",
+ "%06": "",
+ "%07": "\x07",
+ "%08": "\b",
+ "%09": " ",
+ "%0a": "\n",
+ "%0A": "\n",
+ "%0b": "\v",
+ "%0B": "\v",
+ "%0c": "\f",
+ "%0C": "\f",
+ "%0d": "\r",
+ "%0D": "\r",
+ "%0e": "",
+ "%0E": "",
+ "%0f": "",
+ "%0F": "",
+ "%10": "",
+ "%11": "",
+ "%12": "",
+ "%13": "",
+ "%14": "",
+ "%15": "",
+ "%16": "",
+ "%17": "",
+ "%18": "",
+ "%19": "",
+ "%1a": "",
+ "%1A": "",
+ "%1b": "\x1B",
+ "%1B": "\x1B",
+ "%1c": "",
+ "%1C": "",
+ "%1d": "",
+ "%1D": "",
+ "%1e": "",
+ "%1E": "",
+ "%1f": "",
+ "%1F": "",
+ "%20": " ",
+ "%21": "!",
+ "%22": "\"",
+ "%23": "#",
+ "%24": "$",
+ "%25": "%",
+ "%26": "&",
+ "%27": "'",
+ "%28": "(",
+ "%29": ")",
+ "%2a": "*",
+ "%2A": "*",
+ "%2b": "+",
+ "%2B": "+",
+ "%2c": ",",
+ "%2C": ",",
+ "%2d": "-",
+ "%2D": "-",
+ "%2e": ".",
+ "%2E": ".",
+ "%2f": "/",
+ "%2F": "/",
+ "%30": "0",
+ "%31": "1",
+ "%32": "2",
+ "%33": "3",
+ "%34": "4",
+ "%35": "5",
+ "%36": "6",
+ "%37": "7",
+ "%38": "8",
+ "%39": "9",
+ "%3a": ":",
+ "%3A": ":",
+ "%3b": ";",
+ "%3B": ";",
+ "%3c": "<",
+ "%3C": "<",
+ "%3d": "=",
+ "%3D": "=",
+ "%3e": ">",
+ "%3E": ">",
+ "%3f": "?",
+ "%3F": "?",
+ "%40": "@",
+ "%41": "A",
+ "%42": "B",
+ "%43": "C",
+ "%44": "D",
+ "%45": "E",
+ "%46": "F",
+ "%47": "G",
+ "%48": "H",
+ "%49": "I",
+ "%4a": "J",
+ "%4A": "J",
+ "%4b": "K",
+ "%4B": "K",
+ "%4c": "L",
+ "%4C": "L",
+ "%4d": "M",
+ "%4D": "M",
+ "%4e": "N",
+ "%4E": "N",
+ "%4f": "O",
+ "%4F": "O",
+ "%50": "P",
+ "%51": "Q",
+ "%52": "R",
+ "%53": "S",
+ "%54": "T",
+ "%55": "U",
+ "%56": "V",
+ "%57": "W",
+ "%58": "X",
+ "%59": "Y",
+ "%5a": "Z",
+ "%5A": "Z",
+ "%5b": "[",
+ "%5B": "[",
+ "%5c": "\\",
+ "%5C": "\\",
+ "%5d": "]",
+ "%5D": "]",
+ "%5e": "^",
+ "%5E": "^",
+ "%5f": "_",
+ "%5F": "_",
+ "%60": "`",
+ "%61": "a",
+ "%62": "b",
+ "%63": "c",
+ "%64": "d",
+ "%65": "e",
+ "%66": "f",
+ "%67": "g",
+ "%68": "h",
+ "%69": "i",
+ "%6a": "j",
+ "%6A": "j",
+ "%6b": "k",
+ "%6B": "k",
+ "%6c": "l",
+ "%6C": "l",
+ "%6d": "m",
+ "%6D": "m",
+ "%6e": "n",
+ "%6E": "n",
+ "%6f": "o",
+ "%6F": "o",
+ "%70": "p",
+ "%71": "q",
+ "%72": "r",
+ "%73": "s",
+ "%74": "t",
+ "%75": "u",
+ "%76": "v",
+ "%77": "w",
+ "%78": "x",
+ "%79": "y",
+ "%7a": "z",
+ "%7A": "z",
+ "%7b": "{",
+ "%7B": "{",
+ "%7c": "|",
+ "%7C": "|",
+ "%7d": "}",
+ "%7D": "}",
+ "%7e": "~",
+ "%7E": "~",
+ "%7f": "",
+ "%7F": "",
+ "%80": "",
+ "%81": "",
+ "%82": "",
+ "%83": "",
+ "%84": "",
+ "%85": "
",
+ "%86": "",
+ "%87": "",
+ "%88": "",
+ "%89": "",
+ "%8a": "",
+ "%8A": "",
+ "%8b": "",
+ "%8B": "",
+ "%8c": "",
+ "%8C": "",
+ "%8d": "",
+ "%8D": "",
+ "%8e": "",
+ "%8E": "",
+ "%8f": "",
+ "%8F": "",
+ "%90": "",
+ "%91": "",
+ "%92": "",
+ "%93": "",
+ "%94": "",
+ "%95": "",
+ "%96": "",
+ "%97": "",
+ "%98": "",
+ "%99": "",
+ "%9a": "",
+ "%9A": "",
+ "%9b": "",
+ "%9B": "",
+ "%9c": "",
+ "%9C": "",
+ "%9d": "",
+ "%9D": "",
+ "%9e": "",
+ "%9E": "",
+ "%9f": "",
+ "%9F": "",
+ "%a0": "\xA0",
+ "%A0": "\xA0",
+ "%a1": "¡",
+ "%A1": "¡",
+ "%a2": "¢",
+ "%A2": "¢",
+ "%a3": "£",
+ "%A3": "£",
+ "%a4": "¤",
+ "%A4": "¤",
+ "%a5": "¥",
+ "%A5": "¥",
+ "%a6": "¦",
+ "%A6": "¦",
+ "%a7": "§",
+ "%A7": "§",
+ "%a8": "¨",
+ "%A8": "¨",
+ "%a9": "©",
+ "%A9": "©",
+ "%aa": "ª",
+ "%Aa": "ª",
+ "%aA": "ª",
+ "%AA": "ª",
+ "%ab": "«",
+ "%Ab": "«",
+ "%aB": "«",
+ "%AB": "«",
+ "%ac": "¬",
+ "%Ac": "¬",
+ "%aC": "¬",
+ "%AC": "¬",
+ "%ad": "",
+ "%Ad": "",
+ "%aD": "",
+ "%AD": "",
+ "%ae": "®",
+ "%Ae": "®",
+ "%aE": "®",
+ "%AE": "®",
+ "%af": "¯",
+ "%Af": "¯",
+ "%aF": "¯",
+ "%AF": "¯",
+ "%b0": "°",
+ "%B0": "°",
+ "%b1": "±",
+ "%B1": "±",
+ "%b2": "²",
+ "%B2": "²",
+ "%b3": "³",
+ "%B3": "³",
+ "%b4": "´",
+ "%B4": "´",
+ "%b5": "µ",
+ "%B5": "µ",
+ "%b6": "¶",
+ "%B6": "¶",
+ "%b7": "·",
+ "%B7": "·",
+ "%b8": "¸",
+ "%B8": "¸",
+ "%b9": "¹",
+ "%B9": "¹",
+ "%ba": "º",
+ "%Ba": "º",
+ "%bA": "º",
+ "%BA": "º",
+ "%bb": "»",
+ "%Bb": "»",
+ "%bB": "»",
+ "%BB": "»",
+ "%bc": "¼",
+ "%Bc": "¼",
+ "%bC": "¼",
+ "%BC": "¼",
+ "%bd": "½",
+ "%Bd": "½",
+ "%bD": "½",
+ "%BD": "½",
+ "%be": "¾",
+ "%Be": "¾",
+ "%bE": "¾",
+ "%BE": "¾",
+ "%bf": "¿",
+ "%Bf": "¿",
+ "%bF": "¿",
+ "%BF": "¿",
+ "%c0": "À",
+ "%C0": "À",
+ "%c1": "Á",
+ "%C1": "Á",
+ "%c2": "Â",
+ "%C2": "Â",
+ "%c3": "Ã",
+ "%C3": "Ã",
+ "%c4": "Ä",
+ "%C4": "Ä",
+ "%c5": "Å",
+ "%C5": "Å",
+ "%c6": "Æ",
+ "%C6": "Æ",
+ "%c7": "Ç",
+ "%C7": "Ç",
+ "%c8": "È",
+ "%C8": "È",
+ "%c9": "É",
+ "%C9": "É",
+ "%ca": "Ê",
+ "%Ca": "Ê",
+ "%cA": "Ê",
+ "%CA": "Ê",
+ "%cb": "Ë",
+ "%Cb": "Ë",
+ "%cB": "Ë",
+ "%CB": "Ë",
+ "%cc": "Ì",
+ "%Cc": "Ì",
+ "%cC": "Ì",
+ "%CC": "Ì",
+ "%cd": "Í",
+ "%Cd": "Í",
+ "%cD": "Í",
+ "%CD": "Í",
+ "%ce": "Î",
+ "%Ce": "Î",
+ "%cE": "Î",
+ "%CE": "Î",
+ "%cf": "Ï",
+ "%Cf": "Ï",
+ "%cF": "Ï",
+ "%CF": "Ï",
+ "%d0": "Ð",
+ "%D0": "Ð",
+ "%d1": "Ñ",
+ "%D1": "Ñ",
+ "%d2": "Ò",
+ "%D2": "Ò",
+ "%d3": "Ó",
+ "%D3": "Ó",
+ "%d4": "Ô",
+ "%D4": "Ô",
+ "%d5": "Õ",
+ "%D5": "Õ",
+ "%d6": "Ö",
+ "%D6": "Ö",
+ "%d7": "×",
+ "%D7": "×",
+ "%d8": "Ø",
+ "%D8": "Ø",
+ "%d9": "Ù",
+ "%D9": "Ù",
+ "%da": "Ú",
+ "%Da": "Ú",
+ "%dA": "Ú",
+ "%DA": "Ú",
+ "%db": "Û",
+ "%Db": "Û",
+ "%dB": "Û",
+ "%DB": "Û",
+ "%dc": "Ü",
+ "%Dc": "Ü",
+ "%dC": "Ü",
+ "%DC": "Ü",
+ "%dd": "Ý",
+ "%Dd": "Ý",
+ "%dD": "Ý",
+ "%DD": "Ý",
+ "%de": "Þ",
+ "%De": "Þ",
+ "%dE": "Þ",
+ "%DE": "Þ",
+ "%df": "ß",
+ "%Df": "ß",
+ "%dF": "ß",
+ "%DF": "ß",
+ "%e0": "à",
+ "%E0": "à",
+ "%e1": "á",
+ "%E1": "á",
+ "%e2": "â",
+ "%E2": "â",
+ "%e3": "ã",
+ "%E3": "ã",
+ "%e4": "ä",
+ "%E4": "ä",
+ "%e5": "å",
+ "%E5": "å",
+ "%e6": "æ",
+ "%E6": "æ",
+ "%e7": "ç",
+ "%E7": "ç",
+ "%e8": "è",
+ "%E8": "è",
+ "%e9": "é",
+ "%E9": "é",
+ "%ea": "ê",
+ "%Ea": "ê",
+ "%eA": "ê",
+ "%EA": "ê",
+ "%eb": "ë",
+ "%Eb": "ë",
+ "%eB": "ë",
+ "%EB": "ë",
+ "%ec": "ì",
+ "%Ec": "ì",
+ "%eC": "ì",
+ "%EC": "ì",
+ "%ed": "í",
+ "%Ed": "í",
+ "%eD": "í",
+ "%ED": "í",
+ "%ee": "î",
+ "%Ee": "î",
+ "%eE": "î",
+ "%EE": "î",
+ "%ef": "ï",
+ "%Ef": "ï",
+ "%eF": "ï",
+ "%EF": "ï",
+ "%f0": "ð",
+ "%F0": "ð",
+ "%f1": "ñ",
+ "%F1": "ñ",
+ "%f2": "ò",
+ "%F2": "ò",
+ "%f3": "ó",
+ "%F3": "ó",
+ "%f4": "ô",
+ "%F4": "ô",
+ "%f5": "õ",
+ "%F5": "õ",
+ "%f6": "ö",
+ "%F6": "ö",
+ "%f7": "÷",
+ "%F7": "÷",
+ "%f8": "ø",
+ "%F8": "ø",
+ "%f9": "ù",
+ "%F9": "ù",
+ "%fa": "ú",
+ "%Fa": "ú",
+ "%fA": "ú",
+ "%FA": "ú",
+ "%fb": "û",
+ "%Fb": "û",
+ "%fB": "û",
+ "%FB": "û",
+ "%fc": "ü",
+ "%Fc": "ü",
+ "%fC": "ü",
+ "%FC": "ü",
+ "%fd": "ý",
+ "%Fd": "ý",
+ "%fD": "ý",
+ "%FD": "ý",
+ "%fe": "þ",
+ "%Fe": "þ",
+ "%fE": "þ",
+ "%FE": "þ",
+ "%ff": "ÿ",
+ "%Ff": "ÿ",
+ "%fF": "ÿ",
+ "%FF": "ÿ"
+ };
+ function encodedReplacer(match) {
+ return EncodedLookup[match];
+ }
+ const STATE_KEY = 0;
+ const STATE_VALUE = 1;
+ const STATE_CHARSET = 2;
+ const STATE_LANG = 3;
+ function parseParams(str) {
+ const res = [];
+ let state = STATE_KEY;
+ let charset = "";
+ let inquote = false;
+ let escaping = false;
+ let p = 0;
+ let tmp = "";
+ const len = str.length;
+ for (var i = 0; i < len; ++i) {
+ const char = str[i];
+ if (char === "\\" && inquote) if (escaping) escaping = false;
+ else {
+ escaping = true;
+ continue;
+ }
+ else if (char === "\"") if (!escaping) {
+ if (inquote) {
+ inquote = false;
+ state = STATE_KEY;
+ } else inquote = true;
+ continue;
+ } else escaping = false;
+ else {
+ if (escaping && inquote) tmp += "\\";
+ escaping = false;
+ if ((state === STATE_CHARSET || state === STATE_LANG) && char === "'") {
+ if (state === STATE_CHARSET) {
+ state = STATE_LANG;
+ charset = tmp.substring(1);
+ } else state = STATE_VALUE;
+ tmp = "";
+ continue;
+ } else if (state === STATE_KEY && (char === "*" || char === "=") && res.length) {
+ state = char === "*" ? STATE_CHARSET : STATE_VALUE;
+ res[p] = [tmp, void 0];
+ tmp = "";
+ continue;
+ } else if (!inquote && char === ";") {
+ state = STATE_KEY;
+ if (charset) {
+ if (tmp.length) tmp = decodeText(tmp.replace(RE_ENCODED, encodedReplacer), "binary", charset);
+ charset = "";
+ } else if (tmp.length) tmp = decodeText(tmp, "binary", "utf8");
+ if (res[p] === void 0) res[p] = tmp;
+ else res[p][1] = tmp;
+ tmp = "";
+ ++p;
+ continue;
+ } else if (!inquote && (char === " " || char === " ")) continue;
+ }
+ tmp += char;
+ }
+ if (charset && tmp.length) tmp = decodeText(tmp.replace(RE_ENCODED, encodedReplacer), "binary", charset);
+ else if (tmp) tmp = decodeText(tmp, "binary", "utf8");
+ if (res[p] === void 0) {
+ if (tmp) res[p] = tmp;
+ } else res[p][1] = tmp;
+ return res;
+ }
+ module.exports = parseParams;
+}));
+//#endregion
+//#region node_modules/.pnpm/@fastify+busboy@2.1.1/node_modules/@fastify/busboy/lib/utils/basename.js
+var require_basename = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ module.exports = function basename(path) {
+ if (typeof path !== "string") return "";
+ for (var i = path.length - 1; i >= 0; --i) switch (path.charCodeAt(i)) {
+ case 47:
+ case 92:
+ path = path.slice(i + 1);
+ return path === ".." || path === "." ? "" : path;
+ }
+ return path === ".." || path === "." ? "" : path;
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/@fastify+busboy@2.1.1/node_modules/@fastify/busboy/lib/types/multipart.js
+var require_multipart = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { Readable: Readable$3 } = __require("node:stream");
+ const { inherits: inherits$1 } = __require("node:util");
+ const Dicer = require_Dicer();
+ const parseParams = require_parseParams();
+ const decodeText = require_decodeText();
+ const basename = require_basename();
+ const getLimit = require_getLimit();
+ const RE_BOUNDARY = /^boundary$/i;
+ const RE_FIELD = /^form-data$/i;
+ const RE_CHARSET = /^charset$/i;
+ const RE_FILENAME = /^filename$/i;
+ const RE_NAME = /^name$/i;
+ Multipart.detect = /^multipart\/form-data/i;
+ function Multipart(boy, cfg) {
+ let i;
+ let len;
+ const self = this;
+ let boundary;
+ const limits = cfg.limits;
+ const isPartAFile = cfg.isPartAFile || ((fieldName, contentType, fileName) => contentType === "application/octet-stream" || fileName !== void 0);
+ const parsedConType = cfg.parsedConType || [];
+ const defCharset = cfg.defCharset || "utf8";
+ const preservePath = cfg.preservePath;
+ const fileOpts = { highWaterMark: cfg.fileHwm };
+ for (i = 0, len = parsedConType.length; i < len; ++i) if (Array.isArray(parsedConType[i]) && RE_BOUNDARY.test(parsedConType[i][0])) {
+ boundary = parsedConType[i][1];
+ break;
+ }
+ function checkFinished() {
+ if (nends === 0 && finished && !boy._done) {
+ finished = false;
+ self.end();
+ }
+ }
+ if (typeof boundary !== "string") throw new Error("Multipart: Boundary not found");
+ const fieldSizeLimit = getLimit(limits, "fieldSize", 1 * 1024 * 1024);
+ const fileSizeLimit = getLimit(limits, "fileSize", Infinity);
+ const filesLimit = getLimit(limits, "files", Infinity);
+ const fieldsLimit = getLimit(limits, "fields", Infinity);
+ const partsLimit = getLimit(limits, "parts", Infinity);
+ const headerPairsLimit = getLimit(limits, "headerPairs", 2e3);
+ const headerSizeLimit = getLimit(limits, "headerSize", 80 * 1024);
+ let nfiles = 0;
+ let nfields = 0;
+ let nends = 0;
+ let curFile;
+ let curField;
+ let finished = false;
+ this._needDrain = false;
+ this._pause = false;
+ this._cb = void 0;
+ this._nparts = 0;
+ this._boy = boy;
+ const parserCfg = {
+ boundary,
+ maxHeaderPairs: headerPairsLimit,
+ maxHeaderSize: headerSizeLimit,
+ partHwm: fileOpts.highWaterMark,
+ highWaterMark: cfg.highWaterMark
+ };
+ this.parser = new Dicer(parserCfg);
+ this.parser.on("drain", function() {
+ self._needDrain = false;
+ if (self._cb && !self._pause) {
+ const cb = self._cb;
+ self._cb = void 0;
+ cb();
+ }
+ }).on("part", function onPart(part) {
+ if (++self._nparts > partsLimit) {
+ self.parser.removeListener("part", onPart);
+ self.parser.on("part", skipPart);
+ boy.hitPartsLimit = true;
+ boy.emit("partsLimit");
+ return skipPart(part);
+ }
+ if (curField) {
+ const field = curField;
+ field.emit("end");
+ field.removeAllListeners("end");
+ }
+ part.on("header", function(header) {
+ let contype;
+ let fieldname;
+ let parsed;
+ let charset;
+ let encoding;
+ let filename;
+ let nsize = 0;
+ if (header["content-type"]) {
+ parsed = parseParams(header["content-type"][0]);
+ if (parsed[0]) {
+ contype = parsed[0].toLowerCase();
+ for (i = 0, len = parsed.length; i < len; ++i) if (RE_CHARSET.test(parsed[i][0])) {
+ charset = parsed[i][1].toLowerCase();
+ break;
+ }
+ }
+ }
+ if (contype === void 0) contype = "text/plain";
+ if (charset === void 0) charset = defCharset;
+ if (header["content-disposition"]) {
+ parsed = parseParams(header["content-disposition"][0]);
+ if (!RE_FIELD.test(parsed[0])) return skipPart(part);
+ for (i = 0, len = parsed.length; i < len; ++i) if (RE_NAME.test(parsed[i][0])) fieldname = parsed[i][1];
+ else if (RE_FILENAME.test(parsed[i][0])) {
+ filename = parsed[i][1];
+ if (!preservePath) filename = basename(filename);
+ }
+ } else return skipPart(part);
+ if (header["content-transfer-encoding"]) encoding = header["content-transfer-encoding"][0].toLowerCase();
+ else encoding = "7bit";
+ let onData, onEnd;
+ if (isPartAFile(fieldname, contype, filename)) {
+ if (nfiles === filesLimit) {
+ if (!boy.hitFilesLimit) {
+ boy.hitFilesLimit = true;
+ boy.emit("filesLimit");
+ }
+ return skipPart(part);
+ }
+ ++nfiles;
+ if (boy.listenerCount("file") === 0) {
+ self.parser._ignore();
+ return;
+ }
+ ++nends;
+ const file = new FileStream(fileOpts);
+ curFile = file;
+ file.on("end", function() {
+ --nends;
+ self._pause = false;
+ checkFinished();
+ if (self._cb && !self._needDrain) {
+ const cb = self._cb;
+ self._cb = void 0;
+ cb();
+ }
+ });
+ file._read = function(n) {
+ if (!self._pause) return;
+ self._pause = false;
+ if (self._cb && !self._needDrain) {
+ const cb = self._cb;
+ self._cb = void 0;
+ cb();
+ }
+ };
+ boy.emit("file", fieldname, file, filename, encoding, contype);
+ onData = function(data) {
+ if ((nsize += data.length) > fileSizeLimit) {
+ const extralen = fileSizeLimit - nsize + data.length;
+ if (extralen > 0) file.push(data.slice(0, extralen));
+ file.truncated = true;
+ file.bytesRead = fileSizeLimit;
+ part.removeAllListeners("data");
+ file.emit("limit");
+ return;
+ } else if (!file.push(data)) self._pause = true;
+ file.bytesRead = nsize;
+ };
+ onEnd = function() {
+ curFile = void 0;
+ file.push(null);
+ };
+ } else {
+ if (nfields === fieldsLimit) {
+ if (!boy.hitFieldsLimit) {
+ boy.hitFieldsLimit = true;
+ boy.emit("fieldsLimit");
+ }
+ return skipPart(part);
+ }
+ ++nfields;
+ ++nends;
+ let buffer = "";
+ let truncated = false;
+ curField = part;
+ onData = function(data) {
+ if ((nsize += data.length) > fieldSizeLimit) {
+ const extralen = fieldSizeLimit - (nsize - data.length);
+ buffer += data.toString("binary", 0, extralen);
+ truncated = true;
+ part.removeAllListeners("data");
+ } else buffer += data.toString("binary");
+ };
+ onEnd = function() {
+ curField = void 0;
+ if (buffer.length) buffer = decodeText(buffer, "binary", charset);
+ boy.emit("field", fieldname, buffer, false, truncated, encoding, contype);
+ --nends;
+ checkFinished();
+ };
+ }
+ part._readableState.sync = false;
+ part.on("data", onData);
+ part.on("end", onEnd);
+ }).on("error", function(err) {
+ if (curFile) curFile.emit("error", err);
+ });
+ }).on("error", function(err) {
+ boy.emit("error", err);
+ }).on("finish", function() {
+ finished = true;
+ checkFinished();
+ });
+ }
+ Multipart.prototype.write = function(chunk, cb) {
+ const r = this.parser.write(chunk);
+ if (r && !this._pause) cb();
+ else {
+ this._needDrain = !r;
+ this._cb = cb;
+ }
+ };
+ Multipart.prototype.end = function() {
+ const self = this;
+ if (self.parser.writable) self.parser.end();
+ else if (!self._boy._done) process.nextTick(function() {
+ self._boy._done = true;
+ self._boy.emit("finish");
+ });
+ };
+ function skipPart(part) {
+ part.resume();
+ }
+ function FileStream(opts) {
+ Readable$3.call(this, opts);
+ this.bytesRead = 0;
+ this.truncated = false;
+ }
+ inherits$1(FileStream, Readable$3);
+ FileStream.prototype._read = function(n) {};
+ module.exports = Multipart;
+}));
+//#endregion
+//#region node_modules/.pnpm/@fastify+busboy@2.1.1/node_modules/@fastify/busboy/lib/utils/Decoder.js
+var require_Decoder = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const RE_PLUS = /\+/g;
+ const HEX = [
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+ ];
+ function Decoder() {
+ this.buffer = void 0;
+ }
+ Decoder.prototype.write = function(str) {
+ str = str.replace(RE_PLUS, " ");
+ let res = "";
+ let i = 0;
+ let p = 0;
+ const len = str.length;
+ for (; i < len; ++i) if (this.buffer !== void 0) if (!HEX[str.charCodeAt(i)]) {
+ res += "%" + this.buffer;
+ this.buffer = void 0;
+ --i;
+ } else {
+ this.buffer += str[i];
+ ++p;
+ if (this.buffer.length === 2) {
+ res += String.fromCharCode(parseInt(this.buffer, 16));
+ this.buffer = void 0;
+ }
+ }
+ else if (str[i] === "%") {
+ if (i > p) {
+ res += str.substring(p, i);
+ p = i;
+ }
+ this.buffer = "";
+ ++p;
+ }
+ if (p < len && this.buffer === void 0) res += str.substring(p);
+ return res;
+ };
+ Decoder.prototype.reset = function() {
+ this.buffer = void 0;
+ };
+ module.exports = Decoder;
+}));
+//#endregion
+//#region node_modules/.pnpm/@fastify+busboy@2.1.1/node_modules/@fastify/busboy/lib/types/urlencoded.js
+var require_urlencoded = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const Decoder = require_Decoder();
+ const decodeText = require_decodeText();
+ const getLimit = require_getLimit();
+ const RE_CHARSET = /^charset$/i;
+ UrlEncoded.detect = /^application\/x-www-form-urlencoded/i;
+ function UrlEncoded(boy, cfg) {
+ const limits = cfg.limits;
+ const parsedConType = cfg.parsedConType;
+ this.boy = boy;
+ this.fieldSizeLimit = getLimit(limits, "fieldSize", 1 * 1024 * 1024);
+ this.fieldNameSizeLimit = getLimit(limits, "fieldNameSize", 100);
+ this.fieldsLimit = getLimit(limits, "fields", Infinity);
+ let charset;
+ for (var i = 0, len = parsedConType.length; i < len; ++i) if (Array.isArray(parsedConType[i]) && RE_CHARSET.test(parsedConType[i][0])) {
+ charset = parsedConType[i][1].toLowerCase();
+ break;
+ }
+ if (charset === void 0) charset = cfg.defCharset || "utf8";
+ this.decoder = new Decoder();
+ this.charset = charset;
+ this._fields = 0;
+ this._state = "key";
+ this._checkingBytes = true;
+ this._bytesKey = 0;
+ this._bytesVal = 0;
+ this._key = "";
+ this._val = "";
+ this._keyTrunc = false;
+ this._valTrunc = false;
+ this._hitLimit = false;
+ }
+ UrlEncoded.prototype.write = function(data, cb) {
+ if (this._fields === this.fieldsLimit) {
+ if (!this.boy.hitFieldsLimit) {
+ this.boy.hitFieldsLimit = true;
+ this.boy.emit("fieldsLimit");
+ }
+ return cb();
+ }
+ let idxeq;
+ let idxamp;
+ let i;
+ let p = 0;
+ const len = data.length;
+ while (p < len) if (this._state === "key") {
+ idxeq = idxamp = void 0;
+ for (i = p; i < len; ++i) {
+ if (!this._checkingBytes) ++p;
+ if (data[i] === 61) {
+ idxeq = i;
+ break;
+ } else if (data[i] === 38) {
+ idxamp = i;
+ break;
+ }
+ if (this._checkingBytes && this._bytesKey === this.fieldNameSizeLimit) {
+ this._hitLimit = true;
+ break;
+ } else if (this._checkingBytes) ++this._bytesKey;
+ }
+ if (idxeq !== void 0) {
+ if (idxeq > p) this._key += this.decoder.write(data.toString("binary", p, idxeq));
+ this._state = "val";
+ this._hitLimit = false;
+ this._checkingBytes = true;
+ this._val = "";
+ this._bytesVal = 0;
+ this._valTrunc = false;
+ this.decoder.reset();
+ p = idxeq + 1;
+ } else if (idxamp !== void 0) {
+ ++this._fields;
+ let key;
+ const keyTrunc = this._keyTrunc;
+ if (idxamp > p) key = this._key += this.decoder.write(data.toString("binary", p, idxamp));
+ else key = this._key;
+ this._hitLimit = false;
+ this._checkingBytes = true;
+ this._key = "";
+ this._bytesKey = 0;
+ this._keyTrunc = false;
+ this.decoder.reset();
+ if (key.length) this.boy.emit("field", decodeText(key, "binary", this.charset), "", keyTrunc, false);
+ p = idxamp + 1;
+ if (this._fields === this.fieldsLimit) return cb();
+ } else if (this._hitLimit) {
+ if (i > p) this._key += this.decoder.write(data.toString("binary", p, i));
+ p = i;
+ if ((this._bytesKey = this._key.length) === this.fieldNameSizeLimit) {
+ this._checkingBytes = false;
+ this._keyTrunc = true;
+ }
+ } else {
+ if (p < len) this._key += this.decoder.write(data.toString("binary", p));
+ p = len;
+ }
+ } else {
+ idxamp = void 0;
+ for (i = p; i < len; ++i) {
+ if (!this._checkingBytes) ++p;
+ if (data[i] === 38) {
+ idxamp = i;
+ break;
+ }
+ if (this._checkingBytes && this._bytesVal === this.fieldSizeLimit) {
+ this._hitLimit = true;
+ break;
+ } else if (this._checkingBytes) ++this._bytesVal;
+ }
+ if (idxamp !== void 0) {
+ ++this._fields;
+ if (idxamp > p) this._val += this.decoder.write(data.toString("binary", p, idxamp));
+ this.boy.emit("field", decodeText(this._key, "binary", this.charset), decodeText(this._val, "binary", this.charset), this._keyTrunc, this._valTrunc);
+ this._state = "key";
+ this._hitLimit = false;
+ this._checkingBytes = true;
+ this._key = "";
+ this._bytesKey = 0;
+ this._keyTrunc = false;
+ this.decoder.reset();
+ p = idxamp + 1;
+ if (this._fields === this.fieldsLimit) return cb();
+ } else if (this._hitLimit) {
+ if (i > p) this._val += this.decoder.write(data.toString("binary", p, i));
+ p = i;
+ if (this._val === "" && this.fieldSizeLimit === 0 || (this._bytesVal = this._val.length) === this.fieldSizeLimit) {
+ this._checkingBytes = false;
+ this._valTrunc = true;
+ }
+ } else {
+ if (p < len) this._val += this.decoder.write(data.toString("binary", p));
+ p = len;
+ }
+ }
+ cb();
+ };
+ UrlEncoded.prototype.end = function() {
+ if (this.boy._done) return;
+ if (this._state === "key" && this._key.length > 0) this.boy.emit("field", decodeText(this._key, "binary", this.charset), "", this._keyTrunc, false);
+ else if (this._state === "val") this.boy.emit("field", decodeText(this._key, "binary", this.charset), decodeText(this._val, "binary", this.charset), this._keyTrunc, this._valTrunc);
+ this.boy._done = true;
+ this.boy.emit("finish");
+ };
+ module.exports = UrlEncoded;
+}));
+//#endregion
+//#region node_modules/.pnpm/@fastify+busboy@2.1.1/node_modules/@fastify/busboy/lib/main.js
+var require_main = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const WritableStream = __require("node:stream").Writable;
+ const { inherits } = __require("node:util");
+ const Dicer = require_Dicer();
+ const MultipartParser = require_multipart();
+ const UrlencodedParser = require_urlencoded();
+ const parseParams = require_parseParams();
+ function Busboy(opts) {
+ if (!(this instanceof Busboy)) return new Busboy(opts);
+ if (typeof opts !== "object") throw new TypeError("Busboy expected an options-Object.");
+ if (typeof opts.headers !== "object") throw new TypeError("Busboy expected an options-Object with headers-attribute.");
+ if (typeof opts.headers["content-type"] !== "string") throw new TypeError("Missing Content-Type-header.");
+ const { headers, ...streamOptions } = opts;
+ this.opts = {
+ autoDestroy: false,
+ ...streamOptions
+ };
+ WritableStream.call(this, this.opts);
+ this._done = false;
+ this._parser = this.getParserByHeaders(headers);
+ this._finished = false;
+ }
+ inherits(Busboy, WritableStream);
+ Busboy.prototype.emit = function(ev) {
+ if (ev === "finish") {
+ if (!this._done) {
+ this._parser?.end();
+ return;
+ } else if (this._finished) return;
+ this._finished = true;
+ }
+ WritableStream.prototype.emit.apply(this, arguments);
+ };
+ Busboy.prototype.getParserByHeaders = function(headers) {
+ const parsed = parseParams(headers["content-type"]);
+ const cfg = {
+ defCharset: this.opts.defCharset,
+ fileHwm: this.opts.fileHwm,
+ headers,
+ highWaterMark: this.opts.highWaterMark,
+ isPartAFile: this.opts.isPartAFile,
+ limits: this.opts.limits,
+ parsedConType: parsed,
+ preservePath: this.opts.preservePath
+ };
+ if (MultipartParser.detect.test(parsed[0])) return new MultipartParser(this, cfg);
+ if (UrlencodedParser.detect.test(parsed[0])) return new UrlencodedParser(this, cfg);
+ throw new Error("Unsupported Content-Type.");
+ };
+ Busboy.prototype._write = function(chunk, encoding, cb) {
+ this._parser.write(chunk, cb);
+ };
+ module.exports = Busboy;
+ module.exports.default = Busboy;
+ module.exports.Busboy = Busboy;
+ module.exports.Dicer = Dicer;
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/fetch/constants.js
+var require_constants$3 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { MessageChannel, receiveMessageOnPort } = __require("worker_threads");
+ const corsSafeListedMethods = [
+ "GET",
+ "HEAD",
+ "POST"
+ ];
+ const corsSafeListedMethodsSet = new Set(corsSafeListedMethods);
+ const nullBodyStatus = [
+ 101,
+ 204,
+ 205,
+ 304
+ ];
+ const redirectStatus = [
+ 301,
+ 302,
+ 303,
+ 307,
+ 308
+ ];
+ const redirectStatusSet = new Set(redirectStatus);
+ const badPorts = [
+ "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",
+ "5060",
+ "5061",
+ "6000",
+ "6566",
+ "6665",
+ "6666",
+ "6667",
+ "6668",
+ "6669",
+ "6697",
+ "10080"
+ ];
+ const badPortsSet = new Set(badPorts);
+ const referrerPolicy = [
+ "",
+ "no-referrer",
+ "no-referrer-when-downgrade",
+ "same-origin",
+ "origin",
+ "strict-origin",
+ "origin-when-cross-origin",
+ "strict-origin-when-cross-origin",
+ "unsafe-url"
+ ];
+ const referrerPolicySet = new Set(referrerPolicy);
+ const requestRedirect = [
+ "follow",
+ "manual",
+ "error"
+ ];
+ const safeMethods = [
+ "GET",
+ "HEAD",
+ "OPTIONS",
+ "TRACE"
+ ];
+ const safeMethodsSet = new Set(safeMethods);
+ const requestMode = [
+ "navigate",
+ "same-origin",
+ "no-cors",
+ "cors"
+ ];
+ const requestCredentials = [
+ "omit",
+ "same-origin",
+ "include"
+ ];
+ const requestCache = [
+ "default",
+ "no-store",
+ "reload",
+ "no-cache",
+ "force-cache",
+ "only-if-cached"
+ ];
+ const requestBodyHeader = [
+ "content-encoding",
+ "content-language",
+ "content-location",
+ "content-type",
+ "content-length"
+ ];
+ const requestDuplex = ["half"];
+ const forbiddenMethods = [
+ "CONNECT",
+ "TRACE",
+ "TRACK"
+ ];
+ const forbiddenMethodsSet = new Set(forbiddenMethods);
+ const subresource = [
+ "audio",
+ "audioworklet",
+ "font",
+ "image",
+ "manifest",
+ "paintworklet",
+ "script",
+ "style",
+ "track",
+ "video",
+ "xslt",
+ ""
+ ];
+ const subresourceSet = new Set(subresource);
+ /** @type {globalThis['DOMException']} */
+ const DOMException = globalThis.DOMException ?? (() => {
+ try {
+ atob("~");
+ } catch (err) {
+ return Object.getPrototypeOf(err).constructor;
+ }
+ })();
+ let channel;
+ module.exports = {
+ DOMException,
+ structuredClone: globalThis.structuredClone ?? function structuredClone(value, options = void 0) {
+ if (arguments.length === 0) throw new TypeError("missing argument");
+ if (!channel) channel = new MessageChannel();
+ channel.port1.unref();
+ channel.port2.unref();
+ channel.port1.postMessage(value, options?.transfer);
+ return receiveMessageOnPort(channel.port2).message;
+ },
+ subresource,
+ forbiddenMethods,
+ requestBodyHeader,
+ referrerPolicy,
+ requestRedirect,
+ requestMode,
+ requestCredentials,
+ requestCache,
+ redirectStatus,
+ corsSafeListedMethods,
+ nullBodyStatus,
+ safeMethods,
+ badPorts,
+ requestDuplex,
+ subresourceSet,
+ badPortsSet,
+ redirectStatusSet,
+ corsSafeListedMethodsSet,
+ safeMethodsSet,
+ forbiddenMethodsSet,
+ referrerPolicySet
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/fetch/global.js
+var require_global$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const 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
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/fetch/util.js
+var require_util$5 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { redirectStatusSet, referrerPolicySet: referrerPolicyTokens, badPortsSet } = require_constants$3();
+ const { getGlobalOrigin } = require_global$1();
+ const { performance: performance$1 } = __require("perf_hooks");
+ const { isBlobLike, toUSVString, ReadableStreamFrom } = require_util$6();
+ const assert$18 = __require("assert");
+ const { isUint8Array: isUint8Array$1 } = __require("util/types");
+ let supportedHashes = [];
+ /** @type {import('crypto')|undefined} */
+ let crypto;
+ try {
+ crypto = __require("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");
+ if (location !== null && isValidHeaderValue(location)) location = new URL(location, responseURL(response));
+ if (location && !location.hash) location.hash = requestFragment;
+ return location;
+ }
+ /** @returns {URL} */
+ 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 || c >= 32 && c <= 126 || c >= 128 && c <= 255)) return false;
+ }
+ return true;
+ }
+ /**
+ * @see https://tools.ietf.org/html/rfc7230#section-3.2.6
+ * @param {number} c
+ */
+ 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;
+ }
+ }
+ /**
+ * @param {string} characters
+ */
+ 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;
+ }
+ /**
+ * @see https://fetch.spec.whatwg.org/#header-name
+ * @param {string} potentialValue
+ */
+ function isValidHeaderName(potentialValue) {
+ return isValidHTTPToken(potentialValue);
+ }
+ /**
+ * @see https://fetch.spec.whatwg.org/#header-value
+ * @param {string} potentialValue
+ */
+ function isValidHeaderValue(potentialValue) {
+ if (potentialValue.startsWith(" ") || potentialValue.startsWith(" ") || potentialValue.endsWith(" ") || potentialValue.endsWith(" ")) return false;
+ if (potentialValue.includes("\0") || potentialValue.includes("\r") || potentialValue.includes("\n")) return false;
+ return true;
+ }
+ function setRequestReferrerPolicyOnRedirect(request, actualResponse) {
+ const { headersList } = actualResponse;
+ const policyHeader = (headersList.get("referrer-policy") ?? "").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);
+ }
+ function appendRequestOriginHeader(request) {
+ let serializedOrigin = request.origin;
+ if (request.responseTainting === "cors" || request.mode === "websocket") {
+ if (serializedOrigin) request.headersList.append("origin", serializedOrigin);
+ } 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:
+ }
+ if (serializedOrigin) request.headersList.append("origin", serializedOrigin);
+ }
+ }
+ function coarsenedSharedCurrentTime(crossOriginIsolatedCapability) {
+ return performance$1.now();
+ }
+ 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$18(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;
+ }
+ /**
+ * 1. If referrerURL is a potentially trustworthy URL and
+ * request’s current URL is not a potentially trustworthy URL,
+ * then return no referrer.
+ * 2. Return referrerOrigin
+ */
+ default: return isNonPotentiallyTrustWorthy ? "no-referrer" : referrerOrigin;
+ }
+ }
+ /**
+ * @see https://w3c.github.io/webappsec-referrer-policy/#strip-url
+ * @param {URL} url
+ * @param {boolean|undefined} originOnly
+ */
+ function stripURLForReferrer(url, originOnly) {
+ assert$18(url instanceof 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;
+ }
+ }
+ /**
+ * @see https://w3c.github.io/webappsec-subresource-integrity/#does-response-match-metadatalist
+ * @param {Uint8Array} bytes
+ * @param {string} metadataList
+ */
+ function bytesMatch(bytes, metadataList) {
+ /* istanbul ignore if: only if node is built with --without-ssl */
+ if (crypto === void 0) return true;
+ const parsedMetadata = parseMetadata(metadataList);
+ if (parsedMetadata === "no metadata") return true;
+ if (parsedMetadata.length === 0) return true;
+ const metadata = filterMetadataListByAlgorithm(parsedMetadata, getStrongestMetadata(parsedMetadata));
+ 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;
+ }
+ const parseHashWithOptions = /(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i;
+ /**
+ * @see https://w3c.github.io/webappsec-subresource-integrity/#parse-metadata
+ * @param {string} metadata
+ */
+ function parseMetadata(metadata) {
+ /** @type {{ algo: string, hash: string }[]} */
+ 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;
+ }
+ /**
+ * @param {{ algo: 'sha256' | 'sha384' | 'sha512' }[]} metadataList
+ */
+ 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;
+ }
+ /**
+ * Compares two base64 strings, allowing for base64url
+ * in the second string.
+ *
+ * @param {string} actualValue always base64
+ * @param {string} expectedValue base64 or base64url
+ * @returns {boolean}
+ */
+ 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) {}
+ /**
+ * @link {https://html.spec.whatwg.org/multipage/origin.html#same-origin}
+ * @param {URL} A
+ * @param {URL} B
+ */
+ 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;
+ return {
+ promise: new Promise((resolve, reject) => {
+ res = resolve;
+ rej = reject;
+ }),
+ resolve: res,
+ reject: rej
+ };
+ }
+ function isAborted(fetchParams) {
+ return fetchParams.controller.state === "aborted";
+ }
+ function isCancelled(fetchParams) {
+ return fetchParams.controller.state === "aborted" || fetchParams.controller.state === "terminated";
+ }
+ const normalizeMethodRecord = {
+ delete: "DELETE",
+ DELETE: "DELETE",
+ get: "GET",
+ GET: "GET",
+ head: "HEAD",
+ HEAD: "HEAD",
+ options: "OPTIONS",
+ OPTIONS: "OPTIONS",
+ post: "POST",
+ POST: "POST",
+ put: "PUT",
+ PUT: "PUT"
+ };
+ Object.setPrototypeOf(normalizeMethodRecord, null);
+ /**
+ * @see https://fetch.spec.whatwg.org/#concept-method-normalize
+ * @param {string} method
+ */
+ function normalizeMethod(method) {
+ return normalizeMethodRecord[method.toLowerCase()] ?? method;
+ }
+ function serializeJavascriptValueToJSONString(value) {
+ const result = JSON.stringify(value);
+ if (result === void 0) throw new TypeError("Value is not JSON serializable");
+ assert$18(typeof result === "string");
+ return result;
+ }
+ const esIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));
+ /**
+ * @see https://webidl.spec.whatwg.org/#dfn-iterator-prototype-object
+ * @param {() => unknown[]} iterator
+ * @param {string} name name of the instance
+ * @param {'key'|'value'|'key+value'} kind
+ */
+ function makeIterator(iterator, name, kind) {
+ const object = {
+ index: 0,
+ kind,
+ target: iterator
+ };
+ const i = {
+ next() {
+ if (Object.getPrototypeOf(this) !== i) throw new TypeError(`'next' called on an object that does not implement interface ${name} Iterator.`);
+ const { index, kind, target } = object;
+ const values = target();
+ if (index >= values.length) return {
+ value: void 0,
+ done: true
+ };
+ const pair = values[index];
+ object.index = index + 1;
+ return iteratorResult(pair, kind);
+ },
+ [Symbol.toStringTag]: `${name} Iterator`
+ };
+ Object.setPrototypeOf(i, esIteratorPrototype);
+ return Object.setPrototypeOf({}, i);
+ }
+ function iteratorResult(pair, kind) {
+ let result;
+ switch (kind) {
+ case "key":
+ result = pair[0];
+ break;
+ case "value":
+ result = pair[1];
+ break;
+ case "key+value":
+ result = pair;
+ break;
+ }
+ return {
+ value: result,
+ done: false
+ };
+ }
+ /**
+ * @see https://fetch.spec.whatwg.org/#body-fully-read
+ */
+ 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);
+ }
+ }
+ /** @type {ReadableStream} */
+ let ReadableStream = globalThis.ReadableStream;
+ function isReadableStreamLike(stream) {
+ if (!ReadableStream) ReadableStream = __require("stream/web").ReadableStream;
+ return stream instanceof ReadableStream || stream[Symbol.toStringTag] === "ReadableStream" && typeof stream.tee === "function";
+ }
+ const MAXIMUM_ARGUMENT_LENGTH = 65535;
+ /**
+ * @see https://infra.spec.whatwg.org/#isomorphic-decode
+ * @param {number[]|Uint8Array} input
+ */
+ function isomorphicDecode(input) {
+ if (input.length < MAXIMUM_ARGUMENT_LENGTH) return String.fromCharCode(...input);
+ return input.reduce((previous, current) => previous + String.fromCharCode(current), "");
+ }
+ /**
+ * @param {ReadableStreamController} controller
+ */
+ function readableStreamClose(controller) {
+ try {
+ controller.close();
+ } catch (err) {
+ if (!err.message.includes("Controller is already closed")) throw err;
+ }
+ }
+ /**
+ * @see https://infra.spec.whatwg.org/#isomorphic-encode
+ * @param {string} input
+ */
+ function isomorphicEncode(input) {
+ for (let i = 0; i < input.length; i++) assert$18(input.charCodeAt(i) <= 255);
+ return input;
+ }
+ /**
+ * @see https://streams.spec.whatwg.org/#readablestreamdefaultreader-read-all-bytes
+ * @see https://streams.spec.whatwg.org/#read-loop
+ * @param {ReadableStreamDefaultReader} reader
+ */
+ 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$1(chunk)) throw new TypeError("Received non-Uint8Array chunk");
+ bytes.push(chunk);
+ byteLength += chunk.length;
+ }
+ }
+ /**
+ * @see https://fetch.spec.whatwg.org/#is-local
+ * @param {URL} url
+ */
+ function urlIsLocal(url) {
+ assert$18("protocol" in url);
+ const protocol = url.protocol;
+ return protocol === "about:" || protocol === "blob:" || protocol === "data:";
+ }
+ /**
+ * @param {string|URL} url
+ */
+ function urlHasHttpsScheme(url) {
+ if (typeof url === "string") return url.startsWith("https:");
+ return url.protocol === "https:";
+ }
+ /**
+ * @see https://fetch.spec.whatwg.org/#http-scheme
+ * @param {URL} url
+ */
+ function urlIsHttpHttpsScheme(url) {
+ assert$18("protocol" in url);
+ const protocol = url.protocol;
+ return protocol === "http:" || protocol === "https:";
+ }
+ module.exports = {
+ isAborted,
+ isCancelled,
+ createDeferredPromise,
+ ReadableStreamFrom,
+ toUSVString,
+ tryUpgradeRequestToAPotentiallyTrustworthyURL,
+ coarsenedSharedCurrentTime,
+ determineRequestsReferrer,
+ makePolicyContainer,
+ clonePolicyContainer,
+ appendFetchMetadata,
+ appendRequestOriginHeader,
+ TAOCheck,
+ corsCheck,
+ crossOriginResourcePolicyCheck,
+ createOpaqueTimingInfo,
+ setRequestReferrerPolicyOnRedirect,
+ isValidHTTPToken,
+ requestBadPort,
+ requestCurrentURL,
+ responseURL,
+ responseLocationURL,
+ isBlobLike,
+ isURLPotentiallyTrustworthy,
+ isValidReasonPhrase,
+ sameOrigin,
+ normalizeMethod,
+ serializeJavascriptValueToJSONString,
+ makeIterator,
+ isValidHeaderName,
+ isValidHeaderValue,
+ hasOwn: Object.hasOwn || ((dict, key) => Object.prototype.hasOwnProperty.call(dict, key)),
+ isErrorLike,
+ fullyReadBody,
+ bytesMatch,
+ isReadableStreamLike,
+ readableStreamClose,
+ isomorphicEncode,
+ isomorphicDecode,
+ urlIsLocal,
+ urlHasHttpsScheme,
+ urlIsHttpHttpsScheme,
+ readAllBytes,
+ normalizeMethodRecord,
+ parseMetadata
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/fetch/symbols.js
+var require_symbols$3 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ module.exports = {
+ kUrl: Symbol("url"),
+ kHeaders: Symbol("headers"),
+ kSignal: Symbol("signal"),
+ kState: Symbol("state"),
+ kGuard: Symbol("guard"),
+ kRealm: Symbol("realm")
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/fetch/webidl.js
+var require_webidl = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { types: types$4 } = __require("util");
+ const { hasOwn, toUSVString } = require_util$5();
+ /** @type {import('../../types/webidl').Webidl} */
+ const webidl = {};
+ webidl.converters = {};
+ webidl.util = {};
+ webidl.errors = {};
+ webidl.errors.exception = function(message) {
+ return /* @__PURE__ */ 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 = void 0) {
+ if (opts?.strict !== false && !(V instanceof I)) throw new TypeError("Illegal invocation");
+ else return V?.[Symbol.toStringTag] === I.prototype[Symbol.toStringTag];
+ };
+ 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.`,
+ ...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.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 ${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.sequenceConverter = function(converter) {
+ return (V) => {
+ if (webidl.util.Type(V) !== "Object") throw webidl.errors.exception({
+ header: "Sequence",
+ message: `Value of type ${webidl.util.Type(V)} is not an Object.`
+ });
+ /** @type {Generator} */
+ const method = V?.[Symbol.iterator]?.();
+ const seq = [];
+ if (method === void 0 || typeof method.next !== "function") throw webidl.errors.exception({
+ header: "Sequence",
+ message: "Object is not an iterator."
+ });
+ while (true) {
+ const { done, value } = method.next();
+ if (done) break;
+ seq.push(converter(value));
+ }
+ return seq;
+ };
+ };
+ webidl.recordConverter = function(keyConverter, valueConverter) {
+ return (O) => {
+ if (webidl.util.Type(O) !== "Object") throw webidl.errors.exception({
+ header: "Record",
+ message: `Value of type ${webidl.util.Type(O)} is not an Object.`
+ });
+ const result = {};
+ if (!types$4.isProxy(O)) {
+ const keys = Object.keys(O);
+ for (const key of keys) {
+ const typedKey = keyConverter(key);
+ result[typedKey] = valueConverter(O[key]);
+ }
+ return result;
+ }
+ const keys = Reflect.ownKeys(O);
+ for (const key of keys) if (Reflect.getOwnPropertyDescriptor(O, key)?.enumerable) {
+ const typedKey = keyConverter(key);
+ result[typedKey] = valueConverter(O[key]);
+ }
+ return result;
+ };
+ };
+ webidl.interfaceConverter = function(i) {
+ return (V, opts = {}) => {
+ if (opts.strict !== false && !(V instanceof i)) throw webidl.errors.exception({
+ header: i.name,
+ message: `Expected ${V} to be an instance of ${i.name}.`
+ });
+ return V;
+ };
+ };
+ webidl.dictionaryConverter = function(converters) {
+ return (dictionary) => {
+ const type = webidl.util.Type(dictionary);
+ const dict = {};
+ if (type === "Null" || type === "Undefined") return dict;
+ else if (type !== "Object") throw webidl.errors.exception({
+ header: "Dictionary",
+ 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 (!hasOwn(dictionary, key)) throw webidl.errors.exception({
+ header: "Dictionary",
+ message: `Missing required key "${key}".`
+ });
+ }
+ let value = dictionary[key];
+ const hasDefault = hasOwn(options, "defaultValue");
+ if (hasDefault && value !== null) value = value ?? defaultValue;
+ if (required || hasDefault || value !== void 0) {
+ value = converter(value);
+ if (options.allowedValues && !options.allowedValues.includes(value)) throw webidl.errors.exception({
+ header: "Dictionary",
+ message: `${value} is not an accepted type. Expected one of ${options.allowedValues.join(", ")}.`
+ });
+ dict[key] = value;
+ }
+ }
+ return dict;
+ };
+ };
+ webidl.nullableConverter = function(converter) {
+ return (V) => {
+ if (V === null) return V;
+ return converter(V);
+ };
+ };
+ webidl.converters.DOMString = function(V, opts = {}) {
+ if (V === null && opts.legacyNullToEmptyString) return "";
+ if (typeof V === "symbol") throw new TypeError("Could not convert argument of type symbol to string.");
+ return String(V);
+ };
+ webidl.converters.ByteString = function(V) {
+ const x = webidl.converters.DOMString(V);
+ 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) {
+ return Boolean(V);
+ };
+ webidl.converters.any = function(V) {
+ return V;
+ };
+ webidl.converters["long long"] = function(V) {
+ return webidl.util.ConvertToInt(V, 64, "signed");
+ };
+ webidl.converters["unsigned long long"] = function(V) {
+ return webidl.util.ConvertToInt(V, 64, "unsigned");
+ };
+ webidl.converters["unsigned long"] = function(V) {
+ return webidl.util.ConvertToInt(V, 32, "unsigned");
+ };
+ webidl.converters["unsigned short"] = function(V, opts) {
+ return webidl.util.ConvertToInt(V, 16, "unsigned", opts);
+ };
+ webidl.converters.ArrayBuffer = function(V, opts = {}) {
+ if (webidl.util.Type(V) !== "Object" || !types$4.isAnyArrayBuffer(V)) throw webidl.errors.conversionFailed({
+ prefix: `${V}`,
+ argument: `${V}`,
+ types: ["ArrayBuffer"]
+ });
+ if (opts.allowShared === false && types$4.isSharedArrayBuffer(V)) throw webidl.errors.exception({
+ header: "ArrayBuffer",
+ message: "SharedArrayBuffer is not allowed."
+ });
+ return V;
+ };
+ webidl.converters.TypedArray = function(V, T, opts = {}) {
+ if (webidl.util.Type(V) !== "Object" || !types$4.isTypedArray(V) || V.constructor.name !== T.name) throw webidl.errors.conversionFailed({
+ prefix: `${T.name}`,
+ argument: `${V}`,
+ types: [T.name]
+ });
+ if (opts.allowShared === false && types$4.isSharedArrayBuffer(V.buffer)) throw webidl.errors.exception({
+ header: "ArrayBuffer",
+ message: "SharedArrayBuffer is not allowed."
+ });
+ return V;
+ };
+ webidl.converters.DataView = function(V, opts = {}) {
+ if (webidl.util.Type(V) !== "Object" || !types$4.isDataView(V)) throw webidl.errors.exception({
+ header: "DataView",
+ message: "Object is not a DataView."
+ });
+ if (opts.allowShared === false && types$4.isSharedArrayBuffer(V.buffer)) throw webidl.errors.exception({
+ header: "ArrayBuffer",
+ message: "SharedArrayBuffer is not allowed."
+ });
+ return V;
+ };
+ webidl.converters.BufferSource = function(V, opts = {}) {
+ if (types$4.isAnyArrayBuffer(V)) return webidl.converters.ArrayBuffer(V, opts);
+ if (types$4.isTypedArray(V)) return webidl.converters.TypedArray(V, V.constructor);
+ if (types$4.isDataView(V)) return webidl.converters.DataView(V, opts);
+ throw new TypeError(`Could not convert ${V} to a 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 };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/fetch/dataURL.js
+var require_dataURL = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const assert$17 = __require("assert");
+ const { atob: atob$1 } = __require("buffer");
+ const { isomorphicDecode } = require_util$5();
+ const encoder = new TextEncoder();
+ /**
+ * @see https://mimesniff.spec.whatwg.org/#http-token-code-point
+ */
+ const HTTP_TOKEN_CODEPOINTS = /^[!#$%&'*+-.^_|~A-Za-z0-9]+$/;
+ const HTTP_WHITESPACE_REGEX = /(\u000A|\u000D|\u0009|\u0020)/;
+ /**
+ * @see https://mimesniff.spec.whatwg.org/#http-quoted-string-token-code-point
+ */
+ const HTTP_QUOTED_STRING_TOKENS = /[\u0009|\u0020-\u007E|\u0080-\u00FF]/;
+ /** @param {URL} dataURL */
+ function dataURLProcessor(dataURL) {
+ assert$17(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++;
+ let body = stringPercentDecode(input.slice(mimeTypeLength + 1));
+ if (/;(\u0020){0,}base64$/i.test(mimeType)) {
+ body = forgivingBase64(isomorphicDecode(body));
+ 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
+ };
+ }
+ /**
+ * @param {URL} url
+ * @param {boolean} excludeFragment
+ */
+ function URLSerializer(url, excludeFragment = false) {
+ if (!excludeFragment) return url.href;
+ const href = url.href;
+ const hashLength = url.hash.length;
+ return hashLength === 0 ? href : href.substring(0, href.length - hashLength);
+ }
+ /**
+ * @param {(char: string) => boolean} condition
+ * @param {string} input
+ * @param {{ position: number }} position
+ */
+ function collectASequenceOfCodePoints(condition, input, position) {
+ let result = "";
+ while (position.position < input.length && condition(input[position.position])) {
+ result += input[position.position];
+ position.position++;
+ }
+ return result;
+ }
+ /**
+ * A faster collectASequenceOfCodePoints that only works when comparing a single character.
+ * @param {string} char
+ * @param {string} input
+ * @param {{ position: number }} position
+ */
+ 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);
+ }
+ /** @param {string} input */
+ function stringPercentDecode(input) {
+ return percentDecode(encoder.encode(input));
+ }
+ /** @param {Uint8Array} input */
+ function percentDecode(input) {
+ /** @type {number[]} */
+ const output = [];
+ for (let i = 0; i < input.length; i++) {
+ const byte = input[i];
+ if (byte !== 37) output.push(byte);
+ else if (byte === 37 && !/^[0-9A-Fa-f]{2}$/i.test(String.fromCharCode(input[i + 1], input[i + 2]))) output.push(37);
+ else {
+ const nextTwoBytes = String.fromCharCode(input[i + 1], input[i + 2]);
+ const bytePoint = Number.parseInt(nextTwoBytes, 16);
+ output.push(bytePoint);
+ i += 2;
+ }
+ }
+ return Uint8Array.from(output);
+ }
+ /** @param {string} input */
+ 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(),
+ essence: `${typeLowercase}/${subtypeLowercase}`
+ };
+ while (position.position < input.length) {
+ position.position++;
+ collectASequenceOfCodePoints((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;
+ }
+ /** @param {string} data */
+ function forgivingBase64(data) {
+ data = data.replace(/[\u0009\u000A\u000C\u000D\u0020]/g, "");
+ if (data.length % 4 === 0) data = data.replace(/=?=$/, "");
+ if (data.length % 4 === 1) return "failure";
+ if (/[^+/0-9A-Za-z]/.test(data)) return "failure";
+ const binary = atob$1(data);
+ const bytes = new Uint8Array(binary.length);
+ for (let byte = 0; byte < binary.length; byte++) bytes[byte] = binary.charCodeAt(byte);
+ return bytes;
+ }
+ /**
+ * @param {string} input
+ * @param {{ position: number }} position
+ * @param {boolean?} extractValue
+ */
+ function collectAnHTTPQuotedString(input, position, extractValue) {
+ const positionStart = position.position;
+ let value = "";
+ assert$17(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$17(quoteOrBackslash === "\"");
+ break;
+ }
+ }
+ if (extractValue) return value;
+ return input.slice(positionStart, position.position);
+ }
+ /**
+ * @see https://mimesniff.spec.whatwg.org/#serialize-a-mime-type
+ */
+ function serializeAMimeType(mimeType) {
+ assert$17(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;
+ }
+ /**
+ * @see https://fetch.spec.whatwg.org/#http-whitespace
+ * @param {string} char
+ */
+ function isHTTPWhiteSpace(char) {
+ return char === "\r" || char === "\n" || char === " " || char === " ";
+ }
+ /**
+ * @see https://fetch.spec.whatwg.org/#http-whitespace
+ * @param {string} str
+ */
+ function removeHTTPWhitespace(str, leading = true, trailing = true) {
+ let lead = 0;
+ let trail = str.length - 1;
+ if (leading) for (; lead < str.length && isHTTPWhiteSpace(str[lead]); lead++);
+ if (trailing) for (; trail > 0 && isHTTPWhiteSpace(str[trail]); trail--);
+ return str.slice(lead, trail + 1);
+ }
+ /**
+ * @see https://infra.spec.whatwg.org/#ascii-whitespace
+ * @param {string} char
+ */
+ function isASCIIWhitespace(char) {
+ return char === "\r" || char === "\n" || char === " " || char === "\f" || char === " ";
+ }
+ /**
+ * @see https://infra.spec.whatwg.org/#strip-leading-and-trailing-ascii-whitespace
+ */
+ function removeASCIIWhitespace(str, leading = true, trailing = true) {
+ let lead = 0;
+ let trail = str.length - 1;
+ if (leading) for (; lead < str.length && isASCIIWhitespace(str[lead]); lead++);
+ if (trailing) for (; trail > 0 && isASCIIWhitespace(str[trail]); trail--);
+ return str.slice(lead, trail + 1);
+ }
+ module.exports = {
+ dataURLProcessor,
+ URLSerializer,
+ collectASequenceOfCodePoints,
+ collectASequenceOfCodePointsFast,
+ stringPercentDecode,
+ parseMIMEType,
+ collectAnHTTPQuotedString,
+ serializeAMimeType
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/fetch/file.js
+var require_file = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { Blob: Blob$3, File: NativeFile$2 } = __require("buffer");
+ const { types: types$3 } = __require("util");
+ const { kState } = require_symbols$3();
+ const { isBlobLike } = require_util$5();
+ const { webidl } = require_webidl();
+ const { parseMIMEType, serializeAMimeType } = require_dataURL();
+ const { kEnumerableProperty } = require_util$6();
+ const encoder = new TextEncoder();
+ var File = class File extends Blob$3 {
+ constructor(fileBits, fileName, options = {}) {
+ webidl.argumentLengthCheck(arguments, 2, { header: "File constructor" });
+ fileBits = webidl.converters["sequence"](fileBits);
+ fileName = webidl.converters.USVString(fileName);
+ options = webidl.converters.FilePropertyBag(options);
+ const n = fileName;
+ let t = options.type;
+ let d;
+ substep: {
+ if (t) {
+ t = parseMIMEType(t);
+ if (t === "failure") {
+ t = "";
+ break substep;
+ }
+ t = serializeAMimeType(t).toLowerCase();
+ }
+ d = options.lastModified;
+ }
+ super(processBlobParts(fileBits, options), { type: t });
+ this[kState] = {
+ name: n,
+ lastModified: d,
+ type: t
+ };
+ }
+ get name() {
+ webidl.brandCheck(this, File);
+ return this[kState].name;
+ }
+ get lastModified() {
+ webidl.brandCheck(this, File);
+ return this[kState].lastModified;
+ }
+ get type() {
+ webidl.brandCheck(this, File);
+ return this[kState].type;
+ }
+ };
+ 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";
+ }
+ };
+ Object.defineProperties(File.prototype, {
+ [Symbol.toStringTag]: {
+ value: "File",
+ configurable: true
+ },
+ name: kEnumerableProperty,
+ lastModified: kEnumerableProperty
+ });
+ webidl.converters.Blob = webidl.interfaceConverter(Blob$3);
+ webidl.converters.BlobPart = function(V, opts) {
+ if (webidl.util.Type(V) === "Object") {
+ if (isBlobLike(V)) return webidl.converters.Blob(V, { strict: false });
+ if (ArrayBuffer.isView(V) || types$3.isAnyArrayBuffer(V)) return webidl.converters.BufferSource(V, opts);
+ }
+ return webidl.converters.USVString(V, opts);
+ };
+ webidl.converters["sequence"] = webidl.sequenceConverter(webidl.converters.BlobPart);
+ webidl.converters.FilePropertyBag = webidl.dictionaryConverter([
+ {
+ key: "lastModified",
+ converter: webidl.converters["long long"],
+ get defaultValue() {
+ return Date.now();
+ }
+ },
+ {
+ key: "type",
+ converter: webidl.converters.DOMString,
+ defaultValue: ""
+ },
+ {
+ key: "endings",
+ converter: (value) => {
+ value = webidl.converters.DOMString(value);
+ value = value.toLowerCase();
+ if (value !== "native") value = "transparent";
+ return value;
+ },
+ defaultValue: "transparent"
+ }
+ ]);
+ /**
+ * @see https://www.w3.org/TR/FileAPI/#process-blob-parts
+ * @param {(NodeJS.TypedArray|Blob|string)[]} parts
+ * @param {{ type: string, endings: string }} options
+ */
+ function processBlobParts(parts, options) {
+ /** @type {NodeJS.TypedArray[]} */
+ const bytes = [];
+ for (const element of parts) if (typeof element === "string") {
+ let s = element;
+ if (options.endings === "native") s = convertLineEndingsNative(s);
+ bytes.push(encoder.encode(s));
+ } else if (types$3.isAnyArrayBuffer(element) || types$3.isTypedArray(element)) if (!element.buffer) bytes.push(new Uint8Array(element));
+ else bytes.push(new Uint8Array(element.buffer, element.byteOffset, element.byteLength));
+ else if (isBlobLike(element)) bytes.push(element);
+ return bytes;
+ }
+ /**
+ * @see https://www.w3.org/TR/FileAPI/#convert-line-endings-to-native
+ * @param {string} s
+ */
+ function convertLineEndingsNative(s) {
+ let nativeLineEnding = "\n";
+ if (process.platform === "win32") nativeLineEnding = "\r\n";
+ return s.replace(/\r?\n/g, nativeLineEnding);
+ }
+ function isFileLike(object) {
+ return NativeFile$2 && object instanceof NativeFile$2 || object instanceof File || object && (typeof object.stream === "function" || typeof object.arrayBuffer === "function") && object[Symbol.toStringTag] === "File";
+ }
+ module.exports = {
+ File,
+ FileLike,
+ isFileLike
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/fetch/formdata.js
+var require_formdata = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { isBlobLike, toUSVString, makeIterator } = require_util$5();
+ const { kState } = require_symbols$3();
+ const { File: UndiciFile, FileLike, isFileLike } = require_file();
+ const { webidl } = require_webidl();
+ const { Blob: Blob$2, File: NativeFile$1 } = __require("buffer");
+ /** @type {globalThis['File']} */
+ const File = NativeFile$1 ?? UndiciFile;
+ var FormData = class FormData {
+ constructor(form) {
+ 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);
+ webidl.argumentLengthCheck(arguments, 2, { header: "FormData.append" });
+ 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);
+ value = isBlobLike(value) ? webidl.converters.Blob(value, { strict: false }) : webidl.converters.USVString(value);
+ filename = arguments.length === 3 ? webidl.converters.USVString(filename) : void 0;
+ const entry = makeEntry(name, value, filename);
+ this[kState].push(entry);
+ }
+ delete(name) {
+ webidl.brandCheck(this, FormData);
+ webidl.argumentLengthCheck(arguments, 1, { header: "FormData.delete" });
+ name = webidl.converters.USVString(name);
+ this[kState] = this[kState].filter((entry) => entry.name !== name);
+ }
+ get(name) {
+ webidl.brandCheck(this, FormData);
+ webidl.argumentLengthCheck(arguments, 1, { header: "FormData.get" });
+ name = webidl.converters.USVString(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);
+ webidl.argumentLengthCheck(arguments, 1, { header: "FormData.getAll" });
+ name = webidl.converters.USVString(name);
+ return this[kState].filter((entry) => entry.name === name).map((entry) => entry.value);
+ }
+ has(name) {
+ webidl.brandCheck(this, FormData);
+ webidl.argumentLengthCheck(arguments, 1, { header: "FormData.has" });
+ name = webidl.converters.USVString(name);
+ return this[kState].findIndex((entry) => entry.name === name) !== -1;
+ }
+ set(name, value, filename = void 0) {
+ webidl.brandCheck(this, FormData);
+ webidl.argumentLengthCheck(arguments, 2, { header: "FormData.set" });
+ 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);
+ value = isBlobLike(value) ? webidl.converters.Blob(value, { strict: false }) : webidl.converters.USVString(value);
+ filename = arguments.length === 3 ? toUSVString(filename) : void 0;
+ const entry = makeEntry(name, value, filename);
+ const idx = this[kState].findIndex((entry) => entry.name === name);
+ if (idx !== -1) this[kState] = [
+ ...this[kState].slice(0, idx),
+ entry,
+ ...this[kState].slice(idx + 1).filter((entry) => entry.name !== name)
+ ];
+ else this[kState].push(entry);
+ }
+ entries() {
+ webidl.brandCheck(this, FormData);
+ return makeIterator(() => this[kState].map((pair) => [pair.name, pair.value]), "FormData", "key+value");
+ }
+ keys() {
+ webidl.brandCheck(this, FormData);
+ return makeIterator(() => this[kState].map((pair) => [pair.name, pair.value]), "FormData", "key");
+ }
+ values() {
+ webidl.brandCheck(this, FormData);
+ return makeIterator(() => this[kState].map((pair) => [pair.name, pair.value]), "FormData", "value");
+ }
+ /**
+ * @param {(value: string, key: string, self: FormData) => void} callbackFn
+ * @param {unknown} thisArg
+ */
+ forEach(callbackFn, thisArg = globalThis) {
+ webidl.brandCheck(this, FormData);
+ webidl.argumentLengthCheck(arguments, 1, { header: "FormData.forEach" });
+ if (typeof callbackFn !== "function") throw new TypeError("Failed to execute 'forEach' on 'FormData': parameter 1 is not of type 'Function'.");
+ for (const [key, value] of this) callbackFn.apply(thisArg, [
+ value,
+ key,
+ this
+ ]);
+ }
+ };
+ FormData.prototype[Symbol.iterator] = FormData.prototype.entries;
+ Object.defineProperties(FormData.prototype, { [Symbol.toStringTag]: {
+ value: "FormData",
+ configurable: true
+ } });
+ /**
+ * @see https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#create-an-entry
+ * @param {string} name
+ * @param {string|Blob} value
+ * @param {?string} filename
+ * @returns
+ */
+ function makeEntry(name, value, filename) {
+ name = Buffer.from(name).toString("utf8");
+ if (typeof value === "string") value = Buffer.from(value).toString("utf8");
+ else {
+ if (!isFileLike(value)) value = value instanceof Blob$2 ? new File([value], "blob", { type: value.type }) : new FileLike(value, "blob", { type: value.type });
+ if (filename !== void 0) {
+ /** @type {FilePropertyBag} */
+ const options = {
+ type: value.type,
+ lastModified: value.lastModified
+ };
+ value = NativeFile$1 && value instanceof NativeFile$1 || value instanceof UndiciFile ? new File([value], filename, options) : new FileLike(value, filename, options);
+ }
+ }
+ return {
+ name,
+ value
+ };
+ }
+ module.exports = { FormData };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/fetch/body.js
+var require_body = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const Busboy = require_main();
+ const util = require_util$6();
+ const { ReadableStreamFrom, isBlobLike, isReadableStreamLike, readableStreamClose, createDeferredPromise, fullyReadBody } = require_util$5();
+ const { FormData } = require_formdata();
+ const { kState } = require_symbols$3();
+ const { webidl } = require_webidl();
+ const { DOMException, structuredClone } = require_constants$3();
+ const { Blob: Blob$1, File: NativeFile } = __require("buffer");
+ const { kBodyUsed } = require_symbols$4();
+ const assert$16 = __require("assert");
+ const { isErrored } = require_util$6();
+ const { isUint8Array, isArrayBuffer } = __require("util/types");
+ const { File: UndiciFile } = require_file();
+ const { parseMIMEType, serializeAMimeType } = require_dataURL();
+ let random;
+ try {
+ const crypto = __require("node:crypto");
+ random = (max) => crypto.randomInt(0, max);
+ } catch {
+ random = (max) => Math.floor(Math.random(max));
+ }
+ let ReadableStream = globalThis.ReadableStream;
+ /** @type {globalThis['File']} */
+ const File = NativeFile ?? UndiciFile;
+ const textEncoder = new TextEncoder();
+ const textDecoder = new TextDecoder();
+ function extractBody(object, keepalive = false) {
+ if (!ReadableStream) ReadableStream = __require("stream/web").ReadableStream;
+ let stream = null;
+ if (object instanceof ReadableStream) stream = object;
+ else if (isBlobLike(object)) stream = object.stream();
+ else stream = new ReadableStream({
+ async pull(controller) {
+ controller.enqueue(typeof source === "string" ? textEncoder.encode(source) : source);
+ queueMicrotask(() => readableStreamClose(controller));
+ },
+ start() {},
+ type: void 0
+ });
+ assert$16(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\nContent-Disposition: form-data`;
+ /*! formdata-polyfill. MIT License. Jimmy Wärting */
+ 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 chunk = textEncoder.encode(prefix + `; name="${escape(normalizeLinefeeds(name))}"\r\n\r\n${normalizeLinefeeds(value)}\r\n`);
+ blobParts.push(chunk);
+ length += chunk.byteLength;
+ } else {
+ const chunk = textEncoder.encode(`${prefix}; name="${escape(normalizeLinefeeds(name))}"` + (value.name ? `; filename="${escape(value.name)}"` : "") + `\r
+Content-Type: ${value.type || "application/octet-stream"}\r\n\r\n`);
+ blobParts.push(chunk, value, rn);
+ if (typeof value.size === "number") length += chunk.byteLength + value.size + rn.byteLength;
+ else hasUnknownSizeValue = true;
+ }
+ const chunk = textEncoder.encode(`--${boundary}--`);
+ 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();
+ });
+ else if (!isErrored(stream)) controller.enqueue(new Uint8Array(value));
+ return controller.desiredSize > 0;
+ },
+ async cancel(reason) {
+ await iterator.return();
+ },
+ type: void 0
+ });
+ }
+ return [{
+ stream,
+ source,
+ length
+ }, type];
+ }
+ function safelyExtractBody(object, keepalive = false) {
+ if (!ReadableStream)
+ // istanbul ignore next
+ ReadableStream = __require("stream/web").ReadableStream;
+ if (object instanceof ReadableStream) {
+ // istanbul ignore next
+ assert$16(!util.isDisturbed(object), "The body has already been consumed.");
+ // istanbul ignore next
+ assert$16(!object.locked, "The stream is locked.");
+ }
+ return extractBody(object, keepalive);
+ }
+ function cloneBody(body) {
+ const [out1, out2] = body.stream.tee();
+ const [, finalClone] = structuredClone(out2, { transfer: [out2] }).tee();
+ body.stream = out1;
+ return {
+ stream: finalClone,
+ length: body.length,
+ source: body.source
+ };
+ }
+ async function* consumeBody(body) {
+ if (body) if (isUint8Array(body)) yield body;
+ else {
+ const stream = body.stream;
+ if (util.isDisturbed(stream)) throw new TypeError("The body has already been consumed.");
+ if (stream.locked) throw new TypeError("The stream is locked.");
+ stream[kBodyUsed] = true;
+ yield* stream;
+ }
+ }
+ function throwIfAborted(state) {
+ if (state.aborted) throw new DOMException("The operation was aborted.", "AbortError");
+ }
+ function bodyMixinMethods(instance) {
+ return {
+ blob() {
+ return specConsumeBody(this, (bytes) => {
+ let mimeType = bodyMimeType(this);
+ if (mimeType === "failure") mimeType = "";
+ else if (mimeType) mimeType = serializeAMimeType(mimeType);
+ return new Blob$1([bytes], { type: mimeType });
+ }, instance);
+ },
+ arrayBuffer() {
+ return specConsumeBody(this, (bytes) => {
+ return new Uint8Array(bytes).buffer;
+ }, instance);
+ },
+ text() {
+ return specConsumeBody(this, utf8DecodeBytes, instance);
+ },
+ json() {
+ return specConsumeBody(this, parseJSONFromBytes, instance);
+ },
+ async formData() {
+ webidl.brandCheck(this, instance);
+ throwIfAborted(this[kState]);
+ const contentType = this.headers.get("Content-Type");
+ if (/multipart\/form-data/.test(contentType)) {
+ const headers = {};
+ for (const [key, value] of this.headers) headers[key.toLowerCase()] = value;
+ const responseFormData = new FormData();
+ let busboy;
+ try {
+ busboy = new Busboy({
+ headers,
+ preservePath: true
+ });
+ } catch (err) {
+ throw new DOMException(`${err}`, "AbortError");
+ }
+ busboy.on("field", (name, value) => {
+ responseFormData.append(name, value);
+ });
+ busboy.on("file", (name, value, filename, encoding, mimeType) => {
+ const chunks = [];
+ if (encoding === "base64" || encoding.toLowerCase() === "base64") {
+ let base64chunk = "";
+ value.on("data", (chunk) => {
+ base64chunk += chunk.toString().replace(/[\r\n]/gm, "");
+ const end = base64chunk.length - base64chunk.length % 4;
+ chunks.push(Buffer.from(base64chunk.slice(0, end), "base64"));
+ base64chunk = base64chunk.slice(end);
+ });
+ value.on("end", () => {
+ chunks.push(Buffer.from(base64chunk, "base64"));
+ responseFormData.append(name, new File(chunks, filename, { type: mimeType }));
+ });
+ } else {
+ value.on("data", (chunk) => {
+ chunks.push(chunk);
+ });
+ value.on("end", () => {
+ responseFormData.append(name, new File(chunks, filename, { type: mimeType }));
+ });
+ }
+ });
+ const busboyResolve = new Promise((resolve, reject) => {
+ busboy.on("finish", resolve);
+ busboy.on("error", (err) => reject(new TypeError(err)));
+ });
+ if (this.body !== null) for await (const chunk of consumeBody(this[kState].body)) busboy.write(chunk);
+ busboy.end();
+ await busboyResolve;
+ return responseFormData;
+ } else if (/application\/x-www-form-urlencoded/.test(contentType)) {
+ let entries;
+ try {
+ let text = "";
+ const streamingDecoder = new TextDecoder("utf-8", { ignoreBOM: true });
+ for await (const chunk of consumeBody(this[kState].body)) {
+ if (!isUint8Array(chunk)) throw new TypeError("Expected Uint8Array chunk");
+ text += streamingDecoder.decode(chunk, { stream: true });
+ }
+ text += streamingDecoder.decode();
+ entries = new URLSearchParams(text);
+ } catch (err) {
+ // istanbul ignore next: Unclear when new URLSearchParams can fail on a string.
+ throw Object.assign(/* @__PURE__ */ new TypeError(), { cause: err });
+ }
+ const formData = new FormData();
+ for (const [name, value] of entries) formData.append(name, value);
+ return formData;
+ } else {
+ await Promise.resolve();
+ throwIfAborted(this[kState]);
+ throw webidl.errors.exception({
+ header: `${instance.name}.formData`,
+ message: "Could not parse content as FormData."
+ });
+ }
+ }
+ };
+ }
+ function mixinBody(prototype) {
+ Object.assign(prototype.prototype, bodyMixinMethods(prototype));
+ }
+ /**
+ * @see https://fetch.spec.whatwg.org/#concept-body-consume-body
+ * @param {Response|Request} object
+ * @param {(value: unknown) => unknown} convertBytesToJSValue
+ * @param {Response|Request} instance
+ */
+ async function specConsumeBody(object, convertBytesToJSValue, instance) {
+ webidl.brandCheck(object, instance);
+ throwIfAborted(object[kState]);
+ if (bodyUnusable(object[kState].body)) throw new TypeError("Body is unusable");
+ const promise = createDeferredPromise();
+ const errorSteps = (error) => promise.reject(error);
+ const successSteps = (data) => {
+ try {
+ promise.resolve(convertBytesToJSValue(data));
+ } catch (e) {
+ errorSteps(e);
+ }
+ };
+ if (object[kState].body == null) {
+ successSteps(new Uint8Array());
+ return promise.promise;
+ }
+ await fullyReadBody(object[kState].body, successSteps, errorSteps);
+ return promise.promise;
+ }
+ function bodyUnusable(body) {
+ return body != null && (body.stream.locked || util.isDisturbed(body.stream));
+ }
+ /**
+ * @see https://encoding.spec.whatwg.org/#utf-8-decode
+ * @param {Buffer} buffer
+ */
+ function utf8DecodeBytes(buffer) {
+ if (buffer.length === 0) return "";
+ if (buffer[0] === 239 && buffer[1] === 187 && buffer[2] === 191) buffer = buffer.subarray(3);
+ return textDecoder.decode(buffer);
+ }
+ /**
+ * @see https://infra.spec.whatwg.org/#parse-json-bytes-to-a-javascript-value
+ * @param {Uint8Array} bytes
+ */
+ function parseJSONFromBytes(bytes) {
+ return JSON.parse(utf8DecodeBytes(bytes));
+ }
+ /**
+ * @see https://fetch.spec.whatwg.org/#concept-body-mime-type
+ * @param {import('./response').Response|import('./request').Request} object
+ */
+ function bodyMimeType(object) {
+ const { headersList } = object[kState];
+ const contentType = headersList.get("content-type");
+ if (contentType === null) return "failure";
+ return parseMIMEType(contentType);
+ }
+ module.exports = {
+ extractBody,
+ safelyExtractBody,
+ cloneBody,
+ mixinBody
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/core/request.js
+var require_request$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { InvalidArgumentError, NotSupportedError } = require_errors();
+ const assert$15 = __require("assert");
+ const { kHTTP2BuildRequest, kHTTP2CopyHeaders, kHTTP1BuildRequest } = require_symbols$4();
+ const util = require_util$6();
+ /**
+ * Verifies that the given val is a valid HTTP token
+ * per the rules defined in RFC 7230
+ * See https://tools.ietf.org/html/rfc7230#section-3.2.6
+ */
+ const tokenRegExp = /^[\^_`a-zA-Z\-0-9!#$%&'*+.|~]+$/;
+ /**
+ * Matches if val contains an invalid field-vchar
+ * field-value = *( field-content / obs-fold )
+ * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]
+ * field-vchar = VCHAR / obs-text
+ */
+ const headerCharRegex = /[^\t\x20-\x7e\x80-\xff]/;
+ const invalidPathRegex = /[^\u0021-\u00ff]/;
+ const kHandler = Symbol("handler");
+ const channels = {};
+ let extractBody;
+ try {
+ const diagnosticsChannel = __require("diagnostics_channel");
+ channels.create = diagnosticsChannel.channel("undici:request:create");
+ channels.bodySent = diagnosticsChannel.channel("undici:request:bodySent");
+ channels.headers = diagnosticsChannel.channel("undici:request:headers");
+ channels.trailers = diagnosticsChannel.channel("undici:request:trailers");
+ channels.error = diagnosticsChannel.channel("undici:request:error");
+ } catch {
+ channels.create = { hasSubscribers: false };
+ channels.bodySent = { hasSubscribers: false };
+ channels.headers = { hasSubscribers: false };
+ channels.trailers = { hasSubscribers: false };
+ channels.error = { hasSubscribers: false };
+ }
+ var Request = class Request {
+ constructor(origin, { path, method, body, headers, query, idempotent, blocking, upgrade, headersTimeout, bodyTimeout, reset, throwOnError, expectContinue }, 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.exec(path) !== null) throw new InvalidArgumentError("invalid request path");
+ if (typeof method !== "string") throw new InvalidArgumentError("method must be a string");
+ else if (tokenRegExp.exec(method) === null) throw new InvalidArgumentError("invalid request method");
+ if (upgrade && typeof upgrade !== "string") throw new InvalidArgumentError("upgrade must be a string");
+ 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 (util.isStream(body)) {
+ this.body = body;
+ const rState = this.body._readableState;
+ if (!rState || !rState.autoDestroy) {
+ this.endHandler = function autoDestroy() {
+ util.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 (util.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 (util.isFormDataLike(body) || util.isIterable(body) || util.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 ? util.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") {
+ const keys = Object.keys(headers);
+ for (let i = 0; i < keys.length; i++) {
+ const key = keys[i];
+ processHeader(this, key, headers[key]);
+ }
+ } else if (headers != null) throw new InvalidArgumentError("headers must be an object or an array");
+ if (util.isFormDataLike(this.body)) {
+ if (util.nodeMajor < 16 || util.nodeMajor === 16 && util.nodeMinor < 8) throw new InvalidArgumentError("Form-Data bodies are only supported in node v16.8 and newer.");
+ if (!extractBody) extractBody = require_body().extractBody;
+ const [bodyStream, contentType] = extractBody(body);
+ if (this.contentType == null) {
+ this.contentType = contentType;
+ this.headers += `content-type: ${contentType}\r\n`;
+ }
+ this.body = bodyStream.stream;
+ this.contentLength = bodyStream.length;
+ } else if (util.isBlobLike(body) && this.contentType == null && body.type) {
+ this.contentType = body.type;
+ this.headers += `content-type: ${body.type}\r\n`;
+ }
+ util.validateHandler(handler, method, upgrade);
+ this.servername = util.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$15(!this.aborted);
+ assert$15(!this.completed);
+ if (this.error) abort(this.error);
+ else {
+ this.abort = abort;
+ return this[kHandler].onConnect(abort);
+ }
+ }
+ onHeaders(statusCode, headers, resume, statusText) {
+ assert$15(!this.aborted);
+ assert$15(!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$15(!this.aborted);
+ assert$15(!this.completed);
+ try {
+ return this[kHandler].onData(chunk);
+ } catch (err) {
+ this.abort(err);
+ return false;
+ }
+ }
+ onUpgrade(statusCode, headers, socket) {
+ assert$15(!this.aborted);
+ assert$15(!this.completed);
+ return this[kHandler].onUpgrade(statusCode, headers, socket);
+ }
+ onComplete(trailers) {
+ this.onFinally();
+ assert$15(!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(error) {
+ this.onFinally();
+ if (channels.error.hasSubscribers) channels.error.publish({
+ request: this,
+ error
+ });
+ if (this.aborted) return;
+ this.aborted = true;
+ return this[kHandler].onError(error);
+ }
+ 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;
+ }
+ static [kHTTP1BuildRequest](origin, opts, handler) {
+ return new Request(origin, opts, handler);
+ }
+ static [kHTTP2BuildRequest](origin, opts, handler) {
+ const headers = opts.headers;
+ opts = {
+ ...opts,
+ headers: null
+ };
+ const request = new Request(origin, opts, handler);
+ request.headers = {};
+ 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(request, headers[i], headers[i + 1], true);
+ } else if (headers && typeof headers === "object") {
+ const keys = Object.keys(headers);
+ for (let i = 0; i < keys.length; i++) {
+ const key = keys[i];
+ processHeader(request, key, headers[key], true);
+ }
+ } else if (headers != null) throw new InvalidArgumentError("headers must be an object or an array");
+ return request;
+ }
+ static [kHTTP2CopyHeaders](raw) {
+ const rawHeaders = raw.split("\r\n");
+ const headers = {};
+ for (const header of rawHeaders) {
+ const [key, value] = header.split(": ");
+ if (value == null || value.length === 0) continue;
+ if (headers[key]) headers[key] += `,${value}`;
+ else headers[key] = value;
+ }
+ return headers;
+ }
+ };
+ function processHeaderValue(key, val, skipAppend) {
+ if (val && typeof val === "object") throw new InvalidArgumentError(`invalid ${key} header`);
+ val = val != null ? `${val}` : "";
+ if (headerCharRegex.exec(val) !== null) throw new InvalidArgumentError(`invalid ${key} header`);
+ return skipAppend ? val : `${key}: ${val}\r\n`;
+ }
+ function processHeader(request, key, val, skipAppend = false) {
+ if (val && typeof val === "object" && !Array.isArray(val)) throw new InvalidArgumentError(`invalid ${key} header`);
+ else if (val === void 0) return;
+ if (request.host === null && key.length === 4 && key.toLowerCase() === "host") {
+ if (headerCharRegex.exec(val) !== null) throw new InvalidArgumentError(`invalid ${key} header`);
+ request.host = val;
+ } else if (request.contentLength === null && key.length === 14 && key.toLowerCase() === "content-length") {
+ request.contentLength = parseInt(val, 10);
+ if (!Number.isFinite(request.contentLength)) throw new InvalidArgumentError("invalid content-length header");
+ } else if (request.contentType === null && key.length === 12 && key.toLowerCase() === "content-type") {
+ request.contentType = val;
+ if (skipAppend) request.headers[key] = processHeaderValue(key, val, skipAppend);
+ else request.headers += processHeaderValue(key, val);
+ } else if (key.length === 17 && key.toLowerCase() === "transfer-encoding") throw new InvalidArgumentError("invalid transfer-encoding header");
+ else if (key.length === 10 && key.toLowerCase() === "connection") {
+ const value = typeof val === "string" ? val.toLowerCase() : null;
+ if (value !== "close" && value !== "keep-alive") throw new InvalidArgumentError("invalid connection header");
+ else if (value === "close") request.reset = true;
+ } else if (key.length === 10 && key.toLowerCase() === "keep-alive") throw new InvalidArgumentError("invalid keep-alive header");
+ else if (key.length === 7 && key.toLowerCase() === "upgrade") throw new InvalidArgumentError("invalid upgrade header");
+ else if (key.length === 6 && key.toLowerCase() === "expect") throw new NotSupportedError("expect header not supported");
+ else if (tokenRegExp.exec(key) === null) throw new InvalidArgumentError("invalid header key");
+ else if (Array.isArray(val)) for (let i = 0; i < val.length; i++) if (skipAppend) if (request.headers[key]) request.headers[key] += `,${processHeaderValue(key, val[i], skipAppend)}`;
+ else request.headers[key] = processHeaderValue(key, val[i], skipAppend);
+ else request.headers += processHeaderValue(key, val[i]);
+ else if (skipAppend) request.headers[key] = processHeaderValue(key, val, skipAppend);
+ else request.headers += processHeaderValue(key, val);
+ }
+ module.exports = Request;
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/dispatcher.js
+var require_dispatcher = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const EventEmitter = __require("events");
+ var Dispatcher = class extends EventEmitter {
+ dispatch() {
+ throw new Error("not implemented");
+ }
+ close() {
+ throw new Error("not implemented");
+ }
+ destroy() {
+ throw new Error("not implemented");
+ }
+ };
+ module.exports = Dispatcher;
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/dispatcher-base.js
+var require_dispatcher_base = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const Dispatcher = require_dispatcher();
+ const { ClientDestroyedError, ClientClosedError, InvalidArgumentError } = require_errors();
+ const { kDestroy, kClose, kDispatch, kInterceptors } = require_symbols$4();
+ const kDestroyed = Symbol("destroyed");
+ const kClosed = Symbol("closed");
+ const kOnDestroyed = Symbol("onDestroyed");
+ const kOnClosed = Symbol("onClosed");
+ const kInterceptedDispatch = Symbol("Intercepted Dispatch");
+ var DispatcherBase = class extends Dispatcher {
+ constructor() {
+ super();
+ this[kDestroyed] = false;
+ this[kOnDestroyed] = null;
+ this[kClosed] = false;
+ this[kOnClosed] = [];
+ }
+ 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--) if (typeof this[kInterceptors][i] !== "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, (err, data) => {
+ return err ? reject(err) : 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;
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/core/connect.js
+var require_connect = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const net$1 = __require("net");
+ const assert$14 = __require("assert");
+ const util = require_util$6();
+ const { InvalidArgumentError, ConnectTimeoutError } = require_errors();
+ let tls;
+ let SessionCache;
+ if (global.FinalizationRegistry && !process.env.NODE_V8_COVERAGE) 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, ...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("tls");
+ servername = servername || options.servername || util.getServerName(host) || null;
+ const sessionKey = servername || hostname;
+ const session = sessionCache.get(sessionKey) || null;
+ assert$14(sessionKey);
+ socket = tls.connect({
+ highWaterMark: 16384,
+ ...options,
+ servername,
+ session,
+ localAddress,
+ ALPNProtocols: allowH2 ? ["http/1.1", "h2"] : ["http/1.1"],
+ socket: httpSocket,
+ port: port || 443,
+ host: hostname
+ });
+ socket.on("session", function(session) {
+ sessionCache.set(sessionKey, session);
+ });
+ } else {
+ assert$14(!httpSocket, "httpSocket can only be sent on TLS update");
+ socket = net$1.connect({
+ highWaterMark: 64 * 1024,
+ ...options,
+ localAddress,
+ port: port || 80,
+ host: hostname
+ });
+ }
+ if (options.keepAlive == null || options.keepAlive) {
+ const keepAliveInitialDelay = options.keepAliveInitialDelay === void 0 ? 6e4 : options.keepAliveInitialDelay;
+ socket.setKeepAlive(true, keepAliveInitialDelay);
+ }
+ const cancelTimeout = setupTimeout(() => onConnectTimeout(socket), timeout);
+ socket.setNoDelay(true).once(protocol === "https:" ? "secureConnect" : "connect", function() {
+ cancelTimeout();
+ if (callback) {
+ const cb = callback;
+ callback = null;
+ cb(null, this);
+ }
+ }).on("error", function(err) {
+ cancelTimeout();
+ if (callback) {
+ const cb = callback;
+ callback = null;
+ cb(err);
+ }
+ });
+ return socket;
+ };
+ }
+ function setupTimeout(onConnectTimeout, timeout) {
+ if (!timeout) return () => {};
+ let s1 = null;
+ let s2 = null;
+ const timeoutId = setTimeout(() => {
+ s1 = setImmediate(() => {
+ if (process.platform === "win32") s2 = setImmediate(() => onConnectTimeout());
+ else onConnectTimeout();
+ });
+ }, timeout);
+ return () => {
+ clearTimeout(timeoutId);
+ clearImmediate(s1);
+ clearImmediate(s2);
+ };
+ }
+ function onConnectTimeout(socket) {
+ util.destroy(socket, new ConnectTimeoutError());
+ }
+ module.exports = buildConnector;
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/llhttp/utils.js
+var require_utils$2 = /* @__PURE__ */ __commonJSMin(((exports) => {
+ 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;
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/llhttp/constants.js
+var require_constants$2 = /* @__PURE__ */ __commonJSMin(((exports) => {
+ 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;
+ const utils_1 = require_utils$2();
+ (function(ERROR) {
+ ERROR[ERROR["OK"] = 0] = "OK";
+ ERROR[ERROR["INTERNAL"] = 1] = "INTERNAL";
+ ERROR[ERROR["STRICT"] = 2] = "STRICT";
+ ERROR[ERROR["LF_EXPECTED"] = 3] = "LF_EXPECTED";
+ ERROR[ERROR["UNEXPECTED_CONTENT_LENGTH"] = 4] = "UNEXPECTED_CONTENT_LENGTH";
+ ERROR[ERROR["CLOSED_CONNECTION"] = 5] = "CLOSED_CONNECTION";
+ ERROR[ERROR["INVALID_METHOD"] = 6] = "INVALID_METHOD";
+ ERROR[ERROR["INVALID_URL"] = 7] = "INVALID_URL";
+ ERROR[ERROR["INVALID_CONSTANT"] = 8] = "INVALID_CONSTANT";
+ ERROR[ERROR["INVALID_VERSION"] = 9] = "INVALID_VERSION";
+ ERROR[ERROR["INVALID_HEADER_TOKEN"] = 10] = "INVALID_HEADER_TOKEN";
+ ERROR[ERROR["INVALID_CONTENT_LENGTH"] = 11] = "INVALID_CONTENT_LENGTH";
+ ERROR[ERROR["INVALID_CHUNK_SIZE"] = 12] = "INVALID_CHUNK_SIZE";
+ ERROR[ERROR["INVALID_STATUS"] = 13] = "INVALID_STATUS";
+ ERROR[ERROR["INVALID_EOF_STATE"] = 14] = "INVALID_EOF_STATE";
+ ERROR[ERROR["INVALID_TRANSFER_ENCODING"] = 15] = "INVALID_TRANSFER_ENCODING";
+ ERROR[ERROR["CB_MESSAGE_BEGIN"] = 16] = "CB_MESSAGE_BEGIN";
+ ERROR[ERROR["CB_HEADERS_COMPLETE"] = 17] = "CB_HEADERS_COMPLETE";
+ ERROR[ERROR["CB_MESSAGE_COMPLETE"] = 18] = "CB_MESSAGE_COMPLETE";
+ ERROR[ERROR["CB_CHUNK_HEADER"] = 19] = "CB_CHUNK_HEADER";
+ ERROR[ERROR["CB_CHUNK_COMPLETE"] = 20] = "CB_CHUNK_COMPLETE";
+ ERROR[ERROR["PAUSED"] = 21] = "PAUSED";
+ ERROR[ERROR["PAUSED_UPGRADE"] = 22] = "PAUSED_UPGRADE";
+ ERROR[ERROR["PAUSED_H2_UPGRADE"] = 23] = "PAUSED_H2_UPGRADE";
+ ERROR[ERROR["USER"] = 24] = "USER";
+ })(exports.ERROR || (exports.ERROR = {}));
+ (function(TYPE) {
+ TYPE[TYPE["BOTH"] = 0] = "BOTH";
+ TYPE[TYPE["REQUEST"] = 1] = "REQUEST";
+ TYPE[TYPE["RESPONSE"] = 2] = "RESPONSE";
+ })(exports.TYPE || (exports.TYPE = {}));
+ (function(FLAGS) {
+ FLAGS[FLAGS["CONNECTION_KEEP_ALIVE"] = 1] = "CONNECTION_KEEP_ALIVE";
+ FLAGS[FLAGS["CONNECTION_CLOSE"] = 2] = "CONNECTION_CLOSE";
+ FLAGS[FLAGS["CONNECTION_UPGRADE"] = 4] = "CONNECTION_UPGRADE";
+ FLAGS[FLAGS["CHUNKED"] = 8] = "CHUNKED";
+ FLAGS[FLAGS["UPGRADE"] = 16] = "UPGRADE";
+ FLAGS[FLAGS["CONTENT_LENGTH"] = 32] = "CONTENT_LENGTH";
+ FLAGS[FLAGS["SKIPBODY"] = 64] = "SKIPBODY";
+ FLAGS[FLAGS["TRAILING"] = 128] = "TRAILING";
+ FLAGS[FLAGS["TRANSFER_ENCODING"] = 512] = "TRANSFER_ENCODING";
+ })(exports.FLAGS || (exports.FLAGS = {}));
+ (function(LENIENT_FLAGS) {
+ LENIENT_FLAGS[LENIENT_FLAGS["HEADERS"] = 1] = "HEADERS";
+ LENIENT_FLAGS[LENIENT_FLAGS["CHUNKED_LENGTH"] = 2] = "CHUNKED_LENGTH";
+ LENIENT_FLAGS[LENIENT_FLAGS["KEEP_ALIVE"] = 4] = "KEEP_ALIVE";
+ })(exports.LENIENT_FLAGS || (exports.LENIENT_FLAGS = {}));
+ var METHODS;
+ (function(METHODS) {
+ METHODS[METHODS["DELETE"] = 0] = "DELETE";
+ METHODS[METHODS["GET"] = 1] = "GET";
+ METHODS[METHODS["HEAD"] = 2] = "HEAD";
+ METHODS[METHODS["POST"] = 3] = "POST";
+ METHODS[METHODS["PUT"] = 4] = "PUT";
+ METHODS[METHODS["CONNECT"] = 5] = "CONNECT";
+ METHODS[METHODS["OPTIONS"] = 6] = "OPTIONS";
+ METHODS[METHODS["TRACE"] = 7] = "TRACE";
+ METHODS[METHODS["COPY"] = 8] = "COPY";
+ METHODS[METHODS["LOCK"] = 9] = "LOCK";
+ METHODS[METHODS["MKCOL"] = 10] = "MKCOL";
+ METHODS[METHODS["MOVE"] = 11] = "MOVE";
+ METHODS[METHODS["PROPFIND"] = 12] = "PROPFIND";
+ METHODS[METHODS["PROPPATCH"] = 13] = "PROPPATCH";
+ METHODS[METHODS["SEARCH"] = 14] = "SEARCH";
+ METHODS[METHODS["UNLOCK"] = 15] = "UNLOCK";
+ METHODS[METHODS["BIND"] = 16] = "BIND";
+ METHODS[METHODS["REBIND"] = 17] = "REBIND";
+ METHODS[METHODS["UNBIND"] = 18] = "UNBIND";
+ METHODS[METHODS["ACL"] = 19] = "ACL";
+ METHODS[METHODS["REPORT"] = 20] = "REPORT";
+ METHODS[METHODS["MKACTIVITY"] = 21] = "MKACTIVITY";
+ METHODS[METHODS["CHECKOUT"] = 22] = "CHECKOUT";
+ METHODS[METHODS["MERGE"] = 23] = "MERGE";
+ METHODS[METHODS["M-SEARCH"] = 24] = "M-SEARCH";
+ METHODS[METHODS["NOTIFY"] = 25] = "NOTIFY";
+ METHODS[METHODS["SUBSCRIBE"] = 26] = "SUBSCRIBE";
+ METHODS[METHODS["UNSUBSCRIBE"] = 27] = "UNSUBSCRIBE";
+ METHODS[METHODS["PATCH"] = 28] = "PATCH";
+ METHODS[METHODS["PURGE"] = 29] = "PURGE";
+ METHODS[METHODS["MKCALENDAR"] = 30] = "MKCALENDAR";
+ METHODS[METHODS["LINK"] = 31] = "LINK";
+ METHODS[METHODS["UNLINK"] = 32] = "UNLINK";
+ METHODS[METHODS["SOURCE"] = 33] = "SOURCE";
+ METHODS[METHODS["PRI"] = 34] = "PRI";
+ METHODS[METHODS["DESCRIBE"] = 35] = "DESCRIBE";
+ METHODS[METHODS["ANNOUNCE"] = 36] = "ANNOUNCE";
+ METHODS[METHODS["SETUP"] = 37] = "SETUP";
+ METHODS[METHODS["PLAY"] = 38] = "PLAY";
+ METHODS[METHODS["PAUSE"] = 39] = "PAUSE";
+ METHODS[METHODS["TEARDOWN"] = 40] = "TEARDOWN";
+ METHODS[METHODS["GET_PARAMETER"] = 41] = "GET_PARAMETER";
+ METHODS[METHODS["SET_PARAMETER"] = 42] = "SET_PARAMETER";
+ METHODS[METHODS["REDIRECT"] = 43] = "REDIRECT";
+ METHODS[METHODS["RECORD"] = 44] = "RECORD";
+ METHODS[METHODS["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,
+ 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,
+ 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];
+ });
+ (function(FINISH) {
+ FINISH[FINISH["SAFE"] = 0] = "SAFE";
+ FINISH[FINISH["SAFE_WITH_CB"] = 1] = "SAFE_WITH_CB";
+ FINISH[FINISH["UNSAFE"] = 2] = "UNSAFE";
+ })(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_STATE) {
+ HEADER_STATE[HEADER_STATE["GENERAL"] = 0] = "GENERAL";
+ HEADER_STATE[HEADER_STATE["CONNECTION"] = 1] = "CONNECTION";
+ HEADER_STATE[HEADER_STATE["CONTENT_LENGTH"] = 2] = "CONTENT_LENGTH";
+ HEADER_STATE[HEADER_STATE["TRANSFER_ENCODING"] = 3] = "TRANSFER_ENCODING";
+ HEADER_STATE[HEADER_STATE["UPGRADE"] = 4] = "UPGRADE";
+ HEADER_STATE[HEADER_STATE["CONNECTION_KEEP_ALIVE"] = 5] = "CONNECTION_KEEP_ALIVE";
+ HEADER_STATE[HEADER_STATE["CONNECTION_CLOSE"] = 6] = "CONNECTION_CLOSE";
+ HEADER_STATE[HEADER_STATE["CONNECTION_UPGRADE"] = 7] = "CONNECTION_UPGRADE";
+ HEADER_STATE[HEADER_STATE["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
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/handler/RedirectHandler.js
+var require_RedirectHandler = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const util = require_util$6();
+ const { kBodyUsed } = require_symbols$4();
+ const assert$13 = __require("assert");
+ const { InvalidArgumentError } = require_errors();
+ const EE$1 = __require("events");
+ const redirectableStatusCodes = [
+ 300,
+ 301,
+ 302,
+ 303,
+ 307,
+ 308
+ ];
+ const kBody = Symbol("body");
+ var BodyAsyncIterable = class {
+ constructor(body) {
+ this[kBody] = body;
+ this[kBodyUsed] = false;
+ }
+ async *[Symbol.asyncIterator]() {
+ assert$13(!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 = [];
+ if (util.isStream(this.opts.body)) {
+ if (util.bodyLength(this.opts.body) === 0) this.opts.body.on("data", function() {
+ assert$13(false);
+ });
+ if (typeof this.opts.body.readableDidRead !== "boolean") {
+ this.opts.body[kBodyUsed] = false;
+ EE$1.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(error) {
+ this.handler.onError(error);
+ }
+ onHeaders(statusCode, headers, resume, statusText) {
+ this.location = this.history.length >= this.maxRedirections || util.isDisturbed(this.opts.body) ? null : parseLocation(statusCode, headers);
+ 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].toString().toLowerCase() === "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$13(headers == null, "headers must be an object or an array");
+ return ret;
+ }
+ module.exports = RedirectHandler;
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/interceptor/redirectInterceptor.js
+var require_redirectInterceptor = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const RedirectHandler = require_RedirectHandler();
+ 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;
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/llhttp/llhttp-wasm.js
+var require_llhttp_wasm = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ module.exports = "AGFzbQEAAAABMAhgAX8Bf2ADf39/AX9gBH9/f38Bf2AAAGADf39/AGABfwBgAn9/AGAGf39/f39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQACA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAA0ZFAwMEAAAFAAAAAAAABQEFAAUFBQAABgAAAAAGBgYGAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAABAQcAAAUFAwABBAUBcAESEgUDAQACBggBfwFBgNQECwfRBSIGbWVtb3J5AgALX2luaXRpYWxpemUACRlfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlAQALbGxodHRwX2luaXQAChhsbGh0dHBfc2hvdWxkX2tlZXBfYWxpdmUAQQxsbGh0dHBfYWxsb2MADAZtYWxsb2MARgtsbGh0dHBfZnJlZQANBGZyZWUASA9sbGh0dHBfZ2V0X3R5cGUADhVsbGh0dHBfZ2V0X2h0dHBfbWFqb3IADxVsbGh0dHBfZ2V0X2h0dHBfbWlub3IAEBFsbGh0dHBfZ2V0X21ldGhvZAARFmxsaHR0cF9nZXRfc3RhdHVzX2NvZGUAEhJsbGh0dHBfZ2V0X3VwZ3JhZGUAEwxsbGh0dHBfcmVzZXQAFA5sbGh0dHBfZXhlY3V0ZQAVFGxsaHR0cF9zZXR0aW5nc19pbml0ABYNbGxodHRwX2ZpbmlzaAAXDGxsaHR0cF9wYXVzZQAYDWxsaHR0cF9yZXN1bWUAGRtsbGh0dHBfcmVzdW1lX2FmdGVyX3VwZ3JhZGUAGhBsbGh0dHBfZ2V0X2Vycm5vABsXbGxodHRwX2dldF9lcnJvcl9yZWFzb24AHBdsbGh0dHBfc2V0X2Vycm9yX3JlYXNvbgAdFGxsaHR0cF9nZXRfZXJyb3JfcG9zAB4RbGxodHRwX2Vycm5vX25hbWUAHxJsbGh0dHBfbWV0aG9kX25hbWUAIBJs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ADcDACAAQShqQgA3AwAgAEEgakIANwMAIABBEGpCADcDACAAQQhqQgA3AwAgAEHdATYCHEEAC3sBAX8CQCAAKAIMIgMNAAJAIAAoAgRFDQAgACABNgIECwJAIAAgASACEMSAgIAAIgMNACAAKAIMDwsgACADNgIcQQAhAyAAKAIEIgFFDQAgACABIAIgACgCCBGBgICAAAAiAUUNACAAIAI2AhQgACABNgIMIAEhAwsgAwvk8wEDDn8DfgR/I4CAgIAAQRBrIgMkgICAgAAgASEEIAEhBSABIQYgASEHIAEhCCABIQkgASEKIAEhCyABIQwgASENIAEhDiABIQ8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgACgCHCIQQX9qDt0B2gEB2QECAwQFBgcICQoLDA0O2AEPENcBERLWARMUFRYXGBkaG+AB3wEcHR7VAR8gISIjJCXUASYnKCkqKyzTAdIBLS7RAdABLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVG2wFHSElKzwHOAUvNAUzMAU1OT1BRUlNUVVZXWFlaW1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f4ABgQGCAYMBhAGFAYYBhwGIAYkBigGLAYwBjQGOAY8BkAGRAZIBkwGUAZUBlgGXAZgBmQGaAZsBnAGdAZ4BnwGgAaEBogGjAaQBpQGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAG1AbYBtwHLAcoBuAHJAbkByAG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAQDcAQtBACEQDMYBC0EOIRAMxQELQQ0hEAzEAQtBDyEQDMMBC0EQIRAMwgELQRMhEAzBAQtBFCEQDMABC0EVIRAMvwELQRYhEAy+AQtBFyEQDL0BC0EYIRAMvAELQRkhEAy7AQtBGiEQDLoBC0EbIRAMuQELQRwhEAy4AQtBCCEQDLcBC0EdIRAMtgELQSAhEAy1AQtBHyEQDLQBC0EHIRAMswELQSEhEAyyAQtBIiEQDLEBC0EeIRAMsAELQSMhEAyvAQtBEiEQDK4BC0ERIRAMrQELQSQhEAysAQtBJSEQDKsBC0EmIRAMqgELQSchEAypAQtBwwEhEAyoAQtBKSEQDKcBC0ErIRAMpgELQSwhEAylAQtBLSEQDKQBC0EuIRAMowELQS8hEAyiAQtBxAEhEAyhAQtBMCEQDKABC0E0IRAMnwELQQwhEAyeAQtBMSEQDJ0BC0EyIRAMnAELQTMhEAybAQtBOSEQDJoBC0E1IRAMmQELQcUBIRAMmAELQQshEAyXAQtBOiEQDJYBC0E2IRAMlQELQQohEAyUAQtBNyEQDJMBC0E4IRAMkgELQTwhEAyRAQtBOyEQDJABC0E9IRAMjwELQQkhEAyOAQtBKCEQDI0BC0E+IRAMjAELQT8hEAyLAQtBwAAhEAyKAQtBwQAhEAyJAQtBwgAhEAyIAQtBwwAhEAyHAQtBxAAhEAyGAQtBxQAhEAyFAQtBxgAhEAyEAQtBKiEQDIMBC0HHACEQDIIBC0HIACEQDIEBC0HJACEQDIABC0HKACEQDH8LQcsAIRAMfgtBzQAhEAx9C0HMACEQDHwLQc4AIRAMewtBzwAhEAx6C0HQACEQDHkLQdEAIRAMeAtB0gAhEAx3C0HTACEQDHYLQdQAIRAMdQtB1gAhEAx0C0HVACEQDHMLQQYhEAxyC0HXACEQDHELQQUhEAxwC0HYACEQDG8LQQQhEAxuC0HZACEQDG0LQdoAIRAMbAtB2wAhEAxrC0HcACEQDGoLQQMhEAxpC0HdACEQDGgLQd4AIRAMZwtB3wAhEAxmC0HhACEQDGULQeAAIRAMZAtB4gAhEAxjC0HjACEQDGILQQIhEAxhC0HkACEQDGALQeUAIRAMXwtB5gAhEAxeC0HnACEQDF0LQegAIRAMXAtB6QAhEAxbC0HqACEQDFoLQesAIRAMWQtB7AAhEAxYC0HtACEQDFcLQe4AIRAMVgtB7wAhEAxVC0HwACEQDFQLQfEAIRAMUwtB8gAhEAxSC0HzACEQDFELQfQAIRAMUAtB9QAhEAxPC0H2ACEQDE4LQfcAIRAMTQtB+AAhEAxMC0H5ACEQDEsLQfoAIRAMSgtB+wAhEAxJC0H8ACEQDEgLQf0AIRAMRwtB/gAhEAxGC0H/ACEQDEULQYABIRAMRAtBgQEhEAxDC0GCASEQDEILQYMBIRAMQQtBhAEhEAxAC0GFASEQDD8LQYYBIRAMPgtBhwEhEAw9C0GIASEQDDwLQYkBIRAMOwtBigEhEAw6C0GLASEQDDkLQYwBIRAMOAtBjQEhEAw3C0GOASEQDDYLQY8BIRAMNQtBkAEhEAw0C0GRASEQDDMLQZIBIRAMMgtBkwEhEAwxC0GUASEQDDALQZUBIRAMLwtBlgEhEAwuC0GXASEQDC0LQZgBIRAMLAtBmQEhEAwrC0GaASEQDCoLQZsBIRAMKQtBnAEhEAwoC0GdASEQDCcLQZ4BIRAMJgtBnwEhEAwlC0GgASEQDCQLQaEBIRAMIwtBogEhEAwiC0GjASEQDCELQaQBIRAMIAtBpQEhEAwfC0GmASEQDB4LQacBIRAMHQtBqAEhEAwcC0GpASEQDBsLQaoBIRAMGgtBqwEhEAwZC0GsASEQDBgLQa0BIRAMFwtBrgEhEAwWC0EBIRAMFQtBrwEhEAwUC0GwASEQDBMLQbEBIRAMEgtBswEhEAwRC0GyASEQDBALQbQBIRAMDwtBtQEhEAwOC0G2ASEQDA0LQbcBIRAMDAtBuAEhEAwLC0G5ASEQDAoLQboBIRAMCQtBuwEhEAwIC0HGASEQDAcLQbwBIRAMBgtBvQEhEAwFC0G+ASEQDAQLQb8BIRAMAwtBwAEhEAwCC0HCASEQDAELQcEBIRALA0ACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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FCAAIBA2AgxBACEQDLIBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxNCyAAQdMANgIcIAAgATYCFCAAIBA2AgxBACEQDLEBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxRCyAAQeUANgIcIAAgATYCFCAAIBA2AgxBACEQDLABCyAAQQA2AhwgACABNgIUIABBxoqAgAA2AhAgAEEHNgIMQQAhEAyvAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMSQsgAEHSADYCHCAAIAE2AhQgACAQNgIMQQAhEAyuAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMSQsgAEHTADYCHCAAIAE2AhQgACAQNgIMQQAhEAytAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMTQsgAEHlADYCHCAAIAE2AhQgACAQNgIMQQAhEAysAQsgAEEANgIcIAAgATYCFCAAQdyIgIAANgIQIABBBzYCDEEAIRAMqwELIBBBP0cNASABQQFqIQELQQUhEAyQAQtBACEQIABBADYCHCAAIAE2AhQgAEH9koCAADYCECAAQQc2AgwMqAELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEILIABB0gA2AhwgACABNgIUIAAgEDYCDEEAIRAMpwELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEILIABB0wA2AhwgACABNgIUIAAgEDYCDEEAIRAMpgELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEYLIABB5QA2AhwgACABNgIUIAAgEDYCDEEAIRAMpQELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDD8LIABB0gA2AhwgACAUNgIUIAAgATYCDEEAIRAMpAELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDD8LIABB0wA2AhwgACAUNgIUIAAgATYCDEEAIRAMowELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDEMLIABB5QA2AhwgACAU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YWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21ldGhvZF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lYCBjYWxsYmFjayBlcnJvcgBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNlcnZlcgBJbnZhbGlkIGhlYWRlciB2YWx1ZSBjaGFyAEludmFsaWQgaGVhZGVyIGZpZWxkIGNoYXIAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl92ZXJzaW9uAEludmFsaWQgbWlub3IgdmVyc2lvbgBJbnZhbGlkIG1ham9yIHZlcnNpb24ARXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgdmVyc2lvbgBFeHBlY3RlZCBDUkxGIGFmdGVyIHZlcnNpb24ASW52YWxpZCBIVFRQIHZlcnNpb24ASW52YWxpZCBoZWFkZXIgdG9rZW4AU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl91cmwASW52YWxpZCBjaGFyYWN0ZXJzIGluIHVybABVbmV4cGVjdGVkIHN0YXJ0IGNoYXIgaW4gdXJsAERvdWJsZSBAIGluIHVybABFbXB0eSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXJhY3RlciBpbiBDb250ZW50LUxlbmd0aABEdXBsaWNhdGUgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyIGluIHVybCBwYXRoAENvbnRlbnQtTGVuZ3RoIGNhbid0IGJlIHByZXNlbnQgd2l0aCBUcmFuc2Zlci1FbmNvZGluZwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBzaXplAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25faGVhZGVyX3ZhbHVlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgdmFsdWUATWlzc2luZyBleHBlY3RlZCBMRiBhZnRlciBoZWFkZXIgdmFsdWUASW52YWxpZCBgVHJhbnNmZXItRW5jb2RpbmdgIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fbmFtZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIG5hbWUAUGF1c2Ugb24gQ09OTkVDVC9VcGdyYWRlAFBhdXNlIG9uIFBSSS9VcGdyYWRlAEV4cGVjdGVkIEhUVFAvMiBDb25uZWN0aW9uIFByZWZhY2UAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9tZXRob2QARXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgbWV0aG9kAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25faGVhZGVyX2ZpZWxkAFBhdXNlZABJbnZhbGlkIHdvcmQgZW5jb3VudGVyZWQASW52YWxpZCBtZXRob2QgZW5jb3VudGVyZWQAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzY2hlbWEAUmVxdWVzdCBoYXMgaW52YWxpZCBgVHJhbnNmZXItRW5jb2RpbmdgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX0NIVU5LX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX05BTUVfQ09NUExFVEUASFBFX0NCX01FU1NBR0VfQ09NUExFVEUASFBFX0NCX01FVEhPRF9DT01QTEVURQBIUEVfQ0JfSEVBREVSX0ZJRUxEX0NPTVBMRVRFAERFTEVURQBIUEVfSU5WQUxJRF9FT0ZfU1RBVEUASU5WQUxJRF9TU0xfQ0VSVElGSUNBVEUAUEFVU0UATk9fUkVTUE9OU0UAVU5TVVBQT1JURURfTUVESUFfVFlQRQBHT05FAE5PVF9BQ0NFUFRBQkxFAFNFUlZJQ0VfVU5BVkFJTEFCTEUAUkFOR0VfTk9UX1NBVElTRklBQkxFAE9SSUdJTl9JU19VTlJFQUNIQUJMRQBSRVNQT05TRV9JU19TVEFMRQBQVVJHRQBNRVJHRQBSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFAFJFUVVFU1RfSEVBREVSX1RPT19MQVJHRQBQQVlMT0FEX1RPT19MQVJHRQBJTlNVRkZJQ0lFTlRfU1RPUkFHRQBIUEVfUEFVU0VEX1VQR1JBREUASFBFX1BBVVNFRF9IMl9VUEdSQURFAFNPVVJDRQBBTk5PVU5DRQBUUkFDRQBIUEVfVU5FWFBFQ1RFRF9TUEFDRQBERVNDUklCRQBVTlNVQlNDUklCRQBSRUNPUkQASFBFX0lOVkFMSURfTUVUSE9EAE5PVF9GT1VORABQUk9QRklORABVTkJJTkQAUkVCSU5EAFVOQVVUSE9SSVpFRABNRVRIT0RfTk9UX0FMTE9XRUQASFRUUF9WRVJTSU9OX05PVF9TVVBQT1JURUQAQUxSRUFEWV9SRVBPUlRFRABBQ0NFUFRFRABOT1RfSU1QTEVNRU5URUQATE9PUF9ERVRFQ1RFRABIUEVfQ1JfRVhQRUNURUQASFBFX0xGX0VYUEVDVEVEAENSRUFURUQASU1fVVNFRABIUEVfUEFVU0VEAFRJTUVPVVRfT0NDVVJFRABQQVlNRU5UX1JFUVVJUkVEAFBSRUNPTkRJVElPTl9SRVFVSVJFRABQUk9YWV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRABORVRXT1JLX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAExFTkdUSF9SRVFVSVJFRABTU0xfQ0VSVElGSUNBVEVfUkVRVUlSRUQAVVBHUkFERV9SRVFVSVJFRABQQUdFX0VYUElSRUQAUFJFQ09ORElUSU9OX0ZBSUxFRABFWFBFQ1RBVElPTl9GQUlMRUQAUkVWQUxJREFUSU9OX0ZBSUxFRABTU0xfSEFORFNIQUtFX0ZBSUxFRABMT0NLRUQAVFJBTlNGT1JNQVRJT05fQVBQTElFRABOT1RfTU9ESUZJRUQATk9UX0VYVEVOREVEAEJBTkRXSURUSF9MSU1JVF9FWENFRURFRABTSVRFX0lTX09WRVJMT0FERUQASEVBRABFeHBlY3RlZCBIVFRQLwAAXhMAACYTAAAwEAAA8BcAAJ0TAAAVEgAAORcAAPASAAAKEAAAdRIAAK0SAACCEwAATxQAAH8QAACgFQAAIxQAAIkSAACLFAAATRUAANQRAADPFAAAEBgAAMkWAADcFgAAwREAAOAXAAC7FAAAdBQAAHwVAADlFAAACBcAAB8QAABlFQAAoxQAACgVAAACFQAAmRUAACwQAACLGQAATw8AANQOAABqEAAAzhAAAAIXAACJDgAAbhMAABwTAABmFAAAVhcAAMETAADNEwAAbBMAAGgXAABmFwAAXxcAACITAADODwAAaQ4AANgOAABjFgAAyxMAAKoOAAAoFwAAJhcAAMUTAABdFgAA6BEAAGcTAABlEwAA8hYAAHMTAAAdFwAA+RYAAPMRAADPDgAAzhUAAAwSAACzEQAApREAAGEQAAAyFwAAuxMAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIDAgICAgIAAAICAAICAAICAgICAgICAgIABAAAAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAACAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbG9zZWVlcC1hbGl2ZQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAQEBAQEAAAEBAAEBAAEBAQEBAQEBAQEAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AAAAAAAAAAAAAAAAAAAByYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AAAAAAAAAAAAAAAABAgABAwAAAAAAAAAAAAAAAAAAAAAAAAQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAQIAAQMAAAAAAAAAAAAAAAAAAAAAAAAEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAQAAAgAAAAAAAAAAAAAAAAAAAAAAAAMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAIAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOT1VOQ0VFQ0tPVVRORUNURVRFQ1JJQkVMVVNIRVRFQURTRUFSQ0hSR0VDVElWSVRZTEVOREFSVkVPVElGWVBUSU9OU0NIU0VBWVNUQVRDSEdFT1JESVJFQ1RPUlRSQ0hQQVJBTUVURVJVUkNFQlNDUklCRUFSRE9XTkFDRUlORE5LQ0tVQlNDUklCRUhUVFAvQURUUC8=";
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js
+var require_llhttp_simd_wasm = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ module.exports = "AGFzbQEAAAABMAhgAX8Bf2ADf39/AX9gBH9/f38Bf2AAAGADf39/AGABfwBgAn9/AGAGf39/f39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQACA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAA0ZFAwMEAAAFAAAAAAAABQEFAAUFBQAABgAAAAAGBgYGAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAABAQcAAAUFAwABBAUBcAESEgUDAQACBggBfwFBgNQECwfRBSIGbWVtb3J5AgALX2luaXRpYWxpemUACRlfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlAQALbGxodHRwX2luaXQAChhsbGh0dHBfc2hvdWxkX2tlZXBfYWxpdmUAQQxsbGh0dHBfYWxsb2MADAZtYWxsb2MARgtsbGh0dHBfZnJlZQANBGZyZWUASA9sbGh0dHBfZ2V0X3R5cGUADhVsbGh0dHBfZ2V0X2h0dHBfbWFqb3IADxVsbGh0dHBfZ2V0X2h0dHBfbWlub3IAEBFsbGh0dHBfZ2V0X21ldGhvZAARFmxsaHR0cF9nZXRfc3RhdHVzX2NvZGUAEhJsbGh0dHBfZ2V0X3VwZ3JhZGUAEwxsbGh0dHBfcmVzZXQAFA5sbGh0dHBfZXhlY3V0ZQAVFGxsaHR0cF9zZXR0aW5nc19pbml0ABYNbGxodHRwX2ZpbmlzaAAXDGxsaHR0cF9wYXVzZQAYDWxsaHR0cF9yZXN1bWUAGRtsbGh0dHBfcmVzdW1lX2FmdGVyX3VwZ3JhZGUAGhBsbGh0dHBfZ2V0X2Vycm5vABsXbGxodHRwX2dldF9lcnJvcl9yZWFzb24AHBdsbGh0dHBfc2V0X2Vycm9yX3JlYXNvbgAdFGxsaHR0cF9nZXRfZXJyb3JfcG9zAB4RbGxodHRwX2Vycm5vX25hbWUAHxJsbGh0dHBfbWV0aG9kX25hbWUAIBJs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IAH9CwMAIABBMGogAf0LAwAgAEEgaiAB/QsDACAAQd0BNgIcQQALewEBfwJAIAAoAgwiAw0AAkAgACgCBEUNACAAIAE2AgQLAkAgACABIAIQxICAgAAiAw0AIAAoAgwPCyAAIAM2AhxBACEDIAAoAgQiAUUNACAAIAEgAiAAKAIIEYGAgIAAACIBRQ0AIAAgAjYCFCAAIAE2AgwgASEDCyADC+TzAQMOfwN+BH8jgICAgABBEGsiAySAgICAACABIQQgASEFIAEhBiABIQcgASEIIAEhCSABIQogASELIAEhDCABIQ0gASEOIAEhDwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAIcIhBBf2oO3QHaAQHZAQIDBAUGBwgJCgsMDQ7YAQ8Q1wEREtYBExQVFhcYGRob4AHfARwdHtUBHyAhIiMkJdQBJicoKSorLNMB0gEtLtEB0AEvMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUbbAUdISUrPAc4BS80BTMwBTU5PUFFSU1RVVldYWVpbXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEB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QAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIBAOxwEAAQID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YWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsb3NlZWVwLWFsaXZlAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgAAAAAAAAAAAAAAAAAAAHJhbnNmZXItZW5jb2RpbmdwZ3JhZGUNCg0KDQpTTQ0KDQpUVFAvQ0UvVFNQLwAAAAAAAAAAAAAAAAECAAEDAAAAAAAAAAAAAAAAAAAAAAAABAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAABAgABAwAAAAAAAAAAAAAAAAAAAAAAAAQBAQUBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAABAAACAAAAAAAAAAAAAAAAAAAAAAAAAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAgAAAAACAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==";
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/client.js
+var require_client = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const assert$12 = __require("assert");
+ const net = __require("net");
+ const http$1 = __require("http");
+ const { pipeline: pipeline$1 } = __require("stream");
+ const util = require_util$6();
+ const timers = require_timers();
+ const Request = require_request$1();
+ const DispatcherBase = require_dispatcher_base();
+ const { RequestContentLengthMismatchError, ResponseContentLengthMismatchError, InvalidArgumentError, RequestAbortedError, HeadersTimeoutError, HeadersOverflowError, SocketError, InformationalError, BodyTimeoutError, HTTPParserError, ResponseExceededMaxSizeError, ClientDestroyedError } = require_errors();
+ const buildConnector = require_connect();
+ const { kUrl, kReset, kServerName, kClient, kBusy, kParser, kConnect, kBlocking, kResuming, kRunning, kPending, kSize, kWriting, kQueue, kConnected, kConnecting, kNeedDrain, kNoRef, kKeepAliveDefaultTimeout, kHostHeader, kPendingIdx, kRunningIdx, kError, kPipelining, kSocket, kKeepAliveTimeoutValue, kMaxHeadersSize, kKeepAliveMaxTimeout, kKeepAliveTimeoutThreshold, kHeadersTimeout, kBodyTimeout, kStrictContentLength, kConnector, kMaxRedirections, kMaxRequests, kCounter, kClose, kDestroy, kDispatch, kInterceptors, kLocalAddress, kMaxResponseSize, kHTTPConnVersion, kHost, kHTTP2Session, kHTTP2SessionState, kHTTP2BuildRequest, kHTTP2CopyHeaders, kHTTP1BuildRequest } = require_symbols$4();
+ /** @type {import('http2')} */
+ let http2;
+ try {
+ http2 = __require("http2");
+ } catch {
+ http2 = { constants: {} };
+ }
+ const { constants: { HTTP2_HEADER_AUTHORITY, HTTP2_HEADER_METHOD, HTTP2_HEADER_PATH, HTTP2_HEADER_SCHEME, HTTP2_HEADER_CONTENT_LENGTH, HTTP2_HEADER_EXPECT, HTTP2_HEADER_STATUS } } = http2;
+ let h2ExperimentalWarned = false;
+ const FastBuffer = Buffer[Symbol.species];
+ const kClosedResolve = Symbol("kClosedResolve");
+ const channels = {};
+ try {
+ const diagnosticsChannel = __require("diagnostics_channel");
+ channels.sendHeaders = diagnosticsChannel.channel("undici:client:sendHeaders");
+ channels.beforeConnect = diagnosticsChannel.channel("undici:client:beforeConnect");
+ channels.connectError = diagnosticsChannel.channel("undici:client:connectError");
+ channels.connected = diagnosticsChannel.channel("undici:client:connected");
+ } catch {
+ channels.sendHeaders = { hasSubscribers: false };
+ channels.beforeConnect = { hasSubscribers: false };
+ channels.connectError = { hasSubscribers: false };
+ channels.connected = { hasSubscribers: false };
+ }
+ /**
+ * @type {import('../types/client').default}
+ */
+ var Client = class extends DispatcherBase {
+ /**
+ *
+ * @param {string|URL} url
+ * @param {import('../types/client').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, maxRequestsPerClient, localAddress, maxResponseSize, autoSelectFamily, autoSelectFamilyAttemptTimeout, allowH2, maxConcurrentStreams } = {}) {
+ super();
+ 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 (connect != null && typeof connect !== "function" && typeof connect !== "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 possitive integer, greater than 0");
+ if (typeof connect !== "function") connect = buildConnector({
+ ...tls,
+ maxCachedSessions,
+ allowH2,
+ socketPath,
+ timeout: connectTimeout,
+ ...util.nodeHasAutoSelectFamily && autoSelectFamily ? {
+ autoSelectFamily,
+ autoSelectFamilyAttemptTimeout
+ } : void 0,
+ ...connect
+ });
+ this[kInterceptors] = interceptors && interceptors.Client && Array.isArray(interceptors.Client) ? interceptors.Client : [createRedirectInterceptor({ maxRedirections })];
+ this[kUrl] = util.parseOrigin(url);
+ this[kConnector] = connect;
+ this[kSocket] = null;
+ this[kPipelining] = pipelining != null ? pipelining : 1;
+ this[kMaxHeadersSize] = maxHeaderSize || http$1.maxHeaderSize;
+ this[kKeepAliveDefaultTimeout] = keepAliveTimeout == null ? 4e3 : keepAliveTimeout;
+ this[kKeepAliveMaxTimeout] = keepAliveMaxTimeout == null ? 6e5 : keepAliveMaxTimeout;
+ this[kKeepAliveTimeoutThreshold] = keepAliveTimeoutThreshold == null ? 1e3 : 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\n`;
+ 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[kHTTPConnVersion] = "h1";
+ this[kHTTP2Session] = null;
+ this[kHTTP2SessionState] = !allowH2 ? null : {
+ openStreams: 0,
+ maxConcurrentStreams: maxConcurrentStreams != null ? maxConcurrentStreams : 100
+ };
+ this[kHost] = `${this[kUrl].hostname}${this[kUrl].port ? `:${this[kUrl].port}` : ""}`;
+ this[kQueue] = [];
+ this[kRunningIdx] = 0;
+ this[kPendingIdx] = 0;
+ }
+ get pipelining() {
+ return this[kPipelining];
+ }
+ set pipelining(value) {
+ this[kPipelining] = value;
+ resume(this, 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[kSocket] && !this[kConnecting] && !this[kSocket].destroyed;
+ }
+ get [kBusy]() {
+ const socket = this[kSocket];
+ return socket && (socket[kReset] || socket[kWriting] || socket[kBlocking]) || this[kSize] >= (this[kPipelining] || 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 = this[kHTTPConnVersion] === "h2" ? Request[kHTTP2BuildRequest](origin, opts, handler) : Request[kHTTP1BuildRequest](origin, opts, handler);
+ this[kQueue].push(request);
+ if (this[kResuming]) {} else if (util.bodyLength(request.body) == null && util.isIterable(request.body)) {
+ this[kResuming] = 1;
+ process.nextTick(resume, this);
+ } else resume(this, 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]) resolve(null);
+ else this[kClosedResolve] = resolve;
+ });
+ }
+ 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];
+ errorRequest(this, request, err);
+ }
+ const callback = () => {
+ if (this[kClosedResolve]) {
+ this[kClosedResolve]();
+ this[kClosedResolve] = null;
+ }
+ resolve();
+ };
+ if (this[kHTTP2Session] != null) {
+ util.destroy(this[kHTTP2Session], err);
+ this[kHTTP2Session] = null;
+ this[kHTTP2SessionState] = null;
+ }
+ if (!this[kSocket]) queueMicrotask(callback);
+ else util.destroy(this[kSocket].on("close", callback), err);
+ resume(this);
+ });
+ }
+ };
+ function onHttp2SessionError(err) {
+ assert$12(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID");
+ this[kSocket][kError] = err;
+ onError(this[kClient], err);
+ }
+ function onHttp2FrameError(type, code, id) {
+ const err = new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`);
+ if (id === 0) {
+ this[kSocket][kError] = err;
+ onError(this[kClient], err);
+ }
+ }
+ function onHttp2SessionEnd() {
+ util.destroy(this, new SocketError("other side closed"));
+ util.destroy(this[kSocket], new SocketError("other side closed"));
+ }
+ function onHTTP2GoAway(code) {
+ const client = this[kClient];
+ const err = new InformationalError(`HTTP/2: "GOAWAY" frame received with code ${code}`);
+ client[kSocket] = null;
+ client[kHTTP2Session] = null;
+ if (client.destroyed) {
+ assert$12(this[kPending] === 0);
+ const requests = client[kQueue].splice(client[kRunningIdx]);
+ for (let i = 0; i < requests.length; i++) {
+ const request = requests[i];
+ errorRequest(this, request, err);
+ }
+ } else if (client[kRunning] > 0) {
+ const request = client[kQueue][client[kRunningIdx]];
+ client[kQueue][client[kRunningIdx]++] = null;
+ errorRequest(client, request, err);
+ }
+ client[kPendingIdx] = client[kRunningIdx];
+ assert$12(client[kRunning] === 0);
+ client.emit("disconnect", client[kUrl], [client], err);
+ resume(client);
+ }
+ const constants = require_constants$2();
+ const createRedirectInterceptor = require_redirectInterceptor();
+ const EMPTY_BUF = Buffer.alloc(0);
+ async function lazyllhttp() {
+ const llhttpWasmData = process.env.JEST_WORKER_ID ? require_llhttp_wasm() : void 0;
+ let mod;
+ try {
+ mod = await WebAssembly.compile(Buffer.from(require_llhttp_simd_wasm(), "base64"));
+ } catch (e) {
+ /* istanbul ignore next */
+ mod = await WebAssembly.compile(Buffer.from(llhttpWasmData || require_llhttp_wasm(), "base64"));
+ }
+ return await WebAssembly.instantiate(mod, { env: {
+ wasm_on_url: (p, at, len) => {
+ /* istanbul ignore next */
+ return 0;
+ },
+ wasm_on_status: (p, at, len) => {
+ assert$12.strictEqual(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$12.strictEqual(currentParser.ptr, p);
+ return currentParser.onMessageBegin() || 0;
+ },
+ wasm_on_header_field: (p, at, len) => {
+ assert$12.strictEqual(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$12.strictEqual(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$12.strictEqual(currentParser.ptr, p);
+ return currentParser.onHeadersComplete(statusCode, Boolean(upgrade), Boolean(shouldKeepAlive)) || 0;
+ },
+ wasm_on_body: (p, at, len) => {
+ assert$12.strictEqual(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$12.strictEqual(currentParser.ptr, p);
+ return currentParser.onMessageComplete() || 0;
+ }
+ } });
+ }
+ let llhttpInstance = null;
+ let llhttpPromise = lazyllhttp();
+ llhttpPromise.catch();
+ let currentParser = null;
+ let currentBufferRef = null;
+ let currentBufferSize = 0;
+ let currentBufferPtr = null;
+ const TIMEOUT_HEADERS = 1;
+ const TIMEOUT_BODY = 2;
+ const TIMEOUT_IDLE = 3;
+ var Parser = class {
+ constructor(client, socket, { exports: exports$1 }) {
+ assert$12(Number.isFinite(client[kMaxHeadersSize]) && client[kMaxHeadersSize] > 0);
+ this.llhttp = exports$1;
+ this.ptr = this.llhttp.llhttp_alloc(constants.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(value, type) {
+ this.timeoutType = type;
+ if (value !== this.timeoutValue) {
+ timers.clearTimeout(this.timeout);
+ if (value) {
+ this.timeout = timers.setTimeout(onParserTimeout, value, this);
+ // istanbul ignore else: only for jest
+ if (this.timeout.unref) this.timeout.unref();
+ } else this.timeout = null;
+ this.timeoutValue = value;
+ } else if (this.timeout) {
+ // istanbul ignore else: only for jest
+ if (this.timeout.refresh) this.timeout.refresh();
+ }
+ }
+ resume() {
+ if (this.socket.destroyed || !this.paused) return;
+ assert$12(this.ptr != null);
+ assert$12(currentParser == null);
+ this.llhttp.llhttp_resume(this.ptr);
+ assert$12(this.timeoutType === TIMEOUT_BODY);
+ if (this.timeout) {
+ // istanbul ignore else: only for jest
+ 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$12(this.ptr != null);
+ assert$12(currentParser == null);
+ assert$12(!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) {
+ /* istanbul ignore next: difficult to make a test case for */
+ throw err;
+ } finally {
+ currentParser = null;
+ currentBufferRef = null;
+ }
+ const offset = llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr;
+ if (ret === constants.ERROR.PAUSED_UPGRADE) this.onUpgrade(data.slice(offset));
+ else if (ret === constants.ERROR.PAUSED) {
+ this.paused = true;
+ socket.unshift(data.slice(offset));
+ } else if (ret !== constants.ERROR.OK) {
+ const ptr = llhttp.llhttp_get_error_reason(this.ptr);
+ let message = "";
+ /* istanbul ignore else: difficult to make a test case for */
+ 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() + ")";
+ }
+ throw new HTTPParserError(message, constants.ERROR[ret], data.slice(offset));
+ }
+ } catch (err) {
+ util.destroy(socket, err);
+ }
+ }
+ destroy() {
+ assert$12(this.ptr != null);
+ assert$12(currentParser == null);
+ this.llhttp.llhttp_free(this.ptr);
+ this.ptr = null;
+ 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;
+ /* istanbul ignore next: difficult to make a test case for */
+ if (socket.destroyed) return -1;
+ if (!client[kQueue][client[kRunningIdx]]) return -1;
+ }
+ 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 && key.toString().toLowerCase() === "keep-alive") this.keepAlive += buf.toString();
+ else if (key.length === 10 && key.toString().toLowerCase() === "connection") this.connection += buf.toString();
+ else if (key.length === 14 && key.toString().toLowerCase() === "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$12(upgrade);
+ const request = client[kQueue][client[kRunningIdx]];
+ assert$12(request);
+ assert$12(!socket.destroyed);
+ assert$12(socket === client[kSocket]);
+ assert$12(!this.paused);
+ assert$12(request.upgrade || request.method === "CONNECT");
+ this.statusCode = null;
+ this.statusText = "";
+ this.shouldKeepAlive = null;
+ assert$12(this.headers.length % 2 === 0);
+ this.headers = [];
+ this.headersSize = 0;
+ socket.unshift(head);
+ socket[kParser].destroy();
+ socket[kParser] = null;
+ socket[kClient] = null;
+ socket[kError] = null;
+ socket.removeListener("error", onSocketError).removeListener("readable", onSocketReadable).removeListener("end", onSocketEnd).removeListener("close", onSocketClose);
+ client[kSocket] = 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);
+ }
+ resume(client);
+ }
+ onHeadersComplete(statusCode, upgrade, shouldKeepAlive) {
+ const { client, socket, headers, statusText } = this;
+ /* istanbul ignore next: difficult to make a test case for */
+ if (socket.destroyed) return -1;
+ const request = client[kQueue][client[kRunningIdx]];
+ /* istanbul ignore next: difficult to make a test case for */
+ if (!request) return -1;
+ assert$12(!this.upgrade);
+ assert$12(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$12.strictEqual(this.timeoutType, TIMEOUT_HEADERS);
+ this.statusCode = statusCode;
+ this.shouldKeepAlive = shouldKeepAlive || 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) {
+ // istanbul ignore else: only for jest
+ if (this.timeout.refresh) this.timeout.refresh();
+ }
+ if (request.method === "CONNECT") {
+ assert$12(client[kRunning] === 1);
+ this.upgrade = true;
+ return 2;
+ }
+ if (upgrade) {
+ assert$12(client[kRunning] === 1);
+ this.upgrade = true;
+ return 2;
+ }
+ assert$12(this.headers.length % 2 === 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;
+ resume(client);
+ }
+ return pause ? constants.ERROR.PAUSED : 0;
+ }
+ onBody(buf) {
+ const { client, socket, statusCode, maxResponseSize } = this;
+ if (socket.destroyed) return -1;
+ const request = client[kQueue][client[kRunningIdx]];
+ assert$12(request);
+ assert$12.strictEqual(this.timeoutType, TIMEOUT_BODY);
+ if (this.timeout) {
+ // istanbul ignore else: only for jest
+ if (this.timeout.refresh) this.timeout.refresh();
+ }
+ assert$12(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 constants.ERROR.PAUSED;
+ }
+ onMessageComplete() {
+ const { client, socket, statusCode, upgrade, headers, contentLength, bytesRead, shouldKeepAlive } = this;
+ if (socket.destroyed && (!statusCode || shouldKeepAlive)) return -1;
+ if (upgrade) return;
+ const request = client[kQueue][client[kRunningIdx]];
+ assert$12(request);
+ assert$12(statusCode >= 100);
+ this.statusCode = null;
+ this.statusText = "";
+ this.bytesRead = 0;
+ this.contentLength = "";
+ this.keepAlive = "";
+ this.connection = "";
+ assert$12(this.headers.length % 2 === 0);
+ this.headers = [];
+ this.headersSize = 0;
+ if (statusCode < 200) return;
+ /* istanbul ignore next: should be handled by llhttp? */
+ 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$12.strictEqual(client[kRunning], 0);
+ util.destroy(socket, new InformationalError("reset"));
+ return constants.ERROR.PAUSED;
+ } else if (!shouldKeepAlive) {
+ util.destroy(socket, new InformationalError("reset"));
+ return constants.ERROR.PAUSED;
+ } else if (socket[kReset] && client[kRunning] === 0) {
+ util.destroy(socket, new InformationalError("reset"));
+ return constants.ERROR.PAUSED;
+ } else if (client[kPipelining] === 1) setImmediate(resume, client);
+ else resume(client);
+ }
+ };
+ function onParserTimeout(parser) {
+ const { socket, timeoutType, client } = parser;
+ /* istanbul ignore else */
+ if (timeoutType === TIMEOUT_HEADERS) {
+ if (!socket[kWriting] || socket.writableNeedDrain || client[kRunning] > 1) {
+ assert$12(!parser.paused, "cannot be paused while waiting for headers");
+ util.destroy(socket, new HeadersTimeoutError());
+ }
+ } else if (timeoutType === TIMEOUT_BODY) {
+ if (!parser.paused) util.destroy(socket, new BodyTimeoutError());
+ } else if (timeoutType === TIMEOUT_IDLE) {
+ assert$12(client[kRunning] === 0 && client[kKeepAliveTimeoutValue]);
+ util.destroy(socket, new InformationalError("socket idle timeout"));
+ }
+ }
+ function onSocketReadable() {
+ const { [kParser]: parser } = this;
+ if (parser) parser.readMore();
+ }
+ function onSocketError(err) {
+ const { [kClient]: client, [kParser]: parser } = this;
+ assert$12(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID");
+ if (client[kHTTPConnVersion] !== "h2") {
+ if (err.code === "ECONNRESET" && parser.statusCode && !parser.shouldKeepAlive) {
+ parser.onMessageComplete();
+ return;
+ }
+ }
+ this[kError] = err;
+ onError(this[kClient], err);
+ }
+ function onError(client, err) {
+ if (client[kRunning] === 0 && err.code !== "UND_ERR_INFO" && err.code !== "UND_ERR_SOCKET") {
+ assert$12(client[kPendingIdx] === client[kRunningIdx]);
+ const requests = client[kQueue].splice(client[kRunningIdx]);
+ for (let i = 0; i < requests.length; i++) {
+ const request = requests[i];
+ errorRequest(client, request, err);
+ }
+ assert$12(client[kSize] === 0);
+ }
+ }
+ function onSocketEnd() {
+ const { [kParser]: parser, [kClient]: client } = this;
+ if (client[kHTTPConnVersion] !== "h2") {
+ if (parser.statusCode && !parser.shouldKeepAlive) {
+ parser.onMessageComplete();
+ return;
+ }
+ }
+ util.destroy(this, new SocketError("other side closed", util.getSocketInfo(this)));
+ }
+ function onSocketClose() {
+ const { [kClient]: client, [kParser]: parser } = this;
+ if (client[kHTTPConnVersion] === "h1" && parser) {
+ if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) parser.onMessageComplete();
+ this[kParser].destroy();
+ this[kParser] = null;
+ }
+ const err = this[kError] || new SocketError("closed", util.getSocketInfo(this));
+ client[kSocket] = null;
+ if (client.destroyed) {
+ assert$12(client[kPending] === 0);
+ const requests = client[kQueue].splice(client[kRunningIdx]);
+ for (let i = 0; i < requests.length; i++) {
+ const request = requests[i];
+ errorRequest(client, request, err);
+ }
+ } else if (client[kRunning] > 0 && err.code !== "UND_ERR_INFO") {
+ const request = client[kQueue][client[kRunningIdx]];
+ client[kQueue][client[kRunningIdx]++] = null;
+ errorRequest(client, request, err);
+ }
+ client[kPendingIdx] = client[kRunningIdx];
+ assert$12(client[kRunning] === 0);
+ client.emit("disconnect", client[kUrl], [client], err);
+ resume(client);
+ }
+ async function connect(client) {
+ assert$12(!client[kConnecting]);
+ assert$12(!client[kSocket]);
+ let { host, hostname, protocol, port } = client[kUrl];
+ if (hostname[0] === "[") {
+ const idx = hostname.indexOf("]");
+ assert$12(idx !== -1);
+ const ip = hostname.substring(1, idx);
+ assert$12(net.isIP(ip));
+ hostname = ip;
+ }
+ client[kConnecting] = true;
+ if (channels.beforeConnect.hasSubscribers) channels.beforeConnect.publish({
+ connectParams: {
+ host,
+ hostname,
+ protocol,
+ port,
+ 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, socket) => {
+ if (err) reject(err);
+ else resolve(socket);
+ });
+ });
+ if (client.destroyed) {
+ util.destroy(socket.on("error", () => {}), new ClientDestroyedError());
+ return;
+ }
+ client[kConnecting] = false;
+ assert$12(socket);
+ if (socket.alpnProtocol === "h2") {
+ 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[kHTTP2SessionState].maxConcurrentStreams
+ });
+ client[kHTTPConnVersion] = "h2";
+ session[kClient] = client;
+ session[kSocket] = socket;
+ session.on("error", onHttp2SessionError);
+ session.on("frameError", onHttp2FrameError);
+ session.on("end", onHttp2SessionEnd);
+ session.on("goaway", onHTTP2GoAway);
+ session.on("close", onSocketClose);
+ session.unref();
+ client[kHTTP2Session] = session;
+ socket[kHTTP2Session] = session;
+ } else {
+ 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);
+ }
+ socket[kCounter] = 0;
+ socket[kMaxRequests] = client[kMaxRequests];
+ socket[kClient] = client;
+ socket[kError] = null;
+ socket.on("error", onSocketError).on("readable", onSocketReadable).on("end", onSocketEnd).on("close", onSocketClose);
+ client[kSocket] = socket;
+ if (channels.connected.hasSubscribers) channels.connected.publish({
+ connectParams: {
+ host,
+ hostname,
+ protocol,
+ port,
+ 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,
+ servername: client[kServerName],
+ localAddress: client[kLocalAddress]
+ },
+ connector: client[kConnector],
+ error: err
+ });
+ if (err.code === "ERR_TLS_CERT_ALTNAME_INVALID") {
+ assert$12(client[kRunning] === 0);
+ while (client[kPending] > 0 && client[kQueue][client[kPendingIdx]].servername === client[kServerName]) {
+ const request = client[kQueue][client[kPendingIdx]++];
+ errorRequest(client, request, err);
+ }
+ } else onError(client, err);
+ client.emit("connectionError", client[kUrl], [client], err);
+ }
+ resume(client);
+ }
+ 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$12(client[kPending] === 0);
+ return;
+ }
+ if (client[kClosedResolve] && !client[kSize]) {
+ client[kClosedResolve]();
+ client[kClosedResolve] = null;
+ return;
+ }
+ const socket = client[kSocket];
+ if (socket && !socket.destroyed && socket.alpnProtocol !== "h2") {
+ 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_IDLE) socket[kParser].setTimeout(client[kKeepAliveTimeoutValue], TIMEOUT_IDLE);
+ } 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);
+ }
+ }
+ }
+ if (client[kBusy]) client[kNeedDrain] = 2;
+ else if (client[kNeedDrain] === 2) {
+ if (sync) {
+ client[kNeedDrain] = 1;
+ process.nextTick(emitDrain, client);
+ } else emitDrain(client);
+ continue;
+ }
+ if (client[kPending] === 0) return;
+ if (client[kRunning] >= (client[kPipelining] || 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;
+ if (socket && socket.servername !== request.servername) {
+ util.destroy(socket, new InformationalError("servername changed"));
+ return;
+ }
+ }
+ if (client[kConnecting]) return;
+ if (!socket && !client[kHTTP2Session]) {
+ connect(client);
+ return;
+ }
+ if (socket.destroyed || socket[kWriting] || socket[kReset] || socket[kBlocking]) return;
+ if (client[kRunning] > 0 && !request.idempotent) return;
+ if (client[kRunning] > 0 && (request.upgrade || request.method === "CONNECT")) return;
+ if (client[kRunning] > 0 && util.bodyLength(request.body) !== 0 && (util.isStream(request.body) || util.isAsyncIterable(request.body))) return;
+ if (!request.aborted && write(client, request)) client[kPendingIdx]++;
+ else client[kQueue].splice(client[kPendingIdx], 1);
+ }
+ }
+ function shouldSendContentLength(method) {
+ return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT";
+ }
+ function write(client, request) {
+ if (client[kHTTPConnVersion] === "h2") {
+ writeH2(client, client[kHTTP2Session], request);
+ return;
+ }
+ const { body, method, path, host, upgrade, headers, blocking, reset } = request;
+ const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH";
+ if (body && typeof body.read === "function") body.read(0);
+ const bodyLength = util.bodyLength(body);
+ let contentLength = bodyLength;
+ 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]) {
+ errorRequest(client, request, new RequestContentLengthMismatchError());
+ return false;
+ }
+ process.emitWarning(new RequestContentLengthMismatchError());
+ }
+ const socket = client[kSocket];
+ try {
+ request.onConnect((err) => {
+ if (request.aborted || request.completed) return;
+ errorRequest(client, request, err || new RequestAbortedError());
+ util.destroy(socket, new InformationalError("aborted"));
+ });
+ } catch (err) {
+ 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\n`;
+ if (typeof host === "string") header += `host: ${host}\r\n`;
+ else header += client[kHostHeader];
+ if (upgrade) header += `connection: upgrade\r\nupgrade: ${upgrade}\r\n`;
+ else if (client[kPipelining] && !socket[kReset]) header += "connection: keep-alive\r\n";
+ else header += "connection: close\r\n";
+ if (headers) header += headers;
+ if (channels.sendHeaders.hasSubscribers) channels.sendHeaders.publish({
+ request,
+ headers: header,
+ socket
+ });
+ /* istanbul ignore else: assertion */
+ if (!body || bodyLength === 0) {
+ if (contentLength === 0) socket.write(`${header}content-length: 0\r\n\r\n`, "latin1");
+ else {
+ assert$12(contentLength === null, "no body must not have content length");
+ socket.write(`${header}\r\n`, "latin1");
+ }
+ request.onRequestSent();
+ } else if (util.isBuffer(body)) {
+ assert$12(contentLength === body.byteLength, "buffer body must have content length");
+ socket.cork();
+ socket.write(`${header}content-length: ${contentLength}\r\n\r\n`, "latin1");
+ socket.write(body);
+ socket.uncork();
+ request.onBodySent(body);
+ request.onRequestSent();
+ if (!expectsPayload) socket[kReset] = true;
+ } else if (util.isBlobLike(body)) if (typeof body.stream === "function") writeIterable({
+ body: body.stream(),
+ client,
+ request,
+ socket,
+ contentLength,
+ header,
+ expectsPayload
+ });
+ else writeBlob({
+ body,
+ client,
+ request,
+ socket,
+ contentLength,
+ header,
+ expectsPayload
+ });
+ else if (util.isStream(body)) writeStream({
+ body,
+ client,
+ request,
+ socket,
+ contentLength,
+ header,
+ expectsPayload
+ });
+ else if (util.isIterable(body)) writeIterable({
+ body,
+ client,
+ request,
+ socket,
+ contentLength,
+ header,
+ expectsPayload
+ });
+ else assert$12(false);
+ return true;
+ }
+ function writeH2(client, session, request) {
+ const { body, method, path, host, upgrade, expectContinue, signal, headers: reqHeaders } = request;
+ let headers;
+ if (typeof reqHeaders === "string") headers = Request[kHTTP2CopyHeaders](reqHeaders.trim());
+ else headers = reqHeaders;
+ if (upgrade) {
+ errorRequest(client, request, /* @__PURE__ */ new Error("Upgrade not supported for H2"));
+ return false;
+ }
+ try {
+ request.onConnect((err) => {
+ if (request.aborted || request.completed) return;
+ errorRequest(client, request, err || new RequestAbortedError());
+ });
+ } catch (err) {
+ errorRequest(client, request, err);
+ }
+ if (request.aborted) return false;
+ /** @type {import('node:http2').ClientHttp2Stream} */
+ let stream;
+ const h2State = client[kHTTP2SessionState];
+ headers[HTTP2_HEADER_AUTHORITY] = host || client[kHost];
+ headers[HTTP2_HEADER_METHOD] = method;
+ if (method === "CONNECT") {
+ session.ref();
+ stream = session.request(headers, {
+ endStream: false,
+ signal
+ });
+ if (stream.id && !stream.pending) {
+ request.onUpgrade(null, null, stream);
+ ++h2State.openStreams;
+ } else stream.once("ready", () => {
+ request.onUpgrade(null, null, stream);
+ ++h2State.openStreams;
+ });
+ stream.once("close", () => {
+ h2State.openStreams -= 1;
+ if (h2State.openStreams === 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 (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]) {
+ errorRequest(client, request, new RequestContentLengthMismatchError());
+ return false;
+ }
+ process.emitWarning(new RequestContentLengthMismatchError());
+ }
+ if (contentLength != null) {
+ assert$12(body, "no body must not have content length");
+ headers[HTTP2_HEADER_CONTENT_LENGTH] = `${contentLength}`;
+ }
+ session.ref();
+ const shouldEndStream = method === "GET" || method === "HEAD";
+ 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();
+ }
+ ++h2State.openStreams;
+ stream.once("response", (headers) => {
+ const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers;
+ if (request.onHeaders(Number(statusCode), realHeaders, stream.resume.bind(stream), "") === false) stream.pause();
+ });
+ stream.once("end", () => {
+ request.onComplete([]);
+ });
+ stream.on("data", (chunk) => {
+ if (request.onData(chunk) === false) stream.pause();
+ });
+ stream.once("close", () => {
+ h2State.openStreams -= 1;
+ if (h2State.openStreams === 0) session.unref();
+ });
+ stream.once("error", function(err) {
+ if (client[kHTTP2Session] && !client[kHTTP2Session].destroyed && !this.closed && !this.destroyed) {
+ h2State.streams -= 1;
+ util.destroy(stream, err);
+ }
+ });
+ stream.once("frameError", (type, code) => {
+ const err = new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`);
+ errorRequest(client, request, err);
+ if (client[kHTTP2Session] && !client[kHTTP2Session].destroyed && !this.closed && !this.destroyed) {
+ h2State.streams -= 1;
+ util.destroy(stream, err);
+ }
+ });
+ return true;
+ function writeBodyH2() {
+ /* istanbul ignore else: assertion */
+ if (!body) request.onRequestSent();
+ else if (util.isBuffer(body)) {
+ assert$12(contentLength === body.byteLength, "buffer body must have content length");
+ stream.cork();
+ stream.write(body);
+ stream.uncork();
+ stream.end();
+ request.onBodySent(body);
+ request.onRequestSent();
+ } else if (util.isBlobLike(body)) if (typeof body.stream === "function") writeIterable({
+ client,
+ request,
+ contentLength,
+ h2stream: stream,
+ expectsPayload,
+ body: body.stream(),
+ socket: client[kSocket],
+ header: ""
+ });
+ else writeBlob({
+ body,
+ client,
+ request,
+ contentLength,
+ expectsPayload,
+ h2stream: stream,
+ header: "",
+ socket: client[kSocket]
+ });
+ else if (util.isStream(body)) writeStream({
+ body,
+ client,
+ request,
+ contentLength,
+ expectsPayload,
+ socket: client[kSocket],
+ h2stream: stream,
+ header: ""
+ });
+ else if (util.isIterable(body)) writeIterable({
+ body,
+ client,
+ request,
+ contentLength,
+ expectsPayload,
+ header: "",
+ h2stream: stream,
+ socket: client[kSocket]
+ });
+ else assert$12(false);
+ }
+ }
+ function writeStream({ h2stream, body, client, request, socket, contentLength, header, expectsPayload }) {
+ assert$12(contentLength !== 0 || client[kRunning] === 0, "stream body cannot be pipelined");
+ if (client[kHTTPConnVersion] === "h2") {
+ const pipe = pipeline$1(body, h2stream, (err) => {
+ if (err) {
+ util.destroy(body, err);
+ util.destroy(h2stream, err);
+ } else request.onRequestSent();
+ });
+ pipe.on("data", onPipeData);
+ pipe.once("end", () => {
+ pipe.removeListener("data", onPipeData);
+ util.destroy(pipe);
+ });
+ function onPipeData(chunk) {
+ request.onBodySent(chunk);
+ }
+ return;
+ }
+ let finished = false;
+ const writer = new AsyncWriter({
+ 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 onAbort = function() {
+ if (finished) return;
+ const err = new RequestAbortedError();
+ queueMicrotask(() => onFinished(err));
+ };
+ const onFinished = function(err) {
+ if (finished) return;
+ finished = true;
+ assert$12(socket.destroyed || socket[kWriting] && client[kRunning] <= 1);
+ socket.off("drain", onDrain).off("error", onFinished);
+ body.removeListener("data", onData).removeListener("end", onFinished).removeListener("error", onFinished).removeListener("close", onAbort);
+ 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", onAbort);
+ if (body.resume) body.resume();
+ socket.on("drain", onDrain).on("error", onFinished);
+ }
+ async function writeBlob({ h2stream, body, client, request, socket, contentLength, header, expectsPayload }) {
+ assert$12(contentLength === body.size, "blob body must have content length");
+ const isH2 = client[kHTTPConnVersion] === "h2";
+ try {
+ if (contentLength != null && contentLength !== body.size) throw new RequestContentLengthMismatchError();
+ const buffer = Buffer.from(await body.arrayBuffer());
+ if (isH2) {
+ h2stream.cork();
+ h2stream.write(buffer);
+ h2stream.uncork();
+ } else {
+ socket.cork();
+ socket.write(`${header}content-length: ${contentLength}\r\n\r\n`, "latin1");
+ socket.write(buffer);
+ socket.uncork();
+ }
+ request.onBodySent(buffer);
+ request.onRequestSent();
+ if (!expectsPayload) socket[kReset] = true;
+ resume(client);
+ } catch (err) {
+ util.destroy(isH2 ? h2stream : socket, err);
+ }
+ }
+ async function writeIterable({ h2stream, body, client, request, socket, contentLength, header, expectsPayload }) {
+ assert$12(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$12(callback === null);
+ if (socket[kError]) reject(socket[kError]);
+ else callback = resolve;
+ });
+ if (client[kHTTPConnVersion] === "h2") {
+ 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();
+ }
+ } catch (err) {
+ h2stream.destroy(err);
+ } finally {
+ request.onRequestSent();
+ h2stream.end();
+ h2stream.off("close", onDrain).off("drain", onDrain);
+ }
+ return;
+ }
+ socket.on("close", onDrain).on("drain", onDrain);
+ const writer = new AsyncWriter({
+ 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({ 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;
+ 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) socket[kReset] = true;
+ if (contentLength === null) socket.write(`${header}transfer-encoding: chunked\r\n`, "latin1");
+ else socket.write(`${header}content-length: ${contentLength}\r\n\r\n`, "latin1");
+ }
+ if (contentLength === null) socket.write(`\r\n${len.toString(16)}\r\n`, "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) {
+ // istanbul ignore else: only for jest
+ 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\n\r\n`, "latin1");
+ else socket.write(`${header}\r\n`, "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) {
+ // istanbul ignore else: only for jest
+ if (socket[kParser].timeout.refresh) socket[kParser].timeout.refresh();
+ }
+ resume(client);
+ }
+ destroy(err) {
+ const { socket, client } = this;
+ socket[kWriting] = false;
+ if (err) {
+ assert$12(client[kRunning] <= 1, "pipeline should only contain this request");
+ util.destroy(socket, err);
+ }
+ }
+ };
+ function errorRequest(client, request, err) {
+ try {
+ request.onError(err);
+ assert$12(request.aborted);
+ } catch (err) {
+ client.emit("error", err);
+ }
+ }
+ module.exports = Client;
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/node/fixed-queue.js
+var require_fixed_queue = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const kSize = 2048;
+ const 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;
+ }
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/pool-stats.js
+var require_pool_stats = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { kFree, kConnected, kPending, kQueued, kRunning, kSize } = require_symbols$4();
+ const 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;
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/pool-base.js
+var require_pool_base = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const DispatcherBase = require_dispatcher_base();
+ const FixedQueue = require_fixed_queue();
+ const { kConnected, kSize, kRunning, kPending, kQueued, kBusy, kFree, kUrl, kClose, kDestroy, kDispatch } = require_symbols$4();
+ const PoolStats = require_pool_stats();
+ const kClients = Symbol("clients");
+ const kNeedDrain = Symbol("needDrain");
+ const kQueue = Symbol("queue");
+ const kClosedResolve = Symbol("closed resolve");
+ const kOnDrain = Symbol("onDrain");
+ const kOnConnect = Symbol("onConnect");
+ const kOnDisconnect = Symbol("onDisconnect");
+ const kOnConnectionError = Symbol("onConnectionError");
+ const kGetDispatcher = Symbol("get dispatcher");
+ const kAddClient = Symbol("add client");
+ const kRemoveClient = Symbol("remove client");
+ const kStats = Symbol("stats");
+ var PoolBase = class extends DispatcherBase {
+ constructor() {
+ super();
+ 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()) return Promise.all(this[kClients].map((c) => c.close()));
+ else return new Promise((resolve) => {
+ this[kClosedResolve] = resolve;
+ });
+ }
+ async [kDestroy](err) {
+ while (true) {
+ const item = this[kQueue].shift();
+ if (!item) break;
+ item.handler.onError(err);
+ }
+ return 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]) process.nextTick(() => {
+ 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
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/pool.js
+var require_pool = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { PoolBase, kClients, kNeedDrain, kAddClient, kGetDispatcher } = require_pool_base();
+ const Client = require_client();
+ const { InvalidArgumentError } = require_errors();
+ const util = require_util$6();
+ const { kUrl, kInterceptors } = require_symbols$4();
+ const buildConnector = require_connect();
+ const kOptions = Symbol("options");
+ const kConnections = Symbol("connections");
+ const 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 } = {}) {
+ super();
+ 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,
+ ...util.nodeHasAutoSelectFamily && autoSelectFamily ? {
+ autoSelectFamily,
+ autoSelectFamilyAttemptTimeout
+ } : void 0,
+ ...connect
+ });
+ this[kInterceptors] = options.interceptors && 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", (origin, targets, error) => {
+ for (const target of targets) {
+ const idx = this[kClients].indexOf(target);
+ if (idx !== -1) this[kClients].splice(idx, 1);
+ }
+ });
+ }
+ [kGetDispatcher]() {
+ let dispatcher = this[kClients].find((dispatcher) => !dispatcher[kNeedDrain]);
+ if (dispatcher) return dispatcher;
+ if (!this[kConnections] || this[kClients].length < this[kConnections]) {
+ dispatcher = this[kFactory](this[kUrl], this[kOptions]);
+ this[kAddClient](dispatcher);
+ }
+ return dispatcher;
+ }
+ };
+ module.exports = Pool;
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/balanced-pool.js
+var require_balanced_pool = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { BalancedPoolMissingUpstreamError, InvalidArgumentError } = require_errors();
+ const { PoolBase, kClients, kNeedDrain, kAddClient, kRemoveClient, kGetDispatcher } = require_pool_base();
+ const Pool = require_pool();
+ const { kUrl, kInterceptors } = require_symbols$4();
+ const { parseOrigin } = require_util$6();
+ const kFactory = Symbol("factory");
+ const kOptions = Symbol("options");
+ const kGreatestCommonDivisor = Symbol("kGreatestCommonDivisor");
+ const kCurrentWeight = Symbol("kCurrentWeight");
+ const kIndex = Symbol("kIndex");
+ const kWeight = Symbol("kWeight");
+ const kMaxWeightPerServer = Symbol("kMaxWeightPerServer");
+ const kErrorPenalty = Symbol("kErrorPenalty");
+ function getGreatestCommonDivisor(a, b) {
+ if (b === 0) return a;
+ return getGreatestCommonDivisor(b, a % b);
+ }
+ 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 && 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((pool) => pool[kUrl].origin === upstreamOrigin && pool.closed !== true && pool.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() {
+ this[kGreatestCommonDivisor] = this[kClients].map((p) => p[kWeight]).reduce(getGreatestCommonDivisor, 0);
+ }
+ removeUpstream(upstream) {
+ const upstreamOrigin = parseOrigin(upstream).origin;
+ const pool = this[kClients].find((pool) => pool[kUrl].origin === upstreamOrigin && pool.closed !== true && pool.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();
+ if (!this[kClients].find((dispatcher) => !dispatcher[kNeedDrain] && dispatcher.closed !== true && dispatcher.destroyed !== true)) return;
+ if (this[kClients].map((pool) => pool[kNeedDrain]).reduce((a, b) => a && b, true)) 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;
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/compat/dispatcher-weakref.js
+var require_dispatcher_weakref = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ /* istanbul ignore file: only for Node 12 */
+ const { kConnected, kSize } = require_symbols$4();
+ 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);
+ });
+ }
+ };
+ module.exports = function() {
+ if (process.env.NODE_V8_COVERAGE) return {
+ WeakRef: CompatWeakRef,
+ FinalizationRegistry: CompatFinalizer
+ };
+ return {
+ WeakRef: global.WeakRef || CompatWeakRef,
+ FinalizationRegistry: global.FinalizationRegistry || CompatFinalizer
+ };
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/agent.js
+var require_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { InvalidArgumentError } = require_errors();
+ const { kClients, kRunning, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols$4();
+ const DispatcherBase = require_dispatcher_base();
+ const Pool = require_pool();
+ const Client = require_client();
+ const util = require_util$6();
+ const createRedirectInterceptor = require_redirectInterceptor();
+ const { WeakRef, FinalizationRegistry } = require_dispatcher_weakref()();
+ const kOnConnect = Symbol("onConnect");
+ const kOnDisconnect = Symbol("onDisconnect");
+ const kOnConnectionError = Symbol("onConnectionError");
+ const kMaxRedirections = Symbol("maxRedirections");
+ const kOnDrain = Symbol("onDrain");
+ const kFactory = Symbol("factory");
+ const kFinalizer = Symbol("finalizer");
+ const 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 } = {}) {
+ super();
+ 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");
+ if (connect && typeof connect !== "function") connect = { ...connect };
+ this[kInterceptors] = options.interceptors && 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[kFinalizer] = new FinalizationRegistry(
+ /* istanbul ignore next: gc is undeterministic */
+ (key) => {
+ const ref = this[kClients].get(key);
+ if (ref !== void 0 && ref.deref() === void 0) this[kClients].delete(key);
+ }
+ );
+ const agent = this;
+ this[kOnDrain] = (origin, targets) => {
+ agent.emit("drain", origin, [agent, ...targets]);
+ };
+ this[kOnConnect] = (origin, targets) => {
+ agent.emit("connect", origin, [agent, ...targets]);
+ };
+ this[kOnDisconnect] = (origin, targets, err) => {
+ agent.emit("disconnect", origin, [agent, ...targets], err);
+ };
+ this[kOnConnectionError] = (origin, targets, err) => {
+ agent.emit("connectionError", origin, [agent, ...targets], err);
+ };
+ }
+ get [kRunning]() {
+ let ret = 0;
+ for (const ref of this[kClients].values()) {
+ const client = ref.deref();
+ /* istanbul ignore next: gc is undeterministic */
+ if (client) 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.");
+ const ref = this[kClients].get(key);
+ let dispatcher = ref ? ref.deref() : null;
+ 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, new WeakRef(dispatcher));
+ this[kFinalizer].register(dispatcher, key);
+ }
+ return dispatcher.dispatch(opts, handler);
+ }
+ async [kClose]() {
+ const closePromises = [];
+ for (const ref of this[kClients].values()) {
+ const client = ref.deref();
+ /* istanbul ignore else: gc is undeterministic */
+ if (client) closePromises.push(client.close());
+ }
+ await Promise.all(closePromises);
+ }
+ async [kDestroy](err) {
+ const destroyPromises = [];
+ for (const ref of this[kClients].values()) {
+ const client = ref.deref();
+ /* istanbul ignore else: gc is undeterministic */
+ if (client) destroyPromises.push(client.destroy(err));
+ }
+ await Promise.all(destroyPromises);
+ }
+ };
+ module.exports = Agent;
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/api/readable.js
+var require_readable = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const assert$11 = __require("assert");
+ const { Readable: Readable$2 } = __require("stream");
+ const { RequestAbortedError, NotSupportedError, InvalidArgumentError } = require_errors();
+ const util = require_util$6();
+ const { ReadableStreamFrom, toUSVString } = require_util$6();
+ let Blob;
+ const kConsume = Symbol("kConsume");
+ const kReading = Symbol("kReading");
+ const kBody = Symbol("kBody");
+ const kAbort = Symbol("abort");
+ const kContentType = Symbol("kContentType");
+ const noop = () => {};
+ module.exports = class BodyReadable extends Readable$2 {
+ constructor({ resume, abort, contentType = "", highWaterMark = 64 * 1024 }) {
+ super({
+ autoDestroy: true,
+ read: resume,
+ highWaterMark
+ });
+ this._readableState.dataEmitted = false;
+ this[kAbort] = abort;
+ this[kConsume] = null;
+ this[kBody] = null;
+ this[kContentType] = contentType;
+ this[kReading] = false;
+ }
+ destroy(err) {
+ if (this.destroyed) return this;
+ if (!err && !this._readableState.endEmitted) err = new RequestAbortedError();
+ if (err) this[kAbort]();
+ return super.destroy(err);
+ }
+ emit(ev, ...args) {
+ if (ev === "data") this._readableState.dataEmitted = true;
+ else if (ev === "error") this._readableState.errorEmitted = true;
+ return super.emit(ev, ...args);
+ }
+ 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 && this.readableLength === 0) {
+ consumePush(this[kConsume], chunk);
+ return this[kReading] ? super.push(chunk) : true;
+ }
+ return super.push(chunk);
+ }
+ async text() {
+ return consume(this, "text");
+ }
+ async json() {
+ return consume(this, "json");
+ }
+ async blob() {
+ return consume(this, "blob");
+ }
+ async arrayBuffer() {
+ return consume(this, "arrayBuffer");
+ }
+ async formData() {
+ throw new NotSupportedError();
+ }
+ get bodyUsed() {
+ return util.isDisturbed(this);
+ }
+ get body() {
+ if (!this[kBody]) {
+ this[kBody] = ReadableStreamFrom(this);
+ if (this[kConsume]) {
+ this[kBody].getReader();
+ assert$11(this[kBody].locked);
+ }
+ }
+ return this[kBody];
+ }
+ dump(opts) {
+ let limit = opts && Number.isFinite(opts.limit) ? opts.limit : 262144;
+ const signal = opts && opts.signal;
+ if (signal) try {
+ if (typeof signal !== "object" || !("aborted" in signal)) throw new InvalidArgumentError("signal must be an AbortSignal");
+ util.throwIfAborted(signal);
+ } catch (err) {
+ return Promise.reject(err);
+ }
+ if (this.closed) return Promise.resolve(null);
+ return new Promise((resolve, reject) => {
+ const signalListenerCleanup = signal ? util.addAbortListener(signal, () => {
+ this.destroy();
+ }) : noop;
+ this.on("close", function() {
+ signalListenerCleanup();
+ if (signal && signal.aborted) reject(signal.reason || Object.assign(/* @__PURE__ */ new Error("The operation was aborted"), { name: "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) {
+ if (isUnusable(stream)) throw new TypeError("unusable");
+ assert$11(!stream[kConsume]);
+ return new Promise((resolve, reject) => {
+ 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());
+ });
+ process.nextTick(consumeStart, stream[kConsume]);
+ });
+ }
+ function consumeStart(consume) {
+ if (consume.body === null) return;
+ const { _readableState: state } = consume.stream;
+ for (const chunk of state.buffer) consumePush(consume, chunk);
+ if (state.endEmitted) consumeEnd(this[kConsume]);
+ else consume.stream.on("end", function() {
+ consumeEnd(this[kConsume]);
+ });
+ consume.stream.resume();
+ while (consume.stream.read() != null);
+ }
+ function consumeEnd(consume) {
+ const { type, body, resolve, stream, length } = consume;
+ try {
+ if (type === "text") resolve(toUSVString(Buffer.concat(body)));
+ else if (type === "json") resolve(JSON.parse(Buffer.concat(body)));
+ else if (type === "arrayBuffer") {
+ const dst = new Uint8Array(length);
+ let pos = 0;
+ for (const buf of body) {
+ dst.set(buf, pos);
+ pos += buf.byteLength;
+ }
+ resolve(dst.buffer);
+ } else if (type === "blob") {
+ if (!Blob) Blob = __require("buffer").Blob;
+ resolve(new Blob(body, { type: stream[kContentType] }));
+ }
+ consumeFinish(consume);
+ } catch (err) {
+ stream.destroy(err);
+ }
+ }
+ function consumePush(consume, chunk) {
+ consume.length += chunk.length;
+ consume.body.push(chunk);
+ }
+ function consumeFinish(consume, err) {
+ if (consume.body === null) return;
+ if (err) consume.reject(err);
+ else consume.resolve();
+ consume.type = null;
+ consume.stream = null;
+ consume.resolve = null;
+ consume.reject = null;
+ consume.length = 0;
+ consume.body = null;
+ }
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/api/util.js
+var require_util$4 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const assert$10 = __require("assert");
+ const { ResponseStatusCodeError } = require_errors();
+ const { toUSVString } = require_util$6();
+ async function getResolveErrorBodyCallback({ callback, body, contentType, statusCode, statusMessage, headers }) {
+ assert$10(body);
+ let chunks = [];
+ let limit = 0;
+ for await (const chunk of body) {
+ chunks.push(chunk);
+ limit += chunk.length;
+ if (limit > 128 * 1024) {
+ chunks = null;
+ break;
+ }
+ }
+ if (statusCode === 204 || !contentType || !chunks) {
+ process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ""}`, statusCode, headers));
+ return;
+ }
+ try {
+ if (contentType.startsWith("application/json")) {
+ const payload = JSON.parse(toUSVString(Buffer.concat(chunks)));
+ process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ""}`, statusCode, headers, payload));
+ return;
+ }
+ if (contentType.startsWith("text/")) {
+ const payload = toUSVString(Buffer.concat(chunks));
+ process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ""}`, statusCode, headers, payload));
+ return;
+ }
+ } catch (err) {}
+ process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ""}`, statusCode, headers));
+ }
+ module.exports = { getResolveErrorBodyCallback };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/api/abort-signal.js
+var require_abort_signal = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { addAbortListener } = require_util$6();
+ const { RequestAbortedError } = require_errors();
+ const kListener = Symbol("kListener");
+ const kSignal = Symbol("kSignal");
+ function abort(self) {
+ if (self.abort) self.abort();
+ else self.onError(new RequestAbortedError());
+ }
+ function addSignal(self, signal) {
+ 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
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/api/api-request.js
+var require_api_request = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const Readable = require_readable();
+ const { InvalidArgumentError, RequestAbortedError } = require_errors();
+ const util = require_util$6();
+ const { getResolveErrorBodyCallback } = require_util$4();
+ const { AsyncResource: AsyncResource$4 } = __require("async_hooks");
+ const { addSignal, removeSignal } = require_abort_signal();
+ var RequestHandler = class extends AsyncResource$4 {
+ 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.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;
+ if (util.isStream(body)) body.on("error", (err) => {
+ this.onError(err);
+ });
+ addSignal(this, signal);
+ }
+ onConnect(abort, context) {
+ if (!this.callback) throw new RequestAbortedError();
+ 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 contentType = (responseHeaders === "raw" ? util.parseHeaders(rawHeaders) : headers)["content-type"];
+ const body = new Readable({
+ resume,
+ abort,
+ contentType,
+ highWaterMark
+ });
+ this.callback = null;
+ this.res = body;
+ if (callback !== null) if (this.throwOnError && statusCode >= 400) this.runInAsyncScope(getResolveErrorBodyCallback, null, {
+ callback,
+ body,
+ contentType,
+ statusCode,
+ statusMessage,
+ headers
+ });
+ else this.runInAsyncScope(callback, null, null, {
+ statusCode,
+ headers,
+ trailers: this.trailers,
+ opaque,
+ body,
+ context
+ });
+ }
+ onData(chunk) {
+ const { res } = this;
+ return res.push(chunk);
+ }
+ onComplete(trailers) {
+ const { res } = this;
+ removeSignal(this);
+ util.parseHeaders(trailers, this.trailers);
+ res.push(null);
+ }
+ onError(err) {
+ const { res, callback, body, opaque } = this;
+ removeSignal(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);
+ }
+ }
+ };
+ 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 && opts.opaque;
+ queueMicrotask(() => callback(err, { opaque }));
+ }
+ }
+ module.exports = request;
+ module.exports.RequestHandler = RequestHandler;
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/api/api-stream.js
+var require_api_stream = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { finished, PassThrough: PassThrough$1 } = __require("stream");
+ const { InvalidArgumentError, InvalidReturnValueError, RequestAbortedError } = require_errors();
+ const util = require_util$6();
+ const { getResolveErrorBodyCallback } = require_util$4();
+ const { AsyncResource: AsyncResource$3 } = __require("async_hooks");
+ const { addSignal, removeSignal } = require_abort_signal();
+ var StreamHandler = class extends AsyncResource$3 {
+ 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.callback) throw new RequestAbortedError();
+ 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 contentType = (responseHeaders === "raw" ? util.parseHeaders(rawHeaders) : headers)["content-type"];
+ res = new PassThrough$1();
+ 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, res, opaque, trailers, abort } = this;
+ this.res = null;
+ if (err || !res.readable) util.destroy(res, err);
+ this.callback = null;
+ this.runInAsyncScope(callback, null, err || null, {
+ opaque,
+ trailers
+ });
+ if (err) abort();
+ });
+ }
+ res.on("drain", resume);
+ this.res = res;
+ return (res.writableNeedDrain !== void 0 ? res.writableNeedDrain : res._writableState && res._writableState.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 && opts.opaque;
+ queueMicrotask(() => callback(err, { opaque }));
+ }
+ }
+ module.exports = stream;
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/api/api-pipeline.js
+var require_api_pipeline = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { Readable: Readable$1, Duplex, PassThrough } = __require("stream");
+ const { InvalidArgumentError, InvalidReturnValueError, RequestAbortedError } = require_errors();
+ const util = require_util$6();
+ const { AsyncResource: AsyncResource$2 } = __require("async_hooks");
+ const { addSignal, removeSignal } = require_abort_signal();
+ const assert$9 = __require("assert");
+ const kResume = Symbol("resume");
+ var PipelineRequest = class extends Readable$1 {
+ 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$1 {
+ 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$2 {
+ 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 && 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;
+ assert$9(!res, "pipeline cannot be retried");
+ if (ret.destroyed) throw new RequestAbortedError();
+ 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 } = this;
+ if (!ret.push(chunk) && body.pause) body.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;
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/api/api-upgrade.js
+var require_api_upgrade = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { InvalidArgumentError, RequestAbortedError, SocketError } = require_errors();
+ const { AsyncResource: AsyncResource$1 } = __require("async_hooks");
+ const util = require_util$6();
+ const { addSignal, removeSignal } = require_abort_signal();
+ const assert$8 = __require("assert");
+ var UpgradeHandler = class extends AsyncResource$1 {
+ 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.callback) throw new RequestAbortedError();
+ this.abort = abort;
+ this.context = null;
+ }
+ onHeaders() {
+ throw new SocketError("bad upgrade", null);
+ }
+ onUpgrade(statusCode, rawHeaders, socket) {
+ const { callback, opaque, context } = this;
+ assert$8.strictEqual(statusCode, 101);
+ 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 && opts.opaque;
+ queueMicrotask(() => callback(err, { opaque }));
+ }
+ }
+ module.exports = upgrade;
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/api/api-connect.js
+var require_api_connect = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { AsyncResource } = __require("async_hooks");
+ const { InvalidArgumentError, RequestAbortedError, SocketError } = require_errors();
+ const util = require_util$6();
+ const { 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.callback) throw new RequestAbortedError();
+ 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 && opts.opaque;
+ queueMicrotask(() => callback(err, { opaque }));
+ }
+ }
+ module.exports = connect;
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/api/index.js
+var require_api = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ 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();
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/mock/mock-errors.js
+var require_mock_errors = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { UndiciError } = require_errors();
+ module.exports = { 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";
+ }
+ } };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/mock/mock-symbols.js
+var require_mock_symbols = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ 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")
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/mock/mock-utils.js
+var require_mock_utils = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { MockNotMatchedError } = require_mock_errors();
+ const { kDispatches, kMockAgent, kOriginalDispatch, kOrigin, kGetNetConnect } = require_mock_symbols();
+ const { buildURL, nop } = require_util$6();
+ const { STATUS_CODES: STATUS_CODES$1 } = __require("http");
+ const { types: { isPromise } } = __require("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];
+ }));
+ }
+ /**
+ * @param {import('../../index').Headers|string[]|Record} headers
+ * @param {string} key
+ */
+ 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;
+ } else if (typeof headers.get === "function") return headers.get(key);
+ else return lowerCaseEntries(headers)[key.toLocaleLowerCase()];
+ }
+ /** @param {string[]} headers */
+ 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(mockDispatch, headers) {
+ if (typeof mockDispatch.headers === "function") {
+ if (Array.isArray(headers)) headers = buildHeadersFromArray(headers);
+ return mockDispatch.headers(headers ? lowerCaseEntries(headers) : {});
+ }
+ if (typeof mockDispatch.headers === "undefined") return true;
+ if (typeof headers !== "object" || typeof mockDispatch.headers !== "object") return false;
+ for (const [matchHeaderName, matchHeaderValue] of Object.entries(mockDispatch.headers)) if (!matchValue(matchHeaderValue, getHeaderByName(headers, matchHeaderName))) 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(mockDispatch, { path, method, body, headers }) {
+ const pathMatch = matchValue(mockDispatch.path, path);
+ const methodMatch = matchValue(mockDispatch.method, method);
+ const bodyMatch = typeof mockDispatch.body !== "undefined" ? matchValue(mockDispatch.body, body) : true;
+ const headersMatch = matchHeaders(mockDispatch, headers);
+ return pathMatch && methodMatch && bodyMatch && headersMatch;
+ }
+ function getResponseData(data) {
+ if (Buffer.isBuffer(data)) 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}'`);
+ 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}'`);
+ matchedMockDispatches = matchedMockDispatches.filter((mockDispatch) => matchHeaders(mockDispatch, key.headers));
+ if (matchedMockDispatches.length === 0) throw new MockNotMatchedError(`Mock dispatch not matched for headers '${typeof key.headers === "object" ? JSON.stringify(key.headers) : key.headers}'`);
+ 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) {
+ return Object.entries(data).reduce((keyValuePairs, [key, value]) => [
+ ...keyValuePairs,
+ Buffer.from(`${key}`),
+ Array.isArray(value) ? value.map((x) => Buffer.from(`${x}`)) : Buffer.from(`${value}`)
+ ], []);
+ }
+ /**
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
+ * @param {number} statusCode
+ */
+ function getStatusText(statusCode) {
+ return STATUS_CODES$1[statusCode] || "unknown";
+ }
+ async function getResponse(body) {
+ const buffers = [];
+ for await (const data of body) buffers.push(data);
+ return Buffer.concat(buffers).toString("utf8");
+ }
+ /**
+ * Mock dispatch function used to simulate undici dispatches
+ */
+ function mockDispatch(opts, handler) {
+ const key = buildKey(opts);
+ const mockDispatch = getMockDispatch(this[kDispatches], key);
+ mockDispatch.timesInvoked++;
+ if (mockDispatch.data.callback) mockDispatch.data = {
+ ...mockDispatch.data,
+ ...mockDispatch.data.callback(opts)
+ };
+ const { data: { statusCode, data, headers, trailers, error }, delay, persist } = mockDispatch;
+ const { timesInvoked, times } = mockDispatch;
+ mockDispatch.consumed = !persist && timesInvoked >= times;
+ mockDispatch.pending = timesInvoked < times;
+ if (error !== null) {
+ deleteMockDispatch(this[kDispatches], key);
+ handler.onError(error);
+ 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.abort = nop;
+ 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 (error) {
+ if (error instanceof MockNotMatchedError) {
+ const netConnect = agent[kGetNetConnect]();
+ if (netConnect === false) throw new MockNotMatchedError(`${error.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(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect is not enabled for this origin)`);
+ } else throw error;
+ }
+ 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
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/mock/mock-interceptor.js
+var require_mock_interceptor = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { getResponseData, buildKey, addMockDispatch } = require_mock_utils();
+ const { kDispatches, kDispatchKey, kDefaultHeaders, kDefaultTrailers, kContentLength, kMockDispatch } = require_mock_symbols();
+ const { InvalidArgumentError } = require_errors();
+ const { buildURL } = require_util$6();
+ /**
+ * Defines the scope API for an interceptor reply
+ */
+ 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;
+ }
+ };
+ /**
+ * Defines an interceptor for a Mock
+ */
+ 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 } : {};
+ return {
+ statusCode,
+ data,
+ headers: {
+ ...this[kDefaultHeaders],
+ ...contentLength,
+ ...responseOptions.headers
+ },
+ trailers: {
+ ...this[kDefaultTrailers],
+ ...responseOptions.trailers
+ }
+ };
+ }
+ validateReplyParameters(statusCode, data, responseOptions) {
+ if (typeof statusCode === "undefined") throw new InvalidArgumentError("statusCode must be defined");
+ if (typeof data === "undefined") throw new InvalidArgumentError("data must be defined");
+ if (typeof responseOptions !== "object") throw new InvalidArgumentError("responseOptions must be an object");
+ }
+ /**
+ * Mock an undici request with a defined reply.
+ */
+ reply(replyData) {
+ if (typeof replyData === "function") {
+ const wrappedDefaultsCallback = (opts) => {
+ const resolvedData = replyData(opts);
+ if (typeof resolvedData !== "object") throw new InvalidArgumentError("reply options callback must return an object");
+ const { statusCode, data = "", responseOptions = {} } = resolvedData;
+ this.validateReplyParameters(statusCode, data, responseOptions);
+ return { ...this.createMockScopeDispatchData(statusCode, data, responseOptions) };
+ };
+ return new MockScope(addMockDispatch(this[kDispatches], this[kDispatchKey], wrappedDefaultsCallback));
+ }
+ const [statusCode, data = "", responseOptions = {}] = [...arguments];
+ this.validateReplyParameters(statusCode, data, responseOptions);
+ const dispatchData = this.createMockScopeDispatchData(statusCode, data, responseOptions);
+ return new MockScope(addMockDispatch(this[kDispatches], this[kDispatchKey], dispatchData));
+ }
+ /**
+ * Mock an undici request with a defined error.
+ */
+ replyWithError(error) {
+ if (typeof error === "undefined") throw new InvalidArgumentError("error must be defined");
+ return new MockScope(addMockDispatch(this[kDispatches], this[kDispatchKey], { error }));
+ }
+ /**
+ * 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;
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/mock/mock-client.js
+var require_mock_client = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { promisify: promisify$1 } = __require("util");
+ const Client = require_client();
+ const { buildMockDispatch } = require_mock_utils();
+ const { kDispatches, kMockAgent, kClose, kOriginalClose, kOrigin, kOriginalDispatch, kConnected } = require_mock_symbols();
+ const { MockInterceptor } = require_mock_interceptor();
+ const Symbols = require_symbols$4();
+ const { InvalidArgumentError } = require_errors();
+ /**
+ * MockClient provides an API that extends the Client to influence the mockDispatches.
+ */
+ 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$1(this[kOriginalClose])();
+ this[kConnected] = 0;
+ this[kMockAgent][Symbols.kClients].delete(this[kOrigin]);
+ }
+ };
+ module.exports = MockClient;
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/mock/mock-pool.js
+var require_mock_pool = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { promisify } = __require("util");
+ const Pool = require_pool();
+ const { buildMockDispatch } = require_mock_utils();
+ const { kDispatches, kMockAgent, kClose, kOriginalClose, kOrigin, kOriginalDispatch, kConnected } = require_mock_symbols();
+ const { MockInterceptor } = require_mock_interceptor();
+ const Symbols = require_symbols$4();
+ const { InvalidArgumentError } = require_errors();
+ /**
+ * MockPool provides an API that extends the Pool to influence the mockDispatches.
+ */
+ 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;
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/mock/pluralizer.js
+var require_pluralizer = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const singulars = {
+ pronoun: "it",
+ is: "is",
+ was: "was",
+ this: "this"
+ };
+ const 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
+ };
+ }
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/mock/pending-interceptors-formatter.js
+var require_pending_interceptors_formatter = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { Transform } = __require("stream");
+ const { Console } = __require("console");
+ /**
+ * Gets the output of `console.table(…)` as a string.
+ */
+ 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 ? "✅" : "❌",
+ Invocations: timesInvoked,
+ Remaining: persist ? Infinity : times - timesInvoked
+ }));
+ this.logger.table(withPrettyHeaders);
+ return this.transform.read().toString();
+ }
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/mock/mock-agent.js
+var require_mock_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { kClients } = require_symbols$4();
+ const Agent = require_agent();
+ const { kAgent, kMockAgentSet, kMockAgentGet, kDispatches, kIsMockActive, kNetConnect, kGetNetConnect, kOptions, kFactory } = require_mock_symbols();
+ const MockClient = require_mock_client();
+ const MockPool = require_mock_pool();
+ const { matchValue, buildMockOptions } = require_mock_utils();
+ const { InvalidArgumentError, UndiciError } = require_errors();
+ const Dispatcher = require_dispatcher();
+ const Pluralizer = require_pluralizer();
+ const PendingInterceptorsFormatter = require_pending_interceptors_formatter();
+ var FakeWeakRef = class {
+ constructor(value) {
+ this.value = value;
+ }
+ deref() {
+ return this.value;
+ }
+ };
+ var MockAgent = class extends Dispatcher {
+ constructor(opts) {
+ super(opts);
+ this[kNetConnect] = true;
+ this[kIsMockActive] = true;
+ if (opts && opts.agent && typeof opts.agent.dispatch !== "function") throw new InvalidArgumentError("Argument opts.agent must implement Agent");
+ const agent = opts && 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;
+ }
+ get isMockActive() {
+ return this[kIsMockActive];
+ }
+ [kMockAgentSet](origin, dispatcher) {
+ this[kClients].set(origin, new FakeWeakRef(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 ref = this[kClients].get(origin);
+ if (ref) return ref.deref();
+ if (typeof origin !== "string") {
+ const dispatcher = this[kFactory]("http://localhost:9999");
+ this[kMockAgentSet](origin, dispatcher);
+ return dispatcher;
+ }
+ for (const [keyMatcher, nonExplicitRef] of Array.from(this[kClients])) {
+ const nonExplicitDispatcher = nonExplicitRef.deref();
+ 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.deref()[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;
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/proxy-agent.js
+var require_proxy_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { kProxy, kClose, kDestroy, kInterceptors } = require_symbols$4();
+ const { URL: URL$1 } = __require("url");
+ const Agent = require_agent();
+ const Pool = require_pool();
+ const DispatcherBase = require_dispatcher_base();
+ const { InvalidArgumentError, RequestAbortedError } = require_errors();
+ const buildConnector = require_connect();
+ const kAgent = Symbol("proxy agent");
+ const kClient = Symbol("proxy client");
+ const kProxyHeaders = Symbol("proxy headers");
+ const kRequestTls = Symbol("request tls settings");
+ const kProxyTls = Symbol("proxy tls settings");
+ const kConnectEndpoint = Symbol("connect endpoint function");
+ function defaultProtocolPort(protocol) {
+ return protocol === "https:" ? 443 : 80;
+ }
+ function buildProxyOptions(opts) {
+ if (typeof opts === "string") opts = { uri: opts };
+ if (!opts || !opts.uri) throw new InvalidArgumentError("Proxy opts.uri is mandatory");
+ return {
+ uri: opts.uri,
+ protocol: opts.protocol || "https"
+ };
+ }
+ function defaultFactory(origin, opts) {
+ return new Pool(origin, opts);
+ }
+ var ProxyAgent = class extends DispatcherBase {
+ constructor(opts) {
+ super(opts);
+ this[kProxy] = buildProxyOptions(opts);
+ this[kAgent] = new Agent(opts);
+ this[kInterceptors] = opts.interceptors && opts.interceptors.ProxyAgent && Array.isArray(opts.interceptors.ProxyAgent) ? opts.interceptors.ProxyAgent : [];
+ if (typeof opts === "string") opts = { uri: opts };
+ if (!opts || !opts.uri) throw new InvalidArgumentError("Proxy opts.uri is mandatory");
+ const { clientFactory = defaultFactory } = opts;
+ if (typeof clientFactory !== "function") throw new InvalidArgumentError("Proxy opts.clientFactory must be a function.");
+ this[kRequestTls] = opts.requestTls;
+ this[kProxyTls] = opts.proxyTls;
+ this[kProxyHeaders] = opts.headers || {};
+ const resolvedUrl = new URL$1(opts.uri);
+ const { origin, port, host, username, password } = resolvedUrl;
+ 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 });
+ this[kClient] = clientFactory(resolvedUrl, { connect });
+ this[kAgent] = new Agent({
+ ...opts,
+ connect: async (opts, callback) => {
+ let requestedHost = opts.host;
+ if (!opts.port) requestedHost += `:${defaultProtocolPort(opts.protocol)}`;
+ try {
+ const { socket, statusCode } = await this[kClient].connect({
+ origin,
+ port,
+ path: requestedHost,
+ signal: opts.signal,
+ headers: {
+ ...this[kProxyHeaders],
+ host
+ }
+ });
+ if (statusCode !== 200) {
+ socket.on("error", () => {}).destroy();
+ callback(new RequestAbortedError(`Proxy response (${statusCode}) !== 200 when HTTP Tunneling`));
+ }
+ if (opts.protocol !== "https:") {
+ callback(null, socket);
+ return;
+ }
+ let servername;
+ if (this[kRequestTls]) servername = this[kRequestTls].servername;
+ else servername = opts.servername;
+ this[kConnectEndpoint]({
+ ...opts,
+ servername,
+ httpSocket: socket
+ }, callback);
+ } catch (err) {
+ callback(err);
+ }
+ }
+ });
+ }
+ dispatch(opts, handler) {
+ const { host } = new URL$1(opts.origin);
+ const headers = buildHeaders(opts.headers);
+ throwIfProxyAuthIsSent(headers);
+ return this[kAgent].dispatch({
+ ...opts,
+ headers: {
+ ...headers,
+ host
+ }
+ }, handler);
+ }
+ async [kClose]() {
+ await this[kAgent].close();
+ await this[kClient].close();
+ }
+ async [kDestroy]() {
+ await this[kAgent].destroy();
+ await this[kClient].destroy();
+ }
+ };
+ /**
+ * @param {string[] | Record} headers
+ * @returns {Record}
+ */
+ function buildHeaders(headers) {
+ if (Array.isArray(headers)) {
+ /** @type {Record} */
+ const headersPair = {};
+ for (let i = 0; i < headers.length; i += 2) headersPair[headers[i]] = headers[i + 1];
+ return headersPair;
+ }
+ return headers;
+ }
+ /**
+ * @param {Record} headers
+ *
+ * Previous versions of ProxyAgent suggests the Proxy-Authorization in request headers
+ * Nevertheless, it was changed and to avoid a security vulnerability by end users
+ * this check was created.
+ * It should be removed in the next major version for performance reasons
+ */
+ function throwIfProxyAuthIsSent(headers) {
+ if (headers && Object.keys(headers).find((key) => key.toLowerCase() === "proxy-authorization")) throw new InvalidArgumentError("Proxy-Authorization should be sent in ProxyAgent constructor");
+ }
+ module.exports = ProxyAgent;
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/handler/RetryHandler.js
+var require_RetryHandler = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const assert$7 = __require("assert");
+ const { kRetryHandlerDefaultRetry } = require_symbols$4();
+ const { RequestRetryError } = require_errors();
+ const { isDisturbed, parseHeaders, parseRangeHeader } = require_util$6();
+ function calculateRetryAfterHeader(retryAfter) {
+ const current = Date.now();
+ return new Date(retryAfter).getTime() - current;
+ }
+ module.exports = class RetryHandler {
+ constructor(opts, handlers) {
+ const { retryOptions, ...dispatchOpts } = opts;
+ const { retry: retryFn, maxRetries, maxTimeout, minTimeout, timeoutFactor, methods, errorCodes, retryAfter, statusCodes } = retryOptions ?? {};
+ this.dispatch = handlers.dispatch;
+ this.handler = handlers.handler;
+ this.opts = dispatchOpts;
+ this.abort = null;
+ this.aborted = false;
+ this.retryOpts = {
+ retry: retryFn ?? RetryHandler[kRetryHandlerDefaultRetry],
+ retryAfter: retryAfter ?? true,
+ maxTimeout: maxTimeout ?? 30 * 1e3,
+ timeout: minTimeout ?? 500,
+ timeoutFactor: timeoutFactor ?? 2,
+ maxRetries: maxRetries ?? 5,
+ methods: methods ?? [
+ "GET",
+ "HEAD",
+ "OPTIONS",
+ "PUT",
+ "DELETE",
+ "TRACE"
+ ],
+ statusCodes: statusCodes ?? [
+ 500,
+ 502,
+ 503,
+ 504,
+ 429
+ ],
+ errorCodes: errorCodes ?? [
+ "ECONNRESET",
+ "ECONNREFUSED",
+ "ENOTFOUND",
+ "ENETDOWN",
+ "ENETUNREACH",
+ "EHOSTDOWN",
+ "EHOSTUNREACH",
+ "EPIPE"
+ ]
+ };
+ this.retryCount = 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, timeout, maxTimeout, timeoutFactor, statusCodes, errorCodes, methods } = retryOptions;
+ let { counter, currentTimeout } = state;
+ currentTimeout = currentTimeout != null && currentTimeout > 0 ? currentTimeout : timeout;
+ if (code && code !== "UND_ERR_REQ_RETRY" && code !== "UND_ERR_SOCKET" && !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 != null && headers["retry-after"];
+ if (retryAfterHeader) {
+ retryAfterHeader = Number(retryAfterHeader);
+ retryAfterHeader = isNaN(retryAfterHeader) ? calculateRetryAfterHeader(retryAfterHeader) : retryAfterHeader * 1e3;
+ }
+ const retryTimeout = retryAfterHeader > 0 ? Math.min(retryAfterHeader, maxTimeout) : Math.min(currentTimeout * timeoutFactor ** counter, maxTimeout);
+ state.currentTimeout = retryTimeout;
+ setTimeout(() => cb(null), retryTimeout);
+ }
+ onHeaders(statusCode, rawHeaders, resume, statusMessage) {
+ const headers = parseHeaders(rawHeaders);
+ this.retryCount += 1;
+ if (statusCode >= 300) {
+ this.abort(new RequestRetryError("Request failed", statusCode, {
+ headers,
+ count: this.retryCount
+ }));
+ return false;
+ }
+ if (this.resume != null) {
+ this.resume = null;
+ if (statusCode !== 206) return true;
+ const contentRange = parseRangeHeader(headers["content-range"]);
+ if (!contentRange) {
+ this.abort(new RequestRetryError("Content-Range mismatch", statusCode, {
+ headers,
+ count: this.retryCount
+ }));
+ return false;
+ }
+ if (this.etag != null && this.etag !== headers.etag) {
+ this.abort(new RequestRetryError("ETag mismatch", statusCode, {
+ headers,
+ count: this.retryCount
+ }));
+ return false;
+ }
+ const { start, size, end = size } = contentRange;
+ assert$7(this.start === start, "content-range mismatch");
+ assert$7(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 } = range;
+ assert$7(start != null && Number.isFinite(start) && this.start !== start, "content-range mismatch");
+ assert$7(Number.isFinite(start));
+ assert$7(end != null && Number.isFinite(end) && this.end !== 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) : null;
+ }
+ assert$7(Number.isFinite(this.start));
+ assert$7(this.end == null || Number.isFinite(this.end), "invalid content-length");
+ this.resume = resume;
+ this.etag = headers.etag != null ? headers.etag : null;
+ return this.handler.onHeaders(statusCode, rawHeaders, resume, statusMessage);
+ }
+ const err = new RequestRetryError("Request failed", statusCode, {
+ headers,
+ 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);
+ this.retryOpts.retry(err, {
+ state: {
+ counter: this.retryCount++,
+ currentTimeout: this.retryAfter
+ },
+ opts: {
+ retryOptions: this.retryOpts,
+ ...this.opts
+ }
+ }, onRetry.bind(this));
+ function onRetry(err) {
+ if (err != null || this.aborted || isDisturbed(this.opts.body)) return this.handler.onError(err);
+ if (this.start !== 0) this.opts = {
+ ...this.opts,
+ headers: {
+ ...this.opts.headers,
+ range: `bytes=${this.start}-${this.end ?? ""}`
+ }
+ };
+ try {
+ this.dispatch(this.opts, this);
+ } catch (err) {
+ this.handler.onError(err);
+ }
+ }
+ }
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/global.js
+var require_global = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const globalDispatcher = Symbol.for("undici.globalDispatcher.1");
+ const { InvalidArgumentError } = require_errors();
+ const 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
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/handler/DecoratorHandler.js
+var require_DecoratorHandler = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ module.exports = class DecoratorHandler {
+ constructor(handler) {
+ this.handler = handler;
+ }
+ onConnect(...args) {
+ return this.handler.onConnect(...args);
+ }
+ onError(...args) {
+ return this.handler.onError(...args);
+ }
+ onUpgrade(...args) {
+ return this.handler.onUpgrade(...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);
+ }
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/fetch/headers.js
+var require_headers = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { kHeadersList, kConstruct } = require_symbols$4();
+ const { kGuard } = require_symbols$3();
+ const { kEnumerableProperty } = require_util$6();
+ const { makeIterator, isValidHeaderName, isValidHeaderValue } = require_util$5();
+ const util = __require("util");
+ const { webidl } = require_webidl();
+ const assert$6 = __require("assert");
+ const kHeadersMap = Symbol("headers map");
+ const kHeadersSortedMap = Symbol("headers map sorted");
+ /**
+ * @param {number} code
+ */
+ function isHTTPWhiteSpaceCharCode(code) {
+ return code === 10 || code === 13 || code === 9 || code === 32;
+ }
+ /**
+ * @see https://fetch.spec.whatwg.org/#concept-header-value-normalize
+ * @param {string} potentialValue
+ */
+ 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"]
+ });
+ }
+ /**
+ * @see https://fetch.spec.whatwg.org/#concept-headers-append
+ */
+ 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 (headers[kGuard] === "immutable") throw new TypeError("immutable");
+ else if (headers[kGuard] === "request-no-cors") {}
+ return headers[kHeadersList].append(name, value);
+ }
+ 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;
+ }
+ }
+ contains(name) {
+ name = name.toLowerCase();
+ return this[kHeadersMap].has(name);
+ }
+ clear() {
+ this[kHeadersMap].clear();
+ this[kHeadersSortedMap] = null;
+ this.cookies = null;
+ }
+ append(name, value) {
+ this[kHeadersSortedMap] = null;
+ const lowercaseName = name.toLowerCase();
+ const exists = this[kHeadersMap].get(lowercaseName);
+ if (exists) {
+ const delimiter = lowercaseName === "cookie" ? "; " : ", ";
+ this[kHeadersMap].set(lowercaseName, {
+ name: exists.name,
+ value: `${exists.value}${delimiter}${value}`
+ });
+ } else this[kHeadersMap].set(lowercaseName, {
+ name,
+ value
+ });
+ if (lowercaseName === "set-cookie") {
+ this.cookies ??= [];
+ this.cookies.push(value);
+ }
+ }
+ set(name, value) {
+ this[kHeadersSortedMap] = null;
+ const lowercaseName = name.toLowerCase();
+ if (lowercaseName === "set-cookie") this.cookies = [value];
+ this[kHeadersMap].set(lowercaseName, {
+ name,
+ value
+ });
+ }
+ delete(name) {
+ this[kHeadersSortedMap] = null;
+ name = name.toLowerCase();
+ if (name === "set-cookie") this.cookies = null;
+ this[kHeadersMap].delete(name);
+ }
+ get(name) {
+ const value = this[kHeadersMap].get(name.toLowerCase());
+ return value === void 0 ? null : value.value;
+ }
+ *[Symbol.iterator]() {
+ for (const [name, { value }] of this[kHeadersMap]) yield [name, value];
+ }
+ get entries() {
+ const headers = {};
+ if (this[kHeadersMap].size) for (const { name, value } of this[kHeadersMap].values()) headers[name] = value;
+ return headers;
+ }
+ };
+ var Headers = class Headers {
+ constructor(init = void 0) {
+ if (init === kConstruct) return;
+ this[kHeadersList] = new HeadersList();
+ this[kGuard] = "none";
+ if (init !== void 0) {
+ init = webidl.converters.HeadersInit(init);
+ fill(this, init);
+ }
+ }
+ append(name, value) {
+ webidl.brandCheck(this, Headers);
+ webidl.argumentLengthCheck(arguments, 2, { header: "Headers.append" });
+ name = webidl.converters.ByteString(name);
+ value = webidl.converters.ByteString(value);
+ return appendHeader(this, name, value);
+ }
+ delete(name) {
+ webidl.brandCheck(this, Headers);
+ webidl.argumentLengthCheck(arguments, 1, { header: "Headers.delete" });
+ name = webidl.converters.ByteString(name);
+ if (!isValidHeaderName(name)) throw webidl.errors.invalidArgument({
+ prefix: "Headers.delete",
+ value: name,
+ type: "header name"
+ });
+ if (this[kGuard] === "immutable") throw new TypeError("immutable");
+ else if (this[kGuard] === "request-no-cors") {}
+ if (!this[kHeadersList].contains(name)) return;
+ this[kHeadersList].delete(name);
+ }
+ get(name) {
+ webidl.brandCheck(this, Headers);
+ webidl.argumentLengthCheck(arguments, 1, { header: "Headers.get" });
+ name = webidl.converters.ByteString(name);
+ if (!isValidHeaderName(name)) throw webidl.errors.invalidArgument({
+ prefix: "Headers.get",
+ value: name,
+ type: "header name"
+ });
+ return this[kHeadersList].get(name);
+ }
+ has(name) {
+ webidl.brandCheck(this, Headers);
+ webidl.argumentLengthCheck(arguments, 1, { header: "Headers.has" });
+ name = webidl.converters.ByteString(name);
+ if (!isValidHeaderName(name)) throw webidl.errors.invalidArgument({
+ prefix: "Headers.has",
+ value: name,
+ type: "header name"
+ });
+ return this[kHeadersList].contains(name);
+ }
+ set(name, value) {
+ webidl.brandCheck(this, Headers);
+ webidl.argumentLengthCheck(arguments, 2, { header: "Headers.set" });
+ name = webidl.converters.ByteString(name);
+ value = webidl.converters.ByteString(value);
+ value = headerValueNormalize(value);
+ if (!isValidHeaderName(name)) throw webidl.errors.invalidArgument({
+ prefix: "Headers.set",
+ value: name,
+ type: "header name"
+ });
+ else if (!isValidHeaderValue(value)) throw webidl.errors.invalidArgument({
+ prefix: "Headers.set",
+ value,
+ type: "header value"
+ });
+ if (this[kGuard] === "immutable") throw new TypeError("immutable");
+ else if (this[kGuard] === "request-no-cors") {}
+ this[kHeadersList].set(name, value);
+ }
+ getSetCookie() {
+ webidl.brandCheck(this, Headers);
+ const list = this[kHeadersList].cookies;
+ if (list) return [...list];
+ return [];
+ }
+ get [kHeadersSortedMap]() {
+ if (this[kHeadersList][kHeadersSortedMap]) return this[kHeadersList][kHeadersSortedMap];
+ const headers = [];
+ const names = [...this[kHeadersList]].sort((a, b) => a[0] < b[0] ? -1 : 1);
+ const cookies = this[kHeadersList].cookies;
+ for (let i = 0; i < names.length; ++i) {
+ const [name, value] = names[i];
+ if (name === "set-cookie") for (let j = 0; j < cookies.length; ++j) headers.push([name, cookies[j]]);
+ else {
+ assert$6(value !== null);
+ headers.push([name, value]);
+ }
+ }
+ this[kHeadersList][kHeadersSortedMap] = headers;
+ return headers;
+ }
+ keys() {
+ webidl.brandCheck(this, Headers);
+ if (this[kGuard] === "immutable") {
+ const value = this[kHeadersSortedMap];
+ return makeIterator(() => value, "Headers", "key");
+ }
+ return makeIterator(() => [...this[kHeadersSortedMap].values()], "Headers", "key");
+ }
+ values() {
+ webidl.brandCheck(this, Headers);
+ if (this[kGuard] === "immutable") {
+ const value = this[kHeadersSortedMap];
+ return makeIterator(() => value, "Headers", "value");
+ }
+ return makeIterator(() => [...this[kHeadersSortedMap].values()], "Headers", "value");
+ }
+ entries() {
+ webidl.brandCheck(this, Headers);
+ if (this[kGuard] === "immutable") {
+ const value = this[kHeadersSortedMap];
+ return makeIterator(() => value, "Headers", "key+value");
+ }
+ return makeIterator(() => [...this[kHeadersSortedMap].values()], "Headers", "key+value");
+ }
+ /**
+ * @param {(value: string, key: string, self: Headers) => void} callbackFn
+ * @param {unknown} thisArg
+ */
+ forEach(callbackFn, thisArg = globalThis) {
+ webidl.brandCheck(this, Headers);
+ webidl.argumentLengthCheck(arguments, 1, { header: "Headers.forEach" });
+ if (typeof callbackFn !== "function") throw new TypeError("Failed to execute 'forEach' on 'Headers': parameter 1 is not of type 'Function'.");
+ for (const [key, value] of this) callbackFn.apply(thisArg, [
+ value,
+ key,
+ this
+ ]);
+ }
+ [Symbol.for("nodejs.util.inspect.custom")]() {
+ webidl.brandCheck(this, Headers);
+ return this[kHeadersList];
+ }
+ };
+ Headers.prototype[Symbol.iterator] = Headers.prototype.entries;
+ Object.defineProperties(Headers.prototype, {
+ append: kEnumerableProperty,
+ delete: kEnumerableProperty,
+ get: kEnumerableProperty,
+ has: kEnumerableProperty,
+ set: kEnumerableProperty,
+ getSetCookie: kEnumerableProperty,
+ keys: kEnumerableProperty,
+ values: kEnumerableProperty,
+ entries: kEnumerableProperty,
+ forEach: kEnumerableProperty,
+ [Symbol.iterator]: { enumerable: false },
+ [Symbol.toStringTag]: {
+ value: "Headers",
+ configurable: true
+ },
+ [util.inspect.custom]: { enumerable: false }
+ });
+ webidl.converters.HeadersInit = function(V) {
+ if (webidl.util.Type(V) === "Object") {
+ if (V[Symbol.iterator]) return webidl.converters["sequence>"](V);
+ return webidl.converters["record"](V);
+ }
+ throw webidl.errors.conversionFailed({
+ prefix: "Headers constructor",
+ argument: "Argument 1",
+ types: ["sequence>", "record"]
+ });
+ };
+ module.exports = {
+ fill,
+ Headers,
+ HeadersList
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/fetch/response.js
+var require_response = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { Headers, HeadersList, fill } = require_headers();
+ const { extractBody, cloneBody, mixinBody } = require_body();
+ const util = require_util$6();
+ const { kEnumerableProperty } = util;
+ const { isValidReasonPhrase, isCancelled, isAborted, isBlobLike, serializeJavascriptValueToJSONString, isErrorLike, isomorphicEncode } = require_util$5();
+ const { redirectStatusSet, nullBodyStatus, DOMException } = require_constants$3();
+ const { kState, kHeaders, kGuard, kRealm } = require_symbols$3();
+ const { webidl } = require_webidl();
+ const { FormData } = require_formdata();
+ const { getGlobalOrigin } = require_global$1();
+ const { URLSerializer } = require_dataURL();
+ const { kHeadersList, kConstruct } = require_symbols$4();
+ const assert$5 = __require("assert");
+ const { types: types$2 } = __require("util");
+ const ReadableStream = globalThis.ReadableStream || __require("stream/web").ReadableStream;
+ const textEncoder = new TextEncoder("utf-8");
+ var Response = class Response {
+ static error() {
+ const relevantRealm = { settingsObject: {} };
+ const responseObject = new Response();
+ responseObject[kState] = makeNetworkError();
+ responseObject[kRealm] = relevantRealm;
+ responseObject[kHeaders][kHeadersList] = responseObject[kState].headersList;
+ responseObject[kHeaders][kGuard] = "immutable";
+ responseObject[kHeaders][kRealm] = relevantRealm;
+ return responseObject;
+ }
+ static json(data, init = {}) {
+ webidl.argumentLengthCheck(arguments, 1, { header: "Response.json" });
+ if (init !== null) init = webidl.converters.ResponseInit(init);
+ const body = extractBody(textEncoder.encode(serializeJavascriptValueToJSONString(data)));
+ const relevantRealm = { settingsObject: {} };
+ const responseObject = new Response();
+ responseObject[kRealm] = relevantRealm;
+ responseObject[kHeaders][kGuard] = "response";
+ responseObject[kHeaders][kRealm] = relevantRealm;
+ initializeResponse(responseObject, init, {
+ body: body[0],
+ type: "application/json"
+ });
+ return responseObject;
+ }
+ static redirect(url, status = 302) {
+ const relevantRealm = { settingsObject: {} };
+ webidl.argumentLengthCheck(arguments, 1, { header: "Response.redirect" });
+ url = webidl.converters.USVString(url);
+ status = webidl.converters["unsigned short"](status);
+ let parsedURL;
+ try {
+ parsedURL = new URL(url, getGlobalOrigin());
+ } catch (err) {
+ throw Object.assign(/* @__PURE__ */ new TypeError("Failed to parse URL from " + url), { cause: err });
+ }
+ if (!redirectStatusSet.has(status)) throw new RangeError("Invalid status code " + status);
+ const responseObject = new Response();
+ responseObject[kRealm] = relevantRealm;
+ responseObject[kHeaders][kGuard] = "immutable";
+ responseObject[kHeaders][kRealm] = relevantRealm;
+ responseObject[kState].status = status;
+ const value = isomorphicEncode(URLSerializer(parsedURL));
+ responseObject[kState].headersList.append("location", value);
+ return responseObject;
+ }
+ constructor(body = null, init = {}) {
+ if (body !== null) body = webidl.converters.BodyInit(body);
+ init = webidl.converters.ResponseInit(init);
+ this[kRealm] = { settingsObject: {} };
+ this[kState] = makeResponse({});
+ this[kHeaders] = new Headers(kConstruct);
+ this[kHeaders][kGuard] = "response";
+ this[kHeaders][kHeadersList] = this[kState].headersList;
+ this[kHeaders][kRealm] = this[kRealm];
+ let bodyWithType = null;
+ if (body != null) {
+ const [extractedBody, type] = extractBody(body);
+ bodyWithType = {
+ body: extractedBody,
+ type
+ };
+ }
+ initializeResponse(this, init, bodyWithType);
+ }
+ get type() {
+ webidl.brandCheck(this, Response);
+ return this[kState].type;
+ }
+ 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);
+ }
+ get redirected() {
+ webidl.brandCheck(this, Response);
+ return this[kState].urlList.length > 1;
+ }
+ get status() {
+ webidl.brandCheck(this, Response);
+ return this[kState].status;
+ }
+ get ok() {
+ webidl.brandCheck(this, Response);
+ return this[kState].status >= 200 && this[kState].status <= 299;
+ }
+ get statusText() {
+ webidl.brandCheck(this, Response);
+ return this[kState].statusText;
+ }
+ 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);
+ }
+ clone() {
+ webidl.brandCheck(this, Response);
+ if (this.bodyUsed || this.body && this.body.locked) throw webidl.errors.exception({
+ header: "Response.clone",
+ message: "Body has already been consumed."
+ });
+ const clonedResponse = cloneResponse(this[kState]);
+ const clonedResponseObject = new Response();
+ clonedResponseObject[kState] = clonedResponse;
+ clonedResponseObject[kRealm] = this[kRealm];
+ clonedResponseObject[kHeaders][kHeadersList] = clonedResponse.headersList;
+ clonedResponseObject[kHeaders][kGuard] = this[kHeaders][kGuard];
+ clonedResponseObject[kHeaders][kRealm] = this[kHeaders][kRealm];
+ return clonedResponseObject;
+ }
+ };
+ 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(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) {
+ return makeResponse({
+ type: "error",
+ status: 0,
+ error: isErrorLike(reason) ? reason : new Error(reason ? String(reason) : reason),
+ aborted: reason && reason.name === "AbortError"
+ });
+ }
+ 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$5(!(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$5(false);
+ }
+ function makeAppropriateNetworkError(fetchParams, err = null) {
+ assert$5(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")) response[kState].headersList.append("content-type", body.type);
+ }
+ }
+ webidl.converters.ReadableStream = webidl.interfaceConverter(ReadableStream);
+ webidl.converters.FormData = webidl.interfaceConverter(FormData);
+ webidl.converters.URLSearchParams = webidl.interfaceConverter(URLSearchParams);
+ webidl.converters.XMLHttpRequestBodyInit = function(V) {
+ if (typeof V === "string") return webidl.converters.USVString(V);
+ if (isBlobLike(V)) return webidl.converters.Blob(V, { strict: false });
+ if (types$2.isArrayBuffer(V) || types$2.isTypedArray(V) || types$2.isDataView(V)) return webidl.converters.BufferSource(V);
+ if (util.isFormDataLike(V)) return webidl.converters.FormData(V, { strict: false });
+ if (V instanceof URLSearchParams) return webidl.converters.URLSearchParams(V);
+ return webidl.converters.DOMString(V);
+ };
+ webidl.converters.BodyInit = function(V) {
+ if (V instanceof ReadableStream) return webidl.converters.ReadableStream(V);
+ if (V?.[Symbol.asyncIterator]) return V;
+ return webidl.converters.XMLHttpRequestBodyInit(V);
+ };
+ 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 = {
+ makeNetworkError,
+ makeResponse,
+ makeAppropriateNetworkError,
+ filterResponse,
+ Response,
+ cloneResponse
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/fetch/request.js
+var require_request = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { extractBody, mixinBody, cloneBody } = require_body();
+ const { Headers, fill: fillHeaders, HeadersList } = require_headers();
+ const { FinalizationRegistry } = require_dispatcher_weakref()();
+ const util = require_util$6();
+ const { isValidHTTPToken, sameOrigin, normalizeMethod, makePolicyContainer, normalizeMethodRecord } = require_util$5();
+ const { forbiddenMethodsSet, corsSafeListedMethodsSet, referrerPolicy, requestRedirect, requestMode, requestCredentials, requestCache, requestDuplex } = require_constants$3();
+ const { kEnumerableProperty } = util;
+ const { kHeaders, kSignal, kState, kGuard, kRealm } = require_symbols$3();
+ const { webidl } = require_webidl();
+ const { getGlobalOrigin } = require_global$1();
+ const { URLSerializer } = require_dataURL();
+ const { kHeadersList, kConstruct } = require_symbols$4();
+ const assert$4 = __require("assert");
+ const { getMaxListeners, setMaxListeners, getEventListeners, defaultMaxListeners } = __require("events");
+ let TransformStream = globalThis.TransformStream;
+ const kAbortController = Symbol("abortController");
+ const requestFinalizer = new FinalizationRegistry(({ signal, abort }) => {
+ signal.removeEventListener("abort", abort);
+ });
+ var Request = class Request {
+ constructor(input, init = {}) {
+ if (input === kConstruct) return;
+ webidl.argumentLengthCheck(arguments, 1, { header: "Request constructor" });
+ input = webidl.converters.RequestInfo(input);
+ init = webidl.converters.RequestInit(init);
+ this[kRealm] = { settingsObject: {
+ baseUrl: getGlobalOrigin(),
+ get origin() {
+ return this.baseUrl?.origin;
+ },
+ policyContainer: makePolicyContainer()
+ } };
+ let request = null;
+ let fallbackMode = null;
+ const baseUrl = this[kRealm].settingsObject.baseUrl;
+ let signal = null;
+ if (typeof input === "string") {
+ 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 {
+ assert$4(input instanceof Request);
+ request = input[kState];
+ signal = input[kSignal];
+ }
+ const origin = this[kRealm].settingsObject.origin;
+ let window = "client";
+ if (request.window?.constructor?.name === "EnvironmentSettingsObject" && sameOrigin(request.window, origin)) window = request.window;
+ if (init.window != null) throw new TypeError(`'window' option '${window}' must be null`);
+ if ("window" in init) window = "no-window";
+ request = makeRequest({
+ method: request.method,
+ headersList: request.headersList,
+ unsafeRequest: request.unsafeRequest,
+ client: this[kRealm].settingsObject,
+ window,
+ priority: request.priority,
+ origin: request.origin,
+ referrer: request.referrer,
+ referrerPolicy: request.referrerPolicy,
+ mode: request.mode,
+ credentials: request.credentials,
+ cache: request.cache,
+ redirect: request.redirect,
+ integrity: request.integrity,
+ keepalive: request.keepalive,
+ reloadNavigation: request.reloadNavigation,
+ historyNavigation: request.historyNavigation,
+ 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, this[kRealm].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;
+ if (!isValidHTTPToken(method)) throw new TypeError(`'${method}' is not a valid HTTP method.`);
+ if (forbiddenMethodsSet.has(method.toUpperCase())) throw new TypeError(`'${method}' HTTP method is unsupported.`);
+ method = normalizeMethodRecord[method] ?? normalizeMethod(method);
+ request.method = method;
+ }
+ if (init.signal !== void 0) signal = init.signal;
+ this[kState] = request;
+ const ac = new AbortController();
+ this[kSignal] = ac.signal;
+ this[kSignal][kRealm] = this[kRealm];
+ 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 = function() {
+ const ac = acRef.deref();
+ if (ac !== void 0) ac.abort(this.reason);
+ };
+ try {
+ if (typeof getMaxListeners === "function" && getMaxListeners(signal) === defaultMaxListeners) setMaxListeners(100, signal);
+ else if (getEventListeners(signal, "abort").length >= defaultMaxListeners) setMaxListeners(100, signal);
+ } catch {}
+ util.addAbortListener(signal, abort);
+ requestFinalizer.register(ac, {
+ signal,
+ abort
+ });
+ }
+ }
+ this[kHeaders] = new Headers(kConstruct);
+ this[kHeaders][kHeadersList] = request.headersList;
+ this[kHeaders][kGuard] = "request";
+ this[kHeaders][kRealm] = this[kRealm];
+ if (mode === "no-cors") {
+ if (!corsSafeListedMethodsSet.has(request.method)) throw new TypeError(`'${request.method} is unsupported in no-cors mode.`);
+ this[kHeaders][kGuard] = "request-no-cors";
+ }
+ if (initHasKey) {
+ /** @type {HeadersList} */
+ const headersList = this[kHeaders][kHeadersList];
+ const headers = init.headers !== void 0 ? init.headers : new HeadersList(headersList);
+ headersList.clear();
+ if (headers instanceof HeadersList) {
+ for (const [key, val] of headers) headersList.append(key, val);
+ 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 && !this[kHeaders][kHeadersList].contains("content-type")) 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 (util.isDisturbed(inputBody.stream) || inputBody.stream.locked) throw new TypeError("Cannot construct a Request with a Request object that has already been used.");
+ if (!TransformStream) TransformStream = __require("stream/web").TransformStream;
+ const identityTransform = new TransformStream();
+ inputBody.stream.pipeThrough(identityTransform);
+ finalBody = {
+ source: inputBody.source,
+ length: inputBody.length,
+ stream: identityTransform.readable
+ };
+ }
+ this[kState].body = finalBody;
+ }
+ get method() {
+ webidl.brandCheck(this, Request);
+ return this[kState].method;
+ }
+ get url() {
+ webidl.brandCheck(this, Request);
+ return URLSerializer(this[kState].url);
+ }
+ get headers() {
+ webidl.brandCheck(this, Request);
+ return this[kHeaders];
+ }
+ get destination() {
+ webidl.brandCheck(this, Request);
+ return this[kState].destination;
+ }
+ 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();
+ }
+ get referrerPolicy() {
+ webidl.brandCheck(this, Request);
+ return this[kState].referrerPolicy;
+ }
+ get mode() {
+ webidl.brandCheck(this, Request);
+ return this[kState].mode;
+ }
+ get credentials() {
+ return this[kState].credentials;
+ }
+ get cache() {
+ webidl.brandCheck(this, Request);
+ return this[kState].cache;
+ }
+ get redirect() {
+ webidl.brandCheck(this, Request);
+ return this[kState].redirect;
+ }
+ get integrity() {
+ webidl.brandCheck(this, Request);
+ return this[kState].integrity;
+ }
+ get keepalive() {
+ webidl.brandCheck(this, Request);
+ return this[kState].keepalive;
+ }
+ get isReloadNavigation() {
+ webidl.brandCheck(this, Request);
+ return this[kState].reloadNavigation;
+ }
+ get isHistoryNavigation() {
+ webidl.brandCheck(this, Request);
+ return this[kState].historyNavigation;
+ }
+ 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";
+ }
+ clone() {
+ webidl.brandCheck(this, Request);
+ if (this.bodyUsed || this.body?.locked) throw new TypeError("unusable");
+ const clonedRequest = cloneRequest(this[kState]);
+ const clonedRequestObject = new Request(kConstruct);
+ clonedRequestObject[kState] = clonedRequest;
+ clonedRequestObject[kRealm] = this[kRealm];
+ clonedRequestObject[kHeaders] = new Headers(kConstruct);
+ clonedRequestObject[kHeaders][kHeadersList] = clonedRequest.headersList;
+ clonedRequestObject[kHeaders][kGuard] = this[kHeaders][kGuard];
+ clonedRequestObject[kHeaders][kRealm] = this[kHeaders][kRealm];
+ const ac = new AbortController();
+ if (this.signal.aborted) ac.abort(this.signal.reason);
+ else util.addAbortListener(this.signal, () => {
+ ac.abort(this.signal.reason);
+ });
+ clonedRequestObject[kSignal] = ac.signal;
+ return clonedRequestObject;
+ }
+ };
+ mixinBody(Request);
+ function makeRequest(init) {
+ const request = {
+ method: "GET",
+ localURLsOnly: false,
+ unsafeRequest: false,
+ body: null,
+ client: null,
+ reservedClient: null,
+ replacesClientId: "",
+ window: "client",
+ keepalive: false,
+ serviceWorkers: "all",
+ initiator: "",
+ destination: "",
+ priority: null,
+ origin: "client",
+ policyContainer: "client",
+ referrer: "client",
+ referrerPolicy: "",
+ mode: "no-cors",
+ useCORSPreflightFlag: false,
+ credentials: "same-origin",
+ useCredentials: false,
+ cache: "default",
+ redirect: "follow",
+ integrity: "",
+ cryptoGraphicsNonceMetadata: "",
+ parserMetadata: "",
+ reloadNavigation: false,
+ historyNavigation: false,
+ userActivation: false,
+ taintedOrigin: false,
+ redirectCount: 0,
+ responseTainting: "basic",
+ preventNoCacheCacheControlHeaderModification: false,
+ done: false,
+ timingAllowFailed: false,
+ ...init,
+ headersList: init.headersList ? new HeadersList(init.headersList) : new HeadersList()
+ };
+ request.url = request.urlList[0];
+ return request;
+ }
+ function cloneRequest(request) {
+ const newRequest = makeRequest({
+ ...request,
+ body: null
+ });
+ if (request.body != null) newRequest.body = cloneBody(request.body);
+ return newRequest;
+ }
+ 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) {
+ if (typeof V === "string") return webidl.converters.USVString(V);
+ if (V instanceof Request) return webidl.converters.Request(V);
+ return webidl.converters.USVString(V);
+ };
+ 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,
+ allowedValues: referrerPolicy
+ },
+ {
+ key: "mode",
+ converter: webidl.converters.DOMString,
+ allowedValues: requestMode
+ },
+ {
+ key: "credentials",
+ converter: webidl.converters.DOMString,
+ allowedValues: requestCredentials
+ },
+ {
+ key: "cache",
+ converter: webidl.converters.DOMString,
+ allowedValues: requestCache
+ },
+ {
+ key: "redirect",
+ converter: webidl.converters.DOMString,
+ allowedValues: requestRedirect
+ },
+ {
+ key: "integrity",
+ converter: webidl.converters.DOMString
+ },
+ {
+ key: "keepalive",
+ converter: webidl.converters.boolean
+ },
+ {
+ key: "signal",
+ converter: webidl.nullableConverter((signal) => webidl.converters.AbortSignal(signal, { strict: false }))
+ },
+ {
+ key: "window",
+ converter: webidl.converters.any
+ },
+ {
+ key: "duplex",
+ converter: webidl.converters.DOMString,
+ allowedValues: requestDuplex
+ }
+ ]);
+ module.exports = {
+ Request,
+ makeRequest
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/fetch/index.js
+var require_fetch = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { Response, makeNetworkError, makeAppropriateNetworkError, filterResponse, makeResponse } = require_response();
+ const { Headers } = require_headers();
+ const { Request, makeRequest } = require_request();
+ const zlib = __require("zlib");
+ const { 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 } = require_util$5();
+ const { kState, kHeaders, kGuard, kRealm } = require_symbols$3();
+ const assert$3 = __require("assert");
+ const { safelyExtractBody } = require_body();
+ const { redirectStatusSet, nullBodyStatus, safeMethodsSet, requestBodyHeader, subresourceSet, DOMException } = require_constants$3();
+ const { kHeadersList } = require_symbols$4();
+ const EE = __require("events");
+ const { Readable, pipeline } = __require("stream");
+ const { addAbortListener, isErrored, isReadable, nodeMajor, nodeMinor } = require_util$6();
+ const { dataURLProcessor, serializeAMimeType } = require_dataURL();
+ const { TransformStream } = __require("stream/web");
+ const { getGlobalDispatcher } = require_global();
+ const { webidl } = require_webidl();
+ const { STATUS_CODES } = __require("http");
+ const GET_OR_HEAD = ["GET", "HEAD"];
+ /** @type {import('buffer').resolveObjectURL} */
+ let resolveObjectURL;
+ let ReadableStream = globalThis.ReadableStream;
+ var Fetch = class extends EE {
+ constructor(dispatcher) {
+ super();
+ this.dispatcher = dispatcher;
+ this.connection = null;
+ this.dump = false;
+ this.state = "ongoing";
+ this.setMaxListeners(21);
+ }
+ terminate(reason) {
+ if (this.state !== "ongoing") return;
+ this.state = "terminated";
+ this.connection?.destroy(reason);
+ this.emit("terminated", reason);
+ }
+ abort(error) {
+ if (this.state !== "ongoing") return;
+ this.state = "aborted";
+ if (!error) error = new DOMException("The operation was aborted.", "AbortError");
+ this.serializedAbortReason = error;
+ this.connection?.destroy(error);
+ this.emit("terminated", error);
+ }
+ };
+ function fetch(input, init = {}) {
+ webidl.argumentLengthCheck(arguments, 1, { header: "globalThis.fetch" });
+ const 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;
+ }
+ if (request.client.globalObject?.constructor?.name === "ServiceWorkerGlobalScope") request.serviceWorkers = "none";
+ let responseObject = null;
+ const relevantRealm = null;
+ let locallyAborted = false;
+ let controller = null;
+ addAbortListener(requestObject.signal, () => {
+ locallyAborted = true;
+ assert$3(controller != null);
+ controller.abort(requestObject.signal.reason);
+ abortFetch(p, request, responseObject, requestObject.signal.reason);
+ });
+ const handleFetchDone = (response) => finalizeAndReportTiming(response, "fetch");
+ const processResponse = (response) => {
+ if (locallyAborted) return Promise.resolve();
+ if (response.aborted) {
+ abortFetch(p, request, responseObject, controller.serializedAbortReason);
+ return Promise.resolve();
+ }
+ if (response.type === "error") {
+ p.reject(Object.assign(/* @__PURE__ */ new TypeError("fetch failed"), { cause: response.error }));
+ return Promise.resolve();
+ }
+ responseObject = new Response();
+ responseObject[kState] = response;
+ responseObject[kRealm] = relevantRealm;
+ responseObject[kHeaders][kHeadersList] = response.headersList;
+ responseObject[kHeaders][kGuard] = "immutable";
+ responseObject[kHeaders][kRealm] = relevantRealm;
+ p.resolve(responseObject);
+ };
+ controller = fetching({
+ request,
+ processResponseEndOfBody: handleFetchDone,
+ processResponse,
+ dispatcher: init.dispatcher ?? getGlobalDispatcher()
+ });
+ 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, initiatorType, globalThis, cacheState);
+ }
+ function markResourceTiming(timingInfo, originalURL, initiatorType, globalThis, cacheState) {
+ if (nodeMajor > 18 || nodeMajor === 18 && nodeMinor >= 2) performance.markResourceTiming(timingInfo, originalURL.href, initiatorType, globalThis, cacheState);
+ }
+ function abortFetch(p, request, responseObject, error) {
+ if (!error) error = new DOMException("The operation was aborted.", "AbortError");
+ p.reject(error);
+ if (request.body != null && isReadable(request.body?.stream)) request.body.stream.cancel(error).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(error).catch((err) => {
+ if (err.code === "ERR_INVALID_STATE") return;
+ throw err;
+ });
+ }
+ function fetching({ request, processRequestBodyChunkLength, processRequestEndOfBody, processResponse, processResponseEndOfBody, processResponseConsumeBody, useParallelQueue = false, dispatcher }) {
+ let taskDestination = null;
+ let crossOriginIsolatedCapability = false;
+ if (request.client != null) {
+ taskDestination = request.client.globalObject;
+ crossOriginIsolatedCapability = request.client.crossOriginIsolatedCapability;
+ }
+ const timingInfo = createOpaqueTimingInfo({ startTime: coarsenedSharedCurrentTime(crossOriginIsolatedCapability) });
+ const fetchParams = {
+ controller: new Fetch(dispatcher),
+ request,
+ timingInfo,
+ processRequestBodyChunkLength,
+ processRequestEndOfBody,
+ processResponse,
+ processResponseConsumeBody,
+ processResponseEndOfBody,
+ taskDestination,
+ crossOriginIsolatedCapability
+ };
+ assert$3(!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")) request.headersList.append("accept", "*/*");
+ if (!request.headersList.contains("accept-language")) request.headersList.append("accept-language", "*");
+ 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 (sameOrigin(currentURL, request.url) && request.responseTainting === "basic" || currentURL.protocol === "data:" || 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$3(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")) 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("buffer").resolveObjectURL;
+ const blobURLEntry = requestCurrentURL(request);
+ if (blobURLEntry.search.length !== 0) return Promise.resolve(makeNetworkError("NetworkError when attempting to fetch resource."));
+ const blobURLEntryObject = resolveObjectURL(blobURLEntry.toString());
+ if (request.method !== "GET" || !isBlobLike(blobURLEntryObject)) return Promise.resolve(makeNetworkError("invalid method"));
+ const bodyWithType = safelyExtractBody(blobURLEntryObject);
+ const body = bodyWithType[0];
+ const length = isomorphicEncode(`${body.length}`);
+ const type = bodyWithType[1] ?? "";
+ const response = makeResponse({
+ statusText: "OK",
+ headersList: [["content-length", {
+ name: "Content-Length",
+ value: length
+ }], ["content-type", {
+ name: "Content-Type",
+ value: type
+ }]]
+ });
+ response.body = body;
+ return Promise.resolve(response);
+ }
+ case "data:": {
+ const dataURLStruct = dataURLProcessor(requestCurrentURL(request));
+ 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) {
+ if (response.type === "error") {
+ response.urlList = [fetchParams.request.urlList[0]];
+ response.timingInfo = createOpaqueTimingInfo({ startTime: fetchParams.timingInfo.startTime });
+ }
+ const processResponseEndOfBody = () => {
+ fetchParams.request.done = true;
+ if (fetchParams.processResponseEndOfBody != null) queueMicrotask(() => fetchParams.processResponseEndOfBody(response));
+ };
+ if (fetchParams.processResponse != null) queueMicrotask(() => fetchParams.processResponse(response));
+ if (response.body == null) processResponseEndOfBody();
+ else {
+ const identityTransformAlgorithm = (chunk, controller) => {
+ controller.enqueue(chunk);
+ };
+ const transformStream = new TransformStream({
+ start() {},
+ transform: identityTransformAlgorithm,
+ flush: processResponseEndOfBody
+ }, { size() {
+ return 1;
+ } }, { size() {
+ return 1;
+ } });
+ response.body = { stream: response.body.stream.pipeThrough(transformStream) };
+ }
+ if (fetchParams.processResponseConsumeBody != null) {
+ const processBody = (nullOrBytes) => fetchParams.processResponseConsumeBody(response, nullOrBytes);
+ const processBodyError = (failure) => fetchParams.processResponseConsumeBody(response, failure);
+ if (response.body == null) queueMicrotask(() => processBody(null));
+ else return fullyReadBody(response.body, processBody, processBodyError);
+ return Promise.resolve();
+ }
+ }
+ 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();
+ 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$3(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");
+ request.headersList.delete("proxy-authorization", true);
+ request.headersList.delete("cookie");
+ request.headersList.delete("host");
+ }
+ if (request.body != null) {
+ assert$3(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;
+ if (request.window === "no-window" && request.redirect === "error") {
+ httpFetchParams = fetchParams;
+ httpRequest = request;
+ } else {
+ httpRequest = makeRequest(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);
+ if (contentLength != null && httpRequest.keepalive) {}
+ if (httpRequest.referrer instanceof URL) httpRequest.headersList.append("referer", isomorphicEncode(httpRequest.referrer.href));
+ appendRequestOriginHeader(httpRequest);
+ appendFetchMetadata(httpRequest);
+ if (!httpRequest.headersList.contains("user-agent")) httpRequest.headersList.append("user-agent", typeof esbuildDetection === "undefined" ? "undici" : "node");
+ if (httpRequest.cache === "default" && (httpRequest.headersList.contains("if-modified-since") || httpRequest.headersList.contains("if-none-match") || httpRequest.headersList.contains("if-unmodified-since") || httpRequest.headersList.contains("if-match") || httpRequest.headersList.contains("if-range"))) httpRequest.cache = "no-store";
+ if (httpRequest.cache === "no-cache" && !httpRequest.preventNoCacheCacheControlHeaderModification && !httpRequest.headersList.contains("cache-control")) httpRequest.headersList.append("cache-control", "max-age=0");
+ if (httpRequest.cache === "no-store" || httpRequest.cache === "reload") {
+ if (!httpRequest.headersList.contains("pragma")) httpRequest.headersList.append("pragma", "no-cache");
+ if (!httpRequest.headersList.contains("cache-control")) httpRequest.headersList.append("cache-control", "no-cache");
+ }
+ if (httpRequest.headersList.contains("range")) httpRequest.headersList.append("accept-encoding", "identity");
+ if (!httpRequest.headersList.contains("accept-encoding")) if (urlHasHttpsScheme(requestCurrentURL(httpRequest))) httpRequest.headersList.append("accept-encoding", "br, gzip, deflate");
+ else httpRequest.headersList.append("accept-encoding", "gzip, deflate");
+ httpRequest.headersList.delete("host");
+ if (includeCredentials) {}
+ if (httpCache == null) httpRequest.cache = "no-store";
+ if (httpRequest.mode !== "no-store" && httpRequest.mode !== "reload") {}
+ if (response == null) {
+ if (httpRequest.mode === "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 (response == null) response = forwardResponse;
+ }
+ response.urlList = [...httpRequest.urlList];
+ if (httpRequest.headersList.contains("range")) 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.status === 421 && !isNewConnectionFetch && (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$3(!fetchParams.controller.connection || fetchParams.controller.connection.destroyed);
+ fetchParams.controller.connection = {
+ abort: null,
+ destroyed: false,
+ destroy(err) {
+ if (!this.destroyed) {
+ this.destroyed = true;
+ this.abort?.(err ?? new DOMException("The operation was aborted.", "AbortError"));
+ }
+ }
+ };
+ const request = fetchParams.request;
+ let response = null;
+ const timingInfo = fetchParams.timingInfo;
+ request.cache = "no-store";
+ if (request.mode === "websocket") {}
+ 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 = () => {
+ fetchParams.controller.resume();
+ };
+ const cancelAlgorithm = (reason) => {
+ fetchParams.controller.abort(reason);
+ };
+ if (!ReadableStream) ReadableStream = __require("stream/web").ReadableStream;
+ const stream = new ReadableStream({
+ async start(controller) {
+ fetchParams.controller.controller = controller;
+ },
+ async pull(controller) {
+ await pullAlgorithm(controller);
+ },
+ async cancel(reason) {
+ await cancelAlgorithm(reason);
+ }
+ }, {
+ highWaterMark: 0,
+ size() {
+ return 1;
+ }
+ });
+ response.body = { stream };
+ 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;
+ }
+ fetchParams.controller.controller.enqueue(new Uint8Array(bytes));
+ if (isErrored(stream)) {
+ fetchParams.controller.terminate();
+ return;
+ }
+ if (!fetchParams.controller.controller.desiredSize) 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;
+ async function dispatch({ body }) {
+ const url = requestCurrentURL(request);
+ /** @type {import('../..').Agent} */
+ const agent = fetchParams.controller.dispatcher;
+ return new Promise((resolve, reject) => agent.dispatch({
+ path: url.pathname + url.search,
+ origin: url.origin,
+ method: request.method,
+ body: fetchParams.controller.dispatcher.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;
+ if (connection.destroyed) abort(new DOMException("The operation was aborted.", "AbortError"));
+ else {
+ fetchParams.controller.on("terminated", abort);
+ this.abort = connection.abort = abort;
+ }
+ },
+ onHeaders(status, headersList, resume, statusText) {
+ if (status < 200) return;
+ let codings = [];
+ let location = "";
+ const headers = new Headers();
+ if (Array.isArray(headersList)) for (let n = 0; n < headersList.length; n += 2) {
+ const key = headersList[n + 0].toString("latin1");
+ const val = headersList[n + 1].toString("latin1");
+ if (key.toLowerCase() === "content-encoding") codings = val.toLowerCase().split(",").map((x) => x.trim());
+ else if (key.toLowerCase() === "location") location = val;
+ headers[kHeadersList].append(key, val);
+ }
+ else {
+ const keys = Object.keys(headersList);
+ for (const key of keys) {
+ const val = headersList[key];
+ if (key.toLowerCase() === "content-encoding") codings = val.toLowerCase().split(",").map((x) => x.trim()).reverse();
+ else if (key.toLowerCase() === "location") location = val;
+ headers[kHeadersList].append(key, val);
+ }
+ }
+ this.body = new Readable({ read: resume });
+ const decoders = [];
+ const willFollow = request.redirect === "follow" && location && redirectStatusSet.has(status);
+ if (request.method !== "HEAD" && request.method !== "CONNECT" && !nullBodyStatus.includes(status) && !willFollow) for (const coding of codings) if (coding === "x-gzip" || coding === "gzip") decoders.push(zlib.createGunzip({
+ flush: zlib.constants.Z_SYNC_FLUSH,
+ finishFlush: zlib.constants.Z_SYNC_FLUSH
+ }));
+ else if (coding === "deflate") decoders.push(zlib.createInflate());
+ else if (coding === "br") decoders.push(zlib.createBrotliDecompress());
+ else {
+ decoders.length = 0;
+ break;
+ }
+ resolve({
+ status,
+ statusText,
+ headersList: headers[kHeadersList],
+ body: decoders.length ? pipeline(this.body, ...decoders, () => {}) : this.body.on("error", () => {})
+ });
+ 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);
+ fetchParams.controller.ended = true;
+ this.body.push(null);
+ },
+ onError(error) {
+ if (this.abort) fetchParams.controller.off("terminated", this.abort);
+ this.body?.destroy(error);
+ fetchParams.controller.terminate(error);
+ reject(error);
+ },
+ onUpgrade(status, headersList, socket) {
+ if (status !== 101) return;
+ const headers = new Headers();
+ for (let n = 0; n < headersList.length; n += 2) {
+ const key = headersList[n + 0].toString("latin1");
+ const val = headersList[n + 1].toString("latin1");
+ headers[kHeadersList].append(key, val);
+ }
+ resolve({
+ status,
+ statusText: STATUS_CODES[status],
+ headersList: headers[kHeadersList],
+ socket
+ });
+ return true;
+ }
+ }));
+ }
+ }
+ module.exports = {
+ fetch,
+ Fetch,
+ fetching,
+ finalizeAndReportTiming
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/fileapi/symbols.js
+var require_symbols$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ 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")
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/fileapi/progressevent.js
+var require_progressevent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { webidl } = require_webidl();
+ const kState = Symbol("ProgressEvent state");
+ /**
+ * @see https://xhr.spec.whatwg.org/#progressevent
+ */
+ var ProgressEvent = class ProgressEvent extends Event {
+ constructor(type, eventInitDict = {}) {
+ type = webidl.converters.DOMString(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 };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/fileapi/encoding.js
+var require_encoding = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ /**
+ * @see https://encoding.spec.whatwg.org/#concept-encoding-get
+ * @param {string|undefined} label
+ */
+ 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 };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/fileapi/util.js
+var require_util$3 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { kState, kError, kResult, kAborted, kLastProgressEventFired } = require_symbols$2();
+ const { ProgressEvent } = require_progressevent();
+ const { getEncoding } = require_encoding();
+ const { DOMException } = require_constants$3();
+ const { serializeAMimeType, parseMIMEType } = require_dataURL();
+ const { types: types$1 } = __require("util");
+ const { StringDecoder } = __require("string_decoder");
+ const { btoa } = __require("buffer");
+ /** @type {PropertyDescriptor} */
+ const staticPropertyDescriptors = {
+ enumerable: true,
+ writable: false,
+ configurable: false
+ };
+ /**
+ * @see https://w3c.github.io/FileAPI/#readOperation
+ * @param {import('./filereader').FileReader} fr
+ * @param {import('buffer').Blob} blob
+ * @param {string} type
+ * @param {string?} encodingName
+ */
+ 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 reader = blob.stream().getReader();
+ /** @type {Uint8Array[]} */
+ 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$1.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 (error) {
+ fr[kError] = error;
+ fireAProgressEvent("error", fr);
+ }
+ if (fr[kState] !== "loading") fireAProgressEvent("loadend", fr);
+ });
+ break;
+ }
+ } catch (error) {
+ if (fr[kAborted]) return;
+ queueMicrotask(() => {
+ fr[kState] = "done";
+ fr[kError] = error;
+ fireAProgressEvent("error", fr);
+ if (fr[kState] !== "loading") fireAProgressEvent("loadend", fr);
+ });
+ break;
+ }
+ })();
+ }
+ /**
+ * @see https://w3c.github.io/FileAPI/#fire-a-progress-event
+ * @see https://dom.spec.whatwg.org/#concept-event-fire
+ * @param {string} e The name of the event
+ * @param {import('./filereader').FileReader} reader
+ */
+ function fireAProgressEvent(e, reader) {
+ const event = new ProgressEvent(e, {
+ bubbles: false,
+ cancelable: false
+ });
+ reader.dispatchEvent(event);
+ }
+ /**
+ * @see https://w3c.github.io/FileAPI/#blob-package-data
+ * @param {Uint8Array[]} bytes
+ * @param {string} type
+ * @param {string?} mimeType
+ * @param {string?} encodingName
+ */
+ 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 type = parseMIMEType(mimeType);
+ if (type !== "failure") encoding = getEncoding(type.parameters.get("charset"));
+ }
+ if (encoding === "failure") encoding = "UTF-8";
+ return decode(bytes, encoding);
+ }
+ case "ArrayBuffer": return combineByteSequences(bytes).buffer;
+ case "BinaryString": {
+ let binaryString = "";
+ const decoder = new StringDecoder("latin1");
+ for (const chunk of bytes) binaryString += decoder.write(chunk);
+ binaryString += decoder.end();
+ return binaryString;
+ }
+ }
+ }
+ /**
+ * @see https://encoding.spec.whatwg.org/#decode
+ * @param {Uint8Array[]} ioQueue
+ * @param {string} encoding
+ */
+ 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);
+ }
+ /**
+ * @see https://encoding.spec.whatwg.org/#bom-sniff
+ * @param {Uint8Array} ioQueue
+ */
+ 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;
+ }
+ /**
+ * @param {Uint8Array[]} sequences
+ */
+ 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
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/fileapi/filereader.js
+var require_filereader = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { staticPropertyDescriptors, readOperation, fireAProgressEvent } = require_util$3();
+ const { kState, kError, kResult, kEvents, kAborted } = require_symbols$2();
+ const { webidl } = require_webidl();
+ const { kEnumerableProperty } = require_util$6();
+ 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, { header: "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, { header: "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, { header: "FileReader.readAsText" });
+ blob = webidl.converters.Blob(blob, { strict: false });
+ if (encoding !== void 0) encoding = webidl.converters.DOMString(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, { header: "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 };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/cache/symbols.js
+var require_symbols$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ module.exports = { kConstruct: require_symbols$4().kConstruct };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/cache/util.js
+var require_util$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const assert$2 = __require("assert");
+ const { URLSerializer } = require_dataURL();
+ const { isValidHeaderName } = require_util$5();
+ /**
+ * @see https://url.spec.whatwg.org/#concept-url-equals
+ * @param {URL} A
+ * @param {URL} B
+ * @param {boolean | undefined} excludeFragment
+ * @returns {boolean}
+ */
+ function urlEquals(A, B, excludeFragment = false) {
+ return URLSerializer(A, excludeFragment) === URLSerializer(B, excludeFragment);
+ }
+ /**
+ * @see https://github.com/chromium/chromium/blob/694d20d134cb553d8d89e5500b9148012b1ba299/content/browser/cache_storage/cache_storage_cache.cc#L260-L262
+ * @param {string} header
+ */
+ function fieldValues(header) {
+ assert$2(header !== null);
+ const values = [];
+ for (let value of header.split(",")) {
+ value = value.trim();
+ if (!value.length) continue;
+ else if (!isValidHeaderName(value)) continue;
+ values.push(value);
+ }
+ return values;
+ }
+ module.exports = {
+ urlEquals,
+ fieldValues
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/cache/cache.js
+var require_cache = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { kConstruct } = require_symbols$1();
+ const { urlEquals, fieldValues: getFieldValues } = require_util$2();
+ const { kEnumerableProperty, isDisturbed } = require_util$6();
+ const { kHeadersList } = require_symbols$4();
+ const { webidl } = require_webidl();
+ const { Response, cloneResponse } = require_response();
+ const { Request } = require_request();
+ const { kState, kHeaders, kGuard, kRealm } = require_symbols$3();
+ const { fetching } = require_fetch();
+ const { urlIsHttpHttpsScheme, createDeferredPromise, readAllBytes } = require_util$5();
+ const assert$1 = __require("assert");
+ const { getGlobalDispatcher } = require_global();
+ /**
+ * @see https://w3c.github.io/ServiceWorker/#dfn-cache-batch-operation
+ * @typedef {Object} CacheBatchOperation
+ * @property {'delete' | 'put'} type
+ * @property {any} request
+ * @property {any} response
+ * @property {import('../../types/cache').CacheQueryOptions} options
+ */
+ /**
+ * @see https://w3c.github.io/ServiceWorker/#dfn-request-response-list
+ * @typedef {[any, any][]} requestResponseList
+ */
+ 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();
+ this.#relevantRequestResponseList = arguments[1];
+ }
+ async match(request, options = {}) {
+ webidl.brandCheck(this, Cache);
+ webidl.argumentLengthCheck(arguments, 1, { header: "Cache.match" });
+ request = webidl.converters.RequestInfo(request);
+ options = webidl.converters.CacheQueryOptions(options);
+ const p = await this.matchAll(request, options);
+ if (p.length === 0) return;
+ return p[0];
+ }
+ async matchAll(request = void 0, options = {}) {
+ webidl.brandCheck(this, Cache);
+ if (request !== void 0) request = webidl.converters.RequestInfo(request);
+ options = webidl.converters.CacheQueryOptions(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 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 = new Response(response.body?.source ?? null);
+ const body = responseObject[kState].body;
+ responseObject[kState] = response;
+ responseObject[kState].body = body;
+ responseObject[kHeaders][kHeadersList] = response.headersList;
+ responseObject[kHeaders][kGuard] = "immutable";
+ responseList.push(responseObject);
+ }
+ return Object.freeze(responseList);
+ }
+ async add(request) {
+ webidl.brandCheck(this, Cache);
+ webidl.argumentLengthCheck(arguments, 1, { header: "Cache.add" });
+ request = webidl.converters.RequestInfo(request);
+ const requests = [request];
+ return await this.addAll(requests);
+ }
+ async addAll(requests) {
+ webidl.brandCheck(this, Cache);
+ webidl.argumentLengthCheck(arguments, 1, { header: "Cache.addAll" });
+ requests = webidl.converters["sequence"](requests);
+ const responsePromises = [];
+ const requestList = [];
+ for (const request of requests) {
+ if (typeof request === "string") continue;
+ const r = request[kState];
+ if (!urlIsHttpHttpsScheme(r.url) || r.method !== "GET") throw webidl.errors.exception({
+ header: "Cache.addAll",
+ message: "Expected http/s scheme when method is not GET."
+ });
+ }
+ /** @type {ReturnType[]} */
+ const fetchControllers = [];
+ for (const request of requests) {
+ const r = new Request(request)[kState];
+ if (!urlIsHttpHttpsScheme(r.url)) throw webidl.errors.exception({
+ header: "Cache.addAll",
+ message: "Expected http/s scheme."
+ });
+ r.initiator = "fetch";
+ r.destination = "subresource";
+ requestList.push(r);
+ const responsePromise = createDeferredPromise();
+ fetchControllers.push(fetching({
+ request: r,
+ dispatcher: getGlobalDispatcher(),
+ 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 responses = await Promise.all(responsePromises);
+ const operations = [];
+ let index = 0;
+ for (const response of responses) {
+ /** @type {CacheBatchOperation} */
+ const operation = {
+ type: "put",
+ request: requestList[index],
+ response
+ };
+ 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);
+ webidl.argumentLengthCheck(arguments, 2, { header: "Cache.put" });
+ request = webidl.converters.RequestInfo(request);
+ response = webidl.converters.Response(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: "Cache.put",
+ message: "Expected an http/s scheme when method is not GET"
+ });
+ const innerResponse = response[kState];
+ if (innerResponse.status === 206) throw webidl.errors.exception({
+ header: "Cache.put",
+ 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: "Cache.put",
+ message: "Got * vary field value"
+ });
+ }
+ if (innerResponse.body && (isDisturbed(innerResponse.body.stream) || innerResponse.body.stream.locked)) throw webidl.errors.exception({
+ header: "Cache.put",
+ message: "Response body is locked or disturbed"
+ });
+ const clonedResponse = cloneResponse(innerResponse);
+ const bodyReadPromise = createDeferredPromise();
+ if (innerResponse.body != null) readAllBytes(innerResponse.body.stream.getReader()).then(bodyReadPromise.resolve, bodyReadPromise.reject);
+ else bodyReadPromise.resolve(void 0);
+ /** @type {CacheBatchOperation[]} */
+ const operations = [];
+ /** @type {CacheBatchOperation} */
+ const operation = {
+ type: "put",
+ request: innerRequest,
+ response: clonedResponse
+ };
+ 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);
+ webidl.argumentLengthCheck(arguments, 1, { header: "Cache.delete" });
+ request = webidl.converters.RequestInfo(request);
+ options = webidl.converters.CacheQueryOptions(options);
+ /**
+ * @type {Request}
+ */
+ let r = null;
+ if (request instanceof Request) {
+ r = request[kState];
+ if (r.method !== "GET" && !options.ignoreMethod) return false;
+ } else {
+ assert$1(typeof request === "string");
+ r = new Request(request)[kState];
+ }
+ /** @type {CacheBatchOperation[]} */
+ const operations = [];
+ /** @type {CacheBatchOperation} */
+ 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 {readonly Request[]}
+ */
+ async keys(request = void 0, options = {}) {
+ webidl.brandCheck(this, Cache);
+ if (request !== void 0) request = webidl.converters.RequestInfo(request);
+ options = webidl.converters.CacheQueryOptions(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 request of requests) {
+ const requestObject = new Request("https://a");
+ requestObject[kState] = request;
+ requestObject[kHeaders][kHeadersList] = request.headersList;
+ requestObject[kHeaders][kGuard] = "immutable";
+ requestObject[kRealm] = request.client;
+ 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$1(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$1(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) {
+ /** @type {requestResponseList} */
+ 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;
+ if (request.headersList.get(fieldValue) !== requestQuery.headersList.get(fieldValue)) return false;
+ }
+ return true;
+ }
+ };
+ Object.defineProperties(Cache.prototype, {
+ [Symbol.toStringTag]: {
+ value: "Cache",
+ configurable: true
+ },
+ match: kEnumerableProperty,
+ matchAll: kEnumerableProperty,
+ add: kEnumerableProperty,
+ addAll: kEnumerableProperty,
+ put: kEnumerableProperty,
+ delete: kEnumerableProperty,
+ keys: kEnumerableProperty
+ });
+ const 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 };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/cache/cachestorage.js
+var require_cachestorage = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { kConstruct } = require_symbols$1();
+ const { Cache } = require_cache();
+ const { webidl } = require_webidl();
+ const { kEnumerableProperty } = require_util$6();
+ 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);
+ webidl.argumentLengthCheck(arguments, 1, { header: "CacheStorage.has" });
+ cacheName = webidl.converters.DOMString(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);
+ webidl.argumentLengthCheck(arguments, 1, { header: "CacheStorage.open" });
+ cacheName = webidl.converters.DOMString(cacheName);
+ if (this.#caches.has(cacheName)) return new Cache(kConstruct, this.#caches.get(cacheName));
+ 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);
+ webidl.argumentLengthCheck(arguments, 1, { header: "CacheStorage.delete" });
+ cacheName = webidl.converters.DOMString(cacheName);
+ return this.#caches.delete(cacheName);
+ }
+ /**
+ * @see https://w3c.github.io/ServiceWorker/#cache-storage-keys
+ * @returns {string[]}
+ */
+ async keys() {
+ webidl.brandCheck(this, CacheStorage);
+ return [...this.#caches.keys()];
+ }
+ };
+ Object.defineProperties(CacheStorage.prototype, {
+ [Symbol.toStringTag]: {
+ value: "CacheStorage",
+ configurable: true
+ },
+ match: kEnumerableProperty,
+ has: kEnumerableProperty,
+ open: kEnumerableProperty,
+ delete: kEnumerableProperty,
+ keys: kEnumerableProperty
+ });
+ module.exports = { CacheStorage };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/cookies/constants.js
+var require_constants$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ module.exports = {
+ maxAttributeValueSize: 1024,
+ maxNameValuePairSize: 4096
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/cookies/util.js
+var require_util$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ /**
+ * @param {string} value
+ * @returns {boolean}
+ */
+ function isCTLExcludingHtab(value) {
+ if (value.length === 0) return false;
+ for (const char of value) {
+ const code = char.charCodeAt(0);
+ if (code >= 0 || code <= 8 || code >= 10 || code <= 31 || code === 127) return false;
+ }
+ }
+ /**
+ CHAR =
+ token = 1*
+ separators = "(" | ")" | "<" | ">" | "@"
+ | "," | ";" | ":" | "\" | <">
+ | "/" | "[" | "]" | "?" | "="
+ | "{" | "}" | SP | HT
+ * @param {string} name
+ */
+ function validateCookieName(name) {
+ for (const char of name) {
+ const code = char.charCodeAt(0);
+ if (code <= 32 || code > 127 || char === "(" || char === ")" || char === ">" || char === "<" || char === "@" || char === "," || char === ";" || char === ":" || char === "\\" || char === "\"" || char === "/" || char === "[" || char === "]" || char === "?" || char === "=" || char === "{" || char === "}") throw new Error("Invalid cookie name");
+ }
+ }
+ /**
+ cookie-value = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )
+ cookie-octet = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E
+ ; US-ASCII characters excluding CTLs,
+ ; whitespace DQUOTE, comma, semicolon,
+ ; and backslash
+ * @param {string} value
+ */
+ function validateCookieValue(value) {
+ for (const char of value) {
+ const code = char.charCodeAt(0);
+ if (code < 33 || code === 34 || code === 44 || code === 59 || code === 92 || code > 126) throw new Error("Invalid header value");
+ }
+ }
+ /**
+ * path-value =
+ * @param {string} path
+ */
+ function validateCookiePath(path) {
+ for (const char of path) if (char.charCodeAt(0) < 33 || char === ";") throw new Error("Invalid cookie path");
+ }
+ /**
+ * I have no idea why these values aren't allowed to be honest,
+ * but Deno tests these. - Khafra
+ * @param {string} domain
+ */
+ function validateCookieDomain(domain) {
+ if (domain.startsWith("-") || domain.endsWith(".") || domain.endsWith("-")) throw new Error("Invalid cookie domain");
+ }
+ /**
+ * @see https://www.rfc-editor.org/rfc/rfc7231#section-7.1.1.1
+ * @param {number|Date} date
+ IMF-fixdate = day-name "," SP date1 SP time-of-day SP GMT
+ ; fixed length/zone/capitalization subset of the format
+ ; see Section 3.3 of [RFC5322]
+
+ day-name = %x4D.6F.6E ; "Mon", case-sensitive
+ / %x54.75.65 ; "Tue", case-sensitive
+ / %x57.65.64 ; "Wed", case-sensitive
+ / %x54.68.75 ; "Thu", case-sensitive
+ / %x46.72.69 ; "Fri", case-sensitive
+ / %x53.61.74 ; "Sat", case-sensitive
+ / %x53.75.6E ; "Sun", case-sensitive
+ date1 = day SP month SP year
+ ; e.g., 02 Jun 1982
+
+ day = 2DIGIT
+ month = %x4A.61.6E ; "Jan", case-sensitive
+ / %x46.65.62 ; "Feb", case-sensitive
+ / %x4D.61.72 ; "Mar", case-sensitive
+ / %x41.70.72 ; "Apr", case-sensitive
+ / %x4D.61.79 ; "May", case-sensitive
+ / %x4A.75.6E ; "Jun", case-sensitive
+ / %x4A.75.6C ; "Jul", case-sensitive
+ / %x41.75.67 ; "Aug", case-sensitive
+ / %x53.65.70 ; "Sep", case-sensitive
+ / %x4F.63.74 ; "Oct", case-sensitive
+ / %x4E.6F.76 ; "Nov", case-sensitive
+ / %x44.65.63 ; "Dec", case-sensitive
+ year = 4DIGIT
+
+ GMT = %x47.4D.54 ; "GMT", case-sensitive
+
+ time-of-day = hour ":" minute ":" second
+ ; 00:00:00 - 23:59:60 (leap second)
+
+ hour = 2DIGIT
+ minute = 2DIGIT
+ second = 2DIGIT
+ */
+ function toIMFDate(date) {
+ if (typeof date === "number") date = new Date(date);
+ return `${[
+ "Sun",
+ "Mon",
+ "Tue",
+ "Wed",
+ "Thu",
+ "Fri",
+ "Sat"
+ ][date.getUTCDay()]}, ${date.getUTCDate().toString().padStart(2, "0")} ${[
+ "Jan",
+ "Feb",
+ "Mar",
+ "Apr",
+ "May",
+ "Jun",
+ "Jul",
+ "Aug",
+ "Sep",
+ "Oct",
+ "Nov",
+ "Dec"
+ ][date.getUTCMonth()]} ${date.getUTCFullYear()} ${date.getUTCHours().toString().padStart(2, "0")}:${date.getUTCMinutes().toString().padStart(2, "0")}:${date.getUTCSeconds().toString().padStart(2, "0")} GMT`;
+ }
+ /**
+ max-age-av = "Max-Age=" non-zero-digit *DIGIT
+ ; In practice, both expires-av and max-age-av
+ ; are limited to dates representable by the
+ ; user agent.
+ * @param {number} maxAge
+ */
+ function validateCookieMaxAge(maxAge) {
+ if (maxAge < 0) throw new Error("Invalid cookie max-age");
+ }
+ /**
+ * @see https://www.rfc-editor.org/rfc/rfc6265#section-4.1.1
+ * @param {import('./index').Cookie} cookie
+ */
+ 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
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/cookies/parse.js
+var require_parse = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { maxNameValuePairSize, maxAttributeValueSize } = require_constants$1();
+ const { isCTLExcludingHtab } = require_util$1();
+ const { collectASequenceOfCodePointsFast } = require_dataURL();
+ const assert = __require("assert");
+ /**
+ * @description Parses the field-value attributes of a set-cookie header string.
+ * @see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4
+ * @param {string} header
+ * @returns if the header is invalid, null will be returned
+ */
+ 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)
+ };
+ }
+ /**
+ * Parses the remaining attributes of a set-cookie header
+ * @see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4
+ * @param {string} unparsedAttributes
+ * @param {[Object.]={}} cookieAttributeList
+ */
+ 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") cookieAttributeList.expires = new Date(attributeValue);
+ 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);
+ cookieAttributeList.maxAge = Number(attributeValue);
+ } 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
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/cookies/index.js
+var require_cookies = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { parseSetCookie } = require_parse();
+ const { stringify } = require_util$1();
+ const { webidl } = require_webidl();
+ const { Headers } = require_headers();
+ /**
+ * @typedef {Object} Cookie
+ * @property {string} name
+ * @property {string} value
+ * @property {Date|number|undefined} expires
+ * @property {number|undefined} maxAge
+ * @property {string|undefined} domain
+ * @property {string|undefined} path
+ * @property {boolean|undefined} secure
+ * @property {boolean|undefined} httpOnly
+ * @property {'Strict'|'Lax'|'None'} sameSite
+ * @property {string[]} unparsed
+ */
+ /**
+ * @param {Headers} headers
+ * @returns {Record}
+ */
+ function getCookies(headers) {
+ webidl.argumentLengthCheck(arguments, 1, { header: "getCookies" });
+ webidl.brandCheck(headers, Headers, { 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;
+ }
+ /**
+ * @param {Headers} headers
+ * @param {string} name
+ * @param {{ path?: string, domain?: string }|undefined} attributes
+ * @returns {void}
+ */
+ function deleteCookie(headers, name, attributes) {
+ webidl.argumentLengthCheck(arguments, 2, { header: "deleteCookie" });
+ webidl.brandCheck(headers, Headers, { strict: false });
+ name = webidl.converters.DOMString(name);
+ attributes = webidl.converters.DeleteCookieAttributes(attributes);
+ setCookie(headers, {
+ name,
+ value: "",
+ expires: /* @__PURE__ */ new Date(0),
+ ...attributes
+ });
+ }
+ /**
+ * @param {Headers} headers
+ * @returns {Cookie[]}
+ */
+ function getSetCookies(headers) {
+ webidl.argumentLengthCheck(arguments, 1, { header: "getSetCookies" });
+ webidl.brandCheck(headers, Headers, { strict: false });
+ const cookies = headers.getSetCookie();
+ if (!cookies) return [];
+ return cookies.map((pair) => parseSetCookie(pair));
+ }
+ /**
+ * @param {Headers} headers
+ * @param {Cookie} cookie
+ * @returns {void}
+ */
+ function setCookie(headers, cookie) {
+ webidl.argumentLengthCheck(arguments, 2, { header: "setCookie" });
+ webidl.brandCheck(headers, Headers, { strict: false });
+ cookie = webidl.converters.Cookie(cookie);
+ if (stringify(cookie)) headers.append("Set-Cookie", stringify(cookie));
+ }
+ 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: []
+ }
+ ]);
+ module.exports = {
+ getCookies,
+ deleteCookie,
+ getSetCookies,
+ setCookie
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/websocket/constants.js
+var require_constants = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ module.exports = {
+ uid: "258EAFA5-E914-47DA-95CA-C5AB0DC85B11",
+ staticPropertyDescriptors: {
+ enumerable: true,
+ writable: false,
+ configurable: false
+ },
+ states: {
+ CONNECTING: 0,
+ OPEN: 1,
+ CLOSING: 2,
+ CLOSED: 3
+ },
+ opcodes: {
+ CONTINUATION: 0,
+ TEXT: 1,
+ BINARY: 2,
+ CLOSE: 8,
+ PING: 9,
+ PONG: 10
+ },
+ maxUnsigned16Bit: 2 ** 16 - 1,
+ parserStates: {
+ INFO: 0,
+ PAYLOADLENGTH_16: 2,
+ PAYLOADLENGTH_64: 3,
+ READ_DATA: 4
+ },
+ emptyBuffer: Buffer.allocUnsafe(0)
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/websocket/symbols.js
+var require_symbols = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ 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")
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/websocket/events.js
+var require_events = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { webidl } = require_webidl();
+ const { kEnumerableProperty } = require_util$6();
+ const { MessagePort } = __require("worker_threads");
+ /**
+ * @see https://html.spec.whatwg.org/multipage/comms.html#messageevent
+ */
+ var MessageEvent = class MessageEvent extends Event {
+ #eventInit;
+ constructor(type, eventInitDict = {}) {
+ webidl.argumentLengthCheck(arguments, 1, { header: "MessageEvent constructor" });
+ type = webidl.converters.DOMString(type);
+ eventInitDict = webidl.converters.MessageEventInit(eventInitDict);
+ super(type, eventInitDict);
+ this.#eventInit = eventInitDict;
+ }
+ 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, { header: "MessageEvent.initMessageEvent" });
+ return new MessageEvent(type, {
+ bubbles,
+ cancelable,
+ data,
+ origin,
+ lastEventId,
+ source,
+ ports
+ });
+ }
+ };
+ /**
+ * @see https://websockets.spec.whatwg.org/#the-closeevent-interface
+ */
+ var CloseEvent = class CloseEvent extends Event {
+ #eventInit;
+ constructor(type, eventInitDict = {}) {
+ webidl.argumentLengthCheck(arguments, 1, { header: "CloseEvent constructor" });
+ type = webidl.converters.DOMString(type);
+ eventInitDict = webidl.converters.CloseEventInit(eventInitDict);
+ super(type, eventInitDict);
+ this.#eventInit = eventInitDict;
+ }
+ 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) {
+ webidl.argumentLengthCheck(arguments, 1, { header: "ErrorEvent constructor" });
+ super(type, eventInitDict);
+ type = webidl.converters.DOMString(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);
+ const 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",
+ converter: webidl.nullableConverter(webidl.converters.MessagePort),
+ defaultValue: null
+ },
+ {
+ key: "ports",
+ converter: webidl.converters["sequence"],
+ get defaultValue() {
+ return [];
+ }
+ }
+ ]);
+ 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
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/websocket/util.js
+var require_util = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { kReadyState, kController, kResponse, kBinaryType, kWebSocketURL } = require_symbols();
+ const { states, opcodes } = require_constants();
+ const { MessageEvent, ErrorEvent } = require_events();
+ /**
+ * @param {import('./websocket').WebSocket} ws
+ */
+ function isEstablished(ws) {
+ return ws[kReadyState] === states.OPEN;
+ }
+ /**
+ * @param {import('./websocket').WebSocket} ws
+ */
+ function isClosing(ws) {
+ return ws[kReadyState] === states.CLOSING;
+ }
+ /**
+ * @param {import('./websocket').WebSocket} ws
+ */
+ function isClosed(ws) {
+ return ws[kReadyState] === states.CLOSED;
+ }
+ /**
+ * @see https://dom.spec.whatwg.org/#concept-event-fire
+ * @param {string} e
+ * @param {EventTarget} target
+ * @param {EventInit | undefined} eventInitDict
+ */
+ function fireEvent(e, target, eventConstructor = Event, eventInitDict) {
+ const event = new eventConstructor(e, eventInitDict);
+ target.dispatchEvent(event);
+ }
+ /**
+ * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol
+ * @param {import('./websocket').WebSocket} ws
+ * @param {number} type Opcode
+ * @param {Buffer} data application data
+ */
+ function websocketMessageReceived(ws, type, data) {
+ if (ws[kReadyState] !== states.OPEN) return;
+ let dataForEvent;
+ if (type === opcodes.TEXT) try {
+ dataForEvent = new TextDecoder("utf-8", { fatal: true }).decode(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 = new Uint8Array(data).buffer;
+ fireEvent("message", ws, MessageEvent, {
+ origin: ws[kWebSocketURL].origin,
+ data: dataForEvent
+ });
+ }
+ /**
+ * @see https://datatracker.ietf.org/doc/html/rfc6455
+ * @see https://datatracker.ietf.org/doc/html/rfc2616
+ * @see https://bugs.chromium.org/p/chromium/issues/detail?id=398407
+ * @param {string} protocol
+ */
+ function isValidSubprotocol(protocol) {
+ if (protocol.length === 0) return false;
+ for (const char of protocol) {
+ const code = char.charCodeAt(0);
+ if (code < 33 || code > 126 || char === "(" || char === ")" || char === "<" || char === ">" || char === "@" || char === "," || char === ";" || char === ":" || char === "\\" || char === "\"" || char === "/" || char === "[" || char === "]" || char === "?" || char === "=" || char === "{" || char === "}" || code === 32 || code === 9) return false;
+ }
+ return true;
+ }
+ /**
+ * @see https://datatracker.ietf.org/doc/html/rfc6455#section-7-4
+ * @param {number} code
+ */
+ function isValidStatusCode(code) {
+ if (code >= 1e3 && code < 1015) return code !== 1004 && code !== 1005 && code !== 1006;
+ return code >= 3e3 && code <= 4999;
+ }
+ /**
+ * @param {import('./websocket').WebSocket} ws
+ * @param {string|undefined} reason
+ */
+ 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, ErrorEvent, { error: new Error(reason) });
+ }
+ module.exports = {
+ isEstablished,
+ isClosing,
+ isClosed,
+ fireEvent,
+ isValidSubprotocol,
+ isValidStatusCode,
+ failWebsocketConnection,
+ websocketMessageReceived
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/websocket/connection.js
+var require_connection = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const diagnosticsChannel$1 = __require("diagnostics_channel");
+ const { uid, states } = require_constants();
+ const { kReadyState, kSentClose, kByteParser, kReceivedClose } = require_symbols();
+ const { fireEvent, failWebsocketConnection } = require_util();
+ const { CloseEvent } = require_events();
+ const { makeRequest } = require_request();
+ const { fetching } = require_fetch();
+ const { Headers } = require_headers();
+ const { getGlobalDispatcher } = require_global();
+ const { kHeadersList } = require_symbols$4();
+ const channels = {};
+ channels.open = diagnosticsChannel$1.channel("undici:websocket:open");
+ channels.close = diagnosticsChannel$1.channel("undici:websocket:close");
+ channels.socketError = diagnosticsChannel$1.channel("undici:websocket:socket_error");
+ /** @type {import('crypto')} */
+ let crypto;
+ try {
+ crypto = __require("crypto");
+ } catch {}
+ /**
+ * @see https://websockets.spec.whatwg.org/#concept-websocket-establish
+ * @param {URL} url
+ * @param {string|string[]} protocols
+ * @param {import('./websocket').WebSocket} ws
+ * @param {(response: any) => void} onEstablish
+ * @param {Partial} options
+ */
+ function establishWebSocketConnection(url, protocols, ws, onEstablish, options) {
+ const requestURL = url;
+ requestURL.protocol = url.protocol === "ws:" ? "http:" : "https:";
+ const request = makeRequest({
+ urlList: [requestURL],
+ serviceWorkers: "none",
+ referrer: "no-referrer",
+ mode: "websocket",
+ credentials: "include",
+ cache: "no-store",
+ redirect: "error"
+ });
+ if (options.headers) request.headersList = new Headers(options.headers)[kHeadersList];
+ 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 = "";
+ return fetching({
+ request,
+ useParallelQueue: true,
+ dispatcher: options.dispatcher ?? getGlobalDispatcher(),
+ 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;
+ }
+ if (response.headersList.get("Sec-WebSocket-Accept") !== crypto.createHash("sha1").update(keyValue + uid).digest("base64")) {
+ failWebsocketConnection(ws, "Incorrect hash received in Sec-WebSocket-Accept header.");
+ return;
+ }
+ const secExtension = response.headersList.get("Sec-WebSocket-Extensions");
+ if (secExtension !== null && secExtension !== permessageDeflate) {
+ failWebsocketConnection(ws, "Received different permessage-deflate than the one set.");
+ return;
+ }
+ const secProtocol = response.headersList.get("Sec-WebSocket-Protocol");
+ if (secProtocol !== null && secProtocol !== request.headersList.get("Sec-WebSocket-Protocol")) {
+ 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);
+ }
+ });
+ }
+ /**
+ * @param {Buffer} chunk
+ */
+ function onSocketData(chunk) {
+ if (!this.ws[kByteParser].write(chunk)) this.pause();
+ }
+ /**
+ * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol
+ * @see https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.4
+ */
+ function onSocketClose() {
+ const { ws } = this;
+ const wasClean = ws[kSentClose] && ws[kReceivedClose];
+ let code = 1005;
+ let reason = "";
+ const result = ws[kByteParser].closingInfo;
+ if (result) {
+ code = result.code ?? 1005;
+ reason = result.reason;
+ } else if (!ws[kSentClose]) code = 1006;
+ ws[kReadyState] = states.CLOSED;
+ fireEvent("close", ws, CloseEvent, {
+ wasClean,
+ code,
+ reason
+ });
+ if (channels.close.hasSubscribers) channels.close.publish({
+ websocket: ws,
+ code,
+ reason
+ });
+ }
+ function onSocketError(error) {
+ const { ws } = this;
+ ws[kReadyState] = states.CLOSING;
+ if (channels.socketError.hasSubscribers) channels.socketError.publish(error);
+ this.destroy();
+ }
+ module.exports = { establishWebSocketConnection };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/websocket/frame.js
+var require_frame = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { maxUnsigned16Bit } = require_constants();
+ /** @type {import('crypto')} */
+ let crypto;
+ try {
+ crypto = __require("crypto");
+ } catch {}
+ var WebsocketFrameSend = class {
+ /**
+ * @param {Buffer|undefined} data
+ */
+ constructor(data) {
+ this.frameData = data;
+ this.maskKey = crypto.randomBytes(4);
+ }
+ createFrame(opcode) {
+ const bodyLength = this.frameData?.byteLength ?? 0;
+ /** @type {number} */
+ let payloadLength = bodyLength;
+ let offset = 6;
+ if (bodyLength > maxUnsigned16Bit) {
+ offset += 8;
+ payloadLength = 127;
+ } else if (bodyLength > 125) {
+ offset += 2;
+ payloadLength = 126;
+ }
+ const buffer = Buffer.allocUnsafe(bodyLength + offset);
+ buffer[0] = buffer[1] = 0;
+ buffer[0] |= 128;
+ buffer[0] = (buffer[0] & 240) + opcode;
+ /*! ws. MIT License. Einar Otto Stangvik */
+ buffer[offset - 4] = this.maskKey[0];
+ buffer[offset - 3] = this.maskKey[1];
+ buffer[offset - 2] = this.maskKey[2];
+ buffer[offset - 1] = this.maskKey[3];
+ buffer[1] = payloadLength;
+ if (payloadLength === 126) buffer.writeUInt16BE(bodyLength, 2);
+ else if (payloadLength === 127) {
+ buffer[2] = buffer[3] = 0;
+ buffer.writeUIntBE(bodyLength, 4, 6);
+ }
+ buffer[1] |= 128;
+ for (let i = 0; i < bodyLength; i++) buffer[offset + i] = this.frameData[i] ^ this.maskKey[i % 4];
+ return buffer;
+ }
+ };
+ module.exports = { WebsocketFrameSend };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/websocket/receiver.js
+var require_receiver = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { Writable } = __require("stream");
+ const diagnosticsChannel = __require("diagnostics_channel");
+ const { parserStates, opcodes, states, emptyBuffer } = require_constants();
+ const { kReadyState, kSentClose, kResponse, kReceivedClose } = require_symbols();
+ const { isValidStatusCode, failWebsocketConnection, websocketMessageReceived } = require_util();
+ const { WebsocketFrameSend } = require_frame();
+ const channels = {};
+ channels.ping = diagnosticsChannel.channel("undici:websocket:ping");
+ channels.pong = diagnosticsChannel.channel("undici:websocket:pong");
+ var ByteParser = class extends Writable {
+ #buffers = [];
+ #byteOffset = 0;
+ #state = parserStates.INFO;
+ #info = {};
+ #fragments = [];
+ constructor(ws) {
+ super();
+ this.ws = ws;
+ }
+ /**
+ * @param {Buffer} chunk
+ * @param {() => void} callback
+ */
+ _write(chunk, _, callback) {
+ this.#buffers.push(chunk);
+ this.#byteOffset += chunk.length;
+ this.run(callback);
+ }
+ /**
+ * 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 (true) {
+ if (this.#state === parserStates.INFO) {
+ if (this.#byteOffset < 2) return callback();
+ const buffer = this.consume(2);
+ this.#info.fin = (buffer[0] & 128) !== 0;
+ this.#info.opcode = buffer[0] & 15;
+ this.#info.originalOpcode ??= this.#info.opcode;
+ this.#info.fragmented = !this.#info.fin && this.#info.opcode !== opcodes.CONTINUATION;
+ if (this.#info.fragmented && this.#info.opcode !== opcodes.BINARY && this.#info.opcode !== opcodes.TEXT) {
+ failWebsocketConnection(this.ws, "Invalid frame type was fragmented.");
+ return;
+ }
+ const payloadLength = buffer[1] & 127;
+ if (payloadLength <= 125) {
+ this.#info.payloadLength = payloadLength;
+ this.#state = parserStates.READ_DATA;
+ } else if (payloadLength === 126) this.#state = parserStates.PAYLOADLENGTH_16;
+ else if (payloadLength === 127) this.#state = parserStates.PAYLOADLENGTH_64;
+ if (this.#info.fragmented && payloadLength > 125) {
+ failWebsocketConnection(this.ws, "Fragmented frame exceeded 125 bytes.");
+ return;
+ } else if ((this.#info.opcode === opcodes.PING || this.#info.opcode === opcodes.PONG || this.#info.opcode === opcodes.CLOSE) && payloadLength > 125) {
+ failWebsocketConnection(this.ws, "Payload length for control frame exceeded 125 bytes.");
+ return;
+ } else if (this.#info.opcode === opcodes.CLOSE) {
+ if (payloadLength === 1) {
+ failWebsocketConnection(this.ws, "Received close frame with a 1-byte body.");
+ return;
+ }
+ const body = this.consume(payloadLength);
+ this.#info.closeInfo = this.parseCloseBody(false, body);
+ if (!this.ws[kSentClose]) {
+ const body = Buffer.allocUnsafe(2);
+ body.writeUInt16BE(this.#info.closeInfo.code, 0);
+ const closeFrame = new WebsocketFrameSend(body);
+ this.ws[kResponse].socket.write(closeFrame.createFrame(opcodes.CLOSE), (err) => {
+ if (!err) this.ws[kSentClose] = true;
+ });
+ }
+ this.ws[kReadyState] = states.CLOSING;
+ this.ws[kReceivedClose] = true;
+ this.end();
+ return;
+ } else if (this.#info.opcode === opcodes.PING) {
+ const body = this.consume(payloadLength);
+ 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 });
+ }
+ this.#state = parserStates.INFO;
+ if (this.#byteOffset > 0) continue;
+ else {
+ callback();
+ return;
+ }
+ } else if (this.#info.opcode === opcodes.PONG) {
+ const body = this.consume(payloadLength);
+ if (channels.pong.hasSubscribers) channels.pong.publish({ payload: body });
+ if (this.#byteOffset > 0) continue;
+ else {
+ callback();
+ return;
+ }
+ }
+ } 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;
+ } else if (this.#state === parserStates.PAYLOADLENGTH_64) {
+ if (this.#byteOffset < 8) return callback();
+ const buffer = this.consume(8);
+ const upper = buffer.readUInt32BE(0);
+ if (upper > 2 ** 31 - 1) {
+ failWebsocketConnection(this.ws, "Received payload length > 2^31 bytes.");
+ return;
+ }
+ const lower = buffer.readUInt32BE(4);
+ this.#info.payloadLength = (upper << 8) + lower;
+ this.#state = parserStates.READ_DATA;
+ } else if (this.#state === parserStates.READ_DATA) {
+ if (this.#byteOffset < this.#info.payloadLength) return callback();
+ else if (this.#byteOffset >= this.#info.payloadLength) {
+ const body = this.consume(this.#info.payloadLength);
+ this.#fragments.push(body);
+ if (!this.#info.fragmented || this.#info.fin && this.#info.opcode === opcodes.CONTINUATION) {
+ const fullMessage = Buffer.concat(this.#fragments);
+ websocketMessageReceived(this.ws, this.#info.originalOpcode, fullMessage);
+ this.#info = {};
+ this.#fragments.length = 0;
+ }
+ this.#state = parserStates.INFO;
+ }
+ }
+ if (this.#byteOffset > 0) continue;
+ else {
+ callback();
+ break;
+ }
+ }
+ }
+ /**
+ * Take n bytes from the buffered Buffers
+ * @param {number} n
+ * @returns {Buffer|null}
+ */
+ consume(n) {
+ if (n > this.#byteOffset) return null;
+ 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;
+ }
+ parseCloseBody(onlyCode, data) {
+ /** @type {number|undefined} */
+ let code;
+ if (data.length >= 2) code = data.readUInt16BE(0);
+ if (onlyCode) {
+ if (!isValidStatusCode(code)) return null;
+ return { code };
+ }
+ /** @type {Buffer} */
+ let reason = data.subarray(2);
+ if (reason[0] === 239 && reason[1] === 187 && reason[2] === 191) reason = reason.subarray(3);
+ if (code !== void 0 && !isValidStatusCode(code)) return null;
+ try {
+ reason = new TextDecoder("utf-8", { fatal: true }).decode(reason);
+ } catch {
+ return null;
+ }
+ return {
+ code,
+ reason
+ };
+ }
+ get closingInfo() {
+ return this.#info.closeInfo;
+ }
+ };
+ module.exports = { ByteParser };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/lib/websocket/websocket.js
+var require_websocket = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const { webidl } = require_webidl();
+ const { DOMException } = require_constants$3();
+ const { URLSerializer } = require_dataURL();
+ const { getGlobalOrigin } = require_global$1();
+ const { staticPropertyDescriptors, states, opcodes, emptyBuffer } = require_constants();
+ const { kWebSocketURL, kReadyState, kController, kBinaryType, kResponse, kSentClose, kByteParser } = require_symbols();
+ const { isEstablished, isClosing, isValidSubprotocol, failWebsocketConnection, fireEvent } = require_util();
+ const { establishWebSocketConnection } = require_connection();
+ const { WebsocketFrameSend } = require_frame();
+ const { ByteParser } = require_receiver();
+ const { kEnumerableProperty, isBlobLike } = require_util$6();
+ const { getGlobalDispatcher } = require_global();
+ const { types } = __require("util");
+ let experimentalWarned = false;
+ var WebSocket = class WebSocket extends EventTarget {
+ #events = {
+ open: null,
+ error: null,
+ close: null,
+ message: null
+ };
+ #bufferedAmount = 0;
+ #protocol = "";
+ #extensions = "";
+ /**
+ * @param {string} url
+ * @param {string|string[]} protocols
+ */
+ constructor(url, protocols = []) {
+ super();
+ webidl.argumentLengthCheck(arguments, 1, { header: "WebSocket constructor" });
+ if (!experimentalWarned) {
+ experimentalWarned = true;
+ process.emitWarning("WebSockets are experimental, expect them to change at any time.", { code: "UNDICI-WS" });
+ }
+ const options = webidl.converters["DOMString or sequence or WebSocketInit"](protocols);
+ url = webidl.converters.USVString(url);
+ protocols = options.protocols;
+ const baseURL = getGlobalOrigin();
+ 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);
+ this[kController] = establishWebSocketConnection(urlRecord, protocols, this, (response) => this.#onConnectionEstablished(response), options);
+ this[kReadyState] = WebSocket.CONNECTING;
+ 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);
+ if (code !== void 0) code = webidl.converters["unsigned short"](code, { clamp: true });
+ if (reason !== void 0) reason = webidl.converters.USVString(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");
+ }
+ if (this[kReadyState] === WebSocket.CLOSING || this[kReadyState] === WebSocket.CLOSED) {} else if (!isEstablished(this)) {
+ failWebsocketConnection(this, "Connection was closed before it was established.");
+ this[kReadyState] = WebSocket.CLOSING;
+ } else if (!isClosing(this)) {
+ 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;
+ this[kResponse].socket.write(frame.createFrame(opcodes.CLOSE), (err) => {
+ if (!err) this[kSentClose] = true;
+ });
+ this[kReadyState] = states.CLOSING;
+ } else this[kReadyState] = WebSocket.CLOSING;
+ }
+ /**
+ * @see https://websockets.spec.whatwg.org/#dom-websocket-send
+ * @param {NodeJS.TypedArray|ArrayBuffer|Blob|string} data
+ */
+ send(data) {
+ webidl.brandCheck(this, WebSocket);
+ webidl.argumentLengthCheck(arguments, 1, { header: "WebSocket.send" });
+ data = webidl.converters.WebSocketSendData(data);
+ if (this[kReadyState] === WebSocket.CONNECTING) throw new DOMException("Sent before connected.", "InvalidStateError");
+ if (!isEstablished(this) || isClosing(this)) return;
+ /** @type {import('stream').Duplex} */
+ const socket = this[kResponse].socket;
+ if (typeof data === "string") {
+ const value = Buffer.from(data);
+ const buffer = new WebsocketFrameSend(value).createFrame(opcodes.TEXT);
+ this.#bufferedAmount += value.byteLength;
+ socket.write(buffer, () => {
+ this.#bufferedAmount -= value.byteLength;
+ });
+ } else if (types.isArrayBuffer(data)) {
+ const value = Buffer.from(data);
+ const buffer = new WebsocketFrameSend(value).createFrame(opcodes.BINARY);
+ this.#bufferedAmount += value.byteLength;
+ socket.write(buffer, () => {
+ this.#bufferedAmount -= value.byteLength;
+ });
+ } else if (ArrayBuffer.isView(data)) {
+ const ab = Buffer.from(data, data.byteOffset, data.byteLength);
+ const buffer = new WebsocketFrameSend(ab).createFrame(opcodes.BINARY);
+ this.#bufferedAmount += ab.byteLength;
+ socket.write(buffer, () => {
+ this.#bufferedAmount -= ab.byteLength;
+ });
+ } else if (isBlobLike(data)) {
+ const frame = new WebsocketFrameSend();
+ data.arrayBuffer().then((ab) => {
+ const value = Buffer.from(ab);
+ frame.frameData = value;
+ const buffer = frame.createFrame(opcodes.BINARY);
+ this.#bufferedAmount += value.byteLength;
+ socket.write(buffer, () => {
+ this.#bufferedAmount -= value.byteLength;
+ });
+ });
+ }
+ }
+ 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) {
+ this[kResponse] = response;
+ const parser = new ByteParser(this);
+ parser.on("drain", function onParserDrain() {
+ this.ws[kResponse].socket.resume();
+ });
+ response.socket.ws = this;
+ this[kByteParser] = parser;
+ 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) {
+ if (webidl.util.Type(V) === "Object" && Symbol.iterator in V) return webidl.converters["sequence"](V);
+ return webidl.converters.DOMString(V);
+ };
+ webidl.converters.WebSocketInit = webidl.dictionaryConverter([
+ {
+ key: "protocols",
+ converter: webidl.converters["DOMString or sequence"],
+ get defaultValue() {
+ return [];
+ }
+ },
+ {
+ key: "dispatcher",
+ converter: (V) => V,
+ get defaultValue() {
+ return 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.isAnyArrayBuffer(V)) return webidl.converters.BufferSource(V);
+ }
+ return webidl.converters.USVString(V);
+ };
+ module.exports = { WebSocket };
+}));
+//#endregion
+//#region node_modules/.pnpm/undici@5.29.0/node_modules/undici/index.js
+var require_undici = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ const Client = require_client();
+ const Dispatcher = require_dispatcher();
+ const errors = require_errors();
+ const Pool = require_pool();
+ const BalancedPool = require_balanced_pool();
+ const Agent = require_agent();
+ const util = require_util$6();
+ const { InvalidArgumentError } = errors;
+ const api = require_api();
+ const buildConnector = require_connect();
+ const MockClient = require_mock_client();
+ const MockAgent = require_mock_agent();
+ const MockPool = require_mock_pool();
+ const mockErrors = require_mock_errors();
+ const ProxyAgent = require_proxy_agent();
+ const RetryHandler = require_RetryHandler();
+ const { getGlobalDispatcher, setGlobalDispatcher } = require_global();
+ const DecoratorHandler = require_DecoratorHandler();
+ const RedirectHandler = require_RedirectHandler();
+ const createRedirectInterceptor = require_redirectInterceptor();
+ let hasCrypto;
+ try {
+ __require("crypto");
+ hasCrypto = true;
+ } catch {
+ hasCrypto = false;
+ }
+ 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 = ProxyAgent;
+ module.exports.RetryHandler = RetryHandler;
+ module.exports.DecoratorHandler = DecoratorHandler;
+ module.exports.RedirectHandler = RedirectHandler;
+ module.exports.createRedirectInterceptor = createRedirectInterceptor;
+ module.exports.buildConnector = buildConnector;
+ module.exports.errors = errors;
+ 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;
+ if (util.nodeMajor > 16 || util.nodeMajor === 16 && util.nodeMinor >= 8) {
+ let fetchImpl = null;
+ module.exports.fetch = async function fetch(resource) {
+ if (!fetchImpl) fetchImpl = require_fetch().fetch;
+ try {
+ return await fetchImpl(...arguments);
+ } catch (err) {
+ if (typeof err === "object") Error.captureStackTrace(err, this);
+ throw err;
+ }
+ };
+ module.exports.Headers = require_headers().Headers;
+ module.exports.Response = require_response().Response;
+ module.exports.Request = require_request().Request;
+ module.exports.FormData = require_formdata().FormData;
+ module.exports.File = require_file().File;
+ module.exports.FileReader = require_filereader().FileReader;
+ const { setGlobalOrigin, getGlobalOrigin } = require_global$1();
+ module.exports.setGlobalOrigin = setGlobalOrigin;
+ module.exports.getGlobalOrigin = getGlobalOrigin;
+ const { CacheStorage } = require_cachestorage();
+ const { kConstruct } = require_symbols$1();
+ module.exports.caches = new CacheStorage(kConstruct);
+ }
+ if (util.nodeMajor >= 16) {
+ const { deleteCookie, getCookies, getSetCookies, setCookie } = require_cookies();
+ module.exports.deleteCookie = deleteCookie;
+ module.exports.getCookies = getCookies;
+ module.exports.getSetCookies = getSetCookies;
+ module.exports.setCookie = setCookie;
+ const { parseMIMEType, serializeAMimeType } = require_dataURL();
+ module.exports.parseMIMEType = parseMIMEType;
+ module.exports.serializeAMimeType = serializeAMimeType;
+ }
+ if (util.nodeMajor >= 18 && hasCrypto) {
+ const { WebSocket } = require_websocket();
+ module.exports.WebSocket = WebSocket;
+ }
+ 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;
+}));
+//#endregion
+//#region node_modules/.pnpm/@actions+http-client@2.2.3/node_modules/@actions/http-client/lib/index.js
+var require_lib = /* @__PURE__ */ __commonJSMin(((exports) => {
+ var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === void 0) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) desc = {
+ enumerable: true,
+ get: function() {
+ return m[k];
+ }
+ };
+ Object.defineProperty(o, k2, desc);
+ }) : (function(o, m, k, k2) {
+ if (k2 === void 0) k2 = k;
+ o[k2] = m[k];
+ }));
+ var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", {
+ enumerable: true,
+ value: v
+ });
+ }) : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar = exports && exports.__importStar || function(mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) {
+ for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ }
+ __setModuleDefault(result, mod);
+ return result;
+ };
+ var __awaiter = exports && exports.__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());
+ });
+ };
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.HttpClient = exports.isHttps = exports.HttpClientResponse = exports.HttpClientError = exports.getProxyUrl = exports.MediaTypes = exports.Headers = exports.HttpCodes = void 0;
+ const http = __importStar(__require("http"));
+ const https = __importStar(__require("https"));
+ const pm = __importStar(require_proxy());
+ const tunnel = __importStar(require_tunnel());
+ const undici_1 = require_undici();
+ var HttpCodes;
+ (function(HttpCodes) {
+ HttpCodes[HttpCodes["OK"] = 200] = "OK";
+ HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices";
+ HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently";
+ HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved";
+ HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther";
+ HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified";
+ HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy";
+ HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy";
+ HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect";
+ HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect";
+ HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest";
+ HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized";
+ HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired";
+ HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden";
+ HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound";
+ HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed";
+ HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable";
+ HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired";
+ HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout";
+ HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict";
+ HttpCodes[HttpCodes["Gone"] = 410] = "Gone";
+ HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests";
+ HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError";
+ HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented";
+ HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway";
+ HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable";
+ HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout";
+ })(HttpCodes || (exports.HttpCodes = HttpCodes = {}));
+ var Headers;
+ (function(Headers) {
+ Headers["Accept"] = "accept";
+ Headers["ContentType"] = "content-type";
+ })(Headers || (exports.Headers = Headers = {}));
+ var MediaTypes;
+ (function(MediaTypes) {
+ MediaTypes["ApplicationJson"] = "application/json";
+ })(MediaTypes || (exports.MediaTypes = MediaTypes = {}));
+ /**
+ * Returns the proxy URL, depending upon the supplied url and proxy environment variables.
+ * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com
+ */
+ function getProxyUrl(serverUrl) {
+ const proxyUrl = pm.getProxyUrl(new URL(serverUrl));
+ return proxyUrl ? proxyUrl.href : "";
+ }
+ exports.getProxyUrl = getProxyUrl;
+ const HttpRedirectCodes = [
+ HttpCodes.MovedPermanently,
+ HttpCodes.ResourceMoved,
+ HttpCodes.SeeOther,
+ HttpCodes.TemporaryRedirect,
+ HttpCodes.PermanentRedirect
+ ];
+ const HttpResponseRetryCodes = [
+ HttpCodes.BadGateway,
+ HttpCodes.ServiceUnavailable,
+ HttpCodes.GatewayTimeout
+ ];
+ const RetryableHttpVerbs = [
+ "OPTIONS",
+ "GET",
+ "DELETE",
+ "HEAD"
+ ];
+ const ExponentialBackoffCeiling = 10;
+ const ExponentialBackoffTimeSlice = 5;
+ var HttpClientError = class HttpClientError extends Error {
+ constructor(message, statusCode) {
+ super(message);
+ this.name = "HttpClientError";
+ this.statusCode = statusCode;
+ Object.setPrototypeOf(this, HttpClientError.prototype);
+ }
+ };
+ exports.HttpClientError = HttpClientError;
+ var HttpClientResponse = class {
+ constructor(message) {
+ this.message = message;
+ }
+ readBody() {
+ return __awaiter(this, void 0, void 0, function* () {
+ return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
+ let output = Buffer.alloc(0);
+ this.message.on("data", (chunk) => {
+ output = Buffer.concat([output, chunk]);
+ });
+ this.message.on("end", () => {
+ resolve(output.toString());
+ });
+ }));
+ });
+ }
+ readBodyBuffer() {
+ return __awaiter(this, void 0, void 0, function* () {
+ return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
+ const chunks = [];
+ this.message.on("data", (chunk) => {
+ chunks.push(chunk);
+ });
+ this.message.on("end", () => {
+ resolve(Buffer.concat(chunks));
+ });
+ }));
+ });
+ }
+ };
+ exports.HttpClientResponse = HttpClientResponse;
+ function isHttps(requestUrl) {
+ return new URL(requestUrl).protocol === "https:";
+ }
+ exports.isHttps = isHttps;
+ var HttpClient = class {
+ constructor(userAgent, handlers, requestOptions) {
+ this._ignoreSslError = false;
+ this._allowRedirects = true;
+ this._allowRedirectDowngrade = false;
+ this._maxRedirects = 50;
+ this._allowRetries = false;
+ this._maxRetries = 1;
+ this._keepAlive = false;
+ this._disposed = false;
+ this.userAgent = userAgent;
+ this.handlers = handlers || [];
+ this.requestOptions = requestOptions;
+ if (requestOptions) {
+ if (requestOptions.ignoreSslError != null) this._ignoreSslError = requestOptions.ignoreSslError;
+ this._socketTimeout = requestOptions.socketTimeout;
+ if (requestOptions.allowRedirects != null) this._allowRedirects = requestOptions.allowRedirects;
+ if (requestOptions.allowRedirectDowngrade != null) this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade;
+ if (requestOptions.maxRedirects != null) this._maxRedirects = Math.max(requestOptions.maxRedirects, 0);
+ if (requestOptions.keepAlive != null) this._keepAlive = requestOptions.keepAlive;
+ if (requestOptions.allowRetries != null) this._allowRetries = requestOptions.allowRetries;
+ if (requestOptions.maxRetries != null) this._maxRetries = requestOptions.maxRetries;
+ }
+ }
+ options(requestUrl, additionalHeaders) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return this.request("OPTIONS", requestUrl, null, additionalHeaders || {});
+ });
+ }
+ get(requestUrl, additionalHeaders) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return this.request("GET", requestUrl, null, additionalHeaders || {});
+ });
+ }
+ del(requestUrl, additionalHeaders) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return this.request("DELETE", requestUrl, null, additionalHeaders || {});
+ });
+ }
+ post(requestUrl, data, additionalHeaders) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return this.request("POST", requestUrl, data, additionalHeaders || {});
+ });
+ }
+ patch(requestUrl, data, additionalHeaders) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return this.request("PATCH", requestUrl, data, additionalHeaders || {});
+ });
+ }
+ put(requestUrl, data, additionalHeaders) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return this.request("PUT", requestUrl, data, additionalHeaders || {});
+ });
+ }
+ head(requestUrl, additionalHeaders) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return this.request("HEAD", requestUrl, null, additionalHeaders || {});
+ });
+ }
+ sendStream(verb, requestUrl, stream, additionalHeaders) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return this.request(verb, requestUrl, stream, additionalHeaders);
+ });
+ }
+ /**
+ * Gets a typed object from an endpoint
+ * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise
+ */
+ getJson(requestUrl, additionalHeaders = {}) {
+ return __awaiter(this, void 0, void 0, function* () {
+ additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
+ const res = yield this.get(requestUrl, additionalHeaders);
+ return this._processResponse(res, this.requestOptions);
+ });
+ }
+ postJson(requestUrl, obj, additionalHeaders = {}) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const data = JSON.stringify(obj, null, 2);
+ additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
+ additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
+ const res = yield this.post(requestUrl, data, additionalHeaders);
+ return this._processResponse(res, this.requestOptions);
+ });
+ }
+ putJson(requestUrl, obj, additionalHeaders = {}) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const data = JSON.stringify(obj, null, 2);
+ additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
+ additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
+ const res = yield this.put(requestUrl, data, additionalHeaders);
+ return this._processResponse(res, this.requestOptions);
+ });
+ }
+ patchJson(requestUrl, obj, additionalHeaders = {}) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const data = JSON.stringify(obj, null, 2);
+ additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
+ additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
+ const res = yield this.patch(requestUrl, data, additionalHeaders);
+ return this._processResponse(res, this.requestOptions);
+ });
+ }
+ /**
+ * Makes a raw http request.
+ * All other methods such as get, post, patch, and request ultimately call this.
+ * Prefer get, del, post and patch
+ */
+ request(verb, requestUrl, data, headers) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (this._disposed) throw new Error("Client has already been disposed.");
+ const parsedUrl = new URL(requestUrl);
+ let info = this._prepareRequest(verb, parsedUrl, headers);
+ const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb) ? this._maxRetries + 1 : 1;
+ let numTries = 0;
+ let response;
+ do {
+ response = yield this.requestRaw(info, data);
+ if (response && response.message && response.message.statusCode === HttpCodes.Unauthorized) {
+ let authenticationHandler;
+ for (const handler of this.handlers) if (handler.canHandleAuthentication(response)) {
+ authenticationHandler = handler;
+ break;
+ }
+ if (authenticationHandler) return authenticationHandler.handleAuthentication(this, info, data);
+ else return response;
+ }
+ let redirectsRemaining = this._maxRedirects;
+ while (response.message.statusCode && HttpRedirectCodes.includes(response.message.statusCode) && this._allowRedirects && redirectsRemaining > 0) {
+ const redirectUrl = response.message.headers["location"];
+ if (!redirectUrl) break;
+ const parsedRedirectUrl = new URL(redirectUrl);
+ if (parsedUrl.protocol === "https:" && parsedUrl.protocol !== parsedRedirectUrl.protocol && !this._allowRedirectDowngrade) throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.");
+ yield response.readBody();
+ if (parsedRedirectUrl.hostname !== parsedUrl.hostname) {
+ for (const header in headers) if (header.toLowerCase() === "authorization") delete headers[header];
+ }
+ info = this._prepareRequest(verb, parsedRedirectUrl, headers);
+ response = yield this.requestRaw(info, data);
+ redirectsRemaining--;
+ }
+ if (!response.message.statusCode || !HttpResponseRetryCodes.includes(response.message.statusCode)) return response;
+ numTries += 1;
+ if (numTries < maxTries) {
+ yield response.readBody();
+ yield this._performExponentialBackoff(numTries);
+ }
+ } while (numTries < maxTries);
+ return response;
+ });
+ }
+ /**
+ * Needs to be called if keepAlive is set to true in request options.
+ */
+ dispose() {
+ if (this._agent) this._agent.destroy();
+ this._disposed = true;
+ }
+ /**
+ * Raw request.
+ * @param info
+ * @param data
+ */
+ requestRaw(info, data) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return new Promise((resolve, reject) => {
+ function callbackForResult(err, res) {
+ if (err) reject(err);
+ else if (!res) reject(/* @__PURE__ */ new Error("Unknown error"));
+ else resolve(res);
+ }
+ this.requestRawWithCallback(info, data, callbackForResult);
+ });
+ });
+ }
+ /**
+ * Raw request with callback.
+ * @param info
+ * @param data
+ * @param onResult
+ */
+ requestRawWithCallback(info, data, onResult) {
+ if (typeof data === "string") {
+ if (!info.options.headers) info.options.headers = {};
+ info.options.headers["Content-Length"] = Buffer.byteLength(data, "utf8");
+ }
+ let callbackCalled = false;
+ function handleResult(err, res) {
+ if (!callbackCalled) {
+ callbackCalled = true;
+ onResult(err, res);
+ }
+ }
+ const req = info.httpModule.request(info.options, (msg) => {
+ handleResult(void 0, new HttpClientResponse(msg));
+ });
+ let socket;
+ req.on("socket", (sock) => {
+ socket = sock;
+ });
+ req.setTimeout(this._socketTimeout || 3 * 6e4, () => {
+ if (socket) socket.end();
+ handleResult(/* @__PURE__ */ new Error(`Request timeout: ${info.options.path}`));
+ });
+ req.on("error", function(err) {
+ handleResult(err);
+ });
+ if (data && typeof data === "string") req.write(data, "utf8");
+ if (data && typeof data !== "string") {
+ data.on("close", function() {
+ req.end();
+ });
+ data.pipe(req);
+ } else req.end();
+ }
+ /**
+ * Gets an http agent. This function is useful when you need an http agent that handles
+ * routing through a proxy server - depending upon the url and proxy environment variables.
+ * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com
+ */
+ getAgent(serverUrl) {
+ const parsedUrl = new URL(serverUrl);
+ return this._getAgent(parsedUrl);
+ }
+ getAgentDispatcher(serverUrl) {
+ const parsedUrl = new URL(serverUrl);
+ const proxyUrl = pm.getProxyUrl(parsedUrl);
+ if (!(proxyUrl && proxyUrl.hostname)) return;
+ return this._getProxyAgentDispatcher(parsedUrl, proxyUrl);
+ }
+ _prepareRequest(method, requestUrl, headers) {
+ const info = {};
+ info.parsedUrl = requestUrl;
+ const usingSsl = info.parsedUrl.protocol === "https:";
+ info.httpModule = usingSsl ? https : http;
+ const defaultPort = usingSsl ? 443 : 80;
+ info.options = {};
+ info.options.host = info.parsedUrl.hostname;
+ info.options.port = info.parsedUrl.port ? parseInt(info.parsedUrl.port) : defaultPort;
+ info.options.path = (info.parsedUrl.pathname || "") + (info.parsedUrl.search || "");
+ info.options.method = method;
+ info.options.headers = this._mergeHeaders(headers);
+ if (this.userAgent != null) info.options.headers["user-agent"] = this.userAgent;
+ info.options.agent = this._getAgent(info.parsedUrl);
+ if (this.handlers) for (const handler of this.handlers) handler.prepareRequest(info.options);
+ return info;
+ }
+ _mergeHeaders(headers) {
+ if (this.requestOptions && this.requestOptions.headers) return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers || {}));
+ return lowercaseKeys(headers || {});
+ }
+ _getExistingOrDefaultHeader(additionalHeaders, header, _default) {
+ let clientHeader;
+ if (this.requestOptions && this.requestOptions.headers) clientHeader = lowercaseKeys(this.requestOptions.headers)[header];
+ return additionalHeaders[header] || clientHeader || _default;
+ }
+ _getAgent(parsedUrl) {
+ let agent;
+ const proxyUrl = pm.getProxyUrl(parsedUrl);
+ const useProxy = proxyUrl && proxyUrl.hostname;
+ if (this._keepAlive && useProxy) agent = this._proxyAgent;
+ if (!useProxy) agent = this._agent;
+ if (agent) return agent;
+ const usingSsl = parsedUrl.protocol === "https:";
+ let maxSockets = 100;
+ if (this.requestOptions) maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets;
+ if (proxyUrl && proxyUrl.hostname) {
+ const agentOptions = {
+ maxSockets,
+ keepAlive: this._keepAlive,
+ proxy: Object.assign(Object.assign({}, (proxyUrl.username || proxyUrl.password) && { proxyAuth: `${proxyUrl.username}:${proxyUrl.password}` }), {
+ host: proxyUrl.hostname,
+ port: proxyUrl.port
+ })
+ };
+ let tunnelAgent;
+ const overHttps = proxyUrl.protocol === "https:";
+ if (usingSsl) tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp;
+ else tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp;
+ agent = tunnelAgent(agentOptions);
+ this._proxyAgent = agent;
+ }
+ if (!agent) {
+ const options = {
+ keepAlive: this._keepAlive,
+ maxSockets
+ };
+ agent = usingSsl ? new https.Agent(options) : new http.Agent(options);
+ this._agent = agent;
+ }
+ if (usingSsl && this._ignoreSslError) agent.options = Object.assign(agent.options || {}, { rejectUnauthorized: false });
+ return agent;
+ }
+ _getProxyAgentDispatcher(parsedUrl, proxyUrl) {
+ let proxyAgent;
+ if (this._keepAlive) proxyAgent = this._proxyAgentDispatcher;
+ if (proxyAgent) return proxyAgent;
+ const usingSsl = parsedUrl.protocol === "https:";
+ proxyAgent = new undici_1.ProxyAgent(Object.assign({
+ uri: proxyUrl.href,
+ pipelining: !this._keepAlive ? 0 : 1
+ }, (proxyUrl.username || proxyUrl.password) && { token: `Basic ${Buffer.from(`${proxyUrl.username}:${proxyUrl.password}`).toString("base64")}` }));
+ this._proxyAgentDispatcher = proxyAgent;
+ if (usingSsl && this._ignoreSslError) proxyAgent.options = Object.assign(proxyAgent.options.requestTls || {}, { rejectUnauthorized: false });
+ return proxyAgent;
+ }
+ _performExponentialBackoff(retryNumber) {
+ return __awaiter(this, void 0, void 0, function* () {
+ retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber);
+ const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber);
+ return new Promise((resolve) => setTimeout(() => resolve(), ms));
+ });
+ }
+ _processResponse(res, options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
+ const statusCode = res.message.statusCode || 0;
+ const response = {
+ statusCode,
+ result: null,
+ headers: {}
+ };
+ if (statusCode === HttpCodes.NotFound) resolve(response);
+ function dateTimeDeserializer(key, value) {
+ if (typeof value === "string") {
+ const a = new Date(value);
+ if (!isNaN(a.valueOf())) return a;
+ }
+ return value;
+ }
+ let obj;
+ let contents;
+ try {
+ contents = yield res.readBody();
+ if (contents && contents.length > 0) {
+ if (options && options.deserializeDates) obj = JSON.parse(contents, dateTimeDeserializer);
+ else obj = JSON.parse(contents);
+ response.result = obj;
+ }
+ response.headers = res.message.headers;
+ } catch (err) {}
+ if (statusCode > 299) {
+ let msg;
+ if (obj && obj.message) msg = obj.message;
+ else if (contents && contents.length > 0) msg = contents;
+ else msg = `Failed request: (${statusCode})`;
+ const err = new HttpClientError(msg, statusCode);
+ err.result = response.result;
+ reject(err);
+ } else resolve(response);
+ }));
+ });
+ }
+ };
+ exports.HttpClient = HttpClient;
+ const lowercaseKeys = (obj) => Object.keys(obj).reduce((c, k) => (c[k.toLowerCase()] = obj[k], c), {});
+}));
+//#endregion
+//#region node_modules/.pnpm/@actions+http-client@2.2.3/node_modules/@actions/http-client/lib/auth.js
+var require_auth = /* @__PURE__ */ __commonJSMin(((exports) => {
+ var __awaiter = exports && exports.__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());
+ });
+ };
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.PersonalAccessTokenCredentialHandler = exports.BearerCredentialHandler = exports.BasicCredentialHandler = void 0;
+ var BasicCredentialHandler = class {
+ constructor(username, password) {
+ this.username = username;
+ this.password = password;
+ }
+ prepareRequest(options) {
+ if (!options.headers) throw Error("The request has no headers");
+ options.headers["Authorization"] = `Basic ${Buffer.from(`${this.username}:${this.password}`).toString("base64")}`;
+ }
+ canHandleAuthentication() {
+ return false;
+ }
+ handleAuthentication() {
+ return __awaiter(this, void 0, void 0, function* () {
+ throw new Error("not implemented");
+ });
+ }
+ };
+ exports.BasicCredentialHandler = BasicCredentialHandler;
+ var BearerCredentialHandler = class {
+ constructor(token) {
+ this.token = token;
+ }
+ prepareRequest(options) {
+ if (!options.headers) throw Error("The request has no headers");
+ options.headers["Authorization"] = `Bearer ${this.token}`;
+ }
+ canHandleAuthentication() {
+ return false;
+ }
+ handleAuthentication() {
+ return __awaiter(this, void 0, void 0, function* () {
+ throw new Error("not implemented");
+ });
+ }
+ };
+ exports.BearerCredentialHandler = BearerCredentialHandler;
+ var PersonalAccessTokenCredentialHandler = class {
+ constructor(token) {
+ this.token = token;
+ }
+ prepareRequest(options) {
+ if (!options.headers) throw Error("The request has no headers");
+ options.headers["Authorization"] = `Basic ${Buffer.from(`PAT:${this.token}`).toString("base64")}`;
+ }
+ canHandleAuthentication() {
+ return false;
+ }
+ handleAuthentication() {
+ return __awaiter(this, void 0, void 0, function* () {
+ throw new Error("not implemented");
+ });
+ }
+ };
+ exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler;
+}));
+//#endregion
+//#region node_modules/.pnpm/@actions+core@1.11.1/node_modules/@actions/core/lib/oidc-utils.js
+var require_oidc_utils = /* @__PURE__ */ __commonJSMin(((exports) => {
+ var __awaiter = exports && exports.__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());
+ });
+ };
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.OidcClient = void 0;
+ const http_client_1 = require_lib();
+ const auth_1 = require_auth();
+ const core_1 = require_core();
+ exports.OidcClient = class OidcClient {
+ static createHttpClient(allowRetry = true, maxRetry = 10) {
+ const requestOptions = {
+ allowRetries: allowRetry,
+ maxRetries: maxRetry
+ };
+ return new http_client_1.HttpClient("actions/oidc-client", [new auth_1.BearerCredentialHandler(OidcClient.getRequestToken())], requestOptions);
+ }
+ static getRequestToken() {
+ const token = process.env["ACTIONS_ID_TOKEN_REQUEST_TOKEN"];
+ if (!token) throw new Error("Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable");
+ return token;
+ }
+ static getIDTokenUrl() {
+ const runtimeUrl = process.env["ACTIONS_ID_TOKEN_REQUEST_URL"];
+ if (!runtimeUrl) throw new Error("Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable");
+ return runtimeUrl;
+ }
+ static getCall(id_token_url) {
+ var _a;
+ return __awaiter(this, void 0, void 0, function* () {
+ const id_token = (_a = (yield OidcClient.createHttpClient().getJson(id_token_url).catch((error) => {
+ throw new Error(`Failed to get ID Token. \n
+ Error Code : ${error.statusCode}\n
+ Error Message: ${error.message}`);
+ })).result) === null || _a === void 0 ? void 0 : _a.value;
+ if (!id_token) throw new Error("Response json body do not have ID Token field");
+ return id_token;
+ });
+ }
+ static getIDToken(audience) {
+ return __awaiter(this, void 0, void 0, function* () {
+ try {
+ let id_token_url = OidcClient.getIDTokenUrl();
+ if (audience) id_token_url = `${id_token_url}&audience=${encodeURIComponent(audience)}`;
+ (0, core_1.debug)(`ID token url is ${id_token_url}`);
+ const id_token = yield OidcClient.getCall(id_token_url);
+ (0, core_1.setSecret)(id_token);
+ return id_token;
+ } catch (error) {
+ throw new Error(`Error message: ${error.message}`);
+ }
+ });
+ }
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/@actions+core@1.11.1/node_modules/@actions/core/lib/summary.js
+var require_summary = /* @__PURE__ */ __commonJSMin(((exports) => {
+ var __awaiter = exports && exports.__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());
+ });
+ };
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.summary = exports.markdownSummary = exports.SUMMARY_DOCS_URL = exports.SUMMARY_ENV_VAR = void 0;
+ const os_1$2 = __require("os");
+ const fs_1$1 = __require("fs");
+ const { access, appendFile, writeFile } = fs_1$1.promises;
+ exports.SUMMARY_ENV_VAR = "GITHUB_STEP_SUMMARY";
+ exports.SUMMARY_DOCS_URL = "https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-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[exports.SUMMARY_ENV_VAR];
+ if (!pathFromEnv) throw new Error(`Unable to find environment variable for $${exports.SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`);
+ try {
+ yield access(pathFromEnv, fs_1$1.constants.R_OK | fs_1$1.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}${tag}>`;
+ }
+ /**
+ * 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();
+ yield (overwrite ? writeFile : appendFile)(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(os_1$2.EOL);
+ }
+ /**
+ * 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();
+ }
+ };
+ const _summary = new Summary();
+ /**
+ * @deprecated use `core.summary`
+ */
+ exports.markdownSummary = _summary;
+ exports.summary = _summary;
+}));
+//#endregion
+//#region node_modules/.pnpm/@actions+core@1.11.1/node_modules/@actions/core/lib/path-utils.js
+var require_path_utils = /* @__PURE__ */ __commonJSMin(((exports) => {
+ var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === void 0) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) desc = {
+ enumerable: true,
+ get: function() {
+ return m[k];
+ }
+ };
+ Object.defineProperty(o, k2, desc);
+ }) : (function(o, m, k, k2) {
+ if (k2 === void 0) k2 = k;
+ o[k2] = m[k];
+ }));
+ var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", {
+ enumerable: true,
+ value: v
+ });
+ }) : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar = exports && exports.__importStar || function(mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) {
+ for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ }
+ __setModuleDefault(result, mod);
+ return result;
+ };
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.toPlatformPath = exports.toWin32Path = exports.toPosixPath = void 0;
+ const path$5 = __importStar(__require("path"));
+ /**
+ * toPosixPath converts the given path to the posix form. On Windows, \\ will be
+ * replaced with /.
+ *
+ * @param pth. Path to transform.
+ * @return string Posix path.
+ */
+ function toPosixPath(pth) {
+ return pth.replace(/[\\]/g, "/");
+ }
+ exports.toPosixPath = toPosixPath;
+ /**
+ * toWin32Path converts the given path to the win32 form. On Linux, / will be
+ * replaced with \\.
+ *
+ * @param pth. Path to transform.
+ * @return string Win32 path.
+ */
+ function toWin32Path(pth) {
+ return pth.replace(/[/]/g, "\\");
+ }
+ exports.toWin32Path = toWin32Path;
+ /**
+ * toPlatformPath converts the given path to a platform-specific path. It does
+ * this by replacing instances of / and \ with the platform-specific path
+ * separator.
+ *
+ * @param pth The path to platformize.
+ * @return string The platform-specific path.
+ */
+ function toPlatformPath(pth) {
+ return pth.replace(/[/\\]/g, path$5.sep);
+ }
+ exports.toPlatformPath = toPlatformPath;
+}));
+//#endregion
+//#region node_modules/.pnpm/@actions+io@1.1.3/node_modules/@actions/io/lib/io-util.js
+var require_io_util = /* @__PURE__ */ __commonJSMin(((exports) => {
+ var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === void 0) k2 = k;
+ Object.defineProperty(o, k2, {
+ enumerable: true,
+ get: function() {
+ return m[k];
+ }
+ });
+ }) : (function(o, m, k, k2) {
+ if (k2 === void 0) k2 = k;
+ o[k2] = m[k];
+ }));
+ var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", {
+ enumerable: true,
+ value: v
+ });
+ }) : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar = exports && exports.__importStar || function(mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) {
+ for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ }
+ __setModuleDefault(result, mod);
+ return result;
+ };
+ var __awaiter = exports && exports.__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 _a;
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.getCmdPath = exports.tryGetExecutablePath = exports.isRooted = exports.isDirectory = exports.exists = exports.READONLY = exports.UV_FS_O_EXLOCK = exports.IS_WINDOWS = exports.unlink = exports.symlink = exports.stat = exports.rmdir = exports.rm = exports.rename = exports.readlink = exports.readdir = exports.open = exports.mkdir = exports.lstat = exports.copyFile = exports.chmod = void 0;
+ const fs = __importStar(__require("fs"));
+ const path$4 = __importStar(__require("path"));
+ _a = fs.promises, exports.chmod = _a.chmod, exports.copyFile = _a.copyFile, exports.lstat = _a.lstat, exports.mkdir = _a.mkdir, exports.open = _a.open, exports.readdir = _a.readdir, exports.readlink = _a.readlink, exports.rename = _a.rename, exports.rm = _a.rm, exports.rmdir = _a.rmdir, exports.stat = _a.stat, exports.symlink = _a.symlink, exports.unlink = _a.unlink;
+ exports.IS_WINDOWS = process.platform === "win32";
+ exports.UV_FS_O_EXLOCK = 268435456;
+ exports.READONLY = fs.constants.O_RDONLY;
+ function exists(fsPath) {
+ return __awaiter(this, void 0, void 0, function* () {
+ try {
+ yield exports.stat(fsPath);
+ } catch (err) {
+ if (err.code === "ENOENT") return false;
+ throw err;
+ }
+ return true;
+ });
+ }
+ exports.exists = exists;
+ function isDirectory(fsPath, useStat = false) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return (useStat ? yield exports.stat(fsPath) : yield exports.lstat(fsPath)).isDirectory();
+ });
+ }
+ exports.isDirectory = isDirectory;
+ /**
+ * On OSX/Linux, true if path starts with '/'. On Windows, true for paths like:
+ * \, \hello, \\hello\share, C:, and C:\hello (and corresponding alternate separator cases).
+ */
+ function isRooted(p) {
+ p = normalizeSeparators(p);
+ if (!p) throw new Error("isRooted() parameter \"p\" cannot be empty");
+ if (exports.IS_WINDOWS) return p.startsWith("\\") || /^[A-Z]:/i.test(p);
+ return p.startsWith("/");
+ }
+ exports.isRooted = isRooted;
+ /**
+ * Best effort attempt to determine whether a file exists and is executable.
+ * @param filePath file path to check
+ * @param extensions additional file extensions to try
+ * @return if file exists and is executable, returns the file path. otherwise empty string.
+ */
+ function tryGetExecutablePath(filePath, extensions) {
+ return __awaiter(this, void 0, void 0, function* () {
+ let stats = void 0;
+ try {
+ stats = yield exports.stat(filePath);
+ } catch (err) {
+ if (err.code !== "ENOENT") console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`);
+ }
+ if (stats && stats.isFile()) {
+ if (exports.IS_WINDOWS) {
+ const upperExt = path$4.extname(filePath).toUpperCase();
+ if (extensions.some((validExt) => validExt.toUpperCase() === upperExt)) return filePath;
+ } else if (isUnixExecutable(stats)) return filePath;
+ }
+ const originalFilePath = filePath;
+ for (const extension of extensions) {
+ filePath = originalFilePath + extension;
+ stats = void 0;
+ try {
+ stats = yield exports.stat(filePath);
+ } catch (err) {
+ if (err.code !== "ENOENT") console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`);
+ }
+ if (stats && stats.isFile()) {
+ if (exports.IS_WINDOWS) {
+ try {
+ const directory = path$4.dirname(filePath);
+ const upperName = path$4.basename(filePath).toUpperCase();
+ for (const actualName of yield exports.readdir(directory)) if (upperName === actualName.toUpperCase()) {
+ filePath = path$4.join(directory, actualName);
+ break;
+ }
+ } catch (err) {
+ console.log(`Unexpected error attempting to determine the actual case of the file '${filePath}': ${err}`);
+ }
+ return filePath;
+ } else if (isUnixExecutable(stats)) return filePath;
+ }
+ }
+ return "";
+ });
+ }
+ exports.tryGetExecutablePath = tryGetExecutablePath;
+ function normalizeSeparators(p) {
+ p = p || "";
+ if (exports.IS_WINDOWS) {
+ p = p.replace(/\//g, "\\");
+ return p.replace(/\\\\+/g, "\\");
+ }
+ return p.replace(/\/\/+/g, "/");
+ }
+ function isUnixExecutable(stats) {
+ return (stats.mode & 1) > 0 || (stats.mode & 8) > 0 && stats.gid === process.getgid() || (stats.mode & 64) > 0 && stats.uid === process.getuid();
+ }
+ function getCmdPath() {
+ var _a;
+ return (_a = process.env["COMSPEC"]) !== null && _a !== void 0 ? _a : `cmd.exe`;
+ }
+ exports.getCmdPath = getCmdPath;
+}));
+//#endregion
+//#region node_modules/.pnpm/@actions+io@1.1.3/node_modules/@actions/io/lib/io.js
+var require_io = /* @__PURE__ */ __commonJSMin(((exports) => {
+ var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === void 0) k2 = k;
+ Object.defineProperty(o, k2, {
+ enumerable: true,
+ get: function() {
+ return m[k];
+ }
+ });
+ }) : (function(o, m, k, k2) {
+ if (k2 === void 0) k2 = k;
+ o[k2] = m[k];
+ }));
+ var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", {
+ enumerable: true,
+ value: v
+ });
+ }) : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar = exports && exports.__importStar || function(mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) {
+ for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ }
+ __setModuleDefault(result, mod);
+ return result;
+ };
+ var __awaiter = exports && exports.__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());
+ });
+ };
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.findInPath = exports.which = exports.mkdirP = exports.rmRF = exports.mv = exports.cp = void 0;
+ const assert_1 = __require("assert");
+ const path$3 = __importStar(__require("path"));
+ const ioUtil = __importStar(require_io_util());
+ /**
+ * Copies a file or folder.
+ * Based off of shelljs - https://github.com/shelljs/shelljs/blob/9237f66c52e5daa40458f94f9565e18e8132f5a6/src/cp.js
+ *
+ * @param source source path
+ * @param dest destination path
+ * @param options optional. See CopyOptions.
+ */
+ function cp(source, dest, options = {}) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const { force, recursive, copySourceDirectory } = readCopyOptions(options);
+ const destStat = (yield ioUtil.exists(dest)) ? yield ioUtil.stat(dest) : null;
+ if (destStat && destStat.isFile() && !force) return;
+ const newDest = destStat && destStat.isDirectory() && copySourceDirectory ? path$3.join(dest, path$3.basename(source)) : dest;
+ if (!(yield ioUtil.exists(source))) throw new Error(`no such file or directory: ${source}`);
+ if ((yield ioUtil.stat(source)).isDirectory()) if (!recursive) throw new Error(`Failed to copy. ${source} is a directory, but tried to copy without recursive flag.`);
+ else yield cpDirRecursive(source, newDest, 0, force);
+ else {
+ if (path$3.relative(source, newDest) === "") throw new Error(`'${newDest}' and '${source}' are the same file`);
+ yield copyFile(source, newDest, force);
+ }
+ });
+ }
+ exports.cp = cp;
+ /**
+ * Moves a path.
+ *
+ * @param source source path
+ * @param dest destination path
+ * @param options optional. See MoveOptions.
+ */
+ function mv(source, dest, options = {}) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (yield ioUtil.exists(dest)) {
+ let destExists = true;
+ if (yield ioUtil.isDirectory(dest)) {
+ dest = path$3.join(dest, path$3.basename(source));
+ destExists = yield ioUtil.exists(dest);
+ }
+ if (destExists) if (options.force == null || options.force) yield rmRF(dest);
+ else throw new Error("Destination already exists");
+ }
+ yield mkdirP(path$3.dirname(dest));
+ yield ioUtil.rename(source, dest);
+ });
+ }
+ exports.mv = mv;
+ /**
+ * Remove a path recursively with force
+ *
+ * @param inputPath path to remove
+ */
+ function rmRF(inputPath) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (ioUtil.IS_WINDOWS) {
+ if (/[*"<>|]/.test(inputPath)) throw new Error("File path must not contain `*`, `\"`, `<`, `>` or `|` on Windows");
+ }
+ try {
+ yield ioUtil.rm(inputPath, {
+ force: true,
+ maxRetries: 3,
+ recursive: true,
+ retryDelay: 300
+ });
+ } catch (err) {
+ throw new Error(`File was unable to be removed ${err}`);
+ }
+ });
+ }
+ exports.rmRF = rmRF;
+ /**
+ * Make a directory. Creates the full path with folders in between
+ * Will throw if it fails
+ *
+ * @param fsPath path to create
+ * @returns Promise
+ */
+ function mkdirP(fsPath) {
+ return __awaiter(this, void 0, void 0, function* () {
+ assert_1.ok(fsPath, "a path argument must be provided");
+ yield ioUtil.mkdir(fsPath, { recursive: true });
+ });
+ }
+ exports.mkdirP = mkdirP;
+ /**
+ * Returns path of a tool had the tool actually been invoked. Resolves via paths.
+ * If you check and the tool does not exist, it will throw.
+ *
+ * @param tool name of the tool
+ * @param check whether to check if tool exists
+ * @returns Promise path to tool
+ */
+ function which(tool, check) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!tool) throw new Error("parameter 'tool' is required");
+ if (check) {
+ const result = yield which(tool, false);
+ if (!result) if (ioUtil.IS_WINDOWS) throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.`);
+ else throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`);
+ return result;
+ }
+ const matches = yield findInPath(tool);
+ if (matches && matches.length > 0) return matches[0];
+ return "";
+ });
+ }
+ exports.which = which;
+ /**
+ * Returns a list of all occurrences of the given tool on the system path.
+ *
+ * @returns Promise the paths of the tool
+ */
+ function findInPath(tool) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!tool) throw new Error("parameter 'tool' is required");
+ const extensions = [];
+ if (ioUtil.IS_WINDOWS && process.env["PATHEXT"]) {
+ for (const extension of process.env["PATHEXT"].split(path$3.delimiter)) if (extension) extensions.push(extension);
+ }
+ if (ioUtil.isRooted(tool)) {
+ const filePath = yield ioUtil.tryGetExecutablePath(tool, extensions);
+ if (filePath) return [filePath];
+ return [];
+ }
+ if (tool.includes(path$3.sep)) return [];
+ const directories = [];
+ if (process.env.PATH) {
+ for (const p of process.env.PATH.split(path$3.delimiter)) if (p) directories.push(p);
+ }
+ const matches = [];
+ for (const directory of directories) {
+ const filePath = yield ioUtil.tryGetExecutablePath(path$3.join(directory, tool), extensions);
+ if (filePath) matches.push(filePath);
+ }
+ return matches;
+ });
+ }
+ exports.findInPath = findInPath;
+ function readCopyOptions(options) {
+ return {
+ force: options.force == null ? true : options.force,
+ recursive: Boolean(options.recursive),
+ copySourceDirectory: options.copySourceDirectory == null ? true : Boolean(options.copySourceDirectory)
+ };
+ }
+ function cpDirRecursive(sourceDir, destDir, currentDepth, force) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (currentDepth >= 255) return;
+ currentDepth++;
+ yield mkdirP(destDir);
+ const files = yield ioUtil.readdir(sourceDir);
+ for (const fileName of files) {
+ const srcFile = `${sourceDir}/${fileName}`;
+ const destFile = `${destDir}/${fileName}`;
+ if ((yield ioUtil.lstat(srcFile)).isDirectory()) yield cpDirRecursive(srcFile, destFile, currentDepth, force);
+ else yield copyFile(srcFile, destFile, force);
+ }
+ yield ioUtil.chmod(destDir, (yield ioUtil.stat(sourceDir)).mode);
+ });
+ }
+ function copyFile(srcFile, destFile, force) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if ((yield ioUtil.lstat(srcFile)).isSymbolicLink()) {
+ try {
+ yield ioUtil.lstat(destFile);
+ yield ioUtil.unlink(destFile);
+ } catch (e) {
+ if (e.code === "EPERM") {
+ yield ioUtil.chmod(destFile, "0666");
+ yield ioUtil.unlink(destFile);
+ }
+ }
+ const symlinkFull = yield ioUtil.readlink(srcFile);
+ yield ioUtil.symlink(symlinkFull, destFile, ioUtil.IS_WINDOWS ? "junction" : null);
+ } else if (!(yield ioUtil.exists(destFile)) || force) yield ioUtil.copyFile(srcFile, destFile);
+ });
+ }
+}));
+//#endregion
+//#region node_modules/.pnpm/@actions+exec@1.1.1/node_modules/@actions/exec/lib/toolrunner.js
+var require_toolrunner = /* @__PURE__ */ __commonJSMin(((exports) => {
+ var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === void 0) k2 = k;
+ Object.defineProperty(o, k2, {
+ enumerable: true,
+ get: function() {
+ return m[k];
+ }
+ });
+ }) : (function(o, m, k, k2) {
+ if (k2 === void 0) k2 = k;
+ o[k2] = m[k];
+ }));
+ var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", {
+ enumerable: true,
+ value: v
+ });
+ }) : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar = exports && exports.__importStar || function(mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) {
+ for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ }
+ __setModuleDefault(result, mod);
+ return result;
+ };
+ var __awaiter = exports && exports.__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());
+ });
+ };
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.argStringToArray = exports.ToolRunner = void 0;
+ const os$1 = __importStar(__require("os"));
+ const events = __importStar(__require("events"));
+ const child = __importStar(__require("child_process"));
+ const path$2 = __importStar(__require("path"));
+ const io = __importStar(require_io());
+ const ioUtil = __importStar(require_io_util());
+ const timers_1 = __require("timers");
+ const IS_WINDOWS = process.platform === "win32";
+ var ToolRunner = class extends events.EventEmitter {
+ constructor(toolPath, args, options) {
+ super();
+ if (!toolPath) throw new Error("Parameter 'toolPath' cannot be null or empty.");
+ this.toolPath = toolPath;
+ this.args = args || [];
+ this.options = options || {};
+ }
+ _debug(message) {
+ if (this.options.listeners && this.options.listeners.debug) this.options.listeners.debug(message);
+ }
+ _getCommandString(options, noPrefix) {
+ const toolPath = this._getSpawnFileName();
+ const args = this._getSpawnArgs(options);
+ let cmd = noPrefix ? "" : "[command]";
+ if (IS_WINDOWS) if (this._isCmdFile()) {
+ cmd += toolPath;
+ for (const a of args) cmd += ` ${a}`;
+ } else if (options.windowsVerbatimArguments) {
+ cmd += `"${toolPath}"`;
+ for (const a of args) cmd += ` ${a}`;
+ } else {
+ cmd += this._windowsQuoteCmdArg(toolPath);
+ for (const a of args) cmd += ` ${this._windowsQuoteCmdArg(a)}`;
+ }
+ else {
+ cmd += toolPath;
+ for (const a of args) cmd += ` ${a}`;
+ }
+ return cmd;
+ }
+ _processLineBuffer(data, strBuffer, onLine) {
+ try {
+ let s = strBuffer + data.toString();
+ let n = s.indexOf(os$1.EOL);
+ while (n > -1) {
+ onLine(s.substring(0, n));
+ s = s.substring(n + os$1.EOL.length);
+ n = s.indexOf(os$1.EOL);
+ }
+ return s;
+ } catch (err) {
+ this._debug(`error processing line. Failed with error ${err}`);
+ return "";
+ }
+ }
+ _getSpawnFileName() {
+ if (IS_WINDOWS) {
+ if (this._isCmdFile()) return process.env["COMSPEC"] || "cmd.exe";
+ }
+ return this.toolPath;
+ }
+ _getSpawnArgs(options) {
+ if (IS_WINDOWS) {
+ if (this._isCmdFile()) {
+ let argline = `/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`;
+ for (const a of this.args) {
+ argline += " ";
+ argline += options.windowsVerbatimArguments ? a : this._windowsQuoteCmdArg(a);
+ }
+ argline += "\"";
+ return [argline];
+ }
+ }
+ return this.args;
+ }
+ _endsWith(str, end) {
+ return str.endsWith(end);
+ }
+ _isCmdFile() {
+ const upperToolPath = this.toolPath.toUpperCase();
+ return this._endsWith(upperToolPath, ".CMD") || this._endsWith(upperToolPath, ".BAT");
+ }
+ _windowsQuoteCmdArg(arg) {
+ if (!this._isCmdFile()) return this._uvQuoteCmdArg(arg);
+ if (!arg) return "\"\"";
+ const cmdSpecialChars = [
+ " ",
+ " ",
+ "&",
+ "(",
+ ")",
+ "[",
+ "]",
+ "{",
+ "}",
+ "^",
+ "=",
+ ";",
+ "!",
+ "'",
+ "+",
+ ",",
+ "`",
+ "~",
+ "|",
+ "<",
+ ">",
+ "\""
+ ];
+ let needsQuotes = false;
+ for (const char of arg) if (cmdSpecialChars.some((x) => x === char)) {
+ needsQuotes = true;
+ break;
+ }
+ if (!needsQuotes) return arg;
+ let reverse = "\"";
+ let quoteHit = true;
+ for (let i = arg.length; i > 0; i--) {
+ reverse += arg[i - 1];
+ if (quoteHit && arg[i - 1] === "\\") reverse += "\\";
+ else if (arg[i - 1] === "\"") {
+ quoteHit = true;
+ reverse += "\"";
+ } else quoteHit = false;
+ }
+ reverse += "\"";
+ return reverse.split("").reverse().join("");
+ }
+ _uvQuoteCmdArg(arg) {
+ if (!arg) return "\"\"";
+ if (!arg.includes(" ") && !arg.includes(" ") && !arg.includes("\"")) return arg;
+ if (!arg.includes("\"") && !arg.includes("\\")) return `"${arg}"`;
+ let reverse = "\"";
+ let quoteHit = true;
+ for (let i = arg.length; i > 0; i--) {
+ reverse += arg[i - 1];
+ if (quoteHit && arg[i - 1] === "\\") reverse += "\\";
+ else if (arg[i - 1] === "\"") {
+ quoteHit = true;
+ reverse += "\\";
+ } else quoteHit = false;
+ }
+ reverse += "\"";
+ return reverse.split("").reverse().join("");
+ }
+ _cloneExecOptions(options) {
+ options = options || {};
+ const result = {
+ cwd: options.cwd || process.cwd(),
+ env: options.env || process.env,
+ silent: options.silent || false,
+ windowsVerbatimArguments: options.windowsVerbatimArguments || false,
+ failOnStdErr: options.failOnStdErr || false,
+ ignoreReturnCode: options.ignoreReturnCode || false,
+ delay: options.delay || 1e4
+ };
+ result.outStream = options.outStream || process.stdout;
+ result.errStream = options.errStream || process.stderr;
+ return result;
+ }
+ _getSpawnOptions(options, toolPath) {
+ options = options || {};
+ const result = {};
+ result.cwd = options.cwd;
+ result.env = options.env;
+ result["windowsVerbatimArguments"] = options.windowsVerbatimArguments || this._isCmdFile();
+ if (options.windowsVerbatimArguments) result.argv0 = `"${toolPath}"`;
+ return result;
+ }
+ /**
+ * Exec a tool.
+ * Output will be streamed to the live console.
+ * Returns promise with return code
+ *
+ * @param tool path to tool to exec
+ * @param options optional exec options. See ExecOptions
+ * @returns number
+ */
+ exec() {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!ioUtil.isRooted(this.toolPath) && (this.toolPath.includes("/") || IS_WINDOWS && this.toolPath.includes("\\"))) this.toolPath = path$2.resolve(process.cwd(), this.options.cwd || process.cwd(), this.toolPath);
+ this.toolPath = yield io.which(this.toolPath, true);
+ return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
+ this._debug(`exec tool: ${this.toolPath}`);
+ this._debug("arguments:");
+ for (const arg of this.args) this._debug(` ${arg}`);
+ const optionsNonNull = this._cloneExecOptions(this.options);
+ if (!optionsNonNull.silent && optionsNonNull.outStream) optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os$1.EOL);
+ const state = new ExecState(optionsNonNull, this.toolPath);
+ state.on("debug", (message) => {
+ this._debug(message);
+ });
+ if (this.options.cwd && !(yield ioUtil.exists(this.options.cwd))) return reject(/* @__PURE__ */ new Error(`The cwd: ${this.options.cwd} does not exist!`));
+ const fileName = this._getSpawnFileName();
+ const cp = child.spawn(fileName, this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(this.options, fileName));
+ let stdbuffer = "";
+ if (cp.stdout) cp.stdout.on("data", (data) => {
+ if (this.options.listeners && this.options.listeners.stdout) this.options.listeners.stdout(data);
+ if (!optionsNonNull.silent && optionsNonNull.outStream) optionsNonNull.outStream.write(data);
+ stdbuffer = this._processLineBuffer(data, stdbuffer, (line) => {
+ if (this.options.listeners && this.options.listeners.stdline) this.options.listeners.stdline(line);
+ });
+ });
+ let errbuffer = "";
+ if (cp.stderr) cp.stderr.on("data", (data) => {
+ state.processStderr = true;
+ if (this.options.listeners && this.options.listeners.stderr) this.options.listeners.stderr(data);
+ if (!optionsNonNull.silent && optionsNonNull.errStream && optionsNonNull.outStream) (optionsNonNull.failOnStdErr ? optionsNonNull.errStream : optionsNonNull.outStream).write(data);
+ errbuffer = this._processLineBuffer(data, errbuffer, (line) => {
+ if (this.options.listeners && this.options.listeners.errline) this.options.listeners.errline(line);
+ });
+ });
+ cp.on("error", (err) => {
+ state.processError = err.message;
+ state.processExited = true;
+ state.processClosed = true;
+ state.CheckComplete();
+ });
+ cp.on("exit", (code) => {
+ state.processExitCode = code;
+ state.processExited = true;
+ this._debug(`Exit code ${code} received from tool '${this.toolPath}'`);
+ state.CheckComplete();
+ });
+ cp.on("close", (code) => {
+ state.processExitCode = code;
+ state.processExited = true;
+ state.processClosed = true;
+ this._debug(`STDIO streams have closed for tool '${this.toolPath}'`);
+ state.CheckComplete();
+ });
+ state.on("done", (error, exitCode) => {
+ if (stdbuffer.length > 0) this.emit("stdline", stdbuffer);
+ if (errbuffer.length > 0) this.emit("errline", errbuffer);
+ cp.removeAllListeners();
+ if (error) reject(error);
+ else resolve(exitCode);
+ });
+ if (this.options.input) {
+ if (!cp.stdin) throw new Error("child process missing stdin");
+ cp.stdin.end(this.options.input);
+ }
+ }));
+ });
+ }
+ };
+ exports.ToolRunner = ToolRunner;
+ /**
+ * Convert an arg string to an array of args. Handles escaping
+ *
+ * @param argString string of arguments
+ * @returns string[] array of arguments
+ */
+ function argStringToArray(argString) {
+ const args = [];
+ let inQuotes = false;
+ let escaped = false;
+ let arg = "";
+ function append(c) {
+ if (escaped && c !== "\"") arg += "\\";
+ arg += c;
+ escaped = false;
+ }
+ for (let i = 0; i < argString.length; i++) {
+ const c = argString.charAt(i);
+ if (c === "\"") {
+ if (!escaped) inQuotes = !inQuotes;
+ else append(c);
+ continue;
+ }
+ if (c === "\\" && escaped) {
+ append(c);
+ continue;
+ }
+ if (c === "\\" && inQuotes) {
+ escaped = true;
+ continue;
+ }
+ if (c === " " && !inQuotes) {
+ if (arg.length > 0) {
+ args.push(arg);
+ arg = "";
+ }
+ continue;
+ }
+ append(c);
+ }
+ if (arg.length > 0) args.push(arg.trim());
+ return args;
+ }
+ exports.argStringToArray = argStringToArray;
+ var ExecState = class ExecState extends events.EventEmitter {
+ constructor(options, toolPath) {
+ super();
+ this.processClosed = false;
+ this.processError = "";
+ this.processExitCode = 0;
+ this.processExited = false;
+ this.processStderr = false;
+ this.delay = 1e4;
+ this.done = false;
+ this.timeout = null;
+ if (!toolPath) throw new Error("toolPath must not be empty");
+ this.options = options;
+ this.toolPath = toolPath;
+ if (options.delay) this.delay = options.delay;
+ }
+ CheckComplete() {
+ if (this.done) return;
+ if (this.processClosed) this._setResult();
+ else if (this.processExited) this.timeout = timers_1.setTimeout(ExecState.HandleTimeout, this.delay, this);
+ }
+ _debug(message) {
+ this.emit("debug", message);
+ }
+ _setResult() {
+ let error;
+ if (this.processExited) {
+ if (this.processError) error = /* @__PURE__ */ new Error(`There was an error when attempting to execute the process '${this.toolPath}'. This may indicate the process failed to start. Error: ${this.processError}`);
+ else if (this.processExitCode !== 0 && !this.options.ignoreReturnCode) error = /* @__PURE__ */ new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`);
+ else if (this.processStderr && this.options.failOnStdErr) error = /* @__PURE__ */ new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`);
+ }
+ if (this.timeout) {
+ clearTimeout(this.timeout);
+ this.timeout = null;
+ }
+ this.done = true;
+ this.emit("done", error, this.processExitCode);
+ }
+ static HandleTimeout(state) {
+ if (state.done) return;
+ if (!state.processClosed && state.processExited) {
+ const message = `The STDIO streams did not close within ${state.delay / 1e3} seconds of the exit event from process '${state.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`;
+ state._debug(message);
+ }
+ state._setResult();
+ }
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/@actions+exec@1.1.1/node_modules/@actions/exec/lib/exec.js
+var require_exec = /* @__PURE__ */ __commonJSMin(((exports) => {
+ var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === void 0) k2 = k;
+ Object.defineProperty(o, k2, {
+ enumerable: true,
+ get: function() {
+ return m[k];
+ }
+ });
+ }) : (function(o, m, k, k2) {
+ if (k2 === void 0) k2 = k;
+ o[k2] = m[k];
+ }));
+ var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", {
+ enumerable: true,
+ value: v
+ });
+ }) : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar = exports && exports.__importStar || function(mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) {
+ for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ }
+ __setModuleDefault(result, mod);
+ return result;
+ };
+ var __awaiter = exports && exports.__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());
+ });
+ };
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.getExecOutput = exports.exec = void 0;
+ const string_decoder_1 = __require("string_decoder");
+ const tr = __importStar(require_toolrunner());
+ /**
+ * Exec a command.
+ * Output will be streamed to the live console.
+ * Returns promise with return code
+ *
+ * @param commandLine command to execute (can include additional args). Must be correctly escaped.
+ * @param args optional arguments for tool. Escaping is handled by the lib.
+ * @param options optional exec options. See ExecOptions
+ * @returns Promise exit code
+ */
+ function exec(commandLine, args, options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const commandArgs = tr.argStringToArray(commandLine);
+ if (commandArgs.length === 0) throw new Error(`Parameter 'commandLine' cannot be null or empty.`);
+ const toolPath = commandArgs[0];
+ args = commandArgs.slice(1).concat(args || []);
+ return new tr.ToolRunner(toolPath, args, options).exec();
+ });
+ }
+ exports.exec = exec;
+ /**
+ * Exec a command and get the output.
+ * Output will be streamed to the live console.
+ * Returns promise with the exit code and collected stdout and stderr
+ *
+ * @param commandLine command to execute (can include additional args). Must be correctly escaped.
+ * @param args optional arguments for tool. Escaping is handled by the lib.
+ * @param options optional exec options. See ExecOptions
+ * @returns Promise exit code, stdout, and stderr
+ */
+ function getExecOutput(commandLine, args, options) {
+ var _a, _b;
+ return __awaiter(this, void 0, void 0, function* () {
+ let stdout = "";
+ let stderr = "";
+ const stdoutDecoder = new string_decoder_1.StringDecoder("utf8");
+ const stderrDecoder = new string_decoder_1.StringDecoder("utf8");
+ const originalStdoutListener = (_a = options === null || options === void 0 ? void 0 : options.listeners) === null || _a === void 0 ? void 0 : _a.stdout;
+ const originalStdErrListener = (_b = options === null || options === void 0 ? void 0 : options.listeners) === null || _b === void 0 ? void 0 : _b.stderr;
+ const stdErrListener = (data) => {
+ stderr += stderrDecoder.write(data);
+ if (originalStdErrListener) originalStdErrListener(data);
+ };
+ const stdOutListener = (data) => {
+ stdout += stdoutDecoder.write(data);
+ if (originalStdoutListener) originalStdoutListener(data);
+ };
+ const listeners = Object.assign(Object.assign({}, options === null || options === void 0 ? void 0 : options.listeners), {
+ stdout: stdOutListener,
+ stderr: stdErrListener
+ });
+ const exitCode = yield exec(commandLine, args, Object.assign(Object.assign({}, options), { listeners }));
+ stdout += stdoutDecoder.end();
+ stderr += stderrDecoder.end();
+ return {
+ exitCode,
+ stdout,
+ stderr
+ };
+ });
+ }
+ exports.getExecOutput = getExecOutput;
+}));
+//#endregion
+//#region node_modules/.pnpm/@actions+core@1.11.1/node_modules/@actions/core/lib/platform.js
+var require_platform = /* @__PURE__ */ __commonJSMin(((exports) => {
+ var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === void 0) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) desc = {
+ enumerable: true,
+ get: function() {
+ return m[k];
+ }
+ };
+ Object.defineProperty(o, k2, desc);
+ }) : (function(o, m, k, k2) {
+ if (k2 === void 0) k2 = k;
+ o[k2] = m[k];
+ }));
+ var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", {
+ enumerable: true,
+ value: v
+ });
+ }) : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar = exports && exports.__importStar || function(mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) {
+ for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ }
+ __setModuleDefault(result, mod);
+ return result;
+ };
+ var __awaiter = exports && exports.__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 __importDefault = exports && exports.__importDefault || function(mod) {
+ return mod && mod.__esModule ? mod : { "default": mod };
+ };
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.getDetails = exports.isLinux = exports.isMacOS = exports.isWindows = exports.arch = exports.platform = void 0;
+ const os_1$1 = __importDefault(__require("os"));
+ const exec = __importStar(require_exec());
+ const getWindowsInfo = () => __awaiter(void 0, void 0, void 0, function* () {
+ const { stdout: version } = yield exec.getExecOutput("powershell -command \"(Get-CimInstance -ClassName Win32_OperatingSystem).Version\"", void 0, { silent: true });
+ const { stdout: name } = yield exec.getExecOutput("powershell -command \"(Get-CimInstance -ClassName Win32_OperatingSystem).Caption\"", void 0, { silent: true });
+ return {
+ name: name.trim(),
+ version: version.trim()
+ };
+ });
+ const getMacOsInfo = () => __awaiter(void 0, void 0, void 0, function* () {
+ var _a, _b, _c, _d;
+ const { stdout } = yield exec.getExecOutput("sw_vers", void 0, { silent: true });
+ const version = (_b = (_a = stdout.match(/ProductVersion:\s*(.+)/)) === null || _a === void 0 ? void 0 : _a[1]) !== null && _b !== void 0 ? _b : "";
+ return {
+ name: (_d = (_c = stdout.match(/ProductName:\s*(.+)/)) === null || _c === void 0 ? void 0 : _c[1]) !== null && _d !== void 0 ? _d : "",
+ version
+ };
+ });
+ const getLinuxInfo = () => __awaiter(void 0, void 0, void 0, function* () {
+ const { stdout } = yield exec.getExecOutput("lsb_release", [
+ "-i",
+ "-r",
+ "-s"
+ ], { silent: true });
+ const [name, version] = stdout.trim().split("\n");
+ return {
+ name,
+ version
+ };
+ });
+ exports.platform = os_1$1.default.platform();
+ exports.arch = os_1$1.default.arch();
+ exports.isWindows = exports.platform === "win32";
+ exports.isMacOS = exports.platform === "darwin";
+ exports.isLinux = exports.platform === "linux";
+ function getDetails() {
+ return __awaiter(this, void 0, void 0, function* () {
+ return Object.assign(Object.assign({}, yield exports.isWindows ? getWindowsInfo() : exports.isMacOS ? getMacOsInfo() : getLinuxInfo()), {
+ platform: exports.platform,
+ arch: exports.arch,
+ isWindows: exports.isWindows,
+ isMacOS: exports.isMacOS,
+ isLinux: exports.isLinux
+ });
+ });
+ }
+ exports.getDetails = getDetails;
+}));
+//#endregion
+//#region node_modules/.pnpm/@actions+core@1.11.1/node_modules/@actions/core/lib/core.js
+var require_core = /* @__PURE__ */ __commonJSMin(((exports) => {
+ var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === void 0) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) desc = {
+ enumerable: true,
+ get: function() {
+ return m[k];
+ }
+ };
+ Object.defineProperty(o, k2, desc);
+ }) : (function(o, m, k, k2) {
+ if (k2 === void 0) k2 = k;
+ o[k2] = m[k];
+ }));
+ var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", {
+ enumerable: true,
+ value: v
+ });
+ }) : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar = exports && exports.__importStar || function(mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) {
+ for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ }
+ __setModuleDefault(result, mod);
+ return result;
+ };
+ var __awaiter = exports && exports.__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());
+ });
+ };
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.platform = exports.toPlatformPath = exports.toWin32Path = exports.toPosixPath = exports.markdownSummary = exports.summary = exports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0;
+ const command_1 = require_command();
+ const file_command_1 = require_file_command();
+ const utils_1 = require_utils$3();
+ const os = __importStar(__require("os"));
+ const path$1 = __importStar(__require("path"));
+ const oidc_utils_1 = require_oidc_utils();
+ /**
+ * The code to exit an action
+ */
+ var ExitCode;
+ (function(ExitCode) {
+ /**
+ * A code indicating that the action was successful
+ */
+ ExitCode[ExitCode["Success"] = 0] = "Success";
+ /**
+ * A code indicating that the action was a failure
+ */
+ ExitCode[ExitCode["Failure"] = 1] = "Failure";
+ })(ExitCode || (exports.ExitCode = ExitCode = {}));
+ /**
+ * Sets env variable for this action and future actions in the job
+ * @param name the name of the variable to set
+ * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify
+ */
+ function exportVariable(name, val) {
+ const convertedVal = (0, utils_1.toCommandValue)(val);
+ process.env[name] = convertedVal;
+ if (process.env["GITHUB_ENV"] || "") return (0, file_command_1.issueFileCommand)("ENV", (0, file_command_1.prepareKeyValueMessage)(name, val));
+ (0, command_1.issueCommand)("set-env", { name }, convertedVal);
+ }
+ exports.exportVariable = exportVariable;
+ /**
+ * Registers a secret which will get masked from logs
+ * @param secret value of the secret
+ */
+ function setSecret(secret) {
+ (0, command_1.issueCommand)("add-mask", {}, secret);
+ }
+ exports.setSecret = setSecret;
+ /**
+ * Prepends inputPath to the PATH (for this action and future actions)
+ * @param inputPath
+ */
+ function addPath(inputPath) {
+ if (process.env["GITHUB_PATH"] || "") (0, file_command_1.issueFileCommand)("PATH", inputPath);
+ else (0, command_1.issueCommand)("add-path", {}, inputPath);
+ process.env["PATH"] = `${inputPath}${path$1.delimiter}${process.env["PATH"]}`;
+ }
+ exports.addPath = addPath;
+ /**
+ * Gets the value of an input.
+ * Unless trimWhitespace is set to false in InputOptions, the value is also trimmed.
+ * Returns an empty string if the value is not defined.
+ *
+ * @param name name of the input to get
+ * @param options optional. See InputOptions.
+ * @returns string
+ */
+ function getInput(name, options) {
+ const val = process.env[`INPUT_${name.replace(/ /g, "_").toUpperCase()}`] || "";
+ if (options && options.required && !val) throw new Error(`Input required and not supplied: ${name}`);
+ if (options && options.trimWhitespace === false) return val;
+ return val.trim();
+ }
+ exports.getInput = getInput;
+ /**
+ * Gets the values of an multiline input. Each value is also trimmed.
+ *
+ * @param name name of the input to get
+ * @param options optional. See InputOptions.
+ * @returns string[]
+ *
+ */
+ function getMultilineInput(name, options) {
+ const inputs = getInput(name, options).split("\n").filter((x) => x !== "");
+ if (options && options.trimWhitespace === false) return inputs;
+ return inputs.map((input) => input.trim());
+ }
+ exports.getMultilineInput = getMultilineInput;
+ /**
+ * Gets the input value of the boolean type in the YAML 1.2 "core schema" specification.
+ * Support boolean input list: `true | True | TRUE | false | False | FALSE` .
+ * The return value is also in boolean type.
+ * ref: https://yaml.org/spec/1.2/spec.html#id2804923
+ *
+ * @param name name of the input to get
+ * @param options optional. See InputOptions.
+ * @returns boolean
+ */
+ function getBooleanInput(name, options) {
+ const trueValue = [
+ "true",
+ "True",
+ "TRUE"
+ ];
+ const falseValue = [
+ "false",
+ "False",
+ "FALSE"
+ ];
+ const val = getInput(name, options);
+ if (trueValue.includes(val)) return true;
+ if (falseValue.includes(val)) return false;
+ throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${name}\nSupport boolean input list: \`true | True | TRUE | false | False | FALSE\``);
+ }
+ exports.getBooleanInput = getBooleanInput;
+ /**
+ * Sets the value of an output.
+ *
+ * @param name name of the output to set
+ * @param value value to store. Non-string values will be converted to a string via JSON.stringify
+ */
+ function setOutput(name, value) {
+ if (process.env["GITHUB_OUTPUT"] || "") return (0, file_command_1.issueFileCommand)("OUTPUT", (0, file_command_1.prepareKeyValueMessage)(name, value));
+ process.stdout.write(os.EOL);
+ (0, command_1.issueCommand)("set-output", { name }, (0, utils_1.toCommandValue)(value));
+ }
+ exports.setOutput = setOutput;
+ /**
+ * Enables or disables the echoing of commands into stdout for the rest of the step.
+ * Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set.
+ *
+ */
+ function setCommandEcho(enabled) {
+ (0, command_1.issue)("echo", enabled ? "on" : "off");
+ }
+ exports.setCommandEcho = setCommandEcho;
+ /**
+ * Sets the action status to failed.
+ * When the action exits it will be with an exit code of 1
+ * @param message add error issue message
+ */
+ function setFailed(message) {
+ process.exitCode = ExitCode.Failure;
+ error(message);
+ }
+ exports.setFailed = setFailed;
+ /**
+ * Gets whether Actions Step Debug is on or not
+ */
+ function isDebug() {
+ return process.env["RUNNER_DEBUG"] === "1";
+ }
+ exports.isDebug = isDebug;
+ /**
+ * Writes debug message to user log
+ * @param message debug message
+ */
+ function debug(message) {
+ (0, command_1.issueCommand)("debug", {}, message);
+ }
+ exports.debug = debug;
+ /**
+ * Adds an error issue
+ * @param message error issue message. Errors will be converted to string via toString()
+ * @param properties optional properties to add to the annotation.
+ */
+ function error(message, properties = {}) {
+ (0, command_1.issueCommand)("error", (0, utils_1.toCommandProperties)(properties), message instanceof Error ? message.toString() : message);
+ }
+ exports.error = error;
+ /**
+ * Adds a warning issue
+ * @param message warning issue message. Errors will be converted to string via toString()
+ * @param properties optional properties to add to the annotation.
+ */
+ function warning(message, properties = {}) {
+ (0, command_1.issueCommand)("warning", (0, utils_1.toCommandProperties)(properties), message instanceof Error ? message.toString() : message);
+ }
+ exports.warning = warning;
+ /**
+ * Adds a notice issue
+ * @param message notice issue message. Errors will be converted to string via toString()
+ * @param properties optional properties to add to the annotation.
+ */
+ function notice(message, properties = {}) {
+ (0, command_1.issueCommand)("notice", (0, utils_1.toCommandProperties)(properties), message instanceof Error ? message.toString() : message);
+ }
+ exports.notice = notice;
+ /**
+ * Writes info to log with console.log.
+ * @param message info message
+ */
+ function info(message) {
+ process.stdout.write(message + os.EOL);
+ }
+ exports.info = info;
+ /**
+ * Begin an output group.
+ *
+ * Output until the next `groupEnd` will be foldable in this group
+ *
+ * @param name The name of the output group
+ */
+ function startGroup(name) {
+ (0, command_1.issue)("group", name);
+ }
+ exports.startGroup = startGroup;
+ /**
+ * End an output group.
+ */
+ function endGroup() {
+ (0, command_1.issue)("endgroup");
+ }
+ exports.endGroup = endGroup;
+ /**
+ * Wrap an asynchronous function call in a group.
+ *
+ * Returns the same type as the function itself.
+ *
+ * @param name The name of the group
+ * @param fn The function to wrap in the group
+ */
+ function group(name, fn) {
+ return __awaiter(this, void 0, void 0, function* () {
+ startGroup(name);
+ let result;
+ try {
+ result = yield fn();
+ } finally {
+ endGroup();
+ }
+ return result;
+ });
+ }
+ exports.group = group;
+ /**
+ * Saves state for current action, the state can only be retrieved by this action's post job execution.
+ *
+ * @param name name of the state to store
+ * @param value value to store. Non-string values will be converted to a string via JSON.stringify
+ */
+ function saveState(name, value) {
+ if (process.env["GITHUB_STATE"] || "") return (0, file_command_1.issueFileCommand)("STATE", (0, file_command_1.prepareKeyValueMessage)(name, value));
+ (0, command_1.issueCommand)("save-state", { name }, (0, utils_1.toCommandValue)(value));
+ }
+ exports.saveState = saveState;
+ /**
+ * Gets the value of an state set by this action's main execution.
+ *
+ * @param name name of the state to get
+ * @returns string
+ */
+ function getState(name) {
+ return process.env[`STATE_${name}`] || "";
+ }
+ exports.getState = getState;
+ function getIDToken(aud) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return yield oidc_utils_1.OidcClient.getIDToken(aud);
+ });
+ }
+ exports.getIDToken = getIDToken;
+ /**
+ * Summary exports
+ */
+ var summary_1 = require_summary();
+ Object.defineProperty(exports, "summary", {
+ enumerable: true,
+ get: function() {
+ return summary_1.summary;
+ }
+ });
+ /**
+ * @deprecated use core.summary
+ */
+ var summary_2 = require_summary();
+ Object.defineProperty(exports, "markdownSummary", {
+ enumerable: true,
+ get: function() {
+ return summary_2.markdownSummary;
+ }
+ });
+ /**
+ * Path exports
+ */
+ var path_utils_1 = require_path_utils();
+ Object.defineProperty(exports, "toPosixPath", {
+ enumerable: true,
+ get: function() {
+ return path_utils_1.toPosixPath;
+ }
+ });
+ Object.defineProperty(exports, "toWin32Path", {
+ enumerable: true,
+ get: function() {
+ return path_utils_1.toWin32Path;
+ }
+ });
+ Object.defineProperty(exports, "toPlatformPath", {
+ enumerable: true,
+ get: function() {
+ return path_utils_1.toPlatformPath;
+ }
+ });
+ /**
+ * Platform utilities exports
+ */
+ exports.platform = __importStar(require_platform());
+}));
+//#endregion
+//#region node_modules/.pnpm/@actions+github@6.0.1/node_modules/@actions/github/lib/context.js
+var require_context = /* @__PURE__ */ __commonJSMin(((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.Context = void 0;
+ const fs_1 = __require("fs");
+ const os_1 = __require("os");
+ var Context = class {
+ /**
+ * Hydrate the context from the environment
+ */
+ constructor() {
+ var _a, _b, _c;
+ this.payload = {};
+ if (process.env.GITHUB_EVENT_PATH) if ((0, fs_1.existsSync)(process.env.GITHUB_EVENT_PATH)) this.payload = JSON.parse((0, fs_1.readFileSync)(process.env.GITHUB_EVENT_PATH, { encoding: "utf8" }));
+ else {
+ const path = process.env.GITHUB_EVENT_PATH;
+ process.stdout.write(`GITHUB_EVENT_PATH ${path} does not exist${os_1.EOL}`);
+ }
+ this.eventName = process.env.GITHUB_EVENT_NAME;
+ this.sha = process.env.GITHUB_SHA;
+ this.ref = process.env.GITHUB_REF;
+ this.workflow = process.env.GITHUB_WORKFLOW;
+ this.action = process.env.GITHUB_ACTION;
+ this.actor = process.env.GITHUB_ACTOR;
+ this.job = process.env.GITHUB_JOB;
+ this.runAttempt = parseInt(process.env.GITHUB_RUN_ATTEMPT, 10);
+ this.runNumber = parseInt(process.env.GITHUB_RUN_NUMBER, 10);
+ this.runId = parseInt(process.env.GITHUB_RUN_ID, 10);
+ this.apiUrl = (_a = process.env.GITHUB_API_URL) !== null && _a !== void 0 ? _a : `https://api.github.com`;
+ this.serverUrl = (_b = process.env.GITHUB_SERVER_URL) !== null && _b !== void 0 ? _b : `https://github.com`;
+ this.graphqlUrl = (_c = process.env.GITHUB_GRAPHQL_URL) !== null && _c !== void 0 ? _c : `https://api.github.com/graphql`;
+ }
+ get issue() {
+ const payload = this.payload;
+ return Object.assign(Object.assign({}, this.repo), { number: (payload.issue || payload.pull_request || payload).number });
+ }
+ get repo() {
+ if (process.env.GITHUB_REPOSITORY) {
+ const [owner, repo] = process.env.GITHUB_REPOSITORY.split("/");
+ return {
+ owner,
+ repo
+ };
+ }
+ if (this.payload.repository) return {
+ owner: this.payload.repository.owner.login,
+ repo: this.payload.repository.name
+ };
+ throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'");
+ }
+ };
+ exports.Context = Context;
+}));
+//#endregion
+//#region node_modules/.pnpm/@actions+github@6.0.1/node_modules/@actions/github/lib/internal/utils.js
+var require_utils$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
+ var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === void 0) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) desc = {
+ enumerable: true,
+ get: function() {
+ return m[k];
+ }
+ };
+ Object.defineProperty(o, k2, desc);
+ }) : (function(o, m, k, k2) {
+ if (k2 === void 0) k2 = k;
+ o[k2] = m[k];
+ }));
+ var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", {
+ enumerable: true,
+ value: v
+ });
+ }) : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar = exports && exports.__importStar || function(mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) {
+ for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ }
+ __setModuleDefault(result, mod);
+ return result;
+ };
+ var __awaiter = exports && exports.__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());
+ });
+ };
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.getApiBaseUrl = exports.getProxyFetch = exports.getProxyAgentDispatcher = exports.getProxyAgent = exports.getAuthString = void 0;
+ const httpClient = __importStar(require_lib());
+ const undici_1 = require_undici();
+ function getAuthString(token, options) {
+ if (!token && !options.auth) throw new Error("Parameter token or opts.auth is required");
+ else if (token && options.auth) throw new Error("Parameters token and opts.auth may not both be specified");
+ return typeof options.auth === "string" ? options.auth : `token ${token}`;
+ }
+ exports.getAuthString = getAuthString;
+ function getProxyAgent(destinationUrl) {
+ return new httpClient.HttpClient().getAgent(destinationUrl);
+ }
+ exports.getProxyAgent = getProxyAgent;
+ function getProxyAgentDispatcher(destinationUrl) {
+ return new httpClient.HttpClient().getAgentDispatcher(destinationUrl);
+ }
+ exports.getProxyAgentDispatcher = getProxyAgentDispatcher;
+ function getProxyFetch(destinationUrl) {
+ const httpDispatcher = getProxyAgentDispatcher(destinationUrl);
+ const proxyFetch = (url, opts) => __awaiter(this, void 0, void 0, function* () {
+ return (0, undici_1.fetch)(url, Object.assign(Object.assign({}, opts), { dispatcher: httpDispatcher }));
+ });
+ return proxyFetch;
+ }
+ exports.getProxyFetch = getProxyFetch;
+ function getApiBaseUrl() {
+ return process.env["GITHUB_API_URL"] || "https://api.github.com";
+ }
+ exports.getApiBaseUrl = getApiBaseUrl;
+}));
+//#endregion
+//#region node_modules/.pnpm/universal-user-agent@6.0.1/node_modules/universal-user-agent/dist-node/index.js
+var require_dist_node$9 = /* @__PURE__ */ __commonJSMin(((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ function getUserAgent() {
+ if (typeof navigator === "object" && "userAgent" in navigator) return navigator.userAgent;
+ if (typeof process === "object" && process.version !== void 0) return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`;
+ return "";
+ }
+ exports.getUserAgent = getUserAgent;
+}));
+//#endregion
+//#region node_modules/.pnpm/before-after-hook@2.2.3/node_modules/before-after-hook/lib/register.js
+var require_register = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ module.exports = register;
+ function register(state, name, method, options) {
+ if (typeof method !== "function") throw new Error("method for before hook must be a function");
+ if (!options) options = {};
+ if (Array.isArray(name)) return name.reverse().reduce(function(callback, name) {
+ return register.bind(null, state, name, callback, options);
+ }, method)();
+ return Promise.resolve().then(function() {
+ if (!state.registry[name]) return method(options);
+ return state.registry[name].reduce(function(method, registered) {
+ return registered.hook.bind(null, method, options);
+ }, method)();
+ });
+ }
+}));
+//#endregion
+//#region node_modules/.pnpm/before-after-hook@2.2.3/node_modules/before-after-hook/lib/add.js
+var require_add = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ module.exports = addHook;
+ function addHook(state, kind, name, hook) {
+ var orig = hook;
+ if (!state.registry[name]) state.registry[name] = [];
+ if (kind === "before") hook = function(method, options) {
+ return Promise.resolve().then(orig.bind(null, options)).then(method.bind(null, options));
+ };
+ if (kind === "after") hook = function(method, options) {
+ var result;
+ return Promise.resolve().then(method.bind(null, options)).then(function(result_) {
+ result = result_;
+ return orig(result, options);
+ }).then(function() {
+ return result;
+ });
+ };
+ if (kind === "error") hook = function(method, options) {
+ return Promise.resolve().then(method.bind(null, options)).catch(function(error) {
+ return orig(error, options);
+ });
+ };
+ state.registry[name].push({
+ hook,
+ orig
+ });
+ }
+}));
+//#endregion
+//#region node_modules/.pnpm/before-after-hook@2.2.3/node_modules/before-after-hook/lib/remove.js
+var require_remove = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ module.exports = removeHook;
+ function removeHook(state, name, method) {
+ if (!state.registry[name]) return;
+ var index = state.registry[name].map(function(registered) {
+ return registered.orig;
+ }).indexOf(method);
+ if (index === -1) return;
+ state.registry[name].splice(index, 1);
+ }
+}));
+//#endregion
+//#region node_modules/.pnpm/before-after-hook@2.2.3/node_modules/before-after-hook/index.js
+var require_before_after_hook = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ var register = require_register();
+ var addHook = require_add();
+ var removeHook = require_remove();
+ var bind = Function.bind;
+ var bindable = bind.bind(bind);
+ function bindApi(hook, state, name) {
+ var removeHookRef = bindable(removeHook, null).apply(null, name ? [state, name] : [state]);
+ hook.api = { remove: removeHookRef };
+ hook.remove = removeHookRef;
+ [
+ "before",
+ "error",
+ "after",
+ "wrap"
+ ].forEach(function(kind) {
+ var args = name ? [
+ state,
+ kind,
+ name
+ ] : [state, kind];
+ hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args);
+ });
+ }
+ function HookSingular() {
+ var singularHookName = "h";
+ var singularHookState = { registry: {} };
+ var singularHook = register.bind(null, singularHookState, singularHookName);
+ bindApi(singularHook, singularHookState, singularHookName);
+ return singularHook;
+ }
+ function HookCollection() {
+ var state = { registry: {} };
+ var hook = register.bind(null, state);
+ bindApi(hook, state);
+ return hook;
+ }
+ var collectionHookDeprecationMessageDisplayed = false;
+ function Hook() {
+ if (!collectionHookDeprecationMessageDisplayed) {
+ console.warn("[before-after-hook]: \"Hook()\" repurposing warning, use \"Hook.Collection()\". Read more: https://git.io/upgrade-before-after-hook-to-1.4");
+ collectionHookDeprecationMessageDisplayed = true;
+ }
+ return HookCollection();
+ }
+ Hook.Singular = HookSingular.bind();
+ Hook.Collection = HookCollection.bind();
+ module.exports = Hook;
+ module.exports.Hook = Hook;
+ module.exports.Singular = Hook.Singular;
+ module.exports.Collection = Hook.Collection;
+}));
+//#endregion
+//#region node_modules/.pnpm/@octokit+endpoint@9.0.6/node_modules/@octokit/endpoint/dist-node/index.js
+var require_dist_node$8 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ var __defProp = Object.defineProperty;
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+ var __getOwnPropNames = Object.getOwnPropertyNames;
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
+ var __export = (target, all) => {
+ for (var name in all) __defProp(target, name, {
+ get: all[name],
+ enumerable: true
+ });
+ };
+ 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 __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+ var dist_src_exports = {};
+ __export(dist_src_exports, { endpoint: () => endpoint });
+ module.exports = __toCommonJS(dist_src_exports);
+ var DEFAULTS = {
+ method: "GET",
+ baseUrl: "https://api.github.com",
+ headers: {
+ accept: "application/vnd.github.v3+json",
+ "user-agent": `octokit-endpoint.js/9.0.6 ${(0, require_dist_node$9().getUserAgent)()}`
+ },
+ mediaType: { format: "" }
+ };
+ function lowercaseKeys(object) {
+ if (!object) return {};
+ return Object.keys(object).reduce((newObj, key) => {
+ newObj[key.toLowerCase()] = object[key];
+ return newObj;
+ }, {});
+ }
+ function isPlainObject(value) {
+ if (typeof value !== "object" || value === null) return false;
+ if (Object.prototype.toString.call(value) !== "[object Object]") return false;
+ const proto = Object.getPrototypeOf(value);
+ if (proto === null) return true;
+ const Ctor = Object.prototype.hasOwnProperty.call(proto, "constructor") && proto.constructor;
+ return typeof Ctor === "function" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value);
+ }
+ function mergeDeep(defaults, options) {
+ const result = Object.assign({}, defaults);
+ Object.keys(options).forEach((key) => {
+ if (isPlainObject(options[key])) if (!(key in defaults)) Object.assign(result, { [key]: options[key] });
+ else result[key] = mergeDeep(defaults[key], options[key]);
+ else Object.assign(result, { [key]: options[key] });
+ });
+ return result;
+ }
+ function removeUndefinedProperties(obj) {
+ for (const key in obj) if (obj[key] === void 0) delete obj[key];
+ return obj;
+ }
+ function merge(defaults, route, options) {
+ if (typeof route === "string") {
+ let [method, url] = route.split(" ");
+ options = Object.assign(url ? {
+ method,
+ url
+ } : { url: method }, options);
+ } else options = Object.assign({}, route);
+ options.headers = lowercaseKeys(options.headers);
+ removeUndefinedProperties(options);
+ removeUndefinedProperties(options.headers);
+ const mergedOptions = mergeDeep(defaults || {}, options);
+ if (options.url === "/graphql") {
+ if (defaults && defaults.mediaType.previews?.length) mergedOptions.mediaType.previews = defaults.mediaType.previews.filter((preview) => !mergedOptions.mediaType.previews.includes(preview)).concat(mergedOptions.mediaType.previews);
+ mergedOptions.mediaType.previews = (mergedOptions.mediaType.previews || []).map((preview) => preview.replace(/-preview/, ""));
+ }
+ return mergedOptions;
+ }
+ function addQueryParameters(url, parameters) {
+ const separator = /\?/.test(url) ? "&" : "?";
+ const names = Object.keys(parameters);
+ if (names.length === 0) return url;
+ return url + separator + names.map((name) => {
+ if (name === "q") return "q=" + parameters.q.split("+").map(encodeURIComponent).join("+");
+ return `${name}=${encodeURIComponent(parameters[name])}`;
+ }).join("&");
+ }
+ var urlVariableRegex = /\{[^{}}]+\}/g;
+ function removeNonChars(variableName) {
+ return variableName.replace(/(?:^\W+)|(?:(? a.concat(b), []);
+ }
+ function omit(object, keysToOmit) {
+ const result = { __proto__: null };
+ for (const key of Object.keys(object)) if (keysToOmit.indexOf(key) === -1) result[key] = object[key];
+ return result;
+ }
+ function encodeReserved(str) {
+ return str.split(/(%[0-9A-Fa-f]{2})/g).map(function(part) {
+ if (!/%[0-9A-Fa-f]/.test(part)) part = encodeURI(part).replace(/%5B/g, "[").replace(/%5D/g, "]");
+ return part;
+ }).join("");
+ }
+ function encodeUnreserved(str) {
+ return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
+ return "%" + c.charCodeAt(0).toString(16).toUpperCase();
+ });
+ }
+ function encodeValue(operator, value, key) {
+ value = operator === "+" || operator === "#" ? encodeReserved(value) : encodeUnreserved(value);
+ if (key) return encodeUnreserved(key) + "=" + value;
+ else return value;
+ }
+ function isDefined(value) {
+ return value !== void 0 && value !== null;
+ }
+ function isKeyOperator(operator) {
+ return operator === ";" || operator === "&" || operator === "?";
+ }
+ function getValues(context, operator, key, modifier) {
+ var value = context[key], result = [];
+ if (isDefined(value) && value !== "") if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
+ value = value.toString();
+ if (modifier && modifier !== "*") value = value.substring(0, parseInt(modifier, 10));
+ result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : ""));
+ } else if (modifier === "*") if (Array.isArray(value)) value.filter(isDefined).forEach(function(value2) {
+ result.push(encodeValue(operator, value2, isKeyOperator(operator) ? key : ""));
+ });
+ else Object.keys(value).forEach(function(k) {
+ if (isDefined(value[k])) result.push(encodeValue(operator, value[k], k));
+ });
+ else {
+ const tmp = [];
+ if (Array.isArray(value)) value.filter(isDefined).forEach(function(value2) {
+ tmp.push(encodeValue(operator, value2));
+ });
+ else Object.keys(value).forEach(function(k) {
+ if (isDefined(value[k])) {
+ tmp.push(encodeUnreserved(k));
+ tmp.push(encodeValue(operator, value[k].toString()));
+ }
+ });
+ if (isKeyOperator(operator)) result.push(encodeUnreserved(key) + "=" + tmp.join(","));
+ else if (tmp.length !== 0) result.push(tmp.join(","));
+ }
+ else if (operator === ";") {
+ if (isDefined(value)) result.push(encodeUnreserved(key));
+ } else if (value === "" && (operator === "&" || operator === "?")) result.push(encodeUnreserved(key) + "=");
+ else if (value === "") result.push("");
+ return result;
+ }
+ function parseUrl(template) {
+ return { expand: expand.bind(null, template) };
+ }
+ function expand(template, context) {
+ var operators = [
+ "+",
+ "#",
+ ".",
+ "/",
+ ";",
+ "?",
+ "&"
+ ];
+ template = template.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g, function(_, expression, literal) {
+ if (expression) {
+ let operator = "";
+ const values = [];
+ if (operators.indexOf(expression.charAt(0)) !== -1) {
+ operator = expression.charAt(0);
+ expression = expression.substr(1);
+ }
+ expression.split(/,/g).forEach(function(variable) {
+ var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable);
+ values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3]));
+ });
+ if (operator && operator !== "+") {
+ var separator = ",";
+ if (operator === "?") separator = "&";
+ else if (operator !== "#") separator = operator;
+ return (values.length !== 0 ? operator : "") + values.join(separator);
+ } else return values.join(",");
+ } else return encodeReserved(literal);
+ });
+ if (template === "/") return template;
+ else return template.replace(/\/$/, "");
+ }
+ function parse(options) {
+ let method = options.method.toUpperCase();
+ let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{$1}");
+ let headers = Object.assign({}, options.headers);
+ let body;
+ let parameters = omit(options, [
+ "method",
+ "baseUrl",
+ "url",
+ "headers",
+ "request",
+ "mediaType"
+ ]);
+ const urlVariableNames = extractUrlVariableNames(url);
+ url = parseUrl(url).expand(parameters);
+ if (!/^http/.test(url)) url = options.baseUrl + url;
+ const remainingParameters = omit(parameters, Object.keys(options).filter((option) => urlVariableNames.includes(option)).concat("baseUrl"));
+ if (!/application\/octet-stream/i.test(headers.accept)) {
+ if (options.mediaType.format) headers.accept = headers.accept.split(/,/).map((format) => format.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, `application/vnd$1$2.${options.mediaType.format}`)).join(",");
+ if (url.endsWith("/graphql")) {
+ if (options.mediaType.previews?.length) headers.accept = (headers.accept.match(/(? {
+ return `application/vnd.github.${preview}-preview${options.mediaType.format ? `.${options.mediaType.format}` : "+json"}`;
+ }).join(",");
+ }
+ }
+ if (["GET", "HEAD"].includes(method)) url = addQueryParameters(url, remainingParameters);
+ else if ("data" in remainingParameters) body = remainingParameters.data;
+ else if (Object.keys(remainingParameters).length) body = remainingParameters;
+ if (!headers["content-type"] && typeof body !== "undefined") headers["content-type"] = "application/json; charset=utf-8";
+ if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") body = "";
+ return Object.assign({
+ method,
+ url,
+ headers
+ }, typeof body !== "undefined" ? { body } : null, options.request ? { request: options.request } : null);
+ }
+ function endpointWithDefaults(defaults, route, options) {
+ return parse(merge(defaults, route, options));
+ }
+ function withDefaults(oldDefaults, newDefaults) {
+ const DEFAULTS2 = merge(oldDefaults, newDefaults);
+ const endpoint2 = endpointWithDefaults.bind(null, DEFAULTS2);
+ return Object.assign(endpoint2, {
+ DEFAULTS: DEFAULTS2,
+ defaults: withDefaults.bind(null, DEFAULTS2),
+ merge: merge.bind(null, DEFAULTS2),
+ parse
+ });
+ }
+ var endpoint = withDefaults(null, DEFAULTS);
+}));
+//#endregion
+//#region node_modules/.pnpm/deprecation@2.3.1/node_modules/deprecation/dist-node/index.js
+var require_dist_node$7 = /* @__PURE__ */ __commonJSMin(((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var Deprecation = class extends Error {
+ constructor(message) {
+ super(message);
+ /* istanbul ignore next */
+ if (Error.captureStackTrace) Error.captureStackTrace(this, this.constructor);
+ this.name = "Deprecation";
+ }
+ };
+ exports.Deprecation = Deprecation;
+}));
+//#endregion
+//#region node_modules/.pnpm/wrappy@1.0.2/node_modules/wrappy/wrappy.js
+var require_wrappy = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ module.exports = wrappy;
+ function wrappy(fn, cb) {
+ if (fn && cb) return wrappy(fn)(cb);
+ if (typeof fn !== "function") throw new TypeError("need wrapper function");
+ Object.keys(fn).forEach(function(k) {
+ wrapper[k] = fn[k];
+ });
+ return wrapper;
+ function wrapper() {
+ var args = new Array(arguments.length);
+ for (var i = 0; i < args.length; i++) args[i] = arguments[i];
+ var ret = fn.apply(this, args);
+ var cb = args[args.length - 1];
+ if (typeof ret === "function" && ret !== cb) Object.keys(cb).forEach(function(k) {
+ ret[k] = cb[k];
+ });
+ return ret;
+ }
+ }
+}));
+//#endregion
+//#region node_modules/.pnpm/once@1.4.0/node_modules/once/once.js
+var require_once = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ var wrappy = require_wrappy();
+ module.exports = wrappy(once);
+ module.exports.strict = wrappy(onceStrict);
+ once.proto = once(function() {
+ Object.defineProperty(Function.prototype, "once", {
+ value: function() {
+ return once(this);
+ },
+ configurable: true
+ });
+ Object.defineProperty(Function.prototype, "onceStrict", {
+ value: function() {
+ return onceStrict(this);
+ },
+ configurable: true
+ });
+ });
+ function once(fn) {
+ var f = function() {
+ if (f.called) return f.value;
+ f.called = true;
+ return f.value = fn.apply(this, arguments);
+ };
+ f.called = false;
+ return f;
+ }
+ function onceStrict(fn) {
+ var f = function() {
+ if (f.called) throw new Error(f.onceError);
+ f.called = true;
+ return f.value = fn.apply(this, arguments);
+ };
+ f.onceError = (fn.name || "Function wrapped with `once`") + " shouldn't be called more than once";
+ f.called = false;
+ return f;
+ }
+}));
+//#endregion
+//#region node_modules/.pnpm/@octokit+request-error@5.1.1/node_modules/@octokit/request-error/dist-node/index.js
+var require_dist_node$6 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ 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 __export = (target, all) => {
+ for (var name in all) __defProp(target, name, {
+ get: all[name],
+ enumerable: true
+ });
+ };
+ 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(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
+ value: mod,
+ enumerable: true
+ }) : target, mod));
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+ var dist_src_exports = {};
+ __export(dist_src_exports, { RequestError: () => RequestError });
+ module.exports = __toCommonJS(dist_src_exports);
+ var import_deprecation = require_dist_node$7();
+ var import_once = __toESM(require_once());
+ var logOnceCode = (0, import_once.default)((deprecation) => console.warn(deprecation));
+ var logOnceHeaders = (0, import_once.default)((deprecation) => console.warn(deprecation));
+ var RequestError = class extends Error {
+ constructor(message, statusCode, options) {
+ super(message);
+ if (Error.captureStackTrace) Error.captureStackTrace(this, this.constructor);
+ this.name = "HttpError";
+ this.status = statusCode;
+ let headers;
+ if ("headers" in options && typeof options.headers !== "undefined") headers = options.headers;
+ if ("response" in options) {
+ this.response = options.response;
+ headers = options.response.headers;
+ }
+ const requestCopy = Object.assign({}, options.request);
+ if (options.request.headers.authorization) requestCopy.headers = Object.assign({}, options.request.headers, { authorization: options.request.headers.authorization.replace(/(? {
+ var __defProp = Object.defineProperty;
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+ var __getOwnPropNames = Object.getOwnPropertyNames;
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
+ var __export = (target, all) => {
+ for (var name in all) __defProp(target, name, {
+ get: all[name],
+ enumerable: true
+ });
+ };
+ 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 __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+ var dist_src_exports = {};
+ __export(dist_src_exports, { request: () => request });
+ module.exports = __toCommonJS(dist_src_exports);
+ var import_endpoint = require_dist_node$8();
+ var import_universal_user_agent = require_dist_node$9();
+ var VERSION = "8.4.1";
+ function isPlainObject(value) {
+ if (typeof value !== "object" || value === null) return false;
+ if (Object.prototype.toString.call(value) !== "[object Object]") return false;
+ const proto = Object.getPrototypeOf(value);
+ if (proto === null) return true;
+ const Ctor = Object.prototype.hasOwnProperty.call(proto, "constructor") && proto.constructor;
+ return typeof Ctor === "function" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value);
+ }
+ var import_request_error = require_dist_node$6();
+ function getBufferResponse(response) {
+ return response.arrayBuffer();
+ }
+ function fetchWrapper(requestOptions) {
+ var _a, _b, _c, _d;
+ const log = requestOptions.request && requestOptions.request.log ? requestOptions.request.log : console;
+ const parseSuccessResponseBody = ((_a = requestOptions.request) == null ? void 0 : _a.parseSuccessResponseBody) !== false;
+ if (isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) requestOptions.body = JSON.stringify(requestOptions.body);
+ let headers = {};
+ let status;
+ let url;
+ let { fetch } = globalThis;
+ if ((_b = requestOptions.request) == null ? void 0 : _b.fetch) fetch = requestOptions.request.fetch;
+ if (!fetch) throw new Error("fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing");
+ return fetch(requestOptions.url, {
+ method: requestOptions.method,
+ body: requestOptions.body,
+ redirect: (_c = requestOptions.request) == null ? void 0 : _c.redirect,
+ headers: requestOptions.headers,
+ signal: (_d = requestOptions.request) == null ? void 0 : _d.signal,
+ ...requestOptions.body && { duplex: "half" }
+ }).then(async (response) => {
+ url = response.url;
+ status = response.status;
+ for (const keyAndValue of response.headers) headers[keyAndValue[0]] = keyAndValue[1];
+ if ("deprecation" in headers) {
+ const matches = headers.link && headers.link.match(/<([^<>]+)>; rel="deprecation"/);
+ const deprecationLink = matches && matches.pop();
+ log.warn(`[@octokit/request] "${requestOptions.method} ${requestOptions.url}" is deprecated. It is scheduled to be removed on ${headers.sunset}${deprecationLink ? `. See ${deprecationLink}` : ""}`);
+ }
+ if (status === 204 || status === 205) return;
+ if (requestOptions.method === "HEAD") {
+ if (status < 400) return;
+ throw new import_request_error.RequestError(response.statusText, status, {
+ response: {
+ url,
+ status,
+ headers,
+ data: void 0
+ },
+ request: requestOptions
+ });
+ }
+ if (status === 304) throw new import_request_error.RequestError("Not modified", status, {
+ response: {
+ url,
+ status,
+ headers,
+ data: await getResponseData(response)
+ },
+ request: requestOptions
+ });
+ if (status >= 400) {
+ const data = await getResponseData(response);
+ throw new import_request_error.RequestError(toErrorMessage(data), status, {
+ response: {
+ url,
+ status,
+ headers,
+ data
+ },
+ request: requestOptions
+ });
+ }
+ return parseSuccessResponseBody ? await getResponseData(response) : response.body;
+ }).then((data) => {
+ return {
+ status,
+ url,
+ headers,
+ data
+ };
+ }).catch((error) => {
+ if (error instanceof import_request_error.RequestError) throw error;
+ else if (error.name === "AbortError") throw error;
+ let message = error.message;
+ if (error.name === "TypeError" && "cause" in error) {
+ if (error.cause instanceof Error) message = error.cause.message;
+ else if (typeof error.cause === "string") message = error.cause;
+ }
+ throw new import_request_error.RequestError(message, 500, { request: requestOptions });
+ });
+ }
+ async function getResponseData(response) {
+ const contentType = response.headers.get("content-type");
+ if (/application\/json/.test(contentType)) return response.json().catch(() => response.text()).catch(() => "");
+ if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) return response.text();
+ return getBufferResponse(response);
+ }
+ function toErrorMessage(data) {
+ if (typeof data === "string") return data;
+ let suffix;
+ if ("documentation_url" in data) suffix = ` - ${data.documentation_url}`;
+ else suffix = "";
+ if ("message" in data) {
+ if (Array.isArray(data.errors)) return `${data.message}: ${data.errors.map(JSON.stringify).join(", ")}${suffix}`;
+ return `${data.message}${suffix}`;
+ }
+ return `Unknown error: ${JSON.stringify(data)}`;
+ }
+ function withDefaults(oldEndpoint, newDefaults) {
+ const endpoint2 = oldEndpoint.defaults(newDefaults);
+ const newApi = function(route, parameters) {
+ const endpointOptions = endpoint2.merge(route, parameters);
+ if (!endpointOptions.request || !endpointOptions.request.hook) return fetchWrapper(endpoint2.parse(endpointOptions));
+ const request2 = (route2, parameters2) => {
+ return fetchWrapper(endpoint2.parse(endpoint2.merge(route2, parameters2)));
+ };
+ Object.assign(request2, {
+ endpoint: endpoint2,
+ defaults: withDefaults.bind(null, endpoint2)
+ });
+ return endpointOptions.request.hook(request2, endpointOptions);
+ };
+ return Object.assign(newApi, {
+ endpoint: endpoint2,
+ defaults: withDefaults.bind(null, endpoint2)
+ });
+ }
+ var request = withDefaults(import_endpoint.endpoint, { headers: { "user-agent": `octokit-request.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}` } });
+}));
+//#endregion
+//#region node_modules/.pnpm/@octokit+graphql@7.1.1/node_modules/@octokit/graphql/dist-node/index.js
+var require_dist_node$4 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ var __defProp = Object.defineProperty;
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+ var __getOwnPropNames = Object.getOwnPropertyNames;
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
+ var __export = (target, all) => {
+ for (var name in all) __defProp(target, name, {
+ get: all[name],
+ enumerable: true
+ });
+ };
+ 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 __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+ var index_exports = {};
+ __export(index_exports, {
+ GraphqlResponseError: () => GraphqlResponseError,
+ graphql: () => graphql2,
+ withCustomRequest: () => withCustomRequest
+ });
+ module.exports = __toCommonJS(index_exports);
+ var import_request3 = require_dist_node$5();
+ var import_universal_user_agent = require_dist_node$9();
+ var VERSION = "7.1.1";
+ require_dist_node$5();
+ require_dist_node$5();
+ function _buildMessageForResponseErrors(data) {
+ return `Request failed due to following response errors:
+` + data.errors.map((e) => ` - ${e.message}`).join("\n");
+ }
+ var GraphqlResponseError = class extends Error {
+ constructor(request2, headers, response) {
+ super(_buildMessageForResponseErrors(response));
+ this.request = request2;
+ this.headers = headers;
+ this.response = response;
+ this.name = "GraphqlResponseError";
+ this.errors = response.errors;
+ this.data = response.data;
+ if (Error.captureStackTrace) Error.captureStackTrace(this, this.constructor);
+ }
+ };
+ var NON_VARIABLE_OPTIONS = [
+ "method",
+ "baseUrl",
+ "url",
+ "headers",
+ "request",
+ "query",
+ "mediaType"
+ ];
+ var FORBIDDEN_VARIABLE_OPTIONS = [
+ "query",
+ "method",
+ "url"
+ ];
+ var GHES_V3_SUFFIX_REGEX = /\/api\/v3\/?$/;
+ function graphql(request2, query, options) {
+ if (options) {
+ if (typeof query === "string" && "query" in options) return Promise.reject(/* @__PURE__ */ new Error(`[@octokit/graphql] "query" cannot be used as variable name`));
+ for (const key in options) {
+ if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) continue;
+ return Promise.reject(/* @__PURE__ */ new Error(`[@octokit/graphql] "${key}" cannot be used as variable name`));
+ }
+ }
+ const parsedOptions = typeof query === "string" ? Object.assign({ query }, options) : query;
+ const requestOptions = Object.keys(parsedOptions).reduce((result, key) => {
+ if (NON_VARIABLE_OPTIONS.includes(key)) {
+ result[key] = parsedOptions[key];
+ return result;
+ }
+ if (!result.variables) result.variables = {};
+ result.variables[key] = parsedOptions[key];
+ return result;
+ }, {});
+ const baseUrl = parsedOptions.baseUrl || request2.endpoint.DEFAULTS.baseUrl;
+ if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, "/api/graphql");
+ return request2(requestOptions).then((response) => {
+ if (response.data.errors) {
+ const headers = {};
+ for (const key of Object.keys(response.headers)) headers[key] = response.headers[key];
+ throw new GraphqlResponseError(requestOptions, headers, response.data);
+ }
+ return response.data.data;
+ });
+ }
+ function withDefaults(request2, newDefaults) {
+ const newRequest = request2.defaults(newDefaults);
+ const newApi = (query, options) => {
+ return graphql(newRequest, query, options);
+ };
+ return Object.assign(newApi, {
+ defaults: withDefaults.bind(null, newRequest),
+ endpoint: newRequest.endpoint
+ });
+ }
+ var graphql2 = withDefaults(import_request3.request, {
+ headers: { "user-agent": `octokit-graphql.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}` },
+ method: "POST",
+ url: "/graphql"
+ });
+ function withCustomRequest(customRequest) {
+ return withDefaults(customRequest, {
+ method: "POST",
+ url: "/graphql"
+ });
+ }
+}));
+//#endregion
+//#region node_modules/.pnpm/@octokit+auth-token@4.0.0/node_modules/@octokit/auth-token/dist-node/index.js
+var require_dist_node$3 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ var __defProp = Object.defineProperty;
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+ var __getOwnPropNames = Object.getOwnPropertyNames;
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
+ var __export = (target, all) => {
+ for (var name in all) __defProp(target, name, {
+ get: all[name],
+ enumerable: true
+ });
+ };
+ 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 __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+ var dist_src_exports = {};
+ __export(dist_src_exports, { createTokenAuth: () => createTokenAuth });
+ module.exports = __toCommonJS(dist_src_exports);
+ var REGEX_IS_INSTALLATION_LEGACY = /^v1\./;
+ var REGEX_IS_INSTALLATION = /^ghs_/;
+ var REGEX_IS_USER_TO_SERVER = /^ghu_/;
+ async function auth(token) {
+ const isApp = token.split(/\./).length === 3;
+ const isInstallation = REGEX_IS_INSTALLATION_LEGACY.test(token) || REGEX_IS_INSTALLATION.test(token);
+ const isUserToServer = REGEX_IS_USER_TO_SERVER.test(token);
+ return {
+ type: "token",
+ token,
+ tokenType: isApp ? "app" : isInstallation ? "installation" : isUserToServer ? "user-to-server" : "oauth"
+ };
+ }
+ function withAuthorizationPrefix(token) {
+ if (token.split(/\./).length === 3) return `bearer ${token}`;
+ return `token ${token}`;
+ }
+ async function hook(token, request, route, parameters) {
+ const endpoint = request.endpoint.merge(route, parameters);
+ endpoint.headers.authorization = withAuthorizationPrefix(token);
+ return request(endpoint);
+ }
+ var createTokenAuth = function createTokenAuth2(token) {
+ if (!token) throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");
+ if (typeof token !== "string") throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");
+ token = token.replace(/^(token|bearer) +/i, "");
+ return Object.assign(auth.bind(null, token), { hook: hook.bind(null, token) });
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/@octokit+core@5.2.2/node_modules/@octokit/core/dist-node/index.js
+var require_dist_node$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ var __defProp = Object.defineProperty;
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+ var __getOwnPropNames = Object.getOwnPropertyNames;
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
+ var __export = (target, all) => {
+ for (var name in all) __defProp(target, name, {
+ get: all[name],
+ enumerable: true
+ });
+ };
+ 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 __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+ var index_exports = {};
+ __export(index_exports, { Octokit: () => Octokit });
+ module.exports = __toCommonJS(index_exports);
+ var import_universal_user_agent = require_dist_node$9();
+ var import_before_after_hook = require_before_after_hook();
+ var import_request = require_dist_node$5();
+ var import_graphql = require_dist_node$4();
+ var import_auth_token = require_dist_node$3();
+ var VERSION = "5.2.2";
+ var noop = () => {};
+ var consoleWarn = console.warn.bind(console);
+ var consoleError = console.error.bind(console);
+ function createLogger(logger = {}) {
+ if (typeof logger.debug !== "function") logger.debug = noop;
+ if (typeof logger.info !== "function") logger.info = noop;
+ if (typeof logger.warn !== "function") logger.warn = consoleWarn;
+ if (typeof logger.error !== "function") logger.error = consoleError;
+ return logger;
+ }
+ var userAgentTrail = `octokit-core.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}`;
+ var Octokit = class {
+ static {
+ this.VERSION = VERSION;
+ }
+ static defaults(defaults) {
+ const OctokitWithDefaults = class extends this {
+ constructor(...args) {
+ const options = args[0] || {};
+ if (typeof defaults === "function") {
+ super(defaults(options));
+ return;
+ }
+ super(Object.assign({}, defaults, options, options.userAgent && defaults.userAgent ? { userAgent: `${options.userAgent} ${defaults.userAgent}` } : null));
+ }
+ };
+ return OctokitWithDefaults;
+ }
+ static {
+ this.plugins = [];
+ }
+ /**
+ * Attach a plugin (or many) to your Octokit instance.
+ *
+ * @example
+ * const API = Octokit.plugin(plugin1, plugin2, plugin3, ...)
+ */
+ static plugin(...newPlugins) {
+ const currentPlugins = this.plugins;
+ const NewOctokit = class extends this {
+ static {
+ this.plugins = currentPlugins.concat(newPlugins.filter((plugin) => !currentPlugins.includes(plugin)));
+ }
+ };
+ return NewOctokit;
+ }
+ constructor(options = {}) {
+ const hook = new import_before_after_hook.Collection();
+ const requestDefaults = {
+ baseUrl: import_request.request.endpoint.DEFAULTS.baseUrl,
+ headers: {},
+ request: Object.assign({}, options.request, { hook: hook.bind(null, "request") }),
+ mediaType: {
+ previews: [],
+ format: ""
+ }
+ };
+ requestDefaults.headers["user-agent"] = options.userAgent ? `${options.userAgent} ${userAgentTrail}` : userAgentTrail;
+ if (options.baseUrl) requestDefaults.baseUrl = options.baseUrl;
+ if (options.previews) requestDefaults.mediaType.previews = options.previews;
+ if (options.timeZone) requestDefaults.headers["time-zone"] = options.timeZone;
+ this.request = import_request.request.defaults(requestDefaults);
+ this.graphql = (0, import_graphql.withCustomRequest)(this.request).defaults(requestDefaults);
+ this.log = createLogger(options.log);
+ this.hook = hook;
+ if (!options.authStrategy) if (!options.auth) this.auth = async () => ({ type: "unauthenticated" });
+ else {
+ const auth = (0, import_auth_token.createTokenAuth)(options.auth);
+ hook.wrap("request", auth.hook);
+ this.auth = auth;
+ }
+ else {
+ const { authStrategy, ...otherOptions } = options;
+ const auth = authStrategy(Object.assign({
+ request: this.request,
+ log: this.log,
+ octokit: this,
+ octokitOptions: otherOptions
+ }, options.auth));
+ hook.wrap("request", auth.hook);
+ this.auth = auth;
+ }
+ const classConstructor = this.constructor;
+ for (let i = 0; i < classConstructor.plugins.length; ++i) Object.assign(this, classConstructor.plugins[i](this, options));
+ }
+ };
+}));
+//#endregion
+//#region node_modules/.pnpm/@octokit+plugin-rest-endpoint-methods@10.4.1_@octokit+core@5.2.2/node_modules/@octokit/plugin-rest-endpoint-methods/dist-node/index.js
+var require_dist_node$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ var __defProp = Object.defineProperty;
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+ var __getOwnPropNames = Object.getOwnPropertyNames;
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
+ var __export = (target, all) => {
+ for (var name in all) __defProp(target, name, {
+ get: all[name],
+ enumerable: true
+ });
+ };
+ 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 __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+ var dist_src_exports = {};
+ __export(dist_src_exports, {
+ legacyRestEndpointMethods: () => legacyRestEndpointMethods,
+ restEndpointMethods: () => restEndpointMethods
+ });
+ module.exports = __toCommonJS(dist_src_exports);
+ var VERSION = "10.4.1";
+ var endpoints_default = {
+ actions: {
+ addCustomLabelsToSelfHostedRunnerForOrg: ["POST /orgs/{org}/actions/runners/{runner_id}/labels"],
+ addCustomLabelsToSelfHostedRunnerForRepo: ["POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],
+ addSelectedRepoToOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"],
+ addSelectedRepoToOrgVariable: ["PUT /orgs/{org}/actions/variables/{name}/repositories/{repository_id}"],
+ approveWorkflowRun: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve"],
+ cancelWorkflowRun: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel"],
+ createEnvironmentVariable: ["POST /repositories/{repository_id}/environments/{environment_name}/variables"],
+ createOrUpdateEnvironmentSecret: ["PUT /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"],
+ createOrUpdateOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}"],
+ createOrUpdateRepoSecret: ["PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}"],
+ createOrgVariable: ["POST /orgs/{org}/actions/variables"],
+ createRegistrationTokenForOrg: ["POST /orgs/{org}/actions/runners/registration-token"],
+ createRegistrationTokenForRepo: ["POST /repos/{owner}/{repo}/actions/runners/registration-token"],
+ createRemoveTokenForOrg: ["POST /orgs/{org}/actions/runners/remove-token"],
+ createRemoveTokenForRepo: ["POST /repos/{owner}/{repo}/actions/runners/remove-token"],
+ createRepoVariable: ["POST /repos/{owner}/{repo}/actions/variables"],
+ createWorkflowDispatch: ["POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches"],
+ deleteActionsCacheById: ["DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}"],
+ deleteActionsCacheByKey: ["DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}"],
+ deleteArtifact: ["DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"],
+ deleteEnvironmentSecret: ["DELETE /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"],
+ deleteEnvironmentVariable: ["DELETE /repositories/{repository_id}/environments/{environment_name}/variables/{name}"],
+ deleteOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}"],
+ deleteOrgVariable: ["DELETE /orgs/{org}/actions/variables/{name}"],
+ deleteRepoSecret: ["DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}"],
+ deleteRepoVariable: ["DELETE /repos/{owner}/{repo}/actions/variables/{name}"],
+ deleteSelfHostedRunnerFromOrg: ["DELETE /orgs/{org}/actions/runners/{runner_id}"],
+ deleteSelfHostedRunnerFromRepo: ["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}"],
+ deleteWorkflowRun: ["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}"],
+ deleteWorkflowRunLogs: ["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs"],
+ disableSelectedRepositoryGithubActionsOrganization: ["DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}"],
+ disableWorkflow: ["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable"],
+ downloadArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}"],
+ downloadJobLogsForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs"],
+ downloadWorkflowRunAttemptLogs: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs"],
+ downloadWorkflowRunLogs: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs"],
+ enableSelectedRepositoryGithubActionsOrganization: ["PUT /orgs/{org}/actions/permissions/repositories/{repository_id}"],
+ enableWorkflow: ["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable"],
+ forceCancelWorkflowRun: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/force-cancel"],
+ generateRunnerJitconfigForOrg: ["POST /orgs/{org}/actions/runners/generate-jitconfig"],
+ generateRunnerJitconfigForRepo: ["POST /repos/{owner}/{repo}/actions/runners/generate-jitconfig"],
+ getActionsCacheList: ["GET /repos/{owner}/{repo}/actions/caches"],
+ getActionsCacheUsage: ["GET /repos/{owner}/{repo}/actions/cache/usage"],
+ getActionsCacheUsageByRepoForOrg: ["GET /orgs/{org}/actions/cache/usage-by-repository"],
+ getActionsCacheUsageForOrg: ["GET /orgs/{org}/actions/cache/usage"],
+ getAllowedActionsOrganization: ["GET /orgs/{org}/actions/permissions/selected-actions"],
+ getAllowedActionsRepository: ["GET /repos/{owner}/{repo}/actions/permissions/selected-actions"],
+ getArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"],
+ getCustomOidcSubClaimForRepo: ["GET /repos/{owner}/{repo}/actions/oidc/customization/sub"],
+ getEnvironmentPublicKey: ["GET /repositories/{repository_id}/environments/{environment_name}/secrets/public-key"],
+ getEnvironmentSecret: ["GET /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"],
+ getEnvironmentVariable: ["GET /repositories/{repository_id}/environments/{environment_name}/variables/{name}"],
+ getGithubActionsDefaultWorkflowPermissionsOrganization: ["GET /orgs/{org}/actions/permissions/workflow"],
+ getGithubActionsDefaultWorkflowPermissionsRepository: ["GET /repos/{owner}/{repo}/actions/permissions/workflow"],
+ getGithubActionsPermissionsOrganization: ["GET /orgs/{org}/actions/permissions"],
+ getGithubActionsPermissionsRepository: ["GET /repos/{owner}/{repo}/actions/permissions"],
+ getJobForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}"],
+ getOrgPublicKey: ["GET /orgs/{org}/actions/secrets/public-key"],
+ getOrgSecret: ["GET /orgs/{org}/actions/secrets/{secret_name}"],
+ getOrgVariable: ["GET /orgs/{org}/actions/variables/{name}"],
+ getPendingDeploymentsForRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"],
+ getRepoPermissions: [
+ "GET /repos/{owner}/{repo}/actions/permissions",
+ {},
+ { renamed: ["actions", "getGithubActionsPermissionsRepository"] }
+ ],
+ getRepoPublicKey: ["GET /repos/{owner}/{repo}/actions/secrets/public-key"],
+ getRepoSecret: ["GET /repos/{owner}/{repo}/actions/secrets/{secret_name}"],
+ getRepoVariable: ["GET /repos/{owner}/{repo}/actions/variables/{name}"],
+ getReviewsForRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals"],
+ getSelfHostedRunnerForOrg: ["GET /orgs/{org}/actions/runners/{runner_id}"],
+ getSelfHostedRunnerForRepo: ["GET /repos/{owner}/{repo}/actions/runners/{runner_id}"],
+ getWorkflow: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}"],
+ getWorkflowAccessToRepository: ["GET /repos/{owner}/{repo}/actions/permissions/access"],
+ getWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}"],
+ getWorkflowRunAttempt: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}"],
+ getWorkflowRunUsage: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing"],
+ getWorkflowUsage: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing"],
+ listArtifactsForRepo: ["GET /repos/{owner}/{repo}/actions/artifacts"],
+ listEnvironmentSecrets: ["GET /repositories/{repository_id}/environments/{environment_name}/secrets"],
+ listEnvironmentVariables: ["GET /repositories/{repository_id}/environments/{environment_name}/variables"],
+ listJobsForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs"],
+ listJobsForWorkflowRunAttempt: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs"],
+ listLabelsForSelfHostedRunnerForOrg: ["GET /orgs/{org}/actions/runners/{runner_id}/labels"],
+ listLabelsForSelfHostedRunnerForRepo: ["GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],
+ listOrgSecrets: ["GET /orgs/{org}/actions/secrets"],
+ listOrgVariables: ["GET /orgs/{org}/actions/variables"],
+ listRepoOrganizationSecrets: ["GET /repos/{owner}/{repo}/actions/organization-secrets"],
+ listRepoOrganizationVariables: ["GET /repos/{owner}/{repo}/actions/organization-variables"],
+ listRepoSecrets: ["GET /repos/{owner}/{repo}/actions/secrets"],
+ listRepoVariables: ["GET /repos/{owner}/{repo}/actions/variables"],
+ listRepoWorkflows: ["GET /repos/{owner}/{repo}/actions/workflows"],
+ listRunnerApplicationsForOrg: ["GET /orgs/{org}/actions/runners/downloads"],
+ listRunnerApplicationsForRepo: ["GET /repos/{owner}/{repo}/actions/runners/downloads"],
+ listSelectedReposForOrgSecret: ["GET /orgs/{org}/actions/secrets/{secret_name}/repositories"],
+ listSelectedReposForOrgVariable: ["GET /orgs/{org}/actions/variables/{name}/repositories"],
+ listSelectedRepositoriesEnabledGithubActionsOrganization: ["GET /orgs/{org}/actions/permissions/repositories"],
+ listSelfHostedRunnersForOrg: ["GET /orgs/{org}/actions/runners"],
+ listSelfHostedRunnersForRepo: ["GET /repos/{owner}/{repo}/actions/runners"],
+ listWorkflowRunArtifacts: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts"],
+ listWorkflowRuns: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs"],
+ listWorkflowRunsForRepo: ["GET /repos/{owner}/{repo}/actions/runs"],
+ reRunJobForWorkflowRun: ["POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun"],
+ reRunWorkflow: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun"],
+ reRunWorkflowFailedJobs: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs"],
+ removeAllCustomLabelsFromSelfHostedRunnerForOrg: ["DELETE /orgs/{org}/actions/runners/{runner_id}/labels"],
+ removeAllCustomLabelsFromSelfHostedRunnerForRepo: ["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],
+ removeCustomLabelFromSelfHostedRunnerForOrg: ["DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}"],
+ removeCustomLabelFromSelfHostedRunnerForRepo: ["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}"],
+ removeSelectedRepoFromOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"],
+ removeSelectedRepoFromOrgVariable: ["DELETE /orgs/{org}/actions/variables/{name}/repositories/{repository_id}"],
+ reviewCustomGatesForRun: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule"],
+ reviewPendingDeploymentsForRun: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"],
+ setAllowedActionsOrganization: ["PUT /orgs/{org}/actions/permissions/selected-actions"],
+ setAllowedActionsRepository: ["PUT /repos/{owner}/{repo}/actions/permissions/selected-actions"],
+ setCustomLabelsForSelfHostedRunnerForOrg: ["PUT /orgs/{org}/actions/runners/{runner_id}/labels"],
+ setCustomLabelsForSelfHostedRunnerForRepo: ["PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],
+ setCustomOidcSubClaimForRepo: ["PUT /repos/{owner}/{repo}/actions/oidc/customization/sub"],
+ setGithubActionsDefaultWorkflowPermissionsOrganization: ["PUT /orgs/{org}/actions/permissions/workflow"],
+ setGithubActionsDefaultWorkflowPermissionsRepository: ["PUT /repos/{owner}/{repo}/actions/permissions/workflow"],
+ setGithubActionsPermissionsOrganization: ["PUT /orgs/{org}/actions/permissions"],
+ setGithubActionsPermissionsRepository: ["PUT /repos/{owner}/{repo}/actions/permissions"],
+ setSelectedReposForOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories"],
+ setSelectedReposForOrgVariable: ["PUT /orgs/{org}/actions/variables/{name}/repositories"],
+ setSelectedRepositoriesEnabledGithubActionsOrganization: ["PUT /orgs/{org}/actions/permissions/repositories"],
+ setWorkflowAccessToRepository: ["PUT /repos/{owner}/{repo}/actions/permissions/access"],
+ updateEnvironmentVariable: ["PATCH /repositories/{repository_id}/environments/{environment_name}/variables/{name}"],
+ updateOrgVariable: ["PATCH /orgs/{org}/actions/variables/{name}"],
+ updateRepoVariable: ["PATCH /repos/{owner}/{repo}/actions/variables/{name}"]
+ },
+ activity: {
+ checkRepoIsStarredByAuthenticatedUser: ["GET /user/starred/{owner}/{repo}"],
+ deleteRepoSubscription: ["DELETE /repos/{owner}/{repo}/subscription"],
+ deleteThreadSubscription: ["DELETE /notifications/threads/{thread_id}/subscription"],
+ getFeeds: ["GET /feeds"],
+ getRepoSubscription: ["GET /repos/{owner}/{repo}/subscription"],
+ getThread: ["GET /notifications/threads/{thread_id}"],
+ getThreadSubscriptionForAuthenticatedUser: ["GET /notifications/threads/{thread_id}/subscription"],
+ listEventsForAuthenticatedUser: ["GET /users/{username}/events"],
+ listNotificationsForAuthenticatedUser: ["GET /notifications"],
+ listOrgEventsForAuthenticatedUser: ["GET /users/{username}/events/orgs/{org}"],
+ listPublicEvents: ["GET /events"],
+ listPublicEventsForRepoNetwork: ["GET /networks/{owner}/{repo}/events"],
+ listPublicEventsForUser: ["GET /users/{username}/events/public"],
+ listPublicOrgEvents: ["GET /orgs/{org}/events"],
+ listReceivedEventsForUser: ["GET /users/{username}/received_events"],
+ listReceivedPublicEventsForUser: ["GET /users/{username}/received_events/public"],
+ listRepoEvents: ["GET /repos/{owner}/{repo}/events"],
+ listRepoNotificationsForAuthenticatedUser: ["GET /repos/{owner}/{repo}/notifications"],
+ listReposStarredByAuthenticatedUser: ["GET /user/starred"],
+ listReposStarredByUser: ["GET /users/{username}/starred"],
+ listReposWatchedByUser: ["GET /users/{username}/subscriptions"],
+ listStargazersForRepo: ["GET /repos/{owner}/{repo}/stargazers"],
+ listWatchedReposForAuthenticatedUser: ["GET /user/subscriptions"],
+ listWatchersForRepo: ["GET /repos/{owner}/{repo}/subscribers"],
+ markNotificationsAsRead: ["PUT /notifications"],
+ markRepoNotificationsAsRead: ["PUT /repos/{owner}/{repo}/notifications"],
+ markThreadAsDone: ["DELETE /notifications/threads/{thread_id}"],
+ markThreadAsRead: ["PATCH /notifications/threads/{thread_id}"],
+ setRepoSubscription: ["PUT /repos/{owner}/{repo}/subscription"],
+ setThreadSubscription: ["PUT /notifications/threads/{thread_id}/subscription"],
+ starRepoForAuthenticatedUser: ["PUT /user/starred/{owner}/{repo}"],
+ unstarRepoForAuthenticatedUser: ["DELETE /user/starred/{owner}/{repo}"]
+ },
+ apps: {
+ addRepoToInstallation: [
+ "PUT /user/installations/{installation_id}/repositories/{repository_id}",
+ {},
+ { renamed: ["apps", "addRepoToInstallationForAuthenticatedUser"] }
+ ],
+ addRepoToInstallationForAuthenticatedUser: ["PUT /user/installations/{installation_id}/repositories/{repository_id}"],
+ checkToken: ["POST /applications/{client_id}/token"],
+ createFromManifest: ["POST /app-manifests/{code}/conversions"],
+ createInstallationAccessToken: ["POST /app/installations/{installation_id}/access_tokens"],
+ deleteAuthorization: ["DELETE /applications/{client_id}/grant"],
+ deleteInstallation: ["DELETE /app/installations/{installation_id}"],
+ deleteToken: ["DELETE /applications/{client_id}/token"],
+ getAuthenticated: ["GET /app"],
+ getBySlug: ["GET /apps/{app_slug}"],
+ getInstallation: ["GET /app/installations/{installation_id}"],
+ getOrgInstallation: ["GET /orgs/{org}/installation"],
+ getRepoInstallation: ["GET /repos/{owner}/{repo}/installation"],
+ getSubscriptionPlanForAccount: ["GET /marketplace_listing/accounts/{account_id}"],
+ getSubscriptionPlanForAccountStubbed: ["GET /marketplace_listing/stubbed/accounts/{account_id}"],
+ getUserInstallation: ["GET /users/{username}/installation"],
+ getWebhookConfigForApp: ["GET /app/hook/config"],
+ getWebhookDelivery: ["GET /app/hook/deliveries/{delivery_id}"],
+ listAccountsForPlan: ["GET /marketplace_listing/plans/{plan_id}/accounts"],
+ listAccountsForPlanStubbed: ["GET /marketplace_listing/stubbed/plans/{plan_id}/accounts"],
+ listInstallationReposForAuthenticatedUser: ["GET /user/installations/{installation_id}/repositories"],
+ listInstallationRequestsForAuthenticatedApp: ["GET /app/installation-requests"],
+ listInstallations: ["GET /app/installations"],
+ listInstallationsForAuthenticatedUser: ["GET /user/installations"],
+ listPlans: ["GET /marketplace_listing/plans"],
+ listPlansStubbed: ["GET /marketplace_listing/stubbed/plans"],
+ listReposAccessibleToInstallation: ["GET /installation/repositories"],
+ listSubscriptionsForAuthenticatedUser: ["GET /user/marketplace_purchases"],
+ listSubscriptionsForAuthenticatedUserStubbed: ["GET /user/marketplace_purchases/stubbed"],
+ listWebhookDeliveries: ["GET /app/hook/deliveries"],
+ redeliverWebhookDelivery: ["POST /app/hook/deliveries/{delivery_id}/attempts"],
+ removeRepoFromInstallation: [
+ "DELETE /user/installations/{installation_id}/repositories/{repository_id}",
+ {},
+ { renamed: ["apps", "removeRepoFromInstallationForAuthenticatedUser"] }
+ ],
+ removeRepoFromInstallationForAuthenticatedUser: ["DELETE /user/installations/{installation_id}/repositories/{repository_id}"],
+ resetToken: ["PATCH /applications/{client_id}/token"],
+ revokeInstallationAccessToken: ["DELETE /installation/token"],
+ scopeToken: ["POST /applications/{client_id}/token/scoped"],
+ suspendInstallation: ["PUT /app/installations/{installation_id}/suspended"],
+ unsuspendInstallation: ["DELETE /app/installations/{installation_id}/suspended"],
+ updateWebhookConfigForApp: ["PATCH /app/hook/config"]
+ },
+ billing: {
+ getGithubActionsBillingOrg: ["GET /orgs/{org}/settings/billing/actions"],
+ getGithubActionsBillingUser: ["GET /users/{username}/settings/billing/actions"],
+ getGithubPackagesBillingOrg: ["GET /orgs/{org}/settings/billing/packages"],
+ getGithubPackagesBillingUser: ["GET /users/{username}/settings/billing/packages"],
+ getSharedStorageBillingOrg: ["GET /orgs/{org}/settings/billing/shared-storage"],
+ getSharedStorageBillingUser: ["GET /users/{username}/settings/billing/shared-storage"]
+ },
+ checks: {
+ create: ["POST /repos/{owner}/{repo}/check-runs"],
+ createSuite: ["POST /repos/{owner}/{repo}/check-suites"],
+ get: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}"],
+ getSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}"],
+ listAnnotations: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations"],
+ listForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-runs"],
+ listForSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs"],
+ listSuitesForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-suites"],
+ rerequestRun: ["POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest"],
+ rerequestSuite: ["POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest"],
+ setSuitesPreferences: ["PATCH /repos/{owner}/{repo}/check-suites/preferences"],
+ update: ["PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}"]
+ },
+ codeScanning: {
+ deleteAnalysis: ["DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}"],
+ getAlert: [
+ "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}",
+ {},
+ { renamedParameters: { alert_id: "alert_number" } }
+ ],
+ getAnalysis: ["GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}"],
+ getCodeqlDatabase: ["GET /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}"],
+ getDefaultSetup: ["GET /repos/{owner}/{repo}/code-scanning/default-setup"],
+ getSarif: ["GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}"],
+ listAlertInstances: ["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances"],
+ listAlertsForOrg: ["GET /orgs/{org}/code-scanning/alerts"],
+ listAlertsForRepo: ["GET /repos/{owner}/{repo}/code-scanning/alerts"],
+ listAlertsInstances: [
+ "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances",
+ {},
+ { renamed: ["codeScanning", "listAlertInstances"] }
+ ],
+ listCodeqlDatabases: ["GET /repos/{owner}/{repo}/code-scanning/codeql/databases"],
+ listRecentAnalyses: ["GET /repos/{owner}/{repo}/code-scanning/analyses"],
+ updateAlert: ["PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}"],
+ updateDefaultSetup: ["PATCH /repos/{owner}/{repo}/code-scanning/default-setup"],
+ uploadSarif: ["POST /repos/{owner}/{repo}/code-scanning/sarifs"]
+ },
+ codesOfConduct: {
+ getAllCodesOfConduct: ["GET /codes_of_conduct"],
+ getConductCode: ["GET /codes_of_conduct/{key}"]
+ },
+ codespaces: {
+ addRepositoryForSecretForAuthenticatedUser: ["PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"],
+ addSelectedRepoToOrgSecret: ["PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}"],
+ checkPermissionsForDevcontainer: ["GET /repos/{owner}/{repo}/codespaces/permissions_check"],
+ codespaceMachinesForAuthenticatedUser: ["GET /user/codespaces/{codespace_name}/machines"],
+ createForAuthenticatedUser: ["POST /user/codespaces"],
+ createOrUpdateOrgSecret: ["PUT /orgs/{org}/codespaces/secrets/{secret_name}"],
+ createOrUpdateRepoSecret: ["PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"],
+ createOrUpdateSecretForAuthenticatedUser: ["PUT /user/codespaces/secrets/{secret_name}"],
+ createWithPrForAuthenticatedUser: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces"],
+ createWithRepoForAuthenticatedUser: ["POST /repos/{owner}/{repo}/codespaces"],
+ deleteForAuthenticatedUser: ["DELETE /user/codespaces/{codespace_name}"],
+ deleteFromOrganization: ["DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}"],
+ deleteOrgSecret: ["DELETE /orgs/{org}/codespaces/secrets/{secret_name}"],
+ deleteRepoSecret: ["DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"],
+ deleteSecretForAuthenticatedUser: ["DELETE /user/codespaces/secrets/{secret_name}"],
+ exportForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/exports"],
+ getCodespacesForUserInOrg: ["GET /orgs/{org}/members/{username}/codespaces"],
+ getExportDetailsForAuthenticatedUser: ["GET /user/codespaces/{codespace_name}/exports/{export_id}"],
+ getForAuthenticatedUser: ["GET /user/codespaces/{codespace_name}"],
+ getOrgPublicKey: ["GET /orgs/{org}/codespaces/secrets/public-key"],
+ getOrgSecret: ["GET /orgs/{org}/codespaces/secrets/{secret_name}"],
+ getPublicKeyForAuthenticatedUser: ["GET /user/codespaces/secrets/public-key"],
+ getRepoPublicKey: ["GET /repos/{owner}/{repo}/codespaces/secrets/public-key"],
+ getRepoSecret: ["GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"],
+ getSecretForAuthenticatedUser: ["GET /user/codespaces/secrets/{secret_name}"],
+ listDevcontainersInRepositoryForAuthenticatedUser: ["GET /repos/{owner}/{repo}/codespaces/devcontainers"],
+ listForAuthenticatedUser: ["GET /user/codespaces"],
+ listInOrganization: [
+ "GET /orgs/{org}/codespaces",
+ {},
+ { renamedParameters: { org_id: "org" } }
+ ],
+ listInRepositoryForAuthenticatedUser: ["GET /repos/{owner}/{repo}/codespaces"],
+ listOrgSecrets: ["GET /orgs/{org}/codespaces/secrets"],
+ listRepoSecrets: ["GET /repos/{owner}/{repo}/codespaces/secrets"],
+ listRepositoriesForSecretForAuthenticatedUser: ["GET /user/codespaces/secrets/{secret_name}/repositories"],
+ listSecretsForAuthenticatedUser: ["GET /user/codespaces/secrets"],
+ listSelectedReposForOrgSecret: ["GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories"],
+ preFlightWithRepoForAuthenticatedUser: ["GET /repos/{owner}/{repo}/codespaces/new"],
+ publishForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/publish"],
+ removeRepositoryForSecretForAuthenticatedUser: ["DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"],
+ removeSelectedRepoFromOrgSecret: ["DELETE /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}"],
+ repoMachinesForAuthenticatedUser: ["GET /repos/{owner}/{repo}/codespaces/machines"],
+ setRepositoriesForSecretForAuthenticatedUser: ["PUT /user/codespaces/secrets/{secret_name}/repositories"],
+ setSelectedReposForOrgSecret: ["PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories"],
+ startForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/start"],
+ stopForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/stop"],
+ stopInOrganization: ["POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop"],
+ updateForAuthenticatedUser: ["PATCH /user/codespaces/{codespace_name}"]
+ },
+ copilot: {
+ addCopilotSeatsForTeams: ["POST /orgs/{org}/copilot/billing/selected_teams"],
+ addCopilotSeatsForUsers: ["POST /orgs/{org}/copilot/billing/selected_users"],
+ cancelCopilotSeatAssignmentForTeams: ["DELETE /orgs/{org}/copilot/billing/selected_teams"],
+ cancelCopilotSeatAssignmentForUsers: ["DELETE /orgs/{org}/copilot/billing/selected_users"],
+ getCopilotOrganizationDetails: ["GET /orgs/{org}/copilot/billing"],
+ getCopilotSeatDetailsForUser: ["GET /orgs/{org}/members/{username}/copilot"],
+ listCopilotSeats: ["GET /orgs/{org}/copilot/billing/seats"]
+ },
+ dependabot: {
+ addSelectedRepoToOrgSecret: ["PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"],
+ createOrUpdateOrgSecret: ["PUT /orgs/{org}/dependabot/secrets/{secret_name}"],
+ createOrUpdateRepoSecret: ["PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"],
+ deleteOrgSecret: ["DELETE /orgs/{org}/dependabot/secrets/{secret_name}"],
+ deleteRepoSecret: ["DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"],
+ getAlert: ["GET /repos/{owner}/{repo}/dependabot/alerts/{alert_number}"],
+ getOrgPublicKey: ["GET /orgs/{org}/dependabot/secrets/public-key"],
+ getOrgSecret: ["GET /orgs/{org}/dependabot/secrets/{secret_name}"],
+ getRepoPublicKey: ["GET /repos/{owner}/{repo}/dependabot/secrets/public-key"],
+ getRepoSecret: ["GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"],
+ listAlertsForEnterprise: ["GET /enterprises/{enterprise}/dependabot/alerts"],
+ listAlertsForOrg: ["GET /orgs/{org}/dependabot/alerts"],
+ listAlertsForRepo: ["GET /repos/{owner}/{repo}/dependabot/alerts"],
+ listOrgSecrets: ["GET /orgs/{org}/dependabot/secrets"],
+ listRepoSecrets: ["GET /repos/{owner}/{repo}/dependabot/secrets"],
+ listSelectedReposForOrgSecret: ["GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories"],
+ removeSelectedRepoFromOrgSecret: ["DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"],
+ setSelectedReposForOrgSecret: ["PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories"],
+ updateAlert: ["PATCH /repos/{owner}/{repo}/dependabot/alerts/{alert_number}"]
+ },
+ dependencyGraph: {
+ createRepositorySnapshot: ["POST /repos/{owner}/{repo}/dependency-graph/snapshots"],
+ diffRange: ["GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}"],
+ exportSbom: ["GET /repos/{owner}/{repo}/dependency-graph/sbom"]
+ },
+ emojis: { get: ["GET /emojis"] },
+ gists: {
+ checkIsStarred: ["GET /gists/{gist_id}/star"],
+ create: ["POST /gists"],
+ createComment: ["POST /gists/{gist_id}/comments"],
+ delete: ["DELETE /gists/{gist_id}"],
+ deleteComment: ["DELETE /gists/{gist_id}/comments/{comment_id}"],
+ fork: ["POST /gists/{gist_id}/forks"],
+ get: ["GET /gists/{gist_id}"],
+ getComment: ["GET /gists/{gist_id}/comments/{comment_id}"],
+ getRevision: ["GET /gists/{gist_id}/{sha}"],
+ list: ["GET /gists"],
+ listComments: ["GET /gists/{gist_id}/comments"],
+ listCommits: ["GET /gists/{gist_id}/commits"],
+ listForUser: ["GET /users/{username}/gists"],
+ listForks: ["GET /gists/{gist_id}/forks"],
+ listPublic: ["GET /gists/public"],
+ listStarred: ["GET /gists/starred"],
+ star: ["PUT /gists/{gist_id}/star"],
+ unstar: ["DELETE /gists/{gist_id}/star"],
+ update: ["PATCH /gists/{gist_id}"],
+ updateComment: ["PATCH /gists/{gist_id}/comments/{comment_id}"]
+ },
+ git: {
+ createBlob: ["POST /repos/{owner}/{repo}/git/blobs"],
+ createCommit: ["POST /repos/{owner}/{repo}/git/commits"],
+ createRef: ["POST /repos/{owner}/{repo}/git/refs"],
+ createTag: ["POST /repos/{owner}/{repo}/git/tags"],
+ createTree: ["POST /repos/{owner}/{repo}/git/trees"],
+ deleteRef: ["DELETE /repos/{owner}/{repo}/git/refs/{ref}"],
+ getBlob: ["GET /repos/{owner}/{repo}/git/blobs/{file_sha}"],
+ getCommit: ["GET /repos/{owner}/{repo}/git/commits/{commit_sha}"],
+ getRef: ["GET /repos/{owner}/{repo}/git/ref/{ref}"],
+ getTag: ["GET /repos/{owner}/{repo}/git/tags/{tag_sha}"],
+ getTree: ["GET /repos/{owner}/{repo}/git/trees/{tree_sha}"],
+ listMatchingRefs: ["GET /repos/{owner}/{repo}/git/matching-refs/{ref}"],
+ updateRef: ["PATCH /repos/{owner}/{repo}/git/refs/{ref}"]
+ },
+ gitignore: {
+ getAllTemplates: ["GET /gitignore/templates"],
+ getTemplate: ["GET /gitignore/templates/{name}"]
+ },
+ interactions: {
+ getRestrictionsForAuthenticatedUser: ["GET /user/interaction-limits"],
+ getRestrictionsForOrg: ["GET /orgs/{org}/interaction-limits"],
+ getRestrictionsForRepo: ["GET /repos/{owner}/{repo}/interaction-limits"],
+ getRestrictionsForYourPublicRepos: [
+ "GET /user/interaction-limits",
+ {},
+ { renamed: ["interactions", "getRestrictionsForAuthenticatedUser"] }
+ ],
+ removeRestrictionsForAuthenticatedUser: ["DELETE /user/interaction-limits"],
+ removeRestrictionsForOrg: ["DELETE /orgs/{org}/interaction-limits"],
+ removeRestrictionsForRepo: ["DELETE /repos/{owner}/{repo}/interaction-limits"],
+ removeRestrictionsForYourPublicRepos: [
+ "DELETE /user/interaction-limits",
+ {},
+ { renamed: ["interactions", "removeRestrictionsForAuthenticatedUser"] }
+ ],
+ setRestrictionsForAuthenticatedUser: ["PUT /user/interaction-limits"],
+ setRestrictionsForOrg: ["PUT /orgs/{org}/interaction-limits"],
+ setRestrictionsForRepo: ["PUT /repos/{owner}/{repo}/interaction-limits"],
+ setRestrictionsForYourPublicRepos: [
+ "PUT /user/interaction-limits",
+ {},
+ { renamed: ["interactions", "setRestrictionsForAuthenticatedUser"] }
+ ]
+ },
+ issues: {
+ addAssignees: ["POST /repos/{owner}/{repo}/issues/{issue_number}/assignees"],
+ addLabels: ["POST /repos/{owner}/{repo}/issues/{issue_number}/labels"],
+ checkUserCanBeAssigned: ["GET /repos/{owner}/{repo}/assignees/{assignee}"],
+ checkUserCanBeAssignedToIssue: ["GET /repos/{owner}/{repo}/issues/{issue_number}/assignees/{assignee}"],
+ create: ["POST /repos/{owner}/{repo}/issues"],
+ createComment: ["POST /repos/{owner}/{repo}/issues/{issue_number}/comments"],
+ createLabel: ["POST /repos/{owner}/{repo}/labels"],
+ createMilestone: ["POST /repos/{owner}/{repo}/milestones"],
+ deleteComment: ["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}"],
+ deleteLabel: ["DELETE /repos/{owner}/{repo}/labels/{name}"],
+ deleteMilestone: ["DELETE /repos/{owner}/{repo}/milestones/{milestone_number}"],
+ get: ["GET /repos/{owner}/{repo}/issues/{issue_number}"],
+ getComment: ["GET /repos/{owner}/{repo}/issues/comments/{comment_id}"],
+ getEvent: ["GET /repos/{owner}/{repo}/issues/events/{event_id}"],
+ getLabel: ["GET /repos/{owner}/{repo}/labels/{name}"],
+ getMilestone: ["GET /repos/{owner}/{repo}/milestones/{milestone_number}"],
+ list: ["GET /issues"],
+ listAssignees: ["GET /repos/{owner}/{repo}/assignees"],
+ listComments: ["GET /repos/{owner}/{repo}/issues/{issue_number}/comments"],
+ listCommentsForRepo: ["GET /repos/{owner}/{repo}/issues/comments"],
+ listEvents: ["GET /repos/{owner}/{repo}/issues/{issue_number}/events"],
+ listEventsForRepo: ["GET /repos/{owner}/{repo}/issues/events"],
+ listEventsForTimeline: ["GET /repos/{owner}/{repo}/issues/{issue_number}/timeline"],
+ listForAuthenticatedUser: ["GET /user/issues"],
+ listForOrg: ["GET /orgs/{org}/issues"],
+ listForRepo: ["GET /repos/{owner}/{repo}/issues"],
+ listLabelsForMilestone: ["GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels"],
+ listLabelsForRepo: ["GET /repos/{owner}/{repo}/labels"],
+ listLabelsOnIssue: ["GET /repos/{owner}/{repo}/issues/{issue_number}/labels"],
+ listMilestones: ["GET /repos/{owner}/{repo}/milestones"],
+ lock: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/lock"],
+ removeAllLabels: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels"],
+ removeAssignees: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees"],
+ removeLabel: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}"],
+ setLabels: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels"],
+ unlock: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock"],
+ update: ["PATCH /repos/{owner}/{repo}/issues/{issue_number}"],
+ updateComment: ["PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}"],
+ updateLabel: ["PATCH /repos/{owner}/{repo}/labels/{name}"],
+ updateMilestone: ["PATCH /repos/{owner}/{repo}/milestones/{milestone_number}"]
+ },
+ licenses: {
+ get: ["GET /licenses/{license}"],
+ getAllCommonlyUsed: ["GET /licenses"],
+ getForRepo: ["GET /repos/{owner}/{repo}/license"]
+ },
+ markdown: {
+ render: ["POST /markdown"],
+ renderRaw: ["POST /markdown/raw", { headers: { "content-type": "text/plain; charset=utf-8" } }]
+ },
+ meta: {
+ get: ["GET /meta"],
+ getAllVersions: ["GET /versions"],
+ getOctocat: ["GET /octocat"],
+ getZen: ["GET /zen"],
+ root: ["GET /"]
+ },
+ migrations: {
+ cancelImport: [
+ "DELETE /repos/{owner}/{repo}/import",
+ {},
+ { deprecated: "octokit.rest.migrations.cancelImport() is deprecated, see https://docs.github.com/rest/migrations/source-imports#cancel-an-import" }
+ ],
+ deleteArchiveForAuthenticatedUser: ["DELETE /user/migrations/{migration_id}/archive"],
+ deleteArchiveForOrg: ["DELETE /orgs/{org}/migrations/{migration_id}/archive"],
+ downloadArchiveForOrg: ["GET /orgs/{org}/migrations/{migration_id}/archive"],
+ getArchiveForAuthenticatedUser: ["GET /user/migrations/{migration_id}/archive"],
+ getCommitAuthors: [
+ "GET /repos/{owner}/{repo}/import/authors",
+ {},
+ { deprecated: "octokit.rest.migrations.getCommitAuthors() is deprecated, see https://docs.github.com/rest/migrations/source-imports#get-commit-authors" }
+ ],
+ getImportStatus: [
+ "GET /repos/{owner}/{repo}/import",
+ {},
+ { deprecated: "octokit.rest.migrations.getImportStatus() is deprecated, see https://docs.github.com/rest/migrations/source-imports#get-an-import-status" }
+ ],
+ getLargeFiles: [
+ "GET /repos/{owner}/{repo}/import/large_files",
+ {},
+ { deprecated: "octokit.rest.migrations.getLargeFiles() is deprecated, see https://docs.github.com/rest/migrations/source-imports#get-large-files" }
+ ],
+ getStatusForAuthenticatedUser: ["GET /user/migrations/{migration_id}"],
+ getStatusForOrg: ["GET /orgs/{org}/migrations/{migration_id}"],
+ listForAuthenticatedUser: ["GET /user/migrations"],
+ listForOrg: ["GET /orgs/{org}/migrations"],
+ listReposForAuthenticatedUser: ["GET /user/migrations/{migration_id}/repositories"],
+ listReposForOrg: ["GET /orgs/{org}/migrations/{migration_id}/repositories"],
+ listReposForUser: [
+ "GET /user/migrations/{migration_id}/repositories",
+ {},
+ { renamed: ["migrations", "listReposForAuthenticatedUser"] }
+ ],
+ mapCommitAuthor: [
+ "PATCH /repos/{owner}/{repo}/import/authors/{author_id}",
+ {},
+ { deprecated: "octokit.rest.migrations.mapCommitAuthor() is deprecated, see https://docs.github.com/rest/migrations/source-imports#map-a-commit-author" }
+ ],
+ setLfsPreference: [
+ "PATCH /repos/{owner}/{repo}/import/lfs",
+ {},
+ { deprecated: "octokit.rest.migrations.setLfsPreference() is deprecated, see https://docs.github.com/rest/migrations/source-imports#update-git-lfs-preference" }
+ ],
+ startForAuthenticatedUser: ["POST /user/migrations"],
+ startForOrg: ["POST /orgs/{org}/migrations"],
+ startImport: [
+ "PUT /repos/{owner}/{repo}/import",
+ {},
+ { deprecated: "octokit.rest.migrations.startImport() is deprecated, see https://docs.github.com/rest/migrations/source-imports#start-an-import" }
+ ],
+ unlockRepoForAuthenticatedUser: ["DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock"],
+ unlockRepoForOrg: ["DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock"],
+ updateImport: [
+ "PATCH /repos/{owner}/{repo}/import",
+ {},
+ { deprecated: "octokit.rest.migrations.updateImport() is deprecated, see https://docs.github.com/rest/migrations/source-imports#update-an-import" }
+ ]
+ },
+ oidc: {
+ getOidcCustomSubTemplateForOrg: ["GET /orgs/{org}/actions/oidc/customization/sub"],
+ updateOidcCustomSubTemplateForOrg: ["PUT /orgs/{org}/actions/oidc/customization/sub"]
+ },
+ orgs: {
+ addSecurityManagerTeam: ["PUT /orgs/{org}/security-managers/teams/{team_slug}"],
+ assignTeamToOrgRole: ["PUT /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}"],
+ assignUserToOrgRole: ["PUT /orgs/{org}/organization-roles/users/{username}/{role_id}"],
+ blockUser: ["PUT /orgs/{org}/blocks/{username}"],
+ cancelInvitation: ["DELETE /orgs/{org}/invitations/{invitation_id}"],
+ checkBlockedUser: ["GET /orgs/{org}/blocks/{username}"],
+ checkMembershipForUser: ["GET /orgs/{org}/members/{username}"],
+ checkPublicMembershipForUser: ["GET /orgs/{org}/public_members/{username}"],
+ convertMemberToOutsideCollaborator: ["PUT /orgs/{org}/outside_collaborators/{username}"],
+ createCustomOrganizationRole: ["POST /orgs/{org}/organization-roles"],
+ createInvitation: ["POST /orgs/{org}/invitations"],
+ createOrUpdateCustomProperties: ["PATCH /orgs/{org}/properties/schema"],
+ createOrUpdateCustomPropertiesValuesForRepos: ["PATCH /orgs/{org}/properties/values"],
+ createOrUpdateCustomProperty: ["PUT /orgs/{org}/properties/schema/{custom_property_name}"],
+ createWebhook: ["POST /orgs/{org}/hooks"],
+ delete: ["DELETE /orgs/{org}"],
+ deleteCustomOrganizationRole: ["DELETE /orgs/{org}/organization-roles/{role_id}"],
+ deleteWebhook: ["DELETE /orgs/{org}/hooks/{hook_id}"],
+ enableOrDisableSecurityProductOnAllOrgRepos: ["POST /orgs/{org}/{security_product}/{enablement}"],
+ get: ["GET /orgs/{org}"],
+ getAllCustomProperties: ["GET /orgs/{org}/properties/schema"],
+ getCustomProperty: ["GET /orgs/{org}/properties/schema/{custom_property_name}"],
+ getMembershipForAuthenticatedUser: ["GET /user/memberships/orgs/{org}"],
+ getMembershipForUser: ["GET /orgs/{org}/memberships/{username}"],
+ getOrgRole: ["GET /orgs/{org}/organization-roles/{role_id}"],
+ getWebhook: ["GET /orgs/{org}/hooks/{hook_id}"],
+ getWebhookConfigForOrg: ["GET /orgs/{org}/hooks/{hook_id}/config"],
+ getWebhookDelivery: ["GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}"],
+ list: ["GET /organizations"],
+ listAppInstallations: ["GET /orgs/{org}/installations"],
+ listBlockedUsers: ["GET /orgs/{org}/blocks"],
+ listCustomPropertiesValuesForRepos: ["GET /orgs/{org}/properties/values"],
+ listFailedInvitations: ["GET /orgs/{org}/failed_invitations"],
+ listForAuthenticatedUser: ["GET /user/orgs"],
+ listForUser: ["GET /users/{username}/orgs"],
+ listInvitationTeams: ["GET /orgs/{org}/invitations/{invitation_id}/teams"],
+ listMembers: ["GET /orgs/{org}/members"],
+ listMembershipsForAuthenticatedUser: ["GET /user/memberships/orgs"],
+ listOrgRoleTeams: ["GET /orgs/{org}/organization-roles/{role_id}/teams"],
+ listOrgRoleUsers: ["GET /orgs/{org}/organization-roles/{role_id}/users"],
+ listOrgRoles: ["GET /orgs/{org}/organization-roles"],
+ listOrganizationFineGrainedPermissions: ["GET /orgs/{org}/organization-fine-grained-permissions"],
+ listOutsideCollaborators: ["GET /orgs/{org}/outside_collaborators"],
+ listPatGrantRepositories: ["GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories"],
+ listPatGrantRequestRepositories: ["GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories"],
+ listPatGrantRequests: ["GET /orgs/{org}/personal-access-token-requests"],
+ listPatGrants: ["GET /orgs/{org}/personal-access-tokens"],
+ listPendingInvitations: ["GET /orgs/{org}/invitations"],
+ listPublicMembers: ["GET /orgs/{org}/public_members"],
+ listSecurityManagerTeams: ["GET /orgs/{org}/security-managers"],
+ listWebhookDeliveries: ["GET /orgs/{org}/hooks/{hook_id}/deliveries"],
+ listWebhooks: ["GET /orgs/{org}/hooks"],
+ patchCustomOrganizationRole: ["PATCH /orgs/{org}/organization-roles/{role_id}"],
+ pingWebhook: ["POST /orgs/{org}/hooks/{hook_id}/pings"],
+ redeliverWebhookDelivery: ["POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"],
+ removeCustomProperty: ["DELETE /orgs/{org}/properties/schema/{custom_property_name}"],
+ removeMember: ["DELETE /orgs/{org}/members/{username}"],
+ removeMembershipForUser: ["DELETE /orgs/{org}/memberships/{username}"],
+ removeOutsideCollaborator: ["DELETE /orgs/{org}/outside_collaborators/{username}"],
+ removePublicMembershipForAuthenticatedUser: ["DELETE /orgs/{org}/public_members/{username}"],
+ removeSecurityManagerTeam: ["DELETE /orgs/{org}/security-managers/teams/{team_slug}"],
+ reviewPatGrantRequest: ["POST /orgs/{org}/personal-access-token-requests/{pat_request_id}"],
+ reviewPatGrantRequestsInBulk: ["POST /orgs/{org}/personal-access-token-requests"],
+ revokeAllOrgRolesTeam: ["DELETE /orgs/{org}/organization-roles/teams/{team_slug}"],
+ revokeAllOrgRolesUser: ["DELETE /orgs/{org}/organization-roles/users/{username}"],
+ revokeOrgRoleTeam: ["DELETE /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}"],
+ revokeOrgRoleUser: ["DELETE /orgs/{org}/organization-roles/users/{username}/{role_id}"],
+ setMembershipForUser: ["PUT /orgs/{org}/memberships/{username}"],
+ setPublicMembershipForAuthenticatedUser: ["PUT /orgs/{org}/public_members/{username}"],
+ unblockUser: ["DELETE /orgs/{org}/blocks/{username}"],
+ update: ["PATCH /orgs/{org}"],
+ updateMembershipForAuthenticatedUser: ["PATCH /user/memberships/orgs/{org}"],
+ updatePatAccess: ["POST /orgs/{org}/personal-access-tokens/{pat_id}"],
+ updatePatAccesses: ["POST /orgs/{org}/personal-access-tokens"],
+ updateWebhook: ["PATCH /orgs/{org}/hooks/{hook_id}"],
+ updateWebhookConfigForOrg: ["PATCH /orgs/{org}/hooks/{hook_id}/config"]
+ },
+ packages: {
+ deletePackageForAuthenticatedUser: ["DELETE /user/packages/{package_type}/{package_name}"],
+ deletePackageForOrg: ["DELETE /orgs/{org}/packages/{package_type}/{package_name}"],
+ deletePackageForUser: ["DELETE /users/{username}/packages/{package_type}/{package_name}"],
+ deletePackageVersionForAuthenticatedUser: ["DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}"],
+ deletePackageVersionForOrg: ["DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"],
+ deletePackageVersionForUser: ["DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"],
+ getAllPackageVersionsForAPackageOwnedByAnOrg: [
+ "GET /orgs/{org}/packages/{package_type}/{package_name}/versions",
+ {},
+ { renamed: ["packages", "getAllPackageVersionsForPackageOwnedByOrg"] }
+ ],
+ getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser: [
+ "GET /user/packages/{package_type}/{package_name}/versions",
+ {},
+ { renamed: ["packages", "getAllPackageVersionsForPackageOwnedByAuthenticatedUser"] }
+ ],
+ getAllPackageVersionsForPackageOwnedByAuthenticatedUser: ["GET /user/packages/{package_type}/{package_name}/versions"],
+ getAllPackageVersionsForPackageOwnedByOrg: ["GET /orgs/{org}/packages/{package_type}/{package_name}/versions"],
+ getAllPackageVersionsForPackageOwnedByUser: ["GET /users/{username}/packages/{package_type}/{package_name}/versions"],
+ getPackageForAuthenticatedUser: ["GET /user/packages/{package_type}/{package_name}"],
+ getPackageForOrganization: ["GET /orgs/{org}/packages/{package_type}/{package_name}"],
+ getPackageForUser: ["GET /users/{username}/packages/{package_type}/{package_name}"],
+ getPackageVersionForAuthenticatedUser: ["GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}"],
+ getPackageVersionForOrganization: ["GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"],
+ getPackageVersionForUser: ["GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"],
+ listDockerMigrationConflictingPackagesForAuthenticatedUser: ["GET /user/docker/conflicts"],
+ listDockerMigrationConflictingPackagesForOrganization: ["GET /orgs/{org}/docker/conflicts"],
+ listDockerMigrationConflictingPackagesForUser: ["GET /users/{username}/docker/conflicts"],
+ listPackagesForAuthenticatedUser: ["GET /user/packages"],
+ listPackagesForOrganization: ["GET /orgs/{org}/packages"],
+ listPackagesForUser: ["GET /users/{username}/packages"],
+ restorePackageForAuthenticatedUser: ["POST /user/packages/{package_type}/{package_name}/restore{?token}"],
+ restorePackageForOrg: ["POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}"],
+ restorePackageForUser: ["POST /users/{username}/packages/{package_type}/{package_name}/restore{?token}"],
+ restorePackageVersionForAuthenticatedUser: ["POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"],
+ restorePackageVersionForOrg: ["POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"],
+ restorePackageVersionForUser: ["POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"]
+ },
+ projects: {
+ addCollaborator: ["PUT /projects/{project_id}/collaborators/{username}"],
+ createCard: ["POST /projects/columns/{column_id}/cards"],
+ createColumn: ["POST /projects/{project_id}/columns"],
+ createForAuthenticatedUser: ["POST /user/projects"],
+ createForOrg: ["POST /orgs/{org}/projects"],
+ createForRepo: ["POST /repos/{owner}/{repo}/projects"],
+ delete: ["DELETE /projects/{project_id}"],
+ deleteCard: ["DELETE /projects/columns/cards/{card_id}"],
+ deleteColumn: ["DELETE /projects/columns/{column_id}"],
+ get: ["GET /projects/{project_id}"],
+ getCard: ["GET /projects/columns/cards/{card_id}"],
+ getColumn: ["GET /projects/columns/{column_id}"],
+ getPermissionForUser: ["GET /projects/{project_id}/collaborators/{username}/permission"],
+ listCards: ["GET /projects/columns/{column_id}/cards"],
+ listCollaborators: ["GET /projects/{project_id}/collaborators"],
+ listColumns: ["GET /projects/{project_id}/columns"],
+ listForOrg: ["GET /orgs/{org}/projects"],
+ listForRepo: ["GET /repos/{owner}/{repo}/projects"],
+ listForUser: ["GET /users/{username}/projects"],
+ moveCard: ["POST /projects/columns/cards/{card_id}/moves"],
+ moveColumn: ["POST /projects/columns/{column_id}/moves"],
+ removeCollaborator: ["DELETE /projects/{project_id}/collaborators/{username}"],
+ update: ["PATCH /projects/{project_id}"],
+ updateCard: ["PATCH /projects/columns/cards/{card_id}"],
+ updateColumn: ["PATCH /projects/columns/{column_id}"]
+ },
+ pulls: {
+ checkIfMerged: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/merge"],
+ create: ["POST /repos/{owner}/{repo}/pulls"],
+ createReplyForReviewComment: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies"],
+ createReview: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],
+ createReviewComment: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments"],
+ deletePendingReview: ["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],
+ deleteReviewComment: ["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}"],
+ dismissReview: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals"],
+ get: ["GET /repos/{owner}/{repo}/pulls/{pull_number}"],
+ getReview: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],
+ getReviewComment: ["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}"],
+ list: ["GET /repos/{owner}/{repo}/pulls"],
+ listCommentsForReview: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments"],
+ listCommits: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/commits"],
+ listFiles: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/files"],
+ listRequestedReviewers: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],
+ listReviewComments: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/comments"],
+ listReviewCommentsForRepo: ["GET /repos/{owner}/{repo}/pulls/comments"],
+ listReviews: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],
+ merge: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge"],
+ removeRequestedReviewers: ["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],
+ requestReviewers: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],
+ submitReview: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events"],
+ update: ["PATCH /repos/{owner}/{repo}/pulls/{pull_number}"],
+ updateBranch: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch"],
+ updateReview: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],
+ updateReviewComment: ["PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}"]
+ },
+ rateLimit: { get: ["GET /rate_limit"] },
+ reactions: {
+ createForCommitComment: ["POST /repos/{owner}/{repo}/comments/{comment_id}/reactions"],
+ createForIssue: ["POST /repos/{owner}/{repo}/issues/{issue_number}/reactions"],
+ createForIssueComment: ["POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"],
+ createForPullRequestReviewComment: ["POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"],
+ createForRelease: ["POST /repos/{owner}/{repo}/releases/{release_id}/reactions"],
+ createForTeamDiscussionCommentInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"],
+ createForTeamDiscussionInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"],
+ deleteForCommitComment: ["DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}"],
+ deleteForIssue: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}"],
+ deleteForIssueComment: ["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}"],
+ deleteForPullRequestComment: ["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}"],
+ deleteForRelease: ["DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}"],
+ deleteForTeamDiscussion: ["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}"],
+ deleteForTeamDiscussionComment: ["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}"],
+ listForCommitComment: ["GET /repos/{owner}/{repo}/comments/{comment_id}/reactions"],
+ listForIssue: ["GET /repos/{owner}/{repo}/issues/{issue_number}/reactions"],
+ listForIssueComment: ["GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"],
+ listForPullRequestReviewComment: ["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"],
+ listForRelease: ["GET /repos/{owner}/{repo}/releases/{release_id}/reactions"],
+ listForTeamDiscussionCommentInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"],
+ listForTeamDiscussionInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"]
+ },
+ repos: {
+ acceptInvitation: [
+ "PATCH /user/repository_invitations/{invitation_id}",
+ {},
+ { renamed: ["repos", "acceptInvitationForAuthenticatedUser"] }
+ ],
+ acceptInvitationForAuthenticatedUser: ["PATCH /user/repository_invitations/{invitation_id}"],
+ addAppAccessRestrictions: [
+ "POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",
+ {},
+ { mapToData: "apps" }
+ ],
+ addCollaborator: ["PUT /repos/{owner}/{repo}/collaborators/{username}"],
+ addStatusCheckContexts: [
+ "POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",
+ {},
+ { mapToData: "contexts" }
+ ],
+ addTeamAccessRestrictions: [
+ "POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",
+ {},
+ { mapToData: "teams" }
+ ],
+ addUserAccessRestrictions: [
+ "POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",
+ {},
+ { mapToData: "users" }
+ ],
+ cancelPagesDeployment: ["POST /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}/cancel"],
+ checkAutomatedSecurityFixes: ["GET /repos/{owner}/{repo}/automated-security-fixes"],
+ checkCollaborator: ["GET /repos/{owner}/{repo}/collaborators/{username}"],
+ checkVulnerabilityAlerts: ["GET /repos/{owner}/{repo}/vulnerability-alerts"],
+ codeownersErrors: ["GET /repos/{owner}/{repo}/codeowners/errors"],
+ compareCommits: ["GET /repos/{owner}/{repo}/compare/{base}...{head}"],
+ compareCommitsWithBasehead: ["GET /repos/{owner}/{repo}/compare/{basehead}"],
+ createAutolink: ["POST /repos/{owner}/{repo}/autolinks"],
+ createCommitComment: ["POST /repos/{owner}/{repo}/commits/{commit_sha}/comments"],
+ createCommitSignatureProtection: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"],
+ createCommitStatus: ["POST /repos/{owner}/{repo}/statuses/{sha}"],
+ createDeployKey: ["POST /repos/{owner}/{repo}/keys"],
+ createDeployment: ["POST /repos/{owner}/{repo}/deployments"],
+ createDeploymentBranchPolicy: ["POST /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies"],
+ createDeploymentProtectionRule: ["POST /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules"],
+ createDeploymentStatus: ["POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"],
+ createDispatchEvent: ["POST /repos/{owner}/{repo}/dispatches"],
+ createForAuthenticatedUser: ["POST /user/repos"],
+ createFork: ["POST /repos/{owner}/{repo}/forks"],
+ createInOrg: ["POST /orgs/{org}/repos"],
+ createOrUpdateCustomPropertiesValues: ["PATCH /repos/{owner}/{repo}/properties/values"],
+ createOrUpdateEnvironment: ["PUT /repos/{owner}/{repo}/environments/{environment_name}"],
+ createOrUpdateFileContents: ["PUT /repos/{owner}/{repo}/contents/{path}"],
+ createOrgRuleset: ["POST /orgs/{org}/rulesets"],
+ createPagesDeployment: ["POST /repos/{owner}/{repo}/pages/deployments"],
+ createPagesSite: ["POST /repos/{owner}/{repo}/pages"],
+ createRelease: ["POST /repos/{owner}/{repo}/releases"],
+ createRepoRuleset: ["POST /repos/{owner}/{repo}/rulesets"],
+ createTagProtection: ["POST /repos/{owner}/{repo}/tags/protection"],
+ createUsingTemplate: ["POST /repos/{template_owner}/{template_repo}/generate"],
+ createWebhook: ["POST /repos/{owner}/{repo}/hooks"],
+ declineInvitation: [
+ "DELETE /user/repository_invitations/{invitation_id}",
+ {},
+ { renamed: ["repos", "declineInvitationForAuthenticatedUser"] }
+ ],
+ declineInvitationForAuthenticatedUser: ["DELETE /user/repository_invitations/{invitation_id}"],
+ delete: ["DELETE /repos/{owner}/{repo}"],
+ deleteAccessRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"],
+ deleteAdminBranchProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],
+ deleteAnEnvironment: ["DELETE /repos/{owner}/{repo}/environments/{environment_name}"],
+ deleteAutolink: ["DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}"],
+ deleteBranchProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection"],
+ deleteCommitComment: ["DELETE /repos/{owner}/{repo}/comments/{comment_id}"],
+ deleteCommitSignatureProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"],
+ deleteDeployKey: ["DELETE /repos/{owner}/{repo}/keys/{key_id}"],
+ deleteDeployment: ["DELETE /repos/{owner}/{repo}/deployments/{deployment_id}"],
+ deleteDeploymentBranchPolicy: ["DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}"],
+ deleteFile: ["DELETE /repos/{owner}/{repo}/contents/{path}"],
+ deleteInvitation: ["DELETE /repos/{owner}/{repo}/invitations/{invitation_id}"],
+ deleteOrgRuleset: ["DELETE /orgs/{org}/rulesets/{ruleset_id}"],
+ deletePagesSite: ["DELETE /repos/{owner}/{repo}/pages"],
+ deletePullRequestReviewProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],
+ deleteRelease: ["DELETE /repos/{owner}/{repo}/releases/{release_id}"],
+ deleteReleaseAsset: ["DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}"],
+ deleteRepoRuleset: ["DELETE /repos/{owner}/{repo}/rulesets/{ruleset_id}"],
+ deleteTagProtection: ["DELETE /repos/{owner}/{repo}/tags/protection/{tag_protection_id}"],
+ deleteWebhook: ["DELETE /repos/{owner}/{repo}/hooks/{hook_id}"],
+ disableAutomatedSecurityFixes: ["DELETE /repos/{owner}/{repo}/automated-security-fixes"],
+ disableDeploymentProtectionRule: ["DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}"],
+ disablePrivateVulnerabilityReporting: ["DELETE /repos/{owner}/{repo}/private-vulnerability-reporting"],
+ disableVulnerabilityAlerts: ["DELETE /repos/{owner}/{repo}/vulnerability-alerts"],
+ downloadArchive: [
+ "GET /repos/{owner}/{repo}/zipball/{ref}",
+ {},
+ { renamed: ["repos", "downloadZipballArchive"] }
+ ],
+ downloadTarballArchive: ["GET /repos/{owner}/{repo}/tarball/{ref}"],
+ downloadZipballArchive: ["GET /repos/{owner}/{repo}/zipball/{ref}"],
+ enableAutomatedSecurityFixes: ["PUT /repos/{owner}/{repo}/automated-security-fixes"],
+ enablePrivateVulnerabilityReporting: ["PUT /repos/{owner}/{repo}/private-vulnerability-reporting"],
+ enableVulnerabilityAlerts: ["PUT /repos/{owner}/{repo}/vulnerability-alerts"],
+ generateReleaseNotes: ["POST /repos/{owner}/{repo}/releases/generate-notes"],
+ get: ["GET /repos/{owner}/{repo}"],
+ getAccessRestrictions: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"],
+ getAdminBranchProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],
+ getAllDeploymentProtectionRules: ["GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules"],
+ getAllEnvironments: ["GET /repos/{owner}/{repo}/environments"],
+ getAllStatusCheckContexts: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts"],
+ getAllTopics: ["GET /repos/{owner}/{repo}/topics"],
+ getAppsWithAccessToProtectedBranch: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps"],
+ getAutolink: ["GET /repos/{owner}/{repo}/autolinks/{autolink_id}"],
+ getBranch: ["GET /repos/{owner}/{repo}/branches/{branch}"],
+ getBranchProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection"],
+ getBranchRules: ["GET /repos/{owner}/{repo}/rules/branches/{branch}"],
+ getClones: ["GET /repos/{owner}/{repo}/traffic/clones"],
+ getCodeFrequencyStats: ["GET /repos/{owner}/{repo}/stats/code_frequency"],
+ getCollaboratorPermissionLevel: ["GET /repos/{owner}/{repo}/collaborators/{username}/permission"],
+ getCombinedStatusForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/status"],
+ getCommit: ["GET /repos/{owner}/{repo}/commits/{ref}"],
+ getCommitActivityStats: ["GET /repos/{owner}/{repo}/stats/commit_activity"],
+ getCommitComment: ["GET /repos/{owner}/{repo}/comments/{comment_id}"],
+ getCommitSignatureProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"],
+ getCommunityProfileMetrics: ["GET /repos/{owner}/{repo}/community/profile"],
+ getContent: ["GET /repos/{owner}/{repo}/contents/{path}"],
+ getContributorsStats: ["GET /repos/{owner}/{repo}/stats/contributors"],
+ getCustomDeploymentProtectionRule: ["GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}"],
+ getCustomPropertiesValues: ["GET /repos/{owner}/{repo}/properties/values"],
+ getDeployKey: ["GET /repos/{owner}/{repo}/keys/{key_id}"],
+ getDeployment: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}"],
+ getDeploymentBranchPolicy: ["GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}"],
+ getDeploymentStatus: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}"],
+ getEnvironment: ["GET /repos/{owner}/{repo}/environments/{environment_name}"],
+ getLatestPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/latest"],
+ getLatestRelease: ["GET /repos/{owner}/{repo}/releases/latest"],
+ getOrgRuleSuite: ["GET /orgs/{org}/rulesets/rule-suites/{rule_suite_id}"],
+ getOrgRuleSuites: ["GET /orgs/{org}/rulesets/rule-suites"],
+ getOrgRuleset: ["GET /orgs/{org}/rulesets/{ruleset_id}"],
+ getOrgRulesets: ["GET /orgs/{org}/rulesets"],
+ getPages: ["GET /repos/{owner}/{repo}/pages"],
+ getPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/{build_id}"],
+ getPagesDeployment: ["GET /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}"],
+ getPagesHealthCheck: ["GET /repos/{owner}/{repo}/pages/health"],
+ getParticipationStats: ["GET /repos/{owner}/{repo}/stats/participation"],
+ getPullRequestReviewProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],
+ getPunchCardStats: ["GET /repos/{owner}/{repo}/stats/punch_card"],
+ getReadme: ["GET /repos/{owner}/{repo}/readme"],
+ getReadmeInDirectory: ["GET /repos/{owner}/{repo}/readme/{dir}"],
+ getRelease: ["GET /repos/{owner}/{repo}/releases/{release_id}"],
+ getReleaseAsset: ["GET /repos/{owner}/{repo}/releases/assets/{asset_id}"],
+ getReleaseByTag: ["GET /repos/{owner}/{repo}/releases/tags/{tag}"],
+ getRepoRuleSuite: ["GET /repos/{owner}/{repo}/rulesets/rule-suites/{rule_suite_id}"],
+ getRepoRuleSuites: ["GET /repos/{owner}/{repo}/rulesets/rule-suites"],
+ getRepoRuleset: ["GET /repos/{owner}/{repo}/rulesets/{ruleset_id}"],
+ getRepoRulesets: ["GET /repos/{owner}/{repo}/rulesets"],
+ getStatusChecksProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],
+ getTeamsWithAccessToProtectedBranch: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams"],
+ getTopPaths: ["GET /repos/{owner}/{repo}/traffic/popular/paths"],
+ getTopReferrers: ["GET /repos/{owner}/{repo}/traffic/popular/referrers"],
+ getUsersWithAccessToProtectedBranch: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users"],
+ getViews: ["GET /repos/{owner}/{repo}/traffic/views"],
+ getWebhook: ["GET /repos/{owner}/{repo}/hooks/{hook_id}"],
+ getWebhookConfigForRepo: ["GET /repos/{owner}/{repo}/hooks/{hook_id}/config"],
+ getWebhookDelivery: ["GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}"],
+ listActivities: ["GET /repos/{owner}/{repo}/activity"],
+ listAutolinks: ["GET /repos/{owner}/{repo}/autolinks"],
+ listBranches: ["GET /repos/{owner}/{repo}/branches"],
+ listBranchesForHeadCommit: ["GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head"],
+ listCollaborators: ["GET /repos/{owner}/{repo}/collaborators"],
+ listCommentsForCommit: ["GET /repos/{owner}/{repo}/commits/{commit_sha}/comments"],
+ listCommitCommentsForRepo: ["GET /repos/{owner}/{repo}/comments"],
+ listCommitStatusesForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/statuses"],
+ listCommits: ["GET /repos/{owner}/{repo}/commits"],
+ listContributors: ["GET /repos/{owner}/{repo}/contributors"],
+ listCustomDeploymentRuleIntegrations: ["GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps"],
+ listDeployKeys: ["GET /repos/{owner}/{repo}/keys"],
+ listDeploymentBranchPolicies: ["GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies"],
+ listDeploymentStatuses: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"],
+ listDeployments: ["GET /repos/{owner}/{repo}/deployments"],
+ listForAuthenticatedUser: ["GET /user/repos"],
+ listForOrg: ["GET /orgs/{org}/repos"],
+ listForUser: ["GET /users/{username}/repos"],
+ listForks: ["GET /repos/{owner}/{repo}/forks"],
+ listInvitations: ["GET /repos/{owner}/{repo}/invitations"],
+ listInvitationsForAuthenticatedUser: ["GET /user/repository_invitations"],
+ listLanguages: ["GET /repos/{owner}/{repo}/languages"],
+ listPagesBuilds: ["GET /repos/{owner}/{repo}/pages/builds"],
+ listPublic: ["GET /repositories"],
+ listPullRequestsAssociatedWithCommit: ["GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls"],
+ listReleaseAssets: ["GET /repos/{owner}/{repo}/releases/{release_id}/assets"],
+ listReleases: ["GET /repos/{owner}/{repo}/releases"],
+ listTagProtection: ["GET /repos/{owner}/{repo}/tags/protection"],
+ listTags: ["GET /repos/{owner}/{repo}/tags"],
+ listTeams: ["GET /repos/{owner}/{repo}/teams"],
+ listWebhookDeliveries: ["GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries"],
+ listWebhooks: ["GET /repos/{owner}/{repo}/hooks"],
+ merge: ["POST /repos/{owner}/{repo}/merges"],
+ mergeUpstream: ["POST /repos/{owner}/{repo}/merge-upstream"],
+ pingWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/pings"],
+ redeliverWebhookDelivery: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"],
+ removeAppAccessRestrictions: [
+ "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",
+ {},
+ { mapToData: "apps" }
+ ],
+ removeCollaborator: ["DELETE /repos/{owner}/{repo}/collaborators/{username}"],
+ removeStatusCheckContexts: [
+ "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",
+ {},
+ { mapToData: "contexts" }
+ ],
+ removeStatusCheckProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],
+ removeTeamAccessRestrictions: [
+ "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",
+ {},
+ { mapToData: "teams" }
+ ],
+ removeUserAccessRestrictions: [
+ "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",
+ {},
+ { mapToData: "users" }
+ ],
+ renameBranch: ["POST /repos/{owner}/{repo}/branches/{branch}/rename"],
+ replaceAllTopics: ["PUT /repos/{owner}/{repo}/topics"],
+ requestPagesBuild: ["POST /repos/{owner}/{repo}/pages/builds"],
+ setAdminBranchProtection: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],
+ setAppAccessRestrictions: [
+ "PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",
+ {},
+ { mapToData: "apps" }
+ ],
+ setStatusCheckContexts: [
+ "PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",
+ {},
+ { mapToData: "contexts" }
+ ],
+ setTeamAccessRestrictions: [
+ "PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",
+ {},
+ { mapToData: "teams" }
+ ],
+ setUserAccessRestrictions: [
+ "PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",
+ {},
+ { mapToData: "users" }
+ ],
+ testPushWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/tests"],
+ transfer: ["POST /repos/{owner}/{repo}/transfer"],
+ update: ["PATCH /repos/{owner}/{repo}"],
+ updateBranchProtection: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection"],
+ updateCommitComment: ["PATCH /repos/{owner}/{repo}/comments/{comment_id}"],
+ updateDeploymentBranchPolicy: ["PUT /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}"],
+ updateInformationAboutPagesSite: ["PUT /repos/{owner}/{repo}/pages"],
+ updateInvitation: ["PATCH /repos/{owner}/{repo}/invitations/{invitation_id}"],
+ updateOrgRuleset: ["PUT /orgs/{org}/rulesets/{ruleset_id}"],
+ updatePullRequestReviewProtection: ["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],
+ updateRelease: ["PATCH /repos/{owner}/{repo}/releases/{release_id}"],
+ updateReleaseAsset: ["PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}"],
+ updateRepoRuleset: ["PUT /repos/{owner}/{repo}/rulesets/{ruleset_id}"],
+ updateStatusCheckPotection: [
+ "PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks",
+ {},
+ { renamed: ["repos", "updateStatusCheckProtection"] }
+ ],
+ updateStatusCheckProtection: ["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],
+ updateWebhook: ["PATCH /repos/{owner}/{repo}/hooks/{hook_id}"],
+ updateWebhookConfigForRepo: ["PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config"],
+ uploadReleaseAsset: ["POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}", { baseUrl: "https://uploads.github.com" }]
+ },
+ search: {
+ code: ["GET /search/code"],
+ commits: ["GET /search/commits"],
+ issuesAndPullRequests: ["GET /search/issues"],
+ labels: ["GET /search/labels"],
+ repos: ["GET /search/repositories"],
+ topics: ["GET /search/topics"],
+ users: ["GET /search/users"]
+ },
+ secretScanning: {
+ getAlert: ["GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"],
+ listAlertsForEnterprise: ["GET /enterprises/{enterprise}/secret-scanning/alerts"],
+ listAlertsForOrg: ["GET /orgs/{org}/secret-scanning/alerts"],
+ listAlertsForRepo: ["GET /repos/{owner}/{repo}/secret-scanning/alerts"],
+ listLocationsForAlert: ["GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations"],
+ updateAlert: ["PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"]
+ },
+ securityAdvisories: {
+ createFork: ["POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks"],
+ createPrivateVulnerabilityReport: ["POST /repos/{owner}/{repo}/security-advisories/reports"],
+ createRepositoryAdvisory: ["POST /repos/{owner}/{repo}/security-advisories"],
+ createRepositoryAdvisoryCveRequest: ["POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/cve"],
+ getGlobalAdvisory: ["GET /advisories/{ghsa_id}"],
+ getRepositoryAdvisory: ["GET /repos/{owner}/{repo}/security-advisories/{ghsa_id}"],
+ listGlobalAdvisories: ["GET /advisories"],
+ listOrgRepositoryAdvisories: ["GET /orgs/{org}/security-advisories"],
+ listRepositoryAdvisories: ["GET /repos/{owner}/{repo}/security-advisories"],
+ updateRepositoryAdvisory: ["PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id}"]
+ },
+ teams: {
+ addOrUpdateMembershipForUserInOrg: ["PUT /orgs/{org}/teams/{team_slug}/memberships/{username}"],
+ addOrUpdateProjectPermissionsInOrg: ["PUT /orgs/{org}/teams/{team_slug}/projects/{project_id}"],
+ addOrUpdateRepoPermissionsInOrg: ["PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],
+ checkPermissionsForProjectInOrg: ["GET /orgs/{org}/teams/{team_slug}/projects/{project_id}"],
+ checkPermissionsForRepoInOrg: ["GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],
+ create: ["POST /orgs/{org}/teams"],
+ createDiscussionCommentInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"],
+ createDiscussionInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions"],
+ deleteDiscussionCommentInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],
+ deleteDiscussionInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],
+ deleteInOrg: ["DELETE /orgs/{org}/teams/{team_slug}"],
+ getByName: ["GET /orgs/{org}/teams/{team_slug}"],
+ getDiscussionCommentInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],
+ getDiscussionInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],
+ getMembershipForUserInOrg: ["GET /orgs/{org}/teams/{team_slug}/memberships/{username}"],
+ list: ["GET /orgs/{org}/teams"],
+ listChildInOrg: ["GET /orgs/{org}/teams/{team_slug}/teams"],
+ listDiscussionCommentsInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"],
+ listDiscussionsInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions"],
+ listForAuthenticatedUser: ["GET /user/teams"],
+ listMembersInOrg: ["GET /orgs/{org}/teams/{team_slug}/members"],
+ listPendingInvitationsInOrg: ["GET /orgs/{org}/teams/{team_slug}/invitations"],
+ listProjectsInOrg: ["GET /orgs/{org}/teams/{team_slug}/projects"],
+ listReposInOrg: ["GET /orgs/{org}/teams/{team_slug}/repos"],
+ removeMembershipForUserInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}"],
+ removeProjectInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/projects/{project_id}"],
+ removeRepoInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],
+ updateDiscussionCommentInOrg: ["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],
+ updateDiscussionInOrg: ["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],
+ updateInOrg: ["PATCH /orgs/{org}/teams/{team_slug}"]
+ },
+ users: {
+ addEmailForAuthenticated: [
+ "POST /user/emails",
+ {},
+ { renamed: ["users", "addEmailForAuthenticatedUser"] }
+ ],
+ addEmailForAuthenticatedUser: ["POST /user/emails"],
+ addSocialAccountForAuthenticatedUser: ["POST /user/social_accounts"],
+ block: ["PUT /user/blocks/{username}"],
+ checkBlocked: ["GET /user/blocks/{username}"],
+ checkFollowingForUser: ["GET /users/{username}/following/{target_user}"],
+ checkPersonIsFollowedByAuthenticated: ["GET /user/following/{username}"],
+ createGpgKeyForAuthenticated: [
+ "POST /user/gpg_keys",
+ {},
+ { renamed: ["users", "createGpgKeyForAuthenticatedUser"] }
+ ],
+ createGpgKeyForAuthenticatedUser: ["POST /user/gpg_keys"],
+ createPublicSshKeyForAuthenticated: [
+ "POST /user/keys",
+ {},
+ { renamed: ["users", "createPublicSshKeyForAuthenticatedUser"] }
+ ],
+ createPublicSshKeyForAuthenticatedUser: ["POST /user/keys"],
+ createSshSigningKeyForAuthenticatedUser: ["POST /user/ssh_signing_keys"],
+ deleteEmailForAuthenticated: [
+ "DELETE /user/emails",
+ {},
+ { renamed: ["users", "deleteEmailForAuthenticatedUser"] }
+ ],
+ deleteEmailForAuthenticatedUser: ["DELETE /user/emails"],
+ deleteGpgKeyForAuthenticated: [
+ "DELETE /user/gpg_keys/{gpg_key_id}",
+ {},
+ { renamed: ["users", "deleteGpgKeyForAuthenticatedUser"] }
+ ],
+ deleteGpgKeyForAuthenticatedUser: ["DELETE /user/gpg_keys/{gpg_key_id}"],
+ deletePublicSshKeyForAuthenticated: [
+ "DELETE /user/keys/{key_id}",
+ {},
+ { renamed: ["users", "deletePublicSshKeyForAuthenticatedUser"] }
+ ],
+ deletePublicSshKeyForAuthenticatedUser: ["DELETE /user/keys/{key_id}"],
+ deleteSocialAccountForAuthenticatedUser: ["DELETE /user/social_accounts"],
+ deleteSshSigningKeyForAuthenticatedUser: ["DELETE /user/ssh_signing_keys/{ssh_signing_key_id}"],
+ follow: ["PUT /user/following/{username}"],
+ getAuthenticated: ["GET /user"],
+ getByUsername: ["GET /users/{username}"],
+ getContextForUser: ["GET /users/{username}/hovercard"],
+ getGpgKeyForAuthenticated: [
+ "GET /user/gpg_keys/{gpg_key_id}",
+ {},
+ { renamed: ["users", "getGpgKeyForAuthenticatedUser"] }
+ ],
+ getGpgKeyForAuthenticatedUser: ["GET /user/gpg_keys/{gpg_key_id}"],
+ getPublicSshKeyForAuthenticated: [
+ "GET /user/keys/{key_id}",
+ {},
+ { renamed: ["users", "getPublicSshKeyForAuthenticatedUser"] }
+ ],
+ getPublicSshKeyForAuthenticatedUser: ["GET /user/keys/{key_id}"],
+ getSshSigningKeyForAuthenticatedUser: ["GET /user/ssh_signing_keys/{ssh_signing_key_id}"],
+ list: ["GET /users"],
+ listBlockedByAuthenticated: [
+ "GET /user/blocks",
+ {},
+ { renamed: ["users", "listBlockedByAuthenticatedUser"] }
+ ],
+ listBlockedByAuthenticatedUser: ["GET /user/blocks"],
+ listEmailsForAuthenticated: [
+ "GET /user/emails",
+ {},
+ { renamed: ["users", "listEmailsForAuthenticatedUser"] }
+ ],
+ listEmailsForAuthenticatedUser: ["GET /user/emails"],
+ listFollowedByAuthenticated: [
+ "GET /user/following",
+ {},
+ { renamed: ["users", "listFollowedByAuthenticatedUser"] }
+ ],
+ listFollowedByAuthenticatedUser: ["GET /user/following"],
+ listFollowersForAuthenticatedUser: ["GET /user/followers"],
+ listFollowersForUser: ["GET /users/{username}/followers"],
+ listFollowingForUser: ["GET /users/{username}/following"],
+ listGpgKeysForAuthenticated: [
+ "GET /user/gpg_keys",
+ {},
+ { renamed: ["users", "listGpgKeysForAuthenticatedUser"] }
+ ],
+ listGpgKeysForAuthenticatedUser: ["GET /user/gpg_keys"],
+ listGpgKeysForUser: ["GET /users/{username}/gpg_keys"],
+ listPublicEmailsForAuthenticated: [
+ "GET /user/public_emails",
+ {},
+ { renamed: ["users", "listPublicEmailsForAuthenticatedUser"] }
+ ],
+ listPublicEmailsForAuthenticatedUser: ["GET /user/public_emails"],
+ listPublicKeysForUser: ["GET /users/{username}/keys"],
+ listPublicSshKeysForAuthenticated: [
+ "GET /user/keys",
+ {},
+ { renamed: ["users", "listPublicSshKeysForAuthenticatedUser"] }
+ ],
+ listPublicSshKeysForAuthenticatedUser: ["GET /user/keys"],
+ listSocialAccountsForAuthenticatedUser: ["GET /user/social_accounts"],
+ listSocialAccountsForUser: ["GET /users/{username}/social_accounts"],
+ listSshSigningKeysForAuthenticatedUser: ["GET /user/ssh_signing_keys"],
+ listSshSigningKeysForUser: ["GET /users/{username}/ssh_signing_keys"],
+ setPrimaryEmailVisibilityForAuthenticated: [
+ "PATCH /user/email/visibility",
+ {},
+ { renamed: ["users", "setPrimaryEmailVisibilityForAuthenticatedUser"] }
+ ],
+ setPrimaryEmailVisibilityForAuthenticatedUser: ["PATCH /user/email/visibility"],
+ unblock: ["DELETE /user/blocks/{username}"],
+ unfollow: ["DELETE /user/following/{username}"],
+ updateAuthenticated: ["PATCH /user"]
+ }
+ };
+ var endpointMethodsMap = /* @__PURE__ */ new Map();
+ for (const [scope, endpoints] of Object.entries(endpoints_default)) for (const [methodName, endpoint] of Object.entries(endpoints)) {
+ const [route, defaults, decorations] = endpoint;
+ const [method, url] = route.split(/ /);
+ const endpointDefaults = Object.assign({
+ method,
+ url
+ }, defaults);
+ if (!endpointMethodsMap.has(scope)) endpointMethodsMap.set(scope, /* @__PURE__ */ new Map());
+ endpointMethodsMap.get(scope).set(methodName, {
+ scope,
+ methodName,
+ endpointDefaults,
+ decorations
+ });
+ }
+ var handler = {
+ has({ scope }, methodName) {
+ return endpointMethodsMap.get(scope).has(methodName);
+ },
+ getOwnPropertyDescriptor(target, methodName) {
+ return {
+ value: this.get(target, methodName),
+ configurable: true,
+ writable: true,
+ enumerable: true
+ };
+ },
+ defineProperty(target, methodName, descriptor) {
+ Object.defineProperty(target.cache, methodName, descriptor);
+ return true;
+ },
+ deleteProperty(target, methodName) {
+ delete target.cache[methodName];
+ return true;
+ },
+ ownKeys({ scope }) {
+ return [...endpointMethodsMap.get(scope).keys()];
+ },
+ set(target, methodName, value) {
+ return target.cache[methodName] = value;
+ },
+ get({ octokit, scope, cache }, methodName) {
+ if (cache[methodName]) return cache[methodName];
+ const method = endpointMethodsMap.get(scope).get(methodName);
+ if (!method) return;
+ const { endpointDefaults, decorations } = method;
+ if (decorations) cache[methodName] = decorate(octokit, scope, methodName, endpointDefaults, decorations);
+ else cache[methodName] = octokit.request.defaults(endpointDefaults);
+ return cache[methodName];
+ }
+ };
+ function endpointsToMethods(octokit) {
+ const newMethods = {};
+ for (const scope of endpointMethodsMap.keys()) newMethods[scope] = new Proxy({
+ octokit,
+ scope,
+ cache: {}
+ }, handler);
+ return newMethods;
+ }
+ function decorate(octokit, scope, methodName, defaults, decorations) {
+ const requestWithDefaults = octokit.request.defaults(defaults);
+ function withDecorations(...args) {
+ let options = requestWithDefaults.endpoint.merge(...args);
+ if (decorations.mapToData) {
+ options = Object.assign({}, options, {
+ data: options[decorations.mapToData],
+ [decorations.mapToData]: void 0
+ });
+ return requestWithDefaults(options);
+ }
+ if (decorations.renamed) {
+ const [newScope, newMethodName] = decorations.renamed;
+ octokit.log.warn(`octokit.${scope}.${methodName}() has been renamed to octokit.${newScope}.${newMethodName}()`);
+ }
+ if (decorations.deprecated) octokit.log.warn(decorations.deprecated);
+ if (decorations.renamedParameters) {
+ const options2 = requestWithDefaults.endpoint.merge(...args);
+ for (const [name, alias] of Object.entries(decorations.renamedParameters)) if (name in options2) {
+ octokit.log.warn(`"${name}" parameter is deprecated for "octokit.${scope}.${methodName}()". Use "${alias}" instead`);
+ if (!(alias in options2)) options2[alias] = options2[name];
+ delete options2[name];
+ }
+ return requestWithDefaults(options2);
+ }
+ return requestWithDefaults(...args);
+ }
+ return Object.assign(withDecorations, requestWithDefaults);
+ }
+ function restEndpointMethods(octokit) {
+ return { rest: endpointsToMethods(octokit) };
+ }
+ restEndpointMethods.VERSION = VERSION;
+ function legacyRestEndpointMethods(octokit) {
+ const api = endpointsToMethods(octokit);
+ return {
+ ...api,
+ rest: api
+ };
+ }
+ legacyRestEndpointMethods.VERSION = VERSION;
+}));
+//#endregion
+//#region node_modules/.pnpm/@octokit+plugin-paginate-rest@9.2.2_@octokit+core@5.2.2/node_modules/@octokit/plugin-paginate-rest/dist-node/index.js
+var require_dist_node = /* @__PURE__ */ __commonJSMin(((exports, module) => {
+ var __defProp = Object.defineProperty;
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+ var __getOwnPropNames = Object.getOwnPropertyNames;
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
+ var __export = (target, all) => {
+ for (var name in all) __defProp(target, name, {
+ get: all[name],
+ enumerable: true
+ });
+ };
+ 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 __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+ var dist_src_exports = {};
+ __export(dist_src_exports, {
+ composePaginateRest: () => composePaginateRest,
+ isPaginatingEndpoint: () => isPaginatingEndpoint,
+ paginateRest: () => paginateRest,
+ paginatingEndpoints: () => paginatingEndpoints
+ });
+ module.exports = __toCommonJS(dist_src_exports);
+ var VERSION = "9.2.2";
+ function normalizePaginatedListResponse(response) {
+ if (!response.data) return {
+ ...response,
+ data: []
+ };
+ if (!("total_count" in response.data && !("url" in response.data))) return response;
+ const incompleteResults = response.data.incomplete_results;
+ const repositorySelection = response.data.repository_selection;
+ const totalCount = response.data.total_count;
+ delete response.data.incomplete_results;
+ delete response.data.repository_selection;
+ delete response.data.total_count;
+ const namespaceKey = Object.keys(response.data)[0];
+ response.data = response.data[namespaceKey];
+ if (typeof incompleteResults !== "undefined") response.data.incomplete_results = incompleteResults;
+ if (typeof repositorySelection !== "undefined") response.data.repository_selection = repositorySelection;
+ response.data.total_count = totalCount;
+ return response;
+ }
+ function iterator(octokit, route, parameters) {
+ const options = typeof route === "function" ? route.endpoint(parameters) : octokit.request.endpoint(route, parameters);
+ const requestMethod = typeof route === "function" ? route : octokit.request;
+ const method = options.method;
+ const headers = options.headers;
+ let url = options.url;
+ return { [Symbol.asyncIterator]: () => ({ async next() {
+ if (!url) return { done: true };
+ try {
+ const normalizedResponse = normalizePaginatedListResponse(await requestMethod({
+ method,
+ url,
+ headers
+ }));
+ url = ((normalizedResponse.headers.link || "").match(/<([^<>]+)>;\s*rel="next"/) || [])[1];
+ return { value: normalizedResponse };
+ } catch (error) {
+ if (error.status !== 409) throw error;
+ url = "";
+ return { value: {
+ status: 200,
+ headers: {},
+ data: []
+ } };
+ }
+ } }) };
+ }
+ function paginate(octokit, route, parameters, mapFn) {
+ if (typeof parameters === "function") {
+ mapFn = parameters;
+ parameters = void 0;
+ }
+ return gather(octokit, [], iterator(octokit, route, parameters)[Symbol.asyncIterator](), mapFn);
+ }
+ function gather(octokit, results, iterator2, mapFn) {
+ return iterator2.next().then((result) => {
+ if (result.done) return results;
+ let earlyExit = false;
+ function done() {
+ earlyExit = true;
+ }
+ results = results.concat(mapFn ? mapFn(result.value, done) : result.value.data);
+ if (earlyExit) return results;
+ return gather(octokit, results, iterator2, mapFn);
+ });
+ }
+ var composePaginateRest = Object.assign(paginate, { iterator });
+ var paginatingEndpoints = [
+ "GET /advisories",
+ "GET /app/hook/deliveries",
+ "GET /app/installation-requests",
+ "GET /app/installations",
+ "GET /assignments/{assignment_id}/accepted_assignments",
+ "GET /classrooms",
+ "GET /classrooms/{classroom_id}/assignments",
+ "GET /enterprises/{enterprise}/dependabot/alerts",
+ "GET /enterprises/{enterprise}/secret-scanning/alerts",
+ "GET /events",
+ "GET /gists",
+ "GET /gists/public",
+ "GET /gists/starred",
+ "GET /gists/{gist_id}/comments",
+ "GET /gists/{gist_id}/commits",
+ "GET /gists/{gist_id}/forks",
+ "GET /installation/repositories",
+ "GET /issues",
+ "GET /licenses",
+ "GET /marketplace_listing/plans",
+ "GET /marketplace_listing/plans/{plan_id}/accounts",
+ "GET /marketplace_listing/stubbed/plans",
+ "GET /marketplace_listing/stubbed/plans/{plan_id}/accounts",
+ "GET /networks/{owner}/{repo}/events",
+ "GET /notifications",
+ "GET /organizations",
+ "GET /orgs/{org}/actions/cache/usage-by-repository",
+ "GET /orgs/{org}/actions/permissions/repositories",
+ "GET /orgs/{org}/actions/runners",
+ "GET /orgs/{org}/actions/secrets",
+ "GET /orgs/{org}/actions/secrets/{secret_name}/repositories",
+ "GET /orgs/{org}/actions/variables",
+ "GET /orgs/{org}/actions/variables/{name}/repositories",
+ "GET /orgs/{org}/blocks",
+ "GET /orgs/{org}/code-scanning/alerts",
+ "GET /orgs/{org}/codespaces",
+ "GET /orgs/{org}/codespaces/secrets",
+ "GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories",
+ "GET /orgs/{org}/copilot/billing/seats",
+ "GET /orgs/{org}/dependabot/alerts",
+ "GET /orgs/{org}/dependabot/secrets",
+ "GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories",
+ "GET /orgs/{org}/events",
+ "GET /orgs/{org}/failed_invitations",
+ "GET /orgs/{org}/hooks",
+ "GET /orgs/{org}/hooks/{hook_id}/deliveries",
+ "GET /orgs/{org}/installations",
+ "GET /orgs/{org}/invitations",
+ "GET /orgs/{org}/invitations/{invitation_id}/teams",
+ "GET /orgs/{org}/issues",
+ "GET /orgs/{org}/members",
+ "GET /orgs/{org}/members/{username}/codespaces",
+ "GET /orgs/{org}/migrations",
+ "GET /orgs/{org}/migrations/{migration_id}/repositories",
+ "GET /orgs/{org}/organization-roles/{role_id}/teams",
+ "GET /orgs/{org}/organization-roles/{role_id}/users",
+ "GET /orgs/{org}/outside_collaborators",
+ "GET /orgs/{org}/packages",
+ "GET /orgs/{org}/packages/{package_type}/{package_name}/versions",
+ "GET /orgs/{org}/personal-access-token-requests",
+ "GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories",
+ "GET /orgs/{org}/personal-access-tokens",
+ "GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories",
+ "GET /orgs/{org}/projects",
+ "GET /orgs/{org}/properties/values",
+ "GET /orgs/{org}/public_members",
+ "GET /orgs/{org}/repos",
+ "GET /orgs/{org}/rulesets",
+ "GET /orgs/{org}/rulesets/rule-suites",
+ "GET /orgs/{org}/secret-scanning/alerts",
+ "GET /orgs/{org}/security-advisories",
+ "GET /orgs/{org}/teams",
+ "GET /orgs/{org}/teams/{team_slug}/discussions",
+ "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments",
+ "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions",
+ "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions",
+ "GET /orgs/{org}/teams/{team_slug}/invitations",
+ "GET /orgs/{org}/teams/{team_slug}/members",
+ "GET /orgs/{org}/teams/{team_slug}/projects",
+ "GET /orgs/{org}/teams/{team_slug}/repos",
+ "GET /orgs/{org}/teams/{team_slug}/teams",
+ "GET /projects/columns/{column_id}/cards",
+ "GET /projects/{project_id}/collaborators",
+ "GET /projects/{project_id}/columns",
+ "GET /repos/{owner}/{repo}/actions/artifacts",
+ "GET /repos/{owner}/{repo}/actions/caches",
+ "GET /repos/{owner}/{repo}/actions/organization-secrets",
+ "GET /repos/{owner}/{repo}/actions/organization-variables",
+ "GET /repos/{owner}/{repo}/actions/runners",
+ "GET /repos/{owner}/{repo}/actions/runs",
+ "GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts",
+ "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs",
+ "GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs",
+ "GET /repos/{owner}/{repo}/actions/secrets",
+ "GET /repos/{owner}/{repo}/actions/variables",
+ "GET /repos/{owner}/{repo}/actions/workflows",
+ "GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs",
+ "GET /repos/{owner}/{repo}/activity",
+ "GET /repos/{owner}/{repo}/assignees",
+ "GET /repos/{owner}/{repo}/branches",
+ "GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations",
+ "GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs",
+ "GET /repos/{owner}/{repo}/code-scanning/alerts",
+ "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances",
+ "GET /repos/{owner}/{repo}/code-scanning/analyses",
+ "GET /repos/{owner}/{repo}/codespaces",
+ "GET /repos/{owner}/{repo}/codespaces/devcontainers",
+ "GET /repos/{owner}/{repo}/codespaces/secrets",
+ "GET /repos/{owner}/{repo}/collaborators",
+ "GET /repos/{owner}/{repo}/comments",
+ "GET /repos/{owner}/{repo}/comments/{comment_id}/reactions",
+ "GET /repos/{owner}/{repo}/commits",
+ "GET /repos/{owner}/{repo}/commits/{commit_sha}/comments",
+ "GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls",
+ "GET /repos/{owner}/{repo}/commits/{ref}/check-runs",
+ "GET /repos/{owner}/{repo}/commits/{ref}/check-suites",
+ "GET /repos/{owner}/{repo}/commits/{ref}/status",
+ "GET /repos/{owner}/{repo}/commits/{ref}/statuses",
+ "GET /repos/{owner}/{repo}/contributors",
+ "GET /repos/{owner}/{repo}/dependabot/alerts",
+ "GET /repos/{owner}/{repo}/dependabot/secrets",
+ "GET /repos/{owner}/{repo}/deployments",
+ "GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses",
+ "GET /repos/{owner}/{repo}/environments",
+ "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies",
+ "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps",
+ "GET /repos/{owner}/{repo}/events",
+ "GET /repos/{owner}/{repo}/forks",
+ "GET /repos/{owner}/{repo}/hooks",
+ "GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries",
+ "GET /repos/{owner}/{repo}/invitations",
+ "GET /repos/{owner}/{repo}/issues",
+ "GET /repos/{owner}/{repo}/issues/comments",
+ "GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions",
+ "GET /repos/{owner}/{repo}/issues/events",
+ "GET /repos/{owner}/{repo}/issues/{issue_number}/comments",
+ "GET /repos/{owner}/{repo}/issues/{issue_number}/events",
+ "GET /repos/{owner}/{repo}/issues/{issue_number}/labels",
+ "GET /repos/{owner}/{repo}/issues/{issue_number}/reactions",
+ "GET /repos/{owner}/{repo}/issues/{issue_number}/timeline",
+ "GET /repos/{owner}/{repo}/keys",
+ "GET /repos/{owner}/{repo}/labels",
+ "GET /repos/{owner}/{repo}/milestones",
+ "GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels",
+ "GET /repos/{owner}/{repo}/notifications",
+ "GET /repos/{owner}/{repo}/pages/builds",
+ "GET /repos/{owner}/{repo}/projects",
+ "GET /repos/{owner}/{repo}/pulls",
+ "GET /repos/{owner}/{repo}/pulls/comments",
+ "GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions",
+ "GET /repos/{owner}/{repo}/pulls/{pull_number}/comments",
+ "GET /repos/{owner}/{repo}/pulls/{pull_number}/commits",
+ "GET /repos/{owner}/{repo}/pulls/{pull_number}/files",
+ "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews",
+ "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments",
+ "GET /repos/{owner}/{repo}/releases",
+ "GET /repos/{owner}/{repo}/releases/{release_id}/assets",
+ "GET /repos/{owner}/{repo}/releases/{release_id}/reactions",
+ "GET /repos/{owner}/{repo}/rules/branches/{branch}",
+ "GET /repos/{owner}/{repo}/rulesets",
+ "GET /repos/{owner}/{repo}/rulesets/rule-suites",
+ "GET /repos/{owner}/{repo}/secret-scanning/alerts",
+ "GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations",
+ "GET /repos/{owner}/{repo}/security-advisories",
+ "GET /repos/{owner}/{repo}/stargazers",
+ "GET /repos/{owner}/{repo}/subscribers",
+ "GET /repos/{owner}/{repo}/tags",
+ "GET /repos/{owner}/{repo}/teams",
+ "GET /repos/{owner}/{repo}/topics",
+ "GET /repositories",
+ "GET /repositories/{repository_id}/environments/{environment_name}/secrets",
+ "GET /repositories/{repository_id}/environments/{environment_name}/variables",
+ "GET /search/code",
+ "GET /search/commits",
+ "GET /search/issues",
+ "GET /search/labels",
+ "GET /search/repositories",
+ "GET /search/topics",
+ "GET /search/users",
+ "GET /teams/{team_id}/discussions",
+ "GET /teams/{team_id}/discussions/{discussion_number}/comments",
+ "GET /teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions",
+ "GET /teams/{team_id}/discussions/{discussion_number}/reactions",
+ "GET /teams/{team_id}/invitations",
+ "GET /teams/{team_id}/members",
+ "GET /teams/{team_id}/projects",
+ "GET /teams/{team_id}/repos",
+ "GET /teams/{team_id}/teams",
+ "GET /user/blocks",
+ "GET /user/codespaces",
+ "GET /user/codespaces/secrets",
+ "GET /user/emails",
+ "GET /user/followers",
+ "GET /user/following",
+ "GET /user/gpg_keys",
+ "GET /user/installations",
+ "GET /user/installations/{installation_id}/repositories",
+ "GET /user/issues",
+ "GET /user/keys",
+ "GET /user/marketplace_purchases",
+ "GET /user/marketplace_purchases/stubbed",
+ "GET /user/memberships/orgs",
+ "GET /user/migrations",
+ "GET /user/migrations/{migration_id}/repositories",
+ "GET /user/orgs",
+ "GET /user/packages",
+ "GET /user/packages/{package_type}/{package_name}/versions",
+ "GET /user/public_emails",
+ "GET /user/repos",
+ "GET /user/repository_invitations",
+ "GET /user/social_accounts",
+ "GET /user/ssh_signing_keys",
+ "GET /user/starred",
+ "GET /user/subscriptions",
+ "GET /user/teams",
+ "GET /users",
+ "GET /users/{username}/events",
+ "GET /users/{username}/events/orgs/{org}",
+ "GET /users/{username}/events/public",
+ "GET /users/{username}/followers",
+ "GET /users/{username}/following",
+ "GET /users/{username}/gists",
+ "GET /users/{username}/gpg_keys",
+ "GET /users/{username}/keys",
+ "GET /users/{username}/orgs",
+ "GET /users/{username}/packages",
+ "GET /users/{username}/projects",
+ "GET /users/{username}/received_events",
+ "GET /users/{username}/received_events/public",
+ "GET /users/{username}/repos",
+ "GET /users/{username}/social_accounts",
+ "GET /users/{username}/ssh_signing_keys",
+ "GET /users/{username}/starred",
+ "GET /users/{username}/subscriptions"
+ ];
+ function isPaginatingEndpoint(arg) {
+ if (typeof arg === "string") return paginatingEndpoints.includes(arg);
+ else return false;
+ }
+ function paginateRest(octokit) {
+ return { paginate: Object.assign(paginate.bind(null, octokit), { iterator: iterator.bind(null, octokit) }) };
+ }
+ paginateRest.VERSION = VERSION;
+}));
+//#endregion
+//#region node_modules/.pnpm/@actions+github@6.0.1/node_modules/@actions/github/lib/utils.js
+var require_utils = /* @__PURE__ */ __commonJSMin(((exports) => {
+ var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === void 0) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) desc = {
+ enumerable: true,
+ get: function() {
+ return m[k];
+ }
+ };
+ Object.defineProperty(o, k2, desc);
+ }) : (function(o, m, k, k2) {
+ if (k2 === void 0) k2 = k;
+ o[k2] = m[k];
+ }));
+ var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", {
+ enumerable: true,
+ value: v
+ });
+ }) : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar = exports && exports.__importStar || function(mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) {
+ for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ }
+ __setModuleDefault(result, mod);
+ return result;
+ };
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.getOctokitOptions = exports.GitHub = exports.defaults = exports.context = void 0;
+ const Context = __importStar(require_context());
+ const Utils = __importStar(require_utils$1());
+ const core_1 = require_dist_node$2();
+ const plugin_rest_endpoint_methods_1 = require_dist_node$1();
+ const plugin_paginate_rest_1 = require_dist_node();
+ exports.context = new Context.Context();
+ const baseUrl = Utils.getApiBaseUrl();
+ exports.defaults = {
+ baseUrl,
+ request: {
+ agent: Utils.getProxyAgent(baseUrl),
+ fetch: Utils.getProxyFetch(baseUrl)
+ }
+ };
+ exports.GitHub = core_1.Octokit.plugin(plugin_rest_endpoint_methods_1.restEndpointMethods, plugin_paginate_rest_1.paginateRest).defaults(exports.defaults);
+ /**
+ * Convience function to correctly format Octokit Options to pass into the constructor.
+ *
+ * @param token the repo PAT or GITHUB_TOKEN
+ * @param options other options to set
+ */
+ function getOctokitOptions(token, options) {
+ const opts = Object.assign({}, options || {});
+ const auth = Utils.getAuthString(token, opts);
+ if (auth) opts.auth = auth;
+ return opts;
+ }
+ exports.getOctokitOptions = getOctokitOptions;
+}));
+//#endregion
+//#region node_modules/.pnpm/@actions+github@6.0.1/node_modules/@actions/github/lib/github.js
+var require_github = /* @__PURE__ */ __commonJSMin(((exports) => {
+ var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === void 0) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) desc = {
+ enumerable: true,
+ get: function() {
+ return m[k];
+ }
+ };
+ Object.defineProperty(o, k2, desc);
+ }) : (function(o, m, k, k2) {
+ if (k2 === void 0) k2 = k;
+ o[k2] = m[k];
+ }));
+ var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", {
+ enumerable: true,
+ value: v
+ });
+ }) : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar = exports && exports.__importStar || function(mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) {
+ for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ }
+ __setModuleDefault(result, mod);
+ return result;
+ };
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.getOctokit = exports.context = void 0;
+ const Context = __importStar(require_context());
+ const utils_1 = require_utils();
+ exports.context = new Context.Context();
+ /**
+ * Returns a hydrated octokit ready to use for GitHub Actions
+ *
+ * @param token the repo PAT or GITHUB_TOKEN
+ * @param options other options to set
+ */
+ function getOctokit(token, options, ...additionalPlugins) {
+ return new (utils_1.GitHub.plugin(...additionalPlugins))((0, utils_1.getOctokitOptions)(token, options));
+ }
+ exports.getOctokit = getOctokit;
+}));
+//#endregion
+//#region src/mask.ts
+var import_core = /* @__PURE__ */ __toESM(require_core(), 1);
+var import_github = /* @__PURE__ */ __toESM(require_github(), 1);
+/**
+* Parses a comma-separated list of regex patterns into an array of `RegExp`
+* objects.
+*
+* Patterns may begin with `(?i)` to enable case-insensitive matching, mirroring
+* the syntax found in many other regex flavors. Whitespace around each pattern
+* is trimmed and empty entries are ignored. Invalid patterns throw with a
+* descriptive message identifying the offending entry.
+*/
+function parseMaskPatterns(input) {
+ if (!input) return [];
+ return input.split(",").map((p) => p.trim()).filter((p) => p.length > 0).map((p) => compilePattern(p));
+}
+function compilePattern(pattern) {
+ let flags = "";
+ let body = pattern;
+ const flagMatch = body.match(/^\(\?([imsux]+)\)/);
+ if (flagMatch && flagMatch[1] !== void 0) {
+ flags = flagMatch[1].split("").filter((f) => "imsu".includes(f)).join("");
+ body = body.slice(flagMatch[0].length);
+ }
+ try {
+ return new RegExp(body, flags);
+ } catch (err) {
+ const message = err instanceof Error ? err.message : String(err);
+ throw new Error(`Invalid mask pattern "${pattern}": ${message}`);
+ }
+}
+/**
+* Returns true if any of the supplied patterns matches the given key.
+*/
+function shouldMask(key, patterns) {
+ return patterns.some((p) => p.test(key));
+}
+/**
+* Redacts a value if its key matches any of the supplied patterns.
+*/
+function maskValue(key, value, patterns) {
+ return shouldMask(key, patterns) ? "***" : value;
+}
+//#endregion
+//#region node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs
+/*! js-yaml 4.1.1 https://github.com/nodeca/js-yaml @license MIT */
+function isNothing(subject) {
+ return typeof subject === "undefined" || subject === null;
+}
+function isObject$1(subject) {
+ return typeof subject === "object" && subject !== null;
+}
+function toArray(sequence) {
+ if (Array.isArray(sequence)) return sequence;
+ else if (isNothing(sequence)) return [];
+ return [sequence];
+}
+function extend(target, source) {
+ var index, length, key, sourceKeys;
+ if (source) {
+ sourceKeys = Object.keys(source);
+ for (index = 0, length = sourceKeys.length; index < length; index += 1) {
+ key = sourceKeys[index];
+ target[key] = source[key];
+ }
+ }
+ return target;
+}
+function repeat(string, count) {
+ var result = "", cycle;
+ for (cycle = 0; cycle < count; cycle += 1) result += string;
+ return result;
+}
+function isNegativeZero(number) {
+ return number === 0 && Number.NEGATIVE_INFINITY === 1 / number;
+}
+var common = {
+ isNothing,
+ isObject: isObject$1,
+ toArray,
+ repeat,
+ isNegativeZero,
+ extend
+};
+function formatError(exception, compact) {
+ var where = "", message = exception.reason || "(unknown reason)";
+ if (!exception.mark) return message;
+ if (exception.mark.name) where += "in \"" + exception.mark.name + "\" ";
+ where += "(" + (exception.mark.line + 1) + ":" + (exception.mark.column + 1) + ")";
+ if (!compact && exception.mark.snippet) where += "\n\n" + exception.mark.snippet;
+ return message + " " + where;
+}
+function YAMLException$1(reason, mark) {
+ Error.call(this);
+ this.name = "YAMLException";
+ this.reason = reason;
+ this.mark = mark;
+ this.message = formatError(this, false);
+ if (Error.captureStackTrace) Error.captureStackTrace(this, this.constructor);
+ else this.stack = (/* @__PURE__ */ new Error()).stack || "";
+}
+YAMLException$1.prototype = Object.create(Error.prototype);
+YAMLException$1.prototype.constructor = YAMLException$1;
+YAMLException$1.prototype.toString = function toString(compact) {
+ return this.name + ": " + formatError(this, compact);
+};
+var exception = YAMLException$1;
+function getLine(buffer, lineStart, lineEnd, position, maxLineLength) {
+ var head = "";
+ var tail = "";
+ var maxHalfLength = Math.floor(maxLineLength / 2) - 1;
+ if (position - lineStart > maxHalfLength) {
+ head = " ... ";
+ lineStart = position - maxHalfLength + head.length;
+ }
+ if (lineEnd - position > maxHalfLength) {
+ tail = " ...";
+ lineEnd = position + maxHalfLength - tail.length;
+ }
+ return {
+ str: head + buffer.slice(lineStart, lineEnd).replace(/\t/g, "→") + tail,
+ pos: position - lineStart + head.length
+ };
+}
+function padStart(string, max) {
+ return common.repeat(" ", max - string.length) + string;
+}
+function makeSnippet(mark, options) {
+ options = Object.create(options || null);
+ if (!mark.buffer) return null;
+ if (!options.maxLength) options.maxLength = 79;
+ if (typeof options.indent !== "number") options.indent = 1;
+ if (typeof options.linesBefore !== "number") options.linesBefore = 3;
+ if (typeof options.linesAfter !== "number") options.linesAfter = 2;
+ var re = /\r?\n|\r|\0/g;
+ var lineStarts = [0];
+ var lineEnds = [];
+ var match;
+ var foundLineNo = -1;
+ while (match = re.exec(mark.buffer)) {
+ lineEnds.push(match.index);
+ lineStarts.push(match.index + match[0].length);
+ if (mark.position <= match.index && foundLineNo < 0) foundLineNo = lineStarts.length - 2;
+ }
+ if (foundLineNo < 0) foundLineNo = lineStarts.length - 1;
+ var result = "", i, line;
+ var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length;
+ var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3);
+ for (i = 1; i <= options.linesBefore; i++) {
+ if (foundLineNo - i < 0) break;
+ line = getLine(mark.buffer, lineStarts[foundLineNo - i], lineEnds[foundLineNo - i], mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]), maxLineLength);
+ result = common.repeat(" ", options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) + " | " + line.str + "\n" + result;
+ }
+ line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength);
+ result += common.repeat(" ", options.indent) + padStart((mark.line + 1).toString(), lineNoLength) + " | " + line.str + "\n";
+ result += common.repeat("-", options.indent + lineNoLength + 3 + line.pos) + "^\n";
+ for (i = 1; i <= options.linesAfter; i++) {
+ if (foundLineNo + i >= lineEnds.length) break;
+ line = getLine(mark.buffer, lineStarts[foundLineNo + i], lineEnds[foundLineNo + i], mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]), maxLineLength);
+ result += common.repeat(" ", options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) + " | " + line.str + "\n";
+ }
+ return result.replace(/\n$/, "");
+}
+var snippet = makeSnippet;
+var TYPE_CONSTRUCTOR_OPTIONS = [
+ "kind",
+ "multi",
+ "resolve",
+ "construct",
+ "instanceOf",
+ "predicate",
+ "represent",
+ "representName",
+ "defaultStyle",
+ "styleAliases"
+];
+var YAML_NODE_KINDS = [
+ "scalar",
+ "sequence",
+ "mapping"
+];
+function compileStyleAliases(map) {
+ var result = {};
+ if (map !== null) Object.keys(map).forEach(function(style) {
+ map[style].forEach(function(alias) {
+ result[String(alias)] = style;
+ });
+ });
+ return result;
+}
+function Type$1(tag, options) {
+ options = options || {};
+ Object.keys(options).forEach(function(name) {
+ if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) throw new exception("Unknown option \"" + name + "\" is met in definition of \"" + tag + "\" YAML type.");
+ });
+ this.options = options;
+ this.tag = tag;
+ this.kind = options["kind"] || null;
+ this.resolve = options["resolve"] || function() {
+ return true;
+ };
+ this.construct = options["construct"] || function(data) {
+ return data;
+ };
+ this.instanceOf = options["instanceOf"] || null;
+ this.predicate = options["predicate"] || null;
+ this.represent = options["represent"] || null;
+ this.representName = options["representName"] || null;
+ this.defaultStyle = options["defaultStyle"] || null;
+ this.multi = options["multi"] || false;
+ this.styleAliases = compileStyleAliases(options["styleAliases"] || null);
+ if (YAML_NODE_KINDS.indexOf(this.kind) === -1) throw new exception("Unknown kind \"" + this.kind + "\" is specified for \"" + tag + "\" YAML type.");
+}
+var type = Type$1;
+function compileList(schema, name) {
+ var result = [];
+ schema[name].forEach(function(currentType) {
+ var newIndex = result.length;
+ result.forEach(function(previousType, previousIndex) {
+ if (previousType.tag === currentType.tag && previousType.kind === currentType.kind && previousType.multi === currentType.multi) newIndex = previousIndex;
+ });
+ result[newIndex] = currentType;
+ });
+ return result;
+}
+function compileMap() {
+ var result = {
+ scalar: {},
+ sequence: {},
+ mapping: {},
+ fallback: {},
+ multi: {
+ scalar: [],
+ sequence: [],
+ mapping: [],
+ fallback: []
+ }
+ }, index, length;
+ function collectType(type) {
+ if (type.multi) {
+ result.multi[type.kind].push(type);
+ result.multi["fallback"].push(type);
+ } else result[type.kind][type.tag] = result["fallback"][type.tag] = type;
+ }
+ for (index = 0, length = arguments.length; index < length; index += 1) arguments[index].forEach(collectType);
+ return result;
+}
+function Schema$1(definition) {
+ return this.extend(definition);
+}
+Schema$1.prototype.extend = function extend(definition) {
+ var implicit = [];
+ var explicit = [];
+ if (definition instanceof type) explicit.push(definition);
+ else if (Array.isArray(definition)) explicit = explicit.concat(definition);
+ else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) {
+ if (definition.implicit) implicit = implicit.concat(definition.implicit);
+ if (definition.explicit) explicit = explicit.concat(definition.explicit);
+ } else throw new exception("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");
+ implicit.forEach(function(type$1) {
+ if (!(type$1 instanceof type)) throw new exception("Specified list of YAML types (or a single Type object) contains a non-Type object.");
+ if (type$1.loadKind && type$1.loadKind !== "scalar") throw new exception("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");
+ if (type$1.multi) throw new exception("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.");
+ });
+ explicit.forEach(function(type$1) {
+ if (!(type$1 instanceof type)) throw new exception("Specified list of YAML types (or a single Type object) contains a non-Type object.");
+ });
+ var result = Object.create(Schema$1.prototype);
+ result.implicit = (this.implicit || []).concat(implicit);
+ result.explicit = (this.explicit || []).concat(explicit);
+ result.compiledImplicit = compileList(result, "implicit");
+ result.compiledExplicit = compileList(result, "explicit");
+ result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit);
+ return result;
+};
+var failsafe = new Schema$1({ explicit: [
+ new type("tag:yaml.org,2002:str", {
+ kind: "scalar",
+ construct: function(data) {
+ return data !== null ? data : "";
+ }
+ }),
+ new type("tag:yaml.org,2002:seq", {
+ kind: "sequence",
+ construct: function(data) {
+ return data !== null ? data : [];
+ }
+ }),
+ new type("tag:yaml.org,2002:map", {
+ kind: "mapping",
+ construct: function(data) {
+ return data !== null ? data : {};
+ }
+ })
+] });
+function resolveYamlNull(data) {
+ if (data === null) return true;
+ var max = data.length;
+ return max === 1 && data === "~" || max === 4 && (data === "null" || data === "Null" || data === "NULL");
+}
+function constructYamlNull() {
+ return null;
+}
+function isNull(object) {
+ return object === null;
+}
+var _null = new type("tag:yaml.org,2002:null", {
+ kind: "scalar",
+ resolve: resolveYamlNull,
+ construct: constructYamlNull,
+ predicate: isNull,
+ represent: {
+ canonical: function() {
+ return "~";
+ },
+ lowercase: function() {
+ return "null";
+ },
+ uppercase: function() {
+ return "NULL";
+ },
+ camelcase: function() {
+ return "Null";
+ },
+ empty: function() {
+ return "";
+ }
+ },
+ defaultStyle: "lowercase"
+});
+function resolveYamlBoolean(data) {
+ if (data === null) return false;
+ var max = data.length;
+ return max === 4 && (data === "true" || data === "True" || data === "TRUE") || max === 5 && (data === "false" || data === "False" || data === "FALSE");
+}
+function constructYamlBoolean(data) {
+ return data === "true" || data === "True" || data === "TRUE";
+}
+function isBoolean(object) {
+ return Object.prototype.toString.call(object) === "[object Boolean]";
+}
+var bool = new type("tag:yaml.org,2002:bool", {
+ kind: "scalar",
+ resolve: resolveYamlBoolean,
+ construct: constructYamlBoolean,
+ predicate: isBoolean,
+ represent: {
+ lowercase: function(object) {
+ return object ? "true" : "false";
+ },
+ uppercase: function(object) {
+ return object ? "TRUE" : "FALSE";
+ },
+ camelcase: function(object) {
+ return object ? "True" : "False";
+ }
+ },
+ defaultStyle: "lowercase"
+});
+function isHexCode(c) {
+ return 48 <= c && c <= 57 || 65 <= c && c <= 70 || 97 <= c && c <= 102;
+}
+function isOctCode(c) {
+ return 48 <= c && c <= 55;
+}
+function isDecCode(c) {
+ return 48 <= c && c <= 57;
+}
+function resolveYamlInteger(data) {
+ if (data === null) return false;
+ var max = data.length, index = 0, hasDigits = false, ch;
+ if (!max) return false;
+ ch = data[index];
+ if (ch === "-" || ch === "+") ch = data[++index];
+ if (ch === "0") {
+ if (index + 1 === max) return true;
+ ch = data[++index];
+ if (ch === "b") {
+ index++;
+ for (; index < max; index++) {
+ ch = data[index];
+ if (ch === "_") continue;
+ if (ch !== "0" && ch !== "1") return false;
+ hasDigits = true;
+ }
+ return hasDigits && ch !== "_";
+ }
+ if (ch === "x") {
+ index++;
+ for (; index < max; index++) {
+ ch = data[index];
+ if (ch === "_") continue;
+ if (!isHexCode(data.charCodeAt(index))) return false;
+ hasDigits = true;
+ }
+ return hasDigits && ch !== "_";
+ }
+ if (ch === "o") {
+ index++;
+ for (; index < max; index++) {
+ ch = data[index];
+ if (ch === "_") continue;
+ if (!isOctCode(data.charCodeAt(index))) return false;
+ hasDigits = true;
+ }
+ return hasDigits && ch !== "_";
+ }
+ }
+ if (ch === "_") return false;
+ for (; index < max; index++) {
+ ch = data[index];
+ if (ch === "_") continue;
+ if (!isDecCode(data.charCodeAt(index))) return false;
+ hasDigits = true;
+ }
+ if (!hasDigits || ch === "_") return false;
+ return true;
+}
+function constructYamlInteger(data) {
+ var value = data, sign = 1, ch;
+ if (value.indexOf("_") !== -1) value = value.replace(/_/g, "");
+ ch = value[0];
+ if (ch === "-" || ch === "+") {
+ if (ch === "-") sign = -1;
+ value = value.slice(1);
+ ch = value[0];
+ }
+ if (value === "0") return 0;
+ if (ch === "0") {
+ if (value[1] === "b") return sign * parseInt(value.slice(2), 2);
+ if (value[1] === "x") return sign * parseInt(value.slice(2), 16);
+ if (value[1] === "o") return sign * parseInt(value.slice(2), 8);
+ }
+ return sign * parseInt(value, 10);
+}
+function isInteger(object) {
+ return Object.prototype.toString.call(object) === "[object Number]" && object % 1 === 0 && !common.isNegativeZero(object);
+}
+var int = new type("tag:yaml.org,2002:int", {
+ kind: "scalar",
+ resolve: resolveYamlInteger,
+ construct: constructYamlInteger,
+ predicate: isInteger,
+ represent: {
+ binary: function(obj) {
+ return obj >= 0 ? "0b" + obj.toString(2) : "-0b" + obj.toString(2).slice(1);
+ },
+ octal: function(obj) {
+ return obj >= 0 ? "0o" + obj.toString(8) : "-0o" + obj.toString(8).slice(1);
+ },
+ decimal: function(obj) {
+ return obj.toString(10);
+ },
+ hexadecimal: function(obj) {
+ return obj >= 0 ? "0x" + obj.toString(16).toUpperCase() : "-0x" + obj.toString(16).toUpperCase().slice(1);
+ }
+ },
+ defaultStyle: "decimal",
+ styleAliases: {
+ binary: [2, "bin"],
+ octal: [8, "oct"],
+ decimal: [10, "dec"],
+ hexadecimal: [16, "hex"]
+ }
+});
+var YAML_FLOAT_PATTERN = /* @__PURE__ */ new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");
+function resolveYamlFloat(data) {
+ if (data === null) return false;
+ if (!YAML_FLOAT_PATTERN.test(data) || data[data.length - 1] === "_") return false;
+ return true;
+}
+function constructYamlFloat(data) {
+ var value = data.replace(/_/g, "").toLowerCase(), sign = value[0] === "-" ? -1 : 1;
+ if ("+-".indexOf(value[0]) >= 0) value = value.slice(1);
+ if (value === ".inf") return sign === 1 ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;
+ else if (value === ".nan") return NaN;
+ return sign * parseFloat(value, 10);
+}
+var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;
+function representYamlFloat(object, style) {
+ var res;
+ if (isNaN(object)) switch (style) {
+ case "lowercase": return ".nan";
+ case "uppercase": return ".NAN";
+ case "camelcase": return ".NaN";
+ }
+ else if (Number.POSITIVE_INFINITY === object) switch (style) {
+ case "lowercase": return ".inf";
+ case "uppercase": return ".INF";
+ case "camelcase": return ".Inf";
+ }
+ else if (Number.NEGATIVE_INFINITY === object) switch (style) {
+ case "lowercase": return "-.inf";
+ case "uppercase": return "-.INF";
+ case "camelcase": return "-.Inf";
+ }
+ else if (common.isNegativeZero(object)) return "-0.0";
+ res = object.toString(10);
+ return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace("e", ".e") : res;
+}
+function isFloat(object) {
+ return Object.prototype.toString.call(object) === "[object Number]" && (object % 1 !== 0 || common.isNegativeZero(object));
+}
+var float = new type("tag:yaml.org,2002:float", {
+ kind: "scalar",
+ resolve: resolveYamlFloat,
+ construct: constructYamlFloat,
+ predicate: isFloat,
+ represent: representYamlFloat,
+ defaultStyle: "lowercase"
+});
+var core = failsafe.extend({ implicit: [
+ _null,
+ bool,
+ int,
+ float
+] });
+var YAML_DATE_REGEXP = /* @__PURE__ */ new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$");
+var YAML_TIMESTAMP_REGEXP = /* @__PURE__ */ new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");
+function resolveYamlTimestamp(data) {
+ if (data === null) return false;
+ if (YAML_DATE_REGEXP.exec(data) !== null) return true;
+ if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true;
+ return false;
+}
+function constructYamlTimestamp(data) {
+ var match, year, month, day, hour, minute, second, fraction = 0, delta = null, tz_hour, tz_minute, date;
+ match = YAML_DATE_REGEXP.exec(data);
+ if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data);
+ if (match === null) throw new Error("Date resolve error");
+ year = +match[1];
+ month = +match[2] - 1;
+ day = +match[3];
+ if (!match[4]) return new Date(Date.UTC(year, month, day));
+ hour = +match[4];
+ minute = +match[5];
+ second = +match[6];
+ if (match[7]) {
+ fraction = match[7].slice(0, 3);
+ while (fraction.length < 3) fraction += "0";
+ fraction = +fraction;
+ }
+ if (match[9]) {
+ tz_hour = +match[10];
+ tz_minute = +(match[11] || 0);
+ delta = (tz_hour * 60 + tz_minute) * 6e4;
+ if (match[9] === "-") delta = -delta;
+ }
+ date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));
+ if (delta) date.setTime(date.getTime() - delta);
+ return date;
+}
+function representYamlTimestamp(object) {
+ return object.toISOString();
+}
+var timestamp = new type("tag:yaml.org,2002:timestamp", {
+ kind: "scalar",
+ resolve: resolveYamlTimestamp,
+ construct: constructYamlTimestamp,
+ instanceOf: Date,
+ represent: representYamlTimestamp
+});
+function resolveYamlMerge(data) {
+ return data === "<<" || data === null;
+}
+var merge = new type("tag:yaml.org,2002:merge", {
+ kind: "scalar",
+ resolve: resolveYamlMerge
+});
+var BASE64_MAP = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";
+function resolveYamlBinary(data) {
+ if (data === null) return false;
+ var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP;
+ for (idx = 0; idx < max; idx++) {
+ code = map.indexOf(data.charAt(idx));
+ if (code > 64) continue;
+ if (code < 0) return false;
+ bitlen += 6;
+ }
+ return bitlen % 8 === 0;
+}
+function constructYamlBinary(data) {
+ var idx, tailbits, input = data.replace(/[\r\n=]/g, ""), max = input.length, map = BASE64_MAP, bits = 0, result = [];
+ for (idx = 0; idx < max; idx++) {
+ if (idx % 4 === 0 && idx) {
+ result.push(bits >> 16 & 255);
+ result.push(bits >> 8 & 255);
+ result.push(bits & 255);
+ }
+ bits = bits << 6 | map.indexOf(input.charAt(idx));
+ }
+ tailbits = max % 4 * 6;
+ if (tailbits === 0) {
+ result.push(bits >> 16 & 255);
+ result.push(bits >> 8 & 255);
+ result.push(bits & 255);
+ } else if (tailbits === 18) {
+ result.push(bits >> 10 & 255);
+ result.push(bits >> 2 & 255);
+ } else if (tailbits === 12) result.push(bits >> 4 & 255);
+ return new Uint8Array(result);
+}
+function representYamlBinary(object) {
+ var result = "", bits = 0, idx, tail, max = object.length, map = BASE64_MAP;
+ for (idx = 0; idx < max; idx++) {
+ if (idx % 3 === 0 && idx) {
+ result += map[bits >> 18 & 63];
+ result += map[bits >> 12 & 63];
+ result += map[bits >> 6 & 63];
+ result += map[bits & 63];
+ }
+ bits = (bits << 8) + object[idx];
+ }
+ tail = max % 3;
+ if (tail === 0) {
+ result += map[bits >> 18 & 63];
+ result += map[bits >> 12 & 63];
+ result += map[bits >> 6 & 63];
+ result += map[bits & 63];
+ } else if (tail === 2) {
+ result += map[bits >> 10 & 63];
+ result += map[bits >> 4 & 63];
+ result += map[bits << 2 & 63];
+ result += map[64];
+ } else if (tail === 1) {
+ result += map[bits >> 2 & 63];
+ result += map[bits << 4 & 63];
+ result += map[64];
+ result += map[64];
+ }
+ return result;
+}
+function isBinary(obj) {
+ return Object.prototype.toString.call(obj) === "[object Uint8Array]";
+}
+var binary = new type("tag:yaml.org,2002:binary", {
+ kind: "scalar",
+ resolve: resolveYamlBinary,
+ construct: constructYamlBinary,
+ predicate: isBinary,
+ represent: representYamlBinary
+});
+var _hasOwnProperty$3 = Object.prototype.hasOwnProperty;
+var _toString$2 = Object.prototype.toString;
+function resolveYamlOmap(data) {
+ if (data === null) return true;
+ var objectKeys = [], index, length, pair, pairKey, pairHasKey, object = data;
+ for (index = 0, length = object.length; index < length; index += 1) {
+ pair = object[index];
+ pairHasKey = false;
+ if (_toString$2.call(pair) !== "[object Object]") return false;
+ for (pairKey in pair) if (_hasOwnProperty$3.call(pair, pairKey)) if (!pairHasKey) pairHasKey = true;
+ else return false;
+ if (!pairHasKey) return false;
+ if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey);
+ else return false;
+ }
+ return true;
+}
+function constructYamlOmap(data) {
+ return data !== null ? data : [];
+}
+var omap = new type("tag:yaml.org,2002:omap", {
+ kind: "sequence",
+ resolve: resolveYamlOmap,
+ construct: constructYamlOmap
+});
+var _toString$1 = Object.prototype.toString;
+function resolveYamlPairs(data) {
+ if (data === null) return true;
+ var index, length, pair, keys, result, object = data;
+ result = new Array(object.length);
+ for (index = 0, length = object.length; index < length; index += 1) {
+ pair = object[index];
+ if (_toString$1.call(pair) !== "[object Object]") return false;
+ keys = Object.keys(pair);
+ if (keys.length !== 1) return false;
+ result[index] = [keys[0], pair[keys[0]]];
+ }
+ return true;
+}
+function constructYamlPairs(data) {
+ if (data === null) return [];
+ var index, length, pair, keys, result, object = data;
+ result = new Array(object.length);
+ for (index = 0, length = object.length; index < length; index += 1) {
+ pair = object[index];
+ keys = Object.keys(pair);
+ result[index] = [keys[0], pair[keys[0]]];
+ }
+ return result;
+}
+var pairs = new type("tag:yaml.org,2002:pairs", {
+ kind: "sequence",
+ resolve: resolveYamlPairs,
+ construct: constructYamlPairs
+});
+var _hasOwnProperty$2 = Object.prototype.hasOwnProperty;
+function resolveYamlSet(data) {
+ if (data === null) return true;
+ var key, object = data;
+ for (key in object) if (_hasOwnProperty$2.call(object, key)) {
+ if (object[key] !== null) return false;
+ }
+ return true;
+}
+function constructYamlSet(data) {
+ return data !== null ? data : {};
+}
+var set = new type("tag:yaml.org,2002:set", {
+ kind: "mapping",
+ resolve: resolveYamlSet,
+ construct: constructYamlSet
+});
+var _default = core.extend({
+ implicit: [timestamp, merge],
+ explicit: [
+ binary,
+ omap,
+ pairs,
+ set
+ ]
+});
+var _hasOwnProperty$1 = Object.prototype.hasOwnProperty;
+var CONTEXT_FLOW_IN = 1;
+var CONTEXT_FLOW_OUT = 2;
+var CONTEXT_BLOCK_IN = 3;
+var CONTEXT_BLOCK_OUT = 4;
+var CHOMPING_CLIP = 1;
+var CHOMPING_STRIP = 2;
+var CHOMPING_KEEP = 3;
+var PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
+var PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/;
+var PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/;
+var PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i;
+var PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;
+function _class(obj) {
+ return Object.prototype.toString.call(obj);
+}
+function is_EOL(c) {
+ return c === 10 || c === 13;
+}
+function is_WHITE_SPACE(c) {
+ return c === 9 || c === 32;
+}
+function is_WS_OR_EOL(c) {
+ return c === 9 || c === 32 || c === 10 || c === 13;
+}
+function is_FLOW_INDICATOR(c) {
+ return c === 44 || c === 91 || c === 93 || c === 123 || c === 125;
+}
+function fromHexCode(c) {
+ var lc;
+ if (48 <= c && c <= 57) return c - 48;
+ lc = c | 32;
+ if (97 <= lc && lc <= 102) return lc - 97 + 10;
+ return -1;
+}
+function escapedHexLen(c) {
+ if (c === 120) return 2;
+ if (c === 117) return 4;
+ if (c === 85) return 8;
+ return 0;
+}
+function fromDecimalCode(c) {
+ if (48 <= c && c <= 57) return c - 48;
+ return -1;
+}
+function simpleEscapeSequence(c) {
+ return c === 48 ? "\0" : c === 97 ? "\x07" : c === 98 ? "\b" : c === 116 ? " " : c === 9 ? " " : c === 110 ? "\n" : c === 118 ? "\v" : c === 102 ? "\f" : c === 114 ? "\r" : c === 101 ? "\x1B" : c === 32 ? " " : c === 34 ? "\"" : c === 47 ? "/" : c === 92 ? "\\" : c === 78 ? "
" : c === 95 ? "\xA0" : c === 76 ? "\u2028" : c === 80 ? "\u2029" : "";
+}
+function charFromCodepoint(c) {
+ if (c <= 65535) return String.fromCharCode(c);
+ return String.fromCharCode((c - 65536 >> 10) + 55296, (c - 65536 & 1023) + 56320);
+}
+function setProperty(object, key, value) {
+ if (key === "__proto__") Object.defineProperty(object, key, {
+ configurable: true,
+ enumerable: true,
+ writable: true,
+ value
+ });
+ else object[key] = value;
+}
+var simpleEscapeCheck = new Array(256);
+var simpleEscapeMap = new Array(256);
+for (var i = 0; i < 256; i++) {
+ simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0;
+ simpleEscapeMap[i] = simpleEscapeSequence(i);
+}
+function State$1(input, options) {
+ this.input = input;
+ this.filename = options["filename"] || null;
+ this.schema = options["schema"] || _default;
+ this.onWarning = options["onWarning"] || null;
+ this.legacy = options["legacy"] || false;
+ this.json = options["json"] || false;
+ this.listener = options["listener"] || null;
+ this.implicitTypes = this.schema.compiledImplicit;
+ this.typeMap = this.schema.compiledTypeMap;
+ this.length = input.length;
+ this.position = 0;
+ this.line = 0;
+ this.lineStart = 0;
+ this.lineIndent = 0;
+ this.firstTabInLine = -1;
+ this.documents = [];
+}
+function generateError(state, message) {
+ var mark = {
+ name: state.filename,
+ buffer: state.input.slice(0, -1),
+ position: state.position,
+ line: state.line,
+ column: state.position - state.lineStart
+ };
+ mark.snippet = snippet(mark);
+ return new exception(message, mark);
+}
+function throwError(state, message) {
+ throw generateError(state, message);
+}
+function throwWarning(state, message) {
+ if (state.onWarning) state.onWarning.call(null, generateError(state, message));
+}
+var directiveHandlers = {
+ YAML: function handleYamlDirective(state, name, args) {
+ var match, major, minor;
+ if (state.version !== null) throwError(state, "duplication of %YAML directive");
+ if (args.length !== 1) throwError(state, "YAML directive accepts exactly one argument");
+ match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]);
+ if (match === null) throwError(state, "ill-formed argument of the YAML directive");
+ major = parseInt(match[1], 10);
+ minor = parseInt(match[2], 10);
+ if (major !== 1) throwError(state, "unacceptable YAML version of the document");
+ state.version = args[0];
+ state.checkLineBreaks = minor < 2;
+ if (minor !== 1 && minor !== 2) throwWarning(state, "unsupported YAML version of the document");
+ },
+ TAG: function handleTagDirective(state, name, args) {
+ var handle, prefix;
+ if (args.length !== 2) throwError(state, "TAG directive accepts exactly two arguments");
+ handle = args[0];
+ prefix = args[1];
+ if (!PATTERN_TAG_HANDLE.test(handle)) throwError(state, "ill-formed tag handle (first argument) of the TAG directive");
+ if (_hasOwnProperty$1.call(state.tagMap, handle)) throwError(state, "there is a previously declared suffix for \"" + handle + "\" tag handle");
+ if (!PATTERN_TAG_URI.test(prefix)) throwError(state, "ill-formed tag prefix (second argument) of the TAG directive");
+ try {
+ prefix = decodeURIComponent(prefix);
+ } catch (err) {
+ throwError(state, "tag prefix is malformed: " + prefix);
+ }
+ state.tagMap[handle] = prefix;
+ }
+};
+function captureSegment(state, start, end, checkJson) {
+ var _position, _length, _character, _result;
+ if (start < end) {
+ _result = state.input.slice(start, end);
+ if (checkJson) for (_position = 0, _length = _result.length; _position < _length; _position += 1) {
+ _character = _result.charCodeAt(_position);
+ if (!(_character === 9 || 32 <= _character && _character <= 1114111)) throwError(state, "expected valid JSON character");
+ }
+ else if (PATTERN_NON_PRINTABLE.test(_result)) throwError(state, "the stream contains non-printable characters");
+ state.result += _result;
+ }
+}
+function mergeMappings(state, destination, source, overridableKeys) {
+ var sourceKeys, key, index, quantity;
+ if (!common.isObject(source)) throwError(state, "cannot merge mappings; the provided source object is unacceptable");
+ sourceKeys = Object.keys(source);
+ for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {
+ key = sourceKeys[index];
+ if (!_hasOwnProperty$1.call(destination, key)) {
+ setProperty(destination, key, source[key]);
+ overridableKeys[key] = true;
+ }
+ }
+}
+function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startLineStart, startPos) {
+ var index, quantity;
+ if (Array.isArray(keyNode)) {
+ keyNode = Array.prototype.slice.call(keyNode);
+ for (index = 0, quantity = keyNode.length; index < quantity; index += 1) {
+ if (Array.isArray(keyNode[index])) throwError(state, "nested arrays are not supported inside keys");
+ if (typeof keyNode === "object" && _class(keyNode[index]) === "[object Object]") keyNode[index] = "[object Object]";
+ }
+ }
+ if (typeof keyNode === "object" && _class(keyNode) === "[object Object]") keyNode = "[object Object]";
+ keyNode = String(keyNode);
+ if (_result === null) _result = {};
+ if (keyTag === "tag:yaml.org,2002:merge") if (Array.isArray(valueNode)) for (index = 0, quantity = valueNode.length; index < quantity; index += 1) mergeMappings(state, _result, valueNode[index], overridableKeys);
+ else mergeMappings(state, _result, valueNode, overridableKeys);
+ else {
+ if (!state.json && !_hasOwnProperty$1.call(overridableKeys, keyNode) && _hasOwnProperty$1.call(_result, keyNode)) {
+ state.line = startLine || state.line;
+ state.lineStart = startLineStart || state.lineStart;
+ state.position = startPos || state.position;
+ throwError(state, "duplicated mapping key");
+ }
+ setProperty(_result, keyNode, valueNode);
+ delete overridableKeys[keyNode];
+ }
+ return _result;
+}
+function readLineBreak(state) {
+ var ch = state.input.charCodeAt(state.position);
+ if (ch === 10) state.position++;
+ else if (ch === 13) {
+ state.position++;
+ if (state.input.charCodeAt(state.position) === 10) state.position++;
+ } else throwError(state, "a line break is expected");
+ state.line += 1;
+ state.lineStart = state.position;
+ state.firstTabInLine = -1;
+}
+function skipSeparationSpace(state, allowComments, checkIndent) {
+ var lineBreaks = 0, ch = state.input.charCodeAt(state.position);
+ while (ch !== 0) {
+ while (is_WHITE_SPACE(ch)) {
+ if (ch === 9 && state.firstTabInLine === -1) state.firstTabInLine = state.position;
+ ch = state.input.charCodeAt(++state.position);
+ }
+ if (allowComments && ch === 35) do
+ ch = state.input.charCodeAt(++state.position);
+ while (ch !== 10 && ch !== 13 && ch !== 0);
+ if (is_EOL(ch)) {
+ readLineBreak(state);
+ ch = state.input.charCodeAt(state.position);
+ lineBreaks++;
+ state.lineIndent = 0;
+ while (ch === 32) {
+ state.lineIndent++;
+ ch = state.input.charCodeAt(++state.position);
+ }
+ } else break;
+ }
+ if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) throwWarning(state, "deficient indentation");
+ return lineBreaks;
+}
+function testDocumentSeparator(state) {
+ var _position = state.position, ch = state.input.charCodeAt(_position);
+ if ((ch === 45 || ch === 46) && ch === state.input.charCodeAt(_position + 1) && ch === state.input.charCodeAt(_position + 2)) {
+ _position += 3;
+ ch = state.input.charCodeAt(_position);
+ if (ch === 0 || is_WS_OR_EOL(ch)) return true;
+ }
+ return false;
+}
+function writeFoldedLines(state, count) {
+ if (count === 1) state.result += " ";
+ else if (count > 1) state.result += common.repeat("\n", count - 1);
+}
+function readPlainScalar(state, nodeIndent, withinFlowCollection) {
+ var preceding, following, captureStart, captureEnd, hasPendingContent, _line, _lineStart, _lineIndent, _kind = state.kind, _result = state.result, ch = state.input.charCodeAt(state.position);
+ if (is_WS_OR_EOL(ch) || is_FLOW_INDICATOR(ch) || ch === 35 || ch === 38 || ch === 42 || ch === 33 || ch === 124 || ch === 62 || ch === 39 || ch === 34 || ch === 37 || ch === 64 || ch === 96) return false;
+ if (ch === 63 || ch === 45) {
+ following = state.input.charCodeAt(state.position + 1);
+ if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) return false;
+ }
+ state.kind = "scalar";
+ state.result = "";
+ captureStart = captureEnd = state.position;
+ hasPendingContent = false;
+ while (ch !== 0) {
+ if (ch === 58) {
+ following = state.input.charCodeAt(state.position + 1);
+ if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) break;
+ } else if (ch === 35) {
+ preceding = state.input.charCodeAt(state.position - 1);
+ if (is_WS_OR_EOL(preceding)) break;
+ } else if (state.position === state.lineStart && testDocumentSeparator(state) || withinFlowCollection && is_FLOW_INDICATOR(ch)) break;
+ else if (is_EOL(ch)) {
+ _line = state.line;
+ _lineStart = state.lineStart;
+ _lineIndent = state.lineIndent;
+ skipSeparationSpace(state, false, -1);
+ if (state.lineIndent >= nodeIndent) {
+ hasPendingContent = true;
+ ch = state.input.charCodeAt(state.position);
+ continue;
+ } else {
+ state.position = captureEnd;
+ state.line = _line;
+ state.lineStart = _lineStart;
+ state.lineIndent = _lineIndent;
+ break;
+ }
+ }
+ if (hasPendingContent) {
+ captureSegment(state, captureStart, captureEnd, false);
+ writeFoldedLines(state, state.line - _line);
+ captureStart = captureEnd = state.position;
+ hasPendingContent = false;
+ }
+ if (!is_WHITE_SPACE(ch)) captureEnd = state.position + 1;
+ ch = state.input.charCodeAt(++state.position);
+ }
+ captureSegment(state, captureStart, captureEnd, false);
+ if (state.result) return true;
+ state.kind = _kind;
+ state.result = _result;
+ return false;
+}
+function readSingleQuotedScalar(state, nodeIndent) {
+ var ch = state.input.charCodeAt(state.position), captureStart, captureEnd;
+ if (ch !== 39) return false;
+ state.kind = "scalar";
+ state.result = "";
+ state.position++;
+ captureStart = captureEnd = state.position;
+ while ((ch = state.input.charCodeAt(state.position)) !== 0) if (ch === 39) {
+ captureSegment(state, captureStart, state.position, true);
+ ch = state.input.charCodeAt(++state.position);
+ if (ch === 39) {
+ captureStart = state.position;
+ state.position++;
+ captureEnd = state.position;
+ } else return true;
+ } else if (is_EOL(ch)) {
+ captureSegment(state, captureStart, captureEnd, true);
+ writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));
+ captureStart = captureEnd = state.position;
+ } else if (state.position === state.lineStart && testDocumentSeparator(state)) throwError(state, "unexpected end of the document within a single quoted scalar");
+ else {
+ state.position++;
+ captureEnd = state.position;
+ }
+ throwError(state, "unexpected end of the stream within a single quoted scalar");
+}
+function readDoubleQuotedScalar(state, nodeIndent) {
+ var captureStart, captureEnd, hexLength, hexResult, tmp, ch = state.input.charCodeAt(state.position);
+ if (ch !== 34) return false;
+ state.kind = "scalar";
+ state.result = "";
+ state.position++;
+ captureStart = captureEnd = state.position;
+ while ((ch = state.input.charCodeAt(state.position)) !== 0) if (ch === 34) {
+ captureSegment(state, captureStart, state.position, true);
+ state.position++;
+ return true;
+ } else if (ch === 92) {
+ captureSegment(state, captureStart, state.position, true);
+ ch = state.input.charCodeAt(++state.position);
+ if (is_EOL(ch)) skipSeparationSpace(state, false, nodeIndent);
+ else if (ch < 256 && simpleEscapeCheck[ch]) {
+ state.result += simpleEscapeMap[ch];
+ state.position++;
+ } else if ((tmp = escapedHexLen(ch)) > 0) {
+ hexLength = tmp;
+ hexResult = 0;
+ for (; hexLength > 0; hexLength--) {
+ ch = state.input.charCodeAt(++state.position);
+ if ((tmp = fromHexCode(ch)) >= 0) hexResult = (hexResult << 4) + tmp;
+ else throwError(state, "expected hexadecimal character");
+ }
+ state.result += charFromCodepoint(hexResult);
+ state.position++;
+ } else throwError(state, "unknown escape sequence");
+ captureStart = captureEnd = state.position;
+ } else if (is_EOL(ch)) {
+ captureSegment(state, captureStart, captureEnd, true);
+ writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));
+ captureStart = captureEnd = state.position;
+ } else if (state.position === state.lineStart && testDocumentSeparator(state)) throwError(state, "unexpected end of the document within a double quoted scalar");
+ else {
+ state.position++;
+ captureEnd = state.position;
+ }
+ throwError(state, "unexpected end of the stream within a double quoted scalar");
+}
+function readFlowCollection(state, nodeIndent) {
+ var readNext = true, _line, _lineStart, _pos, _tag = state.tag, _result, _anchor = state.anchor, following, terminator, isPair, isExplicitPair, isMapping, overridableKeys = Object.create(null), keyNode, keyTag, valueNode, ch = state.input.charCodeAt(state.position);
+ if (ch === 91) {
+ terminator = 93;
+ isMapping = false;
+ _result = [];
+ } else if (ch === 123) {
+ terminator = 125;
+ isMapping = true;
+ _result = {};
+ } else return false;
+ if (state.anchor !== null) state.anchorMap[state.anchor] = _result;
+ ch = state.input.charCodeAt(++state.position);
+ while (ch !== 0) {
+ skipSeparationSpace(state, true, nodeIndent);
+ ch = state.input.charCodeAt(state.position);
+ if (ch === terminator) {
+ state.position++;
+ state.tag = _tag;
+ state.anchor = _anchor;
+ state.kind = isMapping ? "mapping" : "sequence";
+ state.result = _result;
+ return true;
+ } else if (!readNext) throwError(state, "missed comma between flow collection entries");
+ else if (ch === 44) throwError(state, "expected the node content, but found ','");
+ keyTag = keyNode = valueNode = null;
+ isPair = isExplicitPair = false;
+ if (ch === 63) {
+ following = state.input.charCodeAt(state.position + 1);
+ if (is_WS_OR_EOL(following)) {
+ isPair = isExplicitPair = true;
+ state.position++;
+ skipSeparationSpace(state, true, nodeIndent);
+ }
+ }
+ _line = state.line;
+ _lineStart = state.lineStart;
+ _pos = state.position;
+ composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);
+ keyTag = state.tag;
+ keyNode = state.result;
+ skipSeparationSpace(state, true, nodeIndent);
+ ch = state.input.charCodeAt(state.position);
+ if ((isExplicitPair || state.line === _line) && ch === 58) {
+ isPair = true;
+ ch = state.input.charCodeAt(++state.position);
+ skipSeparationSpace(state, true, nodeIndent);
+ composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);
+ valueNode = state.result;
+ }
+ if (isMapping) storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos);
+ else if (isPair) _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos));
+ else _result.push(keyNode);
+ skipSeparationSpace(state, true, nodeIndent);
+ ch = state.input.charCodeAt(state.position);
+ if (ch === 44) {
+ readNext = true;
+ ch = state.input.charCodeAt(++state.position);
+ } else readNext = false;
+ }
+ throwError(state, "unexpected end of the stream within a flow collection");
+}
+function readBlockScalar(state, nodeIndent) {
+ var captureStart, folding, chomping = CHOMPING_CLIP, didReadContent = false, detectedIndent = false, textIndent = nodeIndent, emptyLines = 0, atMoreIndented = false, tmp, ch = state.input.charCodeAt(state.position);
+ if (ch === 124) folding = false;
+ else if (ch === 62) folding = true;
+ else return false;
+ state.kind = "scalar";
+ state.result = "";
+ while (ch !== 0) {
+ ch = state.input.charCodeAt(++state.position);
+ if (ch === 43 || ch === 45) if (CHOMPING_CLIP === chomping) chomping = ch === 43 ? CHOMPING_KEEP : CHOMPING_STRIP;
+ else throwError(state, "repeat of a chomping mode identifier");
+ else if ((tmp = fromDecimalCode(ch)) >= 0) if (tmp === 0) throwError(state, "bad explicit indentation width of a block scalar; it cannot be less than one");
+ else if (!detectedIndent) {
+ textIndent = nodeIndent + tmp - 1;
+ detectedIndent = true;
+ } else throwError(state, "repeat of an indentation width identifier");
+ else break;
+ }
+ if (is_WHITE_SPACE(ch)) {
+ do
+ ch = state.input.charCodeAt(++state.position);
+ while (is_WHITE_SPACE(ch));
+ if (ch === 35) do
+ ch = state.input.charCodeAt(++state.position);
+ while (!is_EOL(ch) && ch !== 0);
+ }
+ while (ch !== 0) {
+ readLineBreak(state);
+ state.lineIndent = 0;
+ ch = state.input.charCodeAt(state.position);
+ while ((!detectedIndent || state.lineIndent < textIndent) && ch === 32) {
+ state.lineIndent++;
+ ch = state.input.charCodeAt(++state.position);
+ }
+ if (!detectedIndent && state.lineIndent > textIndent) textIndent = state.lineIndent;
+ if (is_EOL(ch)) {
+ emptyLines++;
+ continue;
+ }
+ if (state.lineIndent < textIndent) {
+ if (chomping === CHOMPING_KEEP) state.result += common.repeat("\n", didReadContent ? 1 + emptyLines : emptyLines);
+ else if (chomping === CHOMPING_CLIP) {
+ if (didReadContent) state.result += "\n";
+ }
+ break;
+ }
+ if (folding) if (is_WHITE_SPACE(ch)) {
+ atMoreIndented = true;
+ state.result += common.repeat("\n", didReadContent ? 1 + emptyLines : emptyLines);
+ } else if (atMoreIndented) {
+ atMoreIndented = false;
+ state.result += common.repeat("\n", emptyLines + 1);
+ } else if (emptyLines === 0) {
+ if (didReadContent) state.result += " ";
+ } else state.result += common.repeat("\n", emptyLines);
+ else state.result += common.repeat("\n", didReadContent ? 1 + emptyLines : emptyLines);
+ didReadContent = true;
+ detectedIndent = true;
+ emptyLines = 0;
+ captureStart = state.position;
+ while (!is_EOL(ch) && ch !== 0) ch = state.input.charCodeAt(++state.position);
+ captureSegment(state, captureStart, state.position, false);
+ }
+ return true;
+}
+function readBlockSequence(state, nodeIndent) {
+ var _line, _tag = state.tag, _anchor = state.anchor, _result = [], following, detected = false, ch;
+ if (state.firstTabInLine !== -1) return false;
+ if (state.anchor !== null) state.anchorMap[state.anchor] = _result;
+ ch = state.input.charCodeAt(state.position);
+ while (ch !== 0) {
+ if (state.firstTabInLine !== -1) {
+ state.position = state.firstTabInLine;
+ throwError(state, "tab characters must not be used in indentation");
+ }
+ if (ch !== 45) break;
+ following = state.input.charCodeAt(state.position + 1);
+ if (!is_WS_OR_EOL(following)) break;
+ detected = true;
+ state.position++;
+ if (skipSeparationSpace(state, true, -1)) {
+ if (state.lineIndent <= nodeIndent) {
+ _result.push(null);
+ ch = state.input.charCodeAt(state.position);
+ continue;
+ }
+ }
+ _line = state.line;
+ composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true);
+ _result.push(state.result);
+ skipSeparationSpace(state, true, -1);
+ ch = state.input.charCodeAt(state.position);
+ if ((state.line === _line || state.lineIndent > nodeIndent) && ch !== 0) throwError(state, "bad indentation of a sequence entry");
+ else if (state.lineIndent < nodeIndent) break;
+ }
+ if (detected) {
+ state.tag = _tag;
+ state.anchor = _anchor;
+ state.kind = "sequence";
+ state.result = _result;
+ return true;
+ }
+ return false;
+}
+function readBlockMapping(state, nodeIndent, flowIndent) {
+ var following, allowCompact, _line, _keyLine, _keyLineStart, _keyPos, _tag = state.tag, _anchor = state.anchor, _result = {}, overridableKeys = Object.create(null), keyTag = null, keyNode = null, valueNode = null, atExplicitKey = false, detected = false, ch;
+ if (state.firstTabInLine !== -1) return false;
+ if (state.anchor !== null) state.anchorMap[state.anchor] = _result;
+ ch = state.input.charCodeAt(state.position);
+ while (ch !== 0) {
+ if (!atExplicitKey && state.firstTabInLine !== -1) {
+ state.position = state.firstTabInLine;
+ throwError(state, "tab characters must not be used in indentation");
+ }
+ following = state.input.charCodeAt(state.position + 1);
+ _line = state.line;
+ if ((ch === 63 || ch === 58) && is_WS_OR_EOL(following)) {
+ if (ch === 63) {
+ if (atExplicitKey) {
+ storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);
+ keyTag = keyNode = valueNode = null;
+ }
+ detected = true;
+ atExplicitKey = true;
+ allowCompact = true;
+ } else if (atExplicitKey) {
+ atExplicitKey = false;
+ allowCompact = true;
+ } else throwError(state, "incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line");
+ state.position += 1;
+ ch = following;
+ } else {
+ _keyLine = state.line;
+ _keyLineStart = state.lineStart;
+ _keyPos = state.position;
+ if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) break;
+ if (state.line === _line) {
+ ch = state.input.charCodeAt(state.position);
+ while (is_WHITE_SPACE(ch)) ch = state.input.charCodeAt(++state.position);
+ if (ch === 58) {
+ ch = state.input.charCodeAt(++state.position);
+ if (!is_WS_OR_EOL(ch)) throwError(state, "a whitespace character is expected after the key-value separator within a block mapping");
+ if (atExplicitKey) {
+ storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);
+ keyTag = keyNode = valueNode = null;
+ }
+ detected = true;
+ atExplicitKey = false;
+ allowCompact = false;
+ keyTag = state.tag;
+ keyNode = state.result;
+ } else if (detected) throwError(state, "can not read an implicit mapping pair; a colon is missed");
+ else {
+ state.tag = _tag;
+ state.anchor = _anchor;
+ return true;
+ }
+ } else if (detected) throwError(state, "can not read a block mapping entry; a multiline key may not be an implicit key");
+ else {
+ state.tag = _tag;
+ state.anchor = _anchor;
+ return true;
+ }
+ }
+ if (state.line === _line || state.lineIndent > nodeIndent) {
+ if (atExplicitKey) {
+ _keyLine = state.line;
+ _keyLineStart = state.lineStart;
+ _keyPos = state.position;
+ }
+ if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) if (atExplicitKey) keyNode = state.result;
+ else valueNode = state.result;
+ if (!atExplicitKey) {
+ storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos);
+ keyTag = keyNode = valueNode = null;
+ }
+ skipSeparationSpace(state, true, -1);
+ ch = state.input.charCodeAt(state.position);
+ }
+ if ((state.line === _line || state.lineIndent > nodeIndent) && ch !== 0) throwError(state, "bad indentation of a mapping entry");
+ else if (state.lineIndent < nodeIndent) break;
+ }
+ if (atExplicitKey) storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);
+ if (detected) {
+ state.tag = _tag;
+ state.anchor = _anchor;
+ state.kind = "mapping";
+ state.result = _result;
+ }
+ return detected;
+}
+function readTagProperty(state) {
+ var _position, isVerbatim = false, isNamed = false, tagHandle, tagName, ch = state.input.charCodeAt(state.position);
+ if (ch !== 33) return false;
+ if (state.tag !== null) throwError(state, "duplication of a tag property");
+ ch = state.input.charCodeAt(++state.position);
+ if (ch === 60) {
+ isVerbatim = true;
+ ch = state.input.charCodeAt(++state.position);
+ } else if (ch === 33) {
+ isNamed = true;
+ tagHandle = "!!";
+ ch = state.input.charCodeAt(++state.position);
+ } else tagHandle = "!";
+ _position = state.position;
+ if (isVerbatim) {
+ do
+ ch = state.input.charCodeAt(++state.position);
+ while (ch !== 0 && ch !== 62);
+ if (state.position < state.length) {
+ tagName = state.input.slice(_position, state.position);
+ ch = state.input.charCodeAt(++state.position);
+ } else throwError(state, "unexpected end of the stream within a verbatim tag");
+ } else {
+ while (ch !== 0 && !is_WS_OR_EOL(ch)) {
+ if (ch === 33) if (!isNamed) {
+ tagHandle = state.input.slice(_position - 1, state.position + 1);
+ if (!PATTERN_TAG_HANDLE.test(tagHandle)) throwError(state, "named tag handle cannot contain such characters");
+ isNamed = true;
+ _position = state.position + 1;
+ } else throwError(state, "tag suffix cannot contain exclamation marks");
+ ch = state.input.charCodeAt(++state.position);
+ }
+ tagName = state.input.slice(_position, state.position);
+ if (PATTERN_FLOW_INDICATORS.test(tagName)) throwError(state, "tag suffix cannot contain flow indicator characters");
+ }
+ if (tagName && !PATTERN_TAG_URI.test(tagName)) throwError(state, "tag name cannot contain such characters: " + tagName);
+ try {
+ tagName = decodeURIComponent(tagName);
+ } catch (err) {
+ throwError(state, "tag name is malformed: " + tagName);
+ }
+ if (isVerbatim) state.tag = tagName;
+ else if (_hasOwnProperty$1.call(state.tagMap, tagHandle)) state.tag = state.tagMap[tagHandle] + tagName;
+ else if (tagHandle === "!") state.tag = "!" + tagName;
+ else if (tagHandle === "!!") state.tag = "tag:yaml.org,2002:" + tagName;
+ else throwError(state, "undeclared tag handle \"" + tagHandle + "\"");
+ return true;
+}
+function readAnchorProperty(state) {
+ var _position, ch = state.input.charCodeAt(state.position);
+ if (ch !== 38) return false;
+ if (state.anchor !== null) throwError(state, "duplication of an anchor property");
+ ch = state.input.charCodeAt(++state.position);
+ _position = state.position;
+ while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) ch = state.input.charCodeAt(++state.position);
+ if (state.position === _position) throwError(state, "name of an anchor node must contain at least one character");
+ state.anchor = state.input.slice(_position, state.position);
+ return true;
+}
+function readAlias(state) {
+ var _position, alias, ch = state.input.charCodeAt(state.position);
+ if (ch !== 42) return false;
+ ch = state.input.charCodeAt(++state.position);
+ _position = state.position;
+ while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) ch = state.input.charCodeAt(++state.position);
+ if (state.position === _position) throwError(state, "name of an alias node must contain at least one character");
+ alias = state.input.slice(_position, state.position);
+ if (!_hasOwnProperty$1.call(state.anchorMap, alias)) throwError(state, "unidentified alias \"" + alias + "\"");
+ state.result = state.anchorMap[alias];
+ skipSeparationSpace(state, true, -1);
+ return true;
+}
+function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) {
+ var allowBlockStyles, allowBlockScalars, allowBlockCollections, indentStatus = 1, atNewLine = false, hasContent = false, typeIndex, typeQuantity, typeList, type, flowIndent, blockIndent;
+ if (state.listener !== null) state.listener("open", state);
+ state.tag = null;
+ state.anchor = null;
+ state.kind = null;
+ state.result = null;
+ allowBlockStyles = allowBlockScalars = allowBlockCollections = CONTEXT_BLOCK_OUT === nodeContext || CONTEXT_BLOCK_IN === nodeContext;
+ if (allowToSeek) {
+ if (skipSeparationSpace(state, true, -1)) {
+ atNewLine = true;
+ if (state.lineIndent > parentIndent) indentStatus = 1;
+ else if (state.lineIndent === parentIndent) indentStatus = 0;
+ else if (state.lineIndent < parentIndent) indentStatus = -1;
+ }
+ }
+ if (indentStatus === 1) while (readTagProperty(state) || readAnchorProperty(state)) if (skipSeparationSpace(state, true, -1)) {
+ atNewLine = true;
+ allowBlockCollections = allowBlockStyles;
+ if (state.lineIndent > parentIndent) indentStatus = 1;
+ else if (state.lineIndent === parentIndent) indentStatus = 0;
+ else if (state.lineIndent < parentIndent) indentStatus = -1;
+ } else allowBlockCollections = false;
+ if (allowBlockCollections) allowBlockCollections = atNewLine || allowCompact;
+ if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {
+ if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) flowIndent = parentIndent;
+ else flowIndent = parentIndent + 1;
+ blockIndent = state.position - state.lineStart;
+ if (indentStatus === 1) if (allowBlockCollections && (readBlockSequence(state, blockIndent) || readBlockMapping(state, blockIndent, flowIndent)) || readFlowCollection(state, flowIndent)) hasContent = true;
+ else {
+ if (allowBlockScalars && readBlockScalar(state, flowIndent) || readSingleQuotedScalar(state, flowIndent) || readDoubleQuotedScalar(state, flowIndent)) hasContent = true;
+ else if (readAlias(state)) {
+ hasContent = true;
+ if (state.tag !== null || state.anchor !== null) throwError(state, "alias node should not have any properties");
+ } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {
+ hasContent = true;
+ if (state.tag === null) state.tag = "?";
+ }
+ if (state.anchor !== null) state.anchorMap[state.anchor] = state.result;
+ }
+ else if (indentStatus === 0) hasContent = allowBlockCollections && readBlockSequence(state, blockIndent);
+ }
+ if (state.tag === null) {
+ if (state.anchor !== null) state.anchorMap[state.anchor] = state.result;
+ } else if (state.tag === "?") {
+ if (state.result !== null && state.kind !== "scalar") throwError(state, "unacceptable node kind for !> tag; it should be \"scalar\", not \"" + state.kind + "\"");
+ for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) {
+ type = state.implicitTypes[typeIndex];
+ if (type.resolve(state.result)) {
+ state.result = type.construct(state.result);
+ state.tag = type.tag;
+ if (state.anchor !== null) state.anchorMap[state.anchor] = state.result;
+ break;
+ }
+ }
+ } else if (state.tag !== "!") {
+ if (_hasOwnProperty$1.call(state.typeMap[state.kind || "fallback"], state.tag)) type = state.typeMap[state.kind || "fallback"][state.tag];
+ else {
+ type = null;
+ typeList = state.typeMap.multi[state.kind || "fallback"];
+ for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) {
+ type = typeList[typeIndex];
+ break;
+ }
+ }
+ if (!type) throwError(state, "unknown tag !<" + state.tag + ">");
+ if (state.result !== null && type.kind !== state.kind) throwError(state, "unacceptable node kind for !<" + state.tag + "> tag; it should be \"" + type.kind + "\", not \"" + state.kind + "\"");
+ if (!type.resolve(state.result, state.tag)) throwError(state, "cannot resolve a node with !<" + state.tag + "> explicit tag");
+ else {
+ state.result = type.construct(state.result, state.tag);
+ if (state.anchor !== null) state.anchorMap[state.anchor] = state.result;
+ }
+ }
+ if (state.listener !== null) state.listener("close", state);
+ return state.tag !== null || state.anchor !== null || hasContent;
+}
+function readDocument(state) {
+ var documentStart = state.position, _position, directiveName, directiveArgs, hasDirectives = false, ch;
+ state.version = null;
+ state.checkLineBreaks = state.legacy;
+ state.tagMap = Object.create(null);
+ state.anchorMap = Object.create(null);
+ while ((ch = state.input.charCodeAt(state.position)) !== 0) {
+ skipSeparationSpace(state, true, -1);
+ ch = state.input.charCodeAt(state.position);
+ if (state.lineIndent > 0 || ch !== 37) break;
+ hasDirectives = true;
+ ch = state.input.charCodeAt(++state.position);
+ _position = state.position;
+ while (ch !== 0 && !is_WS_OR_EOL(ch)) ch = state.input.charCodeAt(++state.position);
+ directiveName = state.input.slice(_position, state.position);
+ directiveArgs = [];
+ if (directiveName.length < 1) throwError(state, "directive name must not be less than one character in length");
+ while (ch !== 0) {
+ while (is_WHITE_SPACE(ch)) ch = state.input.charCodeAt(++state.position);
+ if (ch === 35) {
+ do
+ ch = state.input.charCodeAt(++state.position);
+ while (ch !== 0 && !is_EOL(ch));
+ break;
+ }
+ if (is_EOL(ch)) break;
+ _position = state.position;
+ while (ch !== 0 && !is_WS_OR_EOL(ch)) ch = state.input.charCodeAt(++state.position);
+ directiveArgs.push(state.input.slice(_position, state.position));
+ }
+ if (ch !== 0) readLineBreak(state);
+ if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) directiveHandlers[directiveName](state, directiveName, directiveArgs);
+ else throwWarning(state, "unknown document directive \"" + directiveName + "\"");
+ }
+ skipSeparationSpace(state, true, -1);
+ if (state.lineIndent === 0 && state.input.charCodeAt(state.position) === 45 && state.input.charCodeAt(state.position + 1) === 45 && state.input.charCodeAt(state.position + 2) === 45) {
+ state.position += 3;
+ skipSeparationSpace(state, true, -1);
+ } else if (hasDirectives) throwError(state, "directives end mark is expected");
+ composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);
+ skipSeparationSpace(state, true, -1);
+ if (state.checkLineBreaks && PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) throwWarning(state, "non-ASCII line breaks are interpreted as content");
+ state.documents.push(state.result);
+ if (state.position === state.lineStart && testDocumentSeparator(state)) {
+ if (state.input.charCodeAt(state.position) === 46) {
+ state.position += 3;
+ skipSeparationSpace(state, true, -1);
+ }
+ return;
+ }
+ if (state.position < state.length - 1) throwError(state, "end of the stream or a document separator is expected");
+ else return;
+}
+function loadDocuments(input, options) {
+ input = String(input);
+ options = options || {};
+ if (input.length !== 0) {
+ if (input.charCodeAt(input.length - 1) !== 10 && input.charCodeAt(input.length - 1) !== 13) input += "\n";
+ if (input.charCodeAt(0) === 65279) input = input.slice(1);
+ }
+ var state = new State$1(input, options);
+ var nullpos = input.indexOf("\0");
+ if (nullpos !== -1) {
+ state.position = nullpos;
+ throwError(state, "null byte is not allowed in input");
+ }
+ state.input += "\0";
+ while (state.input.charCodeAt(state.position) === 32) {
+ state.lineIndent += 1;
+ state.position += 1;
+ }
+ while (state.position < state.length - 1) readDocument(state);
+ return state.documents;
+}
+function loadAll$1(input, iterator, options) {
+ if (iterator !== null && typeof iterator === "object" && typeof options === "undefined") {
+ options = iterator;
+ iterator = null;
+ }
+ var documents = loadDocuments(input, options);
+ if (typeof iterator !== "function") return documents;
+ for (var index = 0, length = documents.length; index < length; index += 1) iterator(documents[index]);
+}
+function load$1(input, options) {
+ var documents = loadDocuments(input, options);
+ if (documents.length === 0) return;
+ else if (documents.length === 1) return documents[0];
+ throw new exception("expected a single document in the stream, but found more");
+}
+var loader = {
+ loadAll: loadAll$1,
+ load: load$1
+};
+var _toString = Object.prototype.toString;
+var _hasOwnProperty = Object.prototype.hasOwnProperty;
+var CHAR_BOM = 65279;
+var CHAR_TAB = 9;
+var CHAR_LINE_FEED = 10;
+var CHAR_CARRIAGE_RETURN = 13;
+var CHAR_SPACE = 32;
+var CHAR_EXCLAMATION = 33;
+var CHAR_DOUBLE_QUOTE = 34;
+var CHAR_SHARP = 35;
+var CHAR_PERCENT = 37;
+var CHAR_AMPERSAND = 38;
+var CHAR_SINGLE_QUOTE = 39;
+var CHAR_ASTERISK = 42;
+var CHAR_COMMA = 44;
+var CHAR_MINUS = 45;
+var CHAR_COLON = 58;
+var CHAR_EQUALS = 61;
+var CHAR_GREATER_THAN = 62;
+var CHAR_QUESTION = 63;
+var CHAR_COMMERCIAL_AT = 64;
+var CHAR_LEFT_SQUARE_BRACKET = 91;
+var CHAR_RIGHT_SQUARE_BRACKET = 93;
+var CHAR_GRAVE_ACCENT = 96;
+var CHAR_LEFT_CURLY_BRACKET = 123;
+var CHAR_VERTICAL_LINE = 124;
+var CHAR_RIGHT_CURLY_BRACKET = 125;
+var ESCAPE_SEQUENCES = {};
+ESCAPE_SEQUENCES[0] = "\\0";
+ESCAPE_SEQUENCES[7] = "\\a";
+ESCAPE_SEQUENCES[8] = "\\b";
+ESCAPE_SEQUENCES[9] = "\\t";
+ESCAPE_SEQUENCES[10] = "\\n";
+ESCAPE_SEQUENCES[11] = "\\v";
+ESCAPE_SEQUENCES[12] = "\\f";
+ESCAPE_SEQUENCES[13] = "\\r";
+ESCAPE_SEQUENCES[27] = "\\e";
+ESCAPE_SEQUENCES[34] = "\\\"";
+ESCAPE_SEQUENCES[92] = "\\\\";
+ESCAPE_SEQUENCES[133] = "\\N";
+ESCAPE_SEQUENCES[160] = "\\_";
+ESCAPE_SEQUENCES[8232] = "\\L";
+ESCAPE_SEQUENCES[8233] = "\\P";
+var DEPRECATED_BOOLEANS_SYNTAX = [
+ "y",
+ "Y",
+ "yes",
+ "Yes",
+ "YES",
+ "on",
+ "On",
+ "ON",
+ "n",
+ "N",
+ "no",
+ "No",
+ "NO",
+ "off",
+ "Off",
+ "OFF"
+];
+var DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;
+function compileStyleMap(schema, map) {
+ var result, keys, index, length, tag, style, type;
+ if (map === null) return {};
+ result = {};
+ keys = Object.keys(map);
+ for (index = 0, length = keys.length; index < length; index += 1) {
+ tag = keys[index];
+ style = String(map[tag]);
+ if (tag.slice(0, 2) === "!!") tag = "tag:yaml.org,2002:" + tag.slice(2);
+ type = schema.compiledTypeMap["fallback"][tag];
+ if (type && _hasOwnProperty.call(type.styleAliases, style)) style = type.styleAliases[style];
+ result[tag] = style;
+ }
+ return result;
+}
+function encodeHex(character) {
+ var string = character.toString(16).toUpperCase(), handle, length;
+ if (character <= 255) {
+ handle = "x";
+ length = 2;
+ } else if (character <= 65535) {
+ handle = "u";
+ length = 4;
+ } else if (character <= 4294967295) {
+ handle = "U";
+ length = 8;
+ } else throw new exception("code point within a string may not be greater than 0xFFFFFFFF");
+ return "\\" + handle + common.repeat("0", length - string.length) + string;
+}
+var QUOTING_TYPE_SINGLE = 1, QUOTING_TYPE_DOUBLE = 2;
+function State(options) {
+ this.schema = options["schema"] || _default;
+ this.indent = Math.max(1, options["indent"] || 2);
+ this.noArrayIndent = options["noArrayIndent"] || false;
+ this.skipInvalid = options["skipInvalid"] || false;
+ this.flowLevel = common.isNothing(options["flowLevel"]) ? -1 : options["flowLevel"];
+ this.styleMap = compileStyleMap(this.schema, options["styles"] || null);
+ this.sortKeys = options["sortKeys"] || false;
+ this.lineWidth = options["lineWidth"] || 80;
+ this.noRefs = options["noRefs"] || false;
+ this.noCompatMode = options["noCompatMode"] || false;
+ this.condenseFlow = options["condenseFlow"] || false;
+ this.quotingType = options["quotingType"] === "\"" ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE;
+ this.forceQuotes = options["forceQuotes"] || false;
+ this.replacer = typeof options["replacer"] === "function" ? options["replacer"] : null;
+ this.implicitTypes = this.schema.compiledImplicit;
+ this.explicitTypes = this.schema.compiledExplicit;
+ this.tag = null;
+ this.result = "";
+ this.duplicates = [];
+ this.usedDuplicates = null;
+}
+function indentString(string, spaces) {
+ var ind = common.repeat(" ", spaces), position = 0, next = -1, result = "", line, length = string.length;
+ while (position < length) {
+ next = string.indexOf("\n", position);
+ if (next === -1) {
+ line = string.slice(position);
+ position = length;
+ } else {
+ line = string.slice(position, next + 1);
+ position = next + 1;
+ }
+ if (line.length && line !== "\n") result += ind;
+ result += line;
+ }
+ return result;
+}
+function generateNextLine(state, level) {
+ return "\n" + common.repeat(" ", state.indent * level);
+}
+function testImplicitResolving(state, str) {
+ var index, length, type;
+ for (index = 0, length = state.implicitTypes.length; index < length; index += 1) {
+ type = state.implicitTypes[index];
+ if (type.resolve(str)) return true;
+ }
+ return false;
+}
+function isWhitespace(c) {
+ return c === CHAR_SPACE || c === CHAR_TAB;
+}
+function isPrintable(c) {
+ return 32 <= c && c <= 126 || 161 <= c && c <= 55295 && c !== 8232 && c !== 8233 || 57344 <= c && c <= 65533 && c !== CHAR_BOM || 65536 <= c && c <= 1114111;
+}
+function isNsCharOrWhitespace(c) {
+ return isPrintable(c) && c !== CHAR_BOM && c !== CHAR_CARRIAGE_RETURN && c !== CHAR_LINE_FEED;
+}
+function isPlainSafe(c, prev, inblock) {
+ var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c);
+ var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c);
+ return (inblock ? cIsNsCharOrWhitespace : cIsNsCharOrWhitespace && c !== CHAR_COMMA && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET) && c !== CHAR_SHARP && !(prev === CHAR_COLON && !cIsNsChar) || isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP || prev === CHAR_COLON && cIsNsChar;
+}
+function isPlainSafeFirst(c) {
+ return isPrintable(c) && c !== CHAR_BOM && !isWhitespace(c) && c !== CHAR_MINUS && c !== CHAR_QUESTION && c !== CHAR_COLON && c !== CHAR_COMMA && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET && c !== CHAR_SHARP && c !== CHAR_AMPERSAND && c !== CHAR_ASTERISK && c !== CHAR_EXCLAMATION && c !== CHAR_VERTICAL_LINE && c !== CHAR_EQUALS && c !== CHAR_GREATER_THAN && c !== CHAR_SINGLE_QUOTE && c !== CHAR_DOUBLE_QUOTE && c !== CHAR_PERCENT && c !== CHAR_COMMERCIAL_AT && c !== CHAR_GRAVE_ACCENT;
+}
+function isPlainSafeLast(c) {
+ return !isWhitespace(c) && c !== CHAR_COLON;
+}
+function codePointAt(string, pos) {
+ var first = string.charCodeAt(pos), second;
+ if (first >= 55296 && first <= 56319 && pos + 1 < string.length) {
+ second = string.charCodeAt(pos + 1);
+ if (second >= 56320 && second <= 57343) return (first - 55296) * 1024 + second - 56320 + 65536;
+ }
+ return first;
+}
+function needIndentIndicator(string) {
+ return /^\n* /.test(string);
+}
+var STYLE_PLAIN = 1, STYLE_SINGLE = 2, STYLE_LITERAL = 3, STYLE_FOLDED = 4, STYLE_DOUBLE = 5;
+function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType, quotingType, forceQuotes, inblock) {
+ var i;
+ var char = 0;
+ var prevChar = null;
+ var hasLineBreak = false;
+ var hasFoldableLine = false;
+ var shouldTrackWidth = lineWidth !== -1;
+ var previousLineBreak = -1;
+ var plain = isPlainSafeFirst(codePointAt(string, 0)) && isPlainSafeLast(codePointAt(string, string.length - 1));
+ if (singleLineOnly || forceQuotes) for (i = 0; i < string.length; char >= 65536 ? i += 2 : i++) {
+ char = codePointAt(string, i);
+ if (!isPrintable(char)) return STYLE_DOUBLE;
+ plain = plain && isPlainSafe(char, prevChar, inblock);
+ prevChar = char;
+ }
+ else {
+ for (i = 0; i < string.length; char >= 65536 ? i += 2 : i++) {
+ char = codePointAt(string, i);
+ if (char === CHAR_LINE_FEED) {
+ hasLineBreak = true;
+ if (shouldTrackWidth) {
+ hasFoldableLine = hasFoldableLine || i - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== " ";
+ previousLineBreak = i;
+ }
+ } else if (!isPrintable(char)) return STYLE_DOUBLE;
+ plain = plain && isPlainSafe(char, prevChar, inblock);
+ prevChar = char;
+ }
+ hasFoldableLine = hasFoldableLine || shouldTrackWidth && i - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== " ";
+ }
+ if (!hasLineBreak && !hasFoldableLine) {
+ if (plain && !forceQuotes && !testAmbiguousType(string)) return STYLE_PLAIN;
+ return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;
+ }
+ if (indentPerLevel > 9 && needIndentIndicator(string)) return STYLE_DOUBLE;
+ if (!forceQuotes) return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL;
+ return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;
+}
+function writeScalar(state, string, level, iskey, inblock) {
+ state.dump = function() {
+ if (string.length === 0) return state.quotingType === QUOTING_TYPE_DOUBLE ? "\"\"" : "''";
+ if (!state.noCompatMode) {
+ if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) return state.quotingType === QUOTING_TYPE_DOUBLE ? "\"" + string + "\"" : "'" + string + "'";
+ }
+ var indent = state.indent * Math.max(1, level);
+ var lineWidth = state.lineWidth === -1 ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent);
+ var singleLineOnly = iskey || state.flowLevel > -1 && level >= state.flowLevel;
+ function testAmbiguity(string) {
+ return testImplicitResolving(state, string);
+ }
+ switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)) {
+ case STYLE_PLAIN: return string;
+ case STYLE_SINGLE: return "'" + string.replace(/'/g, "''") + "'";
+ case STYLE_LITERAL: return "|" + blockHeader(string, state.indent) + dropEndingNewline(indentString(string, indent));
+ case STYLE_FOLDED: return ">" + blockHeader(string, state.indent) + dropEndingNewline(indentString(foldString(string, lineWidth), indent));
+ case STYLE_DOUBLE: return "\"" + escapeString(string) + "\"";
+ default: throw new exception("impossible error: invalid scalar style");
+ }
+ }();
+}
+function blockHeader(string, indentPerLevel) {
+ var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : "";
+ var clip = string[string.length - 1] === "\n";
+ return indentIndicator + (clip && (string[string.length - 2] === "\n" || string === "\n") ? "+" : clip ? "" : "-") + "\n";
+}
+function dropEndingNewline(string) {
+ return string[string.length - 1] === "\n" ? string.slice(0, -1) : string;
+}
+function foldString(string, width) {
+ var lineRe = /(\n+)([^\n]*)/g;
+ var result = function() {
+ var nextLF = string.indexOf("\n");
+ nextLF = nextLF !== -1 ? nextLF : string.length;
+ lineRe.lastIndex = nextLF;
+ return foldLine(string.slice(0, nextLF), width);
+ }();
+ var prevMoreIndented = string[0] === "\n" || string[0] === " ";
+ var moreIndented;
+ var match;
+ while (match = lineRe.exec(string)) {
+ var prefix = match[1], line = match[2];
+ moreIndented = line[0] === " ";
+ result += prefix + (!prevMoreIndented && !moreIndented && line !== "" ? "\n" : "") + foldLine(line, width);
+ prevMoreIndented = moreIndented;
+ }
+ return result;
+}
+function foldLine(line, width) {
+ if (line === "" || line[0] === " ") return line;
+ var breakRe = / [^ ]/g;
+ var match;
+ var start = 0, end, curr = 0, next = 0;
+ var result = "";
+ while (match = breakRe.exec(line)) {
+ next = match.index;
+ if (next - start > width) {
+ end = curr > start ? curr : next;
+ result += "\n" + line.slice(start, end);
+ start = end + 1;
+ }
+ curr = next;
+ }
+ result += "\n";
+ if (line.length - start > width && curr > start) result += line.slice(start, curr) + "\n" + line.slice(curr + 1);
+ else result += line.slice(start);
+ return result.slice(1);
+}
+function escapeString(string) {
+ var result = "";
+ var char = 0;
+ var escapeSeq;
+ for (var i = 0; i < string.length; char >= 65536 ? i += 2 : i++) {
+ char = codePointAt(string, i);
+ escapeSeq = ESCAPE_SEQUENCES[char];
+ if (!escapeSeq && isPrintable(char)) {
+ result += string[i];
+ if (char >= 65536) result += string[i + 1];
+ } else result += escapeSeq || encodeHex(char);
+ }
+ return result;
+}
+function writeFlowSequence(state, level, object) {
+ var _result = "", _tag = state.tag, index, length, value;
+ for (index = 0, length = object.length; index < length; index += 1) {
+ value = object[index];
+ if (state.replacer) value = state.replacer.call(object, String(index), value);
+ if (writeNode(state, level, value, false, false) || typeof value === "undefined" && writeNode(state, level, null, false, false)) {
+ if (_result !== "") _result += "," + (!state.condenseFlow ? " " : "");
+ _result += state.dump;
+ }
+ }
+ state.tag = _tag;
+ state.dump = "[" + _result + "]";
+}
+function writeBlockSequence(state, level, object, compact) {
+ var _result = "", _tag = state.tag, index, length, value;
+ for (index = 0, length = object.length; index < length; index += 1) {
+ value = object[index];
+ if (state.replacer) value = state.replacer.call(object, String(index), value);
+ if (writeNode(state, level + 1, value, true, true, false, true) || typeof value === "undefined" && writeNode(state, level + 1, null, true, true, false, true)) {
+ if (!compact || _result !== "") _result += generateNextLine(state, level);
+ if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) _result += "-";
+ else _result += "- ";
+ _result += state.dump;
+ }
+ }
+ state.tag = _tag;
+ state.dump = _result || "[]";
+}
+function writeFlowMapping(state, level, object) {
+ var _result = "", _tag = state.tag, objectKeyList = Object.keys(object), index, length, objectKey, objectValue, pairBuffer;
+ for (index = 0, length = objectKeyList.length; index < length; index += 1) {
+ pairBuffer = "";
+ if (_result !== "") pairBuffer += ", ";
+ if (state.condenseFlow) pairBuffer += "\"";
+ objectKey = objectKeyList[index];
+ objectValue = object[objectKey];
+ if (state.replacer) objectValue = state.replacer.call(object, objectKey, objectValue);
+ if (!writeNode(state, level, objectKey, false, false)) continue;
+ if (state.dump.length > 1024) pairBuffer += "? ";
+ pairBuffer += state.dump + (state.condenseFlow ? "\"" : "") + ":" + (state.condenseFlow ? "" : " ");
+ if (!writeNode(state, level, objectValue, false, false)) continue;
+ pairBuffer += state.dump;
+ _result += pairBuffer;
+ }
+ state.tag = _tag;
+ state.dump = "{" + _result + "}";
+}
+function writeBlockMapping(state, level, object, compact) {
+ var _result = "", _tag = state.tag, objectKeyList = Object.keys(object), index, length, objectKey, objectValue, explicitPair, pairBuffer;
+ if (state.sortKeys === true) objectKeyList.sort();
+ else if (typeof state.sortKeys === "function") objectKeyList.sort(state.sortKeys);
+ else if (state.sortKeys) throw new exception("sortKeys must be a boolean or a function");
+ for (index = 0, length = objectKeyList.length; index < length; index += 1) {
+ pairBuffer = "";
+ if (!compact || _result !== "") pairBuffer += generateNextLine(state, level);
+ objectKey = objectKeyList[index];
+ objectValue = object[objectKey];
+ if (state.replacer) objectValue = state.replacer.call(object, objectKey, objectValue);
+ if (!writeNode(state, level + 1, objectKey, true, true, true)) continue;
+ explicitPair = state.tag !== null && state.tag !== "?" || state.dump && state.dump.length > 1024;
+ if (explicitPair) if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) pairBuffer += "?";
+ else pairBuffer += "? ";
+ pairBuffer += state.dump;
+ if (explicitPair) pairBuffer += generateNextLine(state, level);
+ if (!writeNode(state, level + 1, objectValue, true, explicitPair)) continue;
+ if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) pairBuffer += ":";
+ else pairBuffer += ": ";
+ pairBuffer += state.dump;
+ _result += pairBuffer;
+ }
+ state.tag = _tag;
+ state.dump = _result || "{}";
+}
+function detectType(state, object, explicit) {
+ var _result, typeList = explicit ? state.explicitTypes : state.implicitTypes, index, length, type, style;
+ for (index = 0, length = typeList.length; index < length; index += 1) {
+ type = typeList[index];
+ if ((type.instanceOf || type.predicate) && (!type.instanceOf || typeof object === "object" && object instanceof type.instanceOf) && (!type.predicate || type.predicate(object))) {
+ if (explicit) if (type.multi && type.representName) state.tag = type.representName(object);
+ else state.tag = type.tag;
+ else state.tag = "?";
+ if (type.represent) {
+ style = state.styleMap[type.tag] || type.defaultStyle;
+ if (_toString.call(type.represent) === "[object Function]") _result = type.represent(object, style);
+ else if (_hasOwnProperty.call(type.represent, style)) _result = type.represent[style](object, style);
+ else throw new exception("!<" + type.tag + "> tag resolver accepts not \"" + style + "\" style");
+ state.dump = _result;
+ }
+ return true;
+ }
+ }
+ return false;
+}
+function writeNode(state, level, object, block, compact, iskey, isblockseq) {
+ state.tag = null;
+ state.dump = object;
+ if (!detectType(state, object, false)) detectType(state, object, true);
+ var type = _toString.call(state.dump);
+ var inblock = block;
+ var tagStr;
+ if (block) block = state.flowLevel < 0 || state.flowLevel > level;
+ var objectOrArray = type === "[object Object]" || type === "[object Array]", duplicateIndex, duplicate;
+ if (objectOrArray) {
+ duplicateIndex = state.duplicates.indexOf(object);
+ duplicate = duplicateIndex !== -1;
+ }
+ if (state.tag !== null && state.tag !== "?" || duplicate || state.indent !== 2 && level > 0) compact = false;
+ if (duplicate && state.usedDuplicates[duplicateIndex]) state.dump = "*ref_" + duplicateIndex;
+ else {
+ if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) state.usedDuplicates[duplicateIndex] = true;
+ if (type === "[object Object]") if (block && Object.keys(state.dump).length !== 0) {
+ writeBlockMapping(state, level, state.dump, compact);
+ if (duplicate) state.dump = "&ref_" + duplicateIndex + state.dump;
+ } else {
+ writeFlowMapping(state, level, state.dump);
+ if (duplicate) state.dump = "&ref_" + duplicateIndex + " " + state.dump;
+ }
+ else if (type === "[object Array]") if (block && state.dump.length !== 0) {
+ if (state.noArrayIndent && !isblockseq && level > 0) writeBlockSequence(state, level - 1, state.dump, compact);
+ else writeBlockSequence(state, level, state.dump, compact);
+ if (duplicate) state.dump = "&ref_" + duplicateIndex + state.dump;
+ } else {
+ writeFlowSequence(state, level, state.dump);
+ if (duplicate) state.dump = "&ref_" + duplicateIndex + " " + state.dump;
+ }
+ else if (type === "[object String]") {
+ if (state.tag !== "?") writeScalar(state, state.dump, level, iskey, inblock);
+ } else if (type === "[object Undefined]") return false;
+ else {
+ if (state.skipInvalid) return false;
+ throw new exception("unacceptable kind of an object to dump " + type);
+ }
+ if (state.tag !== null && state.tag !== "?") {
+ tagStr = encodeURI(state.tag[0] === "!" ? state.tag.slice(1) : state.tag).replace(/!/g, "%21");
+ if (state.tag[0] === "!") tagStr = "!" + tagStr;
+ else if (tagStr.slice(0, 18) === "tag:yaml.org,2002:") tagStr = "!!" + tagStr.slice(18);
+ else tagStr = "!<" + tagStr + ">";
+ state.dump = tagStr + " " + state.dump;
+ }
+ }
+ return true;
+}
+function getDuplicateReferences(object, state) {
+ var objects = [], duplicatesIndexes = [], index, length;
+ inspectNode(object, objects, duplicatesIndexes);
+ for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) state.duplicates.push(objects[duplicatesIndexes[index]]);
+ state.usedDuplicates = new Array(length);
+}
+function inspectNode(object, objects, duplicatesIndexes) {
+ var objectKeyList, index, length;
+ if (object !== null && typeof object === "object") {
+ index = objects.indexOf(object);
+ if (index !== -1) {
+ if (duplicatesIndexes.indexOf(index) === -1) duplicatesIndexes.push(index);
+ } else {
+ objects.push(object);
+ if (Array.isArray(object)) for (index = 0, length = object.length; index < length; index += 1) inspectNode(object[index], objects, duplicatesIndexes);
+ else {
+ objectKeyList = Object.keys(object);
+ for (index = 0, length = objectKeyList.length; index < length; index += 1) inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes);
+ }
+ }
+ }
+}
+function dump$1(input, options) {
+ options = options || {};
+ var state = new State(options);
+ if (!state.noRefs) getDuplicateReferences(input, state);
+ var value = input;
+ if (state.replacer) value = state.replacer.call({ "": value }, "", value);
+ if (writeNode(state, 0, value, true, true)) return state.dump + "\n";
+ return "";
+}
+var dumper = { dump: dump$1 };
+function renamed(from, to) {
+ return function() {
+ throw new Error("Function yaml." + from + " is removed in js-yaml 4. Use yaml." + to + " instead, which is now safe by default.");
+ };
+}
+var load = loader.load;
+loader.loadAll;
+dumper.dump;
+renamed("safeLoad", "load");
+renamed("safeLoadAll", "loadAll");
+renamed("safeDump", "dump");
+//#endregion
+//#region src/parse-workflow.ts
+/**
+* Workflow YAML parsing.
+*
+* GitHub Actions exposes the values of dispatched inputs at runtime via
+* `github.event.inputs`, but it does NOT expose the input *schema* (descriptions,
+* types, defaults, options, required-ness). To render a rich summary, this
+* module reads the calling workflow's YAML file and extracts the declared
+* input schema from `on.workflow_dispatch.inputs` and `on.workflow_call.inputs`.
+*
+* The path to the calling workflow is resolved from `GITHUB_WORKFLOW_REF`,
+* which has the shape: `owner/repo/.github/workflows/file.yml@refs/heads/main`.
+*/
+/**
+* Parses a workflow YAML document and returns the input schemas declared on
+* `workflow_dispatch` and `workflow_call`.
+*
+* Returns empty arrays for triggers that are not present. Tolerates the
+* `on:` field being a string (`on: workflow_dispatch`) or a list, in which
+* case there are no declared inputs to extract.
+*/
+function parseWorkflowSchema(yamlContent) {
+ let doc;
+ try {
+ doc = load(yamlContent);
+ } catch (err) {
+ const message = err instanceof Error ? err.message : String(err);
+ throw new Error(`Failed to parse workflow YAML: ${message}`);
+ }
+ if (!isObject(doc)) return {
+ workflowDispatch: [],
+ workflowCall: []
+ };
+ const onField = doc["on"] ?? doc[true];
+ if (!isObject(onField)) return {
+ workflowDispatch: [],
+ workflowCall: []
+ };
+ return {
+ workflowDispatch: extractInputs(onField["workflow_dispatch"]),
+ workflowCall: extractInputs(onField["workflow_call"])
+ };
+}
+function extractInputs(trigger) {
+ if (!isObject(trigger)) return [];
+ const inputs = trigger["inputs"];
+ if (!isObject(inputs)) return [];
+ const result = [];
+ for (const [name, raw] of Object.entries(inputs)) {
+ if (!isObject(raw)) continue;
+ result.push(coerceInput(name, raw));
+ }
+ return result;
+}
+function coerceInput(name, raw) {
+ const type = coerceType(raw["type"]);
+ const description = typeof raw["description"] === "string" ? raw["description"] : void 0;
+ const required = raw["required"] === true;
+ const defaultValue = stringifyDefault(raw["default"]);
+ const options = coerceOptions(raw["options"]);
+ return {
+ name,
+ type,
+ ...description !== void 0 ? { description } : {},
+ ...defaultValue !== void 0 ? { default: defaultValue } : {},
+ required,
+ ...options !== void 0 ? { options } : {}
+ };
+}
+function coerceType(value) {
+ if (value === "choice" || value === "boolean" || value === "number" || value === "environment") return value;
+ return "string";
+}
+function coerceOptions(value) {
+ if (!Array.isArray(value)) return void 0;
+ return value.map((v) => String(v));
+}
+function stringifyDefault(value) {
+ if (value === void 0 || value === null) return void 0;
+ if (typeof value === "string") return value;
+ if (typeof value === "boolean" || typeof value === "number") return String(value);
+ try {
+ return JSON.stringify(value);
+ } catch {
+ return;
+ }
+}
+function isObject(value) {
+ return typeof value === "object" && value !== null && !Array.isArray(value);
+}
+function mergeInputs(schema, runtime) {
+ const result = [];
+ const seen = /* @__PURE__ */ new Set();
+ for (const declared of schema) {
+ seen.add(declared.name);
+ const runtimeValue = runtime[declared.name];
+ if (runtimeValue !== void 0 && runtimeValue !== "") result.push({
+ name: declared.name,
+ value: runtimeValue,
+ provenance: "runtime",
+ schema: declared
+ });
+ else if (declared.default !== void 0) result.push({
+ name: declared.name,
+ value: declared.default,
+ provenance: "default",
+ schema: declared
+ });
+ else result.push({
+ name: declared.name,
+ value: void 0,
+ provenance: "missing",
+ schema: declared
+ });
+ }
+ for (const [name, value] of Object.entries(runtime)) {
+ if (seen.has(name)) continue;
+ result.push({
+ name,
+ value,
+ provenance: "runtime-only"
+ });
+ }
+ return result;
+}
+/**
+* Parses a `GITHUB_WORKFLOW_REF` value and returns the path to the workflow
+* file relative to the repository root.
+*
+* The format is `//@[`, where `` is something
+* like `.github/workflows/deploy.yml`.
+*
+* Returns `undefined` if the ref is missing or malformed.
+*/
+function workflowPathFromRef(ref) {
+ if (!ref) return void 0;
+ const atIndex = ref.lastIndexOf("@");
+ const parts = (atIndex >= 0 ? ref.slice(0, atIndex) : ref).split("/");
+ if (parts.length < 3) return void 0;
+ const path = parts.slice(2).join("/");
+ return path.length > 0 ? path : void 0;
+}
+//#endregion
+//#region src/render-summary.ts
+/**
+* Markdown rendering for the job summary.
+*
+* Produces a single GitHub-Flavored Markdown table summarizing the inputs of
+* the current workflow run. Designed to be appended to `$GITHUB_STEP_SUMMARY`
+* (via `core.summary.addRaw().write()`) or returned as an output for
+* downstream steps.
+*/
+/**
+* Renders the resolved inputs as a markdown summary section.
+*
+* The shape is intentionally simple: a heading followed by a four-column
+* table (Name, Value, Type, Description). Columns are omitted when the data
+* is uniformly empty across all rows, so a workflow that doesn't declare
+* descriptions doesn't end up with a column full of dashes.
+*
+* If there are no inputs to display, returns a heading plus a short italic
+* note rather than an empty table.
+*/
+function renderSummary(inputs, options) {
+ const lines = [`## ${options.title}`, ""];
+ if (inputs.length === 0) {
+ lines.push("_No inputs were provided for this workflow run._");
+ lines.push("");
+ return lines.join("\n");
+ }
+ const showType = inputs.some((i) => i.schema?.type !== void 0);
+ const showDescription = inputs.some((i) => i.schema?.description !== void 0 && i.schema.description.length > 0);
+ const headers = ["Name", "Value"];
+ if (showType) headers.push("Type");
+ if (showDescription) headers.push("Description");
+ lines.push(`| ${headers.join(" | ")} |`);
+ lines.push(`| ${headers.map(() => "---").join(" | ")} |`);
+ for (const input of inputs) {
+ const row = [escapeCell(input.name), formatValue(input, options)];
+ if (showType) row.push(formatType(input));
+ if (showDescription) row.push(escapeCell(input.schema?.description ?? ""));
+ lines.push(`| ${row.join(" | ")} |`);
+ }
+ lines.push("");
+ return lines.join("\n");
+}
+function formatValue(input, options) {
+ if (input.value === void 0) return input.provenance === "missing" ? "_(missing)_" : "_(empty)_";
+ const display = `\`${escapeInlineCode(maskValue(input.name, input.value, options.maskPatterns))}\``;
+ if (input.provenance === "default" && options.showDefaults) return `${display} _(default)_`;
+ if (input.provenance === "runtime-only") return `${display} _(runtime-only)_`;
+ return display;
+}
+function formatType(input) {
+ if (!input.schema) return "";
+ const { type, options } = input.schema;
+ if (type === "choice" && options && options.length > 0) return `choice (${options.map((o) => `\`${escapeInlineCode(o)}\``).join(", ")})`;
+ return type;
+}
+/**
+* Escapes a value for inclusion as a GFM table cell. Handles pipe characters
+* (which would otherwise break the column boundary) and newlines (which would
+* break the row).
+*/
+function escapeCell(value) {
+ return value.replace(/\\/g, "\\\\").replace(/\|/g, "\\|").replace(/\r?\n/g, " ");
+}
+/**
+* Escapes a value for inclusion inside backticks. Backticks themselves cannot
+* appear inside a single-backtick span, so we substitute a unicode lookalike
+* for the rare case where the input value contains one. Pipes still need
+* escaping since the entire cell is a table cell.
+*/
+function escapeInlineCode(value) {
+ return value.replace(/\r?\n/g, " ").replace(/`/g, "ˋ").replace(/\|/g, "\\|");
+}
+//#endregion
+//#region src/main.ts
+/**
+* Action entrypoint.
+*
+* Wires together the three pure modules (mask, parse-workflow, render-summary)
+* with the GitHub Actions runtime: reads action inputs, resolves the calling
+* workflow's input schema, applies masking, writes the markdown summary, and
+* exposes it as the `summary` output.
+*/
+function readActionInputs() {
+ return {
+ title: import_core.getInput("title") || "Workflow inputs",
+ inputsJson: import_core.getInput("inputs-json"),
+ maskPatterns: import_core.getInput("mask-patterns") || "(?i)(secret|token|password|api[_-]?key)",
+ showDefaults: import_core.getBooleanInput("show-defaults")
+ };
+}
+/**
+* Coerces an arbitrary value to a string suitable for display in the summary.
+*
+* Workflow inputs on the wire are strings even when typed (booleans and
+* numbers arrive as "true"/"42"). For defensive resilience against payloads
+* that include JSON-typed values (e.g. when `inputs-json` is hand-crafted),
+* we accept primitives directly and JSON-stringify objects/arrays rather
+* than letting them collapse to `[object Object]`.
+*/
+function coerceToString(value) {
+ if (value === null || value === void 0) return void 0;
+ if (typeof value === "string") return value;
+ if (typeof value === "boolean" || typeof value === "number" || typeof value === "bigint") return String(value);
+ try {
+ return JSON.stringify(value);
+ } catch {
+ return;
+ }
+}
+function inputsRecordFromObject(obj) {
+ const out = {};
+ for (const [k, v] of Object.entries(obj)) {
+ const coerced = coerceToString(v);
+ if (coerced !== void 0) out[k] = coerced;
+ }
+ return out;
+}
+/**
+* Reads the runtime input values that triggered the workflow.
+*
+* Priority order:
+* 1. `inputs-json` action input (if provided) — explicit, most reliable.
+* 2. `github.event.inputs` — populated for `workflow_dispatch` and
+* `workflow_call` events.
+*
+* All values are coerced to strings (see `coerceToString`).
+*/
+function readRuntimeInputs(actionInputs) {
+ if (actionInputs.inputsJson.trim().length > 0) {
+ let parsed;
+ try {
+ parsed = JSON.parse(actionInputs.inputsJson);
+ } catch (err) {
+ const message = err instanceof Error ? err.message : String(err);
+ throw new Error(`Failed to parse inputs-json: ${message}`);
+ }
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) throw new Error("inputs-json must be a JSON object.");
+ return inputsRecordFromObject(parsed);
+ }
+ const eventInputs = import_github.context.payload["inputs"];
+ if (eventInputs && typeof eventInputs === "object" && !Array.isArray(eventInputs)) return inputsRecordFromObject(eventInputs);
+ return {};
+}
+/**
+* Tries to read the calling workflow's YAML file from the local workspace.
+*
+* `GITHUB_WORKFLOW_REF` has the form `//@][`. If the
+* repository has been checked out (the recommended setup), the workflow file
+* lives at `${GITHUB_WORKSPACE}/` and we can read it directly.
+*
+* Returns the raw YAML string, or `undefined` if the file isn't present
+* locally — in which case the caller can decide whether to fall back to the
+* GitHub API or simply proceed with runtime values only.
+*/
+async function readWorkflowFromWorkspace() {
+ const ref = process.env["GITHUB_WORKFLOW_REF"];
+ const workspace = process.env["GITHUB_WORKSPACE"];
+ const workflowPath = workflowPathFromRef(ref);
+ if (!workflowPath || !workspace) {
+ import_core.debug(`No GITHUB_WORKFLOW_REF (${String(ref)}) or GITHUB_WORKSPACE (${String(workspace)}); skipping workspace read.`);
+ return;
+ }
+ const fullPath = path.join(workspace, workflowPath);
+ try {
+ return await promises.readFile(fullPath, "utf8");
+ } catch (err) {
+ import_core.debug(`Could not read workflow from workspace at ${fullPath}: ${String(err)}`);
+ return;
+ }
+}
+/**
+* Resolves the input schema for the current workflow run. Tries the local
+* workspace first; logs a warning and returns an empty schema if the file
+* can't be located, so the action degrades gracefully rather than failing.
+*/
+async function resolveSchema() {
+ const yaml = await readWorkflowFromWorkspace();
+ if (!yaml) {
+ import_core.warning("Could not read the calling workflow file from the workspace. Run actions/checkout before this action to enable rich input descriptions, or pass inputs-json explicitly. The summary will fall back to runtime values only.");
+ return [];
+ }
+ const schema = parseWorkflowSchema(yaml);
+ const merged = /* @__PURE__ */ new Map();
+ for (const input of [...schema.workflowDispatch, ...schema.workflowCall]) merged.set(input.name, input);
+ return [...merged.values()];
+}
+async function run() {
+ const actionInputs = readActionInputs();
+ const maskPatterns = parseMaskPatterns(actionInputs.maskPatterns);
+ const runtime = readRuntimeInputs(actionInputs);
+ const resolved = mergeInputs(await resolveSchema(), runtime);
+ const markdown = renderSummary(resolved, {
+ title: actionInputs.title,
+ showDefaults: actionInputs.showDefaults,
+ maskPatterns
+ });
+ await import_core.summary.addRaw(markdown).write();
+ import_core.setOutput("summary", markdown);
+ import_core.info(`Rendered ${resolved.length} input${resolved.length === 1 ? "" : "s"} to the job summary.`);
+}
+run().catch((err) => {
+ const message = err instanceof Error ? err.message : String(err);
+ import_core.setFailed(message);
+});
+//#endregion
+export { run };
diff --git a/workflow-inputs/package.json b/workflow-inputs/package.json
new file mode 100644
index 0000000..4ceda26
--- /dev/null
+++ b/workflow-inputs/package.json
@@ -0,0 +1,34 @@
+{
+ "name": "workflow-inputs",
+ "version": "1.0.0",
+ "private": true,
+ "description": "GitHub Action that renders the inputs of the current workflow run as a job summary table.",
+ "license": "Apache-2.0",
+ "author": "Loris",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/solana-program/actions.git",
+ "directory": "workflow-inputs"
+ },
+ "type": "module",
+ "main": "dist/index.js",
+ "scripts": {
+ "build": "vp pack",
+ "check": "vp check",
+ "test": "vp test"
+ },
+ "dependencies": {
+ "@actions/core": "^1.11.1",
+ "@actions/github": "^6.0.0",
+ "js-yaml": "^4.1.0"
+ },
+ "devDependencies": {
+ "@types/js-yaml": "^4.0.9",
+ "@types/node": "^20.14.0",
+ "vite-plus": "^0.1.20"
+ },
+ "engines": {
+ "node": ">=24"
+ },
+ "packageManager": "pnpm@11.0.8"
+}
diff --git a/workflow-inputs/pnpm-lock.yaml b/workflow-inputs/pnpm-lock.yaml
new file mode 100644
index 0000000..0f2c5a5
--- /dev/null
+++ b/workflow-inputs/pnpm-lock.yaml
@@ -0,0 +1,1607 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@actions/core':
+ specifier: ^1.11.1
+ version: 1.11.1
+ '@actions/github':
+ specifier: ^6.0.0
+ version: 6.0.1
+ js-yaml:
+ specifier: ^4.1.0
+ version: 4.1.1
+ devDependencies:
+ '@types/js-yaml':
+ specifier: ^4.0.9
+ version: 4.0.9
+ '@types/node':
+ specifier: ^20.14.0
+ version: 20.19.39
+ vite-plus:
+ specifier: ^0.1.20
+ version: 0.1.20(@types/node@20.19.39)(vite@8.0.11(@types/node@20.19.39))
+
+packages:
+
+ '@actions/core@1.11.1':
+ resolution: {integrity: sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==}
+
+ '@actions/exec@1.1.1':
+ resolution: {integrity: sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==}
+
+ '@actions/github@6.0.1':
+ resolution: {integrity: sha512-xbZVcaqD4XnQAe35qSQqskb3SqIAfRyLBrHMd/8TuL7hJSz2QtbDwnNM8zWx4zO5l2fnGtseNE3MbEvD7BxVMw==}
+
+ '@actions/http-client@2.2.3':
+ resolution: {integrity: sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA==}
+
+ '@actions/io@1.1.3':
+ resolution: {integrity: sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==}
+
+ '@emnapi/core@1.10.0':
+ resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==}
+
+ '@emnapi/runtime@1.10.0':
+ resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==}
+
+ '@emnapi/wasi-threads@1.2.1':
+ resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==}
+
+ '@fastify/busboy@2.1.1':
+ resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==}
+ engines: {node: '>=14'}
+
+ '@napi-rs/wasm-runtime@1.1.4':
+ resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==}
+ peerDependencies:
+ '@emnapi/core': ^1.7.1
+ '@emnapi/runtime': ^1.7.1
+
+ '@octokit/auth-token@4.0.0':
+ resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==}
+ engines: {node: '>= 18'}
+
+ '@octokit/core@5.2.2':
+ resolution: {integrity: sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==}
+ engines: {node: '>= 18'}
+
+ '@octokit/endpoint@9.0.6':
+ resolution: {integrity: sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==}
+ engines: {node: '>= 18'}
+
+ '@octokit/graphql@7.1.1':
+ resolution: {integrity: sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==}
+ engines: {node: '>= 18'}
+
+ '@octokit/openapi-types@20.0.0':
+ resolution: {integrity: sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==}
+
+ '@octokit/openapi-types@24.2.0':
+ resolution: {integrity: sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==}
+
+ '@octokit/plugin-paginate-rest@9.2.2':
+ resolution: {integrity: sha512-u3KYkGF7GcZnSD/3UP0S7K5XUFT2FkOQdcfXZGZQPGv3lm4F2Xbf71lvjldr8c1H3nNbF+33cLEkWYbokGWqiQ==}
+ engines: {node: '>= 18'}
+ peerDependencies:
+ '@octokit/core': '5'
+
+ '@octokit/plugin-rest-endpoint-methods@10.4.1':
+ resolution: {integrity: sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==}
+ engines: {node: '>= 18'}
+ peerDependencies:
+ '@octokit/core': '5'
+
+ '@octokit/request-error@5.1.1':
+ resolution: {integrity: sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==}
+ engines: {node: '>= 18'}
+
+ '@octokit/request@8.4.1':
+ resolution: {integrity: sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==}
+ engines: {node: '>= 18'}
+
+ '@octokit/types@12.6.0':
+ resolution: {integrity: sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==}
+
+ '@octokit/types@13.10.0':
+ resolution: {integrity: sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==}
+
+ '@oxc-project/runtime@0.127.0':
+ resolution: {integrity: sha512-UQYLxAhDDPHm++szfa4z0RTdcPq5vaywrAoEA2n1YaAKeanXQdjHsoT6x1gP3U97RN8LZ7yHsSOrKPCcA6mCqw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ '@oxc-project/types@0.127.0':
+ resolution: {integrity: sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==}
+
+ '@oxc-project/types@0.128.0':
+ resolution: {integrity: sha512-huv1Y/LzBJkBVHt3OlC7u0zHBW9qXf1FdD7sGmc1rXc2P1mTwHssYv7jyGx5KAACSCH+9B3Bhn6Z9luHRvf7pQ==}
+
+ '@oxfmt/binding-android-arm-eabi@0.46.0':
+ resolution: {integrity: sha512-b1doV4WRcJU+BESSlCvCjV+5CEr/T6h0frArAdV26Nir+gGNFNaylvDiiMPfF1pxeV0txZEs38ojzJaxBYg+ng==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [android]
+
+ '@oxfmt/binding-android-arm64@0.46.0':
+ resolution: {integrity: sha512-v6+HhjsoV3GO0u2u9jLSAZrvWfTraDxKofUIQ7/ktS7tzS+epVsxdHmeM+XxuNcAY/nWxxU1Sg4JcGTNRXraBA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@oxfmt/binding-darwin-arm64@0.46.0':
+ resolution: {integrity: sha512-3eeooJGrqGIlI5MyryDZsAcKXSmKIgAD4yYtfRrRJzXZ0UTFZtiSveIur56YPrGMYZwT4XyVhHsMqrNwr1XeFA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@oxfmt/binding-darwin-x64@0.46.0':
+ resolution: {integrity: sha512-QG8BDM0CXWbu84k2SKmCqfEddPQPFiBicwtYnLqHRWZZl57HbtOLRMac/KTq2NO4AEc4ICCBpFxJIV9zcqYfkQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@oxfmt/binding-freebsd-x64@0.46.0':
+ resolution: {integrity: sha512-9DdCqS/n2ncu/Chazvt3cpgAjAmIGQDz7hFKSrNItMApyV/Ja9mz3hD4JakIE3nS8PW9smEbPWnb389QLBY4nw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@oxfmt/binding-linux-arm-gnueabihf@0.46.0':
+ resolution: {integrity: sha512-Dgs7VeE2jT0LHMhw6tPEt0xQYe54kBqHEovmWsv4FVQlegCOvlIJNx0S8n4vj8WUtpT+Z6BD2HhKJPLglLxvZg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxfmt/binding-linux-arm-musleabihf@0.46.0':
+ resolution: {integrity: sha512-Zxn3adhTH13JKnU4xXJj8FeEfF680XjXh3gSShKl57HCMBRde2tUJTgogV/1MSHA80PJEVrDa7r66TLVq3Ia7Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxfmt/binding-linux-arm64-gnu@0.46.0':
+ resolution: {integrity: sha512-+TWipjrgVM8D7aIdDD0tlr3teLTTvQTn7QTE5BpT10H1Fj82gfdn9X6nn2sDgx/MepuSCfSnzFNJq2paLL0OiA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxfmt/binding-linux-arm64-musl@0.46.0':
+ resolution: {integrity: sha512-aAUPBWJ1lGwwnxZUEDLJ94+Iy6MuwJwPxUgO4sCA5mEEyDk7b+cDQ+JpX1VR150Zoyd+D49gsrUzpUK5h587Eg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxfmt/binding-linux-ppc64-gnu@0.46.0':
+ resolution: {integrity: sha512-ufBCJukyFX/UDrokP/r6BGDoTInnsDs7bxyzKAgMiZlt2Qu8GPJSJ6Zm6whIiJzKk0naxA8ilwmbO1LMw6Htxw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxfmt/binding-linux-riscv64-gnu@0.46.0':
+ resolution: {integrity: sha512-eqtlC2YmPqjun76R1gVfGLuKWx7NuEnLEAudZ7n6ipSKbCZTqIKSs1b5Y8K/JHZsRpLkeSmAAjig5HOIg8fQzQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxfmt/binding-linux-riscv64-musl@0.46.0':
+ resolution: {integrity: sha512-yccVOO2nMXkQLGgy0He3EQEwKD7NF0zEk+/OWmroznkqXyJdN6bfK0LtNnr6/14Bh3FjpYq7bP33l/VloCnxpA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxfmt/binding-linux-s390x-gnu@0.46.0':
+ resolution: {integrity: sha512-aAf7fG23OQCey6VRPj9IeCraoYtpgtx0ZyJ1CXkPyT1wjzBE7c3xtuxHe/AdHaJfVVb/SXpSk8Gl1LzyQupSqw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxfmt/binding-linux-x64-gnu@0.46.0':
+ resolution: {integrity: sha512-q0JPsTMyJNjYrBvYFDz4WbVsafNZaPCZv4RnFypRotLqpKROtBZcEaXQW4eb9YmvLU3NckVemLJnzkSZSdmOxw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxfmt/binding-linux-x64-musl@0.46.0':
+ resolution: {integrity: sha512-7LsLY9Cw57GPkhSR+duI3mt9baRczK/DtHYSldQ4BEU92da9igBQNl4z7Vq5U9NNPsh1FmpKvv1q9WDtiUQR1A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxfmt/binding-openharmony-arm64@0.46.0':
+ resolution: {integrity: sha512-lHiBOz8Duaku7JtRNLlps3j++eOaICPZSd8FCVmTDM4DFOPT71Bjn7g6iar1z7StXlKRweUKxWUs4sA+zWGDXg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@oxfmt/binding-win32-arm64-msvc@0.46.0':
+ resolution: {integrity: sha512-/5ktYUliP89RhgC37DBH1x20U5zPSZMy3cMEcO0j3793rbHP9MWsknBwQB6eozRzWmYrh0IFM/p20EbPvDlYlg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@oxfmt/binding-win32-ia32-msvc@0.46.0':
+ resolution: {integrity: sha512-3WTnoiuIr8XvV0DIY7SN+1uJSwKf4sPpcbHfobcRT9JutGcLaef/miyBB87jxd3aqH+mS0+G5lsgHuXLUwjjpQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@oxfmt/binding-win32-x64-msvc@0.46.0':
+ resolution: {integrity: sha512-IXxiQpkYnOwNfP23vzwSfhdpxJzyiPTY7eTn6dn3DsriKddESzM8i6kfq9R7CD/PUJwCvQT22NgtygBeug3KoA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@oxlint-tsgolint/darwin-arm64@0.22.0':
+ resolution: {integrity: sha512-/exgXceakHbQrzaHTtKOe7MuDATaWMCCWpsCDQCZKeYhLGXzComipTrCYnHzAXrdnNBb5r5K+RRf5A6ormrhMA==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@oxlint-tsgolint/darwin-x64@0.22.0':
+ resolution: {integrity: sha512-xFGdIahlmUbK+/MpZ5y08D0ewMGLDbd2Vki5wxVFYg50lSrtgPAtdDl+kqKZLNaFu0zpMar8n9wv1le05sL/jw==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@oxlint-tsgolint/linux-arm64@0.22.0':
+ resolution: {integrity: sha512-53RvC9f77eUo+V1dfQNwGVnsIfPJFMibRR0ee128EUpYNDOZe/ojmCfuXJeU7cY91V7r7fZSm42KPJocXUX8og==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@oxlint-tsgolint/linux-x64@0.22.0':
+ resolution: {integrity: sha512-evZcJAZ9hjNyuN69RnXwbt+U2pAOcYt+yvqukgugiCkRm4iBZ0R0CvpY1tgfG2XcGUhEPh8dljO+nPZTEVGpCQ==}
+ cpu: [x64]
+ os: [linux]
+
+ '@oxlint-tsgolint/win32-arm64@0.22.0':
+ resolution: {integrity: sha512-7jTO+k1mr5BxRAI2fxc1NRcE3MAbHNZ0Vef9SD1yAR6d1E6qEv5D/D7yuHpQpw6AO3qoecSVo2Jzr+JirN61+w==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@oxlint-tsgolint/win32-x64@0.22.0':
+ resolution: {integrity: sha512-7lbl9XFcqO+scsynxMzTQdl0XUe6sBUCyY/oGWvCB+JmV4U+70vzSyZJdTEzzxtkZiNnUVFFh9RJLmoiQSne+w==}
+ cpu: [x64]
+ os: [win32]
+
+ '@oxlint/binding-android-arm-eabi@1.61.0':
+ resolution: {integrity: sha512-6eZBPgiigK5txqoVgRqxbaxiom4lM8AP8CyKPPvpzKnQ3iFRFOIDc+0AapF+qsUSwjOzr5SGk4SxQDpQhkSJMQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [android]
+
+ '@oxlint/binding-android-arm64@1.61.0':
+ resolution: {integrity: sha512-CkwLR69MUnyv5wjzebvbbtTSUwqLxM35CXE79bHqDIK+NtKmPEUpStTcLQRZMCo4MP0qRT6TXIQVpK0ZVScnMA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@oxlint/binding-darwin-arm64@1.61.0':
+ resolution: {integrity: sha512-8JbefTkbmvqkqWjmQrHke+MdpgT2UghhD/ktM4FOQSpGeCgbMToJEKdl9zwhr/YWTl92i4QI1KiTwVExpcUN8A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@oxlint/binding-darwin-x64@1.61.0':
+ resolution: {integrity: sha512-uWpoxDT47hTnDLcdEh5jVbso8rlTTu5o0zuqa9J8E0JAKmIWn7kGFEIB03Pycn2hd2vKxybPGLhjURy/9We5FQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@oxlint/binding-freebsd-x64@1.61.0':
+ resolution: {integrity: sha512-K/o4hEyW7flfMel0iBVznmMBt7VIMHGdjADocHKpK1DUF9erpWnJ+BSSWd2W0c8K3mPtpph+CuHzRU6CI3l9jQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@oxlint/binding-linux-arm-gnueabihf@1.61.0':
+ resolution: {integrity: sha512-P6040ZkcyweJ0Po9yEFqJCdvZnf3VNCGs1SIHgXDf8AAQNC6ID/heXQs9iSgo2FH7gKaKq32VWc59XZwL34C5Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxlint/binding-linux-arm-musleabihf@1.61.0':
+ resolution: {integrity: sha512-bwxrGCzTZkuB+THv2TQ1aTkVEfv5oz8sl+0XZZCpoYzErJD8OhPQOTA0ENPd1zJz8QsVdSzSrS2umKtPq4/JXg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxlint/binding-linux-arm64-gnu@1.61.0':
+ resolution: {integrity: sha512-vkhb9/wKguMkLlrm3FoJW/Xmdv31GgYAE+x8lxxQ+7HeOxXUySI0q36a3NTVIuQUdLzxCI1zzMGsk1o37FOe3w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxlint/binding-linux-arm64-musl@1.61.0':
+ resolution: {integrity: sha512-bl1dQh8LnVqsj6oOQAcxwbuOmNJkwc4p6o//HTBZhNTzJy21TLDwAviMqUFNUxDHkPGpmdKTSN4tWTjLryP8xg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxlint/binding-linux-ppc64-gnu@1.61.0':
+ resolution: {integrity: sha512-QoOX6KB2IiEpyOj/HKqaxi+NQHPnOgNgnr22n9N4ANJCzXkUlj1UmeAbFb4PpqdlHIzvGDM5xZ0OKtcLq9RhiQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxlint/binding-linux-riscv64-gnu@1.61.0':
+ resolution: {integrity: sha512-1TGcTerjY6p152wCof3oKElccq3xHljS/Mucp04gV/4ATpP6nO7YNnp7opEg6SHkv2a57/b4b8Ndm9znJ1/qAw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxlint/binding-linux-riscv64-musl@1.61.0':
+ resolution: {integrity: sha512-65wXEmZIrX2ADwC8i/qFL4EWLSbeuBpAm3suuX1vu4IQkKd+wLT/HU/BOl84kp91u2SxPkPDyQgu4yrqp8vwVA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxlint/binding-linux-s390x-gnu@1.61.0':
+ resolution: {integrity: sha512-TVvhgMvor7Qa6COeXxCJ7ENOM+lcAOGsQ0iUdPSCv2hxb9qSHLQ4XF1h50S6RE1gBOJ0WV3rNukg4JJJP1LWRA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxlint/binding-linux-x64-gnu@1.61.0':
+ resolution: {integrity: sha512-SjpS5uYuFoDnDdZPwZE59ndF95AsY47R5MliuneTWR1pDm2CxGJaYXbKULI71t5TVfLQUWmrHEGRL9xvuq6dnA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxlint/binding-linux-x64-musl@1.61.0':
+ resolution: {integrity: sha512-gGfAeGD4sNJGILZbc/yKcIimO9wQnPMoYp9swAaKeEtwsSQAbU+rsdQze5SBtIP6j0QDzeYd4XSSUCRCF+LIeQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxlint/binding-openharmony-arm64@1.61.0':
+ resolution: {integrity: sha512-OlVT0LrG/ct33EVtWRyR+B/othwmDWeRxfi13wUdPeb3lAT5TgTcFDcfLfarZtzB4W1nWF/zICMgYdkggX2WmQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@oxlint/binding-win32-arm64-msvc@1.61.0':
+ resolution: {integrity: sha512-vI//NZPJk6DToiovPtaiwD4iQ7kO1r5ReWQD0sOOyKRtP3E2f6jxin4uvwi3OvDzHA2EFfd7DcZl5dtkQh7g1w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@oxlint/binding-win32-ia32-msvc@1.61.0':
+ resolution: {integrity: sha512-0ySj4/4zd2XjePs3XAQq7IigIstN4LPQZgCyigX5/ERMLjdWAJfnxcTsrtxZxuij8guJW8foXuHmhGxW0H4dDA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@oxlint/binding-win32-x64-msvc@1.61.0':
+ resolution: {integrity: sha512-0xgSiyeqDLDZxXoe9CVJrOx3TUVsfyoOY7cNi03JbItNcC9WCZqrSNdrAbHONxhSPaVh/lzfnDcON1RqSUMhHw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@polka/url@1.0.0-next.29':
+ resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
+
+ '@rolldown/binding-android-arm64@1.0.0-rc.18':
+ resolution: {integrity: sha512-lIDyUAfD7U3+BWKzdxMbJcsYHuqXqmGz40aeRqvuAm3y5TkJSYTBW2RDrn65DJFPQqVjUAUqq5uz8urzQ8aBdQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@rolldown/binding-darwin-arm64@1.0.0-rc.18':
+ resolution: {integrity: sha512-apJq2ktnGp27nSInMR5Vcj8kY6xJzDAvfdIFlpDcAK/w4cDO58qVoi1YQsES/SKiFNge/6e4CUzgjfHduYqWpQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rolldown/binding-darwin-x64@1.0.0-rc.18':
+ resolution: {integrity: sha512-5Ofot8xbs+pxRHJqm9/9N/4sTQOvdrwEsmPE9pdLEEoAbdZtG6F2LMDfO1sp6ZAtXJuJV/21ew2srq3W8NXB5g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rolldown/binding-freebsd-x64@1.0.0-rc.18':
+ resolution: {integrity: sha512-7h8eeOTT1eyqJyx64BFCnWZpNm486hGWt2sqeLLgDxA0xI1oGZ9H7gK1S85uNGmBhkdPwa/6reTxfFFKvIsebw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.18':
+ resolution: {integrity: sha512-eRcm/HVt9U/JFu5RKAEKwGQYtDCKWLiaH6wOnsSEp6NMBb/3Os8LgHZlNyzMpFVNmiiMFlfb2zEnebfzJrHFmg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.18':
+ resolution: {integrity: sha512-SOrT/cT4ukTmgnrEz/Hg3m7LBnuCLW9psDeMKrimRWY4I8DmnO7Lco8W2vtqPmMkbVu8iJ+g4GFLVLLOVjJ9DQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-arm64-musl@1.0.0-rc.18':
+ resolution: {integrity: sha512-QWjdxN1HJCpBTAcZ5N5F7wju3gVPzRzSpmGzx7na0c/1qpN9CFil+xt+l9lV/1M6/gqHSNXCiqPfwhVJPeLnug==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.18':
+ resolution: {integrity: sha512-ugCOyj7a4d9h3q9B+wXmf6g3a68UsjGh6dob5DHevHGMwDUbhsYNbSPxJsENcIttJZ9jv7qGM2UesLw5jqIhdg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.18':
+ resolution: {integrity: sha512-kKWRhbsotpXkGbcd5dllUWg5gEXcDAa8u5YnP9AV5DYNbvJHGzzuwv7dpmhc8NqKMJldl0a+x76IHbspEpEmdA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-x64-gnu@1.0.0-rc.18':
+ resolution: {integrity: sha512-uCo8ElcCIAMyYAZyuIZ81oFkhTSIllNvUCHCAlbhlN4ji3uC28h7IIdlXyIvGO7HsuqnV9p3rD/bpH7XhIyhRw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-x64-musl@1.0.0-rc.18':
+ resolution: {integrity: sha512-XNOQZtuE6yUIvx4rwGemwh8kpL1xvU41FXy/s9K7T/3JVcqGzo3NfKM2HrbrGgfPYGFW42f07Wk++aOC6B9NWA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@rolldown/binding-openharmony-arm64@1.0.0-rc.18':
+ resolution: {integrity: sha512-tSn/kzrfa7tNOXr7sEacDBN4YsIqTyLqh45IO0nHDwtpKIDNDJr+VFojt+4klSpChxB29JLyduSsE0MKEwa65A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rolldown/binding-wasm32-wasi@1.0.0-rc.18':
+ resolution: {integrity: sha512-+J9YGmc+czgqlhYmwun3S3O0FIZhsH8ep2456xwjAdIOmuJxM7xz4P4PtrxU+Bz17a/5bqPA8o3HAAoX0teUdg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [wasm32]
+
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.18':
+ resolution: {integrity: sha512-zsu47DgU0FQzSwi6sU9dZoEdUv7pc1AptSEz/Z8HBg54sV0Pbs3N0+CrIbTsgiu6EyoaNN9CHboqbLaz9lhOyQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rolldown/binding-win32-x64-msvc@1.0.0-rc.18':
+ resolution: {integrity: sha512-7H+3yqGgmnlDTRRhw/xpYY9J1kf4GC681nVc4GqKhExZTDrVVrV2tsOR9kso0fvgBdcTCcQShx4SLLoHgaLwhg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@rolldown/pluginutils@1.0.0-rc.18':
+ resolution: {integrity: sha512-CUY5Mnhe64xQBGZEEXQ5WyZwsc1JU3vAZLIxtrsBt3LO6UOb+C8GunVKqe9sT8NeWb4lqSaoJtp2xo6GxT1MNw==}
+
+ '@standard-schema/spec@1.1.0':
+ resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==}
+
+ '@tybys/wasm-util@0.10.2':
+ resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==}
+
+ '@types/chai@5.2.3':
+ resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==}
+
+ '@types/deep-eql@4.0.2':
+ resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
+
+ '@types/js-yaml@4.0.9':
+ resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==}
+
+ '@types/node@20.19.39':
+ resolution: {integrity: sha512-orrrD74MBUyK8jOAD/r0+lfa1I2MO6I+vAkmAWzMYbCcgrN4lCrmK52gRFQq/JRxfYPfonkr4b0jcY7Olqdqbw==}
+
+ '@voidzero-dev/vite-plus-core@0.1.20':
+ resolution: {integrity: sha512-4KmzRfzwTeG3JuvDijrdqWusSgRvLMKDPrVsDdtbDVVjEMq0VnM8lSH+Nvepd6Pg+SuSVUP212OIfH/3Yn1bfA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ peerDependencies:
+ '@arethetypeswrong/core': ^0.18.1
+ '@tsdown/css': 0.21.10
+ '@tsdown/exe': 0.21.10
+ '@types/node': ^20.19.0 || >=22.12.0
+ '@vitejs/devtools': ^0.1.0
+ esbuild: ^0.27.0 || ^0.28.0
+ jiti: '>=1.21.0'
+ less: ^4.0.0
+ publint: ^0.3.0
+ sass: ^1.70.0
+ sass-embedded: ^1.70.0
+ stylus: '>=0.54.8'
+ sugarss: ^5.0.0
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ typescript: ^5.0.0 || ^6.0.0
+ unplugin-unused: ^0.5.0
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ '@arethetypeswrong/core':
+ optional: true
+ '@tsdown/css':
+ optional: true
+ '@tsdown/exe':
+ optional: true
+ '@types/node':
+ optional: true
+ '@vitejs/devtools':
+ optional: true
+ esbuild:
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ publint:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ typescript:
+ optional: true
+ unplugin-unused:
+ optional: true
+ yaml:
+ optional: true
+
+ '@voidzero-dev/vite-plus-darwin-arm64@0.1.20':
+ resolution: {integrity: sha512-ykCOJk91h0IEMvljYGTauI4Svxr/CatZAitofvtEFqaTCLE3n06QCHD8qWphMM784VnPz1G/J2xuewxbQduNlg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@voidzero-dev/vite-plus-darwin-x64@0.1.20':
+ resolution: {integrity: sha512-5XxNW9cYEh85Z4BErALyWh/tLP/NZmxNXzUQ0FanhHreI2Zq7FfgbSqQNvC7/sYsPYTWf74RlxmIjzV7R/Lb5Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@voidzero-dev/vite-plus-linux-arm64-gnu@0.1.20':
+ resolution: {integrity: sha512-Mc7npPBd9t/h0haURVCZGae+TfB0Yx2Ex8HbPKOVA4hnN9ynlMhMpLRFfTQAicDKYbEGDhfBcbCIX0vVv4vacA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@voidzero-dev/vite-plus-linux-arm64-musl@0.1.20':
+ resolution: {integrity: sha512-Oh/pxMdTLR/wsDl/OONjItjLOeTewFBLuKkH5RQmcI9g3AVqKzLj1/uawujgysBI5E25tonRRK7I2q/zu8Uqvg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@voidzero-dev/vite-plus-linux-x64-gnu@0.1.20':
+ resolution: {integrity: sha512-msO1ZoUX5aSK8L6kN1C3XQO4CcH9aFsNPRSNcO1cjk1kTnaLyVYzkVxgvbh3vk7nzZAAMkmyZ4SlMpqJrdahrg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@voidzero-dev/vite-plus-linux-x64-musl@0.1.20':
+ resolution: {integrity: sha512-U93urREvg23ZFDkxKkkfWWIOI4GI9erhbWAZpXG+GeYqygWKrVC6PUTXiuexVg3/CFg2sSMTdm1W6V7TFG5hYA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@voidzero-dev/vite-plus-test@0.1.20':
+ resolution: {integrity: sha512-vy2dJYw1bhgQ/+BrQrfwPlSKzQ2mm3YLJ9kGF7Yo0UJ2P3XKpshtgFIWLjSg/IASnC93OAx0c/7j3NM0I1RMuA==}
+ engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
+ peerDependencies:
+ '@edge-runtime/vm': '*'
+ '@opentelemetry/api': ^1.9.0
+ '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0
+ '@vitest/coverage-istanbul': 4.1.5
+ '@vitest/coverage-v8': 4.1.5
+ '@vitest/ui': 4.1.5
+ happy-dom: '*'
+ jsdom: '*'
+ vite: ^6.0.0 || ^7.0.0 || ^8.0.0
+ peerDependenciesMeta:
+ '@edge-runtime/vm':
+ optional: true
+ '@opentelemetry/api':
+ optional: true
+ '@types/node':
+ optional: true
+ '@vitest/coverage-istanbul':
+ optional: true
+ '@vitest/coverage-v8':
+ optional: true
+ '@vitest/ui':
+ optional: true
+ happy-dom:
+ optional: true
+ jsdom:
+ optional: true
+
+ '@voidzero-dev/vite-plus-win32-arm64-msvc@0.1.20':
+ resolution: {integrity: sha512-deXfe3h2OpzKV88s1PMUgVOJfN9LlnDDpIEVH6y2+YAXwlTSO7YeKBj2QmyS6ALZCI4Rfp4HOsB0OKMVBfEqww==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@voidzero-dev/vite-plus-win32-x64-msvc@0.1.20':
+ resolution: {integrity: sha512-ygdgQgo0N9oUI1Q2IdYBcvr+KLY6riaqLY/bkWNYtvHS4uk8a4GuEd0F08znWt2E8sFm29i35bYIzI6fFY2EBg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ assertion-error@2.0.1:
+ resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
+ engines: {node: '>=12'}
+
+ before-after-hook@2.2.3:
+ resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==}
+
+ deprecation@2.3.1:
+ resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==}
+
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
+ engines: {node: '>=8'}
+
+ es-module-lexer@1.7.0:
+ resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
+
+ fdir@6.5.0:
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ js-yaml@4.1.1:
+ resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
+ hasBin: true
+
+ lightningcss-android-arm64@1.32.0:
+ resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ lightningcss-darwin-arm64@1.32.0:
+ resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ lightningcss-darwin-x64@1.32.0:
+ resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ lightningcss-freebsd-x64@1.32.0:
+ resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ lightningcss-linux-arm64-gnu@1.32.0:
+ resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ lightningcss-linux-arm64-musl@1.32.0:
+ resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ lightningcss-linux-x64-gnu@1.32.0:
+ resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ lightningcss-linux-x64-musl@1.32.0:
+ resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ lightningcss-win32-arm64-msvc@1.32.0:
+ resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ lightningcss-win32-x64-msvc@1.32.0:
+ resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ lightningcss@1.32.0:
+ resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==}
+ engines: {node: '>= 12.0.0'}
+
+ mrmime@2.0.1:
+ resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==}
+ engines: {node: '>=10'}
+
+ nanoid@3.3.12:
+ resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ obug@2.1.1:
+ resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ oxfmt@0.46.0:
+ resolution: {integrity: sha512-CopwJOwPAjZ9p76fCvz+mSOJTw9/NY3cSksZK3VO/bUQ8UoEcketNgUuYS0UB3p+R9XnXe7wGGXUmyFxc7QxJA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+
+ oxlint-tsgolint@0.22.0:
+ resolution: {integrity: sha512-ku4MecLmCQIj1ScCtzNAqTuyl0BJQ02B36fJT+c5XQihHpYSFak+FC3GYO5fPyYk4oDwi0w0S7hTvrpNzuZhig==}
+ hasBin: true
+
+ oxlint@1.61.0:
+ resolution: {integrity: sha512-ZC0ALuhDZ6ivOFG+sy0D0pEDN49EvsId98zVlmYdkcXHsEM14m/qTNUEsUpiFiCVbpIxYtVBmmLE87nsbUHohQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ oxlint-tsgolint: '>=0.18.0'
+ peerDependenciesMeta:
+ oxlint-tsgolint:
+ optional: true
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@4.0.4:
+ resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==}
+ engines: {node: '>=12'}
+
+ pixelmatch@7.2.0:
+ resolution: {integrity: sha512-xhcb4yHu9sM/G7foGzoLtXYcC0zHEaOXXjRKhGup0fw78Nf2Tkiapv4EQyMzrbcmQPsllAI7DbFY2UT7PlI9Pg==}
+ hasBin: true
+
+ pngjs@7.0.0:
+ resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==}
+ engines: {node: '>=14.19.0'}
+
+ postcss@8.5.14:
+ resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ rolldown@1.0.0-rc.18:
+ resolution: {integrity: sha512-phmyKBpuBdRYDf4hgyynGAYn/rDDe+iZXKVJ7WX5b1zQzpLkP5oJRPGsfJuHdzPMlyyEO/4sPW6yfSx2gf7lVg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+
+ sirv@3.0.2:
+ resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==}
+ engines: {node: '>=18'}
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ std-env@4.1.0:
+ resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==}
+
+ tinybench@2.9.0:
+ resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
+
+ tinyexec@1.1.2:
+ resolution: {integrity: sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA==}
+ engines: {node: '>=18'}
+
+ tinyglobby@0.2.16:
+ resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==}
+ engines: {node: '>=12.0.0'}
+
+ tinypool@2.1.0:
+ resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==}
+ engines: {node: ^20.0.0 || >=22.0.0}
+
+ totalist@3.0.1:
+ resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
+ engines: {node: '>=6'}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ tunnel@0.0.6:
+ resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==}
+ engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'}
+
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+ undici@5.29.0:
+ resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==}
+ engines: {node: '>=14.0'}
+
+ universal-user-agent@6.0.1:
+ resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==}
+
+ vite-plus@0.1.20:
+ resolution: {integrity: sha512-hxJqXTxiiFhszwAeD0MvKlztVuXE4TztTdJ64BPxGqgY67F0PDa5eZkUsrN91Ae8aYUMfweW6V/J57OUO9/0zw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+
+ vite@8.0.11:
+ resolution: {integrity: sha512-Jz1mxtUBR5xTT65VOdJZUUeoyLtqljmFkiUXhPTLZka3RDc9vpi/xXkyrnsdRcm2lIi3l3GPMnAidTsEGIj3Ow==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^20.19.0 || >=22.12.0
+ '@vitejs/devtools': ^0.1.18
+ esbuild: ^0.27.0 || ^0.28.0
+ jiti: '>=1.21.0'
+ less: ^4.0.0
+ sass: ^1.70.0
+ sass-embedded: ^1.70.0
+ stylus: '>=0.54.8'
+ sugarss: ^5.0.0
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ '@vitejs/devtools':
+ optional: true
+ esbuild:
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@8.20.0:
+ resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+snapshots:
+
+ '@actions/core@1.11.1':
+ dependencies:
+ '@actions/exec': 1.1.1
+ '@actions/http-client': 2.2.3
+
+ '@actions/exec@1.1.1':
+ dependencies:
+ '@actions/io': 1.1.3
+
+ '@actions/github@6.0.1':
+ dependencies:
+ '@actions/http-client': 2.2.3
+ '@octokit/core': 5.2.2
+ '@octokit/plugin-paginate-rest': 9.2.2(@octokit/core@5.2.2)
+ '@octokit/plugin-rest-endpoint-methods': 10.4.1(@octokit/core@5.2.2)
+ '@octokit/request': 8.4.1
+ '@octokit/request-error': 5.1.1
+ undici: 5.29.0
+
+ '@actions/http-client@2.2.3':
+ dependencies:
+ tunnel: 0.0.6
+ undici: 5.29.0
+
+ '@actions/io@1.1.3': {}
+
+ '@emnapi/core@1.10.0':
+ dependencies:
+ '@emnapi/wasi-threads': 1.2.1
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/runtime@1.10.0':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/wasi-threads@1.2.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@fastify/busboy@2.1.1': {}
+
+ '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)':
+ dependencies:
+ '@emnapi/core': 1.10.0
+ '@emnapi/runtime': 1.10.0
+ '@tybys/wasm-util': 0.10.2
+ optional: true
+
+ '@octokit/auth-token@4.0.0': {}
+
+ '@octokit/core@5.2.2':
+ dependencies:
+ '@octokit/auth-token': 4.0.0
+ '@octokit/graphql': 7.1.1
+ '@octokit/request': 8.4.1
+ '@octokit/request-error': 5.1.1
+ '@octokit/types': 13.10.0
+ before-after-hook: 2.2.3
+ universal-user-agent: 6.0.1
+
+ '@octokit/endpoint@9.0.6':
+ dependencies:
+ '@octokit/types': 13.10.0
+ universal-user-agent: 6.0.1
+
+ '@octokit/graphql@7.1.1':
+ dependencies:
+ '@octokit/request': 8.4.1
+ '@octokit/types': 13.10.0
+ universal-user-agent: 6.0.1
+
+ '@octokit/openapi-types@20.0.0': {}
+
+ '@octokit/openapi-types@24.2.0': {}
+
+ '@octokit/plugin-paginate-rest@9.2.2(@octokit/core@5.2.2)':
+ dependencies:
+ '@octokit/core': 5.2.2
+ '@octokit/types': 12.6.0
+
+ '@octokit/plugin-rest-endpoint-methods@10.4.1(@octokit/core@5.2.2)':
+ dependencies:
+ '@octokit/core': 5.2.2
+ '@octokit/types': 12.6.0
+
+ '@octokit/request-error@5.1.1':
+ dependencies:
+ '@octokit/types': 13.10.0
+ deprecation: 2.3.1
+ once: 1.4.0
+
+ '@octokit/request@8.4.1':
+ dependencies:
+ '@octokit/endpoint': 9.0.6
+ '@octokit/request-error': 5.1.1
+ '@octokit/types': 13.10.0
+ universal-user-agent: 6.0.1
+
+ '@octokit/types@12.6.0':
+ dependencies:
+ '@octokit/openapi-types': 20.0.0
+
+ '@octokit/types@13.10.0':
+ dependencies:
+ '@octokit/openapi-types': 24.2.0
+
+ '@oxc-project/runtime@0.127.0': {}
+
+ '@oxc-project/types@0.127.0': {}
+
+ '@oxc-project/types@0.128.0': {}
+
+ '@oxfmt/binding-android-arm-eabi@0.46.0':
+ optional: true
+
+ '@oxfmt/binding-android-arm64@0.46.0':
+ optional: true
+
+ '@oxfmt/binding-darwin-arm64@0.46.0':
+ optional: true
+
+ '@oxfmt/binding-darwin-x64@0.46.0':
+ optional: true
+
+ '@oxfmt/binding-freebsd-x64@0.46.0':
+ optional: true
+
+ '@oxfmt/binding-linux-arm-gnueabihf@0.46.0':
+ optional: true
+
+ '@oxfmt/binding-linux-arm-musleabihf@0.46.0':
+ optional: true
+
+ '@oxfmt/binding-linux-arm64-gnu@0.46.0':
+ optional: true
+
+ '@oxfmt/binding-linux-arm64-musl@0.46.0':
+ optional: true
+
+ '@oxfmt/binding-linux-ppc64-gnu@0.46.0':
+ optional: true
+
+ '@oxfmt/binding-linux-riscv64-gnu@0.46.0':
+ optional: true
+
+ '@oxfmt/binding-linux-riscv64-musl@0.46.0':
+ optional: true
+
+ '@oxfmt/binding-linux-s390x-gnu@0.46.0':
+ optional: true
+
+ '@oxfmt/binding-linux-x64-gnu@0.46.0':
+ optional: true
+
+ '@oxfmt/binding-linux-x64-musl@0.46.0':
+ optional: true
+
+ '@oxfmt/binding-openharmony-arm64@0.46.0':
+ optional: true
+
+ '@oxfmt/binding-win32-arm64-msvc@0.46.0':
+ optional: true
+
+ '@oxfmt/binding-win32-ia32-msvc@0.46.0':
+ optional: true
+
+ '@oxfmt/binding-win32-x64-msvc@0.46.0':
+ optional: true
+
+ '@oxlint-tsgolint/darwin-arm64@0.22.0':
+ optional: true
+
+ '@oxlint-tsgolint/darwin-x64@0.22.0':
+ optional: true
+
+ '@oxlint-tsgolint/linux-arm64@0.22.0':
+ optional: true
+
+ '@oxlint-tsgolint/linux-x64@0.22.0':
+ optional: true
+
+ '@oxlint-tsgolint/win32-arm64@0.22.0':
+ optional: true
+
+ '@oxlint-tsgolint/win32-x64@0.22.0':
+ optional: true
+
+ '@oxlint/binding-android-arm-eabi@1.61.0':
+ optional: true
+
+ '@oxlint/binding-android-arm64@1.61.0':
+ optional: true
+
+ '@oxlint/binding-darwin-arm64@1.61.0':
+ optional: true
+
+ '@oxlint/binding-darwin-x64@1.61.0':
+ optional: true
+
+ '@oxlint/binding-freebsd-x64@1.61.0':
+ optional: true
+
+ '@oxlint/binding-linux-arm-gnueabihf@1.61.0':
+ optional: true
+
+ '@oxlint/binding-linux-arm-musleabihf@1.61.0':
+ optional: true
+
+ '@oxlint/binding-linux-arm64-gnu@1.61.0':
+ optional: true
+
+ '@oxlint/binding-linux-arm64-musl@1.61.0':
+ optional: true
+
+ '@oxlint/binding-linux-ppc64-gnu@1.61.0':
+ optional: true
+
+ '@oxlint/binding-linux-riscv64-gnu@1.61.0':
+ optional: true
+
+ '@oxlint/binding-linux-riscv64-musl@1.61.0':
+ optional: true
+
+ '@oxlint/binding-linux-s390x-gnu@1.61.0':
+ optional: true
+
+ '@oxlint/binding-linux-x64-gnu@1.61.0':
+ optional: true
+
+ '@oxlint/binding-linux-x64-musl@1.61.0':
+ optional: true
+
+ '@oxlint/binding-openharmony-arm64@1.61.0':
+ optional: true
+
+ '@oxlint/binding-win32-arm64-msvc@1.61.0':
+ optional: true
+
+ '@oxlint/binding-win32-ia32-msvc@1.61.0':
+ optional: true
+
+ '@oxlint/binding-win32-x64-msvc@1.61.0':
+ optional: true
+
+ '@polka/url@1.0.0-next.29': {}
+
+ '@rolldown/binding-android-arm64@1.0.0-rc.18':
+ optional: true
+
+ '@rolldown/binding-darwin-arm64@1.0.0-rc.18':
+ optional: true
+
+ '@rolldown/binding-darwin-x64@1.0.0-rc.18':
+ optional: true
+
+ '@rolldown/binding-freebsd-x64@1.0.0-rc.18':
+ optional: true
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.18':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.18':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-musl@1.0.0-rc.18':
+ optional: true
+
+ '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.18':
+ optional: true
+
+ '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.18':
+ optional: true
+
+ '@rolldown/binding-linux-x64-gnu@1.0.0-rc.18':
+ optional: true
+
+ '@rolldown/binding-linux-x64-musl@1.0.0-rc.18':
+ optional: true
+
+ '@rolldown/binding-openharmony-arm64@1.0.0-rc.18':
+ optional: true
+
+ '@rolldown/binding-wasm32-wasi@1.0.0-rc.18':
+ dependencies:
+ '@emnapi/core': 1.10.0
+ '@emnapi/runtime': 1.10.0
+ '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ optional: true
+
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.18':
+ optional: true
+
+ '@rolldown/binding-win32-x64-msvc@1.0.0-rc.18':
+ optional: true
+
+ '@rolldown/pluginutils@1.0.0-rc.18': {}
+
+ '@standard-schema/spec@1.1.0': {}
+
+ '@tybys/wasm-util@0.10.2':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@types/chai@5.2.3':
+ dependencies:
+ '@types/deep-eql': 4.0.2
+ assertion-error: 2.0.1
+
+ '@types/deep-eql@4.0.2': {}
+
+ '@types/js-yaml@4.0.9': {}
+
+ '@types/node@20.19.39':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@voidzero-dev/vite-plus-core@0.1.20(@types/node@20.19.39)':
+ dependencies:
+ '@oxc-project/runtime': 0.127.0
+ '@oxc-project/types': 0.127.0
+ lightningcss: 1.32.0
+ postcss: 8.5.14
+ optionalDependencies:
+ '@types/node': 20.19.39
+ fsevents: 2.3.3
+
+ '@voidzero-dev/vite-plus-darwin-arm64@0.1.20':
+ optional: true
+
+ '@voidzero-dev/vite-plus-darwin-x64@0.1.20':
+ optional: true
+
+ '@voidzero-dev/vite-plus-linux-arm64-gnu@0.1.20':
+ optional: true
+
+ '@voidzero-dev/vite-plus-linux-arm64-musl@0.1.20':
+ optional: true
+
+ '@voidzero-dev/vite-plus-linux-x64-gnu@0.1.20':
+ optional: true
+
+ '@voidzero-dev/vite-plus-linux-x64-musl@0.1.20':
+ optional: true
+
+ '@voidzero-dev/vite-plus-test@0.1.20(@types/node@20.19.39)(vite@8.0.11(@types/node@20.19.39))':
+ dependencies:
+ '@standard-schema/spec': 1.1.0
+ '@types/chai': 5.2.3
+ '@voidzero-dev/vite-plus-core': 0.1.20(@types/node@20.19.39)
+ es-module-lexer: 1.7.0
+ obug: 2.1.1
+ pixelmatch: 7.2.0
+ pngjs: 7.0.0
+ sirv: 3.0.2
+ std-env: 4.1.0
+ tinybench: 2.9.0
+ tinyexec: 1.1.2
+ tinyglobby: 0.2.16
+ vite: 8.0.11(@types/node@20.19.39)
+ ws: 8.20.0
+ optionalDependencies:
+ '@types/node': 20.19.39
+ transitivePeerDependencies:
+ - '@arethetypeswrong/core'
+ - '@tsdown/css'
+ - '@tsdown/exe'
+ - '@vitejs/devtools'
+ - bufferutil
+ - esbuild
+ - jiti
+ - less
+ - publint
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - terser
+ - tsx
+ - typescript
+ - unplugin-unused
+ - utf-8-validate
+ - yaml
+
+ '@voidzero-dev/vite-plus-win32-arm64-msvc@0.1.20':
+ optional: true
+
+ '@voidzero-dev/vite-plus-win32-x64-msvc@0.1.20':
+ optional: true
+
+ argparse@2.0.1: {}
+
+ assertion-error@2.0.1: {}
+
+ before-after-hook@2.2.3: {}
+
+ deprecation@2.3.1: {}
+
+ detect-libc@2.1.2: {}
+
+ es-module-lexer@1.7.0: {}
+
+ fdir@6.5.0(picomatch@4.0.4):
+ optionalDependencies:
+ picomatch: 4.0.4
+
+ fsevents@2.3.3:
+ optional: true
+
+ js-yaml@4.1.1:
+ dependencies:
+ argparse: 2.0.1
+
+ lightningcss-android-arm64@1.32.0:
+ optional: true
+
+ lightningcss-darwin-arm64@1.32.0:
+ optional: true
+
+ lightningcss-darwin-x64@1.32.0:
+ optional: true
+
+ lightningcss-freebsd-x64@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm64-gnu@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm64-musl@1.32.0:
+ optional: true
+
+ lightningcss-linux-x64-gnu@1.32.0:
+ optional: true
+
+ lightningcss-linux-x64-musl@1.32.0:
+ optional: true
+
+ lightningcss-win32-arm64-msvc@1.32.0:
+ optional: true
+
+ lightningcss-win32-x64-msvc@1.32.0:
+ optional: true
+
+ lightningcss@1.32.0:
+ dependencies:
+ detect-libc: 2.1.2
+ optionalDependencies:
+ lightningcss-android-arm64: 1.32.0
+ lightningcss-darwin-arm64: 1.32.0
+ lightningcss-darwin-x64: 1.32.0
+ lightningcss-freebsd-x64: 1.32.0
+ lightningcss-linux-arm-gnueabihf: 1.32.0
+ lightningcss-linux-arm64-gnu: 1.32.0
+ lightningcss-linux-arm64-musl: 1.32.0
+ lightningcss-linux-x64-gnu: 1.32.0
+ lightningcss-linux-x64-musl: 1.32.0
+ lightningcss-win32-arm64-msvc: 1.32.0
+ lightningcss-win32-x64-msvc: 1.32.0
+
+ mrmime@2.0.1: {}
+
+ nanoid@3.3.12: {}
+
+ obug@2.1.1: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ oxfmt@0.46.0:
+ dependencies:
+ tinypool: 2.1.0
+ optionalDependencies:
+ '@oxfmt/binding-android-arm-eabi': 0.46.0
+ '@oxfmt/binding-android-arm64': 0.46.0
+ '@oxfmt/binding-darwin-arm64': 0.46.0
+ '@oxfmt/binding-darwin-x64': 0.46.0
+ '@oxfmt/binding-freebsd-x64': 0.46.0
+ '@oxfmt/binding-linux-arm-gnueabihf': 0.46.0
+ '@oxfmt/binding-linux-arm-musleabihf': 0.46.0
+ '@oxfmt/binding-linux-arm64-gnu': 0.46.0
+ '@oxfmt/binding-linux-arm64-musl': 0.46.0
+ '@oxfmt/binding-linux-ppc64-gnu': 0.46.0
+ '@oxfmt/binding-linux-riscv64-gnu': 0.46.0
+ '@oxfmt/binding-linux-riscv64-musl': 0.46.0
+ '@oxfmt/binding-linux-s390x-gnu': 0.46.0
+ '@oxfmt/binding-linux-x64-gnu': 0.46.0
+ '@oxfmt/binding-linux-x64-musl': 0.46.0
+ '@oxfmt/binding-openharmony-arm64': 0.46.0
+ '@oxfmt/binding-win32-arm64-msvc': 0.46.0
+ '@oxfmt/binding-win32-ia32-msvc': 0.46.0
+ '@oxfmt/binding-win32-x64-msvc': 0.46.0
+
+ oxlint-tsgolint@0.22.0:
+ optionalDependencies:
+ '@oxlint-tsgolint/darwin-arm64': 0.22.0
+ '@oxlint-tsgolint/darwin-x64': 0.22.0
+ '@oxlint-tsgolint/linux-arm64': 0.22.0
+ '@oxlint-tsgolint/linux-x64': 0.22.0
+ '@oxlint-tsgolint/win32-arm64': 0.22.0
+ '@oxlint-tsgolint/win32-x64': 0.22.0
+
+ oxlint@1.61.0(oxlint-tsgolint@0.22.0):
+ optionalDependencies:
+ '@oxlint/binding-android-arm-eabi': 1.61.0
+ '@oxlint/binding-android-arm64': 1.61.0
+ '@oxlint/binding-darwin-arm64': 1.61.0
+ '@oxlint/binding-darwin-x64': 1.61.0
+ '@oxlint/binding-freebsd-x64': 1.61.0
+ '@oxlint/binding-linux-arm-gnueabihf': 1.61.0
+ '@oxlint/binding-linux-arm-musleabihf': 1.61.0
+ '@oxlint/binding-linux-arm64-gnu': 1.61.0
+ '@oxlint/binding-linux-arm64-musl': 1.61.0
+ '@oxlint/binding-linux-ppc64-gnu': 1.61.0
+ '@oxlint/binding-linux-riscv64-gnu': 1.61.0
+ '@oxlint/binding-linux-riscv64-musl': 1.61.0
+ '@oxlint/binding-linux-s390x-gnu': 1.61.0
+ '@oxlint/binding-linux-x64-gnu': 1.61.0
+ '@oxlint/binding-linux-x64-musl': 1.61.0
+ '@oxlint/binding-openharmony-arm64': 1.61.0
+ '@oxlint/binding-win32-arm64-msvc': 1.61.0
+ '@oxlint/binding-win32-ia32-msvc': 1.61.0
+ '@oxlint/binding-win32-x64-msvc': 1.61.0
+ oxlint-tsgolint: 0.22.0
+
+ picocolors@1.1.1: {}
+
+ picomatch@4.0.4: {}
+
+ pixelmatch@7.2.0:
+ dependencies:
+ pngjs: 7.0.0
+
+ pngjs@7.0.0: {}
+
+ postcss@8.5.14:
+ dependencies:
+ nanoid: 3.3.12
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ rolldown@1.0.0-rc.18:
+ dependencies:
+ '@oxc-project/types': 0.128.0
+ '@rolldown/pluginutils': 1.0.0-rc.18
+ optionalDependencies:
+ '@rolldown/binding-android-arm64': 1.0.0-rc.18
+ '@rolldown/binding-darwin-arm64': 1.0.0-rc.18
+ '@rolldown/binding-darwin-x64': 1.0.0-rc.18
+ '@rolldown/binding-freebsd-x64': 1.0.0-rc.18
+ '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.18
+ '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.18
+ '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.18
+ '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.18
+ '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.18
+ '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.18
+ '@rolldown/binding-linux-x64-musl': 1.0.0-rc.18
+ '@rolldown/binding-openharmony-arm64': 1.0.0-rc.18
+ '@rolldown/binding-wasm32-wasi': 1.0.0-rc.18
+ '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.18
+ '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.18
+
+ sirv@3.0.2:
+ dependencies:
+ '@polka/url': 1.0.0-next.29
+ mrmime: 2.0.1
+ totalist: 3.0.1
+
+ source-map-js@1.2.1: {}
+
+ std-env@4.1.0: {}
+
+ tinybench@2.9.0: {}
+
+ tinyexec@1.1.2: {}
+
+ tinyglobby@0.2.16:
+ dependencies:
+ fdir: 6.5.0(picomatch@4.0.4)
+ picomatch: 4.0.4
+
+ tinypool@2.1.0: {}
+
+ totalist@3.0.1: {}
+
+ tslib@2.8.1:
+ optional: true
+
+ tunnel@0.0.6: {}
+
+ undici-types@6.21.0: {}
+
+ undici@5.29.0:
+ dependencies:
+ '@fastify/busboy': 2.1.1
+
+ universal-user-agent@6.0.1: {}
+
+ vite-plus@0.1.20(@types/node@20.19.39)(vite@8.0.11(@types/node@20.19.39)):
+ dependencies:
+ '@oxc-project/types': 0.127.0
+ '@voidzero-dev/vite-plus-core': 0.1.20(@types/node@20.19.39)
+ '@voidzero-dev/vite-plus-test': 0.1.20(@types/node@20.19.39)(vite@8.0.11(@types/node@20.19.39))
+ oxfmt: 0.46.0
+ oxlint: 1.61.0(oxlint-tsgolint@0.22.0)
+ oxlint-tsgolint: 0.22.0
+ optionalDependencies:
+ '@voidzero-dev/vite-plus-darwin-arm64': 0.1.20
+ '@voidzero-dev/vite-plus-darwin-x64': 0.1.20
+ '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.1.20
+ '@voidzero-dev/vite-plus-linux-arm64-musl': 0.1.20
+ '@voidzero-dev/vite-plus-linux-x64-gnu': 0.1.20
+ '@voidzero-dev/vite-plus-linux-x64-musl': 0.1.20
+ '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.1.20
+ '@voidzero-dev/vite-plus-win32-x64-msvc': 0.1.20
+ transitivePeerDependencies:
+ - '@arethetypeswrong/core'
+ - '@edge-runtime/vm'
+ - '@opentelemetry/api'
+ - '@tsdown/css'
+ - '@tsdown/exe'
+ - '@types/node'
+ - '@vitejs/devtools'
+ - '@vitest/coverage-istanbul'
+ - '@vitest/coverage-v8'
+ - '@vitest/ui'
+ - bufferutil
+ - esbuild
+ - happy-dom
+ - jiti
+ - jsdom
+ - less
+ - publint
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - terser
+ - tsx
+ - typescript
+ - unplugin-unused
+ - utf-8-validate
+ - vite
+ - yaml
+
+ vite@8.0.11(@types/node@20.19.39):
+ dependencies:
+ lightningcss: 1.32.0
+ picomatch: 4.0.4
+ postcss: 8.5.14
+ rolldown: 1.0.0-rc.18
+ tinyglobby: 0.2.16
+ optionalDependencies:
+ '@types/node': 20.19.39
+ fsevents: 2.3.3
+
+ wrappy@1.0.2: {}
+
+ ws@8.20.0: {}
diff --git a/workflow-inputs/src/main.ts b/workflow-inputs/src/main.ts
new file mode 100644
index 0000000..c4f2d43
--- /dev/null
+++ b/workflow-inputs/src/main.ts
@@ -0,0 +1,187 @@
+/**
+ * Action entrypoint.
+ *
+ * Wires together the three pure modules (mask, parse-workflow, render-summary)
+ * with the GitHub Actions runtime: reads action inputs, resolves the calling
+ * workflow's input schema, applies masking, writes the markdown summary, and
+ * exposes it as the `summary` output.
+ */
+
+import { promises as fs } from "node:fs";
+import path from "node:path";
+import * as core from "@actions/core";
+import * as github from "@actions/github";
+import { DEFAULT_MASK_PATTERN, parseMaskPatterns } from "./mask.ts";
+import {
+ type InputSchema,
+ mergeInputs,
+ parseWorkflowSchema,
+ workflowPathFromRef,
+} from "./parse-workflow.ts";
+import { renderSummary } from "./render-summary.ts";
+
+interface ActionInputs {
+ title: string;
+ inputsJson: string;
+ maskPatterns: string;
+ showDefaults: boolean;
+}
+
+function readActionInputs(): ActionInputs {
+ return {
+ title: core.getInput("title") || "Workflow inputs",
+ inputsJson: core.getInput("inputs-json"),
+ maskPatterns: core.getInput("mask-patterns") || DEFAULT_MASK_PATTERN,
+ showDefaults: core.getBooleanInput("show-defaults"),
+ };
+}
+
+/**
+ * Coerces an arbitrary value to a string suitable for display in the summary.
+ *
+ * Workflow inputs on the wire are strings even when typed (booleans and
+ * numbers arrive as "true"/"42"). For defensive resilience against payloads
+ * that include JSON-typed values (e.g. when `inputs-json` is hand-crafted),
+ * we accept primitives directly and JSON-stringify objects/arrays rather
+ * than letting them collapse to `[object Object]`.
+ */
+function coerceToString(value: unknown): string | undefined {
+ if (value === null || value === undefined) return undefined;
+ if (typeof value === "string") return value;
+ if (typeof value === "boolean" || typeof value === "number" || typeof value === "bigint") {
+ return String(value);
+ }
+ try {
+ return JSON.stringify(value);
+ } catch {
+ return undefined;
+ }
+}
+
+function inputsRecordFromObject(obj: Record): Record {
+ const out: Record = {};
+ for (const [k, v] of Object.entries(obj)) {
+ const coerced = coerceToString(v);
+ if (coerced !== undefined) out[k] = coerced;
+ }
+ return out;
+}
+
+/**
+ * Reads the runtime input values that triggered the workflow.
+ *
+ * Priority order:
+ * 1. `inputs-json` action input (if provided) — explicit, most reliable.
+ * 2. `github.event.inputs` — populated for `workflow_dispatch` and
+ * `workflow_call` events.
+ *
+ * All values are coerced to strings (see `coerceToString`).
+ */
+function readRuntimeInputs(actionInputs: ActionInputs): Record {
+ if (actionInputs.inputsJson.trim().length > 0) {
+ let parsed: unknown;
+ try {
+ parsed = JSON.parse(actionInputs.inputsJson);
+ } catch (err) {
+ const message = err instanceof Error ? err.message : String(err);
+ throw new Error(`Failed to parse inputs-json: ${message}`);
+ }
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
+ throw new Error("inputs-json must be a JSON object.");
+ }
+ return inputsRecordFromObject(parsed as Record);
+ }
+
+ const eventInputs = github.context.payload["inputs"];
+ if (eventInputs && typeof eventInputs === "object" && !Array.isArray(eventInputs)) {
+ return inputsRecordFromObject(eventInputs as Record);
+ }
+
+ return {};
+}
+
+/**
+ * Tries to read the calling workflow's YAML file from the local workspace.
+ *
+ * `GITHUB_WORKFLOW_REF` has the form `//@][`. If the
+ * repository has been checked out (the recommended setup), the workflow file
+ * lives at `${GITHUB_WORKSPACE}/` and we can read it directly.
+ *
+ * Returns the raw YAML string, or `undefined` if the file isn't present
+ * locally — in which case the caller can decide whether to fall back to the
+ * GitHub API or simply proceed with runtime values only.
+ */
+async function readWorkflowFromWorkspace(): Promise {
+ const ref = process.env["GITHUB_WORKFLOW_REF"];
+ const workspace = process.env["GITHUB_WORKSPACE"];
+ const workflowPath = workflowPathFromRef(ref);
+ if (!workflowPath || !workspace) {
+ core.debug(
+ `No GITHUB_WORKFLOW_REF (${String(ref)}) or GITHUB_WORKSPACE (${String(workspace)}); skipping workspace read.`,
+ );
+ return undefined;
+ }
+
+ const fullPath = path.join(workspace, workflowPath);
+ try {
+ return await fs.readFile(fullPath, "utf8");
+ } catch (err) {
+ core.debug(`Could not read workflow from workspace at ${fullPath}: ${String(err)}`);
+ return undefined;
+ }
+}
+
+/**
+ * Resolves the input schema for the current workflow run. Tries the local
+ * workspace first; logs a warning and returns an empty schema if the file
+ * can't be located, so the action degrades gracefully rather than failing.
+ */
+async function resolveSchema(): Promise {
+ const yaml = await readWorkflowFromWorkspace();
+ if (!yaml) {
+ core.warning(
+ "Could not read the calling workflow file from the workspace. " +
+ "Run actions/checkout before this action to enable rich input descriptions, " +
+ "or pass inputs-json explicitly. The summary will fall back to runtime values only.",
+ );
+ return [];
+ }
+
+ const schema = parseWorkflowSchema(yaml);
+ // Combine workflow_dispatch and workflow_call schemas. In practice only one
+ // of these will be active for a given run, but if both are declared the
+ // union is the correct view: any of those names may appear in `inputs`.
+ const merged = new Map();
+ for (const input of [...schema.workflowDispatch, ...schema.workflowCall]) {
+ merged.set(input.name, input);
+ }
+ return [...merged.values()];
+}
+
+export async function run(): Promise {
+ const actionInputs = readActionInputs();
+ const maskPatterns = parseMaskPatterns(actionInputs.maskPatterns);
+ const runtime = readRuntimeInputs(actionInputs);
+ const schema = await resolveSchema();
+ const resolved = mergeInputs(schema, runtime);
+
+ const markdown = renderSummary(resolved, {
+ title: actionInputs.title,
+ showDefaults: actionInputs.showDefaults,
+ maskPatterns,
+ });
+
+ await core.summary.addRaw(markdown).write();
+ core.setOutput("summary", markdown);
+
+ core.info(
+ `Rendered ${resolved.length} input${resolved.length === 1 ? "" : "s"} to the job summary.`,
+ );
+}
+
+// Top-level invocation. Errors are reported via `core.setFailed` so the step
+// is marked as failed in the run UI without printing a node-style stack trace.
+run().catch((err: unknown) => {
+ const message = err instanceof Error ? err.message : String(err);
+ core.setFailed(message);
+});
diff --git a/workflow-inputs/src/mask.test.ts b/workflow-inputs/src/mask.test.ts
new file mode 100644
index 0000000..3878171
--- /dev/null
+++ b/workflow-inputs/src/mask.test.ts
@@ -0,0 +1,107 @@
+import { describe, expect, it } from "vite-plus/test";
+import {
+ DEFAULT_MASK_PATTERN,
+ MASK_PLACEHOLDER,
+ maskValue,
+ parseMaskPatterns,
+ shouldMask,
+} from "./mask.ts";
+
+describe("parseMaskPatterns", () => {
+ it("returns an empty array for undefined input", () => {
+ expect(parseMaskPatterns(undefined)).toEqual([]);
+ });
+
+ it("returns an empty array for an empty string", () => {
+ expect(parseMaskPatterns("")).toEqual([]);
+ });
+
+ it("parses a single pattern", () => {
+ const patterns = parseMaskPatterns("foo");
+ expect(patterns).toHaveLength(1);
+ expect(patterns[0]?.source).toBe("foo");
+ });
+
+ it("splits on commas and trims whitespace", () => {
+ const patterns = parseMaskPatterns("foo, bar ,baz");
+ expect(patterns.map((p) => p.source)).toEqual(["foo", "bar", "baz"]);
+ });
+
+ it("drops empty entries", () => {
+ const patterns = parseMaskPatterns("foo,,bar");
+ expect(patterns).toHaveLength(2);
+ });
+
+ it("honors a (?i) prefix as a case-insensitive flag", () => {
+ const patterns = parseMaskPatterns("(?i)secret");
+ expect(patterns[0]?.flags).toContain("i");
+ expect(patterns[0]?.source).toBe("secret");
+ });
+
+ it("throws a descriptive error for invalid patterns", () => {
+ expect(() => parseMaskPatterns("[unclosed")).toThrow(/Invalid mask pattern/);
+ });
+});
+
+describe("shouldMask", () => {
+ it("returns false when no patterns match", () => {
+ const patterns = parseMaskPatterns("secret");
+ expect(shouldMask("environment", patterns)).toBe(false);
+ });
+
+ it("returns true when any pattern matches", () => {
+ const patterns = parseMaskPatterns("(?i)secret,(?i)token");
+ expect(shouldMask("GH_TOKEN", patterns)).toBe(true);
+ });
+
+ it("returns false when patterns list is empty", () => {
+ expect(shouldMask("secret", [])).toBe(false);
+ });
+});
+
+describe("maskValue", () => {
+ const patterns = parseMaskPatterns(DEFAULT_MASK_PATTERN);
+
+ it("redacts values whose key matches a pattern", () => {
+ expect(maskValue("api_key", "abcd1234", patterns)).toBe(MASK_PLACEHOLDER);
+ expect(maskValue("apiKey", "abcd1234", patterns)).toBe(MASK_PLACEHOLDER);
+ expect(maskValue("PASSWORD", "hunter2", patterns)).toBe(MASK_PLACEHOLDER);
+ });
+
+ it("returns the value untouched when the key does not match", () => {
+ expect(maskValue("environment", "production", patterns)).toBe("production");
+ expect(maskValue("dryRun", "false", patterns)).toBe("false");
+ });
+
+ it("handles the empty value gracefully", () => {
+ expect(maskValue("token", "", patterns)).toBe(MASK_PLACEHOLDER);
+ });
+});
+
+describe("DEFAULT_MASK_PATTERN", () => {
+ const patterns = parseMaskPatterns(DEFAULT_MASK_PATTERN);
+
+ it("matches typical secret-bearing keys", () => {
+ for (const key of [
+ "token",
+ "github_token",
+ "GH_TOKEN",
+ "secret",
+ "mySecret",
+ "password",
+ "PASSWORD",
+ "api_key",
+ "api-key",
+ "apikey",
+ "API_KEY",
+ ]) {
+ expect(shouldMask(key, patterns)).toBe(true);
+ }
+ });
+
+ it("does not match common non-secret keys", () => {
+ for (const key of ["environment", "dryRun", "version", "branch", "name"]) {
+ expect(shouldMask(key, patterns)).toBe(false);
+ }
+ });
+});
diff --git a/workflow-inputs/src/mask.ts b/workflow-inputs/src/mask.ts
new file mode 100644
index 0000000..974307f
--- /dev/null
+++ b/workflow-inputs/src/mask.ts
@@ -0,0 +1,76 @@
+/**
+ * Secret-masking utilities.
+ *
+ * The action redacts input values whose names match a configurable set of
+ * regex patterns. This catches the common mistake of passing a token or
+ * password as a workflow input and prevents it from being printed in the
+ * job summary.
+ *
+ * The runner's own `::add-mask::` mechanism is independent and is honored
+ * by GitHub when it renders summaries — this layer is an extra belt to go
+ * with the runner's braces.
+ */
+
+/**
+ * Default regex pattern that matches input keys commonly associated with
+ * secret-like values. Case-insensitive.
+ */
+export const DEFAULT_MASK_PATTERN = "(?i)(secret|token|password|api[_-]?key)";
+
+/**
+ * The placeholder used in place of a redacted value.
+ */
+export const MASK_PLACEHOLDER = "***";
+
+/**
+ * Parses a comma-separated list of regex patterns into an array of `RegExp`
+ * objects.
+ *
+ * Patterns may begin with `(?i)` to enable case-insensitive matching, mirroring
+ * the syntax found in many other regex flavors. Whitespace around each pattern
+ * is trimmed and empty entries are ignored. Invalid patterns throw with a
+ * descriptive message identifying the offending entry.
+ */
+export function parseMaskPatterns(input: string | undefined): RegExp[] {
+ if (!input) return [];
+ return input
+ .split(",")
+ .map((p) => p.trim())
+ .filter((p) => p.length > 0)
+ .map((p) => compilePattern(p));
+}
+
+function compilePattern(pattern: string): RegExp {
+ // Support a leading `(?i)` flag prefix as a portable way to express
+ // case-insensitive matching across regex flavors.
+ let flags = "";
+ let body = pattern;
+ const flagMatch = body.match(/^\(\?([imsux]+)\)/);
+ if (flagMatch && flagMatch[1] !== undefined) {
+ flags = flagMatch[1]
+ .split("")
+ .filter((f) => "imsu".includes(f))
+ .join("");
+ body = body.slice(flagMatch[0].length);
+ }
+ try {
+ return new RegExp(body, flags);
+ } catch (err) {
+ const message = err instanceof Error ? err.message : String(err);
+ throw new Error(`Invalid mask pattern "${pattern}": ${message}`);
+ }
+}
+
+/**
+ * Returns true if any of the supplied patterns matches the given key.
+ */
+export function shouldMask(key: string, patterns: readonly RegExp[]): boolean {
+ return patterns.some((p) => p.test(key));
+}
+
+/**
+ * Redacts a value if its key matches any of the supplied patterns.
+ */
+export function maskValue(key: string, value: string, patterns: readonly RegExp[]): string {
+ return shouldMask(key, patterns) ? MASK_PLACEHOLDER : value;
+}
diff --git a/workflow-inputs/src/parse-workflow.test.ts b/workflow-inputs/src/parse-workflow.test.ts
new file mode 100644
index 0000000..172c95e
--- /dev/null
+++ b/workflow-inputs/src/parse-workflow.test.ts
@@ -0,0 +1,214 @@
+import { describe, expect, it } from "vite-plus/test";
+import { mergeInputs, parseWorkflowSchema, workflowPathFromRef } from "./parse-workflow.ts";
+
+describe("parseWorkflowSchema", () => {
+ it("extracts workflow_dispatch inputs with their schema", () => {
+ const yaml = `
+name: Deploy
+on:
+ workflow_dispatch:
+ inputs:
+ environment:
+ description: Where to deploy
+ type: choice
+ options:
+ - staging
+ - production
+ default: staging
+ required: true
+ dry-run:
+ description: Skip the actual deploy
+ type: boolean
+ default: false
+ version:
+ type: string
+`;
+ const schema = parseWorkflowSchema(yaml);
+ expect(schema.workflowDispatch).toHaveLength(3);
+ expect(schema.workflowCall).toEqual([]);
+
+ const env = schema.workflowDispatch[0];
+ expect(env?.name).toBe("environment");
+ expect(env?.type).toBe("choice");
+ expect(env?.description).toBe("Where to deploy");
+ expect(env?.default).toBe("staging");
+ expect(env?.required).toBe(true);
+ expect(env?.options).toEqual(["staging", "production"]);
+
+ const dryRun = schema.workflowDispatch[1];
+ expect(dryRun?.type).toBe("boolean");
+ expect(dryRun?.default).toBe("false");
+ expect(dryRun?.required).toBe(false);
+
+ const version = schema.workflowDispatch[2];
+ expect(version?.type).toBe("string");
+ expect(version?.default).toBeUndefined();
+ expect(version?.description).toBeUndefined();
+ });
+
+ it("extracts workflow_call inputs alongside workflow_dispatch", () => {
+ const yaml = `
+on:
+ workflow_dispatch:
+ inputs:
+ foo: { type: string }
+ workflow_call:
+ inputs:
+ bar: { type: boolean, default: true }
+`;
+ const schema = parseWorkflowSchema(yaml);
+ expect(schema.workflowDispatch.map((i) => i.name)).toEqual(["foo"]);
+ expect(schema.workflowCall.map((i) => i.name)).toEqual(["bar"]);
+ expect(schema.workflowCall[0]?.default).toBe("true");
+ });
+
+ it("returns empty arrays when no triggers declare inputs", () => {
+ const yaml = `
+name: CI
+on:
+ push:
+ branches: [main]
+`;
+ const schema = parseWorkflowSchema(yaml);
+ expect(schema.workflowDispatch).toEqual([]);
+ expect(schema.workflowCall).toEqual([]);
+ });
+
+ it('handles the bare-keyword "on" (YAML 1.1 truthy parsing)', () => {
+ // Some YAML loaders parse the bare keyword `on` as boolean true. js-yaml
+ // v4 does not, but we still defensively support that shape.
+ const yaml = `
+true:
+ workflow_dispatch:
+ inputs:
+ foo: { type: string }
+`;
+ const schema = parseWorkflowSchema(yaml);
+ expect(schema.workflowDispatch.map((i) => i.name)).toEqual(["foo"]);
+ });
+
+ it("tolerates a list-shaped `on:` field", () => {
+ const yaml = `
+on: [push, pull_request]
+`;
+ const schema = parseWorkflowSchema(yaml);
+ expect(schema.workflowDispatch).toEqual([]);
+ expect(schema.workflowCall).toEqual([]);
+ });
+
+ it("skips malformed input entries instead of throwing", () => {
+ const yaml = `
+on:
+ workflow_dispatch:
+ inputs:
+ good: { type: string }
+ bad: "not a mapping"
+`;
+ const schema = parseWorkflowSchema(yaml);
+ expect(schema.workflowDispatch.map((i) => i.name)).toEqual(["good"]);
+ });
+
+ it("throws a descriptive error on invalid YAML", () => {
+ expect(() => parseWorkflowSchema("foo: [unclosed")).toThrow(/Failed to parse workflow YAML/);
+ });
+
+ it("returns empty arrays for non-object documents", () => {
+ expect(parseWorkflowSchema("").workflowDispatch).toEqual([]);
+ expect(parseWorkflowSchema('"just a string"').workflowDispatch).toEqual([]);
+ });
+
+ it("stringifies non-string defaults", () => {
+ const yaml = `
+on:
+ workflow_dispatch:
+ inputs:
+ count: { type: number, default: 42 }
+ flag: { type: boolean, default: true }
+ tags: { type: string, default: [a, b] }
+`;
+ const schema = parseWorkflowSchema(yaml);
+ const inputs = schema.workflowDispatch;
+ expect(inputs.find((i) => i.name === "count")?.default).toBe("42");
+ expect(inputs.find((i) => i.name === "flag")?.default).toBe("true");
+ expect(inputs.find((i) => i.name === "tags")?.default).toBe('["a","b"]');
+ });
+});
+
+describe("mergeInputs", () => {
+ it("uses runtime values when provided", () => {
+ const schema = [
+ {
+ name: "environment",
+ type: "choice" as const,
+ required: true,
+ default: "staging",
+ options: ["staging", "production"],
+ },
+ ];
+ const merged = mergeInputs(schema, { environment: "production" });
+ expect(merged).toHaveLength(1);
+ expect(merged[0]?.value).toBe("production");
+ expect(merged[0]?.provenance).toBe("runtime");
+ });
+
+ it("falls back to declared defaults when runtime value is missing or empty", () => {
+ const schema = [
+ { name: "foo", type: "string" as const, default: "bar", required: false },
+ { name: "baz", type: "string" as const, default: "qux", required: false },
+ ];
+ const merged = mergeInputs(schema, { baz: "" });
+ expect(merged[0]?.provenance).toBe("default");
+ expect(merged[0]?.value).toBe("bar");
+ expect(merged[1]?.provenance).toBe("default");
+ expect(merged[1]?.value).toBe("qux");
+ });
+
+ it("marks declared inputs without value or default as missing", () => {
+ const schema = [{ name: "foo", type: "string" as const, required: true }];
+ const merged = mergeInputs(schema, {});
+ expect(merged[0]?.provenance).toBe("missing");
+ expect(merged[0]?.value).toBeUndefined();
+ });
+
+ it("surfaces runtime-only inputs that have no schema entry", () => {
+ const merged = mergeInputs([], { surprise: "value" });
+ expect(merged).toHaveLength(1);
+ expect(merged[0]?.provenance).toBe("runtime-only");
+ expect(merged[0]?.value).toBe("value");
+ expect(merged[0]?.schema).toBeUndefined();
+ });
+
+ it("preserves declaration order and appends runtime-only entries last", () => {
+ const schema = [
+ { name: "a", type: "string" as const, required: false },
+ { name: "b", type: "string" as const, required: false },
+ ];
+ const merged = mergeInputs(schema, { b: "2", c: "3", a: "1" });
+ expect(merged.map((i) => i.name)).toEqual(["a", "b", "c"]);
+ });
+});
+
+describe("workflowPathFromRef", () => {
+ it("extracts the workflow path from a typical ref", () => {
+ expect(
+ workflowPathFromRef(
+ "solana-program/actions/.github/workflows/workflow-inputs-ci.yml@refs/heads/main",
+ ),
+ ).toBe(".github/workflows/workflow-inputs-ci.yml");
+ });
+
+ it("handles refs without an @ suffix", () => {
+ expect(workflowPathFromRef("owner/repo/.github/workflows/file.yml")).toBe(
+ ".github/workflows/file.yml",
+ );
+ });
+
+ it("returns undefined when the ref is missing", () => {
+ expect(workflowPathFromRef(undefined)).toBeUndefined();
+ expect(workflowPathFromRef("")).toBeUndefined();
+ });
+
+ it("returns undefined when the ref is too short to contain a path", () => {
+ expect(workflowPathFromRef("owner/repo@refs/heads/main")).toBeUndefined();
+ });
+});
diff --git a/workflow-inputs/src/parse-workflow.ts b/workflow-inputs/src/parse-workflow.ts
new file mode 100644
index 0000000..4aab4f3
--- /dev/null
+++ b/workflow-inputs/src/parse-workflow.ts
@@ -0,0 +1,232 @@
+/**
+ * Workflow YAML parsing.
+ *
+ * GitHub Actions exposes the values of dispatched inputs at runtime via
+ * `github.event.inputs`, but it does NOT expose the input *schema* (descriptions,
+ * types, defaults, options, required-ness). To render a rich summary, this
+ * module reads the calling workflow's YAML file and extracts the declared
+ * input schema from `on.workflow_dispatch.inputs` and `on.workflow_call.inputs`.
+ *
+ * The path to the calling workflow is resolved from `GITHUB_WORKFLOW_REF`,
+ * which has the shape: `owner/repo/.github/workflows/file.yml@refs/heads/main`.
+ */
+
+import { load as parseYaml } from "js-yaml";
+
+/** A workflow input as declared in the workflow YAML schema. */
+export type InputType = "string" | "choice" | "boolean" | "number" | "environment";
+
+export interface InputSchema {
+ /** The input name (the key in the YAML). */
+ name: string;
+ /** The declared type, defaulting to `'string'` when omitted. */
+ type: InputType;
+ /** Free-form description from the YAML, if present. */
+ description?: string;
+ /** Default value as a string, if a default was declared. */
+ default?: string;
+ /** Whether the input was declared `required: true`. */
+ required: boolean;
+ /** For `choice` inputs, the list of allowed options. */
+ options?: string[];
+}
+
+export interface WorkflowSchema {
+ /** Inputs declared under `on.workflow_dispatch.inputs`. */
+ workflowDispatch: InputSchema[];
+ /** Inputs declared under `on.workflow_call.inputs`. */
+ workflowCall: InputSchema[];
+}
+
+/**
+ * Parses a workflow YAML document and returns the input schemas declared on
+ * `workflow_dispatch` and `workflow_call`.
+ *
+ * Returns empty arrays for triggers that are not present. Tolerates the
+ * `on:` field being a string (`on: workflow_dispatch`) or a list, in which
+ * case there are no declared inputs to extract.
+ */
+export function parseWorkflowSchema(yamlContent: string): WorkflowSchema {
+ let doc: unknown;
+ try {
+ doc = parseYaml(yamlContent);
+ } catch (err) {
+ const message = err instanceof Error ? err.message : String(err);
+ throw new Error(`Failed to parse workflow YAML: ${message}`);
+ }
+
+ if (!isObject(doc)) {
+ return { workflowDispatch: [], workflowCall: [] };
+ }
+
+ // YAML's bare `on` key is parsed as boolean `true` by some loaders because
+ // `on` is a YAML 1.1 truthy literal. js-yaml v4 follows YAML 1.2, where `on`
+ // is a plain string, so the field key is "on". We still defensively handle
+ // both spellings for resilience.
+ const onField =
+ (doc as Record)["on"] ??
+ (doc as Record)[true as unknown as string];
+
+ if (!isObject(onField)) {
+ return { workflowDispatch: [], workflowCall: [] };
+ }
+
+ return {
+ workflowDispatch: extractInputs(onField["workflow_dispatch"]),
+ workflowCall: extractInputs(onField["workflow_call"]),
+ };
+}
+
+function extractInputs(trigger: unknown): InputSchema[] {
+ if (!isObject(trigger)) return [];
+ const inputs = trigger["inputs"];
+ if (!isObject(inputs)) return [];
+
+ const result: InputSchema[] = [];
+ for (const [name, raw] of Object.entries(inputs)) {
+ if (!isObject(raw)) {
+ // An input with a value that isn't a mapping is malformed; skip it
+ // rather than blowing up the whole summary.
+ continue;
+ }
+ result.push(coerceInput(name, raw));
+ }
+ return result;
+}
+
+function coerceInput(name: string, raw: Record): InputSchema {
+ const type = coerceType(raw["type"]);
+ const description = typeof raw["description"] === "string" ? raw["description"] : undefined;
+ const required = raw["required"] === true;
+ const defaultValue = stringifyDefault(raw["default"]);
+ const options = coerceOptions(raw["options"]);
+
+ return {
+ name,
+ type,
+ ...(description !== undefined ? { description } : {}),
+ ...(defaultValue !== undefined ? { default: defaultValue } : {}),
+ required,
+ ...(options !== undefined ? { options } : {}),
+ };
+}
+
+function coerceType(value: unknown): InputType {
+ if (value === "choice" || value === "boolean" || value === "number" || value === "environment") {
+ return value;
+ }
+ return "string";
+}
+
+function coerceOptions(value: unknown): string[] | undefined {
+ if (!Array.isArray(value)) return undefined;
+ return value.map((v) => String(v));
+}
+
+function stringifyDefault(value: unknown): string | undefined {
+ if (value === undefined || value === null) return undefined;
+ if (typeof value === "string") return value;
+ if (typeof value === "boolean" || typeof value === "number") return String(value);
+ // For complex defaults (arrays, objects), JSON-stringify rather than dropping.
+ try {
+ return JSON.stringify(value);
+ } catch {
+ return undefined;
+ }
+}
+
+function isObject(value: unknown): value is Record {
+ return typeof value === "object" && value !== null && !Array.isArray(value);
+}
+
+/**
+ * Merges a declared input schema with the runtime input values, producing a
+ * unified view that includes provenance information.
+ *
+ * For each declared input, the runtime value (from `github.event.inputs` or
+ * an `inputs-json` override) takes precedence; if no runtime value was
+ * provided, the declared default is used and tagged as such.
+ *
+ * Runtime values that have no matching declaration are still included in the
+ * output (with `provenance: 'runtime-only'`) so the summary can surface them
+ * — useful for `repository_dispatch`-style payloads or when the YAML can't
+ * be located.
+ */
+export type Provenance = "runtime" | "default" | "runtime-only" | "missing";
+
+export interface ResolvedInput {
+ name: string;
+ /** The value to display, or undefined when the input is required but missing. */
+ value: string | undefined;
+ /** Where the value came from. */
+ provenance: Provenance;
+ /** The declared schema, if available. */
+ schema?: InputSchema;
+}
+
+export function mergeInputs(
+ schema: InputSchema[],
+ runtime: Record,
+): ResolvedInput[] {
+ const result: ResolvedInput[] = [];
+ const seen = new Set();
+
+ for (const declared of schema) {
+ seen.add(declared.name);
+ const runtimeValue = runtime[declared.name];
+ if (runtimeValue !== undefined && runtimeValue !== "") {
+ result.push({
+ name: declared.name,
+ value: runtimeValue,
+ provenance: "runtime",
+ schema: declared,
+ });
+ } else if (declared.default !== undefined) {
+ result.push({
+ name: declared.name,
+ value: declared.default,
+ provenance: "default",
+ schema: declared,
+ });
+ } else {
+ result.push({
+ name: declared.name,
+ value: undefined,
+ provenance: "missing",
+ schema: declared,
+ });
+ }
+ }
+
+ for (const [name, value] of Object.entries(runtime)) {
+ if (seen.has(name)) continue;
+ result.push({
+ name,
+ value,
+ provenance: "runtime-only",
+ });
+ }
+
+ return result;
+}
+
+/**
+ * Parses a `GITHUB_WORKFLOW_REF` value and returns the path to the workflow
+ * file relative to the repository root.
+ *
+ * The format is `//@][`, where `` is something
+ * like `.github/workflows/deploy.yml`.
+ *
+ * Returns `undefined` if the ref is missing or malformed.
+ */
+export function workflowPathFromRef(ref: string | undefined): string | undefined {
+ if (!ref) return undefined;
+ // Strip the trailing @ref.
+ const atIndex = ref.lastIndexOf("@");
+ const withoutRef = atIndex >= 0 ? ref.slice(0, atIndex) : ref;
+ // Drop the owner/repo prefix.
+ const parts = withoutRef.split("/");
+ if (parts.length < 3) return undefined;
+ const path = parts.slice(2).join("/");
+ return path.length > 0 ? path : undefined;
+}
diff --git a/workflow-inputs/src/render-summary.test.ts b/workflow-inputs/src/render-summary.test.ts
new file mode 100644
index 0000000..9e512f9
--- /dev/null
+++ b/workflow-inputs/src/render-summary.test.ts
@@ -0,0 +1,142 @@
+import { describe, expect, it } from "vite-plus/test";
+import { DEFAULT_MASK_PATTERN, parseMaskPatterns } from "./mask.ts";
+import type { ResolvedInput } from "./parse-workflow.ts";
+import { renderSummary } from "./render-summary.ts";
+
+const defaultOptions = {
+ title: "Workflow inputs",
+ showDefaults: true,
+ maskPatterns: parseMaskPatterns(DEFAULT_MASK_PATTERN),
+};
+
+describe("renderSummary", () => {
+ it("renders the heading and an empty-state note when there are no inputs", () => {
+ const md = renderSummary([], defaultOptions);
+ expect(md).toContain("## Workflow inputs");
+ expect(md).toContain("_No inputs were provided");
+ expect(md).not.toContain("| Name |");
+ });
+
+ it("renders a basic table for runtime-only inputs (no schema)", () => {
+ const inputs: ResolvedInput[] = [{ name: "foo", value: "bar", provenance: "runtime-only" }];
+ const md = renderSummary(inputs, defaultOptions);
+ expect(md).toContain("| Name | Value |");
+ expect(md).toContain("| foo | `bar` _(runtime-only)_ |");
+ // No Type or Description columns when nothing has a schema.
+ expect(md).not.toContain("| Type |");
+ expect(md).not.toContain("Description");
+ });
+
+ it("includes Type and Description columns when at least one input has them", () => {
+ const inputs: ResolvedInput[] = [
+ {
+ name: "environment",
+ value: "production",
+ provenance: "runtime",
+ schema: {
+ name: "environment",
+ type: "choice",
+ required: true,
+ options: ["staging", "production"],
+ description: "Where to deploy",
+ },
+ },
+ {
+ name: "dry-run",
+ value: "false",
+ provenance: "default",
+ schema: {
+ name: "dry-run",
+ type: "boolean",
+ required: false,
+ default: "false",
+ },
+ },
+ ];
+ const md = renderSummary(inputs, defaultOptions);
+ expect(md).toContain("| Name | Value | Type | Description |");
+ expect(md).toContain(
+ "| environment | `production` | choice (`staging`, `production`) | Where to deploy |",
+ );
+ expect(md).toContain("| dry-run | `false` _(default)_ | boolean | |");
+ });
+
+ it("omits the (default) tag when showDefaults is false", () => {
+ const inputs: ResolvedInput[] = [
+ {
+ name: "foo",
+ value: "bar",
+ provenance: "default",
+ schema: { name: "foo", type: "string", required: false, default: "bar" },
+ },
+ ];
+ const md = renderSummary(inputs, { ...defaultOptions, showDefaults: false });
+ expect(md).not.toContain("_(default)_");
+ expect(md).toContain("| foo | `bar` | string |");
+ });
+
+ it("redacts values when the input name matches a mask pattern", () => {
+ const inputs: ResolvedInput[] = [
+ { name: "github_token", value: "ghp_supersecret", provenance: "runtime" },
+ ];
+ const md = renderSummary(inputs, defaultOptions);
+ expect(md).not.toContain("ghp_supersecret");
+ expect(md).toContain("***");
+ });
+
+ it("shows _(missing)_ for required inputs with no value", () => {
+ const inputs: ResolvedInput[] = [
+ {
+ name: "version",
+ value: undefined,
+ provenance: "missing",
+ schema: { name: "version", type: "string", required: true },
+ },
+ ];
+ const md = renderSummary(inputs, defaultOptions);
+ expect(md).toContain("| version | _(missing)_ | string |");
+ });
+
+ it("escapes pipe characters in cells to keep the table well-formed", () => {
+ const inputs: ResolvedInput[] = [{ name: "pattern", value: "foo|bar", provenance: "runtime" }];
+ const md = renderSummary(inputs, defaultOptions);
+ expect(md).toContain("foo\\|bar");
+ });
+
+ it("replaces newlines in cell values with spaces", () => {
+ const inputs: ResolvedInput[] = [
+ { name: "multiline", value: "line1\nline2", provenance: "runtime" },
+ ];
+ const md = renderSummary(inputs, defaultOptions);
+ expect(md).toContain("line1 line2");
+ // The rendered table row should still be a single line.
+ const tableRows = md.split("\n").filter((l) => l.startsWith("| multiline"));
+ expect(tableRows).toHaveLength(1);
+ });
+
+ it("handles backticks within values without breaking the inline code span", () => {
+ const inputs: ResolvedInput[] = [{ name: "raw", value: "a `tick`", provenance: "runtime" }];
+ const md = renderSummary(inputs, defaultOptions);
+ // The backtick character itself shouldn't appear unescaped inside the cell.
+ expect(md).toContain("| raw | `a \u02cbtick\u02cb` |");
+ });
+
+ it("uses the supplied title", () => {
+ const md = renderSummary([], { ...defaultOptions, title: "Deploy parameters" });
+ expect(md.startsWith("## Deploy parameters")).toBe(true);
+ });
+
+ it("includes only the Type column when no descriptions are present", () => {
+ const inputs: ResolvedInput[] = [
+ {
+ name: "foo",
+ value: "bar",
+ provenance: "runtime",
+ schema: { name: "foo", type: "string", required: false },
+ },
+ ];
+ const md = renderSummary(inputs, defaultOptions);
+ expect(md).toContain("| Name | Value | Type |");
+ expect(md).not.toContain("Description");
+ });
+});
diff --git a/workflow-inputs/src/render-summary.ts b/workflow-inputs/src/render-summary.ts
new file mode 100644
index 0000000..c8c60bf
--- /dev/null
+++ b/workflow-inputs/src/render-summary.ts
@@ -0,0 +1,113 @@
+/**
+ * Markdown rendering for the job summary.
+ *
+ * Produces a single GitHub-Flavored Markdown table summarizing the inputs of
+ * the current workflow run. Designed to be appended to `$GITHUB_STEP_SUMMARY`
+ * (via `core.summary.addRaw().write()`) or returned as an output for
+ * downstream steps.
+ */
+
+import { maskValue } from "./mask.ts";
+import type { ResolvedInput } from "./parse-workflow.ts";
+
+export interface RenderOptions {
+ /** Heading text (rendered as H2). */
+ title: string;
+ /** Whether to include the "(default)" tag for inputs falling back to their default. */
+ showDefaults: boolean;
+ /** Compiled patterns for masking secret-like values. */
+ maskPatterns: readonly RegExp[];
+}
+
+/**
+ * Renders the resolved inputs as a markdown summary section.
+ *
+ * The shape is intentionally simple: a heading followed by a four-column
+ * table (Name, Value, Type, Description). Columns are omitted when the data
+ * is uniformly empty across all rows, so a workflow that doesn't declare
+ * descriptions doesn't end up with a column full of dashes.
+ *
+ * If there are no inputs to display, returns a heading plus a short italic
+ * note rather than an empty table.
+ */
+export function renderSummary(inputs: readonly ResolvedInput[], options: RenderOptions): string {
+ const lines: string[] = [`## ${options.title}`, ""];
+
+ if (inputs.length === 0) {
+ lines.push("_No inputs were provided for this workflow run._");
+ lines.push("");
+ return lines.join("\n");
+ }
+
+ const showType = inputs.some((i) => i.schema?.type !== undefined);
+ const showDescription = inputs.some(
+ (i) => i.schema?.description !== undefined && i.schema.description.length > 0,
+ );
+
+ const headers: string[] = ["Name", "Value"];
+ if (showType) headers.push("Type");
+ if (showDescription) headers.push("Description");
+
+ lines.push(`| ${headers.join(" | ")} |`);
+ lines.push(`| ${headers.map(() => "---").join(" | ")} |`);
+
+ for (const input of inputs) {
+ const row: string[] = [escapeCell(input.name), formatValue(input, options)];
+ if (showType) row.push(formatType(input));
+ if (showDescription) row.push(escapeCell(input.schema?.description ?? ""));
+ lines.push(`| ${row.join(" | ")} |`);
+ }
+
+ lines.push("");
+ return lines.join("\n");
+}
+
+function formatValue(input: ResolvedInput, options: RenderOptions): string {
+ if (input.value === undefined) {
+ return input.provenance === "missing" ? "_(missing)_" : "_(empty)_";
+ }
+
+ const masked = maskValue(input.name, input.value, options.maskPatterns);
+ const display = `\`${escapeInlineCode(masked)}\``;
+
+ if (input.provenance === "default" && options.showDefaults) {
+ return `${display} _(default)_`;
+ }
+ if (input.provenance === "runtime-only") {
+ return `${display} _(runtime-only)_`;
+ }
+ return display;
+}
+
+function formatType(input: ResolvedInput): string {
+ if (!input.schema) return "";
+ const { type, options } = input.schema;
+ // For choice inputs, append the option list so readers know the allowed set
+ // even after the run has dispatched.
+ if (type === "choice" && options && options.length > 0) {
+ return `choice (${options.map((o) => `\`${escapeInlineCode(o)}\``).join(", ")})`;
+ }
+ return type;
+}
+
+/**
+ * Escapes a value for inclusion as a GFM table cell. Handles pipe characters
+ * (which would otherwise break the column boundary) and newlines (which would
+ * break the row).
+ */
+function escapeCell(value: string): string {
+ return value.replace(/\\/g, "\\\\").replace(/\|/g, "\\|").replace(/\r?\n/g, " ");
+}
+
+/**
+ * Escapes a value for inclusion inside backticks. Backticks themselves cannot
+ * appear inside a single-backtick span, so we substitute a unicode lookalike
+ * for the rare case where the input value contains one. Pipes still need
+ * escaping since the entire cell is a table cell.
+ */
+function escapeInlineCode(value: string): string {
+ return value
+ .replace(/\r?\n/g, " ")
+ .replace(/`/g, "\u02cb") // modifier letter grave accent
+ .replace(/\|/g, "\\|");
+}
diff --git a/workflow-inputs/tsconfig.json b/workflow-inputs/tsconfig.json
new file mode 100644
index 0000000..b736818
--- /dev/null
+++ b/workflow-inputs/tsconfig.json
@@ -0,0 +1,24 @@
+{
+ "compilerOptions": {
+ "target": "esnext",
+ "lib": ["es2023"],
+ "moduleDetection": "force",
+ "module": "preserve",
+ "moduleResolution": "bundler",
+ "resolveJsonModule": true,
+ "types": ["node"],
+ "strict": true,
+ "noUncheckedIndexedAccess": true,
+ "noImplicitOverride": true,
+ "exactOptionalPropertyTypes": true,
+ "noUnusedLocals": true,
+ "declaration": true,
+ "noEmit": true,
+ "allowImportingTsExtensions": true,
+ "esModuleInterop": true,
+ "isolatedModules": true,
+ "verbatimModuleSyntax": true,
+ "skipLibCheck": true
+ },
+ "include": ["src/**/*.ts", "vite.config.ts"]
+}
diff --git a/workflow-inputs/vite.config.ts b/workflow-inputs/vite.config.ts
new file mode 100644
index 0000000..90b01b8
--- /dev/null
+++ b/workflow-inputs/vite.config.ts
@@ -0,0 +1,48 @@
+import { defineConfig } from "vite-plus";
+
+export default defineConfig({
+ // Test runner (Vitest) configuration.
+ test: {
+ include: ["src/**/*.test.ts"],
+ environment: "node",
+ },
+
+ // Linter (Oxlint) configuration. Enable type-aware checks and full
+ // type-checking via tsgo so `vp check` covers fmt + lint + typecheck.
+ // The `dist/` folder is committed (it's the action's bundled output)
+ // but it's a generated artifact and shouldn't be linted/formatted.
+ lint: {
+ ignorePatterns: ["dist/**", "node_modules/**"],
+ options: {
+ typeAware: true,
+ typeCheck: true,
+ },
+ },
+
+ // Formatter (Oxfmt) — same dist/ exclusion.
+ fmt: {
+ ignorePatterns: ["dist/**", "node_modules/**"],
+ },
+
+ // Library bundling (tsdown) configuration.
+ // We bundle the action entrypoint as a single self-contained ESM file
+ // so it can be invoked directly by GitHub Actions' node24 runtime.
+ pack: {
+ entry: { index: "src/main.ts" },
+ format: "esm",
+ platform: "node",
+ target: "node24",
+ outDir: "dist",
+ dts: false,
+ sourcemap: false,
+ clean: true,
+ // Use `.js` rather than the default `.mjs` so action.yml's
+ // `main: dist/index.js` matches the JS Action ecosystem convention.
+ // The package.json has `"type": "module"`, so Node treats `.js` as ESM.
+ fixedExtension: false,
+ // Inline every dependency so the runner doesn't need a node_modules folder.
+ deps: {
+ alwaysBundle: [/.*/],
+ },
+ },
+});
]