├── .github ├── dependabot.yml └── workflows │ ├── build-test.yml │ └── codeql-analysis.yml ├── .gitignore ├── .hooks └── pre-commit ├── LICENSE ├── README.md ├── action.yml ├── dist ├── .gitattributes ├── .gitignore ├── setup.js └── setup.js.LICENSE.txt ├── eslint.config.mjs ├── package-lock.json ├── package.json ├── src ├── lib.ts ├── setup.ts └── utils.ts ├── tsconfig.json └── webpack.config.mjs /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # See https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file 2 | version: 2 3 | updates: 4 | - package-ecosystem: npm 5 | directory: / 6 | ignore: 7 | - dependency-name: '@types/*' 8 | - dependency-name: eslint 9 | - dependency-name: '@typescript-eslint/*' 10 | - dependency-name: husky 11 | schedule: 12 | interval: weekly 13 | open-pull-requests-limit: 20 14 | - package-ecosystem: github-actions 15 | directory: / 16 | schedule: 17 | interval: monthly 18 | open-pull-requests-limit: 20 19 | -------------------------------------------------------------------------------- /.github/workflows/build-test.yml: -------------------------------------------------------------------------------- 1 | name: Build, lint, test 2 | 3 | on: [ push, pull_request ] 4 | 5 | jobs: 6 | build-lint: 7 | name: Build & lint 8 | runs-on: ubuntu-latest 9 | 10 | steps: 11 | - uses: actions/checkout@v4 12 | - uses: actions/setup-node@v4 13 | with: 14 | node-version: 20 15 | - run: npm ci 16 | - name: Build 17 | run: npm run build 18 | - name: Check if setup.js up-to-date if this is not a regular push event 19 | if: github.event_name != 'push' 20 | run: git diff --exit-code -s -- dist/ || echo "::warning::setup.js should be updated" 21 | - name: Lint 22 | run: npm run lint-only 23 | 24 | - uses: actions/upload-artifact@v4 25 | with: 26 | name: dist 27 | path: dist/ 28 | retention-days: 1 29 | 30 | commit-build: 31 | name: Commit setup.js 32 | if: github.event_name == 'push' 33 | needs: build-lint 34 | permissions: 35 | contents: write 36 | runs-on: ubuntu-latest 37 | 38 | steps: 39 | - uses: actions/checkout@v4 40 | - uses: actions/download-artifact@v4 41 | with: 42 | name: dist 43 | path: dist/ 44 | - name: Commit setup.js 45 | uses: EndBug/add-and-commit@v9 46 | with: 47 | message: Update setup.js 48 | add: dist/ 49 | default_author: github_actions 50 | author_name: Build bot 51 | pathspec_error_handling: exitImmediately 52 | 53 | test-fasm1: 54 | name: Test install some fasm 1 versions 55 | needs: build-lint 56 | strategy: 57 | fail-fast: false 58 | matrix: 59 | os: [ ubuntu-latest, windows-latest ] 60 | version: [ latest, 1.73.* ] 61 | 62 | runs-on: ${{ matrix.os }} 63 | 64 | steps: 65 | - uses: actions/checkout@v4 66 | - uses: actions/download-artifact@v4 67 | with: 68 | name: dist 69 | path: dist/ 70 | - name: Run setup-fasm 71 | id: fasm 72 | uses: ./ 73 | with: 74 | edition: fasm1 75 | version: ${{ matrix.version }} 76 | fallback-to-previous-compatible: false 77 | - name: Check installed version 78 | run: | 79 | (fasm.x64 || fasm || fasm.o || FASM.EXE) 2>/dev/null || true 80 | (fasm.x64 || fasm || fasm.o || FASM.EXE) 2>&1 | grep -qF 'flat assembler version ${{ steps.fasm.outputs.version }}' 81 | shell: sh 82 | - name: Check INCLUDE envvar 83 | if: matrix.os == 'windows-latest' 84 | run: | 85 | echo INCLUDE = $INCLUDE 86 | [ -d "$INCLUDE" ] 87 | shell: sh 88 | 89 | test-fasmg: 90 | name: Test install latest fasm g version 91 | needs: build-lint 92 | strategy: 93 | fail-fast: false 94 | matrix: 95 | os: [ ubuntu-latest, windows-latest ] 96 | 97 | runs-on: ${{ matrix.os }} 98 | 99 | steps: 100 | - uses: actions/checkout@v4 101 | - uses: actions/download-artifact@v4 102 | with: 103 | name: dist 104 | path: dist/ 105 | - name: Run setup-fasm 106 | id: fasm 107 | uses: ./ 108 | with: 109 | edition: fasmg 110 | fallback-to-previous-compatible: false 111 | fasmg-download-packages: true 112 | fasmg-include-packages: utility, x86 113 | - name: Check installed version 114 | run: | 115 | (fasmg.x64 || fasmg || fasmg.o || fasmg.exe) 2>/dev/null || true 116 | (fasmg.x64 || fasmg || fasmg.o || fasmg.exe) 2>&1 | grep -qF 'flat assembler version g.${{ steps.fasm.outputs.version }}' 117 | shell: sh 118 | - name: Check INCLUDE envvar 119 | run: | 120 | echo INCLUDE = $INCLUDE 121 | set -e 122 | IFS=';' read -ra dirs <<< "$INCLUDE" 123 | for dir in "${dirs[@]}" 124 | do 125 | [ -d "$dir" ] # Exists and is directory? 126 | done 127 | [ ${#dirs[@]} -eq 3 ] # 3 items (packages root, utility, x86) 128 | shell: bash 129 | 130 | test-fasmarm: 131 | name: Test install latest FASMARM version 132 | needs: build-lint 133 | strategy: 134 | fail-fast: false 135 | matrix: 136 | os: [ ubuntu-latest, windows-latest ] 137 | 138 | runs-on: ${{ matrix.os }} 139 | 140 | steps: 141 | - uses: actions/checkout@v4 142 | - uses: actions/download-artifact@v4 143 | with: 144 | name: dist 145 | path: dist/ 146 | - name: Run setup-fasm 147 | id: fasm 148 | uses: ./ 149 | with: 150 | edition: fasmarm 151 | fallback-to-previous-compatible: false 152 | - name: Check installed version 153 | run: | 154 | (fasmarm.x64 || fasmarm || fasmarm.o || FASMARM.EXE) 2>/dev/null || true 155 | (fasmarm.x64 || fasmarm || fasmarm.o || FASMARM.EXE) 2>&1 | grep -qF 'flat assembler for ARM' 156 | shell: sh 157 | - name: Check INCLUDE envvar 158 | run: | 159 | echo INCLUDE = $INCLUDE 160 | [ -d "$INCLUDE" ] 161 | shell: bash 162 | -------------------------------------------------------------------------------- /.github/workflows/codeql-analysis.yml: -------------------------------------------------------------------------------- 1 | name: CodeQL analysis 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | pull_request: 7 | branches: [ main ] 8 | schedule: 9 | - cron: '0 0 * * 0' 10 | 11 | jobs: 12 | analyze: 13 | name: Analyze 14 | runs-on: ubuntu-latest 15 | permissions: 16 | actions: read 17 | contents: read 18 | security-events: write 19 | 20 | steps: 21 | - uses: actions/checkout@v4 22 | 23 | - uses: github/codeql-action/init@v3 24 | with: 25 | languages: typescript 26 | 27 | - uses: github/codeql-action/autobuild@v3 28 | 29 | - uses: github/codeql-action/analyze@v3 30 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /ts-out/ 2 | /tmp/ 3 | /cache/ 4 | 5 | # Logs 6 | logs 7 | *.log 8 | npm-debug.log* 9 | 10 | # Diagnostic reports (https://nodejs.org/api/report.html) 11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 12 | 13 | # Runtime data 14 | pids 15 | *.pid 16 | *.seed 17 | *.pid.lock 18 | 19 | # Dependency directories 20 | node_modules/ 21 | 22 | # TypeScript cache 23 | *.tsbuildinfo 24 | 25 | # Optional npm cache directory 26 | .npm 27 | 28 | # Optional REPL history 29 | .node_repl_history 30 | 31 | # Output of 'npm pack' 32 | *.tgz 33 | 34 | # dotenv environment variables file 35 | .env 36 | .env.test 37 | -------------------------------------------------------------------------------- /.hooks/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | set -e 3 | 4 | npm run build && npm run lint-only 5 | git add dist/ 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 stevenwdv 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | setup-fasm 2 | ========== 3 | 4 | This action downloads the specified edition and version of [flat assembler](https://flatassembler.net/) and adds it to PATH. 5 | 6 | Available for Windows, Linux, and \*nix systems supporting ELF binaries (not macOS). 7 | 8 | Usage 9 | ----- 10 | 11 | Use latest fasm 1 version: 12 | 13 | ```yaml 14 | - uses: stevenwdv/setup-fasm@v1 15 | 16 | - name: Test fasm 17 | run: fasm 18 | ``` 19 | 20 | Note: Executable name may differ. `fasm.x64` may also be available on x86-64 Linux. Use `fasm.o` for \*nix systems (none currently supported by GitHub). 21 | 22 | Use latest fasm g version with some packages: 23 | 24 | ```yaml 25 | - uses: stevenwdv/setup-fasm@v1 26 | with: 27 | edition: fasmg 28 | fasmg-download-packages: true 29 | fasmg-include-packages: utility,x86 30 | 31 | - name: Test fasm g 32 | run: fasmg 33 | ``` 34 | 35 | The `fasmg-download-packages` input specifies that [`tgrysztar/fasmg/packages`](https://github.com/tgrysztar/fasmg/tree/master/packages) should be downloaded (and can also be a commit hash, for example). By default, this directory then gets added to the `INCLUDE` environment variable such that you can use e.g. `include 'x86/win64w.inc'`, but you can also include specific packages using `fasmg-include-packages` such that you can include files in these directly, like `include 'win64w.inc'`. 36 | 37 | FASMARM is also available. 38 | 39 | Use specific version (accepts wildcard at the end): 40 | 41 | ```yaml 42 | - uses: stevenwdv/setup-fasm@v1 43 | with: 44 | edition: fasm1 45 | version: 1.71.* 46 | ``` 47 | 48 | Additional notes 49 | ---------------- 50 | 51 | Not all versions are archived (for all platforms). This utility searches https://flatassembler.net/, http://fasm.sourceforge.net/archive/recent/, and http://comrade.ownz.com/docs/fasm.html#pastversions for archived versions, as long as the version number is found in [`stevenwdv/fasm-versions/fasm_versions.json`](https://github.com/stevenwdv/fasm-versions/blob/v1/fasm_versions.json). Note that while some archives only support insecure HTTP, this script checks the hash of the downloaded file to make sure it has not been tampered with. 52 | 53 | For FASMARM, only an unnamed latest version is available. 54 | 55 | To download unknown versions, set `version` to a specific version number without wildcards and set the `download-unknown` input to one of the following values: 56 | 57 | - `secure`: Allow downloading unknown versions via a secure connection (not all archives support HTTPS). 58 | - _some [BLAKE2](https://www.blake2.net/)b-512 hash_: Allow downloading unknown versions via any connection, but verify that the hash corresponds to the given value. 59 | - `insecure`: Allow downloading unknown versions via any, possibly insecure, connection (not recommended except for testing). 60 | 61 | This script automatically sets the `INCLUDE` environment variable to the path of the `INCLUDE` folder in the fasm installation, if one exists, unless the `set-include-envvar` input is set to `false`. 62 | 63 | See [`action.yml`](https://github.com/stevenwdv/setup-fasm/blob/main/action.yml) for all inputs and outputs of this action. 64 | -------------------------------------------------------------------------------- /action.yml: -------------------------------------------------------------------------------- 1 | name: Setup fasm 2 | author: stevenwdv 3 | description: Set up the flat assembler compiler 4 | 5 | inputs: 6 | edition: 7 | description: Edition to install; fasm1, fasmg, or fasmarm 8 | required: false 9 | default: fasm1 10 | version: 11 | description: Version of edition to install; e.g. 1.73.30, 1.73.*, or latest 12 | required: false 13 | default: latest 14 | fallback-to-previous-compatible: 15 | description: Fallback to previous compatible version instead of the newest compatible when errors with downloading occur 16 | required: false 17 | default: 'true' 18 | ignore-official-https-hash-mismatch: 19 | description: Ignore file hash mismatches for files download from https://flatassembler.net 20 | required: false 21 | default: 'false' 22 | download-unknown: 23 | description: Try to download unknown versions; one of never, secure, a BLAKE2b-512 hash, or insecure 24 | required: false 25 | default: never 26 | custom-version-list: 27 | description: Specify a path to a local versions list file to use instead of stevenwdv/fasm-versions 28 | required: false 29 | assume-dynamic-unchanged: 30 | description: Assume dynamic versions (FASMARM) do not change compared to the cache; true or false 31 | required: false 32 | default: 'false' 33 | fasmg-download-packages: 34 | description: Download fasm g packages from tgrysztar/fasmg/packages; one of false, true, or some branch or commit or tags/ 35 | required: false 36 | default: 'false' 37 | set-include-envvar: 38 | description: >- 39 | Set INCLUDE environment variable to the include folder(s) of the fasm installation, if found 40 | (for fasm g with input fasmg-download-packages on, this is the packages folder; also see fasmg-include-packages); true or false 41 | required: false 42 | default: 'true' 43 | fasmg-include-packages: 44 | description: >- 45 | Add specific packages (or the include folder inside them) to the INCLUDE environment variable, 46 | requires fasmg-download-packages input to be on, but not necessarily set-include-envvar; comma-separated list of package names 47 | required: false 48 | default: '' 49 | 50 | outputs: 51 | path: 52 | description: Path to which binaries are installed (skipping any single root folder in the archive) 53 | edition: 54 | description: Installed edition, same as input 55 | version: 56 | description: Full installed version 57 | platform: 58 | description: Platform for which fasm was installed 59 | fasmg-packages: 60 | description: Path to fasm g packages directory, if downloaded; see fasmg-download-packages input 61 | 62 | runs: 63 | using: node20 64 | main: dist/setup.js 65 | 66 | branding: 67 | icon: cpu 68 | color: blue 69 | -------------------------------------------------------------------------------- /dist/.gitattributes: -------------------------------------------------------------------------------- 1 | # Mark as generated for GitHub 2 | *.js linguist-generated 3 | -------------------------------------------------------------------------------- /dist/.gitignore: -------------------------------------------------------------------------------- 1 | *.map.js 2 | -------------------------------------------------------------------------------- /dist/setup.js.LICENSE.txt: -------------------------------------------------------------------------------- 1 | /*! formdata-polyfill. MIT License. Jimmy Wärting */ 2 | 3 | /*! ws. MIT License. Einar Otto Stangvik */ 4 | -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import typescriptEslint from '@typescript-eslint/eslint-plugin'; 2 | import tsParser from '@typescript-eslint/parser'; 3 | import path from 'node:path'; 4 | import {fileURLToPath} from 'node:url'; 5 | import js from '@eslint/js'; 6 | import {FlatCompat} from '@eslint/eslintrc'; 7 | 8 | const __filename = fileURLToPath(import.meta.url); 9 | const __dirname = path.dirname(__filename); 10 | const compat = new FlatCompat({ 11 | baseDirectory: __dirname, 12 | recommendedConfig: js.configs.recommended, 13 | allConfig: js.configs.all 14 | }); 15 | 16 | export default [{ 17 | plugins: { 18 | '@typescript-eslint': typescriptEslint, 19 | }, 20 | languageOptions: { 21 | parser: tsParser, 22 | }, 23 | }, ...compat.extends( 24 | 'eslint:recommended', 25 | 'plugin:@typescript-eslint/recommended', 26 | 'plugin:@typescript-eslint/recommended-requiring-type-checking', 27 | ).map(config => ({ 28 | ...config, 29 | files: ['**/*.ts'], 30 | ignores: ['**/*.d.ts'], 31 | })), { 32 | files: ['**/*.ts'], 33 | ignores: ['**/*.d.ts'], 34 | 35 | languageOptions: { 36 | ecmaVersion: 5, 37 | sourceType: 'script', 38 | 39 | parserOptions: { 40 | project: './tsconfig.json', 41 | }, 42 | }, 43 | 44 | rules: { 45 | 'no-constant-condition': ['error', { 46 | checkLoops: false, 47 | }], 48 | 49 | 'no-debugger': 'warn', // no error 50 | 'no-inner-declarations': 'off', // allow functions inside blocks 51 | 'no-loss-of-precision': 'warn', 52 | 'no-promise-executor-return': 'warn', 53 | 'no-mixed-spaces-and-tabs': 'off', // allow smart tabs 54 | 55 | quotes: ['warn', 'single', { 56 | avoidEscape: true, 57 | }], 58 | 59 | '@typescript-eslint/explicit-module-boundary-types': 'off', 60 | '@typescript-eslint/no-non-null-assertion': 'off', 61 | '@typescript-eslint/no-redundant-type-constituents': 'off', // allow e.g. 'never' | 'secure' | string | 'insecure' 62 | }, 63 | }]; -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "setup-fasm", 3 | "version": "1.4.3", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "setup-fasm", 9 | "version": "1.4.3", 10 | "license": "MIT", 11 | "dependencies": { 12 | "@actions/core": "^1.11.1", 13 | "@actions/tool-cache": "^2.0.2", 14 | "fasm-versions": "github:stevenwdv/fasm-versions#v1.1", 15 | "simple-git": "^3.27.0" 16 | }, 17 | "devDependencies": { 18 | "@types/node": "^20.17.17", 19 | "@types/webpack": "^5.28.5", 20 | "@typescript-eslint/eslint-plugin": "^8.23.0", 21 | "@typescript-eslint/parser": "^8.23.0", 22 | "eslint": "^9.19.0", 23 | "husky": "^9.1.7", 24 | "terser-webpack-plugin": "^5.3.14", 25 | "ts-loader": "^9.5.2", 26 | "ts-node": "^10.9.2", 27 | "typescript": "^5.7.3", 28 | "webpack": "^5.99.5", 29 | "webpack-cli": "^6.0.1" 30 | }, 31 | "engines": { 32 | "node": ">=16" 33 | } 34 | }, 35 | "node_modules/@actions/core": { 36 | "version": "1.11.1", 37 | "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.11.1.tgz", 38 | "integrity": "sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==", 39 | "license": "MIT", 40 | "dependencies": { 41 | "@actions/exec": "^1.1.1", 42 | "@actions/http-client": "^2.0.1" 43 | } 44 | }, 45 | "node_modules/@actions/exec": { 46 | "version": "1.1.1", 47 | "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.1.1.tgz", 48 | "integrity": "sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==", 49 | "license": "MIT", 50 | "dependencies": { 51 | "@actions/io": "^1.0.1" 52 | } 53 | }, 54 | "node_modules/@actions/http-client": { 55 | "version": "2.2.3", 56 | "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.3.tgz", 57 | "integrity": "sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA==", 58 | "license": "MIT", 59 | "dependencies": { 60 | "tunnel": "^0.0.6", 61 | "undici": "^5.25.4" 62 | } 63 | }, 64 | "node_modules/@actions/io": { 65 | "version": "1.1.3", 66 | "resolved": "https://registry.npmjs.org/@actions/io/-/io-1.1.3.tgz", 67 | "integrity": "sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==", 68 | "license": "MIT" 69 | }, 70 | "node_modules/@actions/tool-cache": { 71 | "version": "2.0.2", 72 | "resolved": "https://registry.npmjs.org/@actions/tool-cache/-/tool-cache-2.0.2.tgz", 73 | "integrity": "sha512-fBhNNOWxuoLxztQebpOaWu6WeVmuwa77Z+DxIZ1B+OYvGkGQon6kTVg6Z32Cb13WCuw0szqonK+hh03mJV7Z6w==", 74 | "license": "MIT", 75 | "dependencies": { 76 | "@actions/core": "^1.11.1", 77 | "@actions/exec": "^1.0.0", 78 | "@actions/http-client": "^2.0.1", 79 | "@actions/io": "^1.1.1", 80 | "semver": "^6.1.0" 81 | } 82 | }, 83 | "node_modules/@cspotcode/source-map-support": { 84 | "version": "0.8.1", 85 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 86 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 87 | "dev": true, 88 | "license": "MIT", 89 | "dependencies": { 90 | "@jridgewell/trace-mapping": "0.3.9" 91 | }, 92 | "engines": { 93 | "node": ">=12" 94 | } 95 | }, 96 | "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { 97 | "version": "0.3.9", 98 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 99 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 100 | "dev": true, 101 | "license": "MIT", 102 | "dependencies": { 103 | "@jridgewell/resolve-uri": "^3.0.3", 104 | "@jridgewell/sourcemap-codec": "^1.4.10" 105 | } 106 | }, 107 | "node_modules/@discoveryjs/json-ext": { 108 | "version": "0.6.3", 109 | "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", 110 | "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", 111 | "dev": true, 112 | "license": "MIT", 113 | "engines": { 114 | "node": ">=14.17.0" 115 | } 116 | }, 117 | "node_modules/@eslint-community/eslint-utils": { 118 | "version": "4.4.1", 119 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", 120 | "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", 121 | "dev": true, 122 | "license": "MIT", 123 | "dependencies": { 124 | "eslint-visitor-keys": "^3.4.3" 125 | }, 126 | "engines": { 127 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 128 | }, 129 | "funding": { 130 | "url": "https://opencollective.com/eslint" 131 | }, 132 | "peerDependencies": { 133 | "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 134 | } 135 | }, 136 | "node_modules/@eslint-community/regexpp": { 137 | "version": "4.12.1", 138 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", 139 | "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", 140 | "dev": true, 141 | "license": "MIT", 142 | "engines": { 143 | "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 144 | } 145 | }, 146 | "node_modules/@eslint/config-array": { 147 | "version": "0.19.2", 148 | "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", 149 | "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", 150 | "dev": true, 151 | "license": "Apache-2.0", 152 | "dependencies": { 153 | "@eslint/object-schema": "^2.1.6", 154 | "debug": "^4.3.1", 155 | "minimatch": "^3.1.2" 156 | }, 157 | "engines": { 158 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 159 | } 160 | }, 161 | "node_modules/@eslint/config-array/node_modules/brace-expansion": { 162 | "version": "1.1.11", 163 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 164 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 165 | "dev": true, 166 | "license": "MIT", 167 | "dependencies": { 168 | "balanced-match": "^1.0.0", 169 | "concat-map": "0.0.1" 170 | } 171 | }, 172 | "node_modules/@eslint/config-array/node_modules/minimatch": { 173 | "version": "3.1.2", 174 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 175 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 176 | "dev": true, 177 | "license": "ISC", 178 | "dependencies": { 179 | "brace-expansion": "^1.1.7" 180 | }, 181 | "engines": { 182 | "node": "*" 183 | } 184 | }, 185 | "node_modules/@eslint/core": { 186 | "version": "0.10.0", 187 | "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.10.0.tgz", 188 | "integrity": "sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==", 189 | "dev": true, 190 | "license": "Apache-2.0", 191 | "dependencies": { 192 | "@types/json-schema": "^7.0.15" 193 | }, 194 | "engines": { 195 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 196 | } 197 | }, 198 | "node_modules/@eslint/eslintrc": { 199 | "version": "3.2.0", 200 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", 201 | "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", 202 | "dev": true, 203 | "license": "MIT", 204 | "dependencies": { 205 | "ajv": "^6.12.4", 206 | "debug": "^4.3.2", 207 | "espree": "^10.0.1", 208 | "globals": "^14.0.0", 209 | "ignore": "^5.2.0", 210 | "import-fresh": "^3.2.1", 211 | "js-yaml": "^4.1.0", 212 | "minimatch": "^3.1.2", 213 | "strip-json-comments": "^3.1.1" 214 | }, 215 | "engines": { 216 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 217 | }, 218 | "funding": { 219 | "url": "https://opencollective.com/eslint" 220 | } 221 | }, 222 | "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { 223 | "version": "1.1.11", 224 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 225 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 226 | "dev": true, 227 | "license": "MIT", 228 | "dependencies": { 229 | "balanced-match": "^1.0.0", 230 | "concat-map": "0.0.1" 231 | } 232 | }, 233 | "node_modules/@eslint/eslintrc/node_modules/minimatch": { 234 | "version": "3.1.2", 235 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 236 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 237 | "dev": true, 238 | "license": "ISC", 239 | "dependencies": { 240 | "brace-expansion": "^1.1.7" 241 | }, 242 | "engines": { 243 | "node": "*" 244 | } 245 | }, 246 | "node_modules/@eslint/js": { 247 | "version": "9.19.0", 248 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.19.0.tgz", 249 | "integrity": "sha512-rbq9/g38qjfqFLOVPvwjIvFFdNziEC5S65jmjPw5r6A//QH+W91akh9irMwjDN8zKUTak6W9EsAv4m/7Wnw0UQ==", 250 | "dev": true, 251 | "license": "MIT", 252 | "engines": { 253 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 254 | } 255 | }, 256 | "node_modules/@eslint/object-schema": { 257 | "version": "2.1.6", 258 | "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", 259 | "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", 260 | "dev": true, 261 | "license": "Apache-2.0", 262 | "engines": { 263 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 264 | } 265 | }, 266 | "node_modules/@eslint/plugin-kit": { 267 | "version": "0.2.5", 268 | "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz", 269 | "integrity": "sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==", 270 | "dev": true, 271 | "license": "Apache-2.0", 272 | "dependencies": { 273 | "@eslint/core": "^0.10.0", 274 | "levn": "^0.4.1" 275 | }, 276 | "engines": { 277 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 278 | } 279 | }, 280 | "node_modules/@fastify/busboy": { 281 | "version": "2.1.1", 282 | "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", 283 | "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", 284 | "license": "MIT", 285 | "engines": { 286 | "node": ">=14" 287 | } 288 | }, 289 | "node_modules/@humanfs/core": { 290 | "version": "0.19.1", 291 | "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", 292 | "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", 293 | "dev": true, 294 | "license": "Apache-2.0", 295 | "engines": { 296 | "node": ">=18.18.0" 297 | } 298 | }, 299 | "node_modules/@humanfs/node": { 300 | "version": "0.16.6", 301 | "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", 302 | "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", 303 | "dev": true, 304 | "license": "Apache-2.0", 305 | "dependencies": { 306 | "@humanfs/core": "^0.19.1", 307 | "@humanwhocodes/retry": "^0.3.0" 308 | }, 309 | "engines": { 310 | "node": ">=18.18.0" 311 | } 312 | }, 313 | "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { 314 | "version": "0.3.1", 315 | "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", 316 | "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", 317 | "dev": true, 318 | "license": "Apache-2.0", 319 | "engines": { 320 | "node": ">=18.18" 321 | }, 322 | "funding": { 323 | "type": "github", 324 | "url": "https://github.com/sponsors/nzakas" 325 | } 326 | }, 327 | "node_modules/@humanwhocodes/module-importer": { 328 | "version": "1.0.1", 329 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 330 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 331 | "dev": true, 332 | "license": "Apache-2.0", 333 | "engines": { 334 | "node": ">=12.22" 335 | }, 336 | "funding": { 337 | "type": "github", 338 | "url": "https://github.com/sponsors/nzakas" 339 | } 340 | }, 341 | "node_modules/@humanwhocodes/retry": { 342 | "version": "0.4.1", 343 | "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", 344 | "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", 345 | "dev": true, 346 | "license": "Apache-2.0", 347 | "engines": { 348 | "node": ">=18.18" 349 | }, 350 | "funding": { 351 | "type": "github", 352 | "url": "https://github.com/sponsors/nzakas" 353 | } 354 | }, 355 | "node_modules/@jridgewell/gen-mapping": { 356 | "version": "0.3.8", 357 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", 358 | "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", 359 | "dev": true, 360 | "license": "MIT", 361 | "dependencies": { 362 | "@jridgewell/set-array": "^1.2.1", 363 | "@jridgewell/sourcemap-codec": "^1.4.10", 364 | "@jridgewell/trace-mapping": "^0.3.24" 365 | }, 366 | "engines": { 367 | "node": ">=6.0.0" 368 | } 369 | }, 370 | "node_modules/@jridgewell/resolve-uri": { 371 | "version": "3.1.2", 372 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 373 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 374 | "dev": true, 375 | "license": "MIT", 376 | "engines": { 377 | "node": ">=6.0.0" 378 | } 379 | }, 380 | "node_modules/@jridgewell/set-array": { 381 | "version": "1.2.1", 382 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 383 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 384 | "dev": true, 385 | "license": "MIT", 386 | "engines": { 387 | "node": ">=6.0.0" 388 | } 389 | }, 390 | "node_modules/@jridgewell/source-map": { 391 | "version": "0.3.6", 392 | "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", 393 | "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", 394 | "dev": true, 395 | "license": "MIT", 396 | "dependencies": { 397 | "@jridgewell/gen-mapping": "^0.3.5", 398 | "@jridgewell/trace-mapping": "^0.3.25" 399 | } 400 | }, 401 | "node_modules/@jridgewell/sourcemap-codec": { 402 | "version": "1.5.0", 403 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 404 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 405 | "dev": true, 406 | "license": "MIT" 407 | }, 408 | "node_modules/@jridgewell/trace-mapping": { 409 | "version": "0.3.25", 410 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 411 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 412 | "dev": true, 413 | "license": "MIT", 414 | "dependencies": { 415 | "@jridgewell/resolve-uri": "^3.1.0", 416 | "@jridgewell/sourcemap-codec": "^1.4.14" 417 | } 418 | }, 419 | "node_modules/@kwsites/file-exists": { 420 | "version": "1.1.1", 421 | "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", 422 | "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", 423 | "license": "MIT", 424 | "dependencies": { 425 | "debug": "^4.1.1" 426 | } 427 | }, 428 | "node_modules/@kwsites/promise-deferred": { 429 | "version": "1.1.1", 430 | "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", 431 | "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", 432 | "license": "MIT" 433 | }, 434 | "node_modules/@nodelib/fs.scandir": { 435 | "version": "2.1.5", 436 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 437 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 438 | "dev": true, 439 | "license": "MIT", 440 | "dependencies": { 441 | "@nodelib/fs.stat": "2.0.5", 442 | "run-parallel": "^1.1.9" 443 | }, 444 | "engines": { 445 | "node": ">= 8" 446 | } 447 | }, 448 | "node_modules/@nodelib/fs.stat": { 449 | "version": "2.0.5", 450 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 451 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 452 | "dev": true, 453 | "license": "MIT", 454 | "engines": { 455 | "node": ">= 8" 456 | } 457 | }, 458 | "node_modules/@nodelib/fs.walk": { 459 | "version": "1.2.8", 460 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 461 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 462 | "dev": true, 463 | "license": "MIT", 464 | "dependencies": { 465 | "@nodelib/fs.scandir": "2.1.5", 466 | "fastq": "^1.6.0" 467 | }, 468 | "engines": { 469 | "node": ">= 8" 470 | } 471 | }, 472 | "node_modules/@tsconfig/node10": { 473 | "version": "1.0.11", 474 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", 475 | "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", 476 | "dev": true, 477 | "license": "MIT" 478 | }, 479 | "node_modules/@tsconfig/node12": { 480 | "version": "1.0.11", 481 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", 482 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", 483 | "dev": true, 484 | "license": "MIT" 485 | }, 486 | "node_modules/@tsconfig/node14": { 487 | "version": "1.0.3", 488 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", 489 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", 490 | "dev": true, 491 | "license": "MIT" 492 | }, 493 | "node_modules/@tsconfig/node16": { 494 | "version": "1.0.4", 495 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", 496 | "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", 497 | "dev": true, 498 | "license": "MIT" 499 | }, 500 | "node_modules/@types/eslint": { 501 | "version": "9.6.1", 502 | "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", 503 | "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", 504 | "dev": true, 505 | "license": "MIT", 506 | "dependencies": { 507 | "@types/estree": "*", 508 | "@types/json-schema": "*" 509 | } 510 | }, 511 | "node_modules/@types/eslint-scope": { 512 | "version": "3.7.7", 513 | "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", 514 | "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", 515 | "dev": true, 516 | "license": "MIT", 517 | "dependencies": { 518 | "@types/eslint": "*", 519 | "@types/estree": "*" 520 | } 521 | }, 522 | "node_modules/@types/estree": { 523 | "version": "1.0.6", 524 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", 525 | "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", 526 | "dev": true, 527 | "license": "MIT" 528 | }, 529 | "node_modules/@types/json-schema": { 530 | "version": "7.0.15", 531 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", 532 | "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", 533 | "dev": true, 534 | "license": "MIT" 535 | }, 536 | "node_modules/@types/node": { 537 | "version": "20.17.17", 538 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.17.tgz", 539 | "integrity": "sha512-/WndGO4kIfMicEQLTi/mDANUu/iVUhT7KboZPdEqqHQ4aTS+3qT3U5gIqWDFV+XouorjfgGqvKILJeHhuQgFYg==", 540 | "dev": true, 541 | "license": "MIT", 542 | "dependencies": { 543 | "undici-types": "~6.19.2" 544 | } 545 | }, 546 | "node_modules/@types/webpack": { 547 | "version": "5.28.5", 548 | "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-5.28.5.tgz", 549 | "integrity": "sha512-wR87cgvxj3p6D0Crt1r5avwqffqPXUkNlnQ1mjU93G7gCuFjufZR4I6j8cz5g1F1tTYpfOOFvly+cmIQwL9wvw==", 550 | "dev": true, 551 | "license": "MIT", 552 | "dependencies": { 553 | "@types/node": "*", 554 | "tapable": "^2.2.0", 555 | "webpack": "^5" 556 | } 557 | }, 558 | "node_modules/@typescript-eslint/eslint-plugin": { 559 | "version": "8.23.0", 560 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.23.0.tgz", 561 | "integrity": "sha512-vBz65tJgRrA1Q5gWlRfvoH+w943dq9K1p1yDBY2pc+a1nbBLZp7fB9+Hk8DaALUbzjqlMfgaqlVPT1REJdkt/w==", 562 | "dev": true, 563 | "license": "MIT", 564 | "dependencies": { 565 | "@eslint-community/regexpp": "^4.10.0", 566 | "@typescript-eslint/scope-manager": "8.23.0", 567 | "@typescript-eslint/type-utils": "8.23.0", 568 | "@typescript-eslint/utils": "8.23.0", 569 | "@typescript-eslint/visitor-keys": "8.23.0", 570 | "graphemer": "^1.4.0", 571 | "ignore": "^5.3.1", 572 | "natural-compare": "^1.4.0", 573 | "ts-api-utils": "^2.0.1" 574 | }, 575 | "engines": { 576 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 577 | }, 578 | "funding": { 579 | "type": "opencollective", 580 | "url": "https://opencollective.com/typescript-eslint" 581 | }, 582 | "peerDependencies": { 583 | "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", 584 | "eslint": "^8.57.0 || ^9.0.0", 585 | "typescript": ">=4.8.4 <5.8.0" 586 | } 587 | }, 588 | "node_modules/@typescript-eslint/parser": { 589 | "version": "8.23.0", 590 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.23.0.tgz", 591 | "integrity": "sha512-h2lUByouOXFAlMec2mILeELUbME5SZRN/7R9Cw2RD2lRQQY08MWMM+PmVVKKJNK1aIwqTo9t/0CvOxwPbRIE2Q==", 592 | "dev": true, 593 | "license": "MIT", 594 | "dependencies": { 595 | "@typescript-eslint/scope-manager": "8.23.0", 596 | "@typescript-eslint/types": "8.23.0", 597 | "@typescript-eslint/typescript-estree": "8.23.0", 598 | "@typescript-eslint/visitor-keys": "8.23.0", 599 | "debug": "^4.3.4" 600 | }, 601 | "engines": { 602 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 603 | }, 604 | "funding": { 605 | "type": "opencollective", 606 | "url": "https://opencollective.com/typescript-eslint" 607 | }, 608 | "peerDependencies": { 609 | "eslint": "^8.57.0 || ^9.0.0", 610 | "typescript": ">=4.8.4 <5.8.0" 611 | } 612 | }, 613 | "node_modules/@typescript-eslint/scope-manager": { 614 | "version": "8.23.0", 615 | "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.23.0.tgz", 616 | "integrity": "sha512-OGqo7+dXHqI7Hfm+WqkZjKjsiRtFUQHPdGMXzk5mYXhJUedO7e/Y7i8AK3MyLMgZR93TX4bIzYrfyVjLC+0VSw==", 617 | "dev": true, 618 | "license": "MIT", 619 | "dependencies": { 620 | "@typescript-eslint/types": "8.23.0", 621 | "@typescript-eslint/visitor-keys": "8.23.0" 622 | }, 623 | "engines": { 624 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 625 | }, 626 | "funding": { 627 | "type": "opencollective", 628 | "url": "https://opencollective.com/typescript-eslint" 629 | } 630 | }, 631 | "node_modules/@typescript-eslint/type-utils": { 632 | "version": "8.23.0", 633 | "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.23.0.tgz", 634 | "integrity": "sha512-iIuLdYpQWZKbiH+RkCGc6iu+VwscP5rCtQ1lyQ7TYuKLrcZoeJVpcLiG8DliXVkUxirW/PWlmS+d6yD51L9jvA==", 635 | "dev": true, 636 | "license": "MIT", 637 | "dependencies": { 638 | "@typescript-eslint/typescript-estree": "8.23.0", 639 | "@typescript-eslint/utils": "8.23.0", 640 | "debug": "^4.3.4", 641 | "ts-api-utils": "^2.0.1" 642 | }, 643 | "engines": { 644 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 645 | }, 646 | "funding": { 647 | "type": "opencollective", 648 | "url": "https://opencollective.com/typescript-eslint" 649 | }, 650 | "peerDependencies": { 651 | "eslint": "^8.57.0 || ^9.0.0", 652 | "typescript": ">=4.8.4 <5.8.0" 653 | } 654 | }, 655 | "node_modules/@typescript-eslint/types": { 656 | "version": "8.23.0", 657 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.23.0.tgz", 658 | "integrity": "sha512-1sK4ILJbCmZOTt9k4vkoulT6/y5CHJ1qUYxqpF1K/DBAd8+ZUL4LlSCxOssuH5m4rUaaN0uS0HlVPvd45zjduQ==", 659 | "dev": true, 660 | "license": "MIT", 661 | "engines": { 662 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 663 | }, 664 | "funding": { 665 | "type": "opencollective", 666 | "url": "https://opencollective.com/typescript-eslint" 667 | } 668 | }, 669 | "node_modules/@typescript-eslint/typescript-estree": { 670 | "version": "8.23.0", 671 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.23.0.tgz", 672 | "integrity": "sha512-LcqzfipsB8RTvH8FX24W4UUFk1bl+0yTOf9ZA08XngFwMg4Kj8A+9hwz8Cr/ZS4KwHrmo9PJiLZkOt49vPnuvQ==", 673 | "dev": true, 674 | "license": "MIT", 675 | "dependencies": { 676 | "@typescript-eslint/types": "8.23.0", 677 | "@typescript-eslint/visitor-keys": "8.23.0", 678 | "debug": "^4.3.4", 679 | "fast-glob": "^3.3.2", 680 | "is-glob": "^4.0.3", 681 | "minimatch": "^9.0.4", 682 | "semver": "^7.6.0", 683 | "ts-api-utils": "^2.0.1" 684 | }, 685 | "engines": { 686 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 687 | }, 688 | "funding": { 689 | "type": "opencollective", 690 | "url": "https://opencollective.com/typescript-eslint" 691 | }, 692 | "peerDependencies": { 693 | "typescript": ">=4.8.4 <5.8.0" 694 | } 695 | }, 696 | "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { 697 | "version": "7.7.1", 698 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", 699 | "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", 700 | "dev": true, 701 | "license": "ISC", 702 | "bin": { 703 | "semver": "bin/semver.js" 704 | }, 705 | "engines": { 706 | "node": ">=10" 707 | } 708 | }, 709 | "node_modules/@typescript-eslint/utils": { 710 | "version": "8.23.0", 711 | "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.23.0.tgz", 712 | "integrity": "sha512-uB/+PSo6Exu02b5ZEiVtmY6RVYO7YU5xqgzTIVZwTHvvK3HsL8tZZHFaTLFtRG3CsV4A5mhOv+NZx5BlhXPyIA==", 713 | "dev": true, 714 | "license": "MIT", 715 | "dependencies": { 716 | "@eslint-community/eslint-utils": "^4.4.0", 717 | "@typescript-eslint/scope-manager": "8.23.0", 718 | "@typescript-eslint/types": "8.23.0", 719 | "@typescript-eslint/typescript-estree": "8.23.0" 720 | }, 721 | "engines": { 722 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 723 | }, 724 | "funding": { 725 | "type": "opencollective", 726 | "url": "https://opencollective.com/typescript-eslint" 727 | }, 728 | "peerDependencies": { 729 | "eslint": "^8.57.0 || ^9.0.0", 730 | "typescript": ">=4.8.4 <5.8.0" 731 | } 732 | }, 733 | "node_modules/@typescript-eslint/visitor-keys": { 734 | "version": "8.23.0", 735 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.23.0.tgz", 736 | "integrity": "sha512-oWWhcWDLwDfu++BGTZcmXWqpwtkwb5o7fxUIGksMQQDSdPW9prsSnfIOZMlsj4vBOSrcnjIUZMiIjODgGosFhQ==", 737 | "dev": true, 738 | "license": "MIT", 739 | "dependencies": { 740 | "@typescript-eslint/types": "8.23.0", 741 | "eslint-visitor-keys": "^4.2.0" 742 | }, 743 | "engines": { 744 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 745 | }, 746 | "funding": { 747 | "type": "opencollective", 748 | "url": "https://opencollective.com/typescript-eslint" 749 | } 750 | }, 751 | "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { 752 | "version": "4.2.0", 753 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", 754 | "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", 755 | "dev": true, 756 | "license": "Apache-2.0", 757 | "engines": { 758 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 759 | }, 760 | "funding": { 761 | "url": "https://opencollective.com/eslint" 762 | } 763 | }, 764 | "node_modules/@webassemblyjs/ast": { 765 | "version": "1.14.1", 766 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", 767 | "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", 768 | "dev": true, 769 | "license": "MIT", 770 | "dependencies": { 771 | "@webassemblyjs/helper-numbers": "1.13.2", 772 | "@webassemblyjs/helper-wasm-bytecode": "1.13.2" 773 | } 774 | }, 775 | "node_modules/@webassemblyjs/floating-point-hex-parser": { 776 | "version": "1.13.2", 777 | "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", 778 | "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", 779 | "dev": true, 780 | "license": "MIT" 781 | }, 782 | "node_modules/@webassemblyjs/helper-api-error": { 783 | "version": "1.13.2", 784 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", 785 | "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", 786 | "dev": true, 787 | "license": "MIT" 788 | }, 789 | "node_modules/@webassemblyjs/helper-buffer": { 790 | "version": "1.14.1", 791 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", 792 | "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", 793 | "dev": true, 794 | "license": "MIT" 795 | }, 796 | "node_modules/@webassemblyjs/helper-numbers": { 797 | "version": "1.13.2", 798 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", 799 | "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", 800 | "dev": true, 801 | "license": "MIT", 802 | "dependencies": { 803 | "@webassemblyjs/floating-point-hex-parser": "1.13.2", 804 | "@webassemblyjs/helper-api-error": "1.13.2", 805 | "@xtuc/long": "4.2.2" 806 | } 807 | }, 808 | "node_modules/@webassemblyjs/helper-wasm-bytecode": { 809 | "version": "1.13.2", 810 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", 811 | "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", 812 | "dev": true, 813 | "license": "MIT" 814 | }, 815 | "node_modules/@webassemblyjs/helper-wasm-section": { 816 | "version": "1.14.1", 817 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", 818 | "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", 819 | "dev": true, 820 | "license": "MIT", 821 | "dependencies": { 822 | "@webassemblyjs/ast": "1.14.1", 823 | "@webassemblyjs/helper-buffer": "1.14.1", 824 | "@webassemblyjs/helper-wasm-bytecode": "1.13.2", 825 | "@webassemblyjs/wasm-gen": "1.14.1" 826 | } 827 | }, 828 | "node_modules/@webassemblyjs/ieee754": { 829 | "version": "1.13.2", 830 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", 831 | "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", 832 | "dev": true, 833 | "license": "MIT", 834 | "dependencies": { 835 | "@xtuc/ieee754": "^1.2.0" 836 | } 837 | }, 838 | "node_modules/@webassemblyjs/leb128": { 839 | "version": "1.13.2", 840 | "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", 841 | "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", 842 | "dev": true, 843 | "license": "Apache-2.0", 844 | "dependencies": { 845 | "@xtuc/long": "4.2.2" 846 | } 847 | }, 848 | "node_modules/@webassemblyjs/utf8": { 849 | "version": "1.13.2", 850 | "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", 851 | "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", 852 | "dev": true, 853 | "license": "MIT" 854 | }, 855 | "node_modules/@webassemblyjs/wasm-edit": { 856 | "version": "1.14.1", 857 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", 858 | "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", 859 | "dev": true, 860 | "license": "MIT", 861 | "dependencies": { 862 | "@webassemblyjs/ast": "1.14.1", 863 | "@webassemblyjs/helper-buffer": "1.14.1", 864 | "@webassemblyjs/helper-wasm-bytecode": "1.13.2", 865 | "@webassemblyjs/helper-wasm-section": "1.14.1", 866 | "@webassemblyjs/wasm-gen": "1.14.1", 867 | "@webassemblyjs/wasm-opt": "1.14.1", 868 | "@webassemblyjs/wasm-parser": "1.14.1", 869 | "@webassemblyjs/wast-printer": "1.14.1" 870 | } 871 | }, 872 | "node_modules/@webassemblyjs/wasm-gen": { 873 | "version": "1.14.1", 874 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", 875 | "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", 876 | "dev": true, 877 | "license": "MIT", 878 | "dependencies": { 879 | "@webassemblyjs/ast": "1.14.1", 880 | "@webassemblyjs/helper-wasm-bytecode": "1.13.2", 881 | "@webassemblyjs/ieee754": "1.13.2", 882 | "@webassemblyjs/leb128": "1.13.2", 883 | "@webassemblyjs/utf8": "1.13.2" 884 | } 885 | }, 886 | "node_modules/@webassemblyjs/wasm-opt": { 887 | "version": "1.14.1", 888 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", 889 | "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", 890 | "dev": true, 891 | "license": "MIT", 892 | "dependencies": { 893 | "@webassemblyjs/ast": "1.14.1", 894 | "@webassemblyjs/helper-buffer": "1.14.1", 895 | "@webassemblyjs/wasm-gen": "1.14.1", 896 | "@webassemblyjs/wasm-parser": "1.14.1" 897 | } 898 | }, 899 | "node_modules/@webassemblyjs/wasm-parser": { 900 | "version": "1.14.1", 901 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", 902 | "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", 903 | "dev": true, 904 | "license": "MIT", 905 | "dependencies": { 906 | "@webassemblyjs/ast": "1.14.1", 907 | "@webassemblyjs/helper-api-error": "1.13.2", 908 | "@webassemblyjs/helper-wasm-bytecode": "1.13.2", 909 | "@webassemblyjs/ieee754": "1.13.2", 910 | "@webassemblyjs/leb128": "1.13.2", 911 | "@webassemblyjs/utf8": "1.13.2" 912 | } 913 | }, 914 | "node_modules/@webassemblyjs/wast-printer": { 915 | "version": "1.14.1", 916 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", 917 | "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", 918 | "dev": true, 919 | "license": "MIT", 920 | "dependencies": { 921 | "@webassemblyjs/ast": "1.14.1", 922 | "@xtuc/long": "4.2.2" 923 | } 924 | }, 925 | "node_modules/@webpack-cli/configtest": { 926 | "version": "3.0.1", 927 | "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz", 928 | "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==", 929 | "dev": true, 930 | "license": "MIT", 931 | "engines": { 932 | "node": ">=18.12.0" 933 | }, 934 | "peerDependencies": { 935 | "webpack": "^5.82.0", 936 | "webpack-cli": "6.x.x" 937 | } 938 | }, 939 | "node_modules/@webpack-cli/info": { 940 | "version": "3.0.1", 941 | "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz", 942 | "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==", 943 | "dev": true, 944 | "license": "MIT", 945 | "engines": { 946 | "node": ">=18.12.0" 947 | }, 948 | "peerDependencies": { 949 | "webpack": "^5.82.0", 950 | "webpack-cli": "6.x.x" 951 | } 952 | }, 953 | "node_modules/@webpack-cli/serve": { 954 | "version": "3.0.1", 955 | "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz", 956 | "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==", 957 | "dev": true, 958 | "license": "MIT", 959 | "engines": { 960 | "node": ">=18.12.0" 961 | }, 962 | "peerDependencies": { 963 | "webpack": "^5.82.0", 964 | "webpack-cli": "6.x.x" 965 | }, 966 | "peerDependenciesMeta": { 967 | "webpack-dev-server": { 968 | "optional": true 969 | } 970 | } 971 | }, 972 | "node_modules/@xtuc/ieee754": { 973 | "version": "1.2.0", 974 | "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", 975 | "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", 976 | "dev": true, 977 | "license": "BSD-3-Clause" 978 | }, 979 | "node_modules/@xtuc/long": { 980 | "version": "4.2.2", 981 | "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", 982 | "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", 983 | "dev": true, 984 | "license": "Apache-2.0" 985 | }, 986 | "node_modules/acorn": { 987 | "version": "8.14.0", 988 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", 989 | "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", 990 | "dev": true, 991 | "license": "MIT", 992 | "bin": { 993 | "acorn": "bin/acorn" 994 | }, 995 | "engines": { 996 | "node": ">=0.4.0" 997 | } 998 | }, 999 | "node_modules/acorn-jsx": { 1000 | "version": "5.3.2", 1001 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 1002 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 1003 | "dev": true, 1004 | "license": "MIT", 1005 | "peerDependencies": { 1006 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 1007 | } 1008 | }, 1009 | "node_modules/acorn-walk": { 1010 | "version": "8.3.4", 1011 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", 1012 | "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", 1013 | "dev": true, 1014 | "license": "MIT", 1015 | "dependencies": { 1016 | "acorn": "^8.11.0" 1017 | }, 1018 | "engines": { 1019 | "node": ">=0.4.0" 1020 | } 1021 | }, 1022 | "node_modules/ajv": { 1023 | "version": "6.12.6", 1024 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 1025 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 1026 | "dev": true, 1027 | "license": "MIT", 1028 | "dependencies": { 1029 | "fast-deep-equal": "^3.1.1", 1030 | "fast-json-stable-stringify": "^2.0.0", 1031 | "json-schema-traverse": "^0.4.1", 1032 | "uri-js": "^4.2.2" 1033 | }, 1034 | "funding": { 1035 | "type": "github", 1036 | "url": "https://github.com/sponsors/epoberezkin" 1037 | } 1038 | }, 1039 | "node_modules/ajv-formats": { 1040 | "version": "2.1.1", 1041 | "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", 1042 | "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", 1043 | "dev": true, 1044 | "license": "MIT", 1045 | "dependencies": { 1046 | "ajv": "^8.0.0" 1047 | }, 1048 | "peerDependencies": { 1049 | "ajv": "^8.0.0" 1050 | }, 1051 | "peerDependenciesMeta": { 1052 | "ajv": { 1053 | "optional": true 1054 | } 1055 | } 1056 | }, 1057 | "node_modules/ajv-formats/node_modules/ajv": { 1058 | "version": "8.17.1", 1059 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", 1060 | "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", 1061 | "dev": true, 1062 | "license": "MIT", 1063 | "dependencies": { 1064 | "fast-deep-equal": "^3.1.3", 1065 | "fast-uri": "^3.0.1", 1066 | "json-schema-traverse": "^1.0.0", 1067 | "require-from-string": "^2.0.2" 1068 | }, 1069 | "funding": { 1070 | "type": "github", 1071 | "url": "https://github.com/sponsors/epoberezkin" 1072 | } 1073 | }, 1074 | "node_modules/ajv-formats/node_modules/json-schema-traverse": { 1075 | "version": "1.0.0", 1076 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 1077 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 1078 | "dev": true, 1079 | "license": "MIT" 1080 | }, 1081 | "node_modules/ansi-styles": { 1082 | "version": "4.3.0", 1083 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1084 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1085 | "dev": true, 1086 | "license": "MIT", 1087 | "dependencies": { 1088 | "color-convert": "^2.0.1" 1089 | }, 1090 | "engines": { 1091 | "node": ">=8" 1092 | }, 1093 | "funding": { 1094 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1095 | } 1096 | }, 1097 | "node_modules/arg": { 1098 | "version": "4.1.3", 1099 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", 1100 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 1101 | "dev": true, 1102 | "license": "MIT" 1103 | }, 1104 | "node_modules/argparse": { 1105 | "version": "2.0.1", 1106 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1107 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1108 | "dev": true, 1109 | "license": "Python-2.0" 1110 | }, 1111 | "node_modules/balanced-match": { 1112 | "version": "1.0.2", 1113 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1114 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1115 | "dev": true, 1116 | "license": "MIT" 1117 | }, 1118 | "node_modules/brace-expansion": { 1119 | "version": "2.0.1", 1120 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 1121 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 1122 | "dev": true, 1123 | "license": "MIT", 1124 | "dependencies": { 1125 | "balanced-match": "^1.0.0" 1126 | } 1127 | }, 1128 | "node_modules/braces": { 1129 | "version": "3.0.3", 1130 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 1131 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 1132 | "dev": true, 1133 | "license": "MIT", 1134 | "dependencies": { 1135 | "fill-range": "^7.1.1" 1136 | }, 1137 | "engines": { 1138 | "node": ">=8" 1139 | } 1140 | }, 1141 | "node_modules/browserslist": { 1142 | "version": "4.24.4", 1143 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", 1144 | "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", 1145 | "dev": true, 1146 | "funding": [ 1147 | { 1148 | "type": "opencollective", 1149 | "url": "https://opencollective.com/browserslist" 1150 | }, 1151 | { 1152 | "type": "tidelift", 1153 | "url": "https://tidelift.com/funding/github/npm/browserslist" 1154 | }, 1155 | { 1156 | "type": "github", 1157 | "url": "https://github.com/sponsors/ai" 1158 | } 1159 | ], 1160 | "license": "MIT", 1161 | "dependencies": { 1162 | "caniuse-lite": "^1.0.30001688", 1163 | "electron-to-chromium": "^1.5.73", 1164 | "node-releases": "^2.0.19", 1165 | "update-browserslist-db": "^1.1.1" 1166 | }, 1167 | "bin": { 1168 | "browserslist": "cli.js" 1169 | }, 1170 | "engines": { 1171 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 1172 | } 1173 | }, 1174 | "node_modules/buffer-from": { 1175 | "version": "1.1.2", 1176 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 1177 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 1178 | "dev": true, 1179 | "license": "MIT" 1180 | }, 1181 | "node_modules/callsites": { 1182 | "version": "3.1.0", 1183 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1184 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1185 | "dev": true, 1186 | "license": "MIT", 1187 | "engines": { 1188 | "node": ">=6" 1189 | } 1190 | }, 1191 | "node_modules/caniuse-lite": { 1192 | "version": "1.0.30001697", 1193 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001697.tgz", 1194 | "integrity": "sha512-GwNPlWJin8E+d7Gxq96jxM6w0w+VFeyyXRsjU58emtkYqnbwHqXm5uT2uCmO0RQE9htWknOP4xtBlLmM/gWxvQ==", 1195 | "dev": true, 1196 | "funding": [ 1197 | { 1198 | "type": "opencollective", 1199 | "url": "https://opencollective.com/browserslist" 1200 | }, 1201 | { 1202 | "type": "tidelift", 1203 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 1204 | }, 1205 | { 1206 | "type": "github", 1207 | "url": "https://github.com/sponsors/ai" 1208 | } 1209 | ], 1210 | "license": "CC-BY-4.0" 1211 | }, 1212 | "node_modules/chalk": { 1213 | "version": "4.1.2", 1214 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1215 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1216 | "dev": true, 1217 | "license": "MIT", 1218 | "dependencies": { 1219 | "ansi-styles": "^4.1.0", 1220 | "supports-color": "^7.1.0" 1221 | }, 1222 | "engines": { 1223 | "node": ">=10" 1224 | }, 1225 | "funding": { 1226 | "url": "https://github.com/chalk/chalk?sponsor=1" 1227 | } 1228 | }, 1229 | "node_modules/chrome-trace-event": { 1230 | "version": "1.0.4", 1231 | "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", 1232 | "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", 1233 | "dev": true, 1234 | "license": "MIT", 1235 | "engines": { 1236 | "node": ">=6.0" 1237 | } 1238 | }, 1239 | "node_modules/clone-deep": { 1240 | "version": "4.0.1", 1241 | "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", 1242 | "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", 1243 | "dev": true, 1244 | "license": "MIT", 1245 | "dependencies": { 1246 | "is-plain-object": "^2.0.4", 1247 | "kind-of": "^6.0.2", 1248 | "shallow-clone": "^3.0.0" 1249 | }, 1250 | "engines": { 1251 | "node": ">=6" 1252 | } 1253 | }, 1254 | "node_modules/color-convert": { 1255 | "version": "2.0.1", 1256 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1257 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1258 | "dev": true, 1259 | "license": "MIT", 1260 | "dependencies": { 1261 | "color-name": "~1.1.4" 1262 | }, 1263 | "engines": { 1264 | "node": ">=7.0.0" 1265 | } 1266 | }, 1267 | "node_modules/color-name": { 1268 | "version": "1.1.4", 1269 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1270 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1271 | "dev": true, 1272 | "license": "MIT" 1273 | }, 1274 | "node_modules/colorette": { 1275 | "version": "2.0.20", 1276 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", 1277 | "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", 1278 | "dev": true, 1279 | "license": "MIT" 1280 | }, 1281 | "node_modules/commander": { 1282 | "version": "2.20.3", 1283 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 1284 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 1285 | "dev": true, 1286 | "license": "MIT" 1287 | }, 1288 | "node_modules/concat-map": { 1289 | "version": "0.0.1", 1290 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1291 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 1292 | "dev": true, 1293 | "license": "MIT" 1294 | }, 1295 | "node_modules/create-require": { 1296 | "version": "1.1.1", 1297 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", 1298 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 1299 | "dev": true, 1300 | "license": "MIT" 1301 | }, 1302 | "node_modules/cross-spawn": { 1303 | "version": "7.0.6", 1304 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", 1305 | "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", 1306 | "dev": true, 1307 | "license": "MIT", 1308 | "dependencies": { 1309 | "path-key": "^3.1.0", 1310 | "shebang-command": "^2.0.0", 1311 | "which": "^2.0.1" 1312 | }, 1313 | "engines": { 1314 | "node": ">= 8" 1315 | } 1316 | }, 1317 | "node_modules/debug": { 1318 | "version": "4.4.0", 1319 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", 1320 | "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", 1321 | "license": "MIT", 1322 | "dependencies": { 1323 | "ms": "^2.1.3" 1324 | }, 1325 | "engines": { 1326 | "node": ">=6.0" 1327 | }, 1328 | "peerDependenciesMeta": { 1329 | "supports-color": { 1330 | "optional": true 1331 | } 1332 | } 1333 | }, 1334 | "node_modules/deep-is": { 1335 | "version": "0.1.4", 1336 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 1337 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 1338 | "dev": true, 1339 | "license": "MIT" 1340 | }, 1341 | "node_modules/diff": { 1342 | "version": "4.0.2", 1343 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 1344 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 1345 | "dev": true, 1346 | "license": "BSD-3-Clause", 1347 | "engines": { 1348 | "node": ">=0.3.1" 1349 | } 1350 | }, 1351 | "node_modules/electron-to-chromium": { 1352 | "version": "1.5.92", 1353 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.92.tgz", 1354 | "integrity": "sha512-BeHgmNobs05N1HMmMZ7YIuHfYBGlq/UmvlsTgg+fsbFs9xVMj+xJHFg19GN04+9Q+r8Xnh9LXqaYIyEWElnNgQ==", 1355 | "dev": true, 1356 | "license": "ISC" 1357 | }, 1358 | "node_modules/enhanced-resolve": { 1359 | "version": "5.18.1", 1360 | "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", 1361 | "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", 1362 | "dev": true, 1363 | "license": "MIT", 1364 | "dependencies": { 1365 | "graceful-fs": "^4.2.4", 1366 | "tapable": "^2.2.0" 1367 | }, 1368 | "engines": { 1369 | "node": ">=10.13.0" 1370 | } 1371 | }, 1372 | "node_modules/envinfo": { 1373 | "version": "7.14.0", 1374 | "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", 1375 | "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", 1376 | "dev": true, 1377 | "license": "MIT", 1378 | "bin": { 1379 | "envinfo": "dist/cli.js" 1380 | }, 1381 | "engines": { 1382 | "node": ">=4" 1383 | } 1384 | }, 1385 | "node_modules/es-module-lexer": { 1386 | "version": "1.6.0", 1387 | "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", 1388 | "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", 1389 | "dev": true, 1390 | "license": "MIT" 1391 | }, 1392 | "node_modules/escalade": { 1393 | "version": "3.2.0", 1394 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 1395 | "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", 1396 | "dev": true, 1397 | "license": "MIT", 1398 | "engines": { 1399 | "node": ">=6" 1400 | } 1401 | }, 1402 | "node_modules/escape-string-regexp": { 1403 | "version": "4.0.0", 1404 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 1405 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 1406 | "dev": true, 1407 | "license": "MIT", 1408 | "engines": { 1409 | "node": ">=10" 1410 | }, 1411 | "funding": { 1412 | "url": "https://github.com/sponsors/sindresorhus" 1413 | } 1414 | }, 1415 | "node_modules/eslint": { 1416 | "version": "9.19.0", 1417 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.19.0.tgz", 1418 | "integrity": "sha512-ug92j0LepKlbbEv6hD911THhoRHmbdXt2gX+VDABAW/Ir7D3nqKdv5Pf5vtlyY6HQMTEP2skXY43ueqTCWssEA==", 1419 | "dev": true, 1420 | "license": "MIT", 1421 | "dependencies": { 1422 | "@eslint-community/eslint-utils": "^4.2.0", 1423 | "@eslint-community/regexpp": "^4.12.1", 1424 | "@eslint/config-array": "^0.19.0", 1425 | "@eslint/core": "^0.10.0", 1426 | "@eslint/eslintrc": "^3.2.0", 1427 | "@eslint/js": "9.19.0", 1428 | "@eslint/plugin-kit": "^0.2.5", 1429 | "@humanfs/node": "^0.16.6", 1430 | "@humanwhocodes/module-importer": "^1.0.1", 1431 | "@humanwhocodes/retry": "^0.4.1", 1432 | "@types/estree": "^1.0.6", 1433 | "@types/json-schema": "^7.0.15", 1434 | "ajv": "^6.12.4", 1435 | "chalk": "^4.0.0", 1436 | "cross-spawn": "^7.0.6", 1437 | "debug": "^4.3.2", 1438 | "escape-string-regexp": "^4.0.0", 1439 | "eslint-scope": "^8.2.0", 1440 | "eslint-visitor-keys": "^4.2.0", 1441 | "espree": "^10.3.0", 1442 | "esquery": "^1.5.0", 1443 | "esutils": "^2.0.2", 1444 | "fast-deep-equal": "^3.1.3", 1445 | "file-entry-cache": "^8.0.0", 1446 | "find-up": "^5.0.0", 1447 | "glob-parent": "^6.0.2", 1448 | "ignore": "^5.2.0", 1449 | "imurmurhash": "^0.1.4", 1450 | "is-glob": "^4.0.0", 1451 | "json-stable-stringify-without-jsonify": "^1.0.1", 1452 | "lodash.merge": "^4.6.2", 1453 | "minimatch": "^3.1.2", 1454 | "natural-compare": "^1.4.0", 1455 | "optionator": "^0.9.3" 1456 | }, 1457 | "bin": { 1458 | "eslint": "bin/eslint.js" 1459 | }, 1460 | "engines": { 1461 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1462 | }, 1463 | "funding": { 1464 | "url": "https://eslint.org/donate" 1465 | }, 1466 | "peerDependencies": { 1467 | "jiti": "*" 1468 | }, 1469 | "peerDependenciesMeta": { 1470 | "jiti": { 1471 | "optional": true 1472 | } 1473 | } 1474 | }, 1475 | "node_modules/eslint-scope": { 1476 | "version": "8.2.0", 1477 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", 1478 | "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", 1479 | "dev": true, 1480 | "license": "BSD-2-Clause", 1481 | "dependencies": { 1482 | "esrecurse": "^4.3.0", 1483 | "estraverse": "^5.2.0" 1484 | }, 1485 | "engines": { 1486 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1487 | }, 1488 | "funding": { 1489 | "url": "https://opencollective.com/eslint" 1490 | } 1491 | }, 1492 | "node_modules/eslint-visitor-keys": { 1493 | "version": "3.4.3", 1494 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 1495 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 1496 | "dev": true, 1497 | "license": "Apache-2.0", 1498 | "engines": { 1499 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1500 | }, 1501 | "funding": { 1502 | "url": "https://opencollective.com/eslint" 1503 | } 1504 | }, 1505 | "node_modules/eslint/node_modules/brace-expansion": { 1506 | "version": "1.1.11", 1507 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1508 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1509 | "dev": true, 1510 | "license": "MIT", 1511 | "dependencies": { 1512 | "balanced-match": "^1.0.0", 1513 | "concat-map": "0.0.1" 1514 | } 1515 | }, 1516 | "node_modules/eslint/node_modules/eslint-visitor-keys": { 1517 | "version": "4.2.0", 1518 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", 1519 | "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", 1520 | "dev": true, 1521 | "license": "Apache-2.0", 1522 | "engines": { 1523 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1524 | }, 1525 | "funding": { 1526 | "url": "https://opencollective.com/eslint" 1527 | } 1528 | }, 1529 | "node_modules/eslint/node_modules/minimatch": { 1530 | "version": "3.1.2", 1531 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1532 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1533 | "dev": true, 1534 | "license": "ISC", 1535 | "dependencies": { 1536 | "brace-expansion": "^1.1.7" 1537 | }, 1538 | "engines": { 1539 | "node": "*" 1540 | } 1541 | }, 1542 | "node_modules/espree": { 1543 | "version": "10.3.0", 1544 | "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", 1545 | "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", 1546 | "dev": true, 1547 | "license": "BSD-2-Clause", 1548 | "dependencies": { 1549 | "acorn": "^8.14.0", 1550 | "acorn-jsx": "^5.3.2", 1551 | "eslint-visitor-keys": "^4.2.0" 1552 | }, 1553 | "engines": { 1554 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1555 | }, 1556 | "funding": { 1557 | "url": "https://opencollective.com/eslint" 1558 | } 1559 | }, 1560 | "node_modules/espree/node_modules/eslint-visitor-keys": { 1561 | "version": "4.2.0", 1562 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", 1563 | "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", 1564 | "dev": true, 1565 | "license": "Apache-2.0", 1566 | "engines": { 1567 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1568 | }, 1569 | "funding": { 1570 | "url": "https://opencollective.com/eslint" 1571 | } 1572 | }, 1573 | "node_modules/esquery": { 1574 | "version": "1.6.0", 1575 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", 1576 | "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", 1577 | "dev": true, 1578 | "license": "BSD-3-Clause", 1579 | "dependencies": { 1580 | "estraverse": "^5.1.0" 1581 | }, 1582 | "engines": { 1583 | "node": ">=0.10" 1584 | } 1585 | }, 1586 | "node_modules/esrecurse": { 1587 | "version": "4.3.0", 1588 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 1589 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 1590 | "dev": true, 1591 | "license": "BSD-2-Clause", 1592 | "dependencies": { 1593 | "estraverse": "^5.2.0" 1594 | }, 1595 | "engines": { 1596 | "node": ">=4.0" 1597 | } 1598 | }, 1599 | "node_modules/estraverse": { 1600 | "version": "5.3.0", 1601 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1602 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1603 | "dev": true, 1604 | "license": "BSD-2-Clause", 1605 | "engines": { 1606 | "node": ">=4.0" 1607 | } 1608 | }, 1609 | "node_modules/esutils": { 1610 | "version": "2.0.3", 1611 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1612 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1613 | "dev": true, 1614 | "license": "BSD-2-Clause", 1615 | "engines": { 1616 | "node": ">=0.10.0" 1617 | } 1618 | }, 1619 | "node_modules/events": { 1620 | "version": "3.3.0", 1621 | "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", 1622 | "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", 1623 | "dev": true, 1624 | "license": "MIT", 1625 | "engines": { 1626 | "node": ">=0.8.x" 1627 | } 1628 | }, 1629 | "node_modules/fasm-versions": { 1630 | "version": "1.1.0", 1631 | "resolved": "git+ssh://git@github.com/stevenwdv/fasm-versions.git#6ec44cda77d9af46636908efb01601e434b76a3e", 1632 | "license": "MIT" 1633 | }, 1634 | "node_modules/fast-deep-equal": { 1635 | "version": "3.1.3", 1636 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1637 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1638 | "dev": true, 1639 | "license": "MIT" 1640 | }, 1641 | "node_modules/fast-glob": { 1642 | "version": "3.3.3", 1643 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", 1644 | "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", 1645 | "dev": true, 1646 | "license": "MIT", 1647 | "dependencies": { 1648 | "@nodelib/fs.stat": "^2.0.2", 1649 | "@nodelib/fs.walk": "^1.2.3", 1650 | "glob-parent": "^5.1.2", 1651 | "merge2": "^1.3.0", 1652 | "micromatch": "^4.0.8" 1653 | }, 1654 | "engines": { 1655 | "node": ">=8.6.0" 1656 | } 1657 | }, 1658 | "node_modules/fast-glob/node_modules/glob-parent": { 1659 | "version": "5.1.2", 1660 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1661 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1662 | "dev": true, 1663 | "license": "ISC", 1664 | "dependencies": { 1665 | "is-glob": "^4.0.1" 1666 | }, 1667 | "engines": { 1668 | "node": ">= 6" 1669 | } 1670 | }, 1671 | "node_modules/fast-json-stable-stringify": { 1672 | "version": "2.1.0", 1673 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1674 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1675 | "dev": true, 1676 | "license": "MIT" 1677 | }, 1678 | "node_modules/fast-levenshtein": { 1679 | "version": "2.0.6", 1680 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1681 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 1682 | "dev": true, 1683 | "license": "MIT" 1684 | }, 1685 | "node_modules/fast-uri": { 1686 | "version": "3.0.6", 1687 | "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", 1688 | "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", 1689 | "dev": true, 1690 | "funding": [ 1691 | { 1692 | "type": "github", 1693 | "url": "https://github.com/sponsors/fastify" 1694 | }, 1695 | { 1696 | "type": "opencollective", 1697 | "url": "https://opencollective.com/fastify" 1698 | } 1699 | ], 1700 | "license": "BSD-3-Clause" 1701 | }, 1702 | "node_modules/fastest-levenshtein": { 1703 | "version": "1.0.16", 1704 | "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", 1705 | "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", 1706 | "dev": true, 1707 | "license": "MIT", 1708 | "engines": { 1709 | "node": ">= 4.9.1" 1710 | } 1711 | }, 1712 | "node_modules/fastq": { 1713 | "version": "1.19.0", 1714 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz", 1715 | "integrity": "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==", 1716 | "dev": true, 1717 | "license": "ISC", 1718 | "dependencies": { 1719 | "reusify": "^1.0.4" 1720 | } 1721 | }, 1722 | "node_modules/file-entry-cache": { 1723 | "version": "8.0.0", 1724 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", 1725 | "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", 1726 | "dev": true, 1727 | "license": "MIT", 1728 | "dependencies": { 1729 | "flat-cache": "^4.0.0" 1730 | }, 1731 | "engines": { 1732 | "node": ">=16.0.0" 1733 | } 1734 | }, 1735 | "node_modules/fill-range": { 1736 | "version": "7.1.1", 1737 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 1738 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 1739 | "dev": true, 1740 | "license": "MIT", 1741 | "dependencies": { 1742 | "to-regex-range": "^5.0.1" 1743 | }, 1744 | "engines": { 1745 | "node": ">=8" 1746 | } 1747 | }, 1748 | "node_modules/find-up": { 1749 | "version": "5.0.0", 1750 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 1751 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 1752 | "dev": true, 1753 | "license": "MIT", 1754 | "dependencies": { 1755 | "locate-path": "^6.0.0", 1756 | "path-exists": "^4.0.0" 1757 | }, 1758 | "engines": { 1759 | "node": ">=10" 1760 | }, 1761 | "funding": { 1762 | "url": "https://github.com/sponsors/sindresorhus" 1763 | } 1764 | }, 1765 | "node_modules/flat": { 1766 | "version": "5.0.2", 1767 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", 1768 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", 1769 | "dev": true, 1770 | "license": "BSD-3-Clause", 1771 | "bin": { 1772 | "flat": "cli.js" 1773 | } 1774 | }, 1775 | "node_modules/flat-cache": { 1776 | "version": "4.0.1", 1777 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", 1778 | "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", 1779 | "dev": true, 1780 | "license": "MIT", 1781 | "dependencies": { 1782 | "flatted": "^3.2.9", 1783 | "keyv": "^4.5.4" 1784 | }, 1785 | "engines": { 1786 | "node": ">=16" 1787 | } 1788 | }, 1789 | "node_modules/flatted": { 1790 | "version": "3.3.2", 1791 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", 1792 | "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", 1793 | "dev": true, 1794 | "license": "ISC" 1795 | }, 1796 | "node_modules/function-bind": { 1797 | "version": "1.1.2", 1798 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 1799 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 1800 | "dev": true, 1801 | "license": "MIT", 1802 | "funding": { 1803 | "url": "https://github.com/sponsors/ljharb" 1804 | } 1805 | }, 1806 | "node_modules/glob-parent": { 1807 | "version": "6.0.2", 1808 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1809 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1810 | "dev": true, 1811 | "license": "ISC", 1812 | "dependencies": { 1813 | "is-glob": "^4.0.3" 1814 | }, 1815 | "engines": { 1816 | "node": ">=10.13.0" 1817 | } 1818 | }, 1819 | "node_modules/glob-to-regexp": { 1820 | "version": "0.4.1", 1821 | "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", 1822 | "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", 1823 | "dev": true, 1824 | "license": "BSD-2-Clause" 1825 | }, 1826 | "node_modules/globals": { 1827 | "version": "14.0.0", 1828 | "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", 1829 | "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", 1830 | "dev": true, 1831 | "license": "MIT", 1832 | "engines": { 1833 | "node": ">=18" 1834 | }, 1835 | "funding": { 1836 | "url": "https://github.com/sponsors/sindresorhus" 1837 | } 1838 | }, 1839 | "node_modules/graceful-fs": { 1840 | "version": "4.2.11", 1841 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 1842 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 1843 | "dev": true, 1844 | "license": "ISC" 1845 | }, 1846 | "node_modules/graphemer": { 1847 | "version": "1.4.0", 1848 | "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 1849 | "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 1850 | "dev": true, 1851 | "license": "MIT" 1852 | }, 1853 | "node_modules/has-flag": { 1854 | "version": "4.0.0", 1855 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1856 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1857 | "dev": true, 1858 | "license": "MIT", 1859 | "engines": { 1860 | "node": ">=8" 1861 | } 1862 | }, 1863 | "node_modules/hasown": { 1864 | "version": "2.0.2", 1865 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 1866 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 1867 | "dev": true, 1868 | "license": "MIT", 1869 | "dependencies": { 1870 | "function-bind": "^1.1.2" 1871 | }, 1872 | "engines": { 1873 | "node": ">= 0.4" 1874 | } 1875 | }, 1876 | "node_modules/husky": { 1877 | "version": "9.1.7", 1878 | "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", 1879 | "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", 1880 | "dev": true, 1881 | "license": "MIT", 1882 | "bin": { 1883 | "husky": "bin.js" 1884 | }, 1885 | "engines": { 1886 | "node": ">=18" 1887 | }, 1888 | "funding": { 1889 | "url": "https://github.com/sponsors/typicode" 1890 | } 1891 | }, 1892 | "node_modules/ignore": { 1893 | "version": "5.3.2", 1894 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", 1895 | "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", 1896 | "dev": true, 1897 | "license": "MIT", 1898 | "engines": { 1899 | "node": ">= 4" 1900 | } 1901 | }, 1902 | "node_modules/import-fresh": { 1903 | "version": "3.3.1", 1904 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", 1905 | "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", 1906 | "dev": true, 1907 | "license": "MIT", 1908 | "dependencies": { 1909 | "parent-module": "^1.0.0", 1910 | "resolve-from": "^4.0.0" 1911 | }, 1912 | "engines": { 1913 | "node": ">=6" 1914 | }, 1915 | "funding": { 1916 | "url": "https://github.com/sponsors/sindresorhus" 1917 | } 1918 | }, 1919 | "node_modules/import-local": { 1920 | "version": "3.2.0", 1921 | "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", 1922 | "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", 1923 | "dev": true, 1924 | "license": "MIT", 1925 | "dependencies": { 1926 | "pkg-dir": "^4.2.0", 1927 | "resolve-cwd": "^3.0.0" 1928 | }, 1929 | "bin": { 1930 | "import-local-fixture": "fixtures/cli.js" 1931 | }, 1932 | "engines": { 1933 | "node": ">=8" 1934 | }, 1935 | "funding": { 1936 | "url": "https://github.com/sponsors/sindresorhus" 1937 | } 1938 | }, 1939 | "node_modules/imurmurhash": { 1940 | "version": "0.1.4", 1941 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1942 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 1943 | "dev": true, 1944 | "license": "MIT", 1945 | "engines": { 1946 | "node": ">=0.8.19" 1947 | } 1948 | }, 1949 | "node_modules/interpret": { 1950 | "version": "3.1.1", 1951 | "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", 1952 | "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", 1953 | "dev": true, 1954 | "license": "MIT", 1955 | "engines": { 1956 | "node": ">=10.13.0" 1957 | } 1958 | }, 1959 | "node_modules/is-core-module": { 1960 | "version": "2.16.1", 1961 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", 1962 | "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", 1963 | "dev": true, 1964 | "license": "MIT", 1965 | "dependencies": { 1966 | "hasown": "^2.0.2" 1967 | }, 1968 | "engines": { 1969 | "node": ">= 0.4" 1970 | }, 1971 | "funding": { 1972 | "url": "https://github.com/sponsors/ljharb" 1973 | } 1974 | }, 1975 | "node_modules/is-extglob": { 1976 | "version": "2.1.1", 1977 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1978 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1979 | "dev": true, 1980 | "license": "MIT", 1981 | "engines": { 1982 | "node": ">=0.10.0" 1983 | } 1984 | }, 1985 | "node_modules/is-glob": { 1986 | "version": "4.0.3", 1987 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1988 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1989 | "dev": true, 1990 | "license": "MIT", 1991 | "dependencies": { 1992 | "is-extglob": "^2.1.1" 1993 | }, 1994 | "engines": { 1995 | "node": ">=0.10.0" 1996 | } 1997 | }, 1998 | "node_modules/is-number": { 1999 | "version": "7.0.0", 2000 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 2001 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 2002 | "dev": true, 2003 | "license": "MIT", 2004 | "engines": { 2005 | "node": ">=0.12.0" 2006 | } 2007 | }, 2008 | "node_modules/is-plain-object": { 2009 | "version": "2.0.4", 2010 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 2011 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", 2012 | "dev": true, 2013 | "license": "MIT", 2014 | "dependencies": { 2015 | "isobject": "^3.0.1" 2016 | }, 2017 | "engines": { 2018 | "node": ">=0.10.0" 2019 | } 2020 | }, 2021 | "node_modules/isexe": { 2022 | "version": "2.0.0", 2023 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2024 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 2025 | "dev": true, 2026 | "license": "ISC" 2027 | }, 2028 | "node_modules/isobject": { 2029 | "version": "3.0.1", 2030 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 2031 | "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", 2032 | "dev": true, 2033 | "license": "MIT", 2034 | "engines": { 2035 | "node": ">=0.10.0" 2036 | } 2037 | }, 2038 | "node_modules/jest-worker": { 2039 | "version": "27.5.1", 2040 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", 2041 | "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", 2042 | "dev": true, 2043 | "license": "MIT", 2044 | "dependencies": { 2045 | "@types/node": "*", 2046 | "merge-stream": "^2.0.0", 2047 | "supports-color": "^8.0.0" 2048 | }, 2049 | "engines": { 2050 | "node": ">= 10.13.0" 2051 | } 2052 | }, 2053 | "node_modules/jest-worker/node_modules/supports-color": { 2054 | "version": "8.1.1", 2055 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 2056 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 2057 | "dev": true, 2058 | "license": "MIT", 2059 | "dependencies": { 2060 | "has-flag": "^4.0.0" 2061 | }, 2062 | "engines": { 2063 | "node": ">=10" 2064 | }, 2065 | "funding": { 2066 | "url": "https://github.com/chalk/supports-color?sponsor=1" 2067 | } 2068 | }, 2069 | "node_modules/js-yaml": { 2070 | "version": "4.1.0", 2071 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 2072 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 2073 | "dev": true, 2074 | "license": "MIT", 2075 | "dependencies": { 2076 | "argparse": "^2.0.1" 2077 | }, 2078 | "bin": { 2079 | "js-yaml": "bin/js-yaml.js" 2080 | } 2081 | }, 2082 | "node_modules/json-buffer": { 2083 | "version": "3.0.1", 2084 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 2085 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 2086 | "dev": true, 2087 | "license": "MIT" 2088 | }, 2089 | "node_modules/json-parse-even-better-errors": { 2090 | "version": "2.3.1", 2091 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 2092 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", 2093 | "dev": true, 2094 | "license": "MIT" 2095 | }, 2096 | "node_modules/json-schema-traverse": { 2097 | "version": "0.4.1", 2098 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 2099 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 2100 | "dev": true, 2101 | "license": "MIT" 2102 | }, 2103 | "node_modules/json-stable-stringify-without-jsonify": { 2104 | "version": "1.0.1", 2105 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 2106 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 2107 | "dev": true, 2108 | "license": "MIT" 2109 | }, 2110 | "node_modules/keyv": { 2111 | "version": "4.5.4", 2112 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", 2113 | "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 2114 | "dev": true, 2115 | "license": "MIT", 2116 | "dependencies": { 2117 | "json-buffer": "3.0.1" 2118 | } 2119 | }, 2120 | "node_modules/kind-of": { 2121 | "version": "6.0.3", 2122 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", 2123 | "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", 2124 | "dev": true, 2125 | "license": "MIT", 2126 | "engines": { 2127 | "node": ">=0.10.0" 2128 | } 2129 | }, 2130 | "node_modules/levn": { 2131 | "version": "0.4.1", 2132 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 2133 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 2134 | "dev": true, 2135 | "license": "MIT", 2136 | "dependencies": { 2137 | "prelude-ls": "^1.2.1", 2138 | "type-check": "~0.4.0" 2139 | }, 2140 | "engines": { 2141 | "node": ">= 0.8.0" 2142 | } 2143 | }, 2144 | "node_modules/loader-runner": { 2145 | "version": "4.3.0", 2146 | "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", 2147 | "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", 2148 | "dev": true, 2149 | "license": "MIT", 2150 | "engines": { 2151 | "node": ">=6.11.5" 2152 | } 2153 | }, 2154 | "node_modules/locate-path": { 2155 | "version": "6.0.0", 2156 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 2157 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 2158 | "dev": true, 2159 | "license": "MIT", 2160 | "dependencies": { 2161 | "p-locate": "^5.0.0" 2162 | }, 2163 | "engines": { 2164 | "node": ">=10" 2165 | }, 2166 | "funding": { 2167 | "url": "https://github.com/sponsors/sindresorhus" 2168 | } 2169 | }, 2170 | "node_modules/lodash.merge": { 2171 | "version": "4.6.2", 2172 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 2173 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 2174 | "dev": true, 2175 | "license": "MIT" 2176 | }, 2177 | "node_modules/make-error": { 2178 | "version": "1.3.6", 2179 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 2180 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 2181 | "dev": true, 2182 | "license": "ISC" 2183 | }, 2184 | "node_modules/merge-stream": { 2185 | "version": "2.0.0", 2186 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 2187 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 2188 | "dev": true, 2189 | "license": "MIT" 2190 | }, 2191 | "node_modules/merge2": { 2192 | "version": "1.4.1", 2193 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 2194 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 2195 | "dev": true, 2196 | "license": "MIT", 2197 | "engines": { 2198 | "node": ">= 8" 2199 | } 2200 | }, 2201 | "node_modules/micromatch": { 2202 | "version": "4.0.8", 2203 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", 2204 | "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", 2205 | "dev": true, 2206 | "license": "MIT", 2207 | "dependencies": { 2208 | "braces": "^3.0.3", 2209 | "picomatch": "^2.3.1" 2210 | }, 2211 | "engines": { 2212 | "node": ">=8.6" 2213 | } 2214 | }, 2215 | "node_modules/mime-db": { 2216 | "version": "1.52.0", 2217 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 2218 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 2219 | "dev": true, 2220 | "license": "MIT", 2221 | "engines": { 2222 | "node": ">= 0.6" 2223 | } 2224 | }, 2225 | "node_modules/mime-types": { 2226 | "version": "2.1.35", 2227 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 2228 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 2229 | "dev": true, 2230 | "license": "MIT", 2231 | "dependencies": { 2232 | "mime-db": "1.52.0" 2233 | }, 2234 | "engines": { 2235 | "node": ">= 0.6" 2236 | } 2237 | }, 2238 | "node_modules/minimatch": { 2239 | "version": "9.0.5", 2240 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 2241 | "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 2242 | "dev": true, 2243 | "license": "ISC", 2244 | "dependencies": { 2245 | "brace-expansion": "^2.0.1" 2246 | }, 2247 | "engines": { 2248 | "node": ">=16 || 14 >=14.17" 2249 | }, 2250 | "funding": { 2251 | "url": "https://github.com/sponsors/isaacs" 2252 | } 2253 | }, 2254 | "node_modules/ms": { 2255 | "version": "2.1.3", 2256 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2257 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 2258 | "license": "MIT" 2259 | }, 2260 | "node_modules/natural-compare": { 2261 | "version": "1.4.0", 2262 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 2263 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 2264 | "dev": true, 2265 | "license": "MIT" 2266 | }, 2267 | "node_modules/neo-async": { 2268 | "version": "2.6.2", 2269 | "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", 2270 | "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", 2271 | "dev": true, 2272 | "license": "MIT" 2273 | }, 2274 | "node_modules/node-releases": { 2275 | "version": "2.0.19", 2276 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", 2277 | "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", 2278 | "dev": true, 2279 | "license": "MIT" 2280 | }, 2281 | "node_modules/optionator": { 2282 | "version": "0.9.4", 2283 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", 2284 | "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", 2285 | "dev": true, 2286 | "license": "MIT", 2287 | "dependencies": { 2288 | "deep-is": "^0.1.3", 2289 | "fast-levenshtein": "^2.0.6", 2290 | "levn": "^0.4.1", 2291 | "prelude-ls": "^1.2.1", 2292 | "type-check": "^0.4.0", 2293 | "word-wrap": "^1.2.5" 2294 | }, 2295 | "engines": { 2296 | "node": ">= 0.8.0" 2297 | } 2298 | }, 2299 | "node_modules/p-limit": { 2300 | "version": "3.1.0", 2301 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 2302 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 2303 | "dev": true, 2304 | "license": "MIT", 2305 | "dependencies": { 2306 | "yocto-queue": "^0.1.0" 2307 | }, 2308 | "engines": { 2309 | "node": ">=10" 2310 | }, 2311 | "funding": { 2312 | "url": "https://github.com/sponsors/sindresorhus" 2313 | } 2314 | }, 2315 | "node_modules/p-locate": { 2316 | "version": "5.0.0", 2317 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 2318 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 2319 | "dev": true, 2320 | "license": "MIT", 2321 | "dependencies": { 2322 | "p-limit": "^3.0.2" 2323 | }, 2324 | "engines": { 2325 | "node": ">=10" 2326 | }, 2327 | "funding": { 2328 | "url": "https://github.com/sponsors/sindresorhus" 2329 | } 2330 | }, 2331 | "node_modules/p-try": { 2332 | "version": "2.2.0", 2333 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 2334 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 2335 | "dev": true, 2336 | "license": "MIT", 2337 | "engines": { 2338 | "node": ">=6" 2339 | } 2340 | }, 2341 | "node_modules/parent-module": { 2342 | "version": "1.0.1", 2343 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 2344 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 2345 | "dev": true, 2346 | "license": "MIT", 2347 | "dependencies": { 2348 | "callsites": "^3.0.0" 2349 | }, 2350 | "engines": { 2351 | "node": ">=6" 2352 | } 2353 | }, 2354 | "node_modules/path-exists": { 2355 | "version": "4.0.0", 2356 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 2357 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 2358 | "dev": true, 2359 | "license": "MIT", 2360 | "engines": { 2361 | "node": ">=8" 2362 | } 2363 | }, 2364 | "node_modules/path-key": { 2365 | "version": "3.1.1", 2366 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2367 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2368 | "dev": true, 2369 | "license": "MIT", 2370 | "engines": { 2371 | "node": ">=8" 2372 | } 2373 | }, 2374 | "node_modules/path-parse": { 2375 | "version": "1.0.7", 2376 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 2377 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 2378 | "dev": true, 2379 | "license": "MIT" 2380 | }, 2381 | "node_modules/picocolors": { 2382 | "version": "1.1.1", 2383 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 2384 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 2385 | "dev": true, 2386 | "license": "ISC" 2387 | }, 2388 | "node_modules/picomatch": { 2389 | "version": "2.3.1", 2390 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 2391 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 2392 | "dev": true, 2393 | "license": "MIT", 2394 | "engines": { 2395 | "node": ">=8.6" 2396 | }, 2397 | "funding": { 2398 | "url": "https://github.com/sponsors/jonschlinkert" 2399 | } 2400 | }, 2401 | "node_modules/pkg-dir": { 2402 | "version": "4.2.0", 2403 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 2404 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 2405 | "dev": true, 2406 | "license": "MIT", 2407 | "dependencies": { 2408 | "find-up": "^4.0.0" 2409 | }, 2410 | "engines": { 2411 | "node": ">=8" 2412 | } 2413 | }, 2414 | "node_modules/pkg-dir/node_modules/find-up": { 2415 | "version": "4.1.0", 2416 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 2417 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 2418 | "dev": true, 2419 | "license": "MIT", 2420 | "dependencies": { 2421 | "locate-path": "^5.0.0", 2422 | "path-exists": "^4.0.0" 2423 | }, 2424 | "engines": { 2425 | "node": ">=8" 2426 | } 2427 | }, 2428 | "node_modules/pkg-dir/node_modules/locate-path": { 2429 | "version": "5.0.0", 2430 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 2431 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 2432 | "dev": true, 2433 | "license": "MIT", 2434 | "dependencies": { 2435 | "p-locate": "^4.1.0" 2436 | }, 2437 | "engines": { 2438 | "node": ">=8" 2439 | } 2440 | }, 2441 | "node_modules/pkg-dir/node_modules/p-limit": { 2442 | "version": "2.3.0", 2443 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 2444 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 2445 | "dev": true, 2446 | "license": "MIT", 2447 | "dependencies": { 2448 | "p-try": "^2.0.0" 2449 | }, 2450 | "engines": { 2451 | "node": ">=6" 2452 | }, 2453 | "funding": { 2454 | "url": "https://github.com/sponsors/sindresorhus" 2455 | } 2456 | }, 2457 | "node_modules/pkg-dir/node_modules/p-locate": { 2458 | "version": "4.1.0", 2459 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 2460 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 2461 | "dev": true, 2462 | "license": "MIT", 2463 | "dependencies": { 2464 | "p-limit": "^2.2.0" 2465 | }, 2466 | "engines": { 2467 | "node": ">=8" 2468 | } 2469 | }, 2470 | "node_modules/prelude-ls": { 2471 | "version": "1.2.1", 2472 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 2473 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 2474 | "dev": true, 2475 | "license": "MIT", 2476 | "engines": { 2477 | "node": ">= 0.8.0" 2478 | } 2479 | }, 2480 | "node_modules/punycode": { 2481 | "version": "2.3.1", 2482 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 2483 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 2484 | "dev": true, 2485 | "license": "MIT", 2486 | "engines": { 2487 | "node": ">=6" 2488 | } 2489 | }, 2490 | "node_modules/queue-microtask": { 2491 | "version": "1.2.3", 2492 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 2493 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 2494 | "dev": true, 2495 | "funding": [ 2496 | { 2497 | "type": "github", 2498 | "url": "https://github.com/sponsors/feross" 2499 | }, 2500 | { 2501 | "type": "patreon", 2502 | "url": "https://www.patreon.com/feross" 2503 | }, 2504 | { 2505 | "type": "consulting", 2506 | "url": "https://feross.org/support" 2507 | } 2508 | ], 2509 | "license": "MIT" 2510 | }, 2511 | "node_modules/randombytes": { 2512 | "version": "2.1.0", 2513 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 2514 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 2515 | "dev": true, 2516 | "license": "MIT", 2517 | "dependencies": { 2518 | "safe-buffer": "^5.1.0" 2519 | } 2520 | }, 2521 | "node_modules/rechoir": { 2522 | "version": "0.8.0", 2523 | "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", 2524 | "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", 2525 | "dev": true, 2526 | "license": "MIT", 2527 | "dependencies": { 2528 | "resolve": "^1.20.0" 2529 | }, 2530 | "engines": { 2531 | "node": ">= 10.13.0" 2532 | } 2533 | }, 2534 | "node_modules/require-from-string": { 2535 | "version": "2.0.2", 2536 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 2537 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 2538 | "dev": true, 2539 | "license": "MIT", 2540 | "engines": { 2541 | "node": ">=0.10.0" 2542 | } 2543 | }, 2544 | "node_modules/resolve": { 2545 | "version": "1.22.10", 2546 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", 2547 | "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", 2548 | "dev": true, 2549 | "license": "MIT", 2550 | "dependencies": { 2551 | "is-core-module": "^2.16.0", 2552 | "path-parse": "^1.0.7", 2553 | "supports-preserve-symlinks-flag": "^1.0.0" 2554 | }, 2555 | "bin": { 2556 | "resolve": "bin/resolve" 2557 | }, 2558 | "engines": { 2559 | "node": ">= 0.4" 2560 | }, 2561 | "funding": { 2562 | "url": "https://github.com/sponsors/ljharb" 2563 | } 2564 | }, 2565 | "node_modules/resolve-cwd": { 2566 | "version": "3.0.0", 2567 | "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", 2568 | "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", 2569 | "dev": true, 2570 | "license": "MIT", 2571 | "dependencies": { 2572 | "resolve-from": "^5.0.0" 2573 | }, 2574 | "engines": { 2575 | "node": ">=8" 2576 | } 2577 | }, 2578 | "node_modules/resolve-cwd/node_modules/resolve-from": { 2579 | "version": "5.0.0", 2580 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 2581 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", 2582 | "dev": true, 2583 | "license": "MIT", 2584 | "engines": { 2585 | "node": ">=8" 2586 | } 2587 | }, 2588 | "node_modules/resolve-from": { 2589 | "version": "4.0.0", 2590 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 2591 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 2592 | "dev": true, 2593 | "license": "MIT", 2594 | "engines": { 2595 | "node": ">=4" 2596 | } 2597 | }, 2598 | "node_modules/reusify": { 2599 | "version": "1.0.4", 2600 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 2601 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 2602 | "dev": true, 2603 | "license": "MIT", 2604 | "engines": { 2605 | "iojs": ">=1.0.0", 2606 | "node": ">=0.10.0" 2607 | } 2608 | }, 2609 | "node_modules/run-parallel": { 2610 | "version": "1.2.0", 2611 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 2612 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 2613 | "dev": true, 2614 | "funding": [ 2615 | { 2616 | "type": "github", 2617 | "url": "https://github.com/sponsors/feross" 2618 | }, 2619 | { 2620 | "type": "patreon", 2621 | "url": "https://www.patreon.com/feross" 2622 | }, 2623 | { 2624 | "type": "consulting", 2625 | "url": "https://feross.org/support" 2626 | } 2627 | ], 2628 | "license": "MIT", 2629 | "dependencies": { 2630 | "queue-microtask": "^1.2.2" 2631 | } 2632 | }, 2633 | "node_modules/safe-buffer": { 2634 | "version": "5.2.1", 2635 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 2636 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 2637 | "dev": true, 2638 | "funding": [ 2639 | { 2640 | "type": "github", 2641 | "url": "https://github.com/sponsors/feross" 2642 | }, 2643 | { 2644 | "type": "patreon", 2645 | "url": "https://www.patreon.com/feross" 2646 | }, 2647 | { 2648 | "type": "consulting", 2649 | "url": "https://feross.org/support" 2650 | } 2651 | ], 2652 | "license": "MIT" 2653 | }, 2654 | "node_modules/schema-utils": { 2655 | "version": "4.3.0", 2656 | "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", 2657 | "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", 2658 | "dev": true, 2659 | "license": "MIT", 2660 | "dependencies": { 2661 | "@types/json-schema": "^7.0.9", 2662 | "ajv": "^8.9.0", 2663 | "ajv-formats": "^2.1.1", 2664 | "ajv-keywords": "^5.1.0" 2665 | }, 2666 | "engines": { 2667 | "node": ">= 10.13.0" 2668 | }, 2669 | "funding": { 2670 | "type": "opencollective", 2671 | "url": "https://opencollective.com/webpack" 2672 | } 2673 | }, 2674 | "node_modules/schema-utils/node_modules/ajv": { 2675 | "version": "8.17.1", 2676 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", 2677 | "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", 2678 | "dev": true, 2679 | "license": "MIT", 2680 | "dependencies": { 2681 | "fast-deep-equal": "^3.1.3", 2682 | "fast-uri": "^3.0.1", 2683 | "json-schema-traverse": "^1.0.0", 2684 | "require-from-string": "^2.0.2" 2685 | }, 2686 | "funding": { 2687 | "type": "github", 2688 | "url": "https://github.com/sponsors/epoberezkin" 2689 | } 2690 | }, 2691 | "node_modules/schema-utils/node_modules/ajv-keywords": { 2692 | "version": "5.1.0", 2693 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", 2694 | "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", 2695 | "dev": true, 2696 | "license": "MIT", 2697 | "dependencies": { 2698 | "fast-deep-equal": "^3.1.3" 2699 | }, 2700 | "peerDependencies": { 2701 | "ajv": "^8.8.2" 2702 | } 2703 | }, 2704 | "node_modules/schema-utils/node_modules/json-schema-traverse": { 2705 | "version": "1.0.0", 2706 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 2707 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 2708 | "dev": true, 2709 | "license": "MIT" 2710 | }, 2711 | "node_modules/semver": { 2712 | "version": "6.3.1", 2713 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 2714 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 2715 | "license": "ISC", 2716 | "bin": { 2717 | "semver": "bin/semver.js" 2718 | } 2719 | }, 2720 | "node_modules/serialize-javascript": { 2721 | "version": "6.0.2", 2722 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", 2723 | "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", 2724 | "dev": true, 2725 | "license": "BSD-3-Clause", 2726 | "dependencies": { 2727 | "randombytes": "^2.1.0" 2728 | } 2729 | }, 2730 | "node_modules/shallow-clone": { 2731 | "version": "3.0.1", 2732 | "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", 2733 | "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", 2734 | "dev": true, 2735 | "license": "MIT", 2736 | "dependencies": { 2737 | "kind-of": "^6.0.2" 2738 | }, 2739 | "engines": { 2740 | "node": ">=8" 2741 | } 2742 | }, 2743 | "node_modules/shebang-command": { 2744 | "version": "2.0.0", 2745 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2746 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2747 | "dev": true, 2748 | "license": "MIT", 2749 | "dependencies": { 2750 | "shebang-regex": "^3.0.0" 2751 | }, 2752 | "engines": { 2753 | "node": ">=8" 2754 | } 2755 | }, 2756 | "node_modules/shebang-regex": { 2757 | "version": "3.0.0", 2758 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2759 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2760 | "dev": true, 2761 | "license": "MIT", 2762 | "engines": { 2763 | "node": ">=8" 2764 | } 2765 | }, 2766 | "node_modules/simple-git": { 2767 | "version": "3.27.0", 2768 | "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.27.0.tgz", 2769 | "integrity": "sha512-ivHoFS9Yi9GY49ogc6/YAi3Fl9ROnF4VyubNylgCkA+RVqLaKWnDSzXOVzya8csELIaWaYNutsEuAhZrtOjozA==", 2770 | "license": "MIT", 2771 | "dependencies": { 2772 | "@kwsites/file-exists": "^1.1.1", 2773 | "@kwsites/promise-deferred": "^1.1.1", 2774 | "debug": "^4.3.5" 2775 | }, 2776 | "funding": { 2777 | "type": "github", 2778 | "url": "https://github.com/steveukx/git-js?sponsor=1" 2779 | } 2780 | }, 2781 | "node_modules/source-map": { 2782 | "version": "0.6.1", 2783 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2784 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2785 | "dev": true, 2786 | "license": "BSD-3-Clause", 2787 | "engines": { 2788 | "node": ">=0.10.0" 2789 | } 2790 | }, 2791 | "node_modules/source-map-support": { 2792 | "version": "0.5.21", 2793 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 2794 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 2795 | "dev": true, 2796 | "license": "MIT", 2797 | "dependencies": { 2798 | "buffer-from": "^1.0.0", 2799 | "source-map": "^0.6.0" 2800 | } 2801 | }, 2802 | "node_modules/strip-json-comments": { 2803 | "version": "3.1.1", 2804 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 2805 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 2806 | "dev": true, 2807 | "license": "MIT", 2808 | "engines": { 2809 | "node": ">=8" 2810 | }, 2811 | "funding": { 2812 | "url": "https://github.com/sponsors/sindresorhus" 2813 | } 2814 | }, 2815 | "node_modules/supports-color": { 2816 | "version": "7.2.0", 2817 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2818 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2819 | "dev": true, 2820 | "license": "MIT", 2821 | "dependencies": { 2822 | "has-flag": "^4.0.0" 2823 | }, 2824 | "engines": { 2825 | "node": ">=8" 2826 | } 2827 | }, 2828 | "node_modules/supports-preserve-symlinks-flag": { 2829 | "version": "1.0.0", 2830 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 2831 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 2832 | "dev": true, 2833 | "license": "MIT", 2834 | "engines": { 2835 | "node": ">= 0.4" 2836 | }, 2837 | "funding": { 2838 | "url": "https://github.com/sponsors/ljharb" 2839 | } 2840 | }, 2841 | "node_modules/tapable": { 2842 | "version": "2.2.1", 2843 | "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", 2844 | "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", 2845 | "dev": true, 2846 | "license": "MIT", 2847 | "engines": { 2848 | "node": ">=6" 2849 | } 2850 | }, 2851 | "node_modules/terser": { 2852 | "version": "5.38.0", 2853 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.38.0.tgz", 2854 | "integrity": "sha512-a4GD5R1TjEeuCT6ZRiYMHmIf7okbCPEuhQET8bczV6FrQMMlFXA1n+G0KKjdlFCm3TEHV77GxfZB3vZSUQGFpg==", 2855 | "dev": true, 2856 | "license": "BSD-2-Clause", 2857 | "dependencies": { 2858 | "@jridgewell/source-map": "^0.3.3", 2859 | "acorn": "^8.8.2", 2860 | "commander": "^2.20.0", 2861 | "source-map-support": "~0.5.20" 2862 | }, 2863 | "bin": { 2864 | "terser": "bin/terser" 2865 | }, 2866 | "engines": { 2867 | "node": ">=10" 2868 | } 2869 | }, 2870 | "node_modules/terser-webpack-plugin": { 2871 | "version": "5.3.14", 2872 | "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", 2873 | "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", 2874 | "dev": true, 2875 | "license": "MIT", 2876 | "dependencies": { 2877 | "@jridgewell/trace-mapping": "^0.3.25", 2878 | "jest-worker": "^27.4.5", 2879 | "schema-utils": "^4.3.0", 2880 | "serialize-javascript": "^6.0.2", 2881 | "terser": "^5.31.1" 2882 | }, 2883 | "engines": { 2884 | "node": ">= 10.13.0" 2885 | }, 2886 | "funding": { 2887 | "type": "opencollective", 2888 | "url": "https://opencollective.com/webpack" 2889 | }, 2890 | "peerDependencies": { 2891 | "webpack": "^5.1.0" 2892 | }, 2893 | "peerDependenciesMeta": { 2894 | "@swc/core": { 2895 | "optional": true 2896 | }, 2897 | "esbuild": { 2898 | "optional": true 2899 | }, 2900 | "uglify-js": { 2901 | "optional": true 2902 | } 2903 | } 2904 | }, 2905 | "node_modules/to-regex-range": { 2906 | "version": "5.0.1", 2907 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2908 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2909 | "dev": true, 2910 | "license": "MIT", 2911 | "dependencies": { 2912 | "is-number": "^7.0.0" 2913 | }, 2914 | "engines": { 2915 | "node": ">=8.0" 2916 | } 2917 | }, 2918 | "node_modules/ts-api-utils": { 2919 | "version": "2.0.1", 2920 | "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", 2921 | "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", 2922 | "dev": true, 2923 | "license": "MIT", 2924 | "engines": { 2925 | "node": ">=18.12" 2926 | }, 2927 | "peerDependencies": { 2928 | "typescript": ">=4.8.4" 2929 | } 2930 | }, 2931 | "node_modules/ts-loader": { 2932 | "version": "9.5.2", 2933 | "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.2.tgz", 2934 | "integrity": "sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==", 2935 | "dev": true, 2936 | "license": "MIT", 2937 | "dependencies": { 2938 | "chalk": "^4.1.0", 2939 | "enhanced-resolve": "^5.0.0", 2940 | "micromatch": "^4.0.0", 2941 | "semver": "^7.3.4", 2942 | "source-map": "^0.7.4" 2943 | }, 2944 | "engines": { 2945 | "node": ">=12.0.0" 2946 | }, 2947 | "peerDependencies": { 2948 | "typescript": "*", 2949 | "webpack": "^5.0.0" 2950 | } 2951 | }, 2952 | "node_modules/ts-loader/node_modules/semver": { 2953 | "version": "7.7.1", 2954 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", 2955 | "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", 2956 | "dev": true, 2957 | "license": "ISC", 2958 | "bin": { 2959 | "semver": "bin/semver.js" 2960 | }, 2961 | "engines": { 2962 | "node": ">=10" 2963 | } 2964 | }, 2965 | "node_modules/ts-loader/node_modules/source-map": { 2966 | "version": "0.7.4", 2967 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", 2968 | "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", 2969 | "dev": true, 2970 | "license": "BSD-3-Clause", 2971 | "engines": { 2972 | "node": ">= 8" 2973 | } 2974 | }, 2975 | "node_modules/ts-node": { 2976 | "version": "10.9.2", 2977 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", 2978 | "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", 2979 | "dev": true, 2980 | "license": "MIT", 2981 | "dependencies": { 2982 | "@cspotcode/source-map-support": "^0.8.0", 2983 | "@tsconfig/node10": "^1.0.7", 2984 | "@tsconfig/node12": "^1.0.7", 2985 | "@tsconfig/node14": "^1.0.0", 2986 | "@tsconfig/node16": "^1.0.2", 2987 | "acorn": "^8.4.1", 2988 | "acorn-walk": "^8.1.1", 2989 | "arg": "^4.1.0", 2990 | "create-require": "^1.1.0", 2991 | "diff": "^4.0.1", 2992 | "make-error": "^1.1.1", 2993 | "v8-compile-cache-lib": "^3.0.1", 2994 | "yn": "3.1.1" 2995 | }, 2996 | "bin": { 2997 | "ts-node": "dist/bin.js", 2998 | "ts-node-cwd": "dist/bin-cwd.js", 2999 | "ts-node-esm": "dist/bin-esm.js", 3000 | "ts-node-script": "dist/bin-script.js", 3001 | "ts-node-transpile-only": "dist/bin-transpile.js", 3002 | "ts-script": "dist/bin-script-deprecated.js" 3003 | }, 3004 | "peerDependencies": { 3005 | "@swc/core": ">=1.2.50", 3006 | "@swc/wasm": ">=1.2.50", 3007 | "@types/node": "*", 3008 | "typescript": ">=2.7" 3009 | }, 3010 | "peerDependenciesMeta": { 3011 | "@swc/core": { 3012 | "optional": true 3013 | }, 3014 | "@swc/wasm": { 3015 | "optional": true 3016 | } 3017 | } 3018 | }, 3019 | "node_modules/tunnel": { 3020 | "version": "0.0.6", 3021 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", 3022 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", 3023 | "license": "MIT", 3024 | "engines": { 3025 | "node": ">=0.6.11 <=0.7.0 || >=0.7.3" 3026 | } 3027 | }, 3028 | "node_modules/type-check": { 3029 | "version": "0.4.0", 3030 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 3031 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 3032 | "dev": true, 3033 | "license": "MIT", 3034 | "dependencies": { 3035 | "prelude-ls": "^1.2.1" 3036 | }, 3037 | "engines": { 3038 | "node": ">= 0.8.0" 3039 | } 3040 | }, 3041 | "node_modules/typescript": { 3042 | "version": "5.7.3", 3043 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", 3044 | "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", 3045 | "dev": true, 3046 | "license": "Apache-2.0", 3047 | "bin": { 3048 | "tsc": "bin/tsc", 3049 | "tsserver": "bin/tsserver" 3050 | }, 3051 | "engines": { 3052 | "node": ">=14.17" 3053 | } 3054 | }, 3055 | "node_modules/undici": { 3056 | "version": "5.29.0", 3057 | "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", 3058 | "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", 3059 | "license": "MIT", 3060 | "dependencies": { 3061 | "@fastify/busboy": "^2.0.0" 3062 | }, 3063 | "engines": { 3064 | "node": ">=14.0" 3065 | } 3066 | }, 3067 | "node_modules/undici-types": { 3068 | "version": "6.19.8", 3069 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", 3070 | "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", 3071 | "dev": true, 3072 | "license": "MIT" 3073 | }, 3074 | "node_modules/update-browserslist-db": { 3075 | "version": "1.1.2", 3076 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", 3077 | "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", 3078 | "dev": true, 3079 | "funding": [ 3080 | { 3081 | "type": "opencollective", 3082 | "url": "https://opencollective.com/browserslist" 3083 | }, 3084 | { 3085 | "type": "tidelift", 3086 | "url": "https://tidelift.com/funding/github/npm/browserslist" 3087 | }, 3088 | { 3089 | "type": "github", 3090 | "url": "https://github.com/sponsors/ai" 3091 | } 3092 | ], 3093 | "license": "MIT", 3094 | "dependencies": { 3095 | "escalade": "^3.2.0", 3096 | "picocolors": "^1.1.1" 3097 | }, 3098 | "bin": { 3099 | "update-browserslist-db": "cli.js" 3100 | }, 3101 | "peerDependencies": { 3102 | "browserslist": ">= 4.21.0" 3103 | } 3104 | }, 3105 | "node_modules/uri-js": { 3106 | "version": "4.4.1", 3107 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 3108 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 3109 | "dev": true, 3110 | "license": "BSD-2-Clause", 3111 | "dependencies": { 3112 | "punycode": "^2.1.0" 3113 | } 3114 | }, 3115 | "node_modules/v8-compile-cache-lib": { 3116 | "version": "3.0.1", 3117 | "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", 3118 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", 3119 | "dev": true, 3120 | "license": "MIT" 3121 | }, 3122 | "node_modules/watchpack": { 3123 | "version": "2.4.2", 3124 | "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", 3125 | "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", 3126 | "dev": true, 3127 | "license": "MIT", 3128 | "dependencies": { 3129 | "glob-to-regexp": "^0.4.1", 3130 | "graceful-fs": "^4.1.2" 3131 | }, 3132 | "engines": { 3133 | "node": ">=10.13.0" 3134 | } 3135 | }, 3136 | "node_modules/webpack": { 3137 | "version": "5.99.5", 3138 | "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.5.tgz", 3139 | "integrity": "sha512-q+vHBa6H9qwBLUlHL4Y7L0L1/LlyBKZtS9FHNCQmtayxjI5RKC9yD8gpvLeqGv5lCQp1Re04yi0MF40pf30Pvg==", 3140 | "dev": true, 3141 | "license": "MIT", 3142 | "dependencies": { 3143 | "@types/eslint-scope": "^3.7.7", 3144 | "@types/estree": "^1.0.6", 3145 | "@webassemblyjs/ast": "^1.14.1", 3146 | "@webassemblyjs/wasm-edit": "^1.14.1", 3147 | "@webassemblyjs/wasm-parser": "^1.14.1", 3148 | "acorn": "^8.14.0", 3149 | "browserslist": "^4.24.0", 3150 | "chrome-trace-event": "^1.0.2", 3151 | "enhanced-resolve": "^5.17.1", 3152 | "es-module-lexer": "^1.2.1", 3153 | "eslint-scope": "5.1.1", 3154 | "events": "^3.2.0", 3155 | "glob-to-regexp": "^0.4.1", 3156 | "graceful-fs": "^4.2.11", 3157 | "json-parse-even-better-errors": "^2.3.1", 3158 | "loader-runner": "^4.2.0", 3159 | "mime-types": "^2.1.27", 3160 | "neo-async": "^2.6.2", 3161 | "schema-utils": "^4.3.0", 3162 | "tapable": "^2.1.1", 3163 | "terser-webpack-plugin": "^5.3.11", 3164 | "watchpack": "^2.4.1", 3165 | "webpack-sources": "^3.2.3" 3166 | }, 3167 | "bin": { 3168 | "webpack": "bin/webpack.js" 3169 | }, 3170 | "engines": { 3171 | "node": ">=10.13.0" 3172 | }, 3173 | "funding": { 3174 | "type": "opencollective", 3175 | "url": "https://opencollective.com/webpack" 3176 | }, 3177 | "peerDependenciesMeta": { 3178 | "webpack-cli": { 3179 | "optional": true 3180 | } 3181 | } 3182 | }, 3183 | "node_modules/webpack-cli": { 3184 | "version": "6.0.1", 3185 | "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", 3186 | "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", 3187 | "dev": true, 3188 | "license": "MIT", 3189 | "dependencies": { 3190 | "@discoveryjs/json-ext": "^0.6.1", 3191 | "@webpack-cli/configtest": "^3.0.1", 3192 | "@webpack-cli/info": "^3.0.1", 3193 | "@webpack-cli/serve": "^3.0.1", 3194 | "colorette": "^2.0.14", 3195 | "commander": "^12.1.0", 3196 | "cross-spawn": "^7.0.3", 3197 | "envinfo": "^7.14.0", 3198 | "fastest-levenshtein": "^1.0.12", 3199 | "import-local": "^3.0.2", 3200 | "interpret": "^3.1.1", 3201 | "rechoir": "^0.8.0", 3202 | "webpack-merge": "^6.0.1" 3203 | }, 3204 | "bin": { 3205 | "webpack-cli": "bin/cli.js" 3206 | }, 3207 | "engines": { 3208 | "node": ">=18.12.0" 3209 | }, 3210 | "funding": { 3211 | "type": "opencollective", 3212 | "url": "https://opencollective.com/webpack" 3213 | }, 3214 | "peerDependencies": { 3215 | "webpack": "^5.82.0" 3216 | }, 3217 | "peerDependenciesMeta": { 3218 | "webpack-bundle-analyzer": { 3219 | "optional": true 3220 | }, 3221 | "webpack-dev-server": { 3222 | "optional": true 3223 | } 3224 | } 3225 | }, 3226 | "node_modules/webpack-cli/node_modules/commander": { 3227 | "version": "12.1.0", 3228 | "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", 3229 | "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", 3230 | "dev": true, 3231 | "license": "MIT", 3232 | "engines": { 3233 | "node": ">=18" 3234 | } 3235 | }, 3236 | "node_modules/webpack-merge": { 3237 | "version": "6.0.1", 3238 | "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", 3239 | "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", 3240 | "dev": true, 3241 | "license": "MIT", 3242 | "dependencies": { 3243 | "clone-deep": "^4.0.1", 3244 | "flat": "^5.0.2", 3245 | "wildcard": "^2.0.1" 3246 | }, 3247 | "engines": { 3248 | "node": ">=18.0.0" 3249 | } 3250 | }, 3251 | "node_modules/webpack-sources": { 3252 | "version": "3.2.3", 3253 | "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", 3254 | "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", 3255 | "dev": true, 3256 | "license": "MIT", 3257 | "engines": { 3258 | "node": ">=10.13.0" 3259 | } 3260 | }, 3261 | "node_modules/webpack/node_modules/eslint-scope": { 3262 | "version": "5.1.1", 3263 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", 3264 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 3265 | "dev": true, 3266 | "license": "BSD-2-Clause", 3267 | "dependencies": { 3268 | "esrecurse": "^4.3.0", 3269 | "estraverse": "^4.1.1" 3270 | }, 3271 | "engines": { 3272 | "node": ">=8.0.0" 3273 | } 3274 | }, 3275 | "node_modules/webpack/node_modules/estraverse": { 3276 | "version": "4.3.0", 3277 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 3278 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 3279 | "dev": true, 3280 | "license": "BSD-2-Clause", 3281 | "engines": { 3282 | "node": ">=4.0" 3283 | } 3284 | }, 3285 | "node_modules/which": { 3286 | "version": "2.0.2", 3287 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3288 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3289 | "dev": true, 3290 | "license": "ISC", 3291 | "dependencies": { 3292 | "isexe": "^2.0.0" 3293 | }, 3294 | "bin": { 3295 | "node-which": "bin/node-which" 3296 | }, 3297 | "engines": { 3298 | "node": ">= 8" 3299 | } 3300 | }, 3301 | "node_modules/wildcard": { 3302 | "version": "2.0.1", 3303 | "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", 3304 | "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", 3305 | "dev": true, 3306 | "license": "MIT" 3307 | }, 3308 | "node_modules/word-wrap": { 3309 | "version": "1.2.5", 3310 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", 3311 | "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", 3312 | "dev": true, 3313 | "license": "MIT", 3314 | "engines": { 3315 | "node": ">=0.10.0" 3316 | } 3317 | }, 3318 | "node_modules/yn": { 3319 | "version": "3.1.1", 3320 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", 3321 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 3322 | "dev": true, 3323 | "license": "MIT", 3324 | "engines": { 3325 | "node": ">=6" 3326 | } 3327 | }, 3328 | "node_modules/yocto-queue": { 3329 | "version": "0.1.0", 3330 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 3331 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 3332 | "dev": true, 3333 | "license": "MIT", 3334 | "engines": { 3335 | "node": ">=10" 3336 | }, 3337 | "funding": { 3338 | "url": "https://github.com/sponsors/sindresorhus" 3339 | } 3340 | } 3341 | } 3342 | } 3343 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "setup-fasm", 3 | "version": "1.4.3", 4 | "private": true, 5 | "author": "stevenwdv", 6 | "license": "MIT", 7 | "scripts": { 8 | "build": "webpack --mode=production", 9 | "start-ts": "node --require=ts-node/register ./src/setup.ts", 10 | "lint": "tsc --noEmit && eslint .", 11 | "lint-only": "eslint .", 12 | "prepare": "husky install ./.hooks" 13 | }, 14 | "sideEffects": [ 15 | "./src/setup.ts" 16 | ], 17 | "engines": { 18 | "node": ">=16" 19 | }, 20 | "dependencies": { 21 | "@actions/core": "^1.11.1", 22 | "@actions/tool-cache": "^2.0.2", 23 | "fasm-versions": "github:stevenwdv/fasm-versions#v1.1", 24 | "simple-git": "^3.27.0" 25 | }, 26 | "devDependencies": { 27 | "@types/node": "^20.17.17", 28 | "@types/webpack": "^5.28.5", 29 | "@typescript-eslint/eslint-plugin": "^8.23.0", 30 | "@typescript-eslint/parser": "^8.23.0", 31 | "eslint": "^9.19.0", 32 | "husky": "^9.1.7", 33 | "terser-webpack-plugin": "^5.3.14", 34 | "ts-loader": "^9.5.2", 35 | "ts-node": "^10.9.2", 36 | "typescript": "^5.7.3", 37 | "webpack": "^5.99.5", 38 | "webpack-cli": "^6.0.1" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/lib.ts: -------------------------------------------------------------------------------- 1 | import crypto from 'node:crypto'; 2 | import fs from 'node:fs'; 3 | import fsp from 'node:fs/promises'; 4 | import os from 'node:os'; 5 | import {pipeline} from 'node:stream/promises'; 6 | 7 | import * as core from '@actions/core'; 8 | import * as toolCache from '@actions/tool-cache'; 9 | 10 | import {FasmEdition, FasmEditionStr, FasmVersion, getUrls, PlatformStr} from 'fasm-versions'; 11 | 12 | import {equalsIgnoreCase} from './utils'; 13 | 14 | /** Get matching versions according to semver */ 15 | export function getMatchingVersions(edition: FasmEdition, requestedVersion: 'latest' | string, 16 | downloadUnknown: 'never' | 'secure' | string | 'insecure', 17 | ): FasmVersionEx[] { 18 | requestedVersion = requestedVersion.toLowerCase(); 19 | if (['latest', '*'].includes(requestedVersion)) 20 | return edition.versions; 21 | else if (requestedVersion.endsWith('.*')) { 22 | const requestedVersionBase = requestedVersion.slice(0, -2); 23 | return edition.versions 24 | .filter(version => version.name.toLowerCase().startsWith(requestedVersionBase) 25 | && ['.', undefined].includes(version.name[requestedVersionBase.length])); 26 | } else { 27 | const version = edition.versions 28 | .find(version => version.name.toLowerCase() === requestedVersion); 29 | if (!version) { 30 | if (downloadUnknown === 'never') return []; 31 | if (['secure', 'insecure'].includes(downloadUnknown)) return [{ 32 | name: requestedVersion, 33 | allowInsecure: downloadUnknown === 'insecure', 34 | userProvided: true, 35 | }]; 36 | return [{ 37 | name: requestedVersion, 38 | hashes: new Proxy({}, { 39 | get() { 40 | return downloadUnknown; 41 | }, 42 | }), 43 | userProvided: true, 44 | }]; 45 | } else if (downloadUnknown !== 'secure') { 46 | if (downloadUnknown === 'insecure') return [{ 47 | ...version, 48 | allowInsecure: true, 49 | }]; 50 | if (downloadUnknown) return [{ 51 | ...version, 52 | hashes: new Proxy({}, { 53 | get() { 54 | return downloadUnknown; 55 | }, 56 | }), 57 | userProvided: true, 58 | }]; 59 | } 60 | return [version]; 61 | } 62 | } 63 | 64 | /** Hash file using BLAKE2b-512 */ 65 | export async function hashFile(filePath: string): Promise { 66 | const packedStream = fs.createReadStream(filePath); 67 | const hasher = crypto.createHash('BLAKE2b512').setEncoding('hex'); 68 | await pipeline(packedStream, hasher); 69 | return hasher.read() as string; 70 | } 71 | 72 | /** 73 | * @param allowInsecure Allow downloading insecure URLs without hash 74 | * @return Path of raw downloaded file 75 | * @throws DownloadError 76 | */ 77 | export async function downloadUrl( 78 | url: URL, allowInsecure: boolean, expectedHash?: string, destinationFilePath?: string): Promise { 79 | const secure = url.protocol === 'https:'; 80 | 81 | if (!secure && !expectedHash && !allowInsecure) throw new MissingHashError(url); 82 | 83 | let packedPath; 84 | try { 85 | packedPath = await toolCache.downloadTool(url.href, destinationFilePath); 86 | } catch (err) { 87 | if (err instanceof toolCache.HTTPError) { 88 | throw new HttpError(url, err.httpStatusCode, {cause: err}); 89 | } else throw err; 90 | } 91 | 92 | if (expectedHash) { 93 | const actualHash = await hashFile(packedPath); 94 | if (!equalsIgnoreCase(actualHash, expectedHash)) { 95 | await fsp.unlink(packedPath); 96 | throw new HashMismatchError(url, expectedHash, actualHash); 97 | } 98 | } 99 | 100 | return packedPath; 101 | } 102 | 103 | export abstract class DownloadError extends Error { 104 | protected constructor(readonly url: URL, message?: string, options?: ErrorOptions) { 105 | super(message, options); 106 | } 107 | } 108 | 109 | export class MissingHashError extends DownloadError { 110 | constructor(url: URL, options?: ErrorOptions) { 111 | super(url, `no hash found for insecure URL ${url.href}`, options); 112 | } 113 | } 114 | 115 | export class HashMismatchError extends DownloadError { 116 | constructor(url: URL, expectedHash: string, actualHash: string, options?: ErrorOptions) { 117 | super(url, `expected hash ${expectedHash} but got ${actualHash} for ${url.href}`, options); 118 | } 119 | } 120 | 121 | export class HttpError extends DownloadError { 122 | constructor(url: URL, readonly httpStatusCode?: number, options?: ErrorOptions) { 123 | super(url, `HTTP error${httpStatusCode !== undefined ? ` (${httpStatusCode})` : ''} while downloading ${url.href}`, options); 124 | } 125 | } 126 | 127 | 128 | const officialOrigin = 'https://flatassembler.net'; 129 | 130 | /** 131 | * @param userProvided If version is unknown and was provided by the user 132 | * @return Path to archive and downloaded URL or null on failure 133 | */ 134 | export async function downloadVersionArchive(edition: FasmEditionStr, version: FasmVersionEx, platform: PlatformStr, 135 | destinationFilePath?: string, ignoreOfficialHttpsHashMismatch = false, 136 | ): Promise<{ path: string, url: URL } | null> { 137 | const fullVersion = `${edition} ${version.name} for ${platform}`; 138 | 139 | const expectedHash = (version.hashes || {})[platform]; 140 | 141 | /** Non-404 status */ 142 | let unexpectedError = false; 143 | let hashProblems = false; 144 | 145 | const urls = getUrls[edition](version, platform); 146 | for (const url of urls) { 147 | core.info(`trying ${url.href}`); 148 | 149 | try { 150 | return { 151 | path: await downloadUrl(url, !!version.allowInsecure, 152 | ignoreOfficialHttpsHashMismatch && url.origin === officialOrigin 153 | ? undefined : expectedHash, 154 | destinationFilePath), 155 | url, 156 | }; 157 | } catch (err) { 158 | if (err instanceof MissingHashError) { 159 | hashProblems = true; 160 | core.warning(`${err.message} for ${fullVersion}; not using this file`); 161 | continue; 162 | } 163 | if (err instanceof HashMismatchError) { 164 | hashProblems = true; 165 | core.warning(`${err.message} for ${fullVersion}${ 166 | version.userProvided ? '' : ', you may want to report this to the setup-fasm action maintainer' 167 | }; not using this file`); 168 | continue; 169 | } 170 | if (err instanceof HttpError) { 171 | if (err.httpStatusCode !== undefined) unexpectedError ||= err.httpStatusCode !== 404; 172 | (err.httpStatusCode === 404 ? core.info : core.warning)(`${err.message} for ${fullVersion}`); 173 | continue; 174 | } 175 | throw err; 176 | } 177 | } 178 | 179 | core.warning(`all attempts at downloading ${fullVersion} failed; ` + ( 180 | hashProblems ? 'some hash problems were encountered' 181 | : unexpectedError ? 'some servers seem to have problems with the requests' 182 | : `${edition} ${version.name} not found for ${platform}` 183 | )); 184 | return null; 185 | } 186 | 187 | 188 | // Currently, all versions are at least 32-bit x86, although some may also contain x86-64 versions 189 | const fasmArch: ReturnType = 'ia32'; 190 | 191 | /** 192 | * @param userProvided If version is unknown and was provided by the user 193 | * @return Path to extracted directory or null on failure 194 | */ 195 | export async function downloadVersion(edition: FasmEditionStr, version: FasmVersionEx, platform: PlatformStr, 196 | assumeDynamicUnchanged = false, ignoreOfficialHttpsHashMismatch = false, 197 | ) 198 | : Promise { 199 | 200 | // Don't use tool-cache version field as it only does semver x.x.x 201 | const cacheName = `${edition}-${platform}-${version.name}`; 202 | const cachedPath = toolCache.find(cacheName, '0.0.0', fasmArch); 203 | if (cachedPath) { 204 | core.info('found cached'); 205 | 206 | if (!version.dynamic || assumeDynamicUnchanged) { 207 | // Use cached version 208 | return cachedPath; 209 | } else { 210 | // Ideally, we would look at the date in the response and use If-Modified-Since, but tool-cache doesn't let us 211 | // Even more ideally, we would use ETags -- same issue 212 | // Using the download date for If-Modified-Since instead doesn't work, 213 | // as HeavyThing rwasa replies with 200 to dates after the last modification date 214 | core.info('but may be updated'); 215 | } 216 | } 217 | 218 | const result = await downloadVersionArchive(edition, version, platform, 219 | undefined, ignoreOfficialHttpsHashMismatch); 220 | if (!result) return null; 221 | // eslint-disable-next-line prefer-const 222 | let {path: packedPath, url} = result; 223 | 224 | // Windows PowerShell Expand-Archive fix 225 | if (url.pathname.toLowerCase().endsWith('.zip') && !packedPath.endsWith('.zip')) 226 | await fsp.rename(packedPath, packedPath = `${packedPath}.zip`); 227 | const extract = url.pathname.toLowerCase().endsWith('.zip') ? toolCache.extractZip : toolCache.extractTar; 228 | const extractPath = await extract(packedPath); 229 | await fsp.unlink(packedPath); 230 | await toolCache.cacheDir(extractPath, cacheName, '0.0.0', fasmArch); 231 | return extractPath; 232 | } 233 | 234 | export type FasmVersionEx = FasmVersion & { 235 | /** Version and/or hashes were provided by the user */ 236 | userProvided?: boolean, 237 | /** Allow downloads using an insecure connection without hash */ 238 | allowInsecure?: boolean, 239 | }; 240 | -------------------------------------------------------------------------------- /src/setup.ts: -------------------------------------------------------------------------------- 1 | import {randomUUID} from 'node:crypto'; 2 | import fs from 'node:fs'; 3 | import fsp from 'node:fs/promises'; 4 | import https from 'node:https'; 5 | import os from 'node:os'; 6 | import path from 'node:path'; 7 | import process from 'node:process'; 8 | import consumers from 'node:stream/consumers'; 9 | import util from 'node:util'; 10 | 11 | import * as core from '@actions/core'; 12 | import simplegit from 'simple-git'; 13 | 14 | import {FasmData, FasmEdition, FasmEditionStr, PlatformStr} from 'fasm-versions'; 15 | import {downloadVersion, getMatchingVersions} from './lib'; 16 | 17 | const versionsUrl = new URL('https://raw.githubusercontent.com/stevenwdv/fasm-versions/v1/fasm_versions.json'); 18 | const fasmgRepoUrl = new URL('https://github.com/tgrysztar/fasmg.git'); 19 | 20 | async function main() { 21 | const requestedEdition: FasmEditionStr | string = core.getInput('edition').toLowerCase(), 22 | requestedVersion: 'latest' | string = core.getInput('version').toLowerCase(), 23 | fallbackToPreviousCompatible = core.getBooleanInput('fallback-to-previous-compatible'), 24 | ignoreOfficialHttpsHashMismatch = core.getBooleanInput('ignore-official-https-hash-mismatch'), 25 | downloadUnknown: 'never' | 'secure' | string | 'insecure' = core.getInput('download-unknown').toLowerCase(), 26 | customVersionList = core.getInput('custom-version-list'), 27 | assumeDynamicUnchanged = core.getBooleanInput('assume-dynamic-unchanged'), 28 | fasmgDownloadPackages = core.getInput('fasmg-download-packages'), 29 | fasmgIncludePackages = core.getInput('fasmg-include-packages').toLowerCase().split(/,\s*/).filter(v => v), 30 | setIncludeEnvvar = core.getBooleanInput('set-include-envvar'); 31 | 32 | if (requestedEdition !== 'fasmg' && (fasmgDownloadPackages.toLowerCase() !== 'false' || fasmgIncludePackages.length)) { 33 | core.setFailed('fasm g packages option set but requested edition is not fasmg'); 34 | return; 35 | } 36 | if (fasmgIncludePackages.length && fasmgDownloadPackages.toLowerCase() === 'false') { 37 | core.setFailed('fasmg-include-packages set without fasmg-download-packages'); 38 | return; 39 | } 40 | 41 | let data: FasmData; 42 | if (customVersionList) { 43 | core.info('reading version list'); 44 | data = await consumers.json(fs.createReadStream(customVersionList)) as FasmData; 45 | } else { 46 | core.info('downloading version list'); 47 | data = await new Promise((resolve, reject) => 48 | // eslint-disable-next-line no-promise-executor-return 49 | void https.get(versionsUrl, res => { 50 | if (res.statusCode !== 200) 51 | reject(new Error(`failed to download ${versionsUrl.href}: HTTP ${res.statusCode!} ${res.statusMessage!}`)); 52 | else resolve(consumers.json(res) as Promise); 53 | }).on('error', err => reject(new Error(`failed to download ${versionsUrl.href}`, {cause: err}))), 54 | ); 55 | } 56 | 57 | // Get requested edition 58 | const edition = (data.editions as { [edition: string]: FasmEdition })[requestedEdition]; 59 | if (!edition) { 60 | core.setFailed(`requested edition '${requestedEdition}' not found`); 61 | return; 62 | } 63 | const editionStr = requestedEdition as FasmEditionStr; 64 | 65 | // Get requested version candidates 66 | const tryVersions = getMatchingVersions(edition, requestedVersion, downloadUnknown); 67 | if (!tryVersions.length) { 68 | core.setFailed(`requested version '${requestedVersion}' not found for edition ${editionStr}`); 69 | return; 70 | } 71 | 72 | // Get current platform 73 | const nodePlatform = os.platform(); 74 | if (nodePlatform === 'darwin') { 75 | core.setFailed('macOS does not support ELF binaries, so fasm is not available'); 76 | return; 77 | } 78 | let platformStr = platformMap[nodePlatform]; 79 | if (!platformStr) { 80 | core.warning(`unknown current platform ${nodePlatform}, trying unix`); 81 | platformStr = 'unix'; 82 | } 83 | 84 | // Try version candidates 85 | let triesLeft = 10; 86 | for (const version of tryVersions) { 87 | core.startGroup(`using ${version.name}`); 88 | let extractPath = await downloadVersion(editionStr, version, platformStr, 89 | assumeDynamicUnchanged, ignoreOfficialHttpsHashMismatch); 90 | if (!extractPath && platformStr === 'linux') { 91 | core.info('no linux version found, trying unix instead'); 92 | extractPath = await downloadVersion(editionStr, version, 'unix', 93 | assumeDynamicUnchanged, ignoreOfficialHttpsHashMismatch); 94 | if (extractPath) platformStr = 'unix'; 95 | } 96 | core.endGroup(); 97 | 98 | if (extractPath) { 99 | await returnVersion(editionStr, platformStr, version.name, extractPath, setIncludeEnvvar); 100 | 101 | if (editionStr === 'fasmg' && fasmgDownloadPackages.toLowerCase() !== 'false') 102 | await downloadFasmgPackages(fasmgDownloadPackages.toLowerCase() === 'true' ? null : fasmgDownloadPackages, 103 | fasmgIncludePackages, setIncludeEnvvar); 104 | return; 105 | } 106 | 107 | if (!fallbackToPreviousCompatible || !--triesLeft) { 108 | core.setFailed('maximum number of versions to try exceeded'); 109 | return; 110 | } 111 | } 112 | 113 | core.setFailed(`could not download ${requestedEdition} ${requestedVersion} for ${platformStr}`); 114 | return; 115 | } 116 | 117 | 118 | const platformMap: { [platform in NodeJS.Platform]?: PlatformStr } = { 119 | aix: 'unix', 120 | android: 'linux', 121 | cygwin: 'windows', 122 | freebsd: 'unix', 123 | haiku: 'unix', 124 | linux: 'linux', 125 | netbsd: 'unix', 126 | openbsd: 'unix', 127 | sunos: 'unix', 128 | win32: 'windows', 129 | }; 130 | 131 | /** Install found version */ 132 | async function returnVersion(edition: FasmEditionStr, platform: PlatformStr, versionName: string, extractPath: string, 133 | setIncludeEnvvar: boolean, 134 | ) { 135 | const files = await fsp.readdir(extractPath); 136 | // If extracted directory contains a single directory, add that to PATH instead 137 | const binPath = files.length === 1 && (await fsp.stat(path.join(extractPath, files[0]!))).isDirectory() 138 | ? path.join(extractPath, files[0]!) 139 | : extractPath; 140 | core.addPath(binPath); 141 | 142 | { 143 | const executables = ['.x64', '', '.exe', '.o'].map(ext => `${{ 144 | fasm1: 'fasm', 145 | fasmg: 'fasmg', 146 | fasmarm: 'fasmarm', 147 | }[edition]}${ext}`); 148 | await Promise.all(executables.map(async executable => { 149 | const exePath = path.join(binPath, executable); 150 | const stat = await fsp.stat(exePath).catch(() => null); 151 | if (stat?.isFile()) await fsp.chmod(exePath, stat.mode | 0o111); // Make executable 152 | })); 153 | } 154 | 155 | if (setIncludeEnvvar) 156 | for (const includeName of ['INCLUDE', 'include' /*newer FASMARM*/]) { 157 | const includePath = path.join(binPath, includeName); 158 | if ((await fsp.stat(includePath).catch(() => null))?.isDirectory()) { 159 | addInclude(includePath); 160 | break; 161 | } 162 | } 163 | 164 | core.setOutput('path', binPath); 165 | core.setOutput('edition', edition); 166 | core.setOutput('version', versionName); 167 | core.setOutput('platform', platform); 168 | 169 | core.info(`successfully installed ${edition} ${versionName} for ${platform} to ${binPath}`); 170 | } 171 | 172 | async function downloadFasmgPackages( 173 | checkoutRef: string | null, includePackages: string[], addDirToIncludeEnvvar: boolean) { 174 | core.startGroup('downloading fasm g packages'); 175 | const packagesRepoDir = path.join(process.env['RUNNER_TEMP'] || os.tmpdir(), randomUUID()); 176 | await simplegit() 177 | .clone(fasmgRepoUrl.href, packagesRepoDir, ['--filter=blob:none', '--sparse', '--no-checkout']) 178 | .cwd(packagesRepoDir) 179 | .checkout(checkoutRef ?? 'HEAD') 180 | .raw('sparse-checkout', 'set', '--cone', 'packages'); 181 | core.info('checked out fasm g packages repository'); 182 | 183 | const packagesDir = path.join(packagesRepoDir, 'packages'); 184 | if (!(await fsp.stat(packagesDir).catch(() => null))?.isDirectory()) 185 | throw new Error('cannot find fasm g packages directory'); 186 | 187 | core.setOutput('fasmg-packages', packagesDir); 188 | if (addDirToIncludeEnvvar) 189 | addInclude(packagesDir); 190 | for (const packageName of includePackages) { 191 | const packageDir = path.join(packagesDir, packageName); 192 | if (!(await fsp.stat(packagesDir).catch(() => null))?.isDirectory()) 193 | throw new Error(`fasm g package ${packageName} not found`); 194 | 195 | const includeDir = path.join(packageDir, 'include'); 196 | if ((await fsp.stat(includeDir).catch(() => null))?.isDirectory()) 197 | addInclude(includeDir); 198 | else addInclude(packageDir); 199 | } 200 | core.endGroup(); 201 | core.info(`successfully installed fasm g packages to ${packagesDir}`); 202 | } 203 | 204 | function addInclude(path: string) { 205 | core.info(`adding to include: ${path}`); 206 | let includeConcat = process.env['INCLUDE'] ?? ''; 207 | if (includeConcat) includeConcat += ';'; // This is the only separator recognized by fasm 208 | includeConcat += path; 209 | core.exportVariable('INCLUDE', includeConcat); 210 | } 211 | 212 | void (async () => { 213 | try { 214 | await main(); 215 | } catch (error) { 216 | core.setFailed(util.inspect(error)); 217 | } 218 | })(); 219 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | export function equalsIgnoreCase(a: string, b: string): boolean { 2 | return a.toLowerCase() === b.toLowerCase(); 3 | } 4 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "noEmit": true, 4 | "target": "ES2022", 5 | "module": "CommonJS", 6 | "esModuleInterop": true, 7 | "resolveJsonModule": true, 8 | "strict": true, 9 | "useDefineForClassFields": true, 10 | "exactOptionalPropertyTypes": true, 11 | "noImplicitOverride": true, 12 | "noImplicitReturns": true, 13 | "noUncheckedIndexedAccess": true, 14 | "forceConsistentCasingInFileNames": true 15 | }, 16 | "include": [ 17 | "./src/**/*.ts" 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /webpack.config.mjs: -------------------------------------------------------------------------------- 1 | import TerserPlugin from 'terser-webpack-plugin'; 2 | 3 | /** 4 | * @param {*} env 5 | * @param {{mode: ("none" | "development" | "production")}} argv 6 | * @return {import('webpack').Configuration} 7 | */ 8 | export default (env, argv) => ({ 9 | entry: { 10 | setup: './src/setup.ts', 11 | }, 12 | output: { 13 | filename: '[name].js', 14 | }, 15 | target: 'node', 16 | 17 | resolve: { 18 | extensions: ['.js', '.ts'], 19 | }, 20 | 21 | module: { 22 | rules: [ 23 | { 24 | test: /\.ts$/i, 25 | use: [{ 26 | loader: 'ts-loader', 27 | options: { 28 | allowTsInNodeModules: true, 29 | compilerOptions: { 30 | noEmit: false, 31 | emitDeclarationOnly: false, 32 | declaration: false, 33 | outDir: 'ts-out', 34 | }, 35 | }, 36 | }], 37 | }, 38 | ], 39 | }, 40 | 41 | optimization: { 42 | minimizer: [ 43 | new TerserPlugin({ 44 | terserOptions: { 45 | format: { 46 | semicolons: false, // Newlines instead of semicolons where possible 47 | }, 48 | }, 49 | }), 50 | ], 51 | }, 52 | devtool: argv.mode === 'development' ? 'inline-source-map' : undefined, 53 | }); 54 | --------------------------------------------------------------------------------