diff --git a/.codacy.yml b/.codacy.yml
new file mode 100644
index 0000000..048f111
--- /dev/null
+++ b/.codacy.yml
@@ -0,0 +1,4 @@
+---
+exclude_paths:
+ - "*.md"
+ - "dist/**"
diff --git a/.eslintignore b/.eslintignore
new file mode 100644
index 0000000..e34b4da
--- /dev/null
+++ b/.eslintignore
@@ -0,0 +1,5 @@
+dist/
+lib/
+node_modules/
+jest.config.js
+coverage/
\ No newline at end of file
diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644
index 0000000..9487b84
--- /dev/null
+++ b/.eslintrc.json
@@ -0,0 +1,85 @@
+{
+ "plugins": [
+ "jest",
+ "@typescript-eslint",
+ "github"
+ ],
+ "extends": [
+ "plugin:github/recommended",
+ "plugin:prettier/recommended"
+ ],
+ "parser": "@typescript-eslint/parser",
+ "parserOptions": {
+ "ecmaVersion": 9,
+ "sourceType": "module",
+ "project": "./tsconfig.json"
+ },
+ "rules": {
+ "i18n-text/no-en": "off",
+ "eslint-comments/no-use": "off",
+ "import/no-namespace": "off",
+ "no-unused-vars": "off",
+ "@typescript-eslint/no-unused-vars": "error",
+ "@typescript-eslint/explicit-member-accessibility": [
+ "error",
+ {
+ "accessibility": "no-public"
+ }
+ ],
+ "@typescript-eslint/no-require-imports": "error",
+ "@typescript-eslint/array-type": "error",
+ "@typescript-eslint/await-thenable": "error",
+ "@typescript-eslint/ban-ts-comment": "off",
+ "camelcase": "off",
+ "@typescript-eslint/consistent-type-assertions": "error",
+ "@typescript-eslint/explicit-function-return-type": [
+ "error",
+ {
+ "allowExpressions": true
+ }
+ ],
+ "@typescript-eslint/func-call-spacing": [
+ "error",
+ "never"
+ ],
+ "@typescript-eslint/no-array-constructor": "error",
+ "@typescript-eslint/no-empty-interface": "error",
+ "@typescript-eslint/no-explicit-any": "error",
+ "@typescript-eslint/no-extraneous-class": "error",
+ "@typescript-eslint/no-for-in-array": "error",
+ "@typescript-eslint/no-inferrable-types": "error",
+ "@typescript-eslint/no-misused-new": "error",
+ "@typescript-eslint/no-namespace": "error",
+ "@typescript-eslint/no-non-null-assertion": "warn",
+ "@typescript-eslint/no-unnecessary-qualifier": "error",
+ "@typescript-eslint/no-unnecessary-type-assertion": "error",
+ "@typescript-eslint/no-useless-constructor": "error",
+ "@typescript-eslint/no-var-requires": "error",
+ "@typescript-eslint/prefer-for-of": "warn",
+ "@typescript-eslint/prefer-function-type": "warn",
+ "@typescript-eslint/prefer-includes": "error",
+ "@typescript-eslint/prefer-string-starts-ends-with": "error",
+ "@typescript-eslint/promise-function-async": "error",
+ "@typescript-eslint/require-array-sort-compare": "error",
+ "@typescript-eslint/restrict-plus-operands": "error",
+ "no-shadow": "off",
+ "@typescript-eslint/no-shadow": "error",
+ "semi": "off",
+ "filenames/match-regex": [
+ "error",
+ "^[a-zA-Z0-9\\-.]+$",
+ true
+ ],
+ "@typescript-eslint/semi": [
+ "error",
+ "never"
+ ],
+ "@typescript-eslint/type-annotation-spacing": "error",
+ "@typescript-eslint/unbound-method": "error"
+ },
+ "env": {
+ "node": true,
+ "es6": true,
+ "jest/globals": true
+ }
+}
\ No newline at end of file
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..2e051e1
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+dist/** -diff linguist-generated=true
\ No newline at end of file
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000..e9fb31f
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,24 @@
+version: 2
+updates:
+- package-ecosystem: npm
+ directory: "/"
+ schedule:
+ interval: daily
+ open-pull-requests-limit: 10
+ versioning-strategy: widen
+ labels:
+ - "merge when passing"
+- package-ecosystem: github-actions
+ directory: "/"
+ schedule:
+ interval: daily
+ open-pull-requests-limit: 10
+ labels:
+ - "merge when passing"
+- package-ecosystem: gitsubmodule
+ directory: /
+ schedule:
+ interval: daily
+ open-pull-requests-limit: 10
+ labels:
+ - "merge when passing"
diff --git a/.github/workflows/manual-triggered-job-example.yml b/.github/workflows/manual-triggered-job-example.yml
new file mode 100644
index 0000000..9ef695f
--- /dev/null
+++ b/.github/workflows/manual-triggered-job-example.yml
@@ -0,0 +1,54 @@
+name: Manual Triggered Job Example
+
+permissions:
+ contents: read
+
+on:
+ workflow_dispatch:
+
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ test:
+ name: Test changed-files
+ runs-on: [ 'ubuntu-latest' ]
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: Run changed-files with defaults
+ id: changed-files
+ uses: ./
+
+ - name: Show output
+ run: |
+ echo '${{ toJSON(steps.changed-files.outputs) }}'
+
+ - name: Run changed-files with glob filtering
+ id: changed-files-glob
+ uses: ./
+ with:
+ files: |
+ test/*.txt
+
+ - name: Show output
+ run: |
+ echo '${{ toJSON(steps.changed-files-glob.outputs) }}'
+
+ - name: Run changed-files with glob filtering and all_old_new_renamed_files
+ id: changed-files-glob-all-old-new-renamed-files
+ uses: ./
+ with:
+ include_all_old_new_renamed_files: true
+ files: |
+ test/*.txt
+
+ - name: Show output
+ run: |
+ echo '${{ toJSON(steps.changed-files-glob-all-old-new-renamed-files.outputs) }}'
diff --git a/.github/workflows/matrix-example.yml b/.github/workflows/matrix-example.yml
new file mode 100644
index 0000000..e7ac532
--- /dev/null
+++ b/.github/workflows/matrix-example.yml
@@ -0,0 +1,49 @@
+name: Matrix Example
+
+permissions:
+ contents: read
+
+on:
+ workflow_dispatch:
+ pull_request:
+ branches:
+ - main
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ changed-files:
+ name: Get changed files
+ runs-on: [ 'ubuntu-latest' ]
+ outputs:
+ matrix: ${{ steps.changed-files.outputs.all_changed_files }}
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ - name: Get changed files
+ id: changed-files
+ uses: ./
+ with:
+ matrix: true
+ - name: List all changed files
+ run: echo '${{ steps.changed-files.outputs.all_changed_files }}'
+
+ matrix-job:
+ name: Run Matrix Job
+ runs-on: [ 'ubuntu-latest' ]
+ needs: [changed-files]
+ strategy:
+ matrix:
+ files: ${{ fromJSON(needs.changed-files.outputs.matrix) }}
+ max-parallel: 4
+ fail-fast: false
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ - name: Test
+ run: |
+ echo ${{ matrix.files }}
diff --git a/.github/workflows/multi-job-example.yml b/.github/workflows/multi-job-example.yml
new file mode 100644
index 0000000..10dfa16
--- /dev/null
+++ b/.github/workflows/multi-job-example.yml
@@ -0,0 +1,71 @@
+name: Multi Job Example
+
+permissions:
+ contents: read
+
+on:
+ push:
+ branches:
+ - "**"
+ pull_request:
+ branches:
+ - "**"
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ changed-files:
+ name: Get changed files
+ runs-on: [ 'ubuntu-latest' ]
+ outputs:
+ all_changed_files: ${{ steps.changed-files.outputs.all_changed_files }}
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ - name: Get changed files
+ id: changed-files
+ uses: ./
+ - name: List all changed files
+ run: echo '${{ steps.changed-files.outputs.all_changed_files }}'
+
+ view-changed-files:
+ name: View all changed files
+ runs-on: ubuntu-latest
+ needs: [changed-files]
+ steps:
+ - name: List all changed files
+ run: |
+ echo '${{ needs.changed-files.outputs.all_changed_files }}'
+
+
+ changed-files-rest-api:
+ name: Get changed files using REST API
+ runs-on: [ 'ubuntu-latest' ]
+ outputs:
+ all_changed_files: ${{ steps.changed-files.outputs.all_changed_files }}
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ - name: Get changed files
+ id: changed-files
+ continue-on-error: ${{ github.event_name == 'push' }}
+ uses: ./
+ with:
+ use_rest_api: true
+ - name: List all changed files
+ run: echo '${{ steps.changed-files.outputs.all_changed_files }}'
+
+ view-changed-files-rest-api:
+ name: View all changed files using REST API
+ runs-on: [ 'ubuntu-latest' ]
+ needs: [changed-files-rest-api]
+ steps:
+ - name: List all changed files
+ run: |
+ echo '${{ needs.changed-files-rest-api.outputs.all_changed_files }}'
diff --git a/.github/workflows/workflow-run-example.yml b/.github/workflows/workflow-run-example.yml
new file mode 100644
index 0000000..554723d
--- /dev/null
+++ b/.github/workflows/workflow-run-example.yml
@@ -0,0 +1,45 @@
+name: Workflow Run Example
+on:
+ workflow_run:
+ workflows: [Matrix Example]
+ types: [completed]
+
+permissions:
+ contents: read
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ on-success:
+ runs-on: [ 'ubuntu-latest' ]
+ if: ${{ github.event.workflow_run.conclusion == 'success' }}
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ - name: Get changed files
+ id: changed-files
+ uses: ./
+
+ - name: Echo list of changed files on success
+ run: |
+ echo "Changed files on success:"
+ echo "${{ steps.changed-files.outputs.all_changed_files }}"
+
+ on-failure:
+ runs-on: [ 'ubuntu-latest' ]
+ if: ${{ github.event.workflow_run.conclusion == 'failure' }}
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ - name: Get changed files
+ id: changed-files
+ uses: ./
+
+ - name: Echo list of changed files on failure
+ run: |
+ echo "Changed files on failure:"
+ echo "${{ steps.changed-files.outputs.all_changed_files }}"
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..8944111
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,107 @@
+# Dependency directory
+node_modules
+
+# Rest pulled from https://github.com/github/gitignore/blob/master/Node.gitignore
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+lerna-debug.log*
+
+# Diagnostic reports (https://nodejs.org/api/report.html)
+report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+*.lcov
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (https://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+jspm_packages/
+
+# TypeScript v1 declaration files
+typings/
+
+# TypeScript cache
+*.tsbuildinfo
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+./.env
+.env/../.env
+./.env.local
+./.env/../.env.local
+.env
+.env.test
+
+# parcel-bundler cache (https://parceljs.org/)
+.cache
+
+# next.js build output
+.next
+
+# nuxt.js build output
+.nuxt
+
+# vuepress build output
+.vuepress/dist
+
+# Serverless directories
+.serverless/
+
+# FuseBox cache
+.fusebox/
+
+# DynamoDB Local files
+.dynamodb/
+
+# OS metadata
+.DS_Store
+Thumbs.db
+
+# Ignore built ts files
+__tests__/runner/*
+lib/**/*
+
+# IDEA
+.idea/
+
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..53bb84a
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "test/demo"]
+ path = test/demo
+ url = git@github.com:step-security/demo.git
diff --git a/.nvmrc b/.nvmrc
new file mode 100644
index 0000000..209e3ef
--- /dev/null
+++ b/.nvmrc
@@ -0,0 +1 @@
+20
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 0000000..2186947
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,3 @@
+dist/
+lib/
+node_modules/
\ No newline at end of file
diff --git a/.prettierrc.json b/.prettierrc.json
new file mode 100644
index 0000000..bd30a26
--- /dev/null
+++ b/.prettierrc.json
@@ -0,0 +1,10 @@
+{
+ "printWidth": 80,
+ "tabWidth": 2,
+ "useTabs": false,
+ "semi": false,
+ "singleQuote": true,
+ "trailingComma": "none",
+ "bracketSpacing": false,
+ "arrowParens": "avoid"
+}
\ No newline at end of file
diff --git a/.whitesource b/.whitesource
new file mode 100644
index 0000000..96443ed
--- /dev/null
+++ b/.whitesource
@@ -0,0 +1,12 @@
+{
+ "scanSettings": {
+ "baseBranches": []
+ },
+ "checkRunSettings": {
+ "vulnerableCheckRunConclusionLevel": "failure",
+ "displayMode": "diff"
+ },
+ "issueSettings": {
+ "minSeverityLevel": "LOW"
+ }
+}
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..3c754f6
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2021, Tonye Jack
+Copyright (c) 2023 StepSecurity
+
+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.
diff --git a/README.md b/README.md
index 8100081..7c543c7 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,1332 @@
-# changed-files
\ No newline at end of file
+[](https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on)
+[](https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on)
+[](https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on)
+[](https://github.com/search?o=desc\&q=step-security+changed-files+language%3AYAML\&s=\&type=Code)
+
+[](https://app.codacy.com/gh/step-security/changed-files/dashboard?utm_source=gh\&utm_medium=referral\&utm_content=\&utm_campaign=Badge_grade)
+[](https://github.com/step-security/changed-files/actions/workflows/test.yml)
+[](https://github.com/step-security/changed-files/actions/workflows/sync-release-version.yml)
+
+
+
+[](#contributors-)
+
+
+
+## changed-files
+
+Effortlessly track all changed files and directories relative to a target branch, the current branch (preceding commit or the last remote commit), multiple branches, or custom commits returning **relative paths** from the project root using this GitHub action.
+
+> \[!NOTE]
+>
+> * This action solely identifies files that have changed for events such as [`pull_request*`, `push`, `merge_group`, `release`, and many more](#other-supported-events-electron). However, it doesn't detect pending uncommitted changes created during the workflow execution.
+>
+> See: https://github.com/step-security/verify-changed-files instead.
+
+## Table of contents
+
+* [Features 🚀](#features-)
+* [Usage 💻](#usage-)
+ * [On `pull_request` 🔀](#on-pull_request-)
+ * [Using local .git directory 📁](#using-local-git-directory-)
+ * [Using Github's API :octocat:](#using-githubs-api-octocat)
+ * [On `push` ⬆️](#on-push-️)
+ * [Other supported events :electron:](#other-supported-events-electron)
+* [Inputs ⚙️](#inputs-️)
+* [Useful Acronyms 🧮](#useful-acronyms-)
+* [Outputs 📤](#outputs-)
+* [Versioning 🏷️](#versioning-️)
+* [Examples 📄](#examples-)
+* [Real-world usage 🌐](#real-world-usage-)
+ * [Open source projects 📦](#open-source-projects-)
+ * [Scalability Example 📈](#scalability-example-)
+* [Important Notice ⚠️](#important-notice-️)
+* [Migration guide 🔄](#migration-guide-)
+* [Credits 👏](#credits-)
+* [Report Bugs 🐛](#report-bugs-)
+* [Contributors ✨](#contributors-)
+
+## Features 🚀
+
+* Fast execution, averaging 0-10 seconds.
+* Leverages either [Github's REST API](https://docs.github.com/en/rest/reference/repos#list-commits) or [Git's native diff command](https://git-scm.com/docs/git-diff) to determine changed files.
+* Facilitates easy debugging.
+* Scales to handle large/mono repositories.
+* Supports Git submodules.
+* Supports [merge queues](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-a-merge-queue) for pull requests.
+* Generates escaped [JSON output for running matrix jobs](https://github.com/step-security/changed-files/blob/main/.github/workflows/matrix-example.yml) based on changed files.
+* Lists changed directories.
+ * Limits matching changed directories to a specified maximum depth.
+ * Optionally excludes the current directory.
+* Writes outputs to a designated `.txt` or `.json` file for further processing.
+* Restores deleted files to their previous location or a newly specified location.
+* Supports fetching a fixed number of commits, which improves performance.
+* Compatible with all platforms (Linux, MacOS, Windows).
+* Supports [GitHub-hosted runners](https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners).
+* Supports [GitHub Enterprise Server](https://docs.github.com/en/enterprise-server@3.3/admin/github-actions/getting-started-with-github-actions-for-your-enterprise/getting-started-with-github-actions-for-github-enterprise-server).
+* Supports [self-hosted runners](https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners).
+* Lists all files and directories that have changed:
+ * Between the current pull request branch and the last commit on the target branch.
+ * Between the last commit and the current pushed change.
+ * Between the last remote branch commit and the current HEAD.
+* Restricts change detection to a subset of files and directories:
+ * Provides boolean output indicating changes in specific files.
+ * Uses [Glob pattern](https://codepen.io/mrmlnc/pen/OXQjMe) matching.
+ * Supports Globstar.
+ * Supports brace expansion.
+ * Supports negation.
+ * Uses [YAML](https://yaml.org/) syntax for specifying patterns.
+ * Supports [YAML anchors & aliases](https://github.com/step-security/changed-files/blob/main/test/changed-files.yml#L8-L12).
+ * Supports [YAML multi-line strings](https://github.com/step-security/changed-files/blob/main/test/changed-files.yml#L13-L16).
+
+And many more...
+
+## Usage 💻
+
+> \[!IMPORTANT]
+>
+> * **Push Events**: When configuring [`actions/checkout`](https://github.com/actions/checkout#usage), make sure to set [`fetch-depth`](https://github.com/actions/checkout#usage) to either `0` or `2`, depending on your use case.
+> * **Mono Repositories**: To avoid pulling the entire branch history, you can utilize the default [`actions/checkout`](https://github.com/actions/checkout#usage)'s [`fetch-depth`](https://github.com/actions/checkout#usage) of `1` for [`pull_request`](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request) events.
+> * **Quoting Multiline Inputs**: Avoid using single or double quotes for [multiline](https://github.com/step-security/changed-files/blob/main/test/changed-files.yml#L13-L16) inputs. The value is already a string separated by a newline character. Refer to the [Examples](#examples-) section for more information.
+> * **Credentials Persistence**: If [`fetch-depth`](https://github.com/actions/checkout#usage) is not set to 0, make sure to set [`persist-credentials`](https://github.com/actions/checkout#usage) to `true` when configuring [`actions/checkout`](https://github.com/actions/checkout#usage).
+> * **Matching Files and Folders**: To match all files and folders under a directory, this requires a globstar pattern e.g. `dir_name/**` which matches any number of subdirectories and files.
+
+Visit the [discussions for more information](https://github.com/step-security/changed-files/discussions) or [create a new discussion](https://github.com/step-security/changed-files/discussions/new/choose) for usage-related questions.
+
+### On [`pull_request`](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request) 🔀
+
+Detect changes to all files in a Pull request relative to the target branch or since the last pushed commit.
+
+#### Using local .git directory 📁
+
+```yaml
+name: CI
+
+on:
+ pull_request:
+ branches:
+ - main
+
+jobs:
+ # ------------------------------------------------------------------------------------------------------------------------------------------------
+ # Event `pull_request`: Compare the last commit of the main branch or last remote commit of the PR branch -> to the current commit of a PR branch.
+ # ------------------------------------------------------------------------------------------------------------------------------------------------
+ changed_files:
+ runs-on: ubuntu-latest # windows-latest || macos-latest
+ name: Test changed-files
+ steps:
+ - uses: actions/checkout@v4
+
+ # -----------------------------------------------------------------------------------------------------------
+ # Example 1
+ # -----------------------------------------------------------------------------------------------------------
+ - name: Get changed files
+ id: changed-files
+ uses: step-security/changed-files@v45
+ # To compare changes between the current commit and the last pushed remote commit set `since_last_remote_commit: true`. e.g
+ # with:
+ # since_last_remote_commit: true
+
+ - name: List all changed files
+ env:
+ ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}
+ run: |
+ for file in ${ALL_CHANGED_FILES}; do
+ echo "$file was changed"
+ done
+
+ # -----------------------------------------------------------------------------------------------------------
+ # Example 2
+ # -----------------------------------------------------------------------------------------------------------
+ - name: Get all changed markdown files
+ id: changed-markdown-files
+ uses: step-security/changed-files@v45
+ with:
+ # Avoid using single or double quotes for multiline patterns
+ files: |
+ **.md
+ docs/**.md
+
+ - name: List all changed files markdown files
+ if: steps.changed-markdown-files.outputs.any_changed == 'true'
+ env:
+ ALL_CHANGED_FILES: ${{ steps.changed-markdown-files.outputs.all_changed_files }}
+ run: |
+ for file in ${ALL_CHANGED_FILES}; do
+ echo "$file was changed"
+ done
+
+ # -----------------------------------------------------------------------------------------------------------
+ # Example 3
+ # -----------------------------------------------------------------------------------------------------------
+ - name: Get all test, doc and src files that have changed
+ id: changed-files-yaml
+ uses: step-security/changed-files@v45
+ with:
+ files_yaml: |
+ doc:
+ - '**.md'
+ - docs/**
+ test:
+ - test/**
+ - '!test/**.md'
+ src:
+ - src/**
+ # Optionally set `files_yaml_from_source_file` to read the YAML from a file. e.g `files_yaml_from_source_file: .github/changed-files.yml`
+
+ - name: Run step if test file(s) change
+ # NOTE: Ensure all outputs are prefixed by the same key used above e.g. `test_(...)` | `doc_(...)` | `src_(...)` when trying to access the `any_changed` output.
+ if: steps.changed-files-yaml.outputs.test_any_changed == 'true'
+ env:
+ TEST_ALL_CHANGED_FILES: ${{ steps.changed-files-yaml.outputs.test_all_changed_files }}
+ run: |
+ echo "One or more test file(s) has changed."
+ echo "List all the files that have changed: $TEST_ALL_CHANGED_FILES"
+
+ - name: Run step if doc file(s) change
+ if: steps.changed-files-yaml.outputs.doc_any_changed == 'true'
+ env:
+ DOC_ALL_CHANGED_FILES: ${{ steps.changed-files-yaml.outputs.doc_all_changed_files }}
+ run: |
+ echo "One or more doc file(s) has changed."
+ echo "List all the files that have changed: $DOC_ALL_CHANGED_FILES"
+
+ # -----------------------------------------------------------------------------------------------------------
+ # Example 4
+ # -----------------------------------------------------------------------------------------------------------
+ - name: Get changed files in the docs folder
+ id: changed-files-specific
+ uses: step-security/changed-files@v45
+ with:
+ files: docs/*.{js,html} # Alternatively using: `docs/**`
+ files_ignore: docs/static.js
+
+ - name: Run step if any file(s) in the docs folder change
+ if: steps.changed-files-specific.outputs.any_changed == 'true'
+ env:
+ ALL_CHANGED_FILES: ${{ steps.changed-files-specific.outputs.all_changed_files }}
+ run: |
+ echo "One or more files in the docs folder has changed."
+ echo "List all the files that have changed: $ALL_CHANGED_FILES"
+```
+
+#### Using Github's API :octocat:
+
+```yaml
+name: CI
+
+on:
+ pull_request:
+ branches:
+ - main
+
+jobs:
+ # -------------------------------------------------------------
+ # Event `pull_request`: Returns all changed pull request files.
+ # --------------------------------------------------------------
+ changed_files:
+ # NOTE:
+ # - This is limited to pull_request* events and would raise an error for other events.
+ # - A maximum of 3000 files can be returned.
+ # - For more flexibility and no limitations see "Using local .git directory" above.
+
+ runs-on: ubuntu-latest # windows-latest || macos-latest
+ name: Test changed-files
+ permissions:
+ pull-requests: read
+
+ steps:
+ - name: Get changed files
+ id: changed-files
+ uses: step-security/changed-files@v45
+
+ - name: List all changed files
+ env:
+ ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}
+ run: |
+ for file in ${ALL_CHANGED_FILES}; do
+ echo "$file was changed"
+ done
+```
+
+### On [`push`](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#push) ⬆️
+
+Detect changes to files made since the last pushed commit.
+
+```yaml
+name: CI
+
+on:
+ push:
+ branches:
+ - main
+
+jobs:
+ # -------------------------------------------------------------
+ # Using GitHub's API is not supported for push events
+ # -------------------------------------------------------------
+ #
+ # ----------------------------------------------------------------------------------------------
+ # Using local .git history
+ # ----------------------------------------------------------------------------------------------
+ # Event `push`: Compare the preceding remote commit -> to the current commit of the main branch
+ # ----------------------------------------------------------------------------------------------
+ changed_files:
+ runs-on: ubuntu-latest # windows-latest || macos-latest
+ name: Test changed-files
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: 0 # OR "2" -> To retrieve the preceding commit.
+
+ - name: Get changed files
+ id: changed-files
+ uses: step-security/changed-files@v45
+ # NOTE: `since_last_remote_commit: true` is implied by default and falls back to the previous local commit.
+
+ - name: List all changed files
+ env:
+ ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}
+ run: |
+ for file in ${ALL_CHANGED_FILES}; do
+ echo "$file was changed"
+ done
+ ...
+```
+
+### Other supported events :electron:
+
+* [schedule](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule)
+* [release](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#release)
+* [workflow\_dispatch](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_dispatch)
+* [workflow\_run](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_run)
+* [merge\_group](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#merge_group)
+* [issue\_comment](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#issue_comment)
+* ...and many more
+
+To access more examples, navigate to the [Examples](#examples-) section.
+
+If you feel generous and want to show some extra appreciation:
+
+Support this project with a :star:
+
+[![Buy me a coffee][buymeacoffee-shield]][buymeacoffee]
+
+[buymeacoffee]: https://www.buymeacoffee.com/jackton1
+
+[buymeacoffee-shield]: https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png
+
+> \[!IMPORTANT]
+>
+> * When using `files_yaml*` inputs:
+> * All keys must start with a letter or `_` and contain only alphanumeric characters, `-`, or `_`.
+>
+> For example, `test` or `test_key` or `test-key` or `_test_key` are all valid choices.
+
+## Inputs ⚙️
+
+
+
+```yaml
+- uses: step-security/changed-files@v45
+ id: changed-files
+ with:
+ # Github API URL.
+ # Type: string
+ # Default: "${{ github.api_url }}"
+ api_url: ''
+
+ # Specify a different base commit
+ # SHA or branch used for
+ # comparing changes
+ # Type: string
+ base_sha: ''
+
+ # Exclude changes outside the current
+ # directory and show path names
+ # relative to it. NOTE: This
+ # requires you to specify the
+ # top-level directory via the `path`
+ # input.
+ # Type: boolean
+ # Default: "true"
+ diff_relative: ''
+
+ # Output unique changed directories instead
+ # of filenames. NOTE: This returns
+ # `.` for changed files located
+ # in the current working directory
+ # which defaults to `$GITHUB_WORKSPACE`.
+ # Type: boolean
+ # Default: "false"
+ dir_names: ''
+
+ # Include only directories that have
+ # been deleted as opposed to
+ # directory names of files that
+ # have been deleted in the
+ # `deleted_files` output when `dir_names` is
+ # set to `true`.
+ # Type: boolean
+ # Default: "false"
+ dir_names_deleted_files_include_only_deleted_dirs: ''
+
+ # Exclude the current directory represented
+ # by `.` from the output
+ # when `dir_names` is set to
+ # `true`.
+ # Type: boolean
+ # Default: "false"
+ dir_names_exclude_current_dir: ''
+
+ # File and directory patterns to
+ # include in the output when
+ # `dir_names` is set to `true`.
+ # NOTE: This returns only the
+ # matching files and also the
+ # directory names.
+ # Type: string
+ dir_names_include_files: ''
+
+ # Separator used to split the
+ # `dir_names_include_files` input
+ # Type: string
+ # Default: "\n"
+ dir_names_include_files_separator: ''
+
+ # Limit the directory output to
+ # a maximum depth e.g `test/test1/test2`
+ # with max depth of `2`
+ # returns `test/test1`.
+ # Type: string
+ dir_names_max_depth: ''
+
+ # Escape JSON output.
+ # Type: boolean
+ # Default: "true"
+ escape_json: ''
+
+ # Exclude changes to submodules.
+ # Type: boolean
+ # Default: "false"
+ exclude_submodules: ''
+
+ # Fail when the initial diff
+ # fails.
+ # Type: boolean
+ # Default: "false"
+ fail_on_initial_diff_error: ''
+
+ # Fail when the submodule diff
+ # fails.
+ # Type: boolean
+ # Default: "false"
+ fail_on_submodule_diff_error: ''
+
+ # Fetch additional history for submodules.
+ # Type: boolean
+ # Default: "false"
+ fetch_additional_submodule_history: ''
+
+ # Depth of additional branch history
+ # fetched. NOTE: This can be
+ # adjusted to resolve errors with
+ # insufficient history.
+ # Type: string
+ # Default: "25"
+ fetch_depth: ''
+
+ # Maximum number of retries to
+ # fetch missing history.
+ # Type: string
+ # Default: "20"
+ fetch_missing_history_max_retries: ''
+
+ # File and directory patterns used
+ # to detect changes (Defaults to the entire repo if unset). NOTE:
+ # Multiline file/directory patterns should not
+ # include quotes.
+ # Type: string
+ files: ''
+
+ # Source file(s) used to populate
+ # the `files` input.
+ # Type: string
+ files_from_source_file: ''
+
+ # Separator used to split the
+ # `files_from_source_file` input.
+ # Type: string
+ # Default: "\n"
+ files_from_source_file_separator: ''
+
+ # Ignore changes to these file(s).
+ # NOTE: Multiline file/directory patterns should
+ # not include quotes.
+ # Type: string
+ files_ignore: ''
+
+ # Source file(s) used to populate
+ # the `files_ignore` input
+ # Type: string
+ files_ignore_from_source_file: ''
+
+ # Separator used to split the
+ # `files_ignore_from_source_file` input
+ # Type: string
+ # Default: "\n"
+ files_ignore_from_source_file_separator: ''
+
+ # Separator used to split the
+ # `files_ignore` input
+ # Type: string
+ # Default: "\n"
+ files_ignore_separator: ''
+
+ # YAML used to define a
+ # set of file patterns to
+ # ignore changes
+ # Type: string
+ files_ignore_yaml: ''
+
+ # Source file(s) used to populate
+ # the `files_ignore_yaml` input. Example: https://github.com/step-security/changed-files/blob/main/test/changed-files.yml
+ # Type: string
+ files_ignore_yaml_from_source_file: ''
+
+ # Separator used to split the
+ # `files_ignore_yaml_from_source_file` input
+ # Type: string
+ # Default: "\n"
+ files_ignore_yaml_from_source_file_separator: ''
+
+ # Separator used to split the
+ # `files` input
+ # Type: string
+ # Default: "\n"
+ files_separator: ''
+
+ # YAML used to define a
+ # set of file patterns to
+ # detect changes
+ # Type: string
+ files_yaml: ''
+
+ # Source file(s) used to populate
+ # the `files_yaml` input. Example: https://github.com/step-security/changed-files/blob/main/test/changed-files.yml
+ # Type: string
+ files_yaml_from_source_file: ''
+
+ # Separator used to split the
+ # `files_yaml_from_source_file` input
+ # Type: string
+ # Default: "\n"
+ files_yaml_from_source_file_separator: ''
+
+ # Include `all_old_new_renamed_files` output. Note this
+ # can generate a large output
+ # See: #501.
+ # Type: boolean
+ # Default: "false"
+ include_all_old_new_renamed_files: ''
+
+ # Output list of changed files
+ # in a JSON formatted string
+ # which can be used for
+ # matrix jobs. Example: https://github.com/step-security/changed-files/blob/main/.github/workflows/matrix-example.yml
+ # Type: boolean
+ # Default: "false"
+ json: ''
+
+ # Output changed files in a
+ # format that can be used
+ # for matrix jobs. Alias for
+ # setting inputs `json` to `true`
+ # and `escape_json` to `false`.
+ # Type: boolean
+ # Default: "false"
+ matrix: ''
+
+ # Apply the negation patterns first.
+ # NOTE: This affects how changed
+ # files are matched.
+ # Type: boolean
+ # Default: "false"
+ negation_patterns_first: ''
+
+ # Split character for old and
+ # new renamed filename pairs.
+ # Type: string
+ # Default: " "
+ old_new_files_separator: ''
+
+ # Split character for old and
+ # new filename pairs.
+ # Type: string
+ # Default: ","
+ old_new_separator: ''
+
+ # Directory to store output files.
+ # Type: string
+ # Default: ".github/outputs"
+ output_dir: ''
+
+ # Output renamed files as deleted
+ # and added files.
+ # Type: boolean
+ # Default: "false"
+ output_renamed_files_as_deleted_and_added: ''
+
+ # Specify a relative path under
+ # `$GITHUB_WORKSPACE` to locate the repository.
+ # Type: string
+ # Default: "."
+ path: ''
+
+ # Use non-ASCII characters to match
+ # files and output the filenames
+ # completely verbatim by setting this
+ # to `false`
+ # Type: boolean
+ # Default: "true"
+ quotepath: ''
+
+ # Recover deleted files.
+ # Type: boolean
+ # Default: "false"
+ recover_deleted_files: ''
+
+ # Recover deleted files to a
+ # new destination directory, defaults to
+ # the original location.
+ # Type: string
+ recover_deleted_files_to_destination: ''
+
+ # File and directory patterns used
+ # to recover deleted files, defaults
+ # to the patterns provided via
+ # the `files`, `files_from_source_file`, `files_ignore` and
+ # `files_ignore_from_source_file` inputs or all deleted
+ # files if no patterns are
+ # provided.
+ # Type: string
+ recover_files: ''
+
+ # File and directory patterns to
+ # ignore when recovering deleted files.
+ # Type: string
+ recover_files_ignore: ''
+
+ # Separator used to split the
+ # `recover_files_ignore` input
+ # Type: string
+ # Default: "\n"
+ recover_files_ignore_separator: ''
+
+ # Separator used to split the
+ # `recover_files` input
+ # Type: string
+ # Default: "\n"
+ recover_files_separator: ''
+
+ # Apply sanitization to output filenames
+ # before being set as output.
+ # Type: boolean
+ # Default: "true"
+ safe_output: ''
+
+ # Split character for output strings.
+ # Type: string
+ # Default: " "
+ separator: ''
+
+ # Specify a different commit SHA
+ # or branch used for comparing
+ # changes
+ # Type: string
+ sha: ''
+
+ # Get changed files for commits
+ # whose timestamp is older than
+ # the given time.
+ # Type: string
+ since: ''
+
+ # Use the last commit on
+ # the remote branch as the
+ # `base_sha`. Defaults to the last
+ # non-merge commit on the target
+ # branch for pull request events
+ # and the previous remote commit
+ # of the current branch for
+ # push events.
+ # Type: boolean
+ # Default: "false"
+ since_last_remote_commit: ''
+
+ # Skip initially fetching additional history
+ # to improve performance for shallow
+ # repositories. NOTE: This could lead
+ # to errors with missing history.
+ # It's intended to be used
+ # when you've fetched all necessary
+ # history to perform the diff.
+ # Type: boolean
+ # Default: "false"
+ skip_initial_fetch: ''
+
+ # Tags pattern to ignore.
+ # Type: string
+ tags_ignore_pattern: ''
+
+ # Tags pattern to include.
+ # Type: string
+ # Default: "*"
+ tags_pattern: ''
+
+ # GitHub token used to fetch
+ # changed files from Github's API.
+ # Type: string
+ # Default: "${{ github.token }}"
+ token: ''
+
+ # Get changed files for commits
+ # whose timestamp is earlier than
+ # the given time.
+ # Type: string
+ until: ''
+
+ # Use POSIX path separator `/`
+ # for output file paths on
+ # Windows.
+ # Type: boolean
+ # Default: "false"
+ use_posix_path_separator: ''
+
+ # Force the use of Github's
+ # REST API even when a
+ # local copy of the repository
+ # exists
+ # Type: boolean
+ # Default: "false"
+ use_rest_api: ''
+
+ # Write outputs to the `output_dir`
+ # defaults to `.github/outputs` folder. NOTE:
+ # This creates a `.txt` file
+ # by default and a `.json`
+ # file if `json` is set
+ # to `true`.
+ # Type: boolean
+ # Default: "false"
+ write_output_files: ''
+
+```
+
+
+
+## Useful Acronyms 🧮
+
+| Acronym | Meaning |
+|:---------:|:------------:|
+| A | Added |
+| C | Copied |
+| M | Modified |
+| D | Deleted |
+| R | Renamed |
+| T | Type changed |
+| U | Unmerged |
+| X | Unknown |
+
+> \[!IMPORTANT]
+>
+> * When using `files_yaml*` inputs:
+> * it's required to prefix all outputs with the key to ensure that the correct outputs are accessible.
+>
+> For example, if you use `test` as the key, you can access outputs like `added_files`, `any_changed`, and so on by prefixing them with the key `test_added_files` or `test_any_changed` etc.
+
+## Outputs 📤
+
+
+
+| OUTPUT | TYPE | DESCRIPTION |
+|------------------------------------------------------------------------------------------------------------------------------------------------|--------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| [added\_files](#output_added_files) | string | Returns only files that are
Added (A). |
+| [added\_files\_count](#output_added_files_count) | string | Returns the number of `added_files` |
+| [all\_changed\_and\_modified\_files](#output_all_changed_and_modified_files) | string | Returns all changed and modified
files i.e. a combination of
(ACMRDTUX) |
+| [all\_changed\_and\_modified\_files\_count](#output_all_changed_and_modified_files_count) | string | Returns the number of `all_changed_and_modified_files` |
+| [all\_changed\_files](#output_all_changed_files) | string | Returns all changed files i.e.
a combination of all added,
copied, modified and renamed files
(ACMR) |
+| [all\_changed\_files\_count](#output_all_changed_files_count) | string | Returns the number of `all_changed_files` |
+| [all\_modified\_files](#output_all_modified_files) | string | Returns all changed files i.e.
a combination of all added,
copied, modified, renamed and deleted
files (ACMRD). |
+| [all\_modified\_files\_count](#output_all_modified_files_count) | string | Returns the number of `all_modified_files` |
+| [all\_old\_new\_renamed\_files](#output_all_old_new_renamed_files) | string | Returns only files that are
Renamed and lists their old
and new names. **NOTE:** This
requires setting `include_all_old_new_renamed_files` to `true`.
Also, keep in mind that
this output is global and
wouldn't be nested in outputs
generated when the `*_yaml_*` input
is used. (R) |
+| [all\_old\_new\_renamed\_files\_count](#output_all_old_new_renamed_files_count) | string | Returns the number of `all_old_new_renamed_files` |
+| [any\_changed](#output_any_changed) | string | Returns `true` when any of
the filenames provided using the
`files*` or `files_ignore*` inputs have changed. This
defaults to `true` when no
patterns are specified. i.e. *includes a combination of all added, copied, modified and renamed files (ACMR)*. |
+| [any\_deleted](#output_any_deleted) | string | Returns `true` when any of
the filenames provided using the
`files*` or `files_ignore*` inputs have been deleted.
This defaults to `true` when
no patterns are specified. (D) |
+| [any\_modified](#output_any_modified) | string | Returns `true` when any of
the filenames provided using the
`files*` or `files_ignore*` inputs have been modified.
This defaults to `true` when
no patterns are specified. i.e.
*includes a combination of all added, copied, modified, renamed, and deleted files (ACMRD)*. |
+| [changed\_keys](#output_changed_keys) | string | Returns all changed YAML keys
when the `files_yaml` input is
used. i.e. key that contains
any path that has either
been added, copied, modified, and
renamed (ACMR) |
+| [copied\_files](#output_copied_files) | string | Returns only files that are
Copied (C). |
+| [copied\_files\_count](#output_copied_files_count) | string | Returns the number of `copied_files` |
+| [deleted\_files](#output_deleted_files) | string | Returns only files that are
Deleted (D). |
+| [deleted\_files\_count](#output_deleted_files_count) | string | Returns the number of `deleted_files` |
+| [modified\_files](#output_modified_files) | string | Returns only files that are
Modified (M). |
+| [modified\_files\_count](#output_modified_files_count) | string | Returns the number of `modified_files` |
+| [modified\_keys](#output_modified_keys) | string | Returns all modified YAML keys
when the `files_yaml` input is
used. i.e. key that contains
any path that has either
been added, copied, modified, and
deleted (ACMRD) |
+| [only\_changed](#output_only_changed) | string | Returns `true` when only files
provided using the `files*` or `files_ignore*` inputs
have changed. i.e. *includes a combination of all added, copied, modified and renamed files (ACMR)*. |
+| [only\_deleted](#output_only_deleted) | string | Returns `true` when only files
provided using the `files*` or `files_ignore*` inputs
have been deleted. (D) |
+| [only\_modified](#output_only_modified) | string | Returns `true` when only files
provided using the `files*` or `files_ignore*` inputs
have been modified. (ACMRD). |
+| [other\_changed\_files](#output_other_changed_files) | string | Returns all other changed files
not listed in the files
input i.e. includes a combination
of all added, copied, modified
and renamed files (ACMR). |
+| [other\_changed\_files\_count](#output_other_changed_files_count) | string | Returns the number of `other_changed_files` |
+| [other\_deleted\_files](#output_other_deleted_files) | string | Returns all other deleted files
not listed in the files
input i.e. a combination of
all deleted files (D) |
+| [other\_deleted\_files\_count](#output_other_deleted_files_count) | string | Returns the number of `other_deleted_files` |
+| [other\_modified\_files](#output_other_modified_files) | string | Returns all other modified files
not listed in the files
input i.e. a combination of
all added, copied, modified, and
deleted files (ACMRD) |
+| [other\_modified\_files\_count](#output_other_modified_files_count) | string | Returns the number of `other_modified_files` |
+| [renamed\_files](#output_renamed_files) | string | Returns only files that are
Renamed (R). |
+| [renamed\_files\_count](#output_renamed_files_count) | string | Returns the number of `renamed_files` |
+| [type\_changed\_files](#output_type_changed_files) | string | Returns only files that have
their file type changed (T). |
+| [type\_changed\_files\_count](#output_type_changed_files_count) | string | Returns the number of `type_changed_files` |
+| [unknown\_files](#output_unknown_files) | string | Returns only files that are
Unknown (X). |
+| [unknown\_files\_count](#output_unknown_files_count) | string | Returns the number of `unknown_files` |
+| [unmerged\_files](#output_unmerged_files) | string | Returns only files that are
Unmerged (U). |
+| [unmerged\_files\_count](#output_unmerged_files_count) | string | Returns the number of `unmerged_files` |
+
+
+
+## Versioning 🏷️
+
+This GitHub Action follows the principles of [Semantic Versioning](https://semver.org) for versioning releases.
+
+The format of the version string is as follows:
+
+* major: indicates significant changes or new features that may not be backward compatible.
+
+* minor: indicates minor changes or new features that are backward compatible.
+
+* patch: indicates bug fixes or other small changes that are backward compatible.
+
+## Examples 📄
+
+
+Get all changed files in the current branch
+
+```yaml
+...
+ - name: Get changed files
+ id: changed-files
+ uses: step-security/changed-files@v45
+...
+```
+
+
+
+
+Get all changed files without escaping unsafe filename characters
+
+```yaml
+...
+ - name: Get changed files
+ id: changed-files
+ uses: step-security/changed-files@v45
+ with:
+ safe_output: false # set to false because we are using an environment variable to store the output and avoid command injection.
+
+ - name: List all added files
+ env:
+ ADDED_FILES: ${{ steps.changed-files.outputs.added_files }}
+ run: |
+ for file in ${ADDED_FILES}; do
+ echo "$file was added"
+ done
+...
+```
+
+
+
+
+Get all changed files and use a comma separator
+
+```yaml
+...
+ - name: Get all changed files and use a comma separator in the output
+ id: changed-files
+ uses: step-security/changed-files@v45
+ with:
+ separator: ","
+...
+```
+
+See [inputs](#inputs) for more information.
+
+
+
+
+ Get all changed files and list all added files
+
+```yaml
+...
+ - name: Get changed files
+ id: changed-files
+ uses: step-security/changed-files@v45
+
+ - name: List all added files
+ env:
+ ADDED_FILES: ${{ steps.changed-files.outputs.added_files }}
+ run: |
+ for file in ${ADDED_FILES}; do
+ echo "$file was added"
+ done
+...
+```
+
+See [outputs](#outputs) for a list of all available outputs.
+
+
+
+
+Get all changed files and optionally run a step if a file was modified
+
+```yaml
+...
+ - name: Get changed files
+ id: changed-files
+ uses: step-security/changed-files@v45
+
+ - name: Run a step if my-file.txt was modified
+ if: contains(steps.changed-files.outputs.modified_files, 'my-file.txt')
+ run: |
+ echo "my-file.txt file has been modified."
+...
+```
+
+See [outputs](#outputs) for a list of all available outputs.
+
+
+
+
+Get all changed files and write the outputs to a txt file
+
+```yaml
+...
+
+ - name: Get changed files and write the outputs to a Txt file
+ id: changed-files-write-output-files-txt
+ uses: step-security/changed-files@v45
+ with:
+ write_output_files: true
+
+ - name: Verify the contents of the .github/outputs/added_files.txt file
+ run: |
+ cat .github/outputs/added_files.txt
+...
+```
+
+
+
+
+Get all changed files and write the outputs to a json file
+
+```yaml
+...
+ - name: Get changed files and write the outputs to a JSON file
+ id: changed-files-write-output-files-json
+ uses: step-security/changed-files@v45
+ with:
+ json: true
+ write_output_files: true
+
+ - name: Verify the contents of the .github/outputs/added_files.json file
+ run: |
+ cat .github/outputs/added_files.json
+...
+```
+
+
+
+
+Get all changed files using a list of files
+
+```yaml
+...
+ - name: Get changed files
+ id: changed-files
+ uses: step-security/changed-files@v45
+ with:
+ files: |
+ my-file.txt
+ *.sh
+ *.png
+ !*.md
+ test_directory/**
+ **/*.sql
+...
+```
+
+See [inputs](#inputs) for more information.
+
+
+
+
+Get all changed files using a list of files and take action based on the changes
+
+```yaml
+...
+ - name: Get changed files
+ id: changed-files-specific
+ uses: step-security/changed-files@v45
+ with:
+ files: |
+ my-file.txt
+ *.sh
+ *.png
+ !*.md
+ test_directory/**
+ **/*.sql
+
+ - name: Run step if any of the listed files above change
+ if: steps.changed-files-specific.outputs.any_changed == 'true'
+ run: |
+ echo "One or more files listed above has changed."
+
+ - name: Run step if only the files listed above change
+ if: steps.changed-files-specific.outputs.only_changed == 'true'
+ run: |
+ echo "Only files listed above have changed."
+
+ - name: Run step if any of the listed files above is deleted
+ if: steps.changed-files-specific.outputs.any_deleted == 'true'
+ env:
+ DELETED_FILES: ${{ steps.changed-files-specific.outputs.deleted_files }}
+ run: |
+ for file in ${DELETED_FILES}; do
+ echo "$file was deleted"
+ done
+
+ - name: Run step if all listed files above have been deleted
+ if: steps.changed-files-specific.outputs.only_deleted == 'true'
+ env:
+ DELETED_FILES: ${{ steps.changed-files-specific.outputs.deleted_files }}
+ run: |
+ for file in ${DELETED_FILES}; do
+ echo "$file was deleted"
+ done
+...
+```
+
+See [outputs](#outputs) for a list of all available outputs.
+
+
+
+
+Get all changed files using a source file or list of file(s) to populate to files input
+
+```yaml
+...
+ - name: Get changed files using a source file or list of file(s) to populate to files input.
+ id: changed-files-specific-source-file
+ uses: step-security/changed-files@v45
+ with:
+ files_from_source_file: test/changed-files-list.txt
+...
+```
+
+See [inputs](#inputs) for more information.
+
+
+
+
+Get changed files using a source file or list of file(s) to populate to files input and optionally specify more files
+
+```yaml
+...
+ - name: Get changed files using a source file or list of file(s) to populate to files input and optionally specify more files.
+ id: changed-files-specific-source-file-and-specify-files
+ uses: step-security/changed-files@v45
+ with:
+ files_from_source_file: |
+ test/changed-files-list.txt
+ files: |
+ test.txt
+...
+```
+
+See [inputs](#inputs) for more information.
+
+
+
+
+
+Get all changed files using a different SHA
+
+```yaml
+...
+ - name: Get changed files using a different SHA
+ id: changed-files
+ uses: step-security/changed-files@v45
+ with:
+ sha: ${{ github.event.pull_request.head.sha }}
+...
+```
+
+See [inputs](#inputs) for more information.
+
+
+
+
+Get all changed files using a different base SHA
+
+```yaml
+...
+ - name: Get changed files using a different base SHA
+ id: changed-files
+ uses: step-security/changed-files@v45
+ with:
+ base_sha: ${{ github.event.pull_request.base.sha }}
+...
+```
+
+See [inputs](#inputs) for more information.
+
+
+
+
+Get all changed files between the previous tag and the current tag
+
+```yaml
+...
+on:
+ push:
+ tags:
+ - 'v*'
+
+jobs:
+ release:
+ name: Release
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: Get changed files
+ id: changed-files
+ uses: step-security/changed-files@v45
+
+ - name: List changed files
+ env:
+ ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}
+ run: |
+ echo "List all the files that have changed: $ALL_CHANGED_FILES"
+
+ - name: Get changed files in the .github folder
+ id: changed-files-specific
+ uses: step-security/changed-files@v45
+ with:
+ files: .github/**
+
+ - name: Run step if any file(s) in the .github folder change
+ if: steps.changed-files-specific.outputs.any_changed == 'true'
+ env:
+ ALL_CHANGED_FILES: ${{ steps.changed-files-specific.outputs.all_changed_files }}
+ run: |
+ echo "One or more files in the .github folder has changed."
+ echo "List all the files that have changed: $ALL_CHANGED_FILES"
+...
+```
+
+See [inputs](#inputs) for more information.
+
+
+
+
+Get all changed files for a repository located in a different path
+
+```yaml
+...
+ - name: Checkout into dir1
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ path: dir1
+
+ - name: Run changed-files with defaults in dir1
+ id: changed-files-for-dir1
+ uses: step-security/changed-files@v45
+ with:
+ path: dir1
+
+ - name: List all added files in dir1
+ env:
+ ADDED_FILES: ${{ steps.changed-files-for-dir1.outputs.added_files }}
+ run: |
+ for file in ${ADDED_FILES}; do
+ echo "$file was added"
+ done
+...
+```
+
+See [inputs](#inputs) for more information.
+
+
+
+
+Get all changed files with non-äšćįí characters i.e (Filename in other languages)
+
+```yaml
+...
+ - name: Run changed-files with quotepath disabled
+ id: changed-files-quotepath
+ uses: step-security/changed-files@v45
+ with:
+ quotepath: "false"
+
+ - name: Run changed-files with quotepath disabled for a specified list of file(s)
+ id: changed-files-quotepath-specific
+ uses: step-security/changed-files@v45
+ with:
+ files: test/test-è.txt
+ quotepath: "false"
+...
+```
+
+See [inputs](#inputs) for more information.
+
+
+
+
+Get all changed files using the last successful commit of the base branch
+
+
+ -
+
+ Push event
+
+```yaml
+...
+ - name: Get branch name
+ id: branch-name
+ uses: tj-actions/branch-names@v6
+
+ - uses: nrwl/nx-set-shas@v3
+ id: last_successful_commit_push
+ with:
+ main-branch-name: ${{ steps.branch-name.outputs.current_branch }} # Get the last successful commit for the current branch.
+ workflow-id: 'test.yml'
+
+ - name: Run changed-files with the commit of the last successful test workflow run
+ id: changed-files-base-sha-push
+ uses: step-security/changed-files@v45
+ with:
+ base_sha: ${{ steps.last_successful_commit_push.outputs.base }}
+...
+```
+
+
+
+
+-
+
+Pull request events
+
+```yaml
+...
+ - name: Get branch name
+ id: branch-name
+ uses: tj-actions/branch-names@v5
+
+ - uses: nrwl/nx-set-shas@v3
+ id: last_successful_commit_pull_request
+ with:
+ main-branch-name: ${{ steps.branch-name.outputs.base_ref_branch }} # Get the last successful commit on the master or main branch
+ workflow_id: 'test.yml'
+
+ - name: Run changed-files with the commit of the last successful test workflow run on the main branch
+ id: changed-files-base-sha-pull-request
+ uses: step-security/changed-files@v45
+ with:
+ base_sha: ${{ steps.last_successful_commit_pull_request.outputs.base }}
+...
+```
+
+
+
+
+
+> **Warning**
+>
+> This setting overrides the commit sha used by setting `since_last_remote_commit` to true.
+> It is recommended to use either solution that works for your use case.
+
+See [inputs](#inputs) for more information.
+
+
+
+
+Get all changed files but only return the directory names
+
+```yaml
+...
+ - name: Run changed-files with dir_names
+ id: changed-files-dir-names
+ uses: step-security/changed-files@v45
+ with:
+ dir_names: "true"
+...
+```
+
+See [inputs](#inputs) for more information.
+
+
+
+
+Get all changed files and return JSON formatted outputs
+
+```yaml
+...
+ - name: Run changed-files with JSON output
+ id: changed-files-json
+ uses: step-security/changed-files@v45
+ with:
+ json: "true"
+...
+```
+
+See [inputs](#inputs) for more information.
+
+
+
+
+Get all changed files by commits pushed in the past
+
+```yaml
+...
+ - name: Get changed-files since 2022-08-19
+ id: changed-files-since
+ uses: step-security/changed-files@v45
+ with:
+ since: "2022-08-19"
+
+ - name: Get changed-files until 2022-08-20
+ id: changed-files-until
+ uses: step-security/changed-files@v45
+ with:
+ until: "2022-08-20"
+...
+```
+
+See [inputs](#inputs) for more information.
+
+
+
+* Free software: [MIT license](LICENSE)
+
+## Credits 👏
+
+This package was created with [cookiecutter-action](https://github.com/tj-actions/cookiecutter-action).
+
+* [tj-actions/auto-doc](https://github.com/tj-actions//auto-doc)
+* [tj-actions/verify-changed-files](https://github.com/tj-actions/verify-changed-files)
+* [tj-actions/demo](https://github.com/tj-actions/demo)
+* [tj-actions/demo2](https://github.com/tj-actions/demo2)
+* [tj-actions/demo3](https://github.com/tj-actions/demo3)
+* [tj-actions/release-tagger](https://github.com/step-security/release-tagger)
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 0000000..77568b2
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,5 @@
+# Security Policy
+
+## Reporting a Vulnerability
+
+Please report security vulnerabilities to security@stepsecurity.io
diff --git a/action.yml b/action.yml
new file mode 100644
index 0000000..d4ac26c
--- /dev/null
+++ b/action.yml
@@ -0,0 +1,332 @@
+name: Changed Files
+description: Get all Added, Copied, Modified, Deleted, Renamed, Type changed, Unmerged, and Unknown files.
+author: step-security
+
+inputs:
+ separator:
+ description: "Split character for output strings."
+ required: false
+ default: " "
+ include_all_old_new_renamed_files:
+ description: "Include `all_old_new_renamed_files` output. Note this can generate a large output See: #501."
+ required: false
+ default: "false"
+ old_new_separator:
+ description: "Split character for old and new filename pairs."
+ required: false
+ default: ","
+ old_new_files_separator:
+ description: "Split character for old and new renamed filename pairs."
+ required: false
+ default: " "
+ files_from_source_file:
+ description: "Source file(s) used to populate the `files` input."
+ required: false
+ default: ""
+ files_from_source_file_separator:
+ description: "Separator used to split the `files_from_source_file` input."
+ default: "\n"
+ required: false
+ files:
+ description: |
+ File and directory patterns used to detect changes (Defaults to the entire repo if unset).
+ NOTE: Multiline file/directory patterns should not include quotes.
+ required: false
+ default: ""
+ files_separator:
+ description: "Separator used to split the `files` input"
+ default: "\n"
+ required: false
+ files_yaml:
+ description: "YAML used to define a set of file patterns to detect changes"
+ required: false
+ default: ""
+ files_yaml_from_source_file:
+ description: "Source file(s) used to populate the `files_yaml` input. Example: https://github.com/step-security/changed-files/blob/main/test/changed-files.yml"
+ required: false
+ default: ""
+ files_yaml_from_source_file_separator:
+ description: 'Separator used to split the `files_yaml_from_source_file` input'
+ default: "\n"
+ required: false
+ files_ignore_yaml:
+ description: "YAML used to define a set of file patterns to ignore changes"
+ required: false
+ default: ""
+ files_ignore_yaml_from_source_file:
+ description: "Source file(s) used to populate the `files_ignore_yaml` input. Example: https://github.com/step-security/changed-files/blob/main/test/changed-files.yml"
+ required: false
+ default: ""
+ files_ignore_yaml_from_source_file_separator:
+ description: 'Separator used to split the `files_ignore_yaml_from_source_file` input'
+ default: "\n"
+ required: false
+ files_ignore:
+ description: "Ignore changes to these file(s). NOTE: Multiline file/directory patterns should not include quotes."
+ required: false
+ default: ""
+ files_ignore_separator:
+ description: "Separator used to split the `files_ignore` input"
+ default: "\n"
+ required: false
+ files_ignore_from_source_file:
+ description: "Source file(s) used to populate the `files_ignore` input"
+ required: false
+ default: ""
+ files_ignore_from_source_file_separator:
+ description: 'Separator used to split the `files_ignore_from_source_file` input'
+ default: "\n"
+ required: false
+ sha:
+ description: "Specify a different commit SHA or branch used for comparing changes"
+ required: false
+ base_sha:
+ description: "Specify a different base commit SHA or branch used for comparing changes"
+ required: false
+ since:
+ description: "Get changed files for commits whose timestamp is older than the given time."
+ required: false
+ default: ""
+ until:
+ description: "Get changed files for commits whose timestamp is earlier than the given time."
+ required: false
+ default: ""
+ path:
+ description: "Specify a relative path under `$GITHUB_WORKSPACE` to locate the repository."
+ required: false
+ default: "."
+ quotepath:
+ description: "Use non-ASCII characters to match files and output the filenames completely verbatim by setting this to `false`"
+ default: "true"
+ required: false
+ diff_relative:
+ description: "Exclude changes outside the current directory and show path names relative to it. NOTE: This requires you to specify the top-level directory via the `path` input."
+ required: false
+ default: "true"
+ dir_names:
+ default: "false"
+ description: "Output unique changed directories instead of filenames. NOTE: This returns `.` for changed files located in the current working directory which defaults to `$GITHUB_WORKSPACE`."
+ required: false
+ dir_names_max_depth:
+ description: "Limit the directory output to a maximum depth e.g `test/test1/test2` with max depth of `2` returns `test/test1`."
+ required: false
+ dir_names_exclude_current_dir:
+ description: "Exclude the current directory represented by `.` from the output when `dir_names` is set to `true`."
+ required: false
+ default: "false"
+ dir_names_include_files:
+ description: "File and directory patterns to include in the output when `dir_names` is set to `true`. NOTE: This returns only the matching files and also the directory names."
+ required: false
+ default: ""
+ dir_names_include_files_separator:
+ description: "Separator used to split the `dir_names_include_files` input"
+ default: "\n"
+ required: false
+ dir_names_deleted_files_include_only_deleted_dirs:
+ description: "Include only directories that have been deleted as opposed to directory names of files that have been deleted in the `deleted_files` output when `dir_names` is set to `true`."
+ required: false
+ default: "false"
+ json:
+ description: "Output list of changed files in a JSON formatted string which can be used for matrix jobs. Example: https://github.com/step-security/changed-files/blob/main/.github/workflows/matrix-example.yml"
+ required: false
+ default: "false"
+ escape_json:
+ description: "Escape JSON output."
+ required: false
+ default: "true"
+ safe_output:
+ description: "Apply sanitization to output filenames before being set as output."
+ required: false
+ default: "true"
+ fetch_depth:
+ description: "Depth of additional branch history fetched. NOTE: This can be adjusted to resolve errors with insufficient history."
+ required: false
+ default: "25"
+ skip_initial_fetch:
+ description: |
+ Skip initially fetching additional history to improve performance for shallow repositories.
+ NOTE: This could lead to errors with missing history. It's intended to be used when you've fetched all necessary history to perform the diff.
+ required: false
+ default: "false"
+ fetch_additional_submodule_history:
+ description: "Fetch additional history for submodules."
+ required: false
+ default: "false"
+ since_last_remote_commit:
+ description: "Use the last commit on the remote branch as the `base_sha`. Defaults to the last non-merge commit on the target branch for pull request events and the previous remote commit of the current branch for push events."
+ required: false
+ default: "false"
+ write_output_files:
+ description: "Write outputs to the `output_dir` defaults to `.github/outputs` folder. NOTE: This creates a `.txt` file by default and a `.json` file if `json` is set to `true`."
+ required: false
+ default: "false"
+ output_dir:
+ description: "Directory to store output files."
+ required: false
+ default: ".github/outputs"
+ output_renamed_files_as_deleted_and_added:
+ description: "Output renamed files as deleted and added files."
+ required: false
+ default: "false"
+ recover_deleted_files:
+ description: "Recover deleted files."
+ required: false
+ default: "false"
+ recover_deleted_files_to_destination:
+ description: "Recover deleted files to a new destination directory, defaults to the original location."
+ required: false
+ default: ""
+ recover_files:
+ description: |
+ File and directory patterns used to recover deleted files,
+ defaults to the patterns provided via the `files`, `files_from_source_file`, `files_ignore` and `files_ignore_from_source_file` inputs
+ or all deleted files if no patterns are provided.
+ required: false
+ default: ""
+ recover_files_separator:
+ description: "Separator used to split the `recover_files` input"
+ default: "\n"
+ required: false
+ recover_files_ignore:
+ description: "File and directory patterns to ignore when recovering deleted files."
+ required: false
+ default: ""
+ recover_files_ignore_separator:
+ description: "Separator used to split the `recover_files_ignore` input"
+ default: "\n"
+ required: false
+ token:
+ description: "GitHub token used to fetch changed files from Github's API."
+ required: false
+ default: ${{ github.token }}
+ api_url:
+ description: "Github API URL."
+ required: false
+ default: ${{ github.api_url }}
+ use_rest_api:
+ description: "Force the use of Github's REST API even when a local copy of the repository exists"
+ required: false
+ default: "false"
+ fail_on_initial_diff_error:
+ description: "Fail when the initial diff fails."
+ required: false
+ default: "false"
+ fail_on_submodule_diff_error:
+ description: "Fail when the submodule diff fails."
+ required: false
+ default: "false"
+ negation_patterns_first:
+ description: "Apply the negation patterns first. NOTE: This affects how changed files are matched."
+ required: false
+ default: "false"
+ matrix:
+ description: "Output changed files in a format that can be used for matrix jobs. Alias for setting inputs `json` to `true` and `escape_json` to `false`."
+ required: false
+ default: "false"
+ exclude_submodules:
+ description: "Exclude changes to submodules."
+ required: false
+ default: "false"
+ fetch_missing_history_max_retries:
+ description: "Maximum number of retries to fetch missing history."
+ required: false
+ default: "20"
+ use_posix_path_separator:
+ description: "Use POSIX path separator `/` for output file paths on Windows."
+ required: false
+ default: "false"
+ tags_pattern:
+ description: "Tags pattern to include."
+ required: false
+ default: "*"
+ tags_ignore_pattern:
+ description: "Tags pattern to ignore."
+ required: false
+ default: ""
+
+
+outputs:
+ added_files:
+ description: "Returns only files that are Added (A)."
+ added_files_count:
+ description: "Returns the number of `added_files`"
+ copied_files:
+ description: "Returns only files that are Copied (C)."
+ copied_files_count:
+ description: "Returns the number of `copied_files`"
+ deleted_files:
+ description: "Returns only files that are Deleted (D)."
+ deleted_files_count:
+ description: "Returns the number of `deleted_files`"
+ modified_files:
+ description: "Returns only files that are Modified (M)."
+ modified_files_count:
+ description: "Returns the number of `modified_files`"
+ renamed_files:
+ description: "Returns only files that are Renamed (R)."
+ renamed_files_count:
+ description: "Returns the number of `renamed_files`"
+ all_old_new_renamed_files:
+ description: "Returns only files that are Renamed and lists their old and new names. **NOTE:** This requires setting `include_all_old_new_renamed_files` to `true`. Also, keep in mind that this output is global and wouldn't be nested in outputs generated when the `*_yaml_*` input is used. (R)"
+ all_old_new_renamed_files_count:
+ description: "Returns the number of `all_old_new_renamed_files`"
+ type_changed_files:
+ description: "Returns only files that have their file type changed (T)."
+ type_changed_files_count:
+ description: "Returns the number of `type_changed_files`"
+ unmerged_files:
+ description: "Returns only files that are Unmerged (U)."
+ unmerged_files_count:
+ description: "Returns the number of `unmerged_files`"
+ unknown_files:
+ description: "Returns only files that are Unknown (X)."
+ unknown_files_count:
+ description: "Returns the number of `unknown_files`"
+ all_changed_and_modified_files:
+ description: "Returns all changed and modified files i.e. a combination of (ACMRDTUX)"
+ all_changed_and_modified_files_count:
+ description: "Returns the number of `all_changed_and_modified_files`"
+ all_changed_files:
+ description: "Returns all changed files i.e. a combination of all added, copied, modified and renamed files (ACMR)"
+ all_changed_files_count:
+ description: "Returns the number of `all_changed_files`"
+ any_changed:
+ description: "Returns `true` when any of the filenames provided using the `files*` or `files_ignore*` inputs have changed. This defaults to `true` when no patterns are specified. i.e. *includes a combination of all added, copied, modified and renamed files (ACMR)*."
+ only_changed:
+ description: "Returns `true` when only files provided using the `files*` or `files_ignore*` inputs have changed. i.e. *includes a combination of all added, copied, modified and renamed files (ACMR)*."
+ other_changed_files:
+ description: "Returns all other changed files not listed in the files input i.e. includes a combination of all added, copied, modified and renamed files (ACMR)."
+ other_changed_files_count:
+ description: "Returns the number of `other_changed_files`"
+ all_modified_files:
+ description: "Returns all changed files i.e. a combination of all added, copied, modified, renamed and deleted files (ACMRD)."
+ all_modified_files_count:
+ description: "Returns the number of `all_modified_files`"
+ any_modified:
+ description: "Returns `true` when any of the filenames provided using the `files*` or `files_ignore*` inputs have been modified. This defaults to `true` when no patterns are specified. i.e. *includes a combination of all added, copied, modified, renamed, and deleted files (ACMRD)*."
+ only_modified:
+ description: "Returns `true` when only files provided using the `files*` or `files_ignore*` inputs have been modified. (ACMRD)."
+ other_modified_files:
+ description: "Returns all other modified files not listed in the files input i.e. a combination of all added, copied, modified, and deleted files (ACMRD)"
+ other_modified_files_count:
+ description: "Returns the number of `other_modified_files`"
+ any_deleted:
+ description: "Returns `true` when any of the filenames provided using the `files*` or `files_ignore*` inputs have been deleted. This defaults to `true` when no patterns are specified. (D)"
+ only_deleted:
+ description: "Returns `true` when only files provided using the `files*` or `files_ignore*` inputs have been deleted. (D)"
+ other_deleted_files:
+ description: "Returns all other deleted files not listed in the files input i.e. a combination of all deleted files (D)"
+ other_deleted_files_count:
+ description: "Returns the number of `other_deleted_files`"
+ modified_keys:
+ description: "Returns all modified YAML keys when the `files_yaml` input is used. i.e. key that contains any path that has either been added, copied, modified, and deleted (ACMRD)"
+ changed_keys:
+ description: "Returns all changed YAML keys when the `files_yaml` input is used. i.e. key that contains any path that has either been added, copied, modified, and renamed (ACMR)"
+
+runs:
+ using: 'node20'
+ main: 'dist/main.js'
+
+branding:
+ icon: file-text
+ color: white
diff --git a/dist/main.js b/dist/main.js
new file mode 100644
index 0000000..def9023
--- /dev/null
+++ b/dist/main.js
@@ -0,0 +1,45957 @@
+"use strict";
+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 __commonJS = (cb, mod) => function __require() {
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+};
+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(
+ // If the importer is in node compatibility mode or this is not an ESM
+ // file that has been converted to a CommonJS file using a Babel-
+ // compatible transform (i.e. "__esModule" has not been set), then set
+ // "default" to the CommonJS "module.exports" for node compatibility.
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+ mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// node_modules/@actions/core/lib/utils.js
+var require_utils = __commonJS({
+ "node_modules/@actions/core/lib/utils.js"(exports2) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ exports2.toCommandProperties = exports2.toCommandValue = void 0;
+ function toCommandValue(input) {
+ if (input === null || input === void 0) {
+ return "";
+ } else if (typeof input === "string" || input instanceof String) {
+ return input;
+ }
+ return JSON.stringify(input);
+ }
+ exports2.toCommandValue = toCommandValue;
+ 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
+ };
+ }
+ exports2.toCommandProperties = toCommandProperties;
+ }
+});
+
+// node_modules/@actions/core/lib/command.js
+var require_command = __commonJS({
+ "node_modules/@actions/core/lib/command.js"(exports2) {
+ "use strict";
+ var __createBinding = exports2 && exports2.__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 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+ } : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar = exports2 && exports2.__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(exports2, "__esModule", { value: true });
+ exports2.issue = exports2.issueCommand = void 0;
+ var os = __importStar(require("os"));
+ var utils_1 = require_utils();
+ function issueCommand(command, properties, message) {
+ const cmd = new Command(command, properties, message);
+ process.stdout.write(cmd.toString() + os.EOL);
+ }
+ exports2.issueCommand = issueCommand;
+ function issue(name, message = "") {
+ issueCommand(name, {}, message);
+ }
+ exports2.issue = issue;
+ var CMD_STRING = "::";
+ var Command = class {
+ constructor(command, properties, message) {
+ if (!command) {
+ command = "missing.command";
+ }
+ this.command = command;
+ this.properties = properties;
+ this.message = message;
+ }
+ toString() {
+ let cmdStr = CMD_STRING + this.command;
+ if (this.properties && Object.keys(this.properties).length > 0) {
+ cmdStr += " ";
+ let first = true;
+ for (const key in this.properties) {
+ if (this.properties.hasOwnProperty(key)) {
+ const val = this.properties[key];
+ if (val) {
+ if (first) {
+ first = false;
+ } else {
+ cmdStr += ",";
+ }
+ cmdStr += `${key}=${escapeProperty(val)}`;
+ }
+ }
+ }
+ }
+ cmdStr += `${CMD_STRING}${escapeData(this.message)}`;
+ return cmdStr;
+ }
+ };
+ function escapeData(s) {
+ return (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");
+ }
+ }
+});
+
+// node_modules/@actions/core/lib/file-command.js
+var require_file_command = __commonJS({
+ "node_modules/@actions/core/lib/file-command.js"(exports2) {
+ "use strict";
+ var __createBinding = exports2 && exports2.__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 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+ } : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar = exports2 && exports2.__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(exports2, "__esModule", { value: true });
+ exports2.prepareKeyValueMessage = exports2.issueFileCommand = void 0;
+ var crypto = __importStar(require("crypto"));
+ var fs2 = __importStar(require("fs"));
+ var os = __importStar(require("os"));
+ var utils_1 = require_utils();
+ 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 (!fs2.existsSync(filePath)) {
+ throw new Error(`Missing file at path: ${filePath}`);
+ }
+ fs2.appendFileSync(filePath, `${(0, utils_1.toCommandValue)(message)}${os.EOL}`, {
+ encoding: "utf8"
+ });
+ }
+ exports2.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.EOL}${convertedValue}${os.EOL}${delimiter}`;
+ }
+ exports2.prepareKeyValueMessage = prepareKeyValueMessage;
+ }
+});
+
+// node_modules/@actions/http-client/lib/proxy.js
+var require_proxy = __commonJS({
+ "node_modules/@actions/http-client/lib/proxy.js"(exports2) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ exports2.checkBypass = exports2.getProxyUrl = void 0;
+ function getProxyUrl(reqUrl) {
+ const usingSsl = reqUrl.protocol === "https:";
+ if (checkBypass(reqUrl)) {
+ return void 0;
+ }
+ 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 void 0;
+ }
+ }
+ exports2.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;
+ }
+ exports2.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;
+ }
+ };
+ }
+});
+
+// node_modules/tunnel/lib/tunnel.js
+var require_tunnel = __commonJS({
+ "node_modules/tunnel/lib/tunnel.js"(exports2) {
+ "use strict";
+ var net = require("net");
+ var tls = require("tls");
+ var http = require("http");
+ var https = require("https");
+ var events = require("events");
+ var assert = require("assert");
+ var util = require("util");
+ exports2.httpOverHttp = httpOverHttp;
+ exports2.httpsOverHttp = httpsOverHttp;
+ exports2.httpOverHttps = httpOverHttps;
+ exports2.httpsOverHttps = httpsOverHttps;
+ function httpOverHttp(options) {
+ var agent = new TunnelingAgent(options);
+ agent.request = http.request;
+ return agent;
+ }
+ function httpsOverHttp(options) {
+ var agent = new TunnelingAgent(options);
+ agent.request = http.request;
+ agent.createSocket = createSecureSocket;
+ agent.defaultPort = 443;
+ return agent;
+ }
+ function httpOverHttps(options) {
+ var agent = new TunnelingAgent(options);
+ agent.request = https.request;
+ return agent;
+ }
+ function httpsOverHttps(options) {
+ var agent = new TunnelingAgent(options);
+ agent.request = https.request;
+ agent.createSocket = createSecureSocket;
+ agent.defaultPort = 443;
+ return agent;
+ }
+ function TunnelingAgent(options) {
+ var self2 = this;
+ self2.options = options || {};
+ self2.proxyOptions = self2.options.proxy || {};
+ self2.maxSockets = self2.options.maxSockets || http.Agent.defaultMaxSockets;
+ self2.requests = [];
+ self2.sockets = [];
+ self2.on("free", function onFree(socket, host, port, localAddress) {
+ var options2 = toOptions(host, port, localAddress);
+ for (var i = 0, len = self2.requests.length; i < len; ++i) {
+ var pending = self2.requests[i];
+ if (pending.host === options2.host && pending.port === options2.port) {
+ self2.requests.splice(i, 1);
+ pending.request.onSocket(socket);
+ return;
+ }
+ }
+ socket.destroy();
+ self2.removeSocket(socket);
+ });
+ }
+ util.inherits(TunnelingAgent, events.EventEmitter);
+ TunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) {
+ var self2 = this;
+ var options = mergeOptions({ request: req }, self2.options, toOptions(host, port, localAddress));
+ if (self2.sockets.length >= this.maxSockets) {
+ self2.requests.push(options);
+ return;
+ }
+ self2.createSocket(options, function(socket) {
+ socket.on("free", onFree);
+ socket.on("close", onCloseOrRemove);
+ socket.on("agentRemove", onCloseOrRemove);
+ req.onSocket(socket);
+ function onFree() {
+ self2.emit("free", socket, options);
+ }
+ function onCloseOrRemove(err) {
+ self2.removeSocket(socket);
+ socket.removeListener("free", onFree);
+ socket.removeListener("close", onCloseOrRemove);
+ socket.removeListener("agentRemove", onCloseOrRemove);
+ }
+ });
+ };
+ TunnelingAgent.prototype.createSocket = function createSocket(options, cb) {
+ var self2 = this;
+ var placeholder = {};
+ self2.sockets.push(placeholder);
+ var connectOptions = mergeOptions({}, self2.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");
+ }
+ debug6("making CONNECT request");
+ var connectReq = self2.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) {
+ debug6(
+ "tunneling socket could not be established, statusCode=%d",
+ res.statusCode
+ );
+ socket.destroy();
+ var error3 = new Error("tunneling socket could not be established, statusCode=" + res.statusCode);
+ error3.code = "ECONNRESET";
+ options.request.emit("error", error3);
+ self2.removeSocket(placeholder);
+ return;
+ }
+ if (head.length > 0) {
+ debug6("got illegal response body from proxy");
+ socket.destroy();
+ var error3 = new Error("got illegal response body from proxy");
+ error3.code = "ECONNRESET";
+ options.request.emit("error", error3);
+ self2.removeSocket(placeholder);
+ return;
+ }
+ debug6("tunneling connection has established");
+ self2.sockets[self2.sockets.indexOf(placeholder)] = socket;
+ return cb(socket);
+ }
+ function onError(cause) {
+ connectReq.removeAllListeners();
+ debug6(
+ "tunneling socket could not be established, cause=%s\n",
+ cause.message,
+ cause.stack
+ );
+ var error3 = new Error("tunneling socket could not be established, cause=" + cause.message);
+ error3.code = "ECONNRESET";
+ options.request.emit("error", error3);
+ self2.removeSocket(placeholder);
+ }
+ };
+ TunnelingAgent.prototype.removeSocket = function removeSocket(socket) {
+ var pos = this.sockets.indexOf(socket);
+ if (pos === -1) {
+ return;
+ }
+ this.sockets.splice(pos, 1);
+ var pending = this.requests.shift();
+ if (pending) {
+ this.createSocket(pending, function(socket2) {
+ pending.request.onSocket(socket2);
+ });
+ }
+ };
+ function createSecureSocket(options, cb) {
+ var self2 = this;
+ TunnelingAgent.prototype.createSocket.call(self2, options, function(socket) {
+ var hostHeader = options.request.getHeader("host");
+ var tlsOptions = mergeOptions({}, self2.options, {
+ socket,
+ servername: hostHeader ? hostHeader.replace(/:.*$/, "") : options.host
+ });
+ var secureSocket = tls.connect(0, tlsOptions);
+ self2.sockets[self2.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 debug6;
+ if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) {
+ debug6 = 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 {
+ debug6 = function() {
+ };
+ }
+ exports2.debug = debug6;
+ }
+});
+
+// node_modules/tunnel/index.js
+var require_tunnel2 = __commonJS({
+ "node_modules/tunnel/index.js"(exports2, module2) {
+ module2.exports = require_tunnel();
+ }
+});
+
+// node_modules/undici/lib/core/symbols.js
+var require_symbols = __commonJS({
+ "node_modules/undici/lib/core/symbols.js"(exports2, module2) {
+ module2.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")
+ };
+ }
+});
+
+// node_modules/undici/lib/core/errors.js
+var require_errors = __commonJS({
+ "node_modules/undici/lib/core/errors.js"(exports2, module2) {
+ "use strict";
+ 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";
+ }
+ };
+ var 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;
+ }
+ };
+ var 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";
+ }
+ };
+ var 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;
+ }
+ };
+ module2.exports = {
+ HTTPParserError,
+ UndiciError,
+ HeadersTimeoutError,
+ HeadersOverflowError,
+ BodyTimeoutError,
+ RequestContentLengthMismatchError,
+ ConnectTimeoutError,
+ ResponseStatusCodeError,
+ InvalidArgumentError,
+ InvalidReturnValueError,
+ RequestAbortedError,
+ ClientDestroyedError,
+ ClientClosedError,
+ InformationalError,
+ SocketError,
+ NotSupportedError,
+ ResponseContentLengthMismatchError,
+ BalancedPoolMissingUpstreamError,
+ ResponseExceededMaxSizeError,
+ RequestRetryError
+ };
+ }
+});
+
+// node_modules/undici/lib/core/constants.js
+var require_constants = __commonJS({
+ "node_modules/undici/lib/core/constants.js"(exports2, module2) {
+ "use strict";
+ var headerNameLowerCasedRecord = {};
+ var wellknownHeaderNames = [
+ "Accept",
+ "Accept-Encoding",
+ "Accept-Language",
+ "Accept-Ranges",
+ "Access-Control-Allow-Credentials",
+ "Access-Control-Allow-Headers",
+ "Access-Control-Allow-Methods",
+ "Access-Control-Allow-Origin",
+ "Access-Control-Expose-Headers",
+ "Access-Control-Max-Age",
+ "Access-Control-Request-Headers",
+ "Access-Control-Request-Method",
+ "Age",
+ "Allow",
+ "Alt-Svc",
+ "Alt-Used",
+ "Authorization",
+ "Cache-Control",
+ "Clear-Site-Data",
+ "Connection",
+ "Content-Disposition",
+ "Content-Encoding",
+ "Content-Language",
+ "Content-Length",
+ "Content-Location",
+ "Content-Range",
+ "Content-Security-Policy",
+ "Content-Security-Policy-Report-Only",
+ "Content-Type",
+ "Cookie",
+ "Cross-Origin-Embedder-Policy",
+ "Cross-Origin-Opener-Policy",
+ "Cross-Origin-Resource-Policy",
+ "Date",
+ "Device-Memory",
+ "Downlink",
+ "ECT",
+ "ETag",
+ "Expect",
+ "Expect-CT",
+ "Expires",
+ "Forwarded",
+ "From",
+ "Host",
+ "If-Match",
+ "If-Modified-Since",
+ "If-None-Match",
+ "If-Range",
+ "If-Unmodified-Since",
+ "Keep-Alive",
+ "Last-Modified",
+ "Link",
+ "Location",
+ "Max-Forwards",
+ "Origin",
+ "Permissions-Policy",
+ "Pragma",
+ "Proxy-Authenticate",
+ "Proxy-Authorization",
+ "RTT",
+ "Range",
+ "Referer",
+ "Referrer-Policy",
+ "Refresh",
+ "Retry-After",
+ "Sec-WebSocket-Accept",
+ "Sec-WebSocket-Extensions",
+ "Sec-WebSocket-Key",
+ "Sec-WebSocket-Protocol",
+ "Sec-WebSocket-Version",
+ "Server",
+ "Server-Timing",
+ "Service-Worker-Allowed",
+ "Service-Worker-Navigation-Preload",
+ "Set-Cookie",
+ "SourceMap",
+ "Strict-Transport-Security",
+ "Supports-Loading-Mode",
+ "TE",
+ "Timing-Allow-Origin",
+ "Trailer",
+ "Transfer-Encoding",
+ "Upgrade",
+ "Upgrade-Insecure-Requests",
+ "User-Agent",
+ "Vary",
+ "Via",
+ "WWW-Authenticate",
+ "X-Content-Type-Options",
+ "X-DNS-Prefetch-Control",
+ "X-Frame-Options",
+ "X-Permitted-Cross-Domain-Policies",
+ "X-Powered-By",
+ "X-Requested-With",
+ "X-XSS-Protection"
+ ];
+ for (let i = 0; i < wellknownHeaderNames.length; ++i) {
+ const key = wellknownHeaderNames[i];
+ const lowerCasedKey = key.toLowerCase();
+ headerNameLowerCasedRecord[key] = headerNameLowerCasedRecord[lowerCasedKey] = lowerCasedKey;
+ }
+ Object.setPrototypeOf(headerNameLowerCasedRecord, null);
+ module2.exports = {
+ wellknownHeaderNames,
+ headerNameLowerCasedRecord
+ };
+ }
+});
+
+// node_modules/undici/lib/core/util.js
+var require_util = __commonJS({
+ "node_modules/undici/lib/core/util.js"(exports2, module2) {
+ "use strict";
+ var assert = require("assert");
+ var { kDestroyed, kBodyUsed } = require_symbols();
+ var { IncomingMessage } = require("http");
+ var stream = require("stream");
+ var net = require("net");
+ var { InvalidArgumentError } = require_errors();
+ var { Blob: Blob2 } = require("buffer");
+ var nodeUtil = require("util");
+ var { stringify } = require("querystring");
+ var { headerNameLowerCasedRecord } = require_constants();
+ var [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 Blob2 && object instanceof Blob2 || 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 path5 = url.path != null ? url.path : `${url.pathname || ""}${url.search || ""}`;
+ if (origin.endsWith("/")) {
+ origin = origin.substring(0, origin.length - 1);
+ }
+ if (path5 && !path5.startsWith("/")) {
+ path5 = `/${path5}`;
+ }
+ url = new URL(origin + path5);
+ }
+ return url;
+ }
+ function parseOrigin(url) {
+ url = parseURL(url);
+ if (url.pathname !== "/" || url.search || url.hash) {
+ throw new InvalidArgumentError("invalid url");
+ }
+ return url;
+ }
+ function getHostname(host) {
+ if (host[0] === "[") {
+ const idx2 = host.indexOf("]");
+ assert(idx2 !== -1);
+ return host.substring(1, idx2);
+ }
+ const idx = host.indexOf(":");
+ if (idx === -1) return host;
+ return host.substring(0, idx);
+ }
+ function getServerName(host) {
+ if (!host) {
+ return null;
+ }
+ assert.strictEqual(typeof host, "string");
+ const servername = getHostname(host);
+ if (net.isIP(servername)) {
+ return "";
+ }
+ return servername;
+ }
+ function deepClone(obj) {
+ return JSON.parse(JSON.stringify(obj));
+ }
+ function isAsyncIterable(obj) {
+ return !!(obj != null && typeof obj[Symbol.asyncIterator] === "function");
+ }
+ function isIterable(obj) {
+ return !!(obj != null && (typeof obj[Symbol.iterator] === "function" || typeof obj[Symbol.asyncIterator] === "function"));
+ }
+ function bodyLength(body) {
+ if (body == null) {
+ return 0;
+ } else if (isStream(body)) {
+ const state = body._readableState;
+ return state && state.objectMode === false && state.ended === true && Number.isFinite(state.length) ? state.length : null;
+ } else if (isBlobLike(body)) {
+ return body.size != null ? body.size : null;
+ } else if (isBuffer(body)) {
+ return body.byteLength;
+ }
+ return null;
+ }
+ function isDestroyed(stream2) {
+ return !stream2 || !!(stream2.destroyed || stream2[kDestroyed]);
+ }
+ function isReadableAborted(stream2) {
+ const state = stream2 && stream2._readableState;
+ return isDestroyed(stream2) && state && !state.endEmitted;
+ }
+ function destroy(stream2, err) {
+ if (stream2 == null || !isStream(stream2) || isDestroyed(stream2)) {
+ return;
+ }
+ if (typeof stream2.destroy === "function") {
+ if (Object.getPrototypeOf(stream2).constructor === IncomingMessage) {
+ stream2.socket = null;
+ }
+ stream2.destroy(err);
+ } else if (err) {
+ process.nextTick((stream3, err2) => {
+ stream3.emit("error", err2);
+ }, stream2, err);
+ }
+ if (stream2.destroyed !== true) {
+ stream2[kDestroyed] = true;
+ }
+ }
+ var KEEPALIVE_TIMEOUT_EXPR = /timeout=(\d+)/;
+ function parseKeepAliveTimeout(val) {
+ const m = val.toString().match(KEEPALIVE_TIMEOUT_EXPR);
+ return m ? parseInt(m[1], 10) * 1e3 : null;
+ }
+ function headerNameToString(value) {
+ return 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);
+ }
+ }
+ var 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 = 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);
+ }
+ var hasToWellFormed = !!String.prototype.toWellFormed;
+ 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;
+ }
+ var kEnumerableProperty = /* @__PURE__ */ Object.create(null);
+ kEnumerableProperty.enumerable = true;
+ module2.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"]
+ };
+ }
+});
+
+// node_modules/undici/lib/timers.js
+var require_timers = __commonJS({
+ "node_modules/undici/lib/timers.js"(exports2, module2) {
+ "use strict";
+ var fastNow = Date.now();
+ var fastNowTimeout;
+ var 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;
+ }
+ };
+ module2.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);
+ }
+ }
+ };
+ }
+});
+
+// node_modules/@fastify/busboy/deps/streamsearch/sbmh.js
+var require_sbmh = __commonJS({
+ "node_modules/@fastify/busboy/deps/streamsearch/sbmh.js"(exports2, module2) {
+ "use strict";
+ var EventEmitter = require("node:events").EventEmitter;
+ var inherits = 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(SBMH, EventEmitter);
+ 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;
+ };
+ module2.exports = SBMH;
+ }
+});
+
+// node_modules/@fastify/busboy/deps/dicer/lib/PartStream.js
+var require_PartStream = __commonJS({
+ "node_modules/@fastify/busboy/deps/dicer/lib/PartStream.js"(exports2, module2) {
+ "use strict";
+ var inherits = require("node:util").inherits;
+ var ReadableStream = require("node:stream").Readable;
+ function PartStream(opts) {
+ ReadableStream.call(this, opts);
+ }
+ inherits(PartStream, ReadableStream);
+ PartStream.prototype._read = function(n) {
+ };
+ module2.exports = PartStream;
+ }
+});
+
+// node_modules/@fastify/busboy/lib/utils/getLimit.js
+var require_getLimit = __commonJS({
+ "node_modules/@fastify/busboy/lib/utils/getLimit.js"(exports2, module2) {
+ "use strict";
+ module2.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];
+ };
+ }
+});
+
+// node_modules/@fastify/busboy/deps/dicer/lib/HeaderParser.js
+var require_HeaderParser = __commonJS({
+ "node_modules/@fastify/busboy/deps/dicer/lib/HeaderParser.js"(exports2, module2) {
+ "use strict";
+ var EventEmitter = require("node:events").EventEmitter;
+ var inherits = require("node:util").inherits;
+ var getLimit = require_getLimit();
+ var StreamSearch = require_sbmh();
+ var B_DCRLF = Buffer.from("\r\n\r\n");
+ var RE_CRLF = /\r\n/g;
+ var RE_HDR = /^([^:]+):[ \t]?([\x00-\xFF]+)?$/;
+ function HeaderParser(cfg) {
+ EventEmitter.call(this);
+ cfg = cfg || {};
+ const self2 = 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 && !self2.maxed) {
+ if (self2.nread + end - start >= self2.maxHeaderSize) {
+ end = self2.maxHeaderSize - self2.nread + start;
+ self2.nread = self2.maxHeaderSize;
+ self2.maxed = true;
+ } else {
+ self2.nread += end - start;
+ }
+ self2.buffer += data.toString("binary", start, end);
+ }
+ if (isMatch) {
+ self2._finish();
+ }
+ });
+ }
+ inherits(HeaderParser, EventEmitter);
+ 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;
+ }
+ }
+ };
+ module2.exports = HeaderParser;
+ }
+});
+
+// node_modules/@fastify/busboy/deps/dicer/lib/Dicer.js
+var require_Dicer = __commonJS({
+ "node_modules/@fastify/busboy/deps/dicer/lib/Dicer.js"(exports2, module2) {
+ "use strict";
+ var WritableStream = require("node:stream").Writable;
+ var inherits = require("node:util").inherits;
+ var StreamSearch = require_sbmh();
+ var PartStream = require_PartStream();
+ var HeaderParser = require_HeaderParser();
+ var DASH = 45;
+ var B_ONEDASH = Buffer.from("-");
+ var B_CRLF = Buffer.from("\r\n");
+ var EMPTY_FN = function() {
+ };
+ function Dicer(cfg) {
+ if (!(this instanceof Dicer)) {
+ return new Dicer(cfg);
+ }
+ WritableStream.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 self2 = this;
+ this._hparser = new HeaderParser(cfg);
+ this._hparser.on("header", function(header) {
+ self2._inHeader = false;
+ self2._part.emit("header", header);
+ });
+ }
+ inherits(Dicer, WritableStream);
+ Dicer.prototype.emit = function(ev) {
+ if (ev === "finish" && !this._realFinish) {
+ if (!this._finished) {
+ const self2 = this;
+ process.nextTick(function() {
+ self2.emit("error", new Error("Unexpected end of multipart data"));
+ if (self2._part && !self2._ignoreData) {
+ const type = self2._isPreamble ? "Preamble" : "Part";
+ self2._part.emit("error", new Error(type + " terminated early due to unexpected end of multipart data"));
+ self2._part.push(null);
+ process.nextTick(function() {
+ self2._realFinish = true;
+ self2.emit("finish");
+ self2._realFinish = false;
+ });
+ return;
+ }
+ self2._realFinish = true;
+ self2.emit("finish");
+ self2._realFinish = false;
+ });
+ }
+ } else {
+ WritableStream.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 self2 = this;
+ this._bparser = new StreamSearch("\r\n--" + boundary);
+ this._bparser.on("info", function(isMatch, data, start, end) {
+ self2._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 self2 = 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 (self2._parts === 0) {
+ self2._realFinish = true;
+ self2.emit("finish");
+ self2._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) {
+ self2._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 (--self2._parts === 0) {
+ if (self2._finished) {
+ self2._realFinish = true;
+ self2.emit("finish");
+ self2._realFinish = false;
+ } else {
+ self2._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();
+ }
+ };
+ module2.exports = Dicer;
+ }
+});
+
+// node_modules/@fastify/busboy/lib/utils/decodeText.js
+var require_decodeText = __commonJS({
+ "node_modules/@fastify/busboy/lib/utils/decodeText.js"(exports2, module2) {
+ "use strict";
+ var utf8Decoder = new TextDecoder("utf-8");
+ var textDecoders = /* @__PURE__ */ 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":
+ // TODO: Make these a separate, strict decoder?
+ 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);
+ }
+ }
+ }
+ var 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(exports2.toString())) {
+ try {
+ return textDecoders.get(exports2).decode(data);
+ } catch {
+ }
+ }
+ return typeof data === "string" ? data : data.toString();
+ }
+ };
+ function decodeText(text, sourceEncoding, destEncoding) {
+ if (text) {
+ return getDecoder(destEncoding)(text, sourceEncoding);
+ }
+ return text;
+ }
+ module2.exports = decodeText;
+ }
+});
+
+// node_modules/@fastify/busboy/lib/utils/parseParams.js
+var require_parseParams = __commonJS({
+ "node_modules/@fastify/busboy/lib/utils/parseParams.js"(exports2, module2) {
+ "use strict";
+ var decodeText = require_decodeText();
+ var RE_ENCODED = /%[a-fA-F0-9][a-fA-F0-9]/g;
+ var 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": "\x7F",
+ "%7F": "\x7F",
+ "%80": "\x80",
+ "%81": "\x81",
+ "%82": "\x82",
+ "%83": "\x83",
+ "%84": "\x84",
+ "%85": "\x85",
+ "%86": "\x86",
+ "%87": "\x87",
+ "%88": "\x88",
+ "%89": "\x89",
+ "%8a": "\x8A",
+ "%8A": "\x8A",
+ "%8b": "\x8B",
+ "%8B": "\x8B",
+ "%8c": "\x8C",
+ "%8C": "\x8C",
+ "%8d": "\x8D",
+ "%8D": "\x8D",
+ "%8e": "\x8E",
+ "%8E": "\x8E",
+ "%8f": "\x8F",
+ "%8F": "\x8F",
+ "%90": "\x90",
+ "%91": "\x91",
+ "%92": "\x92",
+ "%93": "\x93",
+ "%94": "\x94",
+ "%95": "\x95",
+ "%96": "\x96",
+ "%97": "\x97",
+ "%98": "\x98",
+ "%99": "\x99",
+ "%9a": "\x9A",
+ "%9A": "\x9A",
+ "%9b": "\x9B",
+ "%9B": "\x9B",
+ "%9c": "\x9C",
+ "%9C": "\x9C",
+ "%9d": "\x9D",
+ "%9D": "\x9D",
+ "%9e": "\x9E",
+ "%9E": "\x9E",
+ "%9f": "\x9F",
+ "%9F": "\x9F",
+ "%a0": "\xA0",
+ "%A0": "\xA0",
+ "%a1": "\xA1",
+ "%A1": "\xA1",
+ "%a2": "\xA2",
+ "%A2": "\xA2",
+ "%a3": "\xA3",
+ "%A3": "\xA3",
+ "%a4": "\xA4",
+ "%A4": "\xA4",
+ "%a5": "\xA5",
+ "%A5": "\xA5",
+ "%a6": "\xA6",
+ "%A6": "\xA6",
+ "%a7": "\xA7",
+ "%A7": "\xA7",
+ "%a8": "\xA8",
+ "%A8": "\xA8",
+ "%a9": "\xA9",
+ "%A9": "\xA9",
+ "%aa": "\xAA",
+ "%Aa": "\xAA",
+ "%aA": "\xAA",
+ "%AA": "\xAA",
+ "%ab": "\xAB",
+ "%Ab": "\xAB",
+ "%aB": "\xAB",
+ "%AB": "\xAB",
+ "%ac": "\xAC",
+ "%Ac": "\xAC",
+ "%aC": "\xAC",
+ "%AC": "\xAC",
+ "%ad": "\xAD",
+ "%Ad": "\xAD",
+ "%aD": "\xAD",
+ "%AD": "\xAD",
+ "%ae": "\xAE",
+ "%Ae": "\xAE",
+ "%aE": "\xAE",
+ "%AE": "\xAE",
+ "%af": "\xAF",
+ "%Af": "\xAF",
+ "%aF": "\xAF",
+ "%AF": "\xAF",
+ "%b0": "\xB0",
+ "%B0": "\xB0",
+ "%b1": "\xB1",
+ "%B1": "\xB1",
+ "%b2": "\xB2",
+ "%B2": "\xB2",
+ "%b3": "\xB3",
+ "%B3": "\xB3",
+ "%b4": "\xB4",
+ "%B4": "\xB4",
+ "%b5": "\xB5",
+ "%B5": "\xB5",
+ "%b6": "\xB6",
+ "%B6": "\xB6",
+ "%b7": "\xB7",
+ "%B7": "\xB7",
+ "%b8": "\xB8",
+ "%B8": "\xB8",
+ "%b9": "\xB9",
+ "%B9": "\xB9",
+ "%ba": "\xBA",
+ "%Ba": "\xBA",
+ "%bA": "\xBA",
+ "%BA": "\xBA",
+ "%bb": "\xBB",
+ "%Bb": "\xBB",
+ "%bB": "\xBB",
+ "%BB": "\xBB",
+ "%bc": "\xBC",
+ "%Bc": "\xBC",
+ "%bC": "\xBC",
+ "%BC": "\xBC",
+ "%bd": "\xBD",
+ "%Bd": "\xBD",
+ "%bD": "\xBD",
+ "%BD": "\xBD",
+ "%be": "\xBE",
+ "%Be": "\xBE",
+ "%bE": "\xBE",
+ "%BE": "\xBE",
+ "%bf": "\xBF",
+ "%Bf": "\xBF",
+ "%bF": "\xBF",
+ "%BF": "\xBF",
+ "%c0": "\xC0",
+ "%C0": "\xC0",
+ "%c1": "\xC1",
+ "%C1": "\xC1",
+ "%c2": "\xC2",
+ "%C2": "\xC2",
+ "%c3": "\xC3",
+ "%C3": "\xC3",
+ "%c4": "\xC4",
+ "%C4": "\xC4",
+ "%c5": "\xC5",
+ "%C5": "\xC5",
+ "%c6": "\xC6",
+ "%C6": "\xC6",
+ "%c7": "\xC7",
+ "%C7": "\xC7",
+ "%c8": "\xC8",
+ "%C8": "\xC8",
+ "%c9": "\xC9",
+ "%C9": "\xC9",
+ "%ca": "\xCA",
+ "%Ca": "\xCA",
+ "%cA": "\xCA",
+ "%CA": "\xCA",
+ "%cb": "\xCB",
+ "%Cb": "\xCB",
+ "%cB": "\xCB",
+ "%CB": "\xCB",
+ "%cc": "\xCC",
+ "%Cc": "\xCC",
+ "%cC": "\xCC",
+ "%CC": "\xCC",
+ "%cd": "\xCD",
+ "%Cd": "\xCD",
+ "%cD": "\xCD",
+ "%CD": "\xCD",
+ "%ce": "\xCE",
+ "%Ce": "\xCE",
+ "%cE": "\xCE",
+ "%CE": "\xCE",
+ "%cf": "\xCF",
+ "%Cf": "\xCF",
+ "%cF": "\xCF",
+ "%CF": "\xCF",
+ "%d0": "\xD0",
+ "%D0": "\xD0",
+ "%d1": "\xD1",
+ "%D1": "\xD1",
+ "%d2": "\xD2",
+ "%D2": "\xD2",
+ "%d3": "\xD3",
+ "%D3": "\xD3",
+ "%d4": "\xD4",
+ "%D4": "\xD4",
+ "%d5": "\xD5",
+ "%D5": "\xD5",
+ "%d6": "\xD6",
+ "%D6": "\xD6",
+ "%d7": "\xD7",
+ "%D7": "\xD7",
+ "%d8": "\xD8",
+ "%D8": "\xD8",
+ "%d9": "\xD9",
+ "%D9": "\xD9",
+ "%da": "\xDA",
+ "%Da": "\xDA",
+ "%dA": "\xDA",
+ "%DA": "\xDA",
+ "%db": "\xDB",
+ "%Db": "\xDB",
+ "%dB": "\xDB",
+ "%DB": "\xDB",
+ "%dc": "\xDC",
+ "%Dc": "\xDC",
+ "%dC": "\xDC",
+ "%DC": "\xDC",
+ "%dd": "\xDD",
+ "%Dd": "\xDD",
+ "%dD": "\xDD",
+ "%DD": "\xDD",
+ "%de": "\xDE",
+ "%De": "\xDE",
+ "%dE": "\xDE",
+ "%DE": "\xDE",
+ "%df": "\xDF",
+ "%Df": "\xDF",
+ "%dF": "\xDF",
+ "%DF": "\xDF",
+ "%e0": "\xE0",
+ "%E0": "\xE0",
+ "%e1": "\xE1",
+ "%E1": "\xE1",
+ "%e2": "\xE2",
+ "%E2": "\xE2",
+ "%e3": "\xE3",
+ "%E3": "\xE3",
+ "%e4": "\xE4",
+ "%E4": "\xE4",
+ "%e5": "\xE5",
+ "%E5": "\xE5",
+ "%e6": "\xE6",
+ "%E6": "\xE6",
+ "%e7": "\xE7",
+ "%E7": "\xE7",
+ "%e8": "\xE8",
+ "%E8": "\xE8",
+ "%e9": "\xE9",
+ "%E9": "\xE9",
+ "%ea": "\xEA",
+ "%Ea": "\xEA",
+ "%eA": "\xEA",
+ "%EA": "\xEA",
+ "%eb": "\xEB",
+ "%Eb": "\xEB",
+ "%eB": "\xEB",
+ "%EB": "\xEB",
+ "%ec": "\xEC",
+ "%Ec": "\xEC",
+ "%eC": "\xEC",
+ "%EC": "\xEC",
+ "%ed": "\xED",
+ "%Ed": "\xED",
+ "%eD": "\xED",
+ "%ED": "\xED",
+ "%ee": "\xEE",
+ "%Ee": "\xEE",
+ "%eE": "\xEE",
+ "%EE": "\xEE",
+ "%ef": "\xEF",
+ "%Ef": "\xEF",
+ "%eF": "\xEF",
+ "%EF": "\xEF",
+ "%f0": "\xF0",
+ "%F0": "\xF0",
+ "%f1": "\xF1",
+ "%F1": "\xF1",
+ "%f2": "\xF2",
+ "%F2": "\xF2",
+ "%f3": "\xF3",
+ "%F3": "\xF3",
+ "%f4": "\xF4",
+ "%F4": "\xF4",
+ "%f5": "\xF5",
+ "%F5": "\xF5",
+ "%f6": "\xF6",
+ "%F6": "\xF6",
+ "%f7": "\xF7",
+ "%F7": "\xF7",
+ "%f8": "\xF8",
+ "%F8": "\xF8",
+ "%f9": "\xF9",
+ "%F9": "\xF9",
+ "%fa": "\xFA",
+ "%Fa": "\xFA",
+ "%fA": "\xFA",
+ "%FA": "\xFA",
+ "%fb": "\xFB",
+ "%Fb": "\xFB",
+ "%fB": "\xFB",
+ "%FB": "\xFB",
+ "%fc": "\xFC",
+ "%Fc": "\xFC",
+ "%fC": "\xFC",
+ "%FC": "\xFC",
+ "%fd": "\xFD",
+ "%Fd": "\xFD",
+ "%fD": "\xFD",
+ "%FD": "\xFD",
+ "%fe": "\xFE",
+ "%Fe": "\xFE",
+ "%fE": "\xFE",
+ "%FE": "\xFE",
+ "%ff": "\xFF",
+ "%Ff": "\xFF",
+ "%fF": "\xFF",
+ "%FF": "\xFF"
+ };
+ function encodedReplacer(match) {
+ return EncodedLookup[match];
+ }
+ var STATE_KEY = 0;
+ var STATE_VALUE = 1;
+ var STATE_CHARSET = 2;
+ var 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;
+ }
+ module2.exports = parseParams;
+ }
+});
+
+// node_modules/@fastify/busboy/lib/utils/basename.js
+var require_basename = __commonJS({
+ "node_modules/@fastify/busboy/lib/utils/basename.js"(exports2, module2) {
+ "use strict";
+ module2.exports = function basename(path5) {
+ if (typeof path5 !== "string") {
+ return "";
+ }
+ for (var i = path5.length - 1; i >= 0; --i) {
+ switch (path5.charCodeAt(i)) {
+ case 47:
+ // '/'
+ case 92:
+ path5 = path5.slice(i + 1);
+ return path5 === ".." || path5 === "." ? "" : path5;
+ }
+ }
+ return path5 === ".." || path5 === "." ? "" : path5;
+ };
+ }
+});
+
+// node_modules/@fastify/busboy/lib/types/multipart.js
+var require_multipart = __commonJS({
+ "node_modules/@fastify/busboy/lib/types/multipart.js"(exports2, module2) {
+ "use strict";
+ var { Readable } = require("node:stream");
+ var { inherits } = require("node:util");
+ var Dicer = require_Dicer();
+ var parseParams = require_parseParams();
+ var decodeText = require_decodeText();
+ var basename = require_basename();
+ var getLimit = require_getLimit();
+ var RE_BOUNDARY = /^boundary$/i;
+ var RE_FIELD = /^form-data$/i;
+ var RE_CHARSET = /^charset$/i;
+ var RE_FILENAME = /^filename$/i;
+ var RE_NAME = /^name$/i;
+ Multipart.detect = /^multipart\/form-data/i;
+ function Multipart(boy, cfg) {
+ let i;
+ let len;
+ const self2 = 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;
+ self2.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() {
+ self2._needDrain = false;
+ if (self2._cb && !self2._pause) {
+ const cb = self2._cb;
+ self2._cb = void 0;
+ cb();
+ }
+ }).on("part", function onPart(part) {
+ if (++self2._nparts > partsLimit) {
+ self2.parser.removeListener("part", onPart);
+ self2.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) {
+ self2.parser._ignore();
+ return;
+ }
+ ++nends;
+ const file = new FileStream(fileOpts);
+ curFile = file;
+ file.on("end", function() {
+ --nends;
+ self2._pause = false;
+ checkFinished();
+ if (self2._cb && !self2._needDrain) {
+ const cb = self2._cb;
+ self2._cb = void 0;
+ cb();
+ }
+ });
+ file._read = function(n) {
+ if (!self2._pause) {
+ return;
+ }
+ self2._pause = false;
+ if (self2._cb && !self2._needDrain) {
+ const cb = self2._cb;
+ self2._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)) {
+ self2._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 self2 = this;
+ if (self2.parser.writable) {
+ self2.parser.end();
+ } else if (!self2._boy._done) {
+ process.nextTick(function() {
+ self2._boy._done = true;
+ self2._boy.emit("finish");
+ });
+ }
+ };
+ function skipPart(part) {
+ part.resume();
+ }
+ function FileStream(opts) {
+ Readable.call(this, opts);
+ this.bytesRead = 0;
+ this.truncated = false;
+ }
+ inherits(FileStream, Readable);
+ FileStream.prototype._read = function(n) {
+ };
+ module2.exports = Multipart;
+ }
+});
+
+// node_modules/@fastify/busboy/lib/utils/Decoder.js
+var require_Decoder = __commonJS({
+ "node_modules/@fastify/busboy/lib/utils/Decoder.js"(exports2, module2) {
+ "use strict";
+ var RE_PLUS = /\+/g;
+ var 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;
+ };
+ module2.exports = Decoder;
+ }
+});
+
+// node_modules/@fastify/busboy/lib/types/urlencoded.js
+var require_urlencoded = __commonJS({
+ "node_modules/@fastify/busboy/lib/types/urlencoded.js"(exports2, module2) {
+ "use strict";
+ var Decoder = require_Decoder();
+ var decodeText = require_decodeText();
+ var getLimit = require_getLimit();
+ var 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");
+ };
+ module2.exports = UrlEncoded;
+ }
+});
+
+// node_modules/@fastify/busboy/lib/main.js
+var require_main = __commonJS({
+ "node_modules/@fastify/busboy/lib/main.js"(exports2, module2) {
+ "use strict";
+ var WritableStream = require("node:stream").Writable;
+ var { inherits } = require("node:util");
+ var Dicer = require_Dicer();
+ var MultipartParser = require_multipart();
+ var UrlencodedParser = require_urlencoded();
+ var 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);
+ };
+ module2.exports = Busboy;
+ module2.exports.default = Busboy;
+ module2.exports.Busboy = Busboy;
+ module2.exports.Dicer = Dicer;
+ }
+});
+
+// node_modules/undici/lib/fetch/constants.js
+var require_constants2 = __commonJS({
+ "node_modules/undici/lib/fetch/constants.js"(exports2, module2) {
+ "use strict";
+ var { MessageChannel, receiveMessageOnPort } = require("worker_threads");
+ var corsSafeListedMethods = ["GET", "HEAD", "POST"];
+ var corsSafeListedMethodsSet = new Set(corsSafeListedMethods);
+ var nullBodyStatus = [101, 204, 205, 304];
+ var redirectStatus = [301, 302, 303, 307, 308];
+ var redirectStatusSet = new Set(redirectStatus);
+ var 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"
+ ];
+ var badPortsSet = new Set(badPorts);
+ var referrerPolicy = [
+ "",
+ "no-referrer",
+ "no-referrer-when-downgrade",
+ "same-origin",
+ "origin",
+ "strict-origin",
+ "origin-when-cross-origin",
+ "strict-origin-when-cross-origin",
+ "unsafe-url"
+ ];
+ var referrerPolicySet = new Set(referrerPolicy);
+ var requestRedirect = ["follow", "manual", "error"];
+ var safeMethods = ["GET", "HEAD", "OPTIONS", "TRACE"];
+ var safeMethodsSet = new Set(safeMethods);
+ var requestMode = ["navigate", "same-origin", "no-cors", "cors"];
+ var requestCredentials = ["omit", "same-origin", "include"];
+ var requestCache = [
+ "default",
+ "no-store",
+ "reload",
+ "no-cache",
+ "force-cache",
+ "only-if-cached"
+ ];
+ var requestBodyHeader = [
+ "content-encoding",
+ "content-language",
+ "content-location",
+ "content-type",
+ // See https://github.com/nodejs/undici/issues/2021
+ // 'Content-Length' is a forbidden header name, which is typically
+ // removed in the Headers implementation. However, undici doesn't
+ // filter out headers, so we add it here.
+ "content-length"
+ ];
+ var requestDuplex = [
+ "half"
+ ];
+ var forbiddenMethods = ["CONNECT", "TRACE", "TRACK"];
+ var forbiddenMethodsSet = new Set(forbiddenMethods);
+ var subresource = [
+ "audio",
+ "audioworklet",
+ "font",
+ "image",
+ "manifest",
+ "paintworklet",
+ "script",
+ "style",
+ "track",
+ "video",
+ "xslt",
+ ""
+ ];
+ var subresourceSet = new Set(subresource);
+ var DOMException2 = globalThis.DOMException ?? (() => {
+ try {
+ atob("~");
+ } catch (err) {
+ return Object.getPrototypeOf(err).constructor;
+ }
+ })();
+ var channel;
+ var structuredClone = globalThis.structuredClone ?? // https://github.com/nodejs/node/blob/b27ae24dcc4251bad726d9d84baf678d1f707fed/lib/internal/structured_clone.js
+ // structuredClone was added in v17.0.0, but fetch supports v16.8
+ function structuredClone2(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;
+ };
+ module2.exports = {
+ DOMException: DOMException2,
+ structuredClone,
+ subresource,
+ forbiddenMethods,
+ requestBodyHeader,
+ referrerPolicy,
+ requestRedirect,
+ requestMode,
+ requestCredentials,
+ requestCache,
+ redirectStatus,
+ corsSafeListedMethods,
+ nullBodyStatus,
+ safeMethods,
+ badPorts,
+ requestDuplex,
+ subresourceSet,
+ badPortsSet,
+ redirectStatusSet,
+ corsSafeListedMethodsSet,
+ safeMethodsSet,
+ forbiddenMethodsSet,
+ referrerPolicySet
+ };
+ }
+});
+
+// node_modules/undici/lib/fetch/global.js
+var require_global = __commonJS({
+ "node_modules/undici/lib/fetch/global.js"(exports2, module2) {
+ "use strict";
+ var globalOrigin = Symbol.for("undici.globalOrigin.1");
+ function getGlobalOrigin() {
+ return globalThis[globalOrigin];
+ }
+ function setGlobalOrigin(newOrigin) {
+ if (newOrigin === void 0) {
+ Object.defineProperty(globalThis, globalOrigin, {
+ value: void 0,
+ writable: true,
+ enumerable: false,
+ configurable: false
+ });
+ return;
+ }
+ const parsedURL = new URL(newOrigin);
+ if (parsedURL.protocol !== "http:" && parsedURL.protocol !== "https:") {
+ throw new TypeError(`Only http & https urls are allowed, received ${parsedURL.protocol}`);
+ }
+ Object.defineProperty(globalThis, globalOrigin, {
+ value: parsedURL,
+ writable: true,
+ enumerable: false,
+ configurable: false
+ });
+ }
+ module2.exports = {
+ getGlobalOrigin,
+ setGlobalOrigin
+ };
+ }
+});
+
+// node_modules/undici/lib/fetch/util.js
+var require_util2 = __commonJS({
+ "node_modules/undici/lib/fetch/util.js"(exports2, module2) {
+ "use strict";
+ var { redirectStatusSet, referrerPolicySet: referrerPolicyTokens, badPortsSet } = require_constants2();
+ var { getGlobalOrigin } = require_global();
+ var { performance: performance2 } = require("perf_hooks");
+ var { isBlobLike, toUSVString, ReadableStreamFrom } = require_util();
+ var assert = require("assert");
+ var { isUint8Array } = require("util/types");
+ var supportedHashes = [];
+ var 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;
+ }
+ function requestCurrentURL(request) {
+ return request.urlList[request.urlList.length - 1];
+ }
+ function requestBadPort(request) {
+ const url = requestCurrentURL(request);
+ if (urlIsHttpHttpsScheme(url) && badPortsSet.has(url.port)) {
+ return "blocked";
+ }
+ return "allowed";
+ }
+ function isErrorLike(object) {
+ return object instanceof Error || (object?.constructor?.name === "Error" || object?.constructor?.name === "DOMException");
+ }
+ function isValidReasonPhrase(statusText) {
+ for (let i = 0; i < statusText.length; ++i) {
+ const c = statusText.charCodeAt(i);
+ if (!(c === 9 || // HTAB
+ c >= 32 && c <= 126 || // SP / VCHAR
+ c >= 128 && c <= 255)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ function isTokenCharCode(c) {
+ switch (c) {
+ case 34:
+ case 40:
+ case 41:
+ case 44:
+ case 47:
+ case 58:
+ case 59:
+ case 60:
+ case 61:
+ case 62:
+ case 63:
+ case 64:
+ case 91:
+ case 92:
+ case 93:
+ case 123:
+ case 125:
+ return false;
+ default:
+ return c >= 33 && c <= 126;
+ }
+ }
+ function isValidHTTPToken(characters) {
+ if (characters.length === 0) {
+ return false;
+ }
+ for (let i = 0; i < characters.length; ++i) {
+ if (!isTokenCharCode(characters.charCodeAt(i))) {
+ return false;
+ }
+ }
+ return true;
+ }
+ function isValidHeaderName(potentialValue) {
+ return isValidHTTPToken(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 performance2.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(policy);
+ let referrerSource = null;
+ if (request.referrer === "client") {
+ const globalOrigin = getGlobalOrigin();
+ if (!globalOrigin || globalOrigin.origin === "null") {
+ return "no-referrer";
+ }
+ referrerSource = new URL(globalOrigin);
+ } else if (request.referrer instanceof URL) {
+ referrerSource = request.referrer;
+ }
+ let referrerURL = stripURLForReferrer(referrerSource);
+ const referrerOrigin = stripURLForReferrer(referrerSource, true);
+ if (referrerURL.toString().length > 4096) {
+ referrerURL = referrerOrigin;
+ }
+ const areSameOrigin = sameOrigin(request, referrerURL);
+ const isNonPotentiallyTrustWorthy = isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(request.url);
+ switch (policy) {
+ case "origin":
+ return referrerOrigin != null ? referrerOrigin : stripURLForReferrer(referrerSource, true);
+ case "unsafe-url":
+ return referrerURL;
+ case "same-origin":
+ return areSameOrigin ? referrerOrigin : "no-referrer";
+ case "origin-when-cross-origin":
+ return areSameOrigin ? referrerURL : referrerOrigin;
+ case "strict-origin-when-cross-origin": {
+ const currentURL = requestCurrentURL(request);
+ if (sameOrigin(referrerURL, currentURL)) {
+ return referrerURL;
+ }
+ if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) {
+ return "no-referrer";
+ }
+ return referrerOrigin;
+ }
+ case "strict-origin":
+ // eslint-disable-line
+ /**
+ * 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
+ */
+ case "no-referrer-when-downgrade":
+ // eslint-disable-line
+ /**
+ * 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;
+ }
+ }
+ function stripURLForReferrer(url, originOnly) {
+ assert(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;
+ }
+ }
+ function bytesMatch(bytes, metadataList) {
+ if (crypto === void 0) {
+ return true;
+ }
+ const parsedMetadata = parseMetadata(metadataList);
+ if (parsedMetadata === "no metadata") {
+ return true;
+ }
+ if (parsedMetadata.length === 0) {
+ return true;
+ }
+ const strongest = getStrongestMetadata(parsedMetadata);
+ const metadata = filterMetadataListByAlgorithm(parsedMetadata, strongest);
+ for (const item of metadata) {
+ const algorithm = item.algo;
+ const expectedValue = item.hash;
+ let actualValue = crypto.createHash(algorithm).update(bytes).digest("base64");
+ if (actualValue[actualValue.length - 1] === "=") {
+ if (actualValue[actualValue.length - 2] === "=") {
+ actualValue = actualValue.slice(0, -2);
+ } else {
+ actualValue = actualValue.slice(0, -1);
+ }
+ }
+ if (compareBase64Mixed(actualValue, expectedValue)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ var parseHashWithOptions = /(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i;
+ function parseMetadata(metadata) {
+ const result = [];
+ let empty = true;
+ for (const token of metadata.split(" ")) {
+ empty = false;
+ const parsedToken = parseHashWithOptions.exec(token);
+ if (parsedToken === null || parsedToken.groups === void 0 || parsedToken.groups.algo === void 0) {
+ continue;
+ }
+ const algorithm = parsedToken.groups.algo.toLowerCase();
+ if (supportedHashes.includes(algorithm)) {
+ result.push(parsedToken.groups);
+ }
+ }
+ if (empty === true) {
+ return "no metadata";
+ }
+ return result;
+ }
+ function getStrongestMetadata(metadataList) {
+ let algorithm = metadataList[0].algo;
+ if (algorithm[3] === "5") {
+ return algorithm;
+ }
+ for (let i = 1; i < metadataList.length; ++i) {
+ const metadata = metadataList[i];
+ if (metadata.algo[3] === "5") {
+ algorithm = "sha512";
+ break;
+ } else if (algorithm[3] === "3") {
+ continue;
+ } else if (metadata.algo[3] === "3") {
+ algorithm = "sha384";
+ }
+ }
+ return algorithm;
+ }
+ function filterMetadataListByAlgorithm(metadataList, algorithm) {
+ if (metadataList.length === 1) {
+ return metadataList;
+ }
+ let pos = 0;
+ for (let i = 0; i < metadataList.length; ++i) {
+ if (metadataList[i].algo === algorithm) {
+ metadataList[pos++] = metadataList[i];
+ }
+ }
+ metadataList.length = pos;
+ return metadataList;
+ }
+ function compareBase64Mixed(actualValue, expectedValue) {
+ if (actualValue.length !== expectedValue.length) {
+ return false;
+ }
+ for (let i = 0; i < actualValue.length; ++i) {
+ if (actualValue[i] !== expectedValue[i]) {
+ if (actualValue[i] === "+" && expectedValue[i] === "-" || actualValue[i] === "/" && expectedValue[i] === "_") {
+ continue;
+ }
+ return false;
+ }
+ }
+ return true;
+ }
+ function tryUpgradeRequestToAPotentiallyTrustworthyURL(request) {
+ }
+ function sameOrigin(A, B) {
+ if (A.origin === B.origin && A.origin === "null") {
+ return true;
+ }
+ if (A.protocol === B.protocol && A.hostname === B.hostname && A.port === B.port) {
+ return true;
+ }
+ return false;
+ }
+ function createDeferredPromise() {
+ let res;
+ let rej;
+ const promise = new Promise((resolve, reject) => {
+ res = resolve;
+ rej = reject;
+ });
+ return { promise, resolve: res, reject: rej };
+ }
+ function isAborted(fetchParams) {
+ return fetchParams.controller.state === "aborted";
+ }
+ function isCancelled(fetchParams) {
+ return fetchParams.controller.state === "aborted" || fetchParams.controller.state === "terminated";
+ }
+ var 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);
+ 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(typeof result === "string");
+ return result;
+ }
+ var esIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));
+ 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: kind2, target } = object;
+ const values = target();
+ const len = values.length;
+ if (index >= len) {
+ return { value: void 0, done: true };
+ }
+ const pair = values[index];
+ object.index = index + 1;
+ return iteratorResult(pair, kind2);
+ },
+ // The class string of an iterator prototype object for a given interface is the
+ // result of concatenating the identifier of the interface and the string " Iterator".
+ [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 };
+ }
+ 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 {
+ const result = await readAllBytes(reader);
+ successSteps(result);
+ } catch (e) {
+ errorSteps(e);
+ }
+ }
+ var 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";
+ }
+ var MAXIMUM_ARGUMENT_LENGTH = 65535;
+ function isomorphicDecode(input) {
+ if (input.length < MAXIMUM_ARGUMENT_LENGTH) {
+ return String.fromCharCode(...input);
+ }
+ return input.reduce((previous, current) => previous + String.fromCharCode(current), "");
+ }
+ function readableStreamClose(controller) {
+ try {
+ controller.close();
+ } catch (err) {
+ if (!err.message.includes("Controller is already closed")) {
+ throw err;
+ }
+ }
+ }
+ function isomorphicEncode(input) {
+ for (let i = 0; i < input.length; i++) {
+ assert(input.charCodeAt(i) <= 255);
+ }
+ return input;
+ }
+ async function readAllBytes(reader) {
+ const bytes = [];
+ let byteLength = 0;
+ while (true) {
+ const { done, value: chunk } = await reader.read();
+ if (done) {
+ return Buffer.concat(bytes, byteLength);
+ }
+ if (!isUint8Array(chunk)) {
+ throw new TypeError("Received non-Uint8Array chunk");
+ }
+ bytes.push(chunk);
+ byteLength += chunk.length;
+ }
+ }
+ function urlIsLocal(url) {
+ assert("protocol" in url);
+ const protocol = url.protocol;
+ return protocol === "about:" || protocol === "blob:" || protocol === "data:";
+ }
+ function urlHasHttpsScheme(url) {
+ if (typeof url === "string") {
+ return url.startsWith("https:");
+ }
+ return url.protocol === "https:";
+ }
+ function urlIsHttpHttpsScheme(url) {
+ assert("protocol" in url);
+ const protocol = url.protocol;
+ return protocol === "http:" || protocol === "https:";
+ }
+ var hasOwn = Object.hasOwn || ((dict, key) => Object.prototype.hasOwnProperty.call(dict, key));
+ module2.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,
+ isErrorLike,
+ fullyReadBody,
+ bytesMatch,
+ isReadableStreamLike,
+ readableStreamClose,
+ isomorphicEncode,
+ isomorphicDecode,
+ urlIsLocal,
+ urlHasHttpsScheme,
+ urlIsHttpHttpsScheme,
+ readAllBytes,
+ normalizeMethodRecord,
+ parseMetadata
+ };
+ }
+});
+
+// node_modules/undici/lib/fetch/symbols.js
+var require_symbols2 = __commonJS({
+ "node_modules/undici/lib/fetch/symbols.js"(exports2, module2) {
+ "use strict";
+ module2.exports = {
+ kUrl: Symbol("url"),
+ kHeaders: Symbol("headers"),
+ kSignal: Symbol("signal"),
+ kState: Symbol("state"),
+ kGuard: Symbol("guard"),
+ kRealm: Symbol("realm")
+ };
+ }
+});
+
+// node_modules/undici/lib/fetch/webidl.js
+var require_webidl = __commonJS({
+ "node_modules/undici/lib/fetch/webidl.js"(exports2, module2) {
+ "use strict";
+ var { types } = require("util");
+ var { hasOwn, toUSVString } = require_util2();
+ var webidl = {};
+ webidl.converters = {};
+ webidl.util = {};
+ webidl.errors = {};
+ webidl.errors.exception = function(message) {
+ return new TypeError(`${message.header}: ${message.message}`);
+ };
+ webidl.errors.conversionFailed = function(context5) {
+ const plural = context5.types.length === 1 ? "" : " one of";
+ const message = `${context5.argument} could not be converted to${plural}: ${context5.types.join(", ")}.`;
+ return webidl.errors.exception({
+ header: context5.prefix,
+ message
+ });
+ };
+ webidl.errors.invalidArgument = function(context5) {
+ return webidl.errors.exception({
+ header: context5.prefix,
+ message: `"${context5.value}" is an invalid ${context5.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.`
+ });
+ }
+ 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.isProxy(O)) {
+ const keys2 = Object.keys(O);
+ for (const key of keys2) {
+ const typedKey = keyConverter(key);
+ const typedValue = valueConverter(O[key]);
+ result[typedKey] = typedValue;
+ }
+ return result;
+ }
+ const keys = Reflect.ownKeys(O);
+ for (const key of keys) {
+ const desc = Reflect.getOwnPropertyDescriptor(O, key);
+ if (desc?.enumerable) {
+ const typedKey = keyConverter(key);
+ const typedValue = valueConverter(O[key]);
+ result[typedKey] = typedValue;
+ }
+ }
+ 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) {
+ const x = Boolean(V);
+ return x;
+ };
+ webidl.converters.any = function(V) {
+ return V;
+ };
+ webidl.converters["long long"] = function(V) {
+ const x = webidl.util.ConvertToInt(V, 64, "signed");
+ return x;
+ };
+ webidl.converters["unsigned long long"] = function(V) {
+ const x = webidl.util.ConvertToInt(V, 64, "unsigned");
+ return x;
+ };
+ webidl.converters["unsigned long"] = function(V) {
+ const x = webidl.util.ConvertToInt(V, 32, "unsigned");
+ return x;
+ };
+ webidl.converters["unsigned short"] = function(V, opts) {
+ const x = webidl.util.ConvertToInt(V, 16, "unsigned", opts);
+ return x;
+ };
+ webidl.converters.ArrayBuffer = function(V, opts = {}) {
+ if (webidl.util.Type(V) !== "Object" || !types.isAnyArrayBuffer(V)) {
+ throw webidl.errors.conversionFailed({
+ prefix: `${V}`,
+ argument: `${V}`,
+ types: ["ArrayBuffer"]
+ });
+ }
+ if (opts.allowShared === false && types.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.isTypedArray(V) || V.constructor.name !== T.name) {
+ throw webidl.errors.conversionFailed({
+ prefix: `${T.name}`,
+ argument: `${V}`,
+ types: [T.name]
+ });
+ }
+ if (opts.allowShared === false && types.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.isDataView(V)) {
+ throw webidl.errors.exception({
+ header: "DataView",
+ message: "Object is not a DataView."
+ });
+ }
+ if (opts.allowShared === false && types.isSharedArrayBuffer(V.buffer)) {
+ throw webidl.errors.exception({
+ header: "ArrayBuffer",
+ message: "SharedArrayBuffer is not allowed."
+ });
+ }
+ return V;
+ };
+ webidl.converters.BufferSource = function(V, opts = {}) {
+ if (types.isAnyArrayBuffer(V)) {
+ return webidl.converters.ArrayBuffer(V, opts);
+ }
+ if (types.isTypedArray(V)) {
+ return webidl.converters.TypedArray(V, V.constructor);
+ }
+ if (types.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
+ );
+ module2.exports = {
+ webidl
+ };
+ }
+});
+
+// node_modules/undici/lib/fetch/dataURL.js
+var require_dataURL = __commonJS({
+ "node_modules/undici/lib/fetch/dataURL.js"(exports2, module2) {
+ var assert = require("assert");
+ var { atob: atob2 } = require("buffer");
+ var { isomorphicDecode } = require_util2();
+ var encoder = new TextEncoder();
+ var HTTP_TOKEN_CODEPOINTS = /^[!#$%&'*+-.^_|~A-Za-z0-9]+$/;
+ var HTTP_WHITESPACE_REGEX = /(\u000A|\u000D|\u0009|\u0020)/;
+ var HTTP_QUOTED_STRING_TOKENS = /[\u0009|\u0020-\u007E|\u0080-\u00FF]/;
+ function dataURLProcessor(dataURL) {
+ assert(dataURL.protocol === "data:");
+ let input = URLSerializer(dataURL, true);
+ input = input.slice(5);
+ const position = { position: 0 };
+ let mimeType = collectASequenceOfCodePointsFast(
+ ",",
+ input,
+ position
+ );
+ const mimeTypeLength = mimeType.length;
+ mimeType = removeASCIIWhitespace(mimeType, true, true);
+ if (position.position >= input.length) {
+ return "failure";
+ }
+ position.position++;
+ const encodedBody = input.slice(mimeTypeLength + 1);
+ let body = stringPercentDecode(encodedBody);
+ if (/;(\u0020){0,}base64$/i.test(mimeType)) {
+ const stringBody = isomorphicDecode(body);
+ body = forgivingBase64(stringBody);
+ if (body === "failure") {
+ return "failure";
+ }
+ mimeType = mimeType.slice(0, -6);
+ mimeType = mimeType.replace(/(\u0020)+$/, "");
+ mimeType = mimeType.slice(0, -1);
+ }
+ if (mimeType.startsWith(";")) {
+ mimeType = "text/plain" + mimeType;
+ }
+ let mimeTypeRecord = parseMIMEType(mimeType);
+ if (mimeTypeRecord === "failure") {
+ mimeTypeRecord = parseMIMEType("text/plain;charset=US-ASCII");
+ }
+ return { mimeType: mimeTypeRecord, body };
+ }
+ function URLSerializer(url, excludeFragment = false) {
+ if (!excludeFragment) {
+ return url.href;
+ }
+ const href = url.href;
+ const hashLength = url.hash.length;
+ return hashLength === 0 ? href : href.substring(0, href.length - hashLength);
+ }
+ function collectASequenceOfCodePoints(condition, input, position) {
+ let result = "";
+ while (position.position < input.length && condition(input[position.position])) {
+ result += input[position.position];
+ position.position++;
+ }
+ return result;
+ }
+ function collectASequenceOfCodePointsFast(char, input, position) {
+ const idx = input.indexOf(char, position.position);
+ const start = position.position;
+ if (idx === -1) {
+ position.position = input.length;
+ return input.slice(start);
+ }
+ position.position = idx;
+ return input.slice(start, position.position);
+ }
+ function stringPercentDecode(input) {
+ const bytes = encoder.encode(input);
+ return percentDecode(bytes);
+ }
+ function percentDecode(input) {
+ 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);
+ }
+ function parseMIMEType(input) {
+ input = removeHTTPWhitespace(input, true, true);
+ const position = { position: 0 };
+ const type = collectASequenceOfCodePointsFast(
+ "/",
+ input,
+ position
+ );
+ if (type.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(type)) {
+ return "failure";
+ }
+ if (position.position > input.length) {
+ return "failure";
+ }
+ position.position++;
+ let subtype = collectASequenceOfCodePointsFast(
+ ";",
+ input,
+ position
+ );
+ subtype = removeHTTPWhitespace(subtype, false, true);
+ if (subtype.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(subtype)) {
+ return "failure";
+ }
+ const typeLowercase = type.toLowerCase();
+ const subtypeLowercase = subtype.toLowerCase();
+ const mimeType = {
+ type: typeLowercase,
+ subtype: subtypeLowercase,
+ /** @type {Map} */
+ parameters: /* @__PURE__ */ new Map(),
+ // https://mimesniff.spec.whatwg.org/#mime-type-essence
+ essence: `${typeLowercase}/${subtypeLowercase}`
+ };
+ while (position.position < input.length) {
+ position.position++;
+ collectASequenceOfCodePoints(
+ // https://fetch.spec.whatwg.org/#http-whitespace
+ (char) => HTTP_WHITESPACE_REGEX.test(char),
+ input,
+ position
+ );
+ let parameterName = collectASequenceOfCodePoints(
+ (char) => char !== ";" && char !== "=",
+ input,
+ position
+ );
+ parameterName = parameterName.toLowerCase();
+ if (position.position < input.length) {
+ if (input[position.position] === ";") {
+ continue;
+ }
+ position.position++;
+ }
+ if (position.position > input.length) {
+ break;
+ }
+ let parameterValue = null;
+ if (input[position.position] === '"') {
+ parameterValue = collectAnHTTPQuotedString(input, position, true);
+ collectASequenceOfCodePointsFast(
+ ";",
+ input,
+ position
+ );
+ } else {
+ parameterValue = collectASequenceOfCodePointsFast(
+ ";",
+ input,
+ position
+ );
+ parameterValue = removeHTTPWhitespace(parameterValue, false, true);
+ if (parameterValue.length === 0) {
+ continue;
+ }
+ }
+ if (parameterName.length !== 0 && HTTP_TOKEN_CODEPOINTS.test(parameterName) && (parameterValue.length === 0 || HTTP_QUOTED_STRING_TOKENS.test(parameterValue)) && !mimeType.parameters.has(parameterName)) {
+ mimeType.parameters.set(parameterName, parameterValue);
+ }
+ }
+ return mimeType;
+ }
+ function forgivingBase64(data) {
+ data = data.replace(/[\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 = atob2(data);
+ const bytes = new Uint8Array(binary.length);
+ for (let byte = 0; byte < binary.length; byte++) {
+ bytes[byte] = binary.charCodeAt(byte);
+ }
+ return bytes;
+ }
+ function collectAnHTTPQuotedString(input, position, extractValue) {
+ const positionStart = position.position;
+ let value = "";
+ assert(input[position.position] === '"');
+ position.position++;
+ while (true) {
+ value += collectASequenceOfCodePoints(
+ (char) => char !== '"' && char !== "\\",
+ input,
+ position
+ );
+ if (position.position >= input.length) {
+ break;
+ }
+ const quoteOrBackslash = input[position.position];
+ position.position++;
+ if (quoteOrBackslash === "\\") {
+ if (position.position >= input.length) {
+ value += "\\";
+ break;
+ }
+ value += input[position.position];
+ position.position++;
+ } else {
+ assert(quoteOrBackslash === '"');
+ break;
+ }
+ }
+ if (extractValue) {
+ return value;
+ }
+ return input.slice(positionStart, position.position);
+ }
+ function serializeAMimeType(mimeType) {
+ assert(mimeType !== "failure");
+ const { parameters, essence } = mimeType;
+ let serialization = essence;
+ for (let [name, value] of parameters.entries()) {
+ serialization += ";";
+ serialization += name;
+ serialization += "=";
+ if (!HTTP_TOKEN_CODEPOINTS.test(value)) {
+ value = value.replace(/(\\|")/g, "\\$1");
+ value = '"' + value;
+ value += '"';
+ }
+ serialization += value;
+ }
+ return serialization;
+ }
+ function isHTTPWhiteSpace(char) {
+ return char === "\r" || char === "\n" || char === " " || char === " ";
+ }
+ 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);
+ }
+ function isASCIIWhitespace(char) {
+ return char === "\r" || char === "\n" || char === " " || char === "\f" || char === " ";
+ }
+ 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);
+ }
+ module2.exports = {
+ dataURLProcessor,
+ URLSerializer,
+ collectASequenceOfCodePoints,
+ collectASequenceOfCodePointsFast,
+ stringPercentDecode,
+ parseMIMEType,
+ collectAnHTTPQuotedString,
+ serializeAMimeType
+ };
+ }
+});
+
+// node_modules/undici/lib/fetch/file.js
+var require_file = __commonJS({
+ "node_modules/undici/lib/fetch/file.js"(exports2, module2) {
+ "use strict";
+ var { Blob: Blob2, File: NativeFile } = require("buffer");
+ var { types } = require("util");
+ var { kState } = require_symbols2();
+ var { isBlobLike } = require_util2();
+ var { webidl } = require_webidl();
+ var { parseMIMEType, serializeAMimeType } = require_dataURL();
+ var { kEnumerableProperty } = require_util();
+ var encoder = new TextEncoder();
+ var File = class _File extends Blob2 {
+ 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(Blob2);
+ 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.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"
+ }
+ ]);
+ function processBlobParts(parts, options) {
+ 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.isAnyArrayBuffer(element) || types.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;
+ }
+ 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 && object instanceof NativeFile || object instanceof File || object && (typeof object.stream === "function" || typeof object.arrayBuffer === "function") && object[Symbol.toStringTag] === "File";
+ }
+ module2.exports = { File, FileLike, isFileLike };
+ }
+});
+
+// node_modules/undici/lib/fetch/formdata.js
+var require_formdata = __commonJS({
+ "node_modules/undici/lib/fetch/formdata.js"(exports2, module2) {
+ "use strict";
+ var { isBlobLike, toUSVString, makeIterator } = require_util2();
+ var { kState } = require_symbols2();
+ var { File: UndiciFile, FileLike, isFileLike } = require_file();
+ var { webidl } = require_webidl();
+ var { Blob: Blob2, File: NativeFile } = require("buffer");
+ var File = NativeFile ?? 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((entry2) => entry2.name === name);
+ if (idx !== -1) {
+ this[kState] = [
+ ...this[kState].slice(0, idx),
+ entry,
+ ...this[kState].slice(idx + 1).filter((entry2) => entry2.name !== name)
+ ];
+ } else {
+ this[kState].push(entry);
+ }
+ }
+ 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
+ }
+ });
+ 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 Blob2 ? new File([value], "blob", { type: value.type }) : new FileLike(value, "blob", { type: value.type });
+ }
+ if (filename !== void 0) {
+ const options = {
+ type: value.type,
+ lastModified: value.lastModified
+ };
+ value = NativeFile && value instanceof NativeFile || value instanceof UndiciFile ? new File([value], filename, options) : new FileLike(value, filename, options);
+ }
+ }
+ return { name, value };
+ }
+ module2.exports = { FormData };
+ }
+});
+
+// node_modules/undici/lib/fetch/body.js
+var require_body = __commonJS({
+ "node_modules/undici/lib/fetch/body.js"(exports2, module2) {
+ "use strict";
+ var Busboy = require_main();
+ var util = require_util();
+ var {
+ ReadableStreamFrom,
+ isBlobLike,
+ isReadableStreamLike,
+ readableStreamClose,
+ createDeferredPromise,
+ fullyReadBody
+ } = require_util2();
+ var { FormData } = require_formdata();
+ var { kState } = require_symbols2();
+ var { webidl } = require_webidl();
+ var { DOMException: DOMException2, structuredClone } = require_constants2();
+ var { Blob: Blob2, File: NativeFile } = require("buffer");
+ var { kBodyUsed } = require_symbols();
+ var assert = require("assert");
+ var { isErrored } = require_util();
+ var { isUint8Array, isArrayBuffer } = require("util/types");
+ var { File: UndiciFile } = require_file();
+ var { parseMIMEType, serializeAMimeType } = require_dataURL();
+ var random;
+ try {
+ const crypto = require("node:crypto");
+ random = (max) => crypto.randomInt(0, max);
+ } catch {
+ random = (max) => Math.floor(Math.random(max));
+ }
+ var ReadableStream = globalThis.ReadableStream;
+ var File = NativeFile ?? UndiciFile;
+ var textEncoder = new TextEncoder();
+ var 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(isReadableStreamLike(stream));
+ let action = null;
+ let source = null;
+ let length = null;
+ let type = null;
+ if (typeof object === "string") {
+ source = object;
+ type = "text/plain;charset=UTF-8";
+ } else if (object instanceof URLSearchParams) {
+ source = object.toString();
+ type = "application/x-www-form-urlencoded;charset=UTF-8";
+ } else if (isArrayBuffer(object)) {
+ source = new Uint8Array(object.slice());
+ } else if (ArrayBuffer.isView(object)) {
+ source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength));
+ } else if (util.isFormDataLike(object)) {
+ const boundary = `----formdata-undici-0${`${random(1e11)}`.padStart(11, "0")}`;
+ const prefix = `--${boundary}\r
+Content-Disposition: form-data`;
+ const escape = (str) => str.replace(/\n/g, "%0A").replace(/\r/g, "%0D").replace(/"/g, "%22");
+ const normalizeLinefeeds = (value) => value.replace(/\r?\n|\r/g, "\r\n");
+ const blobParts = [];
+ const rn = new Uint8Array([13, 10]);
+ length = 0;
+ let hasUnknownSizeValue = false;
+ for (const [name, value] of object) {
+ if (typeof value === "string") {
+ const chunk2 = textEncoder.encode(prefix + `; name="${escape(normalizeLinefeeds(name))}"\r
+\r
+${normalizeLinefeeds(value)}\r
+`);
+ blobParts.push(chunk2);
+ length += chunk2.byteLength;
+ } else {
+ const chunk2 = textEncoder.encode(`${prefix}; name="${escape(normalizeLinefeeds(name))}"` + (value.name ? `; filename="${escape(value.name)}"` : "") + `\r
+Content-Type: ${value.type || "application/octet-stream"}\r
+\r
+`);
+ blobParts.push(chunk2, value, rn);
+ if (typeof value.size === "number") {
+ length += chunk2.byteLength + value.size + rn.byteLength;
+ } else {
+ hasUnknownSizeValue = true;
+ }
+ }
+ }
+ const chunk = textEncoder.encode(`--${boundary}--`);
+ 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
+ });
+ }
+ const body = { stream, source, length };
+ return [body, type];
+ }
+ function safelyExtractBody(object, keepalive = false) {
+ if (!ReadableStream) {
+ ReadableStream = require("stream/web").ReadableStream;
+ }
+ if (object instanceof ReadableStream) {
+ assert(!util.isDisturbed(object), "The body has already been consumed.");
+ assert(!object.locked, "The stream is locked.");
+ }
+ return extractBody(object, keepalive);
+ }
+ function cloneBody(body) {
+ const [out1, out2] = body.stream.tee();
+ const out2Clone = structuredClone(out2, { transfer: [out2] });
+ const [, finalClone] = out2Clone.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 DOMException2("The operation was aborted.", "AbortError");
+ }
+ }
+ function bodyMixinMethods(instance) {
+ const methods = {
+ blob() {
+ return specConsumeBody(this, (bytes) => {
+ let mimeType = bodyMimeType(this);
+ if (mimeType === "failure") {
+ mimeType = "";
+ } else if (mimeType) {
+ mimeType = serializeAMimeType(mimeType);
+ }
+ return new Blob2([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 DOMException2(`${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) {
+ throw Object.assign(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."
+ });
+ }
+ }
+ };
+ return methods;
+ }
+ function mixinBody(prototype) {
+ Object.assign(prototype.prototype, bodyMixinMethods(prototype));
+ }
+ 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 = (error3) => promise.reject(error3);
+ 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));
+ }
+ function utf8DecodeBytes(buffer) {
+ if (buffer.length === 0) {
+ return "";
+ }
+ if (buffer[0] === 239 && buffer[1] === 187 && buffer[2] === 191) {
+ buffer = buffer.subarray(3);
+ }
+ const output = textDecoder.decode(buffer);
+ return output;
+ }
+ function parseJSONFromBytes(bytes) {
+ return JSON.parse(utf8DecodeBytes(bytes));
+ }
+ function bodyMimeType(object) {
+ const { headersList } = object[kState];
+ const contentType = headersList.get("content-type");
+ if (contentType === null) {
+ return "failure";
+ }
+ return parseMIMEType(contentType);
+ }
+ module2.exports = {
+ extractBody,
+ safelyExtractBody,
+ cloneBody,
+ mixinBody
+ };
+ }
+});
+
+// node_modules/undici/lib/core/request.js
+var require_request = __commonJS({
+ "node_modules/undici/lib/core/request.js"(exports2, module2) {
+ "use strict";
+ var {
+ InvalidArgumentError,
+ NotSupportedError
+ } = require_errors();
+ var assert = require("assert");
+ var { kHTTP2BuildRequest, kHTTP2CopyHeaders, kHTTP1BuildRequest } = require_symbols();
+ var util = require_util();
+ var tokenRegExp = /^[\^_`a-zA-Z\-0-9!#$%&'*+.|~]+$/;
+ var headerCharRegex = /[^\t\x20-\x7e\x80-\xff]/;
+ var invalidPathRegex = /[^\u0021-\u00ff]/;
+ var kHandler = Symbol("handler");
+ var channels = {};
+ var 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: path5,
+ method,
+ body,
+ headers,
+ query,
+ idempotent,
+ blocking,
+ upgrade,
+ headersTimeout,
+ bodyTimeout,
+ reset,
+ throwOnError,
+ expectContinue
+ }, handler) {
+ if (typeof path5 !== "string") {
+ throw new InvalidArgumentError("path must be a string");
+ } else if (path5[0] !== "/" && !(path5.startsWith("http://") || path5.startsWith("https://")) && method !== "CONNECT") {
+ throw new InvalidArgumentError("path must be an absolute URL or start with a slash");
+ } else if (invalidPathRegex.exec(path5) !== 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(path5, query) : path5;
+ 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
+`;
+ }
+ 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
+`;
+ }
+ 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(!this.aborted);
+ assert(!this.completed);
+ if (this.error) {
+ abort(this.error);
+ } else {
+ this.abort = abort;
+ return this[kHandler].onConnect(abort);
+ }
+ }
+ onHeaders(statusCode, headers, resume, statusText) {
+ assert(!this.aborted);
+ assert(!this.completed);
+ if (channels.headers.hasSubscribers) {
+ channels.headers.publish({ request: this, response: { statusCode, headers, statusText } });
+ }
+ try {
+ return this[kHandler].onHeaders(statusCode, headers, resume, statusText);
+ } catch (err) {
+ this.abort(err);
+ }
+ }
+ onData(chunk) {
+ assert(!this.aborted);
+ assert(!this.completed);
+ try {
+ return this[kHandler].onData(chunk);
+ } catch (err) {
+ this.abort(err);
+ return false;
+ }
+ }
+ onUpgrade(statusCode, headers, socket) {
+ assert(!this.aborted);
+ assert(!this.completed);
+ return this[kHandler].onUpgrade(statusCode, headers, socket);
+ }
+ onComplete(trailers) {
+ this.onFinally();
+ assert(!this.aborted);
+ this.completed = true;
+ if (channels.trailers.hasSubscribers) {
+ channels.trailers.publish({ request: this, trailers });
+ }
+ try {
+ return this[kHandler].onComplete(trailers);
+ } catch (err) {
+ this.onError(err);
+ }
+ }
+ onError(error3) {
+ this.onFinally();
+ if (channels.error.hasSubscribers) {
+ channels.error.publish({ request: this, error: error3 });
+ }
+ if (this.aborted) {
+ return;
+ }
+ this.aborted = true;
+ return this[kHandler].onError(error3);
+ }
+ 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;
+ }
+ }
+ // TODO: adjust to support H2
+ 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
+`;
+ }
+ 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);
+ }
+ }
+ }
+ module2.exports = Request;
+ }
+});
+
+// node_modules/undici/lib/dispatcher.js
+var require_dispatcher = __commonJS({
+ "node_modules/undici/lib/dispatcher.js"(exports2, module2) {
+ "use strict";
+ var 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");
+ }
+ };
+ module2.exports = Dispatcher;
+ }
+});
+
+// node_modules/undici/lib/dispatcher-base.js
+var require_dispatcher_base = __commonJS({
+ "node_modules/undici/lib/dispatcher-base.js"(exports2, module2) {
+ "use strict";
+ var Dispatcher = require_dispatcher();
+ var {
+ ClientDestroyedError,
+ ClientClosedError,
+ InvalidArgumentError
+ } = require_errors();
+ var { kDestroy, kClose, kDispatch, kInterceptors } = require_symbols();
+ var kDestroyed = Symbol("destroyed");
+ var kClosed = Symbol("closed");
+ var kOnDestroyed = Symbol("onDestroyed");
+ var kOnClosed = Symbol("onClosed");
+ var 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--) {
+ const interceptor = this[kInterceptors][i];
+ if (typeof interceptor !== "function") {
+ throw new InvalidArgumentError("interceptor must be an function");
+ }
+ }
+ }
+ this[kInterceptors] = newInterceptors;
+ }
+ close(callback) {
+ if (callback === void 0) {
+ return new Promise((resolve, reject) => {
+ this.close((err, data) => {
+ return err ? reject(err) : resolve(data);
+ });
+ });
+ }
+ if (typeof callback !== "function") {
+ throw new InvalidArgumentError("invalid callback");
+ }
+ if (this[kDestroyed]) {
+ queueMicrotask(() => callback(new ClientDestroyedError(), null));
+ return;
+ }
+ if (this[kClosed]) {
+ if (this[kOnClosed]) {
+ this[kOnClosed].push(callback);
+ } else {
+ queueMicrotask(() => callback(null, null));
+ }
+ return;
+ }
+ this[kClosed] = true;
+ this[kOnClosed].push(callback);
+ const onClosed = () => {
+ const callbacks = this[kOnClosed];
+ this[kOnClosed] = null;
+ for (let i = 0; i < callbacks.length; i++) {
+ callbacks[i](null, null);
+ }
+ };
+ this[kClose]().then(() => this.destroy()).then(() => {
+ queueMicrotask(onClosed);
+ });
+ }
+ destroy(err, callback) {
+ if (typeof err === "function") {
+ callback = err;
+ err = null;
+ }
+ if (callback === void 0) {
+ return new Promise((resolve, reject) => {
+ this.destroy(err, (err2, data) => {
+ return err2 ? (
+ /* istanbul ignore next: should never error */
+ reject(err2)
+ ) : resolve(data);
+ });
+ });
+ }
+ if (typeof callback !== "function") {
+ throw new InvalidArgumentError("invalid callback");
+ }
+ if (this[kDestroyed]) {
+ if (this[kOnDestroyed]) {
+ this[kOnDestroyed].push(callback);
+ } else {
+ queueMicrotask(() => callback(null, null));
+ }
+ return;
+ }
+ if (!err) {
+ err = new ClientDestroyedError();
+ }
+ this[kDestroyed] = true;
+ this[kOnDestroyed] = this[kOnDestroyed] || [];
+ this[kOnDestroyed].push(callback);
+ const onDestroyed = () => {
+ const callbacks = this[kOnDestroyed];
+ this[kOnDestroyed] = null;
+ for (let i = 0; i < callbacks.length; i++) {
+ callbacks[i](null, null);
+ }
+ };
+ this[kDestroy](err).then(() => {
+ queueMicrotask(onDestroyed);
+ });
+ }
+ [kInterceptedDispatch](opts, handler) {
+ if (!this[kInterceptors] || this[kInterceptors].length === 0) {
+ this[kInterceptedDispatch] = this[kDispatch];
+ return this[kDispatch](opts, handler);
+ }
+ let dispatch = this[kDispatch].bind(this);
+ for (let i = this[kInterceptors].length - 1; i >= 0; i--) {
+ dispatch = this[kInterceptors][i](dispatch);
+ }
+ this[kInterceptedDispatch] = dispatch;
+ return dispatch(opts, handler);
+ }
+ dispatch(opts, handler) {
+ if (!handler || typeof handler !== "object") {
+ throw new InvalidArgumentError("handler must be an object");
+ }
+ try {
+ if (!opts || typeof opts !== "object") {
+ throw new InvalidArgumentError("opts must be an object.");
+ }
+ if (this[kDestroyed] || this[kOnDestroyed]) {
+ throw new ClientDestroyedError();
+ }
+ if (this[kClosed]) {
+ throw new ClientClosedError();
+ }
+ return this[kInterceptedDispatch](opts, handler);
+ } catch (err) {
+ if (typeof handler.onError !== "function") {
+ throw new InvalidArgumentError("invalid onError method");
+ }
+ handler.onError(err);
+ return false;
+ }
+ }
+ };
+ module2.exports = DispatcherBase;
+ }
+});
+
+// node_modules/undici/lib/core/connect.js
+var require_connect = __commonJS({
+ "node_modules/undici/lib/core/connect.js"(exports2, module2) {
+ "use strict";
+ var net = require("net");
+ var assert = require("assert");
+ var util = require_util();
+ var { InvalidArgumentError, ConnectTimeoutError } = require_errors();
+ var tls;
+ var 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(sessionKey);
+ socket = tls.connect({
+ highWaterMark: 16384,
+ // TLS in node can't have bigger HWM anyway...
+ ...options,
+ servername,
+ session,
+ localAddress,
+ // TODO(HTTP/2): Add support for h2c
+ ALPNProtocols: allowH2 ? ["http/1.1", "h2"] : ["http/1.1"],
+ socket: httpSocket,
+ // upgrade socket connection
+ port: port || 443,
+ host: hostname
+ });
+ socket.on("session", function(session2) {
+ sessionCache.set(sessionKey, session2);
+ });
+ } else {
+ assert(!httpSocket, "httpSocket can only be sent on TLS update");
+ socket = net.connect({
+ highWaterMark: 64 * 1024,
+ // Same as nodejs fs streams.
+ ...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(onConnectTimeout2, timeout) {
+ if (!timeout) {
+ return () => {
+ };
+ }
+ let s1 = null;
+ let s2 = null;
+ const timeoutId = setTimeout(() => {
+ s1 = setImmediate(() => {
+ if (process.platform === "win32") {
+ s2 = setImmediate(() => onConnectTimeout2());
+ } else {
+ onConnectTimeout2();
+ }
+ });
+ }, timeout);
+ return () => {
+ clearTimeout(timeoutId);
+ clearImmediate(s1);
+ clearImmediate(s2);
+ };
+ }
+ function onConnectTimeout(socket) {
+ util.destroy(socket, new ConnectTimeoutError());
+ }
+ module2.exports = buildConnector;
+ }
+});
+
+// node_modules/undici/lib/llhttp/utils.js
+var require_utils2 = __commonJS({
+ "node_modules/undici/lib/llhttp/utils.js"(exports2) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ exports2.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;
+ }
+ exports2.enumToMap = enumToMap;
+ }
+});
+
+// node_modules/undici/lib/llhttp/constants.js
+var require_constants3 = __commonJS({
+ "node_modules/undici/lib/llhttp/constants.js"(exports2) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ exports2.SPECIAL_HEADERS = exports2.HEADER_STATE = exports2.MINOR = exports2.MAJOR = exports2.CONNECTION_TOKEN_CHARS = exports2.HEADER_CHARS = exports2.TOKEN = exports2.STRICT_TOKEN = exports2.HEX = exports2.URL_CHAR = exports2.STRICT_URL_CHAR = exports2.USERINFO_CHARS = exports2.MARK = exports2.ALPHANUM = exports2.NUM = exports2.HEX_MAP = exports2.NUM_MAP = exports2.ALPHA = exports2.FINISH = exports2.H_METHOD_MAP = exports2.METHOD_MAP = exports2.METHODS_RTSP = exports2.METHODS_ICE = exports2.METHODS_HTTP = exports2.METHODS = exports2.LENIENT_FLAGS = exports2.FLAGS = exports2.TYPE = exports2.ERROR = void 0;
+ var utils_1 = require_utils2();
+ var ERROR;
+ (function(ERROR2) {
+ ERROR2[ERROR2["OK"] = 0] = "OK";
+ ERROR2[ERROR2["INTERNAL"] = 1] = "INTERNAL";
+ ERROR2[ERROR2["STRICT"] = 2] = "STRICT";
+ ERROR2[ERROR2["LF_EXPECTED"] = 3] = "LF_EXPECTED";
+ ERROR2[ERROR2["UNEXPECTED_CONTENT_LENGTH"] = 4] = "UNEXPECTED_CONTENT_LENGTH";
+ ERROR2[ERROR2["CLOSED_CONNECTION"] = 5] = "CLOSED_CONNECTION";
+ ERROR2[ERROR2["INVALID_METHOD"] = 6] = "INVALID_METHOD";
+ ERROR2[ERROR2["INVALID_URL"] = 7] = "INVALID_URL";
+ ERROR2[ERROR2["INVALID_CONSTANT"] = 8] = "INVALID_CONSTANT";
+ ERROR2[ERROR2["INVALID_VERSION"] = 9] = "INVALID_VERSION";
+ ERROR2[ERROR2["INVALID_HEADER_TOKEN"] = 10] = "INVALID_HEADER_TOKEN";
+ ERROR2[ERROR2["INVALID_CONTENT_LENGTH"] = 11] = "INVALID_CONTENT_LENGTH";
+ ERROR2[ERROR2["INVALID_CHUNK_SIZE"] = 12] = "INVALID_CHUNK_SIZE";
+ ERROR2[ERROR2["INVALID_STATUS"] = 13] = "INVALID_STATUS";
+ ERROR2[ERROR2["INVALID_EOF_STATE"] = 14] = "INVALID_EOF_STATE";
+ ERROR2[ERROR2["INVALID_TRANSFER_ENCODING"] = 15] = "INVALID_TRANSFER_ENCODING";
+ ERROR2[ERROR2["CB_MESSAGE_BEGIN"] = 16] = "CB_MESSAGE_BEGIN";
+ ERROR2[ERROR2["CB_HEADERS_COMPLETE"] = 17] = "CB_HEADERS_COMPLETE";
+ ERROR2[ERROR2["CB_MESSAGE_COMPLETE"] = 18] = "CB_MESSAGE_COMPLETE";
+ ERROR2[ERROR2["CB_CHUNK_HEADER"] = 19] = "CB_CHUNK_HEADER";
+ ERROR2[ERROR2["CB_CHUNK_COMPLETE"] = 20] = "CB_CHUNK_COMPLETE";
+ ERROR2[ERROR2["PAUSED"] = 21] = "PAUSED";
+ ERROR2[ERROR2["PAUSED_UPGRADE"] = 22] = "PAUSED_UPGRADE";
+ ERROR2[ERROR2["PAUSED_H2_UPGRADE"] = 23] = "PAUSED_H2_UPGRADE";
+ ERROR2[ERROR2["USER"] = 24] = "USER";
+ })(ERROR = exports2.ERROR || (exports2.ERROR = {}));
+ var TYPE;
+ (function(TYPE2) {
+ TYPE2[TYPE2["BOTH"] = 0] = "BOTH";
+ TYPE2[TYPE2["REQUEST"] = 1] = "REQUEST";
+ TYPE2[TYPE2["RESPONSE"] = 2] = "RESPONSE";
+ })(TYPE = exports2.TYPE || (exports2.TYPE = {}));
+ var FLAGS;
+ (function(FLAGS2) {
+ FLAGS2[FLAGS2["CONNECTION_KEEP_ALIVE"] = 1] = "CONNECTION_KEEP_ALIVE";
+ FLAGS2[FLAGS2["CONNECTION_CLOSE"] = 2] = "CONNECTION_CLOSE";
+ FLAGS2[FLAGS2["CONNECTION_UPGRADE"] = 4] = "CONNECTION_UPGRADE";
+ FLAGS2[FLAGS2["CHUNKED"] = 8] = "CHUNKED";
+ FLAGS2[FLAGS2["UPGRADE"] = 16] = "UPGRADE";
+ FLAGS2[FLAGS2["CONTENT_LENGTH"] = 32] = "CONTENT_LENGTH";
+ FLAGS2[FLAGS2["SKIPBODY"] = 64] = "SKIPBODY";
+ FLAGS2[FLAGS2["TRAILING"] = 128] = "TRAILING";
+ FLAGS2[FLAGS2["TRANSFER_ENCODING"] = 512] = "TRANSFER_ENCODING";
+ })(FLAGS = exports2.FLAGS || (exports2.FLAGS = {}));
+ var LENIENT_FLAGS;
+ (function(LENIENT_FLAGS2) {
+ LENIENT_FLAGS2[LENIENT_FLAGS2["HEADERS"] = 1] = "HEADERS";
+ LENIENT_FLAGS2[LENIENT_FLAGS2["CHUNKED_LENGTH"] = 2] = "CHUNKED_LENGTH";
+ LENIENT_FLAGS2[LENIENT_FLAGS2["KEEP_ALIVE"] = 4] = "KEEP_ALIVE";
+ })(LENIENT_FLAGS = exports2.LENIENT_FLAGS || (exports2.LENIENT_FLAGS = {}));
+ var METHODS;
+ (function(METHODS2) {
+ METHODS2[METHODS2["DELETE"] = 0] = "DELETE";
+ METHODS2[METHODS2["GET"] = 1] = "GET";
+ METHODS2[METHODS2["HEAD"] = 2] = "HEAD";
+ METHODS2[METHODS2["POST"] = 3] = "POST";
+ METHODS2[METHODS2["PUT"] = 4] = "PUT";
+ METHODS2[METHODS2["CONNECT"] = 5] = "CONNECT";
+ METHODS2[METHODS2["OPTIONS"] = 6] = "OPTIONS";
+ METHODS2[METHODS2["TRACE"] = 7] = "TRACE";
+ METHODS2[METHODS2["COPY"] = 8] = "COPY";
+ METHODS2[METHODS2["LOCK"] = 9] = "LOCK";
+ METHODS2[METHODS2["MKCOL"] = 10] = "MKCOL";
+ METHODS2[METHODS2["MOVE"] = 11] = "MOVE";
+ METHODS2[METHODS2["PROPFIND"] = 12] = "PROPFIND";
+ METHODS2[METHODS2["PROPPATCH"] = 13] = "PROPPATCH";
+ METHODS2[METHODS2["SEARCH"] = 14] = "SEARCH";
+ METHODS2[METHODS2["UNLOCK"] = 15] = "UNLOCK";
+ METHODS2[METHODS2["BIND"] = 16] = "BIND";
+ METHODS2[METHODS2["REBIND"] = 17] = "REBIND";
+ METHODS2[METHODS2["UNBIND"] = 18] = "UNBIND";
+ METHODS2[METHODS2["ACL"] = 19] = "ACL";
+ METHODS2[METHODS2["REPORT"] = 20] = "REPORT";
+ METHODS2[METHODS2["MKACTIVITY"] = 21] = "MKACTIVITY";
+ METHODS2[METHODS2["CHECKOUT"] = 22] = "CHECKOUT";
+ METHODS2[METHODS2["MERGE"] = 23] = "MERGE";
+ METHODS2[METHODS2["M-SEARCH"] = 24] = "M-SEARCH";
+ METHODS2[METHODS2["NOTIFY"] = 25] = "NOTIFY";
+ METHODS2[METHODS2["SUBSCRIBE"] = 26] = "SUBSCRIBE";
+ METHODS2[METHODS2["UNSUBSCRIBE"] = 27] = "UNSUBSCRIBE";
+ METHODS2[METHODS2["PATCH"] = 28] = "PATCH";
+ METHODS2[METHODS2["PURGE"] = 29] = "PURGE";
+ METHODS2[METHODS2["MKCALENDAR"] = 30] = "MKCALENDAR";
+ METHODS2[METHODS2["LINK"] = 31] = "LINK";
+ METHODS2[METHODS2["UNLINK"] = 32] = "UNLINK";
+ METHODS2[METHODS2["SOURCE"] = 33] = "SOURCE";
+ METHODS2[METHODS2["PRI"] = 34] = "PRI";
+ METHODS2[METHODS2["DESCRIBE"] = 35] = "DESCRIBE";
+ METHODS2[METHODS2["ANNOUNCE"] = 36] = "ANNOUNCE";
+ METHODS2[METHODS2["SETUP"] = 37] = "SETUP";
+ METHODS2[METHODS2["PLAY"] = 38] = "PLAY";
+ METHODS2[METHODS2["PAUSE"] = 39] = "PAUSE";
+ METHODS2[METHODS2["TEARDOWN"] = 40] = "TEARDOWN";
+ METHODS2[METHODS2["GET_PARAMETER"] = 41] = "GET_PARAMETER";
+ METHODS2[METHODS2["SET_PARAMETER"] = 42] = "SET_PARAMETER";
+ METHODS2[METHODS2["REDIRECT"] = 43] = "REDIRECT";
+ METHODS2[METHODS2["RECORD"] = 44] = "RECORD";
+ METHODS2[METHODS2["FLUSH"] = 45] = "FLUSH";
+ })(METHODS = exports2.METHODS || (exports2.METHODS = {}));
+ exports2.METHODS_HTTP = [
+ METHODS.DELETE,
+ METHODS.GET,
+ METHODS.HEAD,
+ METHODS.POST,
+ METHODS.PUT,
+ METHODS.CONNECT,
+ METHODS.OPTIONS,
+ METHODS.TRACE,
+ METHODS.COPY,
+ METHODS.LOCK,
+ METHODS.MKCOL,
+ METHODS.MOVE,
+ METHODS.PROPFIND,
+ METHODS.PROPPATCH,
+ METHODS.SEARCH,
+ METHODS.UNLOCK,
+ METHODS.BIND,
+ METHODS.REBIND,
+ METHODS.UNBIND,
+ METHODS.ACL,
+ METHODS.REPORT,
+ METHODS.MKACTIVITY,
+ METHODS.CHECKOUT,
+ METHODS.MERGE,
+ METHODS["M-SEARCH"],
+ METHODS.NOTIFY,
+ METHODS.SUBSCRIBE,
+ METHODS.UNSUBSCRIBE,
+ METHODS.PATCH,
+ METHODS.PURGE,
+ METHODS.MKCALENDAR,
+ METHODS.LINK,
+ METHODS.UNLINK,
+ METHODS.PRI,
+ // TODO(indutny): should we allow it with HTTP?
+ METHODS.SOURCE
+ ];
+ exports2.METHODS_ICE = [
+ METHODS.SOURCE
+ ];
+ exports2.METHODS_RTSP = [
+ METHODS.OPTIONS,
+ METHODS.DESCRIBE,
+ METHODS.ANNOUNCE,
+ METHODS.SETUP,
+ METHODS.PLAY,
+ METHODS.PAUSE,
+ METHODS.TEARDOWN,
+ METHODS.GET_PARAMETER,
+ METHODS.SET_PARAMETER,
+ METHODS.REDIRECT,
+ METHODS.RECORD,
+ METHODS.FLUSH,
+ // For AirPlay
+ METHODS.GET,
+ METHODS.POST
+ ];
+ exports2.METHOD_MAP = utils_1.enumToMap(METHODS);
+ exports2.H_METHOD_MAP = {};
+ Object.keys(exports2.METHOD_MAP).forEach((key) => {
+ if (/^H/.test(key)) {
+ exports2.H_METHOD_MAP[key] = exports2.METHOD_MAP[key];
+ }
+ });
+ var FINISH;
+ (function(FINISH2) {
+ FINISH2[FINISH2["SAFE"] = 0] = "SAFE";
+ FINISH2[FINISH2["SAFE_WITH_CB"] = 1] = "SAFE_WITH_CB";
+ FINISH2[FINISH2["UNSAFE"] = 2] = "UNSAFE";
+ })(FINISH = exports2.FINISH || (exports2.FINISH = {}));
+ exports2.ALPHA = [];
+ for (let i = "A".charCodeAt(0); i <= "Z".charCodeAt(0); i++) {
+ exports2.ALPHA.push(String.fromCharCode(i));
+ exports2.ALPHA.push(String.fromCharCode(i + 32));
+ }
+ exports2.NUM_MAP = {
+ 0: 0,
+ 1: 1,
+ 2: 2,
+ 3: 3,
+ 4: 4,
+ 5: 5,
+ 6: 6,
+ 7: 7,
+ 8: 8,
+ 9: 9
+ };
+ exports2.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
+ };
+ exports2.NUM = [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ];
+ exports2.ALPHANUM = exports2.ALPHA.concat(exports2.NUM);
+ exports2.MARK = ["-", "_", ".", "!", "~", "*", "'", "(", ")"];
+ exports2.USERINFO_CHARS = exports2.ALPHANUM.concat(exports2.MARK).concat(["%", ";", ":", "&", "=", "+", "$", ","]);
+ exports2.STRICT_URL_CHAR = [
+ "!",
+ '"',
+ "$",
+ "%",
+ "&",
+ "'",
+ "(",
+ ")",
+ "*",
+ "+",
+ ",",
+ "-",
+ ".",
+ "/",
+ ":",
+ ";",
+ "<",
+ "=",
+ ">",
+ "@",
+ "[",
+ "\\",
+ "]",
+ "^",
+ "_",
+ "`",
+ "{",
+ "|",
+ "}",
+ "~"
+ ].concat(exports2.ALPHANUM);
+ exports2.URL_CHAR = exports2.STRICT_URL_CHAR.concat([" ", "\f"]);
+ for (let i = 128; i <= 255; i++) {
+ exports2.URL_CHAR.push(i);
+ }
+ exports2.HEX = exports2.NUM.concat(["a", "b", "c", "d", "e", "f", "A", "B", "C", "D", "E", "F"]);
+ exports2.STRICT_TOKEN = [
+ "!",
+ "#",
+ "$",
+ "%",
+ "&",
+ "'",
+ "*",
+ "+",
+ "-",
+ ".",
+ "^",
+ "_",
+ "`",
+ "|",
+ "~"
+ ].concat(exports2.ALPHANUM);
+ exports2.TOKEN = exports2.STRICT_TOKEN.concat([" "]);
+ exports2.HEADER_CHARS = [" "];
+ for (let i = 32; i <= 255; i++) {
+ if (i !== 127) {
+ exports2.HEADER_CHARS.push(i);
+ }
+ }
+ exports2.CONNECTION_TOKEN_CHARS = exports2.HEADER_CHARS.filter((c) => c !== 44);
+ exports2.MAJOR = exports2.NUM_MAP;
+ exports2.MINOR = exports2.MAJOR;
+ var HEADER_STATE;
+ (function(HEADER_STATE2) {
+ HEADER_STATE2[HEADER_STATE2["GENERAL"] = 0] = "GENERAL";
+ HEADER_STATE2[HEADER_STATE2["CONNECTION"] = 1] = "CONNECTION";
+ HEADER_STATE2[HEADER_STATE2["CONTENT_LENGTH"] = 2] = "CONTENT_LENGTH";
+ HEADER_STATE2[HEADER_STATE2["TRANSFER_ENCODING"] = 3] = "TRANSFER_ENCODING";
+ HEADER_STATE2[HEADER_STATE2["UPGRADE"] = 4] = "UPGRADE";
+ HEADER_STATE2[HEADER_STATE2["CONNECTION_KEEP_ALIVE"] = 5] = "CONNECTION_KEEP_ALIVE";
+ HEADER_STATE2[HEADER_STATE2["CONNECTION_CLOSE"] = 6] = "CONNECTION_CLOSE";
+ HEADER_STATE2[HEADER_STATE2["CONNECTION_UPGRADE"] = 7] = "CONNECTION_UPGRADE";
+ HEADER_STATE2[HEADER_STATE2["TRANSFER_ENCODING_CHUNKED"] = 8] = "TRANSFER_ENCODING_CHUNKED";
+ })(HEADER_STATE = exports2.HEADER_STATE || (exports2.HEADER_STATE = {}));
+ exports2.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
+ };
+ }
+});
+
+// node_modules/undici/lib/handler/RedirectHandler.js
+var require_RedirectHandler = __commonJS({
+ "node_modules/undici/lib/handler/RedirectHandler.js"(exports2, module2) {
+ "use strict";
+ var util = require_util();
+ var { kBodyUsed } = require_symbols();
+ var assert = require("assert");
+ var { InvalidArgumentError } = require_errors();
+ var EE = require("events");
+ var redirectableStatusCodes = [300, 301, 302, 303, 307, 308];
+ var kBody = Symbol("body");
+ var BodyAsyncIterable = class {
+ constructor(body) {
+ this[kBody] = body;
+ this[kBodyUsed] = false;
+ }
+ async *[Symbol.asyncIterator]() {
+ assert(!this[kBodyUsed], "disturbed");
+ this[kBodyUsed] = true;
+ yield* this[kBody];
+ }
+ };
+ var RedirectHandler = class {
+ constructor(dispatch, maxRedirections, opts, handler) {
+ if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) {
+ throw new InvalidArgumentError("maxRedirections must be a positive number");
+ }
+ util.validateHandler(handler, opts.method, opts.upgrade);
+ this.dispatch = dispatch;
+ this.location = null;
+ this.abort = null;
+ this.opts = { ...opts, maxRedirections: 0 };
+ this.maxRedirections = maxRedirections;
+ this.handler = handler;
+ this.history = [];
+ if (util.isStream(this.opts.body)) {
+ if (util.bodyLength(this.opts.body) === 0) {
+ this.opts.body.on("data", function() {
+ assert(false);
+ });
+ }
+ if (typeof this.opts.body.readableDidRead !== "boolean") {
+ this.opts.body[kBodyUsed] = false;
+ EE.prototype.on.call(this.opts.body, "data", function() {
+ this[kBodyUsed] = true;
+ });
+ }
+ } else if (this.opts.body && typeof this.opts.body.pipeTo === "function") {
+ this.opts.body = new BodyAsyncIterable(this.opts.body);
+ } else if (this.opts.body && typeof this.opts.body !== "string" && !ArrayBuffer.isView(this.opts.body) && util.isIterable(this.opts.body)) {
+ this.opts.body = new BodyAsyncIterable(this.opts.body);
+ }
+ }
+ onConnect(abort) {
+ this.abort = abort;
+ this.handler.onConnect(abort, { history: this.history });
+ }
+ onUpgrade(statusCode, headers, socket) {
+ this.handler.onUpgrade(statusCode, headers, socket);
+ }
+ onError(error3) {
+ this.handler.onError(error3);
+ }
+ 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 path5 = search ? `${pathname}${search}` : pathname;
+ this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin);
+ this.opts.path = path5;
+ 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(headers == null, "headers must be an object or an array");
+ }
+ return ret;
+ }
+ module2.exports = RedirectHandler;
+ }
+});
+
+// node_modules/undici/lib/interceptor/redirectInterceptor.js
+var require_redirectInterceptor = __commonJS({
+ "node_modules/undici/lib/interceptor/redirectInterceptor.js"(exports2, module2) {
+ "use strict";
+ var 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);
+ };
+ };
+ }
+ module2.exports = createRedirectInterceptor;
+ }
+});
+
+// node_modules/undici/lib/llhttp/llhttp-wasm.js
+var require_llhttp_wasm = __commonJS({
+ "node_modules/undici/lib/llhttp/llhttp-wasm.js"(exports2, module2) {
+ module2.exports = "AGFzbQEAAAABMAhgAX8Bf2ADf39/AX9gBH9/f38Bf2AAAGADf39/AGABfwBgAn9/AGAGf39/f39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQACA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAA0ZFAwMEAAAFAAAAAAAABQEFAAUFBQAABgAAAAAGBgYGAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAABAQcAAAUFAwABBAUBcAESEgUDAQACBggBfwFBgNQECwfRBSIGbWVtb3J5AgALX2luaXRpYWxpemUACRlfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlAQALbGxodHRwX2luaXQAChhsbGh0dHBfc2hvdWxkX2tlZXBfYWxpdmUAQQxsbGh0dHBfYWxsb2MADAZtYWxsb2MARgtsbGh0dHBfZnJlZQANBGZyZWUASA9sbGh0dHBfZ2V0X3R5cGUADhVsbGh0dHBfZ2V0X2h0dHBfbWFqb3IADxVsbGh0dHBfZ2V0X2h0dHBfbWlub3IAEBFsbGh0dHBfZ2V0X21ldGhvZAARFmxsaHR0cF9nZXRfc3RhdHVzX2NvZGUAEhJsbGh0dHBfZ2V0X3VwZ3JhZGUAEwxsbGh0dHBfcmVzZXQAFA5sbGh0dHBfZXhlY3V0ZQAVFGxsaHR0cF9zZXR0aW5nc19pbml0ABYNbGxodHRwX2ZpbmlzaAAXDGxsaHR0cF9wYXVzZQAYDWxsaHR0cF9yZXN1bWUAGRtsbGh0dHBfcmVzdW1lX2FmdGVyX3VwZ3JhZGUAGhBsbGh0dHBfZ2V0X2Vycm5vABsXbGxodHRwX2dldF9lcnJvcl9yZWFzb24AHBdsbGh0dHBfc2V0X2Vycm9yX3JlYXNvbgAdFGxsaHR0cF9nZXRfZXJyb3JfcG9zAB4RbGxodHRwX2Vycm5vX25hbWUAHxJsbGh0dHBfbWV0aG9kX25hbWUAIBJs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ADcDACAAQShqQgA3AwAgAEEgakIANwMAIABBEGpCADcDACAAQQhqQgA3AwAgAEHdATYCHEEAC3sBAX8CQCAAKAIMIgMNAAJAIAAoAgRFDQAgACABNgIECwJAIAAgASACEMSAgIAAIgMNACAAKAIMDwsgACADNgIcQQAhAyAAKAIEIgFFDQAgACABIAIgACgCCBGBgICAAAAiAUUNACAAIAI2AhQgACABNgIMIAEhAwsgAwvk8wEDDn8DfgR/I4CAgIAAQRBrIgMkgICAgAAgASEEIAEhBSABIQYgASEHIAEhCCABIQkgASEKIAEhCyABIQwgASENIAEhDiABIQ8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgACgCHCIQQX9qDt0B2gEB2QECAwQFBgcICQoLDA0O2AEPENcBERLWARMUFRYXGBkaG+AB3wEcHR7VAR8gISIjJCXUASYnKCkqKyzTAdIBLS7RAdABLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVG2wFHSElKzwHOAUvNAUzMAU1OT1BRUlNUVVZXWFlaW1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f4ABgQGCAYMBhAGFAYYBhwGIAYkB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QAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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FCAAIBA2AgxBACEQDLIBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxNCyAAQdMANgIcIAAgATYCFCAAIBA2AgxBACEQDLEBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxRCyAAQeUANgIcIAAgATYCFCAAIBA2AgxBACEQDLABCyAAQQA2AhwgACABNgIUIABBxoqAgAA2AhAgAEEHNgIMQQAhEAyvAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMSQsgAEHSADYCHCAAIAE2AhQgACAQNgIMQQAhEAyuAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMSQsgAEHTADYCHCAAIAE2AhQgACAQNgIMQQAhEAytAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMTQsgAEHlADYCHCAAIAE2AhQgACAQNgIMQQAhEAysAQsgAEEANgIcIAAgATYCFCAAQdyIgIAANgIQIABBBzYCDEEAIRAMqwELIBBBP0cNASABQQFqIQELQQUhEAyQAQtBACEQIABBADYCHCAAIAE2AhQgAEH9koCAADYCECAAQQc2AgwMqAELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEILIABB0gA2AhwgACABNgIUIAAgEDYCDEEAIRAMpwELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEILIABB0wA2AhwgACABNgIUIAAgEDYCDEEAIRAMpgELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEYLIABB5QA2AhwgACABNgIUIAAgEDYCDEEAIRAMpQELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDD8LIABB0gA2AhwgACAUNgIUIAAgATYCDEEAIRAMpAELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDD8LIABB0wA2AhwgACAUNgIUIAAgATYCDEEAIRAMowELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDEMLIABB5QA2AhwgACAU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YWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21ldGhvZF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lYCBjYWxsYmFjayBlcnJvcgBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNlcnZlcgBJbnZhbGlkIGhlYWRlciB2YWx1ZSBjaGFyAEludmFsaWQgaGVhZGVyIGZpZWxkIGNoYXIAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl92ZXJzaW9uAEludmFsaWQgbWlub3IgdmVyc2lvbgBJbnZhbGlkIG1ham9yIHZlcnNpb24ARXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgdmVyc2lvbgBFeHBlY3RlZCBDUkxGIGFmdGVyIHZlcnNpb24ASW52YWxpZCBIVFRQIHZlcnNpb24ASW52YWxpZCBoZWFkZXIgdG9rZW4AU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl91cmwASW52YWxpZCBjaGFyYWN0ZXJzIGluIHVybABVbmV4cGVjdGVkIHN0YXJ0IGNoYXIgaW4gdXJsAERvdWJsZSBAIGluIHVybABFbXB0eSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXJhY3RlciBpbiBDb250ZW50LUxlbmd0aABEdXBsaWNhdGUgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyIGluIHVybCBwYXRoAENvbnRlbnQtTGVuZ3RoIGNhbid0IGJlIHByZXNlbnQgd2l0aCBUcmFuc2Zlci1FbmNvZGluZwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBzaXplAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25faGVhZGVyX3ZhbHVlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgdmFsdWUATWlzc2luZyBleHBlY3RlZCBMRiBhZnRlciBoZWFkZXIgdmFsdWUASW52YWxpZCBgVHJhbnNmZXItRW5jb2RpbmdgIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fbmFtZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIG5hbWUAUGF1c2Ugb24gQ09OTkVDVC9VcGdyYWRlAFBhdXNlIG9uIFBSSS9VcGdyYWRlAEV4cGVjdGVkIEhUVFAvMiBDb25uZWN0aW9uIFByZWZhY2UAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9tZXRob2QARXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgbWV0aG9kAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25faGVhZGVyX2ZpZWxkAFBhdXNlZABJbnZhbGlkIHdvcmQgZW5jb3VudGVyZWQASW52YWxpZCBtZXRob2QgZW5jb3VudGVyZWQAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzY2hlbWEAUmVxdWVzdCBoYXMgaW52YWxpZCBgVHJhbnNmZXItRW5jb2RpbmdgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX0NIVU5LX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX05BTUVfQ09NUExFVEUASFBFX0NCX01FU1NBR0VfQ09NUExFVEUASFBFX0NCX01FVEhPRF9DT01QTEVURQBIUEVfQ0JfSEVBREVSX0ZJRUxEX0NPTVBMRVRFAERFTEVURQBIUEVfSU5WQUxJRF9FT0ZfU1RBVEUASU5WQUxJRF9TU0xfQ0VSVElGSUNBVEUAUEFVU0UATk9fUkVTUE9OU0UAVU5TVVBQT1JURURfTUVESUFfVFlQRQBHT05FAE5PVF9BQ0NFUFRBQkxFAFNFUlZJQ0VfVU5BVkFJTEFCTEUAUkFOR0VfTk9UX1NBVElTRklBQkxFAE9SSUdJTl9JU19VTlJFQUNIQUJMRQBSRVNQT05TRV9JU19TVEFMRQBQVVJHRQBNRVJHRQBSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFAFJFUVVFU1RfSEVBREVSX1RPT19MQVJHRQBQQVlMT0FEX1RPT19MQVJHRQBJTlNVRkZJQ0lFTlRfU1RPUkFHRQBIUEVfUEFVU0VEX1VQR1JBREUASFBFX1BBVVNFRF9IMl9VUEdSQURFAFNPVVJDRQBBTk5PVU5DRQBUUkFDRQBIUEVfVU5FWFBFQ1RFRF9TUEFDRQBERVNDUklCRQBVTlNVQlNDUklCRQBSRUNPUkQASFBFX0lOVkFMSURfTUVUSE9EAE5PVF9GT1VORABQUk9QRklORABVTkJJTkQAUkVCSU5EAFVOQVVUSE9SSVpFRABNRVRIT0RfTk9UX0FMTE9XRUQASFRUUF9WRVJTSU9OX05PVF9TVVBQT1JURUQAQUxSRUFEWV9SRVBPUlRFRABBQ0NFUFRFRABOT1RfSU1QTEVNRU5URUQATE9PUF9ERVRFQ1RFRABIUEVfQ1JfRVhQRUNURUQASFBFX0xGX0VYUEVDVEVEAENSRUFURUQASU1fVVNFRABIUEVfUEFVU0VEAFRJTUVPVVRfT0NDVVJFRABQQVlNRU5UX1JFUVVJUkVEAFBSRUNPTkRJVElPTl9SRVFVSVJFRABQUk9YWV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRABORVRXT1JLX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAExFTkdUSF9SRVFVSVJFRABTU0xfQ0VSVElGSUNBVEVfUkVRVUlSRUQAVVBHUkFERV9SRVFVSVJFRABQQUdFX0VYUElSRUQAUFJFQ09ORElUSU9OX0ZBSUxFRABFWFBFQ1RBVElPTl9GQUlMRUQAUkVWQUxJREFUSU9OX0ZBSUxFRABTU0xfSEFORFNIQUtFX0ZBSUxFRABMT0NLRUQAVFJBTlNGT1JNQVRJT05fQVBQTElFRABOT1RfTU9ESUZJRUQATk9UX0VYVEVOREVEAEJBTkRXSURUSF9MSU1JVF9FWENFRURFRABTSVRFX0lTX09WRVJMT0FERUQASEVBRABFeHBlY3RlZCBIVFRQLwAAXhMAACYTAAAwEAAA8BcAAJ0TAAAVEgAAORcAAPASAAAKEAAAdRIAAK0SAACCEwAATxQAAH8QAACgFQAAIxQAAIkSAACLFAAATRUAANQRAADPFAAAEBgAAMkWAADcFgAAwREAAOAXAAC7FAAAdBQAAHwVAADlFAAACBcAAB8QAABlFQAAoxQAACgVAAACFQAAmRUAACwQAACLGQAATw8AANQOAABqEAAAzhAAAAIXAACJDgAAbhMAABwTAABmFAAAVhcAAMETAADNEwAAbBMAAGgXAABmFwAAXxcAACITAADODwAAaQ4AANgOAABjFgAAyxMAAKoOAAAoFwAAJhcAAMUTAABdFgAA6BEAAGcTAABlEwAA8hYAAHMTAAAdFwAA+RYAAPMRAADPDgAAzhUAAAwSAACzEQAApREAAGEQAAAyFwAAuxMAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIDAgICAgIAAAICAAICAAICAgICAgICAgIABAAAAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAACAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbG9zZWVlcC1hbGl2ZQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAQEBAQEAAAEBAAEBAAEBAQEBAQEBAQEAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AAAAAAAAAAAAAAAAAAAByYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AAAAAAAAAAAAAAAABAgABAwAAAAAAAAAAAAAAAAAAAAAAAAQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAQIAAQMAAAAAAAAAAAAAAAAAAAAAAAAEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAQAAAgAAAAAAAAAAAAAAAAAAAAAAAAMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAIAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOT1VOQ0VFQ0tPVVRORUNURVRFQ1JJQkVMVVNIRVRFQURTRUFSQ0hSR0VDVElWSVRZTEVOREFSVkVPVElGWVBUSU9OU0NIU0VBWVNUQVRDSEdFT1JESVJFQ1RPUlRSQ0hQQVJBTUVURVJVUkNFQlNDUklCRUFSRE9XTkFDRUlORE5LQ0tVQlNDUklCRUhUVFAvQURUUC8=";
+ }
+});
+
+// node_modules/undici/lib/llhttp/llhttp_simd-wasm.js
+var require_llhttp_simd_wasm = __commonJS({
+ "node_modules/undici/lib/llhttp/llhttp_simd-wasm.js"(exports2, module2) {
+ module2.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==";
+ }
+});
+
+// node_modules/undici/lib/client.js
+var require_client = __commonJS({
+ "node_modules/undici/lib/client.js"(exports2, module2) {
+ "use strict";
+ var assert = require("assert");
+ var net = require("net");
+ var http = require("http");
+ var { pipeline } = require("stream");
+ var util = require_util();
+ var timers = require_timers();
+ var Request = require_request();
+ var DispatcherBase = require_dispatcher_base();
+ var {
+ RequestContentLengthMismatchError,
+ ResponseContentLengthMismatchError,
+ InvalidArgumentError,
+ RequestAbortedError,
+ HeadersTimeoutError,
+ HeadersOverflowError,
+ SocketError,
+ InformationalError,
+ BodyTimeoutError,
+ HTTPParserError,
+ ResponseExceededMaxSizeError,
+ ClientDestroyedError
+ } = require_errors();
+ var buildConnector = require_connect();
+ var {
+ 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,
+ // HTTP2
+ kHost,
+ kHTTP2Session,
+ kHTTP2SessionState,
+ kHTTP2BuildRequest,
+ kHTTP2CopyHeaders,
+ kHTTP1BuildRequest
+ } = require_symbols();
+ var http2;
+ try {
+ http2 = require("http2");
+ } catch {
+ http2 = { constants: {} };
+ }
+ var {
+ constants: {
+ HTTP2_HEADER_AUTHORITY,
+ HTTP2_HEADER_METHOD,
+ HTTP2_HEADER_PATH,
+ HTTP2_HEADER_SCHEME,
+ HTTP2_HEADER_CONTENT_LENGTH,
+ HTTP2_HEADER_EXPECT,
+ HTTP2_HEADER_STATUS
+ }
+ } = http2;
+ var h2ExperimentalWarned = false;
+ var FastBuffer = Buffer[Symbol.species];
+ var kClosedResolve = Symbol("kClosedResolve");
+ var 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 };
+ }
+ 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: connect2,
+ maxRequestsPerClient,
+ localAddress,
+ maxResponseSize,
+ autoSelectFamily,
+ autoSelectFamilyAttemptTimeout,
+ // h2
+ 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 (connect2 != null && typeof connect2 !== "function" && typeof connect2 !== "object") {
+ throw new InvalidArgumentError("connect must be a function or an object");
+ }
+ if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) {
+ throw new InvalidArgumentError("maxRedirections must be a positive number");
+ }
+ if (maxRequestsPerClient != null && (!Number.isInteger(maxRequestsPerClient) || maxRequestsPerClient < 0)) {
+ throw new InvalidArgumentError("maxRequestsPerClient must be a positive number");
+ }
+ if (localAddress != null && (typeof localAddress !== "string" || net.isIP(localAddress) === 0)) {
+ throw new InvalidArgumentError("localAddress must be valid string IP address");
+ }
+ if (maxResponseSize != null && (!Number.isInteger(maxResponseSize) || maxResponseSize < -1)) {
+ throw new InvalidArgumentError("maxResponseSize must be a positive number");
+ }
+ if (autoSelectFamilyAttemptTimeout != null && (!Number.isInteger(autoSelectFamilyAttemptTimeout) || autoSelectFamilyAttemptTimeout < -1)) {
+ throw new InvalidArgumentError("autoSelectFamilyAttemptTimeout must be a positive number");
+ }
+ if (allowH2 != null && typeof allowH2 !== "boolean") {
+ throw new InvalidArgumentError("allowH2 must be a valid boolean value");
+ }
+ if (maxConcurrentStreams != null && (typeof maxConcurrentStreams !== "number" || maxConcurrentStreams < 1)) {
+ throw new InvalidArgumentError("maxConcurrentStreams must be a possitive integer, greater than 0");
+ }
+ if (typeof connect2 !== "function") {
+ connect2 = buildConnector({
+ ...tls,
+ maxCachedSessions,
+ allowH2,
+ socketPath,
+ timeout: connectTimeout,
+ ...util.nodeHasAutoSelectFamily && autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : void 0,
+ ...connect2
+ });
+ }
+ this[kInterceptors] = interceptors && interceptors.Client && Array.isArray(interceptors.Client) ? interceptors.Client : [createRedirectInterceptor({ maxRedirections })];
+ this[kUrl] = util.parseOrigin(url);
+ this[kConnector] = connect2;
+ this[kSocket] = null;
+ this[kPipelining] = pipelining != null ? pipelining : 1;
+ this[kMaxHeadersSize] = maxHeaderSize || http.maxHeaderSize;
+ this[kKeepAliveDefaultTimeout] = keepAliveTimeout == null ? 4e3 : keepAliveTimeout;
+ this[kKeepAliveMaxTimeout] = keepAliveMaxTimeout == null ? 6e5 : keepAliveMaxTimeout;
+ this[kKeepAliveTimeoutThreshold] = keepAliveTimeoutThreshold == null ? 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
+`;
+ 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 : {
+ // streams: null, // Fixed queue of streams - For future support of `push`
+ openStreams: 0,
+ // Keep track of them to decide wether or not unref the session
+ maxConcurrentStreams: maxConcurrentStreams != null ? maxConcurrentStreams : 100
+ // Max peerConcurrentStreams for a Node h2 server
+ };
+ 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(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(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(client[kRunning] === 0);
+ client.emit(
+ "disconnect",
+ client[kUrl],
+ [client],
+ err
+ );
+ resume(client);
+ }
+ var constants = require_constants3();
+ var createRedirectInterceptor = require_redirectInterceptor();
+ var 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) {
+ mod = await WebAssembly.compile(Buffer.from(llhttpWasmData || require_llhttp_wasm(), "base64"));
+ }
+ return await WebAssembly.instantiate(mod, {
+ env: {
+ /* eslint-disable camelcase */
+ wasm_on_url: (p, at, len) => {
+ return 0;
+ },
+ wasm_on_status: (p, at, len) => {
+ assert.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.strictEqual(currentParser.ptr, p);
+ return currentParser.onMessageBegin() || 0;
+ },
+ wasm_on_header_field: (p, at, len) => {
+ assert.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.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.strictEqual(currentParser.ptr, p);
+ return currentParser.onHeadersComplete(statusCode, Boolean(upgrade), Boolean(shouldKeepAlive)) || 0;
+ },
+ wasm_on_body: (p, at, len) => {
+ assert.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.strictEqual(currentParser.ptr, p);
+ return currentParser.onMessageComplete() || 0;
+ }
+ /* eslint-enable camelcase */
+ }
+ });
+ }
+ var llhttpInstance = null;
+ var llhttpPromise = lazyllhttp();
+ llhttpPromise.catch();
+ var currentParser = null;
+ var currentBufferRef = null;
+ var currentBufferSize = 0;
+ var currentBufferPtr = null;
+ var TIMEOUT_HEADERS = 1;
+ var TIMEOUT_BODY = 2;
+ var TIMEOUT_IDLE = 3;
+ var Parser = class {
+ constructor(client, socket, { exports: exports3 }) {
+ assert(Number.isFinite(client[kMaxHeadersSize]) && client[kMaxHeadersSize] > 0);
+ this.llhttp = exports3;
+ 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);
+ if (this.timeout.unref) {
+ this.timeout.unref();
+ }
+ } else {
+ this.timeout = null;
+ }
+ this.timeoutValue = value;
+ } else if (this.timeout) {
+ if (this.timeout.refresh) {
+ this.timeout.refresh();
+ }
+ }
+ }
+ resume() {
+ if (this.socket.destroyed || !this.paused) {
+ return;
+ }
+ assert(this.ptr != null);
+ assert(currentParser == null);
+ this.llhttp.llhttp_resume(this.ptr);
+ assert(this.timeoutType === TIMEOUT_BODY);
+ if (this.timeout) {
+ if (this.timeout.refresh) {
+ this.timeout.refresh();
+ }
+ }
+ this.paused = false;
+ this.execute(this.socket.read() || EMPTY_BUF);
+ this.readMore();
+ }
+ readMore() {
+ while (!this.paused && this.ptr) {
+ const chunk = this.socket.read();
+ if (chunk === null) {
+ break;
+ }
+ this.execute(chunk);
+ }
+ }
+ execute(data) {
+ assert(this.ptr != null);
+ assert(currentParser == null);
+ assert(!this.paused);
+ const { socket, llhttp } = this;
+ if (data.length > currentBufferSize) {
+ if (currentBufferPtr) {
+ llhttp.free(currentBufferPtr);
+ }
+ currentBufferSize = Math.ceil(data.length / 4096) * 4096;
+ currentBufferPtr = llhttp.malloc(currentBufferSize);
+ }
+ new Uint8Array(llhttp.memory.buffer, currentBufferPtr, currentBufferSize).set(data);
+ try {
+ let ret;
+ try {
+ currentBufferRef = data;
+ currentParser = this;
+ ret = llhttp.llhttp_execute(this.ptr, currentBufferPtr, data.length);
+ } catch (err) {
+ throw err;
+ } finally {
+ currentParser = null;
+ currentBufferRef = null;
+ }
+ const offset = llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr;
+ if (ret === 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 = "";
+ 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(this.ptr != null);
+ assert(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;
+ if (socket.destroyed) {
+ return -1;
+ }
+ const request = client[kQueue][client[kRunningIdx]];
+ if (!request) {
+ 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(upgrade);
+ const request = client[kQueue][client[kRunningIdx]];
+ assert(request);
+ assert(!socket.destroyed);
+ assert(socket === client[kSocket]);
+ assert(!this.paused);
+ assert(request.upgrade || request.method === "CONNECT");
+ this.statusCode = null;
+ this.statusText = "";
+ this.shouldKeepAlive = null;
+ assert(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;
+ if (socket.destroyed) {
+ return -1;
+ }
+ const request = client[kQueue][client[kRunningIdx]];
+ if (!request) {
+ return -1;
+ }
+ assert(!this.upgrade);
+ assert(this.statusCode < 200);
+ if (statusCode === 100) {
+ util.destroy(socket, new SocketError("bad response", util.getSocketInfo(socket)));
+ return -1;
+ }
+ if (upgrade && !request.upgrade) {
+ util.destroy(socket, new SocketError("bad upgrade", util.getSocketInfo(socket)));
+ return -1;
+ }
+ assert.strictEqual(this.timeoutType, TIMEOUT_HEADERS);
+ this.statusCode = statusCode;
+ this.shouldKeepAlive = shouldKeepAlive || // Override llhttp value which does not allow keepAlive for HEAD.
+ request.method === "HEAD" && !socket[kReset] && this.connection.toLowerCase() === "keep-alive";
+ if (this.statusCode >= 200) {
+ const bodyTimeout = request.bodyTimeout != null ? request.bodyTimeout : client[kBodyTimeout];
+ this.setTimeout(bodyTimeout, TIMEOUT_BODY);
+ } else if (this.timeout) {
+ if (this.timeout.refresh) {
+ this.timeout.refresh();
+ }
+ }
+ if (request.method === "CONNECT") {
+ assert(client[kRunning] === 1);
+ this.upgrade = true;
+ return 2;
+ }
+ if (upgrade) {
+ assert(client[kRunning] === 1);
+ this.upgrade = true;
+ return 2;
+ }
+ assert(this.headers.length % 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(request);
+ assert.strictEqual(this.timeoutType, TIMEOUT_BODY);
+ if (this.timeout) {
+ if (this.timeout.refresh) {
+ this.timeout.refresh();
+ }
+ }
+ assert(statusCode >= 200);
+ if (maxResponseSize > -1 && this.bytesRead + buf.length > maxResponseSize) {
+ util.destroy(socket, new ResponseExceededMaxSizeError());
+ return -1;
+ }
+ this.bytesRead += buf.length;
+ if (request.onData(buf) === false) {
+ return 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(request);
+ assert(statusCode >= 100);
+ this.statusCode = null;
+ this.statusText = "";
+ this.bytesRead = 0;
+ this.contentLength = "";
+ this.keepAlive = "";
+ this.connection = "";
+ assert(this.headers.length % 2 === 0);
+ this.headers = [];
+ this.headersSize = 0;
+ if (statusCode < 200) {
+ return;
+ }
+ if (request.method !== "HEAD" && contentLength && bytesRead !== parseInt(contentLength, 10)) {
+ util.destroy(socket, new ResponseContentLengthMismatchError());
+ return -1;
+ }
+ request.onComplete(headers);
+ client[kQueue][client[kRunningIdx]++] = null;
+ if (socket[kWriting]) {
+ assert.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;
+ if (timeoutType === TIMEOUT_HEADERS) {
+ if (!socket[kWriting] || socket.writableNeedDrain || client[kRunning] > 1) {
+ assert(!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(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(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(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(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(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(client[kRunning] === 0);
+ client.emit("disconnect", client[kUrl], [client], err);
+ resume(client);
+ }
+ async function connect(client) {
+ assert(!client[kConnecting]);
+ assert(!client[kSocket]);
+ let { host, hostname, protocol, port } = client[kUrl];
+ if (hostname[0] === "[") {
+ const idx = hostname.indexOf("]");
+ assert(idx !== -1);
+ const ip = hostname.substring(1, idx);
+ assert(net.isIP(ip));
+ hostname = ip;
+ }
+ client[kConnecting] = true;
+ if (channels.beforeConnect.hasSubscribers) {
+ channels.beforeConnect.publish({
+ connectParams: {
+ host,
+ hostname,
+ protocol,
+ port,
+ servername: client[kServerName],
+ localAddress: client[kLocalAddress]
+ },
+ connector: client[kConnector]
+ });
+ }
+ try {
+ const socket = await new Promise((resolve, reject) => {
+ client[kConnector]({
+ host,
+ hostname,
+ protocol,
+ port,
+ servername: client[kServerName],
+ localAddress: client[kLocalAddress]
+ }, (err, socket2) => {
+ if (err) {
+ reject(err);
+ } else {
+ resolve(socket2);
+ }
+ });
+ });
+ if (client.destroyed) {
+ util.destroy(socket.on("error", () => {
+ }), new ClientDestroyedError());
+ return;
+ }
+ client[kConnecting] = false;
+ assert(socket);
+ const isH2 = socket.alpnProtocol === "h2";
+ if (isH2) {
+ 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(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(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 request2 = client[kQueue][client[kRunningIdx]];
+ const headersTimeout = request2.headersTimeout != null ? request2.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: path5, 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} ${path5} HTTP/1.1\r
+`;
+ if (typeof host === "string") {
+ header += `host: ${host}\r
+`;
+ } else {
+ header += client[kHostHeader];
+ }
+ if (upgrade) {
+ header += `connection: upgrade\r
+upgrade: ${upgrade}\r
+`;
+ } else if (client[kPipelining] && !socket[kReset]) {
+ header += "connection: keep-alive\r\n";
+ } else {
+ header += "connection: close\r\n";
+ }
+ if (headers) {
+ header += headers;
+ }
+ if (channels.sendHeaders.hasSubscribers) {
+ channels.sendHeaders.publish({ request, headers: header, socket });
+ }
+ if (!body || bodyLength === 0) {
+ if (contentLength === 0) {
+ socket.write(`${header}content-length: 0\r
+\r
+`, "latin1");
+ } else {
+ assert(contentLength === null, "no body must not have content length");
+ socket.write(`${header}\r
+`, "latin1");
+ }
+ request.onRequestSent();
+ } else if (util.isBuffer(body)) {
+ assert(contentLength === body.byteLength, "buffer body must have content length");
+ socket.cork();
+ socket.write(`${header}content-length: ${contentLength}\r
+\r
+`, "latin1");
+ socket.write(body);
+ socket.uncork();
+ request.onBodySent(body);
+ 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(false);
+ }
+ return true;
+ }
+ function writeH2(client, session, request) {
+ const { body, method, path: path5, 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, 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;
+ }
+ 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] = path5;
+ 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(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", (headers2) => {
+ const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers2;
+ 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() {
+ if (!body) {
+ request.onRequestSent();
+ } else if (util.isBuffer(body)) {
+ assert(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(false);
+ }
+ }
+ }
+ function writeStream({ h2stream, body, client, request, socket, contentLength, header, expectsPayload }) {
+ assert(contentLength !== 0 || client[kRunning] === 0, "stream body cannot be pipelined");
+ if (client[kHTTPConnVersion] === "h2") {
+ let onPipeData = function(chunk) {
+ request.onBodySent(chunk);
+ };
+ const pipe = pipeline(
+ 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);
+ });
+ 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(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(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
+\r
+`, "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(contentLength !== 0 || client[kRunning] === 0, "iterator body cannot be pipelined");
+ let callback = null;
+ function onDrain() {
+ if (callback) {
+ const cb = callback;
+ callback = null;
+ cb();
+ }
+ }
+ const waitForDrain = () => new Promise((resolve, reject) => {
+ assert(callback === null);
+ if (socket[kError]) {
+ reject(socket[kError]);
+ } else {
+ callback = resolve;
+ }
+ });
+ 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
+`, "latin1");
+ } else {
+ socket.write(`${header}content-length: ${contentLength}\r
+\r
+`, "latin1");
+ }
+ }
+ if (contentLength === null) {
+ socket.write(`\r
+${len.toString(16)}\r
+`, "latin1");
+ }
+ this.bytesWritten += len;
+ const ret = socket.write(chunk);
+ socket.uncork();
+ request.onBodySent(chunk);
+ if (!ret) {
+ if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) {
+ if (socket[kParser].timeout.refresh) {
+ socket[kParser].timeout.refresh();
+ }
+ }
+ }
+ return ret;
+ }
+ end() {
+ const { socket, contentLength, client, bytesWritten, expectsPayload, header, request } = this;
+ request.onRequestSent();
+ socket[kWriting] = false;
+ if (socket[kError]) {
+ throw socket[kError];
+ }
+ if (socket.destroyed) {
+ return;
+ }
+ if (bytesWritten === 0) {
+ if (expectsPayload) {
+ socket.write(`${header}content-length: 0\r
+\r
+`, "latin1");
+ } else {
+ socket.write(`${header}\r
+`, "latin1");
+ }
+ } else if (contentLength === null) {
+ socket.write("\r\n0\r\n\r\n", "latin1");
+ }
+ if (contentLength !== null && bytesWritten !== contentLength) {
+ if (client[kStrictContentLength]) {
+ throw new RequestContentLengthMismatchError();
+ } else {
+ process.emitWarning(new RequestContentLengthMismatchError());
+ }
+ }
+ if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) {
+ if (socket[kParser].timeout.refresh) {
+ socket[kParser].timeout.refresh();
+ }
+ }
+ resume(client);
+ }
+ destroy(err) {
+ const { socket, client } = this;
+ socket[kWriting] = false;
+ if (err) {
+ assert(client[kRunning] <= 1, "pipeline should only contain this request");
+ util.destroy(socket, err);
+ }
+ }
+ };
+ function errorRequest(client, request, err) {
+ try {
+ request.onError(err);
+ assert(request.aborted);
+ } catch (err2) {
+ client.emit("error", err2);
+ }
+ }
+ module2.exports = Client;
+ }
+});
+
+// node_modules/undici/lib/node/fixed-queue.js
+var require_fixed_queue = __commonJS({
+ "node_modules/undici/lib/node/fixed-queue.js"(exports2, module2) {
+ "use strict";
+ var kSize = 2048;
+ var kMask = kSize - 1;
+ var FixedCircularBuffer = class {
+ constructor() {
+ this.bottom = 0;
+ this.top = 0;
+ this.list = new Array(kSize);
+ this.next = null;
+ }
+ isEmpty() {
+ return this.top === this.bottom;
+ }
+ isFull() {
+ return (this.top + 1 & kMask) === this.bottom;
+ }
+ push(data) {
+ this.list[this.top] = data;
+ this.top = this.top + 1 & kMask;
+ }
+ shift() {
+ const nextItem = this.list[this.bottom];
+ if (nextItem === void 0)
+ return null;
+ this.list[this.bottom] = void 0;
+ this.bottom = this.bottom + 1 & kMask;
+ return nextItem;
+ }
+ };
+ module2.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;
+ }
+ };
+ }
+});
+
+// node_modules/undici/lib/pool-stats.js
+var require_pool_stats = __commonJS({
+ "node_modules/undici/lib/pool-stats.js"(exports2, module2) {
+ var { kFree, kConnected, kPending, kQueued, kRunning, kSize } = require_symbols();
+ var kPool = Symbol("pool");
+ var PoolStats = class {
+ constructor(pool) {
+ this[kPool] = pool;
+ }
+ get connected() {
+ return this[kPool][kConnected];
+ }
+ get free() {
+ return this[kPool][kFree];
+ }
+ get pending() {
+ return this[kPool][kPending];
+ }
+ get queued() {
+ return this[kPool][kQueued];
+ }
+ get running() {
+ return this[kPool][kRunning];
+ }
+ get size() {
+ return this[kPool][kSize];
+ }
+ };
+ module2.exports = PoolStats;
+ }
+});
+
+// node_modules/undici/lib/pool-base.js
+var require_pool_base = __commonJS({
+ "node_modules/undici/lib/pool-base.js"(exports2, module2) {
+ "use strict";
+ var DispatcherBase = require_dispatcher_base();
+ var FixedQueue = require_fixed_queue();
+ var { kConnected, kSize, kRunning, kPending, kQueued, kBusy, kFree, kUrl, kClose, kDestroy, kDispatch } = require_symbols();
+ var PoolStats = require_pool_stats();
+ var kClients = Symbol("clients");
+ var kNeedDrain = Symbol("needDrain");
+ var kQueue = Symbol("queue");
+ var kClosedResolve = Symbol("closed resolve");
+ var kOnDrain = Symbol("onDrain");
+ var kOnConnect = Symbol("onConnect");
+ var kOnDisconnect = Symbol("onDisconnect");
+ var kOnConnectionError = Symbol("onConnectionError");
+ var kGetDispatcher = Symbol("get dispatcher");
+ var kAddClient = Symbol("add client");
+ var kRemoveClient = Symbol("remove client");
+ var kStats = Symbol("stats");
+ var PoolBase = class extends DispatcherBase {
+ constructor() {
+ 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);
+ }
+ };
+ module2.exports = {
+ PoolBase,
+ kClients,
+ kNeedDrain,
+ kAddClient,
+ kRemoveClient,
+ kGetDispatcher
+ };
+ }
+});
+
+// node_modules/undici/lib/pool.js
+var require_pool = __commonJS({
+ "node_modules/undici/lib/pool.js"(exports2, module2) {
+ "use strict";
+ var {
+ PoolBase,
+ kClients,
+ kNeedDrain,
+ kAddClient,
+ kGetDispatcher
+ } = require_pool_base();
+ var Client = require_client();
+ var {
+ InvalidArgumentError
+ } = require_errors();
+ var util = require_util();
+ var { kUrl, kInterceptors } = require_symbols();
+ var buildConnector = require_connect();
+ var kOptions = Symbol("options");
+ var kConnections = Symbol("connections");
+ var kFactory = Symbol("factory");
+ function defaultFactory(origin, opts) {
+ return new Client(origin, opts);
+ }
+ var Pool = class extends PoolBase {
+ constructor(origin, {
+ connections,
+ factory = defaultFactory,
+ connect,
+ connectTimeout,
+ tls,
+ maxCachedSessions,
+ socketPath,
+ autoSelectFamily,
+ autoSelectFamilyAttemptTimeout,
+ allowH2,
+ ...options
+ } = {}) {
+ 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;
+ }
+ [kGetDispatcher]() {
+ let dispatcher = this[kClients].find((dispatcher2) => !dispatcher2[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;
+ }
+ };
+ module2.exports = Pool;
+ }
+});
+
+// node_modules/undici/lib/balanced-pool.js
+var require_balanced_pool = __commonJS({
+ "node_modules/undici/lib/balanced-pool.js"(exports2, module2) {
+ "use strict";
+ var {
+ BalancedPoolMissingUpstreamError,
+ InvalidArgumentError
+ } = require_errors();
+ var {
+ PoolBase,
+ kClients,
+ kNeedDrain,
+ kAddClient,
+ kRemoveClient,
+ kGetDispatcher
+ } = require_pool_base();
+ var Pool = require_pool();
+ var { kUrl, kInterceptors } = require_symbols();
+ var { parseOrigin } = require_util();
+ var kFactory = Symbol("factory");
+ var kOptions = Symbol("options");
+ var kGreatestCommonDivisor = Symbol("kGreatestCommonDivisor");
+ var kCurrentWeight = Symbol("kCurrentWeight");
+ var kIndex = Symbol("kIndex");
+ var kWeight = Symbol("kWeight");
+ var kMaxWeightPerServer = Symbol("kMaxWeightPerServer");
+ var kErrorPenalty = Symbol("kErrorPenalty");
+ function getGreatestCommonDivisor(a, b) {
+ if (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((pool2) => pool2[kUrl].origin === upstreamOrigin && pool2.closed !== true && pool2.destroyed !== true)) {
+ return this;
+ }
+ const pool = this[kFactory](upstreamOrigin, Object.assign({}, this[kOptions]));
+ this[kAddClient](pool);
+ pool.on("connect", () => {
+ pool[kWeight] = Math.min(this[kMaxWeightPerServer], pool[kWeight] + this[kErrorPenalty]);
+ });
+ pool.on("connectionError", () => {
+ pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty]);
+ this._updateBalancedPoolStats();
+ });
+ pool.on("disconnect", (...args) => {
+ const err = args[2];
+ if (err && err.code === "UND_ERR_SOCKET") {
+ pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty]);
+ this._updateBalancedPoolStats();
+ }
+ });
+ for (const client of this[kClients]) {
+ client[kWeight] = this[kMaxWeightPerServer];
+ }
+ this._updateBalancedPoolStats();
+ return this;
+ }
+ _updateBalancedPoolStats() {
+ this[kGreatestCommonDivisor] = this[kClients].map((p) => p[kWeight]).reduce(getGreatestCommonDivisor, 0);
+ }
+ removeUpstream(upstream) {
+ const upstreamOrigin = parseOrigin(upstream).origin;
+ const pool = this[kClients].find((pool2) => pool2[kUrl].origin === upstreamOrigin && pool2.closed !== true && pool2.destroyed !== true);
+ if (pool) {
+ this[kRemoveClient](pool);
+ }
+ return this;
+ }
+ get upstreams() {
+ return this[kClients].filter((dispatcher) => dispatcher.closed !== true && dispatcher.destroyed !== true).map((p) => p[kUrl].origin);
+ }
+ [kGetDispatcher]() {
+ if (this[kClients].length === 0) {
+ throw new BalancedPoolMissingUpstreamError();
+ }
+ const dispatcher = this[kClients].find((dispatcher2) => !dispatcher2[kNeedDrain] && dispatcher2.closed !== true && dispatcher2.destroyed !== true);
+ if (!dispatcher) {
+ return;
+ }
+ const allClientsBusy = this[kClients].map((pool) => pool[kNeedDrain]).reduce((a, b) => a && b, true);
+ if (allClientsBusy) {
+ return;
+ }
+ let counter = 0;
+ let maxWeightIndex = this[kClients].findIndex((pool) => !pool[kNeedDrain]);
+ while (counter++ < this[kClients].length) {
+ this[kIndex] = (this[kIndex] + 1) % this[kClients].length;
+ const pool = this[kClients][this[kIndex]];
+ if (pool[kWeight] > this[kClients][maxWeightIndex][kWeight] && !pool[kNeedDrain]) {
+ maxWeightIndex = this[kIndex];
+ }
+ if (this[kIndex] === 0) {
+ this[kCurrentWeight] = this[kCurrentWeight] - this[kGreatestCommonDivisor];
+ if (this[kCurrentWeight] <= 0) {
+ this[kCurrentWeight] = this[kMaxWeightPerServer];
+ }
+ }
+ if (pool[kWeight] >= this[kCurrentWeight] && !pool[kNeedDrain]) {
+ return pool;
+ }
+ }
+ this[kCurrentWeight] = this[kClients][maxWeightIndex][kWeight];
+ this[kIndex] = maxWeightIndex;
+ return this[kClients][maxWeightIndex];
+ }
+ };
+ module2.exports = BalancedPool;
+ }
+});
+
+// node_modules/undici/lib/compat/dispatcher-weakref.js
+var require_dispatcher_weakref = __commonJS({
+ "node_modules/undici/lib/compat/dispatcher-weakref.js"(exports2, module2) {
+ "use strict";
+ var { kConnected, kSize } = require_symbols();
+ var CompatWeakRef = class {
+ constructor(value) {
+ this.value = value;
+ }
+ deref() {
+ return this.value[kConnected] === 0 && this.value[kSize] === 0 ? void 0 : this.value;
+ }
+ };
+ var CompatFinalizer = class {
+ constructor(finalizer) {
+ this.finalizer = finalizer;
+ }
+ register(dispatcher, key) {
+ if (dispatcher.on) {
+ dispatcher.on("disconnect", () => {
+ if (dispatcher[kConnected] === 0 && dispatcher[kSize] === 0) {
+ this.finalizer(key);
+ }
+ });
+ }
+ }
+ };
+ module2.exports = function() {
+ if (process.env.NODE_V8_COVERAGE) {
+ return {
+ WeakRef: CompatWeakRef,
+ FinalizationRegistry: CompatFinalizer
+ };
+ }
+ return {
+ WeakRef: global.WeakRef || CompatWeakRef,
+ FinalizationRegistry: global.FinalizationRegistry || CompatFinalizer
+ };
+ };
+ }
+});
+
+// node_modules/undici/lib/agent.js
+var require_agent = __commonJS({
+ "node_modules/undici/lib/agent.js"(exports2, module2) {
+ "use strict";
+ var { InvalidArgumentError } = require_errors();
+ var { kClients, kRunning, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols();
+ var DispatcherBase = require_dispatcher_base();
+ var Pool = require_pool();
+ var Client = require_client();
+ var util = require_util();
+ var createRedirectInterceptor = require_redirectInterceptor();
+ var { WeakRef: WeakRef2, FinalizationRegistry } = require_dispatcher_weakref()();
+ var kOnConnect = Symbol("onConnect");
+ var kOnDisconnect = Symbol("onDisconnect");
+ var kOnConnectionError = Symbol("onConnectionError");
+ var kMaxRedirections = Symbol("maxRedirections");
+ var kOnDrain = Symbol("onDrain");
+ var kFactory = Symbol("factory");
+ var kFinalizer = Symbol("finalizer");
+ var kOptions = Symbol("options");
+ function defaultFactory(origin, opts) {
+ return opts && opts.connections === 1 ? new Client(origin, opts) : new Pool(origin, opts);
+ }
+ var Agent = class extends DispatcherBase {
+ constructor({ factory = defaultFactory, maxRedirections = 0, connect, ...options } = {}) {
+ 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();
+ 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 WeakRef2(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();
+ 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();
+ if (client) {
+ destroyPromises.push(client.destroy(err));
+ }
+ }
+ await Promise.all(destroyPromises);
+ }
+ };
+ module2.exports = Agent;
+ }
+});
+
+// node_modules/undici/lib/api/readable.js
+var require_readable = __commonJS({
+ "node_modules/undici/lib/api/readable.js"(exports2, module2) {
+ "use strict";
+ var assert = require("assert");
+ var { Readable } = require("stream");
+ var { RequestAbortedError, NotSupportedError, InvalidArgumentError } = require_errors();
+ var util = require_util();
+ var { ReadableStreamFrom, toUSVString } = require_util();
+ var Blob2;
+ var kConsume = Symbol("kConsume");
+ var kReading = Symbol("kReading");
+ var kBody = Symbol("kBody");
+ var kAbort = Symbol("abort");
+ var kContentType = Symbol("kContentType");
+ var noop = () => {
+ };
+ module2.exports = class BodyReadable extends Readable {
+ constructor({
+ resume,
+ abort,
+ contentType = "",
+ highWaterMark = 64 * 1024
+ // Same as nodejs fs streams.
+ }) {
+ super({
+ autoDestroy: true,
+ read: resume,
+ highWaterMark
+ });
+ this._readableState.dataEmitted = false;
+ this[kAbort] = abort;
+ this[kConsume] = null;
+ this[kBody] = null;
+ this[kContentType] = contentType;
+ this[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);
+ }
+ // https://fetch.spec.whatwg.org/#dom-body-text
+ async text() {
+ return consume(this, "text");
+ }
+ // https://fetch.spec.whatwg.org/#dom-body-json
+ async json() {
+ return consume(this, "json");
+ }
+ // https://fetch.spec.whatwg.org/#dom-body-blob
+ async blob() {
+ return consume(this, "blob");
+ }
+ // https://fetch.spec.whatwg.org/#dom-body-arraybuffer
+ async arrayBuffer() {
+ return consume(this, "arrayBuffer");
+ }
+ // https://fetch.spec.whatwg.org/#dom-body-formdata
+ async formData() {
+ throw new NotSupportedError();
+ }
+ // https://fetch.spec.whatwg.org/#dom-body-bodyused
+ get bodyUsed() {
+ return util.isDisturbed(this);
+ }
+ // https://fetch.spec.whatwg.org/#dom-body-body
+ get body() {
+ if (!this[kBody]) {
+ this[kBody] = ReadableStreamFrom(this);
+ if (this[kConsume]) {
+ this[kBody].getReader();
+ assert(this[kBody].locked);
+ }
+ }
+ return this[kBody];
+ }
+ 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(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(self2) {
+ return self2[kBody] && self2[kBody].locked === true || self2[kConsume];
+ }
+ function isUnusable(self2) {
+ return util.isDisturbed(self2) || isLocked(self2);
+ }
+ async function consume(stream, type) {
+ if (isUnusable(stream)) {
+ throw new TypeError("unusable");
+ }
+ assert(!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(consume2) {
+ if (consume2.body === null) {
+ return;
+ }
+ const { _readableState: state } = consume2.stream;
+ for (const chunk of state.buffer) {
+ consumePush(consume2, chunk);
+ }
+ if (state.endEmitted) {
+ consumeEnd(this[kConsume]);
+ } else {
+ consume2.stream.on("end", function() {
+ consumeEnd(this[kConsume]);
+ });
+ }
+ consume2.stream.resume();
+ while (consume2.stream.read() != null) {
+ }
+ }
+ function consumeEnd(consume2) {
+ const { type, body, resolve, stream, length } = consume2;
+ 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 (!Blob2) {
+ Blob2 = require("buffer").Blob;
+ }
+ resolve(new Blob2(body, { type: stream[kContentType] }));
+ }
+ consumeFinish(consume2);
+ } catch (err) {
+ stream.destroy(err);
+ }
+ }
+ function consumePush(consume2, chunk) {
+ consume2.length += chunk.length;
+ consume2.body.push(chunk);
+ }
+ function consumeFinish(consume2, err) {
+ if (consume2.body === null) {
+ return;
+ }
+ if (err) {
+ consume2.reject(err);
+ } else {
+ consume2.resolve();
+ }
+ consume2.type = null;
+ consume2.stream = null;
+ consume2.resolve = null;
+ consume2.reject = null;
+ consume2.length = 0;
+ consume2.body = null;
+ }
+ }
+});
+
+// node_modules/undici/lib/api/util.js
+var require_util3 = __commonJS({
+ "node_modules/undici/lib/api/util.js"(exports2, module2) {
+ var assert = require("assert");
+ var {
+ ResponseStatusCodeError
+ } = require_errors();
+ var { toUSVString } = require_util();
+ async function getResolveErrorBodyCallback({ callback, body, contentType, statusCode, statusMessage, headers }) {
+ assert(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));
+ }
+ module2.exports = { getResolveErrorBodyCallback };
+ }
+});
+
+// node_modules/undici/lib/api/abort-signal.js
+var require_abort_signal = __commonJS({
+ "node_modules/undici/lib/api/abort-signal.js"(exports2, module2) {
+ var { addAbortListener } = require_util();
+ var { RequestAbortedError } = require_errors();
+ var kListener = Symbol("kListener");
+ var kSignal = Symbol("kSignal");
+ function abort(self2) {
+ if (self2.abort) {
+ self2.abort();
+ } else {
+ self2.onError(new RequestAbortedError());
+ }
+ }
+ function addSignal(self2, signal) {
+ self2[kSignal] = null;
+ self2[kListener] = null;
+ if (!signal) {
+ return;
+ }
+ if (signal.aborted) {
+ abort(self2);
+ return;
+ }
+ self2[kSignal] = signal;
+ self2[kListener] = () => {
+ abort(self2);
+ };
+ addAbortListener(self2[kSignal], self2[kListener]);
+ }
+ function removeSignal(self2) {
+ if (!self2[kSignal]) {
+ return;
+ }
+ if ("removeEventListener" in self2[kSignal]) {
+ self2[kSignal].removeEventListener("abort", self2[kListener]);
+ } else {
+ self2[kSignal].removeListener("abort", self2[kListener]);
+ }
+ self2[kSignal] = null;
+ self2[kListener] = null;
+ }
+ module2.exports = {
+ addSignal,
+ removeSignal
+ };
+ }
+});
+
+// node_modules/undici/lib/api/api-request.js
+var require_api_request = __commonJS({
+ "node_modules/undici/lib/api/api-request.js"(exports2, module2) {
+ "use strict";
+ var Readable = require_readable();
+ var {
+ InvalidArgumentError,
+ RequestAbortedError
+ } = require_errors();
+ var util = require_util();
+ var { getResolveErrorBodyCallback } = require_util3();
+ var { AsyncResource } = require("async_hooks");
+ var { addSignal, removeSignal } = require_abort_signal();
+ var RequestHandler = class extends AsyncResource {
+ constructor(opts, callback) {
+ if (!opts || typeof opts !== "object") {
+ throw new InvalidArgumentError("invalid opts");
+ }
+ const { signal, method, opaque, body, onInfo, responseHeaders, throwOnError, highWaterMark } = opts;
+ try {
+ if (typeof callback !== "function") {
+ throw new InvalidArgumentError("invalid callback");
+ }
+ if (highWaterMark && (typeof highWaterMark !== "number" || highWaterMark < 0)) {
+ throw new InvalidArgumentError("invalid highWaterMark");
+ }
+ if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") {
+ throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget");
+ }
+ if (method === "CONNECT") {
+ throw new InvalidArgumentError("invalid method");
+ }
+ if (onInfo && typeof onInfo !== "function") {
+ throw new InvalidArgumentError("invalid onInfo callback");
+ }
+ super("UNDICI_REQUEST");
+ } catch (err) {
+ if (util.isStream(body)) {
+ util.destroy(body.on("error", util.nop), err);
+ }
+ throw err;
+ }
+ this.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, context5) {
+ if (!this.callback) {
+ throw new RequestAbortedError();
+ }
+ this.abort = abort;
+ this.context = context5;
+ }
+ onHeaders(statusCode, rawHeaders, resume, statusMessage) {
+ const { callback, opaque, abort, context: context5, responseHeaders, highWaterMark } = this;
+ const headers = responseHeaders === "raw" ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders);
+ if (statusCode < 200) {
+ if (this.onInfo) {
+ this.onInfo({ statusCode, headers });
+ }
+ return;
+ }
+ const parsedHeaders = responseHeaders === "raw" ? util.parseHeaders(rawHeaders) : headers;
+ const contentType = parsedHeaders["content-type"];
+ const 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: context5
+ });
+ }
+ }
+ }
+ 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 }));
+ }
+ }
+ module2.exports = request;
+ module2.exports.RequestHandler = RequestHandler;
+ }
+});
+
+// node_modules/undici/lib/api/api-stream.js
+var require_api_stream = __commonJS({
+ "node_modules/undici/lib/api/api-stream.js"(exports2, module2) {
+ "use strict";
+ var { finished, PassThrough } = require("stream");
+ var {
+ InvalidArgumentError,
+ InvalidReturnValueError,
+ RequestAbortedError
+ } = require_errors();
+ var util = require_util();
+ var { getResolveErrorBodyCallback } = require_util3();
+ var { AsyncResource } = require("async_hooks");
+ var { addSignal, removeSignal } = require_abort_signal();
+ var StreamHandler = class extends AsyncResource {
+ constructor(opts, factory, callback) {
+ if (!opts || typeof opts !== "object") {
+ throw new InvalidArgumentError("invalid opts");
+ }
+ const { signal, method, opaque, body, onInfo, responseHeaders, throwOnError } = opts;
+ try {
+ if (typeof callback !== "function") {
+ throw new InvalidArgumentError("invalid callback");
+ }
+ if (typeof factory !== "function") {
+ throw new InvalidArgumentError("invalid factory");
+ }
+ if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") {
+ throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget");
+ }
+ if (method === "CONNECT") {
+ throw new InvalidArgumentError("invalid method");
+ }
+ if (onInfo && typeof onInfo !== "function") {
+ throw new InvalidArgumentError("invalid onInfo callback");
+ }
+ super("UNDICI_STREAM");
+ } catch (err) {
+ if (util.isStream(body)) {
+ util.destroy(body.on("error", util.nop), err);
+ }
+ throw err;
+ }
+ this.responseHeaders = responseHeaders || null;
+ this.opaque = opaque || null;
+ this.factory = factory;
+ this.callback = callback;
+ this.res = null;
+ this.abort = null;
+ this.context = null;
+ this.trailers = null;
+ this.body = body;
+ this.onInfo = onInfo || null;
+ this.throwOnError = throwOnError || false;
+ if (util.isStream(body)) {
+ body.on("error", (err) => {
+ this.onError(err);
+ });
+ }
+ addSignal(this, signal);
+ }
+ onConnect(abort, context5) {
+ if (!this.callback) {
+ throw new RequestAbortedError();
+ }
+ this.abort = abort;
+ this.context = context5;
+ }
+ onHeaders(statusCode, rawHeaders, resume, statusMessage) {
+ const { factory, opaque, context: context5, callback, responseHeaders } = this;
+ const headers = responseHeaders === "raw" ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders);
+ if (statusCode < 200) {
+ if (this.onInfo) {
+ this.onInfo({ statusCode, headers });
+ }
+ return;
+ }
+ this.factory = null;
+ let res;
+ if (this.throwOnError && statusCode >= 400) {
+ const parsedHeaders = responseHeaders === "raw" ? util.parseHeaders(rawHeaders) : headers;
+ const contentType = parsedHeaders["content-type"];
+ res = new PassThrough();
+ this.callback = null;
+ this.runInAsyncScope(
+ getResolveErrorBodyCallback,
+ null,
+ { callback, body: res, contentType, statusCode, statusMessage, headers }
+ );
+ } else {
+ if (factory === null) {
+ return;
+ }
+ res = this.runInAsyncScope(factory, null, {
+ statusCode,
+ headers,
+ opaque,
+ context: context5
+ });
+ if (!res || typeof res.write !== "function" || typeof res.end !== "function" || typeof res.on !== "function") {
+ throw new InvalidReturnValueError("expected Writable");
+ }
+ finished(res, { readable: false }, (err) => {
+ const { callback: callback2, res: res2, opaque: opaque2, trailers, abort } = this;
+ this.res = null;
+ if (err || !res2.readable) {
+ util.destroy(res2, err);
+ }
+ this.callback = null;
+ this.runInAsyncScope(callback2, null, err || null, { opaque: opaque2, trailers });
+ if (err) {
+ abort();
+ }
+ });
+ }
+ res.on("drain", resume);
+ this.res = res;
+ const needDrain = res.writableNeedDrain !== void 0 ? res.writableNeedDrain : res._writableState && res._writableState.needDrain;
+ return needDrain !== true;
+ }
+ onData(chunk) {
+ const { res } = this;
+ return res ? res.write(chunk) : true;
+ }
+ onComplete(trailers) {
+ const { res } = this;
+ removeSignal(this);
+ if (!res) {
+ return;
+ }
+ this.trailers = util.parseHeaders(trailers);
+ res.end();
+ }
+ onError(err) {
+ const { res, callback, opaque, body } = this;
+ removeSignal(this);
+ this.factory = null;
+ if (res) {
+ this.res = null;
+ util.destroy(res, err);
+ } else if (callback) {
+ this.callback = null;
+ queueMicrotask(() => {
+ this.runInAsyncScope(callback, null, err, { opaque });
+ });
+ }
+ if (body) {
+ this.body = null;
+ util.destroy(body, err);
+ }
+ }
+ };
+ function stream(opts, factory, callback) {
+ if (callback === void 0) {
+ return new Promise((resolve, reject) => {
+ stream.call(this, opts, factory, (err, data) => {
+ return err ? reject(err) : resolve(data);
+ });
+ });
+ }
+ try {
+ this.dispatch(opts, new StreamHandler(opts, factory, callback));
+ } catch (err) {
+ if (typeof callback !== "function") {
+ throw err;
+ }
+ const opaque = opts && opts.opaque;
+ queueMicrotask(() => callback(err, { opaque }));
+ }
+ }
+ module2.exports = stream;
+ }
+});
+
+// node_modules/undici/lib/api/api-pipeline.js
+var require_api_pipeline = __commonJS({
+ "node_modules/undici/lib/api/api-pipeline.js"(exports2, module2) {
+ "use strict";
+ var {
+ Readable,
+ Duplex,
+ PassThrough
+ } = require("stream");
+ var {
+ InvalidArgumentError,
+ InvalidReturnValueError,
+ RequestAbortedError
+ } = require_errors();
+ var util = require_util();
+ var { AsyncResource } = require("async_hooks");
+ var { addSignal, removeSignal } = require_abort_signal();
+ var assert = require("assert");
+ var kResume = Symbol("resume");
+ var PipelineRequest = class extends Readable {
+ constructor() {
+ super({ autoDestroy: true });
+ this[kResume] = null;
+ }
+ _read() {
+ const { [kResume]: resume } = this;
+ if (resume) {
+ this[kResume] = null;
+ resume();
+ }
+ }
+ _destroy(err, callback) {
+ this._read();
+ callback(err);
+ }
+ };
+ var PipelineResponse = class extends Readable {
+ constructor(resume) {
+ super({ autoDestroy: true });
+ this[kResume] = resume;
+ }
+ _read() {
+ this[kResume]();
+ }
+ _destroy(err, callback) {
+ if (!err && !this._readableState.endEmitted) {
+ err = new RequestAbortedError();
+ }
+ callback(err);
+ }
+ };
+ var PipelineHandler = class extends AsyncResource {
+ constructor(opts, handler) {
+ if (!opts || typeof opts !== "object") {
+ throw new InvalidArgumentError("invalid opts");
+ }
+ if (typeof handler !== "function") {
+ throw new InvalidArgumentError("invalid handler");
+ }
+ const { signal, method, opaque, onInfo, responseHeaders } = opts;
+ if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") {
+ throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget");
+ }
+ if (method === "CONNECT") {
+ throw new InvalidArgumentError("invalid method");
+ }
+ if (onInfo && typeof onInfo !== "function") {
+ throw new InvalidArgumentError("invalid onInfo callback");
+ }
+ super("UNDICI_PIPELINE");
+ this.opaque = opaque || null;
+ this.responseHeaders = responseHeaders || null;
+ this.handler = handler;
+ this.abort = null;
+ this.context = null;
+ this.onInfo = onInfo || null;
+ this.req = new PipelineRequest().on("error", util.nop);
+ this.ret = new Duplex({
+ readableObjectMode: opts.objectMode,
+ autoDestroy: true,
+ read: () => {
+ const { body } = this;
+ if (body && 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, context5) {
+ const { ret, res } = this;
+ assert(!res, "pipeline cannot be retried");
+ if (ret.destroyed) {
+ throw new RequestAbortedError();
+ }
+ this.abort = abort;
+ this.context = context5;
+ }
+ onHeaders(statusCode, rawHeaders, resume) {
+ const { opaque, handler, context: context5 } = 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: context5
+ });
+ } catch (err) {
+ this.res.on("error", util.nop);
+ throw err;
+ }
+ if (!body || typeof body.on !== "function") {
+ throw new InvalidReturnValueError("expected Readable");
+ }
+ body.on("data", (chunk) => {
+ const { ret, body: body2 } = this;
+ if (!ret.push(chunk) && body2.pause) {
+ body2.pause();
+ }
+ }).on("error", (err) => {
+ const { ret } = this;
+ util.destroy(ret, err);
+ }).on("end", () => {
+ const { ret } = this;
+ ret.push(null);
+ }).on("close", () => {
+ const { ret } = this;
+ if (!ret._readableState.ended) {
+ util.destroy(ret, new RequestAbortedError());
+ }
+ });
+ this.body = body;
+ }
+ onData(chunk) {
+ const { res } = this;
+ return res.push(chunk);
+ }
+ onComplete(trailers) {
+ const { res } = this;
+ res.push(null);
+ }
+ onError(err) {
+ const { ret } = this;
+ this.handler = null;
+ util.destroy(ret, err);
+ }
+ };
+ function pipeline(opts, handler) {
+ try {
+ const pipelineHandler = new PipelineHandler(opts, handler);
+ this.dispatch({ ...opts, body: pipelineHandler.req }, pipelineHandler);
+ return pipelineHandler.ret;
+ } catch (err) {
+ return new PassThrough().destroy(err);
+ }
+ }
+ module2.exports = pipeline;
+ }
+});
+
+// node_modules/undici/lib/api/api-upgrade.js
+var require_api_upgrade = __commonJS({
+ "node_modules/undici/lib/api/api-upgrade.js"(exports2, module2) {
+ "use strict";
+ var { InvalidArgumentError, RequestAbortedError, SocketError } = require_errors();
+ var { AsyncResource } = require("async_hooks");
+ var util = require_util();
+ var { addSignal, removeSignal } = require_abort_signal();
+ var assert = require("assert");
+ var UpgradeHandler = class extends AsyncResource {
+ constructor(opts, callback) {
+ if (!opts || typeof opts !== "object") {
+ throw new InvalidArgumentError("invalid opts");
+ }
+ if (typeof callback !== "function") {
+ throw new InvalidArgumentError("invalid callback");
+ }
+ const { signal, opaque, responseHeaders } = opts;
+ if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") {
+ throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget");
+ }
+ super("UNDICI_UPGRADE");
+ this.responseHeaders = responseHeaders || null;
+ this.opaque = opaque || null;
+ this.callback = callback;
+ this.abort = null;
+ this.context = null;
+ addSignal(this, signal);
+ }
+ onConnect(abort, context5) {
+ 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: context5 } = this;
+ assert.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: context5
+ });
+ }
+ 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 }));
+ }
+ }
+ module2.exports = upgrade;
+ }
+});
+
+// node_modules/undici/lib/api/api-connect.js
+var require_api_connect = __commonJS({
+ "node_modules/undici/lib/api/api-connect.js"(exports2, module2) {
+ "use strict";
+ var { AsyncResource } = require("async_hooks");
+ var { InvalidArgumentError, RequestAbortedError, SocketError } = require_errors();
+ var util = require_util();
+ var { addSignal, removeSignal } = require_abort_signal();
+ var ConnectHandler = class extends AsyncResource {
+ constructor(opts, callback) {
+ if (!opts || typeof opts !== "object") {
+ throw new InvalidArgumentError("invalid opts");
+ }
+ if (typeof callback !== "function") {
+ throw new InvalidArgumentError("invalid callback");
+ }
+ const { signal, opaque, responseHeaders } = opts;
+ if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") {
+ throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget");
+ }
+ super("UNDICI_CONNECT");
+ this.opaque = opaque || null;
+ this.responseHeaders = responseHeaders || null;
+ this.callback = callback;
+ this.abort = null;
+ addSignal(this, signal);
+ }
+ onConnect(abort, context5) {
+ if (!this.callback) {
+ throw new RequestAbortedError();
+ }
+ this.abort = abort;
+ this.context = context5;
+ }
+ onHeaders() {
+ throw new SocketError("bad connect", null);
+ }
+ onUpgrade(statusCode, rawHeaders, socket) {
+ const { callback, opaque, context: context5 } = 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: context5
+ });
+ }
+ 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 }));
+ }
+ }
+ module2.exports = connect;
+ }
+});
+
+// node_modules/undici/lib/api/index.js
+var require_api = __commonJS({
+ "node_modules/undici/lib/api/index.js"(exports2, module2) {
+ "use strict";
+ module2.exports.request = require_api_request();
+ module2.exports.stream = require_api_stream();
+ module2.exports.pipeline = require_api_pipeline();
+ module2.exports.upgrade = require_api_upgrade();
+ module2.exports.connect = require_api_connect();
+ }
+});
+
+// node_modules/undici/lib/mock/mock-errors.js
+var require_mock_errors = __commonJS({
+ "node_modules/undici/lib/mock/mock-errors.js"(exports2, module2) {
+ "use strict";
+ var { UndiciError } = require_errors();
+ var MockNotMatchedError = class _MockNotMatchedError extends UndiciError {
+ constructor(message) {
+ super(message);
+ Error.captureStackTrace(this, _MockNotMatchedError);
+ this.name = "MockNotMatchedError";
+ this.message = message || "The request does not match any registered mock dispatches";
+ this.code = "UND_MOCK_ERR_MOCK_NOT_MATCHED";
+ }
+ };
+ module2.exports = {
+ MockNotMatchedError
+ };
+ }
+});
+
+// node_modules/undici/lib/mock/mock-symbols.js
+var require_mock_symbols = __commonJS({
+ "node_modules/undici/lib/mock/mock-symbols.js"(exports2, module2) {
+ "use strict";
+ module2.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")
+ };
+ }
+});
+
+// node_modules/undici/lib/mock/mock-utils.js
+var require_mock_utils = __commonJS({
+ "node_modules/undici/lib/mock/mock-utils.js"(exports2, module2) {
+ "use strict";
+ var { MockNotMatchedError } = require_mock_errors();
+ var {
+ kDispatches,
+ kMockAgent,
+ kOriginalDispatch,
+ kOrigin,
+ kGetNetConnect
+ } = require_mock_symbols();
+ var { buildURL, nop } = require_util();
+ var { STATUS_CODES } = require("http");
+ var {
+ 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];
+ })
+ );
+ }
+ function getHeaderByName(headers, key) {
+ if (Array.isArray(headers)) {
+ for (let i = 0; i < headers.length; i += 2) {
+ if (headers[i].toLocaleLowerCase() === key.toLocaleLowerCase()) {
+ return headers[i + 1];
+ }
+ }
+ return void 0;
+ } else if (typeof headers.get === "function") {
+ return headers.get(key);
+ } else {
+ return lowerCaseEntries(headers)[key.toLocaleLowerCase()];
+ }
+ }
+ function buildHeadersFromArray(headers) {
+ const clone = headers.slice();
+ const entries = [];
+ for (let index = 0; index < clone.length; index += 2) {
+ entries.push([clone[index], clone[index + 1]]);
+ }
+ return Object.fromEntries(entries);
+ }
+ function matchHeaders(mockDispatch2, headers) {
+ if (typeof mockDispatch2.headers === "function") {
+ if (Array.isArray(headers)) {
+ headers = buildHeadersFromArray(headers);
+ }
+ return mockDispatch2.headers(headers ? lowerCaseEntries(headers) : {});
+ }
+ if (typeof mockDispatch2.headers === "undefined") {
+ return true;
+ }
+ if (typeof headers !== "object" || typeof mockDispatch2.headers !== "object") {
+ return false;
+ }
+ for (const [matchHeaderName, matchHeaderValue] of Object.entries(mockDispatch2.headers)) {
+ const headerValue = getHeaderByName(headers, matchHeaderName);
+ if (!matchValue(matchHeaderValue, headerValue)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ function safeUrl(path5) {
+ if (typeof path5 !== "string") {
+ return path5;
+ }
+ const pathSegments = path5.split("?");
+ if (pathSegments.length !== 2) {
+ return path5;
+ }
+ const qp = new URLSearchParams(pathSegments.pop());
+ qp.sort();
+ return [...pathSegments, qp.toString()].join("?");
+ }
+ function matchKey(mockDispatch2, { path: path5, method, body, headers }) {
+ const pathMatch = matchValue(mockDispatch2.path, path5);
+ const methodMatch = matchValue(mockDispatch2.method, method);
+ const bodyMatch = typeof mockDispatch2.body !== "undefined" ? matchValue(mockDispatch2.body, body) : true;
+ const headersMatch = matchHeaders(mockDispatch2, headers);
+ return pathMatch && methodMatch && bodyMatch && headersMatch;
+ }
+ function getResponseData(data) {
+ if (Buffer.isBuffer(data)) {
+ return data;
+ } else if (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: path5 }) => matchValue(safeUrl(path5), 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((mockDispatch2) => matchHeaders(mockDispatch2, 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: path5, method, body, headers, query } = opts;
+ return {
+ path: path5,
+ 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}`)
+ ], []);
+ }
+ function getStatusText(statusCode) {
+ return STATUS_CODES[statusCode] || "unknown";
+ }
+ async function getResponse(body) {
+ const buffers = [];
+ for await (const data of body) {
+ buffers.push(data);
+ }
+ return Buffer.concat(buffers).toString("utf8");
+ }
+ function mockDispatch(opts, handler) {
+ const key = buildKey(opts);
+ const mockDispatch2 = getMockDispatch(this[kDispatches], key);
+ mockDispatch2.timesInvoked++;
+ if (mockDispatch2.data.callback) {
+ mockDispatch2.data = { ...mockDispatch2.data, ...mockDispatch2.data.callback(opts) };
+ }
+ const { data: { statusCode, data, headers, trailers, error: error3 }, delay, persist } = mockDispatch2;
+ const { timesInvoked, times } = mockDispatch2;
+ mockDispatch2.consumed = !persist && timesInvoked >= times;
+ mockDispatch2.pending = timesInvoked < times;
+ if (error3 !== null) {
+ deleteMockDispatch(this[kDispatches], key);
+ handler.onError(error3);
+ 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 (error3) {
+ if (error3 instanceof MockNotMatchedError) {
+ const netConnect = agent[kGetNetConnect]();
+ if (netConnect === false) {
+ throw new MockNotMatchedError(`${error3.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(`${error3.message}: subsequent request to origin ${origin} was not allowed (net.connect is not enabled for this origin)`);
+ }
+ } else {
+ throw error3;
+ }
+ }
+ } 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;
+ }
+ }
+ module2.exports = {
+ getResponseData,
+ getMockDispatch,
+ addMockDispatch,
+ deleteMockDispatch,
+ buildKey,
+ generateKeyValues,
+ matchValue,
+ getResponse,
+ getStatusText,
+ mockDispatch,
+ buildMockDispatch,
+ checkNetConnect,
+ buildMockOptions,
+ getHeaderByName
+ };
+ }
+});
+
+// node_modules/undici/lib/mock/mock-interceptor.js
+var require_mock_interceptor = __commonJS({
+ "node_modules/undici/lib/mock/mock-interceptor.js"(exports2, module2) {
+ "use strict";
+ var { getResponseData, buildKey, addMockDispatch } = require_mock_utils();
+ var {
+ kDispatches,
+ kDispatchKey,
+ kDefaultHeaders,
+ kDefaultTrailers,
+ kContentLength,
+ kMockDispatch
+ } = require_mock_symbols();
+ var { InvalidArgumentError } = require_errors();
+ var { buildURL } = require_util();
+ var MockScope = class {
+ constructor(mockDispatch) {
+ this[kMockDispatch] = mockDispatch;
+ }
+ /**
+ * Delay a reply by a set amount in ms.
+ */
+ delay(waitInMs) {
+ if (typeof waitInMs !== "number" || !Number.isInteger(waitInMs) || waitInMs <= 0) {
+ throw new InvalidArgumentError("waitInMs must be a valid integer > 0");
+ }
+ this[kMockDispatch].delay = waitInMs;
+ return this;
+ }
+ /**
+ * For a defined reply, never mark as consumed.
+ */
+ persist() {
+ this[kMockDispatch].persist = true;
+ return this;
+ }
+ /**
+ * Allow one to define a reply for a set amount of matching requests.
+ */
+ times(repeatTimes) {
+ if (typeof repeatTimes !== "number" || !Number.isInteger(repeatTimes) || repeatTimes <= 0) {
+ throw new InvalidArgumentError("repeatTimes must be a valid integer > 0");
+ }
+ this[kMockDispatch].times = repeatTimes;
+ return this;
+ }
+ };
+ var MockInterceptor = class {
+ constructor(opts, mockDispatches) {
+ if (typeof opts !== "object") {
+ throw new InvalidArgumentError("opts must be an object");
+ }
+ if (typeof opts.path === "undefined") {
+ throw new InvalidArgumentError("opts.path must be defined");
+ }
+ if (typeof opts.method === "undefined") {
+ opts.method = "GET";
+ }
+ if (typeof opts.path === "string") {
+ if (opts.query) {
+ opts.path = buildURL(opts.path, opts.query);
+ } else {
+ const parsedURL = new URL(opts.path, "data://");
+ opts.path = parsedURL.pathname + parsedURL.search;
+ }
+ }
+ if (typeof opts.method === "string") {
+ opts.method = opts.method.toUpperCase();
+ }
+ this[kDispatchKey] = buildKey(opts);
+ this[kDispatches] = mockDispatches;
+ this[kDefaultHeaders] = {};
+ this[kDefaultTrailers] = {};
+ this[kContentLength] = false;
+ }
+ createMockScopeDispatchData(statusCode, data, responseOptions = {}) {
+ const responseData = getResponseData(data);
+ const contentLength = this[kContentLength] ? { "content-length": responseData.length } : {};
+ const headers = { ...this[kDefaultHeaders], ...contentLength, ...responseOptions.headers };
+ const trailers = { ...this[kDefaultTrailers], ...responseOptions.trailers };
+ return { statusCode, data, headers, trailers };
+ }
+ validateReplyParameters(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: statusCode2, data: data2 = "", responseOptions: responseOptions2 = {} } = resolvedData;
+ this.validateReplyParameters(statusCode2, data2, responseOptions2);
+ return {
+ ...this.createMockScopeDispatchData(statusCode2, data2, responseOptions2)
+ };
+ };
+ const newMockDispatch2 = addMockDispatch(this[kDispatches], this[kDispatchKey], wrappedDefaultsCallback);
+ return new MockScope(newMockDispatch2);
+ }
+ const [statusCode, data = "", responseOptions = {}] = [...arguments];
+ this.validateReplyParameters(statusCode, data, responseOptions);
+ const dispatchData = this.createMockScopeDispatchData(statusCode, data, responseOptions);
+ const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], dispatchData);
+ return new MockScope(newMockDispatch);
+ }
+ /**
+ * Mock an undici request with a defined error.
+ */
+ replyWithError(error3) {
+ if (typeof error3 === "undefined") {
+ throw new InvalidArgumentError("error must be defined");
+ }
+ const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], { error: error3 });
+ return new MockScope(newMockDispatch);
+ }
+ /**
+ * Set default reply headers on the interceptor for subsequent replies
+ */
+ defaultReplyHeaders(headers) {
+ if (typeof headers === "undefined") {
+ throw new InvalidArgumentError("headers must be defined");
+ }
+ this[kDefaultHeaders] = headers;
+ return this;
+ }
+ /**
+ * Set default reply trailers on the interceptor for subsequent replies
+ */
+ defaultReplyTrailers(trailers) {
+ if (typeof trailers === "undefined") {
+ throw new InvalidArgumentError("trailers must be defined");
+ }
+ this[kDefaultTrailers] = trailers;
+ return this;
+ }
+ /**
+ * Set reply content length header for replies on the interceptor
+ */
+ replyContentLength() {
+ this[kContentLength] = true;
+ return this;
+ }
+ };
+ module2.exports.MockInterceptor = MockInterceptor;
+ module2.exports.MockScope = MockScope;
+ }
+});
+
+// node_modules/undici/lib/mock/mock-client.js
+var require_mock_client = __commonJS({
+ "node_modules/undici/lib/mock/mock-client.js"(exports2, module2) {
+ "use strict";
+ var { promisify } = require("util");
+ var Client = require_client();
+ var { buildMockDispatch } = require_mock_utils();
+ var {
+ kDispatches,
+ kMockAgent,
+ kClose,
+ kOriginalClose,
+ kOrigin,
+ kOriginalDispatch,
+ kConnected
+ } = require_mock_symbols();
+ var { MockInterceptor } = require_mock_interceptor();
+ var Symbols = require_symbols();
+ var { InvalidArgumentError } = require_errors();
+ var MockClient = class extends Client {
+ constructor(origin, opts) {
+ super(origin, opts);
+ if (!opts || !opts.agent || typeof opts.agent.dispatch !== "function") {
+ throw new InvalidArgumentError("Argument opts.agent must implement Agent");
+ }
+ this[kMockAgent] = opts.agent;
+ this[kOrigin] = origin;
+ this[kDispatches] = [];
+ this[kConnected] = 1;
+ this[kOriginalDispatch] = this.dispatch;
+ this[kOriginalClose] = this.close.bind(this);
+ this.dispatch = buildMockDispatch.call(this);
+ this.close = this[kClose];
+ }
+ get [Symbols.kConnected]() {
+ return this[kConnected];
+ }
+ /**
+ * Sets up the base interceptor for mocking replies from undici.
+ */
+ intercept(opts) {
+ return new MockInterceptor(opts, this[kDispatches]);
+ }
+ async [kClose]() {
+ await promisify(this[kOriginalClose])();
+ this[kConnected] = 0;
+ this[kMockAgent][Symbols.kClients].delete(this[kOrigin]);
+ }
+ };
+ module2.exports = MockClient;
+ }
+});
+
+// node_modules/undici/lib/mock/mock-pool.js
+var require_mock_pool = __commonJS({
+ "node_modules/undici/lib/mock/mock-pool.js"(exports2, module2) {
+ "use strict";
+ var { promisify } = require("util");
+ var Pool = require_pool();
+ var { buildMockDispatch } = require_mock_utils();
+ var {
+ kDispatches,
+ kMockAgent,
+ kClose,
+ kOriginalClose,
+ kOrigin,
+ kOriginalDispatch,
+ kConnected
+ } = require_mock_symbols();
+ var { MockInterceptor } = require_mock_interceptor();
+ var Symbols = require_symbols();
+ var { InvalidArgumentError } = require_errors();
+ var MockPool = class extends Pool {
+ constructor(origin, opts) {
+ super(origin, opts);
+ if (!opts || !opts.agent || typeof opts.agent.dispatch !== "function") {
+ throw new InvalidArgumentError("Argument opts.agent must implement Agent");
+ }
+ this[kMockAgent] = opts.agent;
+ this[kOrigin] = origin;
+ this[kDispatches] = [];
+ this[kConnected] = 1;
+ this[kOriginalDispatch] = this.dispatch;
+ this[kOriginalClose] = this.close.bind(this);
+ this.dispatch = buildMockDispatch.call(this);
+ this.close = this[kClose];
+ }
+ get [Symbols.kConnected]() {
+ return this[kConnected];
+ }
+ /**
+ * Sets up the base interceptor for mocking replies from undici.
+ */
+ intercept(opts) {
+ return new MockInterceptor(opts, this[kDispatches]);
+ }
+ async [kClose]() {
+ await promisify(this[kOriginalClose])();
+ this[kConnected] = 0;
+ this[kMockAgent][Symbols.kClients].delete(this[kOrigin]);
+ }
+ };
+ module2.exports = MockPool;
+ }
+});
+
+// node_modules/undici/lib/mock/pluralizer.js
+var require_pluralizer = __commonJS({
+ "node_modules/undici/lib/mock/pluralizer.js"(exports2, module2) {
+ "use strict";
+ var singulars = {
+ pronoun: "it",
+ is: "is",
+ was: "was",
+ this: "this"
+ };
+ var plurals = {
+ pronoun: "they",
+ is: "are",
+ was: "were",
+ this: "these"
+ };
+ module2.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 };
+ }
+ };
+ }
+});
+
+// node_modules/undici/lib/mock/pending-interceptors-formatter.js
+var require_pending_interceptors_formatter = __commonJS({
+ "node_modules/undici/lib/mock/pending-interceptors-formatter.js"(exports2, module2) {
+ "use strict";
+ var { Transform } = require("stream");
+ var { Console } = require("console");
+ module2.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: path5, data: { statusCode }, persist, times, timesInvoked, origin }) => ({
+ Method: method,
+ Origin: origin,
+ Path: path5,
+ "Status code": statusCode,
+ Persistent: persist ? "\u2705" : "\u274C",
+ Invocations: timesInvoked,
+ Remaining: persist ? Infinity : times - timesInvoked
+ })
+ );
+ this.logger.table(withPrettyHeaders);
+ return this.transform.read().toString();
+ }
+ };
+ }
+});
+
+// node_modules/undici/lib/mock/mock-agent.js
+var require_mock_agent = __commonJS({
+ "node_modules/undici/lib/mock/mock-agent.js"(exports2, module2) {
+ "use strict";
+ var { kClients } = require_symbols();
+ var Agent = require_agent();
+ var {
+ kAgent,
+ kMockAgentSet,
+ kMockAgentGet,
+ kDispatches,
+ kIsMockActive,
+ kNetConnect,
+ kGetNetConnect,
+ kOptions,
+ kFactory
+ } = require_mock_symbols();
+ var MockClient = require_mock_client();
+ var MockPool = require_mock_pool();
+ var { matchValue, buildMockOptions } = require_mock_utils();
+ var { InvalidArgumentError, UndiciError } = require_errors();
+ var Dispatcher = require_dispatcher();
+ var Pluralizer = require_pluralizer();
+ var PendingInterceptorsFormatter = require_pending_interceptors_formatter();
+ var 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;
+ }
+ // This is required to bypass issues caused by using global symbols - see:
+ // https://github.com/nodejs/undici/issues/1447
+ get isMockActive() {
+ return this[kIsMockActive];
+ }
+ [kMockAgentSet](origin, dispatcher) {
+ this[kClients].set(origin, 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());
+ }
+ };
+ module2.exports = MockAgent;
+ }
+});
+
+// node_modules/undici/lib/proxy-agent.js
+var require_proxy_agent = __commonJS({
+ "node_modules/undici/lib/proxy-agent.js"(exports2, module2) {
+ "use strict";
+ var { kProxy, kClose, kDestroy, kInterceptors } = require_symbols();
+ var { URL: URL2 } = require("url");
+ var Agent = require_agent();
+ var Pool = require_pool();
+ var DispatcherBase = require_dispatcher_base();
+ var { InvalidArgumentError, RequestAbortedError } = require_errors();
+ var buildConnector = require_connect();
+ var kAgent = Symbol("proxy agent");
+ var kClient = Symbol("proxy client");
+ var kProxyHeaders = Symbol("proxy headers");
+ var kRequestTls = Symbol("request tls settings");
+ var kProxyTls = Symbol("proxy tls settings");
+ var kConnectEndpoint = Symbol("connect endpoint function");
+ 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 URL2(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 (opts2, callback) => {
+ let requestedHost = opts2.host;
+ if (!opts2.port) {
+ requestedHost += `:${defaultProtocolPort(opts2.protocol)}`;
+ }
+ try {
+ const { socket, statusCode } = await this[kClient].connect({
+ origin,
+ port,
+ path: requestedHost,
+ signal: opts2.signal,
+ headers: {
+ ...this[kProxyHeaders],
+ host
+ }
+ });
+ if (statusCode !== 200) {
+ socket.on("error", () => {
+ }).destroy();
+ callback(new RequestAbortedError(`Proxy response (${statusCode}) !== 200 when HTTP Tunneling`));
+ }
+ if (opts2.protocol !== "https:") {
+ callback(null, socket);
+ return;
+ }
+ let servername;
+ if (this[kRequestTls]) {
+ servername = this[kRequestTls].servername;
+ } else {
+ servername = opts2.servername;
+ }
+ this[kConnectEndpoint]({ ...opts2, servername, httpSocket: socket }, callback);
+ } catch (err) {
+ callback(err);
+ }
+ }
+ });
+ }
+ dispatch(opts, handler) {
+ const { host } = new URL2(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();
+ }
+ };
+ function buildHeaders(headers) {
+ if (Array.isArray(headers)) {
+ const headersPair = {};
+ for (let i = 0; i < headers.length; i += 2) {
+ headersPair[headers[i]] = headers[i + 1];
+ }
+ return headersPair;
+ }
+ return headers;
+ }
+ function throwIfProxyAuthIsSent(headers) {
+ const existProxyAuth = headers && Object.keys(headers).find((key) => key.toLowerCase() === "proxy-authorization");
+ if (existProxyAuth) {
+ throw new InvalidArgumentError("Proxy-Authorization should be sent in ProxyAgent constructor");
+ }
+ }
+ module2.exports = ProxyAgent;
+ }
+});
+
+// node_modules/undici/lib/handler/RetryHandler.js
+var require_RetryHandler = __commonJS({
+ "node_modules/undici/lib/handler/RetryHandler.js"(exports2, module2) {
+ var assert = require("assert");
+ var { kRetryHandlerDefaultRetry } = require_symbols();
+ var { RequestRetryError } = require_errors();
+ var { isDisturbed, parseHeaders, parseRangeHeader } = require_util();
+ function calculateRetryAfterHeader(retryAfter) {
+ const current = Date.now();
+ const diff = new Date(retryAfter).getTime() - current;
+ return diff;
+ }
+ var RetryHandler = class _RetryHandler {
+ constructor(opts, handlers) {
+ const { retryOptions, ...dispatchOpts } = opts;
+ const {
+ // Retry scoped
+ retry: retryFn,
+ maxRetries,
+ maxTimeout,
+ minTimeout,
+ timeoutFactor,
+ // Response scoped
+ methods,
+ errorCodes,
+ retryAfter,
+ statusCodes
+ } = retryOptions ?? {};
+ this.dispatch = handlers.dispatch;
+ this.handler = handlers.handler;
+ this.opts = dispatchOpts;
+ this.abort = null;
+ this.aborted = false;
+ this.retryOpts = {
+ retry: retryFn ?? _RetryHandler[kRetryHandlerDefaultRetry],
+ retryAfter: retryAfter ?? true,
+ maxTimeout: maxTimeout ?? 30 * 1e3,
+ // 30s,
+ timeout: minTimeout ?? 500,
+ // .5s
+ timeoutFactor: timeoutFactor ?? 2,
+ maxRetries: maxRetries ?? 5,
+ // What errors we should retry
+ methods: methods ?? ["GET", "HEAD", "OPTIONS", "PUT", "DELETE", "TRACE"],
+ // Indicates which errors to retry
+ statusCodes: statusCodes ?? [500, 502, 503, 504, 429],
+ // List of errors to retry
+ errorCodes: errorCodes ?? [
+ "ECONNRESET",
+ "ECONNREFUSED",
+ "ENOTFOUND",
+ "ENETDOWN",
+ "ENETUNREACH",
+ "EHOSTDOWN",
+ "EHOSTUNREACH",
+ "EPIPE"
+ ]
+ };
+ 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(this.start === start, "content-range mismatch");
+ assert(this.end == null || this.end === end, "content-range mismatch");
+ this.resume = resume;
+ return true;
+ }
+ if (this.end == null) {
+ if (statusCode === 206) {
+ const range = parseRangeHeader(headers["content-range"]);
+ if (range == null) {
+ return this.handler.onHeaders(
+ statusCode,
+ rawHeaders,
+ resume,
+ statusMessage
+ );
+ }
+ const { start, size, end = size } = range;
+ assert(
+ start != null && Number.isFinite(start) && this.start !== start,
+ "content-range mismatch"
+ );
+ assert(Number.isFinite(start));
+ assert(
+ 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(Number.isFinite(this.start));
+ assert(
+ this.end == null || Number.isFinite(this.end),
+ "invalid content-length"
+ );
+ this.resume = resume;
+ this.etag = headers.etag != null ? headers.etag : null;
+ 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(err2) {
+ if (err2 != null || this.aborted || isDisturbed(this.opts.body)) {
+ return this.handler.onError(err2);
+ }
+ 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 (err3) {
+ this.handler.onError(err3);
+ }
+ }
+ }
+ };
+ module2.exports = RetryHandler;
+ }
+});
+
+// node_modules/undici/lib/global.js
+var require_global2 = __commonJS({
+ "node_modules/undici/lib/global.js"(exports2, module2) {
+ "use strict";
+ var globalDispatcher = Symbol.for("undici.globalDispatcher.1");
+ var { InvalidArgumentError } = require_errors();
+ var Agent = require_agent();
+ if (getGlobalDispatcher() === void 0) {
+ setGlobalDispatcher(new Agent());
+ }
+ function setGlobalDispatcher(agent) {
+ if (!agent || typeof agent.dispatch !== "function") {
+ throw new InvalidArgumentError("Argument agent must implement Agent");
+ }
+ Object.defineProperty(globalThis, globalDispatcher, {
+ value: agent,
+ writable: true,
+ enumerable: false,
+ configurable: false
+ });
+ }
+ function getGlobalDispatcher() {
+ return globalThis[globalDispatcher];
+ }
+ module2.exports = {
+ setGlobalDispatcher,
+ getGlobalDispatcher
+ };
+ }
+});
+
+// node_modules/undici/lib/handler/DecoratorHandler.js
+var require_DecoratorHandler = __commonJS({
+ "node_modules/undici/lib/handler/DecoratorHandler.js"(exports2, module2) {
+ "use strict";
+ module2.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);
+ }
+ };
+ }
+});
+
+// node_modules/undici/lib/fetch/headers.js
+var require_headers = __commonJS({
+ "node_modules/undici/lib/fetch/headers.js"(exports2, module2) {
+ "use strict";
+ var { kHeadersList, kConstruct } = require_symbols();
+ var { kGuard } = require_symbols2();
+ var { kEnumerableProperty } = require_util();
+ var {
+ makeIterator,
+ isValidHeaderName,
+ isValidHeaderValue
+ } = require_util2();
+ var { webidl } = require_webidl();
+ var assert = require("assert");
+ var kHeadersMap = Symbol("headers map");
+ var kHeadersSortedMap = Symbol("headers map sorted");
+ function isHTTPWhiteSpaceCharCode(code) {
+ return code === 10 || code === 13 || code === 9 || code === 32;
+ }
+ function headerValueNormalize(potentialValue) {
+ let i = 0;
+ let j = potentialValue.length;
+ while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(j - 1))) --j;
+ while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(i))) ++i;
+ return i === 0 && j === potentialValue.length ? potentialValue : potentialValue.substring(i, j);
+ }
+ function fill(headers, object) {
+ if (Array.isArray(object)) {
+ for (let i = 0; i < object.length; ++i) {
+ const header = object[i];
+ if (header.length !== 2) {
+ throw webidl.errors.exception({
+ header: "Headers constructor",
+ message: `expected name/value pair to be length 2, found ${header.length}.`
+ });
+ }
+ appendHeader(headers, header[0], header[1]);
+ }
+ } else if (typeof object === "object" && object !== null) {
+ const keys = Object.keys(object);
+ for (let i = 0; i < keys.length; ++i) {
+ appendHeader(headers, keys[i], object[keys[i]]);
+ }
+ } else {
+ throw webidl.errors.conversionFailed({
+ prefix: "Headers constructor",
+ argument: "Argument 1",
+ types: ["sequence>", "record"]
+ });
+ }
+ }
+ function appendHeader(headers, name, value) {
+ value = headerValueNormalize(value);
+ if (!isValidHeaderName(name)) {
+ throw webidl.errors.invalidArgument({
+ prefix: "Headers.append",
+ value: name,
+ type: "header name"
+ });
+ } else if (!isValidHeaderValue(value)) {
+ throw webidl.errors.invalidArgument({
+ prefix: "Headers.append",
+ value,
+ type: "header value"
+ });
+ }
+ if (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;
+ }
+ }
+ // https://fetch.spec.whatwg.org/#header-list-contains
+ contains(name) {
+ name = name.toLowerCase();
+ return this[kHeadersMap].has(name);
+ }
+ clear() {
+ this[kHeadersMap].clear();
+ this[kHeadersSortedMap] = null;
+ this.cookies = null;
+ }
+ // https://fetch.spec.whatwg.org/#concept-header-list-append
+ append(name, value) {
+ this[kHeadersSortedMap] = null;
+ const lowercaseName = name.toLowerCase();
+ const exists2 = this[kHeadersMap].get(lowercaseName);
+ if (exists2) {
+ const delimiter = lowercaseName === "cookie" ? "; " : ", ";
+ this[kHeadersMap].set(lowercaseName, {
+ name: exists2.name,
+ value: `${exists2.value}${delimiter}${value}`
+ });
+ } else {
+ this[kHeadersMap].set(lowercaseName, { name, value });
+ }
+ if (lowercaseName === "set-cookie") {
+ this.cookies ??= [];
+ this.cookies.push(value);
+ }
+ }
+ // https://fetch.spec.whatwg.org/#concept-header-list-set
+ set(name, value) {
+ this[kHeadersSortedMap] = null;
+ const lowercaseName = name.toLowerCase();
+ if (lowercaseName === "set-cookie") {
+ this.cookies = [value];
+ }
+ this[kHeadersMap].set(lowercaseName, { name, value });
+ }
+ // https://fetch.spec.whatwg.org/#concept-header-list-delete
+ delete(name) {
+ this[kHeadersSortedMap] = null;
+ name = name.toLowerCase();
+ if (name === "set-cookie") {
+ this.cookies = null;
+ }
+ this[kHeadersMap].delete(name);
+ }
+ // https://fetch.spec.whatwg.org/#concept-header-list-get
+ 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);
+ }
+ }
+ // https://fetch.spec.whatwg.org/#dom-headers-append
+ 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);
+ }
+ // https://fetch.spec.whatwg.org/#dom-headers-delete
+ 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);
+ }
+ // https://fetch.spec.whatwg.org/#dom-headers-get
+ 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);
+ }
+ // https://fetch.spec.whatwg.org/#dom-headers-has
+ 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);
+ }
+ // https://fetch.spec.whatwg.org/#dom-headers-set
+ 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);
+ }
+ // https://fetch.spec.whatwg.org/#dom-headers-getsetcookie
+ getSetCookie() {
+ webidl.brandCheck(this, _Headers);
+ const list = this[kHeadersList].cookies;
+ if (list) {
+ return [...list];
+ }
+ return [];
+ }
+ // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine
+ 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(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
+ }
+ });
+ 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"]
+ });
+ };
+ module2.exports = {
+ fill,
+ Headers,
+ HeadersList
+ };
+ }
+});
+
+// node_modules/undici/lib/fetch/response.js
+var require_response = __commonJS({
+ "node_modules/undici/lib/fetch/response.js"(exports2, module2) {
+ "use strict";
+ var { Headers, HeadersList, fill } = require_headers();
+ var { extractBody, cloneBody, mixinBody } = require_body();
+ var util = require_util();
+ var { kEnumerableProperty } = util;
+ var {
+ isValidReasonPhrase,
+ isCancelled,
+ isAborted,
+ isBlobLike,
+ serializeJavascriptValueToJSONString,
+ isErrorLike,
+ isomorphicEncode
+ } = require_util2();
+ var {
+ redirectStatusSet,
+ nullBodyStatus,
+ DOMException: DOMException2
+ } = require_constants2();
+ var { kState, kHeaders, kGuard, kRealm } = require_symbols2();
+ var { webidl } = require_webidl();
+ var { FormData } = require_formdata();
+ var { getGlobalOrigin } = require_global();
+ var { URLSerializer } = require_dataURL();
+ var { kHeadersList, kConstruct } = require_symbols();
+ var assert = require("assert");
+ var { types } = require("util");
+ var ReadableStream = globalThis.ReadableStream || require("stream/web").ReadableStream;
+ var textEncoder = new TextEncoder("utf-8");
+ var Response = class _Response {
+ // Creates network error 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;
+ }
+ // https://fetch.spec.whatwg.org/#dom-response-json
+ static json(data, init = {}) {
+ webidl.argumentLengthCheck(arguments, 1, { header: "Response.json" });
+ if (init !== null) {
+ init = webidl.converters.ResponseInit(init);
+ }
+ const bytes = textEncoder.encode(
+ serializeJavascriptValueToJSONString(data)
+ );
+ const body = extractBody(bytes);
+ 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;
+ }
+ // Creates a redirect Response that redirects to url with status status.
+ 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(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;
+ }
+ // https://fetch.spec.whatwg.org/#dom-response
+ 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);
+ }
+ // Returns response’s type, e.g., "cors".
+ get type() {
+ webidl.brandCheck(this, _Response);
+ return this[kState].type;
+ }
+ // Returns response’s URL, if it has one; otherwise the empty string.
+ get url() {
+ webidl.brandCheck(this, _Response);
+ const urlList = this[kState].urlList;
+ const url = urlList[urlList.length - 1] ?? null;
+ if (url === null) {
+ return "";
+ }
+ return URLSerializer(url, true);
+ }
+ // Returns whether response was obtained through a redirect.
+ get redirected() {
+ webidl.brandCheck(this, _Response);
+ return this[kState].urlList.length > 1;
+ }
+ // Returns response’s status.
+ get status() {
+ webidl.brandCheck(this, _Response);
+ return this[kState].status;
+ }
+ // Returns whether response’s status is an ok status.
+ get ok() {
+ webidl.brandCheck(this, _Response);
+ return this[kState].status >= 200 && this[kState].status <= 299;
+ }
+ // Returns response’s status message.
+ get statusText() {
+ webidl.brandCheck(this, _Response);
+ return this[kState].statusText;
+ }
+ // Returns response’s headers as Headers.
+ get headers() {
+ webidl.brandCheck(this, _Response);
+ return this[kHeaders];
+ }
+ get body() {
+ webidl.brandCheck(this, _Response);
+ return this[kState].body ? this[kState].body.stream : null;
+ }
+ get bodyUsed() {
+ webidl.brandCheck(this, _Response);
+ return !!this[kState].body && util.isDisturbed(this[kState].body.stream);
+ }
+ // Returns a clone of response.
+ clone() {
+ webidl.brandCheck(this, _Response);
+ if (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) {
+ const isError = isErrorLike(reason);
+ return makeResponse({
+ type: "error",
+ status: 0,
+ error: isError ? reason : new Error(reason ? String(reason) : reason),
+ aborted: reason && reason.name === "AbortError"
+ });
+ }
+ function makeFilteredResponse(response, state) {
+ state = {
+ internalResponse: response,
+ ...state
+ };
+ return new Proxy(response, {
+ get(target, p) {
+ return p in state ? state[p] : target[p];
+ },
+ set(target, p, value) {
+ assert(!(p in state));
+ target[p] = value;
+ return true;
+ }
+ });
+ }
+ function filterResponse(response, type) {
+ if (type === "basic") {
+ return makeFilteredResponse(response, {
+ type: "basic",
+ headersList: response.headersList
+ });
+ } else if (type === "cors") {
+ return makeFilteredResponse(response, {
+ type: "cors",
+ headersList: response.headersList
+ });
+ } else if (type === "opaque") {
+ return makeFilteredResponse(response, {
+ type: "opaque",
+ urlList: Object.freeze([]),
+ status: 0,
+ statusText: "",
+ body: null
+ });
+ } else if (type === "opaqueredirect") {
+ return makeFilteredResponse(response, {
+ type: "opaqueredirect",
+ status: 0,
+ statusText: "",
+ headersList: [],
+ body: null
+ });
+ } else {
+ assert(false);
+ }
+ }
+ function makeAppropriateNetworkError(fetchParams, err = null) {
+ assert(isCancelled(fetchParams));
+ return isAborted(fetchParams) ? makeNetworkError(Object.assign(new DOMException2("The operation was aborted.", "AbortError"), { cause: err })) : makeNetworkError(Object.assign(new DOMException2("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.isArrayBuffer(V) || types.isTypedArray(V) || types.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
+ }
+ ]);
+ module2.exports = {
+ makeNetworkError,
+ makeResponse,
+ makeAppropriateNetworkError,
+ filterResponse,
+ Response,
+ cloneResponse
+ };
+ }
+});
+
+// node_modules/undici/lib/fetch/request.js
+var require_request2 = __commonJS({
+ "node_modules/undici/lib/fetch/request.js"(exports2, module2) {
+ "use strict";
+ var { extractBody, mixinBody, cloneBody } = require_body();
+ var { Headers, fill: fillHeaders, HeadersList } = require_headers();
+ var { FinalizationRegistry } = require_dispatcher_weakref()();
+ var util = require_util();
+ var {
+ isValidHTTPToken,
+ sameOrigin,
+ normalizeMethod,
+ makePolicyContainer,
+ normalizeMethodRecord
+ } = require_util2();
+ var {
+ forbiddenMethodsSet,
+ corsSafeListedMethodsSet,
+ referrerPolicy,
+ requestRedirect,
+ requestMode,
+ requestCredentials,
+ requestCache,
+ requestDuplex
+ } = require_constants2();
+ var { kEnumerableProperty } = util;
+ var { kHeaders, kSignal, kState, kGuard, kRealm } = require_symbols2();
+ var { webidl } = require_webidl();
+ var { getGlobalOrigin } = require_global();
+ var { URLSerializer } = require_dataURL();
+ var { kHeadersList, kConstruct } = require_symbols();
+ var assert = require("assert");
+ var { getMaxListeners, setMaxListeners, getEventListeners, defaultMaxListeners } = require("events");
+ var TransformStream = globalThis.TransformStream;
+ var kAbortController = Symbol("abortController");
+ var requestFinalizer = new FinalizationRegistry(({ signal, abort }) => {
+ signal.removeEventListener("abort", abort);
+ });
+ var Request = class _Request {
+ // https://fetch.spec.whatwg.org/#dom-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(input instanceof _Request);
+ request = input[kState];
+ signal = input[kSignal];
+ }
+ const origin = this[kRealm].settingsObject.origin;
+ let window2 = "client";
+ if (request.window?.constructor?.name === "EnvironmentSettingsObject" && sameOrigin(request.window, origin)) {
+ window2 = request.window;
+ }
+ if (init.window != null) {
+ throw new TypeError(`'window' option '${window2}' must be null`);
+ }
+ if ("window" in init) {
+ window2 = "no-window";
+ }
+ request = makeRequest({
+ // URL request’s URL.
+ // undici implementation note: this is set as the first item in request's urlList in makeRequest
+ // method request’s method.
+ method: request.method,
+ // header list A copy of request’s header list.
+ // undici implementation note: headersList is cloned in makeRequest
+ headersList: request.headersList,
+ // unsafe-request flag Set.
+ unsafeRequest: request.unsafeRequest,
+ // client This’s relevant settings object.
+ client: this[kRealm].settingsObject,
+ // window window.
+ window: window2,
+ // priority request’s priority.
+ priority: request.priority,
+ // origin request’s origin. The propagation of the origin is only significant for navigation requests
+ // being handled by a service worker. In this scenario a request can have an origin that is different
+ // from the current client.
+ origin: request.origin,
+ // referrer request’s referrer.
+ referrer: request.referrer,
+ // referrer policy request’s referrer policy.
+ referrerPolicy: request.referrerPolicy,
+ // mode request’s mode.
+ mode: request.mode,
+ // credentials mode request’s credentials mode.
+ credentials: request.credentials,
+ // cache mode request’s cache mode.
+ cache: request.cache,
+ // redirect mode request’s redirect mode.
+ redirect: request.redirect,
+ // integrity metadata request’s integrity metadata.
+ integrity: request.integrity,
+ // keepalive request’s keepalive.
+ keepalive: request.keepalive,
+ // reload-navigation flag request’s reload-navigation flag.
+ reloadNavigation: request.reloadNavigation,
+ // history-navigation flag request’s history-navigation flag.
+ historyNavigation: request.historyNavigation,
+ // URL list A clone of request’s URL list.
+ urlList: [...request.urlList]
+ });
+ const initHasKey = Object.keys(init).length !== 0;
+ if (initHasKey) {
+ if (request.mode === "navigate") {
+ request.mode = "same-origin";
+ }
+ request.reloadNavigation = false;
+ request.historyNavigation = false;
+ request.origin = "client";
+ request.referrer = "client";
+ request.referrerPolicy = "";
+ request.url = request.urlList[request.urlList.length - 1];
+ request.urlList = [request.url];
+ }
+ if (init.referrer !== void 0) {
+ const referrer = init.referrer;
+ if (referrer === "") {
+ request.referrer = "no-referrer";
+ } else {
+ let parsedReferrer;
+ try {
+ parsedReferrer = new URL(referrer, baseUrl);
+ } catch (err) {
+ throw new TypeError(`Referrer "${referrer}" is not a valid URL.`, { cause: err });
+ }
+ if (parsedReferrer.protocol === "about:" && parsedReferrer.hostname === "client" || origin && !sameOrigin(parsedReferrer, 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 ac2 = acRef.deref();
+ if (ac2 !== void 0) {
+ ac2.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) {
+ 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;
+ }
+ // Returns request’s HTTP method, which is "GET" by default.
+ get method() {
+ webidl.brandCheck(this, _Request);
+ return this[kState].method;
+ }
+ // Returns the URL of request as a string.
+ get url() {
+ webidl.brandCheck(this, _Request);
+ return URLSerializer(this[kState].url);
+ }
+ // Returns a Headers object consisting of the headers associated with request.
+ // Note that headers added in the network layer by the user agent will not
+ // be accounted for in this object, e.g., the "Host" header.
+ get headers() {
+ webidl.brandCheck(this, _Request);
+ return this[kHeaders];
+ }
+ // Returns the kind of resource requested by request, e.g., "document"
+ // or "script".
+ get destination() {
+ webidl.brandCheck(this, _Request);
+ return this[kState].destination;
+ }
+ // Returns the referrer of request. Its value can be a same-origin URL if
+ // explicitly set in init, the empty string to indicate no referrer, and
+ // "about:client" when defaulting to the global’s default. This is used
+ // during fetching to determine the value of the `Referer` header of the
+ // request being made.
+ get referrer() {
+ webidl.brandCheck(this, _Request);
+ if (this[kState].referrer === "no-referrer") {
+ return "";
+ }
+ if (this[kState].referrer === "client") {
+ return "about:client";
+ }
+ return this[kState].referrer.toString();
+ }
+ // Returns the referrer policy associated with request.
+ // This is used during fetching to compute the value of the request’s
+ // referrer.
+ get referrerPolicy() {
+ webidl.brandCheck(this, _Request);
+ return this[kState].referrerPolicy;
+ }
+ // Returns the mode associated with request, which is a string indicating
+ // whether the request will use CORS, or will be restricted to same-origin
+ // URLs.
+ get mode() {
+ webidl.brandCheck(this, _Request);
+ return this[kState].mode;
+ }
+ // Returns the credentials mode associated with request,
+ // which is a string indicating whether credentials will be sent with the
+ // request always, never, or only when sent to a same-origin URL.
+ get credentials() {
+ return this[kState].credentials;
+ }
+ // Returns the cache mode associated with request,
+ // which is a string indicating how the request will
+ // interact with the browser’s cache when fetching.
+ get cache() {
+ webidl.brandCheck(this, _Request);
+ return this[kState].cache;
+ }
+ // Returns the redirect mode associated with request,
+ // which is a string indicating how redirects for the
+ // request will be handled during fetching. A request
+ // will follow redirects by default.
+ get redirect() {
+ webidl.brandCheck(this, _Request);
+ return this[kState].redirect;
+ }
+ // Returns request’s subresource integrity metadata, which is a
+ // cryptographic hash of the resource being fetched. Its value
+ // consists of multiple hashes separated by whitespace. [SRI]
+ get integrity() {
+ webidl.brandCheck(this, _Request);
+ return this[kState].integrity;
+ }
+ // Returns a boolean indicating whether or not request can outlive the
+ // global in which it was created.
+ get keepalive() {
+ webidl.brandCheck(this, _Request);
+ return this[kState].keepalive;
+ }
+ // Returns a boolean indicating whether or not request is for a reload
+ // navigation.
+ get isReloadNavigation() {
+ webidl.brandCheck(this, _Request);
+ return this[kState].reloadNavigation;
+ }
+ // Returns a boolean indicating whether or not request is for a history
+ // navigation (a.k.a. back-foward navigation).
+ get isHistoryNavigation() {
+ webidl.brandCheck(this, _Request);
+ return this[kState].historyNavigation;
+ }
+ // Returns the signal associated with request, which is an AbortSignal
+ // object indicating whether or not request has been aborted, and its
+ // abort event handler.
+ get signal() {
+ webidl.brandCheck(this, _Request);
+ return this[kSignal];
+ }
+ get body() {
+ webidl.brandCheck(this, _Request);
+ return this[kState].body ? this[kState].body.stream : null;
+ }
+ get bodyUsed() {
+ webidl.brandCheck(this, _Request);
+ return !!this[kState].body && util.isDisturbed(this[kState].body.stream);
+ }
+ get duplex() {
+ webidl.brandCheck(this, _Request);
+ return "half";
+ }
+ // Returns a clone of request.
+ clone() {
+ webidl.brandCheck(this, _Request);
+ if (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,
+ // https://w3c.github.io/webappsec-referrer-policy/#referrer-policy
+ allowedValues: referrerPolicy
+ },
+ {
+ key: "mode",
+ converter: webidl.converters.DOMString,
+ // https://fetch.spec.whatwg.org/#concept-request-mode
+ allowedValues: requestMode
+ },
+ {
+ key: "credentials",
+ converter: webidl.converters.DOMString,
+ // https://fetch.spec.whatwg.org/#requestcredentials
+ allowedValues: requestCredentials
+ },
+ {
+ key: "cache",
+ converter: webidl.converters.DOMString,
+ // https://fetch.spec.whatwg.org/#requestcache
+ allowedValues: requestCache
+ },
+ {
+ key: "redirect",
+ converter: webidl.converters.DOMString,
+ // https://fetch.spec.whatwg.org/#requestredirect
+ allowedValues: requestRedirect
+ },
+ {
+ key: "integrity",
+ converter: webidl.converters.DOMString
+ },
+ {
+ key: "keepalive",
+ converter: webidl.converters.boolean
+ },
+ {
+ key: "signal",
+ converter: webidl.nullableConverter(
+ (signal) => webidl.converters.AbortSignal(
+ signal,
+ { strict: false }
+ )
+ )
+ },
+ {
+ key: "window",
+ converter: webidl.converters.any
+ },
+ {
+ key: "duplex",
+ converter: webidl.converters.DOMString,
+ allowedValues: requestDuplex
+ }
+ ]);
+ module2.exports = { Request, makeRequest };
+ }
+});
+
+// node_modules/undici/lib/fetch/index.js
+var require_fetch = __commonJS({
+ "node_modules/undici/lib/fetch/index.js"(exports2, module2) {
+ "use strict";
+ var {
+ Response,
+ makeNetworkError,
+ makeAppropriateNetworkError,
+ filterResponse,
+ makeResponse
+ } = require_response();
+ var { Headers } = require_headers();
+ var { Request, makeRequest } = require_request2();
+ var zlib = require("zlib");
+ var {
+ bytesMatch,
+ makePolicyContainer,
+ clonePolicyContainer,
+ requestBadPort,
+ TAOCheck,
+ appendRequestOriginHeader,
+ responseLocationURL,
+ requestCurrentURL,
+ setRequestReferrerPolicyOnRedirect,
+ tryUpgradeRequestToAPotentiallyTrustworthyURL,
+ createOpaqueTimingInfo,
+ appendFetchMetadata,
+ corsCheck,
+ crossOriginResourcePolicyCheck,
+ determineRequestsReferrer,
+ coarsenedSharedCurrentTime,
+ createDeferredPromise,
+ isBlobLike,
+ sameOrigin,
+ isCancelled,
+ isAborted,
+ isErrorLike,
+ fullyReadBody,
+ readableStreamClose,
+ isomorphicEncode,
+ urlIsLocal,
+ urlIsHttpHttpsScheme,
+ urlHasHttpsScheme
+ } = require_util2();
+ var { kState, kHeaders, kGuard, kRealm } = require_symbols2();
+ var assert = require("assert");
+ var { safelyExtractBody } = require_body();
+ var {
+ redirectStatusSet,
+ nullBodyStatus,
+ safeMethodsSet,
+ requestBodyHeader,
+ subresourceSet,
+ DOMException: DOMException2
+ } = require_constants2();
+ var { kHeadersList } = require_symbols();
+ var EE = require("events");
+ var { Readable, pipeline } = require("stream");
+ var { addAbortListener, isErrored, isReadable, nodeMajor, nodeMinor } = require_util();
+ var { dataURLProcessor, serializeAMimeType } = require_dataURL();
+ var { TransformStream } = require("stream/web");
+ var { getGlobalDispatcher } = require_global2();
+ var { webidl } = require_webidl();
+ var { STATUS_CODES } = require("http");
+ var GET_OR_HEAD = ["GET", "HEAD"];
+ var resolveObjectURL;
+ var 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);
+ }
+ // https://fetch.spec.whatwg.org/#fetch-controller-abort
+ abort(error3) {
+ if (this.state !== "ongoing") {
+ return;
+ }
+ this.state = "aborted";
+ if (!error3) {
+ error3 = new DOMException2("The operation was aborted.", "AbortError");
+ }
+ this.serializedAbortReason = error3;
+ this.connection?.destroy(error3);
+ this.emit("terminated", error3);
+ }
+ };
+ 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;
+ }
+ const globalObject = request.client.globalObject;
+ if (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(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(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()
+ // undici
+ });
+ return p.promise;
+ }
+ function finalizeAndReportTiming(response, initiatorType = "other") {
+ if (response.type === "error" && response.aborted) {
+ return;
+ }
+ if (!response.urlList?.length) {
+ return;
+ }
+ const originalURL = response.urlList[0];
+ let timingInfo = response.timingInfo;
+ let cacheState = response.cacheState;
+ if (!urlIsHttpHttpsScheme(originalURL)) {
+ return;
+ }
+ if (timingInfo === null) {
+ return;
+ }
+ if (!response.timingAllowPassed) {
+ timingInfo = createOpaqueTimingInfo({
+ startTime: timingInfo.startTime
+ });
+ cacheState = "";
+ }
+ timingInfo.endTime = coarsenedSharedCurrentTime();
+ response.timingInfo = timingInfo;
+ markResourceTiming(
+ timingInfo,
+ originalURL,
+ initiatorType,
+ globalThis,
+ cacheState
+ );
+ }
+ function markResourceTiming(timingInfo, originalURL, initiatorType, globalThis2, cacheState) {
+ if (nodeMajor > 18 || nodeMajor === 18 && nodeMinor >= 2) {
+ performance.markResourceTiming(timingInfo, originalURL.href, initiatorType, globalThis2, cacheState);
+ }
+ }
+ function abortFetch(p, request, responseObject, error3) {
+ if (!error3) {
+ error3 = new DOMException2("The operation was aborted.", "AbortError");
+ }
+ p.reject(error3);
+ if (request.body != null && isReadable(request.body?.stream)) {
+ request.body.stream.cancel(error3).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(error3).catch((err) => {
+ if (err.code === "ERR_INVALID_STATE") {
+ return;
+ }
+ throw err;
+ });
+ }
+ }
+ function fetching({
+ request,
+ processRequestBodyChunkLength,
+ processRequestEndOfBody,
+ processResponse,
+ processResponseEndOfBody,
+ processResponseConsumeBody,
+ useParallelQueue = false,
+ dispatcher
+ // undici
+ }) {
+ let taskDestination = null;
+ let crossOriginIsolatedCapability = false;
+ if (request.client != null) {
+ taskDestination = request.client.globalObject;
+ crossOriginIsolatedCapability = request.client.crossOriginIsolatedCapability;
+ }
+ const currenTime = coarsenedSharedCurrentTime(crossOriginIsolatedCapability);
+ const timingInfo = createOpaqueTimingInfo({
+ startTime: currenTime
+ });
+ const fetchParams = {
+ controller: new Fetch(dispatcher),
+ request,
+ timingInfo,
+ processRequestBodyChunkLength,
+ processRequestEndOfBody,
+ processResponse,
+ processResponseConsumeBody,
+ processResponseEndOfBody,
+ taskDestination,
+ crossOriginIsolatedCapability
+ };
+ assert(!request.body || request.body.stream);
+ if (request.window === "client") {
+ request.window = request.client?.globalObject?.constructor?.name === "Window" ? request.client : "no-window";
+ }
+ if (request.origin === "client") {
+ request.origin = request.client?.origin;
+ }
+ if (request.policyContainer === "client") {
+ if (request.client != null) {
+ request.policyContainer = clonePolicyContainer(
+ request.client.policyContainer
+ );
+ } else {
+ request.policyContainer = makePolicyContainer();
+ }
+ }
+ if (!request.headersList.contains("accept")) {
+ const value = "*/*";
+ request.headersList.append("accept", value);
+ }
+ 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 (
+ // - request’s current URL’s origin is same origin with request’s origin,
+ // and request’s response tainting is "basic"
+ sameOrigin(currentURL, request.url) && request.responseTainting === "basic" || // request’s current URL’s scheme is "data"
+ currentURL.protocol === "data:" || // - request’s mode is "navigate" or "websocket"
+ (request.mode === "navigate" || request.mode === "websocket")
+ ) {
+ request.responseTainting = "basic";
+ return await schemeFetch(fetchParams);
+ }
+ if (request.mode === "same-origin") {
+ return makeNetworkError('request mode cannot be "same-origin"');
+ }
+ if (request.mode === "no-cors") {
+ if (request.redirect !== "follow") {
+ return makeNetworkError(
+ 'redirect mode cannot be "follow" for "no-cors" request'
+ );
+ }
+ request.responseTainting = "opaque";
+ return await schemeFetch(fetchParams);
+ }
+ if (!urlIsHttpHttpsScheme(requestCurrentURL(request))) {
+ return makeNetworkError("URL scheme must be a HTTP(S) scheme");
+ }
+ request.responseTainting = "cors";
+ return await httpFetch(fetchParams);
+ })();
+ }
+ if (recursive) {
+ return response;
+ }
+ if (response.status !== 0 && !response.internalResponse) {
+ if (request.responseTainting === "cors") {
+ }
+ if (request.responseTainting === "basic") {
+ response = filterResponse(response, "basic");
+ } else if (request.responseTainting === "cors") {
+ response = filterResponse(response, "cors");
+ } else if (request.responseTainting === "opaque") {
+ response = filterResponse(response, "opaque");
+ } else {
+ assert(false);
+ }
+ }
+ let internalResponse = response.status === 0 ? response : response.internalResponse;
+ if (internalResponse.urlList.length === 0) {
+ internalResponse.urlList.push(...request.urlList);
+ }
+ if (!request.timingAllowFailed) {
+ response.timingAllowPassed = true;
+ }
+ if (response.type === "opaque" && internalResponse.status === 206 && internalResponse.rangeRequested && !request.headers.contains("range")) {
+ 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 currentURL = requestCurrentURL(request);
+ const dataURLStruct = dataURLProcessor(currentURL);
+ if (dataURLStruct === "failure") {
+ return Promise.resolve(makeNetworkError("failed to fetch the data URL"));
+ }
+ const mimeType = serializeAMimeType(dataURLStruct.mimeType);
+ return Promise.resolve(makeResponse({
+ statusText: "OK",
+ headersList: [
+ ["content-type", { name: "Content-Type", value: mimeType }]
+ ],
+ body: safelyExtractBody(dataURLStruct.body)[0]
+ }));
+ }
+ case "file:": {
+ return Promise.resolve(makeNetworkError("not implemented... yet..."));
+ }
+ case "http:":
+ case "https:": {
+ return httpFetch(fetchParams).catch((err) => makeNetworkError(err));
+ }
+ default: {
+ return Promise.resolve(makeNetworkError("unknown scheme"));
+ }
+ }
+ }
+ function finalizeResponse(fetchParams, response) {
+ fetchParams.request.done = true;
+ if (fetchParams.processResponseDone != null) {
+ queueMicrotask(() => fetchParams.processResponseDone(response));
+ }
+ }
+ function fetchFinale(fetchParams, response) {
+ 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(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(request.body.source != null);
+ request.body = safelyExtractBody(request.body.source)[0];
+ }
+ const timingInfo = fetchParams.timingInfo;
+ timingInfo.redirectEndTime = timingInfo.postRedirectStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability);
+ if (timingInfo.redirectStartTime === 0) {
+ timingInfo.redirectStartTime = timingInfo.startTime;
+ }
+ request.urlList.push(locationURL);
+ setRequestReferrerPolicyOnRedirect(request, actualResponse);
+ return mainFetch(fetchParams, true);
+ }
+ async function httpNetworkOrCacheFetch(fetchParams, isAuthenticationFetch = false, isNewConnectionFetch = false) {
+ const request = fetchParams.request;
+ let httpFetchParams = null;
+ let httpRequest = null;
+ let response = null;
+ const httpCache = null;
+ const revalidatingFlag = false;
+ if (request.window === "no-window" && request.redirect === "error") {
+ httpFetchParams = fetchParams;
+ httpRequest = request;
+ } else {
+ httpRequest = 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 (revalidatingFlag && forwardResponse.status === 304) {
+ }
+ 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’s status is 421
+ response.status === 421 && // isNewConnectionFetch is false
+ !isNewConnectionFetch && // request’s body is null, or request’s body is non-null and request’s body’s source is non-null
+ (request.body == null || request.body.source != null)
+ ) {
+ if (isCancelled(fetchParams)) {
+ return makeAppropriateNetworkError(fetchParams);
+ }
+ fetchParams.controller.connection.destroy();
+ response = await httpNetworkOrCacheFetch(
+ fetchParams,
+ isAuthenticationFetch,
+ true
+ );
+ }
+ if (isAuthenticationFetch) {
+ }
+ return response;
+ }
+ async function httpNetworkFetch(fetchParams, includeCredentials = false, forceNewConnection = false) {
+ assert(!fetchParams.controller.connection || fetchParams.controller.connection.destroyed);
+ fetchParams.controller.connection = {
+ abort: null,
+ destroyed: false,
+ destroy(err) {
+ if (!this.destroyed) {
+ this.destroyed = true;
+ this.abort?.(err ?? new DOMException2("The operation was aborted.", "AbortError"));
+ }
+ }
+ };
+ const request = fetchParams.request;
+ let response = null;
+ const timingInfo = fetchParams.timingInfo;
+ const httpCache = null;
+ if (httpCache == null) {
+ request.cache = "no-store";
+ }
+ const newConnection = forceNewConnection ? "yes" : "no";
+ if (request.mode === "websocket") {
+ } else {
+ }
+ let requestBody = null;
+ if (request.body == null && fetchParams.processRequestEndOfBody) {
+ queueMicrotask(() => fetchParams.processRequestEndOfBody());
+ } else if (request.body != null) {
+ const processBodyChunk = async function* (bytes) {
+ if (isCancelled(fetchParams)) {
+ return;
+ }
+ yield bytes;
+ fetchParams.processRequestBodyChunkLength?.(bytes.byteLength);
+ };
+ const processEndOfBody = () => {
+ if (isCancelled(fetchParams)) {
+ return;
+ }
+ if (fetchParams.processRequestEndOfBody) {
+ fetchParams.processRequestEndOfBody();
+ }
+ };
+ const processBodyError = (e) => {
+ if (isCancelled(fetchParams)) {
+ return;
+ }
+ if (e.name === "AbortError") {
+ fetchParams.controller.abort();
+ } else {
+ fetchParams.controller.terminate(e);
+ }
+ };
+ requestBody = async function* () {
+ try {
+ for await (const bytes of request.body.stream) {
+ yield* processBodyChunk(bytes);
+ }
+ processEndOfBody();
+ } catch (err) {
+ processBodyError(err);
+ }
+ }();
+ }
+ try {
+ const { body, status, statusText, headersList, socket } = await dispatch({ body: requestBody });
+ if (socket) {
+ response = makeResponse({ status, statusText, headersList, socket });
+ } else {
+ const iterator = body[Symbol.asyncIterator]();
+ fetchParams.controller.next = () => iterator.next();
+ response = makeResponse({ status, statusText, headersList });
+ }
+ } catch (err) {
+ if (err.name === "AbortError") {
+ fetchParams.controller.connection.destroy();
+ return makeAppropriateNetworkError(fetchParams, err);
+ }
+ return makeNetworkError(err);
+ }
+ const pullAlgorithm = () => {
+ 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);
+ 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 DOMException2("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({
+ // Be less strict when decoding compressed responses, since sometimes
+ // servers send slightly invalid responses that are still accepted
+ // by common browsers.
+ // Always using Z_SYNC_FLUSH is what cURL does.
+ flush: zlib.constants.Z_SYNC_FLUSH,
+ finishFlush: zlib.constants.Z_SYNC_FLUSH
+ }));
+ } else if (coding === "deflate") {
+ decoders.push(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(error3) {
+ if (this.abort) {
+ fetchParams.controller.off("terminated", this.abort);
+ }
+ this.body?.destroy(error3);
+ fetchParams.controller.terminate(error3);
+ reject(error3);
+ },
+ 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;
+ }
+ }
+ ));
+ }
+ }
+ module2.exports = {
+ fetch,
+ Fetch,
+ fetching,
+ finalizeAndReportTiming
+ };
+ }
+});
+
+// node_modules/undici/lib/fileapi/symbols.js
+var require_symbols3 = __commonJS({
+ "node_modules/undici/lib/fileapi/symbols.js"(exports2, module2) {
+ "use strict";
+ module2.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")
+ };
+ }
+});
+
+// node_modules/undici/lib/fileapi/progressevent.js
+var require_progressevent = __commonJS({
+ "node_modules/undici/lib/fileapi/progressevent.js"(exports2, module2) {
+ "use strict";
+ var { webidl } = require_webidl();
+ var kState = Symbol("ProgressEvent state");
+ var ProgressEvent = class _ProgressEvent extends Event {
+ constructor(type, eventInitDict = {}) {
+ type = webidl.converters.DOMString(type);
+ 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
+ }
+ ]);
+ module2.exports = {
+ ProgressEvent
+ };
+ }
+});
+
+// node_modules/undici/lib/fileapi/encoding.js
+var require_encoding = __commonJS({
+ "node_modules/undici/lib/fileapi/encoding.js"(exports2, module2) {
+ "use strict";
+ function getEncoding(label) {
+ if (!label) {
+ return "failure";
+ }
+ switch (label.trim().toLowerCase()) {
+ case "unicode-1-1-utf-8":
+ case "unicode11utf8":
+ case "unicode20utf8":
+ case "utf-8":
+ case "utf8":
+ case "x-unicode20utf8":
+ return "UTF-8";
+ case "866":
+ case "cp866":
+ case "csibm866":
+ case "ibm866":
+ return "IBM866";
+ case "csisolatin2":
+ case "iso-8859-2":
+ case "iso-ir-101":
+ case "iso8859-2":
+ case "iso88592":
+ case "iso_8859-2":
+ case "iso_8859-2:1987":
+ case "l2":
+ case "latin2":
+ return "ISO-8859-2";
+ case "csisolatin3":
+ case "iso-8859-3":
+ case "iso-ir-109":
+ case "iso8859-3":
+ case "iso88593":
+ case "iso_8859-3":
+ case "iso_8859-3:1988":
+ case "l3":
+ case "latin3":
+ return "ISO-8859-3";
+ case "csisolatin4":
+ case "iso-8859-4":
+ case "iso-ir-110":
+ case "iso8859-4":
+ case "iso88594":
+ case "iso_8859-4":
+ case "iso_8859-4:1988":
+ case "l4":
+ case "latin4":
+ return "ISO-8859-4";
+ case "csisolatincyrillic":
+ case "cyrillic":
+ case "iso-8859-5":
+ case "iso-ir-144":
+ case "iso8859-5":
+ case "iso88595":
+ case "iso_8859-5":
+ case "iso_8859-5:1988":
+ return "ISO-8859-5";
+ case "arabic":
+ case "asmo-708":
+ case "csiso88596e":
+ case "csiso88596i":
+ case "csisolatinarabic":
+ case "ecma-114":
+ case "iso-8859-6":
+ case "iso-8859-6-e":
+ case "iso-8859-6-i":
+ case "iso-ir-127":
+ case "iso8859-6":
+ case "iso88596":
+ case "iso_8859-6":
+ case "iso_8859-6:1987":
+ return "ISO-8859-6";
+ case "csisolatingreek":
+ case "ecma-118":
+ case "elot_928":
+ case "greek":
+ case "greek8":
+ case "iso-8859-7":
+ case "iso-ir-126":
+ case "iso8859-7":
+ case "iso88597":
+ case "iso_8859-7":
+ case "iso_8859-7:1987":
+ case "sun_eu_greek":
+ return "ISO-8859-7";
+ case "csiso88598e":
+ case "csisolatinhebrew":
+ case "hebrew":
+ case "iso-8859-8":
+ case "iso-8859-8-e":
+ case "iso-ir-138":
+ case "iso8859-8":
+ case "iso88598":
+ case "iso_8859-8":
+ case "iso_8859-8:1988":
+ case "visual":
+ return "ISO-8859-8";
+ case "csiso88598i":
+ case "iso-8859-8-i":
+ case "logical":
+ return "ISO-8859-8-I";
+ case "csisolatin6":
+ case "iso-8859-10":
+ case "iso-ir-157":
+ case "iso8859-10":
+ case "iso885910":
+ case "l6":
+ case "latin6":
+ return "ISO-8859-10";
+ case "iso-8859-13":
+ case "iso8859-13":
+ case "iso885913":
+ return "ISO-8859-13";
+ case "iso-8859-14":
+ case "iso8859-14":
+ case "iso885914":
+ return "ISO-8859-14";
+ case "csisolatin9":
+ case "iso-8859-15":
+ case "iso8859-15":
+ case "iso885915":
+ case "iso_8859-15":
+ case "l9":
+ return "ISO-8859-15";
+ case "iso-8859-16":
+ return "ISO-8859-16";
+ case "cskoi8r":
+ case "koi":
+ case "koi8":
+ case "koi8-r":
+ case "koi8_r":
+ return "KOI8-R";
+ case "koi8-ru":
+ case "koi8-u":
+ return "KOI8-U";
+ case "csmacintosh":
+ case "mac":
+ case "macintosh":
+ case "x-mac-roman":
+ return "macintosh";
+ case "iso-8859-11":
+ case "iso8859-11":
+ case "iso885911":
+ case "tis-620":
+ case "windows-874":
+ return "windows-874";
+ case "cp1250":
+ case "windows-1250":
+ case "x-cp1250":
+ return "windows-1250";
+ case "cp1251":
+ case "windows-1251":
+ case "x-cp1251":
+ return "windows-1251";
+ case "ansi_x3.4-1968":
+ case "ascii":
+ case "cp1252":
+ case "cp819":
+ case "csisolatin1":
+ case "ibm819":
+ case "iso-8859-1":
+ case "iso-ir-100":
+ case "iso8859-1":
+ case "iso88591":
+ case "iso_8859-1":
+ case "iso_8859-1:1987":
+ case "l1":
+ case "latin1":
+ case "us-ascii":
+ case "windows-1252":
+ case "x-cp1252":
+ return "windows-1252";
+ case "cp1253":
+ case "windows-1253":
+ case "x-cp1253":
+ return "windows-1253";
+ case "cp1254":
+ case "csisolatin5":
+ case "iso-8859-9":
+ case "iso-ir-148":
+ case "iso8859-9":
+ case "iso88599":
+ case "iso_8859-9":
+ case "iso_8859-9:1989":
+ case "l5":
+ case "latin5":
+ case "windows-1254":
+ case "x-cp1254":
+ return "windows-1254";
+ case "cp1255":
+ case "windows-1255":
+ case "x-cp1255":
+ return "windows-1255";
+ case "cp1256":
+ case "windows-1256":
+ case "x-cp1256":
+ return "windows-1256";
+ case "cp1257":
+ case "windows-1257":
+ case "x-cp1257":
+ return "windows-1257";
+ case "cp1258":
+ case "windows-1258":
+ case "x-cp1258":
+ return "windows-1258";
+ case "x-mac-cyrillic":
+ case "x-mac-ukrainian":
+ return "x-mac-cyrillic";
+ case "chinese":
+ case "csgb2312":
+ case "csiso58gb231280":
+ case "gb2312":
+ case "gb_2312":
+ case "gb_2312-80":
+ case "gbk":
+ case "iso-ir-58":
+ case "x-gbk":
+ return "GBK";
+ case "gb18030":
+ return "gb18030";
+ case "big5":
+ case "big5-hkscs":
+ case "cn-big5":
+ case "csbig5":
+ case "x-x-big5":
+ return "Big5";
+ case "cseucpkdfmtjapanese":
+ case "euc-jp":
+ case "x-euc-jp":
+ return "EUC-JP";
+ case "csiso2022jp":
+ case "iso-2022-jp":
+ return "ISO-2022-JP";
+ case "csshiftjis":
+ case "ms932":
+ case "ms_kanji":
+ case "shift-jis":
+ case "shift_jis":
+ case "sjis":
+ case "windows-31j":
+ case "x-sjis":
+ return "Shift_JIS";
+ case "cseuckr":
+ case "csksc56011987":
+ case "euc-kr":
+ case "iso-ir-149":
+ case "korean":
+ case "ks_c_5601-1987":
+ case "ks_c_5601-1989":
+ case "ksc5601":
+ case "ksc_5601":
+ case "windows-949":
+ return "EUC-KR";
+ case "csiso2022kr":
+ case "hz-gb-2312":
+ case "iso-2022-cn":
+ case "iso-2022-cn-ext":
+ case "iso-2022-kr":
+ case "replacement":
+ return "replacement";
+ case "unicodefffe":
+ case "utf-16be":
+ return "UTF-16BE";
+ case "csunicode":
+ case "iso-10646-ucs-2":
+ case "ucs-2":
+ case "unicode":
+ case "unicodefeff":
+ case "utf-16":
+ case "utf-16le":
+ return "UTF-16LE";
+ case "x-user-defined":
+ return "x-user-defined";
+ default:
+ return "failure";
+ }
+ }
+ module2.exports = {
+ getEncoding
+ };
+ }
+});
+
+// node_modules/undici/lib/fileapi/util.js
+var require_util4 = __commonJS({
+ "node_modules/undici/lib/fileapi/util.js"(exports2, module2) {
+ "use strict";
+ var {
+ kState,
+ kError,
+ kResult,
+ kAborted,
+ kLastProgressEventFired
+ } = require_symbols3();
+ var { ProgressEvent } = require_progressevent();
+ var { getEncoding } = require_encoding();
+ var { DOMException: DOMException2 } = require_constants2();
+ var { serializeAMimeType, parseMIMEType } = require_dataURL();
+ var { types } = require("util");
+ var { StringDecoder } = require("string_decoder");
+ var { btoa: btoa2 } = require("buffer");
+ var staticPropertyDescriptors = {
+ enumerable: true,
+ writable: false,
+ configurable: false
+ };
+ function readOperation(fr, blob, type, encodingName) {
+ if (fr[kState] === "loading") {
+ throw new DOMException2("Invalid state", "InvalidStateError");
+ }
+ fr[kState] = "loading";
+ fr[kResult] = null;
+ fr[kError] = null;
+ const stream = blob.stream();
+ const reader = stream.getReader();
+ const bytes = [];
+ let chunkPromise = reader.read();
+ let isFirstChunk = true;
+ (async () => {
+ while (!fr[kAborted]) {
+ try {
+ const { done, value } = await chunkPromise;
+ if (isFirstChunk && !fr[kAborted]) {
+ queueMicrotask(() => {
+ fireAProgressEvent("loadstart", fr);
+ });
+ }
+ isFirstChunk = false;
+ if (!done && types.isUint8Array(value)) {
+ bytes.push(value);
+ if ((fr[kLastProgressEventFired] === void 0 || Date.now() - fr[kLastProgressEventFired] >= 50) && !fr[kAborted]) {
+ fr[kLastProgressEventFired] = Date.now();
+ queueMicrotask(() => {
+ fireAProgressEvent("progress", fr);
+ });
+ }
+ chunkPromise = reader.read();
+ } else if (done) {
+ queueMicrotask(() => {
+ fr[kState] = "done";
+ try {
+ const result = packageData(bytes, type, blob.type, encodingName);
+ if (fr[kAborted]) {
+ return;
+ }
+ fr[kResult] = result;
+ fireAProgressEvent("load", fr);
+ } catch (error3) {
+ fr[kError] = error3;
+ fireAProgressEvent("error", fr);
+ }
+ if (fr[kState] !== "loading") {
+ fireAProgressEvent("loadend", fr);
+ }
+ });
+ break;
+ }
+ } catch (error3) {
+ if (fr[kAborted]) {
+ return;
+ }
+ queueMicrotask(() => {
+ fr[kState] = "done";
+ fr[kError] = error3;
+ fireAProgressEvent("error", fr);
+ if (fr[kState] !== "loading") {
+ fireAProgressEvent("loadend", fr);
+ }
+ });
+ break;
+ }
+ }
+ })();
+ }
+ function fireAProgressEvent(e, reader) {
+ const event = new ProgressEvent(e, {
+ bubbles: false,
+ cancelable: false
+ });
+ reader.dispatchEvent(event);
+ }
+ function packageData(bytes, type, mimeType, encodingName) {
+ switch (type) {
+ case "DataURL": {
+ let dataURL = "data:";
+ const parsed = parseMIMEType(mimeType || "application/octet-stream");
+ if (parsed !== "failure") {
+ dataURL += serializeAMimeType(parsed);
+ }
+ dataURL += ";base64,";
+ const decoder = new StringDecoder("latin1");
+ for (const chunk of bytes) {
+ dataURL += btoa2(decoder.write(chunk));
+ }
+ dataURL += btoa2(decoder.end());
+ return dataURL;
+ }
+ case "Text": {
+ let encoding = "failure";
+ if (encodingName) {
+ encoding = getEncoding(encodingName);
+ }
+ if (encoding === "failure" && mimeType) {
+ const type2 = parseMIMEType(mimeType);
+ if (type2 !== "failure") {
+ encoding = getEncoding(type2.parameters.get("charset"));
+ }
+ }
+ if (encoding === "failure") {
+ encoding = "UTF-8";
+ }
+ return decode(bytes, encoding);
+ }
+ case "ArrayBuffer": {
+ const sequence = combineByteSequences(bytes);
+ return sequence.buffer;
+ }
+ case "BinaryString": {
+ let binaryString = "";
+ const decoder = new StringDecoder("latin1");
+ for (const chunk of bytes) {
+ binaryString += decoder.write(chunk);
+ }
+ binaryString += decoder.end();
+ return binaryString;
+ }
+ }
+ }
+ function decode(ioQueue, encoding) {
+ const bytes = combineByteSequences(ioQueue);
+ const BOMEncoding = BOMSniffing(bytes);
+ let slice = 0;
+ if (BOMEncoding !== null) {
+ encoding = BOMEncoding;
+ slice = BOMEncoding === "UTF-8" ? 3 : 2;
+ }
+ const sliced = bytes.slice(slice);
+ return new TextDecoder(encoding).decode(sliced);
+ }
+ function BOMSniffing(ioQueue) {
+ const [a, b, c] = ioQueue;
+ if (a === 239 && b === 187 && c === 191) {
+ return "UTF-8";
+ } else if (a === 254 && b === 255) {
+ return "UTF-16BE";
+ } else if (a === 255 && b === 254) {
+ return "UTF-16LE";
+ }
+ return null;
+ }
+ function combineByteSequences(sequences) {
+ const size = sequences.reduce((a, b) => {
+ return a + b.byteLength;
+ }, 0);
+ let offset = 0;
+ return sequences.reduce((a, b) => {
+ a.set(b, offset);
+ offset += b.byteLength;
+ return a;
+ }, new Uint8Array(size));
+ }
+ module2.exports = {
+ staticPropertyDescriptors,
+ readOperation,
+ fireAProgressEvent
+ };
+ }
+});
+
+// node_modules/undici/lib/fileapi/filereader.js
+var require_filereader = __commonJS({
+ "node_modules/undici/lib/fileapi/filereader.js"(exports2, module2) {
+ "use strict";
+ var {
+ staticPropertyDescriptors,
+ readOperation,
+ fireAProgressEvent
+ } = require_util4();
+ var {
+ kState,
+ kError,
+ kResult,
+ kEvents,
+ kAborted
+ } = require_symbols3();
+ var { webidl } = require_webidl();
+ var { kEnumerableProperty } = require_util();
+ var FileReader = class _FileReader extends EventTarget {
+ constructor() {
+ super();
+ this[kState] = "empty";
+ this[kResult] = null;
+ this[kError] = null;
+ this[kEvents] = {
+ loadend: null,
+ error: null,
+ abort: null,
+ load: null,
+ progress: null,
+ loadstart: null
+ };
+ }
+ /**
+ * @see https://w3c.github.io/FileAPI/#dfn-readAsArrayBuffer
+ * @param {import('buffer').Blob} blob
+ */
+ readAsArrayBuffer(blob) {
+ webidl.brandCheck(this, _FileReader);
+ webidl.argumentLengthCheck(arguments, 1, { 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
+ });
+ module2.exports = {
+ FileReader
+ };
+ }
+});
+
+// node_modules/undici/lib/cache/symbols.js
+var require_symbols4 = __commonJS({
+ "node_modules/undici/lib/cache/symbols.js"(exports2, module2) {
+ "use strict";
+ module2.exports = {
+ kConstruct: require_symbols().kConstruct
+ };
+ }
+});
+
+// node_modules/undici/lib/cache/util.js
+var require_util5 = __commonJS({
+ "node_modules/undici/lib/cache/util.js"(exports2, module2) {
+ "use strict";
+ var assert = require("assert");
+ var { URLSerializer } = require_dataURL();
+ var { isValidHeaderName } = require_util2();
+ function urlEquals(A, B, excludeFragment = false) {
+ const serializedA = URLSerializer(A, excludeFragment);
+ const serializedB = URLSerializer(B, excludeFragment);
+ return serializedA === serializedB;
+ }
+ function fieldValues(header) {
+ assert(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;
+ }
+ module2.exports = {
+ urlEquals,
+ fieldValues
+ };
+ }
+});
+
+// node_modules/undici/lib/cache/cache.js
+var require_cache = __commonJS({
+ "node_modules/undici/lib/cache/cache.js"(exports2, module2) {
+ "use strict";
+ var { kConstruct } = require_symbols4();
+ var { urlEquals, fieldValues: getFieldValues } = require_util5();
+ var { kEnumerableProperty, isDisturbed } = require_util();
+ var { kHeadersList } = require_symbols();
+ var { webidl } = require_webidl();
+ var { Response, cloneResponse } = require_response();
+ var { Request } = require_request2();
+ var { kState, kHeaders, kGuard, kRealm } = require_symbols2();
+ var { fetching } = require_fetch();
+ var { urlIsHttpHttpsScheme, createDeferredPromise, readAllBytes } = require_util2();
+ var assert = require("assert");
+ var { getGlobalDispatcher } = require_global2();
+ 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];
+ const responseArrayPromise = this.addAll(requests);
+ return await responseArrayPromise;
+ }
+ 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."
+ });
+ }
+ }
+ 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 p = Promise.all(responsePromises);
+ const responses = await p;
+ const operations = [];
+ let index = 0;
+ for (const response of responses) {
+ const operation = {
+ type: "put",
+ // 7.3.2
+ request: requestList[index],
+ // 7.3.3
+ response
+ // 7.3.4
+ };
+ operations.push(operation);
+ index++;
+ }
+ const cacheJobPromise = createDeferredPromise();
+ let errorData = null;
+ try {
+ this.#batchCacheOperations(operations);
+ } catch (e) {
+ errorData = e;
+ }
+ queueMicrotask(() => {
+ if (errorData === null) {
+ cacheJobPromise.resolve(void 0);
+ } else {
+ cacheJobPromise.reject(errorData);
+ }
+ });
+ return cacheJobPromise.promise;
+ }
+ async put(request, response) {
+ webidl.brandCheck(this, _Cache);
+ 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) {
+ const stream = innerResponse.body.stream;
+ const reader = stream.getReader();
+ readAllBytes(reader).then(bodyReadPromise.resolve, bodyReadPromise.reject);
+ } else {
+ bodyReadPromise.resolve(void 0);
+ }
+ const operations = [];
+ const operation = {
+ type: "put",
+ // 14.
+ request: innerRequest,
+ // 15.
+ response: clonedResponse
+ // 16.
+ };
+ operations.push(operation);
+ const bytes = await bodyReadPromise.promise;
+ if (clonedResponse.body != null) {
+ clonedResponse.body.source = bytes;
+ }
+ const cacheJobPromise = createDeferredPromise();
+ let errorData = null;
+ try {
+ this.#batchCacheOperations(operations);
+ } catch (e) {
+ errorData = e;
+ }
+ queueMicrotask(() => {
+ if (errorData === null) {
+ cacheJobPromise.resolve();
+ } else {
+ cacheJobPromise.reject(errorData);
+ }
+ });
+ return cacheJobPromise.promise;
+ }
+ async delete(request, options = {}) {
+ webidl.brandCheck(this, _Cache);
+ webidl.argumentLengthCheck(arguments, 1, { header: "Cache.delete" });
+ request = webidl.converters.RequestInfo(request);
+ options = webidl.converters.CacheQueryOptions(options);
+ let r = null;
+ if (request instanceof Request) {
+ r = request[kState];
+ if (r.method !== "GET" && !options.ignoreMethod) {
+ return false;
+ }
+ } else {
+ assert(typeof request === "string");
+ r = new Request(request)[kState];
+ }
+ const operations = [];
+ const operation = {
+ type: "delete",
+ request: r,
+ options
+ };
+ operations.push(operation);
+ const cacheJobPromise = createDeferredPromise();
+ let errorData = null;
+ let requestResponses;
+ try {
+ requestResponses = this.#batchCacheOperations(operations);
+ } catch (e) {
+ errorData = e;
+ }
+ queueMicrotask(() => {
+ if (errorData === null) {
+ cacheJobPromise.resolve(!!requestResponses?.length);
+ } else {
+ cacheJobPromise.reject(errorData);
+ }
+ });
+ return cacheJobPromise.promise;
+ }
+ /**
+ * @see https://w3c.github.io/ServiceWorker/#dom-cache-keys
+ * @param {any} request
+ * @param {import('../../types/cache').CacheQueryOptions} options
+ * @returns {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 request2 of requests) {
+ const requestObject = new Request("https://a");
+ requestObject[kState] = request2;
+ requestObject[kHeaders][kHeadersList] = request2.headersList;
+ requestObject[kHeaders][kGuard] = "immutable";
+ requestObject[kRealm] = request2.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(idx !== -1);
+ cache.splice(idx, 1);
+ }
+ } else if (operation.type === "put") {
+ if (operation.response == null) {
+ throw webidl.errors.exception({
+ header: "Cache.#batchCacheOperations",
+ message: "put operation should have an associated response"
+ });
+ }
+ const r = operation.request;
+ if (!urlIsHttpHttpsScheme(r.url)) {
+ throw webidl.errors.exception({
+ header: "Cache.#batchCacheOperations",
+ message: "expected http or https scheme"
+ });
+ }
+ if (r.method !== "GET") {
+ throw webidl.errors.exception({
+ header: "Cache.#batchCacheOperations",
+ message: "not get method"
+ });
+ }
+ if (operation.options != null) {
+ throw webidl.errors.exception({
+ header: "Cache.#batchCacheOperations",
+ message: "options must not be defined"
+ });
+ }
+ requestResponses = this.#queryCache(operation.request);
+ for (const requestResponse of requestResponses) {
+ const idx = cache.indexOf(requestResponse);
+ assert(idx !== -1);
+ cache.splice(idx, 1);
+ }
+ cache.push([operation.request, operation.response]);
+ addedItems.push([operation.request, operation.response]);
+ }
+ resultList.push([operation.request, operation.response]);
+ }
+ return resultList;
+ } catch (e) {
+ this.#relevantRequestResponseList.length = 0;
+ this.#relevantRequestResponseList = backupCache;
+ throw e;
+ }
+ }
+ /**
+ * @see https://w3c.github.io/ServiceWorker/#query-cache
+ * @param {any} requestQuery
+ * @param {import('../../types/cache').CacheQueryOptions} options
+ * @param {requestResponseList} targetStorage
+ * @returns {requestResponseList}
+ */
+ #queryCache(requestQuery, options, targetStorage) {
+ const resultList = [];
+ const storage = targetStorage ?? this.#relevantRequestResponseList;
+ for (const requestResponse of storage) {
+ const [cachedRequest, cachedResponse] = requestResponse;
+ if (this.#requestMatchesCachedItem(requestQuery, cachedRequest, cachedResponse, options)) {
+ resultList.push(requestResponse);
+ }
+ }
+ return resultList;
+ }
+ /**
+ * @see https://w3c.github.io/ServiceWorker/#request-matches-cached-item-algorithm
+ * @param {any} requestQuery
+ * @param {any} request
+ * @param {any | null} response
+ * @param {import('../../types/cache').CacheQueryOptions | undefined} options
+ * @returns {boolean}
+ */
+ #requestMatchesCachedItem(requestQuery, request, response = null, options) {
+ const queryURL = new URL(requestQuery.url);
+ const cachedURL = new URL(request.url);
+ if (options?.ignoreSearch) {
+ cachedURL.search = "";
+ queryURL.search = "";
+ }
+ if (!urlEquals(queryURL, cachedURL, true)) {
+ return false;
+ }
+ if (response == null || options?.ignoreVary || !response.headersList.contains("vary")) {
+ return true;
+ }
+ const fieldValues = getFieldValues(response.headersList.get("vary"));
+ for (const fieldValue of fieldValues) {
+ if (fieldValue === "*") {
+ return false;
+ }
+ const requestValue = request.headersList.get(fieldValue);
+ const queryValue = requestQuery.headersList.get(fieldValue);
+ if (requestValue !== queryValue) {
+ return false;
+ }
+ }
+ return true;
+ }
+ };
+ Object.defineProperties(Cache.prototype, {
+ [Symbol.toStringTag]: {
+ value: "Cache",
+ configurable: true
+ },
+ match: kEnumerableProperty,
+ matchAll: kEnumerableProperty,
+ add: kEnumerableProperty,
+ addAll: kEnumerableProperty,
+ put: kEnumerableProperty,
+ delete: kEnumerableProperty,
+ keys: kEnumerableProperty
+ });
+ var cacheQueryOptionConverters = [
+ {
+ key: "ignoreSearch",
+ converter: webidl.converters.boolean,
+ defaultValue: false
+ },
+ {
+ key: "ignoreMethod",
+ converter: webidl.converters.boolean,
+ defaultValue: false
+ },
+ {
+ key: "ignoreVary",
+ converter: webidl.converters.boolean,
+ defaultValue: false
+ }
+ ];
+ webidl.converters.CacheQueryOptions = webidl.dictionaryConverter(cacheQueryOptionConverters);
+ webidl.converters.MultiCacheQueryOptions = webidl.dictionaryConverter([
+ ...cacheQueryOptionConverters,
+ {
+ key: "cacheName",
+ converter: webidl.converters.DOMString
+ }
+ ]);
+ webidl.converters.Response = webidl.interfaceConverter(Response);
+ webidl.converters["sequence"] = webidl.sequenceConverter(
+ webidl.converters.RequestInfo
+ );
+ module2.exports = {
+ Cache
+ };
+ }
+});
+
+// node_modules/undici/lib/cache/cachestorage.js
+var require_cachestorage = __commonJS({
+ "node_modules/undici/lib/cache/cachestorage.js"(exports2, module2) {
+ "use strict";
+ var { kConstruct } = require_symbols4();
+ var { Cache } = require_cache();
+ var { webidl } = require_webidl();
+ var { kEnumerableProperty } = require_util();
+ var CacheStorage = class _CacheStorage {
+ /**
+ * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-name-to-cache-map
+ * @type {Map}
+ */
+ async has(cacheName) {
+ webidl.brandCheck(this, _CacheStorage);
+ 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)) {
+ const cache2 = this.#caches.get(cacheName);
+ return new Cache(kConstruct, cache2);
+ }
+ const cache = [];
+ this.#caches.set(cacheName, cache);
+ return new Cache(kConstruct, cache);
+ }
+ /**
+ * @see https://w3c.github.io/ServiceWorker/#cache-storage-delete
+ * @param {string} cacheName
+ * @returns {Promise}
+ */
+ async delete(cacheName) {
+ webidl.brandCheck(this, _CacheStorage);
+ 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);
+ const keys = this.#caches.keys();
+ return [...keys];
+ }
+ };
+ Object.defineProperties(CacheStorage.prototype, {
+ [Symbol.toStringTag]: {
+ value: "CacheStorage",
+ configurable: true
+ },
+ match: kEnumerableProperty,
+ has: kEnumerableProperty,
+ open: kEnumerableProperty,
+ delete: kEnumerableProperty,
+ keys: kEnumerableProperty
+ });
+ module2.exports = {
+ CacheStorage
+ };
+ }
+});
+
+// node_modules/undici/lib/cookies/constants.js
+var require_constants4 = __commonJS({
+ "node_modules/undici/lib/cookies/constants.js"(exports2, module2) {
+ "use strict";
+ var maxAttributeValueSize = 1024;
+ var maxNameValuePairSize = 4096;
+ module2.exports = {
+ maxAttributeValueSize,
+ maxNameValuePairSize
+ };
+ }
+});
+
+// node_modules/undici/lib/cookies/util.js
+var require_util6 = __commonJS({
+ "node_modules/undici/lib/cookies/util.js"(exports2, module2) {
+ "use strict";
+ var assert = require("assert");
+ var { kHeadersList } = require_symbols();
+ 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;
+ }
+ }
+ }
+ 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");
+ }
+ }
+ }
+ function validateCookieValue(value) {
+ for (const char of value) {
+ const code = char.charCodeAt(0);
+ if (code < 33 || // exclude CTLs (0-31)
+ code === 34 || code === 44 || code === 59 || code === 92 || code > 126) {
+ throw new Error("Invalid header value");
+ }
+ }
+ }
+ function validateCookiePath(path5) {
+ for (const char of path5) {
+ const code = char.charCodeAt(0);
+ if (code < 33 || char === ";") {
+ throw new Error("Invalid cookie path");
+ }
+ }
+ }
+ function validateCookieDomain(domain) {
+ if (domain.startsWith("-") || domain.endsWith(".") || domain.endsWith("-")) {
+ throw new Error("Invalid cookie domain");
+ }
+ }
+ function toIMFDate(date) {
+ if (typeof date === "number") {
+ date = new Date(date);
+ }
+ const days = [
+ "Sun",
+ "Mon",
+ "Tue",
+ "Wed",
+ "Thu",
+ "Fri",
+ "Sat"
+ ];
+ const months = [
+ "Jan",
+ "Feb",
+ "Mar",
+ "Apr",
+ "May",
+ "Jun",
+ "Jul",
+ "Aug",
+ "Sep",
+ "Oct",
+ "Nov",
+ "Dec"
+ ];
+ const dayName = days[date.getUTCDay()];
+ const day = date.getUTCDate().toString().padStart(2, "0");
+ const month = months[date.getUTCMonth()];
+ const year = date.getUTCFullYear();
+ const hour = date.getUTCHours().toString().padStart(2, "0");
+ const minute = date.getUTCMinutes().toString().padStart(2, "0");
+ const second = date.getUTCSeconds().toString().padStart(2, "0");
+ return `${dayName}, ${day} ${month} ${year} ${hour}:${minute}:${second} GMT`;
+ }
+ function validateCookieMaxAge(maxAge) {
+ if (maxAge < 0) {
+ throw new Error("Invalid cookie max-age");
+ }
+ }
+ function stringify(cookie) {
+ if (cookie.name.length === 0) {
+ return null;
+ }
+ validateCookieName(cookie.name);
+ validateCookieValue(cookie.value);
+ const out = [`${cookie.name}=${cookie.value}`];
+ if (cookie.name.startsWith("__Secure-")) {
+ cookie.secure = true;
+ }
+ if (cookie.name.startsWith("__Host-")) {
+ cookie.secure = true;
+ cookie.domain = null;
+ cookie.path = "/";
+ }
+ if (cookie.secure) {
+ out.push("Secure");
+ }
+ if (cookie.httpOnly) {
+ out.push("HttpOnly");
+ }
+ if (typeof cookie.maxAge === "number") {
+ validateCookieMaxAge(cookie.maxAge);
+ out.push(`Max-Age=${cookie.maxAge}`);
+ }
+ if (cookie.domain) {
+ validateCookieDomain(cookie.domain);
+ out.push(`Domain=${cookie.domain}`);
+ }
+ if (cookie.path) {
+ validateCookiePath(cookie.path);
+ out.push(`Path=${cookie.path}`);
+ }
+ if (cookie.expires && cookie.expires.toString() !== "Invalid Date") {
+ out.push(`Expires=${toIMFDate(cookie.expires)}`);
+ }
+ if (cookie.sameSite) {
+ out.push(`SameSite=${cookie.sameSite}`);
+ }
+ for (const part of cookie.unparsed) {
+ if (!part.includes("=")) {
+ throw new Error("Invalid unparsed");
+ }
+ const [key, ...value] = part.split("=");
+ out.push(`${key.trim()}=${value.join("=")}`);
+ }
+ return out.join("; ");
+ }
+ var kHeadersListNode;
+ function getHeadersList(headers) {
+ if (headers[kHeadersList]) {
+ return headers[kHeadersList];
+ }
+ if (!kHeadersListNode) {
+ kHeadersListNode = Object.getOwnPropertySymbols(headers).find(
+ (symbol) => symbol.description === "headers list"
+ );
+ assert(kHeadersListNode, "Headers cannot be parsed");
+ }
+ const headersList = headers[kHeadersListNode];
+ assert(headersList);
+ return headersList;
+ }
+ module2.exports = {
+ isCTLExcludingHtab,
+ stringify,
+ getHeadersList
+ };
+ }
+});
+
+// node_modules/undici/lib/cookies/parse.js
+var require_parse = __commonJS({
+ "node_modules/undici/lib/cookies/parse.js"(exports2, module2) {
+ "use strict";
+ var { maxNameValuePairSize, maxAttributeValueSize } = require_constants4();
+ var { isCTLExcludingHtab } = require_util6();
+ var { collectASequenceOfCodePointsFast } = require_dataURL();
+ var assert = require("assert");
+ function parseSetCookie(header) {
+ if (isCTLExcludingHtab(header)) {
+ return null;
+ }
+ let nameValuePair = "";
+ let unparsedAttributes = "";
+ let name = "";
+ let value = "";
+ if (header.includes(";")) {
+ const position = { position: 0 };
+ nameValuePair = collectASequenceOfCodePointsFast(";", header, position);
+ unparsedAttributes = header.slice(position.position);
+ } else {
+ nameValuePair = header;
+ }
+ if (!nameValuePair.includes("=")) {
+ value = nameValuePair;
+ } else {
+ const position = { position: 0 };
+ name = collectASequenceOfCodePointsFast(
+ "=",
+ nameValuePair,
+ position
+ );
+ value = nameValuePair.slice(position.position + 1);
+ }
+ name = name.trim();
+ value = value.trim();
+ if (name.length + value.length > maxNameValuePairSize) {
+ return null;
+ }
+ return {
+ name,
+ value,
+ ...parseUnparsedAttributes(unparsedAttributes)
+ };
+ }
+ function parseUnparsedAttributes(unparsedAttributes, cookieAttributeList = {}) {
+ if (unparsedAttributes.length === 0) {
+ return cookieAttributeList;
+ }
+ assert(unparsedAttributes[0] === ";");
+ unparsedAttributes = unparsedAttributes.slice(1);
+ let cookieAv = "";
+ if (unparsedAttributes.includes(";")) {
+ cookieAv = collectASequenceOfCodePointsFast(
+ ";",
+ unparsedAttributes,
+ { position: 0 }
+ );
+ unparsedAttributes = unparsedAttributes.slice(cookieAv.length);
+ } else {
+ cookieAv = unparsedAttributes;
+ unparsedAttributes = "";
+ }
+ let attributeName = "";
+ let attributeValue = "";
+ if (cookieAv.includes("=")) {
+ const position = { position: 0 };
+ attributeName = collectASequenceOfCodePointsFast(
+ "=",
+ cookieAv,
+ position
+ );
+ attributeValue = cookieAv.slice(position.position + 1);
+ } else {
+ attributeName = cookieAv;
+ }
+ attributeName = attributeName.trim();
+ attributeValue = attributeValue.trim();
+ if (attributeValue.length > maxAttributeValueSize) {
+ return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList);
+ }
+ const attributeNameLowercase = attributeName.toLowerCase();
+ if (attributeNameLowercase === "expires") {
+ const expiryTime = new Date(attributeValue);
+ cookieAttributeList.expires = expiryTime;
+ } else if (attributeNameLowercase === "max-age") {
+ const charCode = attributeValue.charCodeAt(0);
+ if ((charCode < 48 || charCode > 57) && attributeValue[0] !== "-") {
+ return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList);
+ }
+ if (!/^\d+$/.test(attributeValue)) {
+ return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList);
+ }
+ const deltaSeconds = Number(attributeValue);
+ cookieAttributeList.maxAge = deltaSeconds;
+ } else if (attributeNameLowercase === "domain") {
+ let cookieDomain = attributeValue;
+ if (cookieDomain[0] === ".") {
+ cookieDomain = cookieDomain.slice(1);
+ }
+ cookieDomain = cookieDomain.toLowerCase();
+ cookieAttributeList.domain = cookieDomain;
+ } else if (attributeNameLowercase === "path") {
+ let cookiePath = "";
+ if (attributeValue.length === 0 || attributeValue[0] !== "/") {
+ cookiePath = "/";
+ } else {
+ cookiePath = attributeValue;
+ }
+ cookieAttributeList.path = cookiePath;
+ } else if (attributeNameLowercase === "secure") {
+ cookieAttributeList.secure = true;
+ } else if (attributeNameLowercase === "httponly") {
+ cookieAttributeList.httpOnly = true;
+ } else if (attributeNameLowercase === "samesite") {
+ let enforcement = "Default";
+ const attributeValueLowercase = attributeValue.toLowerCase();
+ if (attributeValueLowercase.includes("none")) {
+ enforcement = "None";
+ }
+ if (attributeValueLowercase.includes("strict")) {
+ enforcement = "Strict";
+ }
+ if (attributeValueLowercase.includes("lax")) {
+ enforcement = "Lax";
+ }
+ cookieAttributeList.sameSite = enforcement;
+ } else {
+ cookieAttributeList.unparsed ??= [];
+ cookieAttributeList.unparsed.push(`${attributeName}=${attributeValue}`);
+ }
+ return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList);
+ }
+ module2.exports = {
+ parseSetCookie,
+ parseUnparsedAttributes
+ };
+ }
+});
+
+// node_modules/undici/lib/cookies/index.js
+var require_cookies = __commonJS({
+ "node_modules/undici/lib/cookies/index.js"(exports2, module2) {
+ "use strict";
+ var { parseSetCookie } = require_parse();
+ var { stringify, getHeadersList } = require_util6();
+ var { webidl } = require_webidl();
+ var { Headers } = require_headers();
+ 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;
+ }
+ 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
+ });
+ }
+ function getSetCookies(headers) {
+ webidl.argumentLengthCheck(arguments, 1, { header: "getSetCookies" });
+ webidl.brandCheck(headers, Headers, { strict: false });
+ const cookies = getHeadersList(headers).cookies;
+ if (!cookies) {
+ return [];
+ }
+ return cookies.map((pair) => parseSetCookie(Array.isArray(pair) ? pair[1] : pair));
+ }
+ function setCookie(headers, cookie) {
+ webidl.argumentLengthCheck(arguments, 2, { header: "setCookie" });
+ webidl.brandCheck(headers, Headers, { strict: false });
+ cookie = webidl.converters.Cookie(cookie);
+ const str = stringify(cookie);
+ if (str) {
+ 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: []
+ }
+ ]);
+ module2.exports = {
+ getCookies,
+ deleteCookie,
+ getSetCookies,
+ setCookie
+ };
+ }
+});
+
+// node_modules/undici/lib/websocket/constants.js
+var require_constants5 = __commonJS({
+ "node_modules/undici/lib/websocket/constants.js"(exports2, module2) {
+ "use strict";
+ var uid = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
+ var staticPropertyDescriptors = {
+ enumerable: true,
+ writable: false,
+ configurable: false
+ };
+ var states = {
+ CONNECTING: 0,
+ OPEN: 1,
+ CLOSING: 2,
+ CLOSED: 3
+ };
+ var opcodes = {
+ CONTINUATION: 0,
+ TEXT: 1,
+ BINARY: 2,
+ CLOSE: 8,
+ PING: 9,
+ PONG: 10
+ };
+ var maxUnsigned16Bit = 2 ** 16 - 1;
+ var parserStates = {
+ INFO: 0,
+ PAYLOADLENGTH_16: 2,
+ PAYLOADLENGTH_64: 3,
+ READ_DATA: 4
+ };
+ var emptyBuffer = Buffer.allocUnsafe(0);
+ module2.exports = {
+ uid,
+ staticPropertyDescriptors,
+ states,
+ opcodes,
+ maxUnsigned16Bit,
+ parserStates,
+ emptyBuffer
+ };
+ }
+});
+
+// node_modules/undici/lib/websocket/symbols.js
+var require_symbols5 = __commonJS({
+ "node_modules/undici/lib/websocket/symbols.js"(exports2, module2) {
+ "use strict";
+ module2.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")
+ };
+ }
+});
+
+// node_modules/undici/lib/websocket/events.js
+var require_events = __commonJS({
+ "node_modules/undici/lib/websocket/events.js"(exports2, module2) {
+ "use strict";
+ var { webidl } = require_webidl();
+ var { kEnumerableProperty } = require_util();
+ var { MessagePort } = require("worker_threads");
+ 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
+ });
+ }
+ };
+ 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
+ );
+ var eventInit = [
+ {
+ key: "bubbles",
+ converter: webidl.converters.boolean,
+ defaultValue: false
+ },
+ {
+ key: "cancelable",
+ converter: webidl.converters.boolean,
+ defaultValue: false
+ },
+ {
+ key: "composed",
+ converter: webidl.converters.boolean,
+ defaultValue: false
+ }
+ ];
+ webidl.converters.MessageEventInit = webidl.dictionaryConverter([
+ ...eventInit,
+ {
+ key: "data",
+ converter: webidl.converters.any,
+ defaultValue: null
+ },
+ {
+ key: "origin",
+ converter: webidl.converters.USVString,
+ defaultValue: ""
+ },
+ {
+ key: "lastEventId",
+ converter: webidl.converters.DOMString,
+ defaultValue: ""
+ },
+ {
+ key: "source",
+ // Node doesn't implement WindowProxy or ServiceWorker, so the only
+ // valid value for source is a MessagePort.
+ converter: webidl.nullableConverter(webidl.converters.MessagePort),
+ defaultValue: null
+ },
+ {
+ key: "ports",
+ converter: webidl.converters["sequence"],
+ 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
+ }
+ ]);
+ module2.exports = {
+ MessageEvent,
+ CloseEvent,
+ ErrorEvent
+ };
+ }
+});
+
+// node_modules/undici/lib/websocket/util.js
+var require_util7 = __commonJS({
+ "node_modules/undici/lib/websocket/util.js"(exports2, module2) {
+ "use strict";
+ var { kReadyState, kController, kResponse, kBinaryType, kWebSocketURL } = require_symbols5();
+ var { states, opcodes } = require_constants5();
+ var { MessageEvent, ErrorEvent } = require_events();
+ function isEstablished(ws) {
+ return ws[kReadyState] === states.OPEN;
+ }
+ function isClosing(ws) {
+ return ws[kReadyState] === states.CLOSING;
+ }
+ function isClosed(ws) {
+ return ws[kReadyState] === states.CLOSED;
+ }
+ function fireEvent(e, target, eventConstructor = Event, eventInitDict) {
+ const event = new eventConstructor(e, eventInitDict);
+ target.dispatchEvent(event);
+ }
+ 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
+ });
+ }
+ 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 || // SP
+ code === 9) {
+ return false;
+ }
+ }
+ return true;
+ }
+ function isValidStatusCode(code) {
+ if (code >= 1e3 && code < 1015) {
+ return code !== 1004 && // reserved
+ code !== 1005 && // "MUST NOT be set as a status code"
+ code !== 1006;
+ }
+ return code >= 3e3 && code <= 4999;
+ }
+ function failWebsocketConnection(ws, reason) {
+ const { [kController]: controller, [kResponse]: response } = ws;
+ controller.abort();
+ if (response?.socket && !response.socket.destroyed) {
+ response.socket.destroy();
+ }
+ if (reason) {
+ fireEvent("error", ws, ErrorEvent, {
+ error: new Error(reason)
+ });
+ }
+ }
+ module2.exports = {
+ isEstablished,
+ isClosing,
+ isClosed,
+ fireEvent,
+ isValidSubprotocol,
+ isValidStatusCode,
+ failWebsocketConnection,
+ websocketMessageReceived
+ };
+ }
+});
+
+// node_modules/undici/lib/websocket/connection.js
+var require_connection = __commonJS({
+ "node_modules/undici/lib/websocket/connection.js"(exports2, module2) {
+ "use strict";
+ var diagnosticsChannel = require("diagnostics_channel");
+ var { uid, states } = require_constants5();
+ var {
+ kReadyState,
+ kSentClose,
+ kByteParser,
+ kReceivedClose
+ } = require_symbols5();
+ var { fireEvent, failWebsocketConnection } = require_util7();
+ var { CloseEvent } = require_events();
+ var { makeRequest } = require_request2();
+ var { fetching } = require_fetch();
+ var { Headers } = require_headers();
+ var { getGlobalDispatcher } = require_global2();
+ var { kHeadersList } = require_symbols();
+ var channels = {};
+ channels.open = diagnosticsChannel.channel("undici:websocket:open");
+ channels.close = diagnosticsChannel.channel("undici:websocket:close");
+ channels.socketError = diagnosticsChannel.channel("undici:websocket:socket_error");
+ var crypto;
+ try {
+ crypto = require("crypto");
+ } catch {
+ }
+ 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) {
+ const headersList = new Headers(options.headers)[kHeadersList];
+ request.headersList = headersList;
+ }
+ const keyValue = crypto.randomBytes(16).toString("base64");
+ request.headersList.append("sec-websocket-key", keyValue);
+ request.headersList.append("sec-websocket-version", "13");
+ for (const protocol of protocols) {
+ request.headersList.append("sec-websocket-protocol", protocol);
+ }
+ const permessageDeflate = "";
+ const controller = 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;
+ }
+ const secWSAccept = response.headersList.get("Sec-WebSocket-Accept");
+ const digest = crypto.createHash("sha1").update(keyValue + uid).digest("base64");
+ if (secWSAccept !== digest) {
+ failWebsocketConnection(ws, "Incorrect hash received in Sec-WebSocket-Accept header.");
+ return;
+ }
+ const secExtension = response.headersList.get("Sec-WebSocket-Extensions");
+ 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);
+ }
+ });
+ return controller;
+ }
+ function onSocketData(chunk) {
+ if (!this.ws[kByteParser].write(chunk)) {
+ this.pause();
+ }
+ }
+ 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(error3) {
+ const { ws } = this;
+ ws[kReadyState] = states.CLOSING;
+ if (channels.socketError.hasSubscribers) {
+ channels.socketError.publish(error3);
+ }
+ this.destroy();
+ }
+ module2.exports = {
+ establishWebSocketConnection
+ };
+ }
+});
+
+// node_modules/undici/lib/websocket/frame.js
+var require_frame = __commonJS({
+ "node_modules/undici/lib/websocket/frame.js"(exports2, module2) {
+ "use strict";
+ var { maxUnsigned16Bit } = require_constants5();
+ var 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;
+ 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;
+ 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;
+ }
+ };
+ module2.exports = {
+ WebsocketFrameSend
+ };
+ }
+});
+
+// node_modules/undici/lib/websocket/receiver.js
+var require_receiver = __commonJS({
+ "node_modules/undici/lib/websocket/receiver.js"(exports2, module2) {
+ "use strict";
+ var { Writable } = require("stream");
+ var diagnosticsChannel = require("diagnostics_channel");
+ var { parserStates, opcodes, states, emptyBuffer } = require_constants5();
+ var { kReadyState, kSentClose, kResponse, kReceivedClose } = require_symbols5();
+ var { isValidStatusCode, failWebsocketConnection, websocketMessageReceived } = require_util7();
+ var { WebsocketFrameSend } = require_frame();
+ var 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 body2 = Buffer.allocUnsafe(2);
+ body2.writeUInt16BE(this.#info.closeInfo.code, 0);
+ const closeFrame = new WebsocketFrameSend(body2);
+ this.ws[kResponse].socket.write(
+ closeFrame.createFrame(opcodes.CLOSE),
+ (err) => {
+ if (!err) {
+ this.ws[kSentClose] = 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) {
+ let code;
+ if (data.length >= 2) {
+ code = data.readUInt16BE(0);
+ }
+ if (onlyCode) {
+ if (!isValidStatusCode(code)) {
+ return null;
+ }
+ return { code };
+ }
+ 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;
+ }
+ };
+ module2.exports = {
+ ByteParser
+ };
+ }
+});
+
+// node_modules/undici/lib/websocket/websocket.js
+var require_websocket = __commonJS({
+ "node_modules/undici/lib/websocket/websocket.js"(exports2, module2) {
+ "use strict";
+ var { webidl } = require_webidl();
+ var { DOMException: DOMException2 } = require_constants2();
+ var { URLSerializer } = require_dataURL();
+ var { getGlobalOrigin } = require_global();
+ var { staticPropertyDescriptors, states, opcodes, emptyBuffer } = require_constants5();
+ var {
+ kWebSocketURL,
+ kReadyState,
+ kController,
+ kBinaryType,
+ kResponse,
+ kSentClose,
+ kByteParser
+ } = require_symbols5();
+ var { isEstablished, isClosing, isValidSubprotocol, failWebsocketConnection, fireEvent } = require_util7();
+ var { establishWebSocketConnection } = require_connection();
+ var { WebsocketFrameSend } = require_frame();
+ var { ByteParser } = require_receiver();
+ var { kEnumerableProperty, isBlobLike } = require_util();
+ var { getGlobalDispatcher } = require_global2();
+ var { types } = require("util");
+ var 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 DOMException2(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 DOMException2(
+ `Expected a ws: or wss: protocol, got ${urlRecord.protocol}`,
+ "SyntaxError"
+ );
+ }
+ if (urlRecord.hash || urlRecord.href.endsWith("#")) {
+ throw new DOMException2("Got fragment", "SyntaxError");
+ }
+ if (typeof protocols === "string") {
+ protocols = [protocols];
+ }
+ if (protocols.length !== new Set(protocols.map((p) => p.toLowerCase())).size) {
+ throw new DOMException2("Invalid Sec-WebSocket-Protocol value", "SyntaxError");
+ }
+ if (protocols.length > 0 && !protocols.every((p) => isValidSubprotocol(p))) {
+ throw new DOMException2("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 DOMException2("invalid code", "InvalidAccessError");
+ }
+ }
+ let reasonByteLength = 0;
+ if (reason !== void 0) {
+ reasonByteLength = Buffer.byteLength(reason);
+ if (reasonByteLength > 123) {
+ throw new DOMException2(
+ `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;
+ }
+ const socket = this[kResponse].socket;
+ 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 DOMException2("Sent before connected.", "InvalidStateError");
+ }
+ if (!isEstablished(this) || isClosing(this)) {
+ return;
+ }
+ const socket = this[kResponse].socket;
+ if (typeof data === "string") {
+ const value = Buffer.from(data);
+ const frame = new WebsocketFrameSend(value);
+ const buffer = frame.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 frame = new WebsocketFrameSend(value);
+ const buffer = frame.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 frame = new WebsocketFrameSend(ab);
+ const buffer = frame.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);
+ };
+ module2.exports = {
+ WebSocket
+ };
+ }
+});
+
+// node_modules/undici/index.js
+var require_undici = __commonJS({
+ "node_modules/undici/index.js"(exports2, module2) {
+ "use strict";
+ var Client = require_client();
+ var Dispatcher = require_dispatcher();
+ var errors = require_errors();
+ var Pool = require_pool();
+ var BalancedPool = require_balanced_pool();
+ var Agent = require_agent();
+ var util = require_util();
+ var { InvalidArgumentError } = errors;
+ var api = require_api();
+ var buildConnector = require_connect();
+ var MockClient = require_mock_client();
+ var MockAgent = require_mock_agent();
+ var MockPool = require_mock_pool();
+ var mockErrors = require_mock_errors();
+ var ProxyAgent = require_proxy_agent();
+ var RetryHandler = require_RetryHandler();
+ var { getGlobalDispatcher, setGlobalDispatcher } = require_global2();
+ var DecoratorHandler = require_DecoratorHandler();
+ var RedirectHandler = require_RedirectHandler();
+ var createRedirectInterceptor = require_redirectInterceptor();
+ var hasCrypto;
+ try {
+ require("crypto");
+ hasCrypto = true;
+ } catch {
+ hasCrypto = false;
+ }
+ Object.assign(Dispatcher.prototype, api);
+ module2.exports.Dispatcher = Dispatcher;
+ module2.exports.Client = Client;
+ module2.exports.Pool = Pool;
+ module2.exports.BalancedPool = BalancedPool;
+ module2.exports.Agent = Agent;
+ module2.exports.ProxyAgent = ProxyAgent;
+ module2.exports.RetryHandler = RetryHandler;
+ module2.exports.DecoratorHandler = DecoratorHandler;
+ module2.exports.RedirectHandler = RedirectHandler;
+ module2.exports.createRedirectInterceptor = createRedirectInterceptor;
+ module2.exports.buildConnector = buildConnector;
+ module2.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 path5 = opts.path;
+ if (!opts.path.startsWith("/")) {
+ path5 = `/${path5}`;
+ }
+ url = new URL(util.parseOrigin(url).origin + path5);
+ } 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);
+ };
+ }
+ module2.exports.setGlobalDispatcher = setGlobalDispatcher;
+ module2.exports.getGlobalDispatcher = getGlobalDispatcher;
+ if (util.nodeMajor > 16 || util.nodeMajor === 16 && util.nodeMinor >= 8) {
+ let fetchImpl = null;
+ module2.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;
+ }
+ };
+ module2.exports.Headers = require_headers().Headers;
+ module2.exports.Response = require_response().Response;
+ module2.exports.Request = require_request2().Request;
+ module2.exports.FormData = require_formdata().FormData;
+ module2.exports.File = require_file().File;
+ module2.exports.FileReader = require_filereader().FileReader;
+ const { setGlobalOrigin, getGlobalOrigin } = require_global();
+ module2.exports.setGlobalOrigin = setGlobalOrigin;
+ module2.exports.getGlobalOrigin = getGlobalOrigin;
+ const { CacheStorage } = require_cachestorage();
+ const { kConstruct } = require_symbols4();
+ module2.exports.caches = new CacheStorage(kConstruct);
+ }
+ if (util.nodeMajor >= 16) {
+ const { deleteCookie, getCookies, getSetCookies, setCookie } = require_cookies();
+ module2.exports.deleteCookie = deleteCookie;
+ module2.exports.getCookies = getCookies;
+ module2.exports.getSetCookies = getSetCookies;
+ module2.exports.setCookie = setCookie;
+ const { parseMIMEType, serializeAMimeType } = require_dataURL();
+ module2.exports.parseMIMEType = parseMIMEType;
+ module2.exports.serializeAMimeType = serializeAMimeType;
+ }
+ if (util.nodeMajor >= 18 && hasCrypto) {
+ const { WebSocket } = require_websocket();
+ module2.exports.WebSocket = WebSocket;
+ }
+ module2.exports.request = makeDispatcher(api.request);
+ module2.exports.stream = makeDispatcher(api.stream);
+ module2.exports.pipeline = makeDispatcher(api.pipeline);
+ module2.exports.connect = makeDispatcher(api.connect);
+ module2.exports.upgrade = makeDispatcher(api.upgrade);
+ module2.exports.MockClient = MockClient;
+ module2.exports.MockPool = MockPool;
+ module2.exports.MockAgent = MockAgent;
+ module2.exports.mockErrors = mockErrors;
+ }
+});
+
+// node_modules/@actions/http-client/lib/index.js
+var require_lib = __commonJS({
+ "node_modules/@actions/http-client/lib/index.js"(exports2) {
+ "use strict";
+ var __createBinding = exports2 && exports2.__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 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+ } : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar = exports2 && exports2.__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 = exports2 && exports2.__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(exports2, "__esModule", { value: true });
+ exports2.HttpClient = exports2.isHttps = exports2.HttpClientResponse = exports2.HttpClientError = exports2.getProxyUrl = exports2.MediaTypes = exports2.Headers = exports2.HttpCodes = void 0;
+ var http = __importStar(require("http"));
+ var https = __importStar(require("https"));
+ var pm = __importStar(require_proxy());
+ var tunnel = __importStar(require_tunnel2());
+ var undici_1 = require_undici();
+ var HttpCodes;
+ (function(HttpCodes2) {
+ HttpCodes2[HttpCodes2["OK"] = 200] = "OK";
+ HttpCodes2[HttpCodes2["MultipleChoices"] = 300] = "MultipleChoices";
+ HttpCodes2[HttpCodes2["MovedPermanently"] = 301] = "MovedPermanently";
+ HttpCodes2[HttpCodes2["ResourceMoved"] = 302] = "ResourceMoved";
+ HttpCodes2[HttpCodes2["SeeOther"] = 303] = "SeeOther";
+ HttpCodes2[HttpCodes2["NotModified"] = 304] = "NotModified";
+ HttpCodes2[HttpCodes2["UseProxy"] = 305] = "UseProxy";
+ HttpCodes2[HttpCodes2["SwitchProxy"] = 306] = "SwitchProxy";
+ HttpCodes2[HttpCodes2["TemporaryRedirect"] = 307] = "TemporaryRedirect";
+ HttpCodes2[HttpCodes2["PermanentRedirect"] = 308] = "PermanentRedirect";
+ HttpCodes2[HttpCodes2["BadRequest"] = 400] = "BadRequest";
+ HttpCodes2[HttpCodes2["Unauthorized"] = 401] = "Unauthorized";
+ HttpCodes2[HttpCodes2["PaymentRequired"] = 402] = "PaymentRequired";
+ HttpCodes2[HttpCodes2["Forbidden"] = 403] = "Forbidden";
+ HttpCodes2[HttpCodes2["NotFound"] = 404] = "NotFound";
+ HttpCodes2[HttpCodes2["MethodNotAllowed"] = 405] = "MethodNotAllowed";
+ HttpCodes2[HttpCodes2["NotAcceptable"] = 406] = "NotAcceptable";
+ HttpCodes2[HttpCodes2["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired";
+ HttpCodes2[HttpCodes2["RequestTimeout"] = 408] = "RequestTimeout";
+ HttpCodes2[HttpCodes2["Conflict"] = 409] = "Conflict";
+ HttpCodes2[HttpCodes2["Gone"] = 410] = "Gone";
+ HttpCodes2[HttpCodes2["TooManyRequests"] = 429] = "TooManyRequests";
+ HttpCodes2[HttpCodes2["InternalServerError"] = 500] = "InternalServerError";
+ HttpCodes2[HttpCodes2["NotImplemented"] = 501] = "NotImplemented";
+ HttpCodes2[HttpCodes2["BadGateway"] = 502] = "BadGateway";
+ HttpCodes2[HttpCodes2["ServiceUnavailable"] = 503] = "ServiceUnavailable";
+ HttpCodes2[HttpCodes2["GatewayTimeout"] = 504] = "GatewayTimeout";
+ })(HttpCodes || (exports2.HttpCodes = HttpCodes = {}));
+ var Headers;
+ (function(Headers2) {
+ Headers2["Accept"] = "accept";
+ Headers2["ContentType"] = "content-type";
+ })(Headers || (exports2.Headers = Headers = {}));
+ var MediaTypes;
+ (function(MediaTypes2) {
+ MediaTypes2["ApplicationJson"] = "application/json";
+ })(MediaTypes || (exports2.MediaTypes = MediaTypes = {}));
+ function getProxyUrl(serverUrl) {
+ const proxyUrl = pm.getProxyUrl(new URL(serverUrl));
+ return proxyUrl ? proxyUrl.href : "";
+ }
+ exports2.getProxyUrl = getProxyUrl;
+ var HttpRedirectCodes = [
+ HttpCodes.MovedPermanently,
+ HttpCodes.ResourceMoved,
+ HttpCodes.SeeOther,
+ HttpCodes.TemporaryRedirect,
+ HttpCodes.PermanentRedirect
+ ];
+ var HttpResponseRetryCodes = [
+ HttpCodes.BadGateway,
+ HttpCodes.ServiceUnavailable,
+ HttpCodes.GatewayTimeout
+ ];
+ var RetryableHttpVerbs = ["OPTIONS", "GET", "DELETE", "HEAD"];
+ var ExponentialBackoffCeiling = 10;
+ var ExponentialBackoffTimeSlice = 5;
+ var HttpClientError = class _HttpClientError extends Error {
+ constructor(message, statusCode) {
+ super(message);
+ this.name = "HttpClientError";
+ this.statusCode = statusCode;
+ Object.setPrototypeOf(this, _HttpClientError.prototype);
+ }
+ };
+ exports2.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));
+ });
+ }));
+ });
+ }
+ };
+ exports2.HttpClientResponse = HttpClientResponse;
+ function isHttps(requestUrl) {
+ const parsedUrl = new URL(requestUrl);
+ return parsedUrl.protocol === "https:";
+ }
+ exports2.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 info4 = 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(info4, 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, info4, 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];
+ }
+ }
+ }
+ info4 = this._prepareRequest(verb, parsedRedirectUrl, headers);
+ response = yield this.requestRaw(info4, 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(info4, 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(new Error("Unknown error"));
+ } else {
+ resolve(res);
+ }
+ }
+ this.requestRawWithCallback(info4, data, callbackForResult);
+ });
+ });
+ }
+ /**
+ * Raw request with callback.
+ * @param info
+ * @param data
+ * @param onResult
+ */
+ requestRawWithCallback(info4, data, onResult) {
+ if (typeof data === "string") {
+ if (!info4.options.headers) {
+ info4.options.headers = {};
+ }
+ info4.options.headers["Content-Length"] = Buffer.byteLength(data, "utf8");
+ }
+ let callbackCalled = false;
+ function handleResult(err, res) {
+ if (!callbackCalled) {
+ callbackCalled = true;
+ onResult(err, res);
+ }
+ }
+ const req = info4.httpModule.request(info4.options, (msg) => {
+ const res = new HttpClientResponse(msg);
+ handleResult(void 0, res);
+ });
+ let socket;
+ req.on("socket", (sock) => {
+ socket = sock;
+ });
+ req.setTimeout(this._socketTimeout || 3 * 6e4, () => {
+ if (socket) {
+ socket.end();
+ }
+ handleResult(new Error(`Request timeout: ${info4.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);
+ const useProxy = proxyUrl && proxyUrl.hostname;
+ if (!useProxy) {
+ return;
+ }
+ return this._getProxyAgentDispatcher(parsedUrl, proxyUrl);
+ }
+ _prepareRequest(method, requestUrl, headers) {
+ const info4 = {};
+ info4.parsedUrl = requestUrl;
+ const usingSsl = info4.parsedUrl.protocol === "https:";
+ info4.httpModule = usingSsl ? https : http;
+ const defaultPort = usingSsl ? 443 : 80;
+ info4.options = {};
+ info4.options.host = info4.parsedUrl.hostname;
+ info4.options.port = info4.parsedUrl.port ? parseInt(info4.parsedUrl.port) : defaultPort;
+ info4.options.path = (info4.parsedUrl.pathname || "") + (info4.parsedUrl.search || "");
+ info4.options.method = method;
+ info4.options.headers = this._mergeHeaders(headers);
+ if (this.userAgent != null) {
+ info4.options.headers["user-agent"] = this.userAgent;
+ }
+ info4.options.agent = this._getAgent(info4.parsedUrl);
+ if (this.handlers) {
+ for (const handler of this.handlers) {
+ handler.prepareRequest(info4.options);
+ }
+ }
+ return info4;
+ }
+ _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);
+ }
+ }));
+ });
+ }
+ };
+ exports2.HttpClient = HttpClient;
+ var lowercaseKeys = (obj) => Object.keys(obj).reduce((c, k) => (c[k.toLowerCase()] = obj[k], c), {});
+ }
+});
+
+// node_modules/@actions/http-client/lib/auth.js
+var require_auth = __commonJS({
+ "node_modules/@actions/http-client/lib/auth.js"(exports2) {
+ "use strict";
+ var __awaiter = exports2 && exports2.__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(exports2, "__esModule", { value: true });
+ exports2.PersonalAccessTokenCredentialHandler = exports2.BearerCredentialHandler = exports2.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")}`;
+ }
+ // This handler cannot handle 401
+ canHandleAuthentication() {
+ return false;
+ }
+ handleAuthentication() {
+ return __awaiter(this, void 0, void 0, function* () {
+ throw new Error("not implemented");
+ });
+ }
+ };
+ exports2.BasicCredentialHandler = BasicCredentialHandler;
+ var BearerCredentialHandler = class {
+ constructor(token) {
+ this.token = token;
+ }
+ // currently implements pre-authorization
+ // TODO: support preAuth = false where it hooks on 401
+ prepareRequest(options) {
+ if (!options.headers) {
+ throw Error("The request has no headers");
+ }
+ options.headers["Authorization"] = `Bearer ${this.token}`;
+ }
+ // This handler cannot handle 401
+ canHandleAuthentication() {
+ return false;
+ }
+ handleAuthentication() {
+ return __awaiter(this, void 0, void 0, function* () {
+ throw new Error("not implemented");
+ });
+ }
+ };
+ exports2.BearerCredentialHandler = BearerCredentialHandler;
+ var PersonalAccessTokenCredentialHandler = class {
+ constructor(token) {
+ this.token = token;
+ }
+ // currently implements pre-authorization
+ // TODO: support preAuth = false where it hooks on 401
+ prepareRequest(options) {
+ if (!options.headers) {
+ throw Error("The request has no headers");
+ }
+ options.headers["Authorization"] = `Basic ${Buffer.from(`PAT:${this.token}`).toString("base64")}`;
+ }
+ // This handler cannot handle 401
+ canHandleAuthentication() {
+ return false;
+ }
+ handleAuthentication() {
+ return __awaiter(this, void 0, void 0, function* () {
+ throw new Error("not implemented");
+ });
+ }
+ };
+ exports2.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler;
+ }
+});
+
+// node_modules/@actions/core/lib/oidc-utils.js
+var require_oidc_utils = __commonJS({
+ "node_modules/@actions/core/lib/oidc-utils.js"(exports2) {
+ "use strict";
+ var __awaiter = exports2 && exports2.__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(exports2, "__esModule", { value: true });
+ exports2.OidcClient = void 0;
+ var http_client_1 = require_lib();
+ var auth_1 = require_auth();
+ var core_1 = require_core();
+ var 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 httpclient = _OidcClient.createHttpClient();
+ const res = yield httpclient.getJson(id_token_url).catch((error3) => {
+ throw new Error(`Failed to get ID Token.
+
+ Error Code : ${error3.statusCode}
+
+ Error Message: ${error3.message}`);
+ });
+ const id_token = (_a = res.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) {
+ const encodedAudience = encodeURIComponent(audience);
+ id_token_url = `${id_token_url}&audience=${encodedAudience}`;
+ }
+ (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 (error3) {
+ throw new Error(`Error message: ${error3.message}`);
+ }
+ });
+ }
+ };
+ exports2.OidcClient = OidcClient;
+ }
+});
+
+// node_modules/@actions/core/lib/summary.js
+var require_summary = __commonJS({
+ "node_modules/@actions/core/lib/summary.js"(exports2) {
+ "use strict";
+ var __awaiter = exports2 && exports2.__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(exports2, "__esModule", { value: true });
+ exports2.summary = exports2.markdownSummary = exports2.SUMMARY_DOCS_URL = exports2.SUMMARY_ENV_VAR = void 0;
+ var os_1 = require("os");
+ var fs_1 = require("fs");
+ var { access, appendFile, writeFile } = fs_1.promises;
+ exports2.SUMMARY_ENV_VAR = "GITHUB_STEP_SUMMARY";
+ exports2.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[exports2.SUMMARY_ENV_VAR];
+ if (!pathFromEnv) {
+ throw new Error(`Unable to find environment variable for $${exports2.SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`);
+ }
+ try {
+ yield access(pathFromEnv, fs_1.constants.R_OK | fs_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();
+ const writeFunc = overwrite ? writeFile : appendFile;
+ yield writeFunc(filePath, this._buffer, { encoding: "utf8" });
+ return this.emptyBuffer();
+ });
+ }
+ /**
+ * Clears the summary buffer and wipes the summary file
+ *
+ * @returns {Summary} summary instance
+ */
+ clear() {
+ return __awaiter(this, void 0, void 0, function* () {
+ return this.emptyBuffer().write({ overwrite: true });
+ });
+ }
+ /**
+ * Returns the current summary buffer as a string
+ *
+ * @returns {string} string of summary buffer
+ */
+ stringify() {
+ return this._buffer;
+ }
+ /**
+ * If the summary buffer is empty
+ *
+ * @returns {boolen} true if the buffer is empty
+ */
+ isEmptyBuffer() {
+ return this._buffer.length === 0;
+ }
+ /**
+ * Resets the summary buffer without writing to summary file
+ *
+ * @returns {Summary} summary instance
+ */
+ emptyBuffer() {
+ this._buffer = "";
+ return this;
+ }
+ /**
+ * Adds raw text to the summary buffer
+ *
+ * @param {string} text content to add
+ * @param {boolean} [addEOL=false] (optional) append an EOL to the raw text (default: false)
+ *
+ * @returns {Summary} summary instance
+ */
+ addRaw(text, addEOL = false) {
+ this._buffer += text;
+ return addEOL ? this.addEOL() : this;
+ }
+ /**
+ * Adds the operating system-specific end-of-line marker to the buffer
+ *
+ * @returns {Summary} summary instance
+ */
+ addEOL() {
+ return this.addRaw(os_1.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();
+ }
+ };
+ var _summary = new Summary();
+ exports2.markdownSummary = _summary;
+ exports2.summary = _summary;
+ }
+});
+
+// node_modules/@actions/core/lib/path-utils.js
+var require_path_utils = __commonJS({
+ "node_modules/@actions/core/lib/path-utils.js"(exports2) {
+ "use strict";
+ var __createBinding = exports2 && exports2.__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 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+ } : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar = exports2 && exports2.__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(exports2, "__esModule", { value: true });
+ exports2.toPlatformPath = exports2.toWin32Path = exports2.toPosixPath = void 0;
+ var path5 = __importStar(require("path"));
+ function toPosixPath(pth) {
+ return pth.replace(/[\\]/g, "/");
+ }
+ exports2.toPosixPath = toPosixPath;
+ function toWin32Path(pth) {
+ return pth.replace(/[/]/g, "\\");
+ }
+ exports2.toWin32Path = toWin32Path;
+ function toPlatformPath(pth) {
+ return pth.replace(/[/\\]/g, path5.sep);
+ }
+ exports2.toPlatformPath = toPlatformPath;
+ }
+});
+
+// node_modules/@actions/io/lib/io-util.js
+var require_io_util = __commonJS({
+ "node_modules/@actions/io/lib/io-util.js"(exports2) {
+ "use strict";
+ var __createBinding = exports2 && exports2.__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 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+ } : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar = exports2 && exports2.__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 = exports2 && exports2.__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(exports2, "__esModule", { value: true });
+ exports2.getCmdPath = exports2.tryGetExecutablePath = exports2.isRooted = exports2.isDirectory = exports2.exists = exports2.READONLY = exports2.UV_FS_O_EXLOCK = exports2.IS_WINDOWS = exports2.unlink = exports2.symlink = exports2.stat = exports2.rmdir = exports2.rm = exports2.rename = exports2.readlink = exports2.readdir = exports2.open = exports2.mkdir = exports2.lstat = exports2.copyFile = exports2.chmod = void 0;
+ var fs2 = __importStar(require("fs"));
+ var path5 = __importStar(require("path"));
+ _a = fs2.promises, exports2.chmod = _a.chmod, exports2.copyFile = _a.copyFile, exports2.lstat = _a.lstat, exports2.mkdir = _a.mkdir, exports2.open = _a.open, exports2.readdir = _a.readdir, exports2.readlink = _a.readlink, exports2.rename = _a.rename, exports2.rm = _a.rm, exports2.rmdir = _a.rmdir, exports2.stat = _a.stat, exports2.symlink = _a.symlink, exports2.unlink = _a.unlink;
+ exports2.IS_WINDOWS = process.platform === "win32";
+ exports2.UV_FS_O_EXLOCK = 268435456;
+ exports2.READONLY = fs2.constants.O_RDONLY;
+ function exists2(fsPath) {
+ return __awaiter(this, void 0, void 0, function* () {
+ try {
+ yield exports2.stat(fsPath);
+ } catch (err) {
+ if (err.code === "ENOENT") {
+ return false;
+ }
+ throw err;
+ }
+ return true;
+ });
+ }
+ exports2.exists = exists2;
+ function isDirectory(fsPath, useStat = false) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const stats = useStat ? yield exports2.stat(fsPath) : yield exports2.lstat(fsPath);
+ return stats.isDirectory();
+ });
+ }
+ exports2.isDirectory = isDirectory;
+ function isRooted(p) {
+ p = normalizeSeparators2(p);
+ if (!p) {
+ throw new Error('isRooted() parameter "p" cannot be empty');
+ }
+ if (exports2.IS_WINDOWS) {
+ return p.startsWith("\\") || /^[A-Z]:/i.test(p);
+ }
+ return p.startsWith("/");
+ }
+ exports2.isRooted = isRooted;
+ function tryGetExecutablePath(filePath, extensions) {
+ return __awaiter(this, void 0, void 0, function* () {
+ let stats = void 0;
+ try {
+ stats = yield exports2.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 (exports2.IS_WINDOWS) {
+ const upperExt = path5.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 exports2.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 (exports2.IS_WINDOWS) {
+ try {
+ const directory = path5.dirname(filePath);
+ const upperName = path5.basename(filePath).toUpperCase();
+ for (const actualName of yield exports2.readdir(directory)) {
+ if (upperName === actualName.toUpperCase()) {
+ filePath = path5.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 "";
+ });
+ }
+ exports2.tryGetExecutablePath = tryGetExecutablePath;
+ function normalizeSeparators2(p) {
+ p = p || "";
+ if (exports2.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 _a2;
+ return (_a2 = process.env["COMSPEC"]) !== null && _a2 !== void 0 ? _a2 : `cmd.exe`;
+ }
+ exports2.getCmdPath = getCmdPath;
+ }
+});
+
+// node_modules/@actions/io/lib/io.js
+var require_io = __commonJS({
+ "node_modules/@actions/io/lib/io.js"(exports2) {
+ "use strict";
+ var __createBinding = exports2 && exports2.__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 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+ } : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar = exports2 && exports2.__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 = exports2 && exports2.__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(exports2, "__esModule", { value: true });
+ exports2.findInPath = exports2.which = exports2.mkdirP = exports2.rmRF = exports2.mv = exports2.cp = void 0;
+ var assert_1 = require("assert");
+ var path5 = __importStar(require("path"));
+ var ioUtil = __importStar(require_io_util());
+ 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 ? path5.join(dest, path5.basename(source)) : dest;
+ if (!(yield ioUtil.exists(source))) {
+ throw new Error(`no such file or directory: ${source}`);
+ }
+ const sourceStat = yield ioUtil.stat(source);
+ if (sourceStat.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 (path5.relative(source, newDest) === "") {
+ throw new Error(`'${newDest}' and '${source}' are the same file`);
+ }
+ yield copyFile(source, newDest, force);
+ }
+ });
+ }
+ exports2.cp = cp;
+ 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 = path5.join(dest, path5.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(path5.dirname(dest));
+ yield ioUtil.rename(source, dest);
+ });
+ }
+ exports2.mv = mv;
+ 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}`);
+ }
+ });
+ }
+ exports2.rmRF = rmRF;
+ 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 });
+ });
+ }
+ exports2.mkdirP = mkdirP;
+ 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 "";
+ });
+ }
+ exports2.which = which;
+ 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(path5.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(path5.sep)) {
+ return [];
+ }
+ const directories = [];
+ if (process.env.PATH) {
+ for (const p of process.env.PATH.split(path5.delimiter)) {
+ if (p) {
+ directories.push(p);
+ }
+ }
+ }
+ const matches = [];
+ for (const directory of directories) {
+ const filePath = yield ioUtil.tryGetExecutablePath(path5.join(directory, tool), extensions);
+ if (filePath) {
+ matches.push(filePath);
+ }
+ }
+ return matches;
+ });
+ }
+ exports2.findInPath = findInPath;
+ function readCopyOptions(options) {
+ const force = options.force == null ? true : options.force;
+ const recursive = Boolean(options.recursive);
+ const copySourceDirectory = options.copySourceDirectory == null ? true : Boolean(options.copySourceDirectory);
+ return { force, recursive, 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}`;
+ const srcFileStat = yield ioUtil.lstat(srcFile);
+ if (srcFileStat.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);
+ }
+ });
+ }
+ }
+});
+
+// node_modules/@actions/exec/lib/toolrunner.js
+var require_toolrunner = __commonJS({
+ "node_modules/@actions/exec/lib/toolrunner.js"(exports2) {
+ "use strict";
+ var __createBinding = exports2 && exports2.__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 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+ } : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar = exports2 && exports2.__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 = exports2 && exports2.__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(exports2, "__esModule", { value: true });
+ exports2.argStringToArray = exports2.ToolRunner = void 0;
+ var os = __importStar(require("os"));
+ var events = __importStar(require("events"));
+ var child = __importStar(require("child_process"));
+ var path5 = __importStar(require("path"));
+ var io = __importStar(require_io());
+ var ioUtil = __importStar(require_io_util());
+ var timers_1 = require("timers");
+ var 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.EOL);
+ while (n > -1) {
+ const line = s.substring(0, n);
+ onLine(line);
+ s = s.substring(n + os.EOL.length);
+ n = s.indexOf(os.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 = path5.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.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(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) {
+ const s = optionsNonNull.failOnStdErr ? optionsNonNull.errStream : optionsNonNull.outStream;
+ s.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", (error3, exitCode) => {
+ if (stdbuffer.length > 0) {
+ this.emit("stdline", stdbuffer);
+ }
+ if (errbuffer.length > 0) {
+ this.emit("errline", errbuffer);
+ }
+ cp.removeAllListeners();
+ if (error3) {
+ reject(error3);
+ } else {
+ resolve(exitCode);
+ }
+ });
+ if (this.options.input) {
+ if (!cp.stdin) {
+ throw new Error("child process missing stdin");
+ }
+ cp.stdin.end(this.options.input);
+ }
+ }));
+ });
+ }
+ };
+ exports2.ToolRunner = ToolRunner;
+ 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;
+ }
+ exports2.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 error3;
+ if (this.processExited) {
+ if (this.processError) {
+ error3 = 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) {
+ error3 = new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`);
+ } else if (this.processStderr && this.options.failOnStdErr) {
+ error3 = 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", error3, 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();
+ }
+ };
+ }
+});
+
+// node_modules/@actions/exec/lib/exec.js
+var require_exec = __commonJS({
+ "node_modules/@actions/exec/lib/exec.js"(exports2) {
+ "use strict";
+ var __createBinding = exports2 && exports2.__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 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+ } : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar = exports2 && exports2.__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 = exports2 && exports2.__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(exports2, "__esModule", { value: true });
+ exports2.getExecOutput = exports2.exec = void 0;
+ var string_decoder_1 = require("string_decoder");
+ var tr = __importStar(require_toolrunner());
+ function exec2(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 || []);
+ const runner = new tr.ToolRunner(toolPath, args, options);
+ return runner.exec();
+ });
+ }
+ exports2.exec = exec2;
+ function getExecOutput2(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 exec2(commandLine, args, Object.assign(Object.assign({}, options), { listeners }));
+ stdout += stdoutDecoder.end();
+ stderr += stderrDecoder.end();
+ return {
+ exitCode,
+ stdout,
+ stderr
+ };
+ });
+ }
+ exports2.getExecOutput = getExecOutput2;
+ }
+});
+
+// node_modules/@actions/core/lib/platform.js
+var require_platform = __commonJS({
+ "node_modules/@actions/core/lib/platform.js"(exports2) {
+ "use strict";
+ var __createBinding = exports2 && exports2.__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 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+ } : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar = exports2 && exports2.__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 = exports2 && exports2.__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 = exports2 && exports2.__importDefault || function(mod) {
+ return mod && mod.__esModule ? mod : { "default": mod };
+ };
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ exports2.getDetails = exports2.isLinux = exports2.isMacOS = exports2.isWindows = exports2.arch = exports2.platform = void 0;
+ var os_1 = __importDefault(require("os"));
+ var exec2 = __importStar(require_exec());
+ var getWindowsInfo = () => __awaiter(void 0, void 0, void 0, function* () {
+ const { stdout: version } = yield exec2.getExecOutput('powershell -command "(Get-CimInstance -ClassName Win32_OperatingSystem).Version"', void 0, {
+ silent: true
+ });
+ const { stdout: name } = yield exec2.getExecOutput('powershell -command "(Get-CimInstance -ClassName Win32_OperatingSystem).Caption"', void 0, {
+ silent: true
+ });
+ return {
+ name: name.trim(),
+ version: version.trim()
+ };
+ });
+ var getMacOsInfo = () => __awaiter(void 0, void 0, void 0, function* () {
+ var _a, _b, _c, _d;
+ const { stdout } = yield exec2.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 : "";
+ const name = (_d = (_c = stdout.match(/ProductName:\s*(.+)/)) === null || _c === void 0 ? void 0 : _c[1]) !== null && _d !== void 0 ? _d : "";
+ return {
+ name,
+ version
+ };
+ });
+ var getLinuxInfo = () => __awaiter(void 0, void 0, void 0, function* () {
+ const { stdout } = yield exec2.getExecOutput("lsb_release", ["-i", "-r", "-s"], {
+ silent: true
+ });
+ const [name, version] = stdout.trim().split("\n");
+ return {
+ name,
+ version
+ };
+ });
+ exports2.platform = os_1.default.platform();
+ exports2.arch = os_1.default.arch();
+ exports2.isWindows = exports2.platform === "win32";
+ exports2.isMacOS = exports2.platform === "darwin";
+ exports2.isLinux = exports2.platform === "linux";
+ function getDetails() {
+ return __awaiter(this, void 0, void 0, function* () {
+ return Object.assign(Object.assign({}, yield exports2.isWindows ? getWindowsInfo() : exports2.isMacOS ? getMacOsInfo() : getLinuxInfo()), {
+ platform: exports2.platform,
+ arch: exports2.arch,
+ isWindows: exports2.isWindows,
+ isMacOS: exports2.isMacOS,
+ isLinux: exports2.isLinux
+ });
+ });
+ }
+ exports2.getDetails = getDetails;
+ }
+});
+
+// node_modules/@actions/core/lib/core.js
+var require_core = __commonJS({
+ "node_modules/@actions/core/lib/core.js"(exports2) {
+ "use strict";
+ var __createBinding = exports2 && exports2.__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 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+ } : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar = exports2 && exports2.__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 = exports2 && exports2.__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(exports2, "__esModule", { value: true });
+ exports2.platform = exports2.toPlatformPath = exports2.toWin32Path = exports2.toPosixPath = exports2.markdownSummary = exports2.summary = exports2.getIDToken = exports2.getState = exports2.saveState = exports2.group = exports2.endGroup = exports2.startGroup = exports2.info = exports2.notice = exports2.warning = exports2.error = exports2.debug = exports2.isDebug = exports2.setFailed = exports2.setCommandEcho = exports2.setOutput = exports2.getBooleanInput = exports2.getMultilineInput = exports2.getInput = exports2.addPath = exports2.setSecret = exports2.exportVariable = exports2.ExitCode = void 0;
+ var command_1 = require_command();
+ var file_command_1 = require_file_command();
+ var utils_1 = require_utils();
+ var os = __importStar(require("os"));
+ var path5 = __importStar(require("path"));
+ var oidc_utils_1 = require_oidc_utils();
+ var ExitCode;
+ (function(ExitCode2) {
+ ExitCode2[ExitCode2["Success"] = 0] = "Success";
+ ExitCode2[ExitCode2["Failure"] = 1] = "Failure";
+ })(ExitCode || (exports2.ExitCode = ExitCode = {}));
+ function exportVariable(name, val) {
+ const convertedVal = (0, utils_1.toCommandValue)(val);
+ process.env[name] = convertedVal;
+ const filePath = process.env["GITHUB_ENV"] || "";
+ if (filePath) {
+ return (0, file_command_1.issueFileCommand)("ENV", (0, file_command_1.prepareKeyValueMessage)(name, val));
+ }
+ (0, command_1.issueCommand)("set-env", { name }, convertedVal);
+ }
+ exports2.exportVariable = exportVariable;
+ function setSecret(secret) {
+ (0, command_1.issueCommand)("add-mask", {}, secret);
+ }
+ exports2.setSecret = setSecret;
+ function addPath(inputPath) {
+ const filePath = process.env["GITHUB_PATH"] || "";
+ if (filePath) {
+ (0, file_command_1.issueFileCommand)("PATH", inputPath);
+ } else {
+ (0, command_1.issueCommand)("add-path", {}, inputPath);
+ }
+ process.env["PATH"] = `${inputPath}${path5.delimiter}${process.env["PATH"]}`;
+ }
+ exports2.addPath = addPath;
+ function getInput2(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();
+ }
+ exports2.getInput = getInput2;
+ function getMultilineInput(name, options) {
+ const inputs = getInput2(name, options).split("\n").filter((x) => x !== "");
+ if (options && options.trimWhitespace === false) {
+ return inputs;
+ }
+ return inputs.map((input) => input.trim());
+ }
+ exports2.getMultilineInput = getMultilineInput;
+ function getBooleanInput2(name, options) {
+ const trueValue = ["true", "True", "TRUE"];
+ const falseValue = ["false", "False", "FALSE"];
+ const val = getInput2(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}
+Support boolean input list: \`true | True | TRUE | false | False | FALSE\``);
+ }
+ exports2.getBooleanInput = getBooleanInput2;
+ function setOutput3(name, value) {
+ const filePath = process.env["GITHUB_OUTPUT"] || "";
+ if (filePath) {
+ 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));
+ }
+ exports2.setOutput = setOutput3;
+ function setCommandEcho(enabled) {
+ (0, command_1.issue)("echo", enabled ? "on" : "off");
+ }
+ exports2.setCommandEcho = setCommandEcho;
+ function setFailed2(message) {
+ process.exitCode = ExitCode.Failure;
+ error3(message);
+ }
+ exports2.setFailed = setFailed2;
+ function isDebug2() {
+ return process.env["RUNNER_DEBUG"] === "1";
+ }
+ exports2.isDebug = isDebug2;
+ function debug6(message) {
+ (0, command_1.issueCommand)("debug", {}, message);
+ }
+ exports2.debug = debug6;
+ function error3(message, properties = {}) {
+ (0, command_1.issueCommand)("error", (0, utils_1.toCommandProperties)(properties), message instanceof Error ? message.toString() : message);
+ }
+ exports2.error = error3;
+ function warning4(message, properties = {}) {
+ (0, command_1.issueCommand)("warning", (0, utils_1.toCommandProperties)(properties), message instanceof Error ? message.toString() : message);
+ }
+ exports2.warning = warning4;
+ function notice(message, properties = {}) {
+ (0, command_1.issueCommand)("notice", (0, utils_1.toCommandProperties)(properties), message instanceof Error ? message.toString() : message);
+ }
+ exports2.notice = notice;
+ function info4(message) {
+ process.stdout.write(message + os.EOL);
+ }
+ exports2.info = info4;
+ function startGroup3(name) {
+ (0, command_1.issue)("group", name);
+ }
+ exports2.startGroup = startGroup3;
+ function endGroup3() {
+ (0, command_1.issue)("endgroup");
+ }
+ exports2.endGroup = endGroup3;
+ function group(name, fn) {
+ return __awaiter(this, void 0, void 0, function* () {
+ startGroup3(name);
+ let result;
+ try {
+ result = yield fn();
+ } finally {
+ endGroup3();
+ }
+ return result;
+ });
+ }
+ exports2.group = group;
+ function saveState(name, value) {
+ const filePath = process.env["GITHUB_STATE"] || "";
+ if (filePath) {
+ 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));
+ }
+ exports2.saveState = saveState;
+ function getState(name) {
+ return process.env[`STATE_${name}`] || "";
+ }
+ exports2.getState = getState;
+ function getIDToken(aud) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return yield oidc_utils_1.OidcClient.getIDToken(aud);
+ });
+ }
+ exports2.getIDToken = getIDToken;
+ var summary_1 = require_summary();
+ Object.defineProperty(exports2, "summary", { enumerable: true, get: function() {
+ return summary_1.summary;
+ } });
+ var summary_2 = require_summary();
+ Object.defineProperty(exports2, "markdownSummary", { enumerable: true, get: function() {
+ return summary_2.markdownSummary;
+ } });
+ var path_utils_1 = require_path_utils();
+ Object.defineProperty(exports2, "toPosixPath", { enumerable: true, get: function() {
+ return path_utils_1.toPosixPath;
+ } });
+ Object.defineProperty(exports2, "toWin32Path", { enumerable: true, get: function() {
+ return path_utils_1.toWin32Path;
+ } });
+ Object.defineProperty(exports2, "toPlatformPath", { enumerable: true, get: function() {
+ return path_utils_1.toPlatformPath;
+ } });
+ exports2.platform = __importStar(require_platform());
+ }
+});
+
+// node_modules/@actions/github/lib/context.js
+var require_context = __commonJS({
+ "node_modules/@actions/github/lib/context.js"(exports2) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ exports2.Context = void 0;
+ var fs_1 = require("fs");
+ var 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 path5 = process.env.GITHUB_EVENT_PATH;
+ process.stdout.write(`GITHUB_EVENT_PATH ${path5} 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.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'");
+ }
+ };
+ exports2.Context = Context;
+ }
+});
+
+// node_modules/@actions/github/lib/internal/utils.js
+var require_utils3 = __commonJS({
+ "node_modules/@actions/github/lib/internal/utils.js"(exports2) {
+ "use strict";
+ var __createBinding = exports2 && exports2.__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 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+ } : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar = exports2 && exports2.__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 = exports2 && exports2.__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(exports2, "__esModule", { value: true });
+ exports2.getApiBaseUrl = exports2.getProxyFetch = exports2.getProxyAgentDispatcher = exports2.getProxyAgent = exports2.getAuthString = void 0;
+ var httpClient = __importStar(require_lib());
+ var 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}`;
+ }
+ exports2.getAuthString = getAuthString;
+ function getProxyAgent(destinationUrl) {
+ const hc = new httpClient.HttpClient();
+ return hc.getAgent(destinationUrl);
+ }
+ exports2.getProxyAgent = getProxyAgent;
+ function getProxyAgentDispatcher(destinationUrl) {
+ const hc = new httpClient.HttpClient();
+ return hc.getAgentDispatcher(destinationUrl);
+ }
+ exports2.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;
+ }
+ exports2.getProxyFetch = getProxyFetch;
+ function getApiBaseUrl() {
+ return process.env["GITHUB_API_URL"] || "https://api.github.com";
+ }
+ exports2.getApiBaseUrl = getApiBaseUrl;
+ }
+});
+
+// node_modules/universal-user-agent/dist-node/index.js
+var require_dist_node = __commonJS({
+ "node_modules/universal-user-agent/dist-node/index.js"(exports2) {
+ "use strict";
+ Object.defineProperty(exports2, "__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 "";
+ }
+ exports2.getUserAgent = getUserAgent;
+ }
+});
+
+// node_modules/before-after-hook/lib/register.js
+var require_register = __commonJS({
+ "node_modules/before-after-hook/lib/register.js"(exports2, module2) {
+ module2.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, name2) {
+ return register.bind(null, state, name2, callback, options);
+ }, method)();
+ }
+ return Promise.resolve().then(function() {
+ if (!state.registry[name]) {
+ return method(options);
+ }
+ return state.registry[name].reduce(function(method2, registered) {
+ return registered.hook.bind(null, method2, options);
+ }, method)();
+ });
+ }
+ }
+});
+
+// node_modules/before-after-hook/lib/add.js
+var require_add = __commonJS({
+ "node_modules/before-after-hook/lib/add.js"(exports2, module2) {
+ module2.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(error3) {
+ return orig(error3, options);
+ });
+ };
+ }
+ state.registry[name].push({
+ hook,
+ orig
+ });
+ }
+ }
+});
+
+// node_modules/before-after-hook/lib/remove.js
+var require_remove = __commonJS({
+ "node_modules/before-after-hook/lib/remove.js"(exports2, module2) {
+ module2.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);
+ }
+ }
+});
+
+// node_modules/before-after-hook/index.js
+var require_before_after_hook = __commonJS({
+ "node_modules/before-after-hook/index.js"(exports2, module2) {
+ 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();
+ module2.exports = Hook;
+ module2.exports.Hook = Hook;
+ module2.exports.Singular = Hook.Singular;
+ module2.exports.Collection = Hook.Collection;
+ }
+});
+
+// node_modules/@octokit/endpoint/dist-node/index.js
+var require_dist_node2 = __commonJS({
+ "node_modules/@octokit/endpoint/dist-node/index.js"(exports2, module2) {
+ "use strict";
+ var __defProp2 = Object.defineProperty;
+ var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+ var __getOwnPropNames2 = Object.getOwnPropertyNames;
+ var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+ var __export2 = (target, all) => {
+ for (var name in all)
+ __defProp2(target, name, { get: all[name], enumerable: true });
+ };
+ var __copyProps2 = (to, from, except, desc) => {
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames2(from))
+ if (!__hasOwnProp2.call(to, key) && key !== except)
+ __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+ }
+ return to;
+ };
+ var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+ var dist_src_exports = {};
+ __export2(dist_src_exports, {
+ endpoint: () => endpoint
+ });
+ module2.exports = __toCommonJS2(dist_src_exports);
+ var import_universal_user_agent = require_dist_node();
+ var VERSION = "9.0.6";
+ var userAgent = `octokit-endpoint.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}`;
+ var DEFAULTS = {
+ method: "GET",
+ baseUrl: "https://api.github.com",
+ headers: {
+ accept: "application/vnd.github.v3+json",
+ "user-agent": userAgent
+ },
+ 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(context5, operator, key, modifier) {
+ var value = context5[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, context5) {
+ 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(context5, 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 omittedParameters = Object.keys(options).filter((option) => urlVariableNames.includes(option)).concat("baseUrl");
+ const remainingParameters = omit(parameters, omittedParameters);
+ const isBinaryRequest = /application\/octet-stream/i.test(headers.accept);
+ if (!isBinaryRequest) {
+ 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) {
+ const previewsFromAcceptHeader = headers.accept.match(/(? {
+ const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json";
+ return `application/vnd.github.${preview}-preview${format}`;
+ }).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);
+ }
+});
+
+// node_modules/deprecation/dist-node/index.js
+var require_dist_node3 = __commonJS({
+ "node_modules/deprecation/dist-node/index.js"(exports2) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ var Deprecation = class extends Error {
+ constructor(message) {
+ super(message);
+ if (Error.captureStackTrace) {
+ Error.captureStackTrace(this, this.constructor);
+ }
+ this.name = "Deprecation";
+ }
+ };
+ exports2.Deprecation = Deprecation;
+ }
+});
+
+// node_modules/wrappy/wrappy.js
+var require_wrappy = __commonJS({
+ "node_modules/wrappy/wrappy.js"(exports2, module2) {
+ module2.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 cb2 = args[args.length - 1];
+ if (typeof ret === "function" && ret !== cb2) {
+ Object.keys(cb2).forEach(function(k) {
+ ret[k] = cb2[k];
+ });
+ }
+ return ret;
+ }
+ }
+ }
+});
+
+// node_modules/once/once.js
+var require_once = __commonJS({
+ "node_modules/once/once.js"(exports2, module2) {
+ var wrappy = require_wrappy();
+ module2.exports = wrappy(once);
+ module2.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);
+ };
+ var name = fn.name || "Function wrapped with `once`";
+ f.onceError = name + " shouldn't be called more than once";
+ f.called = false;
+ return f;
+ }
+ }
+});
+
+// node_modules/@octokit/request-error/dist-node/index.js
+var require_dist_node4 = __commonJS({
+ "node_modules/@octokit/request-error/dist-node/index.js"(exports2, module2) {
+ "use strict";
+ var __create2 = Object.create;
+ var __defProp2 = Object.defineProperty;
+ var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+ var __getOwnPropNames2 = Object.getOwnPropertyNames;
+ var __getProtoOf2 = Object.getPrototypeOf;
+ var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+ var __export2 = (target, all) => {
+ for (var name in all)
+ __defProp2(target, name, { get: all[name], enumerable: true });
+ };
+ var __copyProps2 = (to, from, except, desc) => {
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames2(from))
+ if (!__hasOwnProp2.call(to, key) && key !== except)
+ __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+ }
+ return to;
+ };
+ var __toESM2 = (mod, isNodeMode, target) => (target = mod != null ? __create2(__getProtoOf2(mod)) : {}, __copyProps2(
+ // If the importer is in node compatibility mode or this is not an ESM
+ // file that has been converted to a CommonJS file using a Babel-
+ // compatible transform (i.e. "__esModule" has not been set), then set
+ // "default" to the CommonJS "module.exports" for node compatibility.
+ isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target,
+ mod
+ ));
+ var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+ var dist_src_exports = {};
+ __export2(dist_src_exports, {
+ RequestError: () => RequestError
+ });
+ module2.exports = __toCommonJS2(dist_src_exports);
+ var import_deprecation = require_dist_node3();
+ var import_once = __toESM2(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(
+ /(? {
+ for (var name in all)
+ __defProp2(target, name, { get: all[name], enumerable: true });
+ };
+ var __copyProps2 = (to, from, except, desc) => {
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames2(from))
+ if (!__hasOwnProp2.call(to, key) && key !== except)
+ __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+ }
+ return to;
+ };
+ var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+ var dist_src_exports = {};
+ __export2(dist_src_exports, {
+ request: () => request
+ });
+ module2.exports = __toCommonJS2(dist_src_exports);
+ var import_endpoint = require_dist_node2();
+ var import_universal_user_agent = require_dist_node();
+ 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_node4();
+ 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,
+ // duplex must be set if request.body is ReadableStream or Async Iterables.
+ // See https://fetch.spec.whatwg.org/#dom-requestinit-duplex.
+ ...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);
+ const error3 = new import_request_error.RequestError(toErrorMessage(data), status, {
+ response: {
+ url,
+ status,
+ headers,
+ data
+ },
+ request: requestOptions
+ });
+ throw error3;
+ }
+ return parseSuccessResponseBody ? await getResponseData(response) : response.body;
+ }).then((data) => {
+ return {
+ status,
+ url,
+ headers,
+ data
+ };
+ }).catch((error3) => {
+ if (error3 instanceof import_request_error.RequestError)
+ throw error3;
+ else if (error3.name === "AbortError")
+ throw error3;
+ let message = error3.message;
+ if (error3.name === "TypeError" && "cause" in error3) {
+ if (error3.cause instanceof Error) {
+ message = error3.cause.message;
+ } else if (typeof error3.cause === "string") {
+ message = error3.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)()}`
+ }
+ });
+ }
+});
+
+// node_modules/@octokit/graphql/dist-node/index.js
+var require_dist_node6 = __commonJS({
+ "node_modules/@octokit/graphql/dist-node/index.js"(exports2, module2) {
+ "use strict";
+ var __defProp2 = Object.defineProperty;
+ var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+ var __getOwnPropNames2 = Object.getOwnPropertyNames;
+ var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+ var __export2 = (target, all) => {
+ for (var name in all)
+ __defProp2(target, name, { get: all[name], enumerable: true });
+ };
+ var __copyProps2 = (to, from, except, desc) => {
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames2(from))
+ if (!__hasOwnProp2.call(to, key) && key !== except)
+ __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+ }
+ return to;
+ };
+ var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+ var index_exports = {};
+ __export2(index_exports, {
+ GraphqlResponseError: () => GraphqlResponseError,
+ graphql: () => graphql2,
+ withCustomRequest: () => withCustomRequest
+ });
+ module2.exports = __toCommonJS2(index_exports);
+ var import_request3 = require_dist_node5();
+ var import_universal_user_agent = require_dist_node();
+ var VERSION = "7.1.1";
+ var import_request2 = require_dist_node5();
+ var import_request = require_dist_node5();
+ 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(
+ 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(
+ 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"
+ });
+ }
+ }
+});
+
+// node_modules/@octokit/auth-token/dist-node/index.js
+var require_dist_node7 = __commonJS({
+ "node_modules/@octokit/auth-token/dist-node/index.js"(exports2, module2) {
+ "use strict";
+ var __defProp2 = Object.defineProperty;
+ var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+ var __getOwnPropNames2 = Object.getOwnPropertyNames;
+ var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+ var __export2 = (target, all) => {
+ for (var name in all)
+ __defProp2(target, name, { get: all[name], enumerable: true });
+ };
+ var __copyProps2 = (to, from, except, desc) => {
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames2(from))
+ if (!__hasOwnProp2.call(to, key) && key !== except)
+ __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+ }
+ return to;
+ };
+ var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+ var dist_src_exports = {};
+ __export2(dist_src_exports, {
+ createTokenAuth: () => createTokenAuth
+ });
+ module2.exports = __toCommonJS2(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);
+ const tokenType = isApp ? "app" : isInstallation ? "installation" : isUserToServer ? "user-to-server" : "oauth";
+ return {
+ type: "token",
+ token,
+ tokenType
+ };
+ }
+ 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)
+ });
+ };
+ }
+});
+
+// node_modules/@octokit/core/dist-node/index.js
+var require_dist_node8 = __commonJS({
+ "node_modules/@octokit/core/dist-node/index.js"(exports2, module2) {
+ "use strict";
+ var __defProp2 = Object.defineProperty;
+ var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+ var __getOwnPropNames2 = Object.getOwnPropertyNames;
+ var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+ var __export2 = (target, all) => {
+ for (var name in all)
+ __defProp2(target, name, { get: all[name], enumerable: true });
+ };
+ var __copyProps2 = (to, from, except, desc) => {
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames2(from))
+ if (!__hasOwnProp2.call(to, key) && key !== except)
+ __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+ }
+ return to;
+ };
+ var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+ var dist_src_exports = {};
+ __export2(dist_src_exports, {
+ Octokit: () => Octokit
+ });
+ module2.exports = __toCommonJS2(dist_src_exports);
+ var import_universal_user_agent = require_dist_node();
+ var import_before_after_hook = require_before_after_hook();
+ var import_request = require_dist_node5();
+ var import_graphql = require_dist_node6();
+ var import_auth_token = require_dist_node7();
+ var VERSION = "5.2.0";
+ var noop = () => {
+ };
+ var consoleWarn = console.warn.bind(console);
+ var consoleError = console.error.bind(console);
+ 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, {
+ // @ts-ignore internal usage only, no need to type
+ 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 = Object.assign(
+ {
+ debug: noop,
+ info: noop,
+ warn: consoleWarn,
+ error: consoleError
+ },
+ 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,
+ // we pass the current octokit instance as well as its constructor options
+ // to allow for authentication strategies that return a new octokit instance
+ // that shares the same internal state as the current one. The original
+ // requirement for this was the "event-octokit" authentication strategy
+ // of https://github.com/probot/octokit-auth-probot.
+ 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));
+ }
+ }
+ };
+ }
+});
+
+// node_modules/@octokit/plugin-rest-endpoint-methods/dist-node/index.js
+var require_dist_node9 = __commonJS({
+ "node_modules/@octokit/plugin-rest-endpoint-methods/dist-node/index.js"(exports2, module2) {
+ "use strict";
+ var __defProp2 = Object.defineProperty;
+ var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+ var __getOwnPropNames2 = Object.getOwnPropertyNames;
+ var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+ var __export2 = (target, all) => {
+ for (var name in all)
+ __defProp2(target, name, { get: all[name], enumerable: true });
+ };
+ var __copyProps2 = (to, from, except, desc) => {
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames2(from))
+ if (!__hasOwnProp2.call(to, key) && key !== except)
+ __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+ }
+ return to;
+ };
+ var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+ var dist_src_exports = {};
+ __export2(dist_src_exports, {
+ legacyRestEndpointMethods: () => legacyRestEndpointMethods,
+ restEndpointMethods: () => restEndpointMethods
+ });
+ module2.exports = __toCommonJS2(dist_src_exports);
+ var VERSION = "10.4.1";
+ var Endpoints = {
+ 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 endpoints_default = Endpoints;
+ 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),
+ // ensures method is in the cache
+ 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 void 0;
+ }
+ 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) {
+ const api = endpointsToMethods(octokit);
+ return {
+ rest: api
+ };
+ }
+ restEndpointMethods.VERSION = VERSION;
+ function legacyRestEndpointMethods(octokit) {
+ const api = endpointsToMethods(octokit);
+ return {
+ ...api,
+ rest: api
+ };
+ }
+ legacyRestEndpointMethods.VERSION = VERSION;
+ }
+});
+
+// node_modules/@octokit/plugin-paginate-rest/dist-node/index.js
+var require_dist_node10 = __commonJS({
+ "node_modules/@octokit/plugin-paginate-rest/dist-node/index.js"(exports2, module2) {
+ "use strict";
+ var __defProp2 = Object.defineProperty;
+ var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+ var __getOwnPropNames2 = Object.getOwnPropertyNames;
+ var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+ var __export2 = (target, all) => {
+ for (var name in all)
+ __defProp2(target, name, { get: all[name], enumerable: true });
+ };
+ var __copyProps2 = (to, from, except, desc) => {
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames2(from))
+ if (!__hasOwnProp2.call(to, key) && key !== except)
+ __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+ }
+ return to;
+ };
+ var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+ var dist_src_exports = {};
+ __export2(dist_src_exports, {
+ composePaginateRest: () => composePaginateRest,
+ isPaginatingEndpoint: () => isPaginatingEndpoint,
+ paginateRest: () => paginateRest,
+ paginatingEndpoints: () => paginatingEndpoints
+ });
+ module2.exports = __toCommonJS2(dist_src_exports);
+ var VERSION = "9.2.2";
+ function normalizePaginatedListResponse(response) {
+ if (!response.data) {
+ return {
+ ...response,
+ data: []
+ };
+ }
+ const responseNeedsNormalization = "total_count" in response.data && !("url" in response.data);
+ if (!responseNeedsNormalization)
+ 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];
+ const data = response.data[namespaceKey];
+ response.data = data;
+ 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 response = await requestMethod({ method, url, headers });
+ const normalizedResponse = normalizePaginatedListResponse(response);
+ url = ((normalizedResponse.headers.link || "").match(
+ /<([^<>]+)>;\s*rel="next"/
+ ) || [])[1];
+ return { value: normalizedResponse };
+ } catch (error3) {
+ if (error3.status !== 409)
+ throw error3;
+ 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;
+ }
+});
+
+// node_modules/@actions/github/lib/utils.js
+var require_utils4 = __commonJS({
+ "node_modules/@actions/github/lib/utils.js"(exports2) {
+ "use strict";
+ var __createBinding = exports2 && exports2.__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 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+ } : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar = exports2 && exports2.__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(exports2, "__esModule", { value: true });
+ exports2.getOctokitOptions = exports2.GitHub = exports2.defaults = exports2.context = void 0;
+ var Context = __importStar(require_context());
+ var Utils = __importStar(require_utils3());
+ var core_1 = require_dist_node8();
+ var plugin_rest_endpoint_methods_1 = require_dist_node9();
+ var plugin_paginate_rest_1 = require_dist_node10();
+ exports2.context = new Context.Context();
+ var baseUrl = Utils.getApiBaseUrl();
+ exports2.defaults = {
+ baseUrl,
+ request: {
+ agent: Utils.getProxyAgent(baseUrl),
+ fetch: Utils.getProxyFetch(baseUrl)
+ }
+ };
+ exports2.GitHub = core_1.Octokit.plugin(plugin_rest_endpoint_methods_1.restEndpointMethods, plugin_paginate_rest_1.paginateRest).defaults(exports2.defaults);
+ function getOctokitOptions(token, options) {
+ const opts = Object.assign({}, options || {});
+ const auth = Utils.getAuthString(token, opts);
+ if (auth) {
+ opts.auth = auth;
+ }
+ return opts;
+ }
+ exports2.getOctokitOptions = getOctokitOptions;
+ }
+});
+
+// node_modules/@actions/github/lib/github.js
+var require_github = __commonJS({
+ "node_modules/@actions/github/lib/github.js"(exports2) {
+ "use strict";
+ var __createBinding = exports2 && exports2.__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 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+ } : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar = exports2 && exports2.__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(exports2, "__esModule", { value: true });
+ exports2.getOctokit = exports2.context = void 0;
+ var Context = __importStar(require_context());
+ var utils_1 = require_utils4();
+ exports2.context = new Context.Context();
+ function getOctokit3(token, options, ...additionalPlugins) {
+ const GitHubWithPlugins = utils_1.GitHub.plugin(...additionalPlugins);
+ return new GitHubWithPlugins((0, utils_1.getOctokitOptions)(token, options));
+ }
+ exports2.getOctokit = getOctokit3;
+ }
+});
+
+// node_modules/lodash/_arrayPush.js
+var require_arrayPush = __commonJS({
+ "node_modules/lodash/_arrayPush.js"(exports2, module2) {
+ function arrayPush(array, values) {
+ var index = -1, length = values.length, offset = array.length;
+ while (++index < length) {
+ array[offset + index] = values[index];
+ }
+ return array;
+ }
+ module2.exports = arrayPush;
+ }
+});
+
+// node_modules/lodash/_freeGlobal.js
+var require_freeGlobal = __commonJS({
+ "node_modules/lodash/_freeGlobal.js"(exports2, module2) {
+ var freeGlobal = typeof global == "object" && global && global.Object === Object && global;
+ module2.exports = freeGlobal;
+ }
+});
+
+// node_modules/lodash/_root.js
+var require_root = __commonJS({
+ "node_modules/lodash/_root.js"(exports2, module2) {
+ var freeGlobal = require_freeGlobal();
+ var freeSelf = typeof self == "object" && self && self.Object === Object && self;
+ var root = freeGlobal || freeSelf || Function("return this")();
+ module2.exports = root;
+ }
+});
+
+// node_modules/lodash/_Symbol.js
+var require_Symbol = __commonJS({
+ "node_modules/lodash/_Symbol.js"(exports2, module2) {
+ var root = require_root();
+ var Symbol2 = root.Symbol;
+ module2.exports = Symbol2;
+ }
+});
+
+// node_modules/lodash/_getRawTag.js
+var require_getRawTag = __commonJS({
+ "node_modules/lodash/_getRawTag.js"(exports2, module2) {
+ var Symbol2 = require_Symbol();
+ var objectProto = Object.prototype;
+ var hasOwnProperty = objectProto.hasOwnProperty;
+ var nativeObjectToString = objectProto.toString;
+ var symToStringTag = Symbol2 ? Symbol2.toStringTag : void 0;
+ function getRawTag(value) {
+ var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag];
+ try {
+ value[symToStringTag] = void 0;
+ var unmasked = true;
+ } catch (e) {
+ }
+ var result = nativeObjectToString.call(value);
+ if (unmasked) {
+ if (isOwn) {
+ value[symToStringTag] = tag;
+ } else {
+ delete value[symToStringTag];
+ }
+ }
+ return result;
+ }
+ module2.exports = getRawTag;
+ }
+});
+
+// node_modules/lodash/_objectToString.js
+var require_objectToString = __commonJS({
+ "node_modules/lodash/_objectToString.js"(exports2, module2) {
+ var objectProto = Object.prototype;
+ var nativeObjectToString = objectProto.toString;
+ function objectToString(value) {
+ return nativeObjectToString.call(value);
+ }
+ module2.exports = objectToString;
+ }
+});
+
+// node_modules/lodash/_baseGetTag.js
+var require_baseGetTag = __commonJS({
+ "node_modules/lodash/_baseGetTag.js"(exports2, module2) {
+ var Symbol2 = require_Symbol();
+ var getRawTag = require_getRawTag();
+ var objectToString = require_objectToString();
+ var nullTag = "[object Null]";
+ var undefinedTag = "[object Undefined]";
+ var symToStringTag = Symbol2 ? Symbol2.toStringTag : void 0;
+ function baseGetTag(value) {
+ if (value == null) {
+ return value === void 0 ? undefinedTag : nullTag;
+ }
+ return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);
+ }
+ module2.exports = baseGetTag;
+ }
+});
+
+// node_modules/lodash/isObjectLike.js
+var require_isObjectLike = __commonJS({
+ "node_modules/lodash/isObjectLike.js"(exports2, module2) {
+ function isObjectLike(value) {
+ return value != null && typeof value == "object";
+ }
+ module2.exports = isObjectLike;
+ }
+});
+
+// node_modules/lodash/_baseIsArguments.js
+var require_baseIsArguments = __commonJS({
+ "node_modules/lodash/_baseIsArguments.js"(exports2, module2) {
+ var baseGetTag = require_baseGetTag();
+ var isObjectLike = require_isObjectLike();
+ var argsTag = "[object Arguments]";
+ function baseIsArguments(value) {
+ return isObjectLike(value) && baseGetTag(value) == argsTag;
+ }
+ module2.exports = baseIsArguments;
+ }
+});
+
+// node_modules/lodash/isArguments.js
+var require_isArguments = __commonJS({
+ "node_modules/lodash/isArguments.js"(exports2, module2) {
+ var baseIsArguments = require_baseIsArguments();
+ var isObjectLike = require_isObjectLike();
+ var objectProto = Object.prototype;
+ var hasOwnProperty = objectProto.hasOwnProperty;
+ var propertyIsEnumerable = objectProto.propertyIsEnumerable;
+ var isArguments = baseIsArguments(/* @__PURE__ */ function() {
+ return arguments;
+ }()) ? baseIsArguments : function(value) {
+ return isObjectLike(value) && hasOwnProperty.call(value, "callee") && !propertyIsEnumerable.call(value, "callee");
+ };
+ module2.exports = isArguments;
+ }
+});
+
+// node_modules/lodash/isArray.js
+var require_isArray = __commonJS({
+ "node_modules/lodash/isArray.js"(exports2, module2) {
+ var isArray = Array.isArray;
+ module2.exports = isArray;
+ }
+});
+
+// node_modules/lodash/_isFlattenable.js
+var require_isFlattenable = __commonJS({
+ "node_modules/lodash/_isFlattenable.js"(exports2, module2) {
+ var Symbol2 = require_Symbol();
+ var isArguments = require_isArguments();
+ var isArray = require_isArray();
+ var spreadableSymbol = Symbol2 ? Symbol2.isConcatSpreadable : void 0;
+ function isFlattenable(value) {
+ return isArray(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]);
+ }
+ module2.exports = isFlattenable;
+ }
+});
+
+// node_modules/lodash/_baseFlatten.js
+var require_baseFlatten = __commonJS({
+ "node_modules/lodash/_baseFlatten.js"(exports2, module2) {
+ var arrayPush = require_arrayPush();
+ var isFlattenable = require_isFlattenable();
+ function baseFlatten(array, depth, predicate, isStrict, result) {
+ var index = -1, length = array.length;
+ predicate || (predicate = isFlattenable);
+ result || (result = []);
+ while (++index < length) {
+ var value = array[index];
+ if (depth > 0 && predicate(value)) {
+ if (depth > 1) {
+ baseFlatten(value, depth - 1, predicate, isStrict, result);
+ } else {
+ arrayPush(result, value);
+ }
+ } else if (!isStrict) {
+ result[result.length] = value;
+ }
+ }
+ return result;
+ }
+ module2.exports = baseFlatten;
+ }
+});
+
+// node_modules/lodash/flatten.js
+var require_flatten = __commonJS({
+ "node_modules/lodash/flatten.js"(exports2, module2) {
+ var baseFlatten = require_baseFlatten();
+ function flatten2(array) {
+ var length = array == null ? 0 : array.length;
+ return length ? baseFlatten(array, 1) : [];
+ }
+ module2.exports = flatten2;
+ }
+});
+
+// node_modules/@stdlib/utils-define-property/lib/define_property.js
+var require_define_property = __commonJS({
+ "node_modules/@stdlib/utils-define-property/lib/define_property.js"(exports2, module2) {
+ "use strict";
+ var main = typeof Object.defineProperty === "function" ? Object.defineProperty : null;
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/utils-define-property/lib/has_define_property_support.js
+var require_has_define_property_support = __commonJS({
+ "node_modules/@stdlib/utils-define-property/lib/has_define_property_support.js"(exports2, module2) {
+ "use strict";
+ var defineProperty = require_define_property();
+ function hasDefinePropertySupport() {
+ try {
+ defineProperty({}, "x", {});
+ return true;
+ } catch (err) {
+ return false;
+ }
+ }
+ module2.exports = hasDefinePropertySupport;
+ }
+});
+
+// node_modules/@stdlib/utils-define-property/lib/builtin.js
+var require_builtin = __commonJS({
+ "node_modules/@stdlib/utils-define-property/lib/builtin.js"(exports2, module2) {
+ "use strict";
+ var defineProperty = Object.defineProperty;
+ module2.exports = defineProperty;
+ }
+});
+
+// node_modules/@stdlib/string-base-format-interpolate/lib/is_number.js
+var require_is_number = __commonJS({
+ "node_modules/@stdlib/string-base-format-interpolate/lib/is_number.js"(exports2, module2) {
+ "use strict";
+ function isNumber(value) {
+ return typeof value === "number";
+ }
+ module2.exports = isNumber;
+ }
+});
+
+// node_modules/@stdlib/string-base-format-interpolate/lib/zero_pad.js
+var require_zero_pad = __commonJS({
+ "node_modules/@stdlib/string-base-format-interpolate/lib/zero_pad.js"(exports2, module2) {
+ "use strict";
+ function startsWithMinus(str) {
+ return str[0] === "-";
+ }
+ function zeros(n) {
+ var out = "";
+ var i;
+ for (i = 0; i < n; i++) {
+ out += "0";
+ }
+ return out;
+ }
+ function zeroPad(str, width, right) {
+ var negative = false;
+ var pad = width - str.length;
+ if (pad < 0) {
+ return str;
+ }
+ if (startsWithMinus(str)) {
+ negative = true;
+ str = str.substr(1);
+ }
+ str = right ? str + zeros(pad) : zeros(pad) + str;
+ if (negative) {
+ str = "-" + str;
+ }
+ return str;
+ }
+ module2.exports = zeroPad;
+ }
+});
+
+// node_modules/@stdlib/string-base-format-interpolate/lib/format_integer.js
+var require_format_integer = __commonJS({
+ "node_modules/@stdlib/string-base-format-interpolate/lib/format_integer.js"(exports2, module2) {
+ "use strict";
+ var isNumber = require_is_number();
+ var zeroPad = require_zero_pad();
+ var lowercase = String.prototype.toLowerCase;
+ var uppercase = String.prototype.toUpperCase;
+ function formatInteger(token) {
+ var base;
+ var out;
+ var i;
+ switch (token.specifier) {
+ case "b":
+ base = 2;
+ break;
+ case "o":
+ base = 8;
+ break;
+ case "x":
+ case "X":
+ base = 16;
+ break;
+ case "d":
+ case "i":
+ case "u":
+ default:
+ base = 10;
+ break;
+ }
+ out = token.arg;
+ i = parseInt(out, 10);
+ if (!isFinite(i)) {
+ if (!isNumber(out)) {
+ throw new Error("invalid integer. Value: " + out);
+ }
+ i = 0;
+ }
+ if (i < 0 && (token.specifier === "u" || base !== 10)) {
+ i = 4294967295 + i + 1;
+ }
+ if (i < 0) {
+ out = (-i).toString(base);
+ if (token.precision) {
+ out = zeroPad(out, token.precision, token.padRight);
+ }
+ out = "-" + out;
+ } else {
+ out = i.toString(base);
+ if (!i && !token.precision) {
+ out = "";
+ } else if (token.precision) {
+ out = zeroPad(out, token.precision, token.padRight);
+ }
+ if (token.sign) {
+ out = token.sign + out;
+ }
+ }
+ if (base === 16) {
+ if (token.alternate) {
+ out = "0x" + out;
+ }
+ out = token.specifier === uppercase.call(token.specifier) ? uppercase.call(out) : lowercase.call(out);
+ }
+ if (base === 8) {
+ if (token.alternate && out.charAt(0) !== "0") {
+ out = "0" + out;
+ }
+ }
+ return out;
+ }
+ module2.exports = formatInteger;
+ }
+});
+
+// node_modules/@stdlib/string-base-format-interpolate/lib/is_string.js
+var require_is_string = __commonJS({
+ "node_modules/@stdlib/string-base-format-interpolate/lib/is_string.js"(exports2, module2) {
+ "use strict";
+ function isString(value) {
+ return typeof value === "string";
+ }
+ module2.exports = isString;
+ }
+});
+
+// node_modules/@stdlib/string-base-format-interpolate/lib/format_double.js
+var require_format_double = __commonJS({
+ "node_modules/@stdlib/string-base-format-interpolate/lib/format_double.js"(exports2, module2) {
+ "use strict";
+ var isNumber = require_is_number();
+ var abs = Math.abs;
+ var lowercase = String.prototype.toLowerCase;
+ var uppercase = String.prototype.toUpperCase;
+ var replace = String.prototype.replace;
+ var RE_EXP_POS_DIGITS = /e\+(\d)$/;
+ var RE_EXP_NEG_DIGITS = /e-(\d)$/;
+ var RE_ONLY_DIGITS = /^(\d+)$/;
+ var RE_DIGITS_BEFORE_EXP = /^(\d+)e/;
+ var RE_TRAILING_PERIOD_ZERO = /\.0$/;
+ var RE_PERIOD_ZERO_EXP = /\.0*e/;
+ var RE_ZERO_BEFORE_EXP = /(\..*[^0])0*e/;
+ function formatDouble(token) {
+ var digits;
+ var out;
+ var f = parseFloat(token.arg);
+ if (!isFinite(f)) {
+ if (!isNumber(token.arg)) {
+ throw new Error("invalid floating-point number. Value: " + out);
+ }
+ f = token.arg;
+ }
+ switch (token.specifier) {
+ case "e":
+ case "E":
+ out = f.toExponential(token.precision);
+ break;
+ case "f":
+ case "F":
+ out = f.toFixed(token.precision);
+ break;
+ case "g":
+ case "G":
+ if (abs(f) < 1e-4) {
+ digits = token.precision;
+ if (digits > 0) {
+ digits -= 1;
+ }
+ out = f.toExponential(digits);
+ } else {
+ out = f.toPrecision(token.precision);
+ }
+ if (!token.alternate) {
+ out = replace.call(out, RE_ZERO_BEFORE_EXP, "$1e");
+ out = replace.call(out, RE_PERIOD_ZERO_EXP, "e");
+ out = replace.call(out, RE_TRAILING_PERIOD_ZERO, "");
+ }
+ break;
+ default:
+ throw new Error("invalid double notation. Value: " + token.specifier);
+ }
+ out = replace.call(out, RE_EXP_POS_DIGITS, "e+0$1");
+ out = replace.call(out, RE_EXP_NEG_DIGITS, "e-0$1");
+ if (token.alternate) {
+ out = replace.call(out, RE_ONLY_DIGITS, "$1.");
+ out = replace.call(out, RE_DIGITS_BEFORE_EXP, "$1.e");
+ }
+ if (f >= 0 && token.sign) {
+ out = token.sign + out;
+ }
+ out = token.specifier === uppercase.call(token.specifier) ? uppercase.call(out) : lowercase.call(out);
+ return out;
+ }
+ module2.exports = formatDouble;
+ }
+});
+
+// node_modules/@stdlib/string-base-format-interpolate/lib/space_pad.js
+var require_space_pad = __commonJS({
+ "node_modules/@stdlib/string-base-format-interpolate/lib/space_pad.js"(exports2, module2) {
+ "use strict";
+ function spaces(n) {
+ var out = "";
+ var i;
+ for (i = 0; i < n; i++) {
+ out += " ";
+ }
+ return out;
+ }
+ function spacePad(str, width, right) {
+ var pad = width - str.length;
+ if (pad < 0) {
+ return str;
+ }
+ str = right ? str + spaces(pad) : spaces(pad) + str;
+ return str;
+ }
+ module2.exports = spacePad;
+ }
+});
+
+// node_modules/@stdlib/string-base-format-interpolate/lib/main.js
+var require_main2 = __commonJS({
+ "node_modules/@stdlib/string-base-format-interpolate/lib/main.js"(exports2, module2) {
+ "use strict";
+ var formatInteger = require_format_integer();
+ var isString = require_is_string();
+ var formatDouble = require_format_double();
+ var spacePad = require_space_pad();
+ var zeroPad = require_zero_pad();
+ var fromCharCode = String.fromCharCode;
+ var isArray = Array.isArray;
+ function isnan(value) {
+ return value !== value;
+ }
+ function initialize(token) {
+ var out = {};
+ out.specifier = token.specifier;
+ out.precision = token.precision === void 0 ? 1 : token.precision;
+ out.width = token.width;
+ out.flags = token.flags || "";
+ out.mapping = token.mapping;
+ return out;
+ }
+ function formatInterpolate(tokens) {
+ var hasPeriod;
+ var flags;
+ var token;
+ var flag;
+ var num;
+ var out;
+ var pos;
+ var i;
+ var j;
+ if (!isArray(tokens)) {
+ throw new TypeError("invalid argument. First argument must be an array. Value: `" + tokens + "`.");
+ }
+ out = "";
+ pos = 1;
+ for (i = 0; i < tokens.length; i++) {
+ token = tokens[i];
+ if (isString(token)) {
+ out += token;
+ } else {
+ hasPeriod = token.precision !== void 0;
+ token = initialize(token);
+ if (!token.specifier) {
+ throw new TypeError("invalid argument. Token is missing `specifier` property. Index: `" + i + "`. Value: `" + token + "`.");
+ }
+ if (token.mapping) {
+ pos = token.mapping;
+ }
+ flags = token.flags;
+ for (j = 0; j < flags.length; j++) {
+ flag = flags.charAt(j);
+ switch (flag) {
+ case " ":
+ token.sign = " ";
+ break;
+ case "+":
+ token.sign = "+";
+ break;
+ case "-":
+ token.padRight = true;
+ token.padZeros = false;
+ break;
+ case "0":
+ token.padZeros = flags.indexOf("-") < 0;
+ break;
+ case "#":
+ token.alternate = true;
+ break;
+ default:
+ throw new Error("invalid flag: " + flag);
+ }
+ }
+ if (token.width === "*") {
+ token.width = parseInt(arguments[pos], 10);
+ pos += 1;
+ if (isnan(token.width)) {
+ throw new TypeError("the argument for * width at position " + pos + " is not a number. Value: `" + token.width + "`.");
+ }
+ if (token.width < 0) {
+ token.padRight = true;
+ token.width = -token.width;
+ }
+ }
+ if (hasPeriod) {
+ if (token.precision === "*") {
+ token.precision = parseInt(arguments[pos], 10);
+ pos += 1;
+ if (isnan(token.precision)) {
+ throw new TypeError("the argument for * precision at position " + pos + " is not a number. Value: `" + token.precision + "`.");
+ }
+ if (token.precision < 0) {
+ token.precision = 1;
+ hasPeriod = false;
+ }
+ }
+ }
+ token.arg = arguments[pos];
+ switch (token.specifier) {
+ case "b":
+ case "o":
+ case "x":
+ case "X":
+ case "d":
+ case "i":
+ case "u":
+ if (hasPeriod) {
+ token.padZeros = false;
+ }
+ token.arg = formatInteger(token);
+ break;
+ case "s":
+ token.maxWidth = hasPeriod ? token.precision : -1;
+ token.arg = String(token.arg);
+ break;
+ case "c":
+ if (!isnan(token.arg)) {
+ num = parseInt(token.arg, 10);
+ if (num < 0 || num > 127) {
+ throw new Error("invalid character code. Value: " + token.arg);
+ }
+ token.arg = isnan(num) ? String(token.arg) : fromCharCode(num);
+ }
+ break;
+ case "e":
+ case "E":
+ case "f":
+ case "F":
+ case "g":
+ case "G":
+ if (!hasPeriod) {
+ token.precision = 6;
+ }
+ token.arg = formatDouble(token);
+ break;
+ default:
+ throw new Error("invalid specifier: " + token.specifier);
+ }
+ if (token.maxWidth >= 0 && token.arg.length > token.maxWidth) {
+ token.arg = token.arg.substring(0, token.maxWidth);
+ }
+ if (token.padZeros) {
+ token.arg = zeroPad(token.arg, token.width || token.precision, token.padRight);
+ } else if (token.width) {
+ token.arg = spacePad(token.arg, token.width, token.padRight);
+ }
+ out += token.arg || "";
+ pos += 1;
+ }
+ }
+ return out;
+ }
+ module2.exports = formatInterpolate;
+ }
+});
+
+// node_modules/@stdlib/string-base-format-interpolate/lib/index.js
+var require_lib2 = __commonJS({
+ "node_modules/@stdlib/string-base-format-interpolate/lib/index.js"(exports2, module2) {
+ "use strict";
+ var main = require_main2();
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/string-base-format-tokenize/lib/main.js
+var require_main3 = __commonJS({
+ "node_modules/@stdlib/string-base-format-tokenize/lib/main.js"(exports2, module2) {
+ "use strict";
+ var RE = /%(?:([1-9]\d*)\$)?([0 +\-#]*)(\*|\d+)?(?:(\.)(\*|\d+)?)?[hlL]?([%A-Za-z])/g;
+ function parse(match) {
+ var token = {
+ "mapping": match[1] ? parseInt(match[1], 10) : void 0,
+ "flags": match[2],
+ "width": match[3],
+ "precision": match[5],
+ "specifier": match[6]
+ };
+ if (match[4] === "." && match[5] === void 0) {
+ token.precision = "1";
+ }
+ return token;
+ }
+ function formatTokenize(str) {
+ var content;
+ var tokens;
+ var match;
+ var prev;
+ tokens = [];
+ prev = 0;
+ match = RE.exec(str);
+ while (match) {
+ content = str.slice(prev, RE.lastIndex - match[0].length);
+ if (content.length) {
+ tokens.push(content);
+ }
+ tokens.push(parse(match));
+ prev = RE.lastIndex;
+ match = RE.exec(str);
+ }
+ content = str.slice(prev);
+ if (content.length) {
+ tokens.push(content);
+ }
+ return tokens;
+ }
+ module2.exports = formatTokenize;
+ }
+});
+
+// node_modules/@stdlib/string-base-format-tokenize/lib/index.js
+var require_lib3 = __commonJS({
+ "node_modules/@stdlib/string-base-format-tokenize/lib/index.js"(exports2, module2) {
+ "use strict";
+ var main = require_main3();
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/string-format/lib/is_string.js
+var require_is_string2 = __commonJS({
+ "node_modules/@stdlib/string-format/lib/is_string.js"(exports2, module2) {
+ "use strict";
+ function isString(value) {
+ return typeof value === "string";
+ }
+ module2.exports = isString;
+ }
+});
+
+// node_modules/@stdlib/string-format/lib/main.js
+var require_main4 = __commonJS({
+ "node_modules/@stdlib/string-format/lib/main.js"(exports2, module2) {
+ "use strict";
+ var interpolate = require_lib2();
+ var tokenize = require_lib3();
+ var isString = require_is_string2();
+ function format(str) {
+ var args;
+ var i;
+ if (!isString(str)) {
+ throw new TypeError(format("invalid argument. First argument must be a string. Value: `%s`.", str));
+ }
+ args = [tokenize(str)];
+ for (i = 1; i < arguments.length; i++) {
+ args.push(arguments[i]);
+ }
+ return interpolate.apply(null, args);
+ }
+ module2.exports = format;
+ }
+});
+
+// node_modules/@stdlib/string-format/lib/index.js
+var require_lib4 = __commonJS({
+ "node_modules/@stdlib/string-format/lib/index.js"(exports2, module2) {
+ "use strict";
+ var main = require_main4();
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/utils-define-property/lib/polyfill.js
+var require_polyfill = __commonJS({
+ "node_modules/@stdlib/utils-define-property/lib/polyfill.js"(exports2, module2) {
+ "use strict";
+ var format = require_lib4();
+ var objectProtoype = Object.prototype;
+ var toStr = objectProtoype.toString;
+ var defineGetter = objectProtoype.__defineGetter__;
+ var defineSetter = objectProtoype.__defineSetter__;
+ var lookupGetter = objectProtoype.__lookupGetter__;
+ var lookupSetter = objectProtoype.__lookupSetter__;
+ function defineProperty(obj, prop, descriptor) {
+ var prototype;
+ var hasValue;
+ var hasGet;
+ var hasSet;
+ if (typeof obj !== "object" || obj === null || toStr.call(obj) === "[object Array]") {
+ throw new TypeError(format("invalid argument. First argument must be an object. Value: `%s`.", obj));
+ }
+ if (typeof descriptor !== "object" || descriptor === null || toStr.call(descriptor) === "[object Array]") {
+ throw new TypeError(format("invalid argument. Property descriptor must be an object. Value: `%s`.", descriptor));
+ }
+ hasValue = "value" in descriptor;
+ if (hasValue) {
+ if (lookupGetter.call(obj, prop) || lookupSetter.call(obj, prop)) {
+ prototype = obj.__proto__;
+ obj.__proto__ = objectProtoype;
+ delete obj[prop];
+ obj[prop] = descriptor.value;
+ obj.__proto__ = prototype;
+ } else {
+ obj[prop] = descriptor.value;
+ }
+ }
+ hasGet = "get" in descriptor;
+ hasSet = "set" in descriptor;
+ if (hasValue && (hasGet || hasSet)) {
+ throw new Error("invalid argument. Cannot specify one or more accessors and a value or writable attribute in the property descriptor.");
+ }
+ if (hasGet && defineGetter) {
+ defineGetter.call(obj, prop, descriptor.get);
+ }
+ if (hasSet && defineSetter) {
+ defineSetter.call(obj, prop, descriptor.set);
+ }
+ return obj;
+ }
+ module2.exports = defineProperty;
+ }
+});
+
+// node_modules/@stdlib/utils-define-property/lib/index.js
+var require_lib5 = __commonJS({
+ "node_modules/@stdlib/utils-define-property/lib/index.js"(exports2, module2) {
+ "use strict";
+ var hasDefinePropertySupport = require_has_define_property_support();
+ var builtin = require_builtin();
+ var polyfill = require_polyfill();
+ var defineProperty;
+ if (hasDefinePropertySupport()) {
+ defineProperty = builtin;
+ } else {
+ defineProperty = polyfill;
+ }
+ module2.exports = defineProperty;
+ }
+});
+
+// node_modules/@stdlib/utils-define-nonenumerable-read-only-property/lib/main.js
+var require_main5 = __commonJS({
+ "node_modules/@stdlib/utils-define-nonenumerable-read-only-property/lib/main.js"(exports2, module2) {
+ "use strict";
+ var defineProperty = require_lib5();
+ function setNonEnumerableReadOnly(obj, prop, value) {
+ defineProperty(obj, prop, {
+ "configurable": false,
+ "enumerable": false,
+ "writable": false,
+ "value": value
+ });
+ }
+ module2.exports = setNonEnumerableReadOnly;
+ }
+});
+
+// node_modules/@stdlib/utils-define-nonenumerable-read-only-property/lib/index.js
+var require_lib6 = __commonJS({
+ "node_modules/@stdlib/utils-define-nonenumerable-read-only-property/lib/index.js"(exports2, module2) {
+ "use strict";
+ var main = require_main5();
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/assert-is-string/lib/primitive.js
+var require_primitive = __commonJS({
+ "node_modules/@stdlib/assert-is-string/lib/primitive.js"(exports2, module2) {
+ "use strict";
+ function isString(value) {
+ return typeof value === "string";
+ }
+ module2.exports = isString;
+ }
+});
+
+// node_modules/@stdlib/assert-has-symbol-support/lib/main.js
+var require_main6 = __commonJS({
+ "node_modules/@stdlib/assert-has-symbol-support/lib/main.js"(exports2, module2) {
+ "use strict";
+ function hasSymbolSupport() {
+ return typeof Symbol === "function" && typeof Symbol("foo") === "symbol";
+ }
+ module2.exports = hasSymbolSupport;
+ }
+});
+
+// node_modules/@stdlib/assert-has-symbol-support/lib/index.js
+var require_lib7 = __commonJS({
+ "node_modules/@stdlib/assert-has-symbol-support/lib/index.js"(exports2, module2) {
+ "use strict";
+ var main = require_main6();
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/assert-has-tostringtag-support/lib/main.js
+var require_main7 = __commonJS({
+ "node_modules/@stdlib/assert-has-tostringtag-support/lib/main.js"(exports2, module2) {
+ "use strict";
+ var hasSymbols = require_lib7();
+ var FLG = hasSymbols();
+ function hasToStringTagSupport() {
+ return FLG && typeof Symbol.toStringTag === "symbol";
+ }
+ module2.exports = hasToStringTagSupport;
+ }
+});
+
+// node_modules/@stdlib/assert-has-tostringtag-support/lib/index.js
+var require_lib8 = __commonJS({
+ "node_modules/@stdlib/assert-has-tostringtag-support/lib/index.js"(exports2, module2) {
+ "use strict";
+ var main = require_main7();
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/utils-native-class/lib/tostring.js
+var require_tostring = __commonJS({
+ "node_modules/@stdlib/utils-native-class/lib/tostring.js"(exports2, module2) {
+ "use strict";
+ var toStr = Object.prototype.toString;
+ module2.exports = toStr;
+ }
+});
+
+// node_modules/@stdlib/utils-native-class/lib/main.js
+var require_main8 = __commonJS({
+ "node_modules/@stdlib/utils-native-class/lib/main.js"(exports2, module2) {
+ "use strict";
+ var toStr = require_tostring();
+ function nativeClass(v) {
+ return toStr.call(v);
+ }
+ module2.exports = nativeClass;
+ }
+});
+
+// node_modules/@stdlib/assert-has-own-property/lib/main.js
+var require_main9 = __commonJS({
+ "node_modules/@stdlib/assert-has-own-property/lib/main.js"(exports2, module2) {
+ "use strict";
+ var has = Object.prototype.hasOwnProperty;
+ function hasOwnProp(value, property) {
+ if (value === void 0 || value === null) {
+ return false;
+ }
+ return has.call(value, property);
+ }
+ module2.exports = hasOwnProp;
+ }
+});
+
+// node_modules/@stdlib/assert-has-own-property/lib/index.js
+var require_lib9 = __commonJS({
+ "node_modules/@stdlib/assert-has-own-property/lib/index.js"(exports2, module2) {
+ "use strict";
+ var main = require_main9();
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/symbol-ctor/lib/main.js
+var require_main10 = __commonJS({
+ "node_modules/@stdlib/symbol-ctor/lib/main.js"(exports2, module2) {
+ "use strict";
+ var Sym = typeof Symbol === "function" ? Symbol : void 0;
+ module2.exports = Sym;
+ }
+});
+
+// node_modules/@stdlib/symbol-ctor/lib/index.js
+var require_lib10 = __commonJS({
+ "node_modules/@stdlib/symbol-ctor/lib/index.js"(exports2, module2) {
+ "use strict";
+ var main = require_main10();
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/utils-native-class/lib/tostringtag.js
+var require_tostringtag = __commonJS({
+ "node_modules/@stdlib/utils-native-class/lib/tostringtag.js"(exports2, module2) {
+ "use strict";
+ var Symbol2 = require_lib10();
+ var toStrTag = typeof Symbol2 === "function" ? Symbol2.toStringTag : "";
+ module2.exports = toStrTag;
+ }
+});
+
+// node_modules/@stdlib/utils-native-class/lib/polyfill.js
+var require_polyfill2 = __commonJS({
+ "node_modules/@stdlib/utils-native-class/lib/polyfill.js"(exports2, module2) {
+ "use strict";
+ var hasOwnProp = require_lib9();
+ var toStringTag = require_tostringtag();
+ var toStr = require_tostring();
+ function nativeClass(v) {
+ var isOwn;
+ var tag;
+ var out;
+ if (v === null || v === void 0) {
+ return toStr.call(v);
+ }
+ tag = v[toStringTag];
+ isOwn = hasOwnProp(v, toStringTag);
+ try {
+ v[toStringTag] = void 0;
+ } catch (err) {
+ return toStr.call(v);
+ }
+ out = toStr.call(v);
+ if (isOwn) {
+ v[toStringTag] = tag;
+ } else {
+ delete v[toStringTag];
+ }
+ return out;
+ }
+ module2.exports = nativeClass;
+ }
+});
+
+// node_modules/@stdlib/utils-native-class/lib/index.js
+var require_lib11 = __commonJS({
+ "node_modules/@stdlib/utils-native-class/lib/index.js"(exports2, module2) {
+ "use strict";
+ var hasToStringTag = require_lib8();
+ var builtin = require_main8();
+ var polyfill = require_polyfill2();
+ var main;
+ if (hasToStringTag()) {
+ main = polyfill;
+ } else {
+ main = builtin;
+ }
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/assert-is-string/lib/valueof.js
+var require_valueof = __commonJS({
+ "node_modules/@stdlib/assert-is-string/lib/valueof.js"(exports2, module2) {
+ "use strict";
+ var valueOf = String.prototype.valueOf;
+ module2.exports = valueOf;
+ }
+});
+
+// node_modules/@stdlib/assert-is-string/lib/try2valueof.js
+var require_try2valueof = __commonJS({
+ "node_modules/@stdlib/assert-is-string/lib/try2valueof.js"(exports2, module2) {
+ "use strict";
+ var valueOf = require_valueof();
+ function test(value) {
+ try {
+ valueOf.call(value);
+ return true;
+ } catch (err) {
+ return false;
+ }
+ }
+ module2.exports = test;
+ }
+});
+
+// node_modules/@stdlib/assert-is-string/lib/object.js
+var require_object = __commonJS({
+ "node_modules/@stdlib/assert-is-string/lib/object.js"(exports2, module2) {
+ "use strict";
+ var hasToStringTag = require_lib8();
+ var nativeClass = require_lib11();
+ var test = require_try2valueof();
+ var FLG = hasToStringTag();
+ function isString(value) {
+ if (typeof value === "object") {
+ if (value instanceof String) {
+ return true;
+ }
+ if (FLG) {
+ return test(value);
+ }
+ return nativeClass(value) === "[object String]";
+ }
+ return false;
+ }
+ module2.exports = isString;
+ }
+});
+
+// node_modules/@stdlib/assert-is-string/lib/main.js
+var require_main11 = __commonJS({
+ "node_modules/@stdlib/assert-is-string/lib/main.js"(exports2, module2) {
+ "use strict";
+ var isPrimitive = require_primitive();
+ var isObject = require_object();
+ function isString(value) {
+ return isPrimitive(value) || isObject(value);
+ }
+ module2.exports = isString;
+ }
+});
+
+// node_modules/@stdlib/assert-is-string/lib/index.js
+var require_lib12 = __commonJS({
+ "node_modules/@stdlib/assert-is-string/lib/index.js"(exports2, module2) {
+ "use strict";
+ var setReadOnly = require_lib6();
+ var main = require_main11();
+ var isPrimitive = require_primitive();
+ var isObject = require_object();
+ setReadOnly(main, "isPrimitive", isPrimitive);
+ setReadOnly(main, "isObject", isObject);
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/regexp-extended-length-path/lib/main.js
+var require_main12 = __commonJS({
+ "node_modules/@stdlib/regexp-extended-length-path/lib/main.js"(exports2, module2) {
+ "use strict";
+ function reExtendedLengthPath() {
+ return /^\\\\\?\\.+/;
+ }
+ module2.exports = reExtendedLengthPath;
+ }
+});
+
+// node_modules/@stdlib/regexp-extended-length-path/lib/regexp.js
+var require_regexp = __commonJS({
+ "node_modules/@stdlib/regexp-extended-length-path/lib/regexp.js"(exports2, module2) {
+ "use strict";
+ var reExtendedLengthPath = require_main12();
+ var REGEXP = reExtendedLengthPath();
+ module2.exports = REGEXP;
+ }
+});
+
+// node_modules/@stdlib/regexp-extended-length-path/lib/index.js
+var require_lib13 = __commonJS({
+ "node_modules/@stdlib/regexp-extended-length-path/lib/index.js"(exports2, module2) {
+ "use strict";
+ var setReadOnly = require_lib6();
+ var main = require_main12();
+ var REGEXP = require_regexp();
+ setReadOnly(main, "REGEXP", REGEXP);
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/string-base-lowercase/lib/main.js
+var require_main13 = __commonJS({
+ "node_modules/@stdlib/string-base-lowercase/lib/main.js"(exports2, module2) {
+ "use strict";
+ function lowercase(str) {
+ return str.toLowerCase();
+ }
+ module2.exports = lowercase;
+ }
+});
+
+// node_modules/@stdlib/string-base-lowercase/lib/index.js
+var require_lib14 = __commonJS({
+ "node_modules/@stdlib/string-base-lowercase/lib/index.js"(exports2, module2) {
+ "use strict";
+ var main = require_main13();
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/utils-escape-regexp-string/lib/main.js
+var require_main14 = __commonJS({
+ "node_modules/@stdlib/utils-escape-regexp-string/lib/main.js"(exports2, module2) {
+ "use strict";
+ var isString = require_lib12().isPrimitive;
+ var format = require_lib4();
+ var RE_CHARS = /[-\/\\^$*+?.()|[\]{}]/g;
+ function rescape(str) {
+ var len;
+ var s;
+ var i;
+ if (!isString(str)) {
+ throw new TypeError(format("invalid argument. Must provide a regular expression string. Value: `%s`.", str));
+ }
+ if (str[0] === "/") {
+ len = str.length;
+ for (i = len - 1; i >= 0; i--) {
+ if (str[i] === "/") {
+ break;
+ }
+ }
+ }
+ if (i === void 0 || i <= 0) {
+ return str.replace(RE_CHARS, "\\$&");
+ }
+ s = str.substring(1, i);
+ s = s.replace(RE_CHARS, "\\$&");
+ str = str[0] + s + str.substring(i);
+ return str;
+ }
+ module2.exports = rescape;
+ }
+});
+
+// node_modules/@stdlib/utils-escape-regexp-string/lib/index.js
+var require_lib15 = __commonJS({
+ "node_modules/@stdlib/utils-escape-regexp-string/lib/index.js"(exports2, module2) {
+ "use strict";
+ var main = require_main14();
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/utils-type-of/lib/fixtures/re.js
+var require_re = __commonJS({
+ "node_modules/@stdlib/utils-type-of/lib/fixtures/re.js"(exports2, module2) {
+ "use strict";
+ var RE = /./;
+ module2.exports = RE;
+ }
+});
+
+// node_modules/@stdlib/assert-is-boolean/lib/primitive.js
+var require_primitive2 = __commonJS({
+ "node_modules/@stdlib/assert-is-boolean/lib/primitive.js"(exports2, module2) {
+ "use strict";
+ function isBoolean(value) {
+ return typeof value === "boolean";
+ }
+ module2.exports = isBoolean;
+ }
+});
+
+// node_modules/@stdlib/boolean-ctor/lib/main.js
+var require_main15 = __commonJS({
+ "node_modules/@stdlib/boolean-ctor/lib/main.js"(exports2, module2) {
+ "use strict";
+ var Bool = Boolean;
+ module2.exports = Bool;
+ }
+});
+
+// node_modules/@stdlib/boolean-ctor/lib/index.js
+var require_lib16 = __commonJS({
+ "node_modules/@stdlib/boolean-ctor/lib/index.js"(exports2, module2) {
+ "use strict";
+ var main = require_main15();
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/assert-is-boolean/lib/tostring.js
+var require_tostring2 = __commonJS({
+ "node_modules/@stdlib/assert-is-boolean/lib/tostring.js"(exports2, module2) {
+ "use strict";
+ var toString = Boolean.prototype.toString;
+ module2.exports = toString;
+ }
+});
+
+// node_modules/@stdlib/assert-is-boolean/lib/try2serialize.js
+var require_try2serialize = __commonJS({
+ "node_modules/@stdlib/assert-is-boolean/lib/try2serialize.js"(exports2, module2) {
+ "use strict";
+ var toString = require_tostring2();
+ function test(value) {
+ try {
+ toString.call(value);
+ return true;
+ } catch (err) {
+ return false;
+ }
+ }
+ module2.exports = test;
+ }
+});
+
+// node_modules/@stdlib/assert-is-boolean/lib/object.js
+var require_object2 = __commonJS({
+ "node_modules/@stdlib/assert-is-boolean/lib/object.js"(exports2, module2) {
+ "use strict";
+ var hasToStringTag = require_lib8();
+ var nativeClass = require_lib11();
+ var Boolean2 = require_lib16();
+ var test = require_try2serialize();
+ var FLG = hasToStringTag();
+ function isBoolean(value) {
+ if (typeof value === "object") {
+ if (value instanceof Boolean2) {
+ return true;
+ }
+ if (FLG) {
+ return test(value);
+ }
+ return nativeClass(value) === "[object Boolean]";
+ }
+ return false;
+ }
+ module2.exports = isBoolean;
+ }
+});
+
+// node_modules/@stdlib/assert-is-boolean/lib/main.js
+var require_main16 = __commonJS({
+ "node_modules/@stdlib/assert-is-boolean/lib/main.js"(exports2, module2) {
+ "use strict";
+ var isPrimitive = require_primitive2();
+ var isObject = require_object2();
+ function isBoolean(value) {
+ return isPrimitive(value) || isObject(value);
+ }
+ module2.exports = isBoolean;
+ }
+});
+
+// node_modules/@stdlib/assert-is-boolean/lib/index.js
+var require_lib17 = __commonJS({
+ "node_modules/@stdlib/assert-is-boolean/lib/index.js"(exports2, module2) {
+ "use strict";
+ var setReadOnly = require_lib6();
+ var main = require_main16();
+ var isPrimitive = require_primitive2();
+ var isObject = require_object2();
+ setReadOnly(main, "isPrimitive", isPrimitive);
+ setReadOnly(main, "isObject", isObject);
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/utils-global/lib/codegen.js
+var require_codegen = __commonJS({
+ "node_modules/@stdlib/utils-global/lib/codegen.js"(exports2, module2) {
+ "use strict";
+ function getGlobal() {
+ return new Function("return this;")();
+ }
+ module2.exports = getGlobal;
+ }
+});
+
+// node_modules/@stdlib/utils-global/lib/self.js
+var require_self = __commonJS({
+ "node_modules/@stdlib/utils-global/lib/self.js"(exports2, module2) {
+ "use strict";
+ var obj = typeof self === "object" ? self : null;
+ module2.exports = obj;
+ }
+});
+
+// node_modules/@stdlib/utils-global/lib/window.js
+var require_window = __commonJS({
+ "node_modules/@stdlib/utils-global/lib/window.js"(exports2, module2) {
+ "use strict";
+ var obj = typeof window === "object" ? window : null;
+ module2.exports = obj;
+ }
+});
+
+// node_modules/@stdlib/utils-global/lib/global.js
+var require_global3 = __commonJS({
+ "node_modules/@stdlib/utils-global/lib/global.js"(exports2, module2) {
+ "use strict";
+ var obj = typeof global === "object" ? global : null;
+ module2.exports = obj;
+ }
+});
+
+// node_modules/@stdlib/utils-global/lib/global_this.js
+var require_global_this = __commonJS({
+ "node_modules/@stdlib/utils-global/lib/global_this.js"(exports2, module2) {
+ "use strict";
+ var obj = typeof globalThis === "object" ? globalThis : null;
+ module2.exports = obj;
+ }
+});
+
+// node_modules/@stdlib/utils-global/lib/main.js
+var require_main17 = __commonJS({
+ "node_modules/@stdlib/utils-global/lib/main.js"(exports2, module2) {
+ "use strict";
+ var isBoolean = require_lib17().isPrimitive;
+ var format = require_lib4();
+ var getThis = require_codegen();
+ var Self = require_self();
+ var Win = require_window();
+ var Global = require_global3();
+ var GlobalThis = require_global_this();
+ function getGlobal(codegen) {
+ if (arguments.length) {
+ if (!isBoolean(codegen)) {
+ throw new TypeError(format("invalid argument. Must provide a boolean. Value: `%s`.", codegen));
+ }
+ if (codegen) {
+ return getThis();
+ }
+ }
+ if (GlobalThis) {
+ return GlobalThis;
+ }
+ if (Self) {
+ return Self;
+ }
+ if (Win) {
+ return Win;
+ }
+ if (Global) {
+ return Global;
+ }
+ throw new Error("unexpected error. Unable to resolve global object.");
+ }
+ module2.exports = getGlobal;
+ }
+});
+
+// node_modules/@stdlib/utils-global/lib/index.js
+var require_lib18 = __commonJS({
+ "node_modules/@stdlib/utils-global/lib/index.js"(exports2, module2) {
+ "use strict";
+ var main = require_main17();
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/utils-type-of/lib/fixtures/nodelist.js
+var require_nodelist = __commonJS({
+ "node_modules/@stdlib/utils-type-of/lib/fixtures/nodelist.js"(exports2, module2) {
+ "use strict";
+ var getGlobal = require_lib18();
+ var root = getGlobal();
+ var nodeList = root.document && root.document.childNodes;
+ module2.exports = nodeList;
+ }
+});
+
+// node_modules/@stdlib/utils-type-of/lib/fixtures/typedarray.js
+var require_typedarray = __commonJS({
+ "node_modules/@stdlib/utils-type-of/lib/fixtures/typedarray.js"(exports2, module2) {
+ "use strict";
+ var typedarray = Int8Array;
+ module2.exports = typedarray;
+ }
+});
+
+// node_modules/@stdlib/utils-type-of/lib/check.js
+var require_check = __commonJS({
+ "node_modules/@stdlib/utils-type-of/lib/check.js"(exports2, module2) {
+ "use strict";
+ var RE = require_re();
+ var nodeList = require_nodelist();
+ var typedarray = require_typedarray();
+ function check() {
+ if (
+ // Chrome 1-12 returns 'function' for regular expression instances (see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof):
+ typeof RE === "function" || // Safari 8 returns 'object' for typed array and weak map constructors (underscore #1929):
+ typeof typedarray === "object" || // PhantomJS 1.9 returns 'function' for `NodeList` instances (underscore #2236):
+ typeof nodeList === "function"
+ ) {
+ return true;
+ }
+ return false;
+ }
+ module2.exports = check;
+ }
+});
+
+// node_modules/@stdlib/regexp-function-name/lib/main.js
+var require_main18 = __commonJS({
+ "node_modules/@stdlib/regexp-function-name/lib/main.js"(exports2, module2) {
+ "use strict";
+ function reFunctionName() {
+ return /^\s*function\s*([^(]*)/i;
+ }
+ module2.exports = reFunctionName;
+ }
+});
+
+// node_modules/@stdlib/regexp-function-name/lib/regexp.js
+var require_regexp2 = __commonJS({
+ "node_modules/@stdlib/regexp-function-name/lib/regexp.js"(exports2, module2) {
+ "use strict";
+ var reFunctionName = require_main18();
+ var RE_FUNCTION_NAME = reFunctionName();
+ module2.exports = RE_FUNCTION_NAME;
+ }
+});
+
+// node_modules/@stdlib/regexp-function-name/lib/index.js
+var require_lib19 = __commonJS({
+ "node_modules/@stdlib/regexp-function-name/lib/index.js"(exports2, module2) {
+ "use strict";
+ var setReadOnly = require_lib6();
+ var main = require_main18();
+ var REGEXP = require_regexp2();
+ setReadOnly(main, "REGEXP", REGEXP);
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/assert-is-array/lib/main.js
+var require_main19 = __commonJS({
+ "node_modules/@stdlib/assert-is-array/lib/main.js"(exports2, module2) {
+ "use strict";
+ var nativeClass = require_lib11();
+ var f;
+ function isArray(value) {
+ return nativeClass(value) === "[object Array]";
+ }
+ if (Array.isArray) {
+ f = Array.isArray;
+ } else {
+ f = isArray;
+ }
+ module2.exports = f;
+ }
+});
+
+// node_modules/@stdlib/assert-is-array/lib/index.js
+var require_lib20 = __commonJS({
+ "node_modules/@stdlib/assert-is-array/lib/index.js"(exports2, module2) {
+ "use strict";
+ var main = require_main19();
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/assert-tools-array-function/lib/main.js
+var require_main20 = __commonJS({
+ "node_modules/@stdlib/assert-tools-array-function/lib/main.js"(exports2, module2) {
+ "use strict";
+ var isArray = require_lib20();
+ var format = require_lib4();
+ function arrayfcn(predicate) {
+ if (typeof predicate !== "function") {
+ throw new TypeError(format("invalid argument. Must provide a function. Value: `%s`.", predicate));
+ }
+ return every;
+ function every(value) {
+ var len;
+ var i;
+ if (!isArray(value)) {
+ return false;
+ }
+ len = value.length;
+ if (len === 0) {
+ return false;
+ }
+ for (i = 0; i < len; i++) {
+ if (predicate(value[i]) === false) {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+ module2.exports = arrayfcn;
+ }
+});
+
+// node_modules/@stdlib/assert-tools-array-function/lib/index.js
+var require_lib21 = __commonJS({
+ "node_modules/@stdlib/assert-tools-array-function/lib/index.js"(exports2, module2) {
+ "use strict";
+ var main = require_main20();
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/assert-is-object-like/lib/main.js
+var require_main21 = __commonJS({
+ "node_modules/@stdlib/assert-is-object-like/lib/main.js"(exports2, module2) {
+ "use strict";
+ function isObjectLike(value) {
+ return value !== null && typeof value === "object";
+ }
+ module2.exports = isObjectLike;
+ }
+});
+
+// node_modules/@stdlib/assert-is-object-like/lib/index.js
+var require_lib22 = __commonJS({
+ "node_modules/@stdlib/assert-is-object-like/lib/index.js"(exports2, module2) {
+ "use strict";
+ var setReadOnly = require_lib6();
+ var arrayfun = require_lib21();
+ var main = require_main21();
+ var isObjectLikeArray = arrayfun(main);
+ setReadOnly(main, "isObjectLikeArray", isObjectLikeArray);
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/assert-is-buffer/lib/main.js
+var require_main22 = __commonJS({
+ "node_modules/@stdlib/assert-is-buffer/lib/main.js"(exports2, module2) {
+ "use strict";
+ var isObjectLike = require_lib22();
+ function isBuffer(value) {
+ return isObjectLike(value) && // eslint-disable-next-line no-underscore-dangle
+ (value._isBuffer || // for envs missing Object.prototype.constructor (e.g., Safari 5-7)
+ value.constructor && // WARNING: `typeof` is not a foolproof check, as certain envs consider RegExp and NodeList instances to be functions
+ typeof value.constructor.isBuffer === "function" && value.constructor.isBuffer(value));
+ }
+ module2.exports = isBuffer;
+ }
+});
+
+// node_modules/@stdlib/assert-is-buffer/lib/index.js
+var require_lib23 = __commonJS({
+ "node_modules/@stdlib/assert-is-buffer/lib/index.js"(exports2, module2) {
+ "use strict";
+ var main = require_main22();
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/utils-constructor-name/lib/main.js
+var require_main23 = __commonJS({
+ "node_modules/@stdlib/utils-constructor-name/lib/main.js"(exports2, module2) {
+ "use strict";
+ var nativeClass = require_lib11();
+ var RE = require_lib19().REGEXP;
+ var isBuffer = require_lib23();
+ function constructorName(v) {
+ var match;
+ var name;
+ var ctor;
+ name = nativeClass(v).slice(8, -1);
+ if ((name === "Object" || name === "Error") && v.constructor) {
+ ctor = v.constructor;
+ if (typeof ctor.name === "string") {
+ return ctor.name;
+ }
+ match = RE.exec(ctor.toString());
+ if (match) {
+ return match[1];
+ }
+ }
+ if (isBuffer(v)) {
+ return "Buffer";
+ }
+ return name;
+ }
+ module2.exports = constructorName;
+ }
+});
+
+// node_modules/@stdlib/utils-constructor-name/lib/index.js
+var require_lib24 = __commonJS({
+ "node_modules/@stdlib/utils-constructor-name/lib/index.js"(exports2, module2) {
+ "use strict";
+ var main = require_main23();
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/utils-type-of/lib/main.js
+var require_main24 = __commonJS({
+ "node_modules/@stdlib/utils-type-of/lib/main.js"(exports2, module2) {
+ "use strict";
+ var ctorName = require_lib24();
+ function typeOf(v) {
+ var type;
+ if (v === null) {
+ return "null";
+ }
+ type = typeof v;
+ if (type === "object") {
+ return ctorName(v).toLowerCase();
+ }
+ return type;
+ }
+ module2.exports = typeOf;
+ }
+});
+
+// node_modules/@stdlib/utils-type-of/lib/polyfill.js
+var require_polyfill3 = __commonJS({
+ "node_modules/@stdlib/utils-type-of/lib/polyfill.js"(exports2, module2) {
+ "use strict";
+ var ctorName = require_lib24();
+ function typeOf(v) {
+ return ctorName(v).toLowerCase();
+ }
+ module2.exports = typeOf;
+ }
+});
+
+// node_modules/@stdlib/utils-type-of/lib/index.js
+var require_lib25 = __commonJS({
+ "node_modules/@stdlib/utils-type-of/lib/index.js"(exports2, module2) {
+ "use strict";
+ var usePolyfill = require_check();
+ var builtin = require_main24();
+ var polyfill = require_polyfill3();
+ var main = usePolyfill() ? polyfill : builtin;
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/assert-is-function/lib/main.js
+var require_main25 = __commonJS({
+ "node_modules/@stdlib/assert-is-function/lib/main.js"(exports2, module2) {
+ "use strict";
+ var typeOf = require_lib25();
+ function isFunction(value) {
+ return typeOf(value) === "function";
+ }
+ module2.exports = isFunction;
+ }
+});
+
+// node_modules/@stdlib/assert-is-function/lib/index.js
+var require_lib26 = __commonJS({
+ "node_modules/@stdlib/assert-is-function/lib/index.js"(exports2, module2) {
+ "use strict";
+ var main = require_main25();
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/assert-is-regexp/lib/exec.js
+var require_exec2 = __commonJS({
+ "node_modules/@stdlib/assert-is-regexp/lib/exec.js"(exports2, module2) {
+ "use strict";
+ var exec2 = RegExp.prototype.exec;
+ module2.exports = exec2;
+ }
+});
+
+// node_modules/@stdlib/assert-is-regexp/lib/try2exec.js
+var require_try2exec = __commonJS({
+ "node_modules/@stdlib/assert-is-regexp/lib/try2exec.js"(exports2, module2) {
+ "use strict";
+ var exec2 = require_exec2();
+ function test(value) {
+ try {
+ exec2.call(value);
+ return true;
+ } catch (err) {
+ return false;
+ }
+ }
+ module2.exports = test;
+ }
+});
+
+// node_modules/@stdlib/assert-is-regexp/lib/main.js
+var require_main26 = __commonJS({
+ "node_modules/@stdlib/assert-is-regexp/lib/main.js"(exports2, module2) {
+ "use strict";
+ var hasToStringTag = require_lib8();
+ var nativeClass = require_lib11();
+ var test = require_try2exec();
+ var FLG = hasToStringTag();
+ function isRegExp(value) {
+ if (typeof value === "object") {
+ if (value instanceof RegExp) {
+ return true;
+ }
+ if (FLG) {
+ return test(value);
+ }
+ return nativeClass(value) === "[object RegExp]";
+ }
+ return false;
+ }
+ module2.exports = isRegExp;
+ }
+});
+
+// node_modules/@stdlib/assert-is-regexp/lib/index.js
+var require_lib27 = __commonJS({
+ "node_modules/@stdlib/assert-is-regexp/lib/index.js"(exports2, module2) {
+ "use strict";
+ var main = require_main26();
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/string-base-replace/lib/main.js
+var require_main27 = __commonJS({
+ "node_modules/@stdlib/string-base-replace/lib/main.js"(exports2, module2) {
+ "use strict";
+ function replace(str, search, newval) {
+ return str.replace(search, newval);
+ }
+ module2.exports = replace;
+ }
+});
+
+// node_modules/@stdlib/string-base-replace/lib/index.js
+var require_lib28 = __commonJS({
+ "node_modules/@stdlib/string-base-replace/lib/index.js"(exports2, module2) {
+ "use strict";
+ var main = require_main27();
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/string-replace/lib/main.js
+var require_main28 = __commonJS({
+ "node_modules/@stdlib/string-replace/lib/main.js"(exports2, module2) {
+ "use strict";
+ var rescape = require_lib15();
+ var isFunction = require_lib26();
+ var isString = require_lib12().isPrimitive;
+ var isRegExp = require_lib27();
+ var format = require_lib4();
+ var base = require_lib28();
+ function replace(str, search, newval) {
+ if (!isString(str)) {
+ throw new TypeError(format("invalid argument. First argument must be a string. Value: `%s`.", str));
+ }
+ if (isString(search)) {
+ search = new RegExp(rescape(search), "g");
+ } else if (!isRegExp(search)) {
+ throw new TypeError(format("invalid argument. Second argument must be a string or regular expression. Value: `%s`.", search));
+ }
+ if (!isString(newval) && !isFunction(newval)) {
+ throw new TypeError(format("invalid argument. Third argument must be a string or replacement function. Value: `%s`.", newval));
+ }
+ return base(str, search, newval);
+ }
+ module2.exports = replace;
+ }
+});
+
+// node_modules/@stdlib/string-replace/lib/index.js
+var require_lib29 = __commonJS({
+ "node_modules/@stdlib/string-replace/lib/index.js"(exports2, module2) {
+ "use strict";
+ var main = require_main28();
+ module2.exports = main;
+ }
+});
+
+// node_modules/@stdlib/utils-convert-path/lib/main.js
+var require_main29 = __commonJS({
+ "node_modules/@stdlib/utils-convert-path/lib/main.js"(exports2, module2) {
+ "use strict";
+ var isString = require_lib12().isPrimitive;
+ var reExtendedLengthPath = require_lib13();
+ var lowercase = require_lib14();
+ var replace = require_lib29();
+ var format = require_lib4();
+ var RE_WIN_DEVICE_ROOT = /^([A-Za-z]):[\\\/]+/;
+ var RE_POSIX_DEVICE_ROOT = /^\/([A-Za-z])\//;
+ function convertPath2(from, to) {
+ var device;
+ var parts;
+ var out;
+ if (!isString(from)) {
+ throw new TypeError(format("invalid argument. First argument must be a string. Value: `%s`.", from));
+ }
+ if (!isString(to)) {
+ throw new TypeError(format("invalid argument. Second argument must be a string. Value: `%s`.", to));
+ }
+ if (to !== "win32" && to !== "mixed" && to !== "posix") {
+ throw new Error(format("invalid argument. Second argument must be a recognized output path convention. Value: `%s`.", to));
+ }
+ out = from;
+ if (to === "win32") {
+ parts = RE_POSIX_DEVICE_ROOT.exec(out);
+ if (parts) {
+ device = parts[1] + ":\\";
+ out = replace(out, RE_POSIX_DEVICE_ROOT, device);
+ }
+ return replace(out, "/", "\\");
+ }
+ if (reExtendedLengthPath.REGEXP.test(from)) {
+ throw new Error(format("invalid argument. Cannot convert Windows extended-length paths to POSIX paths. Value: `%s`.", from));
+ }
+ if (to === "mixed") {
+ parts = RE_POSIX_DEVICE_ROOT.exec(out);
+ if (parts) {
+ device = parts[1] + ":/";
+ out = replace(out, RE_POSIX_DEVICE_ROOT, device);
+ } else {
+ parts = RE_WIN_DEVICE_ROOT.exec(out);
+ if (parts) {
+ device = parts[1] + ":/";
+ out = replace(out, RE_WIN_DEVICE_ROOT, device);
+ }
+ }
+ return replace(out, "\\", "/");
+ }
+ parts = RE_WIN_DEVICE_ROOT.exec(out);
+ if (parts) {
+ device = "/" + lowercase(parts[1]) + "/";
+ out = replace(out, RE_WIN_DEVICE_ROOT, device);
+ }
+ return replace(out, "\\", "/");
+ }
+ module2.exports = convertPath2;
+ }
+});
+
+// node_modules/@stdlib/utils-convert-path/lib/index.js
+var require_lib30 = __commonJS({
+ "node_modules/@stdlib/utils-convert-path/lib/index.js"(exports2, module2) {
+ "use strict";
+ var main = require_main29();
+ module2.exports = main;
+ }
+});
+
+// node_modules/braces/lib/utils.js
+var require_utils5 = __commonJS({
+ "node_modules/braces/lib/utils.js"(exports2) {
+ "use strict";
+ exports2.isInteger = (num) => {
+ if (typeof num === "number") {
+ return Number.isInteger(num);
+ }
+ if (typeof num === "string" && num.trim() !== "") {
+ return Number.isInteger(Number(num));
+ }
+ return false;
+ };
+ exports2.find = (node, type) => node.nodes.find((node2) => node2.type === type);
+ exports2.exceedsLimit = (min, max, step = 1, limit) => {
+ if (limit === false) return false;
+ if (!exports2.isInteger(min) || !exports2.isInteger(max)) return false;
+ return (Number(max) - Number(min)) / Number(step) >= limit;
+ };
+ exports2.escapeNode = (block, n = 0, type) => {
+ const node = block.nodes[n];
+ if (!node) return;
+ if (type && node.type === type || node.type === "open" || node.type === "close") {
+ if (node.escaped !== true) {
+ node.value = "\\" + node.value;
+ node.escaped = true;
+ }
+ }
+ };
+ exports2.encloseBrace = (node) => {
+ if (node.type !== "brace") return false;
+ if (node.commas >> 0 + node.ranges >> 0 === 0) {
+ node.invalid = true;
+ return true;
+ }
+ return false;
+ };
+ exports2.isInvalidBrace = (block) => {
+ if (block.type !== "brace") return false;
+ if (block.invalid === true || block.dollar) return true;
+ if (block.commas >> 0 + block.ranges >> 0 === 0) {
+ block.invalid = true;
+ return true;
+ }
+ if (block.open !== true || block.close !== true) {
+ block.invalid = true;
+ return true;
+ }
+ return false;
+ };
+ exports2.isOpenOrClose = (node) => {
+ if (node.type === "open" || node.type === "close") {
+ return true;
+ }
+ return node.open === true || node.close === true;
+ };
+ exports2.reduce = (nodes) => nodes.reduce((acc, node) => {
+ if (node.type === "text") acc.push(node.value);
+ if (node.type === "range") node.type = "text";
+ return acc;
+ }, []);
+ exports2.flatten = (...args) => {
+ const result = [];
+ const flat = (arr) => {
+ for (let i = 0; i < arr.length; i++) {
+ const ele = arr[i];
+ if (Array.isArray(ele)) {
+ flat(ele);
+ continue;
+ }
+ if (ele !== void 0) {
+ result.push(ele);
+ }
+ }
+ return result;
+ };
+ flat(args);
+ return result;
+ };
+ }
+});
+
+// node_modules/braces/lib/stringify.js
+var require_stringify = __commonJS({
+ "node_modules/braces/lib/stringify.js"(exports2, module2) {
+ "use strict";
+ var utils = require_utils5();
+ module2.exports = (ast, options = {}) => {
+ const stringify = (node, parent = {}) => {
+ const invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);
+ const invalidNode = node.invalid === true && options.escapeInvalid === true;
+ let output = "";
+ if (node.value) {
+ if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {
+ return "\\" + node.value;
+ }
+ return node.value;
+ }
+ if (node.value) {
+ return node.value;
+ }
+ if (node.nodes) {
+ for (const child of node.nodes) {
+ output += stringify(child);
+ }
+ }
+ return output;
+ };
+ return stringify(ast);
+ };
+ }
+});
+
+// node_modules/is-number/index.js
+var require_is_number2 = __commonJS({
+ "node_modules/is-number/index.js"(exports2, module2) {
+ "use strict";
+ module2.exports = function(num) {
+ if (typeof num === "number") {
+ return num - num === 0;
+ }
+ if (typeof num === "string" && num.trim() !== "") {
+ return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);
+ }
+ return false;
+ };
+ }
+});
+
+// node_modules/to-regex-range/index.js
+var require_to_regex_range = __commonJS({
+ "node_modules/to-regex-range/index.js"(exports2, module2) {
+ "use strict";
+ var isNumber = require_is_number2();
+ var toRegexRange = (min, max, options) => {
+ if (isNumber(min) === false) {
+ throw new TypeError("toRegexRange: expected the first argument to be a number");
+ }
+ if (max === void 0 || min === max) {
+ return String(min);
+ }
+ if (isNumber(max) === false) {
+ throw new TypeError("toRegexRange: expected the second argument to be a number.");
+ }
+ let opts = { relaxZeros: true, ...options };
+ if (typeof opts.strictZeros === "boolean") {
+ opts.relaxZeros = opts.strictZeros === false;
+ }
+ let relax = String(opts.relaxZeros);
+ let shorthand = String(opts.shorthand);
+ let capture = String(opts.capture);
+ let wrap = String(opts.wrap);
+ let cacheKey = min + ":" + max + "=" + relax + shorthand + capture + wrap;
+ if (toRegexRange.cache.hasOwnProperty(cacheKey)) {
+ return toRegexRange.cache[cacheKey].result;
+ }
+ let a = Math.min(min, max);
+ let b = Math.max(min, max);
+ if (Math.abs(a - b) === 1) {
+ let result = min + "|" + max;
+ if (opts.capture) {
+ return `(${result})`;
+ }
+ if (opts.wrap === false) {
+ return result;
+ }
+ return `(?:${result})`;
+ }
+ let isPadded = hasPadding(min) || hasPadding(max);
+ let state = { min, max, a, b };
+ let positives = [];
+ let negatives = [];
+ if (isPadded) {
+ state.isPadded = isPadded;
+ state.maxLen = String(state.max).length;
+ }
+ if (a < 0) {
+ let newMin = b < 0 ? Math.abs(b) : 1;
+ negatives = splitToPatterns(newMin, Math.abs(a), state, opts);
+ a = state.a = 0;
+ }
+ if (b >= 0) {
+ positives = splitToPatterns(a, b, state, opts);
+ }
+ state.negatives = negatives;
+ state.positives = positives;
+ state.result = collatePatterns(negatives, positives, opts);
+ if (opts.capture === true) {
+ state.result = `(${state.result})`;
+ } else if (opts.wrap !== false && positives.length + negatives.length > 1) {
+ state.result = `(?:${state.result})`;
+ }
+ toRegexRange.cache[cacheKey] = state;
+ return state.result;
+ };
+ function collatePatterns(neg, pos, options) {
+ let onlyNegative = filterPatterns(neg, pos, "-", false, options) || [];
+ let onlyPositive = filterPatterns(pos, neg, "", false, options) || [];
+ let intersected = filterPatterns(neg, pos, "-?", true, options) || [];
+ let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);
+ return subpatterns.join("|");
+ }
+ function splitToRanges(min, max) {
+ let nines = 1;
+ let zeros = 1;
+ let stop = countNines(min, nines);
+ let stops = /* @__PURE__ */ new Set([max]);
+ while (min <= stop && stop <= max) {
+ stops.add(stop);
+ nines += 1;
+ stop = countNines(min, nines);
+ }
+ stop = countZeros(max + 1, zeros) - 1;
+ while (min < stop && stop <= max) {
+ stops.add(stop);
+ zeros += 1;
+ stop = countZeros(max + 1, zeros) - 1;
+ }
+ stops = [...stops];
+ stops.sort(compare);
+ return stops;
+ }
+ function rangeToPattern(start, stop, options) {
+ if (start === stop) {
+ return { pattern: start, count: [], digits: 0 };
+ }
+ let zipped = zip(start, stop);
+ let digits = zipped.length;
+ let pattern = "";
+ let count = 0;
+ for (let i = 0; i < digits; i++) {
+ let [startDigit, stopDigit] = zipped[i];
+ if (startDigit === stopDigit) {
+ pattern += startDigit;
+ } else if (startDigit !== "0" || stopDigit !== "9") {
+ pattern += toCharacterClass(startDigit, stopDigit, options);
+ } else {
+ count++;
+ }
+ }
+ if (count) {
+ pattern += options.shorthand === true ? "\\d" : "[0-9]";
+ }
+ return { pattern, count: [count], digits };
+ }
+ function splitToPatterns(min, max, tok, options) {
+ let ranges = splitToRanges(min, max);
+ let tokens = [];
+ let start = min;
+ let prev;
+ for (let i = 0; i < ranges.length; i++) {
+ let max2 = ranges[i];
+ let obj = rangeToPattern(String(start), String(max2), options);
+ let zeros = "";
+ if (!tok.isPadded && prev && prev.pattern === obj.pattern) {
+ if (prev.count.length > 1) {
+ prev.count.pop();
+ }
+ prev.count.push(obj.count[0]);
+ prev.string = prev.pattern + toQuantifier(prev.count);
+ start = max2 + 1;
+ continue;
+ }
+ if (tok.isPadded) {
+ zeros = padZeros(max2, tok, options);
+ }
+ obj.string = zeros + obj.pattern + toQuantifier(obj.count);
+ tokens.push(obj);
+ start = max2 + 1;
+ prev = obj;
+ }
+ return tokens;
+ }
+ function filterPatterns(arr, comparison, prefix, intersection, options) {
+ let result = [];
+ for (let ele of arr) {
+ let { string } = ele;
+ if (!intersection && !contains(comparison, "string", string)) {
+ result.push(prefix + string);
+ }
+ if (intersection && contains(comparison, "string", string)) {
+ result.push(prefix + string);
+ }
+ }
+ return result;
+ }
+ function zip(a, b) {
+ let arr = [];
+ for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);
+ return arr;
+ }
+ function compare(a, b) {
+ return a > b ? 1 : b > a ? -1 : 0;
+ }
+ function contains(arr, key, val) {
+ return arr.some((ele) => ele[key] === val);
+ }
+ function countNines(min, len) {
+ return Number(String(min).slice(0, -len) + "9".repeat(len));
+ }
+ function countZeros(integer, zeros) {
+ return integer - integer % Math.pow(10, zeros);
+ }
+ function toQuantifier(digits) {
+ let [start = 0, stop = ""] = digits;
+ if (stop || start > 1) {
+ return `{${start + (stop ? "," + stop : "")}}`;
+ }
+ return "";
+ }
+ function toCharacterClass(a, b, options) {
+ return `[${a}${b - a === 1 ? "" : "-"}${b}]`;
+ }
+ function hasPadding(str) {
+ return /^-?(0+)\d/.test(str);
+ }
+ function padZeros(value, tok, options) {
+ if (!tok.isPadded) {
+ return value;
+ }
+ let diff = Math.abs(tok.maxLen - String(value).length);
+ let relax = options.relaxZeros !== false;
+ switch (diff) {
+ case 0:
+ return "";
+ case 1:
+ return relax ? "0?" : "0";
+ case 2:
+ return relax ? "0{0,2}" : "00";
+ default: {
+ return relax ? `0{0,${diff}}` : `0{${diff}}`;
+ }
+ }
+ }
+ toRegexRange.cache = {};
+ toRegexRange.clearCache = () => toRegexRange.cache = {};
+ module2.exports = toRegexRange;
+ }
+});
+
+// node_modules/fill-range/index.js
+var require_fill_range = __commonJS({
+ "node_modules/fill-range/index.js"(exports2, module2) {
+ "use strict";
+ var util = require("util");
+ var toRegexRange = require_to_regex_range();
+ var isObject = (val) => val !== null && typeof val === "object" && !Array.isArray(val);
+ var transform = (toNumber) => {
+ return (value) => toNumber === true ? Number(value) : String(value);
+ };
+ var isValidValue = (value) => {
+ return typeof value === "number" || typeof value === "string" && value !== "";
+ };
+ var isNumber = (num) => Number.isInteger(+num);
+ var zeros = (input) => {
+ let value = `${input}`;
+ let index = -1;
+ if (value[0] === "-") value = value.slice(1);
+ if (value === "0") return false;
+ while (value[++index] === "0") ;
+ return index > 0;
+ };
+ var stringify = (start, end, options) => {
+ if (typeof start === "string" || typeof end === "string") {
+ return true;
+ }
+ return options.stringify === true;
+ };
+ var pad = (input, maxLength, toNumber) => {
+ if (maxLength > 0) {
+ let dash = input[0] === "-" ? "-" : "";
+ if (dash) input = input.slice(1);
+ input = dash + input.padStart(dash ? maxLength - 1 : maxLength, "0");
+ }
+ if (toNumber === false) {
+ return String(input);
+ }
+ return input;
+ };
+ var toMaxLen = (input, maxLength) => {
+ let negative = input[0] === "-" ? "-" : "";
+ if (negative) {
+ input = input.slice(1);
+ maxLength--;
+ }
+ while (input.length < maxLength) input = "0" + input;
+ return negative ? "-" + input : input;
+ };
+ var toSequence = (parts, options, maxLen) => {
+ parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
+ parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
+ let prefix = options.capture ? "" : "?:";
+ let positives = "";
+ let negatives = "";
+ let result;
+ if (parts.positives.length) {
+ positives = parts.positives.map((v) => toMaxLen(String(v), maxLen)).join("|");
+ }
+ if (parts.negatives.length) {
+ negatives = `-(${prefix}${parts.negatives.map((v) => toMaxLen(String(v), maxLen)).join("|")})`;
+ }
+ if (positives && negatives) {
+ result = `${positives}|${negatives}`;
+ } else {
+ result = positives || negatives;
+ }
+ if (options.wrap) {
+ return `(${prefix}${result})`;
+ }
+ return result;
+ };
+ var toRange = (a, b, isNumbers, options) => {
+ if (isNumbers) {
+ return toRegexRange(a, b, { wrap: false, ...options });
+ }
+ let start = String.fromCharCode(a);
+ if (a === b) return start;
+ let stop = String.fromCharCode(b);
+ return `[${start}-${stop}]`;
+ };
+ var toRegex = (start, end, options) => {
+ if (Array.isArray(start)) {
+ let wrap = options.wrap === true;
+ let prefix = options.capture ? "" : "?:";
+ return wrap ? `(${prefix}${start.join("|")})` : start.join("|");
+ }
+ return toRegexRange(start, end, options);
+ };
+ var rangeError = (...args) => {
+ return new RangeError("Invalid range arguments: " + util.inspect(...args));
+ };
+ var invalidRange = (start, end, options) => {
+ if (options.strictRanges === true) throw rangeError([start, end]);
+ return [];
+ };
+ var invalidStep = (step, options) => {
+ if (options.strictRanges === true) {
+ throw new TypeError(`Expected step "${step}" to be a number`);
+ }
+ return [];
+ };
+ var fillNumbers = (start, end, step = 1, options = {}) => {
+ let a = Number(start);
+ let b = Number(end);
+ if (!Number.isInteger(a) || !Number.isInteger(b)) {
+ if (options.strictRanges === true) throw rangeError([start, end]);
+ return [];
+ }
+ if (a === 0) a = 0;
+ if (b === 0) b = 0;
+ let descending = a > b;
+ let startString = String(start);
+ let endString = String(end);
+ let stepString = String(step);
+ step = Math.max(Math.abs(step), 1);
+ let padded = zeros(startString) || zeros(endString) || zeros(stepString);
+ let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;
+ let toNumber = padded === false && stringify(start, end, options) === false;
+ let format = options.transform || transform(toNumber);
+ if (options.toRegex && step === 1) {
+ return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);
+ }
+ let parts = { negatives: [], positives: [] };
+ let push = (num) => parts[num < 0 ? "negatives" : "positives"].push(Math.abs(num));
+ let range = [];
+ let index = 0;
+ while (descending ? a >= b : a <= b) {
+ if (options.toRegex === true && step > 1) {
+ push(a);
+ } else {
+ range.push(pad(format(a, index), maxLen, toNumber));
+ }
+ a = descending ? a - step : a + step;
+ index++;
+ }
+ if (options.toRegex === true) {
+ return step > 1 ? toSequence(parts, options, maxLen) : toRegex(range, null, { wrap: false, ...options });
+ }
+ return range;
+ };
+ var fillLetters = (start, end, step = 1, options = {}) => {
+ if (!isNumber(start) && start.length > 1 || !isNumber(end) && end.length > 1) {
+ return invalidRange(start, end, options);
+ }
+ let format = options.transform || ((val) => String.fromCharCode(val));
+ let a = `${start}`.charCodeAt(0);
+ let b = `${end}`.charCodeAt(0);
+ let descending = a > b;
+ let min = Math.min(a, b);
+ let max = Math.max(a, b);
+ if (options.toRegex && step === 1) {
+ return toRange(min, max, false, options);
+ }
+ let range = [];
+ let index = 0;
+ while (descending ? a >= b : a <= b) {
+ range.push(format(a, index));
+ a = descending ? a - step : a + step;
+ index++;
+ }
+ if (options.toRegex === true) {
+ return toRegex(range, null, { wrap: false, options });
+ }
+ return range;
+ };
+ var fill = (start, end, step, options = {}) => {
+ if (end == null && isValidValue(start)) {
+ return [start];
+ }
+ if (!isValidValue(start) || !isValidValue(end)) {
+ return invalidRange(start, end, options);
+ }
+ if (typeof step === "function") {
+ return fill(start, end, 1, { transform: step });
+ }
+ if (isObject(step)) {
+ return fill(start, end, 0, step);
+ }
+ let opts = { ...options };
+ if (opts.capture === true) opts.wrap = true;
+ step = step || opts.step || 1;
+ if (!isNumber(step)) {
+ if (step != null && !isObject(step)) return invalidStep(step, opts);
+ return fill(start, end, 1, step);
+ }
+ if (isNumber(start) && isNumber(end)) {
+ return fillNumbers(start, end, step, opts);
+ }
+ return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);
+ };
+ module2.exports = fill;
+ }
+});
+
+// node_modules/braces/lib/compile.js
+var require_compile = __commonJS({
+ "node_modules/braces/lib/compile.js"(exports2, module2) {
+ "use strict";
+ var fill = require_fill_range();
+ var utils = require_utils5();
+ var compile = (ast, options = {}) => {
+ const walk = (node, parent = {}) => {
+ const invalidBlock = utils.isInvalidBrace(parent);
+ const invalidNode = node.invalid === true && options.escapeInvalid === true;
+ const invalid = invalidBlock === true || invalidNode === true;
+ const prefix = options.escapeInvalid === true ? "\\" : "";
+ let output = "";
+ if (node.isOpen === true) {
+ return prefix + node.value;
+ }
+ if (node.isClose === true) {
+ console.log("node.isClose", prefix, node.value);
+ return prefix + node.value;
+ }
+ if (node.type === "open") {
+ return invalid ? prefix + node.value : "(";
+ }
+ if (node.type === "close") {
+ return invalid ? prefix + node.value : ")";
+ }
+ if (node.type === "comma") {
+ return node.prev.type === "comma" ? "" : invalid ? node.value : "|";
+ }
+ if (node.value) {
+ return node.value;
+ }
+ if (node.nodes && node.ranges > 0) {
+ const args = utils.reduce(node.nodes);
+ const range = fill(...args, { ...options, wrap: false, toRegex: true, strictZeros: true });
+ if (range.length !== 0) {
+ return args.length > 1 && range.length > 1 ? `(${range})` : range;
+ }
+ }
+ if (node.nodes) {
+ for (const child of node.nodes) {
+ output += walk(child, node);
+ }
+ }
+ return output;
+ };
+ return walk(ast);
+ };
+ module2.exports = compile;
+ }
+});
+
+// node_modules/braces/lib/expand.js
+var require_expand = __commonJS({
+ "node_modules/braces/lib/expand.js"(exports2, module2) {
+ "use strict";
+ var fill = require_fill_range();
+ var stringify = require_stringify();
+ var utils = require_utils5();
+ var append = (queue = "", stash = "", enclose = false) => {
+ const result = [];
+ queue = [].concat(queue);
+ stash = [].concat(stash);
+ if (!stash.length) return queue;
+ if (!queue.length) {
+ return enclose ? utils.flatten(stash).map((ele) => `{${ele}}`) : stash;
+ }
+ for (const item of queue) {
+ if (Array.isArray(item)) {
+ for (const value of item) {
+ result.push(append(value, stash, enclose));
+ }
+ } else {
+ for (let ele of stash) {
+ if (enclose === true && typeof ele === "string") ele = `{${ele}}`;
+ result.push(Array.isArray(ele) ? append(item, ele, enclose) : item + ele);
+ }
+ }
+ }
+ return utils.flatten(result);
+ };
+ var expand = (ast, options = {}) => {
+ const rangeLimit = options.rangeLimit === void 0 ? 1e3 : options.rangeLimit;
+ const walk = (node, parent = {}) => {
+ node.queue = [];
+ let p = parent;
+ let q = parent.queue;
+ while (p.type !== "brace" && p.type !== "root" && p.parent) {
+ p = p.parent;
+ q = p.queue;
+ }
+ if (node.invalid || node.dollar) {
+ q.push(append(q.pop(), stringify(node, options)));
+ return;
+ }
+ if (node.type === "brace" && node.invalid !== true && node.nodes.length === 2) {
+ q.push(append(q.pop(), ["{}"]));
+ return;
+ }
+ if (node.nodes && node.ranges > 0) {
+ const args = utils.reduce(node.nodes);
+ if (utils.exceedsLimit(...args, options.step, rangeLimit)) {
+ throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.");
+ }
+ let range = fill(...args, options);
+ if (range.length === 0) {
+ range = stringify(node, options);
+ }
+ q.push(append(q.pop(), range));
+ node.nodes = [];
+ return;
+ }
+ const enclose = utils.encloseBrace(node);
+ let queue = node.queue;
+ let block = node;
+ while (block.type !== "brace" && block.type !== "root" && block.parent) {
+ block = block.parent;
+ queue = block.queue;
+ }
+ for (let i = 0; i < node.nodes.length; i++) {
+ const child = node.nodes[i];
+ if (child.type === "comma" && node.type === "brace") {
+ if (i === 1) queue.push("");
+ queue.push("");
+ continue;
+ }
+ if (child.type === "close") {
+ q.push(append(q.pop(), queue, enclose));
+ continue;
+ }
+ if (child.value && child.type !== "open") {
+ queue.push(append(queue.pop(), child.value));
+ continue;
+ }
+ if (child.nodes) {
+ walk(child, node);
+ }
+ }
+ return queue;
+ };
+ return utils.flatten(walk(ast));
+ };
+ module2.exports = expand;
+ }
+});
+
+// node_modules/braces/lib/constants.js
+var require_constants6 = __commonJS({
+ "node_modules/braces/lib/constants.js"(exports2, module2) {
+ "use strict";
+ module2.exports = {
+ MAX_LENGTH: 1e4,
+ // Digits
+ CHAR_0: "0",
+ /* 0 */
+ CHAR_9: "9",
+ /* 9 */
+ // Alphabet chars.
+ CHAR_UPPERCASE_A: "A",
+ /* A */
+ CHAR_LOWERCASE_A: "a",
+ /* a */
+ CHAR_UPPERCASE_Z: "Z",
+ /* Z */
+ CHAR_LOWERCASE_Z: "z",
+ /* z */
+ CHAR_LEFT_PARENTHESES: "(",
+ /* ( */
+ CHAR_RIGHT_PARENTHESES: ")",
+ /* ) */
+ CHAR_ASTERISK: "*",
+ /* * */
+ // Non-alphabetic chars.
+ CHAR_AMPERSAND: "&",
+ /* & */
+ CHAR_AT: "@",
+ /* @ */
+ CHAR_BACKSLASH: "\\",
+ /* \ */
+ CHAR_BACKTICK: "`",
+ /* ` */
+ CHAR_CARRIAGE_RETURN: "\r",
+ /* \r */
+ CHAR_CIRCUMFLEX_ACCENT: "^",
+ /* ^ */
+ CHAR_COLON: ":",
+ /* : */
+ CHAR_COMMA: ",",
+ /* , */
+ CHAR_DOLLAR: "$",
+ /* . */
+ CHAR_DOT: ".",
+ /* . */
+ CHAR_DOUBLE_QUOTE: '"',
+ /* " */
+ CHAR_EQUAL: "=",
+ /* = */
+ CHAR_EXCLAMATION_MARK: "!",
+ /* ! */
+ CHAR_FORM_FEED: "\f",
+ /* \f */
+ CHAR_FORWARD_SLASH: "/",
+ /* / */
+ CHAR_HASH: "#",
+ /* # */
+ CHAR_HYPHEN_MINUS: "-",
+ /* - */
+ CHAR_LEFT_ANGLE_BRACKET: "<",
+ /* < */
+ CHAR_LEFT_CURLY_BRACE: "{",
+ /* { */
+ CHAR_LEFT_SQUARE_BRACKET: "[",
+ /* [ */
+ CHAR_LINE_FEED: "\n",
+ /* \n */
+ CHAR_NO_BREAK_SPACE: "\xA0",
+ /* \u00A0 */
+ CHAR_PERCENT: "%",
+ /* % */
+ CHAR_PLUS: "+",
+ /* + */
+ CHAR_QUESTION_MARK: "?",
+ /* ? */
+ CHAR_RIGHT_ANGLE_BRACKET: ">",
+ /* > */
+ CHAR_RIGHT_CURLY_BRACE: "}",
+ /* } */
+ CHAR_RIGHT_SQUARE_BRACKET: "]",
+ /* ] */
+ CHAR_SEMICOLON: ";",
+ /* ; */
+ CHAR_SINGLE_QUOTE: "'",
+ /* ' */
+ CHAR_SPACE: " ",
+ /* */
+ CHAR_TAB: " ",
+ /* \t */
+ CHAR_UNDERSCORE: "_",
+ /* _ */
+ CHAR_VERTICAL_LINE: "|",
+ /* | */
+ CHAR_ZERO_WIDTH_NOBREAK_SPACE: "\uFEFF"
+ /* \uFEFF */
+ };
+ }
+});
+
+// node_modules/braces/lib/parse.js
+var require_parse2 = __commonJS({
+ "node_modules/braces/lib/parse.js"(exports2, module2) {
+ "use strict";
+ var stringify = require_stringify();
+ var {
+ MAX_LENGTH,
+ CHAR_BACKSLASH,
+ /* \ */
+ CHAR_BACKTICK,
+ /* ` */
+ CHAR_COMMA,
+ /* , */
+ CHAR_DOT,
+ /* . */
+ CHAR_LEFT_PARENTHESES,
+ /* ( */
+ CHAR_RIGHT_PARENTHESES,
+ /* ) */
+ CHAR_LEFT_CURLY_BRACE,
+ /* { */
+ CHAR_RIGHT_CURLY_BRACE,
+ /* } */
+ CHAR_LEFT_SQUARE_BRACKET,
+ /* [ */
+ CHAR_RIGHT_SQUARE_BRACKET,
+ /* ] */
+ CHAR_DOUBLE_QUOTE,
+ /* " */
+ CHAR_SINGLE_QUOTE,
+ /* ' */
+ CHAR_NO_BREAK_SPACE,
+ CHAR_ZERO_WIDTH_NOBREAK_SPACE
+ } = require_constants6();
+ var parse = (input, options = {}) => {
+ if (typeof input !== "string") {
+ throw new TypeError("Expected a string");
+ }
+ const opts = options || {};
+ const max = typeof opts.maxLength === "number" ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
+ if (input.length > max) {
+ throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);
+ }
+ const ast = { type: "root", input, nodes: [] };
+ const stack = [ast];
+ let block = ast;
+ let prev = ast;
+ let brackets = 0;
+ const length = input.length;
+ let index = 0;
+ let depth = 0;
+ let value;
+ const advance = () => input[index++];
+ const push = (node) => {
+ if (node.type === "text" && prev.type === "dot") {
+ prev.type = "text";
+ }
+ if (prev && prev.type === "text" && node.type === "text") {
+ prev.value += node.value;
+ return;
+ }
+ block.nodes.push(node);
+ node.parent = block;
+ node.prev = prev;
+ prev = node;
+ return node;
+ };
+ push({ type: "bos" });
+ while (index < length) {
+ block = stack[stack.length - 1];
+ value = advance();
+ if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {
+ continue;
+ }
+ if (value === CHAR_BACKSLASH) {
+ push({ type: "text", value: (options.keepEscaping ? value : "") + advance() });
+ continue;
+ }
+ if (value === CHAR_RIGHT_SQUARE_BRACKET) {
+ push({ type: "text", value: "\\" + value });
+ continue;
+ }
+ if (value === CHAR_LEFT_SQUARE_BRACKET) {
+ brackets++;
+ let next;
+ while (index < length && (next = advance())) {
+ value += next;
+ if (next === CHAR_LEFT_SQUARE_BRACKET) {
+ brackets++;
+ continue;
+ }
+ if (next === CHAR_BACKSLASH) {
+ value += advance();
+ continue;
+ }
+ if (next === CHAR_RIGHT_SQUARE_BRACKET) {
+ brackets--;
+ if (brackets === 0) {
+ break;
+ }
+ }
+ }
+ push({ type: "text", value });
+ continue;
+ }
+ if (value === CHAR_LEFT_PARENTHESES) {
+ block = push({ type: "paren", nodes: [] });
+ stack.push(block);
+ push({ type: "text", value });
+ continue;
+ }
+ if (value === CHAR_RIGHT_PARENTHESES) {
+ if (block.type !== "paren") {
+ push({ type: "text", value });
+ continue;
+ }
+ block = stack.pop();
+ push({ type: "text", value });
+ block = stack[stack.length - 1];
+ continue;
+ }
+ if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {
+ const open = value;
+ let next;
+ if (options.keepQuotes !== true) {
+ value = "";
+ }
+ while (index < length && (next = advance())) {
+ if (next === CHAR_BACKSLASH) {
+ value += next + advance();
+ continue;
+ }
+ if (next === open) {
+ if (options.keepQuotes === true) value += next;
+ break;
+ }
+ value += next;
+ }
+ push({ type: "text", value });
+ continue;
+ }
+ if (value === CHAR_LEFT_CURLY_BRACE) {
+ depth++;
+ const dollar = prev.value && prev.value.slice(-1) === "$" || block.dollar === true;
+ const brace = {
+ type: "brace",
+ open: true,
+ close: false,
+ dollar,
+ depth,
+ commas: 0,
+ ranges: 0,
+ nodes: []
+ };
+ block = push(brace);
+ stack.push(block);
+ push({ type: "open", value });
+ continue;
+ }
+ if (value === CHAR_RIGHT_CURLY_BRACE) {
+ if (block.type !== "brace") {
+ push({ type: "text", value });
+ continue;
+ }
+ const type = "close";
+ block = stack.pop();
+ block.close = true;
+ push({ type, value });
+ depth--;
+ block = stack[stack.length - 1];
+ continue;
+ }
+ if (value === CHAR_COMMA && depth > 0) {
+ if (block.ranges > 0) {
+ block.ranges = 0;
+ const open = block.nodes.shift();
+ block.nodes = [open, { type: "text", value: stringify(block) }];
+ }
+ push({ type: "comma", value });
+ block.commas++;
+ continue;
+ }
+ if (value === CHAR_DOT && depth > 0 && block.commas === 0) {
+ const siblings = block.nodes;
+ if (depth === 0 || siblings.length === 0) {
+ push({ type: "text", value });
+ continue;
+ }
+ if (prev.type === "dot") {
+ block.range = [];
+ prev.value += value;
+ prev.type = "range";
+ if (block.nodes.length !== 3 && block.nodes.length !== 5) {
+ block.invalid = true;
+ block.ranges = 0;
+ prev.type = "text";
+ continue;
+ }
+ block.ranges++;
+ block.args = [];
+ continue;
+ }
+ if (prev.type === "range") {
+ siblings.pop();
+ const before = siblings[siblings.length - 1];
+ before.value += prev.value + value;
+ prev = before;
+ block.ranges--;
+ continue;
+ }
+ push({ type: "dot", value });
+ continue;
+ }
+ push({ type: "text", value });
+ }
+ do {
+ block = stack.pop();
+ if (block.type !== "root") {
+ block.nodes.forEach((node) => {
+ if (!node.nodes) {
+ if (node.type === "open") node.isOpen = true;
+ if (node.type === "close") node.isClose = true;
+ if (!node.nodes) node.type = "text";
+ node.invalid = true;
+ }
+ });
+ const parent = stack[stack.length - 1];
+ const index2 = parent.nodes.indexOf(block);
+ parent.nodes.splice(index2, 1, ...block.nodes);
+ }
+ } while (stack.length > 0);
+ push({ type: "eos" });
+ return ast;
+ };
+ module2.exports = parse;
+ }
+});
+
+// node_modules/braces/index.js
+var require_braces = __commonJS({
+ "node_modules/braces/index.js"(exports2, module2) {
+ "use strict";
+ var stringify = require_stringify();
+ var compile = require_compile();
+ var expand = require_expand();
+ var parse = require_parse2();
+ var braces = (input, options = {}) => {
+ let output = [];
+ if (Array.isArray(input)) {
+ for (const pattern of input) {
+ const result = braces.create(pattern, options);
+ if (Array.isArray(result)) {
+ output.push(...result);
+ } else {
+ output.push(result);
+ }
+ }
+ } else {
+ output = [].concat(braces.create(input, options));
+ }
+ if (options && options.expand === true && options.nodupes === true) {
+ output = [...new Set(output)];
+ }
+ return output;
+ };
+ braces.parse = (input, options = {}) => parse(input, options);
+ braces.stringify = (input, options = {}) => {
+ if (typeof input === "string") {
+ return stringify(braces.parse(input, options), options);
+ }
+ return stringify(input, options);
+ };
+ braces.compile = (input, options = {}) => {
+ if (typeof input === "string") {
+ input = braces.parse(input, options);
+ }
+ return compile(input, options);
+ };
+ braces.expand = (input, options = {}) => {
+ if (typeof input === "string") {
+ input = braces.parse(input, options);
+ }
+ let result = expand(input, options);
+ if (options.noempty === true) {
+ result = result.filter(Boolean);
+ }
+ if (options.nodupes === true) {
+ result = [...new Set(result)];
+ }
+ return result;
+ };
+ braces.create = (input, options = {}) => {
+ if (input === "" || input.length < 3) {
+ return [input];
+ }
+ return options.expand !== true ? braces.compile(input, options) : braces.expand(input, options);
+ };
+ module2.exports = braces;
+ }
+});
+
+// node_modules/picomatch/lib/constants.js
+var require_constants7 = __commonJS({
+ "node_modules/picomatch/lib/constants.js"(exports2, module2) {
+ "use strict";
+ var path5 = require("path");
+ var WIN_SLASH = "\\\\/";
+ var WIN_NO_SLASH = `[^${WIN_SLASH}]`;
+ var DOT_LITERAL = "\\.";
+ var PLUS_LITERAL = "\\+";
+ var QMARK_LITERAL = "\\?";
+ var SLASH_LITERAL = "\\/";
+ var ONE_CHAR = "(?=.)";
+ var QMARK = "[^/]";
+ var END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;
+ var START_ANCHOR = `(?:^|${SLASH_LITERAL})`;
+ var DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;
+ var NO_DOT = `(?!${DOT_LITERAL})`;
+ var NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;
+ var NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;
+ var NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;
+ var QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;
+ var STAR = `${QMARK}*?`;
+ var POSIX_CHARS = {
+ DOT_LITERAL,
+ PLUS_LITERAL,
+ QMARK_LITERAL,
+ SLASH_LITERAL,
+ ONE_CHAR,
+ QMARK,
+ END_ANCHOR,
+ DOTS_SLASH,
+ NO_DOT,
+ NO_DOTS,
+ NO_DOT_SLASH,
+ NO_DOTS_SLASH,
+ QMARK_NO_DOT,
+ STAR,
+ START_ANCHOR
+ };
+ var WINDOWS_CHARS = {
+ ...POSIX_CHARS,
+ SLASH_LITERAL: `[${WIN_SLASH}]`,
+ QMARK: WIN_NO_SLASH,
+ STAR: `${WIN_NO_SLASH}*?`,
+ DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,
+ NO_DOT: `(?!${DOT_LITERAL})`,
+ NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
+ NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,
+ NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
+ QMARK_NO_DOT: `[^.${WIN_SLASH}]`,
+ START_ANCHOR: `(?:^|[${WIN_SLASH}])`,
+ END_ANCHOR: `(?:[${WIN_SLASH}]|$)`
+ };
+ var POSIX_REGEX_SOURCE = {
+ alnum: "a-zA-Z0-9",
+ alpha: "a-zA-Z",
+ ascii: "\\x00-\\x7F",
+ blank: " \\t",
+ cntrl: "\\x00-\\x1F\\x7F",
+ digit: "0-9",
+ graph: "\\x21-\\x7E",
+ lower: "a-z",
+ print: "\\x20-\\x7E ",
+ punct: "\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",
+ space: " \\t\\r\\n\\v\\f",
+ upper: "A-Z",
+ word: "A-Za-z0-9_",
+ xdigit: "A-Fa-f0-9"
+ };
+ module2.exports = {
+ MAX_LENGTH: 1024 * 64,
+ POSIX_REGEX_SOURCE,
+ // regular expressions
+ REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g,
+ REGEX_NON_SPECIAL_CHARS: /^[^@![\].,$*+?^{}()|\\/]+/,
+ REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/,
+ REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g,
+ REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g,
+ REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g,
+ // Replace globs with equivalent patterns to reduce parsing time.
+ REPLACEMENTS: {
+ "***": "*",
+ "**/**": "**",
+ "**/**/**": "**"
+ },
+ // Digits
+ CHAR_0: 48,
+ /* 0 */
+ CHAR_9: 57,
+ /* 9 */
+ // Alphabet chars.
+ CHAR_UPPERCASE_A: 65,
+ /* A */
+ CHAR_LOWERCASE_A: 97,
+ /* a */
+ CHAR_UPPERCASE_Z: 90,
+ /* Z */
+ CHAR_LOWERCASE_Z: 122,
+ /* z */
+ CHAR_LEFT_PARENTHESES: 40,
+ /* ( */
+ CHAR_RIGHT_PARENTHESES: 41,
+ /* ) */
+ CHAR_ASTERISK: 42,
+ /* * */
+ // Non-alphabetic chars.
+ CHAR_AMPERSAND: 38,
+ /* & */
+ CHAR_AT: 64,
+ /* @ */
+ CHAR_BACKWARD_SLASH: 92,
+ /* \ */
+ CHAR_CARRIAGE_RETURN: 13,
+ /* \r */
+ CHAR_CIRCUMFLEX_ACCENT: 94,
+ /* ^ */
+ CHAR_COLON: 58,
+ /* : */
+ CHAR_COMMA: 44,
+ /* , */
+ CHAR_DOT: 46,
+ /* . */
+ CHAR_DOUBLE_QUOTE: 34,
+ /* " */
+ CHAR_EQUAL: 61,
+ /* = */
+ CHAR_EXCLAMATION_MARK: 33,
+ /* ! */
+ CHAR_FORM_FEED: 12,
+ /* \f */
+ CHAR_FORWARD_SLASH: 47,
+ /* / */
+ CHAR_GRAVE_ACCENT: 96,
+ /* ` */
+ CHAR_HASH: 35,
+ /* # */
+ CHAR_HYPHEN_MINUS: 45,
+ /* - */
+ CHAR_LEFT_ANGLE_BRACKET: 60,
+ /* < */
+ CHAR_LEFT_CURLY_BRACE: 123,
+ /* { */
+ CHAR_LEFT_SQUARE_BRACKET: 91,
+ /* [ */
+ CHAR_LINE_FEED: 10,
+ /* \n */
+ CHAR_NO_BREAK_SPACE: 160,
+ /* \u00A0 */
+ CHAR_PERCENT: 37,
+ /* % */
+ CHAR_PLUS: 43,
+ /* + */
+ CHAR_QUESTION_MARK: 63,
+ /* ? */
+ CHAR_RIGHT_ANGLE_BRACKET: 62,
+ /* > */
+ CHAR_RIGHT_CURLY_BRACE: 125,
+ /* } */
+ CHAR_RIGHT_SQUARE_BRACKET: 93,
+ /* ] */
+ CHAR_SEMICOLON: 59,
+ /* ; */
+ CHAR_SINGLE_QUOTE: 39,
+ /* ' */
+ CHAR_SPACE: 32,
+ /* */
+ CHAR_TAB: 9,
+ /* \t */
+ CHAR_UNDERSCORE: 95,
+ /* _ */
+ CHAR_VERTICAL_LINE: 124,
+ /* | */
+ CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279,
+ /* \uFEFF */
+ SEP: path5.sep,
+ /**
+ * Create EXTGLOB_CHARS
+ */
+ extglobChars(chars) {
+ return {
+ "!": { type: "negate", open: "(?:(?!(?:", close: `))${chars.STAR})` },
+ "?": { type: "qmark", open: "(?:", close: ")?" },
+ "+": { type: "plus", open: "(?:", close: ")+" },
+ "*": { type: "star", open: "(?:", close: ")*" },
+ "@": { type: "at", open: "(?:", close: ")" }
+ };
+ },
+ /**
+ * Create GLOB_CHARS
+ */
+ globChars(win32) {
+ return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;
+ }
+ };
+ }
+});
+
+// node_modules/picomatch/lib/utils.js
+var require_utils6 = __commonJS({
+ "node_modules/picomatch/lib/utils.js"(exports2) {
+ "use strict";
+ var path5 = require("path");
+ var win32 = process.platform === "win32";
+ var {
+ REGEX_BACKSLASH,
+ REGEX_REMOVE_BACKSLASH,
+ REGEX_SPECIAL_CHARS,
+ REGEX_SPECIAL_CHARS_GLOBAL
+ } = require_constants7();
+ exports2.isObject = (val) => val !== null && typeof val === "object" && !Array.isArray(val);
+ exports2.hasRegexChars = (str) => REGEX_SPECIAL_CHARS.test(str);
+ exports2.isRegexChar = (str) => str.length === 1 && exports2.hasRegexChars(str);
+ exports2.escapeRegex = (str) => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, "\\$1");
+ exports2.toPosixSlashes = (str) => str.replace(REGEX_BACKSLASH, "/");
+ exports2.removeBackslashes = (str) => {
+ return str.replace(REGEX_REMOVE_BACKSLASH, (match) => {
+ return match === "\\" ? "" : match;
+ });
+ };
+ exports2.supportsLookbehinds = () => {
+ const segs = process.version.slice(1).split(".").map(Number);
+ if (segs.length === 3 && segs[0] >= 9 || segs[0] === 8 && segs[1] >= 10) {
+ return true;
+ }
+ return false;
+ };
+ exports2.isWindows = (options) => {
+ if (options && typeof options.windows === "boolean") {
+ return options.windows;
+ }
+ return win32 === true || path5.sep === "\\";
+ };
+ exports2.escapeLast = (input, char, lastIdx) => {
+ const idx = input.lastIndexOf(char, lastIdx);
+ if (idx === -1) return input;
+ if (input[idx - 1] === "\\") return exports2.escapeLast(input, char, idx - 1);
+ return `${input.slice(0, idx)}\\${input.slice(idx)}`;
+ };
+ exports2.removePrefix = (input, state = {}) => {
+ let output = input;
+ if (output.startsWith("./")) {
+ output = output.slice(2);
+ state.prefix = "./";
+ }
+ return output;
+ };
+ exports2.wrapOutput = (input, state = {}, options = {}) => {
+ const prepend = options.contains ? "" : "^";
+ const append = options.contains ? "" : "$";
+ let output = `${prepend}(?:${input})${append}`;
+ if (state.negated === true) {
+ output = `(?:^(?!${output}).*$)`;
+ }
+ return output;
+ };
+ }
+});
+
+// node_modules/picomatch/lib/scan.js
+var require_scan = __commonJS({
+ "node_modules/picomatch/lib/scan.js"(exports2, module2) {
+ "use strict";
+ var utils = require_utils6();
+ var {
+ CHAR_ASTERISK,
+ /* * */
+ CHAR_AT,
+ /* @ */
+ CHAR_BACKWARD_SLASH,
+ /* \ */
+ CHAR_COMMA,
+ /* , */
+ CHAR_DOT,
+ /* . */
+ CHAR_EXCLAMATION_MARK,
+ /* ! */
+ CHAR_FORWARD_SLASH,
+ /* / */
+ CHAR_LEFT_CURLY_BRACE,
+ /* { */
+ CHAR_LEFT_PARENTHESES,
+ /* ( */
+ CHAR_LEFT_SQUARE_BRACKET,
+ /* [ */
+ CHAR_PLUS,
+ /* + */
+ CHAR_QUESTION_MARK,
+ /* ? */
+ CHAR_RIGHT_CURLY_BRACE,
+ /* } */
+ CHAR_RIGHT_PARENTHESES,
+ /* ) */
+ CHAR_RIGHT_SQUARE_BRACKET
+ /* ] */
+ } = require_constants7();
+ var isPathSeparator = (code) => {
+ return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;
+ };
+ var depth = (token) => {
+ if (token.isPrefix !== true) {
+ token.depth = token.isGlobstar ? Infinity : 1;
+ }
+ };
+ var scan = (input, options) => {
+ const opts = options || {};
+ const length = input.length - 1;
+ const scanToEnd = opts.parts === true || opts.scanToEnd === true;
+ const slashes = [];
+ const tokens = [];
+ const parts = [];
+ let str = input;
+ let index = -1;
+ let start = 0;
+ let lastIndex = 0;
+ let isBrace = false;
+ let isBracket = false;
+ let isGlob = false;
+ let isExtglob = false;
+ let isGlobstar = false;
+ let braceEscaped = false;
+ let backslashes = false;
+ let negated = false;
+ let negatedExtglob = false;
+ let finished = false;
+ let braces = 0;
+ let prev;
+ let code;
+ let token = { value: "", depth: 0, isGlob: false };
+ const eos = () => index >= length;
+ const peek = () => str.charCodeAt(index + 1);
+ const advance = () => {
+ prev = code;
+ return str.charCodeAt(++index);
+ };
+ while (index < length) {
+ code = advance();
+ let next;
+ if (code === CHAR_BACKWARD_SLASH) {
+ backslashes = token.backslashes = true;
+ code = advance();
+ if (code === CHAR_LEFT_CURLY_BRACE) {
+ braceEscaped = true;
+ }
+ continue;
+ }
+ if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {
+ braces++;
+ while (eos() !== true && (code = advance())) {
+ if (code === CHAR_BACKWARD_SLASH) {
+ backslashes = token.backslashes = true;
+ advance();
+ continue;
+ }
+ if (code === CHAR_LEFT_CURLY_BRACE) {
+ braces++;
+ continue;
+ }
+ if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {
+ isBrace = token.isBrace = true;
+ isGlob = token.isGlob = true;
+ finished = true;
+ if (scanToEnd === true) {
+ continue;
+ }
+ break;
+ }
+ if (braceEscaped !== true && code === CHAR_COMMA) {
+ isBrace = token.isBrace = true;
+ isGlob = token.isGlob = true;
+ finished = true;
+ if (scanToEnd === true) {
+ continue;
+ }
+ break;
+ }
+ if (code === CHAR_RIGHT_CURLY_BRACE) {
+ braces--;
+ if (braces === 0) {
+ braceEscaped = false;
+ isBrace = token.isBrace = true;
+ finished = true;
+ break;
+ }
+ }
+ }
+ if (scanToEnd === true) {
+ continue;
+ }
+ break;
+ }
+ if (code === CHAR_FORWARD_SLASH) {
+ slashes.push(index);
+ tokens.push(token);
+ token = { value: "", depth: 0, isGlob: false };
+ if (finished === true) continue;
+ if (prev === CHAR_DOT && index === start + 1) {
+ start += 2;
+ continue;
+ }
+ lastIndex = index + 1;
+ continue;
+ }
+ if (opts.noext !== true) {
+ const isExtglobChar = code === CHAR_PLUS || code === CHAR_AT || code === CHAR_ASTERISK || code === CHAR_QUESTION_MARK || code === CHAR_EXCLAMATION_MARK;
+ if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {
+ isGlob = token.isGlob = true;
+ isExtglob = token.isExtglob = true;
+ finished = true;
+ if (code === CHAR_EXCLAMATION_MARK && index === start) {
+ negatedExtglob = true;
+ }
+ if (scanToEnd === true) {
+ while (eos() !== true && (code = advance())) {
+ if (code === CHAR_BACKWARD_SLASH) {
+ backslashes = token.backslashes = true;
+ code = advance();
+ continue;
+ }
+ if (code === CHAR_RIGHT_PARENTHESES) {
+ isGlob = token.isGlob = true;
+ finished = true;
+ break;
+ }
+ }
+ continue;
+ }
+ break;
+ }
+ }
+ if (code === CHAR_ASTERISK) {
+ if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;
+ isGlob = token.isGlob = true;
+ finished = true;
+ if (scanToEnd === true) {
+ continue;
+ }
+ break;
+ }
+ if (code === CHAR_QUESTION_MARK) {
+ isGlob = token.isGlob = true;
+ finished = true;
+ if (scanToEnd === true) {
+ continue;
+ }
+ break;
+ }
+ if (code === CHAR_LEFT_SQUARE_BRACKET) {
+ while (eos() !== true && (next = advance())) {
+ if (next === CHAR_BACKWARD_SLASH) {
+ backslashes = token.backslashes = true;
+ advance();
+ continue;
+ }
+ if (next === CHAR_RIGHT_SQUARE_BRACKET) {
+ isBracket = token.isBracket = true;
+ isGlob = token.isGlob = true;
+ finished = true;
+ break;
+ }
+ }
+ if (scanToEnd === true) {
+ continue;
+ }
+ break;
+ }
+ if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {
+ negated = token.negated = true;
+ start++;
+ continue;
+ }
+ if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {
+ isGlob = token.isGlob = true;
+ if (scanToEnd === true) {
+ while (eos() !== true && (code = advance())) {
+ if (code === CHAR_LEFT_PARENTHESES) {
+ backslashes = token.backslashes = true;
+ code = advance();
+ continue;
+ }
+ if (code === CHAR_RIGHT_PARENTHESES) {
+ finished = true;
+ break;
+ }
+ }
+ continue;
+ }
+ break;
+ }
+ if (isGlob === true) {
+ finished = true;
+ if (scanToEnd === true) {
+ continue;
+ }
+ break;
+ }
+ }
+ if (opts.noext === true) {
+ isExtglob = false;
+ isGlob = false;
+ }
+ let base = str;
+ let prefix = "";
+ let glob = "";
+ if (start > 0) {
+ prefix = str.slice(0, start);
+ str = str.slice(start);
+ lastIndex -= start;
+ }
+ if (base && isGlob === true && lastIndex > 0) {
+ base = str.slice(0, lastIndex);
+ glob = str.slice(lastIndex);
+ } else if (isGlob === true) {
+ base = "";
+ glob = str;
+ } else {
+ base = str;
+ }
+ if (base && base !== "" && base !== "/" && base !== str) {
+ if (isPathSeparator(base.charCodeAt(base.length - 1))) {
+ base = base.slice(0, -1);
+ }
+ }
+ if (opts.unescape === true) {
+ if (glob) glob = utils.removeBackslashes(glob);
+ if (base && backslashes === true) {
+ base = utils.removeBackslashes(base);
+ }
+ }
+ const state = {
+ prefix,
+ input,
+ start,
+ base,
+ glob,
+ isBrace,
+ isBracket,
+ isGlob,
+ isExtglob,
+ isGlobstar,
+ negated,
+ negatedExtglob
+ };
+ if (opts.tokens === true) {
+ state.maxDepth = 0;
+ if (!isPathSeparator(code)) {
+ tokens.push(token);
+ }
+ state.tokens = tokens;
+ }
+ if (opts.parts === true || opts.tokens === true) {
+ let prevIndex;
+ for (let idx = 0; idx < slashes.length; idx++) {
+ const n = prevIndex ? prevIndex + 1 : start;
+ const i = slashes[idx];
+ const value = input.slice(n, i);
+ if (opts.tokens) {
+ if (idx === 0 && start !== 0) {
+ tokens[idx].isPrefix = true;
+ tokens[idx].value = prefix;
+ } else {
+ tokens[idx].value = value;
+ }
+ depth(tokens[idx]);
+ state.maxDepth += tokens[idx].depth;
+ }
+ if (idx !== 0 || value !== "") {
+ parts.push(value);
+ }
+ prevIndex = i;
+ }
+ if (prevIndex && prevIndex + 1 < input.length) {
+ const value = input.slice(prevIndex + 1);
+ parts.push(value);
+ if (opts.tokens) {
+ tokens[tokens.length - 1].value = value;
+ depth(tokens[tokens.length - 1]);
+ state.maxDepth += tokens[tokens.length - 1].depth;
+ }
+ }
+ state.slashes = slashes;
+ state.parts = parts;
+ }
+ return state;
+ };
+ module2.exports = scan;
+ }
+});
+
+// node_modules/picomatch/lib/parse.js
+var require_parse3 = __commonJS({
+ "node_modules/picomatch/lib/parse.js"(exports2, module2) {
+ "use strict";
+ var constants = require_constants7();
+ var utils = require_utils6();
+ var {
+ MAX_LENGTH,
+ POSIX_REGEX_SOURCE,
+ REGEX_NON_SPECIAL_CHARS,
+ REGEX_SPECIAL_CHARS_BACKREF,
+ REPLACEMENTS
+ } = constants;
+ var expandRange = (args, options) => {
+ if (typeof options.expandRange === "function") {
+ return options.expandRange(...args, options);
+ }
+ args.sort();
+ const value = `[${args.join("-")}]`;
+ try {
+ new RegExp(value);
+ } catch (ex) {
+ return args.map((v) => utils.escapeRegex(v)).join("..");
+ }
+ return value;
+ };
+ var syntaxError = (type, char) => {
+ return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`;
+ };
+ var parse = (input, options) => {
+ if (typeof input !== "string") {
+ throw new TypeError("Expected a string");
+ }
+ input = REPLACEMENTS[input] || input;
+ const opts = { ...options };
+ const max = typeof opts.maxLength === "number" ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
+ let len = input.length;
+ if (len > max) {
+ throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
+ }
+ const bos = { type: "bos", value: "", output: opts.prepend || "" };
+ const tokens = [bos];
+ const capture = opts.capture ? "" : "?:";
+ const win32 = utils.isWindows(options);
+ const PLATFORM_CHARS = constants.globChars(win32);
+ const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);
+ const {
+ DOT_LITERAL,
+ PLUS_LITERAL,
+ SLASH_LITERAL,
+ ONE_CHAR,
+ DOTS_SLASH,
+ NO_DOT,
+ NO_DOT_SLASH,
+ NO_DOTS_SLASH,
+ QMARK,
+ QMARK_NO_DOT,
+ STAR,
+ START_ANCHOR
+ } = PLATFORM_CHARS;
+ const globstar = (opts2) => {
+ return `(${capture}(?:(?!${START_ANCHOR}${opts2.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
+ };
+ const nodot = opts.dot ? "" : NO_DOT;
+ const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;
+ let star = opts.bash === true ? globstar(opts) : STAR;
+ if (opts.capture) {
+ star = `(${star})`;
+ }
+ if (typeof opts.noext === "boolean") {
+ opts.noextglob = opts.noext;
+ }
+ const state = {
+ input,
+ index: -1,
+ start: 0,
+ dot: opts.dot === true,
+ consumed: "",
+ output: "",
+ prefix: "",
+ backtrack: false,
+ negated: false,
+ brackets: 0,
+ braces: 0,
+ parens: 0,
+ quotes: 0,
+ globstar: false,
+ tokens
+ };
+ input = utils.removePrefix(input, state);
+ len = input.length;
+ const extglobs = [];
+ const braces = [];
+ const stack = [];
+ let prev = bos;
+ let value;
+ const eos = () => state.index === len - 1;
+ const peek = state.peek = (n = 1) => input[state.index + n];
+ const advance = state.advance = () => input[++state.index] || "";
+ const remaining = () => input.slice(state.index + 1);
+ const consume = (value2 = "", num = 0) => {
+ state.consumed += value2;
+ state.index += num;
+ };
+ const append = (token) => {
+ state.output += token.output != null ? token.output : token.value;
+ consume(token.value);
+ };
+ const negate = () => {
+ let count = 1;
+ while (peek() === "!" && (peek(2) !== "(" || peek(3) === "?")) {
+ advance();
+ state.start++;
+ count++;
+ }
+ if (count % 2 === 0) {
+ return false;
+ }
+ state.negated = true;
+ state.start++;
+ return true;
+ };
+ const increment = (type) => {
+ state[type]++;
+ stack.push(type);
+ };
+ const decrement = (type) => {
+ state[type]--;
+ stack.pop();
+ };
+ const push = (tok) => {
+ if (prev.type === "globstar") {
+ const isBrace = state.braces > 0 && (tok.type === "comma" || tok.type === "brace");
+ const isExtglob = tok.extglob === true || extglobs.length && (tok.type === "pipe" || tok.type === "paren");
+ if (tok.type !== "slash" && tok.type !== "paren" && !isBrace && !isExtglob) {
+ state.output = state.output.slice(0, -prev.output.length);
+ prev.type = "star";
+ prev.value = "*";
+ prev.output = star;
+ state.output += prev.output;
+ }
+ }
+ if (extglobs.length && tok.type !== "paren") {
+ extglobs[extglobs.length - 1].inner += tok.value;
+ }
+ if (tok.value || tok.output) append(tok);
+ if (prev && prev.type === "text" && tok.type === "text") {
+ prev.value += tok.value;
+ prev.output = (prev.output || "") + tok.value;
+ return;
+ }
+ tok.prev = prev;
+ tokens.push(tok);
+ prev = tok;
+ };
+ const extglobOpen = (type, value2) => {
+ const token = { ...EXTGLOB_CHARS[value2], conditions: 1, inner: "" };
+ token.prev = prev;
+ token.parens = state.parens;
+ token.output = state.output;
+ const output = (opts.capture ? "(" : "") + token.open;
+ increment("parens");
+ push({ type, value: value2, output: state.output ? "" : ONE_CHAR });
+ push({ type: "paren", extglob: true, value: advance(), output });
+ extglobs.push(token);
+ };
+ const extglobClose = (token) => {
+ let output = token.close + (opts.capture ? ")" : "");
+ let rest;
+ if (token.type === "negate") {
+ let extglobStar = star;
+ if (token.inner && token.inner.length > 1 && token.inner.includes("/")) {
+ extglobStar = globstar(opts);
+ }
+ if (extglobStar !== star || eos() || /^\)+$/.test(remaining())) {
+ output = token.close = `)$))${extglobStar}`;
+ }
+ if (token.inner.includes("*") && (rest = remaining()) && /^\.[^\\/.]+$/.test(rest)) {
+ const expression = parse(rest, { ...options, fastpaths: false }).output;
+ output = token.close = `)${expression})${extglobStar})`;
+ }
+ if (token.prev.type === "bos") {
+ state.negatedExtglob = true;
+ }
+ }
+ push({ type: "paren", extglob: true, value, output });
+ decrement("parens");
+ };
+ if (opts.fastpaths !== false && !/(^[*!]|[/()[\]{}"])/.test(input)) {
+ let backslashes = false;
+ let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {
+ if (first === "\\") {
+ backslashes = true;
+ return m;
+ }
+ if (first === "?") {
+ if (esc) {
+ return esc + first + (rest ? QMARK.repeat(rest.length) : "");
+ }
+ if (index === 0) {
+ return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : "");
+ }
+ return QMARK.repeat(chars.length);
+ }
+ if (first === ".") {
+ return DOT_LITERAL.repeat(chars.length);
+ }
+ if (first === "*") {
+ if (esc) {
+ return esc + first + (rest ? star : "");
+ }
+ return star;
+ }
+ return esc ? m : `\\${m}`;
+ });
+ if (backslashes === true) {
+ if (opts.unescape === true) {
+ output = output.replace(/\\/g, "");
+ } else {
+ output = output.replace(/\\+/g, (m) => {
+ return m.length % 2 === 0 ? "\\\\" : m ? "\\" : "";
+ });
+ }
+ }
+ if (output === input && opts.contains === true) {
+ state.output = input;
+ return state;
+ }
+ state.output = utils.wrapOutput(output, state, options);
+ return state;
+ }
+ while (!eos()) {
+ value = advance();
+ if (value === "\0") {
+ continue;
+ }
+ if (value === "\\") {
+ const next = peek();
+ if (next === "/" && opts.bash !== true) {
+ continue;
+ }
+ if (next === "." || next === ";") {
+ continue;
+ }
+ if (!next) {
+ value += "\\";
+ push({ type: "text", value });
+ continue;
+ }
+ const match = /^\\+/.exec(remaining());
+ let slashes = 0;
+ if (match && match[0].length > 2) {
+ slashes = match[0].length;
+ state.index += slashes;
+ if (slashes % 2 !== 0) {
+ value += "\\";
+ }
+ }
+ if (opts.unescape === true) {
+ value = advance();
+ } else {
+ value += advance();
+ }
+ if (state.brackets === 0) {
+ push({ type: "text", value });
+ continue;
+ }
+ }
+ if (state.brackets > 0 && (value !== "]" || prev.value === "[" || prev.value === "[^")) {
+ if (opts.posix !== false && value === ":") {
+ const inner = prev.value.slice(1);
+ if (inner.includes("[")) {
+ prev.posix = true;
+ if (inner.includes(":")) {
+ const idx = prev.value.lastIndexOf("[");
+ const pre = prev.value.slice(0, idx);
+ const rest2 = prev.value.slice(idx + 2);
+ const posix = POSIX_REGEX_SOURCE[rest2];
+ if (posix) {
+ prev.value = pre + posix;
+ state.backtrack = true;
+ advance();
+ if (!bos.output && tokens.indexOf(prev) === 1) {
+ bos.output = ONE_CHAR;
+ }
+ continue;
+ }
+ }
+ }
+ }
+ if (value === "[" && peek() !== ":" || value === "-" && peek() === "]") {
+ value = `\\${value}`;
+ }
+ if (value === "]" && (prev.value === "[" || prev.value === "[^")) {
+ value = `\\${value}`;
+ }
+ if (opts.posix === true && value === "!" && prev.value === "[") {
+ value = "^";
+ }
+ prev.value += value;
+ append({ value });
+ continue;
+ }
+ if (state.quotes === 1 && value !== '"') {
+ value = utils.escapeRegex(value);
+ prev.value += value;
+ append({ value });
+ continue;
+ }
+ if (value === '"') {
+ state.quotes = state.quotes === 1 ? 0 : 1;
+ if (opts.keepQuotes === true) {
+ push({ type: "text", value });
+ }
+ continue;
+ }
+ if (value === "(") {
+ increment("parens");
+ push({ type: "paren", value });
+ continue;
+ }
+ if (value === ")") {
+ if (state.parens === 0 && opts.strictBrackets === true) {
+ throw new SyntaxError(syntaxError("opening", "("));
+ }
+ const extglob = extglobs[extglobs.length - 1];
+ if (extglob && state.parens === extglob.parens + 1) {
+ extglobClose(extglobs.pop());
+ continue;
+ }
+ push({ type: "paren", value, output: state.parens ? ")" : "\\)" });
+ decrement("parens");
+ continue;
+ }
+ if (value === "[") {
+ if (opts.nobracket === true || !remaining().includes("]")) {
+ if (opts.nobracket !== true && opts.strictBrackets === true) {
+ throw new SyntaxError(syntaxError("closing", "]"));
+ }
+ value = `\\${value}`;
+ } else {
+ increment("brackets");
+ }
+ push({ type: "bracket", value });
+ continue;
+ }
+ if (value === "]") {
+ if (opts.nobracket === true || prev && prev.type === "bracket" && prev.value.length === 1) {
+ push({ type: "text", value, output: `\\${value}` });
+ continue;
+ }
+ if (state.brackets === 0) {
+ if (opts.strictBrackets === true) {
+ throw new SyntaxError(syntaxError("opening", "["));
+ }
+ push({ type: "text", value, output: `\\${value}` });
+ continue;
+ }
+ decrement("brackets");
+ const prevValue = prev.value.slice(1);
+ if (prev.posix !== true && prevValue[0] === "^" && !prevValue.includes("/")) {
+ value = `/${value}`;
+ }
+ prev.value += value;
+ append({ value });
+ if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {
+ continue;
+ }
+ const escaped = utils.escapeRegex(prev.value);
+ state.output = state.output.slice(0, -prev.value.length);
+ if (opts.literalBrackets === true) {
+ state.output += escaped;
+ prev.value = escaped;
+ continue;
+ }
+ prev.value = `(${capture}${escaped}|${prev.value})`;
+ state.output += prev.value;
+ continue;
+ }
+ if (value === "{" && opts.nobrace !== true) {
+ increment("braces");
+ const open = {
+ type: "brace",
+ value,
+ output: "(",
+ outputIndex: state.output.length,
+ tokensIndex: state.tokens.length
+ };
+ braces.push(open);
+ push(open);
+ continue;
+ }
+ if (value === "}") {
+ const brace = braces[braces.length - 1];
+ if (opts.nobrace === true || !brace) {
+ push({ type: "text", value, output: value });
+ continue;
+ }
+ let output = ")";
+ if (brace.dots === true) {
+ const arr = tokens.slice();
+ const range = [];
+ for (let i = arr.length - 1; i >= 0; i--) {
+ tokens.pop();
+ if (arr[i].type === "brace") {
+ break;
+ }
+ if (arr[i].type !== "dots") {
+ range.unshift(arr[i].value);
+ }
+ }
+ output = expandRange(range, opts);
+ state.backtrack = true;
+ }
+ if (brace.comma !== true && brace.dots !== true) {
+ const out = state.output.slice(0, brace.outputIndex);
+ const toks = state.tokens.slice(brace.tokensIndex);
+ brace.value = brace.output = "\\{";
+ value = output = "\\}";
+ state.output = out;
+ for (const t of toks) {
+ state.output += t.output || t.value;
+ }
+ }
+ push({ type: "brace", value, output });
+ decrement("braces");
+ braces.pop();
+ continue;
+ }
+ if (value === "|") {
+ if (extglobs.length > 0) {
+ extglobs[extglobs.length - 1].conditions++;
+ }
+ push({ type: "text", value });
+ continue;
+ }
+ if (value === ",") {
+ let output = value;
+ const brace = braces[braces.length - 1];
+ if (brace && stack[stack.length - 1] === "braces") {
+ brace.comma = true;
+ output = "|";
+ }
+ push({ type: "comma", value, output });
+ continue;
+ }
+ if (value === "/") {
+ if (prev.type === "dot" && state.index === state.start + 1) {
+ state.start = state.index + 1;
+ state.consumed = "";
+ state.output = "";
+ tokens.pop();
+ prev = bos;
+ continue;
+ }
+ push({ type: "slash", value, output: SLASH_LITERAL });
+ continue;
+ }
+ if (value === ".") {
+ if (state.braces > 0 && prev.type === "dot") {
+ if (prev.value === ".") prev.output = DOT_LITERAL;
+ const brace = braces[braces.length - 1];
+ prev.type = "dots";
+ prev.output += value;
+ prev.value += value;
+ brace.dots = true;
+ continue;
+ }
+ if (state.braces + state.parens === 0 && prev.type !== "bos" && prev.type !== "slash") {
+ push({ type: "text", value, output: DOT_LITERAL });
+ continue;
+ }
+ push({ type: "dot", value, output: DOT_LITERAL });
+ continue;
+ }
+ if (value === "?") {
+ const isGroup = prev && prev.value === "(";
+ if (!isGroup && opts.noextglob !== true && peek() === "(" && peek(2) !== "?") {
+ extglobOpen("qmark", value);
+ continue;
+ }
+ if (prev && prev.type === "paren") {
+ const next = peek();
+ let output = value;
+ if (next === "<" && !utils.supportsLookbehinds()) {
+ throw new Error("Node.js v10 or higher is required for regex lookbehinds");
+ }
+ if (prev.value === "(" && !/[!=<:]/.test(next) || next === "<" && !/<([!=]|\w+>)/.test(remaining())) {
+ output = `\\${value}`;
+ }
+ push({ type: "text", value, output });
+ continue;
+ }
+ if (opts.dot !== true && (prev.type === "slash" || prev.type === "bos")) {
+ push({ type: "qmark", value, output: QMARK_NO_DOT });
+ continue;
+ }
+ push({ type: "qmark", value, output: QMARK });
+ continue;
+ }
+ if (value === "!") {
+ if (opts.noextglob !== true && peek() === "(") {
+ if (peek(2) !== "?" || !/[!=<:]/.test(peek(3))) {
+ extglobOpen("negate", value);
+ continue;
+ }
+ }
+ if (opts.nonegate !== true && state.index === 0) {
+ negate();
+ continue;
+ }
+ }
+ if (value === "+") {
+ if (opts.noextglob !== true && peek() === "(" && peek(2) !== "?") {
+ extglobOpen("plus", value);
+ continue;
+ }
+ if (prev && prev.value === "(" || opts.regex === false) {
+ push({ type: "plus", value, output: PLUS_LITERAL });
+ continue;
+ }
+ if (prev && (prev.type === "bracket" || prev.type === "paren" || prev.type === "brace") || state.parens > 0) {
+ push({ type: "plus", value });
+ continue;
+ }
+ push({ type: "plus", value: PLUS_LITERAL });
+ continue;
+ }
+ if (value === "@") {
+ if (opts.noextglob !== true && peek() === "(" && peek(2) !== "?") {
+ push({ type: "at", extglob: true, value, output: "" });
+ continue;
+ }
+ push({ type: "text", value });
+ continue;
+ }
+ if (value !== "*") {
+ if (value === "$" || value === "^") {
+ value = `\\${value}`;
+ }
+ const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());
+ if (match) {
+ value += match[0];
+ state.index += match[0].length;
+ }
+ push({ type: "text", value });
+ continue;
+ }
+ if (prev && (prev.type === "globstar" || prev.star === true)) {
+ prev.type = "star";
+ prev.star = true;
+ prev.value += value;
+ prev.output = star;
+ state.backtrack = true;
+ state.globstar = true;
+ consume(value);
+ continue;
+ }
+ let rest = remaining();
+ if (opts.noextglob !== true && /^\([^?]/.test(rest)) {
+ extglobOpen("star", value);
+ continue;
+ }
+ if (prev.type === "star") {
+ if (opts.noglobstar === true) {
+ consume(value);
+ continue;
+ }
+ const prior = prev.prev;
+ const before = prior.prev;
+ const isStart = prior.type === "slash" || prior.type === "bos";
+ const afterStar = before && (before.type === "star" || before.type === "globstar");
+ if (opts.bash === true && (!isStart || rest[0] && rest[0] !== "/")) {
+ push({ type: "star", value, output: "" });
+ continue;
+ }
+ const isBrace = state.braces > 0 && (prior.type === "comma" || prior.type === "brace");
+ const isExtglob = extglobs.length && (prior.type === "pipe" || prior.type === "paren");
+ if (!isStart && prior.type !== "paren" && !isBrace && !isExtglob) {
+ push({ type: "star", value, output: "" });
+ continue;
+ }
+ while (rest.slice(0, 3) === "/**") {
+ const after = input[state.index + 4];
+ if (after && after !== "/") {
+ break;
+ }
+ rest = rest.slice(3);
+ consume("/**", 3);
+ }
+ if (prior.type === "bos" && eos()) {
+ prev.type = "globstar";
+ prev.value += value;
+ prev.output = globstar(opts);
+ state.output = prev.output;
+ state.globstar = true;
+ consume(value);
+ continue;
+ }
+ if (prior.type === "slash" && prior.prev.type !== "bos" && !afterStar && eos()) {
+ state.output = state.output.slice(0, -(prior.output + prev.output).length);
+ prior.output = `(?:${prior.output}`;
+ prev.type = "globstar";
+ prev.output = globstar(opts) + (opts.strictSlashes ? ")" : "|$)");
+ prev.value += value;
+ state.globstar = true;
+ state.output += prior.output + prev.output;
+ consume(value);
+ continue;
+ }
+ if (prior.type === "slash" && prior.prev.type !== "bos" && rest[0] === "/") {
+ const end = rest[1] !== void 0 ? "|$" : "";
+ state.output = state.output.slice(0, -(prior.output + prev.output).length);
+ prior.output = `(?:${prior.output}`;
+ prev.type = "globstar";
+ prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;
+ prev.value += value;
+ state.output += prior.output + prev.output;
+ state.globstar = true;
+ consume(value + advance());
+ push({ type: "slash", value: "/", output: "" });
+ continue;
+ }
+ if (prior.type === "bos" && rest[0] === "/") {
+ prev.type = "globstar";
+ prev.value += value;
+ prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;
+ state.output = prev.output;
+ state.globstar = true;
+ consume(value + advance());
+ push({ type: "slash", value: "/", output: "" });
+ continue;
+ }
+ state.output = state.output.slice(0, -prev.output.length);
+ prev.type = "globstar";
+ prev.output = globstar(opts);
+ prev.value += value;
+ state.output += prev.output;
+ state.globstar = true;
+ consume(value);
+ continue;
+ }
+ const token = { type: "star", value, output: star };
+ if (opts.bash === true) {
+ token.output = ".*?";
+ if (prev.type === "bos" || prev.type === "slash") {
+ token.output = nodot + token.output;
+ }
+ push(token);
+ continue;
+ }
+ if (prev && (prev.type === "bracket" || prev.type === "paren") && opts.regex === true) {
+ token.output = value;
+ push(token);
+ continue;
+ }
+ if (state.index === state.start || prev.type === "slash" || prev.type === "dot") {
+ if (prev.type === "dot") {
+ state.output += NO_DOT_SLASH;
+ prev.output += NO_DOT_SLASH;
+ } else if (opts.dot === true) {
+ state.output += NO_DOTS_SLASH;
+ prev.output += NO_DOTS_SLASH;
+ } else {
+ state.output += nodot;
+ prev.output += nodot;
+ }
+ if (peek() !== "*") {
+ state.output += ONE_CHAR;
+ prev.output += ONE_CHAR;
+ }
+ }
+ push(token);
+ }
+ while (state.brackets > 0) {
+ if (opts.strictBrackets === true) throw new SyntaxError(syntaxError("closing", "]"));
+ state.output = utils.escapeLast(state.output, "[");
+ decrement("brackets");
+ }
+ while (state.parens > 0) {
+ if (opts.strictBrackets === true) throw new SyntaxError(syntaxError("closing", ")"));
+ state.output = utils.escapeLast(state.output, "(");
+ decrement("parens");
+ }
+ while (state.braces > 0) {
+ if (opts.strictBrackets === true) throw new SyntaxError(syntaxError("closing", "}"));
+ state.output = utils.escapeLast(state.output, "{");
+ decrement("braces");
+ }
+ if (opts.strictSlashes !== true && (prev.type === "star" || prev.type === "bracket")) {
+ push({ type: "maybe_slash", value: "", output: `${SLASH_LITERAL}?` });
+ }
+ if (state.backtrack === true) {
+ state.output = "";
+ for (const token of state.tokens) {
+ state.output += token.output != null ? token.output : token.value;
+ if (token.suffix) {
+ state.output += token.suffix;
+ }
+ }
+ }
+ return state;
+ };
+ parse.fastpaths = (input, options) => {
+ const opts = { ...options };
+ const max = typeof opts.maxLength === "number" ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
+ const len = input.length;
+ if (len > max) {
+ throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
+ }
+ input = REPLACEMENTS[input] || input;
+ const win32 = utils.isWindows(options);
+ const {
+ DOT_LITERAL,
+ SLASH_LITERAL,
+ ONE_CHAR,
+ DOTS_SLASH,
+ NO_DOT,
+ NO_DOTS,
+ NO_DOTS_SLASH,
+ STAR,
+ START_ANCHOR
+ } = constants.globChars(win32);
+ const nodot = opts.dot ? NO_DOTS : NO_DOT;
+ const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;
+ const capture = opts.capture ? "" : "?:";
+ const state = { negated: false, prefix: "" };
+ let star = opts.bash === true ? ".*?" : STAR;
+ if (opts.capture) {
+ star = `(${star})`;
+ }
+ const globstar = (opts2) => {
+ if (opts2.noglobstar === true) return star;
+ return `(${capture}(?:(?!${START_ANCHOR}${opts2.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
+ };
+ const create = (str) => {
+ switch (str) {
+ case "*":
+ return `${nodot}${ONE_CHAR}${star}`;
+ case ".*":
+ return `${DOT_LITERAL}${ONE_CHAR}${star}`;
+ case "*.*":
+ return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
+ case "*/*":
+ return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;
+ case "**":
+ return nodot + globstar(opts);
+ case "**/*":
+ return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;
+ case "**/*.*":
+ return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
+ case "**/.*":
+ return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;
+ default: {
+ const match = /^(.*?)\.(\w+)$/.exec(str);
+ if (!match) return;
+ const source2 = create(match[1]);
+ if (!source2) return;
+ return source2 + DOT_LITERAL + match[2];
+ }
+ }
+ };
+ const output = utils.removePrefix(input, state);
+ let source = create(output);
+ if (source && opts.strictSlashes !== true) {
+ source += `${SLASH_LITERAL}?`;
+ }
+ return source;
+ };
+ module2.exports = parse;
+ }
+});
+
+// node_modules/picomatch/lib/picomatch.js
+var require_picomatch = __commonJS({
+ "node_modules/picomatch/lib/picomatch.js"(exports2, module2) {
+ "use strict";
+ var path5 = require("path");
+ var scan = require_scan();
+ var parse = require_parse3();
+ var utils = require_utils6();
+ var constants = require_constants7();
+ var isObject = (val) => val && typeof val === "object" && !Array.isArray(val);
+ var picomatch = (glob, options, returnState = false) => {
+ if (Array.isArray(glob)) {
+ const fns = glob.map((input) => picomatch(input, options, returnState));
+ const arrayMatcher = (str) => {
+ for (const isMatch of fns) {
+ const state2 = isMatch(str);
+ if (state2) return state2;
+ }
+ return false;
+ };
+ return arrayMatcher;
+ }
+ const isState = isObject(glob) && glob.tokens && glob.input;
+ if (glob === "" || typeof glob !== "string" && !isState) {
+ throw new TypeError("Expected pattern to be a non-empty string");
+ }
+ const opts = options || {};
+ const posix = utils.isWindows(options);
+ const regex = isState ? picomatch.compileRe(glob, options) : picomatch.makeRe(glob, options, false, true);
+ const state = regex.state;
+ delete regex.state;
+ let isIgnored = () => false;
+ if (opts.ignore) {
+ const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };
+ isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);
+ }
+ const matcher = (input, returnObject = false) => {
+ const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });
+ const result = { glob, state, regex, posix, input, output, match, isMatch };
+ if (typeof opts.onResult === "function") {
+ opts.onResult(result);
+ }
+ if (isMatch === false) {
+ result.isMatch = false;
+ return returnObject ? result : false;
+ }
+ if (isIgnored(input)) {
+ if (typeof opts.onIgnore === "function") {
+ opts.onIgnore(result);
+ }
+ result.isMatch = false;
+ return returnObject ? result : false;
+ }
+ if (typeof opts.onMatch === "function") {
+ opts.onMatch(result);
+ }
+ return returnObject ? result : true;
+ };
+ if (returnState) {
+ matcher.state = state;
+ }
+ return matcher;
+ };
+ picomatch.test = (input, regex, options, { glob, posix } = {}) => {
+ if (typeof input !== "string") {
+ throw new TypeError("Expected input to be a string");
+ }
+ if (input === "") {
+ return { isMatch: false, output: "" };
+ }
+ const opts = options || {};
+ const format = opts.format || (posix ? utils.toPosixSlashes : null);
+ let match = input === glob;
+ let output = match && format ? format(input) : input;
+ if (match === false) {
+ output = format ? format(input) : input;
+ match = output === glob;
+ }
+ if (match === false || opts.capture === true) {
+ if (opts.matchBase === true || opts.basename === true) {
+ match = picomatch.matchBase(input, regex, options, posix);
+ } else {
+ match = regex.exec(output);
+ }
+ }
+ return { isMatch: Boolean(match), match, output };
+ };
+ picomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {
+ const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);
+ return regex.test(path5.basename(input));
+ };
+ picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);
+ picomatch.parse = (pattern, options) => {
+ if (Array.isArray(pattern)) return pattern.map((p) => picomatch.parse(p, options));
+ return parse(pattern, { ...options, fastpaths: false });
+ };
+ picomatch.scan = (input, options) => scan(input, options);
+ picomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {
+ if (returnOutput === true) {
+ return state.output;
+ }
+ const opts = options || {};
+ const prepend = opts.contains ? "" : "^";
+ const append = opts.contains ? "" : "$";
+ let source = `${prepend}(?:${state.output})${append}`;
+ if (state && state.negated === true) {
+ source = `^(?!${source}).*$`;
+ }
+ const regex = picomatch.toRegex(source, options);
+ if (returnState === true) {
+ regex.state = state;
+ }
+ return regex;
+ };
+ picomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {
+ if (!input || typeof input !== "string") {
+ throw new TypeError("Expected a non-empty string");
+ }
+ let parsed = { negated: false, fastpaths: true };
+ if (options.fastpaths !== false && (input[0] === "." || input[0] === "*")) {
+ parsed.output = parse.fastpaths(input, options);
+ }
+ if (!parsed.output) {
+ parsed = parse(input, options);
+ }
+ return picomatch.compileRe(parsed, options, returnOutput, returnState);
+ };
+ picomatch.toRegex = (source, options) => {
+ try {
+ const opts = options || {};
+ return new RegExp(source, opts.flags || (opts.nocase ? "i" : ""));
+ } catch (err) {
+ if (options && options.debug === true) throw err;
+ return /$^/;
+ }
+ };
+ picomatch.constants = constants;
+ module2.exports = picomatch;
+ }
+});
+
+// node_modules/picomatch/index.js
+var require_picomatch2 = __commonJS({
+ "node_modules/picomatch/index.js"(exports2, module2) {
+ "use strict";
+ module2.exports = require_picomatch();
+ }
+});
+
+// node_modules/micromatch/index.js
+var require_micromatch = __commonJS({
+ "node_modules/micromatch/index.js"(exports2, module2) {
+ "use strict";
+ var util = require("util");
+ var braces = require_braces();
+ var picomatch = require_picomatch2();
+ var utils = require_utils6();
+ var isEmptyString = (v) => v === "" || v === "./";
+ var hasBraces = (v) => {
+ const index = v.indexOf("{");
+ return index > -1 && v.indexOf("}", index) > -1;
+ };
+ var micromatch = (list, patterns, options) => {
+ patterns = [].concat(patterns);
+ list = [].concat(list);
+ let omit = /* @__PURE__ */ new Set();
+ let keep = /* @__PURE__ */ new Set();
+ let items = /* @__PURE__ */ new Set();
+ let negatives = 0;
+ let onResult = (state) => {
+ items.add(state.output);
+ if (options && options.onResult) {
+ options.onResult(state);
+ }
+ };
+ for (let i = 0; i < patterns.length; i++) {
+ let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true);
+ let negated = isMatch.state.negated || isMatch.state.negatedExtglob;
+ if (negated) negatives++;
+ for (let item of list) {
+ let matched = isMatch(item, true);
+ let match = negated ? !matched.isMatch : matched.isMatch;
+ if (!match) continue;
+ if (negated) {
+ omit.add(matched.output);
+ } else {
+ omit.delete(matched.output);
+ keep.add(matched.output);
+ }
+ }
+ }
+ let result = negatives === patterns.length ? [...items] : [...keep];
+ let matches = result.filter((item) => !omit.has(item));
+ if (options && matches.length === 0) {
+ if (options.failglob === true) {
+ throw new Error(`No matches found for "${patterns.join(", ")}"`);
+ }
+ if (options.nonull === true || options.nullglob === true) {
+ return options.unescape ? patterns.map((p) => p.replace(/\\/g, "")) : patterns;
+ }
+ }
+ return matches;
+ };
+ micromatch.match = micromatch;
+ micromatch.matcher = (pattern, options) => picomatch(pattern, options);
+ micromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);
+ micromatch.any = micromatch.isMatch;
+ micromatch.not = (list, patterns, options = {}) => {
+ patterns = [].concat(patterns).map(String);
+ let result = /* @__PURE__ */ new Set();
+ let items = [];
+ let onResult = (state) => {
+ if (options.onResult) options.onResult(state);
+ items.push(state.output);
+ };
+ let matches = new Set(micromatch(list, patterns, { ...options, onResult }));
+ for (let item of items) {
+ if (!matches.has(item)) {
+ result.add(item);
+ }
+ }
+ return [...result];
+ };
+ micromatch.contains = (str, pattern, options) => {
+ if (typeof str !== "string") {
+ throw new TypeError(`Expected a string: "${util.inspect(str)}"`);
+ }
+ if (Array.isArray(pattern)) {
+ return pattern.some((p) => micromatch.contains(str, p, options));
+ }
+ if (typeof pattern === "string") {
+ if (isEmptyString(str) || isEmptyString(pattern)) {
+ return false;
+ }
+ if (str.includes(pattern) || str.startsWith("./") && str.slice(2).includes(pattern)) {
+ return true;
+ }
+ }
+ return micromatch.isMatch(str, pattern, { ...options, contains: true });
+ };
+ micromatch.matchKeys = (obj, patterns, options) => {
+ if (!utils.isObject(obj)) {
+ throw new TypeError("Expected the first argument to be an object");
+ }
+ let keys = micromatch(Object.keys(obj), patterns, options);
+ let res = {};
+ for (let key of keys) res[key] = obj[key];
+ return res;
+ };
+ micromatch.some = (list, patterns, options) => {
+ let items = [].concat(list);
+ for (let pattern of [].concat(patterns)) {
+ let isMatch = picomatch(String(pattern), options);
+ if (items.some((item) => isMatch(item))) {
+ return true;
+ }
+ }
+ return false;
+ };
+ micromatch.every = (list, patterns, options) => {
+ let items = [].concat(list);
+ for (let pattern of [].concat(patterns)) {
+ let isMatch = picomatch(String(pattern), options);
+ if (!items.every((item) => isMatch(item))) {
+ return false;
+ }
+ }
+ return true;
+ };
+ micromatch.all = (str, patterns, options) => {
+ if (typeof str !== "string") {
+ throw new TypeError(`Expected a string: "${util.inspect(str)}"`);
+ }
+ return [].concat(patterns).every((p) => picomatch(p, options)(str));
+ };
+ micromatch.capture = (glob, input, options) => {
+ let posix = utils.isWindows(options);
+ let regex = picomatch.makeRe(String(glob), { ...options, capture: true });
+ let match = regex.exec(posix ? utils.toPosixSlashes(input) : input);
+ if (match) {
+ return match.slice(1).map((v) => v === void 0 ? "" : v);
+ }
+ };
+ micromatch.makeRe = (...args) => picomatch.makeRe(...args);
+ micromatch.scan = (...args) => picomatch.scan(...args);
+ micromatch.parse = (patterns, options) => {
+ let res = [];
+ for (let pattern of [].concat(patterns || [])) {
+ for (let str of braces(String(pattern), options)) {
+ res.push(picomatch.parse(str, options));
+ }
+ }
+ return res;
+ };
+ micromatch.braces = (pattern, options) => {
+ if (typeof pattern !== "string") throw new TypeError("Expected a string");
+ if (options && options.nobrace === true || !hasBraces(pattern)) {
+ return [pattern];
+ }
+ return braces(pattern, options);
+ };
+ micromatch.braceExpand = (pattern, options) => {
+ if (typeof pattern !== "string") throw new TypeError("Expected a string");
+ return micromatch.braces(pattern, { ...options, expand: true });
+ };
+ micromatch.hasBraces = hasBraces;
+ module2.exports = micromatch;
+ }
+});
+
+// node_modules/lodash/lodash.js
+var require_lodash = __commonJS({
+ "node_modules/lodash/lodash.js"(exports2, module2) {
+ (function() {
+ var undefined2;
+ var VERSION = "4.17.21";
+ var LARGE_ARRAY_SIZE = 200;
+ var CORE_ERROR_TEXT = "Unsupported core-js use. Try https://npms.io/search?q=ponyfill.", FUNC_ERROR_TEXT = "Expected a function", INVALID_TEMPL_VAR_ERROR_TEXT = "Invalid `variable` option passed into `_.template`";
+ var HASH_UNDEFINED = "__lodash_hash_undefined__";
+ var MAX_MEMOIZE_SIZE = 500;
+ var PLACEHOLDER = "__lodash_placeholder__";
+ var CLONE_DEEP_FLAG = 1, CLONE_FLAT_FLAG = 2, CLONE_SYMBOLS_FLAG = 4;
+ var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2;
+ var WRAP_BIND_FLAG = 1, WRAP_BIND_KEY_FLAG = 2, WRAP_CURRY_BOUND_FLAG = 4, WRAP_CURRY_FLAG = 8, WRAP_CURRY_RIGHT_FLAG = 16, WRAP_PARTIAL_FLAG = 32, WRAP_PARTIAL_RIGHT_FLAG = 64, WRAP_ARY_FLAG = 128, WRAP_REARG_FLAG = 256, WRAP_FLIP_FLAG = 512;
+ var DEFAULT_TRUNC_LENGTH = 30, DEFAULT_TRUNC_OMISSION = "...";
+ var HOT_COUNT = 800, HOT_SPAN = 16;
+ var LAZY_FILTER_FLAG = 1, LAZY_MAP_FLAG = 2, LAZY_WHILE_FLAG = 3;
+ var INFINITY = 1 / 0, MAX_SAFE_INTEGER = 9007199254740991, MAX_INTEGER = 17976931348623157e292, NAN = 0 / 0;
+ var MAX_ARRAY_LENGTH = 4294967295, MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;
+ var wrapFlags = [
+ ["ary", WRAP_ARY_FLAG],
+ ["bind", WRAP_BIND_FLAG],
+ ["bindKey", WRAP_BIND_KEY_FLAG],
+ ["curry", WRAP_CURRY_FLAG],
+ ["curryRight", WRAP_CURRY_RIGHT_FLAG],
+ ["flip", WRAP_FLIP_FLAG],
+ ["partial", WRAP_PARTIAL_FLAG],
+ ["partialRight", WRAP_PARTIAL_RIGHT_FLAG],
+ ["rearg", WRAP_REARG_FLAG]
+ ];
+ var argsTag = "[object Arguments]", arrayTag = "[object Array]", asyncTag = "[object AsyncFunction]", boolTag = "[object Boolean]", dateTag = "[object Date]", domExcTag = "[object DOMException]", errorTag = "[object Error]", funcTag = "[object Function]", genTag = "[object GeneratorFunction]", mapTag = "[object Map]", numberTag = "[object Number]", nullTag = "[object Null]", objectTag = "[object Object]", promiseTag = "[object Promise]", proxyTag = "[object Proxy]", regexpTag = "[object RegExp]", setTag = "[object Set]", stringTag = "[object String]", symbolTag = "[object Symbol]", undefinedTag = "[object Undefined]", weakMapTag = "[object WeakMap]", weakSetTag = "[object WeakSet]";
+ var arrayBufferTag = "[object ArrayBuffer]", dataViewTag = "[object DataView]", float32Tag = "[object Float32Array]", float64Tag = "[object Float64Array]", int8Tag = "[object Int8Array]", int16Tag = "[object Int16Array]", int32Tag = "[object Int32Array]", uint8Tag = "[object Uint8Array]", uint8ClampedTag = "[object Uint8ClampedArray]", uint16Tag = "[object Uint16Array]", uint32Tag = "[object Uint32Array]";
+ var reEmptyStringLeading = /\b__p \+= '';/g, reEmptyStringMiddle = /\b(__p \+=) '' \+/g, reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
+ var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, reUnescapedHtml = /[&<>"']/g, reHasEscapedHtml = RegExp(reEscapedHtml.source), reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
+ var reEscape = /<%-([\s\S]+?)%>/g, reEvaluate = /<%([\s\S]+?)%>/g, reInterpolate = /<%=([\s\S]+?)%>/g;
+ var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/, rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
+ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, reHasRegExpChar = RegExp(reRegExpChar.source);
+ var reTrimStart = /^\s+/;
+ var reWhitespace = /\s/;
+ var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, reSplitDetails = /,? & /;
+ var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;
+ var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/;
+ var reEscapeChar = /\\(\\)?/g;
+ var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
+ var reFlags = /\w*$/;
+ var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
+ var reIsBinary = /^0b[01]+$/i;
+ var reIsHostCtor = /^\[object .+?Constructor\]$/;
+ var reIsOctal = /^0o[0-7]+$/i;
+ var reIsUint = /^(?:0|[1-9]\d*)$/;
+ var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;
+ var reNoMatch = /($^)/;
+ var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
+ var rsAstralRange = "\\ud800-\\udfff", rsComboMarksRange = "\\u0300-\\u036f", reComboHalfMarksRange = "\\ufe20-\\ufe2f", rsComboSymbolsRange = "\\u20d0-\\u20ff", rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, rsDingbatRange = "\\u2700-\\u27bf", rsLowerRange = "a-z\\xdf-\\xf6\\xf8-\\xff", rsMathOpRange = "\\xac\\xb1\\xd7\\xf7", rsNonCharRange = "\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf", rsPunctuationRange = "\\u2000-\\u206f", rsSpaceRange = " \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000", rsUpperRange = "A-Z\\xc0-\\xd6\\xd8-\\xde", rsVarRange = "\\ufe0e\\ufe0f", rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;
+ var rsApos = "['\u2019]", rsAstral = "[" + rsAstralRange + "]", rsBreak = "[" + rsBreakRange + "]", rsCombo = "[" + rsComboRange + "]", rsDigits = "\\d+", rsDingbat = "[" + rsDingbatRange + "]", rsLower = "[" + rsLowerRange + "]", rsMisc = "[^" + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + "]", rsFitz = "\\ud83c[\\udffb-\\udfff]", rsModifier = "(?:" + rsCombo + "|" + rsFitz + ")", rsNonAstral = "[^" + rsAstralRange + "]", rsRegional = "(?:\\ud83c[\\udde6-\\uddff]){2}", rsSurrPair = "[\\ud800-\\udbff][\\udc00-\\udfff]", rsUpper = "[" + rsUpperRange + "]", rsZWJ = "\\u200d";
+ var rsMiscLower = "(?:" + rsLower + "|" + rsMisc + ")", rsMiscUpper = "(?:" + rsUpper + "|" + rsMisc + ")", rsOptContrLower = "(?:" + rsApos + "(?:d|ll|m|re|s|t|ve))?", rsOptContrUpper = "(?:" + rsApos + "(?:D|LL|M|RE|S|T|VE))?", reOptMod = rsModifier + "?", rsOptVar = "[" + rsVarRange + "]?", rsOptJoin = "(?:" + rsZWJ + "(?:" + [rsNonAstral, rsRegional, rsSurrPair].join("|") + ")" + rsOptVar + reOptMod + ")*", rsOrdLower = "\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])", rsOrdUpper = "\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])", rsSeq = rsOptVar + reOptMod + rsOptJoin, rsEmoji = "(?:" + [rsDingbat, rsRegional, rsSurrPair].join("|") + ")" + rsSeq, rsSymbol = "(?:" + [rsNonAstral + rsCombo + "?", rsCombo, rsRegional, rsSurrPair, rsAstral].join("|") + ")";
+ var reApos = RegExp(rsApos, "g");
+ var reComboMark = RegExp(rsCombo, "g");
+ var reUnicode = RegExp(rsFitz + "(?=" + rsFitz + ")|" + rsSymbol + rsSeq, "g");
+ var reUnicodeWord = RegExp([
+ rsUpper + "?" + rsLower + "+" + rsOptContrLower + "(?=" + [rsBreak, rsUpper, "$"].join("|") + ")",
+ rsMiscUpper + "+" + rsOptContrUpper + "(?=" + [rsBreak, rsUpper + rsMiscLower, "$"].join("|") + ")",
+ rsUpper + "?" + rsMiscLower + "+" + rsOptContrLower,
+ rsUpper + "+" + rsOptContrUpper,
+ rsOrdUpper,
+ rsOrdLower,
+ rsDigits,
+ rsEmoji
+ ].join("|"), "g");
+ var reHasUnicode = RegExp("[" + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + "]");
+ var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;
+ var contextProps = [
+ "Array",
+ "Buffer",
+ "DataView",
+ "Date",
+ "Error",
+ "Float32Array",
+ "Float64Array",
+ "Function",
+ "Int8Array",
+ "Int16Array",
+ "Int32Array",
+ "Map",
+ "Math",
+ "Object",
+ "Promise",
+ "RegExp",
+ "Set",
+ "String",
+ "Symbol",
+ "TypeError",
+ "Uint8Array",
+ "Uint8ClampedArray",
+ "Uint16Array",
+ "Uint32Array",
+ "WeakMap",
+ "_",
+ "clearTimeout",
+ "isFinite",
+ "parseInt",
+ "setTimeout"
+ ];
+ var templateCounter = -1;
+ var typedArrayTags = {};
+ typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;
+ typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
+ var cloneableTags = {};
+ cloneableTags[argsTag] = cloneableTags[arrayTag] = cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = cloneableTags[boolTag] = cloneableTags[dateTag] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[mapTag] = cloneableTags[numberTag] = cloneableTags[objectTag] = cloneableTags[regexpTag] = cloneableTags[setTag] = cloneableTags[stringTag] = cloneableTags[symbolTag] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
+ cloneableTags[errorTag] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false;
+ var deburredLetters = {
+ // Latin-1 Supplement block.
+ "\xC0": "A",
+ "\xC1": "A",
+ "\xC2": "A",
+ "\xC3": "A",
+ "\xC4": "A",
+ "\xC5": "A",
+ "\xE0": "a",
+ "\xE1": "a",
+ "\xE2": "a",
+ "\xE3": "a",
+ "\xE4": "a",
+ "\xE5": "a",
+ "\xC7": "C",
+ "\xE7": "c",
+ "\xD0": "D",
+ "\xF0": "d",
+ "\xC8": "E",
+ "\xC9": "E",
+ "\xCA": "E",
+ "\xCB": "E",
+ "\xE8": "e",
+ "\xE9": "e",
+ "\xEA": "e",
+ "\xEB": "e",
+ "\xCC": "I",
+ "\xCD": "I",
+ "\xCE": "I",
+ "\xCF": "I",
+ "\xEC": "i",
+ "\xED": "i",
+ "\xEE": "i",
+ "\xEF": "i",
+ "\xD1": "N",
+ "\xF1": "n",
+ "\xD2": "O",
+ "\xD3": "O",
+ "\xD4": "O",
+ "\xD5": "O",
+ "\xD6": "O",
+ "\xD8": "O",
+ "\xF2": "o",
+ "\xF3": "o",
+ "\xF4": "o",
+ "\xF5": "o",
+ "\xF6": "o",
+ "\xF8": "o",
+ "\xD9": "U",
+ "\xDA": "U",
+ "\xDB": "U",
+ "\xDC": "U",
+ "\xF9": "u",
+ "\xFA": "u",
+ "\xFB": "u",
+ "\xFC": "u",
+ "\xDD": "Y",
+ "\xFD": "y",
+ "\xFF": "y",
+ "\xC6": "Ae",
+ "\xE6": "ae",
+ "\xDE": "Th",
+ "\xFE": "th",
+ "\xDF": "ss",
+ // Latin Extended-A block.
+ "\u0100": "A",
+ "\u0102": "A",
+ "\u0104": "A",
+ "\u0101": "a",
+ "\u0103": "a",
+ "\u0105": "a",
+ "\u0106": "C",
+ "\u0108": "C",
+ "\u010A": "C",
+ "\u010C": "C",
+ "\u0107": "c",
+ "\u0109": "c",
+ "\u010B": "c",
+ "\u010D": "c",
+ "\u010E": "D",
+ "\u0110": "D",
+ "\u010F": "d",
+ "\u0111": "d",
+ "\u0112": "E",
+ "\u0114": "E",
+ "\u0116": "E",
+ "\u0118": "E",
+ "\u011A": "E",
+ "\u0113": "e",
+ "\u0115": "e",
+ "\u0117": "e",
+ "\u0119": "e",
+ "\u011B": "e",
+ "\u011C": "G",
+ "\u011E": "G",
+ "\u0120": "G",
+ "\u0122": "G",
+ "\u011D": "g",
+ "\u011F": "g",
+ "\u0121": "g",
+ "\u0123": "g",
+ "\u0124": "H",
+ "\u0126": "H",
+ "\u0125": "h",
+ "\u0127": "h",
+ "\u0128": "I",
+ "\u012A": "I",
+ "\u012C": "I",
+ "\u012E": "I",
+ "\u0130": "I",
+ "\u0129": "i",
+ "\u012B": "i",
+ "\u012D": "i",
+ "\u012F": "i",
+ "\u0131": "i",
+ "\u0134": "J",
+ "\u0135": "j",
+ "\u0136": "K",
+ "\u0137": "k",
+ "\u0138": "k",
+ "\u0139": "L",
+ "\u013B": "L",
+ "\u013D": "L",
+ "\u013F": "L",
+ "\u0141": "L",
+ "\u013A": "l",
+ "\u013C": "l",
+ "\u013E": "l",
+ "\u0140": "l",
+ "\u0142": "l",
+ "\u0143": "N",
+ "\u0145": "N",
+ "\u0147": "N",
+ "\u014A": "N",
+ "\u0144": "n",
+ "\u0146": "n",
+ "\u0148": "n",
+ "\u014B": "n",
+ "\u014C": "O",
+ "\u014E": "O",
+ "\u0150": "O",
+ "\u014D": "o",
+ "\u014F": "o",
+ "\u0151": "o",
+ "\u0154": "R",
+ "\u0156": "R",
+ "\u0158": "R",
+ "\u0155": "r",
+ "\u0157": "r",
+ "\u0159": "r",
+ "\u015A": "S",
+ "\u015C": "S",
+ "\u015E": "S",
+ "\u0160": "S",
+ "\u015B": "s",
+ "\u015D": "s",
+ "\u015F": "s",
+ "\u0161": "s",
+ "\u0162": "T",
+ "\u0164": "T",
+ "\u0166": "T",
+ "\u0163": "t",
+ "\u0165": "t",
+ "\u0167": "t",
+ "\u0168": "U",
+ "\u016A": "U",
+ "\u016C": "U",
+ "\u016E": "U",
+ "\u0170": "U",
+ "\u0172": "U",
+ "\u0169": "u",
+ "\u016B": "u",
+ "\u016D": "u",
+ "\u016F": "u",
+ "\u0171": "u",
+ "\u0173": "u",
+ "\u0174": "W",
+ "\u0175": "w",
+ "\u0176": "Y",
+ "\u0177": "y",
+ "\u0178": "Y",
+ "\u0179": "Z",
+ "\u017B": "Z",
+ "\u017D": "Z",
+ "\u017A": "z",
+ "\u017C": "z",
+ "\u017E": "z",
+ "\u0132": "IJ",
+ "\u0133": "ij",
+ "\u0152": "Oe",
+ "\u0153": "oe",
+ "\u0149": "'n",
+ "\u017F": "s"
+ };
+ var htmlEscapes = {
+ "&": "&",
+ "<": "<",
+ ">": ">",
+ '"': """,
+ "'": "'"
+ };
+ var htmlUnescapes = {
+ "&": "&",
+ "<": "<",
+ ">": ">",
+ """: '"',
+ "'": "'"
+ };
+ var stringEscapes = {
+ "\\": "\\",
+ "'": "'",
+ "\n": "n",
+ "\r": "r",
+ "\u2028": "u2028",
+ "\u2029": "u2029"
+ };
+ var freeParseFloat = parseFloat, freeParseInt = parseInt;
+ var freeGlobal = typeof global == "object" && global && global.Object === Object && global;
+ var freeSelf = typeof self == "object" && self && self.Object === Object && self;
+ var root = freeGlobal || freeSelf || Function("return this")();
+ var freeExports = typeof exports2 == "object" && exports2 && !exports2.nodeType && exports2;
+ var freeModule = freeExports && typeof module2 == "object" && module2 && !module2.nodeType && module2;
+ var moduleExports = freeModule && freeModule.exports === freeExports;
+ var freeProcess = moduleExports && freeGlobal.process;
+ var nodeUtil = function() {
+ try {
+ var types = freeModule && freeModule.require && freeModule.require("util").types;
+ if (types) {
+ return types;
+ }
+ return freeProcess && freeProcess.binding && freeProcess.binding("util");
+ } catch (e) {
+ }
+ }();
+ var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, nodeIsDate = nodeUtil && nodeUtil.isDate, nodeIsMap = nodeUtil && nodeUtil.isMap, nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, nodeIsSet = nodeUtil && nodeUtil.isSet, nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
+ function apply(func, thisArg, args) {
+ switch (args.length) {
+ case 0:
+ return func.call(thisArg);
+ case 1:
+ return func.call(thisArg, args[0]);
+ case 2:
+ return func.call(thisArg, args[0], args[1]);
+ case 3:
+ return func.call(thisArg, args[0], args[1], args[2]);
+ }
+ return func.apply(thisArg, args);
+ }
+ function arrayAggregator(array, setter, iteratee, accumulator) {
+ var index = -1, length = array == null ? 0 : array.length;
+ while (++index < length) {
+ var value = array[index];
+ setter(accumulator, value, iteratee(value), array);
+ }
+ return accumulator;
+ }
+ function arrayEach(array, iteratee) {
+ var index = -1, length = array == null ? 0 : array.length;
+ while (++index < length) {
+ if (iteratee(array[index], index, array) === false) {
+ break;
+ }
+ }
+ return array;
+ }
+ function arrayEachRight(array, iteratee) {
+ var length = array == null ? 0 : array.length;
+ while (length--) {
+ if (iteratee(array[length], length, array) === false) {
+ break;
+ }
+ }
+ return array;
+ }
+ function arrayEvery(array, predicate) {
+ var index = -1, length = array == null ? 0 : array.length;
+ while (++index < length) {
+ if (!predicate(array[index], index, array)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ function arrayFilter(array, predicate) {
+ var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = [];
+ while (++index < length) {
+ var value = array[index];
+ if (predicate(value, index, array)) {
+ result[resIndex++] = value;
+ }
+ }
+ return result;
+ }
+ function arrayIncludes(array, value) {
+ var length = array == null ? 0 : array.length;
+ return !!length && baseIndexOf(array, value, 0) > -1;
+ }
+ function arrayIncludesWith(array, value, comparator) {
+ var index = -1, length = array == null ? 0 : array.length;
+ while (++index < length) {
+ if (comparator(value, array[index])) {
+ return true;
+ }
+ }
+ return false;
+ }
+ function arrayMap(array, iteratee) {
+ var index = -1, length = array == null ? 0 : array.length, result = Array(length);
+ while (++index < length) {
+ result[index] = iteratee(array[index], index, array);
+ }
+ return result;
+ }
+ function arrayPush(array, values) {
+ var index = -1, length = values.length, offset = array.length;
+ while (++index < length) {
+ array[offset + index] = values[index];
+ }
+ return array;
+ }
+ function arrayReduce(array, iteratee, accumulator, initAccum) {
+ var index = -1, length = array == null ? 0 : array.length;
+ if (initAccum && length) {
+ accumulator = array[++index];
+ }
+ while (++index < length) {
+ accumulator = iteratee(accumulator, array[index], index, array);
+ }
+ return accumulator;
+ }
+ function arrayReduceRight(array, iteratee, accumulator, initAccum) {
+ var length = array == null ? 0 : array.length;
+ if (initAccum && length) {
+ accumulator = array[--length];
+ }
+ while (length--) {
+ accumulator = iteratee(accumulator, array[length], length, array);
+ }
+ return accumulator;
+ }
+ function arraySome(array, predicate) {
+ var index = -1, length = array == null ? 0 : array.length;
+ while (++index < length) {
+ if (predicate(array[index], index, array)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ var asciiSize = baseProperty("length");
+ function asciiToArray(string) {
+ return string.split("");
+ }
+ function asciiWords(string) {
+ return string.match(reAsciiWord) || [];
+ }
+ function baseFindKey(collection, predicate, eachFunc) {
+ var result;
+ eachFunc(collection, function(value, key, collection2) {
+ if (predicate(value, key, collection2)) {
+ result = key;
+ return false;
+ }
+ });
+ return result;
+ }
+ function baseFindIndex(array, predicate, fromIndex, fromRight) {
+ var length = array.length, index = fromIndex + (fromRight ? 1 : -1);
+ while (fromRight ? index-- : ++index < length) {
+ if (predicate(array[index], index, array)) {
+ return index;
+ }
+ }
+ return -1;
+ }
+ function baseIndexOf(array, value, fromIndex) {
+ return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex);
+ }
+ function baseIndexOfWith(array, value, fromIndex, comparator) {
+ var index = fromIndex - 1, length = array.length;
+ while (++index < length) {
+ if (comparator(array[index], value)) {
+ return index;
+ }
+ }
+ return -1;
+ }
+ function baseIsNaN(value) {
+ return value !== value;
+ }
+ function baseMean(array, iteratee) {
+ var length = array == null ? 0 : array.length;
+ return length ? baseSum(array, iteratee) / length : NAN;
+ }
+ function baseProperty(key) {
+ return function(object) {
+ return object == null ? undefined2 : object[key];
+ };
+ }
+ function basePropertyOf(object) {
+ return function(key) {
+ return object == null ? undefined2 : object[key];
+ };
+ }
+ function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
+ eachFunc(collection, function(value, index, collection2) {
+ accumulator = initAccum ? (initAccum = false, value) : iteratee(accumulator, value, index, collection2);
+ });
+ return accumulator;
+ }
+ function baseSortBy(array, comparer) {
+ var length = array.length;
+ array.sort(comparer);
+ while (length--) {
+ array[length] = array[length].value;
+ }
+ return array;
+ }
+ function baseSum(array, iteratee) {
+ var result, index = -1, length = array.length;
+ while (++index < length) {
+ var current = iteratee(array[index]);
+ if (current !== undefined2) {
+ result = result === undefined2 ? current : result + current;
+ }
+ }
+ return result;
+ }
+ function baseTimes(n, iteratee) {
+ var index = -1, result = Array(n);
+ while (++index < n) {
+ result[index] = iteratee(index);
+ }
+ return result;
+ }
+ function baseToPairs(object, props) {
+ return arrayMap(props, function(key) {
+ return [key, object[key]];
+ });
+ }
+ function baseTrim(string) {
+ return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, "") : string;
+ }
+ function baseUnary(func) {
+ return function(value) {
+ return func(value);
+ };
+ }
+ function baseValues(object, props) {
+ return arrayMap(props, function(key) {
+ return object[key];
+ });
+ }
+ function cacheHas(cache, key) {
+ return cache.has(key);
+ }
+ function charsStartIndex(strSymbols, chrSymbols) {
+ var index = -1, length = strSymbols.length;
+ while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {
+ }
+ return index;
+ }
+ function charsEndIndex(strSymbols, chrSymbols) {
+ var index = strSymbols.length;
+ while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {
+ }
+ return index;
+ }
+ function countHolders(array, placeholder) {
+ var length = array.length, result = 0;
+ while (length--) {
+ if (array[length] === placeholder) {
+ ++result;
+ }
+ }
+ return result;
+ }
+ var deburrLetter = basePropertyOf(deburredLetters);
+ var escapeHtmlChar = basePropertyOf(htmlEscapes);
+ function escapeStringChar(chr) {
+ return "\\" + stringEscapes[chr];
+ }
+ function getValue(object, key) {
+ return object == null ? undefined2 : object[key];
+ }
+ function hasUnicode(string) {
+ return reHasUnicode.test(string);
+ }
+ function hasUnicodeWord(string) {
+ return reHasUnicodeWord.test(string);
+ }
+ function iteratorToArray(iterator) {
+ var data, result = [];
+ while (!(data = iterator.next()).done) {
+ result.push(data.value);
+ }
+ return result;
+ }
+ function mapToArray(map) {
+ var index = -1, result = Array(map.size);
+ map.forEach(function(value, key) {
+ result[++index] = [key, value];
+ });
+ return result;
+ }
+ function overArg(func, transform) {
+ return function(arg) {
+ return func(transform(arg));
+ };
+ }
+ function replaceHolders(array, placeholder) {
+ var index = -1, length = array.length, resIndex = 0, result = [];
+ while (++index < length) {
+ var value = array[index];
+ if (value === placeholder || value === PLACEHOLDER) {
+ array[index] = PLACEHOLDER;
+ result[resIndex++] = index;
+ }
+ }
+ return result;
+ }
+ function setToArray(set) {
+ var index = -1, result = Array(set.size);
+ set.forEach(function(value) {
+ result[++index] = value;
+ });
+ return result;
+ }
+ function setToPairs(set) {
+ var index = -1, result = Array(set.size);
+ set.forEach(function(value) {
+ result[++index] = [value, value];
+ });
+ return result;
+ }
+ function strictIndexOf(array, value, fromIndex) {
+ var index = fromIndex - 1, length = array.length;
+ while (++index < length) {
+ if (array[index] === value) {
+ return index;
+ }
+ }
+ return -1;
+ }
+ function strictLastIndexOf(array, value, fromIndex) {
+ var index = fromIndex + 1;
+ while (index--) {
+ if (array[index] === value) {
+ return index;
+ }
+ }
+ return index;
+ }
+ function stringSize(string) {
+ return hasUnicode(string) ? unicodeSize(string) : asciiSize(string);
+ }
+ function stringToArray(string) {
+ return hasUnicode(string) ? unicodeToArray(string) : asciiToArray(string);
+ }
+ function trimmedEndIndex(string) {
+ var index = string.length;
+ while (index-- && reWhitespace.test(string.charAt(index))) {
+ }
+ return index;
+ }
+ var unescapeHtmlChar = basePropertyOf(htmlUnescapes);
+ function unicodeSize(string) {
+ var result = reUnicode.lastIndex = 0;
+ while (reUnicode.test(string)) {
+ ++result;
+ }
+ return result;
+ }
+ function unicodeToArray(string) {
+ return string.match(reUnicode) || [];
+ }
+ function unicodeWords(string) {
+ return string.match(reUnicodeWord) || [];
+ }
+ var runInContext = function runInContext2(context5) {
+ context5 = context5 == null ? root : _.defaults(root.Object(), context5, _.pick(root, contextProps));
+ var Array2 = context5.Array, Date2 = context5.Date, Error2 = context5.Error, Function2 = context5.Function, Math2 = context5.Math, Object2 = context5.Object, RegExp2 = context5.RegExp, String2 = context5.String, TypeError2 = context5.TypeError;
+ var arrayProto = Array2.prototype, funcProto = Function2.prototype, objectProto = Object2.prototype;
+ var coreJsData = context5["__core-js_shared__"];
+ var funcToString = funcProto.toString;
+ var hasOwnProperty = objectProto.hasOwnProperty;
+ var idCounter = 0;
+ var maskSrcKey = function() {
+ var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || "");
+ return uid ? "Symbol(src)_1." + uid : "";
+ }();
+ var nativeObjectToString = objectProto.toString;
+ var objectCtorString = funcToString.call(Object2);
+ var oldDash = root._;
+ var reIsNative = RegExp2(
+ "^" + funcToString.call(hasOwnProperty).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
+ );
+ var Buffer2 = moduleExports ? context5.Buffer : undefined2, Symbol2 = context5.Symbol, Uint8Array2 = context5.Uint8Array, allocUnsafe = Buffer2 ? Buffer2.allocUnsafe : undefined2, getPrototype = overArg(Object2.getPrototypeOf, Object2), objectCreate = Object2.create, propertyIsEnumerable = objectProto.propertyIsEnumerable, splice = arrayProto.splice, spreadableSymbol = Symbol2 ? Symbol2.isConcatSpreadable : undefined2, symIterator = Symbol2 ? Symbol2.iterator : undefined2, symToStringTag = Symbol2 ? Symbol2.toStringTag : undefined2;
+ var defineProperty = function() {
+ try {
+ var func = getNative(Object2, "defineProperty");
+ func({}, "", {});
+ return func;
+ } catch (e) {
+ }
+ }();
+ var ctxClearTimeout = context5.clearTimeout !== root.clearTimeout && context5.clearTimeout, ctxNow = Date2 && Date2.now !== root.Date.now && Date2.now, ctxSetTimeout = context5.setTimeout !== root.setTimeout && context5.setTimeout;
+ var nativeCeil = Math2.ceil, nativeFloor = Math2.floor, nativeGetSymbols = Object2.getOwnPropertySymbols, nativeIsBuffer = Buffer2 ? Buffer2.isBuffer : undefined2, nativeIsFinite = context5.isFinite, nativeJoin = arrayProto.join, nativeKeys = overArg(Object2.keys, Object2), nativeMax = Math2.max, nativeMin = Math2.min, nativeNow = Date2.now, nativeParseInt = context5.parseInt, nativeRandom = Math2.random, nativeReverse = arrayProto.reverse;
+ var DataView = getNative(context5, "DataView"), Map2 = getNative(context5, "Map"), Promise2 = getNative(context5, "Promise"), Set2 = getNative(context5, "Set"), WeakMap = getNative(context5, "WeakMap"), nativeCreate = getNative(Object2, "create");
+ var metaMap = WeakMap && new WeakMap();
+ var realNames = {};
+ var dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map2), promiseCtorString = toSource(Promise2), setCtorString = toSource(Set2), weakMapCtorString = toSource(WeakMap);
+ var symbolProto = Symbol2 ? Symbol2.prototype : undefined2, symbolValueOf = symbolProto ? symbolProto.valueOf : undefined2, symbolToString = symbolProto ? symbolProto.toString : undefined2;
+ function lodash(value) {
+ if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {
+ if (value instanceof LodashWrapper) {
+ return value;
+ }
+ if (hasOwnProperty.call(value, "__wrapped__")) {
+ return wrapperClone(value);
+ }
+ }
+ return new LodashWrapper(value);
+ }
+ var baseCreate = /* @__PURE__ */ function() {
+ function object() {
+ }
+ return function(proto) {
+ if (!isObject(proto)) {
+ return {};
+ }
+ if (objectCreate) {
+ return objectCreate(proto);
+ }
+ object.prototype = proto;
+ var result2 = new object();
+ object.prototype = undefined2;
+ return result2;
+ };
+ }();
+ function baseLodash() {
+ }
+ function LodashWrapper(value, chainAll) {
+ this.__wrapped__ = value;
+ this.__actions__ = [];
+ this.__chain__ = !!chainAll;
+ this.__index__ = 0;
+ this.__values__ = undefined2;
+ }
+ lodash.templateSettings = {
+ /**
+ * Used to detect `data` property values to be HTML-escaped.
+ *
+ * @memberOf _.templateSettings
+ * @type {RegExp}
+ */
+ "escape": reEscape,
+ /**
+ * Used to detect code to be evaluated.
+ *
+ * @memberOf _.templateSettings
+ * @type {RegExp}
+ */
+ "evaluate": reEvaluate,
+ /**
+ * Used to detect `data` property values to inject.
+ *
+ * @memberOf _.templateSettings
+ * @type {RegExp}
+ */
+ "interpolate": reInterpolate,
+ /**
+ * Used to reference the data object in the template text.
+ *
+ * @memberOf _.templateSettings
+ * @type {string}
+ */
+ "variable": "",
+ /**
+ * Used to import variables into the compiled template.
+ *
+ * @memberOf _.templateSettings
+ * @type {Object}
+ */
+ "imports": {
+ /**
+ * A reference to the `lodash` function.
+ *
+ * @memberOf _.templateSettings.imports
+ * @type {Function}
+ */
+ "_": lodash
+ }
+ };
+ lodash.prototype = baseLodash.prototype;
+ lodash.prototype.constructor = lodash;
+ LodashWrapper.prototype = baseCreate(baseLodash.prototype);
+ LodashWrapper.prototype.constructor = LodashWrapper;
+ function LazyWrapper(value) {
+ this.__wrapped__ = value;
+ this.__actions__ = [];
+ this.__dir__ = 1;
+ this.__filtered__ = false;
+ this.__iteratees__ = [];
+ this.__takeCount__ = MAX_ARRAY_LENGTH;
+ this.__views__ = [];
+ }
+ function lazyClone() {
+ var result2 = new LazyWrapper(this.__wrapped__);
+ result2.__actions__ = copyArray(this.__actions__);
+ result2.__dir__ = this.__dir__;
+ result2.__filtered__ = this.__filtered__;
+ result2.__iteratees__ = copyArray(this.__iteratees__);
+ result2.__takeCount__ = this.__takeCount__;
+ result2.__views__ = copyArray(this.__views__);
+ return result2;
+ }
+ function lazyReverse() {
+ if (this.__filtered__) {
+ var result2 = new LazyWrapper(this);
+ result2.__dir__ = -1;
+ result2.__filtered__ = true;
+ } else {
+ result2 = this.clone();
+ result2.__dir__ *= -1;
+ }
+ return result2;
+ }
+ function lazyValue() {
+ var array = this.__wrapped__.value(), dir = this.__dir__, isArr = isArray(array), isRight = dir < 0, arrLength = isArr ? array.length : 0, view = getView(0, arrLength, this.__views__), start = view.start, end = view.end, length = end - start, index = isRight ? end : start - 1, iteratees = this.__iteratees__, iterLength = iteratees.length, resIndex = 0, takeCount = nativeMin(length, this.__takeCount__);
+ if (!isArr || !isRight && arrLength == length && takeCount == length) {
+ return baseWrapperValue(array, this.__actions__);
+ }
+ var result2 = [];
+ outer:
+ while (length-- && resIndex < takeCount) {
+ index += dir;
+ var iterIndex = -1, value = array[index];
+ while (++iterIndex < iterLength) {
+ var data = iteratees[iterIndex], iteratee2 = data.iteratee, type = data.type, computed = iteratee2(value);
+ if (type == LAZY_MAP_FLAG) {
+ value = computed;
+ } else if (!computed) {
+ if (type == LAZY_FILTER_FLAG) {
+ continue outer;
+ } else {
+ break outer;
+ }
+ }
+ }
+ result2[resIndex++] = value;
+ }
+ return result2;
+ }
+ LazyWrapper.prototype = baseCreate(baseLodash.prototype);
+ LazyWrapper.prototype.constructor = LazyWrapper;
+ function Hash(entries) {
+ var index = -1, length = entries == null ? 0 : entries.length;
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+ }
+ function hashClear() {
+ this.__data__ = nativeCreate ? nativeCreate(null) : {};
+ this.size = 0;
+ }
+ function hashDelete(key) {
+ var result2 = this.has(key) && delete this.__data__[key];
+ this.size -= result2 ? 1 : 0;
+ return result2;
+ }
+ function hashGet(key) {
+ var data = this.__data__;
+ if (nativeCreate) {
+ var result2 = data[key];
+ return result2 === HASH_UNDEFINED ? undefined2 : result2;
+ }
+ return hasOwnProperty.call(data, key) ? data[key] : undefined2;
+ }
+ function hashHas(key) {
+ var data = this.__data__;
+ return nativeCreate ? data[key] !== undefined2 : hasOwnProperty.call(data, key);
+ }
+ function hashSet(key, value) {
+ var data = this.__data__;
+ this.size += this.has(key) ? 0 : 1;
+ data[key] = nativeCreate && value === undefined2 ? HASH_UNDEFINED : value;
+ return this;
+ }
+ Hash.prototype.clear = hashClear;
+ Hash.prototype["delete"] = hashDelete;
+ Hash.prototype.get = hashGet;
+ Hash.prototype.has = hashHas;
+ Hash.prototype.set = hashSet;
+ function ListCache(entries) {
+ var index = -1, length = entries == null ? 0 : entries.length;
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+ }
+ function listCacheClear() {
+ this.__data__ = [];
+ this.size = 0;
+ }
+ function listCacheDelete(key) {
+ var data = this.__data__, index = assocIndexOf(data, key);
+ if (index < 0) {
+ return false;
+ }
+ var lastIndex = data.length - 1;
+ if (index == lastIndex) {
+ data.pop();
+ } else {
+ splice.call(data, index, 1);
+ }
+ --this.size;
+ return true;
+ }
+ function listCacheGet(key) {
+ var data = this.__data__, index = assocIndexOf(data, key);
+ return index < 0 ? undefined2 : data[index][1];
+ }
+ function listCacheHas(key) {
+ return assocIndexOf(this.__data__, key) > -1;
+ }
+ function listCacheSet(key, value) {
+ var data = this.__data__, index = assocIndexOf(data, key);
+ if (index < 0) {
+ ++this.size;
+ data.push([key, value]);
+ } else {
+ data[index][1] = value;
+ }
+ return this;
+ }
+ ListCache.prototype.clear = listCacheClear;
+ ListCache.prototype["delete"] = listCacheDelete;
+ ListCache.prototype.get = listCacheGet;
+ ListCache.prototype.has = listCacheHas;
+ ListCache.prototype.set = listCacheSet;
+ function MapCache(entries) {
+ var index = -1, length = entries == null ? 0 : entries.length;
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+ }
+ function mapCacheClear() {
+ this.size = 0;
+ this.__data__ = {
+ "hash": new Hash(),
+ "map": new (Map2 || ListCache)(),
+ "string": new Hash()
+ };
+ }
+ function mapCacheDelete(key) {
+ var result2 = getMapData(this, key)["delete"](key);
+ this.size -= result2 ? 1 : 0;
+ return result2;
+ }
+ function mapCacheGet(key) {
+ return getMapData(this, key).get(key);
+ }
+ function mapCacheHas(key) {
+ return getMapData(this, key).has(key);
+ }
+ function mapCacheSet(key, value) {
+ var data = getMapData(this, key), size2 = data.size;
+ data.set(key, value);
+ this.size += data.size == size2 ? 0 : 1;
+ return this;
+ }
+ MapCache.prototype.clear = mapCacheClear;
+ MapCache.prototype["delete"] = mapCacheDelete;
+ MapCache.prototype.get = mapCacheGet;
+ MapCache.prototype.has = mapCacheHas;
+ MapCache.prototype.set = mapCacheSet;
+ function SetCache(values2) {
+ var index = -1, length = values2 == null ? 0 : values2.length;
+ this.__data__ = new MapCache();
+ while (++index < length) {
+ this.add(values2[index]);
+ }
+ }
+ function setCacheAdd(value) {
+ this.__data__.set(value, HASH_UNDEFINED);
+ return this;
+ }
+ function setCacheHas(value) {
+ return this.__data__.has(value);
+ }
+ SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
+ SetCache.prototype.has = setCacheHas;
+ function Stack(entries) {
+ var data = this.__data__ = new ListCache(entries);
+ this.size = data.size;
+ }
+ function stackClear() {
+ this.__data__ = new ListCache();
+ this.size = 0;
+ }
+ function stackDelete(key) {
+ var data = this.__data__, result2 = data["delete"](key);
+ this.size = data.size;
+ return result2;
+ }
+ function stackGet(key) {
+ return this.__data__.get(key);
+ }
+ function stackHas(key) {
+ return this.__data__.has(key);
+ }
+ function stackSet(key, value) {
+ var data = this.__data__;
+ if (data instanceof ListCache) {
+ var pairs = data.__data__;
+ if (!Map2 || pairs.length < LARGE_ARRAY_SIZE - 1) {
+ pairs.push([key, value]);
+ this.size = ++data.size;
+ return this;
+ }
+ data = this.__data__ = new MapCache(pairs);
+ }
+ data.set(key, value);
+ this.size = data.size;
+ return this;
+ }
+ Stack.prototype.clear = stackClear;
+ Stack.prototype["delete"] = stackDelete;
+ Stack.prototype.get = stackGet;
+ Stack.prototype.has = stackHas;
+ Stack.prototype.set = stackSet;
+ function arrayLikeKeys(value, inherited) {
+ var isArr = isArray(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result2 = skipIndexes ? baseTimes(value.length, String2) : [], length = result2.length;
+ for (var key in value) {
+ if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.
+ (key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers.
+ isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays.
+ isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties.
+ isIndex(key, length)))) {
+ result2.push(key);
+ }
+ }
+ return result2;
+ }
+ function arraySample(array) {
+ var length = array.length;
+ return length ? array[baseRandom(0, length - 1)] : undefined2;
+ }
+ function arraySampleSize(array, n) {
+ return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));
+ }
+ function arrayShuffle(array) {
+ return shuffleSelf(copyArray(array));
+ }
+ function assignMergeValue(object, key, value) {
+ if (value !== undefined2 && !eq(object[key], value) || value === undefined2 && !(key in object)) {
+ baseAssignValue(object, key, value);
+ }
+ }
+ function assignValue(object, key, value) {
+ var objValue = object[key];
+ if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || value === undefined2 && !(key in object)) {
+ baseAssignValue(object, key, value);
+ }
+ }
+ function assocIndexOf(array, key) {
+ var length = array.length;
+ while (length--) {
+ if (eq(array[length][0], key)) {
+ return length;
+ }
+ }
+ return -1;
+ }
+ function baseAggregator(collection, setter, iteratee2, accumulator) {
+ baseEach(collection, function(value, key, collection2) {
+ setter(accumulator, value, iteratee2(value), collection2);
+ });
+ return accumulator;
+ }
+ function baseAssign(object, source) {
+ return object && copyObject(source, keys(source), object);
+ }
+ function baseAssignIn(object, source) {
+ return object && copyObject(source, keysIn(source), object);
+ }
+ function baseAssignValue(object, key, value) {
+ if (key == "__proto__" && defineProperty) {
+ defineProperty(object, key, {
+ "configurable": true,
+ "enumerable": true,
+ "value": value,
+ "writable": true
+ });
+ } else {
+ object[key] = value;
+ }
+ }
+ function baseAt(object, paths) {
+ var index = -1, length = paths.length, result2 = Array2(length), skip = object == null;
+ while (++index < length) {
+ result2[index] = skip ? undefined2 : get(object, paths[index]);
+ }
+ return result2;
+ }
+ function baseClamp(number, lower, upper) {
+ if (number === number) {
+ if (upper !== undefined2) {
+ number = number <= upper ? number : upper;
+ }
+ if (lower !== undefined2) {
+ number = number >= lower ? number : lower;
+ }
+ }
+ return number;
+ }
+ function baseClone(value, bitmask, customizer, key, object, stack) {
+ var result2, isDeep = bitmask & CLONE_DEEP_FLAG, isFlat = bitmask & CLONE_FLAT_FLAG, isFull = bitmask & CLONE_SYMBOLS_FLAG;
+ if (customizer) {
+ result2 = object ? customizer(value, key, object, stack) : customizer(value);
+ }
+ if (result2 !== undefined2) {
+ return result2;
+ }
+ if (!isObject(value)) {
+ return value;
+ }
+ var isArr = isArray(value);
+ if (isArr) {
+ result2 = initCloneArray(value);
+ if (!isDeep) {
+ return copyArray(value, result2);
+ }
+ } else {
+ var tag = getTag(value), isFunc = tag == funcTag || tag == genTag;
+ if (isBuffer(value)) {
+ return cloneBuffer(value, isDeep);
+ }
+ if (tag == objectTag || tag == argsTag || isFunc && !object) {
+ result2 = isFlat || isFunc ? {} : initCloneObject(value);
+ if (!isDeep) {
+ return isFlat ? copySymbolsIn(value, baseAssignIn(result2, value)) : copySymbols(value, baseAssign(result2, value));
+ }
+ } else {
+ if (!cloneableTags[tag]) {
+ return object ? value : {};
+ }
+ result2 = initCloneByTag(value, tag, isDeep);
+ }
+ }
+ stack || (stack = new Stack());
+ var stacked = stack.get(value);
+ if (stacked) {
+ return stacked;
+ }
+ stack.set(value, result2);
+ if (isSet(value)) {
+ value.forEach(function(subValue) {
+ result2.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
+ });
+ } else if (isMap(value)) {
+ value.forEach(function(subValue, key2) {
+ result2.set(key2, baseClone(subValue, bitmask, customizer, key2, value, stack));
+ });
+ }
+ var keysFunc = isFull ? isFlat ? getAllKeysIn : getAllKeys : isFlat ? keysIn : keys;
+ var props = isArr ? undefined2 : keysFunc(value);
+ arrayEach(props || value, function(subValue, key2) {
+ if (props) {
+ key2 = subValue;
+ subValue = value[key2];
+ }
+ assignValue(result2, key2, baseClone(subValue, bitmask, customizer, key2, value, stack));
+ });
+ return result2;
+ }
+ function baseConforms(source) {
+ var props = keys(source);
+ return function(object) {
+ return baseConformsTo(object, source, props);
+ };
+ }
+ function baseConformsTo(object, source, props) {
+ var length = props.length;
+ if (object == null) {
+ return !length;
+ }
+ object = Object2(object);
+ while (length--) {
+ var key = props[length], predicate = source[key], value = object[key];
+ if (value === undefined2 && !(key in object) || !predicate(value)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ function baseDelay(func, wait, args) {
+ if (typeof func != "function") {
+ throw new TypeError2(FUNC_ERROR_TEXT);
+ }
+ return setTimeout2(function() {
+ func.apply(undefined2, args);
+ }, wait);
+ }
+ function baseDifference(array, values2, iteratee2, comparator) {
+ var index = -1, includes2 = arrayIncludes, isCommon = true, length = array.length, result2 = [], valuesLength = values2.length;
+ if (!length) {
+ return result2;
+ }
+ if (iteratee2) {
+ values2 = arrayMap(values2, baseUnary(iteratee2));
+ }
+ if (comparator) {
+ includes2 = arrayIncludesWith;
+ isCommon = false;
+ } else if (values2.length >= LARGE_ARRAY_SIZE) {
+ includes2 = cacheHas;
+ isCommon = false;
+ values2 = new SetCache(values2);
+ }
+ outer:
+ while (++index < length) {
+ var value = array[index], computed = iteratee2 == null ? value : iteratee2(value);
+ value = comparator || value !== 0 ? value : 0;
+ if (isCommon && computed === computed) {
+ var valuesIndex = valuesLength;
+ while (valuesIndex--) {
+ if (values2[valuesIndex] === computed) {
+ continue outer;
+ }
+ }
+ result2.push(value);
+ } else if (!includes2(values2, computed, comparator)) {
+ result2.push(value);
+ }
+ }
+ return result2;
+ }
+ var baseEach = createBaseEach(baseForOwn);
+ var baseEachRight = createBaseEach(baseForOwnRight, true);
+ function baseEvery(collection, predicate) {
+ var result2 = true;
+ baseEach(collection, function(value, index, collection2) {
+ result2 = !!predicate(value, index, collection2);
+ return result2;
+ });
+ return result2;
+ }
+ function baseExtremum(array, iteratee2, comparator) {
+ var index = -1, length = array.length;
+ while (++index < length) {
+ var value = array[index], current = iteratee2(value);
+ if (current != null && (computed === undefined2 ? current === current && !isSymbol(current) : comparator(current, computed))) {
+ var computed = current, result2 = value;
+ }
+ }
+ return result2;
+ }
+ function baseFill(array, value, start, end) {
+ var length = array.length;
+ start = toInteger(start);
+ if (start < 0) {
+ start = -start > length ? 0 : length + start;
+ }
+ end = end === undefined2 || end > length ? length : toInteger(end);
+ if (end < 0) {
+ end += length;
+ }
+ end = start > end ? 0 : toLength(end);
+ while (start < end) {
+ array[start++] = value;
+ }
+ return array;
+ }
+ function baseFilter(collection, predicate) {
+ var result2 = [];
+ baseEach(collection, function(value, index, collection2) {
+ if (predicate(value, index, collection2)) {
+ result2.push(value);
+ }
+ });
+ return result2;
+ }
+ function baseFlatten(array, depth, predicate, isStrict, result2) {
+ var index = -1, length = array.length;
+ predicate || (predicate = isFlattenable);
+ result2 || (result2 = []);
+ while (++index < length) {
+ var value = array[index];
+ if (depth > 0 && predicate(value)) {
+ if (depth > 1) {
+ baseFlatten(value, depth - 1, predicate, isStrict, result2);
+ } else {
+ arrayPush(result2, value);
+ }
+ } else if (!isStrict) {
+ result2[result2.length] = value;
+ }
+ }
+ return result2;
+ }
+ var baseFor = createBaseFor();
+ var baseForRight = createBaseFor(true);
+ function baseForOwn(object, iteratee2) {
+ return object && baseFor(object, iteratee2, keys);
+ }
+ function baseForOwnRight(object, iteratee2) {
+ return object && baseForRight(object, iteratee2, keys);
+ }
+ function baseFunctions(object, props) {
+ return arrayFilter(props, function(key) {
+ return isFunction(object[key]);
+ });
+ }
+ function baseGet(object, path5) {
+ path5 = castPath(path5, object);
+ var index = 0, length = path5.length;
+ while (object != null && index < length) {
+ object = object[toKey(path5[index++])];
+ }
+ return index && index == length ? object : undefined2;
+ }
+ function baseGetAllKeys(object, keysFunc, symbolsFunc) {
+ var result2 = keysFunc(object);
+ return isArray(object) ? result2 : arrayPush(result2, symbolsFunc(object));
+ }
+ function baseGetTag(value) {
+ if (value == null) {
+ return value === undefined2 ? undefinedTag : nullTag;
+ }
+ return symToStringTag && symToStringTag in Object2(value) ? getRawTag(value) : objectToString(value);
+ }
+ function baseGt(value, other) {
+ return value > other;
+ }
+ function baseHas(object, key) {
+ return object != null && hasOwnProperty.call(object, key);
+ }
+ function baseHasIn(object, key) {
+ return object != null && key in Object2(object);
+ }
+ function baseInRange(number, start, end) {
+ return number >= nativeMin(start, end) && number < nativeMax(start, end);
+ }
+ function baseIntersection(arrays, iteratee2, comparator) {
+ var includes2 = comparator ? arrayIncludesWith : arrayIncludes, length = arrays[0].length, othLength = arrays.length, othIndex = othLength, caches = Array2(othLength), maxLength = Infinity, result2 = [];
+ while (othIndex--) {
+ var array = arrays[othIndex];
+ if (othIndex && iteratee2) {
+ array = arrayMap(array, baseUnary(iteratee2));
+ }
+ maxLength = nativeMin(array.length, maxLength);
+ caches[othIndex] = !comparator && (iteratee2 || length >= 120 && array.length >= 120) ? new SetCache(othIndex && array) : undefined2;
+ }
+ array = arrays[0];
+ var index = -1, seen = caches[0];
+ outer:
+ while (++index < length && result2.length < maxLength) {
+ var value = array[index], computed = iteratee2 ? iteratee2(value) : value;
+ value = comparator || value !== 0 ? value : 0;
+ if (!(seen ? cacheHas(seen, computed) : includes2(result2, computed, comparator))) {
+ othIndex = othLength;
+ while (--othIndex) {
+ var cache = caches[othIndex];
+ if (!(cache ? cacheHas(cache, computed) : includes2(arrays[othIndex], computed, comparator))) {
+ continue outer;
+ }
+ }
+ if (seen) {
+ seen.push(computed);
+ }
+ result2.push(value);
+ }
+ }
+ return result2;
+ }
+ function baseInverter(object, setter, iteratee2, accumulator) {
+ baseForOwn(object, function(value, key, object2) {
+ setter(accumulator, iteratee2(value), key, object2);
+ });
+ return accumulator;
+ }
+ function baseInvoke(object, path5, args) {
+ path5 = castPath(path5, object);
+ object = parent(object, path5);
+ var func = object == null ? object : object[toKey(last(path5))];
+ return func == null ? undefined2 : apply(func, object, args);
+ }
+ function baseIsArguments(value) {
+ return isObjectLike(value) && baseGetTag(value) == argsTag;
+ }
+ function baseIsArrayBuffer(value) {
+ return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;
+ }
+ function baseIsDate(value) {
+ return isObjectLike(value) && baseGetTag(value) == dateTag;
+ }
+ function baseIsEqual(value, other, bitmask, customizer, stack) {
+ if (value === other) {
+ return true;
+ }
+ if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) {
+ return value !== value && other !== other;
+ }
+ return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
+ }
+ function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
+ var objIsArr = isArray(object), othIsArr = isArray(other), objTag = objIsArr ? arrayTag : getTag(object), othTag = othIsArr ? arrayTag : getTag(other);
+ objTag = objTag == argsTag ? objectTag : objTag;
+ othTag = othTag == argsTag ? objectTag : othTag;
+ var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag;
+ if (isSameTag && isBuffer(object)) {
+ if (!isBuffer(other)) {
+ return false;
+ }
+ objIsArr = true;
+ objIsObj = false;
+ }
+ if (isSameTag && !objIsObj) {
+ stack || (stack = new Stack());
+ return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
+ }
+ if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
+ var objIsWrapped = objIsObj && hasOwnProperty.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty.call(other, "__wrapped__");
+ if (objIsWrapped || othIsWrapped) {
+ var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other;
+ stack || (stack = new Stack());
+ return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
+ }
+ }
+ if (!isSameTag) {
+ return false;
+ }
+ stack || (stack = new Stack());
+ return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
+ }
+ function baseIsMap(value) {
+ return isObjectLike(value) && getTag(value) == mapTag;
+ }
+ function baseIsMatch(object, source, matchData, customizer) {
+ var index = matchData.length, length = index, noCustomizer = !customizer;
+ if (object == null) {
+ return !length;
+ }
+ object = Object2(object);
+ while (index--) {
+ var data = matchData[index];
+ if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) {
+ return false;
+ }
+ }
+ while (++index < length) {
+ data = matchData[index];
+ var key = data[0], objValue = object[key], srcValue = data[1];
+ if (noCustomizer && data[2]) {
+ if (objValue === undefined2 && !(key in object)) {
+ return false;
+ }
+ } else {
+ var stack = new Stack();
+ if (customizer) {
+ var result2 = customizer(objValue, srcValue, key, object, source, stack);
+ }
+ if (!(result2 === undefined2 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) : result2)) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+ function baseIsNative(value) {
+ if (!isObject(value) || isMasked(value)) {
+ return false;
+ }
+ var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
+ return pattern.test(toSource(value));
+ }
+ function baseIsRegExp(value) {
+ return isObjectLike(value) && baseGetTag(value) == regexpTag;
+ }
+ function baseIsSet(value) {
+ return isObjectLike(value) && getTag(value) == setTag;
+ }
+ function baseIsTypedArray(value) {
+ return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
+ }
+ function baseIteratee(value) {
+ if (typeof value == "function") {
+ return value;
+ }
+ if (value == null) {
+ return identity;
+ }
+ if (typeof value == "object") {
+ return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value);
+ }
+ return property(value);
+ }
+ function baseKeys(object) {
+ if (!isPrototype(object)) {
+ return nativeKeys(object);
+ }
+ var result2 = [];
+ for (var key in Object2(object)) {
+ if (hasOwnProperty.call(object, key) && key != "constructor") {
+ result2.push(key);
+ }
+ }
+ return result2;
+ }
+ function baseKeysIn(object) {
+ if (!isObject(object)) {
+ return nativeKeysIn(object);
+ }
+ var isProto = isPrototype(object), result2 = [];
+ for (var key in object) {
+ if (!(key == "constructor" && (isProto || !hasOwnProperty.call(object, key)))) {
+ result2.push(key);
+ }
+ }
+ return result2;
+ }
+ function baseLt(value, other) {
+ return value < other;
+ }
+ function baseMap(collection, iteratee2) {
+ var index = -1, result2 = isArrayLike(collection) ? Array2(collection.length) : [];
+ baseEach(collection, function(value, key, collection2) {
+ result2[++index] = iteratee2(value, key, collection2);
+ });
+ return result2;
+ }
+ function baseMatches(source) {
+ var matchData = getMatchData(source);
+ if (matchData.length == 1 && matchData[0][2]) {
+ return matchesStrictComparable(matchData[0][0], matchData[0][1]);
+ }
+ return function(object) {
+ return object === source || baseIsMatch(object, source, matchData);
+ };
+ }
+ function baseMatchesProperty(path5, srcValue) {
+ if (isKey(path5) && isStrictComparable(srcValue)) {
+ return matchesStrictComparable(toKey(path5), srcValue);
+ }
+ return function(object) {
+ var objValue = get(object, path5);
+ return objValue === undefined2 && objValue === srcValue ? hasIn(object, path5) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
+ };
+ }
+ function baseMerge(object, source, srcIndex, customizer, stack) {
+ if (object === source) {
+ return;
+ }
+ baseFor(source, function(srcValue, key) {
+ stack || (stack = new Stack());
+ if (isObject(srcValue)) {
+ baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
+ } else {
+ var newValue = customizer ? customizer(safeGet(object, key), srcValue, key + "", object, source, stack) : undefined2;
+ if (newValue === undefined2) {
+ newValue = srcValue;
+ }
+ assignMergeValue(object, key, newValue);
+ }
+ }, keysIn);
+ }
+ function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
+ var objValue = safeGet(object, key), srcValue = safeGet(source, key), stacked = stack.get(srcValue);
+ if (stacked) {
+ assignMergeValue(object, key, stacked);
+ return;
+ }
+ var newValue = customizer ? customizer(objValue, srcValue, key + "", object, source, stack) : undefined2;
+ var isCommon = newValue === undefined2;
+ if (isCommon) {
+ var isArr = isArray(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue);
+ newValue = srcValue;
+ if (isArr || isBuff || isTyped) {
+ if (isArray(objValue)) {
+ newValue = objValue;
+ } else if (isArrayLikeObject(objValue)) {
+ newValue = copyArray(objValue);
+ } else if (isBuff) {
+ isCommon = false;
+ newValue = cloneBuffer(srcValue, true);
+ } else if (isTyped) {
+ isCommon = false;
+ newValue = cloneTypedArray(srcValue, true);
+ } else {
+ newValue = [];
+ }
+ } else if (isPlainObject(srcValue) || isArguments(srcValue)) {
+ newValue = objValue;
+ if (isArguments(objValue)) {
+ newValue = toPlainObject(objValue);
+ } else if (!isObject(objValue) || isFunction(objValue)) {
+ newValue = initCloneObject(srcValue);
+ }
+ } else {
+ isCommon = false;
+ }
+ }
+ if (isCommon) {
+ stack.set(srcValue, newValue);
+ mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
+ stack["delete"](srcValue);
+ }
+ assignMergeValue(object, key, newValue);
+ }
+ function baseNth(array, n) {
+ var length = array.length;
+ if (!length) {
+ return;
+ }
+ n += n < 0 ? length : 0;
+ return isIndex(n, length) ? array[n] : undefined2;
+ }
+ function baseOrderBy(collection, iteratees, orders) {
+ if (iteratees.length) {
+ iteratees = arrayMap(iteratees, function(iteratee2) {
+ if (isArray(iteratee2)) {
+ return function(value) {
+ return baseGet(value, iteratee2.length === 1 ? iteratee2[0] : iteratee2);
+ };
+ }
+ return iteratee2;
+ });
+ } else {
+ iteratees = [identity];
+ }
+ var index = -1;
+ iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
+ var result2 = baseMap(collection, function(value, key, collection2) {
+ var criteria = arrayMap(iteratees, function(iteratee2) {
+ return iteratee2(value);
+ });
+ return { "criteria": criteria, "index": ++index, "value": value };
+ });
+ return baseSortBy(result2, function(object, other) {
+ return compareMultiple(object, other, orders);
+ });
+ }
+ function basePick(object, paths) {
+ return basePickBy(object, paths, function(value, path5) {
+ return hasIn(object, path5);
+ });
+ }
+ function basePickBy(object, paths, predicate) {
+ var index = -1, length = paths.length, result2 = {};
+ while (++index < length) {
+ var path5 = paths[index], value = baseGet(object, path5);
+ if (predicate(value, path5)) {
+ baseSet(result2, castPath(path5, object), value);
+ }
+ }
+ return result2;
+ }
+ function basePropertyDeep(path5) {
+ return function(object) {
+ return baseGet(object, path5);
+ };
+ }
+ function basePullAll(array, values2, iteratee2, comparator) {
+ var indexOf2 = comparator ? baseIndexOfWith : baseIndexOf, index = -1, length = values2.length, seen = array;
+ if (array === values2) {
+ values2 = copyArray(values2);
+ }
+ if (iteratee2) {
+ seen = arrayMap(array, baseUnary(iteratee2));
+ }
+ while (++index < length) {
+ var fromIndex = 0, value = values2[index], computed = iteratee2 ? iteratee2(value) : value;
+ while ((fromIndex = indexOf2(seen, computed, fromIndex, comparator)) > -1) {
+ if (seen !== array) {
+ splice.call(seen, fromIndex, 1);
+ }
+ splice.call(array, fromIndex, 1);
+ }
+ }
+ return array;
+ }
+ function basePullAt(array, indexes) {
+ var length = array ? indexes.length : 0, lastIndex = length - 1;
+ while (length--) {
+ var index = indexes[length];
+ if (length == lastIndex || index !== previous) {
+ var previous = index;
+ if (isIndex(index)) {
+ splice.call(array, index, 1);
+ } else {
+ baseUnset(array, index);
+ }
+ }
+ }
+ return array;
+ }
+ function baseRandom(lower, upper) {
+ return lower + nativeFloor(nativeRandom() * (upper - lower + 1));
+ }
+ function baseRange(start, end, step, fromRight) {
+ var index = -1, length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), result2 = Array2(length);
+ while (length--) {
+ result2[fromRight ? length : ++index] = start;
+ start += step;
+ }
+ return result2;
+ }
+ function baseRepeat(string, n) {
+ var result2 = "";
+ if (!string || n < 1 || n > MAX_SAFE_INTEGER) {
+ return result2;
+ }
+ do {
+ if (n % 2) {
+ result2 += string;
+ }
+ n = nativeFloor(n / 2);
+ if (n) {
+ string += string;
+ }
+ } while (n);
+ return result2;
+ }
+ function baseRest(func, start) {
+ return setToString(overRest(func, start, identity), func + "");
+ }
+ function baseSample(collection) {
+ return arraySample(values(collection));
+ }
+ function baseSampleSize(collection, n) {
+ var array = values(collection);
+ return shuffleSelf(array, baseClamp(n, 0, array.length));
+ }
+ function baseSet(object, path5, value, customizer) {
+ if (!isObject(object)) {
+ return object;
+ }
+ path5 = castPath(path5, object);
+ var index = -1, length = path5.length, lastIndex = length - 1, nested = object;
+ while (nested != null && ++index < length) {
+ var key = toKey(path5[index]), newValue = value;
+ if (key === "__proto__" || key === "constructor" || key === "prototype") {
+ return object;
+ }
+ if (index != lastIndex) {
+ var objValue = nested[key];
+ newValue = customizer ? customizer(objValue, key, nested) : undefined2;
+ if (newValue === undefined2) {
+ newValue = isObject(objValue) ? objValue : isIndex(path5[index + 1]) ? [] : {};
+ }
+ }
+ assignValue(nested, key, newValue);
+ nested = nested[key];
+ }
+ return object;
+ }
+ var baseSetData = !metaMap ? identity : function(func, data) {
+ metaMap.set(func, data);
+ return func;
+ };
+ var baseSetToString = !defineProperty ? identity : function(func, string) {
+ return defineProperty(func, "toString", {
+ "configurable": true,
+ "enumerable": false,
+ "value": constant(string),
+ "writable": true
+ });
+ };
+ function baseShuffle(collection) {
+ return shuffleSelf(values(collection));
+ }
+ function baseSlice(array, start, end) {
+ var index = -1, length = array.length;
+ if (start < 0) {
+ start = -start > length ? 0 : length + start;
+ }
+ end = end > length ? length : end;
+ if (end < 0) {
+ end += length;
+ }
+ length = start > end ? 0 : end - start >>> 0;
+ start >>>= 0;
+ var result2 = Array2(length);
+ while (++index < length) {
+ result2[index] = array[index + start];
+ }
+ return result2;
+ }
+ function baseSome(collection, predicate) {
+ var result2;
+ baseEach(collection, function(value, index, collection2) {
+ result2 = predicate(value, index, collection2);
+ return !result2;
+ });
+ return !!result2;
+ }
+ function baseSortedIndex(array, value, retHighest) {
+ var low = 0, high = array == null ? low : array.length;
+ if (typeof value == "number" && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
+ while (low < high) {
+ var mid = low + high >>> 1, computed = array[mid];
+ if (computed !== null && !isSymbol(computed) && (retHighest ? computed <= value : computed < value)) {
+ low = mid + 1;
+ } else {
+ high = mid;
+ }
+ }
+ return high;
+ }
+ return baseSortedIndexBy(array, value, identity, retHighest);
+ }
+ function baseSortedIndexBy(array, value, iteratee2, retHighest) {
+ var low = 0, high = array == null ? 0 : array.length;
+ if (high === 0) {
+ return 0;
+ }
+ value = iteratee2(value);
+ var valIsNaN = value !== value, valIsNull = value === null, valIsSymbol = isSymbol(value), valIsUndefined = value === undefined2;
+ while (low < high) {
+ var mid = nativeFloor((low + high) / 2), computed = iteratee2(array[mid]), othIsDefined = computed !== undefined2, othIsNull = computed === null, othIsReflexive = computed === computed, othIsSymbol = isSymbol(computed);
+ if (valIsNaN) {
+ var setLow = retHighest || othIsReflexive;
+ } else if (valIsUndefined) {
+ setLow = othIsReflexive && (retHighest || othIsDefined);
+ } else if (valIsNull) {
+ setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);
+ } else if (valIsSymbol) {
+ setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);
+ } else if (othIsNull || othIsSymbol) {
+ setLow = false;
+ } else {
+ setLow = retHighest ? computed <= value : computed < value;
+ }
+ if (setLow) {
+ low = mid + 1;
+ } else {
+ high = mid;
+ }
+ }
+ return nativeMin(high, MAX_ARRAY_INDEX);
+ }
+ function baseSortedUniq(array, iteratee2) {
+ var index = -1, length = array.length, resIndex = 0, result2 = [];
+ while (++index < length) {
+ var value = array[index], computed = iteratee2 ? iteratee2(value) : value;
+ if (!index || !eq(computed, seen)) {
+ var seen = computed;
+ result2[resIndex++] = value === 0 ? 0 : value;
+ }
+ }
+ return result2;
+ }
+ function baseToNumber(value) {
+ if (typeof value == "number") {
+ return value;
+ }
+ if (isSymbol(value)) {
+ return NAN;
+ }
+ return +value;
+ }
+ function baseToString(value) {
+ if (typeof value == "string") {
+ return value;
+ }
+ if (isArray(value)) {
+ return arrayMap(value, baseToString) + "";
+ }
+ if (isSymbol(value)) {
+ return symbolToString ? symbolToString.call(value) : "";
+ }
+ var result2 = value + "";
+ return result2 == "0" && 1 / value == -INFINITY ? "-0" : result2;
+ }
+ function baseUniq(array, iteratee2, comparator) {
+ var index = -1, includes2 = arrayIncludes, length = array.length, isCommon = true, result2 = [], seen = result2;
+ if (comparator) {
+ isCommon = false;
+ includes2 = arrayIncludesWith;
+ } else if (length >= LARGE_ARRAY_SIZE) {
+ var set2 = iteratee2 ? null : createSet(array);
+ if (set2) {
+ return setToArray(set2);
+ }
+ isCommon = false;
+ includes2 = cacheHas;
+ seen = new SetCache();
+ } else {
+ seen = iteratee2 ? [] : result2;
+ }
+ outer:
+ while (++index < length) {
+ var value = array[index], computed = iteratee2 ? iteratee2(value) : value;
+ value = comparator || value !== 0 ? value : 0;
+ if (isCommon && computed === computed) {
+ var seenIndex = seen.length;
+ while (seenIndex--) {
+ if (seen[seenIndex] === computed) {
+ continue outer;
+ }
+ }
+ if (iteratee2) {
+ seen.push(computed);
+ }
+ result2.push(value);
+ } else if (!includes2(seen, computed, comparator)) {
+ if (seen !== result2) {
+ seen.push(computed);
+ }
+ result2.push(value);
+ }
+ }
+ return result2;
+ }
+ function baseUnset(object, path5) {
+ path5 = castPath(path5, object);
+ object = parent(object, path5);
+ return object == null || delete object[toKey(last(path5))];
+ }
+ function baseUpdate(object, path5, updater, customizer) {
+ return baseSet(object, path5, updater(baseGet(object, path5)), customizer);
+ }
+ function baseWhile(array, predicate, isDrop, fromRight) {
+ var length = array.length, index = fromRight ? length : -1;
+ while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {
+ }
+ return isDrop ? baseSlice(array, fromRight ? 0 : index, fromRight ? index + 1 : length) : baseSlice(array, fromRight ? index + 1 : 0, fromRight ? length : index);
+ }
+ function baseWrapperValue(value, actions) {
+ var result2 = value;
+ if (result2 instanceof LazyWrapper) {
+ result2 = result2.value();
+ }
+ return arrayReduce(actions, function(result3, action) {
+ return action.func.apply(action.thisArg, arrayPush([result3], action.args));
+ }, result2);
+ }
+ function baseXor(arrays, iteratee2, comparator) {
+ var length = arrays.length;
+ if (length < 2) {
+ return length ? baseUniq(arrays[0]) : [];
+ }
+ var index = -1, result2 = Array2(length);
+ while (++index < length) {
+ var array = arrays[index], othIndex = -1;
+ while (++othIndex < length) {
+ if (othIndex != index) {
+ result2[index] = baseDifference(result2[index] || array, arrays[othIndex], iteratee2, comparator);
+ }
+ }
+ }
+ return baseUniq(baseFlatten(result2, 1), iteratee2, comparator);
+ }
+ function baseZipObject(props, values2, assignFunc) {
+ var index = -1, length = props.length, valsLength = values2.length, result2 = {};
+ while (++index < length) {
+ var value = index < valsLength ? values2[index] : undefined2;
+ assignFunc(result2, props[index], value);
+ }
+ return result2;
+ }
+ function castArrayLikeObject(value) {
+ return isArrayLikeObject(value) ? value : [];
+ }
+ function castFunction(value) {
+ return typeof value == "function" ? value : identity;
+ }
+ function castPath(value, object) {
+ if (isArray(value)) {
+ return value;
+ }
+ return isKey(value, object) ? [value] : stringToPath(toString(value));
+ }
+ var castRest = baseRest;
+ function castSlice(array, start, end) {
+ var length = array.length;
+ end = end === undefined2 ? length : end;
+ return !start && end >= length ? array : baseSlice(array, start, end);
+ }
+ var clearTimeout2 = ctxClearTimeout || function(id) {
+ return root.clearTimeout(id);
+ };
+ function cloneBuffer(buffer, isDeep) {
+ if (isDeep) {
+ return buffer.slice();
+ }
+ var length = buffer.length, result2 = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
+ buffer.copy(result2);
+ return result2;
+ }
+ function cloneArrayBuffer(arrayBuffer) {
+ var result2 = new arrayBuffer.constructor(arrayBuffer.byteLength);
+ new Uint8Array2(result2).set(new Uint8Array2(arrayBuffer));
+ return result2;
+ }
+ function cloneDataView(dataView, isDeep) {
+ var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
+ return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
+ }
+ function cloneRegExp(regexp) {
+ var result2 = new regexp.constructor(regexp.source, reFlags.exec(regexp));
+ result2.lastIndex = regexp.lastIndex;
+ return result2;
+ }
+ function cloneSymbol(symbol) {
+ return symbolValueOf ? Object2(symbolValueOf.call(symbol)) : {};
+ }
+ function cloneTypedArray(typedArray, isDeep) {
+ var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
+ return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
+ }
+ function compareAscending(value, other) {
+ if (value !== other) {
+ var valIsDefined = value !== undefined2, valIsNull = value === null, valIsReflexive = value === value, valIsSymbol = isSymbol(value);
+ var othIsDefined = other !== undefined2, othIsNull = other === null, othIsReflexive = other === other, othIsSymbol = isSymbol(other);
+ if (!othIsNull && !othIsSymbol && !valIsSymbol && value > other || valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol || valIsNull && othIsDefined && othIsReflexive || !valIsDefined && othIsReflexive || !valIsReflexive) {
+ return 1;
+ }
+ if (!valIsNull && !valIsSymbol && !othIsSymbol && value < other || othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol || othIsNull && valIsDefined && valIsReflexive || !othIsDefined && valIsReflexive || !othIsReflexive) {
+ return -1;
+ }
+ }
+ return 0;
+ }
+ function compareMultiple(object, other, orders) {
+ var index = -1, objCriteria = object.criteria, othCriteria = other.criteria, length = objCriteria.length, ordersLength = orders.length;
+ while (++index < length) {
+ var result2 = compareAscending(objCriteria[index], othCriteria[index]);
+ if (result2) {
+ if (index >= ordersLength) {
+ return result2;
+ }
+ var order = orders[index];
+ return result2 * (order == "desc" ? -1 : 1);
+ }
+ }
+ return object.index - other.index;
+ }
+ function composeArgs(args, partials, holders, isCurried) {
+ var argsIndex = -1, argsLength = args.length, holdersLength = holders.length, leftIndex = -1, leftLength = partials.length, rangeLength = nativeMax(argsLength - holdersLength, 0), result2 = Array2(leftLength + rangeLength), isUncurried = !isCurried;
+ while (++leftIndex < leftLength) {
+ result2[leftIndex] = partials[leftIndex];
+ }
+ while (++argsIndex < holdersLength) {
+ if (isUncurried || argsIndex < argsLength) {
+ result2[holders[argsIndex]] = args[argsIndex];
+ }
+ }
+ while (rangeLength--) {
+ result2[leftIndex++] = args[argsIndex++];
+ }
+ return result2;
+ }
+ function composeArgsRight(args, partials, holders, isCurried) {
+ var argsIndex = -1, argsLength = args.length, holdersIndex = -1, holdersLength = holders.length, rightIndex = -1, rightLength = partials.length, rangeLength = nativeMax(argsLength - holdersLength, 0), result2 = Array2(rangeLength + rightLength), isUncurried = !isCurried;
+ while (++argsIndex < rangeLength) {
+ result2[argsIndex] = args[argsIndex];
+ }
+ var offset = argsIndex;
+ while (++rightIndex < rightLength) {
+ result2[offset + rightIndex] = partials[rightIndex];
+ }
+ while (++holdersIndex < holdersLength) {
+ if (isUncurried || argsIndex < argsLength) {
+ result2[offset + holders[holdersIndex]] = args[argsIndex++];
+ }
+ }
+ return result2;
+ }
+ function copyArray(source, array) {
+ var index = -1, length = source.length;
+ array || (array = Array2(length));
+ while (++index < length) {
+ array[index] = source[index];
+ }
+ return array;
+ }
+ function copyObject(source, props, object, customizer) {
+ var isNew = !object;
+ object || (object = {});
+ var index = -1, length = props.length;
+ while (++index < length) {
+ var key = props[index];
+ var newValue = customizer ? customizer(object[key], source[key], key, object, source) : undefined2;
+ if (newValue === undefined2) {
+ newValue = source[key];
+ }
+ if (isNew) {
+ baseAssignValue(object, key, newValue);
+ } else {
+ assignValue(object, key, newValue);
+ }
+ }
+ return object;
+ }
+ function copySymbols(source, object) {
+ return copyObject(source, getSymbols(source), object);
+ }
+ function copySymbolsIn(source, object) {
+ return copyObject(source, getSymbolsIn(source), object);
+ }
+ function createAggregator(setter, initializer) {
+ return function(collection, iteratee2) {
+ var func = isArray(collection) ? arrayAggregator : baseAggregator, accumulator = initializer ? initializer() : {};
+ return func(collection, setter, getIteratee(iteratee2, 2), accumulator);
+ };
+ }
+ function createAssigner(assigner) {
+ return baseRest(function(object, sources) {
+ var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : undefined2, guard = length > 2 ? sources[2] : undefined2;
+ customizer = assigner.length > 3 && typeof customizer == "function" ? (length--, customizer) : undefined2;
+ if (guard && isIterateeCall(sources[0], sources[1], guard)) {
+ customizer = length < 3 ? undefined2 : customizer;
+ length = 1;
+ }
+ object = Object2(object);
+ while (++index < length) {
+ var source = sources[index];
+ if (source) {
+ assigner(object, source, index, customizer);
+ }
+ }
+ return object;
+ });
+ }
+ function createBaseEach(eachFunc, fromRight) {
+ return function(collection, iteratee2) {
+ if (collection == null) {
+ return collection;
+ }
+ if (!isArrayLike(collection)) {
+ return eachFunc(collection, iteratee2);
+ }
+ var length = collection.length, index = fromRight ? length : -1, iterable = Object2(collection);
+ while (fromRight ? index-- : ++index < length) {
+ if (iteratee2(iterable[index], index, iterable) === false) {
+ break;
+ }
+ }
+ return collection;
+ };
+ }
+ function createBaseFor(fromRight) {
+ return function(object, iteratee2, keysFunc) {
+ var index = -1, iterable = Object2(object), props = keysFunc(object), length = props.length;
+ while (length--) {
+ var key = props[fromRight ? length : ++index];
+ if (iteratee2(iterable[key], key, iterable) === false) {
+ break;
+ }
+ }
+ return object;
+ };
+ }
+ function createBind(func, bitmask, thisArg) {
+ var isBind = bitmask & WRAP_BIND_FLAG, Ctor = createCtor(func);
+ function wrapper() {
+ var fn = this && this !== root && this instanceof wrapper ? Ctor : func;
+ return fn.apply(isBind ? thisArg : this, arguments);
+ }
+ return wrapper;
+ }
+ function createCaseFirst(methodName) {
+ return function(string) {
+ string = toString(string);
+ var strSymbols = hasUnicode(string) ? stringToArray(string) : undefined2;
+ var chr = strSymbols ? strSymbols[0] : string.charAt(0);
+ var trailing = strSymbols ? castSlice(strSymbols, 1).join("") : string.slice(1);
+ return chr[methodName]() + trailing;
+ };
+ }
+ function createCompounder(callback) {
+ return function(string) {
+ return arrayReduce(words(deburr(string).replace(reApos, "")), callback, "");
+ };
+ }
+ function createCtor(Ctor) {
+ return function() {
+ var args = arguments;
+ switch (args.length) {
+ case 0:
+ return new Ctor();
+ case 1:
+ return new Ctor(args[0]);
+ case 2:
+ return new Ctor(args[0], args[1]);
+ case 3:
+ return new Ctor(args[0], args[1], args[2]);
+ case 4:
+ return new Ctor(args[0], args[1], args[2], args[3]);
+ case 5:
+ return new Ctor(args[0], args[1], args[2], args[3], args[4]);
+ case 6:
+ return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
+ case 7:
+ return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
+ }
+ var thisBinding = baseCreate(Ctor.prototype), result2 = Ctor.apply(thisBinding, args);
+ return isObject(result2) ? result2 : thisBinding;
+ };
+ }
+ function createCurry(func, bitmask, arity) {
+ var Ctor = createCtor(func);
+ function wrapper() {
+ var length = arguments.length, args = Array2(length), index = length, placeholder = getHolder(wrapper);
+ while (index--) {
+ args[index] = arguments[index];
+ }
+ var holders = length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder ? [] : replaceHolders(args, placeholder);
+ length -= holders.length;
+ if (length < arity) {
+ return createRecurry(
+ func,
+ bitmask,
+ createHybrid,
+ wrapper.placeholder,
+ undefined2,
+ args,
+ holders,
+ undefined2,
+ undefined2,
+ arity - length
+ );
+ }
+ var fn = this && this !== root && this instanceof wrapper ? Ctor : func;
+ return apply(fn, this, args);
+ }
+ return wrapper;
+ }
+ function createFind(findIndexFunc) {
+ return function(collection, predicate, fromIndex) {
+ var iterable = Object2(collection);
+ if (!isArrayLike(collection)) {
+ var iteratee2 = getIteratee(predicate, 3);
+ collection = keys(collection);
+ predicate = function(key) {
+ return iteratee2(iterable[key], key, iterable);
+ };
+ }
+ var index = findIndexFunc(collection, predicate, fromIndex);
+ return index > -1 ? iterable[iteratee2 ? collection[index] : index] : undefined2;
+ };
+ }
+ function createFlow(fromRight) {
+ return flatRest(function(funcs) {
+ var length = funcs.length, index = length, prereq = LodashWrapper.prototype.thru;
+ if (fromRight) {
+ funcs.reverse();
+ }
+ while (index--) {
+ var func = funcs[index];
+ if (typeof func != "function") {
+ throw new TypeError2(FUNC_ERROR_TEXT);
+ }
+ if (prereq && !wrapper && getFuncName(func) == "wrapper") {
+ var wrapper = new LodashWrapper([], true);
+ }
+ }
+ index = wrapper ? index : length;
+ while (++index < length) {
+ func = funcs[index];
+ var funcName = getFuncName(func), data = funcName == "wrapper" ? getData(func) : undefined2;
+ if (data && isLaziable(data[0]) && data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && !data[4].length && data[9] == 1) {
+ wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
+ } else {
+ wrapper = func.length == 1 && isLaziable(func) ? wrapper[funcName]() : wrapper.thru(func);
+ }
+ }
+ return function() {
+ var args = arguments, value = args[0];
+ if (wrapper && args.length == 1 && isArray(value)) {
+ return wrapper.plant(value).value();
+ }
+ var index2 = 0, result2 = length ? funcs[index2].apply(this, args) : value;
+ while (++index2 < length) {
+ result2 = funcs[index2].call(this, result2);
+ }
+ return result2;
+ };
+ });
+ }
+ function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary2, arity) {
+ var isAry = bitmask & WRAP_ARY_FLAG, isBind = bitmask & WRAP_BIND_FLAG, isBindKey = bitmask & WRAP_BIND_KEY_FLAG, isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), isFlip = bitmask & WRAP_FLIP_FLAG, Ctor = isBindKey ? undefined2 : createCtor(func);
+ function wrapper() {
+ var length = arguments.length, args = Array2(length), index = length;
+ while (index--) {
+ args[index] = arguments[index];
+ }
+ if (isCurried) {
+ var placeholder = getHolder(wrapper), holdersCount = countHolders(args, placeholder);
+ }
+ if (partials) {
+ args = composeArgs(args, partials, holders, isCurried);
+ }
+ if (partialsRight) {
+ args = composeArgsRight(args, partialsRight, holdersRight, isCurried);
+ }
+ length -= holdersCount;
+ if (isCurried && length < arity) {
+ var newHolders = replaceHolders(args, placeholder);
+ return createRecurry(
+ func,
+ bitmask,
+ createHybrid,
+ wrapper.placeholder,
+ thisArg,
+ args,
+ newHolders,
+ argPos,
+ ary2,
+ arity - length
+ );
+ }
+ var thisBinding = isBind ? thisArg : this, fn = isBindKey ? thisBinding[func] : func;
+ length = args.length;
+ if (argPos) {
+ args = reorder(args, argPos);
+ } else if (isFlip && length > 1) {
+ args.reverse();
+ }
+ if (isAry && ary2 < length) {
+ args.length = ary2;
+ }
+ if (this && this !== root && this instanceof wrapper) {
+ fn = Ctor || createCtor(fn);
+ }
+ return fn.apply(thisBinding, args);
+ }
+ return wrapper;
+ }
+ function createInverter(setter, toIteratee) {
+ return function(object, iteratee2) {
+ return baseInverter(object, setter, toIteratee(iteratee2), {});
+ };
+ }
+ function createMathOperation(operator, defaultValue) {
+ return function(value, other) {
+ var result2;
+ if (value === undefined2 && other === undefined2) {
+ return defaultValue;
+ }
+ if (value !== undefined2) {
+ result2 = value;
+ }
+ if (other !== undefined2) {
+ if (result2 === undefined2) {
+ return other;
+ }
+ if (typeof value == "string" || typeof other == "string") {
+ value = baseToString(value);
+ other = baseToString(other);
+ } else {
+ value = baseToNumber(value);
+ other = baseToNumber(other);
+ }
+ result2 = operator(value, other);
+ }
+ return result2;
+ };
+ }
+ function createOver(arrayFunc) {
+ return flatRest(function(iteratees) {
+ iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
+ return baseRest(function(args) {
+ var thisArg = this;
+ return arrayFunc(iteratees, function(iteratee2) {
+ return apply(iteratee2, thisArg, args);
+ });
+ });
+ });
+ }
+ function createPadding(length, chars) {
+ chars = chars === undefined2 ? " " : baseToString(chars);
+ var charsLength = chars.length;
+ if (charsLength < 2) {
+ return charsLength ? baseRepeat(chars, length) : chars;
+ }
+ var result2 = baseRepeat(chars, nativeCeil(length / stringSize(chars)));
+ return hasUnicode(chars) ? castSlice(stringToArray(result2), 0, length).join("") : result2.slice(0, length);
+ }
+ function createPartial(func, bitmask, thisArg, partials) {
+ var isBind = bitmask & WRAP_BIND_FLAG, Ctor = createCtor(func);
+ function wrapper() {
+ var argsIndex = -1, argsLength = arguments.length, leftIndex = -1, leftLength = partials.length, args = Array2(leftLength + argsLength), fn = this && this !== root && this instanceof wrapper ? Ctor : func;
+ while (++leftIndex < leftLength) {
+ args[leftIndex] = partials[leftIndex];
+ }
+ while (argsLength--) {
+ args[leftIndex++] = arguments[++argsIndex];
+ }
+ return apply(fn, isBind ? thisArg : this, args);
+ }
+ return wrapper;
+ }
+ function createRange(fromRight) {
+ return function(start, end, step) {
+ if (step && typeof step != "number" && isIterateeCall(start, end, step)) {
+ end = step = undefined2;
+ }
+ start = toFinite(start);
+ if (end === undefined2) {
+ end = start;
+ start = 0;
+ } else {
+ end = toFinite(end);
+ }
+ step = step === undefined2 ? start < end ? 1 : -1 : toFinite(step);
+ return baseRange(start, end, step, fromRight);
+ };
+ }
+ function createRelationalOperation(operator) {
+ return function(value, other) {
+ if (!(typeof value == "string" && typeof other == "string")) {
+ value = toNumber(value);
+ other = toNumber(other);
+ }
+ return operator(value, other);
+ };
+ }
+ function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary2, arity) {
+ var isCurry = bitmask & WRAP_CURRY_FLAG, newHolders = isCurry ? holders : undefined2, newHoldersRight = isCurry ? undefined2 : holders, newPartials = isCurry ? partials : undefined2, newPartialsRight = isCurry ? undefined2 : partials;
+ bitmask |= isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG;
+ bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);
+ if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
+ bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);
+ }
+ var newData = [
+ func,
+ bitmask,
+ thisArg,
+ newPartials,
+ newHolders,
+ newPartialsRight,
+ newHoldersRight,
+ argPos,
+ ary2,
+ arity
+ ];
+ var result2 = wrapFunc.apply(undefined2, newData);
+ if (isLaziable(func)) {
+ setData(result2, newData);
+ }
+ result2.placeholder = placeholder;
+ return setWrapToString(result2, func, bitmask);
+ }
+ function createRound(methodName) {
+ var func = Math2[methodName];
+ return function(number, precision) {
+ number = toNumber(number);
+ precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);
+ if (precision && nativeIsFinite(number)) {
+ var pair = (toString(number) + "e").split("e"), value = func(pair[0] + "e" + (+pair[1] + precision));
+ pair = (toString(value) + "e").split("e");
+ return +(pair[0] + "e" + (+pair[1] - precision));
+ }
+ return func(number);
+ };
+ }
+ var createSet = !(Set2 && 1 / setToArray(new Set2([, -0]))[1] == INFINITY) ? noop : function(values2) {
+ return new Set2(values2);
+ };
+ function createToPairs(keysFunc) {
+ return function(object) {
+ var tag = getTag(object);
+ if (tag == mapTag) {
+ return mapToArray(object);
+ }
+ if (tag == setTag) {
+ return setToPairs(object);
+ }
+ return baseToPairs(object, keysFunc(object));
+ };
+ }
+ function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary2, arity) {
+ var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;
+ if (!isBindKey && typeof func != "function") {
+ throw new TypeError2(FUNC_ERROR_TEXT);
+ }
+ var length = partials ? partials.length : 0;
+ if (!length) {
+ bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);
+ partials = holders = undefined2;
+ }
+ ary2 = ary2 === undefined2 ? ary2 : nativeMax(toInteger(ary2), 0);
+ arity = arity === undefined2 ? arity : toInteger(arity);
+ length -= holders ? holders.length : 0;
+ if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
+ var partialsRight = partials, holdersRight = holders;
+ partials = holders = undefined2;
+ }
+ var data = isBindKey ? undefined2 : getData(func);
+ var newData = [
+ func,
+ bitmask,
+ thisArg,
+ partials,
+ holders,
+ partialsRight,
+ holdersRight,
+ argPos,
+ ary2,
+ arity
+ ];
+ if (data) {
+ mergeData(newData, data);
+ }
+ func = newData[0];
+ bitmask = newData[1];
+ thisArg = newData[2];
+ partials = newData[3];
+ holders = newData[4];
+ arity = newData[9] = newData[9] === undefined2 ? isBindKey ? 0 : func.length : nativeMax(newData[9] - length, 0);
+ if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {
+ bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);
+ }
+ if (!bitmask || bitmask == WRAP_BIND_FLAG) {
+ var result2 = createBind(func, bitmask, thisArg);
+ } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {
+ result2 = createCurry(func, bitmask, arity);
+ } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {
+ result2 = createPartial(func, bitmask, thisArg, partials);
+ } else {
+ result2 = createHybrid.apply(undefined2, newData);
+ }
+ var setter = data ? baseSetData : setData;
+ return setWrapToString(setter(result2, newData), func, bitmask);
+ }
+ function customDefaultsAssignIn(objValue, srcValue, key, object) {
+ if (objValue === undefined2 || eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key)) {
+ return srcValue;
+ }
+ return objValue;
+ }
+ function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {
+ if (isObject(objValue) && isObject(srcValue)) {
+ stack.set(srcValue, objValue);
+ baseMerge(objValue, srcValue, undefined2, customDefaultsMerge, stack);
+ stack["delete"](srcValue);
+ }
+ return objValue;
+ }
+ function customOmitClone(value) {
+ return isPlainObject(value) ? undefined2 : value;
+ }
+ function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG, arrLength = array.length, othLength = other.length;
+ if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
+ return false;
+ }
+ var arrStacked = stack.get(array);
+ var othStacked = stack.get(other);
+ if (arrStacked && othStacked) {
+ return arrStacked == other && othStacked == array;
+ }
+ var index = -1, result2 = true, seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache() : undefined2;
+ stack.set(array, other);
+ stack.set(other, array);
+ while (++index < arrLength) {
+ var arrValue = array[index], othValue = other[index];
+ if (customizer) {
+ var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);
+ }
+ if (compared !== undefined2) {
+ if (compared) {
+ continue;
+ }
+ result2 = false;
+ break;
+ }
+ if (seen) {
+ if (!arraySome(other, function(othValue2, othIndex) {
+ if (!cacheHas(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) {
+ return seen.push(othIndex);
+ }
+ })) {
+ result2 = false;
+ break;
+ }
+ } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
+ result2 = false;
+ break;
+ }
+ }
+ stack["delete"](array);
+ stack["delete"](other);
+ return result2;
+ }
+ function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
+ switch (tag) {
+ case dataViewTag:
+ if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {
+ return false;
+ }
+ object = object.buffer;
+ other = other.buffer;
+ case arrayBufferTag:
+ if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array2(object), new Uint8Array2(other))) {
+ return false;
+ }
+ return true;
+ case boolTag:
+ case dateTag:
+ case numberTag:
+ return eq(+object, +other);
+ case errorTag:
+ return object.name == other.name && object.message == other.message;
+ case regexpTag:
+ case stringTag:
+ return object == other + "";
+ case mapTag:
+ var convert = mapToArray;
+ case setTag:
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
+ convert || (convert = setToArray);
+ if (object.size != other.size && !isPartial) {
+ return false;
+ }
+ var stacked = stack.get(object);
+ if (stacked) {
+ return stacked == other;
+ }
+ bitmask |= COMPARE_UNORDERED_FLAG;
+ stack.set(object, other);
+ var result2 = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
+ stack["delete"](object);
+ return result2;
+ case symbolTag:
+ if (symbolValueOf) {
+ return symbolValueOf.call(object) == symbolValueOf.call(other);
+ }
+ }
+ return false;
+ }
+ function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length;
+ if (objLength != othLength && !isPartial) {
+ return false;
+ }
+ var index = objLength;
+ while (index--) {
+ var key = objProps[index];
+ if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
+ return false;
+ }
+ }
+ var objStacked = stack.get(object);
+ var othStacked = stack.get(other);
+ if (objStacked && othStacked) {
+ return objStacked == other && othStacked == object;
+ }
+ var result2 = true;
+ stack.set(object, other);
+ stack.set(other, object);
+ var skipCtor = isPartial;
+ while (++index < objLength) {
+ key = objProps[index];
+ var objValue = object[key], othValue = other[key];
+ if (customizer) {
+ var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);
+ }
+ if (!(compared === undefined2 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {
+ result2 = false;
+ break;
+ }
+ skipCtor || (skipCtor = key == "constructor");
+ }
+ if (result2 && !skipCtor) {
+ var objCtor = object.constructor, othCtor = other.constructor;
+ if (objCtor != othCtor && ("constructor" in object && "constructor" in other) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) {
+ result2 = false;
+ }
+ }
+ stack["delete"](object);
+ stack["delete"](other);
+ return result2;
+ }
+ function flatRest(func) {
+ return setToString(overRest(func, undefined2, flatten2), func + "");
+ }
+ function getAllKeys(object) {
+ return baseGetAllKeys(object, keys, getSymbols);
+ }
+ function getAllKeysIn(object) {
+ return baseGetAllKeys(object, keysIn, getSymbolsIn);
+ }
+ var getData = !metaMap ? noop : function(func) {
+ return metaMap.get(func);
+ };
+ function getFuncName(func) {
+ var result2 = func.name + "", array = realNames[result2], length = hasOwnProperty.call(realNames, result2) ? array.length : 0;
+ while (length--) {
+ var data = array[length], otherFunc = data.func;
+ if (otherFunc == null || otherFunc == func) {
+ return data.name;
+ }
+ }
+ return result2;
+ }
+ function getHolder(func) {
+ var object = hasOwnProperty.call(lodash, "placeholder") ? lodash : func;
+ return object.placeholder;
+ }
+ function getIteratee() {
+ var result2 = lodash.iteratee || iteratee;
+ result2 = result2 === iteratee ? baseIteratee : result2;
+ return arguments.length ? result2(arguments[0], arguments[1]) : result2;
+ }
+ function getMapData(map2, key) {
+ var data = map2.__data__;
+ return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map;
+ }
+ function getMatchData(object) {
+ var result2 = keys(object), length = result2.length;
+ while (length--) {
+ var key = result2[length], value = object[key];
+ result2[length] = [key, value, isStrictComparable(value)];
+ }
+ return result2;
+ }
+ function getNative(object, key) {
+ var value = getValue(object, key);
+ return baseIsNative(value) ? value : undefined2;
+ }
+ function getRawTag(value) {
+ var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag];
+ try {
+ value[symToStringTag] = undefined2;
+ var unmasked = true;
+ } catch (e) {
+ }
+ var result2 = nativeObjectToString.call(value);
+ if (unmasked) {
+ if (isOwn) {
+ value[symToStringTag] = tag;
+ } else {
+ delete value[symToStringTag];
+ }
+ }
+ return result2;
+ }
+ var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
+ if (object == null) {
+ return [];
+ }
+ object = Object2(object);
+ return arrayFilter(nativeGetSymbols(object), function(symbol) {
+ return propertyIsEnumerable.call(object, symbol);
+ });
+ };
+ var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
+ var result2 = [];
+ while (object) {
+ arrayPush(result2, getSymbols(object));
+ object = getPrototype(object);
+ }
+ return result2;
+ };
+ var getTag = baseGetTag;
+ if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map2 && getTag(new Map2()) != mapTag || Promise2 && getTag(Promise2.resolve()) != promiseTag || Set2 && getTag(new Set2()) != setTag || WeakMap && getTag(new WeakMap()) != weakMapTag) {
+ getTag = function(value) {
+ var result2 = baseGetTag(value), Ctor = result2 == objectTag ? value.constructor : undefined2, ctorString = Ctor ? toSource(Ctor) : "";
+ if (ctorString) {
+ switch (ctorString) {
+ case dataViewCtorString:
+ return dataViewTag;
+ case mapCtorString:
+ return mapTag;
+ case promiseCtorString:
+ return promiseTag;
+ case setCtorString:
+ return setTag;
+ case weakMapCtorString:
+ return weakMapTag;
+ }
+ }
+ return result2;
+ };
+ }
+ function getView(start, end, transforms) {
+ var index = -1, length = transforms.length;
+ while (++index < length) {
+ var data = transforms[index], size2 = data.size;
+ switch (data.type) {
+ case "drop":
+ start += size2;
+ break;
+ case "dropRight":
+ end -= size2;
+ break;
+ case "take":
+ end = nativeMin(end, start + size2);
+ break;
+ case "takeRight":
+ start = nativeMax(start, end - size2);
+ break;
+ }
+ }
+ return { "start": start, "end": end };
+ }
+ function getWrapDetails(source) {
+ var match = source.match(reWrapDetails);
+ return match ? match[1].split(reSplitDetails) : [];
+ }
+ function hasPath(object, path5, hasFunc) {
+ path5 = castPath(path5, object);
+ var index = -1, length = path5.length, result2 = false;
+ while (++index < length) {
+ var key = toKey(path5[index]);
+ if (!(result2 = object != null && hasFunc(object, key))) {
+ break;
+ }
+ object = object[key];
+ }
+ if (result2 || ++index != length) {
+ return result2;
+ }
+ length = object == null ? 0 : object.length;
+ return !!length && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object));
+ }
+ function initCloneArray(array) {
+ var length = array.length, result2 = new array.constructor(length);
+ if (length && typeof array[0] == "string" && hasOwnProperty.call(array, "index")) {
+ result2.index = array.index;
+ result2.input = array.input;
+ }
+ return result2;
+ }
+ function initCloneObject(object) {
+ return typeof object.constructor == "function" && !isPrototype(object) ? baseCreate(getPrototype(object)) : {};
+ }
+ function initCloneByTag(object, tag, isDeep) {
+ var Ctor = object.constructor;
+ switch (tag) {
+ case arrayBufferTag:
+ return cloneArrayBuffer(object);
+ case boolTag:
+ case dateTag:
+ return new Ctor(+object);
+ case dataViewTag:
+ return cloneDataView(object, isDeep);
+ case float32Tag:
+ case float64Tag:
+ case int8Tag:
+ case int16Tag:
+ case int32Tag:
+ case uint8Tag:
+ case uint8ClampedTag:
+ case uint16Tag:
+ case uint32Tag:
+ return cloneTypedArray(object, isDeep);
+ case mapTag:
+ return new Ctor();
+ case numberTag:
+ case stringTag:
+ return new Ctor(object);
+ case regexpTag:
+ return cloneRegExp(object);
+ case setTag:
+ return new Ctor();
+ case symbolTag:
+ return cloneSymbol(object);
+ }
+ }
+ function insertWrapDetails(source, details) {
+ var length = details.length;
+ if (!length) {
+ return source;
+ }
+ var lastIndex = length - 1;
+ details[lastIndex] = (length > 1 ? "& " : "") + details[lastIndex];
+ details = details.join(length > 2 ? ", " : " ");
+ return source.replace(reWrapComment, "{\n/* [wrapped with " + details + "] */\n");
+ }
+ function isFlattenable(value) {
+ return isArray(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]);
+ }
+ function isIndex(value, length) {
+ var type = typeof value;
+ length = length == null ? MAX_SAFE_INTEGER : length;
+ return !!length && (type == "number" || type != "symbol" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length);
+ }
+ function isIterateeCall(value, index, object) {
+ if (!isObject(object)) {
+ return false;
+ }
+ var type = typeof index;
+ if (type == "number" ? isArrayLike(object) && isIndex(index, object.length) : type == "string" && index in object) {
+ return eq(object[index], value);
+ }
+ return false;
+ }
+ function isKey(value, object) {
+ if (isArray(value)) {
+ return false;
+ }
+ var type = typeof value;
+ if (type == "number" || type == "symbol" || type == "boolean" || value == null || isSymbol(value)) {
+ return true;
+ }
+ return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object2(object);
+ }
+ function isKeyable(value) {
+ var type = typeof value;
+ return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null;
+ }
+ function isLaziable(func) {
+ var funcName = getFuncName(func), other = lodash[funcName];
+ if (typeof other != "function" || !(funcName in LazyWrapper.prototype)) {
+ return false;
+ }
+ if (func === other) {
+ return true;
+ }
+ var data = getData(other);
+ return !!data && func === data[0];
+ }
+ function isMasked(func) {
+ return !!maskSrcKey && maskSrcKey in func;
+ }
+ var isMaskable = coreJsData ? isFunction : stubFalse;
+ function isPrototype(value) {
+ var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto;
+ return value === proto;
+ }
+ function isStrictComparable(value) {
+ return value === value && !isObject(value);
+ }
+ function matchesStrictComparable(key, srcValue) {
+ return function(object) {
+ if (object == null) {
+ return false;
+ }
+ return object[key] === srcValue && (srcValue !== undefined2 || key in Object2(object));
+ };
+ }
+ function memoizeCapped(func) {
+ var result2 = memoize(func, function(key) {
+ if (cache.size === MAX_MEMOIZE_SIZE) {
+ cache.clear();
+ }
+ return key;
+ });
+ var cache = result2.cache;
+ return result2;
+ }
+ function mergeData(data, source) {
+ var bitmask = data[1], srcBitmask = source[1], newBitmask = bitmask | srcBitmask, isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);
+ var isCombo = srcBitmask == WRAP_ARY_FLAG && bitmask == WRAP_CURRY_FLAG || srcBitmask == WRAP_ARY_FLAG && bitmask == WRAP_REARG_FLAG && data[7].length <= source[8] || srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG) && source[7].length <= source[8] && bitmask == WRAP_CURRY_FLAG;
+ if (!(isCommon || isCombo)) {
+ return data;
+ }
+ if (srcBitmask & WRAP_BIND_FLAG) {
+ data[2] = source[2];
+ newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;
+ }
+ var value = source[3];
+ if (value) {
+ var partials = data[3];
+ data[3] = partials ? composeArgs(partials, value, source[4]) : value;
+ data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];
+ }
+ value = source[5];
+ if (value) {
+ partials = data[5];
+ data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;
+ data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];
+ }
+ value = source[7];
+ if (value) {
+ data[7] = value;
+ }
+ if (srcBitmask & WRAP_ARY_FLAG) {
+ data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
+ }
+ if (data[9] == null) {
+ data[9] = source[9];
+ }
+ data[0] = source[0];
+ data[1] = newBitmask;
+ return data;
+ }
+ function nativeKeysIn(object) {
+ var result2 = [];
+ if (object != null) {
+ for (var key in Object2(object)) {
+ result2.push(key);
+ }
+ }
+ return result2;
+ }
+ function objectToString(value) {
+ return nativeObjectToString.call(value);
+ }
+ function overRest(func, start, transform2) {
+ start = nativeMax(start === undefined2 ? func.length - 1 : start, 0);
+ return function() {
+ var args = arguments, index = -1, length = nativeMax(args.length - start, 0), array = Array2(length);
+ while (++index < length) {
+ array[index] = args[start + index];
+ }
+ index = -1;
+ var otherArgs = Array2(start + 1);
+ while (++index < start) {
+ otherArgs[index] = args[index];
+ }
+ otherArgs[start] = transform2(array);
+ return apply(func, this, otherArgs);
+ };
+ }
+ function parent(object, path5) {
+ return path5.length < 2 ? object : baseGet(object, baseSlice(path5, 0, -1));
+ }
+ function reorder(array, indexes) {
+ var arrLength = array.length, length = nativeMin(indexes.length, arrLength), oldArray = copyArray(array);
+ while (length--) {
+ var index = indexes[length];
+ array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined2;
+ }
+ return array;
+ }
+ function safeGet(object, key) {
+ if (key === "constructor" && typeof object[key] === "function") {
+ return;
+ }
+ if (key == "__proto__") {
+ return;
+ }
+ return object[key];
+ }
+ var setData = shortOut(baseSetData);
+ var setTimeout2 = ctxSetTimeout || function(func, wait) {
+ return root.setTimeout(func, wait);
+ };
+ var setToString = shortOut(baseSetToString);
+ function setWrapToString(wrapper, reference, bitmask) {
+ var source = reference + "";
+ return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));
+ }
+ function shortOut(func) {
+ var count = 0, lastCalled = 0;
+ return function() {
+ var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled);
+ lastCalled = stamp;
+ if (remaining > 0) {
+ if (++count >= HOT_COUNT) {
+ return arguments[0];
+ }
+ } else {
+ count = 0;
+ }
+ return func.apply(undefined2, arguments);
+ };
+ }
+ function shuffleSelf(array, size2) {
+ var index = -1, length = array.length, lastIndex = length - 1;
+ size2 = size2 === undefined2 ? length : size2;
+ while (++index < size2) {
+ var rand = baseRandom(index, lastIndex), value = array[rand];
+ array[rand] = array[index];
+ array[index] = value;
+ }
+ array.length = size2;
+ return array;
+ }
+ var stringToPath = memoizeCapped(function(string) {
+ var result2 = [];
+ if (string.charCodeAt(0) === 46) {
+ result2.push("");
+ }
+ string.replace(rePropName, function(match, number, quote, subString) {
+ result2.push(quote ? subString.replace(reEscapeChar, "$1") : number || match);
+ });
+ return result2;
+ });
+ function toKey(value) {
+ if (typeof value == "string" || isSymbol(value)) {
+ return value;
+ }
+ var result2 = value + "";
+ return result2 == "0" && 1 / value == -INFINITY ? "-0" : result2;
+ }
+ function toSource(func) {
+ if (func != null) {
+ try {
+ return funcToString.call(func);
+ } catch (e) {
+ }
+ try {
+ return func + "";
+ } catch (e) {
+ }
+ }
+ return "";
+ }
+ function updateWrapDetails(details, bitmask) {
+ arrayEach(wrapFlags, function(pair) {
+ var value = "_." + pair[0];
+ if (bitmask & pair[1] && !arrayIncludes(details, value)) {
+ details.push(value);
+ }
+ });
+ return details.sort();
+ }
+ function wrapperClone(wrapper) {
+ if (wrapper instanceof LazyWrapper) {
+ return wrapper.clone();
+ }
+ var result2 = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);
+ result2.__actions__ = copyArray(wrapper.__actions__);
+ result2.__index__ = wrapper.__index__;
+ result2.__values__ = wrapper.__values__;
+ return result2;
+ }
+ function chunk(array, size2, guard) {
+ if (guard ? isIterateeCall(array, size2, guard) : size2 === undefined2) {
+ size2 = 1;
+ } else {
+ size2 = nativeMax(toInteger(size2), 0);
+ }
+ var length = array == null ? 0 : array.length;
+ if (!length || size2 < 1) {
+ return [];
+ }
+ var index = 0, resIndex = 0, result2 = Array2(nativeCeil(length / size2));
+ while (index < length) {
+ result2[resIndex++] = baseSlice(array, index, index += size2);
+ }
+ return result2;
+ }
+ function compact(array) {
+ var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result2 = [];
+ while (++index < length) {
+ var value = array[index];
+ if (value) {
+ result2[resIndex++] = value;
+ }
+ }
+ return result2;
+ }
+ function concat() {
+ var length = arguments.length;
+ if (!length) {
+ return [];
+ }
+ var args = Array2(length - 1), array = arguments[0], index = length;
+ while (index--) {
+ args[index - 1] = arguments[index];
+ }
+ return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));
+ }
+ var difference = baseRest(function(array, values2) {
+ return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values2, 1, isArrayLikeObject, true)) : [];
+ });
+ var differenceBy = baseRest(function(array, values2) {
+ var iteratee2 = last(values2);
+ if (isArrayLikeObject(iteratee2)) {
+ iteratee2 = undefined2;
+ }
+ return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values2, 1, isArrayLikeObject, true), getIteratee(iteratee2, 2)) : [];
+ });
+ var differenceWith = baseRest(function(array, values2) {
+ var comparator = last(values2);
+ if (isArrayLikeObject(comparator)) {
+ comparator = undefined2;
+ }
+ return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values2, 1, isArrayLikeObject, true), undefined2, comparator) : [];
+ });
+ function drop(array, n, guard) {
+ var length = array == null ? 0 : array.length;
+ if (!length) {
+ return [];
+ }
+ n = guard || n === undefined2 ? 1 : toInteger(n);
+ return baseSlice(array, n < 0 ? 0 : n, length);
+ }
+ function dropRight(array, n, guard) {
+ var length = array == null ? 0 : array.length;
+ if (!length) {
+ return [];
+ }
+ n = guard || n === undefined2 ? 1 : toInteger(n);
+ n = length - n;
+ return baseSlice(array, 0, n < 0 ? 0 : n);
+ }
+ function dropRightWhile(array, predicate) {
+ return array && array.length ? baseWhile(array, getIteratee(predicate, 3), true, true) : [];
+ }
+ function dropWhile(array, predicate) {
+ return array && array.length ? baseWhile(array, getIteratee(predicate, 3), true) : [];
+ }
+ function fill(array, value, start, end) {
+ var length = array == null ? 0 : array.length;
+ if (!length) {
+ return [];
+ }
+ if (start && typeof start != "number" && isIterateeCall(array, value, start)) {
+ start = 0;
+ end = length;
+ }
+ return baseFill(array, value, start, end);
+ }
+ function findIndex(array, predicate, fromIndex) {
+ var length = array == null ? 0 : array.length;
+ if (!length) {
+ return -1;
+ }
+ var index = fromIndex == null ? 0 : toInteger(fromIndex);
+ if (index < 0) {
+ index = nativeMax(length + index, 0);
+ }
+ return baseFindIndex(array, getIteratee(predicate, 3), index);
+ }
+ function findLastIndex(array, predicate, fromIndex) {
+ var length = array == null ? 0 : array.length;
+ if (!length) {
+ return -1;
+ }
+ var index = length - 1;
+ if (fromIndex !== undefined2) {
+ index = toInteger(fromIndex);
+ index = fromIndex < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
+ }
+ return baseFindIndex(array, getIteratee(predicate, 3), index, true);
+ }
+ function flatten2(array) {
+ var length = array == null ? 0 : array.length;
+ return length ? baseFlatten(array, 1) : [];
+ }
+ function flattenDeep2(array) {
+ var length = array == null ? 0 : array.length;
+ return length ? baseFlatten(array, INFINITY) : [];
+ }
+ function flattenDepth(array, depth) {
+ var length = array == null ? 0 : array.length;
+ if (!length) {
+ return [];
+ }
+ depth = depth === undefined2 ? 1 : toInteger(depth);
+ return baseFlatten(array, depth);
+ }
+ function fromPairs(pairs) {
+ var index = -1, length = pairs == null ? 0 : pairs.length, result2 = {};
+ while (++index < length) {
+ var pair = pairs[index];
+ result2[pair[0]] = pair[1];
+ }
+ return result2;
+ }
+ function head(array) {
+ return array && array.length ? array[0] : undefined2;
+ }
+ function indexOf(array, value, fromIndex) {
+ var length = array == null ? 0 : array.length;
+ if (!length) {
+ return -1;
+ }
+ var index = fromIndex == null ? 0 : toInteger(fromIndex);
+ if (index < 0) {
+ index = nativeMax(length + index, 0);
+ }
+ return baseIndexOf(array, value, index);
+ }
+ function initial(array) {
+ var length = array == null ? 0 : array.length;
+ return length ? baseSlice(array, 0, -1) : [];
+ }
+ var intersection = baseRest(function(arrays) {
+ var mapped = arrayMap(arrays, castArrayLikeObject);
+ return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped) : [];
+ });
+ var intersectionBy = baseRest(function(arrays) {
+ var iteratee2 = last(arrays), mapped = arrayMap(arrays, castArrayLikeObject);
+ if (iteratee2 === last(mapped)) {
+ iteratee2 = undefined2;
+ } else {
+ mapped.pop();
+ }
+ return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, getIteratee(iteratee2, 2)) : [];
+ });
+ var intersectionWith = baseRest(function(arrays) {
+ var comparator = last(arrays), mapped = arrayMap(arrays, castArrayLikeObject);
+ comparator = typeof comparator == "function" ? comparator : undefined2;
+ if (comparator) {
+ mapped.pop();
+ }
+ return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, undefined2, comparator) : [];
+ });
+ function join3(array, separator) {
+ return array == null ? "" : nativeJoin.call(array, separator);
+ }
+ function last(array) {
+ var length = array == null ? 0 : array.length;
+ return length ? array[length - 1] : undefined2;
+ }
+ function lastIndexOf(array, value, fromIndex) {
+ var length = array == null ? 0 : array.length;
+ if (!length) {
+ return -1;
+ }
+ var index = length;
+ if (fromIndex !== undefined2) {
+ index = toInteger(fromIndex);
+ index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
+ }
+ return value === value ? strictLastIndexOf(array, value, index) : baseFindIndex(array, baseIsNaN, index, true);
+ }
+ function nth(array, n) {
+ return array && array.length ? baseNth(array, toInteger(n)) : undefined2;
+ }
+ var pull = baseRest(pullAll);
+ function pullAll(array, values2) {
+ return array && array.length && values2 && values2.length ? basePullAll(array, values2) : array;
+ }
+ function pullAllBy(array, values2, iteratee2) {
+ return array && array.length && values2 && values2.length ? basePullAll(array, values2, getIteratee(iteratee2, 2)) : array;
+ }
+ function pullAllWith(array, values2, comparator) {
+ return array && array.length && values2 && values2.length ? basePullAll(array, values2, undefined2, comparator) : array;
+ }
+ var pullAt = flatRest(function(array, indexes) {
+ var length = array == null ? 0 : array.length, result2 = baseAt(array, indexes);
+ basePullAt(array, arrayMap(indexes, function(index) {
+ return isIndex(index, length) ? +index : index;
+ }).sort(compareAscending));
+ return result2;
+ });
+ function remove(array, predicate) {
+ var result2 = [];
+ if (!(array && array.length)) {
+ return result2;
+ }
+ var index = -1, indexes = [], length = array.length;
+ predicate = getIteratee(predicate, 3);
+ while (++index < length) {
+ var value = array[index];
+ if (predicate(value, index, array)) {
+ result2.push(value);
+ indexes.push(index);
+ }
+ }
+ basePullAt(array, indexes);
+ return result2;
+ }
+ function reverse(array) {
+ return array == null ? array : nativeReverse.call(array);
+ }
+ function slice(array, start, end) {
+ var length = array == null ? 0 : array.length;
+ if (!length) {
+ return [];
+ }
+ if (end && typeof end != "number" && isIterateeCall(array, start, end)) {
+ start = 0;
+ end = length;
+ } else {
+ start = start == null ? 0 : toInteger(start);
+ end = end === undefined2 ? length : toInteger(end);
+ }
+ return baseSlice(array, start, end);
+ }
+ function sortedIndex(array, value) {
+ return baseSortedIndex(array, value);
+ }
+ function sortedIndexBy(array, value, iteratee2) {
+ return baseSortedIndexBy(array, value, getIteratee(iteratee2, 2));
+ }
+ function sortedIndexOf(array, value) {
+ var length = array == null ? 0 : array.length;
+ if (length) {
+ var index = baseSortedIndex(array, value);
+ if (index < length && eq(array[index], value)) {
+ return index;
+ }
+ }
+ return -1;
+ }
+ function sortedLastIndex(array, value) {
+ return baseSortedIndex(array, value, true);
+ }
+ function sortedLastIndexBy(array, value, iteratee2) {
+ return baseSortedIndexBy(array, value, getIteratee(iteratee2, 2), true);
+ }
+ function sortedLastIndexOf(array, value) {
+ var length = array == null ? 0 : array.length;
+ if (length) {
+ var index = baseSortedIndex(array, value, true) - 1;
+ if (eq(array[index], value)) {
+ return index;
+ }
+ }
+ return -1;
+ }
+ function sortedUniq(array) {
+ return array && array.length ? baseSortedUniq(array) : [];
+ }
+ function sortedUniqBy(array, iteratee2) {
+ return array && array.length ? baseSortedUniq(array, getIteratee(iteratee2, 2)) : [];
+ }
+ function tail(array) {
+ var length = array == null ? 0 : array.length;
+ return length ? baseSlice(array, 1, length) : [];
+ }
+ function take(array, n, guard) {
+ if (!(array && array.length)) {
+ return [];
+ }
+ n = guard || n === undefined2 ? 1 : toInteger(n);
+ return baseSlice(array, 0, n < 0 ? 0 : n);
+ }
+ function takeRight(array, n, guard) {
+ var length = array == null ? 0 : array.length;
+ if (!length) {
+ return [];
+ }
+ n = guard || n === undefined2 ? 1 : toInteger(n);
+ n = length - n;
+ return baseSlice(array, n < 0 ? 0 : n, length);
+ }
+ function takeRightWhile(array, predicate) {
+ return array && array.length ? baseWhile(array, getIteratee(predicate, 3), false, true) : [];
+ }
+ function takeWhile(array, predicate) {
+ return array && array.length ? baseWhile(array, getIteratee(predicate, 3)) : [];
+ }
+ var union = baseRest(function(arrays) {
+ return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));
+ });
+ var unionBy = baseRest(function(arrays) {
+ var iteratee2 = last(arrays);
+ if (isArrayLikeObject(iteratee2)) {
+ iteratee2 = undefined2;
+ }
+ return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee2, 2));
+ });
+ var unionWith = baseRest(function(arrays) {
+ var comparator = last(arrays);
+ comparator = typeof comparator == "function" ? comparator : undefined2;
+ return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined2, comparator);
+ });
+ function uniq(array) {
+ return array && array.length ? baseUniq(array) : [];
+ }
+ function uniqBy(array, iteratee2) {
+ return array && array.length ? baseUniq(array, getIteratee(iteratee2, 2)) : [];
+ }
+ function uniqWith(array, comparator) {
+ comparator = typeof comparator == "function" ? comparator : undefined2;
+ return array && array.length ? baseUniq(array, undefined2, comparator) : [];
+ }
+ function unzip(array) {
+ if (!(array && array.length)) {
+ return [];
+ }
+ var length = 0;
+ array = arrayFilter(array, function(group) {
+ if (isArrayLikeObject(group)) {
+ length = nativeMax(group.length, length);
+ return true;
+ }
+ });
+ return baseTimes(length, function(index) {
+ return arrayMap(array, baseProperty(index));
+ });
+ }
+ function unzipWith(array, iteratee2) {
+ if (!(array && array.length)) {
+ return [];
+ }
+ var result2 = unzip(array);
+ if (iteratee2 == null) {
+ return result2;
+ }
+ return arrayMap(result2, function(group) {
+ return apply(iteratee2, undefined2, group);
+ });
+ }
+ var without = baseRest(function(array, values2) {
+ return isArrayLikeObject(array) ? baseDifference(array, values2) : [];
+ });
+ var xor = baseRest(function(arrays) {
+ return baseXor(arrayFilter(arrays, isArrayLikeObject));
+ });
+ var xorBy = baseRest(function(arrays) {
+ var iteratee2 = last(arrays);
+ if (isArrayLikeObject(iteratee2)) {
+ iteratee2 = undefined2;
+ }
+ return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee2, 2));
+ });
+ var xorWith = baseRest(function(arrays) {
+ var comparator = last(arrays);
+ comparator = typeof comparator == "function" ? comparator : undefined2;
+ return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined2, comparator);
+ });
+ var zip = baseRest(unzip);
+ function zipObject(props, values2) {
+ return baseZipObject(props || [], values2 || [], assignValue);
+ }
+ function zipObjectDeep(props, values2) {
+ return baseZipObject(props || [], values2 || [], baseSet);
+ }
+ var zipWith = baseRest(function(arrays) {
+ var length = arrays.length, iteratee2 = length > 1 ? arrays[length - 1] : undefined2;
+ iteratee2 = typeof iteratee2 == "function" ? (arrays.pop(), iteratee2) : undefined2;
+ return unzipWith(arrays, iteratee2);
+ });
+ function chain(value) {
+ var result2 = lodash(value);
+ result2.__chain__ = true;
+ return result2;
+ }
+ function tap(value, interceptor) {
+ interceptor(value);
+ return value;
+ }
+ function thru(value, interceptor) {
+ return interceptor(value);
+ }
+ var wrapperAt = flatRest(function(paths) {
+ var length = paths.length, start = length ? paths[0] : 0, value = this.__wrapped__, interceptor = function(object) {
+ return baseAt(object, paths);
+ };
+ if (length > 1 || this.__actions__.length || !(value instanceof LazyWrapper) || !isIndex(start)) {
+ return this.thru(interceptor);
+ }
+ value = value.slice(start, +start + (length ? 1 : 0));
+ value.__actions__.push({
+ "func": thru,
+ "args": [interceptor],
+ "thisArg": undefined2
+ });
+ return new LodashWrapper(value, this.__chain__).thru(function(array) {
+ if (length && !array.length) {
+ array.push(undefined2);
+ }
+ return array;
+ });
+ });
+ function wrapperChain() {
+ return chain(this);
+ }
+ function wrapperCommit() {
+ return new LodashWrapper(this.value(), this.__chain__);
+ }
+ function wrapperNext() {
+ if (this.__values__ === undefined2) {
+ this.__values__ = toArray(this.value());
+ }
+ var done = this.__index__ >= this.__values__.length, value = done ? undefined2 : this.__values__[this.__index__++];
+ return { "done": done, "value": value };
+ }
+ function wrapperToIterator() {
+ return this;
+ }
+ function wrapperPlant(value) {
+ var result2, parent2 = this;
+ while (parent2 instanceof baseLodash) {
+ var clone2 = wrapperClone(parent2);
+ clone2.__index__ = 0;
+ clone2.__values__ = undefined2;
+ if (result2) {
+ previous.__wrapped__ = clone2;
+ } else {
+ result2 = clone2;
+ }
+ var previous = clone2;
+ parent2 = parent2.__wrapped__;
+ }
+ previous.__wrapped__ = value;
+ return result2;
+ }
+ function wrapperReverse() {
+ var value = this.__wrapped__;
+ if (value instanceof LazyWrapper) {
+ var wrapped = value;
+ if (this.__actions__.length) {
+ wrapped = new LazyWrapper(this);
+ }
+ wrapped = wrapped.reverse();
+ wrapped.__actions__.push({
+ "func": thru,
+ "args": [reverse],
+ "thisArg": undefined2
+ });
+ return new LodashWrapper(wrapped, this.__chain__);
+ }
+ return this.thru(reverse);
+ }
+ function wrapperValue() {
+ return baseWrapperValue(this.__wrapped__, this.__actions__);
+ }
+ var countBy = createAggregator(function(result2, value, key) {
+ if (hasOwnProperty.call(result2, key)) {
+ ++result2[key];
+ } else {
+ baseAssignValue(result2, key, 1);
+ }
+ });
+ function every(collection, predicate, guard) {
+ var func = isArray(collection) ? arrayEvery : baseEvery;
+ if (guard && isIterateeCall(collection, predicate, guard)) {
+ predicate = undefined2;
+ }
+ return func(collection, getIteratee(predicate, 3));
+ }
+ function filter(collection, predicate) {
+ var func = isArray(collection) ? arrayFilter : baseFilter;
+ return func(collection, getIteratee(predicate, 3));
+ }
+ var find = createFind(findIndex);
+ var findLast = createFind(findLastIndex);
+ function flatMap(collection, iteratee2) {
+ return baseFlatten(map(collection, iteratee2), 1);
+ }
+ function flatMapDeep(collection, iteratee2) {
+ return baseFlatten(map(collection, iteratee2), INFINITY);
+ }
+ function flatMapDepth(collection, iteratee2, depth) {
+ depth = depth === undefined2 ? 1 : toInteger(depth);
+ return baseFlatten(map(collection, iteratee2), depth);
+ }
+ function forEach(collection, iteratee2) {
+ var func = isArray(collection) ? arrayEach : baseEach;
+ return func(collection, getIteratee(iteratee2, 3));
+ }
+ function forEachRight(collection, iteratee2) {
+ var func = isArray(collection) ? arrayEachRight : baseEachRight;
+ return func(collection, getIteratee(iteratee2, 3));
+ }
+ var groupBy = createAggregator(function(result2, value, key) {
+ if (hasOwnProperty.call(result2, key)) {
+ result2[key].push(value);
+ } else {
+ baseAssignValue(result2, key, [value]);
+ }
+ });
+ function includes(collection, value, fromIndex, guard) {
+ collection = isArrayLike(collection) ? collection : values(collection);
+ fromIndex = fromIndex && !guard ? toInteger(fromIndex) : 0;
+ var length = collection.length;
+ if (fromIndex < 0) {
+ fromIndex = nativeMax(length + fromIndex, 0);
+ }
+ return isString(collection) ? fromIndex <= length && collection.indexOf(value, fromIndex) > -1 : !!length && baseIndexOf(collection, value, fromIndex) > -1;
+ }
+ var invokeMap = baseRest(function(collection, path5, args) {
+ var index = -1, isFunc = typeof path5 == "function", result2 = isArrayLike(collection) ? Array2(collection.length) : [];
+ baseEach(collection, function(value) {
+ result2[++index] = isFunc ? apply(path5, value, args) : baseInvoke(value, path5, args);
+ });
+ return result2;
+ });
+ var keyBy = createAggregator(function(result2, value, key) {
+ baseAssignValue(result2, key, value);
+ });
+ function map(collection, iteratee2) {
+ var func = isArray(collection) ? arrayMap : baseMap;
+ return func(collection, getIteratee(iteratee2, 3));
+ }
+ function orderBy(collection, iteratees, orders, guard) {
+ if (collection == null) {
+ return [];
+ }
+ if (!isArray(iteratees)) {
+ iteratees = iteratees == null ? [] : [iteratees];
+ }
+ orders = guard ? undefined2 : orders;
+ if (!isArray(orders)) {
+ orders = orders == null ? [] : [orders];
+ }
+ return baseOrderBy(collection, iteratees, orders);
+ }
+ var partition = createAggregator(function(result2, value, key) {
+ result2[key ? 0 : 1].push(value);
+ }, function() {
+ return [[], []];
+ });
+ function reduce(collection, iteratee2, accumulator) {
+ var func = isArray(collection) ? arrayReduce : baseReduce, initAccum = arguments.length < 3;
+ return func(collection, getIteratee(iteratee2, 4), accumulator, initAccum, baseEach);
+ }
+ function reduceRight(collection, iteratee2, accumulator) {
+ var func = isArray(collection) ? arrayReduceRight : baseReduce, initAccum = arguments.length < 3;
+ return func(collection, getIteratee(iteratee2, 4), accumulator, initAccum, baseEachRight);
+ }
+ function reject(collection, predicate) {
+ var func = isArray(collection) ? arrayFilter : baseFilter;
+ return func(collection, negate(getIteratee(predicate, 3)));
+ }
+ function sample(collection) {
+ var func = isArray(collection) ? arraySample : baseSample;
+ return func(collection);
+ }
+ function sampleSize(collection, n, guard) {
+ if (guard ? isIterateeCall(collection, n, guard) : n === undefined2) {
+ n = 1;
+ } else {
+ n = toInteger(n);
+ }
+ var func = isArray(collection) ? arraySampleSize : baseSampleSize;
+ return func(collection, n);
+ }
+ function shuffle(collection) {
+ var func = isArray(collection) ? arrayShuffle : baseShuffle;
+ return func(collection);
+ }
+ function size(collection) {
+ if (collection == null) {
+ return 0;
+ }
+ if (isArrayLike(collection)) {
+ return isString(collection) ? stringSize(collection) : collection.length;
+ }
+ var tag = getTag(collection);
+ if (tag == mapTag || tag == setTag) {
+ return collection.size;
+ }
+ return baseKeys(collection).length;
+ }
+ function some(collection, predicate, guard) {
+ var func = isArray(collection) ? arraySome : baseSome;
+ if (guard && isIterateeCall(collection, predicate, guard)) {
+ predicate = undefined2;
+ }
+ return func(collection, getIteratee(predicate, 3));
+ }
+ var sortBy = baseRest(function(collection, iteratees) {
+ if (collection == null) {
+ return [];
+ }
+ var length = iteratees.length;
+ if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {
+ iteratees = [];
+ } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {
+ iteratees = [iteratees[0]];
+ }
+ return baseOrderBy(collection, baseFlatten(iteratees, 1), []);
+ });
+ var now = ctxNow || function() {
+ return root.Date.now();
+ };
+ function after(n, func) {
+ if (typeof func != "function") {
+ throw new TypeError2(FUNC_ERROR_TEXT);
+ }
+ n = toInteger(n);
+ return function() {
+ if (--n < 1) {
+ return func.apply(this, arguments);
+ }
+ };
+ }
+ function ary(func, n, guard) {
+ n = guard ? undefined2 : n;
+ n = func && n == null ? func.length : n;
+ return createWrap(func, WRAP_ARY_FLAG, undefined2, undefined2, undefined2, undefined2, n);
+ }
+ function before(n, func) {
+ var result2;
+ if (typeof func != "function") {
+ throw new TypeError2(FUNC_ERROR_TEXT);
+ }
+ n = toInteger(n);
+ return function() {
+ if (--n > 0) {
+ result2 = func.apply(this, arguments);
+ }
+ if (n <= 1) {
+ func = undefined2;
+ }
+ return result2;
+ };
+ }
+ var bind = baseRest(function(func, thisArg, partials) {
+ var bitmask = WRAP_BIND_FLAG;
+ if (partials.length) {
+ var holders = replaceHolders(partials, getHolder(bind));
+ bitmask |= WRAP_PARTIAL_FLAG;
+ }
+ return createWrap(func, bitmask, thisArg, partials, holders);
+ });
+ var bindKey = baseRest(function(object, key, partials) {
+ var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;
+ if (partials.length) {
+ var holders = replaceHolders(partials, getHolder(bindKey));
+ bitmask |= WRAP_PARTIAL_FLAG;
+ }
+ return createWrap(key, bitmask, object, partials, holders);
+ });
+ function curry(func, arity, guard) {
+ arity = guard ? undefined2 : arity;
+ var result2 = createWrap(func, WRAP_CURRY_FLAG, undefined2, undefined2, undefined2, undefined2, undefined2, arity);
+ result2.placeholder = curry.placeholder;
+ return result2;
+ }
+ function curryRight(func, arity, guard) {
+ arity = guard ? undefined2 : arity;
+ var result2 = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined2, undefined2, undefined2, undefined2, undefined2, arity);
+ result2.placeholder = curryRight.placeholder;
+ return result2;
+ }
+ function debounce(func, wait, options) {
+ var lastArgs, lastThis, maxWait, result2, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true;
+ if (typeof func != "function") {
+ throw new TypeError2(FUNC_ERROR_TEXT);
+ }
+ wait = toNumber(wait) || 0;
+ if (isObject(options)) {
+ leading = !!options.leading;
+ maxing = "maxWait" in options;
+ maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
+ trailing = "trailing" in options ? !!options.trailing : trailing;
+ }
+ function invokeFunc(time) {
+ var args = lastArgs, thisArg = lastThis;
+ lastArgs = lastThis = undefined2;
+ lastInvokeTime = time;
+ result2 = func.apply(thisArg, args);
+ return result2;
+ }
+ function leadingEdge(time) {
+ lastInvokeTime = time;
+ timerId = setTimeout2(timerExpired, wait);
+ return leading ? invokeFunc(time) : result2;
+ }
+ function remainingWait(time) {
+ var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall;
+ return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;
+ }
+ function shouldInvoke(time) {
+ var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime;
+ return lastCallTime === undefined2 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;
+ }
+ function timerExpired() {
+ var time = now();
+ if (shouldInvoke(time)) {
+ return trailingEdge(time);
+ }
+ timerId = setTimeout2(timerExpired, remainingWait(time));
+ }
+ function trailingEdge(time) {
+ timerId = undefined2;
+ if (trailing && lastArgs) {
+ return invokeFunc(time);
+ }
+ lastArgs = lastThis = undefined2;
+ return result2;
+ }
+ function cancel() {
+ if (timerId !== undefined2) {
+ clearTimeout2(timerId);
+ }
+ lastInvokeTime = 0;
+ lastArgs = lastCallTime = lastThis = timerId = undefined2;
+ }
+ function flush() {
+ return timerId === undefined2 ? result2 : trailingEdge(now());
+ }
+ function debounced() {
+ var time = now(), isInvoking = shouldInvoke(time);
+ lastArgs = arguments;
+ lastThis = this;
+ lastCallTime = time;
+ if (isInvoking) {
+ if (timerId === undefined2) {
+ return leadingEdge(lastCallTime);
+ }
+ if (maxing) {
+ clearTimeout2(timerId);
+ timerId = setTimeout2(timerExpired, wait);
+ return invokeFunc(lastCallTime);
+ }
+ }
+ if (timerId === undefined2) {
+ timerId = setTimeout2(timerExpired, wait);
+ }
+ return result2;
+ }
+ debounced.cancel = cancel;
+ debounced.flush = flush;
+ return debounced;
+ }
+ var defer = baseRest(function(func, args) {
+ return baseDelay(func, 1, args);
+ });
+ var delay = baseRest(function(func, wait, args) {
+ return baseDelay(func, toNumber(wait) || 0, args);
+ });
+ function flip(func) {
+ return createWrap(func, WRAP_FLIP_FLAG);
+ }
+ function memoize(func, resolver) {
+ if (typeof func != "function" || resolver != null && typeof resolver != "function") {
+ throw new TypeError2(FUNC_ERROR_TEXT);
+ }
+ var memoized = function() {
+ var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache;
+ if (cache.has(key)) {
+ return cache.get(key);
+ }
+ var result2 = func.apply(this, args);
+ memoized.cache = cache.set(key, result2) || cache;
+ return result2;
+ };
+ memoized.cache = new (memoize.Cache || MapCache)();
+ return memoized;
+ }
+ memoize.Cache = MapCache;
+ function negate(predicate) {
+ if (typeof predicate != "function") {
+ throw new TypeError2(FUNC_ERROR_TEXT);
+ }
+ return function() {
+ var args = arguments;
+ switch (args.length) {
+ case 0:
+ return !predicate.call(this);
+ case 1:
+ return !predicate.call(this, args[0]);
+ case 2:
+ return !predicate.call(this, args[0], args[1]);
+ case 3:
+ return !predicate.call(this, args[0], args[1], args[2]);
+ }
+ return !predicate.apply(this, args);
+ };
+ }
+ function once(func) {
+ return before(2, func);
+ }
+ var overArgs = castRest(function(func, transforms) {
+ transforms = transforms.length == 1 && isArray(transforms[0]) ? arrayMap(transforms[0], baseUnary(getIteratee())) : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));
+ var funcsLength = transforms.length;
+ return baseRest(function(args) {
+ var index = -1, length = nativeMin(args.length, funcsLength);
+ while (++index < length) {
+ args[index] = transforms[index].call(this, args[index]);
+ }
+ return apply(func, this, args);
+ });
+ });
+ var partial = baseRest(function(func, partials) {
+ var holders = replaceHolders(partials, getHolder(partial));
+ return createWrap(func, WRAP_PARTIAL_FLAG, undefined2, partials, holders);
+ });
+ var partialRight = baseRest(function(func, partials) {
+ var holders = replaceHolders(partials, getHolder(partialRight));
+ return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined2, partials, holders);
+ });
+ var rearg = flatRest(function(func, indexes) {
+ return createWrap(func, WRAP_REARG_FLAG, undefined2, undefined2, undefined2, indexes);
+ });
+ function rest(func, start) {
+ if (typeof func != "function") {
+ throw new TypeError2(FUNC_ERROR_TEXT);
+ }
+ start = start === undefined2 ? start : toInteger(start);
+ return baseRest(func, start);
+ }
+ function spread(func, start) {
+ if (typeof func != "function") {
+ throw new TypeError2(FUNC_ERROR_TEXT);
+ }
+ start = start == null ? 0 : nativeMax(toInteger(start), 0);
+ return baseRest(function(args) {
+ var array = args[start], otherArgs = castSlice(args, 0, start);
+ if (array) {
+ arrayPush(otherArgs, array);
+ }
+ return apply(func, this, otherArgs);
+ });
+ }
+ function throttle(func, wait, options) {
+ var leading = true, trailing = true;
+ if (typeof func != "function") {
+ throw new TypeError2(FUNC_ERROR_TEXT);
+ }
+ if (isObject(options)) {
+ leading = "leading" in options ? !!options.leading : leading;
+ trailing = "trailing" in options ? !!options.trailing : trailing;
+ }
+ return debounce(func, wait, {
+ "leading": leading,
+ "maxWait": wait,
+ "trailing": trailing
+ });
+ }
+ function unary(func) {
+ return ary(func, 1);
+ }
+ function wrap(value, wrapper) {
+ return partial(castFunction(wrapper), value);
+ }
+ function castArray() {
+ if (!arguments.length) {
+ return [];
+ }
+ var value = arguments[0];
+ return isArray(value) ? value : [value];
+ }
+ function clone(value) {
+ return baseClone(value, CLONE_SYMBOLS_FLAG);
+ }
+ function cloneWith(value, customizer) {
+ customizer = typeof customizer == "function" ? customizer : undefined2;
+ return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);
+ }
+ function cloneDeep(value) {
+ return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
+ }
+ function cloneDeepWith(value, customizer) {
+ customizer = typeof customizer == "function" ? customizer : undefined2;
+ return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);
+ }
+ function conformsTo(object, source) {
+ return source == null || baseConformsTo(object, source, keys(source));
+ }
+ function eq(value, other) {
+ return value === other || value !== value && other !== other;
+ }
+ var gt = createRelationalOperation(baseGt);
+ var gte = createRelationalOperation(function(value, other) {
+ return value >= other;
+ });
+ var isArguments = baseIsArguments(/* @__PURE__ */ function() {
+ return arguments;
+ }()) ? baseIsArguments : function(value) {
+ return isObjectLike(value) && hasOwnProperty.call(value, "callee") && !propertyIsEnumerable.call(value, "callee");
+ };
+ var isArray = Array2.isArray;
+ var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;
+ function isArrayLike(value) {
+ return value != null && isLength(value.length) && !isFunction(value);
+ }
+ function isArrayLikeObject(value) {
+ return isObjectLike(value) && isArrayLike(value);
+ }
+ function isBoolean(value) {
+ return value === true || value === false || isObjectLike(value) && baseGetTag(value) == boolTag;
+ }
+ var isBuffer = nativeIsBuffer || stubFalse;
+ var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;
+ function isElement(value) {
+ return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);
+ }
+ function isEmpty(value) {
+ if (value == null) {
+ return true;
+ }
+ if (isArrayLike(value) && (isArray(value) || typeof value == "string" || typeof value.splice == "function" || isBuffer(value) || isTypedArray(value) || isArguments(value))) {
+ return !value.length;
+ }
+ var tag = getTag(value);
+ if (tag == mapTag || tag == setTag) {
+ return !value.size;
+ }
+ if (isPrototype(value)) {
+ return !baseKeys(value).length;
+ }
+ for (var key in value) {
+ if (hasOwnProperty.call(value, key)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ function isEqual(value, other) {
+ return baseIsEqual(value, other);
+ }
+ function isEqualWith(value, other, customizer) {
+ customizer = typeof customizer == "function" ? customizer : undefined2;
+ var result2 = customizer ? customizer(value, other) : undefined2;
+ return result2 === undefined2 ? baseIsEqual(value, other, undefined2, customizer) : !!result2;
+ }
+ function isError(value) {
+ if (!isObjectLike(value)) {
+ return false;
+ }
+ var tag = baseGetTag(value);
+ return tag == errorTag || tag == domExcTag || typeof value.message == "string" && typeof value.name == "string" && !isPlainObject(value);
+ }
+ function isFinite2(value) {
+ return typeof value == "number" && nativeIsFinite(value);
+ }
+ function isFunction(value) {
+ if (!isObject(value)) {
+ return false;
+ }
+ var tag = baseGetTag(value);
+ return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
+ }
+ function isInteger(value) {
+ return typeof value == "number" && value == toInteger(value);
+ }
+ function isLength(value) {
+ return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
+ }
+ function isObject(value) {
+ var type = typeof value;
+ return value != null && (type == "object" || type == "function");
+ }
+ function isObjectLike(value) {
+ return value != null && typeof value == "object";
+ }
+ var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;
+ function isMatch(object, source) {
+ return object === source || baseIsMatch(object, source, getMatchData(source));
+ }
+ function isMatchWith(object, source, customizer) {
+ customizer = typeof customizer == "function" ? customizer : undefined2;
+ return baseIsMatch(object, source, getMatchData(source), customizer);
+ }
+ function isNaN2(value) {
+ return isNumber(value) && value != +value;
+ }
+ function isNative(value) {
+ if (isMaskable(value)) {
+ throw new Error2(CORE_ERROR_TEXT);
+ }
+ return baseIsNative(value);
+ }
+ function isNull(value) {
+ return value === null;
+ }
+ function isNil(value) {
+ return value == null;
+ }
+ function isNumber(value) {
+ return typeof value == "number" || isObjectLike(value) && baseGetTag(value) == numberTag;
+ }
+ function isPlainObject(value) {
+ if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
+ return false;
+ }
+ var proto = getPrototype(value);
+ if (proto === null) {
+ return true;
+ }
+ var Ctor = hasOwnProperty.call(proto, "constructor") && proto.constructor;
+ return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;
+ }
+ var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;
+ function isSafeInteger(value) {
+ return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;
+ }
+ var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;
+ function isString(value) {
+ return typeof value == "string" || !isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag;
+ }
+ function isSymbol(value) {
+ return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag;
+ }
+ var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
+ function isUndefined(value) {
+ return value === undefined2;
+ }
+ function isWeakMap(value) {
+ return isObjectLike(value) && getTag(value) == weakMapTag;
+ }
+ function isWeakSet(value) {
+ return isObjectLike(value) && baseGetTag(value) == weakSetTag;
+ }
+ var lt = createRelationalOperation(baseLt);
+ var lte = createRelationalOperation(function(value, other) {
+ return value <= other;
+ });
+ function toArray(value) {
+ if (!value) {
+ return [];
+ }
+ if (isArrayLike(value)) {
+ return isString(value) ? stringToArray(value) : copyArray(value);
+ }
+ if (symIterator && value[symIterator]) {
+ return iteratorToArray(value[symIterator]());
+ }
+ var tag = getTag(value), func = tag == mapTag ? mapToArray : tag == setTag ? setToArray : values;
+ return func(value);
+ }
+ function toFinite(value) {
+ if (!value) {
+ return value === 0 ? value : 0;
+ }
+ value = toNumber(value);
+ if (value === INFINITY || value === -INFINITY) {
+ var sign = value < 0 ? -1 : 1;
+ return sign * MAX_INTEGER;
+ }
+ return value === value ? value : 0;
+ }
+ function toInteger(value) {
+ var result2 = toFinite(value), remainder = result2 % 1;
+ return result2 === result2 ? remainder ? result2 - remainder : result2 : 0;
+ }
+ function toLength(value) {
+ return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;
+ }
+ function toNumber(value) {
+ if (typeof value == "number") {
+ return value;
+ }
+ if (isSymbol(value)) {
+ return NAN;
+ }
+ if (isObject(value)) {
+ var other = typeof value.valueOf == "function" ? value.valueOf() : value;
+ value = isObject(other) ? other + "" : other;
+ }
+ if (typeof value != "string") {
+ return value === 0 ? value : +value;
+ }
+ value = baseTrim(value);
+ var isBinary = reIsBinary.test(value);
+ return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
+ }
+ function toPlainObject(value) {
+ return copyObject(value, keysIn(value));
+ }
+ function toSafeInteger(value) {
+ return value ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) : value === 0 ? value : 0;
+ }
+ function toString(value) {
+ return value == null ? "" : baseToString(value);
+ }
+ var assign = createAssigner(function(object, source) {
+ if (isPrototype(source) || isArrayLike(source)) {
+ copyObject(source, keys(source), object);
+ return;
+ }
+ for (var key in source) {
+ if (hasOwnProperty.call(source, key)) {
+ assignValue(object, key, source[key]);
+ }
+ }
+ });
+ var assignIn = createAssigner(function(object, source) {
+ copyObject(source, keysIn(source), object);
+ });
+ var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {
+ copyObject(source, keysIn(source), object, customizer);
+ });
+ var assignWith = createAssigner(function(object, source, srcIndex, customizer) {
+ copyObject(source, keys(source), object, customizer);
+ });
+ var at = flatRest(baseAt);
+ function create(prototype, properties) {
+ var result2 = baseCreate(prototype);
+ return properties == null ? result2 : baseAssign(result2, properties);
+ }
+ var defaults = baseRest(function(object, sources) {
+ object = Object2(object);
+ var index = -1;
+ var length = sources.length;
+ var guard = length > 2 ? sources[2] : undefined2;
+ if (guard && isIterateeCall(sources[0], sources[1], guard)) {
+ length = 1;
+ }
+ while (++index < length) {
+ var source = sources[index];
+ var props = keysIn(source);
+ var propsIndex = -1;
+ var propsLength = props.length;
+ while (++propsIndex < propsLength) {
+ var key = props[propsIndex];
+ var value = object[key];
+ if (value === undefined2 || eq(value, objectProto[key]) && !hasOwnProperty.call(object, key)) {
+ object[key] = source[key];
+ }
+ }
+ }
+ return object;
+ });
+ var defaultsDeep = baseRest(function(args) {
+ args.push(undefined2, customDefaultsMerge);
+ return apply(mergeWith, undefined2, args);
+ });
+ function findKey(object, predicate) {
+ return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);
+ }
+ function findLastKey(object, predicate) {
+ return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);
+ }
+ function forIn(object, iteratee2) {
+ return object == null ? object : baseFor(object, getIteratee(iteratee2, 3), keysIn);
+ }
+ function forInRight(object, iteratee2) {
+ return object == null ? object : baseForRight(object, getIteratee(iteratee2, 3), keysIn);
+ }
+ function forOwn(object, iteratee2) {
+ return object && baseForOwn(object, getIteratee(iteratee2, 3));
+ }
+ function forOwnRight(object, iteratee2) {
+ return object && baseForOwnRight(object, getIteratee(iteratee2, 3));
+ }
+ function functions(object) {
+ return object == null ? [] : baseFunctions(object, keys(object));
+ }
+ function functionsIn(object) {
+ return object == null ? [] : baseFunctions(object, keysIn(object));
+ }
+ function get(object, path5, defaultValue) {
+ var result2 = object == null ? undefined2 : baseGet(object, path5);
+ return result2 === undefined2 ? defaultValue : result2;
+ }
+ function has(object, path5) {
+ return object != null && hasPath(object, path5, baseHas);
+ }
+ function hasIn(object, path5) {
+ return object != null && hasPath(object, path5, baseHasIn);
+ }
+ var invert = createInverter(function(result2, value, key) {
+ if (value != null && typeof value.toString != "function") {
+ value = nativeObjectToString.call(value);
+ }
+ result2[value] = key;
+ }, constant(identity));
+ var invertBy = createInverter(function(result2, value, key) {
+ if (value != null && typeof value.toString != "function") {
+ value = nativeObjectToString.call(value);
+ }
+ if (hasOwnProperty.call(result2, value)) {
+ result2[value].push(key);
+ } else {
+ result2[value] = [key];
+ }
+ }, getIteratee);
+ var invoke = baseRest(baseInvoke);
+ function keys(object) {
+ return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
+ }
+ function keysIn(object) {
+ return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
+ }
+ function mapKeys(object, iteratee2) {
+ var result2 = {};
+ iteratee2 = getIteratee(iteratee2, 3);
+ baseForOwn(object, function(value, key, object2) {
+ baseAssignValue(result2, iteratee2(value, key, object2), value);
+ });
+ return result2;
+ }
+ function mapValues(object, iteratee2) {
+ var result2 = {};
+ iteratee2 = getIteratee(iteratee2, 3);
+ baseForOwn(object, function(value, key, object2) {
+ baseAssignValue(result2, key, iteratee2(value, key, object2));
+ });
+ return result2;
+ }
+ var merge = createAssigner(function(object, source, srcIndex) {
+ baseMerge(object, source, srcIndex);
+ });
+ var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {
+ baseMerge(object, source, srcIndex, customizer);
+ });
+ var omit = flatRest(function(object, paths) {
+ var result2 = {};
+ if (object == null) {
+ return result2;
+ }
+ var isDeep = false;
+ paths = arrayMap(paths, function(path5) {
+ path5 = castPath(path5, object);
+ isDeep || (isDeep = path5.length > 1);
+ return path5;
+ });
+ copyObject(object, getAllKeysIn(object), result2);
+ if (isDeep) {
+ result2 = baseClone(result2, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);
+ }
+ var length = paths.length;
+ while (length--) {
+ baseUnset(result2, paths[length]);
+ }
+ return result2;
+ });
+ function omitBy(object, predicate) {
+ return pickBy(object, negate(getIteratee(predicate)));
+ }
+ var pick = flatRest(function(object, paths) {
+ return object == null ? {} : basePick(object, paths);
+ });
+ function pickBy(object, predicate) {
+ if (object == null) {
+ return {};
+ }
+ var props = arrayMap(getAllKeysIn(object), function(prop) {
+ return [prop];
+ });
+ predicate = getIteratee(predicate);
+ return basePickBy(object, props, function(value, path5) {
+ return predicate(value, path5[0]);
+ });
+ }
+ function result(object, path5, defaultValue) {
+ path5 = castPath(path5, object);
+ var index = -1, length = path5.length;
+ if (!length) {
+ length = 1;
+ object = undefined2;
+ }
+ while (++index < length) {
+ var value = object == null ? undefined2 : object[toKey(path5[index])];
+ if (value === undefined2) {
+ index = length;
+ value = defaultValue;
+ }
+ object = isFunction(value) ? value.call(object) : value;
+ }
+ return object;
+ }
+ function set(object, path5, value) {
+ return object == null ? object : baseSet(object, path5, value);
+ }
+ function setWith(object, path5, value, customizer) {
+ customizer = typeof customizer == "function" ? customizer : undefined2;
+ return object == null ? object : baseSet(object, path5, value, customizer);
+ }
+ var toPairs = createToPairs(keys);
+ var toPairsIn = createToPairs(keysIn);
+ function transform(object, iteratee2, accumulator) {
+ var isArr = isArray(object), isArrLike = isArr || isBuffer(object) || isTypedArray(object);
+ iteratee2 = getIteratee(iteratee2, 4);
+ if (accumulator == null) {
+ var Ctor = object && object.constructor;
+ if (isArrLike) {
+ accumulator = isArr ? new Ctor() : [];
+ } else if (isObject(object)) {
+ accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};
+ } else {
+ accumulator = {};
+ }
+ }
+ (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object2) {
+ return iteratee2(accumulator, value, index, object2);
+ });
+ return accumulator;
+ }
+ function unset(object, path5) {
+ return object == null ? true : baseUnset(object, path5);
+ }
+ function update(object, path5, updater) {
+ return object == null ? object : baseUpdate(object, path5, castFunction(updater));
+ }
+ function updateWith(object, path5, updater, customizer) {
+ customizer = typeof customizer == "function" ? customizer : undefined2;
+ return object == null ? object : baseUpdate(object, path5, castFunction(updater), customizer);
+ }
+ function values(object) {
+ return object == null ? [] : baseValues(object, keys(object));
+ }
+ function valuesIn(object) {
+ return object == null ? [] : baseValues(object, keysIn(object));
+ }
+ function clamp(number, lower, upper) {
+ if (upper === undefined2) {
+ upper = lower;
+ lower = undefined2;
+ }
+ if (upper !== undefined2) {
+ upper = toNumber(upper);
+ upper = upper === upper ? upper : 0;
+ }
+ if (lower !== undefined2) {
+ lower = toNumber(lower);
+ lower = lower === lower ? lower : 0;
+ }
+ return baseClamp(toNumber(number), lower, upper);
+ }
+ function inRange(number, start, end) {
+ start = toFinite(start);
+ if (end === undefined2) {
+ end = start;
+ start = 0;
+ } else {
+ end = toFinite(end);
+ }
+ number = toNumber(number);
+ return baseInRange(number, start, end);
+ }
+ function random(lower, upper, floating) {
+ if (floating && typeof floating != "boolean" && isIterateeCall(lower, upper, floating)) {
+ upper = floating = undefined2;
+ }
+ if (floating === undefined2) {
+ if (typeof upper == "boolean") {
+ floating = upper;
+ upper = undefined2;
+ } else if (typeof lower == "boolean") {
+ floating = lower;
+ lower = undefined2;
+ }
+ }
+ if (lower === undefined2 && upper === undefined2) {
+ lower = 0;
+ upper = 1;
+ } else {
+ lower = toFinite(lower);
+ if (upper === undefined2) {
+ upper = lower;
+ lower = 0;
+ } else {
+ upper = toFinite(upper);
+ }
+ }
+ if (lower > upper) {
+ var temp = lower;
+ lower = upper;
+ upper = temp;
+ }
+ if (floating || lower % 1 || upper % 1) {
+ var rand = nativeRandom();
+ return nativeMin(lower + rand * (upper - lower + freeParseFloat("1e-" + ((rand + "").length - 1))), upper);
+ }
+ return baseRandom(lower, upper);
+ }
+ var camelCase = createCompounder(function(result2, word, index) {
+ word = word.toLowerCase();
+ return result2 + (index ? capitalize(word) : word);
+ });
+ function capitalize(string) {
+ return upperFirst(toString(string).toLowerCase());
+ }
+ function deburr(string) {
+ string = toString(string);
+ return string && string.replace(reLatin, deburrLetter).replace(reComboMark, "");
+ }
+ function endsWith(string, target, position) {
+ string = toString(string);
+ target = baseToString(target);
+ var length = string.length;
+ position = position === undefined2 ? length : baseClamp(toInteger(position), 0, length);
+ var end = position;
+ position -= target.length;
+ return position >= 0 && string.slice(position, end) == target;
+ }
+ function escape(string) {
+ string = toString(string);
+ return string && reHasUnescapedHtml.test(string) ? string.replace(reUnescapedHtml, escapeHtmlChar) : string;
+ }
+ function escapeRegExp(string) {
+ string = toString(string);
+ return string && reHasRegExpChar.test(string) ? string.replace(reRegExpChar, "\\$&") : string;
+ }
+ var kebabCase = createCompounder(function(result2, word, index) {
+ return result2 + (index ? "-" : "") + word.toLowerCase();
+ });
+ var lowerCase = createCompounder(function(result2, word, index) {
+ return result2 + (index ? " " : "") + word.toLowerCase();
+ });
+ var lowerFirst = createCaseFirst("toLowerCase");
+ function pad(string, length, chars) {
+ string = toString(string);
+ length = toInteger(length);
+ var strLength = length ? stringSize(string) : 0;
+ if (!length || strLength >= length) {
+ return string;
+ }
+ var mid = (length - strLength) / 2;
+ return createPadding(nativeFloor(mid), chars) + string + createPadding(nativeCeil(mid), chars);
+ }
+ function padEnd(string, length, chars) {
+ string = toString(string);
+ length = toInteger(length);
+ var strLength = length ? stringSize(string) : 0;
+ return length && strLength < length ? string + createPadding(length - strLength, chars) : string;
+ }
+ function padStart(string, length, chars) {
+ string = toString(string);
+ length = toInteger(length);
+ var strLength = length ? stringSize(string) : 0;
+ return length && strLength < length ? createPadding(length - strLength, chars) + string : string;
+ }
+ function parseInt2(string, radix, guard) {
+ if (guard || radix == null) {
+ radix = 0;
+ } else if (radix) {
+ radix = +radix;
+ }
+ return nativeParseInt(toString(string).replace(reTrimStart, ""), radix || 0);
+ }
+ function repeat(string, n, guard) {
+ if (guard ? isIterateeCall(string, n, guard) : n === undefined2) {
+ n = 1;
+ } else {
+ n = toInteger(n);
+ }
+ return baseRepeat(toString(string), n);
+ }
+ function replace() {
+ var args = arguments, string = toString(args[0]);
+ return args.length < 3 ? string : string.replace(args[1], args[2]);
+ }
+ var snakeCase2 = createCompounder(function(result2, word, index) {
+ return result2 + (index ? "_" : "") + word.toLowerCase();
+ });
+ function split(string, separator, limit) {
+ if (limit && typeof limit != "number" && isIterateeCall(string, separator, limit)) {
+ separator = limit = undefined2;
+ }
+ limit = limit === undefined2 ? MAX_ARRAY_LENGTH : limit >>> 0;
+ if (!limit) {
+ return [];
+ }
+ string = toString(string);
+ if (string && (typeof separator == "string" || separator != null && !isRegExp(separator))) {
+ separator = baseToString(separator);
+ if (!separator && hasUnicode(string)) {
+ return castSlice(stringToArray(string), 0, limit);
+ }
+ }
+ return string.split(separator, limit);
+ }
+ var startCase = createCompounder(function(result2, word, index) {
+ return result2 + (index ? " " : "") + upperFirst(word);
+ });
+ function startsWith(string, target, position) {
+ string = toString(string);
+ position = position == null ? 0 : baseClamp(toInteger(position), 0, string.length);
+ target = baseToString(target);
+ return string.slice(position, position + target.length) == target;
+ }
+ function template(string, options, guard) {
+ var settings = lodash.templateSettings;
+ if (guard && isIterateeCall(string, options, guard)) {
+ options = undefined2;
+ }
+ string = toString(string);
+ options = assignInWith({}, options, settings, customDefaultsAssignIn);
+ var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn), importsKeys = keys(imports), importsValues = baseValues(imports, importsKeys);
+ var isEscaping, isEvaluating, index = 0, interpolate = options.interpolate || reNoMatch, source = "__p += '";
+ var reDelimiters = RegExp2(
+ (options.escape || reNoMatch).source + "|" + interpolate.source + "|" + (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + "|" + (options.evaluate || reNoMatch).source + "|$",
+ "g"
+ );
+ var sourceURL = "//# sourceURL=" + (hasOwnProperty.call(options, "sourceURL") ? (options.sourceURL + "").replace(/\s/g, " ") : "lodash.templateSources[" + ++templateCounter + "]") + "\n";
+ string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
+ interpolateValue || (interpolateValue = esTemplateValue);
+ source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);
+ if (escapeValue) {
+ isEscaping = true;
+ source += "' +\n__e(" + escapeValue + ") +\n'";
+ }
+ if (evaluateValue) {
+ isEvaluating = true;
+ source += "';\n" + evaluateValue + ";\n__p += '";
+ }
+ if (interpolateValue) {
+ source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
+ }
+ index = offset + match.length;
+ return match;
+ });
+ source += "';\n";
+ var variable = hasOwnProperty.call(options, "variable") && options.variable;
+ if (!variable) {
+ source = "with (obj) {\n" + source + "\n}\n";
+ } else if (reForbiddenIdentifierChars.test(variable)) {
+ throw new Error2(INVALID_TEMPL_VAR_ERROR_TEXT);
+ }
+ source = (isEvaluating ? source.replace(reEmptyStringLeading, "") : source).replace(reEmptyStringMiddle, "$1").replace(reEmptyStringTrailing, "$1;");
+ source = "function(" + (variable || "obj") + ") {\n" + (variable ? "" : "obj || (obj = {});\n") + "var __t, __p = ''" + (isEscaping ? ", __e = _.escape" : "") + (isEvaluating ? ", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n" : ";\n") + source + "return __p\n}";
+ var result2 = attempt(function() {
+ return Function2(importsKeys, sourceURL + "return " + source).apply(undefined2, importsValues);
+ });
+ result2.source = source;
+ if (isError(result2)) {
+ throw result2;
+ }
+ return result2;
+ }
+ function toLower(value) {
+ return toString(value).toLowerCase();
+ }
+ function toUpper(value) {
+ return toString(value).toUpperCase();
+ }
+ function trim(string, chars, guard) {
+ string = toString(string);
+ if (string && (guard || chars === undefined2)) {
+ return baseTrim(string);
+ }
+ if (!string || !(chars = baseToString(chars))) {
+ return string;
+ }
+ var strSymbols = stringToArray(string), chrSymbols = stringToArray(chars), start = charsStartIndex(strSymbols, chrSymbols), end = charsEndIndex(strSymbols, chrSymbols) + 1;
+ return castSlice(strSymbols, start, end).join("");
+ }
+ function trimEnd(string, chars, guard) {
+ string = toString(string);
+ if (string && (guard || chars === undefined2)) {
+ return string.slice(0, trimmedEndIndex(string) + 1);
+ }
+ if (!string || !(chars = baseToString(chars))) {
+ return string;
+ }
+ var strSymbols = stringToArray(string), end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;
+ return castSlice(strSymbols, 0, end).join("");
+ }
+ function trimStart(string, chars, guard) {
+ string = toString(string);
+ if (string && (guard || chars === undefined2)) {
+ return string.replace(reTrimStart, "");
+ }
+ if (!string || !(chars = baseToString(chars))) {
+ return string;
+ }
+ var strSymbols = stringToArray(string), start = charsStartIndex(strSymbols, stringToArray(chars));
+ return castSlice(strSymbols, start).join("");
+ }
+ function truncate(string, options) {
+ var length = DEFAULT_TRUNC_LENGTH, omission = DEFAULT_TRUNC_OMISSION;
+ if (isObject(options)) {
+ var separator = "separator" in options ? options.separator : separator;
+ length = "length" in options ? toInteger(options.length) : length;
+ omission = "omission" in options ? baseToString(options.omission) : omission;
+ }
+ string = toString(string);
+ var strLength = string.length;
+ if (hasUnicode(string)) {
+ var strSymbols = stringToArray(string);
+ strLength = strSymbols.length;
+ }
+ if (length >= strLength) {
+ return string;
+ }
+ var end = length - stringSize(omission);
+ if (end < 1) {
+ return omission;
+ }
+ var result2 = strSymbols ? castSlice(strSymbols, 0, end).join("") : string.slice(0, end);
+ if (separator === undefined2) {
+ return result2 + omission;
+ }
+ if (strSymbols) {
+ end += result2.length - end;
+ }
+ if (isRegExp(separator)) {
+ if (string.slice(end).search(separator)) {
+ var match, substring = result2;
+ if (!separator.global) {
+ separator = RegExp2(separator.source, toString(reFlags.exec(separator)) + "g");
+ }
+ separator.lastIndex = 0;
+ while (match = separator.exec(substring)) {
+ var newEnd = match.index;
+ }
+ result2 = result2.slice(0, newEnd === undefined2 ? end : newEnd);
+ }
+ } else if (string.indexOf(baseToString(separator), end) != end) {
+ var index = result2.lastIndexOf(separator);
+ if (index > -1) {
+ result2 = result2.slice(0, index);
+ }
+ }
+ return result2 + omission;
+ }
+ function unescape(string) {
+ string = toString(string);
+ return string && reHasEscapedHtml.test(string) ? string.replace(reEscapedHtml, unescapeHtmlChar) : string;
+ }
+ var upperCase = createCompounder(function(result2, word, index) {
+ return result2 + (index ? " " : "") + word.toUpperCase();
+ });
+ var upperFirst = createCaseFirst("toUpperCase");
+ function words(string, pattern, guard) {
+ string = toString(string);
+ pattern = guard ? undefined2 : pattern;
+ if (pattern === undefined2) {
+ return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);
+ }
+ return string.match(pattern) || [];
+ }
+ var attempt = baseRest(function(func, args) {
+ try {
+ return apply(func, undefined2, args);
+ } catch (e) {
+ return isError(e) ? e : new Error2(e);
+ }
+ });
+ var bindAll = flatRest(function(object, methodNames) {
+ arrayEach(methodNames, function(key) {
+ key = toKey(key);
+ baseAssignValue(object, key, bind(object[key], object));
+ });
+ return object;
+ });
+ function cond(pairs) {
+ var length = pairs == null ? 0 : pairs.length, toIteratee = getIteratee();
+ pairs = !length ? [] : arrayMap(pairs, function(pair) {
+ if (typeof pair[1] != "function") {
+ throw new TypeError2(FUNC_ERROR_TEXT);
+ }
+ return [toIteratee(pair[0]), pair[1]];
+ });
+ return baseRest(function(args) {
+ var index = -1;
+ while (++index < length) {
+ var pair = pairs[index];
+ if (apply(pair[0], this, args)) {
+ return apply(pair[1], this, args);
+ }
+ }
+ });
+ }
+ function conforms(source) {
+ return baseConforms(baseClone(source, CLONE_DEEP_FLAG));
+ }
+ function constant(value) {
+ return function() {
+ return value;
+ };
+ }
+ function defaultTo(value, defaultValue) {
+ return value == null || value !== value ? defaultValue : value;
+ }
+ var flow = createFlow();
+ var flowRight = createFlow(true);
+ function identity(value) {
+ return value;
+ }
+ function iteratee(func) {
+ return baseIteratee(typeof func == "function" ? func : baseClone(func, CLONE_DEEP_FLAG));
+ }
+ function matches(source) {
+ return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
+ }
+ function matchesProperty(path5, srcValue) {
+ return baseMatchesProperty(path5, baseClone(srcValue, CLONE_DEEP_FLAG));
+ }
+ var method = baseRest(function(path5, args) {
+ return function(object) {
+ return baseInvoke(object, path5, args);
+ };
+ });
+ var methodOf = baseRest(function(object, args) {
+ return function(path5) {
+ return baseInvoke(object, path5, args);
+ };
+ });
+ function mixin(object, source, options) {
+ var props = keys(source), methodNames = baseFunctions(source, props);
+ if (options == null && !(isObject(source) && (methodNames.length || !props.length))) {
+ options = source;
+ source = object;
+ object = this;
+ methodNames = baseFunctions(source, keys(source));
+ }
+ var chain2 = !(isObject(options) && "chain" in options) || !!options.chain, isFunc = isFunction(object);
+ arrayEach(methodNames, function(methodName) {
+ var func = source[methodName];
+ object[methodName] = func;
+ if (isFunc) {
+ object.prototype[methodName] = function() {
+ var chainAll = this.__chain__;
+ if (chain2 || chainAll) {
+ var result2 = object(this.__wrapped__), actions = result2.__actions__ = copyArray(this.__actions__);
+ actions.push({ "func": func, "args": arguments, "thisArg": object });
+ result2.__chain__ = chainAll;
+ return result2;
+ }
+ return func.apply(object, arrayPush([this.value()], arguments));
+ };
+ }
+ });
+ return object;
+ }
+ function noConflict() {
+ if (root._ === this) {
+ root._ = oldDash;
+ }
+ return this;
+ }
+ function noop() {
+ }
+ function nthArg(n) {
+ n = toInteger(n);
+ return baseRest(function(args) {
+ return baseNth(args, n);
+ });
+ }
+ var over = createOver(arrayMap);
+ var overEvery = createOver(arrayEvery);
+ var overSome = createOver(arraySome);
+ function property(path5) {
+ return isKey(path5) ? baseProperty(toKey(path5)) : basePropertyDeep(path5);
+ }
+ function propertyOf(object) {
+ return function(path5) {
+ return object == null ? undefined2 : baseGet(object, path5);
+ };
+ }
+ var range = createRange();
+ var rangeRight = createRange(true);
+ function stubArray() {
+ return [];
+ }
+ function stubFalse() {
+ return false;
+ }
+ function stubObject() {
+ return {};
+ }
+ function stubString() {
+ return "";
+ }
+ function stubTrue() {
+ return true;
+ }
+ function times(n, iteratee2) {
+ n = toInteger(n);
+ if (n < 1 || n > MAX_SAFE_INTEGER) {
+ return [];
+ }
+ var index = MAX_ARRAY_LENGTH, length = nativeMin(n, MAX_ARRAY_LENGTH);
+ iteratee2 = getIteratee(iteratee2);
+ n -= MAX_ARRAY_LENGTH;
+ var result2 = baseTimes(length, iteratee2);
+ while (++index < n) {
+ iteratee2(index);
+ }
+ return result2;
+ }
+ function toPath(value) {
+ if (isArray(value)) {
+ return arrayMap(value, toKey);
+ }
+ return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));
+ }
+ function uniqueId(prefix) {
+ var id = ++idCounter;
+ return toString(prefix) + id;
+ }
+ var add = createMathOperation(function(augend, addend) {
+ return augend + addend;
+ }, 0);
+ var ceil = createRound("ceil");
+ var divide = createMathOperation(function(dividend, divisor) {
+ return dividend / divisor;
+ }, 1);
+ var floor = createRound("floor");
+ function max(array) {
+ return array && array.length ? baseExtremum(array, identity, baseGt) : undefined2;
+ }
+ function maxBy(array, iteratee2) {
+ return array && array.length ? baseExtremum(array, getIteratee(iteratee2, 2), baseGt) : undefined2;
+ }
+ function mean(array) {
+ return baseMean(array, identity);
+ }
+ function meanBy(array, iteratee2) {
+ return baseMean(array, getIteratee(iteratee2, 2));
+ }
+ function min(array) {
+ return array && array.length ? baseExtremum(array, identity, baseLt) : undefined2;
+ }
+ function minBy(array, iteratee2) {
+ return array && array.length ? baseExtremum(array, getIteratee(iteratee2, 2), baseLt) : undefined2;
+ }
+ var multiply = createMathOperation(function(multiplier, multiplicand) {
+ return multiplier * multiplicand;
+ }, 1);
+ var round = createRound("round");
+ var subtract = createMathOperation(function(minuend, subtrahend) {
+ return minuend - subtrahend;
+ }, 0);
+ function sum(array) {
+ return array && array.length ? baseSum(array, identity) : 0;
+ }
+ function sumBy(array, iteratee2) {
+ return array && array.length ? baseSum(array, getIteratee(iteratee2, 2)) : 0;
+ }
+ lodash.after = after;
+ lodash.ary = ary;
+ lodash.assign = assign;
+ lodash.assignIn = assignIn;
+ lodash.assignInWith = assignInWith;
+ lodash.assignWith = assignWith;
+ lodash.at = at;
+ lodash.before = before;
+ lodash.bind = bind;
+ lodash.bindAll = bindAll;
+ lodash.bindKey = bindKey;
+ lodash.castArray = castArray;
+ lodash.chain = chain;
+ lodash.chunk = chunk;
+ lodash.compact = compact;
+ lodash.concat = concat;
+ lodash.cond = cond;
+ lodash.conforms = conforms;
+ lodash.constant = constant;
+ lodash.countBy = countBy;
+ lodash.create = create;
+ lodash.curry = curry;
+ lodash.curryRight = curryRight;
+ lodash.debounce = debounce;
+ lodash.defaults = defaults;
+ lodash.defaultsDeep = defaultsDeep;
+ lodash.defer = defer;
+ lodash.delay = delay;
+ lodash.difference = difference;
+ lodash.differenceBy = differenceBy;
+ lodash.differenceWith = differenceWith;
+ lodash.drop = drop;
+ lodash.dropRight = dropRight;
+ lodash.dropRightWhile = dropRightWhile;
+ lodash.dropWhile = dropWhile;
+ lodash.fill = fill;
+ lodash.filter = filter;
+ lodash.flatMap = flatMap;
+ lodash.flatMapDeep = flatMapDeep;
+ lodash.flatMapDepth = flatMapDepth;
+ lodash.flatten = flatten2;
+ lodash.flattenDeep = flattenDeep2;
+ lodash.flattenDepth = flattenDepth;
+ lodash.flip = flip;
+ lodash.flow = flow;
+ lodash.flowRight = flowRight;
+ lodash.fromPairs = fromPairs;
+ lodash.functions = functions;
+ lodash.functionsIn = functionsIn;
+ lodash.groupBy = groupBy;
+ lodash.initial = initial;
+ lodash.intersection = intersection;
+ lodash.intersectionBy = intersectionBy;
+ lodash.intersectionWith = intersectionWith;
+ lodash.invert = invert;
+ lodash.invertBy = invertBy;
+ lodash.invokeMap = invokeMap;
+ lodash.iteratee = iteratee;
+ lodash.keyBy = keyBy;
+ lodash.keys = keys;
+ lodash.keysIn = keysIn;
+ lodash.map = map;
+ lodash.mapKeys = mapKeys;
+ lodash.mapValues = mapValues;
+ lodash.matches = matches;
+ lodash.matchesProperty = matchesProperty;
+ lodash.memoize = memoize;
+ lodash.merge = merge;
+ lodash.mergeWith = mergeWith;
+ lodash.method = method;
+ lodash.methodOf = methodOf;
+ lodash.mixin = mixin;
+ lodash.negate = negate;
+ lodash.nthArg = nthArg;
+ lodash.omit = omit;
+ lodash.omitBy = omitBy;
+ lodash.once = once;
+ lodash.orderBy = orderBy;
+ lodash.over = over;
+ lodash.overArgs = overArgs;
+ lodash.overEvery = overEvery;
+ lodash.overSome = overSome;
+ lodash.partial = partial;
+ lodash.partialRight = partialRight;
+ lodash.partition = partition;
+ lodash.pick = pick;
+ lodash.pickBy = pickBy;
+ lodash.property = property;
+ lodash.propertyOf = propertyOf;
+ lodash.pull = pull;
+ lodash.pullAll = pullAll;
+ lodash.pullAllBy = pullAllBy;
+ lodash.pullAllWith = pullAllWith;
+ lodash.pullAt = pullAt;
+ lodash.range = range;
+ lodash.rangeRight = rangeRight;
+ lodash.rearg = rearg;
+ lodash.reject = reject;
+ lodash.remove = remove;
+ lodash.rest = rest;
+ lodash.reverse = reverse;
+ lodash.sampleSize = sampleSize;
+ lodash.set = set;
+ lodash.setWith = setWith;
+ lodash.shuffle = shuffle;
+ lodash.slice = slice;
+ lodash.sortBy = sortBy;
+ lodash.sortedUniq = sortedUniq;
+ lodash.sortedUniqBy = sortedUniqBy;
+ lodash.split = split;
+ lodash.spread = spread;
+ lodash.tail = tail;
+ lodash.take = take;
+ lodash.takeRight = takeRight;
+ lodash.takeRightWhile = takeRightWhile;
+ lodash.takeWhile = takeWhile;
+ lodash.tap = tap;
+ lodash.throttle = throttle;
+ lodash.thru = thru;
+ lodash.toArray = toArray;
+ lodash.toPairs = toPairs;
+ lodash.toPairsIn = toPairsIn;
+ lodash.toPath = toPath;
+ lodash.toPlainObject = toPlainObject;
+ lodash.transform = transform;
+ lodash.unary = unary;
+ lodash.union = union;
+ lodash.unionBy = unionBy;
+ lodash.unionWith = unionWith;
+ lodash.uniq = uniq;
+ lodash.uniqBy = uniqBy;
+ lodash.uniqWith = uniqWith;
+ lodash.unset = unset;
+ lodash.unzip = unzip;
+ lodash.unzipWith = unzipWith;
+ lodash.update = update;
+ lodash.updateWith = updateWith;
+ lodash.values = values;
+ lodash.valuesIn = valuesIn;
+ lodash.without = without;
+ lodash.words = words;
+ lodash.wrap = wrap;
+ lodash.xor = xor;
+ lodash.xorBy = xorBy;
+ lodash.xorWith = xorWith;
+ lodash.zip = zip;
+ lodash.zipObject = zipObject;
+ lodash.zipObjectDeep = zipObjectDeep;
+ lodash.zipWith = zipWith;
+ lodash.entries = toPairs;
+ lodash.entriesIn = toPairsIn;
+ lodash.extend = assignIn;
+ lodash.extendWith = assignInWith;
+ mixin(lodash, lodash);
+ lodash.add = add;
+ lodash.attempt = attempt;
+ lodash.camelCase = camelCase;
+ lodash.capitalize = capitalize;
+ lodash.ceil = ceil;
+ lodash.clamp = clamp;
+ lodash.clone = clone;
+ lodash.cloneDeep = cloneDeep;
+ lodash.cloneDeepWith = cloneDeepWith;
+ lodash.cloneWith = cloneWith;
+ lodash.conformsTo = conformsTo;
+ lodash.deburr = deburr;
+ lodash.defaultTo = defaultTo;
+ lodash.divide = divide;
+ lodash.endsWith = endsWith;
+ lodash.eq = eq;
+ lodash.escape = escape;
+ lodash.escapeRegExp = escapeRegExp;
+ lodash.every = every;
+ lodash.find = find;
+ lodash.findIndex = findIndex;
+ lodash.findKey = findKey;
+ lodash.findLast = findLast;
+ lodash.findLastIndex = findLastIndex;
+ lodash.findLastKey = findLastKey;
+ lodash.floor = floor;
+ lodash.forEach = forEach;
+ lodash.forEachRight = forEachRight;
+ lodash.forIn = forIn;
+ lodash.forInRight = forInRight;
+ lodash.forOwn = forOwn;
+ lodash.forOwnRight = forOwnRight;
+ lodash.get = get;
+ lodash.gt = gt;
+ lodash.gte = gte;
+ lodash.has = has;
+ lodash.hasIn = hasIn;
+ lodash.head = head;
+ lodash.identity = identity;
+ lodash.includes = includes;
+ lodash.indexOf = indexOf;
+ lodash.inRange = inRange;
+ lodash.invoke = invoke;
+ lodash.isArguments = isArguments;
+ lodash.isArray = isArray;
+ lodash.isArrayBuffer = isArrayBuffer;
+ lodash.isArrayLike = isArrayLike;
+ lodash.isArrayLikeObject = isArrayLikeObject;
+ lodash.isBoolean = isBoolean;
+ lodash.isBuffer = isBuffer;
+ lodash.isDate = isDate;
+ lodash.isElement = isElement;
+ lodash.isEmpty = isEmpty;
+ lodash.isEqual = isEqual;
+ lodash.isEqualWith = isEqualWith;
+ lodash.isError = isError;
+ lodash.isFinite = isFinite2;
+ lodash.isFunction = isFunction;
+ lodash.isInteger = isInteger;
+ lodash.isLength = isLength;
+ lodash.isMap = isMap;
+ lodash.isMatch = isMatch;
+ lodash.isMatchWith = isMatchWith;
+ lodash.isNaN = isNaN2;
+ lodash.isNative = isNative;
+ lodash.isNil = isNil;
+ lodash.isNull = isNull;
+ lodash.isNumber = isNumber;
+ lodash.isObject = isObject;
+ lodash.isObjectLike = isObjectLike;
+ lodash.isPlainObject = isPlainObject;
+ lodash.isRegExp = isRegExp;
+ lodash.isSafeInteger = isSafeInteger;
+ lodash.isSet = isSet;
+ lodash.isString = isString;
+ lodash.isSymbol = isSymbol;
+ lodash.isTypedArray = isTypedArray;
+ lodash.isUndefined = isUndefined;
+ lodash.isWeakMap = isWeakMap;
+ lodash.isWeakSet = isWeakSet;
+ lodash.join = join3;
+ lodash.kebabCase = kebabCase;
+ lodash.last = last;
+ lodash.lastIndexOf = lastIndexOf;
+ lodash.lowerCase = lowerCase;
+ lodash.lowerFirst = lowerFirst;
+ lodash.lt = lt;
+ lodash.lte = lte;
+ lodash.max = max;
+ lodash.maxBy = maxBy;
+ lodash.mean = mean;
+ lodash.meanBy = meanBy;
+ lodash.min = min;
+ lodash.minBy = minBy;
+ lodash.stubArray = stubArray;
+ lodash.stubFalse = stubFalse;
+ lodash.stubObject = stubObject;
+ lodash.stubString = stubString;
+ lodash.stubTrue = stubTrue;
+ lodash.multiply = multiply;
+ lodash.nth = nth;
+ lodash.noConflict = noConflict;
+ lodash.noop = noop;
+ lodash.now = now;
+ lodash.pad = pad;
+ lodash.padEnd = padEnd;
+ lodash.padStart = padStart;
+ lodash.parseInt = parseInt2;
+ lodash.random = random;
+ lodash.reduce = reduce;
+ lodash.reduceRight = reduceRight;
+ lodash.repeat = repeat;
+ lodash.replace = replace;
+ lodash.result = result;
+ lodash.round = round;
+ lodash.runInContext = runInContext2;
+ lodash.sample = sample;
+ lodash.size = size;
+ lodash.snakeCase = snakeCase2;
+ lodash.some = some;
+ lodash.sortedIndex = sortedIndex;
+ lodash.sortedIndexBy = sortedIndexBy;
+ lodash.sortedIndexOf = sortedIndexOf;
+ lodash.sortedLastIndex = sortedLastIndex;
+ lodash.sortedLastIndexBy = sortedLastIndexBy;
+ lodash.sortedLastIndexOf = sortedLastIndexOf;
+ lodash.startCase = startCase;
+ lodash.startsWith = startsWith;
+ lodash.subtract = subtract;
+ lodash.sum = sum;
+ lodash.sumBy = sumBy;
+ lodash.template = template;
+ lodash.times = times;
+ lodash.toFinite = toFinite;
+ lodash.toInteger = toInteger;
+ lodash.toLength = toLength;
+ lodash.toLower = toLower;
+ lodash.toNumber = toNumber;
+ lodash.toSafeInteger = toSafeInteger;
+ lodash.toString = toString;
+ lodash.toUpper = toUpper;
+ lodash.trim = trim;
+ lodash.trimEnd = trimEnd;
+ lodash.trimStart = trimStart;
+ lodash.truncate = truncate;
+ lodash.unescape = unescape;
+ lodash.uniqueId = uniqueId;
+ lodash.upperCase = upperCase;
+ lodash.upperFirst = upperFirst;
+ lodash.each = forEach;
+ lodash.eachRight = forEachRight;
+ lodash.first = head;
+ mixin(lodash, function() {
+ var source = {};
+ baseForOwn(lodash, function(func, methodName) {
+ if (!hasOwnProperty.call(lodash.prototype, methodName)) {
+ source[methodName] = func;
+ }
+ });
+ return source;
+ }(), { "chain": false });
+ lodash.VERSION = VERSION;
+ arrayEach(["bind", "bindKey", "curry", "curryRight", "partial", "partialRight"], function(methodName) {
+ lodash[methodName].placeholder = lodash;
+ });
+ arrayEach(["drop", "take"], function(methodName, index) {
+ LazyWrapper.prototype[methodName] = function(n) {
+ n = n === undefined2 ? 1 : nativeMax(toInteger(n), 0);
+ var result2 = this.__filtered__ && !index ? new LazyWrapper(this) : this.clone();
+ if (result2.__filtered__) {
+ result2.__takeCount__ = nativeMin(n, result2.__takeCount__);
+ } else {
+ result2.__views__.push({
+ "size": nativeMin(n, MAX_ARRAY_LENGTH),
+ "type": methodName + (result2.__dir__ < 0 ? "Right" : "")
+ });
+ }
+ return result2;
+ };
+ LazyWrapper.prototype[methodName + "Right"] = function(n) {
+ return this.reverse()[methodName](n).reverse();
+ };
+ });
+ arrayEach(["filter", "map", "takeWhile"], function(methodName, index) {
+ var type = index + 1, isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;
+ LazyWrapper.prototype[methodName] = function(iteratee2) {
+ var result2 = this.clone();
+ result2.__iteratees__.push({
+ "iteratee": getIteratee(iteratee2, 3),
+ "type": type
+ });
+ result2.__filtered__ = result2.__filtered__ || isFilter;
+ return result2;
+ };
+ });
+ arrayEach(["head", "last"], function(methodName, index) {
+ var takeName = "take" + (index ? "Right" : "");
+ LazyWrapper.prototype[methodName] = function() {
+ return this[takeName](1).value()[0];
+ };
+ });
+ arrayEach(["initial", "tail"], function(methodName, index) {
+ var dropName = "drop" + (index ? "" : "Right");
+ LazyWrapper.prototype[methodName] = function() {
+ return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);
+ };
+ });
+ LazyWrapper.prototype.compact = function() {
+ return this.filter(identity);
+ };
+ LazyWrapper.prototype.find = function(predicate) {
+ return this.filter(predicate).head();
+ };
+ LazyWrapper.prototype.findLast = function(predicate) {
+ return this.reverse().find(predicate);
+ };
+ LazyWrapper.prototype.invokeMap = baseRest(function(path5, args) {
+ if (typeof path5 == "function") {
+ return new LazyWrapper(this);
+ }
+ return this.map(function(value) {
+ return baseInvoke(value, path5, args);
+ });
+ });
+ LazyWrapper.prototype.reject = function(predicate) {
+ return this.filter(negate(getIteratee(predicate)));
+ };
+ LazyWrapper.prototype.slice = function(start, end) {
+ start = toInteger(start);
+ var result2 = this;
+ if (result2.__filtered__ && (start > 0 || end < 0)) {
+ return new LazyWrapper(result2);
+ }
+ if (start < 0) {
+ result2 = result2.takeRight(-start);
+ } else if (start) {
+ result2 = result2.drop(start);
+ }
+ if (end !== undefined2) {
+ end = toInteger(end);
+ result2 = end < 0 ? result2.dropRight(-end) : result2.take(end - start);
+ }
+ return result2;
+ };
+ LazyWrapper.prototype.takeRightWhile = function(predicate) {
+ return this.reverse().takeWhile(predicate).reverse();
+ };
+ LazyWrapper.prototype.toArray = function() {
+ return this.take(MAX_ARRAY_LENGTH);
+ };
+ baseForOwn(LazyWrapper.prototype, function(func, methodName) {
+ var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName), isTaker = /^(?:head|last)$/.test(methodName), lodashFunc = lodash[isTaker ? "take" + (methodName == "last" ? "Right" : "") : methodName], retUnwrapped = isTaker || /^find/.test(methodName);
+ if (!lodashFunc) {
+ return;
+ }
+ lodash.prototype[methodName] = function() {
+ var value = this.__wrapped__, args = isTaker ? [1] : arguments, isLazy = value instanceof LazyWrapper, iteratee2 = args[0], useLazy = isLazy || isArray(value);
+ var interceptor = function(value2) {
+ var result3 = lodashFunc.apply(lodash, arrayPush([value2], args));
+ return isTaker && chainAll ? result3[0] : result3;
+ };
+ if (useLazy && checkIteratee && typeof iteratee2 == "function" && iteratee2.length != 1) {
+ isLazy = useLazy = false;
+ }
+ var chainAll = this.__chain__, isHybrid = !!this.__actions__.length, isUnwrapped = retUnwrapped && !chainAll, onlyLazy = isLazy && !isHybrid;
+ if (!retUnwrapped && useLazy) {
+ value = onlyLazy ? value : new LazyWrapper(this);
+ var result2 = func.apply(value, args);
+ result2.__actions__.push({ "func": thru, "args": [interceptor], "thisArg": undefined2 });
+ return new LodashWrapper(result2, chainAll);
+ }
+ if (isUnwrapped && onlyLazy) {
+ return func.apply(this, args);
+ }
+ result2 = this.thru(interceptor);
+ return isUnwrapped ? isTaker ? result2.value()[0] : result2.value() : result2;
+ };
+ });
+ arrayEach(["pop", "push", "shift", "sort", "splice", "unshift"], function(methodName) {
+ var func = arrayProto[methodName], chainName = /^(?:push|sort|unshift)$/.test(methodName) ? "tap" : "thru", retUnwrapped = /^(?:pop|shift)$/.test(methodName);
+ lodash.prototype[methodName] = function() {
+ var args = arguments;
+ if (retUnwrapped && !this.__chain__) {
+ var value = this.value();
+ return func.apply(isArray(value) ? value : [], args);
+ }
+ return this[chainName](function(value2) {
+ return func.apply(isArray(value2) ? value2 : [], args);
+ });
+ };
+ });
+ baseForOwn(LazyWrapper.prototype, function(func, methodName) {
+ var lodashFunc = lodash[methodName];
+ if (lodashFunc) {
+ var key = lodashFunc.name + "";
+ if (!hasOwnProperty.call(realNames, key)) {
+ realNames[key] = [];
+ }
+ realNames[key].push({ "name": methodName, "func": lodashFunc });
+ }
+ });
+ realNames[createHybrid(undefined2, WRAP_BIND_KEY_FLAG).name] = [{
+ "name": "wrapper",
+ "func": undefined2
+ }];
+ LazyWrapper.prototype.clone = lazyClone;
+ LazyWrapper.prototype.reverse = lazyReverse;
+ LazyWrapper.prototype.value = lazyValue;
+ lodash.prototype.at = wrapperAt;
+ lodash.prototype.chain = wrapperChain;
+ lodash.prototype.commit = wrapperCommit;
+ lodash.prototype.next = wrapperNext;
+ lodash.prototype.plant = wrapperPlant;
+ lodash.prototype.reverse = wrapperReverse;
+ lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;
+ lodash.prototype.first = lodash.prototype.head;
+ if (symIterator) {
+ lodash.prototype[symIterator] = wrapperToIterator;
+ }
+ return lodash;
+ };
+ var _ = runInContext();
+ if (typeof define == "function" && typeof define.amd == "object" && define.amd) {
+ root._ = _;
+ define(function() {
+ return _;
+ });
+ } else if (freeModule) {
+ (freeModule.exports = _)._ = _;
+ freeExports._ = _;
+ } else {
+ root._ = _;
+ }
+ }).call(exports2);
+ }
+});
+
+// node_modules/yaml/dist/nodes/identity.js
+var require_identity = __commonJS({
+ "node_modules/yaml/dist/nodes/identity.js"(exports2) {
+ "use strict";
+ var ALIAS = Symbol.for("yaml.alias");
+ var DOC = Symbol.for("yaml.document");
+ var MAP = Symbol.for("yaml.map");
+ var PAIR = Symbol.for("yaml.pair");
+ var SCALAR = Symbol.for("yaml.scalar");
+ var SEQ = Symbol.for("yaml.seq");
+ var NODE_TYPE = Symbol.for("yaml.node.type");
+ var isAlias = (node) => !!node && typeof node === "object" && node[NODE_TYPE] === ALIAS;
+ var isDocument = (node) => !!node && typeof node === "object" && node[NODE_TYPE] === DOC;
+ var isMap = (node) => !!node && typeof node === "object" && node[NODE_TYPE] === MAP;
+ var isPair = (node) => !!node && typeof node === "object" && node[NODE_TYPE] === PAIR;
+ var isScalar = (node) => !!node && typeof node === "object" && node[NODE_TYPE] === SCALAR;
+ var isSeq = (node) => !!node && typeof node === "object" && node[NODE_TYPE] === SEQ;
+ function isCollection(node) {
+ if (node && typeof node === "object")
+ switch (node[NODE_TYPE]) {
+ case MAP:
+ case SEQ:
+ return true;
+ }
+ return false;
+ }
+ function isNode(node) {
+ if (node && typeof node === "object")
+ switch (node[NODE_TYPE]) {
+ case ALIAS:
+ case MAP:
+ case SCALAR:
+ case SEQ:
+ return true;
+ }
+ return false;
+ }
+ var hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor;
+ exports2.ALIAS = ALIAS;
+ exports2.DOC = DOC;
+ exports2.MAP = MAP;
+ exports2.NODE_TYPE = NODE_TYPE;
+ exports2.PAIR = PAIR;
+ exports2.SCALAR = SCALAR;
+ exports2.SEQ = SEQ;
+ exports2.hasAnchor = hasAnchor;
+ exports2.isAlias = isAlias;
+ exports2.isCollection = isCollection;
+ exports2.isDocument = isDocument;
+ exports2.isMap = isMap;
+ exports2.isNode = isNode;
+ exports2.isPair = isPair;
+ exports2.isScalar = isScalar;
+ exports2.isSeq = isSeq;
+ }
+});
+
+// node_modules/yaml/dist/visit.js
+var require_visit = __commonJS({
+ "node_modules/yaml/dist/visit.js"(exports2) {
+ "use strict";
+ var identity = require_identity();
+ var BREAK = Symbol("break visit");
+ var SKIP = Symbol("skip children");
+ var REMOVE = Symbol("remove node");
+ function visit(node, visitor) {
+ const visitor_ = initVisitor(visitor);
+ if (identity.isDocument(node)) {
+ const cd = visit_(null, node.contents, visitor_, Object.freeze([node]));
+ if (cd === REMOVE)
+ node.contents = null;
+ } else
+ visit_(null, node, visitor_, Object.freeze([]));
+ }
+ visit.BREAK = BREAK;
+ visit.SKIP = SKIP;
+ visit.REMOVE = REMOVE;
+ function visit_(key, node, visitor, path5) {
+ const ctrl = callVisitor(key, node, visitor, path5);
+ if (identity.isNode(ctrl) || identity.isPair(ctrl)) {
+ replaceNode(key, path5, ctrl);
+ return visit_(key, ctrl, visitor, path5);
+ }
+ if (typeof ctrl !== "symbol") {
+ if (identity.isCollection(node)) {
+ path5 = Object.freeze(path5.concat(node));
+ for (let i = 0; i < node.items.length; ++i) {
+ const ci = visit_(i, node.items[i], visitor, path5);
+ if (typeof ci === "number")
+ i = ci - 1;
+ else if (ci === BREAK)
+ return BREAK;
+ else if (ci === REMOVE) {
+ node.items.splice(i, 1);
+ i -= 1;
+ }
+ }
+ } else if (identity.isPair(node)) {
+ path5 = Object.freeze(path5.concat(node));
+ const ck = visit_("key", node.key, visitor, path5);
+ if (ck === BREAK)
+ return BREAK;
+ else if (ck === REMOVE)
+ node.key = null;
+ const cv = visit_("value", node.value, visitor, path5);
+ if (cv === BREAK)
+ return BREAK;
+ else if (cv === REMOVE)
+ node.value = null;
+ }
+ }
+ return ctrl;
+ }
+ async function visitAsync(node, visitor) {
+ const visitor_ = initVisitor(visitor);
+ if (identity.isDocument(node)) {
+ const cd = await visitAsync_(null, node.contents, visitor_, Object.freeze([node]));
+ if (cd === REMOVE)
+ node.contents = null;
+ } else
+ await visitAsync_(null, node, visitor_, Object.freeze([]));
+ }
+ visitAsync.BREAK = BREAK;
+ visitAsync.SKIP = SKIP;
+ visitAsync.REMOVE = REMOVE;
+ async function visitAsync_(key, node, visitor, path5) {
+ const ctrl = await callVisitor(key, node, visitor, path5);
+ if (identity.isNode(ctrl) || identity.isPair(ctrl)) {
+ replaceNode(key, path5, ctrl);
+ return visitAsync_(key, ctrl, visitor, path5);
+ }
+ if (typeof ctrl !== "symbol") {
+ if (identity.isCollection(node)) {
+ path5 = Object.freeze(path5.concat(node));
+ for (let i = 0; i < node.items.length; ++i) {
+ const ci = await visitAsync_(i, node.items[i], visitor, path5);
+ if (typeof ci === "number")
+ i = ci - 1;
+ else if (ci === BREAK)
+ return BREAK;
+ else if (ci === REMOVE) {
+ node.items.splice(i, 1);
+ i -= 1;
+ }
+ }
+ } else if (identity.isPair(node)) {
+ path5 = Object.freeze(path5.concat(node));
+ const ck = await visitAsync_("key", node.key, visitor, path5);
+ if (ck === BREAK)
+ return BREAK;
+ else if (ck === REMOVE)
+ node.key = null;
+ const cv = await visitAsync_("value", node.value, visitor, path5);
+ if (cv === BREAK)
+ return BREAK;
+ else if (cv === REMOVE)
+ node.value = null;
+ }
+ }
+ return ctrl;
+ }
+ function initVisitor(visitor) {
+ if (typeof visitor === "object" && (visitor.Collection || visitor.Node || visitor.Value)) {
+ return Object.assign({
+ Alias: visitor.Node,
+ Map: visitor.Node,
+ Scalar: visitor.Node,
+ Seq: visitor.Node
+ }, visitor.Value && {
+ Map: visitor.Value,
+ Scalar: visitor.Value,
+ Seq: visitor.Value
+ }, visitor.Collection && {
+ Map: visitor.Collection,
+ Seq: visitor.Collection
+ }, visitor);
+ }
+ return visitor;
+ }
+ function callVisitor(key, node, visitor, path5) {
+ if (typeof visitor === "function")
+ return visitor(key, node, path5);
+ if (identity.isMap(node))
+ return visitor.Map?.(key, node, path5);
+ if (identity.isSeq(node))
+ return visitor.Seq?.(key, node, path5);
+ if (identity.isPair(node))
+ return visitor.Pair?.(key, node, path5);
+ if (identity.isScalar(node))
+ return visitor.Scalar?.(key, node, path5);
+ if (identity.isAlias(node))
+ return visitor.Alias?.(key, node, path5);
+ return void 0;
+ }
+ function replaceNode(key, path5, node) {
+ const parent = path5[path5.length - 1];
+ if (identity.isCollection(parent)) {
+ parent.items[key] = node;
+ } else if (identity.isPair(parent)) {
+ if (key === "key")
+ parent.key = node;
+ else
+ parent.value = node;
+ } else if (identity.isDocument(parent)) {
+ parent.contents = node;
+ } else {
+ const pt = identity.isAlias(parent) ? "alias" : "scalar";
+ throw new Error(`Cannot replace node with ${pt} parent`);
+ }
+ }
+ exports2.visit = visit;
+ exports2.visitAsync = visitAsync;
+ }
+});
+
+// node_modules/yaml/dist/doc/directives.js
+var require_directives = __commonJS({
+ "node_modules/yaml/dist/doc/directives.js"(exports2) {
+ "use strict";
+ var identity = require_identity();
+ var visit = require_visit();
+ var escapeChars = {
+ "!": "%21",
+ ",": "%2C",
+ "[": "%5B",
+ "]": "%5D",
+ "{": "%7B",
+ "}": "%7D"
+ };
+ var escapeTagName = (tn) => tn.replace(/[!,[\]{}]/g, (ch) => escapeChars[ch]);
+ var Directives = class _Directives {
+ constructor(yaml, tags) {
+ this.docStart = null;
+ this.docEnd = false;
+ this.yaml = Object.assign({}, _Directives.defaultYaml, yaml);
+ this.tags = Object.assign({}, _Directives.defaultTags, tags);
+ }
+ clone() {
+ const copy = new _Directives(this.yaml, this.tags);
+ copy.docStart = this.docStart;
+ return copy;
+ }
+ /**
+ * During parsing, get a Directives instance for the current document and
+ * update the stream state according to the current version's spec.
+ */
+ atDocument() {
+ const res = new _Directives(this.yaml, this.tags);
+ switch (this.yaml.version) {
+ case "1.1":
+ this.atNextDocument = true;
+ break;
+ case "1.2":
+ this.atNextDocument = false;
+ this.yaml = {
+ explicit: _Directives.defaultYaml.explicit,
+ version: "1.2"
+ };
+ this.tags = Object.assign({}, _Directives.defaultTags);
+ break;
+ }
+ return res;
+ }
+ /**
+ * @param onError - May be called even if the action was successful
+ * @returns `true` on success
+ */
+ add(line, onError) {
+ if (this.atNextDocument) {
+ this.yaml = { explicit: _Directives.defaultYaml.explicit, version: "1.1" };
+ this.tags = Object.assign({}, _Directives.defaultTags);
+ this.atNextDocument = false;
+ }
+ const parts = line.trim().split(/[ \t]+/);
+ const name = parts.shift();
+ switch (name) {
+ case "%TAG": {
+ if (parts.length !== 2) {
+ onError(0, "%TAG directive should contain exactly two parts");
+ if (parts.length < 2)
+ return false;
+ }
+ const [handle, prefix] = parts;
+ this.tags[handle] = prefix;
+ return true;
+ }
+ case "%YAML": {
+ this.yaml.explicit = true;
+ if (parts.length !== 1) {
+ onError(0, "%YAML directive should contain exactly one part");
+ return false;
+ }
+ const [version] = parts;
+ if (version === "1.1" || version === "1.2") {
+ this.yaml.version = version;
+ return true;
+ } else {
+ const isValid = /^\d+\.\d+$/.test(version);
+ onError(6, `Unsupported YAML version ${version}`, isValid);
+ return false;
+ }
+ }
+ default:
+ onError(0, `Unknown directive ${name}`, true);
+ return false;
+ }
+ }
+ /**
+ * Resolves a tag, matching handles to those defined in %TAG directives.
+ *
+ * @returns Resolved tag, which may also be the non-specific tag `'!'` or a
+ * `'!local'` tag, or `null` if unresolvable.
+ */
+ tagName(source, onError) {
+ if (source === "!")
+ return "!";
+ if (source[0] !== "!") {
+ onError(`Not a valid tag: ${source}`);
+ return null;
+ }
+ if (source[1] === "<") {
+ const verbatim = source.slice(2, -1);
+ if (verbatim === "!" || verbatim === "!!") {
+ onError(`Verbatim tags aren't resolved, so ${source} is invalid.`);
+ return null;
+ }
+ if (source[source.length - 1] !== ">")
+ onError("Verbatim tags must end with a >");
+ return verbatim;
+ }
+ const [, handle, suffix] = source.match(/^(.*!)([^!]*)$/s);
+ if (!suffix)
+ onError(`The ${source} tag has no suffix`);
+ const prefix = this.tags[handle];
+ if (prefix) {
+ try {
+ return prefix + decodeURIComponent(suffix);
+ } catch (error3) {
+ onError(String(error3));
+ return null;
+ }
+ }
+ if (handle === "!")
+ return source;
+ onError(`Could not resolve tag: ${source}`);
+ return null;
+ }
+ /**
+ * Given a fully resolved tag, returns its printable string form,
+ * taking into account current tag prefixes and defaults.
+ */
+ tagString(tag) {
+ for (const [handle, prefix] of Object.entries(this.tags)) {
+ if (tag.startsWith(prefix))
+ return handle + escapeTagName(tag.substring(prefix.length));
+ }
+ return tag[0] === "!" ? tag : `!<${tag}>`;
+ }
+ toString(doc) {
+ const lines = this.yaml.explicit ? [`%YAML ${this.yaml.version || "1.2"}`] : [];
+ const tagEntries = Object.entries(this.tags);
+ let tagNames;
+ if (doc && tagEntries.length > 0 && identity.isNode(doc.contents)) {
+ const tags = {};
+ visit.visit(doc.contents, (_key, node) => {
+ if (identity.isNode(node) && node.tag)
+ tags[node.tag] = true;
+ });
+ tagNames = Object.keys(tags);
+ } else
+ tagNames = [];
+ for (const [handle, prefix] of tagEntries) {
+ if (handle === "!!" && prefix === "tag:yaml.org,2002:")
+ continue;
+ if (!doc || tagNames.some((tn) => tn.startsWith(prefix)))
+ lines.push(`%TAG ${handle} ${prefix}`);
+ }
+ return lines.join("\n");
+ }
+ };
+ Directives.defaultYaml = { explicit: false, version: "1.2" };
+ Directives.defaultTags = { "!!": "tag:yaml.org,2002:" };
+ exports2.Directives = Directives;
+ }
+});
+
+// node_modules/yaml/dist/doc/anchors.js
+var require_anchors = __commonJS({
+ "node_modules/yaml/dist/doc/anchors.js"(exports2) {
+ "use strict";
+ var identity = require_identity();
+ var visit = require_visit();
+ function anchorIsValid(anchor) {
+ if (/[\x00-\x19\s,[\]{}]/.test(anchor)) {
+ const sa = JSON.stringify(anchor);
+ const msg = `Anchor must not contain whitespace or control characters: ${sa}`;
+ throw new Error(msg);
+ }
+ return true;
+ }
+ function anchorNames(root) {
+ const anchors = /* @__PURE__ */ new Set();
+ visit.visit(root, {
+ Value(_key, node) {
+ if (node.anchor)
+ anchors.add(node.anchor);
+ }
+ });
+ return anchors;
+ }
+ function findNewAnchor(prefix, exclude) {
+ for (let i = 1; true; ++i) {
+ const name = `${prefix}${i}`;
+ if (!exclude.has(name))
+ return name;
+ }
+ }
+ function createNodeAnchors(doc, prefix) {
+ const aliasObjects = [];
+ const sourceObjects = /* @__PURE__ */ new Map();
+ let prevAnchors = null;
+ return {
+ onAnchor: (source) => {
+ aliasObjects.push(source);
+ if (!prevAnchors)
+ prevAnchors = anchorNames(doc);
+ const anchor = findNewAnchor(prefix, prevAnchors);
+ prevAnchors.add(anchor);
+ return anchor;
+ },
+ /**
+ * With circular references, the source node is only resolved after all
+ * of its child nodes are. This is why anchors are set only after all of
+ * the nodes have been created.
+ */
+ setAnchors: () => {
+ for (const source of aliasObjects) {
+ const ref = sourceObjects.get(source);
+ if (typeof ref === "object" && ref.anchor && (identity.isScalar(ref.node) || identity.isCollection(ref.node))) {
+ ref.node.anchor = ref.anchor;
+ } else {
+ const error3 = new Error("Failed to resolve repeated object (this should not happen)");
+ error3.source = source;
+ throw error3;
+ }
+ }
+ },
+ sourceObjects
+ };
+ }
+ exports2.anchorIsValid = anchorIsValid;
+ exports2.anchorNames = anchorNames;
+ exports2.createNodeAnchors = createNodeAnchors;
+ exports2.findNewAnchor = findNewAnchor;
+ }
+});
+
+// node_modules/yaml/dist/doc/applyReviver.js
+var require_applyReviver = __commonJS({
+ "node_modules/yaml/dist/doc/applyReviver.js"(exports2) {
+ "use strict";
+ function applyReviver(reviver, obj, key, val) {
+ if (val && typeof val === "object") {
+ if (Array.isArray(val)) {
+ for (let i = 0, len = val.length; i < len; ++i) {
+ const v0 = val[i];
+ const v1 = applyReviver(reviver, val, String(i), v0);
+ if (v1 === void 0)
+ delete val[i];
+ else if (v1 !== v0)
+ val[i] = v1;
+ }
+ } else if (val instanceof Map) {
+ for (const k of Array.from(val.keys())) {
+ const v0 = val.get(k);
+ const v1 = applyReviver(reviver, val, k, v0);
+ if (v1 === void 0)
+ val.delete(k);
+ else if (v1 !== v0)
+ val.set(k, v1);
+ }
+ } else if (val instanceof Set) {
+ for (const v0 of Array.from(val)) {
+ const v1 = applyReviver(reviver, val, v0, v0);
+ if (v1 === void 0)
+ val.delete(v0);
+ else if (v1 !== v0) {
+ val.delete(v0);
+ val.add(v1);
+ }
+ }
+ } else {
+ for (const [k, v0] of Object.entries(val)) {
+ const v1 = applyReviver(reviver, val, k, v0);
+ if (v1 === void 0)
+ delete val[k];
+ else if (v1 !== v0)
+ val[k] = v1;
+ }
+ }
+ }
+ return reviver.call(obj, key, val);
+ }
+ exports2.applyReviver = applyReviver;
+ }
+});
+
+// node_modules/yaml/dist/nodes/toJS.js
+var require_toJS = __commonJS({
+ "node_modules/yaml/dist/nodes/toJS.js"(exports2) {
+ "use strict";
+ var identity = require_identity();
+ function toJS(value, arg, ctx) {
+ if (Array.isArray(value))
+ return value.map((v, i) => toJS(v, String(i), ctx));
+ if (value && typeof value.toJSON === "function") {
+ if (!ctx || !identity.hasAnchor(value))
+ return value.toJSON(arg, ctx);
+ const data = { aliasCount: 0, count: 1, res: void 0 };
+ ctx.anchors.set(value, data);
+ ctx.onCreate = (res2) => {
+ data.res = res2;
+ delete ctx.onCreate;
+ };
+ const res = value.toJSON(arg, ctx);
+ if (ctx.onCreate)
+ ctx.onCreate(res);
+ return res;
+ }
+ if (typeof value === "bigint" && !ctx?.keep)
+ return Number(value);
+ return value;
+ }
+ exports2.toJS = toJS;
+ }
+});
+
+// node_modules/yaml/dist/nodes/Node.js
+var require_Node = __commonJS({
+ "node_modules/yaml/dist/nodes/Node.js"(exports2) {
+ "use strict";
+ var applyReviver = require_applyReviver();
+ var identity = require_identity();
+ var toJS = require_toJS();
+ var NodeBase = class {
+ constructor(type) {
+ Object.defineProperty(this, identity.NODE_TYPE, { value: type });
+ }
+ /** Create a copy of this node. */
+ clone() {
+ const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));
+ if (this.range)
+ copy.range = this.range.slice();
+ return copy;
+ }
+ /** A plain JavaScript representation of this node. */
+ toJS(doc, { mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {
+ if (!identity.isDocument(doc))
+ throw new TypeError("A document argument is required");
+ const ctx = {
+ anchors: /* @__PURE__ */ new Map(),
+ doc,
+ keep: true,
+ mapAsMap: mapAsMap === true,
+ mapKeyWarned: false,
+ maxAliasCount: typeof maxAliasCount === "number" ? maxAliasCount : 100
+ };
+ const res = toJS.toJS(this, "", ctx);
+ if (typeof onAnchor === "function")
+ for (const { count, res: res2 } of ctx.anchors.values())
+ onAnchor(res2, count);
+ return typeof reviver === "function" ? applyReviver.applyReviver(reviver, { "": res }, "", res) : res;
+ }
+ };
+ exports2.NodeBase = NodeBase;
+ }
+});
+
+// node_modules/yaml/dist/nodes/Alias.js
+var require_Alias = __commonJS({
+ "node_modules/yaml/dist/nodes/Alias.js"(exports2) {
+ "use strict";
+ var anchors = require_anchors();
+ var visit = require_visit();
+ var identity = require_identity();
+ var Node = require_Node();
+ var toJS = require_toJS();
+ var Alias = class extends Node.NodeBase {
+ constructor(source) {
+ super(identity.ALIAS);
+ this.source = source;
+ Object.defineProperty(this, "tag", {
+ set() {
+ throw new Error("Alias nodes cannot have tags");
+ }
+ });
+ }
+ /**
+ * Resolve the value of this alias within `doc`, finding the last
+ * instance of the `source` anchor before this node.
+ */
+ resolve(doc) {
+ let found = void 0;
+ visit.visit(doc, {
+ Node: (_key, node) => {
+ if (node === this)
+ return visit.visit.BREAK;
+ if (node.anchor === this.source)
+ found = node;
+ }
+ });
+ return found;
+ }
+ toJSON(_arg, ctx) {
+ if (!ctx)
+ return { source: this.source };
+ const { anchors: anchors2, doc, maxAliasCount } = ctx;
+ const source = this.resolve(doc);
+ if (!source) {
+ const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;
+ throw new ReferenceError(msg);
+ }
+ let data = anchors2.get(source);
+ if (!data) {
+ toJS.toJS(source, null, ctx);
+ data = anchors2.get(source);
+ }
+ if (!data || data.res === void 0) {
+ const msg = "This should not happen: Alias anchor was not resolved?";
+ throw new ReferenceError(msg);
+ }
+ if (maxAliasCount >= 0) {
+ data.count += 1;
+ if (data.aliasCount === 0)
+ data.aliasCount = getAliasCount(doc, source, anchors2);
+ if (data.count * data.aliasCount > maxAliasCount) {
+ const msg = "Excessive alias count indicates a resource exhaustion attack";
+ throw new ReferenceError(msg);
+ }
+ }
+ return data.res;
+ }
+ toString(ctx, _onComment, _onChompKeep) {
+ const src = `*${this.source}`;
+ if (ctx) {
+ anchors.anchorIsValid(this.source);
+ if (ctx.options.verifyAliasOrder && !ctx.anchors.has(this.source)) {
+ const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;
+ throw new Error(msg);
+ }
+ if (ctx.implicitKey)
+ return `${src} `;
+ }
+ return src;
+ }
+ };
+ function getAliasCount(doc, node, anchors2) {
+ if (identity.isAlias(node)) {
+ const source = node.resolve(doc);
+ const anchor = anchors2 && source && anchors2.get(source);
+ return anchor ? anchor.count * anchor.aliasCount : 0;
+ } else if (identity.isCollection(node)) {
+ let count = 0;
+ for (const item of node.items) {
+ const c = getAliasCount(doc, item, anchors2);
+ if (c > count)
+ count = c;
+ }
+ return count;
+ } else if (identity.isPair(node)) {
+ const kc = getAliasCount(doc, node.key, anchors2);
+ const vc = getAliasCount(doc, node.value, anchors2);
+ return Math.max(kc, vc);
+ }
+ return 1;
+ }
+ exports2.Alias = Alias;
+ }
+});
+
+// node_modules/yaml/dist/nodes/Scalar.js
+var require_Scalar = __commonJS({
+ "node_modules/yaml/dist/nodes/Scalar.js"(exports2) {
+ "use strict";
+ var identity = require_identity();
+ var Node = require_Node();
+ var toJS = require_toJS();
+ var isScalarValue = (value) => !value || typeof value !== "function" && typeof value !== "object";
+ var Scalar = class extends Node.NodeBase {
+ constructor(value) {
+ super(identity.SCALAR);
+ this.value = value;
+ }
+ toJSON(arg, ctx) {
+ return ctx?.keep ? this.value : toJS.toJS(this.value, arg, ctx);
+ }
+ toString() {
+ return String(this.value);
+ }
+ };
+ Scalar.BLOCK_FOLDED = "BLOCK_FOLDED";
+ Scalar.BLOCK_LITERAL = "BLOCK_LITERAL";
+ Scalar.PLAIN = "PLAIN";
+ Scalar.QUOTE_DOUBLE = "QUOTE_DOUBLE";
+ Scalar.QUOTE_SINGLE = "QUOTE_SINGLE";
+ exports2.Scalar = Scalar;
+ exports2.isScalarValue = isScalarValue;
+ }
+});
+
+// node_modules/yaml/dist/doc/createNode.js
+var require_createNode = __commonJS({
+ "node_modules/yaml/dist/doc/createNode.js"(exports2) {
+ "use strict";
+ var Alias = require_Alias();
+ var identity = require_identity();
+ var Scalar = require_Scalar();
+ var defaultTagPrefix = "tag:yaml.org,2002:";
+ function findTagObject(value, tagName, tags) {
+ if (tagName) {
+ const match = tags.filter((t) => t.tag === tagName);
+ const tagObj = match.find((t) => !t.format) ?? match[0];
+ if (!tagObj)
+ throw new Error(`Tag ${tagName} not found`);
+ return tagObj;
+ }
+ return tags.find((t) => t.identify?.(value) && !t.format);
+ }
+ function createNode(value, tagName, ctx) {
+ if (identity.isDocument(value))
+ value = value.contents;
+ if (identity.isNode(value))
+ return value;
+ if (identity.isPair(value)) {
+ const map = ctx.schema[identity.MAP].createNode?.(ctx.schema, null, ctx);
+ map.items.push(value);
+ return map;
+ }
+ if (value instanceof String || value instanceof Number || value instanceof Boolean || typeof BigInt !== "undefined" && value instanceof BigInt) {
+ value = value.valueOf();
+ }
+ const { aliasDuplicateObjects, onAnchor, onTagObj, schema, sourceObjects } = ctx;
+ let ref = void 0;
+ if (aliasDuplicateObjects && value && typeof value === "object") {
+ ref = sourceObjects.get(value);
+ if (ref) {
+ if (!ref.anchor)
+ ref.anchor = onAnchor(value);
+ return new Alias.Alias(ref.anchor);
+ } else {
+ ref = { anchor: null, node: null };
+ sourceObjects.set(value, ref);
+ }
+ }
+ if (tagName?.startsWith("!!"))
+ tagName = defaultTagPrefix + tagName.slice(2);
+ let tagObj = findTagObject(value, tagName, schema.tags);
+ if (!tagObj) {
+ if (value && typeof value.toJSON === "function") {
+ value = value.toJSON();
+ }
+ if (!value || typeof value !== "object") {
+ const node2 = new Scalar.Scalar(value);
+ if (ref)
+ ref.node = node2;
+ return node2;
+ }
+ tagObj = value instanceof Map ? schema[identity.MAP] : Symbol.iterator in Object(value) ? schema[identity.SEQ] : schema[identity.MAP];
+ }
+ if (onTagObj) {
+ onTagObj(tagObj);
+ delete ctx.onTagObj;
+ }
+ const node = tagObj?.createNode ? tagObj.createNode(ctx.schema, value, ctx) : typeof tagObj?.nodeClass?.from === "function" ? tagObj.nodeClass.from(ctx.schema, value, ctx) : new Scalar.Scalar(value);
+ if (tagName)
+ node.tag = tagName;
+ else if (!tagObj.default)
+ node.tag = tagObj.tag;
+ if (ref)
+ ref.node = node;
+ return node;
+ }
+ exports2.createNode = createNode;
+ }
+});
+
+// node_modules/yaml/dist/nodes/Collection.js
+var require_Collection = __commonJS({
+ "node_modules/yaml/dist/nodes/Collection.js"(exports2) {
+ "use strict";
+ var createNode = require_createNode();
+ var identity = require_identity();
+ var Node = require_Node();
+ function collectionFromPath(schema, path5, value) {
+ let v = value;
+ for (let i = path5.length - 1; i >= 0; --i) {
+ const k = path5[i];
+ if (typeof k === "number" && Number.isInteger(k) && k >= 0) {
+ const a = [];
+ a[k] = v;
+ v = a;
+ } else {
+ v = /* @__PURE__ */ new Map([[k, v]]);
+ }
+ }
+ return createNode.createNode(v, void 0, {
+ aliasDuplicateObjects: false,
+ keepUndefined: false,
+ onAnchor: () => {
+ throw new Error("This should not happen, please report a bug.");
+ },
+ schema,
+ sourceObjects: /* @__PURE__ */ new Map()
+ });
+ }
+ var isEmptyPath = (path5) => path5 == null || typeof path5 === "object" && !!path5[Symbol.iterator]().next().done;
+ var Collection = class extends Node.NodeBase {
+ constructor(type, schema) {
+ super(type);
+ Object.defineProperty(this, "schema", {
+ value: schema,
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+ }
+ /**
+ * Create a copy of this collection.
+ *
+ * @param schema - If defined, overwrites the original's schema
+ */
+ clone(schema) {
+ const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));
+ if (schema)
+ copy.schema = schema;
+ copy.items = copy.items.map((it) => identity.isNode(it) || identity.isPair(it) ? it.clone(schema) : it);
+ if (this.range)
+ copy.range = this.range.slice();
+ return copy;
+ }
+ /**
+ * Adds a value to the collection. For `!!map` and `!!omap` the value must
+ * be a Pair instance or a `{ key, value }` object, which may not have a key
+ * that already exists in the map.
+ */
+ addIn(path5, value) {
+ if (isEmptyPath(path5))
+ this.add(value);
+ else {
+ const [key, ...rest] = path5;
+ const node = this.get(key, true);
+ if (identity.isCollection(node))
+ node.addIn(rest, value);
+ else if (node === void 0 && this.schema)
+ this.set(key, collectionFromPath(this.schema, rest, value));
+ else
+ throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);
+ }
+ }
+ /**
+ * Removes a value from the collection.
+ * @returns `true` if the item was found and removed.
+ */
+ deleteIn(path5) {
+ const [key, ...rest] = path5;
+ if (rest.length === 0)
+ return this.delete(key);
+ const node = this.get(key, true);
+ if (identity.isCollection(node))
+ return node.deleteIn(rest);
+ else
+ throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);
+ }
+ /**
+ * Returns item at `key`, or `undefined` if not found. By default unwraps
+ * scalar values from their surrounding node; to disable set `keepScalar` to
+ * `true` (collections are always returned intact).
+ */
+ getIn(path5, keepScalar) {
+ const [key, ...rest] = path5;
+ const node = this.get(key, true);
+ if (rest.length === 0)
+ return !keepScalar && identity.isScalar(node) ? node.value : node;
+ else
+ return identity.isCollection(node) ? node.getIn(rest, keepScalar) : void 0;
+ }
+ hasAllNullValues(allowScalar) {
+ return this.items.every((node) => {
+ if (!identity.isPair(node))
+ return false;
+ const n = node.value;
+ return n == null || allowScalar && identity.isScalar(n) && n.value == null && !n.commentBefore && !n.comment && !n.tag;
+ });
+ }
+ /**
+ * Checks if the collection includes a value with the key `key`.
+ */
+ hasIn(path5) {
+ const [key, ...rest] = path5;
+ if (rest.length === 0)
+ return this.has(key);
+ const node = this.get(key, true);
+ return identity.isCollection(node) ? node.hasIn(rest) : false;
+ }
+ /**
+ * Sets a value in this collection. For `!!set`, `value` needs to be a
+ * boolean to add/remove the item from the set.
+ */
+ setIn(path5, value) {
+ const [key, ...rest] = path5;
+ if (rest.length === 0) {
+ this.set(key, value);
+ } else {
+ const node = this.get(key, true);
+ if (identity.isCollection(node))
+ node.setIn(rest, value);
+ else if (node === void 0 && this.schema)
+ this.set(key, collectionFromPath(this.schema, rest, value));
+ else
+ throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);
+ }
+ }
+ };
+ exports2.Collection = Collection;
+ exports2.collectionFromPath = collectionFromPath;
+ exports2.isEmptyPath = isEmptyPath;
+ }
+});
+
+// node_modules/yaml/dist/stringify/stringifyComment.js
+var require_stringifyComment = __commonJS({
+ "node_modules/yaml/dist/stringify/stringifyComment.js"(exports2) {
+ "use strict";
+ var stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, "#");
+ function indentComment(comment, indent) {
+ if (/^\n+$/.test(comment))
+ return comment.substring(1);
+ return indent ? comment.replace(/^(?! *$)/gm, indent) : comment;
+ }
+ var lineComment = (str, indent, comment) => str.endsWith("\n") ? indentComment(comment, indent) : comment.includes("\n") ? "\n" + indentComment(comment, indent) : (str.endsWith(" ") ? "" : " ") + comment;
+ exports2.indentComment = indentComment;
+ exports2.lineComment = lineComment;
+ exports2.stringifyComment = stringifyComment;
+ }
+});
+
+// node_modules/yaml/dist/stringify/foldFlowLines.js
+var require_foldFlowLines = __commonJS({
+ "node_modules/yaml/dist/stringify/foldFlowLines.js"(exports2) {
+ "use strict";
+ var FOLD_FLOW = "flow";
+ var FOLD_BLOCK = "block";
+ var FOLD_QUOTED = "quoted";
+ function foldFlowLines(text, indent, mode = "flow", { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) {
+ if (!lineWidth || lineWidth < 0)
+ return text;
+ if (lineWidth < minContentWidth)
+ minContentWidth = 0;
+ const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);
+ if (text.length <= endStep)
+ return text;
+ const folds = [];
+ const escapedFolds = {};
+ let end = lineWidth - indent.length;
+ if (typeof indentAtStart === "number") {
+ if (indentAtStart > lineWidth - Math.max(2, minContentWidth))
+ folds.push(0);
+ else
+ end = lineWidth - indentAtStart;
+ }
+ let split = void 0;
+ let prev = void 0;
+ let overflow = false;
+ let i = -1;
+ let escStart = -1;
+ let escEnd = -1;
+ if (mode === FOLD_BLOCK) {
+ i = consumeMoreIndentedLines(text, i, indent.length);
+ if (i !== -1)
+ end = i + endStep;
+ }
+ for (let ch; ch = text[i += 1]; ) {
+ if (mode === FOLD_QUOTED && ch === "\\") {
+ escStart = i;
+ switch (text[i + 1]) {
+ case "x":
+ i += 3;
+ break;
+ case "u":
+ i += 5;
+ break;
+ case "U":
+ i += 9;
+ break;
+ default:
+ i += 1;
+ }
+ escEnd = i;
+ }
+ if (ch === "\n") {
+ if (mode === FOLD_BLOCK)
+ i = consumeMoreIndentedLines(text, i, indent.length);
+ end = i + indent.length + endStep;
+ split = void 0;
+ } else {
+ if (ch === " " && prev && prev !== " " && prev !== "\n" && prev !== " ") {
+ const next = text[i + 1];
+ if (next && next !== " " && next !== "\n" && next !== " ")
+ split = i;
+ }
+ if (i >= end) {
+ if (split) {
+ folds.push(split);
+ end = split + endStep;
+ split = void 0;
+ } else if (mode === FOLD_QUOTED) {
+ while (prev === " " || prev === " ") {
+ prev = ch;
+ ch = text[i += 1];
+ overflow = true;
+ }
+ const j = i > escEnd + 1 ? i - 2 : escStart - 1;
+ if (escapedFolds[j])
+ return text;
+ folds.push(j);
+ escapedFolds[j] = true;
+ end = j + endStep;
+ split = void 0;
+ } else {
+ overflow = true;
+ }
+ }
+ }
+ prev = ch;
+ }
+ if (overflow && onOverflow)
+ onOverflow();
+ if (folds.length === 0)
+ return text;
+ if (onFold)
+ onFold();
+ let res = text.slice(0, folds[0]);
+ for (let i2 = 0; i2 < folds.length; ++i2) {
+ const fold = folds[i2];
+ const end2 = folds[i2 + 1] || text.length;
+ if (fold === 0)
+ res = `
+${indent}${text.slice(0, end2)}`;
+ else {
+ if (mode === FOLD_QUOTED && escapedFolds[fold])
+ res += `${text[fold]}\\`;
+ res += `
+${indent}${text.slice(fold + 1, end2)}`;
+ }
+ }
+ return res;
+ }
+ function consumeMoreIndentedLines(text, i, indent) {
+ let end = i;
+ let start = i + 1;
+ let ch = text[start];
+ while (ch === " " || ch === " ") {
+ if (i < start + indent) {
+ ch = text[++i];
+ } else {
+ do {
+ ch = text[++i];
+ } while (ch && ch !== "\n");
+ end = i;
+ start = i + 1;
+ ch = text[start];
+ }
+ }
+ return end;
+ }
+ exports2.FOLD_BLOCK = FOLD_BLOCK;
+ exports2.FOLD_FLOW = FOLD_FLOW;
+ exports2.FOLD_QUOTED = FOLD_QUOTED;
+ exports2.foldFlowLines = foldFlowLines;
+ }
+});
+
+// node_modules/yaml/dist/stringify/stringifyString.js
+var require_stringifyString = __commonJS({
+ "node_modules/yaml/dist/stringify/stringifyString.js"(exports2) {
+ "use strict";
+ var Scalar = require_Scalar();
+ var foldFlowLines = require_foldFlowLines();
+ var getFoldOptions = (ctx, isBlock) => ({
+ indentAtStart: isBlock ? ctx.indent.length : ctx.indentAtStart,
+ lineWidth: ctx.options.lineWidth,
+ minContentWidth: ctx.options.minContentWidth
+ });
+ var containsDocumentMarker = (str) => /^(%|---|\.\.\.)/m.test(str);
+ function lineLengthOverLimit(str, lineWidth, indentLength) {
+ if (!lineWidth || lineWidth < 0)
+ return false;
+ const limit = lineWidth - indentLength;
+ const strLen = str.length;
+ if (strLen <= limit)
+ return false;
+ for (let i = 0, start = 0; i < strLen; ++i) {
+ if (str[i] === "\n") {
+ if (i - start > limit)
+ return true;
+ start = i + 1;
+ if (strLen - start <= limit)
+ return false;
+ }
+ }
+ return true;
+ }
+ function doubleQuotedString(value, ctx) {
+ const json = JSON.stringify(value);
+ if (ctx.options.doubleQuotedAsJSON)
+ return json;
+ const { implicitKey } = ctx;
+ const minMultiLineLength = ctx.options.doubleQuotedMinMultiLineLength;
+ const indent = ctx.indent || (containsDocumentMarker(value) ? " " : "");
+ let str = "";
+ let start = 0;
+ for (let i = 0, ch = json[i]; ch; ch = json[++i]) {
+ if (ch === " " && json[i + 1] === "\\" && json[i + 2] === "n") {
+ str += json.slice(start, i) + "\\ ";
+ i += 1;
+ start = i;
+ ch = "\\";
+ }
+ if (ch === "\\")
+ switch (json[i + 1]) {
+ case "u":
+ {
+ str += json.slice(start, i);
+ const code = json.substr(i + 2, 4);
+ switch (code) {
+ case "0000":
+ str += "\\0";
+ break;
+ case "0007":
+ str += "\\a";
+ break;
+ case "000b":
+ str += "\\v";
+ break;
+ case "001b":
+ str += "\\e";
+ break;
+ case "0085":
+ str += "\\N";
+ break;
+ case "00a0":
+ str += "\\_";
+ break;
+ case "2028":
+ str += "\\L";
+ break;
+ case "2029":
+ str += "\\P";
+ break;
+ default:
+ if (code.substr(0, 2) === "00")
+ str += "\\x" + code.substr(2);
+ else
+ str += json.substr(i, 6);
+ }
+ i += 5;
+ start = i + 1;
+ }
+ break;
+ case "n":
+ if (implicitKey || json[i + 2] === '"' || json.length < minMultiLineLength) {
+ i += 1;
+ } else {
+ str += json.slice(start, i) + "\n\n";
+ while (json[i + 2] === "\\" && json[i + 3] === "n" && json[i + 4] !== '"') {
+ str += "\n";
+ i += 2;
+ }
+ str += indent;
+ if (json[i + 2] === " ")
+ str += "\\";
+ i += 1;
+ start = i + 1;
+ }
+ break;
+ default:
+ i += 1;
+ }
+ }
+ str = start ? str + json.slice(start) : json;
+ return implicitKey ? str : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_QUOTED, getFoldOptions(ctx, false));
+ }
+ function singleQuotedString(value, ctx) {
+ if (ctx.options.singleQuote === false || ctx.implicitKey && value.includes("\n") || /[ \t]\n|\n[ \t]/.test(value))
+ return doubleQuotedString(value, ctx);
+ const indent = ctx.indent || (containsDocumentMarker(value) ? " " : "");
+ const res = "'" + value.replace(/'/g, "''").replace(/\n+/g, `$&
+${indent}`) + "'";
+ return ctx.implicitKey ? res : foldFlowLines.foldFlowLines(res, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, false));
+ }
+ function quotedString(value, ctx) {
+ const { singleQuote } = ctx.options;
+ let qs;
+ if (singleQuote === false)
+ qs = doubleQuotedString;
+ else {
+ const hasDouble = value.includes('"');
+ const hasSingle = value.includes("'");
+ if (hasDouble && !hasSingle)
+ qs = singleQuotedString;
+ else if (hasSingle && !hasDouble)
+ qs = doubleQuotedString;
+ else
+ qs = singleQuote ? singleQuotedString : doubleQuotedString;
+ }
+ return qs(value, ctx);
+ }
+ var blockEndNewlines;
+ try {
+ blockEndNewlines = new RegExp("(^|(?\n";
+ let chomp;
+ let endStart;
+ for (endStart = value.length; endStart > 0; --endStart) {
+ const ch = value[endStart - 1];
+ if (ch !== "\n" && ch !== " " && ch !== " ")
+ break;
+ }
+ let end = value.substring(endStart);
+ const endNlPos = end.indexOf("\n");
+ if (endNlPos === -1) {
+ chomp = "-";
+ } else if (value === end || endNlPos !== end.length - 1) {
+ chomp = "+";
+ if (onChompKeep)
+ onChompKeep();
+ } else {
+ chomp = "";
+ }
+ if (end) {
+ value = value.slice(0, -end.length);
+ if (end[end.length - 1] === "\n")
+ end = end.slice(0, -1);
+ end = end.replace(blockEndNewlines, `$&${indent}`);
+ }
+ let startWithSpace = false;
+ let startEnd;
+ let startNlPos = -1;
+ for (startEnd = 0; startEnd < value.length; ++startEnd) {
+ const ch = value[startEnd];
+ if (ch === " ")
+ startWithSpace = true;
+ else if (ch === "\n")
+ startNlPos = startEnd;
+ else
+ break;
+ }
+ let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd);
+ if (start) {
+ value = value.substring(start.length);
+ start = start.replace(/\n+/g, `$&${indent}`);
+ }
+ const indentSize = indent ? "2" : "1";
+ let header = (startWithSpace ? indentSize : "") + chomp;
+ if (comment) {
+ header += " " + commentString(comment.replace(/ ?[\r\n]+/g, " "));
+ if (onComment)
+ onComment();
+ }
+ if (!literal) {
+ const foldedValue = value.replace(/\n+/g, "\n$&").replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g, "$1$2").replace(/\n+/g, `$&${indent}`);
+ let literalFallback = false;
+ const foldOptions = getFoldOptions(ctx, true);
+ if (blockQuote !== "folded" && type !== Scalar.Scalar.BLOCK_FOLDED) {
+ foldOptions.onOverflow = () => {
+ literalFallback = true;
+ };
+ }
+ const body = foldFlowLines.foldFlowLines(`${start}${foldedValue}${end}`, indent, foldFlowLines.FOLD_BLOCK, foldOptions);
+ if (!literalFallback)
+ return `>${header}
+${indent}${body}`;
+ }
+ value = value.replace(/\n+/g, `$&${indent}`);
+ return `|${header}
+${indent}${start}${value}${end}`;
+ }
+ function plainString(item, ctx, onComment, onChompKeep) {
+ const { type, value } = item;
+ const { actualString, implicitKey, indent, indentStep, inFlow } = ctx;
+ if (implicitKey && value.includes("\n") || inFlow && /[[\]{},]/.test(value)) {
+ return quotedString(value, ctx);
+ }
+ if (!value || /^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(value)) {
+ return implicitKey || inFlow || !value.includes("\n") ? quotedString(value, ctx) : blockString(item, ctx, onComment, onChompKeep);
+ }
+ if (!implicitKey && !inFlow && type !== Scalar.Scalar.PLAIN && value.includes("\n")) {
+ return blockString(item, ctx, onComment, onChompKeep);
+ }
+ if (containsDocumentMarker(value)) {
+ if (indent === "") {
+ ctx.forceBlockIndent = true;
+ return blockString(item, ctx, onComment, onChompKeep);
+ } else if (implicitKey && indent === indentStep) {
+ return quotedString(value, ctx);
+ }
+ }
+ const str = value.replace(/\n+/g, `$&
+${indent}`);
+ if (actualString) {
+ const test = (tag) => tag.default && tag.tag !== "tag:yaml.org,2002:str" && tag.test?.test(str);
+ const { compat, tags } = ctx.doc.schema;
+ if (tags.some(test) || compat?.some(test))
+ return quotedString(value, ctx);
+ }
+ return implicitKey ? str : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, false));
+ }
+ function stringifyString(item, ctx, onComment, onChompKeep) {
+ const { implicitKey, inFlow } = ctx;
+ const ss = typeof item.value === "string" ? item : Object.assign({}, item, { value: String(item.value) });
+ let { type } = item;
+ if (type !== Scalar.Scalar.QUOTE_DOUBLE) {
+ if (/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(ss.value))
+ type = Scalar.Scalar.QUOTE_DOUBLE;
+ }
+ const _stringify = (_type) => {
+ switch (_type) {
+ case Scalar.Scalar.BLOCK_FOLDED:
+ case Scalar.Scalar.BLOCK_LITERAL:
+ return implicitKey || inFlow ? quotedString(ss.value, ctx) : blockString(ss, ctx, onComment, onChompKeep);
+ case Scalar.Scalar.QUOTE_DOUBLE:
+ return doubleQuotedString(ss.value, ctx);
+ case Scalar.Scalar.QUOTE_SINGLE:
+ return singleQuotedString(ss.value, ctx);
+ case Scalar.Scalar.PLAIN:
+ return plainString(ss, ctx, onComment, onChompKeep);
+ default:
+ return null;
+ }
+ };
+ let res = _stringify(type);
+ if (res === null) {
+ const { defaultKeyType, defaultStringType } = ctx.options;
+ const t = implicitKey && defaultKeyType || defaultStringType;
+ res = _stringify(t);
+ if (res === null)
+ throw new Error(`Unsupported default string type ${t}`);
+ }
+ return res;
+ }
+ exports2.stringifyString = stringifyString;
+ }
+});
+
+// node_modules/yaml/dist/stringify/stringify.js
+var require_stringify2 = __commonJS({
+ "node_modules/yaml/dist/stringify/stringify.js"(exports2) {
+ "use strict";
+ var anchors = require_anchors();
+ var identity = require_identity();
+ var stringifyComment = require_stringifyComment();
+ var stringifyString = require_stringifyString();
+ function createStringifyContext(doc, options) {
+ const opt = Object.assign({
+ blockQuote: true,
+ commentString: stringifyComment.stringifyComment,
+ defaultKeyType: null,
+ defaultStringType: "PLAIN",
+ directives: null,
+ doubleQuotedAsJSON: false,
+ doubleQuotedMinMultiLineLength: 40,
+ falseStr: "false",
+ flowCollectionPadding: true,
+ indentSeq: true,
+ lineWidth: 80,
+ minContentWidth: 20,
+ nullStr: "null",
+ simpleKeys: false,
+ singleQuote: null,
+ trueStr: "true",
+ verifyAliasOrder: true
+ }, doc.schema.toStringOptions, options);
+ let inFlow;
+ switch (opt.collectionStyle) {
+ case "block":
+ inFlow = false;
+ break;
+ case "flow":
+ inFlow = true;
+ break;
+ default:
+ inFlow = null;
+ }
+ return {
+ anchors: /* @__PURE__ */ new Set(),
+ doc,
+ flowCollectionPadding: opt.flowCollectionPadding ? " " : "",
+ indent: "",
+ indentStep: typeof opt.indent === "number" ? " ".repeat(opt.indent) : " ",
+ inFlow,
+ options: opt
+ };
+ }
+ function getTagObject(tags, item) {
+ if (item.tag) {
+ const match = tags.filter((t) => t.tag === item.tag);
+ if (match.length > 0)
+ return match.find((t) => t.format === item.format) ?? match[0];
+ }
+ let tagObj = void 0;
+ let obj;
+ if (identity.isScalar(item)) {
+ obj = item.value;
+ let match = tags.filter((t) => t.identify?.(obj));
+ if (match.length > 1) {
+ const testMatch = match.filter((t) => t.test);
+ if (testMatch.length > 0)
+ match = testMatch;
+ }
+ tagObj = match.find((t) => t.format === item.format) ?? match.find((t) => !t.format);
+ } else {
+ obj = item;
+ tagObj = tags.find((t) => t.nodeClass && obj instanceof t.nodeClass);
+ }
+ if (!tagObj) {
+ const name = obj?.constructor?.name ?? typeof obj;
+ throw new Error(`Tag not resolved for ${name} value`);
+ }
+ return tagObj;
+ }
+ function stringifyProps(node, tagObj, { anchors: anchors$1, doc }) {
+ if (!doc.directives)
+ return "";
+ const props = [];
+ const anchor = (identity.isScalar(node) || identity.isCollection(node)) && node.anchor;
+ if (anchor && anchors.anchorIsValid(anchor)) {
+ anchors$1.add(anchor);
+ props.push(`&${anchor}`);
+ }
+ const tag = node.tag ? node.tag : tagObj.default ? null : tagObj.tag;
+ if (tag)
+ props.push(doc.directives.tagString(tag));
+ return props.join(" ");
+ }
+ function stringify(item, ctx, onComment, onChompKeep) {
+ if (identity.isPair(item))
+ return item.toString(ctx, onComment, onChompKeep);
+ if (identity.isAlias(item)) {
+ if (ctx.doc.directives)
+ return item.toString(ctx);
+ if (ctx.resolvedAliases?.has(item)) {
+ throw new TypeError(`Cannot stringify circular structure without alias nodes`);
+ } else {
+ if (ctx.resolvedAliases)
+ ctx.resolvedAliases.add(item);
+ else
+ ctx.resolvedAliases = /* @__PURE__ */ new Set([item]);
+ item = item.resolve(ctx.doc);
+ }
+ }
+ let tagObj = void 0;
+ const node = identity.isNode(item) ? item : ctx.doc.createNode(item, { onTagObj: (o) => tagObj = o });
+ if (!tagObj)
+ tagObj = getTagObject(ctx.doc.schema.tags, node);
+ const props = stringifyProps(node, tagObj, ctx);
+ if (props.length > 0)
+ ctx.indentAtStart = (ctx.indentAtStart ?? 0) + props.length + 1;
+ const str = typeof tagObj.stringify === "function" ? tagObj.stringify(node, ctx, onComment, onChompKeep) : identity.isScalar(node) ? stringifyString.stringifyString(node, ctx, onComment, onChompKeep) : node.toString(ctx, onComment, onChompKeep);
+ if (!props)
+ return str;
+ return identity.isScalar(node) || str[0] === "{" || str[0] === "[" ? `${props} ${str}` : `${props}
+${ctx.indent}${str}`;
+ }
+ exports2.createStringifyContext = createStringifyContext;
+ exports2.stringify = stringify;
+ }
+});
+
+// node_modules/yaml/dist/stringify/stringifyPair.js
+var require_stringifyPair = __commonJS({
+ "node_modules/yaml/dist/stringify/stringifyPair.js"(exports2) {
+ "use strict";
+ var identity = require_identity();
+ var Scalar = require_Scalar();
+ var stringify = require_stringify2();
+ var stringifyComment = require_stringifyComment();
+ function stringifyPair({ key, value }, ctx, onComment, onChompKeep) {
+ const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx;
+ let keyComment = identity.isNode(key) && key.comment || null;
+ if (simpleKeys) {
+ if (keyComment) {
+ throw new Error("With simple keys, key nodes cannot have comments");
+ }
+ if (identity.isCollection(key) || !identity.isNode(key) && typeof key === "object") {
+ const msg = "With simple keys, collection cannot be used as a key value";
+ throw new Error(msg);
+ }
+ }
+ let explicitKey = !simpleKeys && (!key || keyComment && value == null && !ctx.inFlow || identity.isCollection(key) || (identity.isScalar(key) ? key.type === Scalar.Scalar.BLOCK_FOLDED || key.type === Scalar.Scalar.BLOCK_LITERAL : typeof key === "object"));
+ ctx = Object.assign({}, ctx, {
+ allNullValues: false,
+ implicitKey: !explicitKey && (simpleKeys || !allNullValues),
+ indent: indent + indentStep
+ });
+ let keyCommentDone = false;
+ let chompKeep = false;
+ let str = stringify.stringify(key, ctx, () => keyCommentDone = true, () => chompKeep = true);
+ if (!explicitKey && !ctx.inFlow && str.length > 1024) {
+ if (simpleKeys)
+ throw new Error("With simple keys, single line scalar must not span more than 1024 characters");
+ explicitKey = true;
+ }
+ if (ctx.inFlow) {
+ if (allNullValues || value == null) {
+ if (keyCommentDone && onComment)
+ onComment();
+ return str === "" ? "?" : explicitKey ? `? ${str}` : str;
+ }
+ } else if (allNullValues && !simpleKeys || value == null && explicitKey) {
+ str = `? ${str}`;
+ if (keyComment && !keyCommentDone) {
+ str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));
+ } else if (chompKeep && onChompKeep)
+ onChompKeep();
+ return str;
+ }
+ if (keyCommentDone)
+ keyComment = null;
+ if (explicitKey) {
+ if (keyComment)
+ str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));
+ str = `? ${str}
+${indent}:`;
+ } else {
+ str = `${str}:`;
+ if (keyComment)
+ str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));
+ }
+ let vsb, vcb, valueComment;
+ if (identity.isNode(value)) {
+ vsb = !!value.spaceBefore;
+ vcb = value.commentBefore;
+ valueComment = value.comment;
+ } else {
+ vsb = false;
+ vcb = null;
+ valueComment = null;
+ if (value && typeof value === "object")
+ value = doc.createNode(value);
+ }
+ ctx.implicitKey = false;
+ if (!explicitKey && !keyComment && identity.isScalar(value))
+ ctx.indentAtStart = str.length + 1;
+ chompKeep = false;
+ if (!indentSeq && indentStep.length >= 2 && !ctx.inFlow && !explicitKey && identity.isSeq(value) && !value.flow && !value.tag && !value.anchor) {
+ ctx.indent = ctx.indent.substring(2);
+ }
+ let valueCommentDone = false;
+ const valueStr = stringify.stringify(value, ctx, () => valueCommentDone = true, () => chompKeep = true);
+ let ws = " ";
+ if (keyComment || vsb || vcb) {
+ ws = vsb ? "\n" : "";
+ if (vcb) {
+ const cs = commentString(vcb);
+ ws += `
+${stringifyComment.indentComment(cs, ctx.indent)}`;
+ }
+ if (valueStr === "" && !ctx.inFlow) {
+ if (ws === "\n")
+ ws = "\n\n";
+ } else {
+ ws += `
+${ctx.indent}`;
+ }
+ } else if (!explicitKey && identity.isCollection(value)) {
+ const vs0 = valueStr[0];
+ const nl0 = valueStr.indexOf("\n");
+ const hasNewline = nl0 !== -1;
+ const flow = ctx.inFlow ?? value.flow ?? value.items.length === 0;
+ if (hasNewline || !flow) {
+ let hasPropsLine = false;
+ if (hasNewline && (vs0 === "&" || vs0 === "!")) {
+ let sp0 = valueStr.indexOf(" ");
+ if (vs0 === "&" && sp0 !== -1 && sp0 < nl0 && valueStr[sp0 + 1] === "!") {
+ sp0 = valueStr.indexOf(" ", sp0 + 1);
+ }
+ if (sp0 === -1 || nl0 < sp0)
+ hasPropsLine = true;
+ }
+ if (!hasPropsLine)
+ ws = `
+${ctx.indent}`;
+ }
+ } else if (valueStr === "" || valueStr[0] === "\n") {
+ ws = "";
+ }
+ str += ws + valueStr;
+ if (ctx.inFlow) {
+ if (valueCommentDone && onComment)
+ onComment();
+ } else if (valueComment && !valueCommentDone) {
+ str += stringifyComment.lineComment(str, ctx.indent, commentString(valueComment));
+ } else if (chompKeep && onChompKeep) {
+ onChompKeep();
+ }
+ return str;
+ }
+ exports2.stringifyPair = stringifyPair;
+ }
+});
+
+// node_modules/yaml/dist/log.js
+var require_log = __commonJS({
+ "node_modules/yaml/dist/log.js"(exports2) {
+ "use strict";
+ var node_process = require("node:process");
+ function debug6(logLevel, ...messages) {
+ if (logLevel === "debug")
+ console.log(...messages);
+ }
+ function warn(logLevel, warning4) {
+ if (logLevel === "debug" || logLevel === "warn") {
+ if (typeof node_process.emitWarning === "function")
+ node_process.emitWarning(warning4);
+ else
+ console.warn(warning4);
+ }
+ }
+ exports2.debug = debug6;
+ exports2.warn = warn;
+ }
+});
+
+// node_modules/yaml/dist/schema/yaml-1.1/merge.js
+var require_merge = __commonJS({
+ "node_modules/yaml/dist/schema/yaml-1.1/merge.js"(exports2) {
+ "use strict";
+ var identity = require_identity();
+ var Scalar = require_Scalar();
+ var MERGE_KEY = "<<";
+ var merge = {
+ identify: (value) => value === MERGE_KEY || typeof value === "symbol" && value.description === MERGE_KEY,
+ default: "key",
+ tag: "tag:yaml.org,2002:merge",
+ test: /^<<$/,
+ resolve: () => Object.assign(new Scalar.Scalar(Symbol(MERGE_KEY)), {
+ addToJSMap: addMergeToJSMap
+ }),
+ stringify: () => MERGE_KEY
+ };
+ var isMergeKey = (ctx, key) => (merge.identify(key) || identity.isScalar(key) && (!key.type || key.type === Scalar.Scalar.PLAIN) && merge.identify(key.value)) && ctx?.doc.schema.tags.some((tag) => tag.tag === merge.tag && tag.default);
+ function addMergeToJSMap(ctx, map, value) {
+ value = ctx && identity.isAlias(value) ? value.resolve(ctx.doc) : value;
+ if (identity.isSeq(value))
+ for (const it of value.items)
+ mergeValue(ctx, map, it);
+ else if (Array.isArray(value))
+ for (const it of value)
+ mergeValue(ctx, map, it);
+ else
+ mergeValue(ctx, map, value);
+ }
+ function mergeValue(ctx, map, value) {
+ const source = ctx && identity.isAlias(value) ? value.resolve(ctx.doc) : value;
+ if (!identity.isMap(source))
+ throw new Error("Merge sources must be maps or map aliases");
+ const srcMap = source.toJSON(null, ctx, Map);
+ for (const [key, value2] of srcMap) {
+ if (map instanceof Map) {
+ if (!map.has(key))
+ map.set(key, value2);
+ } else if (map instanceof Set) {
+ map.add(key);
+ } else if (!Object.prototype.hasOwnProperty.call(map, key)) {
+ Object.defineProperty(map, key, {
+ value: value2,
+ writable: true,
+ enumerable: true,
+ configurable: true
+ });
+ }
+ }
+ return map;
+ }
+ exports2.addMergeToJSMap = addMergeToJSMap;
+ exports2.isMergeKey = isMergeKey;
+ exports2.merge = merge;
+ }
+});
+
+// node_modules/yaml/dist/nodes/addPairToJSMap.js
+var require_addPairToJSMap = __commonJS({
+ "node_modules/yaml/dist/nodes/addPairToJSMap.js"(exports2) {
+ "use strict";
+ var log = require_log();
+ var merge = require_merge();
+ var stringify = require_stringify2();
+ var identity = require_identity();
+ var toJS = require_toJS();
+ function addPairToJSMap(ctx, map, { key, value }) {
+ if (identity.isNode(key) && key.addToJSMap)
+ key.addToJSMap(ctx, map, value);
+ else if (merge.isMergeKey(ctx, key))
+ merge.addMergeToJSMap(ctx, map, value);
+ else {
+ const jsKey = toJS.toJS(key, "", ctx);
+ if (map instanceof Map) {
+ map.set(jsKey, toJS.toJS(value, jsKey, ctx));
+ } else if (map instanceof Set) {
+ map.add(jsKey);
+ } else {
+ const stringKey = stringifyKey(key, jsKey, ctx);
+ const jsValue = toJS.toJS(value, stringKey, ctx);
+ if (stringKey in map)
+ Object.defineProperty(map, stringKey, {
+ value: jsValue,
+ writable: true,
+ enumerable: true,
+ configurable: true
+ });
+ else
+ map[stringKey] = jsValue;
+ }
+ }
+ return map;
+ }
+ function stringifyKey(key, jsKey, ctx) {
+ if (jsKey === null)
+ return "";
+ if (typeof jsKey !== "object")
+ return String(jsKey);
+ if (identity.isNode(key) && ctx?.doc) {
+ const strCtx = stringify.createStringifyContext(ctx.doc, {});
+ strCtx.anchors = /* @__PURE__ */ new Set();
+ for (const node of ctx.anchors.keys())
+ strCtx.anchors.add(node.anchor);
+ strCtx.inFlow = true;
+ strCtx.inStringifyKey = true;
+ const strKey = key.toString(strCtx);
+ if (!ctx.mapKeyWarned) {
+ let jsonStr = JSON.stringify(strKey);
+ if (jsonStr.length > 40)
+ jsonStr = jsonStr.substring(0, 36) + '..."';
+ log.warn(ctx.doc.options.logLevel, `Keys with collection values will be stringified due to JS Object restrictions: ${jsonStr}. Set mapAsMap: true to use object keys.`);
+ ctx.mapKeyWarned = true;
+ }
+ return strKey;
+ }
+ return JSON.stringify(jsKey);
+ }
+ exports2.addPairToJSMap = addPairToJSMap;
+ }
+});
+
+// node_modules/yaml/dist/nodes/Pair.js
+var require_Pair = __commonJS({
+ "node_modules/yaml/dist/nodes/Pair.js"(exports2) {
+ "use strict";
+ var createNode = require_createNode();
+ var stringifyPair = require_stringifyPair();
+ var addPairToJSMap = require_addPairToJSMap();
+ var identity = require_identity();
+ function createPair(key, value, ctx) {
+ const k = createNode.createNode(key, void 0, ctx);
+ const v = createNode.createNode(value, void 0, ctx);
+ return new Pair(k, v);
+ }
+ var Pair = class _Pair {
+ constructor(key, value = null) {
+ Object.defineProperty(this, identity.NODE_TYPE, { value: identity.PAIR });
+ this.key = key;
+ this.value = value;
+ }
+ clone(schema) {
+ let { key, value } = this;
+ if (identity.isNode(key))
+ key = key.clone(schema);
+ if (identity.isNode(value))
+ value = value.clone(schema);
+ return new _Pair(key, value);
+ }
+ toJSON(_, ctx) {
+ const pair = ctx?.mapAsMap ? /* @__PURE__ */ new Map() : {};
+ return addPairToJSMap.addPairToJSMap(ctx, pair, this);
+ }
+ toString(ctx, onComment, onChompKeep) {
+ return ctx?.doc ? stringifyPair.stringifyPair(this, ctx, onComment, onChompKeep) : JSON.stringify(this);
+ }
+ };
+ exports2.Pair = Pair;
+ exports2.createPair = createPair;
+ }
+});
+
+// node_modules/yaml/dist/stringify/stringifyCollection.js
+var require_stringifyCollection = __commonJS({
+ "node_modules/yaml/dist/stringify/stringifyCollection.js"(exports2) {
+ "use strict";
+ var identity = require_identity();
+ var stringify = require_stringify2();
+ var stringifyComment = require_stringifyComment();
+ function stringifyCollection(collection, ctx, options) {
+ const flow = ctx.inFlow ?? collection.flow;
+ const stringify2 = flow ? stringifyFlowCollection : stringifyBlockCollection;
+ return stringify2(collection, ctx, options);
+ }
+ function stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) {
+ const { indent, options: { commentString } } = ctx;
+ const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null });
+ let chompKeep = false;
+ const lines = [];
+ for (let i = 0; i < items.length; ++i) {
+ const item = items[i];
+ let comment2 = null;
+ if (identity.isNode(item)) {
+ if (!chompKeep && item.spaceBefore)
+ lines.push("");
+ addCommentBefore(ctx, lines, item.commentBefore, chompKeep);
+ if (item.comment)
+ comment2 = item.comment;
+ } else if (identity.isPair(item)) {
+ const ik = identity.isNode(item.key) ? item.key : null;
+ if (ik) {
+ if (!chompKeep && ik.spaceBefore)
+ lines.push("");
+ addCommentBefore(ctx, lines, ik.commentBefore, chompKeep);
+ }
+ }
+ chompKeep = false;
+ let str2 = stringify.stringify(item, itemCtx, () => comment2 = null, () => chompKeep = true);
+ if (comment2)
+ str2 += stringifyComment.lineComment(str2, itemIndent, commentString(comment2));
+ if (chompKeep && comment2)
+ chompKeep = false;
+ lines.push(blockItemPrefix + str2);
+ }
+ let str;
+ if (lines.length === 0) {
+ str = flowChars.start + flowChars.end;
+ } else {
+ str = lines[0];
+ for (let i = 1; i < lines.length; ++i) {
+ const line = lines[i];
+ str += line ? `
+${indent}${line}` : "\n";
+ }
+ }
+ if (comment) {
+ str += "\n" + stringifyComment.indentComment(commentString(comment), indent);
+ if (onComment)
+ onComment();
+ } else if (chompKeep && onChompKeep)
+ onChompKeep();
+ return str;
+ }
+ function stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) {
+ const { indent, indentStep, flowCollectionPadding: fcPadding, options: { commentString } } = ctx;
+ itemIndent += indentStep;
+ const itemCtx = Object.assign({}, ctx, {
+ indent: itemIndent,
+ inFlow: true,
+ type: null
+ });
+ let reqNewline = false;
+ let linesAtValue = 0;
+ const lines = [];
+ for (let i = 0; i < items.length; ++i) {
+ const item = items[i];
+ let comment = null;
+ if (identity.isNode(item)) {
+ if (item.spaceBefore)
+ lines.push("");
+ addCommentBefore(ctx, lines, item.commentBefore, false);
+ if (item.comment)
+ comment = item.comment;
+ } else if (identity.isPair(item)) {
+ const ik = identity.isNode(item.key) ? item.key : null;
+ if (ik) {
+ if (ik.spaceBefore)
+ lines.push("");
+ addCommentBefore(ctx, lines, ik.commentBefore, false);
+ if (ik.comment)
+ reqNewline = true;
+ }
+ const iv = identity.isNode(item.value) ? item.value : null;
+ if (iv) {
+ if (iv.comment)
+ comment = iv.comment;
+ if (iv.commentBefore)
+ reqNewline = true;
+ } else if (item.value == null && ik?.comment) {
+ comment = ik.comment;
+ }
+ }
+ if (comment)
+ reqNewline = true;
+ let str = stringify.stringify(item, itemCtx, () => comment = null);
+ if (i < items.length - 1)
+ str += ",";
+ if (comment)
+ str += stringifyComment.lineComment(str, itemIndent, commentString(comment));
+ if (!reqNewline && (lines.length > linesAtValue || str.includes("\n")))
+ reqNewline = true;
+ lines.push(str);
+ linesAtValue = lines.length;
+ }
+ const { start, end } = flowChars;
+ if (lines.length === 0) {
+ return start + end;
+ } else {
+ if (!reqNewline) {
+ const len = lines.reduce((sum, line) => sum + line.length + 2, 2);
+ reqNewline = ctx.options.lineWidth > 0 && len > ctx.options.lineWidth;
+ }
+ if (reqNewline) {
+ let str = start;
+ for (const line of lines)
+ str += line ? `
+${indentStep}${indent}${line}` : "\n";
+ return `${str}
+${indent}${end}`;
+ } else {
+ return `${start}${fcPadding}${lines.join(" ")}${fcPadding}${end}`;
+ }
+ }
+ }
+ function addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) {
+ if (comment && chompKeep)
+ comment = comment.replace(/^\n+/, "");
+ if (comment) {
+ const ic = stringifyComment.indentComment(commentString(comment), indent);
+ lines.push(ic.trimStart());
+ }
+ }
+ exports2.stringifyCollection = stringifyCollection;
+ }
+});
+
+// node_modules/yaml/dist/nodes/YAMLMap.js
+var require_YAMLMap = __commonJS({
+ "node_modules/yaml/dist/nodes/YAMLMap.js"(exports2) {
+ "use strict";
+ var stringifyCollection = require_stringifyCollection();
+ var addPairToJSMap = require_addPairToJSMap();
+ var Collection = require_Collection();
+ var identity = require_identity();
+ var Pair = require_Pair();
+ var Scalar = require_Scalar();
+ function findPair(items, key) {
+ const k = identity.isScalar(key) ? key.value : key;
+ for (const it of items) {
+ if (identity.isPair(it)) {
+ if (it.key === key || it.key === k)
+ return it;
+ if (identity.isScalar(it.key) && it.key.value === k)
+ return it;
+ }
+ }
+ return void 0;
+ }
+ var YAMLMap = class extends Collection.Collection {
+ static get tagName() {
+ return "tag:yaml.org,2002:map";
+ }
+ constructor(schema) {
+ super(identity.MAP, schema);
+ this.items = [];
+ }
+ /**
+ * A generic collection parsing method that can be extended
+ * to other node classes that inherit from YAMLMap
+ */
+ static from(schema, obj, ctx) {
+ const { keepUndefined, replacer } = ctx;
+ const map = new this(schema);
+ const add = (key, value) => {
+ if (typeof replacer === "function")
+ value = replacer.call(obj, key, value);
+ else if (Array.isArray(replacer) && !replacer.includes(key))
+ return;
+ if (value !== void 0 || keepUndefined)
+ map.items.push(Pair.createPair(key, value, ctx));
+ };
+ if (obj instanceof Map) {
+ for (const [key, value] of obj)
+ add(key, value);
+ } else if (obj && typeof obj === "object") {
+ for (const key of Object.keys(obj))
+ add(key, obj[key]);
+ }
+ if (typeof schema.sortMapEntries === "function") {
+ map.items.sort(schema.sortMapEntries);
+ }
+ return map;
+ }
+ /**
+ * Adds a value to the collection.
+ *
+ * @param overwrite - If not set `true`, using a key that is already in the
+ * collection will throw. Otherwise, overwrites the previous value.
+ */
+ add(pair, overwrite) {
+ let _pair;
+ if (identity.isPair(pair))
+ _pair = pair;
+ else if (!pair || typeof pair !== "object" || !("key" in pair)) {
+ _pair = new Pair.Pair(pair, pair?.value);
+ } else
+ _pair = new Pair.Pair(pair.key, pair.value);
+ const prev = findPair(this.items, _pair.key);
+ const sortEntries = this.schema?.sortMapEntries;
+ if (prev) {
+ if (!overwrite)
+ throw new Error(`Key ${_pair.key} already set`);
+ if (identity.isScalar(prev.value) && Scalar.isScalarValue(_pair.value))
+ prev.value.value = _pair.value;
+ else
+ prev.value = _pair.value;
+ } else if (sortEntries) {
+ const i = this.items.findIndex((item) => sortEntries(_pair, item) < 0);
+ if (i === -1)
+ this.items.push(_pair);
+ else
+ this.items.splice(i, 0, _pair);
+ } else {
+ this.items.push(_pair);
+ }
+ }
+ delete(key) {
+ const it = findPair(this.items, key);
+ if (!it)
+ return false;
+ const del = this.items.splice(this.items.indexOf(it), 1);
+ return del.length > 0;
+ }
+ get(key, keepScalar) {
+ const it = findPair(this.items, key);
+ const node = it?.value;
+ return (!keepScalar && identity.isScalar(node) ? node.value : node) ?? void 0;
+ }
+ has(key) {
+ return !!findPair(this.items, key);
+ }
+ set(key, value) {
+ this.add(new Pair.Pair(key, value), true);
+ }
+ /**
+ * @param ctx - Conversion context, originally set in Document#toJS()
+ * @param {Class} Type - If set, forces the returned collection type
+ * @returns Instance of Type, Map, or Object
+ */
+ toJSON(_, ctx, Type) {
+ const map = Type ? new Type() : ctx?.mapAsMap ? /* @__PURE__ */ new Map() : {};
+ if (ctx?.onCreate)
+ ctx.onCreate(map);
+ for (const item of this.items)
+ addPairToJSMap.addPairToJSMap(ctx, map, item);
+ return map;
+ }
+ toString(ctx, onComment, onChompKeep) {
+ if (!ctx)
+ return JSON.stringify(this);
+ for (const item of this.items) {
+ if (!identity.isPair(item))
+ throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`);
+ }
+ if (!ctx.allNullValues && this.hasAllNullValues(false))
+ ctx = Object.assign({}, ctx, { allNullValues: true });
+ return stringifyCollection.stringifyCollection(this, ctx, {
+ blockItemPrefix: "",
+ flowChars: { start: "{", end: "}" },
+ itemIndent: ctx.indent || "",
+ onChompKeep,
+ onComment
+ });
+ }
+ };
+ exports2.YAMLMap = YAMLMap;
+ exports2.findPair = findPair;
+ }
+});
+
+// node_modules/yaml/dist/schema/common/map.js
+var require_map = __commonJS({
+ "node_modules/yaml/dist/schema/common/map.js"(exports2) {
+ "use strict";
+ var identity = require_identity();
+ var YAMLMap = require_YAMLMap();
+ var map = {
+ collection: "map",
+ default: true,
+ nodeClass: YAMLMap.YAMLMap,
+ tag: "tag:yaml.org,2002:map",
+ resolve(map2, onError) {
+ if (!identity.isMap(map2))
+ onError("Expected a mapping for this tag");
+ return map2;
+ },
+ createNode: (schema, obj, ctx) => YAMLMap.YAMLMap.from(schema, obj, ctx)
+ };
+ exports2.map = map;
+ }
+});
+
+// node_modules/yaml/dist/nodes/YAMLSeq.js
+var require_YAMLSeq = __commonJS({
+ "node_modules/yaml/dist/nodes/YAMLSeq.js"(exports2) {
+ "use strict";
+ var createNode = require_createNode();
+ var stringifyCollection = require_stringifyCollection();
+ var Collection = require_Collection();
+ var identity = require_identity();
+ var Scalar = require_Scalar();
+ var toJS = require_toJS();
+ var YAMLSeq = class extends Collection.Collection {
+ static get tagName() {
+ return "tag:yaml.org,2002:seq";
+ }
+ constructor(schema) {
+ super(identity.SEQ, schema);
+ this.items = [];
+ }
+ add(value) {
+ this.items.push(value);
+ }
+ /**
+ * Removes a value from the collection.
+ *
+ * `key` must contain a representation of an integer for this to succeed.
+ * It may be wrapped in a `Scalar`.
+ *
+ * @returns `true` if the item was found and removed.
+ */
+ delete(key) {
+ const idx = asItemIndex(key);
+ if (typeof idx !== "number")
+ return false;
+ const del = this.items.splice(idx, 1);
+ return del.length > 0;
+ }
+ get(key, keepScalar) {
+ const idx = asItemIndex(key);
+ if (typeof idx !== "number")
+ return void 0;
+ const it = this.items[idx];
+ return !keepScalar && identity.isScalar(it) ? it.value : it;
+ }
+ /**
+ * Checks if the collection includes a value with the key `key`.
+ *
+ * `key` must contain a representation of an integer for this to succeed.
+ * It may be wrapped in a `Scalar`.
+ */
+ has(key) {
+ const idx = asItemIndex(key);
+ return typeof idx === "number" && idx < this.items.length;
+ }
+ /**
+ * Sets a value in this collection. For `!!set`, `value` needs to be a
+ * boolean to add/remove the item from the set.
+ *
+ * If `key` does not contain a representation of an integer, this will throw.
+ * It may be wrapped in a `Scalar`.
+ */
+ set(key, value) {
+ const idx = asItemIndex(key);
+ if (typeof idx !== "number")
+ throw new Error(`Expected a valid index, not ${key}.`);
+ const prev = this.items[idx];
+ if (identity.isScalar(prev) && Scalar.isScalarValue(value))
+ prev.value = value;
+ else
+ this.items[idx] = value;
+ }
+ toJSON(_, ctx) {
+ const seq = [];
+ if (ctx?.onCreate)
+ ctx.onCreate(seq);
+ let i = 0;
+ for (const item of this.items)
+ seq.push(toJS.toJS(item, String(i++), ctx));
+ return seq;
+ }
+ toString(ctx, onComment, onChompKeep) {
+ if (!ctx)
+ return JSON.stringify(this);
+ return stringifyCollection.stringifyCollection(this, ctx, {
+ blockItemPrefix: "- ",
+ flowChars: { start: "[", end: "]" },
+ itemIndent: (ctx.indent || "") + " ",
+ onChompKeep,
+ onComment
+ });
+ }
+ static from(schema, obj, ctx) {
+ const { replacer } = ctx;
+ const seq = new this(schema);
+ if (obj && Symbol.iterator in Object(obj)) {
+ let i = 0;
+ for (let it of obj) {
+ if (typeof replacer === "function") {
+ const key = obj instanceof Set ? it : String(i++);
+ it = replacer.call(obj, key, it);
+ }
+ seq.items.push(createNode.createNode(it, void 0, ctx));
+ }
+ }
+ return seq;
+ }
+ };
+ function asItemIndex(key) {
+ let idx = identity.isScalar(key) ? key.value : key;
+ if (idx && typeof idx === "string")
+ idx = Number(idx);
+ return typeof idx === "number" && Number.isInteger(idx) && idx >= 0 ? idx : null;
+ }
+ exports2.YAMLSeq = YAMLSeq;
+ }
+});
+
+// node_modules/yaml/dist/schema/common/seq.js
+var require_seq = __commonJS({
+ "node_modules/yaml/dist/schema/common/seq.js"(exports2) {
+ "use strict";
+ var identity = require_identity();
+ var YAMLSeq = require_YAMLSeq();
+ var seq = {
+ collection: "seq",
+ default: true,
+ nodeClass: YAMLSeq.YAMLSeq,
+ tag: "tag:yaml.org,2002:seq",
+ resolve(seq2, onError) {
+ if (!identity.isSeq(seq2))
+ onError("Expected a sequence for this tag");
+ return seq2;
+ },
+ createNode: (schema, obj, ctx) => YAMLSeq.YAMLSeq.from(schema, obj, ctx)
+ };
+ exports2.seq = seq;
+ }
+});
+
+// node_modules/yaml/dist/schema/common/string.js
+var require_string = __commonJS({
+ "node_modules/yaml/dist/schema/common/string.js"(exports2) {
+ "use strict";
+ var stringifyString = require_stringifyString();
+ var string = {
+ identify: (value) => typeof value === "string",
+ default: true,
+ tag: "tag:yaml.org,2002:str",
+ resolve: (str) => str,
+ stringify(item, ctx, onComment, onChompKeep) {
+ ctx = Object.assign({ actualString: true }, ctx);
+ return stringifyString.stringifyString(item, ctx, onComment, onChompKeep);
+ }
+ };
+ exports2.string = string;
+ }
+});
+
+// node_modules/yaml/dist/schema/common/null.js
+var require_null = __commonJS({
+ "node_modules/yaml/dist/schema/common/null.js"(exports2) {
+ "use strict";
+ var Scalar = require_Scalar();
+ var nullTag = {
+ identify: (value) => value == null,
+ createNode: () => new Scalar.Scalar(null),
+ default: true,
+ tag: "tag:yaml.org,2002:null",
+ test: /^(?:~|[Nn]ull|NULL)?$/,
+ resolve: () => new Scalar.Scalar(null),
+ stringify: ({ source }, ctx) => typeof source === "string" && nullTag.test.test(source) ? source : ctx.options.nullStr
+ };
+ exports2.nullTag = nullTag;
+ }
+});
+
+// node_modules/yaml/dist/schema/core/bool.js
+var require_bool = __commonJS({
+ "node_modules/yaml/dist/schema/core/bool.js"(exports2) {
+ "use strict";
+ var Scalar = require_Scalar();
+ var boolTag = {
+ identify: (value) => typeof value === "boolean",
+ default: true,
+ tag: "tag:yaml.org,2002:bool",
+ test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,
+ resolve: (str) => new Scalar.Scalar(str[0] === "t" || str[0] === "T"),
+ stringify({ source, value }, ctx) {
+ if (source && boolTag.test.test(source)) {
+ const sv = source[0] === "t" || source[0] === "T";
+ if (value === sv)
+ return source;
+ }
+ return value ? ctx.options.trueStr : ctx.options.falseStr;
+ }
+ };
+ exports2.boolTag = boolTag;
+ }
+});
+
+// node_modules/yaml/dist/stringify/stringifyNumber.js
+var require_stringifyNumber = __commonJS({
+ "node_modules/yaml/dist/stringify/stringifyNumber.js"(exports2) {
+ "use strict";
+ function stringifyNumber({ format, minFractionDigits, tag, value }) {
+ if (typeof value === "bigint")
+ return String(value);
+ const num = typeof value === "number" ? value : Number(value);
+ if (!isFinite(num))
+ return isNaN(num) ? ".nan" : num < 0 ? "-.inf" : ".inf";
+ let n = JSON.stringify(value);
+ if (!format && minFractionDigits && (!tag || tag === "tag:yaml.org,2002:float") && /^\d/.test(n)) {
+ let i = n.indexOf(".");
+ if (i < 0) {
+ i = n.length;
+ n += ".";
+ }
+ let d = minFractionDigits - (n.length - i - 1);
+ while (d-- > 0)
+ n += "0";
+ }
+ return n;
+ }
+ exports2.stringifyNumber = stringifyNumber;
+ }
+});
+
+// node_modules/yaml/dist/schema/core/float.js
+var require_float = __commonJS({
+ "node_modules/yaml/dist/schema/core/float.js"(exports2) {
+ "use strict";
+ var Scalar = require_Scalar();
+ var stringifyNumber = require_stringifyNumber();
+ var floatNaN = {
+ identify: (value) => typeof value === "number",
+ default: true,
+ tag: "tag:yaml.org,2002:float",
+ test: /^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,
+ resolve: (str) => str.slice(-3).toLowerCase() === "nan" ? NaN : str[0] === "-" ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY,
+ stringify: stringifyNumber.stringifyNumber
+ };
+ var floatExp = {
+ identify: (value) => typeof value === "number",
+ default: true,
+ tag: "tag:yaml.org,2002:float",
+ format: "EXP",
+ test: /^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,
+ resolve: (str) => parseFloat(str),
+ stringify(node) {
+ const num = Number(node.value);
+ return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node);
+ }
+ };
+ var float = {
+ identify: (value) => typeof value === "number",
+ default: true,
+ tag: "tag:yaml.org,2002:float",
+ test: /^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/,
+ resolve(str) {
+ const node = new Scalar.Scalar(parseFloat(str));
+ const dot = str.indexOf(".");
+ if (dot !== -1 && str[str.length - 1] === "0")
+ node.minFractionDigits = str.length - dot - 1;
+ return node;
+ },
+ stringify: stringifyNumber.stringifyNumber
+ };
+ exports2.float = float;
+ exports2.floatExp = floatExp;
+ exports2.floatNaN = floatNaN;
+ }
+});
+
+// node_modules/yaml/dist/schema/core/int.js
+var require_int = __commonJS({
+ "node_modules/yaml/dist/schema/core/int.js"(exports2) {
+ "use strict";
+ var stringifyNumber = require_stringifyNumber();
+ var intIdentify = (value) => typeof value === "bigint" || Number.isInteger(value);
+ var intResolve = (str, offset, radix, { intAsBigInt }) => intAsBigInt ? BigInt(str) : parseInt(str.substring(offset), radix);
+ function intStringify(node, radix, prefix) {
+ const { value } = node;
+ if (intIdentify(value) && value >= 0)
+ return prefix + value.toString(radix);
+ return stringifyNumber.stringifyNumber(node);
+ }
+ var intOct = {
+ identify: (value) => intIdentify(value) && value >= 0,
+ default: true,
+ tag: "tag:yaml.org,2002:int",
+ format: "OCT",
+ test: /^0o[0-7]+$/,
+ resolve: (str, _onError, opt) => intResolve(str, 2, 8, opt),
+ stringify: (node) => intStringify(node, 8, "0o")
+ };
+ var int = {
+ identify: intIdentify,
+ default: true,
+ tag: "tag:yaml.org,2002:int",
+ test: /^[-+]?[0-9]+$/,
+ resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),
+ stringify: stringifyNumber.stringifyNumber
+ };
+ var intHex = {
+ identify: (value) => intIdentify(value) && value >= 0,
+ default: true,
+ tag: "tag:yaml.org,2002:int",
+ format: "HEX",
+ test: /^0x[0-9a-fA-F]+$/,
+ resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),
+ stringify: (node) => intStringify(node, 16, "0x")
+ };
+ exports2.int = int;
+ exports2.intHex = intHex;
+ exports2.intOct = intOct;
+ }
+});
+
+// node_modules/yaml/dist/schema/core/schema.js
+var require_schema = __commonJS({
+ "node_modules/yaml/dist/schema/core/schema.js"(exports2) {
+ "use strict";
+ var map = require_map();
+ var _null = require_null();
+ var seq = require_seq();
+ var string = require_string();
+ var bool = require_bool();
+ var float = require_float();
+ var int = require_int();
+ var schema = [
+ map.map,
+ seq.seq,
+ string.string,
+ _null.nullTag,
+ bool.boolTag,
+ int.intOct,
+ int.int,
+ int.intHex,
+ float.floatNaN,
+ float.floatExp,
+ float.float
+ ];
+ exports2.schema = schema;
+ }
+});
+
+// node_modules/yaml/dist/schema/json/schema.js
+var require_schema2 = __commonJS({
+ "node_modules/yaml/dist/schema/json/schema.js"(exports2) {
+ "use strict";
+ var Scalar = require_Scalar();
+ var map = require_map();
+ var seq = require_seq();
+ function intIdentify(value) {
+ return typeof value === "bigint" || Number.isInteger(value);
+ }
+ var stringifyJSON = ({ value }) => JSON.stringify(value);
+ var jsonScalars = [
+ {
+ identify: (value) => typeof value === "string",
+ default: true,
+ tag: "tag:yaml.org,2002:str",
+ resolve: (str) => str,
+ stringify: stringifyJSON
+ },
+ {
+ identify: (value) => value == null,
+ createNode: () => new Scalar.Scalar(null),
+ default: true,
+ tag: "tag:yaml.org,2002:null",
+ test: /^null$/,
+ resolve: () => null,
+ stringify: stringifyJSON
+ },
+ {
+ identify: (value) => typeof value === "boolean",
+ default: true,
+ tag: "tag:yaml.org,2002:bool",
+ test: /^true$|^false$/,
+ resolve: (str) => str === "true",
+ stringify: stringifyJSON
+ },
+ {
+ identify: intIdentify,
+ default: true,
+ tag: "tag:yaml.org,2002:int",
+ test: /^-?(?:0|[1-9][0-9]*)$/,
+ resolve: (str, _onError, { intAsBigInt }) => intAsBigInt ? BigInt(str) : parseInt(str, 10),
+ stringify: ({ value }) => intIdentify(value) ? value.toString() : JSON.stringify(value)
+ },
+ {
+ identify: (value) => typeof value === "number",
+ default: true,
+ tag: "tag:yaml.org,2002:float",
+ test: /^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,
+ resolve: (str) => parseFloat(str),
+ stringify: stringifyJSON
+ }
+ ];
+ var jsonError = {
+ default: true,
+ tag: "",
+ test: /^/,
+ resolve(str, onError) {
+ onError(`Unresolved plain scalar ${JSON.stringify(str)}`);
+ return str;
+ }
+ };
+ var schema = [map.map, seq.seq].concat(jsonScalars, jsonError);
+ exports2.schema = schema;
+ }
+});
+
+// node_modules/yaml/dist/schema/yaml-1.1/binary.js
+var require_binary = __commonJS({
+ "node_modules/yaml/dist/schema/yaml-1.1/binary.js"(exports2) {
+ "use strict";
+ var node_buffer = require("node:buffer");
+ var Scalar = require_Scalar();
+ var stringifyString = require_stringifyString();
+ var binary = {
+ identify: (value) => value instanceof Uint8Array,
+ // Buffer inherits from Uint8Array
+ default: false,
+ tag: "tag:yaml.org,2002:binary",
+ /**
+ * Returns a Buffer in node and an Uint8Array in browsers
+ *
+ * To use the resulting buffer as an image, you'll want to do something like:
+ *
+ * const blob = new Blob([buffer], { type: 'image/jpeg' })
+ * document.querySelector('#photo').src = URL.createObjectURL(blob)
+ */
+ resolve(src, onError) {
+ if (typeof node_buffer.Buffer === "function") {
+ return node_buffer.Buffer.from(src, "base64");
+ } else if (typeof atob === "function") {
+ const str = atob(src.replace(/[\n\r]/g, ""));
+ const buffer = new Uint8Array(str.length);
+ for (let i = 0; i < str.length; ++i)
+ buffer[i] = str.charCodeAt(i);
+ return buffer;
+ } else {
+ onError("This environment does not support reading binary tags; either Buffer or atob is required");
+ return src;
+ }
+ },
+ stringify({ comment, type, value }, ctx, onComment, onChompKeep) {
+ const buf = value;
+ let str;
+ if (typeof node_buffer.Buffer === "function") {
+ str = buf instanceof node_buffer.Buffer ? buf.toString("base64") : node_buffer.Buffer.from(buf.buffer).toString("base64");
+ } else if (typeof btoa === "function") {
+ let s = "";
+ for (let i = 0; i < buf.length; ++i)
+ s += String.fromCharCode(buf[i]);
+ str = btoa(s);
+ } else {
+ throw new Error("This environment does not support writing binary tags; either Buffer or btoa is required");
+ }
+ if (!type)
+ type = Scalar.Scalar.BLOCK_LITERAL;
+ if (type !== Scalar.Scalar.QUOTE_DOUBLE) {
+ const lineWidth = Math.max(ctx.options.lineWidth - ctx.indent.length, ctx.options.minContentWidth);
+ const n = Math.ceil(str.length / lineWidth);
+ const lines = new Array(n);
+ for (let i = 0, o = 0; i < n; ++i, o += lineWidth) {
+ lines[i] = str.substr(o, lineWidth);
+ }
+ str = lines.join(type === Scalar.Scalar.BLOCK_LITERAL ? "\n" : " ");
+ }
+ return stringifyString.stringifyString({ comment, type, value: str }, ctx, onComment, onChompKeep);
+ }
+ };
+ exports2.binary = binary;
+ }
+});
+
+// node_modules/yaml/dist/schema/yaml-1.1/pairs.js
+var require_pairs = __commonJS({
+ "node_modules/yaml/dist/schema/yaml-1.1/pairs.js"(exports2) {
+ "use strict";
+ var identity = require_identity();
+ var Pair = require_Pair();
+ var Scalar = require_Scalar();
+ var YAMLSeq = require_YAMLSeq();
+ function resolvePairs(seq, onError) {
+ if (identity.isSeq(seq)) {
+ for (let i = 0; i < seq.items.length; ++i) {
+ let item = seq.items[i];
+ if (identity.isPair(item))
+ continue;
+ else if (identity.isMap(item)) {
+ if (item.items.length > 1)
+ onError("Each pair must have its own sequence indicator");
+ const pair = item.items[0] || new Pair.Pair(new Scalar.Scalar(null));
+ if (item.commentBefore)
+ pair.key.commentBefore = pair.key.commentBefore ? `${item.commentBefore}
+${pair.key.commentBefore}` : item.commentBefore;
+ if (item.comment) {
+ const cn = pair.value ?? pair.key;
+ cn.comment = cn.comment ? `${item.comment}
+${cn.comment}` : item.comment;
+ }
+ item = pair;
+ }
+ seq.items[i] = identity.isPair(item) ? item : new Pair.Pair(item);
+ }
+ } else
+ onError("Expected a sequence for this tag");
+ return seq;
+ }
+ function createPairs(schema, iterable, ctx) {
+ const { replacer } = ctx;
+ const pairs2 = new YAMLSeq.YAMLSeq(schema);
+ pairs2.tag = "tag:yaml.org,2002:pairs";
+ let i = 0;
+ if (iterable && Symbol.iterator in Object(iterable))
+ for (let it of iterable) {
+ if (typeof replacer === "function")
+ it = replacer.call(iterable, String(i++), it);
+ let key, value;
+ if (Array.isArray(it)) {
+ if (it.length === 2) {
+ key = it[0];
+ value = it[1];
+ } else
+ throw new TypeError(`Expected [key, value] tuple: ${it}`);
+ } else if (it && it instanceof Object) {
+ const keys = Object.keys(it);
+ if (keys.length === 1) {
+ key = keys[0];
+ value = it[key];
+ } else {
+ throw new TypeError(`Expected tuple with one key, not ${keys.length} keys`);
+ }
+ } else {
+ key = it;
+ }
+ pairs2.items.push(Pair.createPair(key, value, ctx));
+ }
+ return pairs2;
+ }
+ var pairs = {
+ collection: "seq",
+ default: false,
+ tag: "tag:yaml.org,2002:pairs",
+ resolve: resolvePairs,
+ createNode: createPairs
+ };
+ exports2.createPairs = createPairs;
+ exports2.pairs = pairs;
+ exports2.resolvePairs = resolvePairs;
+ }
+});
+
+// node_modules/yaml/dist/schema/yaml-1.1/omap.js
+var require_omap = __commonJS({
+ "node_modules/yaml/dist/schema/yaml-1.1/omap.js"(exports2) {
+ "use strict";
+ var identity = require_identity();
+ var toJS = require_toJS();
+ var YAMLMap = require_YAMLMap();
+ var YAMLSeq = require_YAMLSeq();
+ var pairs = require_pairs();
+ var YAMLOMap = class _YAMLOMap extends YAMLSeq.YAMLSeq {
+ constructor() {
+ super();
+ this.add = YAMLMap.YAMLMap.prototype.add.bind(this);
+ this.delete = YAMLMap.YAMLMap.prototype.delete.bind(this);
+ this.get = YAMLMap.YAMLMap.prototype.get.bind(this);
+ this.has = YAMLMap.YAMLMap.prototype.has.bind(this);
+ this.set = YAMLMap.YAMLMap.prototype.set.bind(this);
+ this.tag = _YAMLOMap.tag;
+ }
+ /**
+ * If `ctx` is given, the return type is actually `Map`,
+ * but TypeScript won't allow widening the signature of a child method.
+ */
+ toJSON(_, ctx) {
+ if (!ctx)
+ return super.toJSON(_);
+ const map = /* @__PURE__ */ new Map();
+ if (ctx?.onCreate)
+ ctx.onCreate(map);
+ for (const pair of this.items) {
+ let key, value;
+ if (identity.isPair(pair)) {
+ key = toJS.toJS(pair.key, "", ctx);
+ value = toJS.toJS(pair.value, key, ctx);
+ } else {
+ key = toJS.toJS(pair, "", ctx);
+ }
+ if (map.has(key))
+ throw new Error("Ordered maps must not include duplicate keys");
+ map.set(key, value);
+ }
+ return map;
+ }
+ static from(schema, iterable, ctx) {
+ const pairs$1 = pairs.createPairs(schema, iterable, ctx);
+ const omap2 = new this();
+ omap2.items = pairs$1.items;
+ return omap2;
+ }
+ };
+ YAMLOMap.tag = "tag:yaml.org,2002:omap";
+ var omap = {
+ collection: "seq",
+ identify: (value) => value instanceof Map,
+ nodeClass: YAMLOMap,
+ default: false,
+ tag: "tag:yaml.org,2002:omap",
+ resolve(seq, onError) {
+ const pairs$1 = pairs.resolvePairs(seq, onError);
+ const seenKeys = [];
+ for (const { key } of pairs$1.items) {
+ if (identity.isScalar(key)) {
+ if (seenKeys.includes(key.value)) {
+ onError(`Ordered maps must not include duplicate keys: ${key.value}`);
+ } else {
+ seenKeys.push(key.value);
+ }
+ }
+ }
+ return Object.assign(new YAMLOMap(), pairs$1);
+ },
+ createNode: (schema, iterable, ctx) => YAMLOMap.from(schema, iterable, ctx)
+ };
+ exports2.YAMLOMap = YAMLOMap;
+ exports2.omap = omap;
+ }
+});
+
+// node_modules/yaml/dist/schema/yaml-1.1/bool.js
+var require_bool2 = __commonJS({
+ "node_modules/yaml/dist/schema/yaml-1.1/bool.js"(exports2) {
+ "use strict";
+ var Scalar = require_Scalar();
+ function boolStringify({ value, source }, ctx) {
+ const boolObj = value ? trueTag : falseTag;
+ if (source && boolObj.test.test(source))
+ return source;
+ return value ? ctx.options.trueStr : ctx.options.falseStr;
+ }
+ var trueTag = {
+ identify: (value) => value === true,
+ default: true,
+ tag: "tag:yaml.org,2002:bool",
+ test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,
+ resolve: () => new Scalar.Scalar(true),
+ stringify: boolStringify
+ };
+ var falseTag = {
+ identify: (value) => value === false,
+ default: true,
+ tag: "tag:yaml.org,2002:bool",
+ test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,
+ resolve: () => new Scalar.Scalar(false),
+ stringify: boolStringify
+ };
+ exports2.falseTag = falseTag;
+ exports2.trueTag = trueTag;
+ }
+});
+
+// node_modules/yaml/dist/schema/yaml-1.1/float.js
+var require_float2 = __commonJS({
+ "node_modules/yaml/dist/schema/yaml-1.1/float.js"(exports2) {
+ "use strict";
+ var Scalar = require_Scalar();
+ var stringifyNumber = require_stringifyNumber();
+ var floatNaN = {
+ identify: (value) => typeof value === "number",
+ default: true,
+ tag: "tag:yaml.org,2002:float",
+ test: /^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,
+ resolve: (str) => str.slice(-3).toLowerCase() === "nan" ? NaN : str[0] === "-" ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY,
+ stringify: stringifyNumber.stringifyNumber
+ };
+ var floatExp = {
+ identify: (value) => typeof value === "number",
+ default: true,
+ tag: "tag:yaml.org,2002:float",
+ format: "EXP",
+ test: /^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,
+ resolve: (str) => parseFloat(str.replace(/_/g, "")),
+ stringify(node) {
+ const num = Number(node.value);
+ return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node);
+ }
+ };
+ var float = {
+ identify: (value) => typeof value === "number",
+ default: true,
+ tag: "tag:yaml.org,2002:float",
+ test: /^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,
+ resolve(str) {
+ const node = new Scalar.Scalar(parseFloat(str.replace(/_/g, "")));
+ const dot = str.indexOf(".");
+ if (dot !== -1) {
+ const f = str.substring(dot + 1).replace(/_/g, "");
+ if (f[f.length - 1] === "0")
+ node.minFractionDigits = f.length;
+ }
+ return node;
+ },
+ stringify: stringifyNumber.stringifyNumber
+ };
+ exports2.float = float;
+ exports2.floatExp = floatExp;
+ exports2.floatNaN = floatNaN;
+ }
+});
+
+// node_modules/yaml/dist/schema/yaml-1.1/int.js
+var require_int2 = __commonJS({
+ "node_modules/yaml/dist/schema/yaml-1.1/int.js"(exports2) {
+ "use strict";
+ var stringifyNumber = require_stringifyNumber();
+ var intIdentify = (value) => typeof value === "bigint" || Number.isInteger(value);
+ function intResolve(str, offset, radix, { intAsBigInt }) {
+ const sign = str[0];
+ if (sign === "-" || sign === "+")
+ offset += 1;
+ str = str.substring(offset).replace(/_/g, "");
+ if (intAsBigInt) {
+ switch (radix) {
+ case 2:
+ str = `0b${str}`;
+ break;
+ case 8:
+ str = `0o${str}`;
+ break;
+ case 16:
+ str = `0x${str}`;
+ break;
+ }
+ const n2 = BigInt(str);
+ return sign === "-" ? BigInt(-1) * n2 : n2;
+ }
+ const n = parseInt(str, radix);
+ return sign === "-" ? -1 * n : n;
+ }
+ function intStringify(node, radix, prefix) {
+ const { value } = node;
+ if (intIdentify(value)) {
+ const str = value.toString(radix);
+ return value < 0 ? "-" + prefix + str.substr(1) : prefix + str;
+ }
+ return stringifyNumber.stringifyNumber(node);
+ }
+ var intBin = {
+ identify: intIdentify,
+ default: true,
+ tag: "tag:yaml.org,2002:int",
+ format: "BIN",
+ test: /^[-+]?0b[0-1_]+$/,
+ resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt),
+ stringify: (node) => intStringify(node, 2, "0b")
+ };
+ var intOct = {
+ identify: intIdentify,
+ default: true,
+ tag: "tag:yaml.org,2002:int",
+ format: "OCT",
+ test: /^[-+]?0[0-7_]+$/,
+ resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt),
+ stringify: (node) => intStringify(node, 8, "0")
+ };
+ var int = {
+ identify: intIdentify,
+ default: true,
+ tag: "tag:yaml.org,2002:int",
+ test: /^[-+]?[0-9][0-9_]*$/,
+ resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),
+ stringify: stringifyNumber.stringifyNumber
+ };
+ var intHex = {
+ identify: intIdentify,
+ default: true,
+ tag: "tag:yaml.org,2002:int",
+ format: "HEX",
+ test: /^[-+]?0x[0-9a-fA-F_]+$/,
+ resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),
+ stringify: (node) => intStringify(node, 16, "0x")
+ };
+ exports2.int = int;
+ exports2.intBin = intBin;
+ exports2.intHex = intHex;
+ exports2.intOct = intOct;
+ }
+});
+
+// node_modules/yaml/dist/schema/yaml-1.1/set.js
+var require_set = __commonJS({
+ "node_modules/yaml/dist/schema/yaml-1.1/set.js"(exports2) {
+ "use strict";
+ var identity = require_identity();
+ var Pair = require_Pair();
+ var YAMLMap = require_YAMLMap();
+ var YAMLSet = class _YAMLSet extends YAMLMap.YAMLMap {
+ constructor(schema) {
+ super(schema);
+ this.tag = _YAMLSet.tag;
+ }
+ add(key) {
+ let pair;
+ if (identity.isPair(key))
+ pair = key;
+ else if (key && typeof key === "object" && "key" in key && "value" in key && key.value === null)
+ pair = new Pair.Pair(key.key, null);
+ else
+ pair = new Pair.Pair(key, null);
+ const prev = YAMLMap.findPair(this.items, pair.key);
+ if (!prev)
+ this.items.push(pair);
+ }
+ /**
+ * If `keepPair` is `true`, returns the Pair matching `key`.
+ * Otherwise, returns the value of that Pair's key.
+ */
+ get(key, keepPair) {
+ const pair = YAMLMap.findPair(this.items, key);
+ return !keepPair && identity.isPair(pair) ? identity.isScalar(pair.key) ? pair.key.value : pair.key : pair;
+ }
+ set(key, value) {
+ if (typeof value !== "boolean")
+ throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);
+ const prev = YAMLMap.findPair(this.items, key);
+ if (prev && !value) {
+ this.items.splice(this.items.indexOf(prev), 1);
+ } else if (!prev && value) {
+ this.items.push(new Pair.Pair(key));
+ }
+ }
+ toJSON(_, ctx) {
+ return super.toJSON(_, ctx, Set);
+ }
+ toString(ctx, onComment, onChompKeep) {
+ if (!ctx)
+ return JSON.stringify(this);
+ if (this.hasAllNullValues(true))
+ return super.toString(Object.assign({}, ctx, { allNullValues: true }), onComment, onChompKeep);
+ else
+ throw new Error("Set items must all have null values");
+ }
+ static from(schema, iterable, ctx) {
+ const { replacer } = ctx;
+ const set2 = new this(schema);
+ if (iterable && Symbol.iterator in Object(iterable))
+ for (let value of iterable) {
+ if (typeof replacer === "function")
+ value = replacer.call(iterable, value, value);
+ set2.items.push(Pair.createPair(value, null, ctx));
+ }
+ return set2;
+ }
+ };
+ YAMLSet.tag = "tag:yaml.org,2002:set";
+ var set = {
+ collection: "map",
+ identify: (value) => value instanceof Set,
+ nodeClass: YAMLSet,
+ default: false,
+ tag: "tag:yaml.org,2002:set",
+ createNode: (schema, iterable, ctx) => YAMLSet.from(schema, iterable, ctx),
+ resolve(map, onError) {
+ if (identity.isMap(map)) {
+ if (map.hasAllNullValues(true))
+ return Object.assign(new YAMLSet(), map);
+ else
+ onError("Set items must all have null values");
+ } else
+ onError("Expected a mapping for this tag");
+ return map;
+ }
+ };
+ exports2.YAMLSet = YAMLSet;
+ exports2.set = set;
+ }
+});
+
+// node_modules/yaml/dist/schema/yaml-1.1/timestamp.js
+var require_timestamp = __commonJS({
+ "node_modules/yaml/dist/schema/yaml-1.1/timestamp.js"(exports2) {
+ "use strict";
+ var stringifyNumber = require_stringifyNumber();
+ function parseSexagesimal(str, asBigInt) {
+ const sign = str[0];
+ const parts = sign === "-" || sign === "+" ? str.substring(1) : str;
+ const num = (n) => asBigInt ? BigInt(n) : Number(n);
+ const res = parts.replace(/_/g, "").split(":").reduce((res2, p) => res2 * num(60) + num(p), num(0));
+ return sign === "-" ? num(-1) * res : res;
+ }
+ function stringifySexagesimal(node) {
+ let { value } = node;
+ let num = (n) => n;
+ if (typeof value === "bigint")
+ num = (n) => BigInt(n);
+ else if (isNaN(value) || !isFinite(value))
+ return stringifyNumber.stringifyNumber(node);
+ let sign = "";
+ if (value < 0) {
+ sign = "-";
+ value *= num(-1);
+ }
+ const _60 = num(60);
+ const parts = [value % _60];
+ if (value < 60) {
+ parts.unshift(0);
+ } else {
+ value = (value - parts[0]) / _60;
+ parts.unshift(value % _60);
+ if (value >= 60) {
+ value = (value - parts[0]) / _60;
+ parts.unshift(value);
+ }
+ }
+ return sign + parts.map((n) => String(n).padStart(2, "0")).join(":").replace(/000000\d*$/, "");
+ }
+ var intTime = {
+ identify: (value) => typeof value === "bigint" || Number.isInteger(value),
+ default: true,
+ tag: "tag:yaml.org,2002:int",
+ format: "TIME",
+ test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,
+ resolve: (str, _onError, { intAsBigInt }) => parseSexagesimal(str, intAsBigInt),
+ stringify: stringifySexagesimal
+ };
+ var floatTime = {
+ identify: (value) => typeof value === "number",
+ default: true,
+ tag: "tag:yaml.org,2002:float",
+ format: "TIME",
+ test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,
+ resolve: (str) => parseSexagesimal(str, false),
+ stringify: stringifySexagesimal
+ };
+ var timestamp = {
+ identify: (value) => value instanceof Date,
+ default: true,
+ tag: "tag:yaml.org,2002:timestamp",
+ // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part
+ // may be omitted altogether, resulting in a date format. In such a case, the time part is
+ // assumed to be 00:00:00Z (start of day, UTC).
+ test: RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"),
+ resolve(str) {
+ const match = str.match(timestamp.test);
+ if (!match)
+ throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");
+ const [, year, month, day, hour, minute, second] = match.map(Number);
+ const millisec = match[7] ? Number((match[7] + "00").substr(1, 3)) : 0;
+ let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec);
+ const tz = match[8];
+ if (tz && tz !== "Z") {
+ let d = parseSexagesimal(tz, false);
+ if (Math.abs(d) < 30)
+ d *= 60;
+ date -= 6e4 * d;
+ }
+ return new Date(date);
+ },
+ stringify: ({ value }) => value.toISOString().replace(/(T00:00:00)?\.000Z$/, "")
+ };
+ exports2.floatTime = floatTime;
+ exports2.intTime = intTime;
+ exports2.timestamp = timestamp;
+ }
+});
+
+// node_modules/yaml/dist/schema/yaml-1.1/schema.js
+var require_schema3 = __commonJS({
+ "node_modules/yaml/dist/schema/yaml-1.1/schema.js"(exports2) {
+ "use strict";
+ var map = require_map();
+ var _null = require_null();
+ var seq = require_seq();
+ var string = require_string();
+ var binary = require_binary();
+ var bool = require_bool2();
+ var float = require_float2();
+ var int = require_int2();
+ var merge = require_merge();
+ var omap = require_omap();
+ var pairs = require_pairs();
+ var set = require_set();
+ var timestamp = require_timestamp();
+ var schema = [
+ map.map,
+ seq.seq,
+ string.string,
+ _null.nullTag,
+ bool.trueTag,
+ bool.falseTag,
+ int.intBin,
+ int.intOct,
+ int.int,
+ int.intHex,
+ float.floatNaN,
+ float.floatExp,
+ float.float,
+ binary.binary,
+ merge.merge,
+ omap.omap,
+ pairs.pairs,
+ set.set,
+ timestamp.intTime,
+ timestamp.floatTime,
+ timestamp.timestamp
+ ];
+ exports2.schema = schema;
+ }
+});
+
+// node_modules/yaml/dist/schema/tags.js
+var require_tags = __commonJS({
+ "node_modules/yaml/dist/schema/tags.js"(exports2) {
+ "use strict";
+ var map = require_map();
+ var _null = require_null();
+ var seq = require_seq();
+ var string = require_string();
+ var bool = require_bool();
+ var float = require_float();
+ var int = require_int();
+ var schema = require_schema();
+ var schema$1 = require_schema2();
+ var binary = require_binary();
+ var merge = require_merge();
+ var omap = require_omap();
+ var pairs = require_pairs();
+ var schema$2 = require_schema3();
+ var set = require_set();
+ var timestamp = require_timestamp();
+ var schemas = /* @__PURE__ */ new Map([
+ ["core", schema.schema],
+ ["failsafe", [map.map, seq.seq, string.string]],
+ ["json", schema$1.schema],
+ ["yaml11", schema$2.schema],
+ ["yaml-1.1", schema$2.schema]
+ ]);
+ var tagsByName = {
+ binary: binary.binary,
+ bool: bool.boolTag,
+ float: float.float,
+ floatExp: float.floatExp,
+ floatNaN: float.floatNaN,
+ floatTime: timestamp.floatTime,
+ int: int.int,
+ intHex: int.intHex,
+ intOct: int.intOct,
+ intTime: timestamp.intTime,
+ map: map.map,
+ merge: merge.merge,
+ null: _null.nullTag,
+ omap: omap.omap,
+ pairs: pairs.pairs,
+ seq: seq.seq,
+ set: set.set,
+ timestamp: timestamp.timestamp
+ };
+ var coreKnownTags = {
+ "tag:yaml.org,2002:binary": binary.binary,
+ "tag:yaml.org,2002:merge": merge.merge,
+ "tag:yaml.org,2002:omap": omap.omap,
+ "tag:yaml.org,2002:pairs": pairs.pairs,
+ "tag:yaml.org,2002:set": set.set,
+ "tag:yaml.org,2002:timestamp": timestamp.timestamp
+ };
+ function getTags(customTags, schemaName, addMergeTag) {
+ const schemaTags = schemas.get(schemaName);
+ if (schemaTags && !customTags) {
+ return addMergeTag && !schemaTags.includes(merge.merge) ? schemaTags.concat(merge.merge) : schemaTags.slice();
+ }
+ let tags = schemaTags;
+ if (!tags) {
+ if (Array.isArray(customTags))
+ tags = [];
+ else {
+ const keys = Array.from(schemas.keys()).filter((key) => key !== "yaml11").map((key) => JSON.stringify(key)).join(", ");
+ throw new Error(`Unknown schema "${schemaName}"; use one of ${keys} or define customTags array`);
+ }
+ }
+ if (Array.isArray(customTags)) {
+ for (const tag of customTags)
+ tags = tags.concat(tag);
+ } else if (typeof customTags === "function") {
+ tags = customTags(tags.slice());
+ }
+ if (addMergeTag)
+ tags = tags.concat(merge.merge);
+ return tags.reduce((tags2, tag) => {
+ const tagObj = typeof tag === "string" ? tagsByName[tag] : tag;
+ if (!tagObj) {
+ const tagName = JSON.stringify(tag);
+ const keys = Object.keys(tagsByName).map((key) => JSON.stringify(key)).join(", ");
+ throw new Error(`Unknown custom tag ${tagName}; use one of ${keys}`);
+ }
+ if (!tags2.includes(tagObj))
+ tags2.push(tagObj);
+ return tags2;
+ }, []);
+ }
+ exports2.coreKnownTags = coreKnownTags;
+ exports2.getTags = getTags;
+ }
+});
+
+// node_modules/yaml/dist/schema/Schema.js
+var require_Schema = __commonJS({
+ "node_modules/yaml/dist/schema/Schema.js"(exports2) {
+ "use strict";
+ var identity = require_identity();
+ var map = require_map();
+ var seq = require_seq();
+ var string = require_string();
+ var tags = require_tags();
+ var sortMapEntriesByKey = (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0;
+ var Schema = class _Schema {
+ constructor({ compat, customTags, merge, resolveKnownTags, schema, sortMapEntries, toStringDefaults }) {
+ this.compat = Array.isArray(compat) ? tags.getTags(compat, "compat") : compat ? tags.getTags(null, compat) : null;
+ this.name = typeof schema === "string" && schema || "core";
+ this.knownTags = resolveKnownTags ? tags.coreKnownTags : {};
+ this.tags = tags.getTags(customTags, this.name, merge);
+ this.toStringOptions = toStringDefaults ?? null;
+ Object.defineProperty(this, identity.MAP, { value: map.map });
+ Object.defineProperty(this, identity.SCALAR, { value: string.string });
+ Object.defineProperty(this, identity.SEQ, { value: seq.seq });
+ this.sortMapEntries = typeof sortMapEntries === "function" ? sortMapEntries : sortMapEntries === true ? sortMapEntriesByKey : null;
+ }
+ clone() {
+ const copy = Object.create(_Schema.prototype, Object.getOwnPropertyDescriptors(this));
+ copy.tags = this.tags.slice();
+ return copy;
+ }
+ };
+ exports2.Schema = Schema;
+ }
+});
+
+// node_modules/yaml/dist/stringify/stringifyDocument.js
+var require_stringifyDocument = __commonJS({
+ "node_modules/yaml/dist/stringify/stringifyDocument.js"(exports2) {
+ "use strict";
+ var identity = require_identity();
+ var stringify = require_stringify2();
+ var stringifyComment = require_stringifyComment();
+ function stringifyDocument(doc, options) {
+ const lines = [];
+ let hasDirectives = options.directives === true;
+ if (options.directives !== false && doc.directives) {
+ const dir = doc.directives.toString(doc);
+ if (dir) {
+ lines.push(dir);
+ hasDirectives = true;
+ } else if (doc.directives.docStart)
+ hasDirectives = true;
+ }
+ if (hasDirectives)
+ lines.push("---");
+ const ctx = stringify.createStringifyContext(doc, options);
+ const { commentString } = ctx.options;
+ if (doc.commentBefore) {
+ if (lines.length !== 1)
+ lines.unshift("");
+ const cs = commentString(doc.commentBefore);
+ lines.unshift(stringifyComment.indentComment(cs, ""));
+ }
+ let chompKeep = false;
+ let contentComment = null;
+ if (doc.contents) {
+ if (identity.isNode(doc.contents)) {
+ if (doc.contents.spaceBefore && hasDirectives)
+ lines.push("");
+ if (doc.contents.commentBefore) {
+ const cs = commentString(doc.contents.commentBefore);
+ lines.push(stringifyComment.indentComment(cs, ""));
+ }
+ ctx.forceBlockIndent = !!doc.comment;
+ contentComment = doc.contents.comment;
+ }
+ const onChompKeep = contentComment ? void 0 : () => chompKeep = true;
+ let body = stringify.stringify(doc.contents, ctx, () => contentComment = null, onChompKeep);
+ if (contentComment)
+ body += stringifyComment.lineComment(body, "", commentString(contentComment));
+ if ((body[0] === "|" || body[0] === ">") && lines[lines.length - 1] === "---") {
+ lines[lines.length - 1] = `--- ${body}`;
+ } else
+ lines.push(body);
+ } else {
+ lines.push(stringify.stringify(doc.contents, ctx));
+ }
+ if (doc.directives?.docEnd) {
+ if (doc.comment) {
+ const cs = commentString(doc.comment);
+ if (cs.includes("\n")) {
+ lines.push("...");
+ lines.push(stringifyComment.indentComment(cs, ""));
+ } else {
+ lines.push(`... ${cs}`);
+ }
+ } else {
+ lines.push("...");
+ }
+ } else {
+ let dc = doc.comment;
+ if (dc && chompKeep)
+ dc = dc.replace(/^\n+/, "");
+ if (dc) {
+ if ((!chompKeep || contentComment) && lines[lines.length - 1] !== "")
+ lines.push("");
+ lines.push(stringifyComment.indentComment(commentString(dc), ""));
+ }
+ }
+ return lines.join("\n") + "\n";
+ }
+ exports2.stringifyDocument = stringifyDocument;
+ }
+});
+
+// node_modules/yaml/dist/doc/Document.js
+var require_Document = __commonJS({
+ "node_modules/yaml/dist/doc/Document.js"(exports2) {
+ "use strict";
+ var Alias = require_Alias();
+ var Collection = require_Collection();
+ var identity = require_identity();
+ var Pair = require_Pair();
+ var toJS = require_toJS();
+ var Schema = require_Schema();
+ var stringifyDocument = require_stringifyDocument();
+ var anchors = require_anchors();
+ var applyReviver = require_applyReviver();
+ var createNode = require_createNode();
+ var directives = require_directives();
+ var Document = class _Document {
+ constructor(value, replacer, options) {
+ this.commentBefore = null;
+ this.comment = null;
+ this.errors = [];
+ this.warnings = [];
+ Object.defineProperty(this, identity.NODE_TYPE, { value: identity.DOC });
+ let _replacer = null;
+ if (typeof replacer === "function" || Array.isArray(replacer)) {
+ _replacer = replacer;
+ } else if (options === void 0 && replacer) {
+ options = replacer;
+ replacer = void 0;
+ }
+ const opt = Object.assign({
+ intAsBigInt: false,
+ keepSourceTokens: false,
+ logLevel: "warn",
+ prettyErrors: true,
+ strict: true,
+ stringKeys: false,
+ uniqueKeys: true,
+ version: "1.2"
+ }, options);
+ this.options = opt;
+ let { version } = opt;
+ if (options?._directives) {
+ this.directives = options._directives.atDocument();
+ if (this.directives.yaml.explicit)
+ version = this.directives.yaml.version;
+ } else
+ this.directives = new directives.Directives({ version });
+ this.setSchema(version, options);
+ this.contents = value === void 0 ? null : this.createNode(value, _replacer, options);
+ }
+ /**
+ * Create a deep copy of this Document and its contents.
+ *
+ * Custom Node values that inherit from `Object` still refer to their original instances.
+ */
+ clone() {
+ const copy = Object.create(_Document.prototype, {
+ [identity.NODE_TYPE]: { value: identity.DOC }
+ });
+ copy.commentBefore = this.commentBefore;
+ copy.comment = this.comment;
+ copy.errors = this.errors.slice();
+ copy.warnings = this.warnings.slice();
+ copy.options = Object.assign({}, this.options);
+ if (this.directives)
+ copy.directives = this.directives.clone();
+ copy.schema = this.schema.clone();
+ copy.contents = identity.isNode(this.contents) ? this.contents.clone(copy.schema) : this.contents;
+ if (this.range)
+ copy.range = this.range.slice();
+ return copy;
+ }
+ /** Adds a value to the document. */
+ add(value) {
+ if (assertCollection(this.contents))
+ this.contents.add(value);
+ }
+ /** Adds a value to the document. */
+ addIn(path5, value) {
+ if (assertCollection(this.contents))
+ this.contents.addIn(path5, value);
+ }
+ /**
+ * Create a new `Alias` node, ensuring that the target `node` has the required anchor.
+ *
+ * If `node` already has an anchor, `name` is ignored.
+ * Otherwise, the `node.anchor` value will be set to `name`,
+ * or if an anchor with that name is already present in the document,
+ * `name` will be used as a prefix for a new unique anchor.
+ * If `name` is undefined, the generated anchor will use 'a' as a prefix.
+ */
+ createAlias(node, name) {
+ if (!node.anchor) {
+ const prev = anchors.anchorNames(this);
+ node.anchor = // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
+ !name || prev.has(name) ? anchors.findNewAnchor(name || "a", prev) : name;
+ }
+ return new Alias.Alias(node.anchor);
+ }
+ createNode(value, replacer, options) {
+ let _replacer = void 0;
+ if (typeof replacer === "function") {
+ value = replacer.call({ "": value }, "", value);
+ _replacer = replacer;
+ } else if (Array.isArray(replacer)) {
+ const keyToStr = (v) => typeof v === "number" || v instanceof String || v instanceof Number;
+ const asStr = replacer.filter(keyToStr).map(String);
+ if (asStr.length > 0)
+ replacer = replacer.concat(asStr);
+ _replacer = replacer;
+ } else if (options === void 0 && replacer) {
+ options = replacer;
+ replacer = void 0;
+ }
+ const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options ?? {};
+ const { onAnchor, setAnchors, sourceObjects } = anchors.createNodeAnchors(
+ this,
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
+ anchorPrefix || "a"
+ );
+ const ctx = {
+ aliasDuplicateObjects: aliasDuplicateObjects ?? true,
+ keepUndefined: keepUndefined ?? false,
+ onAnchor,
+ onTagObj,
+ replacer: _replacer,
+ schema: this.schema,
+ sourceObjects
+ };
+ const node = createNode.createNode(value, tag, ctx);
+ if (flow && identity.isCollection(node))
+ node.flow = true;
+ setAnchors();
+ return node;
+ }
+ /**
+ * Convert a key and a value into a `Pair` using the current schema,
+ * recursively wrapping all values as `Scalar` or `Collection` nodes.
+ */
+ createPair(key, value, options = {}) {
+ const k = this.createNode(key, null, options);
+ const v = this.createNode(value, null, options);
+ return new Pair.Pair(k, v);
+ }
+ /**
+ * Removes a value from the document.
+ * @returns `true` if the item was found and removed.
+ */
+ delete(key) {
+ return assertCollection(this.contents) ? this.contents.delete(key) : false;
+ }
+ /**
+ * Removes a value from the document.
+ * @returns `true` if the item was found and removed.
+ */
+ deleteIn(path5) {
+ if (Collection.isEmptyPath(path5)) {
+ if (this.contents == null)
+ return false;
+ this.contents = null;
+ return true;
+ }
+ return assertCollection(this.contents) ? this.contents.deleteIn(path5) : false;
+ }
+ /**
+ * Returns item at `key`, or `undefined` if not found. By default unwraps
+ * scalar values from their surrounding node; to disable set `keepScalar` to
+ * `true` (collections are always returned intact).
+ */
+ get(key, keepScalar) {
+ return identity.isCollection(this.contents) ? this.contents.get(key, keepScalar) : void 0;
+ }
+ /**
+ * Returns item at `path`, or `undefined` if not found. By default unwraps
+ * scalar values from their surrounding node; to disable set `keepScalar` to
+ * `true` (collections are always returned intact).
+ */
+ getIn(path5, keepScalar) {
+ if (Collection.isEmptyPath(path5))
+ return !keepScalar && identity.isScalar(this.contents) ? this.contents.value : this.contents;
+ return identity.isCollection(this.contents) ? this.contents.getIn(path5, keepScalar) : void 0;
+ }
+ /**
+ * Checks if the document includes a value with the key `key`.
+ */
+ has(key) {
+ return identity.isCollection(this.contents) ? this.contents.has(key) : false;
+ }
+ /**
+ * Checks if the document includes a value at `path`.
+ */
+ hasIn(path5) {
+ if (Collection.isEmptyPath(path5))
+ return this.contents !== void 0;
+ return identity.isCollection(this.contents) ? this.contents.hasIn(path5) : false;
+ }
+ /**
+ * Sets a value in this document. For `!!set`, `value` needs to be a
+ * boolean to add/remove the item from the set.
+ */
+ set(key, value) {
+ if (this.contents == null) {
+ this.contents = Collection.collectionFromPath(this.schema, [key], value);
+ } else if (assertCollection(this.contents)) {
+ this.contents.set(key, value);
+ }
+ }
+ /**
+ * Sets a value in this document. For `!!set`, `value` needs to be a
+ * boolean to add/remove the item from the set.
+ */
+ setIn(path5, value) {
+ if (Collection.isEmptyPath(path5)) {
+ this.contents = value;
+ } else if (this.contents == null) {
+ this.contents = Collection.collectionFromPath(this.schema, Array.from(path5), value);
+ } else if (assertCollection(this.contents)) {
+ this.contents.setIn(path5, value);
+ }
+ }
+ /**
+ * Change the YAML version and schema used by the document.
+ * A `null` version disables support for directives, explicit tags, anchors, and aliases.
+ * It also requires the `schema` option to be given as a `Schema` instance value.
+ *
+ * Overrides all previously set schema options.
+ */
+ setSchema(version, options = {}) {
+ if (typeof version === "number")
+ version = String(version);
+ let opt;
+ switch (version) {
+ case "1.1":
+ if (this.directives)
+ this.directives.yaml.version = "1.1";
+ else
+ this.directives = new directives.Directives({ version: "1.1" });
+ opt = { resolveKnownTags: false, schema: "yaml-1.1" };
+ break;
+ case "1.2":
+ case "next":
+ if (this.directives)
+ this.directives.yaml.version = version;
+ else
+ this.directives = new directives.Directives({ version });
+ opt = { resolveKnownTags: true, schema: "core" };
+ break;
+ case null:
+ if (this.directives)
+ delete this.directives;
+ opt = null;
+ break;
+ default: {
+ const sv = JSON.stringify(version);
+ throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${sv}`);
+ }
+ }
+ if (options.schema instanceof Object)
+ this.schema = options.schema;
+ else if (opt)
+ this.schema = new Schema.Schema(Object.assign(opt, options));
+ else
+ throw new Error(`With a null YAML version, the { schema: Schema } option is required`);
+ }
+ // json & jsonArg are only used from toJSON()
+ toJS({ json, jsonArg, mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {
+ const ctx = {
+ anchors: /* @__PURE__ */ new Map(),
+ doc: this,
+ keep: !json,
+ mapAsMap: mapAsMap === true,
+ mapKeyWarned: false,
+ maxAliasCount: typeof maxAliasCount === "number" ? maxAliasCount : 100
+ };
+ const res = toJS.toJS(this.contents, jsonArg ?? "", ctx);
+ if (typeof onAnchor === "function")
+ for (const { count, res: res2 } of ctx.anchors.values())
+ onAnchor(res2, count);
+ return typeof reviver === "function" ? applyReviver.applyReviver(reviver, { "": res }, "", res) : res;
+ }
+ /**
+ * A JSON representation of the document `contents`.
+ *
+ * @param jsonArg Used by `JSON.stringify` to indicate the array index or
+ * property name.
+ */
+ toJSON(jsonArg, onAnchor) {
+ return this.toJS({ json: true, jsonArg, mapAsMap: false, onAnchor });
+ }
+ /** A YAML representation of the document. */
+ toString(options = {}) {
+ if (this.errors.length > 0)
+ throw new Error("Document with errors cannot be stringified");
+ if ("indent" in options && (!Number.isInteger(options.indent) || Number(options.indent) <= 0)) {
+ const s = JSON.stringify(options.indent);
+ throw new Error(`"indent" option must be a positive integer, not ${s}`);
+ }
+ return stringifyDocument.stringifyDocument(this, options);
+ }
+ };
+ function assertCollection(contents) {
+ if (identity.isCollection(contents))
+ return true;
+ throw new Error("Expected a YAML collection as document contents");
+ }
+ exports2.Document = Document;
+ }
+});
+
+// node_modules/yaml/dist/errors.js
+var require_errors2 = __commonJS({
+ "node_modules/yaml/dist/errors.js"(exports2) {
+ "use strict";
+ var YAMLError = class extends Error {
+ constructor(name, pos, code, message) {
+ super();
+ this.name = name;
+ this.code = code;
+ this.message = message;
+ this.pos = pos;
+ }
+ };
+ var YAMLParseError = class extends YAMLError {
+ constructor(pos, code, message) {
+ super("YAMLParseError", pos, code, message);
+ }
+ };
+ var YAMLWarning = class extends YAMLError {
+ constructor(pos, code, message) {
+ super("YAMLWarning", pos, code, message);
+ }
+ };
+ var prettifyError = (src, lc) => (error3) => {
+ if (error3.pos[0] === -1)
+ return;
+ error3.linePos = error3.pos.map((pos) => lc.linePos(pos));
+ const { line, col } = error3.linePos[0];
+ error3.message += ` at line ${line}, column ${col}`;
+ let ci = col - 1;
+ let lineStr = src.substring(lc.lineStarts[line - 1], lc.lineStarts[line]).replace(/[\n\r]+$/, "");
+ if (ci >= 60 && lineStr.length > 80) {
+ const trimStart = Math.min(ci - 39, lineStr.length - 79);
+ lineStr = "\u2026" + lineStr.substring(trimStart);
+ ci -= trimStart - 1;
+ }
+ if (lineStr.length > 80)
+ lineStr = lineStr.substring(0, 79) + "\u2026";
+ if (line > 1 && /^ *$/.test(lineStr.substring(0, ci))) {
+ let prev = src.substring(lc.lineStarts[line - 2], lc.lineStarts[line - 1]);
+ if (prev.length > 80)
+ prev = prev.substring(0, 79) + "\u2026\n";
+ lineStr = prev + lineStr;
+ }
+ if (/[^ ]/.test(lineStr)) {
+ let count = 1;
+ const end = error3.linePos[1];
+ if (end && end.line === line && end.col > col) {
+ count = Math.max(1, Math.min(end.col - col, 80 - ci));
+ }
+ const pointer = " ".repeat(ci) + "^".repeat(count);
+ error3.message += `:
+
+${lineStr}
+${pointer}
+`;
+ }
+ };
+ exports2.YAMLError = YAMLError;
+ exports2.YAMLParseError = YAMLParseError;
+ exports2.YAMLWarning = YAMLWarning;
+ exports2.prettifyError = prettifyError;
+ }
+});
+
+// node_modules/yaml/dist/compose/resolve-props.js
+var require_resolve_props = __commonJS({
+ "node_modules/yaml/dist/compose/resolve-props.js"(exports2) {
+ "use strict";
+ function resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {
+ let spaceBefore = false;
+ let atNewline = startOnNewline;
+ let hasSpace = startOnNewline;
+ let comment = "";
+ let commentSep = "";
+ let hasNewline = false;
+ let reqSpace = false;
+ let tab = null;
+ let anchor = null;
+ let tag = null;
+ let newlineAfterProp = null;
+ let comma = null;
+ let found = null;
+ let start = null;
+ for (const token of tokens) {
+ if (reqSpace) {
+ if (token.type !== "space" && token.type !== "newline" && token.type !== "comma")
+ onError(token.offset, "MISSING_CHAR", "Tags and anchors must be separated from the next token by white space");
+ reqSpace = false;
+ }
+ if (tab) {
+ if (atNewline && token.type !== "comment" && token.type !== "newline") {
+ onError(tab, "TAB_AS_INDENT", "Tabs are not allowed as indentation");
+ }
+ tab = null;
+ }
+ switch (token.type) {
+ case "space":
+ if (!flow && (indicator !== "doc-start" || next?.type !== "flow-collection") && token.source.includes(" ")) {
+ tab = token;
+ }
+ hasSpace = true;
+ break;
+ case "comment": {
+ if (!hasSpace)
+ onError(token, "MISSING_CHAR", "Comments must be separated from other tokens by white space characters");
+ const cb = token.source.substring(1) || " ";
+ if (!comment)
+ comment = cb;
+ else
+ comment += commentSep + cb;
+ commentSep = "";
+ atNewline = false;
+ break;
+ }
+ case "newline":
+ if (atNewline) {
+ if (comment)
+ comment += token.source;
+ else if (!found || indicator !== "seq-item-ind")
+ spaceBefore = true;
+ } else
+ commentSep += token.source;
+ atNewline = true;
+ hasNewline = true;
+ if (anchor || tag)
+ newlineAfterProp = token;
+ hasSpace = true;
+ break;
+ case "anchor":
+ if (anchor)
+ onError(token, "MULTIPLE_ANCHORS", "A node can have at most one anchor");
+ if (token.source.endsWith(":"))
+ onError(token.offset + token.source.length - 1, "BAD_ALIAS", "Anchor ending in : is ambiguous", true);
+ anchor = token;
+ if (start === null)
+ start = token.offset;
+ atNewline = false;
+ hasSpace = false;
+ reqSpace = true;
+ break;
+ case "tag": {
+ if (tag)
+ onError(token, "MULTIPLE_TAGS", "A node can have at most one tag");
+ tag = token;
+ if (start === null)
+ start = token.offset;
+ atNewline = false;
+ hasSpace = false;
+ reqSpace = true;
+ break;
+ }
+ case indicator:
+ if (anchor || tag)
+ onError(token, "BAD_PROP_ORDER", `Anchors and tags must be after the ${token.source} indicator`);
+ if (found)
+ onError(token, "UNEXPECTED_TOKEN", `Unexpected ${token.source} in ${flow ?? "collection"}`);
+ found = token;
+ atNewline = indicator === "seq-item-ind" || indicator === "explicit-key-ind";
+ hasSpace = false;
+ break;
+ case "comma":
+ if (flow) {
+ if (comma)
+ onError(token, "UNEXPECTED_TOKEN", `Unexpected , in ${flow}`);
+ comma = token;
+ atNewline = false;
+ hasSpace = false;
+ break;
+ }
+ // else fallthrough
+ default:
+ onError(token, "UNEXPECTED_TOKEN", `Unexpected ${token.type} token`);
+ atNewline = false;
+ hasSpace = false;
+ }
+ }
+ const last = tokens[tokens.length - 1];
+ const end = last ? last.offset + last.source.length : offset;
+ if (reqSpace && next && next.type !== "space" && next.type !== "newline" && next.type !== "comma" && (next.type !== "scalar" || next.source !== "")) {
+ onError(next.offset, "MISSING_CHAR", "Tags and anchors must be separated from the next token by white space");
+ }
+ if (tab && (atNewline && tab.indent <= parentIndent || next?.type === "block-map" || next?.type === "block-seq"))
+ onError(tab, "TAB_AS_INDENT", "Tabs are not allowed as indentation");
+ return {
+ comma,
+ found,
+ spaceBefore,
+ comment,
+ hasNewline,
+ anchor,
+ tag,
+ newlineAfterProp,
+ end,
+ start: start ?? end
+ };
+ }
+ exports2.resolveProps = resolveProps;
+ }
+});
+
+// node_modules/yaml/dist/compose/util-contains-newline.js
+var require_util_contains_newline = __commonJS({
+ "node_modules/yaml/dist/compose/util-contains-newline.js"(exports2) {
+ "use strict";
+ function containsNewline(key) {
+ if (!key)
+ return null;
+ switch (key.type) {
+ case "alias":
+ case "scalar":
+ case "double-quoted-scalar":
+ case "single-quoted-scalar":
+ if (key.source.includes("\n"))
+ return true;
+ if (key.end) {
+ for (const st of key.end)
+ if (st.type === "newline")
+ return true;
+ }
+ return false;
+ case "flow-collection":
+ for (const it of key.items) {
+ for (const st of it.start)
+ if (st.type === "newline")
+ return true;
+ if (it.sep) {
+ for (const st of it.sep)
+ if (st.type === "newline")
+ return true;
+ }
+ if (containsNewline(it.key) || containsNewline(it.value))
+ return true;
+ }
+ return false;
+ default:
+ return true;
+ }
+ }
+ exports2.containsNewline = containsNewline;
+ }
+});
+
+// node_modules/yaml/dist/compose/util-flow-indent-check.js
+var require_util_flow_indent_check = __commonJS({
+ "node_modules/yaml/dist/compose/util-flow-indent-check.js"(exports2) {
+ "use strict";
+ var utilContainsNewline = require_util_contains_newline();
+ function flowIndentCheck(indent, fc, onError) {
+ if (fc?.type === "flow-collection") {
+ const end = fc.end[0];
+ if (end.indent === indent && (end.source === "]" || end.source === "}") && utilContainsNewline.containsNewline(fc)) {
+ const msg = "Flow end indicator should be more indented than parent";
+ onError(end, "BAD_INDENT", msg, true);
+ }
+ }
+ }
+ exports2.flowIndentCheck = flowIndentCheck;
+ }
+});
+
+// node_modules/yaml/dist/compose/util-map-includes.js
+var require_util_map_includes = __commonJS({
+ "node_modules/yaml/dist/compose/util-map-includes.js"(exports2) {
+ "use strict";
+ var identity = require_identity();
+ function mapIncludes(ctx, items, search) {
+ const { uniqueKeys } = ctx.options;
+ if (uniqueKeys === false)
+ return false;
+ const isEqual = typeof uniqueKeys === "function" ? uniqueKeys : (a, b) => a === b || identity.isScalar(a) && identity.isScalar(b) && a.value === b.value;
+ return items.some((pair) => isEqual(pair.key, search));
+ }
+ exports2.mapIncludes = mapIncludes;
+ }
+});
+
+// node_modules/yaml/dist/compose/resolve-block-map.js
+var require_resolve_block_map = __commonJS({
+ "node_modules/yaml/dist/compose/resolve-block-map.js"(exports2) {
+ "use strict";
+ var Pair = require_Pair();
+ var YAMLMap = require_YAMLMap();
+ var resolveProps = require_resolve_props();
+ var utilContainsNewline = require_util_contains_newline();
+ var utilFlowIndentCheck = require_util_flow_indent_check();
+ var utilMapIncludes = require_util_map_includes();
+ var startColMsg = "All mapping items must start at the same column";
+ function resolveBlockMap({ composeNode, composeEmptyNode }, ctx, bm, onError, tag) {
+ const NodeClass = tag?.nodeClass ?? YAMLMap.YAMLMap;
+ const map = new NodeClass(ctx.schema);
+ if (ctx.atRoot)
+ ctx.atRoot = false;
+ let offset = bm.offset;
+ let commentEnd = null;
+ for (const collItem of bm.items) {
+ const { start, key, sep: sep2, value } = collItem;
+ const keyProps = resolveProps.resolveProps(start, {
+ indicator: "explicit-key-ind",
+ next: key ?? sep2?.[0],
+ offset,
+ onError,
+ parentIndent: bm.indent,
+ startOnNewline: true
+ });
+ const implicitKey = !keyProps.found;
+ if (implicitKey) {
+ if (key) {
+ if (key.type === "block-seq")
+ onError(offset, "BLOCK_AS_IMPLICIT_KEY", "A block sequence may not be used as an implicit map key");
+ else if ("indent" in key && key.indent !== bm.indent)
+ onError(offset, "BAD_INDENT", startColMsg);
+ }
+ if (!keyProps.anchor && !keyProps.tag && !sep2) {
+ commentEnd = keyProps.end;
+ if (keyProps.comment) {
+ if (map.comment)
+ map.comment += "\n" + keyProps.comment;
+ else
+ map.comment = keyProps.comment;
+ }
+ continue;
+ }
+ if (keyProps.newlineAfterProp || utilContainsNewline.containsNewline(key)) {
+ onError(key ?? start[start.length - 1], "MULTILINE_IMPLICIT_KEY", "Implicit keys need to be on a single line");
+ }
+ } else if (keyProps.found?.indent !== bm.indent) {
+ onError(offset, "BAD_INDENT", startColMsg);
+ }
+ ctx.atKey = true;
+ const keyStart = keyProps.end;
+ const keyNode = key ? composeNode(ctx, key, keyProps, onError) : composeEmptyNode(ctx, keyStart, start, null, keyProps, onError);
+ if (ctx.schema.compat)
+ utilFlowIndentCheck.flowIndentCheck(bm.indent, key, onError);
+ ctx.atKey = false;
+ if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode))
+ onError(keyStart, "DUPLICATE_KEY", "Map keys must be unique");
+ const valueProps = resolveProps.resolveProps(sep2 ?? [], {
+ indicator: "map-value-ind",
+ next: value,
+ offset: keyNode.range[2],
+ onError,
+ parentIndent: bm.indent,
+ startOnNewline: !key || key.type === "block-scalar"
+ });
+ offset = valueProps.end;
+ if (valueProps.found) {
+ if (implicitKey) {
+ if (value?.type === "block-map" && !valueProps.hasNewline)
+ onError(offset, "BLOCK_AS_IMPLICIT_KEY", "Nested mappings are not allowed in compact mappings");
+ if (ctx.options.strict && keyProps.start < valueProps.found.offset - 1024)
+ onError(keyNode.range, "KEY_OVER_1024_CHARS", "The : indicator must be at most 1024 chars after the start of an implicit block mapping key");
+ }
+ const valueNode = value ? composeNode(ctx, value, valueProps, onError) : composeEmptyNode(ctx, offset, sep2, null, valueProps, onError);
+ if (ctx.schema.compat)
+ utilFlowIndentCheck.flowIndentCheck(bm.indent, value, onError);
+ offset = valueNode.range[2];
+ const pair = new Pair.Pair(keyNode, valueNode);
+ if (ctx.options.keepSourceTokens)
+ pair.srcToken = collItem;
+ map.items.push(pair);
+ } else {
+ if (implicitKey)
+ onError(keyNode.range, "MISSING_CHAR", "Implicit map keys need to be followed by map values");
+ if (valueProps.comment) {
+ if (keyNode.comment)
+ keyNode.comment += "\n" + valueProps.comment;
+ else
+ keyNode.comment = valueProps.comment;
+ }
+ const pair = new Pair.Pair(keyNode);
+ if (ctx.options.keepSourceTokens)
+ pair.srcToken = collItem;
+ map.items.push(pair);
+ }
+ }
+ if (commentEnd && commentEnd < offset)
+ onError(commentEnd, "IMPOSSIBLE", "Map comment with trailing content");
+ map.range = [bm.offset, offset, commentEnd ?? offset];
+ return map;
+ }
+ exports2.resolveBlockMap = resolveBlockMap;
+ }
+});
+
+// node_modules/yaml/dist/compose/resolve-block-seq.js
+var require_resolve_block_seq = __commonJS({
+ "node_modules/yaml/dist/compose/resolve-block-seq.js"(exports2) {
+ "use strict";
+ var YAMLSeq = require_YAMLSeq();
+ var resolveProps = require_resolve_props();
+ var utilFlowIndentCheck = require_util_flow_indent_check();
+ function resolveBlockSeq({ composeNode, composeEmptyNode }, ctx, bs, onError, tag) {
+ const NodeClass = tag?.nodeClass ?? YAMLSeq.YAMLSeq;
+ const seq = new NodeClass(ctx.schema);
+ if (ctx.atRoot)
+ ctx.atRoot = false;
+ if (ctx.atKey)
+ ctx.atKey = false;
+ let offset = bs.offset;
+ let commentEnd = null;
+ for (const { start, value } of bs.items) {
+ const props = resolveProps.resolveProps(start, {
+ indicator: "seq-item-ind",
+ next: value,
+ offset,
+ onError,
+ parentIndent: bs.indent,
+ startOnNewline: true
+ });
+ if (!props.found) {
+ if (props.anchor || props.tag || value) {
+ if (value && value.type === "block-seq")
+ onError(props.end, "BAD_INDENT", "All sequence items must start at the same column");
+ else
+ onError(offset, "MISSING_CHAR", "Sequence item without - indicator");
+ } else {
+ commentEnd = props.end;
+ if (props.comment)
+ seq.comment = props.comment;
+ continue;
+ }
+ }
+ const node = value ? composeNode(ctx, value, props, onError) : composeEmptyNode(ctx, props.end, start, null, props, onError);
+ if (ctx.schema.compat)
+ utilFlowIndentCheck.flowIndentCheck(bs.indent, value, onError);
+ offset = node.range[2];
+ seq.items.push(node);
+ }
+ seq.range = [bs.offset, offset, commentEnd ?? offset];
+ return seq;
+ }
+ exports2.resolveBlockSeq = resolveBlockSeq;
+ }
+});
+
+// node_modules/yaml/dist/compose/resolve-end.js
+var require_resolve_end = __commonJS({
+ "node_modules/yaml/dist/compose/resolve-end.js"(exports2) {
+ "use strict";
+ function resolveEnd(end, offset, reqSpace, onError) {
+ let comment = "";
+ if (end) {
+ let hasSpace = false;
+ let sep2 = "";
+ for (const token of end) {
+ const { source, type } = token;
+ switch (type) {
+ case "space":
+ hasSpace = true;
+ break;
+ case "comment": {
+ if (reqSpace && !hasSpace)
+ onError(token, "MISSING_CHAR", "Comments must be separated from other tokens by white space characters");
+ const cb = source.substring(1) || " ";
+ if (!comment)
+ comment = cb;
+ else
+ comment += sep2 + cb;
+ sep2 = "";
+ break;
+ }
+ case "newline":
+ if (comment)
+ sep2 += source;
+ hasSpace = true;
+ break;
+ default:
+ onError(token, "UNEXPECTED_TOKEN", `Unexpected ${type} at node end`);
+ }
+ offset += source.length;
+ }
+ }
+ return { comment, offset };
+ }
+ exports2.resolveEnd = resolveEnd;
+ }
+});
+
+// node_modules/yaml/dist/compose/resolve-flow-collection.js
+var require_resolve_flow_collection = __commonJS({
+ "node_modules/yaml/dist/compose/resolve-flow-collection.js"(exports2) {
+ "use strict";
+ var identity = require_identity();
+ var Pair = require_Pair();
+ var YAMLMap = require_YAMLMap();
+ var YAMLSeq = require_YAMLSeq();
+ var resolveEnd = require_resolve_end();
+ var resolveProps = require_resolve_props();
+ var utilContainsNewline = require_util_contains_newline();
+ var utilMapIncludes = require_util_map_includes();
+ var blockMsg = "Block collections are not allowed within flow collections";
+ var isBlock = (token) => token && (token.type === "block-map" || token.type === "block-seq");
+ function resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onError, tag) {
+ const isMap = fc.start.source === "{";
+ const fcName = isMap ? "flow map" : "flow sequence";
+ const NodeClass = tag?.nodeClass ?? (isMap ? YAMLMap.YAMLMap : YAMLSeq.YAMLSeq);
+ const coll = new NodeClass(ctx.schema);
+ coll.flow = true;
+ const atRoot = ctx.atRoot;
+ if (atRoot)
+ ctx.atRoot = false;
+ if (ctx.atKey)
+ ctx.atKey = false;
+ let offset = fc.offset + fc.start.source.length;
+ for (let i = 0; i < fc.items.length; ++i) {
+ const collItem = fc.items[i];
+ const { start, key, sep: sep2, value } = collItem;
+ const props = resolveProps.resolveProps(start, {
+ flow: fcName,
+ indicator: "explicit-key-ind",
+ next: key ?? sep2?.[0],
+ offset,
+ onError,
+ parentIndent: fc.indent,
+ startOnNewline: false
+ });
+ if (!props.found) {
+ if (!props.anchor && !props.tag && !sep2 && !value) {
+ if (i === 0 && props.comma)
+ onError(props.comma, "UNEXPECTED_TOKEN", `Unexpected , in ${fcName}`);
+ else if (i < fc.items.length - 1)
+ onError(props.start, "UNEXPECTED_TOKEN", `Unexpected empty item in ${fcName}`);
+ if (props.comment) {
+ if (coll.comment)
+ coll.comment += "\n" + props.comment;
+ else
+ coll.comment = props.comment;
+ }
+ offset = props.end;
+ continue;
+ }
+ if (!isMap && ctx.options.strict && utilContainsNewline.containsNewline(key))
+ onError(
+ key,
+ // checked by containsNewline()
+ "MULTILINE_IMPLICIT_KEY",
+ "Implicit keys of flow sequence pairs need to be on a single line"
+ );
+ }
+ if (i === 0) {
+ if (props.comma)
+ onError(props.comma, "UNEXPECTED_TOKEN", `Unexpected , in ${fcName}`);
+ } else {
+ if (!props.comma)
+ onError(props.start, "MISSING_CHAR", `Missing , between ${fcName} items`);
+ if (props.comment) {
+ let prevItemComment = "";
+ loop: for (const st of start) {
+ switch (st.type) {
+ case "comma":
+ case "space":
+ break;
+ case "comment":
+ prevItemComment = st.source.substring(1);
+ break loop;
+ default:
+ break loop;
+ }
+ }
+ if (prevItemComment) {
+ let prev = coll.items[coll.items.length - 1];
+ if (identity.isPair(prev))
+ prev = prev.value ?? prev.key;
+ if (prev.comment)
+ prev.comment += "\n" + prevItemComment;
+ else
+ prev.comment = prevItemComment;
+ props.comment = props.comment.substring(prevItemComment.length + 1);
+ }
+ }
+ }
+ if (!isMap && !sep2 && !props.found) {
+ const valueNode = value ? composeNode(ctx, value, props, onError) : composeEmptyNode(ctx, props.end, sep2, null, props, onError);
+ coll.items.push(valueNode);
+ offset = valueNode.range[2];
+ if (isBlock(value))
+ onError(valueNode.range, "BLOCK_IN_FLOW", blockMsg);
+ } else {
+ ctx.atKey = true;
+ const keyStart = props.end;
+ const keyNode = key ? composeNode(ctx, key, props, onError) : composeEmptyNode(ctx, keyStart, start, null, props, onError);
+ if (isBlock(key))
+ onError(keyNode.range, "BLOCK_IN_FLOW", blockMsg);
+ ctx.atKey = false;
+ const valueProps = resolveProps.resolveProps(sep2 ?? [], {
+ flow: fcName,
+ indicator: "map-value-ind",
+ next: value,
+ offset: keyNode.range[2],
+ onError,
+ parentIndent: fc.indent,
+ startOnNewline: false
+ });
+ if (valueProps.found) {
+ if (!isMap && !props.found && ctx.options.strict) {
+ if (sep2)
+ for (const st of sep2) {
+ if (st === valueProps.found)
+ break;
+ if (st.type === "newline") {
+ onError(st, "MULTILINE_IMPLICIT_KEY", "Implicit keys of flow sequence pairs need to be on a single line");
+ break;
+ }
+ }
+ if (props.start < valueProps.found.offset - 1024)
+ onError(valueProps.found, "KEY_OVER_1024_CHARS", "The : indicator must be at most 1024 chars after the start of an implicit flow sequence key");
+ }
+ } else if (value) {
+ if ("source" in value && value.source && value.source[0] === ":")
+ onError(value, "MISSING_CHAR", `Missing space after : in ${fcName}`);
+ else
+ onError(valueProps.start, "MISSING_CHAR", `Missing , or : between ${fcName} items`);
+ }
+ const valueNode = value ? composeNode(ctx, value, valueProps, onError) : valueProps.found ? composeEmptyNode(ctx, valueProps.end, sep2, null, valueProps, onError) : null;
+ if (valueNode) {
+ if (isBlock(value))
+ onError(valueNode.range, "BLOCK_IN_FLOW", blockMsg);
+ } else if (valueProps.comment) {
+ if (keyNode.comment)
+ keyNode.comment += "\n" + valueProps.comment;
+ else
+ keyNode.comment = valueProps.comment;
+ }
+ const pair = new Pair.Pair(keyNode, valueNode);
+ if (ctx.options.keepSourceTokens)
+ pair.srcToken = collItem;
+ if (isMap) {
+ const map = coll;
+ if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode))
+ onError(keyStart, "DUPLICATE_KEY", "Map keys must be unique");
+ map.items.push(pair);
+ } else {
+ const map = new YAMLMap.YAMLMap(ctx.schema);
+ map.flow = true;
+ map.items.push(pair);
+ const endRange = (valueNode ?? keyNode).range;
+ map.range = [keyNode.range[0], endRange[1], endRange[2]];
+ coll.items.push(map);
+ }
+ offset = valueNode ? valueNode.range[2] : valueProps.end;
+ }
+ }
+ const expectedEnd = isMap ? "}" : "]";
+ const [ce, ...ee] = fc.end;
+ let cePos = offset;
+ if (ce && ce.source === expectedEnd)
+ cePos = ce.offset + ce.source.length;
+ else {
+ const name = fcName[0].toUpperCase() + fcName.substring(1);
+ const msg = atRoot ? `${name} must end with a ${expectedEnd}` : `${name} in block collection must be sufficiently indented and end with a ${expectedEnd}`;
+ onError(offset, atRoot ? "MISSING_CHAR" : "BAD_INDENT", msg);
+ if (ce && ce.source.length !== 1)
+ ee.unshift(ce);
+ }
+ if (ee.length > 0) {
+ const end = resolveEnd.resolveEnd(ee, cePos, ctx.options.strict, onError);
+ if (end.comment) {
+ if (coll.comment)
+ coll.comment += "\n" + end.comment;
+ else
+ coll.comment = end.comment;
+ }
+ coll.range = [fc.offset, cePos, end.offset];
+ } else {
+ coll.range = [fc.offset, cePos, cePos];
+ }
+ return coll;
+ }
+ exports2.resolveFlowCollection = resolveFlowCollection;
+ }
+});
+
+// node_modules/yaml/dist/compose/compose-collection.js
+var require_compose_collection = __commonJS({
+ "node_modules/yaml/dist/compose/compose-collection.js"(exports2) {
+ "use strict";
+ var identity = require_identity();
+ var Scalar = require_Scalar();
+ var YAMLMap = require_YAMLMap();
+ var YAMLSeq = require_YAMLSeq();
+ var resolveBlockMap = require_resolve_block_map();
+ var resolveBlockSeq = require_resolve_block_seq();
+ var resolveFlowCollection = require_resolve_flow_collection();
+ function resolveCollection(CN, ctx, token, onError, tagName, tag) {
+ const coll = token.type === "block-map" ? resolveBlockMap.resolveBlockMap(CN, ctx, token, onError, tag) : token.type === "block-seq" ? resolveBlockSeq.resolveBlockSeq(CN, ctx, token, onError, tag) : resolveFlowCollection.resolveFlowCollection(CN, ctx, token, onError, tag);
+ const Coll = coll.constructor;
+ if (tagName === "!" || tagName === Coll.tagName) {
+ coll.tag = Coll.tagName;
+ return coll;
+ }
+ if (tagName)
+ coll.tag = tagName;
+ return coll;
+ }
+ function composeCollection(CN, ctx, token, props, onError) {
+ const tagToken = props.tag;
+ const tagName = !tagToken ? null : ctx.directives.tagName(tagToken.source, (msg) => onError(tagToken, "TAG_RESOLVE_FAILED", msg));
+ if (token.type === "block-seq") {
+ const { anchor, newlineAfterProp: nl } = props;
+ const lastProp = anchor && tagToken ? anchor.offset > tagToken.offset ? anchor : tagToken : anchor ?? tagToken;
+ if (lastProp && (!nl || nl.offset < lastProp.offset)) {
+ const message = "Missing newline after block sequence props";
+ onError(lastProp, "MISSING_CHAR", message);
+ }
+ }
+ const expType = token.type === "block-map" ? "map" : token.type === "block-seq" ? "seq" : token.start.source === "{" ? "map" : "seq";
+ if (!tagToken || !tagName || tagName === "!" || tagName === YAMLMap.YAMLMap.tagName && expType === "map" || tagName === YAMLSeq.YAMLSeq.tagName && expType === "seq") {
+ return resolveCollection(CN, ctx, token, onError, tagName);
+ }
+ let tag = ctx.schema.tags.find((t) => t.tag === tagName && t.collection === expType);
+ if (!tag) {
+ const kt = ctx.schema.knownTags[tagName];
+ if (kt && kt.collection === expType) {
+ ctx.schema.tags.push(Object.assign({}, kt, { default: false }));
+ tag = kt;
+ } else {
+ if (kt?.collection) {
+ onError(tagToken, "BAD_COLLECTION_TYPE", `${kt.tag} used for ${expType} collection, but expects ${kt.collection}`, true);
+ } else {
+ onError(tagToken, "TAG_RESOLVE_FAILED", `Unresolved tag: ${tagName}`, true);
+ }
+ return resolveCollection(CN, ctx, token, onError, tagName);
+ }
+ }
+ const coll = resolveCollection(CN, ctx, token, onError, tagName, tag);
+ const res = tag.resolve?.(coll, (msg) => onError(tagToken, "TAG_RESOLVE_FAILED", msg), ctx.options) ?? coll;
+ const node = identity.isNode(res) ? res : new Scalar.Scalar(res);
+ node.range = coll.range;
+ node.tag = tagName;
+ if (tag?.format)
+ node.format = tag.format;
+ return node;
+ }
+ exports2.composeCollection = composeCollection;
+ }
+});
+
+// node_modules/yaml/dist/compose/resolve-block-scalar.js
+var require_resolve_block_scalar = __commonJS({
+ "node_modules/yaml/dist/compose/resolve-block-scalar.js"(exports2) {
+ "use strict";
+ var Scalar = require_Scalar();
+ function resolveBlockScalar(ctx, scalar, onError) {
+ const start = scalar.offset;
+ const header = parseBlockScalarHeader(scalar, ctx.options.strict, onError);
+ if (!header)
+ return { value: "", type: null, comment: "", range: [start, start, start] };
+ const type = header.mode === ">" ? Scalar.Scalar.BLOCK_FOLDED : Scalar.Scalar.BLOCK_LITERAL;
+ const lines = scalar.source ? splitLines(scalar.source) : [];
+ let chompStart = lines.length;
+ for (let i = lines.length - 1; i >= 0; --i) {
+ const content = lines[i][1];
+ if (content === "" || content === "\r")
+ chompStart = i;
+ else
+ break;
+ }
+ if (chompStart === 0) {
+ const value2 = header.chomp === "+" && lines.length > 0 ? "\n".repeat(Math.max(1, lines.length - 1)) : "";
+ let end2 = start + header.length;
+ if (scalar.source)
+ end2 += scalar.source.length;
+ return { value: value2, type, comment: header.comment, range: [start, end2, end2] };
+ }
+ let trimIndent = scalar.indent + header.indent;
+ let offset = scalar.offset + header.length;
+ let contentStart = 0;
+ for (let i = 0; i < chompStart; ++i) {
+ const [indent, content] = lines[i];
+ if (content === "" || content === "\r") {
+ if (header.indent === 0 && indent.length > trimIndent)
+ trimIndent = indent.length;
+ } else {
+ if (indent.length < trimIndent) {
+ const message = "Block scalars with more-indented leading empty lines must use an explicit indentation indicator";
+ onError(offset + indent.length, "MISSING_CHAR", message);
+ }
+ if (header.indent === 0)
+ trimIndent = indent.length;
+ contentStart = i;
+ if (trimIndent === 0 && !ctx.atRoot) {
+ const message = "Block scalar values in collections must be indented";
+ onError(offset, "BAD_INDENT", message);
+ }
+ break;
+ }
+ offset += indent.length + content.length + 1;
+ }
+ for (let i = lines.length - 1; i >= chompStart; --i) {
+ if (lines[i][0].length > trimIndent)
+ chompStart = i + 1;
+ }
+ let value = "";
+ let sep2 = "";
+ let prevMoreIndented = false;
+ for (let i = 0; i < contentStart; ++i)
+ value += lines[i][0].slice(trimIndent) + "\n";
+ for (let i = contentStart; i < chompStart; ++i) {
+ let [indent, content] = lines[i];
+ offset += indent.length + content.length + 1;
+ const crlf = content[content.length - 1] === "\r";
+ if (crlf)
+ content = content.slice(0, -1);
+ if (content && indent.length < trimIndent) {
+ const src = header.indent ? "explicit indentation indicator" : "first line";
+ const message = `Block scalar lines must not be less indented than their ${src}`;
+ onError(offset - content.length - (crlf ? 2 : 1), "BAD_INDENT", message);
+ indent = "";
+ }
+ if (type === Scalar.Scalar.BLOCK_LITERAL) {
+ value += sep2 + indent.slice(trimIndent) + content;
+ sep2 = "\n";
+ } else if (indent.length > trimIndent || content[0] === " ") {
+ if (sep2 === " ")
+ sep2 = "\n";
+ else if (!prevMoreIndented && sep2 === "\n")
+ sep2 = "\n\n";
+ value += sep2 + indent.slice(trimIndent) + content;
+ sep2 = "\n";
+ prevMoreIndented = true;
+ } else if (content === "") {
+ if (sep2 === "\n")
+ value += "\n";
+ else
+ sep2 = "\n";
+ } else {
+ value += sep2 + content;
+ sep2 = " ";
+ prevMoreIndented = false;
+ }
+ }
+ switch (header.chomp) {
+ case "-":
+ break;
+ case "+":
+ for (let i = chompStart; i < lines.length; ++i)
+ value += "\n" + lines[i][0].slice(trimIndent);
+ if (value[value.length - 1] !== "\n")
+ value += "\n";
+ break;
+ default:
+ value += "\n";
+ }
+ const end = start + header.length + scalar.source.length;
+ return { value, type, comment: header.comment, range: [start, end, end] };
+ }
+ function parseBlockScalarHeader({ offset, props }, strict, onError) {
+ if (props[0].type !== "block-scalar-header") {
+ onError(props[0], "IMPOSSIBLE", "Block scalar header not found");
+ return null;
+ }
+ const { source } = props[0];
+ const mode = source[0];
+ let indent = 0;
+ let chomp = "";
+ let error3 = -1;
+ for (let i = 1; i < source.length; ++i) {
+ const ch = source[i];
+ if (!chomp && (ch === "-" || ch === "+"))
+ chomp = ch;
+ else {
+ const n = Number(ch);
+ if (!indent && n)
+ indent = n;
+ else if (error3 === -1)
+ error3 = offset + i;
+ }
+ }
+ if (error3 !== -1)
+ onError(error3, "UNEXPECTED_TOKEN", `Block scalar header includes extra characters: ${source}`);
+ let hasSpace = false;
+ let comment = "";
+ let length = source.length;
+ for (let i = 1; i < props.length; ++i) {
+ const token = props[i];
+ switch (token.type) {
+ case "space":
+ hasSpace = true;
+ // fallthrough
+ case "newline":
+ length += token.source.length;
+ break;
+ case "comment":
+ if (strict && !hasSpace) {
+ const message = "Comments must be separated from other tokens by white space characters";
+ onError(token, "MISSING_CHAR", message);
+ }
+ length += token.source.length;
+ comment = token.source.substring(1);
+ break;
+ case "error":
+ onError(token, "UNEXPECTED_TOKEN", token.message);
+ length += token.source.length;
+ break;
+ /* istanbul ignore next should not happen */
+ default: {
+ const message = `Unexpected token in block scalar header: ${token.type}`;
+ onError(token, "UNEXPECTED_TOKEN", message);
+ const ts = token.source;
+ if (ts && typeof ts === "string")
+ length += ts.length;
+ }
+ }
+ }
+ return { mode, indent, chomp, comment, length };
+ }
+ function splitLines(source) {
+ const split = source.split(/\n( *)/);
+ const first = split[0];
+ const m = first.match(/^( *)/);
+ const line0 = m?.[1] ? [m[1], first.slice(m[1].length)] : ["", first];
+ const lines = [line0];
+ for (let i = 1; i < split.length; i += 2)
+ lines.push([split[i], split[i + 1]]);
+ return lines;
+ }
+ exports2.resolveBlockScalar = resolveBlockScalar;
+ }
+});
+
+// node_modules/yaml/dist/compose/resolve-flow-scalar.js
+var require_resolve_flow_scalar = __commonJS({
+ "node_modules/yaml/dist/compose/resolve-flow-scalar.js"(exports2) {
+ "use strict";
+ var Scalar = require_Scalar();
+ var resolveEnd = require_resolve_end();
+ function resolveFlowScalar(scalar, strict, onError) {
+ const { offset, type, source, end } = scalar;
+ let _type;
+ let value;
+ const _onError = (rel, code, msg) => onError(offset + rel, code, msg);
+ switch (type) {
+ case "scalar":
+ _type = Scalar.Scalar.PLAIN;
+ value = plainValue(source, _onError);
+ break;
+ case "single-quoted-scalar":
+ _type = Scalar.Scalar.QUOTE_SINGLE;
+ value = singleQuotedValue(source, _onError);
+ break;
+ case "double-quoted-scalar":
+ _type = Scalar.Scalar.QUOTE_DOUBLE;
+ value = doubleQuotedValue(source, _onError);
+ break;
+ /* istanbul ignore next should not happen */
+ default:
+ onError(scalar, "UNEXPECTED_TOKEN", `Expected a flow scalar value, but found: ${type}`);
+ return {
+ value: "",
+ type: null,
+ comment: "",
+ range: [offset, offset + source.length, offset + source.length]
+ };
+ }
+ const valueEnd = offset + source.length;
+ const re = resolveEnd.resolveEnd(end, valueEnd, strict, onError);
+ return {
+ value,
+ type: _type,
+ comment: re.comment,
+ range: [offset, valueEnd, re.offset]
+ };
+ }
+ function plainValue(source, onError) {
+ let badChar = "";
+ switch (source[0]) {
+ /* istanbul ignore next should not happen */
+ case " ":
+ badChar = "a tab character";
+ break;
+ case ",":
+ badChar = "flow indicator character ,";
+ break;
+ case "%":
+ badChar = "directive indicator character %";
+ break;
+ case "|":
+ case ">": {
+ badChar = `block scalar indicator ${source[0]}`;
+ break;
+ }
+ case "@":
+ case "`": {
+ badChar = `reserved character ${source[0]}`;
+ break;
+ }
+ }
+ if (badChar)
+ onError(0, "BAD_SCALAR_START", `Plain value cannot start with ${badChar}`);
+ return foldLines(source);
+ }
+ function singleQuotedValue(source, onError) {
+ if (source[source.length - 1] !== "'" || source.length === 1)
+ onError(source.length, "MISSING_CHAR", "Missing closing 'quote");
+ return foldLines(source.slice(1, -1)).replace(/''/g, "'");
+ }
+ function foldLines(source) {
+ let first, line;
+ try {
+ first = new RegExp("(.*?)(? wsStart ? source.slice(wsStart, i + 1) : ch;
+ } else {
+ res += ch;
+ }
+ }
+ if (source[source.length - 1] !== '"' || source.length === 1)
+ onError(source.length, "MISSING_CHAR", 'Missing closing "quote');
+ return res;
+ }
+ function foldNewline(source, offset) {
+ let fold = "";
+ let ch = source[offset + 1];
+ while (ch === " " || ch === " " || ch === "\n" || ch === "\r") {
+ if (ch === "\r" && source[offset + 2] !== "\n")
+ break;
+ if (ch === "\n")
+ fold += "\n";
+ offset += 1;
+ ch = source[offset + 1];
+ }
+ if (!fold)
+ fold = " ";
+ return { fold, offset };
+ }
+ var escapeCodes = {
+ "0": "\0",
+ // null character
+ a: "\x07",
+ // bell character
+ b: "\b",
+ // backspace
+ e: "\x1B",
+ // escape character
+ f: "\f",
+ // form feed
+ n: "\n",
+ // line feed
+ r: "\r",
+ // carriage return
+ t: " ",
+ // horizontal tab
+ v: "\v",
+ // vertical tab
+ N: "\x85",
+ // Unicode next line
+ _: "\xA0",
+ // Unicode non-breaking space
+ L: "\u2028",
+ // Unicode line separator
+ P: "\u2029",
+ // Unicode paragraph separator
+ " ": " ",
+ '"': '"',
+ "/": "/",
+ "\\": "\\",
+ " ": " "
+ };
+ function parseCharCode(source, offset, length, onError) {
+ const cc = source.substr(offset, length);
+ const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc);
+ const code = ok ? parseInt(cc, 16) : NaN;
+ if (isNaN(code)) {
+ const raw = source.substr(offset - 2, length + 2);
+ onError(offset - 2, "BAD_DQ_ESCAPE", `Invalid escape sequence ${raw}`);
+ return raw;
+ }
+ return String.fromCodePoint(code);
+ }
+ exports2.resolveFlowScalar = resolveFlowScalar;
+ }
+});
+
+// node_modules/yaml/dist/compose/compose-scalar.js
+var require_compose_scalar = __commonJS({
+ "node_modules/yaml/dist/compose/compose-scalar.js"(exports2) {
+ "use strict";
+ var identity = require_identity();
+ var Scalar = require_Scalar();
+ var resolveBlockScalar = require_resolve_block_scalar();
+ var resolveFlowScalar = require_resolve_flow_scalar();
+ function composeScalar(ctx, token, tagToken, onError) {
+ const { value, type, comment, range } = token.type === "block-scalar" ? resolveBlockScalar.resolveBlockScalar(ctx, token, onError) : resolveFlowScalar.resolveFlowScalar(token, ctx.options.strict, onError);
+ const tagName = tagToken ? ctx.directives.tagName(tagToken.source, (msg) => onError(tagToken, "TAG_RESOLVE_FAILED", msg)) : null;
+ let tag;
+ if (ctx.options.stringKeys && ctx.atKey) {
+ tag = ctx.schema[identity.SCALAR];
+ } else if (tagName)
+ tag = findScalarTagByName(ctx.schema, value, tagName, tagToken, onError);
+ else if (token.type === "scalar")
+ tag = findScalarTagByTest(ctx, value, token, onError);
+ else
+ tag = ctx.schema[identity.SCALAR];
+ let scalar;
+ try {
+ const res = tag.resolve(value, (msg) => onError(tagToken ?? token, "TAG_RESOLVE_FAILED", msg), ctx.options);
+ scalar = identity.isScalar(res) ? res : new Scalar.Scalar(res);
+ } catch (error3) {
+ const msg = error3 instanceof Error ? error3.message : String(error3);
+ onError(tagToken ?? token, "TAG_RESOLVE_FAILED", msg);
+ scalar = new Scalar.Scalar(value);
+ }
+ scalar.range = range;
+ scalar.source = value;
+ if (type)
+ scalar.type = type;
+ if (tagName)
+ scalar.tag = tagName;
+ if (tag.format)
+ scalar.format = tag.format;
+ if (comment)
+ scalar.comment = comment;
+ return scalar;
+ }
+ function findScalarTagByName(schema, value, tagName, tagToken, onError) {
+ if (tagName === "!")
+ return schema[identity.SCALAR];
+ const matchWithTest = [];
+ for (const tag of schema.tags) {
+ if (!tag.collection && tag.tag === tagName) {
+ if (tag.default && tag.test)
+ matchWithTest.push(tag);
+ else
+ return tag;
+ }
+ }
+ for (const tag of matchWithTest)
+ if (tag.test?.test(value))
+ return tag;
+ const kt = schema.knownTags[tagName];
+ if (kt && !kt.collection) {
+ schema.tags.push(Object.assign({}, kt, { default: false, test: void 0 }));
+ return kt;
+ }
+ onError(tagToken, "TAG_RESOLVE_FAILED", `Unresolved tag: ${tagName}`, tagName !== "tag:yaml.org,2002:str");
+ return schema[identity.SCALAR];
+ }
+ function findScalarTagByTest({ atKey, directives, schema }, value, token, onError) {
+ const tag = schema.tags.find((tag2) => (tag2.default === true || atKey && tag2.default === "key") && tag2.test?.test(value)) || schema[identity.SCALAR];
+ if (schema.compat) {
+ const compat = schema.compat.find((tag2) => tag2.default && tag2.test?.test(value)) ?? schema[identity.SCALAR];
+ if (tag.tag !== compat.tag) {
+ const ts = directives.tagString(tag.tag);
+ const cs = directives.tagString(compat.tag);
+ const msg = `Value may be parsed as either ${ts} or ${cs}`;
+ onError(token, "TAG_RESOLVE_FAILED", msg, true);
+ }
+ }
+ return tag;
+ }
+ exports2.composeScalar = composeScalar;
+ }
+});
+
+// node_modules/yaml/dist/compose/util-empty-scalar-position.js
+var require_util_empty_scalar_position = __commonJS({
+ "node_modules/yaml/dist/compose/util-empty-scalar-position.js"(exports2) {
+ "use strict";
+ function emptyScalarPosition(offset, before, pos) {
+ if (before) {
+ if (pos === null)
+ pos = before.length;
+ for (let i = pos - 1; i >= 0; --i) {
+ let st = before[i];
+ switch (st.type) {
+ case "space":
+ case "comment":
+ case "newline":
+ offset -= st.source.length;
+ continue;
+ }
+ st = before[++i];
+ while (st?.type === "space") {
+ offset += st.source.length;
+ st = before[++i];
+ }
+ break;
+ }
+ }
+ return offset;
+ }
+ exports2.emptyScalarPosition = emptyScalarPosition;
+ }
+});
+
+// node_modules/yaml/dist/compose/compose-node.js
+var require_compose_node = __commonJS({
+ "node_modules/yaml/dist/compose/compose-node.js"(exports2) {
+ "use strict";
+ var Alias = require_Alias();
+ var identity = require_identity();
+ var composeCollection = require_compose_collection();
+ var composeScalar = require_compose_scalar();
+ var resolveEnd = require_resolve_end();
+ var utilEmptyScalarPosition = require_util_empty_scalar_position();
+ var CN = { composeNode, composeEmptyNode };
+ function composeNode(ctx, token, props, onError) {
+ const atKey = ctx.atKey;
+ const { spaceBefore, comment, anchor, tag } = props;
+ let node;
+ let isSrcToken = true;
+ switch (token.type) {
+ case "alias":
+ node = composeAlias(ctx, token, onError);
+ if (anchor || tag)
+ onError(token, "ALIAS_PROPS", "An alias node must not specify any properties");
+ break;
+ case "scalar":
+ case "single-quoted-scalar":
+ case "double-quoted-scalar":
+ case "block-scalar":
+ node = composeScalar.composeScalar(ctx, token, tag, onError);
+ if (anchor)
+ node.anchor = anchor.source.substring(1);
+ break;
+ case "block-map":
+ case "block-seq":
+ case "flow-collection":
+ node = composeCollection.composeCollection(CN, ctx, token, props, onError);
+ if (anchor)
+ node.anchor = anchor.source.substring(1);
+ break;
+ default: {
+ const message = token.type === "error" ? token.message : `Unsupported token (type: ${token.type})`;
+ onError(token, "UNEXPECTED_TOKEN", message);
+ node = composeEmptyNode(ctx, token.offset, void 0, null, props, onError);
+ isSrcToken = false;
+ }
+ }
+ if (anchor && node.anchor === "")
+ onError(anchor, "BAD_ALIAS", "Anchor cannot be an empty string");
+ if (atKey && ctx.options.stringKeys && (!identity.isScalar(node) || typeof node.value !== "string" || node.tag && node.tag !== "tag:yaml.org,2002:str")) {
+ const msg = "With stringKeys, all keys must be strings";
+ onError(tag ?? token, "NON_STRING_KEY", msg);
+ }
+ if (spaceBefore)
+ node.spaceBefore = true;
+ if (comment) {
+ if (token.type === "scalar" && token.source === "")
+ node.comment = comment;
+ else
+ node.commentBefore = comment;
+ }
+ if (ctx.options.keepSourceTokens && isSrcToken)
+ node.srcToken = token;
+ return node;
+ }
+ function composeEmptyNode(ctx, offset, before, pos, { spaceBefore, comment, anchor, tag, end }, onError) {
+ const token = {
+ type: "scalar",
+ offset: utilEmptyScalarPosition.emptyScalarPosition(offset, before, pos),
+ indent: -1,
+ source: ""
+ };
+ const node = composeScalar.composeScalar(ctx, token, tag, onError);
+ if (anchor) {
+ node.anchor = anchor.source.substring(1);
+ if (node.anchor === "")
+ onError(anchor, "BAD_ALIAS", "Anchor cannot be an empty string");
+ }
+ if (spaceBefore)
+ node.spaceBefore = true;
+ if (comment) {
+ node.comment = comment;
+ node.range[2] = end;
+ }
+ return node;
+ }
+ function composeAlias({ options }, { offset, source, end }, onError) {
+ const alias = new Alias.Alias(source.substring(1));
+ if (alias.source === "")
+ onError(offset, "BAD_ALIAS", "Alias cannot be an empty string");
+ if (alias.source.endsWith(":"))
+ onError(offset + source.length - 1, "BAD_ALIAS", "Alias ending in : is ambiguous", true);
+ const valueEnd = offset + source.length;
+ const re = resolveEnd.resolveEnd(end, valueEnd, options.strict, onError);
+ alias.range = [offset, valueEnd, re.offset];
+ if (re.comment)
+ alias.comment = re.comment;
+ return alias;
+ }
+ exports2.composeEmptyNode = composeEmptyNode;
+ exports2.composeNode = composeNode;
+ }
+});
+
+// node_modules/yaml/dist/compose/compose-doc.js
+var require_compose_doc = __commonJS({
+ "node_modules/yaml/dist/compose/compose-doc.js"(exports2) {
+ "use strict";
+ var Document = require_Document();
+ var composeNode = require_compose_node();
+ var resolveEnd = require_resolve_end();
+ var resolveProps = require_resolve_props();
+ function composeDoc(options, directives, { offset, start, value, end }, onError) {
+ const opts = Object.assign({ _directives: directives }, options);
+ const doc = new Document.Document(void 0, opts);
+ const ctx = {
+ atKey: false,
+ atRoot: true,
+ directives: doc.directives,
+ options: doc.options,
+ schema: doc.schema
+ };
+ const props = resolveProps.resolveProps(start, {
+ indicator: "doc-start",
+ next: value ?? end?.[0],
+ offset,
+ onError,
+ parentIndent: 0,
+ startOnNewline: true
+ });
+ if (props.found) {
+ doc.directives.docStart = true;
+ if (value && (value.type === "block-map" || value.type === "block-seq") && !props.hasNewline)
+ onError(props.end, "MISSING_CHAR", "Block collection cannot start on same line with directives-end marker");
+ }
+ doc.contents = value ? composeNode.composeNode(ctx, value, props, onError) : composeNode.composeEmptyNode(ctx, props.end, start, null, props, onError);
+ const contentEnd = doc.contents.range[2];
+ const re = resolveEnd.resolveEnd(end, contentEnd, false, onError);
+ if (re.comment)
+ doc.comment = re.comment;
+ doc.range = [offset, contentEnd, re.offset];
+ return doc;
+ }
+ exports2.composeDoc = composeDoc;
+ }
+});
+
+// node_modules/yaml/dist/compose/composer.js
+var require_composer = __commonJS({
+ "node_modules/yaml/dist/compose/composer.js"(exports2) {
+ "use strict";
+ var node_process = require("node:process");
+ var directives = require_directives();
+ var Document = require_Document();
+ var errors = require_errors2();
+ var identity = require_identity();
+ var composeDoc = require_compose_doc();
+ var resolveEnd = require_resolve_end();
+ function getErrorPos(src) {
+ if (typeof src === "number")
+ return [src, src + 1];
+ if (Array.isArray(src))
+ return src.length === 2 ? src : [src[0], src[1]];
+ const { offset, source } = src;
+ return [offset, offset + (typeof source === "string" ? source.length : 1)];
+ }
+ function parsePrelude(prelude) {
+ let comment = "";
+ let atComment = false;
+ let afterEmptyLine = false;
+ for (let i = 0; i < prelude.length; ++i) {
+ const source = prelude[i];
+ switch (source[0]) {
+ case "#":
+ comment += (comment === "" ? "" : afterEmptyLine ? "\n\n" : "\n") + (source.substring(1) || " ");
+ atComment = true;
+ afterEmptyLine = false;
+ break;
+ case "%":
+ if (prelude[i + 1]?.[0] !== "#")
+ i += 1;
+ atComment = false;
+ break;
+ default:
+ if (!atComment)
+ afterEmptyLine = true;
+ atComment = false;
+ }
+ }
+ return { comment, afterEmptyLine };
+ }
+ var Composer = class {
+ constructor(options = {}) {
+ this.doc = null;
+ this.atDirectives = false;
+ this.prelude = [];
+ this.errors = [];
+ this.warnings = [];
+ this.onError = (source, code, message, warning4) => {
+ const pos = getErrorPos(source);
+ if (warning4)
+ this.warnings.push(new errors.YAMLWarning(pos, code, message));
+ else
+ this.errors.push(new errors.YAMLParseError(pos, code, message));
+ };
+ this.directives = new directives.Directives({ version: options.version || "1.2" });
+ this.options = options;
+ }
+ decorate(doc, afterDoc) {
+ const { comment, afterEmptyLine } = parsePrelude(this.prelude);
+ if (comment) {
+ const dc = doc.contents;
+ if (afterDoc) {
+ doc.comment = doc.comment ? `${doc.comment}
+${comment}` : comment;
+ } else if (afterEmptyLine || doc.directives.docStart || !dc) {
+ doc.commentBefore = comment;
+ } else if (identity.isCollection(dc) && !dc.flow && dc.items.length > 0) {
+ let it = dc.items[0];
+ if (identity.isPair(it))
+ it = it.key;
+ const cb = it.commentBefore;
+ it.commentBefore = cb ? `${comment}
+${cb}` : comment;
+ } else {
+ const cb = dc.commentBefore;
+ dc.commentBefore = cb ? `${comment}
+${cb}` : comment;
+ }
+ }
+ if (afterDoc) {
+ Array.prototype.push.apply(doc.errors, this.errors);
+ Array.prototype.push.apply(doc.warnings, this.warnings);
+ } else {
+ doc.errors = this.errors;
+ doc.warnings = this.warnings;
+ }
+ this.prelude = [];
+ this.errors = [];
+ this.warnings = [];
+ }
+ /**
+ * Current stream status information.
+ *
+ * Mostly useful at the end of input for an empty stream.
+ */
+ streamInfo() {
+ return {
+ comment: parsePrelude(this.prelude).comment,
+ directives: this.directives,
+ errors: this.errors,
+ warnings: this.warnings
+ };
+ }
+ /**
+ * Compose tokens into documents.
+ *
+ * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.
+ * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.
+ */
+ *compose(tokens, forceDoc = false, endOffset = -1) {
+ for (const token of tokens)
+ yield* this.next(token);
+ yield* this.end(forceDoc, endOffset);
+ }
+ /** Advance the composer by one CST token. */
+ *next(token) {
+ if (node_process.env.LOG_STREAM)
+ console.dir(token, { depth: null });
+ switch (token.type) {
+ case "directive":
+ this.directives.add(token.source, (offset, message, warning4) => {
+ const pos = getErrorPos(token);
+ pos[0] += offset;
+ this.onError(pos, "BAD_DIRECTIVE", message, warning4);
+ });
+ this.prelude.push(token.source);
+ this.atDirectives = true;
+ break;
+ case "document": {
+ const doc = composeDoc.composeDoc(this.options, this.directives, token, this.onError);
+ if (this.atDirectives && !doc.directives.docStart)
+ this.onError(token, "MISSING_CHAR", "Missing directives-end/doc-start indicator line");
+ this.decorate(doc, false);
+ if (this.doc)
+ yield this.doc;
+ this.doc = doc;
+ this.atDirectives = false;
+ break;
+ }
+ case "byte-order-mark":
+ case "space":
+ break;
+ case "comment":
+ case "newline":
+ this.prelude.push(token.source);
+ break;
+ case "error": {
+ const msg = token.source ? `${token.message}: ${JSON.stringify(token.source)}` : token.message;
+ const error3 = new errors.YAMLParseError(getErrorPos(token), "UNEXPECTED_TOKEN", msg);
+ if (this.atDirectives || !this.doc)
+ this.errors.push(error3);
+ else
+ this.doc.errors.push(error3);
+ break;
+ }
+ case "doc-end": {
+ if (!this.doc) {
+ const msg = "Unexpected doc-end without preceding document";
+ this.errors.push(new errors.YAMLParseError(getErrorPos(token), "UNEXPECTED_TOKEN", msg));
+ break;
+ }
+ this.doc.directives.docEnd = true;
+ const end = resolveEnd.resolveEnd(token.end, token.offset + token.source.length, this.doc.options.strict, this.onError);
+ this.decorate(this.doc, true);
+ if (end.comment) {
+ const dc = this.doc.comment;
+ this.doc.comment = dc ? `${dc}
+${end.comment}` : end.comment;
+ }
+ this.doc.range[2] = end.offset;
+ break;
+ }
+ default:
+ this.errors.push(new errors.YAMLParseError(getErrorPos(token), "UNEXPECTED_TOKEN", `Unsupported token ${token.type}`));
+ }
+ }
+ /**
+ * Call at end of input to yield any remaining document.
+ *
+ * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.
+ * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.
+ */
+ *end(forceDoc = false, endOffset = -1) {
+ if (this.doc) {
+ this.decorate(this.doc, true);
+ yield this.doc;
+ this.doc = null;
+ } else if (forceDoc) {
+ const opts = Object.assign({ _directives: this.directives }, this.options);
+ const doc = new Document.Document(void 0, opts);
+ if (this.atDirectives)
+ this.onError(endOffset, "MISSING_CHAR", "Missing directives-end indicator line");
+ doc.range = [0, endOffset, endOffset];
+ this.decorate(doc, false);
+ yield doc;
+ }
+ }
+ };
+ exports2.Composer = Composer;
+ }
+});
+
+// node_modules/yaml/dist/parse/cst-scalar.js
+var require_cst_scalar = __commonJS({
+ "node_modules/yaml/dist/parse/cst-scalar.js"(exports2) {
+ "use strict";
+ var resolveBlockScalar = require_resolve_block_scalar();
+ var resolveFlowScalar = require_resolve_flow_scalar();
+ var errors = require_errors2();
+ var stringifyString = require_stringifyString();
+ function resolveAsScalar(token, strict = true, onError) {
+ if (token) {
+ const _onError = (pos, code, message) => {
+ const offset = typeof pos === "number" ? pos : Array.isArray(pos) ? pos[0] : pos.offset;
+ if (onError)
+ onError(offset, code, message);
+ else
+ throw new errors.YAMLParseError([offset, offset + 1], code, message);
+ };
+ switch (token.type) {
+ case "scalar":
+ case "single-quoted-scalar":
+ case "double-quoted-scalar":
+ return resolveFlowScalar.resolveFlowScalar(token, strict, _onError);
+ case "block-scalar":
+ return resolveBlockScalar.resolveBlockScalar({ options: { strict } }, token, _onError);
+ }
+ }
+ return null;
+ }
+ function createScalarToken(value, context5) {
+ const { implicitKey = false, indent, inFlow = false, offset = -1, type = "PLAIN" } = context5;
+ const source = stringifyString.stringifyString({ type, value }, {
+ implicitKey,
+ indent: indent > 0 ? " ".repeat(indent) : "",
+ inFlow,
+ options: { blockQuote: true, lineWidth: -1 }
+ });
+ const end = context5.end ?? [
+ { type: "newline", offset: -1, indent, source: "\n" }
+ ];
+ switch (source[0]) {
+ case "|":
+ case ">": {
+ const he = source.indexOf("\n");
+ const head = source.substring(0, he);
+ const body = source.substring(he + 1) + "\n";
+ const props = [
+ { type: "block-scalar-header", offset, indent, source: head }
+ ];
+ if (!addEndtoBlockProps(props, end))
+ props.push({ type: "newline", offset: -1, indent, source: "\n" });
+ return { type: "block-scalar", offset, indent, props, source: body };
+ }
+ case '"':
+ return { type: "double-quoted-scalar", offset, indent, source, end };
+ case "'":
+ return { type: "single-quoted-scalar", offset, indent, source, end };
+ default:
+ return { type: "scalar", offset, indent, source, end };
+ }
+ }
+ function setScalarValue(token, value, context5 = {}) {
+ let { afterKey = false, implicitKey = false, inFlow = false, type } = context5;
+ let indent = "indent" in token ? token.indent : null;
+ if (afterKey && typeof indent === "number")
+ indent += 2;
+ if (!type)
+ switch (token.type) {
+ case "single-quoted-scalar":
+ type = "QUOTE_SINGLE";
+ break;
+ case "double-quoted-scalar":
+ type = "QUOTE_DOUBLE";
+ break;
+ case "block-scalar": {
+ const header = token.props[0];
+ if (header.type !== "block-scalar-header")
+ throw new Error("Invalid block scalar header");
+ type = header.source[0] === ">" ? "BLOCK_FOLDED" : "BLOCK_LITERAL";
+ break;
+ }
+ default:
+ type = "PLAIN";
+ }
+ const source = stringifyString.stringifyString({ type, value }, {
+ implicitKey: implicitKey || indent === null,
+ indent: indent !== null && indent > 0 ? " ".repeat(indent) : "",
+ inFlow,
+ options: { blockQuote: true, lineWidth: -1 }
+ });
+ switch (source[0]) {
+ case "|":
+ case ">":
+ setBlockScalarValue(token, source);
+ break;
+ case '"':
+ setFlowScalarValue(token, source, "double-quoted-scalar");
+ break;
+ case "'":
+ setFlowScalarValue(token, source, "single-quoted-scalar");
+ break;
+ default:
+ setFlowScalarValue(token, source, "scalar");
+ }
+ }
+ function setBlockScalarValue(token, source) {
+ const he = source.indexOf("\n");
+ const head = source.substring(0, he);
+ const body = source.substring(he + 1) + "\n";
+ if (token.type === "block-scalar") {
+ const header = token.props[0];
+ if (header.type !== "block-scalar-header")
+ throw new Error("Invalid block scalar header");
+ header.source = head;
+ token.source = body;
+ } else {
+ const { offset } = token;
+ const indent = "indent" in token ? token.indent : -1;
+ const props = [
+ { type: "block-scalar-header", offset, indent, source: head }
+ ];
+ if (!addEndtoBlockProps(props, "end" in token ? token.end : void 0))
+ props.push({ type: "newline", offset: -1, indent, source: "\n" });
+ for (const key of Object.keys(token))
+ if (key !== "type" && key !== "offset")
+ delete token[key];
+ Object.assign(token, { type: "block-scalar", indent, props, source: body });
+ }
+ }
+ function addEndtoBlockProps(props, end) {
+ if (end)
+ for (const st of end)
+ switch (st.type) {
+ case "space":
+ case "comment":
+ props.push(st);
+ break;
+ case "newline":
+ props.push(st);
+ return true;
+ }
+ return false;
+ }
+ function setFlowScalarValue(token, source, type) {
+ switch (token.type) {
+ case "scalar":
+ case "double-quoted-scalar":
+ case "single-quoted-scalar":
+ token.type = type;
+ token.source = source;
+ break;
+ case "block-scalar": {
+ const end = token.props.slice(1);
+ let oa = source.length;
+ if (token.props[0].type === "block-scalar-header")
+ oa -= token.props[0].source.length;
+ for (const tok of end)
+ tok.offset += oa;
+ delete token.props;
+ Object.assign(token, { type, source, end });
+ break;
+ }
+ case "block-map":
+ case "block-seq": {
+ const offset = token.offset + source.length;
+ const nl = { type: "newline", offset, indent: token.indent, source: "\n" };
+ delete token.items;
+ Object.assign(token, { type, source, end: [nl] });
+ break;
+ }
+ default: {
+ const indent = "indent" in token ? token.indent : -1;
+ const end = "end" in token && Array.isArray(token.end) ? token.end.filter((st) => st.type === "space" || st.type === "comment" || st.type === "newline") : [];
+ for (const key of Object.keys(token))
+ if (key !== "type" && key !== "offset")
+ delete token[key];
+ Object.assign(token, { type, indent, source, end });
+ }
+ }
+ }
+ exports2.createScalarToken = createScalarToken;
+ exports2.resolveAsScalar = resolveAsScalar;
+ exports2.setScalarValue = setScalarValue;
+ }
+});
+
+// node_modules/yaml/dist/parse/cst-stringify.js
+var require_cst_stringify = __commonJS({
+ "node_modules/yaml/dist/parse/cst-stringify.js"(exports2) {
+ "use strict";
+ var stringify = (cst) => "type" in cst ? stringifyToken(cst) : stringifyItem(cst);
+ function stringifyToken(token) {
+ switch (token.type) {
+ case "block-scalar": {
+ let res = "";
+ for (const tok of token.props)
+ res += stringifyToken(tok);
+ return res + token.source;
+ }
+ case "block-map":
+ case "block-seq": {
+ let res = "";
+ for (const item of token.items)
+ res += stringifyItem(item);
+ return res;
+ }
+ case "flow-collection": {
+ let res = token.start.source;
+ for (const item of token.items)
+ res += stringifyItem(item);
+ for (const st of token.end)
+ res += st.source;
+ return res;
+ }
+ case "document": {
+ let res = stringifyItem(token);
+ if (token.end)
+ for (const st of token.end)
+ res += st.source;
+ return res;
+ }
+ default: {
+ let res = token.source;
+ if ("end" in token && token.end)
+ for (const st of token.end)
+ res += st.source;
+ return res;
+ }
+ }
+ }
+ function stringifyItem({ start, key, sep: sep2, value }) {
+ let res = "";
+ for (const st of start)
+ res += st.source;
+ if (key)
+ res += stringifyToken(key);
+ if (sep2)
+ for (const st of sep2)
+ res += st.source;
+ if (value)
+ res += stringifyToken(value);
+ return res;
+ }
+ exports2.stringify = stringify;
+ }
+});
+
+// node_modules/yaml/dist/parse/cst-visit.js
+var require_cst_visit = __commonJS({
+ "node_modules/yaml/dist/parse/cst-visit.js"(exports2) {
+ "use strict";
+ var BREAK = Symbol("break visit");
+ var SKIP = Symbol("skip children");
+ var REMOVE = Symbol("remove item");
+ function visit(cst, visitor) {
+ if ("type" in cst && cst.type === "document")
+ cst = { start: cst.start, value: cst.value };
+ _visit(Object.freeze([]), cst, visitor);
+ }
+ visit.BREAK = BREAK;
+ visit.SKIP = SKIP;
+ visit.REMOVE = REMOVE;
+ visit.itemAtPath = (cst, path5) => {
+ let item = cst;
+ for (const [field, index] of path5) {
+ const tok = item?.[field];
+ if (tok && "items" in tok) {
+ item = tok.items[index];
+ } else
+ return void 0;
+ }
+ return item;
+ };
+ visit.parentCollection = (cst, path5) => {
+ const parent = visit.itemAtPath(cst, path5.slice(0, -1));
+ const field = path5[path5.length - 1][0];
+ const coll = parent?.[field];
+ if (coll && "items" in coll)
+ return coll;
+ throw new Error("Parent collection not found");
+ };
+ function _visit(path5, item, visitor) {
+ let ctrl = visitor(item, path5);
+ if (typeof ctrl === "symbol")
+ return ctrl;
+ for (const field of ["key", "value"]) {
+ const token = item[field];
+ if (token && "items" in token) {
+ for (let i = 0; i < token.items.length; ++i) {
+ const ci = _visit(Object.freeze(path5.concat([[field, i]])), token.items[i], visitor);
+ if (typeof ci === "number")
+ i = ci - 1;
+ else if (ci === BREAK)
+ return BREAK;
+ else if (ci === REMOVE) {
+ token.items.splice(i, 1);
+ i -= 1;
+ }
+ }
+ if (typeof ctrl === "function" && field === "key")
+ ctrl = ctrl(item, path5);
+ }
+ }
+ return typeof ctrl === "function" ? ctrl(item, path5) : ctrl;
+ }
+ exports2.visit = visit;
+ }
+});
+
+// node_modules/yaml/dist/parse/cst.js
+var require_cst = __commonJS({
+ "node_modules/yaml/dist/parse/cst.js"(exports2) {
+ "use strict";
+ var cstScalar = require_cst_scalar();
+ var cstStringify = require_cst_stringify();
+ var cstVisit = require_cst_visit();
+ var BOM = "\uFEFF";
+ var DOCUMENT = "";
+ var FLOW_END = "";
+ var SCALAR = "";
+ var isCollection = (token) => !!token && "items" in token;
+ var isScalar = (token) => !!token && (token.type === "scalar" || token.type === "single-quoted-scalar" || token.type === "double-quoted-scalar" || token.type === "block-scalar");
+ function prettyToken(token) {
+ switch (token) {
+ case BOM:
+ return "";
+ case DOCUMENT:
+ return "";
+ case FLOW_END:
+ return "";
+ case SCALAR:
+ return "";
+ default:
+ return JSON.stringify(token);
+ }
+ }
+ function tokenType(source) {
+ switch (source) {
+ case BOM:
+ return "byte-order-mark";
+ case DOCUMENT:
+ return "doc-mode";
+ case FLOW_END:
+ return "flow-error-end";
+ case SCALAR:
+ return "scalar";
+ case "---":
+ return "doc-start";
+ case "...":
+ return "doc-end";
+ case "":
+ case "\n":
+ case "\r\n":
+ return "newline";
+ case "-":
+ return "seq-item-ind";
+ case "?":
+ return "explicit-key-ind";
+ case ":":
+ return "map-value-ind";
+ case "{":
+ return "flow-map-start";
+ case "}":
+ return "flow-map-end";
+ case "[":
+ return "flow-seq-start";
+ case "]":
+ return "flow-seq-end";
+ case ",":
+ return "comma";
+ }
+ switch (source[0]) {
+ case " ":
+ case " ":
+ return "space";
+ case "#":
+ return "comment";
+ case "%":
+ return "directive-line";
+ case "*":
+ return "alias";
+ case "&":
+ return "anchor";
+ case "!":
+ return "tag";
+ case "'":
+ return "single-quoted-scalar";
+ case '"':
+ return "double-quoted-scalar";
+ case "|":
+ case ">":
+ return "block-scalar-header";
+ }
+ return null;
+ }
+ exports2.createScalarToken = cstScalar.createScalarToken;
+ exports2.resolveAsScalar = cstScalar.resolveAsScalar;
+ exports2.setScalarValue = cstScalar.setScalarValue;
+ exports2.stringify = cstStringify.stringify;
+ exports2.visit = cstVisit.visit;
+ exports2.BOM = BOM;
+ exports2.DOCUMENT = DOCUMENT;
+ exports2.FLOW_END = FLOW_END;
+ exports2.SCALAR = SCALAR;
+ exports2.isCollection = isCollection;
+ exports2.isScalar = isScalar;
+ exports2.prettyToken = prettyToken;
+ exports2.tokenType = tokenType;
+ }
+});
+
+// node_modules/yaml/dist/parse/lexer.js
+var require_lexer = __commonJS({
+ "node_modules/yaml/dist/parse/lexer.js"(exports2) {
+ "use strict";
+ var cst = require_cst();
+ function isEmpty(ch) {
+ switch (ch) {
+ case void 0:
+ case " ":
+ case "\n":
+ case "\r":
+ case " ":
+ return true;
+ default:
+ return false;
+ }
+ }
+ var hexDigits = new Set("0123456789ABCDEFabcdef");
+ var tagChars = new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()");
+ var flowIndicatorChars = new Set(",[]{}");
+ var invalidAnchorChars = new Set(" ,[]{}\n\r ");
+ var isNotAnchorChar = (ch) => !ch || invalidAnchorChars.has(ch);
+ var Lexer = class {
+ constructor() {
+ this.atEnd = false;
+ this.blockScalarIndent = -1;
+ this.blockScalarKeep = false;
+ this.buffer = "";
+ this.flowKey = false;
+ this.flowLevel = 0;
+ this.indentNext = 0;
+ this.indentValue = 0;
+ this.lineEndPos = null;
+ this.next = null;
+ this.pos = 0;
+ }
+ /**
+ * Generate YAML tokens from the `source` string. If `incomplete`,
+ * a part of the last line may be left as a buffer for the next call.
+ *
+ * @returns A generator of lexical tokens
+ */
+ *lex(source, incomplete = false) {
+ if (source) {
+ if (typeof source !== "string")
+ throw TypeError("source is not a string");
+ this.buffer = this.buffer ? this.buffer + source : source;
+ this.lineEndPos = null;
+ }
+ this.atEnd = !incomplete;
+ let next = this.next ?? "stream";
+ while (next && (incomplete || this.hasChars(1)))
+ next = yield* this.parseNext(next);
+ }
+ atLineEnd() {
+ let i = this.pos;
+ let ch = this.buffer[i];
+ while (ch === " " || ch === " ")
+ ch = this.buffer[++i];
+ if (!ch || ch === "#" || ch === "\n")
+ return true;
+ if (ch === "\r")
+ return this.buffer[i + 1] === "\n";
+ return false;
+ }
+ charAt(n) {
+ return this.buffer[this.pos + n];
+ }
+ continueScalar(offset) {
+ let ch = this.buffer[offset];
+ if (this.indentNext > 0) {
+ let indent = 0;
+ while (ch === " ")
+ ch = this.buffer[++indent + offset];
+ if (ch === "\r") {
+ const next = this.buffer[indent + offset + 1];
+ if (next === "\n" || !next && !this.atEnd)
+ return offset + indent + 1;
+ }
+ return ch === "\n" || indent >= this.indentNext || !ch && !this.atEnd ? offset + indent : -1;
+ }
+ if (ch === "-" || ch === ".") {
+ const dt = this.buffer.substr(offset, 3);
+ if ((dt === "---" || dt === "...") && isEmpty(this.buffer[offset + 3]))
+ return -1;
+ }
+ return offset;
+ }
+ getLine() {
+ let end = this.lineEndPos;
+ if (typeof end !== "number" || end !== -1 && end < this.pos) {
+ end = this.buffer.indexOf("\n", this.pos);
+ this.lineEndPos = end;
+ }
+ if (end === -1)
+ return this.atEnd ? this.buffer.substring(this.pos) : null;
+ if (this.buffer[end - 1] === "\r")
+ end -= 1;
+ return this.buffer.substring(this.pos, end);
+ }
+ hasChars(n) {
+ return this.pos + n <= this.buffer.length;
+ }
+ setNext(state) {
+ this.buffer = this.buffer.substring(this.pos);
+ this.pos = 0;
+ this.lineEndPos = null;
+ this.next = state;
+ return null;
+ }
+ peek(n) {
+ return this.buffer.substr(this.pos, n);
+ }
+ *parseNext(next) {
+ switch (next) {
+ case "stream":
+ return yield* this.parseStream();
+ case "line-start":
+ return yield* this.parseLineStart();
+ case "block-start":
+ return yield* this.parseBlockStart();
+ case "doc":
+ return yield* this.parseDocument();
+ case "flow":
+ return yield* this.parseFlowCollection();
+ case "quoted-scalar":
+ return yield* this.parseQuotedScalar();
+ case "block-scalar":
+ return yield* this.parseBlockScalar();
+ case "plain-scalar":
+ return yield* this.parsePlainScalar();
+ }
+ }
+ *parseStream() {
+ let line = this.getLine();
+ if (line === null)
+ return this.setNext("stream");
+ if (line[0] === cst.BOM) {
+ yield* this.pushCount(1);
+ line = line.substring(1);
+ }
+ if (line[0] === "%") {
+ let dirEnd = line.length;
+ let cs = line.indexOf("#");
+ while (cs !== -1) {
+ const ch = line[cs - 1];
+ if (ch === " " || ch === " ") {
+ dirEnd = cs - 1;
+ break;
+ } else {
+ cs = line.indexOf("#", cs + 1);
+ }
+ }
+ while (true) {
+ const ch = line[dirEnd - 1];
+ if (ch === " " || ch === " ")
+ dirEnd -= 1;
+ else
+ break;
+ }
+ const n = (yield* this.pushCount(dirEnd)) + (yield* this.pushSpaces(true));
+ yield* this.pushCount(line.length - n);
+ this.pushNewline();
+ return "stream";
+ }
+ if (this.atLineEnd()) {
+ const sp = yield* this.pushSpaces(true);
+ yield* this.pushCount(line.length - sp);
+ yield* this.pushNewline();
+ return "stream";
+ }
+ yield cst.DOCUMENT;
+ return yield* this.parseLineStart();
+ }
+ *parseLineStart() {
+ const ch = this.charAt(0);
+ if (!ch && !this.atEnd)
+ return this.setNext("line-start");
+ if (ch === "-" || ch === ".") {
+ if (!this.atEnd && !this.hasChars(4))
+ return this.setNext("line-start");
+ const s = this.peek(3);
+ if ((s === "---" || s === "...") && isEmpty(this.charAt(3))) {
+ yield* this.pushCount(3);
+ this.indentValue = 0;
+ this.indentNext = 0;
+ return s === "---" ? "doc" : "stream";
+ }
+ }
+ this.indentValue = yield* this.pushSpaces(false);
+ if (this.indentNext > this.indentValue && !isEmpty(this.charAt(1)))
+ this.indentNext = this.indentValue;
+ return yield* this.parseBlockStart();
+ }
+ *parseBlockStart() {
+ const [ch0, ch1] = this.peek(2);
+ if (!ch1 && !this.atEnd)
+ return this.setNext("block-start");
+ if ((ch0 === "-" || ch0 === "?" || ch0 === ":") && isEmpty(ch1)) {
+ const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true));
+ this.indentNext = this.indentValue + 1;
+ this.indentValue += n;
+ return yield* this.parseBlockStart();
+ }
+ return "doc";
+ }
+ *parseDocument() {
+ yield* this.pushSpaces(true);
+ const line = this.getLine();
+ if (line === null)
+ return this.setNext("doc");
+ let n = yield* this.pushIndicators();
+ switch (line[n]) {
+ case "#":
+ yield* this.pushCount(line.length - n);
+ // fallthrough
+ case void 0:
+ yield* this.pushNewline();
+ return yield* this.parseLineStart();
+ case "{":
+ case "[":
+ yield* this.pushCount(1);
+ this.flowKey = false;
+ this.flowLevel = 1;
+ return "flow";
+ case "}":
+ case "]":
+ yield* this.pushCount(1);
+ return "doc";
+ case "*":
+ yield* this.pushUntil(isNotAnchorChar);
+ return "doc";
+ case '"':
+ case "'":
+ return yield* this.parseQuotedScalar();
+ case "|":
+ case ">":
+ n += yield* this.parseBlockScalarHeader();
+ n += yield* this.pushSpaces(true);
+ yield* this.pushCount(line.length - n);
+ yield* this.pushNewline();
+ return yield* this.parseBlockScalar();
+ default:
+ return yield* this.parsePlainScalar();
+ }
+ }
+ *parseFlowCollection() {
+ let nl, sp;
+ let indent = -1;
+ do {
+ nl = yield* this.pushNewline();
+ if (nl > 0) {
+ sp = yield* this.pushSpaces(false);
+ this.indentValue = indent = sp;
+ } else {
+ sp = 0;
+ }
+ sp += yield* this.pushSpaces(true);
+ } while (nl + sp > 0);
+ const line = this.getLine();
+ if (line === null)
+ return this.setNext("flow");
+ if (indent !== -1 && indent < this.indentNext && line[0] !== "#" || indent === 0 && (line.startsWith("---") || line.startsWith("...")) && isEmpty(line[3])) {
+ const atFlowEndMarker = indent === this.indentNext - 1 && this.flowLevel === 1 && (line[0] === "]" || line[0] === "}");
+ if (!atFlowEndMarker) {
+ this.flowLevel = 0;
+ yield cst.FLOW_END;
+ return yield* this.parseLineStart();
+ }
+ }
+ let n = 0;
+ while (line[n] === ",") {
+ n += yield* this.pushCount(1);
+ n += yield* this.pushSpaces(true);
+ this.flowKey = false;
+ }
+ n += yield* this.pushIndicators();
+ switch (line[n]) {
+ case void 0:
+ return "flow";
+ case "#":
+ yield* this.pushCount(line.length - n);
+ return "flow";
+ case "{":
+ case "[":
+ yield* this.pushCount(1);
+ this.flowKey = false;
+ this.flowLevel += 1;
+ return "flow";
+ case "}":
+ case "]":
+ yield* this.pushCount(1);
+ this.flowKey = true;
+ this.flowLevel -= 1;
+ return this.flowLevel ? "flow" : "doc";
+ case "*":
+ yield* this.pushUntil(isNotAnchorChar);
+ return "flow";
+ case '"':
+ case "'":
+ this.flowKey = true;
+ return yield* this.parseQuotedScalar();
+ case ":": {
+ const next = this.charAt(1);
+ if (this.flowKey || isEmpty(next) || next === ",") {
+ this.flowKey = false;
+ yield* this.pushCount(1);
+ yield* this.pushSpaces(true);
+ return "flow";
+ }
+ }
+ // fallthrough
+ default:
+ this.flowKey = false;
+ return yield* this.parsePlainScalar();
+ }
+ }
+ *parseQuotedScalar() {
+ const quote = this.charAt(0);
+ let end = this.buffer.indexOf(quote, this.pos + 1);
+ if (quote === "'") {
+ while (end !== -1 && this.buffer[end + 1] === "'")
+ end = this.buffer.indexOf("'", end + 2);
+ } else {
+ while (end !== -1) {
+ let n = 0;
+ while (this.buffer[end - 1 - n] === "\\")
+ n += 1;
+ if (n % 2 === 0)
+ break;
+ end = this.buffer.indexOf('"', end + 1);
+ }
+ }
+ const qb = this.buffer.substring(0, end);
+ let nl = qb.indexOf("\n", this.pos);
+ if (nl !== -1) {
+ while (nl !== -1) {
+ const cs = this.continueScalar(nl + 1);
+ if (cs === -1)
+ break;
+ nl = qb.indexOf("\n", cs);
+ }
+ if (nl !== -1) {
+ end = nl - (qb[nl - 1] === "\r" ? 2 : 1);
+ }
+ }
+ if (end === -1) {
+ if (!this.atEnd)
+ return this.setNext("quoted-scalar");
+ end = this.buffer.length;
+ }
+ yield* this.pushToIndex(end + 1, false);
+ return this.flowLevel ? "flow" : "doc";
+ }
+ *parseBlockScalarHeader() {
+ this.blockScalarIndent = -1;
+ this.blockScalarKeep = false;
+ let i = this.pos;
+ while (true) {
+ const ch = this.buffer[++i];
+ if (ch === "+")
+ this.blockScalarKeep = true;
+ else if (ch > "0" && ch <= "9")
+ this.blockScalarIndent = Number(ch) - 1;
+ else if (ch !== "-")
+ break;
+ }
+ return yield* this.pushUntil((ch) => isEmpty(ch) || ch === "#");
+ }
+ *parseBlockScalar() {
+ let nl = this.pos - 1;
+ let indent = 0;
+ let ch;
+ loop: for (let i2 = this.pos; ch = this.buffer[i2]; ++i2) {
+ switch (ch) {
+ case " ":
+ indent += 1;
+ break;
+ case "\n":
+ nl = i2;
+ indent = 0;
+ break;
+ case "\r": {
+ const next = this.buffer[i2 + 1];
+ if (!next && !this.atEnd)
+ return this.setNext("block-scalar");
+ if (next === "\n")
+ break;
+ }
+ // fallthrough
+ default:
+ break loop;
+ }
+ }
+ if (!ch && !this.atEnd)
+ return this.setNext("block-scalar");
+ if (indent >= this.indentNext) {
+ if (this.blockScalarIndent === -1)
+ this.indentNext = indent;
+ else {
+ this.indentNext = this.blockScalarIndent + (this.indentNext === 0 ? 1 : this.indentNext);
+ }
+ do {
+ const cs = this.continueScalar(nl + 1);
+ if (cs === -1)
+ break;
+ nl = this.buffer.indexOf("\n", cs);
+ } while (nl !== -1);
+ if (nl === -1) {
+ if (!this.atEnd)
+ return this.setNext("block-scalar");
+ nl = this.buffer.length;
+ }
+ }
+ let i = nl + 1;
+ ch = this.buffer[i];
+ while (ch === " ")
+ ch = this.buffer[++i];
+ if (ch === " ") {
+ while (ch === " " || ch === " " || ch === "\r" || ch === "\n")
+ ch = this.buffer[++i];
+ nl = i - 1;
+ } else if (!this.blockScalarKeep) {
+ do {
+ let i2 = nl - 1;
+ let ch2 = this.buffer[i2];
+ if (ch2 === "\r")
+ ch2 = this.buffer[--i2];
+ const lastChar = i2;
+ while (ch2 === " ")
+ ch2 = this.buffer[--i2];
+ if (ch2 === "\n" && i2 >= this.pos && i2 + 1 + indent > lastChar)
+ nl = i2;
+ else
+ break;
+ } while (true);
+ }
+ yield cst.SCALAR;
+ yield* this.pushToIndex(nl + 1, true);
+ return yield* this.parseLineStart();
+ }
+ *parsePlainScalar() {
+ const inFlow = this.flowLevel > 0;
+ let end = this.pos - 1;
+ let i = this.pos - 1;
+ let ch;
+ while (ch = this.buffer[++i]) {
+ if (ch === ":") {
+ const next = this.buffer[i + 1];
+ if (isEmpty(next) || inFlow && flowIndicatorChars.has(next))
+ break;
+ end = i;
+ } else if (isEmpty(ch)) {
+ let next = this.buffer[i + 1];
+ if (ch === "\r") {
+ if (next === "\n") {
+ i += 1;
+ ch = "\n";
+ next = this.buffer[i + 1];
+ } else
+ end = i;
+ }
+ if (next === "#" || inFlow && flowIndicatorChars.has(next))
+ break;
+ if (ch === "\n") {
+ const cs = this.continueScalar(i + 1);
+ if (cs === -1)
+ break;
+ i = Math.max(i, cs - 2);
+ }
+ } else {
+ if (inFlow && flowIndicatorChars.has(ch))
+ break;
+ end = i;
+ }
+ }
+ if (!ch && !this.atEnd)
+ return this.setNext("plain-scalar");
+ yield cst.SCALAR;
+ yield* this.pushToIndex(end + 1, true);
+ return inFlow ? "flow" : "doc";
+ }
+ *pushCount(n) {
+ if (n > 0) {
+ yield this.buffer.substr(this.pos, n);
+ this.pos += n;
+ return n;
+ }
+ return 0;
+ }
+ *pushToIndex(i, allowEmpty) {
+ const s = this.buffer.slice(this.pos, i);
+ if (s) {
+ yield s;
+ this.pos += s.length;
+ return s.length;
+ } else if (allowEmpty)
+ yield "";
+ return 0;
+ }
+ *pushIndicators() {
+ switch (this.charAt(0)) {
+ case "!":
+ return (yield* this.pushTag()) + (yield* this.pushSpaces(true)) + (yield* this.pushIndicators());
+ case "&":
+ return (yield* this.pushUntil(isNotAnchorChar)) + (yield* this.pushSpaces(true)) + (yield* this.pushIndicators());
+ case "-":
+ // this is an error
+ case "?":
+ // this is an error outside flow collections
+ case ":": {
+ const inFlow = this.flowLevel > 0;
+ const ch1 = this.charAt(1);
+ if (isEmpty(ch1) || inFlow && flowIndicatorChars.has(ch1)) {
+ if (!inFlow)
+ this.indentNext = this.indentValue + 1;
+ else if (this.flowKey)
+ this.flowKey = false;
+ return (yield* this.pushCount(1)) + (yield* this.pushSpaces(true)) + (yield* this.pushIndicators());
+ }
+ }
+ }
+ return 0;
+ }
+ *pushTag() {
+ if (this.charAt(1) === "<") {
+ let i = this.pos + 2;
+ let ch = this.buffer[i];
+ while (!isEmpty(ch) && ch !== ">")
+ ch = this.buffer[++i];
+ return yield* this.pushToIndex(ch === ">" ? i + 1 : i, false);
+ } else {
+ let i = this.pos + 1;
+ let ch = this.buffer[i];
+ while (ch) {
+ if (tagChars.has(ch))
+ ch = this.buffer[++i];
+ else if (ch === "%" && hexDigits.has(this.buffer[i + 1]) && hexDigits.has(this.buffer[i + 2])) {
+ ch = this.buffer[i += 3];
+ } else
+ break;
+ }
+ return yield* this.pushToIndex(i, false);
+ }
+ }
+ *pushNewline() {
+ const ch = this.buffer[this.pos];
+ if (ch === "\n")
+ return yield* this.pushCount(1);
+ else if (ch === "\r" && this.charAt(1) === "\n")
+ return yield* this.pushCount(2);
+ else
+ return 0;
+ }
+ *pushSpaces(allowTabs) {
+ let i = this.pos - 1;
+ let ch;
+ do {
+ ch = this.buffer[++i];
+ } while (ch === " " || allowTabs && ch === " ");
+ const n = i - this.pos;
+ if (n > 0) {
+ yield this.buffer.substr(this.pos, n);
+ this.pos = i;
+ }
+ return n;
+ }
+ *pushUntil(test) {
+ let i = this.pos;
+ let ch = this.buffer[i];
+ while (!test(ch))
+ ch = this.buffer[++i];
+ return yield* this.pushToIndex(i, false);
+ }
+ };
+ exports2.Lexer = Lexer;
+ }
+});
+
+// node_modules/yaml/dist/parse/line-counter.js
+var require_line_counter = __commonJS({
+ "node_modules/yaml/dist/parse/line-counter.js"(exports2) {
+ "use strict";
+ var LineCounter = class {
+ constructor() {
+ this.lineStarts = [];
+ this.addNewLine = (offset) => this.lineStarts.push(offset);
+ this.linePos = (offset) => {
+ let low = 0;
+ let high = this.lineStarts.length;
+ while (low < high) {
+ const mid = low + high >> 1;
+ if (this.lineStarts[mid] < offset)
+ low = mid + 1;
+ else
+ high = mid;
+ }
+ if (this.lineStarts[low] === offset)
+ return { line: low + 1, col: 1 };
+ if (low === 0)
+ return { line: 0, col: offset };
+ const start = this.lineStarts[low - 1];
+ return { line: low, col: offset - start + 1 };
+ };
+ }
+ };
+ exports2.LineCounter = LineCounter;
+ }
+});
+
+// node_modules/yaml/dist/parse/parser.js
+var require_parser = __commonJS({
+ "node_modules/yaml/dist/parse/parser.js"(exports2) {
+ "use strict";
+ var node_process = require("node:process");
+ var cst = require_cst();
+ var lexer = require_lexer();
+ function includesToken(list, type) {
+ for (let i = 0; i < list.length; ++i)
+ if (list[i].type === type)
+ return true;
+ return false;
+ }
+ function findNonEmptyIndex(list) {
+ for (let i = 0; i < list.length; ++i) {
+ switch (list[i].type) {
+ case "space":
+ case "comment":
+ case "newline":
+ break;
+ default:
+ return i;
+ }
+ }
+ return -1;
+ }
+ function isFlowToken(token) {
+ switch (token?.type) {
+ case "alias":
+ case "scalar":
+ case "single-quoted-scalar":
+ case "double-quoted-scalar":
+ case "flow-collection":
+ return true;
+ default:
+ return false;
+ }
+ }
+ function getPrevProps(parent) {
+ switch (parent.type) {
+ case "document":
+ return parent.start;
+ case "block-map": {
+ const it = parent.items[parent.items.length - 1];
+ return it.sep ?? it.start;
+ }
+ case "block-seq":
+ return parent.items[parent.items.length - 1].start;
+ /* istanbul ignore next should not happen */
+ default:
+ return [];
+ }
+ }
+ function getFirstKeyStartProps(prev) {
+ if (prev.length === 0)
+ return [];
+ let i = prev.length;
+ loop: while (--i >= 0) {
+ switch (prev[i].type) {
+ case "doc-start":
+ case "explicit-key-ind":
+ case "map-value-ind":
+ case "seq-item-ind":
+ case "newline":
+ break loop;
+ }
+ }
+ while (prev[++i]?.type === "space") {
+ }
+ return prev.splice(i, prev.length);
+ }
+ function fixFlowSeqItems(fc) {
+ if (fc.start.type === "flow-seq-start") {
+ for (const it of fc.items) {
+ if (it.sep && !it.value && !includesToken(it.start, "explicit-key-ind") && !includesToken(it.sep, "map-value-ind")) {
+ if (it.key)
+ it.value = it.key;
+ delete it.key;
+ if (isFlowToken(it.value)) {
+ if (it.value.end)
+ Array.prototype.push.apply(it.value.end, it.sep);
+ else
+ it.value.end = it.sep;
+ } else
+ Array.prototype.push.apply(it.start, it.sep);
+ delete it.sep;
+ }
+ }
+ }
+ }
+ var Parser = class {
+ /**
+ * @param onNewLine - If defined, called separately with the start position of
+ * each new line (in `parse()`, including the start of input).
+ */
+ constructor(onNewLine) {
+ this.atNewLine = true;
+ this.atScalar = false;
+ this.indent = 0;
+ this.offset = 0;
+ this.onKeyLine = false;
+ this.stack = [];
+ this.source = "";
+ this.type = "";
+ this.lexer = new lexer.Lexer();
+ this.onNewLine = onNewLine;
+ }
+ /**
+ * Parse `source` as a YAML stream.
+ * If `incomplete`, a part of the last line may be left as a buffer for the next call.
+ *
+ * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens.
+ *
+ * @returns A generator of tokens representing each directive, document, and other structure.
+ */
+ *parse(source, incomplete = false) {
+ if (this.onNewLine && this.offset === 0)
+ this.onNewLine(0);
+ for (const lexeme of this.lexer.lex(source, incomplete))
+ yield* this.next(lexeme);
+ if (!incomplete)
+ yield* this.end();
+ }
+ /**
+ * Advance the parser by the `source` of one lexical token.
+ */
+ *next(source) {
+ this.source = source;
+ if (node_process.env.LOG_TOKENS)
+ console.log("|", cst.prettyToken(source));
+ if (this.atScalar) {
+ this.atScalar = false;
+ yield* this.step();
+ this.offset += source.length;
+ return;
+ }
+ const type = cst.tokenType(source);
+ if (!type) {
+ const message = `Not a YAML token: ${source}`;
+ yield* this.pop({ type: "error", offset: this.offset, message, source });
+ this.offset += source.length;
+ } else if (type === "scalar") {
+ this.atNewLine = false;
+ this.atScalar = true;
+ this.type = "scalar";
+ } else {
+ this.type = type;
+ yield* this.step();
+ switch (type) {
+ case "newline":
+ this.atNewLine = true;
+ this.indent = 0;
+ if (this.onNewLine)
+ this.onNewLine(this.offset + source.length);
+ break;
+ case "space":
+ if (this.atNewLine && source[0] === " ")
+ this.indent += source.length;
+ break;
+ case "explicit-key-ind":
+ case "map-value-ind":
+ case "seq-item-ind":
+ if (this.atNewLine)
+ this.indent += source.length;
+ break;
+ case "doc-mode":
+ case "flow-error-end":
+ return;
+ default:
+ this.atNewLine = false;
+ }
+ this.offset += source.length;
+ }
+ }
+ /** Call at end of input to push out any remaining constructions */
+ *end() {
+ while (this.stack.length > 0)
+ yield* this.pop();
+ }
+ get sourceToken() {
+ const st = {
+ type: this.type,
+ offset: this.offset,
+ indent: this.indent,
+ source: this.source
+ };
+ return st;
+ }
+ *step() {
+ const top = this.peek(1);
+ if (this.type === "doc-end" && (!top || top.type !== "doc-end")) {
+ while (this.stack.length > 0)
+ yield* this.pop();
+ this.stack.push({
+ type: "doc-end",
+ offset: this.offset,
+ source: this.source
+ });
+ return;
+ }
+ if (!top)
+ return yield* this.stream();
+ switch (top.type) {
+ case "document":
+ return yield* this.document(top);
+ case "alias":
+ case "scalar":
+ case "single-quoted-scalar":
+ case "double-quoted-scalar":
+ return yield* this.scalar(top);
+ case "block-scalar":
+ return yield* this.blockScalar(top);
+ case "block-map":
+ return yield* this.blockMap(top);
+ case "block-seq":
+ return yield* this.blockSequence(top);
+ case "flow-collection":
+ return yield* this.flowCollection(top);
+ case "doc-end":
+ return yield* this.documentEnd(top);
+ }
+ yield* this.pop();
+ }
+ peek(n) {
+ return this.stack[this.stack.length - n];
+ }
+ *pop(error3) {
+ const token = error3 ?? this.stack.pop();
+ if (!token) {
+ const message = "Tried to pop an empty stack";
+ yield { type: "error", offset: this.offset, source: "", message };
+ } else if (this.stack.length === 0) {
+ yield token;
+ } else {
+ const top = this.peek(1);
+ if (token.type === "block-scalar") {
+ token.indent = "indent" in top ? top.indent : 0;
+ } else if (token.type === "flow-collection" && top.type === "document") {
+ token.indent = 0;
+ }
+ if (token.type === "flow-collection")
+ fixFlowSeqItems(token);
+ switch (top.type) {
+ case "document":
+ top.value = token;
+ break;
+ case "block-scalar":
+ top.props.push(token);
+ break;
+ case "block-map": {
+ const it = top.items[top.items.length - 1];
+ if (it.value) {
+ top.items.push({ start: [], key: token, sep: [] });
+ this.onKeyLine = true;
+ return;
+ } else if (it.sep) {
+ it.value = token;
+ } else {
+ Object.assign(it, { key: token, sep: [] });
+ this.onKeyLine = !it.explicitKey;
+ return;
+ }
+ break;
+ }
+ case "block-seq": {
+ const it = top.items[top.items.length - 1];
+ if (it.value)
+ top.items.push({ start: [], value: token });
+ else
+ it.value = token;
+ break;
+ }
+ case "flow-collection": {
+ const it = top.items[top.items.length - 1];
+ if (!it || it.value)
+ top.items.push({ start: [], key: token, sep: [] });
+ else if (it.sep)
+ it.value = token;
+ else
+ Object.assign(it, { key: token, sep: [] });
+ return;
+ }
+ /* istanbul ignore next should not happen */
+ default:
+ yield* this.pop();
+ yield* this.pop(token);
+ }
+ if ((top.type === "document" || top.type === "block-map" || top.type === "block-seq") && (token.type === "block-map" || token.type === "block-seq")) {
+ const last = token.items[token.items.length - 1];
+ if (last && !last.sep && !last.value && last.start.length > 0 && findNonEmptyIndex(last.start) === -1 && (token.indent === 0 || last.start.every((st) => st.type !== "comment" || st.indent < token.indent))) {
+ if (top.type === "document")
+ top.end = last.start;
+ else
+ top.items.push({ start: last.start });
+ token.items.splice(-1, 1);
+ }
+ }
+ }
+ }
+ *stream() {
+ switch (this.type) {
+ case "directive-line":
+ yield { type: "directive", offset: this.offset, source: this.source };
+ return;
+ case "byte-order-mark":
+ case "space":
+ case "comment":
+ case "newline":
+ yield this.sourceToken;
+ return;
+ case "doc-mode":
+ case "doc-start": {
+ const doc = {
+ type: "document",
+ offset: this.offset,
+ start: []
+ };
+ if (this.type === "doc-start")
+ doc.start.push(this.sourceToken);
+ this.stack.push(doc);
+ return;
+ }
+ }
+ yield {
+ type: "error",
+ offset: this.offset,
+ message: `Unexpected ${this.type} token in YAML stream`,
+ source: this.source
+ };
+ }
+ *document(doc) {
+ if (doc.value)
+ return yield* this.lineEnd(doc);
+ switch (this.type) {
+ case "doc-start": {
+ if (findNonEmptyIndex(doc.start) !== -1) {
+ yield* this.pop();
+ yield* this.step();
+ } else
+ doc.start.push(this.sourceToken);
+ return;
+ }
+ case "anchor":
+ case "tag":
+ case "space":
+ case "comment":
+ case "newline":
+ doc.start.push(this.sourceToken);
+ return;
+ }
+ const bv = this.startBlockValue(doc);
+ if (bv)
+ this.stack.push(bv);
+ else {
+ yield {
+ type: "error",
+ offset: this.offset,
+ message: `Unexpected ${this.type} token in YAML document`,
+ source: this.source
+ };
+ }
+ }
+ *scalar(scalar) {
+ if (this.type === "map-value-ind") {
+ const prev = getPrevProps(this.peek(2));
+ const start = getFirstKeyStartProps(prev);
+ let sep2;
+ if (scalar.end) {
+ sep2 = scalar.end;
+ sep2.push(this.sourceToken);
+ delete scalar.end;
+ } else
+ sep2 = [this.sourceToken];
+ const map = {
+ type: "block-map",
+ offset: scalar.offset,
+ indent: scalar.indent,
+ items: [{ start, key: scalar, sep: sep2 }]
+ };
+ this.onKeyLine = true;
+ this.stack[this.stack.length - 1] = map;
+ } else
+ yield* this.lineEnd(scalar);
+ }
+ *blockScalar(scalar) {
+ switch (this.type) {
+ case "space":
+ case "comment":
+ case "newline":
+ scalar.props.push(this.sourceToken);
+ return;
+ case "scalar":
+ scalar.source = this.source;
+ this.atNewLine = true;
+ this.indent = 0;
+ if (this.onNewLine) {
+ let nl = this.source.indexOf("\n") + 1;
+ while (nl !== 0) {
+ this.onNewLine(this.offset + nl);
+ nl = this.source.indexOf("\n", nl) + 1;
+ }
+ }
+ yield* this.pop();
+ break;
+ /* istanbul ignore next should not happen */
+ default:
+ yield* this.pop();
+ yield* this.step();
+ }
+ }
+ *blockMap(map) {
+ const it = map.items[map.items.length - 1];
+ switch (this.type) {
+ case "newline":
+ this.onKeyLine = false;
+ if (it.value) {
+ const end = "end" in it.value ? it.value.end : void 0;
+ const last = Array.isArray(end) ? end[end.length - 1] : void 0;
+ if (last?.type === "comment")
+ end?.push(this.sourceToken);
+ else
+ map.items.push({ start: [this.sourceToken] });
+ } else if (it.sep) {
+ it.sep.push(this.sourceToken);
+ } else {
+ it.start.push(this.sourceToken);
+ }
+ return;
+ case "space":
+ case "comment":
+ if (it.value) {
+ map.items.push({ start: [this.sourceToken] });
+ } else if (it.sep) {
+ it.sep.push(this.sourceToken);
+ } else {
+ if (this.atIndentedComment(it.start, map.indent)) {
+ const prev = map.items[map.items.length - 2];
+ const end = prev?.value?.end;
+ if (Array.isArray(end)) {
+ Array.prototype.push.apply(end, it.start);
+ end.push(this.sourceToken);
+ map.items.pop();
+ return;
+ }
+ }
+ it.start.push(this.sourceToken);
+ }
+ return;
+ }
+ if (this.indent >= map.indent) {
+ const atMapIndent = !this.onKeyLine && this.indent === map.indent;
+ const atNextItem = atMapIndent && (it.sep || it.explicitKey) && this.type !== "seq-item-ind";
+ let start = [];
+ if (atNextItem && it.sep && !it.value) {
+ const nl = [];
+ for (let i = 0; i < it.sep.length; ++i) {
+ const st = it.sep[i];
+ switch (st.type) {
+ case "newline":
+ nl.push(i);
+ break;
+ case "space":
+ break;
+ case "comment":
+ if (st.indent > map.indent)
+ nl.length = 0;
+ break;
+ default:
+ nl.length = 0;
+ }
+ }
+ if (nl.length >= 2)
+ start = it.sep.splice(nl[1]);
+ }
+ switch (this.type) {
+ case "anchor":
+ case "tag":
+ if (atNextItem || it.value) {
+ start.push(this.sourceToken);
+ map.items.push({ start });
+ this.onKeyLine = true;
+ } else if (it.sep) {
+ it.sep.push(this.sourceToken);
+ } else {
+ it.start.push(this.sourceToken);
+ }
+ return;
+ case "explicit-key-ind":
+ if (!it.sep && !it.explicitKey) {
+ it.start.push(this.sourceToken);
+ it.explicitKey = true;
+ } else if (atNextItem || it.value) {
+ start.push(this.sourceToken);
+ map.items.push({ start, explicitKey: true });
+ } else {
+ this.stack.push({
+ type: "block-map",
+ offset: this.offset,
+ indent: this.indent,
+ items: [{ start: [this.sourceToken], explicitKey: true }]
+ });
+ }
+ this.onKeyLine = true;
+ return;
+ case "map-value-ind":
+ if (it.explicitKey) {
+ if (!it.sep) {
+ if (includesToken(it.start, "newline")) {
+ Object.assign(it, { key: null, sep: [this.sourceToken] });
+ } else {
+ const start2 = getFirstKeyStartProps(it.start);
+ this.stack.push({
+ type: "block-map",
+ offset: this.offset,
+ indent: this.indent,
+ items: [{ start: start2, key: null, sep: [this.sourceToken] }]
+ });
+ }
+ } else if (it.value) {
+ map.items.push({ start: [], key: null, sep: [this.sourceToken] });
+ } else if (includesToken(it.sep, "map-value-ind")) {
+ this.stack.push({
+ type: "block-map",
+ offset: this.offset,
+ indent: this.indent,
+ items: [{ start, key: null, sep: [this.sourceToken] }]
+ });
+ } else if (isFlowToken(it.key) && !includesToken(it.sep, "newline")) {
+ const start2 = getFirstKeyStartProps(it.start);
+ const key = it.key;
+ const sep2 = it.sep;
+ sep2.push(this.sourceToken);
+ delete it.key;
+ delete it.sep;
+ this.stack.push({
+ type: "block-map",
+ offset: this.offset,
+ indent: this.indent,
+ items: [{ start: start2, key, sep: sep2 }]
+ });
+ } else if (start.length > 0) {
+ it.sep = it.sep.concat(start, this.sourceToken);
+ } else {
+ it.sep.push(this.sourceToken);
+ }
+ } else {
+ if (!it.sep) {
+ Object.assign(it, { key: null, sep: [this.sourceToken] });
+ } else if (it.value || atNextItem) {
+ map.items.push({ start, key: null, sep: [this.sourceToken] });
+ } else if (includesToken(it.sep, "map-value-ind")) {
+ this.stack.push({
+ type: "block-map",
+ offset: this.offset,
+ indent: this.indent,
+ items: [{ start: [], key: null, sep: [this.sourceToken] }]
+ });
+ } else {
+ it.sep.push(this.sourceToken);
+ }
+ }
+ this.onKeyLine = true;
+ return;
+ case "alias":
+ case "scalar":
+ case "single-quoted-scalar":
+ case "double-quoted-scalar": {
+ const fs2 = this.flowScalar(this.type);
+ if (atNextItem || it.value) {
+ map.items.push({ start, key: fs2, sep: [] });
+ this.onKeyLine = true;
+ } else if (it.sep) {
+ this.stack.push(fs2);
+ } else {
+ Object.assign(it, { key: fs2, sep: [] });
+ this.onKeyLine = true;
+ }
+ return;
+ }
+ default: {
+ const bv = this.startBlockValue(map);
+ if (bv) {
+ if (atMapIndent && bv.type !== "block-seq") {
+ map.items.push({ start });
+ }
+ this.stack.push(bv);
+ return;
+ }
+ }
+ }
+ }
+ yield* this.pop();
+ yield* this.step();
+ }
+ *blockSequence(seq) {
+ const it = seq.items[seq.items.length - 1];
+ switch (this.type) {
+ case "newline":
+ if (it.value) {
+ const end = "end" in it.value ? it.value.end : void 0;
+ const last = Array.isArray(end) ? end[end.length - 1] : void 0;
+ if (last?.type === "comment")
+ end?.push(this.sourceToken);
+ else
+ seq.items.push({ start: [this.sourceToken] });
+ } else
+ it.start.push(this.sourceToken);
+ return;
+ case "space":
+ case "comment":
+ if (it.value)
+ seq.items.push({ start: [this.sourceToken] });
+ else {
+ if (this.atIndentedComment(it.start, seq.indent)) {
+ const prev = seq.items[seq.items.length - 2];
+ const end = prev?.value?.end;
+ if (Array.isArray(end)) {
+ Array.prototype.push.apply(end, it.start);
+ end.push(this.sourceToken);
+ seq.items.pop();
+ return;
+ }
+ }
+ it.start.push(this.sourceToken);
+ }
+ return;
+ case "anchor":
+ case "tag":
+ if (it.value || this.indent <= seq.indent)
+ break;
+ it.start.push(this.sourceToken);
+ return;
+ case "seq-item-ind":
+ if (this.indent !== seq.indent)
+ break;
+ if (it.value || includesToken(it.start, "seq-item-ind"))
+ seq.items.push({ start: [this.sourceToken] });
+ else
+ it.start.push(this.sourceToken);
+ return;
+ }
+ if (this.indent > seq.indent) {
+ const bv = this.startBlockValue(seq);
+ if (bv) {
+ this.stack.push(bv);
+ return;
+ }
+ }
+ yield* this.pop();
+ yield* this.step();
+ }
+ *flowCollection(fc) {
+ const it = fc.items[fc.items.length - 1];
+ if (this.type === "flow-error-end") {
+ let top;
+ do {
+ yield* this.pop();
+ top = this.peek(1);
+ } while (top && top.type === "flow-collection");
+ } else if (fc.end.length === 0) {
+ switch (this.type) {
+ case "comma":
+ case "explicit-key-ind":
+ if (!it || it.sep)
+ fc.items.push({ start: [this.sourceToken] });
+ else
+ it.start.push(this.sourceToken);
+ return;
+ case "map-value-ind":
+ if (!it || it.value)
+ fc.items.push({ start: [], key: null, sep: [this.sourceToken] });
+ else if (it.sep)
+ it.sep.push(this.sourceToken);
+ else
+ Object.assign(it, { key: null, sep: [this.sourceToken] });
+ return;
+ case "space":
+ case "comment":
+ case "newline":
+ case "anchor":
+ case "tag":
+ if (!it || it.value)
+ fc.items.push({ start: [this.sourceToken] });
+ else if (it.sep)
+ it.sep.push(this.sourceToken);
+ else
+ it.start.push(this.sourceToken);
+ return;
+ case "alias":
+ case "scalar":
+ case "single-quoted-scalar":
+ case "double-quoted-scalar": {
+ const fs2 = this.flowScalar(this.type);
+ if (!it || it.value)
+ fc.items.push({ start: [], key: fs2, sep: [] });
+ else if (it.sep)
+ this.stack.push(fs2);
+ else
+ Object.assign(it, { key: fs2, sep: [] });
+ return;
+ }
+ case "flow-map-end":
+ case "flow-seq-end":
+ fc.end.push(this.sourceToken);
+ return;
+ }
+ const bv = this.startBlockValue(fc);
+ if (bv)
+ this.stack.push(bv);
+ else {
+ yield* this.pop();
+ yield* this.step();
+ }
+ } else {
+ const parent = this.peek(2);
+ if (parent.type === "block-map" && (this.type === "map-value-ind" && parent.indent === fc.indent || this.type === "newline" && !parent.items[parent.items.length - 1].sep)) {
+ yield* this.pop();
+ yield* this.step();
+ } else if (this.type === "map-value-ind" && parent.type !== "flow-collection") {
+ const prev = getPrevProps(parent);
+ const start = getFirstKeyStartProps(prev);
+ fixFlowSeqItems(fc);
+ const sep2 = fc.end.splice(1, fc.end.length);
+ sep2.push(this.sourceToken);
+ const map = {
+ type: "block-map",
+ offset: fc.offset,
+ indent: fc.indent,
+ items: [{ start, key: fc, sep: sep2 }]
+ };
+ this.onKeyLine = true;
+ this.stack[this.stack.length - 1] = map;
+ } else {
+ yield* this.lineEnd(fc);
+ }
+ }
+ }
+ flowScalar(type) {
+ if (this.onNewLine) {
+ let nl = this.source.indexOf("\n") + 1;
+ while (nl !== 0) {
+ this.onNewLine(this.offset + nl);
+ nl = this.source.indexOf("\n", nl) + 1;
+ }
+ }
+ return {
+ type,
+ offset: this.offset,
+ indent: this.indent,
+ source: this.source
+ };
+ }
+ startBlockValue(parent) {
+ switch (this.type) {
+ case "alias":
+ case "scalar":
+ case "single-quoted-scalar":
+ case "double-quoted-scalar":
+ return this.flowScalar(this.type);
+ case "block-scalar-header":
+ return {
+ type: "block-scalar",
+ offset: this.offset,
+ indent: this.indent,
+ props: [this.sourceToken],
+ source: ""
+ };
+ case "flow-map-start":
+ case "flow-seq-start":
+ return {
+ type: "flow-collection",
+ offset: this.offset,
+ indent: this.indent,
+ start: this.sourceToken,
+ items: [],
+ end: []
+ };
+ case "seq-item-ind":
+ return {
+ type: "block-seq",
+ offset: this.offset,
+ indent: this.indent,
+ items: [{ start: [this.sourceToken] }]
+ };
+ case "explicit-key-ind": {
+ this.onKeyLine = true;
+ const prev = getPrevProps(parent);
+ const start = getFirstKeyStartProps(prev);
+ start.push(this.sourceToken);
+ return {
+ type: "block-map",
+ offset: this.offset,
+ indent: this.indent,
+ items: [{ start, explicitKey: true }]
+ };
+ }
+ case "map-value-ind": {
+ this.onKeyLine = true;
+ const prev = getPrevProps(parent);
+ const start = getFirstKeyStartProps(prev);
+ return {
+ type: "block-map",
+ offset: this.offset,
+ indent: this.indent,
+ items: [{ start, key: null, sep: [this.sourceToken] }]
+ };
+ }
+ }
+ return null;
+ }
+ atIndentedComment(start, indent) {
+ if (this.type !== "comment")
+ return false;
+ if (this.indent <= indent)
+ return false;
+ return start.every((st) => st.type === "newline" || st.type === "space");
+ }
+ *documentEnd(docEnd) {
+ if (this.type !== "doc-mode") {
+ if (docEnd.end)
+ docEnd.end.push(this.sourceToken);
+ else
+ docEnd.end = [this.sourceToken];
+ if (this.type === "newline")
+ yield* this.pop();
+ }
+ }
+ *lineEnd(token) {
+ switch (this.type) {
+ case "comma":
+ case "doc-start":
+ case "doc-end":
+ case "flow-seq-end":
+ case "flow-map-end":
+ case "map-value-ind":
+ yield* this.pop();
+ yield* this.step();
+ break;
+ case "newline":
+ this.onKeyLine = false;
+ // fallthrough
+ case "space":
+ case "comment":
+ default:
+ if (token.end)
+ token.end.push(this.sourceToken);
+ else
+ token.end = [this.sourceToken];
+ if (this.type === "newline")
+ yield* this.pop();
+ }
+ }
+ };
+ exports2.Parser = Parser;
+ }
+});
+
+// node_modules/yaml/dist/public-api.js
+var require_public_api = __commonJS({
+ "node_modules/yaml/dist/public-api.js"(exports2) {
+ "use strict";
+ var composer = require_composer();
+ var Document = require_Document();
+ var errors = require_errors2();
+ var log = require_log();
+ var identity = require_identity();
+ var lineCounter = require_line_counter();
+ var parser = require_parser();
+ function parseOptions(options) {
+ const prettyErrors = options.prettyErrors !== false;
+ const lineCounter$1 = options.lineCounter || prettyErrors && new lineCounter.LineCounter() || null;
+ return { lineCounter: lineCounter$1, prettyErrors };
+ }
+ function parseAllDocuments(source, options = {}) {
+ const { lineCounter: lineCounter2, prettyErrors } = parseOptions(options);
+ const parser$1 = new parser.Parser(lineCounter2?.addNewLine);
+ const composer$1 = new composer.Composer(options);
+ const docs = Array.from(composer$1.compose(parser$1.parse(source)));
+ if (prettyErrors && lineCounter2)
+ for (const doc of docs) {
+ doc.errors.forEach(errors.prettifyError(source, lineCounter2));
+ doc.warnings.forEach(errors.prettifyError(source, lineCounter2));
+ }
+ if (docs.length > 0)
+ return docs;
+ return Object.assign([], { empty: true }, composer$1.streamInfo());
+ }
+ function parseDocument2(source, options = {}) {
+ const { lineCounter: lineCounter2, prettyErrors } = parseOptions(options);
+ const parser$1 = new parser.Parser(lineCounter2?.addNewLine);
+ const composer$1 = new composer.Composer(options);
+ let doc = null;
+ for (const _doc of composer$1.compose(parser$1.parse(source), true, source.length)) {
+ if (!doc)
+ doc = _doc;
+ else if (doc.options.logLevel !== "silent") {
+ doc.errors.push(new errors.YAMLParseError(_doc.range.slice(0, 2), "MULTIPLE_DOCS", "Source contains multiple documents; please use YAML.parseAllDocuments()"));
+ break;
+ }
+ }
+ if (prettyErrors && lineCounter2) {
+ doc.errors.forEach(errors.prettifyError(source, lineCounter2));
+ doc.warnings.forEach(errors.prettifyError(source, lineCounter2));
+ }
+ return doc;
+ }
+ function parse(src, reviver, options) {
+ let _reviver = void 0;
+ if (typeof reviver === "function") {
+ _reviver = reviver;
+ } else if (options === void 0 && reviver && typeof reviver === "object") {
+ options = reviver;
+ }
+ const doc = parseDocument2(src, options);
+ if (!doc)
+ return null;
+ doc.warnings.forEach((warning4) => log.warn(doc.options.logLevel, warning4));
+ if (doc.errors.length > 0) {
+ if (doc.options.logLevel !== "silent")
+ throw doc.errors[0];
+ else
+ doc.errors = [];
+ }
+ return doc.toJS(Object.assign({ reviver: _reviver }, options));
+ }
+ function stringify(value, replacer, options) {
+ let _replacer = null;
+ if (typeof replacer === "function" || Array.isArray(replacer)) {
+ _replacer = replacer;
+ } else if (options === void 0 && replacer) {
+ options = replacer;
+ }
+ if (typeof options === "string")
+ options = options.length;
+ if (typeof options === "number") {
+ const indent = Math.round(options);
+ options = indent < 1 ? void 0 : indent > 8 ? { indent: 8 } : { indent };
+ }
+ if (value === void 0) {
+ const { keepUndefined } = options ?? replacer ?? {};
+ if (!keepUndefined)
+ return void 0;
+ }
+ if (identity.isDocument(value) && !_replacer)
+ return value.toString(options);
+ return new Document.Document(value, _replacer, options).toString(options);
+ }
+ exports2.parse = parse;
+ exports2.parseAllDocuments = parseAllDocuments;
+ exports2.parseDocument = parseDocument2;
+ exports2.stringify = stringify;
+ }
+});
+
+// node_modules/yaml/dist/index.js
+var require_dist = __commonJS({
+ "node_modules/yaml/dist/index.js"(exports2) {
+ "use strict";
+ var composer = require_composer();
+ var Document = require_Document();
+ var Schema = require_Schema();
+ var errors = require_errors2();
+ var Alias = require_Alias();
+ var identity = require_identity();
+ var Pair = require_Pair();
+ var Scalar = require_Scalar();
+ var YAMLMap = require_YAMLMap();
+ var YAMLSeq = require_YAMLSeq();
+ var cst = require_cst();
+ var lexer = require_lexer();
+ var lineCounter = require_line_counter();
+ var parser = require_parser();
+ var publicApi = require_public_api();
+ var visit = require_visit();
+ exports2.Composer = composer.Composer;
+ exports2.Document = Document.Document;
+ exports2.Schema = Schema.Schema;
+ exports2.YAMLError = errors.YAMLError;
+ exports2.YAMLParseError = errors.YAMLParseError;
+ exports2.YAMLWarning = errors.YAMLWarning;
+ exports2.Alias = Alias.Alias;
+ exports2.isAlias = identity.isAlias;
+ exports2.isCollection = identity.isCollection;
+ exports2.isDocument = identity.isDocument;
+ exports2.isMap = identity.isMap;
+ exports2.isNode = identity.isNode;
+ exports2.isPair = identity.isPair;
+ exports2.isScalar = identity.isScalar;
+ exports2.isSeq = identity.isSeq;
+ exports2.Pair = Pair.Pair;
+ exports2.Scalar = Scalar.Scalar;
+ exports2.YAMLMap = YAMLMap.YAMLMap;
+ exports2.YAMLSeq = YAMLSeq.YAMLSeq;
+ exports2.CST = cst;
+ exports2.Lexer = lexer.Lexer;
+ exports2.LineCounter = lineCounter.LineCounter;
+ exports2.Parser = parser.Parser;
+ exports2.parse = publicApi.parse;
+ exports2.parseAllDocuments = publicApi.parseAllDocuments;
+ exports2.parseDocument = publicApi.parseDocument;
+ exports2.stringify = publicApi.stringify;
+ exports2.visit = visit.visit;
+ exports2.visitAsync = visit.visitAsync;
+ }
+});
+
+// src/main.ts
+var main_exports = {};
+__export(main_exports, {
+ run: () => run
+});
+module.exports = __toCommonJS(main_exports);
+var core6 = __toESM(require_core());
+var github4 = __toESM(require_github());
+var import_path2 = __toESM(require("path"));
+
+// src/changedFiles.ts
+var core3 = __toESM(require_core());
+var github2 = __toESM(require_github());
+var import_flatten = __toESM(require_flatten());
+var import_utils_convert_path = __toESM(require_lib30());
+var import_micromatch2 = __toESM(require_micromatch());
+var path3 = __toESM(require("path"));
+
+// src/changedFilesOutput.ts
+var core2 = __toESM(require_core());
+var import_path = __toESM(require("path"));
+
+// src/utils.ts
+var core = __toESM(require_core());
+var exec = __toESM(require_exec());
+var github = __toESM(require_github());
+var import_fs = require("fs");
+var import_lodash = __toESM(require_lodash());
+var import_micromatch = __toESM(require_micromatch());
+var path = __toESM(require("path"));
+var import_readline = require("readline");
+var import_yaml = __toESM(require_dist());
+
+// src/constant.ts
+var DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS = {
+ sha: "",
+ baseSha: "",
+ since: "",
+ until: "",
+ path: ".",
+ quotepath: true,
+ diffRelative: true,
+ sinceLastRemoteCommit: false,
+ recoverDeletedFiles: false,
+ recoverDeletedFilesToDestination: "",
+ recoverFiles: "",
+ recoverFilesSeparator: "\n",
+ recoverFilesIgnore: "",
+ recoverFilesIgnoreSeparator: "\n",
+ includeAllOldNewRenamedFiles: false,
+ oldNewSeparator: ",",
+ oldNewFilesSeparator: " ",
+ skipInitialFetch: false,
+ fetchAdditionalSubmoduleHistory: false,
+ dirNamesDeletedFilesIncludeOnlyDeletedDirs: false,
+ excludeSubmodules: false,
+ fetchMissingHistoryMaxRetries: 20,
+ usePosixPathSeparator: false,
+ tagsPattern: "*",
+ tagsIgnorePattern: ""
+};
+
+// src/utils.ts
+var MINIMUM_GIT_VERSION = "2.18.0";
+var isWindows = () => {
+ return process.platform === "win32";
+};
+var normalizeSeparators = (p) => {
+ if (isWindows()) {
+ p = p.replace(/\//g, "\\");
+ const isUnc = /^\\\\+[^\\]/.test(p);
+ p = (isUnc ? "\\" : "") + p.replace(/\\\\+/g, "\\");
+ } else {
+ p = p.replace(/\/\/+/g, "/");
+ }
+ return p;
+};
+var safeTrimTrailingSeparator = (p) => {
+ if (!p) {
+ return "";
+ }
+ p = normalizeSeparators(p);
+ if (!p.endsWith(path.sep)) {
+ return p;
+ }
+ if (p === path.sep) {
+ return p;
+ }
+ if (isWindows() && /^[A-Z]:\\$/i.test(p)) {
+ return p;
+ }
+ return p.substring(0, p.length - 1);
+};
+var getDirname = (p) => {
+ p = safeTrimTrailingSeparator(p);
+ if (isWindows() && /^\\\\[^\\]+(\\[^\\]+)?$/.test(p)) {
+ return p;
+ }
+ let result = path.dirname(p);
+ if (isWindows() && /^\\\\[^\\]+\\[^\\]+\\$/.test(result)) {
+ result = safeTrimTrailingSeparator(result);
+ }
+ return result;
+};
+var versionToNumber = (version) => {
+ const [major, minor, patch] = version.split(".").map(Number);
+ return major * 1e6 + minor * 1e3 + patch;
+};
+var verifyMinimumGitVersion = async () => {
+ const { exitCode, stdout, stderr } = await exec.getExecOutput(
+ "git",
+ ["--version"],
+ { silent: !core.isDebug() }
+ );
+ if (exitCode !== 0) {
+ throw new Error(stderr || "An unexpected error occurred");
+ }
+ const gitVersion = stdout.trim();
+ if (versionToNumber(gitVersion) < versionToNumber(MINIMUM_GIT_VERSION)) {
+ throw new Error(
+ `Minimum required git version is ${MINIMUM_GIT_VERSION}, your version is ${gitVersion}`
+ );
+ }
+};
+var exists = async (filePath) => {
+ try {
+ await import_fs.promises.access(filePath);
+ return true;
+ } catch {
+ return false;
+ }
+};
+async function* lineOfFileGenerator({
+ filePath,
+ excludedFiles
+}) {
+ const fileStream = (0, import_fs.createReadStream)(filePath);
+ fileStream.on("error", (error3) => {
+ throw error3;
+ });
+ const rl = (0, import_readline.createInterface)({
+ input: fileStream,
+ crlfDelay: Infinity
+ });
+ for await (let line of rl) {
+ if (!line.startsWith("#") && line !== "") {
+ if (excludedFiles) {
+ line = line.startsWith("!") ? line : `!${line}`;
+ if (line.endsWith(path.sep)) {
+ line = `${line}**`;
+ }
+ yield line;
+ } else {
+ line = line.endsWith(path.sep) ? `${line}**` : line;
+ yield line;
+ }
+ }
+ }
+}
+var getFilesFromSourceFile = async ({
+ filePaths,
+ excludedFiles = false
+}) => {
+ const lines = [];
+ for (const filePath of filePaths) {
+ for await (const line of lineOfFileGenerator({ filePath, excludedFiles })) {
+ lines.push(line);
+ }
+ }
+ return lines;
+};
+var updateGitGlobalConfig = async ({
+ name,
+ value
+}) => {
+ const { exitCode, stderr } = await exec.getExecOutput(
+ "git",
+ ["config", "--global", name, value],
+ {
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ );
+ if (exitCode !== 0 || stderr) {
+ core.warning(stderr || `Couldn't update git global config ${name}`);
+ }
+};
+var isRepoShallow = async ({ cwd }) => {
+ const { stdout } = await exec.getExecOutput(
+ "git",
+ ["rev-parse", "--is-shallow-repository"],
+ {
+ cwd,
+ silent: !core.isDebug()
+ }
+ );
+ return stdout.trim() === "true";
+};
+var submoduleExists = async ({
+ cwd
+}) => {
+ const { stdout, exitCode, stderr } = await exec.getExecOutput(
+ "git",
+ ["submodule", "status"],
+ {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ );
+ if (exitCode !== 0) {
+ core.warning(stderr || "Couldn't list submodules");
+ return false;
+ }
+ return stdout.trim() !== "";
+};
+var gitFetch = async ({
+ args,
+ cwd
+}) => {
+ const { exitCode } = await exec.getExecOutput("git", ["fetch", "-q", ...args], {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ });
+ return exitCode;
+};
+var gitFetchSubmodules = async ({
+ args,
+ cwd
+}) => {
+ const { exitCode, stderr } = await exec.getExecOutput(
+ "git",
+ ["submodule", "foreach", "git", "fetch", "-q", ...args],
+ {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ );
+ if (exitCode !== 0) {
+ core.warning(stderr || "Couldn't fetch submodules");
+ }
+};
+var getSubmodulePath = async ({
+ cwd
+}) => {
+ const { exitCode, stdout, stderr } = await exec.getExecOutput(
+ "git",
+ ["submodule", "status"],
+ {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ );
+ if (exitCode !== 0) {
+ core.warning(stderr || "Couldn't get submodule names");
+ return [];
+ }
+ return stdout.trim().split("\n").map((line) => normalizeSeparators(line.trim().split(" ")[1]));
+};
+var gitSubmoduleDiffSHA = async ({
+ cwd,
+ parentSha1,
+ parentSha2,
+ submodulePath,
+ diff
+}) => {
+ const { stdout } = await exec.getExecOutput(
+ "git",
+ ["diff", `${parentSha1}${diff}${parentSha2}`, "--", submodulePath],
+ {
+ cwd,
+ silent: !core.isDebug()
+ }
+ );
+ const subprojectCommitPreRegex = /^(?-)Subproject commit (?.+)$/m;
+ const subprojectCommitCurRegex = /^(?\+)Subproject commit (?.+)$/m;
+ const previousSha = subprojectCommitPreRegex.exec(stdout)?.groups?.commitHash || "4b825dc642cb6eb9a060e54bf8d69288fbee4904";
+ const currentSha = subprojectCommitCurRegex.exec(stdout)?.groups?.commitHash;
+ if (currentSha) {
+ return { previousSha, currentSha };
+ }
+ core.debug(
+ `No submodule commit found for ${submodulePath} between ${parentSha1}${diff}${parentSha2}`
+ );
+ return {};
+};
+var gitRenamedFiles = async ({
+ cwd,
+ sha1,
+ sha2,
+ diff,
+ oldNewSeparator,
+ isSubmodule = false,
+ parentDir = ""
+}) => {
+ const { exitCode, stderr, stdout } = await exec.getExecOutput(
+ "git",
+ [
+ "diff",
+ "--name-status",
+ "--ignore-submodules=all",
+ "--diff-filter=R",
+ `${sha1}${diff}${sha2}`
+ ],
+ {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ );
+ if (exitCode !== 0) {
+ if (isSubmodule) {
+ core.warning(
+ stderr || `Failed to get renamed files for submodule between: ${sha1}${diff}${sha2}`
+ );
+ core.warning(
+ "Please ensure that submodules are initialized and up to date. See: https://github.com/actions/checkout#usage"
+ );
+ } else {
+ core.error(
+ stderr || `Failed to get renamed files between: ${sha1}${diff}${sha2}`
+ );
+ throw new Error("Unable to get renamed files");
+ }
+ return [];
+ }
+ return stdout.trim().split("\n").filter(Boolean).map((line) => {
+ core.debug(`Renamed file: ${line}`);
+ const [, oldPath, newPath] = line.split(" ");
+ if (isSubmodule) {
+ return `${normalizeSeparators(
+ path.join(parentDir, oldPath)
+ )}${oldNewSeparator}${normalizeSeparators(
+ path.join(parentDir, newPath)
+ )}`;
+ }
+ return `${normalizeSeparators(
+ oldPath
+ )}${oldNewSeparator}${normalizeSeparators(newPath)}`;
+ });
+};
+var getAllChangedFiles = async ({
+ cwd,
+ sha1,
+ sha2,
+ diff,
+ isSubmodule = false,
+ parentDir = "",
+ outputRenamedFilesAsDeletedAndAdded = false,
+ failOnInitialDiffError = false,
+ failOnSubmoduleDiffError = false
+}) => {
+ const { exitCode, stdout, stderr } = await exec.getExecOutput(
+ "git",
+ [
+ "diff",
+ "--name-status",
+ "--ignore-submodules=all",
+ `--diff-filter=ACDMRTUX`,
+ `${sha1}${diff}${sha2}`
+ ],
+ {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ );
+ const changedFiles = {
+ ["A" /* Added */]: [],
+ ["C" /* Copied */]: [],
+ ["D" /* Deleted */]: [],
+ ["M" /* Modified */]: [],
+ ["R" /* Renamed */]: [],
+ ["T" /* TypeChanged */]: [],
+ ["U" /* Unmerged */]: [],
+ ["X" /* Unknown */]: []
+ };
+ if (exitCode !== 0) {
+ if (failOnInitialDiffError && !isSubmodule) {
+ throw new Error(
+ `Failed to get changed files between: ${sha1}${diff}${sha2}: ${stderr}`
+ );
+ } else if (failOnSubmoduleDiffError && isSubmodule) {
+ throw new Error(
+ `Failed to get changed files for submodule between: ${sha1}${diff}${sha2}: ${stderr}`
+ );
+ }
+ }
+ if (exitCode !== 0) {
+ if (isSubmodule) {
+ core.warning(
+ stderr || `Failed to get changed files for submodule between: ${sha1}${diff}${sha2}`
+ );
+ core.warning(
+ "Please ensure that submodules are initialized and up to date. See: https://github.com/actions/checkout#usage"
+ );
+ } else {
+ core.warning(
+ stderr || `Failed to get changed files between: ${sha1}${diff}${sha2}`
+ );
+ }
+ return changedFiles;
+ }
+ const lines = stdout.split("\n").filter(Boolean);
+ for (const line of lines) {
+ const [changeType, filePath, newPath = ""] = line.split(" ");
+ const normalizedFilePath = isSubmodule ? normalizeSeparators(path.join(parentDir, filePath)) : normalizeSeparators(filePath);
+ const normalizedNewPath = isSubmodule ? normalizeSeparators(path.join(parentDir, newPath)) : normalizeSeparators(newPath);
+ if (changeType.startsWith("R")) {
+ if (outputRenamedFilesAsDeletedAndAdded) {
+ changedFiles["D" /* Deleted */].push(normalizedFilePath);
+ changedFiles["A" /* Added */].push(normalizedNewPath);
+ } else {
+ changedFiles["R" /* Renamed */].push(normalizedNewPath);
+ }
+ } else {
+ changedFiles[changeType].push(normalizedFilePath);
+ }
+ }
+ return changedFiles;
+};
+var getFilteredChangedFiles = async ({
+ allDiffFiles,
+ filePatterns
+}) => {
+ const changedFiles = {
+ ["A" /* Added */]: [],
+ ["C" /* Copied */]: [],
+ ["D" /* Deleted */]: [],
+ ["M" /* Modified */]: [],
+ ["R" /* Renamed */]: [],
+ ["T" /* TypeChanged */]: [],
+ ["U" /* Unmerged */]: [],
+ ["X" /* Unknown */]: []
+ };
+ const hasFilePatterns = filePatterns.length > 0;
+ const isWin = isWindows();
+ for (const changeType of Object.keys(allDiffFiles)) {
+ const files = allDiffFiles[changeType];
+ if (hasFilePatterns) {
+ changedFiles[changeType] = (0, import_micromatch.default)(files, filePatterns, {
+ dot: true,
+ windows: isWin,
+ noext: true
+ }).map(normalizeSeparators);
+ } else {
+ changedFiles[changeType] = files;
+ }
+ }
+ return changedFiles;
+};
+var gitLog = async ({
+ args,
+ cwd
+}) => {
+ const { stdout } = await exec.getExecOutput("git", ["log", ...args], {
+ cwd,
+ silent: !core.isDebug()
+ });
+ return stdout.trim();
+};
+var getHeadSha = async ({ cwd }) => {
+ const { stdout } = await exec.getExecOutput("git", ["rev-parse", "HEAD"], {
+ cwd,
+ silent: !core.isDebug()
+ });
+ return stdout.trim();
+};
+var isInsideWorkTree = async ({
+ cwd
+}) => {
+ const { stdout } = await exec.getExecOutput(
+ "git",
+ ["rev-parse", "--is-inside-work-tree"],
+ {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ );
+ return stdout.trim() === "true";
+};
+var getRemoteBranchHeadSha = async ({
+ cwd,
+ branch,
+ remoteName
+}) => {
+ const { stdout } = await exec.getExecOutput(
+ "git",
+ ["rev-parse", `${remoteName}/${branch}`],
+ {
+ cwd,
+ silent: !core.isDebug()
+ }
+ );
+ return stdout.trim();
+};
+var getCurrentBranchName = async ({
+ cwd
+}) => {
+ const { stdout, exitCode } = await exec.getExecOutput(
+ "git",
+ ["rev-parse", "--abbrev-ref", "HEAD"],
+ {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ );
+ if (exitCode !== 0) {
+ return "";
+ }
+ return stdout.trim();
+};
+var getParentSha = async ({ cwd }) => {
+ const { stdout, exitCode } = await exec.getExecOutput(
+ "git",
+ ["rev-list", "-n", "1", "HEAD^"],
+ {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ );
+ if (exitCode !== 0) {
+ return "";
+ }
+ return stdout.trim();
+};
+var verifyCommitSha = async ({
+ sha,
+ cwd,
+ showAsErrorMessage = true
+}) => {
+ const { exitCode, stderr } = await exec.getExecOutput(
+ "git",
+ ["rev-parse", "--verify", `${sha}^{commit}`],
+ {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ );
+ if (exitCode !== 0) {
+ if (showAsErrorMessage) {
+ core.error(`Unable to locate the commit sha: ${sha}`);
+ core.error(
+ "Please verify that the commit sha is correct, and increase the 'fetch_depth' input if needed"
+ );
+ core.debug(stderr);
+ } else {
+ core.warning(`Unable to locate the commit sha: ${sha}`);
+ core.debug(stderr);
+ }
+ }
+ return exitCode;
+};
+var cleanShaInput = async ({
+ sha,
+ cwd,
+ token
+}) => {
+ if (!sha) {
+ return sha;
+ }
+ const { stdout, exitCode } = await exec.getExecOutput(
+ "git",
+ ["rev-parse", "--verify", `${sha}^{commit}`],
+ {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ );
+ if (exitCode !== 0) {
+ const octokit = github.getOctokit(token);
+ const { data: refData } = await octokit.rest.git.getRef({
+ owner: github.context.repo.owner,
+ repo: github.context.repo.repo,
+ ref: `heads/${sha}`
+ });
+ return refData.object.sha;
+ }
+ return stdout.trim();
+};
+var getPreviousGitTag = async ({
+ cwd,
+ tagsPattern,
+ currentBranch,
+ tagsIgnorePattern
+}) => {
+ const ignorePatterns = [];
+ let currentShaDate = null;
+ const { stdout } = await exec.getExecOutput(
+ "git",
+ [
+ "tag",
+ "--sort=-creatordate",
+ "--format=%(refname:short)|%(objectname)|%(creatordate:iso)"
+ ],
+ {
+ cwd,
+ silent: !core.isDebug()
+ }
+ );
+ if (tagsIgnorePattern) {
+ ignorePatterns.push(tagsIgnorePattern);
+ }
+ if (currentBranch) {
+ ignorePatterns.push(currentBranch);
+ try {
+ const { stdout: currentShaDateOutput } = await exec.getExecOutput(
+ "git",
+ ["show", "-s", "--format=%ai", currentBranch],
+ {
+ cwd,
+ silent: !core.isDebug()
+ }
+ );
+ currentShaDate = new Date(currentShaDateOutput.trim());
+ } catch (error3) {
+ core.warning(`Failed to get date for current branch ${currentBranch}`);
+ }
+ }
+ const previousTag = { tag: "", sha: "" };
+ const tags = stdout.trim().split("\n");
+ for (const tagData of tags) {
+ const [tag, sha, dateString] = tagData.split("|");
+ if (!import_micromatch.default.isMatch(tag, tagsPattern) || import_micromatch.default.isMatch(tag, ignorePatterns)) {
+ continue;
+ }
+ const date = new Date(dateString);
+ if (currentShaDate && date >= currentShaDate) {
+ continue;
+ }
+ previousTag.tag = tag;
+ previousTag.sha = sha;
+ break;
+ }
+ if (!previousTag.tag) {
+ core.warning("No previous tag found");
+ }
+ return previousTag;
+};
+var canDiffCommits = async ({
+ cwd,
+ sha1,
+ sha2,
+ diff
+}) => {
+ if (diff === "...") {
+ const mergeBase = await getMergeBase(cwd, sha1, sha2);
+ if (!mergeBase) {
+ core.warning(`Unable to find merge base between ${sha1} and ${sha2}`);
+ return false;
+ }
+ const { exitCode, stderr } = await exec.getExecOutput(
+ "git",
+ ["log", "--format=%H", `${mergeBase}..${sha2}`],
+ {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ );
+ if (exitCode !== 0) {
+ core.warning(stderr || `Error checking commit history`);
+ return false;
+ }
+ return true;
+ } else {
+ const { exitCode, stderr } = await exec.getExecOutput(
+ "git",
+ ["diff", "--no-patch", sha1, sha2],
+ {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ );
+ if (exitCode !== 0) {
+ core.warning(stderr || `Error checking commit history`);
+ return false;
+ }
+ return true;
+ }
+};
+var getMergeBase = async (cwd, sha1, sha2) => {
+ const { exitCode, stdout } = await exec.getExecOutput(
+ "git",
+ ["merge-base", sha1, sha2],
+ {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ );
+ if (exitCode !== 0) {
+ return null;
+ }
+ return stdout.trim();
+};
+var getDirnameMaxDepth = ({
+ relativePath,
+ dirNamesMaxDepth,
+ excludeCurrentDir
+}) => {
+ const pathArr = getDirname(relativePath).split(path.sep);
+ const maxDepth = Math.min(dirNamesMaxDepth || pathArr.length, pathArr.length);
+ let output = pathArr[0];
+ for (let i = 1; i < maxDepth; i++) {
+ output = path.join(output, pathArr[i]);
+ }
+ if (excludeCurrentDir && output === ".") {
+ return "";
+ }
+ return normalizeSeparators(output);
+};
+var jsonOutput = ({
+ value,
+ shouldEscape
+}) => {
+ const result = JSON.stringify(value);
+ return shouldEscape ? result.replace(/"/g, '\\"') : result;
+};
+var getDirNamesIncludeFilesPattern = ({
+ inputs
+}) => {
+ return inputs.dirNamesIncludeFiles.split(inputs.dirNamesIncludeFilesSeparator).filter(Boolean);
+};
+var getFilePatterns = async ({
+ inputs,
+ workingDirectory
+}) => {
+ let cleanedFilePatterns = [];
+ if (inputs.files) {
+ const filesPatterns = inputs.files.split(inputs.filesSeparator).map((p) => p.endsWith(path.sep) ? `${p}**` : p).filter(Boolean);
+ cleanedFilePatterns.push(...filesPatterns);
+ core.debug(`files patterns: ${filesPatterns.join("\n")}`);
+ }
+ if (inputs.filesFromSourceFile !== "") {
+ const inputFilesFromSourceFile = inputs.filesFromSourceFile.split(inputs.filesFromSourceFileSeparator).filter(Boolean).map((p) => path.join(workingDirectory, p));
+ core.debug(`files from source file: ${inputFilesFromSourceFile}`);
+ const filesFromSourceFiles = await getFilesFromSourceFile({
+ filePaths: inputFilesFromSourceFile
+ });
+ core.debug(
+ `files from source files patterns: ${filesFromSourceFiles.join("\n")}`
+ );
+ cleanedFilePatterns.push(...filesFromSourceFiles);
+ }
+ if (inputs.filesIgnore) {
+ const filesIgnorePatterns = inputs.filesIgnore.split(inputs.filesIgnoreSeparator).filter(Boolean).map((p) => {
+ p = p.startsWith("!") ? p : `!${p}`;
+ if (p.endsWith(path.sep)) {
+ p = `${p}**`;
+ }
+ return p;
+ });
+ core.debug(`files ignore patterns: ${filesIgnorePatterns.join("\n")}`);
+ cleanedFilePatterns.push(...filesIgnorePatterns);
+ }
+ if (inputs.filesIgnoreFromSourceFile) {
+ const inputFilesIgnoreFromSourceFile = inputs.filesIgnoreFromSourceFile.split(inputs.filesIgnoreFromSourceFileSeparator).filter(Boolean).map((p) => path.join(workingDirectory, p));
+ core.debug(
+ `files ignore from source file: ${inputFilesIgnoreFromSourceFile}`
+ );
+ const filesIgnoreFromSourceFiles = await getFilesFromSourceFile({
+ filePaths: inputFilesIgnoreFromSourceFile,
+ excludedFiles: true
+ });
+ core.debug(
+ `files ignore from source files patterns: ${filesIgnoreFromSourceFiles.join(
+ "\n"
+ )}`
+ );
+ cleanedFilePatterns.push(...filesIgnoreFromSourceFiles);
+ }
+ if (inputs.negationPatternsFirst) {
+ cleanedFilePatterns.sort((a, b) => {
+ return a.startsWith("!") ? -1 : b.startsWith("!") ? 1 : 0;
+ });
+ }
+ if (cleanedFilePatterns.includes("**")) {
+ cleanedFilePatterns.sort((a, b) => {
+ return a === "**" ? -1 : b === "**" ? 1 : 0;
+ });
+ }
+ if (isWindows()) {
+ cleanedFilePatterns = cleanedFilePatterns.map(
+ (pattern) => pattern.replace(/\r\n/g, "\n").replace(/\r/g, "\n")
+ );
+ }
+ core.debug(`Input file patterns:
+${cleanedFilePatterns.join("\n")}`);
+ return cleanedFilePatterns;
+};
+var getYamlFilePatternsFromContents = async ({
+ content = "",
+ filePath = "",
+ excludedFiles = false
+}) => {
+ const filePatterns = {};
+ let source = "";
+ if (filePath) {
+ if (!await exists(filePath)) {
+ core.error(`File does not exist: ${filePath}`);
+ throw new Error(`File does not exist: ${filePath}`);
+ }
+ source = await import_fs.promises.readFile(filePath, "utf8");
+ } else {
+ source = content;
+ }
+ const doc = (0, import_yaml.parseDocument)(source, { merge: true, schema: "failsafe" });
+ if (doc.errors.length > 0) {
+ if (filePath) {
+ throw new Error(`YAML errors in ${filePath}: ${doc.errors}`);
+ } else {
+ throw new Error(`YAML errors: ${doc.errors}`);
+ }
+ }
+ if (doc.warnings.length > 0) {
+ if (filePath) {
+ throw new Error(`YAML warnings in ${filePath}: ${doc.warnings}`);
+ } else {
+ throw new Error(`YAML warnings: ${doc.warnings}`);
+ }
+ }
+ const yamlObject = doc.toJS();
+ for (const key in yamlObject) {
+ let value = yamlObject[key];
+ if (typeof value === "string" && value.includes("\n")) {
+ value = value.split("\n");
+ }
+ if (typeof value === "string") {
+ value = value.trim();
+ if (value) {
+ filePatterns[key] = [
+ excludedFiles && !value.startsWith("!") ? `!${value}` : value
+ ];
+ }
+ } else if (Array.isArray(value)) {
+ filePatterns[key] = (0, import_lodash.flattenDeep)(value).filter((v) => v.trim() !== "").map((v) => {
+ if (excludedFiles && !v.startsWith("!")) {
+ v = `!${v}`;
+ }
+ return v;
+ });
+ }
+ }
+ return filePatterns;
+};
+var getYamlFilePatterns = async ({
+ inputs,
+ workingDirectory
+}) => {
+ let filePatterns = {};
+ if (inputs.filesYaml) {
+ filePatterns = {
+ ...await getYamlFilePatternsFromContents({ content: inputs.filesYaml })
+ };
+ }
+ if (inputs.filesYamlFromSourceFile) {
+ const inputFilesYamlFromSourceFile = inputs.filesYamlFromSourceFile.split(inputs.filesYamlFromSourceFileSeparator).filter((p) => p !== "").map((p) => path.join(workingDirectory, p));
+ core.debug(`files yaml from source file: ${inputFilesYamlFromSourceFile}`);
+ for (const filePath of inputFilesYamlFromSourceFile) {
+ const newFilePatterns = await getYamlFilePatternsFromContents({ filePath });
+ for (const key in newFilePatterns) {
+ if (key in filePatterns) {
+ filePatterns[key] = [...filePatterns[key], ...newFilePatterns[key]];
+ } else {
+ filePatterns[key] = newFilePatterns[key];
+ }
+ }
+ }
+ }
+ if (inputs.filesIgnoreYaml) {
+ const newIgnoreFilePatterns = await getYamlFilePatternsFromContents({
+ content: inputs.filesIgnoreYaml,
+ excludedFiles: true
+ });
+ for (const key in newIgnoreFilePatterns) {
+ if (key in filePatterns) {
+ filePatterns[key] = [
+ ...filePatterns[key],
+ ...newIgnoreFilePatterns[key]
+ ];
+ } else {
+ filePatterns[key] = newIgnoreFilePatterns[key];
+ }
+ }
+ }
+ if (inputs.filesIgnoreYamlFromSourceFile) {
+ const inputFilesIgnoreYamlFromSourceFile = inputs.filesIgnoreYamlFromSourceFile.split(inputs.filesIgnoreYamlFromSourceFileSeparator).filter((p) => p !== "").map((p) => path.join(workingDirectory, p));
+ core.debug(
+ `files ignore yaml from source file: ${inputFilesIgnoreYamlFromSourceFile}`
+ );
+ for (const filePath of inputFilesIgnoreYamlFromSourceFile) {
+ const newIgnoreFilePatterns = await getYamlFilePatternsFromContents({
+ filePath,
+ excludedFiles: true
+ });
+ for (const key in newIgnoreFilePatterns) {
+ if (key in filePatterns) {
+ filePatterns[key] = [
+ ...filePatterns[key],
+ ...newIgnoreFilePatterns[key]
+ ];
+ } else {
+ filePatterns[key] = newIgnoreFilePatterns[key];
+ }
+ }
+ }
+ }
+ return filePatterns;
+};
+var getRecoverFilePatterns = ({
+ inputs
+}) => {
+ let filePatterns = inputs.recoverFiles.split(
+ inputs.recoverFilesSeparator
+ );
+ if (inputs.recoverFilesIgnore) {
+ const ignoreFilePatterns = inputs.recoverFilesIgnore.split(
+ inputs.recoverFilesSeparator
+ );
+ filePatterns = filePatterns.concat(
+ ignoreFilePatterns.map((p) => {
+ if (p.startsWith("!")) {
+ return p;
+ } else {
+ return `!${p}`;
+ }
+ })
+ );
+ }
+ core.debug(`recover file patterns: ${filePatterns}`);
+ return filePatterns.filter(Boolean);
+};
+var getOutputKey = (key, outputPrefix) => {
+ return outputPrefix ? `${outputPrefix}_${key}` : key;
+};
+var setArrayOutput = async ({
+ key,
+ inputs,
+ value,
+ outputPrefix
+}) => {
+ core.debug(`${key}: ${JSON.stringify(value)}`);
+ await setOutput2({
+ key: outputPrefix ? getOutputKey(key, outputPrefix) : key,
+ value: inputs.json ? value : value.join(inputs.separator),
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json,
+ shouldEscape: inputs.escapeJson,
+ safeOutput: inputs.safeOutput
+ });
+};
+var setOutput2 = async ({
+ key,
+ value,
+ writeOutputFiles,
+ outputDir,
+ json = false,
+ shouldEscape = false,
+ safeOutput = false
+}) => {
+ let cleanedValue;
+ if (json) {
+ cleanedValue = jsonOutput({ value, shouldEscape });
+ } else {
+ cleanedValue = value.toString().trim();
+ }
+ if (safeOutput) {
+ cleanedValue = cleanedValue.replace(/[^\x20-\x7E]|[:*?<>|;`$()&!]/g, "\\$&");
+ }
+ core.setOutput(key, cleanedValue);
+ if (writeOutputFiles) {
+ const extension = json ? "json" : "txt";
+ const outputFilePath = path.join(outputDir, `${key}.${extension}`);
+ if (!await exists(outputDir)) {
+ await import_fs.promises.mkdir(outputDir, { recursive: true });
+ }
+ await import_fs.promises.writeFile(outputFilePath, cleanedValue.replace(/\\"/g, '"'));
+ }
+};
+var getDeletedFileContents = async ({
+ cwd,
+ filePath,
+ sha
+}) => {
+ const { stdout, exitCode, stderr } = await exec.getExecOutput(
+ "git",
+ ["show", `${sha}:${filePath}`],
+ {
+ cwd,
+ silent: !core.isDebug(),
+ ignoreReturnCode: true
+ }
+ );
+ if (exitCode !== 0) {
+ throw new Error(
+ `Error getting file content from git history "${filePath}": ${stderr}`
+ );
+ }
+ return stdout;
+};
+var recoverDeletedFiles = async ({
+ inputs,
+ workingDirectory,
+ deletedFiles,
+ recoverPatterns,
+ diffResult,
+ diffSubmodule,
+ submodulePaths
+}) => {
+ let recoverableDeletedFiles = deletedFiles;
+ core.debug(`recoverable deleted files: ${recoverableDeletedFiles}`);
+ if (recoverPatterns.length > 0) {
+ recoverableDeletedFiles = (0, import_micromatch.default)(deletedFiles, recoverPatterns, {
+ dot: true,
+ windows: isWindows(),
+ noext: true
+ });
+ core.debug(`filtered recoverable deleted files: ${recoverableDeletedFiles}`);
+ }
+ for (const deletedFile of recoverableDeletedFiles) {
+ let target = path.join(workingDirectory, deletedFile);
+ if (inputs.recoverDeletedFilesToDestination) {
+ target = path.join(
+ workingDirectory,
+ inputs.recoverDeletedFilesToDestination,
+ deletedFile
+ );
+ }
+ let deletedFileContents;
+ const submodulePath = submodulePaths.find((p) => deletedFile.startsWith(p));
+ if (diffSubmodule && submodulePath) {
+ const submoduleShaResult = await gitSubmoduleDiffSHA({
+ cwd: workingDirectory,
+ parentSha1: diffResult.previousSha,
+ parentSha2: diffResult.currentSha,
+ submodulePath,
+ diff: diffResult.diff
+ });
+ if (submoduleShaResult.previousSha) {
+ core.debug(
+ `recovering deleted file "${deletedFile}" from submodule ${submodulePath} from ${submoduleShaResult.previousSha}`
+ );
+ deletedFileContents = await getDeletedFileContents({
+ cwd: path.join(workingDirectory, submodulePath),
+ // E.g. submodulePath = test/demo and deletedFile = test/demo/.github/README.md => filePath => .github/README.md
+ filePath: deletedFile.replace(submodulePath, "").substring(1),
+ sha: submoduleShaResult.previousSha
+ });
+ } else {
+ core.warning(
+ `Unable to recover deleted file "${deletedFile}" from submodule ${submodulePath} from ${submoduleShaResult.previousSha}`
+ );
+ continue;
+ }
+ } else {
+ core.debug(
+ `recovering deleted file "${deletedFile}" from ${diffResult.previousSha}`
+ );
+ deletedFileContents = await getDeletedFileContents({
+ cwd: workingDirectory,
+ filePath: deletedFile,
+ sha: diffResult.previousSha
+ });
+ }
+ core.debug(`recovered deleted file "${deletedFile}"`);
+ if (!await exists(path.dirname(target))) {
+ core.debug(`creating directory "${path.dirname(target)}"`);
+ await import_fs.promises.mkdir(path.dirname(target), { recursive: true });
+ }
+ core.debug(`writing file "${target}"`);
+ await import_fs.promises.writeFile(target, deletedFileContents);
+ core.debug(`wrote file "${target}"`);
+ }
+};
+var hasLocalGitDirectory = async ({
+ workingDirectory
+}) => {
+ return await isInsideWorkTree({
+ cwd: workingDirectory
+ });
+};
+var warnUnsupportedRESTAPIInputs = async ({
+ inputs
+}) => {
+ for (const key of Object.keys(DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS)) {
+ const defaultValue = Object.hasOwnProperty.call(
+ DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS,
+ key
+ ) ? DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS[key]?.toString() : "";
+ if (defaultValue !== inputs[key]?.toString()) {
+ core.warning(
+ `Input "${(0, import_lodash.snakeCase)(
+ key
+ )}" is not supported when using GitHub's REST API to get changed files`
+ );
+ }
+ }
+};
+
+// src/changedFilesOutput.ts
+var getArrayFromPaths = (paths, inputs) => {
+ return Array.isArray(paths) ? paths : paths.split(inputs.separator);
+};
+var setOutputsAndGetModifiedAndChangedFilesStatus = async ({
+ allDiffFiles,
+ allFilteredDiffFiles,
+ inputs,
+ filePatterns = [],
+ outputPrefix = "",
+ workingDirectory
+}) => {
+ const addedFiles = await getChangeTypeFiles({
+ inputs,
+ changedFiles: allFilteredDiffFiles,
+ changeTypes: ["A" /* Added */]
+ });
+ core2.debug(`Added files: ${JSON.stringify(addedFiles)}`);
+ await setOutput2({
+ key: getOutputKey("added_files", outputPrefix),
+ value: addedFiles.paths,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json,
+ shouldEscape: inputs.escapeJson,
+ safeOutput: inputs.safeOutput
+ });
+ await setOutput2({
+ key: getOutputKey("added_files_count", outputPrefix),
+ value: addedFiles.count,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ });
+ const copiedFiles = await getChangeTypeFiles({
+ inputs,
+ changedFiles: allFilteredDiffFiles,
+ changeTypes: ["C" /* Copied */]
+ });
+ core2.debug(`Copied files: ${JSON.stringify(copiedFiles)}`);
+ await setOutput2({
+ key: getOutputKey("copied_files", outputPrefix),
+ value: copiedFiles.paths,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json,
+ shouldEscape: inputs.escapeJson,
+ safeOutput: inputs.safeOutput
+ });
+ await setOutput2({
+ key: getOutputKey("copied_files_count", outputPrefix),
+ value: copiedFiles.count,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ });
+ const modifiedFiles = await getChangeTypeFiles({
+ inputs,
+ changedFiles: allFilteredDiffFiles,
+ changeTypes: ["M" /* Modified */]
+ });
+ core2.debug(`Modified files: ${JSON.stringify(modifiedFiles)}`);
+ await setOutput2({
+ key: getOutputKey("modified_files", outputPrefix),
+ value: modifiedFiles.paths,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json,
+ shouldEscape: inputs.escapeJson,
+ safeOutput: inputs.safeOutput
+ });
+ await setOutput2({
+ key: getOutputKey("modified_files_count", outputPrefix),
+ value: modifiedFiles.count,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ });
+ const renamedFiles = await getChangeTypeFiles({
+ inputs,
+ changedFiles: allFilteredDiffFiles,
+ changeTypes: ["R" /* Renamed */]
+ });
+ core2.debug(`Renamed files: ${JSON.stringify(renamedFiles)}`);
+ await setOutput2({
+ key: getOutputKey("renamed_files", outputPrefix),
+ value: renamedFiles.paths,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json,
+ shouldEscape: inputs.escapeJson,
+ safeOutput: inputs.safeOutput
+ });
+ await setOutput2({
+ key: getOutputKey("renamed_files_count", outputPrefix),
+ value: renamedFiles.count,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ });
+ const typeChangedFiles = await getChangeTypeFiles({
+ inputs,
+ changedFiles: allFilteredDiffFiles,
+ changeTypes: ["T" /* TypeChanged */]
+ });
+ core2.debug(`Type changed files: ${JSON.stringify(typeChangedFiles)}`);
+ await setOutput2({
+ key: getOutputKey("type_changed_files", outputPrefix),
+ value: typeChangedFiles.paths,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json,
+ shouldEscape: inputs.escapeJson,
+ safeOutput: inputs.safeOutput
+ });
+ await setOutput2({
+ key: getOutputKey("type_changed_files_count", outputPrefix),
+ value: typeChangedFiles.count,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ });
+ const unmergedFiles = await getChangeTypeFiles({
+ inputs,
+ changedFiles: allFilteredDiffFiles,
+ changeTypes: ["U" /* Unmerged */]
+ });
+ core2.debug(`Unmerged files: ${JSON.stringify(unmergedFiles)}`);
+ await setOutput2({
+ key: getOutputKey("unmerged_files", outputPrefix),
+ value: unmergedFiles.paths,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json,
+ shouldEscape: inputs.escapeJson,
+ safeOutput: inputs.safeOutput
+ });
+ await setOutput2({
+ key: getOutputKey("unmerged_files_count", outputPrefix),
+ value: unmergedFiles.count,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ });
+ const unknownFiles = await getChangeTypeFiles({
+ inputs,
+ changedFiles: allFilteredDiffFiles,
+ changeTypes: ["X" /* Unknown */]
+ });
+ core2.debug(`Unknown files: ${JSON.stringify(unknownFiles)}`);
+ await setOutput2({
+ key: getOutputKey("unknown_files", outputPrefix),
+ value: unknownFiles.paths,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json,
+ shouldEscape: inputs.escapeJson,
+ safeOutput: inputs.safeOutput
+ });
+ await setOutput2({
+ key: getOutputKey("unknown_files_count", outputPrefix),
+ value: unknownFiles.count,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ });
+ const allChangedAndModifiedFiles = await getAllChangeTypeFiles({
+ inputs,
+ changedFiles: allFilteredDiffFiles
+ });
+ core2.debug(
+ `All changed and modified files: ${JSON.stringify(
+ allChangedAndModifiedFiles
+ )}`
+ );
+ await setOutput2({
+ key: getOutputKey("all_changed_and_modified_files", outputPrefix),
+ value: allChangedAndModifiedFiles.paths,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json,
+ shouldEscape: inputs.escapeJson,
+ safeOutput: inputs.safeOutput
+ });
+ await setOutput2({
+ key: getOutputKey("all_changed_and_modified_files_count", outputPrefix),
+ value: allChangedAndModifiedFiles.count,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ });
+ const allChangedFiles = await getChangeTypeFiles({
+ inputs,
+ changedFiles: allFilteredDiffFiles,
+ changeTypes: [
+ "A" /* Added */,
+ "C" /* Copied */,
+ "M" /* Modified */,
+ "R" /* Renamed */
+ ]
+ });
+ core2.debug(`All changed files: ${JSON.stringify(allChangedFiles)}`);
+ await setOutput2({
+ key: getOutputKey("all_changed_files", outputPrefix),
+ value: allChangedFiles.paths,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json,
+ shouldEscape: inputs.escapeJson,
+ safeOutput: inputs.safeOutput
+ });
+ await setOutput2({
+ key: getOutputKey("all_changed_files_count", outputPrefix),
+ value: allChangedFiles.count,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ });
+ await setOutput2({
+ key: getOutputKey("any_changed", outputPrefix),
+ value: allChangedFiles.paths.length > 0,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json
+ });
+ const allOtherChangedFiles = await getChangeTypeFiles({
+ inputs,
+ changedFiles: allDiffFiles,
+ changeTypes: [
+ "A" /* Added */,
+ "C" /* Copied */,
+ "M" /* Modified */,
+ "R" /* Renamed */
+ ]
+ });
+ core2.debug(`All other changed files: ${JSON.stringify(allOtherChangedFiles)}`);
+ const allOtherChangedFilesPaths = getArrayFromPaths(
+ allOtherChangedFiles.paths,
+ inputs
+ );
+ const allChangedFilesPaths = getArrayFromPaths(
+ allChangedFiles.paths,
+ inputs
+ );
+ const otherChangedFiles = allOtherChangedFilesPaths.filter(
+ (filePath) => !allChangedFilesPaths.includes(filePath)
+ );
+ const onlyChanged = otherChangedFiles.length === 0 && allChangedFiles.paths.length > 0 && filePatterns.length > 0;
+ await setOutput2({
+ key: getOutputKey("only_changed", outputPrefix),
+ value: onlyChanged,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json
+ });
+ await setArrayOutput({
+ key: "other_changed_files",
+ inputs,
+ value: otherChangedFiles,
+ outputPrefix
+ });
+ await setOutput2({
+ key: getOutputKey("other_changed_files_count", outputPrefix),
+ value: otherChangedFiles.length.toString(),
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ });
+ const allModifiedFiles = await getChangeTypeFiles({
+ inputs,
+ changedFiles: allFilteredDiffFiles,
+ changeTypes: [
+ "A" /* Added */,
+ "C" /* Copied */,
+ "M" /* Modified */,
+ "R" /* Renamed */,
+ "D" /* Deleted */
+ ]
+ });
+ core2.debug(`All modified files: ${JSON.stringify(allModifiedFiles)}`);
+ await setOutput2({
+ key: getOutputKey("all_modified_files", outputPrefix),
+ value: allModifiedFiles.paths,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json,
+ shouldEscape: inputs.escapeJson,
+ safeOutput: inputs.safeOutput
+ });
+ await setOutput2({
+ key: getOutputKey("all_modified_files_count", outputPrefix),
+ value: allModifiedFiles.count,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ });
+ await setOutput2({
+ key: getOutputKey("any_modified", outputPrefix),
+ value: allModifiedFiles.paths.length > 0,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json
+ });
+ const allOtherModifiedFiles = await getChangeTypeFiles({
+ inputs,
+ changedFiles: allDiffFiles,
+ changeTypes: [
+ "A" /* Added */,
+ "C" /* Copied */,
+ "M" /* Modified */,
+ "R" /* Renamed */,
+ "D" /* Deleted */
+ ]
+ });
+ const allOtherModifiedFilesPaths = getArrayFromPaths(
+ allOtherModifiedFiles.paths,
+ inputs
+ );
+ const allModifiedFilesPaths = getArrayFromPaths(
+ allModifiedFiles.paths,
+ inputs
+ );
+ const otherModifiedFiles = allOtherModifiedFilesPaths.filter(
+ (filePath) => !allModifiedFilesPaths.includes(filePath)
+ );
+ const onlyModified = otherModifiedFiles.length === 0 && allModifiedFiles.paths.length > 0 && filePatterns.length > 0;
+ await setOutput2({
+ key: getOutputKey("only_modified", outputPrefix),
+ value: onlyModified,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json
+ });
+ await setArrayOutput({
+ key: "other_modified_files",
+ inputs,
+ value: otherModifiedFiles,
+ outputPrefix
+ });
+ await setOutput2({
+ key: getOutputKey("other_modified_files_count", outputPrefix),
+ value: otherModifiedFiles.length.toString(),
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ });
+ const deletedFiles = await getChangeTypeFiles({
+ inputs,
+ changedFiles: allFilteredDiffFiles,
+ changeTypes: ["D" /* Deleted */]
+ });
+ core2.debug(`Deleted files: ${JSON.stringify(deletedFiles)}`);
+ if (inputs.dirNamesDeletedFilesIncludeOnlyDeletedDirs && inputs.dirNames && workingDirectory) {
+ const newDeletedFilesPaths = [];
+ for (const deletedPath of getArrayFromPaths(deletedFiles.paths, inputs)) {
+ const dirPath = import_path.default.join(workingDirectory, deletedPath);
+ core2.debug(`Checking if directory exists: ${dirPath}`);
+ if (!await exists(dirPath)) {
+ core2.debug(`Directory not found: ${dirPath}`);
+ newDeletedFilesPaths.push(deletedPath);
+ }
+ }
+ deletedFiles.paths = inputs.json ? newDeletedFilesPaths : newDeletedFilesPaths.join(inputs.separator);
+ deletedFiles.count = newDeletedFilesPaths.length.toString();
+ core2.debug(`New deleted files: ${JSON.stringify(deletedFiles)}`);
+ }
+ await setOutput2({
+ key: getOutputKey("deleted_files", outputPrefix),
+ value: deletedFiles.paths,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json,
+ shouldEscape: inputs.escapeJson,
+ safeOutput: inputs.safeOutput
+ });
+ await setOutput2({
+ key: getOutputKey("deleted_files_count", outputPrefix),
+ value: deletedFiles.count,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ });
+ await setOutput2({
+ key: getOutputKey("any_deleted", outputPrefix),
+ value: deletedFiles.paths.length > 0,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json
+ });
+ const allOtherDeletedFiles = await getChangeTypeFiles({
+ inputs,
+ changedFiles: allDiffFiles,
+ changeTypes: ["D" /* Deleted */]
+ });
+ const allOtherDeletedFilesPaths = getArrayFromPaths(
+ allOtherDeletedFiles.paths,
+ inputs
+ );
+ const deletedFilesPaths = getArrayFromPaths(
+ deletedFiles.paths,
+ inputs
+ );
+ const otherDeletedFiles = allOtherDeletedFilesPaths.filter(
+ (filePath) => !deletedFilesPaths.includes(filePath)
+ );
+ const onlyDeleted = otherDeletedFiles.length === 0 && deletedFiles.paths.length > 0 && filePatterns.length > 0;
+ await setOutput2({
+ key: getOutputKey("only_deleted", outputPrefix),
+ value: onlyDeleted,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json
+ });
+ await setArrayOutput({
+ key: "other_deleted_files",
+ inputs,
+ value: otherDeletedFiles,
+ outputPrefix
+ });
+ await setOutput2({
+ key: getOutputKey("other_deleted_files_count", outputPrefix),
+ value: otherDeletedFiles.length.toString(),
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ });
+ return {
+ anyModified: allModifiedFiles.paths.length > 0,
+ anyChanged: allChangedFiles.paths.length > 0
+ };
+};
+
+// src/changedFiles.ts
+var processChangedFiles = async ({
+ filePatterns,
+ allDiffFiles,
+ inputs,
+ yamlFilePatterns,
+ workingDirectory
+}) => {
+ if (filePatterns.length > 0) {
+ core3.startGroup("changed-files-patterns");
+ const allFilteredDiffFiles = await getFilteredChangedFiles({
+ allDiffFiles,
+ filePatterns
+ });
+ core3.debug(
+ `All filtered diff files: ${JSON.stringify(allFilteredDiffFiles)}`
+ );
+ await setOutputsAndGetModifiedAndChangedFilesStatus({
+ allDiffFiles,
+ allFilteredDiffFiles,
+ inputs,
+ filePatterns,
+ workingDirectory
+ });
+ core3.info("All Done!");
+ core3.endGroup();
+ }
+ if (Object.keys(yamlFilePatterns).length > 0) {
+ const modifiedKeys = [];
+ const changedKeys = [];
+ for (const key of Object.keys(yamlFilePatterns)) {
+ core3.startGroup(`changed-files-yaml-${key}`);
+ const allFilteredDiffFiles = await getFilteredChangedFiles({
+ allDiffFiles,
+ filePatterns: yamlFilePatterns[key]
+ });
+ core3.debug(
+ `All filtered diff files for ${key}: ${JSON.stringify(
+ allFilteredDiffFiles
+ )}`
+ );
+ const { anyChanged, anyModified } = await setOutputsAndGetModifiedAndChangedFilesStatus({
+ allDiffFiles,
+ allFilteredDiffFiles,
+ inputs,
+ filePatterns: yamlFilePatterns[key],
+ outputPrefix: key,
+ workingDirectory
+ });
+ if (anyModified) {
+ modifiedKeys.push(key);
+ }
+ if (anyChanged) {
+ changedKeys.push(key);
+ }
+ core3.info("All Done!");
+ core3.endGroup();
+ }
+ if (modifiedKeys.length > 0) {
+ await setArrayOutput({
+ key: "modified_keys",
+ inputs,
+ value: modifiedKeys
+ });
+ }
+ if (changedKeys.length > 0) {
+ await setArrayOutput({
+ key: "changed_keys",
+ inputs,
+ value: changedKeys
+ });
+ }
+ }
+ if (filePatterns.length === 0 && Object.keys(yamlFilePatterns).length === 0) {
+ core3.startGroup("changed-files-all");
+ await setOutputsAndGetModifiedAndChangedFilesStatus({
+ allDiffFiles,
+ allFilteredDiffFiles: allDiffFiles,
+ inputs,
+ workingDirectory
+ });
+ core3.info("All Done!");
+ core3.endGroup();
+ }
+};
+var getRenamedFiles = async ({
+ inputs,
+ workingDirectory,
+ diffSubmodule,
+ diffResult,
+ submodulePaths
+}) => {
+ const renamedFiles = await gitRenamedFiles({
+ cwd: workingDirectory,
+ sha1: diffResult.previousSha,
+ sha2: diffResult.currentSha,
+ diff: diffResult.diff,
+ oldNewSeparator: inputs.oldNewSeparator
+ });
+ if (diffSubmodule) {
+ for (const submodulePath of submodulePaths) {
+ const submoduleShaResult = await gitSubmoduleDiffSHA({
+ cwd: workingDirectory,
+ parentSha1: diffResult.previousSha,
+ parentSha2: diffResult.currentSha,
+ submodulePath,
+ diff: diffResult.diff
+ });
+ const submoduleWorkingDirectory = path3.join(
+ workingDirectory,
+ submodulePath
+ );
+ if (submoduleShaResult.currentSha && submoduleShaResult.previousSha) {
+ let diff = "...";
+ if (!await canDiffCommits({
+ cwd: submoduleWorkingDirectory,
+ sha1: submoduleShaResult.previousSha,
+ sha2: submoduleShaResult.currentSha,
+ diff
+ })) {
+ let message = `Unable to use three dot diff for: ${submodulePath} submodule. Falling back to two dot diff. You can set 'fetch_additional_submodule_history: true' to fetch additional submodule history in order to use three dot diff`;
+ if (inputs.fetchAdditionalSubmoduleHistory) {
+ message = `To fetch additional submodule history for: ${submodulePath} you can increase history depth using 'fetch_depth' input`;
+ }
+ core3.info(message);
+ diff = "..";
+ }
+ const submoduleRenamedFiles = await gitRenamedFiles({
+ cwd: submoduleWorkingDirectory,
+ sha1: submoduleShaResult.previousSha,
+ sha2: submoduleShaResult.currentSha,
+ diff,
+ oldNewSeparator: inputs.oldNewSeparator,
+ isSubmodule: true,
+ parentDir: submodulePath
+ });
+ renamedFiles.push(...submoduleRenamedFiles);
+ }
+ }
+ }
+ if (inputs.json) {
+ return {
+ paths: jsonOutput({ value: renamedFiles, shouldEscape: inputs.escapeJson }),
+ count: renamedFiles.length.toString()
+ };
+ }
+ return {
+ paths: renamedFiles.join(inputs.oldNewFilesSeparator),
+ count: renamedFiles.length.toString()
+ };
+};
+var getAllDiffFiles = async ({
+ workingDirectory,
+ diffSubmodule,
+ diffResult,
+ submodulePaths,
+ outputRenamedFilesAsDeletedAndAdded,
+ fetchAdditionalSubmoduleHistory,
+ failOnInitialDiffError,
+ failOnSubmoduleDiffError
+}) => {
+ const files = await getAllChangedFiles({
+ cwd: workingDirectory,
+ sha1: diffResult.previousSha,
+ sha2: diffResult.currentSha,
+ diff: diffResult.diff,
+ outputRenamedFilesAsDeletedAndAdded,
+ failOnInitialDiffError
+ });
+ if (diffSubmodule) {
+ for (const submodulePath of submodulePaths) {
+ const submoduleShaResult = await gitSubmoduleDiffSHA({
+ cwd: workingDirectory,
+ parentSha1: diffResult.previousSha,
+ parentSha2: diffResult.currentSha,
+ submodulePath,
+ diff: diffResult.diff
+ });
+ const submoduleWorkingDirectory = path3.join(
+ workingDirectory,
+ submodulePath
+ );
+ if (submoduleShaResult.currentSha && submoduleShaResult.previousSha) {
+ let diff = "...";
+ if (!await canDiffCommits({
+ cwd: submoduleWorkingDirectory,
+ sha1: submoduleShaResult.previousSha,
+ sha2: submoduleShaResult.currentSha,
+ diff
+ })) {
+ let message = `Set 'fetch_additional_submodule_history: true' to fetch additional submodule history for: ${submodulePath}`;
+ if (fetchAdditionalSubmoduleHistory) {
+ message = `To fetch additional submodule history for: ${submodulePath} you can increase history depth using 'fetch_depth' input`;
+ }
+ core3.warning(message);
+ diff = "..";
+ }
+ const submoduleFiles = await getAllChangedFiles({
+ cwd: submoduleWorkingDirectory,
+ sha1: submoduleShaResult.previousSha,
+ sha2: submoduleShaResult.currentSha,
+ diff,
+ isSubmodule: true,
+ parentDir: submodulePath,
+ outputRenamedFilesAsDeletedAndAdded,
+ failOnSubmoduleDiffError
+ });
+ for (const changeType of Object.keys(
+ submoduleFiles
+ )) {
+ if (!files[changeType]) {
+ files[changeType] = [];
+ }
+ files[changeType].push(...submoduleFiles[changeType]);
+ }
+ }
+ }
+ }
+ return files;
+};
+function* getFilePaths({
+ inputs,
+ filePaths,
+ dirNamesIncludeFilePatterns
+}) {
+ for (const filePath of filePaths) {
+ if (inputs.dirNames) {
+ if (dirNamesIncludeFilePatterns.length > 0) {
+ const isWin = isWindows();
+ const matchOptions = { dot: true, windows: isWin, noext: true };
+ if (import_micromatch2.default.isMatch(filePath, dirNamesIncludeFilePatterns, matchOptions)) {
+ yield filePath;
+ }
+ }
+ yield getDirnameMaxDepth({
+ relativePath: filePath,
+ dirNamesMaxDepth: inputs.dirNamesMaxDepth,
+ excludeCurrentDir: inputs.dirNamesExcludeCurrentDir
+ });
+ } else {
+ yield filePath;
+ }
+ }
+}
+function* getChangeTypeFilesGenerator({
+ inputs,
+ changedFiles,
+ changeTypes
+}) {
+ const dirNamesIncludeFilePatterns = getDirNamesIncludeFilesPattern({ inputs });
+ core3.debug(
+ `Dir names include file patterns: ${JSON.stringify(
+ dirNamesIncludeFilePatterns
+ )}`
+ );
+ for (const changeType of changeTypes) {
+ const filePaths = changedFiles[changeType] || [];
+ for (const filePath of getFilePaths({
+ inputs,
+ filePaths,
+ dirNamesIncludeFilePatterns
+ })) {
+ if (isWindows() && inputs.usePosixPathSeparator) {
+ yield (0, import_utils_convert_path.default)(filePath, "mixed");
+ } else {
+ yield filePath;
+ }
+ }
+ }
+}
+var getChangeTypeFiles = async ({
+ inputs,
+ changedFiles,
+ changeTypes
+}) => {
+ const files = [
+ ...new Set(getChangeTypeFilesGenerator({ inputs, changedFiles, changeTypes }))
+ ].filter(Boolean);
+ const paths = inputs.json ? files : files.join(inputs.separator);
+ return {
+ paths,
+ count: files.length.toString()
+ };
+};
+function* getAllChangeTypeFilesGenerator({
+ inputs,
+ changedFiles
+}) {
+ const dirNamesIncludeFilePatterns = getDirNamesIncludeFilesPattern({ inputs });
+ core3.debug(
+ `Dir names include file patterns: ${JSON.stringify(
+ dirNamesIncludeFilePatterns
+ )}`
+ );
+ const filePaths = (0, import_flatten.default)(Object.values(changedFiles));
+ for (const filePath of getFilePaths({
+ inputs,
+ filePaths,
+ dirNamesIncludeFilePatterns
+ })) {
+ if (isWindows() && inputs.usePosixPathSeparator) {
+ yield (0, import_utils_convert_path.default)(filePath, "mixed");
+ } else {
+ yield filePath;
+ }
+ }
+}
+var getAllChangeTypeFiles = async ({
+ inputs,
+ changedFiles
+}) => {
+ const files = [
+ ...new Set(getAllChangeTypeFilesGenerator({ inputs, changedFiles }))
+ ].filter(Boolean);
+ const paths = inputs.json ? files : files.join(inputs.separator);
+ return {
+ paths,
+ count: files.length.toString()
+ };
+};
+var getChangedFilesFromGithubAPI = async ({
+ inputs
+}) => {
+ const octokit = github2.getOctokit(inputs.token, {
+ baseUrl: inputs.apiUrl
+ });
+ const changedFiles = {
+ ["A" /* Added */]: [],
+ ["C" /* Copied */]: [],
+ ["D" /* Deleted */]: [],
+ ["M" /* Modified */]: [],
+ ["R" /* Renamed */]: [],
+ ["T" /* TypeChanged */]: [],
+ ["U" /* Unmerged */]: [],
+ ["X" /* Unknown */]: []
+ };
+ core3.info("Getting changed files from GitHub API...");
+ const options = octokit.rest.pulls.listFiles.endpoint.merge({
+ owner: github2.context.repo.owner,
+ repo: github2.context.repo.repo,
+ pull_number: github2.context.payload.pull_request?.number,
+ per_page: 100
+ });
+ const paginatedResponse = await octokit.paginate(options);
+ core3.info(`Found ${paginatedResponse.length} changed files from GitHub API`);
+ const statusMap = {
+ added: "A" /* Added */,
+ removed: "D" /* Deleted */,
+ modified: "M" /* Modified */,
+ renamed: "R" /* Renamed */,
+ copied: "C" /* Copied */,
+ changed: "T" /* TypeChanged */,
+ unchanged: "U" /* Unmerged */
+ };
+ for await (const item of paginatedResponse) {
+ const changeType = statusMap[item.status] || "X" /* Unknown */;
+ if (changeType === "R" /* Renamed */) {
+ if (inputs.outputRenamedFilesAsDeletedAndAdded) {
+ changedFiles["D" /* Deleted */].push(item.previous_filename || "");
+ changedFiles["A" /* Added */].push(item.filename);
+ } else {
+ changedFiles["R" /* Renamed */].push(item.filename);
+ }
+ } else {
+ changedFiles[changeType].push(item.filename);
+ }
+ }
+ return changedFiles;
+};
+
+// src/commitSha.ts
+var core4 = __toESM(require_core());
+var github3 = __toESM(require_github());
+var getCurrentSHA = async ({
+ inputs,
+ workingDirectory
+}) => {
+ let currentSha = await cleanShaInput({
+ sha: inputs.sha,
+ cwd: workingDirectory,
+ token: inputs.token
+ });
+ core4.debug("Getting current SHA...");
+ if (inputs.until) {
+ core4.debug(`Getting base SHA for '${inputs.until}'...`);
+ try {
+ currentSha = await gitLog({
+ cwd: workingDirectory,
+ args: [
+ "--format=%H",
+ "-n",
+ "1",
+ "--date",
+ "local",
+ "--until",
+ inputs.until
+ ]
+ });
+ } catch (error3) {
+ core4.error(
+ `Invalid until date: ${inputs.until}. ${error3.message}`
+ );
+ throw error3;
+ }
+ } else {
+ if (!currentSha) {
+ if (github3.context.payload.pull_request?.head?.sha && await verifyCommitSha({
+ sha: github3.context.payload.pull_request?.head?.sha,
+ cwd: workingDirectory,
+ showAsErrorMessage: false
+ }) === 0) {
+ currentSha = github3.context.payload.pull_request?.head?.sha;
+ } else if (github3.context.eventName === "merge_group") {
+ currentSha = github3.context.payload.merge_group?.head_sha;
+ } else {
+ currentSha = await getHeadSha({ cwd: workingDirectory });
+ }
+ }
+ }
+ await verifyCommitSha({ sha: currentSha, cwd: workingDirectory });
+ core4.debug(`Current SHA: ${currentSha}`);
+ return currentSha;
+};
+var getSHAForNonPullRequestEvent = async ({
+ inputs,
+ env,
+ workingDirectory,
+ isShallow,
+ diffSubmodule,
+ gitFetchExtraArgs,
+ isTag,
+ remoteName
+}) => {
+ let targetBranch = env.GITHUB_REF_NAME;
+ let currentBranch = targetBranch;
+ let initialCommit = false;
+ if (!inputs.skipInitialFetch) {
+ if (isShallow) {
+ core4.info("Repository is shallow, fetching more history...");
+ if (isTag) {
+ let sourceBranch = "";
+ if (github3.context.payload.base_ref) {
+ sourceBranch = github3.context.payload.base_ref.replace(
+ "refs/heads/",
+ ""
+ );
+ } else if (github3.context.payload.release?.target_commitish) {
+ sourceBranch = github3.context.payload.release?.target_commitish;
+ }
+ await gitFetch({
+ cwd: workingDirectory,
+ args: [
+ ...gitFetchExtraArgs,
+ "-u",
+ "--progress",
+ `--deepen=${inputs.fetchDepth}`,
+ remoteName,
+ `+refs/heads/${sourceBranch}:refs/remotes/${remoteName}/${sourceBranch}`
+ ]
+ });
+ } else {
+ await gitFetch({
+ cwd: workingDirectory,
+ args: [
+ ...gitFetchExtraArgs,
+ "-u",
+ "--progress",
+ `--deepen=${inputs.fetchDepth}`,
+ remoteName,
+ `+refs/heads/${targetBranch}:refs/remotes/${remoteName}/${targetBranch}`
+ ]
+ });
+ }
+ if (diffSubmodule) {
+ await gitFetchSubmodules({
+ cwd: workingDirectory,
+ args: [
+ ...gitFetchExtraArgs,
+ "-u",
+ "--progress",
+ `--deepen=${inputs.fetchDepth}`
+ ]
+ });
+ }
+ } else {
+ if (diffSubmodule && inputs.fetchAdditionalSubmoduleHistory) {
+ await gitFetchSubmodules({
+ cwd: workingDirectory,
+ args: [
+ ...gitFetchExtraArgs,
+ "-u",
+ "--progress",
+ `--deepen=${inputs.fetchDepth}`
+ ]
+ });
+ }
+ }
+ }
+ const currentSha = await getCurrentSHA({ inputs, workingDirectory });
+ let previousSha = await cleanShaInput({
+ sha: inputs.baseSha,
+ cwd: workingDirectory,
+ token: inputs.token
+ });
+ const diff = "..";
+ const currentBranchName = await getCurrentBranchName({ cwd: workingDirectory });
+ if (currentBranchName && currentBranchName !== "HEAD" && (currentBranchName !== targetBranch || currentBranchName !== currentBranch)) {
+ targetBranch = currentBranchName;
+ currentBranch = currentBranchName;
+ }
+ if (inputs.baseSha && inputs.sha && currentBranch && targetBranch) {
+ if (previousSha === currentSha) {
+ core4.error(
+ `Similar commit hashes detected: previous sha: ${previousSha} is equivalent to the current sha: ${currentSha}.`
+ );
+ core4.error(
+ `Please verify that both commits are valid, and increase the fetch_depth to a number higher than ${inputs.fetchDepth}.`
+ );
+ throw new Error("Similar commit hashes detected.");
+ }
+ core4.debug(`Previous SHA: ${previousSha}`);
+ return {
+ previousSha,
+ currentSha,
+ currentBranch,
+ targetBranch,
+ diff
+ };
+ }
+ if (!previousSha || previousSha === currentSha) {
+ core4.debug("Getting previous SHA...");
+ if (inputs.since) {
+ core4.debug(`Getting base SHA for '${inputs.since}'...`);
+ try {
+ const allCommitsFrom = await gitLog({
+ cwd: workingDirectory,
+ args: ["--format=%H", "--date", "local", "--since", inputs.since]
+ });
+ if (allCommitsFrom) {
+ const allCommitsFromArray = allCommitsFrom.split("\n");
+ previousSha = allCommitsFromArray[allCommitsFromArray.length - 1];
+ }
+ } catch (error3) {
+ core4.error(
+ `Invalid since date: ${inputs.since}. ${error3.message}`
+ );
+ throw error3;
+ }
+ } else if (isTag) {
+ core4.debug("Getting previous SHA for tag...");
+ const { sha, tag } = await getPreviousGitTag({
+ cwd: workingDirectory,
+ tagsPattern: inputs.tagsPattern,
+ tagsIgnorePattern: inputs.tagsIgnorePattern,
+ currentBranch
+ });
+ previousSha = sha;
+ targetBranch = tag;
+ } else {
+ if (github3.context.eventName === "merge_group") {
+ core4.debug("Getting previous SHA for merge group...");
+ previousSha = github3.context.payload.merge_group?.base_sha;
+ } else {
+ core4.debug("Getting previous SHA for last remote commit...");
+ if (github3.context.payload.forced === "false" || !github3.context.payload.forced) {
+ previousSha = github3.context.payload.before;
+ }
+ }
+ if (!previousSha || previousSha === "0000000000000000000000000000000000000000") {
+ previousSha = await getParentSha({
+ cwd: workingDirectory
+ });
+ } else if (await verifyCommitSha({
+ sha: previousSha,
+ cwd: workingDirectory,
+ showAsErrorMessage: false
+ }) !== 0) {
+ core4.warning(
+ `Previous commit ${previousSha} is not valid. Using parent commit.`
+ );
+ previousSha = await getParentSha({
+ cwd: workingDirectory
+ });
+ }
+ if (!previousSha || previousSha === currentSha) {
+ previousSha = await getParentSha({
+ cwd: workingDirectory
+ });
+ if (!previousSha) {
+ core4.warning("Initial commit detected no previous commit found.");
+ initialCommit = true;
+ previousSha = currentSha;
+ }
+ }
+ }
+ }
+ await verifyCommitSha({ sha: previousSha, cwd: workingDirectory });
+ core4.debug(`Previous SHA: ${previousSha}`);
+ core4.debug(`Target branch: ${targetBranch}`);
+ core4.debug(`Current branch: ${currentBranch}`);
+ if (!initialCommit && previousSha === currentSha) {
+ core4.error(
+ `Similar commit hashes detected: previous sha: ${previousSha} is equivalent to the current sha: ${currentSha}.`
+ );
+ core4.error(
+ `Please verify that both commits are valid, and increase the fetch_depth to a number higher than ${inputs.fetchDepth}.`
+ );
+ throw new Error("Similar commit hashes detected.");
+ }
+ return {
+ previousSha,
+ currentSha,
+ currentBranch,
+ targetBranch,
+ diff,
+ initialCommit
+ };
+};
+var getSHAForPullRequestEvent = async ({
+ inputs,
+ workingDirectory,
+ isShallow,
+ diffSubmodule,
+ gitFetchExtraArgs,
+ remoteName
+}) => {
+ let targetBranch = github3.context.payload.pull_request?.base?.ref;
+ const currentBranch = github3.context.payload.pull_request?.head?.ref;
+ if (inputs.sinceLastRemoteCommit) {
+ targetBranch = currentBranch;
+ }
+ if (!inputs.skipInitialFetch) {
+ core4.info("Repository is shallow, fetching more history...");
+ if (isShallow) {
+ let prFetchExitCode = await gitFetch({
+ cwd: workingDirectory,
+ args: [
+ ...gitFetchExtraArgs,
+ "-u",
+ "--progress",
+ remoteName,
+ `pull/${github3.context.payload.pull_request?.number}/head:${currentBranch}`
+ ]
+ });
+ if (prFetchExitCode !== 0) {
+ prFetchExitCode = await gitFetch({
+ cwd: workingDirectory,
+ args: [
+ ...gitFetchExtraArgs,
+ "-u",
+ "--progress",
+ `--deepen=${inputs.fetchDepth}`,
+ remoteName,
+ `+refs/heads/${currentBranch}*:refs/remotes/${remoteName}/${currentBranch}*`
+ ]
+ });
+ }
+ if (prFetchExitCode !== 0) {
+ throw new Error(
+ 'Failed to fetch pull request branch. Please ensure "persist-credentials" is set to "true" when checking out the repository. See: https://github.com/actions/checkout#usage'
+ );
+ }
+ core4.debug("Fetching target branch...");
+ await gitFetch({
+ cwd: workingDirectory,
+ args: [
+ ...gitFetchExtraArgs,
+ "-u",
+ "--progress",
+ `--deepen=${inputs.fetchDepth}`,
+ remoteName,
+ `+refs/heads/${github3.context.payload.pull_request?.base?.ref}:refs/remotes/${remoteName}/${github3.context.payload.pull_request?.base?.ref}`
+ ]
+ });
+ if (diffSubmodule) {
+ await gitFetchSubmodules({
+ cwd: workingDirectory,
+ args: [
+ ...gitFetchExtraArgs,
+ "-u",
+ "--progress",
+ `--deepen=${inputs.fetchDepth}`
+ ]
+ });
+ }
+ } else {
+ if (diffSubmodule && inputs.fetchAdditionalSubmoduleHistory) {
+ await gitFetchSubmodules({
+ cwd: workingDirectory,
+ args: [
+ ...gitFetchExtraArgs,
+ "-u",
+ "--progress",
+ `--deepen=${inputs.fetchDepth}`
+ ]
+ });
+ }
+ }
+ core4.info("Completed fetching more history.");
+ }
+ const currentSha = await getCurrentSHA({ inputs, workingDirectory });
+ let previousSha = await cleanShaInput({
+ sha: inputs.baseSha,
+ cwd: workingDirectory,
+ token: inputs.token
+ });
+ let diff = "...";
+ if (inputs.baseSha && inputs.sha && currentBranch && targetBranch) {
+ if (previousSha === currentSha) {
+ core4.error(
+ `Similar commit hashes detected: previous sha: ${previousSha} is equivalent to the current sha: ${currentSha}.`
+ );
+ core4.error(
+ `Please verify that both commits are valid, and increase the fetch_depth to a number higher than ${inputs.fetchDepth}.`
+ );
+ throw new Error("Similar commit hashes detected.");
+ }
+ core4.debug(`Previous SHA: ${previousSha}`);
+ return {
+ previousSha,
+ currentSha,
+ currentBranch,
+ targetBranch,
+ diff
+ };
+ }
+ if (!github3.context.payload.pull_request?.base?.ref) {
+ diff = "..";
+ }
+ if (!previousSha || previousSha === currentSha) {
+ if (inputs.sinceLastRemoteCommit) {
+ previousSha = github3.context.payload.before;
+ if (!previousSha || previousSha && await verifyCommitSha({
+ sha: previousSha,
+ cwd: workingDirectory,
+ showAsErrorMessage: false
+ }) !== 0) {
+ core4.info(
+ `Unable to locate the previous commit in the local history for ${github3.context.eventName} (${github3.context.payload.action}) event. Falling back to the previous commit in the local history.`
+ );
+ previousSha = await getParentSha({
+ cwd: workingDirectory
+ });
+ if (github3.context.payload.action && github3.context.payload.action === "synchronize" && previousSha && (!previousSha || previousSha && await verifyCommitSha({
+ sha: previousSha,
+ cwd: workingDirectory,
+ showAsErrorMessage: false
+ }) !== 0)) {
+ throw new Error(
+ "Unable to locate the previous commit in the local history. Please ensure to checkout pull request HEAD commit instead of the merge commit. See: https://github.com/actions/checkout/blob/main/README.md#checkout-pull-request-head-commit-instead-of-merge-commit"
+ );
+ }
+ if (!previousSha || previousSha && await verifyCommitSha({
+ sha: previousSha,
+ cwd: workingDirectory,
+ showAsErrorMessage: false
+ }) !== 0) {
+ throw new Error(
+ "Unable to locate the previous commit in the local history. Please ensure to checkout pull request HEAD commit instead of the merge commit. See: https://github.com/actions/checkout/blob/main/README.md#checkout-pull-request-head-commit-instead-of-merge-commit"
+ );
+ }
+ }
+ } else {
+ previousSha = github3.context.payload.pull_request?.base?.sha;
+ if (!previousSha) {
+ previousSha = await getRemoteBranchHeadSha({
+ cwd: workingDirectory,
+ remoteName,
+ branch: targetBranch
+ });
+ }
+ if (isShallow) {
+ if (!await canDiffCommits({
+ cwd: workingDirectory,
+ sha1: previousSha,
+ sha2: currentSha,
+ diff
+ })) {
+ core4.info(
+ "Merge base is not in the local history, fetching remote target branch..."
+ );
+ for (let i = 1; i <= (inputs.fetchMissingHistoryMaxRetries || 10); i++) {
+ await gitFetch({
+ cwd: workingDirectory,
+ args: [
+ ...gitFetchExtraArgs,
+ "-u",
+ "--progress",
+ `--deepen=${inputs.fetchDepth}`,
+ remoteName,
+ `+refs/heads/${targetBranch}:refs/remotes/${remoteName}/${targetBranch}`
+ ]
+ });
+ if (await canDiffCommits({
+ cwd: workingDirectory,
+ sha1: previousSha,
+ sha2: currentSha,
+ diff
+ })) {
+ break;
+ }
+ core4.info(
+ "Merge base is not in the local history, fetching remote target branch again..."
+ );
+ core4.info(`Attempt ${i}/10`);
+ }
+ }
+ }
+ }
+ if (!previousSha || previousSha === currentSha) {
+ previousSha = github3.context.payload.pull_request?.base?.sha;
+ }
+ }
+ if (!await canDiffCommits({
+ cwd: workingDirectory,
+ sha1: previousSha,
+ sha2: currentSha,
+ diff
+ })) {
+ diff = "..";
+ }
+ await verifyCommitSha({ sha: previousSha, cwd: workingDirectory });
+ core4.debug(`Previous SHA: ${previousSha}`);
+ if (!await canDiffCommits({
+ cwd: workingDirectory,
+ sha1: previousSha,
+ sha2: currentSha,
+ diff
+ })) {
+ core4.warning(
+ "If this pull request is from a forked repository, please set the checkout action `repository` input to the same repository as the pull request."
+ );
+ core4.warning(
+ "This can be done by setting actions/checkout `repository` to ${{ github.event.pull_request.head.repo.full_name }}"
+ );
+ throw new Error(
+ `Unable to determine a difference between ${previousSha}${diff}${currentSha}`
+ );
+ }
+ if (previousSha === currentSha) {
+ core4.error(
+ `Similar commit hashes detected: previous sha: ${previousSha} is equivalent to the current sha: ${currentSha}.`
+ );
+ if (github3.context.eventName === "pull_request_target") {
+ core4.warning(
+ "If this pull request is from a forked repository, please set the checkout action `repository` input to the same repository as the pull request."
+ );
+ core4.warning(
+ "This can be done by setting actions/checkout `repository` to ${{ github.event.pull_request.head.repo.full_name }}"
+ );
+ } else {
+ core4.error(
+ `Please verify that both commits are valid, and increase the fetch_depth to a number higher than ${inputs.fetchDepth}.`
+ );
+ }
+ throw new Error("Similar commit hashes detected.");
+ }
+ return {
+ previousSha,
+ currentSha,
+ currentBranch,
+ targetBranch,
+ diff
+ };
+};
+
+// src/env.ts
+var getEnv = async () => {
+ return {
+ GITHUB_REF_NAME: process.env.GITHUB_REF_NAME || "",
+ GITHUB_REF: process.env.GITHUB_REF || "",
+ GITHUB_WORKSPACE: process.env.GITHUB_WORKSPACE || ""
+ };
+};
+
+// src/inputs.ts
+var core5 = __toESM(require_core());
+var getInputs = () => {
+ const files = core5.getInput("files", { required: false });
+ const filesSeparator = core5.getInput("files_separator", {
+ required: false,
+ trimWhitespace: false
+ });
+ const filesIgnore = core5.getInput("files_ignore", { required: false });
+ const filesIgnoreSeparator = core5.getInput("files_ignore_separator", {
+ required: false,
+ trimWhitespace: false
+ });
+ const filesFromSourceFile = core5.getInput("files_from_source_file", {
+ required: false
+ });
+ const filesFromSourceFileSeparator = core5.getInput(
+ "files_from_source_file_separator",
+ {
+ required: false,
+ trimWhitespace: false
+ }
+ );
+ const filesYaml = core5.getInput("files_yaml", { required: false });
+ const filesYamlFromSourceFile = core5.getInput("files_yaml_from_source_file", {
+ required: false
+ });
+ const filesYamlFromSourceFileSeparator = core5.getInput(
+ "files_yaml_from_source_file_separator",
+ {
+ required: false,
+ trimWhitespace: false
+ }
+ );
+ const filesIgnoreFromSourceFile = core5.getInput(
+ "files_ignore_from_source_file",
+ { required: false }
+ );
+ const filesIgnoreFromSourceFileSeparator = core5.getInput(
+ "files_ignore_from_source_file_separator",
+ {
+ required: false,
+ trimWhitespace: false
+ }
+ );
+ const filesIgnoreYaml = core5.getInput("files_ignore_yaml", { required: false });
+ const filesIgnoreYamlFromSourceFile = core5.getInput(
+ "files_ignore_yaml_from_source_file",
+ { required: false }
+ );
+ const filesIgnoreYamlFromSourceFileSeparator = core5.getInput(
+ "files_ignore_yaml_from_source_file_separator",
+ {
+ required: false,
+ trimWhitespace: false
+ }
+ );
+ const separator = core5.getInput("separator", {
+ required: true,
+ trimWhitespace: false
+ });
+ const includeAllOldNewRenamedFiles = core5.getBooleanInput(
+ "include_all_old_new_renamed_files",
+ { required: false }
+ );
+ const oldNewSeparator = core5.getInput("old_new_separator", {
+ required: true,
+ trimWhitespace: false
+ });
+ const oldNewFilesSeparator = core5.getInput("old_new_files_separator", {
+ required: true,
+ trimWhitespace: false
+ });
+ const sha = core5.getInput("sha", { required: false });
+ const baseSha = core5.getInput("base_sha", { required: false });
+ const since = core5.getInput("since", { required: false });
+ const until = core5.getInput("until", { required: false });
+ const path5 = core5.getInput("path", { required: false });
+ const quotepath = core5.getBooleanInput("quotepath", { required: false });
+ const diffRelative = core5.getBooleanInput("diff_relative", { required: false });
+ const dirNames = core5.getBooleanInput("dir_names", { required: false });
+ const dirNamesMaxDepth = core5.getInput("dir_names_max_depth", {
+ required: false
+ });
+ const dirNamesExcludeCurrentDir = core5.getBooleanInput(
+ "dir_names_exclude_current_dir",
+ {
+ required: false
+ }
+ );
+ const dirNamesIncludeFiles = core5.getInput("dir_names_include_files", {
+ required: false
+ });
+ const dirNamesIncludeFilesSeparator = core5.getInput(
+ "dir_names_include_files_separator",
+ {
+ required: false,
+ trimWhitespace: false
+ }
+ );
+ let json = core5.getBooleanInput("json", { required: false });
+ let escapeJson = core5.getBooleanInput("escape_json", { required: false });
+ const matrix = core5.getBooleanInput("matrix", { required: false });
+ if (matrix) {
+ json = true;
+ escapeJson = false;
+ }
+ const safeOutput = core5.getBooleanInput("safe_output", { required: false });
+ const fetchDepth = core5.getInput("fetch_depth", { required: false });
+ const sinceLastRemoteCommit = core5.getBooleanInput(
+ "since_last_remote_commit",
+ { required: false }
+ );
+ const writeOutputFiles = core5.getBooleanInput("write_output_files", {
+ required: false
+ });
+ const outputDir = core5.getInput("output_dir", { required: false });
+ const outputRenamedFilesAsDeletedAndAdded = core5.getBooleanInput(
+ "output_renamed_files_as_deleted_and_added",
+ { required: false }
+ );
+ const recoverDeletedFiles2 = core5.getBooleanInput("recover_deleted_files", {
+ required: false
+ });
+ const recoverDeletedFilesToDestination = core5.getInput(
+ "recover_deleted_files_to_destination",
+ { required: false }
+ );
+ const recoverFiles = core5.getInput("recover_files", { required: false });
+ const recoverFilesSeparator = core5.getInput("recover_files_separator", {
+ required: false,
+ trimWhitespace: false
+ });
+ const recoverFilesIgnore = core5.getInput("recover_files_ignore", {
+ required: false
+ });
+ const recoverFilesIgnoreSeparator = core5.getInput(
+ "recover_files_ignore_separator",
+ {
+ required: false,
+ trimWhitespace: false
+ }
+ );
+ const token = core5.getInput("token", { required: false });
+ const apiUrl = core5.getInput("api_url", { required: false });
+ const skipInitialFetch = core5.getBooleanInput("skip_initial_fetch", {
+ required: false
+ });
+ const fetchAdditionalSubmoduleHistory = core5.getBooleanInput(
+ "fetch_additional_submodule_history",
+ {
+ required: false
+ }
+ );
+ const failOnInitialDiffError = core5.getBooleanInput(
+ "fail_on_initial_diff_error",
+ {
+ required: false
+ }
+ );
+ const failOnSubmoduleDiffError = core5.getBooleanInput(
+ "fail_on_submodule_diff_error",
+ {
+ required: false
+ }
+ );
+ const dirNamesDeletedFilesIncludeOnlyDeletedDirs = core5.getBooleanInput(
+ "dir_names_deleted_files_include_only_deleted_dirs",
+ {
+ required: false
+ }
+ );
+ const negationPatternsFirst = core5.getBooleanInput(
+ "negation_patterns_first",
+ {
+ required: false
+ }
+ );
+ const useRestApi = core5.getBooleanInput("use_rest_api", {
+ required: false
+ });
+ const excludeSubmodules = core5.getBooleanInput("exclude_submodules", {
+ required: false
+ });
+ const fetchMissingHistoryMaxRetries = core5.getInput(
+ "fetch_missing_history_max_retries",
+ { required: false }
+ );
+ const usePosixPathSeparator = core5.getBooleanInput(
+ "use_posix_path_separator",
+ {
+ required: false
+ }
+ );
+ const tagsPattern = core5.getInput("tags_pattern", {
+ required: false,
+ trimWhitespace: false
+ });
+ const tagsIgnorePattern = core5.getInput("tags_ignore_pattern", {
+ required: false,
+ trimWhitespace: false
+ });
+ const inputs = {
+ files,
+ filesSeparator,
+ filesFromSourceFile,
+ filesFromSourceFileSeparator,
+ filesYaml,
+ filesYamlFromSourceFile,
+ filesYamlFromSourceFileSeparator,
+ filesIgnore,
+ filesIgnoreSeparator,
+ filesIgnoreFromSourceFile,
+ filesIgnoreFromSourceFileSeparator,
+ filesIgnoreYaml,
+ filesIgnoreYamlFromSourceFile,
+ filesIgnoreYamlFromSourceFileSeparator,
+ failOnInitialDiffError,
+ failOnSubmoduleDiffError,
+ separator,
+ // Not Supported via REST API
+ sha,
+ baseSha,
+ since,
+ until,
+ path: path5,
+ quotepath,
+ diffRelative,
+ sinceLastRemoteCommit,
+ recoverDeletedFiles: recoverDeletedFiles2,
+ recoverDeletedFilesToDestination,
+ recoverFiles,
+ recoverFilesSeparator,
+ recoverFilesIgnore,
+ recoverFilesIgnoreSeparator,
+ includeAllOldNewRenamedFiles,
+ oldNewSeparator,
+ oldNewFilesSeparator,
+ skipInitialFetch,
+ fetchAdditionalSubmoduleHistory,
+ dirNamesDeletedFilesIncludeOnlyDeletedDirs,
+ excludeSubmodules,
+ usePosixPathSeparator,
+ tagsPattern,
+ tagsIgnorePattern,
+ // End Not Supported via REST API
+ dirNames,
+ dirNamesExcludeCurrentDir,
+ dirNamesIncludeFiles,
+ dirNamesIncludeFilesSeparator,
+ json,
+ escapeJson,
+ safeOutput,
+ writeOutputFiles,
+ outputDir,
+ outputRenamedFilesAsDeletedAndAdded,
+ token,
+ apiUrl,
+ negationPatternsFirst,
+ useRestApi
+ };
+ if (fetchDepth) {
+ inputs.fetchDepth = Math.max(parseInt(fetchDepth, 10), 2);
+ }
+ if (dirNamesMaxDepth) {
+ inputs.dirNamesMaxDepth = parseInt(dirNamesMaxDepth, 10);
+ }
+ if (fetchMissingHistoryMaxRetries) {
+ inputs.fetchMissingHistoryMaxRetries = Math.max(
+ parseInt(fetchMissingHistoryMaxRetries, 10),
+ 1
+ );
+ }
+ return inputs;
+};
+
+// src/main.ts
+var getChangedFilesFromLocalGitHistory = async ({
+ inputs,
+ env,
+ workingDirectory,
+ filePatterns,
+ yamlFilePatterns
+}) => {
+ await verifyMinimumGitVersion();
+ let quotepathValue = "on";
+ if (!inputs.quotepath) {
+ quotepathValue = "off";
+ }
+ await updateGitGlobalConfig({
+ name: "core.quotepath",
+ value: quotepathValue
+ });
+ if (inputs.diffRelative) {
+ await updateGitGlobalConfig({
+ name: "diff.relative",
+ value: "true"
+ });
+ }
+ const isShallow = await isRepoShallow({ cwd: workingDirectory });
+ let diffSubmodule = false;
+ let gitFetchExtraArgs = ["--no-tags", "--prune"];
+ if (inputs.excludeSubmodules) {
+ core6.info("Excluding submodules from the diff");
+ } else {
+ diffSubmodule = await submoduleExists({ cwd: workingDirectory });
+ }
+ if (diffSubmodule) {
+ gitFetchExtraArgs.push("--recurse-submodules");
+ }
+ const isTag = env.GITHUB_REF?.startsWith("refs/tags/");
+ const remoteName = "origin";
+ const outputRenamedFilesAsDeletedAndAdded = inputs.outputRenamedFilesAsDeletedAndAdded;
+ let submodulePaths = [];
+ if (diffSubmodule) {
+ submodulePaths = await getSubmodulePath({ cwd: workingDirectory });
+ }
+ if (isTag) {
+ gitFetchExtraArgs = ["--prune", "--no-recurse-submodules"];
+ }
+ let diffResult;
+ if (!github4.context.payload.pull_request?.base?.ref) {
+ core6.info(`Running on a ${github4.context.eventName || "push"} event...`);
+ diffResult = await getSHAForNonPullRequestEvent({
+ inputs,
+ env,
+ workingDirectory,
+ isShallow,
+ diffSubmodule,
+ gitFetchExtraArgs,
+ isTag,
+ remoteName
+ });
+ } else {
+ core6.info(
+ `Running on a ${github4.context.eventName || "pull_request"} (${github4.context.payload.action}) event...`
+ );
+ diffResult = await getSHAForPullRequestEvent({
+ inputs,
+ workingDirectory,
+ isShallow,
+ diffSubmodule,
+ gitFetchExtraArgs,
+ remoteName
+ });
+ }
+ if (diffResult.initialCommit) {
+ core6.info("This is the first commit for this repository; exiting...");
+ core6.endGroup();
+ return;
+ }
+ core6.info(
+ `Retrieving changes between ${diffResult.previousSha} (${diffResult.targetBranch}) \u2192 ${diffResult.currentSha} (${diffResult.currentBranch})`
+ );
+ const allDiffFiles = await getAllDiffFiles({
+ workingDirectory,
+ diffSubmodule,
+ diffResult,
+ submodulePaths,
+ outputRenamedFilesAsDeletedAndAdded,
+ fetchAdditionalSubmoduleHistory: inputs.fetchAdditionalSubmoduleHistory,
+ failOnInitialDiffError: inputs.failOnInitialDiffError,
+ failOnSubmoduleDiffError: inputs.failOnSubmoduleDiffError
+ });
+ core6.debug(`All diff files: ${JSON.stringify(allDiffFiles)}`);
+ core6.info("All Done!");
+ core6.endGroup();
+ if (inputs.recoverDeletedFiles) {
+ let recoverPatterns = getRecoverFilePatterns({ inputs });
+ if (recoverPatterns.length > 0 && filePatterns.length > 0) {
+ core6.info("No recover patterns found; defaulting to file patterns");
+ recoverPatterns = filePatterns;
+ }
+ await recoverDeletedFiles({
+ inputs,
+ workingDirectory,
+ deletedFiles: allDiffFiles["D" /* Deleted */],
+ recoverPatterns,
+ diffResult,
+ diffSubmodule,
+ submodulePaths
+ });
+ }
+ await processChangedFiles({
+ filePatterns,
+ allDiffFiles,
+ inputs,
+ yamlFilePatterns,
+ workingDirectory
+ });
+ if (inputs.includeAllOldNewRenamedFiles) {
+ core6.startGroup("changed-files-all-old-new-renamed-files");
+ const allOldNewRenamedFiles = await getRenamedFiles({
+ inputs,
+ workingDirectory,
+ diffSubmodule,
+ diffResult,
+ submodulePaths
+ });
+ core6.debug(`All old new renamed files: ${allOldNewRenamedFiles}`);
+ await setOutput2({
+ key: "all_old_new_renamed_files",
+ value: allOldNewRenamedFiles.paths,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json,
+ safeOutput: inputs.safeOutput
+ });
+ await setOutput2({
+ key: "all_old_new_renamed_files_count",
+ value: allOldNewRenamedFiles.count,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json
+ });
+ core6.info("All Done!");
+ core6.endGroup();
+ }
+};
+var getChangedFilesFromRESTAPI = async ({
+ inputs,
+ filePatterns,
+ yamlFilePatterns
+}) => {
+ const allDiffFiles = await getChangedFilesFromGithubAPI({
+ inputs
+ });
+ core6.debug(`All diff files: ${JSON.stringify(allDiffFiles)}`);
+ core6.info("All Done!");
+ await processChangedFiles({
+ filePatterns,
+ allDiffFiles,
+ inputs,
+ yamlFilePatterns
+ });
+};
+async function run() {
+ core6.startGroup("changed-files");
+ const env = await getEnv();
+ core6.debug(`Env: ${JSON.stringify(env, null, 2)}`);
+ const inputs = getInputs();
+ core6.debug(`Inputs: ${JSON.stringify(inputs, null, 2)}`);
+ const workingDirectory = import_path2.default.resolve(
+ env.GITHUB_WORKSPACE || process.cwd(),
+ inputs.useRestApi ? "." : inputs.path
+ );
+ core6.debug(`Working directory: ${workingDirectory}`);
+ const hasGitDirectory = await hasLocalGitDirectory({ workingDirectory });
+ core6.debug(`Has git directory: ${hasGitDirectory}`);
+ const filePatterns = await getFilePatterns({
+ inputs,
+ workingDirectory
+ });
+ core6.debug(`File patterns: ${filePatterns}`);
+ const yamlFilePatterns = await getYamlFilePatterns({
+ inputs,
+ workingDirectory
+ });
+ core6.debug(`Yaml file patterns: ${JSON.stringify(yamlFilePatterns)}`);
+ if (inputs.useRestApi && !github4.context.payload.pull_request?.number) {
+ throw new Error(
+ "Only pull_request* events are supported when using GitHub's REST API."
+ );
+ }
+ if (inputs.token && github4.context.payload.pull_request?.number && (!hasGitDirectory || inputs.useRestApi)) {
+ core6.info("Using GitHub's REST API to get changed files");
+ await warnUnsupportedRESTAPIInputs({ inputs });
+ await getChangedFilesFromRESTAPI({
+ inputs,
+ filePatterns,
+ yamlFilePatterns
+ });
+ } else {
+ if (!hasGitDirectory) {
+ throw new Error(
+ `Unable to locate the git repository in the given path: ${workingDirectory}.
+ Please run actions/checkout before this action (Make sure the 'path' input is correct).
+ If you intend to use Github's REST API note that only pull_request* events are supported. Current event is "${github4.context.eventName}".`
+ );
+ }
+ core6.info("Using local .git directory");
+ await getChangedFilesFromLocalGitHistory({
+ inputs,
+ env,
+ workingDirectory,
+ filePatterns,
+ yamlFilePatterns
+ });
+ }
+}
+run().catch((e) => {
+ core6.setFailed(e.message || e);
+ process.exit(1);
+});
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+ run
+});
+/*! Bundled license information:
+
+undici/lib/fetch/body.js:
+ (*! formdata-polyfill. MIT License. Jimmy Wärting *)
+
+undici/lib/websocket/frame.js:
+ (*! ws. MIT License. Einar Otto Stangvik *)
+
+@stdlib/utils-define-property/lib/define_property.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2021 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-define-property/lib/has_define_property_support.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2021 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-define-property/lib/builtin.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/string-base-format-interpolate/lib/is_number.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2022 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/string-base-format-interpolate/lib/zero_pad.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2022 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/string-base-format-interpolate/lib/format_integer.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2022 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/string-base-format-interpolate/lib/is_string.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2022 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/string-base-format-interpolate/lib/format_double.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2022 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/string-base-format-interpolate/lib/space_pad.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2022 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/string-base-format-interpolate/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2022 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/string-base-format-interpolate/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2022 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/string-base-format-tokenize/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2022 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/string-base-format-tokenize/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2022 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/string-format/lib/is_string.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2022 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/string-format/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2022 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/string-format/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2022 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-define-property/lib/polyfill.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-define-property/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-define-nonenumerable-read-only-property/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-define-nonenumerable-read-only-property/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-is-string/lib/primitive.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-has-symbol-support/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-has-symbol-support/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-has-tostringtag-support/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-has-tostringtag-support/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-native-class/lib/tostring.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-native-class/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-has-own-property/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-has-own-property/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/symbol-ctor/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/symbol-ctor/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-native-class/lib/tostringtag.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-native-class/lib/polyfill.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-native-class/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-is-string/lib/valueof.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-is-string/lib/try2valueof.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-is-string/lib/object.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-is-string/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-is-string/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/regexp-extended-length-path/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/regexp-extended-length-path/lib/regexp.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/regexp-extended-length-path/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2021 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/string-base-lowercase/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2022 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/string-base-lowercase/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2022 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-escape-regexp-string/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-escape-regexp-string/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-type-of/lib/fixtures/re.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-is-boolean/lib/primitive.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/boolean-ctor/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2022 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/boolean-ctor/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2022 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-is-boolean/lib/tostring.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-is-boolean/lib/try2serialize.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-is-boolean/lib/object.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-is-boolean/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-is-boolean/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-global/lib/codegen.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-global/lib/self.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-global/lib/window.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-global/lib/global.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-global/lib/global_this.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2022 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-global/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-global/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-type-of/lib/fixtures/nodelist.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-type-of/lib/fixtures/typedarray.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-type-of/lib/check.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/regexp-function-name/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2021 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/regexp-function-name/lib/regexp.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/regexp-function-name/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2021 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-is-array/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-is-array/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-tools-array-function/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-tools-array-function/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-is-object-like/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-is-object-like/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-is-buffer/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-is-buffer/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-constructor-name/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-constructor-name/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-type-of/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-type-of/lib/polyfill.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-type-of/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-is-function/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-is-function/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-is-regexp/lib/exec.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-is-regexp/lib/try2exec.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-is-regexp/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/assert-is-regexp/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/string-base-replace/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2022 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/string-base-replace/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2022 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/string-replace/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/string-replace/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-convert-path/lib/main.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+@stdlib/utils-convert-path/lib/index.js:
+ (**
+ * @license Apache-2.0
+ *
+ * Copyright (c) 2018 The Stdlib Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+is-number/index.js:
+ (*!
+ * is-number
+ *
+ * Copyright (c) 2014-present, Jon Schlinkert.
+ * Released under the MIT License.
+ *)
+
+to-regex-range/index.js:
+ (*!
+ * to-regex-range
+ *
+ * Copyright (c) 2015-present, Jon Schlinkert.
+ * Released under the MIT License.
+ *)
+
+fill-range/index.js:
+ (*!
+ * fill-range
+ *
+ * Copyright (c) 2014-present, Jon Schlinkert.
+ * Licensed under the MIT License.
+ *)
+
+lodash/lodash.js:
+ (**
+ * @license
+ * Lodash
+ * Copyright OpenJS Foundation and other contributors
+ * Released under MIT license
+ * Based on Underscore.js 1.8.3
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ *)
+*/
diff --git a/jest.config.js b/jest.config.js
new file mode 100644
index 0000000..b8b661b
--- /dev/null
+++ b/jest.config.js
@@ -0,0 +1,13 @@
+module.exports = {
+ clearMocks: true,
+ moduleFileExtensions: ['js', 'ts'],
+ testMatch: ['**/*.test.ts'],
+ transform: {
+ '^.+\\.ts$': 'ts-jest'
+ },
+ verbose: true,
+ testTimeout: 10000,
+ setupFiles: [
+ "/jest/setupEnv.cjs"
+ ]
+};
diff --git a/jest/setupEnv.cjs b/jest/setupEnv.cjs
new file mode 100644
index 0000000..81e450b
--- /dev/null
+++ b/jest/setupEnv.cjs
@@ -0,0 +1,8 @@
+const path = require('path')
+
+process.env.GITHUB_WORKSPACE = path.join(
+ path.resolve(__dirname, '..'), '.'
+)
+process.env.GITHUB_ACTION_PATH = path.join(
+ path.resolve(__dirname, '..'), '.'
+)
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..9eda942
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,9460 @@
+{
+ "name": "@step-security/changed-files",
+ "version": "45.0.7",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "@step-security/changed-files",
+ "version": "45.0.7",
+ "license": "MIT",
+ "dependencies": {
+ "@actions/core": "^1.10.0",
+ "@actions/exec": "^1.1.1",
+ "@actions/github": "^6.0.0",
+ "@octokit/rest": "^21.0.0",
+ "@stdlib/utils-convert-path": "^0.2.1",
+ "lodash": "^4.17.21",
+ "micromatch": "^4.0.5",
+ "yaml": "^2.3.1"
+ },
+ "devDependencies": {
+ "@types/jest": "^29.5.2",
+ "@types/lodash": "^4.14.195",
+ "@types/micromatch": "^4.0.2",
+ "@types/node": "^22.0.0",
+ "@types/uuid": "^10.0.0",
+ "@typescript-eslint/eslint-plugin": "^7.0.0",
+ "@typescript-eslint/parser": "^7.0.0",
+ "@vercel/ncc": "^0.38.0",
+ "axios": "^1.8.3",
+ "eslint": "^8.43.0",
+ "eslint-config-prettier": "^10.0.0",
+ "eslint-plugin-github": "^5.0.0",
+ "eslint-plugin-jest": "^28.0.0",
+ "eslint-plugin-prettier": "^5.0.0-alpha.2",
+ "jest": "^29.5.0",
+ "prettier": "^3.0.0",
+ "ts-jest": "^29.1.0",
+ "typescript": "^5.1.3"
+ }
+ },
+ "node_modules/@actions/core": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.11.1.tgz",
+ "integrity": "sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==",
+ "license": "MIT",
+ "dependencies": {
+ "@actions/exec": "^1.1.1",
+ "@actions/http-client": "^2.0.1"
+ }
+ },
+ "node_modules/@actions/exec": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.1.1.tgz",
+ "integrity": "sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==",
+ "license": "MIT",
+ "dependencies": {
+ "@actions/io": "^1.0.1"
+ }
+ },
+ "node_modules/@actions/github": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/@actions/github/-/github-6.0.0.tgz",
+ "integrity": "sha512-alScpSVnYmjNEXboZjarjukQEzgCRmjMv6Xj47fsdnqGS73bjJNDpiiXmp8jr0UZLdUB6d9jW63IcmddUP+l0g==",
+ "license": "MIT",
+ "dependencies": {
+ "@actions/http-client": "^2.2.0",
+ "@octokit/core": "^5.0.1",
+ "@octokit/plugin-paginate-rest": "^9.0.0",
+ "@octokit/plugin-rest-endpoint-methods": "^10.0.0"
+ }
+ },
+ "node_modules/@actions/http-client": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.3.tgz",
+ "integrity": "sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA==",
+ "license": "MIT",
+ "dependencies": {
+ "tunnel": "^0.0.6",
+ "undici": "^5.25.4"
+ }
+ },
+ "node_modules/@actions/io": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@actions/io/-/io-1.1.3.tgz",
+ "integrity": "sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==",
+ "license": "MIT"
+ },
+ "node_modules/@ampproject/remapping": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+ "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.26.2",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
+ "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.25.9",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.26.8",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz",
+ "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.26.9",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz",
+ "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.26.2",
+ "@babel/generator": "^7.26.9",
+ "@babel/helper-compilation-targets": "^7.26.5",
+ "@babel/helper-module-transforms": "^7.26.0",
+ "@babel/helpers": "^7.26.9",
+ "@babel/parser": "^7.26.9",
+ "@babel/template": "^7.26.9",
+ "@babel/traverse": "^7.26.9",
+ "@babel/types": "^7.26.9",
+ "convert-source-map": "^2.0.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@babel/core/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.26.9",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz",
+ "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.26.9",
+ "@babel/types": "^7.26.9",
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "jsesc": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz",
+ "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/compat-data": "^7.26.5",
+ "@babel/helper-validator-option": "^7.25.9",
+ "browserslist": "^4.24.0",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
+ "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/traverse": "^7.25.9",
+ "@babel/types": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
+ "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.25.9",
+ "@babel/helper-validator-identifier": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz",
+ "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
+ "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
+ "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
+ "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.26.9",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.9.tgz",
+ "integrity": "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/template": "^7.26.9",
+ "@babel/types": "^7.26.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.26.9",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz",
+ "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.26.9"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-async-generators": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
+ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-bigint": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
+ "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-class-properties": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
+ "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.12.13"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-class-static-block": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
+ "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-import-attributes": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz",
+ "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-import-meta": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+ "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-json-strings": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
+ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-jsx": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz",
+ "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+ "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-numeric-separator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+ "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
+ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-optional-chaining": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
+ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-private-property-in-object": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
+ "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-top-level-await": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
+ "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-typescript": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz",
+ "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.26.9",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz",
+ "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.26.2",
+ "@babel/parser": "^7.26.9",
+ "@babel/types": "^7.26.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.26.9",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz",
+ "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.26.2",
+ "@babel/generator": "^7.26.9",
+ "@babel/parser": "^7.26.9",
+ "@babel/template": "^7.26.9",
+ "@babel/types": "^7.26.9",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse/node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.26.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz",
+ "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.25.9",
+ "@babel/helper-validator-identifier": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@bcoe/v8-coverage": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
+ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz",
+ "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.12.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
+ "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "8.57.1",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz",
+ "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@fastify/busboy": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz",
+ "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@github/browserslist-config": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@github/browserslist-config/-/browserslist-config-1.0.0.tgz",
+ "integrity": "sha512-gIhjdJp/c2beaIWWIlsXdqXVRUz3r2BxBCpfz/F3JXHvSAQ1paMYjLH+maEATtENg+k5eLV7gA+9yPp762ieuw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.13.0",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
+ "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==",
+ "deprecated": "Use @eslint/config-array instead",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^2.0.3",
+ "debug": "^4.3.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
+ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
+ "deprecated": "Use @eslint/object-schema instead",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@istanbuljs/load-nyc-config": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
+ "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "camelcase": "^5.3.1",
+ "find-up": "^4.1.0",
+ "get-package-type": "^0.1.0",
+ "js-yaml": "^3.13.1",
+ "resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/schema": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
+ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@jest/console": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz",
+ "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/core": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz",
+ "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/console": "^29.7.0",
+ "@jest/reporters": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.9",
+ "jest-changed-files": "^29.7.0",
+ "jest-config": "^29.7.0",
+ "jest-haste-map": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-resolve-dependencies": "^29.7.0",
+ "jest-runner": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "jest-watcher": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "pretty-format": "^29.7.0",
+ "slash": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@jest/environment": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz",
+ "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "jest-mock": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/expect": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz",
+ "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "expect": "^29.7.0",
+ "jest-snapshot": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/expect-utils": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz",
+ "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "jest-get-type": "^29.6.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/fake-timers": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz",
+ "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@sinonjs/fake-timers": "^10.0.2",
+ "@types/node": "*",
+ "jest-message-util": "^29.7.0",
+ "jest-mock": "^29.7.0",
+ "jest-util": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/globals": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz",
+ "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/environment": "^29.7.0",
+ "@jest/expect": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "jest-mock": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/reporters": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz",
+ "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@bcoe/v8-coverage": "^0.2.3",
+ "@jest/console": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@jridgewell/trace-mapping": "^0.3.18",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "collect-v8-coverage": "^1.0.0",
+ "exit": "^0.1.2",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-instrument": "^6.0.0",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-lib-source-maps": "^4.0.0",
+ "istanbul-reports": "^3.1.3",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-worker": "^29.7.0",
+ "slash": "^3.0.0",
+ "string-length": "^4.0.1",
+ "strip-ansi": "^6.0.0",
+ "v8-to-istanbul": "^9.0.1"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@jest/schemas": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
+ "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@sinclair/typebox": "^0.27.8"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/source-map": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz",
+ "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.18",
+ "callsites": "^3.0.0",
+ "graceful-fs": "^4.2.9"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/test-result": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz",
+ "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/console": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "collect-v8-coverage": "^1.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/test-sequencer": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz",
+ "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/test-result": "^29.7.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.7.0",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/transform": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz",
+ "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.11.6",
+ "@jest/types": "^29.6.3",
+ "@jridgewell/trace-mapping": "^0.3.18",
+ "babel-plugin-istanbul": "^6.1.1",
+ "chalk": "^4.0.0",
+ "convert-source-map": "^2.0.0",
+ "fast-json-stable-stringify": "^2.1.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "pirates": "^4.0.4",
+ "slash": "^3.0.0",
+ "write-file-atomic": "^4.0.2"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/types": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/schemas": "^29.6.3",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^3.0.0",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.8",
+ "chalk": "^4.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
+ "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/set-array": "^1.2.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@octokit/auth-token": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz",
+ "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/core": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.0.tgz",
+ "integrity": "sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/auth-token": "^4.0.0",
+ "@octokit/graphql": "^7.1.0",
+ "@octokit/request": "^8.3.1",
+ "@octokit/request-error": "^5.1.0",
+ "@octokit/types": "^13.0.0",
+ "before-after-hook": "^2.2.0",
+ "universal-user-agent": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/endpoint": {
+ "version": "9.0.6",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.6.tgz",
+ "integrity": "sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^13.1.0",
+ "universal-user-agent": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/graphql": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.1.tgz",
+ "integrity": "sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/request": "^8.4.1",
+ "@octokit/types": "^13.0.0",
+ "universal-user-agent": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/openapi-types": {
+ "version": "23.0.1",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz",
+ "integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==",
+ "license": "MIT"
+ },
+ "node_modules/@octokit/plugin-paginate-rest": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.2.tgz",
+ "integrity": "sha512-u3KYkGF7GcZnSD/3UP0S7K5XUFT2FkOQdcfXZGZQPGv3lm4F2Xbf71lvjldr8c1H3nNbF+33cLEkWYbokGWqiQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^12.6.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": "5"
+ }
+ },
+ "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": {
+ "version": "20.0.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz",
+ "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==",
+ "license": "MIT"
+ },
+ "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": {
+ "version": "12.6.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz",
+ "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/openapi-types": "^20.0.0"
+ }
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods": {
+ "version": "10.4.1",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.4.1.tgz",
+ "integrity": "sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^12.6.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": "5"
+ }
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": {
+ "version": "20.0.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz",
+ "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==",
+ "license": "MIT"
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": {
+ "version": "12.6.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz",
+ "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/openapi-types": "^20.0.0"
+ }
+ },
+ "node_modules/@octokit/request": {
+ "version": "8.4.1",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.1.tgz",
+ "integrity": "sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/endpoint": "^9.0.6",
+ "@octokit/request-error": "^5.1.1",
+ "@octokit/types": "^13.1.0",
+ "universal-user-agent": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/request-error": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.1.tgz",
+ "integrity": "sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^13.1.0",
+ "deprecation": "^2.0.0",
+ "once": "^1.4.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/rest": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-21.1.1.tgz",
+ "integrity": "sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/core": "^6.1.4",
+ "@octokit/plugin-paginate-rest": "^11.4.2",
+ "@octokit/plugin-request-log": "^5.3.1",
+ "@octokit/plugin-rest-endpoint-methods": "^13.3.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/rest/node_modules/@octokit/auth-token": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.2.tgz",
+ "integrity": "sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/rest/node_modules/@octokit/core": {
+ "version": "6.1.4",
+ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.4.tgz",
+ "integrity": "sha512-lAS9k7d6I0MPN+gb9bKDt7X8SdxknYqAMh44S5L+lNqIN2NuV8nvv3g8rPp7MuRxcOpxpUIATWprO0C34a8Qmg==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/auth-token": "^5.0.0",
+ "@octokit/graphql": "^8.1.2",
+ "@octokit/request": "^9.2.1",
+ "@octokit/request-error": "^6.1.7",
+ "@octokit/types": "^13.6.2",
+ "before-after-hook": "^3.0.2",
+ "universal-user-agent": "^7.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/rest/node_modules/@octokit/endpoint": {
+ "version": "10.1.3",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.3.tgz",
+ "integrity": "sha512-nBRBMpKPhQUxCsQQeW+rCJ/OPSMcj3g0nfHn01zGYZXuNDvvXudF/TYY6APj5THlurerpFN4a/dQAIAaM6BYhA==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^13.6.2",
+ "universal-user-agent": "^7.0.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/rest/node_modules/@octokit/graphql": {
+ "version": "8.2.1",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.2.1.tgz",
+ "integrity": "sha512-n57hXtOoHrhwTWdvhVkdJHdhTv0JstjDbDRhJfwIRNfFqmSo1DaK/mD2syoNUoLCyqSjBpGAKOG0BuwF392slw==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/request": "^9.2.2",
+ "@octokit/types": "^13.8.0",
+ "universal-user-agent": "^7.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/rest/node_modules/@octokit/plugin-paginate-rest": {
+ "version": "11.4.3",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.4.3.tgz",
+ "integrity": "sha512-tBXaAbXkqVJlRoA/zQVe9mUdb8rScmivqtpv3ovsC5xhje/a+NOCivs7eUhWBwCApJVsR4G5HMeaLbq7PxqZGA==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^13.7.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=6"
+ }
+ },
+ "node_modules/@octokit/rest/node_modules/@octokit/plugin-request-log": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz",
+ "integrity": "sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=6"
+ }
+ },
+ "node_modules/@octokit/rest/node_modules/@octokit/plugin-rest-endpoint-methods": {
+ "version": "13.3.1",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.3.1.tgz",
+ "integrity": "sha512-o8uOBdsyR+WR8MK9Cco8dCgvG13H1RlM1nWnK/W7TEACQBFux/vPREgKucxUfuDQ5yi1T3hGf4C5ZmZXAERgwQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^13.8.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=6"
+ }
+ },
+ "node_modules/@octokit/rest/node_modules/@octokit/request": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.2.2.tgz",
+ "integrity": "sha512-dZl0ZHx6gOQGcffgm1/Sf6JfEpmh34v3Af2Uci02vzUYz6qEN6zepoRtmybWXIGXFIK8K9ylE3b+duCWqhArtg==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/endpoint": "^10.1.3",
+ "@octokit/request-error": "^6.1.7",
+ "@octokit/types": "^13.6.2",
+ "fast-content-type-parse": "^2.0.0",
+ "universal-user-agent": "^7.0.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/rest/node_modules/@octokit/request-error": {
+ "version": "6.1.7",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.7.tgz",
+ "integrity": "sha512-69NIppAwaauwZv6aOzb+VVLwt+0havz9GT5YplkeJv7fG7a40qpLt/yZKyiDxAhgz0EtgNdNcb96Z0u+Zyuy2g==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^13.6.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/rest/node_modules/before-after-hook": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz",
+ "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/@octokit/rest/node_modules/universal-user-agent": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.2.tgz",
+ "integrity": "sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==",
+ "license": "ISC"
+ },
+ "node_modules/@octokit/types": {
+ "version": "13.8.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz",
+ "integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/openapi-types": "^23.0.1"
+ }
+ },
+ "node_modules/@pkgr/core": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz",
+ "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts"
+ }
+ },
+ "node_modules/@rtsao/scc": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
+ "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@sinclair/typebox": {
+ "version": "0.27.8",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
+ "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@sinonjs/commons": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
+ "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "type-detect": "4.0.8"
+ }
+ },
+ "node_modules/@sinonjs/fake-timers": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
+ "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@sinonjs/commons": "^3.0.0"
+ }
+ },
+ "node_modules/@stdlib/assert-has-own-property": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/assert-has-own-property/-/assert-has-own-property-0.2.2.tgz",
+ "integrity": "sha512-m5rV4Z2/iNkwx2vRsNheM6sQZMzc8rQQOo90LieICXovXZy8wA5jNld4kRKjMNcRt/TjrNP7i2Rhh8hruRDlHg==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/assert-has-symbol-support": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/assert-has-symbol-support/-/assert-has-symbol-support-0.2.2.tgz",
+ "integrity": "sha512-vCsGGmDZz5dikGgdF26rIL0y0nHvH7qaVf89HLLTybceuZijAqFSJEqcB3Gpl5uaeueLNAWExHi2EkoUVqKHGg==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/assert-has-tostringtag-support": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/assert-has-tostringtag-support/-/assert-has-tostringtag-support-0.2.2.tgz",
+ "integrity": "sha512-bSHGqku11VH0swPEzO4Y2Dr+lTYEtjSWjamwqCTC8udOiOIOHKoxuU4uaMGKJjVfXG1L+XefLHqzuO5azxdRaA==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "dependencies": {
+ "@stdlib/assert-has-symbol-support": "^0.2.1"
+ },
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/assert-is-array": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/assert-is-array/-/assert-is-array-0.2.2.tgz",
+ "integrity": "sha512-aJyTX2U3JqAGCATgaAX9ygvDHc97GCIKkIhiZm/AZaLoFHPtMA1atQ4bKcefEC8Um9eefryxTHfFPfSr9CoNQQ==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "dependencies": {
+ "@stdlib/utils-native-class": "^0.2.1"
+ },
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/assert-is-boolean": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/assert-is-boolean/-/assert-is-boolean-0.2.2.tgz",
+ "integrity": "sha512-3KFLRTYZpX6u95baZ6PubBvjehJs2xBU6+zrenR0jx8KToUYCnJPxqqj7JXRhSD+cOURmcjj9rocVaG9Nz18Pg==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "dependencies": {
+ "@stdlib/assert-has-tostringtag-support": "^0.2.2",
+ "@stdlib/boolean-ctor": "^0.2.2",
+ "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.2",
+ "@stdlib/utils-native-class": "^0.2.1"
+ },
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/assert-is-buffer": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/assert-is-buffer/-/assert-is-buffer-0.2.2.tgz",
+ "integrity": "sha512-4/WMFTEcDYlVbRhxY8Wlqag4S70QCnn6WmQ4wmfiLW92kqQHsLvTNvdt/qqh/SDyDV31R/cpd3QPsVN534dNEA==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "dependencies": {
+ "@stdlib/assert-is-object-like": "^0.2.1"
+ },
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/assert-is-function": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/assert-is-function/-/assert-is-function-0.2.2.tgz",
+ "integrity": "sha512-whY69DUYWljCJ79Cvygp7VzWGOtGTsh3SQhzNuGt+ut6EsOW+8nwiRkyBXYKf/MOF+NRn15pxg8cJEoeRgsPcA==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "dependencies": {
+ "@stdlib/utils-type-of": "^0.2.1"
+ },
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/assert-is-object-like": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/assert-is-object-like/-/assert-is-object-like-0.2.2.tgz",
+ "integrity": "sha512-MjQBpHdEebbJwLlxh/BKNH8IEHqY0YlcCMRKOQU0UOlILSJg0vG+GL4fDDqtx9FSXxcTqC+w3keHx8kAKvQhzg==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "dependencies": {
+ "@stdlib/assert-tools-array-function": "^0.2.1",
+ "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.2"
+ },
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/assert-is-regexp": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/assert-is-regexp/-/assert-is-regexp-0.2.2.tgz",
+ "integrity": "sha512-2JtiUtRJxPaVXL7dkWoV3n5jouI65DwYDXsDXg3xo23TXlTNGgU/HhKO4FWC1Yqju7YMZi0hcZSW6E9v8ISqeQ==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "dependencies": {
+ "@stdlib/assert-has-tostringtag-support": "^0.2.2",
+ "@stdlib/utils-native-class": "^0.2.1"
+ },
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/assert-is-string": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/assert-is-string/-/assert-is-string-0.2.2.tgz",
+ "integrity": "sha512-SOkFg4Hq443hkadM4tzcwTHWvTyKP9ULOZ8MSnnqmU0nBX1zLVFLFGY8jnF6Cary0dL0V7QQBCfuxqKFM6u2PQ==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "dependencies": {
+ "@stdlib/assert-has-tostringtag-support": "^0.2.2",
+ "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.2",
+ "@stdlib/utils-native-class": "^0.2.1"
+ },
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/assert-tools-array-function": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/assert-tools-array-function/-/assert-tools-array-function-0.2.2.tgz",
+ "integrity": "sha512-FYeT7X9x0C8Nh+MN6IJUDz+7i7yB6mio2/SDlrvyepjyPSU/cfHfwW0GEOnQhxZ+keLZC/YqDD930WjRODwMdA==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "dependencies": {
+ "@stdlib/assert-is-array": "^0.2.1",
+ "@stdlib/error-tools-fmtprodmsg": "^0.2.2",
+ "@stdlib/string-format": "^0.2.2"
+ },
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/boolean-ctor": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/boolean-ctor/-/boolean-ctor-0.2.2.tgz",
+ "integrity": "sha512-qIkHzmfxDvGzQ3XI9R7sZG97QSaWG5TvWVlrvcysOGT1cs6HtQgnf4D//SRzZ52VLm8oICP+6OKtd8Hpm6G7Ww==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/error-tools-fmtprodmsg": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/error-tools-fmtprodmsg/-/error-tools-fmtprodmsg-0.2.2.tgz",
+ "integrity": "sha512-2IliQfTes4WV5odPidZFGD5eYDswZrPXob7oOu95Q69ERqImo8WzSwnG2EDbHPyOyYCewuMfM5Ha6Ggf+u944Q==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/regexp-extended-length-path": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/regexp-extended-length-path/-/regexp-extended-length-path-0.2.2.tgz",
+ "integrity": "sha512-z3jqauEsaxpsQU3rj1A1QnOgu17pyW5kt+Az8QkoTk7wqNE8HhPikI6k4o7XBHV689rSFWZCl4c4W+7JAiNObQ==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "dependencies": {
+ "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.2"
+ },
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/regexp-function-name": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/regexp-function-name/-/regexp-function-name-0.2.2.tgz",
+ "integrity": "sha512-0z/KRsgHJJ3UQkmBeLH+Nin0hXIeA+Fw1T+mnG2V5CHnTA6FKlpxJxWrvwLEsRX7mR/DNtDp06zGyzMFE/4kig==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "dependencies": {
+ "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.2"
+ },
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/string-base-format-interpolate": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/string-base-format-interpolate/-/string-base-format-interpolate-0.2.2.tgz",
+ "integrity": "sha512-i9nU9rAB2+o/RR66TS9iQ8x+YzeUDL1SGiAo6GY3hP6Umz5Dx9Qp/v8T69gWVsb4a1YSclz5+YeCWaFgwvPjKA==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/string-base-format-tokenize": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/string-base-format-tokenize/-/string-base-format-tokenize-0.2.2.tgz",
+ "integrity": "sha512-kXq2015i+LJjqth5dN+hYnvJXBSzRm8w0ABWB5tYAsIuQTpQK+mSo2muM8JBEFEnqUHAwpUsu2qNTK/9o8lsJg==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/string-base-lowercase": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@stdlib/string-base-lowercase/-/string-base-lowercase-0.4.0.tgz",
+ "integrity": "sha512-IH35Z5e4T+S3b3SfYY39mUhrD2qvJVp4VS7Rn3+jgj4+C3syocuAPsJ8C4OQXWGfblX/N9ymizbpFBCiVvMW8w==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/string-base-replace": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/string-base-replace/-/string-base-replace-0.2.2.tgz",
+ "integrity": "sha512-Y4jZwRV4Uertw7AlA/lwaYl1HjTefSriN5+ztRcQQyDYmoVN3gzoVKLJ123HPiggZ89vROfC+sk/6AKvly+0CA==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/string-format": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/string-format/-/string-format-0.2.2.tgz",
+ "integrity": "sha512-GUa50uxgMAtoItsxTbMmwkyhIwrCxCrsjzk3nAbLnt/1Kt1EWOWMwsALqZdD6K4V/xSJ4ns6PZur3W6w+vKk9g==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "dependencies": {
+ "@stdlib/string-base-format-interpolate": "^0.2.1",
+ "@stdlib/string-base-format-tokenize": "^0.2.2"
+ },
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/string-replace": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/string-replace/-/string-replace-0.2.2.tgz",
+ "integrity": "sha512-czNS5IU7sBuHjac45Y3VWUTsUoi82yc8JsMZrOMcjgSrEuDrVmA6sNJg7HC1DuSpdPjm/v9uUk102s1gIfk3Nw==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "dependencies": {
+ "@stdlib/assert-is-function": "^0.2.2",
+ "@stdlib/assert-is-regexp": "^0.2.2",
+ "@stdlib/assert-is-string": "^0.2.2",
+ "@stdlib/error-tools-fmtprodmsg": "^0.2.2",
+ "@stdlib/string-base-replace": "^0.2.2",
+ "@stdlib/string-format": "^0.2.2",
+ "@stdlib/utils-escape-regexp-string": "^0.2.2"
+ },
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/symbol-ctor": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/symbol-ctor/-/symbol-ctor-0.2.2.tgz",
+ "integrity": "sha512-XsmiTfHnTb9jSPf2SoK3O0wrNOXMxqzukvDvtzVur1XBKfim9+seaAS4akmV1H3+AroAXQWVtde885e1B6jz1w==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/utils-constructor-name": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/utils-constructor-name/-/utils-constructor-name-0.2.2.tgz",
+ "integrity": "sha512-TBtO3MKDAf05ij5ajmyBCbpKKt0Lfahn5tu18gqds4PkFltgcw5tVZfSHY5DZ2HySJQ2GMMYjPW2Kbg6yPCSVg==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "dependencies": {
+ "@stdlib/assert-is-buffer": "^0.2.1",
+ "@stdlib/regexp-function-name": "^0.2.2",
+ "@stdlib/utils-native-class": "^0.2.1"
+ },
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/utils-convert-path": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/utils-convert-path/-/utils-convert-path-0.2.2.tgz",
+ "integrity": "sha512-8nNuAgt23Np9NssjShUrPK42c6gRTweGuoQw+yTpTfBR9VQv8WFyt048n8gRGUlAHizrdMNpEY9VAb7IBzpVYw==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "dependencies": {
+ "@stdlib/assert-is-string": "^0.2.2",
+ "@stdlib/error-tools-fmtprodmsg": "^0.2.2",
+ "@stdlib/regexp-extended-length-path": "^0.2.2",
+ "@stdlib/string-base-lowercase": "^0.4.0",
+ "@stdlib/string-format": "^0.2.2",
+ "@stdlib/string-replace": "^0.2.1"
+ },
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/utils-define-nonenumerable-read-only-property": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/utils-define-nonenumerable-read-only-property/-/utils-define-nonenumerable-read-only-property-0.2.2.tgz",
+ "integrity": "sha512-V3mpAesJemLYDKG376CsmoczWPE/4LKsp8xBvUxCt5CLNAx3J/1W39iZQyA5q6nY1RStGinGn1/dYZwa8ig0Uw==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "dependencies": {
+ "@stdlib/utils-define-property": "^0.2.3"
+ },
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/utils-define-property": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/@stdlib/utils-define-property/-/utils-define-property-0.2.4.tgz",
+ "integrity": "sha512-XlMdz7xwuw/sqXc9LbsV8XunCzZXjbZPC+OAdf4t4PBw4ZRwGzlTI6WED+f4PYR5Tp9F1cHgLPyMYCIBfA2zRg==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "dependencies": {
+ "@stdlib/error-tools-fmtprodmsg": "^0.2.1",
+ "@stdlib/string-format": "^0.2.1"
+ },
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/utils-escape-regexp-string": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/utils-escape-regexp-string/-/utils-escape-regexp-string-0.2.2.tgz",
+ "integrity": "sha512-areCibzgpmvm6pGKBg+mXkSDJW4NxtS5jcAT7RtunGMdAYhA/I5whISMPaeJkIT2XhjjFkjKBaIs5pF6aPr4fQ==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "dependencies": {
+ "@stdlib/assert-is-string": "^0.2.1",
+ "@stdlib/error-tools-fmtprodmsg": "^0.2.2",
+ "@stdlib/string-format": "^0.2.2"
+ },
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/utils-global": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/utils-global/-/utils-global-0.2.2.tgz",
+ "integrity": "sha512-A4E8VFHn+1bpfJ4PA8H2b62CMQpjv2A+H3QDEBrouLFWne0wrx0TNq8vH6VYHxx9ZRxhgWQjfHiSAxtUJobrbQ==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "dependencies": {
+ "@stdlib/assert-is-boolean": "^0.2.1",
+ "@stdlib/error-tools-fmtprodmsg": "^0.2.2",
+ "@stdlib/string-format": "^0.2.2"
+ },
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/utils-native-class": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/utils-native-class/-/utils-native-class-0.2.2.tgz",
+ "integrity": "sha512-cSn/FozbEpfR/FlJAoceQtZ8yUJFhZ8RFkbEsxW/7+H4o09yln3lBS0HSfUJISYNtpTNN/2/Fup88vmvwspvwA==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "dependencies": {
+ "@stdlib/assert-has-own-property": "^0.2.1",
+ "@stdlib/assert-has-tostringtag-support": "^0.2.2",
+ "@stdlib/symbol-ctor": "^0.2.2"
+ },
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@stdlib/utils-type-of": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@stdlib/utils-type-of/-/utils-type-of-0.2.2.tgz",
+ "integrity": "sha512-RLGFxPNgY9AtVVrFGdKO6Y3pOd/Ov2WA4O2/czZN/AbgYzbPdoF0KkfvHRIney6k+TtvoyYB8YqZXJ4G88f9BQ==",
+ "license": "Apache-2.0",
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "dependencies": {
+ "@stdlib/utils-constructor-name": "^0.2.1",
+ "@stdlib/utils-global": "^0.2.2"
+ },
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stdlib"
+ }
+ },
+ "node_modules/@types/babel__core": {
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "node_modules/@types/babel__generator": {
+ "version": "7.6.8",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz",
+ "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__template": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__traverse": {
+ "version": "7.20.6",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz",
+ "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.20.7"
+ }
+ },
+ "node_modules/@types/braces": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@types/braces/-/braces-3.0.5.tgz",
+ "integrity": "sha512-SQFof9H+LXeWNz8wDe7oN5zu7ket0qwMu5vZubW4GCJ8Kkeh6nBWUz87+KTz/G3Kqsrp0j/W253XJb3KMEeg3w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/graceful-fs": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz",
+ "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/istanbul-lib-coverage": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
+ "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/istanbul-lib-report": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
+ "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/istanbul-lib-coverage": "*"
+ }
+ },
+ "node_modules/@types/istanbul-reports": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
+ "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/istanbul-lib-report": "*"
+ }
+ },
+ "node_modules/@types/jest": {
+ "version": "29.5.14",
+ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz",
+ "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "expect": "^29.0.0",
+ "pretty-format": "^29.0.0"
+ }
+ },
+ "node_modules/@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/lodash": {
+ "version": "4.17.16",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.16.tgz",
+ "integrity": "sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/micromatch": {
+ "version": "4.0.9",
+ "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.9.tgz",
+ "integrity": "sha512-7V+8ncr22h4UoYRLnLXSpTxjQrNUXtWHGeMPRJt1nULXI57G9bIcpyrHlmrQ7QK24EyyuXvYcSSWAM8GA9nqCg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/braces": "*"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "22.13.10",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz",
+ "integrity": "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.20.0"
+ }
+ },
+ "node_modules/@types/stack-utils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
+ "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/uuid": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz",
+ "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/yargs": {
+ "version": "17.0.33",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz",
+ "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "node_modules/@types/yargs-parser": {
+ "version": "21.0.3",
+ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
+ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz",
+ "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.10.0",
+ "@typescript-eslint/scope-manager": "7.18.0",
+ "@typescript-eslint/type-utils": "7.18.0",
+ "@typescript-eslint/utils": "7.18.0",
+ "@typescript-eslint/visitor-keys": "7.18.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.3.1",
+ "natural-compare": "^1.4.0",
+ "ts-api-utils": "^1.3.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || >=20.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^7.0.0",
+ "eslint": "^8.56.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz",
+ "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "7.18.0",
+ "@typescript-eslint/types": "7.18.0",
+ "@typescript-eslint/typescript-estree": "7.18.0",
+ "@typescript-eslint/visitor-keys": "7.18.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^18.18.0 || >=20.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.56.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz",
+ "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "7.18.0",
+ "@typescript-eslint/visitor-keys": "7.18.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || >=20.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz",
+ "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "7.18.0",
+ "@typescript-eslint/utils": "7.18.0",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^1.3.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || >=20.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.56.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
+ "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || >=20.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz",
+ "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "@typescript-eslint/types": "7.18.0",
+ "@typescript-eslint/visitor-keys": "7.18.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "minimatch": "^9.0.4",
+ "semver": "^7.6.0",
+ "ts-api-utils": "^1.3.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || >=20.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz",
+ "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@typescript-eslint/scope-manager": "7.18.0",
+ "@typescript-eslint/types": "7.18.0",
+ "@typescript-eslint/typescript-estree": "7.18.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || >=20.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.56.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz",
+ "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "7.18.0",
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "engines": {
+ "node": "^18.18.0 || >=20.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
+ "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/@vercel/ncc": {
+ "version": "0.38.3",
+ "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.38.3.tgz",
+ "integrity": "sha512-rnK6hJBS6mwc+Bkab+PGPs9OiS0i/3kdTO+CkI8V0/VrW3vmz7O2Pxjw/owOlmo6PKEIxRSeZKv/kuL9itnpYA==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "ncc": "dist/ncc/cli.js"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.14.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
+ "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "type-fest": "^0.21.3"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-escapes/node_modules/type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "license": "Python-2.0"
+ },
+ "node_modules/aria-query": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
+ "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/array-buffer-byte-length": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
+ "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "is-array-buffer": "^3.0.5"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array-includes": {
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
+ "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "is-string": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/array.prototype.findlastindex": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz",
+ "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flat": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz",
+ "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.5",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flatmap": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz",
+ "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.5",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/arraybuffer.prototype.slice": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
+ "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.1",
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.5",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "is-array-buffer": "^3.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/ast-types-flow": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz",
+ "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/async": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
+ "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/async-function": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz",
+ "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/axe-core": {
+ "version": "4.10.3",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz",
+ "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==",
+ "dev": true,
+ "license": "MPL-2.0",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/axios": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.3.tgz",
+ "integrity": "sha512-iP4DebzoNlP/YN2dpwCgb8zoCmhtkajzS48JvwmkSkXvPI3DHc7m+XYL5tGnSlJtR6nImXZmdCuN5aP8dh1d8A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "follow-redirects": "^1.15.6",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "node_modules/axobject-query": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
+ "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/babel-jest": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz",
+ "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/transform": "^29.7.0",
+ "@types/babel__core": "^7.1.14",
+ "babel-plugin-istanbul": "^6.1.1",
+ "babel-preset-jest": "^29.6.3",
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.8.0"
+ }
+ },
+ "node_modules/babel-plugin-istanbul": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
+ "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@istanbuljs/load-nyc-config": "^1.0.0",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-instrument": "^5.0.4",
+ "test-exclude": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+ "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@babel/core": "^7.12.3",
+ "@babel/parser": "^7.14.7",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/babel-plugin-istanbul/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/babel-plugin-jest-hoist": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz",
+ "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/template": "^7.3.3",
+ "@babel/types": "^7.3.3",
+ "@types/babel__core": "^7.1.14",
+ "@types/babel__traverse": "^7.0.6"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/babel-preset-current-node-syntax": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz",
+ "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/plugin-syntax-async-generators": "^7.8.4",
+ "@babel/plugin-syntax-bigint": "^7.8.3",
+ "@babel/plugin-syntax-class-properties": "^7.12.13",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5",
+ "@babel/plugin-syntax-import-attributes": "^7.24.7",
+ "@babel/plugin-syntax-import-meta": "^7.10.4",
+ "@babel/plugin-syntax-json-strings": "^7.8.3",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
+ "@babel/plugin-syntax-top-level-await": "^7.14.5"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/babel-preset-jest": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
+ "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "babel-plugin-jest-hoist": "^29.6.3",
+ "babel-preset-current-node-syntax": "^1.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/before-after-hook": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz",
+ "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.24.4",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz",
+ "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001688",
+ "electron-to-chromium": "^1.5.73",
+ "node-releases": "^2.0.19",
+ "update-browserslist-db": "^1.1.1"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/bs-logger": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz",
+ "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-json-stable-stringify": "2.x"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/bser": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
+ "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "node-int64": "^0.4.0"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
+ "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.0",
+ "es-define-property": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/call-bound": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "get-intrinsic": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001703",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001703.tgz",
+ "integrity": "sha512-kRlAGTRWgPsOj7oARC9m1okJEXdL/8fekFVcxA8Hl7GH4r/sN4OJn/i6Flde373T50KS7Y37oFbMwlE8+F42kQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "CC-BY-4.0"
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/char-regex": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
+ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/ci-info": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
+ "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cjs-module-lexer": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz",
+ "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "iojs": ">= 1.0.0",
+ "node": ">= 0.12.0"
+ }
+ },
+ "node_modules/collect-v8-coverage": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz",
+ "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/create-jest": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz",
+ "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "chalk": "^4.0.0",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.9",
+ "jest-config": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "prompts": "^2.0.1"
+ },
+ "bin": {
+ "create-jest": "bin/create-jest.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/damerau-levenshtein": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
+ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
+ "dev": true,
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/data-view-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
+ "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-length": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz",
+ "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/inspect-js"
+ }
+ },
+ "node_modules/data-view-byte-offset": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz",
+ "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
+ "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/dedent": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz",
+ "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "babel-plugin-macros": "^3.1.0"
+ },
+ "peerDependenciesMeta": {
+ "babel-plugin-macros": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/deepmerge": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/deprecation": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
+ "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==",
+ "license": "ISC"
+ },
+ "node_modules/detect-newline": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
+ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/diff-sequences": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
+ "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/ejs": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
+ "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "jake": "^10.8.5"
+ },
+ "bin": {
+ "ejs": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.113",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.113.tgz",
+ "integrity": "sha512-wjT2O4hX+wdWPJ76gWSkMhcHAV2PTMX+QetUCPYEdCIe+cxmgzzSSiGRCKW8nuh4mwKZlpv0xvoW7OF2X+wmHg==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/emittery": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
+ "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/emittery?sponsor=1"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/es-abstract": {
+ "version": "1.23.9",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz",
+ "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.2",
+ "arraybuffer.prototype.slice": "^1.0.4",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "data-view-buffer": "^1.0.2",
+ "data-view-byte-length": "^1.0.2",
+ "data-view-byte-offset": "^1.0.1",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-set-tostringtag": "^2.1.0",
+ "es-to-primitive": "^1.3.0",
+ "function.prototype.name": "^1.1.8",
+ "get-intrinsic": "^1.2.7",
+ "get-proto": "^1.0.0",
+ "get-symbol-description": "^1.1.0",
+ "globalthis": "^1.0.4",
+ "gopd": "^1.2.0",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "internal-slot": "^1.1.0",
+ "is-array-buffer": "^3.0.5",
+ "is-callable": "^1.2.7",
+ "is-data-view": "^1.0.2",
+ "is-regex": "^1.2.1",
+ "is-shared-array-buffer": "^1.0.4",
+ "is-string": "^1.1.1",
+ "is-typed-array": "^1.1.15",
+ "is-weakref": "^1.1.0",
+ "math-intrinsics": "^1.1.0",
+ "object-inspect": "^1.13.3",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.7",
+ "own-keys": "^1.0.1",
+ "regexp.prototype.flags": "^1.5.3",
+ "safe-array-concat": "^1.1.3",
+ "safe-push-apply": "^1.0.0",
+ "safe-regex-test": "^1.1.0",
+ "set-proto": "^1.0.0",
+ "string.prototype.trim": "^1.2.10",
+ "string.prototype.trimend": "^1.0.9",
+ "string.prototype.trimstart": "^1.0.8",
+ "typed-array-buffer": "^1.0.3",
+ "typed-array-byte-length": "^1.0.3",
+ "typed-array-byte-offset": "^1.0.4",
+ "typed-array-length": "^1.0.7",
+ "unbox-primitive": "^1.1.0",
+ "which-typed-array": "^1.1.18"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-shim-unscopables": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz",
+ "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-to-primitive": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
+ "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-callable": "^1.2.7",
+ "is-date-object": "^1.0.5",
+ "is-symbol": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.57.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz",
+ "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
+ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.4",
+ "@eslint/js": "8.57.1",
+ "@humanwhocodes/config-array": "^0.13.0",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "@ungap/structured-clone": "^1.2.0",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-config-prettier": {
+ "version": "10.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.1.tgz",
+ "integrity": "sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "eslint-config-prettier": "bin/cli.js"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-import-resolver-node": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
+ "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^3.2.7",
+ "is-core-module": "^2.13.0",
+ "resolve": "^1.22.4"
+ }
+ },
+ "node_modules/eslint-import-resolver-node/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-module-utils": {
+ "version": "2.12.0",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz",
+ "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^3.2.7"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-escompat": {
+ "version": "3.11.4",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-escompat/-/eslint-plugin-escompat-3.11.4.tgz",
+ "integrity": "sha512-j0ywwNnIufshOzgAu+PfIig1c7VRClKSNKzpniMT2vXQ4leL5q+e/SpMFQU0nrdL2WFFM44XmhSuwmxb3G0CJg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.23.1"
+ },
+ "peerDependencies": {
+ "eslint": ">=5.14.1"
+ }
+ },
+ "node_modules/eslint-plugin-eslint-comments": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz",
+ "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "escape-string-regexp": "^1.0.5",
+ "ignore": "^5.0.5"
+ },
+ "engines": {
+ "node": ">=6.5.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=4.19.1"
+ }
+ },
+ "node_modules/eslint-plugin-eslint-comments/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/eslint-plugin-filenames": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-filenames/-/eslint-plugin-filenames-1.3.2.tgz",
+ "integrity": "sha512-tqxJTiEM5a0JmRCUYQmxw23vtTxrb2+a3Q2mMOPhFxvt7ZQQJmdiuMby9B/vUAuVMghyP7oET+nIf6EO6CBd/w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lodash.camelcase": "4.3.0",
+ "lodash.kebabcase": "4.1.1",
+ "lodash.snakecase": "4.1.1",
+ "lodash.upperfirst": "4.3.1"
+ },
+ "peerDependencies": {
+ "eslint": "*"
+ }
+ },
+ "node_modules/eslint-plugin-github": {
+ "version": "5.1.8",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-github/-/eslint-plugin-github-5.1.8.tgz",
+ "integrity": "sha512-A6q+R3EBMF7hxIViWpQsalqpu3O0POcQ9VpN1m9W2I8yGumw+SFxXZUTafBd9X9mgUJhaU4M9qSifC1q/39H3A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint/compat": "^1.2.3",
+ "@eslint/eslintrc": "^3.1.0",
+ "@eslint/js": "^9.14.0",
+ "@github/browserslist-config": "^1.0.0",
+ "@typescript-eslint/eslint-plugin": "^8.0.0",
+ "@typescript-eslint/parser": "^8.0.0",
+ "aria-query": "^5.3.0",
+ "eslint-config-prettier": ">=8.0.0",
+ "eslint-plugin-escompat": "^3.11.3",
+ "eslint-plugin-eslint-comments": "^3.2.0",
+ "eslint-plugin-filenames": "^1.3.2",
+ "eslint-plugin-i18n-text": "^1.0.1",
+ "eslint-plugin-import": "^2.31.0",
+ "eslint-plugin-jsx-a11y": "^6.10.2",
+ "eslint-plugin-no-only-tests": "^3.0.0",
+ "eslint-plugin-prettier": "^5.2.1",
+ "eslint-rule-documentation": ">=1.0.0",
+ "globals": "^15.12.0",
+ "jsx-ast-utils": "^3.3.2",
+ "prettier": "^3.0.0",
+ "svg-element-attributes": "^1.3.1",
+ "typescript-eslint": "^8.14.0"
+ },
+ "bin": {
+ "eslint-ignore-errors": "bin/eslint-ignore-errors.js"
+ },
+ "peerDependencies": {
+ "eslint": "^8 || ^9"
+ }
+ },
+ "node_modules/eslint-plugin-github/node_modules/@eslint/compat": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.2.7.tgz",
+ "integrity": "sha512-xvv7hJE32yhegJ8xNAnb62ggiAwTYHBpUCWhRxEj/ksvgDJuSXfoDkBcRYaYNFiJ+jH0IE3K16hd+xXzhBgNbg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "peerDependencies": {
+ "eslint": "^9.10.0"
+ },
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-plugin-github/node_modules/@eslint/eslintrc": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.0.tgz",
+ "integrity": "sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^10.0.1",
+ "globals": "^14.0.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-plugin-github/node_modules/@eslint/eslintrc/node_modules/globals": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint-plugin-github/node_modules/@eslint/js": {
+ "version": "9.22.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.22.0.tgz",
+ "integrity": "sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "8.26.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.0.tgz",
+ "integrity": "sha512-cLr1J6pe56zjKYajK6SSSre6nl1Gj6xDp1TY0trpgPzjVbgDwd09v2Ws37LABxzkicmUjhEeg/fAUjPJJB1v5Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.10.0",
+ "@typescript-eslint/scope-manager": "8.26.0",
+ "@typescript-eslint/type-utils": "8.26.0",
+ "@typescript-eslint/utils": "8.26.0",
+ "@typescript-eslint/visitor-keys": "8.26.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.3.1",
+ "natural-compare": "^1.4.0",
+ "ts-api-utils": "^2.0.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/parser": {
+ "version": "8.26.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.26.0.tgz",
+ "integrity": "sha512-mNtXP9LTVBy14ZF3o7JG69gRPBK/2QWtQd0j0oH26HcY/foyJJau6pNUez7QrM5UHnSvwlQcJXKsk0I99B9pOA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "8.26.0",
+ "@typescript-eslint/types": "8.26.0",
+ "@typescript-eslint/typescript-estree": "8.26.0",
+ "@typescript-eslint/visitor-keys": "8.26.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager": {
+ "version": "8.26.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.26.0.tgz",
+ "integrity": "sha512-E0ntLvsfPqnPwng8b8y4OGuzh/iIOm2z8U3S9zic2TeMLW61u5IH2Q1wu0oSTkfrSzwbDJIB/Lm8O3//8BWMPA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.26.0",
+ "@typescript-eslint/visitor-keys": "8.26.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils": {
+ "version": "8.26.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.26.0.tgz",
+ "integrity": "sha512-ruk0RNChLKz3zKGn2LwXuVoeBcUMh+jaqzN461uMMdxy5H9epZqIBtYj7UiPXRuOpaALXGbmRuZQhmwHhaS04Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "8.26.0",
+ "@typescript-eslint/utils": "8.26.0",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^2.0.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types": {
+ "version": "8.26.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.26.0.tgz",
+ "integrity": "sha512-89B1eP3tnpr9A8L6PZlSjBvnJhWXtYfZhECqlBl1D9Lme9mHO6iWlsprBtVenQvY1HMhax1mWOjhtL3fh/u+pA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree": {
+ "version": "8.26.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.0.tgz",
+ "integrity": "sha512-tiJ1Hvy/V/oMVRTbEOIeemA2XoylimlDQ03CgPPNaHYZbpsc78Hmngnt+WXZfJX1pjQ711V7g0H7cSJThGYfPQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.26.0",
+ "@typescript-eslint/visitor-keys": "8.26.0",
+ "debug": "^4.3.4",
+ "fast-glob": "^3.3.2",
+ "is-glob": "^4.0.3",
+ "minimatch": "^9.0.4",
+ "semver": "^7.6.0",
+ "ts-api-utils": "^2.0.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils": {
+ "version": "8.26.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.26.0.tgz",
+ "integrity": "sha512-2L2tU3FVwhvU14LndnQCA2frYC8JnPDVKyQtWFPf8IYFMt/ykEN1bPolNhNbCVgOmdzTlWdusCTKA/9nKrf8Ig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@typescript-eslint/scope-manager": "8.26.0",
+ "@typescript-eslint/types": "8.26.0",
+ "@typescript-eslint/typescript-estree": "8.26.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/visitor-keys": {
+ "version": "8.26.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.0.tgz",
+ "integrity": "sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.26.0",
+ "eslint-visitor-keys": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/eslint-plugin-github/node_modules/eslint-visitor-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+ "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-plugin-github/node_modules/espree": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
+ "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.14.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-plugin-github/node_modules/globals": {
+ "version": "15.15.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz",
+ "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint-plugin-github/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/eslint-plugin-github/node_modules/minimatch/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/eslint-plugin-github/node_modules/ts-api-utils": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz",
+ "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.12"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4"
+ }
+ },
+ "node_modules/eslint-plugin-i18n-text": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-i18n-text/-/eslint-plugin-i18n-text-1.0.1.tgz",
+ "integrity": "sha512-3G3UetST6rdqhqW9SfcfzNYMpQXS7wNkJvp6dsXnjzGiku6Iu5hl3B0kmk6lIcFPwYjhQIY+tXVRtK9TlGT7RA==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "eslint": ">=5.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-import": {
+ "version": "2.31.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz",
+ "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@rtsao/scc": "^1.1.0",
+ "array-includes": "^3.1.8",
+ "array.prototype.findlastindex": "^1.2.5",
+ "array.prototype.flat": "^1.3.2",
+ "array.prototype.flatmap": "^1.3.2",
+ "debug": "^3.2.7",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.9",
+ "eslint-module-utils": "^2.12.0",
+ "hasown": "^2.0.2",
+ "is-core-module": "^2.15.1",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.1.2",
+ "object.fromentries": "^2.0.8",
+ "object.groupby": "^1.0.3",
+ "object.values": "^1.2.0",
+ "semver": "^6.3.1",
+ "string.prototype.trimend": "^1.0.8",
+ "tsconfig-paths": "^3.15.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-plugin-jest": {
+ "version": "28.11.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.11.0.tgz",
+ "integrity": "sha512-QAfipLcNCWLVocVbZW8GimKn5p5iiMcgGbRzz8z/P5q7xw+cNEpYqyzFMtIF/ZgF2HLOyy+dYBut+DoYolvqig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/utils": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "engines": {
+ "node": "^16.10.0 || ^18.12.0 || >=20.0.0"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/eslint-plugin": "^6.0.0 || ^7.0.0 || ^8.0.0",
+ "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0",
+ "jest": "*"
+ },
+ "peerDependenciesMeta": {
+ "@typescript-eslint/eslint-plugin": {
+ "optional": true
+ },
+ "jest": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-plugin-jsx-a11y": {
+ "version": "6.10.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz",
+ "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "aria-query": "^5.3.2",
+ "array-includes": "^3.1.8",
+ "array.prototype.flatmap": "^1.3.2",
+ "ast-types-flow": "^0.0.8",
+ "axe-core": "^4.10.0",
+ "axobject-query": "^4.1.0",
+ "damerau-levenshtein": "^1.0.8",
+ "emoji-regex": "^9.2.2",
+ "hasown": "^2.0.2",
+ "jsx-ast-utils": "^3.3.5",
+ "language-tags": "^1.0.9",
+ "minimatch": "^3.1.2",
+ "object.fromentries": "^2.0.8",
+ "safe-regex-test": "^1.0.3",
+ "string.prototype.includes": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9"
+ }
+ },
+ "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/eslint-plugin-no-only-tests": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-3.3.0.tgz",
+ "integrity": "sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=5.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-prettier": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.3.tgz",
+ "integrity": "sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prettier-linter-helpers": "^1.0.0",
+ "synckit": "^0.9.1"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint-plugin-prettier"
+ },
+ "peerDependencies": {
+ "@types/eslint": ">=8.0.0",
+ "eslint": ">=8.0.0",
+ "eslint-config-prettier": "*",
+ "prettier": ">=3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/eslint": {
+ "optional": true
+ },
+ "eslint-config-prettier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-rule-documentation": {
+ "version": "1.0.23",
+ "resolved": "https://registry.npmjs.org/eslint-rule-documentation/-/eslint-rule-documentation-1.0.23.tgz",
+ "integrity": "sha512-pWReu3fkohwyvztx/oQWWgld2iad25TfUdi6wvhhaDPIQjHU/pyvlKgXFw1kX31SQK2Nq9MH+vRDWB0ZLy8fYw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/eslint/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/expect": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
+ "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/expect-utils": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/fast-content-type-parse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz",
+ "integrity": "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-diff": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
+ "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.8"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fastq": {
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
+ "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fb-watchman": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
+ "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "bser": "2.1.1"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/filelist": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
+ "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "minimatch": "^5.0.1"
+ }
+ },
+ "node_modules/filelist/node_modules/minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+ "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.3",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
+ "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.9",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
+ "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/for-each": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
+ "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-callable": "^1.2.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz",
+ "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "es-set-tostringtag": "^2.1.0",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/function.prototype.name": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz",
+ "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "functions-have-names": "^1.2.3",
+ "hasown": "^2.0.2",
+ "is-callable": "^1.2.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-package-type": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
+ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/get-symbol-description": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
+ "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/glob/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/glob/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/globals": {
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globalthis": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
+ "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-properties": "^1.2.1",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/has-bigints": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
+ "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
+ "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/html-escaper": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=10.17.0"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/import-local": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz",
+ "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pkg-dir": "^4.2.0",
+ "resolve-cwd": "^3.0.0"
+ },
+ "bin": {
+ "import-local-fixture": "fixtures/cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/internal-slot": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
+ "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "hasown": "^2.0.2",
+ "side-channel": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/is-array-buffer": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
+ "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "get-intrinsic": "^1.2.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-async-function": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz",
+ "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "async-function": "^1.0.0",
+ "call-bound": "^1.0.3",
+ "get-proto": "^1.0.1",
+ "has-tostringtag": "^1.0.2",
+ "safe-regex-test": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-bigint": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
+ "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-bigints": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-boolean-object": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz",
+ "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.16.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-data-view": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
+ "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "get-intrinsic": "^1.2.6",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-date-object": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
+ "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-finalizationregistry": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
+ "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-generator-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
+ "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/is-generator-function": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz",
+ "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "get-proto": "^1.0.0",
+ "has-tostringtag": "^1.0.2",
+ "safe-regex-test": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-map": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
+ "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-number-object": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
+ "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-regex": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
+ "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "gopd": "^1.2.0",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-set": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
+ "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-shared-array-buffer": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz",
+ "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-string": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
+ "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-symbol": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
+ "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "has-symbols": "^1.1.0",
+ "safe-regex-test": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
+ "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "which-typed-array": "^1.1.16"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakmap": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
+ "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakref": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz",
+ "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakset": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz",
+ "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "get-intrinsic": "^1.2.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/istanbul-lib-coverage": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
+ "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-instrument": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz",
+ "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@babel/core": "^7.23.9",
+ "@babel/parser": "^7.23.9",
+ "@istanbuljs/schema": "^0.1.3",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-lib-report": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
+ "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^4.0.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-lib-source-maps": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
+ "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "debug": "^4.1.1",
+ "istanbul-lib-coverage": "^3.0.0",
+ "source-map": "^0.6.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-reports": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz",
+ "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jake": {
+ "version": "10.9.2",
+ "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz",
+ "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "async": "^3.2.3",
+ "chalk": "^4.0.2",
+ "filelist": "^1.0.4",
+ "minimatch": "^3.1.2"
+ },
+ "bin": {
+ "jake": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/jake/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/jake/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/jest": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
+ "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/core": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "import-local": "^3.0.2",
+ "jest-cli": "^29.7.0"
+ },
+ "bin": {
+ "jest": "bin/jest.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-changed-files": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz",
+ "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "execa": "^5.0.0",
+ "jest-util": "^29.7.0",
+ "p-limit": "^3.1.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-circus": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz",
+ "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/environment": "^29.7.0",
+ "@jest/expect": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "co": "^4.6.0",
+ "dedent": "^1.0.0",
+ "is-generator-fn": "^2.0.0",
+ "jest-each": "^29.7.0",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "p-limit": "^3.1.0",
+ "pretty-format": "^29.7.0",
+ "pure-rand": "^6.0.0",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-cli": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
+ "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/core": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "chalk": "^4.0.0",
+ "create-jest": "^29.7.0",
+ "exit": "^0.1.2",
+ "import-local": "^3.0.2",
+ "jest-config": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "yargs": "^17.3.1"
+ },
+ "bin": {
+ "jest": "bin/jest.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-config": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
+ "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.11.6",
+ "@jest/test-sequencer": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "babel-jest": "^29.7.0",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "deepmerge": "^4.2.2",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "jest-circus": "^29.7.0",
+ "jest-environment-node": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-runner": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "parse-json": "^5.2.0",
+ "pretty-format": "^29.7.0",
+ "slash": "^3.0.0",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@types/node": "*",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-diff": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
+ "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "diff-sequences": "^29.6.3",
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-docblock": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
+ "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "detect-newline": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-each": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
+ "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "chalk": "^4.0.0",
+ "jest-get-type": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-environment-node": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz",
+ "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/environment": "^29.7.0",
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "jest-mock": "^29.7.0",
+ "jest-util": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-get-type": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
+ "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-haste-map": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
+ "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/graceful-fs": "^4.1.3",
+ "@types/node": "*",
+ "anymatch": "^3.0.3",
+ "fb-watchman": "^2.0.0",
+ "graceful-fs": "^4.2.9",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "jest-worker": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "walker": "^1.0.8"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "^2.3.2"
+ }
+ },
+ "node_modules/jest-leak-detector": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz",
+ "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-matcher-utils": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz",
+ "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "jest-diff": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-message-util": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
+ "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.12.13",
+ "@jest/types": "^29.6.3",
+ "@types/stack-utils": "^2.0.0",
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "micromatch": "^4.0.4",
+ "pretty-format": "^29.7.0",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-mock": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz",
+ "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "jest-util": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-pnp-resolver": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
+ "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ },
+ "peerDependencies": {
+ "jest-resolve": "*"
+ },
+ "peerDependenciesMeta": {
+ "jest-resolve": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-regex-util": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
+ "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-resolve": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz",
+ "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.7.0",
+ "jest-pnp-resolver": "^1.2.2",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "resolve": "^1.20.0",
+ "resolve.exports": "^2.0.0",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-resolve-dependencies": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz",
+ "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "jest-regex-util": "^29.6.3",
+ "jest-snapshot": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-runner": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz",
+ "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/console": "^29.7.0",
+ "@jest/environment": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "emittery": "^0.13.1",
+ "graceful-fs": "^4.2.9",
+ "jest-docblock": "^29.7.0",
+ "jest-environment-node": "^29.7.0",
+ "jest-haste-map": "^29.7.0",
+ "jest-leak-detector": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-resolve": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-watcher": "^29.7.0",
+ "jest-worker": "^29.7.0",
+ "p-limit": "^3.1.0",
+ "source-map-support": "0.5.13"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-runtime": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz",
+ "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/environment": "^29.7.0",
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/globals": "^29.7.0",
+ "@jest/source-map": "^29.6.3",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "cjs-module-lexer": "^1.0.0",
+ "collect-v8-coverage": "^1.0.0",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-mock": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "slash": "^3.0.0",
+ "strip-bom": "^4.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-snapshot": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz",
+ "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.11.6",
+ "@babel/generator": "^7.7.2",
+ "@babel/plugin-syntax-jsx": "^7.7.2",
+ "@babel/plugin-syntax-typescript": "^7.7.2",
+ "@babel/types": "^7.3.3",
+ "@jest/expect-utils": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "babel-preset-current-node-syntax": "^1.0.0",
+ "chalk": "^4.0.0",
+ "expect": "^29.7.0",
+ "graceful-fs": "^4.2.9",
+ "jest-diff": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "natural-compare": "^1.4.0",
+ "pretty-format": "^29.7.0",
+ "semver": "^7.5.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-util": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "graceful-fs": "^4.2.9",
+ "picomatch": "^2.2.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-validate": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
+ "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "camelcase": "^6.2.0",
+ "chalk": "^4.0.0",
+ "jest-get-type": "^29.6.3",
+ "leven": "^3.1.0",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-validate/node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/jest-watcher": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz",
+ "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.0.0",
+ "emittery": "^0.13.1",
+ "jest-util": "^29.7.0",
+ "string-length": "^4.0.1"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-worker": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
+ "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*",
+ "jest-util": "^29.7.0",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^8.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-worker/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/jsx-ast-utils": {
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
+ "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-includes": "^3.1.6",
+ "array.prototype.flat": "^1.3.1",
+ "object.assign": "^4.1.4",
+ "object.values": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/kleur": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/language-subtag-registry": {
+ "version": "0.3.23",
+ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz",
+ "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==",
+ "dev": true,
+ "license": "CC0-1.0"
+ },
+ "node_modules/language-tags": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz",
+ "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "language-subtag-registry": "^0.3.20"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/leven": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
+ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.kebabcase": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz",
+ "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.snakecase": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz",
+ "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.upperfirst": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz",
+ "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/make-dir": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
+ "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "semver": "^7.5.3"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/make-error": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/makeerror": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
+ "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "tmpl": "1.0.5"
+ }
+ },
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "license": "MIT",
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/node-int64": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
+ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.19",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
+ "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.4",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz",
+ "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0",
+ "has-symbols": "^1.1.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.fromentries": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
+ "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.groupby": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
+ "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.values": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz",
+ "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/own-keys": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz",
+ "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.2.6",
+ "object-keys": "^1.1.1",
+ "safe-push-apply": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
+ "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/possible-typed-array-names": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
+ "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
+ "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/prettier-linter-helpers": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
+ "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-diff": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/pretty-format": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
+ "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/schemas": "^29.6.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/prompts": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
+ "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kleur": "^3.0.3",
+ "sisteransi": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pure-rand": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz",
+ "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/dubzzz"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fast-check"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/reflect.getprototypeof": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
+ "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.9",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.7",
+ "get-proto": "^1.0.1",
+ "which-builtin-type": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
+ "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-errors": "^1.3.0",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "set-function-name": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.10",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
+ "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-core-module": "^2.16.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-cwd": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
+ "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/resolve-cwd/node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/resolve.exports": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz",
+ "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/safe-array-concat": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
+ "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.2",
+ "get-intrinsic": "^1.2.6",
+ "has-symbols": "^1.1.0",
+ "isarray": "^2.0.5"
+ },
+ "engines": {
+ "node": ">=0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safe-push-apply": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz",
+ "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "isarray": "^2.0.5"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safe-regex-test": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
+ "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "is-regex": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+ "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/set-function-name": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+ "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "functions-have-names": "^1.2.3",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/set-proto": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz",
+ "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
+ "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3",
+ "side-channel-list": "^1.0.0",
+ "side-channel-map": "^1.0.1",
+ "side-channel-weakmap": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-list": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
+ "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-weakmap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3",
+ "side-channel-map": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/sisteransi": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.13",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+ "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/stack-utils": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
+ "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "escape-string-regexp": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/stack-utils/node_modules/escape-string-regexp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-length": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
+ "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "char-regex": "^1.0.2",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/string.prototype.includes": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz",
+ "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/string.prototype.trim": {
+ "version": "1.2.10",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
+ "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.2",
+ "define-data-property": "^1.1.4",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.5",
+ "es-object-atoms": "^1.0.0",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimend": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz",
+ "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.2",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimstart": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+ "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
+ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/svg-element-attributes": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/svg-element-attributes/-/svg-element-attributes-1.3.1.tgz",
+ "integrity": "sha512-Bh05dSOnJBf3miNMqpsormfNtfidA/GxQVakhtn0T4DECWKeXQRQUceYjJ+OxYiiLdGe4Jo9iFV8wICFapFeIA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/synckit": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz",
+ "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@pkgr/core": "^0.1.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts"
+ }
+ },
+ "node_modules/test-exclude": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
+ "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "@istanbuljs/schema": "^0.1.2",
+ "glob": "^7.1.4",
+ "minimatch": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/test-exclude/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/test-exclude/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tmpl": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
+ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/ts-api-utils": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz",
+ "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.2.0"
+ }
+ },
+ "node_modules/ts-jest": {
+ "version": "29.2.6",
+ "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.6.tgz",
+ "integrity": "sha512-yTNZVZqc8lSixm+QGVFcPe6+yj7+TWZwIesuOWvfcn4B9bz5x4NDzVCQQjOs7Hfouu36aEqfEbo9Qpo+gq8dDg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bs-logger": "^0.2.6",
+ "ejs": "^3.1.10",
+ "fast-json-stable-stringify": "^2.1.0",
+ "jest-util": "^29.0.0",
+ "json5": "^2.2.3",
+ "lodash.memoize": "^4.1.2",
+ "make-error": "^1.3.6",
+ "semver": "^7.7.1",
+ "yargs-parser": "^21.1.1"
+ },
+ "bin": {
+ "ts-jest": "cli.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": ">=7.0.0-beta.0 <8",
+ "@jest/transform": "^29.0.0",
+ "@jest/types": "^29.0.0",
+ "babel-jest": "^29.0.0",
+ "jest": "^29.0.0",
+ "typescript": ">=4.3 <6"
+ },
+ "peerDependenciesMeta": {
+ "@babel/core": {
+ "optional": true
+ },
+ "@jest/transform": {
+ "optional": true
+ },
+ "@jest/types": {
+ "optional": true
+ },
+ "babel-jest": {
+ "optional": true
+ },
+ "esbuild": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tsconfig-paths": {
+ "version": "3.15.0",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
+ "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.2",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "node_modules/tsconfig-paths/node_modules/json5": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ }
+ },
+ "node_modules/tsconfig-paths/node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "license": "0BSD"
+ },
+ "node_modules/tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.6.11 <=0.7.0 || >=0.7.3"
+ }
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typed-array-buffer": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
+ "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "is-typed-array": "^1.1.14"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/typed-array-byte-length": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz",
+ "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "for-each": "^0.3.3",
+ "gopd": "^1.2.0",
+ "has-proto": "^1.2.0",
+ "is-typed-array": "^1.1.14"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-byte-offset": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz",
+ "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "for-each": "^0.3.3",
+ "gopd": "^1.2.0",
+ "has-proto": "^1.2.0",
+ "is-typed-array": "^1.1.15",
+ "reflect.getprototypeof": "^1.0.9"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-length": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz",
+ "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "is-typed-array": "^1.1.13",
+ "possible-typed-array-names": "^1.0.0",
+ "reflect.getprototypeof": "^1.0.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.8.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz",
+ "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/typescript-eslint": {
+ "version": "8.26.0",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.26.0.tgz",
+ "integrity": "sha512-PtVz9nAnuNJuAVeUFvwztjuUgSnJInODAUx47VDwWPXzd5vismPOtPtt83tzNXyOjVQbPRp786D6WFW/M2koIA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/eslint-plugin": "8.26.0",
+ "@typescript-eslint/parser": "8.26.0",
+ "@typescript-eslint/utils": "8.26.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "node_modules/typescript-eslint/node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "8.26.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.0.tgz",
+ "integrity": "sha512-cLr1J6pe56zjKYajK6SSSre6nl1Gj6xDp1TY0trpgPzjVbgDwd09v2Ws37LABxzkicmUjhEeg/fAUjPJJB1v5Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.10.0",
+ "@typescript-eslint/scope-manager": "8.26.0",
+ "@typescript-eslint/type-utils": "8.26.0",
+ "@typescript-eslint/utils": "8.26.0",
+ "@typescript-eslint/visitor-keys": "8.26.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.3.1",
+ "natural-compare": "^1.4.0",
+ "ts-api-utils": "^2.0.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": {
+ "version": "8.26.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.26.0.tgz",
+ "integrity": "sha512-mNtXP9LTVBy14ZF3o7JG69gRPBK/2QWtQd0j0oH26HcY/foyJJau6pNUez7QrM5UHnSvwlQcJXKsk0I99B9pOA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "8.26.0",
+ "@typescript-eslint/types": "8.26.0",
+ "@typescript-eslint/typescript-estree": "8.26.0",
+ "@typescript-eslint/visitor-keys": "8.26.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "node_modules/typescript-eslint/node_modules/@typescript-eslint/scope-manager": {
+ "version": "8.26.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.26.0.tgz",
+ "integrity": "sha512-E0ntLvsfPqnPwng8b8y4OGuzh/iIOm2z8U3S9zic2TeMLW61u5IH2Q1wu0oSTkfrSzwbDJIB/Lm8O3//8BWMPA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.26.0",
+ "@typescript-eslint/visitor-keys": "8.26.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/typescript-eslint/node_modules/@typescript-eslint/type-utils": {
+ "version": "8.26.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.26.0.tgz",
+ "integrity": "sha512-ruk0RNChLKz3zKGn2LwXuVoeBcUMh+jaqzN461uMMdxy5H9epZqIBtYj7UiPXRuOpaALXGbmRuZQhmwHhaS04Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "8.26.0",
+ "@typescript-eslint/utils": "8.26.0",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^2.0.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "node_modules/typescript-eslint/node_modules/@typescript-eslint/types": {
+ "version": "8.26.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.26.0.tgz",
+ "integrity": "sha512-89B1eP3tnpr9A8L6PZlSjBvnJhWXtYfZhECqlBl1D9Lme9mHO6iWlsprBtVenQvY1HMhax1mWOjhtL3fh/u+pA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": {
+ "version": "8.26.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.0.tgz",
+ "integrity": "sha512-tiJ1Hvy/V/oMVRTbEOIeemA2XoylimlDQ03CgPPNaHYZbpsc78Hmngnt+WXZfJX1pjQ711V7g0H7cSJThGYfPQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.26.0",
+ "@typescript-eslint/visitor-keys": "8.26.0",
+ "debug": "^4.3.4",
+ "fast-glob": "^3.3.2",
+ "is-glob": "^4.0.3",
+ "minimatch": "^9.0.4",
+ "semver": "^7.6.0",
+ "ts-api-utils": "^2.0.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": {
+ "version": "8.26.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.26.0.tgz",
+ "integrity": "sha512-2L2tU3FVwhvU14LndnQCA2frYC8JnPDVKyQtWFPf8IYFMt/ykEN1bPolNhNbCVgOmdzTlWdusCTKA/9nKrf8Ig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@typescript-eslint/scope-manager": "8.26.0",
+ "@typescript-eslint/types": "8.26.0",
+ "@typescript-eslint/typescript-estree": "8.26.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "node_modules/typescript-eslint/node_modules/@typescript-eslint/visitor-keys": {
+ "version": "8.26.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.0.tgz",
+ "integrity": "sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.26.0",
+ "eslint-visitor-keys": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/typescript-eslint/node_modules/eslint-visitor-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+ "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/typescript-eslint/node_modules/ts-api-utils": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz",
+ "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.12"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4"
+ }
+ },
+ "node_modules/unbox-primitive": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
+ "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.1.0",
+ "which-boxed-primitive": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/undici": {
+ "version": "5.28.5",
+ "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.5.tgz",
+ "integrity": "sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==",
+ "license": "MIT",
+ "dependencies": {
+ "@fastify/busboy": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14.0"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "6.20.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
+ "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/universal-user-agent": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz",
+ "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==",
+ "license": "ISC"
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
+ "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/v8-to-istanbul": {
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz",
+ "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.12",
+ "@types/istanbul-lib-coverage": "^2.0.1",
+ "convert-source-map": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10.12.0"
+ }
+ },
+ "node_modules/walker": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
+ "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "makeerror": "1.0.12"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/which-boxed-primitive": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz",
+ "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-bigint": "^1.1.0",
+ "is-boolean-object": "^1.2.1",
+ "is-number-object": "^1.1.1",
+ "is-string": "^1.1.1",
+ "is-symbol": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-builtin-type": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
+ "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "function.prototype.name": "^1.1.6",
+ "has-tostringtag": "^1.0.2",
+ "is-async-function": "^2.0.0",
+ "is-date-object": "^1.1.0",
+ "is-finalizationregistry": "^1.1.0",
+ "is-generator-function": "^1.0.10",
+ "is-regex": "^1.2.1",
+ "is-weakref": "^1.0.2",
+ "isarray": "^2.0.5",
+ "which-boxed-primitive": "^1.1.0",
+ "which-collection": "^1.0.2",
+ "which-typed-array": "^1.1.16"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-collection": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
+ "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-map": "^2.0.3",
+ "is-set": "^2.0.3",
+ "is-weakmap": "^2.0.2",
+ "is-weakset": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-typed-array": {
+ "version": "1.1.19",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz",
+ "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.4",
+ "for-each": "^0.3.5",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "license": "ISC"
+ },
+ "node_modules/write-file-atomic": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
+ "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.7"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/yaml": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz",
+ "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==",
+ "license": "ISC",
+ "bin": {
+ "yaml": "bin.mjs"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..8b5aef8
--- /dev/null
+++ b/package.json
@@ -0,0 +1,66 @@
+{
+ "name": "@step-security/changed-files",
+ "version": "45.0.7",
+ "description": "Github action to retrieve all (added, copied, modified, deleted, renamed, type changed, unmerged, unknown) files and directories.",
+ "main": "dist/main.js",
+ "publishConfig": {
+ "registry": "https://npm.pkg.github.com"
+ },
+ "scripts": {
+ "build": "tsc",
+ "format": "prettier --write src/*.ts src/**/*.ts",
+ "format-check": "prettier --check src/*.ts src/**/*.ts",
+ "lint": "eslint src/*.ts src/**/*.ts --max-warnings 0",
+ "lint:fix": "eslint --fix src/*.ts src/**/*.ts",
+ "package": "ncc build lib/main.js --source-map --license licenses.txt",
+ "test": "jest --coverage",
+ "update-snapshot": "jest -u",
+ "all": "yarn build && yarn format && yarn lint && yarn package && yarn test",
+ "pack": "esbuild src/main.ts --outdir=dist --platform=node --bundle"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/step-security/changed-files.git"
+ },
+ "keywords": [
+ "actions",
+ "glob",
+ "github-actions"
+ ],
+ "author": "Tonye Jack",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/step-security/changed-files/issues"
+ },
+ "homepage": "https://github.com/step-security/changed-files#readme",
+ "dependencies": {
+ "@actions/core": "^1.10.0",
+ "@actions/exec": "^1.1.1",
+ "@actions/github": "^6.0.0",
+ "@octokit/rest": "^21.0.0",
+ "@stdlib/utils-convert-path": "^0.2.1",
+ "lodash": "^4.17.21",
+ "micromatch": "^4.0.5",
+ "yaml": "^2.3.1"
+ },
+ "devDependencies": {
+ "@types/jest": "^29.5.2",
+ "@types/lodash": "^4.14.195",
+ "@types/micromatch": "^4.0.2",
+ "@types/node": "^22.0.0",
+ "@types/uuid": "^10.0.0",
+ "@typescript-eslint/eslint-plugin": "^7.0.0",
+ "@typescript-eslint/parser": "^7.0.0",
+ "@vercel/ncc": "^0.38.0",
+ "axios": "^1.8.3",
+ "eslint": "^8.43.0",
+ "eslint-config-prettier": "^10.0.0",
+ "eslint-plugin-github": "^5.0.0",
+ "eslint-plugin-jest": "^28.0.0",
+ "eslint-plugin-prettier": "^5.0.0-alpha.2",
+ "jest": "^29.5.0",
+ "prettier": "^3.0.0",
+ "ts-jest": "^29.1.0",
+ "typescript": "^5.1.3"
+ }
+}
diff --git a/src/__tests__/__snapshots__/inputs.test.ts.snap b/src/__tests__/__snapshots__/inputs.test.ts.snap
new file mode 100644
index 0000000..1725e73
--- /dev/null
+++ b/src/__tests__/__snapshots__/inputs.test.ts.snap
@@ -0,0 +1,373 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`getInputs should correctly parse boolean inputs 1`] = `
+{
+ "apiUrl": "",
+ "baseSha": "",
+ "diffRelative": "false",
+ "dirNames": "false",
+ "dirNamesDeletedFilesIncludeOnlyDeletedDirs": "false",
+ "dirNamesExcludeCurrentDir": "false",
+ "dirNamesIncludeFiles": "",
+ "dirNamesIncludeFilesSeparator": "",
+ "escapeJson": false,
+ "excludeSubmodules": "false",
+ "failOnInitialDiffError": "false",
+ "failOnSubmoduleDiffError": "false",
+ "fetchAdditionalSubmoduleHistory": "false",
+ "fetchMissingHistoryMaxRetries": 20,
+ "files": "",
+ "filesFromSourceFile": "",
+ "filesFromSourceFileSeparator": "",
+ "filesIgnore": "",
+ "filesIgnoreFromSourceFile": "",
+ "filesIgnoreFromSourceFileSeparator": "",
+ "filesIgnoreSeparator": "",
+ "filesIgnoreYaml": "",
+ "filesIgnoreYamlFromSourceFile": "",
+ "filesIgnoreYamlFromSourceFileSeparator": "",
+ "filesSeparator": "",
+ "filesYaml": "",
+ "filesYamlFromSourceFile": "",
+ "filesYamlFromSourceFileSeparator": "",
+ "includeAllOldNewRenamedFiles": "false",
+ "json": true,
+ "negationPatternsFirst": "false",
+ "oldNewFilesSeparator": " ",
+ "oldNewSeparator": ",",
+ "outputDir": "",
+ "outputRenamedFilesAsDeletedAndAdded": "false",
+ "path": ".",
+ "quotepath": "false",
+ "recoverDeletedFiles": "false",
+ "recoverDeletedFilesToDestination": "",
+ "recoverFiles": "",
+ "recoverFilesIgnore": "",
+ "recoverFilesIgnoreSeparator": "
+",
+ "recoverFilesSeparator": "
+",
+ "safeOutput": "false",
+ "separator": "",
+ "sha": "",
+ "since": "",
+ "sinceLastRemoteCommit": "false",
+ "skipInitialFetch": "true",
+ "tagsIgnorePattern": "",
+ "tagsPattern": "*",
+ "token": "",
+ "until": "",
+ "usePosixPathSeparator": "false",
+ "useRestApi": "false",
+ "writeOutputFiles": "false",
+}
+`;
+
+exports[`getInputs should correctly parse numeric inputs 1`] = `
+{
+ "apiUrl": "",
+ "baseSha": "",
+ "diffRelative": true,
+ "dirNames": false,
+ "dirNamesDeletedFilesIncludeOnlyDeletedDirs": false,
+ "dirNamesExcludeCurrentDir": false,
+ "dirNamesIncludeFiles": "",
+ "dirNamesIncludeFilesSeparator": "",
+ "dirNamesMaxDepth": 2,
+ "escapeJson": false,
+ "excludeSubmodules": false,
+ "failOnInitialDiffError": false,
+ "failOnSubmoduleDiffError": false,
+ "fetchAdditionalSubmoduleHistory": false,
+ "fetchDepth": 5,
+ "files": "",
+ "filesFromSourceFile": "",
+ "filesFromSourceFileSeparator": "",
+ "filesIgnore": "",
+ "filesIgnoreFromSourceFile": "",
+ "filesIgnoreFromSourceFileSeparator": "",
+ "filesIgnoreSeparator": "",
+ "filesIgnoreYaml": "",
+ "filesIgnoreYamlFromSourceFile": "",
+ "filesIgnoreYamlFromSourceFileSeparator": "",
+ "filesSeparator": "",
+ "filesYaml": "",
+ "filesYamlFromSourceFile": "",
+ "filesYamlFromSourceFileSeparator": "",
+ "includeAllOldNewRenamedFiles": false,
+ "json": false,
+ "negationPatternsFirst": false,
+ "oldNewFilesSeparator": "",
+ "oldNewSeparator": "",
+ "outputDir": "",
+ "outputRenamedFilesAsDeletedAndAdded": false,
+ "path": "",
+ "quotepath": true,
+ "recoverDeletedFiles": false,
+ "recoverDeletedFilesToDestination": "",
+ "recoverFiles": "",
+ "recoverFilesIgnore": "",
+ "recoverFilesIgnoreSeparator": "",
+ "recoverFilesSeparator": "",
+ "safeOutput": false,
+ "separator": "",
+ "sha": "",
+ "since": "",
+ "sinceLastRemoteCommit": false,
+ "skipInitialFetch": false,
+ "tagsIgnorePattern": "",
+ "tagsPattern": "",
+ "token": "",
+ "until": "",
+ "usePosixPathSeparator": false,
+ "useRestApi": false,
+ "writeOutputFiles": false,
+}
+`;
+
+exports[`getInputs should correctly parse string inputs 1`] = `
+{
+ "apiUrl": "https://api.github.com",
+ "baseSha": "",
+ "diffRelative": true,
+ "dirNames": false,
+ "dirNamesDeletedFilesIncludeOnlyDeletedDirs": false,
+ "dirNamesExcludeCurrentDir": false,
+ "dirNamesIncludeFiles": "",
+ "dirNamesIncludeFilesSeparator": "",
+ "escapeJson": false,
+ "excludeSubmodules": false,
+ "failOnInitialDiffError": false,
+ "failOnSubmoduleDiffError": false,
+ "fetchAdditionalSubmoduleHistory": false,
+ "files": "",
+ "filesFromSourceFile": "",
+ "filesFromSourceFileSeparator": "",
+ "filesIgnore": "",
+ "filesIgnoreFromSourceFile": "",
+ "filesIgnoreFromSourceFileSeparator": "",
+ "filesIgnoreSeparator": "",
+ "filesIgnoreYaml": "",
+ "filesIgnoreYamlFromSourceFile": "",
+ "filesIgnoreYamlFromSourceFileSeparator": "",
+ "filesSeparator": "",
+ "filesYaml": "",
+ "filesYamlFromSourceFile": "",
+ "filesYamlFromSourceFileSeparator": "",
+ "includeAllOldNewRenamedFiles": false,
+ "json": false,
+ "negationPatternsFirst": false,
+ "oldNewFilesSeparator": "",
+ "oldNewSeparator": "",
+ "outputDir": "",
+ "outputRenamedFilesAsDeletedAndAdded": false,
+ "path": "",
+ "quotepath": true,
+ "recoverDeletedFiles": false,
+ "recoverDeletedFilesToDestination": "",
+ "recoverFiles": "",
+ "recoverFilesIgnore": "",
+ "recoverFilesIgnoreSeparator": "",
+ "recoverFilesSeparator": "",
+ "safeOutput": false,
+ "separator": "",
+ "sha": "",
+ "since": "",
+ "sinceLastRemoteCommit": false,
+ "skipInitialFetch": false,
+ "tagsIgnorePattern": "",
+ "tagsPattern": "",
+ "token": "token",
+ "until": "",
+ "usePosixPathSeparator": false,
+ "useRestApi": false,
+ "writeOutputFiles": false,
+}
+`;
+
+exports[`getInputs should handle invalid numeric inputs correctly 1`] = `
+{
+ "apiUrl": "",
+ "baseSha": "",
+ "diffRelative": true,
+ "dirNames": false,
+ "dirNamesDeletedFilesIncludeOnlyDeletedDirs": false,
+ "dirNamesExcludeCurrentDir": false,
+ "dirNamesIncludeFiles": "",
+ "dirNamesIncludeFilesSeparator": "",
+ "dirNamesMaxDepth": 2,
+ "escapeJson": false,
+ "excludeSubmodules": false,
+ "failOnInitialDiffError": false,
+ "failOnSubmoduleDiffError": false,
+ "fetchAdditionalSubmoduleHistory": false,
+ "fetchDepth": NaN,
+ "files": "",
+ "filesFromSourceFile": "",
+ "filesFromSourceFileSeparator": "",
+ "filesIgnore": "",
+ "filesIgnoreFromSourceFile": "",
+ "filesIgnoreFromSourceFileSeparator": "",
+ "filesIgnoreSeparator": "",
+ "filesIgnoreYaml": "",
+ "filesIgnoreYamlFromSourceFile": "",
+ "filesIgnoreYamlFromSourceFileSeparator": "",
+ "filesSeparator": "",
+ "filesYaml": "",
+ "filesYamlFromSourceFile": "",
+ "filesYamlFromSourceFileSeparator": "",
+ "includeAllOldNewRenamedFiles": false,
+ "json": false,
+ "negationPatternsFirst": false,
+ "oldNewFilesSeparator": "",
+ "oldNewSeparator": "",
+ "outputDir": "",
+ "outputRenamedFilesAsDeletedAndAdded": false,
+ "path": "",
+ "quotepath": true,
+ "recoverDeletedFiles": false,
+ "recoverDeletedFilesToDestination": "",
+ "recoverFiles": "",
+ "recoverFilesIgnore": "",
+ "recoverFilesIgnoreSeparator": "",
+ "recoverFilesSeparator": "",
+ "safeOutput": false,
+ "separator": "",
+ "sha": "",
+ "since": "",
+ "sinceLastRemoteCommit": false,
+ "skipInitialFetch": false,
+ "tagsIgnorePattern": "",
+ "tagsPattern": "",
+ "token": "",
+ "until": "",
+ "usePosixPathSeparator": false,
+ "useRestApi": false,
+ "writeOutputFiles": false,
+}
+`;
+
+exports[`getInputs should handle negative numeric inputs correctly 1`] = `
+{
+ "apiUrl": "",
+ "baseSha": "",
+ "diffRelative": true,
+ "dirNames": false,
+ "dirNamesDeletedFilesIncludeOnlyDeletedDirs": false,
+ "dirNamesExcludeCurrentDir": false,
+ "dirNamesIncludeFiles": "",
+ "dirNamesIncludeFilesSeparator": "",
+ "dirNamesMaxDepth": -2,
+ "escapeJson": false,
+ "excludeSubmodules": false,
+ "failOnInitialDiffError": false,
+ "failOnSubmoduleDiffError": false,
+ "fetchAdditionalSubmoduleHistory": false,
+ "fetchDepth": 2,
+ "files": "",
+ "filesFromSourceFile": "",
+ "filesFromSourceFileSeparator": "",
+ "filesIgnore": "",
+ "filesIgnoreFromSourceFile": "",
+ "filesIgnoreFromSourceFileSeparator": "",
+ "filesIgnoreSeparator": "",
+ "filesIgnoreYaml": "",
+ "filesIgnoreYamlFromSourceFile": "",
+ "filesIgnoreYamlFromSourceFileSeparator": "",
+ "filesSeparator": "",
+ "filesYaml": "",
+ "filesYamlFromSourceFile": "",
+ "filesYamlFromSourceFileSeparator": "",
+ "includeAllOldNewRenamedFiles": false,
+ "json": false,
+ "negationPatternsFirst": false,
+ "oldNewFilesSeparator": "",
+ "oldNewSeparator": "",
+ "outputDir": "",
+ "outputRenamedFilesAsDeletedAndAdded": false,
+ "path": "",
+ "quotepath": true,
+ "recoverDeletedFiles": false,
+ "recoverDeletedFilesToDestination": "",
+ "recoverFiles": "",
+ "recoverFilesIgnore": "",
+ "recoverFilesIgnoreSeparator": "",
+ "recoverFilesSeparator": "",
+ "safeOutput": false,
+ "separator": "",
+ "sha": "",
+ "since": "",
+ "sinceLastRemoteCommit": false,
+ "skipInitialFetch": false,
+ "tagsIgnorePattern": "",
+ "tagsPattern": "",
+ "token": "",
+ "until": "",
+ "usePosixPathSeparator": false,
+ "useRestApi": false,
+ "writeOutputFiles": false,
+}
+`;
+
+exports[`getInputs should return default values when no inputs are provided 1`] = `
+{
+ "apiUrl": "",
+ "baseSha": "",
+ "diffRelative": true,
+ "dirNames": false,
+ "dirNamesDeletedFilesIncludeOnlyDeletedDirs": false,
+ "dirNamesExcludeCurrentDir": false,
+ "dirNamesIncludeFiles": "",
+ "dirNamesIncludeFilesSeparator": "",
+ "escapeJson": false,
+ "excludeSubmodules": false,
+ "failOnInitialDiffError": false,
+ "failOnSubmoduleDiffError": false,
+ "fetchAdditionalSubmoduleHistory": false,
+ "fetchMissingHistoryMaxRetries": 20,
+ "files": "",
+ "filesFromSourceFile": "",
+ "filesFromSourceFileSeparator": "",
+ "filesIgnore": "",
+ "filesIgnoreFromSourceFile": "",
+ "filesIgnoreFromSourceFileSeparator": "",
+ "filesIgnoreSeparator": "",
+ "filesIgnoreYaml": "",
+ "filesIgnoreYamlFromSourceFile": "",
+ "filesIgnoreYamlFromSourceFileSeparator": "",
+ "filesSeparator": "",
+ "filesYaml": "",
+ "filesYamlFromSourceFile": "",
+ "filesYamlFromSourceFileSeparator": "",
+ "includeAllOldNewRenamedFiles": false,
+ "json": false,
+ "negationPatternsFirst": false,
+ "oldNewFilesSeparator": " ",
+ "oldNewSeparator": ",",
+ "outputDir": "",
+ "outputRenamedFilesAsDeletedAndAdded": false,
+ "path": ".",
+ "quotepath": true,
+ "recoverDeletedFiles": false,
+ "recoverDeletedFilesToDestination": "",
+ "recoverFiles": "",
+ "recoverFilesIgnore": "",
+ "recoverFilesIgnoreSeparator": "
+",
+ "recoverFilesSeparator": "
+",
+ "safeOutput": false,
+ "separator": "",
+ "sha": "",
+ "since": "",
+ "sinceLastRemoteCommit": false,
+ "skipInitialFetch": false,
+ "tagsIgnorePattern": "",
+ "tagsPattern": "*",
+ "token": "",
+ "until": "",
+ "usePosixPathSeparator": false,
+ "useRestApi": false,
+ "writeOutputFiles": false,
+}
+`;
diff --git a/src/__tests__/inputs.test.ts b/src/__tests__/inputs.test.ts
new file mode 100644
index 0000000..cb5859a
--- /dev/null
+++ b/src/__tests__/inputs.test.ts
@@ -0,0 +1,153 @@
+import * as core from '@actions/core'
+import {getInputs, Inputs} from '../inputs'
+import {DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS} from '../constant'
+
+jest.mock('@actions/core')
+
+describe('getInputs', () => {
+ afterEach(() => {
+ jest.clearAllMocks()
+ })
+
+ test('should return default values when no inputs are provided', () => {
+ ;(core.getInput as jest.Mock).mockImplementation(name => {
+ const camelCaseName = name.replace(/_([a-z])/g, (g: string[]) => {
+ return g[1].toUpperCase()
+ }) as keyof Inputs
+
+ return (DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS[camelCaseName] ||
+ '') as string
+ })
+ ;(core.getBooleanInput as jest.Mock).mockImplementation(name => {
+ const camelCaseName = name.replace(/_([a-z])/g, (g: string[]) => {
+ return g[1].toUpperCase()
+ }) as keyof Inputs
+
+ return (DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS[camelCaseName] ||
+ false) as boolean
+ })
+ expect(getInputs()).toMatchSnapshot()
+ })
+
+ test('should correctly parse boolean inputs', () => {
+ ;(core.getInput as jest.Mock).mockImplementation(name => {
+ const camelCaseName = name.replace(/_([a-z])/g, (g: string[]) => {
+ return g[1].toUpperCase()
+ }) as keyof Inputs
+
+ return (DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS[camelCaseName] ||
+ '') as string
+ })
+ ;(core.getBooleanInput as jest.Mock).mockImplementation(name => {
+ switch (name) {
+ case 'matrix':
+ return 'true'
+ case 'skip_initial_fetch':
+ return 'true'
+ default:
+ return 'false'
+ }
+ })
+ expect(getInputs()).toMatchSnapshot()
+ })
+
+ test('should handle matrix alias correctly', () => {
+ ;(core.getBooleanInput as jest.Mock).mockImplementation(name => {
+ return name === 'matrix' ? 'true' : 'false'
+ })
+
+ const inputs = getInputs()
+ expect(inputs).toHaveProperty('json', true)
+ expect(inputs).toHaveProperty('escapeJson', false)
+ })
+
+ test('should correctly parse string inputs', () => {
+ ;(core.getInput as jest.Mock).mockImplementation(name => {
+ switch (name) {
+ case 'token':
+ return 'token'
+ case 'api_url':
+ return 'https://api.github.com'
+ default:
+ return ''
+ }
+ })
+ ;(core.getBooleanInput as jest.Mock).mockImplementation(name => {
+ const camelCaseName = name.replace(/_([a-z])/g, (g: string[]) => {
+ return g[1].toUpperCase()
+ }) as keyof Inputs
+
+ return (DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS[camelCaseName] ||
+ false) as boolean
+ })
+ expect(getInputs()).toMatchSnapshot()
+ })
+
+ test('should correctly parse numeric inputs', () => {
+ ;(core.getInput as jest.Mock).mockImplementation(name => {
+ switch (name) {
+ case 'fetch_depth':
+ return '5'
+ case 'dir_names_max_depth':
+ return '2'
+ default:
+ return ''
+ }
+ })
+ ;(core.getBooleanInput as jest.Mock).mockImplementation(name => {
+ const camelCaseName = name.replace(/_([a-z])/g, (g: string[]) => {
+ return g[1].toUpperCase()
+ }) as keyof Inputs
+
+ return (DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS[camelCaseName] ||
+ false) as boolean
+ })
+ expect(getInputs()).toMatchSnapshot()
+ })
+
+ test('should handle invalid numeric inputs correctly', () => {
+ ;(core.getInput as jest.Mock).mockImplementation(name => {
+ // TODO: Add validation for invalid numbers which should result in an error instead of NaN
+ switch (name) {
+ case 'fetch_depth':
+ return 'invalid'
+ case 'dir_names_max_depth':
+ return '2'
+ default:
+ return ''
+ }
+ })
+ ;(core.getBooleanInput as jest.Mock).mockImplementation(name => {
+ const camelCaseName = name.replace(/_([a-z])/g, (g: string[]) => {
+ return g[1].toUpperCase()
+ }) as keyof Inputs
+
+ return (DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS[camelCaseName] ||
+ false) as boolean
+ })
+ expect(getInputs()).toMatchSnapshot()
+ })
+
+ test('should handle negative numeric inputs correctly', () => {
+ ;(core.getInput as jest.Mock).mockImplementation(name => {
+ // TODO: Add validation for negative numbers which should result in an error
+ switch (name) {
+ case 'fetch_depth':
+ return '-5'
+ case 'dir_names_max_depth':
+ return '-2'
+ default:
+ return ''
+ }
+ })
+ ;(core.getBooleanInput as jest.Mock).mockImplementation(name => {
+ const camelCaseName = name.replace(/_([a-z])/g, (g: string[]) => {
+ return g[1].toUpperCase()
+ }) as keyof Inputs
+
+ return (DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS[camelCaseName] ||
+ false) as boolean
+ })
+ expect(getInputs()).toMatchSnapshot()
+ })
+})
diff --git a/src/__tests__/utils.test.ts b/src/__tests__/utils.test.ts
new file mode 100644
index 0000000..397fbb8
--- /dev/null
+++ b/src/__tests__/utils.test.ts
@@ -0,0 +1,760 @@
+import * as core from '@actions/core'
+import * as exec from '@actions/exec'
+import {ChangeTypeEnum} from '../changedFiles'
+import {Inputs} from '../inputs'
+import {
+ getDirname,
+ getDirnameMaxDepth,
+ getFilteredChangedFiles,
+ getPreviousGitTag,
+ normalizeSeparators,
+ warnUnsupportedRESTAPIInputs
+} from '../utils'
+
+const originalPlatform = process.platform
+
+function mockedPlatform(platform: string): void {
+ Object.defineProperty(process, 'platform', {
+ value: platform
+ })
+}
+
+describe('utils test', () => {
+ afterEach(() => {
+ Object.defineProperty(process, 'platform', {
+ value: originalPlatform
+ })
+ })
+
+ describe('getDirnameMaxDepth_function', () => {
+ // Tests that the function returns the correct dirname when the relative path has multiple directories
+ it('test_multiple_directories', () => {
+ const result = getDirnameMaxDepth({
+ relativePath: 'path/to/some/file',
+ dirNamesMaxDepth: 2,
+ excludeCurrentDir: false
+ })
+ expect(result).toEqual('path/to')
+ })
+
+ // Tests that the function returns the correct dirname when the relative path has only one directory
+ it('test_single_directory', () => {
+ const result = getDirnameMaxDepth({
+ relativePath: 'path/to',
+ dirNamesMaxDepth: 1,
+ excludeCurrentDir: false
+ })
+ expect(result).toEqual('path')
+ })
+
+ // Tests that the function returns the correct dirname when the relative path has no directories
+ it('test_no_directories', () => {
+ const result = getDirnameMaxDepth({
+ relativePath: 'file.txt',
+ dirNamesMaxDepth: 1,
+ excludeCurrentDir: false
+ })
+ expect(result).toEqual('.')
+ })
+
+ // Tests that the function returns the correct dirname when dirNamesMaxDepth is set to a value less than the number of directories in the relative path
+ it('test_dirnames_max_depth_less_than_num_directories', () => {
+ const result = getDirnameMaxDepth({
+ relativePath: 'path/to/some/file',
+ dirNamesMaxDepth: 1,
+ excludeCurrentDir: false
+ })
+ expect(result).toEqual('path')
+ })
+
+ // Tests that the function returns an empty string when excludeCurrentDir is true and the output is '.'
+ it('test_exclude_current_dir_is_true_and_output_is_dot', () => {
+ const result = getDirnameMaxDepth({
+ relativePath: '.',
+ dirNamesMaxDepth: 1,
+ excludeCurrentDir: true
+ })
+ expect(result).toEqual('')
+ })
+
+ // Tests that the function returns the correct dirname when the relative path is a Windows drive root and excludeCurrentDir is true
+ it('test_windows_drive_root_and_exclude_current_dir_is_true', () => {
+ mockedPlatform('win32')
+ const result = getDirnameMaxDepth({
+ relativePath: 'C:\\',
+ dirNamesMaxDepth: 1,
+ excludeCurrentDir: true
+ })
+ expect(result).toEqual('')
+ })
+
+ // Tests that getDirnameMaxDepth handles a relative path with a trailing separator correctly
+ it('test_trailing_separator', () => {
+ const input = {
+ relativePath: 'path/to/dir/',
+ dirNamesMaxDepth: 2,
+ excludeCurrentDir: true
+ }
+ const expectedOutput = 'path/to'
+ const actualOutput = getDirnameMaxDepth(input)
+ expect(actualOutput).toEqual(expectedOutput)
+ })
+
+ // Tests that getDirnameMaxDepth returns an empty string when excludeCurrentDir is true and the output is '.'
+ it('test_trailing_separator_exclude_current_dir', () => {
+ const input = {
+ relativePath: 'file',
+ excludeCurrentDir: true
+ }
+ const expectedOutput = ''
+ const actualOutput = getDirnameMaxDepth(input)
+ expect(actualOutput).toEqual(expectedOutput)
+ })
+
+ // Tests that getDirnameMaxDepth returns the correct output for a Windows UNC root path
+ it('test_windows_unc_root', () => {
+ mockedPlatform('win32')
+ const input = {
+ relativePath: '\\hello',
+ dirNamesMaxDepth: 2,
+ excludeCurrentDir: true
+ }
+ const expectedOutput = ''
+ expect(getDirnameMaxDepth(input)).toEqual(expectedOutput)
+ })
+
+ // Tests that getDirnameMaxDepth returns an empty string when given a Windows UNC root and excludeCurrentDir is true
+ it('test_windows_unc_root_exclude_current_dir', () => {
+ mockedPlatform('win32')
+ const relativePath = '\\hello'
+ const result = getDirnameMaxDepth({
+ relativePath,
+ excludeCurrentDir: true
+ })
+ expect(result).toEqual('')
+ })
+
+ // Tests that getDirnameMaxDepth returns the correct dirname with a relative path that contains both forward and backward slashes
+ it('test_relative_path_with_slashes', () => {
+ const relativePath = 'path/to\file'
+ const expectedOutput = 'path'
+ const actualOutput = getDirnameMaxDepth({relativePath})
+ expect(actualOutput).toEqual(expectedOutput)
+ })
+
+ // Tests that getDirnameMaxDepth returns the correct dirname for a relative path that contains special characters
+ it('test_special_characters', () => {
+ const relativePath =
+ 'path/with/special/characters/!@#$%^&*()_+{}|:<>?[];,./'
+ const expectedDirname = 'path/with/special/characters'
+ const actualDirname = getDirnameMaxDepth({relativePath})
+ expect(actualDirname).toEqual(expectedDirname)
+ })
+ })
+
+ describe('getDirname_function', () => {
+ // Tests that the function returns the correct dirname for a valid path
+ it('test valid path', () => {
+ expect(getDirname('/path/to/file')).toEqual('/path/to')
+ })
+
+ // Tests that the function returns the correct dirname for a valid Windows UNC root path
+ it('test windows unc root path', () => {
+ mockedPlatform('win32')
+ expect(getDirname('\\helloworld')).toEqual('.')
+ })
+
+ // Tests that the function returns the correct dirname for a path with a trailing slash
+ it('test path with trailing slash', () => {
+ expect(getDirname('/path/to/file/')).toEqual('/path/to')
+ })
+
+ // Tests that the function returns the correct dirname for a Windows UNC root path with a trailing slash
+ it('test windows unc root path with trailing slash', () => {
+ mockedPlatform('win32')
+ expect(getDirname('\\hello\\world\\')).toEqual('.')
+ })
+
+ // Tests that the function returns the correct dirname for a path with multiple slashes
+ it('test path with multiple slashes', () => {
+ expect(getDirname('/path//to/file')).toEqual('/path/to')
+ })
+
+ // Tests that the function returns the correct dirname for a Windows UNC root path with multiple slashes
+ it('test windows unc root path with multiple slashes', () => {
+ mockedPlatform('win32')
+ expect(getDirname('\\hello\\world')).toEqual('.')
+ })
+ })
+
+ describe('normalizeSeparators_function', () => {
+ // Tests that forward slashes are normalized on Linux
+ it('test forward slashes linux', () => {
+ const input = 'path/to/file'
+ const expectedOutput = 'path/to/file'
+ const actualOutput = normalizeSeparators(input)
+ expect(actualOutput).toEqual(expectedOutput)
+ })
+
+ // Tests that backslashes are normalized on Windows
+ it('test backslashes windows', () => {
+ mockedPlatform('win32')
+ const input = 'path\\to\\file'
+ const expectedOutput = 'path\\to\\file'
+ const actualOutput = normalizeSeparators(input)
+ expect(actualOutput).toEqual(expectedOutput)
+ })
+
+ // Tests that forward slashes are normalized on Windows
+ it('test mixed slashes windows', () => {
+ mockedPlatform('win32')
+ const input = 'path/to/file'
+ const expectedOutput = 'path\\to\\file'
+ const actualOutput = normalizeSeparators(input)
+ expect(actualOutput).toEqual(expectedOutput)
+ })
+
+ // Tests that mixed slashes are normalized on Windows
+ it('test mixed slashes windows', () => {
+ mockedPlatform('win32')
+ const input = 'path\\to/file'
+ const expectedOutput = 'path\\to\\file'
+ const actualOutput = normalizeSeparators(input)
+ expect(actualOutput).toEqual(expectedOutput)
+ })
+
+ // Tests that an empty string returns an empty string
+ it('test empty string', () => {
+ const input = ''
+ const expectedOutput = ''
+ const actualOutput = normalizeSeparators(input)
+ expect(actualOutput).toEqual(expectedOutput)
+ })
+
+ // Tests that multiple consecutive slashes are removed
+ it('test multiple consecutive slashes', () => {
+ const input = 'path//to//file'
+ const expectedOutput = 'path/to/file'
+ const actualOutput = normalizeSeparators(input)
+ expect(actualOutput).toEqual(expectedOutput)
+ })
+
+ // Tests that UNC format is preserved on Windows
+ it('test unc format windows', () => {
+ mockedPlatform('win32')
+ const input = '\\\\hello\\world'
+ const expectedOutput = '\\\\hello\\world'
+ const actualOutput = normalizeSeparators(input)
+ expect(actualOutput).toEqual(expectedOutput)
+ })
+
+ // Tests that a drive root is preserved on Windows
+ it('test drive root windows', () => {
+ mockedPlatform('win32')
+ const input = 'C:\\'
+ const expectedOutput = 'C:\\'
+ const actualOutput = normalizeSeparators(input)
+ expect(actualOutput).toEqual(expectedOutput)
+ })
+ })
+
+ describe('getFilteredChangedFiles', () => {
+ // Tests that the function returns an empty object when allDiffFiles and filePatterns are empty
+ it('should return an empty object when allDiffFiles and filePatterns are empty', async () => {
+ const result = await getFilteredChangedFiles({
+ allDiffFiles: {
+ [ChangeTypeEnum.Added]: [],
+ [ChangeTypeEnum.Copied]: [],
+ [ChangeTypeEnum.Deleted]: [],
+ [ChangeTypeEnum.Modified]: [],
+ [ChangeTypeEnum.Renamed]: [],
+ [ChangeTypeEnum.TypeChanged]: [],
+ [ChangeTypeEnum.Unmerged]: [],
+ [ChangeTypeEnum.Unknown]: []
+ },
+ filePatterns: []
+ })
+ expect(result).toEqual({
+ [ChangeTypeEnum.Added]: [],
+ [ChangeTypeEnum.Copied]: [],
+ [ChangeTypeEnum.Deleted]: [],
+ [ChangeTypeEnum.Modified]: [],
+ [ChangeTypeEnum.Renamed]: [],
+ [ChangeTypeEnum.TypeChanged]: [],
+ [ChangeTypeEnum.Unmerged]: [],
+ [ChangeTypeEnum.Unknown]: []
+ })
+ })
+
+ // Tests that the function returns allDiffFiles when filePatterns is empty
+ it('should return allDiffFiles when filePatterns is empty', async () => {
+ const allDiffFiles = {
+ [ChangeTypeEnum.Added]: ['file1.txt'],
+ [ChangeTypeEnum.Copied]: [],
+ [ChangeTypeEnum.Deleted]: [],
+ [ChangeTypeEnum.Modified]: [],
+ [ChangeTypeEnum.Renamed]: [],
+ [ChangeTypeEnum.TypeChanged]: [],
+ [ChangeTypeEnum.Unmerged]: [],
+ [ChangeTypeEnum.Unknown]: []
+ }
+ const result = await getFilteredChangedFiles({
+ allDiffFiles,
+ filePatterns: []
+ })
+ expect(result).toEqual(allDiffFiles)
+ })
+
+ // Tests that the function returns an empty object when allDiffFiles is empty
+ it('should return an empty object when allDiffFiles is empty', async () => {
+ const result = await getFilteredChangedFiles({
+ allDiffFiles: {
+ [ChangeTypeEnum.Added]: [],
+ [ChangeTypeEnum.Copied]: [],
+ [ChangeTypeEnum.Deleted]: [],
+ [ChangeTypeEnum.Modified]: [],
+ [ChangeTypeEnum.Renamed]: [],
+ [ChangeTypeEnum.TypeChanged]: [],
+ [ChangeTypeEnum.Unmerged]: [],
+ [ChangeTypeEnum.Unknown]: []
+ },
+ filePatterns: ['*.txt']
+ })
+ expect(result).toEqual({
+ [ChangeTypeEnum.Added]: [],
+ [ChangeTypeEnum.Copied]: [],
+ [ChangeTypeEnum.Deleted]: [],
+ [ChangeTypeEnum.Modified]: [],
+ [ChangeTypeEnum.Renamed]: [],
+ [ChangeTypeEnum.TypeChanged]: [],
+ [ChangeTypeEnum.Unmerged]: [],
+ [ChangeTypeEnum.Unknown]: []
+ })
+ })
+
+ // Tests that the function returns only the files that match the file patterns on non windows platforms
+ it('should return only the files that match the file patterns', async () => {
+ const allDiffFiles = {
+ [ChangeTypeEnum.Added]: [
+ 'file1.txt',
+ 'file2.md',
+ 'file3.txt',
+ 'test/dir/file4.txt',
+ 'test/dir/file5.txt',
+ 'dir/file6.md'
+ ],
+ [ChangeTypeEnum.Copied]: [],
+ [ChangeTypeEnum.Deleted]: [],
+ [ChangeTypeEnum.Modified]: [],
+ [ChangeTypeEnum.Renamed]: [],
+ [ChangeTypeEnum.TypeChanged]: [],
+ [ChangeTypeEnum.Unmerged]: [],
+ [ChangeTypeEnum.Unknown]: []
+ }
+ const result = await getFilteredChangedFiles({
+ allDiffFiles,
+ filePatterns: ['*.txt']
+ })
+ expect(result).toEqual({
+ [ChangeTypeEnum.Added]: ['file1.txt', 'file3.txt'],
+ [ChangeTypeEnum.Copied]: [],
+ [ChangeTypeEnum.Deleted]: [],
+ [ChangeTypeEnum.Modified]: [],
+ [ChangeTypeEnum.Renamed]: [],
+ [ChangeTypeEnum.TypeChanged]: [],
+ [ChangeTypeEnum.Unmerged]: [],
+ [ChangeTypeEnum.Unknown]: []
+ })
+ })
+
+ // Tests that the function returns only the files that match the file patterns on windows
+ it('should return only the files that match the file patterns on windows', async () => {
+ mockedPlatform('win32')
+ const allDiffFiles = {
+ [ChangeTypeEnum.Added]: [
+ 'file1.txt',
+ 'file2.md',
+ 'file3.txt',
+ 'test\\dir\\file4.txt',
+ 'test\\dir\\file5.txt',
+ 'dir\\file6.md'
+ ],
+ [ChangeTypeEnum.Copied]: [],
+ [ChangeTypeEnum.Deleted]: [],
+ [ChangeTypeEnum.Modified]: [],
+ [ChangeTypeEnum.Renamed]: [],
+ [ChangeTypeEnum.TypeChanged]: [],
+ [ChangeTypeEnum.Unmerged]: [],
+ [ChangeTypeEnum.Unknown]: []
+ }
+ const result = await getFilteredChangedFiles({
+ allDiffFiles,
+ filePatterns: ['*.txt']
+ })
+
+ expect(result).toEqual({
+ [ChangeTypeEnum.Added]: ['file1.txt', 'file3.txt'],
+ [ChangeTypeEnum.Copied]: [],
+ [ChangeTypeEnum.Deleted]: [],
+ [ChangeTypeEnum.Modified]: [],
+ [ChangeTypeEnum.Renamed]: [],
+ [ChangeTypeEnum.TypeChanged]: [],
+ [ChangeTypeEnum.Unmerged]: [],
+ [ChangeTypeEnum.Unknown]: []
+ })
+ })
+
+ // Tests that the function returns only the files that match the file patterns with globstar on non windows platforms
+ it('should return only the files that match the file patterns with globstar', async () => {
+ const allDiffFiles = {
+ [ChangeTypeEnum.Added]: [
+ 'file1.txt',
+ 'file2.md',
+ 'file3.txt',
+ 'test/dir/file4.txt',
+ 'test/dir/file5.txt',
+ 'dir/file6.md'
+ ],
+ [ChangeTypeEnum.Copied]: [],
+ [ChangeTypeEnum.Deleted]: [],
+ [ChangeTypeEnum.Modified]: [],
+ [ChangeTypeEnum.Renamed]: [],
+ [ChangeTypeEnum.TypeChanged]: [],
+ [ChangeTypeEnum.Unmerged]: [],
+ [ChangeTypeEnum.Unknown]: []
+ }
+ const result = await getFilteredChangedFiles({
+ allDiffFiles,
+ filePatterns: ['**.txt']
+ })
+ expect(result).toEqual({
+ [ChangeTypeEnum.Added]: [
+ 'file1.txt',
+ 'file3.txt',
+ 'test/dir/file4.txt',
+ 'test/dir/file5.txt'
+ ],
+ [ChangeTypeEnum.Copied]: [],
+ [ChangeTypeEnum.Deleted]: [],
+ [ChangeTypeEnum.Modified]: [],
+ [ChangeTypeEnum.Renamed]: [],
+ [ChangeTypeEnum.TypeChanged]: [],
+ [ChangeTypeEnum.Unmerged]: [],
+ [ChangeTypeEnum.Unknown]: []
+ })
+ })
+
+ // Tests that the function returns only the files that match the file patterns with globstar on windows
+ it('should return only the files that match the file patterns with globstar on windows', async () => {
+ mockedPlatform('win32')
+ const allDiffFiles = {
+ [ChangeTypeEnum.Added]: ['test\\test rename-1.txt'],
+ [ChangeTypeEnum.Copied]: [],
+ [ChangeTypeEnum.Deleted]: [],
+ [ChangeTypeEnum.Modified]: [],
+ [ChangeTypeEnum.Renamed]: [],
+ [ChangeTypeEnum.TypeChanged]: [],
+ [ChangeTypeEnum.Unmerged]: [],
+ [ChangeTypeEnum.Unknown]: []
+ }
+ const result = await getFilteredChangedFiles({
+ allDiffFiles,
+ filePatterns: ['test/**']
+ })
+ expect(result).toEqual({
+ [ChangeTypeEnum.Added]: ['test\\test rename-1.txt'],
+ [ChangeTypeEnum.Copied]: [],
+ [ChangeTypeEnum.Deleted]: [],
+ [ChangeTypeEnum.Modified]: [],
+ [ChangeTypeEnum.Renamed]: [],
+ [ChangeTypeEnum.TypeChanged]: [],
+ [ChangeTypeEnum.Unmerged]: [],
+ [ChangeTypeEnum.Unknown]: []
+ })
+ })
+
+ // Tests that the function returns an empty object when there are no files that match the file patterns
+ it('should return an empty object when there are no files that match the file patterns', async () => {
+ const allDiffFiles = {
+ [ChangeTypeEnum.Added]: ['file1.md', 'file2.md', 'file3.md'],
+ [ChangeTypeEnum.Copied]: [],
+ [ChangeTypeEnum.Deleted]: [],
+ [ChangeTypeEnum.Modified]: [],
+ [ChangeTypeEnum.Renamed]: [],
+ [ChangeTypeEnum.TypeChanged]: [],
+ [ChangeTypeEnum.Unmerged]: [],
+ [ChangeTypeEnum.Unknown]: []
+ }
+ const result = await getFilteredChangedFiles({
+ allDiffFiles,
+ filePatterns: ['*.txt']
+ })
+ expect(result).toEqual({
+ [ChangeTypeEnum.Added]: [],
+ [ChangeTypeEnum.Copied]: [],
+ [ChangeTypeEnum.Deleted]: [],
+ [ChangeTypeEnum.Modified]: [],
+ [ChangeTypeEnum.Renamed]: [],
+ [ChangeTypeEnum.TypeChanged]: [],
+ [ChangeTypeEnum.Unmerged]: [],
+ [ChangeTypeEnum.Unknown]: []
+ })
+ })
+
+ // Tests that the function can handle file names with special characters
+ it('should handle file names with special characters', async () => {
+ const allDiffFiles = {
+ [ChangeTypeEnum.Added]: [
+ 'file1.txt',
+ 'file2 with spaces.txt',
+ 'file3$$.txt'
+ ],
+ [ChangeTypeEnum.Copied]: [],
+ [ChangeTypeEnum.Deleted]: [],
+ [ChangeTypeEnum.Modified]: [],
+ [ChangeTypeEnum.Renamed]: [],
+ [ChangeTypeEnum.TypeChanged]: [],
+ [ChangeTypeEnum.Unmerged]: [],
+ [ChangeTypeEnum.Unknown]: []
+ }
+ const result = await getFilteredChangedFiles({
+ allDiffFiles,
+ filePatterns: ['file2*.txt']
+ })
+ expect(result).toEqual({
+ [ChangeTypeEnum.Added]: ['file2 with spaces.txt'],
+ [ChangeTypeEnum.Copied]: [],
+ [ChangeTypeEnum.Deleted]: [],
+ [ChangeTypeEnum.Modified]: [],
+ [ChangeTypeEnum.Renamed]: [],
+ [ChangeTypeEnum.TypeChanged]: [],
+ [ChangeTypeEnum.Unmerged]: [],
+ [ChangeTypeEnum.Unknown]: []
+ })
+ })
+
+ // Tests that getFilteredChangedFiles correctly filters files using glob patterns
+ it('should filter files using glob patterns', async () => {
+ const allDiffFiles = {
+ [ChangeTypeEnum.Added]: ['test/migrations/test.sql'],
+ [ChangeTypeEnum.Copied]: [],
+ [ChangeTypeEnum.Deleted]: [],
+ [ChangeTypeEnum.Modified]: [],
+ [ChangeTypeEnum.Renamed]: [],
+ [ChangeTypeEnum.TypeChanged]: [],
+ [ChangeTypeEnum.Unmerged]: [],
+ [ChangeTypeEnum.Unknown]: []
+ }
+ const filePatterns = ['test/migrations/**']
+ const filteredFiles = await getFilteredChangedFiles({
+ allDiffFiles,
+ filePatterns
+ })
+ expect(filteredFiles[ChangeTypeEnum.Added]).toEqual([
+ 'test/migrations/test.sql'
+ ])
+ })
+
+ // Tests that getFilteredChangedFiles correctly filters files using ignore glob patterns
+ it('should filter files using ignore glob patterns', async () => {
+ const allDiffFiles = {
+ [ChangeTypeEnum.Added]: [],
+ [ChangeTypeEnum.Copied]: [],
+ [ChangeTypeEnum.Deleted]: [],
+ [ChangeTypeEnum.Modified]: [
+ 'assets/scripts/configure-minikube-linux.sh'
+ ],
+ [ChangeTypeEnum.Renamed]: [],
+ [ChangeTypeEnum.TypeChanged]: [],
+ [ChangeTypeEnum.Unmerged]: [],
+ [ChangeTypeEnum.Unknown]: []
+ }
+ const filePatterns = [
+ 'assets/scripts/**.sh',
+ '!assets/scripts/configure-minikube-linux.sh'
+ ]
+ const filteredFiles = await getFilteredChangedFiles({
+ allDiffFiles,
+ filePatterns
+ })
+ expect(filteredFiles[ChangeTypeEnum.Modified]).toEqual([])
+ })
+ })
+
+ describe('warnUnsupportedRESTAPIInputs', () => {
+ // Warns about unsupported inputs when using the REST API.
+ it('should warn about unsupported inputs when all inputs are supported', async () => {
+ const inputs: Inputs = {
+ files: '',
+ filesSeparator: '\n',
+ filesFromSourceFile: '',
+ filesFromSourceFileSeparator: '\n',
+ filesYaml: '',
+ filesYamlFromSourceFile: '',
+ filesYamlFromSourceFileSeparator: '\n',
+ filesIgnore: '',
+ filesIgnoreSeparator: '\n',
+ filesIgnoreFromSourceFile: '',
+ filesIgnoreFromSourceFileSeparator: '\n',
+ filesIgnoreYaml: '',
+ filesIgnoreYamlFromSourceFile: '',
+ filesIgnoreYamlFromSourceFileSeparator: '\n',
+ separator: ' ',
+ includeAllOldNewRenamedFiles: false,
+ oldNewSeparator: ',',
+ oldNewFilesSeparator: ' ',
+ sha: '1313123',
+ baseSha: '',
+ since: '',
+ until: '',
+ path: '.',
+ quotepath: true,
+ diffRelative: true,
+ dirNames: false,
+ dirNamesMaxDepth: undefined,
+ dirNamesExcludeCurrentDir: false,
+ dirNamesIncludeFiles: '',
+ dirNamesIncludeFilesSeparator: '\n',
+ dirNamesDeletedFilesIncludeOnlyDeletedDirs: false,
+ json: false,
+ escapeJson: true,
+ safeOutput: true,
+ fetchDepth: 50,
+ fetchAdditionalSubmoduleHistory: false,
+ sinceLastRemoteCommit: false,
+ writeOutputFiles: false,
+ outputDir: '.github/outputs',
+ outputRenamedFilesAsDeletedAndAdded: false,
+ recoverDeletedFiles: false,
+ recoverDeletedFilesToDestination: '',
+ recoverFiles: '',
+ recoverFilesSeparator: '\n',
+ recoverFilesIgnore: '',
+ recoverFilesIgnoreSeparator: '\n',
+ token: '${{ github.token }}',
+ apiUrl: '${{ github.api_url }}',
+ skipInitialFetch: false,
+ failOnInitialDiffError: false,
+ failOnSubmoduleDiffError: false,
+ negationPatternsFirst: false,
+ useRestApi: false,
+ excludeSubmodules: false,
+ fetchMissingHistoryMaxRetries: 20,
+ usePosixPathSeparator: false,
+ tagsPattern: '*',
+ tagsIgnorePattern: ''
+ }
+
+ const coreWarningSpy = jest.spyOn(core, 'warning')
+
+ await warnUnsupportedRESTAPIInputs({
+ inputs
+ })
+
+ expect(coreWarningSpy).toHaveBeenCalledWith(
+ 'Input "sha" is not supported when using GitHub\'s REST API to get changed files'
+ )
+
+ expect(coreWarningSpy).toHaveBeenCalledTimes(1)
+ })
+ })
+ describe('getPreviousGitTag', () => {
+ // const shouldSkip = !!process.env.GITHUB_EVENT_PULL_REQUEST_HEAD_REPO_FORK
+ // Function returns the second-latest tag and its SHA
+ // it('should return the second latest tag and its SHA when multiple tags are present', async () => {
+ // if (shouldSkip) {
+ // return
+ // }
+ // const result = await getPreviousGitTag({
+ // cwd: '.',
+ // tagsPattern: '*',
+ // tagsIgnorePattern: '',
+ // currentBranch: 'v1.0.1'
+ // })
+ // expect(result).toEqual({
+ // tag: 'v1.0.0',
+ // sha: 'f0751de6af436d4e79016e2041cf6400e0833653'
+ // })
+ // })
+ // // Tags are filtered by a specified pattern when 'tagsPattern' is provided
+ // it('should filter tags by the specified pattern', async () => {
+ // if (shouldSkip) {
+ // return
+ // }
+ // const result = await getPreviousGitTag({
+ // cwd: '.',
+ // tagsPattern: 'v1.*',
+ // tagsIgnorePattern: '',
+ // currentBranch: 'v1.0.1'
+ // })
+ // expect(result).toEqual({
+ // tag: 'v1.0.0',
+ // sha: 'f0751de6af436d4e79016e2041cf6400e0833653'
+ // })
+ // })
+ // // Tags are excluded by a specified ignore pattern when 'tagsIgnorePattern' is provided
+ // it('should exclude tags by the specified ignore pattern', async () => {
+ // if (shouldSkip) {
+ // return
+ // }
+ // const result = await getPreviousGitTag({
+ // cwd: '.',
+ // tagsPattern: '*',
+ // tagsIgnorePattern: 'v0.*.*',
+ // currentBranch: 'v1.0.1'
+ // })
+ // expect(result).toEqual({
+ // tag: 'v1.0.0',
+ // sha: 'f0751de6af436d4e79016e2041cf6400e0833653'
+ // })
+ // })
+
+ // No tags are available in the repository
+ it('should return empty values when no tags are available in the repository', async () => {
+ jest.spyOn(exec, 'getExecOutput').mockResolvedValueOnce({
+ stdout: '',
+ stderr: '',
+ exitCode: 0
+ })
+ const result = await getPreviousGitTag({
+ cwd: '.',
+ tagsPattern: '*',
+ tagsIgnorePattern: '',
+ currentBranch: ''
+ })
+ expect(result).toEqual({tag: '', sha: ''})
+ })
+
+ // Only one tag is available, making it impossible to find a previous tag
+ it('should return empty values when only one tag is available', async () => {
+ jest.spyOn(exec, 'getExecOutput').mockResolvedValueOnce({
+ stdout:
+ 'v1.0.1|f0751de6af436d4e79016e2041cf6400e0833653|2021-01-01T00:00:00Z',
+ stderr: '',
+ exitCode: 0
+ })
+ const result = await getPreviousGitTag({
+ cwd: '.',
+ tagsPattern: '*',
+ tagsIgnorePattern: '',
+ currentBranch: 'v1.0.1'
+ })
+ expect(result).toEqual({tag: '', sha: ''})
+ })
+
+ // Git commands fail and throw errors
+ it('should throw an error when git commands fail', async () => {
+ jest
+ .spyOn(exec, 'getExecOutput')
+ .mockRejectedValue(new Error('git command failed'))
+ await expect(
+ getPreviousGitTag({
+ cwd: '.',
+ tagsPattern: '*',
+ tagsIgnorePattern: '',
+ currentBranch: 'v1.0.1'
+ })
+ ).rejects.toThrow('git command failed')
+ })
+ })
+})
diff --git a/src/changedFiles.ts b/src/changedFiles.ts
new file mode 100644
index 0000000..fc5fd7c
--- /dev/null
+++ b/src/changedFiles.ts
@@ -0,0 +1,498 @@
+import * as core from '@actions/core'
+import * as github from '@actions/github'
+import type {RestEndpointMethodTypes} from '@octokit/rest'
+import flatten from 'lodash/flatten'
+import convertPath from '@stdlib/utils-convert-path'
+import mm from 'micromatch'
+import * as path from 'path'
+import {setOutputsAndGetModifiedAndChangedFilesStatus} from './changedFilesOutput'
+import {DiffResult} from './commitSha'
+import {Inputs} from './inputs'
+import {
+ canDiffCommits,
+ getAllChangedFiles,
+ getDirnameMaxDepth,
+ getDirNamesIncludeFilesPattern,
+ getFilteredChangedFiles,
+ gitRenamedFiles,
+ gitSubmoduleDiffSHA,
+ isWindows,
+ jsonOutput,
+ setArrayOutput
+} from './utils'
+
+export const processChangedFiles = async ({
+ filePatterns,
+ allDiffFiles,
+ inputs,
+ yamlFilePatterns,
+ workingDirectory
+}: {
+ filePatterns: string[]
+ allDiffFiles: ChangedFiles
+ inputs: Inputs
+ yamlFilePatterns: Record
+ workingDirectory?: string
+}): Promise => {
+ if (filePatterns.length > 0) {
+ core.startGroup('changed-files-patterns')
+ const allFilteredDiffFiles = await getFilteredChangedFiles({
+ allDiffFiles,
+ filePatterns
+ })
+ core.debug(
+ `All filtered diff files: ${JSON.stringify(allFilteredDiffFiles)}`
+ )
+ await setOutputsAndGetModifiedAndChangedFilesStatus({
+ allDiffFiles,
+ allFilteredDiffFiles,
+ inputs,
+ filePatterns,
+ workingDirectory
+ })
+ core.info('All Done!')
+ core.endGroup()
+ }
+
+ if (Object.keys(yamlFilePatterns).length > 0) {
+ const modifiedKeys: string[] = []
+ const changedKeys: string[] = []
+
+ for (const key of Object.keys(yamlFilePatterns)) {
+ core.startGroup(`changed-files-yaml-${key}`)
+ const allFilteredDiffFiles = await getFilteredChangedFiles({
+ allDiffFiles,
+ filePatterns: yamlFilePatterns[key]
+ })
+ core.debug(
+ `All filtered diff files for ${key}: ${JSON.stringify(
+ allFilteredDiffFiles
+ )}`
+ )
+ const {anyChanged, anyModified} =
+ await setOutputsAndGetModifiedAndChangedFilesStatus({
+ allDiffFiles,
+ allFilteredDiffFiles,
+ inputs,
+ filePatterns: yamlFilePatterns[key],
+ outputPrefix: key,
+ workingDirectory
+ })
+ if (anyModified) {
+ modifiedKeys.push(key)
+ }
+ if (anyChanged) {
+ changedKeys.push(key)
+ }
+
+ core.info('All Done!')
+ core.endGroup()
+ }
+
+ if (modifiedKeys.length > 0) {
+ await setArrayOutput({
+ key: 'modified_keys',
+ inputs,
+ value: modifiedKeys
+ })
+ }
+
+ if (changedKeys.length > 0) {
+ await setArrayOutput({
+ key: 'changed_keys',
+ inputs,
+ value: changedKeys
+ })
+ }
+ }
+
+ if (filePatterns.length === 0 && Object.keys(yamlFilePatterns).length === 0) {
+ core.startGroup('changed-files-all')
+ await setOutputsAndGetModifiedAndChangedFilesStatus({
+ allDiffFiles,
+ allFilteredDiffFiles: allDiffFiles,
+ inputs,
+ workingDirectory
+ })
+ core.info('All Done!')
+ core.endGroup()
+ }
+}
+
+export const getRenamedFiles = async ({
+ inputs,
+ workingDirectory,
+ diffSubmodule,
+ diffResult,
+ submodulePaths
+}: {
+ inputs: Inputs
+ workingDirectory: string
+ diffSubmodule: boolean
+ diffResult: DiffResult
+ submodulePaths: string[]
+}): Promise<{paths: string; count: string}> => {
+ const renamedFiles = await gitRenamedFiles({
+ cwd: workingDirectory,
+ sha1: diffResult.previousSha,
+ sha2: diffResult.currentSha,
+ diff: diffResult.diff,
+ oldNewSeparator: inputs.oldNewSeparator
+ })
+
+ if (diffSubmodule) {
+ for (const submodulePath of submodulePaths) {
+ const submoduleShaResult = await gitSubmoduleDiffSHA({
+ cwd: workingDirectory,
+ parentSha1: diffResult.previousSha,
+ parentSha2: diffResult.currentSha,
+ submodulePath,
+ diff: diffResult.diff
+ })
+
+ const submoduleWorkingDirectory = path.join(
+ workingDirectory,
+ submodulePath
+ )
+
+ if (submoduleShaResult.currentSha && submoduleShaResult.previousSha) {
+ let diff = '...'
+
+ if (
+ !(await canDiffCommits({
+ cwd: submoduleWorkingDirectory,
+ sha1: submoduleShaResult.previousSha,
+ sha2: submoduleShaResult.currentSha,
+ diff
+ }))
+ ) {
+ let message = `Unable to use three dot diff for: ${submodulePath} submodule. Falling back to two dot diff. You can set 'fetch_additional_submodule_history: true' to fetch additional submodule history in order to use three dot diff`
+ if (inputs.fetchAdditionalSubmoduleHistory) {
+ message = `To fetch additional submodule history for: ${submodulePath} you can increase history depth using 'fetch_depth' input`
+ }
+ core.info(message)
+ diff = '..'
+ }
+
+ const submoduleRenamedFiles = await gitRenamedFiles({
+ cwd: submoduleWorkingDirectory,
+ sha1: submoduleShaResult.previousSha,
+ sha2: submoduleShaResult.currentSha,
+ diff,
+ oldNewSeparator: inputs.oldNewSeparator,
+ isSubmodule: true,
+ parentDir: submodulePath
+ })
+ renamedFiles.push(...submoduleRenamedFiles)
+ }
+ }
+ }
+
+ if (inputs.json) {
+ return {
+ paths: jsonOutput({value: renamedFiles, shouldEscape: inputs.escapeJson}),
+ count: renamedFiles.length.toString()
+ }
+ }
+
+ return {
+ paths: renamedFiles.join(inputs.oldNewFilesSeparator),
+ count: renamedFiles.length.toString()
+ }
+}
+
+export enum ChangeTypeEnum {
+ Added = 'A',
+ Copied = 'C',
+ Deleted = 'D',
+ Modified = 'M',
+ Renamed = 'R',
+ TypeChanged = 'T',
+ Unmerged = 'U',
+ Unknown = 'X'
+}
+
+export type ChangedFiles = {
+ [key in ChangeTypeEnum]: string[]
+}
+
+export const getAllDiffFiles = async ({
+ workingDirectory,
+ diffSubmodule,
+ diffResult,
+ submodulePaths,
+ outputRenamedFilesAsDeletedAndAdded,
+ fetchAdditionalSubmoduleHistory,
+ failOnInitialDiffError,
+ failOnSubmoduleDiffError
+}: {
+ workingDirectory: string
+ diffSubmodule: boolean
+ diffResult: DiffResult
+ submodulePaths: string[]
+ outputRenamedFilesAsDeletedAndAdded: boolean
+ fetchAdditionalSubmoduleHistory: boolean
+ failOnInitialDiffError: boolean
+ failOnSubmoduleDiffError: boolean
+}): Promise => {
+ const files = await getAllChangedFiles({
+ cwd: workingDirectory,
+ sha1: diffResult.previousSha,
+ sha2: diffResult.currentSha,
+ diff: diffResult.diff,
+ outputRenamedFilesAsDeletedAndAdded,
+ failOnInitialDiffError
+ })
+
+ if (diffSubmodule) {
+ for (const submodulePath of submodulePaths) {
+ const submoduleShaResult = await gitSubmoduleDiffSHA({
+ cwd: workingDirectory,
+ parentSha1: diffResult.previousSha,
+ parentSha2: diffResult.currentSha,
+ submodulePath,
+ diff: diffResult.diff
+ })
+
+ const submoduleWorkingDirectory = path.join(
+ workingDirectory,
+ submodulePath
+ )
+
+ if (submoduleShaResult.currentSha && submoduleShaResult.previousSha) {
+ let diff = '...'
+
+ if (
+ !(await canDiffCommits({
+ cwd: submoduleWorkingDirectory,
+ sha1: submoduleShaResult.previousSha,
+ sha2: submoduleShaResult.currentSha,
+ diff
+ }))
+ ) {
+ let message = `Set 'fetch_additional_submodule_history: true' to fetch additional submodule history for: ${submodulePath}`
+ if (fetchAdditionalSubmoduleHistory) {
+ message = `To fetch additional submodule history for: ${submodulePath} you can increase history depth using 'fetch_depth' input`
+ }
+ core.warning(message)
+ diff = '..'
+ }
+
+ const submoduleFiles = await getAllChangedFiles({
+ cwd: submoduleWorkingDirectory,
+ sha1: submoduleShaResult.previousSha,
+ sha2: submoduleShaResult.currentSha,
+ diff,
+ isSubmodule: true,
+ parentDir: submodulePath,
+ outputRenamedFilesAsDeletedAndAdded,
+ failOnSubmoduleDiffError
+ })
+
+ for (const changeType of Object.keys(
+ submoduleFiles
+ ) as ChangeTypeEnum[]) {
+ if (!files[changeType]) {
+ files[changeType] = []
+ }
+ files[changeType].push(...submoduleFiles[changeType])
+ }
+ }
+ }
+ }
+
+ return files
+}
+
+function* getFilePaths({
+ inputs,
+ filePaths,
+ dirNamesIncludeFilePatterns
+}: {
+ inputs: Inputs
+ filePaths: string[]
+ dirNamesIncludeFilePatterns: string[]
+}): Generator {
+ for (const filePath of filePaths) {
+ if (inputs.dirNames) {
+ if (dirNamesIncludeFilePatterns.length > 0) {
+ const isWin = isWindows()
+ const matchOptions = {dot: true, windows: isWin, noext: true}
+ if (mm.isMatch(filePath, dirNamesIncludeFilePatterns, matchOptions)) {
+ yield filePath
+ }
+ }
+ yield getDirnameMaxDepth({
+ relativePath: filePath,
+ dirNamesMaxDepth: inputs.dirNamesMaxDepth,
+ excludeCurrentDir: inputs.dirNamesExcludeCurrentDir
+ })
+ } else {
+ yield filePath
+ }
+ }
+}
+
+function* getChangeTypeFilesGenerator({
+ inputs,
+ changedFiles,
+ changeTypes
+}: {
+ inputs: Inputs
+ changedFiles: ChangedFiles
+ changeTypes: ChangeTypeEnum[]
+}): Generator {
+ const dirNamesIncludeFilePatterns = getDirNamesIncludeFilesPattern({inputs})
+ core.debug(
+ `Dir names include file patterns: ${JSON.stringify(
+ dirNamesIncludeFilePatterns
+ )}`
+ )
+
+ for (const changeType of changeTypes) {
+ const filePaths = changedFiles[changeType] || []
+ for (const filePath of getFilePaths({
+ inputs,
+ filePaths,
+ dirNamesIncludeFilePatterns
+ })) {
+ if (isWindows() && inputs.usePosixPathSeparator) {
+ yield convertPath(filePath, 'mixed')
+ } else {
+ yield filePath
+ }
+ }
+ }
+}
+
+export const getChangeTypeFiles = async ({
+ inputs,
+ changedFiles,
+ changeTypes
+}: {
+ inputs: Inputs
+ changedFiles: ChangedFiles
+ changeTypes: ChangeTypeEnum[]
+}): Promise<{paths: string[] | string; count: string}> => {
+ const files = [
+ ...new Set(getChangeTypeFilesGenerator({inputs, changedFiles, changeTypes}))
+ ].filter(Boolean)
+
+ const paths = inputs.json ? files : files.join(inputs.separator)
+
+ return {
+ paths,
+ count: files.length.toString()
+ }
+}
+
+function* getAllChangeTypeFilesGenerator({
+ inputs,
+ changedFiles
+}: {
+ inputs: Inputs
+ changedFiles: ChangedFiles
+}): Generator {
+ const dirNamesIncludeFilePatterns = getDirNamesIncludeFilesPattern({inputs})
+ core.debug(
+ `Dir names include file patterns: ${JSON.stringify(
+ dirNamesIncludeFilePatterns
+ )}`
+ )
+
+ const filePaths = flatten(Object.values(changedFiles))
+
+ for (const filePath of getFilePaths({
+ inputs,
+ filePaths,
+ dirNamesIncludeFilePatterns
+ })) {
+ if (isWindows() && inputs.usePosixPathSeparator) {
+ yield convertPath(filePath, 'mixed')
+ } else {
+ yield filePath
+ }
+ }
+}
+
+export const getAllChangeTypeFiles = async ({
+ inputs,
+ changedFiles
+}: {
+ inputs: Inputs
+ changedFiles: ChangedFiles
+}): Promise<{paths: string[] | string; count: string}> => {
+ const files = [
+ ...new Set(getAllChangeTypeFilesGenerator({inputs, changedFiles}))
+ ].filter(Boolean)
+
+ const paths = inputs.json ? files : files.join(inputs.separator)
+
+ return {
+ paths,
+ count: files.length.toString()
+ }
+}
+
+export const getChangedFilesFromGithubAPI = async ({
+ inputs
+}: {
+ inputs: Inputs
+}): Promise => {
+ const octokit = github.getOctokit(inputs.token, {
+ baseUrl: inputs.apiUrl
+ })
+ const changedFiles: ChangedFiles = {
+ [ChangeTypeEnum.Added]: [],
+ [ChangeTypeEnum.Copied]: [],
+ [ChangeTypeEnum.Deleted]: [],
+ [ChangeTypeEnum.Modified]: [],
+ [ChangeTypeEnum.Renamed]: [],
+ [ChangeTypeEnum.TypeChanged]: [],
+ [ChangeTypeEnum.Unmerged]: [],
+ [ChangeTypeEnum.Unknown]: []
+ }
+
+ core.info('Getting changed files from GitHub API...')
+
+ const options = octokit.rest.pulls.listFiles.endpoint.merge({
+ owner: github.context.repo.owner,
+ repo: github.context.repo.repo,
+ pull_number: github.context.payload.pull_request?.number,
+ per_page: 100
+ })
+
+ const paginatedResponse =
+ await octokit.paginate<
+ RestEndpointMethodTypes['pulls']['listFiles']['response']['data'][0]
+ >(options)
+
+ core.info(`Found ${paginatedResponse.length} changed files from GitHub API`)
+ const statusMap: Record = {
+ added: ChangeTypeEnum.Added,
+ removed: ChangeTypeEnum.Deleted,
+ modified: ChangeTypeEnum.Modified,
+ renamed: ChangeTypeEnum.Renamed,
+ copied: ChangeTypeEnum.Copied,
+ changed: ChangeTypeEnum.TypeChanged,
+ unchanged: ChangeTypeEnum.Unmerged
+ }
+
+ for await (const item of paginatedResponse) {
+ const changeType: ChangeTypeEnum =
+ statusMap[item.status] || ChangeTypeEnum.Unknown
+
+ if (changeType === ChangeTypeEnum.Renamed) {
+ if (inputs.outputRenamedFilesAsDeletedAndAdded) {
+ changedFiles[ChangeTypeEnum.Deleted].push(item.previous_filename || '')
+ changedFiles[ChangeTypeEnum.Added].push(item.filename)
+ } else {
+ changedFiles[ChangeTypeEnum.Renamed].push(item.filename)
+ }
+ } else {
+ changedFiles[changeType].push(item.filename)
+ }
+ }
+
+ return changedFiles
+}
diff --git a/src/changedFilesOutput.ts b/src/changedFilesOutput.ts
new file mode 100644
index 0000000..a9d5efd
--- /dev/null
+++ b/src/changedFilesOutput.ts
@@ -0,0 +1,502 @@
+import * as core from '@actions/core'
+import path from 'path'
+import {
+ ChangedFiles,
+ ChangeTypeEnum,
+ getAllChangeTypeFiles,
+ getChangeTypeFiles
+} from './changedFiles'
+import {Inputs} from './inputs'
+import {getOutputKey, setArrayOutput, setOutput, exists} from './utils'
+
+const getArrayFromPaths = (
+ paths: string | string[],
+ inputs: Inputs
+): string[] => {
+ return Array.isArray(paths) ? paths : paths.split(inputs.separator)
+}
+
+export const setOutputsAndGetModifiedAndChangedFilesStatus = async ({
+ allDiffFiles,
+ allFilteredDiffFiles,
+ inputs,
+ filePatterns = [],
+ outputPrefix = '',
+ workingDirectory
+}: {
+ allDiffFiles: ChangedFiles
+ allFilteredDiffFiles: ChangedFiles
+ inputs: Inputs
+ filePatterns?: string[]
+ outputPrefix?: string
+ workingDirectory?: string
+}): Promise<{anyModified: boolean; anyChanged: boolean}> => {
+ const addedFiles = await getChangeTypeFiles({
+ inputs,
+ changedFiles: allFilteredDiffFiles,
+ changeTypes: [ChangeTypeEnum.Added]
+ })
+ core.debug(`Added files: ${JSON.stringify(addedFiles)}`)
+ await setOutput({
+ key: getOutputKey('added_files', outputPrefix),
+ value: addedFiles.paths,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json,
+ shouldEscape: inputs.escapeJson,
+ safeOutput: inputs.safeOutput
+ })
+ await setOutput({
+ key: getOutputKey('added_files_count', outputPrefix),
+ value: addedFiles.count,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ })
+
+ const copiedFiles = await getChangeTypeFiles({
+ inputs,
+ changedFiles: allFilteredDiffFiles,
+ changeTypes: [ChangeTypeEnum.Copied]
+ })
+ core.debug(`Copied files: ${JSON.stringify(copiedFiles)}`)
+ await setOutput({
+ key: getOutputKey('copied_files', outputPrefix),
+ value: copiedFiles.paths,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json,
+ shouldEscape: inputs.escapeJson,
+ safeOutput: inputs.safeOutput
+ })
+
+ await setOutput({
+ key: getOutputKey('copied_files_count', outputPrefix),
+ value: copiedFiles.count,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ })
+
+ const modifiedFiles = await getChangeTypeFiles({
+ inputs,
+ changedFiles: allFilteredDiffFiles,
+ changeTypes: [ChangeTypeEnum.Modified]
+ })
+ core.debug(`Modified files: ${JSON.stringify(modifiedFiles)}`)
+ await setOutput({
+ key: getOutputKey('modified_files', outputPrefix),
+ value: modifiedFiles.paths,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json,
+ shouldEscape: inputs.escapeJson,
+ safeOutput: inputs.safeOutput
+ })
+
+ await setOutput({
+ key: getOutputKey('modified_files_count', outputPrefix),
+ value: modifiedFiles.count,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ })
+
+ const renamedFiles = await getChangeTypeFiles({
+ inputs,
+ changedFiles: allFilteredDiffFiles,
+ changeTypes: [ChangeTypeEnum.Renamed]
+ })
+ core.debug(`Renamed files: ${JSON.stringify(renamedFiles)}`)
+ await setOutput({
+ key: getOutputKey('renamed_files', outputPrefix),
+ value: renamedFiles.paths,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json,
+ shouldEscape: inputs.escapeJson,
+ safeOutput: inputs.safeOutput
+ })
+
+ await setOutput({
+ key: getOutputKey('renamed_files_count', outputPrefix),
+ value: renamedFiles.count,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ })
+
+ const typeChangedFiles = await getChangeTypeFiles({
+ inputs,
+ changedFiles: allFilteredDiffFiles,
+ changeTypes: [ChangeTypeEnum.TypeChanged]
+ })
+ core.debug(`Type changed files: ${JSON.stringify(typeChangedFiles)}`)
+ await setOutput({
+ key: getOutputKey('type_changed_files', outputPrefix),
+ value: typeChangedFiles.paths,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json,
+ shouldEscape: inputs.escapeJson,
+ safeOutput: inputs.safeOutput
+ })
+
+ await setOutput({
+ key: getOutputKey('type_changed_files_count', outputPrefix),
+ value: typeChangedFiles.count,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ })
+
+ const unmergedFiles = await getChangeTypeFiles({
+ inputs,
+ changedFiles: allFilteredDiffFiles,
+ changeTypes: [ChangeTypeEnum.Unmerged]
+ })
+ core.debug(`Unmerged files: ${JSON.stringify(unmergedFiles)}`)
+ await setOutput({
+ key: getOutputKey('unmerged_files', outputPrefix),
+ value: unmergedFiles.paths,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json,
+ shouldEscape: inputs.escapeJson,
+ safeOutput: inputs.safeOutput
+ })
+
+ await setOutput({
+ key: getOutputKey('unmerged_files_count', outputPrefix),
+ value: unmergedFiles.count,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ })
+
+ const unknownFiles = await getChangeTypeFiles({
+ inputs,
+ changedFiles: allFilteredDiffFiles,
+ changeTypes: [ChangeTypeEnum.Unknown]
+ })
+ core.debug(`Unknown files: ${JSON.stringify(unknownFiles)}`)
+ await setOutput({
+ key: getOutputKey('unknown_files', outputPrefix),
+ value: unknownFiles.paths,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json,
+ shouldEscape: inputs.escapeJson,
+ safeOutput: inputs.safeOutput
+ })
+
+ await setOutput({
+ key: getOutputKey('unknown_files_count', outputPrefix),
+ value: unknownFiles.count,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ })
+
+ const allChangedAndModifiedFiles = await getAllChangeTypeFiles({
+ inputs,
+ changedFiles: allFilteredDiffFiles
+ })
+ core.debug(
+ `All changed and modified files: ${JSON.stringify(
+ allChangedAndModifiedFiles
+ )}`
+ )
+ await setOutput({
+ key: getOutputKey('all_changed_and_modified_files', outputPrefix),
+ value: allChangedAndModifiedFiles.paths,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json,
+ shouldEscape: inputs.escapeJson,
+ safeOutput: inputs.safeOutput
+ })
+
+ await setOutput({
+ key: getOutputKey('all_changed_and_modified_files_count', outputPrefix),
+ value: allChangedAndModifiedFiles.count,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ })
+
+ const allChangedFiles = await getChangeTypeFiles({
+ inputs,
+ changedFiles: allFilteredDiffFiles,
+ changeTypes: [
+ ChangeTypeEnum.Added,
+ ChangeTypeEnum.Copied,
+ ChangeTypeEnum.Modified,
+ ChangeTypeEnum.Renamed
+ ]
+ })
+ core.debug(`All changed files: ${JSON.stringify(allChangedFiles)}`)
+ await setOutput({
+ key: getOutputKey('all_changed_files', outputPrefix),
+ value: allChangedFiles.paths,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json,
+ shouldEscape: inputs.escapeJson,
+ safeOutput: inputs.safeOutput
+ })
+
+ await setOutput({
+ key: getOutputKey('all_changed_files_count', outputPrefix),
+ value: allChangedFiles.count,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ })
+
+ await setOutput({
+ key: getOutputKey('any_changed', outputPrefix),
+ value: allChangedFiles.paths.length > 0,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json
+ })
+
+ const allOtherChangedFiles = await getChangeTypeFiles({
+ inputs,
+ changedFiles: allDiffFiles,
+ changeTypes: [
+ ChangeTypeEnum.Added,
+ ChangeTypeEnum.Copied,
+ ChangeTypeEnum.Modified,
+ ChangeTypeEnum.Renamed
+ ]
+ })
+ core.debug(`All other changed files: ${JSON.stringify(allOtherChangedFiles)}`)
+
+ const allOtherChangedFilesPaths: string[] = getArrayFromPaths(
+ allOtherChangedFiles.paths,
+ inputs
+ )
+ const allChangedFilesPaths: string[] = getArrayFromPaths(
+ allChangedFiles.paths,
+ inputs
+ )
+
+ const otherChangedFiles = allOtherChangedFilesPaths.filter(
+ (filePath: string) => !allChangedFilesPaths.includes(filePath)
+ )
+
+ const onlyChanged =
+ otherChangedFiles.length === 0 &&
+ allChangedFiles.paths.length > 0 &&
+ filePatterns.length > 0
+
+ await setOutput({
+ key: getOutputKey('only_changed', outputPrefix),
+ value: onlyChanged,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json
+ })
+
+ await setArrayOutput({
+ key: 'other_changed_files',
+ inputs,
+ value: otherChangedFiles,
+ outputPrefix
+ })
+
+ await setOutput({
+ key: getOutputKey('other_changed_files_count', outputPrefix),
+ value: otherChangedFiles.length.toString(),
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ })
+
+ const allModifiedFiles = await getChangeTypeFiles({
+ inputs,
+ changedFiles: allFilteredDiffFiles,
+ changeTypes: [
+ ChangeTypeEnum.Added,
+ ChangeTypeEnum.Copied,
+ ChangeTypeEnum.Modified,
+ ChangeTypeEnum.Renamed,
+ ChangeTypeEnum.Deleted
+ ]
+ })
+ core.debug(`All modified files: ${JSON.stringify(allModifiedFiles)}`)
+ await setOutput({
+ key: getOutputKey('all_modified_files', outputPrefix),
+ value: allModifiedFiles.paths,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json,
+ shouldEscape: inputs.escapeJson,
+ safeOutput: inputs.safeOutput
+ })
+
+ await setOutput({
+ key: getOutputKey('all_modified_files_count', outputPrefix),
+ value: allModifiedFiles.count,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ })
+
+ await setOutput({
+ key: getOutputKey('any_modified', outputPrefix),
+ value: allModifiedFiles.paths.length > 0,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json
+ })
+
+ const allOtherModifiedFiles = await getChangeTypeFiles({
+ inputs,
+ changedFiles: allDiffFiles,
+ changeTypes: [
+ ChangeTypeEnum.Added,
+ ChangeTypeEnum.Copied,
+ ChangeTypeEnum.Modified,
+ ChangeTypeEnum.Renamed,
+ ChangeTypeEnum.Deleted
+ ]
+ })
+
+ const allOtherModifiedFilesPaths: string[] = getArrayFromPaths(
+ allOtherModifiedFiles.paths,
+ inputs
+ )
+
+ const allModifiedFilesPaths: string[] = getArrayFromPaths(
+ allModifiedFiles.paths,
+ inputs
+ )
+
+ const otherModifiedFiles = allOtherModifiedFilesPaths.filter(
+ (filePath: string) => !allModifiedFilesPaths.includes(filePath)
+ )
+
+ const onlyModified =
+ otherModifiedFiles.length === 0 &&
+ allModifiedFiles.paths.length > 0 &&
+ filePatterns.length > 0
+
+ await setOutput({
+ key: getOutputKey('only_modified', outputPrefix),
+ value: onlyModified,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json
+ })
+
+ await setArrayOutput({
+ key: 'other_modified_files',
+ inputs,
+ value: otherModifiedFiles,
+ outputPrefix
+ })
+
+ await setOutput({
+ key: getOutputKey('other_modified_files_count', outputPrefix),
+ value: otherModifiedFiles.length.toString(),
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ })
+
+ const deletedFiles = await getChangeTypeFiles({
+ inputs,
+ changedFiles: allFilteredDiffFiles,
+ changeTypes: [ChangeTypeEnum.Deleted]
+ })
+ core.debug(`Deleted files: ${JSON.stringify(deletedFiles)}`)
+
+ if (
+ inputs.dirNamesDeletedFilesIncludeOnlyDeletedDirs &&
+ inputs.dirNames &&
+ workingDirectory
+ ) {
+ const newDeletedFilesPaths: string[] = []
+ for (const deletedPath of getArrayFromPaths(deletedFiles.paths, inputs)) {
+ const dirPath = path.join(workingDirectory, deletedPath)
+ core.debug(`Checking if directory exists: ${dirPath}`)
+ if (!(await exists(dirPath))) {
+ core.debug(`Directory not found: ${dirPath}`)
+ newDeletedFilesPaths.push(deletedPath)
+ }
+ }
+ deletedFiles.paths = inputs.json
+ ? newDeletedFilesPaths
+ : newDeletedFilesPaths.join(inputs.separator)
+ deletedFiles.count = newDeletedFilesPaths.length.toString()
+ core.debug(`New deleted files: ${JSON.stringify(deletedFiles)}`)
+ }
+
+ await setOutput({
+ key: getOutputKey('deleted_files', outputPrefix),
+ value: deletedFiles.paths,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json,
+ shouldEscape: inputs.escapeJson,
+ safeOutput: inputs.safeOutput
+ })
+
+ await setOutput({
+ key: getOutputKey('deleted_files_count', outputPrefix),
+ value: deletedFiles.count,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ })
+
+ await setOutput({
+ key: getOutputKey('any_deleted', outputPrefix),
+ value: deletedFiles.paths.length > 0,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json
+ })
+
+ const allOtherDeletedFiles = await getChangeTypeFiles({
+ inputs,
+ changedFiles: allDiffFiles,
+ changeTypes: [ChangeTypeEnum.Deleted]
+ })
+
+ const allOtherDeletedFilesPaths: string[] = getArrayFromPaths(
+ allOtherDeletedFiles.paths,
+ inputs
+ )
+
+ const deletedFilesPaths: string[] = getArrayFromPaths(
+ deletedFiles.paths,
+ inputs
+ )
+
+ const otherDeletedFiles = allOtherDeletedFilesPaths.filter(
+ filePath => !deletedFilesPaths.includes(filePath)
+ )
+
+ const onlyDeleted =
+ otherDeletedFiles.length === 0 &&
+ deletedFiles.paths.length > 0 &&
+ filePatterns.length > 0
+
+ await setOutput({
+ key: getOutputKey('only_deleted', outputPrefix),
+ value: onlyDeleted,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json
+ })
+
+ await setArrayOutput({
+ key: 'other_deleted_files',
+ inputs,
+ value: otherDeletedFiles,
+ outputPrefix
+ })
+
+ await setOutput({
+ key: getOutputKey('other_deleted_files_count', outputPrefix),
+ value: otherDeletedFiles.length.toString(),
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir
+ })
+
+ return {
+ anyModified: allModifiedFiles.paths.length > 0,
+ anyChanged: allChangedFiles.paths.length > 0
+ }
+}
diff --git a/src/commitSha.ts b/src/commitSha.ts
new file mode 100644
index 0000000..9daf6f9
--- /dev/null
+++ b/src/commitSha.ts
@@ -0,0 +1,644 @@
+import * as core from '@actions/core'
+import * as github from '@actions/github'
+
+import {Env} from './env'
+import {Inputs} from './inputs'
+import {
+ canDiffCommits,
+ cleanShaInput,
+ getCurrentBranchName,
+ getHeadSha,
+ getParentSha,
+ getPreviousGitTag,
+ getRemoteBranchHeadSha,
+ gitFetch,
+ gitFetchSubmodules,
+ gitLog,
+ verifyCommitSha
+} from './utils'
+
+const getCurrentSHA = async ({
+ inputs,
+ workingDirectory
+}: {
+ inputs: Inputs
+ workingDirectory: string
+}): Promise => {
+ let currentSha = await cleanShaInput({
+ sha: inputs.sha,
+ cwd: workingDirectory,
+ token: inputs.token
+ })
+ core.debug('Getting current SHA...')
+
+ if (inputs.until) {
+ core.debug(`Getting base SHA for '${inputs.until}'...`)
+ try {
+ currentSha = await gitLog({
+ cwd: workingDirectory,
+ args: [
+ '--format=%H',
+ '-n',
+ '1',
+ '--date',
+ 'local',
+ '--until',
+ inputs.until
+ ]
+ })
+ } catch (error) {
+ core.error(
+ `Invalid until date: ${inputs.until}. ${(error as Error).message}`
+ )
+ throw error
+ }
+ } else {
+ if (!currentSha) {
+ if (
+ github.context.payload.pull_request?.head?.sha &&
+ (await verifyCommitSha({
+ sha: github.context.payload.pull_request?.head?.sha,
+ cwd: workingDirectory,
+ showAsErrorMessage: false
+ })) === 0
+ ) {
+ currentSha = github.context.payload.pull_request?.head?.sha
+ } else if (github.context.eventName === 'merge_group') {
+ currentSha = github.context.payload.merge_group?.head_sha
+ } else {
+ currentSha = await getHeadSha({cwd: workingDirectory})
+ }
+ }
+ }
+
+ await verifyCommitSha({sha: currentSha, cwd: workingDirectory})
+ core.debug(`Current SHA: ${currentSha}`)
+
+ return currentSha
+}
+
+export interface DiffResult {
+ previousSha: string
+ currentSha: string
+ currentBranch: string
+ targetBranch: string
+ diff: string
+ initialCommit?: boolean
+}
+
+interface SHAForNonPullRequestEvent {
+ inputs: Inputs
+ env: Env
+ workingDirectory: string
+ isShallow: boolean
+ diffSubmodule: boolean
+ gitFetchExtraArgs: string[]
+ isTag: boolean
+ remoteName: string
+}
+
+export const getSHAForNonPullRequestEvent = async ({
+ inputs,
+ env,
+ workingDirectory,
+ isShallow,
+ diffSubmodule,
+ gitFetchExtraArgs,
+ isTag,
+ remoteName
+}: SHAForNonPullRequestEvent): Promise => {
+ let targetBranch = env.GITHUB_REF_NAME
+ let currentBranch = targetBranch
+ let initialCommit = false
+
+ if (!inputs.skipInitialFetch) {
+ if (isShallow) {
+ core.info('Repository is shallow, fetching more history...')
+
+ if (isTag) {
+ let sourceBranch = ''
+
+ if (github.context.payload.base_ref) {
+ sourceBranch = github.context.payload.base_ref.replace(
+ 'refs/heads/',
+ ''
+ )
+ } else if (github.context.payload.release?.target_commitish) {
+ sourceBranch = github.context.payload.release?.target_commitish
+ }
+
+ await gitFetch({
+ cwd: workingDirectory,
+ args: [
+ ...gitFetchExtraArgs,
+ '-u',
+ '--progress',
+ `--deepen=${inputs.fetchDepth}`,
+ remoteName,
+ `+refs/heads/${sourceBranch}:refs/remotes/${remoteName}/${sourceBranch}`
+ ]
+ })
+ } else {
+ await gitFetch({
+ cwd: workingDirectory,
+ args: [
+ ...gitFetchExtraArgs,
+ '-u',
+ '--progress',
+ `--deepen=${inputs.fetchDepth}`,
+ remoteName,
+ `+refs/heads/${targetBranch}:refs/remotes/${remoteName}/${targetBranch}`
+ ]
+ })
+ }
+
+ if (diffSubmodule) {
+ await gitFetchSubmodules({
+ cwd: workingDirectory,
+ args: [
+ ...gitFetchExtraArgs,
+ '-u',
+ '--progress',
+ `--deepen=${inputs.fetchDepth}`
+ ]
+ })
+ }
+ } else {
+ if (diffSubmodule && inputs.fetchAdditionalSubmoduleHistory) {
+ await gitFetchSubmodules({
+ cwd: workingDirectory,
+ args: [
+ ...gitFetchExtraArgs,
+ '-u',
+ '--progress',
+ `--deepen=${inputs.fetchDepth}`
+ ]
+ })
+ }
+ }
+ }
+
+ const currentSha = await getCurrentSHA({inputs, workingDirectory})
+ let previousSha = await cleanShaInput({
+ sha: inputs.baseSha,
+ cwd: workingDirectory,
+ token: inputs.token
+ })
+ const diff = '..'
+ const currentBranchName = await getCurrentBranchName({cwd: workingDirectory})
+
+ if (
+ currentBranchName &&
+ currentBranchName !== 'HEAD' &&
+ (currentBranchName !== targetBranch || currentBranchName !== currentBranch)
+ ) {
+ targetBranch = currentBranchName
+ currentBranch = currentBranchName
+ }
+
+ if (inputs.baseSha && inputs.sha && currentBranch && targetBranch) {
+ if (previousSha === currentSha) {
+ core.error(
+ `Similar commit hashes detected: previous sha: ${previousSha} is equivalent to the current sha: ${currentSha}.`
+ )
+ core.error(
+ `Please verify that both commits are valid, and increase the fetch_depth to a number higher than ${inputs.fetchDepth}.`
+ )
+ throw new Error('Similar commit hashes detected.')
+ }
+
+ core.debug(`Previous SHA: ${previousSha}`)
+
+ return {
+ previousSha,
+ currentSha,
+ currentBranch,
+ targetBranch,
+ diff
+ }
+ }
+
+ if (!previousSha || previousSha === currentSha) {
+ core.debug('Getting previous SHA...')
+ if (inputs.since) {
+ core.debug(`Getting base SHA for '${inputs.since}'...`)
+ try {
+ const allCommitsFrom = await gitLog({
+ cwd: workingDirectory,
+ args: ['--format=%H', '--date', 'local', '--since', inputs.since]
+ })
+
+ if (allCommitsFrom) {
+ const allCommitsFromArray = allCommitsFrom.split('\n')
+ previousSha = allCommitsFromArray[allCommitsFromArray.length - 1]
+ }
+ } catch (error) {
+ core.error(
+ `Invalid since date: ${inputs.since}. ${(error as Error).message}`
+ )
+ throw error
+ }
+ } else if (isTag) {
+ core.debug('Getting previous SHA for tag...')
+ const {sha, tag} = await getPreviousGitTag({
+ cwd: workingDirectory,
+ tagsPattern: inputs.tagsPattern,
+ tagsIgnorePattern: inputs.tagsIgnorePattern,
+ currentBranch
+ })
+ previousSha = sha
+ targetBranch = tag
+ } else {
+ if (github.context.eventName === 'merge_group') {
+ core.debug('Getting previous SHA for merge group...')
+ previousSha = github.context.payload.merge_group?.base_sha
+ } else {
+ core.debug('Getting previous SHA for last remote commit...')
+ if (
+ github.context.payload.forced === 'false' ||
+ !github.context.payload.forced
+ ) {
+ previousSha = github.context.payload.before
+ }
+ }
+
+ if (
+ !previousSha ||
+ previousSha === '0000000000000000000000000000000000000000'
+ ) {
+ previousSha = await getParentSha({
+ cwd: workingDirectory
+ })
+ } else if (
+ (await verifyCommitSha({
+ sha: previousSha,
+ cwd: workingDirectory,
+ showAsErrorMessage: false
+ })) !== 0
+ ) {
+ core.warning(
+ `Previous commit ${previousSha} is not valid. Using parent commit.`
+ )
+ previousSha = await getParentSha({
+ cwd: workingDirectory
+ })
+ }
+
+ if (!previousSha || previousSha === currentSha) {
+ previousSha = await getParentSha({
+ cwd: workingDirectory
+ })
+
+ if (!previousSha) {
+ core.warning('Initial commit detected no previous commit found.')
+ initialCommit = true
+ previousSha = currentSha
+ }
+ }
+ }
+ }
+
+ await verifyCommitSha({sha: previousSha, cwd: workingDirectory})
+ core.debug(`Previous SHA: ${previousSha}`)
+
+ core.debug(`Target branch: ${targetBranch}`)
+ core.debug(`Current branch: ${currentBranch}`)
+
+ if (!initialCommit && previousSha === currentSha) {
+ core.error(
+ `Similar commit hashes detected: previous sha: ${previousSha} is equivalent to the current sha: ${currentSha}.`
+ )
+ core.error(
+ `Please verify that both commits are valid, and increase the fetch_depth to a number higher than ${inputs.fetchDepth}.`
+ )
+ throw new Error('Similar commit hashes detected.')
+ }
+
+ return {
+ previousSha,
+ currentSha,
+ currentBranch,
+ targetBranch,
+ diff,
+ initialCommit
+ }
+}
+
+interface SHAForPullRequestEvent {
+ inputs: Inputs
+ workingDirectory: string
+ isShallow: boolean
+ diffSubmodule: boolean
+ gitFetchExtraArgs: string[]
+ remoteName: string
+}
+
+export const getSHAForPullRequestEvent = async ({
+ inputs,
+ workingDirectory,
+ isShallow,
+ diffSubmodule,
+ gitFetchExtraArgs,
+ remoteName
+}: SHAForPullRequestEvent): Promise => {
+ let targetBranch = github.context.payload.pull_request?.base?.ref
+ const currentBranch = github.context.payload.pull_request?.head?.ref
+ if (inputs.sinceLastRemoteCommit) {
+ targetBranch = currentBranch
+ }
+
+ if (!inputs.skipInitialFetch) {
+ core.info('Repository is shallow, fetching more history...')
+ if (isShallow) {
+ let prFetchExitCode = await gitFetch({
+ cwd: workingDirectory,
+ args: [
+ ...gitFetchExtraArgs,
+ '-u',
+ '--progress',
+ remoteName,
+ `pull/${github.context.payload.pull_request?.number}/head:${currentBranch}`
+ ]
+ })
+
+ if (prFetchExitCode !== 0) {
+ prFetchExitCode = await gitFetch({
+ cwd: workingDirectory,
+ args: [
+ ...gitFetchExtraArgs,
+ '-u',
+ '--progress',
+ `--deepen=${inputs.fetchDepth}`,
+ remoteName,
+ `+refs/heads/${currentBranch}*:refs/remotes/${remoteName}/${currentBranch}*`
+ ]
+ })
+ }
+
+ if (prFetchExitCode !== 0) {
+ throw new Error(
+ 'Failed to fetch pull request branch. Please ensure "persist-credentials" is set to "true" when checking out the repository. See: https://github.com/actions/checkout#usage'
+ )
+ }
+ core.debug('Fetching target branch...')
+ await gitFetch({
+ cwd: workingDirectory,
+ args: [
+ ...gitFetchExtraArgs,
+ '-u',
+ '--progress',
+ `--deepen=${inputs.fetchDepth}`,
+ remoteName,
+ `+refs/heads/${github.context.payload.pull_request?.base?.ref}:refs/remotes/${remoteName}/${github.context.payload.pull_request?.base?.ref}`
+ ]
+ })
+
+ if (diffSubmodule) {
+ await gitFetchSubmodules({
+ cwd: workingDirectory,
+ args: [
+ ...gitFetchExtraArgs,
+ '-u',
+ '--progress',
+ `--deepen=${inputs.fetchDepth}`
+ ]
+ })
+ }
+ } else {
+ if (diffSubmodule && inputs.fetchAdditionalSubmoduleHistory) {
+ await gitFetchSubmodules({
+ cwd: workingDirectory,
+ args: [
+ ...gitFetchExtraArgs,
+ '-u',
+ '--progress',
+ `--deepen=${inputs.fetchDepth}`
+ ]
+ })
+ }
+ }
+ core.info('Completed fetching more history.')
+ }
+
+ const currentSha = await getCurrentSHA({inputs, workingDirectory})
+ let previousSha = await cleanShaInput({
+ sha: inputs.baseSha,
+ cwd: workingDirectory,
+ token: inputs.token
+ })
+ let diff = '...'
+
+ if (inputs.baseSha && inputs.sha && currentBranch && targetBranch) {
+ if (previousSha === currentSha) {
+ core.error(
+ `Similar commit hashes detected: previous sha: ${previousSha} is equivalent to the current sha: ${currentSha}.`
+ )
+ core.error(
+ `Please verify that both commits are valid, and increase the fetch_depth to a number higher than ${inputs.fetchDepth}.`
+ )
+ throw new Error('Similar commit hashes detected.')
+ }
+
+ core.debug(`Previous SHA: ${previousSha}`)
+
+ return {
+ previousSha,
+ currentSha,
+ currentBranch,
+ targetBranch,
+ diff
+ }
+ }
+
+ if (!github.context.payload.pull_request?.base?.ref) {
+ diff = '..'
+ }
+
+ if (!previousSha || previousSha === currentSha) {
+ if (inputs.sinceLastRemoteCommit) {
+ previousSha = github.context.payload.before
+
+ if (
+ !previousSha ||
+ (previousSha &&
+ (await verifyCommitSha({
+ sha: previousSha,
+ cwd: workingDirectory,
+ showAsErrorMessage: false
+ })) !== 0)
+ ) {
+ core.info(
+ `Unable to locate the previous commit in the local history for ${github.context.eventName} (${github.context.payload.action}) event. Falling back to the previous commit in the local history.`
+ )
+
+ previousSha = await getParentSha({
+ cwd: workingDirectory
+ })
+
+ if (
+ github.context.payload.action &&
+ github.context.payload.action === 'synchronize' &&
+ previousSha &&
+ (!previousSha ||
+ (previousSha &&
+ (await verifyCommitSha({
+ sha: previousSha,
+ cwd: workingDirectory,
+ showAsErrorMessage: false
+ })) !== 0))
+ ) {
+ throw new Error(
+ 'Unable to locate the previous commit in the local history. Please ensure to checkout pull request HEAD commit instead of the merge commit. See: https://github.com/actions/checkout/blob/main/README.md#checkout-pull-request-head-commit-instead-of-merge-commit'
+ )
+ }
+
+ if (
+ !previousSha ||
+ (previousSha &&
+ (await verifyCommitSha({
+ sha: previousSha,
+ cwd: workingDirectory,
+ showAsErrorMessage: false
+ })) !== 0)
+ ) {
+ throw new Error(
+ 'Unable to locate the previous commit in the local history. Please ensure to checkout pull request HEAD commit instead of the merge commit. See: https://github.com/actions/checkout/blob/main/README.md#checkout-pull-request-head-commit-instead-of-merge-commit'
+ )
+ }
+ }
+ } else {
+ previousSha = github.context.payload.pull_request?.base?.sha
+
+ if (!previousSha) {
+ previousSha = await getRemoteBranchHeadSha({
+ cwd: workingDirectory,
+ remoteName,
+ branch: targetBranch
+ })
+ }
+
+ if (isShallow) {
+ if (
+ !(await canDiffCommits({
+ cwd: workingDirectory,
+ sha1: previousSha,
+ sha2: currentSha,
+ diff
+ }))
+ ) {
+ core.info(
+ 'Merge base is not in the local history, fetching remote target branch...'
+ )
+
+ for (
+ let i = 1;
+ i <= (inputs.fetchMissingHistoryMaxRetries || 10);
+ i++
+ ) {
+ await gitFetch({
+ cwd: workingDirectory,
+ args: [
+ ...gitFetchExtraArgs,
+ '-u',
+ '--progress',
+ `--deepen=${inputs.fetchDepth}`,
+ remoteName,
+ `+refs/heads/${targetBranch}:refs/remotes/${remoteName}/${targetBranch}`
+ ]
+ })
+
+ if (
+ await canDiffCommits({
+ cwd: workingDirectory,
+ sha1: previousSha,
+ sha2: currentSha,
+ diff
+ })
+ ) {
+ break
+ }
+
+ core.info(
+ 'Merge base is not in the local history, fetching remote target branch again...'
+ )
+ core.info(`Attempt ${i}/10`)
+ }
+ }
+ }
+ }
+
+ if (!previousSha || previousSha === currentSha) {
+ previousSha = github.context.payload.pull_request?.base?.sha
+ }
+ }
+
+ if (
+ !(await canDiffCommits({
+ cwd: workingDirectory,
+ sha1: previousSha,
+ sha2: currentSha,
+ diff
+ }))
+ ) {
+ diff = '..'
+ }
+
+ await verifyCommitSha({sha: previousSha, cwd: workingDirectory})
+ core.debug(`Previous SHA: ${previousSha}`)
+
+ if (
+ !(await canDiffCommits({
+ cwd: workingDirectory,
+ sha1: previousSha,
+ sha2: currentSha,
+ diff
+ }))
+ ) {
+ core.warning(
+ 'If this pull request is from a forked repository, please set the checkout action `repository` input to the same repository as the pull request.'
+ )
+ core.warning(
+ 'This can be done by setting actions/checkout `repository` to ${{ github.event.pull_request.head.repo.full_name }}'
+ )
+ throw new Error(
+ `Unable to determine a difference between ${previousSha}${diff}${currentSha}`
+ )
+ }
+
+ if (previousSha === currentSha) {
+ core.error(
+ `Similar commit hashes detected: previous sha: ${previousSha} is equivalent to the current sha: ${currentSha}.`
+ )
+ // This occurs if a PR is created from a forked repository and the event is pull_request_target.
+ // - name: Checkout to branch
+ // uses: actions/checkout@v3
+ // Without setting the repository to use the same repository as the pull request will cause the previousSha
+ // to be the same as the currentSha since the currentSha cannot be found in the local history.
+ // The solution is to use:
+ // - name: Checkout to branch
+ // uses: actions/checkout@v3
+ // with:
+ // repository: ${{ github.event.pull_request.head.repo.full_name }}
+ if (github.context.eventName === 'pull_request_target') {
+ core.warning(
+ 'If this pull request is from a forked repository, please set the checkout action `repository` input to the same repository as the pull request.'
+ )
+ core.warning(
+ 'This can be done by setting actions/checkout `repository` to ${{ github.event.pull_request.head.repo.full_name }}'
+ )
+ } else {
+ core.error(
+ `Please verify that both commits are valid, and increase the fetch_depth to a number higher than ${inputs.fetchDepth}.`
+ )
+ }
+ throw new Error('Similar commit hashes detected.')
+ }
+
+ return {
+ previousSha,
+ currentSha,
+ currentBranch,
+ targetBranch,
+ diff
+ }
+}
diff --git a/src/constant.ts b/src/constant.ts
new file mode 100644
index 0000000..930d5f9
--- /dev/null
+++ b/src/constant.ts
@@ -0,0 +1,29 @@
+import {Inputs} from './inputs'
+
+export const DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS: Partial = {
+ sha: '',
+ baseSha: '',
+ since: '',
+ until: '',
+ path: '.',
+ quotepath: true,
+ diffRelative: true,
+ sinceLastRemoteCommit: false,
+ recoverDeletedFiles: false,
+ recoverDeletedFilesToDestination: '',
+ recoverFiles: '',
+ recoverFilesSeparator: '\n',
+ recoverFilesIgnore: '',
+ recoverFilesIgnoreSeparator: '\n',
+ includeAllOldNewRenamedFiles: false,
+ oldNewSeparator: ',',
+ oldNewFilesSeparator: ' ',
+ skipInitialFetch: false,
+ fetchAdditionalSubmoduleHistory: false,
+ dirNamesDeletedFilesIncludeOnlyDeletedDirs: false,
+ excludeSubmodules: false,
+ fetchMissingHistoryMaxRetries: 20,
+ usePosixPathSeparator: false,
+ tagsPattern: '*',
+ tagsIgnorePattern: ''
+}
diff --git a/src/env.ts b/src/env.ts
new file mode 100644
index 0000000..de524f3
--- /dev/null
+++ b/src/env.ts
@@ -0,0 +1,13 @@
+export type Env = {
+ GITHUB_REF_NAME: string
+ GITHUB_REF: string
+ GITHUB_WORKSPACE: string
+}
+
+export const getEnv = async (): Promise => {
+ return {
+ GITHUB_REF_NAME: process.env.GITHUB_REF_NAME || '',
+ GITHUB_REF: process.env.GITHUB_REF || '',
+ GITHUB_WORKSPACE: process.env.GITHUB_WORKSPACE || ''
+ }
+}
diff --git a/src/inputs.ts b/src/inputs.ts
new file mode 100644
index 0000000..3ec7e18
--- /dev/null
+++ b/src/inputs.ts
@@ -0,0 +1,351 @@
+import * as core from '@actions/core'
+
+export type Inputs = {
+ files: string
+ filesSeparator: string
+ filesFromSourceFile: string
+ filesFromSourceFileSeparator: string
+ filesYaml: string
+ filesYamlFromSourceFile: string
+ filesYamlFromSourceFileSeparator: string
+ filesIgnore: string
+ filesIgnoreSeparator: string
+ filesIgnoreFromSourceFile: string
+ filesIgnoreFromSourceFileSeparator: string
+ filesIgnoreYaml: string
+ filesIgnoreYamlFromSourceFile: string
+ filesIgnoreYamlFromSourceFileSeparator: string
+ separator: string
+ includeAllOldNewRenamedFiles: boolean
+ oldNewSeparator: string
+ oldNewFilesSeparator: string
+ sha: string
+ baseSha: string
+ since: string
+ until: string
+ path: string
+ quotepath: boolean
+ diffRelative: boolean
+ dirNames: boolean
+ dirNamesMaxDepth?: number
+ dirNamesExcludeCurrentDir: boolean
+ dirNamesIncludeFiles: string
+ dirNamesIncludeFilesSeparator: string
+ dirNamesDeletedFilesIncludeOnlyDeletedDirs: boolean
+ json: boolean
+ escapeJson: boolean
+ safeOutput: boolean
+ fetchDepth?: number
+ fetchAdditionalSubmoduleHistory: boolean
+ sinceLastRemoteCommit: boolean
+ writeOutputFiles: boolean
+ outputDir: string
+ outputRenamedFilesAsDeletedAndAdded: boolean
+ recoverDeletedFiles: boolean
+ recoverDeletedFilesToDestination: string
+ recoverFiles: string
+ recoverFilesSeparator: string
+ recoverFilesIgnore: string
+ recoverFilesIgnoreSeparator: string
+ token: string
+ apiUrl: string
+ skipInitialFetch: boolean
+ failOnInitialDiffError: boolean
+ failOnSubmoduleDiffError: boolean
+ negationPatternsFirst: boolean
+ useRestApi: boolean
+ excludeSubmodules: boolean
+ fetchMissingHistoryMaxRetries?: number
+ usePosixPathSeparator: boolean
+ tagsPattern: string
+ tagsIgnorePattern?: string
+}
+
+export const getInputs = (): Inputs => {
+ const files = core.getInput('files', {required: false})
+ const filesSeparator = core.getInput('files_separator', {
+ required: false,
+ trimWhitespace: false
+ })
+ const filesIgnore = core.getInput('files_ignore', {required: false})
+ const filesIgnoreSeparator = core.getInput('files_ignore_separator', {
+ required: false,
+ trimWhitespace: false
+ })
+ const filesFromSourceFile = core.getInput('files_from_source_file', {
+ required: false
+ })
+ const filesFromSourceFileSeparator = core.getInput(
+ 'files_from_source_file_separator',
+ {
+ required: false,
+ trimWhitespace: false
+ }
+ )
+ const filesYaml = core.getInput('files_yaml', {required: false})
+ const filesYamlFromSourceFile = core.getInput('files_yaml_from_source_file', {
+ required: false
+ })
+ const filesYamlFromSourceFileSeparator = core.getInput(
+ 'files_yaml_from_source_file_separator',
+ {
+ required: false,
+ trimWhitespace: false
+ }
+ )
+ const filesIgnoreFromSourceFile = core.getInput(
+ 'files_ignore_from_source_file',
+ {required: false}
+ )
+ const filesIgnoreFromSourceFileSeparator = core.getInput(
+ 'files_ignore_from_source_file_separator',
+ {
+ required: false,
+ trimWhitespace: false
+ }
+ )
+ const filesIgnoreYaml = core.getInput('files_ignore_yaml', {required: false})
+ const filesIgnoreYamlFromSourceFile = core.getInput(
+ 'files_ignore_yaml_from_source_file',
+ {required: false}
+ )
+ const filesIgnoreYamlFromSourceFileSeparator = core.getInput(
+ 'files_ignore_yaml_from_source_file_separator',
+ {
+ required: false,
+ trimWhitespace: false
+ }
+ )
+ const separator = core.getInput('separator', {
+ required: true,
+ trimWhitespace: false
+ })
+ const includeAllOldNewRenamedFiles = core.getBooleanInput(
+ 'include_all_old_new_renamed_files',
+ {required: false}
+ )
+ const oldNewSeparator = core.getInput('old_new_separator', {
+ required: true,
+ trimWhitespace: false
+ })
+ const oldNewFilesSeparator = core.getInput('old_new_files_separator', {
+ required: true,
+ trimWhitespace: false
+ })
+ const sha = core.getInput('sha', {required: false})
+ const baseSha = core.getInput('base_sha', {required: false})
+ const since = core.getInput('since', {required: false})
+ const until = core.getInput('until', {required: false})
+ const path = core.getInput('path', {required: false})
+ const quotepath = core.getBooleanInput('quotepath', {required: false})
+ const diffRelative = core.getBooleanInput('diff_relative', {required: false})
+ const dirNames = core.getBooleanInput('dir_names', {required: false})
+ const dirNamesMaxDepth = core.getInput('dir_names_max_depth', {
+ required: false
+ })
+ const dirNamesExcludeCurrentDir = core.getBooleanInput(
+ 'dir_names_exclude_current_dir',
+ {
+ required: false
+ }
+ )
+ const dirNamesIncludeFiles = core.getInput('dir_names_include_files', {
+ required: false
+ })
+ const dirNamesIncludeFilesSeparator = core.getInput(
+ 'dir_names_include_files_separator',
+ {
+ required: false,
+ trimWhitespace: false
+ }
+ )
+ let json = core.getBooleanInput('json', {required: false})
+ let escapeJson = core.getBooleanInput('escape_json', {required: false})
+ const matrix = core.getBooleanInput('matrix', {required: false})
+
+ if (matrix) {
+ json = true
+ escapeJson = false
+ }
+
+ const safeOutput = core.getBooleanInput('safe_output', {required: false})
+ const fetchDepth = core.getInput('fetch_depth', {required: false})
+ const sinceLastRemoteCommit = core.getBooleanInput(
+ 'since_last_remote_commit',
+ {required: false}
+ )
+ const writeOutputFiles = core.getBooleanInput('write_output_files', {
+ required: false
+ })
+ const outputDir = core.getInput('output_dir', {required: false})
+ const outputRenamedFilesAsDeletedAndAdded = core.getBooleanInput(
+ 'output_renamed_files_as_deleted_and_added',
+ {required: false}
+ )
+ const recoverDeletedFiles = core.getBooleanInput('recover_deleted_files', {
+ required: false
+ })
+ const recoverDeletedFilesToDestination = core.getInput(
+ 'recover_deleted_files_to_destination',
+ {required: false}
+ )
+ const recoverFiles = core.getInput('recover_files', {required: false})
+ const recoverFilesSeparator = core.getInput('recover_files_separator', {
+ required: false,
+ trimWhitespace: false
+ })
+ const recoverFilesIgnore = core.getInput('recover_files_ignore', {
+ required: false
+ })
+ const recoverFilesIgnoreSeparator = core.getInput(
+ 'recover_files_ignore_separator',
+ {
+ required: false,
+ trimWhitespace: false
+ }
+ )
+ const token = core.getInput('token', {required: false})
+ const apiUrl = core.getInput('api_url', {required: false})
+ const skipInitialFetch = core.getBooleanInput('skip_initial_fetch', {
+ required: false
+ })
+ const fetchAdditionalSubmoduleHistory = core.getBooleanInput(
+ 'fetch_additional_submodule_history',
+ {
+ required: false
+ }
+ )
+ const failOnInitialDiffError = core.getBooleanInput(
+ 'fail_on_initial_diff_error',
+ {
+ required: false
+ }
+ )
+ const failOnSubmoduleDiffError = core.getBooleanInput(
+ 'fail_on_submodule_diff_error',
+ {
+ required: false
+ }
+ )
+ const dirNamesDeletedFilesIncludeOnlyDeletedDirs = core.getBooleanInput(
+ 'dir_names_deleted_files_include_only_deleted_dirs',
+ {
+ required: false
+ }
+ )
+
+ const negationPatternsFirst = core.getBooleanInput(
+ 'negation_patterns_first',
+ {
+ required: false
+ }
+ )
+
+ const useRestApi = core.getBooleanInput('use_rest_api', {
+ required: false
+ })
+
+ const excludeSubmodules = core.getBooleanInput('exclude_submodules', {
+ required: false
+ })
+
+ const fetchMissingHistoryMaxRetries = core.getInput(
+ 'fetch_missing_history_max_retries',
+ {required: false}
+ )
+
+ const usePosixPathSeparator = core.getBooleanInput(
+ 'use_posix_path_separator',
+ {
+ required: false
+ }
+ )
+
+ const tagsPattern = core.getInput('tags_pattern', {
+ required: false,
+ trimWhitespace: false
+ })
+ const tagsIgnorePattern = core.getInput('tags_ignore_pattern', {
+ required: false,
+ trimWhitespace: false
+ })
+
+ const inputs: Inputs = {
+ files,
+ filesSeparator,
+ filesFromSourceFile,
+ filesFromSourceFileSeparator,
+ filesYaml,
+ filesYamlFromSourceFile,
+ filesYamlFromSourceFileSeparator,
+ filesIgnore,
+ filesIgnoreSeparator,
+ filesIgnoreFromSourceFile,
+ filesIgnoreFromSourceFileSeparator,
+ filesIgnoreYaml,
+ filesIgnoreYamlFromSourceFile,
+ filesIgnoreYamlFromSourceFileSeparator,
+ failOnInitialDiffError,
+ failOnSubmoduleDiffError,
+ separator,
+ // Not Supported via REST API
+ sha,
+ baseSha,
+ since,
+ until,
+ path,
+ quotepath,
+ diffRelative,
+ sinceLastRemoteCommit,
+ recoverDeletedFiles,
+ recoverDeletedFilesToDestination,
+ recoverFiles,
+ recoverFilesSeparator,
+ recoverFilesIgnore,
+ recoverFilesIgnoreSeparator,
+ includeAllOldNewRenamedFiles,
+ oldNewSeparator,
+ oldNewFilesSeparator,
+ skipInitialFetch,
+ fetchAdditionalSubmoduleHistory,
+ dirNamesDeletedFilesIncludeOnlyDeletedDirs,
+ excludeSubmodules,
+ usePosixPathSeparator,
+ tagsPattern,
+ tagsIgnorePattern,
+ // End Not Supported via REST API
+ dirNames,
+ dirNamesExcludeCurrentDir,
+ dirNamesIncludeFiles,
+ dirNamesIncludeFilesSeparator,
+ json,
+ escapeJson,
+ safeOutput,
+ writeOutputFiles,
+ outputDir,
+ outputRenamedFilesAsDeletedAndAdded,
+ token,
+ apiUrl,
+ negationPatternsFirst,
+ useRestApi
+ }
+
+ if (fetchDepth) {
+ // Fallback to at least 2 if the fetch_depth is less than 2
+ inputs.fetchDepth = Math.max(parseInt(fetchDepth, 10), 2)
+ }
+
+ if (dirNamesMaxDepth) {
+ inputs.dirNamesMaxDepth = parseInt(dirNamesMaxDepth, 10)
+ }
+
+ if (fetchMissingHistoryMaxRetries) {
+ // Fallback to at least 1 if the fetch_missing_history_max_retries is less than 1
+ inputs.fetchMissingHistoryMaxRetries = Math.max(
+ parseInt(fetchMissingHistoryMaxRetries, 10),
+ 1
+ )
+ }
+
+ return inputs
+}
diff --git a/src/main.ts b/src/main.ts
new file mode 100644
index 0000000..5e87223
--- /dev/null
+++ b/src/main.ts
@@ -0,0 +1,317 @@
+import * as core from '@actions/core'
+import * as github from '@actions/github'
+import path from 'path'
+import {
+ processChangedFiles,
+ ChangeTypeEnum,
+ getAllDiffFiles,
+ getChangedFilesFromGithubAPI,
+ getRenamedFiles
+} from './changedFiles'
+import {
+ DiffResult,
+ getSHAForNonPullRequestEvent,
+ getSHAForPullRequestEvent
+} from './commitSha'
+import {Env, getEnv} from './env'
+import {getInputs, Inputs} from './inputs'
+import {
+ getFilePatterns,
+ getRecoverFilePatterns,
+ getSubmodulePath,
+ getYamlFilePatterns,
+ hasLocalGitDirectory,
+ isRepoShallow,
+ recoverDeletedFiles,
+ setOutput,
+ submoduleExists,
+ updateGitGlobalConfig,
+ verifyMinimumGitVersion,
+ warnUnsupportedRESTAPIInputs
+} from './utils'
+import axios, {isAxiosError} from 'axios'
+
+const getChangedFilesFromLocalGitHistory = async ({
+ inputs,
+ env,
+ workingDirectory,
+ filePatterns,
+ yamlFilePatterns
+}: {
+ inputs: Inputs
+ env: Env
+ workingDirectory: string
+ filePatterns: string[]
+ yamlFilePatterns: Record
+}): Promise => {
+ await verifyMinimumGitVersion()
+
+ let quotepathValue = 'on'
+
+ if (!inputs.quotepath) {
+ quotepathValue = 'off'
+ }
+
+ await updateGitGlobalConfig({
+ name: 'core.quotepath',
+ value: quotepathValue
+ })
+
+ if (inputs.diffRelative) {
+ await updateGitGlobalConfig({
+ name: 'diff.relative',
+ value: 'true'
+ })
+ }
+
+ const isShallow = await isRepoShallow({cwd: workingDirectory})
+ let diffSubmodule = false
+ let gitFetchExtraArgs = ['--no-tags', '--prune']
+
+ if (inputs.excludeSubmodules) {
+ core.info('Excluding submodules from the diff')
+ } else {
+ diffSubmodule = await submoduleExists({cwd: workingDirectory})
+ }
+
+ if (diffSubmodule) {
+ gitFetchExtraArgs.push('--recurse-submodules')
+ }
+
+ const isTag = env.GITHUB_REF?.startsWith('refs/tags/')
+ const remoteName = 'origin'
+ const outputRenamedFilesAsDeletedAndAdded =
+ inputs.outputRenamedFilesAsDeletedAndAdded
+ let submodulePaths: string[] = []
+
+ if (diffSubmodule) {
+ submodulePaths = await getSubmodulePath({cwd: workingDirectory})
+ }
+
+ if (isTag) {
+ gitFetchExtraArgs = ['--prune', '--no-recurse-submodules']
+ }
+
+ let diffResult: DiffResult
+
+ if (!github.context.payload.pull_request?.base?.ref) {
+ core.info(`Running on a ${github.context.eventName || 'push'} event...`)
+ diffResult = await getSHAForNonPullRequestEvent({
+ inputs,
+ env,
+ workingDirectory,
+ isShallow,
+ diffSubmodule,
+ gitFetchExtraArgs,
+ isTag,
+ remoteName
+ })
+ } else {
+ core.info(
+ `Running on a ${github.context.eventName || 'pull_request'} (${
+ github.context.payload.action
+ }) event...`
+ )
+ diffResult = await getSHAForPullRequestEvent({
+ inputs,
+ workingDirectory,
+ isShallow,
+ diffSubmodule,
+ gitFetchExtraArgs,
+ remoteName
+ })
+ }
+
+ if (diffResult.initialCommit) {
+ core.info('This is the first commit for this repository; exiting...')
+ core.endGroup()
+ return
+ }
+
+ core.info(
+ `Retrieving changes between ${diffResult.previousSha} (${diffResult.targetBranch}) → ${diffResult.currentSha} (${diffResult.currentBranch})`
+ )
+
+ const allDiffFiles = await getAllDiffFiles({
+ workingDirectory,
+ diffSubmodule,
+ diffResult,
+ submodulePaths,
+ outputRenamedFilesAsDeletedAndAdded,
+ fetchAdditionalSubmoduleHistory: inputs.fetchAdditionalSubmoduleHistory,
+ failOnInitialDiffError: inputs.failOnInitialDiffError,
+ failOnSubmoduleDiffError: inputs.failOnSubmoduleDiffError
+ })
+ core.debug(`All diff files: ${JSON.stringify(allDiffFiles)}`)
+ core.info('All Done!')
+ core.endGroup()
+
+ if (inputs.recoverDeletedFiles) {
+ let recoverPatterns = getRecoverFilePatterns({inputs})
+
+ if (recoverPatterns.length > 0 && filePatterns.length > 0) {
+ core.info('No recover patterns found; defaulting to file patterns')
+ recoverPatterns = filePatterns
+ }
+
+ await recoverDeletedFiles({
+ inputs,
+ workingDirectory,
+ deletedFiles: allDiffFiles[ChangeTypeEnum.Deleted],
+ recoverPatterns,
+ diffResult,
+ diffSubmodule,
+ submodulePaths
+ })
+ }
+
+ await processChangedFiles({
+ filePatterns,
+ allDiffFiles,
+ inputs,
+ yamlFilePatterns,
+ workingDirectory
+ })
+
+ if (inputs.includeAllOldNewRenamedFiles) {
+ core.startGroup('changed-files-all-old-new-renamed-files')
+ const allOldNewRenamedFiles = await getRenamedFiles({
+ inputs,
+ workingDirectory,
+ diffSubmodule,
+ diffResult,
+ submodulePaths
+ })
+ core.debug(`All old new renamed files: ${allOldNewRenamedFiles}`)
+ await setOutput({
+ key: 'all_old_new_renamed_files',
+ value: allOldNewRenamedFiles.paths,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json,
+ safeOutput: inputs.safeOutput
+ })
+ await setOutput({
+ key: 'all_old_new_renamed_files_count',
+ value: allOldNewRenamedFiles.count,
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json
+ })
+ core.info('All Done!')
+ core.endGroup()
+ }
+}
+
+const getChangedFilesFromRESTAPI = async ({
+ inputs,
+ filePatterns,
+ yamlFilePatterns
+}: {
+ inputs: Inputs
+ filePatterns: string[]
+ yamlFilePatterns: Record
+}): Promise => {
+ const allDiffFiles = await getChangedFilesFromGithubAPI({
+ inputs
+ })
+ core.debug(`All diff files: ${JSON.stringify(allDiffFiles)}`)
+ core.info('All Done!')
+
+ await processChangedFiles({
+ filePatterns,
+ allDiffFiles,
+ inputs,
+ yamlFilePatterns
+ })
+}
+
+// async function validateSubscription(): Promise {
+// const API_URL = `https://agent.api.stepsecurity.io/v1/github/${process.env.GITHUB_REPOSITORY}/actions/subscription`
+
+// try {
+// await axios.get(API_URL, {timeout: 3000})
+// } catch (error) {
+// if (isAxiosError(error) && error.response) {
+// core.error(
+// 'Subscription is not valid. Reach out to support@stepsecurity.io'
+// )
+// process.exit(1)
+// } else {
+// core.info('Timeout or API not reachable. Continuing to next step.')
+// }
+// }
+// }
+
+export async function run(): Promise {
+ //await validateSubscription()
+ core.startGroup('changed-files')
+
+ const env = await getEnv()
+ core.debug(`Env: ${JSON.stringify(env, null, 2)}`)
+
+ const inputs = getInputs()
+ core.debug(`Inputs: ${JSON.stringify(inputs, null, 2)}`)
+
+ const workingDirectory = path.resolve(
+ env.GITHUB_WORKSPACE || process.cwd(),
+ inputs.useRestApi ? '.' : inputs.path
+ )
+ core.debug(`Working directory: ${workingDirectory}`)
+
+ const hasGitDirectory = await hasLocalGitDirectory({workingDirectory})
+ core.debug(`Has git directory: ${hasGitDirectory}`)
+
+ const filePatterns = await getFilePatterns({
+ inputs,
+ workingDirectory
+ })
+ core.debug(`File patterns: ${filePatterns}`)
+
+ const yamlFilePatterns = await getYamlFilePatterns({
+ inputs,
+ workingDirectory
+ })
+ core.debug(`Yaml file patterns: ${JSON.stringify(yamlFilePatterns)}`)
+
+ if (inputs.useRestApi && !github.context.payload.pull_request?.number) {
+ throw new Error(
+ "Only pull_request* events are supported when using GitHub's REST API."
+ )
+ }
+
+ if (
+ inputs.token &&
+ github.context.payload.pull_request?.number &&
+ (!hasGitDirectory || inputs.useRestApi)
+ ) {
+ core.info("Using GitHub's REST API to get changed files")
+ await warnUnsupportedRESTAPIInputs({inputs})
+ await getChangedFilesFromRESTAPI({
+ inputs,
+ filePatterns,
+ yamlFilePatterns
+ })
+ } else {
+ if (!hasGitDirectory) {
+ throw new Error(
+ `Unable to locate the git repository in the given path: ${workingDirectory}.\n Please run actions/checkout before this action (Make sure the 'path' input is correct).\n If you intend to use Github's REST API note that only pull_request* events are supported. Current event is "${github.context.eventName}".`
+ )
+ }
+
+ core.info('Using local .git directory')
+ await getChangedFilesFromLocalGitHistory({
+ inputs,
+ env,
+ workingDirectory,
+ filePatterns,
+ yamlFilePatterns
+ })
+ }
+}
+
+// eslint-disable-next-line github/no-then
+run().catch(e => {
+ core.setFailed(e.message || e)
+ process.exit(1)
+})
diff --git a/src/utils.ts b/src/utils.ts
new file mode 100644
index 0000000..5ca3bde
--- /dev/null
+++ b/src/utils.ts
@@ -0,0 +1,1583 @@
+/*global AsyncIterableIterator*/
+import * as core from '@actions/core'
+import * as exec from '@actions/exec'
+import * as github from '@actions/github'
+import {createReadStream, promises as fs} from 'fs'
+import {flattenDeep, snakeCase} from 'lodash'
+import mm from 'micromatch'
+import * as path from 'path'
+import {createInterface} from 'readline'
+import {parseDocument} from 'yaml'
+import {ChangedFiles, ChangeTypeEnum} from './changedFiles'
+import {DiffResult} from './commitSha'
+import {DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS} from './constant'
+import {Inputs} from './inputs'
+
+const MINIMUM_GIT_VERSION = '2.18.0'
+
+export const isWindows = (): boolean => {
+ return process.platform === 'win32'
+}
+
+/**
+ * Normalize file path separators to '/' on Linux/macOS and '\\' on Windows
+ * @param p - file path
+ * @returns file path with normalized separators
+ */
+export const normalizeSeparators = (p: string): string => {
+ // Windows
+ if (isWindows()) {
+ // Convert slashes on Windows
+ p = p.replace(/\//g, '\\')
+
+ // Remove redundant slashes
+ const isUnc = /^\\\\+[^\\]/.test(p) // e.g. \\hello
+ p = (isUnc ? '\\' : '') + p.replace(/\\\\+/g, '\\') // preserve leading \\ for UNC
+ } else {
+ // Remove redundant slashes on Linux/macOS
+ p = p.replace(/\/\/+/g, '/')
+ }
+
+ return p
+}
+
+/**
+ * Trims unnecessary trailing slash from file path
+ * @param p - file path
+ * @returns file path without unnecessary trailing slash
+ */
+const safeTrimTrailingSeparator = (p: string): string => {
+ // Empty path
+ if (!p) {
+ return ''
+ }
+
+ // Normalize separators
+ p = normalizeSeparators(p)
+
+ // No trailing slash
+ if (!p.endsWith(path.sep)) {
+ return p
+ }
+
+ // Check '/' on Linux/macOS and '\' on Windows
+ if (p === path.sep) {
+ return p
+ }
+
+ // On Windows, avoid trimming the drive root, e.g. C:\ or \\hello
+ if (isWindows() && /^[A-Z]:\\$/i.test(p)) {
+ return p
+ }
+
+ // Trim trailing slash
+ return p.substring(0, p.length - 1)
+}
+
+/**
+ * Gets the dirname of a path, similar to the Node.js path.dirname() function except that this function
+ * also works for Windows UNC root paths, e.g. \\hello\world
+ * @param p - file path
+ * @returns dirname of path
+ */
+export const getDirname = (p: string): string => {
+ // Normalize slashes and trim unnecessary trailing slash
+ p = safeTrimTrailingSeparator(p)
+
+ // Windows UNC root, e.g. \\hello or \\hello\world
+ if (isWindows() && /^\\\\[^\\]+(\\[^\\]+)?$/.test(p)) {
+ return p
+ }
+
+ // Get dirname
+ let result = path.dirname(p)
+
+ // Trim trailing slash for Windows UNC root, e.g. \\hello\world\
+ if (isWindows() && /^\\\\[^\\]+\\[^\\]+\\$/.test(result)) {
+ result = safeTrimTrailingSeparator(result)
+ }
+
+ return result
+}
+
+/**
+ * Converts the version string to a number
+ * @param version - version string
+ * @returns version number
+ */
+const versionToNumber = (version: string): number => {
+ const [major, minor, patch] = version.split('.').map(Number)
+ return major * 1000000 + minor * 1000 + patch
+}
+
+/**
+ * Verifies the minimum required git version
+ * @returns minimum required git version
+ * @throws Minimum git version requirement is not met
+ * @throws Git is not installed
+ * @throws Git is not found in PATH
+ * @throws An unexpected error occurred
+ */
+export const verifyMinimumGitVersion = async (): Promise => {
+ const {exitCode, stdout, stderr} = await exec.getExecOutput(
+ 'git',
+ ['--version'],
+ {silent: !core.isDebug()}
+ )
+
+ if (exitCode !== 0) {
+ throw new Error(stderr || 'An unexpected error occurred')
+ }
+
+ const gitVersion = stdout.trim()
+
+ if (versionToNumber(gitVersion) < versionToNumber(MINIMUM_GIT_VERSION)) {
+ throw new Error(
+ `Minimum required git version is ${MINIMUM_GIT_VERSION}, your version is ${gitVersion}`
+ )
+ }
+}
+
+/**
+ * Checks if a path exists
+ * @param filePath - path to check
+ * @returns path exists
+ */
+export const exists = async (filePath: string): Promise => {
+ try {
+ await fs.access(filePath)
+ return true
+ } catch {
+ return false
+ }
+}
+
+/**
+ * Generates lines of a file as an async iterable iterator
+ * @param filePath - path of file to read
+ * @param excludedFiles - whether to exclude files
+ */
+async function* lineOfFileGenerator({
+ filePath,
+ excludedFiles
+}: {
+ filePath: string
+ excludedFiles: boolean
+}): AsyncIterableIterator {
+ const fileStream = createReadStream(filePath)
+ /* istanbul ignore next */
+ fileStream.on('error', error => {
+ throw error
+ })
+ const rl = createInterface({
+ input: fileStream,
+ crlfDelay: Infinity
+ })
+ for await (let line of rl) {
+ if (!line.startsWith('#') && line !== '') {
+ if (excludedFiles) {
+ line = line.startsWith('!') ? line : `!${line}`
+ if (line.endsWith(path.sep)) {
+ line = `${line}**`
+ }
+ yield line
+ } else {
+ line = line.endsWith(path.sep) ? `${line}**` : line
+ yield line
+ }
+ }
+ }
+}
+
+/**
+ * Gets the file patterns from a source file
+ * @param filePaths - paths of files to read
+ * @param excludedFiles - whether to exclude the file patterns
+ */
+const getFilesFromSourceFile = async ({
+ filePaths,
+ excludedFiles = false
+}: {
+ filePaths: string[]
+ excludedFiles?: boolean
+}): Promise => {
+ const lines: string[] = []
+ for (const filePath of filePaths) {
+ for await (const line of lineOfFileGenerator({filePath, excludedFiles})) {
+ lines.push(line)
+ }
+ }
+ return lines
+}
+
+/**
+ * Sets the global git configs
+ * @param name - name of config
+ * @param value - value of config
+ * @throws Couldn't update git global config
+ */
+export const updateGitGlobalConfig = async ({
+ name,
+ value
+}: {
+ name: string
+ value: string
+}): Promise => {
+ const {exitCode, stderr} = await exec.getExecOutput(
+ 'git',
+ ['config', '--global', name, value],
+ {
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ )
+
+ /* istanbul ignore if */
+ if (exitCode !== 0 || stderr) {
+ core.warning(stderr || `Couldn't update git global config ${name}`)
+ }
+}
+
+/**
+ * Checks if a git repository is shallow
+ * @param cwd - working directory
+ * @returns repository is shallow
+ */
+export const isRepoShallow = async ({cwd}: {cwd: string}): Promise => {
+ const {stdout} = await exec.getExecOutput(
+ 'git',
+ ['rev-parse', '--is-shallow-repository'],
+ {
+ cwd,
+ silent: !core.isDebug()
+ }
+ )
+
+ return stdout.trim() === 'true'
+}
+
+/**
+ * Checks if a submodule exists
+ * @param cwd - working directory
+ * @returns submodule exists
+ */
+export const submoduleExists = async ({
+ cwd
+}: {
+ cwd: string
+}): Promise => {
+ const {stdout, exitCode, stderr} = await exec.getExecOutput(
+ 'git',
+ ['submodule', 'status'],
+ {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ )
+
+ if (exitCode !== 0) {
+ core.warning(stderr || "Couldn't list submodules")
+ return false
+ }
+
+ return stdout.trim() !== ''
+}
+
+/**
+ * Fetches the git repository
+ * @param args - arguments for fetch command
+ * @param cwd - working directory
+ * @returns exit code
+ */
+export const gitFetch = async ({
+ args,
+ cwd
+}: {
+ args: string[]
+ cwd: string
+}): Promise => {
+ const {exitCode} = await exec.getExecOutput('git', ['fetch', '-q', ...args], {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ })
+
+ return exitCode
+}
+
+/**
+ * Fetches the git repository submodules
+ * @param args - arguments for fetch command
+ * @param cwd - working directory
+ */
+export const gitFetchSubmodules = async ({
+ args,
+ cwd
+}: {
+ args: string[]
+ cwd: string
+}): Promise => {
+ const {exitCode, stderr} = await exec.getExecOutput(
+ 'git',
+ ['submodule', 'foreach', 'git', 'fetch', '-q', ...args],
+ {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ )
+
+ /* istanbul ignore if */
+ if (exitCode !== 0) {
+ core.warning(stderr || "Couldn't fetch submodules")
+ }
+}
+
+/**
+ * Retrieves all the submodule paths
+ * @param cwd - working directory
+ * @returns submodule paths
+ */
+export const getSubmodulePath = async ({
+ cwd
+}: {
+ cwd: string
+}): Promise => {
+ const {exitCode, stdout, stderr} = await exec.getExecOutput(
+ 'git',
+ ['submodule', 'status'],
+ {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ )
+
+ if (exitCode !== 0) {
+ core.warning(stderr || "Couldn't get submodule names")
+ return []
+ }
+
+ return stdout
+ .trim()
+ .split('\n')
+ .map((line: string) => normalizeSeparators(line.trim().split(' ')[1]))
+}
+
+/**
+ * Retrieves commit sha of a submodule from a parent commit
+ * @param cwd - working directory
+ * @param parentSha1 - parent commit sha
+ * @param parentSha2 - parent commit sha
+ * @param submodulePath - path of submodule
+ * @param diff - diff type between parent commits (`..` or `...`)
+ * @returns commit sha of submodule
+ */
+export const gitSubmoduleDiffSHA = async ({
+ cwd,
+ parentSha1,
+ parentSha2,
+ submodulePath,
+ diff
+}: {
+ cwd: string
+ parentSha1: string
+ parentSha2: string
+ submodulePath: string
+ diff: string
+}): Promise<{previousSha?: string; currentSha?: string}> => {
+ const {stdout} = await exec.getExecOutput(
+ 'git',
+ ['diff', `${parentSha1}${diff}${parentSha2}`, '--', submodulePath],
+ {
+ cwd,
+ silent: !core.isDebug()
+ }
+ )
+
+ const subprojectCommitPreRegex =
+ /^(?-)Subproject commit (?.+)$/m
+ const subprojectCommitCurRegex =
+ /^(?\+)Subproject commit (?.+)$/m
+
+ const previousSha =
+ subprojectCommitPreRegex.exec(stdout)?.groups?.commitHash ||
+ '4b825dc642cb6eb9a060e54bf8d69288fbee4904'
+ const currentSha = subprojectCommitCurRegex.exec(stdout)?.groups?.commitHash
+
+ if (currentSha) {
+ return {previousSha, currentSha}
+ }
+
+ core.debug(
+ `No submodule commit found for ${submodulePath} between ${parentSha1}${diff}${parentSha2}`
+ )
+ return {}
+}
+
+export const gitRenamedFiles = async ({
+ cwd,
+ sha1,
+ sha2,
+ diff,
+ oldNewSeparator,
+ isSubmodule = false,
+ parentDir = ''
+}: {
+ cwd: string
+ sha1: string
+ sha2: string
+ diff: string
+ oldNewSeparator: string
+ isSubmodule?: boolean
+ parentDir?: string
+}): Promise => {
+ const {exitCode, stderr, stdout} = await exec.getExecOutput(
+ 'git',
+ [
+ 'diff',
+ '--name-status',
+ '--ignore-submodules=all',
+ '--diff-filter=R',
+ `${sha1}${diff}${sha2}`
+ ],
+ {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ )
+
+ if (exitCode !== 0) {
+ if (isSubmodule) {
+ core.warning(
+ stderr ||
+ `Failed to get renamed files for submodule between: ${sha1}${diff}${sha2}`
+ )
+ core.warning(
+ 'Please ensure that submodules are initialized and up to date. See: https://github.com/actions/checkout#usage'
+ )
+ } else {
+ core.error(
+ stderr || `Failed to get renamed files between: ${sha1}${diff}${sha2}`
+ )
+ throw new Error('Unable to get renamed files')
+ }
+
+ return []
+ }
+
+ return stdout
+ .trim()
+ .split('\n')
+ .filter(Boolean)
+ .map((line: string) => {
+ core.debug(`Renamed file: ${line}`)
+ const [, oldPath, newPath] = line.split('\t')
+ if (isSubmodule) {
+ return `${normalizeSeparators(
+ path.join(parentDir, oldPath)
+ )}${oldNewSeparator}${normalizeSeparators(
+ path.join(parentDir, newPath)
+ )}`
+ }
+ return `${normalizeSeparators(
+ oldPath
+ )}${oldNewSeparator}${normalizeSeparators(newPath)}`
+ })
+}
+
+/**
+ * Retrieves all the changed files between two commits
+ * @param cwd - working directory
+ * @param sha1 - commit sha
+ * @param sha2 - commit sha
+ * @param diff - diff type between parent commits (`..` or `...`)
+ * @param isSubmodule - is the repo a submodule
+ * @param parentDir - parent directory of the submodule
+ * @param outputRenamedFilesAsDeletedAndAdded - output renamed files as deleted and added
+ * @param failOnInitialDiffError - fail if the initial diff fails
+ * @param failOnSubmoduleDiffError - fail if the submodule diff fails
+ */
+export const getAllChangedFiles = async ({
+ cwd,
+ sha1,
+ sha2,
+ diff,
+ isSubmodule = false,
+ parentDir = '',
+ outputRenamedFilesAsDeletedAndAdded = false,
+ failOnInitialDiffError = false,
+ failOnSubmoduleDiffError = false
+}: {
+ cwd: string
+ sha1: string
+ sha2: string
+ diff: string
+ isSubmodule?: boolean
+ parentDir?: string
+ outputRenamedFilesAsDeletedAndAdded?: boolean
+ failOnInitialDiffError?: boolean
+ failOnSubmoduleDiffError?: boolean
+}): Promise => {
+ const {exitCode, stdout, stderr} = await exec.getExecOutput(
+ 'git',
+ [
+ 'diff',
+ '--name-status',
+ '--ignore-submodules=all',
+ `--diff-filter=ACDMRTUX`,
+ `${sha1}${diff}${sha2}`
+ ],
+ {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ )
+ const changedFiles: ChangedFiles = {
+ [ChangeTypeEnum.Added]: [],
+ [ChangeTypeEnum.Copied]: [],
+ [ChangeTypeEnum.Deleted]: [],
+ [ChangeTypeEnum.Modified]: [],
+ [ChangeTypeEnum.Renamed]: [],
+ [ChangeTypeEnum.TypeChanged]: [],
+ [ChangeTypeEnum.Unmerged]: [],
+ [ChangeTypeEnum.Unknown]: []
+ }
+
+ if (exitCode !== 0) {
+ if (failOnInitialDiffError && !isSubmodule) {
+ throw new Error(
+ `Failed to get changed files between: ${sha1}${diff}${sha2}: ${stderr}`
+ )
+ } else if (failOnSubmoduleDiffError && isSubmodule) {
+ throw new Error(
+ `Failed to get changed files for submodule between: ${sha1}${diff}${sha2}: ${stderr}`
+ )
+ }
+ }
+
+ if (exitCode !== 0) {
+ if (isSubmodule) {
+ core.warning(
+ stderr ||
+ `Failed to get changed files for submodule between: ${sha1}${diff}${sha2}`
+ )
+ core.warning(
+ 'Please ensure that submodules are initialized and up to date. See: https://github.com/actions/checkout#usage'
+ )
+ } else {
+ core.warning(
+ stderr || `Failed to get changed files between: ${sha1}${diff}${sha2}`
+ )
+ }
+
+ return changedFiles
+ }
+
+ const lines = stdout.split('\n').filter(Boolean)
+
+ for (const line of lines) {
+ const [changeType, filePath, newPath = ''] = line.split('\t')
+ const normalizedFilePath = isSubmodule
+ ? normalizeSeparators(path.join(parentDir, filePath))
+ : normalizeSeparators(filePath)
+ const normalizedNewPath = isSubmodule
+ ? normalizeSeparators(path.join(parentDir, newPath))
+ : normalizeSeparators(newPath)
+
+ if (changeType.startsWith('R')) {
+ if (outputRenamedFilesAsDeletedAndAdded) {
+ changedFiles[ChangeTypeEnum.Deleted].push(normalizedFilePath)
+ changedFiles[ChangeTypeEnum.Added].push(normalizedNewPath)
+ } else {
+ changedFiles[ChangeTypeEnum.Renamed].push(normalizedNewPath)
+ }
+ } else {
+ changedFiles[changeType as ChangeTypeEnum].push(normalizedFilePath)
+ }
+ }
+ return changedFiles
+}
+
+/**
+ * Filters the changed files by the file patterns
+ * @param allDiffFiles - all the changed files
+ * @param filePatterns - file patterns to filter by
+ */
+export const getFilteredChangedFiles = async ({
+ allDiffFiles,
+ filePatterns
+}: {
+ allDiffFiles: ChangedFiles
+ filePatterns: string[]
+}): Promise => {
+ const changedFiles: ChangedFiles = {
+ [ChangeTypeEnum.Added]: [],
+ [ChangeTypeEnum.Copied]: [],
+ [ChangeTypeEnum.Deleted]: [],
+ [ChangeTypeEnum.Modified]: [],
+ [ChangeTypeEnum.Renamed]: [],
+ [ChangeTypeEnum.TypeChanged]: [],
+ [ChangeTypeEnum.Unmerged]: [],
+ [ChangeTypeEnum.Unknown]: []
+ }
+ const hasFilePatterns = filePatterns.length > 0
+ const isWin = isWindows()
+
+ for (const changeType of Object.keys(allDiffFiles)) {
+ const files = allDiffFiles[changeType as ChangeTypeEnum]
+ if (hasFilePatterns) {
+ changedFiles[changeType as ChangeTypeEnum] = mm(files, filePatterns, {
+ dot: true,
+ windows: isWin,
+ noext: true
+ }).map(normalizeSeparators)
+ } else {
+ changedFiles[changeType as ChangeTypeEnum] = files
+ }
+ }
+
+ return changedFiles
+}
+
+export const gitLog = async ({
+ args,
+ cwd
+}: {
+ args: string[]
+ cwd: string
+}): Promise => {
+ const {stdout} = await exec.getExecOutput('git', ['log', ...args], {
+ cwd,
+ silent: !core.isDebug()
+ })
+
+ return stdout.trim()
+}
+
+export const getHeadSha = async ({cwd}: {cwd: string}): Promise => {
+ const {stdout} = await exec.getExecOutput('git', ['rev-parse', 'HEAD'], {
+ cwd,
+ silent: !core.isDebug()
+ })
+
+ return stdout.trim()
+}
+
+export const isInsideWorkTree = async ({
+ cwd
+}: {
+ cwd: string
+}): Promise => {
+ const {stdout} = await exec.getExecOutput(
+ 'git',
+ ['rev-parse', '--is-inside-work-tree'],
+ {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ )
+
+ return stdout.trim() === 'true'
+}
+
+export const getRemoteBranchHeadSha = async ({
+ cwd,
+ branch,
+ remoteName
+}: {
+ cwd: string
+ branch: string
+ remoteName: string
+}): Promise => {
+ const {stdout} = await exec.getExecOutput(
+ 'git',
+ ['rev-parse', `${remoteName}/${branch}`],
+ {
+ cwd,
+ silent: !core.isDebug()
+ }
+ )
+
+ return stdout.trim()
+}
+
+export const getCurrentBranchName = async ({
+ cwd
+}: {
+ cwd: string
+}): Promise => {
+ const {stdout, exitCode} = await exec.getExecOutput(
+ 'git',
+ ['rev-parse', '--abbrev-ref', 'HEAD'],
+ {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ )
+
+ if (exitCode !== 0) {
+ return ''
+ }
+
+ return stdout.trim()
+}
+
+export const getParentSha = async ({cwd}: {cwd: string}): Promise => {
+ const {stdout, exitCode} = await exec.getExecOutput(
+ 'git',
+ ['rev-list', '-n', '1', 'HEAD^'],
+ {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ )
+
+ if (exitCode !== 0) {
+ return ''
+ }
+
+ return stdout.trim()
+}
+
+export const verifyCommitSha = async ({
+ sha,
+ cwd,
+ showAsErrorMessage = true
+}: {
+ sha: string
+ cwd: string
+ showAsErrorMessage?: boolean
+}): Promise => {
+ const {exitCode, stderr} = await exec.getExecOutput(
+ 'git',
+ ['rev-parse', '--verify', `${sha}^{commit}`],
+ {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ )
+
+ if (exitCode !== 0) {
+ if (showAsErrorMessage) {
+ core.error(`Unable to locate the commit sha: ${sha}`)
+ core.error(
+ "Please verify that the commit sha is correct, and increase the 'fetch_depth' input if needed"
+ )
+ core.debug(stderr)
+ } else {
+ core.warning(`Unable to locate the commit sha: ${sha}`)
+ core.debug(stderr)
+ }
+ }
+
+ return exitCode
+}
+
+/**
+ * Clean the sha from the input which could be a branch name or a commit sha.
+ *
+ * If the input is a valid commit sha, return it as is.
+ *
+ * If the input is a branch name, get the HEAD sha of that branch and return it.
+ *
+ * @param sha The input string, which could be a branch name or a commit sha.
+ * @param cwd The working directory.
+ * @param token The GitHub token.
+ * @returns The cleaned SHA string.
+ */
+export const cleanShaInput = async ({
+ sha,
+ cwd,
+ token
+}: {
+ sha: string
+ cwd: string
+ token: string
+}): Promise => {
+ // Check if the input is a valid commit sha
+ if (!sha) {
+ return sha
+ }
+ // Check if the input is a valid commit sha
+ const {stdout, exitCode} = await exec.getExecOutput(
+ 'git',
+ ['rev-parse', '--verify', `${sha}^{commit}`],
+ {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ )
+
+ if (exitCode !== 0) {
+ const octokit = github.getOctokit(token)
+ // If it's not a valid commit sha, assume it's a branch name and get the HEAD sha
+ const {data: refData} = await octokit.rest.git.getRef({
+ owner: github.context.repo.owner,
+ repo: github.context.repo.repo,
+ ref: `heads/${sha}`
+ })
+
+ return refData.object.sha
+ }
+
+ return stdout.trim()
+}
+
+export const getPreviousGitTag = async ({
+ cwd,
+ tagsPattern,
+ currentBranch,
+ tagsIgnorePattern
+}: {
+ cwd: string
+ tagsPattern: string
+ currentBranch: string
+ tagsIgnorePattern?: string
+}): Promise<{tag: string; sha: string}> => {
+ const ignorePatterns: string[] = []
+ let currentShaDate: Date | null = null
+
+ const {stdout} = await exec.getExecOutput(
+ 'git',
+ [
+ 'tag',
+ '--sort=-creatordate',
+ '--format=%(refname:short)|%(objectname)|%(creatordate:iso)'
+ ],
+ {
+ cwd,
+ silent: !core.isDebug()
+ }
+ )
+
+ if (tagsIgnorePattern) {
+ ignorePatterns.push(tagsIgnorePattern)
+ }
+
+ if (currentBranch) {
+ ignorePatterns.push(currentBranch)
+ try {
+ const {stdout: currentShaDateOutput} = await exec.getExecOutput(
+ 'git',
+ ['show', '-s', '--format=%ai', currentBranch],
+ {
+ cwd,
+ silent: !core.isDebug()
+ }
+ )
+ currentShaDate = new Date(currentShaDateOutput.trim())
+ } catch (error) {
+ // Handle the case where the current branch doesn't exist
+ // This might happen in detached head state
+ core.warning(`Failed to get date for current branch ${currentBranch}`)
+ }
+ }
+
+ const previousTag: {tag: string; sha: string} = {tag: '', sha: ''}
+
+ const tags = stdout.trim().split('\n')
+ for (const tagData of tags) {
+ const [tag, sha, dateString] = tagData.split('|')
+ if (!mm.isMatch(tag, tagsPattern) || mm.isMatch(tag, ignorePatterns)) {
+ continue
+ }
+ const date = new Date(dateString)
+ if (currentShaDate && date >= currentShaDate) {
+ continue
+ }
+ // Found a suitable tag, no need to continue
+ previousTag.tag = tag
+ previousTag.sha = sha
+ break
+ }
+
+ if (!previousTag.tag) {
+ core.warning('No previous tag found')
+ }
+
+ return previousTag
+}
+
+export const canDiffCommits = async ({
+ cwd,
+ sha1,
+ sha2,
+ diff
+}: {
+ cwd: string
+ sha1: string
+ sha2: string
+ diff: string
+}): Promise => {
+ if (diff === '...') {
+ const mergeBase = await getMergeBase(cwd, sha1, sha2)
+
+ if (!mergeBase) {
+ core.warning(`Unable to find merge base between ${sha1} and ${sha2}`)
+ return false
+ }
+
+ const {exitCode, stderr} = await exec.getExecOutput(
+ 'git',
+ ['log', '--format=%H', `${mergeBase}..${sha2}`],
+ {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ )
+
+ if (exitCode !== 0) {
+ core.warning(stderr || `Error checking commit history`)
+ return false
+ }
+
+ return true
+ } else {
+ const {exitCode, stderr} = await exec.getExecOutput(
+ 'git',
+ ['diff', '--no-patch', sha1, sha2],
+ {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ )
+
+ if (exitCode !== 0) {
+ core.warning(stderr || `Error checking commit history`)
+ return false
+ }
+
+ return true
+ }
+}
+
+const getMergeBase = async (
+ cwd: string,
+ sha1: string,
+ sha2: string
+): Promise => {
+ const {exitCode, stdout} = await exec.getExecOutput(
+ 'git',
+ ['merge-base', sha1, sha2],
+ {
+ cwd,
+ ignoreReturnCode: true,
+ silent: !core.isDebug()
+ }
+ )
+
+ if (exitCode !== 0) {
+ return null
+ }
+
+ return stdout.trim()
+}
+
+export const getDirnameMaxDepth = ({
+ relativePath,
+ dirNamesMaxDepth,
+ excludeCurrentDir
+}: {
+ relativePath: string
+ dirNamesMaxDepth?: number
+ excludeCurrentDir?: boolean
+}): string => {
+ const pathArr = getDirname(relativePath).split(path.sep)
+ const maxDepth = Math.min(dirNamesMaxDepth || pathArr.length, pathArr.length)
+ let output = pathArr[0]
+
+ for (let i = 1; i < maxDepth; i++) {
+ output = path.join(output, pathArr[i])
+ }
+
+ if (excludeCurrentDir && output === '.') {
+ return ''
+ }
+
+ return normalizeSeparators(output)
+}
+
+export const jsonOutput = ({
+ value,
+ shouldEscape
+}: {
+ value: string | string[] | boolean
+ shouldEscape: boolean
+}): string => {
+ const result = JSON.stringify(value)
+
+ return shouldEscape ? result.replace(/"/g, '\\"') : result
+}
+
+export const getDirNamesIncludeFilesPattern = ({
+ inputs
+}: {
+ inputs: Inputs
+}): string[] => {
+ return inputs.dirNamesIncludeFiles
+ .split(inputs.dirNamesIncludeFilesSeparator)
+ .filter(Boolean)
+}
+
+export const getFilePatterns = async ({
+ inputs,
+ workingDirectory
+}: {
+ inputs: Inputs
+ workingDirectory: string
+}): Promise => {
+ let cleanedFilePatterns: string[] = []
+
+ if (inputs.files) {
+ const filesPatterns = inputs.files
+ .split(inputs.filesSeparator)
+ .map(p => (p.endsWith(path.sep) ? `${p}**` : p))
+ .filter(Boolean)
+
+ cleanedFilePatterns.push(...filesPatterns)
+
+ core.debug(`files patterns: ${filesPatterns.join('\n')}`)
+ }
+
+ if (inputs.filesFromSourceFile !== '') {
+ const inputFilesFromSourceFile = inputs.filesFromSourceFile
+ .split(inputs.filesFromSourceFileSeparator)
+ .filter(Boolean)
+ .map(p => path.join(workingDirectory, p))
+
+ core.debug(`files from source file: ${inputFilesFromSourceFile}`)
+
+ const filesFromSourceFiles = await getFilesFromSourceFile({
+ filePaths: inputFilesFromSourceFile
+ })
+
+ core.debug(
+ `files from source files patterns: ${filesFromSourceFiles.join('\n')}`
+ )
+
+ cleanedFilePatterns.push(...filesFromSourceFiles)
+ }
+
+ if (inputs.filesIgnore) {
+ const filesIgnorePatterns = inputs.filesIgnore
+ .split(inputs.filesIgnoreSeparator)
+ .filter(Boolean)
+ .map(p => {
+ p = p.startsWith('!') ? p : `!${p}`
+ if (p.endsWith(path.sep)) {
+ p = `${p}**`
+ }
+ return p
+ })
+
+ core.debug(`files ignore patterns: ${filesIgnorePatterns.join('\n')}`)
+
+ cleanedFilePatterns.push(...filesIgnorePatterns)
+ }
+
+ if (inputs.filesIgnoreFromSourceFile) {
+ const inputFilesIgnoreFromSourceFile = inputs.filesIgnoreFromSourceFile
+ .split(inputs.filesIgnoreFromSourceFileSeparator)
+ .filter(Boolean)
+ .map(p => path.join(workingDirectory, p))
+
+ core.debug(
+ `files ignore from source file: ${inputFilesIgnoreFromSourceFile}`
+ )
+
+ const filesIgnoreFromSourceFiles = await getFilesFromSourceFile({
+ filePaths: inputFilesIgnoreFromSourceFile,
+ excludedFiles: true
+ })
+
+ core.debug(
+ `files ignore from source files patterns: ${filesIgnoreFromSourceFiles.join(
+ '\n'
+ )}`
+ )
+
+ cleanedFilePatterns.push(...filesIgnoreFromSourceFiles)
+ }
+
+ if (inputs.negationPatternsFirst) {
+ cleanedFilePatterns.sort((a, b) => {
+ return a.startsWith('!') ? -1 : b.startsWith('!') ? 1 : 0
+ })
+ }
+
+ // Reorder file patterns '**' should come first
+ if (cleanedFilePatterns.includes('**')) {
+ cleanedFilePatterns.sort((a, b) => {
+ return a === '**' ? -1 : b === '**' ? 1 : 0
+ })
+ }
+
+ if (isWindows()) {
+ cleanedFilePatterns = cleanedFilePatterns.map(pattern =>
+ pattern.replace(/\r\n/g, '\n').replace(/\r/g, '\n')
+ )
+ }
+
+ core.debug(`Input file patterns: \n${cleanedFilePatterns.join('\n')}`)
+
+ return cleanedFilePatterns
+}
+
+// Example YAML input:
+// filesYaml: |
+// frontend:
+// - frontend/**
+// backend:
+// - backend/**
+// test: test/**
+// shared: &shared
+// - common/**
+// lib:
+// - *shared
+// - lib/**
+// Return an Object:
+// {
+// frontend: ['frontend/**'],
+// backend: ['backend/**'],
+// test: ['test/**'],
+// shared: ['common/**'],
+// lib: ['common/**', 'lib/**']
+// }
+
+type YamlObject = {
+ [key: string]: string | string[] | [string[], string]
+}
+
+const getYamlFilePatternsFromContents = async ({
+ content = '',
+ filePath = '',
+ excludedFiles = false
+}: {
+ content?: string
+ filePath?: string
+ excludedFiles?: boolean
+}): Promise> => {
+ const filePatterns: Record = {}
+ let source = ''
+
+ if (filePath) {
+ if (!(await exists(filePath))) {
+ core.error(`File does not exist: ${filePath}`)
+ throw new Error(`File does not exist: ${filePath}`)
+ }
+
+ source = await fs.readFile(filePath, 'utf8')
+ } else {
+ source = content
+ }
+
+ const doc = parseDocument(source, {merge: true, schema: 'failsafe'})
+
+ if (doc.errors.length > 0) {
+ if (filePath) {
+ throw new Error(`YAML errors in ${filePath}: ${doc.errors}`)
+ } else {
+ throw new Error(`YAML errors: ${doc.errors}`)
+ }
+ }
+
+ if (doc.warnings.length > 0) {
+ if (filePath) {
+ throw new Error(`YAML warnings in ${filePath}: ${doc.warnings}`)
+ } else {
+ throw new Error(`YAML warnings: ${doc.warnings}`)
+ }
+ }
+
+ const yamlObject = doc.toJS() as YamlObject
+
+ for (const key in yamlObject) {
+ let value = yamlObject[key]
+
+ if (typeof value === 'string' && value.includes('\n')) {
+ value = value.split('\n')
+ }
+
+ if (typeof value === 'string') {
+ value = value.trim()
+
+ if (value) {
+ filePatterns[key] = [
+ excludedFiles && !value.startsWith('!') ? `!${value}` : value
+ ]
+ }
+ } else if (Array.isArray(value)) {
+ filePatterns[key] = flattenDeep(value)
+ .filter(v => v.trim() !== '')
+ .map(v => {
+ if (excludedFiles && !v.startsWith('!')) {
+ v = `!${v}`
+ }
+ return v
+ })
+ }
+ }
+
+ return filePatterns
+}
+
+export const getYamlFilePatterns = async ({
+ inputs,
+ workingDirectory
+}: {
+ inputs: Inputs
+ workingDirectory: string
+}): Promise> => {
+ let filePatterns: Record = {}
+ if (inputs.filesYaml) {
+ filePatterns = {
+ ...(await getYamlFilePatternsFromContents({content: inputs.filesYaml}))
+ }
+ }
+
+ if (inputs.filesYamlFromSourceFile) {
+ const inputFilesYamlFromSourceFile = inputs.filesYamlFromSourceFile
+ .split(inputs.filesYamlFromSourceFileSeparator)
+ .filter(p => p !== '')
+ .map(p => path.join(workingDirectory, p))
+
+ core.debug(`files yaml from source file: ${inputFilesYamlFromSourceFile}`)
+
+ for (const filePath of inputFilesYamlFromSourceFile) {
+ const newFilePatterns = await getYamlFilePatternsFromContents({filePath})
+ for (const key in newFilePatterns) {
+ if (key in filePatterns) {
+ filePatterns[key] = [...filePatterns[key], ...newFilePatterns[key]]
+ } else {
+ filePatterns[key] = newFilePatterns[key]
+ }
+ }
+ }
+ }
+
+ if (inputs.filesIgnoreYaml) {
+ const newIgnoreFilePatterns = await getYamlFilePatternsFromContents({
+ content: inputs.filesIgnoreYaml,
+ excludedFiles: true
+ })
+
+ for (const key in newIgnoreFilePatterns) {
+ if (key in filePatterns) {
+ filePatterns[key] = [
+ ...filePatterns[key],
+ ...newIgnoreFilePatterns[key]
+ ]
+ } else {
+ filePatterns[key] = newIgnoreFilePatterns[key]
+ }
+ }
+ }
+
+ if (inputs.filesIgnoreYamlFromSourceFile) {
+ const inputFilesIgnoreYamlFromSourceFile =
+ inputs.filesIgnoreYamlFromSourceFile
+ .split(inputs.filesIgnoreYamlFromSourceFileSeparator)
+ .filter(p => p !== '')
+ .map(p => path.join(workingDirectory, p))
+
+ core.debug(
+ `files ignore yaml from source file: ${inputFilesIgnoreYamlFromSourceFile}`
+ )
+
+ for (const filePath of inputFilesIgnoreYamlFromSourceFile) {
+ const newIgnoreFilePatterns = await getYamlFilePatternsFromContents({
+ filePath,
+ excludedFiles: true
+ })
+
+ for (const key in newIgnoreFilePatterns) {
+ if (key in filePatterns) {
+ filePatterns[key] = [
+ ...filePatterns[key],
+ ...newIgnoreFilePatterns[key]
+ ]
+ } else {
+ filePatterns[key] = newIgnoreFilePatterns[key]
+ }
+ }
+ }
+ }
+
+ return filePatterns
+}
+
+export const getRecoverFilePatterns = ({
+ inputs
+}: {
+ inputs: Inputs
+}): string[] => {
+ let filePatterns: string[] = inputs.recoverFiles.split(
+ inputs.recoverFilesSeparator
+ )
+
+ if (inputs.recoverFilesIgnore) {
+ const ignoreFilePatterns = inputs.recoverFilesIgnore.split(
+ inputs.recoverFilesSeparator
+ )
+
+ filePatterns = filePatterns.concat(
+ ignoreFilePatterns.map(p => {
+ if (p.startsWith('!')) {
+ return p
+ } else {
+ return `!${p}`
+ }
+ })
+ )
+ }
+
+ core.debug(`recover file patterns: ${filePatterns}`)
+
+ return filePatterns.filter(Boolean)
+}
+
+export const getOutputKey = (key: string, outputPrefix: string): string => {
+ return outputPrefix ? `${outputPrefix}_${key}` : key
+}
+
+export const setArrayOutput = async ({
+ key,
+ inputs,
+ value,
+ outputPrefix
+}: {
+ key: string
+ inputs: Inputs
+ value: string[]
+ outputPrefix?: string
+}): Promise => {
+ core.debug(`${key}: ${JSON.stringify(value)}`)
+ await setOutput({
+ key: outputPrefix ? getOutputKey(key, outputPrefix) : key,
+ value: inputs.json ? value : value.join(inputs.separator),
+ writeOutputFiles: inputs.writeOutputFiles,
+ outputDir: inputs.outputDir,
+ json: inputs.json,
+ shouldEscape: inputs.escapeJson,
+ safeOutput: inputs.safeOutput
+ })
+}
+
+export const setOutput = async ({
+ key,
+ value,
+ writeOutputFiles,
+ outputDir,
+ json = false,
+ shouldEscape = false,
+ safeOutput = false
+}: {
+ key: string
+ value: string | string[] | boolean
+ writeOutputFiles: boolean
+ outputDir: string
+ json?: boolean
+ shouldEscape?: boolean
+ safeOutput?: boolean
+}): Promise => {
+ let cleanedValue
+ if (json) {
+ cleanedValue = jsonOutput({value, shouldEscape})
+ } else {
+ cleanedValue = value.toString().trim()
+ }
+
+ // if safeOutput is true, escape special characters for bash shell
+ if (safeOutput) {
+ cleanedValue = cleanedValue.replace(/[^\x20-\x7E]|[:*?<>|;`$()&!]/g, '\\$&')
+ }
+
+ core.setOutput(key, cleanedValue)
+
+ if (writeOutputFiles) {
+ const extension = json ? 'json' : 'txt'
+ const outputFilePath = path.join(outputDir, `${key}.${extension}`)
+
+ if (!(await exists(outputDir))) {
+ await fs.mkdir(outputDir, {recursive: true})
+ }
+ await fs.writeFile(outputFilePath, cleanedValue.replace(/\\"/g, '"'))
+ }
+}
+
+const getDeletedFileContents = async ({
+ cwd,
+ filePath,
+ sha
+}: {
+ cwd: string
+ filePath: string
+ sha: string
+}): Promise => {
+ const {stdout, exitCode, stderr} = await exec.getExecOutput(
+ 'git',
+ ['show', `${sha}:${filePath}`],
+ {
+ cwd,
+ silent: !core.isDebug(),
+ ignoreReturnCode: true
+ }
+ )
+
+ if (exitCode !== 0) {
+ throw new Error(
+ `Error getting file content from git history "${filePath}": ${stderr}`
+ )
+ }
+
+ return stdout
+}
+
+export const recoverDeletedFiles = async ({
+ inputs,
+ workingDirectory,
+ deletedFiles,
+ recoverPatterns,
+ diffResult,
+ diffSubmodule,
+ submodulePaths
+}: {
+ inputs: Inputs
+ workingDirectory: string
+ deletedFiles: string[]
+ recoverPatterns: string[]
+ diffResult: DiffResult
+ diffSubmodule: boolean
+ submodulePaths: string[]
+}): Promise => {
+ let recoverableDeletedFiles = deletedFiles
+ core.debug(`recoverable deleted files: ${recoverableDeletedFiles}`)
+
+ if (recoverPatterns.length > 0) {
+ recoverableDeletedFiles = mm(deletedFiles, recoverPatterns, {
+ dot: true,
+ windows: isWindows(),
+ noext: true
+ })
+ core.debug(`filtered recoverable deleted files: ${recoverableDeletedFiles}`)
+ }
+
+ for (const deletedFile of recoverableDeletedFiles) {
+ let target = path.join(workingDirectory, deletedFile)
+
+ if (inputs.recoverDeletedFilesToDestination) {
+ target = path.join(
+ workingDirectory,
+ inputs.recoverDeletedFilesToDestination,
+ deletedFile
+ )
+ }
+
+ let deletedFileContents: string
+
+ const submodulePath = submodulePaths.find(p => deletedFile.startsWith(p))
+
+ if (diffSubmodule && submodulePath) {
+ const submoduleShaResult = await gitSubmoduleDiffSHA({
+ cwd: workingDirectory,
+ parentSha1: diffResult.previousSha,
+ parentSha2: diffResult.currentSha,
+ submodulePath,
+ diff: diffResult.diff
+ })
+
+ if (submoduleShaResult.previousSha) {
+ core.debug(
+ `recovering deleted file "${deletedFile}" from submodule ${submodulePath} from ${submoduleShaResult.previousSha}`
+ )
+ deletedFileContents = await getDeletedFileContents({
+ cwd: path.join(workingDirectory, submodulePath),
+ // E.g. submodulePath = test/demo and deletedFile = test/demo/.github/README.md => filePath => .github/README.md
+ filePath: deletedFile.replace(submodulePath, '').substring(1),
+ sha: submoduleShaResult.previousSha
+ })
+ } else {
+ core.warning(
+ `Unable to recover deleted file "${deletedFile}" from submodule ${submodulePath} from ${submoduleShaResult.previousSha}`
+ )
+ continue
+ }
+ } else {
+ core.debug(
+ `recovering deleted file "${deletedFile}" from ${diffResult.previousSha}`
+ )
+ deletedFileContents = await getDeletedFileContents({
+ cwd: workingDirectory,
+ filePath: deletedFile,
+ sha: diffResult.previousSha
+ })
+ }
+
+ core.debug(`recovered deleted file "${deletedFile}"`)
+
+ if (!(await exists(path.dirname(target)))) {
+ core.debug(`creating directory "${path.dirname(target)}"`)
+ await fs.mkdir(path.dirname(target), {recursive: true})
+ }
+ core.debug(`writing file "${target}"`)
+ await fs.writeFile(target, deletedFileContents)
+ core.debug(`wrote file "${target}"`)
+ }
+}
+
+/**
+ * Determines whether the specified working directory has a local Git directory.
+ *
+ * @param workingDirectory - The path of the working directory.
+ * @returns A boolean value indicating whether the working directory has a local Git directory.
+ */
+export const hasLocalGitDirectory = async ({
+ workingDirectory
+}: {
+ workingDirectory: string
+}): Promise => {
+ return await isInsideWorkTree({
+ cwd: workingDirectory
+ })
+}
+
+/**
+ * Warns about unsupported inputs when using the REST API.
+ *
+ * @param inputs - The inputs object.
+ */
+export const warnUnsupportedRESTAPIInputs = async ({
+ inputs
+}: {
+ inputs: Inputs
+}): Promise => {
+ for (const key of Object.keys(DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS)) {
+ const defaultValue = Object.hasOwnProperty.call(
+ DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS,
+ key
+ )
+ ? DEFAULT_VALUES_OF_UNSUPPORTED_API_INPUTS[
+ key as keyof Inputs
+ ]?.toString()
+ : ''
+
+ if (defaultValue !== inputs[key as keyof Inputs]?.toString()) {
+ core.warning(
+ `Input "${snakeCase(
+ key
+ )}" is not supported when using GitHub's REST API to get changed files`
+ )
+ }
+ }
+}
diff --git a/test/[test new].txt b/test/[test new].txt
new file mode 100644
index 0000000..9f4b6d8
--- /dev/null
+++ b/test/[test new].txt
@@ -0,0 +1 @@
+This is a test file
diff --git a/test/changed-files-list.txt b/test/changed-files-list.txt
new file mode 100644
index 0000000..861964a
--- /dev/null
+++ b/test/changed-files-list.txt
@@ -0,0 +1,7 @@
+.github/workflows/test.yml
+action.yml
+action.yml
+action.yml
+**/test.txt
+!test/test/test.txt
+[test new].txt
diff --git a/test/changed-files.yml b/test/changed-files.yml
new file mode 100644
index 0000000..ad32cbe
--- /dev/null
+++ b/test/changed-files.yml
@@ -0,0 +1,16 @@
+test:
+ - test/**.txt
+src:
+ - src/*.ts
+ - '!src/__tests__/**'
+dist:
+ - dist/**
+shared: &shared
+ - .github/**
+common:
+ - *shared
+ - .gitignore
+multiline: |
+ test/**
+ src/*.ts
+ .github/**
diff --git a/test/demo/test/test.txt b/test/demo/test/test.txt
new file mode 100644
index 0000000..bdf08de
--- /dev/null
+++ b/test/demo/test/test.txt
@@ -0,0 +1 @@
+test file
\ No newline at end of file
diff --git a/test/new.md b/test/new.md
new file mode 100644
index 0000000..682898f
--- /dev/null
+++ b/test/new.md
@@ -0,0 +1 @@
+This is a test markdown file
diff --git a/test/test new 1.txt b/test/test new 1.txt
new file mode 100644
index 0000000..9f4b6d8
--- /dev/null
+++ b/test/test new 1.txt
@@ -0,0 +1 @@
+This is a test file
diff --git a/test/test new.txt b/test/test new.txt
new file mode 100644
index 0000000..6de7b8c
--- /dev/null
+++ b/test/test new.txt
@@ -0,0 +1 @@
+This is a test file.
diff --git a/test/test rename-1.txt b/test/test rename-1.txt
new file mode 100644
index 0000000..30fecdb
--- /dev/null
+++ b/test/test rename-1.txt
@@ -0,0 +1 @@
+This is a test file 1.
diff --git a/test/test rename-2.txt b/test/test rename-2.txt
new file mode 100644
index 0000000..a938d27
--- /dev/null
+++ b/test/test rename-2.txt
@@ -0,0 +1 @@
+This is test file 2.
diff --git "a/test/test-\303\250.txt" "b/test/test-\303\250.txt"
new file mode 100644
index 0000000..30d8c0c
--- /dev/null
+++ "b/test/test-\303\250.txt"
@@ -0,0 +1 @@
+This is a test file with non ASCII character in the filename.
diff --git a/test/test.txt b/test/test.txt
new file mode 100644
index 0000000..d34e13f
--- /dev/null
+++ b/test/test.txt
@@ -0,0 +1 @@
+This is a test file...
diff --git a/test/test2/test.txt b/test/test2/test.txt
new file mode 100644
index 0000000..6abe068
--- /dev/null
+++ b/test/test2/test.txt
@@ -0,0 +1 @@
+Lorem ipsum dolor sit amet, consectetur adipiscing elit et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
\ No newline at end of file
diff --git a/test/test2/test3/new.txt b/test/test2/test3/new.txt
new file mode 100644
index 0000000..7b03026
--- /dev/null
+++ b/test/test2/test3/new.txt
@@ -0,0 +1 @@
+Test file.
\ No newline at end of file
diff --git a/test/test2/test3/new2.txt b/test/test2/test3/new2.txt
new file mode 100644
index 0000000..e69de29
diff --git a/test/test2/test3/test4/test.txt b/test/test2/test3/test4/test.txt
new file mode 100644
index 0000000..7b03026
--- /dev/null
+++ b/test/test2/test3/test4/test.txt
@@ -0,0 +1 @@
+Test file.
\ No newline at end of file
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..a28c100
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,12 @@
+{
+ "compilerOptions": {
+ "target": "ES2018", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
+ "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
+ "outDir": "./lib", /* Redirect output structure to the directory. */
+ "rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
+ "strict": true, /* Enable all strict type-checking options. */
+ "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
+ "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
+ },
+ "exclude": ["node_modules", "jest/setEnvVars.cjs"]
+}
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000..c2cdeaa
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,4698 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@actions/core@^1.10.0":
+ version "1.11.1"
+ resolved "https://registry.npmjs.org/@actions/core/-/core-1.11.1.tgz"
+ integrity sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==
+ dependencies:
+ "@actions/exec" "^1.1.1"
+ "@actions/http-client" "^2.0.1"
+
+"@actions/exec@^1.1.1":
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/@actions/exec/-/exec-1.1.1.tgz"
+ integrity sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==
+ dependencies:
+ "@actions/io" "^1.0.1"
+
+"@actions/github@^6.0.0":
+ version "6.0.0"
+ resolved "https://registry.npmjs.org/@actions/github/-/github-6.0.0.tgz"
+ integrity sha512-alScpSVnYmjNEXboZjarjukQEzgCRmjMv6Xj47fsdnqGS73bjJNDpiiXmp8jr0UZLdUB6d9jW63IcmddUP+l0g==
+ dependencies:
+ "@actions/http-client" "^2.2.0"
+ "@octokit/core" "^5.0.1"
+ "@octokit/plugin-paginate-rest" "^9.0.0"
+ "@octokit/plugin-rest-endpoint-methods" "^10.0.0"
+
+"@actions/http-client@^2.0.1", "@actions/http-client@^2.2.0":
+ version "2.2.3"
+ resolved "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.3.tgz"
+ integrity sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA==
+ dependencies:
+ tunnel "^0.0.6"
+ undici "^5.25.4"
+
+"@actions/io@^1.0.1":
+ version "1.1.3"
+ resolved "https://registry.npmjs.org/@actions/io/-/io-1.1.3.tgz"
+ integrity sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==
+
+"@ampproject/remapping@^2.2.0":
+ version "2.3.0"
+ resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz"
+ integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==
+ dependencies:
+ "@jridgewell/gen-mapping" "^0.3.5"
+ "@jridgewell/trace-mapping" "^0.3.24"
+
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.26.2":
+ version "7.26.2"
+ resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz"
+ integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.25.9"
+ js-tokens "^4.0.0"
+ picocolors "^1.0.0"
+
+"@babel/compat-data@^7.26.5":
+ version "7.26.8"
+ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz"
+ integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==
+
+"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9", "@babel/core@^7.8.0", "@babel/core@>=7.0.0-beta.0 <8":
+ version "7.26.9"
+ resolved "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz"
+ integrity sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==
+ dependencies:
+ "@ampproject/remapping" "^2.2.0"
+ "@babel/code-frame" "^7.26.2"
+ "@babel/generator" "^7.26.9"
+ "@babel/helper-compilation-targets" "^7.26.5"
+ "@babel/helper-module-transforms" "^7.26.0"
+ "@babel/helpers" "^7.26.9"
+ "@babel/parser" "^7.26.9"
+ "@babel/template" "^7.26.9"
+ "@babel/traverse" "^7.26.9"
+ "@babel/types" "^7.26.9"
+ convert-source-map "^2.0.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.2"
+ json5 "^2.2.3"
+ semver "^6.3.1"
+
+"@babel/generator@^7.26.9", "@babel/generator@^7.7.2":
+ version "7.26.9"
+ resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz"
+ integrity sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==
+ dependencies:
+ "@babel/parser" "^7.26.9"
+ "@babel/types" "^7.26.9"
+ "@jridgewell/gen-mapping" "^0.3.5"
+ "@jridgewell/trace-mapping" "^0.3.25"
+ jsesc "^3.0.2"
+
+"@babel/helper-compilation-targets@^7.26.5":
+ version "7.26.5"
+ resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz"
+ integrity sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==
+ dependencies:
+ "@babel/compat-data" "^7.26.5"
+ "@babel/helper-validator-option" "^7.25.9"
+ browserslist "^4.24.0"
+ lru-cache "^5.1.1"
+ semver "^6.3.1"
+
+"@babel/helper-module-imports@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz"
+ integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==
+ dependencies:
+ "@babel/traverse" "^7.25.9"
+ "@babel/types" "^7.25.9"
+
+"@babel/helper-module-transforms@^7.26.0":
+ version "7.26.0"
+ resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz"
+ integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==
+ dependencies:
+ "@babel/helper-module-imports" "^7.25.9"
+ "@babel/helper-validator-identifier" "^7.25.9"
+ "@babel/traverse" "^7.25.9"
+
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.8.0":
+ version "7.26.5"
+ resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz"
+ integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==
+
+"@babel/helper-string-parser@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz"
+ integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==
+
+"@babel/helper-validator-identifier@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz"
+ integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==
+
+"@babel/helper-validator-option@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz"
+ integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==
+
+"@babel/helpers@^7.26.9":
+ version "7.26.9"
+ resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.9.tgz"
+ integrity sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==
+ dependencies:
+ "@babel/template" "^7.26.9"
+ "@babel/types" "^7.26.9"
+
+"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.26.9":
+ version "7.26.9"
+ resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz"
+ integrity sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==
+ dependencies:
+ "@babel/types" "^7.26.9"
+
+"@babel/plugin-syntax-async-generators@^7.8.4":
+ version "7.8.4"
+ resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz"
+ integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-bigint@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz"
+ integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-class-properties@^7.12.13":
+ version "7.12.13"
+ resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz"
+ integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.12.13"
+
+"@babel/plugin-syntax-class-static-block@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz"
+ integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-import-attributes@^7.24.7":
+ version "7.26.0"
+ resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz"
+ integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.25.9"
+
+"@babel/plugin-syntax-import-meta@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz"
+ integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-json-strings@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz"
+ integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-jsx@^7.7.2":
+ version "7.25.9"
+ resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz"
+ integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.25.9"
+
+"@babel/plugin-syntax-logical-assignment-operators@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz"
+ integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz"
+ integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-numeric-separator@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz"
+ integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-object-rest-spread@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz"
+ integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-catch-binding@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz"
+ integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-chaining@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz"
+ integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-private-property-in-object@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz"
+ integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-top-level-await@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz"
+ integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-typescript@^7.7.2":
+ version "7.25.9"
+ resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz"
+ integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.25.9"
+
+"@babel/template@^7.26.9", "@babel/template@^7.3.3":
+ version "7.26.9"
+ resolved "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz"
+ integrity sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==
+ dependencies:
+ "@babel/code-frame" "^7.26.2"
+ "@babel/parser" "^7.26.9"
+ "@babel/types" "^7.26.9"
+
+"@babel/traverse@^7.25.9", "@babel/traverse@^7.26.9":
+ version "7.26.9"
+ resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz"
+ integrity sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==
+ dependencies:
+ "@babel/code-frame" "^7.26.2"
+ "@babel/generator" "^7.26.9"
+ "@babel/parser" "^7.26.9"
+ "@babel/template" "^7.26.9"
+ "@babel/types" "^7.26.9"
+ debug "^4.3.1"
+ globals "^11.1.0"
+
+"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.25.9", "@babel/types@^7.26.9", "@babel/types@^7.3.3":
+ version "7.26.9"
+ resolved "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz"
+ integrity sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==
+ dependencies:
+ "@babel/helper-string-parser" "^7.25.9"
+ "@babel/helper-validator-identifier" "^7.25.9"
+
+"@bcoe/v8-coverage@^0.2.3":
+ version "0.2.3"
+ resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz"
+ integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
+
+"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
+ version "4.4.1"
+ resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz"
+ integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==
+ dependencies:
+ eslint-visitor-keys "^3.4.3"
+
+"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1":
+ version "4.12.1"
+ resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz"
+ integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==
+
+"@eslint/compat@^1.2.3":
+ version "1.2.7"
+ resolved "https://registry.npmjs.org/@eslint/compat/-/compat-1.2.7.tgz"
+ integrity sha512-xvv7hJE32yhegJ8xNAnb62ggiAwTYHBpUCWhRxEj/ksvgDJuSXfoDkBcRYaYNFiJ+jH0IE3K16hd+xXzhBgNbg==
+
+"@eslint/eslintrc@^2.1.4":
+ version "2.1.4"
+ resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz"
+ integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.3.2"
+ espree "^9.6.0"
+ globals "^13.19.0"
+ ignore "^5.2.0"
+ import-fresh "^3.2.1"
+ js-yaml "^4.1.0"
+ minimatch "^3.1.2"
+ strip-json-comments "^3.1.1"
+
+"@eslint/eslintrc@^3.1.0":
+ version "3.3.0"
+ resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.0.tgz"
+ integrity sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.3.2"
+ espree "^10.0.1"
+ globals "^14.0.0"
+ ignore "^5.2.0"
+ import-fresh "^3.2.1"
+ js-yaml "^4.1.0"
+ minimatch "^3.1.2"
+ strip-json-comments "^3.1.1"
+
+"@eslint/js@^9.14.0":
+ version "9.22.0"
+ resolved "https://registry.npmjs.org/@eslint/js/-/js-9.22.0.tgz"
+ integrity sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==
+
+"@eslint/js@8.57.1":
+ version "8.57.1"
+ resolved "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz"
+ integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==
+
+"@fastify/busboy@^2.0.0":
+ version "2.1.1"
+ resolved "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz"
+ integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==
+
+"@github/browserslist-config@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/@github/browserslist-config/-/browserslist-config-1.0.0.tgz"
+ integrity sha512-gIhjdJp/c2beaIWWIlsXdqXVRUz3r2BxBCpfz/F3JXHvSAQ1paMYjLH+maEATtENg+k5eLV7gA+9yPp762ieuw==
+
+"@humanwhocodes/config-array@^0.13.0":
+ version "0.13.0"
+ resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz"
+ integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==
+ dependencies:
+ "@humanwhocodes/object-schema" "^2.0.3"
+ debug "^4.3.1"
+ minimatch "^3.0.5"
+
+"@humanwhocodes/module-importer@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz"
+ integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
+
+"@humanwhocodes/object-schema@^2.0.3":
+ version "2.0.3"
+ resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz"
+ integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==
+
+"@istanbuljs/load-nyc-config@^1.0.0":
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz"
+ integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==
+ dependencies:
+ camelcase "^5.3.1"
+ find-up "^4.1.0"
+ get-package-type "^0.1.0"
+ js-yaml "^3.13.1"
+ resolve-from "^5.0.0"
+
+"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3":
+ version "0.1.3"
+ resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz"
+ integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
+
+"@jest/console@^29.7.0":
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz"
+ integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==
+ dependencies:
+ "@jest/types" "^29.6.3"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ jest-message-util "^29.7.0"
+ jest-util "^29.7.0"
+ slash "^3.0.0"
+
+"@jest/core@^29.7.0":
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz"
+ integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==
+ dependencies:
+ "@jest/console" "^29.7.0"
+ "@jest/reporters" "^29.7.0"
+ "@jest/test-result" "^29.7.0"
+ "@jest/transform" "^29.7.0"
+ "@jest/types" "^29.6.3"
+ "@types/node" "*"
+ ansi-escapes "^4.2.1"
+ chalk "^4.0.0"
+ ci-info "^3.2.0"
+ exit "^0.1.2"
+ graceful-fs "^4.2.9"
+ jest-changed-files "^29.7.0"
+ jest-config "^29.7.0"
+ jest-haste-map "^29.7.0"
+ jest-message-util "^29.7.0"
+ jest-regex-util "^29.6.3"
+ jest-resolve "^29.7.0"
+ jest-resolve-dependencies "^29.7.0"
+ jest-runner "^29.7.0"
+ jest-runtime "^29.7.0"
+ jest-snapshot "^29.7.0"
+ jest-util "^29.7.0"
+ jest-validate "^29.7.0"
+ jest-watcher "^29.7.0"
+ micromatch "^4.0.4"
+ pretty-format "^29.7.0"
+ slash "^3.0.0"
+ strip-ansi "^6.0.0"
+
+"@jest/environment@^29.7.0":
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz"
+ integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==
+ dependencies:
+ "@jest/fake-timers" "^29.7.0"
+ "@jest/types" "^29.6.3"
+ "@types/node" "*"
+ jest-mock "^29.7.0"
+
+"@jest/expect-utils@^29.7.0":
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz"
+ integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==
+ dependencies:
+ jest-get-type "^29.6.3"
+
+"@jest/expect@^29.7.0":
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz"
+ integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==
+ dependencies:
+ expect "^29.7.0"
+ jest-snapshot "^29.7.0"
+
+"@jest/fake-timers@^29.7.0":
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz"
+ integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==
+ dependencies:
+ "@jest/types" "^29.6.3"
+ "@sinonjs/fake-timers" "^10.0.2"
+ "@types/node" "*"
+ jest-message-util "^29.7.0"
+ jest-mock "^29.7.0"
+ jest-util "^29.7.0"
+
+"@jest/globals@^29.7.0":
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz"
+ integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==
+ dependencies:
+ "@jest/environment" "^29.7.0"
+ "@jest/expect" "^29.7.0"
+ "@jest/types" "^29.6.3"
+ jest-mock "^29.7.0"
+
+"@jest/reporters@^29.7.0":
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz"
+ integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==
+ dependencies:
+ "@bcoe/v8-coverage" "^0.2.3"
+ "@jest/console" "^29.7.0"
+ "@jest/test-result" "^29.7.0"
+ "@jest/transform" "^29.7.0"
+ "@jest/types" "^29.6.3"
+ "@jridgewell/trace-mapping" "^0.3.18"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ collect-v8-coverage "^1.0.0"
+ exit "^0.1.2"
+ glob "^7.1.3"
+ graceful-fs "^4.2.9"
+ istanbul-lib-coverage "^3.0.0"
+ istanbul-lib-instrument "^6.0.0"
+ istanbul-lib-report "^3.0.0"
+ istanbul-lib-source-maps "^4.0.0"
+ istanbul-reports "^3.1.3"
+ jest-message-util "^29.7.0"
+ jest-util "^29.7.0"
+ jest-worker "^29.7.0"
+ slash "^3.0.0"
+ string-length "^4.0.1"
+ strip-ansi "^6.0.0"
+ v8-to-istanbul "^9.0.1"
+
+"@jest/schemas@^29.6.3":
+ version "29.6.3"
+ resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz"
+ integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==
+ dependencies:
+ "@sinclair/typebox" "^0.27.8"
+
+"@jest/source-map@^29.6.3":
+ version "29.6.3"
+ resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz"
+ integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==
+ dependencies:
+ "@jridgewell/trace-mapping" "^0.3.18"
+ callsites "^3.0.0"
+ graceful-fs "^4.2.9"
+
+"@jest/test-result@^29.7.0":
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz"
+ integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==
+ dependencies:
+ "@jest/console" "^29.7.0"
+ "@jest/types" "^29.6.3"
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ collect-v8-coverage "^1.0.0"
+
+"@jest/test-sequencer@^29.7.0":
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz"
+ integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==
+ dependencies:
+ "@jest/test-result" "^29.7.0"
+ graceful-fs "^4.2.9"
+ jest-haste-map "^29.7.0"
+ slash "^3.0.0"
+
+"@jest/transform@^29.0.0", "@jest/transform@^29.7.0":
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz"
+ integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==
+ dependencies:
+ "@babel/core" "^7.11.6"
+ "@jest/types" "^29.6.3"
+ "@jridgewell/trace-mapping" "^0.3.18"
+ babel-plugin-istanbul "^6.1.1"
+ chalk "^4.0.0"
+ convert-source-map "^2.0.0"
+ fast-json-stable-stringify "^2.1.0"
+ graceful-fs "^4.2.9"
+ jest-haste-map "^29.7.0"
+ jest-regex-util "^29.6.3"
+ jest-util "^29.7.0"
+ micromatch "^4.0.4"
+ pirates "^4.0.4"
+ slash "^3.0.0"
+ write-file-atomic "^4.0.2"
+
+"@jest/types@^29.0.0", "@jest/types@^29.6.3":
+ version "29.6.3"
+ resolved "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz"
+ integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==
+ dependencies:
+ "@jest/schemas" "^29.6.3"
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ "@types/istanbul-reports" "^3.0.0"
+ "@types/node" "*"
+ "@types/yargs" "^17.0.8"
+ chalk "^4.0.0"
+
+"@jridgewell/gen-mapping@^0.3.5":
+ version "0.3.8"
+ resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz"
+ integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==
+ dependencies:
+ "@jridgewell/set-array" "^1.2.1"
+ "@jridgewell/sourcemap-codec" "^1.4.10"
+ "@jridgewell/trace-mapping" "^0.3.24"
+
+"@jridgewell/resolve-uri@^3.1.0":
+ version "3.1.2"
+ resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz"
+ integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
+
+"@jridgewell/set-array@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz"
+ integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
+
+"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
+ version "1.5.0"
+ resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz"
+ integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
+
+"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
+ version "0.3.25"
+ resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz"
+ integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
+ dependencies:
+ "@jridgewell/resolve-uri" "^3.1.0"
+ "@jridgewell/sourcemap-codec" "^1.4.14"
+
+"@nodelib/fs.scandir@2.1.5":
+ version "2.1.5"
+ resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
+ integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.5"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5":
+ version "2.0.5"
+ resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
+ integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
+"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
+ version "1.2.8"
+ resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz"
+ integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.5"
+ fastq "^1.6.0"
+
+"@octokit/auth-token@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz"
+ integrity sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==
+
+"@octokit/auth-token@^5.0.0":
+ version "5.1.2"
+ resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.2.tgz"
+ integrity sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==
+
+"@octokit/core@^5.0.1", "@octokit/core@5":
+ version "5.2.0"
+ resolved "https://registry.npmjs.org/@octokit/core/-/core-5.2.0.tgz"
+ integrity sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==
+ dependencies:
+ "@octokit/auth-token" "^4.0.0"
+ "@octokit/graphql" "^7.1.0"
+ "@octokit/request" "^8.3.1"
+ "@octokit/request-error" "^5.1.0"
+ "@octokit/types" "^13.0.0"
+ before-after-hook "^2.2.0"
+ universal-user-agent "^6.0.0"
+
+"@octokit/core@^6.1.4", "@octokit/core@>=6":
+ version "6.1.4"
+ resolved "https://registry.npmjs.org/@octokit/core/-/core-6.1.4.tgz"
+ integrity sha512-lAS9k7d6I0MPN+gb9bKDt7X8SdxknYqAMh44S5L+lNqIN2NuV8nvv3g8rPp7MuRxcOpxpUIATWprO0C34a8Qmg==
+ dependencies:
+ "@octokit/auth-token" "^5.0.0"
+ "@octokit/graphql" "^8.1.2"
+ "@octokit/request" "^9.2.1"
+ "@octokit/request-error" "^6.1.7"
+ "@octokit/types" "^13.6.2"
+ before-after-hook "^3.0.2"
+ universal-user-agent "^7.0.0"
+
+"@octokit/endpoint@^10.1.3":
+ version "10.1.3"
+ resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.3.tgz"
+ integrity sha512-nBRBMpKPhQUxCsQQeW+rCJ/OPSMcj3g0nfHn01zGYZXuNDvvXudF/TYY6APj5THlurerpFN4a/dQAIAaM6BYhA==
+ dependencies:
+ "@octokit/types" "^13.6.2"
+ universal-user-agent "^7.0.2"
+
+"@octokit/endpoint@^9.0.6":
+ version "9.0.6"
+ resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.6.tgz"
+ integrity sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==
+ dependencies:
+ "@octokit/types" "^13.1.0"
+ universal-user-agent "^6.0.0"
+
+"@octokit/graphql@^7.1.0":
+ version "7.1.1"
+ resolved "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.1.tgz"
+ integrity sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==
+ dependencies:
+ "@octokit/request" "^8.4.1"
+ "@octokit/types" "^13.0.0"
+ universal-user-agent "^6.0.0"
+
+"@octokit/graphql@^8.1.2":
+ version "8.2.1"
+ resolved "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.2.1.tgz"
+ integrity sha512-n57hXtOoHrhwTWdvhVkdJHdhTv0JstjDbDRhJfwIRNfFqmSo1DaK/mD2syoNUoLCyqSjBpGAKOG0BuwF392slw==
+ dependencies:
+ "@octokit/request" "^9.2.2"
+ "@octokit/types" "^13.8.0"
+ universal-user-agent "^7.0.0"
+
+"@octokit/openapi-types@^20.0.0":
+ version "20.0.0"
+ resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz"
+ integrity sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==
+
+"@octokit/openapi-types@^23.0.1":
+ version "23.0.1"
+ resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz"
+ integrity sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==
+
+"@octokit/plugin-paginate-rest@^11.4.2":
+ version "11.4.3"
+ resolved "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.4.3.tgz"
+ integrity sha512-tBXaAbXkqVJlRoA/zQVe9mUdb8rScmivqtpv3ovsC5xhje/a+NOCivs7eUhWBwCApJVsR4G5HMeaLbq7PxqZGA==
+ dependencies:
+ "@octokit/types" "^13.7.0"
+
+"@octokit/plugin-paginate-rest@^9.0.0":
+ version "9.2.2"
+ resolved "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.2.tgz"
+ integrity sha512-u3KYkGF7GcZnSD/3UP0S7K5XUFT2FkOQdcfXZGZQPGv3lm4F2Xbf71lvjldr8c1H3nNbF+33cLEkWYbokGWqiQ==
+ dependencies:
+ "@octokit/types" "^12.6.0"
+
+"@octokit/plugin-request-log@^5.3.1":
+ version "5.3.1"
+ resolved "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz"
+ integrity sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==
+
+"@octokit/plugin-rest-endpoint-methods@^10.0.0":
+ version "10.4.1"
+ resolved "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.4.1.tgz"
+ integrity sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==
+ dependencies:
+ "@octokit/types" "^12.6.0"
+
+"@octokit/plugin-rest-endpoint-methods@^13.3.0":
+ version "13.3.1"
+ resolved "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.3.1.tgz"
+ integrity sha512-o8uOBdsyR+WR8MK9Cco8dCgvG13H1RlM1nWnK/W7TEACQBFux/vPREgKucxUfuDQ5yi1T3hGf4C5ZmZXAERgwQ==
+ dependencies:
+ "@octokit/types" "^13.8.0"
+
+"@octokit/request-error@^5.1.0", "@octokit/request-error@^5.1.1":
+ version "5.1.1"
+ resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.1.tgz"
+ integrity sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==
+ dependencies:
+ "@octokit/types" "^13.1.0"
+ deprecation "^2.0.0"
+ once "^1.4.0"
+
+"@octokit/request-error@^6.1.7":
+ version "6.1.7"
+ resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.7.tgz"
+ integrity sha512-69NIppAwaauwZv6aOzb+VVLwt+0havz9GT5YplkeJv7fG7a40qpLt/yZKyiDxAhgz0EtgNdNcb96Z0u+Zyuy2g==
+ dependencies:
+ "@octokit/types" "^13.6.2"
+
+"@octokit/request@^8.3.1", "@octokit/request@^8.4.1":
+ version "8.4.1"
+ resolved "https://registry.npmjs.org/@octokit/request/-/request-8.4.1.tgz"
+ integrity sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==
+ dependencies:
+ "@octokit/endpoint" "^9.0.6"
+ "@octokit/request-error" "^5.1.1"
+ "@octokit/types" "^13.1.0"
+ universal-user-agent "^6.0.0"
+
+"@octokit/request@^9.2.1", "@octokit/request@^9.2.2":
+ version "9.2.2"
+ resolved "https://registry.npmjs.org/@octokit/request/-/request-9.2.2.tgz"
+ integrity sha512-dZl0ZHx6gOQGcffgm1/Sf6JfEpmh34v3Af2Uci02vzUYz6qEN6zepoRtmybWXIGXFIK8K9ylE3b+duCWqhArtg==
+ dependencies:
+ "@octokit/endpoint" "^10.1.3"
+ "@octokit/request-error" "^6.1.7"
+ "@octokit/types" "^13.6.2"
+ fast-content-type-parse "^2.0.0"
+ universal-user-agent "^7.0.2"
+
+"@octokit/rest@^21.0.0":
+ version "21.1.1"
+ resolved "https://registry.npmjs.org/@octokit/rest/-/rest-21.1.1.tgz"
+ integrity sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg==
+ dependencies:
+ "@octokit/core" "^6.1.4"
+ "@octokit/plugin-paginate-rest" "^11.4.2"
+ "@octokit/plugin-request-log" "^5.3.1"
+ "@octokit/plugin-rest-endpoint-methods" "^13.3.0"
+
+"@octokit/types@^12.6.0":
+ version "12.6.0"
+ resolved "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz"
+ integrity sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==
+ dependencies:
+ "@octokit/openapi-types" "^20.0.0"
+
+"@octokit/types@^13.0.0", "@octokit/types@^13.1.0", "@octokit/types@^13.6.2", "@octokit/types@^13.7.0", "@octokit/types@^13.8.0":
+ version "13.8.0"
+ resolved "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz"
+ integrity sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==
+ dependencies:
+ "@octokit/openapi-types" "^23.0.1"
+
+"@pkgr/core@^0.1.0":
+ version "0.1.1"
+ resolved "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz"
+ integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==
+
+"@rtsao/scc@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz"
+ integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==
+
+"@sinclair/typebox@^0.27.8":
+ version "0.27.8"
+ resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz"
+ integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==
+
+"@sinonjs/commons@^3.0.0":
+ version "3.0.1"
+ resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz"
+ integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==
+ dependencies:
+ type-detect "4.0.8"
+
+"@sinonjs/fake-timers@^10.0.2":
+ version "10.3.0"
+ resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz"
+ integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==
+ dependencies:
+ "@sinonjs/commons" "^3.0.0"
+
+"@stdlib/assert-has-own-property@^0.2.1":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/assert-has-own-property/-/assert-has-own-property-0.2.2.tgz"
+ integrity sha512-m5rV4Z2/iNkwx2vRsNheM6sQZMzc8rQQOo90LieICXovXZy8wA5jNld4kRKjMNcRt/TjrNP7i2Rhh8hruRDlHg==
+
+"@stdlib/assert-has-symbol-support@^0.2.1":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/assert-has-symbol-support/-/assert-has-symbol-support-0.2.2.tgz"
+ integrity sha512-vCsGGmDZz5dikGgdF26rIL0y0nHvH7qaVf89HLLTybceuZijAqFSJEqcB3Gpl5uaeueLNAWExHi2EkoUVqKHGg==
+
+"@stdlib/assert-has-tostringtag-support@^0.2.2":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/assert-has-tostringtag-support/-/assert-has-tostringtag-support-0.2.2.tgz"
+ integrity sha512-bSHGqku11VH0swPEzO4Y2Dr+lTYEtjSWjamwqCTC8udOiOIOHKoxuU4uaMGKJjVfXG1L+XefLHqzuO5azxdRaA==
+ dependencies:
+ "@stdlib/assert-has-symbol-support" "^0.2.1"
+
+"@stdlib/assert-is-array@^0.2.1":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/assert-is-array/-/assert-is-array-0.2.2.tgz"
+ integrity sha512-aJyTX2U3JqAGCATgaAX9ygvDHc97GCIKkIhiZm/AZaLoFHPtMA1atQ4bKcefEC8Um9eefryxTHfFPfSr9CoNQQ==
+ dependencies:
+ "@stdlib/utils-native-class" "^0.2.1"
+
+"@stdlib/assert-is-boolean@^0.2.1":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/assert-is-boolean/-/assert-is-boolean-0.2.2.tgz"
+ integrity sha512-3KFLRTYZpX6u95baZ6PubBvjehJs2xBU6+zrenR0jx8KToUYCnJPxqqj7JXRhSD+cOURmcjj9rocVaG9Nz18Pg==
+ dependencies:
+ "@stdlib/assert-has-tostringtag-support" "^0.2.2"
+ "@stdlib/boolean-ctor" "^0.2.2"
+ "@stdlib/utils-define-nonenumerable-read-only-property" "^0.2.2"
+ "@stdlib/utils-native-class" "^0.2.1"
+
+"@stdlib/assert-is-buffer@^0.2.1":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/assert-is-buffer/-/assert-is-buffer-0.2.2.tgz"
+ integrity sha512-4/WMFTEcDYlVbRhxY8Wlqag4S70QCnn6WmQ4wmfiLW92kqQHsLvTNvdt/qqh/SDyDV31R/cpd3QPsVN534dNEA==
+ dependencies:
+ "@stdlib/assert-is-object-like" "^0.2.1"
+
+"@stdlib/assert-is-function@^0.2.2":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/assert-is-function/-/assert-is-function-0.2.2.tgz"
+ integrity sha512-whY69DUYWljCJ79Cvygp7VzWGOtGTsh3SQhzNuGt+ut6EsOW+8nwiRkyBXYKf/MOF+NRn15pxg8cJEoeRgsPcA==
+ dependencies:
+ "@stdlib/utils-type-of" "^0.2.1"
+
+"@stdlib/assert-is-object-like@^0.2.1":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/assert-is-object-like/-/assert-is-object-like-0.2.2.tgz"
+ integrity sha512-MjQBpHdEebbJwLlxh/BKNH8IEHqY0YlcCMRKOQU0UOlILSJg0vG+GL4fDDqtx9FSXxcTqC+w3keHx8kAKvQhzg==
+ dependencies:
+ "@stdlib/assert-tools-array-function" "^0.2.1"
+ "@stdlib/utils-define-nonenumerable-read-only-property" "^0.2.2"
+
+"@stdlib/assert-is-regexp@^0.2.2":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/assert-is-regexp/-/assert-is-regexp-0.2.2.tgz"
+ integrity sha512-2JtiUtRJxPaVXL7dkWoV3n5jouI65DwYDXsDXg3xo23TXlTNGgU/HhKO4FWC1Yqju7YMZi0hcZSW6E9v8ISqeQ==
+ dependencies:
+ "@stdlib/assert-has-tostringtag-support" "^0.2.2"
+ "@stdlib/utils-native-class" "^0.2.1"
+
+"@stdlib/assert-is-string@^0.2.1", "@stdlib/assert-is-string@^0.2.2":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/assert-is-string/-/assert-is-string-0.2.2.tgz"
+ integrity sha512-SOkFg4Hq443hkadM4tzcwTHWvTyKP9ULOZ8MSnnqmU0nBX1zLVFLFGY8jnF6Cary0dL0V7QQBCfuxqKFM6u2PQ==
+ dependencies:
+ "@stdlib/assert-has-tostringtag-support" "^0.2.2"
+ "@stdlib/utils-define-nonenumerable-read-only-property" "^0.2.2"
+ "@stdlib/utils-native-class" "^0.2.1"
+
+"@stdlib/assert-tools-array-function@^0.2.1":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/assert-tools-array-function/-/assert-tools-array-function-0.2.2.tgz"
+ integrity sha512-FYeT7X9x0C8Nh+MN6IJUDz+7i7yB6mio2/SDlrvyepjyPSU/cfHfwW0GEOnQhxZ+keLZC/YqDD930WjRODwMdA==
+ dependencies:
+ "@stdlib/assert-is-array" "^0.2.1"
+ "@stdlib/error-tools-fmtprodmsg" "^0.2.2"
+ "@stdlib/string-format" "^0.2.2"
+
+"@stdlib/boolean-ctor@^0.2.2":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/boolean-ctor/-/boolean-ctor-0.2.2.tgz"
+ integrity sha512-qIkHzmfxDvGzQ3XI9R7sZG97QSaWG5TvWVlrvcysOGT1cs6HtQgnf4D//SRzZ52VLm8oICP+6OKtd8Hpm6G7Ww==
+
+"@stdlib/error-tools-fmtprodmsg@^0.2.1", "@stdlib/error-tools-fmtprodmsg@^0.2.2":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/error-tools-fmtprodmsg/-/error-tools-fmtprodmsg-0.2.2.tgz"
+ integrity sha512-2IliQfTes4WV5odPidZFGD5eYDswZrPXob7oOu95Q69ERqImo8WzSwnG2EDbHPyOyYCewuMfM5Ha6Ggf+u944Q==
+
+"@stdlib/regexp-extended-length-path@^0.2.2":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/regexp-extended-length-path/-/regexp-extended-length-path-0.2.2.tgz"
+ integrity sha512-z3jqauEsaxpsQU3rj1A1QnOgu17pyW5kt+Az8QkoTk7wqNE8HhPikI6k4o7XBHV689rSFWZCl4c4W+7JAiNObQ==
+ dependencies:
+ "@stdlib/utils-define-nonenumerable-read-only-property" "^0.2.2"
+
+"@stdlib/regexp-function-name@^0.2.2":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/regexp-function-name/-/regexp-function-name-0.2.2.tgz"
+ integrity sha512-0z/KRsgHJJ3UQkmBeLH+Nin0hXIeA+Fw1T+mnG2V5CHnTA6FKlpxJxWrvwLEsRX7mR/DNtDp06zGyzMFE/4kig==
+ dependencies:
+ "@stdlib/utils-define-nonenumerable-read-only-property" "^0.2.2"
+
+"@stdlib/string-base-format-interpolate@^0.2.1":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/string-base-format-interpolate/-/string-base-format-interpolate-0.2.2.tgz"
+ integrity sha512-i9nU9rAB2+o/RR66TS9iQ8x+YzeUDL1SGiAo6GY3hP6Umz5Dx9Qp/v8T69gWVsb4a1YSclz5+YeCWaFgwvPjKA==
+
+"@stdlib/string-base-format-tokenize@^0.2.2":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/string-base-format-tokenize/-/string-base-format-tokenize-0.2.2.tgz"
+ integrity sha512-kXq2015i+LJjqth5dN+hYnvJXBSzRm8w0ABWB5tYAsIuQTpQK+mSo2muM8JBEFEnqUHAwpUsu2qNTK/9o8lsJg==
+
+"@stdlib/string-base-lowercase@^0.4.0":
+ version "0.4.0"
+ resolved "https://registry.npmjs.org/@stdlib/string-base-lowercase/-/string-base-lowercase-0.4.0.tgz"
+ integrity sha512-IH35Z5e4T+S3b3SfYY39mUhrD2qvJVp4VS7Rn3+jgj4+C3syocuAPsJ8C4OQXWGfblX/N9ymizbpFBCiVvMW8w==
+
+"@stdlib/string-base-replace@^0.2.2":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/string-base-replace/-/string-base-replace-0.2.2.tgz"
+ integrity sha512-Y4jZwRV4Uertw7AlA/lwaYl1HjTefSriN5+ztRcQQyDYmoVN3gzoVKLJ123HPiggZ89vROfC+sk/6AKvly+0CA==
+
+"@stdlib/string-format@^0.2.1", "@stdlib/string-format@^0.2.2":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/string-format/-/string-format-0.2.2.tgz"
+ integrity sha512-GUa50uxgMAtoItsxTbMmwkyhIwrCxCrsjzk3nAbLnt/1Kt1EWOWMwsALqZdD6K4V/xSJ4ns6PZur3W6w+vKk9g==
+ dependencies:
+ "@stdlib/string-base-format-interpolate" "^0.2.1"
+ "@stdlib/string-base-format-tokenize" "^0.2.2"
+
+"@stdlib/string-replace@^0.2.1":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/string-replace/-/string-replace-0.2.2.tgz"
+ integrity sha512-czNS5IU7sBuHjac45Y3VWUTsUoi82yc8JsMZrOMcjgSrEuDrVmA6sNJg7HC1DuSpdPjm/v9uUk102s1gIfk3Nw==
+ dependencies:
+ "@stdlib/assert-is-function" "^0.2.2"
+ "@stdlib/assert-is-regexp" "^0.2.2"
+ "@stdlib/assert-is-string" "^0.2.2"
+ "@stdlib/error-tools-fmtprodmsg" "^0.2.2"
+ "@stdlib/string-base-replace" "^0.2.2"
+ "@stdlib/string-format" "^0.2.2"
+ "@stdlib/utils-escape-regexp-string" "^0.2.2"
+
+"@stdlib/symbol-ctor@^0.2.2":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/symbol-ctor/-/symbol-ctor-0.2.2.tgz"
+ integrity sha512-XsmiTfHnTb9jSPf2SoK3O0wrNOXMxqzukvDvtzVur1XBKfim9+seaAS4akmV1H3+AroAXQWVtde885e1B6jz1w==
+
+"@stdlib/utils-constructor-name@^0.2.1":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/utils-constructor-name/-/utils-constructor-name-0.2.2.tgz"
+ integrity sha512-TBtO3MKDAf05ij5ajmyBCbpKKt0Lfahn5tu18gqds4PkFltgcw5tVZfSHY5DZ2HySJQ2GMMYjPW2Kbg6yPCSVg==
+ dependencies:
+ "@stdlib/assert-is-buffer" "^0.2.1"
+ "@stdlib/regexp-function-name" "^0.2.2"
+ "@stdlib/utils-native-class" "^0.2.1"
+
+"@stdlib/utils-convert-path@^0.2.1":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/utils-convert-path/-/utils-convert-path-0.2.2.tgz"
+ integrity sha512-8nNuAgt23Np9NssjShUrPK42c6gRTweGuoQw+yTpTfBR9VQv8WFyt048n8gRGUlAHizrdMNpEY9VAb7IBzpVYw==
+ dependencies:
+ "@stdlib/assert-is-string" "^0.2.2"
+ "@stdlib/error-tools-fmtprodmsg" "^0.2.2"
+ "@stdlib/regexp-extended-length-path" "^0.2.2"
+ "@stdlib/string-base-lowercase" "^0.4.0"
+ "@stdlib/string-format" "^0.2.2"
+ "@stdlib/string-replace" "^0.2.1"
+
+"@stdlib/utils-define-nonenumerable-read-only-property@^0.2.2":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/utils-define-nonenumerable-read-only-property/-/utils-define-nonenumerable-read-only-property-0.2.2.tgz"
+ integrity sha512-V3mpAesJemLYDKG376CsmoczWPE/4LKsp8xBvUxCt5CLNAx3J/1W39iZQyA5q6nY1RStGinGn1/dYZwa8ig0Uw==
+ dependencies:
+ "@stdlib/utils-define-property" "^0.2.3"
+
+"@stdlib/utils-define-property@^0.2.3":
+ version "0.2.4"
+ resolved "https://registry.npmjs.org/@stdlib/utils-define-property/-/utils-define-property-0.2.4.tgz"
+ integrity sha512-XlMdz7xwuw/sqXc9LbsV8XunCzZXjbZPC+OAdf4t4PBw4ZRwGzlTI6WED+f4PYR5Tp9F1cHgLPyMYCIBfA2zRg==
+ dependencies:
+ "@stdlib/error-tools-fmtprodmsg" "^0.2.1"
+ "@stdlib/string-format" "^0.2.1"
+
+"@stdlib/utils-escape-regexp-string@^0.2.2":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/utils-escape-regexp-string/-/utils-escape-regexp-string-0.2.2.tgz"
+ integrity sha512-areCibzgpmvm6pGKBg+mXkSDJW4NxtS5jcAT7RtunGMdAYhA/I5whISMPaeJkIT2XhjjFkjKBaIs5pF6aPr4fQ==
+ dependencies:
+ "@stdlib/assert-is-string" "^0.2.1"
+ "@stdlib/error-tools-fmtprodmsg" "^0.2.2"
+ "@stdlib/string-format" "^0.2.2"
+
+"@stdlib/utils-global@^0.2.2":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/utils-global/-/utils-global-0.2.2.tgz"
+ integrity sha512-A4E8VFHn+1bpfJ4PA8H2b62CMQpjv2A+H3QDEBrouLFWne0wrx0TNq8vH6VYHxx9ZRxhgWQjfHiSAxtUJobrbQ==
+ dependencies:
+ "@stdlib/assert-is-boolean" "^0.2.1"
+ "@stdlib/error-tools-fmtprodmsg" "^0.2.2"
+ "@stdlib/string-format" "^0.2.2"
+
+"@stdlib/utils-native-class@^0.2.1":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/utils-native-class/-/utils-native-class-0.2.2.tgz"
+ integrity sha512-cSn/FozbEpfR/FlJAoceQtZ8yUJFhZ8RFkbEsxW/7+H4o09yln3lBS0HSfUJISYNtpTNN/2/Fup88vmvwspvwA==
+ dependencies:
+ "@stdlib/assert-has-own-property" "^0.2.1"
+ "@stdlib/assert-has-tostringtag-support" "^0.2.2"
+ "@stdlib/symbol-ctor" "^0.2.2"
+
+"@stdlib/utils-type-of@^0.2.1":
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/@stdlib/utils-type-of/-/utils-type-of-0.2.2.tgz"
+ integrity sha512-RLGFxPNgY9AtVVrFGdKO6Y3pOd/Ov2WA4O2/czZN/AbgYzbPdoF0KkfvHRIney6k+TtvoyYB8YqZXJ4G88f9BQ==
+ dependencies:
+ "@stdlib/utils-constructor-name" "^0.2.1"
+ "@stdlib/utils-global" "^0.2.2"
+
+"@types/babel__core@^7.1.14":
+ version "7.20.5"
+ resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz"
+ integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==
+ dependencies:
+ "@babel/parser" "^7.20.7"
+ "@babel/types" "^7.20.7"
+ "@types/babel__generator" "*"
+ "@types/babel__template" "*"
+ "@types/babel__traverse" "*"
+
+"@types/babel__generator@*":
+ version "7.6.8"
+ resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz"
+ integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@types/babel__template@*":
+ version "7.4.4"
+ resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz"
+ integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==
+ dependencies:
+ "@babel/parser" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6":
+ version "7.20.6"
+ resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz"
+ integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==
+ dependencies:
+ "@babel/types" "^7.20.7"
+
+"@types/braces@*":
+ version "3.0.5"
+ resolved "https://registry.npmjs.org/@types/braces/-/braces-3.0.5.tgz"
+ integrity sha512-SQFof9H+LXeWNz8wDe7oN5zu7ket0qwMu5vZubW4GCJ8Kkeh6nBWUz87+KTz/G3Kqsrp0j/W253XJb3KMEeg3w==
+
+"@types/graceful-fs@^4.1.3":
+ version "4.1.9"
+ resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz"
+ integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==
+ dependencies:
+ "@types/node" "*"
+
+"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
+ version "2.0.6"
+ resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz"
+ integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==
+
+"@types/istanbul-lib-report@*":
+ version "3.0.3"
+ resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz"
+ integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==
+ dependencies:
+ "@types/istanbul-lib-coverage" "*"
+
+"@types/istanbul-reports@^3.0.0":
+ version "3.0.4"
+ resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz"
+ integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==
+ dependencies:
+ "@types/istanbul-lib-report" "*"
+
+"@types/jest@^29.5.2":
+ version "29.5.14"
+ resolved "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz"
+ integrity sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==
+ dependencies:
+ expect "^29.0.0"
+ pretty-format "^29.0.0"
+
+"@types/json5@^0.0.29":
+ version "0.0.29"
+ resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz"
+ integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
+
+"@types/lodash@^4.14.195":
+ version "4.17.16"
+ resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.16.tgz"
+ integrity sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g==
+
+"@types/micromatch@^4.0.2":
+ version "4.0.9"
+ resolved "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.9.tgz"
+ integrity sha512-7V+8ncr22h4UoYRLnLXSpTxjQrNUXtWHGeMPRJt1nULXI57G9bIcpyrHlmrQ7QK24EyyuXvYcSSWAM8GA9nqCg==
+ dependencies:
+ "@types/braces" "*"
+
+"@types/node@*", "@types/node@^22.0.0":
+ version "22.13.10"
+ resolved "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz"
+ integrity sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==
+ dependencies:
+ undici-types "~6.20.0"
+
+"@types/stack-utils@^2.0.0":
+ version "2.0.3"
+ resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz"
+ integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==
+
+"@types/uuid@^10.0.0":
+ version "10.0.0"
+ resolved "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz"
+ integrity sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==
+
+"@types/yargs-parser@*":
+ version "21.0.3"
+ resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz"
+ integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==
+
+"@types/yargs@^17.0.8":
+ version "17.0.33"
+ resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz"
+ integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==
+ dependencies:
+ "@types/yargs-parser" "*"
+
+"@typescript-eslint/eslint-plugin@^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/eslint-plugin@^7.0.0":
+ version "7.18.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz"
+ integrity sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==
+ dependencies:
+ "@eslint-community/regexpp" "^4.10.0"
+ "@typescript-eslint/scope-manager" "7.18.0"
+ "@typescript-eslint/type-utils" "7.18.0"
+ "@typescript-eslint/utils" "7.18.0"
+ "@typescript-eslint/visitor-keys" "7.18.0"
+ graphemer "^1.4.0"
+ ignore "^5.3.1"
+ natural-compare "^1.4.0"
+ ts-api-utils "^1.3.0"
+
+"@typescript-eslint/eslint-plugin@^8.0.0":
+ version "8.26.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.0.tgz"
+ integrity sha512-cLr1J6pe56zjKYajK6SSSre6nl1Gj6xDp1TY0trpgPzjVbgDwd09v2Ws37LABxzkicmUjhEeg/fAUjPJJB1v5Q==
+ dependencies:
+ "@eslint-community/regexpp" "^4.10.0"
+ "@typescript-eslint/scope-manager" "8.26.0"
+ "@typescript-eslint/type-utils" "8.26.0"
+ "@typescript-eslint/utils" "8.26.0"
+ "@typescript-eslint/visitor-keys" "8.26.0"
+ graphemer "^1.4.0"
+ ignore "^5.3.1"
+ natural-compare "^1.4.0"
+ ts-api-utils "^2.0.1"
+
+"@typescript-eslint/eslint-plugin@8.26.0":
+ version "8.26.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.0.tgz"
+ integrity sha512-cLr1J6pe56zjKYajK6SSSre6nl1Gj6xDp1TY0trpgPzjVbgDwd09v2Ws37LABxzkicmUjhEeg/fAUjPJJB1v5Q==
+ dependencies:
+ "@eslint-community/regexpp" "^4.10.0"
+ "@typescript-eslint/scope-manager" "8.26.0"
+ "@typescript-eslint/type-utils" "8.26.0"
+ "@typescript-eslint/utils" "8.26.0"
+ "@typescript-eslint/visitor-keys" "8.26.0"
+ graphemer "^1.4.0"
+ ignore "^5.3.1"
+ natural-compare "^1.4.0"
+ ts-api-utils "^2.0.1"
+
+"@typescript-eslint/parser@^7.0.0":
+ version "7.18.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz"
+ integrity sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==
+ dependencies:
+ "@typescript-eslint/scope-manager" "7.18.0"
+ "@typescript-eslint/types" "7.18.0"
+ "@typescript-eslint/typescript-estree" "7.18.0"
+ "@typescript-eslint/visitor-keys" "7.18.0"
+ debug "^4.3.4"
+
+"@typescript-eslint/parser@^8.0.0", "@typescript-eslint/parser@^8.0.0 || ^8.0.0-alpha.0", "@typescript-eslint/parser@8.26.0":
+ version "8.26.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.26.0.tgz"
+ integrity sha512-mNtXP9LTVBy14ZF3o7JG69gRPBK/2QWtQd0j0oH26HcY/foyJJau6pNUez7QrM5UHnSvwlQcJXKsk0I99B9pOA==
+ dependencies:
+ "@typescript-eslint/scope-manager" "8.26.0"
+ "@typescript-eslint/types" "8.26.0"
+ "@typescript-eslint/typescript-estree" "8.26.0"
+ "@typescript-eslint/visitor-keys" "8.26.0"
+ debug "^4.3.4"
+
+"@typescript-eslint/scope-manager@7.18.0":
+ version "7.18.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz"
+ integrity sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==
+ dependencies:
+ "@typescript-eslint/types" "7.18.0"
+ "@typescript-eslint/visitor-keys" "7.18.0"
+
+"@typescript-eslint/scope-manager@8.26.0":
+ version "8.26.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.26.0.tgz"
+ integrity sha512-E0ntLvsfPqnPwng8b8y4OGuzh/iIOm2z8U3S9zic2TeMLW61u5IH2Q1wu0oSTkfrSzwbDJIB/Lm8O3//8BWMPA==
+ dependencies:
+ "@typescript-eslint/types" "8.26.0"
+ "@typescript-eslint/visitor-keys" "8.26.0"
+
+"@typescript-eslint/type-utils@7.18.0":
+ version "7.18.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz"
+ integrity sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==
+ dependencies:
+ "@typescript-eslint/typescript-estree" "7.18.0"
+ "@typescript-eslint/utils" "7.18.0"
+ debug "^4.3.4"
+ ts-api-utils "^1.3.0"
+
+"@typescript-eslint/type-utils@8.26.0":
+ version "8.26.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.26.0.tgz"
+ integrity sha512-ruk0RNChLKz3zKGn2LwXuVoeBcUMh+jaqzN461uMMdxy5H9epZqIBtYj7UiPXRuOpaALXGbmRuZQhmwHhaS04Q==
+ dependencies:
+ "@typescript-eslint/typescript-estree" "8.26.0"
+ "@typescript-eslint/utils" "8.26.0"
+ debug "^4.3.4"
+ ts-api-utils "^2.0.1"
+
+"@typescript-eslint/types@7.18.0":
+ version "7.18.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz"
+ integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==
+
+"@typescript-eslint/types@8.26.0":
+ version "8.26.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.26.0.tgz"
+ integrity sha512-89B1eP3tnpr9A8L6PZlSjBvnJhWXtYfZhECqlBl1D9Lme9mHO6iWlsprBtVenQvY1HMhax1mWOjhtL3fh/u+pA==
+
+"@typescript-eslint/typescript-estree@7.18.0":
+ version "7.18.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz"
+ integrity sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==
+ dependencies:
+ "@typescript-eslint/types" "7.18.0"
+ "@typescript-eslint/visitor-keys" "7.18.0"
+ debug "^4.3.4"
+ globby "^11.1.0"
+ is-glob "^4.0.3"
+ minimatch "^9.0.4"
+ semver "^7.6.0"
+ ts-api-utils "^1.3.0"
+
+"@typescript-eslint/typescript-estree@8.26.0":
+ version "8.26.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.0.tgz"
+ integrity sha512-tiJ1Hvy/V/oMVRTbEOIeemA2XoylimlDQ03CgPPNaHYZbpsc78Hmngnt+WXZfJX1pjQ711V7g0H7cSJThGYfPQ==
+ dependencies:
+ "@typescript-eslint/types" "8.26.0"
+ "@typescript-eslint/visitor-keys" "8.26.0"
+ debug "^4.3.4"
+ fast-glob "^3.3.2"
+ is-glob "^4.0.3"
+ minimatch "^9.0.4"
+ semver "^7.6.0"
+ ts-api-utils "^2.0.1"
+
+"@typescript-eslint/utils@^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/utils@7.18.0":
+ version "7.18.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz"
+ integrity sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.4.0"
+ "@typescript-eslint/scope-manager" "7.18.0"
+ "@typescript-eslint/types" "7.18.0"
+ "@typescript-eslint/typescript-estree" "7.18.0"
+
+"@typescript-eslint/utils@8.26.0":
+ version "8.26.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.26.0.tgz"
+ integrity sha512-2L2tU3FVwhvU14LndnQCA2frYC8JnPDVKyQtWFPf8IYFMt/ykEN1bPolNhNbCVgOmdzTlWdusCTKA/9nKrf8Ig==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.4.0"
+ "@typescript-eslint/scope-manager" "8.26.0"
+ "@typescript-eslint/types" "8.26.0"
+ "@typescript-eslint/typescript-estree" "8.26.0"
+
+"@typescript-eslint/visitor-keys@7.18.0":
+ version "7.18.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz"
+ integrity sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==
+ dependencies:
+ "@typescript-eslint/types" "7.18.0"
+ eslint-visitor-keys "^3.4.3"
+
+"@typescript-eslint/visitor-keys@8.26.0":
+ version "8.26.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.0.tgz"
+ integrity sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg==
+ dependencies:
+ "@typescript-eslint/types" "8.26.0"
+ eslint-visitor-keys "^4.2.0"
+
+"@ungap/structured-clone@^1.2.0":
+ version "1.3.0"
+ resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz"
+ integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==
+
+"@vercel/ncc@^0.38.0":
+ version "0.38.3"
+ resolved "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.38.3.tgz"
+ integrity sha512-rnK6hJBS6mwc+Bkab+PGPs9OiS0i/3kdTO+CkI8V0/VrW3vmz7O2Pxjw/owOlmo6PKEIxRSeZKv/kuL9itnpYA==
+
+acorn-jsx@^5.3.2:
+ version "5.3.2"
+ resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
+ integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
+
+"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.14.0, acorn@^8.9.0:
+ version "8.14.1"
+ resolved "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz"
+ integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==
+
+ajv@^6.12.4:
+ version "6.12.6"
+ resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+ansi-escapes@^4.2.1:
+ version "4.3.2"
+ resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz"
+ integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
+ dependencies:
+ type-fest "^0.21.3"
+
+ansi-regex@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz"
+ integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
+ansi-styles@^5.0.0:
+ version "5.2.0"
+ resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz"
+ integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
+
+anymatch@^3.0.3:
+ version "3.1.3"
+ resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz"
+ integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
+aria-query@^5.3.0, aria-query@^5.3.2:
+ version "5.3.2"
+ resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz"
+ integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==
+
+array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz"
+ integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==
+ dependencies:
+ call-bound "^1.0.3"
+ is-array-buffer "^3.0.5"
+
+array-includes@^3.1.6, array-includes@^3.1.8:
+ version "3.1.8"
+ resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz"
+ integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.2"
+ es-object-atoms "^1.0.0"
+ get-intrinsic "^1.2.4"
+ is-string "^1.0.7"
+
+array-union@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz"
+ integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
+array.prototype.findlastindex@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz"
+ integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.2"
+ es-errors "^1.3.0"
+ es-object-atoms "^1.0.0"
+ es-shim-unscopables "^1.0.2"
+
+array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2:
+ version "1.3.3"
+ resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz"
+ integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==
+ dependencies:
+ call-bind "^1.0.8"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.5"
+ es-shim-unscopables "^1.0.2"
+
+array.prototype.flatmap@^1.3.2:
+ version "1.3.3"
+ resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz"
+ integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==
+ dependencies:
+ call-bind "^1.0.8"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.5"
+ es-shim-unscopables "^1.0.2"
+
+arraybuffer.prototype.slice@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz"
+ integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==
+ dependencies:
+ array-buffer-byte-length "^1.0.1"
+ call-bind "^1.0.8"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.5"
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.6"
+ is-array-buffer "^3.0.4"
+
+ast-types-flow@^0.0.8:
+ version "0.0.8"
+ resolved "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz"
+ integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==
+
+async-function@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz"
+ integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==
+
+async@^3.2.3:
+ version "3.2.6"
+ resolved "https://registry.npmjs.org/async/-/async-3.2.6.tgz"
+ integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz"
+ integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+
+available-typed-arrays@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz"
+ integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==
+ dependencies:
+ possible-typed-array-names "^1.0.0"
+
+axe-core@^4.10.0:
+ version "4.10.3"
+ resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz"
+ integrity sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==
+
+axios@^1.8.3:
+ version "1.8.3"
+ resolved "https://registry.npmjs.org/axios/-/axios-1.8.3.tgz"
+ integrity sha512-iP4DebzoNlP/YN2dpwCgb8zoCmhtkajzS48JvwmkSkXvPI3DHc7m+XYL5tGnSlJtR6nImXZmdCuN5aP8dh1d8A==
+ dependencies:
+ follow-redirects "^1.15.6"
+ form-data "^4.0.0"
+ proxy-from-env "^1.1.0"
+
+axobject-query@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz"
+ integrity sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==
+
+babel-jest@^29.0.0, babel-jest@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz"
+ integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==
+ dependencies:
+ "@jest/transform" "^29.7.0"
+ "@types/babel__core" "^7.1.14"
+ babel-plugin-istanbul "^6.1.1"
+ babel-preset-jest "^29.6.3"
+ chalk "^4.0.0"
+ graceful-fs "^4.2.9"
+ slash "^3.0.0"
+
+babel-plugin-istanbul@^6.1.1:
+ version "6.1.1"
+ resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz"
+ integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@istanbuljs/load-nyc-config" "^1.0.0"
+ "@istanbuljs/schema" "^0.1.2"
+ istanbul-lib-instrument "^5.0.4"
+ test-exclude "^6.0.0"
+
+babel-plugin-jest-hoist@^29.6.3:
+ version "29.6.3"
+ resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz"
+ integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==
+ dependencies:
+ "@babel/template" "^7.3.3"
+ "@babel/types" "^7.3.3"
+ "@types/babel__core" "^7.1.14"
+ "@types/babel__traverse" "^7.0.6"
+
+babel-preset-current-node-syntax@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz"
+ integrity sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==
+ dependencies:
+ "@babel/plugin-syntax-async-generators" "^7.8.4"
+ "@babel/plugin-syntax-bigint" "^7.8.3"
+ "@babel/plugin-syntax-class-properties" "^7.12.13"
+ "@babel/plugin-syntax-class-static-block" "^7.14.5"
+ "@babel/plugin-syntax-import-attributes" "^7.24.7"
+ "@babel/plugin-syntax-import-meta" "^7.10.4"
+ "@babel/plugin-syntax-json-strings" "^7.8.3"
+ "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+ "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+ "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+ "@babel/plugin-syntax-top-level-await" "^7.14.5"
+
+babel-preset-jest@^29.6.3:
+ version "29.6.3"
+ resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz"
+ integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==
+ dependencies:
+ babel-plugin-jest-hoist "^29.6.3"
+ babel-preset-current-node-syntax "^1.0.0"
+
+balanced-match@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+before-after-hook@^2.2.0:
+ version "2.2.3"
+ resolved "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz"
+ integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==
+
+before-after-hook@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz"
+ integrity sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+brace-expansion@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz"
+ integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+ dependencies:
+ balanced-match "^1.0.0"
+
+braces@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz"
+ integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
+ dependencies:
+ fill-range "^7.1.1"
+
+browserslist@^4.23.1, browserslist@^4.24.0, "browserslist@>= 4.21.0":
+ version "4.24.4"
+ resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz"
+ integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==
+ dependencies:
+ caniuse-lite "^1.0.30001688"
+ electron-to-chromium "^1.5.73"
+ node-releases "^2.0.19"
+ update-browserslist-db "^1.1.1"
+
+bs-logger@^0.2.6:
+ version "0.2.6"
+ resolved "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz"
+ integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==
+ dependencies:
+ fast-json-stable-stringify "2.x"
+
+bser@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz"
+ integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
+ dependencies:
+ node-int64 "^0.4.0"
+
+buffer-from@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz"
+ integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+
+call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz"
+ integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==
+ dependencies:
+ es-errors "^1.3.0"
+ function-bind "^1.1.2"
+
+call-bind@^1.0.7, call-bind@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz"
+ integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==
+ dependencies:
+ call-bind-apply-helpers "^1.0.0"
+ es-define-property "^1.0.0"
+ get-intrinsic "^1.2.4"
+ set-function-length "^1.2.2"
+
+call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz"
+ integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==
+ dependencies:
+ call-bind-apply-helpers "^1.0.2"
+ get-intrinsic "^1.3.0"
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camelcase@^5.3.1:
+ version "5.3.1"
+ resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz"
+ integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+
+camelcase@^6.2.0:
+ version "6.3.0"
+ resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz"
+ integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
+
+caniuse-lite@^1.0.30001688:
+ version "1.0.30001703"
+ resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001703.tgz"
+ integrity sha512-kRlAGTRWgPsOj7oARC9m1okJEXdL/8fekFVcxA8Hl7GH4r/sN4OJn/i6Flde373T50KS7Y37oFbMwlE8+F42kQ==
+
+chalk@^4.0.0, chalk@^4.0.2:
+ version "4.1.2"
+ resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"
+ integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+char-regex@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz"
+ integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==
+
+ci-info@^3.2.0:
+ version "3.9.0"
+ resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz"
+ integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==
+
+cjs-module-lexer@^1.0.0:
+ version "1.4.3"
+ resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz"
+ integrity sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==
+
+cliui@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz"
+ integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.1"
+ wrap-ansi "^7.0.0"
+
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz"
+ integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==
+
+collect-v8-coverage@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz"
+ integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+combined-stream@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ dependencies:
+ delayed-stream "~1.0.0"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+ integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+
+convert-source-map@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz"
+ integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
+
+create-jest@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz"
+ integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==
+ dependencies:
+ "@jest/types" "^29.6.3"
+ chalk "^4.0.0"
+ exit "^0.1.2"
+ graceful-fs "^4.2.9"
+ jest-config "^29.7.0"
+ jest-util "^29.7.0"
+ prompts "^2.0.1"
+
+cross-spawn@^7.0.2, cross-spawn@^7.0.3:
+ version "7.0.6"
+ resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz"
+ integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+damerau-levenshtein@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz"
+ integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==
+
+data-view-buffer@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz"
+ integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==
+ dependencies:
+ call-bound "^1.0.3"
+ es-errors "^1.3.0"
+ is-data-view "^1.0.2"
+
+data-view-byte-length@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz"
+ integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==
+ dependencies:
+ call-bound "^1.0.3"
+ es-errors "^1.3.0"
+ is-data-view "^1.0.2"
+
+data-view-byte-offset@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz"
+ integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==
+ dependencies:
+ call-bound "^1.0.2"
+ es-errors "^1.3.0"
+ is-data-view "^1.0.1"
+
+debug@^3.2.7:
+ version "3.2.7"
+ resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz"
+ integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
+ dependencies:
+ ms "^2.1.1"
+
+debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
+ version "4.4.0"
+ resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz"
+ integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==
+ dependencies:
+ ms "^2.1.3"
+
+dedent@^1.0.0:
+ version "1.5.3"
+ resolved "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz"
+ integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==
+
+deep-is@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz"
+ integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
+
+deepmerge@^4.2.2:
+ version "4.3.1"
+ resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz"
+ integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
+
+define-data-property@^1.0.1, define-data-property@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz"
+ integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==
+ dependencies:
+ es-define-property "^1.0.0"
+ es-errors "^1.3.0"
+ gopd "^1.0.1"
+
+define-properties@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz"
+ integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==
+ dependencies:
+ define-data-property "^1.0.1"
+ has-property-descriptors "^1.0.0"
+ object-keys "^1.1.1"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
+ integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+
+deprecation@^2.0.0:
+ version "2.3.1"
+ resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz"
+ integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==
+
+detect-newline@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz"
+ integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==
+
+diff-sequences@^29.6.3:
+ version "29.6.3"
+ resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz"
+ integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==
+
+dir-glob@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz"
+ integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
+ dependencies:
+ path-type "^4.0.0"
+
+doctrine@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz"
+ integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
+ dependencies:
+ esutils "^2.0.2"
+
+doctrine@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz"
+ integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+ dependencies:
+ esutils "^2.0.2"
+
+dunder-proto@^1.0.0, dunder-proto@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz"
+ integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==
+ dependencies:
+ call-bind-apply-helpers "^1.0.1"
+ es-errors "^1.3.0"
+ gopd "^1.2.0"
+
+ejs@^3.1.10:
+ version "3.1.10"
+ resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz"
+ integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==
+ dependencies:
+ jake "^10.8.5"
+
+electron-to-chromium@^1.5.73:
+ version "1.5.113"
+ resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.113.tgz"
+ integrity sha512-wjT2O4hX+wdWPJ76gWSkMhcHAV2PTMX+QetUCPYEdCIe+cxmgzzSSiGRCKW8nuh4mwKZlpv0xvoW7OF2X+wmHg==
+
+emittery@^0.13.1:
+ version "0.13.1"
+ resolved "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz"
+ integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==
+
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+emoji-regex@^9.2.2:
+ version "9.2.2"
+ resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz"
+ integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+
+error-ex@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ dependencies:
+ is-arrayish "^0.2.1"
+
+es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23.5, es-abstract@^1.23.9:
+ version "1.23.9"
+ resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz"
+ integrity sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==
+ dependencies:
+ array-buffer-byte-length "^1.0.2"
+ arraybuffer.prototype.slice "^1.0.4"
+ available-typed-arrays "^1.0.7"
+ call-bind "^1.0.8"
+ call-bound "^1.0.3"
+ data-view-buffer "^1.0.2"
+ data-view-byte-length "^1.0.2"
+ data-view-byte-offset "^1.0.1"
+ es-define-property "^1.0.1"
+ es-errors "^1.3.0"
+ es-object-atoms "^1.0.0"
+ es-set-tostringtag "^2.1.0"
+ es-to-primitive "^1.3.0"
+ function.prototype.name "^1.1.8"
+ get-intrinsic "^1.2.7"
+ get-proto "^1.0.0"
+ get-symbol-description "^1.1.0"
+ globalthis "^1.0.4"
+ gopd "^1.2.0"
+ has-property-descriptors "^1.0.2"
+ has-proto "^1.2.0"
+ has-symbols "^1.1.0"
+ hasown "^2.0.2"
+ internal-slot "^1.1.0"
+ is-array-buffer "^3.0.5"
+ is-callable "^1.2.7"
+ is-data-view "^1.0.2"
+ is-regex "^1.2.1"
+ is-shared-array-buffer "^1.0.4"
+ is-string "^1.1.1"
+ is-typed-array "^1.1.15"
+ is-weakref "^1.1.0"
+ math-intrinsics "^1.1.0"
+ object-inspect "^1.13.3"
+ object-keys "^1.1.1"
+ object.assign "^4.1.7"
+ own-keys "^1.0.1"
+ regexp.prototype.flags "^1.5.3"
+ safe-array-concat "^1.1.3"
+ safe-push-apply "^1.0.0"
+ safe-regex-test "^1.1.0"
+ set-proto "^1.0.0"
+ string.prototype.trim "^1.2.10"
+ string.prototype.trimend "^1.0.9"
+ string.prototype.trimstart "^1.0.8"
+ typed-array-buffer "^1.0.3"
+ typed-array-byte-length "^1.0.3"
+ typed-array-byte-offset "^1.0.4"
+ typed-array-length "^1.0.7"
+ unbox-primitive "^1.1.0"
+ which-typed-array "^1.1.18"
+
+es-define-property@^1.0.0, es-define-property@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz"
+ integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==
+
+es-errors@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz"
+ integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
+
+es-object-atoms@^1.0.0, es-object-atoms@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz"
+ integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==
+ dependencies:
+ es-errors "^1.3.0"
+
+es-set-tostringtag@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz"
+ integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==
+ dependencies:
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.6"
+ has-tostringtag "^1.0.2"
+ hasown "^2.0.2"
+
+es-shim-unscopables@^1.0.2:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz"
+ integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==
+ dependencies:
+ hasown "^2.0.2"
+
+es-to-primitive@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz"
+ integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==
+ dependencies:
+ is-callable "^1.2.7"
+ is-date-object "^1.0.5"
+ is-symbol "^1.0.4"
+
+escalade@^3.1.1, escalade@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz"
+ integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
+
+escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
+ integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+
+escape-string-regexp@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz"
+ integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
+
+escape-string-regexp@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
+eslint-config-prettier@*, eslint-config-prettier@^10.0.0, eslint-config-prettier@>=8.0.0:
+ version "10.1.1"
+ resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.1.tgz"
+ integrity sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==
+
+eslint-import-resolver-node@^0.3.9:
+ version "0.3.9"
+ resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz"
+ integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==
+ dependencies:
+ debug "^3.2.7"
+ is-core-module "^2.13.0"
+ resolve "^1.22.4"
+
+eslint-module-utils@^2.12.0:
+ version "2.12.0"
+ resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz"
+ integrity sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==
+ dependencies:
+ debug "^3.2.7"
+
+eslint-plugin-escompat@^3.11.3:
+ version "3.11.4"
+ resolved "https://registry.npmjs.org/eslint-plugin-escompat/-/eslint-plugin-escompat-3.11.4.tgz"
+ integrity sha512-j0ywwNnIufshOzgAu+PfIig1c7VRClKSNKzpniMT2vXQ4leL5q+e/SpMFQU0nrdL2WFFM44XmhSuwmxb3G0CJg==
+ dependencies:
+ browserslist "^4.23.1"
+
+eslint-plugin-eslint-comments@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz"
+ integrity sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==
+ dependencies:
+ escape-string-regexp "^1.0.5"
+ ignore "^5.0.5"
+
+eslint-plugin-filenames@^1.3.2:
+ version "1.3.2"
+ resolved "https://registry.npmjs.org/eslint-plugin-filenames/-/eslint-plugin-filenames-1.3.2.tgz"
+ integrity sha512-tqxJTiEM5a0JmRCUYQmxw23vtTxrb2+a3Q2mMOPhFxvt7ZQQJmdiuMby9B/vUAuVMghyP7oET+nIf6EO6CBd/w==
+ dependencies:
+ lodash.camelcase "4.3.0"
+ lodash.kebabcase "4.1.1"
+ lodash.snakecase "4.1.1"
+ lodash.upperfirst "4.3.1"
+
+eslint-plugin-github@^5.0.0:
+ version "5.1.8"
+ resolved "https://registry.npmjs.org/eslint-plugin-github/-/eslint-plugin-github-5.1.8.tgz"
+ integrity sha512-A6q+R3EBMF7hxIViWpQsalqpu3O0POcQ9VpN1m9W2I8yGumw+SFxXZUTafBd9X9mgUJhaU4M9qSifC1q/39H3A==
+ dependencies:
+ "@eslint/compat" "^1.2.3"
+ "@eslint/eslintrc" "^3.1.0"
+ "@eslint/js" "^9.14.0"
+ "@github/browserslist-config" "^1.0.0"
+ "@typescript-eslint/eslint-plugin" "^8.0.0"
+ "@typescript-eslint/parser" "^8.0.0"
+ aria-query "^5.3.0"
+ eslint-config-prettier ">=8.0.0"
+ eslint-plugin-escompat "^3.11.3"
+ eslint-plugin-eslint-comments "^3.2.0"
+ eslint-plugin-filenames "^1.3.2"
+ eslint-plugin-i18n-text "^1.0.1"
+ eslint-plugin-import "^2.31.0"
+ eslint-plugin-jsx-a11y "^6.10.2"
+ eslint-plugin-no-only-tests "^3.0.0"
+ eslint-plugin-prettier "^5.2.1"
+ eslint-rule-documentation ">=1.0.0"
+ globals "^15.12.0"
+ jsx-ast-utils "^3.3.2"
+ prettier "^3.0.0"
+ svg-element-attributes "^1.3.1"
+ typescript-eslint "^8.14.0"
+
+eslint-plugin-i18n-text@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/eslint-plugin-i18n-text/-/eslint-plugin-i18n-text-1.0.1.tgz"
+ integrity sha512-3G3UetST6rdqhqW9SfcfzNYMpQXS7wNkJvp6dsXnjzGiku6Iu5hl3B0kmk6lIcFPwYjhQIY+tXVRtK9TlGT7RA==
+
+eslint-plugin-import@^2.31.0:
+ version "2.31.0"
+ resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz"
+ integrity sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==
+ dependencies:
+ "@rtsao/scc" "^1.1.0"
+ array-includes "^3.1.8"
+ array.prototype.findlastindex "^1.2.5"
+ array.prototype.flat "^1.3.2"
+ array.prototype.flatmap "^1.3.2"
+ debug "^3.2.7"
+ doctrine "^2.1.0"
+ eslint-import-resolver-node "^0.3.9"
+ eslint-module-utils "^2.12.0"
+ hasown "^2.0.2"
+ is-core-module "^2.15.1"
+ is-glob "^4.0.3"
+ minimatch "^3.1.2"
+ object.fromentries "^2.0.8"
+ object.groupby "^1.0.3"
+ object.values "^1.2.0"
+ semver "^6.3.1"
+ string.prototype.trimend "^1.0.8"
+ tsconfig-paths "^3.15.0"
+
+eslint-plugin-jest@^28.0.0:
+ version "28.11.0"
+ resolved "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.11.0.tgz"
+ integrity sha512-QAfipLcNCWLVocVbZW8GimKn5p5iiMcgGbRzz8z/P5q7xw+cNEpYqyzFMtIF/ZgF2HLOyy+dYBut+DoYolvqig==
+ dependencies:
+ "@typescript-eslint/utils" "^6.0.0 || ^7.0.0 || ^8.0.0"
+
+eslint-plugin-jsx-a11y@^6.10.2:
+ version "6.10.2"
+ resolved "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz"
+ integrity sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==
+ dependencies:
+ aria-query "^5.3.2"
+ array-includes "^3.1.8"
+ array.prototype.flatmap "^1.3.2"
+ ast-types-flow "^0.0.8"
+ axe-core "^4.10.0"
+ axobject-query "^4.1.0"
+ damerau-levenshtein "^1.0.8"
+ emoji-regex "^9.2.2"
+ hasown "^2.0.2"
+ jsx-ast-utils "^3.3.5"
+ language-tags "^1.0.9"
+ minimatch "^3.1.2"
+ object.fromentries "^2.0.8"
+ safe-regex-test "^1.0.3"
+ string.prototype.includes "^2.0.1"
+
+eslint-plugin-no-only-tests@^3.0.0:
+ version "3.3.0"
+ resolved "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-3.3.0.tgz"
+ integrity sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q==
+
+eslint-plugin-prettier@^5.0.0-alpha.2, eslint-plugin-prettier@^5.2.1:
+ version "5.2.3"
+ resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.3.tgz"
+ integrity sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw==
+ dependencies:
+ prettier-linter-helpers "^1.0.0"
+ synckit "^0.9.1"
+
+eslint-rule-documentation@>=1.0.0:
+ version "1.0.23"
+ resolved "https://registry.npmjs.org/eslint-rule-documentation/-/eslint-rule-documentation-1.0.23.tgz"
+ integrity sha512-pWReu3fkohwyvztx/oQWWgld2iad25TfUdi6wvhhaDPIQjHU/pyvlKgXFw1kX31SQK2Nq9MH+vRDWB0ZLy8fYw==
+
+eslint-scope@^7.2.2:
+ version "7.2.2"
+ resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz"
+ integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==
+ dependencies:
+ esrecurse "^4.3.0"
+ estraverse "^5.2.0"
+
+eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
+ version "3.4.3"
+ resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz"
+ integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
+
+eslint-visitor-keys@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz"
+ integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==
+
+eslint@*, "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0 || ^9.0.0", "eslint@^8 || ^9", eslint@^8.43.0, eslint@^8.56.0, "eslint@^8.57.0 || ^9.0.0", eslint@^9.10.0, eslint@>=4.19.1, eslint@>=5.0.0, eslint@>=5.14.1, eslint@>=7.0.0, eslint@>=8.0.0:
+ version "8.57.1"
+ resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz"
+ integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.2.0"
+ "@eslint-community/regexpp" "^4.6.1"
+ "@eslint/eslintrc" "^2.1.4"
+ "@eslint/js" "8.57.1"
+ "@humanwhocodes/config-array" "^0.13.0"
+ "@humanwhocodes/module-importer" "^1.0.1"
+ "@nodelib/fs.walk" "^1.2.8"
+ "@ungap/structured-clone" "^1.2.0"
+ ajv "^6.12.4"
+ chalk "^4.0.0"
+ cross-spawn "^7.0.2"
+ debug "^4.3.2"
+ doctrine "^3.0.0"
+ escape-string-regexp "^4.0.0"
+ eslint-scope "^7.2.2"
+ eslint-visitor-keys "^3.4.3"
+ espree "^9.6.1"
+ esquery "^1.4.2"
+ esutils "^2.0.2"
+ fast-deep-equal "^3.1.3"
+ file-entry-cache "^6.0.1"
+ find-up "^5.0.0"
+ glob-parent "^6.0.2"
+ globals "^13.19.0"
+ graphemer "^1.4.0"
+ ignore "^5.2.0"
+ imurmurhash "^0.1.4"
+ is-glob "^4.0.0"
+ is-path-inside "^3.0.3"
+ js-yaml "^4.1.0"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.4.1"
+ lodash.merge "^4.6.2"
+ minimatch "^3.1.2"
+ natural-compare "^1.4.0"
+ optionator "^0.9.3"
+ strip-ansi "^6.0.1"
+ text-table "^0.2.0"
+
+espree@^10.0.1:
+ version "10.3.0"
+ resolved "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz"
+ integrity sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==
+ dependencies:
+ acorn "^8.14.0"
+ acorn-jsx "^5.3.2"
+ eslint-visitor-keys "^4.2.0"
+
+espree@^9.6.0, espree@^9.6.1:
+ version "9.6.1"
+ resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz"
+ integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==
+ dependencies:
+ acorn "^8.9.0"
+ acorn-jsx "^5.3.2"
+ eslint-visitor-keys "^3.4.1"
+
+esprima@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+esquery@^1.4.2:
+ version "1.6.0"
+ resolved "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz"
+ integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==
+ dependencies:
+ estraverse "^5.1.0"
+
+esrecurse@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz"
+ integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+ dependencies:
+ estraverse "^5.2.0"
+
+estraverse@^5.1.0, estraverse@^5.2.0:
+ version "5.3.0"
+ resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz"
+ integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
+
+esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+execa@^5.0.0:
+ version "5.1.1"
+ resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz"
+ integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
+ dependencies:
+ cross-spawn "^7.0.3"
+ get-stream "^6.0.0"
+ human-signals "^2.1.0"
+ is-stream "^2.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^4.0.1"
+ onetime "^5.1.2"
+ signal-exit "^3.0.3"
+ strip-final-newline "^2.0.0"
+
+exit@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz"
+ integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==
+
+expect@^29.0.0, expect@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz"
+ integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==
+ dependencies:
+ "@jest/expect-utils" "^29.7.0"
+ jest-get-type "^29.6.3"
+ jest-matcher-utils "^29.7.0"
+ jest-message-util "^29.7.0"
+ jest-util "^29.7.0"
+
+fast-content-type-parse@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz"
+ integrity sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==
+
+fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-diff@^1.1.2:
+ version "1.3.0"
+ resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz"
+ integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==
+
+fast-glob@^3.2.9, fast-glob@^3.3.2:
+ version "3.3.3"
+ resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz"
+ integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.2"
+ merge2 "^1.3.0"
+ micromatch "^4.0.8"
+
+fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0, fast-json-stable-stringify@2.x:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-levenshtein@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"
+ integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
+
+fastq@^1.6.0:
+ version "1.19.1"
+ resolved "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz"
+ integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==
+ dependencies:
+ reusify "^1.0.4"
+
+fb-watchman@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz"
+ integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==
+ dependencies:
+ bser "2.1.1"
+
+file-entry-cache@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz"
+ integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
+ dependencies:
+ flat-cache "^3.0.4"
+
+filelist@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz"
+ integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==
+ dependencies:
+ minimatch "^5.0.1"
+
+fill-range@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz"
+ integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+find-up@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz"
+ integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+ dependencies:
+ locate-path "^5.0.0"
+ path-exists "^4.0.0"
+
+find-up@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz"
+ integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+ dependencies:
+ locate-path "^5.0.0"
+ path-exists "^4.0.0"
+
+find-up@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz"
+ integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
+ dependencies:
+ locate-path "^6.0.0"
+ path-exists "^4.0.0"
+
+flat-cache@^3.0.4:
+ version "3.2.0"
+ resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz"
+ integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==
+ dependencies:
+ flatted "^3.2.9"
+ keyv "^4.5.3"
+ rimraf "^3.0.2"
+
+flatted@^3.2.9:
+ version "3.3.3"
+ resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz"
+ integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==
+
+follow-redirects@^1.15.6:
+ version "1.15.9"
+ resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz"
+ integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==
+
+for-each@^0.3.3, for-each@^0.3.5:
+ version "0.3.5"
+ resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz"
+ integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==
+ dependencies:
+ is-callable "^1.2.7"
+
+form-data@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz"
+ integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ es-set-tostringtag "^2.1.0"
+ mime-types "^2.1.12"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
+ integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+
+function-bind@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz"
+ integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
+
+function.prototype.name@^1.1.6, function.prototype.name@^1.1.8:
+ version "1.1.8"
+ resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz"
+ integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==
+ dependencies:
+ call-bind "^1.0.8"
+ call-bound "^1.0.3"
+ define-properties "^1.2.1"
+ functions-have-names "^1.2.3"
+ hasown "^2.0.2"
+ is-callable "^1.2.7"
+
+functions-have-names@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz"
+ integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
+
+gensync@^1.0.0-beta.2:
+ version "1.0.0-beta.2"
+ resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz"
+ integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
+
+get-caller-file@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz"
+ integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==
+ dependencies:
+ call-bind-apply-helpers "^1.0.2"
+ es-define-property "^1.0.1"
+ es-errors "^1.3.0"
+ es-object-atoms "^1.1.1"
+ function-bind "^1.1.2"
+ get-proto "^1.0.1"
+ gopd "^1.2.0"
+ has-symbols "^1.1.0"
+ hasown "^2.0.2"
+ math-intrinsics "^1.1.0"
+
+get-package-type@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz"
+ integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
+
+get-proto@^1.0.0, get-proto@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz"
+ integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==
+ dependencies:
+ dunder-proto "^1.0.1"
+ es-object-atoms "^1.0.0"
+
+get-stream@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz"
+ integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
+
+get-symbol-description@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz"
+ integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==
+ dependencies:
+ call-bound "^1.0.3"
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.6"
+
+glob-parent@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob-parent@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz"
+ integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
+ dependencies:
+ is-glob "^4.0.3"
+
+glob@^7.1.3, glob@^7.1.4:
+ version "7.2.3"
+ resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz"
+ integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.1.1"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+globals@^11.1.0:
+ version "11.12.0"
+ resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globals@^13.19.0:
+ version "13.24.0"
+ resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz"
+ integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==
+ dependencies:
+ type-fest "^0.20.2"
+
+globals@^14.0.0:
+ version "14.0.0"
+ resolved "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz"
+ integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==
+
+globals@^15.12.0:
+ version "15.15.0"
+ resolved "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz"
+ integrity sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==
+
+globalthis@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz"
+ integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==
+ dependencies:
+ define-properties "^1.2.1"
+ gopd "^1.0.1"
+
+globby@^11.1.0:
+ version "11.1.0"
+ resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz"
+ integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
+ dependencies:
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.2.9"
+ ignore "^5.2.0"
+ merge2 "^1.4.1"
+ slash "^3.0.0"
+
+gopd@^1.0.1, gopd@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz"
+ integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
+
+graceful-fs@^4.2.9:
+ version "4.2.11"
+ resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz"
+ integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+
+graphemer@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz"
+ integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
+
+has-bigints@^1.0.2:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz"
+ integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz"
+ integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==
+ dependencies:
+ es-define-property "^1.0.0"
+
+has-proto@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz"
+ integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==
+ dependencies:
+ dunder-proto "^1.0.0"
+
+has-symbols@^1.0.3, has-symbols@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz"
+ integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==
+
+has-tostringtag@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz"
+ integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==
+ dependencies:
+ has-symbols "^1.0.3"
+
+hasown@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz"
+ integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
+ dependencies:
+ function-bind "^1.1.2"
+
+html-escaper@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz"
+ integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
+
+human-signals@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz"
+ integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
+
+ignore@^5.0.5, ignore@^5.2.0, ignore@^5.3.1:
+ version "5.3.2"
+ resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz"
+ integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==
+
+import-fresh@^3.2.1:
+ version "3.3.1"
+ resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz"
+ integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+import-local@^3.0.2:
+ version "3.2.0"
+ resolved "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz"
+ integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==
+ dependencies:
+ pkg-dir "^4.2.0"
+ resolve-cwd "^3.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz"
+ integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz"
+ integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2:
+ version "2.0.4"
+ resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+internal-slot@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz"
+ integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==
+ dependencies:
+ es-errors "^1.3.0"
+ hasown "^2.0.2"
+ side-channel "^1.1.0"
+
+is-array-buffer@^3.0.4, is-array-buffer@^3.0.5:
+ version "3.0.5"
+ resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz"
+ integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==
+ dependencies:
+ call-bind "^1.0.8"
+ call-bound "^1.0.3"
+ get-intrinsic "^1.2.6"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz"
+ integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
+
+is-async-function@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz"
+ integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==
+ dependencies:
+ async-function "^1.0.0"
+ call-bound "^1.0.3"
+ get-proto "^1.0.1"
+ has-tostringtag "^1.0.2"
+ safe-regex-test "^1.1.0"
+
+is-bigint@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz"
+ integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==
+ dependencies:
+ has-bigints "^1.0.2"
+
+is-boolean-object@^1.2.1:
+ version "1.2.2"
+ resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz"
+ integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==
+ dependencies:
+ call-bound "^1.0.3"
+ has-tostringtag "^1.0.2"
+
+is-callable@^1.2.7:
+ version "1.2.7"
+ resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz"
+ integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
+
+is-core-module@^2.13.0, is-core-module@^2.15.1, is-core-module@^2.16.0:
+ version "2.16.1"
+ resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz"
+ integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==
+ dependencies:
+ hasown "^2.0.2"
+
+is-data-view@^1.0.1, is-data-view@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz"
+ integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==
+ dependencies:
+ call-bound "^1.0.2"
+ get-intrinsic "^1.2.6"
+ is-typed-array "^1.1.13"
+
+is-date-object@^1.0.5, is-date-object@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz"
+ integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==
+ dependencies:
+ call-bound "^1.0.2"
+ has-tostringtag "^1.0.2"
+
+is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz"
+ integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-finalizationregistry@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz"
+ integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==
+ dependencies:
+ call-bound "^1.0.3"
+
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-generator-fn@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz"
+ integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
+
+is-generator-function@^1.0.10:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz"
+ integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==
+ dependencies:
+ call-bound "^1.0.3"
+ get-proto "^1.0.0"
+ has-tostringtag "^1.0.2"
+ safe-regex-test "^1.1.0"
+
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz"
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-map@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz"
+ integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==
+
+is-number-object@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz"
+ integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==
+ dependencies:
+ call-bound "^1.0.3"
+ has-tostringtag "^1.0.2"
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-path-inside@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz"
+ integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
+
+is-regex@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz"
+ integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==
+ dependencies:
+ call-bound "^1.0.2"
+ gopd "^1.2.0"
+ has-tostringtag "^1.0.2"
+ hasown "^2.0.2"
+
+is-set@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz"
+ integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==
+
+is-shared-array-buffer@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz"
+ integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==
+ dependencies:
+ call-bound "^1.0.3"
+
+is-stream@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz"
+ integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
+
+is-string@^1.0.7, is-string@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz"
+ integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==
+ dependencies:
+ call-bound "^1.0.3"
+ has-tostringtag "^1.0.2"
+
+is-symbol@^1.0.4, is-symbol@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz"
+ integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==
+ dependencies:
+ call-bound "^1.0.2"
+ has-symbols "^1.1.0"
+ safe-regex-test "^1.1.0"
+
+is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15:
+ version "1.1.15"
+ resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz"
+ integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==
+ dependencies:
+ which-typed-array "^1.1.16"
+
+is-weakmap@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz"
+ integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==
+
+is-weakref@^1.0.2, is-weakref@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz"
+ integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==
+ dependencies:
+ call-bound "^1.0.3"
+
+is-weakset@^2.0.3:
+ version "2.0.4"
+ resolved "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz"
+ integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==
+ dependencies:
+ call-bound "^1.0.3"
+ get-intrinsic "^1.2.6"
+
+isarray@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz"
+ integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"
+ integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz"
+ integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==
+
+istanbul-lib-instrument@^5.0.4:
+ version "5.2.1"
+ resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz"
+ integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==
+ dependencies:
+ "@babel/core" "^7.12.3"
+ "@babel/parser" "^7.14.7"
+ "@istanbuljs/schema" "^0.1.2"
+ istanbul-lib-coverage "^3.2.0"
+ semver "^6.3.0"
+
+istanbul-lib-instrument@^6.0.0:
+ version "6.0.3"
+ resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz"
+ integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==
+ dependencies:
+ "@babel/core" "^7.23.9"
+ "@babel/parser" "^7.23.9"
+ "@istanbuljs/schema" "^0.1.3"
+ istanbul-lib-coverage "^3.2.0"
+ semver "^7.5.4"
+
+istanbul-lib-report@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz"
+ integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==
+ dependencies:
+ istanbul-lib-coverage "^3.0.0"
+ make-dir "^4.0.0"
+ supports-color "^7.1.0"
+
+istanbul-lib-source-maps@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz"
+ integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==
+ dependencies:
+ debug "^4.1.1"
+ istanbul-lib-coverage "^3.0.0"
+ source-map "^0.6.1"
+
+istanbul-reports@^3.1.3:
+ version "3.1.7"
+ resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz"
+ integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==
+ dependencies:
+ html-escaper "^2.0.0"
+ istanbul-lib-report "^3.0.0"
+
+jake@^10.8.5:
+ version "10.9.2"
+ resolved "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz"
+ integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==
+ dependencies:
+ async "^3.2.3"
+ chalk "^4.0.2"
+ filelist "^1.0.4"
+ minimatch "^3.1.2"
+
+jest-changed-files@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz"
+ integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==
+ dependencies:
+ execa "^5.0.0"
+ jest-util "^29.7.0"
+ p-limit "^3.1.0"
+
+jest-circus@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz"
+ integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==
+ dependencies:
+ "@jest/environment" "^29.7.0"
+ "@jest/expect" "^29.7.0"
+ "@jest/test-result" "^29.7.0"
+ "@jest/types" "^29.6.3"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ co "^4.6.0"
+ dedent "^1.0.0"
+ is-generator-fn "^2.0.0"
+ jest-each "^29.7.0"
+ jest-matcher-utils "^29.7.0"
+ jest-message-util "^29.7.0"
+ jest-runtime "^29.7.0"
+ jest-snapshot "^29.7.0"
+ jest-util "^29.7.0"
+ p-limit "^3.1.0"
+ pretty-format "^29.7.0"
+ pure-rand "^6.0.0"
+ slash "^3.0.0"
+ stack-utils "^2.0.3"
+
+jest-cli@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz"
+ integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==
+ dependencies:
+ "@jest/core" "^29.7.0"
+ "@jest/test-result" "^29.7.0"
+ "@jest/types" "^29.6.3"
+ chalk "^4.0.0"
+ create-jest "^29.7.0"
+ exit "^0.1.2"
+ import-local "^3.0.2"
+ jest-config "^29.7.0"
+ jest-util "^29.7.0"
+ jest-validate "^29.7.0"
+ yargs "^17.3.1"
+
+jest-config@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz"
+ integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==
+ dependencies:
+ "@babel/core" "^7.11.6"
+ "@jest/test-sequencer" "^29.7.0"
+ "@jest/types" "^29.6.3"
+ babel-jest "^29.7.0"
+ chalk "^4.0.0"
+ ci-info "^3.2.0"
+ deepmerge "^4.2.2"
+ glob "^7.1.3"
+ graceful-fs "^4.2.9"
+ jest-circus "^29.7.0"
+ jest-environment-node "^29.7.0"
+ jest-get-type "^29.6.3"
+ jest-regex-util "^29.6.3"
+ jest-resolve "^29.7.0"
+ jest-runner "^29.7.0"
+ jest-util "^29.7.0"
+ jest-validate "^29.7.0"
+ micromatch "^4.0.4"
+ parse-json "^5.2.0"
+ pretty-format "^29.7.0"
+ slash "^3.0.0"
+ strip-json-comments "^3.1.1"
+
+jest-diff@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz"
+ integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==
+ dependencies:
+ chalk "^4.0.0"
+ diff-sequences "^29.6.3"
+ jest-get-type "^29.6.3"
+ pretty-format "^29.7.0"
+
+jest-docblock@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz"
+ integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==
+ dependencies:
+ detect-newline "^3.0.0"
+
+jest-each@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz"
+ integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==
+ dependencies:
+ "@jest/types" "^29.6.3"
+ chalk "^4.0.0"
+ jest-get-type "^29.6.3"
+ jest-util "^29.7.0"
+ pretty-format "^29.7.0"
+
+jest-environment-node@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz"
+ integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==
+ dependencies:
+ "@jest/environment" "^29.7.0"
+ "@jest/fake-timers" "^29.7.0"
+ "@jest/types" "^29.6.3"
+ "@types/node" "*"
+ jest-mock "^29.7.0"
+ jest-util "^29.7.0"
+
+jest-get-type@^29.6.3:
+ version "29.6.3"
+ resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz"
+ integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==
+
+jest-haste-map@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz"
+ integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==
+ dependencies:
+ "@jest/types" "^29.6.3"
+ "@types/graceful-fs" "^4.1.3"
+ "@types/node" "*"
+ anymatch "^3.0.3"
+ fb-watchman "^2.0.0"
+ graceful-fs "^4.2.9"
+ jest-regex-util "^29.6.3"
+ jest-util "^29.7.0"
+ jest-worker "^29.7.0"
+ micromatch "^4.0.4"
+ walker "^1.0.8"
+ optionalDependencies:
+ fsevents "^2.3.2"
+
+jest-leak-detector@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz"
+ integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==
+ dependencies:
+ jest-get-type "^29.6.3"
+ pretty-format "^29.7.0"
+
+jest-matcher-utils@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz"
+ integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==
+ dependencies:
+ chalk "^4.0.0"
+ jest-diff "^29.7.0"
+ jest-get-type "^29.6.3"
+ pretty-format "^29.7.0"
+
+jest-message-util@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz"
+ integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==
+ dependencies:
+ "@babel/code-frame" "^7.12.13"
+ "@jest/types" "^29.6.3"
+ "@types/stack-utils" "^2.0.0"
+ chalk "^4.0.0"
+ graceful-fs "^4.2.9"
+ micromatch "^4.0.4"
+ pretty-format "^29.7.0"
+ slash "^3.0.0"
+ stack-utils "^2.0.3"
+
+jest-mock@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz"
+ integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==
+ dependencies:
+ "@jest/types" "^29.6.3"
+ "@types/node" "*"
+ jest-util "^29.7.0"
+
+jest-pnp-resolver@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz"
+ integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==
+
+jest-regex-util@^29.6.3:
+ version "29.6.3"
+ resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz"
+ integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==
+
+jest-resolve-dependencies@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz"
+ integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==
+ dependencies:
+ jest-regex-util "^29.6.3"
+ jest-snapshot "^29.7.0"
+
+jest-resolve@*, jest-resolve@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz"
+ integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==
+ dependencies:
+ chalk "^4.0.0"
+ graceful-fs "^4.2.9"
+ jest-haste-map "^29.7.0"
+ jest-pnp-resolver "^1.2.2"
+ jest-util "^29.7.0"
+ jest-validate "^29.7.0"
+ resolve "^1.20.0"
+ resolve.exports "^2.0.0"
+ slash "^3.0.0"
+
+jest-runner@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz"
+ integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==
+ dependencies:
+ "@jest/console" "^29.7.0"
+ "@jest/environment" "^29.7.0"
+ "@jest/test-result" "^29.7.0"
+ "@jest/transform" "^29.7.0"
+ "@jest/types" "^29.6.3"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ emittery "^0.13.1"
+ graceful-fs "^4.2.9"
+ jest-docblock "^29.7.0"
+ jest-environment-node "^29.7.0"
+ jest-haste-map "^29.7.0"
+ jest-leak-detector "^29.7.0"
+ jest-message-util "^29.7.0"
+ jest-resolve "^29.7.0"
+ jest-runtime "^29.7.0"
+ jest-util "^29.7.0"
+ jest-watcher "^29.7.0"
+ jest-worker "^29.7.0"
+ p-limit "^3.1.0"
+ source-map-support "0.5.13"
+
+jest-runtime@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz"
+ integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==
+ dependencies:
+ "@jest/environment" "^29.7.0"
+ "@jest/fake-timers" "^29.7.0"
+ "@jest/globals" "^29.7.0"
+ "@jest/source-map" "^29.6.3"
+ "@jest/test-result" "^29.7.0"
+ "@jest/transform" "^29.7.0"
+ "@jest/types" "^29.6.3"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ cjs-module-lexer "^1.0.0"
+ collect-v8-coverage "^1.0.0"
+ glob "^7.1.3"
+ graceful-fs "^4.2.9"
+ jest-haste-map "^29.7.0"
+ jest-message-util "^29.7.0"
+ jest-mock "^29.7.0"
+ jest-regex-util "^29.6.3"
+ jest-resolve "^29.7.0"
+ jest-snapshot "^29.7.0"
+ jest-util "^29.7.0"
+ slash "^3.0.0"
+ strip-bom "^4.0.0"
+
+jest-snapshot@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz"
+ integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==
+ dependencies:
+ "@babel/core" "^7.11.6"
+ "@babel/generator" "^7.7.2"
+ "@babel/plugin-syntax-jsx" "^7.7.2"
+ "@babel/plugin-syntax-typescript" "^7.7.2"
+ "@babel/types" "^7.3.3"
+ "@jest/expect-utils" "^29.7.0"
+ "@jest/transform" "^29.7.0"
+ "@jest/types" "^29.6.3"
+ babel-preset-current-node-syntax "^1.0.0"
+ chalk "^4.0.0"
+ expect "^29.7.0"
+ graceful-fs "^4.2.9"
+ jest-diff "^29.7.0"
+ jest-get-type "^29.6.3"
+ jest-matcher-utils "^29.7.0"
+ jest-message-util "^29.7.0"
+ jest-util "^29.7.0"
+ natural-compare "^1.4.0"
+ pretty-format "^29.7.0"
+ semver "^7.5.3"
+
+jest-util@^29.0.0, jest-util@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz"
+ integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==
+ dependencies:
+ "@jest/types" "^29.6.3"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ ci-info "^3.2.0"
+ graceful-fs "^4.2.9"
+ picomatch "^2.2.3"
+
+jest-validate@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz"
+ integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==
+ dependencies:
+ "@jest/types" "^29.6.3"
+ camelcase "^6.2.0"
+ chalk "^4.0.0"
+ jest-get-type "^29.6.3"
+ leven "^3.1.0"
+ pretty-format "^29.7.0"
+
+jest-watcher@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz"
+ integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==
+ dependencies:
+ "@jest/test-result" "^29.7.0"
+ "@jest/types" "^29.6.3"
+ "@types/node" "*"
+ ansi-escapes "^4.2.1"
+ chalk "^4.0.0"
+ emittery "^0.13.1"
+ jest-util "^29.7.0"
+ string-length "^4.0.1"
+
+jest-worker@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz"
+ integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==
+ dependencies:
+ "@types/node" "*"
+ jest-util "^29.7.0"
+ merge-stream "^2.0.0"
+ supports-color "^8.0.0"
+
+jest@*, jest@^29.0.0, jest@^29.5.0:
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz"
+ integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==
+ dependencies:
+ "@jest/core" "^29.7.0"
+ "@jest/types" "^29.6.3"
+ import-local "^3.0.2"
+ jest-cli "^29.7.0"
+
+js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^3.13.1:
+ version "3.14.1"
+ resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz"
+ integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+js-yaml@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz"
+ integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+ dependencies:
+ argparse "^2.0.1"
+
+jsesc@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz"
+ integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==
+
+json-buffer@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz"
+ integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+
+json-parse-even-better-errors@^2.3.0:
+ version "2.3.1"
+ resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz"
+ integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz"
+ integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
+
+json5@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz"
+ integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==
+ dependencies:
+ minimist "^1.2.0"
+
+json5@^2.2.3:
+ version "2.2.3"
+ resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz"
+ integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
+
+jsx-ast-utils@^3.3.2, jsx-ast-utils@^3.3.5:
+ version "3.3.5"
+ resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz"
+ integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==
+ dependencies:
+ array-includes "^3.1.6"
+ array.prototype.flat "^1.3.1"
+ object.assign "^4.1.4"
+ object.values "^1.1.6"
+
+keyv@^4.5.3:
+ version "4.5.4"
+ resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz"
+ integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
+ dependencies:
+ json-buffer "3.0.1"
+
+kleur@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz"
+ integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
+
+language-subtag-registry@^0.3.20:
+ version "0.3.23"
+ resolved "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz"
+ integrity sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==
+
+language-tags@^1.0.9:
+ version "1.0.9"
+ resolved "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz"
+ integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==
+ dependencies:
+ language-subtag-registry "^0.3.20"
+
+leven@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz"
+ integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
+
+levn@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz"
+ integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
+ dependencies:
+ prelude-ls "^1.2.1"
+ type-check "~0.4.0"
+
+lines-and-columns@^1.1.6:
+ version "1.2.4"
+ resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz"
+ integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
+
+locate-path@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz"
+ integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+ dependencies:
+ p-locate "^4.1.0"
+
+locate-path@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz"
+ integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+ dependencies:
+ p-locate "^5.0.0"
+
+lodash.camelcase@4.3.0:
+ version "4.3.0"
+ resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz"
+ integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==
+
+lodash.kebabcase@4.1.1:
+ version "4.1.1"
+ resolved "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz"
+ integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==
+
+lodash.memoize@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz"
+ integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==
+
+lodash.merge@^4.6.2:
+ version "4.6.2"
+ resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz"
+ integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+
+lodash.snakecase@4.1.1:
+ version "4.1.1"
+ resolved "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz"
+ integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==
+
+lodash.upperfirst@4.3.1:
+ version "4.3.1"
+ resolved "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz"
+ integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==
+
+lodash@^4.17.21:
+ version "4.17.21"
+ resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
+ integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+lru-cache@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz"
+ integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+ dependencies:
+ yallist "^3.0.2"
+
+make-dir@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz"
+ integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==
+ dependencies:
+ semver "^7.5.3"
+
+make-error@^1.3.6:
+ version "1.3.6"
+ resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz"
+ integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
+
+makeerror@1.0.12:
+ version "1.0.12"
+ resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz"
+ integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==
+ dependencies:
+ tmpl "1.0.5"
+
+math-intrinsics@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz"
+ integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==
+
+merge-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz"
+ integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+merge2@^1.3.0, merge2@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+micromatch@^4.0.4, micromatch@^4.0.5, micromatch@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz"
+ integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
+ dependencies:
+ braces "^3.0.3"
+ picomatch "^2.3.1"
+
+mime-db@1.52.0:
+ version "1.52.0"
+ resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz"
+ integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+mime-types@^2.1.12:
+ version "2.1.35"
+ resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz"
+ integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+ dependencies:
+ mime-db "1.52.0"
+
+mimic-fn@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz"
+ integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+minimatch@^3.0.4:
+ version "3.1.2"
+ resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz"
+ integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimatch@^3.0.5:
+ version "3.1.2"
+ resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz"
+ integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimatch@^3.1.1:
+ version "3.1.2"
+ resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz"
+ integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimatch@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz"
+ integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimatch@^5.0.1:
+ version "5.1.6"
+ resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz"
+ integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==
+ dependencies:
+ brace-expansion "^2.0.1"
+
+minimatch@^9.0.4:
+ version "9.0.5"
+ resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz"
+ integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==
+ dependencies:
+ brace-expansion "^2.0.1"
+
+minimist@^1.2.0, minimist@^1.2.6:
+ version "1.2.8"
+ resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz"
+ integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
+
+ms@^2.1.1, ms@^2.1.3:
+ version "2.1.3"
+ resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
+ integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz"
+ integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
+
+node-int64@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz"
+ integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==
+
+node-releases@^2.0.19:
+ version "2.0.19"
+ resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz"
+ integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==
+
+normalize-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+npm-run-path@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz"
+ integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
+ dependencies:
+ path-key "^3.0.0"
+
+object-inspect@^1.13.3:
+ version "1.13.4"
+ resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz"
+ integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==
+
+object-keys@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz"
+ integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object.assign@^4.1.4, object.assign@^4.1.7:
+ version "4.1.7"
+ resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz"
+ integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==
+ dependencies:
+ call-bind "^1.0.8"
+ call-bound "^1.0.3"
+ define-properties "^1.2.1"
+ es-object-atoms "^1.0.0"
+ has-symbols "^1.1.0"
+ object-keys "^1.1.1"
+
+object.fromentries@^2.0.8:
+ version "2.0.8"
+ resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz"
+ integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.2"
+ es-object-atoms "^1.0.0"
+
+object.groupby@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz"
+ integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.2"
+
+object.values@^1.1.6, object.values@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz"
+ integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==
+ dependencies:
+ call-bind "^1.0.8"
+ call-bound "^1.0.3"
+ define-properties "^1.2.1"
+ es-object-atoms "^1.0.0"
+
+once@^1.3.0, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz"
+ integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
+ dependencies:
+ wrappy "1"
+
+onetime@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz"
+ integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
+ dependencies:
+ mimic-fn "^2.1.0"
+
+optionator@^0.9.3:
+ version "0.9.4"
+ resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz"
+ integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==
+ dependencies:
+ deep-is "^0.1.3"
+ fast-levenshtein "^2.0.6"
+ levn "^0.4.1"
+ prelude-ls "^1.2.1"
+ type-check "^0.4.0"
+ word-wrap "^1.2.5"
+
+own-keys@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz"
+ integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==
+ dependencies:
+ get-intrinsic "^1.2.6"
+ object-keys "^1.1.1"
+ safe-push-apply "^1.0.0"
+
+p-limit@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz"
+ integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+ dependencies:
+ p-try "^2.0.0"
+
+p-limit@^3.0.2, p-limit@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz"
+ integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+ dependencies:
+ yocto-queue "^0.1.0"
+
+p-locate@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz"
+ integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+ dependencies:
+ p-limit "^2.2.0"
+
+p-locate@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz"
+ integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
+ dependencies:
+ p-limit "^3.0.2"
+
+p-try@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz"
+ integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+parse-json@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz"
+ integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ error-ex "^1.3.1"
+ json-parse-even-better-errors "^2.3.0"
+ lines-and-columns "^1.1.6"
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz"
+ integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
+
+path-key@^3.0.0, path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz"
+ integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+picocolors@^1.0.0, picocolors@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz"
+ integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
+
+picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
+ integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+pirates@^4.0.4:
+ version "4.0.6"
+ resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz"
+ integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==
+
+pkg-dir@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz"
+ integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+ dependencies:
+ find-up "^4.0.0"
+
+possible-typed-array-names@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz"
+ integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==
+
+prelude-ls@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz"
+ integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+
+prettier-linter-helpers@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz"
+ integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==
+ dependencies:
+ fast-diff "^1.1.2"
+
+prettier@^3.0.0, prettier@>=3.0.0:
+ version "3.5.3"
+ resolved "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz"
+ integrity sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==
+
+pretty-format@^29.0.0, pretty-format@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz"
+ integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==
+ dependencies:
+ "@jest/schemas" "^29.6.3"
+ ansi-styles "^5.0.0"
+ react-is "^18.0.0"
+
+prompts@^2.0.1:
+ version "2.4.2"
+ resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz"
+ integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==
+ dependencies:
+ kleur "^3.0.3"
+ sisteransi "^1.0.5"
+
+proxy-from-env@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz"
+ integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
+punycode@^2.1.0:
+ version "2.3.1"
+ resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz"
+ integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
+
+pure-rand@^6.0.0:
+ version "6.1.0"
+ resolved "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz"
+ integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==
+
+queue-microtask@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz"
+ integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
+react-is@^18.0.0:
+ version "18.3.1"
+ resolved "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz"
+ integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==
+
+reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9:
+ version "1.0.10"
+ resolved "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz"
+ integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==
+ dependencies:
+ call-bind "^1.0.8"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.9"
+ es-errors "^1.3.0"
+ es-object-atoms "^1.0.0"
+ get-intrinsic "^1.2.7"
+ get-proto "^1.0.1"
+ which-builtin-type "^1.2.1"
+
+regexp.prototype.flags@^1.5.3:
+ version "1.5.4"
+ resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz"
+ integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==
+ dependencies:
+ call-bind "^1.0.8"
+ define-properties "^1.2.1"
+ es-errors "^1.3.0"
+ get-proto "^1.0.1"
+ gopd "^1.2.0"
+ set-function-name "^2.0.2"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz"
+ integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
+
+resolve-cwd@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz"
+ integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
+ dependencies:
+ resolve-from "^5.0.0"
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-from@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz"
+ integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+
+resolve.exports@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz"
+ integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==
+
+resolve@^1.20.0, resolve@^1.22.4:
+ version "1.22.10"
+ resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz"
+ integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==
+ dependencies:
+ is-core-module "^2.16.0"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
+reusify@^1.0.4:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz"
+ integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==
+
+rimraf@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
+run-parallel@^1.1.9:
+ version "1.2.0"
+ resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz"
+ integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+ dependencies:
+ queue-microtask "^1.2.2"
+
+safe-array-concat@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz"
+ integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==
+ dependencies:
+ call-bind "^1.0.8"
+ call-bound "^1.0.2"
+ get-intrinsic "^1.2.6"
+ has-symbols "^1.1.0"
+ isarray "^2.0.5"
+
+safe-push-apply@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz"
+ integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==
+ dependencies:
+ es-errors "^1.3.0"
+ isarray "^2.0.5"
+
+safe-regex-test@^1.0.3, safe-regex-test@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz"
+ integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==
+ dependencies:
+ call-bound "^1.0.2"
+ es-errors "^1.3.0"
+ is-regex "^1.2.1"
+
+semver@^6.3.0:
+ version "6.3.1"
+ resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz"
+ integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
+
+semver@^6.3.1:
+ version "6.3.1"
+ resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz"
+ integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
+
+semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.7.1:
+ version "7.7.1"
+ resolved "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz"
+ integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==
+
+set-function-length@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz"
+ integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==
+ dependencies:
+ define-data-property "^1.1.4"
+ es-errors "^1.3.0"
+ function-bind "^1.1.2"
+ get-intrinsic "^1.2.4"
+ gopd "^1.0.1"
+ has-property-descriptors "^1.0.2"
+
+set-function-name@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz"
+ integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==
+ dependencies:
+ define-data-property "^1.1.4"
+ es-errors "^1.3.0"
+ functions-have-names "^1.2.3"
+ has-property-descriptors "^1.0.2"
+
+set-proto@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz"
+ integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==
+ dependencies:
+ dunder-proto "^1.0.1"
+ es-errors "^1.3.0"
+ es-object-atoms "^1.0.0"
+
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+side-channel-list@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz"
+ integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==
+ dependencies:
+ es-errors "^1.3.0"
+ object-inspect "^1.13.3"
+
+side-channel-map@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz"
+ integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==
+ dependencies:
+ call-bound "^1.0.2"
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.5"
+ object-inspect "^1.13.3"
+
+side-channel-weakmap@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz"
+ integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==
+ dependencies:
+ call-bound "^1.0.2"
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.5"
+ object-inspect "^1.13.3"
+ side-channel-map "^1.0.1"
+
+side-channel@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz"
+ integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==
+ dependencies:
+ es-errors "^1.3.0"
+ object-inspect "^1.13.3"
+ side-channel-list "^1.0.0"
+ side-channel-map "^1.0.1"
+ side-channel-weakmap "^1.0.2"
+
+signal-exit@^3.0.3, signal-exit@^3.0.7:
+ version "3.0.7"
+ resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz"
+ integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
+
+sisteransi@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz"
+ integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
+
+slash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz"
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
+source-map-support@0.5.13:
+ version "0.5.13"
+ resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz"
+ integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map@^0.6.0, source-map@^0.6.1:
+ version "0.6.1"
+ resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz"
+ integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
+
+stack-utils@^2.0.3:
+ version "2.0.6"
+ resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz"
+ integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==
+ dependencies:
+ escape-string-regexp "^2.0.0"
+
+string-length@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz"
+ integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==
+ dependencies:
+ char-regex "^1.0.2"
+ strip-ansi "^6.0.0"
+
+string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
+ version "4.2.3"
+ resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
+
+string.prototype.includes@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz"
+ integrity sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.3"
+
+string.prototype.trim@^1.2.10:
+ version "1.2.10"
+ resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz"
+ integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==
+ dependencies:
+ call-bind "^1.0.8"
+ call-bound "^1.0.2"
+ define-data-property "^1.1.4"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.5"
+ es-object-atoms "^1.0.0"
+ has-property-descriptors "^1.0.2"
+
+string.prototype.trimend@^1.0.8, string.prototype.trimend@^1.0.9:
+ version "1.0.9"
+ resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz"
+ integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==
+ dependencies:
+ call-bind "^1.0.8"
+ call-bound "^1.0.2"
+ define-properties "^1.2.1"
+ es-object-atoms "^1.0.0"
+
+string.prototype.trimstart@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz"
+ integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-object-atoms "^1.0.0"
+
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz"
+ integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==
+
+strip-bom@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz"
+ integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
+
+strip-final-newline@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz"
+ integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
+
+strip-json-comments@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"
+ integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+supports-color@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-color@^8.0.0:
+ version "8.1.1"
+ resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz"
+ integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-preserve-symlinks-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"
+ integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
+svg-element-attributes@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.npmjs.org/svg-element-attributes/-/svg-element-attributes-1.3.1.tgz"
+ integrity sha512-Bh05dSOnJBf3miNMqpsormfNtfidA/GxQVakhtn0T4DECWKeXQRQUceYjJ+OxYiiLdGe4Jo9iFV8wICFapFeIA==
+
+synckit@^0.9.1:
+ version "0.9.2"
+ resolved "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz"
+ integrity sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==
+ dependencies:
+ "@pkgr/core" "^0.1.0"
+ tslib "^2.6.2"
+
+test-exclude@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz"
+ integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==
+ dependencies:
+ "@istanbuljs/schema" "^0.1.2"
+ glob "^7.1.4"
+ minimatch "^3.0.4"
+
+text-table@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz"
+ integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
+
+tmpl@1.0.5:
+ version "1.0.5"
+ resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz"
+ integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+ts-api-utils@^1.3.0:
+ version "1.4.3"
+ resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz"
+ integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==
+
+ts-api-utils@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz"
+ integrity sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==
+
+ts-jest@^29.1.0:
+ version "29.2.6"
+ resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.6.tgz"
+ integrity sha512-yTNZVZqc8lSixm+QGVFcPe6+yj7+TWZwIesuOWvfcn4B9bz5x4NDzVCQQjOs7Hfouu36aEqfEbo9Qpo+gq8dDg==
+ dependencies:
+ bs-logger "^0.2.6"
+ ejs "^3.1.10"
+ fast-json-stable-stringify "^2.1.0"
+ jest-util "^29.0.0"
+ json5 "^2.2.3"
+ lodash.memoize "^4.1.2"
+ make-error "^1.3.6"
+ semver "^7.7.1"
+ yargs-parser "^21.1.1"
+
+tsconfig-paths@^3.15.0:
+ version "3.15.0"
+ resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz"
+ integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==
+ dependencies:
+ "@types/json5" "^0.0.29"
+ json5 "^1.0.2"
+ minimist "^1.2.6"
+ strip-bom "^3.0.0"
+
+tslib@^2.6.2:
+ version "2.8.1"
+ resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz"
+ integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
+
+tunnel@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz"
+ integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==
+
+type-check@^0.4.0, type-check@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz"
+ integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+ dependencies:
+ prelude-ls "^1.2.1"
+
+type-detect@4.0.8:
+ version "4.0.8"
+ resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz"
+ integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
+
+type-fest@^0.20.2:
+ version "0.20.2"
+ resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz"
+ integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+
+type-fest@^0.21.3:
+ version "0.21.3"
+ resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz"
+ integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
+
+typed-array-buffer@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz"
+ integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==
+ dependencies:
+ call-bound "^1.0.3"
+ es-errors "^1.3.0"
+ is-typed-array "^1.1.14"
+
+typed-array-byte-length@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz"
+ integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==
+ dependencies:
+ call-bind "^1.0.8"
+ for-each "^0.3.3"
+ gopd "^1.2.0"
+ has-proto "^1.2.0"
+ is-typed-array "^1.1.14"
+
+typed-array-byte-offset@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz"
+ integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==
+ dependencies:
+ available-typed-arrays "^1.0.7"
+ call-bind "^1.0.8"
+ for-each "^0.3.3"
+ gopd "^1.2.0"
+ has-proto "^1.2.0"
+ is-typed-array "^1.1.15"
+ reflect.getprototypeof "^1.0.9"
+
+typed-array-length@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz"
+ integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==
+ dependencies:
+ call-bind "^1.0.7"
+ for-each "^0.3.3"
+ gopd "^1.0.1"
+ is-typed-array "^1.1.13"
+ possible-typed-array-names "^1.0.0"
+ reflect.getprototypeof "^1.0.6"
+
+typescript-eslint@^8.14.0:
+ version "8.26.0"
+ resolved "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.26.0.tgz"
+ integrity sha512-PtVz9nAnuNJuAVeUFvwztjuUgSnJInODAUx47VDwWPXzd5vismPOtPtt83tzNXyOjVQbPRp786D6WFW/M2koIA==
+ dependencies:
+ "@typescript-eslint/eslint-plugin" "8.26.0"
+ "@typescript-eslint/parser" "8.26.0"
+ "@typescript-eslint/utils" "8.26.0"
+
+typescript@^5.1.3, typescript@>=4.2.0, "typescript@>=4.3 <6", typescript@>=4.8.4, "typescript@>=4.8.4 <5.9.0":
+ version "5.8.2"
+ resolved "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz"
+ integrity sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==
+
+unbox-primitive@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz"
+ integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==
+ dependencies:
+ call-bound "^1.0.3"
+ has-bigints "^1.0.2"
+ has-symbols "^1.1.0"
+ which-boxed-primitive "^1.1.1"
+
+undici-types@~6.20.0:
+ version "6.20.0"
+ resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz"
+ integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==
+
+undici@^5.25.4:
+ version "5.28.5"
+ resolved "https://registry.npmjs.org/undici/-/undici-5.28.5.tgz"
+ integrity sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==
+ dependencies:
+ "@fastify/busboy" "^2.0.0"
+
+universal-user-agent@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz"
+ integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==
+
+universal-user-agent@^7.0.0, universal-user-agent@^7.0.2:
+ version "7.0.2"
+ resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.2.tgz"
+ integrity sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==
+
+update-browserslist-db@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz"
+ integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==
+ dependencies:
+ escalade "^3.2.0"
+ picocolors "^1.1.1"
+
+uri-js@^4.2.2:
+ version "4.4.1"
+ resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz"
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+ dependencies:
+ punycode "^2.1.0"
+
+v8-to-istanbul@^9.0.1:
+ version "9.3.0"
+ resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz"
+ integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==
+ dependencies:
+ "@jridgewell/trace-mapping" "^0.3.12"
+ "@types/istanbul-lib-coverage" "^2.0.1"
+ convert-source-map "^2.0.0"
+
+walker@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz"
+ integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==
+ dependencies:
+ makeerror "1.0.12"
+
+which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz"
+ integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==
+ dependencies:
+ is-bigint "^1.1.0"
+ is-boolean-object "^1.2.1"
+ is-number-object "^1.1.1"
+ is-string "^1.1.1"
+ is-symbol "^1.1.1"
+
+which-builtin-type@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz"
+ integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==
+ dependencies:
+ call-bound "^1.0.2"
+ function.prototype.name "^1.1.6"
+ has-tostringtag "^1.0.2"
+ is-async-function "^2.0.0"
+ is-date-object "^1.1.0"
+ is-finalizationregistry "^1.1.0"
+ is-generator-function "^1.0.10"
+ is-regex "^1.2.1"
+ is-weakref "^1.0.2"
+ isarray "^2.0.5"
+ which-boxed-primitive "^1.1.0"
+ which-collection "^1.0.2"
+ which-typed-array "^1.1.16"
+
+which-collection@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz"
+ integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==
+ dependencies:
+ is-map "^2.0.3"
+ is-set "^2.0.3"
+ is-weakmap "^2.0.2"
+ is-weakset "^2.0.3"
+
+which-typed-array@^1.1.16, which-typed-array@^1.1.18:
+ version "1.1.19"
+ resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz"
+ integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==
+ dependencies:
+ available-typed-arrays "^1.0.7"
+ call-bind "^1.0.8"
+ call-bound "^1.0.4"
+ for-each "^0.3.5"
+ get-proto "^1.0.1"
+ gopd "^1.2.0"
+ has-tostringtag "^1.0.2"
+
+which@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+word-wrap@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz"
+ integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
+
+wrap-ansi@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
+ integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+
+write-file-atomic@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz"
+ integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==
+ dependencies:
+ imurmurhash "^0.1.4"
+ signal-exit "^3.0.7"
+
+y18n@^5.0.5:
+ version "5.0.8"
+ resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz"
+ integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
+
+yallist@^3.0.2:
+ version "3.1.1"
+ resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz"
+ integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
+yaml@^2.3.1:
+ version "2.7.0"
+ resolved "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz"
+ integrity sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==
+
+yargs-parser@^21.1.1:
+ version "21.1.1"
+ resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz"
+ integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
+
+yargs@^17.3.1:
+ version "17.7.2"
+ resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz"
+ integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
+ dependencies:
+ cliui "^8.0.1"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
+ require-directory "^2.1.1"
+ string-width "^4.2.3"
+ y18n "^5.0.5"
+ yargs-parser "^21.1.1"
+
+yocto-queue@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz"
+ integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==