├── .github
└── workflows
│ ├── ci.yml
│ └── release.yml
├── .gitignore
├── LICENSE
├── README.md
├── docs
├── enforce-https.md
├── no-client-side-secrets.md
├── no-dangerously-set-inner-html.md
├── no-eval.md
├── no-inline-styles.md
├── no-open-redirects.md
├── require-rel-noopener-noreferrer.md
└── require-script-integrity.md
├── eslint.config.js
├── jest.config.js
├── package.json
├── pnpm-lock.yaml
├── src
├── index.ts
├── rules
│ ├── enforce-https.ts
│ ├── no-client-side-secrets.ts
│ ├── no-dangerously-set-inner-html.ts
│ ├── no-eval.ts
│ ├── no-inline-styles.ts
│ ├── no-open-redirects.ts
│ ├── require-rel-noopener-noreferrer.ts
│ └── require-script-integrity.ts
└── utils
│ ├── next-runtime.ts
│ └── rule.ts
├── tests
└── rules
│ ├── enforce-https.test.ts
│ ├── no-client-side-secrets.test.ts
│ ├── no-dangerously-set-inner-html.test.ts
│ ├── no-eval.test.ts
│ ├── no-inline-styles.test.ts
│ ├── no-open-redirects.test.ts
│ ├── require-rel-noopener-noreferrer.test.ts
│ └── require-script-integrity.test.ts
└── tsconfig.json
/.github/workflows/ci.yml:
--------------------------------------------------------------------------------
1 | # .github/workflows/ci.yml
2 |
3 | name: CI
4 |
5 | on:
6 | push:
7 | branches:
8 | - main
9 | pull_request:
10 | branches:
11 | - main
12 |
13 | jobs:
14 | test:
15 | runs-on: ubuntu-latest
16 |
17 | steps:
18 | - name: Checkout repository
19 | uses: actions/checkout@v3
20 |
21 | - name: Set up Node.js
22 | uses: actions/setup-node@v3
23 | with:
24 | node-version: "18" # or another version if your project requires it
25 |
26 | - name: Install pnpm
27 | run: |
28 | npm install -g pnpm
29 |
30 | - name: Install dependencies
31 | run: |
32 | pnpm install
33 |
34 | - name: Run tests
35 | run: |
36 | pnpm test
37 |
--------------------------------------------------------------------------------
/.github/workflows/release.yml:
--------------------------------------------------------------------------------
1 | # .github/workflows/release.yml
2 |
3 | name: Release
4 |
5 | on:
6 | push:
7 | tags:
8 | - "v*.*.*" # Trigger on version tags like v1.0.0
9 |
10 | jobs:
11 | publish:
12 | runs-on: ubuntu-latest
13 | if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
14 |
15 | steps:
16 | - name: Checkout repository
17 | uses: actions/checkout@v3
18 |
19 | - name: Set up Node.js
20 | uses: actions/setup-node@v3
21 | with:
22 | node-version: "18" # Or specify another version if necessary
23 |
24 | - name: Install pnpm
25 | run: |
26 | npm install -g pnpm
27 |
28 | - name: Install dependencies
29 | run: |
30 | pnpm install
31 |
32 | - name: Build the package
33 | run: |
34 | pnpm build # If your package has a build step; adjust as needed
35 |
36 | - name: Publish to npm
37 | env:
38 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
39 | run: |
40 | pnpm publish --access public --no-git-checks
41 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | dist/
2 | coverage/
3 | tsconfig.tsbuildinfo
4 | node_modules/
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2025 Simon Koeck
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 | # @shipsecure/eslint-plugin-next
2 |
3 | ## Overview
4 |
5 | `@shipsecure/eslint-plugin-next` is a custom ESLint plugin designed to enhance the security of Next.js applications by identifying potentially insecure patterns in code. This plugin offers a set of rules specifically tailored to prevent common security pitfalls in Next.js, encouraging best practices and securing your app's frontend and backend code.
6 |
7 | ## Features
8 |
9 | - Rules for Secure Code: Detects usage of unsecure URLs, inline scripts, eval, and other potential security vulnerabilities.
10 | - Recommended Configurations: Provides a recommended set of rules for immediate security improvements.
11 | - Easy to Integrate: Seamlessly integrates with any Next.js project with simple installation and configuration.
12 |
13 | ## Installation
14 |
15 | ```bash
16 | npm install @shipsecure/eslint-plugin-next --save-dev
17 | ```
18 |
19 | ## Usage
20 |
21 | ### Flat config (requires eslint >= v8.23.0)
22 |
23 | Add the following to your `eslint.config.js` file:
24 |
25 | ```javascript
26 | const shipsecureNext = require("@shipsecure/eslint-plugin-next");
27 |
28 | module.exports = [shipsecureNext.configs.recommended];
29 | ```
30 |
31 | ### eslintrc config (deprecated)
32 |
33 | Add the following to your `.eslintrc` file:
34 |
35 | ```javascript
36 | module.exports = {
37 | extends: ["plugin:@shipsecure/next/recommended-legacy"],
38 | };
39 | ```
40 |
41 | ## Contributing
42 |
43 | Contributions are welcome! If you'd like to add new rules, suggest enhancements, or report issues, please open a pull request or issue on our [GitHub repository](https://github.com/shipsecure-labs/eslint-plugin-next).
44 |
45 | ### Steps to Contribute
46 |
47 |
48 | - Fork the repository.
49 | - Create a new branch for your feature (git checkout -b feature-name).
50 | - Make your changes and add tests.
51 | - Run tests to ensure everything works (npm test).
52 | - Push your branch and submit a pull request.
53 |
54 |
55 | ## License
56 |
57 | This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
58 |
--------------------------------------------------------------------------------
/docs/enforce-https.md:
--------------------------------------------------------------------------------
1 | # enforce-https
2 |
3 | ## Rule Details
4 |
5 | This rule enforces the use of HTTPS in network requests.
6 |
7 | ## Examples
8 |
9 | Examples of **incorrect** code for this rule:
10 |
11 | ```js
12 | fetch("http://example.com/api/data");
13 | axios.post("http://example.com/api/data");
14 | ```
15 |
16 | Examples of **correct** code for this rule:
17 |
18 | ```js
19 | fetch("https://example.com/api/data");
20 | ```
21 |
22 | ## Further Reading
23 |
24 | - [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)
25 |
--------------------------------------------------------------------------------
/docs/no-client-side-secrets.md:
--------------------------------------------------------------------------------
1 | # no-client-side-secrets
2 |
3 | ## Rule Details
4 |
5 | This rule disables the usage of secrets in combination with NEXT_PUBLIC.
6 |
7 | ## Examples
8 |
9 | Examples of **incorrect** code for this rule:
10 |
11 | ```js
12 | const key = process.env.NEXT_PUBLIC_API_KEY;
13 | ```
14 |
15 | Examples of **correct** code for this rule:
16 |
17 | ```js
18 | const key = process.env.API_KEY;
19 | ```
20 |
21 | ## Further Reading
22 |
23 | - [Next.js Configure Environment Variables](https://nextjs.org/docs/pages/building-your-application/configuring/environment-variables)
24 |
--------------------------------------------------------------------------------
/docs/no-dangerously-set-inner-html.md:
--------------------------------------------------------------------------------
1 | # no-dangerously-set-inner-html
2 |
3 | ## Rule Details
4 |
5 | This rule disables the usage of dangerouslySetInnerHTML.
6 |
7 | ## Examples
8 |
9 | Examples of **incorrect** code for this rule:
10 |
11 | ```js
12 |
13 | ```
14 |
15 | Examples of **correct** code for this rule:
16 |
17 | ```js
18 | Safe Content
19 | ```
20 |
--------------------------------------------------------------------------------
/docs/no-eval.md:
--------------------------------------------------------------------------------
1 | # no-eval
2 |
3 | ## Rule Details
4 |
5 | This rule disables the usage of eval.
6 |
7 | ## Examples
8 |
9 | Examples of **incorrect** code for this rule:
10 |
11 | ```js
12 | eval("return 'foo';");
13 | ```
14 |
15 | Examples of **correct** code for this rule:
16 |
17 | ```js
18 | const result = "foo";
19 | ```
20 |
--------------------------------------------------------------------------------
/docs/no-inline-styles.md:
--------------------------------------------------------------------------------
1 | # no-inline-styles
2 |
3 | ## Rule Details
4 |
5 | This rule disables the usage of inline styles.
6 |
7 | ## Examples
8 |
9 | Examples of **incorrect** code for this rule:
10 |
11 | ```jsx
12 |
13 | ```
14 |
15 | Examples of **correct** code for this rule:
16 |
17 | ```jsx
18 | Safe Content
19 | ```
20 |
--------------------------------------------------------------------------------
/docs/no-open-redirects.md:
--------------------------------------------------------------------------------
1 | # no-open-redirects
2 |
3 | ## Rule Details
4 |
5 | This rule disables the usage of user-controlled values in href attributes to prevent open redirects.
6 |
7 | ## Examples
8 |
9 | Examples of **incorrect** code for this rule:
10 |
11 | ```jsx
12 | Test
13 | ```
14 |
15 | ```jsx
16 | Test
17 | ```
18 |
19 | Examples of **correct** code for this rule:
20 |
21 | ```jsx
22 | Test
23 | ```
24 |
25 | ```jsx
26 | Test
27 | ```
28 |
--------------------------------------------------------------------------------
/docs/require-rel-noopener-noreferrer.md:
--------------------------------------------------------------------------------
1 | # require-rel-noopener-noreferrer
2 |
3 | ## Rule Details
4 |
5 | This rule requires the use of rel="noopener noreferrer" on external links to prevent tab-nabbing.
6 |
7 | ## Examples
8 |
9 | Examples of **incorrect** code for this rule:
10 |
11 | ```jsx
12 | Test
13 | ```
14 |
15 | ```jsx
16 | Test
17 | ```
18 |
19 | Examples of **correct** code for this rule:
20 |
21 | ```jsx
22 |
23 | Test
24 |
25 | ```
26 |
27 | ```jsx
28 |
29 | Test
30 |
31 | ```
32 |
--------------------------------------------------------------------------------
/docs/require-script-integrity.md:
--------------------------------------------------------------------------------
1 | # require-script-integrity
2 |
3 | ## Rule Details
4 |
5 | This rule requires the use of integrity attribute on external scripts to prevent CDN tampering.
6 |
7 | ## Examples
8 |
9 | Examples of **incorrect** code for this rule:
10 |
11 | ```jsx
12 |
13 | ```
14 |
15 | ```jsx
16 |
17 | ```
18 |
19 | Examples of **correct** code for this rule:
20 |
21 | ```jsx
22 |
26 | ```
27 |
28 | ```jsx
29 |
33 | ```
34 |
--------------------------------------------------------------------------------
/eslint.config.js:
--------------------------------------------------------------------------------
1 | const eslintPlugin = require("eslint-plugin-eslint-plugin");
2 |
3 | module.exports = [
4 | eslintPlugin.configs["flat/recommended"],
5 | {
6 | rules: {
7 | "eslint-plugin/require-meta-docs-description": "error",
8 | },
9 | },
10 | ];
11 |
--------------------------------------------------------------------------------
/jest.config.js:
--------------------------------------------------------------------------------
1 | // jest.config.js
2 | module.exports = {
3 | preset: "ts-jest", // Use ts-jest to handle TypeScript files
4 | testEnvironment: "node",
5 | testMatch: ["/tests/**/*.test.ts"], // Matches .test.ts files in /tests folder
6 | moduleFileExtensions: ["ts", "js", "json"], // Recognizes .ts, .js, and .json files
7 | globals: {
8 | "ts-jest": {
9 | tsconfig: "/tsconfig.json", // Path to your tsconfig file
10 | },
11 | },
12 | roots: [""], // Specifies the root directory for the project
13 | modulePaths: [""], // Specifies the root directory for the project
14 | };
15 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@shipsecure/eslint-plugin-next",
3 | "version": "1.0.2",
4 | "description": "Secure your Next.js applications with @shipsecure/eslint-plugin-next, an ESLint plugin designed to detect and prevent common security vulnerabilities.",
5 | "main": "dist/index.js",
6 | "scripts": {
7 | "build": "tsc",
8 | "lint": "eslint .",
9 | "test": "jest"
10 | },
11 | "keywords": [
12 | "eslint",
13 | "eslintplugin",
14 | "eslint-plugin",
15 | "nextjs",
16 | "security"
17 | ],
18 | "files": [
19 | "dist"
20 | ],
21 | "author": "Simon Koeck (https://simon.koeck.dev)",
22 | "license": "MIT",
23 | "homepage": "https://github.com/shipsecure-labs/eslint-plugin-next",
24 | "peerDependencies": {
25 | "eslint": ">=8.0.0"
26 | },
27 | "devDependencies": {
28 | "@eslint/js": "^9.13.0",
29 | "@types/eslint__js": "^8.42.3",
30 | "@types/jest": "^29.5.14",
31 | "@types/node": "^22.8.5",
32 | "@typescript-eslint/rule-tester": "^8.12.2",
33 | "eslint": "^9.13.0",
34 | "eslint-plugin-eslint-plugin": "^6.3.1",
35 | "jest": "^29.7.0",
36 | "ts-jest": "^29.2.5",
37 | "typescript": "^5.6.3",
38 | "typescript-eslint": "^8.12.2"
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '6.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | devDependencies:
8 | '@eslint/js':
9 | specifier: ^9.13.0
10 | version: 9.13.0
11 | '@types/eslint__js':
12 | specifier: ^8.42.3
13 | version: 8.42.3
14 | '@types/jest':
15 | specifier: ^29.5.14
16 | version: 29.5.14
17 | '@types/node':
18 | specifier: ^22.8.5
19 | version: 22.8.5
20 | '@typescript-eslint/rule-tester':
21 | specifier: ^8.12.2
22 | version: 8.12.2(eslint@9.13.0)(typescript@5.6.3)
23 | eslint:
24 | specifier: ^9.13.0
25 | version: 9.13.0
26 | eslint-plugin-eslint-plugin:
27 | specifier: ^6.3.1
28 | version: 6.3.1(eslint@9.13.0)
29 | jest:
30 | specifier: ^29.7.0
31 | version: 29.7.0(@types/node@22.8.5)
32 | ts-jest:
33 | specifier: ^29.2.5
34 | version: 29.2.5(@babel/core@7.26.0)(jest@29.7.0)(typescript@5.6.3)
35 | typescript:
36 | specifier: ^5.6.3
37 | version: 5.6.3
38 | typescript-eslint:
39 | specifier: ^8.12.2
40 | version: 8.12.2(eslint@9.13.0)(typescript@5.6.3)
41 |
42 | packages:
43 |
44 | /@ampproject/remapping@2.3.0:
45 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
46 | engines: {node: '>=6.0.0'}
47 | dependencies:
48 | '@jridgewell/gen-mapping': 0.3.5
49 | '@jridgewell/trace-mapping': 0.3.25
50 | dev: true
51 |
52 | /@babel/code-frame@7.26.2:
53 | resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
54 | engines: {node: '>=6.9.0'}
55 | dependencies:
56 | '@babel/helper-validator-identifier': 7.25.9
57 | js-tokens: 4.0.0
58 | picocolors: 1.1.1
59 | dev: true
60 |
61 | /@babel/compat-data@7.26.2:
62 | resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==}
63 | engines: {node: '>=6.9.0'}
64 | dev: true
65 |
66 | /@babel/core@7.26.0:
67 | resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==}
68 | engines: {node: '>=6.9.0'}
69 | dependencies:
70 | '@ampproject/remapping': 2.3.0
71 | '@babel/code-frame': 7.26.2
72 | '@babel/generator': 7.26.2
73 | '@babel/helper-compilation-targets': 7.25.9
74 | '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0)
75 | '@babel/helpers': 7.26.0
76 | '@babel/parser': 7.26.2
77 | '@babel/template': 7.25.9
78 | '@babel/traverse': 7.25.9
79 | '@babel/types': 7.26.0
80 | convert-source-map: 2.0.0
81 | debug: 4.3.7
82 | gensync: 1.0.0-beta.2
83 | json5: 2.2.3
84 | semver: 6.3.1
85 | transitivePeerDependencies:
86 | - supports-color
87 | dev: true
88 |
89 | /@babel/generator@7.26.2:
90 | resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==}
91 | engines: {node: '>=6.9.0'}
92 | dependencies:
93 | '@babel/parser': 7.26.2
94 | '@babel/types': 7.26.0
95 | '@jridgewell/gen-mapping': 0.3.5
96 | '@jridgewell/trace-mapping': 0.3.25
97 | jsesc: 3.0.2
98 | dev: true
99 |
100 | /@babel/helper-compilation-targets@7.25.9:
101 | resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==}
102 | engines: {node: '>=6.9.0'}
103 | dependencies:
104 | '@babel/compat-data': 7.26.2
105 | '@babel/helper-validator-option': 7.25.9
106 | browserslist: 4.24.2
107 | lru-cache: 5.1.1
108 | semver: 6.3.1
109 | dev: true
110 |
111 | /@babel/helper-module-imports@7.25.9:
112 | resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==}
113 | engines: {node: '>=6.9.0'}
114 | dependencies:
115 | '@babel/traverse': 7.25.9
116 | '@babel/types': 7.26.0
117 | transitivePeerDependencies:
118 | - supports-color
119 | dev: true
120 |
121 | /@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0):
122 | resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==}
123 | engines: {node: '>=6.9.0'}
124 | peerDependencies:
125 | '@babel/core': ^7.0.0
126 | dependencies:
127 | '@babel/core': 7.26.0
128 | '@babel/helper-module-imports': 7.25.9
129 | '@babel/helper-validator-identifier': 7.25.9
130 | '@babel/traverse': 7.25.9
131 | transitivePeerDependencies:
132 | - supports-color
133 | dev: true
134 |
135 | /@babel/helper-plugin-utils@7.25.9:
136 | resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==}
137 | engines: {node: '>=6.9.0'}
138 | dev: true
139 |
140 | /@babel/helper-string-parser@7.25.9:
141 | resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
142 | engines: {node: '>=6.9.0'}
143 | dev: true
144 |
145 | /@babel/helper-validator-identifier@7.25.9:
146 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
147 | engines: {node: '>=6.9.0'}
148 | dev: true
149 |
150 | /@babel/helper-validator-option@7.25.9:
151 | resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==}
152 | engines: {node: '>=6.9.0'}
153 | dev: true
154 |
155 | /@babel/helpers@7.26.0:
156 | resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==}
157 | engines: {node: '>=6.9.0'}
158 | dependencies:
159 | '@babel/template': 7.25.9
160 | '@babel/types': 7.26.0
161 | dev: true
162 |
163 | /@babel/parser@7.26.2:
164 | resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==}
165 | engines: {node: '>=6.0.0'}
166 | hasBin: true
167 | dependencies:
168 | '@babel/types': 7.26.0
169 | dev: true
170 |
171 | /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.0):
172 | resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
173 | peerDependencies:
174 | '@babel/core': ^7.0.0-0
175 | dependencies:
176 | '@babel/core': 7.26.0
177 | '@babel/helper-plugin-utils': 7.25.9
178 | dev: true
179 |
180 | /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.0):
181 | resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
182 | peerDependencies:
183 | '@babel/core': ^7.0.0-0
184 | dependencies:
185 | '@babel/core': 7.26.0
186 | '@babel/helper-plugin-utils': 7.25.9
187 | dev: true
188 |
189 | /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.0):
190 | resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
191 | peerDependencies:
192 | '@babel/core': ^7.0.0-0
193 | dependencies:
194 | '@babel/core': 7.26.0
195 | '@babel/helper-plugin-utils': 7.25.9
196 | dev: true
197 |
198 | /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.0):
199 | resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
200 | engines: {node: '>=6.9.0'}
201 | peerDependencies:
202 | '@babel/core': ^7.0.0-0
203 | dependencies:
204 | '@babel/core': 7.26.0
205 | '@babel/helper-plugin-utils': 7.25.9
206 | dev: true
207 |
208 | /@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0):
209 | resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==}
210 | engines: {node: '>=6.9.0'}
211 | peerDependencies:
212 | '@babel/core': ^7.0.0-0
213 | dependencies:
214 | '@babel/core': 7.26.0
215 | '@babel/helper-plugin-utils': 7.25.9
216 | dev: true
217 |
218 | /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.0):
219 | resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
220 | peerDependencies:
221 | '@babel/core': ^7.0.0-0
222 | dependencies:
223 | '@babel/core': 7.26.0
224 | '@babel/helper-plugin-utils': 7.25.9
225 | dev: true
226 |
227 | /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.0):
228 | resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
229 | peerDependencies:
230 | '@babel/core': ^7.0.0-0
231 | dependencies:
232 | '@babel/core': 7.26.0
233 | '@babel/helper-plugin-utils': 7.25.9
234 | dev: true
235 |
236 | /@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0):
237 | resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==}
238 | engines: {node: '>=6.9.0'}
239 | peerDependencies:
240 | '@babel/core': ^7.0.0-0
241 | dependencies:
242 | '@babel/core': 7.26.0
243 | '@babel/helper-plugin-utils': 7.25.9
244 | dev: true
245 |
246 | /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.0):
247 | resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
248 | peerDependencies:
249 | '@babel/core': ^7.0.0-0
250 | dependencies:
251 | '@babel/core': 7.26.0
252 | '@babel/helper-plugin-utils': 7.25.9
253 | dev: true
254 |
255 | /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.0):
256 | resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
257 | peerDependencies:
258 | '@babel/core': ^7.0.0-0
259 | dependencies:
260 | '@babel/core': 7.26.0
261 | '@babel/helper-plugin-utils': 7.25.9
262 | dev: true
263 |
264 | /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.0):
265 | resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
266 | peerDependencies:
267 | '@babel/core': ^7.0.0-0
268 | dependencies:
269 | '@babel/core': 7.26.0
270 | '@babel/helper-plugin-utils': 7.25.9
271 | dev: true
272 |
273 | /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.0):
274 | resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
275 | peerDependencies:
276 | '@babel/core': ^7.0.0-0
277 | dependencies:
278 | '@babel/core': 7.26.0
279 | '@babel/helper-plugin-utils': 7.25.9
280 | dev: true
281 |
282 | /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.0):
283 | resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
284 | peerDependencies:
285 | '@babel/core': ^7.0.0-0
286 | dependencies:
287 | '@babel/core': 7.26.0
288 | '@babel/helper-plugin-utils': 7.25.9
289 | dev: true
290 |
291 | /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.0):
292 | resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
293 | peerDependencies:
294 | '@babel/core': ^7.0.0-0
295 | dependencies:
296 | '@babel/core': 7.26.0
297 | '@babel/helper-plugin-utils': 7.25.9
298 | dev: true
299 |
300 | /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.0):
301 | resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
302 | engines: {node: '>=6.9.0'}
303 | peerDependencies:
304 | '@babel/core': ^7.0.0-0
305 | dependencies:
306 | '@babel/core': 7.26.0
307 | '@babel/helper-plugin-utils': 7.25.9
308 | dev: true
309 |
310 | /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.0):
311 | resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
312 | engines: {node: '>=6.9.0'}
313 | peerDependencies:
314 | '@babel/core': ^7.0.0-0
315 | dependencies:
316 | '@babel/core': 7.26.0
317 | '@babel/helper-plugin-utils': 7.25.9
318 | dev: true
319 |
320 | /@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0):
321 | resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==}
322 | engines: {node: '>=6.9.0'}
323 | peerDependencies:
324 | '@babel/core': ^7.0.0-0
325 | dependencies:
326 | '@babel/core': 7.26.0
327 | '@babel/helper-plugin-utils': 7.25.9
328 | dev: true
329 |
330 | /@babel/template@7.25.9:
331 | resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==}
332 | engines: {node: '>=6.9.0'}
333 | dependencies:
334 | '@babel/code-frame': 7.26.2
335 | '@babel/parser': 7.26.2
336 | '@babel/types': 7.26.0
337 | dev: true
338 |
339 | /@babel/traverse@7.25.9:
340 | resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==}
341 | engines: {node: '>=6.9.0'}
342 | dependencies:
343 | '@babel/code-frame': 7.26.2
344 | '@babel/generator': 7.26.2
345 | '@babel/parser': 7.26.2
346 | '@babel/template': 7.25.9
347 | '@babel/types': 7.26.0
348 | debug: 4.3.7
349 | globals: 11.12.0
350 | transitivePeerDependencies:
351 | - supports-color
352 | dev: true
353 |
354 | /@babel/types@7.26.0:
355 | resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==}
356 | engines: {node: '>=6.9.0'}
357 | dependencies:
358 | '@babel/helper-string-parser': 7.25.9
359 | '@babel/helper-validator-identifier': 7.25.9
360 | dev: true
361 |
362 | /@bcoe/v8-coverage@0.2.3:
363 | resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
364 | dev: true
365 |
366 | /@eslint-community/eslint-utils@4.4.1(eslint@9.13.0):
367 | resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==}
368 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
369 | peerDependencies:
370 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
371 | dependencies:
372 | eslint: 9.13.0
373 | eslint-visitor-keys: 3.4.3
374 | dev: true
375 |
376 | /@eslint-community/regexpp@4.12.1:
377 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
378 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
379 | dev: true
380 |
381 | /@eslint/config-array@0.18.0:
382 | resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==}
383 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
384 | dependencies:
385 | '@eslint/object-schema': 2.1.4
386 | debug: 4.3.7
387 | minimatch: 3.1.2
388 | transitivePeerDependencies:
389 | - supports-color
390 | dev: true
391 |
392 | /@eslint/core@0.7.0:
393 | resolution: {integrity: sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==}
394 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
395 | dev: true
396 |
397 | /@eslint/eslintrc@3.1.0:
398 | resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==}
399 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
400 | dependencies:
401 | ajv: 6.12.6
402 | debug: 4.3.7
403 | espree: 10.3.0
404 | globals: 14.0.0
405 | ignore: 5.3.2
406 | import-fresh: 3.3.0
407 | js-yaml: 4.1.0
408 | minimatch: 3.1.2
409 | strip-json-comments: 3.1.1
410 | transitivePeerDependencies:
411 | - supports-color
412 | dev: true
413 |
414 | /@eslint/js@9.13.0:
415 | resolution: {integrity: sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==}
416 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
417 | dev: true
418 |
419 | /@eslint/object-schema@2.1.4:
420 | resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==}
421 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
422 | dev: true
423 |
424 | /@eslint/plugin-kit@0.2.2:
425 | resolution: {integrity: sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==}
426 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
427 | dependencies:
428 | levn: 0.4.1
429 | dev: true
430 |
431 | /@humanfs/core@0.19.1:
432 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
433 | engines: {node: '>=18.18.0'}
434 | dev: true
435 |
436 | /@humanfs/node@0.16.6:
437 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
438 | engines: {node: '>=18.18.0'}
439 | dependencies:
440 | '@humanfs/core': 0.19.1
441 | '@humanwhocodes/retry': 0.3.1
442 | dev: true
443 |
444 | /@humanwhocodes/module-importer@1.0.1:
445 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
446 | engines: {node: '>=12.22'}
447 | dev: true
448 |
449 | /@humanwhocodes/retry@0.3.1:
450 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
451 | engines: {node: '>=18.18'}
452 | dev: true
453 |
454 | /@istanbuljs/load-nyc-config@1.1.0:
455 | resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
456 | engines: {node: '>=8'}
457 | dependencies:
458 | camelcase: 5.3.1
459 | find-up: 4.1.0
460 | get-package-type: 0.1.0
461 | js-yaml: 3.14.1
462 | resolve-from: 5.0.0
463 | dev: true
464 |
465 | /@istanbuljs/schema@0.1.3:
466 | resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
467 | engines: {node: '>=8'}
468 | dev: true
469 |
470 | /@jest/console@29.7.0:
471 | resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==}
472 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
473 | dependencies:
474 | '@jest/types': 29.6.3
475 | '@types/node': 22.8.5
476 | chalk: 4.1.2
477 | jest-message-util: 29.7.0
478 | jest-util: 29.7.0
479 | slash: 3.0.0
480 | dev: true
481 |
482 | /@jest/core@29.7.0:
483 | resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==}
484 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
485 | peerDependencies:
486 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
487 | peerDependenciesMeta:
488 | node-notifier:
489 | optional: true
490 | dependencies:
491 | '@jest/console': 29.7.0
492 | '@jest/reporters': 29.7.0
493 | '@jest/test-result': 29.7.0
494 | '@jest/transform': 29.7.0
495 | '@jest/types': 29.6.3
496 | '@types/node': 22.8.5
497 | ansi-escapes: 4.3.2
498 | chalk: 4.1.2
499 | ci-info: 3.9.0
500 | exit: 0.1.2
501 | graceful-fs: 4.2.11
502 | jest-changed-files: 29.7.0
503 | jest-config: 29.7.0(@types/node@22.8.5)
504 | jest-haste-map: 29.7.0
505 | jest-message-util: 29.7.0
506 | jest-regex-util: 29.6.3
507 | jest-resolve: 29.7.0
508 | jest-resolve-dependencies: 29.7.0
509 | jest-runner: 29.7.0
510 | jest-runtime: 29.7.0
511 | jest-snapshot: 29.7.0
512 | jest-util: 29.7.0
513 | jest-validate: 29.7.0
514 | jest-watcher: 29.7.0
515 | micromatch: 4.0.8
516 | pretty-format: 29.7.0
517 | slash: 3.0.0
518 | strip-ansi: 6.0.1
519 | transitivePeerDependencies:
520 | - babel-plugin-macros
521 | - supports-color
522 | - ts-node
523 | dev: true
524 |
525 | /@jest/environment@29.7.0:
526 | resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==}
527 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
528 | dependencies:
529 | '@jest/fake-timers': 29.7.0
530 | '@jest/types': 29.6.3
531 | '@types/node': 22.8.5
532 | jest-mock: 29.7.0
533 | dev: true
534 |
535 | /@jest/expect-utils@29.7.0:
536 | resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==}
537 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
538 | dependencies:
539 | jest-get-type: 29.6.3
540 | dev: true
541 |
542 | /@jest/expect@29.7.0:
543 | resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==}
544 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
545 | dependencies:
546 | expect: 29.7.0
547 | jest-snapshot: 29.7.0
548 | transitivePeerDependencies:
549 | - supports-color
550 | dev: true
551 |
552 | /@jest/fake-timers@29.7.0:
553 | resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==}
554 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
555 | dependencies:
556 | '@jest/types': 29.6.3
557 | '@sinonjs/fake-timers': 10.3.0
558 | '@types/node': 22.8.5
559 | jest-message-util: 29.7.0
560 | jest-mock: 29.7.0
561 | jest-util: 29.7.0
562 | dev: true
563 |
564 | /@jest/globals@29.7.0:
565 | resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==}
566 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
567 | dependencies:
568 | '@jest/environment': 29.7.0
569 | '@jest/expect': 29.7.0
570 | '@jest/types': 29.6.3
571 | jest-mock: 29.7.0
572 | transitivePeerDependencies:
573 | - supports-color
574 | dev: true
575 |
576 | /@jest/reporters@29.7.0:
577 | resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==}
578 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
579 | peerDependencies:
580 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
581 | peerDependenciesMeta:
582 | node-notifier:
583 | optional: true
584 | dependencies:
585 | '@bcoe/v8-coverage': 0.2.3
586 | '@jest/console': 29.7.0
587 | '@jest/test-result': 29.7.0
588 | '@jest/transform': 29.7.0
589 | '@jest/types': 29.6.3
590 | '@jridgewell/trace-mapping': 0.3.25
591 | '@types/node': 22.8.5
592 | chalk: 4.1.2
593 | collect-v8-coverage: 1.0.2
594 | exit: 0.1.2
595 | glob: 7.2.3
596 | graceful-fs: 4.2.11
597 | istanbul-lib-coverage: 3.2.2
598 | istanbul-lib-instrument: 6.0.3
599 | istanbul-lib-report: 3.0.1
600 | istanbul-lib-source-maps: 4.0.1
601 | istanbul-reports: 3.1.7
602 | jest-message-util: 29.7.0
603 | jest-util: 29.7.0
604 | jest-worker: 29.7.0
605 | slash: 3.0.0
606 | string-length: 4.0.2
607 | strip-ansi: 6.0.1
608 | v8-to-istanbul: 9.3.0
609 | transitivePeerDependencies:
610 | - supports-color
611 | dev: true
612 |
613 | /@jest/schemas@29.6.3:
614 | resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
615 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
616 | dependencies:
617 | '@sinclair/typebox': 0.27.8
618 | dev: true
619 |
620 | /@jest/source-map@29.6.3:
621 | resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==}
622 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
623 | dependencies:
624 | '@jridgewell/trace-mapping': 0.3.25
625 | callsites: 3.1.0
626 | graceful-fs: 4.2.11
627 | dev: true
628 |
629 | /@jest/test-result@29.7.0:
630 | resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==}
631 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
632 | dependencies:
633 | '@jest/console': 29.7.0
634 | '@jest/types': 29.6.3
635 | '@types/istanbul-lib-coverage': 2.0.6
636 | collect-v8-coverage: 1.0.2
637 | dev: true
638 |
639 | /@jest/test-sequencer@29.7.0:
640 | resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==}
641 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
642 | dependencies:
643 | '@jest/test-result': 29.7.0
644 | graceful-fs: 4.2.11
645 | jest-haste-map: 29.7.0
646 | slash: 3.0.0
647 | dev: true
648 |
649 | /@jest/transform@29.7.0:
650 | resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==}
651 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
652 | dependencies:
653 | '@babel/core': 7.26.0
654 | '@jest/types': 29.6.3
655 | '@jridgewell/trace-mapping': 0.3.25
656 | babel-plugin-istanbul: 6.1.1
657 | chalk: 4.1.2
658 | convert-source-map: 2.0.0
659 | fast-json-stable-stringify: 2.1.0
660 | graceful-fs: 4.2.11
661 | jest-haste-map: 29.7.0
662 | jest-regex-util: 29.6.3
663 | jest-util: 29.7.0
664 | micromatch: 4.0.8
665 | pirates: 4.0.6
666 | slash: 3.0.0
667 | write-file-atomic: 4.0.2
668 | transitivePeerDependencies:
669 | - supports-color
670 | dev: true
671 |
672 | /@jest/types@29.6.3:
673 | resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==}
674 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
675 | dependencies:
676 | '@jest/schemas': 29.6.3
677 | '@types/istanbul-lib-coverage': 2.0.6
678 | '@types/istanbul-reports': 3.0.4
679 | '@types/node': 22.8.5
680 | '@types/yargs': 17.0.33
681 | chalk: 4.1.2
682 | dev: true
683 |
684 | /@jridgewell/gen-mapping@0.3.5:
685 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
686 | engines: {node: '>=6.0.0'}
687 | dependencies:
688 | '@jridgewell/set-array': 1.2.1
689 | '@jridgewell/sourcemap-codec': 1.5.0
690 | '@jridgewell/trace-mapping': 0.3.25
691 | dev: true
692 |
693 | /@jridgewell/resolve-uri@3.1.2:
694 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
695 | engines: {node: '>=6.0.0'}
696 | dev: true
697 |
698 | /@jridgewell/set-array@1.2.1:
699 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
700 | engines: {node: '>=6.0.0'}
701 | dev: true
702 |
703 | /@jridgewell/sourcemap-codec@1.5.0:
704 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
705 | dev: true
706 |
707 | /@jridgewell/trace-mapping@0.3.25:
708 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
709 | dependencies:
710 | '@jridgewell/resolve-uri': 3.1.2
711 | '@jridgewell/sourcemap-codec': 1.5.0
712 | dev: true
713 |
714 | /@nodelib/fs.scandir@2.1.5:
715 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
716 | engines: {node: '>= 8'}
717 | dependencies:
718 | '@nodelib/fs.stat': 2.0.5
719 | run-parallel: 1.2.0
720 | dev: true
721 |
722 | /@nodelib/fs.stat@2.0.5:
723 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
724 | engines: {node: '>= 8'}
725 | dev: true
726 |
727 | /@nodelib/fs.walk@1.2.8:
728 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
729 | engines: {node: '>= 8'}
730 | dependencies:
731 | '@nodelib/fs.scandir': 2.1.5
732 | fastq: 1.17.1
733 | dev: true
734 |
735 | /@sinclair/typebox@0.27.8:
736 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
737 | dev: true
738 |
739 | /@sinonjs/commons@3.0.1:
740 | resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==}
741 | dependencies:
742 | type-detect: 4.0.8
743 | dev: true
744 |
745 | /@sinonjs/fake-timers@10.3.0:
746 | resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==}
747 | dependencies:
748 | '@sinonjs/commons': 3.0.1
749 | dev: true
750 |
751 | /@types/babel__core@7.20.5:
752 | resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
753 | dependencies:
754 | '@babel/parser': 7.26.2
755 | '@babel/types': 7.26.0
756 | '@types/babel__generator': 7.6.8
757 | '@types/babel__template': 7.4.4
758 | '@types/babel__traverse': 7.20.6
759 | dev: true
760 |
761 | /@types/babel__generator@7.6.8:
762 | resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==}
763 | dependencies:
764 | '@babel/types': 7.26.0
765 | dev: true
766 |
767 | /@types/babel__template@7.4.4:
768 | resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
769 | dependencies:
770 | '@babel/parser': 7.26.2
771 | '@babel/types': 7.26.0
772 | dev: true
773 |
774 | /@types/babel__traverse@7.20.6:
775 | resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==}
776 | dependencies:
777 | '@babel/types': 7.26.0
778 | dev: true
779 |
780 | /@types/eslint@9.6.1:
781 | resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==}
782 | dependencies:
783 | '@types/estree': 1.0.6
784 | '@types/json-schema': 7.0.15
785 | dev: true
786 |
787 | /@types/eslint__js@8.42.3:
788 | resolution: {integrity: sha512-alfG737uhmPdnvkrLdZLcEKJ/B8s9Y4hrZ+YAdzUeoArBlSUERA2E87ROfOaS4jd/C45fzOoZzidLc1IPwLqOw==}
789 | dependencies:
790 | '@types/eslint': 9.6.1
791 | dev: true
792 |
793 | /@types/estree@1.0.6:
794 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
795 | dev: true
796 |
797 | /@types/graceful-fs@4.1.9:
798 | resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==}
799 | dependencies:
800 | '@types/node': 22.8.5
801 | dev: true
802 |
803 | /@types/istanbul-lib-coverage@2.0.6:
804 | resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
805 | dev: true
806 |
807 | /@types/istanbul-lib-report@3.0.3:
808 | resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==}
809 | dependencies:
810 | '@types/istanbul-lib-coverage': 2.0.6
811 | dev: true
812 |
813 | /@types/istanbul-reports@3.0.4:
814 | resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==}
815 | dependencies:
816 | '@types/istanbul-lib-report': 3.0.3
817 | dev: true
818 |
819 | /@types/jest@29.5.14:
820 | resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==}
821 | dependencies:
822 | expect: 29.7.0
823 | pretty-format: 29.7.0
824 | dev: true
825 |
826 | /@types/json-schema@7.0.15:
827 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
828 | dev: true
829 |
830 | /@types/node@22.8.5:
831 | resolution: {integrity: sha512-5iYk6AMPtsMbkZqCO1UGF9W5L38twq11S2pYWkybGHH2ogPUvXWNlQqJBzuEZWKj/WRH+QTeiv6ySWqJtvIEgA==}
832 | dependencies:
833 | undici-types: 6.19.8
834 | dev: true
835 |
836 | /@types/stack-utils@2.0.3:
837 | resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==}
838 | dev: true
839 |
840 | /@types/yargs-parser@21.0.3:
841 | resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
842 | dev: true
843 |
844 | /@types/yargs@17.0.33:
845 | resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==}
846 | dependencies:
847 | '@types/yargs-parser': 21.0.3
848 | dev: true
849 |
850 | /@typescript-eslint/eslint-plugin@8.12.2(@typescript-eslint/parser@8.12.2)(eslint@9.13.0)(typescript@5.6.3):
851 | resolution: {integrity: sha512-gQxbxM8mcxBwaEmWdtLCIGLfixBMHhQjBqR8sVWNTPpcj45WlYL2IObS/DNMLH1DBP0n8qz+aiiLTGfopPEebw==}
852 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
853 | peerDependencies:
854 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
855 | eslint: ^8.57.0 || ^9.0.0
856 | typescript: '*'
857 | peerDependenciesMeta:
858 | typescript:
859 | optional: true
860 | dependencies:
861 | '@eslint-community/regexpp': 4.12.1
862 | '@typescript-eslint/parser': 8.12.2(eslint@9.13.0)(typescript@5.6.3)
863 | '@typescript-eslint/scope-manager': 8.12.2
864 | '@typescript-eslint/type-utils': 8.12.2(eslint@9.13.0)(typescript@5.6.3)
865 | '@typescript-eslint/utils': 8.12.2(eslint@9.13.0)(typescript@5.6.3)
866 | '@typescript-eslint/visitor-keys': 8.12.2
867 | eslint: 9.13.0
868 | graphemer: 1.4.0
869 | ignore: 5.3.2
870 | natural-compare: 1.4.0
871 | ts-api-utils: 1.3.0(typescript@5.6.3)
872 | typescript: 5.6.3
873 | transitivePeerDependencies:
874 | - supports-color
875 | dev: true
876 |
877 | /@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@5.6.3):
878 | resolution: {integrity: sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==}
879 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
880 | peerDependencies:
881 | eslint: ^8.57.0 || ^9.0.0
882 | typescript: '*'
883 | peerDependenciesMeta:
884 | typescript:
885 | optional: true
886 | dependencies:
887 | '@typescript-eslint/scope-manager': 8.12.2
888 | '@typescript-eslint/types': 8.12.2
889 | '@typescript-eslint/typescript-estree': 8.12.2(typescript@5.6.3)
890 | '@typescript-eslint/visitor-keys': 8.12.2
891 | debug: 4.3.7
892 | eslint: 9.13.0
893 | typescript: 5.6.3
894 | transitivePeerDependencies:
895 | - supports-color
896 | dev: true
897 |
898 | /@typescript-eslint/rule-tester@8.12.2(eslint@9.13.0)(typescript@5.6.3):
899 | resolution: {integrity: sha512-aggjJT+aZj/LJVUx/qX+97tYGGqpML6vnuLwjmNrjpRP047cuSlYutG1zX8fr3ibr9tzHxiwc03dlKFsLMd12g==}
900 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
901 | peerDependencies:
902 | eslint: ^8.57.0 || ^9.0.0
903 | dependencies:
904 | '@typescript-eslint/typescript-estree': 8.12.2(typescript@5.6.3)
905 | '@typescript-eslint/utils': 8.12.2(eslint@9.13.0)(typescript@5.6.3)
906 | ajv: 6.12.6
907 | eslint: 9.13.0
908 | json-stable-stringify-without-jsonify: 1.0.1
909 | lodash.merge: 4.6.2
910 | semver: 7.6.3
911 | transitivePeerDependencies:
912 | - supports-color
913 | - typescript
914 | dev: true
915 |
916 | /@typescript-eslint/scope-manager@8.12.2:
917 | resolution: {integrity: sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==}
918 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
919 | dependencies:
920 | '@typescript-eslint/types': 8.12.2
921 | '@typescript-eslint/visitor-keys': 8.12.2
922 | dev: true
923 |
924 | /@typescript-eslint/type-utils@8.12.2(eslint@9.13.0)(typescript@5.6.3):
925 | resolution: {integrity: sha512-bwuU4TAogPI+1q/IJSKuD4shBLc/d2vGcRT588q+jzayQyjVK2X6v/fbR4InY2U2sgf8MEvVCqEWUzYzgBNcGQ==}
926 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
927 | peerDependencies:
928 | typescript: '*'
929 | peerDependenciesMeta:
930 | typescript:
931 | optional: true
932 | dependencies:
933 | '@typescript-eslint/typescript-estree': 8.12.2(typescript@5.6.3)
934 | '@typescript-eslint/utils': 8.12.2(eslint@9.13.0)(typescript@5.6.3)
935 | debug: 4.3.7
936 | ts-api-utils: 1.3.0(typescript@5.6.3)
937 | typescript: 5.6.3
938 | transitivePeerDependencies:
939 | - eslint
940 | - supports-color
941 | dev: true
942 |
943 | /@typescript-eslint/types@8.12.2:
944 | resolution: {integrity: sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==}
945 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
946 | dev: true
947 |
948 | /@typescript-eslint/typescript-estree@8.12.2(typescript@5.6.3):
949 | resolution: {integrity: sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==}
950 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
951 | peerDependencies:
952 | typescript: '*'
953 | peerDependenciesMeta:
954 | typescript:
955 | optional: true
956 | dependencies:
957 | '@typescript-eslint/types': 8.12.2
958 | '@typescript-eslint/visitor-keys': 8.12.2
959 | debug: 4.3.7
960 | fast-glob: 3.3.2
961 | is-glob: 4.0.3
962 | minimatch: 9.0.5
963 | semver: 7.6.3
964 | ts-api-utils: 1.3.0(typescript@5.6.3)
965 | typescript: 5.6.3
966 | transitivePeerDependencies:
967 | - supports-color
968 | dev: true
969 |
970 | /@typescript-eslint/utils@8.12.2(eslint@9.13.0)(typescript@5.6.3):
971 | resolution: {integrity: sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==}
972 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
973 | peerDependencies:
974 | eslint: ^8.57.0 || ^9.0.0
975 | dependencies:
976 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.13.0)
977 | '@typescript-eslint/scope-manager': 8.12.2
978 | '@typescript-eslint/types': 8.12.2
979 | '@typescript-eslint/typescript-estree': 8.12.2(typescript@5.6.3)
980 | eslint: 9.13.0
981 | transitivePeerDependencies:
982 | - supports-color
983 | - typescript
984 | dev: true
985 |
986 | /@typescript-eslint/visitor-keys@8.12.2:
987 | resolution: {integrity: sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==}
988 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
989 | dependencies:
990 | '@typescript-eslint/types': 8.12.2
991 | eslint-visitor-keys: 3.4.3
992 | dev: true
993 |
994 | /acorn-jsx@5.3.2(acorn@8.14.0):
995 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
996 | peerDependencies:
997 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
998 | dependencies:
999 | acorn: 8.14.0
1000 | dev: true
1001 |
1002 | /acorn@8.14.0:
1003 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
1004 | engines: {node: '>=0.4.0'}
1005 | hasBin: true
1006 | dev: true
1007 |
1008 | /ajv@6.12.6:
1009 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
1010 | dependencies:
1011 | fast-deep-equal: 3.1.3
1012 | fast-json-stable-stringify: 2.1.0
1013 | json-schema-traverse: 0.4.1
1014 | uri-js: 4.4.1
1015 | dev: true
1016 |
1017 | /ansi-escapes@4.3.2:
1018 | resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
1019 | engines: {node: '>=8'}
1020 | dependencies:
1021 | type-fest: 0.21.3
1022 | dev: true
1023 |
1024 | /ansi-regex@5.0.1:
1025 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
1026 | engines: {node: '>=8'}
1027 | dev: true
1028 |
1029 | /ansi-styles@4.3.0:
1030 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
1031 | engines: {node: '>=8'}
1032 | dependencies:
1033 | color-convert: 2.0.1
1034 | dev: true
1035 |
1036 | /ansi-styles@5.2.0:
1037 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
1038 | engines: {node: '>=10'}
1039 | dev: true
1040 |
1041 | /anymatch@3.1.3:
1042 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
1043 | engines: {node: '>= 8'}
1044 | dependencies:
1045 | normalize-path: 3.0.0
1046 | picomatch: 2.3.1
1047 | dev: true
1048 |
1049 | /argparse@1.0.10:
1050 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
1051 | dependencies:
1052 | sprintf-js: 1.0.3
1053 | dev: true
1054 |
1055 | /argparse@2.0.1:
1056 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
1057 | dev: true
1058 |
1059 | /async@3.2.6:
1060 | resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
1061 | dev: true
1062 |
1063 | /babel-jest@29.7.0(@babel/core@7.26.0):
1064 | resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==}
1065 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
1066 | peerDependencies:
1067 | '@babel/core': ^7.8.0
1068 | dependencies:
1069 | '@babel/core': 7.26.0
1070 | '@jest/transform': 29.7.0
1071 | '@types/babel__core': 7.20.5
1072 | babel-plugin-istanbul: 6.1.1
1073 | babel-preset-jest: 29.6.3(@babel/core@7.26.0)
1074 | chalk: 4.1.2
1075 | graceful-fs: 4.2.11
1076 | slash: 3.0.0
1077 | transitivePeerDependencies:
1078 | - supports-color
1079 | dev: true
1080 |
1081 | /babel-plugin-istanbul@6.1.1:
1082 | resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==}
1083 | engines: {node: '>=8'}
1084 | dependencies:
1085 | '@babel/helper-plugin-utils': 7.25.9
1086 | '@istanbuljs/load-nyc-config': 1.1.0
1087 | '@istanbuljs/schema': 0.1.3
1088 | istanbul-lib-instrument: 5.2.1
1089 | test-exclude: 6.0.0
1090 | transitivePeerDependencies:
1091 | - supports-color
1092 | dev: true
1093 |
1094 | /babel-plugin-jest-hoist@29.6.3:
1095 | resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==}
1096 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
1097 | dependencies:
1098 | '@babel/template': 7.25.9
1099 | '@babel/types': 7.26.0
1100 | '@types/babel__core': 7.20.5
1101 | '@types/babel__traverse': 7.20.6
1102 | dev: true
1103 |
1104 | /babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.0):
1105 | resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==}
1106 | peerDependencies:
1107 | '@babel/core': ^7.0.0
1108 | dependencies:
1109 | '@babel/core': 7.26.0
1110 | '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.0)
1111 | '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.0)
1112 | '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.0)
1113 | '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.0)
1114 | '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0)
1115 | '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.0)
1116 | '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.0)
1117 | '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.0)
1118 | '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.0)
1119 | '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.0)
1120 | '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.0)
1121 | '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.0)
1122 | '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0)
1123 | '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.0)
1124 | '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.0)
1125 | dev: true
1126 |
1127 | /babel-preset-jest@29.6.3(@babel/core@7.26.0):
1128 | resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==}
1129 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
1130 | peerDependencies:
1131 | '@babel/core': ^7.0.0
1132 | dependencies:
1133 | '@babel/core': 7.26.0
1134 | babel-plugin-jest-hoist: 29.6.3
1135 | babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.0)
1136 | dev: true
1137 |
1138 | /balanced-match@1.0.2:
1139 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
1140 | dev: true
1141 |
1142 | /brace-expansion@1.1.11:
1143 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
1144 | dependencies:
1145 | balanced-match: 1.0.2
1146 | concat-map: 0.0.1
1147 | dev: true
1148 |
1149 | /brace-expansion@2.0.1:
1150 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
1151 | dependencies:
1152 | balanced-match: 1.0.2
1153 | dev: true
1154 |
1155 | /braces@3.0.3:
1156 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
1157 | engines: {node: '>=8'}
1158 | dependencies:
1159 | fill-range: 7.1.1
1160 | dev: true
1161 |
1162 | /browserslist@4.24.2:
1163 | resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==}
1164 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
1165 | hasBin: true
1166 | dependencies:
1167 | caniuse-lite: 1.0.30001676
1168 | electron-to-chromium: 1.5.49
1169 | node-releases: 2.0.18
1170 | update-browserslist-db: 1.1.1(browserslist@4.24.2)
1171 | dev: true
1172 |
1173 | /bs-logger@0.2.6:
1174 | resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==}
1175 | engines: {node: '>= 6'}
1176 | dependencies:
1177 | fast-json-stable-stringify: 2.1.0
1178 | dev: true
1179 |
1180 | /bser@2.1.1:
1181 | resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
1182 | dependencies:
1183 | node-int64: 0.4.0
1184 | dev: true
1185 |
1186 | /buffer-from@1.1.2:
1187 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
1188 | dev: true
1189 |
1190 | /callsites@3.1.0:
1191 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
1192 | engines: {node: '>=6'}
1193 | dev: true
1194 |
1195 | /camelcase@5.3.1:
1196 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
1197 | engines: {node: '>=6'}
1198 | dev: true
1199 |
1200 | /camelcase@6.3.0:
1201 | resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
1202 | engines: {node: '>=10'}
1203 | dev: true
1204 |
1205 | /caniuse-lite@1.0.30001676:
1206 | resolution: {integrity: sha512-Qz6zwGCiPghQXGJvgQAem79esjitvJ+CxSbSQkW9H/UX5hg8XM88d4lp2W+MEQ81j+Hip58Il+jGVdazk1z9cw==}
1207 | dev: true
1208 |
1209 | /chalk@4.1.2:
1210 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
1211 | engines: {node: '>=10'}
1212 | dependencies:
1213 | ansi-styles: 4.3.0
1214 | supports-color: 7.2.0
1215 | dev: true
1216 |
1217 | /char-regex@1.0.2:
1218 | resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
1219 | engines: {node: '>=10'}
1220 | dev: true
1221 |
1222 | /ci-info@3.9.0:
1223 | resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
1224 | engines: {node: '>=8'}
1225 | dev: true
1226 |
1227 | /cjs-module-lexer@1.4.1:
1228 | resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==}
1229 | dev: true
1230 |
1231 | /cliui@8.0.1:
1232 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
1233 | engines: {node: '>=12'}
1234 | dependencies:
1235 | string-width: 4.2.3
1236 | strip-ansi: 6.0.1
1237 | wrap-ansi: 7.0.0
1238 | dev: true
1239 |
1240 | /co@4.6.0:
1241 | resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==}
1242 | engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
1243 | dev: true
1244 |
1245 | /collect-v8-coverage@1.0.2:
1246 | resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==}
1247 | dev: true
1248 |
1249 | /color-convert@2.0.1:
1250 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
1251 | engines: {node: '>=7.0.0'}
1252 | dependencies:
1253 | color-name: 1.1.4
1254 | dev: true
1255 |
1256 | /color-name@1.1.4:
1257 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
1258 | dev: true
1259 |
1260 | /concat-map@0.0.1:
1261 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
1262 | dev: true
1263 |
1264 | /convert-source-map@2.0.0:
1265 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
1266 | dev: true
1267 |
1268 | /create-jest@29.7.0(@types/node@22.8.5):
1269 | resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==}
1270 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
1271 | hasBin: true
1272 | dependencies:
1273 | '@jest/types': 29.6.3
1274 | chalk: 4.1.2
1275 | exit: 0.1.2
1276 | graceful-fs: 4.2.11
1277 | jest-config: 29.7.0(@types/node@22.8.5)
1278 | jest-util: 29.7.0
1279 | prompts: 2.4.2
1280 | transitivePeerDependencies:
1281 | - '@types/node'
1282 | - babel-plugin-macros
1283 | - supports-color
1284 | - ts-node
1285 | dev: true
1286 |
1287 | /cross-spawn@7.0.3:
1288 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
1289 | engines: {node: '>= 8'}
1290 | dependencies:
1291 | path-key: 3.1.1
1292 | shebang-command: 2.0.0
1293 | which: 2.0.2
1294 | dev: true
1295 |
1296 | /debug@4.3.7:
1297 | resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
1298 | engines: {node: '>=6.0'}
1299 | peerDependencies:
1300 | supports-color: '*'
1301 | peerDependenciesMeta:
1302 | supports-color:
1303 | optional: true
1304 | dependencies:
1305 | ms: 2.1.3
1306 | dev: true
1307 |
1308 | /dedent@1.5.3:
1309 | resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==}
1310 | peerDependencies:
1311 | babel-plugin-macros: ^3.1.0
1312 | peerDependenciesMeta:
1313 | babel-plugin-macros:
1314 | optional: true
1315 | dev: true
1316 |
1317 | /deep-is@0.1.4:
1318 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
1319 | dev: true
1320 |
1321 | /deepmerge@4.3.1:
1322 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
1323 | engines: {node: '>=0.10.0'}
1324 | dev: true
1325 |
1326 | /detect-newline@3.1.0:
1327 | resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
1328 | engines: {node: '>=8'}
1329 | dev: true
1330 |
1331 | /diff-sequences@29.6.3:
1332 | resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
1333 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
1334 | dev: true
1335 |
1336 | /ejs@3.1.10:
1337 | resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==}
1338 | engines: {node: '>=0.10.0'}
1339 | hasBin: true
1340 | dependencies:
1341 | jake: 10.9.2
1342 | dev: true
1343 |
1344 | /electron-to-chromium@1.5.49:
1345 | resolution: {integrity: sha512-ZXfs1Of8fDb6z7WEYZjXpgIRF6MEu8JdeGA0A40aZq6OQbS+eJpnnV49epZRna2DU/YsEjSQuGtQPPtvt6J65A==}
1346 | dev: true
1347 |
1348 | /emittery@0.13.1:
1349 | resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==}
1350 | engines: {node: '>=12'}
1351 | dev: true
1352 |
1353 | /emoji-regex@8.0.0:
1354 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
1355 | dev: true
1356 |
1357 | /error-ex@1.3.2:
1358 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
1359 | dependencies:
1360 | is-arrayish: 0.2.1
1361 | dev: true
1362 |
1363 | /escalade@3.2.0:
1364 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
1365 | engines: {node: '>=6'}
1366 | dev: true
1367 |
1368 | /escape-string-regexp@2.0.0:
1369 | resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
1370 | engines: {node: '>=8'}
1371 | dev: true
1372 |
1373 | /escape-string-regexp@4.0.0:
1374 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
1375 | engines: {node: '>=10'}
1376 | dev: true
1377 |
1378 | /eslint-plugin-eslint-plugin@6.3.1(eslint@9.13.0):
1379 | resolution: {integrity: sha512-5OUvS+kzpfbX3Pyt7ULYLJBGdjM/tGPdjePGFE50Lqdqcn/dB0f9ifbRCrCGWBt10Ljk7O6ajj3BPOZ8vmD50g==}
1380 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1381 | peerDependencies:
1382 | eslint: '>=8.23.0'
1383 | dependencies:
1384 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.13.0)
1385 | eslint: 9.13.0
1386 | estraverse: 5.3.0
1387 | dev: true
1388 |
1389 | /eslint-scope@8.2.0:
1390 | resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==}
1391 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1392 | dependencies:
1393 | esrecurse: 4.3.0
1394 | estraverse: 5.3.0
1395 | dev: true
1396 |
1397 | /eslint-visitor-keys@3.4.3:
1398 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
1399 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1400 | dev: true
1401 |
1402 | /eslint-visitor-keys@4.2.0:
1403 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
1404 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1405 | dev: true
1406 |
1407 | /eslint@9.13.0:
1408 | resolution: {integrity: sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==}
1409 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1410 | hasBin: true
1411 | peerDependencies:
1412 | jiti: '*'
1413 | peerDependenciesMeta:
1414 | jiti:
1415 | optional: true
1416 | dependencies:
1417 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.13.0)
1418 | '@eslint-community/regexpp': 4.12.1
1419 | '@eslint/config-array': 0.18.0
1420 | '@eslint/core': 0.7.0
1421 | '@eslint/eslintrc': 3.1.0
1422 | '@eslint/js': 9.13.0
1423 | '@eslint/plugin-kit': 0.2.2
1424 | '@humanfs/node': 0.16.6
1425 | '@humanwhocodes/module-importer': 1.0.1
1426 | '@humanwhocodes/retry': 0.3.1
1427 | '@types/estree': 1.0.6
1428 | '@types/json-schema': 7.0.15
1429 | ajv: 6.12.6
1430 | chalk: 4.1.2
1431 | cross-spawn: 7.0.3
1432 | debug: 4.3.7
1433 | escape-string-regexp: 4.0.0
1434 | eslint-scope: 8.2.0
1435 | eslint-visitor-keys: 4.2.0
1436 | espree: 10.3.0
1437 | esquery: 1.6.0
1438 | esutils: 2.0.3
1439 | fast-deep-equal: 3.1.3
1440 | file-entry-cache: 8.0.0
1441 | find-up: 5.0.0
1442 | glob-parent: 6.0.2
1443 | ignore: 5.3.2
1444 | imurmurhash: 0.1.4
1445 | is-glob: 4.0.3
1446 | json-stable-stringify-without-jsonify: 1.0.1
1447 | lodash.merge: 4.6.2
1448 | minimatch: 3.1.2
1449 | natural-compare: 1.4.0
1450 | optionator: 0.9.4
1451 | text-table: 0.2.0
1452 | transitivePeerDependencies:
1453 | - supports-color
1454 | dev: true
1455 |
1456 | /espree@10.3.0:
1457 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
1458 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1459 | dependencies:
1460 | acorn: 8.14.0
1461 | acorn-jsx: 5.3.2(acorn@8.14.0)
1462 | eslint-visitor-keys: 4.2.0
1463 | dev: true
1464 |
1465 | /esprima@4.0.1:
1466 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
1467 | engines: {node: '>=4'}
1468 | hasBin: true
1469 | dev: true
1470 |
1471 | /esquery@1.6.0:
1472 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
1473 | engines: {node: '>=0.10'}
1474 | dependencies:
1475 | estraverse: 5.3.0
1476 | dev: true
1477 |
1478 | /esrecurse@4.3.0:
1479 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
1480 | engines: {node: '>=4.0'}
1481 | dependencies:
1482 | estraverse: 5.3.0
1483 | dev: true
1484 |
1485 | /estraverse@5.3.0:
1486 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
1487 | engines: {node: '>=4.0'}
1488 | dev: true
1489 |
1490 | /esutils@2.0.3:
1491 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
1492 | engines: {node: '>=0.10.0'}
1493 | dev: true
1494 |
1495 | /execa@5.1.1:
1496 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
1497 | engines: {node: '>=10'}
1498 | dependencies:
1499 | cross-spawn: 7.0.3
1500 | get-stream: 6.0.1
1501 | human-signals: 2.1.0
1502 | is-stream: 2.0.1
1503 | merge-stream: 2.0.0
1504 | npm-run-path: 4.0.1
1505 | onetime: 5.1.2
1506 | signal-exit: 3.0.7
1507 | strip-final-newline: 2.0.0
1508 | dev: true
1509 |
1510 | /exit@0.1.2:
1511 | resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==}
1512 | engines: {node: '>= 0.8.0'}
1513 | dev: true
1514 |
1515 | /expect@29.7.0:
1516 | resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==}
1517 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
1518 | dependencies:
1519 | '@jest/expect-utils': 29.7.0
1520 | jest-get-type: 29.6.3
1521 | jest-matcher-utils: 29.7.0
1522 | jest-message-util: 29.7.0
1523 | jest-util: 29.7.0
1524 | dev: true
1525 |
1526 | /fast-deep-equal@3.1.3:
1527 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
1528 | dev: true
1529 |
1530 | /fast-glob@3.3.2:
1531 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
1532 | engines: {node: '>=8.6.0'}
1533 | dependencies:
1534 | '@nodelib/fs.stat': 2.0.5
1535 | '@nodelib/fs.walk': 1.2.8
1536 | glob-parent: 5.1.2
1537 | merge2: 1.4.1
1538 | micromatch: 4.0.8
1539 | dev: true
1540 |
1541 | /fast-json-stable-stringify@2.1.0:
1542 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
1543 | dev: true
1544 |
1545 | /fast-levenshtein@2.0.6:
1546 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
1547 | dev: true
1548 |
1549 | /fastq@1.17.1:
1550 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
1551 | dependencies:
1552 | reusify: 1.0.4
1553 | dev: true
1554 |
1555 | /fb-watchman@2.0.2:
1556 | resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
1557 | dependencies:
1558 | bser: 2.1.1
1559 | dev: true
1560 |
1561 | /file-entry-cache@8.0.0:
1562 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
1563 | engines: {node: '>=16.0.0'}
1564 | dependencies:
1565 | flat-cache: 4.0.1
1566 | dev: true
1567 |
1568 | /filelist@1.0.4:
1569 | resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
1570 | dependencies:
1571 | minimatch: 5.1.6
1572 | dev: true
1573 |
1574 | /fill-range@7.1.1:
1575 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
1576 | engines: {node: '>=8'}
1577 | dependencies:
1578 | to-regex-range: 5.0.1
1579 | dev: true
1580 |
1581 | /find-up@4.1.0:
1582 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
1583 | engines: {node: '>=8'}
1584 | dependencies:
1585 | locate-path: 5.0.0
1586 | path-exists: 4.0.0
1587 | dev: true
1588 |
1589 | /find-up@5.0.0:
1590 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
1591 | engines: {node: '>=10'}
1592 | dependencies:
1593 | locate-path: 6.0.0
1594 | path-exists: 4.0.0
1595 | dev: true
1596 |
1597 | /flat-cache@4.0.1:
1598 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
1599 | engines: {node: '>=16'}
1600 | dependencies:
1601 | flatted: 3.3.1
1602 | keyv: 4.5.4
1603 | dev: true
1604 |
1605 | /flatted@3.3.1:
1606 | resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
1607 | dev: true
1608 |
1609 | /fs.realpath@1.0.0:
1610 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
1611 | dev: true
1612 |
1613 | /fsevents@2.3.3:
1614 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
1615 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1616 | os: [darwin]
1617 | requiresBuild: true
1618 | dev: true
1619 | optional: true
1620 |
1621 | /function-bind@1.1.2:
1622 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
1623 | dev: true
1624 |
1625 | /gensync@1.0.0-beta.2:
1626 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
1627 | engines: {node: '>=6.9.0'}
1628 | dev: true
1629 |
1630 | /get-caller-file@2.0.5:
1631 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
1632 | engines: {node: 6.* || 8.* || >= 10.*}
1633 | dev: true
1634 |
1635 | /get-package-type@0.1.0:
1636 | resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
1637 | engines: {node: '>=8.0.0'}
1638 | dev: true
1639 |
1640 | /get-stream@6.0.1:
1641 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
1642 | engines: {node: '>=10'}
1643 | dev: true
1644 |
1645 | /glob-parent@5.1.2:
1646 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
1647 | engines: {node: '>= 6'}
1648 | dependencies:
1649 | is-glob: 4.0.3
1650 | dev: true
1651 |
1652 | /glob-parent@6.0.2:
1653 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
1654 | engines: {node: '>=10.13.0'}
1655 | dependencies:
1656 | is-glob: 4.0.3
1657 | dev: true
1658 |
1659 | /glob@7.2.3:
1660 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
1661 | deprecated: Glob versions prior to v9 are no longer supported
1662 | dependencies:
1663 | fs.realpath: 1.0.0
1664 | inflight: 1.0.6
1665 | inherits: 2.0.4
1666 | minimatch: 3.1.2
1667 | once: 1.4.0
1668 | path-is-absolute: 1.0.1
1669 | dev: true
1670 |
1671 | /globals@11.12.0:
1672 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
1673 | engines: {node: '>=4'}
1674 | dev: true
1675 |
1676 | /globals@14.0.0:
1677 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
1678 | engines: {node: '>=18'}
1679 | dev: true
1680 |
1681 | /graceful-fs@4.2.11:
1682 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
1683 | dev: true
1684 |
1685 | /graphemer@1.4.0:
1686 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
1687 | dev: true
1688 |
1689 | /has-flag@4.0.0:
1690 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1691 | engines: {node: '>=8'}
1692 | dev: true
1693 |
1694 | /hasown@2.0.2:
1695 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
1696 | engines: {node: '>= 0.4'}
1697 | dependencies:
1698 | function-bind: 1.1.2
1699 | dev: true
1700 |
1701 | /html-escaper@2.0.2:
1702 | resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
1703 | dev: true
1704 |
1705 | /human-signals@2.1.0:
1706 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
1707 | engines: {node: '>=10.17.0'}
1708 | dev: true
1709 |
1710 | /ignore@5.3.2:
1711 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
1712 | engines: {node: '>= 4'}
1713 | dev: true
1714 |
1715 | /import-fresh@3.3.0:
1716 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
1717 | engines: {node: '>=6'}
1718 | dependencies:
1719 | parent-module: 1.0.1
1720 | resolve-from: 4.0.0
1721 | dev: true
1722 |
1723 | /import-local@3.2.0:
1724 | resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==}
1725 | engines: {node: '>=8'}
1726 | hasBin: true
1727 | dependencies:
1728 | pkg-dir: 4.2.0
1729 | resolve-cwd: 3.0.0
1730 | dev: true
1731 |
1732 | /imurmurhash@0.1.4:
1733 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
1734 | engines: {node: '>=0.8.19'}
1735 | dev: true
1736 |
1737 | /inflight@1.0.6:
1738 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
1739 | deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
1740 | dependencies:
1741 | once: 1.4.0
1742 | wrappy: 1.0.2
1743 | dev: true
1744 |
1745 | /inherits@2.0.4:
1746 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1747 | dev: true
1748 |
1749 | /is-arrayish@0.2.1:
1750 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
1751 | dev: true
1752 |
1753 | /is-core-module@2.15.1:
1754 | resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==}
1755 | engines: {node: '>= 0.4'}
1756 | dependencies:
1757 | hasown: 2.0.2
1758 | dev: true
1759 |
1760 | /is-extglob@2.1.1:
1761 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1762 | engines: {node: '>=0.10.0'}
1763 | dev: true
1764 |
1765 | /is-fullwidth-code-point@3.0.0:
1766 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
1767 | engines: {node: '>=8'}
1768 | dev: true
1769 |
1770 | /is-generator-fn@2.1.0:
1771 | resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==}
1772 | engines: {node: '>=6'}
1773 | dev: true
1774 |
1775 | /is-glob@4.0.3:
1776 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1777 | engines: {node: '>=0.10.0'}
1778 | dependencies:
1779 | is-extglob: 2.1.1
1780 | dev: true
1781 |
1782 | /is-number@7.0.0:
1783 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1784 | engines: {node: '>=0.12.0'}
1785 | dev: true
1786 |
1787 | /is-stream@2.0.1:
1788 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
1789 | engines: {node: '>=8'}
1790 | dev: true
1791 |
1792 | /isexe@2.0.0:
1793 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1794 | dev: true
1795 |
1796 | /istanbul-lib-coverage@3.2.2:
1797 | resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
1798 | engines: {node: '>=8'}
1799 | dev: true
1800 |
1801 | /istanbul-lib-instrument@5.2.1:
1802 | resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==}
1803 | engines: {node: '>=8'}
1804 | dependencies:
1805 | '@babel/core': 7.26.0
1806 | '@babel/parser': 7.26.2
1807 | '@istanbuljs/schema': 0.1.3
1808 | istanbul-lib-coverage: 3.2.2
1809 | semver: 6.3.1
1810 | transitivePeerDependencies:
1811 | - supports-color
1812 | dev: true
1813 |
1814 | /istanbul-lib-instrument@6.0.3:
1815 | resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==}
1816 | engines: {node: '>=10'}
1817 | dependencies:
1818 | '@babel/core': 7.26.0
1819 | '@babel/parser': 7.26.2
1820 | '@istanbuljs/schema': 0.1.3
1821 | istanbul-lib-coverage: 3.2.2
1822 | semver: 7.6.3
1823 | transitivePeerDependencies:
1824 | - supports-color
1825 | dev: true
1826 |
1827 | /istanbul-lib-report@3.0.1:
1828 | resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
1829 | engines: {node: '>=10'}
1830 | dependencies:
1831 | istanbul-lib-coverage: 3.2.2
1832 | make-dir: 4.0.0
1833 | supports-color: 7.2.0
1834 | dev: true
1835 |
1836 | /istanbul-lib-source-maps@4.0.1:
1837 | resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==}
1838 | engines: {node: '>=10'}
1839 | dependencies:
1840 | debug: 4.3.7
1841 | istanbul-lib-coverage: 3.2.2
1842 | source-map: 0.6.1
1843 | transitivePeerDependencies:
1844 | - supports-color
1845 | dev: true
1846 |
1847 | /istanbul-reports@3.1.7:
1848 | resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==}
1849 | engines: {node: '>=8'}
1850 | dependencies:
1851 | html-escaper: 2.0.2
1852 | istanbul-lib-report: 3.0.1
1853 | dev: true
1854 |
1855 | /jake@10.9.2:
1856 | resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==}
1857 | engines: {node: '>=10'}
1858 | hasBin: true
1859 | dependencies:
1860 | async: 3.2.6
1861 | chalk: 4.1.2
1862 | filelist: 1.0.4
1863 | minimatch: 3.1.2
1864 | dev: true
1865 |
1866 | /jest-changed-files@29.7.0:
1867 | resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==}
1868 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
1869 | dependencies:
1870 | execa: 5.1.1
1871 | jest-util: 29.7.0
1872 | p-limit: 3.1.0
1873 | dev: true
1874 |
1875 | /jest-circus@29.7.0:
1876 | resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==}
1877 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
1878 | dependencies:
1879 | '@jest/environment': 29.7.0
1880 | '@jest/expect': 29.7.0
1881 | '@jest/test-result': 29.7.0
1882 | '@jest/types': 29.6.3
1883 | '@types/node': 22.8.5
1884 | chalk: 4.1.2
1885 | co: 4.6.0
1886 | dedent: 1.5.3
1887 | is-generator-fn: 2.1.0
1888 | jest-each: 29.7.0
1889 | jest-matcher-utils: 29.7.0
1890 | jest-message-util: 29.7.0
1891 | jest-runtime: 29.7.0
1892 | jest-snapshot: 29.7.0
1893 | jest-util: 29.7.0
1894 | p-limit: 3.1.0
1895 | pretty-format: 29.7.0
1896 | pure-rand: 6.1.0
1897 | slash: 3.0.0
1898 | stack-utils: 2.0.6
1899 | transitivePeerDependencies:
1900 | - babel-plugin-macros
1901 | - supports-color
1902 | dev: true
1903 |
1904 | /jest-cli@29.7.0(@types/node@22.8.5):
1905 | resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==}
1906 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
1907 | hasBin: true
1908 | peerDependencies:
1909 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
1910 | peerDependenciesMeta:
1911 | node-notifier:
1912 | optional: true
1913 | dependencies:
1914 | '@jest/core': 29.7.0
1915 | '@jest/test-result': 29.7.0
1916 | '@jest/types': 29.6.3
1917 | chalk: 4.1.2
1918 | create-jest: 29.7.0(@types/node@22.8.5)
1919 | exit: 0.1.2
1920 | import-local: 3.2.0
1921 | jest-config: 29.7.0(@types/node@22.8.5)
1922 | jest-util: 29.7.0
1923 | jest-validate: 29.7.0
1924 | yargs: 17.7.2
1925 | transitivePeerDependencies:
1926 | - '@types/node'
1927 | - babel-plugin-macros
1928 | - supports-color
1929 | - ts-node
1930 | dev: true
1931 |
1932 | /jest-config@29.7.0(@types/node@22.8.5):
1933 | resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==}
1934 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
1935 | peerDependencies:
1936 | '@types/node': '*'
1937 | ts-node: '>=9.0.0'
1938 | peerDependenciesMeta:
1939 | '@types/node':
1940 | optional: true
1941 | ts-node:
1942 | optional: true
1943 | dependencies:
1944 | '@babel/core': 7.26.0
1945 | '@jest/test-sequencer': 29.7.0
1946 | '@jest/types': 29.6.3
1947 | '@types/node': 22.8.5
1948 | babel-jest: 29.7.0(@babel/core@7.26.0)
1949 | chalk: 4.1.2
1950 | ci-info: 3.9.0
1951 | deepmerge: 4.3.1
1952 | glob: 7.2.3
1953 | graceful-fs: 4.2.11
1954 | jest-circus: 29.7.0
1955 | jest-environment-node: 29.7.0
1956 | jest-get-type: 29.6.3
1957 | jest-regex-util: 29.6.3
1958 | jest-resolve: 29.7.0
1959 | jest-runner: 29.7.0
1960 | jest-util: 29.7.0
1961 | jest-validate: 29.7.0
1962 | micromatch: 4.0.8
1963 | parse-json: 5.2.0
1964 | pretty-format: 29.7.0
1965 | slash: 3.0.0
1966 | strip-json-comments: 3.1.1
1967 | transitivePeerDependencies:
1968 | - babel-plugin-macros
1969 | - supports-color
1970 | dev: true
1971 |
1972 | /jest-diff@29.7.0:
1973 | resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==}
1974 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
1975 | dependencies:
1976 | chalk: 4.1.2
1977 | diff-sequences: 29.6.3
1978 | jest-get-type: 29.6.3
1979 | pretty-format: 29.7.0
1980 | dev: true
1981 |
1982 | /jest-docblock@29.7.0:
1983 | resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==}
1984 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
1985 | dependencies:
1986 | detect-newline: 3.1.0
1987 | dev: true
1988 |
1989 | /jest-each@29.7.0:
1990 | resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==}
1991 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
1992 | dependencies:
1993 | '@jest/types': 29.6.3
1994 | chalk: 4.1.2
1995 | jest-get-type: 29.6.3
1996 | jest-util: 29.7.0
1997 | pretty-format: 29.7.0
1998 | dev: true
1999 |
2000 | /jest-environment-node@29.7.0:
2001 | resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==}
2002 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2003 | dependencies:
2004 | '@jest/environment': 29.7.0
2005 | '@jest/fake-timers': 29.7.0
2006 | '@jest/types': 29.6.3
2007 | '@types/node': 22.8.5
2008 | jest-mock: 29.7.0
2009 | jest-util: 29.7.0
2010 | dev: true
2011 |
2012 | /jest-get-type@29.6.3:
2013 | resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==}
2014 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2015 | dev: true
2016 |
2017 | /jest-haste-map@29.7.0:
2018 | resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==}
2019 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2020 | dependencies:
2021 | '@jest/types': 29.6.3
2022 | '@types/graceful-fs': 4.1.9
2023 | '@types/node': 22.8.5
2024 | anymatch: 3.1.3
2025 | fb-watchman: 2.0.2
2026 | graceful-fs: 4.2.11
2027 | jest-regex-util: 29.6.3
2028 | jest-util: 29.7.0
2029 | jest-worker: 29.7.0
2030 | micromatch: 4.0.8
2031 | walker: 1.0.8
2032 | optionalDependencies:
2033 | fsevents: 2.3.3
2034 | dev: true
2035 |
2036 | /jest-leak-detector@29.7.0:
2037 | resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==}
2038 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2039 | dependencies:
2040 | jest-get-type: 29.6.3
2041 | pretty-format: 29.7.0
2042 | dev: true
2043 |
2044 | /jest-matcher-utils@29.7.0:
2045 | resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==}
2046 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2047 | dependencies:
2048 | chalk: 4.1.2
2049 | jest-diff: 29.7.0
2050 | jest-get-type: 29.6.3
2051 | pretty-format: 29.7.0
2052 | dev: true
2053 |
2054 | /jest-message-util@29.7.0:
2055 | resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==}
2056 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2057 | dependencies:
2058 | '@babel/code-frame': 7.26.2
2059 | '@jest/types': 29.6.3
2060 | '@types/stack-utils': 2.0.3
2061 | chalk: 4.1.2
2062 | graceful-fs: 4.2.11
2063 | micromatch: 4.0.8
2064 | pretty-format: 29.7.0
2065 | slash: 3.0.0
2066 | stack-utils: 2.0.6
2067 | dev: true
2068 |
2069 | /jest-mock@29.7.0:
2070 | resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==}
2071 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2072 | dependencies:
2073 | '@jest/types': 29.6.3
2074 | '@types/node': 22.8.5
2075 | jest-util: 29.7.0
2076 | dev: true
2077 |
2078 | /jest-pnp-resolver@1.2.3(jest-resolve@29.7.0):
2079 | resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==}
2080 | engines: {node: '>=6'}
2081 | peerDependencies:
2082 | jest-resolve: '*'
2083 | peerDependenciesMeta:
2084 | jest-resolve:
2085 | optional: true
2086 | dependencies:
2087 | jest-resolve: 29.7.0
2088 | dev: true
2089 |
2090 | /jest-regex-util@29.6.3:
2091 | resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==}
2092 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2093 | dev: true
2094 |
2095 | /jest-resolve-dependencies@29.7.0:
2096 | resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==}
2097 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2098 | dependencies:
2099 | jest-regex-util: 29.6.3
2100 | jest-snapshot: 29.7.0
2101 | transitivePeerDependencies:
2102 | - supports-color
2103 | dev: true
2104 |
2105 | /jest-resolve@29.7.0:
2106 | resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==}
2107 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2108 | dependencies:
2109 | chalk: 4.1.2
2110 | graceful-fs: 4.2.11
2111 | jest-haste-map: 29.7.0
2112 | jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0)
2113 | jest-util: 29.7.0
2114 | jest-validate: 29.7.0
2115 | resolve: 1.22.8
2116 | resolve.exports: 2.0.2
2117 | slash: 3.0.0
2118 | dev: true
2119 |
2120 | /jest-runner@29.7.0:
2121 | resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==}
2122 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2123 | dependencies:
2124 | '@jest/console': 29.7.0
2125 | '@jest/environment': 29.7.0
2126 | '@jest/test-result': 29.7.0
2127 | '@jest/transform': 29.7.0
2128 | '@jest/types': 29.6.3
2129 | '@types/node': 22.8.5
2130 | chalk: 4.1.2
2131 | emittery: 0.13.1
2132 | graceful-fs: 4.2.11
2133 | jest-docblock: 29.7.0
2134 | jest-environment-node: 29.7.0
2135 | jest-haste-map: 29.7.0
2136 | jest-leak-detector: 29.7.0
2137 | jest-message-util: 29.7.0
2138 | jest-resolve: 29.7.0
2139 | jest-runtime: 29.7.0
2140 | jest-util: 29.7.0
2141 | jest-watcher: 29.7.0
2142 | jest-worker: 29.7.0
2143 | p-limit: 3.1.0
2144 | source-map-support: 0.5.13
2145 | transitivePeerDependencies:
2146 | - supports-color
2147 | dev: true
2148 |
2149 | /jest-runtime@29.7.0:
2150 | resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==}
2151 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2152 | dependencies:
2153 | '@jest/environment': 29.7.0
2154 | '@jest/fake-timers': 29.7.0
2155 | '@jest/globals': 29.7.0
2156 | '@jest/source-map': 29.6.3
2157 | '@jest/test-result': 29.7.0
2158 | '@jest/transform': 29.7.0
2159 | '@jest/types': 29.6.3
2160 | '@types/node': 22.8.5
2161 | chalk: 4.1.2
2162 | cjs-module-lexer: 1.4.1
2163 | collect-v8-coverage: 1.0.2
2164 | glob: 7.2.3
2165 | graceful-fs: 4.2.11
2166 | jest-haste-map: 29.7.0
2167 | jest-message-util: 29.7.0
2168 | jest-mock: 29.7.0
2169 | jest-regex-util: 29.6.3
2170 | jest-resolve: 29.7.0
2171 | jest-snapshot: 29.7.0
2172 | jest-util: 29.7.0
2173 | slash: 3.0.0
2174 | strip-bom: 4.0.0
2175 | transitivePeerDependencies:
2176 | - supports-color
2177 | dev: true
2178 |
2179 | /jest-snapshot@29.7.0:
2180 | resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==}
2181 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2182 | dependencies:
2183 | '@babel/core': 7.26.0
2184 | '@babel/generator': 7.26.2
2185 | '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0)
2186 | '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0)
2187 | '@babel/types': 7.26.0
2188 | '@jest/expect-utils': 29.7.0
2189 | '@jest/transform': 29.7.0
2190 | '@jest/types': 29.6.3
2191 | babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.0)
2192 | chalk: 4.1.2
2193 | expect: 29.7.0
2194 | graceful-fs: 4.2.11
2195 | jest-diff: 29.7.0
2196 | jest-get-type: 29.6.3
2197 | jest-matcher-utils: 29.7.0
2198 | jest-message-util: 29.7.0
2199 | jest-util: 29.7.0
2200 | natural-compare: 1.4.0
2201 | pretty-format: 29.7.0
2202 | semver: 7.6.3
2203 | transitivePeerDependencies:
2204 | - supports-color
2205 | dev: true
2206 |
2207 | /jest-util@29.7.0:
2208 | resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==}
2209 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2210 | dependencies:
2211 | '@jest/types': 29.6.3
2212 | '@types/node': 22.8.5
2213 | chalk: 4.1.2
2214 | ci-info: 3.9.0
2215 | graceful-fs: 4.2.11
2216 | picomatch: 2.3.1
2217 | dev: true
2218 |
2219 | /jest-validate@29.7.0:
2220 | resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==}
2221 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2222 | dependencies:
2223 | '@jest/types': 29.6.3
2224 | camelcase: 6.3.0
2225 | chalk: 4.1.2
2226 | jest-get-type: 29.6.3
2227 | leven: 3.1.0
2228 | pretty-format: 29.7.0
2229 | dev: true
2230 |
2231 | /jest-watcher@29.7.0:
2232 | resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==}
2233 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2234 | dependencies:
2235 | '@jest/test-result': 29.7.0
2236 | '@jest/types': 29.6.3
2237 | '@types/node': 22.8.5
2238 | ansi-escapes: 4.3.2
2239 | chalk: 4.1.2
2240 | emittery: 0.13.1
2241 | jest-util: 29.7.0
2242 | string-length: 4.0.2
2243 | dev: true
2244 |
2245 | /jest-worker@29.7.0:
2246 | resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==}
2247 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2248 | dependencies:
2249 | '@types/node': 22.8.5
2250 | jest-util: 29.7.0
2251 | merge-stream: 2.0.0
2252 | supports-color: 8.1.1
2253 | dev: true
2254 |
2255 | /jest@29.7.0(@types/node@22.8.5):
2256 | resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==}
2257 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2258 | hasBin: true
2259 | peerDependencies:
2260 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
2261 | peerDependenciesMeta:
2262 | node-notifier:
2263 | optional: true
2264 | dependencies:
2265 | '@jest/core': 29.7.0
2266 | '@jest/types': 29.6.3
2267 | import-local: 3.2.0
2268 | jest-cli: 29.7.0(@types/node@22.8.5)
2269 | transitivePeerDependencies:
2270 | - '@types/node'
2271 | - babel-plugin-macros
2272 | - supports-color
2273 | - ts-node
2274 | dev: true
2275 |
2276 | /js-tokens@4.0.0:
2277 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
2278 | dev: true
2279 |
2280 | /js-yaml@3.14.1:
2281 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
2282 | hasBin: true
2283 | dependencies:
2284 | argparse: 1.0.10
2285 | esprima: 4.0.1
2286 | dev: true
2287 |
2288 | /js-yaml@4.1.0:
2289 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
2290 | hasBin: true
2291 | dependencies:
2292 | argparse: 2.0.1
2293 | dev: true
2294 |
2295 | /jsesc@3.0.2:
2296 | resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==}
2297 | engines: {node: '>=6'}
2298 | hasBin: true
2299 | dev: true
2300 |
2301 | /json-buffer@3.0.1:
2302 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
2303 | dev: true
2304 |
2305 | /json-parse-even-better-errors@2.3.1:
2306 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
2307 | dev: true
2308 |
2309 | /json-schema-traverse@0.4.1:
2310 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
2311 | dev: true
2312 |
2313 | /json-stable-stringify-without-jsonify@1.0.1:
2314 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
2315 | dev: true
2316 |
2317 | /json5@2.2.3:
2318 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
2319 | engines: {node: '>=6'}
2320 | hasBin: true
2321 | dev: true
2322 |
2323 | /keyv@4.5.4:
2324 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
2325 | dependencies:
2326 | json-buffer: 3.0.1
2327 | dev: true
2328 |
2329 | /kleur@3.0.3:
2330 | resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
2331 | engines: {node: '>=6'}
2332 | dev: true
2333 |
2334 | /leven@3.1.0:
2335 | resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
2336 | engines: {node: '>=6'}
2337 | dev: true
2338 |
2339 | /levn@0.4.1:
2340 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
2341 | engines: {node: '>= 0.8.0'}
2342 | dependencies:
2343 | prelude-ls: 1.2.1
2344 | type-check: 0.4.0
2345 | dev: true
2346 |
2347 | /lines-and-columns@1.2.4:
2348 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
2349 | dev: true
2350 |
2351 | /locate-path@5.0.0:
2352 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
2353 | engines: {node: '>=8'}
2354 | dependencies:
2355 | p-locate: 4.1.0
2356 | dev: true
2357 |
2358 | /locate-path@6.0.0:
2359 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
2360 | engines: {node: '>=10'}
2361 | dependencies:
2362 | p-locate: 5.0.0
2363 | dev: true
2364 |
2365 | /lodash.memoize@4.1.2:
2366 | resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
2367 | dev: true
2368 |
2369 | /lodash.merge@4.6.2:
2370 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
2371 | dev: true
2372 |
2373 | /lru-cache@5.1.1:
2374 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
2375 | dependencies:
2376 | yallist: 3.1.1
2377 | dev: true
2378 |
2379 | /make-dir@4.0.0:
2380 | resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
2381 | engines: {node: '>=10'}
2382 | dependencies:
2383 | semver: 7.6.3
2384 | dev: true
2385 |
2386 | /make-error@1.3.6:
2387 | resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
2388 | dev: true
2389 |
2390 | /makeerror@1.0.12:
2391 | resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}
2392 | dependencies:
2393 | tmpl: 1.0.5
2394 | dev: true
2395 |
2396 | /merge-stream@2.0.0:
2397 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
2398 | dev: true
2399 |
2400 | /merge2@1.4.1:
2401 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
2402 | engines: {node: '>= 8'}
2403 | dev: true
2404 |
2405 | /micromatch@4.0.8:
2406 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
2407 | engines: {node: '>=8.6'}
2408 | dependencies:
2409 | braces: 3.0.3
2410 | picomatch: 2.3.1
2411 | dev: true
2412 |
2413 | /mimic-fn@2.1.0:
2414 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
2415 | engines: {node: '>=6'}
2416 | dev: true
2417 |
2418 | /minimatch@3.1.2:
2419 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
2420 | dependencies:
2421 | brace-expansion: 1.1.11
2422 | dev: true
2423 |
2424 | /minimatch@5.1.6:
2425 | resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
2426 | engines: {node: '>=10'}
2427 | dependencies:
2428 | brace-expansion: 2.0.1
2429 | dev: true
2430 |
2431 | /minimatch@9.0.5:
2432 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
2433 | engines: {node: '>=16 || 14 >=14.17'}
2434 | dependencies:
2435 | brace-expansion: 2.0.1
2436 | dev: true
2437 |
2438 | /ms@2.1.3:
2439 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
2440 | dev: true
2441 |
2442 | /natural-compare@1.4.0:
2443 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
2444 | dev: true
2445 |
2446 | /node-int64@0.4.0:
2447 | resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
2448 | dev: true
2449 |
2450 | /node-releases@2.0.18:
2451 | resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==}
2452 | dev: true
2453 |
2454 | /normalize-path@3.0.0:
2455 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
2456 | engines: {node: '>=0.10.0'}
2457 | dev: true
2458 |
2459 | /npm-run-path@4.0.1:
2460 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
2461 | engines: {node: '>=8'}
2462 | dependencies:
2463 | path-key: 3.1.1
2464 | dev: true
2465 |
2466 | /once@1.4.0:
2467 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
2468 | dependencies:
2469 | wrappy: 1.0.2
2470 | dev: true
2471 |
2472 | /onetime@5.1.2:
2473 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
2474 | engines: {node: '>=6'}
2475 | dependencies:
2476 | mimic-fn: 2.1.0
2477 | dev: true
2478 |
2479 | /optionator@0.9.4:
2480 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
2481 | engines: {node: '>= 0.8.0'}
2482 | dependencies:
2483 | deep-is: 0.1.4
2484 | fast-levenshtein: 2.0.6
2485 | levn: 0.4.1
2486 | prelude-ls: 1.2.1
2487 | type-check: 0.4.0
2488 | word-wrap: 1.2.5
2489 | dev: true
2490 |
2491 | /p-limit@2.3.0:
2492 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
2493 | engines: {node: '>=6'}
2494 | dependencies:
2495 | p-try: 2.2.0
2496 | dev: true
2497 |
2498 | /p-limit@3.1.0:
2499 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
2500 | engines: {node: '>=10'}
2501 | dependencies:
2502 | yocto-queue: 0.1.0
2503 | dev: true
2504 |
2505 | /p-locate@4.1.0:
2506 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
2507 | engines: {node: '>=8'}
2508 | dependencies:
2509 | p-limit: 2.3.0
2510 | dev: true
2511 |
2512 | /p-locate@5.0.0:
2513 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
2514 | engines: {node: '>=10'}
2515 | dependencies:
2516 | p-limit: 3.1.0
2517 | dev: true
2518 |
2519 | /p-try@2.2.0:
2520 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
2521 | engines: {node: '>=6'}
2522 | dev: true
2523 |
2524 | /parent-module@1.0.1:
2525 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
2526 | engines: {node: '>=6'}
2527 | dependencies:
2528 | callsites: 3.1.0
2529 | dev: true
2530 |
2531 | /parse-json@5.2.0:
2532 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
2533 | engines: {node: '>=8'}
2534 | dependencies:
2535 | '@babel/code-frame': 7.26.2
2536 | error-ex: 1.3.2
2537 | json-parse-even-better-errors: 2.3.1
2538 | lines-and-columns: 1.2.4
2539 | dev: true
2540 |
2541 | /path-exists@4.0.0:
2542 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
2543 | engines: {node: '>=8'}
2544 | dev: true
2545 |
2546 | /path-is-absolute@1.0.1:
2547 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
2548 | engines: {node: '>=0.10.0'}
2549 | dev: true
2550 |
2551 | /path-key@3.1.1:
2552 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
2553 | engines: {node: '>=8'}
2554 | dev: true
2555 |
2556 | /path-parse@1.0.7:
2557 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
2558 | dev: true
2559 |
2560 | /picocolors@1.1.1:
2561 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
2562 | dev: true
2563 |
2564 | /picomatch@2.3.1:
2565 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
2566 | engines: {node: '>=8.6'}
2567 | dev: true
2568 |
2569 | /pirates@4.0.6:
2570 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
2571 | engines: {node: '>= 6'}
2572 | dev: true
2573 |
2574 | /pkg-dir@4.2.0:
2575 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
2576 | engines: {node: '>=8'}
2577 | dependencies:
2578 | find-up: 4.1.0
2579 | dev: true
2580 |
2581 | /prelude-ls@1.2.1:
2582 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
2583 | engines: {node: '>= 0.8.0'}
2584 | dev: true
2585 |
2586 | /pretty-format@29.7.0:
2587 | resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
2588 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2589 | dependencies:
2590 | '@jest/schemas': 29.6.3
2591 | ansi-styles: 5.2.0
2592 | react-is: 18.3.1
2593 | dev: true
2594 |
2595 | /prompts@2.4.2:
2596 | resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
2597 | engines: {node: '>= 6'}
2598 | dependencies:
2599 | kleur: 3.0.3
2600 | sisteransi: 1.0.5
2601 | dev: true
2602 |
2603 | /punycode@2.3.1:
2604 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
2605 | engines: {node: '>=6'}
2606 | dev: true
2607 |
2608 | /pure-rand@6.1.0:
2609 | resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==}
2610 | dev: true
2611 |
2612 | /queue-microtask@1.2.3:
2613 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
2614 | dev: true
2615 |
2616 | /react-is@18.3.1:
2617 | resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
2618 | dev: true
2619 |
2620 | /require-directory@2.1.1:
2621 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
2622 | engines: {node: '>=0.10.0'}
2623 | dev: true
2624 |
2625 | /resolve-cwd@3.0.0:
2626 | resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
2627 | engines: {node: '>=8'}
2628 | dependencies:
2629 | resolve-from: 5.0.0
2630 | dev: true
2631 |
2632 | /resolve-from@4.0.0:
2633 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
2634 | engines: {node: '>=4'}
2635 | dev: true
2636 |
2637 | /resolve-from@5.0.0:
2638 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
2639 | engines: {node: '>=8'}
2640 | dev: true
2641 |
2642 | /resolve.exports@2.0.2:
2643 | resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==}
2644 | engines: {node: '>=10'}
2645 | dev: true
2646 |
2647 | /resolve@1.22.8:
2648 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
2649 | hasBin: true
2650 | dependencies:
2651 | is-core-module: 2.15.1
2652 | path-parse: 1.0.7
2653 | supports-preserve-symlinks-flag: 1.0.0
2654 | dev: true
2655 |
2656 | /reusify@1.0.4:
2657 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
2658 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
2659 | dev: true
2660 |
2661 | /run-parallel@1.2.0:
2662 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
2663 | dependencies:
2664 | queue-microtask: 1.2.3
2665 | dev: true
2666 |
2667 | /semver@6.3.1:
2668 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
2669 | hasBin: true
2670 | dev: true
2671 |
2672 | /semver@7.6.3:
2673 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
2674 | engines: {node: '>=10'}
2675 | hasBin: true
2676 | dev: true
2677 |
2678 | /shebang-command@2.0.0:
2679 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
2680 | engines: {node: '>=8'}
2681 | dependencies:
2682 | shebang-regex: 3.0.0
2683 | dev: true
2684 |
2685 | /shebang-regex@3.0.0:
2686 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
2687 | engines: {node: '>=8'}
2688 | dev: true
2689 |
2690 | /signal-exit@3.0.7:
2691 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
2692 | dev: true
2693 |
2694 | /sisteransi@1.0.5:
2695 | resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
2696 | dev: true
2697 |
2698 | /slash@3.0.0:
2699 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
2700 | engines: {node: '>=8'}
2701 | dev: true
2702 |
2703 | /source-map-support@0.5.13:
2704 | resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==}
2705 | dependencies:
2706 | buffer-from: 1.1.2
2707 | source-map: 0.6.1
2708 | dev: true
2709 |
2710 | /source-map@0.6.1:
2711 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
2712 | engines: {node: '>=0.10.0'}
2713 | dev: true
2714 |
2715 | /sprintf-js@1.0.3:
2716 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
2717 | dev: true
2718 |
2719 | /stack-utils@2.0.6:
2720 | resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
2721 | engines: {node: '>=10'}
2722 | dependencies:
2723 | escape-string-regexp: 2.0.0
2724 | dev: true
2725 |
2726 | /string-length@4.0.2:
2727 | resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==}
2728 | engines: {node: '>=10'}
2729 | dependencies:
2730 | char-regex: 1.0.2
2731 | strip-ansi: 6.0.1
2732 | dev: true
2733 |
2734 | /string-width@4.2.3:
2735 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
2736 | engines: {node: '>=8'}
2737 | dependencies:
2738 | emoji-regex: 8.0.0
2739 | is-fullwidth-code-point: 3.0.0
2740 | strip-ansi: 6.0.1
2741 | dev: true
2742 |
2743 | /strip-ansi@6.0.1:
2744 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
2745 | engines: {node: '>=8'}
2746 | dependencies:
2747 | ansi-regex: 5.0.1
2748 | dev: true
2749 |
2750 | /strip-bom@4.0.0:
2751 | resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==}
2752 | engines: {node: '>=8'}
2753 | dev: true
2754 |
2755 | /strip-final-newline@2.0.0:
2756 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
2757 | engines: {node: '>=6'}
2758 | dev: true
2759 |
2760 | /strip-json-comments@3.1.1:
2761 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
2762 | engines: {node: '>=8'}
2763 | dev: true
2764 |
2765 | /supports-color@7.2.0:
2766 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
2767 | engines: {node: '>=8'}
2768 | dependencies:
2769 | has-flag: 4.0.0
2770 | dev: true
2771 |
2772 | /supports-color@8.1.1:
2773 | resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
2774 | engines: {node: '>=10'}
2775 | dependencies:
2776 | has-flag: 4.0.0
2777 | dev: true
2778 |
2779 | /supports-preserve-symlinks-flag@1.0.0:
2780 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
2781 | engines: {node: '>= 0.4'}
2782 | dev: true
2783 |
2784 | /test-exclude@6.0.0:
2785 | resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
2786 | engines: {node: '>=8'}
2787 | dependencies:
2788 | '@istanbuljs/schema': 0.1.3
2789 | glob: 7.2.3
2790 | minimatch: 3.1.2
2791 | dev: true
2792 |
2793 | /text-table@0.2.0:
2794 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
2795 | dev: true
2796 |
2797 | /tmpl@1.0.5:
2798 | resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
2799 | dev: true
2800 |
2801 | /to-regex-range@5.0.1:
2802 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
2803 | engines: {node: '>=8.0'}
2804 | dependencies:
2805 | is-number: 7.0.0
2806 | dev: true
2807 |
2808 | /ts-api-utils@1.3.0(typescript@5.6.3):
2809 | resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==}
2810 | engines: {node: '>=16'}
2811 | peerDependencies:
2812 | typescript: '>=4.2.0'
2813 | dependencies:
2814 | typescript: 5.6.3
2815 | dev: true
2816 |
2817 | /ts-jest@29.2.5(@babel/core@7.26.0)(jest@29.7.0)(typescript@5.6.3):
2818 | resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==}
2819 | engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0}
2820 | hasBin: true
2821 | peerDependencies:
2822 | '@babel/core': '>=7.0.0-beta.0 <8'
2823 | '@jest/transform': ^29.0.0
2824 | '@jest/types': ^29.0.0
2825 | babel-jest: ^29.0.0
2826 | esbuild: '*'
2827 | jest: ^29.0.0
2828 | typescript: '>=4.3 <6'
2829 | peerDependenciesMeta:
2830 | '@babel/core':
2831 | optional: true
2832 | '@jest/transform':
2833 | optional: true
2834 | '@jest/types':
2835 | optional: true
2836 | babel-jest:
2837 | optional: true
2838 | esbuild:
2839 | optional: true
2840 | dependencies:
2841 | '@babel/core': 7.26.0
2842 | bs-logger: 0.2.6
2843 | ejs: 3.1.10
2844 | fast-json-stable-stringify: 2.1.0
2845 | jest: 29.7.0(@types/node@22.8.5)
2846 | jest-util: 29.7.0
2847 | json5: 2.2.3
2848 | lodash.memoize: 4.1.2
2849 | make-error: 1.3.6
2850 | semver: 7.6.3
2851 | typescript: 5.6.3
2852 | yargs-parser: 21.1.1
2853 | dev: true
2854 |
2855 | /type-check@0.4.0:
2856 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
2857 | engines: {node: '>= 0.8.0'}
2858 | dependencies:
2859 | prelude-ls: 1.2.1
2860 | dev: true
2861 |
2862 | /type-detect@4.0.8:
2863 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
2864 | engines: {node: '>=4'}
2865 | dev: true
2866 |
2867 | /type-fest@0.21.3:
2868 | resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
2869 | engines: {node: '>=10'}
2870 | dev: true
2871 |
2872 | /typescript-eslint@8.12.2(eslint@9.13.0)(typescript@5.6.3):
2873 | resolution: {integrity: sha512-UbuVUWSrHVR03q9CWx+JDHeO6B/Hr9p4U5lRH++5tq/EbFq1faYZe50ZSBePptgfIKLEti0aPQ3hFgnPVcd8ZQ==}
2874 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
2875 | peerDependencies:
2876 | typescript: '*'
2877 | peerDependenciesMeta:
2878 | typescript:
2879 | optional: true
2880 | dependencies:
2881 | '@typescript-eslint/eslint-plugin': 8.12.2(@typescript-eslint/parser@8.12.2)(eslint@9.13.0)(typescript@5.6.3)
2882 | '@typescript-eslint/parser': 8.12.2(eslint@9.13.0)(typescript@5.6.3)
2883 | '@typescript-eslint/utils': 8.12.2(eslint@9.13.0)(typescript@5.6.3)
2884 | typescript: 5.6.3
2885 | transitivePeerDependencies:
2886 | - eslint
2887 | - supports-color
2888 | dev: true
2889 |
2890 | /typescript@5.6.3:
2891 | resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
2892 | engines: {node: '>=14.17'}
2893 | hasBin: true
2894 | dev: true
2895 |
2896 | /undici-types@6.19.8:
2897 | resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
2898 | dev: true
2899 |
2900 | /update-browserslist-db@1.1.1(browserslist@4.24.2):
2901 | resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==}
2902 | hasBin: true
2903 | peerDependencies:
2904 | browserslist: '>= 4.21.0'
2905 | dependencies:
2906 | browserslist: 4.24.2
2907 | escalade: 3.2.0
2908 | picocolors: 1.1.1
2909 | dev: true
2910 |
2911 | /uri-js@4.4.1:
2912 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
2913 | dependencies:
2914 | punycode: 2.3.1
2915 | dev: true
2916 |
2917 | /v8-to-istanbul@9.3.0:
2918 | resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==}
2919 | engines: {node: '>=10.12.0'}
2920 | dependencies:
2921 | '@jridgewell/trace-mapping': 0.3.25
2922 | '@types/istanbul-lib-coverage': 2.0.6
2923 | convert-source-map: 2.0.0
2924 | dev: true
2925 |
2926 | /walker@1.0.8:
2927 | resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
2928 | dependencies:
2929 | makeerror: 1.0.12
2930 | dev: true
2931 |
2932 | /which@2.0.2:
2933 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
2934 | engines: {node: '>= 8'}
2935 | hasBin: true
2936 | dependencies:
2937 | isexe: 2.0.0
2938 | dev: true
2939 |
2940 | /word-wrap@1.2.5:
2941 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
2942 | engines: {node: '>=0.10.0'}
2943 | dev: true
2944 |
2945 | /wrap-ansi@7.0.0:
2946 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
2947 | engines: {node: '>=10'}
2948 | dependencies:
2949 | ansi-styles: 4.3.0
2950 | string-width: 4.2.3
2951 | strip-ansi: 6.0.1
2952 | dev: true
2953 |
2954 | /wrappy@1.0.2:
2955 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
2956 | dev: true
2957 |
2958 | /write-file-atomic@4.0.2:
2959 | resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==}
2960 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
2961 | dependencies:
2962 | imurmurhash: 0.1.4
2963 | signal-exit: 3.0.7
2964 | dev: true
2965 |
2966 | /y18n@5.0.8:
2967 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
2968 | engines: {node: '>=10'}
2969 | dev: true
2970 |
2971 | /yallist@3.1.1:
2972 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
2973 | dev: true
2974 |
2975 | /yargs-parser@21.1.1:
2976 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
2977 | engines: {node: '>=12'}
2978 | dev: true
2979 |
2980 | /yargs@17.7.2:
2981 | resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
2982 | engines: {node: '>=12'}
2983 | dependencies:
2984 | cliui: 8.0.1
2985 | escalade: 3.2.0
2986 | get-caller-file: 2.0.5
2987 | require-directory: 2.1.1
2988 | string-width: 4.2.3
2989 | y18n: 5.0.8
2990 | yargs-parser: 21.1.1
2991 | dev: true
2992 |
2993 | /yocto-queue@0.1.0:
2994 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
2995 | engines: {node: '>=10'}
2996 | dev: true
2997 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import { readFileSync } from "fs";
2 | import { rule as enforceHttps } from "./rules/enforce-https";
3 | import { rule as noClientSideSecrets } from "./rules/no-client-side-secrets";
4 | import { rule as noDangerouslySetInnerHtml } from "./rules/no-dangerously-set-inner-html";
5 | import { rule as noEval } from "./rules/no-eval";
6 | import { rule as noInlineStyles } from "./rules/no-inline-styles";
7 | import { rule as noOpenRedirects } from "./rules/no-open-redirects";
8 | import { rule as requireRelNoopenerNoreferrer } from "./rules/require-rel-noopener-noreferrer";
9 | import { rule as requireScriptIntegrity } from "./rules/require-script-integrity";
10 | import { resolve } from "path";
11 |
12 | const packageJson = JSON.parse(
13 | readFileSync(resolve(__dirname, "../package.json"), "utf8")
14 | );
15 |
16 | const plugin = {
17 | meta: {
18 | name: "@shipsecure/next",
19 | version: packageJson.version,
20 | },
21 | rules: {
22 | "enforce-https": enforceHttps,
23 | "no-client-side-secrets": noClientSideSecrets,
24 | "no-dangerously-set-inner-html": noDangerouslySetInnerHtml,
25 | "no-eval": noEval,
26 | "no-inline-styles": noInlineStyles,
27 | "no-open-redirects": noOpenRedirects,
28 | "require-rel-noopener-noreferrer": requireRelNoopenerNoreferrer,
29 | "require-script-integrity": requireScriptIntegrity,
30 | },
31 | configs: {},
32 | };
33 |
34 | Object.assign(plugin.configs, {
35 | recommended: {
36 | name: "@shipsecure/next/recommended",
37 | plugins: {
38 | "@shipsecure/next": plugin,
39 | },
40 | rules: {
41 | "@shipsecure/next/enforce-https": "warn",
42 | "@shipsecure/next/no-client-side-secrets": "warn",
43 | "@shipsecure/next/no-dangerously-set-inner-html": "error",
44 | "@shipsecure/next/no-eval": "error",
45 | "@shipsecure/next/no-inline-styles": "warn",
46 | "@shipsecure/next/no-open-redirects": "warn",
47 | "@shipsecure/next/require-rel-noopener-noreferrer": "warn",
48 | "@shipsecure/next/require-script-integrity": "warn",
49 | },
50 | },
51 | "recommended-legacy": {
52 | plugins: ["@shipsecure/next"],
53 | rules: {
54 | "@shipsecure/next/enforce-https": "warn",
55 | "@shipsecure/next/no-client-side-secrets": "warn",
56 | "@shipsecure/next/no-dangerously-set-inner-html": "error",
57 | "@shipsecure/next/no-eval": "error",
58 | "@shipsecure/next/no-inline-styles": "warn",
59 | "@shipsecure/next/no-open-redirects": "warn",
60 | "@shipsecure/next/require-rel-noopener-noreferrer": "warn",
61 | "@shipsecure/next/require-script-integrity": "warn",
62 | },
63 | },
64 | });
65 |
66 | module.exports = plugin;
67 |
--------------------------------------------------------------------------------
/src/rules/enforce-https.ts:
--------------------------------------------------------------------------------
1 | import { createRule } from "../utils/rule";
2 |
3 | export const rule = createRule({
4 | create(context) {
5 | return {
6 | CallExpression(node) {
7 | if (
8 | (node.callee.type === "Identifier" && node.callee.name === "fetch") ||
9 | (node.callee.type === "MemberExpression" &&
10 | node.callee.object.type === "Identifier" &&
11 | node.callee.object.name === "axios")
12 | ) {
13 | const firstArg = node.arguments[0];
14 | if (
15 | firstArg &&
16 | firstArg.type === "Literal" &&
17 | typeof firstArg.value === "string" &&
18 | firstArg.value.startsWith("http:")
19 | ) {
20 | context.report({
21 | messageId: "useHttps",
22 | node: firstArg,
23 | });
24 | }
25 | }
26 | },
27 | };
28 | },
29 | name: "enforce-https",
30 | meta: {
31 | docs: {
32 | description: "Enforce HTTPS in network requests.",
33 | recommended: true,
34 | },
35 | messages: {
36 | useHttps: "Use HTTPS instead of HTTP for secure connections.",
37 | },
38 | type: "problem",
39 | schema: [],
40 | },
41 | defaultOptions: [],
42 | });
43 |
--------------------------------------------------------------------------------
/src/rules/no-client-side-secrets.ts:
--------------------------------------------------------------------------------
1 | import { createRule } from "../utils/rule";
2 |
3 | export const rule = createRule({
4 | create(context) {
5 | return {
6 | MemberExpression(node) {
7 | if (
8 | node.object.type === "MemberExpression" &&
9 | node.object.object.type === "Identifier" &&
10 | node.object.object.name === "process" &&
11 | node.object.property.type === "Identifier" &&
12 | node.object.property.name === "env" &&
13 | node.property.type === "Identifier" &&
14 | node.property.name.startsWith("NEXT_PUBLIC_") &&
15 | (node.property.name.includes("SECRET") ||
16 | node.property.name.includes("API_KEY") ||
17 | node.property.name.includes("KEY") ||
18 | node.property.name.includes("TOKEN") ||
19 | node.property.name.includes("PASSWORD"))
20 | ) {
21 | context.report({
22 | messageId: "noClientSideSecrets",
23 | node: node.property,
24 | });
25 | }
26 | },
27 | };
28 | },
29 | name: "no-client-side-secrets",
30 | meta: {
31 | docs: {
32 | description: "Prevent the use of server secrets on the client side.",
33 | recommended: true,
34 | },
35 | messages: {
36 | noClientSideSecrets:
37 | "Avoid exposing secret environment variables with NEXT_PUBLIC_ prefix on the client side.",
38 | },
39 | type: "problem",
40 | schema: [],
41 | },
42 | defaultOptions: [],
43 | });
44 |
--------------------------------------------------------------------------------
/src/rules/no-dangerously-set-inner-html.ts:
--------------------------------------------------------------------------------
1 | import { createRule } from "../utils/rule";
2 |
3 | export const rule = createRule({
4 | create(context) {
5 | return {
6 | JSXAttribute(node) {
7 | // Check if the attribute name is "dangerouslySetInnerHTML"
8 | if (node.name && node.name.name === "dangerouslySetInnerHTML") {
9 | context.report({
10 | messageId: "noDangerouslySetInnerHTML",
11 | node: node,
12 | });
13 | }
14 | },
15 | };
16 | },
17 | name: "no-dangerously-set-inner-html",
18 | meta: {
19 | docs: {
20 | description:
21 | "Disallow usage of dangerouslySetInnerHTML due to potential security risks.",
22 | recommended: true,
23 | },
24 | messages: {
25 | noDangerouslySetInnerHTML:
26 | "Avoid using dangerouslySetInnerHTML as it can lead to security vulnerabilities.",
27 | },
28 | type: "problem",
29 | schema: [],
30 | },
31 | defaultOptions: [],
32 | });
33 |
--------------------------------------------------------------------------------
/src/rules/no-eval.ts:
--------------------------------------------------------------------------------
1 | import { createRule } from "../utils/rule";
2 | import { TSESTree } from "@typescript-eslint/utils";
3 |
4 | export const rule = createRule({
5 | create(context) {
6 | return {
7 | CallExpression(node: TSESTree.CallExpression) {
8 | if (node.callee.type === "Identifier" && node.callee.name === "eval") {
9 | context.report({
10 | messageId: "noEval",
11 | node: node,
12 | });
13 | }
14 | },
15 | };
16 | },
17 | name: "no-eval",
18 | meta: {
19 | docs: {
20 | description: "Disallow usage of eval for security reasons.",
21 | recommended: true,
22 | },
23 | messages: {
24 | noEval: "Avoid using eval as it can lead to security vulnerabilities.",
25 | },
26 | type: "problem",
27 | schema: [],
28 | },
29 | defaultOptions: [],
30 | });
31 |
--------------------------------------------------------------------------------
/src/rules/no-inline-styles.ts:
--------------------------------------------------------------------------------
1 | import { createRule } from "../utils/rule";
2 |
3 | export const rule = createRule({
4 | create(context) {
5 | return {
6 | JSXAttribute(node) {
7 | if (node.name && node.name.name === "style") {
8 | context.report({
9 | messageId: "noInlineStyles",
10 | node,
11 | });
12 | }
13 | },
14 | };
15 | },
16 | name: "no-inline-styles",
17 | meta: {
18 | docs: {
19 | description:
20 | "Disallow inline styles in JSX to reduce security risks and improve maintainability.",
21 | recommended: true,
22 | },
23 | messages: {
24 | noInlineStyles:
25 | "Avoid using inline styles in JSX as it can lead to security vulnerabilities.",
26 | },
27 | type: "problem",
28 | schema: [],
29 | },
30 | defaultOptions: [],
31 | });
32 |
--------------------------------------------------------------------------------
/src/rules/no-open-redirects.ts:
--------------------------------------------------------------------------------
1 | import { createRule } from "../utils/rule";
2 |
3 | export const rule = createRule({
4 | create(context) {
5 | return {
6 | JSXAttribute(node) {
7 | if (node.name && node.name.name === "href") {
8 | const value = node.value;
9 | if (
10 | value &&
11 | value.type === "JSXExpressionContainer" &&
12 | value.expression.type === "Identifier"
13 | ) {
14 | context.report({
15 | messageId: "noOpenRedirect",
16 | node,
17 | });
18 | }
19 | }
20 | },
21 | };
22 | },
23 | name: "no-open-redirects",
24 | meta: {
25 | docs: {
26 | description:
27 | "Disallow open redirects by preventing user-controlled href values.",
28 | recommended: true,
29 | },
30 | messages: {
31 | noOpenRedirect:
32 | "Avoid using user-controlled values in href attributes to prevent open redirects.",
33 | },
34 | type: "problem",
35 | schema: [],
36 | },
37 | defaultOptions: [],
38 | });
39 |
--------------------------------------------------------------------------------
/src/rules/require-rel-noopener-noreferrer.ts:
--------------------------------------------------------------------------------
1 | import { createRule } from "../utils/rule";
2 |
3 | export const rule = createRule({
4 | create(context) {
5 | return {
6 | JSXOpeningElement(node) {
7 | if (
8 | node.name.type == "JSXIdentifier" &&
9 | (node.name.name === "a" || node.name.name === "Link") &&
10 | node.attributes.some(
11 | (attr) =>
12 | attr.type === "JSXAttribute" &&
13 | attr.name.name === "href" &&
14 | attr.value?.type === "Literal" &&
15 | typeof attr.value?.value === "string" &&
16 | /^http/.test(attr.value?.value)
17 | ) &&
18 | !node.attributes.some(
19 | (attr) =>
20 | attr.type === "JSXAttribute" &&
21 | attr.name.name === "rel" &&
22 | attr.value?.type === "Literal" &&
23 | typeof attr.value?.value === "string" &&
24 | (attr.value.value.includes("noopener") ||
25 | attr.value.value.includes("noreferrer"))
26 | )
27 | ) {
28 | context.report({
29 | messageId: "requireRelNoopenerNoreferrer",
30 | node,
31 | });
32 | }
33 | },
34 | };
35 | },
36 | name: "require-rel-noopener-noreferrer",
37 | meta: {
38 | docs: {
39 | description:
40 | "Require rel='noopener noreferrer' on external links to prevent tab-nabbing.",
41 | recommended: true,
42 | },
43 | messages: {
44 | requireRelNoopenerNoreferrer:
45 | "Add rel='noopener noreferrer' to external links for security.",
46 | },
47 | type: "problem",
48 | schema: [],
49 | },
50 | defaultOptions: [],
51 | });
52 |
--------------------------------------------------------------------------------
/src/rules/require-script-integrity.ts:
--------------------------------------------------------------------------------
1 | import { createRule } from "../utils/rule";
2 |
3 | export const rule = createRule({
4 | create(context) {
5 | return {
6 | JSXOpeningElement(node) {
7 | const isScriptElement =
8 | node.name &&
9 | node.name.type === "JSXIdentifier" &&
10 | (node.name.name === "script" || node.name.name === "Script");
11 |
12 | if (
13 | isScriptElement &&
14 | node.attributes.some(
15 | (attr) =>
16 | attr.type === "JSXAttribute" &&
17 | attr.name.name === "src" &&
18 | attr.value &&
19 | attr.value.type === "Literal" &&
20 | typeof attr.value.value === "string" &&
21 | attr.value.value.startsWith("http")
22 | ) &&
23 | !node.attributes.some(
24 | (attr) =>
25 | attr.type === "JSXAttribute" && attr.name.name === "integrity"
26 | )
27 | ) {
28 | context.report({
29 | messageId: "missingIntegrity",
30 | node,
31 | });
32 | }
33 | },
34 | };
35 | },
36 | name: "require-script-integrity",
37 | meta: {
38 | docs: {
39 | description:
40 | "Require integrity attribute on external scripts to prevent CDN tampering.",
41 | recommended: true,
42 | },
43 | messages: {
44 | missingIntegrity:
45 | "Add an integrity attribute to this external script to prevent potential tampering.",
46 | },
47 | type: "problem",
48 | schema: [],
49 | },
50 | defaultOptions: [],
51 | });
52 |
--------------------------------------------------------------------------------
/src/utils/next-runtime.ts:
--------------------------------------------------------------------------------
1 | export function getNextRuntime(filename: string): "SERVER" | "CLIENT" {
2 | throw new Error("getNextRuntime is not implemented yet");
3 | }
4 |
--------------------------------------------------------------------------------
/src/utils/rule.ts:
--------------------------------------------------------------------------------
1 | import { ESLintUtils } from "@typescript-eslint/utils";
2 |
3 | export interface PluginDocs {
4 | description: string;
5 | recommended?: boolean;
6 | requiresTypeChecking?: boolean;
7 | }
8 |
9 | export const createRule = ESLintUtils.RuleCreator(
10 | (name) =>
11 | `https://github.com/shipsecure-labs/eslint-plugin-next/tree/main/docs/${name}.md`
12 | );
13 |
--------------------------------------------------------------------------------
/tests/rules/enforce-https.test.ts:
--------------------------------------------------------------------------------
1 | import { RuleTester } from "@typescript-eslint/rule-tester";
2 | import { rule } from "../../src/rules/enforce-https";
3 |
4 | const ruleTester = new RuleTester({
5 | // @ts-ignore
6 | languageOptions: {
7 | parserOptions: {
8 | ecmaFeatures: {
9 | jsx: true,
10 | },
11 | },
12 | },
13 | });
14 |
15 | ruleTester.run("enforce-https", rule, {
16 | valid: [
17 | {
18 | code: `
19 | await axios.post("https://example.com/cats")
20 | `,
21 | },
22 | {
23 | code: `
24 | await fetch("https://example.com/cats", {
25 | method: "PATCH"
26 | })
27 | `,
28 | },
29 | ],
30 | invalid: [
31 | {
32 | code: `
33 | await fetch("http://example.com/cats", {
34 | method: "POST"
35 | })
36 | `,
37 | errors: [{ messageId: "useHttps" }],
38 | },
39 | {
40 | code: `
41 | await axios.patch("http://example.com/cats", {})
42 | `,
43 | errors: [{ messageId: "useHttps" }],
44 | },
45 | ],
46 | });
47 |
--------------------------------------------------------------------------------
/tests/rules/no-client-side-secrets.test.ts:
--------------------------------------------------------------------------------
1 | import { RuleTester } from "@typescript-eslint/rule-tester";
2 | import { rule } from "../../src/rules/no-client-side-secrets";
3 |
4 | const ruleTester = new RuleTester({
5 | // @ts-ignore
6 | languageOptions: {
7 | parserOptions: {
8 | ecmaFeatures: {
9 | jsx: true,
10 | },
11 | },
12 | },
13 | });
14 |
15 | ruleTester.run("no-client-side-secrets", rule, {
16 | valid: [
17 | {
18 | code: `
19 | const port = process.env.PORT;
20 | `,
21 | },
22 | {
23 | code: `
24 | const port = process.env.NEXT_PUBLIC_PORT;
25 | `,
26 | },
27 | ],
28 | invalid: [
29 | {
30 | code: `
31 | Here is your token: {process.env.NEXT_PUBLIC_SECRET}
32 | `,
33 | errors: [{ messageId: "noClientSideSecrets" }],
34 | },
35 | {
36 | code: `
37 | const test = process.env.NEXT_PUBLIC_API_KEY;
38 | `,
39 | errors: [{ messageId: "noClientSideSecrets" }],
40 | },
41 | ],
42 | });
43 |
--------------------------------------------------------------------------------
/tests/rules/no-dangerously-set-inner-html.test.ts:
--------------------------------------------------------------------------------
1 | import { RuleTester } from "@typescript-eslint/rule-tester";
2 | import { rule } from "../../src/rules/no-dangerously-set-inner-html";
3 |
4 | const ruleTester = new RuleTester({
5 | // @ts-ignore
6 | languageOptions: {
7 | parserOptions: {
8 | ecmaFeatures: {
9 | jsx: true,
10 | },
11 | },
12 | },
13 | });
14 |
15 | ruleTester.run("no-dangerously-set-inner-html", rule, {
16 | valid: [
17 | {
18 | code: `
19 | const element = Safe Content
;
20 | `,
21 | },
22 | {
23 | code: `
24 | const element = ;
25 | `,
26 | },
27 | ],
28 | invalid: [
29 | {
30 | code: `
31 | const element = ;
32 | `,
33 | errors: [{ messageId: "noDangerouslySetInnerHTML" }],
34 | },
35 | {
36 | code: `
37 | const element = ;
38 | `,
39 | errors: [{ messageId: "noDangerouslySetInnerHTML" }],
40 | },
41 | ],
42 | });
43 |
--------------------------------------------------------------------------------
/tests/rules/no-eval.test.ts:
--------------------------------------------------------------------------------
1 | import { RuleTester } from "@typescript-eslint/rule-tester";
2 | import { rule } from "../../src/rules/no-eval";
3 |
4 | const ruleTester = new RuleTester({
5 | // @ts-ignore
6 | languageOptions: {
7 | parserOptions: {
8 | ecmaFeatures: {
9 | jsx: true,
10 | },
11 | },
12 | },
13 | });
14 |
15 | ruleTester.run("no-eval", rule, {
16 | valid: [
17 | {
18 | code: `
19 | const result = "test123";
20 | `,
21 | },
22 | ],
23 | invalid: [
24 | {
25 | code: `
26 | eval("test 123")
27 | `,
28 | errors: [{ messageId: "noEval" }],
29 | },
30 | ],
31 | });
32 |
--------------------------------------------------------------------------------
/tests/rules/no-inline-styles.test.ts:
--------------------------------------------------------------------------------
1 | import { RuleTester } from "@typescript-eslint/rule-tester";
2 | import { rule } from "../../src/rules/no-inline-styles";
3 |
4 | const ruleTester = new RuleTester({
5 | // @ts-ignore
6 | languageOptions: {
7 | parserOptions: {
8 | ecmaFeatures: {
9 | jsx: true,
10 | },
11 | },
12 | },
13 | });
14 |
15 | ruleTester.run("no-inline-styles", rule, {
16 | valid: [
17 | {
18 | code: `
19 | const element = Safe Content
;
20 | `,
21 | },
22 | {
23 | code: `
24 | const element = ;
25 | `,
26 | },
27 | ],
28 | invalid: [
29 | {
30 | code: `
31 | ;
34 | `,
35 | errors: [{ messageId: "noInlineStyles" }],
36 | },
37 | {
38 | code: `
39 | ;
42 | `,
43 | errors: [{ messageId: "noInlineStyles" }],
44 | },
45 | ],
46 | });
47 |
--------------------------------------------------------------------------------
/tests/rules/no-open-redirects.test.ts:
--------------------------------------------------------------------------------
1 | import { RuleTester } from "@typescript-eslint/rule-tester";
2 | import { rule } from "../../src/rules/no-open-redirects";
3 |
4 | const ruleTester = new RuleTester({
5 | // @ts-ignore
6 | languageOptions: {
7 | parserOptions: {
8 | ecmaFeatures: {
9 | jsx: true,
10 | },
11 | },
12 | },
13 | });
14 |
15 | ruleTester.run("no-open-redirects", rule, {
16 | valid: [
17 | {
18 | code: `
19 |
20 | test
21 |
22 | `,
23 | },
24 | {
25 | code: `
26 |
27 | test
28 |
29 | `,
30 | },
31 | ],
32 | invalid: [
33 | {
34 | code: `
35 |
36 | test
37 |
38 | `,
39 | errors: [{ messageId: "noOpenRedirect" }],
40 | },
41 | {
42 | code: `
43 |
44 | test
45 |
46 | `,
47 | errors: [{ messageId: "noOpenRedirect" }],
48 | },
49 | ],
50 | });
51 |
--------------------------------------------------------------------------------
/tests/rules/require-rel-noopener-noreferrer.test.ts:
--------------------------------------------------------------------------------
1 | import { RuleTester } from "@typescript-eslint/rule-tester";
2 | import { rule } from "../../src/rules/require-rel-noopener-noreferrer";
3 |
4 | const ruleTester = new RuleTester({
5 | // @ts-ignore
6 | languageOptions: {
7 | parserOptions: {
8 | ecmaFeatures: {
9 | jsx: true,
10 | },
11 | },
12 | },
13 | });
14 |
15 | ruleTester.run("require-rel-noopener-noreferrer", rule, {
16 | valid: [
17 | {
18 | code: `
19 |
20 | test
21 |
22 | `,
23 | },
24 | {
25 | code: `
26 |
27 | test
28 |
29 | `,
30 | },
31 | {
32 | code: `
33 |
34 | test
35 |
36 | `,
37 | },
38 | ],
39 | invalid: [
40 | {
41 | code: `
42 |
43 | test
44 |
45 | `,
46 | errors: [{ messageId: "requireRelNoopenerNoreferrer" }],
47 | },
48 | {
49 | code: `
50 |
51 | test
52 |
53 | `,
54 | errors: [{ messageId: "requireRelNoopenerNoreferrer" }],
55 | },
56 | {
57 | code: `
58 |
59 | test
60 |
61 | `,
62 | errors: [{ messageId: "requireRelNoopenerNoreferrer" }],
63 | },
64 | ],
65 | });
66 |
--------------------------------------------------------------------------------
/tests/rules/require-script-integrity.test.ts:
--------------------------------------------------------------------------------
1 | import { RuleTester } from "@typescript-eslint/rule-tester";
2 | import { rule } from "../../src/rules/require-script-integrity";
3 |
4 | const ruleTester = new RuleTester({
5 | // @ts-ignore
6 | languageOptions: {
7 | parserOptions: {
8 | ecmaFeatures: {
9 | jsx: true,
10 | },
11 | },
12 | },
13 | });
14 |
15 | ruleTester.run("require-script-integrity", rule, {
16 | valid: [
17 | {
18 | code: `
19 |
20 | `,
21 | },
22 | {
23 | code: `
24 |
25 | `,
26 | },
27 | {
28 | code: `
29 |
30 | `,
31 | },
32 | {
33 | code: `
34 |
35 | `,
36 | },
37 | ],
38 | invalid: [
39 | {
40 | code: `
41 |
42 | `,
43 | errors: [{ messageId: "missingIntegrity" }],
44 | },
45 | {
46 | code: `
47 |
48 | `,
49 | errors: [{ messageId: "missingIntegrity" }],
50 | },
51 | ],
52 | });
53 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es2020",
4 | "module": "NodeNext",
5 | "moduleResolution": "NodeNext",
6 | "lib": ["es2020"],
7 | "outDir": "dist",
8 | "rootDir": "src",
9 | "strict": true,
10 | "noImplicitAny": true,
11 | "esModuleInterop": true,
12 | "skipLibCheck": true,
13 | "forceConsistentCasingInFileNames": true,
14 | "declaration": true,
15 | "declarationMap": true,
16 | "sourceMap": true,
17 | "composite": true,
18 | "allowJs": true,
19 | "checkJs": true,
20 | "resolveJsonModule": true,
21 | "types": ["node"]
22 | },
23 | "include": ["src/**/*.ts", "tests/uppercase-first-declarations.ts"],
24 | "exclude": ["node_modules"]
25 | }
26 |
--------------------------------------------------------------------------------