├── .editorconfig ├── .eslintrc.yml ├── .gitignore ├── .husky └── pre-commit ├── .npmrc ├── .prettierignore ├── .prettierrc ├── .vscode └── settings.json ├── LICENSE ├── README.md ├── api └── index.ts ├── docs └── README-ZH.md ├── package.json ├── pnpm-lock.yaml ├── src ├── assets │ ├── brush.svg │ ├── fog-shim-reverse.svg │ ├── fog-shim.svg │ ├── index.ts │ ├── people-texture.svg │ └── people.svg ├── common │ ├── error.ts │ ├── index.ts │ ├── rank.ts │ ├── retries.ts │ └── utils.ts ├── fetchers │ ├── request.ts │ └── stats.ts ├── graphql │ └── index.ts ├── render │ ├── base.ts │ ├── error.ts │ ├── immortality │ │ └── index.ts │ ├── index.ts │ └── render.ts └── types │ ├── github.ts │ ├── request.ts │ └── stats.ts ├── tsconfig.json └── vercel.json /.editorconfig: -------------------------------------------------------------------------------- 1 | # 编辑器规范: https://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_size = 2 7 | indent_style = space 8 | end_of_line = lf 9 | max_line_length = 100 10 | insert_final_newline = true 11 | trim_trailing_whitespace = true 12 | -------------------------------------------------------------------------------- /.eslintrc.yml: -------------------------------------------------------------------------------- 1 | env: 2 | browser: true 3 | es2021: true 4 | extends: 5 | - eslint:recommended 6 | - plugin:@typescript-eslint/recommended 7 | overrides: [] 8 | parser: '@typescript-eslint/parser' 9 | parserOptions: 10 | ecmaVersion: latest 11 | sourceType: module 12 | plugins: 13 | - '@typescript-eslint' 14 | rules: 15 | indent: 16 | - error 17 | - 2 18 | quotes: 19 | - error 20 | - single 21 | semi: 22 | - error 23 | - always 24 | no-control-regex: 25 | - 0 26 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | pnpm-debug.log* 5 | 6 | node_modules 7 | 8 | # Editor directories and files 9 | .idea 10 | .DS_Store 11 | *.suo 12 | *.ntvs* 13 | *.njsproj 14 | *.sln 15 | *.sw? 16 | .vercel 17 | .env 18 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | npx --no-install lint-staged 2 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | registry=https://registry.npmjs.org/ 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | -------------------------------------------------------------------------------- /.prettierrc : -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 2, 3 | "trailingComma": "all", 4 | "useTabs": true, 5 | "endOfLine": "auto", 6 | "proseWrap": "always", 7 | "singleQuote": true 8 | } 9 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "cSpell.words": [ 3 | "retryer" 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 IceEnd 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 | # github-immortality 2 | 3 | [简体中文](./docs/README-ZH.md) 4 | 5 | Based on the system of 'Mortal's Cultivation Journey', a statistical card was created, referencing [github-readme-stats](https://github.dev/anuraghazra/github-readme-stats). 6 | 7 | Github stats card based on the system of "A Record of a Mortal's Journey to Immortality". 8 | 9 | ## Get Start 10 | 11 | By adding a Github username to the URL, you can get a cultivation record card. 12 | 13 | ```markdown 14 | [![IceEnd's GitHub stats](https://github-immortality.vercel.app/api?username=iceend)](https://github.com/IceEnd) 15 | ``` 16 | 17 | ## Demo 18 | 19 | [![IceEnd's GitHub stats](https://github-immortality.vercel.app/api?username=iceend)](https://github.com/IceEnd) 20 | -------------------------------------------------------------------------------- /api/index.ts: -------------------------------------------------------------------------------- 1 | import { VercelRequest, VercelResponse } from '@vercel/node'; 2 | import { renderError, renderStatsCard } from '../src/render'; 3 | import { fetchStats } from '../src/fetchers/stats'; 4 | import { CustomError } from '../src/common/error'; 5 | import { RequestQuery } from '../src/types/request'; 6 | 7 | const main = async (request: VercelRequest, response: VercelResponse) => { 8 | const { username } = request.query as RequestQuery; 9 | response.setHeader('Content-Type', 'image/svg+xml'); 10 | 11 | try { 12 | const stats = await fetchStats(username); 13 | response.status(200); 14 | response.setHeader('Cache-Control', 'max-age=10800'); 15 | response.send(renderStatsCard(stats)); 16 | } catch (error) { 17 | const { message, secondaryMessage } = error as CustomError; 18 | return response.send( 19 | renderError(message, secondaryMessage) 20 | ); 21 | } 22 | }; 23 | 24 | export default main; 25 | -------------------------------------------------------------------------------- /docs/README-ZH.md: -------------------------------------------------------------------------------- 1 | # github-immortality 2 | 3 | 参考了[github-readme-stats](https://github.dev/anuraghazra/github-readme-stats), 制作成的基于《凡人修仙传》体系的统计卡片。 4 | 5 | ## 使用方法 6 | 7 | 通过在链接上加上 Github 用户名,就可以得到一张修仙履历卡片了。 8 | 9 | ```markdown 10 | [![IceEnd's GitHub stats](https://github-immortality.vercel.app/api?username=iceend)](https://github.com/IceEnd) 11 | ``` 12 | 13 | 更改 ?username= 的值为你的 GitHub 用户名。 14 | 15 | ## Demo 16 | 17 | [![IceEnd's GitHub stats](https://github-immortality.vercel.app/api?username=iceend)](https://github.com/IceEnd) 18 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "github-immortality", 3 | "version": "1.0.0", 4 | "keywords": [ 5 | "readme-stats" 6 | ], 7 | "description": "Dynamically generate stats for your GitHub readme", 8 | "main": "index.js", 9 | "scripts": { 10 | "start": "vercel dev", 11 | "prepare": "husky" 12 | }, 13 | "author": "Alchemy", 14 | "dependencies": { 15 | "axios": "^1.6.8", 16 | "word-wrap": "^1.2.5" 17 | }, 18 | "devDependencies": { 19 | "@types/node": "^20.12.7", 20 | "@typescript-eslint/eslint-plugin": "^7.6.0", 21 | "@typescript-eslint/parser": "^7.6.0", 22 | "@vercel/node": "^3.1.5", 23 | "eslint": "^8.57.0", 24 | "eslint-config-prettier": "^9.1.0", 25 | "eslint-define-config": "^2.1.0", 26 | "eslint-plugin-prettier": "^5.1.3", 27 | "husky": "^9.0.11", 28 | "lint-staged": "^15.2.2", 29 | "prettier": "^3.2.5", 30 | "typescript": "^5.4.2", 31 | "vercel": "^34.2.0" 32 | }, 33 | "lint-staged": { 34 | "*.{js,ts}": [ 35 | "eslint --fix" 36 | ] 37 | }, 38 | "license": "MIT", 39 | "engines": { 40 | "node": ">=18.0.0", 41 | "pnpm": ">=8.14.3", 42 | "npm": "please-use-pnpm", 43 | "yarn": "please-use-pnpm" 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | axios: 9 | specifier: ^1.6.8 10 | version: 1.6.8 11 | word-wrap: 12 | specifier: ^1.2.5 13 | version: 1.2.5 14 | 15 | devDependencies: 16 | '@types/node': 17 | specifier: ^20.12.7 18 | version: 20.12.7 19 | '@typescript-eslint/eslint-plugin': 20 | specifier: ^7.6.0 21 | version: 7.6.0(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(typescript@5.4.5) 22 | '@typescript-eslint/parser': 23 | specifier: ^7.6.0 24 | version: 7.6.0(eslint@8.57.0)(typescript@5.4.5) 25 | '@vercel/node': 26 | specifier: ^3.1.5 27 | version: 3.1.5 28 | eslint: 29 | specifier: ^8.57.0 30 | version: 8.57.0 31 | eslint-config-prettier: 32 | specifier: ^9.1.0 33 | version: 9.1.0(eslint@8.57.0) 34 | eslint-define-config: 35 | specifier: ^2.1.0 36 | version: 2.1.0 37 | eslint-plugin-prettier: 38 | specifier: ^5.1.3 39 | version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5) 40 | husky: 41 | specifier: ^9.0.11 42 | version: 9.0.11 43 | lint-staged: 44 | specifier: ^15.2.2 45 | version: 15.2.2 46 | prettier: 47 | specifier: ^3.2.5 48 | version: 3.2.5 49 | typescript: 50 | specifier: ^5.4.2 51 | version: 5.4.5 52 | vercel: 53 | specifier: ^34.2.0 54 | version: 34.2.0 55 | 56 | packages: 57 | 58 | /@aashutoshrathi/word-wrap@1.2.6: 59 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} 60 | engines: {node: '>=0.10.0'} 61 | dev: true 62 | 63 | /@cspotcode/source-map-support@0.8.1: 64 | resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} 65 | engines: {node: '>=12'} 66 | dependencies: 67 | '@jridgewell/trace-mapping': 0.3.9 68 | dev: true 69 | 70 | /@edge-runtime/format@2.2.1: 71 | resolution: {integrity: sha512-JQTRVuiusQLNNLe2W9tnzBlV/GvSVcozLl4XZHk5swnRZ/v6jp8TqR8P7sqmJsQqblDZ3EztcWmLDbhRje/+8g==} 72 | engines: {node: '>=16'} 73 | dev: true 74 | 75 | /@edge-runtime/node-utils@2.3.0: 76 | resolution: {integrity: sha512-uUtx8BFoO1hNxtHjp3eqVPC/mWImGb2exOfGjMLUoipuWgjej+f4o/VP4bUI8U40gu7Teogd5VTeZUkGvJSPOQ==} 77 | engines: {node: '>=16'} 78 | dev: true 79 | 80 | /@edge-runtime/ponyfill@2.4.2: 81 | resolution: {integrity: sha512-oN17GjFr69chu6sDLvXxdhg0Qe8EZviGSuqzR9qOiKh4MhFYGdBBcqRNzdmYeAdeRzOW2mM9yil4RftUQ7sUOA==} 82 | engines: {node: '>=16'} 83 | dev: true 84 | 85 | /@edge-runtime/primitives@4.1.0: 86 | resolution: {integrity: sha512-Vw0lbJ2lvRUqc7/soqygUX216Xb8T3WBZ987oywz6aJqRxcwSVWwr9e+Nqo2m9bxobA9mdbWNNoRY6S9eko1EQ==} 87 | engines: {node: '>=16'} 88 | dev: true 89 | 90 | /@edge-runtime/vm@3.2.0: 91 | resolution: {integrity: sha512-0dEVyRLM/lG4gp1R/Ik5bfPl/1wX00xFwd5KcNH602tzBa09oF7pbTKETEhR1GjZ75K6OJnYFu8II2dyMhONMw==} 92 | engines: {node: '>=16'} 93 | dependencies: 94 | '@edge-runtime/primitives': 4.1.0 95 | dev: true 96 | 97 | /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): 98 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 99 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 100 | peerDependencies: 101 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 102 | dependencies: 103 | eslint: 8.57.0 104 | eslint-visitor-keys: 3.4.3 105 | dev: true 106 | 107 | /@eslint-community/regexpp@4.10.0: 108 | resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} 109 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 110 | dev: true 111 | 112 | /@eslint/eslintrc@2.1.4: 113 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} 114 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 115 | dependencies: 116 | ajv: 6.12.6 117 | debug: 4.3.4 118 | espree: 9.6.1 119 | globals: 13.24.0 120 | ignore: 5.3.1 121 | import-fresh: 3.3.0 122 | js-yaml: 4.1.0 123 | minimatch: 3.1.2 124 | strip-json-comments: 3.1.1 125 | transitivePeerDependencies: 126 | - supports-color 127 | dev: true 128 | 129 | /@eslint/js@8.57.0: 130 | resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} 131 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 132 | dev: true 133 | 134 | /@fastify/busboy@2.1.1: 135 | resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} 136 | engines: {node: '>=14'} 137 | dev: true 138 | 139 | /@humanwhocodes/config-array@0.11.14: 140 | resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} 141 | engines: {node: '>=10.10.0'} 142 | dependencies: 143 | '@humanwhocodes/object-schema': 2.0.3 144 | debug: 4.3.4 145 | minimatch: 3.1.2 146 | transitivePeerDependencies: 147 | - supports-color 148 | dev: true 149 | 150 | /@humanwhocodes/module-importer@1.0.1: 151 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 152 | engines: {node: '>=12.22'} 153 | dev: true 154 | 155 | /@humanwhocodes/object-schema@2.0.3: 156 | resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} 157 | dev: true 158 | 159 | /@jridgewell/resolve-uri@3.1.2: 160 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 161 | engines: {node: '>=6.0.0'} 162 | dev: true 163 | 164 | /@jridgewell/sourcemap-codec@1.4.15: 165 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 166 | dev: true 167 | 168 | /@jridgewell/trace-mapping@0.3.9: 169 | resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 170 | dependencies: 171 | '@jridgewell/resolve-uri': 3.1.2 172 | '@jridgewell/sourcemap-codec': 1.4.15 173 | dev: true 174 | 175 | /@mapbox/node-pre-gyp@1.0.11: 176 | resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} 177 | hasBin: true 178 | dependencies: 179 | detect-libc: 2.0.3 180 | https-proxy-agent: 5.0.1 181 | make-dir: 3.1.0 182 | node-fetch: 2.7.0 183 | nopt: 5.0.0 184 | npmlog: 5.0.1 185 | rimraf: 3.0.2 186 | semver: 7.6.0 187 | tar: 6.2.1 188 | transitivePeerDependencies: 189 | - encoding 190 | - supports-color 191 | dev: true 192 | 193 | /@nodelib/fs.scandir@2.1.5: 194 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 195 | engines: {node: '>= 8'} 196 | dependencies: 197 | '@nodelib/fs.stat': 2.0.5 198 | run-parallel: 1.2.0 199 | dev: true 200 | 201 | /@nodelib/fs.stat@2.0.5: 202 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 203 | engines: {node: '>= 8'} 204 | dev: true 205 | 206 | /@nodelib/fs.walk@1.2.8: 207 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 208 | engines: {node: '>= 8'} 209 | dependencies: 210 | '@nodelib/fs.scandir': 2.1.5 211 | fastq: 1.17.1 212 | dev: true 213 | 214 | /@pkgr/core@0.1.1: 215 | resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} 216 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 217 | dev: true 218 | 219 | /@rollup/pluginutils@4.2.1: 220 | resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} 221 | engines: {node: '>= 8.0.0'} 222 | dependencies: 223 | estree-walker: 2.0.2 224 | picomatch: 2.3.1 225 | dev: true 226 | 227 | /@sinclair/typebox@0.25.24: 228 | resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} 229 | dev: true 230 | 231 | /@tootallnate/once@2.0.0: 232 | resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} 233 | engines: {node: '>= 10'} 234 | dev: true 235 | 236 | /@ts-morph/common@0.11.1: 237 | resolution: {integrity: sha512-7hWZS0NRpEsNV8vWJzg7FEz6V8MaLNeJOmwmghqUXTpzk16V1LLZhdo+4QvE/+zv4cVci0OviuJFnqhEfoV3+g==} 238 | dependencies: 239 | fast-glob: 3.3.2 240 | minimatch: 3.1.2 241 | mkdirp: 1.0.4 242 | path-browserify: 1.0.1 243 | dev: true 244 | 245 | /@tsconfig/node10@1.0.11: 246 | resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} 247 | dev: true 248 | 249 | /@tsconfig/node12@1.0.11: 250 | resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} 251 | dev: true 252 | 253 | /@tsconfig/node14@1.0.3: 254 | resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} 255 | dev: true 256 | 257 | /@tsconfig/node16@1.0.4: 258 | resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} 259 | dev: true 260 | 261 | /@types/json-schema@7.0.15: 262 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 263 | dev: true 264 | 265 | /@types/node@16.18.11: 266 | resolution: {integrity: sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==} 267 | dev: true 268 | 269 | /@types/node@20.12.7: 270 | resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} 271 | dependencies: 272 | undici-types: 5.26.5 273 | dev: true 274 | 275 | /@types/semver@7.5.8: 276 | resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} 277 | dev: true 278 | 279 | /@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(typescript@5.4.5): 280 | resolution: {integrity: sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==} 281 | engines: {node: ^18.18.0 || >=20.0.0} 282 | peerDependencies: 283 | '@typescript-eslint/parser': ^7.0.0 284 | eslint: ^8.56.0 285 | typescript: '*' 286 | peerDependenciesMeta: 287 | typescript: 288 | optional: true 289 | dependencies: 290 | '@eslint-community/regexpp': 4.10.0 291 | '@typescript-eslint/parser': 7.6.0(eslint@8.57.0)(typescript@5.4.5) 292 | '@typescript-eslint/scope-manager': 7.6.0 293 | '@typescript-eslint/type-utils': 7.6.0(eslint@8.57.0)(typescript@5.4.5) 294 | '@typescript-eslint/utils': 7.6.0(eslint@8.57.0)(typescript@5.4.5) 295 | '@typescript-eslint/visitor-keys': 7.6.0 296 | debug: 4.3.4 297 | eslint: 8.57.0 298 | graphemer: 1.4.0 299 | ignore: 5.3.1 300 | natural-compare: 1.4.0 301 | semver: 7.6.0 302 | ts-api-utils: 1.3.0(typescript@5.4.5) 303 | typescript: 5.4.5 304 | transitivePeerDependencies: 305 | - supports-color 306 | dev: true 307 | 308 | /@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5): 309 | resolution: {integrity: sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==} 310 | engines: {node: ^18.18.0 || >=20.0.0} 311 | peerDependencies: 312 | eslint: ^8.56.0 313 | typescript: '*' 314 | peerDependenciesMeta: 315 | typescript: 316 | optional: true 317 | dependencies: 318 | '@typescript-eslint/scope-manager': 7.6.0 319 | '@typescript-eslint/types': 7.6.0 320 | '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.5) 321 | '@typescript-eslint/visitor-keys': 7.6.0 322 | debug: 4.3.4 323 | eslint: 8.57.0 324 | typescript: 5.4.5 325 | transitivePeerDependencies: 326 | - supports-color 327 | dev: true 328 | 329 | /@typescript-eslint/scope-manager@7.6.0: 330 | resolution: {integrity: sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==} 331 | engines: {node: ^18.18.0 || >=20.0.0} 332 | dependencies: 333 | '@typescript-eslint/types': 7.6.0 334 | '@typescript-eslint/visitor-keys': 7.6.0 335 | dev: true 336 | 337 | /@typescript-eslint/type-utils@7.6.0(eslint@8.57.0)(typescript@5.4.5): 338 | resolution: {integrity: sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==} 339 | engines: {node: ^18.18.0 || >=20.0.0} 340 | peerDependencies: 341 | eslint: ^8.56.0 342 | typescript: '*' 343 | peerDependenciesMeta: 344 | typescript: 345 | optional: true 346 | dependencies: 347 | '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.5) 348 | '@typescript-eslint/utils': 7.6.0(eslint@8.57.0)(typescript@5.4.5) 349 | debug: 4.3.4 350 | eslint: 8.57.0 351 | ts-api-utils: 1.3.0(typescript@5.4.5) 352 | typescript: 5.4.5 353 | transitivePeerDependencies: 354 | - supports-color 355 | dev: true 356 | 357 | /@typescript-eslint/types@7.6.0: 358 | resolution: {integrity: sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==} 359 | engines: {node: ^18.18.0 || >=20.0.0} 360 | dev: true 361 | 362 | /@typescript-eslint/typescript-estree@7.6.0(typescript@5.4.5): 363 | resolution: {integrity: sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==} 364 | engines: {node: ^18.18.0 || >=20.0.0} 365 | peerDependencies: 366 | typescript: '*' 367 | peerDependenciesMeta: 368 | typescript: 369 | optional: true 370 | dependencies: 371 | '@typescript-eslint/types': 7.6.0 372 | '@typescript-eslint/visitor-keys': 7.6.0 373 | debug: 4.3.4 374 | globby: 11.1.0 375 | is-glob: 4.0.3 376 | minimatch: 9.0.4 377 | semver: 7.6.0 378 | ts-api-utils: 1.3.0(typescript@5.4.5) 379 | typescript: 5.4.5 380 | transitivePeerDependencies: 381 | - supports-color 382 | dev: true 383 | 384 | /@typescript-eslint/utils@7.6.0(eslint@8.57.0)(typescript@5.4.5): 385 | resolution: {integrity: sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==} 386 | engines: {node: ^18.18.0 || >=20.0.0} 387 | peerDependencies: 388 | eslint: ^8.56.0 389 | dependencies: 390 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) 391 | '@types/json-schema': 7.0.15 392 | '@types/semver': 7.5.8 393 | '@typescript-eslint/scope-manager': 7.6.0 394 | '@typescript-eslint/types': 7.6.0 395 | '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.5) 396 | eslint: 8.57.0 397 | semver: 7.6.0 398 | transitivePeerDependencies: 399 | - supports-color 400 | - typescript 401 | dev: true 402 | 403 | /@typescript-eslint/visitor-keys@7.6.0: 404 | resolution: {integrity: sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==} 405 | engines: {node: ^18.18.0 || >=20.0.0} 406 | dependencies: 407 | '@typescript-eslint/types': 7.6.0 408 | eslint-visitor-keys: 3.4.3 409 | dev: true 410 | 411 | /@ungap/structured-clone@1.2.0: 412 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} 413 | dev: true 414 | 415 | /@vercel/build-utils@8.2.0: 416 | resolution: {integrity: sha512-yDr/zp/SX45mIy6DO8IRD6hmEs6gIr33/ajT3y8efUt/crQvgNtaSkbx9ubbwkR4RV/qKL213v6kXxj+EpsnlQ==} 417 | dev: true 418 | 419 | /@vercel/error-utils@2.0.2: 420 | resolution: {integrity: sha512-Sj0LFafGpYr6pfCqrQ82X6ukRl5qpmVrHM/191kNYFqkkB9YkjlMAj6QcEsvCG259x4QZ7Tya++0AB85NDPbKQ==} 421 | dev: true 422 | 423 | /@vercel/fun@1.1.0: 424 | resolution: {integrity: sha512-SpuPAo+MlAYMtcMcC0plx7Tv4Mp7SQhJJj1iIENlOnABL24kxHpL09XLQMGzZIzIW7upR8c3edwgfpRtp+dhVw==} 425 | engines: {node: '>= 10'} 426 | dependencies: 427 | '@tootallnate/once': 2.0.0 428 | async-listen: 1.2.0 429 | debug: 4.1.1 430 | execa: 3.2.0 431 | fs-extra: 8.1.0 432 | generic-pool: 3.4.2 433 | micro: 9.3.5-canary.3 434 | ms: 2.1.1 435 | node-fetch: 2.6.7 436 | path-match: 1.2.4 437 | promisepipe: 3.0.0 438 | semver: 7.3.5 439 | stat-mode: 0.3.0 440 | stream-to-promise: 2.2.0 441 | tar: 4.4.18 442 | tree-kill: 1.2.2 443 | uid-promise: 1.0.0 444 | uuid: 3.3.2 445 | xdg-app-paths: 5.1.0 446 | yauzl-promise: 2.1.3 447 | transitivePeerDependencies: 448 | - encoding 449 | - supports-color 450 | dev: true 451 | 452 | /@vercel/gatsby-plugin-vercel-analytics@1.0.11: 453 | resolution: {integrity: sha512-iTEA0vY6RBPuEzkwUTVzSHDATo1aF6bdLLspI68mQ/BTbi5UQEGjpjyzdKOVcSYApDtFU6M6vypZ1t4vIEnHvw==} 454 | dependencies: 455 | web-vitals: 0.2.4 456 | dev: true 457 | 458 | /@vercel/gatsby-plugin-vercel-builder@2.0.31: 459 | resolution: {integrity: sha512-p0ggHYNe8tMVlsBYVHwjavLpOtkxbw+VN1ywzsIcqnwJpYi9HSgbm+zRxmNqz/4autn6KZCmgEcWanhjhMaH5Q==} 460 | dependencies: 461 | '@sinclair/typebox': 0.25.24 462 | '@vercel/build-utils': 8.2.0 463 | '@vercel/routing-utils': 3.1.0 464 | esbuild: 0.14.47 465 | etag: 1.8.1 466 | fs-extra: 11.1.0 467 | dev: true 468 | 469 | /@vercel/go@3.1.1: 470 | resolution: {integrity: sha512-mrzomNYltxkjvtUmaYry5YEyvwTz6c/QQHE5Gr/pPGRIniUiP6T6OFOJ49RBN7e6pRXaNzHPVuidiuBhvHh5+Q==} 471 | dev: true 472 | 473 | /@vercel/hydrogen@1.0.2: 474 | resolution: {integrity: sha512-/Q2MKk1GfOuZAnkE9jQexjtUQqanbY65R+xtJWd9yKIgwcfRI1hxiNH3uXyVM5AvLoY+fxxULkSuxDtUKpkJpQ==} 475 | dependencies: 476 | '@vercel/static-config': 3.0.0 477 | ts-morph: 12.0.0 478 | dev: true 479 | 480 | /@vercel/next@4.2.11: 481 | resolution: {integrity: sha512-jCMTa75CIkX8vfY4BiW6BajSLXXQRE1doNeX9nO+gzYtaKTfxB5FiVKNAocjDwP249WIR0o1vziHus5bX84jFg==} 482 | dependencies: 483 | '@vercel/nft': 0.27.0 484 | transitivePeerDependencies: 485 | - encoding 486 | - supports-color 487 | dev: true 488 | 489 | /@vercel/nft@0.27.0: 490 | resolution: {integrity: sha512-W5pValyhToK9hbgEUAM6sLRUIl1I++RsFnXKHXtND50P1+vZ+OYPCzq1OOz0Ok6ghK6aOwae8G/rEAXkLedC+w==} 491 | engines: {node: '>=16'} 492 | hasBin: true 493 | dependencies: 494 | '@mapbox/node-pre-gyp': 1.0.11 495 | '@rollup/pluginutils': 4.2.1 496 | acorn: 8.11.3 497 | acorn-import-attributes: 1.9.5(acorn@8.11.3) 498 | async-sema: 3.1.1 499 | bindings: 1.5.0 500 | estree-walker: 2.0.2 501 | glob: 7.2.3 502 | graceful-fs: 4.2.11 503 | micromatch: 4.0.5 504 | node-gyp-build: 4.8.0 505 | resolve-from: 5.0.0 506 | transitivePeerDependencies: 507 | - encoding 508 | - supports-color 509 | dev: true 510 | 511 | /@vercel/node@3.1.5: 512 | resolution: {integrity: sha512-1LVqdL/HKrfuLGIWEHm7O/zA6admKRClIuJOVsasvW0PHrrwUUfcoKvgHj/sH6HUEzgE9WIelqFLe8/j/tzA4A==} 513 | dependencies: 514 | '@edge-runtime/node-utils': 2.3.0 515 | '@edge-runtime/primitives': 4.1.0 516 | '@edge-runtime/vm': 3.2.0 517 | '@types/node': 16.18.11 518 | '@vercel/build-utils': 8.2.0 519 | '@vercel/error-utils': 2.0.2 520 | '@vercel/nft': 0.27.0 521 | '@vercel/static-config': 3.0.0 522 | async-listen: 3.0.0 523 | cjs-module-lexer: 1.2.3 524 | edge-runtime: 2.5.9 525 | es-module-lexer: 1.4.1 526 | esbuild: 0.14.47 527 | etag: 1.8.1 528 | node-fetch: 2.6.9 529 | path-to-regexp: 6.2.1 530 | ts-morph: 12.0.0 531 | ts-node: 10.9.1(@types/node@16.18.11)(typescript@4.9.5) 532 | typescript: 4.9.5 533 | undici: 5.26.5 534 | transitivePeerDependencies: 535 | - '@swc/core' 536 | - '@swc/wasm' 537 | - encoding 538 | - supports-color 539 | dev: true 540 | 541 | /@vercel/python@4.2.0: 542 | resolution: {integrity: sha512-oubkmRRxWQJGGYFq5Q49/2c94aHKCYXB+DkdtaW55syQ9N0LVBXCnCMZ4ZatSrSI18d9mMoDSx3xi4gtByy9NA==} 543 | dev: true 544 | 545 | /@vercel/redwood@2.0.9: 546 | resolution: {integrity: sha512-zv0uJa+XtCJ15TdfCI5ybZM1hS3OBl28idCfN3vtWR+g5HjDSW8acYOzRw2Xy7wM1f+Fje1/Nx2AdYjCM4TWTA==} 547 | dependencies: 548 | '@vercel/nft': 0.27.0 549 | '@vercel/routing-utils': 3.1.0 550 | semver: 6.3.1 551 | transitivePeerDependencies: 552 | - encoding 553 | - supports-color 554 | dev: true 555 | 556 | /@vercel/remix-builder@2.1.6: 557 | resolution: {integrity: sha512-n2gnNW9HTWlTuEwTbtVI9GRHoQi/2kPu44l0zvFDw8GlsswW0/qJPvr8SFG83FDylQcafvW8LUWO9oXefuVrFA==} 558 | dependencies: 559 | '@vercel/error-utils': 2.0.2 560 | '@vercel/nft': 0.27.0 561 | '@vercel/static-config': 3.0.0 562 | ts-morph: 12.0.0 563 | transitivePeerDependencies: 564 | - encoding 565 | - supports-color 566 | dev: true 567 | 568 | /@vercel/routing-utils@3.1.0: 569 | resolution: {integrity: sha512-Ci5xTjVTJY/JLZXpCXpLehMft97i9fH34nu9PGav6DtwkVUF6TOPX86U0W0niQjMZ5n6/ZP0BwcJK2LOozKaGw==} 570 | dependencies: 571 | path-to-regexp: 6.1.0 572 | optionalDependencies: 573 | ajv: 6.12.6 574 | dev: true 575 | 576 | /@vercel/ruby@2.1.0: 577 | resolution: {integrity: sha512-UZYwlSEEfVnfzTmgkD+kxex9/gkZGt7unOWNyWFN7V/ZnZSsGBUgv6hXLnwejdRi3EztgRQEBd1kUKlXdIeC0Q==} 578 | dev: true 579 | 580 | /@vercel/static-build@2.5.9: 581 | resolution: {integrity: sha512-jnFwCvRlBsSg8vDPahuSOvo3LvmTCzlNi6ES3fy+kaXxUK/xxDA8BGssDvWRLJIGSHNjfi6M92zGy15vjpG92A==} 582 | dependencies: 583 | '@vercel/gatsby-plugin-vercel-analytics': 1.0.11 584 | '@vercel/gatsby-plugin-vercel-builder': 2.0.31 585 | '@vercel/static-config': 3.0.0 586 | ts-morph: 12.0.0 587 | dev: true 588 | 589 | /@vercel/static-config@3.0.0: 590 | resolution: {integrity: sha512-2qtvcBJ1bGY0dYGYh3iM7yGKkk971FujLEDXzuW5wcZsPr1GSEjO/w2iSr3qve6nDDtBImsGoDEnus5FI4+fIw==} 591 | dependencies: 592 | ajv: 8.6.3 593 | json-schema-to-ts: 1.6.4 594 | ts-morph: 12.0.0 595 | dev: true 596 | 597 | /abbrev@1.1.1: 598 | resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} 599 | dev: true 600 | 601 | /acorn-import-attributes@1.9.5(acorn@8.11.3): 602 | resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} 603 | peerDependencies: 604 | acorn: ^8 605 | dependencies: 606 | acorn: 8.11.3 607 | dev: true 608 | 609 | /acorn-jsx@5.3.2(acorn@8.11.3): 610 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 611 | peerDependencies: 612 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 613 | dependencies: 614 | acorn: 8.11.3 615 | dev: true 616 | 617 | /acorn-walk@8.3.2: 618 | resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} 619 | engines: {node: '>=0.4.0'} 620 | dev: true 621 | 622 | /acorn@8.11.3: 623 | resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} 624 | engines: {node: '>=0.4.0'} 625 | hasBin: true 626 | dev: true 627 | 628 | /agent-base@6.0.2: 629 | resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} 630 | engines: {node: '>= 6.0.0'} 631 | dependencies: 632 | debug: 4.3.4 633 | transitivePeerDependencies: 634 | - supports-color 635 | dev: true 636 | 637 | /ajv@6.12.6: 638 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 639 | dependencies: 640 | fast-deep-equal: 3.1.3 641 | fast-json-stable-stringify: 2.1.0 642 | json-schema-traverse: 0.4.1 643 | uri-js: 4.4.1 644 | dev: true 645 | 646 | /ajv@8.6.3: 647 | resolution: {integrity: sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==} 648 | dependencies: 649 | fast-deep-equal: 3.1.3 650 | json-schema-traverse: 1.0.0 651 | require-from-string: 2.0.2 652 | uri-js: 4.4.1 653 | dev: true 654 | 655 | /ansi-escapes@6.2.1: 656 | resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==} 657 | engines: {node: '>=14.16'} 658 | dev: true 659 | 660 | /ansi-regex@5.0.1: 661 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 662 | engines: {node: '>=8'} 663 | dev: true 664 | 665 | /ansi-regex@6.0.1: 666 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} 667 | engines: {node: '>=12'} 668 | dev: true 669 | 670 | /ansi-styles@4.3.0: 671 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 672 | engines: {node: '>=8'} 673 | dependencies: 674 | color-convert: 2.0.1 675 | dev: true 676 | 677 | /ansi-styles@6.2.1: 678 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 679 | engines: {node: '>=12'} 680 | dev: true 681 | 682 | /any-promise@1.3.0: 683 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 684 | dev: true 685 | 686 | /anymatch@3.1.3: 687 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 688 | engines: {node: '>= 8'} 689 | dependencies: 690 | normalize-path: 3.0.0 691 | picomatch: 2.3.1 692 | dev: true 693 | 694 | /aproba@2.0.0: 695 | resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} 696 | dev: true 697 | 698 | /are-we-there-yet@2.0.0: 699 | resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} 700 | engines: {node: '>=10'} 701 | dependencies: 702 | delegates: 1.0.0 703 | readable-stream: 3.6.2 704 | dev: true 705 | 706 | /arg@4.1.0: 707 | resolution: {integrity: sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==} 708 | dev: true 709 | 710 | /arg@4.1.3: 711 | resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} 712 | dev: true 713 | 714 | /argparse@2.0.1: 715 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 716 | dev: true 717 | 718 | /array-union@2.1.0: 719 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 720 | engines: {node: '>=8'} 721 | dev: true 722 | 723 | /async-listen@1.2.0: 724 | resolution: {integrity: sha512-CcEtRh/oc9Jc4uWeUwdpG/+Mb2YUHKmdaTf0gUr7Wa+bfp4xx70HOb3RuSTJMvqKNB1TkdTfjLdrcz2X4rkkZA==} 725 | dev: true 726 | 727 | /async-listen@3.0.0: 728 | resolution: {integrity: sha512-V+SsTpDqkrWTimiotsyl33ePSjA5/KrithwupuvJ6ztsqPvGv6ge4OredFhPffVXiLN/QUWvE0XcqJaYgt6fOg==} 729 | engines: {node: '>= 14'} 730 | dev: true 731 | 732 | /async-listen@3.0.1: 733 | resolution: {integrity: sha512-cWMaNwUJnf37C/S5TfCkk/15MwbPRwVYALA2jtjkbHjCmAPiDXyNJy2q3p1KAZzDLHAWyarUWSujUoHR4pEgrA==} 734 | engines: {node: '>= 14'} 735 | dev: true 736 | 737 | /async-sema@3.1.1: 738 | resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} 739 | dev: true 740 | 741 | /asynckit@0.4.0: 742 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 743 | dev: false 744 | 745 | /axios@1.6.8: 746 | resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==} 747 | dependencies: 748 | follow-redirects: 1.15.6 749 | form-data: 4.0.0 750 | proxy-from-env: 1.1.0 751 | transitivePeerDependencies: 752 | - debug 753 | dev: false 754 | 755 | /balanced-match@1.0.2: 756 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 757 | dev: true 758 | 759 | /binary-extensions@2.3.0: 760 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 761 | engines: {node: '>=8'} 762 | dev: true 763 | 764 | /bindings@1.5.0: 765 | resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} 766 | dependencies: 767 | file-uri-to-path: 1.0.0 768 | dev: true 769 | 770 | /brace-expansion@1.1.11: 771 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 772 | dependencies: 773 | balanced-match: 1.0.2 774 | concat-map: 0.0.1 775 | dev: true 776 | 777 | /brace-expansion@2.0.1: 778 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 779 | dependencies: 780 | balanced-match: 1.0.2 781 | dev: true 782 | 783 | /braces@3.0.2: 784 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 785 | engines: {node: '>=8'} 786 | dependencies: 787 | fill-range: 7.0.1 788 | dev: true 789 | 790 | /buffer-crc32@0.2.13: 791 | resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} 792 | dev: true 793 | 794 | /bytes@3.1.0: 795 | resolution: {integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==} 796 | engines: {node: '>= 0.8'} 797 | dev: true 798 | 799 | /callsites@3.1.0: 800 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 801 | engines: {node: '>=6'} 802 | dev: true 803 | 804 | /chalk@4.1.2: 805 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 806 | engines: {node: '>=10'} 807 | dependencies: 808 | ansi-styles: 4.3.0 809 | supports-color: 7.2.0 810 | dev: true 811 | 812 | /chalk@5.3.0: 813 | resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} 814 | engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} 815 | dev: true 816 | 817 | /chokidar@3.3.1: 818 | resolution: {integrity: sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==} 819 | engines: {node: '>= 8.10.0'} 820 | dependencies: 821 | anymatch: 3.1.3 822 | braces: 3.0.2 823 | glob-parent: 5.1.2 824 | is-binary-path: 2.1.0 825 | is-glob: 4.0.3 826 | normalize-path: 3.0.0 827 | readdirp: 3.3.0 828 | optionalDependencies: 829 | fsevents: 2.1.3 830 | dev: true 831 | 832 | /chownr@1.1.4: 833 | resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} 834 | dev: true 835 | 836 | /chownr@2.0.0: 837 | resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} 838 | engines: {node: '>=10'} 839 | dev: true 840 | 841 | /cjs-module-lexer@1.2.3: 842 | resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} 843 | dev: true 844 | 845 | /cli-cursor@4.0.0: 846 | resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} 847 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 848 | dependencies: 849 | restore-cursor: 4.0.0 850 | dev: true 851 | 852 | /cli-truncate@4.0.0: 853 | resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} 854 | engines: {node: '>=18'} 855 | dependencies: 856 | slice-ansi: 5.0.0 857 | string-width: 7.1.0 858 | dev: true 859 | 860 | /code-block-writer@10.1.1: 861 | resolution: {integrity: sha512-67ueh2IRGst/51p0n6FvPrnRjAGHY5F8xdjkgrYE7DDzpJe6qA07RYQ9VcoUeo5ATOjSOiWpSL3SWBRRbempMw==} 862 | dev: true 863 | 864 | /color-convert@2.0.1: 865 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 866 | engines: {node: '>=7.0.0'} 867 | dependencies: 868 | color-name: 1.1.4 869 | dev: true 870 | 871 | /color-name@1.1.4: 872 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 873 | dev: true 874 | 875 | /color-support@1.1.3: 876 | resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} 877 | hasBin: true 878 | dev: true 879 | 880 | /colorette@2.0.20: 881 | resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} 882 | dev: true 883 | 884 | /combined-stream@1.0.8: 885 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 886 | engines: {node: '>= 0.8'} 887 | dependencies: 888 | delayed-stream: 1.0.0 889 | dev: false 890 | 891 | /commander@11.1.0: 892 | resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} 893 | engines: {node: '>=16'} 894 | dev: true 895 | 896 | /concat-map@0.0.1: 897 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 898 | dev: true 899 | 900 | /console-control-strings@1.1.0: 901 | resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} 902 | dev: true 903 | 904 | /content-type@1.0.4: 905 | resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} 906 | engines: {node: '>= 0.6'} 907 | dev: true 908 | 909 | /convert-hrtime@3.0.0: 910 | resolution: {integrity: sha512-7V+KqSvMiHp8yWDuwfww06XleMWVVB9b9tURBx+G7UTADuo5hYPuowKloz4OzOqbPezxgo+fdQ1522WzPG4OeA==} 911 | engines: {node: '>=8'} 912 | dev: true 913 | 914 | /create-require@1.1.1: 915 | resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} 916 | dev: true 917 | 918 | /cross-spawn@7.0.3: 919 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 920 | engines: {node: '>= 8'} 921 | dependencies: 922 | path-key: 3.1.1 923 | shebang-command: 2.0.0 924 | which: 2.0.2 925 | dev: true 926 | 927 | /debug@4.1.1: 928 | resolution: {integrity: sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==} 929 | deprecated: Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797) 930 | peerDependencies: 931 | supports-color: '*' 932 | peerDependenciesMeta: 933 | supports-color: 934 | optional: true 935 | dependencies: 936 | ms: 2.1.2 937 | dev: true 938 | 939 | /debug@4.3.4: 940 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 941 | engines: {node: '>=6.0'} 942 | peerDependencies: 943 | supports-color: '*' 944 | peerDependenciesMeta: 945 | supports-color: 946 | optional: true 947 | dependencies: 948 | ms: 2.1.2 949 | dev: true 950 | 951 | /deep-is@0.1.4: 952 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 953 | dev: true 954 | 955 | /delayed-stream@1.0.0: 956 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 957 | engines: {node: '>=0.4.0'} 958 | dev: false 959 | 960 | /delegates@1.0.0: 961 | resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} 962 | dev: true 963 | 964 | /depd@1.1.2: 965 | resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} 966 | engines: {node: '>= 0.6'} 967 | dev: true 968 | 969 | /detect-libc@2.0.3: 970 | resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} 971 | engines: {node: '>=8'} 972 | dev: true 973 | 974 | /diff@4.0.2: 975 | resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} 976 | engines: {node: '>=0.3.1'} 977 | dev: true 978 | 979 | /dir-glob@3.0.1: 980 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 981 | engines: {node: '>=8'} 982 | dependencies: 983 | path-type: 4.0.0 984 | dev: true 985 | 986 | /doctrine@3.0.0: 987 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 988 | engines: {node: '>=6.0.0'} 989 | dependencies: 990 | esutils: 2.0.3 991 | dev: true 992 | 993 | /edge-runtime@2.5.9: 994 | resolution: {integrity: sha512-pk+k0oK0PVXdlT4oRp4lwh+unuKB7Ng4iZ2HB+EZ7QCEQizX360Rp/F4aRpgpRgdP2ufB35N+1KppHmYjqIGSg==} 995 | engines: {node: '>=16'} 996 | hasBin: true 997 | dependencies: 998 | '@edge-runtime/format': 2.2.1 999 | '@edge-runtime/ponyfill': 2.4.2 1000 | '@edge-runtime/vm': 3.2.0 1001 | async-listen: 3.0.1 1002 | mri: 1.2.0 1003 | picocolors: 1.0.0 1004 | pretty-ms: 7.0.1 1005 | signal-exit: 4.0.2 1006 | time-span: 4.0.0 1007 | dev: true 1008 | 1009 | /emoji-regex@10.3.0: 1010 | resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} 1011 | dev: true 1012 | 1013 | /emoji-regex@8.0.0: 1014 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1015 | dev: true 1016 | 1017 | /end-of-stream@1.1.0: 1018 | resolution: {integrity: sha512-EoulkdKF/1xa92q25PbjuDcgJ9RDHYU2Rs3SCIvs2/dSQ3BpmxneNHmA/M7fe60M3PrV7nNGTTNbkK62l6vXiQ==} 1019 | dependencies: 1020 | once: 1.3.3 1021 | dev: true 1022 | 1023 | /end-of-stream@1.4.4: 1024 | resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} 1025 | dependencies: 1026 | once: 1.4.0 1027 | dev: true 1028 | 1029 | /es-module-lexer@1.4.1: 1030 | resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} 1031 | dev: true 1032 | 1033 | /esbuild-android-64@0.14.47: 1034 | resolution: {integrity: sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g==} 1035 | engines: {node: '>=12'} 1036 | cpu: [x64] 1037 | os: [android] 1038 | requiresBuild: true 1039 | dev: true 1040 | optional: true 1041 | 1042 | /esbuild-android-arm64@0.14.47: 1043 | resolution: {integrity: sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ==} 1044 | engines: {node: '>=12'} 1045 | cpu: [arm64] 1046 | os: [android] 1047 | requiresBuild: true 1048 | dev: true 1049 | optional: true 1050 | 1051 | /esbuild-darwin-64@0.14.47: 1052 | resolution: {integrity: sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA==} 1053 | engines: {node: '>=12'} 1054 | cpu: [x64] 1055 | os: [darwin] 1056 | requiresBuild: true 1057 | dev: true 1058 | optional: true 1059 | 1060 | /esbuild-darwin-arm64@0.14.47: 1061 | resolution: {integrity: sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw==} 1062 | engines: {node: '>=12'} 1063 | cpu: [arm64] 1064 | os: [darwin] 1065 | requiresBuild: true 1066 | dev: true 1067 | optional: true 1068 | 1069 | /esbuild-freebsd-64@0.14.47: 1070 | resolution: {integrity: sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ==} 1071 | engines: {node: '>=12'} 1072 | cpu: [x64] 1073 | os: [freebsd] 1074 | requiresBuild: true 1075 | dev: true 1076 | optional: true 1077 | 1078 | /esbuild-freebsd-arm64@0.14.47: 1079 | resolution: {integrity: sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ==} 1080 | engines: {node: '>=12'} 1081 | cpu: [arm64] 1082 | os: [freebsd] 1083 | requiresBuild: true 1084 | dev: true 1085 | optional: true 1086 | 1087 | /esbuild-linux-32@0.14.47: 1088 | resolution: {integrity: sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw==} 1089 | engines: {node: '>=12'} 1090 | cpu: [ia32] 1091 | os: [linux] 1092 | requiresBuild: true 1093 | dev: true 1094 | optional: true 1095 | 1096 | /esbuild-linux-64@0.14.47: 1097 | resolution: {integrity: sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw==} 1098 | engines: {node: '>=12'} 1099 | cpu: [x64] 1100 | os: [linux] 1101 | requiresBuild: true 1102 | dev: true 1103 | optional: true 1104 | 1105 | /esbuild-linux-arm64@0.14.47: 1106 | resolution: {integrity: sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw==} 1107 | engines: {node: '>=12'} 1108 | cpu: [arm64] 1109 | os: [linux] 1110 | requiresBuild: true 1111 | dev: true 1112 | optional: true 1113 | 1114 | /esbuild-linux-arm@0.14.47: 1115 | resolution: {integrity: sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA==} 1116 | engines: {node: '>=12'} 1117 | cpu: [arm] 1118 | os: [linux] 1119 | requiresBuild: true 1120 | dev: true 1121 | optional: true 1122 | 1123 | /esbuild-linux-mips64le@0.14.47: 1124 | resolution: {integrity: sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg==} 1125 | engines: {node: '>=12'} 1126 | cpu: [mips64el] 1127 | os: [linux] 1128 | requiresBuild: true 1129 | dev: true 1130 | optional: true 1131 | 1132 | /esbuild-linux-ppc64le@0.14.47: 1133 | resolution: {integrity: sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w==} 1134 | engines: {node: '>=12'} 1135 | cpu: [ppc64] 1136 | os: [linux] 1137 | requiresBuild: true 1138 | dev: true 1139 | optional: true 1140 | 1141 | /esbuild-linux-riscv64@0.14.47: 1142 | resolution: {integrity: sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g==} 1143 | engines: {node: '>=12'} 1144 | cpu: [riscv64] 1145 | os: [linux] 1146 | requiresBuild: true 1147 | dev: true 1148 | optional: true 1149 | 1150 | /esbuild-linux-s390x@0.14.47: 1151 | resolution: {integrity: sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw==} 1152 | engines: {node: '>=12'} 1153 | cpu: [s390x] 1154 | os: [linux] 1155 | requiresBuild: true 1156 | dev: true 1157 | optional: true 1158 | 1159 | /esbuild-netbsd-64@0.14.47: 1160 | resolution: {integrity: sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ==} 1161 | engines: {node: '>=12'} 1162 | cpu: [x64] 1163 | os: [netbsd] 1164 | requiresBuild: true 1165 | dev: true 1166 | optional: true 1167 | 1168 | /esbuild-openbsd-64@0.14.47: 1169 | resolution: {integrity: sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw==} 1170 | engines: {node: '>=12'} 1171 | cpu: [x64] 1172 | os: [openbsd] 1173 | requiresBuild: true 1174 | dev: true 1175 | optional: true 1176 | 1177 | /esbuild-sunos-64@0.14.47: 1178 | resolution: {integrity: sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ==} 1179 | engines: {node: '>=12'} 1180 | cpu: [x64] 1181 | os: [sunos] 1182 | requiresBuild: true 1183 | dev: true 1184 | optional: true 1185 | 1186 | /esbuild-windows-32@0.14.47: 1187 | resolution: {integrity: sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ==} 1188 | engines: {node: '>=12'} 1189 | cpu: [ia32] 1190 | os: [win32] 1191 | requiresBuild: true 1192 | dev: true 1193 | optional: true 1194 | 1195 | /esbuild-windows-64@0.14.47: 1196 | resolution: {integrity: sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ==} 1197 | engines: {node: '>=12'} 1198 | cpu: [x64] 1199 | os: [win32] 1200 | requiresBuild: true 1201 | dev: true 1202 | optional: true 1203 | 1204 | /esbuild-windows-arm64@0.14.47: 1205 | resolution: {integrity: sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ==} 1206 | engines: {node: '>=12'} 1207 | cpu: [arm64] 1208 | os: [win32] 1209 | requiresBuild: true 1210 | dev: true 1211 | optional: true 1212 | 1213 | /esbuild@0.14.47: 1214 | resolution: {integrity: sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA==} 1215 | engines: {node: '>=12'} 1216 | hasBin: true 1217 | requiresBuild: true 1218 | optionalDependencies: 1219 | esbuild-android-64: 0.14.47 1220 | esbuild-android-arm64: 0.14.47 1221 | esbuild-darwin-64: 0.14.47 1222 | esbuild-darwin-arm64: 0.14.47 1223 | esbuild-freebsd-64: 0.14.47 1224 | esbuild-freebsd-arm64: 0.14.47 1225 | esbuild-linux-32: 0.14.47 1226 | esbuild-linux-64: 0.14.47 1227 | esbuild-linux-arm: 0.14.47 1228 | esbuild-linux-arm64: 0.14.47 1229 | esbuild-linux-mips64le: 0.14.47 1230 | esbuild-linux-ppc64le: 0.14.47 1231 | esbuild-linux-riscv64: 0.14.47 1232 | esbuild-linux-s390x: 0.14.47 1233 | esbuild-netbsd-64: 0.14.47 1234 | esbuild-openbsd-64: 0.14.47 1235 | esbuild-sunos-64: 0.14.47 1236 | esbuild-windows-32: 0.14.47 1237 | esbuild-windows-64: 0.14.47 1238 | esbuild-windows-arm64: 0.14.47 1239 | dev: true 1240 | 1241 | /escape-string-regexp@4.0.0: 1242 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1243 | engines: {node: '>=10'} 1244 | dev: true 1245 | 1246 | /eslint-config-prettier@9.1.0(eslint@8.57.0): 1247 | resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} 1248 | hasBin: true 1249 | peerDependencies: 1250 | eslint: '>=7.0.0' 1251 | dependencies: 1252 | eslint: 8.57.0 1253 | dev: true 1254 | 1255 | /eslint-define-config@2.1.0: 1256 | resolution: {integrity: sha512-QUp6pM9pjKEVannNAbSJNeRuYwW3LshejfyBBpjeMGaJjaDUpVps4C6KVR8R7dWZnD3i0synmrE36znjTkJvdQ==} 1257 | engines: {node: '>=18.0.0', npm: '>=9.0.0', pnpm: '>=8.6.0'} 1258 | dev: true 1259 | 1260 | /eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5): 1261 | resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} 1262 | engines: {node: ^14.18.0 || >=16.0.0} 1263 | peerDependencies: 1264 | '@types/eslint': '>=8.0.0' 1265 | eslint: '>=8.0.0' 1266 | eslint-config-prettier: '*' 1267 | prettier: '>=3.0.0' 1268 | peerDependenciesMeta: 1269 | '@types/eslint': 1270 | optional: true 1271 | eslint-config-prettier: 1272 | optional: true 1273 | dependencies: 1274 | eslint: 8.57.0 1275 | eslint-config-prettier: 9.1.0(eslint@8.57.0) 1276 | prettier: 3.2.5 1277 | prettier-linter-helpers: 1.0.0 1278 | synckit: 0.8.8 1279 | dev: true 1280 | 1281 | /eslint-scope@7.2.2: 1282 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 1283 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1284 | dependencies: 1285 | esrecurse: 4.3.0 1286 | estraverse: 5.3.0 1287 | dev: true 1288 | 1289 | /eslint-visitor-keys@3.4.3: 1290 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 1291 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1292 | dev: true 1293 | 1294 | /eslint@8.57.0: 1295 | resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} 1296 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1297 | hasBin: true 1298 | dependencies: 1299 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) 1300 | '@eslint-community/regexpp': 4.10.0 1301 | '@eslint/eslintrc': 2.1.4 1302 | '@eslint/js': 8.57.0 1303 | '@humanwhocodes/config-array': 0.11.14 1304 | '@humanwhocodes/module-importer': 1.0.1 1305 | '@nodelib/fs.walk': 1.2.8 1306 | '@ungap/structured-clone': 1.2.0 1307 | ajv: 6.12.6 1308 | chalk: 4.1.2 1309 | cross-spawn: 7.0.3 1310 | debug: 4.3.4 1311 | doctrine: 3.0.0 1312 | escape-string-regexp: 4.0.0 1313 | eslint-scope: 7.2.2 1314 | eslint-visitor-keys: 3.4.3 1315 | espree: 9.6.1 1316 | esquery: 1.5.0 1317 | esutils: 2.0.3 1318 | fast-deep-equal: 3.1.3 1319 | file-entry-cache: 6.0.1 1320 | find-up: 5.0.0 1321 | glob-parent: 6.0.2 1322 | globals: 13.24.0 1323 | graphemer: 1.4.0 1324 | ignore: 5.3.1 1325 | imurmurhash: 0.1.4 1326 | is-glob: 4.0.3 1327 | is-path-inside: 3.0.3 1328 | js-yaml: 4.1.0 1329 | json-stable-stringify-without-jsonify: 1.0.1 1330 | levn: 0.4.1 1331 | lodash.merge: 4.6.2 1332 | minimatch: 3.1.2 1333 | natural-compare: 1.4.0 1334 | optionator: 0.9.3 1335 | strip-ansi: 6.0.1 1336 | text-table: 0.2.0 1337 | transitivePeerDependencies: 1338 | - supports-color 1339 | dev: true 1340 | 1341 | /espree@9.6.1: 1342 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 1343 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1344 | dependencies: 1345 | acorn: 8.11.3 1346 | acorn-jsx: 5.3.2(acorn@8.11.3) 1347 | eslint-visitor-keys: 3.4.3 1348 | dev: true 1349 | 1350 | /esquery@1.5.0: 1351 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 1352 | engines: {node: '>=0.10'} 1353 | dependencies: 1354 | estraverse: 5.3.0 1355 | dev: true 1356 | 1357 | /esrecurse@4.3.0: 1358 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1359 | engines: {node: '>=4.0'} 1360 | dependencies: 1361 | estraverse: 5.3.0 1362 | dev: true 1363 | 1364 | /estraverse@5.3.0: 1365 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1366 | engines: {node: '>=4.0'} 1367 | dev: true 1368 | 1369 | /estree-walker@2.0.2: 1370 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 1371 | dev: true 1372 | 1373 | /esutils@2.0.3: 1374 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1375 | engines: {node: '>=0.10.0'} 1376 | dev: true 1377 | 1378 | /etag@1.8.1: 1379 | resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} 1380 | engines: {node: '>= 0.6'} 1381 | dev: true 1382 | 1383 | /eventemitter3@5.0.1: 1384 | resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} 1385 | dev: true 1386 | 1387 | /events-intercept@2.0.0: 1388 | resolution: {integrity: sha512-blk1va0zol9QOrdZt0rFXo5KMkNPVSp92Eju/Qz8THwKWKRKeE0T8Br/1aW6+Edkyq9xHYgYxn2QtOnUKPUp+Q==} 1389 | dev: true 1390 | 1391 | /execa@3.2.0: 1392 | resolution: {integrity: sha512-kJJfVbI/lZE1PZYDI5VPxp8zXPO9rtxOkhpZ0jMKha56AI9y2gGVC6bkukStQf0ka5Rh15BA5m7cCCH4jmHqkw==} 1393 | engines: {node: ^8.12.0 || >=9.7.0} 1394 | dependencies: 1395 | cross-spawn: 7.0.3 1396 | get-stream: 5.2.0 1397 | human-signals: 1.1.1 1398 | is-stream: 2.0.1 1399 | merge-stream: 2.0.0 1400 | npm-run-path: 4.0.1 1401 | onetime: 5.1.2 1402 | p-finally: 2.0.1 1403 | signal-exit: 3.0.7 1404 | strip-final-newline: 2.0.0 1405 | dev: true 1406 | 1407 | /execa@8.0.1: 1408 | resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} 1409 | engines: {node: '>=16.17'} 1410 | dependencies: 1411 | cross-spawn: 7.0.3 1412 | get-stream: 8.0.1 1413 | human-signals: 5.0.0 1414 | is-stream: 3.0.0 1415 | merge-stream: 2.0.0 1416 | npm-run-path: 5.3.0 1417 | onetime: 6.0.0 1418 | signal-exit: 4.1.0 1419 | strip-final-newline: 3.0.0 1420 | dev: true 1421 | 1422 | /fast-deep-equal@3.1.3: 1423 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1424 | dev: true 1425 | 1426 | /fast-diff@1.3.0: 1427 | resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} 1428 | dev: true 1429 | 1430 | /fast-glob@3.3.2: 1431 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 1432 | engines: {node: '>=8.6.0'} 1433 | dependencies: 1434 | '@nodelib/fs.stat': 2.0.5 1435 | '@nodelib/fs.walk': 1.2.8 1436 | glob-parent: 5.1.2 1437 | merge2: 1.4.1 1438 | micromatch: 4.0.5 1439 | dev: true 1440 | 1441 | /fast-json-stable-stringify@2.1.0: 1442 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1443 | dev: true 1444 | 1445 | /fast-levenshtein@2.0.6: 1446 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1447 | dev: true 1448 | 1449 | /fastq@1.17.1: 1450 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 1451 | dependencies: 1452 | reusify: 1.0.4 1453 | dev: true 1454 | 1455 | /fd-slicer@1.1.0: 1456 | resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} 1457 | dependencies: 1458 | pend: 1.2.0 1459 | dev: true 1460 | 1461 | /file-entry-cache@6.0.1: 1462 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1463 | engines: {node: ^10.12.0 || >=12.0.0} 1464 | dependencies: 1465 | flat-cache: 3.2.0 1466 | dev: true 1467 | 1468 | /file-uri-to-path@1.0.0: 1469 | resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} 1470 | dev: true 1471 | 1472 | /fill-range@7.0.1: 1473 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1474 | engines: {node: '>=8'} 1475 | dependencies: 1476 | to-regex-range: 5.0.1 1477 | dev: true 1478 | 1479 | /find-up@5.0.0: 1480 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1481 | engines: {node: '>=10'} 1482 | dependencies: 1483 | locate-path: 6.0.0 1484 | path-exists: 4.0.0 1485 | dev: true 1486 | 1487 | /flat-cache@3.2.0: 1488 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} 1489 | engines: {node: ^10.12.0 || >=12.0.0} 1490 | dependencies: 1491 | flatted: 3.3.1 1492 | keyv: 4.5.4 1493 | rimraf: 3.0.2 1494 | dev: true 1495 | 1496 | /flatted@3.3.1: 1497 | resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} 1498 | dev: true 1499 | 1500 | /follow-redirects@1.15.6: 1501 | resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} 1502 | engines: {node: '>=4.0'} 1503 | peerDependencies: 1504 | debug: '*' 1505 | peerDependenciesMeta: 1506 | debug: 1507 | optional: true 1508 | dev: false 1509 | 1510 | /form-data@4.0.0: 1511 | resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} 1512 | engines: {node: '>= 6'} 1513 | dependencies: 1514 | asynckit: 0.4.0 1515 | combined-stream: 1.0.8 1516 | mime-types: 2.1.35 1517 | dev: false 1518 | 1519 | /fs-extra@11.1.0: 1520 | resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==} 1521 | engines: {node: '>=14.14'} 1522 | dependencies: 1523 | graceful-fs: 4.2.11 1524 | jsonfile: 6.1.0 1525 | universalify: 2.0.1 1526 | dev: true 1527 | 1528 | /fs-extra@8.1.0: 1529 | resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} 1530 | engines: {node: '>=6 <7 || >=8'} 1531 | dependencies: 1532 | graceful-fs: 4.2.11 1533 | jsonfile: 4.0.0 1534 | universalify: 0.1.2 1535 | dev: true 1536 | 1537 | /fs-minipass@1.2.7: 1538 | resolution: {integrity: sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==} 1539 | dependencies: 1540 | minipass: 2.9.0 1541 | dev: true 1542 | 1543 | /fs-minipass@2.1.0: 1544 | resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} 1545 | engines: {node: '>= 8'} 1546 | dependencies: 1547 | minipass: 3.3.6 1548 | dev: true 1549 | 1550 | /fs.realpath@1.0.0: 1551 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1552 | dev: true 1553 | 1554 | /fsevents@2.1.3: 1555 | resolution: {integrity: sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==} 1556 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1557 | os: [darwin] 1558 | deprecated: '"Please update to latest v2.3 or v2.2"' 1559 | requiresBuild: true 1560 | dev: true 1561 | optional: true 1562 | 1563 | /gauge@3.0.2: 1564 | resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} 1565 | engines: {node: '>=10'} 1566 | dependencies: 1567 | aproba: 2.0.0 1568 | color-support: 1.1.3 1569 | console-control-strings: 1.1.0 1570 | has-unicode: 2.0.1 1571 | object-assign: 4.1.1 1572 | signal-exit: 3.0.7 1573 | string-width: 4.2.3 1574 | strip-ansi: 6.0.1 1575 | wide-align: 1.1.5 1576 | dev: true 1577 | 1578 | /generic-pool@3.4.2: 1579 | resolution: {integrity: sha512-H7cUpwCQSiJmAHM4c/aFu6fUfrhWXW1ncyh8ftxEPMu6AiYkHw9K8br720TGPZJbk5eOH2bynjZD1yPvdDAmag==} 1580 | engines: {node: '>= 4'} 1581 | dev: true 1582 | 1583 | /get-east-asian-width@1.2.0: 1584 | resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} 1585 | engines: {node: '>=18'} 1586 | dev: true 1587 | 1588 | /get-stream@5.2.0: 1589 | resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} 1590 | engines: {node: '>=8'} 1591 | dependencies: 1592 | pump: 3.0.0 1593 | dev: true 1594 | 1595 | /get-stream@8.0.1: 1596 | resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} 1597 | engines: {node: '>=16'} 1598 | dev: true 1599 | 1600 | /glob-parent@5.1.2: 1601 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1602 | engines: {node: '>= 6'} 1603 | dependencies: 1604 | is-glob: 4.0.3 1605 | dev: true 1606 | 1607 | /glob-parent@6.0.2: 1608 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1609 | engines: {node: '>=10.13.0'} 1610 | dependencies: 1611 | is-glob: 4.0.3 1612 | dev: true 1613 | 1614 | /glob@7.2.3: 1615 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1616 | dependencies: 1617 | fs.realpath: 1.0.0 1618 | inflight: 1.0.6 1619 | inherits: 2.0.4 1620 | minimatch: 3.1.2 1621 | once: 1.4.0 1622 | path-is-absolute: 1.0.1 1623 | dev: true 1624 | 1625 | /globals@13.24.0: 1626 | resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} 1627 | engines: {node: '>=8'} 1628 | dependencies: 1629 | type-fest: 0.20.2 1630 | dev: true 1631 | 1632 | /globby@11.1.0: 1633 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1634 | engines: {node: '>=10'} 1635 | dependencies: 1636 | array-union: 2.1.0 1637 | dir-glob: 3.0.1 1638 | fast-glob: 3.3.2 1639 | ignore: 5.3.1 1640 | merge2: 1.4.1 1641 | slash: 3.0.0 1642 | dev: true 1643 | 1644 | /graceful-fs@4.2.11: 1645 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1646 | dev: true 1647 | 1648 | /graphemer@1.4.0: 1649 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1650 | dev: true 1651 | 1652 | /has-flag@4.0.0: 1653 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1654 | engines: {node: '>=8'} 1655 | dev: true 1656 | 1657 | /has-unicode@2.0.1: 1658 | resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} 1659 | dev: true 1660 | 1661 | /http-errors@1.4.0: 1662 | resolution: {integrity: sha512-oLjPqve1tuOl5aRhv8GK5eHpqP1C9fb+Ol+XTLjKfLltE44zdDbEdjPSbU7Ch5rSNsVFqZn97SrMmZLdu1/YMw==} 1663 | engines: {node: '>= 0.6'} 1664 | dependencies: 1665 | inherits: 2.0.1 1666 | statuses: 1.5.0 1667 | dev: true 1668 | 1669 | /http-errors@1.7.3: 1670 | resolution: {integrity: sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==} 1671 | engines: {node: '>= 0.6'} 1672 | dependencies: 1673 | depd: 1.1.2 1674 | inherits: 2.0.4 1675 | setprototypeof: 1.1.1 1676 | statuses: 1.5.0 1677 | toidentifier: 1.0.0 1678 | dev: true 1679 | 1680 | /https-proxy-agent@5.0.1: 1681 | resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} 1682 | engines: {node: '>= 6'} 1683 | dependencies: 1684 | agent-base: 6.0.2 1685 | debug: 4.3.4 1686 | transitivePeerDependencies: 1687 | - supports-color 1688 | dev: true 1689 | 1690 | /human-signals@1.1.1: 1691 | resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} 1692 | engines: {node: '>=8.12.0'} 1693 | dev: true 1694 | 1695 | /human-signals@5.0.0: 1696 | resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} 1697 | engines: {node: '>=16.17.0'} 1698 | dev: true 1699 | 1700 | /husky@9.0.11: 1701 | resolution: {integrity: sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==} 1702 | engines: {node: '>=18'} 1703 | hasBin: true 1704 | dev: true 1705 | 1706 | /iconv-lite@0.4.24: 1707 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 1708 | engines: {node: '>=0.10.0'} 1709 | dependencies: 1710 | safer-buffer: 2.1.2 1711 | dev: true 1712 | 1713 | /ignore@5.3.1: 1714 | resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} 1715 | engines: {node: '>= 4'} 1716 | dev: true 1717 | 1718 | /import-fresh@3.3.0: 1719 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1720 | engines: {node: '>=6'} 1721 | dependencies: 1722 | parent-module: 1.0.1 1723 | resolve-from: 4.0.0 1724 | dev: true 1725 | 1726 | /imurmurhash@0.1.4: 1727 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1728 | engines: {node: '>=0.8.19'} 1729 | dev: true 1730 | 1731 | /inflight@1.0.6: 1732 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1733 | dependencies: 1734 | once: 1.4.0 1735 | wrappy: 1.0.2 1736 | dev: true 1737 | 1738 | /inherits@2.0.1: 1739 | resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==} 1740 | dev: true 1741 | 1742 | /inherits@2.0.4: 1743 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1744 | dev: true 1745 | 1746 | /is-binary-path@2.1.0: 1747 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1748 | engines: {node: '>=8'} 1749 | dependencies: 1750 | binary-extensions: 2.3.0 1751 | dev: true 1752 | 1753 | /is-extglob@2.1.1: 1754 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1755 | engines: {node: '>=0.10.0'} 1756 | dev: true 1757 | 1758 | /is-fullwidth-code-point@3.0.0: 1759 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1760 | engines: {node: '>=8'} 1761 | dev: true 1762 | 1763 | /is-fullwidth-code-point@4.0.0: 1764 | resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} 1765 | engines: {node: '>=12'} 1766 | dev: true 1767 | 1768 | /is-fullwidth-code-point@5.0.0: 1769 | resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} 1770 | engines: {node: '>=18'} 1771 | dependencies: 1772 | get-east-asian-width: 1.2.0 1773 | dev: true 1774 | 1775 | /is-glob@4.0.3: 1776 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1777 | engines: {node: '>=0.10.0'} 1778 | dependencies: 1779 | is-extglob: 2.1.1 1780 | dev: true 1781 | 1782 | /is-number@7.0.0: 1783 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1784 | engines: {node: '>=0.12.0'} 1785 | dev: true 1786 | 1787 | /is-path-inside@3.0.3: 1788 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1789 | engines: {node: '>=8'} 1790 | dev: true 1791 | 1792 | /is-stream@2.0.1: 1793 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 1794 | engines: {node: '>=8'} 1795 | dev: true 1796 | 1797 | /is-stream@3.0.0: 1798 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} 1799 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1800 | dev: true 1801 | 1802 | /isarray@0.0.1: 1803 | resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} 1804 | dev: true 1805 | 1806 | /isexe@2.0.0: 1807 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1808 | dev: true 1809 | 1810 | /js-yaml@4.1.0: 1811 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1812 | hasBin: true 1813 | dependencies: 1814 | argparse: 2.0.1 1815 | dev: true 1816 | 1817 | /json-buffer@3.0.1: 1818 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1819 | dev: true 1820 | 1821 | /json-schema-to-ts@1.6.4: 1822 | resolution: {integrity: sha512-pR4yQ9DHz6itqswtHCm26mw45FSNfQ9rEQjosaZErhn5J3J2sIViQiz8rDaezjKAhFGpmsoczYVBgGHzFw/stA==} 1823 | dependencies: 1824 | '@types/json-schema': 7.0.15 1825 | ts-toolbelt: 6.15.5 1826 | dev: true 1827 | 1828 | /json-schema-traverse@0.4.1: 1829 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1830 | dev: true 1831 | 1832 | /json-schema-traverse@1.0.0: 1833 | resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} 1834 | dev: true 1835 | 1836 | /json-stable-stringify-without-jsonify@1.0.1: 1837 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1838 | dev: true 1839 | 1840 | /jsonfile@4.0.0: 1841 | resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} 1842 | optionalDependencies: 1843 | graceful-fs: 4.2.11 1844 | dev: true 1845 | 1846 | /jsonfile@6.1.0: 1847 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} 1848 | dependencies: 1849 | universalify: 2.0.1 1850 | optionalDependencies: 1851 | graceful-fs: 4.2.11 1852 | dev: true 1853 | 1854 | /keyv@4.5.4: 1855 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1856 | dependencies: 1857 | json-buffer: 3.0.1 1858 | dev: true 1859 | 1860 | /levn@0.4.1: 1861 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1862 | engines: {node: '>= 0.8.0'} 1863 | dependencies: 1864 | prelude-ls: 1.2.1 1865 | type-check: 0.4.0 1866 | dev: true 1867 | 1868 | /lilconfig@3.0.0: 1869 | resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} 1870 | engines: {node: '>=14'} 1871 | dev: true 1872 | 1873 | /lint-staged@15.2.2: 1874 | resolution: {integrity: sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==} 1875 | engines: {node: '>=18.12.0'} 1876 | hasBin: true 1877 | dependencies: 1878 | chalk: 5.3.0 1879 | commander: 11.1.0 1880 | debug: 4.3.4 1881 | execa: 8.0.1 1882 | lilconfig: 3.0.0 1883 | listr2: 8.0.1 1884 | micromatch: 4.0.5 1885 | pidtree: 0.6.0 1886 | string-argv: 0.3.2 1887 | yaml: 2.3.4 1888 | transitivePeerDependencies: 1889 | - supports-color 1890 | dev: true 1891 | 1892 | /listr2@8.0.1: 1893 | resolution: {integrity: sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==} 1894 | engines: {node: '>=18.0.0'} 1895 | dependencies: 1896 | cli-truncate: 4.0.0 1897 | colorette: 2.0.20 1898 | eventemitter3: 5.0.1 1899 | log-update: 6.0.0 1900 | rfdc: 1.3.1 1901 | wrap-ansi: 9.0.0 1902 | dev: true 1903 | 1904 | /locate-path@6.0.0: 1905 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1906 | engines: {node: '>=10'} 1907 | dependencies: 1908 | p-locate: 5.0.0 1909 | dev: true 1910 | 1911 | /lodash.merge@4.6.2: 1912 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1913 | dev: true 1914 | 1915 | /log-update@6.0.0: 1916 | resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} 1917 | engines: {node: '>=18'} 1918 | dependencies: 1919 | ansi-escapes: 6.2.1 1920 | cli-cursor: 4.0.0 1921 | slice-ansi: 7.1.0 1922 | strip-ansi: 7.1.0 1923 | wrap-ansi: 9.0.0 1924 | dev: true 1925 | 1926 | /lru-cache@6.0.0: 1927 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1928 | engines: {node: '>=10'} 1929 | dependencies: 1930 | yallist: 4.0.0 1931 | dev: true 1932 | 1933 | /make-dir@3.1.0: 1934 | resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} 1935 | engines: {node: '>=8'} 1936 | dependencies: 1937 | semver: 6.3.1 1938 | dev: true 1939 | 1940 | /make-error@1.3.6: 1941 | resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} 1942 | dev: true 1943 | 1944 | /merge-stream@2.0.0: 1945 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1946 | dev: true 1947 | 1948 | /merge2@1.4.1: 1949 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1950 | engines: {node: '>= 8'} 1951 | dev: true 1952 | 1953 | /micro@9.3.5-canary.3: 1954 | resolution: {integrity: sha512-viYIo9PefV+w9dvoIBh1gI44Mvx1BOk67B4BpC2QK77qdY0xZF0Q+vWLt/BII6cLkIc8rLmSIcJaB/OrXXKe1g==} 1955 | engines: {node: '>= 8.0.0'} 1956 | hasBin: true 1957 | dependencies: 1958 | arg: 4.1.0 1959 | content-type: 1.0.4 1960 | raw-body: 2.4.1 1961 | dev: true 1962 | 1963 | /micromatch@4.0.5: 1964 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1965 | engines: {node: '>=8.6'} 1966 | dependencies: 1967 | braces: 3.0.2 1968 | picomatch: 2.3.1 1969 | dev: true 1970 | 1971 | /mime-db@1.52.0: 1972 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 1973 | engines: {node: '>= 0.6'} 1974 | dev: false 1975 | 1976 | /mime-types@2.1.35: 1977 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 1978 | engines: {node: '>= 0.6'} 1979 | dependencies: 1980 | mime-db: 1.52.0 1981 | dev: false 1982 | 1983 | /mimic-fn@2.1.0: 1984 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 1985 | engines: {node: '>=6'} 1986 | dev: true 1987 | 1988 | /mimic-fn@4.0.0: 1989 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} 1990 | engines: {node: '>=12'} 1991 | dev: true 1992 | 1993 | /minimatch@3.1.2: 1994 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1995 | dependencies: 1996 | brace-expansion: 1.1.11 1997 | dev: true 1998 | 1999 | /minimatch@9.0.4: 2000 | resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} 2001 | engines: {node: '>=16 || 14 >=14.17'} 2002 | dependencies: 2003 | brace-expansion: 2.0.1 2004 | dev: true 2005 | 2006 | /minimist@1.2.8: 2007 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 2008 | dev: true 2009 | 2010 | /minipass@2.9.0: 2011 | resolution: {integrity: sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==} 2012 | dependencies: 2013 | safe-buffer: 5.2.1 2014 | yallist: 3.1.1 2015 | dev: true 2016 | 2017 | /minipass@3.3.6: 2018 | resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} 2019 | engines: {node: '>=8'} 2020 | dependencies: 2021 | yallist: 4.0.0 2022 | dev: true 2023 | 2024 | /minipass@5.0.0: 2025 | resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} 2026 | engines: {node: '>=8'} 2027 | dev: true 2028 | 2029 | /minizlib@1.3.3: 2030 | resolution: {integrity: sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==} 2031 | dependencies: 2032 | minipass: 2.9.0 2033 | dev: true 2034 | 2035 | /minizlib@2.1.2: 2036 | resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} 2037 | engines: {node: '>= 8'} 2038 | dependencies: 2039 | minipass: 3.3.6 2040 | yallist: 4.0.0 2041 | dev: true 2042 | 2043 | /mkdirp@0.5.6: 2044 | resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} 2045 | hasBin: true 2046 | dependencies: 2047 | minimist: 1.2.8 2048 | dev: true 2049 | 2050 | /mkdirp@1.0.4: 2051 | resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} 2052 | engines: {node: '>=10'} 2053 | hasBin: true 2054 | dev: true 2055 | 2056 | /mri@1.2.0: 2057 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 2058 | engines: {node: '>=4'} 2059 | dev: true 2060 | 2061 | /ms@2.1.1: 2062 | resolution: {integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==} 2063 | dev: true 2064 | 2065 | /ms@2.1.2: 2066 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 2067 | dev: true 2068 | 2069 | /natural-compare@1.4.0: 2070 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 2071 | dev: true 2072 | 2073 | /node-fetch@2.6.7: 2074 | resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} 2075 | engines: {node: 4.x || >=6.0.0} 2076 | peerDependencies: 2077 | encoding: ^0.1.0 2078 | peerDependenciesMeta: 2079 | encoding: 2080 | optional: true 2081 | dependencies: 2082 | whatwg-url: 5.0.0 2083 | dev: true 2084 | 2085 | /node-fetch@2.6.9: 2086 | resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} 2087 | engines: {node: 4.x || >=6.0.0} 2088 | peerDependencies: 2089 | encoding: ^0.1.0 2090 | peerDependenciesMeta: 2091 | encoding: 2092 | optional: true 2093 | dependencies: 2094 | whatwg-url: 5.0.0 2095 | dev: true 2096 | 2097 | /node-fetch@2.7.0: 2098 | resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} 2099 | engines: {node: 4.x || >=6.0.0} 2100 | peerDependencies: 2101 | encoding: ^0.1.0 2102 | peerDependenciesMeta: 2103 | encoding: 2104 | optional: true 2105 | dependencies: 2106 | whatwg-url: 5.0.0 2107 | dev: true 2108 | 2109 | /node-gyp-build@4.8.0: 2110 | resolution: {integrity: sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==} 2111 | hasBin: true 2112 | dev: true 2113 | 2114 | /nopt@5.0.0: 2115 | resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} 2116 | engines: {node: '>=6'} 2117 | hasBin: true 2118 | dependencies: 2119 | abbrev: 1.1.1 2120 | dev: true 2121 | 2122 | /normalize-path@3.0.0: 2123 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 2124 | engines: {node: '>=0.10.0'} 2125 | dev: true 2126 | 2127 | /npm-run-path@4.0.1: 2128 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 2129 | engines: {node: '>=8'} 2130 | dependencies: 2131 | path-key: 3.1.1 2132 | dev: true 2133 | 2134 | /npm-run-path@5.3.0: 2135 | resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} 2136 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2137 | dependencies: 2138 | path-key: 4.0.0 2139 | dev: true 2140 | 2141 | /npmlog@5.0.1: 2142 | resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} 2143 | dependencies: 2144 | are-we-there-yet: 2.0.0 2145 | console-control-strings: 1.1.0 2146 | gauge: 3.0.2 2147 | set-blocking: 2.0.0 2148 | dev: true 2149 | 2150 | /object-assign@4.1.1: 2151 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 2152 | engines: {node: '>=0.10.0'} 2153 | dev: true 2154 | 2155 | /once@1.3.3: 2156 | resolution: {integrity: sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==} 2157 | dependencies: 2158 | wrappy: 1.0.2 2159 | dev: true 2160 | 2161 | /once@1.4.0: 2162 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 2163 | dependencies: 2164 | wrappy: 1.0.2 2165 | dev: true 2166 | 2167 | /onetime@5.1.2: 2168 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 2169 | engines: {node: '>=6'} 2170 | dependencies: 2171 | mimic-fn: 2.1.0 2172 | dev: true 2173 | 2174 | /onetime@6.0.0: 2175 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} 2176 | engines: {node: '>=12'} 2177 | dependencies: 2178 | mimic-fn: 4.0.0 2179 | dev: true 2180 | 2181 | /optionator@0.9.3: 2182 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 2183 | engines: {node: '>= 0.8.0'} 2184 | dependencies: 2185 | '@aashutoshrathi/word-wrap': 1.2.6 2186 | deep-is: 0.1.4 2187 | fast-levenshtein: 2.0.6 2188 | levn: 0.4.1 2189 | prelude-ls: 1.2.1 2190 | type-check: 0.4.0 2191 | dev: true 2192 | 2193 | /os-paths@4.4.0: 2194 | resolution: {integrity: sha512-wrAwOeXp1RRMFfQY8Sy7VaGVmPocaLwSFOYCGKSyo8qmJ+/yaafCl5BCA1IQZWqFSRBrKDYFeR9d/VyQzfH/jg==} 2195 | engines: {node: '>= 6.0'} 2196 | dev: true 2197 | 2198 | /p-finally@2.0.1: 2199 | resolution: {integrity: sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==} 2200 | engines: {node: '>=8'} 2201 | dev: true 2202 | 2203 | /p-limit@3.1.0: 2204 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 2205 | engines: {node: '>=10'} 2206 | dependencies: 2207 | yocto-queue: 0.1.0 2208 | dev: true 2209 | 2210 | /p-locate@5.0.0: 2211 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 2212 | engines: {node: '>=10'} 2213 | dependencies: 2214 | p-limit: 3.1.0 2215 | dev: true 2216 | 2217 | /parent-module@1.0.1: 2218 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 2219 | engines: {node: '>=6'} 2220 | dependencies: 2221 | callsites: 3.1.0 2222 | dev: true 2223 | 2224 | /parse-ms@2.1.0: 2225 | resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} 2226 | engines: {node: '>=6'} 2227 | dev: true 2228 | 2229 | /path-browserify@1.0.1: 2230 | resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} 2231 | dev: true 2232 | 2233 | /path-exists@4.0.0: 2234 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 2235 | engines: {node: '>=8'} 2236 | dev: true 2237 | 2238 | /path-is-absolute@1.0.1: 2239 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 2240 | engines: {node: '>=0.10.0'} 2241 | dev: true 2242 | 2243 | /path-key@3.1.1: 2244 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 2245 | engines: {node: '>=8'} 2246 | dev: true 2247 | 2248 | /path-key@4.0.0: 2249 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 2250 | engines: {node: '>=12'} 2251 | dev: true 2252 | 2253 | /path-match@1.2.4: 2254 | resolution: {integrity: sha512-UWlehEdqu36jmh4h5CWJ7tARp1OEVKGHKm6+dg9qMq5RKUTV5WJrGgaZ3dN2m7WFAXDbjlHzvJvL/IUpy84Ktw==} 2255 | dependencies: 2256 | http-errors: 1.4.0 2257 | path-to-regexp: 1.8.0 2258 | dev: true 2259 | 2260 | /path-to-regexp@1.8.0: 2261 | resolution: {integrity: sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==} 2262 | dependencies: 2263 | isarray: 0.0.1 2264 | dev: true 2265 | 2266 | /path-to-regexp@6.1.0: 2267 | resolution: {integrity: sha512-h9DqehX3zZZDCEm+xbfU0ZmwCGFCAAraPJWMXJ4+v32NjZJilVg3k1TcKsRgIb8IQ/izZSaydDc1OhJCZvs2Dw==} 2268 | dev: true 2269 | 2270 | /path-to-regexp@6.2.1: 2271 | resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} 2272 | dev: true 2273 | 2274 | /path-type@4.0.0: 2275 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 2276 | engines: {node: '>=8'} 2277 | dev: true 2278 | 2279 | /pend@1.2.0: 2280 | resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} 2281 | dev: true 2282 | 2283 | /picocolors@1.0.0: 2284 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 2285 | dev: true 2286 | 2287 | /picomatch@2.3.1: 2288 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 2289 | engines: {node: '>=8.6'} 2290 | dev: true 2291 | 2292 | /pidtree@0.6.0: 2293 | resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} 2294 | engines: {node: '>=0.10'} 2295 | hasBin: true 2296 | dev: true 2297 | 2298 | /prelude-ls@1.2.1: 2299 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 2300 | engines: {node: '>= 0.8.0'} 2301 | dev: true 2302 | 2303 | /prettier-linter-helpers@1.0.0: 2304 | resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} 2305 | engines: {node: '>=6.0.0'} 2306 | dependencies: 2307 | fast-diff: 1.3.0 2308 | dev: true 2309 | 2310 | /prettier@3.2.5: 2311 | resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} 2312 | engines: {node: '>=14'} 2313 | hasBin: true 2314 | dev: true 2315 | 2316 | /pretty-ms@7.0.1: 2317 | resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} 2318 | engines: {node: '>=10'} 2319 | dependencies: 2320 | parse-ms: 2.1.0 2321 | dev: true 2322 | 2323 | /promisepipe@3.0.0: 2324 | resolution: {integrity: sha512-V6TbZDJ/ZswevgkDNpGt/YqNCiZP9ASfgU+p83uJE6NrGtvSGoOcHLiDCqkMs2+yg7F5qHdLV8d0aS8O26G/KA==} 2325 | dev: true 2326 | 2327 | /proxy-from-env@1.1.0: 2328 | resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} 2329 | dev: false 2330 | 2331 | /pump@3.0.0: 2332 | resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} 2333 | dependencies: 2334 | end-of-stream: 1.4.4 2335 | once: 1.4.0 2336 | dev: true 2337 | 2338 | /punycode@2.3.1: 2339 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 2340 | engines: {node: '>=6'} 2341 | dev: true 2342 | 2343 | /queue-microtask@1.2.3: 2344 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 2345 | dev: true 2346 | 2347 | /raw-body@2.4.1: 2348 | resolution: {integrity: sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==} 2349 | engines: {node: '>= 0.8'} 2350 | dependencies: 2351 | bytes: 3.1.0 2352 | http-errors: 1.7.3 2353 | iconv-lite: 0.4.24 2354 | unpipe: 1.0.0 2355 | dev: true 2356 | 2357 | /readable-stream@3.6.2: 2358 | resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} 2359 | engines: {node: '>= 6'} 2360 | dependencies: 2361 | inherits: 2.0.4 2362 | string_decoder: 1.3.0 2363 | util-deprecate: 1.0.2 2364 | dev: true 2365 | 2366 | /readdirp@3.3.0: 2367 | resolution: {integrity: sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==} 2368 | engines: {node: '>=8.10.0'} 2369 | dependencies: 2370 | picomatch: 2.3.1 2371 | dev: true 2372 | 2373 | /require-from-string@2.0.2: 2374 | resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} 2375 | engines: {node: '>=0.10.0'} 2376 | dev: true 2377 | 2378 | /resolve-from@4.0.0: 2379 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 2380 | engines: {node: '>=4'} 2381 | dev: true 2382 | 2383 | /resolve-from@5.0.0: 2384 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 2385 | engines: {node: '>=8'} 2386 | dev: true 2387 | 2388 | /restore-cursor@4.0.0: 2389 | resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} 2390 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2391 | dependencies: 2392 | onetime: 5.1.2 2393 | signal-exit: 3.0.7 2394 | dev: true 2395 | 2396 | /reusify@1.0.4: 2397 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2398 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2399 | dev: true 2400 | 2401 | /rfdc@1.3.1: 2402 | resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} 2403 | dev: true 2404 | 2405 | /rimraf@3.0.2: 2406 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2407 | hasBin: true 2408 | dependencies: 2409 | glob: 7.2.3 2410 | dev: true 2411 | 2412 | /run-parallel@1.2.0: 2413 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2414 | dependencies: 2415 | queue-microtask: 1.2.3 2416 | dev: true 2417 | 2418 | /safe-buffer@5.2.1: 2419 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 2420 | dev: true 2421 | 2422 | /safer-buffer@2.1.2: 2423 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 2424 | dev: true 2425 | 2426 | /semver@6.3.1: 2427 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 2428 | hasBin: true 2429 | dev: true 2430 | 2431 | /semver@7.3.5: 2432 | resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} 2433 | engines: {node: '>=10'} 2434 | hasBin: true 2435 | dependencies: 2436 | lru-cache: 6.0.0 2437 | dev: true 2438 | 2439 | /semver@7.6.0: 2440 | resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} 2441 | engines: {node: '>=10'} 2442 | hasBin: true 2443 | dependencies: 2444 | lru-cache: 6.0.0 2445 | dev: true 2446 | 2447 | /set-blocking@2.0.0: 2448 | resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} 2449 | dev: true 2450 | 2451 | /setprototypeof@1.1.1: 2452 | resolution: {integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==} 2453 | dev: true 2454 | 2455 | /shebang-command@2.0.0: 2456 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2457 | engines: {node: '>=8'} 2458 | dependencies: 2459 | shebang-regex: 3.0.0 2460 | dev: true 2461 | 2462 | /shebang-regex@3.0.0: 2463 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2464 | engines: {node: '>=8'} 2465 | dev: true 2466 | 2467 | /signal-exit@3.0.7: 2468 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 2469 | dev: true 2470 | 2471 | /signal-exit@4.0.2: 2472 | resolution: {integrity: sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==} 2473 | engines: {node: '>=14'} 2474 | dev: true 2475 | 2476 | /signal-exit@4.1.0: 2477 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 2478 | engines: {node: '>=14'} 2479 | dev: true 2480 | 2481 | /slash@3.0.0: 2482 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2483 | engines: {node: '>=8'} 2484 | dev: true 2485 | 2486 | /slice-ansi@5.0.0: 2487 | resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} 2488 | engines: {node: '>=12'} 2489 | dependencies: 2490 | ansi-styles: 6.2.1 2491 | is-fullwidth-code-point: 4.0.0 2492 | dev: true 2493 | 2494 | /slice-ansi@7.1.0: 2495 | resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} 2496 | engines: {node: '>=18'} 2497 | dependencies: 2498 | ansi-styles: 6.2.1 2499 | is-fullwidth-code-point: 5.0.0 2500 | dev: true 2501 | 2502 | /stat-mode@0.3.0: 2503 | resolution: {integrity: sha512-QjMLR0A3WwFY2aZdV0okfFEJB5TRjkggXZjxP3A1RsWsNHNu3YPv8btmtc6iCFZ0Rul3FE93OYogvhOUClU+ng==} 2504 | dev: true 2505 | 2506 | /statuses@1.5.0: 2507 | resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} 2508 | engines: {node: '>= 0.6'} 2509 | dev: true 2510 | 2511 | /stream-to-array@2.3.0: 2512 | resolution: {integrity: sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==} 2513 | dependencies: 2514 | any-promise: 1.3.0 2515 | dev: true 2516 | 2517 | /stream-to-promise@2.2.0: 2518 | resolution: {integrity: sha512-HAGUASw8NT0k8JvIVutB2Y/9iBk7gpgEyAudXwNJmZERdMITGdajOa4VJfD/kNiA3TppQpTP4J+CtcHwdzKBAw==} 2519 | dependencies: 2520 | any-promise: 1.3.0 2521 | end-of-stream: 1.1.0 2522 | stream-to-array: 2.3.0 2523 | dev: true 2524 | 2525 | /string-argv@0.3.2: 2526 | resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} 2527 | engines: {node: '>=0.6.19'} 2528 | dev: true 2529 | 2530 | /string-width@4.2.3: 2531 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 2532 | engines: {node: '>=8'} 2533 | dependencies: 2534 | emoji-regex: 8.0.0 2535 | is-fullwidth-code-point: 3.0.0 2536 | strip-ansi: 6.0.1 2537 | dev: true 2538 | 2539 | /string-width@7.1.0: 2540 | resolution: {integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==} 2541 | engines: {node: '>=18'} 2542 | dependencies: 2543 | emoji-regex: 10.3.0 2544 | get-east-asian-width: 1.2.0 2545 | strip-ansi: 7.1.0 2546 | dev: true 2547 | 2548 | /string_decoder@1.3.0: 2549 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 2550 | dependencies: 2551 | safe-buffer: 5.2.1 2552 | dev: true 2553 | 2554 | /strip-ansi@6.0.1: 2555 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2556 | engines: {node: '>=8'} 2557 | dependencies: 2558 | ansi-regex: 5.0.1 2559 | dev: true 2560 | 2561 | /strip-ansi@7.1.0: 2562 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 2563 | engines: {node: '>=12'} 2564 | dependencies: 2565 | ansi-regex: 6.0.1 2566 | dev: true 2567 | 2568 | /strip-final-newline@2.0.0: 2569 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 2570 | engines: {node: '>=6'} 2571 | dev: true 2572 | 2573 | /strip-final-newline@3.0.0: 2574 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} 2575 | engines: {node: '>=12'} 2576 | dev: true 2577 | 2578 | /strip-json-comments@3.1.1: 2579 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 2580 | engines: {node: '>=8'} 2581 | dev: true 2582 | 2583 | /supports-color@7.2.0: 2584 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2585 | engines: {node: '>=8'} 2586 | dependencies: 2587 | has-flag: 4.0.0 2588 | dev: true 2589 | 2590 | /synckit@0.8.8: 2591 | resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} 2592 | engines: {node: ^14.18.0 || >=16.0.0} 2593 | dependencies: 2594 | '@pkgr/core': 0.1.1 2595 | tslib: 2.6.2 2596 | dev: true 2597 | 2598 | /tar@4.4.18: 2599 | resolution: {integrity: sha512-ZuOtqqmkV9RE1+4odd+MhBpibmCxNP6PJhH/h2OqNuotTX7/XHPZQJv2pKvWMplFH9SIZZhitehh6vBH6LO8Pg==} 2600 | engines: {node: '>=4.5'} 2601 | dependencies: 2602 | chownr: 1.1.4 2603 | fs-minipass: 1.2.7 2604 | minipass: 2.9.0 2605 | minizlib: 1.3.3 2606 | mkdirp: 0.5.6 2607 | safe-buffer: 5.2.1 2608 | yallist: 3.1.1 2609 | dev: true 2610 | 2611 | /tar@6.2.1: 2612 | resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} 2613 | engines: {node: '>=10'} 2614 | dependencies: 2615 | chownr: 2.0.0 2616 | fs-minipass: 2.1.0 2617 | minipass: 5.0.0 2618 | minizlib: 2.1.2 2619 | mkdirp: 1.0.4 2620 | yallist: 4.0.0 2621 | dev: true 2622 | 2623 | /text-table@0.2.0: 2624 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 2625 | dev: true 2626 | 2627 | /time-span@4.0.0: 2628 | resolution: {integrity: sha512-MyqZCTGLDZ77u4k+jqg4UlrzPTPZ49NDlaekU6uuFaJLzPIN1woaRXCbGeqOfxwc3Y37ZROGAJ614Rdv7Olt+g==} 2629 | engines: {node: '>=10'} 2630 | dependencies: 2631 | convert-hrtime: 3.0.0 2632 | dev: true 2633 | 2634 | /to-regex-range@5.0.1: 2635 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2636 | engines: {node: '>=8.0'} 2637 | dependencies: 2638 | is-number: 7.0.0 2639 | dev: true 2640 | 2641 | /toidentifier@1.0.0: 2642 | resolution: {integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==} 2643 | engines: {node: '>=0.6'} 2644 | dev: true 2645 | 2646 | /tr46@0.0.3: 2647 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 2648 | dev: true 2649 | 2650 | /tree-kill@1.2.2: 2651 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 2652 | hasBin: true 2653 | dev: true 2654 | 2655 | /ts-api-utils@1.3.0(typescript@5.4.5): 2656 | resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} 2657 | engines: {node: '>=16'} 2658 | peerDependencies: 2659 | typescript: '>=4.2.0' 2660 | dependencies: 2661 | typescript: 5.4.5 2662 | dev: true 2663 | 2664 | /ts-morph@12.0.0: 2665 | resolution: {integrity: sha512-VHC8XgU2fFW7yO1f/b3mxKDje1vmyzFXHWzOYmKEkCEwcLjDtbdLgBQviqj4ZwP4MJkQtRo6Ha2I29lq/B+VxA==} 2666 | dependencies: 2667 | '@ts-morph/common': 0.11.1 2668 | code-block-writer: 10.1.1 2669 | dev: true 2670 | 2671 | /ts-node@10.9.1(@types/node@16.18.11)(typescript@4.9.5): 2672 | resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} 2673 | hasBin: true 2674 | peerDependencies: 2675 | '@swc/core': '>=1.2.50' 2676 | '@swc/wasm': '>=1.2.50' 2677 | '@types/node': '*' 2678 | typescript: '>=2.7' 2679 | peerDependenciesMeta: 2680 | '@swc/core': 2681 | optional: true 2682 | '@swc/wasm': 2683 | optional: true 2684 | dependencies: 2685 | '@cspotcode/source-map-support': 0.8.1 2686 | '@tsconfig/node10': 1.0.11 2687 | '@tsconfig/node12': 1.0.11 2688 | '@tsconfig/node14': 1.0.3 2689 | '@tsconfig/node16': 1.0.4 2690 | '@types/node': 16.18.11 2691 | acorn: 8.11.3 2692 | acorn-walk: 8.3.2 2693 | arg: 4.1.3 2694 | create-require: 1.1.1 2695 | diff: 4.0.2 2696 | make-error: 1.3.6 2697 | typescript: 4.9.5 2698 | v8-compile-cache-lib: 3.0.1 2699 | yn: 3.1.1 2700 | dev: true 2701 | 2702 | /ts-toolbelt@6.15.5: 2703 | resolution: {integrity: sha512-FZIXf1ksVyLcfr7M317jbB67XFJhOO1YqdTcuGaq9q5jLUoTikukZ+98TPjKiP2jC5CgmYdWWYs0s2nLSU0/1A==} 2704 | dev: true 2705 | 2706 | /tslib@2.6.2: 2707 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 2708 | dev: true 2709 | 2710 | /type-check@0.4.0: 2711 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 2712 | engines: {node: '>= 0.8.0'} 2713 | dependencies: 2714 | prelude-ls: 1.2.1 2715 | dev: true 2716 | 2717 | /type-fest@0.20.2: 2718 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 2719 | engines: {node: '>=10'} 2720 | dev: true 2721 | 2722 | /typescript@4.9.5: 2723 | resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} 2724 | engines: {node: '>=4.2.0'} 2725 | hasBin: true 2726 | dev: true 2727 | 2728 | /typescript@5.4.5: 2729 | resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} 2730 | engines: {node: '>=14.17'} 2731 | hasBin: true 2732 | dev: true 2733 | 2734 | /uid-promise@1.0.0: 2735 | resolution: {integrity: sha512-R8375j0qwXyIu/7R0tjdF06/sElHqbmdmWC9M2qQHpEVbvE4I5+38KJI7LUUmQMp7NVq4tKHiBMkT0NFM453Ig==} 2736 | dev: true 2737 | 2738 | /undici-types@5.26.5: 2739 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} 2740 | dev: true 2741 | 2742 | /undici@5.26.5: 2743 | resolution: {integrity: sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==} 2744 | engines: {node: '>=14.0'} 2745 | dependencies: 2746 | '@fastify/busboy': 2.1.1 2747 | dev: true 2748 | 2749 | /universalify@0.1.2: 2750 | resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} 2751 | engines: {node: '>= 4.0.0'} 2752 | dev: true 2753 | 2754 | /universalify@2.0.1: 2755 | resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} 2756 | engines: {node: '>= 10.0.0'} 2757 | dev: true 2758 | 2759 | /unpipe@1.0.0: 2760 | resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} 2761 | engines: {node: '>= 0.8'} 2762 | dev: true 2763 | 2764 | /uri-js@4.4.1: 2765 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 2766 | dependencies: 2767 | punycode: 2.3.1 2768 | dev: true 2769 | 2770 | /util-deprecate@1.0.2: 2771 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 2772 | dev: true 2773 | 2774 | /uuid@3.3.2: 2775 | resolution: {integrity: sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==} 2776 | deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. 2777 | hasBin: true 2778 | dev: true 2779 | 2780 | /v8-compile-cache-lib@3.0.1: 2781 | resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} 2782 | dev: true 2783 | 2784 | /vercel@34.2.0: 2785 | resolution: {integrity: sha512-OUMvETq+5Iq9L5m1v/E9SPUUfKnKnJjynv0ydeAqWnXoYAwgcaJCg+3HVOEk1VhjhgcGzSS1uGHvlcLmK6XRkA==} 2786 | engines: {node: '>= 16'} 2787 | hasBin: true 2788 | dependencies: 2789 | '@vercel/build-utils': 8.2.0 2790 | '@vercel/fun': 1.1.0 2791 | '@vercel/go': 3.1.1 2792 | '@vercel/hydrogen': 1.0.2 2793 | '@vercel/next': 4.2.11 2794 | '@vercel/node': 3.1.5 2795 | '@vercel/python': 4.2.0 2796 | '@vercel/redwood': 2.0.9 2797 | '@vercel/remix-builder': 2.1.6 2798 | '@vercel/ruby': 2.1.0 2799 | '@vercel/static-build': 2.5.9 2800 | chokidar: 3.3.1 2801 | transitivePeerDependencies: 2802 | - '@swc/core' 2803 | - '@swc/wasm' 2804 | - encoding 2805 | - supports-color 2806 | dev: true 2807 | 2808 | /web-vitals@0.2.4: 2809 | resolution: {integrity: sha512-6BjspCO9VriYy12z356nL6JBS0GYeEcA457YyRzD+dD6XYCQ75NKhcOHUMHentOE7OcVCIXXDvOm0jKFfQG2Gg==} 2810 | dev: true 2811 | 2812 | /webidl-conversions@3.0.1: 2813 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 2814 | dev: true 2815 | 2816 | /whatwg-url@5.0.0: 2817 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 2818 | dependencies: 2819 | tr46: 0.0.3 2820 | webidl-conversions: 3.0.1 2821 | dev: true 2822 | 2823 | /which@2.0.2: 2824 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2825 | engines: {node: '>= 8'} 2826 | hasBin: true 2827 | dependencies: 2828 | isexe: 2.0.0 2829 | dev: true 2830 | 2831 | /wide-align@1.1.5: 2832 | resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} 2833 | dependencies: 2834 | string-width: 4.2.3 2835 | dev: true 2836 | 2837 | /word-wrap@1.2.5: 2838 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 2839 | engines: {node: '>=0.10.0'} 2840 | dev: false 2841 | 2842 | /wrap-ansi@9.0.0: 2843 | resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} 2844 | engines: {node: '>=18'} 2845 | dependencies: 2846 | ansi-styles: 6.2.1 2847 | string-width: 7.1.0 2848 | strip-ansi: 7.1.0 2849 | dev: true 2850 | 2851 | /wrappy@1.0.2: 2852 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2853 | dev: true 2854 | 2855 | /xdg-app-paths@5.1.0: 2856 | resolution: {integrity: sha512-RAQ3WkPf4KTU1A8RtFx3gWywzVKe00tfOPFfl2NDGqbIFENQO4kqAJp7mhQjNj/33W5x5hiWWUdyfPq/5SU3QA==} 2857 | engines: {node: '>=6'} 2858 | dependencies: 2859 | xdg-portable: 7.3.0 2860 | dev: true 2861 | 2862 | /xdg-portable@7.3.0: 2863 | resolution: {integrity: sha512-sqMMuL1rc0FmMBOzCpd0yuy9trqF2yTTVe+E9ogwCSWQCdDEtQUwrZPT6AxqtsFGRNxycgncbP/xmOOSPw5ZUw==} 2864 | engines: {node: '>= 6.0'} 2865 | dependencies: 2866 | os-paths: 4.4.0 2867 | dev: true 2868 | 2869 | /yallist@3.1.1: 2870 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 2871 | dev: true 2872 | 2873 | /yallist@4.0.0: 2874 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 2875 | dev: true 2876 | 2877 | /yaml@2.3.4: 2878 | resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} 2879 | engines: {node: '>= 14'} 2880 | dev: true 2881 | 2882 | /yauzl-clone@1.0.4: 2883 | resolution: {integrity: sha512-igM2RRCf3k8TvZoxR2oguuw4z1xasOnA31joCqHIyLkeWrvAc2Jgay5ISQ2ZplinkoGaJ6orCz56Ey456c5ESA==} 2884 | engines: {node: '>=6'} 2885 | dependencies: 2886 | events-intercept: 2.0.0 2887 | dev: true 2888 | 2889 | /yauzl-promise@2.1.3: 2890 | resolution: {integrity: sha512-A1pf6fzh6eYkK0L4Qp7g9jzJSDrM6nN0bOn5T0IbY4Yo3w+YkWlHFkJP7mzknMXjqusHFHlKsK2N+4OLsK2MRA==} 2891 | engines: {node: '>=6'} 2892 | dependencies: 2893 | yauzl: 2.10.0 2894 | yauzl-clone: 1.0.4 2895 | dev: true 2896 | 2897 | /yauzl@2.10.0: 2898 | resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} 2899 | dependencies: 2900 | buffer-crc32: 0.2.13 2901 | fd-slicer: 1.1.0 2902 | dev: true 2903 | 2904 | /yn@3.1.1: 2905 | resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} 2906 | engines: {node: '>=6'} 2907 | dev: true 2908 | 2909 | /yocto-queue@0.1.0: 2910 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2911 | engines: {node: '>=10'} 2912 | dev: true 2913 | -------------------------------------------------------------------------------- /src/assets/brush.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/fog-shim-reverse.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/fog-shim.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/index.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import path from 'path'; 3 | 4 | export const BRUSH = fs.readFileSync(path.resolve(__dirname, './brush.svg'), 'utf-8'); 5 | export const PEOPLE = fs.readFileSync(path.resolve(__dirname, './people.svg')); 6 | export const PEOPLE_TEXTURE = fs.readFileSync(path.resolve(__dirname, './people-texture.svg')); 7 | export const FOG_SHIM = fs.readFileSync(path.resolve(__dirname, './fog-shim.svg')); 8 | export const FOG_SHIM_REVERSE = fs.readFileSync(path.resolve(__dirname, './fog-shim-reverse.svg')); 9 | -------------------------------------------------------------------------------- /src/assets/people-texture.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/assets/people.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/common/error.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Base Error 3 | */ 4 | export class CustomError extends Error { 5 | secondaryMessage?: string; 6 | /** 7 | * Base error constructor. 8 | * 9 | * @param {string} message Error message. 10 | */ 11 | constructor(message: string, secondaryMessage?: string) { 12 | super(message); 13 | this.secondaryMessage = secondaryMessage; 14 | } 15 | } 16 | 17 | /** 18 | * Missing query parameter class. 19 | */ 20 | export class MissingParamError extends CustomError { 21 | missedParams: unknown; 22 | /** 23 | * Missing query parameter error constructor. 24 | * 25 | * @param {string[]} missedParams An array of missing parameters names. 26 | */ 27 | constructor(missedParams: string[]) { 28 | const msg = `Missing params ${missedParams 29 | .map((p) => `"${p}"`) 30 | .join(', ')} make sure you pass the parameters in URL`; 31 | super(msg); 32 | this.missedParams = missedParams; 33 | } 34 | } 35 | 36 | export enum ErrorCodes { 37 | MAX_RETRY = 'You can deploy own instance or wait until public will be no longer limited', 38 | NO_TOKENS = 'Please add an env variable called GITHUB_PAT_1 with your GitHub API token in vercel', 39 | USER_NOT_FOUND = 'Make sure the provided username is not an organization', 40 | GRAPHQL_ERROR = 'Please try again later', 41 | } 42 | 43 | -------------------------------------------------------------------------------- /src/common/index.ts: -------------------------------------------------------------------------------- 1 | export * from './error'; 2 | export * from './rank'; 3 | export * from './retries'; 4 | export * from './utils'; 5 | -------------------------------------------------------------------------------- /src/common/rank.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Calculates the users rank. 3 | */ 4 | export const calculateRank = (params: { 5 | allCommits: boolean, 6 | commits: number, 7 | prs: number, 8 | issues: number, 9 | reviews: number, 10 | stars: number, 11 | followers: number, 12 | }): number => { 13 | const { allCommits, commits, prs, issues, reviews, stars, followers } = params; 14 | const COMMITS_MEDIAN = allCommits ? 1000 : 250; 15 | const COMMITS_WEIGHT = 2; 16 | const PRS_WEIGHT = 3; 17 | const PRS_MEDIAN = 50; 18 | const ISSUES_MEDIAN = 25; 19 | const ISSUES_WEIGHT = 1; 20 | const REVIEWS_MEDIAN = 2; 21 | const REVIEWS_WEIGHT = 1; 22 | const STARS_MEDIAN = 50; 23 | const STARS_WEIGHT = 4; 24 | const FOLLOWERS_MEDIAN = 10; 25 | const FOLLOWERS_WEIGHT = 1; 26 | 27 | const TOTAL_WEIGHT = 28 | COMMITS_WEIGHT + 29 | PRS_WEIGHT + 30 | ISSUES_WEIGHT + 31 | REVIEWS_WEIGHT + 32 | STARS_WEIGHT + 33 | FOLLOWERS_WEIGHT; 34 | 35 | const rank = 1 - 36 | (COMMITS_WEIGHT * exponentialCdf(commits / COMMITS_MEDIAN) + 37 | PRS_WEIGHT * exponentialCdf(prs / PRS_MEDIAN) + 38 | ISSUES_WEIGHT * exponentialCdf(issues / ISSUES_MEDIAN) + 39 | REVIEWS_WEIGHT * exponentialCdf(reviews / REVIEWS_MEDIAN) + 40 | STARS_WEIGHT * logNormalCdf(stars / STARS_MEDIAN) + 41 | FOLLOWERS_WEIGHT * logNormalCdf(followers / FOLLOWERS_MEDIAN)) / 42 | TOTAL_WEIGHT; 43 | 44 | return rank * 100; 45 | }; 46 | 47 | const exponentialCdf = (x: number): number => 1 - 2 ** -x; 48 | 49 | const logNormalCdf = (x: number): number => x / (1 + x); 50 | -------------------------------------------------------------------------------- /src/common/retries.ts: -------------------------------------------------------------------------------- 1 | import { AxiosResponse } from 'axios'; 2 | import { CustomError, ErrorCodes } from './error'; 3 | import { GithubResponse, GithubErrorType } from '../types/github'; 4 | 5 | const PATs = Object.keys(process.env).filter((key) => 6 | /GITHUB_PAT_\d*$/.exec(key), 7 | ).length; 8 | 9 | const RETRIES = process.env.NODE_ENV === 'test' ? 1 : PATs; 10 | 11 | export const retryer = async ( 12 | fetcher: (variables: T, token: string) => Promise>>, 13 | variables: T, 14 | retries = 0, 15 | ): Promise>> => { 16 | if (!RETRIES) { 17 | throw new CustomError('No GitHub API tokens found', ErrorCodes.NO_TOKENS); 18 | } 19 | if (retries > RETRIES) { 20 | throw new CustomError( 21 | 'Downtime due to GitHub API rate limiting', 22 | ErrorCodes.MAX_RETRY, 23 | ); 24 | } 25 | try { 26 | const token = process.env[`GITHUB_PAT_${retries + 1}`] as string; 27 | const response = await fetcher( 28 | variables, 29 | token, 30 | ); 31 | const isRateExceeded = response.data.errors?.[0].type === GithubErrorType.RATE_LIMITED; 32 | if (isRateExceeded) { 33 | console.log(`PAT_${retries + 1} Failed`); 34 | return retryer(fetcher, variables, ++retries); 35 | } 36 | return response; 37 | } catch (error) { 38 | const { response } = (error as { response?: AxiosResponse> }); 39 | const isBadCredential = response?.data?.message === 'Bad credentials'; 40 | const isAccountSuspended = response?.data?.message === 'Sorry. Your account was suspended.'; 41 | if (isBadCredential || isAccountSuspended) { 42 | console.log(`GITHUB_PAT_${retries + 1} Failed`); 43 | // directly return from the function 44 | return retryer(fetcher, variables, ++retries); 45 | } else { 46 | return response as AxiosResponse>; 47 | } 48 | } 49 | }; 50 | -------------------------------------------------------------------------------- /src/common/utils.ts: -------------------------------------------------------------------------------- 1 | import wrap from 'word-wrap'; 2 | 3 | export const wrapTextMultiline = (text: string, width = 59, maxLines = 3): string[] => { 4 | const fullWidthComma = ','; 5 | const encoded = encodeHTML(text); 6 | const isChinese = encoded.includes(fullWidthComma); 7 | 8 | let wrapped = []; 9 | 10 | if (isChinese) { 11 | wrapped = encoded.split(fullWidthComma); // Chinese full punctuation 12 | } else { 13 | wrapped = wrap(encoded, { 14 | width, 15 | }).split('\n'); // Split wrapped lines to get an array of lines 16 | } 17 | const lines = wrapped.map((line) => line.trim()).slice(0, maxLines); 18 | if (wrapped.length > maxLines) { 19 | lines[maxLines - 1] += '...'; 20 | } 21 | 22 | const multiLineText = lines.filter(Boolean); 23 | return multiLineText; 24 | }; 25 | 26 | const encodeHTML = (str: string) => { 27 | return str 28 | .replace(/[\u00A0-\u9999<>&](?!#)/gim, (i) => { 29 | return '&#' + i.charCodeAt(0) + ';'; 30 | }) 31 | .replace(/\u0008/gim, ''); 32 | }; 33 | -------------------------------------------------------------------------------- /src/fetchers/request.ts: -------------------------------------------------------------------------------- 1 | import axios, { AxiosResponse } from 'axios'; 2 | import { GithubResponse } from '../types/github'; 3 | 4 | export const request = (data: Record, headers: Record): Promise>> => { 5 | return axios({ 6 | url: 'https://api.github.com/graphql', 7 | method: 'post', 8 | headers, 9 | data, 10 | }); 11 | }; 12 | -------------------------------------------------------------------------------- /src/fetchers/stats.ts: -------------------------------------------------------------------------------- 1 | import { AxiosResponse } from 'axios'; 2 | import { request } from './request'; 3 | import { 4 | retryer, wrapTextMultiline, MissingParamError, CustomError, ErrorCodes, calculateRank 5 | } from '../common'; 6 | import { GRAPHQL_REPOS_QUERY, GRAPHQL_STATS_QUERY } from '../graphql'; 7 | import { StatsResponse, IGithubStats, GithubErrorType } from '../types/github'; 8 | import { IStats } from '../types/stats'; 9 | 10 | type Variables = { 11 | login: string; 12 | first: number; 13 | includeMergedPullRequests: boolean; 14 | includeDiscussions: boolean; 15 | includeDiscussionsAnswers: boolean; 16 | after: string | null; 17 | } 18 | 19 | /** 20 | * Fetch stats for a given username. 21 | * 22 | * @param {string} username GitHub username. 23 | */ 24 | export const fetchStats = async (username?: string): Promise => { 25 | if (!username) { 26 | throw new MissingParamError(['username']); 27 | } 28 | 29 | const stats: IStats = { 30 | name: '', 31 | totalPRs: 0, 32 | totalPRsMerged: 0, 33 | mergedPRsPercentage: 0, 34 | totalReviews: 0, 35 | totalCommits: 0, 36 | totalIssues: 0, 37 | totalStars: 0, 38 | totalDiscussionsStarted: 0, 39 | totalFollowers: 0, 40 | totalDiscussionsAnswered: 0, 41 | contributedTo: 0, 42 | rank: 0, 43 | }; 44 | 45 | const res = await statsFetcher({ 46 | username, 47 | includeMergedPullRequests: true, 48 | includeDiscussions: true, 49 | includeDiscussionsAnswers: true, 50 | }); 51 | 52 | catchError(res); 53 | 54 | const { user } = res.data.data; 55 | stats.name = user.name || user.login; 56 | 57 | Object.assign(stats, { 58 | totalCommits: user.contributionsCollection.totalCommitContributions, 59 | totalPRs: user.pullRequests.totalCount, 60 | totalReviews: user.contributionsCollection.totalPullRequestReviewContributions, 61 | contributedTo: user.repositoriesContributedTo.totalCount, 62 | totalStars: user.repositories.nodes 63 | .reduce((prev, curr) => { 64 | return prev + curr.stargazers.totalCount; 65 | }, 0), 66 | totalFollowers: user.followers.totalCount, 67 | totalIssues: user.openIssues.totalCount + user.closedIssues.totalCount, 68 | }); 69 | 70 | stats.rank = calculateRank({ 71 | allCommits: false, 72 | commits: stats.totalCommits, 73 | prs: stats.totalPRs, 74 | reviews: stats.totalReviews, 75 | issues: stats.totalIssues, 76 | stars: stats.totalStars, 77 | followers: user.followers.totalCount, 78 | }); 79 | 80 | return stats; 81 | }; 82 | 83 | /** 84 | * Fetch stats information for a given username. 85 | */ 86 | const statsFetcher = async (params: { 87 | username: string; 88 | includeMergedPullRequests: boolean; 89 | includeDiscussions: boolean; 90 | includeDiscussionsAnswers: boolean; 91 | }) => { 92 | const { 93 | username, 94 | includeMergedPullRequests = false, 95 | includeDiscussions = false, 96 | includeDiscussionsAnswers = false, 97 | } = params; 98 | let stats; 99 | let hasNextPage = true; 100 | let endCursor = null; 101 | 102 | while (hasNextPage) { 103 | const variables: Variables = { 104 | login: username, 105 | first: 100, 106 | after: endCursor, 107 | includeMergedPullRequests, 108 | includeDiscussions, 109 | includeDiscussionsAnswers, 110 | }; 111 | const res = await retryer(fetcher, variables); 112 | if (res.data.errors) { 113 | return res; 114 | } 115 | 116 | // Store stats data. 117 | const repoNodes = res.data.data.user.repositories.nodes; 118 | if (stats) { 119 | stats.data.data.user.repositories.nodes.push(...repoNodes); 120 | } else { 121 | stats = res; 122 | } 123 | 124 | // Disable multi page fetching on public Vercel instance due to rate limits. 125 | const repoNodesWithStars = repoNodes.filter( 126 | (node) => node.stargazers.totalCount !== 0, 127 | ); 128 | hasNextPage = 129 | process.env.FETCH_MULTI_PAGE_STARS === 'true' && 130 | repoNodes.length === repoNodesWithStars.length && 131 | res.data.data.user.repositories.pageInfo.hasNextPage; 132 | endCursor = res.data.data.user.repositories.pageInfo.endCursor; 133 | } 134 | 135 | return stats as AxiosResponse; 136 | }; 137 | 138 | const fetcher = (variables: Variables, token: string): Promise> => { 139 | const query = variables.after ? GRAPHQL_REPOS_QUERY : GRAPHQL_STATS_QUERY; 140 | return request( 141 | { 142 | query, 143 | variables, 144 | }, 145 | { 146 | Authorization: `bearer ${token}`, 147 | }, 148 | ); 149 | }; 150 | 151 | const catchError = (resp?: AxiosResponse): void => { 152 | if (!resp?.data.errors) { 153 | return; 154 | } 155 | console.error(resp.data.errors); 156 | if (resp.data.errors[0].type === GithubErrorType.NOT_FOUND) { 157 | throw new CustomError( 158 | resp.data.errors[0].message || 'Could not fetch user.', 159 | ErrorCodes.USER_NOT_FOUND, 160 | ); 161 | } 162 | if (resp.data.errors[0].message) { 163 | throw new CustomError( 164 | wrapTextMultiline(resp.data.errors[0].message, 90, 1)[0], 165 | resp.statusText, 166 | ); 167 | } 168 | throw new CustomError( 169 | 'Something went wrong while trying to retrieve the stats data using the GraphQL API.', 170 | ErrorCodes.GRAPHQL_ERROR, 171 | ); 172 | }; 173 | -------------------------------------------------------------------------------- /src/graphql/index.ts: -------------------------------------------------------------------------------- 1 | export const GRAPHQL_REPOS_FIELD = ` 2 | repositories(first: 100, ownerAffiliations: OWNER, orderBy: {direction: DESC, field: STARGAZERS}, after: $after) { 3 | totalCount 4 | nodes { 5 | name 6 | stargazers { 7 | totalCount 8 | } 9 | } 10 | pageInfo { 11 | hasNextPage 12 | endCursor 13 | } 14 | } 15 | `; 16 | 17 | export const GRAPHQL_REPOS_QUERY = ` 18 | query userInfo($login: String!, $after: String) { 19 | user(login: $login) { 20 | ${GRAPHQL_REPOS_FIELD} 21 | } 22 | } 23 | `; 24 | 25 | export const GRAPHQL_STATS_QUERY = ` 26 | query userInfo($login: String!, $after: String, $includeMergedPullRequests: Boolean!, $includeDiscussions: Boolean!, $includeDiscussionsAnswers: Boolean!) { 27 | user(login: $login) { 28 | name 29 | login 30 | contributionsCollection { 31 | totalCommitContributions, 32 | totalPullRequestReviewContributions 33 | } 34 | repositoriesContributedTo(first: 1, contributionTypes: [COMMIT, ISSUE, PULL_REQUEST, REPOSITORY]) { 35 | totalCount 36 | } 37 | pullRequests(first: 1) { 38 | totalCount 39 | } 40 | mergedPullRequests: pullRequests(states: MERGED) @include(if: $includeMergedPullRequests) { 41 | totalCount 42 | } 43 | openIssues: issues(states: OPEN) { 44 | totalCount 45 | } 46 | closedIssues: issues(states: CLOSED) { 47 | totalCount 48 | } 49 | followers { 50 | totalCount 51 | } 52 | repositoryDiscussions @include(if: $includeDiscussions) { 53 | totalCount 54 | } 55 | repositoryDiscussionComments(onlyAnswers: true) @include(if: $includeDiscussionsAnswers) { 56 | totalCount 57 | } 58 | ${GRAPHQL_REPOS_FIELD} 59 | } 60 | } 61 | `; 62 | -------------------------------------------------------------------------------- /src/render/base.ts: -------------------------------------------------------------------------------- 1 | import { FOG_SHIM, FOG_SHIM_REVERSE } from '../assets'; 2 | import { IStats } from '../types/stats'; 3 | 4 | export class Render { 5 | static WIDTH = 500; 6 | static HEIGHT = 220; 7 | static CARD_RADIUS = 8; 8 | 9 | protected stats: IStats; 10 | 11 | constructor(stats: IStats) { 12 | this.stats = stats; 13 | } 14 | 15 | public render(): string { 16 | const template = ` 17 | ${this.renderHead()} 18 | ${this.renderBackground()} 19 | ${this.renderContent()} 20 | `; 21 | return template.replace(/>\s+<').replace(/\n|\r/g, '').trim(); 22 | } 23 | 24 | public renderContent(): string { 25 | return ''; 26 | } 27 | 28 | public renderHead(): string { 29 | return ''; 30 | } 31 | 32 | private renderBackground(): string { 33 | return ` 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | ${FOG_SHIM} 51 | ${FOG_SHIM_REVERSE} 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 69 | 70 | 71 | 72 | 73 | 80 | 81 | `; 82 | } 83 | // 84 | } 85 | -------------------------------------------------------------------------------- /src/render/error.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Renders error message on the card. 3 | * 4 | * @param {string} message Main error message. 5 | * @param {string} secondaryMessage The secondary error message. 6 | * @returns {string} The SVG markup. 7 | */ 8 | export const renderError = (message: string, secondaryMessage?: string): string => ` 9 | 10 | 15 | 18 | Something went wrong! 19 | 20 | ${message} 21 | ${secondaryMessage || ''} 22 | 23 | 24 | `; 25 | -------------------------------------------------------------------------------- /src/render/immortality/index.ts: -------------------------------------------------------------------------------- 1 | import { Render } from '../base'; 2 | import { BRUSH, PEOPLE, PEOPLE_TEXTURE } from '../../assets'; 3 | import { IStats } from '../../types/stats'; 4 | 5 | const MAX_STARTS = 10000; 6 | const MAX_FOLLOWERS = 1000; 7 | const MAX_PRS = 500; 8 | const MAX_CONTRIBUTED = 10; 9 | const MAX_ISSUES = 200; 10 | const MAX_COMMITS = 365; 11 | const RADIAN = Math.PI / 3; 12 | 13 | export class ImmortalityRender extends Render { 14 | constructor(stats: IStats) { 15 | super(stats); 16 | } 17 | 18 | public renderContent(): string { 19 | return ` 20 | ${this.renderTitle()} 21 | ${this.renderRadarChart()} 22 | ${this.renderLevel()} 23 | `; 24 | } 25 | 26 | private renderLevel(): string { 27 | const THRESHOLDS = [1, 5, 10, 15, 20, 30,40,50,60, 70, 80, 90, 100]; 28 | const LEVELS = ['道祖', '大罗', '太乙', '金仙', '真仙', '大乘', '合体', '炼虚', '化神', '元婴', '金丹', '筑基', '练气']; 29 | const level = LEVELS[THRESHOLDS.findIndex((t) => this.stats.rank <= t)]; 30 | 31 | return ` 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | ${PEOPLE} 41 | 42 | 43 | 44 | 45 | ${PEOPLE_TEXTURE} 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | ${level} 57 | 58 | 59 | `; 60 | } 61 | 62 | public renderHead(): string { 63 | return `${this.renderStyle()}`; 64 | } 65 | 66 | private renderStyle(): string { 67 | return ` 68 | ${this.stats.name}的仙途 69 | 108 | `; 109 | } 110 | 111 | private renderTitle(): string { 112 | return ` 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | ${BRUSH} 130 | 131 | 132 | ${this.stats.name} 133 | 134 | 135 | `; 136 | } 137 | 138 | private renderRadarChart(): string { 139 | const rx = 60; 140 | const ry = 60 * Math.sin(Math.PI / 3); 141 | const polygon60 = this.renderHexagon(60); 142 | const polygon40 = this.renderHexagon(40); 143 | const polygon20 = this.renderHexagon(20); 144 | 145 | const star = Math.min(this.stats.totalStars / MAX_STARTS, 1) * 60; 146 | const starPoint = [rx - star / 2 , ry - star * Math.sin(RADIAN)]; 147 | 148 | const pr = Math.min(this.stats.totalPRs / MAX_PRS, 1) * 60; 149 | const prPoint = [rx + pr / 2, ry - pr * Math.sin(RADIAN)]; 150 | 151 | const issues = Math.min(this.stats.totalIssues / MAX_ISSUES, 1) * 60; 152 | const issuesPoint = [rx + issues, ry]; 153 | 154 | const follower = Math.min(this.stats.totalFollowers / MAX_FOLLOWERS, 1) * 60; 155 | const followerPoint = [rx + follower / 2, ry + follower * Math.sin(RADIAN)]; 156 | 157 | const commits = Math.min(this.stats.totalCommits / MAX_COMMITS, 1) * 60; 158 | const commitsPoint = [rx - commits / 2, ry + commits * Math.sin(RADIAN)]; 159 | 160 | const contributed = Math.min(this.stats.contributedTo / MAX_CONTRIBUTED, 1) * 60; 161 | const contributedPoint = [rx - contributed / 2, ry]; 162 | 163 | const radarPoints = `${starPoint[0]},${starPoint[1]} ${prPoint[0]},${prPoint[1]} ${issuesPoint[0]},${issuesPoint[1]} ${followerPoint[0]},${followerPoint[1]} ${commitsPoint[0]},${commitsPoint[1]} ${contributedPoint[0]},${contributedPoint[1]}`; 164 | 165 | const total = calculateDistance(starPoint, prPoint) 166 | + calculateDistance(prPoint, issuesPoint) 167 | + calculateDistance(issuesPoint, followerPoint) 168 | + calculateDistance(followerPoint, commitsPoint) 169 | + calculateDistance(commitsPoint, contributedPoint) 170 | + calculateDistance(contributedPoint, starPoint); 171 | 172 | return ` 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 185 | 191 | 197 | ${polygon60.map((item) => ``).join('')} 198 | 220 | 221 | 222 | Star 223 | ${this.stats.totalStars} 224 | 225 | 226 | PRs 227 | ${this.stats.totalPRs} 228 | 229 | 230 | 231 | Issues 232 | ${this.stats.totalIssues} 233 | 234 | 235 | Followers 236 | ${this.stats.totalFollowers} 237 | 238 | 239 | Commits 240 | ${this.stats.totalCommits} 241 | 242 | 243 | C2 244 | ${this.stats.contributedTo} 245 | 246 | 247 | `; 248 | } 249 | 250 | private renderHexagon(length: number): number[][] { 251 | const long = length * Math.sin(Math.PI / 3); 252 | const short = length / 2; 253 | const x1 = 0; 254 | const x2 = short; 255 | const x3 = length + short; 256 | const x4 = length * 2; 257 | const y1 = long; 258 | const y2 = 0; 259 | const y3 = 2 * long; 260 | return [ 261 | [x1, y1], 262 | [x2, y2], 263 | [x3, y2], 264 | [x4, y1], 265 | [x3, y3], 266 | [x2, y3], 267 | ]; 268 | } 269 | } 270 | 271 | /** 272 | * calculates the distance between two points 273 | */ 274 | const calculateDistance = (a: number[], b: number[]): number => { 275 | const dx = b[0] - a[0]; 276 | const dy = b[1] - a[1]; 277 | return Math.sqrt(dx * dx + dy * dy); 278 | }; 279 | -------------------------------------------------------------------------------- /src/render/index.ts: -------------------------------------------------------------------------------- 1 | export * from './render'; 2 | export * from './error'; 3 | -------------------------------------------------------------------------------- /src/render/render.ts: -------------------------------------------------------------------------------- 1 | import { ImmortalityRender } from './immortality'; 2 | import { Render } from './base'; 3 | import { IStats } from '../types/stats'; 4 | 5 | export const renderStatsCard = (stats: IStats) => { 6 | const instance = getInstance(stats); 7 | 8 | return instance.render(); 9 | }; 10 | 11 | const getInstance = (stats: IStats): Render => { 12 | const instance = new ImmortalityRender(stats); 13 | 14 | return instance; 15 | }; 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/types/github.ts: -------------------------------------------------------------------------------- 1 | export enum GithubErrorType { 2 | RATE_LIMITED = 'RATE_LIMITED', 3 | NOT_FOUND = 'NOT_FOUND', 4 | } 5 | 6 | export type GithubResponse = { 7 | message?: string; 8 | errors?: { 9 | type: GithubErrorType; 10 | message?: string; 11 | }[]; 12 | data: T; 13 | } 14 | 15 | export interface IGithubStats { 16 | user: { 17 | name: string; 18 | login: string; 19 | contributionsCollection: { 20 | totalCommitContributions: number; 21 | totalPullRequestReviewContributions: number; 22 | }; 23 | repositoriesContributedTo: { 24 | totalCount: number; 25 | }; 26 | pullRequests: { 27 | totalCount: number; 28 | }; 29 | mergedPullRequests: { 30 | totalCount: number; 31 | }; 32 | openIssues: { 33 | totalCount: number; 34 | }; 35 | closedIssues: { 36 | totalCount: 10; 37 | }; 38 | followers: { 39 | totalCount: number; 40 | }; 41 | repositoryDiscussions: { 42 | totalCount: number; 43 | }; 44 | repositoryDiscussionComments: { 45 | totalCount: number; 46 | }; 47 | repositories: { 48 | totalCount: number; 49 | nodes: { 50 | stargazers: { 51 | totalCount: number; 52 | } 53 | }[]; 54 | pageInfo: { 55 | hasNextPage: boolean; 56 | endCursor: string; 57 | }; 58 | }; 59 | }; 60 | } 61 | 62 | export type StatsResponse = GithubResponse; 63 | -------------------------------------------------------------------------------- /src/types/request.ts: -------------------------------------------------------------------------------- 1 | export interface RequestQuery { 2 | username?: string; 3 | } 4 | -------------------------------------------------------------------------------- /src/types/stats.ts: -------------------------------------------------------------------------------- 1 | export interface IStats { 2 | name: string, 3 | totalPRs: number, 4 | totalPRsMerged: number, 5 | mergedPRsPercentage: number, 6 | totalReviews: number, 7 | totalCommits: number, 8 | totalIssues: number, 9 | totalStars: number, 10 | totalDiscussionsStarted: number, 11 | totalDiscussionsAnswered: number, 12 | totalFollowers: number, 13 | contributedTo: number, 14 | rank: number, 15 | } 16 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "target": "esnext", 5 | "module": "commonjs", 6 | "noImplicitAny": true, 7 | "strict": true, 8 | "moduleResolution": "node", 9 | "esModuleInterop": true, 10 | "skipLibCheck": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "allowJs": true, 15 | }, 16 | "exclude": [ 17 | "node_modules" 18 | ], 19 | "include": [ 20 | "src/**/*.ts", 21 | "api/**/*.ts" 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /vercel.json: -------------------------------------------------------------------------------- 1 | { 2 | "functions": { 3 | "api/index.ts": { 4 | "runtime": "@vercel/node@3.1.5", 5 | "memory": 128, 6 | "maxDuration": 10 7 | } 8 | }, 9 | "redirects": [ 10 | { 11 | "source": "/", 12 | "destination": "https://github.com/IceEnd/github-immortality" 13 | } 14 | ] 15 | } 16 | --------------------------------------------------------------------------------