├── .github └── workflows │ ├── build-test.yaml │ ├── echo-1.yaml │ ├── echo-2.yaml │ ├── echo-3.yaml │ └── test.yaml ├── .gitignore ├── .prettierrc ├── .vscode └── settings.json ├── LICENSE ├── README.md ├── action.yaml ├── dist └── index.js ├── eslint.config.mjs ├── etc └── test.http ├── package-lock.json ├── package.json ├── src └── main.ts └── tsconfig.json /.github/workflows/build-test.yaml: -------------------------------------------------------------------------------- 1 | name: Build & Test 2 | 3 | on: 4 | push: 5 | branches: [master] 6 | workflow_dispatch: 7 | 8 | # permissions: 9 | # contents: write 10 | 11 | jobs: 12 | build: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: Check out repository 16 | uses: actions/checkout@v4 17 | 18 | - name: Build with ncc 19 | run: | 20 | npm install 21 | npm run build 22 | 23 | - name: Invoke echo 1 workflow using this action 24 | uses: ./ 25 | with: 26 | workflow: Message Echo 1 27 | inputs: '{"message": "blah blah"}' 28 | 29 | - name: Invoke echo 2 workflow using this action 30 | uses: ./ 31 | with: 32 | workflow: echo-2.yaml 33 | 34 | - name: Invoke echo 1 workflow by id 35 | uses: ./ 36 | with: 37 | workflow: "1854247" 38 | inputs: '{"message": "Mango jam"}' 39 | 40 | # - name: Push dist back to GitHub 41 | # uses: ad-m/github-push-action@master 42 | # with: 43 | # github_token: ${{ secrets.GITHUB_TOKEN }} 44 | # branch: ${{ github.ref }} 45 | 46 | # - name: Invoke external workflow using this action 47 | # uses: ./ 48 | # with: 49 | # workflow: Deploy To Kubernetes 50 | # repo: benc-uk/dapr-store 51 | # token: ${{ secrets.PERSONAL_TOKEN }} 52 | # ref: master 53 | -------------------------------------------------------------------------------- /.github/workflows/echo-1.yaml: -------------------------------------------------------------------------------- 1 | name: Message Echo 1 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | message: 7 | description: "Message to echo" 8 | required: true 9 | # No default 10 | 11 | jobs: 12 | echo: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: Echo message 16 | run: echo '${{ inputs.message }}' 17 | -------------------------------------------------------------------------------- /.github/workflows/echo-2.yaml: -------------------------------------------------------------------------------- 1 | name: Message Echo 2 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | message: 7 | description: "Message to echo" 8 | required: false 9 | default: "this is echo 2" 10 | 11 | jobs: 12 | echo: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: Echo message 16 | run: echo '${{ inputs.message }}' -------------------------------------------------------------------------------- /.github/workflows/echo-3.yaml: -------------------------------------------------------------------------------- 1 | name: Message Echo 3 2 | 3 | # A version using workflow_call for investigation purposes 4 | 5 | on: 6 | workflow_call: 7 | inputs: 8 | message: 9 | required: false 10 | default: "this is echo 3" 11 | type: string 12 | description: "Message to echo" 13 | 14 | jobs: 15 | echo: 16 | runs-on: ubuntu-latest 17 | steps: 18 | - name: Echo message 19 | run: echo '${{ inputs.message }}' -------------------------------------------------------------------------------- /.github/workflows/test.yaml: -------------------------------------------------------------------------------- 1 | name: Workflow Tester 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | jobs: 7 | testAction: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/checkout@v2 11 | - name: Invoke echo 1 12 | uses: ./ 13 | with: 14 | workflow: echo-1.yaml 15 | inputs: '{"message": "blah blah this is a test"}' 16 | - name: Invoke echo 2 17 | uses: ./ 18 | with: 19 | workflow: Message Echo 2 20 | inputs: '{"message": "mushrooms in the morning"}' 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .env -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "singleQuote": true, 4 | "printWidth": 120 5 | } 6 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.codeActionsOnSave": { 3 | "source.fixAll.eslint": true 4 | }, 5 | "eslint.format.enable": true, 6 | "[typescript]": { 7 | "editor.defaultFormatter": "dbaeumer.vscode-eslint" 8 | } 9 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2020 Ben Coleman 2 | 3 | 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: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | 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. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # GitHub Action for Dispatching Workflows 2 | 3 | This action triggers another GitHub Actions workflow, using the `workflow_dispatch` event. 4 | The workflow must be configured for this event type e.g. `on: [workflow_dispatch]` 5 | 6 | This allows you to chain workflows, the classic use case is have a CI build workflow, trigger a CD release/deploy workflow when it completes. Allowing you to maintain separate workflows for CI and CD, and pass data between them as required. 7 | 8 | For details of the `workflow_dispatch` even see [this blog post introducing this type of trigger](https://github.blog/changelog/2020-07-06-github-actions-manual-triggers-with-workflow_dispatch/) 9 | 10 | _Note 1._ GitHub now has a native way to chain workflows called "reusable workflows". See the docs on [reusing workflows](https://docs.github.com/en/actions/using-workflows/reusing-workflows). This approach is somewhat different from workflow_dispatch but it's worth keeping in mind. 11 | 12 | _Note 2._ The GitHub UI will report flows triggered by this action as "manually triggered" even though they have been run programmatically via another workflow and the API. 13 | 14 | _Note 3._ If you want to reference the target workflow by ID, you will need to list them with the following REST API call `curl https://api.github.com/repos/{{owner}}/{{repo}}/actions/workflows -H "Authorization: token {{pat-token}}"` 15 | 16 | ## Action Inputs 17 | 18 | ### `workflow` 19 | 20 | **Required.** The name, filename or ID of the workflow to be triggered and run. All three possibilities are used when looking for the workflow. e.g. 21 | 22 | ```yaml 23 | workflow: My Workflow 24 | # or 25 | workflow: my-workflow.yaml 26 | # or 27 | workflow: 1218419 28 | ``` 29 | 30 | ### `inputs` 31 | 32 | **Optional.** The inputs to pass to the workflow (if any are configured), this must be a JSON encoded string, e.g. `{ "myInput": "foobar" }` 33 | 34 | ### `ref` 35 | 36 | **Optional.** The Git reference used with the triggered workflow run. The reference can be a branch, tag, or a commit SHA. If omitted the context ref of the triggering workflow is used. If you want to trigger on pull requests and run the target workflow in the context of the pull request branch, set the ref to `${{ github.event.pull_request.head.ref }}`. 37 | 38 | ### `repo` 39 | 40 | **Optional.** The default behavior is to trigger workflows in the same repo as the triggering workflow, if you wish to trigger in another GitHub repo "externally", then provide the owner + repo name with slash between them e.g. `microsoft/vscode`. 41 | 42 | - When triggering across repos like this, you **must** provide a `token` (see below), or you will get an _"Resource not accessible by integration"_ error. 43 | - If the default branch in the other repo is different from the calling repo, you must provide `ref` input also, or you will get a _"No ref found"_ error. 44 | 45 | ### `token` 46 | 47 | **Optional.** By default the standard `github.token`/`GITHUB_TOKEN` will be used and you no longer need to provide your own token here. 48 | 49 | **⚠️ IMPORTANT:** When using the `repo` option to call across repos, you **must** provide the token. In order to do so, create a PAT token with repo rights, and pass it here via a secret, e.g. `${{ secrets.MY_TOKEN }}`. 50 | 51 | This option is also left for backwards compatibility with older versions where this field was mandatory. 52 | 53 | ## Action Outputs 54 | 55 | This Action emits a single output named `workflowId`. 56 | 57 | ## Example usage 58 | 59 | ```yaml 60 | - name: Invoke workflow without inputs 61 | uses: benc-uk/workflow-dispatch@v1 62 | with: 63 | workflow: My Workflow 64 | ``` 65 | 66 | ```yaml 67 | - name: Invoke workflow with inputs 68 | uses: benc-uk/workflow-dispatch@v1 69 | with: 70 | workflow: Another Workflow 71 | inputs: '{ "message": "blah blah", "something": true }' 72 | ``` 73 | 74 | ```yaml 75 | - name: Invoke workflow in another repo with inputs 76 | uses: benc-uk/workflow-dispatch@v1 77 | with: 78 | workflow: my-workflow.yaml 79 | repo: benc-uk/example 80 | inputs: '{ "message": "blah blah", "something": false }' 81 | # Required when using the `repo` option. Either a PAT or a token generated from the GitHub app or CLI 82 | token: "${{ secrets.MY_TOKEN }}" 83 | ``` 84 | -------------------------------------------------------------------------------- /action.yaml: -------------------------------------------------------------------------------- 1 | name: "Workflow Dispatch" 2 | description: "Trigger and chain GitHub Actions workflows with workflow_dispatch events" 3 | 4 | inputs: 5 | workflow: 6 | description: "Name, filename or ID of workflow to run" 7 | required: true 8 | token: 9 | description: "GitHub token with repo write access, only required if the workflow is in a different repository" 10 | required: false 11 | default: ${{ github.token }} 12 | inputs: 13 | description: "Inputs to pass to the workflow, must be a JSON string" 14 | required: false 15 | ref: 16 | description: "The reference can be a branch, tag, or a commit SHA" 17 | required: false 18 | repo: 19 | description: "Repo owner & name, slash separated, only set if invoking a workflow in a different repo" 20 | required: false 21 | 22 | runs: 23 | using: "node20" 24 | main: "dist/index.js" 25 | 26 | branding: 27 | color: purple 28 | icon: send 29 | -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | 3 | import eslint from '@eslint/js' 4 | import tseslint from 'typescript-eslint' 5 | 6 | export default tseslint.config(eslint.configs.recommended, ...tseslint.configs.recommended, ...tseslint.configs.strict) 7 | -------------------------------------------------------------------------------- /etc/test.http: -------------------------------------------------------------------------------- 1 | POST https://api.github.com/repos/benc-uk/workflow-dispatch/actions/workflows/1854248/dispatches 2 | Authorization: Basic benc-uk:{{$dotenv GITHUB_PAT}} 3 | Content-Type: application/json 4 | 5 | { 6 | "ref": "refs/heads/master" 7 | } 8 | 9 | ### 10 | 11 | GET https://api.github.com/repos/benc-uk/workflow-dispatch/actions/workflows 12 | Authorization: Basic benc-uk:{{$dotenv GITHUB_PAT}} 13 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "workflow-dispatch", 3 | "version": "1.2.4", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "workflow-dispatch", 9 | "version": "1.2.4", 10 | "license": "MIT", 11 | "devDependencies": { 12 | "@actions/core": "^1.10.1", 13 | "@actions/github": "^6.0.0", 14 | "@vercel/ncc": "^0.38.1", 15 | "eslint": "^9.8.0", 16 | "prettier": "^3.3.3", 17 | "typescript": "^5.5.4", 18 | "typescript-eslint": "^8.0.0" 19 | } 20 | }, 21 | "node_modules/@actions/core": { 22 | "version": "1.10.1", 23 | "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.1.tgz", 24 | "integrity": "sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==", 25 | "dev": true, 26 | "dependencies": { 27 | "@actions/http-client": "^2.0.1", 28 | "uuid": "^8.3.2" 29 | } 30 | }, 31 | "node_modules/@actions/github": { 32 | "version": "6.0.0", 33 | "resolved": "https://registry.npmjs.org/@actions/github/-/github-6.0.0.tgz", 34 | "integrity": "sha512-alScpSVnYmjNEXboZjarjukQEzgCRmjMv6Xj47fsdnqGS73bjJNDpiiXmp8jr0UZLdUB6d9jW63IcmddUP+l0g==", 35 | "dev": true, 36 | "dependencies": { 37 | "@actions/http-client": "^2.2.0", 38 | "@octokit/core": "^5.0.1", 39 | "@octokit/plugin-paginate-rest": "^9.0.0", 40 | "@octokit/plugin-rest-endpoint-methods": "^10.0.0" 41 | } 42 | }, 43 | "node_modules/@actions/http-client": { 44 | "version": "2.2.1", 45 | "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.1.tgz", 46 | "integrity": "sha512-KhC/cZsq7f8I4LfZSJKgCvEwfkE8o1538VoBeoGzokVLLnbFDEAdFD3UhoMklxo2un9NJVBdANOresx7vTHlHw==", 47 | "dev": true, 48 | "dependencies": { 49 | "tunnel": "^0.0.6", 50 | "undici": "^5.25.4" 51 | } 52 | }, 53 | "node_modules/@eslint-community/eslint-utils": { 54 | "version": "4.4.0", 55 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", 56 | "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", 57 | "dev": true, 58 | "dependencies": { 59 | "eslint-visitor-keys": "^3.3.0" 60 | }, 61 | "engines": { 62 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 63 | }, 64 | "peerDependencies": { 65 | "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 66 | } 67 | }, 68 | "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { 69 | "version": "3.4.3", 70 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 71 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 72 | "dev": true, 73 | "engines": { 74 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 75 | }, 76 | "funding": { 77 | "url": "https://opencollective.com/eslint" 78 | } 79 | }, 80 | "node_modules/@eslint-community/regexpp": { 81 | "version": "4.11.0", 82 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", 83 | "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", 84 | "dev": true, 85 | "engines": { 86 | "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 87 | } 88 | }, 89 | "node_modules/@eslint/config-array": { 90 | "version": "0.17.1", 91 | "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.17.1.tgz", 92 | "integrity": "sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==", 93 | "dev": true, 94 | "dependencies": { 95 | "@eslint/object-schema": "^2.1.4", 96 | "debug": "^4.3.1", 97 | "minimatch": "^3.1.2" 98 | }, 99 | "engines": { 100 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 101 | } 102 | }, 103 | "node_modules/@eslint/eslintrc": { 104 | "version": "3.1.0", 105 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", 106 | "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", 107 | "dev": true, 108 | "dependencies": { 109 | "ajv": "^6.12.4", 110 | "debug": "^4.3.2", 111 | "espree": "^10.0.1", 112 | "globals": "^14.0.0", 113 | "ignore": "^5.2.0", 114 | "import-fresh": "^3.2.1", 115 | "js-yaml": "^4.1.0", 116 | "minimatch": "^3.1.2", 117 | "strip-json-comments": "^3.1.1" 118 | }, 119 | "engines": { 120 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 121 | }, 122 | "funding": { 123 | "url": "https://opencollective.com/eslint" 124 | } 125 | }, 126 | "node_modules/@eslint/js": { 127 | "version": "9.8.0", 128 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.8.0.tgz", 129 | "integrity": "sha512-MfluB7EUfxXtv3i/++oh89uzAr4PDI4nn201hsp+qaXqsjAWzinlZEHEfPgAX4doIlKvPG/i0A9dpKxOLII8yA==", 130 | "dev": true, 131 | "engines": { 132 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 133 | } 134 | }, 135 | "node_modules/@eslint/object-schema": { 136 | "version": "2.1.4", 137 | "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", 138 | "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", 139 | "dev": true, 140 | "engines": { 141 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 142 | } 143 | }, 144 | "node_modules/@fastify/busboy": { 145 | "version": "2.1.1", 146 | "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", 147 | "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", 148 | "dev": true, 149 | "engines": { 150 | "node": ">=14" 151 | } 152 | }, 153 | "node_modules/@humanwhocodes/module-importer": { 154 | "version": "1.0.1", 155 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 156 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 157 | "dev": true, 158 | "engines": { 159 | "node": ">=12.22" 160 | }, 161 | "funding": { 162 | "type": "github", 163 | "url": "https://github.com/sponsors/nzakas" 164 | } 165 | }, 166 | "node_modules/@humanwhocodes/retry": { 167 | "version": "0.3.0", 168 | "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", 169 | "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", 170 | "dev": true, 171 | "engines": { 172 | "node": ">=18.18" 173 | }, 174 | "funding": { 175 | "type": "github", 176 | "url": "https://github.com/sponsors/nzakas" 177 | } 178 | }, 179 | "node_modules/@nodelib/fs.scandir": { 180 | "version": "2.1.5", 181 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 182 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 183 | "dev": true, 184 | "dependencies": { 185 | "@nodelib/fs.stat": "2.0.5", 186 | "run-parallel": "^1.1.9" 187 | }, 188 | "engines": { 189 | "node": ">= 8" 190 | } 191 | }, 192 | "node_modules/@nodelib/fs.stat": { 193 | "version": "2.0.5", 194 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 195 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 196 | "dev": true, 197 | "engines": { 198 | "node": ">= 8" 199 | } 200 | }, 201 | "node_modules/@nodelib/fs.walk": { 202 | "version": "1.2.8", 203 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 204 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 205 | "dev": true, 206 | "dependencies": { 207 | "@nodelib/fs.scandir": "2.1.5", 208 | "fastq": "^1.6.0" 209 | }, 210 | "engines": { 211 | "node": ">= 8" 212 | } 213 | }, 214 | "node_modules/@octokit/auth-token": { 215 | "version": "4.0.0", 216 | "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", 217 | "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", 218 | "dev": true, 219 | "engines": { 220 | "node": ">= 18" 221 | } 222 | }, 223 | "node_modules/@octokit/core": { 224 | "version": "5.2.0", 225 | "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.0.tgz", 226 | "integrity": "sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==", 227 | "dev": true, 228 | "dependencies": { 229 | "@octokit/auth-token": "^4.0.0", 230 | "@octokit/graphql": "^7.1.0", 231 | "@octokit/request": "^8.3.1", 232 | "@octokit/request-error": "^5.1.0", 233 | "@octokit/types": "^13.0.0", 234 | "before-after-hook": "^2.2.0", 235 | "universal-user-agent": "^6.0.0" 236 | }, 237 | "engines": { 238 | "node": ">= 18" 239 | } 240 | }, 241 | "node_modules/@octokit/endpoint": { 242 | "version": "9.0.5", 243 | "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.5.tgz", 244 | "integrity": "sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==", 245 | "dev": true, 246 | "dependencies": { 247 | "@octokit/types": "^13.1.0", 248 | "universal-user-agent": "^6.0.0" 249 | }, 250 | "engines": { 251 | "node": ">= 18" 252 | } 253 | }, 254 | "node_modules/@octokit/graphql": { 255 | "version": "7.1.0", 256 | "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.0.tgz", 257 | "integrity": "sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==", 258 | "dev": true, 259 | "dependencies": { 260 | "@octokit/request": "^8.3.0", 261 | "@octokit/types": "^13.0.0", 262 | "universal-user-agent": "^6.0.0" 263 | }, 264 | "engines": { 265 | "node": ">= 18" 266 | } 267 | }, 268 | "node_modules/@octokit/openapi-types": { 269 | "version": "22.2.0", 270 | "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", 271 | "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==", 272 | "dev": true 273 | }, 274 | "node_modules/@octokit/plugin-paginate-rest": { 275 | "version": "9.2.1", 276 | "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.1.tgz", 277 | "integrity": "sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw==", 278 | "dev": true, 279 | "dependencies": { 280 | "@octokit/types": "^12.6.0" 281 | }, 282 | "engines": { 283 | "node": ">= 18" 284 | }, 285 | "peerDependencies": { 286 | "@octokit/core": "5" 287 | } 288 | }, 289 | "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": { 290 | "version": "20.0.0", 291 | "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", 292 | "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", 293 | "dev": true 294 | }, 295 | "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { 296 | "version": "12.6.0", 297 | "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", 298 | "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", 299 | "dev": true, 300 | "dependencies": { 301 | "@octokit/openapi-types": "^20.0.0" 302 | } 303 | }, 304 | "node_modules/@octokit/plugin-rest-endpoint-methods": { 305 | "version": "10.4.1", 306 | "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.4.1.tgz", 307 | "integrity": "sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==", 308 | "dev": true, 309 | "dependencies": { 310 | "@octokit/types": "^12.6.0" 311 | }, 312 | "engines": { 313 | "node": ">= 18" 314 | }, 315 | "peerDependencies": { 316 | "@octokit/core": "5" 317 | } 318 | }, 319 | "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": { 320 | "version": "20.0.0", 321 | "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", 322 | "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", 323 | "dev": true 324 | }, 325 | "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { 326 | "version": "12.6.0", 327 | "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", 328 | "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", 329 | "dev": true, 330 | "dependencies": { 331 | "@octokit/openapi-types": "^20.0.0" 332 | } 333 | }, 334 | "node_modules/@octokit/request": { 335 | "version": "8.4.0", 336 | "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.0.tgz", 337 | "integrity": "sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==", 338 | "dev": true, 339 | "dependencies": { 340 | "@octokit/endpoint": "^9.0.1", 341 | "@octokit/request-error": "^5.1.0", 342 | "@octokit/types": "^13.1.0", 343 | "universal-user-agent": "^6.0.0" 344 | }, 345 | "engines": { 346 | "node": ">= 18" 347 | } 348 | }, 349 | "node_modules/@octokit/request-error": { 350 | "version": "5.1.0", 351 | "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.0.tgz", 352 | "integrity": "sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==", 353 | "dev": true, 354 | "dependencies": { 355 | "@octokit/types": "^13.1.0", 356 | "deprecation": "^2.0.0", 357 | "once": "^1.4.0" 358 | }, 359 | "engines": { 360 | "node": ">= 18" 361 | } 362 | }, 363 | "node_modules/@octokit/types": { 364 | "version": "13.5.0", 365 | "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz", 366 | "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==", 367 | "dev": true, 368 | "dependencies": { 369 | "@octokit/openapi-types": "^22.2.0" 370 | } 371 | }, 372 | "node_modules/@typescript-eslint/eslint-plugin": { 373 | "version": "8.0.0", 374 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.0.0.tgz", 375 | "integrity": "sha512-STIZdwEQRXAHvNUS6ILDf5z3u95Gc8jzywunxSNqX00OooIemaaNIA0vEgynJlycL5AjabYLLrIyHd4iazyvtg==", 376 | "dev": true, 377 | "dependencies": { 378 | "@eslint-community/regexpp": "^4.10.0", 379 | "@typescript-eslint/scope-manager": "8.0.0", 380 | "@typescript-eslint/type-utils": "8.0.0", 381 | "@typescript-eslint/utils": "8.0.0", 382 | "@typescript-eslint/visitor-keys": "8.0.0", 383 | "graphemer": "^1.4.0", 384 | "ignore": "^5.3.1", 385 | "natural-compare": "^1.4.0", 386 | "ts-api-utils": "^1.3.0" 387 | }, 388 | "engines": { 389 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 390 | }, 391 | "funding": { 392 | "type": "opencollective", 393 | "url": "https://opencollective.com/typescript-eslint" 394 | }, 395 | "peerDependencies": { 396 | "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", 397 | "eslint": "^8.57.0 || ^9.0.0" 398 | }, 399 | "peerDependenciesMeta": { 400 | "typescript": { 401 | "optional": true 402 | } 403 | } 404 | }, 405 | "node_modules/@typescript-eslint/parser": { 406 | "version": "8.0.0", 407 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.0.0.tgz", 408 | "integrity": "sha512-pS1hdZ+vnrpDIxuFXYQpLTILglTjSYJ9MbetZctrUawogUsPdz31DIIRZ9+rab0LhYNTsk88w4fIzVheiTbWOQ==", 409 | "dev": true, 410 | "dependencies": { 411 | "@typescript-eslint/scope-manager": "8.0.0", 412 | "@typescript-eslint/types": "8.0.0", 413 | "@typescript-eslint/typescript-estree": "8.0.0", 414 | "@typescript-eslint/visitor-keys": "8.0.0", 415 | "debug": "^4.3.4" 416 | }, 417 | "engines": { 418 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 419 | }, 420 | "funding": { 421 | "type": "opencollective", 422 | "url": "https://opencollective.com/typescript-eslint" 423 | }, 424 | "peerDependencies": { 425 | "eslint": "^8.57.0 || ^9.0.0" 426 | }, 427 | "peerDependenciesMeta": { 428 | "typescript": { 429 | "optional": true 430 | } 431 | } 432 | }, 433 | "node_modules/@typescript-eslint/scope-manager": { 434 | "version": "8.0.0", 435 | "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.0.0.tgz", 436 | "integrity": "sha512-V0aa9Csx/ZWWv2IPgTfY7T4agYwJyILESu/PVqFtTFz9RIS823mAze+NbnBI8xiwdX3iqeQbcTYlvB04G9wyQw==", 437 | "dev": true, 438 | "dependencies": { 439 | "@typescript-eslint/types": "8.0.0", 440 | "@typescript-eslint/visitor-keys": "8.0.0" 441 | }, 442 | "engines": { 443 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 444 | }, 445 | "funding": { 446 | "type": "opencollective", 447 | "url": "https://opencollective.com/typescript-eslint" 448 | } 449 | }, 450 | "node_modules/@typescript-eslint/type-utils": { 451 | "version": "8.0.0", 452 | "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.0.0.tgz", 453 | "integrity": "sha512-mJAFP2mZLTBwAn5WI4PMakpywfWFH5nQZezUQdSKV23Pqo6o9iShQg1hP2+0hJJXP2LnZkWPphdIq4juYYwCeg==", 454 | "dev": true, 455 | "dependencies": { 456 | "@typescript-eslint/typescript-estree": "8.0.0", 457 | "@typescript-eslint/utils": "8.0.0", 458 | "debug": "^4.3.4", 459 | "ts-api-utils": "^1.3.0" 460 | }, 461 | "engines": { 462 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 463 | }, 464 | "funding": { 465 | "type": "opencollective", 466 | "url": "https://opencollective.com/typescript-eslint" 467 | }, 468 | "peerDependenciesMeta": { 469 | "typescript": { 470 | "optional": true 471 | } 472 | } 473 | }, 474 | "node_modules/@typescript-eslint/types": { 475 | "version": "8.0.0", 476 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.0.0.tgz", 477 | "integrity": "sha512-wgdSGs9BTMWQ7ooeHtu5quddKKs5Z5dS+fHLbrQI+ID0XWJLODGMHRfhwImiHoeO2S5Wir2yXuadJN6/l4JRxw==", 478 | "dev": true, 479 | "engines": { 480 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 481 | }, 482 | "funding": { 483 | "type": "opencollective", 484 | "url": "https://opencollective.com/typescript-eslint" 485 | } 486 | }, 487 | "node_modules/@typescript-eslint/typescript-estree": { 488 | "version": "8.0.0", 489 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.0.tgz", 490 | "integrity": "sha512-5b97WpKMX+Y43YKi4zVcCVLtK5F98dFls3Oxui8LbnmRsseKenbbDinmvxrWegKDMmlkIq/XHuyy0UGLtpCDKg==", 491 | "dev": true, 492 | "dependencies": { 493 | "@typescript-eslint/types": "8.0.0", 494 | "@typescript-eslint/visitor-keys": "8.0.0", 495 | "debug": "^4.3.4", 496 | "globby": "^11.1.0", 497 | "is-glob": "^4.0.3", 498 | "minimatch": "^9.0.4", 499 | "semver": "^7.6.0", 500 | "ts-api-utils": "^1.3.0" 501 | }, 502 | "engines": { 503 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 504 | }, 505 | "funding": { 506 | "type": "opencollective", 507 | "url": "https://opencollective.com/typescript-eslint" 508 | }, 509 | "peerDependenciesMeta": { 510 | "typescript": { 511 | "optional": true 512 | } 513 | } 514 | }, 515 | "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { 516 | "version": "2.0.1", 517 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 518 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 519 | "dev": true, 520 | "dependencies": { 521 | "balanced-match": "^1.0.0" 522 | } 523 | }, 524 | "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { 525 | "version": "9.0.5", 526 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 527 | "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 528 | "dev": true, 529 | "dependencies": { 530 | "brace-expansion": "^2.0.1" 531 | }, 532 | "engines": { 533 | "node": ">=16 || 14 >=14.17" 534 | }, 535 | "funding": { 536 | "url": "https://github.com/sponsors/isaacs" 537 | } 538 | }, 539 | "node_modules/@typescript-eslint/utils": { 540 | "version": "8.0.0", 541 | "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.0.0.tgz", 542 | "integrity": "sha512-k/oS/A/3QeGLRvOWCg6/9rATJL5rec7/5s1YmdS0ZU6LHveJyGFwBvLhSRBv6i9xaj7etmosp+l+ViN1I9Aj/Q==", 543 | "dev": true, 544 | "dependencies": { 545 | "@eslint-community/eslint-utils": "^4.4.0", 546 | "@typescript-eslint/scope-manager": "8.0.0", 547 | "@typescript-eslint/types": "8.0.0", 548 | "@typescript-eslint/typescript-estree": "8.0.0" 549 | }, 550 | "engines": { 551 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 552 | }, 553 | "funding": { 554 | "type": "opencollective", 555 | "url": "https://opencollective.com/typescript-eslint" 556 | }, 557 | "peerDependencies": { 558 | "eslint": "^8.57.0 || ^9.0.0" 559 | } 560 | }, 561 | "node_modules/@typescript-eslint/visitor-keys": { 562 | "version": "8.0.0", 563 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.0.tgz", 564 | "integrity": "sha512-oN0K4nkHuOyF3PVMyETbpP5zp6wfyOvm7tWhTMfoqxSSsPmJIh6JNASuZDlODE8eE+0EB9uar+6+vxr9DBTYOA==", 565 | "dev": true, 566 | "dependencies": { 567 | "@typescript-eslint/types": "8.0.0", 568 | "eslint-visitor-keys": "^3.4.3" 569 | }, 570 | "engines": { 571 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 572 | }, 573 | "funding": { 574 | "type": "opencollective", 575 | "url": "https://opencollective.com/typescript-eslint" 576 | } 577 | }, 578 | "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { 579 | "version": "3.4.3", 580 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 581 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 582 | "dev": true, 583 | "engines": { 584 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 585 | }, 586 | "funding": { 587 | "url": "https://opencollective.com/eslint" 588 | } 589 | }, 590 | "node_modules/@vercel/ncc": { 591 | "version": "0.38.1", 592 | "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.38.1.tgz", 593 | "integrity": "sha512-IBBb+iI2NLu4VQn3Vwldyi2QwaXt5+hTyh58ggAMoCGE6DJmPvwL3KPBWcJl1m9LYPChBLE980Jw+CS4Wokqxw==", 594 | "dev": true, 595 | "bin": { 596 | "ncc": "dist/ncc/cli.js" 597 | } 598 | }, 599 | "node_modules/acorn": { 600 | "version": "8.12.1", 601 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", 602 | "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", 603 | "dev": true, 604 | "bin": { 605 | "acorn": "bin/acorn" 606 | }, 607 | "engines": { 608 | "node": ">=0.4.0" 609 | } 610 | }, 611 | "node_modules/acorn-jsx": { 612 | "version": "5.3.2", 613 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 614 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 615 | "dev": true, 616 | "peerDependencies": { 617 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 618 | } 619 | }, 620 | "node_modules/ajv": { 621 | "version": "6.12.6", 622 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 623 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 624 | "dev": true, 625 | "dependencies": { 626 | "fast-deep-equal": "^3.1.1", 627 | "fast-json-stable-stringify": "^2.0.0", 628 | "json-schema-traverse": "^0.4.1", 629 | "uri-js": "^4.2.2" 630 | }, 631 | "funding": { 632 | "type": "github", 633 | "url": "https://github.com/sponsors/epoberezkin" 634 | } 635 | }, 636 | "node_modules/ansi-regex": { 637 | "version": "5.0.1", 638 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 639 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 640 | "dev": true, 641 | "engines": { 642 | "node": ">=8" 643 | } 644 | }, 645 | "node_modules/ansi-styles": { 646 | "version": "4.3.0", 647 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 648 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 649 | "dev": true, 650 | "dependencies": { 651 | "color-convert": "^2.0.1" 652 | }, 653 | "engines": { 654 | "node": ">=8" 655 | }, 656 | "funding": { 657 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 658 | } 659 | }, 660 | "node_modules/argparse": { 661 | "version": "2.0.1", 662 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 663 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 664 | "dev": true 665 | }, 666 | "node_modules/array-union": { 667 | "version": "2.1.0", 668 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 669 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 670 | "dev": true, 671 | "engines": { 672 | "node": ">=8" 673 | } 674 | }, 675 | "node_modules/balanced-match": { 676 | "version": "1.0.2", 677 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 678 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 679 | "dev": true 680 | }, 681 | "node_modules/before-after-hook": { 682 | "version": "2.2.3", 683 | "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", 684 | "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", 685 | "dev": true 686 | }, 687 | "node_modules/brace-expansion": { 688 | "version": "1.1.11", 689 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 690 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 691 | "dev": true, 692 | "dependencies": { 693 | "balanced-match": "^1.0.0", 694 | "concat-map": "0.0.1" 695 | } 696 | }, 697 | "node_modules/braces": { 698 | "version": "3.0.3", 699 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 700 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 701 | "dev": true, 702 | "dependencies": { 703 | "fill-range": "^7.1.1" 704 | }, 705 | "engines": { 706 | "node": ">=8" 707 | } 708 | }, 709 | "node_modules/callsites": { 710 | "version": "3.1.0", 711 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 712 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 713 | "dev": true, 714 | "engines": { 715 | "node": ">=6" 716 | } 717 | }, 718 | "node_modules/chalk": { 719 | "version": "4.1.2", 720 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 721 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 722 | "dev": true, 723 | "dependencies": { 724 | "ansi-styles": "^4.1.0", 725 | "supports-color": "^7.1.0" 726 | }, 727 | "engines": { 728 | "node": ">=10" 729 | }, 730 | "funding": { 731 | "url": "https://github.com/chalk/chalk?sponsor=1" 732 | } 733 | }, 734 | "node_modules/color-convert": { 735 | "version": "2.0.1", 736 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 737 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 738 | "dev": true, 739 | "dependencies": { 740 | "color-name": "~1.1.4" 741 | }, 742 | "engines": { 743 | "node": ">=7.0.0" 744 | } 745 | }, 746 | "node_modules/color-name": { 747 | "version": "1.1.4", 748 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 749 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 750 | "dev": true 751 | }, 752 | "node_modules/concat-map": { 753 | "version": "0.0.1", 754 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 755 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 756 | "dev": true 757 | }, 758 | "node_modules/cross-spawn": { 759 | "version": "7.0.3", 760 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 761 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 762 | "dev": true, 763 | "dependencies": { 764 | "path-key": "^3.1.0", 765 | "shebang-command": "^2.0.0", 766 | "which": "^2.0.1" 767 | }, 768 | "engines": { 769 | "node": ">= 8" 770 | } 771 | }, 772 | "node_modules/debug": { 773 | "version": "4.3.6", 774 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", 775 | "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", 776 | "dev": true, 777 | "dependencies": { 778 | "ms": "2.1.2" 779 | }, 780 | "engines": { 781 | "node": ">=6.0" 782 | }, 783 | "peerDependenciesMeta": { 784 | "supports-color": { 785 | "optional": true 786 | } 787 | } 788 | }, 789 | "node_modules/deep-is": { 790 | "version": "0.1.4", 791 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 792 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 793 | "dev": true 794 | }, 795 | "node_modules/deprecation": { 796 | "version": "2.3.1", 797 | "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", 798 | "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", 799 | "dev": true 800 | }, 801 | "node_modules/dir-glob": { 802 | "version": "3.0.1", 803 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 804 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 805 | "dev": true, 806 | "dependencies": { 807 | "path-type": "^4.0.0" 808 | }, 809 | "engines": { 810 | "node": ">=8" 811 | } 812 | }, 813 | "node_modules/escape-string-regexp": { 814 | "version": "4.0.0", 815 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 816 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 817 | "dev": true, 818 | "engines": { 819 | "node": ">=10" 820 | }, 821 | "funding": { 822 | "url": "https://github.com/sponsors/sindresorhus" 823 | } 824 | }, 825 | "node_modules/eslint": { 826 | "version": "9.8.0", 827 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.8.0.tgz", 828 | "integrity": "sha512-K8qnZ/QJzT2dLKdZJVX6W4XOwBzutMYmt0lqUS+JdXgd+HTYFlonFgkJ8s44d/zMPPCnOOk0kMWCApCPhiOy9A==", 829 | "dev": true, 830 | "dependencies": { 831 | "@eslint-community/eslint-utils": "^4.2.0", 832 | "@eslint-community/regexpp": "^4.11.0", 833 | "@eslint/config-array": "^0.17.1", 834 | "@eslint/eslintrc": "^3.1.0", 835 | "@eslint/js": "9.8.0", 836 | "@humanwhocodes/module-importer": "^1.0.1", 837 | "@humanwhocodes/retry": "^0.3.0", 838 | "@nodelib/fs.walk": "^1.2.8", 839 | "ajv": "^6.12.4", 840 | "chalk": "^4.0.0", 841 | "cross-spawn": "^7.0.2", 842 | "debug": "^4.3.2", 843 | "escape-string-regexp": "^4.0.0", 844 | "eslint-scope": "^8.0.2", 845 | "eslint-visitor-keys": "^4.0.0", 846 | "espree": "^10.1.0", 847 | "esquery": "^1.5.0", 848 | "esutils": "^2.0.2", 849 | "fast-deep-equal": "^3.1.3", 850 | "file-entry-cache": "^8.0.0", 851 | "find-up": "^5.0.0", 852 | "glob-parent": "^6.0.2", 853 | "ignore": "^5.2.0", 854 | "imurmurhash": "^0.1.4", 855 | "is-glob": "^4.0.0", 856 | "is-path-inside": "^3.0.3", 857 | "json-stable-stringify-without-jsonify": "^1.0.1", 858 | "levn": "^0.4.1", 859 | "lodash.merge": "^4.6.2", 860 | "minimatch": "^3.1.2", 861 | "natural-compare": "^1.4.0", 862 | "optionator": "^0.9.3", 863 | "strip-ansi": "^6.0.1", 864 | "text-table": "^0.2.0" 865 | }, 866 | "bin": { 867 | "eslint": "bin/eslint.js" 868 | }, 869 | "engines": { 870 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 871 | }, 872 | "funding": { 873 | "url": "https://eslint.org/donate" 874 | } 875 | }, 876 | "node_modules/eslint-scope": { 877 | "version": "8.0.2", 878 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", 879 | "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", 880 | "dev": true, 881 | "dependencies": { 882 | "esrecurse": "^4.3.0", 883 | "estraverse": "^5.2.0" 884 | }, 885 | "engines": { 886 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 887 | }, 888 | "funding": { 889 | "url": "https://opencollective.com/eslint" 890 | } 891 | }, 892 | "node_modules/eslint-visitor-keys": { 893 | "version": "4.0.0", 894 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", 895 | "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", 896 | "dev": true, 897 | "engines": { 898 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 899 | }, 900 | "funding": { 901 | "url": "https://opencollective.com/eslint" 902 | } 903 | }, 904 | "node_modules/espree": { 905 | "version": "10.1.0", 906 | "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", 907 | "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", 908 | "dev": true, 909 | "dependencies": { 910 | "acorn": "^8.12.0", 911 | "acorn-jsx": "^5.3.2", 912 | "eslint-visitor-keys": "^4.0.0" 913 | }, 914 | "engines": { 915 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 916 | }, 917 | "funding": { 918 | "url": "https://opencollective.com/eslint" 919 | } 920 | }, 921 | "node_modules/esquery": { 922 | "version": "1.6.0", 923 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", 924 | "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", 925 | "dev": true, 926 | "dependencies": { 927 | "estraverse": "^5.1.0" 928 | }, 929 | "engines": { 930 | "node": ">=0.10" 931 | } 932 | }, 933 | "node_modules/esrecurse": { 934 | "version": "4.3.0", 935 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 936 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 937 | "dev": true, 938 | "dependencies": { 939 | "estraverse": "^5.2.0" 940 | }, 941 | "engines": { 942 | "node": ">=4.0" 943 | } 944 | }, 945 | "node_modules/estraverse": { 946 | "version": "5.3.0", 947 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 948 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 949 | "dev": true, 950 | "engines": { 951 | "node": ">=4.0" 952 | } 953 | }, 954 | "node_modules/esutils": { 955 | "version": "2.0.3", 956 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 957 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 958 | "dev": true, 959 | "engines": { 960 | "node": ">=0.10.0" 961 | } 962 | }, 963 | "node_modules/fast-deep-equal": { 964 | "version": "3.1.3", 965 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 966 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 967 | "dev": true 968 | }, 969 | "node_modules/fast-glob": { 970 | "version": "3.3.2", 971 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", 972 | "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", 973 | "dev": true, 974 | "dependencies": { 975 | "@nodelib/fs.stat": "^2.0.2", 976 | "@nodelib/fs.walk": "^1.2.3", 977 | "glob-parent": "^5.1.2", 978 | "merge2": "^1.3.0", 979 | "micromatch": "^4.0.4" 980 | }, 981 | "engines": { 982 | "node": ">=8.6.0" 983 | } 984 | }, 985 | "node_modules/fast-glob/node_modules/glob-parent": { 986 | "version": "5.1.2", 987 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 988 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 989 | "dev": true, 990 | "dependencies": { 991 | "is-glob": "^4.0.1" 992 | }, 993 | "engines": { 994 | "node": ">= 6" 995 | } 996 | }, 997 | "node_modules/fast-json-stable-stringify": { 998 | "version": "2.1.0", 999 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1000 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1001 | "dev": true 1002 | }, 1003 | "node_modules/fast-levenshtein": { 1004 | "version": "2.0.6", 1005 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1006 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 1007 | "dev": true 1008 | }, 1009 | "node_modules/fastq": { 1010 | "version": "1.17.1", 1011 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", 1012 | "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", 1013 | "dev": true, 1014 | "dependencies": { 1015 | "reusify": "^1.0.4" 1016 | } 1017 | }, 1018 | "node_modules/file-entry-cache": { 1019 | "version": "8.0.0", 1020 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", 1021 | "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", 1022 | "dev": true, 1023 | "dependencies": { 1024 | "flat-cache": "^4.0.0" 1025 | }, 1026 | "engines": { 1027 | "node": ">=16.0.0" 1028 | } 1029 | }, 1030 | "node_modules/fill-range": { 1031 | "version": "7.1.1", 1032 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 1033 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 1034 | "dev": true, 1035 | "dependencies": { 1036 | "to-regex-range": "^5.0.1" 1037 | }, 1038 | "engines": { 1039 | "node": ">=8" 1040 | } 1041 | }, 1042 | "node_modules/find-up": { 1043 | "version": "5.0.0", 1044 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 1045 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 1046 | "dev": true, 1047 | "dependencies": { 1048 | "locate-path": "^6.0.0", 1049 | "path-exists": "^4.0.0" 1050 | }, 1051 | "engines": { 1052 | "node": ">=10" 1053 | }, 1054 | "funding": { 1055 | "url": "https://github.com/sponsors/sindresorhus" 1056 | } 1057 | }, 1058 | "node_modules/flat-cache": { 1059 | "version": "4.0.1", 1060 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", 1061 | "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", 1062 | "dev": true, 1063 | "dependencies": { 1064 | "flatted": "^3.2.9", 1065 | "keyv": "^4.5.4" 1066 | }, 1067 | "engines": { 1068 | "node": ">=16" 1069 | } 1070 | }, 1071 | "node_modules/flatted": { 1072 | "version": "3.3.1", 1073 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", 1074 | "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", 1075 | "dev": true 1076 | }, 1077 | "node_modules/glob-parent": { 1078 | "version": "6.0.2", 1079 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1080 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1081 | "dev": true, 1082 | "dependencies": { 1083 | "is-glob": "^4.0.3" 1084 | }, 1085 | "engines": { 1086 | "node": ">=10.13.0" 1087 | } 1088 | }, 1089 | "node_modules/globals": { 1090 | "version": "14.0.0", 1091 | "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", 1092 | "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", 1093 | "dev": true, 1094 | "engines": { 1095 | "node": ">=18" 1096 | }, 1097 | "funding": { 1098 | "url": "https://github.com/sponsors/sindresorhus" 1099 | } 1100 | }, 1101 | "node_modules/globby": { 1102 | "version": "11.1.0", 1103 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", 1104 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", 1105 | "dev": true, 1106 | "dependencies": { 1107 | "array-union": "^2.1.0", 1108 | "dir-glob": "^3.0.1", 1109 | "fast-glob": "^3.2.9", 1110 | "ignore": "^5.2.0", 1111 | "merge2": "^1.4.1", 1112 | "slash": "^3.0.0" 1113 | }, 1114 | "engines": { 1115 | "node": ">=10" 1116 | }, 1117 | "funding": { 1118 | "url": "https://github.com/sponsors/sindresorhus" 1119 | } 1120 | }, 1121 | "node_modules/graphemer": { 1122 | "version": "1.4.0", 1123 | "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 1124 | "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 1125 | "dev": true 1126 | }, 1127 | "node_modules/has-flag": { 1128 | "version": "4.0.0", 1129 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1130 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1131 | "dev": true, 1132 | "engines": { 1133 | "node": ">=8" 1134 | } 1135 | }, 1136 | "node_modules/ignore": { 1137 | "version": "5.3.1", 1138 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", 1139 | "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", 1140 | "dev": true, 1141 | "engines": { 1142 | "node": ">= 4" 1143 | } 1144 | }, 1145 | "node_modules/import-fresh": { 1146 | "version": "3.3.0", 1147 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 1148 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 1149 | "dev": true, 1150 | "dependencies": { 1151 | "parent-module": "^1.0.0", 1152 | "resolve-from": "^4.0.0" 1153 | }, 1154 | "engines": { 1155 | "node": ">=6" 1156 | }, 1157 | "funding": { 1158 | "url": "https://github.com/sponsors/sindresorhus" 1159 | } 1160 | }, 1161 | "node_modules/imurmurhash": { 1162 | "version": "0.1.4", 1163 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1164 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 1165 | "dev": true, 1166 | "engines": { 1167 | "node": ">=0.8.19" 1168 | } 1169 | }, 1170 | "node_modules/is-extglob": { 1171 | "version": "2.1.1", 1172 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1173 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1174 | "dev": true, 1175 | "engines": { 1176 | "node": ">=0.10.0" 1177 | } 1178 | }, 1179 | "node_modules/is-glob": { 1180 | "version": "4.0.3", 1181 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1182 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1183 | "dev": true, 1184 | "dependencies": { 1185 | "is-extglob": "^2.1.1" 1186 | }, 1187 | "engines": { 1188 | "node": ">=0.10.0" 1189 | } 1190 | }, 1191 | "node_modules/is-number": { 1192 | "version": "7.0.0", 1193 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1194 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1195 | "dev": true, 1196 | "engines": { 1197 | "node": ">=0.12.0" 1198 | } 1199 | }, 1200 | "node_modules/is-path-inside": { 1201 | "version": "3.0.3", 1202 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 1203 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 1204 | "dev": true, 1205 | "engines": { 1206 | "node": ">=8" 1207 | } 1208 | }, 1209 | "node_modules/isexe": { 1210 | "version": "2.0.0", 1211 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1212 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1213 | "dev": true 1214 | }, 1215 | "node_modules/js-yaml": { 1216 | "version": "4.1.0", 1217 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 1218 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 1219 | "dev": true, 1220 | "dependencies": { 1221 | "argparse": "^2.0.1" 1222 | }, 1223 | "bin": { 1224 | "js-yaml": "bin/js-yaml.js" 1225 | } 1226 | }, 1227 | "node_modules/json-buffer": { 1228 | "version": "3.0.1", 1229 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 1230 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 1231 | "dev": true 1232 | }, 1233 | "node_modules/json-schema-traverse": { 1234 | "version": "0.4.1", 1235 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1236 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1237 | "dev": true 1238 | }, 1239 | "node_modules/json-stable-stringify-without-jsonify": { 1240 | "version": "1.0.1", 1241 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1242 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 1243 | "dev": true 1244 | }, 1245 | "node_modules/keyv": { 1246 | "version": "4.5.4", 1247 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", 1248 | "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 1249 | "dev": true, 1250 | "dependencies": { 1251 | "json-buffer": "3.0.1" 1252 | } 1253 | }, 1254 | "node_modules/levn": { 1255 | "version": "0.4.1", 1256 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 1257 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 1258 | "dev": true, 1259 | "dependencies": { 1260 | "prelude-ls": "^1.2.1", 1261 | "type-check": "~0.4.0" 1262 | }, 1263 | "engines": { 1264 | "node": ">= 0.8.0" 1265 | } 1266 | }, 1267 | "node_modules/locate-path": { 1268 | "version": "6.0.0", 1269 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 1270 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 1271 | "dev": true, 1272 | "dependencies": { 1273 | "p-locate": "^5.0.0" 1274 | }, 1275 | "engines": { 1276 | "node": ">=10" 1277 | }, 1278 | "funding": { 1279 | "url": "https://github.com/sponsors/sindresorhus" 1280 | } 1281 | }, 1282 | "node_modules/lodash.merge": { 1283 | "version": "4.6.2", 1284 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 1285 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 1286 | "dev": true 1287 | }, 1288 | "node_modules/merge2": { 1289 | "version": "1.4.1", 1290 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1291 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1292 | "dev": true, 1293 | "engines": { 1294 | "node": ">= 8" 1295 | } 1296 | }, 1297 | "node_modules/micromatch": { 1298 | "version": "4.0.7", 1299 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", 1300 | "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", 1301 | "dev": true, 1302 | "dependencies": { 1303 | "braces": "^3.0.3", 1304 | "picomatch": "^2.3.1" 1305 | }, 1306 | "engines": { 1307 | "node": ">=8.6" 1308 | } 1309 | }, 1310 | "node_modules/minimatch": { 1311 | "version": "3.1.2", 1312 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1313 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1314 | "dev": true, 1315 | "dependencies": { 1316 | "brace-expansion": "^1.1.7" 1317 | }, 1318 | "engines": { 1319 | "node": "*" 1320 | } 1321 | }, 1322 | "node_modules/ms": { 1323 | "version": "2.1.2", 1324 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1325 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1326 | "dev": true 1327 | }, 1328 | "node_modules/natural-compare": { 1329 | "version": "1.4.0", 1330 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1331 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 1332 | "dev": true 1333 | }, 1334 | "node_modules/once": { 1335 | "version": "1.4.0", 1336 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1337 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1338 | "dev": true, 1339 | "dependencies": { 1340 | "wrappy": "1" 1341 | } 1342 | }, 1343 | "node_modules/optionator": { 1344 | "version": "0.9.4", 1345 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", 1346 | "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", 1347 | "dev": true, 1348 | "dependencies": { 1349 | "deep-is": "^0.1.3", 1350 | "fast-levenshtein": "^2.0.6", 1351 | "levn": "^0.4.1", 1352 | "prelude-ls": "^1.2.1", 1353 | "type-check": "^0.4.0", 1354 | "word-wrap": "^1.2.5" 1355 | }, 1356 | "engines": { 1357 | "node": ">= 0.8.0" 1358 | } 1359 | }, 1360 | "node_modules/p-limit": { 1361 | "version": "3.1.0", 1362 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 1363 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 1364 | "dev": true, 1365 | "dependencies": { 1366 | "yocto-queue": "^0.1.0" 1367 | }, 1368 | "engines": { 1369 | "node": ">=10" 1370 | }, 1371 | "funding": { 1372 | "url": "https://github.com/sponsors/sindresorhus" 1373 | } 1374 | }, 1375 | "node_modules/p-locate": { 1376 | "version": "5.0.0", 1377 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 1378 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 1379 | "dev": true, 1380 | "dependencies": { 1381 | "p-limit": "^3.0.2" 1382 | }, 1383 | "engines": { 1384 | "node": ">=10" 1385 | }, 1386 | "funding": { 1387 | "url": "https://github.com/sponsors/sindresorhus" 1388 | } 1389 | }, 1390 | "node_modules/parent-module": { 1391 | "version": "1.0.1", 1392 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1393 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1394 | "dev": true, 1395 | "dependencies": { 1396 | "callsites": "^3.0.0" 1397 | }, 1398 | "engines": { 1399 | "node": ">=6" 1400 | } 1401 | }, 1402 | "node_modules/path-exists": { 1403 | "version": "4.0.0", 1404 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1405 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1406 | "dev": true, 1407 | "engines": { 1408 | "node": ">=8" 1409 | } 1410 | }, 1411 | "node_modules/path-key": { 1412 | "version": "3.1.1", 1413 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1414 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1415 | "dev": true, 1416 | "engines": { 1417 | "node": ">=8" 1418 | } 1419 | }, 1420 | "node_modules/path-type": { 1421 | "version": "4.0.0", 1422 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 1423 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 1424 | "dev": true, 1425 | "engines": { 1426 | "node": ">=8" 1427 | } 1428 | }, 1429 | "node_modules/picomatch": { 1430 | "version": "2.3.1", 1431 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1432 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1433 | "dev": true, 1434 | "engines": { 1435 | "node": ">=8.6" 1436 | }, 1437 | "funding": { 1438 | "url": "https://github.com/sponsors/jonschlinkert" 1439 | } 1440 | }, 1441 | "node_modules/prelude-ls": { 1442 | "version": "1.2.1", 1443 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 1444 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 1445 | "dev": true, 1446 | "engines": { 1447 | "node": ">= 0.8.0" 1448 | } 1449 | }, 1450 | "node_modules/prettier": { 1451 | "version": "3.3.3", 1452 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", 1453 | "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", 1454 | "dev": true, 1455 | "bin": { 1456 | "prettier": "bin/prettier.cjs" 1457 | }, 1458 | "engines": { 1459 | "node": ">=14" 1460 | }, 1461 | "funding": { 1462 | "url": "https://github.com/prettier/prettier?sponsor=1" 1463 | } 1464 | }, 1465 | "node_modules/punycode": { 1466 | "version": "2.3.1", 1467 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 1468 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 1469 | "dev": true, 1470 | "engines": { 1471 | "node": ">=6" 1472 | } 1473 | }, 1474 | "node_modules/queue-microtask": { 1475 | "version": "1.2.3", 1476 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1477 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1478 | "dev": true, 1479 | "funding": [ 1480 | { 1481 | "type": "github", 1482 | "url": "https://github.com/sponsors/feross" 1483 | }, 1484 | { 1485 | "type": "patreon", 1486 | "url": "https://www.patreon.com/feross" 1487 | }, 1488 | { 1489 | "type": "consulting", 1490 | "url": "https://feross.org/support" 1491 | } 1492 | ] 1493 | }, 1494 | "node_modules/resolve-from": { 1495 | "version": "4.0.0", 1496 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1497 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1498 | "dev": true, 1499 | "engines": { 1500 | "node": ">=4" 1501 | } 1502 | }, 1503 | "node_modules/reusify": { 1504 | "version": "1.0.4", 1505 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1506 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 1507 | "dev": true, 1508 | "engines": { 1509 | "iojs": ">=1.0.0", 1510 | "node": ">=0.10.0" 1511 | } 1512 | }, 1513 | "node_modules/run-parallel": { 1514 | "version": "1.2.0", 1515 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1516 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1517 | "dev": true, 1518 | "funding": [ 1519 | { 1520 | "type": "github", 1521 | "url": "https://github.com/sponsors/feross" 1522 | }, 1523 | { 1524 | "type": "patreon", 1525 | "url": "https://www.patreon.com/feross" 1526 | }, 1527 | { 1528 | "type": "consulting", 1529 | "url": "https://feross.org/support" 1530 | } 1531 | ], 1532 | "dependencies": { 1533 | "queue-microtask": "^1.2.2" 1534 | } 1535 | }, 1536 | "node_modules/semver": { 1537 | "version": "7.6.3", 1538 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", 1539 | "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", 1540 | "dev": true, 1541 | "bin": { 1542 | "semver": "bin/semver.js" 1543 | }, 1544 | "engines": { 1545 | "node": ">=10" 1546 | } 1547 | }, 1548 | "node_modules/shebang-command": { 1549 | "version": "2.0.0", 1550 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1551 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1552 | "dev": true, 1553 | "dependencies": { 1554 | "shebang-regex": "^3.0.0" 1555 | }, 1556 | "engines": { 1557 | "node": ">=8" 1558 | } 1559 | }, 1560 | "node_modules/shebang-regex": { 1561 | "version": "3.0.0", 1562 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1563 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1564 | "dev": true, 1565 | "engines": { 1566 | "node": ">=8" 1567 | } 1568 | }, 1569 | "node_modules/slash": { 1570 | "version": "3.0.0", 1571 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 1572 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 1573 | "dev": true, 1574 | "engines": { 1575 | "node": ">=8" 1576 | } 1577 | }, 1578 | "node_modules/strip-ansi": { 1579 | "version": "6.0.1", 1580 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1581 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1582 | "dev": true, 1583 | "dependencies": { 1584 | "ansi-regex": "^5.0.1" 1585 | }, 1586 | "engines": { 1587 | "node": ">=8" 1588 | } 1589 | }, 1590 | "node_modules/strip-json-comments": { 1591 | "version": "3.1.1", 1592 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 1593 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 1594 | "dev": true, 1595 | "engines": { 1596 | "node": ">=8" 1597 | }, 1598 | "funding": { 1599 | "url": "https://github.com/sponsors/sindresorhus" 1600 | } 1601 | }, 1602 | "node_modules/supports-color": { 1603 | "version": "7.2.0", 1604 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1605 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1606 | "dev": true, 1607 | "dependencies": { 1608 | "has-flag": "^4.0.0" 1609 | }, 1610 | "engines": { 1611 | "node": ">=8" 1612 | } 1613 | }, 1614 | "node_modules/text-table": { 1615 | "version": "0.2.0", 1616 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1617 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", 1618 | "dev": true 1619 | }, 1620 | "node_modules/to-regex-range": { 1621 | "version": "5.0.1", 1622 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1623 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1624 | "dev": true, 1625 | "dependencies": { 1626 | "is-number": "^7.0.0" 1627 | }, 1628 | "engines": { 1629 | "node": ">=8.0" 1630 | } 1631 | }, 1632 | "node_modules/ts-api-utils": { 1633 | "version": "1.3.0", 1634 | "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", 1635 | "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", 1636 | "dev": true, 1637 | "engines": { 1638 | "node": ">=16" 1639 | }, 1640 | "peerDependencies": { 1641 | "typescript": ">=4.2.0" 1642 | } 1643 | }, 1644 | "node_modules/tunnel": { 1645 | "version": "0.0.6", 1646 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", 1647 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", 1648 | "dev": true, 1649 | "engines": { 1650 | "node": ">=0.6.11 <=0.7.0 || >=0.7.3" 1651 | } 1652 | }, 1653 | "node_modules/type-check": { 1654 | "version": "0.4.0", 1655 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 1656 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 1657 | "dev": true, 1658 | "dependencies": { 1659 | "prelude-ls": "^1.2.1" 1660 | }, 1661 | "engines": { 1662 | "node": ">= 0.8.0" 1663 | } 1664 | }, 1665 | "node_modules/typescript": { 1666 | "version": "5.5.4", 1667 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", 1668 | "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", 1669 | "dev": true, 1670 | "bin": { 1671 | "tsc": "bin/tsc", 1672 | "tsserver": "bin/tsserver" 1673 | }, 1674 | "engines": { 1675 | "node": ">=14.17" 1676 | } 1677 | }, 1678 | "node_modules/typescript-eslint": { 1679 | "version": "8.0.0", 1680 | "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.0.0.tgz", 1681 | "integrity": "sha512-yQWBJutWL1PmpmDddIOl9/Mi6vZjqNCjqSGBMQ4vsc2Aiodk0SnbQQWPXbSy0HNuKCuGkw1+u4aQ2mO40TdhDQ==", 1682 | "dev": true, 1683 | "dependencies": { 1684 | "@typescript-eslint/eslint-plugin": "8.0.0", 1685 | "@typescript-eslint/parser": "8.0.0", 1686 | "@typescript-eslint/utils": "8.0.0" 1687 | }, 1688 | "engines": { 1689 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1690 | }, 1691 | "funding": { 1692 | "type": "opencollective", 1693 | "url": "https://opencollective.com/typescript-eslint" 1694 | }, 1695 | "peerDependenciesMeta": { 1696 | "typescript": { 1697 | "optional": true 1698 | } 1699 | } 1700 | }, 1701 | "node_modules/undici": { 1702 | "version": "5.28.4", 1703 | "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", 1704 | "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", 1705 | "dev": true, 1706 | "dependencies": { 1707 | "@fastify/busboy": "^2.0.0" 1708 | }, 1709 | "engines": { 1710 | "node": ">=14.0" 1711 | } 1712 | }, 1713 | "node_modules/universal-user-agent": { 1714 | "version": "6.0.1", 1715 | "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", 1716 | "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", 1717 | "dev": true 1718 | }, 1719 | "node_modules/uri-js": { 1720 | "version": "4.4.1", 1721 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1722 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1723 | "dev": true, 1724 | "dependencies": { 1725 | "punycode": "^2.1.0" 1726 | } 1727 | }, 1728 | "node_modules/uuid": { 1729 | "version": "8.3.2", 1730 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", 1731 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", 1732 | "dev": true, 1733 | "bin": { 1734 | "uuid": "dist/bin/uuid" 1735 | } 1736 | }, 1737 | "node_modules/which": { 1738 | "version": "2.0.2", 1739 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1740 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1741 | "dev": true, 1742 | "dependencies": { 1743 | "isexe": "^2.0.0" 1744 | }, 1745 | "bin": { 1746 | "node-which": "bin/node-which" 1747 | }, 1748 | "engines": { 1749 | "node": ">= 8" 1750 | } 1751 | }, 1752 | "node_modules/word-wrap": { 1753 | "version": "1.2.5", 1754 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", 1755 | "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", 1756 | "dev": true, 1757 | "engines": { 1758 | "node": ">=0.10.0" 1759 | } 1760 | }, 1761 | "node_modules/wrappy": { 1762 | "version": "1.0.2", 1763 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1764 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1765 | "dev": true 1766 | }, 1767 | "node_modules/yocto-queue": { 1768 | "version": "0.1.0", 1769 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 1770 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 1771 | "dev": true, 1772 | "engines": { 1773 | "node": ">=10" 1774 | }, 1775 | "funding": { 1776 | "url": "https://github.com/sponsors/sindresorhus" 1777 | } 1778 | } 1779 | } 1780 | } 1781 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "workflow-dispatch", 3 | "version": "1.2.4", 4 | "description": "Trigger running GitHub Actions workflows", 5 | "main": "dist/index.js", 6 | "scripts": { 7 | "build": "ncc build src/main.ts -o dist", 8 | "lint": "eslint src/", 9 | "lint-fix": "eslint src/ --fix", 10 | "format": "prettier --write src/" 11 | }, 12 | "keywords": [ 13 | "github", 14 | "actions" 15 | ], 16 | "author": "Ben Coleman", 17 | "license": "MIT", 18 | "devDependencies": { 19 | "@actions/core": "^1.10.1", 20 | "@actions/github": "^6.0.0", 21 | "@vercel/ncc": "^0.38.1", 22 | "typescript-eslint": "^8.0.0", 23 | "eslint": "^9.8.0", 24 | "typescript": "^5.5.4", 25 | "prettier": "^3.3.3" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | // ---------------------------------------------------------------------------- 2 | // Copyright (c) Ben Coleman, 2020 3 | // Licensed under the MIT License. 4 | // 5 | // Workflow Dispatch Action - Main task code 6 | // ---------------------------------------------------------------------------- 7 | 8 | import * as core from '@actions/core' 9 | import * as github from '@actions/github' 10 | import * as PackageJSON from '../package.json' 11 | 12 | type Workflow = { 13 | id: number 14 | name: string 15 | path: string 16 | } 17 | 18 | // 19 | // Main task function (async wrapper) 20 | // 21 | async function run(): Promise { 22 | core.info(`🏃 Workflow Dispatch Action v${PackageJSON.version}`) 23 | try { 24 | // Required inputs 25 | const workflowRef = core.getInput('workflow') 26 | 27 | // Optional inputs, with defaults 28 | const token = core.getInput('token') 29 | const ref = core.getInput('ref') || github.context.ref 30 | const [owner, repo] = core.getInput('repo') 31 | ? core.getInput('repo').split('/') 32 | : [github.context.repo.owner, github.context.repo.repo] 33 | 34 | // Decode inputs, this MUST be a valid JSON string 35 | let inputs = {} 36 | const inputsJson = core.getInput('inputs') 37 | if (inputsJson) { 38 | inputs = JSON.parse(inputsJson) 39 | } 40 | 41 | // Get octokit client for making API calls 42 | const octokit = github.getOctokit(token) 43 | 44 | // List workflows via API, and handle paginated results 45 | const workflows: Workflow[] = await octokit.paginate( 46 | octokit.rest.actions.listRepoWorkflows.endpoint.merge({ 47 | owner, 48 | repo, 49 | ref, 50 | inputs, 51 | }), 52 | ) 53 | 54 | // Debug response if ACTIONS_STEP_DEBUG is enabled 55 | core.debug('### START List Workflows response data') 56 | core.debug(JSON.stringify(workflows, null, 3)) 57 | core.debug('### END: List Workflows response data') 58 | 59 | // Locate workflow either by name, id or filename 60 | const foundWorkflow = workflows.find((workflow) => { 61 | return ( 62 | workflow.name === workflowRef || 63 | workflow.id.toString() === workflowRef || 64 | workflow.path.endsWith(`/${workflowRef}`) || // Add a leading / to avoid matching workflow with same suffix 65 | workflow.path == workflowRef 66 | ) // Or it stays in top level directory 67 | }) 68 | 69 | if (!foundWorkflow) throw new Error(`Unable to find workflow '${workflowRef}' in ${owner}/${repo} 😥`) 70 | 71 | console.log(`🔎 Found workflow, id: ${foundWorkflow.id}, name: ${foundWorkflow.name}, path: ${foundWorkflow.path}`) 72 | 73 | // Call workflow_dispatch API 74 | console.log('🚀 Calling GitHub API to dispatch workflow...') 75 | const dispatchResp = await octokit.request( 76 | `POST /repos/${owner}/${repo}/actions/workflows/${foundWorkflow.id}/dispatches`, 77 | { 78 | ref: ref, 79 | inputs: inputs, 80 | }, 81 | ) 82 | 83 | core.info(`🏆 API response status: ${dispatchResp.status}`) 84 | core.setOutput('workflowId', foundWorkflow.id) 85 | } catch (error) { 86 | const e = error as Error 87 | 88 | if (e.message.endsWith('a disabled workflow')) { 89 | core.warning('Workflow is disabled, no action was taken') 90 | return 91 | } 92 | 93 | core.setFailed(e.message) 94 | } 95 | } 96 | 97 | // 98 | // Call the main task run function 99 | // 100 | run() 101 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ 4 | "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ 5 | "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ 6 | "strict": true, /* Enable all strict type-checking options. */ 7 | "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ 8 | "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ 9 | "resolveJsonModule": true 10 | }, 11 | "exclude": ["node_modules", "**/*.test.ts"] 12 | } --------------------------------------------------------------------------------