├── .eslintrc.json ├── .github ├── renovate.json5 └── workflows │ └── test.yaml ├── .gitignore ├── .husky └── pre-commit ├── .vscode ├── extensions.json └── settings.json ├── DEV.md ├── LICENSE ├── README.md ├── biome.json ├── example ├── .eslintrc ├── README.md ├── next-env.d.ts ├── package.json ├── pnpm-lock.yaml ├── src │ ├── pages │ │ ├── _app.tsx │ │ ├── api │ │ │ ├── renew-token.ts │ │ │ └── trpc │ │ │ │ └── [trpc].ts │ │ └── index.tsx │ ├── server │ │ ├── appRouter.ts │ │ ├── context.ts │ │ └── trpc.ts │ └── utils │ │ ├── logLink.ts │ │ ├── tokenRefresh.ts │ │ └── trpc.ts └── tsconfig.json ├── package.json ├── pnpm-lock.yaml ├── src ├── index.test.ts └── index.ts ├── tsconfig.json └── vitest.config.ts /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": "@sachinraja" 4 | } 5 | -------------------------------------------------------------------------------- /.github/renovate.json5: -------------------------------------------------------------------------------- 1 | { 2 | extends: ['config:js-lib', 'github>sachinraja/renovate-config:js'], 3 | } 4 | -------------------------------------------------------------------------------- /.github/workflows/test.yaml: -------------------------------------------------------------------------------- 1 | name: Test 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | 9 | jobs: 10 | test: 11 | runs-on: ubuntu-latest 12 | 13 | steps: 14 | - uses: actions/checkout@v4 15 | 16 | - uses: pnpm/action-setup@v2 17 | with: 18 | version: 10 19 | 20 | - uses: actions/setup-node@v4 21 | with: 22 | node-version: 22 23 | cache: 'pnpm' 24 | 25 | - name: Install dependencies 26 | run: pnpm install 27 | 28 | - name: Lint 29 | run: pnpm lint 30 | 31 | - name: Test 32 | run: pnpm test 33 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | .pnpm-debug.log* 9 | 10 | # Diagnostic reports (https://nodejs.org/api/report.html) 11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 12 | 13 | # Runtime data 14 | pids 15 | *.pid 16 | *.seed 17 | *.pid.lock 18 | 19 | # Directory for instrumented libs generated by jscoverage/JSCover 20 | lib-cov 21 | 22 | # Coverage directory used by tools like istanbul 23 | coverage 24 | *.lcov 25 | 26 | # nyc test coverage 27 | .nyc_output 28 | 29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 30 | .grunt 31 | 32 | # Bower dependency directory (https://bower.io/) 33 | bower_components 34 | 35 | # node-waf configuration 36 | .lock-wscript 37 | 38 | # Compiled binary addons (https://nodejs.org/api/addons.html) 39 | build/Release 40 | 41 | # Dependency directories 42 | node_modules/ 43 | jspm_packages/ 44 | 45 | # Snowpack dependency directory (https://snowpack.dev/) 46 | web_modules/ 47 | 48 | # TypeScript cache 49 | *.tsbuildinfo 50 | 51 | # Optional npm cache directory 52 | .npm 53 | 54 | # Optional eslint cache 55 | .eslintcache 56 | 57 | # Optional stylelint cache 58 | .stylelintcache 59 | 60 | # Microbundle cache 61 | .rpt2_cache/ 62 | .rts2_cache_cjs/ 63 | .rts2_cache_es/ 64 | .rts2_cache_umd/ 65 | 66 | # Optional REPL history 67 | .node_repl_history 68 | 69 | # Output of 'npm pack' 70 | *.tgz 71 | 72 | # Yarn Integrity file 73 | .yarn-integrity 74 | 75 | # dotenv environment variable files 76 | .env 77 | .env.development.local 78 | .env.test.local 79 | .env.production.local 80 | .env.local 81 | 82 | # parcel-bundler cache (https://parceljs.org/) 83 | .cache 84 | .parcel-cache 85 | 86 | # Next.js build output 87 | .next 88 | out 89 | 90 | # Nuxt.js build / generate output 91 | .nuxt 92 | dist 93 | 94 | # Gatsby files 95 | .cache/ 96 | # Comment in the public line in if your project uses Gatsby and not Next.js 97 | # https://nextjs.org/blog/next-9-1#public-directory-support 98 | # public 99 | 100 | # vuepress build output 101 | .vuepress/dist 102 | 103 | # vuepress v2.x temp and cache directory 104 | .temp 105 | .cache 106 | 107 | # Docusaurus cache and generated files 108 | .docusaurus 109 | 110 | # Serverless directories 111 | .serverless/ 112 | 113 | # FuseBox cache 114 | .fusebox/ 115 | 116 | # DynamoDB Local files 117 | .dynamodb/ 118 | 119 | # TernJS port file 120 | .tern-port 121 | 122 | # Stores VSCode versions used for testing VSCode extensions 123 | .vscode-test 124 | 125 | # yarn v2 126 | .yarn/cache 127 | .yarn/unplugged 128 | .yarn/build-state.yml 129 | .yarn/install-state.gz 130 | .pnp.* 131 | 132 | .next -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | pnpm format 5 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["dbaeumer.vscode-eslint", "dprint.dprint"] 3 | } 4 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.defaultFormatter": "dprint.dprint", 3 | "dprint.path": "node_modules/dprint/dprint", 4 | "typescript.preferences.importModuleSpecifierEnding": "js", 5 | "[typescript]": { 6 | "editor.defaultFormatter": "biomejs.biome" 7 | }, 8 | "[json]": { 9 | "editor.defaultFormatter": "biomejs.biome" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /DEV.md: -------------------------------------------------------------------------------- 1 | ## Publishing a new version 2 | 3 | ``` 4 | pnpm run build 5 | pnpm publish:minor 6 | ``` 7 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021-2022 Sachin Raja 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 |

2 | 4 |

5 | 6 | # tRPC Token Refresh Link 7 | 8 | | Seamlessly update your JWT access token right before it expires. 9 | 10 | - ✅ Works with batching 11 | - ✅ Works with many requests at once. Will only do one token refresh request 12 | - ✅ Works with tRPC v10 and v11 13 | 14 | ## Demo 15 | 16 | This demo shows how the link preserves batching and only does one request to renew the token: 17 | 18 | ![shot-A5GEaVUB](https://user-images.githubusercontent.com/10865165/203061560-209a02c6-cb9c-4201-84f7-827d61914e1f.gif) 19 | 20 | ## Installation 21 | 22 | ``` 23 | npm install trpc-token-refresh-link 24 | ``` 25 | 26 | ## Implementation 27 | 28 | ```ts 29 | import { tokenRefreshLink } from "trpc-token-refresh-link" 30 | 31 | tokenRefreshLink({ 32 | tokenRefreshNeeded: () => boolean, 33 | fetchAccessToken: async () => void 34 | }), 35 | ``` 36 | 37 | ## Example 38 | 39 | ```ts 40 | ... 41 | links: [ 42 | tokenRefreshLink({ 43 | // access to the original tRPC query operation object 44 | // is accessible on both methods 45 | tokenRefreshNeeded: (query) => { 46 | // on every request, this function is called 47 | 48 | const token = ... // get the token from localstorage or cookies 49 | 50 | if(query.path.includes(/* A route that does not need tokens */)){ 51 | return false 52 | } 53 | 54 | if(/* There is no token */){ 55 | return false 56 | } 57 | 58 | if(/* Token is valid */){ 59 | return false 60 | } 61 | 62 | if(/* Token is expired or expires soon (in 10 seconds) */){ 63 | return true 64 | } 65 | 66 | // Return `false` as default statement 67 | return false 68 | }, 69 | fetchAccessToken: async (query) => { 70 | // if true is returned from tokenRefreshNeeded, this function will be called 71 | 72 | // do your magic to fetch a refresh token here 73 | // example: 74 | try { 75 | const res = (await fetch("/api/renew-token", { 76 | method: "POST", 77 | }).then((res) => res.json())) as { accessToken: string } 78 | 79 | saveAccessToken(res.accessToken) // save token to cookies 80 | } catch (err) { 81 | 82 | // token refreshing failed, let's log the user out 83 | if (err instanceof Error && err.message.includes("401")) { 84 | clearAccessToken() 85 | location.reload() 86 | 87 | // can also do more precise logs using the original object 88 | console.log(`Token failed blocking the ${query.path} ${query.type}.`) 89 | } 90 | } 91 | }, 92 | }), 93 | httpLink({ 94 | url, 95 | }) 96 | ], 97 | ... 98 | ``` 99 | 100 | ## Philosophy 101 | 102 | This library calculates the expiration time for the access token before sending it to the server. 103 | 104 | This means we can refresh the token in advance, not requiring the roundtrip to the server for that. 105 | 106 | This approach means that you need to have a way to read and decode the access token on the client. 107 | If you use a http-only access token (not available to js), this approach will not work. 108 | 109 | ## Credits and similar libraries 110 | 111 | - This library is heavily inspired from [newsiberian/apollo-link-token-refresh](https://github.com/newsiberian/apollo-link-token-refresh). 112 | - [axios-auth-refresh](https://github.com/Flyrell/axios-auth-refresh) - Axios interceptors that refresh token on 403 responses 113 | - [trpc-refresh-token-link](https://github.com/pyncz/trpc-refresh-token-link) 114 | -------------------------------------------------------------------------------- /biome.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", 3 | "vcs": { 4 | "enabled": false, 5 | "clientKind": "git", 6 | "useIgnoreFile": false 7 | }, 8 | "files": { 9 | "ignoreUnknown": false, 10 | "ignore": ["dist/**", "example/**", "node_modules/**"] 11 | }, 12 | "formatter": { 13 | "enabled": true, 14 | "indentStyle": "tab" 15 | }, 16 | "organizeImports": { 17 | "enabled": true 18 | }, 19 | "linter": { 20 | "enabled": true, 21 | "rules": { 22 | "recommended": true 23 | } 24 | }, 25 | "javascript": { 26 | "formatter": { 27 | "quoteStyle": "double" 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /example/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "parserOptions": { "project": "tsconfig.json" }, 3 | "extends": ["next"] 4 | } 5 | -------------------------------------------------------------------------------- /example/README.md: -------------------------------------------------------------------------------- 1 | (copied from trpc/examples/next-minimal-starter) 2 | 3 | # Next.js + TRPC 4 | 5 | This example shows how you can make a typed query using a minimal implementation of TRPC following [`this as a reference`](https://trpc.io/docs/nextjs). 6 | 7 | ## Setup 8 | 9 | ```bash 10 | npx create-next-app --example https://github.com/trpc/trpc --example-path examples/next-minimal-starter trpc-minimal-starter 11 | cd trpc-minimal-starter 12 | npm i 13 | npm run dev 14 | ``` 15 | 16 | ## Development 17 | 18 | ### Start project 19 | 20 | ```bash 21 | npm run dev # starts next.js 22 | ``` 23 | -------------------------------------------------------------------------------- /example/next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/basic-features/typescript for more information. 6 | -------------------------------------------------------------------------------- /example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@examples/next-minimal", 3 | "version": "10.0.0-rc.8", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start" 9 | }, 10 | "dependencies": { 11 | "@tanstack/react-query": "^5.24.1", 12 | "@trpc/client": "11.0.0-next-beta.294", 13 | "@trpc/next": "11.0.0-next-beta.294", 14 | "@trpc/react-query": "11.0.0-next-beta.294", 15 | "@trpc/server": "11.0.0-next-beta.294", 16 | "next": "^14.1.0", 17 | "react": "^18.2.0", 18 | "react-dom": "^18.2.0", 19 | "zod": "^3.22.4" 20 | }, 21 | "devDependencies": { 22 | "@types/node": "^20.11.22", 23 | "@types/react": "^18.2.60", 24 | "@types/react-dom": "^18.2.19", 25 | "typescript": "^5.3.3" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /example/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | '@tanstack/react-query': 9 | specifier: ^5.24.1 10 | version: 5.24.1(react@18.2.0) 11 | '@trpc/client': 12 | specifier: 11.0.0-next-beta.294 13 | version: 11.0.0-next-beta.294(@trpc/server@11.0.0-next-beta.294) 14 | '@trpc/next': 15 | specifier: 11.0.0-next-beta.294 16 | version: 11.0.0-next-beta.294(@tanstack/react-query@5.24.1)(@trpc/client@11.0.0-next-beta.294)(@trpc/react-query@11.0.0-next-beta.294)(@trpc/server@11.0.0-next-beta.294)(next@14.1.0)(react-dom@18.2.0)(react@18.2.0) 17 | '@trpc/react-query': 18 | specifier: 11.0.0-next-beta.294 19 | version: 11.0.0-next-beta.294(@tanstack/react-query@5.24.1)(@trpc/client@11.0.0-next-beta.294)(@trpc/server@11.0.0-next-beta.294)(react-dom@18.2.0)(react@18.2.0) 20 | '@trpc/server': 21 | specifier: 11.0.0-next-beta.294 22 | version: 11.0.0-next-beta.294 23 | next: 24 | specifier: ^14.1.0 25 | version: 14.1.0(react-dom@18.2.0)(react@18.2.0) 26 | react: 27 | specifier: ^18.2.0 28 | version: 18.2.0 29 | react-dom: 30 | specifier: ^18.2.0 31 | version: 18.2.0(react@18.2.0) 32 | zod: 33 | specifier: ^3.22.4 34 | version: 3.22.4 35 | 36 | devDependencies: 37 | '@types/node': 38 | specifier: ^20.11.22 39 | version: 20.11.22 40 | '@types/react': 41 | specifier: ^18.2.60 42 | version: 18.2.60 43 | '@types/react-dom': 44 | specifier: ^18.2.19 45 | version: 18.2.19 46 | typescript: 47 | specifier: ^5.3.3 48 | version: 5.3.3 49 | 50 | packages: 51 | 52 | /@next/env@14.1.0: 53 | resolution: {integrity: sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw==} 54 | dev: false 55 | 56 | /@next/swc-darwin-arm64@14.1.0: 57 | resolution: {integrity: sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ==} 58 | engines: {node: '>= 10'} 59 | cpu: [arm64] 60 | os: [darwin] 61 | requiresBuild: true 62 | dev: false 63 | optional: true 64 | 65 | /@next/swc-darwin-x64@14.1.0: 66 | resolution: {integrity: sha512-1jgudN5haWxiAl3O1ljUS2GfupPmcftu2RYJqZiMJmmbBT5M1XDffjUtRUzP4W3cBHsrvkfOFdQ71hAreNQP6g==} 67 | engines: {node: '>= 10'} 68 | cpu: [x64] 69 | os: [darwin] 70 | requiresBuild: true 71 | dev: false 72 | optional: true 73 | 74 | /@next/swc-linux-arm64-gnu@14.1.0: 75 | resolution: {integrity: sha512-RHo7Tcj+jllXUbK7xk2NyIDod3YcCPDZxj1WLIYxd709BQ7WuRYl3OWUNG+WUfqeQBds6kvZYlc42NJJTNi4tQ==} 76 | engines: {node: '>= 10'} 77 | cpu: [arm64] 78 | os: [linux] 79 | requiresBuild: true 80 | dev: false 81 | optional: true 82 | 83 | /@next/swc-linux-arm64-musl@14.1.0: 84 | resolution: {integrity: sha512-v6kP8sHYxjO8RwHmWMJSq7VZP2nYCkRVQ0qolh2l6xroe9QjbgV8siTbduED4u0hlk0+tjS6/Tuy4n5XCp+l6g==} 85 | engines: {node: '>= 10'} 86 | cpu: [arm64] 87 | os: [linux] 88 | requiresBuild: true 89 | dev: false 90 | optional: true 91 | 92 | /@next/swc-linux-x64-gnu@14.1.0: 93 | resolution: {integrity: sha512-zJ2pnoFYB1F4vmEVlb/eSe+VH679zT1VdXlZKX+pE66grOgjmKJHKacf82g/sWE4MQ4Rk2FMBCRnX+l6/TVYzQ==} 94 | engines: {node: '>= 10'} 95 | cpu: [x64] 96 | os: [linux] 97 | requiresBuild: true 98 | dev: false 99 | optional: true 100 | 101 | /@next/swc-linux-x64-musl@14.1.0: 102 | resolution: {integrity: sha512-rbaIYFt2X9YZBSbH/CwGAjbBG2/MrACCVu2X0+kSykHzHnYH5FjHxwXLkcoJ10cX0aWCEynpu+rP76x0914atg==} 103 | engines: {node: '>= 10'} 104 | cpu: [x64] 105 | os: [linux] 106 | requiresBuild: true 107 | dev: false 108 | optional: true 109 | 110 | /@next/swc-win32-arm64-msvc@14.1.0: 111 | resolution: {integrity: sha512-o1N5TsYc8f/HpGt39OUQpQ9AKIGApd3QLueu7hXk//2xq5Z9OxmV6sQfNp8C7qYmiOlHYODOGqNNa0e9jvchGQ==} 112 | engines: {node: '>= 10'} 113 | cpu: [arm64] 114 | os: [win32] 115 | requiresBuild: true 116 | dev: false 117 | optional: true 118 | 119 | /@next/swc-win32-ia32-msvc@14.1.0: 120 | resolution: {integrity: sha512-XXIuB1DBRCFwNO6EEzCTMHT5pauwaSj4SWs7CYnME57eaReAKBXCnkUE80p/pAZcewm7hs+vGvNqDPacEXHVkw==} 121 | engines: {node: '>= 10'} 122 | cpu: [ia32] 123 | os: [win32] 124 | requiresBuild: true 125 | dev: false 126 | optional: true 127 | 128 | /@next/swc-win32-x64-msvc@14.1.0: 129 | resolution: {integrity: sha512-9WEbVRRAqJ3YFVqEZIxUqkiO8l1nool1LmNxygr5HWF8AcSYsEpneUDhmjUVJEzO2A04+oPtZdombzzPPkTtgg==} 130 | engines: {node: '>= 10'} 131 | cpu: [x64] 132 | os: [win32] 133 | requiresBuild: true 134 | dev: false 135 | optional: true 136 | 137 | /@swc/helpers@0.5.2: 138 | resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} 139 | dependencies: 140 | tslib: 2.6.2 141 | dev: false 142 | 143 | /@tanstack/query-core@5.24.1: 144 | resolution: {integrity: sha512-DZ6Nx9p7BhjkG50ayJ+MKPgff+lMeol7QYXkvuU5jr2ryW/4ok5eanaS9W5eooA4xN0A/GPHdLGOZGzArgf5Cg==} 145 | dev: false 146 | 147 | /@tanstack/react-query@5.24.1(react@18.2.0): 148 | resolution: {integrity: sha512-4+09JEdO4d6+Gc8Y/g2M/MuxDK5IY0QV8+2wL2304wPKJgJ54cBbULd3nciJ5uvh/as8rrxx6s0mtIwpRuGd1g==} 149 | peerDependencies: 150 | react: ^18.0.0 151 | dependencies: 152 | '@tanstack/query-core': 5.24.1 153 | react: 18.2.0 154 | dev: false 155 | 156 | /@trpc/client@11.0.0-next-beta.294(@trpc/server@11.0.0-next-beta.294): 157 | resolution: {integrity: sha512-9rK+bwg7TPNsvisDAanaAiR2TYmgFA2zNll4TexUGKQaQ09dt6ZPdFDqWIZqa33cyoXeK9Z5LQptr3NVfaSjNA==} 158 | peerDependencies: 159 | '@trpc/server': 11.0.0-next-beta.294+1e32ff91b 160 | dependencies: 161 | '@trpc/server': 11.0.0-next-beta.294 162 | dev: false 163 | 164 | /@trpc/next@11.0.0-next-beta.294(@tanstack/react-query@5.24.1)(@trpc/client@11.0.0-next-beta.294)(@trpc/react-query@11.0.0-next-beta.294)(@trpc/server@11.0.0-next-beta.294)(next@14.1.0)(react-dom@18.2.0)(react@18.2.0): 165 | resolution: {integrity: sha512-wQ9bh3QnPSD1e8EfWTt3iSj3OT4KjncO4RkPMuZM89FPD4AjWWW3jqkkibcQ+92q4MZ1J5zJmwzdY/Hn+9B/AA==} 166 | peerDependencies: 167 | '@tanstack/react-query': ^5.0.0 168 | '@trpc/client': 11.0.0-next-beta.294+1e32ff91b 169 | '@trpc/react-query': 11.0.0-next-beta.294+1e32ff91b 170 | '@trpc/server': 11.0.0-next-beta.294+1e32ff91b 171 | next: '*' 172 | react: '>=16.8.0' 173 | react-dom: '>=16.8.0' 174 | peerDependenciesMeta: 175 | '@tanstack/react-query': 176 | optional: true 177 | '@trpc/react-query': 178 | optional: true 179 | dependencies: 180 | '@tanstack/react-query': 5.24.1(react@18.2.0) 181 | '@trpc/client': 11.0.0-next-beta.294(@trpc/server@11.0.0-next-beta.294) 182 | '@trpc/react-query': 11.0.0-next-beta.294(@tanstack/react-query@5.24.1)(@trpc/client@11.0.0-next-beta.294)(@trpc/server@11.0.0-next-beta.294)(react-dom@18.2.0)(react@18.2.0) 183 | '@trpc/server': 11.0.0-next-beta.294 184 | next: 14.1.0(react-dom@18.2.0)(react@18.2.0) 185 | react: 18.2.0 186 | react-dom: 18.2.0(react@18.2.0) 187 | dev: false 188 | 189 | /@trpc/react-query@11.0.0-next-beta.294(@tanstack/react-query@5.24.1)(@trpc/client@11.0.0-next-beta.294)(@trpc/server@11.0.0-next-beta.294)(react-dom@18.2.0)(react@18.2.0): 190 | resolution: {integrity: sha512-behVOMsJRh73wltFrLc7J3ulWO/A2O529oDWlFZagtM2i/WWM2/7CVh3iL1MgW5pRB3hwC9mARKpGb80ZN4V0A==} 191 | peerDependencies: 192 | '@tanstack/react-query': ^5.0.0 193 | '@trpc/client': 11.0.0-next-beta.294+1e32ff91b 194 | '@trpc/server': 11.0.0-next-beta.294+1e32ff91b 195 | react: '>=18.2.0' 196 | react-dom: '>=18.2.0' 197 | dependencies: 198 | '@tanstack/react-query': 5.24.1(react@18.2.0) 199 | '@trpc/client': 11.0.0-next-beta.294(@trpc/server@11.0.0-next-beta.294) 200 | '@trpc/server': 11.0.0-next-beta.294 201 | react: 18.2.0 202 | react-dom: 18.2.0(react@18.2.0) 203 | dev: false 204 | 205 | /@trpc/server@11.0.0-next-beta.294: 206 | resolution: {integrity: sha512-wwz78kfl4c8WQ3ytjzYf3SM8uxhvhSRYVxqqChPM+IbDb9scfNyEsZOUzSWds8brFNgO3LHeHYkP0l8S4YdDXA==} 207 | dev: false 208 | 209 | /@types/node@20.11.22: 210 | resolution: {integrity: sha512-/G+IxWxma6V3E+pqK1tSl2Fo1kl41pK1yeCyDsgkF9WlVAme4j5ISYM2zR11bgLFJGLN5sVK40T4RJNuiZbEjA==} 211 | dependencies: 212 | undici-types: 5.26.5 213 | dev: true 214 | 215 | /@types/prop-types@15.7.11: 216 | resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} 217 | dev: true 218 | 219 | /@types/react-dom@18.2.19: 220 | resolution: {integrity: sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==} 221 | dependencies: 222 | '@types/react': 18.2.60 223 | dev: true 224 | 225 | /@types/react@18.2.60: 226 | resolution: {integrity: sha512-dfiPj9+k20jJrLGOu9Nf6eqxm2EyJRrq2NvwOFsfbb7sFExZ9WELPs67UImHj3Ayxg8ruTtKtNnbjaF8olPq0A==} 227 | dependencies: 228 | '@types/prop-types': 15.7.11 229 | '@types/scheduler': 0.16.8 230 | csstype: 3.1.3 231 | dev: true 232 | 233 | /@types/scheduler@0.16.8: 234 | resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} 235 | dev: true 236 | 237 | /busboy@1.6.0: 238 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} 239 | engines: {node: '>=10.16.0'} 240 | dependencies: 241 | streamsearch: 1.1.0 242 | dev: false 243 | 244 | /caniuse-lite@1.0.30001591: 245 | resolution: {integrity: sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==} 246 | dev: false 247 | 248 | /client-only@0.0.1: 249 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} 250 | dev: false 251 | 252 | /csstype@3.1.3: 253 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 254 | dev: true 255 | 256 | /graceful-fs@4.2.11: 257 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 258 | dev: false 259 | 260 | /js-tokens@4.0.0: 261 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 262 | dev: false 263 | 264 | /loose-envify@1.4.0: 265 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 266 | hasBin: true 267 | dependencies: 268 | js-tokens: 4.0.0 269 | dev: false 270 | 271 | /nanoid@3.3.7: 272 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 273 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 274 | hasBin: true 275 | dev: false 276 | 277 | /next@14.1.0(react-dom@18.2.0)(react@18.2.0): 278 | resolution: {integrity: sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q==} 279 | engines: {node: '>=18.17.0'} 280 | hasBin: true 281 | peerDependencies: 282 | '@opentelemetry/api': ^1.1.0 283 | react: ^18.2.0 284 | react-dom: ^18.2.0 285 | sass: ^1.3.0 286 | peerDependenciesMeta: 287 | '@opentelemetry/api': 288 | optional: true 289 | sass: 290 | optional: true 291 | dependencies: 292 | '@next/env': 14.1.0 293 | '@swc/helpers': 0.5.2 294 | busboy: 1.6.0 295 | caniuse-lite: 1.0.30001591 296 | graceful-fs: 4.2.11 297 | postcss: 8.4.31 298 | react: 18.2.0 299 | react-dom: 18.2.0(react@18.2.0) 300 | styled-jsx: 5.1.1(react@18.2.0) 301 | optionalDependencies: 302 | '@next/swc-darwin-arm64': 14.1.0 303 | '@next/swc-darwin-x64': 14.1.0 304 | '@next/swc-linux-arm64-gnu': 14.1.0 305 | '@next/swc-linux-arm64-musl': 14.1.0 306 | '@next/swc-linux-x64-gnu': 14.1.0 307 | '@next/swc-linux-x64-musl': 14.1.0 308 | '@next/swc-win32-arm64-msvc': 14.1.0 309 | '@next/swc-win32-ia32-msvc': 14.1.0 310 | '@next/swc-win32-x64-msvc': 14.1.0 311 | transitivePeerDependencies: 312 | - '@babel/core' 313 | - babel-plugin-macros 314 | dev: false 315 | 316 | /picocolors@1.0.0: 317 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 318 | dev: false 319 | 320 | /postcss@8.4.31: 321 | resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} 322 | engines: {node: ^10 || ^12 || >=14} 323 | dependencies: 324 | nanoid: 3.3.7 325 | picocolors: 1.0.0 326 | source-map-js: 1.0.2 327 | dev: false 328 | 329 | /react-dom@18.2.0(react@18.2.0): 330 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} 331 | peerDependencies: 332 | react: ^18.2.0 333 | dependencies: 334 | loose-envify: 1.4.0 335 | react: 18.2.0 336 | scheduler: 0.23.0 337 | dev: false 338 | 339 | /react@18.2.0: 340 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} 341 | engines: {node: '>=0.10.0'} 342 | dependencies: 343 | loose-envify: 1.4.0 344 | dev: false 345 | 346 | /scheduler@0.23.0: 347 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} 348 | dependencies: 349 | loose-envify: 1.4.0 350 | dev: false 351 | 352 | /source-map-js@1.0.2: 353 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 354 | engines: {node: '>=0.10.0'} 355 | dev: false 356 | 357 | /streamsearch@1.1.0: 358 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} 359 | engines: {node: '>=10.0.0'} 360 | dev: false 361 | 362 | /styled-jsx@5.1.1(react@18.2.0): 363 | resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} 364 | engines: {node: '>= 12.0.0'} 365 | peerDependencies: 366 | '@babel/core': '*' 367 | babel-plugin-macros: '*' 368 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' 369 | peerDependenciesMeta: 370 | '@babel/core': 371 | optional: true 372 | babel-plugin-macros: 373 | optional: true 374 | dependencies: 375 | client-only: 0.0.1 376 | react: 18.2.0 377 | dev: false 378 | 379 | /tslib@2.6.2: 380 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 381 | dev: false 382 | 383 | /typescript@5.3.3: 384 | resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} 385 | engines: {node: '>=14.17'} 386 | hasBin: true 387 | dev: true 388 | 389 | /undici-types@5.26.5: 390 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} 391 | dev: true 392 | 393 | /zod@3.22.4: 394 | resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} 395 | dev: false 396 | -------------------------------------------------------------------------------- /example/src/pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import type { AppType } from "next/app"; 2 | import { trpc } from "../utils/trpc"; 3 | 4 | const MyApp: AppType = ({ Component, pageProps }) => { 5 | return ; 6 | }; 7 | 8 | export default trpc.withTRPC(MyApp); 9 | -------------------------------------------------------------------------------- /example/src/pages/api/renew-token.ts: -------------------------------------------------------------------------------- 1 | import { NextApiRequest, NextApiResponse } from "next"; 2 | import { createAccessToken } from "~/server/appRouter"; 3 | 4 | async function renewToken(req: NextApiRequest, res: NextApiResponse) { 5 | await new Promise((resolve) => setTimeout(resolve, 2000)); 6 | 7 | return res.status(200).json({ 8 | accessToken: createAccessToken(), 9 | }); 10 | } 11 | 12 | export default renewToken; 13 | -------------------------------------------------------------------------------- /example/src/pages/api/trpc/[trpc].ts: -------------------------------------------------------------------------------- 1 | /** 2 | * This is the API-handler of your app that contains all your API routes. 3 | * On a bigger app, you will probably want to split this file up into multiple files. 4 | */ 5 | import * as trpcNext from "@trpc/server/adapters/next"; 6 | import { createContext } from "~/server/context"; 7 | import { appRouter } from "../../../server/appRouter"; 8 | 9 | // export only the type definition of the API 10 | // None of the actual implementation is exposed to the client 11 | 12 | // export API handler 13 | export default trpcNext.createNextApiHandler({ 14 | router: appRouter, 15 | createContext: createContext, 16 | }); 17 | -------------------------------------------------------------------------------- /example/src/pages/index.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * This is a Next.js page. 3 | */ 4 | import { differenceInSeconds } from "date-fns"; 5 | import { useEffect, useState } from "react"; 6 | import { tokenRefreshNeeded } from "~/utils/tokenRefresh"; 7 | import { trpc } from "../utils/trpc"; 8 | 9 | export default function IndexPage() { 10 | const { mutate: publicMutation } = trpc.publicTest.useMutation(); 11 | 12 | const { mutate: privateMutation } = trpc.privateTest.useMutation(); 13 | 14 | const { mutate: loginMutation } = trpc.login.useMutation({ 15 | onSuccess: ({ accessToken, refreshToken }) => { 16 | localStorage.setItem("accessToken", accessToken); 17 | localStorage.setItem("refreshToken", refreshToken); 18 | }, 19 | }); 20 | 21 | return ( 22 |
23 |
24 |

token-refresh-link example

25 | 26 | 27 | 28 | 29 | 30 | 38 |
39 |
40 | ); 41 | } 42 | 43 | const TokenInfos = () => { 44 | const [_, setTick] = useState(0); 45 | 46 | const [accessToken, setAccessToken] = useState(); 47 | const [isTokenRefreshNeeded, setIsTokenRefreshNeeded] = useState(false); 48 | 49 | const [refreshToken, setRefreshToken] = useState(); 50 | 51 | useEffect(() => { 52 | const interval = setInterval(() => { 53 | const accessToken = localStorage.getItem("accessToken"); 54 | const refreshToken = localStorage.getItem("refreshToken"); 55 | setAccessToken(accessToken); 56 | setIsTokenRefreshNeeded(tokenRefreshNeeded()); 57 | setRefreshToken(refreshToken); 58 | setTick((tick) => tick + 1); 59 | }, 200); 60 | return () => clearInterval(interval); 61 | }, []); 62 | 63 | const accessTokenExpiresIn = accessToken 64 | ? differenceInSeconds(new Date(accessToken), new Date()) 65 | : 0; 66 | 67 | return ( 68 |
69 |
70 | Access token:{" "} 71 | {accessToken ? ( 72 | <> 73 | {accessTokenExpiresIn > 0 ? ( 74 | <>(expires in {accessTokenExpiresIn}s) 75 | ) : ( 76 | <>(expired) 77 | )} 78 | 79 | ) : null} 80 |
81 |
tokenRefreshNeeded: {isTokenRefreshNeeded ? "true" : "false"}
82 |
Refresh token: {refreshToken}
83 |
84 | ); 85 | }; 86 | -------------------------------------------------------------------------------- /example/src/server/appRouter.ts: -------------------------------------------------------------------------------- 1 | import { addSeconds } from "date-fns"; 2 | import { protectedProcedure, publicProcedure, router } from "~/server/trpc"; 3 | 4 | export const createAccessToken = () => { 5 | return addSeconds(new Date(), 10).toISOString(); 6 | }; 7 | 8 | export const appRouter = router({ 9 | publicTest: publicProcedure.mutation(() => { 10 | return { 11 | message: `hello world ${Math.random()}`, 12 | }; 13 | }), 14 | login: publicProcedure.mutation(() => { 15 | const accessToken = createAccessToken(); 16 | const refreshToken = "123abc"; 17 | return { 18 | accessToken, 19 | refreshToken, 20 | }; 21 | }), 22 | privateTest: protectedProcedure.mutation(() => { 23 | return { 24 | message: `hello protected world ${Math.random()}`, 25 | }; 26 | }), 27 | // 💡 Tip: Try adding a new procedure here and see if you can use it in the client! 28 | // getUser: t.procedure.query(() => { 29 | // return { id: '1', name: 'bob' }; 30 | // }), 31 | }); 32 | 33 | export type AppRouter = typeof appRouter; 34 | -------------------------------------------------------------------------------- /example/src/server/context.ts: -------------------------------------------------------------------------------- 1 | import * as trpc from "@trpc/server"; 2 | import * as trpcNext from "@trpc/server/adapters/next"; 3 | import { isFuture } from "date-fns"; 4 | import { getAccessTokenExpiration } from "~/utils/tokenRefresh"; 5 | 6 | export const createContext = (opts?: trpcNext.CreateNextContextOptions) => { 7 | const req = opts?.req; 8 | const res = opts?.res; 9 | 10 | const accessToken = req?.headers["x-access-token"]; 11 | const isValid = 12 | typeof accessToken === "string" && 13 | typeof Date.parse(accessToken) === "number"; 14 | const expiration = isValid 15 | ? getAccessTokenExpiration(accessToken) 16 | : undefined; 17 | 18 | const isAuthenticated = 19 | (expiration && isFuture(new Date(expiration))) || false; 20 | 21 | return { 22 | req, 23 | res, 24 | isAuthenticated, 25 | }; 26 | }; 27 | 28 | export type Context = trpc.inferAsyncReturnType; 29 | -------------------------------------------------------------------------------- /example/src/server/trpc.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * This is your entry point to setup the root configuration for tRPC on the server. 3 | * - `initTRPC` should only be used once per app. 4 | * - We export only the functionality that we use so we can enforce which base procedures should be used 5 | * 6 | * Learn how to create protected base procedures and other things below: 7 | * @see https://trpc.io/docs/v10/router 8 | * @see https://trpc.io/docs/v10/procedures 9 | */ 10 | import { initTRPC, TRPCError } from "@trpc/server"; 11 | import { Context } from "./context"; 12 | 13 | const t = initTRPC.context().create(); 14 | 15 | const baseProcedure = t.procedure.use( 16 | t.middleware(async ({ ctx, next }) => { 17 | // add delay to simulate a slow request 18 | await new Promise((resolve) => setTimeout(resolve, 500)); 19 | 20 | return next(); 21 | }), 22 | ); 23 | 24 | /** 25 | * Unprotected procedure 26 | */ 27 | export const publicProcedure = baseProcedure; 28 | 29 | export const protectedProcedure = baseProcedure.use( 30 | t.middleware(async ({ ctx, next }) => { 31 | if (!ctx.isAuthenticated) { 32 | throw new TRPCError({ code: "UNAUTHORIZED" }); 33 | } 34 | return next(); 35 | }), 36 | ); 37 | 38 | export const router = t.router; 39 | export const middleware = t.middleware; 40 | -------------------------------------------------------------------------------- /example/src/utils/logLink.ts: -------------------------------------------------------------------------------- 1 | import { TRPCLink } from "@trpc/client"; 2 | import { observable } from "@trpc/server/observable"; 3 | import { AppRouter } from "~/server/appRouter"; 4 | 5 | export const logLink: TRPCLink = () => { 6 | return ({ next, op }) => { 7 | console.log(op.path); 8 | // each link needs to return an observable which propagates results 9 | return observable((observer) => { 10 | const unsubscribe = next(op).subscribe({ 11 | next(value) { 12 | observer.next(value); 13 | }, 14 | error(error) { 15 | console.log(op.path + " ❌"); 16 | observer.error(error); 17 | }, 18 | complete() { 19 | console.log(op.path + " ✅"); 20 | observer.complete(); 21 | }, 22 | }); 23 | return unsubscribe; 24 | }); 25 | }; 26 | }; 27 | -------------------------------------------------------------------------------- /example/src/utils/tokenRefresh.ts: -------------------------------------------------------------------------------- 1 | import { tokenRefreshLink as tokenRefresh } from "../../../dist/index.js"; 2 | 3 | export const RENEW_MS_BEFORE_EXPIRATION = 5000; 4 | 5 | export const getAccessTokenExpiration = (accessToken: string) => { 6 | return new Date(accessToken).getTime(); 7 | }; 8 | 9 | export const tokenRefreshNeeded = () => { 10 | const accessToken = localStorage.getItem("accessToken"); 11 | 12 | if (!accessToken) return false; 13 | 14 | const expirationTimeInMilliseconds = getAccessTokenExpiration(accessToken); 15 | 16 | if (!expirationTimeInMilliseconds) { 17 | // If there is no expiration time, the token is not valid 18 | return true; 19 | } 20 | 21 | const now = new Date(); 22 | 23 | const millisecondsUntilExpiration = 24 | expirationTimeInMilliseconds - now.getTime(); 25 | 26 | if (millisecondsUntilExpiration >= RENEW_MS_BEFORE_EXPIRATION) { 27 | // token is valid for a while, no need to renew 28 | return false; 29 | } else { 30 | // we need to renew (it is either already expired or soon expiring) 31 | return true; 32 | } 33 | }; 34 | 35 | export const tokenRefreshLink = tokenRefresh({ 36 | tokenRefreshNeeded, 37 | fetchAccessToken: async () => { 38 | try { 39 | console.log("fetching new access token 🌱"); 40 | const rsp = await fetch("/api/renew-token", { 41 | method: "POST", 42 | }); 43 | 44 | if (rsp.ok) { 45 | const { accessToken } = (await rsp.json()) as { accessToken: string }; 46 | localStorage.setItem("accessToken", accessToken); 47 | } else { 48 | const { error } = (await rsp.json()) as { error: string }; 49 | throw error; 50 | } 51 | } catch (err) { 52 | // token refreshing failed, usually you would want to logout the user here 53 | } 54 | }, 55 | }); 56 | -------------------------------------------------------------------------------- /example/src/utils/trpc.ts: -------------------------------------------------------------------------------- 1 | import { httpBatchLink } from "@trpc/client"; 2 | import { createTRPCNext } from "@trpc/next"; 3 | import type { AppRouter } from "~/server/appRouter"; 4 | import { logLink } from "./logLink"; 5 | import { tokenRefreshLink } from "./tokenRefresh"; 6 | 7 | function getBaseUrl() { 8 | if (typeof window !== "undefined") { 9 | // In the browser, we return a relative URL 10 | return ""; 11 | } 12 | // When rendering on the server, we return an absolute URL 13 | 14 | // reference for vercel.com 15 | if (process.env.VERCEL_URL) { 16 | return `https://${process.env.VERCEL_URL}`; 17 | } 18 | 19 | // assume localhost 20 | return `http://localhost:${process.env.PORT ?? 3000}`; 21 | } 22 | 23 | export const trpc = createTRPCNext({ 24 | config() { 25 | return { 26 | links: [ 27 | logLink, 28 | tokenRefreshLink, 29 | httpBatchLink({ 30 | url: getBaseUrl() + "/api/trpc", 31 | headers: () => ({ 32 | "x-access-token": 33 | (typeof window != "undefined" && 34 | localStorage.getItem("accessToken")) || 35 | undefined, 36 | }), 37 | }), 38 | ], 39 | }; 40 | }, 41 | }); 42 | -------------------------------------------------------------------------------- /example/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "noEmit": true, 10 | "esModuleInterop": true, 11 | "module": "esnext", 12 | "moduleResolution": "node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "jsx": "preserve", 16 | "incremental": true, 17 | "baseUrl": ".", 18 | "paths": { 19 | "~/*": ["src/*"] 20 | } 21 | }, 22 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], 23 | "exclude": ["node_modules"] 24 | } 25 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "trpc-token-refresh-link", 3 | "version": "0.5.3", 4 | "type": "module", 5 | "description": "Token Refresh Link for tRPC", 6 | "main": "dist/index.cjs", 7 | "repository": { 8 | "type": "git", 9 | "url": "https://github.com/larskarbo/trpc-token-refresh-link" 10 | }, 11 | "exports": { 12 | "./package.json": "./package.json", 13 | ".": { 14 | "import": "./dist/index.js", 15 | "default": "./dist/index.cjs" 16 | } 17 | }, 18 | "types": "dist/index.d.ts", 19 | "files": [ 20 | "dist" 21 | ], 22 | "scripts": { 23 | "dev": "tsup --watch", 24 | "build": "tsup", 25 | "format": "biome format --write .", 26 | "lint": "run-p lint:*", 27 | "lint:format": "biome check .", 28 | "lint:types": "tsc --noEmit", 29 | "lint:js": "biome check --apply .", 30 | "prepare": "husky install", 31 | "prepublishOnly": "pnpm build", 32 | "test": "vitest run", 33 | "test:watch": "vitest", 34 | "test:coverage": "vitest run --coverage", 35 | "publish:patch": "pnpm version patch && pnpm publish", 36 | "publish:minor": "pnpm version minor && pnpm publish" 37 | }, 38 | "devDependencies": { 39 | "@biomejs/biome": "1.5.3", 40 | "@sachinraja/eslint-config": "0.1.1", 41 | "@types/node": "18.7.14", 42 | "husky": "8.0.1", 43 | "nano-staged": "0.8.0", 44 | "npm-run-all": "4.1.5", 45 | "tsup": "6.2.3", 46 | "typescript": "4.8.2", 47 | "vite": "3.0.9", 48 | "vitest": "0.23.0" 49 | }, 50 | "sideEffects": false, 51 | "nano-staged": { 52 | "*.{ts,tsx,js,jsx,json,md}": "biome format --write" 53 | }, 54 | "tsup": { 55 | "entry": [ 56 | "src/index.ts" 57 | ], 58 | "format": [ 59 | "esm", 60 | "cjs" 61 | ], 62 | "dts": { 63 | "resolve": true 64 | }, 65 | "splitting": true, 66 | "clean": true 67 | }, 68 | "packageManager": "pnpm@10.4.1", 69 | "dependencies": { 70 | "@trpc/client": "^10.0.0 || ^11.0.0-next-beta.294", 71 | "@trpc/server": "^10.0.0 || ^11.0.0-next-beta.294" 72 | }, 73 | "pnpm": { 74 | "ignoredBuiltDependencies": [ 75 | "esbuild" 76 | ], 77 | "onlyBuiltDependencies": [ 78 | "@biomejs/biome", 79 | "esbuild" 80 | ] 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@trpc/client': 12 | specifier: ^10.0.0 || ^11.0.0-next-beta.294 13 | version: 10.45.2(@trpc/server@10.45.2) 14 | '@trpc/server': 15 | specifier: ^10.0.0 || ^11.0.0-next-beta.294 16 | version: 10.45.2 17 | devDependencies: 18 | '@biomejs/biome': 19 | specifier: 1.5.3 20 | version: 1.5.3 21 | '@sachinraja/eslint-config': 22 | specifier: 0.1.1 23 | version: 0.1.1(eslint@8.23.0)(typescript@4.8.2) 24 | '@types/node': 25 | specifier: 18.7.14 26 | version: 18.7.14 27 | husky: 28 | specifier: 8.0.1 29 | version: 8.0.1 30 | nano-staged: 31 | specifier: 0.8.0 32 | version: 0.8.0 33 | npm-run-all: 34 | specifier: 4.1.5 35 | version: 4.1.5 36 | tsup: 37 | specifier: 6.2.3 38 | version: 6.2.3(postcss@8.5.3)(typescript@4.8.2) 39 | typescript: 40 | specifier: 4.8.2 41 | version: 4.8.2 42 | vite: 43 | specifier: 3.0.9 44 | version: 3.0.9 45 | vitest: 46 | specifier: 0.23.0 47 | version: 0.23.0 48 | 49 | packages: 50 | 51 | '@babel/code-frame@7.26.2': 52 | resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} 53 | engines: {node: '>=6.9.0'} 54 | 55 | '@babel/helper-validator-identifier@7.25.9': 56 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 57 | engines: {node: '>=6.9.0'} 58 | 59 | '@biomejs/biome@1.5.3': 60 | resolution: {integrity: sha512-yvZCa/g3akwTaAQ7PCwPWDCkZs3Qa5ONg/fgOUT9e6wAWsPftCjLQFPXBeGxPK30yZSSpgEmRCfpGTmVbUjGgg==} 61 | engines: {node: '>=14.*'} 62 | hasBin: true 63 | 64 | '@biomejs/cli-darwin-arm64@1.5.3': 65 | resolution: {integrity: sha512-ImU7mh1HghEDyqNmxEZBoMPr8SxekkZuYcs+gynKlNW+TALQs7swkERiBLkG9NR0K1B3/2uVzlvYowXrmlW8hw==} 66 | engines: {node: '>=14.*'} 67 | cpu: [arm64] 68 | os: [darwin] 69 | 70 | '@biomejs/cli-darwin-x64@1.5.3': 71 | resolution: {integrity: sha512-vCdASqYnlpq/swErH7FD6nrFz0czFtK4k/iLgj0/+VmZVjineFPgevOb+Sr9vz0tk0GfdQO60bSpI74zU8M9Dw==} 72 | engines: {node: '>=14.*'} 73 | cpu: [x64] 74 | os: [darwin] 75 | 76 | '@biomejs/cli-linux-arm64-musl@1.5.3': 77 | resolution: {integrity: sha512-DYuMizUYUBYfS0IHGjDrOP1RGipqWfMGEvNEJ398zdtmCKLXaUvTimiox5dvx4X15mBK5M2m8wgWUgOP1giUpQ==} 78 | engines: {node: '>=14.*'} 79 | cpu: [arm64] 80 | os: [linux] 81 | 82 | '@biomejs/cli-linux-arm64@1.5.3': 83 | resolution: {integrity: sha512-cupBQv0sNF1OKqBfx7EDWMSsKwRrBUZfjXawT4s6hKV6ALq7p0QzWlxr/sDmbKMLOaLQtw2Qgu/77N9rm+f9Rg==} 84 | engines: {node: '>=14.*'} 85 | cpu: [arm64] 86 | os: [linux] 87 | 88 | '@biomejs/cli-linux-x64-musl@1.5.3': 89 | resolution: {integrity: sha512-UUHiAnlDqr2Y/LpvshBFhUYMWkl2/Jn+bi3U6jKuav0qWbbBKU/ByHgR4+NBxpKBYoCtWxhnmatfH1bpPIuZMw==} 90 | engines: {node: '>=14.*'} 91 | cpu: [x64] 92 | os: [linux] 93 | 94 | '@biomejs/cli-linux-x64@1.5.3': 95 | resolution: {integrity: sha512-YQrSArQvcv4FYsk7Q91Yv4uuu5F8hJyORVcv3zsjCLGkjIjx2RhjYLpTL733SNL7v33GmOlZY0eFR1ko38tuUw==} 96 | engines: {node: '>=14.*'} 97 | cpu: [x64] 98 | os: [linux] 99 | 100 | '@biomejs/cli-win32-arm64@1.5.3': 101 | resolution: {integrity: sha512-HxatYH7vf/kX9nrD+pDYuV2GI9GV8EFo6cfKkahAecTuZLPxryHx1WEfJthp5eNsE0+09STGkKIKjirP0ufaZA==} 102 | engines: {node: '>=14.*'} 103 | cpu: [arm64] 104 | os: [win32] 105 | 106 | '@biomejs/cli-win32-x64@1.5.3': 107 | resolution: {integrity: sha512-fMvbSouZEASU7mZH8SIJSANDm5OqsjgtVXlbUqxwed6BP7uuHRSs396Aqwh2+VoW8fwTpp6ybIUoC9FrzB0kyA==} 108 | engines: {node: '>=14.*'} 109 | cpu: [x64] 110 | os: [win32] 111 | 112 | '@esbuild/android-arm@0.15.18': 113 | resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==} 114 | engines: {node: '>=12'} 115 | cpu: [arm] 116 | os: [android] 117 | 118 | '@esbuild/linux-loong64@0.14.54': 119 | resolution: {integrity: sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==} 120 | engines: {node: '>=12'} 121 | cpu: [loong64] 122 | os: [linux] 123 | 124 | '@esbuild/linux-loong64@0.15.18': 125 | resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==} 126 | engines: {node: '>=12'} 127 | cpu: [loong64] 128 | os: [linux] 129 | 130 | '@eslint/eslintrc@1.4.1': 131 | resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} 132 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 133 | 134 | '@humanwhocodes/config-array@0.10.7': 135 | resolution: {integrity: sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==} 136 | engines: {node: '>=10.10.0'} 137 | deprecated: Use @eslint/config-array instead 138 | 139 | '@humanwhocodes/gitignore-to-minimatch@1.0.2': 140 | resolution: {integrity: sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==} 141 | 142 | '@humanwhocodes/module-importer@1.0.1': 143 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 144 | engines: {node: '>=12.22'} 145 | 146 | '@humanwhocodes/object-schema@1.2.1': 147 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} 148 | deprecated: Use @eslint/object-schema instead 149 | 150 | '@isaacs/cliui@8.0.2': 151 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 152 | engines: {node: '>=12'} 153 | 154 | '@jridgewell/gen-mapping@0.3.8': 155 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 156 | engines: {node: '>=6.0.0'} 157 | 158 | '@jridgewell/resolve-uri@3.1.2': 159 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 160 | engines: {node: '>=6.0.0'} 161 | 162 | '@jridgewell/set-array@1.2.1': 163 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 164 | engines: {node: '>=6.0.0'} 165 | 166 | '@jridgewell/sourcemap-codec@1.5.0': 167 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 168 | 169 | '@jridgewell/trace-mapping@0.3.25': 170 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 171 | 172 | '@nodelib/fs.scandir@2.1.5': 173 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 174 | engines: {node: '>= 8'} 175 | 176 | '@nodelib/fs.stat@2.0.5': 177 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 178 | engines: {node: '>= 8'} 179 | 180 | '@nodelib/fs.walk@1.2.8': 181 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 182 | engines: {node: '>= 8'} 183 | 184 | '@pkgjs/parseargs@0.11.0': 185 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 186 | engines: {node: '>=14'} 187 | 188 | '@sachinraja/eslint-config@0.1.1': 189 | resolution: {integrity: sha512-40fNIlAh2zZKSAscTymtKrVp+FSXXYEgJBGh1TBsnPyHnyiIUwz3ND9XNvG0eUiRec33xk6FMl+0I7V1RtlzHw==} 190 | peerDependencies: 191 | '@types/eslint': ^8 192 | eslint: ^8 193 | peerDependenciesMeta: 194 | '@types/eslint': 195 | optional: true 196 | 197 | '@trpc/client@10.45.2': 198 | resolution: {integrity: sha512-ykALM5kYWTLn1zYuUOZ2cPWlVfrXhc18HzBDyRhoPYN0jey4iQHEFSEowfnhg1RvYnrAVjNBgHNeSAXjrDbGwg==} 199 | peerDependencies: 200 | '@trpc/server': 10.45.2 201 | 202 | '@trpc/server@10.45.2': 203 | resolution: {integrity: sha512-wOrSThNNE4HUnuhJG6PfDRp4L2009KDVxsd+2VYH8ro6o/7/jwYZ8Uu5j+VaW+mOmc8EHerHzGcdbGNQSAUPgg==} 204 | 205 | '@types/chai-subset@1.3.5': 206 | resolution: {integrity: sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A==} 207 | 208 | '@types/chai@4.3.20': 209 | resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==} 210 | 211 | '@types/json-schema@7.0.15': 212 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 213 | 214 | '@types/node@18.7.14': 215 | resolution: {integrity: sha512-6bbDaETVi8oyIARulOE9qF1/Qdi/23z6emrUh0fNJRUmjznqrixD4MpGDdgOFk5Xb0m2H6Xu42JGdvAxaJR/wA==} 216 | 217 | '@types/normalize-package-data@2.4.4': 218 | resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} 219 | 220 | '@typescript-eslint/eslint-plugin@5.27.0': 221 | resolution: {integrity: sha512-DDrIA7GXtmHXr1VCcx9HivA39eprYBIFxbQEHI6NyraRDxCGpxAFiYQAT/1Y0vh1C+o2vfBiy4IuPoXxtTZCAQ==} 222 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 223 | peerDependencies: 224 | '@typescript-eslint/parser': ^5.0.0 225 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 226 | typescript: '*' 227 | peerDependenciesMeta: 228 | typescript: 229 | optional: true 230 | 231 | '@typescript-eslint/parser@5.27.0': 232 | resolution: {integrity: sha512-8oGjQF46c52l7fMiPPvX4It3u3V3JipssqDfHQ2hcR0AeR8Zge+OYyKUCm5b70X72N1qXt0qgHenwN6Gc2SXZA==} 233 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 234 | peerDependencies: 235 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 236 | typescript: '*' 237 | peerDependenciesMeta: 238 | typescript: 239 | optional: true 240 | 241 | '@typescript-eslint/scope-manager@5.27.0': 242 | resolution: {integrity: sha512-VnykheBQ/sHd1Vt0LJ1JLrMH1GzHO+SzX6VTXuStISIsvRiurue/eRkTqSrG0CexHQgKG8shyJfR4o5VYioB9g==} 243 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 244 | 245 | '@typescript-eslint/type-utils@5.27.0': 246 | resolution: {integrity: sha512-vpTvRRchaf628Hb/Xzfek+85o//zEUotr1SmexKvTfs7czXfYjXVT/a5yDbpzLBX1rhbqxjDdr1Gyo0x1Fc64g==} 247 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 248 | peerDependencies: 249 | eslint: '*' 250 | typescript: '*' 251 | peerDependenciesMeta: 252 | typescript: 253 | optional: true 254 | 255 | '@typescript-eslint/types@5.27.0': 256 | resolution: {integrity: sha512-lY6C7oGm9a/GWhmUDOs3xAVRz4ty/XKlQ2fOLr8GAIryGn0+UBOoJDWyHer3UgrHkenorwvBnphhP+zPmzmw0A==} 257 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 258 | 259 | '@typescript-eslint/typescript-estree@5.27.0': 260 | resolution: {integrity: sha512-QywPMFvgZ+MHSLRofLI7BDL+UczFFHyj0vF5ibeChDAJgdTV8k4xgEwF0geFhVlPc1p8r70eYewzpo6ps+9LJQ==} 261 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 262 | peerDependencies: 263 | typescript: '*' 264 | peerDependenciesMeta: 265 | typescript: 266 | optional: true 267 | 268 | '@typescript-eslint/utils@5.27.0': 269 | resolution: {integrity: sha512-nZvCrkIJppym7cIbP3pOwIkAefXOmfGPnCM0LQfzNaKxJHI6VjI8NC662uoiPlaf5f6ymkTy9C3NQXev2mdXmA==} 270 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 271 | peerDependencies: 272 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 273 | 274 | '@typescript-eslint/visitor-keys@5.27.0': 275 | resolution: {integrity: sha512-46cYrteA2MrIAjv9ai44OQDUoCZyHeGIc4lsjCUX2WT6r4C+kidz1bNiR4017wHOPUythYeH+Sc7/cFP97KEAA==} 276 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 277 | 278 | acorn-jsx@5.3.2: 279 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 280 | peerDependencies: 281 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 282 | 283 | acorn@8.14.0: 284 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 285 | engines: {node: '>=0.4.0'} 286 | hasBin: true 287 | 288 | ajv@6.12.6: 289 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 290 | 291 | ansi-regex@5.0.1: 292 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 293 | engines: {node: '>=8'} 294 | 295 | ansi-regex@6.1.0: 296 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 297 | engines: {node: '>=12'} 298 | 299 | ansi-styles@3.2.1: 300 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 301 | engines: {node: '>=4'} 302 | 303 | ansi-styles@4.3.0: 304 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 305 | engines: {node: '>=8'} 306 | 307 | ansi-styles@6.2.1: 308 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 309 | engines: {node: '>=12'} 310 | 311 | any-promise@1.3.0: 312 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 313 | 314 | anymatch@3.1.3: 315 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 316 | engines: {node: '>= 8'} 317 | 318 | argparse@2.0.1: 319 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 320 | 321 | array-buffer-byte-length@1.0.2: 322 | resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} 323 | engines: {node: '>= 0.4'} 324 | 325 | array-union@2.1.0: 326 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 327 | engines: {node: '>=8'} 328 | 329 | arraybuffer.prototype.slice@1.0.4: 330 | resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} 331 | engines: {node: '>= 0.4'} 332 | 333 | assertion-error@1.1.0: 334 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} 335 | 336 | async-function@1.0.0: 337 | resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} 338 | engines: {node: '>= 0.4'} 339 | 340 | available-typed-arrays@1.0.7: 341 | resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} 342 | engines: {node: '>= 0.4'} 343 | 344 | balanced-match@1.0.2: 345 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 346 | 347 | binary-extensions@2.3.0: 348 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 349 | engines: {node: '>=8'} 350 | 351 | brace-expansion@1.1.11: 352 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 353 | 354 | brace-expansion@2.0.1: 355 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 356 | 357 | braces@3.0.3: 358 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 359 | engines: {node: '>=8'} 360 | 361 | builtin-modules@3.3.0: 362 | resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} 363 | engines: {node: '>=6'} 364 | 365 | bundle-require@3.1.2: 366 | resolution: {integrity: sha512-Of6l6JBAxiyQ5axFxUM6dYeP/W7X2Sozeo/4EYB9sJhL+dqL7TKjg+shwxp6jlu/6ZSERfsYtIpSJ1/x3XkAEA==} 367 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 368 | peerDependencies: 369 | esbuild: '>=0.13' 370 | 371 | cac@6.7.14: 372 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 373 | engines: {node: '>=8'} 374 | 375 | call-bind-apply-helpers@1.0.2: 376 | resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} 377 | engines: {node: '>= 0.4'} 378 | 379 | call-bind@1.0.8: 380 | resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} 381 | engines: {node: '>= 0.4'} 382 | 383 | call-bound@1.0.3: 384 | resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} 385 | engines: {node: '>= 0.4'} 386 | 387 | callsites@3.1.0: 388 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 389 | engines: {node: '>=6'} 390 | 391 | chai@4.5.0: 392 | resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} 393 | engines: {node: '>=4'} 394 | 395 | chalk@2.4.2: 396 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 397 | engines: {node: '>=4'} 398 | 399 | chalk@4.1.2: 400 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 401 | engines: {node: '>=10'} 402 | 403 | check-error@1.0.3: 404 | resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} 405 | 406 | chokidar@3.6.0: 407 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 408 | engines: {node: '>= 8.10.0'} 409 | 410 | ci-info@3.9.0: 411 | resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} 412 | engines: {node: '>=8'} 413 | 414 | clean-regexp@1.0.0: 415 | resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} 416 | engines: {node: '>=4'} 417 | 418 | color-convert@1.9.3: 419 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 420 | 421 | color-convert@2.0.1: 422 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 423 | engines: {node: '>=7.0.0'} 424 | 425 | color-name@1.1.3: 426 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 427 | 428 | color-name@1.1.4: 429 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 430 | 431 | commander@4.1.1: 432 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 433 | engines: {node: '>= 6'} 434 | 435 | concat-map@0.0.1: 436 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 437 | 438 | cross-spawn@6.0.6: 439 | resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} 440 | engines: {node: '>=4.8'} 441 | 442 | cross-spawn@7.0.6: 443 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 444 | engines: {node: '>= 8'} 445 | 446 | data-view-buffer@1.0.2: 447 | resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} 448 | engines: {node: '>= 0.4'} 449 | 450 | data-view-byte-length@1.0.2: 451 | resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} 452 | engines: {node: '>= 0.4'} 453 | 454 | data-view-byte-offset@1.0.1: 455 | resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} 456 | engines: {node: '>= 0.4'} 457 | 458 | debug@4.4.0: 459 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 460 | engines: {node: '>=6.0'} 461 | peerDependencies: 462 | supports-color: '*' 463 | peerDependenciesMeta: 464 | supports-color: 465 | optional: true 466 | 467 | deep-eql@4.1.4: 468 | resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} 469 | engines: {node: '>=6'} 470 | 471 | deep-is@0.1.4: 472 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 473 | 474 | define-data-property@1.1.4: 475 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} 476 | engines: {node: '>= 0.4'} 477 | 478 | define-properties@1.2.1: 479 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 480 | engines: {node: '>= 0.4'} 481 | 482 | dir-glob@3.0.1: 483 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 484 | engines: {node: '>=8'} 485 | 486 | doctrine@3.0.0: 487 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 488 | engines: {node: '>=6.0.0'} 489 | 490 | dunder-proto@1.0.1: 491 | resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} 492 | engines: {node: '>= 0.4'} 493 | 494 | eastasianwidth@0.2.0: 495 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 496 | 497 | emoji-regex@8.0.0: 498 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 499 | 500 | emoji-regex@9.2.2: 501 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 502 | 503 | error-ex@1.3.2: 504 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 505 | 506 | es-abstract@1.23.9: 507 | resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} 508 | engines: {node: '>= 0.4'} 509 | 510 | es-define-property@1.0.1: 511 | resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} 512 | engines: {node: '>= 0.4'} 513 | 514 | es-errors@1.3.0: 515 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 516 | engines: {node: '>= 0.4'} 517 | 518 | es-object-atoms@1.1.1: 519 | resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} 520 | engines: {node: '>= 0.4'} 521 | 522 | es-set-tostringtag@2.1.0: 523 | resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} 524 | engines: {node: '>= 0.4'} 525 | 526 | es-to-primitive@1.3.0: 527 | resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} 528 | engines: {node: '>= 0.4'} 529 | 530 | esbuild-android-64@0.14.54: 531 | resolution: {integrity: sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==} 532 | engines: {node: '>=12'} 533 | cpu: [x64] 534 | os: [android] 535 | 536 | esbuild-android-64@0.15.18: 537 | resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==} 538 | engines: {node: '>=12'} 539 | cpu: [x64] 540 | os: [android] 541 | 542 | esbuild-android-arm64@0.14.54: 543 | resolution: {integrity: sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==} 544 | engines: {node: '>=12'} 545 | cpu: [arm64] 546 | os: [android] 547 | 548 | esbuild-android-arm64@0.15.18: 549 | resolution: {integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==} 550 | engines: {node: '>=12'} 551 | cpu: [arm64] 552 | os: [android] 553 | 554 | esbuild-darwin-64@0.14.54: 555 | resolution: {integrity: sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==} 556 | engines: {node: '>=12'} 557 | cpu: [x64] 558 | os: [darwin] 559 | 560 | esbuild-darwin-64@0.15.18: 561 | resolution: {integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==} 562 | engines: {node: '>=12'} 563 | cpu: [x64] 564 | os: [darwin] 565 | 566 | esbuild-darwin-arm64@0.14.54: 567 | resolution: {integrity: sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==} 568 | engines: {node: '>=12'} 569 | cpu: [arm64] 570 | os: [darwin] 571 | 572 | esbuild-darwin-arm64@0.15.18: 573 | resolution: {integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==} 574 | engines: {node: '>=12'} 575 | cpu: [arm64] 576 | os: [darwin] 577 | 578 | esbuild-freebsd-64@0.14.54: 579 | resolution: {integrity: sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==} 580 | engines: {node: '>=12'} 581 | cpu: [x64] 582 | os: [freebsd] 583 | 584 | esbuild-freebsd-64@0.15.18: 585 | resolution: {integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==} 586 | engines: {node: '>=12'} 587 | cpu: [x64] 588 | os: [freebsd] 589 | 590 | esbuild-freebsd-arm64@0.14.54: 591 | resolution: {integrity: sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==} 592 | engines: {node: '>=12'} 593 | cpu: [arm64] 594 | os: [freebsd] 595 | 596 | esbuild-freebsd-arm64@0.15.18: 597 | resolution: {integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==} 598 | engines: {node: '>=12'} 599 | cpu: [arm64] 600 | os: [freebsd] 601 | 602 | esbuild-linux-32@0.14.54: 603 | resolution: {integrity: sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==} 604 | engines: {node: '>=12'} 605 | cpu: [ia32] 606 | os: [linux] 607 | 608 | esbuild-linux-32@0.15.18: 609 | resolution: {integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==} 610 | engines: {node: '>=12'} 611 | cpu: [ia32] 612 | os: [linux] 613 | 614 | esbuild-linux-64@0.14.54: 615 | resolution: {integrity: sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==} 616 | engines: {node: '>=12'} 617 | cpu: [x64] 618 | os: [linux] 619 | 620 | esbuild-linux-64@0.15.18: 621 | resolution: {integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==} 622 | engines: {node: '>=12'} 623 | cpu: [x64] 624 | os: [linux] 625 | 626 | esbuild-linux-arm64@0.14.54: 627 | resolution: {integrity: sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==} 628 | engines: {node: '>=12'} 629 | cpu: [arm64] 630 | os: [linux] 631 | 632 | esbuild-linux-arm64@0.15.18: 633 | resolution: {integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==} 634 | engines: {node: '>=12'} 635 | cpu: [arm64] 636 | os: [linux] 637 | 638 | esbuild-linux-arm@0.14.54: 639 | resolution: {integrity: sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==} 640 | engines: {node: '>=12'} 641 | cpu: [arm] 642 | os: [linux] 643 | 644 | esbuild-linux-arm@0.15.18: 645 | resolution: {integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==} 646 | engines: {node: '>=12'} 647 | cpu: [arm] 648 | os: [linux] 649 | 650 | esbuild-linux-mips64le@0.14.54: 651 | resolution: {integrity: sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==} 652 | engines: {node: '>=12'} 653 | cpu: [mips64el] 654 | os: [linux] 655 | 656 | esbuild-linux-mips64le@0.15.18: 657 | resolution: {integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==} 658 | engines: {node: '>=12'} 659 | cpu: [mips64el] 660 | os: [linux] 661 | 662 | esbuild-linux-ppc64le@0.14.54: 663 | resolution: {integrity: sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==} 664 | engines: {node: '>=12'} 665 | cpu: [ppc64] 666 | os: [linux] 667 | 668 | esbuild-linux-ppc64le@0.15.18: 669 | resolution: {integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==} 670 | engines: {node: '>=12'} 671 | cpu: [ppc64] 672 | os: [linux] 673 | 674 | esbuild-linux-riscv64@0.14.54: 675 | resolution: {integrity: sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==} 676 | engines: {node: '>=12'} 677 | cpu: [riscv64] 678 | os: [linux] 679 | 680 | esbuild-linux-riscv64@0.15.18: 681 | resolution: {integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==} 682 | engines: {node: '>=12'} 683 | cpu: [riscv64] 684 | os: [linux] 685 | 686 | esbuild-linux-s390x@0.14.54: 687 | resolution: {integrity: sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==} 688 | engines: {node: '>=12'} 689 | cpu: [s390x] 690 | os: [linux] 691 | 692 | esbuild-linux-s390x@0.15.18: 693 | resolution: {integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==} 694 | engines: {node: '>=12'} 695 | cpu: [s390x] 696 | os: [linux] 697 | 698 | esbuild-netbsd-64@0.14.54: 699 | resolution: {integrity: sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==} 700 | engines: {node: '>=12'} 701 | cpu: [x64] 702 | os: [netbsd] 703 | 704 | esbuild-netbsd-64@0.15.18: 705 | resolution: {integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==} 706 | engines: {node: '>=12'} 707 | cpu: [x64] 708 | os: [netbsd] 709 | 710 | esbuild-openbsd-64@0.14.54: 711 | resolution: {integrity: sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==} 712 | engines: {node: '>=12'} 713 | cpu: [x64] 714 | os: [openbsd] 715 | 716 | esbuild-openbsd-64@0.15.18: 717 | resolution: {integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==} 718 | engines: {node: '>=12'} 719 | cpu: [x64] 720 | os: [openbsd] 721 | 722 | esbuild-sunos-64@0.14.54: 723 | resolution: {integrity: sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==} 724 | engines: {node: '>=12'} 725 | cpu: [x64] 726 | os: [sunos] 727 | 728 | esbuild-sunos-64@0.15.18: 729 | resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==} 730 | engines: {node: '>=12'} 731 | cpu: [x64] 732 | os: [sunos] 733 | 734 | esbuild-windows-32@0.14.54: 735 | resolution: {integrity: sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==} 736 | engines: {node: '>=12'} 737 | cpu: [ia32] 738 | os: [win32] 739 | 740 | esbuild-windows-32@0.15.18: 741 | resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==} 742 | engines: {node: '>=12'} 743 | cpu: [ia32] 744 | os: [win32] 745 | 746 | esbuild-windows-64@0.14.54: 747 | resolution: {integrity: sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==} 748 | engines: {node: '>=12'} 749 | cpu: [x64] 750 | os: [win32] 751 | 752 | esbuild-windows-64@0.15.18: 753 | resolution: {integrity: sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==} 754 | engines: {node: '>=12'} 755 | cpu: [x64] 756 | os: [win32] 757 | 758 | esbuild-windows-arm64@0.14.54: 759 | resolution: {integrity: sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==} 760 | engines: {node: '>=12'} 761 | cpu: [arm64] 762 | os: [win32] 763 | 764 | esbuild-windows-arm64@0.15.18: 765 | resolution: {integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==} 766 | engines: {node: '>=12'} 767 | cpu: [arm64] 768 | os: [win32] 769 | 770 | esbuild@0.14.54: 771 | resolution: {integrity: sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==} 772 | engines: {node: '>=12'} 773 | hasBin: true 774 | 775 | esbuild@0.15.18: 776 | resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==} 777 | engines: {node: '>=12'} 778 | hasBin: true 779 | 780 | escape-string-regexp@1.0.5: 781 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 782 | engines: {node: '>=0.8.0'} 783 | 784 | escape-string-regexp@4.0.0: 785 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 786 | engines: {node: '>=10'} 787 | 788 | eslint-config-prettier@8.5.0: 789 | resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==} 790 | hasBin: true 791 | peerDependencies: 792 | eslint: '>=7.0.0' 793 | 794 | eslint-plugin-unicorn@42.0.0: 795 | resolution: {integrity: sha512-ixBsbhgWuxVaNlPTT8AyfJMlhyC5flCJFjyK3oKE8TRrwBnaHvUbuIkCM1lqg8ryYrFStL/T557zfKzX4GKSlg==} 796 | engines: {node: '>=12'} 797 | peerDependencies: 798 | eslint: '>=8.8.0' 799 | 800 | eslint-scope@5.1.1: 801 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} 802 | engines: {node: '>=8.0.0'} 803 | 804 | eslint-scope@7.2.2: 805 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 806 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 807 | 808 | eslint-utils@3.0.0: 809 | resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} 810 | engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} 811 | peerDependencies: 812 | eslint: '>=5' 813 | 814 | eslint-visitor-keys@2.1.0: 815 | resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} 816 | engines: {node: '>=10'} 817 | 818 | eslint-visitor-keys@3.4.3: 819 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 820 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 821 | 822 | eslint@8.23.0: 823 | resolution: {integrity: sha512-pBG/XOn0MsJcKcTRLr27S5HpzQo4kLr+HjLQIyK4EiCsijDl/TB+h5uEuJU6bQ8Edvwz1XWOjpaP2qgnXGpTcA==} 824 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 825 | deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. 826 | hasBin: true 827 | 828 | espree@9.6.1: 829 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 830 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 831 | 832 | esquery@1.6.0: 833 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 834 | engines: {node: '>=0.10'} 835 | 836 | esrecurse@4.3.0: 837 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 838 | engines: {node: '>=4.0'} 839 | 840 | estraverse@4.3.0: 841 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 842 | engines: {node: '>=4.0'} 843 | 844 | estraverse@5.3.0: 845 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 846 | engines: {node: '>=4.0'} 847 | 848 | esutils@2.0.3: 849 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 850 | engines: {node: '>=0.10.0'} 851 | 852 | execa@5.1.1: 853 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 854 | engines: {node: '>=10'} 855 | 856 | fast-deep-equal@3.1.3: 857 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 858 | 859 | fast-glob@3.3.3: 860 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 861 | engines: {node: '>=8.6.0'} 862 | 863 | fast-json-stable-stringify@2.1.0: 864 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 865 | 866 | fast-levenshtein@2.0.6: 867 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 868 | 869 | fastq@1.19.0: 870 | resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} 871 | 872 | file-entry-cache@6.0.1: 873 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 874 | engines: {node: ^10.12.0 || >=12.0.0} 875 | 876 | fill-range@7.1.1: 877 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 878 | engines: {node: '>=8'} 879 | 880 | find-up@4.1.0: 881 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 882 | engines: {node: '>=8'} 883 | 884 | find-up@5.0.0: 885 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 886 | engines: {node: '>=10'} 887 | 888 | flat-cache@3.2.0: 889 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} 890 | engines: {node: ^10.12.0 || >=12.0.0} 891 | 892 | flatted@3.3.3: 893 | resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 894 | 895 | for-each@0.3.5: 896 | resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} 897 | engines: {node: '>= 0.4'} 898 | 899 | foreground-child@3.3.1: 900 | resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} 901 | engines: {node: '>=14'} 902 | 903 | fs.realpath@1.0.0: 904 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 905 | 906 | fsevents@2.3.3: 907 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 908 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 909 | os: [darwin] 910 | 911 | function-bind@1.1.2: 912 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 913 | 914 | function.prototype.name@1.1.8: 915 | resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} 916 | engines: {node: '>= 0.4'} 917 | 918 | functional-red-black-tree@1.0.1: 919 | resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} 920 | 921 | functions-have-names@1.2.3: 922 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 923 | 924 | get-func-name@2.0.2: 925 | resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} 926 | 927 | get-intrinsic@1.3.0: 928 | resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} 929 | engines: {node: '>= 0.4'} 930 | 931 | get-proto@1.0.1: 932 | resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} 933 | engines: {node: '>= 0.4'} 934 | 935 | get-stream@6.0.1: 936 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 937 | engines: {node: '>=10'} 938 | 939 | get-symbol-description@1.1.0: 940 | resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} 941 | engines: {node: '>= 0.4'} 942 | 943 | glob-parent@5.1.2: 944 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 945 | engines: {node: '>= 6'} 946 | 947 | glob-parent@6.0.2: 948 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 949 | engines: {node: '>=10.13.0'} 950 | 951 | glob@10.4.5: 952 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 953 | hasBin: true 954 | 955 | glob@7.2.3: 956 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 957 | deprecated: Glob versions prior to v9 are no longer supported 958 | 959 | globals@13.24.0: 960 | resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} 961 | engines: {node: '>=8'} 962 | 963 | globalthis@1.0.4: 964 | resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} 965 | engines: {node: '>= 0.4'} 966 | 967 | globby@11.1.0: 968 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 969 | engines: {node: '>=10'} 970 | 971 | gopd@1.2.0: 972 | resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} 973 | engines: {node: '>= 0.4'} 974 | 975 | graceful-fs@4.2.11: 976 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 977 | 978 | grapheme-splitter@1.0.4: 979 | resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} 980 | 981 | has-bigints@1.1.0: 982 | resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} 983 | engines: {node: '>= 0.4'} 984 | 985 | has-flag@3.0.0: 986 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 987 | engines: {node: '>=4'} 988 | 989 | has-flag@4.0.0: 990 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 991 | engines: {node: '>=8'} 992 | 993 | has-property-descriptors@1.0.2: 994 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 995 | 996 | has-proto@1.2.0: 997 | resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} 998 | engines: {node: '>= 0.4'} 999 | 1000 | has-symbols@1.1.0: 1001 | resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} 1002 | engines: {node: '>= 0.4'} 1003 | 1004 | has-tostringtag@1.0.2: 1005 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} 1006 | engines: {node: '>= 0.4'} 1007 | 1008 | hasown@2.0.2: 1009 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 1010 | engines: {node: '>= 0.4'} 1011 | 1012 | hosted-git-info@2.8.9: 1013 | resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} 1014 | 1015 | human-signals@2.1.0: 1016 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 1017 | engines: {node: '>=10.17.0'} 1018 | 1019 | husky@8.0.1: 1020 | resolution: {integrity: sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==} 1021 | engines: {node: '>=14'} 1022 | hasBin: true 1023 | 1024 | ignore@5.3.2: 1025 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 1026 | engines: {node: '>= 4'} 1027 | 1028 | import-fresh@3.3.1: 1029 | resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 1030 | engines: {node: '>=6'} 1031 | 1032 | imurmurhash@0.1.4: 1033 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1034 | engines: {node: '>=0.8.19'} 1035 | 1036 | indent-string@4.0.0: 1037 | resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} 1038 | engines: {node: '>=8'} 1039 | 1040 | inflight@1.0.6: 1041 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1042 | deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. 1043 | 1044 | inherits@2.0.4: 1045 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1046 | 1047 | internal-slot@1.1.0: 1048 | resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} 1049 | engines: {node: '>= 0.4'} 1050 | 1051 | is-array-buffer@3.0.5: 1052 | resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} 1053 | engines: {node: '>= 0.4'} 1054 | 1055 | is-arrayish@0.2.1: 1056 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 1057 | 1058 | is-async-function@2.1.1: 1059 | resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} 1060 | engines: {node: '>= 0.4'} 1061 | 1062 | is-bigint@1.1.0: 1063 | resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} 1064 | engines: {node: '>= 0.4'} 1065 | 1066 | is-binary-path@2.1.0: 1067 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1068 | engines: {node: '>=8'} 1069 | 1070 | is-boolean-object@1.2.2: 1071 | resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} 1072 | engines: {node: '>= 0.4'} 1073 | 1074 | is-builtin-module@3.2.1: 1075 | resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} 1076 | engines: {node: '>=6'} 1077 | 1078 | is-callable@1.2.7: 1079 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 1080 | engines: {node: '>= 0.4'} 1081 | 1082 | is-core-module@2.16.1: 1083 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 1084 | engines: {node: '>= 0.4'} 1085 | 1086 | is-data-view@1.0.2: 1087 | resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} 1088 | engines: {node: '>= 0.4'} 1089 | 1090 | is-date-object@1.1.0: 1091 | resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} 1092 | engines: {node: '>= 0.4'} 1093 | 1094 | is-extglob@2.1.1: 1095 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1096 | engines: {node: '>=0.10.0'} 1097 | 1098 | is-finalizationregistry@1.1.1: 1099 | resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} 1100 | engines: {node: '>= 0.4'} 1101 | 1102 | is-fullwidth-code-point@3.0.0: 1103 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1104 | engines: {node: '>=8'} 1105 | 1106 | is-generator-function@1.1.0: 1107 | resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} 1108 | engines: {node: '>= 0.4'} 1109 | 1110 | is-glob@4.0.3: 1111 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1112 | engines: {node: '>=0.10.0'} 1113 | 1114 | is-map@2.0.3: 1115 | resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} 1116 | engines: {node: '>= 0.4'} 1117 | 1118 | is-number-object@1.1.1: 1119 | resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} 1120 | engines: {node: '>= 0.4'} 1121 | 1122 | is-number@7.0.0: 1123 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1124 | engines: {node: '>=0.12.0'} 1125 | 1126 | is-regex@1.2.1: 1127 | resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} 1128 | engines: {node: '>= 0.4'} 1129 | 1130 | is-set@2.0.3: 1131 | resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} 1132 | engines: {node: '>= 0.4'} 1133 | 1134 | is-shared-array-buffer@1.0.4: 1135 | resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} 1136 | engines: {node: '>= 0.4'} 1137 | 1138 | is-stream@2.0.1: 1139 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 1140 | engines: {node: '>=8'} 1141 | 1142 | is-string@1.1.1: 1143 | resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} 1144 | engines: {node: '>= 0.4'} 1145 | 1146 | is-symbol@1.1.1: 1147 | resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} 1148 | engines: {node: '>= 0.4'} 1149 | 1150 | is-typed-array@1.1.15: 1151 | resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} 1152 | engines: {node: '>= 0.4'} 1153 | 1154 | is-weakmap@2.0.2: 1155 | resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} 1156 | engines: {node: '>= 0.4'} 1157 | 1158 | is-weakref@1.1.1: 1159 | resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} 1160 | engines: {node: '>= 0.4'} 1161 | 1162 | is-weakset@2.0.4: 1163 | resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} 1164 | engines: {node: '>= 0.4'} 1165 | 1166 | isarray@2.0.5: 1167 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 1168 | 1169 | isexe@2.0.0: 1170 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1171 | 1172 | jackspeak@3.4.3: 1173 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 1174 | 1175 | joycon@3.1.1: 1176 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} 1177 | engines: {node: '>=10'} 1178 | 1179 | js-tokens@4.0.0: 1180 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1181 | 1182 | js-yaml@4.1.0: 1183 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1184 | hasBin: true 1185 | 1186 | json-buffer@3.0.1: 1187 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1188 | 1189 | json-parse-better-errors@1.0.2: 1190 | resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} 1191 | 1192 | json-parse-even-better-errors@2.3.1: 1193 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1194 | 1195 | json-schema-traverse@0.4.1: 1196 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1197 | 1198 | json-stable-stringify-without-jsonify@1.0.1: 1199 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1200 | 1201 | keyv@4.5.4: 1202 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1203 | 1204 | levn@0.4.1: 1205 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1206 | engines: {node: '>= 0.8.0'} 1207 | 1208 | lilconfig@2.1.0: 1209 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 1210 | engines: {node: '>=10'} 1211 | 1212 | lines-and-columns@1.2.4: 1213 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1214 | 1215 | load-json-file@4.0.0: 1216 | resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} 1217 | engines: {node: '>=4'} 1218 | 1219 | load-tsconfig@0.2.5: 1220 | resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} 1221 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1222 | 1223 | local-pkg@0.4.3: 1224 | resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} 1225 | engines: {node: '>=14'} 1226 | 1227 | locate-path@5.0.0: 1228 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1229 | engines: {node: '>=8'} 1230 | 1231 | locate-path@6.0.0: 1232 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1233 | engines: {node: '>=10'} 1234 | 1235 | lodash.merge@4.6.2: 1236 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1237 | 1238 | lodash.sortby@4.7.0: 1239 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} 1240 | 1241 | lodash@4.17.21: 1242 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1243 | 1244 | loupe@2.3.7: 1245 | resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} 1246 | 1247 | lru-cache@10.4.3: 1248 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 1249 | 1250 | math-intrinsics@1.1.0: 1251 | resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} 1252 | engines: {node: '>= 0.4'} 1253 | 1254 | memorystream@0.3.1: 1255 | resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} 1256 | engines: {node: '>= 0.10.0'} 1257 | 1258 | merge-stream@2.0.0: 1259 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1260 | 1261 | merge2@1.4.1: 1262 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1263 | engines: {node: '>= 8'} 1264 | 1265 | micromatch@4.0.8: 1266 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1267 | engines: {node: '>=8.6'} 1268 | 1269 | mimic-fn@2.1.0: 1270 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 1271 | engines: {node: '>=6'} 1272 | 1273 | min-indent@1.0.1: 1274 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 1275 | engines: {node: '>=4'} 1276 | 1277 | minimatch@3.1.2: 1278 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1279 | 1280 | minimatch@9.0.5: 1281 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1282 | engines: {node: '>=16 || 14 >=14.17'} 1283 | 1284 | minipass@7.1.2: 1285 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 1286 | engines: {node: '>=16 || 14 >=14.17'} 1287 | 1288 | ms@2.1.3: 1289 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1290 | 1291 | mz@2.7.0: 1292 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 1293 | 1294 | nano-staged@0.8.0: 1295 | resolution: {integrity: sha512-QSEqPGTCJbkHU2yLvfY6huqYPjdBrOaTMKatO1F8nCSrkQGXeKwtCiCnsdxnuMhbg3DTVywKaeWLGCE5oJpq0g==} 1296 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1297 | hasBin: true 1298 | 1299 | nanoid@3.3.8: 1300 | resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} 1301 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1302 | hasBin: true 1303 | 1304 | natural-compare@1.4.0: 1305 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1306 | 1307 | nice-try@1.0.5: 1308 | resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} 1309 | 1310 | normalize-package-data@2.5.0: 1311 | resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} 1312 | 1313 | normalize-path@3.0.0: 1314 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1315 | engines: {node: '>=0.10.0'} 1316 | 1317 | npm-run-all@4.1.5: 1318 | resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} 1319 | engines: {node: '>= 4'} 1320 | hasBin: true 1321 | 1322 | npm-run-path@4.0.1: 1323 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 1324 | engines: {node: '>=8'} 1325 | 1326 | object-assign@4.1.1: 1327 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1328 | engines: {node: '>=0.10.0'} 1329 | 1330 | object-inspect@1.13.4: 1331 | resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} 1332 | engines: {node: '>= 0.4'} 1333 | 1334 | object-keys@1.1.1: 1335 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1336 | engines: {node: '>= 0.4'} 1337 | 1338 | object.assign@4.1.7: 1339 | resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} 1340 | engines: {node: '>= 0.4'} 1341 | 1342 | once@1.4.0: 1343 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1344 | 1345 | onetime@5.1.2: 1346 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 1347 | engines: {node: '>=6'} 1348 | 1349 | optionator@0.9.4: 1350 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1351 | engines: {node: '>= 0.8.0'} 1352 | 1353 | own-keys@1.0.1: 1354 | resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} 1355 | engines: {node: '>= 0.4'} 1356 | 1357 | p-limit@2.3.0: 1358 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 1359 | engines: {node: '>=6'} 1360 | 1361 | p-limit@3.1.0: 1362 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1363 | engines: {node: '>=10'} 1364 | 1365 | p-locate@4.1.0: 1366 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 1367 | engines: {node: '>=8'} 1368 | 1369 | p-locate@5.0.0: 1370 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1371 | engines: {node: '>=10'} 1372 | 1373 | p-try@2.2.0: 1374 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 1375 | engines: {node: '>=6'} 1376 | 1377 | package-json-from-dist@1.0.1: 1378 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 1379 | 1380 | parent-module@1.0.1: 1381 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1382 | engines: {node: '>=6'} 1383 | 1384 | parse-json@4.0.0: 1385 | resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} 1386 | engines: {node: '>=4'} 1387 | 1388 | parse-json@5.2.0: 1389 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1390 | engines: {node: '>=8'} 1391 | 1392 | path-exists@4.0.0: 1393 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1394 | engines: {node: '>=8'} 1395 | 1396 | path-is-absolute@1.0.1: 1397 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1398 | engines: {node: '>=0.10.0'} 1399 | 1400 | path-key@2.0.1: 1401 | resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} 1402 | engines: {node: '>=4'} 1403 | 1404 | path-key@3.1.1: 1405 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1406 | engines: {node: '>=8'} 1407 | 1408 | path-parse@1.0.7: 1409 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1410 | 1411 | path-scurry@1.11.1: 1412 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 1413 | engines: {node: '>=16 || 14 >=14.18'} 1414 | 1415 | path-type@3.0.0: 1416 | resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} 1417 | engines: {node: '>=4'} 1418 | 1419 | path-type@4.0.0: 1420 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1421 | engines: {node: '>=8'} 1422 | 1423 | pathval@1.1.1: 1424 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} 1425 | 1426 | picocolors@1.1.1: 1427 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1428 | 1429 | picomatch@2.3.1: 1430 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1431 | engines: {node: '>=8.6'} 1432 | 1433 | pidtree@0.3.1: 1434 | resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} 1435 | engines: {node: '>=0.10'} 1436 | hasBin: true 1437 | 1438 | pify@3.0.0: 1439 | resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} 1440 | engines: {node: '>=4'} 1441 | 1442 | pirates@4.0.6: 1443 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 1444 | engines: {node: '>= 6'} 1445 | 1446 | pluralize@8.0.0: 1447 | resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} 1448 | engines: {node: '>=4'} 1449 | 1450 | possible-typed-array-names@1.1.0: 1451 | resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} 1452 | engines: {node: '>= 0.4'} 1453 | 1454 | postcss-load-config@3.1.4: 1455 | resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} 1456 | engines: {node: '>= 10'} 1457 | peerDependencies: 1458 | postcss: '>=8.0.9' 1459 | ts-node: '>=9.0.0' 1460 | peerDependenciesMeta: 1461 | postcss: 1462 | optional: true 1463 | ts-node: 1464 | optional: true 1465 | 1466 | postcss@8.5.3: 1467 | resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} 1468 | engines: {node: ^10 || ^12 || >=14} 1469 | 1470 | prelude-ls@1.2.1: 1471 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1472 | engines: {node: '>= 0.8.0'} 1473 | 1474 | punycode@2.3.1: 1475 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1476 | engines: {node: '>=6'} 1477 | 1478 | queue-microtask@1.2.3: 1479 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1480 | 1481 | read-pkg-up@7.0.1: 1482 | resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} 1483 | engines: {node: '>=8'} 1484 | 1485 | read-pkg@3.0.0: 1486 | resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} 1487 | engines: {node: '>=4'} 1488 | 1489 | read-pkg@5.2.0: 1490 | resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} 1491 | engines: {node: '>=8'} 1492 | 1493 | readdirp@3.6.0: 1494 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1495 | engines: {node: '>=8.10.0'} 1496 | 1497 | reflect.getprototypeof@1.0.10: 1498 | resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} 1499 | engines: {node: '>= 0.4'} 1500 | 1501 | regexp-tree@0.1.27: 1502 | resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} 1503 | hasBin: true 1504 | 1505 | regexp.prototype.flags@1.5.4: 1506 | resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} 1507 | engines: {node: '>= 0.4'} 1508 | 1509 | regexpp@3.2.0: 1510 | resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} 1511 | engines: {node: '>=8'} 1512 | 1513 | resolve-from@4.0.0: 1514 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1515 | engines: {node: '>=4'} 1516 | 1517 | resolve-from@5.0.0: 1518 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1519 | engines: {node: '>=8'} 1520 | 1521 | resolve@1.22.10: 1522 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} 1523 | engines: {node: '>= 0.4'} 1524 | hasBin: true 1525 | 1526 | reusify@1.0.4: 1527 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1528 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1529 | 1530 | rimraf@3.0.2: 1531 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1532 | deprecated: Rimraf versions prior to v4 are no longer supported 1533 | hasBin: true 1534 | 1535 | rollup@2.77.3: 1536 | resolution: {integrity: sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==} 1537 | engines: {node: '>=10.0.0'} 1538 | hasBin: true 1539 | 1540 | rollup@2.79.2: 1541 | resolution: {integrity: sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==} 1542 | engines: {node: '>=10.0.0'} 1543 | hasBin: true 1544 | 1545 | run-parallel@1.2.0: 1546 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1547 | 1548 | safe-array-concat@1.1.3: 1549 | resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} 1550 | engines: {node: '>=0.4'} 1551 | 1552 | safe-push-apply@1.0.0: 1553 | resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} 1554 | engines: {node: '>= 0.4'} 1555 | 1556 | safe-regex-test@1.1.0: 1557 | resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} 1558 | engines: {node: '>= 0.4'} 1559 | 1560 | safe-regex@2.1.1: 1561 | resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==} 1562 | 1563 | semver@5.7.2: 1564 | resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} 1565 | hasBin: true 1566 | 1567 | semver@7.7.1: 1568 | resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} 1569 | engines: {node: '>=10'} 1570 | hasBin: true 1571 | 1572 | set-function-length@1.2.2: 1573 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} 1574 | engines: {node: '>= 0.4'} 1575 | 1576 | set-function-name@2.0.2: 1577 | resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} 1578 | engines: {node: '>= 0.4'} 1579 | 1580 | set-proto@1.0.0: 1581 | resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} 1582 | engines: {node: '>= 0.4'} 1583 | 1584 | shebang-command@1.2.0: 1585 | resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} 1586 | engines: {node: '>=0.10.0'} 1587 | 1588 | shebang-command@2.0.0: 1589 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1590 | engines: {node: '>=8'} 1591 | 1592 | shebang-regex@1.0.0: 1593 | resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} 1594 | engines: {node: '>=0.10.0'} 1595 | 1596 | shebang-regex@3.0.0: 1597 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1598 | engines: {node: '>=8'} 1599 | 1600 | shell-quote@1.8.2: 1601 | resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} 1602 | engines: {node: '>= 0.4'} 1603 | 1604 | side-channel-list@1.0.0: 1605 | resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} 1606 | engines: {node: '>= 0.4'} 1607 | 1608 | side-channel-map@1.0.1: 1609 | resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} 1610 | engines: {node: '>= 0.4'} 1611 | 1612 | side-channel-weakmap@1.0.2: 1613 | resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} 1614 | engines: {node: '>= 0.4'} 1615 | 1616 | side-channel@1.1.0: 1617 | resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} 1618 | engines: {node: '>= 0.4'} 1619 | 1620 | signal-exit@3.0.7: 1621 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 1622 | 1623 | signal-exit@4.1.0: 1624 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1625 | engines: {node: '>=14'} 1626 | 1627 | slash@3.0.0: 1628 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1629 | engines: {node: '>=8'} 1630 | 1631 | source-map-js@1.2.1: 1632 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1633 | engines: {node: '>=0.10.0'} 1634 | 1635 | source-map@0.8.0-beta.0: 1636 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} 1637 | engines: {node: '>= 8'} 1638 | 1639 | spdx-correct@3.2.0: 1640 | resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} 1641 | 1642 | spdx-exceptions@2.5.0: 1643 | resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} 1644 | 1645 | spdx-expression-parse@3.0.1: 1646 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} 1647 | 1648 | spdx-license-ids@3.0.21: 1649 | resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} 1650 | 1651 | string-width@4.2.3: 1652 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1653 | engines: {node: '>=8'} 1654 | 1655 | string-width@5.1.2: 1656 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1657 | engines: {node: '>=12'} 1658 | 1659 | string.prototype.padend@3.1.6: 1660 | resolution: {integrity: sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==} 1661 | engines: {node: '>= 0.4'} 1662 | 1663 | string.prototype.trim@1.2.10: 1664 | resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} 1665 | engines: {node: '>= 0.4'} 1666 | 1667 | string.prototype.trimend@1.0.9: 1668 | resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} 1669 | engines: {node: '>= 0.4'} 1670 | 1671 | string.prototype.trimstart@1.0.8: 1672 | resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} 1673 | engines: {node: '>= 0.4'} 1674 | 1675 | strip-ansi@6.0.1: 1676 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1677 | engines: {node: '>=8'} 1678 | 1679 | strip-ansi@7.1.0: 1680 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1681 | engines: {node: '>=12'} 1682 | 1683 | strip-bom@3.0.0: 1684 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 1685 | engines: {node: '>=4'} 1686 | 1687 | strip-final-newline@2.0.0: 1688 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 1689 | engines: {node: '>=6'} 1690 | 1691 | strip-indent@3.0.0: 1692 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 1693 | engines: {node: '>=8'} 1694 | 1695 | strip-json-comments@3.1.1: 1696 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1697 | engines: {node: '>=8'} 1698 | 1699 | strip-literal@0.4.2: 1700 | resolution: {integrity: sha512-pv48ybn4iE1O9RLgCAN0iU4Xv7RlBTiit6DKmMiErbs9x1wH6vXBs45tWc0H5wUIF6TLTrKweqkmYF/iraQKNw==} 1701 | 1702 | sucrase@3.35.0: 1703 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 1704 | engines: {node: '>=16 || 14 >=14.17'} 1705 | hasBin: true 1706 | 1707 | supports-color@5.5.0: 1708 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1709 | engines: {node: '>=4'} 1710 | 1711 | supports-color@7.2.0: 1712 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1713 | engines: {node: '>=8'} 1714 | 1715 | supports-preserve-symlinks-flag@1.0.0: 1716 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1717 | engines: {node: '>= 0.4'} 1718 | 1719 | text-table@0.2.0: 1720 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 1721 | 1722 | thenify-all@1.6.0: 1723 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 1724 | engines: {node: '>=0.8'} 1725 | 1726 | thenify@3.3.1: 1727 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 1728 | 1729 | tinybench@2.9.0: 1730 | resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} 1731 | 1732 | tinypool@0.2.4: 1733 | resolution: {integrity: sha512-Vs3rhkUH6Qq1t5bqtb816oT+HeJTXfwt2cbPH17sWHIYKTotQIFPk3tf2fgqRrVyMDVOc1EnPgzIxfIulXVzwQ==} 1734 | engines: {node: '>=14.0.0'} 1735 | 1736 | tinyspy@1.1.1: 1737 | resolution: {integrity: sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g==} 1738 | engines: {node: '>=14.0.0'} 1739 | 1740 | to-regex-range@5.0.1: 1741 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1742 | engines: {node: '>=8.0'} 1743 | 1744 | tr46@1.0.1: 1745 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} 1746 | 1747 | tree-kill@1.2.2: 1748 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 1749 | hasBin: true 1750 | 1751 | ts-interface-checker@0.1.13: 1752 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 1753 | 1754 | tslib@1.14.1: 1755 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 1756 | 1757 | tsup@6.2.3: 1758 | resolution: {integrity: sha512-J5Pu2Dx0E1wlpIEsVFv9ryzP1pZ1OYsJ2cBHZ7GrKteytNdzaSz5hmLX7/nAxtypq+jVkVvA79d7S83ETgHQ5w==} 1759 | engines: {node: '>=14'} 1760 | hasBin: true 1761 | peerDependencies: 1762 | '@swc/core': ^1 1763 | postcss: ^8.4.12 1764 | typescript: ^4.1.0 1765 | peerDependenciesMeta: 1766 | '@swc/core': 1767 | optional: true 1768 | postcss: 1769 | optional: true 1770 | typescript: 1771 | optional: true 1772 | 1773 | tsutils@3.21.0: 1774 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} 1775 | engines: {node: '>= 6'} 1776 | peerDependencies: 1777 | typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' 1778 | 1779 | type-check@0.4.0: 1780 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1781 | engines: {node: '>= 0.8.0'} 1782 | 1783 | type-detect@4.1.0: 1784 | resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} 1785 | engines: {node: '>=4'} 1786 | 1787 | type-fest@0.20.2: 1788 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 1789 | engines: {node: '>=10'} 1790 | 1791 | type-fest@0.6.0: 1792 | resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} 1793 | engines: {node: '>=8'} 1794 | 1795 | type-fest@0.8.1: 1796 | resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} 1797 | engines: {node: '>=8'} 1798 | 1799 | typed-array-buffer@1.0.3: 1800 | resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} 1801 | engines: {node: '>= 0.4'} 1802 | 1803 | typed-array-byte-length@1.0.3: 1804 | resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} 1805 | engines: {node: '>= 0.4'} 1806 | 1807 | typed-array-byte-offset@1.0.4: 1808 | resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} 1809 | engines: {node: '>= 0.4'} 1810 | 1811 | typed-array-length@1.0.7: 1812 | resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} 1813 | engines: {node: '>= 0.4'} 1814 | 1815 | typescript@4.8.2: 1816 | resolution: {integrity: sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==} 1817 | engines: {node: '>=4.2.0'} 1818 | hasBin: true 1819 | 1820 | unbox-primitive@1.1.0: 1821 | resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} 1822 | engines: {node: '>= 0.4'} 1823 | 1824 | uri-js@4.4.1: 1825 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1826 | 1827 | validate-npm-package-license@3.0.4: 1828 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} 1829 | 1830 | vite@3.0.9: 1831 | resolution: {integrity: sha512-waYABTM+G6DBTCpYAxvevpG50UOlZuynR0ckTK5PawNVt7ebX6X7wNXHaGIO6wYYFXSM7/WcuFuO2QzhBB6aMw==} 1832 | engines: {node: ^14.18.0 || >=16.0.0} 1833 | hasBin: true 1834 | peerDependencies: 1835 | less: '*' 1836 | sass: '*' 1837 | stylus: '*' 1838 | terser: ^5.4.0 1839 | peerDependenciesMeta: 1840 | less: 1841 | optional: true 1842 | sass: 1843 | optional: true 1844 | stylus: 1845 | optional: true 1846 | terser: 1847 | optional: true 1848 | 1849 | vitest@0.23.0: 1850 | resolution: {integrity: sha512-I3ctlfiXYprA2tID1qP+m6pmgmKx3HYfRe66MetGOHKCHLY7hz74ihiwIEtN7LReJgF3U5cM735iYPkn/Go1iQ==} 1851 | engines: {node: '>=v14.16.0'} 1852 | hasBin: true 1853 | peerDependencies: 1854 | '@edge-runtime/vm': '*' 1855 | '@vitest/browser': '*' 1856 | '@vitest/ui': '*' 1857 | happy-dom: '*' 1858 | jsdom: '*' 1859 | peerDependenciesMeta: 1860 | '@edge-runtime/vm': 1861 | optional: true 1862 | '@vitest/browser': 1863 | optional: true 1864 | '@vitest/ui': 1865 | optional: true 1866 | happy-dom: 1867 | optional: true 1868 | jsdom: 1869 | optional: true 1870 | 1871 | webidl-conversions@4.0.2: 1872 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} 1873 | 1874 | whatwg-url@7.1.0: 1875 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} 1876 | 1877 | which-boxed-primitive@1.1.1: 1878 | resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} 1879 | engines: {node: '>= 0.4'} 1880 | 1881 | which-builtin-type@1.2.1: 1882 | resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} 1883 | engines: {node: '>= 0.4'} 1884 | 1885 | which-collection@1.0.2: 1886 | resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} 1887 | engines: {node: '>= 0.4'} 1888 | 1889 | which-typed-array@1.1.18: 1890 | resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} 1891 | engines: {node: '>= 0.4'} 1892 | 1893 | which@1.3.1: 1894 | resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} 1895 | hasBin: true 1896 | 1897 | which@2.0.2: 1898 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1899 | engines: {node: '>= 8'} 1900 | hasBin: true 1901 | 1902 | word-wrap@1.2.5: 1903 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1904 | engines: {node: '>=0.10.0'} 1905 | 1906 | wrap-ansi@7.0.0: 1907 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1908 | engines: {node: '>=10'} 1909 | 1910 | wrap-ansi@8.1.0: 1911 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 1912 | engines: {node: '>=12'} 1913 | 1914 | wrappy@1.0.2: 1915 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1916 | 1917 | yaml@1.10.2: 1918 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} 1919 | engines: {node: '>= 6'} 1920 | 1921 | yocto-queue@0.1.0: 1922 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1923 | engines: {node: '>=10'} 1924 | 1925 | snapshots: 1926 | 1927 | '@babel/code-frame@7.26.2': 1928 | dependencies: 1929 | '@babel/helper-validator-identifier': 7.25.9 1930 | js-tokens: 4.0.0 1931 | picocolors: 1.1.1 1932 | 1933 | '@babel/helper-validator-identifier@7.25.9': {} 1934 | 1935 | '@biomejs/biome@1.5.3': 1936 | optionalDependencies: 1937 | '@biomejs/cli-darwin-arm64': 1.5.3 1938 | '@biomejs/cli-darwin-x64': 1.5.3 1939 | '@biomejs/cli-linux-arm64': 1.5.3 1940 | '@biomejs/cli-linux-arm64-musl': 1.5.3 1941 | '@biomejs/cli-linux-x64': 1.5.3 1942 | '@biomejs/cli-linux-x64-musl': 1.5.3 1943 | '@biomejs/cli-win32-arm64': 1.5.3 1944 | '@biomejs/cli-win32-x64': 1.5.3 1945 | 1946 | '@biomejs/cli-darwin-arm64@1.5.3': 1947 | optional: true 1948 | 1949 | '@biomejs/cli-darwin-x64@1.5.3': 1950 | optional: true 1951 | 1952 | '@biomejs/cli-linux-arm64-musl@1.5.3': 1953 | optional: true 1954 | 1955 | '@biomejs/cli-linux-arm64@1.5.3': 1956 | optional: true 1957 | 1958 | '@biomejs/cli-linux-x64-musl@1.5.3': 1959 | optional: true 1960 | 1961 | '@biomejs/cli-linux-x64@1.5.3': 1962 | optional: true 1963 | 1964 | '@biomejs/cli-win32-arm64@1.5.3': 1965 | optional: true 1966 | 1967 | '@biomejs/cli-win32-x64@1.5.3': 1968 | optional: true 1969 | 1970 | '@esbuild/android-arm@0.15.18': 1971 | optional: true 1972 | 1973 | '@esbuild/linux-loong64@0.14.54': 1974 | optional: true 1975 | 1976 | '@esbuild/linux-loong64@0.15.18': 1977 | optional: true 1978 | 1979 | '@eslint/eslintrc@1.4.1': 1980 | dependencies: 1981 | ajv: 6.12.6 1982 | debug: 4.4.0 1983 | espree: 9.6.1 1984 | globals: 13.24.0 1985 | ignore: 5.3.2 1986 | import-fresh: 3.3.1 1987 | js-yaml: 4.1.0 1988 | minimatch: 3.1.2 1989 | strip-json-comments: 3.1.1 1990 | transitivePeerDependencies: 1991 | - supports-color 1992 | 1993 | '@humanwhocodes/config-array@0.10.7': 1994 | dependencies: 1995 | '@humanwhocodes/object-schema': 1.2.1 1996 | debug: 4.4.0 1997 | minimatch: 3.1.2 1998 | transitivePeerDependencies: 1999 | - supports-color 2000 | 2001 | '@humanwhocodes/gitignore-to-minimatch@1.0.2': {} 2002 | 2003 | '@humanwhocodes/module-importer@1.0.1': {} 2004 | 2005 | '@humanwhocodes/object-schema@1.2.1': {} 2006 | 2007 | '@isaacs/cliui@8.0.2': 2008 | dependencies: 2009 | string-width: 5.1.2 2010 | string-width-cjs: string-width@4.2.3 2011 | strip-ansi: 7.1.0 2012 | strip-ansi-cjs: strip-ansi@6.0.1 2013 | wrap-ansi: 8.1.0 2014 | wrap-ansi-cjs: wrap-ansi@7.0.0 2015 | 2016 | '@jridgewell/gen-mapping@0.3.8': 2017 | dependencies: 2018 | '@jridgewell/set-array': 1.2.1 2019 | '@jridgewell/sourcemap-codec': 1.5.0 2020 | '@jridgewell/trace-mapping': 0.3.25 2021 | 2022 | '@jridgewell/resolve-uri@3.1.2': {} 2023 | 2024 | '@jridgewell/set-array@1.2.1': {} 2025 | 2026 | '@jridgewell/sourcemap-codec@1.5.0': {} 2027 | 2028 | '@jridgewell/trace-mapping@0.3.25': 2029 | dependencies: 2030 | '@jridgewell/resolve-uri': 3.1.2 2031 | '@jridgewell/sourcemap-codec': 1.5.0 2032 | 2033 | '@nodelib/fs.scandir@2.1.5': 2034 | dependencies: 2035 | '@nodelib/fs.stat': 2.0.5 2036 | run-parallel: 1.2.0 2037 | 2038 | '@nodelib/fs.stat@2.0.5': {} 2039 | 2040 | '@nodelib/fs.walk@1.2.8': 2041 | dependencies: 2042 | '@nodelib/fs.scandir': 2.1.5 2043 | fastq: 1.19.0 2044 | 2045 | '@pkgjs/parseargs@0.11.0': 2046 | optional: true 2047 | 2048 | '@sachinraja/eslint-config@0.1.1(eslint@8.23.0)(typescript@4.8.2)': 2049 | dependencies: 2050 | '@typescript-eslint/eslint-plugin': 5.27.0(@typescript-eslint/parser@5.27.0(eslint@8.23.0)(typescript@4.8.2))(eslint@8.23.0)(typescript@4.8.2) 2051 | '@typescript-eslint/parser': 5.27.0(eslint@8.23.0)(typescript@4.8.2) 2052 | eslint: 8.23.0 2053 | eslint-config-prettier: 8.5.0(eslint@8.23.0) 2054 | eslint-plugin-unicorn: 42.0.0(eslint@8.23.0) 2055 | transitivePeerDependencies: 2056 | - supports-color 2057 | - typescript 2058 | 2059 | '@trpc/client@10.45.2(@trpc/server@10.45.2)': 2060 | dependencies: 2061 | '@trpc/server': 10.45.2 2062 | 2063 | '@trpc/server@10.45.2': {} 2064 | 2065 | '@types/chai-subset@1.3.5': 2066 | dependencies: 2067 | '@types/chai': 4.3.20 2068 | 2069 | '@types/chai@4.3.20': {} 2070 | 2071 | '@types/json-schema@7.0.15': {} 2072 | 2073 | '@types/node@18.7.14': {} 2074 | 2075 | '@types/normalize-package-data@2.4.4': {} 2076 | 2077 | '@typescript-eslint/eslint-plugin@5.27.0(@typescript-eslint/parser@5.27.0(eslint@8.23.0)(typescript@4.8.2))(eslint@8.23.0)(typescript@4.8.2)': 2078 | dependencies: 2079 | '@typescript-eslint/parser': 5.27.0(eslint@8.23.0)(typescript@4.8.2) 2080 | '@typescript-eslint/scope-manager': 5.27.0 2081 | '@typescript-eslint/type-utils': 5.27.0(eslint@8.23.0)(typescript@4.8.2) 2082 | '@typescript-eslint/utils': 5.27.0(eslint@8.23.0)(typescript@4.8.2) 2083 | debug: 4.4.0 2084 | eslint: 8.23.0 2085 | functional-red-black-tree: 1.0.1 2086 | ignore: 5.3.2 2087 | regexpp: 3.2.0 2088 | semver: 7.7.1 2089 | tsutils: 3.21.0(typescript@4.8.2) 2090 | optionalDependencies: 2091 | typescript: 4.8.2 2092 | transitivePeerDependencies: 2093 | - supports-color 2094 | 2095 | '@typescript-eslint/parser@5.27.0(eslint@8.23.0)(typescript@4.8.2)': 2096 | dependencies: 2097 | '@typescript-eslint/scope-manager': 5.27.0 2098 | '@typescript-eslint/types': 5.27.0 2099 | '@typescript-eslint/typescript-estree': 5.27.0(typescript@4.8.2) 2100 | debug: 4.4.0 2101 | eslint: 8.23.0 2102 | optionalDependencies: 2103 | typescript: 4.8.2 2104 | transitivePeerDependencies: 2105 | - supports-color 2106 | 2107 | '@typescript-eslint/scope-manager@5.27.0': 2108 | dependencies: 2109 | '@typescript-eslint/types': 5.27.0 2110 | '@typescript-eslint/visitor-keys': 5.27.0 2111 | 2112 | '@typescript-eslint/type-utils@5.27.0(eslint@8.23.0)(typescript@4.8.2)': 2113 | dependencies: 2114 | '@typescript-eslint/utils': 5.27.0(eslint@8.23.0)(typescript@4.8.2) 2115 | debug: 4.4.0 2116 | eslint: 8.23.0 2117 | tsutils: 3.21.0(typescript@4.8.2) 2118 | optionalDependencies: 2119 | typescript: 4.8.2 2120 | transitivePeerDependencies: 2121 | - supports-color 2122 | 2123 | '@typescript-eslint/types@5.27.0': {} 2124 | 2125 | '@typescript-eslint/typescript-estree@5.27.0(typescript@4.8.2)': 2126 | dependencies: 2127 | '@typescript-eslint/types': 5.27.0 2128 | '@typescript-eslint/visitor-keys': 5.27.0 2129 | debug: 4.4.0 2130 | globby: 11.1.0 2131 | is-glob: 4.0.3 2132 | semver: 7.7.1 2133 | tsutils: 3.21.0(typescript@4.8.2) 2134 | optionalDependencies: 2135 | typescript: 4.8.2 2136 | transitivePeerDependencies: 2137 | - supports-color 2138 | 2139 | '@typescript-eslint/utils@5.27.0(eslint@8.23.0)(typescript@4.8.2)': 2140 | dependencies: 2141 | '@types/json-schema': 7.0.15 2142 | '@typescript-eslint/scope-manager': 5.27.0 2143 | '@typescript-eslint/types': 5.27.0 2144 | '@typescript-eslint/typescript-estree': 5.27.0(typescript@4.8.2) 2145 | eslint: 8.23.0 2146 | eslint-scope: 5.1.1 2147 | eslint-utils: 3.0.0(eslint@8.23.0) 2148 | transitivePeerDependencies: 2149 | - supports-color 2150 | - typescript 2151 | 2152 | '@typescript-eslint/visitor-keys@5.27.0': 2153 | dependencies: 2154 | '@typescript-eslint/types': 5.27.0 2155 | eslint-visitor-keys: 3.4.3 2156 | 2157 | acorn-jsx@5.3.2(acorn@8.14.0): 2158 | dependencies: 2159 | acorn: 8.14.0 2160 | 2161 | acorn@8.14.0: {} 2162 | 2163 | ajv@6.12.6: 2164 | dependencies: 2165 | fast-deep-equal: 3.1.3 2166 | fast-json-stable-stringify: 2.1.0 2167 | json-schema-traverse: 0.4.1 2168 | uri-js: 4.4.1 2169 | 2170 | ansi-regex@5.0.1: {} 2171 | 2172 | ansi-regex@6.1.0: {} 2173 | 2174 | ansi-styles@3.2.1: 2175 | dependencies: 2176 | color-convert: 1.9.3 2177 | 2178 | ansi-styles@4.3.0: 2179 | dependencies: 2180 | color-convert: 2.0.1 2181 | 2182 | ansi-styles@6.2.1: {} 2183 | 2184 | any-promise@1.3.0: {} 2185 | 2186 | anymatch@3.1.3: 2187 | dependencies: 2188 | normalize-path: 3.0.0 2189 | picomatch: 2.3.1 2190 | 2191 | argparse@2.0.1: {} 2192 | 2193 | array-buffer-byte-length@1.0.2: 2194 | dependencies: 2195 | call-bound: 1.0.3 2196 | is-array-buffer: 3.0.5 2197 | 2198 | array-union@2.1.0: {} 2199 | 2200 | arraybuffer.prototype.slice@1.0.4: 2201 | dependencies: 2202 | array-buffer-byte-length: 1.0.2 2203 | call-bind: 1.0.8 2204 | define-properties: 1.2.1 2205 | es-abstract: 1.23.9 2206 | es-errors: 1.3.0 2207 | get-intrinsic: 1.3.0 2208 | is-array-buffer: 3.0.5 2209 | 2210 | assertion-error@1.1.0: {} 2211 | 2212 | async-function@1.0.0: {} 2213 | 2214 | available-typed-arrays@1.0.7: 2215 | dependencies: 2216 | possible-typed-array-names: 1.1.0 2217 | 2218 | balanced-match@1.0.2: {} 2219 | 2220 | binary-extensions@2.3.0: {} 2221 | 2222 | brace-expansion@1.1.11: 2223 | dependencies: 2224 | balanced-match: 1.0.2 2225 | concat-map: 0.0.1 2226 | 2227 | brace-expansion@2.0.1: 2228 | dependencies: 2229 | balanced-match: 1.0.2 2230 | 2231 | braces@3.0.3: 2232 | dependencies: 2233 | fill-range: 7.1.1 2234 | 2235 | builtin-modules@3.3.0: {} 2236 | 2237 | bundle-require@3.1.2(esbuild@0.15.18): 2238 | dependencies: 2239 | esbuild: 0.15.18 2240 | load-tsconfig: 0.2.5 2241 | 2242 | cac@6.7.14: {} 2243 | 2244 | call-bind-apply-helpers@1.0.2: 2245 | dependencies: 2246 | es-errors: 1.3.0 2247 | function-bind: 1.1.2 2248 | 2249 | call-bind@1.0.8: 2250 | dependencies: 2251 | call-bind-apply-helpers: 1.0.2 2252 | es-define-property: 1.0.1 2253 | get-intrinsic: 1.3.0 2254 | set-function-length: 1.2.2 2255 | 2256 | call-bound@1.0.3: 2257 | dependencies: 2258 | call-bind-apply-helpers: 1.0.2 2259 | get-intrinsic: 1.3.0 2260 | 2261 | callsites@3.1.0: {} 2262 | 2263 | chai@4.5.0: 2264 | dependencies: 2265 | assertion-error: 1.1.0 2266 | check-error: 1.0.3 2267 | deep-eql: 4.1.4 2268 | get-func-name: 2.0.2 2269 | loupe: 2.3.7 2270 | pathval: 1.1.1 2271 | type-detect: 4.1.0 2272 | 2273 | chalk@2.4.2: 2274 | dependencies: 2275 | ansi-styles: 3.2.1 2276 | escape-string-regexp: 1.0.5 2277 | supports-color: 5.5.0 2278 | 2279 | chalk@4.1.2: 2280 | dependencies: 2281 | ansi-styles: 4.3.0 2282 | supports-color: 7.2.0 2283 | 2284 | check-error@1.0.3: 2285 | dependencies: 2286 | get-func-name: 2.0.2 2287 | 2288 | chokidar@3.6.0: 2289 | dependencies: 2290 | anymatch: 3.1.3 2291 | braces: 3.0.3 2292 | glob-parent: 5.1.2 2293 | is-binary-path: 2.1.0 2294 | is-glob: 4.0.3 2295 | normalize-path: 3.0.0 2296 | readdirp: 3.6.0 2297 | optionalDependencies: 2298 | fsevents: 2.3.3 2299 | 2300 | ci-info@3.9.0: {} 2301 | 2302 | clean-regexp@1.0.0: 2303 | dependencies: 2304 | escape-string-regexp: 1.0.5 2305 | 2306 | color-convert@1.9.3: 2307 | dependencies: 2308 | color-name: 1.1.3 2309 | 2310 | color-convert@2.0.1: 2311 | dependencies: 2312 | color-name: 1.1.4 2313 | 2314 | color-name@1.1.3: {} 2315 | 2316 | color-name@1.1.4: {} 2317 | 2318 | commander@4.1.1: {} 2319 | 2320 | concat-map@0.0.1: {} 2321 | 2322 | cross-spawn@6.0.6: 2323 | dependencies: 2324 | nice-try: 1.0.5 2325 | path-key: 2.0.1 2326 | semver: 5.7.2 2327 | shebang-command: 1.2.0 2328 | which: 1.3.1 2329 | 2330 | cross-spawn@7.0.6: 2331 | dependencies: 2332 | path-key: 3.1.1 2333 | shebang-command: 2.0.0 2334 | which: 2.0.2 2335 | 2336 | data-view-buffer@1.0.2: 2337 | dependencies: 2338 | call-bound: 1.0.3 2339 | es-errors: 1.3.0 2340 | is-data-view: 1.0.2 2341 | 2342 | data-view-byte-length@1.0.2: 2343 | dependencies: 2344 | call-bound: 1.0.3 2345 | es-errors: 1.3.0 2346 | is-data-view: 1.0.2 2347 | 2348 | data-view-byte-offset@1.0.1: 2349 | dependencies: 2350 | call-bound: 1.0.3 2351 | es-errors: 1.3.0 2352 | is-data-view: 1.0.2 2353 | 2354 | debug@4.4.0: 2355 | dependencies: 2356 | ms: 2.1.3 2357 | 2358 | deep-eql@4.1.4: 2359 | dependencies: 2360 | type-detect: 4.1.0 2361 | 2362 | deep-is@0.1.4: {} 2363 | 2364 | define-data-property@1.1.4: 2365 | dependencies: 2366 | es-define-property: 1.0.1 2367 | es-errors: 1.3.0 2368 | gopd: 1.2.0 2369 | 2370 | define-properties@1.2.1: 2371 | dependencies: 2372 | define-data-property: 1.1.4 2373 | has-property-descriptors: 1.0.2 2374 | object-keys: 1.1.1 2375 | 2376 | dir-glob@3.0.1: 2377 | dependencies: 2378 | path-type: 4.0.0 2379 | 2380 | doctrine@3.0.0: 2381 | dependencies: 2382 | esutils: 2.0.3 2383 | 2384 | dunder-proto@1.0.1: 2385 | dependencies: 2386 | call-bind-apply-helpers: 1.0.2 2387 | es-errors: 1.3.0 2388 | gopd: 1.2.0 2389 | 2390 | eastasianwidth@0.2.0: {} 2391 | 2392 | emoji-regex@8.0.0: {} 2393 | 2394 | emoji-regex@9.2.2: {} 2395 | 2396 | error-ex@1.3.2: 2397 | dependencies: 2398 | is-arrayish: 0.2.1 2399 | 2400 | es-abstract@1.23.9: 2401 | dependencies: 2402 | array-buffer-byte-length: 1.0.2 2403 | arraybuffer.prototype.slice: 1.0.4 2404 | available-typed-arrays: 1.0.7 2405 | call-bind: 1.0.8 2406 | call-bound: 1.0.3 2407 | data-view-buffer: 1.0.2 2408 | data-view-byte-length: 1.0.2 2409 | data-view-byte-offset: 1.0.1 2410 | es-define-property: 1.0.1 2411 | es-errors: 1.3.0 2412 | es-object-atoms: 1.1.1 2413 | es-set-tostringtag: 2.1.0 2414 | es-to-primitive: 1.3.0 2415 | function.prototype.name: 1.1.8 2416 | get-intrinsic: 1.3.0 2417 | get-proto: 1.0.1 2418 | get-symbol-description: 1.1.0 2419 | globalthis: 1.0.4 2420 | gopd: 1.2.0 2421 | has-property-descriptors: 1.0.2 2422 | has-proto: 1.2.0 2423 | has-symbols: 1.1.0 2424 | hasown: 2.0.2 2425 | internal-slot: 1.1.0 2426 | is-array-buffer: 3.0.5 2427 | is-callable: 1.2.7 2428 | is-data-view: 1.0.2 2429 | is-regex: 1.2.1 2430 | is-shared-array-buffer: 1.0.4 2431 | is-string: 1.1.1 2432 | is-typed-array: 1.1.15 2433 | is-weakref: 1.1.1 2434 | math-intrinsics: 1.1.0 2435 | object-inspect: 1.13.4 2436 | object-keys: 1.1.1 2437 | object.assign: 4.1.7 2438 | own-keys: 1.0.1 2439 | regexp.prototype.flags: 1.5.4 2440 | safe-array-concat: 1.1.3 2441 | safe-push-apply: 1.0.0 2442 | safe-regex-test: 1.1.0 2443 | set-proto: 1.0.0 2444 | string.prototype.trim: 1.2.10 2445 | string.prototype.trimend: 1.0.9 2446 | string.prototype.trimstart: 1.0.8 2447 | typed-array-buffer: 1.0.3 2448 | typed-array-byte-length: 1.0.3 2449 | typed-array-byte-offset: 1.0.4 2450 | typed-array-length: 1.0.7 2451 | unbox-primitive: 1.1.0 2452 | which-typed-array: 1.1.18 2453 | 2454 | es-define-property@1.0.1: {} 2455 | 2456 | es-errors@1.3.0: {} 2457 | 2458 | es-object-atoms@1.1.1: 2459 | dependencies: 2460 | es-errors: 1.3.0 2461 | 2462 | es-set-tostringtag@2.1.0: 2463 | dependencies: 2464 | es-errors: 1.3.0 2465 | get-intrinsic: 1.3.0 2466 | has-tostringtag: 1.0.2 2467 | hasown: 2.0.2 2468 | 2469 | es-to-primitive@1.3.0: 2470 | dependencies: 2471 | is-callable: 1.2.7 2472 | is-date-object: 1.1.0 2473 | is-symbol: 1.1.1 2474 | 2475 | esbuild-android-64@0.14.54: 2476 | optional: true 2477 | 2478 | esbuild-android-64@0.15.18: 2479 | optional: true 2480 | 2481 | esbuild-android-arm64@0.14.54: 2482 | optional: true 2483 | 2484 | esbuild-android-arm64@0.15.18: 2485 | optional: true 2486 | 2487 | esbuild-darwin-64@0.14.54: 2488 | optional: true 2489 | 2490 | esbuild-darwin-64@0.15.18: 2491 | optional: true 2492 | 2493 | esbuild-darwin-arm64@0.14.54: 2494 | optional: true 2495 | 2496 | esbuild-darwin-arm64@0.15.18: 2497 | optional: true 2498 | 2499 | esbuild-freebsd-64@0.14.54: 2500 | optional: true 2501 | 2502 | esbuild-freebsd-64@0.15.18: 2503 | optional: true 2504 | 2505 | esbuild-freebsd-arm64@0.14.54: 2506 | optional: true 2507 | 2508 | esbuild-freebsd-arm64@0.15.18: 2509 | optional: true 2510 | 2511 | esbuild-linux-32@0.14.54: 2512 | optional: true 2513 | 2514 | esbuild-linux-32@0.15.18: 2515 | optional: true 2516 | 2517 | esbuild-linux-64@0.14.54: 2518 | optional: true 2519 | 2520 | esbuild-linux-64@0.15.18: 2521 | optional: true 2522 | 2523 | esbuild-linux-arm64@0.14.54: 2524 | optional: true 2525 | 2526 | esbuild-linux-arm64@0.15.18: 2527 | optional: true 2528 | 2529 | esbuild-linux-arm@0.14.54: 2530 | optional: true 2531 | 2532 | esbuild-linux-arm@0.15.18: 2533 | optional: true 2534 | 2535 | esbuild-linux-mips64le@0.14.54: 2536 | optional: true 2537 | 2538 | esbuild-linux-mips64le@0.15.18: 2539 | optional: true 2540 | 2541 | esbuild-linux-ppc64le@0.14.54: 2542 | optional: true 2543 | 2544 | esbuild-linux-ppc64le@0.15.18: 2545 | optional: true 2546 | 2547 | esbuild-linux-riscv64@0.14.54: 2548 | optional: true 2549 | 2550 | esbuild-linux-riscv64@0.15.18: 2551 | optional: true 2552 | 2553 | esbuild-linux-s390x@0.14.54: 2554 | optional: true 2555 | 2556 | esbuild-linux-s390x@0.15.18: 2557 | optional: true 2558 | 2559 | esbuild-netbsd-64@0.14.54: 2560 | optional: true 2561 | 2562 | esbuild-netbsd-64@0.15.18: 2563 | optional: true 2564 | 2565 | esbuild-openbsd-64@0.14.54: 2566 | optional: true 2567 | 2568 | esbuild-openbsd-64@0.15.18: 2569 | optional: true 2570 | 2571 | esbuild-sunos-64@0.14.54: 2572 | optional: true 2573 | 2574 | esbuild-sunos-64@0.15.18: 2575 | optional: true 2576 | 2577 | esbuild-windows-32@0.14.54: 2578 | optional: true 2579 | 2580 | esbuild-windows-32@0.15.18: 2581 | optional: true 2582 | 2583 | esbuild-windows-64@0.14.54: 2584 | optional: true 2585 | 2586 | esbuild-windows-64@0.15.18: 2587 | optional: true 2588 | 2589 | esbuild-windows-arm64@0.14.54: 2590 | optional: true 2591 | 2592 | esbuild-windows-arm64@0.15.18: 2593 | optional: true 2594 | 2595 | esbuild@0.14.54: 2596 | optionalDependencies: 2597 | '@esbuild/linux-loong64': 0.14.54 2598 | esbuild-android-64: 0.14.54 2599 | esbuild-android-arm64: 0.14.54 2600 | esbuild-darwin-64: 0.14.54 2601 | esbuild-darwin-arm64: 0.14.54 2602 | esbuild-freebsd-64: 0.14.54 2603 | esbuild-freebsd-arm64: 0.14.54 2604 | esbuild-linux-32: 0.14.54 2605 | esbuild-linux-64: 0.14.54 2606 | esbuild-linux-arm: 0.14.54 2607 | esbuild-linux-arm64: 0.14.54 2608 | esbuild-linux-mips64le: 0.14.54 2609 | esbuild-linux-ppc64le: 0.14.54 2610 | esbuild-linux-riscv64: 0.14.54 2611 | esbuild-linux-s390x: 0.14.54 2612 | esbuild-netbsd-64: 0.14.54 2613 | esbuild-openbsd-64: 0.14.54 2614 | esbuild-sunos-64: 0.14.54 2615 | esbuild-windows-32: 0.14.54 2616 | esbuild-windows-64: 0.14.54 2617 | esbuild-windows-arm64: 0.14.54 2618 | 2619 | esbuild@0.15.18: 2620 | optionalDependencies: 2621 | '@esbuild/android-arm': 0.15.18 2622 | '@esbuild/linux-loong64': 0.15.18 2623 | esbuild-android-64: 0.15.18 2624 | esbuild-android-arm64: 0.15.18 2625 | esbuild-darwin-64: 0.15.18 2626 | esbuild-darwin-arm64: 0.15.18 2627 | esbuild-freebsd-64: 0.15.18 2628 | esbuild-freebsd-arm64: 0.15.18 2629 | esbuild-linux-32: 0.15.18 2630 | esbuild-linux-64: 0.15.18 2631 | esbuild-linux-arm: 0.15.18 2632 | esbuild-linux-arm64: 0.15.18 2633 | esbuild-linux-mips64le: 0.15.18 2634 | esbuild-linux-ppc64le: 0.15.18 2635 | esbuild-linux-riscv64: 0.15.18 2636 | esbuild-linux-s390x: 0.15.18 2637 | esbuild-netbsd-64: 0.15.18 2638 | esbuild-openbsd-64: 0.15.18 2639 | esbuild-sunos-64: 0.15.18 2640 | esbuild-windows-32: 0.15.18 2641 | esbuild-windows-64: 0.15.18 2642 | esbuild-windows-arm64: 0.15.18 2643 | 2644 | escape-string-regexp@1.0.5: {} 2645 | 2646 | escape-string-regexp@4.0.0: {} 2647 | 2648 | eslint-config-prettier@8.5.0(eslint@8.23.0): 2649 | dependencies: 2650 | eslint: 8.23.0 2651 | 2652 | eslint-plugin-unicorn@42.0.0(eslint@8.23.0): 2653 | dependencies: 2654 | '@babel/helper-validator-identifier': 7.25.9 2655 | ci-info: 3.9.0 2656 | clean-regexp: 1.0.0 2657 | eslint: 8.23.0 2658 | eslint-utils: 3.0.0(eslint@8.23.0) 2659 | esquery: 1.6.0 2660 | indent-string: 4.0.0 2661 | is-builtin-module: 3.2.1 2662 | lodash: 4.17.21 2663 | pluralize: 8.0.0 2664 | read-pkg-up: 7.0.1 2665 | regexp-tree: 0.1.27 2666 | safe-regex: 2.1.1 2667 | semver: 7.7.1 2668 | strip-indent: 3.0.0 2669 | 2670 | eslint-scope@5.1.1: 2671 | dependencies: 2672 | esrecurse: 4.3.0 2673 | estraverse: 4.3.0 2674 | 2675 | eslint-scope@7.2.2: 2676 | dependencies: 2677 | esrecurse: 4.3.0 2678 | estraverse: 5.3.0 2679 | 2680 | eslint-utils@3.0.0(eslint@8.23.0): 2681 | dependencies: 2682 | eslint: 8.23.0 2683 | eslint-visitor-keys: 2.1.0 2684 | 2685 | eslint-visitor-keys@2.1.0: {} 2686 | 2687 | eslint-visitor-keys@3.4.3: {} 2688 | 2689 | eslint@8.23.0: 2690 | dependencies: 2691 | '@eslint/eslintrc': 1.4.1 2692 | '@humanwhocodes/config-array': 0.10.7 2693 | '@humanwhocodes/gitignore-to-minimatch': 1.0.2 2694 | '@humanwhocodes/module-importer': 1.0.1 2695 | ajv: 6.12.6 2696 | chalk: 4.1.2 2697 | cross-spawn: 7.0.6 2698 | debug: 4.4.0 2699 | doctrine: 3.0.0 2700 | escape-string-regexp: 4.0.0 2701 | eslint-scope: 7.2.2 2702 | eslint-utils: 3.0.0(eslint@8.23.0) 2703 | eslint-visitor-keys: 3.4.3 2704 | espree: 9.6.1 2705 | esquery: 1.6.0 2706 | esutils: 2.0.3 2707 | fast-deep-equal: 3.1.3 2708 | file-entry-cache: 6.0.1 2709 | find-up: 5.0.0 2710 | functional-red-black-tree: 1.0.1 2711 | glob-parent: 6.0.2 2712 | globals: 13.24.0 2713 | globby: 11.1.0 2714 | grapheme-splitter: 1.0.4 2715 | ignore: 5.3.2 2716 | import-fresh: 3.3.1 2717 | imurmurhash: 0.1.4 2718 | is-glob: 4.0.3 2719 | js-yaml: 4.1.0 2720 | json-stable-stringify-without-jsonify: 1.0.1 2721 | levn: 0.4.1 2722 | lodash.merge: 4.6.2 2723 | minimatch: 3.1.2 2724 | natural-compare: 1.4.0 2725 | optionator: 0.9.4 2726 | regexpp: 3.2.0 2727 | strip-ansi: 6.0.1 2728 | strip-json-comments: 3.1.1 2729 | text-table: 0.2.0 2730 | transitivePeerDependencies: 2731 | - supports-color 2732 | 2733 | espree@9.6.1: 2734 | dependencies: 2735 | acorn: 8.14.0 2736 | acorn-jsx: 5.3.2(acorn@8.14.0) 2737 | eslint-visitor-keys: 3.4.3 2738 | 2739 | esquery@1.6.0: 2740 | dependencies: 2741 | estraverse: 5.3.0 2742 | 2743 | esrecurse@4.3.0: 2744 | dependencies: 2745 | estraverse: 5.3.0 2746 | 2747 | estraverse@4.3.0: {} 2748 | 2749 | estraverse@5.3.0: {} 2750 | 2751 | esutils@2.0.3: {} 2752 | 2753 | execa@5.1.1: 2754 | dependencies: 2755 | cross-spawn: 7.0.6 2756 | get-stream: 6.0.1 2757 | human-signals: 2.1.0 2758 | is-stream: 2.0.1 2759 | merge-stream: 2.0.0 2760 | npm-run-path: 4.0.1 2761 | onetime: 5.1.2 2762 | signal-exit: 3.0.7 2763 | strip-final-newline: 2.0.0 2764 | 2765 | fast-deep-equal@3.1.3: {} 2766 | 2767 | fast-glob@3.3.3: 2768 | dependencies: 2769 | '@nodelib/fs.stat': 2.0.5 2770 | '@nodelib/fs.walk': 1.2.8 2771 | glob-parent: 5.1.2 2772 | merge2: 1.4.1 2773 | micromatch: 4.0.8 2774 | 2775 | fast-json-stable-stringify@2.1.0: {} 2776 | 2777 | fast-levenshtein@2.0.6: {} 2778 | 2779 | fastq@1.19.0: 2780 | dependencies: 2781 | reusify: 1.0.4 2782 | 2783 | file-entry-cache@6.0.1: 2784 | dependencies: 2785 | flat-cache: 3.2.0 2786 | 2787 | fill-range@7.1.1: 2788 | dependencies: 2789 | to-regex-range: 5.0.1 2790 | 2791 | find-up@4.1.0: 2792 | dependencies: 2793 | locate-path: 5.0.0 2794 | path-exists: 4.0.0 2795 | 2796 | find-up@5.0.0: 2797 | dependencies: 2798 | locate-path: 6.0.0 2799 | path-exists: 4.0.0 2800 | 2801 | flat-cache@3.2.0: 2802 | dependencies: 2803 | flatted: 3.3.3 2804 | keyv: 4.5.4 2805 | rimraf: 3.0.2 2806 | 2807 | flatted@3.3.3: {} 2808 | 2809 | for-each@0.3.5: 2810 | dependencies: 2811 | is-callable: 1.2.7 2812 | 2813 | foreground-child@3.3.1: 2814 | dependencies: 2815 | cross-spawn: 7.0.6 2816 | signal-exit: 4.1.0 2817 | 2818 | fs.realpath@1.0.0: {} 2819 | 2820 | fsevents@2.3.3: 2821 | optional: true 2822 | 2823 | function-bind@1.1.2: {} 2824 | 2825 | function.prototype.name@1.1.8: 2826 | dependencies: 2827 | call-bind: 1.0.8 2828 | call-bound: 1.0.3 2829 | define-properties: 1.2.1 2830 | functions-have-names: 1.2.3 2831 | hasown: 2.0.2 2832 | is-callable: 1.2.7 2833 | 2834 | functional-red-black-tree@1.0.1: {} 2835 | 2836 | functions-have-names@1.2.3: {} 2837 | 2838 | get-func-name@2.0.2: {} 2839 | 2840 | get-intrinsic@1.3.0: 2841 | dependencies: 2842 | call-bind-apply-helpers: 1.0.2 2843 | es-define-property: 1.0.1 2844 | es-errors: 1.3.0 2845 | es-object-atoms: 1.1.1 2846 | function-bind: 1.1.2 2847 | get-proto: 1.0.1 2848 | gopd: 1.2.0 2849 | has-symbols: 1.1.0 2850 | hasown: 2.0.2 2851 | math-intrinsics: 1.1.0 2852 | 2853 | get-proto@1.0.1: 2854 | dependencies: 2855 | dunder-proto: 1.0.1 2856 | es-object-atoms: 1.1.1 2857 | 2858 | get-stream@6.0.1: {} 2859 | 2860 | get-symbol-description@1.1.0: 2861 | dependencies: 2862 | call-bound: 1.0.3 2863 | es-errors: 1.3.0 2864 | get-intrinsic: 1.3.0 2865 | 2866 | glob-parent@5.1.2: 2867 | dependencies: 2868 | is-glob: 4.0.3 2869 | 2870 | glob-parent@6.0.2: 2871 | dependencies: 2872 | is-glob: 4.0.3 2873 | 2874 | glob@10.4.5: 2875 | dependencies: 2876 | foreground-child: 3.3.1 2877 | jackspeak: 3.4.3 2878 | minimatch: 9.0.5 2879 | minipass: 7.1.2 2880 | package-json-from-dist: 1.0.1 2881 | path-scurry: 1.11.1 2882 | 2883 | glob@7.2.3: 2884 | dependencies: 2885 | fs.realpath: 1.0.0 2886 | inflight: 1.0.6 2887 | inherits: 2.0.4 2888 | minimatch: 3.1.2 2889 | once: 1.4.0 2890 | path-is-absolute: 1.0.1 2891 | 2892 | globals@13.24.0: 2893 | dependencies: 2894 | type-fest: 0.20.2 2895 | 2896 | globalthis@1.0.4: 2897 | dependencies: 2898 | define-properties: 1.2.1 2899 | gopd: 1.2.0 2900 | 2901 | globby@11.1.0: 2902 | dependencies: 2903 | array-union: 2.1.0 2904 | dir-glob: 3.0.1 2905 | fast-glob: 3.3.3 2906 | ignore: 5.3.2 2907 | merge2: 1.4.1 2908 | slash: 3.0.0 2909 | 2910 | gopd@1.2.0: {} 2911 | 2912 | graceful-fs@4.2.11: {} 2913 | 2914 | grapheme-splitter@1.0.4: {} 2915 | 2916 | has-bigints@1.1.0: {} 2917 | 2918 | has-flag@3.0.0: {} 2919 | 2920 | has-flag@4.0.0: {} 2921 | 2922 | has-property-descriptors@1.0.2: 2923 | dependencies: 2924 | es-define-property: 1.0.1 2925 | 2926 | has-proto@1.2.0: 2927 | dependencies: 2928 | dunder-proto: 1.0.1 2929 | 2930 | has-symbols@1.1.0: {} 2931 | 2932 | has-tostringtag@1.0.2: 2933 | dependencies: 2934 | has-symbols: 1.1.0 2935 | 2936 | hasown@2.0.2: 2937 | dependencies: 2938 | function-bind: 1.1.2 2939 | 2940 | hosted-git-info@2.8.9: {} 2941 | 2942 | human-signals@2.1.0: {} 2943 | 2944 | husky@8.0.1: {} 2945 | 2946 | ignore@5.3.2: {} 2947 | 2948 | import-fresh@3.3.1: 2949 | dependencies: 2950 | parent-module: 1.0.1 2951 | resolve-from: 4.0.0 2952 | 2953 | imurmurhash@0.1.4: {} 2954 | 2955 | indent-string@4.0.0: {} 2956 | 2957 | inflight@1.0.6: 2958 | dependencies: 2959 | once: 1.4.0 2960 | wrappy: 1.0.2 2961 | 2962 | inherits@2.0.4: {} 2963 | 2964 | internal-slot@1.1.0: 2965 | dependencies: 2966 | es-errors: 1.3.0 2967 | hasown: 2.0.2 2968 | side-channel: 1.1.0 2969 | 2970 | is-array-buffer@3.0.5: 2971 | dependencies: 2972 | call-bind: 1.0.8 2973 | call-bound: 1.0.3 2974 | get-intrinsic: 1.3.0 2975 | 2976 | is-arrayish@0.2.1: {} 2977 | 2978 | is-async-function@2.1.1: 2979 | dependencies: 2980 | async-function: 1.0.0 2981 | call-bound: 1.0.3 2982 | get-proto: 1.0.1 2983 | has-tostringtag: 1.0.2 2984 | safe-regex-test: 1.1.0 2985 | 2986 | is-bigint@1.1.0: 2987 | dependencies: 2988 | has-bigints: 1.1.0 2989 | 2990 | is-binary-path@2.1.0: 2991 | dependencies: 2992 | binary-extensions: 2.3.0 2993 | 2994 | is-boolean-object@1.2.2: 2995 | dependencies: 2996 | call-bound: 1.0.3 2997 | has-tostringtag: 1.0.2 2998 | 2999 | is-builtin-module@3.2.1: 3000 | dependencies: 3001 | builtin-modules: 3.3.0 3002 | 3003 | is-callable@1.2.7: {} 3004 | 3005 | is-core-module@2.16.1: 3006 | dependencies: 3007 | hasown: 2.0.2 3008 | 3009 | is-data-view@1.0.2: 3010 | dependencies: 3011 | call-bound: 1.0.3 3012 | get-intrinsic: 1.3.0 3013 | is-typed-array: 1.1.15 3014 | 3015 | is-date-object@1.1.0: 3016 | dependencies: 3017 | call-bound: 1.0.3 3018 | has-tostringtag: 1.0.2 3019 | 3020 | is-extglob@2.1.1: {} 3021 | 3022 | is-finalizationregistry@1.1.1: 3023 | dependencies: 3024 | call-bound: 1.0.3 3025 | 3026 | is-fullwidth-code-point@3.0.0: {} 3027 | 3028 | is-generator-function@1.1.0: 3029 | dependencies: 3030 | call-bound: 1.0.3 3031 | get-proto: 1.0.1 3032 | has-tostringtag: 1.0.2 3033 | safe-regex-test: 1.1.0 3034 | 3035 | is-glob@4.0.3: 3036 | dependencies: 3037 | is-extglob: 2.1.1 3038 | 3039 | is-map@2.0.3: {} 3040 | 3041 | is-number-object@1.1.1: 3042 | dependencies: 3043 | call-bound: 1.0.3 3044 | has-tostringtag: 1.0.2 3045 | 3046 | is-number@7.0.0: {} 3047 | 3048 | is-regex@1.2.1: 3049 | dependencies: 3050 | call-bound: 1.0.3 3051 | gopd: 1.2.0 3052 | has-tostringtag: 1.0.2 3053 | hasown: 2.0.2 3054 | 3055 | is-set@2.0.3: {} 3056 | 3057 | is-shared-array-buffer@1.0.4: 3058 | dependencies: 3059 | call-bound: 1.0.3 3060 | 3061 | is-stream@2.0.1: {} 3062 | 3063 | is-string@1.1.1: 3064 | dependencies: 3065 | call-bound: 1.0.3 3066 | has-tostringtag: 1.0.2 3067 | 3068 | is-symbol@1.1.1: 3069 | dependencies: 3070 | call-bound: 1.0.3 3071 | has-symbols: 1.1.0 3072 | safe-regex-test: 1.1.0 3073 | 3074 | is-typed-array@1.1.15: 3075 | dependencies: 3076 | which-typed-array: 1.1.18 3077 | 3078 | is-weakmap@2.0.2: {} 3079 | 3080 | is-weakref@1.1.1: 3081 | dependencies: 3082 | call-bound: 1.0.3 3083 | 3084 | is-weakset@2.0.4: 3085 | dependencies: 3086 | call-bound: 1.0.3 3087 | get-intrinsic: 1.3.0 3088 | 3089 | isarray@2.0.5: {} 3090 | 3091 | isexe@2.0.0: {} 3092 | 3093 | jackspeak@3.4.3: 3094 | dependencies: 3095 | '@isaacs/cliui': 8.0.2 3096 | optionalDependencies: 3097 | '@pkgjs/parseargs': 0.11.0 3098 | 3099 | joycon@3.1.1: {} 3100 | 3101 | js-tokens@4.0.0: {} 3102 | 3103 | js-yaml@4.1.0: 3104 | dependencies: 3105 | argparse: 2.0.1 3106 | 3107 | json-buffer@3.0.1: {} 3108 | 3109 | json-parse-better-errors@1.0.2: {} 3110 | 3111 | json-parse-even-better-errors@2.3.1: {} 3112 | 3113 | json-schema-traverse@0.4.1: {} 3114 | 3115 | json-stable-stringify-without-jsonify@1.0.1: {} 3116 | 3117 | keyv@4.5.4: 3118 | dependencies: 3119 | json-buffer: 3.0.1 3120 | 3121 | levn@0.4.1: 3122 | dependencies: 3123 | prelude-ls: 1.2.1 3124 | type-check: 0.4.0 3125 | 3126 | lilconfig@2.1.0: {} 3127 | 3128 | lines-and-columns@1.2.4: {} 3129 | 3130 | load-json-file@4.0.0: 3131 | dependencies: 3132 | graceful-fs: 4.2.11 3133 | parse-json: 4.0.0 3134 | pify: 3.0.0 3135 | strip-bom: 3.0.0 3136 | 3137 | load-tsconfig@0.2.5: {} 3138 | 3139 | local-pkg@0.4.3: {} 3140 | 3141 | locate-path@5.0.0: 3142 | dependencies: 3143 | p-locate: 4.1.0 3144 | 3145 | locate-path@6.0.0: 3146 | dependencies: 3147 | p-locate: 5.0.0 3148 | 3149 | lodash.merge@4.6.2: {} 3150 | 3151 | lodash.sortby@4.7.0: {} 3152 | 3153 | lodash@4.17.21: {} 3154 | 3155 | loupe@2.3.7: 3156 | dependencies: 3157 | get-func-name: 2.0.2 3158 | 3159 | lru-cache@10.4.3: {} 3160 | 3161 | math-intrinsics@1.1.0: {} 3162 | 3163 | memorystream@0.3.1: {} 3164 | 3165 | merge-stream@2.0.0: {} 3166 | 3167 | merge2@1.4.1: {} 3168 | 3169 | micromatch@4.0.8: 3170 | dependencies: 3171 | braces: 3.0.3 3172 | picomatch: 2.3.1 3173 | 3174 | mimic-fn@2.1.0: {} 3175 | 3176 | min-indent@1.0.1: {} 3177 | 3178 | minimatch@3.1.2: 3179 | dependencies: 3180 | brace-expansion: 1.1.11 3181 | 3182 | minimatch@9.0.5: 3183 | dependencies: 3184 | brace-expansion: 2.0.1 3185 | 3186 | minipass@7.1.2: {} 3187 | 3188 | ms@2.1.3: {} 3189 | 3190 | mz@2.7.0: 3191 | dependencies: 3192 | any-promise: 1.3.0 3193 | object-assign: 4.1.1 3194 | thenify-all: 1.6.0 3195 | 3196 | nano-staged@0.8.0: 3197 | dependencies: 3198 | picocolors: 1.1.1 3199 | 3200 | nanoid@3.3.8: {} 3201 | 3202 | natural-compare@1.4.0: {} 3203 | 3204 | nice-try@1.0.5: {} 3205 | 3206 | normalize-package-data@2.5.0: 3207 | dependencies: 3208 | hosted-git-info: 2.8.9 3209 | resolve: 1.22.10 3210 | semver: 5.7.2 3211 | validate-npm-package-license: 3.0.4 3212 | 3213 | normalize-path@3.0.0: {} 3214 | 3215 | npm-run-all@4.1.5: 3216 | dependencies: 3217 | ansi-styles: 3.2.1 3218 | chalk: 2.4.2 3219 | cross-spawn: 6.0.6 3220 | memorystream: 0.3.1 3221 | minimatch: 3.1.2 3222 | pidtree: 0.3.1 3223 | read-pkg: 3.0.0 3224 | shell-quote: 1.8.2 3225 | string.prototype.padend: 3.1.6 3226 | 3227 | npm-run-path@4.0.1: 3228 | dependencies: 3229 | path-key: 3.1.1 3230 | 3231 | object-assign@4.1.1: {} 3232 | 3233 | object-inspect@1.13.4: {} 3234 | 3235 | object-keys@1.1.1: {} 3236 | 3237 | object.assign@4.1.7: 3238 | dependencies: 3239 | call-bind: 1.0.8 3240 | call-bound: 1.0.3 3241 | define-properties: 1.2.1 3242 | es-object-atoms: 1.1.1 3243 | has-symbols: 1.1.0 3244 | object-keys: 1.1.1 3245 | 3246 | once@1.4.0: 3247 | dependencies: 3248 | wrappy: 1.0.2 3249 | 3250 | onetime@5.1.2: 3251 | dependencies: 3252 | mimic-fn: 2.1.0 3253 | 3254 | optionator@0.9.4: 3255 | dependencies: 3256 | deep-is: 0.1.4 3257 | fast-levenshtein: 2.0.6 3258 | levn: 0.4.1 3259 | prelude-ls: 1.2.1 3260 | type-check: 0.4.0 3261 | word-wrap: 1.2.5 3262 | 3263 | own-keys@1.0.1: 3264 | dependencies: 3265 | get-intrinsic: 1.3.0 3266 | object-keys: 1.1.1 3267 | safe-push-apply: 1.0.0 3268 | 3269 | p-limit@2.3.0: 3270 | dependencies: 3271 | p-try: 2.2.0 3272 | 3273 | p-limit@3.1.0: 3274 | dependencies: 3275 | yocto-queue: 0.1.0 3276 | 3277 | p-locate@4.1.0: 3278 | dependencies: 3279 | p-limit: 2.3.0 3280 | 3281 | p-locate@5.0.0: 3282 | dependencies: 3283 | p-limit: 3.1.0 3284 | 3285 | p-try@2.2.0: {} 3286 | 3287 | package-json-from-dist@1.0.1: {} 3288 | 3289 | parent-module@1.0.1: 3290 | dependencies: 3291 | callsites: 3.1.0 3292 | 3293 | parse-json@4.0.0: 3294 | dependencies: 3295 | error-ex: 1.3.2 3296 | json-parse-better-errors: 1.0.2 3297 | 3298 | parse-json@5.2.0: 3299 | dependencies: 3300 | '@babel/code-frame': 7.26.2 3301 | error-ex: 1.3.2 3302 | json-parse-even-better-errors: 2.3.1 3303 | lines-and-columns: 1.2.4 3304 | 3305 | path-exists@4.0.0: {} 3306 | 3307 | path-is-absolute@1.0.1: {} 3308 | 3309 | path-key@2.0.1: {} 3310 | 3311 | path-key@3.1.1: {} 3312 | 3313 | path-parse@1.0.7: {} 3314 | 3315 | path-scurry@1.11.1: 3316 | dependencies: 3317 | lru-cache: 10.4.3 3318 | minipass: 7.1.2 3319 | 3320 | path-type@3.0.0: 3321 | dependencies: 3322 | pify: 3.0.0 3323 | 3324 | path-type@4.0.0: {} 3325 | 3326 | pathval@1.1.1: {} 3327 | 3328 | picocolors@1.1.1: {} 3329 | 3330 | picomatch@2.3.1: {} 3331 | 3332 | pidtree@0.3.1: {} 3333 | 3334 | pify@3.0.0: {} 3335 | 3336 | pirates@4.0.6: {} 3337 | 3338 | pluralize@8.0.0: {} 3339 | 3340 | possible-typed-array-names@1.1.0: {} 3341 | 3342 | postcss-load-config@3.1.4(postcss@8.5.3): 3343 | dependencies: 3344 | lilconfig: 2.1.0 3345 | yaml: 1.10.2 3346 | optionalDependencies: 3347 | postcss: 8.5.3 3348 | 3349 | postcss@8.5.3: 3350 | dependencies: 3351 | nanoid: 3.3.8 3352 | picocolors: 1.1.1 3353 | source-map-js: 1.2.1 3354 | 3355 | prelude-ls@1.2.1: {} 3356 | 3357 | punycode@2.3.1: {} 3358 | 3359 | queue-microtask@1.2.3: {} 3360 | 3361 | read-pkg-up@7.0.1: 3362 | dependencies: 3363 | find-up: 4.1.0 3364 | read-pkg: 5.2.0 3365 | type-fest: 0.8.1 3366 | 3367 | read-pkg@3.0.0: 3368 | dependencies: 3369 | load-json-file: 4.0.0 3370 | normalize-package-data: 2.5.0 3371 | path-type: 3.0.0 3372 | 3373 | read-pkg@5.2.0: 3374 | dependencies: 3375 | '@types/normalize-package-data': 2.4.4 3376 | normalize-package-data: 2.5.0 3377 | parse-json: 5.2.0 3378 | type-fest: 0.6.0 3379 | 3380 | readdirp@3.6.0: 3381 | dependencies: 3382 | picomatch: 2.3.1 3383 | 3384 | reflect.getprototypeof@1.0.10: 3385 | dependencies: 3386 | call-bind: 1.0.8 3387 | define-properties: 1.2.1 3388 | es-abstract: 1.23.9 3389 | es-errors: 1.3.0 3390 | es-object-atoms: 1.1.1 3391 | get-intrinsic: 1.3.0 3392 | get-proto: 1.0.1 3393 | which-builtin-type: 1.2.1 3394 | 3395 | regexp-tree@0.1.27: {} 3396 | 3397 | regexp.prototype.flags@1.5.4: 3398 | dependencies: 3399 | call-bind: 1.0.8 3400 | define-properties: 1.2.1 3401 | es-errors: 1.3.0 3402 | get-proto: 1.0.1 3403 | gopd: 1.2.0 3404 | set-function-name: 2.0.2 3405 | 3406 | regexpp@3.2.0: {} 3407 | 3408 | resolve-from@4.0.0: {} 3409 | 3410 | resolve-from@5.0.0: {} 3411 | 3412 | resolve@1.22.10: 3413 | dependencies: 3414 | is-core-module: 2.16.1 3415 | path-parse: 1.0.7 3416 | supports-preserve-symlinks-flag: 1.0.0 3417 | 3418 | reusify@1.0.4: {} 3419 | 3420 | rimraf@3.0.2: 3421 | dependencies: 3422 | glob: 7.2.3 3423 | 3424 | rollup@2.77.3: 3425 | optionalDependencies: 3426 | fsevents: 2.3.3 3427 | 3428 | rollup@2.79.2: 3429 | optionalDependencies: 3430 | fsevents: 2.3.3 3431 | 3432 | run-parallel@1.2.0: 3433 | dependencies: 3434 | queue-microtask: 1.2.3 3435 | 3436 | safe-array-concat@1.1.3: 3437 | dependencies: 3438 | call-bind: 1.0.8 3439 | call-bound: 1.0.3 3440 | get-intrinsic: 1.3.0 3441 | has-symbols: 1.1.0 3442 | isarray: 2.0.5 3443 | 3444 | safe-push-apply@1.0.0: 3445 | dependencies: 3446 | es-errors: 1.3.0 3447 | isarray: 2.0.5 3448 | 3449 | safe-regex-test@1.1.0: 3450 | dependencies: 3451 | call-bound: 1.0.3 3452 | es-errors: 1.3.0 3453 | is-regex: 1.2.1 3454 | 3455 | safe-regex@2.1.1: 3456 | dependencies: 3457 | regexp-tree: 0.1.27 3458 | 3459 | semver@5.7.2: {} 3460 | 3461 | semver@7.7.1: {} 3462 | 3463 | set-function-length@1.2.2: 3464 | dependencies: 3465 | define-data-property: 1.1.4 3466 | es-errors: 1.3.0 3467 | function-bind: 1.1.2 3468 | get-intrinsic: 1.3.0 3469 | gopd: 1.2.0 3470 | has-property-descriptors: 1.0.2 3471 | 3472 | set-function-name@2.0.2: 3473 | dependencies: 3474 | define-data-property: 1.1.4 3475 | es-errors: 1.3.0 3476 | functions-have-names: 1.2.3 3477 | has-property-descriptors: 1.0.2 3478 | 3479 | set-proto@1.0.0: 3480 | dependencies: 3481 | dunder-proto: 1.0.1 3482 | es-errors: 1.3.0 3483 | es-object-atoms: 1.1.1 3484 | 3485 | shebang-command@1.2.0: 3486 | dependencies: 3487 | shebang-regex: 1.0.0 3488 | 3489 | shebang-command@2.0.0: 3490 | dependencies: 3491 | shebang-regex: 3.0.0 3492 | 3493 | shebang-regex@1.0.0: {} 3494 | 3495 | shebang-regex@3.0.0: {} 3496 | 3497 | shell-quote@1.8.2: {} 3498 | 3499 | side-channel-list@1.0.0: 3500 | dependencies: 3501 | es-errors: 1.3.0 3502 | object-inspect: 1.13.4 3503 | 3504 | side-channel-map@1.0.1: 3505 | dependencies: 3506 | call-bound: 1.0.3 3507 | es-errors: 1.3.0 3508 | get-intrinsic: 1.3.0 3509 | object-inspect: 1.13.4 3510 | 3511 | side-channel-weakmap@1.0.2: 3512 | dependencies: 3513 | call-bound: 1.0.3 3514 | es-errors: 1.3.0 3515 | get-intrinsic: 1.3.0 3516 | object-inspect: 1.13.4 3517 | side-channel-map: 1.0.1 3518 | 3519 | side-channel@1.1.0: 3520 | dependencies: 3521 | es-errors: 1.3.0 3522 | object-inspect: 1.13.4 3523 | side-channel-list: 1.0.0 3524 | side-channel-map: 1.0.1 3525 | side-channel-weakmap: 1.0.2 3526 | 3527 | signal-exit@3.0.7: {} 3528 | 3529 | signal-exit@4.1.0: {} 3530 | 3531 | slash@3.0.0: {} 3532 | 3533 | source-map-js@1.2.1: {} 3534 | 3535 | source-map@0.8.0-beta.0: 3536 | dependencies: 3537 | whatwg-url: 7.1.0 3538 | 3539 | spdx-correct@3.2.0: 3540 | dependencies: 3541 | spdx-expression-parse: 3.0.1 3542 | spdx-license-ids: 3.0.21 3543 | 3544 | spdx-exceptions@2.5.0: {} 3545 | 3546 | spdx-expression-parse@3.0.1: 3547 | dependencies: 3548 | spdx-exceptions: 2.5.0 3549 | spdx-license-ids: 3.0.21 3550 | 3551 | spdx-license-ids@3.0.21: {} 3552 | 3553 | string-width@4.2.3: 3554 | dependencies: 3555 | emoji-regex: 8.0.0 3556 | is-fullwidth-code-point: 3.0.0 3557 | strip-ansi: 6.0.1 3558 | 3559 | string-width@5.1.2: 3560 | dependencies: 3561 | eastasianwidth: 0.2.0 3562 | emoji-regex: 9.2.2 3563 | strip-ansi: 7.1.0 3564 | 3565 | string.prototype.padend@3.1.6: 3566 | dependencies: 3567 | call-bind: 1.0.8 3568 | define-properties: 1.2.1 3569 | es-abstract: 1.23.9 3570 | es-object-atoms: 1.1.1 3571 | 3572 | string.prototype.trim@1.2.10: 3573 | dependencies: 3574 | call-bind: 1.0.8 3575 | call-bound: 1.0.3 3576 | define-data-property: 1.1.4 3577 | define-properties: 1.2.1 3578 | es-abstract: 1.23.9 3579 | es-object-atoms: 1.1.1 3580 | has-property-descriptors: 1.0.2 3581 | 3582 | string.prototype.trimend@1.0.9: 3583 | dependencies: 3584 | call-bind: 1.0.8 3585 | call-bound: 1.0.3 3586 | define-properties: 1.2.1 3587 | es-object-atoms: 1.1.1 3588 | 3589 | string.prototype.trimstart@1.0.8: 3590 | dependencies: 3591 | call-bind: 1.0.8 3592 | define-properties: 1.2.1 3593 | es-object-atoms: 1.1.1 3594 | 3595 | strip-ansi@6.0.1: 3596 | dependencies: 3597 | ansi-regex: 5.0.1 3598 | 3599 | strip-ansi@7.1.0: 3600 | dependencies: 3601 | ansi-regex: 6.1.0 3602 | 3603 | strip-bom@3.0.0: {} 3604 | 3605 | strip-final-newline@2.0.0: {} 3606 | 3607 | strip-indent@3.0.0: 3608 | dependencies: 3609 | min-indent: 1.0.1 3610 | 3611 | strip-json-comments@3.1.1: {} 3612 | 3613 | strip-literal@0.4.2: 3614 | dependencies: 3615 | acorn: 8.14.0 3616 | 3617 | sucrase@3.35.0: 3618 | dependencies: 3619 | '@jridgewell/gen-mapping': 0.3.8 3620 | commander: 4.1.1 3621 | glob: 10.4.5 3622 | lines-and-columns: 1.2.4 3623 | mz: 2.7.0 3624 | pirates: 4.0.6 3625 | ts-interface-checker: 0.1.13 3626 | 3627 | supports-color@5.5.0: 3628 | dependencies: 3629 | has-flag: 3.0.0 3630 | 3631 | supports-color@7.2.0: 3632 | dependencies: 3633 | has-flag: 4.0.0 3634 | 3635 | supports-preserve-symlinks-flag@1.0.0: {} 3636 | 3637 | text-table@0.2.0: {} 3638 | 3639 | thenify-all@1.6.0: 3640 | dependencies: 3641 | thenify: 3.3.1 3642 | 3643 | thenify@3.3.1: 3644 | dependencies: 3645 | any-promise: 1.3.0 3646 | 3647 | tinybench@2.9.0: {} 3648 | 3649 | tinypool@0.2.4: {} 3650 | 3651 | tinyspy@1.1.1: {} 3652 | 3653 | to-regex-range@5.0.1: 3654 | dependencies: 3655 | is-number: 7.0.0 3656 | 3657 | tr46@1.0.1: 3658 | dependencies: 3659 | punycode: 2.3.1 3660 | 3661 | tree-kill@1.2.2: {} 3662 | 3663 | ts-interface-checker@0.1.13: {} 3664 | 3665 | tslib@1.14.1: {} 3666 | 3667 | tsup@6.2.3(postcss@8.5.3)(typescript@4.8.2): 3668 | dependencies: 3669 | bundle-require: 3.1.2(esbuild@0.15.18) 3670 | cac: 6.7.14 3671 | chokidar: 3.6.0 3672 | debug: 4.4.0 3673 | esbuild: 0.15.18 3674 | execa: 5.1.1 3675 | globby: 11.1.0 3676 | joycon: 3.1.1 3677 | postcss-load-config: 3.1.4(postcss@8.5.3) 3678 | resolve-from: 5.0.0 3679 | rollup: 2.79.2 3680 | source-map: 0.8.0-beta.0 3681 | sucrase: 3.35.0 3682 | tree-kill: 1.2.2 3683 | optionalDependencies: 3684 | postcss: 8.5.3 3685 | typescript: 4.8.2 3686 | transitivePeerDependencies: 3687 | - supports-color 3688 | - ts-node 3689 | 3690 | tsutils@3.21.0(typescript@4.8.2): 3691 | dependencies: 3692 | tslib: 1.14.1 3693 | typescript: 4.8.2 3694 | 3695 | type-check@0.4.0: 3696 | dependencies: 3697 | prelude-ls: 1.2.1 3698 | 3699 | type-detect@4.1.0: {} 3700 | 3701 | type-fest@0.20.2: {} 3702 | 3703 | type-fest@0.6.0: {} 3704 | 3705 | type-fest@0.8.1: {} 3706 | 3707 | typed-array-buffer@1.0.3: 3708 | dependencies: 3709 | call-bound: 1.0.3 3710 | es-errors: 1.3.0 3711 | is-typed-array: 1.1.15 3712 | 3713 | typed-array-byte-length@1.0.3: 3714 | dependencies: 3715 | call-bind: 1.0.8 3716 | for-each: 0.3.5 3717 | gopd: 1.2.0 3718 | has-proto: 1.2.0 3719 | is-typed-array: 1.1.15 3720 | 3721 | typed-array-byte-offset@1.0.4: 3722 | dependencies: 3723 | available-typed-arrays: 1.0.7 3724 | call-bind: 1.0.8 3725 | for-each: 0.3.5 3726 | gopd: 1.2.0 3727 | has-proto: 1.2.0 3728 | is-typed-array: 1.1.15 3729 | reflect.getprototypeof: 1.0.10 3730 | 3731 | typed-array-length@1.0.7: 3732 | dependencies: 3733 | call-bind: 1.0.8 3734 | for-each: 0.3.5 3735 | gopd: 1.2.0 3736 | is-typed-array: 1.1.15 3737 | possible-typed-array-names: 1.1.0 3738 | reflect.getprototypeof: 1.0.10 3739 | 3740 | typescript@4.8.2: {} 3741 | 3742 | unbox-primitive@1.1.0: 3743 | dependencies: 3744 | call-bound: 1.0.3 3745 | has-bigints: 1.1.0 3746 | has-symbols: 1.1.0 3747 | which-boxed-primitive: 1.1.1 3748 | 3749 | uri-js@4.4.1: 3750 | dependencies: 3751 | punycode: 2.3.1 3752 | 3753 | validate-npm-package-license@3.0.4: 3754 | dependencies: 3755 | spdx-correct: 3.2.0 3756 | spdx-expression-parse: 3.0.1 3757 | 3758 | vite@3.0.9: 3759 | dependencies: 3760 | esbuild: 0.14.54 3761 | postcss: 8.5.3 3762 | resolve: 1.22.10 3763 | rollup: 2.77.3 3764 | optionalDependencies: 3765 | fsevents: 2.3.3 3766 | 3767 | vitest@0.23.0: 3768 | dependencies: 3769 | '@types/chai': 4.3.20 3770 | '@types/chai-subset': 1.3.5 3771 | '@types/node': 18.7.14 3772 | chai: 4.5.0 3773 | debug: 4.4.0 3774 | local-pkg: 0.4.3 3775 | strip-literal: 0.4.2 3776 | tinybench: 2.9.0 3777 | tinypool: 0.2.4 3778 | tinyspy: 1.1.1 3779 | vite: 3.0.9 3780 | transitivePeerDependencies: 3781 | - less 3782 | - sass 3783 | - stylus 3784 | - supports-color 3785 | - terser 3786 | 3787 | webidl-conversions@4.0.2: {} 3788 | 3789 | whatwg-url@7.1.0: 3790 | dependencies: 3791 | lodash.sortby: 4.7.0 3792 | tr46: 1.0.1 3793 | webidl-conversions: 4.0.2 3794 | 3795 | which-boxed-primitive@1.1.1: 3796 | dependencies: 3797 | is-bigint: 1.1.0 3798 | is-boolean-object: 1.2.2 3799 | is-number-object: 1.1.1 3800 | is-string: 1.1.1 3801 | is-symbol: 1.1.1 3802 | 3803 | which-builtin-type@1.2.1: 3804 | dependencies: 3805 | call-bound: 1.0.3 3806 | function.prototype.name: 1.1.8 3807 | has-tostringtag: 1.0.2 3808 | is-async-function: 2.1.1 3809 | is-date-object: 1.1.0 3810 | is-finalizationregistry: 1.1.1 3811 | is-generator-function: 1.1.0 3812 | is-regex: 1.2.1 3813 | is-weakref: 1.1.1 3814 | isarray: 2.0.5 3815 | which-boxed-primitive: 1.1.1 3816 | which-collection: 1.0.2 3817 | which-typed-array: 1.1.18 3818 | 3819 | which-collection@1.0.2: 3820 | dependencies: 3821 | is-map: 2.0.3 3822 | is-set: 2.0.3 3823 | is-weakmap: 2.0.2 3824 | is-weakset: 2.0.4 3825 | 3826 | which-typed-array@1.1.18: 3827 | dependencies: 3828 | available-typed-arrays: 1.0.7 3829 | call-bind: 1.0.8 3830 | call-bound: 1.0.3 3831 | for-each: 0.3.5 3832 | gopd: 1.2.0 3833 | has-tostringtag: 1.0.2 3834 | 3835 | which@1.3.1: 3836 | dependencies: 3837 | isexe: 2.0.0 3838 | 3839 | which@2.0.2: 3840 | dependencies: 3841 | isexe: 2.0.0 3842 | 3843 | word-wrap@1.2.5: {} 3844 | 3845 | wrap-ansi@7.0.0: 3846 | dependencies: 3847 | ansi-styles: 4.3.0 3848 | string-width: 4.2.3 3849 | strip-ansi: 6.0.1 3850 | 3851 | wrap-ansi@8.1.0: 3852 | dependencies: 3853 | ansi-styles: 6.2.1 3854 | string-width: 5.1.2 3855 | strip-ansi: 7.1.0 3856 | 3857 | wrappy@1.0.2: {} 3858 | 3859 | yaml@1.10.2: {} 3860 | 3861 | yocto-queue@0.1.0: {} 3862 | -------------------------------------------------------------------------------- /src/index.test.ts: -------------------------------------------------------------------------------- 1 | import { Operation, TRPCClientError, TRPCClientRuntime } from "@trpc/client"; 2 | import { observable } from "@trpc/server/observable"; 3 | import { expect, test, vi } from "vitest"; 4 | import { TokenRefreshProperties, tokenRefreshLink } from "./index"; 5 | 6 | test("should refresh token when needed", async () => { 7 | const mockTokenRefreshNeeded = vi.fn().mockReturnValue(true); 8 | const mockFetchAccessToken = vi.fn().mockResolvedValue(async () => { 9 | await new Promise((resolve) => setTimeout(resolve, 1)); 10 | return "supersecret"; 11 | }); 12 | 13 | const properties: TokenRefreshProperties = { 14 | tokenRefreshNeeded: mockTokenRefreshNeeded, 15 | fetchAccessToken: mockFetchAccessToken, 16 | }; 17 | 18 | const link = tokenRefreshLink(properties)({} as TRPCClientRuntime); 19 | 20 | const mockNext = vi.fn().mockReturnValue( 21 | observable((observer) => { 22 | observer.next({ result: "success" }); 23 | observer.complete(); 24 | }), 25 | ); 26 | 27 | const mockOperation: Operation = { 28 | id: 1, 29 | type: "query", 30 | path: "test", 31 | input: {}, 32 | context: {}, 33 | }; 34 | 35 | const obs = link({ op: mockOperation, next: mockNext }); 36 | 37 | await Promise.all([ 38 | new Promise((resolve) => { 39 | obs.subscribe({ 40 | next: (value) => { 41 | expect(value).toEqual({ result: "success" }); 42 | }, 43 | complete: () => { 44 | resolve(); 45 | }, 46 | }); 47 | }), 48 | ]); 49 | 50 | expect(mockTokenRefreshNeeded).toHaveBeenCalledWith(mockOperation); 51 | expect(mockFetchAccessToken).toHaveBeenCalledWith(mockOperation); 52 | expect(mockNext).toHaveBeenCalledWith(mockOperation); 53 | 54 | expect(mockFetchAccessToken).toHaveBeenCalledTimes(1); 55 | }); 56 | 57 | test("tokenRefreshLink should not refresh token if not needed", async () => { 58 | const mockTokenRefreshNeeded = vi.fn().mockReturnValue(false); 59 | const mockFetchAccessToken = vi.fn(); 60 | 61 | const properties: TokenRefreshProperties = { 62 | tokenRefreshNeeded: mockTokenRefreshNeeded, 63 | fetchAccessToken: mockFetchAccessToken, 64 | }; 65 | 66 | const link = tokenRefreshLink(properties)({} as TRPCClientRuntime); 67 | 68 | const mockNext = vi.fn().mockReturnValue( 69 | observable((observer) => { 70 | observer.next({ result: "success" }); 71 | observer.complete(); 72 | }), 73 | ); 74 | 75 | const mockOperation: Operation = { 76 | id: 1, 77 | type: "query", 78 | path: "test", 79 | input: {}, 80 | context: {}, 81 | }; 82 | 83 | const obs = link({ op: mockOperation, next: mockNext }); 84 | 85 | await new Promise((resolve) => { 86 | obs.subscribe({ 87 | next: (value) => { 88 | expect(value).toEqual({ result: "success" }); 89 | }, 90 | complete: () => { 91 | resolve(); 92 | }, 93 | }); 94 | }); 95 | 96 | expect(mockTokenRefreshNeeded).toHaveBeenCalledWith(mockOperation); 97 | expect(mockFetchAccessToken).not.toHaveBeenCalled(); 98 | expect(mockNext).toHaveBeenCalledWith(mockOperation); 99 | }); 100 | 101 | test("tokenRefreshLink should handle token refresh error", async () => { 102 | const mockTokenRefreshNeeded = vi.fn().mockReturnValue(true); 103 | const mockFetchAccessToken = vi 104 | .fn() 105 | .mockRejectedValue(new Error("Token refresh failed")); 106 | 107 | const properties: TokenRefreshProperties = { 108 | tokenRefreshNeeded: mockTokenRefreshNeeded, 109 | fetchAccessToken: mockFetchAccessToken, 110 | }; 111 | 112 | const link = tokenRefreshLink(properties)({} as TRPCClientRuntime); 113 | 114 | const mockNext = vi.fn(); 115 | 116 | const mockOperation: Operation = { 117 | id: 1, 118 | type: "query", 119 | path: "test", 120 | input: {}, 121 | context: {}, 122 | }; 123 | 124 | const obs = link({ op: mockOperation, next: mockNext }); 125 | 126 | await new Promise((resolve) => { 127 | obs.subscribe({ 128 | error: (error) => { 129 | expect(error).toBeInstanceOf(TRPCClientError); 130 | expect(error.message).toBe("Token refresh failed"); 131 | resolve(); 132 | }, 133 | }); 134 | }); 135 | 136 | expect(mockTokenRefreshNeeded).toHaveBeenCalledWith(mockOperation); 137 | expect(mockFetchAccessToken).toHaveBeenCalledWith(mockOperation); 138 | expect(mockNext).not.toHaveBeenCalled(); 139 | }); 140 | 141 | test("tokenRefreshLink should only refresh token once for multiple concurrent operations", async () => { 142 | const mockTokenRefreshNeeded = vi.fn().mockReturnValue(true); 143 | const mockFetchAccessToken = vi.fn().mockResolvedValue(async () => { 144 | await new Promise((resolve) => setTimeout(resolve, 1)); 145 | }); 146 | 147 | const properties: TokenRefreshProperties = { 148 | tokenRefreshNeeded: mockTokenRefreshNeeded, 149 | fetchAccessToken: mockFetchAccessToken, 150 | }; 151 | 152 | const link = tokenRefreshLink(properties)({} as TRPCClientRuntime); 153 | 154 | const mockNext = vi.fn().mockReturnValue( 155 | observable((observer) => { 156 | observer.next({ result: "success" }); 157 | observer.complete(); 158 | }), 159 | ); 160 | 161 | const mockOperation1: Operation = { 162 | id: 1, 163 | type: "query", 164 | path: "test1", 165 | input: {}, 166 | context: {}, 167 | }; 168 | 169 | const mockOperation2: Operation = { 170 | id: 2, 171 | type: "query", 172 | path: "test2", 173 | input: {}, 174 | context: {}, 175 | }; 176 | 177 | const obs1 = link({ op: mockOperation1, next: mockNext }); 178 | const obs2 = link({ op: mockOperation2, next: mockNext }); 179 | 180 | await Promise.all([ 181 | new Promise((resolve) => { 182 | obs1.subscribe({ 183 | next: (value) => { 184 | expect(value).toEqual({ result: "success" }); 185 | }, 186 | complete: () => { 187 | resolve(); 188 | }, 189 | }); 190 | }), 191 | new Promise((resolve) => { 192 | obs2.subscribe({ 193 | next: (value) => { 194 | expect(value).toEqual({ result: "success" }); 195 | }, 196 | complete: () => { 197 | resolve(); 198 | }, 199 | }); 200 | }), 201 | ]); 202 | 203 | expect(mockTokenRefreshNeeded).toHaveBeenCalledTimes(2); 204 | expect(mockFetchAccessToken).toHaveBeenCalledTimes(1); 205 | expect(mockNext).toHaveBeenCalledTimes(2); 206 | }); 207 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { type Operation, TRPCClientError, type TRPCLink } from "@trpc/client"; 2 | import type { AnyRouter } from "@trpc/server"; 3 | import { observable } from "@trpc/server/observable"; 4 | 5 | export type TokenRefreshProperties = { 6 | tokenRefreshNeeded: (op: Operation) => boolean; 7 | fetchAccessToken: (op: Operation) => Promise; 8 | }; 9 | export const tokenRefreshLink = 10 | ({ 11 | tokenRefreshNeeded, 12 | fetchAccessToken, 13 | }: TokenRefreshProperties): TRPCLink => 14 | () => { 15 | let refreshPromise: Promise | undefined; 16 | return (options) => { 17 | const { next, op } = options; 18 | 19 | return observable((observer) => { 20 | if (!tokenRefreshNeeded(op)) { 21 | return next(op).subscribe(observer); 22 | } 23 | 24 | refreshPromise ??= fetchAccessToken(op); 25 | 26 | refreshPromise 27 | .then(() => { 28 | next(op).subscribe(observer); 29 | }) 30 | .catch((error) => { 31 | observer.error(TRPCClientError.from(error)); 32 | }) 33 | .finally(() => { 34 | refreshPromise = undefined; 35 | }); 36 | }); 37 | }; 38 | }; 39 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es6", 4 | "module": "esnext", 5 | "moduleResolution": "node", 6 | "strict": true, 7 | "esModuleInterop": true, 8 | "skipLibCheck": true, 9 | "allowSyntheticDefaultImports": true, 10 | "forceConsistentCasingInFileNames": true, 11 | "noEmit": true, 12 | "isolatedModules": true 13 | }, 14 | "include": ["src", "test"], 15 | "exclude": ["node_modules", "dist"] 16 | } 17 | -------------------------------------------------------------------------------- /vitest.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vitest/config"; 2 | 3 | export default defineConfig({ 4 | test: { 5 | environment: "node", 6 | include: ["**/*.test.ts"], 7 | coverage: { 8 | reporter: ["text", "json", "html"], 9 | }, 10 | }, 11 | }); 12 | --------------------------------------------------------------------------------