├── .gitattributes ├── .github └── workflows │ └── action.yaml ├── .gitignore ├── .prettierignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── docs └── sample.png ├── eslint.config.mjs ├── package.json ├── pnpm-lock.yaml ├── public └── help.md ├── script └── package.ts ├── src ├── bin.ts ├── cli-command-parser.ts ├── config.ts ├── const.ts ├── index.ts ├── log.ts ├── read-write.ts ├── traverse-and-update.ts └── type.ts ├── test ├── args │ ├── help.test.ts │ ├── operation.test.ts │ └── version.test.ts ├── config │ └── index.test.ts ├── process │ ├── expected-result │ │ ├── dts │ │ │ ├── dts-only │ │ │ │ ├── dynamic-import-typeargs.d.ts │ │ │ │ ├── index.d.ts │ │ │ │ ├── invalid-dynamic-import.d.ts │ │ │ │ ├── untouched.d.ts │ │ │ │ └── utils │ │ │ │ │ ├── index.d.ts │ │ │ │ │ └── util.d.mts │ │ │ └── with-js │ │ │ │ ├── components │ │ │ │ ├── component.d.ts │ │ │ │ ├── component.jsx │ │ │ │ ├── index.d.ts │ │ │ │ └── index.jsx │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ └── utils │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── util.d.mts │ │ │ │ └── util.mjs │ │ └── js │ │ │ ├── main │ │ │ ├── component.jsx │ │ │ ├── component2.jsx │ │ │ ├── index.css │ │ │ ├── index.js │ │ │ └── util.js │ │ │ └── util │ │ │ ├── index.mjs │ │ │ ├── invalid-dynamic-import.js │ │ │ └── untouched.js │ ├── index.test.ts │ └── source │ │ ├── dts │ │ ├── dts-only │ │ │ ├── dynamic-import-typeargs.d.ts │ │ │ ├── index.d.ts │ │ │ ├── invalid-dynamic-import.d.ts │ │ │ ├── untouched.d.ts │ │ │ └── utils │ │ │ │ ├── index.d.ts │ │ │ │ └── util.d.mts │ │ └── with-js │ │ │ ├── components │ │ │ ├── component.d.ts │ │ │ ├── component.jsx │ │ │ ├── index.d.ts │ │ │ └── index.jsx │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ └── utils │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ ├── util.d.mts │ │ │ └── util.mjs │ │ └── js │ │ ├── main │ │ ├── component.jsx │ │ ├── component2.jsx │ │ ├── index.css │ │ ├── index.js │ │ └── util.js │ │ └── util │ │ ├── index.mjs │ │ ├── invalid-dynamic-import.js │ │ └── untouched.js └── show-changes │ └── index.test.ts ├── tsconfig.cjs.json ├── tsconfig.js.json ├── tsconfig.json ├── tsconfig.mjs.json └── vitest.config.ts /.gitattributes: -------------------------------------------------------------------------------- 1 | # Enforce LF line endings regardless of OS or git configurations. 2 | * text=auto eol=lf 3 | 4 | # Isolate binary files in case the auto-detection algorithm fails and 5 | # marks them as text files (which could brick them). 6 | *.{png,jpg,jpeg,gif,webp,woff,woff2,ico,pdf} binary -------------------------------------------------------------------------------- /.github/workflows/action.yaml: -------------------------------------------------------------------------------- 1 | name: ts-add-js-extension-ci-cd 2 | 3 | on: [push, pull_request] 4 | 5 | jobs: 6 | all: 7 | runs-on: ${{ matrix.os }} 8 | 9 | strategy: 10 | fail-fast: false 11 | matrix: 12 | os: [ubuntu-latest, windows-latest] 13 | node-version: [18, 20, 22] 14 | threads: [4] 15 | 16 | name: Test with Node ${{ matrix.node-version }} on ${{ matrix.os }} 17 | steps: 18 | - name: Checkout Code 19 | uses: actions/checkout@v3 20 | 21 | - uses: pnpm/action-setup@v4 22 | with: 23 | version: 9 24 | - name: Use Node.js ${{ matrix.node-version }} 25 | uses: actions/setup-node@v3 26 | with: 27 | node-version: ${{ matrix.node-version }} 28 | cache: 'pnpm' 29 | 30 | - name: Install Depedencies 31 | run: pnpm i 32 | 33 | - name: Generate Files 34 | run: pnpm prebuild 35 | 36 | - name: Lint Code 37 | run: pnpm lint 38 | 39 | - name: Check Format 40 | run: pnpm format-check 41 | 42 | - name: Run Tests 43 | run: pnpm test 44 | 45 | - name: Produce Build 46 | run: pnpm build 47 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | # production 3 | build 4 | 5 | # generated 6 | src/package.ts 7 | .prettierrc 8 | 9 | # test 10 | test/process/actual-result 11 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | # production 3 | build 4 | 5 | # generated 6 | src/package.ts 7 | .prettierrc 8 | 9 | # test 10 | test/process/actual-result 11 | test/process/expected-result 12 | 13 | pnpm-lock.yaml 14 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # 1.6.6 (22 May 2025) 2 | 3 | - (Fix) deprecate `showchanges` and replace with `showprogress` argument in both CLI and API 4 | - (Fix) deprecate `include` argument in both CLI and API 5 | - (Fix) preserve `typeArguments` when updating `TypeNode` 6 | 7 | # 1.6.5 (06 Nov 2024) 8 | 9 | - (Fix) handle dynamic import with static path 10 | 11 | # 1.6.4 (31 Mar 2024) 12 | 13 | - (Fix) join `data` from `createReadStream` with array rather than assign to string 14 | 15 | # 1.6.3 (31 Jan 2024) 16 | 17 | - (Fix) Handle `.jsx` and `.mjs` also 18 | 19 | # 1.6.2 (31 Jan 2024) 20 | 21 | - (Fix) Remove faulty `postinstall` command 22 | 23 | # 1.6.1 (31 Jan 2024) 24 | 25 | - (Fix) Read the proper code structure to know which part of import/export to update 26 | 27 | # 1.6.0 (13 Oct 2023) 28 | 29 | - (Feat) Append `.js` extension to directory with type declaration/definitions only 30 | - (Refactor) Removed functionality to append `.js` to `mjs` files, since typescript compiler force us to append `.mjs` extensions 31 | 32 | # 1.5.7 (27 Jul 2023) 33 | 34 | - (Fix) Append `.js` extension to `mjs` files 35 | 36 | # 1.5.7 (26 Jul 2023) 37 | 38 | - (Fix) Remove accidentally-committed temp files 39 | 40 | # 1.5.6 (15 Jul 2023) 41 | 42 | - (Fix) Move `typescript` from `devDependencies` to `dependencies` 43 | 44 | # 1.5.5 (5 Jul 2023) 45 | 46 | - (Fix) Parse array of value with space 47 | 48 | # 1.5.4 (23 June 2023) 49 | 50 | - (Fix) Properly parse token of ` ` and replace with `=`, so `--dir build` becomes `--dir=build` internally 51 | 52 | # 1.5.3 (22 June 2023) 53 | 54 | - (Fix) Accept token of ` ` as same level as `=`, so `--dir=build` and `--dir build` is the same 55 | 56 | # 1.5.2 (22 June 2023) 57 | 58 | - (Fix) To be able to use on Windows 59 | 60 | # 1.5.1 (4 June 2023) 61 | 62 | - (Fix) Add relative paths to `package.json` exports 63 | 64 | # 1.5.0 (21 May 2023) 65 | 66 | - (Feat) Remove `@typescript-eslint/typescript-estree`, just use `tsc` to produce AST and manipulate import/export 67 | 68 | # 1.4.0 (20 May 2023) 69 | 70 | - (Feat) Remove 'readline' and use raw output for log `Num. (File Updated) - (SUCCEED or FAILED)` 71 | 72 | # 1.3.4 (15 May 2023) 73 | 74 | - (Fix) Remove `dts` folder and create `dts` folders for `cjs` and `mjs` folder 75 | 76 | # 1.3.3 (6 Mar 2023) 77 | 78 | - (Fix) Auto detect whether a file imported/exported is with `.js` or `.mjs` extension, so there is no need to specify what extension to be added 79 | 80 | # 1.3.2 (27 Oct 2022) 81 | 82 | - (Chore) Remove useless log 83 | 84 | # 1.3.1 (27 Oct 2022) 85 | 86 | - (Fix) Create `Progress` instance when there is at least one file to change 87 | 88 | # 1.3.0 (27 Oct 2022) 89 | 90 | - (Feat) Remove `console-table-printer` and replace it with manual progress log 91 | 92 | # 1.2.6 (27 Oct 2022) 93 | 94 | - (Fix) Optionally target `mjs` or `js` file, defaults to `js` file if parameters are not pass into 95 | 96 | # 1.2.5 (25 Oct 2022) 97 | 98 | - (Chore) Remove unnecessary log 99 | 100 | # 1.2.4 (18 Oct 2022) 101 | 102 | - (Feat) Provide API function `parseConfig` & `tsAddJsExtension` 103 | - (Fix) Relative import `.` can be detected 104 | 105 | # 1.2.3 (10 Sept 2022) 106 | 107 | - (Fix) README JS code block render 108 | - (Fix) Remove `/` from file path that ends with `/` as it cannot be detected as a folder 109 | - (Chore) Improve README 110 | - (Chore) Remove `parse-dont-validate` as parsing can be done manually 111 | 112 | # 1.2.2 (6 Sept 2022) 113 | 114 | - (Fix) README JS code block render 115 | - (Chore) Simplify some code 116 | 117 | # 1.2.1 (31 July 2022) 118 | 119 | - (Chore) Remove `tsbuild-config` from build 120 | 121 | # 1.2.0 (6 May 2022) 122 | 123 | - (Feat) Auto add `/index.js` for import/export statement as we can omit `index` at the end of import/export 124 | - (Feat) Show import/export that has changed, can optionally turn it off as it's on by default 125 | 126 | # 1.1.0 (6 May 2022) 127 | 128 | - (Fix) Read all javascript files to make sure relative imported file is JavaScript file before adding `.js` extension 129 | - (Feat) Allow import from different root folder, for example, it is possible to add `.js` extension for imported JavaScript files from `common` into `src` folder 130 | 131 | # 1.0.2 (20 Feb 2022) 132 | 133 | - (Fix) Merge PR `https://github.com/P-YNPM/ts-add-js-extension/pull/2` to add `ExportAllDeclaration` to handle additional export JavaScript 134 | 135 | # 1.0.1 (11 Feb 2022) 136 | 137 | - (Feat) Made write file asynchronous to speed up writing 138 | 139 | # 1.0.0 (13 Jan 2022) 140 | 141 | - (Fix!) Removed minification, perform only single function -> Add .js extension to each relative import/export statement 142 | 143 | # 0.0.5 (4 Dec 2021) 144 | 145 | - (Chore) Change file in bin folder to JavaScript file and changed to import, not require 146 | 147 | # 0.0.4 (4 Dec 2021) 148 | 149 | - (Chore) Updated parse-dont-validate package version in package.json 150 | 151 | # 0.0.3 (4 Dec 2021) 152 | 153 | - (Feat) Added main entry point 154 | 155 | # 0.0.2 (4 Dec 2021) 156 | 157 | - (Feat) Added minification and remove comment option based on AST 158 | 159 | # 0.0.1 (29 Nov 2021) 160 | 161 | - (Chore) Added Git URL 162 | 163 | # 0.0.0 (29 Nov 2021) 164 | 165 | - (Feat) Initial public release 166 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Gervin Fung Da Xuen 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ts-add-js-extension 2 | 3 | Originally, I created this solution for personal use due to my preference of not including the `.js` extension in TypeScript import/export statements when compiling my TypeScript project to ES Module. 4 | This decision was motivated by the belief that it is unnecessary to import/export a JavaScript file that does not exist in the source code folder. 5 | Importing or exporting a file that does not exist would be illogical. 6 | In essence, a source code should not reference its own build artifacts or output file 7 | 8 | Additionally, another option would be to compile the TypeScript project to CommonJS Module. 9 | However, I prefer not to take that approach. 10 | Instead, this package is designed to cater to TypeScript or JavaScript projects that use ES Module (ESM) format and do not rely on a bundler like `esbuild` or `swc`. 11 | 12 | # Feature 13 | 14 | Initially designed for TypeScript projects exclusively, this solution also caters to those who prefer a more convenient approach when working with JavaScript. 15 | By automatically appending the `.js` extension to each relative import and export statement in ES Module JavaScript, you can save yourself the effort of doing it manually. 16 | This feature is particularly beneficial for TypeScript projects that target ES Module. 17 | 18 | Als, this decision was motivated by the belief that it is unnecessary to import/export a JavaScript file that does not exist in the source code folder. 19 | Importing or exporting a file that does not exist would be illogical. 20 | In essence, a source code should not reference its own build artifacts or output file 21 | 22 | It is worth noting that this package intelligently handles import/export statements and adds `/index.js` where necessary, 23 | allowing you to omit the explicit inclusion of index in the statement. 24 | 25 | Additionally, it can determine whether a file with the `mjs` or `js` extension is being imported or exported 26 | 27 | # Usage 28 | 29 | The compiled folder for TypeScript or JavaScript can be named according to your preference. In this case, I will use the name "dist" as an example. 30 | 31 | **Note**: For command line arguments, refer [here](#arguments) 32 | 33 | ### Declarations 34 | 35 | #### Command line: 36 | 37 | ```json 38 | { 39 | "scripts": { 40 | "": "ts-add-js-extension --dir=dist" 41 | } 42 | } 43 | ``` 44 | 45 | #### API: 46 | 47 | ```js 48 | tsAddJsExtension({ 49 | dir: 'dist', 50 | }); 51 | ``` 52 | 53 | ### Execution Process 54 | 55 | Assuming you have a file called `main.ts` in the "dist" directory, the file structure would look like this: 56 | 57 | ``` 58 | dist/ 59 | └─ main.ts 60 | ``` 61 | 62 | And `main.ts` contains the following imports and exports, where all the files are TypeScript files: 63 | 64 | ```ts 65 | import { add } from './math'; 66 | export { add, sub, mul, div } from './math/index'; 67 | 68 | import div from './math/div'; 69 | export * as div from './math/div'; 70 | 71 | import word from './word'; 72 | 73 | console.log(add(2, 1)); 74 | ``` 75 | 76 | When `ts-add-js-extension` is executed, it will generate the following code for `main.js`: 77 | 78 | ```ts 79 | import { add } from './math/index.js'; 80 | export { add, sub, mul, div } from './math/index.js'; 81 | 82 | import div from './math/div.js'; 83 | export * as div from './math/div.js'; 84 | 85 | import word from './word/index.mjs'; 86 | 87 | console.log(add(2, 1)); 88 | ``` 89 | 90 | During the process, `ts-add-js-extension` will traverse the project and analyze the file extensions of JavaScript files being imported or exported. It will then determine whether to add the `.js` or `.mjs` file extension based on the file's original extension. 91 | 92 | This ensures that all the JavaScript files in your project have the correct file extension, enhancing compatibility and ensuring proper import/export functionality. 93 | 94 | # Arguments 95 | 96 | | Argument | Usage | Required | Status | Default Value | 97 | | :----------- | :----------------------------------------------------------------------------------------------------------- | :------- | --------------------------------------- | ------------- | 98 | | dir | Specifies the folder where JavaScript file extension needs to be added | Yes | Active | None | 99 | | include | Specifies the folder of files that are imported or included in the dir folder, excluding the specified dir | No | Deprecated | [] | 100 | | showchanges | Determines whether to display progress feedback in the format of `Num. (File Updated) - (SUCCEED or FAILED)` | No | Deprecated (in favor of `showprogress`) | True | 101 | | showprogress | Determines whether to display progress feedback in the format of `Num. (File Updated) - (SUCCEED or FAILED)` | No | Active | True | 102 | 103 | _Please note that the status column indicates whether an argument is active or deprecated, and the default value column specifies the default value if not provided_ 104 | 105 | # Contributions 106 | 107 | I appreciate your active participation in the development process. If you come across any bugs, have feature requests, or need clarification on any aspect of the project, please don't hesitate to open an issue. 108 | 109 | Additionally, your contributions to the project are highly valued. If you have ideas or improvements that you would like to implement, I invite you to suggest a pull request. Simply fork the repository, make the necessary code changes, add relevant tests to ensure quality, and push your changes. 110 | 111 | Your feedback and contributions play an essential role in making the project better, and I am grateful for your involvement. Thank you for your support and participation in the development of the project. 112 | -------------------------------------------------------------------------------- /docs/sample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GervinFung/ts-add-js-extension/42854c0ee0b8e71078fa00a1ab7bcc20a066d570/docs/sample.png -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import process from 'process'; 2 | 3 | import { includeIgnoreFile } from '@eslint/compat'; 4 | import eslint from '@eslint/js'; 5 | import { node } from '@poolofdeath20/eslint-config'; 6 | import tseslint from 'typescript-eslint'; 7 | 8 | export default tseslint.config( 9 | includeIgnoreFile(`${process.cwd()}/.gitignore`), 10 | eslint.configs.recommended, 11 | ...tseslint.configs.strictTypeChecked, 12 | ...tseslint.configs.stylisticTypeChecked, 13 | node, 14 | { 15 | ignores: ['test/process/source/**', 'test/process/expected-result/**'], 16 | } 17 | ); 18 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ts-add-js-extension", 3 | "description": "Add .js extension to each relative ESM import and export statement in JavaScript file", 4 | "version": "1.6.6", 5 | "license": "MIT", 6 | "main": "./build/cjs/index.js", 7 | "module": "./build/mjs/index.js", 8 | "types": "./build/cjs/index.d.ts", 9 | "react-native": "./build/mjs/index.js", 10 | "exports": { 11 | "./package.json": "./package.json", 12 | ".": { 13 | "require": "./build/cjs/index.js", 14 | "import": "./build/mjs/index.js", 15 | "default": "./build/mjs/index.js" 16 | } 17 | }, 18 | "bin": { 19 | "ts-add-js-extension": "./build/cjs/bin.js" 20 | }, 21 | "files": [ 22 | "build" 23 | ], 24 | "scripts": { 25 | "lint": "eslint . --color", 26 | "format": "prettier-config-generate && prettier .", 27 | "format-write": "pnpm format --write", 28 | "format-check": "pnpm format --check", 29 | "build-cjs": "tsc -p tsconfig.cjs.json && shx chmod +x build/cjs/bin.js", 30 | "build-mjs": "tsc -p tsconfig.mjs.json && node build/cjs/bin.js --dir build/mjs", 31 | "prebuild": "vite-node script/package.ts", 32 | "build": "pnpm prebuild && shx rm -rf build && pnpm build-cjs && pnpm build-mjs && node-package-helper", 33 | "test-setup": "cd test/process && shx rm -rf actual-result && shx cp -r source actual-result && pnpm prebuild", 34 | "pretest": "pnpm test-setup && pnpm prebuild", 35 | "test": "pnpm pretest && vitest" 36 | }, 37 | "bugs": "https://github.com/GervinFung/ts-add-js-extension/issues", 38 | "repository": { 39 | "type": "git", 40 | "url": "https://github.com/GervinFung/ts-add-js-extension" 41 | }, 42 | "dependencies": { 43 | "typescript": "^5.8.2" 44 | }, 45 | "devDependencies": { 46 | "@poolofdeath20/eslint-config": "^0.4.2", 47 | "@poolofdeath20/prettier-config-generator": "^0.0.1", 48 | "@poolofdeath20/tsconfig": "^0.1.1", 49 | "@types/node": "^22.13.14", 50 | "eslint": "^9.23.0", 51 | "node-package-helper": "github:GervinFung/node-package-helper", 52 | "prettier": "^3.5.3", 53 | "shx": "^0.4.0", 54 | "vite-node": "^3.0.9", 55 | "vitest": "^3.0.9" 56 | }, 57 | "keywords": [ 58 | "esm", 59 | "tsc", 60 | "mjs", 61 | "js", 62 | "typescript", 63 | "javascript", 64 | "js extension", 65 | "esnext" 66 | ] 67 | } 68 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | typescript: 12 | specifier: ^5.8.2 13 | version: 5.8.2 14 | devDependencies: 15 | '@poolofdeath20/eslint-config': 16 | specifier: ^0.4.2 17 | version: 0.4.2(@eslint/compat@1.2.4(eslint@9.23.0))(@eslint/js@9.23.0)(@next/eslint-plugin-next@15.1.2)(@types/eslint__js@8.42.3)(@typescript-eslint/eslint-plugin@8.18.2(@typescript-eslint/parser@8.18.2(eslint@9.23.0)(typescript@5.8.2))(eslint@9.23.0)(typescript@5.8.2))(@typescript-eslint/parser@8.18.2(eslint@9.23.0)(typescript@5.8.2))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.18.2(eslint@9.23.0)(typescript@5.8.2))(eslint@9.23.0))(eslint-plugin-jsx-a11y@6.10.2(eslint@9.23.0))(eslint-plugin-react-hooks@5.1.0(eslint@9.23.0))(eslint-plugin-react@7.37.3(eslint@9.23.0))(typescript-eslint@8.18.2(eslint@9.23.0)(typescript@5.8.2)) 18 | '@poolofdeath20/prettier-config-generator': 19 | specifier: ^0.0.1 20 | version: 0.0.1(prettier@3.5.3) 21 | '@poolofdeath20/tsconfig': 22 | specifier: ^0.1.1 23 | version: 0.1.1 24 | '@types/node': 25 | specifier: ^22.13.14 26 | version: 22.13.14 27 | eslint: 28 | specifier: ^9.23.0 29 | version: 9.23.0 30 | node-package-helper: 31 | specifier: github:GervinFung/node-package-helper 32 | version: https://codeload.github.com/GervinFung/node-package-helper/tar.gz/b43bb915e84cc79e7ec5e7e93ef35e60640f67bd 33 | prettier: 34 | specifier: ^3.5.3 35 | version: 3.5.3 36 | shx: 37 | specifier: ^0.4.0 38 | version: 0.4.0 39 | vite-node: 40 | specifier: ^3.0.9 41 | version: 3.0.9(@types/node@22.13.14) 42 | vitest: 43 | specifier: ^3.0.9 44 | version: 3.0.9(@types/node@22.13.14) 45 | 46 | packages: 47 | 48 | '@esbuild/aix-ppc64@0.25.1': 49 | resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==} 50 | engines: {node: '>=18'} 51 | cpu: [ppc64] 52 | os: [aix] 53 | 54 | '@esbuild/android-arm64@0.25.1': 55 | resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==} 56 | engines: {node: '>=18'} 57 | cpu: [arm64] 58 | os: [android] 59 | 60 | '@esbuild/android-arm@0.25.1': 61 | resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==} 62 | engines: {node: '>=18'} 63 | cpu: [arm] 64 | os: [android] 65 | 66 | '@esbuild/android-x64@0.25.1': 67 | resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==} 68 | engines: {node: '>=18'} 69 | cpu: [x64] 70 | os: [android] 71 | 72 | '@esbuild/darwin-arm64@0.25.1': 73 | resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==} 74 | engines: {node: '>=18'} 75 | cpu: [arm64] 76 | os: [darwin] 77 | 78 | '@esbuild/darwin-x64@0.25.1': 79 | resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==} 80 | engines: {node: '>=18'} 81 | cpu: [x64] 82 | os: [darwin] 83 | 84 | '@esbuild/freebsd-arm64@0.25.1': 85 | resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==} 86 | engines: {node: '>=18'} 87 | cpu: [arm64] 88 | os: [freebsd] 89 | 90 | '@esbuild/freebsd-x64@0.25.1': 91 | resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==} 92 | engines: {node: '>=18'} 93 | cpu: [x64] 94 | os: [freebsd] 95 | 96 | '@esbuild/linux-arm64@0.25.1': 97 | resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==} 98 | engines: {node: '>=18'} 99 | cpu: [arm64] 100 | os: [linux] 101 | 102 | '@esbuild/linux-arm@0.25.1': 103 | resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==} 104 | engines: {node: '>=18'} 105 | cpu: [arm] 106 | os: [linux] 107 | 108 | '@esbuild/linux-ia32@0.25.1': 109 | resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==} 110 | engines: {node: '>=18'} 111 | cpu: [ia32] 112 | os: [linux] 113 | 114 | '@esbuild/linux-loong64@0.25.1': 115 | resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==} 116 | engines: {node: '>=18'} 117 | cpu: [loong64] 118 | os: [linux] 119 | 120 | '@esbuild/linux-mips64el@0.25.1': 121 | resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==} 122 | engines: {node: '>=18'} 123 | cpu: [mips64el] 124 | os: [linux] 125 | 126 | '@esbuild/linux-ppc64@0.25.1': 127 | resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==} 128 | engines: {node: '>=18'} 129 | cpu: [ppc64] 130 | os: [linux] 131 | 132 | '@esbuild/linux-riscv64@0.25.1': 133 | resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==} 134 | engines: {node: '>=18'} 135 | cpu: [riscv64] 136 | os: [linux] 137 | 138 | '@esbuild/linux-s390x@0.25.1': 139 | resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==} 140 | engines: {node: '>=18'} 141 | cpu: [s390x] 142 | os: [linux] 143 | 144 | '@esbuild/linux-x64@0.25.1': 145 | resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==} 146 | engines: {node: '>=18'} 147 | cpu: [x64] 148 | os: [linux] 149 | 150 | '@esbuild/netbsd-arm64@0.25.1': 151 | resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==} 152 | engines: {node: '>=18'} 153 | cpu: [arm64] 154 | os: [netbsd] 155 | 156 | '@esbuild/netbsd-x64@0.25.1': 157 | resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==} 158 | engines: {node: '>=18'} 159 | cpu: [x64] 160 | os: [netbsd] 161 | 162 | '@esbuild/openbsd-arm64@0.25.1': 163 | resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==} 164 | engines: {node: '>=18'} 165 | cpu: [arm64] 166 | os: [openbsd] 167 | 168 | '@esbuild/openbsd-x64@0.25.1': 169 | resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==} 170 | engines: {node: '>=18'} 171 | cpu: [x64] 172 | os: [openbsd] 173 | 174 | '@esbuild/sunos-x64@0.25.1': 175 | resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==} 176 | engines: {node: '>=18'} 177 | cpu: [x64] 178 | os: [sunos] 179 | 180 | '@esbuild/win32-arm64@0.25.1': 181 | resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==} 182 | engines: {node: '>=18'} 183 | cpu: [arm64] 184 | os: [win32] 185 | 186 | '@esbuild/win32-ia32@0.25.1': 187 | resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==} 188 | engines: {node: '>=18'} 189 | cpu: [ia32] 190 | os: [win32] 191 | 192 | '@esbuild/win32-x64@0.25.1': 193 | resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==} 194 | engines: {node: '>=18'} 195 | cpu: [x64] 196 | os: [win32] 197 | 198 | '@eslint-community/eslint-utils@4.5.1': 199 | resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==} 200 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 201 | peerDependencies: 202 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 203 | 204 | '@eslint-community/regexpp@4.12.1': 205 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 206 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 207 | 208 | '@eslint/compat@1.2.4': 209 | resolution: {integrity: sha512-S8ZdQj/N69YAtuqFt7653jwcvuUj131+6qGLUyDqfDg1OIoBQ66OCuXC473YQfO2AaxITTutiRQiDwoo7ZLYyg==} 210 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 211 | peerDependencies: 212 | eslint: ^9.10.0 213 | peerDependenciesMeta: 214 | eslint: 215 | optional: true 216 | 217 | '@eslint/config-array@0.19.2': 218 | resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} 219 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 220 | 221 | '@eslint/config-helpers@0.2.0': 222 | resolution: {integrity: sha512-yJLLmLexii32mGrhW29qvU3QBVTu0GUmEf/J4XsBtVhp4JkIUFN/BjWqTF63yRvGApIDpZm5fa97LtYtINmfeQ==} 223 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 224 | 225 | '@eslint/core@0.12.0': 226 | resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} 227 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 228 | 229 | '@eslint/eslintrc@3.3.1': 230 | resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} 231 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 232 | 233 | '@eslint/js@9.23.0': 234 | resolution: {integrity: sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==} 235 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 236 | 237 | '@eslint/object-schema@2.1.6': 238 | resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} 239 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 240 | 241 | '@eslint/plugin-kit@0.2.7': 242 | resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==} 243 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 244 | 245 | '@humanfs/core@0.19.1': 246 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 247 | engines: {node: '>=18.18.0'} 248 | 249 | '@humanfs/node@0.16.6': 250 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} 251 | engines: {node: '>=18.18.0'} 252 | 253 | '@humanwhocodes/module-importer@1.0.1': 254 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 255 | engines: {node: '>=12.22'} 256 | 257 | '@humanwhocodes/retry@0.3.1': 258 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 259 | engines: {node: '>=18.18'} 260 | 261 | '@humanwhocodes/retry@0.4.2': 262 | resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} 263 | engines: {node: '>=18.18'} 264 | 265 | '@jridgewell/sourcemap-codec@1.5.0': 266 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 267 | 268 | '@next/eslint-plugin-next@15.1.2': 269 | resolution: {integrity: sha512-sgfw3+WdaYOGPKCvM1L+UucBmRfh8V2Ygefp7ELON0+0vY7uohQwXXnVWg3rY7mXDKharQR3o7uedpfvnU2hlQ==} 270 | 271 | '@nodelib/fs.scandir@2.1.5': 272 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 273 | engines: {node: '>= 8'} 274 | 275 | '@nodelib/fs.stat@2.0.5': 276 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 277 | engines: {node: '>= 8'} 278 | 279 | '@nodelib/fs.walk@1.2.8': 280 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 281 | engines: {node: '>= 8'} 282 | 283 | '@poolofdeath20/eslint-config@0.4.2': 284 | resolution: {integrity: sha512-Q0l2gqbbqHm+3n5OCBukdK3aPbeq0V0bLGTK90AYy6vQch1WbAvZbSSFlGn9GY/bG5fyl+zQp75NvuKbNuSOXw==} 285 | peerDependencies: 286 | '@eslint/compat': ^1.2.4 287 | '@eslint/js': ^9.17.0 288 | '@next/eslint-plugin-next': ^15.1.2 289 | '@types/eslint__js': ^8.42.3 290 | '@typescript-eslint/eslint-plugin': ^8.18.2 291 | '@typescript-eslint/parser': ^8.18.2 292 | eslint-plugin-import: ^2.31.0 293 | eslint-plugin-jsx-a11y: ^6.10.2 294 | eslint-plugin-react: ^7.37.3 295 | eslint-plugin-react-hooks: ^5.1.0 296 | typescript-eslint: ^8.18.2 297 | 298 | '@poolofdeath20/prettier-config-generator@0.0.1': 299 | resolution: {integrity: sha512-atxxX3ZvScrgUZmTfqevDPCwkkobF+cUfkPOCqCAV+xg4xglwp7lCkWwFE9L5XBf7DDKojxClTSeeGVWSFno9w==} 300 | hasBin: true 301 | peerDependencies: 302 | prettier: '*' 303 | 304 | '@poolofdeath20/tsconfig@0.1.1': 305 | resolution: {integrity: sha512-ZFpyG6/oazSEURhv9Nj/AGa9gExWvzuKsWXrob6XM6m5jOOhJBBZLa2jof/9RhNfUmTn7eetG937980ZZyjs7A==} 306 | 307 | '@rollup/rollup-android-arm-eabi@4.37.0': 308 | resolution: {integrity: sha512-l7StVw6WAa8l3vA1ov80jyetOAEo1FtHvZDbzXDO/02Sq/QVvqlHkYoFwDJPIMj0GKiistsBudfx5tGFnwYWDQ==} 309 | cpu: [arm] 310 | os: [android] 311 | 312 | '@rollup/rollup-android-arm64@4.37.0': 313 | resolution: {integrity: sha512-6U3SlVyMxezt8Y+/iEBcbp945uZjJwjZimu76xoG7tO1av9VO691z8PkhzQ85ith2I8R2RddEPeSfcbyPfD4hA==} 314 | cpu: [arm64] 315 | os: [android] 316 | 317 | '@rollup/rollup-darwin-arm64@4.37.0': 318 | resolution: {integrity: sha512-+iTQ5YHuGmPt10NTzEyMPbayiNTcOZDWsbxZYR1ZnmLnZxG17ivrPSWFO9j6GalY0+gV3Jtwrrs12DBscxnlYA==} 319 | cpu: [arm64] 320 | os: [darwin] 321 | 322 | '@rollup/rollup-darwin-x64@4.37.0': 323 | resolution: {integrity: sha512-m8W2UbxLDcmRKVjgl5J/k4B8d7qX2EcJve3Sut7YGrQoPtCIQGPH5AMzuFvYRWZi0FVS0zEY4c8uttPfX6bwYQ==} 324 | cpu: [x64] 325 | os: [darwin] 326 | 327 | '@rollup/rollup-freebsd-arm64@4.37.0': 328 | resolution: {integrity: sha512-FOMXGmH15OmtQWEt174v9P1JqqhlgYge/bUjIbiVD1nI1NeJ30HYT9SJlZMqdo1uQFyt9cz748F1BHghWaDnVA==} 329 | cpu: [arm64] 330 | os: [freebsd] 331 | 332 | '@rollup/rollup-freebsd-x64@4.37.0': 333 | resolution: {integrity: sha512-SZMxNttjPKvV14Hjck5t70xS3l63sbVwl98g3FlVVx2YIDmfUIy29jQrsw06ewEYQ8lQSuY9mpAPlmgRD2iSsA==} 334 | cpu: [x64] 335 | os: [freebsd] 336 | 337 | '@rollup/rollup-linux-arm-gnueabihf@4.37.0': 338 | resolution: {integrity: sha512-hhAALKJPidCwZcj+g+iN+38SIOkhK2a9bqtJR+EtyxrKKSt1ynCBeqrQy31z0oWU6thRZzdx53hVgEbRkuI19w==} 339 | cpu: [arm] 340 | os: [linux] 341 | 342 | '@rollup/rollup-linux-arm-musleabihf@4.37.0': 343 | resolution: {integrity: sha512-jUb/kmn/Gd8epbHKEqkRAxq5c2EwRt0DqhSGWjPFxLeFvldFdHQs/n8lQ9x85oAeVb6bHcS8irhTJX2FCOd8Ag==} 344 | cpu: [arm] 345 | os: [linux] 346 | 347 | '@rollup/rollup-linux-arm64-gnu@4.37.0': 348 | resolution: {integrity: sha512-oNrJxcQT9IcbcmKlkF+Yz2tmOxZgG9D9GRq+1OE6XCQwCVwxixYAa38Z8qqPzQvzt1FCfmrHX03E0pWoXm1DqA==} 349 | cpu: [arm64] 350 | os: [linux] 351 | 352 | '@rollup/rollup-linux-arm64-musl@4.37.0': 353 | resolution: {integrity: sha512-pfxLBMls+28Ey2enpX3JvjEjaJMBX5XlPCZNGxj4kdJyHduPBXtxYeb8alo0a7bqOoWZW2uKynhHxF/MWoHaGQ==} 354 | cpu: [arm64] 355 | os: [linux] 356 | 357 | '@rollup/rollup-linux-loongarch64-gnu@4.37.0': 358 | resolution: {integrity: sha512-yCE0NnutTC/7IGUq/PUHmoeZbIwq3KRh02e9SfFh7Vmc1Z7atuJRYWhRME5fKgT8aS20mwi1RyChA23qSyRGpA==} 359 | cpu: [loong64] 360 | os: [linux] 361 | 362 | '@rollup/rollup-linux-powerpc64le-gnu@4.37.0': 363 | resolution: {integrity: sha512-NxcICptHk06E2Lh3a4Pu+2PEdZ6ahNHuK7o6Np9zcWkrBMuv21j10SQDJW3C9Yf/A/P7cutWoC/DptNLVsZ0VQ==} 364 | cpu: [ppc64] 365 | os: [linux] 366 | 367 | '@rollup/rollup-linux-riscv64-gnu@4.37.0': 368 | resolution: {integrity: sha512-PpWwHMPCVpFZLTfLq7EWJWvrmEuLdGn1GMYcm5MV7PaRgwCEYJAwiN94uBuZev0/J/hFIIJCsYw4nLmXA9J7Pw==} 369 | cpu: [riscv64] 370 | os: [linux] 371 | 372 | '@rollup/rollup-linux-riscv64-musl@4.37.0': 373 | resolution: {integrity: sha512-DTNwl6a3CfhGTAOYZ4KtYbdS8b+275LSLqJVJIrPa5/JuIufWWZ/QFvkxp52gpmguN95eujrM68ZG+zVxa8zHA==} 374 | cpu: [riscv64] 375 | os: [linux] 376 | 377 | '@rollup/rollup-linux-s390x-gnu@4.37.0': 378 | resolution: {integrity: sha512-hZDDU5fgWvDdHFuExN1gBOhCuzo/8TMpidfOR+1cPZJflcEzXdCy1LjnklQdW8/Et9sryOPJAKAQRw8Jq7Tg+A==} 379 | cpu: [s390x] 380 | os: [linux] 381 | 382 | '@rollup/rollup-linux-x64-gnu@4.37.0': 383 | resolution: {integrity: sha512-pKivGpgJM5g8dwj0ywBwe/HeVAUSuVVJhUTa/URXjxvoyTT/AxsLTAbkHkDHG7qQxLoW2s3apEIl26uUe08LVQ==} 384 | cpu: [x64] 385 | os: [linux] 386 | 387 | '@rollup/rollup-linux-x64-musl@4.37.0': 388 | resolution: {integrity: sha512-E2lPrLKE8sQbY/2bEkVTGDEk4/49UYRVWgj90MY8yPjpnGBQ+Xi1Qnr7b7UIWw1NOggdFQFOLZ8+5CzCiz143w==} 389 | cpu: [x64] 390 | os: [linux] 391 | 392 | '@rollup/rollup-win32-arm64-msvc@4.37.0': 393 | resolution: {integrity: sha512-Jm7biMazjNzTU4PrQtr7VS8ibeys9Pn29/1bm4ph7CP2kf21950LgN+BaE2mJ1QujnvOc6p54eWWiVvn05SOBg==} 394 | cpu: [arm64] 395 | os: [win32] 396 | 397 | '@rollup/rollup-win32-ia32-msvc@4.37.0': 398 | resolution: {integrity: sha512-e3/1SFm1OjefWICB2Ucstg2dxYDkDTZGDYgwufcbsxTHyqQps1UQf33dFEChBNmeSsTOyrjw2JJq0zbG5GF6RA==} 399 | cpu: [ia32] 400 | os: [win32] 401 | 402 | '@rollup/rollup-win32-x64-msvc@4.37.0': 403 | resolution: {integrity: sha512-LWbXUBwn/bcLx2sSsqy7pK5o+Nr+VCoRoAohfJ5C/aBio9nfJmGQqHAhU6pwxV/RmyTk5AqdySma7uwWGlmeuA==} 404 | cpu: [x64] 405 | os: [win32] 406 | 407 | '@rtsao/scc@1.1.0': 408 | resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} 409 | 410 | '@types/eslint@9.6.1': 411 | resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} 412 | 413 | '@types/eslint__js@8.42.3': 414 | resolution: {integrity: sha512-alfG737uhmPdnvkrLdZLcEKJ/B8s9Y4hrZ+YAdzUeoArBlSUERA2E87ROfOaS4jd/C45fzOoZzidLc1IPwLqOw==} 415 | 416 | '@types/estree@1.0.6': 417 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 418 | 419 | '@types/estree@1.0.7': 420 | resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} 421 | 422 | '@types/json-schema@7.0.15': 423 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 424 | 425 | '@types/json5@0.0.29': 426 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} 427 | 428 | '@types/node@22.13.14': 429 | resolution: {integrity: sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==} 430 | 431 | '@typescript-eslint/eslint-plugin@8.18.2': 432 | resolution: {integrity: sha512-adig4SzPLjeQ0Tm+jvsozSGiCliI2ajeURDGHjZ2llnA+A67HihCQ+a3amtPhUakd1GlwHxSRvzOZktbEvhPPg==} 433 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 434 | peerDependencies: 435 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 436 | eslint: ^8.57.0 || ^9.0.0 437 | typescript: '>=4.8.4 <5.8.0' 438 | 439 | '@typescript-eslint/parser@8.18.2': 440 | resolution: {integrity: sha512-y7tcq4StgxQD4mDr9+Jb26dZ+HTZ/SkfqpXSiqeUXZHxOUyjWDKsmwKhJ0/tApR08DgOhrFAoAhyB80/p3ViuA==} 441 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 442 | peerDependencies: 443 | eslint: ^8.57.0 || ^9.0.0 444 | typescript: '>=4.8.4 <5.8.0' 445 | 446 | '@typescript-eslint/scope-manager@8.18.2': 447 | resolution: {integrity: sha512-YJFSfbd0CJjy14r/EvWapYgV4R5CHzptssoag2M7y3Ra7XNta6GPAJPPP5KGB9j14viYXyrzRO5GkX7CRfo8/g==} 448 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 449 | 450 | '@typescript-eslint/type-utils@8.18.2': 451 | resolution: {integrity: sha512-AB/Wr1Lz31bzHfGm/jgbFR0VB0SML/hd2P1yxzKDM48YmP7vbyJNHRExUE/wZsQj2wUCvbWH8poNHFuxLqCTnA==} 452 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 453 | peerDependencies: 454 | eslint: ^8.57.0 || ^9.0.0 455 | typescript: '>=4.8.4 <5.8.0' 456 | 457 | '@typescript-eslint/types@8.18.2': 458 | resolution: {integrity: sha512-Z/zblEPp8cIvmEn6+tPDIHUbRu/0z5lqZ+NvolL5SvXWT5rQy7+Nch83M0++XzO0XrWRFWECgOAyE8bsJTl1GQ==} 459 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 460 | 461 | '@typescript-eslint/typescript-estree@8.18.2': 462 | resolution: {integrity: sha512-WXAVt595HjpmlfH4crSdM/1bcsqh+1weFRWIa9XMTx/XHZ9TCKMcr725tLYqWOgzKdeDrqVHxFotrvWcEsk2Tg==} 463 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 464 | peerDependencies: 465 | typescript: '>=4.8.4 <5.8.0' 466 | 467 | '@typescript-eslint/utils@8.18.2': 468 | resolution: {integrity: sha512-Cr4A0H7DtVIPkauj4sTSXVl+VBWewE9/o40KcF3TV9aqDEOWoXF3/+oRXNby3DYzZeCATvbdksYsGZzplwnK/Q==} 469 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 470 | peerDependencies: 471 | eslint: ^8.57.0 || ^9.0.0 472 | typescript: '>=4.8.4 <5.8.0' 473 | 474 | '@typescript-eslint/visitor-keys@8.18.2': 475 | resolution: {integrity: sha512-zORcwn4C3trOWiCqFQP1x6G3xTRyZ1LYydnj51cRnJ6hxBlr/cKPckk+PKPUw/fXmvfKTcw7bwY3w9izgx5jZw==} 476 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 477 | 478 | '@vitest/expect@3.0.9': 479 | resolution: {integrity: sha512-5eCqRItYgIML7NNVgJj6TVCmdzE7ZVgJhruW0ziSQV4V7PvLkDL1bBkBdcTs/VuIz0IxPb5da1IDSqc1TR9eig==} 480 | 481 | '@vitest/mocker@3.0.9': 482 | resolution: {integrity: sha512-ryERPIBOnvevAkTq+L1lD+DTFBRcjueL9lOUfXsLfwP92h4e+Heb+PjiqS3/OURWPtywfafK0kj++yDFjWUmrA==} 483 | peerDependencies: 484 | msw: ^2.4.9 485 | vite: ^5.0.0 || ^6.0.0 486 | peerDependenciesMeta: 487 | msw: 488 | optional: true 489 | vite: 490 | optional: true 491 | 492 | '@vitest/pretty-format@3.0.9': 493 | resolution: {integrity: sha512-OW9F8t2J3AwFEwENg3yMyKWweF7oRJlMyHOMIhO5F3n0+cgQAJZBjNgrF8dLwFTEXl5jUqBLXd9QyyKv8zEcmA==} 494 | 495 | '@vitest/runner@3.0.9': 496 | resolution: {integrity: sha512-NX9oUXgF9HPfJSwl8tUZCMP1oGx2+Sf+ru6d05QjzQz4OwWg0psEzwY6VexP2tTHWdOkhKHUIZH+fS6nA7jfOw==} 497 | 498 | '@vitest/snapshot@3.0.9': 499 | resolution: {integrity: sha512-AiLUiuZ0FuA+/8i19mTYd+re5jqjEc2jZbgJ2up0VY0Ddyyxg/uUtBDpIFAy4uzKaQxOW8gMgBdAJJ2ydhu39A==} 500 | 501 | '@vitest/spy@3.0.9': 502 | resolution: {integrity: sha512-/CcK2UDl0aQ2wtkp3YVWldrpLRNCfVcIOFGlVGKO4R5eajsH393Z1yiXLVQ7vWsj26JOEjeZI0x5sm5P4OGUNQ==} 503 | 504 | '@vitest/utils@3.0.9': 505 | resolution: {integrity: sha512-ilHM5fHhZ89MCp5aAaM9uhfl1c2JdxVxl3McqsdVyVNN6JffnEen8UMCdRTzOhGXNQGo5GNL9QugHrz727Wnng==} 506 | 507 | acorn-jsx@5.3.2: 508 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 509 | peerDependencies: 510 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 511 | 512 | acorn@8.14.1: 513 | resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} 514 | engines: {node: '>=0.4.0'} 515 | hasBin: true 516 | 517 | ajv@6.12.6: 518 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 519 | 520 | ansi-styles@4.3.0: 521 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 522 | engines: {node: '>=8'} 523 | 524 | argparse@2.0.1: 525 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 526 | 527 | aria-query@5.3.2: 528 | resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} 529 | engines: {node: '>= 0.4'} 530 | 531 | array-buffer-byte-length@1.0.2: 532 | resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} 533 | engines: {node: '>= 0.4'} 534 | 535 | array-includes@3.1.8: 536 | resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} 537 | engines: {node: '>= 0.4'} 538 | 539 | array.prototype.findlast@1.2.5: 540 | resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} 541 | engines: {node: '>= 0.4'} 542 | 543 | array.prototype.findlastindex@1.2.6: 544 | resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} 545 | engines: {node: '>= 0.4'} 546 | 547 | array.prototype.flat@1.3.3: 548 | resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} 549 | engines: {node: '>= 0.4'} 550 | 551 | array.prototype.flatmap@1.3.3: 552 | resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} 553 | engines: {node: '>= 0.4'} 554 | 555 | array.prototype.tosorted@1.1.4: 556 | resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} 557 | engines: {node: '>= 0.4'} 558 | 559 | arraybuffer.prototype.slice@1.0.4: 560 | resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} 561 | engines: {node: '>= 0.4'} 562 | 563 | assertion-error@2.0.1: 564 | resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 565 | engines: {node: '>=12'} 566 | 567 | ast-types-flow@0.0.8: 568 | resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} 569 | 570 | async-function@1.0.0: 571 | resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} 572 | engines: {node: '>= 0.4'} 573 | 574 | available-typed-arrays@1.0.7: 575 | resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} 576 | engines: {node: '>= 0.4'} 577 | 578 | axe-core@4.10.3: 579 | resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} 580 | engines: {node: '>=4'} 581 | 582 | axobject-query@4.1.0: 583 | resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} 584 | engines: {node: '>= 0.4'} 585 | 586 | balanced-match@1.0.2: 587 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 588 | 589 | brace-expansion@1.1.11: 590 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 591 | 592 | brace-expansion@2.0.1: 593 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 594 | 595 | braces@3.0.3: 596 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 597 | engines: {node: '>=8'} 598 | 599 | cac@6.7.14: 600 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 601 | engines: {node: '>=8'} 602 | 603 | call-bind-apply-helpers@1.0.2: 604 | resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} 605 | engines: {node: '>= 0.4'} 606 | 607 | call-bind@1.0.8: 608 | resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} 609 | engines: {node: '>= 0.4'} 610 | 611 | call-bound@1.0.4: 612 | resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} 613 | engines: {node: '>= 0.4'} 614 | 615 | callsites@3.1.0: 616 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 617 | engines: {node: '>=6'} 618 | 619 | chai@5.2.0: 620 | resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} 621 | engines: {node: '>=12'} 622 | 623 | chalk@4.1.2: 624 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 625 | engines: {node: '>=10'} 626 | 627 | check-error@2.1.1: 628 | resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} 629 | engines: {node: '>= 16'} 630 | 631 | color-convert@2.0.1: 632 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 633 | engines: {node: '>=7.0.0'} 634 | 635 | color-name@1.1.4: 636 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 637 | 638 | concat-map@0.0.1: 639 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 640 | 641 | cross-spawn@6.0.6: 642 | resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} 643 | engines: {node: '>=4.8'} 644 | 645 | cross-spawn@7.0.6: 646 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 647 | engines: {node: '>= 8'} 648 | 649 | damerau-levenshtein@1.0.8: 650 | resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} 651 | 652 | data-view-buffer@1.0.2: 653 | resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} 654 | engines: {node: '>= 0.4'} 655 | 656 | data-view-byte-length@1.0.2: 657 | resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} 658 | engines: {node: '>= 0.4'} 659 | 660 | data-view-byte-offset@1.0.1: 661 | resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} 662 | engines: {node: '>= 0.4'} 663 | 664 | debug@3.2.7: 665 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 666 | peerDependencies: 667 | supports-color: '*' 668 | peerDependenciesMeta: 669 | supports-color: 670 | optional: true 671 | 672 | debug@4.4.0: 673 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 674 | engines: {node: '>=6.0'} 675 | peerDependencies: 676 | supports-color: '*' 677 | peerDependenciesMeta: 678 | supports-color: 679 | optional: true 680 | 681 | deep-eql@5.0.2: 682 | resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} 683 | engines: {node: '>=6'} 684 | 685 | deep-is@0.1.4: 686 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 687 | 688 | define-data-property@1.1.4: 689 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} 690 | engines: {node: '>= 0.4'} 691 | 692 | define-properties@1.2.1: 693 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 694 | engines: {node: '>= 0.4'} 695 | 696 | doctrine@2.1.0: 697 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 698 | engines: {node: '>=0.10.0'} 699 | 700 | dunder-proto@1.0.1: 701 | resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} 702 | engines: {node: '>= 0.4'} 703 | 704 | emoji-regex@9.2.2: 705 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 706 | 707 | end-of-stream@1.4.4: 708 | resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} 709 | 710 | es-abstract@1.23.9: 711 | resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} 712 | engines: {node: '>= 0.4'} 713 | 714 | es-define-property@1.0.1: 715 | resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} 716 | engines: {node: '>= 0.4'} 717 | 718 | es-errors@1.3.0: 719 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 720 | engines: {node: '>= 0.4'} 721 | 722 | es-iterator-helpers@1.2.1: 723 | resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} 724 | engines: {node: '>= 0.4'} 725 | 726 | es-module-lexer@1.6.0: 727 | resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} 728 | 729 | es-object-atoms@1.1.1: 730 | resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} 731 | engines: {node: '>= 0.4'} 732 | 733 | es-set-tostringtag@2.1.0: 734 | resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} 735 | engines: {node: '>= 0.4'} 736 | 737 | es-shim-unscopables@1.1.0: 738 | resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} 739 | engines: {node: '>= 0.4'} 740 | 741 | es-to-primitive@1.3.0: 742 | resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} 743 | engines: {node: '>= 0.4'} 744 | 745 | esbuild@0.25.1: 746 | resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==} 747 | engines: {node: '>=18'} 748 | hasBin: true 749 | 750 | escape-string-regexp@4.0.0: 751 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 752 | engines: {node: '>=10'} 753 | 754 | eslint-import-resolver-node@0.3.9: 755 | resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} 756 | 757 | eslint-module-utils@2.12.0: 758 | resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} 759 | engines: {node: '>=4'} 760 | peerDependencies: 761 | '@typescript-eslint/parser': '*' 762 | eslint: '*' 763 | eslint-import-resolver-node: '*' 764 | eslint-import-resolver-typescript: '*' 765 | eslint-import-resolver-webpack: '*' 766 | peerDependenciesMeta: 767 | '@typescript-eslint/parser': 768 | optional: true 769 | eslint: 770 | optional: true 771 | eslint-import-resolver-node: 772 | optional: true 773 | eslint-import-resolver-typescript: 774 | optional: true 775 | eslint-import-resolver-webpack: 776 | optional: true 777 | 778 | eslint-plugin-import@2.31.0: 779 | resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} 780 | engines: {node: '>=4'} 781 | peerDependencies: 782 | '@typescript-eslint/parser': '*' 783 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 784 | peerDependenciesMeta: 785 | '@typescript-eslint/parser': 786 | optional: true 787 | 788 | eslint-plugin-jsx-a11y@6.10.2: 789 | resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} 790 | engines: {node: '>=4.0'} 791 | peerDependencies: 792 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 793 | 794 | eslint-plugin-react-hooks@5.1.0: 795 | resolution: {integrity: sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==} 796 | engines: {node: '>=10'} 797 | peerDependencies: 798 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 799 | 800 | eslint-plugin-react@7.37.3: 801 | resolution: {integrity: sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA==} 802 | engines: {node: '>=4'} 803 | peerDependencies: 804 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 805 | 806 | eslint-scope@8.3.0: 807 | resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} 808 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 809 | 810 | eslint-visitor-keys@3.4.3: 811 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 812 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 813 | 814 | eslint-visitor-keys@4.2.0: 815 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} 816 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 817 | 818 | eslint@9.23.0: 819 | resolution: {integrity: sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==} 820 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 821 | hasBin: true 822 | peerDependencies: 823 | jiti: '*' 824 | peerDependenciesMeta: 825 | jiti: 826 | optional: true 827 | 828 | espree@10.3.0: 829 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} 830 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 831 | 832 | esquery@1.6.0: 833 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 834 | engines: {node: '>=0.10'} 835 | 836 | esrecurse@4.3.0: 837 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 838 | engines: {node: '>=4.0'} 839 | 840 | estraverse@5.3.0: 841 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 842 | engines: {node: '>=4.0'} 843 | 844 | estree-walker@3.0.3: 845 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 846 | 847 | esutils@2.0.3: 848 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 849 | engines: {node: '>=0.10.0'} 850 | 851 | execa@1.0.0: 852 | resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} 853 | engines: {node: '>=6'} 854 | 855 | expect-type@1.2.0: 856 | resolution: {integrity: sha512-80F22aiJ3GLyVnS/B3HzgR6RelZVumzj9jkL0Rhz4h0xYbNW9PjlQz5h3J/SShErbXBc295vseR4/MIbVmUbeA==} 857 | engines: {node: '>=12.0.0'} 858 | 859 | fast-deep-equal@3.1.3: 860 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 861 | 862 | fast-glob@3.3.1: 863 | resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} 864 | engines: {node: '>=8.6.0'} 865 | 866 | fast-glob@3.3.3: 867 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 868 | engines: {node: '>=8.6.0'} 869 | 870 | fast-json-stable-stringify@2.1.0: 871 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 872 | 873 | fast-levenshtein@2.0.6: 874 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 875 | 876 | fastq@1.19.1: 877 | resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} 878 | 879 | file-entry-cache@8.0.0: 880 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 881 | engines: {node: '>=16.0.0'} 882 | 883 | fill-range@7.1.1: 884 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 885 | engines: {node: '>=8'} 886 | 887 | find-up@5.0.0: 888 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 889 | engines: {node: '>=10'} 890 | 891 | flat-cache@4.0.1: 892 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 893 | engines: {node: '>=16'} 894 | 895 | flatted@3.3.3: 896 | resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 897 | 898 | for-each@0.3.5: 899 | resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} 900 | engines: {node: '>= 0.4'} 901 | 902 | fs.realpath@1.0.0: 903 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 904 | 905 | fsevents@2.3.3: 906 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 907 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 908 | os: [darwin] 909 | 910 | function-bind@1.1.2: 911 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 912 | 913 | function.prototype.name@1.1.8: 914 | resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} 915 | engines: {node: '>= 0.4'} 916 | 917 | functions-have-names@1.2.3: 918 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 919 | 920 | get-intrinsic@1.3.0: 921 | resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} 922 | engines: {node: '>= 0.4'} 923 | 924 | get-proto@1.0.1: 925 | resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} 926 | engines: {node: '>= 0.4'} 927 | 928 | get-stream@4.1.0: 929 | resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} 930 | engines: {node: '>=6'} 931 | 932 | get-symbol-description@1.1.0: 933 | resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} 934 | engines: {node: '>= 0.4'} 935 | 936 | glob-parent@5.1.2: 937 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 938 | engines: {node: '>= 6'} 939 | 940 | glob-parent@6.0.2: 941 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 942 | engines: {node: '>=10.13.0'} 943 | 944 | glob@7.2.3: 945 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 946 | deprecated: Glob versions prior to v9 are no longer supported 947 | 948 | globals@14.0.0: 949 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 950 | engines: {node: '>=18'} 951 | 952 | globalthis@1.0.4: 953 | resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} 954 | engines: {node: '>= 0.4'} 955 | 956 | gopd@1.2.0: 957 | resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} 958 | engines: {node: '>= 0.4'} 959 | 960 | graphemer@1.4.0: 961 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 962 | 963 | has-bigints@1.1.0: 964 | resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} 965 | engines: {node: '>= 0.4'} 966 | 967 | has-flag@4.0.0: 968 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 969 | engines: {node: '>=8'} 970 | 971 | has-property-descriptors@1.0.2: 972 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 973 | 974 | has-proto@1.2.0: 975 | resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} 976 | engines: {node: '>= 0.4'} 977 | 978 | has-symbols@1.1.0: 979 | resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} 980 | engines: {node: '>= 0.4'} 981 | 982 | has-tostringtag@1.0.2: 983 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} 984 | engines: {node: '>= 0.4'} 985 | 986 | hasown@2.0.2: 987 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 988 | engines: {node: '>= 0.4'} 989 | 990 | ignore@5.3.2: 991 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 992 | engines: {node: '>= 4'} 993 | 994 | import-fresh@3.3.1: 995 | resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 996 | engines: {node: '>=6'} 997 | 998 | imurmurhash@0.1.4: 999 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1000 | engines: {node: '>=0.8.19'} 1001 | 1002 | inflight@1.0.6: 1003 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1004 | deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. 1005 | 1006 | inherits@2.0.4: 1007 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1008 | 1009 | internal-slot@1.1.0: 1010 | resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} 1011 | engines: {node: '>= 0.4'} 1012 | 1013 | interpret@1.4.0: 1014 | resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} 1015 | engines: {node: '>= 0.10'} 1016 | 1017 | is-array-buffer@3.0.5: 1018 | resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} 1019 | engines: {node: '>= 0.4'} 1020 | 1021 | is-async-function@2.1.1: 1022 | resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} 1023 | engines: {node: '>= 0.4'} 1024 | 1025 | is-bigint@1.1.0: 1026 | resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} 1027 | engines: {node: '>= 0.4'} 1028 | 1029 | is-boolean-object@1.2.2: 1030 | resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} 1031 | engines: {node: '>= 0.4'} 1032 | 1033 | is-callable@1.2.7: 1034 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 1035 | engines: {node: '>= 0.4'} 1036 | 1037 | is-core-module@2.16.1: 1038 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 1039 | engines: {node: '>= 0.4'} 1040 | 1041 | is-data-view@1.0.2: 1042 | resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} 1043 | engines: {node: '>= 0.4'} 1044 | 1045 | is-date-object@1.1.0: 1046 | resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} 1047 | engines: {node: '>= 0.4'} 1048 | 1049 | is-extglob@2.1.1: 1050 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1051 | engines: {node: '>=0.10.0'} 1052 | 1053 | is-finalizationregistry@1.1.1: 1054 | resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} 1055 | engines: {node: '>= 0.4'} 1056 | 1057 | is-generator-function@1.1.0: 1058 | resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} 1059 | engines: {node: '>= 0.4'} 1060 | 1061 | is-glob@4.0.3: 1062 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1063 | engines: {node: '>=0.10.0'} 1064 | 1065 | is-map@2.0.3: 1066 | resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} 1067 | engines: {node: '>= 0.4'} 1068 | 1069 | is-number-object@1.1.1: 1070 | resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} 1071 | engines: {node: '>= 0.4'} 1072 | 1073 | is-number@7.0.0: 1074 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1075 | engines: {node: '>=0.12.0'} 1076 | 1077 | is-regex@1.2.1: 1078 | resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} 1079 | engines: {node: '>= 0.4'} 1080 | 1081 | is-set@2.0.3: 1082 | resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} 1083 | engines: {node: '>= 0.4'} 1084 | 1085 | is-shared-array-buffer@1.0.4: 1086 | resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} 1087 | engines: {node: '>= 0.4'} 1088 | 1089 | is-stream@1.1.0: 1090 | resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} 1091 | engines: {node: '>=0.10.0'} 1092 | 1093 | is-string@1.1.1: 1094 | resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} 1095 | engines: {node: '>= 0.4'} 1096 | 1097 | is-symbol@1.1.1: 1098 | resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} 1099 | engines: {node: '>= 0.4'} 1100 | 1101 | is-typed-array@1.1.15: 1102 | resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} 1103 | engines: {node: '>= 0.4'} 1104 | 1105 | is-weakmap@2.0.2: 1106 | resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} 1107 | engines: {node: '>= 0.4'} 1108 | 1109 | is-weakref@1.1.1: 1110 | resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} 1111 | engines: {node: '>= 0.4'} 1112 | 1113 | is-weakset@2.0.4: 1114 | resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} 1115 | engines: {node: '>= 0.4'} 1116 | 1117 | isarray@2.0.5: 1118 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 1119 | 1120 | isexe@2.0.0: 1121 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1122 | 1123 | iterator.prototype@1.1.5: 1124 | resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} 1125 | engines: {node: '>= 0.4'} 1126 | 1127 | js-tokens@4.0.0: 1128 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1129 | 1130 | js-yaml@4.1.0: 1131 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1132 | hasBin: true 1133 | 1134 | json-buffer@3.0.1: 1135 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1136 | 1137 | json-schema-traverse@0.4.1: 1138 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1139 | 1140 | json-stable-stringify-without-jsonify@1.0.1: 1141 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1142 | 1143 | json5@1.0.2: 1144 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} 1145 | hasBin: true 1146 | 1147 | jsx-ast-utils@3.3.5: 1148 | resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} 1149 | engines: {node: '>=4.0'} 1150 | 1151 | keyv@4.5.4: 1152 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1153 | 1154 | language-subtag-registry@0.3.23: 1155 | resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} 1156 | 1157 | language-tags@1.0.9: 1158 | resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} 1159 | engines: {node: '>=0.10'} 1160 | 1161 | levn@0.4.1: 1162 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1163 | engines: {node: '>= 0.8.0'} 1164 | 1165 | locate-path@6.0.0: 1166 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1167 | engines: {node: '>=10'} 1168 | 1169 | lodash.merge@4.6.2: 1170 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1171 | 1172 | loose-envify@1.4.0: 1173 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1174 | hasBin: true 1175 | 1176 | loupe@3.1.3: 1177 | resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} 1178 | 1179 | magic-string@0.30.17: 1180 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} 1181 | 1182 | math-intrinsics@1.1.0: 1183 | resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} 1184 | engines: {node: '>= 0.4'} 1185 | 1186 | merge2@1.4.1: 1187 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1188 | engines: {node: '>= 8'} 1189 | 1190 | micromatch@4.0.8: 1191 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1192 | engines: {node: '>=8.6'} 1193 | 1194 | minimatch@3.1.2: 1195 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1196 | 1197 | minimatch@9.0.5: 1198 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1199 | engines: {node: '>=16 || 14 >=14.17'} 1200 | 1201 | minimist@1.2.8: 1202 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1203 | 1204 | ms@2.1.3: 1205 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1206 | 1207 | nanoid@3.3.11: 1208 | resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 1209 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1210 | hasBin: true 1211 | 1212 | natural-compare@1.4.0: 1213 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1214 | 1215 | nice-try@1.0.5: 1216 | resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} 1217 | 1218 | node-package-helper@https://codeload.github.com/GervinFung/node-package-helper/tar.gz/b43bb915e84cc79e7ec5e7e93ef35e60640f67bd: 1219 | resolution: {tarball: https://codeload.github.com/GervinFung/node-package-helper/tar.gz/b43bb915e84cc79e7ec5e7e93ef35e60640f67bd} 1220 | version: 0.2.2 1221 | hasBin: true 1222 | 1223 | npm-run-path@2.0.2: 1224 | resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} 1225 | engines: {node: '>=4'} 1226 | 1227 | object-assign@4.1.1: 1228 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1229 | engines: {node: '>=0.10.0'} 1230 | 1231 | object-inspect@1.13.4: 1232 | resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} 1233 | engines: {node: '>= 0.4'} 1234 | 1235 | object-keys@1.1.1: 1236 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1237 | engines: {node: '>= 0.4'} 1238 | 1239 | object.assign@4.1.7: 1240 | resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} 1241 | engines: {node: '>= 0.4'} 1242 | 1243 | object.entries@1.1.9: 1244 | resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} 1245 | engines: {node: '>= 0.4'} 1246 | 1247 | object.fromentries@2.0.8: 1248 | resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} 1249 | engines: {node: '>= 0.4'} 1250 | 1251 | object.groupby@1.0.3: 1252 | resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} 1253 | engines: {node: '>= 0.4'} 1254 | 1255 | object.values@1.2.1: 1256 | resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} 1257 | engines: {node: '>= 0.4'} 1258 | 1259 | once@1.4.0: 1260 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1261 | 1262 | optionator@0.9.4: 1263 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1264 | engines: {node: '>= 0.8.0'} 1265 | 1266 | own-keys@1.0.1: 1267 | resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} 1268 | engines: {node: '>= 0.4'} 1269 | 1270 | p-finally@1.0.0: 1271 | resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} 1272 | engines: {node: '>=4'} 1273 | 1274 | p-limit@3.1.0: 1275 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1276 | engines: {node: '>=10'} 1277 | 1278 | p-locate@5.0.0: 1279 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1280 | engines: {node: '>=10'} 1281 | 1282 | parent-module@1.0.1: 1283 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1284 | engines: {node: '>=6'} 1285 | 1286 | path-exists@4.0.0: 1287 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1288 | engines: {node: '>=8'} 1289 | 1290 | path-is-absolute@1.0.1: 1291 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1292 | engines: {node: '>=0.10.0'} 1293 | 1294 | path-key@2.0.1: 1295 | resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} 1296 | engines: {node: '>=4'} 1297 | 1298 | path-key@3.1.1: 1299 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1300 | engines: {node: '>=8'} 1301 | 1302 | path-parse@1.0.7: 1303 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1304 | 1305 | pathe@2.0.3: 1306 | resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 1307 | 1308 | pathval@2.0.0: 1309 | resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} 1310 | engines: {node: '>= 14.16'} 1311 | 1312 | picocolors@1.1.1: 1313 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1314 | 1315 | picomatch@2.3.1: 1316 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1317 | engines: {node: '>=8.6'} 1318 | 1319 | possible-typed-array-names@1.1.0: 1320 | resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} 1321 | engines: {node: '>= 0.4'} 1322 | 1323 | postcss@8.5.3: 1324 | resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} 1325 | engines: {node: ^10 || ^12 || >=14} 1326 | 1327 | prelude-ls@1.2.1: 1328 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1329 | engines: {node: '>= 0.8.0'} 1330 | 1331 | prettier@3.5.3: 1332 | resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} 1333 | engines: {node: '>=14'} 1334 | hasBin: true 1335 | 1336 | prop-types@15.8.1: 1337 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} 1338 | 1339 | pump@3.0.2: 1340 | resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} 1341 | 1342 | punycode@2.3.1: 1343 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1344 | engines: {node: '>=6'} 1345 | 1346 | queue-microtask@1.2.3: 1347 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1348 | 1349 | react-is@16.13.1: 1350 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} 1351 | 1352 | rechoir@0.6.2: 1353 | resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} 1354 | engines: {node: '>= 0.10'} 1355 | 1356 | reflect.getprototypeof@1.0.10: 1357 | resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} 1358 | engines: {node: '>= 0.4'} 1359 | 1360 | regexp.prototype.flags@1.5.4: 1361 | resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} 1362 | engines: {node: '>= 0.4'} 1363 | 1364 | resolve-from@4.0.0: 1365 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1366 | engines: {node: '>=4'} 1367 | 1368 | resolve@1.22.10: 1369 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} 1370 | engines: {node: '>= 0.4'} 1371 | hasBin: true 1372 | 1373 | resolve@2.0.0-next.5: 1374 | resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} 1375 | hasBin: true 1376 | 1377 | reusify@1.1.0: 1378 | resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} 1379 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1380 | 1381 | rollup@4.37.0: 1382 | resolution: {integrity: sha512-iAtQy/L4QFU+rTJ1YUjXqJOJzuwEghqWzCEYD2FEghT7Gsy1VdABntrO4CLopA5IkflTyqNiLNwPcOJ3S7UKLg==} 1383 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1384 | hasBin: true 1385 | 1386 | run-parallel@1.2.0: 1387 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1388 | 1389 | safe-array-concat@1.1.3: 1390 | resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} 1391 | engines: {node: '>=0.4'} 1392 | 1393 | safe-push-apply@1.0.0: 1394 | resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} 1395 | engines: {node: '>= 0.4'} 1396 | 1397 | safe-regex-test@1.1.0: 1398 | resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} 1399 | engines: {node: '>= 0.4'} 1400 | 1401 | semver@5.7.2: 1402 | resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} 1403 | hasBin: true 1404 | 1405 | semver@6.3.1: 1406 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1407 | hasBin: true 1408 | 1409 | semver@7.7.1: 1410 | resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} 1411 | engines: {node: '>=10'} 1412 | hasBin: true 1413 | 1414 | set-function-length@1.2.2: 1415 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} 1416 | engines: {node: '>= 0.4'} 1417 | 1418 | set-function-name@2.0.2: 1419 | resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} 1420 | engines: {node: '>= 0.4'} 1421 | 1422 | set-proto@1.0.0: 1423 | resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} 1424 | engines: {node: '>= 0.4'} 1425 | 1426 | shebang-command@1.2.0: 1427 | resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} 1428 | engines: {node: '>=0.10.0'} 1429 | 1430 | shebang-command@2.0.0: 1431 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1432 | engines: {node: '>=8'} 1433 | 1434 | shebang-regex@1.0.0: 1435 | resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} 1436 | engines: {node: '>=0.10.0'} 1437 | 1438 | shebang-regex@3.0.0: 1439 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1440 | engines: {node: '>=8'} 1441 | 1442 | shelljs@0.8.5: 1443 | resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} 1444 | engines: {node: '>=4'} 1445 | hasBin: true 1446 | 1447 | shelljs@0.9.2: 1448 | resolution: {integrity: sha512-S3I64fEiKgTZzKCC46zT/Ib9meqofLrQVbpSswtjFfAVDW+AZ54WTnAM/3/yENoxz/V1Cy6u3kiiEbQ4DNphvw==} 1449 | engines: {node: '>=18'} 1450 | hasBin: true 1451 | 1452 | shx@0.3.4: 1453 | resolution: {integrity: sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==} 1454 | engines: {node: '>=6'} 1455 | hasBin: true 1456 | 1457 | shx@0.4.0: 1458 | resolution: {integrity: sha512-Z0KixSIlGPpijKgcH6oCMCbltPImvaKy0sGH8AkLRXw1KyzpKtaCTizP2xen+hNDqVF4xxgvA0KXSb9o4Q6hnA==} 1459 | engines: {node: '>=18'} 1460 | hasBin: true 1461 | 1462 | side-channel-list@1.0.0: 1463 | resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} 1464 | engines: {node: '>= 0.4'} 1465 | 1466 | side-channel-map@1.0.1: 1467 | resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} 1468 | engines: {node: '>= 0.4'} 1469 | 1470 | side-channel-weakmap@1.0.2: 1471 | resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} 1472 | engines: {node: '>= 0.4'} 1473 | 1474 | side-channel@1.1.0: 1475 | resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} 1476 | engines: {node: '>= 0.4'} 1477 | 1478 | siginfo@2.0.0: 1479 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 1480 | 1481 | signal-exit@3.0.7: 1482 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 1483 | 1484 | source-map-js@1.2.1: 1485 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1486 | engines: {node: '>=0.10.0'} 1487 | 1488 | stackback@0.0.2: 1489 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 1490 | 1491 | std-env@3.8.1: 1492 | resolution: {integrity: sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==} 1493 | 1494 | string.prototype.includes@2.0.1: 1495 | resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} 1496 | engines: {node: '>= 0.4'} 1497 | 1498 | string.prototype.matchall@4.0.12: 1499 | resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} 1500 | engines: {node: '>= 0.4'} 1501 | 1502 | string.prototype.repeat@1.0.0: 1503 | resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} 1504 | 1505 | string.prototype.trim@1.2.10: 1506 | resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} 1507 | engines: {node: '>= 0.4'} 1508 | 1509 | string.prototype.trimend@1.0.9: 1510 | resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} 1511 | engines: {node: '>= 0.4'} 1512 | 1513 | string.prototype.trimstart@1.0.8: 1514 | resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} 1515 | engines: {node: '>= 0.4'} 1516 | 1517 | strip-bom@3.0.0: 1518 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 1519 | engines: {node: '>=4'} 1520 | 1521 | strip-eof@1.0.0: 1522 | resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} 1523 | engines: {node: '>=0.10.0'} 1524 | 1525 | strip-json-comments@3.1.1: 1526 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1527 | engines: {node: '>=8'} 1528 | 1529 | supports-color@7.2.0: 1530 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1531 | engines: {node: '>=8'} 1532 | 1533 | supports-preserve-symlinks-flag@1.0.0: 1534 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1535 | engines: {node: '>= 0.4'} 1536 | 1537 | tinybench@2.9.0: 1538 | resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} 1539 | 1540 | tinyexec@0.3.2: 1541 | resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} 1542 | 1543 | tinypool@1.0.2: 1544 | resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} 1545 | engines: {node: ^18.0.0 || >=20.0.0} 1546 | 1547 | tinyrainbow@2.0.0: 1548 | resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} 1549 | engines: {node: '>=14.0.0'} 1550 | 1551 | tinyspy@3.0.2: 1552 | resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} 1553 | engines: {node: '>=14.0.0'} 1554 | 1555 | to-regex-range@5.0.1: 1556 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1557 | engines: {node: '>=8.0'} 1558 | 1559 | ts-add-js-extension@1.6.5: 1560 | resolution: {integrity: sha512-ijPXEuexDZorzkqBRGwYSS9tyqJYhhCvK92qIRussMnQD7FC4b38aL58XDI5OhLMQUR5fAyA9FCQmV+RCRfukA==} 1561 | hasBin: true 1562 | 1563 | ts-api-utils@1.4.3: 1564 | resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} 1565 | engines: {node: '>=16'} 1566 | peerDependencies: 1567 | typescript: '>=4.2.0' 1568 | 1569 | tsconfig-paths@3.15.0: 1570 | resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} 1571 | 1572 | type-check@0.4.0: 1573 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1574 | engines: {node: '>= 0.8.0'} 1575 | 1576 | typed-array-buffer@1.0.3: 1577 | resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} 1578 | engines: {node: '>= 0.4'} 1579 | 1580 | typed-array-byte-length@1.0.3: 1581 | resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} 1582 | engines: {node: '>= 0.4'} 1583 | 1584 | typed-array-byte-offset@1.0.4: 1585 | resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} 1586 | engines: {node: '>= 0.4'} 1587 | 1588 | typed-array-length@1.0.7: 1589 | resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} 1590 | engines: {node: '>= 0.4'} 1591 | 1592 | typescript-eslint@8.18.2: 1593 | resolution: {integrity: sha512-KuXezG6jHkvC3MvizeXgupZzaG5wjhU3yE8E7e6viOvAvD9xAWYp8/vy0WULTGe9DYDWcQu7aW03YIV3mSitrQ==} 1594 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1595 | peerDependencies: 1596 | eslint: ^8.57.0 || ^9.0.0 1597 | typescript: '>=4.8.4 <5.8.0' 1598 | 1599 | typescript@5.8.2: 1600 | resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} 1601 | engines: {node: '>=14.17'} 1602 | hasBin: true 1603 | 1604 | unbox-primitive@1.1.0: 1605 | resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} 1606 | engines: {node: '>= 0.4'} 1607 | 1608 | undici-types@6.20.0: 1609 | resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} 1610 | 1611 | uri-js@4.4.1: 1612 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1613 | 1614 | vite-node@3.0.9: 1615 | resolution: {integrity: sha512-w3Gdx7jDcuT9cNn9jExXgOyKmf5UOTb6WMHz8LGAm54eS1Elf5OuBhCxl6zJxGhEeIkgsE1WbHuoL0mj/UXqXg==} 1616 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1617 | hasBin: true 1618 | 1619 | vite@6.2.3: 1620 | resolution: {integrity: sha512-IzwM54g4y9JA/xAeBPNaDXiBF8Jsgl3VBQ2YQ/wOY6fyW3xMdSoltIV3Bo59DErdqdE6RxUfv8W69DvUorE4Eg==} 1621 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1622 | hasBin: true 1623 | peerDependencies: 1624 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 1625 | jiti: '>=1.21.0' 1626 | less: '*' 1627 | lightningcss: ^1.21.0 1628 | sass: '*' 1629 | sass-embedded: '*' 1630 | stylus: '*' 1631 | sugarss: '*' 1632 | terser: ^5.16.0 1633 | tsx: ^4.8.1 1634 | yaml: ^2.4.2 1635 | peerDependenciesMeta: 1636 | '@types/node': 1637 | optional: true 1638 | jiti: 1639 | optional: true 1640 | less: 1641 | optional: true 1642 | lightningcss: 1643 | optional: true 1644 | sass: 1645 | optional: true 1646 | sass-embedded: 1647 | optional: true 1648 | stylus: 1649 | optional: true 1650 | sugarss: 1651 | optional: true 1652 | terser: 1653 | optional: true 1654 | tsx: 1655 | optional: true 1656 | yaml: 1657 | optional: true 1658 | 1659 | vitest@3.0.9: 1660 | resolution: {integrity: sha512-BbcFDqNyBlfSpATmTtXOAOj71RNKDDvjBM/uPfnxxVGrG+FSH2RQIwgeEngTaTkuU/h0ScFvf+tRcKfYXzBybQ==} 1661 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1662 | hasBin: true 1663 | peerDependencies: 1664 | '@edge-runtime/vm': '*' 1665 | '@types/debug': ^4.1.12 1666 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 1667 | '@vitest/browser': 3.0.9 1668 | '@vitest/ui': 3.0.9 1669 | happy-dom: '*' 1670 | jsdom: '*' 1671 | peerDependenciesMeta: 1672 | '@edge-runtime/vm': 1673 | optional: true 1674 | '@types/debug': 1675 | optional: true 1676 | '@types/node': 1677 | optional: true 1678 | '@vitest/browser': 1679 | optional: true 1680 | '@vitest/ui': 1681 | optional: true 1682 | happy-dom: 1683 | optional: true 1684 | jsdom: 1685 | optional: true 1686 | 1687 | which-boxed-primitive@1.1.1: 1688 | resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} 1689 | engines: {node: '>= 0.4'} 1690 | 1691 | which-builtin-type@1.2.1: 1692 | resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} 1693 | engines: {node: '>= 0.4'} 1694 | 1695 | which-collection@1.0.2: 1696 | resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} 1697 | engines: {node: '>= 0.4'} 1698 | 1699 | which-typed-array@1.1.19: 1700 | resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} 1701 | engines: {node: '>= 0.4'} 1702 | 1703 | which@1.3.1: 1704 | resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} 1705 | hasBin: true 1706 | 1707 | which@2.0.2: 1708 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1709 | engines: {node: '>= 8'} 1710 | hasBin: true 1711 | 1712 | why-is-node-running@2.3.0: 1713 | resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} 1714 | engines: {node: '>=8'} 1715 | hasBin: true 1716 | 1717 | word-wrap@1.2.5: 1718 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1719 | engines: {node: '>=0.10.0'} 1720 | 1721 | wrappy@1.0.2: 1722 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1723 | 1724 | yocto-queue@0.1.0: 1725 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1726 | engines: {node: '>=10'} 1727 | 1728 | snapshots: 1729 | 1730 | '@esbuild/aix-ppc64@0.25.1': 1731 | optional: true 1732 | 1733 | '@esbuild/android-arm64@0.25.1': 1734 | optional: true 1735 | 1736 | '@esbuild/android-arm@0.25.1': 1737 | optional: true 1738 | 1739 | '@esbuild/android-x64@0.25.1': 1740 | optional: true 1741 | 1742 | '@esbuild/darwin-arm64@0.25.1': 1743 | optional: true 1744 | 1745 | '@esbuild/darwin-x64@0.25.1': 1746 | optional: true 1747 | 1748 | '@esbuild/freebsd-arm64@0.25.1': 1749 | optional: true 1750 | 1751 | '@esbuild/freebsd-x64@0.25.1': 1752 | optional: true 1753 | 1754 | '@esbuild/linux-arm64@0.25.1': 1755 | optional: true 1756 | 1757 | '@esbuild/linux-arm@0.25.1': 1758 | optional: true 1759 | 1760 | '@esbuild/linux-ia32@0.25.1': 1761 | optional: true 1762 | 1763 | '@esbuild/linux-loong64@0.25.1': 1764 | optional: true 1765 | 1766 | '@esbuild/linux-mips64el@0.25.1': 1767 | optional: true 1768 | 1769 | '@esbuild/linux-ppc64@0.25.1': 1770 | optional: true 1771 | 1772 | '@esbuild/linux-riscv64@0.25.1': 1773 | optional: true 1774 | 1775 | '@esbuild/linux-s390x@0.25.1': 1776 | optional: true 1777 | 1778 | '@esbuild/linux-x64@0.25.1': 1779 | optional: true 1780 | 1781 | '@esbuild/netbsd-arm64@0.25.1': 1782 | optional: true 1783 | 1784 | '@esbuild/netbsd-x64@0.25.1': 1785 | optional: true 1786 | 1787 | '@esbuild/openbsd-arm64@0.25.1': 1788 | optional: true 1789 | 1790 | '@esbuild/openbsd-x64@0.25.1': 1791 | optional: true 1792 | 1793 | '@esbuild/sunos-x64@0.25.1': 1794 | optional: true 1795 | 1796 | '@esbuild/win32-arm64@0.25.1': 1797 | optional: true 1798 | 1799 | '@esbuild/win32-ia32@0.25.1': 1800 | optional: true 1801 | 1802 | '@esbuild/win32-x64@0.25.1': 1803 | optional: true 1804 | 1805 | '@eslint-community/eslint-utils@4.5.1(eslint@9.23.0)': 1806 | dependencies: 1807 | eslint: 9.23.0 1808 | eslint-visitor-keys: 3.4.3 1809 | 1810 | '@eslint-community/regexpp@4.12.1': {} 1811 | 1812 | '@eslint/compat@1.2.4(eslint@9.23.0)': 1813 | optionalDependencies: 1814 | eslint: 9.23.0 1815 | 1816 | '@eslint/config-array@0.19.2': 1817 | dependencies: 1818 | '@eslint/object-schema': 2.1.6 1819 | debug: 4.4.0 1820 | minimatch: 3.1.2 1821 | transitivePeerDependencies: 1822 | - supports-color 1823 | 1824 | '@eslint/config-helpers@0.2.0': {} 1825 | 1826 | '@eslint/core@0.12.0': 1827 | dependencies: 1828 | '@types/json-schema': 7.0.15 1829 | 1830 | '@eslint/eslintrc@3.3.1': 1831 | dependencies: 1832 | ajv: 6.12.6 1833 | debug: 4.4.0 1834 | espree: 10.3.0 1835 | globals: 14.0.0 1836 | ignore: 5.3.2 1837 | import-fresh: 3.3.1 1838 | js-yaml: 4.1.0 1839 | minimatch: 3.1.2 1840 | strip-json-comments: 3.1.1 1841 | transitivePeerDependencies: 1842 | - supports-color 1843 | 1844 | '@eslint/js@9.23.0': {} 1845 | 1846 | '@eslint/object-schema@2.1.6': {} 1847 | 1848 | '@eslint/plugin-kit@0.2.7': 1849 | dependencies: 1850 | '@eslint/core': 0.12.0 1851 | levn: 0.4.1 1852 | 1853 | '@humanfs/core@0.19.1': {} 1854 | 1855 | '@humanfs/node@0.16.6': 1856 | dependencies: 1857 | '@humanfs/core': 0.19.1 1858 | '@humanwhocodes/retry': 0.3.1 1859 | 1860 | '@humanwhocodes/module-importer@1.0.1': {} 1861 | 1862 | '@humanwhocodes/retry@0.3.1': {} 1863 | 1864 | '@humanwhocodes/retry@0.4.2': {} 1865 | 1866 | '@jridgewell/sourcemap-codec@1.5.0': {} 1867 | 1868 | '@next/eslint-plugin-next@15.1.2': 1869 | dependencies: 1870 | fast-glob: 3.3.1 1871 | 1872 | '@nodelib/fs.scandir@2.1.5': 1873 | dependencies: 1874 | '@nodelib/fs.stat': 2.0.5 1875 | run-parallel: 1.2.0 1876 | 1877 | '@nodelib/fs.stat@2.0.5': {} 1878 | 1879 | '@nodelib/fs.walk@1.2.8': 1880 | dependencies: 1881 | '@nodelib/fs.scandir': 2.1.5 1882 | fastq: 1.19.1 1883 | 1884 | '@poolofdeath20/eslint-config@0.4.2(@eslint/compat@1.2.4(eslint@9.23.0))(@eslint/js@9.23.0)(@next/eslint-plugin-next@15.1.2)(@types/eslint__js@8.42.3)(@typescript-eslint/eslint-plugin@8.18.2(@typescript-eslint/parser@8.18.2(eslint@9.23.0)(typescript@5.8.2))(eslint@9.23.0)(typescript@5.8.2))(@typescript-eslint/parser@8.18.2(eslint@9.23.0)(typescript@5.8.2))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.18.2(eslint@9.23.0)(typescript@5.8.2))(eslint@9.23.0))(eslint-plugin-jsx-a11y@6.10.2(eslint@9.23.0))(eslint-plugin-react-hooks@5.1.0(eslint@9.23.0))(eslint-plugin-react@7.37.3(eslint@9.23.0))(typescript-eslint@8.18.2(eslint@9.23.0)(typescript@5.8.2))': 1885 | dependencies: 1886 | '@eslint/compat': 1.2.4(eslint@9.23.0) 1887 | '@eslint/js': 9.23.0 1888 | '@next/eslint-plugin-next': 15.1.2 1889 | '@types/eslint__js': 8.42.3 1890 | '@typescript-eslint/eslint-plugin': 8.18.2(@typescript-eslint/parser@8.18.2(eslint@9.23.0)(typescript@5.8.2))(eslint@9.23.0)(typescript@5.8.2) 1891 | '@typescript-eslint/parser': 8.18.2(eslint@9.23.0)(typescript@5.8.2) 1892 | eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.18.2(eslint@9.23.0)(typescript@5.8.2))(eslint@9.23.0) 1893 | eslint-plugin-jsx-a11y: 6.10.2(eslint@9.23.0) 1894 | eslint-plugin-react: 7.37.3(eslint@9.23.0) 1895 | eslint-plugin-react-hooks: 5.1.0(eslint@9.23.0) 1896 | typescript-eslint: 8.18.2(eslint@9.23.0)(typescript@5.8.2) 1897 | 1898 | '@poolofdeath20/prettier-config-generator@0.0.1(prettier@3.5.3)': 1899 | dependencies: 1900 | prettier: 3.5.3 1901 | 1902 | '@poolofdeath20/tsconfig@0.1.1': {} 1903 | 1904 | '@rollup/rollup-android-arm-eabi@4.37.0': 1905 | optional: true 1906 | 1907 | '@rollup/rollup-android-arm64@4.37.0': 1908 | optional: true 1909 | 1910 | '@rollup/rollup-darwin-arm64@4.37.0': 1911 | optional: true 1912 | 1913 | '@rollup/rollup-darwin-x64@4.37.0': 1914 | optional: true 1915 | 1916 | '@rollup/rollup-freebsd-arm64@4.37.0': 1917 | optional: true 1918 | 1919 | '@rollup/rollup-freebsd-x64@4.37.0': 1920 | optional: true 1921 | 1922 | '@rollup/rollup-linux-arm-gnueabihf@4.37.0': 1923 | optional: true 1924 | 1925 | '@rollup/rollup-linux-arm-musleabihf@4.37.0': 1926 | optional: true 1927 | 1928 | '@rollup/rollup-linux-arm64-gnu@4.37.0': 1929 | optional: true 1930 | 1931 | '@rollup/rollup-linux-arm64-musl@4.37.0': 1932 | optional: true 1933 | 1934 | '@rollup/rollup-linux-loongarch64-gnu@4.37.0': 1935 | optional: true 1936 | 1937 | '@rollup/rollup-linux-powerpc64le-gnu@4.37.0': 1938 | optional: true 1939 | 1940 | '@rollup/rollup-linux-riscv64-gnu@4.37.0': 1941 | optional: true 1942 | 1943 | '@rollup/rollup-linux-riscv64-musl@4.37.0': 1944 | optional: true 1945 | 1946 | '@rollup/rollup-linux-s390x-gnu@4.37.0': 1947 | optional: true 1948 | 1949 | '@rollup/rollup-linux-x64-gnu@4.37.0': 1950 | optional: true 1951 | 1952 | '@rollup/rollup-linux-x64-musl@4.37.0': 1953 | optional: true 1954 | 1955 | '@rollup/rollup-win32-arm64-msvc@4.37.0': 1956 | optional: true 1957 | 1958 | '@rollup/rollup-win32-ia32-msvc@4.37.0': 1959 | optional: true 1960 | 1961 | '@rollup/rollup-win32-x64-msvc@4.37.0': 1962 | optional: true 1963 | 1964 | '@rtsao/scc@1.1.0': {} 1965 | 1966 | '@types/eslint@9.6.1': 1967 | dependencies: 1968 | '@types/estree': 1.0.7 1969 | '@types/json-schema': 7.0.15 1970 | 1971 | '@types/eslint__js@8.42.3': 1972 | dependencies: 1973 | '@types/eslint': 9.6.1 1974 | 1975 | '@types/estree@1.0.6': {} 1976 | 1977 | '@types/estree@1.0.7': {} 1978 | 1979 | '@types/json-schema@7.0.15': {} 1980 | 1981 | '@types/json5@0.0.29': {} 1982 | 1983 | '@types/node@22.13.14': 1984 | dependencies: 1985 | undici-types: 6.20.0 1986 | 1987 | '@typescript-eslint/eslint-plugin@8.18.2(@typescript-eslint/parser@8.18.2(eslint@9.23.0)(typescript@5.8.2))(eslint@9.23.0)(typescript@5.8.2)': 1988 | dependencies: 1989 | '@eslint-community/regexpp': 4.12.1 1990 | '@typescript-eslint/parser': 8.18.2(eslint@9.23.0)(typescript@5.8.2) 1991 | '@typescript-eslint/scope-manager': 8.18.2 1992 | '@typescript-eslint/type-utils': 8.18.2(eslint@9.23.0)(typescript@5.8.2) 1993 | '@typescript-eslint/utils': 8.18.2(eslint@9.23.0)(typescript@5.8.2) 1994 | '@typescript-eslint/visitor-keys': 8.18.2 1995 | eslint: 9.23.0 1996 | graphemer: 1.4.0 1997 | ignore: 5.3.2 1998 | natural-compare: 1.4.0 1999 | ts-api-utils: 1.4.3(typescript@5.8.2) 2000 | typescript: 5.8.2 2001 | transitivePeerDependencies: 2002 | - supports-color 2003 | 2004 | '@typescript-eslint/parser@8.18.2(eslint@9.23.0)(typescript@5.8.2)': 2005 | dependencies: 2006 | '@typescript-eslint/scope-manager': 8.18.2 2007 | '@typescript-eslint/types': 8.18.2 2008 | '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.8.2) 2009 | '@typescript-eslint/visitor-keys': 8.18.2 2010 | debug: 4.4.0 2011 | eslint: 9.23.0 2012 | typescript: 5.8.2 2013 | transitivePeerDependencies: 2014 | - supports-color 2015 | 2016 | '@typescript-eslint/scope-manager@8.18.2': 2017 | dependencies: 2018 | '@typescript-eslint/types': 8.18.2 2019 | '@typescript-eslint/visitor-keys': 8.18.2 2020 | 2021 | '@typescript-eslint/type-utils@8.18.2(eslint@9.23.0)(typescript@5.8.2)': 2022 | dependencies: 2023 | '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.8.2) 2024 | '@typescript-eslint/utils': 8.18.2(eslint@9.23.0)(typescript@5.8.2) 2025 | debug: 4.4.0 2026 | eslint: 9.23.0 2027 | ts-api-utils: 1.4.3(typescript@5.8.2) 2028 | typescript: 5.8.2 2029 | transitivePeerDependencies: 2030 | - supports-color 2031 | 2032 | '@typescript-eslint/types@8.18.2': {} 2033 | 2034 | '@typescript-eslint/typescript-estree@8.18.2(typescript@5.8.2)': 2035 | dependencies: 2036 | '@typescript-eslint/types': 8.18.2 2037 | '@typescript-eslint/visitor-keys': 8.18.2 2038 | debug: 4.4.0 2039 | fast-glob: 3.3.3 2040 | is-glob: 4.0.3 2041 | minimatch: 9.0.5 2042 | semver: 7.7.1 2043 | ts-api-utils: 1.4.3(typescript@5.8.2) 2044 | typescript: 5.8.2 2045 | transitivePeerDependencies: 2046 | - supports-color 2047 | 2048 | '@typescript-eslint/utils@8.18.2(eslint@9.23.0)(typescript@5.8.2)': 2049 | dependencies: 2050 | '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0) 2051 | '@typescript-eslint/scope-manager': 8.18.2 2052 | '@typescript-eslint/types': 8.18.2 2053 | '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.8.2) 2054 | eslint: 9.23.0 2055 | typescript: 5.8.2 2056 | transitivePeerDependencies: 2057 | - supports-color 2058 | 2059 | '@typescript-eslint/visitor-keys@8.18.2': 2060 | dependencies: 2061 | '@typescript-eslint/types': 8.18.2 2062 | eslint-visitor-keys: 4.2.0 2063 | 2064 | '@vitest/expect@3.0.9': 2065 | dependencies: 2066 | '@vitest/spy': 3.0.9 2067 | '@vitest/utils': 3.0.9 2068 | chai: 5.2.0 2069 | tinyrainbow: 2.0.0 2070 | 2071 | '@vitest/mocker@3.0.9(vite@6.2.3(@types/node@22.13.14))': 2072 | dependencies: 2073 | '@vitest/spy': 3.0.9 2074 | estree-walker: 3.0.3 2075 | magic-string: 0.30.17 2076 | optionalDependencies: 2077 | vite: 6.2.3(@types/node@22.13.14) 2078 | 2079 | '@vitest/pretty-format@3.0.9': 2080 | dependencies: 2081 | tinyrainbow: 2.0.0 2082 | 2083 | '@vitest/runner@3.0.9': 2084 | dependencies: 2085 | '@vitest/utils': 3.0.9 2086 | pathe: 2.0.3 2087 | 2088 | '@vitest/snapshot@3.0.9': 2089 | dependencies: 2090 | '@vitest/pretty-format': 3.0.9 2091 | magic-string: 0.30.17 2092 | pathe: 2.0.3 2093 | 2094 | '@vitest/spy@3.0.9': 2095 | dependencies: 2096 | tinyspy: 3.0.2 2097 | 2098 | '@vitest/utils@3.0.9': 2099 | dependencies: 2100 | '@vitest/pretty-format': 3.0.9 2101 | loupe: 3.1.3 2102 | tinyrainbow: 2.0.0 2103 | 2104 | acorn-jsx@5.3.2(acorn@8.14.1): 2105 | dependencies: 2106 | acorn: 8.14.1 2107 | 2108 | acorn@8.14.1: {} 2109 | 2110 | ajv@6.12.6: 2111 | dependencies: 2112 | fast-deep-equal: 3.1.3 2113 | fast-json-stable-stringify: 2.1.0 2114 | json-schema-traverse: 0.4.1 2115 | uri-js: 4.4.1 2116 | 2117 | ansi-styles@4.3.0: 2118 | dependencies: 2119 | color-convert: 2.0.1 2120 | 2121 | argparse@2.0.1: {} 2122 | 2123 | aria-query@5.3.2: {} 2124 | 2125 | array-buffer-byte-length@1.0.2: 2126 | dependencies: 2127 | call-bound: 1.0.4 2128 | is-array-buffer: 3.0.5 2129 | 2130 | array-includes@3.1.8: 2131 | dependencies: 2132 | call-bind: 1.0.8 2133 | define-properties: 1.2.1 2134 | es-abstract: 1.23.9 2135 | es-object-atoms: 1.1.1 2136 | get-intrinsic: 1.3.0 2137 | is-string: 1.1.1 2138 | 2139 | array.prototype.findlast@1.2.5: 2140 | dependencies: 2141 | call-bind: 1.0.8 2142 | define-properties: 1.2.1 2143 | es-abstract: 1.23.9 2144 | es-errors: 1.3.0 2145 | es-object-atoms: 1.1.1 2146 | es-shim-unscopables: 1.1.0 2147 | 2148 | array.prototype.findlastindex@1.2.6: 2149 | dependencies: 2150 | call-bind: 1.0.8 2151 | call-bound: 1.0.4 2152 | define-properties: 1.2.1 2153 | es-abstract: 1.23.9 2154 | es-errors: 1.3.0 2155 | es-object-atoms: 1.1.1 2156 | es-shim-unscopables: 1.1.0 2157 | 2158 | array.prototype.flat@1.3.3: 2159 | dependencies: 2160 | call-bind: 1.0.8 2161 | define-properties: 1.2.1 2162 | es-abstract: 1.23.9 2163 | es-shim-unscopables: 1.1.0 2164 | 2165 | array.prototype.flatmap@1.3.3: 2166 | dependencies: 2167 | call-bind: 1.0.8 2168 | define-properties: 1.2.1 2169 | es-abstract: 1.23.9 2170 | es-shim-unscopables: 1.1.0 2171 | 2172 | array.prototype.tosorted@1.1.4: 2173 | dependencies: 2174 | call-bind: 1.0.8 2175 | define-properties: 1.2.1 2176 | es-abstract: 1.23.9 2177 | es-errors: 1.3.0 2178 | es-shim-unscopables: 1.1.0 2179 | 2180 | arraybuffer.prototype.slice@1.0.4: 2181 | dependencies: 2182 | array-buffer-byte-length: 1.0.2 2183 | call-bind: 1.0.8 2184 | define-properties: 1.2.1 2185 | es-abstract: 1.23.9 2186 | es-errors: 1.3.0 2187 | get-intrinsic: 1.3.0 2188 | is-array-buffer: 3.0.5 2189 | 2190 | assertion-error@2.0.1: {} 2191 | 2192 | ast-types-flow@0.0.8: {} 2193 | 2194 | async-function@1.0.0: {} 2195 | 2196 | available-typed-arrays@1.0.7: 2197 | dependencies: 2198 | possible-typed-array-names: 1.1.0 2199 | 2200 | axe-core@4.10.3: {} 2201 | 2202 | axobject-query@4.1.0: {} 2203 | 2204 | balanced-match@1.0.2: {} 2205 | 2206 | brace-expansion@1.1.11: 2207 | dependencies: 2208 | balanced-match: 1.0.2 2209 | concat-map: 0.0.1 2210 | 2211 | brace-expansion@2.0.1: 2212 | dependencies: 2213 | balanced-match: 1.0.2 2214 | 2215 | braces@3.0.3: 2216 | dependencies: 2217 | fill-range: 7.1.1 2218 | 2219 | cac@6.7.14: {} 2220 | 2221 | call-bind-apply-helpers@1.0.2: 2222 | dependencies: 2223 | es-errors: 1.3.0 2224 | function-bind: 1.1.2 2225 | 2226 | call-bind@1.0.8: 2227 | dependencies: 2228 | call-bind-apply-helpers: 1.0.2 2229 | es-define-property: 1.0.1 2230 | get-intrinsic: 1.3.0 2231 | set-function-length: 1.2.2 2232 | 2233 | call-bound@1.0.4: 2234 | dependencies: 2235 | call-bind-apply-helpers: 1.0.2 2236 | get-intrinsic: 1.3.0 2237 | 2238 | callsites@3.1.0: {} 2239 | 2240 | chai@5.2.0: 2241 | dependencies: 2242 | assertion-error: 2.0.1 2243 | check-error: 2.1.1 2244 | deep-eql: 5.0.2 2245 | loupe: 3.1.3 2246 | pathval: 2.0.0 2247 | 2248 | chalk@4.1.2: 2249 | dependencies: 2250 | ansi-styles: 4.3.0 2251 | supports-color: 7.2.0 2252 | 2253 | check-error@2.1.1: {} 2254 | 2255 | color-convert@2.0.1: 2256 | dependencies: 2257 | color-name: 1.1.4 2258 | 2259 | color-name@1.1.4: {} 2260 | 2261 | concat-map@0.0.1: {} 2262 | 2263 | cross-spawn@6.0.6: 2264 | dependencies: 2265 | nice-try: 1.0.5 2266 | path-key: 2.0.1 2267 | semver: 5.7.2 2268 | shebang-command: 1.2.0 2269 | which: 1.3.1 2270 | 2271 | cross-spawn@7.0.6: 2272 | dependencies: 2273 | path-key: 3.1.1 2274 | shebang-command: 2.0.0 2275 | which: 2.0.2 2276 | 2277 | damerau-levenshtein@1.0.8: {} 2278 | 2279 | data-view-buffer@1.0.2: 2280 | dependencies: 2281 | call-bound: 1.0.4 2282 | es-errors: 1.3.0 2283 | is-data-view: 1.0.2 2284 | 2285 | data-view-byte-length@1.0.2: 2286 | dependencies: 2287 | call-bound: 1.0.4 2288 | es-errors: 1.3.0 2289 | is-data-view: 1.0.2 2290 | 2291 | data-view-byte-offset@1.0.1: 2292 | dependencies: 2293 | call-bound: 1.0.4 2294 | es-errors: 1.3.0 2295 | is-data-view: 1.0.2 2296 | 2297 | debug@3.2.7: 2298 | dependencies: 2299 | ms: 2.1.3 2300 | 2301 | debug@4.4.0: 2302 | dependencies: 2303 | ms: 2.1.3 2304 | 2305 | deep-eql@5.0.2: {} 2306 | 2307 | deep-is@0.1.4: {} 2308 | 2309 | define-data-property@1.1.4: 2310 | dependencies: 2311 | es-define-property: 1.0.1 2312 | es-errors: 1.3.0 2313 | gopd: 1.2.0 2314 | 2315 | define-properties@1.2.1: 2316 | dependencies: 2317 | define-data-property: 1.1.4 2318 | has-property-descriptors: 1.0.2 2319 | object-keys: 1.1.1 2320 | 2321 | doctrine@2.1.0: 2322 | dependencies: 2323 | esutils: 2.0.3 2324 | 2325 | dunder-proto@1.0.1: 2326 | dependencies: 2327 | call-bind-apply-helpers: 1.0.2 2328 | es-errors: 1.3.0 2329 | gopd: 1.2.0 2330 | 2331 | emoji-regex@9.2.2: {} 2332 | 2333 | end-of-stream@1.4.4: 2334 | dependencies: 2335 | once: 1.4.0 2336 | 2337 | es-abstract@1.23.9: 2338 | dependencies: 2339 | array-buffer-byte-length: 1.0.2 2340 | arraybuffer.prototype.slice: 1.0.4 2341 | available-typed-arrays: 1.0.7 2342 | call-bind: 1.0.8 2343 | call-bound: 1.0.4 2344 | data-view-buffer: 1.0.2 2345 | data-view-byte-length: 1.0.2 2346 | data-view-byte-offset: 1.0.1 2347 | es-define-property: 1.0.1 2348 | es-errors: 1.3.0 2349 | es-object-atoms: 1.1.1 2350 | es-set-tostringtag: 2.1.0 2351 | es-to-primitive: 1.3.0 2352 | function.prototype.name: 1.1.8 2353 | get-intrinsic: 1.3.0 2354 | get-proto: 1.0.1 2355 | get-symbol-description: 1.1.0 2356 | globalthis: 1.0.4 2357 | gopd: 1.2.0 2358 | has-property-descriptors: 1.0.2 2359 | has-proto: 1.2.0 2360 | has-symbols: 1.1.0 2361 | hasown: 2.0.2 2362 | internal-slot: 1.1.0 2363 | is-array-buffer: 3.0.5 2364 | is-callable: 1.2.7 2365 | is-data-view: 1.0.2 2366 | is-regex: 1.2.1 2367 | is-shared-array-buffer: 1.0.4 2368 | is-string: 1.1.1 2369 | is-typed-array: 1.1.15 2370 | is-weakref: 1.1.1 2371 | math-intrinsics: 1.1.0 2372 | object-inspect: 1.13.4 2373 | object-keys: 1.1.1 2374 | object.assign: 4.1.7 2375 | own-keys: 1.0.1 2376 | regexp.prototype.flags: 1.5.4 2377 | safe-array-concat: 1.1.3 2378 | safe-push-apply: 1.0.0 2379 | safe-regex-test: 1.1.0 2380 | set-proto: 1.0.0 2381 | string.prototype.trim: 1.2.10 2382 | string.prototype.trimend: 1.0.9 2383 | string.prototype.trimstart: 1.0.8 2384 | typed-array-buffer: 1.0.3 2385 | typed-array-byte-length: 1.0.3 2386 | typed-array-byte-offset: 1.0.4 2387 | typed-array-length: 1.0.7 2388 | unbox-primitive: 1.1.0 2389 | which-typed-array: 1.1.19 2390 | 2391 | es-define-property@1.0.1: {} 2392 | 2393 | es-errors@1.3.0: {} 2394 | 2395 | es-iterator-helpers@1.2.1: 2396 | dependencies: 2397 | call-bind: 1.0.8 2398 | call-bound: 1.0.4 2399 | define-properties: 1.2.1 2400 | es-abstract: 1.23.9 2401 | es-errors: 1.3.0 2402 | es-set-tostringtag: 2.1.0 2403 | function-bind: 1.1.2 2404 | get-intrinsic: 1.3.0 2405 | globalthis: 1.0.4 2406 | gopd: 1.2.0 2407 | has-property-descriptors: 1.0.2 2408 | has-proto: 1.2.0 2409 | has-symbols: 1.1.0 2410 | internal-slot: 1.1.0 2411 | iterator.prototype: 1.1.5 2412 | safe-array-concat: 1.1.3 2413 | 2414 | es-module-lexer@1.6.0: {} 2415 | 2416 | es-object-atoms@1.1.1: 2417 | dependencies: 2418 | es-errors: 1.3.0 2419 | 2420 | es-set-tostringtag@2.1.0: 2421 | dependencies: 2422 | es-errors: 1.3.0 2423 | get-intrinsic: 1.3.0 2424 | has-tostringtag: 1.0.2 2425 | hasown: 2.0.2 2426 | 2427 | es-shim-unscopables@1.1.0: 2428 | dependencies: 2429 | hasown: 2.0.2 2430 | 2431 | es-to-primitive@1.3.0: 2432 | dependencies: 2433 | is-callable: 1.2.7 2434 | is-date-object: 1.1.0 2435 | is-symbol: 1.1.1 2436 | 2437 | esbuild@0.25.1: 2438 | optionalDependencies: 2439 | '@esbuild/aix-ppc64': 0.25.1 2440 | '@esbuild/android-arm': 0.25.1 2441 | '@esbuild/android-arm64': 0.25.1 2442 | '@esbuild/android-x64': 0.25.1 2443 | '@esbuild/darwin-arm64': 0.25.1 2444 | '@esbuild/darwin-x64': 0.25.1 2445 | '@esbuild/freebsd-arm64': 0.25.1 2446 | '@esbuild/freebsd-x64': 0.25.1 2447 | '@esbuild/linux-arm': 0.25.1 2448 | '@esbuild/linux-arm64': 0.25.1 2449 | '@esbuild/linux-ia32': 0.25.1 2450 | '@esbuild/linux-loong64': 0.25.1 2451 | '@esbuild/linux-mips64el': 0.25.1 2452 | '@esbuild/linux-ppc64': 0.25.1 2453 | '@esbuild/linux-riscv64': 0.25.1 2454 | '@esbuild/linux-s390x': 0.25.1 2455 | '@esbuild/linux-x64': 0.25.1 2456 | '@esbuild/netbsd-arm64': 0.25.1 2457 | '@esbuild/netbsd-x64': 0.25.1 2458 | '@esbuild/openbsd-arm64': 0.25.1 2459 | '@esbuild/openbsd-x64': 0.25.1 2460 | '@esbuild/sunos-x64': 0.25.1 2461 | '@esbuild/win32-arm64': 0.25.1 2462 | '@esbuild/win32-ia32': 0.25.1 2463 | '@esbuild/win32-x64': 0.25.1 2464 | 2465 | escape-string-regexp@4.0.0: {} 2466 | 2467 | eslint-import-resolver-node@0.3.9: 2468 | dependencies: 2469 | debug: 3.2.7 2470 | is-core-module: 2.16.1 2471 | resolve: 1.22.10 2472 | transitivePeerDependencies: 2473 | - supports-color 2474 | 2475 | eslint-module-utils@2.12.0(@typescript-eslint/parser@8.18.2(eslint@9.23.0)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint@9.23.0): 2476 | dependencies: 2477 | debug: 3.2.7 2478 | optionalDependencies: 2479 | '@typescript-eslint/parser': 8.18.2(eslint@9.23.0)(typescript@5.8.2) 2480 | eslint: 9.23.0 2481 | eslint-import-resolver-node: 0.3.9 2482 | transitivePeerDependencies: 2483 | - supports-color 2484 | 2485 | eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.18.2(eslint@9.23.0)(typescript@5.8.2))(eslint@9.23.0): 2486 | dependencies: 2487 | '@rtsao/scc': 1.1.0 2488 | array-includes: 3.1.8 2489 | array.prototype.findlastindex: 1.2.6 2490 | array.prototype.flat: 1.3.3 2491 | array.prototype.flatmap: 1.3.3 2492 | debug: 3.2.7 2493 | doctrine: 2.1.0 2494 | eslint: 9.23.0 2495 | eslint-import-resolver-node: 0.3.9 2496 | eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.18.2(eslint@9.23.0)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint@9.23.0) 2497 | hasown: 2.0.2 2498 | is-core-module: 2.16.1 2499 | is-glob: 4.0.3 2500 | minimatch: 3.1.2 2501 | object.fromentries: 2.0.8 2502 | object.groupby: 1.0.3 2503 | object.values: 1.2.1 2504 | semver: 6.3.1 2505 | string.prototype.trimend: 1.0.9 2506 | tsconfig-paths: 3.15.0 2507 | optionalDependencies: 2508 | '@typescript-eslint/parser': 8.18.2(eslint@9.23.0)(typescript@5.8.2) 2509 | transitivePeerDependencies: 2510 | - eslint-import-resolver-typescript 2511 | - eslint-import-resolver-webpack 2512 | - supports-color 2513 | 2514 | eslint-plugin-jsx-a11y@6.10.2(eslint@9.23.0): 2515 | dependencies: 2516 | aria-query: 5.3.2 2517 | array-includes: 3.1.8 2518 | array.prototype.flatmap: 1.3.3 2519 | ast-types-flow: 0.0.8 2520 | axe-core: 4.10.3 2521 | axobject-query: 4.1.0 2522 | damerau-levenshtein: 1.0.8 2523 | emoji-regex: 9.2.2 2524 | eslint: 9.23.0 2525 | hasown: 2.0.2 2526 | jsx-ast-utils: 3.3.5 2527 | language-tags: 1.0.9 2528 | minimatch: 3.1.2 2529 | object.fromentries: 2.0.8 2530 | safe-regex-test: 1.1.0 2531 | string.prototype.includes: 2.0.1 2532 | 2533 | eslint-plugin-react-hooks@5.1.0(eslint@9.23.0): 2534 | dependencies: 2535 | eslint: 9.23.0 2536 | 2537 | eslint-plugin-react@7.37.3(eslint@9.23.0): 2538 | dependencies: 2539 | array-includes: 3.1.8 2540 | array.prototype.findlast: 1.2.5 2541 | array.prototype.flatmap: 1.3.3 2542 | array.prototype.tosorted: 1.1.4 2543 | doctrine: 2.1.0 2544 | es-iterator-helpers: 1.2.1 2545 | eslint: 9.23.0 2546 | estraverse: 5.3.0 2547 | hasown: 2.0.2 2548 | jsx-ast-utils: 3.3.5 2549 | minimatch: 3.1.2 2550 | object.entries: 1.1.9 2551 | object.fromentries: 2.0.8 2552 | object.values: 1.2.1 2553 | prop-types: 15.8.1 2554 | resolve: 2.0.0-next.5 2555 | semver: 6.3.1 2556 | string.prototype.matchall: 4.0.12 2557 | string.prototype.repeat: 1.0.0 2558 | 2559 | eslint-scope@8.3.0: 2560 | dependencies: 2561 | esrecurse: 4.3.0 2562 | estraverse: 5.3.0 2563 | 2564 | eslint-visitor-keys@3.4.3: {} 2565 | 2566 | eslint-visitor-keys@4.2.0: {} 2567 | 2568 | eslint@9.23.0: 2569 | dependencies: 2570 | '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0) 2571 | '@eslint-community/regexpp': 4.12.1 2572 | '@eslint/config-array': 0.19.2 2573 | '@eslint/config-helpers': 0.2.0 2574 | '@eslint/core': 0.12.0 2575 | '@eslint/eslintrc': 3.3.1 2576 | '@eslint/js': 9.23.0 2577 | '@eslint/plugin-kit': 0.2.7 2578 | '@humanfs/node': 0.16.6 2579 | '@humanwhocodes/module-importer': 1.0.1 2580 | '@humanwhocodes/retry': 0.4.2 2581 | '@types/estree': 1.0.7 2582 | '@types/json-schema': 7.0.15 2583 | ajv: 6.12.6 2584 | chalk: 4.1.2 2585 | cross-spawn: 7.0.6 2586 | debug: 4.4.0 2587 | escape-string-regexp: 4.0.0 2588 | eslint-scope: 8.3.0 2589 | eslint-visitor-keys: 4.2.0 2590 | espree: 10.3.0 2591 | esquery: 1.6.0 2592 | esutils: 2.0.3 2593 | fast-deep-equal: 3.1.3 2594 | file-entry-cache: 8.0.0 2595 | find-up: 5.0.0 2596 | glob-parent: 6.0.2 2597 | ignore: 5.3.2 2598 | imurmurhash: 0.1.4 2599 | is-glob: 4.0.3 2600 | json-stable-stringify-without-jsonify: 1.0.1 2601 | lodash.merge: 4.6.2 2602 | minimatch: 3.1.2 2603 | natural-compare: 1.4.0 2604 | optionator: 0.9.4 2605 | transitivePeerDependencies: 2606 | - supports-color 2607 | 2608 | espree@10.3.0: 2609 | dependencies: 2610 | acorn: 8.14.1 2611 | acorn-jsx: 5.3.2(acorn@8.14.1) 2612 | eslint-visitor-keys: 4.2.0 2613 | 2614 | esquery@1.6.0: 2615 | dependencies: 2616 | estraverse: 5.3.0 2617 | 2618 | esrecurse@4.3.0: 2619 | dependencies: 2620 | estraverse: 5.3.0 2621 | 2622 | estraverse@5.3.0: {} 2623 | 2624 | estree-walker@3.0.3: 2625 | dependencies: 2626 | '@types/estree': 1.0.7 2627 | 2628 | esutils@2.0.3: {} 2629 | 2630 | execa@1.0.0: 2631 | dependencies: 2632 | cross-spawn: 6.0.6 2633 | get-stream: 4.1.0 2634 | is-stream: 1.1.0 2635 | npm-run-path: 2.0.2 2636 | p-finally: 1.0.0 2637 | signal-exit: 3.0.7 2638 | strip-eof: 1.0.0 2639 | 2640 | expect-type@1.2.0: {} 2641 | 2642 | fast-deep-equal@3.1.3: {} 2643 | 2644 | fast-glob@3.3.1: 2645 | dependencies: 2646 | '@nodelib/fs.stat': 2.0.5 2647 | '@nodelib/fs.walk': 1.2.8 2648 | glob-parent: 5.1.2 2649 | merge2: 1.4.1 2650 | micromatch: 4.0.8 2651 | 2652 | fast-glob@3.3.3: 2653 | dependencies: 2654 | '@nodelib/fs.stat': 2.0.5 2655 | '@nodelib/fs.walk': 1.2.8 2656 | glob-parent: 5.1.2 2657 | merge2: 1.4.1 2658 | micromatch: 4.0.8 2659 | 2660 | fast-json-stable-stringify@2.1.0: {} 2661 | 2662 | fast-levenshtein@2.0.6: {} 2663 | 2664 | fastq@1.19.1: 2665 | dependencies: 2666 | reusify: 1.1.0 2667 | 2668 | file-entry-cache@8.0.0: 2669 | dependencies: 2670 | flat-cache: 4.0.1 2671 | 2672 | fill-range@7.1.1: 2673 | dependencies: 2674 | to-regex-range: 5.0.1 2675 | 2676 | find-up@5.0.0: 2677 | dependencies: 2678 | locate-path: 6.0.0 2679 | path-exists: 4.0.0 2680 | 2681 | flat-cache@4.0.1: 2682 | dependencies: 2683 | flatted: 3.3.3 2684 | keyv: 4.5.4 2685 | 2686 | flatted@3.3.3: {} 2687 | 2688 | for-each@0.3.5: 2689 | dependencies: 2690 | is-callable: 1.2.7 2691 | 2692 | fs.realpath@1.0.0: {} 2693 | 2694 | fsevents@2.3.3: 2695 | optional: true 2696 | 2697 | function-bind@1.1.2: {} 2698 | 2699 | function.prototype.name@1.1.8: 2700 | dependencies: 2701 | call-bind: 1.0.8 2702 | call-bound: 1.0.4 2703 | define-properties: 1.2.1 2704 | functions-have-names: 1.2.3 2705 | hasown: 2.0.2 2706 | is-callable: 1.2.7 2707 | 2708 | functions-have-names@1.2.3: {} 2709 | 2710 | get-intrinsic@1.3.0: 2711 | dependencies: 2712 | call-bind-apply-helpers: 1.0.2 2713 | es-define-property: 1.0.1 2714 | es-errors: 1.3.0 2715 | es-object-atoms: 1.1.1 2716 | function-bind: 1.1.2 2717 | get-proto: 1.0.1 2718 | gopd: 1.2.0 2719 | has-symbols: 1.1.0 2720 | hasown: 2.0.2 2721 | math-intrinsics: 1.1.0 2722 | 2723 | get-proto@1.0.1: 2724 | dependencies: 2725 | dunder-proto: 1.0.1 2726 | es-object-atoms: 1.1.1 2727 | 2728 | get-stream@4.1.0: 2729 | dependencies: 2730 | pump: 3.0.2 2731 | 2732 | get-symbol-description@1.1.0: 2733 | dependencies: 2734 | call-bound: 1.0.4 2735 | es-errors: 1.3.0 2736 | get-intrinsic: 1.3.0 2737 | 2738 | glob-parent@5.1.2: 2739 | dependencies: 2740 | is-glob: 4.0.3 2741 | 2742 | glob-parent@6.0.2: 2743 | dependencies: 2744 | is-glob: 4.0.3 2745 | 2746 | glob@7.2.3: 2747 | dependencies: 2748 | fs.realpath: 1.0.0 2749 | inflight: 1.0.6 2750 | inherits: 2.0.4 2751 | minimatch: 3.1.2 2752 | once: 1.4.0 2753 | path-is-absolute: 1.0.1 2754 | 2755 | globals@14.0.0: {} 2756 | 2757 | globalthis@1.0.4: 2758 | dependencies: 2759 | define-properties: 1.2.1 2760 | gopd: 1.2.0 2761 | 2762 | gopd@1.2.0: {} 2763 | 2764 | graphemer@1.4.0: {} 2765 | 2766 | has-bigints@1.1.0: {} 2767 | 2768 | has-flag@4.0.0: {} 2769 | 2770 | has-property-descriptors@1.0.2: 2771 | dependencies: 2772 | es-define-property: 1.0.1 2773 | 2774 | has-proto@1.2.0: 2775 | dependencies: 2776 | dunder-proto: 1.0.1 2777 | 2778 | has-symbols@1.1.0: {} 2779 | 2780 | has-tostringtag@1.0.2: 2781 | dependencies: 2782 | has-symbols: 1.1.0 2783 | 2784 | hasown@2.0.2: 2785 | dependencies: 2786 | function-bind: 1.1.2 2787 | 2788 | ignore@5.3.2: {} 2789 | 2790 | import-fresh@3.3.1: 2791 | dependencies: 2792 | parent-module: 1.0.1 2793 | resolve-from: 4.0.0 2794 | 2795 | imurmurhash@0.1.4: {} 2796 | 2797 | inflight@1.0.6: 2798 | dependencies: 2799 | once: 1.4.0 2800 | wrappy: 1.0.2 2801 | 2802 | inherits@2.0.4: {} 2803 | 2804 | internal-slot@1.1.0: 2805 | dependencies: 2806 | es-errors: 1.3.0 2807 | hasown: 2.0.2 2808 | side-channel: 1.1.0 2809 | 2810 | interpret@1.4.0: {} 2811 | 2812 | is-array-buffer@3.0.5: 2813 | dependencies: 2814 | call-bind: 1.0.8 2815 | call-bound: 1.0.4 2816 | get-intrinsic: 1.3.0 2817 | 2818 | is-async-function@2.1.1: 2819 | dependencies: 2820 | async-function: 1.0.0 2821 | call-bound: 1.0.4 2822 | get-proto: 1.0.1 2823 | has-tostringtag: 1.0.2 2824 | safe-regex-test: 1.1.0 2825 | 2826 | is-bigint@1.1.0: 2827 | dependencies: 2828 | has-bigints: 1.1.0 2829 | 2830 | is-boolean-object@1.2.2: 2831 | dependencies: 2832 | call-bound: 1.0.4 2833 | has-tostringtag: 1.0.2 2834 | 2835 | is-callable@1.2.7: {} 2836 | 2837 | is-core-module@2.16.1: 2838 | dependencies: 2839 | hasown: 2.0.2 2840 | 2841 | is-data-view@1.0.2: 2842 | dependencies: 2843 | call-bound: 1.0.4 2844 | get-intrinsic: 1.3.0 2845 | is-typed-array: 1.1.15 2846 | 2847 | is-date-object@1.1.0: 2848 | dependencies: 2849 | call-bound: 1.0.4 2850 | has-tostringtag: 1.0.2 2851 | 2852 | is-extglob@2.1.1: {} 2853 | 2854 | is-finalizationregistry@1.1.1: 2855 | dependencies: 2856 | call-bound: 1.0.4 2857 | 2858 | is-generator-function@1.1.0: 2859 | dependencies: 2860 | call-bound: 1.0.4 2861 | get-proto: 1.0.1 2862 | has-tostringtag: 1.0.2 2863 | safe-regex-test: 1.1.0 2864 | 2865 | is-glob@4.0.3: 2866 | dependencies: 2867 | is-extglob: 2.1.1 2868 | 2869 | is-map@2.0.3: {} 2870 | 2871 | is-number-object@1.1.1: 2872 | dependencies: 2873 | call-bound: 1.0.4 2874 | has-tostringtag: 1.0.2 2875 | 2876 | is-number@7.0.0: {} 2877 | 2878 | is-regex@1.2.1: 2879 | dependencies: 2880 | call-bound: 1.0.4 2881 | gopd: 1.2.0 2882 | has-tostringtag: 1.0.2 2883 | hasown: 2.0.2 2884 | 2885 | is-set@2.0.3: {} 2886 | 2887 | is-shared-array-buffer@1.0.4: 2888 | dependencies: 2889 | call-bound: 1.0.4 2890 | 2891 | is-stream@1.1.0: {} 2892 | 2893 | is-string@1.1.1: 2894 | dependencies: 2895 | call-bound: 1.0.4 2896 | has-tostringtag: 1.0.2 2897 | 2898 | is-symbol@1.1.1: 2899 | dependencies: 2900 | call-bound: 1.0.4 2901 | has-symbols: 1.1.0 2902 | safe-regex-test: 1.1.0 2903 | 2904 | is-typed-array@1.1.15: 2905 | dependencies: 2906 | which-typed-array: 1.1.19 2907 | 2908 | is-weakmap@2.0.2: {} 2909 | 2910 | is-weakref@1.1.1: 2911 | dependencies: 2912 | call-bound: 1.0.4 2913 | 2914 | is-weakset@2.0.4: 2915 | dependencies: 2916 | call-bound: 1.0.4 2917 | get-intrinsic: 1.3.0 2918 | 2919 | isarray@2.0.5: {} 2920 | 2921 | isexe@2.0.0: {} 2922 | 2923 | iterator.prototype@1.1.5: 2924 | dependencies: 2925 | define-data-property: 1.1.4 2926 | es-object-atoms: 1.1.1 2927 | get-intrinsic: 1.3.0 2928 | get-proto: 1.0.1 2929 | has-symbols: 1.1.0 2930 | set-function-name: 2.0.2 2931 | 2932 | js-tokens@4.0.0: {} 2933 | 2934 | js-yaml@4.1.0: 2935 | dependencies: 2936 | argparse: 2.0.1 2937 | 2938 | json-buffer@3.0.1: {} 2939 | 2940 | json-schema-traverse@0.4.1: {} 2941 | 2942 | json-stable-stringify-without-jsonify@1.0.1: {} 2943 | 2944 | json5@1.0.2: 2945 | dependencies: 2946 | minimist: 1.2.8 2947 | 2948 | jsx-ast-utils@3.3.5: 2949 | dependencies: 2950 | array-includes: 3.1.8 2951 | array.prototype.flat: 1.3.3 2952 | object.assign: 4.1.7 2953 | object.values: 1.2.1 2954 | 2955 | keyv@4.5.4: 2956 | dependencies: 2957 | json-buffer: 3.0.1 2958 | 2959 | language-subtag-registry@0.3.23: {} 2960 | 2961 | language-tags@1.0.9: 2962 | dependencies: 2963 | language-subtag-registry: 0.3.23 2964 | 2965 | levn@0.4.1: 2966 | dependencies: 2967 | prelude-ls: 1.2.1 2968 | type-check: 0.4.0 2969 | 2970 | locate-path@6.0.0: 2971 | dependencies: 2972 | p-locate: 5.0.0 2973 | 2974 | lodash.merge@4.6.2: {} 2975 | 2976 | loose-envify@1.4.0: 2977 | dependencies: 2978 | js-tokens: 4.0.0 2979 | 2980 | loupe@3.1.3: {} 2981 | 2982 | magic-string@0.30.17: 2983 | dependencies: 2984 | '@jridgewell/sourcemap-codec': 1.5.0 2985 | 2986 | math-intrinsics@1.1.0: {} 2987 | 2988 | merge2@1.4.1: {} 2989 | 2990 | micromatch@4.0.8: 2991 | dependencies: 2992 | braces: 3.0.3 2993 | picomatch: 2.3.1 2994 | 2995 | minimatch@3.1.2: 2996 | dependencies: 2997 | brace-expansion: 1.1.11 2998 | 2999 | minimatch@9.0.5: 3000 | dependencies: 3001 | brace-expansion: 2.0.1 3002 | 3003 | minimist@1.2.8: {} 3004 | 3005 | ms@2.1.3: {} 3006 | 3007 | nanoid@3.3.11: {} 3008 | 3009 | natural-compare@1.4.0: {} 3010 | 3011 | nice-try@1.0.5: {} 3012 | 3013 | node-package-helper@https://codeload.github.com/GervinFung/node-package-helper/tar.gz/b43bb915e84cc79e7ec5e7e93ef35e60640f67bd: 3014 | dependencies: 3015 | '@poolofdeath20/tsconfig': 0.1.1 3016 | shx: 0.3.4 3017 | ts-add-js-extension: 1.6.5 3018 | typescript: 5.8.2 3019 | 3020 | npm-run-path@2.0.2: 3021 | dependencies: 3022 | path-key: 2.0.1 3023 | 3024 | object-assign@4.1.1: {} 3025 | 3026 | object-inspect@1.13.4: {} 3027 | 3028 | object-keys@1.1.1: {} 3029 | 3030 | object.assign@4.1.7: 3031 | dependencies: 3032 | call-bind: 1.0.8 3033 | call-bound: 1.0.4 3034 | define-properties: 1.2.1 3035 | es-object-atoms: 1.1.1 3036 | has-symbols: 1.1.0 3037 | object-keys: 1.1.1 3038 | 3039 | object.entries@1.1.9: 3040 | dependencies: 3041 | call-bind: 1.0.8 3042 | call-bound: 1.0.4 3043 | define-properties: 1.2.1 3044 | es-object-atoms: 1.1.1 3045 | 3046 | object.fromentries@2.0.8: 3047 | dependencies: 3048 | call-bind: 1.0.8 3049 | define-properties: 1.2.1 3050 | es-abstract: 1.23.9 3051 | es-object-atoms: 1.1.1 3052 | 3053 | object.groupby@1.0.3: 3054 | dependencies: 3055 | call-bind: 1.0.8 3056 | define-properties: 1.2.1 3057 | es-abstract: 1.23.9 3058 | 3059 | object.values@1.2.1: 3060 | dependencies: 3061 | call-bind: 1.0.8 3062 | call-bound: 1.0.4 3063 | define-properties: 1.2.1 3064 | es-object-atoms: 1.1.1 3065 | 3066 | once@1.4.0: 3067 | dependencies: 3068 | wrappy: 1.0.2 3069 | 3070 | optionator@0.9.4: 3071 | dependencies: 3072 | deep-is: 0.1.4 3073 | fast-levenshtein: 2.0.6 3074 | levn: 0.4.1 3075 | prelude-ls: 1.2.1 3076 | type-check: 0.4.0 3077 | word-wrap: 1.2.5 3078 | 3079 | own-keys@1.0.1: 3080 | dependencies: 3081 | get-intrinsic: 1.3.0 3082 | object-keys: 1.1.1 3083 | safe-push-apply: 1.0.0 3084 | 3085 | p-finally@1.0.0: {} 3086 | 3087 | p-limit@3.1.0: 3088 | dependencies: 3089 | yocto-queue: 0.1.0 3090 | 3091 | p-locate@5.0.0: 3092 | dependencies: 3093 | p-limit: 3.1.0 3094 | 3095 | parent-module@1.0.1: 3096 | dependencies: 3097 | callsites: 3.1.0 3098 | 3099 | path-exists@4.0.0: {} 3100 | 3101 | path-is-absolute@1.0.1: {} 3102 | 3103 | path-key@2.0.1: {} 3104 | 3105 | path-key@3.1.1: {} 3106 | 3107 | path-parse@1.0.7: {} 3108 | 3109 | pathe@2.0.3: {} 3110 | 3111 | pathval@2.0.0: {} 3112 | 3113 | picocolors@1.1.1: {} 3114 | 3115 | picomatch@2.3.1: {} 3116 | 3117 | possible-typed-array-names@1.1.0: {} 3118 | 3119 | postcss@8.5.3: 3120 | dependencies: 3121 | nanoid: 3.3.11 3122 | picocolors: 1.1.1 3123 | source-map-js: 1.2.1 3124 | 3125 | prelude-ls@1.2.1: {} 3126 | 3127 | prettier@3.5.3: {} 3128 | 3129 | prop-types@15.8.1: 3130 | dependencies: 3131 | loose-envify: 1.4.0 3132 | object-assign: 4.1.1 3133 | react-is: 16.13.1 3134 | 3135 | pump@3.0.2: 3136 | dependencies: 3137 | end-of-stream: 1.4.4 3138 | once: 1.4.0 3139 | 3140 | punycode@2.3.1: {} 3141 | 3142 | queue-microtask@1.2.3: {} 3143 | 3144 | react-is@16.13.1: {} 3145 | 3146 | rechoir@0.6.2: 3147 | dependencies: 3148 | resolve: 1.22.10 3149 | 3150 | reflect.getprototypeof@1.0.10: 3151 | dependencies: 3152 | call-bind: 1.0.8 3153 | define-properties: 1.2.1 3154 | es-abstract: 1.23.9 3155 | es-errors: 1.3.0 3156 | es-object-atoms: 1.1.1 3157 | get-intrinsic: 1.3.0 3158 | get-proto: 1.0.1 3159 | which-builtin-type: 1.2.1 3160 | 3161 | regexp.prototype.flags@1.5.4: 3162 | dependencies: 3163 | call-bind: 1.0.8 3164 | define-properties: 1.2.1 3165 | es-errors: 1.3.0 3166 | get-proto: 1.0.1 3167 | gopd: 1.2.0 3168 | set-function-name: 2.0.2 3169 | 3170 | resolve-from@4.0.0: {} 3171 | 3172 | resolve@1.22.10: 3173 | dependencies: 3174 | is-core-module: 2.16.1 3175 | path-parse: 1.0.7 3176 | supports-preserve-symlinks-flag: 1.0.0 3177 | 3178 | resolve@2.0.0-next.5: 3179 | dependencies: 3180 | is-core-module: 2.16.1 3181 | path-parse: 1.0.7 3182 | supports-preserve-symlinks-flag: 1.0.0 3183 | 3184 | reusify@1.1.0: {} 3185 | 3186 | rollup@4.37.0: 3187 | dependencies: 3188 | '@types/estree': 1.0.6 3189 | optionalDependencies: 3190 | '@rollup/rollup-android-arm-eabi': 4.37.0 3191 | '@rollup/rollup-android-arm64': 4.37.0 3192 | '@rollup/rollup-darwin-arm64': 4.37.0 3193 | '@rollup/rollup-darwin-x64': 4.37.0 3194 | '@rollup/rollup-freebsd-arm64': 4.37.0 3195 | '@rollup/rollup-freebsd-x64': 4.37.0 3196 | '@rollup/rollup-linux-arm-gnueabihf': 4.37.0 3197 | '@rollup/rollup-linux-arm-musleabihf': 4.37.0 3198 | '@rollup/rollup-linux-arm64-gnu': 4.37.0 3199 | '@rollup/rollup-linux-arm64-musl': 4.37.0 3200 | '@rollup/rollup-linux-loongarch64-gnu': 4.37.0 3201 | '@rollup/rollup-linux-powerpc64le-gnu': 4.37.0 3202 | '@rollup/rollup-linux-riscv64-gnu': 4.37.0 3203 | '@rollup/rollup-linux-riscv64-musl': 4.37.0 3204 | '@rollup/rollup-linux-s390x-gnu': 4.37.0 3205 | '@rollup/rollup-linux-x64-gnu': 4.37.0 3206 | '@rollup/rollup-linux-x64-musl': 4.37.0 3207 | '@rollup/rollup-win32-arm64-msvc': 4.37.0 3208 | '@rollup/rollup-win32-ia32-msvc': 4.37.0 3209 | '@rollup/rollup-win32-x64-msvc': 4.37.0 3210 | fsevents: 2.3.3 3211 | 3212 | run-parallel@1.2.0: 3213 | dependencies: 3214 | queue-microtask: 1.2.3 3215 | 3216 | safe-array-concat@1.1.3: 3217 | dependencies: 3218 | call-bind: 1.0.8 3219 | call-bound: 1.0.4 3220 | get-intrinsic: 1.3.0 3221 | has-symbols: 1.1.0 3222 | isarray: 2.0.5 3223 | 3224 | safe-push-apply@1.0.0: 3225 | dependencies: 3226 | es-errors: 1.3.0 3227 | isarray: 2.0.5 3228 | 3229 | safe-regex-test@1.1.0: 3230 | dependencies: 3231 | call-bound: 1.0.4 3232 | es-errors: 1.3.0 3233 | is-regex: 1.2.1 3234 | 3235 | semver@5.7.2: {} 3236 | 3237 | semver@6.3.1: {} 3238 | 3239 | semver@7.7.1: {} 3240 | 3241 | set-function-length@1.2.2: 3242 | dependencies: 3243 | define-data-property: 1.1.4 3244 | es-errors: 1.3.0 3245 | function-bind: 1.1.2 3246 | get-intrinsic: 1.3.0 3247 | gopd: 1.2.0 3248 | has-property-descriptors: 1.0.2 3249 | 3250 | set-function-name@2.0.2: 3251 | dependencies: 3252 | define-data-property: 1.1.4 3253 | es-errors: 1.3.0 3254 | functions-have-names: 1.2.3 3255 | has-property-descriptors: 1.0.2 3256 | 3257 | set-proto@1.0.0: 3258 | dependencies: 3259 | dunder-proto: 1.0.1 3260 | es-errors: 1.3.0 3261 | es-object-atoms: 1.1.1 3262 | 3263 | shebang-command@1.2.0: 3264 | dependencies: 3265 | shebang-regex: 1.0.0 3266 | 3267 | shebang-command@2.0.0: 3268 | dependencies: 3269 | shebang-regex: 3.0.0 3270 | 3271 | shebang-regex@1.0.0: {} 3272 | 3273 | shebang-regex@3.0.0: {} 3274 | 3275 | shelljs@0.8.5: 3276 | dependencies: 3277 | glob: 7.2.3 3278 | interpret: 1.4.0 3279 | rechoir: 0.6.2 3280 | 3281 | shelljs@0.9.2: 3282 | dependencies: 3283 | execa: 1.0.0 3284 | fast-glob: 3.3.3 3285 | interpret: 1.4.0 3286 | rechoir: 0.6.2 3287 | 3288 | shx@0.3.4: 3289 | dependencies: 3290 | minimist: 1.2.8 3291 | shelljs: 0.8.5 3292 | 3293 | shx@0.4.0: 3294 | dependencies: 3295 | minimist: 1.2.8 3296 | shelljs: 0.9.2 3297 | 3298 | side-channel-list@1.0.0: 3299 | dependencies: 3300 | es-errors: 1.3.0 3301 | object-inspect: 1.13.4 3302 | 3303 | side-channel-map@1.0.1: 3304 | dependencies: 3305 | call-bound: 1.0.4 3306 | es-errors: 1.3.0 3307 | get-intrinsic: 1.3.0 3308 | object-inspect: 1.13.4 3309 | 3310 | side-channel-weakmap@1.0.2: 3311 | dependencies: 3312 | call-bound: 1.0.4 3313 | es-errors: 1.3.0 3314 | get-intrinsic: 1.3.0 3315 | object-inspect: 1.13.4 3316 | side-channel-map: 1.0.1 3317 | 3318 | side-channel@1.1.0: 3319 | dependencies: 3320 | es-errors: 1.3.0 3321 | object-inspect: 1.13.4 3322 | side-channel-list: 1.0.0 3323 | side-channel-map: 1.0.1 3324 | side-channel-weakmap: 1.0.2 3325 | 3326 | siginfo@2.0.0: {} 3327 | 3328 | signal-exit@3.0.7: {} 3329 | 3330 | source-map-js@1.2.1: {} 3331 | 3332 | stackback@0.0.2: {} 3333 | 3334 | std-env@3.8.1: {} 3335 | 3336 | string.prototype.includes@2.0.1: 3337 | dependencies: 3338 | call-bind: 1.0.8 3339 | define-properties: 1.2.1 3340 | es-abstract: 1.23.9 3341 | 3342 | string.prototype.matchall@4.0.12: 3343 | dependencies: 3344 | call-bind: 1.0.8 3345 | call-bound: 1.0.4 3346 | define-properties: 1.2.1 3347 | es-abstract: 1.23.9 3348 | es-errors: 1.3.0 3349 | es-object-atoms: 1.1.1 3350 | get-intrinsic: 1.3.0 3351 | gopd: 1.2.0 3352 | has-symbols: 1.1.0 3353 | internal-slot: 1.1.0 3354 | regexp.prototype.flags: 1.5.4 3355 | set-function-name: 2.0.2 3356 | side-channel: 1.1.0 3357 | 3358 | string.prototype.repeat@1.0.0: 3359 | dependencies: 3360 | define-properties: 1.2.1 3361 | es-abstract: 1.23.9 3362 | 3363 | string.prototype.trim@1.2.10: 3364 | dependencies: 3365 | call-bind: 1.0.8 3366 | call-bound: 1.0.4 3367 | define-data-property: 1.1.4 3368 | define-properties: 1.2.1 3369 | es-abstract: 1.23.9 3370 | es-object-atoms: 1.1.1 3371 | has-property-descriptors: 1.0.2 3372 | 3373 | string.prototype.trimend@1.0.9: 3374 | dependencies: 3375 | call-bind: 1.0.8 3376 | call-bound: 1.0.4 3377 | define-properties: 1.2.1 3378 | es-object-atoms: 1.1.1 3379 | 3380 | string.prototype.trimstart@1.0.8: 3381 | dependencies: 3382 | call-bind: 1.0.8 3383 | define-properties: 1.2.1 3384 | es-object-atoms: 1.1.1 3385 | 3386 | strip-bom@3.0.0: {} 3387 | 3388 | strip-eof@1.0.0: {} 3389 | 3390 | strip-json-comments@3.1.1: {} 3391 | 3392 | supports-color@7.2.0: 3393 | dependencies: 3394 | has-flag: 4.0.0 3395 | 3396 | supports-preserve-symlinks-flag@1.0.0: {} 3397 | 3398 | tinybench@2.9.0: {} 3399 | 3400 | tinyexec@0.3.2: {} 3401 | 3402 | tinypool@1.0.2: {} 3403 | 3404 | tinyrainbow@2.0.0: {} 3405 | 3406 | tinyspy@3.0.2: {} 3407 | 3408 | to-regex-range@5.0.1: 3409 | dependencies: 3410 | is-number: 7.0.0 3411 | 3412 | ts-add-js-extension@1.6.5: 3413 | dependencies: 3414 | typescript: 5.8.2 3415 | 3416 | ts-api-utils@1.4.3(typescript@5.8.2): 3417 | dependencies: 3418 | typescript: 5.8.2 3419 | 3420 | tsconfig-paths@3.15.0: 3421 | dependencies: 3422 | '@types/json5': 0.0.29 3423 | json5: 1.0.2 3424 | minimist: 1.2.8 3425 | strip-bom: 3.0.0 3426 | 3427 | type-check@0.4.0: 3428 | dependencies: 3429 | prelude-ls: 1.2.1 3430 | 3431 | typed-array-buffer@1.0.3: 3432 | dependencies: 3433 | call-bound: 1.0.4 3434 | es-errors: 1.3.0 3435 | is-typed-array: 1.1.15 3436 | 3437 | typed-array-byte-length@1.0.3: 3438 | dependencies: 3439 | call-bind: 1.0.8 3440 | for-each: 0.3.5 3441 | gopd: 1.2.0 3442 | has-proto: 1.2.0 3443 | is-typed-array: 1.1.15 3444 | 3445 | typed-array-byte-offset@1.0.4: 3446 | dependencies: 3447 | available-typed-arrays: 1.0.7 3448 | call-bind: 1.0.8 3449 | for-each: 0.3.5 3450 | gopd: 1.2.0 3451 | has-proto: 1.2.0 3452 | is-typed-array: 1.1.15 3453 | reflect.getprototypeof: 1.0.10 3454 | 3455 | typed-array-length@1.0.7: 3456 | dependencies: 3457 | call-bind: 1.0.8 3458 | for-each: 0.3.5 3459 | gopd: 1.2.0 3460 | is-typed-array: 1.1.15 3461 | possible-typed-array-names: 1.1.0 3462 | reflect.getprototypeof: 1.0.10 3463 | 3464 | typescript-eslint@8.18.2(eslint@9.23.0)(typescript@5.8.2): 3465 | dependencies: 3466 | '@typescript-eslint/eslint-plugin': 8.18.2(@typescript-eslint/parser@8.18.2(eslint@9.23.0)(typescript@5.8.2))(eslint@9.23.0)(typescript@5.8.2) 3467 | '@typescript-eslint/parser': 8.18.2(eslint@9.23.0)(typescript@5.8.2) 3468 | '@typescript-eslint/utils': 8.18.2(eslint@9.23.0)(typescript@5.8.2) 3469 | eslint: 9.23.0 3470 | typescript: 5.8.2 3471 | transitivePeerDependencies: 3472 | - supports-color 3473 | 3474 | typescript@5.8.2: {} 3475 | 3476 | unbox-primitive@1.1.0: 3477 | dependencies: 3478 | call-bound: 1.0.4 3479 | has-bigints: 1.1.0 3480 | has-symbols: 1.1.0 3481 | which-boxed-primitive: 1.1.1 3482 | 3483 | undici-types@6.20.0: {} 3484 | 3485 | uri-js@4.4.1: 3486 | dependencies: 3487 | punycode: 2.3.1 3488 | 3489 | vite-node@3.0.9(@types/node@22.13.14): 3490 | dependencies: 3491 | cac: 6.7.14 3492 | debug: 4.4.0 3493 | es-module-lexer: 1.6.0 3494 | pathe: 2.0.3 3495 | vite: 6.2.3(@types/node@22.13.14) 3496 | transitivePeerDependencies: 3497 | - '@types/node' 3498 | - jiti 3499 | - less 3500 | - lightningcss 3501 | - sass 3502 | - sass-embedded 3503 | - stylus 3504 | - sugarss 3505 | - supports-color 3506 | - terser 3507 | - tsx 3508 | - yaml 3509 | 3510 | vite@6.2.3(@types/node@22.13.14): 3511 | dependencies: 3512 | esbuild: 0.25.1 3513 | postcss: 8.5.3 3514 | rollup: 4.37.0 3515 | optionalDependencies: 3516 | '@types/node': 22.13.14 3517 | fsevents: 2.3.3 3518 | 3519 | vitest@3.0.9(@types/node@22.13.14): 3520 | dependencies: 3521 | '@vitest/expect': 3.0.9 3522 | '@vitest/mocker': 3.0.9(vite@6.2.3(@types/node@22.13.14)) 3523 | '@vitest/pretty-format': 3.0.9 3524 | '@vitest/runner': 3.0.9 3525 | '@vitest/snapshot': 3.0.9 3526 | '@vitest/spy': 3.0.9 3527 | '@vitest/utils': 3.0.9 3528 | chai: 5.2.0 3529 | debug: 4.4.0 3530 | expect-type: 1.2.0 3531 | magic-string: 0.30.17 3532 | pathe: 2.0.3 3533 | std-env: 3.8.1 3534 | tinybench: 2.9.0 3535 | tinyexec: 0.3.2 3536 | tinypool: 1.0.2 3537 | tinyrainbow: 2.0.0 3538 | vite: 6.2.3(@types/node@22.13.14) 3539 | vite-node: 3.0.9(@types/node@22.13.14) 3540 | why-is-node-running: 2.3.0 3541 | optionalDependencies: 3542 | '@types/node': 22.13.14 3543 | transitivePeerDependencies: 3544 | - jiti 3545 | - less 3546 | - lightningcss 3547 | - msw 3548 | - sass 3549 | - sass-embedded 3550 | - stylus 3551 | - sugarss 3552 | - supports-color 3553 | - terser 3554 | - tsx 3555 | - yaml 3556 | 3557 | which-boxed-primitive@1.1.1: 3558 | dependencies: 3559 | is-bigint: 1.1.0 3560 | is-boolean-object: 1.2.2 3561 | is-number-object: 1.1.1 3562 | is-string: 1.1.1 3563 | is-symbol: 1.1.1 3564 | 3565 | which-builtin-type@1.2.1: 3566 | dependencies: 3567 | call-bound: 1.0.4 3568 | function.prototype.name: 1.1.8 3569 | has-tostringtag: 1.0.2 3570 | is-async-function: 2.1.1 3571 | is-date-object: 1.1.0 3572 | is-finalizationregistry: 1.1.1 3573 | is-generator-function: 1.1.0 3574 | is-regex: 1.2.1 3575 | is-weakref: 1.1.1 3576 | isarray: 2.0.5 3577 | which-boxed-primitive: 1.1.1 3578 | which-collection: 1.0.2 3579 | which-typed-array: 1.1.19 3580 | 3581 | which-collection@1.0.2: 3582 | dependencies: 3583 | is-map: 2.0.3 3584 | is-set: 2.0.3 3585 | is-weakmap: 2.0.2 3586 | is-weakset: 2.0.4 3587 | 3588 | which-typed-array@1.1.19: 3589 | dependencies: 3590 | available-typed-arrays: 1.0.7 3591 | call-bind: 1.0.8 3592 | call-bound: 1.0.4 3593 | for-each: 0.3.5 3594 | get-proto: 1.0.1 3595 | gopd: 1.2.0 3596 | has-tostringtag: 1.0.2 3597 | 3598 | which@1.3.1: 3599 | dependencies: 3600 | isexe: 2.0.0 3601 | 3602 | which@2.0.2: 3603 | dependencies: 3604 | isexe: 2.0.0 3605 | 3606 | why-is-node-running@2.3.0: 3607 | dependencies: 3608 | siginfo: 2.0.0 3609 | stackback: 0.0.2 3610 | 3611 | word-wrap@1.2.5: {} 3612 | 3613 | wrappy@1.0.2: {} 3614 | 3615 | yocto-queue@0.1.0: {} 3616 | -------------------------------------------------------------------------------- /public/help.md: -------------------------------------------------------------------------------- 1 | ts-add-js-extension.js 2 | 3 | Automatically appending the `.js` extension to each relative import and export statement in ES Module JavaScript 4 | 5 | This feature is particularly beneficial for TypeScript projects that target ES Module. 6 | 7 | It is worth noting that this package intelligently handles import/export statements and adds `/index.js` where necessary, 8 | allowing you to omit the explicit inclusion of index in the statement. 9 | 10 | Additionally, it can determine whether a file with the mjs or js extension is being imported or exported 11 | 12 | Options: 13 | 14 | 1. --version Show version number 15 | [value: number] 16 | 17 | 2. --help Show help 18 | [value: boolean] 19 | 20 | Operation 21 | 22 | 1. --dir - Specifies the folder where JavaScript file extension needs to be added 23 | [value: string] [required: yes] 24 | 25 | 2. --include - Specifies the folder of files that are imported or included in the dir folder, excluding the specified dir 26 | [value: array of string] [required: no] [default: []] 27 | 28 | 3. --showchanges - Determines whether to display progress feedback in the format of `Num. (File Updated) - (SUCCEED or FAILED)` 29 | [value: boolean] [required: no] [default: true] 30 | -------------------------------------------------------------------------------- /script/package.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | 3 | import pkg from '../package.json'; 4 | 5 | const main = () => { 6 | fs.writeFileSync( 7 | 'src/package.ts', 8 | ` 9 | const pkg = { 10 | name: "${pkg.name}", 11 | version: "${pkg.version}" 12 | } as const 13 | 14 | export default pkg 15 | ` 16 | ); 17 | }; 18 | 19 | main(); 20 | -------------------------------------------------------------------------------- /src/bin.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | import main from '.'; 3 | 4 | void main(process.argv.join(' ')); 5 | -------------------------------------------------------------------------------- /src/cli-command-parser.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import path from 'path'; 3 | 4 | import pkg from './package'; 5 | import { guard } from './type'; 6 | 7 | const commandKeyWords = { 8 | help: { 9 | isMandatory: false, 10 | keyword: 'help', 11 | }, 12 | version: { 13 | isMandatory: false, 14 | keyword: 'version', 15 | }, 16 | dir: { 17 | isMandatory: true, 18 | keyword: 'dir', 19 | }, 20 | include: { 21 | type: 'deprecated', 22 | isMandatory: false, 23 | keyword: 'include', 24 | reason: 'The function `include` is deprecated due to legacy reasons and will be removed in version 2.0', 25 | }, 26 | showChanges: { 27 | type: 'deprecated', 28 | isMandatory: false, 29 | keyword: 'showchanges', 30 | reason: 'The function `showchanges` is deprecated in favor of `showprogress` and will be removed in version 2.0', 31 | }, 32 | showProgress: { 33 | isMandatory: false, 34 | keyword: 'showprogress', 35 | }, 36 | assignment: { 37 | assign: '=', 38 | key: '--', 39 | }, 40 | } as const; 41 | 42 | class TokenParser { 43 | constructor(private readonly token: Token) {} 44 | 45 | readonly parseVersion = () => { 46 | const { keyword } = commandKeyWords.version; 47 | 48 | if (this.token.key !== keyword) { 49 | return { 50 | exists: false, 51 | } as const; 52 | } 53 | 54 | return { 55 | type: keyword, 56 | exists: true, 57 | value: pkg.version, 58 | } as const; 59 | }; 60 | 61 | readonly parseHelp = () => { 62 | const { keyword } = commandKeyWords.help; 63 | 64 | if (this.token.key !== commandKeyWords.help.keyword) { 65 | return { 66 | exists: false, 67 | } as const; 68 | } 69 | 70 | return { 71 | type: keyword, 72 | exists: true, 73 | value: fs.readFileSync('public/help.md', { encoding: 'utf-8' }), 74 | } as const; 75 | }; 76 | 77 | readonly parseDir = () => { 78 | const { keyword } = commandKeyWords.dir; 79 | 80 | if (this.token.key !== commandKeyWords.dir.keyword) { 81 | return { 82 | exists: false, 83 | } as const; 84 | } 85 | 86 | return { 87 | type: keyword, 88 | exists: true, 89 | value: guard({ 90 | value: this.token.value.split(' ').at(0), 91 | error: new Error( 92 | 'There must be at least one element in values for dir' 93 | ), 94 | }), 95 | } as const; 96 | }; 97 | 98 | readonly parseInclude = () => { 99 | const { keyword } = commandKeyWords.include; 100 | 101 | if (this.token.key !== commandKeyWords.include.keyword) { 102 | return { 103 | exists: false, 104 | } as const; 105 | } 106 | 107 | return { 108 | type: keyword, 109 | exists: true, 110 | value: this.token.value.split(' '), 111 | } as const; 112 | }; 113 | 114 | readonly parseBoolean = (keyword: Keyword) => { 115 | return () => { 116 | const { key, value } = this.token; 117 | 118 | if (key !== keyword) { 119 | return { 120 | exists: false, 121 | } as const; 122 | } 123 | 124 | if (value === 'true' || value === 'false') { 125 | return { 126 | type: keyword, 127 | exists: true, 128 | value: value === 'true', 129 | } as const; 130 | } 131 | 132 | throw new Error( 133 | `${key}=${value} is invalid, it can only receive boolean value` 134 | ); 135 | }; 136 | }; 137 | 138 | readonly parseShowProgress = this.parseBoolean( 139 | commandKeyWords.showProgress.keyword 140 | ); 141 | 142 | readonly parseShowChanges = this.parseBoolean( 143 | commandKeyWords.showChanges.keyword 144 | ); 145 | 146 | readonly processNonRecognisableToken = () => { 147 | return { 148 | type: 'invalid', 149 | reason: `'${this.token.key}'='${this.token.value}' token cannot be recognized`, 150 | token: this.token, 151 | } as const; 152 | }; 153 | } 154 | 155 | type Args = ReadonlyArray; 156 | 157 | type Token = Readonly<{ 158 | key: string; 159 | value: string; 160 | }>; 161 | 162 | class ParseArgs { 163 | private readonly tokens: ReadonlyArray; 164 | 165 | private constructor(args: Args) { 166 | this.tokens = this.tokenize(args); 167 | } 168 | 169 | static readonly create = (arg: string) => { 170 | const tokens = arg.split(commandKeyWords.assignment.key); 171 | 172 | const result = ParseArgs.checkPackageName(tokens.at(0)); 173 | 174 | if (result.isInvalid) { 175 | throw result.error; 176 | } 177 | 178 | if (tokens.includes('add')) { 179 | console.log( 180 | 'The "add" in the command can be removed, as it is only used for backward compatibility' 181 | ); 182 | } 183 | 184 | return new this( 185 | tokens 186 | .map((token) => { 187 | return token === 'add' ? '' : token; 188 | }) 189 | .slice(1) 190 | ); 191 | }; 192 | 193 | private static readonly checkPackageName = (name: string | undefined) => { 194 | const packageName = guard({ 195 | value: name, 196 | error: new Error('The pkg name is undefined'), 197 | }); 198 | 199 | return packageName.includes(pkg.name) 200 | ? ({ 201 | isInvalid: false, 202 | } as const) 203 | : ({ 204 | isInvalid: true, 205 | error: new Error( 206 | `The pkg name "${packageName}" passed is invalid` 207 | ), 208 | } as const); 209 | }; 210 | 211 | private readonly tokenize = (args: Args) => { 212 | const { assign } = commandKeyWords.assignment; 213 | 214 | return args 215 | .flatMap((arg) => { 216 | if (arg.includes(assign)) { 217 | return [arg]; 218 | } 219 | 220 | const [nullableKey, ...value] = arg.split(' '); 221 | 222 | const key = guard({ 223 | value: nullableKey, 224 | error: new Error( 225 | 'Key cannot be undefined after being split' 226 | ), 227 | }); 228 | 229 | return [`${key}${assign}${value.join(' ')}`]; 230 | }) 231 | .map((args) => { 232 | const [key, value] = args.split(assign); 233 | 234 | return { 235 | key: guard({ 236 | value: key, 237 | error: new Error( 238 | 'Key cannot be undefined after being flat mapped' 239 | ), 240 | }), 241 | value: guard({ 242 | value, 243 | error: new Error( 244 | 'Value cannot be undefined after being flat mapped' 245 | ), 246 | }).trim(), 247 | } as Token; 248 | }); 249 | }; 250 | 251 | readonly asVersion = () => { 252 | return this.tokens.reduce( 253 | (result, token) => { 254 | if (result.exists) { 255 | return result; 256 | } 257 | return new TokenParser(token).parseVersion(); 258 | }, 259 | { 260 | exists: false, 261 | } as ReturnType 262 | ); 263 | }; 264 | 265 | readonly asHelp = (): ReturnType => { 266 | if (!this.tokens.length) { 267 | return { 268 | type: 'help', 269 | exists: true, 270 | value: fs.readFileSync(path.join('public', 'help.md'), { 271 | encoding: 'utf-8', 272 | }), 273 | }; 274 | } 275 | return this.tokens.reduce( 276 | (result, token) => { 277 | if (result.exists) { 278 | return result; 279 | } 280 | return new TokenParser(token).parseHelp(); 281 | }, 282 | { exists: false } as ReturnType 283 | ); 284 | }; 285 | 286 | readonly asOperation = () => { 287 | const processedToken = this.tokens.map((token) => { 288 | const parser = new TokenParser(token); 289 | const dir = parser.parseDir(); 290 | if (dir.exists) { 291 | return dir; 292 | } 293 | const include = parser.parseInclude(); 294 | if (include.exists) { 295 | return include; 296 | } 297 | const showChanges = parser.parseShowChanges(); 298 | if (showChanges.exists) { 299 | return showChanges; 300 | } 301 | const showProgress = parser.parseShowProgress(); 302 | if (showProgress.exists) { 303 | return showProgress; 304 | } 305 | return parser.processNonRecognisableToken(); 306 | }); 307 | 308 | processedToken.forEach((node) => { 309 | if (node.type === 'showchanges') { 310 | console.warn(commandKeyWords.showChanges.reason); 311 | } else if (node.type === 'include') { 312 | console.warn(commandKeyWords.include.reason); 313 | } 314 | }); 315 | 316 | processedToken 317 | .flatMap((node) => { 318 | return node.type !== 'invalid' ? [] : [node]; 319 | }) 320 | .forEach((node) => { 321 | console.log( 322 | `The "${JSON.stringify(node.token, undefined, 4)}" in the command is invalid as ${node.reason}. So please remove it` 323 | ); 324 | }); 325 | 326 | const nodes = processedToken.flatMap((node) => { 327 | return node.type === 'invalid' ? [] : [node]; 328 | }); 329 | 330 | return { 331 | dir: guard({ 332 | value: nodes.find((node) => { 333 | return node.type === 'dir'; 334 | })?.value, 335 | error: new Error( 336 | 'dir is a mandatory field, it should be present to know which dir it should operate on' 337 | ), 338 | }), 339 | // optional 340 | /** 341 | * @deprecated 342 | * Will be removed in version 2.0 343 | * */ 344 | include: nodes.find((node) => { 345 | return node.type === 'include'; 346 | })?.value, 347 | /** 348 | * @deprecated 349 | * Will be removed in version 2.0 350 | * `showChanges` is deprecated in favor of `showProgress` 351 | * */ 352 | showChanges: nodes.find((node) => { 353 | return node.type === 'showchanges'; 354 | })?.value, 355 | showProgress: nodes.find((node) => { 356 | return node.type === 'showprogress'; 357 | })?.value, 358 | } as const; 359 | }; 360 | } 361 | 362 | type TrueConfig = ReturnType; 363 | 364 | type PartialConfig = Partial> & Pick; 365 | 366 | export type { TrueConfig, PartialConfig }; 367 | 368 | export default ParseArgs; 369 | -------------------------------------------------------------------------------- /src/config.ts: -------------------------------------------------------------------------------- 1 | import type { PartialConfig } from './cli-command-parser'; 2 | 3 | /** 4 | * @deprecated since version 1.4.0 5 | * Will be deleted in version 2.0 6 | * There is no need to parse config with this function 7 | * As configurations can be passed directly 8 | * Using this function will halt the program 9 | * And requires you to write configs directly 10 | * */ 11 | const parseConfig = (_: Readonly>) => { 12 | throw new Error( 13 | [ 14 | `Function parseConfig should not be used, this function exists because of "yargs"`, 15 | `Now yargs is removed, cli arguments parser is hand-written`, 16 | ].join('\n') 17 | ); 18 | }; 19 | 20 | type NormalisedConfig = Readonly<{ 21 | [K in keyof T]-?: NonNullable; 22 | }>; 23 | 24 | const normaliseConfig = ( 25 | config: PartialConfig 26 | ): Omit => { 27 | return { 28 | dir: config.dir, 29 | // eslint-disable-next-line @typescript-eslint/no-deprecated 30 | showProgress: config.showProgress ?? config.showChanges ?? true, 31 | // eslint-disable-next-line @typescript-eslint/no-deprecated 32 | include: config.include ?? [], 33 | }; 34 | }; 35 | 36 | export { normaliseConfig, parseConfig }; 37 | export type { PartialConfig as ParsedConfig }; 38 | -------------------------------------------------------------------------------- /src/const.ts: -------------------------------------------------------------------------------- 1 | const separator = '/'; 2 | 3 | const extensions = { 4 | javaScript: ['.js', '.mjs', '.jsx'], 5 | typeDefinition: ['.d.ts', '.d.mts'], 6 | } as const; 7 | 8 | const matchJs = (filePath: string) => { 9 | return extensions.javaScript.find((extension) => { 10 | return filePath.endsWith(extension); 11 | }); 12 | }; 13 | 14 | const matchDts = (filePath: string) => { 15 | return extensions.typeDefinition.find((extension) => { 16 | return filePath.endsWith(extension); 17 | }); 18 | }; 19 | 20 | const matchEither = (filePath: string) => { 21 | return matchJs(filePath) ?? matchDts(filePath); 22 | }; 23 | 24 | export { extensions, matchJs, matchEither, separator }; 25 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import type { PartialConfig } from './cli-command-parser'; 2 | import type { ParsedConfig } from './config'; 3 | 4 | import ParseArgs from './cli-command-parser'; 5 | import { parseConfig, normaliseConfig } from './config'; 6 | import { writeMany, findMany } from './read-write'; 7 | 8 | const tsAddJsExtension = async ( 9 | props: Readonly<{ 10 | config: PartialConfig; 11 | /** 12 | * @deprecated since version 1.4.0 13 | * Will be removed in version 2.0 14 | * To pass configurations to `tsAddJsExtension` 15 | * Just pass the configurations directly 16 | * ``` 17 | * tsAddJsExtension({ 18 | * config:{ 19 | * dir:'dist' 20 | * } 21 | * }) 22 | * ``` 23 | * Instead of passing with this function 24 | * ``` 25 | * tsAddJsExtension({ 26 | * parsedConfigFunction: () => parseConfig(argv) 27 | * }) 28 | * ``` 29 | * As it will be ignroed 30 | */ 31 | parsedConfigFunction?: () => ParsedConfig; 32 | }> 33 | ) => { 34 | // eslint-disable-next-line @typescript-eslint/no-deprecated 35 | if (props.parsedConfigFunction) { 36 | throw new Error( 37 | [ 38 | `Please do not use parsedConfigFunction as it's deprecated and contains complicated parsing`, 39 | `Instead, just pass configurations directly`, 40 | ].join('\n') 41 | ); 42 | } 43 | 44 | const normalisedConfig = normaliseConfig(props.config); 45 | 46 | return writeMany({ 47 | showProgress: normalisedConfig.showProgress, 48 | foundMany: await findMany(normalisedConfig), 49 | }); 50 | }; 51 | 52 | const main = (args: string) => { 53 | const parser = ParseArgs.create(args); 54 | const help = parser.asHelp(); 55 | 56 | if (help.exists) { 57 | return console.log(help.value); 58 | } 59 | 60 | const version = parser.asVersion(); 61 | 62 | if (version.exists) { 63 | return console.log(version.value); 64 | } 65 | 66 | return tsAddJsExtension({ 67 | config: parser.asOperation(), 68 | }) 69 | .then((result) => { 70 | switch (result.type) { 71 | case 'error': { 72 | console.error(result.error); 73 | } 74 | } 75 | }) 76 | .catch((error: unknown) => { 77 | console.error(error); 78 | }); 79 | }; 80 | 81 | export { parseConfig, tsAddJsExtension }; 82 | export default main; 83 | -------------------------------------------------------------------------------- /src/log.ts: -------------------------------------------------------------------------------- 1 | export default class Log { 2 | static readonly fromNumberOfFiles = (numberOfFiles: number) => { 3 | return new Log(numberOfFiles, 0); 4 | }; 5 | 6 | private constructor( 7 | private readonly numberOfFiles: number, 8 | private completedFiles: number 9 | ) { 10 | if (!this.numberOfFiles) { 11 | throw new Error( 12 | 'Progress cannot be instantiated when there is no files to changes' 13 | ); 14 | } 15 | } 16 | 17 | // ref: https://chrisyeh96.github.io/2020/03/28/terminal-colors.html 18 | private readonly redify = (word: string) => { 19 | return `\x1b[31m${word}\x1b[0m`; 20 | }; 21 | 22 | private readonly cyanify = (word: string) => { 23 | return `\x1b[36m${word}\x1b[0m`; 24 | }; 25 | 26 | private readonly boldify = (word: string) => { 27 | return `\x1b[1:37m${word}\x1b[0m`; 28 | }; 29 | 30 | readonly increment = ( 31 | props: Readonly<{ 32 | file: string; 33 | repeat: number; 34 | succeed: boolean; 35 | }> 36 | ) => { 37 | if (this.numberOfFiles <= this.completedFiles) { 38 | throw new Error( 39 | `Number of files succeed: ${this.completedFiles} cannot be the same as number of files: ${this.numberOfFiles}` 40 | ); 41 | } else { 42 | this.completedFiles++; 43 | console.log( 44 | `${this.completedFiles}. ${' '.repeat( 45 | this.numberOfFiles.toString().length - 46 | this.completedFiles.toString().length 47 | )}${this.boldify(props.file)}${' '.repeat( 48 | props.repeat - props.file.length 49 | )} - ${ 50 | props.succeed 51 | ? this.cyanify('SUCCEED') 52 | : this.redify('FAILED') 53 | }` 54 | ); 55 | } 56 | }; 57 | 58 | readonly end = ( 59 | props: Readonly<{ 60 | errors: ReadonlyArray< 61 | Readonly<{ 62 | file: string; 63 | error: NodeJS.ErrnoException; 64 | }> 65 | >; 66 | }> 67 | ) => { 68 | if (props.errors.length) { 69 | console.error( 70 | `The following file${ 71 | props.errors.length === 1 ? '' : 's' 72 | } failed to add either .js file extension` 73 | ); 74 | console.error( 75 | Array.from(props.errors) 76 | .sort((a, b) => { 77 | return a.file.length - b.file.length; 78 | }) 79 | .map(({ file, error }, index) => { 80 | return `${index}. file: ${file}, reason: ${error.message}`; 81 | }) 82 | .join('\n') 83 | ); 84 | } 85 | }; 86 | } 87 | -------------------------------------------------------------------------------- /src/read-write.ts: -------------------------------------------------------------------------------- 1 | import type { PartialConfig } from './cli-command-parser'; 2 | 3 | import fs from 'fs'; 4 | import path from 'path'; 5 | 6 | import tsc from 'typescript'; 7 | 8 | import { matchEither, separator } from './const'; 9 | import Log from './log'; 10 | import traverseAndUpdateFile from './traverse-and-update'; 11 | 12 | type Metainfo = Awaited[0]>; 13 | 14 | type Files = ReadonlyArray; 15 | 16 | const getAllJSAndDTSFiles = (directory: string): Files => { 17 | return fs.readdirSync(directory).flatMap((file) => { 18 | const filePath = path.posix.join( 19 | directory.split(path.sep).join(separator), 20 | file 21 | ); 22 | 23 | if (fs.statSync(filePath).isDirectory()) { 24 | return getAllJSAndDTSFiles(filePath); 25 | } 26 | 27 | return !matchEither(filePath) ? [] : [filePath]; 28 | }); 29 | }; 30 | 31 | const readCode = (file: string) => { 32 | return new Promise((resolve, reject) => { 33 | const code = [] as Array; 34 | 35 | fs.createReadStream(file) 36 | .on('data', (data) => { 37 | code.push(data.toString()); 38 | }) 39 | .on('end', () => { 40 | resolve(code.join('')); 41 | }) 42 | .on('error', reject); 43 | }); 44 | }; 45 | 46 | const getAllJSAndDTSMetainfo = (files: Files) => { 47 | return files.map(async (file) => { 48 | const code = await readCode(file); 49 | 50 | return { 51 | files, 52 | code, 53 | sourceFile: tsc.createSourceFile( 54 | file, 55 | code, 56 | tsc.ScriptTarget.ESNext 57 | ), 58 | }; 59 | }); 60 | }; 61 | 62 | const findMany = async ( 63 | props: Readonly<{ 64 | dir: PartialConfig['dir']; 65 | include: ReadonlyArray; 66 | }> 67 | ) => { 68 | // user may import files from `common` into `src` 69 | const files = props.include.concat(props.dir).flatMap(getAllJSAndDTSFiles); 70 | 71 | return await Promise.all(getAllJSAndDTSMetainfo(files)); 72 | }; 73 | 74 | const writeMany = async ( 75 | props: Readonly<{ 76 | showProgress: boolean; 77 | foundMany: Awaited>; 78 | }> 79 | ) => { 80 | const transformed = props.foundMany.flatMap(traverseAndUpdateFile); 81 | 82 | const repeat = transformed.reduce((longestFileName, { file }) => { 83 | return Math.max(longestFileName, file.length); 84 | }, 0); 85 | 86 | const log = !(transformed.length && props.showProgress) 87 | ? undefined 88 | : Log.fromNumberOfFiles(transformed.length); 89 | 90 | try { 91 | const errors = ( 92 | await Promise.all( 93 | transformed.map(({ code, file }) => { 94 | return new Promise< 95 | | undefined 96 | | Readonly<{ 97 | file: string; 98 | error: NodeJS.ErrnoException; 99 | }> 100 | >((resolve) => { 101 | return fs.writeFile(file, code, (error) => { 102 | log?.increment({ 103 | repeat, 104 | file, 105 | succeed: !error, 106 | }); 107 | 108 | resolve( 109 | !error 110 | ? undefined 111 | : { 112 | file, 113 | error, 114 | } 115 | ); 116 | }); 117 | }); 118 | }) 119 | ) 120 | ).flatMap((element) => { 121 | return !element ? [] : [element]; 122 | }); 123 | 124 | log?.end({ errors }); 125 | 126 | return { 127 | type: 'done', 128 | } as const; 129 | } catch (error) { 130 | return { 131 | type: 'error', 132 | error, 133 | } as const; 134 | } 135 | }; 136 | 137 | export type { Metainfo, Files }; 138 | export { findMany, writeMany }; 139 | -------------------------------------------------------------------------------- /src/traverse-and-update.ts: -------------------------------------------------------------------------------- 1 | import type { Metainfo, Files } from './read-write'; 2 | 3 | import fs from 'fs'; 4 | import path from 'path'; 5 | 6 | import tsc from 'typescript'; 7 | 8 | import { extensions, matchJs, separator } from './const'; 9 | import { guard } from './type'; 10 | 11 | type FileInfo = Readonly<{ 12 | file: string; 13 | files: Files; 14 | }>; 15 | 16 | type FileInfoWithUpdateFile = FileInfo & 17 | Readonly<{ 18 | updateFile: () => void; 19 | }>; 20 | 21 | type FactoryWithFileInfo = Readonly<{ 22 | factory: tsc.NodeFactory; 23 | fileInfo: FileInfoWithUpdateFile; 24 | }>; 25 | 26 | const formProperFilePath = ( 27 | props: Readonly<{ 28 | filePath: string; 29 | }> 30 | ) => { 31 | return props.filePath.split(separator).filter(Boolean).join(separator); 32 | }; 33 | 34 | const checkJavaScriptFileExistByAppend = ( 35 | props: Readonly<{ 36 | filePath: string; 37 | }> 38 | ) => { 39 | const result = extensions.javaScript 40 | .map((extension) => { 41 | return { 42 | extension, 43 | filePath: `${props.filePath}${extension}`, 44 | }; 45 | }) 46 | .find((filePath) => { 47 | return fs.existsSync(filePath.filePath); 48 | }); 49 | 50 | return result ?? false; 51 | }; 52 | 53 | const checkTypeDefinitionFileExistByAppend = ( 54 | props: Parameters[0] 55 | ) => { 56 | const [js, mjs] = extensions.javaScript; 57 | const [dts, mdts] = extensions.typeDefinition; 58 | 59 | const dtsFilePath = `${props.filePath}${dts}`; 60 | 61 | if (fs.existsSync(dtsFilePath)) { 62 | return { extension: js, filePath: dtsFilePath }; 63 | } 64 | 65 | const mdtsFilePath = `${props.filePath}${mdts}`; 66 | 67 | if (fs.existsSync(mdtsFilePath)) { 68 | return { extension: mjs, filePath: mdtsFilePath }; 69 | } 70 | 71 | return false; 72 | }; 73 | 74 | const isDirectory = (path: string) => { 75 | return fs.existsSync(path) && fs.lstatSync(path).isDirectory(); 76 | }; 77 | 78 | const addJSExtensionConditionally = ( 79 | props: Readonly<{ 80 | filePath: string; 81 | importPath: string; 82 | checkType: 'dts' | 'js'; 83 | }> 84 | ) => { 85 | const check = 86 | props.checkType === 'js' 87 | ? checkJavaScriptFileExistByAppend 88 | : checkTypeDefinitionFileExistByAppend; 89 | 90 | const skip = { 91 | procedure: 'skip', 92 | } as const; 93 | 94 | if (isDirectory(props.filePath)) { 95 | const result = check({ 96 | filePath: path.posix.join(props.filePath, 'index'), 97 | }); 98 | 99 | if (!result) { 100 | return skip; 101 | } 102 | 103 | const file = `index${result.extension}`; 104 | 105 | return { 106 | procedure: 'proceed', 107 | absolutePath: result.filePath, 108 | importPath: formProperFilePath({ 109 | filePath: `${props.importPath}${separator}${file}`, 110 | }), 111 | } as const; 112 | } 113 | 114 | const result = check({ 115 | filePath: props.filePath, 116 | }); 117 | 118 | if (!result) { 119 | return skip; 120 | } 121 | 122 | return { 123 | procedure: 'proceed', 124 | absolutePath: result.filePath, 125 | importPath: formProperFilePath({ 126 | filePath: `${props.importPath}${result.extension}`, 127 | }), 128 | } as const; 129 | }; 130 | 131 | const addJSExtension = ( 132 | props: Readonly<{ 133 | filePath: string; 134 | importPath: string; 135 | }> 136 | ) => { 137 | if (matchJs(props.filePath)) { 138 | return { 139 | procedure: 'skip', 140 | } as const; 141 | } 142 | 143 | const result = addJSExtensionConditionally({ 144 | ...props, 145 | checkType: 'js', 146 | }); 147 | 148 | switch (result.procedure) { 149 | case 'proceed': { 150 | return result; 151 | } 152 | case 'skip': { 153 | return addJSExtensionConditionally({ 154 | ...props, 155 | checkType: 'dts', 156 | }); 157 | } 158 | } 159 | }; 160 | 161 | const generateModuleSpecifier = ( 162 | props: FileInfo & 163 | Readonly<{ 164 | moduleSpecifier: string; 165 | }> 166 | ) => { 167 | if (!props.moduleSpecifier.startsWith('.')) { 168 | return undefined; 169 | } 170 | 171 | const result = addJSExtension({ 172 | importPath: props.moduleSpecifier, 173 | filePath: path.posix.join(props.file, '..', props.moduleSpecifier), 174 | }); 175 | 176 | switch (result.procedure) { 177 | case 'proceed': { 178 | if ( 179 | props.files.find((file) => { 180 | return file.endsWith(result.absolutePath); 181 | }) 182 | ) { 183 | return result.importPath; 184 | } 185 | } 186 | } 187 | 188 | return undefined; 189 | }; 190 | 191 | const nodeIsStringLiteral = (node: tsc.Node) => { 192 | return ( 193 | tsc.isStringLiteral(node) || tsc.isNoSubstitutionTemplateLiteral(node) 194 | ); 195 | }; 196 | 197 | const dynamicJsImport = ( 198 | props: FactoryWithFileInfo & 199 | Readonly<{ 200 | node: tsc.CallExpression; 201 | }> 202 | ) => { 203 | const { node } = props; 204 | 205 | if (node.expression.kind === tsc.SyntaxKind.ImportKeyword) { 206 | const argument = guard({ 207 | value: node.arguments[0], 208 | error: new Error(`Dynamic import must have a path`), 209 | }); 210 | 211 | if (nodeIsStringLiteral(argument)) { 212 | const text = generateModuleSpecifier({ 213 | ...props.fileInfo, 214 | moduleSpecifier: argument.text, 215 | }); 216 | 217 | if (!text) { 218 | return node; 219 | } 220 | 221 | props.fileInfo.updateFile(); 222 | 223 | return props.factory.updateCallExpression( 224 | node, 225 | node.expression, 226 | node.typeArguments, 227 | [props.factory.createStringLiteral(text)] 228 | ); 229 | } 230 | } 231 | 232 | return node; 233 | }; 234 | 235 | const dynamicDtsImport = ( 236 | props: FactoryWithFileInfo & 237 | Readonly<{ 238 | node: tsc.ImportTypeNode; 239 | }> 240 | ) => { 241 | const { node } = props; 242 | const { argument } = node; 243 | 244 | if (tsc.isLiteralTypeNode(argument)) { 245 | const { literal } = argument; 246 | 247 | if (nodeIsStringLiteral(literal)) { 248 | const text = generateModuleSpecifier({ 249 | ...props.fileInfo, 250 | moduleSpecifier: literal.text, 251 | }); 252 | 253 | if (!text) { 254 | return node; 255 | } 256 | 257 | props.fileInfo.updateFile(); 258 | 259 | return props.factory.updateImportTypeNode( 260 | node, 261 | props.factory.updateLiteralTypeNode( 262 | argument, 263 | props.factory.createStringLiteral(text) 264 | ), 265 | node.attributes, 266 | node.qualifier, 267 | node.typeArguments, 268 | node.isTypeOf 269 | ); 270 | } 271 | } 272 | 273 | return node; 274 | }; 275 | 276 | const staticImportExport = ( 277 | props: FactoryWithFileInfo & 278 | Readonly<{ 279 | node: tsc.ImportDeclaration | tsc.ExportDeclaration; 280 | }> 281 | ) => { 282 | const { node } = props; 283 | const { moduleSpecifier } = node; 284 | 285 | if (!moduleSpecifier || !tsc.isStringLiteral(moduleSpecifier)) { 286 | return node; 287 | } 288 | 289 | const text = generateModuleSpecifier({ 290 | ...props.fileInfo, 291 | moduleSpecifier: moduleSpecifier.text, 292 | }); 293 | 294 | if (!text) { 295 | return node; 296 | } 297 | 298 | props.fileInfo.updateFile(); 299 | 300 | if (tsc.isImportDeclaration(node)) { 301 | return props.factory.updateImportDeclaration( 302 | node, 303 | node.modifiers, 304 | node.importClause, 305 | props.factory.createStringLiteral(text), 306 | node.attributes 307 | ); 308 | } 309 | 310 | return props.factory.updateExportDeclaration( 311 | node, 312 | node.modifiers, 313 | node.isTypeOnly, 314 | node.exportClause, 315 | props.factory.createStringLiteral(text), 316 | node.attributes 317 | ); 318 | }; 319 | 320 | const updateImportExport = ( 321 | props: Readonly<{ 322 | context: tsc.TransformationContext; 323 | fileInfo: FileInfoWithUpdateFile; 324 | }> 325 | ) => { 326 | return (parent: tsc.Node): tsc.Node => { 327 | const node = tsc.visitEachChild( 328 | parent, 329 | updateImportExport(props), 330 | props.context 331 | ); 332 | 333 | const parameters = { 334 | fileInfo: props.fileInfo, 335 | factory: props.context.factory, 336 | }; 337 | 338 | if (tsc.isImportDeclaration(node) || tsc.isExportDeclaration(node)) { 339 | return staticImportExport({ 340 | ...parameters, 341 | node, 342 | }); 343 | } else if (tsc.isCallExpression(node)) { 344 | return dynamicJsImport({ 345 | ...parameters, 346 | node, 347 | }); 348 | } else if (tsc.isImportTypeNode(node)) { 349 | return dynamicDtsImport({ 350 | ...parameters, 351 | node, 352 | }); 353 | } 354 | 355 | return node; 356 | }; 357 | }; 358 | 359 | const traverse = ( 360 | props: Omit[0], 'context'> 361 | ) => { 362 | return (context: tsc.TransformationContext) => { 363 | return (rootNode: tsc.Node) => { 364 | return tsc.visitNode( 365 | rootNode, 366 | updateImportExport({ 367 | ...props, 368 | context, 369 | }) 370 | ); 371 | }; 372 | }; 373 | }; 374 | 375 | const traverseAndUpdateFile = (metainfo: Metainfo) => { 376 | const printer = tsc.createPrinter(); 377 | 378 | let fileUpdated = false as boolean; 379 | 380 | const { fileName: file } = metainfo.sourceFile; 381 | 382 | const transformer = traverse({ 383 | fileInfo: { 384 | files: metainfo.files, 385 | file, 386 | updateFile: () => { 387 | fileUpdated = true; 388 | }, 389 | }, 390 | }); 391 | 392 | const code = printer.printNode( 393 | tsc.EmitHint.Unspecified, 394 | guard({ 395 | value: tsc 396 | .transform(metainfo.sourceFile, [transformer]) 397 | .transformed.at(0), 398 | error: new Error('Transformer should have a transformed value'), 399 | }), 400 | metainfo.sourceFile 401 | ); 402 | 403 | if (!fileUpdated) { 404 | return []; 405 | } 406 | 407 | return [ 408 | { 409 | file, 410 | code, 411 | }, 412 | ]; 413 | }; 414 | 415 | export default traverseAndUpdateFile; 416 | -------------------------------------------------------------------------------- /src/type.ts: -------------------------------------------------------------------------------- 1 | const guard = ( 2 | props: Readonly<{ 3 | value: T; 4 | error: Error; 5 | }> 6 | ) => { 7 | const t = props.value; 8 | 9 | if (t !== undefined && t !== null) { 10 | return t; 11 | } 12 | 13 | throw props.error; 14 | }; 15 | 16 | export { guard }; 17 | -------------------------------------------------------------------------------- /test/args/help.test.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | 3 | import { describe, it, expect } from 'vitest'; 4 | 5 | import ParseArgs from '../../src/cli-command-parser'; 6 | 7 | describe('Help argument parsing', () => { 8 | const result = { 9 | exists: true, 10 | type: 'help', 11 | value: fs.readFileSync('public/help.md', { encoding: 'utf-8' }), 12 | }; 13 | 14 | it('should parse config as help when help argument is absent', () => { 15 | expect( 16 | ParseArgs.create(['node', 'ts-add-js-extension'].join(' ')).asHelp() 17 | ).toStrictEqual(result); 18 | }); 19 | 20 | it('should parse config as help when help argument is given', () => { 21 | expect( 22 | ParseArgs.create( 23 | ['node', 'ts-add-js-extension', '--help'].join(' ') 24 | ).asHelp() 25 | ).toStrictEqual(result); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /test/args/operation.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, it, expect } from 'vitest'; 2 | 3 | import ParseArgs from '../../src/cli-command-parser'; 4 | 5 | describe('Operation arguments parsing', () => { 6 | const delimiter = ['=', ' '] as const; 7 | 8 | it.each(delimiter)( 9 | 'should parse config when all options are given with assignment of %s and "add" is absent', 10 | (delimiter) => { 11 | expect( 12 | ParseArgs.create( 13 | [ 14 | 'node', 15 | 'ts-add-js-extension', 16 | `--dir${delimiter}build/mjs`, 17 | `--include${delimiter}build/dts build/js test`, 18 | `--showchanges${delimiter}true`, 19 | ].join(' ') 20 | ).asOperation() 21 | ).toStrictEqual({ 22 | dir: 'build/mjs', 23 | include: ['build/dts', 'build/js', 'test'], 24 | showChanges: true, 25 | showProgress: undefined, 26 | }); 27 | } 28 | ); 29 | 30 | it.each(delimiter)( 31 | 'should parse config when optional options are absent with assignment of %s', 32 | (delimiter) => { 33 | expect( 34 | ParseArgs.create( 35 | [ 36 | 'node', 37 | 'ts-add-js-extension', 38 | 'add', 39 | `--dir${delimiter}build/mjs`, 40 | ].join(' ') 41 | ).asOperation() 42 | ).toStrictEqual({ 43 | dir: 'build/mjs', 44 | include: undefined, 45 | showChanges: undefined, 46 | showProgress: undefined, 47 | }); 48 | } 49 | ); 50 | 51 | it('should parse config and throw error when mandatory options are absent', () => { 52 | expect(() => { 53 | return ParseArgs.create( 54 | [ 55 | 'node', 56 | 'ts-add-js-extension', 57 | 'add', 58 | '--include=build/dts', 59 | '--showchanges=true', 60 | ].join(' ') 61 | ).asOperation(); 62 | }).toThrowError(); 63 | }); 64 | 65 | it('should parse both `showchanges` and `showprogress`', () => { 66 | expect( 67 | ParseArgs.create( 68 | [ 69 | 'node', 70 | 'ts-add-js-extension', 71 | 'add', 72 | '--dir=build', 73 | '--showchanges=true', 74 | '--showprogress=true', 75 | ].join(' ') 76 | ).asOperation() 77 | ).toStrictEqual({ 78 | dir: 'build', 79 | include: undefined, 80 | showChanges: true, 81 | showProgress: true, 82 | }); 83 | }); 84 | }); 85 | -------------------------------------------------------------------------------- /test/args/version.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, it, expect } from 'vitest'; 2 | 3 | import pkg from '../../package.json'; 4 | import ParseArgs from '../../src/cli-command-parser'; 5 | 6 | describe('Version argument parsing', () => { 7 | it('should parse config as help when help argument is absent', () => { 8 | expect( 9 | ParseArgs.create( 10 | ['node', 'ts-add-js-extension'].join(' ') 11 | ).asVersion() 12 | ).toStrictEqual({ exists: false }); 13 | }); 14 | 15 | it('should parse config as help when help argument is given', () => { 16 | expect( 17 | ParseArgs.create( 18 | ['node', 'ts-add-js-extension', '--version'].join(' ') 19 | ).asVersion() 20 | ).toStrictEqual({ type: 'version', exists: true, value: pkg.version }); 21 | }); 22 | }); 23 | -------------------------------------------------------------------------------- /test/config/index.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, it, expect } from 'vitest'; 2 | 3 | import { parseConfig } from '../../src'; 4 | import { normaliseConfig } from '../../src/config'; 5 | 6 | describe('Config parsing', () => { 7 | it('should throw error when parsing config the old way', () => { 8 | expect(() => { 9 | // eslint-disable-next-line @typescript-eslint/no-deprecated 10 | return parseConfig({ 11 | dir: 'dir', 12 | include: ['hi'], 13 | }); 14 | }).toThrowError(); 15 | }); 16 | 17 | it('should parse config when only non optional config options are given', () => { 18 | expect(() => { 19 | // eslint-disable-next-line @typescript-eslint/no-deprecated 20 | return parseConfig({ 21 | dir: 'dir', 22 | }); 23 | }).toThrowError(); 24 | }); 25 | }); 26 | 27 | describe('Normalising config', () => { 28 | it('should normalise both `showChanges` and `showProgress` to `showProgress` only', () => { 29 | expect( 30 | normaliseConfig({ 31 | dir: 'dir', 32 | showChanges: true, 33 | showProgress: false, 34 | }) 35 | ).toStrictEqual({ 36 | dir: 'dir', 37 | showProgress: false, 38 | include: [], 39 | }); 40 | }); 41 | 42 | it('should normalise `showChanges` to `showProgress`', () => { 43 | expect( 44 | normaliseConfig({ 45 | dir: 'dir', 46 | showChanges: true, 47 | }) 48 | ).toStrictEqual({ 49 | dir: 'dir', 50 | showProgress: true, 51 | include: [], 52 | }); 53 | }); 54 | 55 | it('should normalise `showProgress` to `showProgress`', () => { 56 | expect( 57 | normaliseConfig({ 58 | dir: 'dir', 59 | showProgress: true, 60 | }) 61 | ).toStrictEqual({ 62 | dir: 'dir', 63 | showProgress: true, 64 | include: [], 65 | }); 66 | }); 67 | }); 68 | -------------------------------------------------------------------------------- /test/process/expected-result/dts/dts-only/dynamic-import-typeargs.d.ts: -------------------------------------------------------------------------------- 1 | type WithTypeArgs = import("./utils/index.js").GenericType; 2 | -------------------------------------------------------------------------------- /test/process/expected-result/dts/dts-only/index.d.ts: -------------------------------------------------------------------------------- 1 | export * from "./utils/index.js"; 2 | export * from "./utils/util.mjs"; 3 | export * from "../../js/main/index.css"; 4 | export declare const dynamic = () => Promise; 5 | export type a = typeof import("./utils/index.js"); 6 | Promise<{ 7 | default: typeof import("./utils/index.js"); 8 | getHeapStatistics(): import("./utils/index.js").HeapStatistics; 9 | }>; 10 | -------------------------------------------------------------------------------- /test/process/expected-result/dts/dts-only/invalid-dynamic-import.d.ts: -------------------------------------------------------------------------------- 1 | export declare const invalid: Promise<`./index${'.js'}`>; 2 | -------------------------------------------------------------------------------- /test/process/expected-result/dts/dts-only/untouched.d.ts: -------------------------------------------------------------------------------- 1 | export * from './utils/index.js'; 2 | export * from './utils/util.mjs'; 3 | export declare const dynamic = () => Promise; 4 | export type a = typeof import(`./utils/index.js`); 5 | Promise<{ 6 | default: typeof import(`./utils/index.js`); 7 | getHeapStatistics(): import('./utils/index.js').HeapStatistics; 8 | }>; 9 | -------------------------------------------------------------------------------- /test/process/expected-result/dts/dts-only/utils/index.d.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GervinFung/ts-add-js-extension/42854c0ee0b8e71078fa00a1ab7bcc20a066d570/test/process/expected-result/dts/dts-only/utils/index.d.ts -------------------------------------------------------------------------------- /test/process/expected-result/dts/dts-only/utils/util.d.mts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GervinFung/ts-add-js-extension/42854c0ee0b8e71078fa00a1ab7bcc20a066d570/test/process/expected-result/dts/dts-only/utils/util.d.mts -------------------------------------------------------------------------------- /test/process/expected-result/dts/with-js/components/component.d.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GervinFung/ts-add-js-extension/42854c0ee0b8e71078fa00a1ab7bcc20a066d570/test/process/expected-result/dts/with-js/components/component.d.ts -------------------------------------------------------------------------------- /test/process/expected-result/dts/with-js/components/component.jsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GervinFung/ts-add-js-extension/42854c0ee0b8e71078fa00a1ab7bcc20a066d570/test/process/expected-result/dts/with-js/components/component.jsx -------------------------------------------------------------------------------- /test/process/expected-result/dts/with-js/components/index.d.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GervinFung/ts-add-js-extension/42854c0ee0b8e71078fa00a1ab7bcc20a066d570/test/process/expected-result/dts/with-js/components/index.d.ts -------------------------------------------------------------------------------- /test/process/expected-result/dts/with-js/components/index.jsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GervinFung/ts-add-js-extension/42854c0ee0b8e71078fa00a1ab7bcc20a066d570/test/process/expected-result/dts/with-js/components/index.jsx -------------------------------------------------------------------------------- /test/process/expected-result/dts/with-js/index.d.ts: -------------------------------------------------------------------------------- 1 | export * from "./utils/index.js"; 2 | export * from "./utils/util.mjs"; 3 | export * from "./components/index.jsx"; 4 | export * from "./components/component.jsx"; 5 | export declare const dynamic = () => Promise; 6 | export declare const dynamic1 = () => Promise; 7 | -------------------------------------------------------------------------------- /test/process/expected-result/dts/with-js/index.js: -------------------------------------------------------------------------------- 1 | export * from "./utils/index.js"; 2 | export * from "./utils/util.mjs"; 3 | export * from "./components/index.jsx"; 4 | export * from "./components/component.jsx"; 5 | export const dynamic = () => import("./utils/index.js"); 6 | export const dynamic1 = () => import("./utils/index.js"); 7 | -------------------------------------------------------------------------------- /test/process/expected-result/dts/with-js/utils/index.d.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GervinFung/ts-add-js-extension/42854c0ee0b8e71078fa00a1ab7bcc20a066d570/test/process/expected-result/dts/with-js/utils/index.d.ts -------------------------------------------------------------------------------- /test/process/expected-result/dts/with-js/utils/index.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GervinFung/ts-add-js-extension/42854c0ee0b8e71078fa00a1ab7bcc20a066d570/test/process/expected-result/dts/with-js/utils/index.js -------------------------------------------------------------------------------- /test/process/expected-result/dts/with-js/utils/util.d.mts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GervinFung/ts-add-js-extension/42854c0ee0b8e71078fa00a1ab7bcc20a066d570/test/process/expected-result/dts/with-js/utils/util.d.mts -------------------------------------------------------------------------------- /test/process/expected-result/dts/with-js/utils/util.mjs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GervinFung/ts-add-js-extension/42854c0ee0b8e71078fa00a1ab7bcc20a066d570/test/process/expected-result/dts/with-js/utils/util.mjs -------------------------------------------------------------------------------- /test/process/expected-result/js/main/component.jsx: -------------------------------------------------------------------------------- 1 | import * as js from "./util.js"; 2 | -------------------------------------------------------------------------------- /test/process/expected-result/js/main/component2.jsx: -------------------------------------------------------------------------------- 1 | import Component from "./component.jsx"; 2 | -------------------------------------------------------------------------------- /test/process/expected-result/js/main/index.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GervinFung/ts-add-js-extension/42854c0ee0b8e71078fa00a1ab7bcc20a066d570/test/process/expected-result/js/main/index.css -------------------------------------------------------------------------------- /test/process/expected-result/js/main/index.js: -------------------------------------------------------------------------------- 1 | import * as fs from "fs"; 2 | import fs from "fs"; 3 | import { fs } from "fs"; 4 | import * as util from "./util.js"; 5 | import util from "./util.js"; 6 | import { util, mapBlogPostStatesToNative, transformBannerImage, useBlogPostStates, } from "./util.js"; 7 | export * as fs from "fs"; 8 | export * from "fs"; 9 | export { fs } from "fs"; 10 | export * as util from "./util.js"; 11 | export * from "./util.js"; 12 | export { util } from "./util.js"; 13 | import "./index.css"; 14 | -------------------------------------------------------------------------------- /test/process/expected-result/js/main/util.js: -------------------------------------------------------------------------------- 1 | import * as index from "./index.js"; 2 | import index from "./index.js"; 3 | import { index } from "./index.js"; 4 | import * as util from "./util/index.mjs"; 5 | import util from "../util/index.mjs"; 6 | import { util } from "../util/index.mjs"; 7 | export * as util from "../util/index.mjs"; 8 | export * from "../util/index.mjs"; 9 | export { util } from "../util/index.mjs"; 10 | -------------------------------------------------------------------------------- /test/process/expected-result/js/util/index.mjs: -------------------------------------------------------------------------------- 1 | export * from "../main/index.js"; 2 | export const fn = () => { 3 | import("../main/index.js").then(({ qualifier }) => { 4 | return qualifier; 5 | }); 6 | return import("../main/index.js"); 7 | }; 8 | -------------------------------------------------------------------------------- /test/process/expected-result/js/util/invalid-dynamic-import.js: -------------------------------------------------------------------------------- 1 | import('./index' + 'a'); 2 | import('./'.concat('a')); 3 | import(`./${'a'}`); 4 | -------------------------------------------------------------------------------- /test/process/expected-result/js/util/untouched.js: -------------------------------------------------------------------------------- 1 | export * from '../main/index.js'; 2 | export const fn = () => { 3 | import(`../main/index.js`).then(({ qualifier }) => { 4 | return qualifier; 5 | }); 6 | return import('../main/index.js'); 7 | }; 8 | -------------------------------------------------------------------------------- /test/process/index.test.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import path from 'path'; 3 | 4 | import { describe, it, expect } from 'vitest'; 5 | 6 | import { tsAddJsExtension } from '../../src'; 7 | 8 | describe('ts add js extension', () => { 9 | const getPath = (subPath: string) => { 10 | return path.join(__dirname, subPath); 11 | }; 12 | 13 | const getAllActualCodeWithFilePath = ( 14 | dir: string 15 | ): ReadonlyArray< 16 | Readonly<{ 17 | code: Readonly<{ 18 | actual: () => string; 19 | expected: () => string; 20 | }>; 21 | }> 22 | > => { 23 | return fs.readdirSync(dir).flatMap((file) => { 24 | const filePath = path.join(dir, file); 25 | 26 | if (fs.statSync(filePath).isDirectory()) { 27 | return getAllActualCodeWithFilePath(filePath); 28 | } 29 | 30 | return [ 31 | { 32 | code: { 33 | actual: () => { 34 | return fs.readFileSync(filePath, { 35 | encoding: 'utf-8', 36 | }); 37 | }, 38 | expected: () => { 39 | return fs.readFileSync( 40 | filePath.replace('actual', 'expected'), 41 | { 42 | encoding: 'utf-8', 43 | } 44 | ); 45 | }, 46 | }, 47 | }, 48 | ]; 49 | }); 50 | }; 51 | 52 | describe('for JavaScript files only', () => { 53 | const parentDir = getPath(path.join('actual-result', 'js')); 54 | 55 | const javaScriptIncludes = fs 56 | .readdirSync(parentDir) 57 | .map((childPath) => { 58 | return path.join(parentDir, childPath); 59 | }); 60 | 61 | describe.each(javaScriptIncludes)( 62 | 'assert that it will work for JavaScript files with import/export statement', 63 | (dir) => { 64 | const result = tsAddJsExtension({ 65 | config: { 66 | dir, 67 | include: javaScriptIncludes, 68 | }, 69 | }); 70 | 71 | it('should be able to append either js or mjs file extension', async () => { 72 | expect((await result).type).toBe('done'); 73 | }); 74 | 75 | it.each(getAllActualCodeWithFilePath(dir))( 76 | 'should assert that file extension was added to proper import/export statement for file %s', 77 | async ({ code }) => { 78 | await result; 79 | expect(code.actual()).toBe(code.expected()); 80 | } 81 | ); 82 | } 83 | ); 84 | }); 85 | 86 | describe('for Type Definition files only', () => { 87 | const parentDir = getPath(path.join('actual-result', 'dts')); 88 | 89 | describe.each( 90 | fs.readdirSync(parentDir).map((childPath) => { 91 | return path.join(parentDir, childPath); 92 | }) 93 | )( 94 | 'assert that it will work for Type Definition files with or without JavaScript', 95 | (dir) => { 96 | const result = tsAddJsExtension({ 97 | config: { 98 | dir, 99 | }, 100 | }); 101 | 102 | it(`should be able to append .js/.mjs extension for Type Definition file of ${dir}`, async () => { 103 | expect((await result).type).toBe('done'); 104 | }); 105 | 106 | it.each(getAllActualCodeWithFilePath(dir))( 107 | 'should assert that file extension was added to proper import/export statement', 108 | async ({ code }) => { 109 | await result; 110 | expect(code.actual()).toBe(code.expected()); 111 | } 112 | ); 113 | } 114 | ); 115 | }); 116 | }); 117 | -------------------------------------------------------------------------------- /test/process/source/dts/dts-only/dynamic-import-typeargs.d.ts: -------------------------------------------------------------------------------- 1 | type WithTypeArgs = import('./utils').GenericType; 2 | -------------------------------------------------------------------------------- /test/process/source/dts/dts-only/index.d.ts: -------------------------------------------------------------------------------- 1 | export * from './utils'; 2 | export * from './utils/util'; 3 | export * from '../../js/main/index.css'; 4 | export declare const dynamic = () => Promise; 5 | export type a = typeof import('./utils'); 6 | Promise<{ 7 | default: typeof import(`./utils`); 8 | getHeapStatistics(): import('./utils').HeapStatistics; 9 | }>; 10 | -------------------------------------------------------------------------------- /test/process/source/dts/dts-only/invalid-dynamic-import.d.ts: -------------------------------------------------------------------------------- 1 | export declare const invalid: Promise<`./index${'.js'}`>; 2 | -------------------------------------------------------------------------------- /test/process/source/dts/dts-only/untouched.d.ts: -------------------------------------------------------------------------------- 1 | export * from './utils/index.js'; 2 | export * from './utils/util.mjs'; 3 | export declare const dynamic = () => Promise; 4 | export type a = typeof import(`./utils/index.js`); 5 | Promise<{ 6 | default: typeof import(`./utils/index.js`); 7 | getHeapStatistics(): import('./utils/index.js').HeapStatistics; 8 | }>; 9 | -------------------------------------------------------------------------------- /test/process/source/dts/dts-only/utils/index.d.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GervinFung/ts-add-js-extension/42854c0ee0b8e71078fa00a1ab7bcc20a066d570/test/process/source/dts/dts-only/utils/index.d.ts -------------------------------------------------------------------------------- /test/process/source/dts/dts-only/utils/util.d.mts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GervinFung/ts-add-js-extension/42854c0ee0b8e71078fa00a1ab7bcc20a066d570/test/process/source/dts/dts-only/utils/util.d.mts -------------------------------------------------------------------------------- /test/process/source/dts/with-js/components/component.d.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GervinFung/ts-add-js-extension/42854c0ee0b8e71078fa00a1ab7bcc20a066d570/test/process/source/dts/with-js/components/component.d.ts -------------------------------------------------------------------------------- /test/process/source/dts/with-js/components/component.jsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GervinFung/ts-add-js-extension/42854c0ee0b8e71078fa00a1ab7bcc20a066d570/test/process/source/dts/with-js/components/component.jsx -------------------------------------------------------------------------------- /test/process/source/dts/with-js/components/index.d.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GervinFung/ts-add-js-extension/42854c0ee0b8e71078fa00a1ab7bcc20a066d570/test/process/source/dts/with-js/components/index.d.ts -------------------------------------------------------------------------------- /test/process/source/dts/with-js/components/index.jsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GervinFung/ts-add-js-extension/42854c0ee0b8e71078fa00a1ab7bcc20a066d570/test/process/source/dts/with-js/components/index.jsx -------------------------------------------------------------------------------- /test/process/source/dts/with-js/index.d.ts: -------------------------------------------------------------------------------- 1 | export * from './utils'; 2 | export * from './utils/util'; 3 | export * from './components'; 4 | export * from './components/component'; 5 | export declare const dynamic = () => Promise; 6 | export declare const dynamic1 = () => 7 | Promise; 8 | -------------------------------------------------------------------------------- /test/process/source/dts/with-js/index.js: -------------------------------------------------------------------------------- 1 | export * from './utils'; 2 | export * from './utils/util'; 3 | export * from './components'; 4 | export * from './components/component'; 5 | export const dynamic = () => import('./utils'); 6 | export const dynamic1 = () => import(`./utils`); 7 | -------------------------------------------------------------------------------- /test/process/source/dts/with-js/utils/index.d.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GervinFung/ts-add-js-extension/42854c0ee0b8e71078fa00a1ab7bcc20a066d570/test/process/source/dts/with-js/utils/index.d.ts -------------------------------------------------------------------------------- /test/process/source/dts/with-js/utils/index.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GervinFung/ts-add-js-extension/42854c0ee0b8e71078fa00a1ab7bcc20a066d570/test/process/source/dts/with-js/utils/index.js -------------------------------------------------------------------------------- /test/process/source/dts/with-js/utils/util.d.mts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GervinFung/ts-add-js-extension/42854c0ee0b8e71078fa00a1ab7bcc20a066d570/test/process/source/dts/with-js/utils/util.d.mts -------------------------------------------------------------------------------- /test/process/source/dts/with-js/utils/util.mjs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GervinFung/ts-add-js-extension/42854c0ee0b8e71078fa00a1ab7bcc20a066d570/test/process/source/dts/with-js/utils/util.mjs -------------------------------------------------------------------------------- /test/process/source/js/main/component.jsx: -------------------------------------------------------------------------------- 1 | import * as js from './util'; 2 | -------------------------------------------------------------------------------- /test/process/source/js/main/component2.jsx: -------------------------------------------------------------------------------- 1 | import Component from './component'; 2 | -------------------------------------------------------------------------------- /test/process/source/js/main/index.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GervinFung/ts-add-js-extension/42854c0ee0b8e71078fa00a1ab7bcc20a066d570/test/process/source/js/main/index.css -------------------------------------------------------------------------------- /test/process/source/js/main/index.js: -------------------------------------------------------------------------------- 1 | import * as fs from 'fs'; 2 | import fs from 'fs'; 3 | import { fs } from 'fs'; 4 | 5 | import * as util from './util'; 6 | import util from './util'; 7 | import { 8 | util, 9 | mapBlogPostStatesToNative, 10 | transformBannerImage, 11 | useBlogPostStates, 12 | } from './util'; 13 | 14 | export * as fs from 'fs'; 15 | export * from 'fs'; 16 | export { fs } from 'fs'; 17 | 18 | export * as util from './util'; 19 | export * from './util'; 20 | export { util } from './util'; 21 | 22 | import './index.css'; 23 | -------------------------------------------------------------------------------- /test/process/source/js/main/util.js: -------------------------------------------------------------------------------- 1 | import * as index from './index.js'; 2 | import index from './'; 3 | import { index } from '.'; 4 | 5 | import * as util from './util/index.mjs'; 6 | import util from '..//util'; 7 | import { util } from '../util/index'; 8 | 9 | export * as util from '../util/index.mjs'; 10 | export * from '..//util'; 11 | export { util } from '../util/index'; 12 | -------------------------------------------------------------------------------- /test/process/source/js/util/index.mjs: -------------------------------------------------------------------------------- 1 | export * from '../main'; 2 | export const fn = () => { 3 | import(`../main`).then(({ qualifier }) => { 4 | return qualifier; 5 | }); 6 | return import('../main'); 7 | }; 8 | -------------------------------------------------------------------------------- /test/process/source/js/util/invalid-dynamic-import.js: -------------------------------------------------------------------------------- 1 | import('./index' + 'a'); 2 | import('./'.concat('a')); 3 | import(`./${'a'}`); 4 | -------------------------------------------------------------------------------- /test/process/source/js/util/untouched.js: -------------------------------------------------------------------------------- 1 | export * from '../main/index.js'; 2 | export const fn = () => { 3 | import(`../main/index.js`).then(({ qualifier }) => { 4 | return qualifier; 5 | }); 6 | return import('../main/index.js'); 7 | }; 8 | -------------------------------------------------------------------------------- /test/show-changes/index.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, it, expect } from 'vitest'; 2 | 3 | import Log from '../../src/log'; 4 | 5 | describe('Log', () => { 6 | it('should create Log instance when there is at least one file to be changed', () => { 7 | expect(Log.fromNumberOfFiles(1)).toBeInstanceOf(Log); 8 | }); 9 | 10 | it('should throw error when there is an attempt to instantiate Log but there is no file to be changed', () => { 11 | expect(() => { 12 | return Log.fromNumberOfFiles(0); 13 | }).toThrowError(); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /tsconfig.cjs.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.js.json", 3 | "compilerOptions": { 4 | "module": "commonjs", 5 | "verbatimModuleSyntax": false, 6 | "moduleResolution": "node", 7 | "esModuleInterop": true, 8 | "outDir": "build/cjs", 9 | "target": "es5" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /tsconfig.js.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "skipLibCheck": true, 5 | "noEmit": false, 6 | "declaration": true, 7 | "declarationMap": false, 8 | "sourceMap": true 9 | }, 10 | "include": ["src"] 11 | } 12 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["@poolofdeath20/tsconfig/node"], 3 | "include": ["**/*.ts", "**/*.js", "**/*.mjs"], 4 | "exclude": [ 5 | "node_modules", 6 | "test/process/source/**", 7 | "test/process/expected-result/**", 8 | "test/process/actual-result/**" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /tsconfig.mjs.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.js.json", 3 | "compilerOptions": { 4 | "module": "esnext", 5 | "outDir": "build/mjs", 6 | "target": "esnext" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /vitest.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vitest/config'; 2 | 3 | export default defineConfig({ 4 | test: { 5 | watch: false, 6 | }, 7 | }); 8 | --------------------------------------------------------------------------------