├── .github ├── FUNDING.yml └── workflows │ ├── node.js.yml │ └── publish.yml ├── .gitignore ├── .prettierignore ├── .prettierrc ├── LICENSE ├── README.md ├── eslint.config.mjs ├── jest.config.ts ├── package.json ├── pnpm-lock.yaml ├── src ├── index.ts ├── parser │ ├── class.ts │ ├── enum.ts │ ├── function.ts │ ├── index.ts │ ├── interface.ts │ ├── type.ts │ ├── types.ts │ └── utils.ts └── printer │ ├── class.ts │ ├── enum.ts │ ├── function.ts │ ├── index.ts │ ├── interface.ts │ ├── toc.ts │ ├── type.ts │ └── utils.ts ├── test ├── class.test.ts ├── enum.test.ts ├── function.test.ts ├── interface.test.ts ├── tooltip.test.ts └── type.test.ts ├── testdata ├── class.d.md ├── class.d.ts ├── enum.d.md ├── enum.d.ts ├── function.d.md ├── function.d.ts ├── interface.d.md ├── interface.d.ts ├── tooltip.d.md ├── tooltip.d.ts ├── type.d.md └── type.d.ts └── tsconfig.json /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | custom: https://buymeacoffee.com/marcusolsson 2 | -------------------------------------------------------------------------------- /.github/workflows/node.js.yml: -------------------------------------------------------------------------------- 1 | name: Node.js CI 2 | 3 | on: 4 | push: 5 | branches: ["main"] 6 | pull_request: 7 | branches: ["main"] 8 | 9 | jobs: 10 | build: 11 | runs-on: ubuntu-latest 12 | 13 | strategy: 14 | matrix: 15 | node-version: [18.x, 20.x, 22.x] 16 | 17 | steps: 18 | - uses: actions/checkout@v4 19 | - name: Install pnpm 20 | uses: pnpm/action-setup@v4 21 | with: 22 | version: 10 23 | - name: Use Node.js ${{ matrix.node-version }} 24 | uses: actions/setup-node@v4 25 | with: 26 | node-version: ${{ matrix.node-version }} 27 | cache: "pnpm" 28 | - name: Install dependencies 29 | run: pnpm install 30 | - run: pnpm run build 31 | - run: pnpm run test 32 | - run: pnpm run lint 33 | -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: Publish to NPM 2 | 3 | on: 4 | release: 5 | types: [created] 6 | 7 | jobs: 8 | build: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v4 12 | - name: Install pnpm 13 | uses: pnpm/action-setup@v4 14 | with: 15 | version: 10 16 | - uses: actions/setup-node@v4 17 | with: 18 | node-version: 20 19 | - name: Install dependencies 20 | run: pnpm install --frozen-lockfile 21 | - run: pnpm run build 22 | - run: pnpm run test 23 | - run: pnpm run lint 24 | 25 | publish-npm: 26 | needs: build 27 | runs-on: ubuntu-latest 28 | steps: 29 | - uses: actions/checkout@v4 30 | - name: Install pnpm 31 | uses: pnpm/action-setup@v4 32 | with: 33 | version: 10 34 | - uses: actions/setup-node@v4 35 | with: 36 | node-version: 20 37 | registry-url: https://registry.npmjs.org/ 38 | - run: pnpm install --frozen-lockfile 39 | - run: pnpm run build 40 | - run: pnpm publish --access public -no-git-checks 41 | env: 42 | NODE_AUTH_TOKEN: ${{secrets.npm_token}} 43 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | docs 4 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | dist/ 2 | docs/ 3 | testdata/ 4 | pnpm-lock.yaml 5 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": true, 3 | "trailingComma": "es5", 4 | "singleQuote": false, 5 | "printWidth": 80 6 | } 7 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 Marcus Olsson 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # dts-docs 2 | 3 | [![npm version](https://img.shields.io/npm/v/dts-docs.svg?style=flat-square)](https://www.npmjs.org/package/dts-docs) 4 | [![CI](https://github.com/marcusolsson/dts-docs/actions/workflows/node.js.yml/badge.svg)](https://github.com/marcusolsson/dts-docs/actions/workflows/node.js.yml) 5 | 6 | A command-line tool for generating Markdown documentation for a `.d.ts` file. 7 | 8 | > [!IMPORTANT] 9 | > This is **NOT** fit for production use. Use at your own risk. 10 | 11 | ## Usage 12 | 13 | ```bash 14 | npx dts-docs@latest ./definition.d.ts ./docs 15 | ``` 16 | -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | 3 | import eslint from "@eslint/js"; 4 | import tseslint from "typescript-eslint"; 5 | 6 | export default tseslint.config( 7 | eslint.configs.recommended, 8 | tseslint.configs.strict, 9 | tseslint.configs.stylistic, 10 | { 11 | ignores: ["testdata/", "node_modules/", "dist/"], 12 | } 13 | ); 14 | -------------------------------------------------------------------------------- /jest.config.ts: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: "ts-jest", 3 | testEnvironment: "node", 4 | transform: { 5 | "^.+\\.tsx?$": "ts-jest", 6 | }, 7 | }; 8 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dts-docs", 3 | "version": "0.1.2", 4 | "main": "dist/index.js", 5 | "license": "MIT", 6 | "scripts": { 7 | "build": "esbuild src/index.ts --bundle --platform=node --outfile=dist/index.js --format=cjs --banner:js='#!/usr/bin/env node'", 8 | "postbuild": "chmod +x dist/index.js", 9 | "run": "node dist/index.js", 10 | "test": "jest", 11 | "format": "prettier --write .", 12 | "lint": "eslint ." 13 | }, 14 | "bin": { 15 | "dts-docs": "./dist/index.js" 16 | }, 17 | "devDependencies": { 18 | "@eslint/js": "^9.23.0", 19 | "@types/jest": "^29.5.14", 20 | "@types/node": "^22.13.14", 21 | "esbuild": "^0.25.1", 22 | "eslint": "^9.23.0", 23 | "jest": "^29.7.0", 24 | "prettier": "^3.5.3", 25 | "ts-jest": "^29.3.0", 26 | "ts-loader": "^9.5.2", 27 | "ts-node": "^10.9.2", 28 | "typescript": "^5.8.2", 29 | "typescript-eslint": "^8.28.0" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | devDependencies: 11 | '@eslint/js': 12 | specifier: ^9.23.0 13 | version: 9.23.0 14 | '@types/jest': 15 | specifier: ^29.5.14 16 | version: 29.5.14 17 | '@types/node': 18 | specifier: ^22.13.14 19 | version: 22.13.14 20 | esbuild: 21 | specifier: ^0.25.1 22 | version: 0.25.1 23 | eslint: 24 | specifier: ^9.23.0 25 | version: 9.23.0 26 | jest: 27 | specifier: ^29.7.0 28 | version: 29.7.0(@types/node@22.13.14)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)) 29 | prettier: 30 | specifier: ^3.5.3 31 | version: 3.5.3 32 | ts-jest: 33 | specifier: ^29.3.0 34 | version: 29.3.0(@babel/core@7.26.10)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10))(esbuild@0.25.1)(jest@29.7.0(@types/node@22.13.14)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)))(typescript@5.8.2) 35 | ts-loader: 36 | specifier: ^9.5.2 37 | version: 9.5.2(typescript@5.8.2)(webpack@5.98.0(esbuild@0.25.1)) 38 | ts-node: 39 | specifier: ^10.9.2 40 | version: 10.9.2(@types/node@22.13.14)(typescript@5.8.2) 41 | typescript: 42 | specifier: ^5.8.2 43 | version: 5.8.2 44 | typescript-eslint: 45 | specifier: ^8.28.0 46 | version: 8.28.0(eslint@9.23.0)(typescript@5.8.2) 47 | 48 | packages: 49 | 50 | '@ampproject/remapping@2.3.0': 51 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 52 | engines: {node: '>=6.0.0'} 53 | 54 | '@babel/code-frame@7.26.2': 55 | resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} 56 | engines: {node: '>=6.9.0'} 57 | 58 | '@babel/compat-data@7.26.8': 59 | resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} 60 | engines: {node: '>=6.9.0'} 61 | 62 | '@babel/core@7.26.10': 63 | resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} 64 | engines: {node: '>=6.9.0'} 65 | 66 | '@babel/generator@7.27.0': 67 | resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==} 68 | engines: {node: '>=6.9.0'} 69 | 70 | '@babel/helper-compilation-targets@7.27.0': 71 | resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==} 72 | engines: {node: '>=6.9.0'} 73 | 74 | '@babel/helper-module-imports@7.25.9': 75 | resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} 76 | engines: {node: '>=6.9.0'} 77 | 78 | '@babel/helper-module-transforms@7.26.0': 79 | resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} 80 | engines: {node: '>=6.9.0'} 81 | peerDependencies: 82 | '@babel/core': ^7.0.0 83 | 84 | '@babel/helper-plugin-utils@7.26.5': 85 | resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} 86 | engines: {node: '>=6.9.0'} 87 | 88 | '@babel/helper-string-parser@7.25.9': 89 | resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} 90 | engines: {node: '>=6.9.0'} 91 | 92 | '@babel/helper-validator-identifier@7.25.9': 93 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 94 | engines: {node: '>=6.9.0'} 95 | 96 | '@babel/helper-validator-option@7.25.9': 97 | resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} 98 | engines: {node: '>=6.9.0'} 99 | 100 | '@babel/helpers@7.27.0': 101 | resolution: {integrity: sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==} 102 | engines: {node: '>=6.9.0'} 103 | 104 | '@babel/parser@7.27.0': 105 | resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==} 106 | engines: {node: '>=6.0.0'} 107 | hasBin: true 108 | 109 | '@babel/plugin-syntax-async-generators@7.8.4': 110 | resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} 111 | peerDependencies: 112 | '@babel/core': ^7.0.0-0 113 | 114 | '@babel/plugin-syntax-bigint@7.8.3': 115 | resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} 116 | peerDependencies: 117 | '@babel/core': ^7.0.0-0 118 | 119 | '@babel/plugin-syntax-class-properties@7.12.13': 120 | resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} 121 | peerDependencies: 122 | '@babel/core': ^7.0.0-0 123 | 124 | '@babel/plugin-syntax-class-static-block@7.14.5': 125 | resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} 126 | engines: {node: '>=6.9.0'} 127 | peerDependencies: 128 | '@babel/core': ^7.0.0-0 129 | 130 | '@babel/plugin-syntax-import-attributes@7.26.0': 131 | resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} 132 | engines: {node: '>=6.9.0'} 133 | peerDependencies: 134 | '@babel/core': ^7.0.0-0 135 | 136 | '@babel/plugin-syntax-import-meta@7.10.4': 137 | resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} 138 | peerDependencies: 139 | '@babel/core': ^7.0.0-0 140 | 141 | '@babel/plugin-syntax-json-strings@7.8.3': 142 | resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} 143 | peerDependencies: 144 | '@babel/core': ^7.0.0-0 145 | 146 | '@babel/plugin-syntax-jsx@7.25.9': 147 | resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} 148 | engines: {node: '>=6.9.0'} 149 | peerDependencies: 150 | '@babel/core': ^7.0.0-0 151 | 152 | '@babel/plugin-syntax-logical-assignment-operators@7.10.4': 153 | resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} 154 | peerDependencies: 155 | '@babel/core': ^7.0.0-0 156 | 157 | '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': 158 | resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} 159 | peerDependencies: 160 | '@babel/core': ^7.0.0-0 161 | 162 | '@babel/plugin-syntax-numeric-separator@7.10.4': 163 | resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} 164 | peerDependencies: 165 | '@babel/core': ^7.0.0-0 166 | 167 | '@babel/plugin-syntax-object-rest-spread@7.8.3': 168 | resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} 169 | peerDependencies: 170 | '@babel/core': ^7.0.0-0 171 | 172 | '@babel/plugin-syntax-optional-catch-binding@7.8.3': 173 | resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} 174 | peerDependencies: 175 | '@babel/core': ^7.0.0-0 176 | 177 | '@babel/plugin-syntax-optional-chaining@7.8.3': 178 | resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} 179 | peerDependencies: 180 | '@babel/core': ^7.0.0-0 181 | 182 | '@babel/plugin-syntax-private-property-in-object@7.14.5': 183 | resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} 184 | engines: {node: '>=6.9.0'} 185 | peerDependencies: 186 | '@babel/core': ^7.0.0-0 187 | 188 | '@babel/plugin-syntax-top-level-await@7.14.5': 189 | resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} 190 | engines: {node: '>=6.9.0'} 191 | peerDependencies: 192 | '@babel/core': ^7.0.0-0 193 | 194 | '@babel/plugin-syntax-typescript@7.25.9': 195 | resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} 196 | engines: {node: '>=6.9.0'} 197 | peerDependencies: 198 | '@babel/core': ^7.0.0-0 199 | 200 | '@babel/template@7.27.0': 201 | resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==} 202 | engines: {node: '>=6.9.0'} 203 | 204 | '@babel/traverse@7.27.0': 205 | resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==} 206 | engines: {node: '>=6.9.0'} 207 | 208 | '@babel/types@7.27.0': 209 | resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} 210 | engines: {node: '>=6.9.0'} 211 | 212 | '@bcoe/v8-coverage@0.2.3': 213 | resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} 214 | 215 | '@cspotcode/source-map-support@0.8.1': 216 | resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} 217 | engines: {node: '>=12'} 218 | 219 | '@esbuild/aix-ppc64@0.25.1': 220 | resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==} 221 | engines: {node: '>=18'} 222 | cpu: [ppc64] 223 | os: [aix] 224 | 225 | '@esbuild/android-arm64@0.25.1': 226 | resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==} 227 | engines: {node: '>=18'} 228 | cpu: [arm64] 229 | os: [android] 230 | 231 | '@esbuild/android-arm@0.25.1': 232 | resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==} 233 | engines: {node: '>=18'} 234 | cpu: [arm] 235 | os: [android] 236 | 237 | '@esbuild/android-x64@0.25.1': 238 | resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==} 239 | engines: {node: '>=18'} 240 | cpu: [x64] 241 | os: [android] 242 | 243 | '@esbuild/darwin-arm64@0.25.1': 244 | resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==} 245 | engines: {node: '>=18'} 246 | cpu: [arm64] 247 | os: [darwin] 248 | 249 | '@esbuild/darwin-x64@0.25.1': 250 | resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==} 251 | engines: {node: '>=18'} 252 | cpu: [x64] 253 | os: [darwin] 254 | 255 | '@esbuild/freebsd-arm64@0.25.1': 256 | resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==} 257 | engines: {node: '>=18'} 258 | cpu: [arm64] 259 | os: [freebsd] 260 | 261 | '@esbuild/freebsd-x64@0.25.1': 262 | resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==} 263 | engines: {node: '>=18'} 264 | cpu: [x64] 265 | os: [freebsd] 266 | 267 | '@esbuild/linux-arm64@0.25.1': 268 | resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==} 269 | engines: {node: '>=18'} 270 | cpu: [arm64] 271 | os: [linux] 272 | 273 | '@esbuild/linux-arm@0.25.1': 274 | resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==} 275 | engines: {node: '>=18'} 276 | cpu: [arm] 277 | os: [linux] 278 | 279 | '@esbuild/linux-ia32@0.25.1': 280 | resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==} 281 | engines: {node: '>=18'} 282 | cpu: [ia32] 283 | os: [linux] 284 | 285 | '@esbuild/linux-loong64@0.25.1': 286 | resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==} 287 | engines: {node: '>=18'} 288 | cpu: [loong64] 289 | os: [linux] 290 | 291 | '@esbuild/linux-mips64el@0.25.1': 292 | resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==} 293 | engines: {node: '>=18'} 294 | cpu: [mips64el] 295 | os: [linux] 296 | 297 | '@esbuild/linux-ppc64@0.25.1': 298 | resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==} 299 | engines: {node: '>=18'} 300 | cpu: [ppc64] 301 | os: [linux] 302 | 303 | '@esbuild/linux-riscv64@0.25.1': 304 | resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==} 305 | engines: {node: '>=18'} 306 | cpu: [riscv64] 307 | os: [linux] 308 | 309 | '@esbuild/linux-s390x@0.25.1': 310 | resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==} 311 | engines: {node: '>=18'} 312 | cpu: [s390x] 313 | os: [linux] 314 | 315 | '@esbuild/linux-x64@0.25.1': 316 | resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==} 317 | engines: {node: '>=18'} 318 | cpu: [x64] 319 | os: [linux] 320 | 321 | '@esbuild/netbsd-arm64@0.25.1': 322 | resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==} 323 | engines: {node: '>=18'} 324 | cpu: [arm64] 325 | os: [netbsd] 326 | 327 | '@esbuild/netbsd-x64@0.25.1': 328 | resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==} 329 | engines: {node: '>=18'} 330 | cpu: [x64] 331 | os: [netbsd] 332 | 333 | '@esbuild/openbsd-arm64@0.25.1': 334 | resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==} 335 | engines: {node: '>=18'} 336 | cpu: [arm64] 337 | os: [openbsd] 338 | 339 | '@esbuild/openbsd-x64@0.25.1': 340 | resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==} 341 | engines: {node: '>=18'} 342 | cpu: [x64] 343 | os: [openbsd] 344 | 345 | '@esbuild/sunos-x64@0.25.1': 346 | resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==} 347 | engines: {node: '>=18'} 348 | cpu: [x64] 349 | os: [sunos] 350 | 351 | '@esbuild/win32-arm64@0.25.1': 352 | resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==} 353 | engines: {node: '>=18'} 354 | cpu: [arm64] 355 | os: [win32] 356 | 357 | '@esbuild/win32-ia32@0.25.1': 358 | resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==} 359 | engines: {node: '>=18'} 360 | cpu: [ia32] 361 | os: [win32] 362 | 363 | '@esbuild/win32-x64@0.25.1': 364 | resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==} 365 | engines: {node: '>=18'} 366 | cpu: [x64] 367 | os: [win32] 368 | 369 | '@eslint-community/eslint-utils@4.5.1': 370 | resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==} 371 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 372 | peerDependencies: 373 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 374 | 375 | '@eslint-community/regexpp@4.12.1': 376 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 377 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 378 | 379 | '@eslint/config-array@0.19.2': 380 | resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} 381 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 382 | 383 | '@eslint/config-helpers@0.2.0': 384 | resolution: {integrity: sha512-yJLLmLexii32mGrhW29qvU3QBVTu0GUmEf/J4XsBtVhp4JkIUFN/BjWqTF63yRvGApIDpZm5fa97LtYtINmfeQ==} 385 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 386 | 387 | '@eslint/core@0.12.0': 388 | resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} 389 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 390 | 391 | '@eslint/eslintrc@3.3.1': 392 | resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} 393 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 394 | 395 | '@eslint/js@9.23.0': 396 | resolution: {integrity: sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==} 397 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 398 | 399 | '@eslint/object-schema@2.1.6': 400 | resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} 401 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 402 | 403 | '@eslint/plugin-kit@0.2.7': 404 | resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==} 405 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 406 | 407 | '@humanfs/core@0.19.1': 408 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 409 | engines: {node: '>=18.18.0'} 410 | 411 | '@humanfs/node@0.16.6': 412 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} 413 | engines: {node: '>=18.18.0'} 414 | 415 | '@humanwhocodes/module-importer@1.0.1': 416 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 417 | engines: {node: '>=12.22'} 418 | 419 | '@humanwhocodes/retry@0.3.1': 420 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 421 | engines: {node: '>=18.18'} 422 | 423 | '@humanwhocodes/retry@0.4.2': 424 | resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} 425 | engines: {node: '>=18.18'} 426 | 427 | '@istanbuljs/load-nyc-config@1.1.0': 428 | resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} 429 | engines: {node: '>=8'} 430 | 431 | '@istanbuljs/schema@0.1.3': 432 | resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} 433 | engines: {node: '>=8'} 434 | 435 | '@jest/console@29.7.0': 436 | resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} 437 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 438 | 439 | '@jest/core@29.7.0': 440 | resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} 441 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 442 | peerDependencies: 443 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 444 | peerDependenciesMeta: 445 | node-notifier: 446 | optional: true 447 | 448 | '@jest/environment@29.7.0': 449 | resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} 450 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 451 | 452 | '@jest/expect-utils@29.7.0': 453 | resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} 454 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 455 | 456 | '@jest/expect@29.7.0': 457 | resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} 458 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 459 | 460 | '@jest/fake-timers@29.7.0': 461 | resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} 462 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 463 | 464 | '@jest/globals@29.7.0': 465 | resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} 466 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 467 | 468 | '@jest/reporters@29.7.0': 469 | resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} 470 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 471 | peerDependencies: 472 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 473 | peerDependenciesMeta: 474 | node-notifier: 475 | optional: true 476 | 477 | '@jest/schemas@29.6.3': 478 | resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} 479 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 480 | 481 | '@jest/source-map@29.6.3': 482 | resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} 483 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 484 | 485 | '@jest/test-result@29.7.0': 486 | resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} 487 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 488 | 489 | '@jest/test-sequencer@29.7.0': 490 | resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} 491 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 492 | 493 | '@jest/transform@29.7.0': 494 | resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} 495 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 496 | 497 | '@jest/types@29.6.3': 498 | resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} 499 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 500 | 501 | '@jridgewell/gen-mapping@0.3.8': 502 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 503 | engines: {node: '>=6.0.0'} 504 | 505 | '@jridgewell/resolve-uri@3.1.2': 506 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 507 | engines: {node: '>=6.0.0'} 508 | 509 | '@jridgewell/set-array@1.2.1': 510 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 511 | engines: {node: '>=6.0.0'} 512 | 513 | '@jridgewell/source-map@0.3.6': 514 | resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} 515 | 516 | '@jridgewell/sourcemap-codec@1.5.0': 517 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 518 | 519 | '@jridgewell/trace-mapping@0.3.25': 520 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 521 | 522 | '@jridgewell/trace-mapping@0.3.9': 523 | resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 524 | 525 | '@nodelib/fs.scandir@2.1.5': 526 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 527 | engines: {node: '>= 8'} 528 | 529 | '@nodelib/fs.stat@2.0.5': 530 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 531 | engines: {node: '>= 8'} 532 | 533 | '@nodelib/fs.walk@1.2.8': 534 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 535 | engines: {node: '>= 8'} 536 | 537 | '@sinclair/typebox@0.27.8': 538 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} 539 | 540 | '@sinonjs/commons@3.0.1': 541 | resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} 542 | 543 | '@sinonjs/fake-timers@10.3.0': 544 | resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} 545 | 546 | '@tsconfig/node10@1.0.11': 547 | resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} 548 | 549 | '@tsconfig/node12@1.0.11': 550 | resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} 551 | 552 | '@tsconfig/node14@1.0.3': 553 | resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} 554 | 555 | '@tsconfig/node16@1.0.4': 556 | resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} 557 | 558 | '@types/babel__core@7.20.5': 559 | resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 560 | 561 | '@types/babel__generator@7.6.8': 562 | resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} 563 | 564 | '@types/babel__template@7.4.4': 565 | resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 566 | 567 | '@types/babel__traverse@7.20.7': 568 | resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} 569 | 570 | '@types/eslint-scope@3.7.7': 571 | resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} 572 | 573 | '@types/eslint@9.6.1': 574 | resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} 575 | 576 | '@types/estree@1.0.7': 577 | resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} 578 | 579 | '@types/graceful-fs@4.1.9': 580 | resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} 581 | 582 | '@types/istanbul-lib-coverage@2.0.6': 583 | resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} 584 | 585 | '@types/istanbul-lib-report@3.0.3': 586 | resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} 587 | 588 | '@types/istanbul-reports@3.0.4': 589 | resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} 590 | 591 | '@types/jest@29.5.14': 592 | resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} 593 | 594 | '@types/json-schema@7.0.15': 595 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 596 | 597 | '@types/node@22.13.14': 598 | resolution: {integrity: sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==} 599 | 600 | '@types/stack-utils@2.0.3': 601 | resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} 602 | 603 | '@types/yargs-parser@21.0.3': 604 | resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} 605 | 606 | '@types/yargs@17.0.33': 607 | resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} 608 | 609 | '@typescript-eslint/eslint-plugin@8.28.0': 610 | resolution: {integrity: sha512-lvFK3TCGAHsItNdWZ/1FkvpzCxTHUVuFrdnOGLMa0GGCFIbCgQWVk3CzCGdA7kM3qGVc+dfW9tr0Z/sHnGDFyg==} 611 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 612 | peerDependencies: 613 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 614 | eslint: ^8.57.0 || ^9.0.0 615 | typescript: '>=4.8.4 <5.9.0' 616 | 617 | '@typescript-eslint/parser@8.28.0': 618 | resolution: {integrity: sha512-LPcw1yHD3ToaDEoljFEfQ9j2xShY367h7FZ1sq5NJT9I3yj4LHer1Xd1yRSOdYy9BpsrxU7R+eoDokChYM53lQ==} 619 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 620 | peerDependencies: 621 | eslint: ^8.57.0 || ^9.0.0 622 | typescript: '>=4.8.4 <5.9.0' 623 | 624 | '@typescript-eslint/scope-manager@8.28.0': 625 | resolution: {integrity: sha512-u2oITX3BJwzWCapoZ/pXw6BCOl8rJP4Ij/3wPoGvY8XwvXflOzd1kLrDUUUAIEdJSFh+ASwdTHqtan9xSg8buw==} 626 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 627 | 628 | '@typescript-eslint/type-utils@8.28.0': 629 | resolution: {integrity: sha512-oRoXu2v0Rsy/VoOGhtWrOKDiIehvI+YNrDk5Oqj40Mwm0Yt01FC/Q7nFqg088d3yAsR1ZcZFVfPCTTFCe/KPwg==} 630 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 631 | peerDependencies: 632 | eslint: ^8.57.0 || ^9.0.0 633 | typescript: '>=4.8.4 <5.9.0' 634 | 635 | '@typescript-eslint/types@8.28.0': 636 | resolution: {integrity: sha512-bn4WS1bkKEjx7HqiwG2JNB3YJdC1q6Ue7GyGlwPHyt0TnVq6TtD/hiOdTZt71sq0s7UzqBFXD8t8o2e63tXgwA==} 637 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 638 | 639 | '@typescript-eslint/typescript-estree@8.28.0': 640 | resolution: {integrity: sha512-H74nHEeBGeklctAVUvmDkxB1mk+PAZ9FiOMPFncdqeRBXxk1lWSYraHw8V12b7aa6Sg9HOBNbGdSHobBPuQSuA==} 641 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 642 | peerDependencies: 643 | typescript: '>=4.8.4 <5.9.0' 644 | 645 | '@typescript-eslint/utils@8.28.0': 646 | resolution: {integrity: sha512-OELa9hbTYciYITqgurT1u/SzpQVtDLmQMFzy/N8pQE+tefOyCWT79jHsav294aTqV1q1u+VzqDGbuujvRYaeSQ==} 647 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 648 | peerDependencies: 649 | eslint: ^8.57.0 || ^9.0.0 650 | typescript: '>=4.8.4 <5.9.0' 651 | 652 | '@typescript-eslint/visitor-keys@8.28.0': 653 | resolution: {integrity: sha512-hbn8SZ8w4u2pRwgQ1GlUrPKE+t2XvcCW5tTRF7j6SMYIuYG37XuzIW44JCZPa36evi0Oy2SnM664BlIaAuQcvg==} 654 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 655 | 656 | '@webassemblyjs/ast@1.14.1': 657 | resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} 658 | 659 | '@webassemblyjs/floating-point-hex-parser@1.13.2': 660 | resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} 661 | 662 | '@webassemblyjs/helper-api-error@1.13.2': 663 | resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} 664 | 665 | '@webassemblyjs/helper-buffer@1.14.1': 666 | resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} 667 | 668 | '@webassemblyjs/helper-numbers@1.13.2': 669 | resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} 670 | 671 | '@webassemblyjs/helper-wasm-bytecode@1.13.2': 672 | resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} 673 | 674 | '@webassemblyjs/helper-wasm-section@1.14.1': 675 | resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} 676 | 677 | '@webassemblyjs/ieee754@1.13.2': 678 | resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} 679 | 680 | '@webassemblyjs/leb128@1.13.2': 681 | resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} 682 | 683 | '@webassemblyjs/utf8@1.13.2': 684 | resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} 685 | 686 | '@webassemblyjs/wasm-edit@1.14.1': 687 | resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} 688 | 689 | '@webassemblyjs/wasm-gen@1.14.1': 690 | resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} 691 | 692 | '@webassemblyjs/wasm-opt@1.14.1': 693 | resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} 694 | 695 | '@webassemblyjs/wasm-parser@1.14.1': 696 | resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} 697 | 698 | '@webassemblyjs/wast-printer@1.14.1': 699 | resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} 700 | 701 | '@xtuc/ieee754@1.2.0': 702 | resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} 703 | 704 | '@xtuc/long@4.2.2': 705 | resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} 706 | 707 | acorn-jsx@5.3.2: 708 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 709 | peerDependencies: 710 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 711 | 712 | acorn-walk@8.3.4: 713 | resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} 714 | engines: {node: '>=0.4.0'} 715 | 716 | acorn@8.14.1: 717 | resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} 718 | engines: {node: '>=0.4.0'} 719 | hasBin: true 720 | 721 | ajv-formats@2.1.1: 722 | resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} 723 | peerDependencies: 724 | ajv: ^8.0.0 725 | peerDependenciesMeta: 726 | ajv: 727 | optional: true 728 | 729 | ajv-keywords@5.1.0: 730 | resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} 731 | peerDependencies: 732 | ajv: ^8.8.2 733 | 734 | ajv@6.12.6: 735 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 736 | 737 | ajv@8.17.1: 738 | resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} 739 | 740 | ansi-escapes@4.3.2: 741 | resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} 742 | engines: {node: '>=8'} 743 | 744 | ansi-regex@5.0.1: 745 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 746 | engines: {node: '>=8'} 747 | 748 | ansi-styles@4.3.0: 749 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 750 | engines: {node: '>=8'} 751 | 752 | ansi-styles@5.2.0: 753 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 754 | engines: {node: '>=10'} 755 | 756 | anymatch@3.1.3: 757 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 758 | engines: {node: '>= 8'} 759 | 760 | arg@4.1.3: 761 | resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} 762 | 763 | argparse@1.0.10: 764 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 765 | 766 | argparse@2.0.1: 767 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 768 | 769 | async@3.2.6: 770 | resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} 771 | 772 | babel-jest@29.7.0: 773 | resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} 774 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 775 | peerDependencies: 776 | '@babel/core': ^7.8.0 777 | 778 | babel-plugin-istanbul@6.1.1: 779 | resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} 780 | engines: {node: '>=8'} 781 | 782 | babel-plugin-jest-hoist@29.6.3: 783 | resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} 784 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 785 | 786 | babel-preset-current-node-syntax@1.1.0: 787 | resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} 788 | peerDependencies: 789 | '@babel/core': ^7.0.0 790 | 791 | babel-preset-jest@29.6.3: 792 | resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} 793 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 794 | peerDependencies: 795 | '@babel/core': ^7.0.0 796 | 797 | balanced-match@1.0.2: 798 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 799 | 800 | brace-expansion@1.1.11: 801 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 802 | 803 | brace-expansion@2.0.1: 804 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 805 | 806 | braces@3.0.3: 807 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 808 | engines: {node: '>=8'} 809 | 810 | browserslist@4.24.4: 811 | resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} 812 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 813 | hasBin: true 814 | 815 | bs-logger@0.2.6: 816 | resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} 817 | engines: {node: '>= 6'} 818 | 819 | bser@2.1.1: 820 | resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} 821 | 822 | buffer-from@1.1.2: 823 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 824 | 825 | callsites@3.1.0: 826 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 827 | engines: {node: '>=6'} 828 | 829 | camelcase@5.3.1: 830 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} 831 | engines: {node: '>=6'} 832 | 833 | camelcase@6.3.0: 834 | resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} 835 | engines: {node: '>=10'} 836 | 837 | caniuse-lite@1.0.30001707: 838 | resolution: {integrity: sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==} 839 | 840 | chalk@4.1.2: 841 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 842 | engines: {node: '>=10'} 843 | 844 | char-regex@1.0.2: 845 | resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} 846 | engines: {node: '>=10'} 847 | 848 | chrome-trace-event@1.0.4: 849 | resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} 850 | engines: {node: '>=6.0'} 851 | 852 | ci-info@3.9.0: 853 | resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} 854 | engines: {node: '>=8'} 855 | 856 | cjs-module-lexer@1.4.3: 857 | resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} 858 | 859 | cliui@8.0.1: 860 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 861 | engines: {node: '>=12'} 862 | 863 | co@4.6.0: 864 | resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} 865 | engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} 866 | 867 | collect-v8-coverage@1.0.2: 868 | resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} 869 | 870 | color-convert@2.0.1: 871 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 872 | engines: {node: '>=7.0.0'} 873 | 874 | color-name@1.1.4: 875 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 876 | 877 | commander@2.20.3: 878 | resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} 879 | 880 | concat-map@0.0.1: 881 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 882 | 883 | convert-source-map@2.0.0: 884 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 885 | 886 | create-jest@29.7.0: 887 | resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} 888 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 889 | hasBin: true 890 | 891 | create-require@1.1.1: 892 | resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} 893 | 894 | cross-spawn@7.0.6: 895 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 896 | engines: {node: '>= 8'} 897 | 898 | debug@4.4.0: 899 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 900 | engines: {node: '>=6.0'} 901 | peerDependencies: 902 | supports-color: '*' 903 | peerDependenciesMeta: 904 | supports-color: 905 | optional: true 906 | 907 | dedent@1.5.3: 908 | resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} 909 | peerDependencies: 910 | babel-plugin-macros: ^3.1.0 911 | peerDependenciesMeta: 912 | babel-plugin-macros: 913 | optional: true 914 | 915 | deep-is@0.1.4: 916 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 917 | 918 | deepmerge@4.3.1: 919 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 920 | engines: {node: '>=0.10.0'} 921 | 922 | detect-newline@3.1.0: 923 | resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} 924 | engines: {node: '>=8'} 925 | 926 | diff-sequences@29.6.3: 927 | resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} 928 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 929 | 930 | diff@4.0.2: 931 | resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} 932 | engines: {node: '>=0.3.1'} 933 | 934 | ejs@3.1.10: 935 | resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} 936 | engines: {node: '>=0.10.0'} 937 | hasBin: true 938 | 939 | electron-to-chromium@1.5.126: 940 | resolution: {integrity: sha512-AtH1uLcTC72LA4vfYcEJJkrMk/MY/X0ub8Hv7QGAePW2JkeUFHEL/QfS4J77R6M87Sss8O0OcqReSaN1bpyA+Q==} 941 | 942 | emittery@0.13.1: 943 | resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} 944 | engines: {node: '>=12'} 945 | 946 | emoji-regex@8.0.0: 947 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 948 | 949 | enhanced-resolve@5.18.1: 950 | resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} 951 | engines: {node: '>=10.13.0'} 952 | 953 | error-ex@1.3.2: 954 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 955 | 956 | es-module-lexer@1.6.0: 957 | resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} 958 | 959 | esbuild@0.25.1: 960 | resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==} 961 | engines: {node: '>=18'} 962 | hasBin: true 963 | 964 | escalade@3.2.0: 965 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 966 | engines: {node: '>=6'} 967 | 968 | escape-string-regexp@2.0.0: 969 | resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} 970 | engines: {node: '>=8'} 971 | 972 | escape-string-regexp@4.0.0: 973 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 974 | engines: {node: '>=10'} 975 | 976 | eslint-scope@5.1.1: 977 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} 978 | engines: {node: '>=8.0.0'} 979 | 980 | eslint-scope@8.3.0: 981 | resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} 982 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 983 | 984 | eslint-visitor-keys@3.4.3: 985 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 986 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 987 | 988 | eslint-visitor-keys@4.2.0: 989 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} 990 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 991 | 992 | eslint@9.23.0: 993 | resolution: {integrity: sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==} 994 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 995 | hasBin: true 996 | peerDependencies: 997 | jiti: '*' 998 | peerDependenciesMeta: 999 | jiti: 1000 | optional: true 1001 | 1002 | espree@10.3.0: 1003 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} 1004 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1005 | 1006 | esprima@4.0.1: 1007 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 1008 | engines: {node: '>=4'} 1009 | hasBin: true 1010 | 1011 | esquery@1.6.0: 1012 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 1013 | engines: {node: '>=0.10'} 1014 | 1015 | esrecurse@4.3.0: 1016 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1017 | engines: {node: '>=4.0'} 1018 | 1019 | estraverse@4.3.0: 1020 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 1021 | engines: {node: '>=4.0'} 1022 | 1023 | estraverse@5.3.0: 1024 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1025 | engines: {node: '>=4.0'} 1026 | 1027 | esutils@2.0.3: 1028 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1029 | engines: {node: '>=0.10.0'} 1030 | 1031 | events@3.3.0: 1032 | resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} 1033 | engines: {node: '>=0.8.x'} 1034 | 1035 | execa@5.1.1: 1036 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 1037 | engines: {node: '>=10'} 1038 | 1039 | exit@0.1.2: 1040 | resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} 1041 | engines: {node: '>= 0.8.0'} 1042 | 1043 | expect@29.7.0: 1044 | resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} 1045 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1046 | 1047 | fast-deep-equal@3.1.3: 1048 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1049 | 1050 | fast-glob@3.3.3: 1051 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 1052 | engines: {node: '>=8.6.0'} 1053 | 1054 | fast-json-stable-stringify@2.1.0: 1055 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1056 | 1057 | fast-levenshtein@2.0.6: 1058 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1059 | 1060 | fast-uri@3.0.6: 1061 | resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} 1062 | 1063 | fastq@1.19.1: 1064 | resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} 1065 | 1066 | fb-watchman@2.0.2: 1067 | resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} 1068 | 1069 | file-entry-cache@8.0.0: 1070 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 1071 | engines: {node: '>=16.0.0'} 1072 | 1073 | filelist@1.0.4: 1074 | resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} 1075 | 1076 | fill-range@7.1.1: 1077 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 1078 | engines: {node: '>=8'} 1079 | 1080 | find-up@4.1.0: 1081 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 1082 | engines: {node: '>=8'} 1083 | 1084 | find-up@5.0.0: 1085 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1086 | engines: {node: '>=10'} 1087 | 1088 | flat-cache@4.0.1: 1089 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 1090 | engines: {node: '>=16'} 1091 | 1092 | flatted@3.3.3: 1093 | resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 1094 | 1095 | fs.realpath@1.0.0: 1096 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1097 | 1098 | fsevents@2.3.3: 1099 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1100 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1101 | os: [darwin] 1102 | 1103 | function-bind@1.1.2: 1104 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 1105 | 1106 | gensync@1.0.0-beta.2: 1107 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 1108 | engines: {node: '>=6.9.0'} 1109 | 1110 | get-caller-file@2.0.5: 1111 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 1112 | engines: {node: 6.* || 8.* || >= 10.*} 1113 | 1114 | get-package-type@0.1.0: 1115 | resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} 1116 | engines: {node: '>=8.0.0'} 1117 | 1118 | get-stream@6.0.1: 1119 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 1120 | engines: {node: '>=10'} 1121 | 1122 | glob-parent@5.1.2: 1123 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1124 | engines: {node: '>= 6'} 1125 | 1126 | glob-parent@6.0.2: 1127 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1128 | engines: {node: '>=10.13.0'} 1129 | 1130 | glob-to-regexp@0.4.1: 1131 | resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} 1132 | 1133 | glob@7.2.3: 1134 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1135 | deprecated: Glob versions prior to v9 are no longer supported 1136 | 1137 | globals@11.12.0: 1138 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 1139 | engines: {node: '>=4'} 1140 | 1141 | globals@14.0.0: 1142 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 1143 | engines: {node: '>=18'} 1144 | 1145 | graceful-fs@4.2.11: 1146 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1147 | 1148 | graphemer@1.4.0: 1149 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1150 | 1151 | has-flag@4.0.0: 1152 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1153 | engines: {node: '>=8'} 1154 | 1155 | hasown@2.0.2: 1156 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 1157 | engines: {node: '>= 0.4'} 1158 | 1159 | html-escaper@2.0.2: 1160 | resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} 1161 | 1162 | human-signals@2.1.0: 1163 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 1164 | engines: {node: '>=10.17.0'} 1165 | 1166 | ignore@5.3.2: 1167 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 1168 | engines: {node: '>= 4'} 1169 | 1170 | import-fresh@3.3.1: 1171 | resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 1172 | engines: {node: '>=6'} 1173 | 1174 | import-local@3.2.0: 1175 | resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} 1176 | engines: {node: '>=8'} 1177 | hasBin: true 1178 | 1179 | imurmurhash@0.1.4: 1180 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1181 | engines: {node: '>=0.8.19'} 1182 | 1183 | inflight@1.0.6: 1184 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1185 | deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. 1186 | 1187 | inherits@2.0.4: 1188 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1189 | 1190 | is-arrayish@0.2.1: 1191 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 1192 | 1193 | is-core-module@2.16.1: 1194 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 1195 | engines: {node: '>= 0.4'} 1196 | 1197 | is-extglob@2.1.1: 1198 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1199 | engines: {node: '>=0.10.0'} 1200 | 1201 | is-fullwidth-code-point@3.0.0: 1202 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1203 | engines: {node: '>=8'} 1204 | 1205 | is-generator-fn@2.1.0: 1206 | resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} 1207 | engines: {node: '>=6'} 1208 | 1209 | is-glob@4.0.3: 1210 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1211 | engines: {node: '>=0.10.0'} 1212 | 1213 | is-number@7.0.0: 1214 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1215 | engines: {node: '>=0.12.0'} 1216 | 1217 | is-stream@2.0.1: 1218 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 1219 | engines: {node: '>=8'} 1220 | 1221 | isexe@2.0.0: 1222 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1223 | 1224 | istanbul-lib-coverage@3.2.2: 1225 | resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} 1226 | engines: {node: '>=8'} 1227 | 1228 | istanbul-lib-instrument@5.2.1: 1229 | resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} 1230 | engines: {node: '>=8'} 1231 | 1232 | istanbul-lib-instrument@6.0.3: 1233 | resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} 1234 | engines: {node: '>=10'} 1235 | 1236 | istanbul-lib-report@3.0.1: 1237 | resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} 1238 | engines: {node: '>=10'} 1239 | 1240 | istanbul-lib-source-maps@4.0.1: 1241 | resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} 1242 | engines: {node: '>=10'} 1243 | 1244 | istanbul-reports@3.1.7: 1245 | resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} 1246 | engines: {node: '>=8'} 1247 | 1248 | jake@10.9.2: 1249 | resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} 1250 | engines: {node: '>=10'} 1251 | hasBin: true 1252 | 1253 | jest-changed-files@29.7.0: 1254 | resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} 1255 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1256 | 1257 | jest-circus@29.7.0: 1258 | resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} 1259 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1260 | 1261 | jest-cli@29.7.0: 1262 | resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} 1263 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1264 | hasBin: true 1265 | peerDependencies: 1266 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 1267 | peerDependenciesMeta: 1268 | node-notifier: 1269 | optional: true 1270 | 1271 | jest-config@29.7.0: 1272 | resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} 1273 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1274 | peerDependencies: 1275 | '@types/node': '*' 1276 | ts-node: '>=9.0.0' 1277 | peerDependenciesMeta: 1278 | '@types/node': 1279 | optional: true 1280 | ts-node: 1281 | optional: true 1282 | 1283 | jest-diff@29.7.0: 1284 | resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} 1285 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1286 | 1287 | jest-docblock@29.7.0: 1288 | resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} 1289 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1290 | 1291 | jest-each@29.7.0: 1292 | resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} 1293 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1294 | 1295 | jest-environment-node@29.7.0: 1296 | resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} 1297 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1298 | 1299 | jest-get-type@29.6.3: 1300 | resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} 1301 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1302 | 1303 | jest-haste-map@29.7.0: 1304 | resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} 1305 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1306 | 1307 | jest-leak-detector@29.7.0: 1308 | resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} 1309 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1310 | 1311 | jest-matcher-utils@29.7.0: 1312 | resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} 1313 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1314 | 1315 | jest-message-util@29.7.0: 1316 | resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} 1317 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1318 | 1319 | jest-mock@29.7.0: 1320 | resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} 1321 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1322 | 1323 | jest-pnp-resolver@1.2.3: 1324 | resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} 1325 | engines: {node: '>=6'} 1326 | peerDependencies: 1327 | jest-resolve: '*' 1328 | peerDependenciesMeta: 1329 | jest-resolve: 1330 | optional: true 1331 | 1332 | jest-regex-util@29.6.3: 1333 | resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} 1334 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1335 | 1336 | jest-resolve-dependencies@29.7.0: 1337 | resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} 1338 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1339 | 1340 | jest-resolve@29.7.0: 1341 | resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} 1342 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1343 | 1344 | jest-runner@29.7.0: 1345 | resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} 1346 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1347 | 1348 | jest-runtime@29.7.0: 1349 | resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} 1350 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1351 | 1352 | jest-snapshot@29.7.0: 1353 | resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} 1354 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1355 | 1356 | jest-util@29.7.0: 1357 | resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} 1358 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1359 | 1360 | jest-validate@29.7.0: 1361 | resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} 1362 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1363 | 1364 | jest-watcher@29.7.0: 1365 | resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} 1366 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1367 | 1368 | jest-worker@27.5.1: 1369 | resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} 1370 | engines: {node: '>= 10.13.0'} 1371 | 1372 | jest-worker@29.7.0: 1373 | resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} 1374 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1375 | 1376 | jest@29.7.0: 1377 | resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} 1378 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1379 | hasBin: true 1380 | peerDependencies: 1381 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 1382 | peerDependenciesMeta: 1383 | node-notifier: 1384 | optional: true 1385 | 1386 | js-tokens@4.0.0: 1387 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1388 | 1389 | js-yaml@3.14.1: 1390 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 1391 | hasBin: true 1392 | 1393 | js-yaml@4.1.0: 1394 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1395 | hasBin: true 1396 | 1397 | jsesc@3.1.0: 1398 | resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} 1399 | engines: {node: '>=6'} 1400 | hasBin: true 1401 | 1402 | json-buffer@3.0.1: 1403 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1404 | 1405 | json-parse-even-better-errors@2.3.1: 1406 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1407 | 1408 | json-schema-traverse@0.4.1: 1409 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1410 | 1411 | json-schema-traverse@1.0.0: 1412 | resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} 1413 | 1414 | json-stable-stringify-without-jsonify@1.0.1: 1415 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1416 | 1417 | json5@2.2.3: 1418 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 1419 | engines: {node: '>=6'} 1420 | hasBin: true 1421 | 1422 | keyv@4.5.4: 1423 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1424 | 1425 | kleur@3.0.3: 1426 | resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} 1427 | engines: {node: '>=6'} 1428 | 1429 | leven@3.1.0: 1430 | resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} 1431 | engines: {node: '>=6'} 1432 | 1433 | levn@0.4.1: 1434 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1435 | engines: {node: '>= 0.8.0'} 1436 | 1437 | lines-and-columns@1.2.4: 1438 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1439 | 1440 | loader-runner@4.3.0: 1441 | resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} 1442 | engines: {node: '>=6.11.5'} 1443 | 1444 | locate-path@5.0.0: 1445 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1446 | engines: {node: '>=8'} 1447 | 1448 | locate-path@6.0.0: 1449 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1450 | engines: {node: '>=10'} 1451 | 1452 | lodash.memoize@4.1.2: 1453 | resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} 1454 | 1455 | lodash.merge@4.6.2: 1456 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1457 | 1458 | lru-cache@5.1.1: 1459 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 1460 | 1461 | make-dir@4.0.0: 1462 | resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} 1463 | engines: {node: '>=10'} 1464 | 1465 | make-error@1.3.6: 1466 | resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} 1467 | 1468 | makeerror@1.0.12: 1469 | resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} 1470 | 1471 | merge-stream@2.0.0: 1472 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1473 | 1474 | merge2@1.4.1: 1475 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1476 | engines: {node: '>= 8'} 1477 | 1478 | micromatch@4.0.8: 1479 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1480 | engines: {node: '>=8.6'} 1481 | 1482 | mime-db@1.52.0: 1483 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 1484 | engines: {node: '>= 0.6'} 1485 | 1486 | mime-types@2.1.35: 1487 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 1488 | engines: {node: '>= 0.6'} 1489 | 1490 | mimic-fn@2.1.0: 1491 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 1492 | engines: {node: '>=6'} 1493 | 1494 | minimatch@3.1.2: 1495 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1496 | 1497 | minimatch@5.1.6: 1498 | resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} 1499 | engines: {node: '>=10'} 1500 | 1501 | minimatch@9.0.5: 1502 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1503 | engines: {node: '>=16 || 14 >=14.17'} 1504 | 1505 | ms@2.1.3: 1506 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1507 | 1508 | natural-compare@1.4.0: 1509 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1510 | 1511 | neo-async@2.6.2: 1512 | resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} 1513 | 1514 | node-int64@0.4.0: 1515 | resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} 1516 | 1517 | node-releases@2.0.19: 1518 | resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} 1519 | 1520 | normalize-path@3.0.0: 1521 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1522 | engines: {node: '>=0.10.0'} 1523 | 1524 | npm-run-path@4.0.1: 1525 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 1526 | engines: {node: '>=8'} 1527 | 1528 | once@1.4.0: 1529 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1530 | 1531 | onetime@5.1.2: 1532 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 1533 | engines: {node: '>=6'} 1534 | 1535 | optionator@0.9.4: 1536 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1537 | engines: {node: '>= 0.8.0'} 1538 | 1539 | p-limit@2.3.0: 1540 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 1541 | engines: {node: '>=6'} 1542 | 1543 | p-limit@3.1.0: 1544 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1545 | engines: {node: '>=10'} 1546 | 1547 | p-locate@4.1.0: 1548 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 1549 | engines: {node: '>=8'} 1550 | 1551 | p-locate@5.0.0: 1552 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1553 | engines: {node: '>=10'} 1554 | 1555 | p-try@2.2.0: 1556 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 1557 | engines: {node: '>=6'} 1558 | 1559 | parent-module@1.0.1: 1560 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1561 | engines: {node: '>=6'} 1562 | 1563 | parse-json@5.2.0: 1564 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1565 | engines: {node: '>=8'} 1566 | 1567 | path-exists@4.0.0: 1568 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1569 | engines: {node: '>=8'} 1570 | 1571 | path-is-absolute@1.0.1: 1572 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1573 | engines: {node: '>=0.10.0'} 1574 | 1575 | path-key@3.1.1: 1576 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1577 | engines: {node: '>=8'} 1578 | 1579 | path-parse@1.0.7: 1580 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1581 | 1582 | picocolors@1.1.1: 1583 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1584 | 1585 | picomatch@2.3.1: 1586 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1587 | engines: {node: '>=8.6'} 1588 | 1589 | pirates@4.0.7: 1590 | resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} 1591 | engines: {node: '>= 6'} 1592 | 1593 | pkg-dir@4.2.0: 1594 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 1595 | engines: {node: '>=8'} 1596 | 1597 | prelude-ls@1.2.1: 1598 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1599 | engines: {node: '>= 0.8.0'} 1600 | 1601 | prettier@3.5.3: 1602 | resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} 1603 | engines: {node: '>=14'} 1604 | hasBin: true 1605 | 1606 | pretty-format@29.7.0: 1607 | resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} 1608 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1609 | 1610 | prompts@2.4.2: 1611 | resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} 1612 | engines: {node: '>= 6'} 1613 | 1614 | punycode@2.3.1: 1615 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1616 | engines: {node: '>=6'} 1617 | 1618 | pure-rand@6.1.0: 1619 | resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} 1620 | 1621 | queue-microtask@1.2.3: 1622 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1623 | 1624 | randombytes@2.1.0: 1625 | resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} 1626 | 1627 | react-is@18.3.1: 1628 | resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} 1629 | 1630 | require-directory@2.1.1: 1631 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 1632 | engines: {node: '>=0.10.0'} 1633 | 1634 | require-from-string@2.0.2: 1635 | resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} 1636 | engines: {node: '>=0.10.0'} 1637 | 1638 | resolve-cwd@3.0.0: 1639 | resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} 1640 | engines: {node: '>=8'} 1641 | 1642 | resolve-from@4.0.0: 1643 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1644 | engines: {node: '>=4'} 1645 | 1646 | resolve-from@5.0.0: 1647 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1648 | engines: {node: '>=8'} 1649 | 1650 | resolve.exports@2.0.3: 1651 | resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} 1652 | engines: {node: '>=10'} 1653 | 1654 | resolve@1.22.10: 1655 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} 1656 | engines: {node: '>= 0.4'} 1657 | hasBin: true 1658 | 1659 | reusify@1.1.0: 1660 | resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} 1661 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1662 | 1663 | run-parallel@1.2.0: 1664 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1665 | 1666 | safe-buffer@5.2.1: 1667 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1668 | 1669 | schema-utils@4.3.0: 1670 | resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==} 1671 | engines: {node: '>= 10.13.0'} 1672 | 1673 | semver@6.3.1: 1674 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1675 | hasBin: true 1676 | 1677 | semver@7.7.1: 1678 | resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} 1679 | engines: {node: '>=10'} 1680 | hasBin: true 1681 | 1682 | serialize-javascript@6.0.2: 1683 | resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} 1684 | 1685 | shebang-command@2.0.0: 1686 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1687 | engines: {node: '>=8'} 1688 | 1689 | shebang-regex@3.0.0: 1690 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1691 | engines: {node: '>=8'} 1692 | 1693 | signal-exit@3.0.7: 1694 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 1695 | 1696 | sisteransi@1.0.5: 1697 | resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} 1698 | 1699 | slash@3.0.0: 1700 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1701 | engines: {node: '>=8'} 1702 | 1703 | source-map-support@0.5.13: 1704 | resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} 1705 | 1706 | source-map-support@0.5.21: 1707 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 1708 | 1709 | source-map@0.6.1: 1710 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1711 | engines: {node: '>=0.10.0'} 1712 | 1713 | source-map@0.7.4: 1714 | resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} 1715 | engines: {node: '>= 8'} 1716 | 1717 | sprintf-js@1.0.3: 1718 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 1719 | 1720 | stack-utils@2.0.6: 1721 | resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} 1722 | engines: {node: '>=10'} 1723 | 1724 | string-length@4.0.2: 1725 | resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} 1726 | engines: {node: '>=10'} 1727 | 1728 | string-width@4.2.3: 1729 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1730 | engines: {node: '>=8'} 1731 | 1732 | strip-ansi@6.0.1: 1733 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1734 | engines: {node: '>=8'} 1735 | 1736 | strip-bom@4.0.0: 1737 | resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} 1738 | engines: {node: '>=8'} 1739 | 1740 | strip-final-newline@2.0.0: 1741 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 1742 | engines: {node: '>=6'} 1743 | 1744 | strip-json-comments@3.1.1: 1745 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1746 | engines: {node: '>=8'} 1747 | 1748 | supports-color@7.2.0: 1749 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1750 | engines: {node: '>=8'} 1751 | 1752 | supports-color@8.1.1: 1753 | resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} 1754 | engines: {node: '>=10'} 1755 | 1756 | supports-preserve-symlinks-flag@1.0.0: 1757 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1758 | engines: {node: '>= 0.4'} 1759 | 1760 | tapable@2.2.1: 1761 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} 1762 | engines: {node: '>=6'} 1763 | 1764 | terser-webpack-plugin@5.3.14: 1765 | resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} 1766 | engines: {node: '>= 10.13.0'} 1767 | peerDependencies: 1768 | '@swc/core': '*' 1769 | esbuild: '*' 1770 | uglify-js: '*' 1771 | webpack: ^5.1.0 1772 | peerDependenciesMeta: 1773 | '@swc/core': 1774 | optional: true 1775 | esbuild: 1776 | optional: true 1777 | uglify-js: 1778 | optional: true 1779 | 1780 | terser@5.39.0: 1781 | resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==} 1782 | engines: {node: '>=10'} 1783 | hasBin: true 1784 | 1785 | test-exclude@6.0.0: 1786 | resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} 1787 | engines: {node: '>=8'} 1788 | 1789 | tmpl@1.0.5: 1790 | resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} 1791 | 1792 | to-regex-range@5.0.1: 1793 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1794 | engines: {node: '>=8.0'} 1795 | 1796 | ts-api-utils@2.1.0: 1797 | resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} 1798 | engines: {node: '>=18.12'} 1799 | peerDependencies: 1800 | typescript: '>=4.8.4' 1801 | 1802 | ts-jest@29.3.0: 1803 | resolution: {integrity: sha512-4bfGBX7Gd1Aqz3SyeDS9O276wEU/BInZxskPrbhZLyv+c1wskDCqDFMJQJLWrIr/fKoAH4GE5dKUlrdyvo+39A==} 1804 | engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} 1805 | hasBin: true 1806 | peerDependencies: 1807 | '@babel/core': '>=7.0.0-beta.0 <8' 1808 | '@jest/transform': ^29.0.0 1809 | '@jest/types': ^29.0.0 1810 | babel-jest: ^29.0.0 1811 | esbuild: '*' 1812 | jest: ^29.0.0 1813 | typescript: '>=4.3 <6' 1814 | peerDependenciesMeta: 1815 | '@babel/core': 1816 | optional: true 1817 | '@jest/transform': 1818 | optional: true 1819 | '@jest/types': 1820 | optional: true 1821 | babel-jest: 1822 | optional: true 1823 | esbuild: 1824 | optional: true 1825 | 1826 | ts-loader@9.5.2: 1827 | resolution: {integrity: sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==} 1828 | engines: {node: '>=12.0.0'} 1829 | peerDependencies: 1830 | typescript: '*' 1831 | webpack: ^5.0.0 1832 | 1833 | ts-node@10.9.2: 1834 | resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} 1835 | hasBin: true 1836 | peerDependencies: 1837 | '@swc/core': '>=1.2.50' 1838 | '@swc/wasm': '>=1.2.50' 1839 | '@types/node': '*' 1840 | typescript: '>=2.7' 1841 | peerDependenciesMeta: 1842 | '@swc/core': 1843 | optional: true 1844 | '@swc/wasm': 1845 | optional: true 1846 | 1847 | type-check@0.4.0: 1848 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1849 | engines: {node: '>= 0.8.0'} 1850 | 1851 | type-detect@4.0.8: 1852 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 1853 | engines: {node: '>=4'} 1854 | 1855 | type-fest@0.21.3: 1856 | resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} 1857 | engines: {node: '>=10'} 1858 | 1859 | type-fest@4.38.0: 1860 | resolution: {integrity: sha512-2dBz5D5ycHIoliLYLi0Q2V7KRaDlH0uWIvmk7TYlAg5slqwiPv1ezJdZm1QEM0xgk29oYWMCbIG7E6gHpvChlg==} 1861 | engines: {node: '>=16'} 1862 | 1863 | typescript-eslint@8.28.0: 1864 | resolution: {integrity: sha512-jfZtxJoHm59bvoCMYCe2BM0/baMswRhMmYhy+w6VfcyHrjxZ0OJe0tGasydCpIpA+A/WIJhTyZfb3EtwNC/kHQ==} 1865 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1866 | peerDependencies: 1867 | eslint: ^8.57.0 || ^9.0.0 1868 | typescript: '>=4.8.4 <5.9.0' 1869 | 1870 | typescript@5.8.2: 1871 | resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} 1872 | engines: {node: '>=14.17'} 1873 | hasBin: true 1874 | 1875 | undici-types@6.20.0: 1876 | resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} 1877 | 1878 | update-browserslist-db@1.1.3: 1879 | resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} 1880 | hasBin: true 1881 | peerDependencies: 1882 | browserslist: '>= 4.21.0' 1883 | 1884 | uri-js@4.4.1: 1885 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1886 | 1887 | v8-compile-cache-lib@3.0.1: 1888 | resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} 1889 | 1890 | v8-to-istanbul@9.3.0: 1891 | resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} 1892 | engines: {node: '>=10.12.0'} 1893 | 1894 | walker@1.0.8: 1895 | resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} 1896 | 1897 | watchpack@2.4.2: 1898 | resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} 1899 | engines: {node: '>=10.13.0'} 1900 | 1901 | webpack-sources@3.2.3: 1902 | resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} 1903 | engines: {node: '>=10.13.0'} 1904 | 1905 | webpack@5.98.0: 1906 | resolution: {integrity: sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==} 1907 | engines: {node: '>=10.13.0'} 1908 | hasBin: true 1909 | peerDependencies: 1910 | webpack-cli: '*' 1911 | peerDependenciesMeta: 1912 | webpack-cli: 1913 | optional: true 1914 | 1915 | which@2.0.2: 1916 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1917 | engines: {node: '>= 8'} 1918 | hasBin: true 1919 | 1920 | word-wrap@1.2.5: 1921 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1922 | engines: {node: '>=0.10.0'} 1923 | 1924 | wrap-ansi@7.0.0: 1925 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1926 | engines: {node: '>=10'} 1927 | 1928 | wrappy@1.0.2: 1929 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1930 | 1931 | write-file-atomic@4.0.2: 1932 | resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} 1933 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 1934 | 1935 | y18n@5.0.8: 1936 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 1937 | engines: {node: '>=10'} 1938 | 1939 | yallist@3.1.1: 1940 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 1941 | 1942 | yargs-parser@21.1.1: 1943 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 1944 | engines: {node: '>=12'} 1945 | 1946 | yargs@17.7.2: 1947 | resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 1948 | engines: {node: '>=12'} 1949 | 1950 | yn@3.1.1: 1951 | resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} 1952 | engines: {node: '>=6'} 1953 | 1954 | yocto-queue@0.1.0: 1955 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1956 | engines: {node: '>=10'} 1957 | 1958 | snapshots: 1959 | 1960 | '@ampproject/remapping@2.3.0': 1961 | dependencies: 1962 | '@jridgewell/gen-mapping': 0.3.8 1963 | '@jridgewell/trace-mapping': 0.3.25 1964 | 1965 | '@babel/code-frame@7.26.2': 1966 | dependencies: 1967 | '@babel/helper-validator-identifier': 7.25.9 1968 | js-tokens: 4.0.0 1969 | picocolors: 1.1.1 1970 | 1971 | '@babel/compat-data@7.26.8': {} 1972 | 1973 | '@babel/core@7.26.10': 1974 | dependencies: 1975 | '@ampproject/remapping': 2.3.0 1976 | '@babel/code-frame': 7.26.2 1977 | '@babel/generator': 7.27.0 1978 | '@babel/helper-compilation-targets': 7.27.0 1979 | '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) 1980 | '@babel/helpers': 7.27.0 1981 | '@babel/parser': 7.27.0 1982 | '@babel/template': 7.27.0 1983 | '@babel/traverse': 7.27.0 1984 | '@babel/types': 7.27.0 1985 | convert-source-map: 2.0.0 1986 | debug: 4.4.0 1987 | gensync: 1.0.0-beta.2 1988 | json5: 2.2.3 1989 | semver: 6.3.1 1990 | transitivePeerDependencies: 1991 | - supports-color 1992 | 1993 | '@babel/generator@7.27.0': 1994 | dependencies: 1995 | '@babel/parser': 7.27.0 1996 | '@babel/types': 7.27.0 1997 | '@jridgewell/gen-mapping': 0.3.8 1998 | '@jridgewell/trace-mapping': 0.3.25 1999 | jsesc: 3.1.0 2000 | 2001 | '@babel/helper-compilation-targets@7.27.0': 2002 | dependencies: 2003 | '@babel/compat-data': 7.26.8 2004 | '@babel/helper-validator-option': 7.25.9 2005 | browserslist: 4.24.4 2006 | lru-cache: 5.1.1 2007 | semver: 6.3.1 2008 | 2009 | '@babel/helper-module-imports@7.25.9': 2010 | dependencies: 2011 | '@babel/traverse': 7.27.0 2012 | '@babel/types': 7.27.0 2013 | transitivePeerDependencies: 2014 | - supports-color 2015 | 2016 | '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)': 2017 | dependencies: 2018 | '@babel/core': 7.26.10 2019 | '@babel/helper-module-imports': 7.25.9 2020 | '@babel/helper-validator-identifier': 7.25.9 2021 | '@babel/traverse': 7.27.0 2022 | transitivePeerDependencies: 2023 | - supports-color 2024 | 2025 | '@babel/helper-plugin-utils@7.26.5': {} 2026 | 2027 | '@babel/helper-string-parser@7.25.9': {} 2028 | 2029 | '@babel/helper-validator-identifier@7.25.9': {} 2030 | 2031 | '@babel/helper-validator-option@7.25.9': {} 2032 | 2033 | '@babel/helpers@7.27.0': 2034 | dependencies: 2035 | '@babel/template': 7.27.0 2036 | '@babel/types': 7.27.0 2037 | 2038 | '@babel/parser@7.27.0': 2039 | dependencies: 2040 | '@babel/types': 7.27.0 2041 | 2042 | '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.10)': 2043 | dependencies: 2044 | '@babel/core': 7.26.10 2045 | '@babel/helper-plugin-utils': 7.26.5 2046 | 2047 | '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.10)': 2048 | dependencies: 2049 | '@babel/core': 7.26.10 2050 | '@babel/helper-plugin-utils': 7.26.5 2051 | 2052 | '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.10)': 2053 | dependencies: 2054 | '@babel/core': 7.26.10 2055 | '@babel/helper-plugin-utils': 7.26.5 2056 | 2057 | '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.10)': 2058 | dependencies: 2059 | '@babel/core': 7.26.10 2060 | '@babel/helper-plugin-utils': 7.26.5 2061 | 2062 | '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.10)': 2063 | dependencies: 2064 | '@babel/core': 7.26.10 2065 | '@babel/helper-plugin-utils': 7.26.5 2066 | 2067 | '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.10)': 2068 | dependencies: 2069 | '@babel/core': 7.26.10 2070 | '@babel/helper-plugin-utils': 7.26.5 2071 | 2072 | '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.10)': 2073 | dependencies: 2074 | '@babel/core': 7.26.10 2075 | '@babel/helper-plugin-utils': 7.26.5 2076 | 2077 | '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.10)': 2078 | dependencies: 2079 | '@babel/core': 7.26.10 2080 | '@babel/helper-plugin-utils': 7.26.5 2081 | 2082 | '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.10)': 2083 | dependencies: 2084 | '@babel/core': 7.26.10 2085 | '@babel/helper-plugin-utils': 7.26.5 2086 | 2087 | '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.10)': 2088 | dependencies: 2089 | '@babel/core': 7.26.10 2090 | '@babel/helper-plugin-utils': 7.26.5 2091 | 2092 | '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.10)': 2093 | dependencies: 2094 | '@babel/core': 7.26.10 2095 | '@babel/helper-plugin-utils': 7.26.5 2096 | 2097 | '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.10)': 2098 | dependencies: 2099 | '@babel/core': 7.26.10 2100 | '@babel/helper-plugin-utils': 7.26.5 2101 | 2102 | '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.10)': 2103 | dependencies: 2104 | '@babel/core': 7.26.10 2105 | '@babel/helper-plugin-utils': 7.26.5 2106 | 2107 | '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.10)': 2108 | dependencies: 2109 | '@babel/core': 7.26.10 2110 | '@babel/helper-plugin-utils': 7.26.5 2111 | 2112 | '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.10)': 2113 | dependencies: 2114 | '@babel/core': 7.26.10 2115 | '@babel/helper-plugin-utils': 7.26.5 2116 | 2117 | '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.10)': 2118 | dependencies: 2119 | '@babel/core': 7.26.10 2120 | '@babel/helper-plugin-utils': 7.26.5 2121 | 2122 | '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.10)': 2123 | dependencies: 2124 | '@babel/core': 7.26.10 2125 | '@babel/helper-plugin-utils': 7.26.5 2126 | 2127 | '@babel/template@7.27.0': 2128 | dependencies: 2129 | '@babel/code-frame': 7.26.2 2130 | '@babel/parser': 7.27.0 2131 | '@babel/types': 7.27.0 2132 | 2133 | '@babel/traverse@7.27.0': 2134 | dependencies: 2135 | '@babel/code-frame': 7.26.2 2136 | '@babel/generator': 7.27.0 2137 | '@babel/parser': 7.27.0 2138 | '@babel/template': 7.27.0 2139 | '@babel/types': 7.27.0 2140 | debug: 4.4.0 2141 | globals: 11.12.0 2142 | transitivePeerDependencies: 2143 | - supports-color 2144 | 2145 | '@babel/types@7.27.0': 2146 | dependencies: 2147 | '@babel/helper-string-parser': 7.25.9 2148 | '@babel/helper-validator-identifier': 7.25.9 2149 | 2150 | '@bcoe/v8-coverage@0.2.3': {} 2151 | 2152 | '@cspotcode/source-map-support@0.8.1': 2153 | dependencies: 2154 | '@jridgewell/trace-mapping': 0.3.9 2155 | 2156 | '@esbuild/aix-ppc64@0.25.1': 2157 | optional: true 2158 | 2159 | '@esbuild/android-arm64@0.25.1': 2160 | optional: true 2161 | 2162 | '@esbuild/android-arm@0.25.1': 2163 | optional: true 2164 | 2165 | '@esbuild/android-x64@0.25.1': 2166 | optional: true 2167 | 2168 | '@esbuild/darwin-arm64@0.25.1': 2169 | optional: true 2170 | 2171 | '@esbuild/darwin-x64@0.25.1': 2172 | optional: true 2173 | 2174 | '@esbuild/freebsd-arm64@0.25.1': 2175 | optional: true 2176 | 2177 | '@esbuild/freebsd-x64@0.25.1': 2178 | optional: true 2179 | 2180 | '@esbuild/linux-arm64@0.25.1': 2181 | optional: true 2182 | 2183 | '@esbuild/linux-arm@0.25.1': 2184 | optional: true 2185 | 2186 | '@esbuild/linux-ia32@0.25.1': 2187 | optional: true 2188 | 2189 | '@esbuild/linux-loong64@0.25.1': 2190 | optional: true 2191 | 2192 | '@esbuild/linux-mips64el@0.25.1': 2193 | optional: true 2194 | 2195 | '@esbuild/linux-ppc64@0.25.1': 2196 | optional: true 2197 | 2198 | '@esbuild/linux-riscv64@0.25.1': 2199 | optional: true 2200 | 2201 | '@esbuild/linux-s390x@0.25.1': 2202 | optional: true 2203 | 2204 | '@esbuild/linux-x64@0.25.1': 2205 | optional: true 2206 | 2207 | '@esbuild/netbsd-arm64@0.25.1': 2208 | optional: true 2209 | 2210 | '@esbuild/netbsd-x64@0.25.1': 2211 | optional: true 2212 | 2213 | '@esbuild/openbsd-arm64@0.25.1': 2214 | optional: true 2215 | 2216 | '@esbuild/openbsd-x64@0.25.1': 2217 | optional: true 2218 | 2219 | '@esbuild/sunos-x64@0.25.1': 2220 | optional: true 2221 | 2222 | '@esbuild/win32-arm64@0.25.1': 2223 | optional: true 2224 | 2225 | '@esbuild/win32-ia32@0.25.1': 2226 | optional: true 2227 | 2228 | '@esbuild/win32-x64@0.25.1': 2229 | optional: true 2230 | 2231 | '@eslint-community/eslint-utils@4.5.1(eslint@9.23.0)': 2232 | dependencies: 2233 | eslint: 9.23.0 2234 | eslint-visitor-keys: 3.4.3 2235 | 2236 | '@eslint-community/regexpp@4.12.1': {} 2237 | 2238 | '@eslint/config-array@0.19.2': 2239 | dependencies: 2240 | '@eslint/object-schema': 2.1.6 2241 | debug: 4.4.0 2242 | minimatch: 3.1.2 2243 | transitivePeerDependencies: 2244 | - supports-color 2245 | 2246 | '@eslint/config-helpers@0.2.0': {} 2247 | 2248 | '@eslint/core@0.12.0': 2249 | dependencies: 2250 | '@types/json-schema': 7.0.15 2251 | 2252 | '@eslint/eslintrc@3.3.1': 2253 | dependencies: 2254 | ajv: 6.12.6 2255 | debug: 4.4.0 2256 | espree: 10.3.0 2257 | globals: 14.0.0 2258 | ignore: 5.3.2 2259 | import-fresh: 3.3.1 2260 | js-yaml: 4.1.0 2261 | minimatch: 3.1.2 2262 | strip-json-comments: 3.1.1 2263 | transitivePeerDependencies: 2264 | - supports-color 2265 | 2266 | '@eslint/js@9.23.0': {} 2267 | 2268 | '@eslint/object-schema@2.1.6': {} 2269 | 2270 | '@eslint/plugin-kit@0.2.7': 2271 | dependencies: 2272 | '@eslint/core': 0.12.0 2273 | levn: 0.4.1 2274 | 2275 | '@humanfs/core@0.19.1': {} 2276 | 2277 | '@humanfs/node@0.16.6': 2278 | dependencies: 2279 | '@humanfs/core': 0.19.1 2280 | '@humanwhocodes/retry': 0.3.1 2281 | 2282 | '@humanwhocodes/module-importer@1.0.1': {} 2283 | 2284 | '@humanwhocodes/retry@0.3.1': {} 2285 | 2286 | '@humanwhocodes/retry@0.4.2': {} 2287 | 2288 | '@istanbuljs/load-nyc-config@1.1.0': 2289 | dependencies: 2290 | camelcase: 5.3.1 2291 | find-up: 4.1.0 2292 | get-package-type: 0.1.0 2293 | js-yaml: 3.14.1 2294 | resolve-from: 5.0.0 2295 | 2296 | '@istanbuljs/schema@0.1.3': {} 2297 | 2298 | '@jest/console@29.7.0': 2299 | dependencies: 2300 | '@jest/types': 29.6.3 2301 | '@types/node': 22.13.14 2302 | chalk: 4.1.2 2303 | jest-message-util: 29.7.0 2304 | jest-util: 29.7.0 2305 | slash: 3.0.0 2306 | 2307 | '@jest/core@29.7.0(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2))': 2308 | dependencies: 2309 | '@jest/console': 29.7.0 2310 | '@jest/reporters': 29.7.0 2311 | '@jest/test-result': 29.7.0 2312 | '@jest/transform': 29.7.0 2313 | '@jest/types': 29.6.3 2314 | '@types/node': 22.13.14 2315 | ansi-escapes: 4.3.2 2316 | chalk: 4.1.2 2317 | ci-info: 3.9.0 2318 | exit: 0.1.2 2319 | graceful-fs: 4.2.11 2320 | jest-changed-files: 29.7.0 2321 | jest-config: 29.7.0(@types/node@22.13.14)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)) 2322 | jest-haste-map: 29.7.0 2323 | jest-message-util: 29.7.0 2324 | jest-regex-util: 29.6.3 2325 | jest-resolve: 29.7.0 2326 | jest-resolve-dependencies: 29.7.0 2327 | jest-runner: 29.7.0 2328 | jest-runtime: 29.7.0 2329 | jest-snapshot: 29.7.0 2330 | jest-util: 29.7.0 2331 | jest-validate: 29.7.0 2332 | jest-watcher: 29.7.0 2333 | micromatch: 4.0.8 2334 | pretty-format: 29.7.0 2335 | slash: 3.0.0 2336 | strip-ansi: 6.0.1 2337 | transitivePeerDependencies: 2338 | - babel-plugin-macros 2339 | - supports-color 2340 | - ts-node 2341 | 2342 | '@jest/environment@29.7.0': 2343 | dependencies: 2344 | '@jest/fake-timers': 29.7.0 2345 | '@jest/types': 29.6.3 2346 | '@types/node': 22.13.14 2347 | jest-mock: 29.7.0 2348 | 2349 | '@jest/expect-utils@29.7.0': 2350 | dependencies: 2351 | jest-get-type: 29.6.3 2352 | 2353 | '@jest/expect@29.7.0': 2354 | dependencies: 2355 | expect: 29.7.0 2356 | jest-snapshot: 29.7.0 2357 | transitivePeerDependencies: 2358 | - supports-color 2359 | 2360 | '@jest/fake-timers@29.7.0': 2361 | dependencies: 2362 | '@jest/types': 29.6.3 2363 | '@sinonjs/fake-timers': 10.3.0 2364 | '@types/node': 22.13.14 2365 | jest-message-util: 29.7.0 2366 | jest-mock: 29.7.0 2367 | jest-util: 29.7.0 2368 | 2369 | '@jest/globals@29.7.0': 2370 | dependencies: 2371 | '@jest/environment': 29.7.0 2372 | '@jest/expect': 29.7.0 2373 | '@jest/types': 29.6.3 2374 | jest-mock: 29.7.0 2375 | transitivePeerDependencies: 2376 | - supports-color 2377 | 2378 | '@jest/reporters@29.7.0': 2379 | dependencies: 2380 | '@bcoe/v8-coverage': 0.2.3 2381 | '@jest/console': 29.7.0 2382 | '@jest/test-result': 29.7.0 2383 | '@jest/transform': 29.7.0 2384 | '@jest/types': 29.6.3 2385 | '@jridgewell/trace-mapping': 0.3.25 2386 | '@types/node': 22.13.14 2387 | chalk: 4.1.2 2388 | collect-v8-coverage: 1.0.2 2389 | exit: 0.1.2 2390 | glob: 7.2.3 2391 | graceful-fs: 4.2.11 2392 | istanbul-lib-coverage: 3.2.2 2393 | istanbul-lib-instrument: 6.0.3 2394 | istanbul-lib-report: 3.0.1 2395 | istanbul-lib-source-maps: 4.0.1 2396 | istanbul-reports: 3.1.7 2397 | jest-message-util: 29.7.0 2398 | jest-util: 29.7.0 2399 | jest-worker: 29.7.0 2400 | slash: 3.0.0 2401 | string-length: 4.0.2 2402 | strip-ansi: 6.0.1 2403 | v8-to-istanbul: 9.3.0 2404 | transitivePeerDependencies: 2405 | - supports-color 2406 | 2407 | '@jest/schemas@29.6.3': 2408 | dependencies: 2409 | '@sinclair/typebox': 0.27.8 2410 | 2411 | '@jest/source-map@29.6.3': 2412 | dependencies: 2413 | '@jridgewell/trace-mapping': 0.3.25 2414 | callsites: 3.1.0 2415 | graceful-fs: 4.2.11 2416 | 2417 | '@jest/test-result@29.7.0': 2418 | dependencies: 2419 | '@jest/console': 29.7.0 2420 | '@jest/types': 29.6.3 2421 | '@types/istanbul-lib-coverage': 2.0.6 2422 | collect-v8-coverage: 1.0.2 2423 | 2424 | '@jest/test-sequencer@29.7.0': 2425 | dependencies: 2426 | '@jest/test-result': 29.7.0 2427 | graceful-fs: 4.2.11 2428 | jest-haste-map: 29.7.0 2429 | slash: 3.0.0 2430 | 2431 | '@jest/transform@29.7.0': 2432 | dependencies: 2433 | '@babel/core': 7.26.10 2434 | '@jest/types': 29.6.3 2435 | '@jridgewell/trace-mapping': 0.3.25 2436 | babel-plugin-istanbul: 6.1.1 2437 | chalk: 4.1.2 2438 | convert-source-map: 2.0.0 2439 | fast-json-stable-stringify: 2.1.0 2440 | graceful-fs: 4.2.11 2441 | jest-haste-map: 29.7.0 2442 | jest-regex-util: 29.6.3 2443 | jest-util: 29.7.0 2444 | micromatch: 4.0.8 2445 | pirates: 4.0.7 2446 | slash: 3.0.0 2447 | write-file-atomic: 4.0.2 2448 | transitivePeerDependencies: 2449 | - supports-color 2450 | 2451 | '@jest/types@29.6.3': 2452 | dependencies: 2453 | '@jest/schemas': 29.6.3 2454 | '@types/istanbul-lib-coverage': 2.0.6 2455 | '@types/istanbul-reports': 3.0.4 2456 | '@types/node': 22.13.14 2457 | '@types/yargs': 17.0.33 2458 | chalk: 4.1.2 2459 | 2460 | '@jridgewell/gen-mapping@0.3.8': 2461 | dependencies: 2462 | '@jridgewell/set-array': 1.2.1 2463 | '@jridgewell/sourcemap-codec': 1.5.0 2464 | '@jridgewell/trace-mapping': 0.3.25 2465 | 2466 | '@jridgewell/resolve-uri@3.1.2': {} 2467 | 2468 | '@jridgewell/set-array@1.2.1': {} 2469 | 2470 | '@jridgewell/source-map@0.3.6': 2471 | dependencies: 2472 | '@jridgewell/gen-mapping': 0.3.8 2473 | '@jridgewell/trace-mapping': 0.3.25 2474 | 2475 | '@jridgewell/sourcemap-codec@1.5.0': {} 2476 | 2477 | '@jridgewell/trace-mapping@0.3.25': 2478 | dependencies: 2479 | '@jridgewell/resolve-uri': 3.1.2 2480 | '@jridgewell/sourcemap-codec': 1.5.0 2481 | 2482 | '@jridgewell/trace-mapping@0.3.9': 2483 | dependencies: 2484 | '@jridgewell/resolve-uri': 3.1.2 2485 | '@jridgewell/sourcemap-codec': 1.5.0 2486 | 2487 | '@nodelib/fs.scandir@2.1.5': 2488 | dependencies: 2489 | '@nodelib/fs.stat': 2.0.5 2490 | run-parallel: 1.2.0 2491 | 2492 | '@nodelib/fs.stat@2.0.5': {} 2493 | 2494 | '@nodelib/fs.walk@1.2.8': 2495 | dependencies: 2496 | '@nodelib/fs.scandir': 2.1.5 2497 | fastq: 1.19.1 2498 | 2499 | '@sinclair/typebox@0.27.8': {} 2500 | 2501 | '@sinonjs/commons@3.0.1': 2502 | dependencies: 2503 | type-detect: 4.0.8 2504 | 2505 | '@sinonjs/fake-timers@10.3.0': 2506 | dependencies: 2507 | '@sinonjs/commons': 3.0.1 2508 | 2509 | '@tsconfig/node10@1.0.11': {} 2510 | 2511 | '@tsconfig/node12@1.0.11': {} 2512 | 2513 | '@tsconfig/node14@1.0.3': {} 2514 | 2515 | '@tsconfig/node16@1.0.4': {} 2516 | 2517 | '@types/babel__core@7.20.5': 2518 | dependencies: 2519 | '@babel/parser': 7.27.0 2520 | '@babel/types': 7.27.0 2521 | '@types/babel__generator': 7.6.8 2522 | '@types/babel__template': 7.4.4 2523 | '@types/babel__traverse': 7.20.7 2524 | 2525 | '@types/babel__generator@7.6.8': 2526 | dependencies: 2527 | '@babel/types': 7.27.0 2528 | 2529 | '@types/babel__template@7.4.4': 2530 | dependencies: 2531 | '@babel/parser': 7.27.0 2532 | '@babel/types': 7.27.0 2533 | 2534 | '@types/babel__traverse@7.20.7': 2535 | dependencies: 2536 | '@babel/types': 7.27.0 2537 | 2538 | '@types/eslint-scope@3.7.7': 2539 | dependencies: 2540 | '@types/eslint': 9.6.1 2541 | '@types/estree': 1.0.7 2542 | 2543 | '@types/eslint@9.6.1': 2544 | dependencies: 2545 | '@types/estree': 1.0.7 2546 | '@types/json-schema': 7.0.15 2547 | 2548 | '@types/estree@1.0.7': {} 2549 | 2550 | '@types/graceful-fs@4.1.9': 2551 | dependencies: 2552 | '@types/node': 22.13.14 2553 | 2554 | '@types/istanbul-lib-coverage@2.0.6': {} 2555 | 2556 | '@types/istanbul-lib-report@3.0.3': 2557 | dependencies: 2558 | '@types/istanbul-lib-coverage': 2.0.6 2559 | 2560 | '@types/istanbul-reports@3.0.4': 2561 | dependencies: 2562 | '@types/istanbul-lib-report': 3.0.3 2563 | 2564 | '@types/jest@29.5.14': 2565 | dependencies: 2566 | expect: 29.7.0 2567 | pretty-format: 29.7.0 2568 | 2569 | '@types/json-schema@7.0.15': {} 2570 | 2571 | '@types/node@22.13.14': 2572 | dependencies: 2573 | undici-types: 6.20.0 2574 | 2575 | '@types/stack-utils@2.0.3': {} 2576 | 2577 | '@types/yargs-parser@21.0.3': {} 2578 | 2579 | '@types/yargs@17.0.33': 2580 | dependencies: 2581 | '@types/yargs-parser': 21.0.3 2582 | 2583 | '@typescript-eslint/eslint-plugin@8.28.0(@typescript-eslint/parser@8.28.0(eslint@9.23.0)(typescript@5.8.2))(eslint@9.23.0)(typescript@5.8.2)': 2584 | dependencies: 2585 | '@eslint-community/regexpp': 4.12.1 2586 | '@typescript-eslint/parser': 8.28.0(eslint@9.23.0)(typescript@5.8.2) 2587 | '@typescript-eslint/scope-manager': 8.28.0 2588 | '@typescript-eslint/type-utils': 8.28.0(eslint@9.23.0)(typescript@5.8.2) 2589 | '@typescript-eslint/utils': 8.28.0(eslint@9.23.0)(typescript@5.8.2) 2590 | '@typescript-eslint/visitor-keys': 8.28.0 2591 | eslint: 9.23.0 2592 | graphemer: 1.4.0 2593 | ignore: 5.3.2 2594 | natural-compare: 1.4.0 2595 | ts-api-utils: 2.1.0(typescript@5.8.2) 2596 | typescript: 5.8.2 2597 | transitivePeerDependencies: 2598 | - supports-color 2599 | 2600 | '@typescript-eslint/parser@8.28.0(eslint@9.23.0)(typescript@5.8.2)': 2601 | dependencies: 2602 | '@typescript-eslint/scope-manager': 8.28.0 2603 | '@typescript-eslint/types': 8.28.0 2604 | '@typescript-eslint/typescript-estree': 8.28.0(typescript@5.8.2) 2605 | '@typescript-eslint/visitor-keys': 8.28.0 2606 | debug: 4.4.0 2607 | eslint: 9.23.0 2608 | typescript: 5.8.2 2609 | transitivePeerDependencies: 2610 | - supports-color 2611 | 2612 | '@typescript-eslint/scope-manager@8.28.0': 2613 | dependencies: 2614 | '@typescript-eslint/types': 8.28.0 2615 | '@typescript-eslint/visitor-keys': 8.28.0 2616 | 2617 | '@typescript-eslint/type-utils@8.28.0(eslint@9.23.0)(typescript@5.8.2)': 2618 | dependencies: 2619 | '@typescript-eslint/typescript-estree': 8.28.0(typescript@5.8.2) 2620 | '@typescript-eslint/utils': 8.28.0(eslint@9.23.0)(typescript@5.8.2) 2621 | debug: 4.4.0 2622 | eslint: 9.23.0 2623 | ts-api-utils: 2.1.0(typescript@5.8.2) 2624 | typescript: 5.8.2 2625 | transitivePeerDependencies: 2626 | - supports-color 2627 | 2628 | '@typescript-eslint/types@8.28.0': {} 2629 | 2630 | '@typescript-eslint/typescript-estree@8.28.0(typescript@5.8.2)': 2631 | dependencies: 2632 | '@typescript-eslint/types': 8.28.0 2633 | '@typescript-eslint/visitor-keys': 8.28.0 2634 | debug: 4.4.0 2635 | fast-glob: 3.3.3 2636 | is-glob: 4.0.3 2637 | minimatch: 9.0.5 2638 | semver: 7.7.1 2639 | ts-api-utils: 2.1.0(typescript@5.8.2) 2640 | typescript: 5.8.2 2641 | transitivePeerDependencies: 2642 | - supports-color 2643 | 2644 | '@typescript-eslint/utils@8.28.0(eslint@9.23.0)(typescript@5.8.2)': 2645 | dependencies: 2646 | '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0) 2647 | '@typescript-eslint/scope-manager': 8.28.0 2648 | '@typescript-eslint/types': 8.28.0 2649 | '@typescript-eslint/typescript-estree': 8.28.0(typescript@5.8.2) 2650 | eslint: 9.23.0 2651 | typescript: 5.8.2 2652 | transitivePeerDependencies: 2653 | - supports-color 2654 | 2655 | '@typescript-eslint/visitor-keys@8.28.0': 2656 | dependencies: 2657 | '@typescript-eslint/types': 8.28.0 2658 | eslint-visitor-keys: 4.2.0 2659 | 2660 | '@webassemblyjs/ast@1.14.1': 2661 | dependencies: 2662 | '@webassemblyjs/helper-numbers': 1.13.2 2663 | '@webassemblyjs/helper-wasm-bytecode': 1.13.2 2664 | 2665 | '@webassemblyjs/floating-point-hex-parser@1.13.2': {} 2666 | 2667 | '@webassemblyjs/helper-api-error@1.13.2': {} 2668 | 2669 | '@webassemblyjs/helper-buffer@1.14.1': {} 2670 | 2671 | '@webassemblyjs/helper-numbers@1.13.2': 2672 | dependencies: 2673 | '@webassemblyjs/floating-point-hex-parser': 1.13.2 2674 | '@webassemblyjs/helper-api-error': 1.13.2 2675 | '@xtuc/long': 4.2.2 2676 | 2677 | '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} 2678 | 2679 | '@webassemblyjs/helper-wasm-section@1.14.1': 2680 | dependencies: 2681 | '@webassemblyjs/ast': 1.14.1 2682 | '@webassemblyjs/helper-buffer': 1.14.1 2683 | '@webassemblyjs/helper-wasm-bytecode': 1.13.2 2684 | '@webassemblyjs/wasm-gen': 1.14.1 2685 | 2686 | '@webassemblyjs/ieee754@1.13.2': 2687 | dependencies: 2688 | '@xtuc/ieee754': 1.2.0 2689 | 2690 | '@webassemblyjs/leb128@1.13.2': 2691 | dependencies: 2692 | '@xtuc/long': 4.2.2 2693 | 2694 | '@webassemblyjs/utf8@1.13.2': {} 2695 | 2696 | '@webassemblyjs/wasm-edit@1.14.1': 2697 | dependencies: 2698 | '@webassemblyjs/ast': 1.14.1 2699 | '@webassemblyjs/helper-buffer': 1.14.1 2700 | '@webassemblyjs/helper-wasm-bytecode': 1.13.2 2701 | '@webassemblyjs/helper-wasm-section': 1.14.1 2702 | '@webassemblyjs/wasm-gen': 1.14.1 2703 | '@webassemblyjs/wasm-opt': 1.14.1 2704 | '@webassemblyjs/wasm-parser': 1.14.1 2705 | '@webassemblyjs/wast-printer': 1.14.1 2706 | 2707 | '@webassemblyjs/wasm-gen@1.14.1': 2708 | dependencies: 2709 | '@webassemblyjs/ast': 1.14.1 2710 | '@webassemblyjs/helper-wasm-bytecode': 1.13.2 2711 | '@webassemblyjs/ieee754': 1.13.2 2712 | '@webassemblyjs/leb128': 1.13.2 2713 | '@webassemblyjs/utf8': 1.13.2 2714 | 2715 | '@webassemblyjs/wasm-opt@1.14.1': 2716 | dependencies: 2717 | '@webassemblyjs/ast': 1.14.1 2718 | '@webassemblyjs/helper-buffer': 1.14.1 2719 | '@webassemblyjs/wasm-gen': 1.14.1 2720 | '@webassemblyjs/wasm-parser': 1.14.1 2721 | 2722 | '@webassemblyjs/wasm-parser@1.14.1': 2723 | dependencies: 2724 | '@webassemblyjs/ast': 1.14.1 2725 | '@webassemblyjs/helper-api-error': 1.13.2 2726 | '@webassemblyjs/helper-wasm-bytecode': 1.13.2 2727 | '@webassemblyjs/ieee754': 1.13.2 2728 | '@webassemblyjs/leb128': 1.13.2 2729 | '@webassemblyjs/utf8': 1.13.2 2730 | 2731 | '@webassemblyjs/wast-printer@1.14.1': 2732 | dependencies: 2733 | '@webassemblyjs/ast': 1.14.1 2734 | '@xtuc/long': 4.2.2 2735 | 2736 | '@xtuc/ieee754@1.2.0': {} 2737 | 2738 | '@xtuc/long@4.2.2': {} 2739 | 2740 | acorn-jsx@5.3.2(acorn@8.14.1): 2741 | dependencies: 2742 | acorn: 8.14.1 2743 | 2744 | acorn-walk@8.3.4: 2745 | dependencies: 2746 | acorn: 8.14.1 2747 | 2748 | acorn@8.14.1: {} 2749 | 2750 | ajv-formats@2.1.1(ajv@8.17.1): 2751 | optionalDependencies: 2752 | ajv: 8.17.1 2753 | 2754 | ajv-keywords@5.1.0(ajv@8.17.1): 2755 | dependencies: 2756 | ajv: 8.17.1 2757 | fast-deep-equal: 3.1.3 2758 | 2759 | ajv@6.12.6: 2760 | dependencies: 2761 | fast-deep-equal: 3.1.3 2762 | fast-json-stable-stringify: 2.1.0 2763 | json-schema-traverse: 0.4.1 2764 | uri-js: 4.4.1 2765 | 2766 | ajv@8.17.1: 2767 | dependencies: 2768 | fast-deep-equal: 3.1.3 2769 | fast-uri: 3.0.6 2770 | json-schema-traverse: 1.0.0 2771 | require-from-string: 2.0.2 2772 | 2773 | ansi-escapes@4.3.2: 2774 | dependencies: 2775 | type-fest: 0.21.3 2776 | 2777 | ansi-regex@5.0.1: {} 2778 | 2779 | ansi-styles@4.3.0: 2780 | dependencies: 2781 | color-convert: 2.0.1 2782 | 2783 | ansi-styles@5.2.0: {} 2784 | 2785 | anymatch@3.1.3: 2786 | dependencies: 2787 | normalize-path: 3.0.0 2788 | picomatch: 2.3.1 2789 | 2790 | arg@4.1.3: {} 2791 | 2792 | argparse@1.0.10: 2793 | dependencies: 2794 | sprintf-js: 1.0.3 2795 | 2796 | argparse@2.0.1: {} 2797 | 2798 | async@3.2.6: {} 2799 | 2800 | babel-jest@29.7.0(@babel/core@7.26.10): 2801 | dependencies: 2802 | '@babel/core': 7.26.10 2803 | '@jest/transform': 29.7.0 2804 | '@types/babel__core': 7.20.5 2805 | babel-plugin-istanbul: 6.1.1 2806 | babel-preset-jest: 29.6.3(@babel/core@7.26.10) 2807 | chalk: 4.1.2 2808 | graceful-fs: 4.2.11 2809 | slash: 3.0.0 2810 | transitivePeerDependencies: 2811 | - supports-color 2812 | 2813 | babel-plugin-istanbul@6.1.1: 2814 | dependencies: 2815 | '@babel/helper-plugin-utils': 7.26.5 2816 | '@istanbuljs/load-nyc-config': 1.1.0 2817 | '@istanbuljs/schema': 0.1.3 2818 | istanbul-lib-instrument: 5.2.1 2819 | test-exclude: 6.0.0 2820 | transitivePeerDependencies: 2821 | - supports-color 2822 | 2823 | babel-plugin-jest-hoist@29.6.3: 2824 | dependencies: 2825 | '@babel/template': 7.27.0 2826 | '@babel/types': 7.27.0 2827 | '@types/babel__core': 7.20.5 2828 | '@types/babel__traverse': 7.20.7 2829 | 2830 | babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.10): 2831 | dependencies: 2832 | '@babel/core': 7.26.10 2833 | '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.10) 2834 | '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.10) 2835 | '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.10) 2836 | '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.10) 2837 | '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10) 2838 | '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.10) 2839 | '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.10) 2840 | '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.10) 2841 | '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.10) 2842 | '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.10) 2843 | '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.10) 2844 | '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.10) 2845 | '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.10) 2846 | '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.10) 2847 | '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.10) 2848 | 2849 | babel-preset-jest@29.6.3(@babel/core@7.26.10): 2850 | dependencies: 2851 | '@babel/core': 7.26.10 2852 | babel-plugin-jest-hoist: 29.6.3 2853 | babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.10) 2854 | 2855 | balanced-match@1.0.2: {} 2856 | 2857 | brace-expansion@1.1.11: 2858 | dependencies: 2859 | balanced-match: 1.0.2 2860 | concat-map: 0.0.1 2861 | 2862 | brace-expansion@2.0.1: 2863 | dependencies: 2864 | balanced-match: 1.0.2 2865 | 2866 | braces@3.0.3: 2867 | dependencies: 2868 | fill-range: 7.1.1 2869 | 2870 | browserslist@4.24.4: 2871 | dependencies: 2872 | caniuse-lite: 1.0.30001707 2873 | electron-to-chromium: 1.5.126 2874 | node-releases: 2.0.19 2875 | update-browserslist-db: 1.1.3(browserslist@4.24.4) 2876 | 2877 | bs-logger@0.2.6: 2878 | dependencies: 2879 | fast-json-stable-stringify: 2.1.0 2880 | 2881 | bser@2.1.1: 2882 | dependencies: 2883 | node-int64: 0.4.0 2884 | 2885 | buffer-from@1.1.2: {} 2886 | 2887 | callsites@3.1.0: {} 2888 | 2889 | camelcase@5.3.1: {} 2890 | 2891 | camelcase@6.3.0: {} 2892 | 2893 | caniuse-lite@1.0.30001707: {} 2894 | 2895 | chalk@4.1.2: 2896 | dependencies: 2897 | ansi-styles: 4.3.0 2898 | supports-color: 7.2.0 2899 | 2900 | char-regex@1.0.2: {} 2901 | 2902 | chrome-trace-event@1.0.4: {} 2903 | 2904 | ci-info@3.9.0: {} 2905 | 2906 | cjs-module-lexer@1.4.3: {} 2907 | 2908 | cliui@8.0.1: 2909 | dependencies: 2910 | string-width: 4.2.3 2911 | strip-ansi: 6.0.1 2912 | wrap-ansi: 7.0.0 2913 | 2914 | co@4.6.0: {} 2915 | 2916 | collect-v8-coverage@1.0.2: {} 2917 | 2918 | color-convert@2.0.1: 2919 | dependencies: 2920 | color-name: 1.1.4 2921 | 2922 | color-name@1.1.4: {} 2923 | 2924 | commander@2.20.3: {} 2925 | 2926 | concat-map@0.0.1: {} 2927 | 2928 | convert-source-map@2.0.0: {} 2929 | 2930 | create-jest@29.7.0(@types/node@22.13.14)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)): 2931 | dependencies: 2932 | '@jest/types': 29.6.3 2933 | chalk: 4.1.2 2934 | exit: 0.1.2 2935 | graceful-fs: 4.2.11 2936 | jest-config: 29.7.0(@types/node@22.13.14)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)) 2937 | jest-util: 29.7.0 2938 | prompts: 2.4.2 2939 | transitivePeerDependencies: 2940 | - '@types/node' 2941 | - babel-plugin-macros 2942 | - supports-color 2943 | - ts-node 2944 | 2945 | create-require@1.1.1: {} 2946 | 2947 | cross-spawn@7.0.6: 2948 | dependencies: 2949 | path-key: 3.1.1 2950 | shebang-command: 2.0.0 2951 | which: 2.0.2 2952 | 2953 | debug@4.4.0: 2954 | dependencies: 2955 | ms: 2.1.3 2956 | 2957 | dedent@1.5.3: {} 2958 | 2959 | deep-is@0.1.4: {} 2960 | 2961 | deepmerge@4.3.1: {} 2962 | 2963 | detect-newline@3.1.0: {} 2964 | 2965 | diff-sequences@29.6.3: {} 2966 | 2967 | diff@4.0.2: {} 2968 | 2969 | ejs@3.1.10: 2970 | dependencies: 2971 | jake: 10.9.2 2972 | 2973 | electron-to-chromium@1.5.126: {} 2974 | 2975 | emittery@0.13.1: {} 2976 | 2977 | emoji-regex@8.0.0: {} 2978 | 2979 | enhanced-resolve@5.18.1: 2980 | dependencies: 2981 | graceful-fs: 4.2.11 2982 | tapable: 2.2.1 2983 | 2984 | error-ex@1.3.2: 2985 | dependencies: 2986 | is-arrayish: 0.2.1 2987 | 2988 | es-module-lexer@1.6.0: {} 2989 | 2990 | esbuild@0.25.1: 2991 | optionalDependencies: 2992 | '@esbuild/aix-ppc64': 0.25.1 2993 | '@esbuild/android-arm': 0.25.1 2994 | '@esbuild/android-arm64': 0.25.1 2995 | '@esbuild/android-x64': 0.25.1 2996 | '@esbuild/darwin-arm64': 0.25.1 2997 | '@esbuild/darwin-x64': 0.25.1 2998 | '@esbuild/freebsd-arm64': 0.25.1 2999 | '@esbuild/freebsd-x64': 0.25.1 3000 | '@esbuild/linux-arm': 0.25.1 3001 | '@esbuild/linux-arm64': 0.25.1 3002 | '@esbuild/linux-ia32': 0.25.1 3003 | '@esbuild/linux-loong64': 0.25.1 3004 | '@esbuild/linux-mips64el': 0.25.1 3005 | '@esbuild/linux-ppc64': 0.25.1 3006 | '@esbuild/linux-riscv64': 0.25.1 3007 | '@esbuild/linux-s390x': 0.25.1 3008 | '@esbuild/linux-x64': 0.25.1 3009 | '@esbuild/netbsd-arm64': 0.25.1 3010 | '@esbuild/netbsd-x64': 0.25.1 3011 | '@esbuild/openbsd-arm64': 0.25.1 3012 | '@esbuild/openbsd-x64': 0.25.1 3013 | '@esbuild/sunos-x64': 0.25.1 3014 | '@esbuild/win32-arm64': 0.25.1 3015 | '@esbuild/win32-ia32': 0.25.1 3016 | '@esbuild/win32-x64': 0.25.1 3017 | 3018 | escalade@3.2.0: {} 3019 | 3020 | escape-string-regexp@2.0.0: {} 3021 | 3022 | escape-string-regexp@4.0.0: {} 3023 | 3024 | eslint-scope@5.1.1: 3025 | dependencies: 3026 | esrecurse: 4.3.0 3027 | estraverse: 4.3.0 3028 | 3029 | eslint-scope@8.3.0: 3030 | dependencies: 3031 | esrecurse: 4.3.0 3032 | estraverse: 5.3.0 3033 | 3034 | eslint-visitor-keys@3.4.3: {} 3035 | 3036 | eslint-visitor-keys@4.2.0: {} 3037 | 3038 | eslint@9.23.0: 3039 | dependencies: 3040 | '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0) 3041 | '@eslint-community/regexpp': 4.12.1 3042 | '@eslint/config-array': 0.19.2 3043 | '@eslint/config-helpers': 0.2.0 3044 | '@eslint/core': 0.12.0 3045 | '@eslint/eslintrc': 3.3.1 3046 | '@eslint/js': 9.23.0 3047 | '@eslint/plugin-kit': 0.2.7 3048 | '@humanfs/node': 0.16.6 3049 | '@humanwhocodes/module-importer': 1.0.1 3050 | '@humanwhocodes/retry': 0.4.2 3051 | '@types/estree': 1.0.7 3052 | '@types/json-schema': 7.0.15 3053 | ajv: 6.12.6 3054 | chalk: 4.1.2 3055 | cross-spawn: 7.0.6 3056 | debug: 4.4.0 3057 | escape-string-regexp: 4.0.0 3058 | eslint-scope: 8.3.0 3059 | eslint-visitor-keys: 4.2.0 3060 | espree: 10.3.0 3061 | esquery: 1.6.0 3062 | esutils: 2.0.3 3063 | fast-deep-equal: 3.1.3 3064 | file-entry-cache: 8.0.0 3065 | find-up: 5.0.0 3066 | glob-parent: 6.0.2 3067 | ignore: 5.3.2 3068 | imurmurhash: 0.1.4 3069 | is-glob: 4.0.3 3070 | json-stable-stringify-without-jsonify: 1.0.1 3071 | lodash.merge: 4.6.2 3072 | minimatch: 3.1.2 3073 | natural-compare: 1.4.0 3074 | optionator: 0.9.4 3075 | transitivePeerDependencies: 3076 | - supports-color 3077 | 3078 | espree@10.3.0: 3079 | dependencies: 3080 | acorn: 8.14.1 3081 | acorn-jsx: 5.3.2(acorn@8.14.1) 3082 | eslint-visitor-keys: 4.2.0 3083 | 3084 | esprima@4.0.1: {} 3085 | 3086 | esquery@1.6.0: 3087 | dependencies: 3088 | estraverse: 5.3.0 3089 | 3090 | esrecurse@4.3.0: 3091 | dependencies: 3092 | estraverse: 5.3.0 3093 | 3094 | estraverse@4.3.0: {} 3095 | 3096 | estraverse@5.3.0: {} 3097 | 3098 | esutils@2.0.3: {} 3099 | 3100 | events@3.3.0: {} 3101 | 3102 | execa@5.1.1: 3103 | dependencies: 3104 | cross-spawn: 7.0.6 3105 | get-stream: 6.0.1 3106 | human-signals: 2.1.0 3107 | is-stream: 2.0.1 3108 | merge-stream: 2.0.0 3109 | npm-run-path: 4.0.1 3110 | onetime: 5.1.2 3111 | signal-exit: 3.0.7 3112 | strip-final-newline: 2.0.0 3113 | 3114 | exit@0.1.2: {} 3115 | 3116 | expect@29.7.0: 3117 | dependencies: 3118 | '@jest/expect-utils': 29.7.0 3119 | jest-get-type: 29.6.3 3120 | jest-matcher-utils: 29.7.0 3121 | jest-message-util: 29.7.0 3122 | jest-util: 29.7.0 3123 | 3124 | fast-deep-equal@3.1.3: {} 3125 | 3126 | fast-glob@3.3.3: 3127 | dependencies: 3128 | '@nodelib/fs.stat': 2.0.5 3129 | '@nodelib/fs.walk': 1.2.8 3130 | glob-parent: 5.1.2 3131 | merge2: 1.4.1 3132 | micromatch: 4.0.8 3133 | 3134 | fast-json-stable-stringify@2.1.0: {} 3135 | 3136 | fast-levenshtein@2.0.6: {} 3137 | 3138 | fast-uri@3.0.6: {} 3139 | 3140 | fastq@1.19.1: 3141 | dependencies: 3142 | reusify: 1.1.0 3143 | 3144 | fb-watchman@2.0.2: 3145 | dependencies: 3146 | bser: 2.1.1 3147 | 3148 | file-entry-cache@8.0.0: 3149 | dependencies: 3150 | flat-cache: 4.0.1 3151 | 3152 | filelist@1.0.4: 3153 | dependencies: 3154 | minimatch: 5.1.6 3155 | 3156 | fill-range@7.1.1: 3157 | dependencies: 3158 | to-regex-range: 5.0.1 3159 | 3160 | find-up@4.1.0: 3161 | dependencies: 3162 | locate-path: 5.0.0 3163 | path-exists: 4.0.0 3164 | 3165 | find-up@5.0.0: 3166 | dependencies: 3167 | locate-path: 6.0.0 3168 | path-exists: 4.0.0 3169 | 3170 | flat-cache@4.0.1: 3171 | dependencies: 3172 | flatted: 3.3.3 3173 | keyv: 4.5.4 3174 | 3175 | flatted@3.3.3: {} 3176 | 3177 | fs.realpath@1.0.0: {} 3178 | 3179 | fsevents@2.3.3: 3180 | optional: true 3181 | 3182 | function-bind@1.1.2: {} 3183 | 3184 | gensync@1.0.0-beta.2: {} 3185 | 3186 | get-caller-file@2.0.5: {} 3187 | 3188 | get-package-type@0.1.0: {} 3189 | 3190 | get-stream@6.0.1: {} 3191 | 3192 | glob-parent@5.1.2: 3193 | dependencies: 3194 | is-glob: 4.0.3 3195 | 3196 | glob-parent@6.0.2: 3197 | dependencies: 3198 | is-glob: 4.0.3 3199 | 3200 | glob-to-regexp@0.4.1: {} 3201 | 3202 | glob@7.2.3: 3203 | dependencies: 3204 | fs.realpath: 1.0.0 3205 | inflight: 1.0.6 3206 | inherits: 2.0.4 3207 | minimatch: 3.1.2 3208 | once: 1.4.0 3209 | path-is-absolute: 1.0.1 3210 | 3211 | globals@11.12.0: {} 3212 | 3213 | globals@14.0.0: {} 3214 | 3215 | graceful-fs@4.2.11: {} 3216 | 3217 | graphemer@1.4.0: {} 3218 | 3219 | has-flag@4.0.0: {} 3220 | 3221 | hasown@2.0.2: 3222 | dependencies: 3223 | function-bind: 1.1.2 3224 | 3225 | html-escaper@2.0.2: {} 3226 | 3227 | human-signals@2.1.0: {} 3228 | 3229 | ignore@5.3.2: {} 3230 | 3231 | import-fresh@3.3.1: 3232 | dependencies: 3233 | parent-module: 1.0.1 3234 | resolve-from: 4.0.0 3235 | 3236 | import-local@3.2.0: 3237 | dependencies: 3238 | pkg-dir: 4.2.0 3239 | resolve-cwd: 3.0.0 3240 | 3241 | imurmurhash@0.1.4: {} 3242 | 3243 | inflight@1.0.6: 3244 | dependencies: 3245 | once: 1.4.0 3246 | wrappy: 1.0.2 3247 | 3248 | inherits@2.0.4: {} 3249 | 3250 | is-arrayish@0.2.1: {} 3251 | 3252 | is-core-module@2.16.1: 3253 | dependencies: 3254 | hasown: 2.0.2 3255 | 3256 | is-extglob@2.1.1: {} 3257 | 3258 | is-fullwidth-code-point@3.0.0: {} 3259 | 3260 | is-generator-fn@2.1.0: {} 3261 | 3262 | is-glob@4.0.3: 3263 | dependencies: 3264 | is-extglob: 2.1.1 3265 | 3266 | is-number@7.0.0: {} 3267 | 3268 | is-stream@2.0.1: {} 3269 | 3270 | isexe@2.0.0: {} 3271 | 3272 | istanbul-lib-coverage@3.2.2: {} 3273 | 3274 | istanbul-lib-instrument@5.2.1: 3275 | dependencies: 3276 | '@babel/core': 7.26.10 3277 | '@babel/parser': 7.27.0 3278 | '@istanbuljs/schema': 0.1.3 3279 | istanbul-lib-coverage: 3.2.2 3280 | semver: 6.3.1 3281 | transitivePeerDependencies: 3282 | - supports-color 3283 | 3284 | istanbul-lib-instrument@6.0.3: 3285 | dependencies: 3286 | '@babel/core': 7.26.10 3287 | '@babel/parser': 7.27.0 3288 | '@istanbuljs/schema': 0.1.3 3289 | istanbul-lib-coverage: 3.2.2 3290 | semver: 7.7.1 3291 | transitivePeerDependencies: 3292 | - supports-color 3293 | 3294 | istanbul-lib-report@3.0.1: 3295 | dependencies: 3296 | istanbul-lib-coverage: 3.2.2 3297 | make-dir: 4.0.0 3298 | supports-color: 7.2.0 3299 | 3300 | istanbul-lib-source-maps@4.0.1: 3301 | dependencies: 3302 | debug: 4.4.0 3303 | istanbul-lib-coverage: 3.2.2 3304 | source-map: 0.6.1 3305 | transitivePeerDependencies: 3306 | - supports-color 3307 | 3308 | istanbul-reports@3.1.7: 3309 | dependencies: 3310 | html-escaper: 2.0.2 3311 | istanbul-lib-report: 3.0.1 3312 | 3313 | jake@10.9.2: 3314 | dependencies: 3315 | async: 3.2.6 3316 | chalk: 4.1.2 3317 | filelist: 1.0.4 3318 | minimatch: 3.1.2 3319 | 3320 | jest-changed-files@29.7.0: 3321 | dependencies: 3322 | execa: 5.1.1 3323 | jest-util: 29.7.0 3324 | p-limit: 3.1.0 3325 | 3326 | jest-circus@29.7.0: 3327 | dependencies: 3328 | '@jest/environment': 29.7.0 3329 | '@jest/expect': 29.7.0 3330 | '@jest/test-result': 29.7.0 3331 | '@jest/types': 29.6.3 3332 | '@types/node': 22.13.14 3333 | chalk: 4.1.2 3334 | co: 4.6.0 3335 | dedent: 1.5.3 3336 | is-generator-fn: 2.1.0 3337 | jest-each: 29.7.0 3338 | jest-matcher-utils: 29.7.0 3339 | jest-message-util: 29.7.0 3340 | jest-runtime: 29.7.0 3341 | jest-snapshot: 29.7.0 3342 | jest-util: 29.7.0 3343 | p-limit: 3.1.0 3344 | pretty-format: 29.7.0 3345 | pure-rand: 6.1.0 3346 | slash: 3.0.0 3347 | stack-utils: 2.0.6 3348 | transitivePeerDependencies: 3349 | - babel-plugin-macros 3350 | - supports-color 3351 | 3352 | jest-cli@29.7.0(@types/node@22.13.14)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)): 3353 | dependencies: 3354 | '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)) 3355 | '@jest/test-result': 29.7.0 3356 | '@jest/types': 29.6.3 3357 | chalk: 4.1.2 3358 | create-jest: 29.7.0(@types/node@22.13.14)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)) 3359 | exit: 0.1.2 3360 | import-local: 3.2.0 3361 | jest-config: 29.7.0(@types/node@22.13.14)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)) 3362 | jest-util: 29.7.0 3363 | jest-validate: 29.7.0 3364 | yargs: 17.7.2 3365 | transitivePeerDependencies: 3366 | - '@types/node' 3367 | - babel-plugin-macros 3368 | - supports-color 3369 | - ts-node 3370 | 3371 | jest-config@29.7.0(@types/node@22.13.14)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)): 3372 | dependencies: 3373 | '@babel/core': 7.26.10 3374 | '@jest/test-sequencer': 29.7.0 3375 | '@jest/types': 29.6.3 3376 | babel-jest: 29.7.0(@babel/core@7.26.10) 3377 | chalk: 4.1.2 3378 | ci-info: 3.9.0 3379 | deepmerge: 4.3.1 3380 | glob: 7.2.3 3381 | graceful-fs: 4.2.11 3382 | jest-circus: 29.7.0 3383 | jest-environment-node: 29.7.0 3384 | jest-get-type: 29.6.3 3385 | jest-regex-util: 29.6.3 3386 | jest-resolve: 29.7.0 3387 | jest-runner: 29.7.0 3388 | jest-util: 29.7.0 3389 | jest-validate: 29.7.0 3390 | micromatch: 4.0.8 3391 | parse-json: 5.2.0 3392 | pretty-format: 29.7.0 3393 | slash: 3.0.0 3394 | strip-json-comments: 3.1.1 3395 | optionalDependencies: 3396 | '@types/node': 22.13.14 3397 | ts-node: 10.9.2(@types/node@22.13.14)(typescript@5.8.2) 3398 | transitivePeerDependencies: 3399 | - babel-plugin-macros 3400 | - supports-color 3401 | 3402 | jest-diff@29.7.0: 3403 | dependencies: 3404 | chalk: 4.1.2 3405 | diff-sequences: 29.6.3 3406 | jest-get-type: 29.6.3 3407 | pretty-format: 29.7.0 3408 | 3409 | jest-docblock@29.7.0: 3410 | dependencies: 3411 | detect-newline: 3.1.0 3412 | 3413 | jest-each@29.7.0: 3414 | dependencies: 3415 | '@jest/types': 29.6.3 3416 | chalk: 4.1.2 3417 | jest-get-type: 29.6.3 3418 | jest-util: 29.7.0 3419 | pretty-format: 29.7.0 3420 | 3421 | jest-environment-node@29.7.0: 3422 | dependencies: 3423 | '@jest/environment': 29.7.0 3424 | '@jest/fake-timers': 29.7.0 3425 | '@jest/types': 29.6.3 3426 | '@types/node': 22.13.14 3427 | jest-mock: 29.7.0 3428 | jest-util: 29.7.0 3429 | 3430 | jest-get-type@29.6.3: {} 3431 | 3432 | jest-haste-map@29.7.0: 3433 | dependencies: 3434 | '@jest/types': 29.6.3 3435 | '@types/graceful-fs': 4.1.9 3436 | '@types/node': 22.13.14 3437 | anymatch: 3.1.3 3438 | fb-watchman: 2.0.2 3439 | graceful-fs: 4.2.11 3440 | jest-regex-util: 29.6.3 3441 | jest-util: 29.7.0 3442 | jest-worker: 29.7.0 3443 | micromatch: 4.0.8 3444 | walker: 1.0.8 3445 | optionalDependencies: 3446 | fsevents: 2.3.3 3447 | 3448 | jest-leak-detector@29.7.0: 3449 | dependencies: 3450 | jest-get-type: 29.6.3 3451 | pretty-format: 29.7.0 3452 | 3453 | jest-matcher-utils@29.7.0: 3454 | dependencies: 3455 | chalk: 4.1.2 3456 | jest-diff: 29.7.0 3457 | jest-get-type: 29.6.3 3458 | pretty-format: 29.7.0 3459 | 3460 | jest-message-util@29.7.0: 3461 | dependencies: 3462 | '@babel/code-frame': 7.26.2 3463 | '@jest/types': 29.6.3 3464 | '@types/stack-utils': 2.0.3 3465 | chalk: 4.1.2 3466 | graceful-fs: 4.2.11 3467 | micromatch: 4.0.8 3468 | pretty-format: 29.7.0 3469 | slash: 3.0.0 3470 | stack-utils: 2.0.6 3471 | 3472 | jest-mock@29.7.0: 3473 | dependencies: 3474 | '@jest/types': 29.6.3 3475 | '@types/node': 22.13.14 3476 | jest-util: 29.7.0 3477 | 3478 | jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): 3479 | optionalDependencies: 3480 | jest-resolve: 29.7.0 3481 | 3482 | jest-regex-util@29.6.3: {} 3483 | 3484 | jest-resolve-dependencies@29.7.0: 3485 | dependencies: 3486 | jest-regex-util: 29.6.3 3487 | jest-snapshot: 29.7.0 3488 | transitivePeerDependencies: 3489 | - supports-color 3490 | 3491 | jest-resolve@29.7.0: 3492 | dependencies: 3493 | chalk: 4.1.2 3494 | graceful-fs: 4.2.11 3495 | jest-haste-map: 29.7.0 3496 | jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) 3497 | jest-util: 29.7.0 3498 | jest-validate: 29.7.0 3499 | resolve: 1.22.10 3500 | resolve.exports: 2.0.3 3501 | slash: 3.0.0 3502 | 3503 | jest-runner@29.7.0: 3504 | dependencies: 3505 | '@jest/console': 29.7.0 3506 | '@jest/environment': 29.7.0 3507 | '@jest/test-result': 29.7.0 3508 | '@jest/transform': 29.7.0 3509 | '@jest/types': 29.6.3 3510 | '@types/node': 22.13.14 3511 | chalk: 4.1.2 3512 | emittery: 0.13.1 3513 | graceful-fs: 4.2.11 3514 | jest-docblock: 29.7.0 3515 | jest-environment-node: 29.7.0 3516 | jest-haste-map: 29.7.0 3517 | jest-leak-detector: 29.7.0 3518 | jest-message-util: 29.7.0 3519 | jest-resolve: 29.7.0 3520 | jest-runtime: 29.7.0 3521 | jest-util: 29.7.0 3522 | jest-watcher: 29.7.0 3523 | jest-worker: 29.7.0 3524 | p-limit: 3.1.0 3525 | source-map-support: 0.5.13 3526 | transitivePeerDependencies: 3527 | - supports-color 3528 | 3529 | jest-runtime@29.7.0: 3530 | dependencies: 3531 | '@jest/environment': 29.7.0 3532 | '@jest/fake-timers': 29.7.0 3533 | '@jest/globals': 29.7.0 3534 | '@jest/source-map': 29.6.3 3535 | '@jest/test-result': 29.7.0 3536 | '@jest/transform': 29.7.0 3537 | '@jest/types': 29.6.3 3538 | '@types/node': 22.13.14 3539 | chalk: 4.1.2 3540 | cjs-module-lexer: 1.4.3 3541 | collect-v8-coverage: 1.0.2 3542 | glob: 7.2.3 3543 | graceful-fs: 4.2.11 3544 | jest-haste-map: 29.7.0 3545 | jest-message-util: 29.7.0 3546 | jest-mock: 29.7.0 3547 | jest-regex-util: 29.6.3 3548 | jest-resolve: 29.7.0 3549 | jest-snapshot: 29.7.0 3550 | jest-util: 29.7.0 3551 | slash: 3.0.0 3552 | strip-bom: 4.0.0 3553 | transitivePeerDependencies: 3554 | - supports-color 3555 | 3556 | jest-snapshot@29.7.0: 3557 | dependencies: 3558 | '@babel/core': 7.26.10 3559 | '@babel/generator': 7.27.0 3560 | '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) 3561 | '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10) 3562 | '@babel/types': 7.27.0 3563 | '@jest/expect-utils': 29.7.0 3564 | '@jest/transform': 29.7.0 3565 | '@jest/types': 29.6.3 3566 | babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.10) 3567 | chalk: 4.1.2 3568 | expect: 29.7.0 3569 | graceful-fs: 4.2.11 3570 | jest-diff: 29.7.0 3571 | jest-get-type: 29.6.3 3572 | jest-matcher-utils: 29.7.0 3573 | jest-message-util: 29.7.0 3574 | jest-util: 29.7.0 3575 | natural-compare: 1.4.0 3576 | pretty-format: 29.7.0 3577 | semver: 7.7.1 3578 | transitivePeerDependencies: 3579 | - supports-color 3580 | 3581 | jest-util@29.7.0: 3582 | dependencies: 3583 | '@jest/types': 29.6.3 3584 | '@types/node': 22.13.14 3585 | chalk: 4.1.2 3586 | ci-info: 3.9.0 3587 | graceful-fs: 4.2.11 3588 | picomatch: 2.3.1 3589 | 3590 | jest-validate@29.7.0: 3591 | dependencies: 3592 | '@jest/types': 29.6.3 3593 | camelcase: 6.3.0 3594 | chalk: 4.1.2 3595 | jest-get-type: 29.6.3 3596 | leven: 3.1.0 3597 | pretty-format: 29.7.0 3598 | 3599 | jest-watcher@29.7.0: 3600 | dependencies: 3601 | '@jest/test-result': 29.7.0 3602 | '@jest/types': 29.6.3 3603 | '@types/node': 22.13.14 3604 | ansi-escapes: 4.3.2 3605 | chalk: 4.1.2 3606 | emittery: 0.13.1 3607 | jest-util: 29.7.0 3608 | string-length: 4.0.2 3609 | 3610 | jest-worker@27.5.1: 3611 | dependencies: 3612 | '@types/node': 22.13.14 3613 | merge-stream: 2.0.0 3614 | supports-color: 8.1.1 3615 | 3616 | jest-worker@29.7.0: 3617 | dependencies: 3618 | '@types/node': 22.13.14 3619 | jest-util: 29.7.0 3620 | merge-stream: 2.0.0 3621 | supports-color: 8.1.1 3622 | 3623 | jest@29.7.0(@types/node@22.13.14)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)): 3624 | dependencies: 3625 | '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)) 3626 | '@jest/types': 29.6.3 3627 | import-local: 3.2.0 3628 | jest-cli: 29.7.0(@types/node@22.13.14)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)) 3629 | transitivePeerDependencies: 3630 | - '@types/node' 3631 | - babel-plugin-macros 3632 | - supports-color 3633 | - ts-node 3634 | 3635 | js-tokens@4.0.0: {} 3636 | 3637 | js-yaml@3.14.1: 3638 | dependencies: 3639 | argparse: 1.0.10 3640 | esprima: 4.0.1 3641 | 3642 | js-yaml@4.1.0: 3643 | dependencies: 3644 | argparse: 2.0.1 3645 | 3646 | jsesc@3.1.0: {} 3647 | 3648 | json-buffer@3.0.1: {} 3649 | 3650 | json-parse-even-better-errors@2.3.1: {} 3651 | 3652 | json-schema-traverse@0.4.1: {} 3653 | 3654 | json-schema-traverse@1.0.0: {} 3655 | 3656 | json-stable-stringify-without-jsonify@1.0.1: {} 3657 | 3658 | json5@2.2.3: {} 3659 | 3660 | keyv@4.5.4: 3661 | dependencies: 3662 | json-buffer: 3.0.1 3663 | 3664 | kleur@3.0.3: {} 3665 | 3666 | leven@3.1.0: {} 3667 | 3668 | levn@0.4.1: 3669 | dependencies: 3670 | prelude-ls: 1.2.1 3671 | type-check: 0.4.0 3672 | 3673 | lines-and-columns@1.2.4: {} 3674 | 3675 | loader-runner@4.3.0: {} 3676 | 3677 | locate-path@5.0.0: 3678 | dependencies: 3679 | p-locate: 4.1.0 3680 | 3681 | locate-path@6.0.0: 3682 | dependencies: 3683 | p-locate: 5.0.0 3684 | 3685 | lodash.memoize@4.1.2: {} 3686 | 3687 | lodash.merge@4.6.2: {} 3688 | 3689 | lru-cache@5.1.1: 3690 | dependencies: 3691 | yallist: 3.1.1 3692 | 3693 | make-dir@4.0.0: 3694 | dependencies: 3695 | semver: 7.7.1 3696 | 3697 | make-error@1.3.6: {} 3698 | 3699 | makeerror@1.0.12: 3700 | dependencies: 3701 | tmpl: 1.0.5 3702 | 3703 | merge-stream@2.0.0: {} 3704 | 3705 | merge2@1.4.1: {} 3706 | 3707 | micromatch@4.0.8: 3708 | dependencies: 3709 | braces: 3.0.3 3710 | picomatch: 2.3.1 3711 | 3712 | mime-db@1.52.0: {} 3713 | 3714 | mime-types@2.1.35: 3715 | dependencies: 3716 | mime-db: 1.52.0 3717 | 3718 | mimic-fn@2.1.0: {} 3719 | 3720 | minimatch@3.1.2: 3721 | dependencies: 3722 | brace-expansion: 1.1.11 3723 | 3724 | minimatch@5.1.6: 3725 | dependencies: 3726 | brace-expansion: 2.0.1 3727 | 3728 | minimatch@9.0.5: 3729 | dependencies: 3730 | brace-expansion: 2.0.1 3731 | 3732 | ms@2.1.3: {} 3733 | 3734 | natural-compare@1.4.0: {} 3735 | 3736 | neo-async@2.6.2: {} 3737 | 3738 | node-int64@0.4.0: {} 3739 | 3740 | node-releases@2.0.19: {} 3741 | 3742 | normalize-path@3.0.0: {} 3743 | 3744 | npm-run-path@4.0.1: 3745 | dependencies: 3746 | path-key: 3.1.1 3747 | 3748 | once@1.4.0: 3749 | dependencies: 3750 | wrappy: 1.0.2 3751 | 3752 | onetime@5.1.2: 3753 | dependencies: 3754 | mimic-fn: 2.1.0 3755 | 3756 | optionator@0.9.4: 3757 | dependencies: 3758 | deep-is: 0.1.4 3759 | fast-levenshtein: 2.0.6 3760 | levn: 0.4.1 3761 | prelude-ls: 1.2.1 3762 | type-check: 0.4.0 3763 | word-wrap: 1.2.5 3764 | 3765 | p-limit@2.3.0: 3766 | dependencies: 3767 | p-try: 2.2.0 3768 | 3769 | p-limit@3.1.0: 3770 | dependencies: 3771 | yocto-queue: 0.1.0 3772 | 3773 | p-locate@4.1.0: 3774 | dependencies: 3775 | p-limit: 2.3.0 3776 | 3777 | p-locate@5.0.0: 3778 | dependencies: 3779 | p-limit: 3.1.0 3780 | 3781 | p-try@2.2.0: {} 3782 | 3783 | parent-module@1.0.1: 3784 | dependencies: 3785 | callsites: 3.1.0 3786 | 3787 | parse-json@5.2.0: 3788 | dependencies: 3789 | '@babel/code-frame': 7.26.2 3790 | error-ex: 1.3.2 3791 | json-parse-even-better-errors: 2.3.1 3792 | lines-and-columns: 1.2.4 3793 | 3794 | path-exists@4.0.0: {} 3795 | 3796 | path-is-absolute@1.0.1: {} 3797 | 3798 | path-key@3.1.1: {} 3799 | 3800 | path-parse@1.0.7: {} 3801 | 3802 | picocolors@1.1.1: {} 3803 | 3804 | picomatch@2.3.1: {} 3805 | 3806 | pirates@4.0.7: {} 3807 | 3808 | pkg-dir@4.2.0: 3809 | dependencies: 3810 | find-up: 4.1.0 3811 | 3812 | prelude-ls@1.2.1: {} 3813 | 3814 | prettier@3.5.3: {} 3815 | 3816 | pretty-format@29.7.0: 3817 | dependencies: 3818 | '@jest/schemas': 29.6.3 3819 | ansi-styles: 5.2.0 3820 | react-is: 18.3.1 3821 | 3822 | prompts@2.4.2: 3823 | dependencies: 3824 | kleur: 3.0.3 3825 | sisteransi: 1.0.5 3826 | 3827 | punycode@2.3.1: {} 3828 | 3829 | pure-rand@6.1.0: {} 3830 | 3831 | queue-microtask@1.2.3: {} 3832 | 3833 | randombytes@2.1.0: 3834 | dependencies: 3835 | safe-buffer: 5.2.1 3836 | 3837 | react-is@18.3.1: {} 3838 | 3839 | require-directory@2.1.1: {} 3840 | 3841 | require-from-string@2.0.2: {} 3842 | 3843 | resolve-cwd@3.0.0: 3844 | dependencies: 3845 | resolve-from: 5.0.0 3846 | 3847 | resolve-from@4.0.0: {} 3848 | 3849 | resolve-from@5.0.0: {} 3850 | 3851 | resolve.exports@2.0.3: {} 3852 | 3853 | resolve@1.22.10: 3854 | dependencies: 3855 | is-core-module: 2.16.1 3856 | path-parse: 1.0.7 3857 | supports-preserve-symlinks-flag: 1.0.0 3858 | 3859 | reusify@1.1.0: {} 3860 | 3861 | run-parallel@1.2.0: 3862 | dependencies: 3863 | queue-microtask: 1.2.3 3864 | 3865 | safe-buffer@5.2.1: {} 3866 | 3867 | schema-utils@4.3.0: 3868 | dependencies: 3869 | '@types/json-schema': 7.0.15 3870 | ajv: 8.17.1 3871 | ajv-formats: 2.1.1(ajv@8.17.1) 3872 | ajv-keywords: 5.1.0(ajv@8.17.1) 3873 | 3874 | semver@6.3.1: {} 3875 | 3876 | semver@7.7.1: {} 3877 | 3878 | serialize-javascript@6.0.2: 3879 | dependencies: 3880 | randombytes: 2.1.0 3881 | 3882 | shebang-command@2.0.0: 3883 | dependencies: 3884 | shebang-regex: 3.0.0 3885 | 3886 | shebang-regex@3.0.0: {} 3887 | 3888 | signal-exit@3.0.7: {} 3889 | 3890 | sisteransi@1.0.5: {} 3891 | 3892 | slash@3.0.0: {} 3893 | 3894 | source-map-support@0.5.13: 3895 | dependencies: 3896 | buffer-from: 1.1.2 3897 | source-map: 0.6.1 3898 | 3899 | source-map-support@0.5.21: 3900 | dependencies: 3901 | buffer-from: 1.1.2 3902 | source-map: 0.6.1 3903 | 3904 | source-map@0.6.1: {} 3905 | 3906 | source-map@0.7.4: {} 3907 | 3908 | sprintf-js@1.0.3: {} 3909 | 3910 | stack-utils@2.0.6: 3911 | dependencies: 3912 | escape-string-regexp: 2.0.0 3913 | 3914 | string-length@4.0.2: 3915 | dependencies: 3916 | char-regex: 1.0.2 3917 | strip-ansi: 6.0.1 3918 | 3919 | string-width@4.2.3: 3920 | dependencies: 3921 | emoji-regex: 8.0.0 3922 | is-fullwidth-code-point: 3.0.0 3923 | strip-ansi: 6.0.1 3924 | 3925 | strip-ansi@6.0.1: 3926 | dependencies: 3927 | ansi-regex: 5.0.1 3928 | 3929 | strip-bom@4.0.0: {} 3930 | 3931 | strip-final-newline@2.0.0: {} 3932 | 3933 | strip-json-comments@3.1.1: {} 3934 | 3935 | supports-color@7.2.0: 3936 | dependencies: 3937 | has-flag: 4.0.0 3938 | 3939 | supports-color@8.1.1: 3940 | dependencies: 3941 | has-flag: 4.0.0 3942 | 3943 | supports-preserve-symlinks-flag@1.0.0: {} 3944 | 3945 | tapable@2.2.1: {} 3946 | 3947 | terser-webpack-plugin@5.3.14(esbuild@0.25.1)(webpack@5.98.0(esbuild@0.25.1)): 3948 | dependencies: 3949 | '@jridgewell/trace-mapping': 0.3.25 3950 | jest-worker: 27.5.1 3951 | schema-utils: 4.3.0 3952 | serialize-javascript: 6.0.2 3953 | terser: 5.39.0 3954 | webpack: 5.98.0(esbuild@0.25.1) 3955 | optionalDependencies: 3956 | esbuild: 0.25.1 3957 | 3958 | terser@5.39.0: 3959 | dependencies: 3960 | '@jridgewell/source-map': 0.3.6 3961 | acorn: 8.14.1 3962 | commander: 2.20.3 3963 | source-map-support: 0.5.21 3964 | 3965 | test-exclude@6.0.0: 3966 | dependencies: 3967 | '@istanbuljs/schema': 0.1.3 3968 | glob: 7.2.3 3969 | minimatch: 3.1.2 3970 | 3971 | tmpl@1.0.5: {} 3972 | 3973 | to-regex-range@5.0.1: 3974 | dependencies: 3975 | is-number: 7.0.0 3976 | 3977 | ts-api-utils@2.1.0(typescript@5.8.2): 3978 | dependencies: 3979 | typescript: 5.8.2 3980 | 3981 | ts-jest@29.3.0(@babel/core@7.26.10)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10))(esbuild@0.25.1)(jest@29.7.0(@types/node@22.13.14)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)))(typescript@5.8.2): 3982 | dependencies: 3983 | bs-logger: 0.2.6 3984 | ejs: 3.1.10 3985 | fast-json-stable-stringify: 2.1.0 3986 | jest: 29.7.0(@types/node@22.13.14)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2)) 3987 | jest-util: 29.7.0 3988 | json5: 2.2.3 3989 | lodash.memoize: 4.1.2 3990 | make-error: 1.3.6 3991 | semver: 7.7.1 3992 | type-fest: 4.38.0 3993 | typescript: 5.8.2 3994 | yargs-parser: 21.1.1 3995 | optionalDependencies: 3996 | '@babel/core': 7.26.10 3997 | '@jest/transform': 29.7.0 3998 | '@jest/types': 29.6.3 3999 | babel-jest: 29.7.0(@babel/core@7.26.10) 4000 | esbuild: 0.25.1 4001 | 4002 | ts-loader@9.5.2(typescript@5.8.2)(webpack@5.98.0(esbuild@0.25.1)): 4003 | dependencies: 4004 | chalk: 4.1.2 4005 | enhanced-resolve: 5.18.1 4006 | micromatch: 4.0.8 4007 | semver: 7.7.1 4008 | source-map: 0.7.4 4009 | typescript: 5.8.2 4010 | webpack: 5.98.0(esbuild@0.25.1) 4011 | 4012 | ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2): 4013 | dependencies: 4014 | '@cspotcode/source-map-support': 0.8.1 4015 | '@tsconfig/node10': 1.0.11 4016 | '@tsconfig/node12': 1.0.11 4017 | '@tsconfig/node14': 1.0.3 4018 | '@tsconfig/node16': 1.0.4 4019 | '@types/node': 22.13.14 4020 | acorn: 8.14.1 4021 | acorn-walk: 8.3.4 4022 | arg: 4.1.3 4023 | create-require: 1.1.1 4024 | diff: 4.0.2 4025 | make-error: 1.3.6 4026 | typescript: 5.8.2 4027 | v8-compile-cache-lib: 3.0.1 4028 | yn: 3.1.1 4029 | 4030 | type-check@0.4.0: 4031 | dependencies: 4032 | prelude-ls: 1.2.1 4033 | 4034 | type-detect@4.0.8: {} 4035 | 4036 | type-fest@0.21.3: {} 4037 | 4038 | type-fest@4.38.0: {} 4039 | 4040 | typescript-eslint@8.28.0(eslint@9.23.0)(typescript@5.8.2): 4041 | dependencies: 4042 | '@typescript-eslint/eslint-plugin': 8.28.0(@typescript-eslint/parser@8.28.0(eslint@9.23.0)(typescript@5.8.2))(eslint@9.23.0)(typescript@5.8.2) 4043 | '@typescript-eslint/parser': 8.28.0(eslint@9.23.0)(typescript@5.8.2) 4044 | '@typescript-eslint/utils': 8.28.0(eslint@9.23.0)(typescript@5.8.2) 4045 | eslint: 9.23.0 4046 | typescript: 5.8.2 4047 | transitivePeerDependencies: 4048 | - supports-color 4049 | 4050 | typescript@5.8.2: {} 4051 | 4052 | undici-types@6.20.0: {} 4053 | 4054 | update-browserslist-db@1.1.3(browserslist@4.24.4): 4055 | dependencies: 4056 | browserslist: 4.24.4 4057 | escalade: 3.2.0 4058 | picocolors: 1.1.1 4059 | 4060 | uri-js@4.4.1: 4061 | dependencies: 4062 | punycode: 2.3.1 4063 | 4064 | v8-compile-cache-lib@3.0.1: {} 4065 | 4066 | v8-to-istanbul@9.3.0: 4067 | dependencies: 4068 | '@jridgewell/trace-mapping': 0.3.25 4069 | '@types/istanbul-lib-coverage': 2.0.6 4070 | convert-source-map: 2.0.0 4071 | 4072 | walker@1.0.8: 4073 | dependencies: 4074 | makeerror: 1.0.12 4075 | 4076 | watchpack@2.4.2: 4077 | dependencies: 4078 | glob-to-regexp: 0.4.1 4079 | graceful-fs: 4.2.11 4080 | 4081 | webpack-sources@3.2.3: {} 4082 | 4083 | webpack@5.98.0(esbuild@0.25.1): 4084 | dependencies: 4085 | '@types/eslint-scope': 3.7.7 4086 | '@types/estree': 1.0.7 4087 | '@webassemblyjs/ast': 1.14.1 4088 | '@webassemblyjs/wasm-edit': 1.14.1 4089 | '@webassemblyjs/wasm-parser': 1.14.1 4090 | acorn: 8.14.1 4091 | browserslist: 4.24.4 4092 | chrome-trace-event: 1.0.4 4093 | enhanced-resolve: 5.18.1 4094 | es-module-lexer: 1.6.0 4095 | eslint-scope: 5.1.1 4096 | events: 3.3.0 4097 | glob-to-regexp: 0.4.1 4098 | graceful-fs: 4.2.11 4099 | json-parse-even-better-errors: 2.3.1 4100 | loader-runner: 4.3.0 4101 | mime-types: 2.1.35 4102 | neo-async: 2.6.2 4103 | schema-utils: 4.3.0 4104 | tapable: 2.2.1 4105 | terser-webpack-plugin: 5.3.14(esbuild@0.25.1)(webpack@5.98.0(esbuild@0.25.1)) 4106 | watchpack: 2.4.2 4107 | webpack-sources: 3.2.3 4108 | transitivePeerDependencies: 4109 | - '@swc/core' 4110 | - esbuild 4111 | - uglify-js 4112 | 4113 | which@2.0.2: 4114 | dependencies: 4115 | isexe: 2.0.0 4116 | 4117 | word-wrap@1.2.5: {} 4118 | 4119 | wrap-ansi@7.0.0: 4120 | dependencies: 4121 | ansi-styles: 4.3.0 4122 | string-width: 4.2.3 4123 | strip-ansi: 6.0.1 4124 | 4125 | wrappy@1.0.2: {} 4126 | 4127 | write-file-atomic@4.0.2: 4128 | dependencies: 4129 | imurmurhash: 0.1.4 4130 | signal-exit: 3.0.7 4131 | 4132 | y18n@5.0.8: {} 4133 | 4134 | yallist@3.1.1: {} 4135 | 4136 | yargs-parser@21.1.1: {} 4137 | 4138 | yargs@17.7.2: 4139 | dependencies: 4140 | cliui: 8.0.1 4141 | escalade: 3.2.0 4142 | get-caller-file: 2.0.5 4143 | require-directory: 2.1.1 4144 | string-width: 4.2.3 4145 | y18n: 5.0.8 4146 | yargs-parser: 21.1.1 4147 | 4148 | yn@3.1.1: {} 4149 | 4150 | yocto-queue@0.1.0: {} 4151 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { parseFile } from "./parser"; 2 | import { writeDocs } from "./printer"; 3 | 4 | const args = process.argv.slice(2); 5 | 6 | if (args.length !== 2) { 7 | console.log("dts-docs requires 2 arguments."); 8 | console.log(""); 9 | console.log("Usage: dts-docs "); 10 | 11 | process.exit(1); 12 | } 13 | 14 | const [inputFile, outputDir] = args; 15 | 16 | const parsed = parseFile(inputFile); 17 | 18 | writeDocs(parsed, outputDir); 19 | -------------------------------------------------------------------------------- /src/parser/class.ts: -------------------------------------------------------------------------------- 1 | import * as ts from "typescript"; 2 | import { ClassDocEntry, DocEntry, Heritage } from "./types"; 3 | import { serializeSignature, serializeSymbol } from "./utils"; 4 | 5 | export const parseClass = ( 6 | node: ts.ClassDeclaration, 7 | checker: ts.TypeChecker, 8 | printer: ts.Printer, 9 | sourceFile: ts.SourceFile 10 | ): ClassDocEntry => { 11 | const classSymbol = checker.getSymbolAtLocation(node.name); 12 | 13 | const heritage: Heritage = {}; 14 | 15 | ts.forEachChild(node, (node) => { 16 | if (ts.isHeritageClause(node)) { 17 | if (node.getText().startsWith("implements")) { 18 | heritage.implements = []; 19 | 20 | ts.forEachChild(node, (node) => { 21 | heritage.implements.push(node.getText()); 22 | }); 23 | } else if (node.getText().startsWith("extends")) { 24 | heritage.extends = []; 25 | 26 | ts.forEachChild(node, (node) => { 27 | heritage.extends.push(node.getText()); 28 | }); 29 | } 30 | } 31 | }); 32 | 33 | if (!classSymbol.valueDeclaration) { 34 | throw new Error("Class symbol does not have a value declaration"); 35 | } 36 | 37 | const constructorType = checker.getTypeOfSymbolAtLocation( 38 | classSymbol, 39 | classSymbol.valueDeclaration 40 | ); 41 | 42 | const constructorSymbols = constructorType 43 | .getConstructSignatures() 44 | .map((s) => serializeSignature(checker, s)); 45 | 46 | const propertySymbols: DocEntry[] = []; 47 | ts.forEachChild(node, (node) => { 48 | if (ts.isPropertyDeclaration(node)) { 49 | propertySymbols.push({ 50 | raw: printer.printNode(ts.EmitHint.Unspecified, node, sourceFile), 51 | ...serializeSymbol(checker, checker.getSymbolAtLocation(node.name)), 52 | }); 53 | } 54 | }); 55 | 56 | const methodSymbols: DocEntry[] = []; 57 | ts.forEachChild(node, (node) => { 58 | if (ts.isMethodDeclaration(node)) { 59 | methodSymbols.push({ 60 | raw: printer.printNode(ts.EmitHint.Unspecified, node, sourceFile), 61 | ...serializeSymbol(checker, checker.getSymbolAtLocation(node.name)), 62 | }); 63 | } 64 | }); 65 | 66 | return { 67 | ...serializeSymbol(checker, classSymbol), 68 | methods: methodSymbols, 69 | properties: propertySymbols, 70 | constructors: constructorSymbols, 71 | heritage, 72 | }; 73 | }; 74 | -------------------------------------------------------------------------------- /src/parser/enum.ts: -------------------------------------------------------------------------------- 1 | import * as ts from "typescript"; 2 | import { DocEntry } from "./types"; 3 | import { serializeSymbol } from "./utils"; 4 | 5 | export const parseEnum = ( 6 | node: ts.EnumDeclaration, 7 | checker: ts.TypeChecker, 8 | printer: ts.Printer, 9 | sourceFile: ts.SourceFile 10 | ): DocEntry => { 11 | const symbol = checker.getSymbolAtLocation(node.name); 12 | return { 13 | ...serializeSymbol(checker, symbol), 14 | raw: printer.printNode(ts.EmitHint.Unspecified, node, sourceFile), 15 | }; 16 | }; 17 | -------------------------------------------------------------------------------- /src/parser/function.ts: -------------------------------------------------------------------------------- 1 | import * as ts from "typescript"; 2 | import { DocEntry, FunctionDocEntry } from "./types"; 3 | 4 | export const parseFunction = ( 5 | node: ts.FunctionDeclaration, 6 | checker: ts.TypeChecker, 7 | printer: ts.Printer, 8 | sourceFile: ts.SourceFile 9 | ): FunctionDocEntry => { 10 | const signature = checker.getSignatureFromDeclaration(node); 11 | const symbol = checker.getSymbolAtLocation(node.name); 12 | const documentation = ts.displayPartsToString( 13 | symbol.getDocumentationComment(checker) 14 | ); 15 | 16 | const docTags = Object.fromEntries( 17 | symbol 18 | .getJsDocTags() 19 | .filter((f) => f.name === "param") 20 | .map((f) => { 21 | const name = f.text.find((f) => f.kind === "parameterName"); 22 | const text = f.text.find((f) => f.kind === "text"); 23 | 24 | if (name) { 25 | return [name.text, text.text.replace("- ", "")]; 26 | } 27 | 28 | // If the parameter doesn't have have a description, the kind will be 29 | // `text` instead of `parameterName`. 30 | return [text.text, ""]; 31 | }) 32 | ); 33 | 34 | const parameters = signature.parameters.map((param) => { 35 | if (!param.valueDeclaration) { 36 | throw new Error("Parameter does not have a value declaration"); 37 | } 38 | 39 | return { 40 | name: param.getName(), 41 | type: checker.typeToString( 42 | checker.getTypeOfSymbolAtLocation(param, param.valueDeclaration) 43 | ), 44 | documentation: docTags[param.getName()] ?? "", 45 | }; 46 | }); 47 | 48 | return { 49 | name: symbol.getName(), 50 | documentation, 51 | type: checker.typeToString(signature.getReturnType()), 52 | raw: printer.printNode(ts.EmitHint.Unspecified, node, sourceFile), 53 | parameters, 54 | }; 55 | }; 56 | -------------------------------------------------------------------------------- /src/parser/index.ts: -------------------------------------------------------------------------------- 1 | import * as ts from "typescript"; 2 | import { 3 | ClassDocEntry, 4 | DocEntry, 5 | FunctionDocEntry, 6 | InterfaceDocEntry, 7 | } from "./types"; 8 | import { parseFunction } from "./function"; 9 | import { parseInterface } from "./interface"; 10 | import { parseClass } from "./class"; 11 | import { parseEnum } from "./enum"; 12 | import { parseType } from "./type"; 13 | 14 | export interface ParsedFile { 15 | functions: FunctionDocEntry[]; 16 | interfaces: InterfaceDocEntry[]; 17 | classes: ClassDocEntry[]; 18 | enums: DocEntry[]; 19 | types: DocEntry[]; 20 | } 21 | 22 | export function parseFile(file: string): ParsedFile { 23 | const program = ts.createProgram([file], {}); 24 | const checker = program.getTypeChecker(); 25 | const printer = ts.createPrinter({ 26 | newLine: ts.NewLineKind.LineFeed, 27 | removeComments: true, 28 | }); 29 | const sourceFile = program.getSourceFile(file); 30 | 31 | const functions: FunctionDocEntry[] = []; 32 | const interfaces: InterfaceDocEntry[] = []; 33 | const classes: ClassDocEntry[] = []; 34 | const enums: DocEntry[] = []; 35 | const types: DocEntry[] = []; 36 | 37 | if (!sourceFile) { 38 | return { 39 | functions, 40 | interfaces, 41 | classes, 42 | enums, 43 | types, 44 | }; 45 | } 46 | 47 | const parseDeclarations = (node: ts.Node) => { 48 | ts.forEachChild(node, (n) => { 49 | if (ts.isFunctionDeclaration(n)) { 50 | functions.push(parseFunction(n, checker, printer, sourceFile)); 51 | } else if (ts.isInterfaceDeclaration(n)) { 52 | interfaces.push(parseInterface(n, checker, printer, sourceFile)); 53 | } else if (ts.isClassDeclaration(n)) { 54 | classes.push(parseClass(n, checker, printer, sourceFile)); 55 | } else if (ts.isEnumDeclaration(n)) { 56 | enums.push(parseEnum(n, checker, printer, sourceFile)); 57 | } else if (ts.isTypeAliasDeclaration(n)) { 58 | types.push(parseType(n, checker, printer, sourceFile)); 59 | } else if (ts.isModuleDeclaration(n)) { 60 | if (n.body) { 61 | parseDeclarations(n.body); 62 | } 63 | } 64 | }); 65 | }; 66 | 67 | parseDeclarations(sourceFile); 68 | 69 | return { 70 | functions, 71 | interfaces, 72 | classes, 73 | enums, 74 | types, 75 | }; 76 | } 77 | -------------------------------------------------------------------------------- /src/parser/interface.ts: -------------------------------------------------------------------------------- 1 | import * as ts from "typescript"; 2 | import { DocEntry, InterfaceDocEntry } from "./types"; 3 | import { serializeSymbol } from "./utils"; 4 | 5 | export const parseInterface = ( 6 | node: ts.InterfaceDeclaration, 7 | checker: ts.TypeChecker, 8 | printer: ts.Printer, 9 | sourceFile: ts.SourceFile 10 | ): InterfaceDocEntry => { 11 | const interfaceSymbol = checker.getSymbolAtLocation(node.name); 12 | 13 | const properties: DocEntry[] = []; 14 | ts.forEachChild(node, (node) => { 15 | if (ts.isPropertySignature(node)) { 16 | const propertySymbol = checker.getSymbolAtLocation(node.name); 17 | const serializedSymbol = serializeSymbol(checker, propertySymbol); 18 | 19 | properties.push({ 20 | raw: node.getText(), 21 | ...serializedSymbol, 22 | }); 23 | } 24 | }); 25 | 26 | const methods: DocEntry[] = []; 27 | ts.forEachChild(node, (node) => { 28 | if (ts.isMethodSignature(node)) { 29 | methods.push({ 30 | raw: printer.printNode(ts.EmitHint.Unspecified, node, sourceFile), 31 | ...serializeSymbol(checker, checker.getSymbolAtLocation(node.name)), 32 | }); 33 | } 34 | }); 35 | 36 | return { 37 | ...serializeSymbol(checker, interfaceSymbol), 38 | properties, 39 | methods, 40 | }; 41 | }; 42 | -------------------------------------------------------------------------------- /src/parser/type.ts: -------------------------------------------------------------------------------- 1 | import * as ts from "typescript"; 2 | import { DocEntry } from "./types"; 3 | import { serializeSymbol } from "./utils"; 4 | 5 | export const parseType = ( 6 | node: ts.TypeAliasDeclaration, 7 | checker: ts.TypeChecker, 8 | printer: ts.Printer, 9 | sourceFile: ts.SourceFile 10 | ): DocEntry => { 11 | const symbol = checker.getSymbolAtLocation(node.name); 12 | 13 | if (!symbol) { 14 | throw new Error("unexpected error"); 15 | } 16 | 17 | return { 18 | ...serializeSymbol(checker, symbol), 19 | raw: printer.printNode(ts.EmitHint.Unspecified, node, sourceFile), 20 | }; 21 | }; 22 | -------------------------------------------------------------------------------- /src/parser/types.ts: -------------------------------------------------------------------------------- 1 | export interface Heritage { 2 | extends?: string[]; 3 | implements?: string[]; 4 | } 5 | 6 | export interface DocEntry { 7 | name: string; 8 | documentation: string; 9 | type: string; 10 | raw?: string; 11 | } 12 | 13 | export interface SignatureDocEntry { 14 | parameters: DocEntry[]; 15 | returnType: string; 16 | documentation: string; 17 | raw?: string; 18 | } 19 | 20 | export interface FunctionDocEntry extends DocEntry { 21 | parameters: DocEntry[]; 22 | } 23 | 24 | export interface ClassDocEntry extends DocEntry { 25 | properties: DocEntry[]; 26 | methods: DocEntry[]; 27 | constructors: SignatureDocEntry[]; 28 | heritage: Heritage; 29 | } 30 | 31 | export interface InterfaceDocEntry extends DocEntry { 32 | properties: DocEntry[]; 33 | methods: DocEntry[]; 34 | } 35 | -------------------------------------------------------------------------------- /src/parser/utils.ts: -------------------------------------------------------------------------------- 1 | import * as ts from "typescript"; 2 | import { DocEntry } from "./types"; 3 | 4 | export const serializeSymbol = ( 5 | checker: ts.TypeChecker, 6 | symbol: ts.Symbol 7 | ): DocEntry => { 8 | return { 9 | name: symbol.getName(), 10 | documentation: ts.displayPartsToString( 11 | symbol.getDocumentationComment(checker) 12 | ), 13 | type: symbol.valueDeclaration 14 | ? checker.typeToString( 15 | checker.getTypeOfSymbolAtLocation(symbol, symbol.valueDeclaration) 16 | ) 17 | : "any", 18 | }; 19 | }; 20 | 21 | export function serializeSignature( 22 | checker: ts.TypeChecker, 23 | signature: ts.Signature 24 | ) { 25 | return { 26 | parameters: signature.parameters.map((p) => serializeSymbol(checker, p)), 27 | returnType: checker.typeToString(signature.getReturnType()), 28 | documentation: ts.displayPartsToString( 29 | signature.getDocumentationComment(checker) 30 | ), 31 | }; 32 | } 33 | -------------------------------------------------------------------------------- /src/printer/class.ts: -------------------------------------------------------------------------------- 1 | import { Printer } from "."; 2 | import { ClassDocEntry } from "../parser/types"; 3 | import { escapeHTML } from "./utils"; 4 | 5 | export class ClassPrinter implements Printer { 6 | print(c: ClassDocEntry): string { 7 | const res: string[] = []; 8 | 9 | res.push(`# ${c.name}`); 10 | res.push(""); 11 | if (c.heritage.extends && c.heritage.extends.length > 0) { 12 | res.push("Extends `" + c.heritage.extends.join("`, `") + "`"); 13 | res.push(""); 14 | } 15 | if (c.heritage.implements && c.heritage.implements.length > 0) { 16 | res.push("Implements `" + c.heritage.implements.join("`, `") + "`"); 17 | res.push(""); 18 | } 19 | 20 | if (c.documentation) { 21 | res.push(escapeHTML(c.documentation)); 22 | res.push(""); 23 | } 24 | 25 | if (c.constructors.length > 0) { 26 | res.push("## Constructor"); 27 | res.push(""); 28 | 29 | res.push("```ts"); 30 | 31 | c.constructors.forEach((constructor) => { 32 | res.push( 33 | `constructor(${constructor.parameters 34 | .map((p) => `${p.name}: ${p.type}`) 35 | .join(", ")});` 36 | ); 37 | }); 38 | res.push("```"); 39 | res.push(""); 40 | } 41 | 42 | if (c.properties.length > 0) { 43 | res.push(`## Properties`); 44 | res.push(""); 45 | 46 | c.properties.forEach((m) => { 47 | res.push("### " + m.name); 48 | res.push(""); 49 | res.push("```ts"); 50 | res.push(m.name + ": " + m.type); 51 | res.push("```"); 52 | res.push(""); 53 | 54 | if (m.documentation) { 55 | res.push(escapeHTML(m.documentation)); 56 | res.push(""); 57 | } 58 | }); 59 | } 60 | 61 | if (c.methods.length > 0) { 62 | res.push(`## Methods`); 63 | res.push(""); 64 | 65 | c.methods.forEach((m) => { 66 | res.push("### " + m.name); 67 | res.push(""); 68 | res.push("```ts"); 69 | res.push(m.raw); 70 | res.push("```"); 71 | res.push(""); 72 | 73 | if (m.documentation) { 74 | res.push(escapeHTML(m.documentation)); 75 | res.push(""); 76 | } 77 | }); 78 | } 79 | 80 | return res.join("\n"); 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /src/printer/enum.ts: -------------------------------------------------------------------------------- 1 | import { Printer } from "."; 2 | import { DocEntry } from "../parser/types"; 3 | import { escapeHTML } from "./utils"; 4 | 5 | export class EnumPrinter implements Printer { 6 | print(e: DocEntry): string { 7 | const res: string[] = []; 8 | 9 | res.push(`# ${e.name}`); 10 | res.push(""); 11 | res.push("```ts"); 12 | res.push(e.raw); 13 | res.push("```"); 14 | res.push(""); 15 | 16 | if (e.documentation) { 17 | res.push(escapeHTML(e.documentation)); 18 | res.push(""); 19 | } 20 | 21 | return res.join("\n"); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/printer/function.ts: -------------------------------------------------------------------------------- 1 | import { Printer } from "."; 2 | import { FunctionDocEntry } from "../parser/types"; 3 | import { escapeHTML } from "./utils"; 4 | 5 | export class FunctionPrinter implements Printer { 6 | print(f: FunctionDocEntry): string { 7 | const res: string[] = []; 8 | 9 | res.push("# " + f.name); 10 | res.push(""); 11 | res.push("```ts"); 12 | res.push(f.raw); 13 | res.push("```"); 14 | res.push(""); 15 | 16 | if (f.documentation) { 17 | res.push(escapeHTML(f.documentation)); 18 | res.push(""); 19 | } 20 | 21 | if (f.parameters.length > 0) { 22 | res.push(`## Parameters`); 23 | res.push(""); 24 | res.push("| Parameter | Description |"); 25 | res.push("|-----------|-------------|"); 26 | 27 | f.parameters.forEach((p) => { 28 | res.push( 29 | "| `" + 30 | p.name + 31 | "` | " + 32 | escapeHTML(p.documentation) + 33 | (p.documentation ? " " : "") + 34 | "|" 35 | ); 36 | }); 37 | res.push(""); 38 | } 39 | 40 | return res.join("\n"); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/printer/index.ts: -------------------------------------------------------------------------------- 1 | import { ParsedFile } from "../parser"; 2 | import { writeFileSync } from "fs"; 3 | import { ClassPrinter } from "./class"; 4 | import { EnumPrinter } from "./enum"; 5 | import { FunctionPrinter } from "./function"; 6 | import { InterfacePrinter } from "./interface"; 7 | import { TypePrinter } from "./type"; 8 | import { ensureDir } from "./utils"; 9 | import * as path from "path"; 10 | import { DocEntry } from "../parser/types"; 11 | import { TocPrinter } from "./toc"; 12 | 13 | /** 14 | * Used to define a printer strategy for a doc entry. 15 | */ 16 | export interface Printer { 17 | print(entry: T): string; 18 | } 19 | 20 | /** 21 | * Writes the parsed doc entries to an directory. 22 | * 23 | * @param input - The parsed file containing the definitions 24 | * @param outputDir - The root directory for the generated docs 25 | */ 26 | export function writeDocs(input: ParsedFile, outputDir: string) { 27 | writeTableOfContents(outputDir, input, new TocPrinter()); 28 | 29 | writeEntriesToFile(outputDir, "classes", input.classes, new ClassPrinter()); 30 | writeEntriesToFile(outputDir, "enums", input.enums, new EnumPrinter()); 31 | writeEntriesToFile( 32 | outputDir, 33 | "functions", 34 | input.functions, 35 | new FunctionPrinter() 36 | ); 37 | writeEntriesToFile( 38 | outputDir, 39 | "interfaces", 40 | input.interfaces, 41 | new InterfacePrinter() 42 | ); 43 | writeEntriesToFile(outputDir, "types", input.types, new TypePrinter()); 44 | } 45 | 46 | /** 47 | * Writes an index.md with the table of contents for all the doc entries. 48 | * 49 | * @param outputDir - The root directory for the generated docs 50 | * @param inputFile - The parsed file containing the definitions 51 | * @param printer - The printer to use for converting the definitions to text 52 | */ 53 | function writeTableOfContents( 54 | outputDir: string, 55 | inputFile: ParsedFile, 56 | printer: TocPrinter 57 | ) { 58 | if (outputDir) { 59 | ensureDir(path.join(outputDir)); 60 | } 61 | 62 | writeFileSync(path.join(outputDir, "index.md"), printer.print(inputFile)); 63 | } 64 | 65 | /** 66 | * Writes a collection of doc entries to a subfolder in the output directory. 67 | * 68 | * @param outputDir - The root directory for the generated docs 69 | * @param sectionDir - The subdirectory for the specific doc entries 70 | * @param entries - The doc entries to write 71 | * @param printer - The printer to use for converting doc entries to text 72 | */ 73 | function writeEntriesToFile( 74 | outputDir: string, 75 | sectionDir: string, 76 | entries: T[], 77 | printer: Printer 78 | ) { 79 | if (entries.length) { 80 | ensureDir(path.join(outputDir, sectionDir)); 81 | } 82 | 83 | entries.forEach((entry) => { 84 | writeFileSync( 85 | path.join(outputDir, sectionDir, entry.name + ".md"), 86 | printer.print(entry) 87 | ); 88 | }); 89 | } 90 | -------------------------------------------------------------------------------- /src/printer/interface.ts: -------------------------------------------------------------------------------- 1 | import { Printer } from "."; 2 | import { InterfaceDocEntry } from "../parser/types"; 3 | import { escapeHTML } from "./utils"; 4 | 5 | export class InterfacePrinter implements Printer { 6 | print(i: InterfaceDocEntry): string { 7 | const res: string[] = []; 8 | 9 | res.push(`# ${i.name}`); 10 | res.push(""); 11 | 12 | if (i.documentation) { 13 | res.push(escapeHTML(i.documentation)); 14 | res.push(""); 15 | } 16 | 17 | if (i.properties.length > 0) { 18 | res.push("## Properties"); 19 | res.push(""); 20 | 21 | i.properties.forEach((m) => { 22 | res.push("### " + m.name); 23 | res.push(""); 24 | res.push("```ts"); 25 | res.push(m.name + ": " + m.type); 26 | res.push("```"); 27 | res.push(""); 28 | 29 | if (m.documentation) { 30 | res.push(escapeHTML(m.documentation)); 31 | res.push(""); 32 | } 33 | }); 34 | } 35 | 36 | if (i.methods.length > 0) { 37 | res.push("## Methods"); 38 | res.push(""); 39 | 40 | i.methods.forEach((m) => { 41 | res.push("### " + m.name); 42 | res.push(""); 43 | res.push("```ts"); 44 | res.push(m.name + ": " + m.type); 45 | res.push("```"); 46 | res.push(""); 47 | 48 | if (m.documentation) { 49 | res.push(escapeHTML(m.documentation)); 50 | res.push(""); 51 | } 52 | }); 53 | } 54 | 55 | return res.join("\n"); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/printer/toc.ts: -------------------------------------------------------------------------------- 1 | import { ParsedFile } from "../parser"; 2 | 3 | export class TocPrinter { 4 | print(input: ParsedFile): string { 5 | const toc: string[] = []; 6 | 7 | toc.push("# API reference"); 8 | toc.push(""); 9 | 10 | toc.push("## Classes"); 11 | toc.push(""); 12 | 13 | input.classes.forEach((c) => { 14 | toc.push(`- [${c.name}](classes/${c.name}.md)`); 15 | }); 16 | 17 | toc.push(""); 18 | toc.push("## Enums"); 19 | toc.push(""); 20 | 21 | input.enums.forEach((e) => { 22 | toc.push(`- [${e.name}](enums/${e.name}.md)`); 23 | }); 24 | 25 | toc.push(""); 26 | toc.push("## Functions"); 27 | toc.push(""); 28 | 29 | input.functions.forEach((f) => { 30 | toc.push(`- [${f.name}](functions/${f.name}.md)`); 31 | }); 32 | 33 | toc.push(""); 34 | toc.push("## Interfaces"); 35 | toc.push(""); 36 | 37 | input.interfaces.forEach((i) => { 38 | toc.push(`- [${i.name}](interfaces/${i.name}.md)`); 39 | }); 40 | 41 | toc.push(""); 42 | toc.push("## Types"); 43 | toc.push(""); 44 | 45 | input.types.forEach((t) => { 46 | toc.push(`- [${t.name}](types/${t.name}.md)`); 47 | }); 48 | 49 | toc.push(""); 50 | 51 | return toc.join("\n"); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/printer/type.ts: -------------------------------------------------------------------------------- 1 | import { Printer } from "."; 2 | import { DocEntry } from "../parser/types"; 3 | import { escapeHTML } from "./utils"; 4 | 5 | export class TypePrinter implements Printer { 6 | print(e: DocEntry): string { 7 | const res: string[] = []; 8 | 9 | res.push(`# ${e.name}`); 10 | res.push(""); 11 | 12 | if (e.raw) { 13 | res.push("```ts"); 14 | res.push(e.raw); 15 | res.push("```"); 16 | res.push(""); 17 | } 18 | 19 | res.push(escapeHTML(e.documentation)); 20 | res.push(""); 21 | 22 | return res.join("\n"); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/printer/utils.ts: -------------------------------------------------------------------------------- 1 | import { existsSync, mkdirSync } from "fs"; 2 | 3 | export const escapeHTML = (str: string): string => { 4 | return str 5 | .replace("|", "|") 6 | .replace("<", "<") 7 | .replace("<", "<") 8 | .replace("<", "<") 9 | .replace(">", ">") 10 | .replace(">", ">") 11 | .replace(">", ">"); 12 | }; 13 | 14 | export function ensureDir(dirPath: string) { 15 | if (!existsSync(dirPath)) { 16 | mkdirSync(dirPath); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /test/class.test.ts: -------------------------------------------------------------------------------- 1 | import { readFileSync } from "fs"; 2 | import * as ts from "typescript"; 3 | import { ClassDocEntry } from "../src/parser/types"; 4 | import { parseClass } from "../src/parser/class"; 5 | import { ClassPrinter } from "../src/printer/class"; 6 | 7 | test("parse class", () => { 8 | const file = "./testdata/class.d.ts"; 9 | const program = ts.createProgram([file], {}); 10 | const sourceFile = program.getSourceFile(file); 11 | const checker = program.getTypeChecker(); 12 | const printer = ts.createPrinter({ 13 | newLine: ts.NewLineKind.LineFeed, 14 | removeComments: true, 15 | }); 16 | 17 | const classes: ClassDocEntry[] = []; 18 | ts.forEachChild(sourceFile, (node) => { 19 | if (ts.isClassDeclaration(node)) { 20 | classes.push(parseClass(node, checker, printer, sourceFile)); 21 | } 22 | }); 23 | 24 | const want: ClassDocEntry[] = [ 25 | { 26 | name: "Vehicle", 27 | documentation: "", 28 | type: "typeof Vehicle", 29 | properties: [], 30 | constructors: [ 31 | { 32 | parameters: [], 33 | documentation: "", 34 | returnType: "Vehicle", 35 | }, 36 | ], 37 | methods: [], 38 | heritage: {}, 39 | }, 40 | { 41 | name: "Car", 42 | documentation: "", 43 | type: "typeof Car", 44 | properties: [ 45 | { 46 | name: "regNum", 47 | documentation: "", 48 | type: "string", 49 | raw: "regNum: string;", 50 | }, 51 | ], 52 | constructors: [ 53 | { 54 | parameters: [ 55 | { 56 | name: "brand", 57 | documentation: "", 58 | type: "string", 59 | }, 60 | { 61 | name: "regNum", 62 | documentation: "", 63 | type: "string", 64 | }, 65 | ], 66 | documentation: "", 67 | returnType: "Car", 68 | }, 69 | ], 70 | methods: [ 71 | { 72 | name: "start", 73 | documentation: "", 74 | raw: "start(): void;", 75 | type: "() => void", 76 | }, 77 | { 78 | name: "stop", 79 | documentation: "", 80 | raw: "stop(): void;", 81 | type: "() => void", 82 | }, 83 | ], 84 | heritage: { 85 | implements: ["Runnable", "Object"], 86 | extends: ["Vehicle"], 87 | }, 88 | }, 89 | ]; 90 | 91 | expect(classes.length).toBe(2); 92 | expect(classes).toEqual(want); 93 | }); 94 | 95 | test("print class", () => { 96 | const got = [ 97 | { 98 | name: "Vehicle", 99 | documentation: "", 100 | type: "typeof Vehicle", 101 | properties: [], 102 | constructors: [ 103 | { 104 | parameters: [], 105 | documentation: "", 106 | returnType: "Vehicle", 107 | }, 108 | ], 109 | methods: [], 110 | heritage: {}, 111 | }, 112 | { 113 | name: "Car", 114 | documentation: "", 115 | type: "typeof Car", 116 | properties: [ 117 | { 118 | name: "regNum", 119 | documentation: "", 120 | type: "string", 121 | raw: "regNum: string;", 122 | }, 123 | ], 124 | constructors: [ 125 | { 126 | parameters: [ 127 | { 128 | name: "brand", 129 | documentation: "", 130 | type: "string", 131 | }, 132 | { 133 | name: "regNum", 134 | documentation: "", 135 | type: "string", 136 | }, 137 | ], 138 | documentation: "", 139 | returnType: "Car", 140 | }, 141 | ], 142 | methods: [ 143 | { 144 | name: "start", 145 | documentation: "", 146 | raw: "start(): void;", 147 | type: "() => void", 148 | }, 149 | { 150 | name: "stop", 151 | documentation: "", 152 | raw: "stop(): void;", 153 | type: "() => void", 154 | }, 155 | ], 156 | heritage: { 157 | implements: ["Runnable", "Object"], 158 | extends: ["Vehicle"], 159 | }, 160 | }, 161 | ]; 162 | 163 | const want = readFileSync("./testdata/class.d.md", "utf-8"); 164 | 165 | const printer = new ClassPrinter(); 166 | 167 | expect(got.map(printer.print).join("\n")).toEqual(want); 168 | }); 169 | -------------------------------------------------------------------------------- /test/enum.test.ts: -------------------------------------------------------------------------------- 1 | import { readFileSync } from "fs"; 2 | import * as ts from "typescript"; 3 | import { DocEntry } from "../src/parser/types"; 4 | import { parseEnum } from "../src/parser/enum"; 5 | import { EnumPrinter } from "../src/printer/enum"; 6 | 7 | test("parse enum", () => { 8 | const file = "./testdata/enum.d.ts"; 9 | const program = ts.createProgram([file], {}); 10 | const sourceFile = program.getSourceFile(file); 11 | const checker = program.getTypeChecker(); 12 | const printer = ts.createPrinter({ 13 | newLine: ts.NewLineKind.LineFeed, 14 | removeComments: true, 15 | }); 16 | 17 | expect(sourceFile).toBeTruthy(); 18 | 19 | const enums: DocEntry[] = []; 20 | 21 | if (sourceFile) { 22 | ts.forEachChild(sourceFile, (node) => { 23 | if (ts.isEnumDeclaration(node)) { 24 | enums.push(parseEnum(node, checker, printer, sourceFile)); 25 | } 26 | }); 27 | } 28 | 29 | const want = [ 30 | { 31 | name: "Direction", 32 | documentation: "The direction.", 33 | type: "typeof Direction", 34 | raw: `export enum Direction { 35 | Up = "UP", 36 | Down = "DOWN", 37 | Left = "LEFT", 38 | Right = "RIGHT" 39 | }`, 40 | }, 41 | ]; 42 | 43 | expect(enums.length).toBe(1); 44 | expect(enums).toEqual(want); 45 | }); 46 | 47 | test("print enum", () => { 48 | const got = [ 49 | { 50 | name: "Direction", 51 | documentation: "The direction.", 52 | type: "typeof Direction", 53 | raw: `export enum Direction { 54 | Up = "UP", 55 | Down = "DOWN", 56 | Left = "LEFT", 57 | Right = "RIGHT" 58 | }`, 59 | }, 60 | ]; 61 | 62 | const want = readFileSync("./testdata/enum.d.md", "utf-8"); 63 | 64 | const printer = new EnumPrinter(); 65 | 66 | expect(got.map(printer.print).join("\n")).toEqual(want); 67 | }); 68 | -------------------------------------------------------------------------------- /test/function.test.ts: -------------------------------------------------------------------------------- 1 | import { readFileSync } from "fs"; 2 | import * as ts from "typescript"; 3 | import { FunctionDocEntry } from "../src/parser/types"; 4 | import { parseFunction } from "../src/parser/function"; 5 | import { FunctionPrinter } from "../src/printer/function"; 6 | 7 | test("parse function", () => { 8 | const file = "./testdata/function.d.ts"; 9 | const program = ts.createProgram([file], {}); 10 | const sourceFile = program.getSourceFile(file); 11 | const checker = program.getTypeChecker(); 12 | const printer = ts.createPrinter({ 13 | newLine: ts.NewLineKind.LineFeed, 14 | removeComments: true, 15 | }); 16 | 17 | const functions: FunctionDocEntry[] = []; 18 | 19 | if (sourceFile) { 20 | ts.forEachChild(sourceFile, (node) => { 21 | if (ts.isFunctionDeclaration(node)) { 22 | functions.push(parseFunction(node, checker, printer, sourceFile)); 23 | } 24 | }); 25 | } 26 | 27 | const want = [ 28 | { 29 | name: "concat", 30 | documentation: "Concatenates two numbers.", 31 | type: "string", 32 | raw: "export function concat(param1: number, param2: number): string;", 33 | parameters: [ 34 | { name: "param1", type: "number", documentation: "the first param" }, 35 | { name: "param2", type: "number", documentation: "the second param" }, 36 | ], 37 | }, 38 | { 39 | name: "sum", 40 | documentation: "", 41 | type: "number", 42 | raw: "export function sum(param1: number, param2: number): number;", 43 | parameters: [ 44 | { name: "param1", type: "number", documentation: "" }, 45 | { name: "param2", type: "number", documentation: "" }, 46 | ], 47 | }, 48 | ]; 49 | 50 | expect(functions.length).toBe(2); 51 | expect(functions).toEqual(want); 52 | }); 53 | 54 | test("print function", () => { 55 | const got = [ 56 | { 57 | name: "concat", 58 | documentation: "Concatenates two numbers.", 59 | type: "string", 60 | raw: "export function concat(param1: number, param2: number): string;", 61 | parameters: [ 62 | { name: "param1", type: "number", documentation: "the first param" }, 63 | { name: "param2", type: "number", documentation: "the second param" }, 64 | ], 65 | }, 66 | { 67 | name: "sum", 68 | documentation: "", 69 | type: "number", 70 | raw: "export function sum(param1: number, param2: number): number;", 71 | parameters: [ 72 | { name: "param1", type: "number", documentation: "" }, 73 | { name: "param2", type: "number", documentation: "" }, 74 | ], 75 | }, 76 | ]; 77 | 78 | const want = readFileSync("./testdata/function.d.md", "utf-8"); 79 | 80 | const printer = new FunctionPrinter(); 81 | 82 | expect(got.map(printer.print).join("\n")).toEqual(want); 83 | }); 84 | -------------------------------------------------------------------------------- /test/interface.test.ts: -------------------------------------------------------------------------------- 1 | import { readFileSync } from "fs"; 2 | import * as ts from "typescript"; 3 | import { InterfaceDocEntry } from "../src/parser/types"; 4 | import { parseInterface } from "../src/parser/interface"; 5 | import { InterfacePrinter } from "../src/printer/interface"; 6 | 7 | test("parse interface", () => { 8 | const file = "./testdata/interface.d.ts"; 9 | const program = ts.createProgram([file], {}); 10 | const sourceFile = program.getSourceFile(file); 11 | const checker = program.getTypeChecker(); 12 | const printer = ts.createPrinter({ 13 | newLine: ts.NewLineKind.LineFeed, 14 | removeComments: true, 15 | }); 16 | 17 | const interfaces: InterfaceDocEntry[] = []; 18 | ts.forEachChild(sourceFile, (node) => { 19 | if (ts.isInterfaceDeclaration(node)) { 20 | interfaces.push(parseInterface(node, checker, printer, sourceFile)); 21 | } 22 | }); 23 | 24 | const want = [ 25 | { 26 | name: "Calculator", 27 | documentation: "The magnificent calculator.", 28 | type: "any", 29 | methods: [ 30 | { 31 | name: "sum", 32 | documentation: "Sums two numbers.", 33 | raw: "sum(param1: number, param2: number): number;", 34 | type: "(param1: number, param2: number) => number", 35 | }, 36 | ], 37 | properties: [ 38 | { 39 | name: "factor", 40 | type: "number", 41 | documentation: "", 42 | raw: "factor: number;", 43 | }, 44 | { 45 | name: "diff", 46 | type: "(param1: number, param2: number) => number", 47 | documentation: "", 48 | raw: "diff: (param1: number, param2: number) => number;", 49 | }, 50 | ], 51 | }, 52 | ]; 53 | 54 | expect(interfaces.length).toBe(1); 55 | expect(interfaces).toEqual(want); 56 | }); 57 | 58 | test("print interface", () => { 59 | const got = [ 60 | { 61 | name: "Calculator", 62 | documentation: "The magnificent calculator.", 63 | type: "any", 64 | methods: [ 65 | { 66 | name: "sum", 67 | documentation: "Sums two numbers.", 68 | raw: "sum(param1: number, param2: number): number;", 69 | type: "(param1: number, param2: number) => number", 70 | }, 71 | ], 72 | properties: [ 73 | { 74 | name: "factor", 75 | type: "number", 76 | documentation: "", 77 | raw: "factor: number;", 78 | }, 79 | { 80 | name: "diff", 81 | type: "(param1: number, param2: number) => number", 82 | documentation: "", 83 | raw: "diff: (param1: number, param2: number) => number;", 84 | }, 85 | ], 86 | }, 87 | ]; 88 | 89 | const want = readFileSync("./testdata/interface.d.md", "utf-8"); 90 | 91 | const printer = new InterfacePrinter(); 92 | 93 | expect(got.map(printer.print).join("\n")).toEqual(want); 94 | }); 95 | -------------------------------------------------------------------------------- /test/tooltip.test.ts: -------------------------------------------------------------------------------- 1 | import { readFileSync } from "fs"; 2 | import * as ts from "typescript"; 3 | import { FunctionDocEntry } from "../src/parser/types"; 4 | import { parseFunction } from "../src/parser/function"; 5 | import { FunctionPrinter } from "../src/printer/function"; 6 | 7 | test("parse tooltip", () => { 8 | const file = "./testdata/tooltip.d.ts"; 9 | const program = ts.createProgram([file], {}); 10 | const sourceFile = program.getSourceFile(file); 11 | const checker = program.getTypeChecker(); 12 | const printer = ts.createPrinter({ 13 | newLine: ts.NewLineKind.LineFeed, 14 | removeComments: true, 15 | }); 16 | 17 | const functions: FunctionDocEntry[] = []; 18 | 19 | if (sourceFile) { 20 | ts.forEachChild(sourceFile, (node) => { 21 | if (ts.isFunctionDeclaration(node)) { 22 | functions.push(parseFunction(node, checker, printer, sourceFile)); 23 | } 24 | }); 25 | } 26 | 27 | const want = readFileSync("./testdata/tooltip.d.md", "utf-8"); 28 | 29 | const fnPrinter = new FunctionPrinter(); 30 | 31 | expect(functions.map(fnPrinter.print).join("\n")).toEqual(want); 32 | }); 33 | -------------------------------------------------------------------------------- /test/type.test.ts: -------------------------------------------------------------------------------- 1 | import { readFileSync } from "fs"; 2 | import * as ts from "typescript"; 3 | import { DocEntry } from "../src/parser/types"; 4 | import { parseType } from "../src/parser/type"; 5 | import { TypePrinter } from "../src/printer/type"; 6 | 7 | test("parse type", () => { 8 | const file = "./testdata/type.d.ts"; 9 | const program = ts.createProgram([file], {}); 10 | const sourceFile = program.getSourceFile(file); 11 | const checker = program.getTypeChecker(); 12 | const printer = ts.createPrinter({ 13 | newLine: ts.NewLineKind.LineFeed, 14 | removeComments: true, 15 | }); 16 | 17 | const enums: DocEntry[] = []; 18 | 19 | if (sourceFile) { 20 | ts.forEachChild(sourceFile, (node) => { 21 | if (ts.isTypeAliasDeclaration(node)) { 22 | enums.push(parseType(node, checker, printer, sourceFile)); 23 | } 24 | }); 25 | } 26 | 27 | const want = [ 28 | { 29 | name: "State", 30 | documentation: "Switch state.", 31 | type: "any", 32 | raw: `export type State = "on" | "off";`, 33 | }, 34 | ]; 35 | 36 | expect(enums.length).toBe(1); 37 | expect(enums).toEqual(want); 38 | }); 39 | 40 | test("print type", () => { 41 | const got = [ 42 | { 43 | name: "State", 44 | documentation: "Switch state.", 45 | type: "any", 46 | raw: `export type State = "on" | "off";`, 47 | }, 48 | ]; 49 | 50 | const want = readFileSync("./testdata/type.d.md", "utf-8"); 51 | 52 | const printer = new TypePrinter(); 53 | 54 | expect(got.map(printer.print).join("\n")).toEqual(want); 55 | }); 56 | -------------------------------------------------------------------------------- /testdata/class.d.md: -------------------------------------------------------------------------------- 1 | # Vehicle 2 | 3 | ## Constructor 4 | 5 | ```ts 6 | constructor(); 7 | ``` 8 | 9 | # Car 10 | 11 | Extends `Vehicle` 12 | 13 | Implements `Runnable`, `Object` 14 | 15 | ## Constructor 16 | 17 | ```ts 18 | constructor(brand: string, regNum: string); 19 | ``` 20 | 21 | ## Properties 22 | 23 | ### regNum 24 | 25 | ```ts 26 | regNum: string 27 | ``` 28 | 29 | ## Methods 30 | 31 | ### start 32 | 33 | ```ts 34 | start(): void; 35 | ``` 36 | 37 | ### stop 38 | 39 | ```ts 40 | stop(): void; 41 | ``` 42 | -------------------------------------------------------------------------------- /testdata/class.d.ts: -------------------------------------------------------------------------------- 1 | export interface Runnable {} 2 | 3 | export interface Object {} 4 | 5 | export abstract class Vehicle {} 6 | 7 | export class Car extends Vehicle implements Runnable, Object { 8 | regNum: string; 9 | 10 | constructor(brand: string, regNum: string); 11 | 12 | start(): void; 13 | 14 | stop(): void; 15 | } 16 | -------------------------------------------------------------------------------- /testdata/enum.d.md: -------------------------------------------------------------------------------- 1 | # Direction 2 | 3 | ```ts 4 | export enum Direction { 5 | Up = "UP", 6 | Down = "DOWN", 7 | Left = "LEFT", 8 | Right = "RIGHT" 9 | } 10 | ``` 11 | 12 | The direction. 13 | -------------------------------------------------------------------------------- /testdata/enum.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * The direction. 3 | */ 4 | export enum Direction { 5 | Up = "UP", 6 | Down = "DOWN", 7 | Left = "LEFT", 8 | Right = "RIGHT", 9 | } 10 | -------------------------------------------------------------------------------- /testdata/function.d.md: -------------------------------------------------------------------------------- 1 | # concat 2 | 3 | ```ts 4 | export function concat(param1: number, param2: number): string; 5 | ``` 6 | 7 | Concatenates two numbers. 8 | 9 | ## Parameters 10 | 11 | | Parameter | Description | 12 | |-----------|-------------| 13 | | `param1` | the first param | 14 | | `param2` | the second param | 15 | 16 | # sum 17 | 18 | ```ts 19 | export function sum(param1: number, param2: number): number; 20 | ``` 21 | 22 | ## Parameters 23 | 24 | | Parameter | Description | 25 | |-----------|-------------| 26 | | `param1` | | 27 | | `param2` | | 28 | -------------------------------------------------------------------------------- /testdata/function.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Concatenates two numbers. 3 | * 4 | * @param param1 - the first param 5 | * @param param2 - the second param 6 | * @returns the concatenated string 7 | */ 8 | export function concat(param1: number, param2: number): string; 9 | 10 | /** 11 | * @public 12 | */ 13 | export function sum(param1: number, param2: number): number; 14 | -------------------------------------------------------------------------------- /testdata/interface.d.md: -------------------------------------------------------------------------------- 1 | # Calculator 2 | 3 | The magnificent calculator. 4 | 5 | ## Properties 6 | 7 | ### factor 8 | 9 | ```ts 10 | factor: number 11 | ``` 12 | 13 | ### diff 14 | 15 | ```ts 16 | diff: (param1: number, param2: number) => number 17 | ``` 18 | 19 | ## Methods 20 | 21 | ### sum 22 | 23 | ```ts 24 | sum: (param1: number, param2: number) => number 25 | ``` 26 | 27 | Sums two numbers. 28 | -------------------------------------------------------------------------------- /testdata/interface.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * The magnificent calculator. 3 | */ 4 | export interface Calculator { 5 | factor: number; 6 | 7 | /** 8 | * @public 9 | */ 10 | diff: (param1: number, param2: number) => number; 11 | 12 | /** 13 | * Sums two numbers. 14 | * 15 | * @param param1 - the first param 16 | * @param param2 - the second param 17 | */ 18 | sum(param1: number, param2: number): number; 19 | } 20 | -------------------------------------------------------------------------------- /testdata/tooltip.d.md: -------------------------------------------------------------------------------- 1 | # setTooltip 2 | 3 | ```ts 4 | export function setTooltip(el: HTMLElement, tooltip: string, options?: TooltipOptions): void; 5 | ``` 6 | 7 | ## Parameters 8 | 9 | | Parameter | Description | 10 | |-----------|-------------| 11 | | `el` | The element to show the tooltip on | 12 | | `tooltip` | The tooltip text to show | 13 | | `options` | | 14 | -------------------------------------------------------------------------------- /testdata/tooltip.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @param el - The element to show the tooltip on 3 | * @param tooltip - The tooltip text to show 4 | * @param options 5 | * @public 6 | */ 7 | export function setTooltip( 8 | el: HTMLElement, 9 | tooltip: string, 10 | options?: TooltipOptions 11 | ): void; 12 | -------------------------------------------------------------------------------- /testdata/type.d.md: -------------------------------------------------------------------------------- 1 | # State 2 | 3 | ```ts 4 | export type State = "on" | "off"; 5 | ``` 6 | 7 | Switch state. 8 | -------------------------------------------------------------------------------- /testdata/type.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Switch state. 3 | */ 4 | export type State = "on" | "off"; 5 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "module": "commonjs", 5 | "moduleResolution": "node", 6 | "sourceMap": true, 7 | "outDir": "dist" 8 | }, 9 | "include": ["src/**/*", "test/**/*", "testdata"] 10 | } 11 | --------------------------------------------------------------------------------