├── .github
└── workflows
│ └── release-on-version-bump.yml
├── .gitignore
├── .nvmrc
├── README.md
├── docs
└── rules
│ ├── might-throw.md
│ ├── no-unhandled.md
│ └── use-error-cause.md
├── eslint.config.js
├── eslint.config.test.js
├── package.json
├── src
├── index.ts
├── rules
│ ├── create-rule.ts
│ ├── index.ts
│ ├── might-throw
│ │ ├── index.ts
│ │ ├── might-throw.spec.ts
│ │ ├── might-throw.ts
│ │ └── tests
│ │ │ ├── basic-err.ts
│ │ │ ├── basic-ok.ts
│ │ │ ├── generic-impt-ok.ts
│ │ │ ├── generic-ok.ts
│ │ │ ├── import-err.ts
│ │ │ ├── import-ok.ts
│ │ │ ├── native-funcs-err-2.ts
│ │ │ ├── native-funcs-err.ts
│ │ │ ├── native-modules-err.ts
│ │ │ ├── native-modules-ok.ts
│ │ │ ├── private-identifier-err.ts
│ │ │ ├── private-identifier-ok.ts
│ │ │ ├── throwing-func.ts
│ │ │ └── tsx-ok.tsx
│ ├── no-unhandled
│ │ ├── index.ts
│ │ ├── no-unhandled.spec.ts
│ │ ├── no-unhandled.ts
│ │ └── tests
│ │ │ ├── alias-err.ts
│ │ │ ├── alias-ok.ts
│ │ │ ├── array-destructuring-ok.ts
│ │ │ ├── basic-err-2.ts
│ │ │ ├── basic-err-3.ts
│ │ │ ├── basic-err-4.ts
│ │ │ ├── basic-err.ts
│ │ │ ├── basic-ok-2.ts
│ │ │ ├── basic-ok.ts
│ │ │ ├── import-err.ts
│ │ │ ├── import-ok-2.ts
│ │ │ ├── import-ok.ts
│ │ │ ├── module-ok.ts
│ │ │ ├── native-modules-err.ts
│ │ │ ├── native-modules-ok.ts
│ │ │ ├── private-identifier-err.ts
│ │ │ ├── private-identifier-ok.ts
│ │ │ ├── recursive-err.ts
│ │ │ ├── recursive-ok.ts
│ │ │ └── throwing-func.ts
│ └── use-error-cause
│ │ ├── index.ts
│ │ ├── tests
│ │ ├── basic-err.ts
│ │ ├── basic-ok.ts
│ │ ├── import-err.ts
│ │ ├── import-ok.ts
│ │ └── throwing-func.ts
│ │ ├── use-error-cause.spec.ts
│ │ └── use-error-cause.ts
└── utils
│ ├── ast-guards.ts
│ ├── can-func-throw.ts
│ ├── explore-children.ts
│ ├── find-identifier-in-parents.ts
│ ├── find-identifiers-in-children.ts
│ ├── find-in-children-all.ts
│ ├── find-in-children.ts
│ ├── find-in-parent.ts
│ ├── get-call-expr-id.ts
│ ├── get-function-id.ts
│ ├── get-import-declaration.ts
│ ├── index.ts
│ ├── infer-guard-type.ts
│ ├── native-throwing.ts
│ ├── parse.ts
│ ├── resolve-class.ts
│ ├── resolve-func.ts
│ ├── resolve-id.ts
│ ├── resolve-imported-id.ts
│ └── test-file.ts
├── tsconfig.json
├── vitest.config.js
└── yarn.lock
/.github/workflows/release-on-version-bump.yml:
--------------------------------------------------------------------------------
1 | name: Release & publish on `package.json#version` bump
2 |
3 | on:
4 | push:
5 | branches:
6 | - main
7 |
8 | jobs:
9 | publish-on-release:
10 | runs-on: ubuntu-latest
11 | permissions: write-all
12 | steps:
13 | - uses: actions/checkout@v4
14 | - uses: actions/setup-node@v4
15 | with:
16 | node-version-file: ".nvmrc"
17 | registry-url: "https://registry.npmjs.org"
18 | - run: yarn
19 | - run: yarn test
20 | - run: yarn build
21 | - run: yarn publish
22 | env:
23 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
24 | - uses: Makepad-fr/auto-release-on-version-bump-action@0.0.2
25 | with:
26 | token: ${{ secrets.GITHUB_TOKEN }}
27 | name: "$newVersion"
28 | body: "✨ New release $newVersion"
29 | draft: "false"
30 | pre-release: "auto"
31 | generate-release-note: "true"
32 | tag-name: "$newVersion"
33 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Created by https://www.toptal.com/developers/gitignore/api/node,yarn,windows,macos,linux
2 | # Edit at https://www.toptal.com/developers/gitignore?templates=node,yarn,windows,macos,linux
3 |
4 | test
5 |
6 | ### Linux ###
7 | *~
8 |
9 | # temporary files which can be created if a process still has a handle open of a deleted file
10 | .fuse_hidden*
11 |
12 | # KDE directory preferences
13 | .directory
14 |
15 | # Linux trash folder which might appear on any partition or disk
16 | .Trash-*
17 |
18 | # .nfs files are created when an open file is removed but is still being accessed
19 | .nfs*
20 |
21 | ### macOS ###
22 | # General
23 | .DS_Store
24 | .AppleDouble
25 | .LSOverride
26 |
27 | # Icon must end with two \r
28 | Icon
29 |
30 |
31 | # Thumbnails
32 | ._*
33 |
34 | # Files that might appear in the root of a volume
35 | .DocumentRevisions-V100
36 | .fseventsd
37 | .Spotlight-V100
38 | .TemporaryItems
39 | .Trashes
40 | .VolumeIcon.icns
41 | .com.apple.timemachine.donotpresent
42 |
43 | # Directories potentially created on remote AFP share
44 | .AppleDB
45 | .AppleDesktop
46 | Network Trash Folder
47 | Temporary Items
48 | .apdisk
49 |
50 | ### macOS Patch ###
51 | # iCloud generated files
52 | *.icloud
53 |
54 | ### Node ###
55 | # Logs
56 | logs
57 | *.log
58 | npm-debug.log*
59 | yarn-debug.log*
60 | yarn-error.log*
61 | lerna-debug.log*
62 | .pnpm-debug.log*
63 |
64 | # Diagnostic reports (https://nodejs.org/api/report.html)
65 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
66 |
67 | # Runtime data
68 | pids
69 | *.pid
70 | *.seed
71 | *.pid.lock
72 |
73 | # Directory for instrumented libs generated by jscoverage/JSCover
74 | lib-cov
75 |
76 | # Coverage directory used by tools like istanbul
77 | coverage
78 | *.lcov
79 |
80 | # nyc test coverage
81 | .nyc_output
82 |
83 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
84 | .grunt
85 |
86 | # Bower dependency directory (https://bower.io/)
87 | bower_components
88 |
89 | # node-waf configuration
90 | .lock-wscript
91 |
92 | # Compiled binary addons (https://nodejs.org/api/addons.html)
93 | build/Release
94 |
95 | # Dependency directories
96 | node_modules/
97 | jspm_packages/
98 |
99 | # Snowpack dependency directory (https://snowpack.dev/)
100 | web_modules/
101 |
102 | # TypeScript cache
103 | *.tsbuildinfo
104 |
105 | # Optional npm cache directory
106 | .npm
107 |
108 | # Optional eslint cache
109 | .eslintcache
110 |
111 | # Optional stylelint cache
112 | .stylelintcache
113 |
114 | # Microbundle cache
115 | .rpt2_cache/
116 | .rts2_cache_cjs/
117 | .rts2_cache_es/
118 | .rts2_cache_umd/
119 |
120 | # Optional REPL history
121 | .node_repl_history
122 |
123 | # Output of 'npm pack'
124 | *.tgz
125 |
126 | # Yarn Integrity file
127 | .yarn-integrity
128 |
129 | # dotenv environment variable files
130 | .env
131 | .env.development.local
132 | .env.test.local
133 | .env.production.local
134 | .env.local
135 |
136 | # parcel-bundler cache (https://parceljs.org/)
137 | .cache
138 | .parcel-cache
139 |
140 | # Next.js build output
141 | .next
142 | out
143 |
144 | # Nuxt.js build / generate output
145 | .nuxt
146 | dist
147 |
148 | # Gatsby files
149 | .cache/
150 | # Comment in the public line in if your project uses Gatsby and not Next.js
151 | # https://nextjs.org/blog/next-9-1#public-directory-support
152 | # public
153 |
154 | # vuepress build output
155 | .vuepress/dist
156 |
157 | # vuepress v2.x temp and cache directory
158 | .temp
159 |
160 | # Docusaurus cache and generated files
161 | .docusaurus
162 |
163 | # Serverless directories
164 | .serverless/
165 |
166 | # FuseBox cache
167 | .fusebox/
168 |
169 | # DynamoDB Local files
170 | .dynamodb/
171 |
172 | # TernJS port file
173 | .tern-port
174 |
175 | # Stores VSCode versions used for testing VSCode extensions
176 | .vscode-test
177 |
178 | # yarn v2
179 | .yarn/cache
180 | .yarn/unplugged
181 | .yarn/build-state.yml
182 | .yarn/install-state.gz
183 | .pnp.*
184 |
185 | ### Node Patch ###
186 | # Serverless Webpack directories
187 | .webpack/
188 |
189 | # Optional stylelint cache
190 |
191 | # SvelteKit build / generate output
192 | .svelte-kit
193 |
194 | ### Windows ###
195 | # Windows thumbnail cache files
196 | Thumbs.db
197 | Thumbs.db:encryptable
198 | ehthumbs.db
199 | ehthumbs_vista.db
200 |
201 | # Dump file
202 | *.stackdump
203 |
204 | # Folder config file
205 | [Dd]esktop.ini
206 |
207 | # Recycle Bin used on file shares
208 | $RECYCLE.BIN/
209 |
210 | # Windows Installer files
211 | *.cab
212 | *.msi
213 | *.msix
214 | *.msm
215 | *.msp
216 |
217 | # Windows shortcuts
218 | *.lnk
219 |
220 | ### yarn ###
221 | # https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored
222 |
223 | .yarn/*
224 | !.yarn/releases
225 | !.yarn/patches
226 | !.yarn/plugins
227 | !.yarn/sdks
228 | !.yarn/versions
229 |
230 | # if you are NOT using Zero-installs, then:
231 | # comment the following lines
232 | !.yarn/cache
233 |
234 | # and uncomment the following lines
235 | # .pnp.*
236 |
237 | # End of https://www.toptal.com/developers/gitignore/api/node,yarn,windows,macos,linux
--------------------------------------------------------------------------------
/.nvmrc:
--------------------------------------------------------------------------------
1 | v20.11.1
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | eslint-plugin-exception-handling
6 |
7 |
8 | 💣 Lints unhandled functions that might throw errors & ensure best practices. For JavaScript/TypeScript eslint.
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | 
17 |
18 | | no-unhandled | might-throw | use-error-cause |
19 | | --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
20 | |  |  |  |
21 |
22 | # Installation
23 |
24 | ```bash
25 | yarn add -D eslint-plugin-exception-handling
26 | ```
27 |
28 | ```bash
29 | npm i -D eslint-plugin-exception-handling
30 | ```
31 |
32 | ```bash
33 | pnpm add -D eslint-plugin-exception-handling
34 | ```
35 |
36 | # Usage
37 |
38 | Sample `eslint.config.js`:
39 |
40 | For TypeScript:
41 |
42 | ```js
43 | // @ts-check
44 |
45 | import eslint from "@eslint/js";
46 | import tseslint from "typescript-eslint";
47 | import { plugin as ex } from "eslint-plugin-exception-handling";
48 |
49 | export default tseslint.config(
50 | eslint.configs.recommended,
51 | ...tseslint.configs.recommended,
52 | { plugins: { ex }, rules: { "ex/no-unhandled": "error" } }
53 | );
54 | ```
55 |
56 | For JavaScript:
57 |
58 | ```js
59 | import globals from "globals";
60 | import pluginJs from "@eslint/js";
61 | import { plugin as ex } from "eslint-plugin-exception-handling";
62 |
63 | export default [
64 | { files: ["**/*.js"], languageOptions: { sourceType: "commonjs" } },
65 | { languageOptions: { globals: globals.browser } },
66 | pluginJs.configs.recommended,
67 | { plugins: { ex } },
68 | { rules: { "ex/no-unhandled": "error" } },
69 | ];
70 | ```
71 |
72 | # Limitations & Caveats
73 |
74 | - This plugin only checks for functions that might throw exceptions. It does not check for functions that might return a rejected promise.
75 | - Currently, only user-defined functions are checked. This means that built-in functions that might throw exceptions are not yet linted. I'm working on a feature for that, but it's quite a grind to list all the built-in functions that might throw exceptions. If you want to help feel free to open a PR.
76 |
77 | # Rules
78 |
79 |
80 |
81 | | Name | Description |
82 | | :----------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
83 | | [might-throw](docs/rules/might-throw.md) | Warns about function calls that might throw exceptions. |
84 | | [no-unhandled](docs/rules/no-unhandled.md) | Warns about function calls that might throw exceptions and are not handled at all further up the stack. |
85 | | [use-error-cause](docs/rules/use-error-cause.md) | On `Error` re-thrown, forces the use of `cause` property in order to preserve stack traces. See: [Error: cause](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause) |
86 |
87 |
88 |
--------------------------------------------------------------------------------
/docs/rules/might-throw.md:
--------------------------------------------------------------------------------
1 | # Warns about function calls that might throw exceptions (`exception-handling/might-throw`)
2 |
3 |
4 |
5 | 
6 |
--------------------------------------------------------------------------------
/docs/rules/no-unhandled.md:
--------------------------------------------------------------------------------
1 | # Warns about function calls that might throw exceptions and are not handled at all further up the stack (`exception-handling/no-unhandled`)
2 |
3 |
4 |
5 | 
6 |
--------------------------------------------------------------------------------
/docs/rules/use-error-cause.md:
--------------------------------------------------------------------------------
1 | # On `Error` re-thrown, forces the use of `cause` property in order to preserve stack traces (`exception-handling/use-error-cause`)
2 |
3 |
4 |
5 | 
6 |
7 | [See `ErrorOptions.cause` on MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause)
8 |
--------------------------------------------------------------------------------
/eslint.config.js:
--------------------------------------------------------------------------------
1 | // @ts-check
2 |
3 | import tseslint from "typescript-eslint";
4 |
5 | const ignores = [
6 | "node_modules",
7 | "dist",
8 | "docs",
9 | "**/*.d.ts",
10 | "**/*.spec.ts",
11 | "**/*.test.ts",
12 | "**/tests/**",
13 | "eslint.config.js",
14 | "eslint.config.test.js",
15 | "vitest.config.js",
16 | ];
17 |
18 | export default tseslint.config(
19 | ...tseslint.configs.recommended.map((x) => ({ ...x, ignores })),
20 | {
21 | languageOptions: {
22 | parserOptions: {
23 | parser: "@typescript-eslint/parser",
24 | project: "./tsconfig.json",
25 | tsconfigRootDir: "./",
26 | },
27 | },
28 | files: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"],
29 | ignores,
30 | rules: {
31 | "@typescript-eslint/no-unused-vars": [
32 | "error",
33 | { argsIgnorePattern: "_" },
34 | ],
35 | "@typescript-eslint/no-floating-promises": ["error"],
36 | "@typescript-eslint/no-unused-expressions": "error",
37 | "@typescript-eslint/no-explicit-any": "off",
38 | },
39 | }
40 | );
41 |
--------------------------------------------------------------------------------
/eslint.config.test.js:
--------------------------------------------------------------------------------
1 | // @ts-check
2 |
3 | import tseslint from "typescript-eslint";
4 | import { plugin as ex } from "./dist/src/index.js";
5 | import config from "./eslint.config.js";
6 |
7 | const ignores = [
8 | "node_modules",
9 | "dist",
10 | "docs",
11 | "**/*.d.ts",
12 | "eslint.config.js",
13 | "vitest.config.js",
14 | ];
15 |
16 | export default tseslint.config(...config.map((x) => ({ ...x, ignores })), {
17 | plugins: { ex },
18 | rules: {
19 | "ex/no-unhandled": "error",
20 | "ex/might-throw": "warn",
21 | "ex/use-error-cause": "warn",
22 | },
23 | });
24 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "eslint-plugin-exception-handling",
3 | "version": "1.5.6",
4 | "description": "💣 Lints unhandled functions that might throw errors. For JavaScript/TypeScript eslint.",
5 | "author": {
6 | "email": "alexandre@daubricourt.com",
7 | "name": "Alexandre Daubricourt"
8 | },
9 | "repository": {
10 | "type": "git",
11 | "url": "https://github.com/Akronae/eslint-plugin-exception-handling.git"
12 | },
13 | "keywords": [
14 | "eslint",
15 | "plugin",
16 | "exception",
17 | "handling",
18 | "error",
19 | "throw",
20 | "try",
21 | "catch"
22 | ],
23 | "license": "MIT",
24 | "type": "module",
25 | "main": "./dist/src/index.js",
26 | "module": "./dist/src/index.js",
27 | "types": "./dist/src/index.d.ts",
28 | "files": [
29 | "dist/src"
30 | ],
31 | "scripts": {
32 | "build": "yarn rimraf dist && tsc && tsc-alias",
33 | "test": "yarn build && vitest run --reporter verbose",
34 | "docs": "yarn build && eslint-doc-generator && eslint-doc-generator --init-rule-docs && eslint-doc-generator",
35 | "v:major": "npm version major -m \"chore: bump major to %s\"",
36 | "v:minor": "npm version minor -m \"chore: bump minor to %s\"",
37 | "v:patch": "npm version patch -m \"chore: bump patch to %s\""
38 | },
39 | "dependencies": {
40 | "eslint": "^9.3.0"
41 | },
42 | "devDependencies": {
43 | "@types/eslint": "^9.6.1",
44 | "@types/espree": "^10.1.0",
45 | "@types/node": "^20.12.12",
46 | "@types/react": "^18.3.12",
47 | "@typescript-eslint/parser": "^7.9.0",
48 | "@typescript-eslint/rule-tester": "^7.9.0",
49 | "@typescript-eslint/types": "^7.9.0",
50 | "@typescript-eslint/utils": "^7.9.0",
51 | "eslint-doc-generator": "^1.7.1",
52 | "espree": "^10.1.0",
53 | "rimraf": "^6.0.1",
54 | "tsc": "^2.0.4",
55 | "tsc-alias": "^1.8.10",
56 | "typescript": "^5.4.5",
57 | "typescript-eslint": "^7.9.0",
58 | "vite-tsconfig-paths": "^4.3.2",
59 | "vitest": "^1.6.0"
60 | },
61 | "packageManager": "yarn@1.22.22+sha1.ac34549e6aa8e7ead463a7407e1c7390f61a6610"
62 | }
63 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import { RuleModule } from "@typescript-eslint/utils/ts-eslint";
2 | import { ESLint } from "eslint";
3 | import { rules } from "./rules";
4 | import noUnhandled from "./rules/no-unhandled/no-unhandled";
5 | import mightThrow from "./rules/might-throw/might-throw";
6 | import useErrorCause from "./rules/use-error-cause/use-error-cause";
7 |
8 | type RuleKey = keyof typeof rules;
9 |
10 | interface Plugin extends Omit {
11 | rules: Record>;
12 | }
13 |
14 | export const name = "eslint-plugin-exception-handling";
15 | export const plugin: Plugin = {
16 | meta: {
17 | name,
18 | version: "1.0.0",
19 | },
20 | configs: {
21 | recommended: {
22 | plugins: [name],
23 | rules: {
24 | [`${name}/${noUnhandled.name}`]: "error",
25 | [`${name}/${mightThrow.name}`]: "off",
26 | [`${name}/${useErrorCause.name}`]: "warn",
27 | },
28 | },
29 | },
30 | rules,
31 | };
32 |
33 | export { rules };
34 |
--------------------------------------------------------------------------------
/src/rules/create-rule.ts:
--------------------------------------------------------------------------------
1 | import { ESLintUtils } from "@typescript-eslint/utils";
2 |
3 | const website =
4 | "https://github.com/Akronae/eslint-plugin-exception-handling/tree/main/docs/rules";
5 |
6 | export const createRule = ESLintUtils.RuleCreator(
7 | (name) => `${website}/${name}.md`
8 | );
9 |
--------------------------------------------------------------------------------
/src/rules/index.ts:
--------------------------------------------------------------------------------
1 | import mightThrow from "./might-throw/might-throw";
2 | import noUnhandled from "./no-unhandled/no-unhandled";
3 | import useErrorCause from "./use-error-cause/use-error-cause";
4 |
5 | export const rules = {
6 | [noUnhandled.name]: noUnhandled.rule,
7 | [mightThrow.name]: mightThrow.rule,
8 | [useErrorCause.name]: useErrorCause.rule,
9 | };
10 |
--------------------------------------------------------------------------------
/src/rules/might-throw/index.ts:
--------------------------------------------------------------------------------
1 | export * from "./might-throw";
2 |
--------------------------------------------------------------------------------
/src/rules/might-throw/might-throw.spec.ts:
--------------------------------------------------------------------------------
1 | import { testFile } from "@/src/utils/test-file";
2 | import rule from "./might-throw";
3 |
4 | await testFile(
5 | "src/rules/might-throw/tests/basic-err.ts",
6 | [rule.name],
7 | [
8 | {
9 | messageId: "mightThrow",
10 | line: 12,
11 | },
12 | ]
13 | );
14 | await testFile("src/rules/might-throw/tests/basic-ok.ts", [rule.name], []);
15 |
16 | await testFile(
17 | "src/rules/might-throw/tests/import-err.ts",
18 | [rule.name],
19 | [
20 | {
21 | messageId: "mightThrow",
22 | line: 10,
23 | },
24 | ]
25 | );
26 |
27 | await testFile("src/rules/might-throw/tests/import-ok.ts", [rule.name], []);
28 | await testFile(
29 | "src/rules/might-throw/tests/private-identifier-err.ts",
30 | [rule.name],
31 | [
32 | {
33 | messageId: "mightThrow",
34 | line: 9,
35 | },
36 | ]
37 | );
38 | await testFile(
39 | "src/rules/might-throw/tests/private-identifier-ok.ts",
40 | [rule.name],
41 | []
42 | );
43 | await testFile(
44 | "src/rules/might-throw/tests/native-modules-err.ts",
45 | [rule.name],
46 | [
47 | {
48 | messageId: "mightThrow",
49 | line: 3,
50 | },
51 | ]
52 | );
53 | await testFile(
54 | "src/rules/might-throw/tests/native-modules-ok.ts",
55 | [rule.name],
56 | []
57 | );
58 | await testFile("src/rules/might-throw/tests/generic-ok.ts", [rule.name], []);
59 | await testFile("src/rules/might-throw/tests/tsx-ok.tsx", [rule.name], []);
60 | await testFile(
61 | "src/rules/might-throw/tests/native-funcs-err.ts",
62 | [rule.name],
63 | [
64 | {
65 | messageId: "mightThrow",
66 | line: 4,
67 | },
68 | ]
69 | );
70 | await testFile(
71 | "src/rules/might-throw/tests/native-funcs-err-2.ts",
72 | [rule.name],
73 | [
74 | {
75 | messageId: "mightThrow",
76 | line: 4,
77 | },
78 | ]
79 | );
80 |
--------------------------------------------------------------------------------
/src/rules/might-throw/might-throw.ts:
--------------------------------------------------------------------------------
1 | import { createRule } from "@/src/rules/create-rule";
2 | import { findInParent, isFunctionDeclaration } from "@/src/utils";
3 | import { canFuncThrow, canFuncThrowClear } from "@/src/utils/can-func-throw";
4 | import { getCallExprId } from "@/src/utils/get-call-expr-id";
5 | import { getFunctionId } from "@/src/utils/get-function-id";
6 |
7 | const name = "might-throw";
8 | const rule = createRule({
9 | name,
10 | meta: {
11 | docs: {
12 | description: "Warns about function calls that might throw exceptions.",
13 | },
14 | type: "suggestion",
15 | messages: {
16 | mightThrow: "'{{name}}' might throw an exception.",
17 | },
18 | schema: [],
19 | },
20 | defaultOptions: [],
21 | create: (context) => {
22 | canFuncThrowClear();
23 | const throwFunctions = new Set();
24 |
25 | return {
26 | FunctionDeclaration(node) {
27 | if (node.id) {
28 | throwFunctions.delete(getFunctionId(context, node.id));
29 | }
30 | },
31 | ThrowStatement(node) {
32 | const parentFunc = findInParent(node, isFunctionDeclaration);
33 | if (parentFunc?.id) {
34 | throwFunctions.add(getFunctionId(context, parentFunc.id));
35 | }
36 | },
37 | CallExpression(node) {
38 | const id = getCallExprId(node);
39 | if (!id) return;
40 | const throwing = canFuncThrow(id, context);
41 | if (!throwing) return;
42 |
43 | context.report({
44 | node,
45 | messageId: "mightThrow",
46 | data: {
47 | name: id.name,
48 | },
49 | });
50 | },
51 | };
52 | },
53 | });
54 |
55 | export default { name, rule };
56 |
--------------------------------------------------------------------------------
/src/rules/might-throw/tests/basic-err.ts:
--------------------------------------------------------------------------------
1 | function throwingFunction() {
2 | throw new Error("This is an error");
3 | }
4 |
5 | try {
6 | throwingFunction();
7 | } catch (e) {
8 | console.error(e);
9 | }
10 |
11 | function a() {
12 | throwingFunction();
13 | }
14 |
15 | try {
16 | a();
17 | } catch (e) {
18 | console.error(e);
19 | }
20 |
21 | function b() {
22 | try {
23 | throwingFunction();
24 | } catch (e) {
25 | console.error(e);
26 | }
27 | }
28 |
29 | b();
30 |
31 | export {};
32 |
--------------------------------------------------------------------------------
/src/rules/might-throw/tests/basic-ok.ts:
--------------------------------------------------------------------------------
1 | function throwingFunction() {
2 | throw new Error("This is an error");
3 | }
4 |
5 | try {
6 | throwingFunction();
7 | } catch (e) {
8 | console.error(e);
9 | }
10 |
11 | function a() {
12 | try {
13 | throwingFunction();
14 | } catch (e) {
15 | console.error(e);
16 | }
17 | }
18 |
19 | a();
20 |
21 | function b() {
22 | try {
23 | throwingFunction();
24 | } catch (e) {
25 | console.error(e);
26 | }
27 | }
28 |
29 | b();
30 |
31 | export {};
32 |
--------------------------------------------------------------------------------
/src/rules/might-throw/tests/generic-impt-ok.ts:
--------------------------------------------------------------------------------
1 | import { genericFunc } from "./generic-ok";
2 |
3 | export const imptGenericFunc = () => {
4 | return genericFunc([false]);
5 | };
6 |
--------------------------------------------------------------------------------
/src/rules/might-throw/tests/generic-ok.ts:
--------------------------------------------------------------------------------
1 | export const genericFunc = (val: Array) => {
2 | return val;
3 | };
4 |
--------------------------------------------------------------------------------
/src/rules/might-throw/tests/import-err.ts:
--------------------------------------------------------------------------------
1 | import { throwingFunc } from "./throwing-func";
2 |
3 | try {
4 | throwingFunc();
5 | } catch (e) {
6 | console.error(e);
7 | }
8 |
9 | function a() {
10 | throwingFunc();
11 | }
12 |
13 | try {
14 | a();
15 | } catch (e) {
16 | console.error(e);
17 | }
18 |
19 | function b() {
20 | try {
21 | throwingFunc();
22 | } catch (e) {
23 | console.error(e);
24 | }
25 | }
26 |
27 | b();
28 |
--------------------------------------------------------------------------------
/src/rules/might-throw/tests/import-ok.ts:
--------------------------------------------------------------------------------
1 | import { throwingFunc } from "./throwing-func";
2 |
3 | try {
4 | throwingFunc();
5 | } catch (e) {
6 | console.error(e);
7 | }
8 |
9 | function a() {
10 | try {
11 | throwingFunc();
12 | } catch (e) {
13 | console.error(e);
14 | }
15 | }
16 |
17 | a();
18 |
19 | function b() {
20 | try {
21 | throwingFunc();
22 | } catch (e) {
23 | console.error(e);
24 | }
25 | }
26 |
27 | b();
28 |
--------------------------------------------------------------------------------
/src/rules/might-throw/tests/native-funcs-err-2.ts:
--------------------------------------------------------------------------------
1 | import { createHash } from "node:crypto";
2 |
3 | function hashFile(filePath: string, outputFile?: string) {
4 | const hash = createHash("sha256");
5 | const digest = hash.digest("hex");
6 | console.log(digest);
7 | }
8 |
--------------------------------------------------------------------------------
/src/rules/might-throw/tests/native-funcs-err.ts:
--------------------------------------------------------------------------------
1 | import { existsSync } from "fs";
2 |
3 | export function hashFile() {
4 | if (!existsSync("fullPath")) {
5 | console.error(`File not found: ${"fullPath"}`);
6 | process.exit(1);
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/src/rules/might-throw/tests/native-modules-err.ts:
--------------------------------------------------------------------------------
1 | import { readFileSync } from "fs";
2 |
3 | const content = readFileSync("this file does not exist", "utf-8");
4 | console.log({ content });
5 |
--------------------------------------------------------------------------------
/src/rules/might-throw/tests/native-modules-ok.ts:
--------------------------------------------------------------------------------
1 | import { readFileSync } from "fs";
2 |
3 | try {
4 | const content = readFileSync("this file does not exist", "utf-8");
5 | console.log({ content });
6 | } catch (e) {
7 | console.error(e);
8 | }
9 |
--------------------------------------------------------------------------------
/src/rules/might-throw/tests/private-identifier-err.ts:
--------------------------------------------------------------------------------
1 | import { throwingFunc } from "./throwing-func";
2 |
3 | export class Test {
4 | public constructor() {
5 | this.#privateMethod();
6 | }
7 |
8 | #privateMethod() {
9 | throwingFunc();
10 | }
11 | }
12 |
13 | new Test();
14 |
--------------------------------------------------------------------------------
/src/rules/might-throw/tests/private-identifier-ok.ts:
--------------------------------------------------------------------------------
1 | export class Test {
2 | public constructor() {
3 | this.#privateMethod();
4 | }
5 |
6 | #privateMethod() {
7 | console.log("Hello");
8 | }
9 | }
10 |
11 | new Test();
12 |
--------------------------------------------------------------------------------
/src/rules/might-throw/tests/throwing-func.ts:
--------------------------------------------------------------------------------
1 | export function throwingFunc() {
2 | throw new Error("heyyyy!");
3 | }
4 |
--------------------------------------------------------------------------------
/src/rules/might-throw/tests/tsx-ok.tsx:
--------------------------------------------------------------------------------
1 | import { imptGenericFunc } from "./generic-impt-ok";
2 | import { genericFunc } from "./generic-ok";
3 |
4 | export function MyComp() {
5 | genericFunc([false]);
6 | imptGenericFunc();
7 | return Hello World
;
8 | }
9 |
--------------------------------------------------------------------------------
/src/rules/no-unhandled/index.ts:
--------------------------------------------------------------------------------
1 | export * from "./no-unhandled";
2 |
--------------------------------------------------------------------------------
/src/rules/no-unhandled/no-unhandled.spec.ts:
--------------------------------------------------------------------------------
1 | import { testFile } from "@/src/utils/test-file";
2 | import rule from "./no-unhandled";
3 |
4 | await testFile(
5 | "src/rules/no-unhandled/tests/import-err.ts",
6 | [rule.name],
7 | [
8 | {
9 | messageId: "noUnhandled",
10 | },
11 | ]
12 | );
13 | await testFile("src/rules/no-unhandled/tests/import-ok.ts", [rule.name], []);
14 | await testFile("src/rules/no-unhandled/tests/import-ok-2.ts", [rule.name], []);
15 | await testFile("src/rules/no-unhandled/tests/basic-ok.ts", [rule.name], []);
16 | await testFile("src/rules/no-unhandled/tests/basic-ok-2.ts", [rule.name], []);
17 | await testFile(
18 | "src/rules/no-unhandled/tests/basic-err.ts",
19 | [rule.name],
20 | [
21 | {
22 | messageId: "noUnhandled",
23 | },
24 | ]
25 | );
26 | await testFile(
27 | "src/rules/no-unhandled/tests/basic-err-2.ts",
28 | [rule.name],
29 | [
30 | {
31 | messageId: "noUnhandled",
32 | },
33 | {
34 | messageId: "noUnhandled",
35 | },
36 | {
37 | messageId: "noUnhandled",
38 | },
39 | ]
40 | );
41 | await testFile(
42 | "src/rules/no-unhandled/tests/basic-err-3.ts",
43 | [rule.name],
44 | [
45 | {
46 | messageId: "noUnhandled",
47 | },
48 | {
49 | messageId: "noUnhandled",
50 | },
51 | ]
52 | );
53 | await testFile(
54 | "src/rules/no-unhandled/tests/basic-err-4.ts",
55 | [rule.name],
56 | [
57 | {
58 | messageId: "noUnhandled",
59 | },
60 | ]
61 | );
62 | await testFile("src/rules/no-unhandled/tests/module-ok.ts", [rule.name], []);
63 | await testFile(
64 | "src/rules/no-unhandled/tests/private-identifier-ok.ts",
65 | [rule.name],
66 | []
67 | );
68 | await testFile(
69 | "src/rules/no-unhandled/tests/private-identifier-err.ts",
70 | [rule.name],
71 | []
72 | );
73 | await testFile("src/rules/no-unhandled/tests/recursive-ok.ts", [rule.name], []);
74 | await testFile(
75 | "src/rules/no-unhandled/tests/recursive-err.ts",
76 | [rule.name],
77 | [
78 | {
79 | messageId: "noUnhandled",
80 | line: 15,
81 | },
82 | {
83 | messageId: "noUnhandled",
84 | line: 16,
85 | },
86 | ]
87 | );
88 | await testFile(
89 | "src/rules/no-unhandled/tests/native-modules-err.ts",
90 | [rule.name],
91 | [
92 | {
93 | messageId: "noUnhandled",
94 | line: 3,
95 | },
96 | ]
97 | );
98 | await testFile(
99 | "src/rules/no-unhandled/tests/native-modules-ok.ts",
100 | [rule.name],
101 | []
102 | );
103 | await testFile(
104 | "src/rules/no-unhandled/tests/alias-err.ts",
105 | [rule.name],
106 | [
107 | {
108 | messageId: "noUnhandled",
109 | line: 54,
110 | },
111 | ]
112 | );
113 | await testFile("src/rules/no-unhandled/tests/alias-ok.ts", [rule.name], []);
114 | await testFile(
115 | "src/rules/no-unhandled/tests/array-destructuring-ok.ts",
116 | [rule.name],
117 | []
118 | );
119 |
--------------------------------------------------------------------------------
/src/rules/no-unhandled/no-unhandled.ts:
--------------------------------------------------------------------------------
1 | import { createRule } from "@/src/rules/create-rule";
2 | import {
3 | findInChildren,
4 | findInParent,
5 | getCallExprId,
6 | isFunctionDeclaration,
7 | isMethodDefinition,
8 | } from "@/src/utils";
9 | import { canFuncThrow, canFuncThrowClear } from "@/src/utils/can-func-throw";
10 | import { isIdentifier } from "@typescript-eslint/utils/ast-utils";
11 |
12 | const name = "no-unhandled";
13 | const rule = createRule({
14 | name,
15 | meta: {
16 | docs: {
17 | description:
18 | "Warns about function calls that might throw exceptions and are not handled at all further up the stack.",
19 | },
20 | type: "suggestion",
21 | messages: {
22 | noUnhandled: "'{{name}}' might throw an exception and is not handled.",
23 | },
24 | schema: [],
25 | },
26 | defaultOptions: [],
27 | create: (context) => {
28 | canFuncThrowClear();
29 |
30 | return {
31 | CallExpression(called) {
32 | const id = getCallExprId(called);
33 | if (!id) return;
34 | const throws = canFuncThrow(id, context);
35 |
36 | if (throws) {
37 | const parentFunction = findInParent(called, isFunctionDeclaration);
38 | const parentMethod = findInParent(called, isMethodDefinition);
39 | const id = findInChildren(called, isIdentifier);
40 | if (!parentFunction?.id && !parentMethod?.key) {
41 | context.report({
42 | node: called,
43 | messageId: "noUnhandled",
44 | data: {
45 | name: id?.name,
46 | },
47 | });
48 | }
49 | }
50 | },
51 | };
52 | },
53 | });
54 |
55 | export default { name, rule };
56 |
--------------------------------------------------------------------------------
/src/rules/no-unhandled/tests/alias-err.ts:
--------------------------------------------------------------------------------
1 | import { throwingFunc } from "@/src/rules/no-unhandled/tests/throwing-func";
2 |
3 | const x = 5;
4 | let y = "abc123";
5 | function myFunction() {}
6 | myFunction();
7 | const myErr = new Error();
8 | throw new Error("heyyyy!");
9 | function c() {
10 | a();
11 | }
12 | function a() {
13 | throw new Error("heyyyy!");
14 | }
15 | function b() {
16 | c();
17 | }
18 |
19 | try {
20 | b();
21 | } catch (e) {
22 | console.error(e);
23 | }
24 |
25 | function d() {
26 | a();
27 | }
28 | function e() {
29 | throw new Error("heyyyy!");
30 | }
31 | function f() {
32 | try {
33 | c();
34 | } catch (e) {
35 | console.error(e);
36 | }
37 | }
38 | function g() {
39 | d();
40 | }
41 |
42 | f();
43 |
44 | try {
45 | e();
46 | } catch (e) {
47 | console.error(e);
48 | }
49 |
50 | function h() {
51 | throwingFunc();
52 | }
53 |
54 | throwingFunc();
55 |
56 | export {};
57 |
--------------------------------------------------------------------------------
/src/rules/no-unhandled/tests/alias-ok.ts:
--------------------------------------------------------------------------------
1 | import { throwingFunc } from "@/src/rules/no-unhandled/tests/throwing-func";
2 |
3 | const x = 5;
4 | let y = "abc123";
5 | function myFunction() {}
6 | myFunction();
7 | const myErr = new Error();
8 | throw new Error("heyyyy!");
9 | function c() {
10 | a();
11 | }
12 | function a() {
13 | throw new Error("heyyyy!");
14 | }
15 | function b() {
16 | c();
17 | }
18 |
19 | try {
20 | b();
21 | } catch (e) {
22 | console.error(e);
23 | }
24 |
25 | function d() {
26 | a();
27 | }
28 | function e() {
29 | throw new Error("heyyyy!");
30 | }
31 | function f() {
32 | try {
33 | c();
34 | } catch (e) {
35 | console.error(e);
36 | }
37 | }
38 | function g() {
39 | d();
40 | }
41 |
42 | f();
43 |
44 | try {
45 | e();
46 | } catch (e) {
47 | console.error(e);
48 | }
49 |
50 | function h() {
51 | try {
52 | throwingFunc();
53 | } catch (e) {
54 | console.error(e);
55 | }
56 | }
57 |
58 | h();
59 |
60 | try {
61 | throwingFunc();
62 | h();
63 | } catch (e) {
64 | console.error(e);
65 | }
66 |
67 | export {};
68 |
--------------------------------------------------------------------------------
/src/rules/no-unhandled/tests/array-destructuring-ok.ts:
--------------------------------------------------------------------------------
1 | const pairs = new Map([
2 | ["foo", 1],
3 | ["bar", 2],
4 | ]);
5 |
6 | Array.from(pairs.entries())
7 | .filter(([, count]) => count > 1)
8 | .forEach(([identifier]) => {
9 | console.log(identifier);
10 | });
11 |
--------------------------------------------------------------------------------
/src/rules/no-unhandled/tests/basic-err-2.ts:
--------------------------------------------------------------------------------
1 | function c() {
2 | a();
3 | }
4 | function a() {
5 | throw new Error("heyyyy!");
6 | }
7 | try {
8 | c();
9 | } catch (e) {
10 | console.error(e);
11 | }
12 | c();
13 | c();
14 |
15 | function f() {
16 | try {
17 | c();
18 | } catch (e) {
19 | console.error(e);
20 | throw e;
21 | }
22 |
23 | try {
24 | throw new Error("heyyyy!");
25 | } catch (e) {
26 | console.error(e);
27 | }
28 | }
29 |
30 | f();
31 |
32 | export {};
33 |
--------------------------------------------------------------------------------
/src/rules/no-unhandled/tests/basic-err-3.ts:
--------------------------------------------------------------------------------
1 | function c() {
2 | a();
3 | }
4 | function a() {
5 | throw new Error("heyyyy!");
6 | }
7 | try {
8 | c();
9 | } catch (e) {
10 | console.error(e);
11 | }
12 | c();
13 | c();
14 |
15 | function f() {
16 | try {
17 | c();
18 | } catch (e) {
19 | console.error(e);
20 | }
21 | }
22 |
23 | f();
24 |
25 | export {};
26 |
--------------------------------------------------------------------------------
/src/rules/no-unhandled/tests/basic-err-4.ts:
--------------------------------------------------------------------------------
1 | function abcd() {
2 | throw new Error("heyyyy!");
3 | }
4 |
5 | abcd();
6 |
--------------------------------------------------------------------------------
/src/rules/no-unhandled/tests/basic-err.ts:
--------------------------------------------------------------------------------
1 | function c() {
2 | a();
3 | }
4 | function a() {
5 | throw new Error("heyyyy!");
6 | }
7 | function b() {
8 | c();
9 | }
10 | b();
11 |
12 | export {};
13 |
--------------------------------------------------------------------------------
/src/rules/no-unhandled/tests/basic-ok-2.ts:
--------------------------------------------------------------------------------
1 | function abc() {
2 | throw new Error("heyyyy!");
3 | }
4 |
--------------------------------------------------------------------------------
/src/rules/no-unhandled/tests/basic-ok.ts:
--------------------------------------------------------------------------------
1 | import { throwingFunc } from "./throwing-func";
2 |
3 | const x = 5;
4 | let y = "abc123";
5 | function myFunction() {}
6 | myFunction();
7 | const myErr = new Error();
8 | throw new Error("heyyyy!");
9 | function c() {
10 | a();
11 | }
12 | function a() {
13 | throw new Error("heyyyy!");
14 | }
15 | function b() {
16 | c();
17 | }
18 |
19 | try {
20 | b();
21 | } catch (e) {
22 | console.error(e);
23 | }
24 |
25 | function d() {
26 | a();
27 | }
28 | function e() {
29 | throw new Error("heyyyy!");
30 | }
31 | function f() {
32 | try {
33 | c();
34 | } catch (e) {
35 | console.error(e);
36 | }
37 | }
38 | function g() {
39 | d();
40 | }
41 |
42 | f();
43 |
44 | try {
45 | e();
46 | } catch (e) {
47 | console.error(e);
48 | }
49 |
50 | function h() {
51 | throwingFunc();
52 | }
53 |
54 | export {};
55 |
--------------------------------------------------------------------------------
/src/rules/no-unhandled/tests/import-err.ts:
--------------------------------------------------------------------------------
1 | import { throwingFunc } from "./throwing-func";
2 |
3 | function c() {
4 | d();
5 | }
6 |
7 | function a() {
8 | b();
9 | }
10 |
11 | function b() {
12 | c();
13 | }
14 |
15 | function d() {
16 | try {
17 | console.log("hey!");
18 | } catch (e) {
19 | console.error(e);
20 | }
21 |
22 | throwingFunc();
23 | }
24 |
25 | a();
26 |
--------------------------------------------------------------------------------
/src/rules/no-unhandled/tests/import-ok-2.ts:
--------------------------------------------------------------------------------
1 | import { throwingFunc } from "./throwing-func";
2 |
3 | function a() {
4 | b();
5 | }
6 |
7 | function b() {
8 | try {
9 | c();
10 | } catch (e) {
11 | console.error(e);
12 | }
13 | }
14 |
15 | function c() {
16 | d();
17 | }
18 |
19 | function d() {
20 | throwingFunc();
21 | }
22 |
23 | a();
24 |
--------------------------------------------------------------------------------
/src/rules/no-unhandled/tests/import-ok.ts:
--------------------------------------------------------------------------------
1 | import { throwingFunc } from "./throwing-func";
2 |
3 | function a() {
4 | b();
5 | }
6 |
7 | function b() {
8 | c();
9 | }
10 |
11 | function c() {
12 | d();
13 | }
14 |
15 | function d() {
16 | throwingFunc();
17 | }
18 |
19 | try {
20 | a();
21 | } catch (e) {
22 | console.error(e);
23 | }
24 |
--------------------------------------------------------------------------------
/src/rules/no-unhandled/tests/module-ok.ts:
--------------------------------------------------------------------------------
1 | import { readFile } from "fs/promises";
2 |
3 | async function a() {
4 | await readFile("./test.txt", "utf-8");
5 | }
6 |
7 | a();
8 |
--------------------------------------------------------------------------------
/src/rules/no-unhandled/tests/native-modules-err.ts:
--------------------------------------------------------------------------------
1 | import { readFileSync } from "fs";
2 |
3 | const content = readFileSync("this file does not exist", "utf-8");
4 | console.log({ content });
5 |
--------------------------------------------------------------------------------
/src/rules/no-unhandled/tests/native-modules-ok.ts:
--------------------------------------------------------------------------------
1 | import { readFileSync } from "fs";
2 |
3 | try {
4 | const content = readFileSync("this file does not exist", "utf-8");
5 | console.log({ content });
6 | } catch (e) {
7 | console.error(e);
8 | }
9 |
--------------------------------------------------------------------------------
/src/rules/no-unhandled/tests/private-identifier-err.ts:
--------------------------------------------------------------------------------
1 | import { throwingFunc } from "./throwing-func";
2 |
3 | class Test {
4 | public constructor() {
5 | this.#privateMethod();
6 | }
7 |
8 | #privateMethod() {
9 | throwingFunc();
10 | }
11 | }
12 |
13 | new Test();
14 |
--------------------------------------------------------------------------------
/src/rules/no-unhandled/tests/private-identifier-ok.ts:
--------------------------------------------------------------------------------
1 | import { throwingFunc } from "./throwing-func";
2 |
3 | class Test {
4 | public constructor() {
5 | this.#privateMethod();
6 | }
7 |
8 | #privateMethod() {
9 | console.log("Hello");
10 | }
11 | }
12 |
13 | new Test();
14 |
15 | class Test2 {
16 | public constructor() {
17 | this.#privateMethod();
18 | }
19 |
20 | #privateMethod() {
21 | throwingFunc();
22 | }
23 | }
24 |
25 | try {
26 | new Test2();
27 | } catch (e) {
28 | console.error(e);
29 | }
30 |
--------------------------------------------------------------------------------
/src/rules/no-unhandled/tests/recursive-err.ts:
--------------------------------------------------------------------------------
1 | function a() {
2 | a();
3 | throw new Error("error");
4 | }
5 |
6 | function b() {
7 | c();
8 | throw new Error("error");
9 | }
10 |
11 | function c() {
12 | b();
13 | }
14 |
15 | a();
16 | b();
17 |
--------------------------------------------------------------------------------
/src/rules/no-unhandled/tests/recursive-ok.ts:
--------------------------------------------------------------------------------
1 | function a() {
2 | a();
3 | }
4 |
5 | function b() {
6 | c();
7 | }
8 |
9 | function c() {
10 | b();
11 | }
12 |
13 | a();
14 | b();
15 |
16 | export {};
17 |
--------------------------------------------------------------------------------
/src/rules/no-unhandled/tests/throwing-func.ts:
--------------------------------------------------------------------------------
1 | export function throwingFunc() {
2 | try {
3 | throw new Error("heyyyy!");
4 | } catch (e) {
5 | console.error(e);
6 | }
7 |
8 | throw new Error("heyyyy!");
9 | }
10 |
--------------------------------------------------------------------------------
/src/rules/use-error-cause/index.ts:
--------------------------------------------------------------------------------
1 | export * from "./use-error-cause";
2 |
--------------------------------------------------------------------------------
/src/rules/use-error-cause/tests/basic-err.ts:
--------------------------------------------------------------------------------
1 | function throwingFunction() {
2 | throw new Error("This is an error");
3 | }
4 |
5 | function a() {
6 | throwingFunction();
7 | }
8 |
9 | function b() {
10 | try {
11 | a();
12 | } catch (e) {
13 | console.error(e);
14 | }
15 | }
16 |
17 | function c() {
18 | b();
19 | }
20 |
21 | function d() {
22 | try {
23 | a();
24 | } catch (e) {
25 | console.error(e);
26 | throw e;
27 | }
28 | }
29 |
30 | function e() {
31 | try {
32 | a();
33 | } catch (e) {
34 | console.error(e);
35 | throw new Error("This is another error");
36 | }
37 | }
38 |
39 | export {};
40 |
--------------------------------------------------------------------------------
/src/rules/use-error-cause/tests/basic-ok.ts:
--------------------------------------------------------------------------------
1 | function throwingFunction() {
2 | throw new Error("This is an error");
3 | }
4 |
5 | function a() {
6 | throwingFunction();
7 | }
8 |
9 | function b() {
10 | try {
11 | a();
12 | } catch (e) {
13 | console.error(e);
14 | }
15 | }
16 |
17 | function c() {
18 | b();
19 | }
20 |
21 | function d() {
22 | try {
23 | a();
24 | } catch (e) {
25 | console.error(e);
26 | throw e;
27 | }
28 | }
29 |
30 | function e() {
31 | try {
32 | a();
33 | } catch (e) {
34 | console.error(e);
35 | throw new Error("This is another error", { cause: e });
36 | }
37 | }
38 |
39 | export {};
40 |
--------------------------------------------------------------------------------
/src/rules/use-error-cause/tests/import-err.ts:
--------------------------------------------------------------------------------
1 | import { throwingFunc } from "./throwing-func";
2 |
3 | function a() {
4 | throwingFunc();
5 | }
6 |
7 | function b() {
8 | try {
9 | a();
10 | } catch (e) {
11 | console.error(e);
12 | }
13 | }
14 |
15 | function c() {
16 | b();
17 | }
18 |
19 | function d() {
20 | try {
21 | a();
22 | } catch (e) {
23 | console.error(e);
24 | throw e;
25 | }
26 | }
27 |
28 | function e() {
29 | try {
30 | a();
31 | } catch (e) {
32 | console.error(e);
33 | throw new Error("This is another error");
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/src/rules/use-error-cause/tests/import-ok.ts:
--------------------------------------------------------------------------------
1 | import { throwingFunc } from "./throwing-func";
2 |
3 | function a() {
4 | throwingFunc();
5 | }
6 |
7 | function b() {
8 | try {
9 | a();
10 | } catch (e) {
11 | console.error(e);
12 | }
13 | }
14 |
15 | function c() {
16 | b();
17 | }
18 |
19 | function d() {
20 | try {
21 | a();
22 | } catch (e) {
23 | console.error(e);
24 | throw e;
25 | }
26 | }
27 |
28 | function e() {
29 | try {
30 | a();
31 | } catch (e) {
32 | console.error(e);
33 | throw new Error("This is another error", { cause: e });
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/src/rules/use-error-cause/tests/throwing-func.ts:
--------------------------------------------------------------------------------
1 | export function throwingFunc() {
2 | throw new Error("heyyyy!");
3 | }
4 |
--------------------------------------------------------------------------------
/src/rules/use-error-cause/use-error-cause.spec.ts:
--------------------------------------------------------------------------------
1 | import { testFile } from "@/src/utils/test-file";
2 | import rule from "./use-error-cause";
3 |
4 | await testFile("src/rules/use-error-cause/tests/basic-ok.ts", [rule.name], []);
5 | await testFile(
6 | "src/rules/use-error-cause/tests/basic-err.ts",
7 | [rule.name],
8 | [
9 | {
10 | messageId: "noCause",
11 | line: 35,
12 | },
13 | ]
14 | );
15 |
16 | await testFile("src/rules/use-error-cause/tests/import-ok.ts", [rule.name], []);
17 | await testFile(
18 | "src/rules/use-error-cause/tests/import-err.ts",
19 | [rule.name],
20 | [
21 | {
22 | messageId: "noCause",
23 | line: 33,
24 | },
25 | ]
26 | );
27 |
--------------------------------------------------------------------------------
/src/rules/use-error-cause/use-error-cause.ts:
--------------------------------------------------------------------------------
1 | import { ESLintUtils, TSESTree } from "@typescript-eslint/utils";
2 | import {
3 | findInParent,
4 | isCatchClause,
5 | isIdentifier,
6 | isNewExpression,
7 | isObjectExpression,
8 | isProperty,
9 | } from "@/src/utils";
10 | import { createRule } from "../create-rule";
11 |
12 | const name = "use-error-cause";
13 | const rule = createRule({
14 | name,
15 | meta: {
16 | docs: {
17 | description:
18 | "On `Error` re-thrown, forces the use of `cause` property in order to preserve stack traces.",
19 | },
20 | type: "suggestion",
21 | messages: {
22 | noCause:
23 | "Use `cause` property when re-throwing, `Error(message, { cause: {{name}} })`.",
24 | },
25 | schema: [],
26 | },
27 | defaultOptions: [],
28 | create: (context) => {
29 | return {
30 | ThrowStatement(node) {
31 | const catch_ = findInParent(node, isCatchClause);
32 | if (!catch_) return;
33 | if (!isIdentifier(catch_.param)) return;
34 | if (!isNewExpression(node.argument)) return;
35 | const arg = node.argument as TSESTree.NewExpression;
36 | if (isObjectExpression(arg.arguments[1])) {
37 | const hasCauseProp = arg.arguments[1].properties.some(
38 | (p) =>
39 | isProperty(p) && isIdentifier(p.key) && p.key.name === "cause"
40 | );
41 | if (hasCauseProp) {
42 | return;
43 | }
44 | }
45 | context.report({
46 | node,
47 | messageId: "noCause",
48 | data: {
49 | name: catch_.param.name,
50 | },
51 | });
52 | },
53 | };
54 | },
55 | });
56 |
57 | export default { name, rule };
58 |
--------------------------------------------------------------------------------
/src/utils/ast-guards.ts:
--------------------------------------------------------------------------------
1 | import { AST_NODE_TYPES, TSESTree } from "@typescript-eslint/types";
2 |
3 | type Typed = TSESTree.Node | null | undefined;
4 |
5 | export function isFunctionDeclaration(
6 | node: Typed
7 | ): node is TSESTree.FunctionDeclaration {
8 | return node != null && node.type === AST_NODE_TYPES.FunctionDeclaration;
9 | }
10 |
11 | export function isMethodDefinition(
12 | node: Typed
13 | ): node is TSESTree.MethodDefinition {
14 | return node != null && node.type === AST_NODE_TYPES.MethodDefinition;
15 | }
16 |
17 | export function isMemberExpression(
18 | node: Typed
19 | ): node is TSESTree.MemberExpression {
20 | return node != null && node.type === AST_NODE_TYPES.MemberExpression;
21 | }
22 |
23 | export function isTryStatement(node: Typed): node is TSESTree.TryStatement {
24 | return node != null && node.type === AST_NODE_TYPES.TryStatement;
25 | }
26 |
27 | export function isImportDeclaration(
28 | node: Typed
29 | ): node is TSESTree.ImportDeclaration {
30 | return node != null && node.type === AST_NODE_TYPES.ImportDeclaration;
31 | }
32 |
33 | export function isImportSpecifier(
34 | node: Typed
35 | ): node is TSESTree.ImportSpecifier {
36 | return node != null && node.type === AST_NODE_TYPES.ImportSpecifier;
37 | }
38 |
39 | export function isVariableDeclaration(
40 | node: Typed
41 | ): node is TSESTree.VariableDeclaration {
42 | return node != null && node.type === AST_NODE_TYPES.VariableDeclaration;
43 | }
44 |
45 | export function isVariableDeclarator(
46 | node: Typed
47 | ): node is TSESTree.VariableDeclarator {
48 | return node != null && node.type === AST_NODE_TYPES.VariableDeclarator;
49 | }
50 |
51 | export function isBlockStatement(node: Typed): node is TSESTree.BlockStatement {
52 | return node != null && node.type === AST_NODE_TYPES.BlockStatement;
53 | }
54 |
55 | export function isProgram(node: Typed): node is TSESTree.Program {
56 | return node != null && node.type === AST_NODE_TYPES.Program;
57 | }
58 |
59 | export function isExportNamedDeclaration(
60 | node: Typed
61 | ): node is TSESTree.ExportNamedDeclaration {
62 | return node != null && node.type === AST_NODE_TYPES.ExportNamedDeclaration;
63 | }
64 |
65 | export function isThrowStatement(node: Typed): node is TSESTree.ThrowStatement {
66 | return node != null && node.type === AST_NODE_TYPES.ThrowStatement;
67 | }
68 |
69 | export function isCallExpression(node: Typed): node is TSESTree.CallExpression {
70 | return node != null && node.type === AST_NODE_TYPES.CallExpression;
71 | }
72 |
73 | export function isIdentifier(node: Typed): node is TSESTree.Identifier {
74 | return node != null && node.type === AST_NODE_TYPES.Identifier;
75 | }
76 |
77 | export function isPrivateIdentifier(
78 | node: Typed
79 | ): node is TSESTree.PrivateIdentifier {
80 | return node != null && node.type === AST_NODE_TYPES.PrivateIdentifier;
81 | }
82 |
83 | export function isCatchClause(node: Typed): node is TSESTree.CatchClause {
84 | return node != null && node.type === AST_NODE_TYPES.CatchClause;
85 | }
86 |
87 | export function isNewExpression(node: Typed): node is TSESTree.NewExpression {
88 | return node != null && node.type === AST_NODE_TYPES.NewExpression;
89 | }
90 |
91 | export function isObjectExpression(
92 | node: Typed
93 | ): node is TSESTree.ObjectExpression {
94 | return node != null && node.type === AST_NODE_TYPES.ObjectExpression;
95 | }
96 |
97 | export function isProperty(node: Typed): node is TSESTree.Property {
98 | return node != null && node.type === AST_NODE_TYPES.Property;
99 | }
100 |
101 | export function isClassDeclaration(
102 | node: Typed
103 | ): node is TSESTree.ClassDeclaration {
104 | return node != null && node.type === AST_NODE_TYPES.ClassDeclaration;
105 | }
106 |
107 | export function isArrowFunctionExpression(
108 | node: Typed
109 | ): node is TSESTree.ArrowFunctionExpression {
110 | return node != null && node.type === AST_NODE_TYPES.ArrowFunctionExpression;
111 | }
112 |
113 | export function isExpressionStatement(
114 | node: Typed
115 | ): node is TSESTree.ExpressionStatement {
116 | return node != null && node.type === AST_NODE_TYPES.ExpressionStatement;
117 | }
118 |
--------------------------------------------------------------------------------
/src/utils/can-func-throw.ts:
--------------------------------------------------------------------------------
1 | import {
2 | exploreChildren,
3 | findInChildren,
4 | findInParent,
5 | getFunctionId,
6 | isCallExpression,
7 | isCatchClause,
8 | isThrowStatement,
9 | isTryStatement,
10 | resolveFunc,
11 | } from "@/src/utils";
12 | import { nativeThrowing } from "@/src/utils/native-throwing";
13 | import { TSESTree } from "@typescript-eslint/utils";
14 | import { isIdentifier } from "@typescript-eslint/utils/ast-utils";
15 | import { RuleContext } from "@typescript-eslint/utils/ts-eslint";
16 |
17 | const throwFunctions = new Set();
18 | const scannedFunctions = new Set();
19 |
20 | const getNodeId = (
21 | node: TSESTree.Node,
22 | context: RuleContext
23 | ) =>
24 | [
25 | node.type,
26 | (node as any).name,
27 | (node as any).id?.name,
28 | node.loc?.start.line,
29 | node.loc?.end.line,
30 | node.loc?.start.column,
31 | node.loc?.end.column,
32 | context.filename,
33 | ].join(" ");
34 |
35 | export function canFuncThrowClear() {
36 | throwFunctions.clear();
37 | scannedFunctions.clear();
38 | }
39 |
40 | const checked: Record = {};
41 |
42 | export function canFuncThrow(
43 | node: TSESTree.Identifier | TSESTree.PrivateIdentifier,
44 | context: RuleContext
45 | ): boolean {
46 | const nodeId = getNodeId(node, context);
47 | if (checked[nodeId] != undefined) return checked[nodeId];
48 | const try_ = findInParent(node, isTryStatement);
49 | if (try_) {
50 | checked[nodeId] = false;
51 | return false;
52 | }
53 |
54 | const res = resolveFunc(node, context);
55 | if (res?.module) {
56 | const found = nativeThrowing.some(
57 | (x) => x.module === res.module && x.method === res.func.id?.name
58 | );
59 | if (found) {
60 | checked[nodeId] = true;
61 | return true;
62 | }
63 | }
64 | if (!res?.func) {
65 | checked[nodeId] = false;
66 | return false;
67 | }
68 |
69 | if (checked[nodeId] != true) checked[nodeId] = false;
70 | const scanRes = scanfunc(res.func, res.context);
71 | checked[nodeId] = scanRes;
72 | return scanRes;
73 | }
74 |
75 | function scanfunc(
76 | node: TSESTree.FunctionDeclaration,
77 | context: RuleContext
78 | ): boolean {
79 | const throws = exploreChildren(node, (child, parent_, resolve) => {
80 | const try_ = findInParent(child, isTryStatement);
81 | if (try_) {
82 | const catch_ = findInChildren(try_.parent, isCatchClause);
83 | const throw_ = catch_ && findInChildren(catch_, isThrowStatement);
84 | if (throw_) {
85 | resolve(true);
86 | }
87 | return;
88 | }
89 |
90 | if (isCallExpression(child) && isIdentifier(child.callee)) {
91 | let throws = false;
92 |
93 | if (scannedFunctions.has(getFunctionId(context, child.callee))) {
94 | throws = throwFunctions.has(getFunctionId(context, child.callee));
95 |
96 | if (throws) resolve(throws);
97 | return;
98 | }
99 |
100 | throws = canFuncThrow(child.callee, context);
101 | if (throws) {
102 | if (node.id) throwFunctions.add(getFunctionId(context, node.id));
103 | resolve(true);
104 | }
105 | } else if (isThrowStatement(child) && node.id) {
106 | throwFunctions.add(getFunctionId(context, node.id));
107 | resolve(true);
108 | }
109 | });
110 |
111 | if (node.id) {
112 | scannedFunctions.add(getFunctionId(context, node.id));
113 | if (throws) {
114 | throwFunctions.add(getFunctionId(context, node.id));
115 | }
116 | }
117 |
118 | return !!throws;
119 | }
120 |
--------------------------------------------------------------------------------
/src/utils/explore-children.ts:
--------------------------------------------------------------------------------
1 | import { TSESTree } from "@typescript-eslint/types";
2 |
3 | export function exploreChildren(
4 | node: TSESTree.Node,
5 | predicate: (
6 | _node: TSESTree.Node,
7 | _parent: TSESTree.Node | undefined,
8 | _resolve: (_args: T) => void
9 | ) => void
10 | ): T | undefined {
11 | const explored = new Set();
12 |
13 | const explore = (
14 | node: TSESTree.Node,
15 | parent?: TSESTree.Node
16 | ): T | undefined => {
17 | let rtrn = null;
18 | predicate(node, parent, (args) => {
19 | rtrn = args;
20 | });
21 | if (rtrn) return rtrn;
22 | for (const key in node) {
23 | if (key === "parent") continue;
24 | const val = node[key as keyof TSESTree.Node] as
25 | | TSESTree.Node
26 | | TSESTree.Node[]
27 | | undefined;
28 |
29 | if (val && typeof val === "object") {
30 | if (Array.isArray(val)) {
31 | for (const v of val) {
32 | if (v?.type) {
33 | if (explored.has(v)) continue;
34 | explored.add(v);
35 | const res = explore(v, node);
36 | if (res) return res;
37 | }
38 | }
39 | } else if (val.type) {
40 | if (explored.has(val)) continue;
41 | explored.add(val);
42 | const res = explore(val, node);
43 | if (res) return res;
44 | }
45 | }
46 | }
47 | };
48 | return explore(node, node.parent);
49 | }
50 |
51 | // [
52 | // "body",
53 | // "params",
54 | // "callee",
55 | // "expression",
56 | // "arguments",
57 | // "block",
58 | // "handler",
59 | // "finalizer",
60 | // "specifiers",
61 | // "assertions",
62 | // "argument",
63 | // "property",
64 | // "id",
65 | // "object",
66 | // "attributes",
67 | // "declaration",
68 | // ];
69 |
--------------------------------------------------------------------------------
/src/utils/find-identifier-in-parents.ts:
--------------------------------------------------------------------------------
1 | import { TSESTree } from "@typescript-eslint/utils";
2 | import { findIdentifiersInChildren } from "./find-identifiers-in-children";
3 |
4 | export const findIdentifierInParents = (
5 | name: string,
6 | node: TSESTree.Node
7 | ): TSESTree.Identifier | null => {
8 | if (!node.parent) return null;
9 | const ids = findIdentifiersInChildren(name, [node.parent]).filter(
10 | (x) => x != node
11 | );
12 | if (ids.length) {
13 | return ids[0];
14 | }
15 | return findIdentifierInParents(name, node.parent);
16 | };
17 |
--------------------------------------------------------------------------------
/src/utils/find-identifiers-in-children.ts:
--------------------------------------------------------------------------------
1 | import {
2 | isArrowFunctionExpression,
3 | isBlockStatement,
4 | isCallExpression,
5 | isExportNamedDeclaration,
6 | isExpressionStatement,
7 | isFunctionDeclaration,
8 | isImportDeclaration,
9 | isImportSpecifier,
10 | isMemberExpression,
11 | isProgram,
12 | isVariableDeclaration,
13 | isVariableDeclarator,
14 | } from "@/src/utils/ast-guards";
15 | import { TSESTree } from "@typescript-eslint/utils";
16 | import { isIdentifier } from "@typescript-eslint/utils/ast-utils";
17 |
18 | export const findIdentifiersInChildren = (
19 | name: string,
20 | nodes: TSESTree.Node[]
21 | ): TSESTree.Identifier[] => {
22 | const identifiers: TSESTree.Identifier[] = [];
23 | for (const node of nodes) {
24 | if (isProgram(node)) {
25 | identifiers.push(...findIdentifiersInChildren(name, node.body));
26 | } else if (isIdentifier(node)) {
27 | if (node.name === name) {
28 | identifiers.push(node);
29 | }
30 | } else if (isFunctionDeclaration(node)) {
31 | if (node.id) {
32 | identifiers.push(...findIdentifiersInChildren(name, [node.id]));
33 | }
34 | identifiers.push(...findIdentifiersInChildren(name, node.body.body));
35 | } else if (isImportDeclaration(node)) {
36 | identifiers.push(...findIdentifiersInChildren(name, node.specifiers));
37 | } else if (isImportSpecifier(node)) {
38 | identifiers.push(...findIdentifiersInChildren(name, [node.local]));
39 | } else if (isVariableDeclaration(node)) {
40 | identifiers.push(...findIdentifiersInChildren(name, node.declarations));
41 | } else if (isVariableDeclarator(node)) {
42 | identifiers.push(...findIdentifiersInChildren(name, [node.id]));
43 | } else if (isBlockStatement(node)) {
44 | identifiers.push(...findIdentifiersInChildren(name, node.body));
45 | } else if (isExportNamedDeclaration(node) && node.declaration) {
46 | identifiers.push(...findIdentifiersInChildren(name, [node.declaration]));
47 | } else if (isArrowFunctionExpression(node)) {
48 | identifiers.push(...findIdentifiersInChildren(name, [node.body]));
49 | } else if (isExpressionStatement(node)) {
50 | identifiers.push(...findIdentifiersInChildren(name, [node.expression]));
51 | } else if (isCallExpression(node)) {
52 | identifiers.push(...findIdentifiersInChildren(name, [...node.arguments]));
53 | } else if (isMemberExpression(node)) {
54 | identifiers.push(
55 | ...findIdentifiersInChildren(name, [node.property, node.object])
56 | );
57 | }
58 | }
59 |
60 | return identifiers;
61 | };
62 |
--------------------------------------------------------------------------------
/src/utils/find-in-children-all.ts:
--------------------------------------------------------------------------------
1 | import { TSESTree } from "@typescript-eslint/types";
2 | import { exploreChildren } from "./explore-children";
3 | import { InferGuardType } from "./infer-guard-type";
4 |
5 | export function findInChildrenAll<
6 | T extends TSESTree.Node,
7 | F extends (x: TSESTree.Node) => x is T
8 | >(
9 | node: TSESTree.Node,
10 | predicate: F,
11 | filter?: (node: InferGuardType) => boolean
12 | ) {
13 | const result: InferGuardType[] = [];
14 | exploreChildren(node, (child) => {
15 | if (predicate(child) && (!filter || filter(child as InferGuardType))) {
16 | result.push(child as InferGuardType);
17 | }
18 | });
19 | return result;
20 | }
21 |
--------------------------------------------------------------------------------
/src/utils/find-in-children.ts:
--------------------------------------------------------------------------------
1 | import { TSESTree } from "@typescript-eslint/types";
2 | import { InferGuardType } from "./infer-guard-type";
3 | import { exploreChildren } from "./explore-children";
4 |
5 | export function findInChildren<
6 | T extends TSESTree.Node,
7 | F extends (x: TSESTree.Node) => x is T
8 | >(
9 | node: TSESTree.Node,
10 | predicate: F,
11 | filter?: (node: InferGuardType) => boolean
12 | ): InferGuardType | undefined {
13 | return exploreChildren(node, (child, _parent, resolve) => {
14 | if (predicate(child) && (!filter || filter(child as InferGuardType))) {
15 | resolve(child as InferGuardType);
16 | }
17 | });
18 | }
19 |
--------------------------------------------------------------------------------
/src/utils/find-in-parent.ts:
--------------------------------------------------------------------------------
1 | import { TSESTree } from "@typescript-eslint/types";
2 | import { findInChildren } from "./find-in-children";
3 | import { InferGuardType } from "./infer-guard-type";
4 |
5 | export function findInParent<
6 | T extends TSESTree.Node,
7 | F extends (x: TSESTree.Node) => x is T
8 | >(
9 | node: TSESTree.Node,
10 | predicate: F,
11 | filter?: (node: InferGuardType) => boolean
12 | ): InferGuardType | undefined {
13 | let parent: TSESTree.Node | undefined = node.parent;
14 | while (parent) {
15 | const found = findInChildren(parent, predicate, (x) => {
16 | return (
17 | x.range[0] < node.range[0] &&
18 | x.range[1] > node.range[1] &&
19 | (!filter || filter(x as InferGuardType))
20 | );
21 | });
22 | if (found) {
23 | return found;
24 | }
25 | parent = parent.parent;
26 | }
27 | return undefined;
28 | }
29 |
--------------------------------------------------------------------------------
/src/utils/get-call-expr-id.ts:
--------------------------------------------------------------------------------
1 | import { TSESTree } from "@typescript-eslint/utils";
2 | import {
3 | isIdentifier,
4 | isMemberExpression,
5 | isPrivateIdentifier,
6 | } from "@/src/utils/ast-guards";
7 |
8 | export function getCallExprId(called: TSESTree.CallExpression) {
9 | if (isIdentifier(called.callee)) {
10 | return called.callee;
11 | } else if (isMemberExpression(called.callee)) {
12 | if (
13 | isIdentifier(called.callee.property) ||
14 | isPrivateIdentifier(called.callee.property)
15 | ) {
16 | return called.callee.property;
17 | } else {
18 | throw new Error(
19 | `Cannot handle non-identifier member expression property ${called.callee.property}`
20 | );
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/utils/get-function-id.ts:
--------------------------------------------------------------------------------
1 | import { TSESTree } from "@typescript-eslint/types";
2 | import { RuleContext } from "@typescript-eslint/utils/ts-eslint";
3 | import { isImportDeclaration, isImportSpecifier } from "./ast-guards";
4 | import { getImportDeclaration } from "./get-import-declaration";
5 |
6 | export function getFunctionId(
7 | context: RuleContext,
8 | node: TSESTree.Identifier | TSESTree.ImportDeclaration
9 | ) {
10 | if (isImportDeclaration(node)) {
11 | const name = node.specifiers.find(isImportSpecifier)?.local.name;
12 | const fileName = getImportDeclaration(context, node);
13 | return `${fileName.path}#${name}`;
14 | }
15 | return `${context.physicalFilename}#${node.name}`;
16 | }
17 |
--------------------------------------------------------------------------------
/src/utils/get-import-declaration.ts:
--------------------------------------------------------------------------------
1 | import { TSESTree } from "@typescript-eslint/utils";
2 | import { RuleContext } from "@typescript-eslint/utils/ts-eslint";
3 | import { existsSync, lstatSync, readFileSync } from "fs";
4 | import path, { dirname, join } from "path";
5 |
6 | function cleanTsConfig(content: string) {
7 | return (
8 | content
9 | // Remove comments
10 | .replace(
11 | /(?:\r\n|\n|^)(?:[^'"])*?(?:'(?:[^\r\n\\']|\\'|[\\]{2})*'|"(?:[^\r\n\\"]|\\"|[\\]{2})*")*?(?:[^'"])*?(\/\*(?:[\s\S]*?)\*\/|\/\/.*)/g,
12 | ""
13 | )
14 | // Remove trailing commas
15 | .replace(/,(\s+\])/gm, "$1")
16 | .replace(/,(\s+\})/gm, "$1")
17 | );
18 | }
19 |
20 | function resolveTSAlias(tsconfigpath: string, to: string, cwd: string) {
21 | const tsconfig = readFileSync(tsconfigpath, "utf-8");
22 | const aliases = (JSON.parse(cleanTsConfig(tsconfig)).compilerOptions?.paths ??
23 | {}) as Record;
24 |
25 | const res = Object.entries(aliases)
26 | // sorting by longest - most qualified - alias
27 | .sort((a, b) => b[0].length - a[0].length)
28 | .find(
29 | ([key]) => to.startsWith(key) || to.startsWith(key.replace(/\*$/, ""))
30 | );
31 |
32 | if (res) {
33 | // eslint-disable-next-line prefer-const
34 | let [key, val] = res;
35 | key = key.replace(/\*$/, "");
36 | const firstVal = val[0].replace(/\*$/, "");
37 | to = to.replace(key, firstVal);
38 | to = path.resolve(cwd, to);
39 | }
40 |
41 | return to;
42 | }
43 |
44 | const codeExt = [".ts", ".js", ".tsx", ".jsx"];
45 |
46 | function endsWithAny(str: string, arr: string[]) {
47 | return arr.some((ext) => str.endsWith(ext));
48 | }
49 |
50 | export function getImportDeclaration(
51 | context: RuleContext,
52 | impt: TSESTree.ImportDeclaration
53 | ) {
54 | const from = context.physicalFilename;
55 | let to = impt.source.value;
56 |
57 | let res: string | null = null;
58 |
59 | if (!to.startsWith(".")) {
60 | let { project, tsconfigRootDir } = context.parserOptions;
61 | if (project || tsconfigRootDir) {
62 | if (project === true || !project) project = "./tsconfig.json";
63 | if (Array.isArray(project)) project = project[0];
64 | if (!tsconfigRootDir) tsconfigRootDir = context.cwd;
65 | if (!lstatSync(tsconfigRootDir).isDirectory()) {
66 | tsconfigRootDir = dirname(tsconfigRootDir);
67 | }
68 |
69 | to = resolveTSAlias(join(tsconfigRootDir, project), to, context.cwd);
70 | res = to;
71 | }
72 |
73 | if (!to.startsWith(".") && !to.startsWith("/")) {
74 | const split = to.split(":");
75 | if (!existsSync(to)) {
76 | return { module: split.at(-1), protocol: split.at(-2) };
77 | }
78 | // no relative path and no TS alias,
79 | // considering it as a node_module
80 | return { path: `./node_modules/${to}`, module: to };
81 | }
82 | } else if (!to.startsWith("/")) {
83 | res = path.resolve(path.dirname(from), to);
84 | }
85 |
86 | if (!res) throw new Error(`Import path '${to}' could not resolved`);
87 |
88 | if (!endsWithAny(res, codeExt)) {
89 | res += path.extname(from);
90 | }
91 |
92 | if (!existsSync(res)) {
93 | if (res.endsWith(".js")) {
94 | res = findFileExtension(res.replace(".js", ""), [".jsx", ".ts", ".tsx"]);
95 | } else if (res.endsWith(".jsx")) {
96 | res = findFileExtension(res.replace(".jsx", ""), [".js", ".tsx", ".ts"]);
97 | } else if (res.endsWith(".ts")) {
98 | res = findFileExtension(res.replace(".ts", ""), [".tsx", ".js", ".jsx"]);
99 | } else if (res.endsWith(".tsx")) {
100 | res = findFileExtension(res.replace(".tsx", ""), [".ts", ".jsx", ".js"]);
101 | }
102 | }
103 |
104 | return { path: res, module: to };
105 | }
106 |
107 | function findFileExtension(extless: string, tries: string[]) {
108 | for (const ext of tries) {
109 | if (existsSync(extless + ext)) {
110 | return extless + ext;
111 | }
112 | }
113 | return null;
114 | }
115 |
--------------------------------------------------------------------------------
/src/utils/index.ts:
--------------------------------------------------------------------------------
1 | export * from "./ast-guards";
2 | export * from "./explore-children";
3 | export * from "./find-identifier-in-parents";
4 | export * from "./find-identifiers-in-children";
5 | export * from "./find-in-children";
6 | export * from "./find-in-parent";
7 | export * from "./get-call-expr-id";
8 | export * from "./get-function-id";
9 | export * from "./get-import-declaration";
10 | export * from "./infer-guard-type";
11 | export * from "./parse";
12 | export * from "./resolve-func";
13 |
--------------------------------------------------------------------------------
/src/utils/infer-guard-type.ts:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line @typescript-eslint/no-explicit-any
2 | export type InferGuardType = T extends (x: any) => x is infer G ? G : never;
3 |
--------------------------------------------------------------------------------
/src/utils/native-throwing.ts:
--------------------------------------------------------------------------------
1 | export const nativeThrowing = [
2 | // File System operations
3 | {
4 | protocol: "node",
5 | module: "fs",
6 | method: "readFileSync",
7 | },
8 | {
9 | protocol: "node",
10 | module: "fs",
11 | method: "writeFileSync",
12 | },
13 | {
14 | protocol: "node",
15 | module: "fs",
16 | method: "appendFileSync",
17 | },
18 | {
19 | protocol: "node",
20 | module: "fs",
21 | method: "copyFileSync",
22 | },
23 | {
24 | protocol: "node",
25 | module: "fs",
26 | method: "openSync",
27 | },
28 | {
29 | protocol: "node",
30 | module: "fs",
31 | method: "closeSync",
32 | },
33 | {
34 | protocol: "node",
35 | module: "fs",
36 | method: "readSync",
37 | },
38 | {
39 | protocol: "node",
40 | module: "fs",
41 | method: "writeSync",
42 | },
43 | {
44 | protocol: "node",
45 | module: "fs",
46 | method: "statSync",
47 | },
48 | {
49 | protocol: "node",
50 | module: "fs",
51 | method: "lstatSync",
52 | },
53 | {
54 | protocol: "node",
55 | module: "fs",
56 | method: "fstatSync",
57 | },
58 | {
59 | protocol: "node",
60 | module: "fs",
61 | method: "readdirSync",
62 | },
63 | {
64 | protocol: "node",
65 | module: "fs",
66 | method: "mkdirSync",
67 | },
68 | {
69 | protocol: "node",
70 | module: "fs",
71 | method: "rmdirSync",
72 | },
73 | {
74 | protocol: "node",
75 | module: "fs",
76 | method: "unlinkSync",
77 | },
78 | {
79 | protocol: "node",
80 | module: "fs",
81 | method: "rmSync",
82 | },
83 | {
84 | protocol: "node",
85 | module: "fs",
86 | method: "renameSync",
87 | },
88 | {
89 | protocol: "node",
90 | module: "fs",
91 | method: "chmodSync",
92 | },
93 | {
94 | protocol: "node",
95 | module: "fs",
96 | method: "chownSync",
97 | },
98 | {
99 | protocol: "node",
100 | module: "fs",
101 | method: "linkSync",
102 | },
103 | {
104 | protocol: "node",
105 | module: "fs",
106 | method: "symlinkSync",
107 | },
108 | {
109 | protocol: "node",
110 | module: "fs",
111 | method: "readlinkSync",
112 | },
113 | {
114 | protocol: "node",
115 | module: "fs",
116 | method: "realpathSync",
117 | },
118 | {
119 | protocol: "node",
120 | module: "fs",
121 | method: "accessSync",
122 | },
123 | {
124 | protocol: "node",
125 | module: "fs",
126 | method: "truncateSync",
127 | },
128 | {
129 | protocol: "node",
130 | module: "fs",
131 | method: "ftruncateSync",
132 | },
133 | {
134 | protocol: "node",
135 | module: "fs",
136 | method: "fsyncSync",
137 | },
138 | {
139 | protocol: "node",
140 | module: "fs",
141 | method: "fdatasyncSync",
142 | },
143 | {
144 | protocol: "node",
145 | module: "fs",
146 | method: "utimesSync",
147 | },
148 | {
149 | protocol: "node",
150 | module: "fs",
151 | method: "futimesSync",
152 | },
153 | {
154 | protocol: "node",
155 | module: "fs",
156 | method: "existsSync",
157 | },
158 | {
159 | protocol: "node",
160 | module: "fs",
161 | method: "constants",
162 | },
163 |
164 | // Path operations
165 | {
166 | protocol: "node",
167 | module: "path",
168 | method: "resolve",
169 | },
170 | {
171 | protocol: "node",
172 | module: "path",
173 | method: "normalize",
174 | },
175 |
176 | // URL operations
177 | {
178 | protocol: "node",
179 | module: "url",
180 | method: "URL",
181 | },
182 | {
183 | protocol: "node",
184 | module: "url",
185 | method: "URLSearchParams",
186 | },
187 | {
188 | protocol: "node",
189 | module: "url",
190 | method: "parse",
191 | },
192 |
193 | // Buffer operations
194 | {
195 | protocol: "node",
196 | module: "buffer",
197 | method: "Buffer.from",
198 | },
199 | {
200 | protocol: "node",
201 | module: "buffer",
202 | method: "Buffer.alloc",
203 | },
204 | {
205 | protocol: "node",
206 | module: "buffer",
207 | method: "Buffer.allocUnsafe",
208 | },
209 | {
210 | protocol: "node",
211 | module: "buffer",
212 | method: "Buffer.allocUnsafeSlow",
213 | },
214 | {
215 | protocol: "node",
216 | module: "buffer",
217 | method: "Buffer.concat",
218 | },
219 | {
220 | protocol: "node",
221 | module: "buffer",
222 | method: "Buffer.compare",
223 | },
224 |
225 | // Crypto operations
226 | {
227 | protocol: "node",
228 | module: "crypto",
229 | method: "createHash",
230 | },
231 | {
232 | protocol: "node",
233 | module: "crypto",
234 | method: "createHmac",
235 | },
236 | {
237 | protocol: "node",
238 | module: "crypto",
239 | method: "createCipher",
240 | },
241 | {
242 | protocol: "node",
243 | module: "crypto",
244 | method: "createDecipher",
245 | },
246 | {
247 | protocol: "node",
248 | module: "crypto",
249 | method: "createCipheriv",
250 | },
251 | {
252 | protocol: "node",
253 | module: "crypto",
254 | method: "createDecipheriv",
255 | },
256 | {
257 | protocol: "node",
258 | module: "crypto",
259 | method: "createSign",
260 | },
261 | {
262 | protocol: "node",
263 | module: "crypto",
264 | method: "createVerify",
265 | },
266 | {
267 | protocol: "node",
268 | module: "crypto",
269 | method: "createDiffieHellman",
270 | },
271 | {
272 | protocol: "node",
273 | module: "crypto",
274 | method: "getDiffieHellman",
275 | },
276 | {
277 | protocol: "node",
278 | module: "crypto",
279 | method: "pbkdf2Sync",
280 | },
281 | {
282 | protocol: "node",
283 | module: "crypto",
284 | method: "scryptSync",
285 | },
286 | {
287 | protocol: "node",
288 | module: "crypto",
289 | method: "randomBytes",
290 | },
291 | {
292 | protocol: "node",
293 | module: "crypto",
294 | method: "randomFillSync",
295 | },
296 | {
297 | protocol: "node",
298 | module: "crypto",
299 | method: "generateKeyPairSync",
300 | },
301 | {
302 | protocol: "node",
303 | module: "crypto",
304 | method: "randomUUID",
305 | },
306 | {
307 | protocol: "node",
308 | module: "crypto",
309 | method: "sign",
310 | },
311 | {
312 | protocol: "node",
313 | module: "crypto",
314 | method: "verify",
315 | },
316 | {
317 | protocol: "node",
318 | module: "crypto",
319 | method: "constants",
320 | },
321 |
322 | // Child process operations
323 | {
324 | protocol: "node",
325 | module: "child_process",
326 | method: "execSync",
327 | },
328 | {
329 | protocol: "node",
330 | module: "child_process",
331 | method: "execFileSync",
332 | },
333 | {
334 | protocol: "node",
335 | module: "child_process",
336 | method: "spawnSync",
337 | },
338 |
339 | // Process operations
340 | {
341 | protocol: "node",
342 | module: "process",
343 | method: "chdir",
344 | },
345 | {
346 | protocol: "node",
347 | module: "process",
348 | method: "kill",
349 | },
350 | {
351 | protocol: "node",
352 | module: "process",
353 | method: "setuid",
354 | },
355 | {
356 | protocol: "node",
357 | module: "process",
358 | method: "setgid",
359 | },
360 | {
361 | protocol: "node",
362 | module: "process",
363 | method: "setgroups",
364 | },
365 | {
366 | protocol: "node",
367 | module: "process",
368 | method: "umask",
369 | },
370 |
371 | // OS operations
372 | {
373 | protocol: "node",
374 | module: "os",
375 | method: "userInfo",
376 | },
377 | {
378 | protocol: "node",
379 | module: "os",
380 | method: "setPriority",
381 | },
382 |
383 | // DNS operations
384 | {
385 | protocol: "node",
386 | module: "dns",
387 | method: "lookup",
388 | },
389 | {
390 | protocol: "node",
391 | module: "dns",
392 | method: "lookupService",
393 | },
394 | {
395 | protocol: "node",
396 | module: "dns",
397 | method: "resolve",
398 | },
399 | {
400 | protocol: "node",
401 | module: "dns",
402 | method: "resolve4",
403 | },
404 | {
405 | protocol: "node",
406 | module: "dns",
407 | method: "resolve6",
408 | },
409 | {
410 | protocol: "node",
411 | module: "dns",
412 | method: "resolveMx",
413 | },
414 | {
415 | protocol: "node",
416 | module: "dns",
417 | method: "resolveTxt",
418 | },
419 | {
420 | protocol: "node",
421 | module: "dns",
422 | method: "resolveSrv",
423 | },
424 | {
425 | protocol: "node",
426 | module: "dns",
427 | method: "resolvePtr",
428 | },
429 | {
430 | protocol: "node",
431 | module: "dns",
432 | method: "resolveCname",
433 | },
434 | {
435 | protocol: "node",
436 | module: "dns",
437 | method: "resolveNs",
438 | },
439 | {
440 | protocol: "node",
441 | module: "dns",
442 | method: "resolveSoa",
443 | },
444 | {
445 | protocol: "node",
446 | module: "dns",
447 | method: "reverse",
448 | },
449 |
450 | // Utilities
451 | {
452 | protocol: "node",
453 | module: "util",
454 | method: "deprecate",
455 | },
456 | {
457 | protocol: "node",
458 | module: "util",
459 | method: "promisify",
460 | },
461 |
462 | // V8 operations
463 | {
464 | protocol: "node",
465 | module: "v8",
466 | method: "serialize",
467 | },
468 | {
469 | protocol: "node",
470 | module: "v8",
471 | method: "deserialize",
472 | },
473 | {
474 | protocol: "node",
475 | module: "v8",
476 | method: "writeHeapSnapshot",
477 | },
478 |
479 | // Worker threads
480 | {
481 | protocol: "node",
482 | module: "worker_threads",
483 | method: "Worker",
484 | },
485 |
486 | // Cluster operations
487 | {
488 | protocol: "node",
489 | module: "cluster",
490 | method: "setupMaster",
491 | },
492 | {
493 | protocol: "node",
494 | module: "cluster",
495 | method: "fork",
496 | },
497 |
498 | // Net operations
499 | {
500 | protocol: "node",
501 | module: "net",
502 | method: "createServer",
503 | },
504 | {
505 | protocol: "node",
506 | module: "net",
507 | method: "createConnection",
508 | },
509 | {
510 | protocol: "node",
511 | module: "net",
512 | method: "connect",
513 | },
514 |
515 | // HTTP operations
516 | {
517 | protocol: "node",
518 | module: "http",
519 | method: "createServer",
520 | },
521 | {
522 | protocol: "node",
523 | module: "http",
524 | method: "request",
525 | },
526 | {
527 | protocol: "node",
528 | module: "http",
529 | method: "get",
530 | },
531 |
532 | // HTTPS operations
533 | {
534 | protocol: "node",
535 | module: "https",
536 | method: "createServer",
537 | },
538 | {
539 | protocol: "node",
540 | module: "https",
541 | method: "request",
542 | },
543 | {
544 | protocol: "node",
545 | module: "https",
546 | method: "get",
547 | },
548 |
549 | // TLS operations
550 | {
551 | protocol: "node",
552 | module: "tls",
553 | method: "createServer",
554 | },
555 | {
556 | protocol: "node",
557 | module: "tls",
558 | method: "connect",
559 | },
560 | {
561 | protocol: "node",
562 | module: "tls",
563 | method: "createSecureContext",
564 | },
565 |
566 | // Zlib operations
567 | {
568 | protocol: "node",
569 | module: "zlib",
570 | method: "deflateSync",
571 | },
572 | {
573 | protocol: "node",
574 | module: "zlib",
575 | method: "inflateSync",
576 | },
577 | {
578 | protocol: "node",
579 | module: "zlib",
580 | method: "gzipSync",
581 | },
582 | {
583 | protocol: "node",
584 | module: "zlib",
585 | method: "gunzipSync",
586 | },
587 | {
588 | protocol: "node",
589 | module: "zlib",
590 | method: "deflateRawSync",
591 | },
592 | {
593 | protocol: "node",
594 | module: "zlib",
595 | method: "inflateRawSync",
596 | },
597 | {
598 | protocol: "node",
599 | module: "zlib",
600 | method: "brotliCompressSync",
601 | },
602 | {
603 | protocol: "node",
604 | module: "zlib",
605 | method: "brotliDecompressSync",
606 | },
607 |
608 | // Readline operations
609 | {
610 | protocol: "node",
611 | module: "readline",
612 | method: "createInterface",
613 | },
614 |
615 | // REPL operations
616 | {
617 | protocol: "node",
618 | module: "repl",
619 | method: "start",
620 | },
621 |
622 | // Module operations
623 | {
624 | protocol: "node",
625 | module: "module",
626 | method: "require",
627 | },
628 | {
629 | protocol: "node",
630 | module: "module",
631 | method: "createRequire",
632 | },
633 |
634 | // Global functions
635 | {
636 | protocol: "node",
637 | module: "global",
638 | method: "require",
639 | },
640 | {
641 | protocol: "node",
642 | module: "global",
643 | method: "JSON.parse",
644 | },
645 | {
646 | protocol: "node",
647 | module: "global",
648 | method: "JSON.stringify",
649 | },
650 | {
651 | protocol: "node",
652 | module: "global",
653 | method: "parseInt",
654 | },
655 | {
656 | protocol: "node",
657 | module: "global",
658 | method: "parseFloat",
659 | },
660 | {
661 | protocol: "node",
662 | module: "global",
663 | method: "decodeURI",
664 | },
665 | {
666 | protocol: "node",
667 | module: "global",
668 | method: "decodeURIComponent",
669 | },
670 | {
671 | protocol: "node",
672 | module: "global",
673 | method: "encodeURI",
674 | },
675 | {
676 | protocol: "node",
677 | module: "global",
678 | method: "encodeURIComponent",
679 | },
680 | ];
681 |
--------------------------------------------------------------------------------
/src/utils/parse.ts:
--------------------------------------------------------------------------------
1 | import { RuleContext, SourceCode } from "@typescript-eslint/utils/ts-eslint";
2 | import { exploreChildren } from "./explore-children";
3 | import { SourceFile } from "typescript";
4 |
5 | function omitNullish(obj: T): T {
6 | return Object.fromEntries(
7 | Object.entries(obj).filter(([, value]) => value != null)
8 | ) as T;
9 | }
10 |
11 | export function parse(
12 | source: SourceFile,
13 | context: RuleContext
14 | ): SourceCode.Program {
15 | const opts = context.languageOptions;
16 | const parsed = (opts.parser as any).parseForESLint(
17 | source.text,
18 | omitNullish({
19 | parser: opts.parserOptions,
20 | filePath: source.fileName,
21 | loc: true,
22 | range: true,
23 | tokens: true,
24 | comment: true,
25 | })
26 | );
27 |
28 | const ast: SourceCode.Program = parsed.ast;
29 |
30 | exploreChildren(ast, (node, parent) => {
31 | node.parent = parent;
32 | });
33 |
34 | return ast;
35 | }
36 |
--------------------------------------------------------------------------------
/src/utils/resolve-class.ts:
--------------------------------------------------------------------------------
1 | import { TSESTree } from "@typescript-eslint/utils";
2 | import { isClassDeclaration } from "@/src/utils/ast-guards";
3 | import { RuleContext } from "@typescript-eslint/utils/ts-eslint";
4 | import { resolveId } from "./resolve-id";
5 | import { findInParent } from "./find-in-parent";
6 |
7 | export function resolveClass(
8 | id: TSESTree.Identifier | TSESTree.PrivateIdentifier,
9 | context: RuleContext
10 | ) {
11 | const resolved = resolveId(id, context);
12 | if (!resolved?.id) return;
13 | const class_ = findInParent(resolved.id, isClassDeclaration);
14 | if (!class_) return;
15 | return { class: class_, context: resolved.context };
16 | }
17 |
--------------------------------------------------------------------------------
/src/utils/resolve-func.ts:
--------------------------------------------------------------------------------
1 | import { isFunctionDeclaration } from "@/src/utils/ast-guards";
2 | import { TSESTree } from "@typescript-eslint/utils";
3 | import { RuleContext } from "@typescript-eslint/utils/ts-eslint";
4 | import { findInParent } from "./find-in-parent";
5 | import { resolveId } from "./resolve-id";
6 |
7 | export function resolveFunc(
8 | id: TSESTree.Identifier | TSESTree.PrivateIdentifier,
9 | context: RuleContext
10 | ) {
11 | const resolved = resolveId(id, context);
12 | if (!resolved?.id) return;
13 | const func = findInParent(
14 | resolved.id,
15 | isFunctionDeclaration,
16 | (x) => x.id?.name === id.name
17 | );
18 | if (!func) return;
19 | return {
20 | func,
21 | module: resolved.module,
22 | protocol: resolved.protocol,
23 | context: resolved.context,
24 | };
25 | }
26 |
--------------------------------------------------------------------------------
/src/utils/resolve-id.ts:
--------------------------------------------------------------------------------
1 | import { isImportDeclaration } from "@/src/utils/ast-guards";
2 | import { findIdentifierInParents } from "@/src/utils/find-identifier-in-parents";
3 | import { TSESTree } from "@typescript-eslint/utils";
4 | import { RuleContext } from "@typescript-eslint/utils/ts-eslint";
5 | import { resolveImportedId } from "./resolve-imported-id";
6 |
7 | export function resolveId(
8 | id: TSESTree.Identifier | TSESTree.PrivateIdentifier,
9 | context: RuleContext
10 | ) {
11 | const identifier = findIdentifierInParents(id.name, id);
12 | if (!identifier) return;
13 | if (isImportDeclaration(identifier?.parent?.parent)) {
14 | const idInParsed = resolveImportedId(context, identifier.parent.parent);
15 | if (!idInParsed?.id) return;
16 |
17 | return idInParsed;
18 | }
19 | return { id: identifier, module: null, protocol: null, context };
20 | }
21 |
--------------------------------------------------------------------------------
/src/utils/resolve-imported-id.ts:
--------------------------------------------------------------------------------
1 | import { isExportNamedDeclaration, isIdentifier } from "@/src/utils/ast-guards";
2 | import { findIdentifiersInChildren } from "@/src/utils/find-identifiers-in-children";
3 | import { getImportDeclaration } from "@/src/utils/get-import-declaration";
4 | import { parse } from "@/src/utils/parse";
5 | import { TSESTree } from "@typescript-eslint/utils";
6 | import { RuleContext, SourceCode } from "@typescript-eslint/utils/ts-eslint";
7 | import { readFileSync } from "fs";
8 | import ts from "typescript";
9 | import { findInChildren } from "./find-in-children";
10 | const { createSourceFile, ScriptTarget } = ts;
11 |
12 | export function resolveImportedId(
13 | context: RuleContext,
14 | impt: TSESTree.ImportDeclaration
15 | ) {
16 | const imp = getImportDeclaration(context, impt);
17 | if (!imp.path || imp.path.startsWith("./node_modules")) {
18 | const id = impt.specifiers[0].local;
19 |
20 | return {
21 | id: findInChildren(
22 | parse(
23 | createSourceFile(
24 | "untitled.js",
25 | `export function ${id.name}() {}`,
26 | ScriptTarget.Latest
27 | ),
28 | context
29 | ),
30 | isIdentifier
31 | ),
32 | module: imp.module,
33 | protocol: imp.protocol,
34 | context,
35 | };
36 | }
37 | let content = "";
38 | try {
39 | content = readFileSync(imp.path, "utf-8");
40 | } catch (e) {
41 | console.error(`Could not read file ${imp}`);
42 | console.error(e);
43 | return;
44 | }
45 | const parsed = parse(
46 | createSourceFile(imp.path, content, ScriptTarget.Latest),
47 | context
48 | );
49 | const identifierInParsed = findIdentifiersInChildren(
50 | impt.specifiers[0].local.name,
51 | parsed.body
52 | ).find((x) => isExportNamedDeclaration(x.parent?.parent));
53 | if (!identifierInParsed) return;
54 |
55 | const ctxParsed = {
56 | ...context,
57 | physicalFilename: imp.path,
58 | sourceCode: new SourceCode(content, parsed),
59 | parser: (context as any).parser,
60 | parserOptions: context.parserOptions,
61 | cwd: context.cwd,
62 | id: context.id,
63 | languageOptions: context.languageOptions,
64 | parserPath: context.parserPath,
65 | report: context.report,
66 | settings: context.settings,
67 | };
68 |
69 | return {
70 | id: identifierInParsed,
71 | module: imp.module,
72 | protocol: imp.protocol,
73 | context: ctxParsed,
74 | };
75 | }
76 |
--------------------------------------------------------------------------------
/src/utils/test-file.ts:
--------------------------------------------------------------------------------
1 | import { ESLint, Linter } from "eslint";
2 | import { describe, expect, it } from "vitest";
3 |
4 | export function testFile(
5 | filename: string,
6 | rules: string[],
7 | errors: Partial[]
8 | ) {
9 | const lint = new ESLint({ overrideConfigFile: "eslint.config.test.js" });
10 |
11 | const expectLints = errors.reduce((acc, error) => {
12 | if (!error.messageId) return acc;
13 | if (!acc[error.messageId]) acc[error.messageId] = 0;
14 | acc[error.messageId]++;
15 | return acc;
16 | }, {} as Record);
17 |
18 | const expectedLintsString =
19 | Object.entries(expectLints)
20 | .map(([k, v]) => `${v} '${k}'`)
21 | .join(", ") || "no error";
22 |
23 | describe(filename, () => {
24 | it(`should lint ${expectedLintsString}`, async () => {
25 | const res = await lint.lintFiles([filename]);
26 | const messages = res[0].messages.filter(
27 | (m) => m.ruleId && rules.includes(m.ruleId.split("/").at(-1) as string)
28 | );
29 |
30 | expect(messages).toEqual(
31 | errors.map((lint) => {
32 | return expect.objectContaining(lint);
33 | })
34 | );
35 | if (errors.length === 0) {
36 | expect(messages).toStrictEqual([]);
37 | }
38 | });
39 | });
40 | }
41 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "ESNext",
4 | "moduleResolution": "Bundler",
5 | "target": "ESNext",
6 | "lib": ["ESNext", "DOM"],
7 | "esModuleInterop": true,
8 | "declaration": true,
9 | "outDir": "./dist",
10 | "allowJs": false,
11 | "jsx": "preserve",
12 | "strict": true,
13 | "baseUrl": "./",
14 | "rootDir": "./",
15 | "paths": {
16 | "@/*": ["./*"]
17 | }
18 | },
19 | "include": ["src/**/*", "scripts/**/*"],
20 | "exclude": ["node_modules", "dist"],
21 | "tsc-alias": {
22 | "resolveFullPaths": true
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/vitest.config.js:
--------------------------------------------------------------------------------
1 | import { configDefaults, defineConfig } from "vitest/config";
2 | import tsconfigPaths from "vite-tsconfig-paths";
3 |
4 | export default defineConfig({
5 | plugins: [tsconfigPaths()],
6 | test: {
7 | exclude: [...configDefaults.exclude, "**/*.test.ts"],
8 | },
9 | });
10 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@babel/code-frame@^7.0.0":
6 | version "7.24.2"
7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae"
8 | integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==
9 | dependencies:
10 | "@babel/highlight" "^7.24.2"
11 | picocolors "^1.0.0"
12 |
13 | "@babel/helper-validator-identifier@^7.24.5":
14 | version "7.24.5"
15 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz#918b1a7fa23056603506370089bd990d8720db62"
16 | integrity sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==
17 |
18 | "@babel/highlight@^7.24.2":
19 | version "7.24.5"
20 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.5.tgz#bc0613f98e1dd0720e99b2a9ee3760194a704b6e"
21 | integrity sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==
22 | dependencies:
23 | "@babel/helper-validator-identifier" "^7.24.5"
24 | chalk "^2.4.2"
25 | js-tokens "^4.0.0"
26 | picocolors "^1.0.0"
27 |
28 | "@esbuild/aix-ppc64@0.20.2":
29 | version "0.20.2"
30 | resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537"
31 | integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==
32 |
33 | "@esbuild/android-arm64@0.20.2":
34 | version "0.20.2"
35 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9"
36 | integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==
37 |
38 | "@esbuild/android-arm@0.20.2":
39 | version "0.20.2"
40 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995"
41 | integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==
42 |
43 | "@esbuild/android-x64@0.20.2":
44 | version "0.20.2"
45 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98"
46 | integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==
47 |
48 | "@esbuild/darwin-arm64@0.20.2":
49 | version "0.20.2"
50 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb"
51 | integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==
52 |
53 | "@esbuild/darwin-x64@0.20.2":
54 | version "0.20.2"
55 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0"
56 | integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==
57 |
58 | "@esbuild/freebsd-arm64@0.20.2":
59 | version "0.20.2"
60 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911"
61 | integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==
62 |
63 | "@esbuild/freebsd-x64@0.20.2":
64 | version "0.20.2"
65 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c"
66 | integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==
67 |
68 | "@esbuild/linux-arm64@0.20.2":
69 | version "0.20.2"
70 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5"
71 | integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==
72 |
73 | "@esbuild/linux-arm@0.20.2":
74 | version "0.20.2"
75 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c"
76 | integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==
77 |
78 | "@esbuild/linux-ia32@0.20.2":
79 | version "0.20.2"
80 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa"
81 | integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==
82 |
83 | "@esbuild/linux-loong64@0.20.2":
84 | version "0.20.2"
85 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5"
86 | integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==
87 |
88 | "@esbuild/linux-mips64el@0.20.2":
89 | version "0.20.2"
90 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa"
91 | integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==
92 |
93 | "@esbuild/linux-ppc64@0.20.2":
94 | version "0.20.2"
95 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20"
96 | integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==
97 |
98 | "@esbuild/linux-riscv64@0.20.2":
99 | version "0.20.2"
100 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300"
101 | integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==
102 |
103 | "@esbuild/linux-s390x@0.20.2":
104 | version "0.20.2"
105 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685"
106 | integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==
107 |
108 | "@esbuild/linux-x64@0.20.2":
109 | version "0.20.2"
110 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff"
111 | integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==
112 |
113 | "@esbuild/netbsd-x64@0.20.2":
114 | version "0.20.2"
115 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6"
116 | integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==
117 |
118 | "@esbuild/openbsd-x64@0.20.2":
119 | version "0.20.2"
120 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf"
121 | integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==
122 |
123 | "@esbuild/sunos-x64@0.20.2":
124 | version "0.20.2"
125 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f"
126 | integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==
127 |
128 | "@esbuild/win32-arm64@0.20.2":
129 | version "0.20.2"
130 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90"
131 | integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==
132 |
133 | "@esbuild/win32-ia32@0.20.2":
134 | version "0.20.2"
135 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23"
136 | integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==
137 |
138 | "@esbuild/win32-x64@0.20.2":
139 | version "0.20.2"
140 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc"
141 | integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==
142 |
143 | "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
144 | version "4.4.0"
145 | resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
146 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
147 | dependencies:
148 | eslint-visitor-keys "^3.3.0"
149 |
150 | "@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1":
151 | version "4.10.0"
152 | resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63"
153 | integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==
154 |
155 | "@eslint/eslintrc@^3.1.0":
156 | version "3.1.0"
157 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.1.0.tgz#dbd3482bfd91efa663cbe7aa1f506839868207b6"
158 | integrity sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==
159 | dependencies:
160 | ajv "^6.12.4"
161 | debug "^4.3.2"
162 | espree "^10.0.1"
163 | globals "^14.0.0"
164 | ignore "^5.2.0"
165 | import-fresh "^3.2.1"
166 | js-yaml "^4.1.0"
167 | minimatch "^3.1.2"
168 | strip-json-comments "^3.1.1"
169 |
170 | "@eslint/js@9.3.0":
171 | version "9.3.0"
172 | resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.3.0.tgz#2e8f65c9c55227abc4845b1513c69c32c679d8fe"
173 | integrity sha512-niBqk8iwv96+yuTwjM6bWg8ovzAPF9qkICsGtcoa5/dmqcEMfdwNAX7+/OHcJHc7wj7XqPxH98oAHytFYlw6Sw==
174 |
175 | "@humanwhocodes/config-array@^0.13.0":
176 | version "0.13.0"
177 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748"
178 | integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==
179 | dependencies:
180 | "@humanwhocodes/object-schema" "^2.0.3"
181 | debug "^4.3.1"
182 | minimatch "^3.0.5"
183 |
184 | "@humanwhocodes/module-importer@^1.0.1":
185 | version "1.0.1"
186 | resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
187 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
188 |
189 | "@humanwhocodes/object-schema@^2.0.3":
190 | version "2.0.3"
191 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3"
192 | integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==
193 |
194 | "@humanwhocodes/retry@^0.3.0":
195 | version "0.3.0"
196 | resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.0.tgz#6d86b8cb322660f03d3f0aa94b99bdd8e172d570"
197 | integrity sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==
198 |
199 | "@isaacs/cliui@^8.0.2":
200 | version "8.0.2"
201 | resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
202 | integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
203 | dependencies:
204 | string-width "^5.1.2"
205 | string-width-cjs "npm:string-width@^4.2.0"
206 | strip-ansi "^7.0.1"
207 | strip-ansi-cjs "npm:strip-ansi@^6.0.1"
208 | wrap-ansi "^8.1.0"
209 | wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
210 |
211 | "@jest/schemas@^29.6.3":
212 | version "29.6.3"
213 | resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03"
214 | integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==
215 | dependencies:
216 | "@sinclair/typebox" "^0.27.8"
217 |
218 | "@jridgewell/sourcemap-codec@^1.4.15":
219 | version "1.4.15"
220 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
221 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
222 |
223 | "@nodelib/fs.scandir@2.1.5":
224 | version "2.1.5"
225 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
226 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
227 | dependencies:
228 | "@nodelib/fs.stat" "2.0.5"
229 | run-parallel "^1.1.9"
230 |
231 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
232 | version "2.0.5"
233 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
234 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
235 |
236 | "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
237 | version "1.2.8"
238 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
239 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
240 | dependencies:
241 | "@nodelib/fs.scandir" "2.1.5"
242 | fastq "^1.6.0"
243 |
244 | "@pkgjs/parseargs@^0.11.0":
245 | version "0.11.0"
246 | resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
247 | integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
248 |
249 | "@rollup/rollup-android-arm-eabi@4.17.2":
250 | version "4.17.2"
251 | resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz#1a32112822660ee104c5dd3a7c595e26100d4c2d"
252 | integrity sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==
253 |
254 | "@rollup/rollup-android-arm64@4.17.2":
255 | version "4.17.2"
256 | resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.17.2.tgz#5aeef206d65ff4db423f3a93f71af91b28662c5b"
257 | integrity sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==
258 |
259 | "@rollup/rollup-darwin-arm64@4.17.2":
260 | version "4.17.2"
261 | resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.17.2.tgz#6b66aaf003c70454c292cd5f0236ebdc6ffbdf1a"
262 | integrity sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==
263 |
264 | "@rollup/rollup-darwin-x64@4.17.2":
265 | version "4.17.2"
266 | resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.17.2.tgz#f64fc51ed12b19f883131ccbcea59fc68cbd6c0b"
267 | integrity sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==
268 |
269 | "@rollup/rollup-linux-arm-gnueabihf@4.17.2":
270 | version "4.17.2"
271 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.17.2.tgz#1a7641111be67c10111f7122d1e375d1226cbf14"
272 | integrity sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==
273 |
274 | "@rollup/rollup-linux-arm-musleabihf@4.17.2":
275 | version "4.17.2"
276 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.17.2.tgz#c93fd632923e0fee25aacd2ae414288d0b7455bb"
277 | integrity sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==
278 |
279 | "@rollup/rollup-linux-arm64-gnu@4.17.2":
280 | version "4.17.2"
281 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.17.2.tgz#fa531425dd21d058a630947527b4612d9d0b4a4a"
282 | integrity sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==
283 |
284 | "@rollup/rollup-linux-arm64-musl@4.17.2":
285 | version "4.17.2"
286 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.17.2.tgz#8acc16f095ceea5854caf7b07e73f7d1802ac5af"
287 | integrity sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==
288 |
289 | "@rollup/rollup-linux-powerpc64le-gnu@4.17.2":
290 | version "4.17.2"
291 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.17.2.tgz#94e69a8499b5cf368911b83a44bb230782aeb571"
292 | integrity sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==
293 |
294 | "@rollup/rollup-linux-riscv64-gnu@4.17.2":
295 | version "4.17.2"
296 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.17.2.tgz#7ef1c781c7e59e85a6ce261cc95d7f1e0b56db0f"
297 | integrity sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==
298 |
299 | "@rollup/rollup-linux-s390x-gnu@4.17.2":
300 | version "4.17.2"
301 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.17.2.tgz#f15775841c3232fca9b78cd25a7a0512c694b354"
302 | integrity sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==
303 |
304 | "@rollup/rollup-linux-x64-gnu@4.17.2":
305 | version "4.17.2"
306 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.17.2.tgz#b521d271798d037ad70c9f85dd97d25f8a52e811"
307 | integrity sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==
308 |
309 | "@rollup/rollup-linux-x64-musl@4.17.2":
310 | version "4.17.2"
311 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.17.2.tgz#9254019cc4baac35800991315d133cc9fd1bf385"
312 | integrity sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==
313 |
314 | "@rollup/rollup-win32-arm64-msvc@4.17.2":
315 | version "4.17.2"
316 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.17.2.tgz#27f65a89f6f52ee9426ec11e3571038e4671790f"
317 | integrity sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==
318 |
319 | "@rollup/rollup-win32-ia32-msvc@4.17.2":
320 | version "4.17.2"
321 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.17.2.tgz#a2fbf8246ed0bb014f078ca34ae6b377a90cb411"
322 | integrity sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==
323 |
324 | "@rollup/rollup-win32-x64-msvc@4.17.2":
325 | version "4.17.2"
326 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.17.2.tgz#5a2d08b81e8064b34242d5cc9973ef8dd1e60503"
327 | integrity sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==
328 |
329 | "@sinclair/typebox@^0.27.8":
330 | version "0.27.8"
331 | resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e"
332 | integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==
333 |
334 | "@types/eslint@^9.6.1":
335 | version "9.6.1"
336 | resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.1.tgz#d5795ad732ce81715f27f75da913004a56751584"
337 | integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==
338 | dependencies:
339 | "@types/estree" "*"
340 | "@types/json-schema" "*"
341 |
342 | "@types/espree@^10.1.0":
343 | version "10.1.0"
344 | resolved "https://registry.yarnpkg.com/@types/espree/-/espree-10.1.0.tgz#812ceee20384c4d9ea42f1445e4764a647431f17"
345 | integrity sha512-uPQZdoUWWMuO6WS8/dwX1stZH/vOBa/wAniGnYEFI0IuU9RmLx6PLmo+VGfNOlbRc5I7hBsQc8H0zcdVI37kxg==
346 | dependencies:
347 | acorn "^8.12.0"
348 | eslint-visitor-keys "^4.0.0"
349 |
350 | "@types/estree@*", "@types/estree@1.0.5", "@types/estree@^1.0.0":
351 | version "1.0.5"
352 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4"
353 | integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
354 |
355 | "@types/json-schema@*", "@types/json-schema@^7.0.9":
356 | version "7.0.15"
357 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
358 | integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
359 |
360 | "@types/node@^20.12.12":
361 | version "20.12.12"
362 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.12.tgz#7cbecdf902085cec634fdb362172dfe12b8f2050"
363 | integrity sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==
364 | dependencies:
365 | undici-types "~5.26.4"
366 |
367 | "@types/prop-types@*":
368 | version "15.7.13"
369 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.13.tgz#2af91918ee12d9d32914feb13f5326658461b451"
370 | integrity sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==
371 |
372 | "@types/react@^18.3.12":
373 | version "18.3.12"
374 | resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.12.tgz#99419f182ccd69151813b7ee24b792fe08774f60"
375 | integrity sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==
376 | dependencies:
377 | "@types/prop-types" "*"
378 | csstype "^3.0.2"
379 |
380 | "@types/semver@^7.3.12":
381 | version "7.5.8"
382 | resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e"
383 | integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==
384 |
385 | "@typescript-eslint/eslint-plugin@7.9.0":
386 | version "7.9.0"
387 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.9.0.tgz#093b96fc4e342226e65d5f18f9c87081e0b04a31"
388 | integrity sha512-6e+X0X3sFe/G/54aC3jt0txuMTURqLyekmEHViqyA2VnxhLMpvA6nqmcjIy+Cr9tLDHPssA74BP5Mx9HQIxBEA==
389 | dependencies:
390 | "@eslint-community/regexpp" "^4.10.0"
391 | "@typescript-eslint/scope-manager" "7.9.0"
392 | "@typescript-eslint/type-utils" "7.9.0"
393 | "@typescript-eslint/utils" "7.9.0"
394 | "@typescript-eslint/visitor-keys" "7.9.0"
395 | graphemer "^1.4.0"
396 | ignore "^5.3.1"
397 | natural-compare "^1.4.0"
398 | ts-api-utils "^1.3.0"
399 |
400 | "@typescript-eslint/parser@7.9.0", "@typescript-eslint/parser@^7.9.0":
401 | version "7.9.0"
402 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.9.0.tgz#fb3ba01b75e0e65cb78037a360961b00301f6c70"
403 | integrity sha512-qHMJfkL5qvgQB2aLvhUSXxbK7OLnDkwPzFalg458pxQgfxKDfT1ZDbHQM/I6mDIf/svlMkj21kzKuQ2ixJlatQ==
404 | dependencies:
405 | "@typescript-eslint/scope-manager" "7.9.0"
406 | "@typescript-eslint/types" "7.9.0"
407 | "@typescript-eslint/typescript-estree" "7.9.0"
408 | "@typescript-eslint/visitor-keys" "7.9.0"
409 | debug "^4.3.4"
410 |
411 | "@typescript-eslint/rule-tester@^7.9.0":
412 | version "7.9.0"
413 | resolved "https://registry.yarnpkg.com/@typescript-eslint/rule-tester/-/rule-tester-7.9.0.tgz#cc00d93cdb4ac14a9d57c1826eb4eb2002cd58b1"
414 | integrity sha512-Oz5IB1kCUToVS0Nvkpgx5Vb89J+7iSsBAWKvfxQFWmcYpiqdStO6eRI2cAuRNrqo6uGh2sNsAji9hcv/KrHwMQ==
415 | dependencies:
416 | "@typescript-eslint/typescript-estree" "7.9.0"
417 | "@typescript-eslint/utils" "7.9.0"
418 | ajv "^6.12.6"
419 | lodash.merge "4.6.2"
420 | semver "^7.6.0"
421 |
422 | "@typescript-eslint/scope-manager@5.62.0":
423 | version "5.62.0"
424 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c"
425 | integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==
426 | dependencies:
427 | "@typescript-eslint/types" "5.62.0"
428 | "@typescript-eslint/visitor-keys" "5.62.0"
429 |
430 | "@typescript-eslint/scope-manager@7.9.0":
431 | version "7.9.0"
432 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.9.0.tgz#1dd3e63a4411db356a9d040e75864851b5f2619b"
433 | integrity sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==
434 | dependencies:
435 | "@typescript-eslint/types" "7.9.0"
436 | "@typescript-eslint/visitor-keys" "7.9.0"
437 |
438 | "@typescript-eslint/type-utils@7.9.0":
439 | version "7.9.0"
440 | resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.9.0.tgz#f523262e1b66ca65540b7a65a1222db52e0a90c9"
441 | integrity sha512-6Qy8dfut0PFrFRAZsGzuLoM4hre4gjzWJB6sUvdunCYZsYemTkzZNwF1rnGea326PHPT3zn5Lmg32M/xfJfByA==
442 | dependencies:
443 | "@typescript-eslint/typescript-estree" "7.9.0"
444 | "@typescript-eslint/utils" "7.9.0"
445 | debug "^4.3.4"
446 | ts-api-utils "^1.3.0"
447 |
448 | "@typescript-eslint/types@5.62.0":
449 | version "5.62.0"
450 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f"
451 | integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==
452 |
453 | "@typescript-eslint/types@7.9.0", "@typescript-eslint/types@^7.9.0":
454 | version "7.9.0"
455 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.9.0.tgz#b58e485e4bfba055659c7e683ad4f5f0821ae2ec"
456 | integrity sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==
457 |
458 | "@typescript-eslint/typescript-estree@5.62.0":
459 | version "5.62.0"
460 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b"
461 | integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==
462 | dependencies:
463 | "@typescript-eslint/types" "5.62.0"
464 | "@typescript-eslint/visitor-keys" "5.62.0"
465 | debug "^4.3.4"
466 | globby "^11.1.0"
467 | is-glob "^4.0.3"
468 | semver "^7.3.7"
469 | tsutils "^3.21.0"
470 |
471 | "@typescript-eslint/typescript-estree@7.9.0":
472 | version "7.9.0"
473 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.9.0.tgz#3395e27656060dc313a6b406c3a298b729685e07"
474 | integrity sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==
475 | dependencies:
476 | "@typescript-eslint/types" "7.9.0"
477 | "@typescript-eslint/visitor-keys" "7.9.0"
478 | debug "^4.3.4"
479 | globby "^11.1.0"
480 | is-glob "^4.0.3"
481 | minimatch "^9.0.4"
482 | semver "^7.6.0"
483 | ts-api-utils "^1.3.0"
484 |
485 | "@typescript-eslint/utils@7.9.0", "@typescript-eslint/utils@^7.9.0":
486 | version "7.9.0"
487 | resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.9.0.tgz#1b96a34eefdca1c820cb1bbc2751d848b4540899"
488 | integrity sha512-5KVRQCzZajmT4Ep+NEgjXCvjuypVvYHUW7RHlXzNPuak2oWpVoD1jf5xCP0dPAuNIchjC7uQyvbdaSTFaLqSdA==
489 | dependencies:
490 | "@eslint-community/eslint-utils" "^4.4.0"
491 | "@typescript-eslint/scope-manager" "7.9.0"
492 | "@typescript-eslint/types" "7.9.0"
493 | "@typescript-eslint/typescript-estree" "7.9.0"
494 |
495 | "@typescript-eslint/utils@^5.38.1":
496 | version "5.62.0"
497 | resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86"
498 | integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==
499 | dependencies:
500 | "@eslint-community/eslint-utils" "^4.2.0"
501 | "@types/json-schema" "^7.0.9"
502 | "@types/semver" "^7.3.12"
503 | "@typescript-eslint/scope-manager" "5.62.0"
504 | "@typescript-eslint/types" "5.62.0"
505 | "@typescript-eslint/typescript-estree" "5.62.0"
506 | eslint-scope "^5.1.1"
507 | semver "^7.3.7"
508 |
509 | "@typescript-eslint/visitor-keys@5.62.0":
510 | version "5.62.0"
511 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e"
512 | integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==
513 | dependencies:
514 | "@typescript-eslint/types" "5.62.0"
515 | eslint-visitor-keys "^3.3.0"
516 |
517 | "@typescript-eslint/visitor-keys@7.9.0":
518 | version "7.9.0"
519 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.9.0.tgz#82162656e339c3def02895f5c8546f6888d9b9ea"
520 | integrity sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==
521 | dependencies:
522 | "@typescript-eslint/types" "7.9.0"
523 | eslint-visitor-keys "^3.4.3"
524 |
525 | "@vitest/expect@1.6.0":
526 | version "1.6.0"
527 | resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-1.6.0.tgz#0b3ba0914f738508464983f4d811bc122b51fb30"
528 | integrity sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==
529 | dependencies:
530 | "@vitest/spy" "1.6.0"
531 | "@vitest/utils" "1.6.0"
532 | chai "^4.3.10"
533 |
534 | "@vitest/runner@1.6.0":
535 | version "1.6.0"
536 | resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-1.6.0.tgz#a6de49a96cb33b0e3ba0d9064a3e8d6ce2f08825"
537 | integrity sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==
538 | dependencies:
539 | "@vitest/utils" "1.6.0"
540 | p-limit "^5.0.0"
541 | pathe "^1.1.1"
542 |
543 | "@vitest/snapshot@1.6.0":
544 | version "1.6.0"
545 | resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-1.6.0.tgz#deb7e4498a5299c1198136f56e6e0f692e6af470"
546 | integrity sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==
547 | dependencies:
548 | magic-string "^0.30.5"
549 | pathe "^1.1.1"
550 | pretty-format "^29.7.0"
551 |
552 | "@vitest/spy@1.6.0":
553 | version "1.6.0"
554 | resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-1.6.0.tgz#362cbd42ccdb03f1613798fde99799649516906d"
555 | integrity sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==
556 | dependencies:
557 | tinyspy "^2.2.0"
558 |
559 | "@vitest/utils@1.6.0":
560 | version "1.6.0"
561 | resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-1.6.0.tgz#5c5675ca7d6f546a7b4337de9ae882e6c57896a1"
562 | integrity sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==
563 | dependencies:
564 | diff-sequences "^29.6.3"
565 | estree-walker "^3.0.3"
566 | loupe "^2.3.7"
567 | pretty-format "^29.7.0"
568 |
569 | acorn-jsx@^5.3.2:
570 | version "5.3.2"
571 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
572 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
573 |
574 | acorn-walk@^8.3.2:
575 | version "8.3.2"
576 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa"
577 | integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==
578 |
579 | acorn@^8.11.3:
580 | version "8.11.3"
581 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
582 | integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
583 |
584 | acorn@^8.12.0:
585 | version "8.12.1"
586 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248"
587 | integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==
588 |
589 | ajv@^6.12.4, ajv@^6.12.6:
590 | version "6.12.6"
591 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
592 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
593 | dependencies:
594 | fast-deep-equal "^3.1.1"
595 | fast-json-stable-stringify "^2.0.0"
596 | json-schema-traverse "^0.4.1"
597 | uri-js "^4.2.2"
598 |
599 | ajv@^8.11.2:
600 | version "8.13.0"
601 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.13.0.tgz#a3939eaec9fb80d217ddf0c3376948c023f28c91"
602 | integrity sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==
603 | dependencies:
604 | fast-deep-equal "^3.1.3"
605 | json-schema-traverse "^1.0.0"
606 | require-from-string "^2.0.2"
607 | uri-js "^4.4.1"
608 |
609 | ansi-regex@^5.0.1:
610 | version "5.0.1"
611 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
612 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
613 |
614 | ansi-regex@^6.0.1:
615 | version "6.1.0"
616 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654"
617 | integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==
618 |
619 | ansi-styles@^3.2.1:
620 | version "3.2.1"
621 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
622 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
623 | dependencies:
624 | color-convert "^1.9.0"
625 |
626 | ansi-styles@^4.0.0, ansi-styles@^4.1.0:
627 | version "4.3.0"
628 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
629 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
630 | dependencies:
631 | color-convert "^2.0.1"
632 |
633 | ansi-styles@^5.0.0:
634 | version "5.2.0"
635 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
636 | integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
637 |
638 | ansi-styles@^6.1.0:
639 | version "6.2.1"
640 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
641 | integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
642 |
643 | anymatch@~3.1.2:
644 | version "3.1.3"
645 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
646 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
647 | dependencies:
648 | normalize-path "^3.0.0"
649 | picomatch "^2.0.4"
650 |
651 | argparse@^2.0.1:
652 | version "2.0.1"
653 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
654 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
655 |
656 | array-union@^2.1.0:
657 | version "2.1.0"
658 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
659 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
660 |
661 | assertion-error@^1.1.0:
662 | version "1.1.0"
663 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"
664 | integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==
665 |
666 | balanced-match@^1.0.0:
667 | version "1.0.2"
668 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
669 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
670 |
671 | binary-extensions@^2.0.0:
672 | version "2.3.0"
673 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522"
674 | integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==
675 |
676 | boolean@^3.2.0:
677 | version "3.2.0"
678 | resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b"
679 | integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==
680 |
681 | brace-expansion@^1.1.7:
682 | version "1.1.11"
683 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
684 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
685 | dependencies:
686 | balanced-match "^1.0.0"
687 | concat-map "0.0.1"
688 |
689 | brace-expansion@^2.0.1:
690 | version "2.0.1"
691 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
692 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
693 | dependencies:
694 | balanced-match "^1.0.0"
695 |
696 | braces@^3.0.2:
697 | version "3.0.2"
698 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
699 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
700 | dependencies:
701 | fill-range "^7.0.1"
702 |
703 | braces@~3.0.2:
704 | version "3.0.3"
705 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
706 | integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
707 | dependencies:
708 | fill-range "^7.1.1"
709 |
710 | cac@^6.7.14:
711 | version "6.7.14"
712 | resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959"
713 | integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==
714 |
715 | callsites@^3.0.0:
716 | version "3.1.0"
717 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
718 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
719 |
720 | chai@^4.3.10:
721 | version "4.4.1"
722 | resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1"
723 | integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==
724 | dependencies:
725 | assertion-error "^1.1.0"
726 | check-error "^1.0.3"
727 | deep-eql "^4.1.3"
728 | get-func-name "^2.0.2"
729 | loupe "^2.3.6"
730 | pathval "^1.1.1"
731 | type-detect "^4.0.8"
732 |
733 | chalk@^2.4.2:
734 | version "2.4.2"
735 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
736 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
737 | dependencies:
738 | ansi-styles "^3.2.1"
739 | escape-string-regexp "^1.0.5"
740 | supports-color "^5.3.0"
741 |
742 | chalk@^4.0.0:
743 | version "4.1.2"
744 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
745 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
746 | dependencies:
747 | ansi-styles "^4.1.0"
748 | supports-color "^7.1.0"
749 |
750 | check-error@^1.0.3:
751 | version "1.0.3"
752 | resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694"
753 | integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==
754 | dependencies:
755 | get-func-name "^2.0.2"
756 |
757 | chokidar@^3.5.3:
758 | version "3.6.0"
759 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
760 | integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
761 | dependencies:
762 | anymatch "~3.1.2"
763 | braces "~3.0.2"
764 | glob-parent "~5.1.2"
765 | is-binary-path "~2.1.0"
766 | is-glob "~4.0.1"
767 | normalize-path "~3.0.0"
768 | readdirp "~3.6.0"
769 | optionalDependencies:
770 | fsevents "~2.3.2"
771 |
772 | color-convert@^1.9.0:
773 | version "1.9.3"
774 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
775 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
776 | dependencies:
777 | color-name "1.1.3"
778 |
779 | color-convert@^2.0.1:
780 | version "2.0.1"
781 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
782 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
783 | dependencies:
784 | color-name "~1.1.4"
785 |
786 | color-name@1.1.3:
787 | version "1.1.3"
788 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
789 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
790 |
791 | color-name@~1.1.4:
792 | version "1.1.4"
793 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
794 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
795 |
796 | commander@^10.0.0:
797 | version "10.0.1"
798 | resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06"
799 | integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==
800 |
801 | commander@^9.0.0:
802 | version "9.5.0"
803 | resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30"
804 | integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==
805 |
806 | concat-map@0.0.1:
807 | version "0.0.1"
808 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
809 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
810 |
811 | confbox@^0.1.7:
812 | version "0.1.7"
813 | resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.7.tgz#ccfc0a2bcae36a84838e83a3b7f770fb17d6c579"
814 | integrity sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==
815 |
816 | cosmiconfig@^8.0.0:
817 | version "8.3.6"
818 | resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3"
819 | integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==
820 | dependencies:
821 | import-fresh "^3.3.0"
822 | js-yaml "^4.1.0"
823 | parse-json "^5.2.0"
824 | path-type "^4.0.0"
825 |
826 | cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
827 | version "7.0.3"
828 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
829 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
830 | dependencies:
831 | path-key "^3.1.0"
832 | shebang-command "^2.0.0"
833 | which "^2.0.1"
834 |
835 | csstype@^3.0.2:
836 | version "3.1.3"
837 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
838 | integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
839 |
840 | debug@^4.1.1:
841 | version "4.3.5"
842 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e"
843 | integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==
844 | dependencies:
845 | ms "2.1.2"
846 |
847 | debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
848 | version "4.3.4"
849 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
850 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
851 | dependencies:
852 | ms "2.1.2"
853 |
854 | deep-eql@^4.1.3:
855 | version "4.1.3"
856 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d"
857 | integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==
858 | dependencies:
859 | type-detect "^4.0.0"
860 |
861 | deep-is@^0.1.3:
862 | version "0.1.4"
863 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
864 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
865 |
866 | deepmerge@^4.2.2:
867 | version "4.3.1"
868 | resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
869 | integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
870 |
871 | diff-sequences@^29.6.3:
872 | version "29.6.3"
873 | resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921"
874 | integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==
875 |
876 | dir-glob@^3.0.1:
877 | version "3.0.1"
878 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
879 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
880 | dependencies:
881 | path-type "^4.0.0"
882 |
883 | dot-prop@^7.2.0:
884 | version "7.2.0"
885 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-7.2.0.tgz#468172a3529779814d21a779c1ba2f6d76609809"
886 | integrity sha512-Ol/IPXUARn9CSbkrdV4VJo7uCy1I3VuSiWCaFSg+8BdUOzF9n3jefIpcgAydvUZbTdEBZs2vEiTiS9m61ssiDA==
887 | dependencies:
888 | type-fest "^2.11.2"
889 |
890 | eastasianwidth@^0.2.0:
891 | version "0.2.0"
892 | resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
893 | integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
894 |
895 | emoji-regex@^8.0.0:
896 | version "8.0.0"
897 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
898 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
899 |
900 | emoji-regex@^9.2.2:
901 | version "9.2.2"
902 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
903 | integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
904 |
905 | error-ex@^1.3.1:
906 | version "1.3.2"
907 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
908 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
909 | dependencies:
910 | is-arrayish "^0.2.1"
911 |
912 | esbuild@^0.20.1:
913 | version "0.20.2"
914 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.20.2.tgz#9d6b2386561766ee6b5a55196c6d766d28c87ea1"
915 | integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==
916 | optionalDependencies:
917 | "@esbuild/aix-ppc64" "0.20.2"
918 | "@esbuild/android-arm" "0.20.2"
919 | "@esbuild/android-arm64" "0.20.2"
920 | "@esbuild/android-x64" "0.20.2"
921 | "@esbuild/darwin-arm64" "0.20.2"
922 | "@esbuild/darwin-x64" "0.20.2"
923 | "@esbuild/freebsd-arm64" "0.20.2"
924 | "@esbuild/freebsd-x64" "0.20.2"
925 | "@esbuild/linux-arm" "0.20.2"
926 | "@esbuild/linux-arm64" "0.20.2"
927 | "@esbuild/linux-ia32" "0.20.2"
928 | "@esbuild/linux-loong64" "0.20.2"
929 | "@esbuild/linux-mips64el" "0.20.2"
930 | "@esbuild/linux-ppc64" "0.20.2"
931 | "@esbuild/linux-riscv64" "0.20.2"
932 | "@esbuild/linux-s390x" "0.20.2"
933 | "@esbuild/linux-x64" "0.20.2"
934 | "@esbuild/netbsd-x64" "0.20.2"
935 | "@esbuild/openbsd-x64" "0.20.2"
936 | "@esbuild/sunos-x64" "0.20.2"
937 | "@esbuild/win32-arm64" "0.20.2"
938 | "@esbuild/win32-ia32" "0.20.2"
939 | "@esbuild/win32-x64" "0.20.2"
940 |
941 | escape-string-regexp@^1.0.5:
942 | version "1.0.5"
943 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
944 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
945 |
946 | escape-string-regexp@^4.0.0:
947 | version "4.0.0"
948 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
949 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
950 |
951 | eslint-doc-generator@^1.7.1:
952 | version "1.7.1"
953 | resolved "https://registry.yarnpkg.com/eslint-doc-generator/-/eslint-doc-generator-1.7.1.tgz#c758c802a23f9a21b2134d9c3f57d5e5c13c3aea"
954 | integrity sha512-i1Zjl+Xcy712SZhbceCeMVaIdhbFqY27i8d7f9gyb9P/6AQNnPA0VCWynAFVGYa0hpeR5kwUI09+GBELgC2nnA==
955 | dependencies:
956 | "@typescript-eslint/utils" "^5.38.1"
957 | ajv "^8.11.2"
958 | boolean "^3.2.0"
959 | commander "^10.0.0"
960 | cosmiconfig "^8.0.0"
961 | deepmerge "^4.2.2"
962 | dot-prop "^7.2.0"
963 | jest-diff "^29.2.1"
964 | json-schema-traverse "^1.0.0"
965 | markdown-table "^3.0.3"
966 | no-case "^3.0.4"
967 | type-fest "^3.0.0"
968 |
969 | eslint-scope@^5.1.1:
970 | version "5.1.1"
971 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
972 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
973 | dependencies:
974 | esrecurse "^4.3.0"
975 | estraverse "^4.1.1"
976 |
977 | eslint-scope@^8.0.1:
978 | version "8.0.1"
979 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.0.1.tgz#a9601e4b81a0b9171657c343fb13111688963cfc"
980 | integrity sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==
981 | dependencies:
982 | esrecurse "^4.3.0"
983 | estraverse "^5.2.0"
984 |
985 | eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.3:
986 | version "3.4.3"
987 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
988 | integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
989 |
990 | eslint-visitor-keys@^4.0.0:
991 | version "4.0.0"
992 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz#e3adc021aa038a2a8e0b2f8b0ce8f66b9483b1fb"
993 | integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==
994 |
995 | eslint@^9.3.0:
996 | version "9.3.0"
997 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.3.0.tgz#36a96db84592618d6ed9074d677e92f4e58c08b9"
998 | integrity sha512-5Iv4CsZW030lpUqHBapdPo3MJetAPtejVW8B84GIcIIv8+ohFaddXsrn1Gn8uD9ijDb+kcYKFUVmC8qG8B2ORQ==
999 | dependencies:
1000 | "@eslint-community/eslint-utils" "^4.2.0"
1001 | "@eslint-community/regexpp" "^4.6.1"
1002 | "@eslint/eslintrc" "^3.1.0"
1003 | "@eslint/js" "9.3.0"
1004 | "@humanwhocodes/config-array" "^0.13.0"
1005 | "@humanwhocodes/module-importer" "^1.0.1"
1006 | "@humanwhocodes/retry" "^0.3.0"
1007 | "@nodelib/fs.walk" "^1.2.8"
1008 | ajv "^6.12.4"
1009 | chalk "^4.0.0"
1010 | cross-spawn "^7.0.2"
1011 | debug "^4.3.2"
1012 | escape-string-regexp "^4.0.0"
1013 | eslint-scope "^8.0.1"
1014 | eslint-visitor-keys "^4.0.0"
1015 | espree "^10.0.1"
1016 | esquery "^1.4.2"
1017 | esutils "^2.0.2"
1018 | fast-deep-equal "^3.1.3"
1019 | file-entry-cache "^8.0.0"
1020 | find-up "^5.0.0"
1021 | glob-parent "^6.0.2"
1022 | ignore "^5.2.0"
1023 | imurmurhash "^0.1.4"
1024 | is-glob "^4.0.0"
1025 | is-path-inside "^3.0.3"
1026 | json-stable-stringify-without-jsonify "^1.0.1"
1027 | levn "^0.4.1"
1028 | lodash.merge "^4.6.2"
1029 | minimatch "^3.1.2"
1030 | natural-compare "^1.4.0"
1031 | optionator "^0.9.3"
1032 | strip-ansi "^6.0.1"
1033 | text-table "^0.2.0"
1034 |
1035 | espree@^10.0.1:
1036 | version "10.0.1"
1037 | resolved "https://registry.yarnpkg.com/espree/-/espree-10.0.1.tgz#600e60404157412751ba4a6f3a2ee1a42433139f"
1038 | integrity sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==
1039 | dependencies:
1040 | acorn "^8.11.3"
1041 | acorn-jsx "^5.3.2"
1042 | eslint-visitor-keys "^4.0.0"
1043 |
1044 | espree@^10.1.0:
1045 | version "10.1.0"
1046 | resolved "https://registry.yarnpkg.com/espree/-/espree-10.1.0.tgz#8788dae611574c0f070691f522e4116c5a11fc56"
1047 | integrity sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==
1048 | dependencies:
1049 | acorn "^8.12.0"
1050 | acorn-jsx "^5.3.2"
1051 | eslint-visitor-keys "^4.0.0"
1052 |
1053 | esquery@^1.4.2:
1054 | version "1.5.0"
1055 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b"
1056 | integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==
1057 | dependencies:
1058 | estraverse "^5.1.0"
1059 |
1060 | esrecurse@^4.3.0:
1061 | version "4.3.0"
1062 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
1063 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
1064 | dependencies:
1065 | estraverse "^5.2.0"
1066 |
1067 | estraverse@^4.1.1:
1068 | version "4.3.0"
1069 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
1070 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
1071 |
1072 | estraverse@^5.1.0, estraverse@^5.2.0:
1073 | version "5.3.0"
1074 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
1075 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
1076 |
1077 | estree-walker@^3.0.3:
1078 | version "3.0.3"
1079 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d"
1080 | integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==
1081 | dependencies:
1082 | "@types/estree" "^1.0.0"
1083 |
1084 | esutils@^2.0.2:
1085 | version "2.0.3"
1086 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
1087 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
1088 |
1089 | execa@^8.0.1:
1090 | version "8.0.1"
1091 | resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c"
1092 | integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==
1093 | dependencies:
1094 | cross-spawn "^7.0.3"
1095 | get-stream "^8.0.1"
1096 | human-signals "^5.0.0"
1097 | is-stream "^3.0.0"
1098 | merge-stream "^2.0.0"
1099 | npm-run-path "^5.1.0"
1100 | onetime "^6.0.0"
1101 | signal-exit "^4.1.0"
1102 | strip-final-newline "^3.0.0"
1103 |
1104 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
1105 | version "3.1.3"
1106 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
1107 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
1108 |
1109 | fast-glob@^3.2.9:
1110 | version "3.3.2"
1111 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
1112 | integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
1113 | dependencies:
1114 | "@nodelib/fs.stat" "^2.0.2"
1115 | "@nodelib/fs.walk" "^1.2.3"
1116 | glob-parent "^5.1.2"
1117 | merge2 "^1.3.0"
1118 | micromatch "^4.0.4"
1119 |
1120 | fast-json-stable-stringify@^2.0.0:
1121 | version "2.1.0"
1122 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
1123 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
1124 |
1125 | fast-levenshtein@^2.0.6:
1126 | version "2.0.6"
1127 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
1128 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
1129 |
1130 | fastq@^1.6.0:
1131 | version "1.17.1"
1132 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47"
1133 | integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==
1134 | dependencies:
1135 | reusify "^1.0.4"
1136 |
1137 | file-entry-cache@^8.0.0:
1138 | version "8.0.0"
1139 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f"
1140 | integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==
1141 | dependencies:
1142 | flat-cache "^4.0.0"
1143 |
1144 | fill-range@^7.0.1:
1145 | version "7.0.1"
1146 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
1147 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
1148 | dependencies:
1149 | to-regex-range "^5.0.1"
1150 |
1151 | fill-range@^7.1.1:
1152 | version "7.1.1"
1153 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
1154 | integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
1155 | dependencies:
1156 | to-regex-range "^5.0.1"
1157 |
1158 | find-up@^5.0.0:
1159 | version "5.0.0"
1160 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
1161 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
1162 | dependencies:
1163 | locate-path "^6.0.0"
1164 | path-exists "^4.0.0"
1165 |
1166 | flat-cache@^4.0.0:
1167 | version "4.0.1"
1168 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c"
1169 | integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==
1170 | dependencies:
1171 | flatted "^3.2.9"
1172 | keyv "^4.5.4"
1173 |
1174 | flatted@^3.2.9:
1175 | version "3.3.1"
1176 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a"
1177 | integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==
1178 |
1179 | foreground-child@^3.1.0:
1180 | version "3.3.0"
1181 | resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77"
1182 | integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==
1183 | dependencies:
1184 | cross-spawn "^7.0.0"
1185 | signal-exit "^4.0.1"
1186 |
1187 | fsevents@~2.3.2, fsevents@~2.3.3:
1188 | version "2.3.3"
1189 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
1190 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
1191 |
1192 | get-func-name@^2.0.1, get-func-name@^2.0.2:
1193 | version "2.0.2"
1194 | resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41"
1195 | integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==
1196 |
1197 | get-stream@^8.0.1:
1198 | version "8.0.1"
1199 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2"
1200 | integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==
1201 |
1202 | glob-parent@^5.1.2, glob-parent@~5.1.2:
1203 | version "5.1.2"
1204 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
1205 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
1206 | dependencies:
1207 | is-glob "^4.0.1"
1208 |
1209 | glob-parent@^6.0.2:
1210 | version "6.0.2"
1211 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
1212 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
1213 | dependencies:
1214 | is-glob "^4.0.3"
1215 |
1216 | glob@^11.0.0:
1217 | version "11.0.0"
1218 | resolved "https://registry.yarnpkg.com/glob/-/glob-11.0.0.tgz#6031df0d7b65eaa1ccb9b29b5ced16cea658e77e"
1219 | integrity sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==
1220 | dependencies:
1221 | foreground-child "^3.1.0"
1222 | jackspeak "^4.0.1"
1223 | minimatch "^10.0.0"
1224 | minipass "^7.1.2"
1225 | package-json-from-dist "^1.0.0"
1226 | path-scurry "^2.0.0"
1227 |
1228 | globals@^14.0.0:
1229 | version "14.0.0"
1230 | resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e"
1231 | integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==
1232 |
1233 | globby@^11.0.4, globby@^11.1.0:
1234 | version "11.1.0"
1235 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
1236 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
1237 | dependencies:
1238 | array-union "^2.1.0"
1239 | dir-glob "^3.0.1"
1240 | fast-glob "^3.2.9"
1241 | ignore "^5.2.0"
1242 | merge2 "^1.4.1"
1243 | slash "^3.0.0"
1244 |
1245 | globrex@^0.1.2:
1246 | version "0.1.2"
1247 | resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098"
1248 | integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==
1249 |
1250 | graphemer@^1.4.0:
1251 | version "1.4.0"
1252 | resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
1253 | integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
1254 |
1255 | has-flag@^3.0.0:
1256 | version "3.0.0"
1257 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
1258 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
1259 |
1260 | has-flag@^4.0.0:
1261 | version "4.0.0"
1262 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
1263 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
1264 |
1265 | human-signals@^5.0.0:
1266 | version "5.0.0"
1267 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28"
1268 | integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==
1269 |
1270 | ignore@^5.2.0, ignore@^5.3.1:
1271 | version "5.3.1"
1272 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef"
1273 | integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==
1274 |
1275 | import-fresh@^3.2.1, import-fresh@^3.3.0:
1276 | version "3.3.0"
1277 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
1278 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
1279 | dependencies:
1280 | parent-module "^1.0.0"
1281 | resolve-from "^4.0.0"
1282 |
1283 | imurmurhash@^0.1.4:
1284 | version "0.1.4"
1285 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
1286 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
1287 |
1288 | is-arrayish@^0.2.1:
1289 | version "0.2.1"
1290 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
1291 | integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
1292 |
1293 | is-binary-path@~2.1.0:
1294 | version "2.1.0"
1295 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
1296 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
1297 | dependencies:
1298 | binary-extensions "^2.0.0"
1299 |
1300 | is-extglob@^2.1.1:
1301 | version "2.1.1"
1302 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
1303 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
1304 |
1305 | is-fullwidth-code-point@^3.0.0:
1306 | version "3.0.0"
1307 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
1308 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
1309 |
1310 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
1311 | version "4.0.3"
1312 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
1313 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
1314 | dependencies:
1315 | is-extglob "^2.1.1"
1316 |
1317 | is-number@^7.0.0:
1318 | version "7.0.0"
1319 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
1320 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
1321 |
1322 | is-path-inside@^3.0.3:
1323 | version "3.0.3"
1324 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
1325 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
1326 |
1327 | is-stream@^3.0.0:
1328 | version "3.0.0"
1329 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac"
1330 | integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==
1331 |
1332 | isexe@^2.0.0:
1333 | version "2.0.0"
1334 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
1335 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
1336 |
1337 | jackspeak@^4.0.1:
1338 | version "4.0.1"
1339 | resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.0.1.tgz#9fca4ce961af6083e259c376e9e3541431f5287b"
1340 | integrity sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==
1341 | dependencies:
1342 | "@isaacs/cliui" "^8.0.2"
1343 | optionalDependencies:
1344 | "@pkgjs/parseargs" "^0.11.0"
1345 |
1346 | jest-diff@^29.2.1:
1347 | version "29.7.0"
1348 | resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a"
1349 | integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==
1350 | dependencies:
1351 | chalk "^4.0.0"
1352 | diff-sequences "^29.6.3"
1353 | jest-get-type "^29.6.3"
1354 | pretty-format "^29.7.0"
1355 |
1356 | jest-get-type@^29.6.3:
1357 | version "29.6.3"
1358 | resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1"
1359 | integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==
1360 |
1361 | js-tokens@^4.0.0:
1362 | version "4.0.0"
1363 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
1364 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
1365 |
1366 | js-tokens@^9.0.0:
1367 | version "9.0.0"
1368 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-9.0.0.tgz#0f893996d6f3ed46df7f0a3b12a03f5fd84223c1"
1369 | integrity sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==
1370 |
1371 | js-yaml@^4.1.0:
1372 | version "4.1.0"
1373 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
1374 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
1375 | dependencies:
1376 | argparse "^2.0.1"
1377 |
1378 | json-buffer@3.0.1:
1379 | version "3.0.1"
1380 | resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
1381 | integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
1382 |
1383 | json-parse-even-better-errors@^2.3.0:
1384 | version "2.3.1"
1385 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
1386 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
1387 |
1388 | json-schema-traverse@^0.4.1:
1389 | version "0.4.1"
1390 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
1391 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
1392 |
1393 | json-schema-traverse@^1.0.0:
1394 | version "1.0.0"
1395 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
1396 | integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
1397 |
1398 | json-stable-stringify-without-jsonify@^1.0.1:
1399 | version "1.0.1"
1400 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
1401 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
1402 |
1403 | keyv@^4.5.4:
1404 | version "4.5.4"
1405 | resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
1406 | integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
1407 | dependencies:
1408 | json-buffer "3.0.1"
1409 |
1410 | levn@^0.4.1:
1411 | version "0.4.1"
1412 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
1413 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
1414 | dependencies:
1415 | prelude-ls "^1.2.1"
1416 | type-check "~0.4.0"
1417 |
1418 | lines-and-columns@^1.1.6:
1419 | version "1.2.4"
1420 | resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
1421 | integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
1422 |
1423 | local-pkg@^0.5.0:
1424 | version "0.5.0"
1425 | resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.5.0.tgz#093d25a346bae59a99f80e75f6e9d36d7e8c925c"
1426 | integrity sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==
1427 | dependencies:
1428 | mlly "^1.4.2"
1429 | pkg-types "^1.0.3"
1430 |
1431 | locate-path@^6.0.0:
1432 | version "6.0.0"
1433 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
1434 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
1435 | dependencies:
1436 | p-locate "^5.0.0"
1437 |
1438 | lodash.merge@4.6.2, lodash.merge@^4.6.2:
1439 | version "4.6.2"
1440 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
1441 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
1442 |
1443 | loupe@^2.3.6, loupe@^2.3.7:
1444 | version "2.3.7"
1445 | resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697"
1446 | integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==
1447 | dependencies:
1448 | get-func-name "^2.0.1"
1449 |
1450 | lower-case@^2.0.2:
1451 | version "2.0.2"
1452 | resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28"
1453 | integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==
1454 | dependencies:
1455 | tslib "^2.0.3"
1456 |
1457 | lru-cache@^11.0.0:
1458 | version "11.0.1"
1459 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.0.1.tgz#3a732fbfedb82c5ba7bca6564ad3f42afcb6e147"
1460 | integrity sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==
1461 |
1462 | magic-string@^0.30.5:
1463 | version "0.30.10"
1464 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.10.tgz#123d9c41a0cb5640c892b041d4cfb3bd0aa4b39e"
1465 | integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==
1466 | dependencies:
1467 | "@jridgewell/sourcemap-codec" "^1.4.15"
1468 |
1469 | markdown-table@^3.0.3:
1470 | version "3.0.3"
1471 | resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.3.tgz#e6331d30e493127e031dd385488b5bd326e4a6bd"
1472 | integrity sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==
1473 |
1474 | merge-stream@^2.0.0:
1475 | version "2.0.0"
1476 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
1477 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
1478 |
1479 | merge2@^1.3.0, merge2@^1.4.1:
1480 | version "1.4.1"
1481 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
1482 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
1483 |
1484 | micromatch@^4.0.4:
1485 | version "4.0.5"
1486 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
1487 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
1488 | dependencies:
1489 | braces "^3.0.2"
1490 | picomatch "^2.3.1"
1491 |
1492 | mimic-fn@^4.0.0:
1493 | version "4.0.0"
1494 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc"
1495 | integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==
1496 |
1497 | minimatch@^10.0.0:
1498 | version "10.0.1"
1499 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.1.tgz#ce0521856b453c86e25f2c4c0d03e6ff7ddc440b"
1500 | integrity sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==
1501 | dependencies:
1502 | brace-expansion "^2.0.1"
1503 |
1504 | minimatch@^3.0.5, minimatch@^3.1.2:
1505 | version "3.1.2"
1506 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
1507 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
1508 | dependencies:
1509 | brace-expansion "^1.1.7"
1510 |
1511 | minimatch@^9.0.4:
1512 | version "9.0.4"
1513 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51"
1514 | integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==
1515 | dependencies:
1516 | brace-expansion "^2.0.1"
1517 |
1518 | minipass@^7.1.2:
1519 | version "7.1.2"
1520 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707"
1521 | integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
1522 |
1523 | mlly@^1.4.2, mlly@^1.7.0:
1524 | version "1.7.0"
1525 | resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.7.0.tgz#587383ae40dda23cadb11c3c3cc972b277724271"
1526 | integrity sha512-U9SDaXGEREBYQgfejV97coK0UL1r+qnF2SyO9A3qcI8MzKnsIFKHNVEkrDyNncQTKQQumsasmeq84eNMdBfsNQ==
1527 | dependencies:
1528 | acorn "^8.11.3"
1529 | pathe "^1.1.2"
1530 | pkg-types "^1.1.0"
1531 | ufo "^1.5.3"
1532 |
1533 | ms@2.1.2:
1534 | version "2.1.2"
1535 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
1536 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
1537 |
1538 | mylas@^2.1.9:
1539 | version "2.1.13"
1540 | resolved "https://registry.yarnpkg.com/mylas/-/mylas-2.1.13.tgz#1e23b37d58fdcc76e15d8a5ed23f9ae9fc0cbdf4"
1541 | integrity sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg==
1542 |
1543 | nanoid@^3.3.7:
1544 | version "3.3.7"
1545 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
1546 | integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
1547 |
1548 | natural-compare@^1.4.0:
1549 | version "1.4.0"
1550 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
1551 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
1552 |
1553 | no-case@^3.0.4:
1554 | version "3.0.4"
1555 | resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
1556 | integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==
1557 | dependencies:
1558 | lower-case "^2.0.2"
1559 | tslib "^2.0.3"
1560 |
1561 | normalize-path@^3.0.0, normalize-path@~3.0.0:
1562 | version "3.0.0"
1563 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
1564 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
1565 |
1566 | npm-run-path@^5.1.0:
1567 | version "5.3.0"
1568 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f"
1569 | integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==
1570 | dependencies:
1571 | path-key "^4.0.0"
1572 |
1573 | onetime@^6.0.0:
1574 | version "6.0.0"
1575 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4"
1576 | integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==
1577 | dependencies:
1578 | mimic-fn "^4.0.0"
1579 |
1580 | optionator@^0.9.3:
1581 | version "0.9.4"
1582 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734"
1583 | integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==
1584 | dependencies:
1585 | deep-is "^0.1.3"
1586 | fast-levenshtein "^2.0.6"
1587 | levn "^0.4.1"
1588 | prelude-ls "^1.2.1"
1589 | type-check "^0.4.0"
1590 | word-wrap "^1.2.5"
1591 |
1592 | p-limit@^3.0.2:
1593 | version "3.1.0"
1594 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
1595 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
1596 | dependencies:
1597 | yocto-queue "^0.1.0"
1598 |
1599 | p-limit@^5.0.0:
1600 | version "5.0.0"
1601 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-5.0.0.tgz#6946d5b7140b649b7a33a027d89b4c625b3a5985"
1602 | integrity sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==
1603 | dependencies:
1604 | yocto-queue "^1.0.0"
1605 |
1606 | p-locate@^5.0.0:
1607 | version "5.0.0"
1608 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
1609 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
1610 | dependencies:
1611 | p-limit "^3.0.2"
1612 |
1613 | package-json-from-dist@^1.0.0:
1614 | version "1.0.0"
1615 | resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00"
1616 | integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==
1617 |
1618 | parent-module@^1.0.0:
1619 | version "1.0.1"
1620 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
1621 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
1622 | dependencies:
1623 | callsites "^3.0.0"
1624 |
1625 | parse-json@^5.2.0:
1626 | version "5.2.0"
1627 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
1628 | integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
1629 | dependencies:
1630 | "@babel/code-frame" "^7.0.0"
1631 | error-ex "^1.3.1"
1632 | json-parse-even-better-errors "^2.3.0"
1633 | lines-and-columns "^1.1.6"
1634 |
1635 | path-exists@^4.0.0:
1636 | version "4.0.0"
1637 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
1638 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
1639 |
1640 | path-key@^3.1.0:
1641 | version "3.1.1"
1642 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
1643 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
1644 |
1645 | path-key@^4.0.0:
1646 | version "4.0.0"
1647 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18"
1648 | integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==
1649 |
1650 | path-scurry@^2.0.0:
1651 | version "2.0.0"
1652 | resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.0.tgz#9f052289f23ad8bf9397a2a0425e7b8615c58580"
1653 | integrity sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==
1654 | dependencies:
1655 | lru-cache "^11.0.0"
1656 | minipass "^7.1.2"
1657 |
1658 | path-type@^4.0.0:
1659 | version "4.0.0"
1660 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
1661 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
1662 |
1663 | pathe@^1.1.1, pathe@^1.1.2:
1664 | version "1.1.2"
1665 | resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec"
1666 | integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==
1667 |
1668 | pathval@^1.1.1:
1669 | version "1.1.1"
1670 | resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d"
1671 | integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==
1672 |
1673 | picocolors@^1.0.0:
1674 | version "1.0.1"
1675 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1"
1676 | integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==
1677 |
1678 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
1679 | version "2.3.1"
1680 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
1681 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
1682 |
1683 | pkg-types@^1.0.3, pkg-types@^1.1.0:
1684 | version "1.1.1"
1685 | resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.1.1.tgz#07b626880749beb607b0c817af63aac1845a73f2"
1686 | integrity sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==
1687 | dependencies:
1688 | confbox "^0.1.7"
1689 | mlly "^1.7.0"
1690 | pathe "^1.1.2"
1691 |
1692 | plimit-lit@^1.2.6:
1693 | version "1.6.1"
1694 | resolved "https://registry.yarnpkg.com/plimit-lit/-/plimit-lit-1.6.1.tgz#a34594671b31ee8e93c72d505dfb6852eb72374a"
1695 | integrity sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA==
1696 | dependencies:
1697 | queue-lit "^1.5.1"
1698 |
1699 | postcss@^8.4.38:
1700 | version "8.4.38"
1701 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e"
1702 | integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==
1703 | dependencies:
1704 | nanoid "^3.3.7"
1705 | picocolors "^1.0.0"
1706 | source-map-js "^1.2.0"
1707 |
1708 | prelude-ls@^1.2.1:
1709 | version "1.2.1"
1710 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
1711 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
1712 |
1713 | pretty-format@^29.7.0:
1714 | version "29.7.0"
1715 | resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812"
1716 | integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==
1717 | dependencies:
1718 | "@jest/schemas" "^29.6.3"
1719 | ansi-styles "^5.0.0"
1720 | react-is "^18.0.0"
1721 |
1722 | punycode@^2.1.0:
1723 | version "2.3.1"
1724 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
1725 | integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
1726 |
1727 | queue-lit@^1.5.1:
1728 | version "1.5.2"
1729 | resolved "https://registry.yarnpkg.com/queue-lit/-/queue-lit-1.5.2.tgz#83c24d4f4764802377b05a6e5c73017caf3f8747"
1730 | integrity sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw==
1731 |
1732 | queue-microtask@^1.2.2:
1733 | version "1.2.3"
1734 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
1735 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
1736 |
1737 | react-is@^18.0.0:
1738 | version "18.3.1"
1739 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e"
1740 | integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==
1741 |
1742 | readdirp@~3.6.0:
1743 | version "3.6.0"
1744 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
1745 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
1746 | dependencies:
1747 | picomatch "^2.2.1"
1748 |
1749 | require-from-string@^2.0.2:
1750 | version "2.0.2"
1751 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
1752 | integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
1753 |
1754 | resolve-from@^4.0.0:
1755 | version "4.0.0"
1756 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
1757 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
1758 |
1759 | reusify@^1.0.4:
1760 | version "1.0.4"
1761 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
1762 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
1763 |
1764 | rimraf@^6.0.1:
1765 | version "6.0.1"
1766 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-6.0.1.tgz#ffb8ad8844dd60332ab15f52bc104bc3ed71ea4e"
1767 | integrity sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==
1768 | dependencies:
1769 | glob "^11.0.0"
1770 | package-json-from-dist "^1.0.0"
1771 |
1772 | rollup@^4.13.0:
1773 | version "4.17.2"
1774 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.17.2.tgz#26d1785d0144122277fdb20ab3a24729ae68301f"
1775 | integrity sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==
1776 | dependencies:
1777 | "@types/estree" "1.0.5"
1778 | optionalDependencies:
1779 | "@rollup/rollup-android-arm-eabi" "4.17.2"
1780 | "@rollup/rollup-android-arm64" "4.17.2"
1781 | "@rollup/rollup-darwin-arm64" "4.17.2"
1782 | "@rollup/rollup-darwin-x64" "4.17.2"
1783 | "@rollup/rollup-linux-arm-gnueabihf" "4.17.2"
1784 | "@rollup/rollup-linux-arm-musleabihf" "4.17.2"
1785 | "@rollup/rollup-linux-arm64-gnu" "4.17.2"
1786 | "@rollup/rollup-linux-arm64-musl" "4.17.2"
1787 | "@rollup/rollup-linux-powerpc64le-gnu" "4.17.2"
1788 | "@rollup/rollup-linux-riscv64-gnu" "4.17.2"
1789 | "@rollup/rollup-linux-s390x-gnu" "4.17.2"
1790 | "@rollup/rollup-linux-x64-gnu" "4.17.2"
1791 | "@rollup/rollup-linux-x64-musl" "4.17.2"
1792 | "@rollup/rollup-win32-arm64-msvc" "4.17.2"
1793 | "@rollup/rollup-win32-ia32-msvc" "4.17.2"
1794 | "@rollup/rollup-win32-x64-msvc" "4.17.2"
1795 | fsevents "~2.3.2"
1796 |
1797 | run-parallel@^1.1.9:
1798 | version "1.2.0"
1799 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
1800 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
1801 | dependencies:
1802 | queue-microtask "^1.2.2"
1803 |
1804 | semver@^7.3.7, semver@^7.6.0:
1805 | version "7.6.2"
1806 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13"
1807 | integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==
1808 |
1809 | shebang-command@^2.0.0:
1810 | version "2.0.0"
1811 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
1812 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
1813 | dependencies:
1814 | shebang-regex "^3.0.0"
1815 |
1816 | shebang-regex@^3.0.0:
1817 | version "3.0.0"
1818 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
1819 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
1820 |
1821 | siginfo@^2.0.0:
1822 | version "2.0.0"
1823 | resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30"
1824 | integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==
1825 |
1826 | signal-exit@^4.0.1, signal-exit@^4.1.0:
1827 | version "4.1.0"
1828 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
1829 | integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
1830 |
1831 | slash@^3.0.0:
1832 | version "3.0.0"
1833 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
1834 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
1835 |
1836 | source-map-js@^1.2.0:
1837 | version "1.2.0"
1838 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af"
1839 | integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
1840 |
1841 | stackback@0.0.2:
1842 | version "0.0.2"
1843 | resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b"
1844 | integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==
1845 |
1846 | std-env@^3.5.0:
1847 | version "3.7.0"
1848 | resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2"
1849 | integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==
1850 |
1851 | "string-width-cjs@npm:string-width@^4.2.0":
1852 | version "4.2.3"
1853 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
1854 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
1855 | dependencies:
1856 | emoji-regex "^8.0.0"
1857 | is-fullwidth-code-point "^3.0.0"
1858 | strip-ansi "^6.0.1"
1859 |
1860 | string-width@^4.1.0:
1861 | version "4.2.3"
1862 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
1863 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
1864 | dependencies:
1865 | emoji-regex "^8.0.0"
1866 | is-fullwidth-code-point "^3.0.0"
1867 | strip-ansi "^6.0.1"
1868 |
1869 | string-width@^5.0.1, string-width@^5.1.2:
1870 | version "5.1.2"
1871 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
1872 | integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
1873 | dependencies:
1874 | eastasianwidth "^0.2.0"
1875 | emoji-regex "^9.2.2"
1876 | strip-ansi "^7.0.1"
1877 |
1878 | "strip-ansi-cjs@npm:strip-ansi@^6.0.1":
1879 | version "6.0.1"
1880 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
1881 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
1882 | dependencies:
1883 | ansi-regex "^5.0.1"
1884 |
1885 | strip-ansi@^6.0.0, strip-ansi@^6.0.1:
1886 | version "6.0.1"
1887 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
1888 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
1889 | dependencies:
1890 | ansi-regex "^5.0.1"
1891 |
1892 | strip-ansi@^7.0.1:
1893 | version "7.1.0"
1894 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
1895 | integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
1896 | dependencies:
1897 | ansi-regex "^6.0.1"
1898 |
1899 | strip-final-newline@^3.0.0:
1900 | version "3.0.0"
1901 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd"
1902 | integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==
1903 |
1904 | strip-json-comments@^3.1.1:
1905 | version "3.1.1"
1906 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
1907 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
1908 |
1909 | strip-literal@^2.0.0:
1910 | version "2.1.0"
1911 | resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-2.1.0.tgz#6d82ade5e2e74f5c7e8739b6c84692bd65f0bd2a"
1912 | integrity sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==
1913 | dependencies:
1914 | js-tokens "^9.0.0"
1915 |
1916 | supports-color@^5.3.0:
1917 | version "5.5.0"
1918 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
1919 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
1920 | dependencies:
1921 | has-flag "^3.0.0"
1922 |
1923 | supports-color@^7.1.0:
1924 | version "7.2.0"
1925 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
1926 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
1927 | dependencies:
1928 | has-flag "^4.0.0"
1929 |
1930 | text-table@^0.2.0:
1931 | version "0.2.0"
1932 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
1933 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
1934 |
1935 | tinybench@^2.5.1:
1936 | version "2.8.0"
1937 | resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.8.0.tgz#30e19ae3a27508ee18273ffed9ac7018949acd7b"
1938 | integrity sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==
1939 |
1940 | tinypool@^0.8.3:
1941 | version "0.8.4"
1942 | resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.8.4.tgz#e217fe1270d941b39e98c625dcecebb1408c9aa8"
1943 | integrity sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==
1944 |
1945 | tinyspy@^2.2.0:
1946 | version "2.2.1"
1947 | resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.2.1.tgz#117b2342f1f38a0dbdcc73a50a454883adf861d1"
1948 | integrity sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==
1949 |
1950 | to-regex-range@^5.0.1:
1951 | version "5.0.1"
1952 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
1953 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
1954 | dependencies:
1955 | is-number "^7.0.0"
1956 |
1957 | ts-api-utils@^1.3.0:
1958 | version "1.3.0"
1959 | resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1"
1960 | integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==
1961 |
1962 | tsc-alias@^1.8.10:
1963 | version "1.8.10"
1964 | resolved "https://registry.yarnpkg.com/tsc-alias/-/tsc-alias-1.8.10.tgz#279f9bf0dd8bc10fb27820393d4881db5a303938"
1965 | integrity sha512-Ibv4KAWfFkFdKJxnWfVtdOmB0Zi1RJVxcbPGiCDsFpCQSsmpWyuzHG3rQyI5YkobWwxFPEyQfu1hdo4qLG2zPw==
1966 | dependencies:
1967 | chokidar "^3.5.3"
1968 | commander "^9.0.0"
1969 | globby "^11.0.4"
1970 | mylas "^2.1.9"
1971 | normalize-path "^3.0.0"
1972 | plimit-lit "^1.2.6"
1973 |
1974 | tsc@^2.0.4:
1975 | version "2.0.4"
1976 | resolved "https://registry.yarnpkg.com/tsc/-/tsc-2.0.4.tgz#5f6499146abea5dca4420b451fa4f2f9345238f5"
1977 | integrity sha512-fzoSieZI5KKJVBYGvwbVZs/J5za84f2lSTLPYf6AGiIf43tZ3GNrI1QzTLcjtyDDP4aLxd46RTZq1nQxe7+k5Q==
1978 |
1979 | tsconfck@^3.0.3:
1980 | version "3.1.0"
1981 | resolved "https://registry.yarnpkg.com/tsconfck/-/tsconfck-3.1.0.tgz#30c63b15972b591adb41dc9a339a02743d090c81"
1982 | integrity sha512-CMjc5zMnyAjcS9sPLytrbFmj89st2g+JYtY/c02ug4Q+CZaAtCgbyviI0n1YvjZE/pzoc6FbNsINS13DOL1B9w==
1983 |
1984 | tslib@^1.8.1:
1985 | version "1.14.1"
1986 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
1987 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
1988 |
1989 | tslib@^2.0.3:
1990 | version "2.6.2"
1991 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
1992 | integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
1993 |
1994 | tsutils@^3.21.0:
1995 | version "3.21.0"
1996 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
1997 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
1998 | dependencies:
1999 | tslib "^1.8.1"
2000 |
2001 | type-check@^0.4.0, type-check@~0.4.0:
2002 | version "0.4.0"
2003 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
2004 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
2005 | dependencies:
2006 | prelude-ls "^1.2.1"
2007 |
2008 | type-detect@^4.0.0, type-detect@^4.0.8:
2009 | version "4.0.8"
2010 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
2011 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
2012 |
2013 | type-fest@^2.11.2:
2014 | version "2.19.0"
2015 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b"
2016 | integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==
2017 |
2018 | type-fest@^3.0.0:
2019 | version "3.13.1"
2020 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706"
2021 | integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==
2022 |
2023 | typescript-eslint@^7.9.0:
2024 | version "7.9.0"
2025 | resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-7.9.0.tgz#353312f356ef4ba20105a4e2e736aa8c68f096a2"
2026 | integrity sha512-7iTn9c10teHHCys5Ud/yaJntXZrjt3h2mrx3feJGBOLgQkF3TB1X89Xs3aVQ/GgdXRAXpk2bPTdpRwHP4YkUow==
2027 | dependencies:
2028 | "@typescript-eslint/eslint-plugin" "7.9.0"
2029 | "@typescript-eslint/parser" "7.9.0"
2030 | "@typescript-eslint/utils" "7.9.0"
2031 |
2032 | typescript@^5.4.5:
2033 | version "5.4.5"
2034 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611"
2035 | integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==
2036 |
2037 | ufo@^1.5.3:
2038 | version "1.5.3"
2039 | resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.3.tgz#3325bd3c977b6c6cd3160bf4ff52989adc9d3344"
2040 | integrity sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==
2041 |
2042 | undici-types@~5.26.4:
2043 | version "5.26.5"
2044 | resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
2045 | integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
2046 |
2047 | uri-js@^4.2.2, uri-js@^4.4.1:
2048 | version "4.4.1"
2049 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
2050 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
2051 | dependencies:
2052 | punycode "^2.1.0"
2053 |
2054 | vite-node@1.6.0:
2055 | version "1.6.0"
2056 | resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.6.0.tgz#2c7e61129bfecc759478fa592754fd9704aaba7f"
2057 | integrity sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==
2058 | dependencies:
2059 | cac "^6.7.14"
2060 | debug "^4.3.4"
2061 | pathe "^1.1.1"
2062 | picocolors "^1.0.0"
2063 | vite "^5.0.0"
2064 |
2065 | vite-tsconfig-paths@^4.3.2:
2066 | version "4.3.2"
2067 | resolved "https://registry.yarnpkg.com/vite-tsconfig-paths/-/vite-tsconfig-paths-4.3.2.tgz#321f02e4b736a90ff62f9086467faf4e2da857a9"
2068 | integrity sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==
2069 | dependencies:
2070 | debug "^4.1.1"
2071 | globrex "^0.1.2"
2072 | tsconfck "^3.0.3"
2073 |
2074 | vite@^5.0.0:
2075 | version "5.2.11"
2076 | resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.11.tgz#726ec05555431735853417c3c0bfb36003ca0cbd"
2077 | integrity sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==
2078 | dependencies:
2079 | esbuild "^0.20.1"
2080 | postcss "^8.4.38"
2081 | rollup "^4.13.0"
2082 | optionalDependencies:
2083 | fsevents "~2.3.3"
2084 |
2085 | vitest@^1.6.0:
2086 | version "1.6.0"
2087 | resolved "https://registry.yarnpkg.com/vitest/-/vitest-1.6.0.tgz#9d5ad4752a3c451be919e412c597126cffb9892f"
2088 | integrity sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==
2089 | dependencies:
2090 | "@vitest/expect" "1.6.0"
2091 | "@vitest/runner" "1.6.0"
2092 | "@vitest/snapshot" "1.6.0"
2093 | "@vitest/spy" "1.6.0"
2094 | "@vitest/utils" "1.6.0"
2095 | acorn-walk "^8.3.2"
2096 | chai "^4.3.10"
2097 | debug "^4.3.4"
2098 | execa "^8.0.1"
2099 | local-pkg "^0.5.0"
2100 | magic-string "^0.30.5"
2101 | pathe "^1.1.1"
2102 | picocolors "^1.0.0"
2103 | std-env "^3.5.0"
2104 | strip-literal "^2.0.0"
2105 | tinybench "^2.5.1"
2106 | tinypool "^0.8.3"
2107 | vite "^5.0.0"
2108 | vite-node "1.6.0"
2109 | why-is-node-running "^2.2.2"
2110 |
2111 | which@^2.0.1:
2112 | version "2.0.2"
2113 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
2114 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
2115 | dependencies:
2116 | isexe "^2.0.0"
2117 |
2118 | why-is-node-running@^2.2.2:
2119 | version "2.2.2"
2120 | resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.2.2.tgz#4185b2b4699117819e7154594271e7e344c9973e"
2121 | integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==
2122 | dependencies:
2123 | siginfo "^2.0.0"
2124 | stackback "0.0.2"
2125 |
2126 | word-wrap@^1.2.5:
2127 | version "1.2.5"
2128 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
2129 | integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
2130 |
2131 | "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
2132 | version "7.0.0"
2133 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
2134 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
2135 | dependencies:
2136 | ansi-styles "^4.0.0"
2137 | string-width "^4.1.0"
2138 | strip-ansi "^6.0.0"
2139 |
2140 | wrap-ansi@^8.1.0:
2141 | version "8.1.0"
2142 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
2143 | integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
2144 | dependencies:
2145 | ansi-styles "^6.1.0"
2146 | string-width "^5.0.1"
2147 | strip-ansi "^7.0.1"
2148 |
2149 | yocto-queue@^0.1.0:
2150 | version "0.1.0"
2151 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
2152 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
2153 |
2154 | yocto-queue@^1.0.0:
2155 | version "1.0.0"
2156 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251"
2157 | integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==
2158 |
--------------------------------------------------------------------------------