├── .eslintrc ├── .github ├── lock.yml ├── stale.yml └── workflows │ └── main.yml ├── .gitignore ├── .npmignore ├── .prettierrc ├── .release-it.json ├── LICENSE.md ├── README.md ├── package.json ├── pnpm-lock.yaml ├── src ├── bin │ └── cli.ts ├── config.ts ├── helpers.ts ├── index.ts └── workbook.ts ├── test ├── fixtures │ ├── dateField.json │ ├── dateField.xlsx │ ├── sheetOptions.json │ ├── sheetOptions.xlsx │ ├── test.json │ ├── test.xlsx │ ├── withEmptyColumns.json │ └── withEmptyColumns.xlsx ├── setup.ts ├── specs │ ├── build.spec.ts │ ├── import.spec.ts │ └── parse.spec.ts └── utils │ ├── debug.ts │ └── index.ts ├── tsconfig.json └── vitest.config.ts /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": ["@mgcrea/node"] 4 | } 5 | -------------------------------------------------------------------------------- /.github/lock.yml: -------------------------------------------------------------------------------- 1 | # Configuration for Lock Threads - https://github.com/dessant/lock-threads 2 | 3 | # Number of days of inactivity before a closed issue or pull request is locked 4 | daysUntilLock: 90 5 | 6 | # Skip issues and pull requests created before a given timestamp. Timestamp must 7 | # follow ISO 8601 (`YYYY-MM-DD`). Set to `false` to disable 8 | skipCreatedBefore: false 9 | 10 | # Issues and pull requests with these labels will be ignored. Set to `[]` to disable 11 | exemptLabels: [] 12 | 13 | # Label to add before locking, such as `outdated`. Set to `false` to disable 14 | lockLabel: 'outdated' 15 | 16 | # Comment to post before locking. Set to `false` to disable 17 | lockComment: > 18 | This thread has been automatically locked since there has not been 19 | any recent activity after it was closed. Please open a new issue for 20 | related bugs. 21 | 22 | # Assign `resolved` as the reason for locking. Set to `false` to disable 23 | setLockReason: true 24 | 25 | # Limit to only `issues` or `pulls` 26 | only: issues 27 | 28 | # Optionally, specify configuration settings just for `issues` or `pulls` 29 | # issues: 30 | # exemptLabels: 31 | # - help-wanted 32 | # lockLabel: outdated 33 | 34 | # pulls: 35 | # daysUntilLock: 30 36 | 37 | # Repository to extend settings from 38 | # _extends: repo 39 | 40 | -------------------------------------------------------------------------------- /.github/stale.yml: -------------------------------------------------------------------------------- 1 | # Number of days of inactivity before an issue becomes stale 2 | daysUntilStale: 60 3 | # Number of days of inactivity before a stale issue is closed 4 | daysUntilClose: 7 5 | # Issues with these labels will never be considered stale 6 | exemptLabels: 7 | - pinned 8 | - security 9 | # Label to use when marking an issue as stale 10 | staleLabel: stale 11 | # Comment to post when marking an issue as stale. Set to `false` to disable 12 | markComment: > 13 | This issue has been automatically marked as stale because it has not had 14 | recent activity. It will be closed if no further activity occurs. Thank you 15 | for your contributions. 16 | # Comment to post when closing a stale issue. Set to `false` to disable 17 | closeComment: false 18 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: main 2 | 3 | on: 4 | push: 5 | branches: [master] 6 | pull_request: 7 | branches: [master] 8 | workflow_dispatch: 9 | 10 | jobs: 11 | test: 12 | runs-on: ubuntu-latest 13 | strategy: 14 | matrix: 15 | node: ["lts/-2", "lts/-1", "lts/*"] 16 | name: Test on node@v${{ matrix.node }} 17 | steps: 18 | - name: Checkout 🛎️ 19 | uses: actions/checkout@v4 20 | - name: Setup pnpm 🔧 21 | uses: pnpm/action-setup@v3 22 | with: 23 | version: 8 24 | - name: Setup node 🔧 25 | uses: actions/setup-node@v4 26 | with: 27 | node-version: ${{ matrix.node }} 28 | check-latest: true 29 | cache: "pnpm" 30 | - name: Install 🪄 31 | run: pnpm install --frozen-lockfile 32 | - name: Lint 🔍 33 | run: pnpm run lint 34 | - name: Prettier 🔍 35 | run: pnpm run prettycheck 36 | - name: TypeScript 🔍 37 | run: pnpm run typecheck 38 | - name: Vitest 🔍 39 | run: pnpm run spec 40 | build: 41 | runs-on: ubuntu-latest 42 | strategy: 43 | matrix: 44 | node: ["lts/-2", "lts/-1", "lts/*"] 45 | name: Build on node@v${{ matrix.node }} 46 | steps: 47 | - name: Checkout 🛎️ 48 | uses: actions/checkout@v4 49 | - name: Setup pnpm 🔧 50 | uses: pnpm/action-setup@v3 51 | with: 52 | version: 8 53 | - name: Setup node 🔧 54 | uses: actions/setup-node@v4 55 | with: 56 | node-version: ${{ matrix.node }} 57 | check-latest: true 58 | cache: "pnpm" 59 | - name: Install 🪄 60 | run: pnpm install --frozen-lockfile 61 | - name: Build 💎 62 | run: pnpm run build 63 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .idea/ 3 | dist/ 4 | node_modules/ 5 | .vscode/ 6 | *.tsbuildinfo 7 | ~$* 8 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | * 2 | .* 3 | !package.json 4 | !LICENSE* 5 | !README* 6 | !CHANGELOG* 7 | !lib/**/*.js 8 | !lib/**/*.js.map 9 | !lib/**/*.d.ts 10 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 110, 3 | "plugins": ["prettier-plugin-organize-imports"] 4 | } 5 | -------------------------------------------------------------------------------- /.release-it.json: -------------------------------------------------------------------------------- 1 | { 2 | "git": { 3 | "commitMessage": "chore(release): cut the v${version} release" 4 | }, 5 | "github": { 6 | "release": true 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright (c) 2012-2021 Olivier Louvignes 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the 4 | License. You may obtain a copy of the License at 5 | 6 | http://www.apache.org/licenses/LICENSE-2.0 7 | 8 | Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an 9 | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific 10 | language governing permissions and limitations under the License. 11 | 12 | Except where noted, this license applies to any and all software programs and associated documentation files created by 13 | the Original Author and distributed with the Software: 14 | 15 | Inspired by SheetJS gist examples, Copyright (c) SheetJS. 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # node-xlsx 4 | 5 |

6 | 7 | npm version 8 | 9 | 10 | npm total downloads 11 | 12 | 13 | npm monthly downloads 14 | 15 | 16 | npm license 17 | 18 | 19 | build status 20 | 21 |

22 | 23 | ## Features 24 | 25 | Straightforward excel file parser and builder. 26 | 27 | - Relies on [SheetJS xlsx](https://github.com/SheetJS/sheetjs) module to parse/build excel sheets. 28 | - Built with [TypeScript](https://www.typescriptlang.org/) for static type checking with exported types along the 29 | library. 30 | 31 | ## Install 32 | 33 | ```bash 34 | npm install node-xlsx --save 35 | # or 36 | pnpm add node-xlsx 37 | ``` 38 | 39 | ## Quickstart 40 | 41 | ### Parse an xlsx file 42 | 43 | ```js 44 | import xlsx from 'node-xlsx'; 45 | // Or var xlsx = require('node-xlsx').default; 46 | 47 | // Parse a buffer 48 | const workSheetsFromBuffer = xlsx.parse(fs.readFileSync(`${__dirname}/myFile.xlsx`)); 49 | // Parse a file 50 | const workSheetsFromFile = xlsx.parse(`${__dirname}/myFile.xlsx`); 51 | ``` 52 | 53 | ### Build an xlsx file 54 | 55 | ```js 56 | import xlsx from 'node-xlsx'; 57 | // Or var xlsx = require('node-xlsx').default; 58 | 59 | const data = [ 60 | [1, 2, 3], 61 | [true, false, null, 'sheetjs'], 62 | ['foo', 'bar', new Date('2014-02-19T14:30Z'), '0.3'], 63 | ['baz', null, 'qux'], 64 | ]; 65 | var buffer = xlsx.build([{name: 'mySheetName', data: data}]); // Returns a buffer 66 | ``` 67 | 68 | ### Custom column width 69 | 70 | ```js 71 | import xlsx from 'node-xlsx'; 72 | // Or var xlsx = require('node-xlsx').default; 73 | 74 | const data = [ 75 | [1, 2, 3], 76 | [true, false, null, 'sheetjs'], 77 | ['foo', 'bar', new Date('2014-02-19T14:30Z'), '0.3'], 78 | ['baz', null, 'qux'], 79 | ]; 80 | const sheetOptions = {'!cols': [{wch: 6}, {wch: 7}, {wch: 10}, {wch: 20}]}; 81 | 82 | var buffer = xlsx.build([{name: 'mySheetName', data: data}], {sheetOptions}); // Returns a buffer 83 | ``` 84 | 85 | ### Spanning multiple rows `A1:A4` in every sheets 86 | 87 | ```js 88 | import xlsx from 'node-xlsx'; 89 | // Or var xlsx = require('node-xlsx').default; 90 | 91 | const data = [ 92 | [1, 2, 3], 93 | [true, false, null, 'sheetjs'], 94 | ['foo', 'bar', new Date('2014-02-19T14:30Z'), '0.3'], 95 | ['baz', null, 'qux'], 96 | ]; 97 | const range = {s: {c: 0, r: 0}, e: {c: 0, r: 3}}; // A1:A4 98 | const sheetOptions = {'!merges': [range]}; 99 | 100 | var buffer = xlsx.build([{name: 'mySheetName', data: data}], {sheetOptions}); // Returns a buffer 101 | ``` 102 | 103 | ### Spanning multiple rows `A1:A4` in second sheet 104 | 105 | ```js 106 | import xlsx from 'node-xlsx'; 107 | // Or var xlsx = require('node-xlsx').default; 108 | 109 | const dataSheet1 = [ 110 | [1, 2, 3], 111 | [true, false, null, 'sheetjs'], 112 | ['foo', 'bar', new Date('2014-02-19T14:30Z'), '0.3'], 113 | ['baz', null, 'qux'], 114 | ]; 115 | const dataSheet2 = [ 116 | [4, 5, 6], 117 | [7, 8, 9, 10], 118 | [11, 12, 13, 14], 119 | ['baz', null, 'qux'], 120 | ]; 121 | const range = {s: {c: 0, r: 0}, e: {c: 0, r: 3}}; // A1:A4 122 | const sheetOptions = {'!merges': [range]}; 123 | 124 | var buffer = xlsx.build([ 125 | {name: 'myFirstSheet', data: dataSheet1}, 126 | {name: 'mySecondSheet', data: dataSheet2, options: sheetOptions}, 127 | ]); // Returns a buffer 128 | ``` 129 | 130 | _Beware that if you try to merge several times the same cell, your xlsx file will be seen as corrupted._ 131 | 132 | - Using Primitive Object Notation Data values can also be specified in a non-abstracted representation. 133 | 134 | Examples: 135 | 136 | ```js 137 | const rowAverage = [[{t: 'n', z: 10, f: '=AVERAGE(2:2)'}], [1, 2, 3]]; 138 | var buffer = xlsx.build([{name: 'Average Formula', data: rowAverage}]); 139 | ``` 140 | 141 | Refer to [xlsx](https://sheetjs.gitbooks.io) documentation for valid structure and values: 142 | 143 | - [cell object]: (https://sheetjs.gitbooks.io/docs/#cell-object) 144 | - [data types]: (https://sheetjs.gitbooks.io/docs/#data-types) 145 | - [Format](https://sheetjs.gitbooks.io/docs/#number-formats) 146 | 147 | ### Troubleshooting 148 | 149 | This library requires at least node.js v10. For legacy versions, you can use this workaround before using the lib. 150 | 151 | ```sh 152 | npm i --save object-assign 153 | ``` 154 | 155 | ```js 156 | Object.prototype.assign = require('object-assign'); 157 | ``` 158 | 159 | ### Contributing 160 | 161 | Please submit all pull requests the against master branch. If your unit test contains javascript patches or features, 162 | you should include relevant unit tests. Thanks! 163 | 164 | ### Available scripts 165 | 166 | | **Script** | **Description** | 167 | | ------------- | ------------------------------ | 168 | | start | Alias of test:watch | 169 | | test | Run mocha unit tests | 170 | | test:watch | Run and watch mocha unit tests | 171 | | lint | Run eslint static tests | 172 | | compile | Compile the library | 173 | | compile:watch | Compile and watch the library | 174 | 175 | ## Authors 176 | 177 | **Olivier Louvignes** 178 | 179 | - http://olouv.com 180 | - http://github.com/mgcrea 181 | 182 | ## Copyright and license 183 | 184 | [Apache License 2.0](https://spdx.org/licenses/Apache-2.0.html) 185 | 186 | ``` 187 | Copyright (C) 2012-2014 Olivier Louvignes 188 | 189 | Licensed under the Apache License, Version 2.0 (the "License"); 190 | you may not use this file except in compliance with the License. 191 | You may obtain a copy of the License at 192 | 193 | http://www.apache.org/licenses/LICENSE-2.0 194 | 195 | Unless required by applicable law or agreed to in writing, software 196 | distributed under the License is distributed on an "AS IS" BASIS, 197 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 198 | See the License for the specific language governing permissions and 199 | limitations under the License. 200 | 201 | Except where noted, this license applies to any and all software programs and associated documentation files created by the Original Author and distributed with the Software: 202 | 203 | Inspired by SheetJS gist examples, Copyright (c) SheetJS. 204 | ``` 205 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "node-xlsx", 3 | "author": "Olivier Louvignes ", 4 | "version": "0.24.0", 5 | "description": "NodeJS Excel files parser & builder", 6 | "type": "module", 7 | "main": "./dist/index.cjs", 8 | "exports": { 9 | ".": { 10 | "require": "./dist/index.cjs", 11 | "import": "./dist/index.js", 12 | "types": "./dist/index.d.ts" 13 | } 14 | }, 15 | "bin": { 16 | "node-xlsx": "./dist/bin/cli.js" 17 | }, 18 | "files": [ 19 | "dist" 20 | ], 21 | "scripts": { 22 | "start": "npm run spec -- --watch", 23 | "build": "tsup --entry src/index.ts --format cjs,esm --sourcemap --dts --clean --entry src/bin/cli.ts", 24 | "lint": "eslint src/ test/", 25 | "prettycheck": "prettier --check src/ test/", 26 | "prettify": "prettier --write src/ test/", 27 | "typecheck": "tsc --noEmit", 28 | "spec": "DEBUG=node-xlsx* vitest --run", 29 | "watch": "DEBUG=node-xlsx* vitest --watch", 30 | "test": "npm run lint && npm run prettycheck && npm run typecheck && npm run spec", 31 | "prepublishOnly": "npm run build" 32 | }, 33 | "repository": "github:mgcrea/node-xlsx", 34 | "license": "Apache-2.0", 35 | "dependencies": { 36 | "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz" 37 | }, 38 | "devDependencies": { 39 | "@mgcrea/eslint-config-node": "^0.10.0", 40 | "@tsconfig/node-lts": "^20.1.1", 41 | "@types/node": "^20.12.7", 42 | "eslint": "^8.57.0", 43 | "prettier": "^3.2.5", 44 | "prettier-plugin-organize-imports": "^3.2.4", 45 | "tsup": "^8.0.2", 46 | "typescript": "^5.4.5", 47 | "vite-tsconfig-paths": "^4.3.2", 48 | "vitest": "^1.5.0" 49 | }, 50 | "engines": { 51 | "node": ">=10.0.0" 52 | }, 53 | "keywords": [ 54 | "excel", 55 | "parser", 56 | "builder", 57 | "xlsx", 58 | "xls" 59 | ] 60 | } 61 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | xlsx: 9 | specifier: https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz 10 | version: '@cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz' 11 | 12 | devDependencies: 13 | '@mgcrea/eslint-config-node': 14 | specifier: ^0.10.0 15 | version: 0.10.1(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5)(vitest@1.5.0) 16 | '@tsconfig/node-lts': 17 | specifier: ^20.1.1 18 | version: 20.1.3 19 | '@types/node': 20 | specifier: ^20.12.7 21 | version: 20.12.7 22 | eslint: 23 | specifier: ^8.57.0 24 | version: 8.57.0 25 | prettier: 26 | specifier: ^3.2.5 27 | version: 3.2.5 28 | prettier-plugin-organize-imports: 29 | specifier: ^3.2.4 30 | version: 3.2.4(prettier@3.2.5)(typescript@5.4.5) 31 | tsup: 32 | specifier: ^8.0.2 33 | version: 8.0.2(typescript@5.4.5) 34 | typescript: 35 | specifier: ^5.4.5 36 | version: 5.4.5 37 | vite-tsconfig-paths: 38 | specifier: ^4.3.2 39 | version: 4.3.2(typescript@5.4.5) 40 | vitest: 41 | specifier: ^1.5.0 42 | version: 1.5.0(@types/node@20.12.7) 43 | 44 | packages: 45 | 46 | /@aashutoshrathi/word-wrap@1.2.6: 47 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} 48 | engines: {node: '>=0.10.0'} 49 | dev: true 50 | 51 | /@esbuild/aix-ppc64@0.19.12: 52 | resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} 53 | engines: {node: '>=12'} 54 | cpu: [ppc64] 55 | os: [aix] 56 | requiresBuild: true 57 | dev: true 58 | optional: true 59 | 60 | /@esbuild/aix-ppc64@0.20.2: 61 | resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} 62 | engines: {node: '>=12'} 63 | cpu: [ppc64] 64 | os: [aix] 65 | requiresBuild: true 66 | dev: true 67 | optional: true 68 | 69 | /@esbuild/android-arm64@0.19.12: 70 | resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} 71 | engines: {node: '>=12'} 72 | cpu: [arm64] 73 | os: [android] 74 | requiresBuild: true 75 | dev: true 76 | optional: true 77 | 78 | /@esbuild/android-arm64@0.20.2: 79 | resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} 80 | engines: {node: '>=12'} 81 | cpu: [arm64] 82 | os: [android] 83 | requiresBuild: true 84 | dev: true 85 | optional: true 86 | 87 | /@esbuild/android-arm@0.19.12: 88 | resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} 89 | engines: {node: '>=12'} 90 | cpu: [arm] 91 | os: [android] 92 | requiresBuild: true 93 | dev: true 94 | optional: true 95 | 96 | /@esbuild/android-arm@0.20.2: 97 | resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} 98 | engines: {node: '>=12'} 99 | cpu: [arm] 100 | os: [android] 101 | requiresBuild: true 102 | dev: true 103 | optional: true 104 | 105 | /@esbuild/android-x64@0.19.12: 106 | resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} 107 | engines: {node: '>=12'} 108 | cpu: [x64] 109 | os: [android] 110 | requiresBuild: true 111 | dev: true 112 | optional: true 113 | 114 | /@esbuild/android-x64@0.20.2: 115 | resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} 116 | engines: {node: '>=12'} 117 | cpu: [x64] 118 | os: [android] 119 | requiresBuild: true 120 | dev: true 121 | optional: true 122 | 123 | /@esbuild/darwin-arm64@0.19.12: 124 | resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} 125 | engines: {node: '>=12'} 126 | cpu: [arm64] 127 | os: [darwin] 128 | requiresBuild: true 129 | dev: true 130 | optional: true 131 | 132 | /@esbuild/darwin-arm64@0.20.2: 133 | resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} 134 | engines: {node: '>=12'} 135 | cpu: [arm64] 136 | os: [darwin] 137 | requiresBuild: true 138 | dev: true 139 | optional: true 140 | 141 | /@esbuild/darwin-x64@0.19.12: 142 | resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} 143 | engines: {node: '>=12'} 144 | cpu: [x64] 145 | os: [darwin] 146 | requiresBuild: true 147 | dev: true 148 | optional: true 149 | 150 | /@esbuild/darwin-x64@0.20.2: 151 | resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} 152 | engines: {node: '>=12'} 153 | cpu: [x64] 154 | os: [darwin] 155 | requiresBuild: true 156 | dev: true 157 | optional: true 158 | 159 | /@esbuild/freebsd-arm64@0.19.12: 160 | resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} 161 | engines: {node: '>=12'} 162 | cpu: [arm64] 163 | os: [freebsd] 164 | requiresBuild: true 165 | dev: true 166 | optional: true 167 | 168 | /@esbuild/freebsd-arm64@0.20.2: 169 | resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} 170 | engines: {node: '>=12'} 171 | cpu: [arm64] 172 | os: [freebsd] 173 | requiresBuild: true 174 | dev: true 175 | optional: true 176 | 177 | /@esbuild/freebsd-x64@0.19.12: 178 | resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} 179 | engines: {node: '>=12'} 180 | cpu: [x64] 181 | os: [freebsd] 182 | requiresBuild: true 183 | dev: true 184 | optional: true 185 | 186 | /@esbuild/freebsd-x64@0.20.2: 187 | resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} 188 | engines: {node: '>=12'} 189 | cpu: [x64] 190 | os: [freebsd] 191 | requiresBuild: true 192 | dev: true 193 | optional: true 194 | 195 | /@esbuild/linux-arm64@0.19.12: 196 | resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} 197 | engines: {node: '>=12'} 198 | cpu: [arm64] 199 | os: [linux] 200 | requiresBuild: true 201 | dev: true 202 | optional: true 203 | 204 | /@esbuild/linux-arm64@0.20.2: 205 | resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} 206 | engines: {node: '>=12'} 207 | cpu: [arm64] 208 | os: [linux] 209 | requiresBuild: true 210 | dev: true 211 | optional: true 212 | 213 | /@esbuild/linux-arm@0.19.12: 214 | resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} 215 | engines: {node: '>=12'} 216 | cpu: [arm] 217 | os: [linux] 218 | requiresBuild: true 219 | dev: true 220 | optional: true 221 | 222 | /@esbuild/linux-arm@0.20.2: 223 | resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} 224 | engines: {node: '>=12'} 225 | cpu: [arm] 226 | os: [linux] 227 | requiresBuild: true 228 | dev: true 229 | optional: true 230 | 231 | /@esbuild/linux-ia32@0.19.12: 232 | resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} 233 | engines: {node: '>=12'} 234 | cpu: [ia32] 235 | os: [linux] 236 | requiresBuild: true 237 | dev: true 238 | optional: true 239 | 240 | /@esbuild/linux-ia32@0.20.2: 241 | resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} 242 | engines: {node: '>=12'} 243 | cpu: [ia32] 244 | os: [linux] 245 | requiresBuild: true 246 | dev: true 247 | optional: true 248 | 249 | /@esbuild/linux-loong64@0.19.12: 250 | resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} 251 | engines: {node: '>=12'} 252 | cpu: [loong64] 253 | os: [linux] 254 | requiresBuild: true 255 | dev: true 256 | optional: true 257 | 258 | /@esbuild/linux-loong64@0.20.2: 259 | resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} 260 | engines: {node: '>=12'} 261 | cpu: [loong64] 262 | os: [linux] 263 | requiresBuild: true 264 | dev: true 265 | optional: true 266 | 267 | /@esbuild/linux-mips64el@0.19.12: 268 | resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} 269 | engines: {node: '>=12'} 270 | cpu: [mips64el] 271 | os: [linux] 272 | requiresBuild: true 273 | dev: true 274 | optional: true 275 | 276 | /@esbuild/linux-mips64el@0.20.2: 277 | resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} 278 | engines: {node: '>=12'} 279 | cpu: [mips64el] 280 | os: [linux] 281 | requiresBuild: true 282 | dev: true 283 | optional: true 284 | 285 | /@esbuild/linux-ppc64@0.19.12: 286 | resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} 287 | engines: {node: '>=12'} 288 | cpu: [ppc64] 289 | os: [linux] 290 | requiresBuild: true 291 | dev: true 292 | optional: true 293 | 294 | /@esbuild/linux-ppc64@0.20.2: 295 | resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} 296 | engines: {node: '>=12'} 297 | cpu: [ppc64] 298 | os: [linux] 299 | requiresBuild: true 300 | dev: true 301 | optional: true 302 | 303 | /@esbuild/linux-riscv64@0.19.12: 304 | resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} 305 | engines: {node: '>=12'} 306 | cpu: [riscv64] 307 | os: [linux] 308 | requiresBuild: true 309 | dev: true 310 | optional: true 311 | 312 | /@esbuild/linux-riscv64@0.20.2: 313 | resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} 314 | engines: {node: '>=12'} 315 | cpu: [riscv64] 316 | os: [linux] 317 | requiresBuild: true 318 | dev: true 319 | optional: true 320 | 321 | /@esbuild/linux-s390x@0.19.12: 322 | resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} 323 | engines: {node: '>=12'} 324 | cpu: [s390x] 325 | os: [linux] 326 | requiresBuild: true 327 | dev: true 328 | optional: true 329 | 330 | /@esbuild/linux-s390x@0.20.2: 331 | resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} 332 | engines: {node: '>=12'} 333 | cpu: [s390x] 334 | os: [linux] 335 | requiresBuild: true 336 | dev: true 337 | optional: true 338 | 339 | /@esbuild/linux-x64@0.19.12: 340 | resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} 341 | engines: {node: '>=12'} 342 | cpu: [x64] 343 | os: [linux] 344 | requiresBuild: true 345 | dev: true 346 | optional: true 347 | 348 | /@esbuild/linux-x64@0.20.2: 349 | resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} 350 | engines: {node: '>=12'} 351 | cpu: [x64] 352 | os: [linux] 353 | requiresBuild: true 354 | dev: true 355 | optional: true 356 | 357 | /@esbuild/netbsd-x64@0.19.12: 358 | resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} 359 | engines: {node: '>=12'} 360 | cpu: [x64] 361 | os: [netbsd] 362 | requiresBuild: true 363 | dev: true 364 | optional: true 365 | 366 | /@esbuild/netbsd-x64@0.20.2: 367 | resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} 368 | engines: {node: '>=12'} 369 | cpu: [x64] 370 | os: [netbsd] 371 | requiresBuild: true 372 | dev: true 373 | optional: true 374 | 375 | /@esbuild/openbsd-x64@0.19.12: 376 | resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} 377 | engines: {node: '>=12'} 378 | cpu: [x64] 379 | os: [openbsd] 380 | requiresBuild: true 381 | dev: true 382 | optional: true 383 | 384 | /@esbuild/openbsd-x64@0.20.2: 385 | resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} 386 | engines: {node: '>=12'} 387 | cpu: [x64] 388 | os: [openbsd] 389 | requiresBuild: true 390 | dev: true 391 | optional: true 392 | 393 | /@esbuild/sunos-x64@0.19.12: 394 | resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} 395 | engines: {node: '>=12'} 396 | cpu: [x64] 397 | os: [sunos] 398 | requiresBuild: true 399 | dev: true 400 | optional: true 401 | 402 | /@esbuild/sunos-x64@0.20.2: 403 | resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} 404 | engines: {node: '>=12'} 405 | cpu: [x64] 406 | os: [sunos] 407 | requiresBuild: true 408 | dev: true 409 | optional: true 410 | 411 | /@esbuild/win32-arm64@0.19.12: 412 | resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} 413 | engines: {node: '>=12'} 414 | cpu: [arm64] 415 | os: [win32] 416 | requiresBuild: true 417 | dev: true 418 | optional: true 419 | 420 | /@esbuild/win32-arm64@0.20.2: 421 | resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} 422 | engines: {node: '>=12'} 423 | cpu: [arm64] 424 | os: [win32] 425 | requiresBuild: true 426 | dev: true 427 | optional: true 428 | 429 | /@esbuild/win32-ia32@0.19.12: 430 | resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} 431 | engines: {node: '>=12'} 432 | cpu: [ia32] 433 | os: [win32] 434 | requiresBuild: true 435 | dev: true 436 | optional: true 437 | 438 | /@esbuild/win32-ia32@0.20.2: 439 | resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} 440 | engines: {node: '>=12'} 441 | cpu: [ia32] 442 | os: [win32] 443 | requiresBuild: true 444 | dev: true 445 | optional: true 446 | 447 | /@esbuild/win32-x64@0.19.12: 448 | resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} 449 | engines: {node: '>=12'} 450 | cpu: [x64] 451 | os: [win32] 452 | requiresBuild: true 453 | dev: true 454 | optional: true 455 | 456 | /@esbuild/win32-x64@0.20.2: 457 | resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} 458 | engines: {node: '>=12'} 459 | cpu: [x64] 460 | os: [win32] 461 | requiresBuild: true 462 | dev: true 463 | optional: true 464 | 465 | /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): 466 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 467 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 468 | peerDependencies: 469 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 470 | dependencies: 471 | eslint: 8.57.0 472 | eslint-visitor-keys: 3.4.3 473 | dev: true 474 | 475 | /@eslint-community/regexpp@4.10.0: 476 | resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} 477 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 478 | dev: true 479 | 480 | /@eslint/eslintrc@2.1.4: 481 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} 482 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 483 | dependencies: 484 | ajv: 6.12.6 485 | debug: 4.3.4 486 | espree: 9.6.1 487 | globals: 13.20.0 488 | ignore: 5.2.4 489 | import-fresh: 3.3.0 490 | js-yaml: 4.1.0 491 | minimatch: 3.1.2 492 | strip-json-comments: 3.1.1 493 | transitivePeerDependencies: 494 | - supports-color 495 | dev: true 496 | 497 | /@eslint/js@8.57.0: 498 | resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} 499 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 500 | dev: true 501 | 502 | /@humanwhocodes/config-array@0.11.14: 503 | resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} 504 | engines: {node: '>=10.10.0'} 505 | dependencies: 506 | '@humanwhocodes/object-schema': 2.0.3 507 | debug: 4.3.4 508 | minimatch: 3.1.2 509 | transitivePeerDependencies: 510 | - supports-color 511 | dev: true 512 | 513 | /@humanwhocodes/module-importer@1.0.1: 514 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 515 | engines: {node: '>=12.22'} 516 | dev: true 517 | 518 | /@humanwhocodes/object-schema@2.0.3: 519 | resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} 520 | dev: true 521 | 522 | /@isaacs/cliui@8.0.2: 523 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 524 | engines: {node: '>=12'} 525 | dependencies: 526 | string-width: 5.1.2 527 | string-width-cjs: /string-width@4.2.3 528 | strip-ansi: 7.0.1 529 | strip-ansi-cjs: /strip-ansi@6.0.1 530 | wrap-ansi: 8.1.0 531 | wrap-ansi-cjs: /wrap-ansi@7.0.0 532 | dev: true 533 | 534 | /@jest/schemas@29.6.3: 535 | resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} 536 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 537 | dependencies: 538 | '@sinclair/typebox': 0.27.8 539 | dev: true 540 | 541 | /@jridgewell/gen-mapping@0.3.5: 542 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 543 | engines: {node: '>=6.0.0'} 544 | dependencies: 545 | '@jridgewell/set-array': 1.2.1 546 | '@jridgewell/sourcemap-codec': 1.4.15 547 | '@jridgewell/trace-mapping': 0.3.25 548 | dev: true 549 | 550 | /@jridgewell/resolve-uri@3.1.1: 551 | resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} 552 | engines: {node: '>=6.0.0'} 553 | dev: true 554 | 555 | /@jridgewell/set-array@1.2.1: 556 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 557 | engines: {node: '>=6.0.0'} 558 | dev: true 559 | 560 | /@jridgewell/sourcemap-codec@1.4.15: 561 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 562 | dev: true 563 | 564 | /@jridgewell/trace-mapping@0.3.25: 565 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 566 | dependencies: 567 | '@jridgewell/resolve-uri': 3.1.1 568 | '@jridgewell/sourcemap-codec': 1.4.15 569 | dev: true 570 | 571 | /@mgcrea/eslint-config-node@0.10.1(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5)(vitest@1.5.0): 572 | resolution: {integrity: sha512-P+axbHlF5GYXb7wJkuCpKT6/ZOihxGSXFzhzqjZAeU16Z2ArT4xxVdOw9LEb6qafBWcN+GNYoU3mVmIJ9LEJSA==} 573 | dependencies: 574 | '@typescript-eslint/eslint-plugin': 7.6.0(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(typescript@5.4.5) 575 | '@typescript-eslint/parser': 7.6.0(eslint@8.57.0)(typescript@5.4.5) 576 | eslint-config-prettier: 9.1.0(eslint@8.57.0) 577 | eslint-plugin-prettier: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5) 578 | eslint-plugin-testing-library: 6.2.1(eslint@8.57.0)(typescript@5.4.5) 579 | eslint-plugin-vitest: 0.4.1(@typescript-eslint/eslint-plugin@7.6.0)(eslint@8.57.0)(typescript@5.4.5)(vitest@1.5.0) 580 | transitivePeerDependencies: 581 | - '@types/eslint' 582 | - eslint 583 | - prettier 584 | - supports-color 585 | - typescript 586 | - vitest 587 | dev: true 588 | 589 | /@nodelib/fs.scandir@2.1.5: 590 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 591 | engines: {node: '>= 8'} 592 | dependencies: 593 | '@nodelib/fs.stat': 2.0.5 594 | run-parallel: 1.2.0 595 | dev: true 596 | 597 | /@nodelib/fs.stat@2.0.5: 598 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 599 | engines: {node: '>= 8'} 600 | dev: true 601 | 602 | /@nodelib/fs.walk@1.2.8: 603 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 604 | engines: {node: '>= 8'} 605 | dependencies: 606 | '@nodelib/fs.scandir': 2.1.5 607 | fastq: 1.15.0 608 | dev: true 609 | 610 | /@pkgjs/parseargs@0.11.0: 611 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 612 | engines: {node: '>=14'} 613 | requiresBuild: true 614 | dev: true 615 | optional: true 616 | 617 | /@pkgr/core@0.1.1: 618 | resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} 619 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 620 | dev: true 621 | 622 | /@rollup/rollup-android-arm-eabi@4.14.3: 623 | resolution: {integrity: sha512-X9alQ3XM6I9IlSlmC8ddAvMSyG1WuHk5oUnXGw+yUBs3BFoTizmG1La/Gr8fVJvDWAq+zlYTZ9DBgrlKRVY06g==} 624 | cpu: [arm] 625 | os: [android] 626 | requiresBuild: true 627 | dev: true 628 | optional: true 629 | 630 | /@rollup/rollup-android-arm64@4.14.3: 631 | resolution: {integrity: sha512-eQK5JIi+POhFpzk+LnjKIy4Ks+pwJ+NXmPxOCSvOKSNRPONzKuUvWE+P9JxGZVxrtzm6BAYMaL50FFuPe0oWMQ==} 632 | cpu: [arm64] 633 | os: [android] 634 | requiresBuild: true 635 | dev: true 636 | optional: true 637 | 638 | /@rollup/rollup-darwin-arm64@4.14.3: 639 | resolution: {integrity: sha512-Od4vE6f6CTT53yM1jgcLqNfItTsLt5zE46fdPaEmeFHvPs5SjZYlLpHrSiHEKR1+HdRfxuzXHjDOIxQyC3ptBA==} 640 | cpu: [arm64] 641 | os: [darwin] 642 | requiresBuild: true 643 | dev: true 644 | optional: true 645 | 646 | /@rollup/rollup-darwin-x64@4.14.3: 647 | resolution: {integrity: sha512-0IMAO21axJeNIrvS9lSe/PGthc8ZUS+zC53O0VhF5gMxfmcKAP4ESkKOCwEi6u2asUrt4mQv2rjY8QseIEb1aw==} 648 | cpu: [x64] 649 | os: [darwin] 650 | requiresBuild: true 651 | dev: true 652 | optional: true 653 | 654 | /@rollup/rollup-linux-arm-gnueabihf@4.14.3: 655 | resolution: {integrity: sha512-ge2DC7tHRHa3caVEoSbPRJpq7azhG+xYsd6u2MEnJ6XzPSzQsTKyXvh6iWjXRf7Rt9ykIUWHtl0Uz3T6yXPpKw==} 656 | cpu: [arm] 657 | os: [linux] 658 | requiresBuild: true 659 | dev: true 660 | optional: true 661 | 662 | /@rollup/rollup-linux-arm-musleabihf@4.14.3: 663 | resolution: {integrity: sha512-ljcuiDI4V3ySuc7eSk4lQ9wU8J8r8KrOUvB2U+TtK0TiW6OFDmJ+DdIjjwZHIw9CNxzbmXY39wwpzYuFDwNXuw==} 664 | cpu: [arm] 665 | os: [linux] 666 | requiresBuild: true 667 | dev: true 668 | optional: true 669 | 670 | /@rollup/rollup-linux-arm64-gnu@4.14.3: 671 | resolution: {integrity: sha512-Eci2us9VTHm1eSyn5/eEpaC7eP/mp5n46gTRB3Aar3BgSvDQGJZuicyq6TsH4HngNBgVqC5sDYxOzTExSU+NjA==} 672 | cpu: [arm64] 673 | os: [linux] 674 | requiresBuild: true 675 | dev: true 676 | optional: true 677 | 678 | /@rollup/rollup-linux-arm64-musl@4.14.3: 679 | resolution: {integrity: sha512-UrBoMLCq4E92/LCqlh+blpqMz5h1tJttPIniwUgOFJyjWI1qrtrDhhpHPuFxULlUmjFHfloWdixtDhSxJt5iKw==} 680 | cpu: [arm64] 681 | os: [linux] 682 | requiresBuild: true 683 | dev: true 684 | optional: true 685 | 686 | /@rollup/rollup-linux-powerpc64le-gnu@4.14.3: 687 | resolution: {integrity: sha512-5aRjvsS8q1nWN8AoRfrq5+9IflC3P1leMoy4r2WjXyFqf3qcqsxRCfxtZIV58tCxd+Yv7WELPcO9mY9aeQyAmw==} 688 | cpu: [ppc64] 689 | os: [linux] 690 | requiresBuild: true 691 | dev: true 692 | optional: true 693 | 694 | /@rollup/rollup-linux-riscv64-gnu@4.14.3: 695 | resolution: {integrity: sha512-sk/Qh1j2/RJSX7FhEpJn8n0ndxy/uf0kI/9Zc4b1ELhqULVdTfN6HL31CDaTChiBAOgLcsJ1sgVZjWv8XNEsAQ==} 696 | cpu: [riscv64] 697 | os: [linux] 698 | requiresBuild: true 699 | dev: true 700 | optional: true 701 | 702 | /@rollup/rollup-linux-s390x-gnu@4.14.3: 703 | resolution: {integrity: sha512-jOO/PEaDitOmY9TgkxF/TQIjXySQe5KVYB57H/8LRP/ux0ZoO8cSHCX17asMSv3ruwslXW/TLBcxyaUzGRHcqg==} 704 | cpu: [s390x] 705 | os: [linux] 706 | requiresBuild: true 707 | dev: true 708 | optional: true 709 | 710 | /@rollup/rollup-linux-x64-gnu@4.14.3: 711 | resolution: {integrity: sha512-8ybV4Xjy59xLMyWo3GCfEGqtKV5M5gCSrZlxkPGvEPCGDLNla7v48S662HSGwRd6/2cSneMQWiv+QzcttLrrOA==} 712 | cpu: [x64] 713 | os: [linux] 714 | requiresBuild: true 715 | dev: true 716 | optional: true 717 | 718 | /@rollup/rollup-linux-x64-musl@4.14.3: 719 | resolution: {integrity: sha512-s+xf1I46trOY10OqAtZ5Rm6lzHre/UiLA1J2uOhCFXWkbZrJRkYBPO6FhvGfHmdtQ3Bx793MNa7LvoWFAm93bg==} 720 | cpu: [x64] 721 | os: [linux] 722 | requiresBuild: true 723 | dev: true 724 | optional: true 725 | 726 | /@rollup/rollup-win32-arm64-msvc@4.14.3: 727 | resolution: {integrity: sha512-+4h2WrGOYsOumDQ5S2sYNyhVfrue+9tc9XcLWLh+Kw3UOxAvrfOrSMFon60KspcDdytkNDh7K2Vs6eMaYImAZg==} 728 | cpu: [arm64] 729 | os: [win32] 730 | requiresBuild: true 731 | dev: true 732 | optional: true 733 | 734 | /@rollup/rollup-win32-ia32-msvc@4.14.3: 735 | resolution: {integrity: sha512-T1l7y/bCeL/kUwh9OD4PQT4aM7Bq43vX05htPJJ46RTI4r5KNt6qJRzAfNfM+OYMNEVBWQzR2Gyk+FXLZfogGw==} 736 | cpu: [ia32] 737 | os: [win32] 738 | requiresBuild: true 739 | dev: true 740 | optional: true 741 | 742 | /@rollup/rollup-win32-x64-msvc@4.14.3: 743 | resolution: {integrity: sha512-/BypzV0H1y1HzgYpxqRaXGBRqfodgoBBCcsrujT6QRcakDQdfU+Lq9PENPh5jB4I44YWq+0C2eHsHya+nZY1sA==} 744 | cpu: [x64] 745 | os: [win32] 746 | requiresBuild: true 747 | dev: true 748 | optional: true 749 | 750 | /@sinclair/typebox@0.27.8: 751 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} 752 | dev: true 753 | 754 | /@tsconfig/node-lts@20.1.3: 755 | resolution: {integrity: sha512-m3b7EP2U+h5tNSpaBMfcTuHmHn04wrgRPQQrfKt75YIPq6kPs2153/KfPHdqkEWGx5pEBvS6rnvToT+yTtC1iw==} 756 | dev: true 757 | 758 | /@types/estree@1.0.5: 759 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} 760 | dev: true 761 | 762 | /@types/json-schema@7.0.15: 763 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 764 | dev: true 765 | 766 | /@types/node@20.12.7: 767 | resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} 768 | dependencies: 769 | undici-types: 5.26.5 770 | dev: true 771 | 772 | /@types/semver@7.5.8: 773 | resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} 774 | dev: true 775 | 776 | /@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(typescript@5.4.5): 777 | resolution: {integrity: sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==} 778 | engines: {node: ^18.18.0 || >=20.0.0} 779 | peerDependencies: 780 | '@typescript-eslint/parser': ^7.0.0 781 | eslint: ^8.56.0 782 | typescript: '*' 783 | peerDependenciesMeta: 784 | typescript: 785 | optional: true 786 | dependencies: 787 | '@eslint-community/regexpp': 4.10.0 788 | '@typescript-eslint/parser': 7.6.0(eslint@8.57.0)(typescript@5.4.5) 789 | '@typescript-eslint/scope-manager': 7.6.0 790 | '@typescript-eslint/type-utils': 7.6.0(eslint@8.57.0)(typescript@5.4.5) 791 | '@typescript-eslint/utils': 7.6.0(eslint@8.57.0)(typescript@5.4.5) 792 | '@typescript-eslint/visitor-keys': 7.6.0 793 | debug: 4.3.4 794 | eslint: 8.57.0 795 | graphemer: 1.4.0 796 | ignore: 5.3.1 797 | natural-compare: 1.4.0 798 | semver: 7.6.0 799 | ts-api-utils: 1.3.0(typescript@5.4.5) 800 | typescript: 5.4.5 801 | transitivePeerDependencies: 802 | - supports-color 803 | dev: true 804 | 805 | /@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5): 806 | resolution: {integrity: sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==} 807 | engines: {node: ^18.18.0 || >=20.0.0} 808 | peerDependencies: 809 | eslint: ^8.56.0 810 | typescript: '*' 811 | peerDependenciesMeta: 812 | typescript: 813 | optional: true 814 | dependencies: 815 | '@typescript-eslint/scope-manager': 7.6.0 816 | '@typescript-eslint/types': 7.6.0 817 | '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.5) 818 | '@typescript-eslint/visitor-keys': 7.6.0 819 | debug: 4.3.4 820 | eslint: 8.57.0 821 | typescript: 5.4.5 822 | transitivePeerDependencies: 823 | - supports-color 824 | dev: true 825 | 826 | /@typescript-eslint/scope-manager@5.62.0: 827 | resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} 828 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 829 | dependencies: 830 | '@typescript-eslint/types': 5.62.0 831 | '@typescript-eslint/visitor-keys': 5.62.0 832 | dev: true 833 | 834 | /@typescript-eslint/scope-manager@7.6.0: 835 | resolution: {integrity: sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==} 836 | engines: {node: ^18.18.0 || >=20.0.0} 837 | dependencies: 838 | '@typescript-eslint/types': 7.6.0 839 | '@typescript-eslint/visitor-keys': 7.6.0 840 | dev: true 841 | 842 | /@typescript-eslint/type-utils@7.6.0(eslint@8.57.0)(typescript@5.4.5): 843 | resolution: {integrity: sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==} 844 | engines: {node: ^18.18.0 || >=20.0.0} 845 | peerDependencies: 846 | eslint: ^8.56.0 847 | typescript: '*' 848 | peerDependenciesMeta: 849 | typescript: 850 | optional: true 851 | dependencies: 852 | '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.5) 853 | '@typescript-eslint/utils': 7.6.0(eslint@8.57.0)(typescript@5.4.5) 854 | debug: 4.3.4 855 | eslint: 8.57.0 856 | ts-api-utils: 1.3.0(typescript@5.4.5) 857 | typescript: 5.4.5 858 | transitivePeerDependencies: 859 | - supports-color 860 | dev: true 861 | 862 | /@typescript-eslint/types@5.62.0: 863 | resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} 864 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 865 | dev: true 866 | 867 | /@typescript-eslint/types@7.6.0: 868 | resolution: {integrity: sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==} 869 | engines: {node: ^18.18.0 || >=20.0.0} 870 | dev: true 871 | 872 | /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): 873 | resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} 874 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 875 | peerDependencies: 876 | typescript: '*' 877 | peerDependenciesMeta: 878 | typescript: 879 | optional: true 880 | dependencies: 881 | '@typescript-eslint/types': 5.62.0 882 | '@typescript-eslint/visitor-keys': 5.62.0 883 | debug: 4.3.4 884 | globby: 11.1.0 885 | is-glob: 4.0.3 886 | semver: 7.6.0 887 | tsutils: 3.21.0(typescript@5.4.5) 888 | typescript: 5.4.5 889 | transitivePeerDependencies: 890 | - supports-color 891 | dev: true 892 | 893 | /@typescript-eslint/typescript-estree@7.6.0(typescript@5.4.5): 894 | resolution: {integrity: sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==} 895 | engines: {node: ^18.18.0 || >=20.0.0} 896 | peerDependencies: 897 | typescript: '*' 898 | peerDependenciesMeta: 899 | typescript: 900 | optional: true 901 | dependencies: 902 | '@typescript-eslint/types': 7.6.0 903 | '@typescript-eslint/visitor-keys': 7.6.0 904 | debug: 4.3.4 905 | globby: 11.1.0 906 | is-glob: 4.0.3 907 | minimatch: 9.0.4 908 | semver: 7.6.0 909 | ts-api-utils: 1.3.0(typescript@5.4.5) 910 | typescript: 5.4.5 911 | transitivePeerDependencies: 912 | - supports-color 913 | dev: true 914 | 915 | /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): 916 | resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} 917 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 918 | peerDependencies: 919 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 920 | dependencies: 921 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) 922 | '@types/json-schema': 7.0.15 923 | '@types/semver': 7.5.8 924 | '@typescript-eslint/scope-manager': 5.62.0 925 | '@typescript-eslint/types': 5.62.0 926 | '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) 927 | eslint: 8.57.0 928 | eslint-scope: 5.1.1 929 | semver: 7.6.0 930 | transitivePeerDependencies: 931 | - supports-color 932 | - typescript 933 | dev: true 934 | 935 | /@typescript-eslint/utils@7.6.0(eslint@8.57.0)(typescript@5.4.5): 936 | resolution: {integrity: sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==} 937 | engines: {node: ^18.18.0 || >=20.0.0} 938 | peerDependencies: 939 | eslint: ^8.56.0 940 | dependencies: 941 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) 942 | '@types/json-schema': 7.0.15 943 | '@types/semver': 7.5.8 944 | '@typescript-eslint/scope-manager': 7.6.0 945 | '@typescript-eslint/types': 7.6.0 946 | '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.5) 947 | eslint: 8.57.0 948 | semver: 7.6.0 949 | transitivePeerDependencies: 950 | - supports-color 951 | - typescript 952 | dev: true 953 | 954 | /@typescript-eslint/visitor-keys@5.62.0: 955 | resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} 956 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 957 | dependencies: 958 | '@typescript-eslint/types': 5.62.0 959 | eslint-visitor-keys: 3.4.3 960 | dev: true 961 | 962 | /@typescript-eslint/visitor-keys@7.6.0: 963 | resolution: {integrity: sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==} 964 | engines: {node: ^18.18.0 || >=20.0.0} 965 | dependencies: 966 | '@typescript-eslint/types': 7.6.0 967 | eslint-visitor-keys: 3.4.3 968 | dev: true 969 | 970 | /@ungap/structured-clone@1.2.0: 971 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} 972 | dev: true 973 | 974 | /@vitest/expect@1.5.0: 975 | resolution: {integrity: sha512-0pzuCI6KYi2SIC3LQezmxujU9RK/vwC1U9R0rLuGlNGcOuDWxqWKu6nUdFsX9tH1WU0SXtAxToOsEjeUn1s3hA==} 976 | dependencies: 977 | '@vitest/spy': 1.5.0 978 | '@vitest/utils': 1.5.0 979 | chai: 4.4.1 980 | dev: true 981 | 982 | /@vitest/runner@1.5.0: 983 | resolution: {integrity: sha512-7HWwdxXP5yDoe7DTpbif9l6ZmDwCzcSIK38kTSIt6CFEpMjX4EpCgT6wUmS0xTXqMI6E/ONmfgRKmaujpabjZQ==} 984 | dependencies: 985 | '@vitest/utils': 1.5.0 986 | p-limit: 5.0.0 987 | pathe: 1.1.2 988 | dev: true 989 | 990 | /@vitest/snapshot@1.5.0: 991 | resolution: {integrity: sha512-qpv3fSEuNrhAO3FpH6YYRdaECnnRjg9VxbhdtPwPRnzSfHVXnNzzrpX4cJxqiwgRMo7uRMWDFBlsBq4Cr+rO3A==} 992 | dependencies: 993 | magic-string: 0.30.9 994 | pathe: 1.1.2 995 | pretty-format: 29.7.0 996 | dev: true 997 | 998 | /@vitest/spy@1.5.0: 999 | resolution: {integrity: sha512-vu6vi6ew5N5MMHJjD5PoakMRKYdmIrNJmyfkhRpQt5d9Ewhw9nZ5Aqynbi3N61bvk9UvZ5UysMT6ayIrZ8GA9w==} 1000 | dependencies: 1001 | tinyspy: 2.2.1 1002 | dev: true 1003 | 1004 | /@vitest/utils@1.5.0: 1005 | resolution: {integrity: sha512-BDU0GNL8MWkRkSRdNFvCUCAVOeHaUlVJ9Tx0TYBZyXaaOTmGtUFObzchCivIBrIwKzvZA7A9sCejVhXM2aY98A==} 1006 | dependencies: 1007 | diff-sequences: 29.6.3 1008 | estree-walker: 3.0.3 1009 | loupe: 2.3.7 1010 | pretty-format: 29.7.0 1011 | dev: true 1012 | 1013 | /acorn-jsx@5.3.2(acorn@8.11.3): 1014 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 1015 | peerDependencies: 1016 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 1017 | dependencies: 1018 | acorn: 8.11.3 1019 | dev: true 1020 | 1021 | /acorn-walk@8.3.2: 1022 | resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} 1023 | engines: {node: '>=0.4.0'} 1024 | dev: true 1025 | 1026 | /acorn@8.11.3: 1027 | resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} 1028 | engines: {node: '>=0.4.0'} 1029 | hasBin: true 1030 | dev: true 1031 | 1032 | /ajv@6.12.6: 1033 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 1034 | dependencies: 1035 | fast-deep-equal: 3.1.3 1036 | fast-json-stable-stringify: 2.1.0 1037 | json-schema-traverse: 0.4.1 1038 | uri-js: 4.4.1 1039 | dev: true 1040 | 1041 | /ansi-regex@5.0.1: 1042 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 1043 | engines: {node: '>=8'} 1044 | dev: true 1045 | 1046 | /ansi-regex@6.0.1: 1047 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} 1048 | engines: {node: '>=12'} 1049 | dev: true 1050 | 1051 | /ansi-styles@4.3.0: 1052 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 1053 | engines: {node: '>=8'} 1054 | dependencies: 1055 | color-convert: 2.0.1 1056 | dev: true 1057 | 1058 | /ansi-styles@5.2.0: 1059 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 1060 | engines: {node: '>=10'} 1061 | dev: true 1062 | 1063 | /ansi-styles@6.2.1: 1064 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 1065 | engines: {node: '>=12'} 1066 | dev: true 1067 | 1068 | /any-promise@1.3.0: 1069 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 1070 | dev: true 1071 | 1072 | /anymatch@3.1.3: 1073 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 1074 | engines: {node: '>= 8'} 1075 | dependencies: 1076 | normalize-path: 3.0.0 1077 | picomatch: 2.3.1 1078 | dev: true 1079 | 1080 | /argparse@2.0.1: 1081 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 1082 | dev: true 1083 | 1084 | /array-union@2.1.0: 1085 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 1086 | engines: {node: '>=8'} 1087 | dev: true 1088 | 1089 | /assertion-error@1.1.0: 1090 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} 1091 | dev: true 1092 | 1093 | /balanced-match@1.0.2: 1094 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 1095 | dev: true 1096 | 1097 | /binary-extensions@2.3.0: 1098 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 1099 | engines: {node: '>=8'} 1100 | dev: true 1101 | 1102 | /brace-expansion@1.1.11: 1103 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 1104 | dependencies: 1105 | balanced-match: 1.0.2 1106 | concat-map: 0.0.1 1107 | dev: true 1108 | 1109 | /brace-expansion@2.0.1: 1110 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 1111 | dependencies: 1112 | balanced-match: 1.0.2 1113 | dev: true 1114 | 1115 | /braces@3.0.2: 1116 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 1117 | engines: {node: '>=8'} 1118 | dependencies: 1119 | fill-range: 7.0.1 1120 | dev: true 1121 | 1122 | /bundle-require@4.0.2(esbuild@0.19.12): 1123 | resolution: {integrity: sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==} 1124 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1125 | peerDependencies: 1126 | esbuild: '>=0.17' 1127 | dependencies: 1128 | esbuild: 0.19.12 1129 | load-tsconfig: 0.2.5 1130 | dev: true 1131 | 1132 | /cac@6.7.14: 1133 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 1134 | engines: {node: '>=8'} 1135 | dev: true 1136 | 1137 | /callsites@3.1.0: 1138 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 1139 | engines: {node: '>=6'} 1140 | dev: true 1141 | 1142 | /chai@4.4.1: 1143 | resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} 1144 | engines: {node: '>=4'} 1145 | dependencies: 1146 | assertion-error: 1.1.0 1147 | check-error: 1.0.3 1148 | deep-eql: 4.1.3 1149 | get-func-name: 2.0.2 1150 | loupe: 2.3.7 1151 | pathval: 1.1.1 1152 | type-detect: 4.0.8 1153 | dev: true 1154 | 1155 | /chalk@4.1.2: 1156 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 1157 | engines: {node: '>=10'} 1158 | dependencies: 1159 | ansi-styles: 4.3.0 1160 | supports-color: 7.2.0 1161 | dev: true 1162 | 1163 | /check-error@1.0.3: 1164 | resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} 1165 | dependencies: 1166 | get-func-name: 2.0.2 1167 | dev: true 1168 | 1169 | /chokidar@3.6.0: 1170 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 1171 | engines: {node: '>= 8.10.0'} 1172 | dependencies: 1173 | anymatch: 3.1.3 1174 | braces: 3.0.2 1175 | glob-parent: 5.1.2 1176 | is-binary-path: 2.1.0 1177 | is-glob: 4.0.3 1178 | normalize-path: 3.0.0 1179 | readdirp: 3.6.0 1180 | optionalDependencies: 1181 | fsevents: 2.3.3 1182 | dev: true 1183 | 1184 | /color-convert@2.0.1: 1185 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 1186 | engines: {node: '>=7.0.0'} 1187 | dependencies: 1188 | color-name: 1.1.4 1189 | dev: true 1190 | 1191 | /color-name@1.1.4: 1192 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 1193 | dev: true 1194 | 1195 | /commander@4.1.1: 1196 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 1197 | engines: {node: '>= 6'} 1198 | dev: true 1199 | 1200 | /concat-map@0.0.1: 1201 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 1202 | dev: true 1203 | 1204 | /cross-spawn@7.0.3: 1205 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 1206 | engines: {node: '>= 8'} 1207 | dependencies: 1208 | path-key: 3.1.1 1209 | shebang-command: 2.0.0 1210 | which: 2.0.2 1211 | dev: true 1212 | 1213 | /debug@4.3.4: 1214 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 1215 | engines: {node: '>=6.0'} 1216 | peerDependencies: 1217 | supports-color: '*' 1218 | peerDependenciesMeta: 1219 | supports-color: 1220 | optional: true 1221 | dependencies: 1222 | ms: 2.1.2 1223 | dev: true 1224 | 1225 | /deep-eql@4.1.3: 1226 | resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} 1227 | engines: {node: '>=6'} 1228 | dependencies: 1229 | type-detect: 4.0.8 1230 | dev: true 1231 | 1232 | /deep-is@0.1.4: 1233 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 1234 | dev: true 1235 | 1236 | /diff-sequences@29.6.3: 1237 | resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} 1238 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1239 | dev: true 1240 | 1241 | /dir-glob@3.0.1: 1242 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 1243 | engines: {node: '>=8'} 1244 | dependencies: 1245 | path-type: 4.0.0 1246 | dev: true 1247 | 1248 | /doctrine@3.0.0: 1249 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 1250 | engines: {node: '>=6.0.0'} 1251 | dependencies: 1252 | esutils: 2.0.3 1253 | dev: true 1254 | 1255 | /eastasianwidth@0.2.0: 1256 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 1257 | dev: true 1258 | 1259 | /emoji-regex@8.0.0: 1260 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1261 | dev: true 1262 | 1263 | /emoji-regex@9.2.2: 1264 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 1265 | dev: true 1266 | 1267 | /esbuild@0.19.12: 1268 | resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} 1269 | engines: {node: '>=12'} 1270 | hasBin: true 1271 | requiresBuild: true 1272 | optionalDependencies: 1273 | '@esbuild/aix-ppc64': 0.19.12 1274 | '@esbuild/android-arm': 0.19.12 1275 | '@esbuild/android-arm64': 0.19.12 1276 | '@esbuild/android-x64': 0.19.12 1277 | '@esbuild/darwin-arm64': 0.19.12 1278 | '@esbuild/darwin-x64': 0.19.12 1279 | '@esbuild/freebsd-arm64': 0.19.12 1280 | '@esbuild/freebsd-x64': 0.19.12 1281 | '@esbuild/linux-arm': 0.19.12 1282 | '@esbuild/linux-arm64': 0.19.12 1283 | '@esbuild/linux-ia32': 0.19.12 1284 | '@esbuild/linux-loong64': 0.19.12 1285 | '@esbuild/linux-mips64el': 0.19.12 1286 | '@esbuild/linux-ppc64': 0.19.12 1287 | '@esbuild/linux-riscv64': 0.19.12 1288 | '@esbuild/linux-s390x': 0.19.12 1289 | '@esbuild/linux-x64': 0.19.12 1290 | '@esbuild/netbsd-x64': 0.19.12 1291 | '@esbuild/openbsd-x64': 0.19.12 1292 | '@esbuild/sunos-x64': 0.19.12 1293 | '@esbuild/win32-arm64': 0.19.12 1294 | '@esbuild/win32-ia32': 0.19.12 1295 | '@esbuild/win32-x64': 0.19.12 1296 | dev: true 1297 | 1298 | /esbuild@0.20.2: 1299 | resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} 1300 | engines: {node: '>=12'} 1301 | hasBin: true 1302 | requiresBuild: true 1303 | optionalDependencies: 1304 | '@esbuild/aix-ppc64': 0.20.2 1305 | '@esbuild/android-arm': 0.20.2 1306 | '@esbuild/android-arm64': 0.20.2 1307 | '@esbuild/android-x64': 0.20.2 1308 | '@esbuild/darwin-arm64': 0.20.2 1309 | '@esbuild/darwin-x64': 0.20.2 1310 | '@esbuild/freebsd-arm64': 0.20.2 1311 | '@esbuild/freebsd-x64': 0.20.2 1312 | '@esbuild/linux-arm': 0.20.2 1313 | '@esbuild/linux-arm64': 0.20.2 1314 | '@esbuild/linux-ia32': 0.20.2 1315 | '@esbuild/linux-loong64': 0.20.2 1316 | '@esbuild/linux-mips64el': 0.20.2 1317 | '@esbuild/linux-ppc64': 0.20.2 1318 | '@esbuild/linux-riscv64': 0.20.2 1319 | '@esbuild/linux-s390x': 0.20.2 1320 | '@esbuild/linux-x64': 0.20.2 1321 | '@esbuild/netbsd-x64': 0.20.2 1322 | '@esbuild/openbsd-x64': 0.20.2 1323 | '@esbuild/sunos-x64': 0.20.2 1324 | '@esbuild/win32-arm64': 0.20.2 1325 | '@esbuild/win32-ia32': 0.20.2 1326 | '@esbuild/win32-x64': 0.20.2 1327 | dev: true 1328 | 1329 | /escape-string-regexp@4.0.0: 1330 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1331 | engines: {node: '>=10'} 1332 | dev: true 1333 | 1334 | /eslint-config-prettier@9.1.0(eslint@8.57.0): 1335 | resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} 1336 | hasBin: true 1337 | peerDependencies: 1338 | eslint: '>=7.0.0' 1339 | dependencies: 1340 | eslint: 8.57.0 1341 | dev: true 1342 | 1343 | /eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5): 1344 | resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} 1345 | engines: {node: ^14.18.0 || >=16.0.0} 1346 | peerDependencies: 1347 | '@types/eslint': '>=8.0.0' 1348 | eslint: '>=8.0.0' 1349 | eslint-config-prettier: '*' 1350 | prettier: '>=3.0.0' 1351 | peerDependenciesMeta: 1352 | '@types/eslint': 1353 | optional: true 1354 | eslint-config-prettier: 1355 | optional: true 1356 | dependencies: 1357 | eslint: 8.57.0 1358 | eslint-config-prettier: 9.1.0(eslint@8.57.0) 1359 | prettier: 3.2.5 1360 | prettier-linter-helpers: 1.0.0 1361 | synckit: 0.8.8 1362 | dev: true 1363 | 1364 | /eslint-plugin-testing-library@6.2.1(eslint@8.57.0)(typescript@5.4.5): 1365 | resolution: {integrity: sha512-CP2YV/AxtgyrXgizM4648UkuVrFGDcCA8uDmrLytGqtsa7wgC6MTuIQqEAT1Qm4/zCxnC8xRtiGgfEwEt6hmdw==} 1366 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} 1367 | peerDependencies: 1368 | eslint: ^7.5.0 || ^8.0.0 1369 | dependencies: 1370 | '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) 1371 | eslint: 8.57.0 1372 | transitivePeerDependencies: 1373 | - supports-color 1374 | - typescript 1375 | dev: true 1376 | 1377 | /eslint-plugin-vitest@0.4.1(@typescript-eslint/eslint-plugin@7.6.0)(eslint@8.57.0)(typescript@5.4.5)(vitest@1.5.0): 1378 | resolution: {integrity: sha512-+PnZ2u/BS+f5FiuHXz4zKsHPcMKHie+K+1Uvu/x91ovkCMEOJqEI8E9Tw1Wzx2QRz4MHOBHYf1ypO8N1K0aNAA==} 1379 | engines: {node: ^18.0.0 || >= 20.0.0} 1380 | peerDependencies: 1381 | '@typescript-eslint/eslint-plugin': '*' 1382 | eslint: '>=8.0.0' 1383 | vitest: '*' 1384 | peerDependenciesMeta: 1385 | '@typescript-eslint/eslint-plugin': 1386 | optional: true 1387 | vitest: 1388 | optional: true 1389 | dependencies: 1390 | '@typescript-eslint/eslint-plugin': 7.6.0(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(typescript@5.4.5) 1391 | '@typescript-eslint/utils': 7.6.0(eslint@8.57.0)(typescript@5.4.5) 1392 | eslint: 8.57.0 1393 | vitest: 1.5.0(@types/node@20.12.7) 1394 | transitivePeerDependencies: 1395 | - supports-color 1396 | - typescript 1397 | dev: true 1398 | 1399 | /eslint-scope@5.1.1: 1400 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} 1401 | engines: {node: '>=8.0.0'} 1402 | dependencies: 1403 | esrecurse: 4.3.0 1404 | estraverse: 4.3.0 1405 | dev: true 1406 | 1407 | /eslint-scope@7.2.2: 1408 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 1409 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1410 | dependencies: 1411 | esrecurse: 4.3.0 1412 | estraverse: 5.3.0 1413 | dev: true 1414 | 1415 | /eslint-visitor-keys@3.4.3: 1416 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 1417 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1418 | dev: true 1419 | 1420 | /eslint@8.57.0: 1421 | resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} 1422 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1423 | hasBin: true 1424 | dependencies: 1425 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) 1426 | '@eslint-community/regexpp': 4.10.0 1427 | '@eslint/eslintrc': 2.1.4 1428 | '@eslint/js': 8.57.0 1429 | '@humanwhocodes/config-array': 0.11.14 1430 | '@humanwhocodes/module-importer': 1.0.1 1431 | '@nodelib/fs.walk': 1.2.8 1432 | '@ungap/structured-clone': 1.2.0 1433 | ajv: 6.12.6 1434 | chalk: 4.1.2 1435 | cross-spawn: 7.0.3 1436 | debug: 4.3.4 1437 | doctrine: 3.0.0 1438 | escape-string-regexp: 4.0.0 1439 | eslint-scope: 7.2.2 1440 | eslint-visitor-keys: 3.4.3 1441 | espree: 9.6.1 1442 | esquery: 1.5.0 1443 | esutils: 2.0.3 1444 | fast-deep-equal: 3.1.3 1445 | file-entry-cache: 6.0.1 1446 | find-up: 5.0.0 1447 | glob-parent: 6.0.2 1448 | globals: 13.20.0 1449 | graphemer: 1.4.0 1450 | ignore: 5.2.4 1451 | imurmurhash: 0.1.4 1452 | is-glob: 4.0.3 1453 | is-path-inside: 3.0.3 1454 | js-yaml: 4.1.0 1455 | json-stable-stringify-without-jsonify: 1.0.1 1456 | levn: 0.4.1 1457 | lodash.merge: 4.6.2 1458 | minimatch: 3.1.2 1459 | natural-compare: 1.4.0 1460 | optionator: 0.9.3 1461 | strip-ansi: 6.0.1 1462 | text-table: 0.2.0 1463 | transitivePeerDependencies: 1464 | - supports-color 1465 | dev: true 1466 | 1467 | /espree@9.6.1: 1468 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 1469 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1470 | dependencies: 1471 | acorn: 8.11.3 1472 | acorn-jsx: 5.3.2(acorn@8.11.3) 1473 | eslint-visitor-keys: 3.4.3 1474 | dev: true 1475 | 1476 | /esquery@1.5.0: 1477 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 1478 | engines: {node: '>=0.10'} 1479 | dependencies: 1480 | estraverse: 5.3.0 1481 | dev: true 1482 | 1483 | /esrecurse@4.3.0: 1484 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1485 | engines: {node: '>=4.0'} 1486 | dependencies: 1487 | estraverse: 5.3.0 1488 | dev: true 1489 | 1490 | /estraverse@4.3.0: 1491 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 1492 | engines: {node: '>=4.0'} 1493 | dev: true 1494 | 1495 | /estraverse@5.3.0: 1496 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1497 | engines: {node: '>=4.0'} 1498 | dev: true 1499 | 1500 | /estree-walker@3.0.3: 1501 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 1502 | dependencies: 1503 | '@types/estree': 1.0.5 1504 | dev: true 1505 | 1506 | /esutils@2.0.3: 1507 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1508 | engines: {node: '>=0.10.0'} 1509 | dev: true 1510 | 1511 | /execa@5.1.1: 1512 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 1513 | engines: {node: '>=10'} 1514 | dependencies: 1515 | cross-spawn: 7.0.3 1516 | get-stream: 6.0.1 1517 | human-signals: 2.1.0 1518 | is-stream: 2.0.1 1519 | merge-stream: 2.0.0 1520 | npm-run-path: 4.0.1 1521 | onetime: 5.1.2 1522 | signal-exit: 3.0.7 1523 | strip-final-newline: 2.0.0 1524 | dev: true 1525 | 1526 | /execa@8.0.1: 1527 | resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} 1528 | engines: {node: '>=16.17'} 1529 | dependencies: 1530 | cross-spawn: 7.0.3 1531 | get-stream: 8.0.1 1532 | human-signals: 5.0.0 1533 | is-stream: 3.0.0 1534 | merge-stream: 2.0.0 1535 | npm-run-path: 5.3.0 1536 | onetime: 6.0.0 1537 | signal-exit: 4.1.0 1538 | strip-final-newline: 3.0.0 1539 | dev: true 1540 | 1541 | /fast-deep-equal@3.1.3: 1542 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1543 | dev: true 1544 | 1545 | /fast-diff@1.3.0: 1546 | resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} 1547 | dev: true 1548 | 1549 | /fast-glob@3.2.12: 1550 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} 1551 | engines: {node: '>=8.6.0'} 1552 | dependencies: 1553 | '@nodelib/fs.stat': 2.0.5 1554 | '@nodelib/fs.walk': 1.2.8 1555 | glob-parent: 5.1.2 1556 | merge2: 1.4.1 1557 | micromatch: 4.0.5 1558 | dev: true 1559 | 1560 | /fast-json-stable-stringify@2.1.0: 1561 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1562 | dev: true 1563 | 1564 | /fast-levenshtein@2.0.6: 1565 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1566 | dev: true 1567 | 1568 | /fastq@1.15.0: 1569 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 1570 | dependencies: 1571 | reusify: 1.0.4 1572 | dev: true 1573 | 1574 | /file-entry-cache@6.0.1: 1575 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1576 | engines: {node: ^10.12.0 || >=12.0.0} 1577 | dependencies: 1578 | flat-cache: 3.0.4 1579 | dev: true 1580 | 1581 | /fill-range@7.0.1: 1582 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1583 | engines: {node: '>=8'} 1584 | dependencies: 1585 | to-regex-range: 5.0.1 1586 | dev: true 1587 | 1588 | /find-up@5.0.0: 1589 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1590 | engines: {node: '>=10'} 1591 | dependencies: 1592 | locate-path: 6.0.0 1593 | path-exists: 4.0.0 1594 | dev: true 1595 | 1596 | /flat-cache@3.0.4: 1597 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} 1598 | engines: {node: ^10.12.0 || >=12.0.0} 1599 | dependencies: 1600 | flatted: 3.2.7 1601 | rimraf: 3.0.2 1602 | dev: true 1603 | 1604 | /flatted@3.2.7: 1605 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} 1606 | dev: true 1607 | 1608 | /foreground-child@3.1.1: 1609 | resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} 1610 | engines: {node: '>=14'} 1611 | dependencies: 1612 | cross-spawn: 7.0.3 1613 | signal-exit: 4.0.2 1614 | dev: true 1615 | 1616 | /fs.realpath@1.0.0: 1617 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1618 | dev: true 1619 | 1620 | /fsevents@2.3.3: 1621 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1622 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1623 | os: [darwin] 1624 | requiresBuild: true 1625 | dev: true 1626 | optional: true 1627 | 1628 | /get-func-name@2.0.2: 1629 | resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} 1630 | dev: true 1631 | 1632 | /get-stream@6.0.1: 1633 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 1634 | engines: {node: '>=10'} 1635 | dev: true 1636 | 1637 | /get-stream@8.0.1: 1638 | resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} 1639 | engines: {node: '>=16'} 1640 | dev: true 1641 | 1642 | /glob-parent@5.1.2: 1643 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1644 | engines: {node: '>= 6'} 1645 | dependencies: 1646 | is-glob: 4.0.3 1647 | dev: true 1648 | 1649 | /glob-parent@6.0.2: 1650 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1651 | engines: {node: '>=10.13.0'} 1652 | dependencies: 1653 | is-glob: 4.0.3 1654 | dev: true 1655 | 1656 | /glob@10.3.12: 1657 | resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==} 1658 | engines: {node: '>=16 || 14 >=14.17'} 1659 | hasBin: true 1660 | dependencies: 1661 | foreground-child: 3.1.1 1662 | jackspeak: 2.3.6 1663 | minimatch: 9.0.1 1664 | minipass: 7.0.4 1665 | path-scurry: 1.10.2 1666 | dev: true 1667 | 1668 | /glob@7.2.3: 1669 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1670 | dependencies: 1671 | fs.realpath: 1.0.0 1672 | inflight: 1.0.6 1673 | inherits: 2.0.4 1674 | minimatch: 3.1.2 1675 | once: 1.4.0 1676 | path-is-absolute: 1.0.1 1677 | dev: true 1678 | 1679 | /globals@13.20.0: 1680 | resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} 1681 | engines: {node: '>=8'} 1682 | dependencies: 1683 | type-fest: 0.20.2 1684 | dev: true 1685 | 1686 | /globby@11.1.0: 1687 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1688 | engines: {node: '>=10'} 1689 | dependencies: 1690 | array-union: 2.1.0 1691 | dir-glob: 3.0.1 1692 | fast-glob: 3.2.12 1693 | ignore: 5.2.4 1694 | merge2: 1.4.1 1695 | slash: 3.0.0 1696 | dev: true 1697 | 1698 | /globrex@0.1.2: 1699 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} 1700 | dev: true 1701 | 1702 | /graphemer@1.4.0: 1703 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1704 | dev: true 1705 | 1706 | /has-flag@4.0.0: 1707 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1708 | engines: {node: '>=8'} 1709 | dev: true 1710 | 1711 | /human-signals@2.1.0: 1712 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 1713 | engines: {node: '>=10.17.0'} 1714 | dev: true 1715 | 1716 | /human-signals@5.0.0: 1717 | resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} 1718 | engines: {node: '>=16.17.0'} 1719 | dev: true 1720 | 1721 | /ignore@5.2.4: 1722 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} 1723 | engines: {node: '>= 4'} 1724 | dev: true 1725 | 1726 | /ignore@5.3.1: 1727 | resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} 1728 | engines: {node: '>= 4'} 1729 | dev: true 1730 | 1731 | /import-fresh@3.3.0: 1732 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1733 | engines: {node: '>=6'} 1734 | dependencies: 1735 | parent-module: 1.0.1 1736 | resolve-from: 4.0.0 1737 | dev: true 1738 | 1739 | /imurmurhash@0.1.4: 1740 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1741 | engines: {node: '>=0.8.19'} 1742 | dev: true 1743 | 1744 | /inflight@1.0.6: 1745 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1746 | dependencies: 1747 | once: 1.4.0 1748 | wrappy: 1.0.2 1749 | dev: true 1750 | 1751 | /inherits@2.0.4: 1752 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1753 | dev: true 1754 | 1755 | /is-binary-path@2.1.0: 1756 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1757 | engines: {node: '>=8'} 1758 | dependencies: 1759 | binary-extensions: 2.3.0 1760 | dev: true 1761 | 1762 | /is-extglob@2.1.1: 1763 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1764 | engines: {node: '>=0.10.0'} 1765 | dev: true 1766 | 1767 | /is-fullwidth-code-point@3.0.0: 1768 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1769 | engines: {node: '>=8'} 1770 | dev: true 1771 | 1772 | /is-glob@4.0.3: 1773 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1774 | engines: {node: '>=0.10.0'} 1775 | dependencies: 1776 | is-extglob: 2.1.1 1777 | dev: true 1778 | 1779 | /is-number@7.0.0: 1780 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1781 | engines: {node: '>=0.12.0'} 1782 | dev: true 1783 | 1784 | /is-path-inside@3.0.3: 1785 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1786 | engines: {node: '>=8'} 1787 | dev: true 1788 | 1789 | /is-stream@2.0.1: 1790 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 1791 | engines: {node: '>=8'} 1792 | dev: true 1793 | 1794 | /is-stream@3.0.0: 1795 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} 1796 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1797 | dev: true 1798 | 1799 | /isexe@2.0.0: 1800 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1801 | dev: true 1802 | 1803 | /jackspeak@2.3.6: 1804 | resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} 1805 | engines: {node: '>=14'} 1806 | dependencies: 1807 | '@isaacs/cliui': 8.0.2 1808 | optionalDependencies: 1809 | '@pkgjs/parseargs': 0.11.0 1810 | dev: true 1811 | 1812 | /joycon@3.1.1: 1813 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} 1814 | engines: {node: '>=10'} 1815 | dev: true 1816 | 1817 | /js-tokens@9.0.0: 1818 | resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==} 1819 | dev: true 1820 | 1821 | /js-yaml@4.1.0: 1822 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1823 | hasBin: true 1824 | dependencies: 1825 | argparse: 2.0.1 1826 | dev: true 1827 | 1828 | /json-schema-traverse@0.4.1: 1829 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1830 | dev: true 1831 | 1832 | /json-stable-stringify-without-jsonify@1.0.1: 1833 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1834 | dev: true 1835 | 1836 | /jsonc-parser@3.2.1: 1837 | resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} 1838 | dev: true 1839 | 1840 | /levn@0.4.1: 1841 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1842 | engines: {node: '>= 0.8.0'} 1843 | dependencies: 1844 | prelude-ls: 1.2.1 1845 | type-check: 0.4.0 1846 | dev: true 1847 | 1848 | /lilconfig@3.1.1: 1849 | resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} 1850 | engines: {node: '>=14'} 1851 | dev: true 1852 | 1853 | /lines-and-columns@1.2.4: 1854 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1855 | dev: true 1856 | 1857 | /load-tsconfig@0.2.5: 1858 | resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} 1859 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1860 | dev: true 1861 | 1862 | /local-pkg@0.5.0: 1863 | resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} 1864 | engines: {node: '>=14'} 1865 | dependencies: 1866 | mlly: 1.6.1 1867 | pkg-types: 1.0.3 1868 | dev: true 1869 | 1870 | /locate-path@6.0.0: 1871 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1872 | engines: {node: '>=10'} 1873 | dependencies: 1874 | p-locate: 5.0.0 1875 | dev: true 1876 | 1877 | /lodash.merge@4.6.2: 1878 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1879 | dev: true 1880 | 1881 | /lodash.sortby@4.7.0: 1882 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} 1883 | dev: true 1884 | 1885 | /loupe@2.3.7: 1886 | resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} 1887 | dependencies: 1888 | get-func-name: 2.0.2 1889 | dev: true 1890 | 1891 | /lru-cache@10.2.0: 1892 | resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} 1893 | engines: {node: 14 || >=16.14} 1894 | dev: true 1895 | 1896 | /lru-cache@6.0.0: 1897 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1898 | engines: {node: '>=10'} 1899 | dependencies: 1900 | yallist: 4.0.0 1901 | dev: true 1902 | 1903 | /magic-string@0.30.9: 1904 | resolution: {integrity: sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw==} 1905 | engines: {node: '>=12'} 1906 | dependencies: 1907 | '@jridgewell/sourcemap-codec': 1.4.15 1908 | dev: true 1909 | 1910 | /merge-stream@2.0.0: 1911 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1912 | dev: true 1913 | 1914 | /merge2@1.4.1: 1915 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1916 | engines: {node: '>= 8'} 1917 | dev: true 1918 | 1919 | /micromatch@4.0.5: 1920 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1921 | engines: {node: '>=8.6'} 1922 | dependencies: 1923 | braces: 3.0.2 1924 | picomatch: 2.3.1 1925 | dev: true 1926 | 1927 | /mimic-fn@2.1.0: 1928 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 1929 | engines: {node: '>=6'} 1930 | dev: true 1931 | 1932 | /mimic-fn@4.0.0: 1933 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} 1934 | engines: {node: '>=12'} 1935 | dev: true 1936 | 1937 | /minimatch@3.1.2: 1938 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1939 | dependencies: 1940 | brace-expansion: 1.1.11 1941 | dev: true 1942 | 1943 | /minimatch@9.0.1: 1944 | resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} 1945 | engines: {node: '>=16 || 14 >=14.17'} 1946 | dependencies: 1947 | brace-expansion: 2.0.1 1948 | dev: true 1949 | 1950 | /minimatch@9.0.4: 1951 | resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} 1952 | engines: {node: '>=16 || 14 >=14.17'} 1953 | dependencies: 1954 | brace-expansion: 2.0.1 1955 | dev: true 1956 | 1957 | /minipass@7.0.4: 1958 | resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} 1959 | engines: {node: '>=16 || 14 >=14.17'} 1960 | dev: true 1961 | 1962 | /mlly@1.6.1: 1963 | resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==} 1964 | dependencies: 1965 | acorn: 8.11.3 1966 | pathe: 1.1.2 1967 | pkg-types: 1.0.3 1968 | ufo: 1.5.3 1969 | dev: true 1970 | 1971 | /ms@2.1.2: 1972 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1973 | dev: true 1974 | 1975 | /mz@2.7.0: 1976 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 1977 | dependencies: 1978 | any-promise: 1.3.0 1979 | object-assign: 4.1.1 1980 | thenify-all: 1.6.0 1981 | dev: true 1982 | 1983 | /nanoid@3.3.7: 1984 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 1985 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1986 | hasBin: true 1987 | dev: true 1988 | 1989 | /natural-compare@1.4.0: 1990 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1991 | dev: true 1992 | 1993 | /normalize-path@3.0.0: 1994 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1995 | engines: {node: '>=0.10.0'} 1996 | dev: true 1997 | 1998 | /npm-run-path@4.0.1: 1999 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 2000 | engines: {node: '>=8'} 2001 | dependencies: 2002 | path-key: 3.1.1 2003 | dev: true 2004 | 2005 | /npm-run-path@5.3.0: 2006 | resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} 2007 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2008 | dependencies: 2009 | path-key: 4.0.0 2010 | dev: true 2011 | 2012 | /object-assign@4.1.1: 2013 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 2014 | engines: {node: '>=0.10.0'} 2015 | dev: true 2016 | 2017 | /once@1.4.0: 2018 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 2019 | dependencies: 2020 | wrappy: 1.0.2 2021 | dev: true 2022 | 2023 | /onetime@5.1.2: 2024 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 2025 | engines: {node: '>=6'} 2026 | dependencies: 2027 | mimic-fn: 2.1.0 2028 | dev: true 2029 | 2030 | /onetime@6.0.0: 2031 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} 2032 | engines: {node: '>=12'} 2033 | dependencies: 2034 | mimic-fn: 4.0.0 2035 | dev: true 2036 | 2037 | /optionator@0.9.3: 2038 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 2039 | engines: {node: '>= 0.8.0'} 2040 | dependencies: 2041 | '@aashutoshrathi/word-wrap': 1.2.6 2042 | deep-is: 0.1.4 2043 | fast-levenshtein: 2.0.6 2044 | levn: 0.4.1 2045 | prelude-ls: 1.2.1 2046 | type-check: 0.4.0 2047 | dev: true 2048 | 2049 | /p-limit@3.1.0: 2050 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 2051 | engines: {node: '>=10'} 2052 | dependencies: 2053 | yocto-queue: 0.1.0 2054 | dev: true 2055 | 2056 | /p-limit@5.0.0: 2057 | resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} 2058 | engines: {node: '>=18'} 2059 | dependencies: 2060 | yocto-queue: 1.0.0 2061 | dev: true 2062 | 2063 | /p-locate@5.0.0: 2064 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 2065 | engines: {node: '>=10'} 2066 | dependencies: 2067 | p-limit: 3.1.0 2068 | dev: true 2069 | 2070 | /parent-module@1.0.1: 2071 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 2072 | engines: {node: '>=6'} 2073 | dependencies: 2074 | callsites: 3.1.0 2075 | dev: true 2076 | 2077 | /path-exists@4.0.0: 2078 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 2079 | engines: {node: '>=8'} 2080 | dev: true 2081 | 2082 | /path-is-absolute@1.0.1: 2083 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 2084 | engines: {node: '>=0.10.0'} 2085 | dev: true 2086 | 2087 | /path-key@3.1.1: 2088 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 2089 | engines: {node: '>=8'} 2090 | dev: true 2091 | 2092 | /path-key@4.0.0: 2093 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 2094 | engines: {node: '>=12'} 2095 | dev: true 2096 | 2097 | /path-scurry@1.10.2: 2098 | resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} 2099 | engines: {node: '>=16 || 14 >=14.17'} 2100 | dependencies: 2101 | lru-cache: 10.2.0 2102 | minipass: 7.0.4 2103 | dev: true 2104 | 2105 | /path-type@4.0.0: 2106 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 2107 | engines: {node: '>=8'} 2108 | dev: true 2109 | 2110 | /pathe@1.1.2: 2111 | resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} 2112 | dev: true 2113 | 2114 | /pathval@1.1.1: 2115 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} 2116 | dev: true 2117 | 2118 | /picocolors@1.0.0: 2119 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 2120 | dev: true 2121 | 2122 | /picomatch@2.3.1: 2123 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 2124 | engines: {node: '>=8.6'} 2125 | dev: true 2126 | 2127 | /pirates@4.0.5: 2128 | resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} 2129 | engines: {node: '>= 6'} 2130 | dev: true 2131 | 2132 | /pkg-types@1.0.3: 2133 | resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} 2134 | dependencies: 2135 | jsonc-parser: 3.2.1 2136 | mlly: 1.6.1 2137 | pathe: 1.1.2 2138 | dev: true 2139 | 2140 | /postcss-load-config@4.0.2: 2141 | resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} 2142 | engines: {node: '>= 14'} 2143 | peerDependencies: 2144 | postcss: '>=8.0.9' 2145 | ts-node: '>=9.0.0' 2146 | peerDependenciesMeta: 2147 | postcss: 2148 | optional: true 2149 | ts-node: 2150 | optional: true 2151 | dependencies: 2152 | lilconfig: 3.1.1 2153 | yaml: 2.4.1 2154 | dev: true 2155 | 2156 | /postcss@8.4.38: 2157 | resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} 2158 | engines: {node: ^10 || ^12 || >=14} 2159 | dependencies: 2160 | nanoid: 3.3.7 2161 | picocolors: 1.0.0 2162 | source-map-js: 1.2.0 2163 | dev: true 2164 | 2165 | /prelude-ls@1.2.1: 2166 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 2167 | engines: {node: '>= 0.8.0'} 2168 | dev: true 2169 | 2170 | /prettier-linter-helpers@1.0.0: 2171 | resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} 2172 | engines: {node: '>=6.0.0'} 2173 | dependencies: 2174 | fast-diff: 1.3.0 2175 | dev: true 2176 | 2177 | /prettier-plugin-organize-imports@3.2.4(prettier@3.2.5)(typescript@5.4.5): 2178 | resolution: {integrity: sha512-6m8WBhIp0dfwu0SkgfOxJqh+HpdyfqSSLfKKRZSFbDuEQXDDndb8fTpRWkUrX/uBenkex3MgnVk0J3b3Y5byog==} 2179 | peerDependencies: 2180 | '@volar/vue-language-plugin-pug': ^1.0.4 2181 | '@volar/vue-typescript': ^1.0.4 2182 | prettier: '>=2.0' 2183 | typescript: '>=2.9' 2184 | peerDependenciesMeta: 2185 | '@volar/vue-language-plugin-pug': 2186 | optional: true 2187 | '@volar/vue-typescript': 2188 | optional: true 2189 | dependencies: 2190 | prettier: 3.2.5 2191 | typescript: 5.4.5 2192 | dev: true 2193 | 2194 | /prettier@3.2.5: 2195 | resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} 2196 | engines: {node: '>=14'} 2197 | hasBin: true 2198 | dev: true 2199 | 2200 | /pretty-format@29.7.0: 2201 | resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} 2202 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2203 | dependencies: 2204 | '@jest/schemas': 29.6.3 2205 | ansi-styles: 5.2.0 2206 | react-is: 18.2.0 2207 | dev: true 2208 | 2209 | /punycode@2.3.0: 2210 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} 2211 | engines: {node: '>=6'} 2212 | dev: true 2213 | 2214 | /queue-microtask@1.2.3: 2215 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 2216 | dev: true 2217 | 2218 | /react-is@18.2.0: 2219 | resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} 2220 | dev: true 2221 | 2222 | /readdirp@3.6.0: 2223 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 2224 | engines: {node: '>=8.10.0'} 2225 | dependencies: 2226 | picomatch: 2.3.1 2227 | dev: true 2228 | 2229 | /resolve-from@4.0.0: 2230 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 2231 | engines: {node: '>=4'} 2232 | dev: true 2233 | 2234 | /resolve-from@5.0.0: 2235 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 2236 | engines: {node: '>=8'} 2237 | dev: true 2238 | 2239 | /reusify@1.0.4: 2240 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2241 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2242 | dev: true 2243 | 2244 | /rimraf@3.0.2: 2245 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2246 | hasBin: true 2247 | dependencies: 2248 | glob: 7.2.3 2249 | dev: true 2250 | 2251 | /rollup@4.14.3: 2252 | resolution: {integrity: sha512-ag5tTQKYsj1bhrFC9+OEWqb5O6VYgtQDO9hPDBMmIbePwhfSr+ExlcU741t8Dhw5DkPCQf6noz0jb36D6W9/hw==} 2253 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 2254 | hasBin: true 2255 | dependencies: 2256 | '@types/estree': 1.0.5 2257 | optionalDependencies: 2258 | '@rollup/rollup-android-arm-eabi': 4.14.3 2259 | '@rollup/rollup-android-arm64': 4.14.3 2260 | '@rollup/rollup-darwin-arm64': 4.14.3 2261 | '@rollup/rollup-darwin-x64': 4.14.3 2262 | '@rollup/rollup-linux-arm-gnueabihf': 4.14.3 2263 | '@rollup/rollup-linux-arm-musleabihf': 4.14.3 2264 | '@rollup/rollup-linux-arm64-gnu': 4.14.3 2265 | '@rollup/rollup-linux-arm64-musl': 4.14.3 2266 | '@rollup/rollup-linux-powerpc64le-gnu': 4.14.3 2267 | '@rollup/rollup-linux-riscv64-gnu': 4.14.3 2268 | '@rollup/rollup-linux-s390x-gnu': 4.14.3 2269 | '@rollup/rollup-linux-x64-gnu': 4.14.3 2270 | '@rollup/rollup-linux-x64-musl': 4.14.3 2271 | '@rollup/rollup-win32-arm64-msvc': 4.14.3 2272 | '@rollup/rollup-win32-ia32-msvc': 4.14.3 2273 | '@rollup/rollup-win32-x64-msvc': 4.14.3 2274 | fsevents: 2.3.3 2275 | dev: true 2276 | 2277 | /run-parallel@1.2.0: 2278 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2279 | dependencies: 2280 | queue-microtask: 1.2.3 2281 | dev: true 2282 | 2283 | /semver@7.6.0: 2284 | resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} 2285 | engines: {node: '>=10'} 2286 | hasBin: true 2287 | dependencies: 2288 | lru-cache: 6.0.0 2289 | dev: true 2290 | 2291 | /shebang-command@2.0.0: 2292 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2293 | engines: {node: '>=8'} 2294 | dependencies: 2295 | shebang-regex: 3.0.0 2296 | dev: true 2297 | 2298 | /shebang-regex@3.0.0: 2299 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2300 | engines: {node: '>=8'} 2301 | dev: true 2302 | 2303 | /siginfo@2.0.0: 2304 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 2305 | dev: true 2306 | 2307 | /signal-exit@3.0.7: 2308 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 2309 | dev: true 2310 | 2311 | /signal-exit@4.0.2: 2312 | resolution: {integrity: sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==} 2313 | engines: {node: '>=14'} 2314 | dev: true 2315 | 2316 | /signal-exit@4.1.0: 2317 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 2318 | engines: {node: '>=14'} 2319 | dev: true 2320 | 2321 | /slash@3.0.0: 2322 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2323 | engines: {node: '>=8'} 2324 | dev: true 2325 | 2326 | /source-map-js@1.2.0: 2327 | resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} 2328 | engines: {node: '>=0.10.0'} 2329 | dev: true 2330 | 2331 | /source-map@0.8.0-beta.0: 2332 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} 2333 | engines: {node: '>= 8'} 2334 | dependencies: 2335 | whatwg-url: 7.1.0 2336 | dev: true 2337 | 2338 | /stackback@0.0.2: 2339 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 2340 | dev: true 2341 | 2342 | /std-env@3.7.0: 2343 | resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} 2344 | dev: true 2345 | 2346 | /string-width@4.2.3: 2347 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 2348 | engines: {node: '>=8'} 2349 | dependencies: 2350 | emoji-regex: 8.0.0 2351 | is-fullwidth-code-point: 3.0.0 2352 | strip-ansi: 6.0.1 2353 | dev: true 2354 | 2355 | /string-width@5.1.2: 2356 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 2357 | engines: {node: '>=12'} 2358 | dependencies: 2359 | eastasianwidth: 0.2.0 2360 | emoji-regex: 9.2.2 2361 | strip-ansi: 7.0.1 2362 | dev: true 2363 | 2364 | /strip-ansi@6.0.1: 2365 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2366 | engines: {node: '>=8'} 2367 | dependencies: 2368 | ansi-regex: 5.0.1 2369 | dev: true 2370 | 2371 | /strip-ansi@7.0.1: 2372 | resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} 2373 | engines: {node: '>=12'} 2374 | dependencies: 2375 | ansi-regex: 6.0.1 2376 | dev: true 2377 | 2378 | /strip-final-newline@2.0.0: 2379 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 2380 | engines: {node: '>=6'} 2381 | dev: true 2382 | 2383 | /strip-final-newline@3.0.0: 2384 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} 2385 | engines: {node: '>=12'} 2386 | dev: true 2387 | 2388 | /strip-json-comments@3.1.1: 2389 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 2390 | engines: {node: '>=8'} 2391 | dev: true 2392 | 2393 | /strip-literal@2.1.0: 2394 | resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==} 2395 | dependencies: 2396 | js-tokens: 9.0.0 2397 | dev: true 2398 | 2399 | /sucrase@3.35.0: 2400 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 2401 | engines: {node: '>=16 || 14 >=14.17'} 2402 | hasBin: true 2403 | dependencies: 2404 | '@jridgewell/gen-mapping': 0.3.5 2405 | commander: 4.1.1 2406 | glob: 10.3.12 2407 | lines-and-columns: 1.2.4 2408 | mz: 2.7.0 2409 | pirates: 4.0.5 2410 | ts-interface-checker: 0.1.13 2411 | dev: true 2412 | 2413 | /supports-color@7.2.0: 2414 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2415 | engines: {node: '>=8'} 2416 | dependencies: 2417 | has-flag: 4.0.0 2418 | dev: true 2419 | 2420 | /synckit@0.8.8: 2421 | resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} 2422 | engines: {node: ^14.18.0 || >=16.0.0} 2423 | dependencies: 2424 | '@pkgr/core': 0.1.1 2425 | tslib: 2.6.2 2426 | dev: true 2427 | 2428 | /text-table@0.2.0: 2429 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 2430 | dev: true 2431 | 2432 | /thenify-all@1.6.0: 2433 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 2434 | engines: {node: '>=0.8'} 2435 | dependencies: 2436 | thenify: 3.3.1 2437 | dev: true 2438 | 2439 | /thenify@3.3.1: 2440 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 2441 | dependencies: 2442 | any-promise: 1.3.0 2443 | dev: true 2444 | 2445 | /tinybench@2.7.0: 2446 | resolution: {integrity: sha512-Qgayeb106x2o4hNzNjsZEfFziw8IbKqtbXBjVh7VIZfBxfD5M4gWtpyx5+YTae2gJ6Y6Dz/KLepiv16RFeQWNA==} 2447 | dev: true 2448 | 2449 | /tinypool@0.8.4: 2450 | resolution: {integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==} 2451 | engines: {node: '>=14.0.0'} 2452 | dev: true 2453 | 2454 | /tinyspy@2.2.1: 2455 | resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} 2456 | engines: {node: '>=14.0.0'} 2457 | dev: true 2458 | 2459 | /to-regex-range@5.0.1: 2460 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2461 | engines: {node: '>=8.0'} 2462 | dependencies: 2463 | is-number: 7.0.0 2464 | dev: true 2465 | 2466 | /tr46@1.0.1: 2467 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} 2468 | dependencies: 2469 | punycode: 2.3.0 2470 | dev: true 2471 | 2472 | /tree-kill@1.2.2: 2473 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 2474 | hasBin: true 2475 | dev: true 2476 | 2477 | /ts-api-utils@1.3.0(typescript@5.4.5): 2478 | resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} 2479 | engines: {node: '>=16'} 2480 | peerDependencies: 2481 | typescript: '>=4.2.0' 2482 | dependencies: 2483 | typescript: 5.4.5 2484 | dev: true 2485 | 2486 | /ts-interface-checker@0.1.13: 2487 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 2488 | dev: true 2489 | 2490 | /tsconfck@3.0.3(typescript@5.4.5): 2491 | resolution: {integrity: sha512-4t0noZX9t6GcPTfBAbIbbIU4pfpCwh0ueq3S4O/5qXI1VwK1outmxhe9dOiEWqMz3MW2LKgDTpqWV+37IWuVbA==} 2492 | engines: {node: ^18 || >=20} 2493 | hasBin: true 2494 | peerDependencies: 2495 | typescript: ^5.0.0 2496 | peerDependenciesMeta: 2497 | typescript: 2498 | optional: true 2499 | dependencies: 2500 | typescript: 5.4.5 2501 | dev: true 2502 | 2503 | /tslib@1.14.1: 2504 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 2505 | dev: true 2506 | 2507 | /tslib@2.6.2: 2508 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 2509 | dev: true 2510 | 2511 | /tsup@8.0.2(typescript@5.4.5): 2512 | resolution: {integrity: sha512-NY8xtQXdH7hDUAZwcQdY/Vzlw9johQsaqf7iwZ6g1DOUlFYQ5/AtVAjTvihhEyeRlGo4dLRVHtrRaL35M1daqQ==} 2513 | engines: {node: '>=18'} 2514 | hasBin: true 2515 | peerDependencies: 2516 | '@microsoft/api-extractor': ^7.36.0 2517 | '@swc/core': ^1 2518 | postcss: ^8.4.12 2519 | typescript: '>=4.5.0' 2520 | peerDependenciesMeta: 2521 | '@microsoft/api-extractor': 2522 | optional: true 2523 | '@swc/core': 2524 | optional: true 2525 | postcss: 2526 | optional: true 2527 | typescript: 2528 | optional: true 2529 | dependencies: 2530 | bundle-require: 4.0.2(esbuild@0.19.12) 2531 | cac: 6.7.14 2532 | chokidar: 3.6.0 2533 | debug: 4.3.4 2534 | esbuild: 0.19.12 2535 | execa: 5.1.1 2536 | globby: 11.1.0 2537 | joycon: 3.1.1 2538 | postcss-load-config: 4.0.2 2539 | resolve-from: 5.0.0 2540 | rollup: 4.14.3 2541 | source-map: 0.8.0-beta.0 2542 | sucrase: 3.35.0 2543 | tree-kill: 1.2.2 2544 | typescript: 5.4.5 2545 | transitivePeerDependencies: 2546 | - supports-color 2547 | - ts-node 2548 | dev: true 2549 | 2550 | /tsutils@3.21.0(typescript@5.4.5): 2551 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} 2552 | engines: {node: '>= 6'} 2553 | peerDependencies: 2554 | typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' 2555 | dependencies: 2556 | tslib: 1.14.1 2557 | typescript: 5.4.5 2558 | dev: true 2559 | 2560 | /type-check@0.4.0: 2561 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 2562 | engines: {node: '>= 0.8.0'} 2563 | dependencies: 2564 | prelude-ls: 1.2.1 2565 | dev: true 2566 | 2567 | /type-detect@4.0.8: 2568 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 2569 | engines: {node: '>=4'} 2570 | dev: true 2571 | 2572 | /type-fest@0.20.2: 2573 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 2574 | engines: {node: '>=10'} 2575 | dev: true 2576 | 2577 | /typescript@5.4.5: 2578 | resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} 2579 | engines: {node: '>=14.17'} 2580 | hasBin: true 2581 | dev: true 2582 | 2583 | /ufo@1.5.3: 2584 | resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} 2585 | dev: true 2586 | 2587 | /undici-types@5.26.5: 2588 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} 2589 | dev: true 2590 | 2591 | /uri-js@4.4.1: 2592 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 2593 | dependencies: 2594 | punycode: 2.3.0 2595 | dev: true 2596 | 2597 | /vite-node@1.5.0(@types/node@20.12.7): 2598 | resolution: {integrity: sha512-tV8h6gMj6vPzVCa7l+VGq9lwoJjW8Y79vst8QZZGiuRAfijU+EEWuc0kFpmndQrWhMMhet1jdSF+40KSZUqIIw==} 2599 | engines: {node: ^18.0.0 || >=20.0.0} 2600 | hasBin: true 2601 | dependencies: 2602 | cac: 6.7.14 2603 | debug: 4.3.4 2604 | pathe: 1.1.2 2605 | picocolors: 1.0.0 2606 | vite: 5.2.8(@types/node@20.12.7) 2607 | transitivePeerDependencies: 2608 | - '@types/node' 2609 | - less 2610 | - lightningcss 2611 | - sass 2612 | - stylus 2613 | - sugarss 2614 | - supports-color 2615 | - terser 2616 | dev: true 2617 | 2618 | /vite-tsconfig-paths@4.3.2(typescript@5.4.5): 2619 | resolution: {integrity: sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==} 2620 | peerDependencies: 2621 | vite: '*' 2622 | peerDependenciesMeta: 2623 | vite: 2624 | optional: true 2625 | dependencies: 2626 | debug: 4.3.4 2627 | globrex: 0.1.2 2628 | tsconfck: 3.0.3(typescript@5.4.5) 2629 | transitivePeerDependencies: 2630 | - supports-color 2631 | - typescript 2632 | dev: true 2633 | 2634 | /vite@5.2.8(@types/node@20.12.7): 2635 | resolution: {integrity: sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA==} 2636 | engines: {node: ^18.0.0 || >=20.0.0} 2637 | hasBin: true 2638 | peerDependencies: 2639 | '@types/node': ^18.0.0 || >=20.0.0 2640 | less: '*' 2641 | lightningcss: ^1.21.0 2642 | sass: '*' 2643 | stylus: '*' 2644 | sugarss: '*' 2645 | terser: ^5.4.0 2646 | peerDependenciesMeta: 2647 | '@types/node': 2648 | optional: true 2649 | less: 2650 | optional: true 2651 | lightningcss: 2652 | optional: true 2653 | sass: 2654 | optional: true 2655 | stylus: 2656 | optional: true 2657 | sugarss: 2658 | optional: true 2659 | terser: 2660 | optional: true 2661 | dependencies: 2662 | '@types/node': 20.12.7 2663 | esbuild: 0.20.2 2664 | postcss: 8.4.38 2665 | rollup: 4.14.3 2666 | optionalDependencies: 2667 | fsevents: 2.3.3 2668 | dev: true 2669 | 2670 | /vitest@1.5.0(@types/node@20.12.7): 2671 | resolution: {integrity: sha512-d8UKgR0m2kjdxDWX6911uwxout6GHS0XaGH1cksSIVVG8kRlE7G7aBw7myKQCvDI5dT4j7ZMa+l706BIORMDLw==} 2672 | engines: {node: ^18.0.0 || >=20.0.0} 2673 | hasBin: true 2674 | peerDependencies: 2675 | '@edge-runtime/vm': '*' 2676 | '@types/node': ^18.0.0 || >=20.0.0 2677 | '@vitest/browser': 1.5.0 2678 | '@vitest/ui': 1.5.0 2679 | happy-dom: '*' 2680 | jsdom: '*' 2681 | peerDependenciesMeta: 2682 | '@edge-runtime/vm': 2683 | optional: true 2684 | '@types/node': 2685 | optional: true 2686 | '@vitest/browser': 2687 | optional: true 2688 | '@vitest/ui': 2689 | optional: true 2690 | happy-dom: 2691 | optional: true 2692 | jsdom: 2693 | optional: true 2694 | dependencies: 2695 | '@types/node': 20.12.7 2696 | '@vitest/expect': 1.5.0 2697 | '@vitest/runner': 1.5.0 2698 | '@vitest/snapshot': 1.5.0 2699 | '@vitest/spy': 1.5.0 2700 | '@vitest/utils': 1.5.0 2701 | acorn-walk: 8.3.2 2702 | chai: 4.4.1 2703 | debug: 4.3.4 2704 | execa: 8.0.1 2705 | local-pkg: 0.5.0 2706 | magic-string: 0.30.9 2707 | pathe: 1.1.2 2708 | picocolors: 1.0.0 2709 | std-env: 3.7.0 2710 | strip-literal: 2.1.0 2711 | tinybench: 2.7.0 2712 | tinypool: 0.8.4 2713 | vite: 5.2.8(@types/node@20.12.7) 2714 | vite-node: 1.5.0(@types/node@20.12.7) 2715 | why-is-node-running: 2.2.2 2716 | transitivePeerDependencies: 2717 | - less 2718 | - lightningcss 2719 | - sass 2720 | - stylus 2721 | - sugarss 2722 | - supports-color 2723 | - terser 2724 | dev: true 2725 | 2726 | /webidl-conversions@4.0.2: 2727 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} 2728 | dev: true 2729 | 2730 | /whatwg-url@7.1.0: 2731 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} 2732 | dependencies: 2733 | lodash.sortby: 4.7.0 2734 | tr46: 1.0.1 2735 | webidl-conversions: 4.0.2 2736 | dev: true 2737 | 2738 | /which@2.0.2: 2739 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2740 | engines: {node: '>= 8'} 2741 | hasBin: true 2742 | dependencies: 2743 | isexe: 2.0.0 2744 | dev: true 2745 | 2746 | /why-is-node-running@2.2.2: 2747 | resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} 2748 | engines: {node: '>=8'} 2749 | hasBin: true 2750 | dependencies: 2751 | siginfo: 2.0.0 2752 | stackback: 0.0.2 2753 | dev: true 2754 | 2755 | /wrap-ansi@7.0.0: 2756 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 2757 | engines: {node: '>=10'} 2758 | dependencies: 2759 | ansi-styles: 4.3.0 2760 | string-width: 4.2.3 2761 | strip-ansi: 6.0.1 2762 | dev: true 2763 | 2764 | /wrap-ansi@8.1.0: 2765 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 2766 | engines: {node: '>=12'} 2767 | dependencies: 2768 | ansi-styles: 6.2.1 2769 | string-width: 5.1.2 2770 | strip-ansi: 7.0.1 2771 | dev: true 2772 | 2773 | /wrappy@1.0.2: 2774 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2775 | dev: true 2776 | 2777 | /yallist@4.0.0: 2778 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 2779 | dev: true 2780 | 2781 | /yaml@2.4.1: 2782 | resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==} 2783 | engines: {node: '>= 14'} 2784 | hasBin: true 2785 | dev: true 2786 | 2787 | /yocto-queue@0.1.0: 2788 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2789 | engines: {node: '>=10'} 2790 | dev: true 2791 | 2792 | /yocto-queue@1.0.0: 2793 | resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} 2794 | engines: {node: '>=12.20'} 2795 | dev: true 2796 | 2797 | '@cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz': 2798 | resolution: {tarball: https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz} 2799 | name: xlsx 2800 | version: 0.20.2 2801 | engines: {node: '>=0.8'} 2802 | hasBin: true 2803 | dev: false 2804 | -------------------------------------------------------------------------------- /src/bin/cli.ts: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env node 2 | import { writeFile } from "node:fs/promises"; 3 | import { build } from "src/index"; 4 | 5 | const [action = "build", ...args] = process.argv.slice(2); 6 | 7 | const readStdin = async (bufferSize?: number): Promise => { 8 | return new Promise((resolve) => { 9 | const buffers: Buffer[] = []; 10 | process.stdin.on("readable", () => { 11 | const read = process.stdin.read(); 12 | if (read) { 13 | buffers.push(read); 14 | } 15 | }); 16 | process.stdin.on("end", () => { 17 | resolve(Buffer.concat(buffers, bufferSize)); 18 | }); 19 | }); 20 | }; 21 | 22 | const main = async () => { 23 | switch (action) { 24 | case "build": { 25 | const stdin = JSON.parse((await readStdin()).toString("utf8")); 26 | const result = build(stdin); 27 | await writeFile(args[0] || `${process.cwd()}/out.xlsx`, result); 28 | break; 29 | } 30 | default: 31 | console.log("Sorry, that is not something I know how to do."); 32 | } 33 | process.exit(0); 34 | }; 35 | 36 | main(); 37 | -------------------------------------------------------------------------------- /src/config.ts: -------------------------------------------------------------------------------- 1 | import * as fs from "fs"; 2 | import { set_fs } from "xlsx"; 3 | 4 | set_fs(fs); 5 | -------------------------------------------------------------------------------- /src/helpers.ts: -------------------------------------------------------------------------------- 1 | export const isString = (maybeString: unknown): maybeString is string => typeof maybeString === "string"; 2 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | AOA2SheetOpts, 3 | AutoFilterInfo, 4 | ColInfo, 5 | ParsingOptions, 6 | ProtectInfo, 7 | Range, 8 | read, 9 | readFile, 10 | RowInfo, 11 | Sheet2JSONOpts, 12 | utils, 13 | write, 14 | WritingOptions, 15 | } from "xlsx"; 16 | import "./config"; 17 | import { isString } from "./helpers"; 18 | import { WorkBook } from "./workbook"; 19 | 20 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 21 | export const parse = (mixed: unknown, options: Sheet2JSONOpts & ParsingOptions = {}) => { 22 | const { dateNF, header = 1, range, blankrows, defval, raw = true, rawNumbers, ...otherOptions } = options; 23 | const workBook = isString(mixed) 24 | ? readFile(mixed, { dateNF, raw, ...otherOptions }) 25 | : read(mixed, { dateNF, raw, ...otherOptions }); 26 | return Object.keys(workBook.Sheets).map((name) => { 27 | const sheet = workBook.Sheets[name]!; 28 | return { 29 | name, 30 | data: utils.sheet_to_json(sheet, { 31 | dateNF, 32 | header, 33 | range: typeof range === "function" ? range(sheet) : range, 34 | blankrows, 35 | defval, 36 | raw, 37 | rawNumbers, 38 | }), 39 | }; 40 | }); 41 | }; 42 | 43 | export const parseMetadata = (mixed: unknown, options: ParsingOptions = {}) => { 44 | const workBook = isString(mixed) ? readFile(mixed, options) : read(mixed, options); 45 | return Object.keys(workBook.Sheets).map((name) => { 46 | const sheet = workBook.Sheets[name]!; 47 | return { name, data: sheet["!ref"] ? utils.decode_range(sheet["!ref"]) : null }; 48 | }); 49 | }; 50 | 51 | export type WorkSheetOptions = { 52 | /** Column Info */ 53 | "!cols"?: ColInfo[]; 54 | 55 | /** Row Info */ 56 | "!rows"?: RowInfo[]; 57 | 58 | /** Merge Ranges */ 59 | "!merges"?: Range[]; 60 | 61 | /** Worksheet Protection info */ 62 | "!protect"?: ProtectInfo; 63 | 64 | /** AutoFilter info */ 65 | "!autofilter"?: AutoFilterInfo; 66 | }; 67 | 68 | export type WorkSheet = { 69 | name: string; 70 | data: T[][]; 71 | options: WorkSheetOptions; 72 | }; 73 | 74 | export type BuildOptions = WorkSheetOptions & { 75 | parseOptions?: AOA2SheetOpts; 76 | writeOptions?: WritingOptions; 77 | sheetOptions?: WorkSheetOptions; 78 | }; 79 | 80 | export const build = ( 81 | worksheets: WorkSheet[], 82 | { parseOptions = {}, writeOptions = {}, sheetOptions = {}, ...otherOptions }: BuildOptions = {}, 83 | ): Buffer => { 84 | const { bookType = "xlsx", bookSST = false, type = "buffer", ...otherWriteOptions } = writeOptions; 85 | const legacyOptions = Object.keys(otherOptions).filter((key) => { 86 | if (["!cols", "!rows", "!merges", "!protect", "!autofilter"].includes(key)) { 87 | console.debug(`Deprecated options['${key}'], please use options.sheetOptions['${key}'] instead.`); 88 | return true; 89 | } 90 | console.debug(`Unknown options['${key}'], please use options.parseOptions / options.writeOptions`); 91 | return false; 92 | }); 93 | const workBook = worksheets.reduce((soFar, { name, data, options = {} }, index) => { 94 | const sheetName = name || `Sheet_${index}`; 95 | const sheetData = utils.aoa_to_sheet(data, parseOptions); 96 | soFar.SheetNames.push(sheetName); 97 | soFar.Sheets[sheetName] = sheetData; 98 | Object.assign(soFar.Sheets[sheetName]!, legacyOptions, sheetOptions, options); 99 | return soFar; 100 | }, new WorkBook()); 101 | return write(workBook, { bookType, bookSST, type, ...otherWriteOptions }); 102 | }; 103 | 104 | export default { parse, parseMetadata, build }; 105 | -------------------------------------------------------------------------------- /src/workbook.ts: -------------------------------------------------------------------------------- 1 | import type { WorkSheet, WorkBook as XLSXWorkBook } from "xlsx"; 2 | 3 | export class WorkBook implements XLSXWorkBook { 4 | Sheets: Record = {}; 5 | SheetNames: string[] = []; 6 | } 7 | -------------------------------------------------------------------------------- /test/fixtures/dateField.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "Sheet1", 4 | "data": [ 5 | ["Serial 1", "Serial 2", "Serial 3", "UPC", "PO#", "Date Received"], 6 | ["SPKA19BD170C53", "SPKA19BD170420", "SPKA19BD1707F3", "861453000227", "10012", "5/25/17"], 7 | ["SPKA19BD16007A", "SPKA19BD170927", "SPKA19BD1702B9", "861453000227", "10012", "5/25/17"] 8 | ] 9 | } 10 | ] 11 | -------------------------------------------------------------------------------- /test/fixtures/dateField.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgcrea/node-xlsx/89d8faec210ee9fcb302da9fc64f3c29b0e57cb2/test/fixtures/dateField.xlsx -------------------------------------------------------------------------------- /test/fixtures/sheetOptions.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "myFirstSheet", 4 | "data": [ 5 | [1, 2, 3], 6 | [true, false, null, "sheetjs"], 7 | ["foo", "bar", 41689.604166666664, "0.3"], 8 | ["baz", null, "qux"] 9 | ] 10 | }, 11 | { 12 | "name": "mySecondSheet", 13 | "data": [ 14 | [4, 5, 6], 15 | [7, 8, 9, 10], 16 | [11, 12, 13, 14], 17 | ["baz", null, "qux"] 18 | ], 19 | "options": { 20 | "!merges": [{ "s": { "c": 0, "r": 0 }, "e": { "c": 0, "r": 3 } }] 21 | } 22 | } 23 | ] 24 | -------------------------------------------------------------------------------- /test/fixtures/sheetOptions.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgcrea/node-xlsx/89d8faec210ee9fcb302da9fc64f3c29b0e57cb2/test/fixtures/sheetOptions.xlsx -------------------------------------------------------------------------------- /test/fixtures/test.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "mySheetName", 4 | "data": [ 5 | [1, 2, 3], 6 | [true, false, null, "sheetjs"], 7 | ["foo", "bar", 41689.604166666664, "0.3"], 8 | ["baz", null, "qux"] 9 | ] 10 | } 11 | ] 12 | -------------------------------------------------------------------------------- /test/fixtures/test.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgcrea/node-xlsx/89d8faec210ee9fcb302da9fc64f3c29b0e57cb2/test/fixtures/test.xlsx -------------------------------------------------------------------------------- /test/fixtures/withEmptyColumns.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "with empty columns", 4 | "data": [ 5 | [null, null, "c2", "d2", "e2"], 6 | [null, null, "c3", "d2", "e3"] 7 | ] 8 | } 9 | ] 10 | -------------------------------------------------------------------------------- /test/fixtures/withEmptyColumns.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgcrea/node-xlsx/89d8faec210ee9fcb302da9fc64f3c29b0e57cb2/test/fixtures/withEmptyColumns.xlsx -------------------------------------------------------------------------------- /test/setup.ts: -------------------------------------------------------------------------------- 1 | import "./utils/debug"; 2 | -------------------------------------------------------------------------------- /test/specs/build.spec.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from "vitest"; 2 | import { build as buildXSLX } from "../../src"; 3 | import { readBufferFixture, readFixture } from "../utils"; 4 | 5 | describe("node-xlsx builder", () => { 6 | it("should throw if no input is given", () => { 7 | // @ts-expect-error jest 8 | expect(() => buildXSLX()).toThrow(); 9 | }); 10 | it("should properly build an XLSX from", () => { 11 | const expected = readBufferFixture(`test.xlsx`); 12 | const worksheets = JSON.parse(readFixture(`test.json`)); 13 | const result = buildXSLX(worksheets); 14 | expect(result instanceof Buffer).toBeTruthy(); 15 | // Only check the four first bytes 16 | expect(result.subarray(0, 4)).toEqual(expected.subarray(0, 4)); 17 | }); 18 | it("should handle !merges sheetOption", () => { 19 | const expected = readBufferFixture(`sheetOptions.xlsx`); 20 | const worksheets = JSON.parse(readFixture(`sheetOptions.json`)); 21 | const result = buildXSLX(worksheets); 22 | expect(result instanceof Buffer).toBeTruthy(); 23 | // Only check the four first bytes 24 | expect(result.subarray(0, 4)).toEqual(expected.subarray(0, 4)); 25 | }); 26 | it("should handle global sheet options", () => { 27 | const worksheets = JSON.parse(readFixture(`test.json`)); 28 | const result = buildXSLX(worksheets, { 29 | sheetOptions: { 30 | "!merges": [{ s: { c: 0, r: 0 }, e: { c: 0, r: 3 } }], 31 | }, 32 | }); 33 | expect(result instanceof Buffer).toBeTruthy(); 34 | }); 35 | it("should handle global legacy options", () => { 36 | const worksheets = JSON.parse(readFixture(`test.json`)); 37 | const result = buildXSLX(worksheets, { 38 | "!merges": [{ s: { c: 0, r: 0 }, e: { c: 0, r: 3 } }], 39 | }); 40 | expect(result instanceof Buffer).toBeTruthy(); 41 | }); 42 | }); 43 | -------------------------------------------------------------------------------- /test/specs/import.spec.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from "vitest"; 2 | import XSLX from "../../src"; 3 | 4 | describe("node-xlsx import", () => { 5 | it("should get current object", () => { 6 | expect(typeof XSLX).toBe("object"); 7 | }); 8 | it("should has current keys", () => { 9 | expect(Object.keys(XSLX)).toEqual(["parse", "parseMetadata", "build"]); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /test/specs/parse.spec.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from "vitest"; 2 | import xlsx from "xlsx"; 3 | import { parse as parseXSLX } from "../../src"; 4 | import { readBufferFixture, readFixture } from "../utils"; 5 | 6 | describe("node-xlsx parser", () => { 7 | it("should throw if no input is given", () => { 8 | // @ts-expect-error jest 9 | expect(() => parseXSLX()).toThrow(); 10 | }); 11 | it("should properly parse an XLSX buffer", () => { 12 | const expected = JSON.parse(readFixture(`test.json`)); 13 | const buffer = readBufferFixture(`test.xlsx`); 14 | const result = JSON.parse(JSON.stringify(parseXSLX(buffer))); 15 | expect(result).toEqual(expected); 16 | }); 17 | it("should properly parse an XLSX file", () => { 18 | const expected = JSON.parse(readFixture(`test.json`)); 19 | const file = `test/fixtures/test.xlsx`; 20 | const result = JSON.parse(JSON.stringify(parseXSLX(file))); 21 | expect(result).toEqual(expected); 22 | }); 23 | it("should properly parse an XLSX file with date field", () => { 24 | const expected = JSON.parse(readFixture(`dateField.json`)); 25 | const file = `test/fixtures/dateField.xlsx`; 26 | const result = JSON.parse(JSON.stringify(parseXSLX(file, { raw: false }))); 27 | expect(result).toEqual(expected); 28 | }); 29 | it("should properly parse an XLSX with a range option as a function", () => { 30 | const expected = JSON.parse(readFixture("withEmptyColumns.json")); 31 | const file = "test/fixtures/withEmptyColumns.xlsx"; 32 | const result = JSON.parse( 33 | JSON.stringify( 34 | parseXSLX(file, { 35 | raw: true, 36 | header: 1, 37 | range: function keepEmptyColumns(sheet: xlsx.WorkSheet) { 38 | if (sheet["!ref"]) { 39 | const { s, e } = xlsx.utils.decode_range(sheet["!ref"]); 40 | // starts at column #1 41 | s.c = 0; 42 | return xlsx.utils.encode_range(s, e); 43 | } 44 | return sheet["!ref"]; 45 | }, 46 | }), 47 | ), 48 | ); 49 | expect(result).toEqual(expected); 50 | }); 51 | }); 52 | -------------------------------------------------------------------------------- /test/utils/debug.ts: -------------------------------------------------------------------------------- 1 | import { formatWithOptions } from "node:util"; 2 | 3 | declare global { 4 | // eslint-disable-next-line no-var 5 | var d: (...args: unknown[]) => void; 6 | } 7 | 8 | export const d = (...args: unknown[]) => 9 | console.log(`🔴 ${formatWithOptions({ depth: 10, colors: true }, args.length === 1 ? args[0] : args)}`); 10 | 11 | globalThis.d = d; 12 | -------------------------------------------------------------------------------- /test/utils/index.ts: -------------------------------------------------------------------------------- 1 | import { readFileSync } from "fs"; 2 | 3 | export const readBufferFixture = (name: string) => readFileSync(`${__dirname}/../fixtures/${name}`); 4 | export const readFixture = (name: string) => readBufferFixture(name).toString("utf8"); 5 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["@tsconfig/node-lts/tsconfig.json"], 3 | "compilerOptions": { 4 | "module": "ESNext", 5 | "moduleResolution": "Bundler", 6 | "baseUrl": ".", 7 | "paths": { 8 | "src/*": ["./src/*"], 9 | "test/*": ["./test/*"] 10 | } 11 | }, 12 | "include": ["src", "test"] 13 | } 14 | -------------------------------------------------------------------------------- /vitest.config.ts: -------------------------------------------------------------------------------- 1 | import tsconfigPaths from "vite-tsconfig-paths"; 2 | import { defineConfig } from "vitest/config"; 3 | 4 | export default defineConfig({ 5 | plugins: [tsconfigPaths()], 6 | test: { 7 | setupFiles: ["test/setup.ts"], 8 | }, 9 | }); 10 | --------------------------------------------------------------------------------