├── .changeset ├── README.md └── config.json ├── .github └── workflows │ └── ci.yml ├── .gitignore ├── .npmignore ├── .prettierignore ├── CHANGELOG.md ├── README.md ├── examples └── ttl-cache.ts ├── package.json ├── pnpm-lock.yaml ├── scripts └── build.js ├── src ├── convert.ts ├── env.d.ts ├── index.ts └── with-cache.ts ├── test ├── basic.test.ts ├── cache-key.test.ts ├── github-api.test.ts └── with-node-fetch.test.ts ├── tsconfig.json └── vite.config.ts /.changeset/README.md: -------------------------------------------------------------------------------- 1 | # Changesets 2 | 3 | Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works 4 | with multi-package repos, or single-package repos to help you version and publish your code. You can 5 | find the full documentation for it [in our repository](https://github.com/changesets/changesets) 6 | 7 | We have a quick list of common questions to get you started engaging with this project in 8 | [our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) 9 | -------------------------------------------------------------------------------- /.changeset/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://unpkg.com/@changesets/config@1.6.3/schema.json", 3 | "changelog": "@changesets/cli/changelog", 4 | "commit": false, 5 | "linked": [], 6 | "access": "public", 7 | "baseBranch": "main", 8 | "updateInternalDependencies": "patch", 9 | "ignore": [] 10 | } 11 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | 9 | # Automatically cancel in-progress actions on the same branch 10 | concurrency: 11 | group: ${{ github.workflow }}-${{ github.event_name == 'pull_request_target' && github.head_ref || github.ref }} 12 | cancel-in-progress: true 13 | 14 | jobs: 15 | build: 16 | name: Build Packages 17 | runs-on: ubuntu-latest 18 | steps: 19 | - uses: actions/checkout@v3 20 | - uses: pnpm/action-setup@v2.2.1 21 | - uses: actions/setup-node@v3 22 | with: 23 | node-version: 18 24 | cache: 'pnpm' 25 | - if: ${{ steps.cache-node.outputs.cache-hit != 'true' }} 26 | run: pnpm install 27 | - run: pnpm run build 28 | - run: pnpm run test 29 | - uses: changesets/action@v1 30 | with: 31 | publish: pnpm changeset publish 32 | commit: '[ci] release' 33 | title: '[ci] release' 34 | env: 35 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }} 36 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 37 | -------------------------------------------------------------------------------- /.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 | # Serverless directories 108 | .serverless/ 109 | 110 | # FuseBox cache 111 | .fusebox/ 112 | 113 | # DynamoDB Local files 114 | .dynamodb/ 115 | 116 | # TernJS port file 117 | .tern-port 118 | 119 | # Stores VSCode versions used for testing VSCode extensions 120 | .vscode-test 121 | 122 | # yarn v2 123 | .yarn/cache 124 | .yarn/unplugged 125 | .yarn/build-state.yml 126 | .yarn/install-state.gz 127 | .pnp.* 128 | 129 | # macOS specific files 130 | .DS_Store 131 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | src 2 | test 3 | .github 4 | .changeset 5 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | dist 2 | .github 3 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # ultrafetch 2 | 3 | ## 0.4.0 4 | 5 | ### Minor Changes 6 | 7 | - d5eb3b5: Implement support for the `Vary` header 8 | 9 | ## 0.3.2 10 | 11 | ### Patch Changes 12 | 13 | - 288a14e: ensure revalidated responses are properly stored 14 | 15 | ## 0.3.1 16 | 17 | ### Patch Changes 18 | 19 | - 6c90ef1: Use request headers when calculating cache key. Ensure `cache: 'no-store'` is repsected. 20 | 21 | ## 0.3.0 22 | 23 | ### Minor Changes 24 | 25 | - 64d9947: Improve request caching technique 26 | 27 | ## 0.2.1 28 | 29 | ### Patch Changes 30 | 31 | - 48b691a: Cleaner build output, bundled declaration file 32 | 33 | ## 0.2.0 34 | 35 | ### Minor Changes 36 | 37 | - 7c3e04b: New, modular structure allows extension of existing `fetch` implementations with a custom cache. 38 | 39 | ```js 40 | import { withCache } from "ultrafetch"; 41 | 42 | const enhancedFetch = withCache(fetch, { cache: new Map() }); 43 | ``` 44 | 45 | ## 0.1.2 46 | 47 | ### Patch Changes 48 | 49 | - Fix issue with NPM distribution 50 | - Fix issue with default cache location 51 | 52 | ## 0.1.1 53 | 54 | ### Patch Changes 55 | 56 | - Add documentation 57 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # `ultrafetch` 2 | 3 | Modular utilities for enhancing `fetch` behavior. Bring Your Own Fetch implementation supports both [`node-fetch`](https://github.com/node-fetch/node-fetch) and [`unidici`](https://github.com/nodejs/undici)'s `fetch` (globally available in `node@18+`). 4 | 5 | ## `withCache` 6 | 7 | The `withCache` function enhances `fetch` with [RFC-7234](https://httpwg.org/specs/rfc7234.html) compliant cache behavior. The default cache is a simple in-memory `Map`, but custom `cache`s are also supported. 8 | 9 | ```js 10 | import { withCache } from "ultrafetch"; 11 | 12 | const enhancedFetch = withCache(fetch); 13 | ``` 14 | 15 | Any custom `cache` that adheres to a `Map` interface is valid. 16 | 17 | ```ts 18 | import { withCache } from "ultrafetch"; 19 | 20 | class MyCache implements Map { 21 | clear(): void; 22 | delete(key: K): boolean; 23 | get(key: K): V| undefined>; 24 | has(key: K): boolean; 25 | set(key: K, value: V): this; 26 | readonly size: number; 27 | } 28 | 29 | const enhancedFetch = withCache(fetch, { cache: new MyCache() }); 30 | ``` 31 | 32 | Custom `cache`s can also use the `AsyncMap` interface, which is the same as a standard `Map` but each method is `async`. 33 | 34 | ```ts 35 | import type { AsyncMap } from "ultrafetch"; 36 | import { withCache } from "ultrafetch"; 37 | 38 | class MyAsyncCache implements AsyncMap { 39 | clear(): Promise; 40 | delete(key: K): Promise; 41 | get(key: K): Promise; 42 | has(key: K): Promise; 43 | set(key: K, value: V): Promise; 44 | readonly size: number; 45 | } 46 | 47 | const enhancedFetch = withCache(fetch, { cache: new MyAsyncCache() }); 48 | ``` 49 | 50 | ### `isCached` 51 | 52 | The `isCached` export can be used to determine if a given `Response` was returned from the cache or not. 53 | 54 | ```ts 55 | import { withCache, isCached } from "ultrafetch"; 56 | 57 | const enhancedFetch = withCache(fetch); 58 | const responseA = await enhancedFetch('https://example.com'); 59 | isCached(responseA) // false 60 | const responseB = await enhancedFetch('https://example.com'); 61 | isCached(responseB) // true 62 | ``` 63 | -------------------------------------------------------------------------------- /examples/ttl-cache.ts: -------------------------------------------------------------------------------- 1 | import { withCache } from "ultrafetch"; 2 | 3 | class TTLCache extends Map { 4 | #timers = new Map(); 5 | 6 | set(k: string, v: string, { ttl = 60 * 1000 }: { ttl?: number } = {}) { 7 | if (this.#timers.has(k)) { 8 | clearTimeout(this.#timers.get(k)); 9 | } 10 | this.#timers.set( 11 | k, 12 | setTimeout(() => this.delete(k), ttl) 13 | ); 14 | return super.set(k, v); 15 | } 16 | 17 | delete(k: string) { 18 | if (this.#timers.has(k)) { 19 | clearTimeout(this.#timers.get(k)); 20 | } 21 | this.#timers.delete(k); 22 | return super.delete(k); 23 | } 24 | 25 | clear() { 26 | super.clear(); 27 | for (const v of this.#timers.values()) { 28 | clearTimeout(v); 29 | } 30 | this.#timers.clear(); 31 | } 32 | } 33 | 34 | const enhancedFetch = withCache(fetch, { cache: new TTLCache() }); 35 | export default enhancedFetch; 36 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ultrafetch", 3 | "type": "module", 4 | "version": "0.4.0", 5 | "types": "./dist/index.d.ts", 6 | "repository": { 7 | "type": "git", 8 | "url": "https://github.com/natemoo-re/ultrafetch" 9 | }, 10 | "bugs": { 11 | "url": "https://github.com/natemoo-re/ultrafetch/issues" 12 | }, 13 | "homepage": "https://github.com/natemoo-re/ultrafetch#README", 14 | "scripts": { 15 | "dev": "node ./scripts/build.js --watch", 16 | "build": "node ./scripts/build.js", 17 | "lint": "prettier \"**/*.{js,ts,md}\"", 18 | "test": "vitest" 19 | }, 20 | "files": [ 21 | "dist", 22 | "CHANGELOG.md" 23 | ], 24 | "exports": { 25 | ".": "./dist/index.js", 26 | "./dist/*": "./dist/*", 27 | "./package.json": "./package.json" 28 | }, 29 | "keywords": [ 30 | "fetch", 31 | "cache", 32 | "cached", 33 | "http-cache-semantics", 34 | "spec" 35 | ], 36 | "author": { 37 | "name": "Nate Moore", 38 | "email": "nate@natemoo.re", 39 | "url": "https://twitter.com/n_moore" 40 | }, 41 | "license": "MIT", 42 | "volta": { 43 | "node": "18.7.0" 44 | }, 45 | "packageManager": "pnpm@7.6.0", 46 | "bundledDependencies": [ 47 | "http-cache-semantics", 48 | "shorthash" 49 | ], 50 | "devDependencies": { 51 | "@changesets/cli": "^2.18.1", 52 | "@types/cacache": "^15.0.1", 53 | "@types/http-cache-semantics": "^4.0.1", 54 | "esbuild": "^0.14.51", 55 | "http-cache-semantics": "^4.1.0", 56 | "node-fetch": "^3.2.10", 57 | "prettier": "^2.5.1", 58 | "shorthash": "^0.0.2", 59 | "ts-morph": "^15.1.0", 60 | "typescript": "^4.7.4", 61 | "vitest": "^0.20.2" 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | specifiers: 4 | '@changesets/cli': ^2.18.1 5 | '@types/cacache': ^15.0.1 6 | '@types/http-cache-semantics': ^4.0.1 7 | esbuild: ^0.14.51 8 | http-cache-semantics: ^4.1.0 9 | node-fetch: ^3.2.10 10 | prettier: ^2.5.1 11 | shorthash: ^0.0.2 12 | ts-morph: ^15.1.0 13 | typescript: ^4.7.4 14 | vitest: ^0.20.2 15 | 16 | devDependencies: 17 | '@changesets/cli': 2.24.1 18 | '@types/cacache': 15.0.1 19 | '@types/http-cache-semantics': 4.0.1 20 | esbuild: 0.14.51 21 | http-cache-semantics: 4.1.0 22 | node-fetch: 3.2.10 23 | prettier: 2.7.1 24 | shorthash: 0.0.2 25 | ts-morph: 15.1.0 26 | typescript: 4.7.4 27 | vitest: 0.20.2 28 | 29 | packages: 30 | 31 | /@babel/code-frame/7.18.6: 32 | resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} 33 | engines: {node: '>=6.9.0'} 34 | dependencies: 35 | '@babel/highlight': 7.18.6 36 | dev: true 37 | 38 | /@babel/helper-validator-identifier/7.18.6: 39 | resolution: {integrity: sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==} 40 | engines: {node: '>=6.9.0'} 41 | dev: true 42 | 43 | /@babel/highlight/7.18.6: 44 | resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} 45 | engines: {node: '>=6.9.0'} 46 | dependencies: 47 | '@babel/helper-validator-identifier': 7.18.6 48 | chalk: 2.4.2 49 | js-tokens: 4.0.0 50 | dev: true 51 | 52 | /@babel/runtime/7.18.9: 53 | resolution: {integrity: sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==} 54 | engines: {node: '>=6.9.0'} 55 | dependencies: 56 | regenerator-runtime: 0.13.9 57 | dev: true 58 | 59 | /@changesets/apply-release-plan/6.0.3: 60 | resolution: {integrity: sha512-/3JKqtDefs2YSEQI6JQo43/MKTLfhPdrW/BFmqnRpW8UmPB+YXjjQgfjR/2KOaObLOkoixcL3WCK4wNkn/Krmw==} 61 | dependencies: 62 | '@babel/runtime': 7.18.9 63 | '@changesets/config': 2.1.0 64 | '@changesets/get-version-range-type': 0.3.2 65 | '@changesets/git': 1.4.1 66 | '@changesets/types': 5.1.0 67 | '@manypkg/get-packages': 1.1.3 68 | detect-indent: 6.1.0 69 | fs-extra: 7.0.1 70 | lodash.startcase: 4.4.0 71 | outdent: 0.5.0 72 | prettier: 1.19.1 73 | resolve-from: 5.0.0 74 | semver: 5.7.1 75 | dev: true 76 | 77 | /@changesets/assemble-release-plan/5.2.0: 78 | resolution: {integrity: sha512-ewY24PEbSec2eKX0+KM7eyENA2hUUp6s4LF9p/iBxTtc+TX2Xbx5rZnlLKZkc8tpuQ3PZbyjLFXWhd1PP6SjCg==} 79 | dependencies: 80 | '@babel/runtime': 7.18.9 81 | '@changesets/errors': 0.1.4 82 | '@changesets/get-dependents-graph': 1.3.3 83 | '@changesets/types': 5.1.0 84 | '@manypkg/get-packages': 1.1.3 85 | semver: 5.7.1 86 | dev: true 87 | 88 | /@changesets/changelog-git/0.1.12: 89 | resolution: {integrity: sha512-Xv2CPjTBmwjl8l4ZyQ3xrsXZMq8WafPUpEonDpTmcb24XY8keVzt7ZSCJuDz035EiqrjmDKDhODoQ6XiHudlig==} 90 | dependencies: 91 | '@changesets/types': 5.1.0 92 | dev: true 93 | 94 | /@changesets/cli/2.24.1: 95 | resolution: {integrity: sha512-7Lz1inqGQjBrXgnXlENtzQ7EmO/9c+09d9oi8XoK4ARqlJe8GpafjqKRobcjcA/TTI7Fn2+cke4CrXFZfVF8Rw==} 96 | hasBin: true 97 | dependencies: 98 | '@babel/runtime': 7.18.9 99 | '@changesets/apply-release-plan': 6.0.3 100 | '@changesets/assemble-release-plan': 5.2.0 101 | '@changesets/changelog-git': 0.1.12 102 | '@changesets/config': 2.1.0 103 | '@changesets/errors': 0.1.4 104 | '@changesets/get-dependents-graph': 1.3.3 105 | '@changesets/get-release-plan': 3.0.12 106 | '@changesets/git': 1.4.1 107 | '@changesets/logger': 0.0.5 108 | '@changesets/pre': 1.0.12 109 | '@changesets/read': 0.5.7 110 | '@changesets/types': 5.1.0 111 | '@changesets/write': 0.1.9 112 | '@manypkg/get-packages': 1.1.3 113 | '@types/is-ci': 3.0.0 114 | '@types/semver': 6.2.3 115 | ansi-colors: 4.1.3 116 | chalk: 2.4.2 117 | enquirer: 2.3.6 118 | external-editor: 3.1.0 119 | fs-extra: 7.0.1 120 | human-id: 1.0.2 121 | is-ci: 3.0.1 122 | meow: 6.1.1 123 | outdent: 0.5.0 124 | p-limit: 2.3.0 125 | preferred-pm: 3.0.3 126 | resolve-from: 5.0.0 127 | semver: 5.7.1 128 | spawndamnit: 2.0.0 129 | term-size: 2.2.1 130 | tty-table: 4.1.6 131 | dev: true 132 | 133 | /@changesets/config/2.1.0: 134 | resolution: {integrity: sha512-43potf+DwYHmH7EY19vxtCq6fqj7UUIrZ4DTwM3pVBqCKxFIytm7GPy7wNAsH06UvMw7NRuOu4QK5HN02GsIrw==} 135 | dependencies: 136 | '@changesets/errors': 0.1.4 137 | '@changesets/get-dependents-graph': 1.3.3 138 | '@changesets/logger': 0.0.5 139 | '@changesets/types': 5.1.0 140 | '@manypkg/get-packages': 1.1.3 141 | fs-extra: 7.0.1 142 | micromatch: 4.0.5 143 | dev: true 144 | 145 | /@changesets/errors/0.1.4: 146 | resolution: {integrity: sha512-HAcqPF7snsUJ/QzkWoKfRfXushHTu+K5KZLJWPb34s4eCZShIf8BFO3fwq6KU8+G7L5KdtN2BzQAXOSXEyiY9Q==} 147 | dependencies: 148 | extendable-error: 0.1.7 149 | dev: true 150 | 151 | /@changesets/get-dependents-graph/1.3.3: 152 | resolution: {integrity: sha512-h4fHEIt6X+zbxdcznt1e8QD7xgsXRAXd2qzLlyxoRDFSa6SxJrDAUyh7ZUNdhjBU4Byvp4+6acVWVgzmTy4UNQ==} 153 | dependencies: 154 | '@changesets/types': 5.1.0 155 | '@manypkg/get-packages': 1.1.3 156 | chalk: 2.4.2 157 | fs-extra: 7.0.1 158 | semver: 5.7.1 159 | dev: true 160 | 161 | /@changesets/get-release-plan/3.0.12: 162 | resolution: {integrity: sha512-TlpEdpxV5ZQmNeHoD6KNKAc01wjRrcu9/CQqzmO4qAlX7ARA4pIuAxd8QZ1AQXv/l4qhHox7SUYH3VLHfarv5w==} 163 | dependencies: 164 | '@babel/runtime': 7.18.9 165 | '@changesets/assemble-release-plan': 5.2.0 166 | '@changesets/config': 2.1.0 167 | '@changesets/pre': 1.0.12 168 | '@changesets/read': 0.5.7 169 | '@changesets/types': 5.1.0 170 | '@manypkg/get-packages': 1.1.3 171 | dev: true 172 | 173 | /@changesets/get-version-range-type/0.3.2: 174 | resolution: {integrity: sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg==} 175 | dev: true 176 | 177 | /@changesets/git/1.4.1: 178 | resolution: {integrity: sha512-GWwRXEqBsQ3nEYcyvY/u2xUK86EKAevSoKV/IhELoZ13caZ1A1TSak/71vyKILtzuLnFPk5mepP5HjBxr7lZ9Q==} 179 | dependencies: 180 | '@babel/runtime': 7.18.9 181 | '@changesets/errors': 0.1.4 182 | '@changesets/types': 5.1.0 183 | '@manypkg/get-packages': 1.1.3 184 | is-subdir: 1.2.0 185 | spawndamnit: 2.0.0 186 | dev: true 187 | 188 | /@changesets/logger/0.0.5: 189 | resolution: {integrity: sha512-gJyZHomu8nASHpaANzc6bkQMO9gU/ib20lqew1rVx753FOxffnCrJlGIeQVxNWCqM+o6OOleCo/ivL8UAO5iFw==} 190 | dependencies: 191 | chalk: 2.4.2 192 | dev: true 193 | 194 | /@changesets/parse/0.3.14: 195 | resolution: {integrity: sha512-SWnNVyC9vz61ueTbuxvA6b4HXcSx2iaWr2VEa37lPg1Vw+cEyQp7lOB219P7uow1xFfdtIEEsxbzXnqLAAaY8w==} 196 | dependencies: 197 | '@changesets/types': 5.1.0 198 | js-yaml: 3.14.1 199 | dev: true 200 | 201 | /@changesets/pre/1.0.12: 202 | resolution: {integrity: sha512-RFzWYBZx56MtgMesXjxx7ymyI829/rcIw/41hvz3VJPnY8mDscN7RJyYu7Xm7vts2Fcd+SRcO0T/Ws3I1/6J7g==} 203 | dependencies: 204 | '@babel/runtime': 7.18.9 205 | '@changesets/errors': 0.1.4 206 | '@changesets/types': 5.1.0 207 | '@manypkg/get-packages': 1.1.3 208 | fs-extra: 7.0.1 209 | dev: true 210 | 211 | /@changesets/read/0.5.7: 212 | resolution: {integrity: sha512-Iteg0ccTPpkJ+qFzY97k7qqdVE5Kz30TqPo9GibpBk2g8tcLFUqf+Qd0iXPLcyhUZpPL1U6Hia1gINHNKIKx4g==} 213 | dependencies: 214 | '@babel/runtime': 7.18.9 215 | '@changesets/git': 1.4.1 216 | '@changesets/logger': 0.0.5 217 | '@changesets/parse': 0.3.14 218 | '@changesets/types': 5.1.0 219 | chalk: 2.4.2 220 | fs-extra: 7.0.1 221 | p-filter: 2.1.0 222 | dev: true 223 | 224 | /@changesets/types/4.1.0: 225 | resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} 226 | dev: true 227 | 228 | /@changesets/types/5.1.0: 229 | resolution: {integrity: sha512-uUByGATZCdaPkaO9JkBsgGDjEvHyY2Sb0e/J23+cwxBi5h0fxpLF/HObggO/Fw8T2nxK6zDfJbPsdQt5RwYFJA==} 230 | dev: true 231 | 232 | /@changesets/write/0.1.9: 233 | resolution: {integrity: sha512-E90ZrsrfJVOOQaP3Mm5Xd7uDwBAqq3z5paVEavTHKA8wxi7NAL8CmjgbGxSFuiP7ubnJA2BuHlrdE4z86voGOg==} 234 | dependencies: 235 | '@babel/runtime': 7.18.9 236 | '@changesets/types': 5.1.0 237 | fs-extra: 7.0.1 238 | human-id: 1.0.2 239 | prettier: 1.19.1 240 | dev: true 241 | 242 | /@manypkg/find-root/1.1.0: 243 | resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} 244 | dependencies: 245 | '@babel/runtime': 7.18.9 246 | '@types/node': 12.20.55 247 | find-up: 4.1.0 248 | fs-extra: 8.1.0 249 | dev: true 250 | 251 | /@manypkg/get-packages/1.1.3: 252 | resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} 253 | dependencies: 254 | '@babel/runtime': 7.18.9 255 | '@changesets/types': 4.1.0 256 | '@manypkg/find-root': 1.1.0 257 | fs-extra: 8.1.0 258 | globby: 11.1.0 259 | read-yaml-file: 1.1.0 260 | dev: true 261 | 262 | /@nodelib/fs.scandir/2.1.5: 263 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 264 | engines: {node: '>= 8'} 265 | dependencies: 266 | '@nodelib/fs.stat': 2.0.5 267 | run-parallel: 1.2.0 268 | dev: true 269 | 270 | /@nodelib/fs.stat/2.0.5: 271 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 272 | engines: {node: '>= 8'} 273 | dev: true 274 | 275 | /@nodelib/fs.walk/1.2.8: 276 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 277 | engines: {node: '>= 8'} 278 | dependencies: 279 | '@nodelib/fs.scandir': 2.1.5 280 | fastq: 1.13.0 281 | dev: true 282 | 283 | /@ts-morph/common/0.16.0: 284 | resolution: {integrity: sha512-SgJpzkTgZKLKqQniCjLaE3c2L2sdL7UShvmTmPBejAKd2OKV/yfMpQ2IWpAuA+VY5wy7PkSUaEObIqEK6afFuw==} 285 | dependencies: 286 | fast-glob: 3.2.11 287 | minimatch: 5.1.0 288 | mkdirp: 1.0.4 289 | path-browserify: 1.0.1 290 | dev: true 291 | 292 | /@types/cacache/15.0.1: 293 | resolution: {integrity: sha512-JhL2GFJuHMx4RMg4z0XfXB4ZkKdyiOaOLpjoYMXcyKfrkF3IBXNZBj6/Peo9zX/7PPHyfI63NWVD589cI2YTzg==} 294 | dependencies: 295 | '@types/node': 18.6.3 296 | dev: true 297 | 298 | /@types/chai-subset/1.3.3: 299 | resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} 300 | dependencies: 301 | '@types/chai': 4.3.1 302 | dev: true 303 | 304 | /@types/chai/4.3.1: 305 | resolution: {integrity: sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==} 306 | dev: true 307 | 308 | /@types/http-cache-semantics/4.0.1: 309 | resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} 310 | dev: true 311 | 312 | /@types/is-ci/3.0.0: 313 | resolution: {integrity: sha512-Q0Op0hdWbYd1iahB+IFNQcWXFq4O0Q5MwQP7uN0souuQ4rPg1vEYcnIOfr1gY+M+6rc8FGoRaBO1mOOvL29sEQ==} 314 | dependencies: 315 | ci-info: 3.3.2 316 | dev: true 317 | 318 | /@types/minimist/1.2.2: 319 | resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} 320 | dev: true 321 | 322 | /@types/node/12.20.55: 323 | resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} 324 | dev: true 325 | 326 | /@types/node/18.6.3: 327 | resolution: {integrity: sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg==} 328 | dev: true 329 | 330 | /@types/normalize-package-data/2.4.1: 331 | resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} 332 | dev: true 333 | 334 | /@types/semver/6.2.3: 335 | resolution: {integrity: sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A==} 336 | dev: true 337 | 338 | /ansi-colors/4.1.3: 339 | resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} 340 | engines: {node: '>=6'} 341 | dev: true 342 | 343 | /ansi-regex/5.0.1: 344 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 345 | engines: {node: '>=8'} 346 | dev: true 347 | 348 | /ansi-styles/3.2.1: 349 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 350 | engines: {node: '>=4'} 351 | dependencies: 352 | color-convert: 1.9.3 353 | dev: true 354 | 355 | /ansi-styles/4.3.0: 356 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 357 | engines: {node: '>=8'} 358 | dependencies: 359 | color-convert: 2.0.1 360 | dev: true 361 | 362 | /argparse/1.0.10: 363 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 364 | dependencies: 365 | sprintf-js: 1.0.3 366 | dev: true 367 | 368 | /array-union/2.1.0: 369 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 370 | engines: {node: '>=8'} 371 | dev: true 372 | 373 | /array.prototype.flat/1.3.0: 374 | resolution: {integrity: sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==} 375 | engines: {node: '>= 0.4'} 376 | dependencies: 377 | call-bind: 1.0.2 378 | define-properties: 1.1.4 379 | es-abstract: 1.20.1 380 | es-shim-unscopables: 1.0.0 381 | dev: true 382 | 383 | /arrify/1.0.1: 384 | resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} 385 | engines: {node: '>=0.10.0'} 386 | dev: true 387 | 388 | /assertion-error/1.1.0: 389 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} 390 | dev: true 391 | 392 | /balanced-match/1.0.2: 393 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 394 | dev: true 395 | 396 | /better-path-resolve/1.0.0: 397 | resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} 398 | engines: {node: '>=4'} 399 | dependencies: 400 | is-windows: 1.0.2 401 | dev: true 402 | 403 | /brace-expansion/2.0.1: 404 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 405 | dependencies: 406 | balanced-match: 1.0.2 407 | dev: true 408 | 409 | /braces/3.0.2: 410 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 411 | engines: {node: '>=8'} 412 | dependencies: 413 | fill-range: 7.0.1 414 | dev: true 415 | 416 | /breakword/1.0.5: 417 | resolution: {integrity: sha512-ex5W9DoOQ/LUEU3PMdLs9ua/CYZl1678NUkKOdUSi8Aw5F1idieaiRURCBFJCwVcrD1J8Iy3vfWSloaMwO2qFg==} 418 | dependencies: 419 | wcwidth: 1.0.1 420 | dev: true 421 | 422 | /call-bind/1.0.2: 423 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} 424 | dependencies: 425 | function-bind: 1.1.1 426 | get-intrinsic: 1.1.2 427 | dev: true 428 | 429 | /camelcase-keys/6.2.2: 430 | resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} 431 | engines: {node: '>=8'} 432 | dependencies: 433 | camelcase: 5.3.1 434 | map-obj: 4.3.0 435 | quick-lru: 4.0.1 436 | dev: true 437 | 438 | /camelcase/5.3.1: 439 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} 440 | engines: {node: '>=6'} 441 | dev: true 442 | 443 | /chai/4.3.6: 444 | resolution: {integrity: sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==} 445 | engines: {node: '>=4'} 446 | dependencies: 447 | assertion-error: 1.1.0 448 | check-error: 1.0.2 449 | deep-eql: 3.0.1 450 | get-func-name: 2.0.0 451 | loupe: 2.3.4 452 | pathval: 1.1.1 453 | type-detect: 4.0.8 454 | dev: true 455 | 456 | /chalk/2.4.2: 457 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 458 | engines: {node: '>=4'} 459 | dependencies: 460 | ansi-styles: 3.2.1 461 | escape-string-regexp: 1.0.5 462 | supports-color: 5.5.0 463 | dev: true 464 | 465 | /chalk/4.1.2: 466 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 467 | engines: {node: '>=10'} 468 | dependencies: 469 | ansi-styles: 4.3.0 470 | supports-color: 7.2.0 471 | dev: true 472 | 473 | /chardet/0.7.0: 474 | resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} 475 | dev: true 476 | 477 | /check-error/1.0.2: 478 | resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} 479 | dev: true 480 | 481 | /ci-info/3.3.2: 482 | resolution: {integrity: sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==} 483 | dev: true 484 | 485 | /cliui/6.0.0: 486 | resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} 487 | dependencies: 488 | string-width: 4.2.3 489 | strip-ansi: 6.0.1 490 | wrap-ansi: 6.2.0 491 | dev: true 492 | 493 | /cliui/7.0.4: 494 | resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} 495 | dependencies: 496 | string-width: 4.2.3 497 | strip-ansi: 6.0.1 498 | wrap-ansi: 7.0.0 499 | dev: true 500 | 501 | /clone/1.0.4: 502 | resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} 503 | engines: {node: '>=0.8'} 504 | dev: true 505 | 506 | /code-block-writer/11.0.3: 507 | resolution: {integrity: sha512-NiujjUFB4SwScJq2bwbYUtXbZhBSlY6vYzm++3Q6oC+U+injTqfPYFK8wS9COOmb2lueqp0ZRB4nK1VYeHgNyw==} 508 | dev: true 509 | 510 | /color-convert/1.9.3: 511 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 512 | dependencies: 513 | color-name: 1.1.3 514 | dev: true 515 | 516 | /color-convert/2.0.1: 517 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 518 | engines: {node: '>=7.0.0'} 519 | dependencies: 520 | color-name: 1.1.4 521 | dev: true 522 | 523 | /color-name/1.1.3: 524 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 525 | dev: true 526 | 527 | /color-name/1.1.4: 528 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 529 | dev: true 530 | 531 | /cross-spawn/5.1.0: 532 | resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} 533 | dependencies: 534 | lru-cache: 4.1.5 535 | shebang-command: 1.2.0 536 | which: 1.3.1 537 | dev: true 538 | 539 | /csv-generate/3.4.3: 540 | resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} 541 | dev: true 542 | 543 | /csv-parse/4.16.3: 544 | resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} 545 | dev: true 546 | 547 | /csv-stringify/5.6.5: 548 | resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==} 549 | dev: true 550 | 551 | /csv/5.5.3: 552 | resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} 553 | engines: {node: '>= 0.1.90'} 554 | dependencies: 555 | csv-generate: 3.4.3 556 | csv-parse: 4.16.3 557 | csv-stringify: 5.6.5 558 | stream-transform: 2.1.3 559 | dev: true 560 | 561 | /data-uri-to-buffer/4.0.0: 562 | resolution: {integrity: sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==} 563 | engines: {node: '>= 12'} 564 | dev: true 565 | 566 | /debug/4.3.4: 567 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 568 | engines: {node: '>=6.0'} 569 | peerDependencies: 570 | supports-color: '*' 571 | peerDependenciesMeta: 572 | supports-color: 573 | optional: true 574 | dependencies: 575 | ms: 2.1.2 576 | dev: true 577 | 578 | /decamelize-keys/1.1.0: 579 | resolution: {integrity: sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==} 580 | engines: {node: '>=0.10.0'} 581 | dependencies: 582 | decamelize: 1.2.0 583 | map-obj: 1.0.1 584 | dev: true 585 | 586 | /decamelize/1.2.0: 587 | resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} 588 | engines: {node: '>=0.10.0'} 589 | dev: true 590 | 591 | /deep-eql/3.0.1: 592 | resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==} 593 | engines: {node: '>=0.12'} 594 | dependencies: 595 | type-detect: 4.0.8 596 | dev: true 597 | 598 | /defaults/1.0.3: 599 | resolution: {integrity: sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==} 600 | dependencies: 601 | clone: 1.0.4 602 | dev: true 603 | 604 | /define-properties/1.1.4: 605 | resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} 606 | engines: {node: '>= 0.4'} 607 | dependencies: 608 | has-property-descriptors: 1.0.0 609 | object-keys: 1.1.1 610 | dev: true 611 | 612 | /detect-indent/6.1.0: 613 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} 614 | engines: {node: '>=8'} 615 | dev: true 616 | 617 | /dir-glob/3.0.1: 618 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 619 | engines: {node: '>=8'} 620 | dependencies: 621 | path-type: 4.0.0 622 | dev: true 623 | 624 | /emoji-regex/8.0.0: 625 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 626 | dev: true 627 | 628 | /enquirer/2.3.6: 629 | resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} 630 | engines: {node: '>=8.6'} 631 | dependencies: 632 | ansi-colors: 4.1.3 633 | dev: true 634 | 635 | /error-ex/1.3.2: 636 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 637 | dependencies: 638 | is-arrayish: 0.2.1 639 | dev: true 640 | 641 | /es-abstract/1.20.1: 642 | resolution: {integrity: sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==} 643 | engines: {node: '>= 0.4'} 644 | dependencies: 645 | call-bind: 1.0.2 646 | es-to-primitive: 1.2.1 647 | function-bind: 1.1.1 648 | function.prototype.name: 1.1.5 649 | get-intrinsic: 1.1.2 650 | get-symbol-description: 1.0.0 651 | has: 1.0.3 652 | has-property-descriptors: 1.0.0 653 | has-symbols: 1.0.3 654 | internal-slot: 1.0.3 655 | is-callable: 1.2.4 656 | is-negative-zero: 2.0.2 657 | is-regex: 1.1.4 658 | is-shared-array-buffer: 1.0.2 659 | is-string: 1.0.7 660 | is-weakref: 1.0.2 661 | object-inspect: 1.12.2 662 | object-keys: 1.1.1 663 | object.assign: 4.1.2 664 | regexp.prototype.flags: 1.4.3 665 | string.prototype.trimend: 1.0.5 666 | string.prototype.trimstart: 1.0.5 667 | unbox-primitive: 1.0.2 668 | dev: true 669 | 670 | /es-shim-unscopables/1.0.0: 671 | resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} 672 | dependencies: 673 | has: 1.0.3 674 | dev: true 675 | 676 | /es-to-primitive/1.2.1: 677 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 678 | engines: {node: '>= 0.4'} 679 | dependencies: 680 | is-callable: 1.2.4 681 | is-date-object: 1.0.5 682 | is-symbol: 1.0.4 683 | dev: true 684 | 685 | /esbuild-android-64/0.14.51: 686 | resolution: {integrity: sha512-6FOuKTHnC86dtrKDmdSj2CkcKF8PnqkaIXqvgydqfJmqBazCPdw+relrMlhGjkvVdiiGV70rpdnyFmA65ekBCQ==} 687 | engines: {node: '>=12'} 688 | cpu: [x64] 689 | os: [android] 690 | requiresBuild: true 691 | dev: true 692 | optional: true 693 | 694 | /esbuild-android-arm64/0.14.51: 695 | resolution: {integrity: sha512-vBtp//5VVkZWmYYvHsqBRCMMi1MzKuMIn5XDScmnykMTu9+TD9v0NMEDqQxvtFToeYmojdo5UCV2vzMQWJcJ4A==} 696 | engines: {node: '>=12'} 697 | cpu: [arm64] 698 | os: [android] 699 | requiresBuild: true 700 | dev: true 701 | optional: true 702 | 703 | /esbuild-darwin-64/0.14.51: 704 | resolution: {integrity: sha512-YFmXPIOvuagDcwCejMRtCDjgPfnDu+bNeh5FU2Ryi68ADDVlWEpbtpAbrtf/lvFTWPexbgyKgzppNgsmLPr8PA==} 705 | engines: {node: '>=12'} 706 | cpu: [x64] 707 | os: [darwin] 708 | requiresBuild: true 709 | dev: true 710 | optional: true 711 | 712 | /esbuild-darwin-arm64/0.14.51: 713 | resolution: {integrity: sha512-juYD0QnSKwAMfzwKdIF6YbueXzS6N7y4GXPDeDkApz/1RzlT42mvX9jgNmyOlWKN7YzQAYbcUEJmZJYQGdf2ow==} 714 | engines: {node: '>=12'} 715 | cpu: [arm64] 716 | os: [darwin] 717 | requiresBuild: true 718 | dev: true 719 | optional: true 720 | 721 | /esbuild-freebsd-64/0.14.51: 722 | resolution: {integrity: sha512-cLEI/aXjb6vo5O2Y8rvVSQ7smgLldwYY5xMxqh/dQGfWO+R1NJOFsiax3IS4Ng300SVp7Gz3czxT6d6qf2cw0g==} 723 | engines: {node: '>=12'} 724 | cpu: [x64] 725 | os: [freebsd] 726 | requiresBuild: true 727 | dev: true 728 | optional: true 729 | 730 | /esbuild-freebsd-arm64/0.14.51: 731 | resolution: {integrity: sha512-TcWVw/rCL2F+jUgRkgLa3qltd5gzKjIMGhkVybkjk6PJadYInPtgtUBp1/hG+mxyigaT7ib+od1Xb84b+L+1Mg==} 732 | engines: {node: '>=12'} 733 | cpu: [arm64] 734 | os: [freebsd] 735 | requiresBuild: true 736 | dev: true 737 | optional: true 738 | 739 | /esbuild-linux-32/0.14.51: 740 | resolution: {integrity: sha512-RFqpyC5ChyWrjx8Xj2K0EC1aN0A37H6OJfmUXIASEqJoHcntuV3j2Efr9RNmUhMfNE6yEj2VpYuDteZLGDMr0w==} 741 | engines: {node: '>=12'} 742 | cpu: [ia32] 743 | os: [linux] 744 | requiresBuild: true 745 | dev: true 746 | optional: true 747 | 748 | /esbuild-linux-64/0.14.51: 749 | resolution: {integrity: sha512-dxjhrqo5i7Rq6DXwz5v+MEHVs9VNFItJmHBe1CxROWNf4miOGoQhqSG8StStbDkQ1Mtobg6ng+4fwByOhoQoeA==} 750 | engines: {node: '>=12'} 751 | cpu: [x64] 752 | os: [linux] 753 | requiresBuild: true 754 | dev: true 755 | optional: true 756 | 757 | /esbuild-linux-arm/0.14.51: 758 | resolution: {integrity: sha512-LsJynDxYF6Neg7ZC7748yweCDD+N8ByCv22/7IAZglIEniEkqdF4HCaa49JNDLw1UQGlYuhOB8ZT/MmcSWzcWg==} 759 | engines: {node: '>=12'} 760 | cpu: [arm] 761 | os: [linux] 762 | requiresBuild: true 763 | dev: true 764 | optional: true 765 | 766 | /esbuild-linux-arm64/0.14.51: 767 | resolution: {integrity: sha512-D9rFxGutoqQX3xJPxqd6o+kvYKeIbM0ifW2y0bgKk5HPgQQOo2k9/2Vpto3ybGYaFPCE5qTGtqQta9PoP6ZEzw==} 768 | engines: {node: '>=12'} 769 | cpu: [arm64] 770 | os: [linux] 771 | requiresBuild: true 772 | dev: true 773 | optional: true 774 | 775 | /esbuild-linux-mips64le/0.14.51: 776 | resolution: {integrity: sha512-vS54wQjy4IinLSlb5EIlLoln8buh1yDgliP4CuEHumrPk4PvvP4kTRIG4SzMXm6t19N0rIfT4bNdAxzJLg2k6A==} 777 | engines: {node: '>=12'} 778 | cpu: [mips64el] 779 | os: [linux] 780 | requiresBuild: true 781 | dev: true 782 | optional: true 783 | 784 | /esbuild-linux-ppc64le/0.14.51: 785 | resolution: {integrity: sha512-xcdd62Y3VfGoyphNP/aIV9LP+RzFw5M5Z7ja+zdpQHHvokJM7d0rlDRMN+iSSwvUymQkqZO+G/xjb4/75du8BQ==} 786 | engines: {node: '>=12'} 787 | cpu: [ppc64] 788 | os: [linux] 789 | requiresBuild: true 790 | dev: true 791 | optional: true 792 | 793 | /esbuild-linux-riscv64/0.14.51: 794 | resolution: {integrity: sha512-syXHGak9wkAnFz0gMmRBoy44JV0rp4kVCEA36P5MCeZcxFq8+fllBC2t6sKI23w3qd8Vwo9pTADCgjTSf3L3rA==} 795 | engines: {node: '>=12'} 796 | cpu: [riscv64] 797 | os: [linux] 798 | requiresBuild: true 799 | dev: true 800 | optional: true 801 | 802 | /esbuild-linux-s390x/0.14.51: 803 | resolution: {integrity: sha512-kFAJY3dv+Wq8o28K/C7xkZk/X34rgTwhknSsElIqoEo8armCOjMJ6NsMxm48KaWY2h2RUYGtQmr+RGuUPKBhyw==} 804 | engines: {node: '>=12'} 805 | cpu: [s390x] 806 | os: [linux] 807 | requiresBuild: true 808 | dev: true 809 | optional: true 810 | 811 | /esbuild-netbsd-64/0.14.51: 812 | resolution: {integrity: sha512-ZZBI7qrR1FevdPBVHz/1GSk1x5GDL/iy42Zy8+neEm/HA7ma+hH/bwPEjeHXKWUDvM36CZpSL/fn1/y9/Hb+1A==} 813 | engines: {node: '>=12'} 814 | cpu: [x64] 815 | os: [netbsd] 816 | requiresBuild: true 817 | dev: true 818 | optional: true 819 | 820 | /esbuild-openbsd-64/0.14.51: 821 | resolution: {integrity: sha512-7R1/p39M+LSVQVgDVlcY1KKm6kFKjERSX1lipMG51NPcspJD1tmiZSmmBXoY5jhHIu6JL1QkFDTx94gMYK6vfA==} 822 | engines: {node: '>=12'} 823 | cpu: [x64] 824 | os: [openbsd] 825 | requiresBuild: true 826 | dev: true 827 | optional: true 828 | 829 | /esbuild-sunos-64/0.14.51: 830 | resolution: {integrity: sha512-HoHaCswHxLEYN8eBTtyO0bFEWvA3Kdb++hSQ/lLG7TyKF69TeSG0RNoBRAs45x/oCeWaTDntEZlYwAfQlhEtJA==} 831 | engines: {node: '>=12'} 832 | cpu: [x64] 833 | os: [sunos] 834 | requiresBuild: true 835 | dev: true 836 | optional: true 837 | 838 | /esbuild-windows-32/0.14.51: 839 | resolution: {integrity: sha512-4rtwSAM35A07CBt1/X8RWieDj3ZUHQqUOaEo5ZBs69rt5WAFjP4aqCIobdqOy4FdhYw1yF8Z0xFBTyc9lgPtEg==} 840 | engines: {node: '>=12'} 841 | cpu: [ia32] 842 | os: [win32] 843 | requiresBuild: true 844 | dev: true 845 | optional: true 846 | 847 | /esbuild-windows-64/0.14.51: 848 | resolution: {integrity: sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA==} 849 | engines: {node: '>=12'} 850 | cpu: [x64] 851 | os: [win32] 852 | requiresBuild: true 853 | dev: true 854 | optional: true 855 | 856 | /esbuild-windows-arm64/0.14.51: 857 | resolution: {integrity: sha512-JQDqPjuOH7o+BsKMSddMfmVJXrnYZxXDHsoLHc0xgmAZkOOCflRmC43q31pk79F9xuyWY45jDBPolb5ZgGOf9g==} 858 | engines: {node: '>=12'} 859 | cpu: [arm64] 860 | os: [win32] 861 | requiresBuild: true 862 | dev: true 863 | optional: true 864 | 865 | /esbuild/0.14.51: 866 | resolution: {integrity: sha512-+CvnDitD7Q5sT7F+FM65sWkF8wJRf+j9fPcprxYV4j+ohmzVj2W7caUqH2s5kCaCJAfcAICjSlKhDCcvDpU7nw==} 867 | engines: {node: '>=12'} 868 | hasBin: true 869 | requiresBuild: true 870 | optionalDependencies: 871 | esbuild-android-64: 0.14.51 872 | esbuild-android-arm64: 0.14.51 873 | esbuild-darwin-64: 0.14.51 874 | esbuild-darwin-arm64: 0.14.51 875 | esbuild-freebsd-64: 0.14.51 876 | esbuild-freebsd-arm64: 0.14.51 877 | esbuild-linux-32: 0.14.51 878 | esbuild-linux-64: 0.14.51 879 | esbuild-linux-arm: 0.14.51 880 | esbuild-linux-arm64: 0.14.51 881 | esbuild-linux-mips64le: 0.14.51 882 | esbuild-linux-ppc64le: 0.14.51 883 | esbuild-linux-riscv64: 0.14.51 884 | esbuild-linux-s390x: 0.14.51 885 | esbuild-netbsd-64: 0.14.51 886 | esbuild-openbsd-64: 0.14.51 887 | esbuild-sunos-64: 0.14.51 888 | esbuild-windows-32: 0.14.51 889 | esbuild-windows-64: 0.14.51 890 | esbuild-windows-arm64: 0.14.51 891 | dev: true 892 | 893 | /escalade/3.1.1: 894 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 895 | engines: {node: '>=6'} 896 | dev: true 897 | 898 | /escape-string-regexp/1.0.5: 899 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 900 | engines: {node: '>=0.8.0'} 901 | dev: true 902 | 903 | /esprima/4.0.1: 904 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 905 | engines: {node: '>=4'} 906 | hasBin: true 907 | dev: true 908 | 909 | /extendable-error/0.1.7: 910 | resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} 911 | dev: true 912 | 913 | /external-editor/3.1.0: 914 | resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} 915 | engines: {node: '>=4'} 916 | dependencies: 917 | chardet: 0.7.0 918 | iconv-lite: 0.4.24 919 | tmp: 0.0.33 920 | dev: true 921 | 922 | /fast-glob/3.2.11: 923 | resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} 924 | engines: {node: '>=8.6.0'} 925 | dependencies: 926 | '@nodelib/fs.stat': 2.0.5 927 | '@nodelib/fs.walk': 1.2.8 928 | glob-parent: 5.1.2 929 | merge2: 1.4.1 930 | micromatch: 4.0.5 931 | dev: true 932 | 933 | /fastq/1.13.0: 934 | resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} 935 | dependencies: 936 | reusify: 1.0.4 937 | dev: true 938 | 939 | /fetch-blob/3.2.0: 940 | resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} 941 | engines: {node: ^12.20 || >= 14.13} 942 | dependencies: 943 | node-domexception: 1.0.0 944 | web-streams-polyfill: 3.2.1 945 | dev: true 946 | 947 | /fill-range/7.0.1: 948 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 949 | engines: {node: '>=8'} 950 | dependencies: 951 | to-regex-range: 5.0.1 952 | dev: true 953 | 954 | /find-up/4.1.0: 955 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 956 | engines: {node: '>=8'} 957 | dependencies: 958 | locate-path: 5.0.0 959 | path-exists: 4.0.0 960 | dev: true 961 | 962 | /find-up/5.0.0: 963 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 964 | engines: {node: '>=10'} 965 | dependencies: 966 | locate-path: 6.0.0 967 | path-exists: 4.0.0 968 | dev: true 969 | 970 | /find-yarn-workspace-root2/1.2.16: 971 | resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} 972 | dependencies: 973 | micromatch: 4.0.5 974 | pkg-dir: 4.2.0 975 | dev: true 976 | 977 | /formdata-polyfill/4.0.10: 978 | resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} 979 | engines: {node: '>=12.20.0'} 980 | dependencies: 981 | fetch-blob: 3.2.0 982 | dev: true 983 | 984 | /fs-extra/7.0.1: 985 | resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} 986 | engines: {node: '>=6 <7 || >=8'} 987 | dependencies: 988 | graceful-fs: 4.2.10 989 | jsonfile: 4.0.0 990 | universalify: 0.1.2 991 | dev: true 992 | 993 | /fs-extra/8.1.0: 994 | resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} 995 | engines: {node: '>=6 <7 || >=8'} 996 | dependencies: 997 | graceful-fs: 4.2.10 998 | jsonfile: 4.0.0 999 | universalify: 0.1.2 1000 | dev: true 1001 | 1002 | /fsevents/2.3.2: 1003 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 1004 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1005 | os: [darwin] 1006 | requiresBuild: true 1007 | dev: true 1008 | optional: true 1009 | 1010 | /function-bind/1.1.1: 1011 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1012 | dev: true 1013 | 1014 | /function.prototype.name/1.1.5: 1015 | resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} 1016 | engines: {node: '>= 0.4'} 1017 | dependencies: 1018 | call-bind: 1.0.2 1019 | define-properties: 1.1.4 1020 | es-abstract: 1.20.1 1021 | functions-have-names: 1.2.3 1022 | dev: true 1023 | 1024 | /functions-have-names/1.2.3: 1025 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 1026 | dev: true 1027 | 1028 | /get-caller-file/2.0.5: 1029 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 1030 | engines: {node: 6.* || 8.* || >= 10.*} 1031 | dev: true 1032 | 1033 | /get-func-name/2.0.0: 1034 | resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} 1035 | dev: true 1036 | 1037 | /get-intrinsic/1.1.2: 1038 | resolution: {integrity: sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==} 1039 | dependencies: 1040 | function-bind: 1.1.1 1041 | has: 1.0.3 1042 | has-symbols: 1.0.3 1043 | dev: true 1044 | 1045 | /get-symbol-description/1.0.0: 1046 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} 1047 | engines: {node: '>= 0.4'} 1048 | dependencies: 1049 | call-bind: 1.0.2 1050 | get-intrinsic: 1.1.2 1051 | dev: true 1052 | 1053 | /glob-parent/5.1.2: 1054 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1055 | engines: {node: '>= 6'} 1056 | dependencies: 1057 | is-glob: 4.0.3 1058 | dev: true 1059 | 1060 | /globby/11.1.0: 1061 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1062 | engines: {node: '>=10'} 1063 | dependencies: 1064 | array-union: 2.1.0 1065 | dir-glob: 3.0.1 1066 | fast-glob: 3.2.11 1067 | ignore: 5.2.0 1068 | merge2: 1.4.1 1069 | slash: 3.0.0 1070 | dev: true 1071 | 1072 | /graceful-fs/4.2.10: 1073 | resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} 1074 | dev: true 1075 | 1076 | /grapheme-splitter/1.0.4: 1077 | resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} 1078 | dev: true 1079 | 1080 | /hard-rejection/2.1.0: 1081 | resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} 1082 | engines: {node: '>=6'} 1083 | dev: true 1084 | 1085 | /has-bigints/1.0.2: 1086 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 1087 | dev: true 1088 | 1089 | /has-flag/3.0.0: 1090 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1091 | engines: {node: '>=4'} 1092 | dev: true 1093 | 1094 | /has-flag/4.0.0: 1095 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1096 | engines: {node: '>=8'} 1097 | dev: true 1098 | 1099 | /has-property-descriptors/1.0.0: 1100 | resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} 1101 | dependencies: 1102 | get-intrinsic: 1.1.2 1103 | dev: true 1104 | 1105 | /has-symbols/1.0.3: 1106 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 1107 | engines: {node: '>= 0.4'} 1108 | dev: true 1109 | 1110 | /has-tostringtag/1.0.0: 1111 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} 1112 | engines: {node: '>= 0.4'} 1113 | dependencies: 1114 | has-symbols: 1.0.3 1115 | dev: true 1116 | 1117 | /has/1.0.3: 1118 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1119 | engines: {node: '>= 0.4.0'} 1120 | dependencies: 1121 | function-bind: 1.1.1 1122 | dev: true 1123 | 1124 | /hosted-git-info/2.8.9: 1125 | resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} 1126 | dev: true 1127 | 1128 | /http-cache-semantics/4.1.0: 1129 | resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==} 1130 | dev: true 1131 | 1132 | /human-id/1.0.2: 1133 | resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} 1134 | dev: true 1135 | 1136 | /iconv-lite/0.4.24: 1137 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 1138 | engines: {node: '>=0.10.0'} 1139 | dependencies: 1140 | safer-buffer: 2.1.2 1141 | dev: true 1142 | 1143 | /ignore/5.2.0: 1144 | resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} 1145 | engines: {node: '>= 4'} 1146 | dev: true 1147 | 1148 | /indent-string/4.0.0: 1149 | resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} 1150 | engines: {node: '>=8'} 1151 | dev: true 1152 | 1153 | /internal-slot/1.0.3: 1154 | resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} 1155 | engines: {node: '>= 0.4'} 1156 | dependencies: 1157 | get-intrinsic: 1.1.2 1158 | has: 1.0.3 1159 | side-channel: 1.0.4 1160 | dev: true 1161 | 1162 | /is-arrayish/0.2.1: 1163 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 1164 | dev: true 1165 | 1166 | /is-bigint/1.0.4: 1167 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 1168 | dependencies: 1169 | has-bigints: 1.0.2 1170 | dev: true 1171 | 1172 | /is-boolean-object/1.1.2: 1173 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 1174 | engines: {node: '>= 0.4'} 1175 | dependencies: 1176 | call-bind: 1.0.2 1177 | has-tostringtag: 1.0.0 1178 | dev: true 1179 | 1180 | /is-callable/1.2.4: 1181 | resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==} 1182 | engines: {node: '>= 0.4'} 1183 | dev: true 1184 | 1185 | /is-ci/3.0.1: 1186 | resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} 1187 | hasBin: true 1188 | dependencies: 1189 | ci-info: 3.3.2 1190 | dev: true 1191 | 1192 | /is-core-module/2.9.0: 1193 | resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==} 1194 | dependencies: 1195 | has: 1.0.3 1196 | dev: true 1197 | 1198 | /is-date-object/1.0.5: 1199 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 1200 | engines: {node: '>= 0.4'} 1201 | dependencies: 1202 | has-tostringtag: 1.0.0 1203 | dev: true 1204 | 1205 | /is-extglob/2.1.1: 1206 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1207 | engines: {node: '>=0.10.0'} 1208 | dev: true 1209 | 1210 | /is-fullwidth-code-point/3.0.0: 1211 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1212 | engines: {node: '>=8'} 1213 | dev: true 1214 | 1215 | /is-glob/4.0.3: 1216 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1217 | engines: {node: '>=0.10.0'} 1218 | dependencies: 1219 | is-extglob: 2.1.1 1220 | dev: true 1221 | 1222 | /is-negative-zero/2.0.2: 1223 | resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} 1224 | engines: {node: '>= 0.4'} 1225 | dev: true 1226 | 1227 | /is-number-object/1.0.7: 1228 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 1229 | engines: {node: '>= 0.4'} 1230 | dependencies: 1231 | has-tostringtag: 1.0.0 1232 | dev: true 1233 | 1234 | /is-number/7.0.0: 1235 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1236 | engines: {node: '>=0.12.0'} 1237 | dev: true 1238 | 1239 | /is-plain-obj/1.1.0: 1240 | resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} 1241 | engines: {node: '>=0.10.0'} 1242 | dev: true 1243 | 1244 | /is-regex/1.1.4: 1245 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 1246 | engines: {node: '>= 0.4'} 1247 | dependencies: 1248 | call-bind: 1.0.2 1249 | has-tostringtag: 1.0.0 1250 | dev: true 1251 | 1252 | /is-shared-array-buffer/1.0.2: 1253 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} 1254 | dependencies: 1255 | call-bind: 1.0.2 1256 | dev: true 1257 | 1258 | /is-string/1.0.7: 1259 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 1260 | engines: {node: '>= 0.4'} 1261 | dependencies: 1262 | has-tostringtag: 1.0.0 1263 | dev: true 1264 | 1265 | /is-subdir/1.2.0: 1266 | resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} 1267 | engines: {node: '>=4'} 1268 | dependencies: 1269 | better-path-resolve: 1.0.0 1270 | dev: true 1271 | 1272 | /is-symbol/1.0.4: 1273 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 1274 | engines: {node: '>= 0.4'} 1275 | dependencies: 1276 | has-symbols: 1.0.3 1277 | dev: true 1278 | 1279 | /is-weakref/1.0.2: 1280 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 1281 | dependencies: 1282 | call-bind: 1.0.2 1283 | dev: true 1284 | 1285 | /is-windows/1.0.2: 1286 | resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} 1287 | engines: {node: '>=0.10.0'} 1288 | dev: true 1289 | 1290 | /isexe/2.0.0: 1291 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1292 | dev: true 1293 | 1294 | /js-tokens/4.0.0: 1295 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1296 | dev: true 1297 | 1298 | /js-yaml/3.14.1: 1299 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 1300 | hasBin: true 1301 | dependencies: 1302 | argparse: 1.0.10 1303 | esprima: 4.0.1 1304 | dev: true 1305 | 1306 | /json-parse-even-better-errors/2.3.1: 1307 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1308 | dev: true 1309 | 1310 | /jsonfile/4.0.0: 1311 | resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} 1312 | optionalDependencies: 1313 | graceful-fs: 4.2.10 1314 | dev: true 1315 | 1316 | /kind-of/6.0.3: 1317 | resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} 1318 | engines: {node: '>=0.10.0'} 1319 | dev: true 1320 | 1321 | /kleur/4.1.5: 1322 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 1323 | engines: {node: '>=6'} 1324 | dev: true 1325 | 1326 | /lines-and-columns/1.2.4: 1327 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1328 | dev: true 1329 | 1330 | /load-yaml-file/0.2.0: 1331 | resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} 1332 | engines: {node: '>=6'} 1333 | dependencies: 1334 | graceful-fs: 4.2.10 1335 | js-yaml: 3.14.1 1336 | pify: 4.0.1 1337 | strip-bom: 3.0.0 1338 | dev: true 1339 | 1340 | /local-pkg/0.4.2: 1341 | resolution: {integrity: sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==} 1342 | engines: {node: '>=14'} 1343 | dev: true 1344 | 1345 | /locate-path/5.0.0: 1346 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1347 | engines: {node: '>=8'} 1348 | dependencies: 1349 | p-locate: 4.1.0 1350 | dev: true 1351 | 1352 | /locate-path/6.0.0: 1353 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1354 | engines: {node: '>=10'} 1355 | dependencies: 1356 | p-locate: 5.0.0 1357 | dev: true 1358 | 1359 | /lodash.startcase/4.4.0: 1360 | resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} 1361 | dev: true 1362 | 1363 | /loupe/2.3.4: 1364 | resolution: {integrity: sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==} 1365 | dependencies: 1366 | get-func-name: 2.0.0 1367 | dev: true 1368 | 1369 | /lru-cache/4.1.5: 1370 | resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} 1371 | dependencies: 1372 | pseudomap: 1.0.2 1373 | yallist: 2.1.2 1374 | dev: true 1375 | 1376 | /map-obj/1.0.1: 1377 | resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} 1378 | engines: {node: '>=0.10.0'} 1379 | dev: true 1380 | 1381 | /map-obj/4.3.0: 1382 | resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} 1383 | engines: {node: '>=8'} 1384 | dev: true 1385 | 1386 | /meow/6.1.1: 1387 | resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} 1388 | engines: {node: '>=8'} 1389 | dependencies: 1390 | '@types/minimist': 1.2.2 1391 | camelcase-keys: 6.2.2 1392 | decamelize-keys: 1.1.0 1393 | hard-rejection: 2.1.0 1394 | minimist-options: 4.1.0 1395 | normalize-package-data: 2.5.0 1396 | read-pkg-up: 7.0.1 1397 | redent: 3.0.0 1398 | trim-newlines: 3.0.1 1399 | type-fest: 0.13.1 1400 | yargs-parser: 18.1.3 1401 | dev: true 1402 | 1403 | /merge2/1.4.1: 1404 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1405 | engines: {node: '>= 8'} 1406 | dev: true 1407 | 1408 | /micromatch/4.0.5: 1409 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1410 | engines: {node: '>=8.6'} 1411 | dependencies: 1412 | braces: 3.0.2 1413 | picomatch: 2.3.1 1414 | dev: true 1415 | 1416 | /min-indent/1.0.1: 1417 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 1418 | engines: {node: '>=4'} 1419 | dev: true 1420 | 1421 | /minimatch/5.1.0: 1422 | resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==} 1423 | engines: {node: '>=10'} 1424 | dependencies: 1425 | brace-expansion: 2.0.1 1426 | dev: true 1427 | 1428 | /minimist-options/4.1.0: 1429 | resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} 1430 | engines: {node: '>= 6'} 1431 | dependencies: 1432 | arrify: 1.0.1 1433 | is-plain-obj: 1.1.0 1434 | kind-of: 6.0.3 1435 | dev: true 1436 | 1437 | /mixme/0.5.4: 1438 | resolution: {integrity: sha512-3KYa4m4Vlqx98GPdOHghxSdNtTvcP8E0kkaJ5Dlh+h2DRzF7zpuVVcA8B0QpKd11YJeP9QQ7ASkKzOeu195Wzw==} 1439 | engines: {node: '>= 8.0.0'} 1440 | dev: true 1441 | 1442 | /mkdirp/1.0.4: 1443 | resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} 1444 | engines: {node: '>=10'} 1445 | hasBin: true 1446 | dev: true 1447 | 1448 | /ms/2.1.2: 1449 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1450 | dev: true 1451 | 1452 | /nanoid/3.3.4: 1453 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} 1454 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1455 | hasBin: true 1456 | dev: true 1457 | 1458 | /node-domexception/1.0.0: 1459 | resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} 1460 | engines: {node: '>=10.5.0'} 1461 | dev: true 1462 | 1463 | /node-fetch/3.2.10: 1464 | resolution: {integrity: sha512-MhuzNwdURnZ1Cp4XTazr69K0BTizsBroX7Zx3UgDSVcZYKF/6p0CBe4EUb/hLqmzVhl0UpYfgRljQ4yxE+iCxA==} 1465 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1466 | dependencies: 1467 | data-uri-to-buffer: 4.0.0 1468 | fetch-blob: 3.2.0 1469 | formdata-polyfill: 4.0.10 1470 | dev: true 1471 | 1472 | /normalize-package-data/2.5.0: 1473 | resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} 1474 | dependencies: 1475 | hosted-git-info: 2.8.9 1476 | resolve: 1.22.1 1477 | semver: 5.7.1 1478 | validate-npm-package-license: 3.0.4 1479 | dev: true 1480 | 1481 | /object-inspect/1.12.2: 1482 | resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} 1483 | dev: true 1484 | 1485 | /object-keys/1.1.1: 1486 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1487 | engines: {node: '>= 0.4'} 1488 | dev: true 1489 | 1490 | /object.assign/4.1.2: 1491 | resolution: {integrity: sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==} 1492 | engines: {node: '>= 0.4'} 1493 | dependencies: 1494 | call-bind: 1.0.2 1495 | define-properties: 1.1.4 1496 | has-symbols: 1.0.3 1497 | object-keys: 1.1.1 1498 | dev: true 1499 | 1500 | /os-tmpdir/1.0.2: 1501 | resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} 1502 | engines: {node: '>=0.10.0'} 1503 | dev: true 1504 | 1505 | /outdent/0.5.0: 1506 | resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} 1507 | dev: true 1508 | 1509 | /p-filter/2.1.0: 1510 | resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} 1511 | engines: {node: '>=8'} 1512 | dependencies: 1513 | p-map: 2.1.0 1514 | dev: true 1515 | 1516 | /p-limit/2.3.0: 1517 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 1518 | engines: {node: '>=6'} 1519 | dependencies: 1520 | p-try: 2.2.0 1521 | dev: true 1522 | 1523 | /p-limit/3.1.0: 1524 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1525 | engines: {node: '>=10'} 1526 | dependencies: 1527 | yocto-queue: 0.1.0 1528 | dev: true 1529 | 1530 | /p-locate/4.1.0: 1531 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 1532 | engines: {node: '>=8'} 1533 | dependencies: 1534 | p-limit: 2.3.0 1535 | dev: true 1536 | 1537 | /p-locate/5.0.0: 1538 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1539 | engines: {node: '>=10'} 1540 | dependencies: 1541 | p-limit: 3.1.0 1542 | dev: true 1543 | 1544 | /p-map/2.1.0: 1545 | resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} 1546 | engines: {node: '>=6'} 1547 | dev: true 1548 | 1549 | /p-try/2.2.0: 1550 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 1551 | engines: {node: '>=6'} 1552 | dev: true 1553 | 1554 | /parse-json/5.2.0: 1555 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1556 | engines: {node: '>=8'} 1557 | dependencies: 1558 | '@babel/code-frame': 7.18.6 1559 | error-ex: 1.3.2 1560 | json-parse-even-better-errors: 2.3.1 1561 | lines-and-columns: 1.2.4 1562 | dev: true 1563 | 1564 | /path-browserify/1.0.1: 1565 | resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} 1566 | dev: true 1567 | 1568 | /path-exists/4.0.0: 1569 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1570 | engines: {node: '>=8'} 1571 | dev: true 1572 | 1573 | /path-parse/1.0.7: 1574 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1575 | dev: true 1576 | 1577 | /path-type/4.0.0: 1578 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1579 | engines: {node: '>=8'} 1580 | dev: true 1581 | 1582 | /pathval/1.1.1: 1583 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} 1584 | dev: true 1585 | 1586 | /picocolors/1.0.0: 1587 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1588 | dev: true 1589 | 1590 | /picomatch/2.3.1: 1591 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1592 | engines: {node: '>=8.6'} 1593 | dev: true 1594 | 1595 | /pify/4.0.1: 1596 | resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} 1597 | engines: {node: '>=6'} 1598 | dev: true 1599 | 1600 | /pkg-dir/4.2.0: 1601 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 1602 | engines: {node: '>=8'} 1603 | dependencies: 1604 | find-up: 4.1.0 1605 | dev: true 1606 | 1607 | /postcss/8.4.14: 1608 | resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} 1609 | engines: {node: ^10 || ^12 || >=14} 1610 | dependencies: 1611 | nanoid: 3.3.4 1612 | picocolors: 1.0.0 1613 | source-map-js: 1.0.2 1614 | dev: true 1615 | 1616 | /preferred-pm/3.0.3: 1617 | resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==} 1618 | engines: {node: '>=10'} 1619 | dependencies: 1620 | find-up: 5.0.0 1621 | find-yarn-workspace-root2: 1.2.16 1622 | path-exists: 4.0.0 1623 | which-pm: 2.0.0 1624 | dev: true 1625 | 1626 | /prettier/1.19.1: 1627 | resolution: {integrity: sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==} 1628 | engines: {node: '>=4'} 1629 | hasBin: true 1630 | dev: true 1631 | 1632 | /prettier/2.7.1: 1633 | resolution: {integrity: sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==} 1634 | engines: {node: '>=10.13.0'} 1635 | hasBin: true 1636 | dev: true 1637 | 1638 | /pseudomap/1.0.2: 1639 | resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} 1640 | dev: true 1641 | 1642 | /queue-microtask/1.2.3: 1643 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1644 | dev: true 1645 | 1646 | /quick-lru/4.0.1: 1647 | resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} 1648 | engines: {node: '>=8'} 1649 | dev: true 1650 | 1651 | /read-pkg-up/7.0.1: 1652 | resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} 1653 | engines: {node: '>=8'} 1654 | dependencies: 1655 | find-up: 4.1.0 1656 | read-pkg: 5.2.0 1657 | type-fest: 0.8.1 1658 | dev: true 1659 | 1660 | /read-pkg/5.2.0: 1661 | resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} 1662 | engines: {node: '>=8'} 1663 | dependencies: 1664 | '@types/normalize-package-data': 2.4.1 1665 | normalize-package-data: 2.5.0 1666 | parse-json: 5.2.0 1667 | type-fest: 0.6.0 1668 | dev: true 1669 | 1670 | /read-yaml-file/1.1.0: 1671 | resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} 1672 | engines: {node: '>=6'} 1673 | dependencies: 1674 | graceful-fs: 4.2.10 1675 | js-yaml: 3.14.1 1676 | pify: 4.0.1 1677 | strip-bom: 3.0.0 1678 | dev: true 1679 | 1680 | /redent/3.0.0: 1681 | resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} 1682 | engines: {node: '>=8'} 1683 | dependencies: 1684 | indent-string: 4.0.0 1685 | strip-indent: 3.0.0 1686 | dev: true 1687 | 1688 | /regenerator-runtime/0.13.9: 1689 | resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==} 1690 | dev: true 1691 | 1692 | /regexp.prototype.flags/1.4.3: 1693 | resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} 1694 | engines: {node: '>= 0.4'} 1695 | dependencies: 1696 | call-bind: 1.0.2 1697 | define-properties: 1.1.4 1698 | functions-have-names: 1.2.3 1699 | dev: true 1700 | 1701 | /require-directory/2.1.1: 1702 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 1703 | engines: {node: '>=0.10.0'} 1704 | dev: true 1705 | 1706 | /require-main-filename/2.0.0: 1707 | resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} 1708 | dev: true 1709 | 1710 | /resolve-from/5.0.0: 1711 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1712 | engines: {node: '>=8'} 1713 | dev: true 1714 | 1715 | /resolve/1.22.1: 1716 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} 1717 | hasBin: true 1718 | dependencies: 1719 | is-core-module: 2.9.0 1720 | path-parse: 1.0.7 1721 | supports-preserve-symlinks-flag: 1.0.0 1722 | dev: true 1723 | 1724 | /reusify/1.0.4: 1725 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1726 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1727 | dev: true 1728 | 1729 | /rollup/2.77.2: 1730 | resolution: {integrity: sha512-m/4YzYgLcpMQbxX3NmAqDvwLATZzxt8bIegO78FZLl+lAgKJBd1DRAOeEiZcKOIOPjxE6ewHWHNgGEalFXuz1g==} 1731 | engines: {node: '>=10.0.0'} 1732 | hasBin: true 1733 | optionalDependencies: 1734 | fsevents: 2.3.2 1735 | dev: true 1736 | 1737 | /run-parallel/1.2.0: 1738 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1739 | dependencies: 1740 | queue-microtask: 1.2.3 1741 | dev: true 1742 | 1743 | /safer-buffer/2.1.2: 1744 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 1745 | dev: true 1746 | 1747 | /semver/5.7.1: 1748 | resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} 1749 | hasBin: true 1750 | dev: true 1751 | 1752 | /set-blocking/2.0.0: 1753 | resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} 1754 | dev: true 1755 | 1756 | /shebang-command/1.2.0: 1757 | resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} 1758 | engines: {node: '>=0.10.0'} 1759 | dependencies: 1760 | shebang-regex: 1.0.0 1761 | dev: true 1762 | 1763 | /shebang-regex/1.0.0: 1764 | resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} 1765 | engines: {node: '>=0.10.0'} 1766 | dev: true 1767 | 1768 | /shorthash/0.0.2: 1769 | resolution: {integrity: sha512-L/QRElsfTaCCzA7AJPXuin6/jgWjgmTfjdaXucQ5PauPypmqAZ7t4GueaCv+Jti0M8S2Iv1C/ryD+aWY/KUGCA==} 1770 | dev: true 1771 | 1772 | /side-channel/1.0.4: 1773 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 1774 | dependencies: 1775 | call-bind: 1.0.2 1776 | get-intrinsic: 1.1.2 1777 | object-inspect: 1.12.2 1778 | dev: true 1779 | 1780 | /signal-exit/3.0.7: 1781 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 1782 | dev: true 1783 | 1784 | /slash/3.0.0: 1785 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1786 | engines: {node: '>=8'} 1787 | dev: true 1788 | 1789 | /smartwrap/2.0.2: 1790 | resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} 1791 | engines: {node: '>=6'} 1792 | hasBin: true 1793 | dependencies: 1794 | array.prototype.flat: 1.3.0 1795 | breakword: 1.0.5 1796 | grapheme-splitter: 1.0.4 1797 | strip-ansi: 6.0.1 1798 | wcwidth: 1.0.1 1799 | yargs: 15.4.1 1800 | dev: true 1801 | 1802 | /source-map-js/1.0.2: 1803 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 1804 | engines: {node: '>=0.10.0'} 1805 | dev: true 1806 | 1807 | /spawndamnit/2.0.0: 1808 | resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} 1809 | dependencies: 1810 | cross-spawn: 5.1.0 1811 | signal-exit: 3.0.7 1812 | dev: true 1813 | 1814 | /spdx-correct/3.1.1: 1815 | resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} 1816 | dependencies: 1817 | spdx-expression-parse: 3.0.1 1818 | spdx-license-ids: 3.0.11 1819 | dev: true 1820 | 1821 | /spdx-exceptions/2.3.0: 1822 | resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} 1823 | dev: true 1824 | 1825 | /spdx-expression-parse/3.0.1: 1826 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} 1827 | dependencies: 1828 | spdx-exceptions: 2.3.0 1829 | spdx-license-ids: 3.0.11 1830 | dev: true 1831 | 1832 | /spdx-license-ids/3.0.11: 1833 | resolution: {integrity: sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==} 1834 | dev: true 1835 | 1836 | /sprintf-js/1.0.3: 1837 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 1838 | dev: true 1839 | 1840 | /stream-transform/2.1.3: 1841 | resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} 1842 | dependencies: 1843 | mixme: 0.5.4 1844 | dev: true 1845 | 1846 | /string-width/4.2.3: 1847 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1848 | engines: {node: '>=8'} 1849 | dependencies: 1850 | emoji-regex: 8.0.0 1851 | is-fullwidth-code-point: 3.0.0 1852 | strip-ansi: 6.0.1 1853 | dev: true 1854 | 1855 | /string.prototype.trimend/1.0.5: 1856 | resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==} 1857 | dependencies: 1858 | call-bind: 1.0.2 1859 | define-properties: 1.1.4 1860 | es-abstract: 1.20.1 1861 | dev: true 1862 | 1863 | /string.prototype.trimstart/1.0.5: 1864 | resolution: {integrity: sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==} 1865 | dependencies: 1866 | call-bind: 1.0.2 1867 | define-properties: 1.1.4 1868 | es-abstract: 1.20.1 1869 | dev: true 1870 | 1871 | /strip-ansi/6.0.1: 1872 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1873 | engines: {node: '>=8'} 1874 | dependencies: 1875 | ansi-regex: 5.0.1 1876 | dev: true 1877 | 1878 | /strip-bom/3.0.0: 1879 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 1880 | engines: {node: '>=4'} 1881 | dev: true 1882 | 1883 | /strip-indent/3.0.0: 1884 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 1885 | engines: {node: '>=8'} 1886 | dependencies: 1887 | min-indent: 1.0.1 1888 | dev: true 1889 | 1890 | /supports-color/5.5.0: 1891 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1892 | engines: {node: '>=4'} 1893 | dependencies: 1894 | has-flag: 3.0.0 1895 | dev: true 1896 | 1897 | /supports-color/7.2.0: 1898 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1899 | engines: {node: '>=8'} 1900 | dependencies: 1901 | has-flag: 4.0.0 1902 | dev: true 1903 | 1904 | /supports-preserve-symlinks-flag/1.0.0: 1905 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1906 | engines: {node: '>= 0.4'} 1907 | dev: true 1908 | 1909 | /term-size/2.2.1: 1910 | resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} 1911 | engines: {node: '>=8'} 1912 | dev: true 1913 | 1914 | /tinypool/0.2.4: 1915 | resolution: {integrity: sha512-Vs3rhkUH6Qq1t5bqtb816oT+HeJTXfwt2cbPH17sWHIYKTotQIFPk3tf2fgqRrVyMDVOc1EnPgzIxfIulXVzwQ==} 1916 | engines: {node: '>=14.0.0'} 1917 | dev: true 1918 | 1919 | /tinyspy/1.0.0: 1920 | resolution: {integrity: sha512-FI5B2QdODQYDRjfuLF+OrJ8bjWRMCXokQPcwKm0W3IzcbUmBNv536cQc7eXGoAuXphZwgx1DFbqImwzz08Fnhw==} 1921 | engines: {node: '>=14.0.0'} 1922 | dev: true 1923 | 1924 | /tmp/0.0.33: 1925 | resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} 1926 | engines: {node: '>=0.6.0'} 1927 | dependencies: 1928 | os-tmpdir: 1.0.2 1929 | dev: true 1930 | 1931 | /to-regex-range/5.0.1: 1932 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1933 | engines: {node: '>=8.0'} 1934 | dependencies: 1935 | is-number: 7.0.0 1936 | dev: true 1937 | 1938 | /trim-newlines/3.0.1: 1939 | resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} 1940 | engines: {node: '>=8'} 1941 | dev: true 1942 | 1943 | /ts-morph/15.1.0: 1944 | resolution: {integrity: sha512-RBsGE2sDzUXFTnv8Ba22QfeuKbgvAGJFuTN7HfmIRUkgT/NaVLfDM/8OFm2NlFkGlWEXdpW5OaFIp1jvqdDuOg==} 1945 | dependencies: 1946 | '@ts-morph/common': 0.16.0 1947 | code-block-writer: 11.0.3 1948 | dev: true 1949 | 1950 | /tty-table/4.1.6: 1951 | resolution: {integrity: sha512-kRj5CBzOrakV4VRRY5kUWbNYvo/FpOsz65DzI5op9P+cHov3+IqPbo1JE1ZnQGkHdZgNFDsrEjrfqqy/Ply9fw==} 1952 | engines: {node: '>=8.0.0'} 1953 | hasBin: true 1954 | dependencies: 1955 | chalk: 4.1.2 1956 | csv: 5.5.3 1957 | kleur: 4.1.5 1958 | smartwrap: 2.0.2 1959 | strip-ansi: 6.0.1 1960 | wcwidth: 1.0.1 1961 | yargs: 17.5.1 1962 | dev: true 1963 | 1964 | /type-detect/4.0.8: 1965 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 1966 | engines: {node: '>=4'} 1967 | dev: true 1968 | 1969 | /type-fest/0.13.1: 1970 | resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} 1971 | engines: {node: '>=10'} 1972 | dev: true 1973 | 1974 | /type-fest/0.6.0: 1975 | resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} 1976 | engines: {node: '>=8'} 1977 | dev: true 1978 | 1979 | /type-fest/0.8.1: 1980 | resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} 1981 | engines: {node: '>=8'} 1982 | dev: true 1983 | 1984 | /typescript/4.7.4: 1985 | resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==} 1986 | engines: {node: '>=4.2.0'} 1987 | hasBin: true 1988 | dev: true 1989 | 1990 | /unbox-primitive/1.0.2: 1991 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 1992 | dependencies: 1993 | call-bind: 1.0.2 1994 | has-bigints: 1.0.2 1995 | has-symbols: 1.0.3 1996 | which-boxed-primitive: 1.0.2 1997 | dev: true 1998 | 1999 | /universalify/0.1.2: 2000 | resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} 2001 | engines: {node: '>= 4.0.0'} 2002 | dev: true 2003 | 2004 | /validate-npm-package-license/3.0.4: 2005 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} 2006 | dependencies: 2007 | spdx-correct: 3.1.1 2008 | spdx-expression-parse: 3.0.1 2009 | dev: true 2010 | 2011 | /vite/3.0.4: 2012 | resolution: {integrity: sha512-NU304nqnBeOx2MkQnskBQxVsa0pRAH5FphokTGmyy8M3oxbvw7qAXts2GORxs+h/2vKsD+osMhZ7An6yK6F1dA==} 2013 | engines: {node: ^14.18.0 || >=16.0.0} 2014 | hasBin: true 2015 | peerDependencies: 2016 | less: '*' 2017 | sass: '*' 2018 | stylus: '*' 2019 | terser: ^5.4.0 2020 | peerDependenciesMeta: 2021 | less: 2022 | optional: true 2023 | sass: 2024 | optional: true 2025 | stylus: 2026 | optional: true 2027 | terser: 2028 | optional: true 2029 | dependencies: 2030 | esbuild: 0.14.51 2031 | postcss: 8.4.14 2032 | resolve: 1.22.1 2033 | rollup: 2.77.2 2034 | optionalDependencies: 2035 | fsevents: 2.3.2 2036 | dev: true 2037 | 2038 | /vitest/0.20.2: 2039 | resolution: {integrity: sha512-AFXTHrwG4d2OO6SAL8WP5ZkOwLtgeF4tlrHfXFqrHc+5chNegeR53pge0lv/C4316SqJ2DbYaUBH8vh3CdF+BQ==} 2040 | engines: {node: '>=v14.16.0'} 2041 | hasBin: true 2042 | peerDependencies: 2043 | '@edge-runtime/vm': '*' 2044 | '@vitest/browser': '*' 2045 | '@vitest/ui': '*' 2046 | c8: '*' 2047 | happy-dom: '*' 2048 | jsdom: '*' 2049 | peerDependenciesMeta: 2050 | '@edge-runtime/vm': 2051 | optional: true 2052 | '@vitest/browser': 2053 | optional: true 2054 | '@vitest/ui': 2055 | optional: true 2056 | c8: 2057 | optional: true 2058 | happy-dom: 2059 | optional: true 2060 | jsdom: 2061 | optional: true 2062 | dependencies: 2063 | '@types/chai': 4.3.1 2064 | '@types/chai-subset': 1.3.3 2065 | '@types/node': 18.6.3 2066 | chai: 4.3.6 2067 | debug: 4.3.4 2068 | local-pkg: 0.4.2 2069 | tinypool: 0.2.4 2070 | tinyspy: 1.0.0 2071 | vite: 3.0.4 2072 | transitivePeerDependencies: 2073 | - less 2074 | - sass 2075 | - stylus 2076 | - supports-color 2077 | - terser 2078 | dev: true 2079 | 2080 | /wcwidth/1.0.1: 2081 | resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} 2082 | dependencies: 2083 | defaults: 1.0.3 2084 | dev: true 2085 | 2086 | /web-streams-polyfill/3.2.1: 2087 | resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} 2088 | engines: {node: '>= 8'} 2089 | dev: true 2090 | 2091 | /which-boxed-primitive/1.0.2: 2092 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 2093 | dependencies: 2094 | is-bigint: 1.0.4 2095 | is-boolean-object: 1.1.2 2096 | is-number-object: 1.0.7 2097 | is-string: 1.0.7 2098 | is-symbol: 1.0.4 2099 | dev: true 2100 | 2101 | /which-module/2.0.0: 2102 | resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} 2103 | dev: true 2104 | 2105 | /which-pm/2.0.0: 2106 | resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} 2107 | engines: {node: '>=8.15'} 2108 | dependencies: 2109 | load-yaml-file: 0.2.0 2110 | path-exists: 4.0.0 2111 | dev: true 2112 | 2113 | /which/1.3.1: 2114 | resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} 2115 | hasBin: true 2116 | dependencies: 2117 | isexe: 2.0.0 2118 | dev: true 2119 | 2120 | /wrap-ansi/6.2.0: 2121 | resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} 2122 | engines: {node: '>=8'} 2123 | dependencies: 2124 | ansi-styles: 4.3.0 2125 | string-width: 4.2.3 2126 | strip-ansi: 6.0.1 2127 | dev: true 2128 | 2129 | /wrap-ansi/7.0.0: 2130 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 2131 | engines: {node: '>=10'} 2132 | dependencies: 2133 | ansi-styles: 4.3.0 2134 | string-width: 4.2.3 2135 | strip-ansi: 6.0.1 2136 | dev: true 2137 | 2138 | /y18n/4.0.3: 2139 | resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} 2140 | dev: true 2141 | 2142 | /y18n/5.0.8: 2143 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 2144 | engines: {node: '>=10'} 2145 | dev: true 2146 | 2147 | /yallist/2.1.2: 2148 | resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} 2149 | dev: true 2150 | 2151 | /yargs-parser/18.1.3: 2152 | resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} 2153 | engines: {node: '>=6'} 2154 | dependencies: 2155 | camelcase: 5.3.1 2156 | decamelize: 1.2.0 2157 | dev: true 2158 | 2159 | /yargs-parser/21.0.1: 2160 | resolution: {integrity: sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==} 2161 | engines: {node: '>=12'} 2162 | dev: true 2163 | 2164 | /yargs/15.4.1: 2165 | resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} 2166 | engines: {node: '>=8'} 2167 | dependencies: 2168 | cliui: 6.0.0 2169 | decamelize: 1.2.0 2170 | find-up: 4.1.0 2171 | get-caller-file: 2.0.5 2172 | require-directory: 2.1.1 2173 | require-main-filename: 2.0.0 2174 | set-blocking: 2.0.0 2175 | string-width: 4.2.3 2176 | which-module: 2.0.0 2177 | y18n: 4.0.3 2178 | yargs-parser: 18.1.3 2179 | dev: true 2180 | 2181 | /yargs/17.5.1: 2182 | resolution: {integrity: sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==} 2183 | engines: {node: '>=12'} 2184 | dependencies: 2185 | cliui: 7.0.4 2186 | escalade: 3.1.1 2187 | get-caller-file: 2.0.5 2188 | require-directory: 2.1.1 2189 | string-width: 4.2.3 2190 | y18n: 5.0.8 2191 | yargs-parser: 21.0.1 2192 | dev: true 2193 | 2194 | /yocto-queue/0.1.0: 2195 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2196 | engines: {node: '>=10'} 2197 | dev: true 2198 | -------------------------------------------------------------------------------- /scripts/build.js: -------------------------------------------------------------------------------- 1 | import fs, { mkdirSync } from 'node:fs' 2 | import { build } from 'esbuild' 3 | import { Project } from 'ts-morph' 4 | 5 | const project = new Project({ 6 | compilerOptions: { 7 | emitDeclarationOnly: true, 8 | declarationDir: 'dist/dts', 9 | }, 10 | tsConfigFilePath: './tsconfig.json', 11 | }) 12 | 13 | function emitToSingleFile() { 14 | const result = project.emitToMemory() 15 | const contents = [] 16 | // output the emitted files to the console 17 | for (const file of result.getFiles()) { 18 | if (file.filePath.endsWith('with-cache.d.ts')) { 19 | contents.push(`declare type ResponseLike = Omit; 20 | export declare function isCached(response: ResponseLike): boolean;`) 21 | contents.push(file.text.replace(`export { isCached } from './convert.js';`, '')); 22 | } 23 | } 24 | mkdirSync(new URL('../dist', import.meta.url), { recursive: true }) 25 | fs.writeFileSync(new URL('../dist/index.d.ts', import.meta.url), contents.join('')) 26 | } 27 | emitToSingleFile() 28 | 29 | await build({ 30 | entryPoints: ['src/index.ts'], 31 | bundle: true, 32 | outfile: 'dist/index.js', 33 | format: 'esm', 34 | platform: 'node', 35 | target: 'node14', 36 | minify: true, 37 | sourcemap: 'linked', 38 | watch: process.argv.includes('--watch') 39 | ? { 40 | onRebuild: async (error) => { 41 | if (error) { 42 | console.error('watch build failed:', error) 43 | } else { 44 | await Promise.all( 45 | project 46 | .getSourceFiles() 47 | .map((sourceFile) => sourceFile.refreshFromFileSystem()) 48 | ) 49 | emitToSingleFile() 50 | } 51 | }, 52 | } 53 | : undefined, 54 | }) 55 | 56 | -------------------------------------------------------------------------------- /src/convert.ts: -------------------------------------------------------------------------------- 1 | import type { OutgoingMessage } from 'node:http'; 2 | import type CachePolicy from "http-cache-semantics"; 3 | 4 | interface CachedResponse extends CachePolicy.Response { 5 | ok: boolean; 6 | redirected: boolean; 7 | statusText: string; 8 | url: string; 9 | body?: number[]; 10 | } 11 | 12 | export function webToCachePolicyRequest({ url, method, headers: _headers }: Request): CachePolicy.Request { 13 | const headers: CachePolicy.Headers = {}; 14 | for (const [key, value] of _headers) { 15 | headers[key] = value; 16 | } 17 | return { 18 | method, 19 | url, 20 | headers, 21 | }; 22 | } 23 | 24 | export function webToCachePolicyResponse({ status, headers: _headers }: Response): CachePolicy.Response { 25 | const headers: CachePolicy.Headers = {}; 26 | for (const [key, value] of _headers) { 27 | headers[key] = value; 28 | } 29 | return { 30 | status, 31 | headers, 32 | }; 33 | } 34 | 35 | async function readResponseBody(response: OutgoingMessage | Response): Promise { 36 | if ('on' in response) { 37 | let body = Buffer.from([]); 38 | let resBodyComplete = new Promise((resolve, reject) => { 39 | response.on('data', (d) => { 40 | body = Buffer.concat([body, d]); 41 | }); 42 | response.on('end', () => { 43 | resolve(body); 44 | }); 45 | response.on('error', (err) => { 46 | reject(err); 47 | }); 48 | }); 49 | return resBodyComplete.then(buf => Array.from(Uint8Array.from(buf))); 50 | } 51 | if (!response.body) return; 52 | return Array.from(Buffer.from(await response.clone().arrayBuffer())); 53 | } 54 | 55 | export async function webToCachedResponse(response: Response): Promise { 56 | const { url, ok, redirected, status, statusText, headers: _headers } = response; 57 | const body = await readResponseBody(response); 58 | const headers: CachePolicy.Headers = {}; 59 | for (const [key, value] of _headers) { 60 | headers[key] = value; 61 | } 62 | return { url, ok, redirected, status, statusText, headers, body }; 63 | } 64 | 65 | export function cachedResponseToWeb(cachedResponse: CachedResponse): Response { 66 | const { body, headers: _headers = {}, ...init } = cachedResponse; 67 | const headers = new Headers(); 68 | for (const [key, value] of Object.entries(_headers)) { 69 | if (Array.isArray(value)) { 70 | headers.set(key, value.join(' ')); 71 | } else if (typeof value !== 'undefined') { 72 | headers.set(key, value); 73 | } 74 | } 75 | if (body) { 76 | return new Response(Buffer.from(new Uint8Array(body)), { ...init, headers }); 77 | } else { 78 | return new Response(body, { ...init, headers }); 79 | } 80 | } 81 | 82 | const IS_CACHED = Symbol('cached'); 83 | 84 | export function updateHeaders(reqOrRes: Request, headers: CachePolicy.Headers): Request; 85 | export function updateHeaders(reqOrRes: Response, headers: CachePolicy.Headers): Response; 86 | export function updateHeaders(reqOrRes: Request | Response, _headers: CachePolicy.Headers) { 87 | const headers = new Headers(reqOrRes.headers); 88 | for (const [key, value] of Object.entries(_headers)) { 89 | if (headers.has(key) && headers.get(key) === value) continue; 90 | if (Array.isArray(value)) { 91 | value.forEach((val) => headers.append(key, val)); 92 | } else if (typeof value !== "undefined") { 93 | headers.set(key, value); 94 | } 95 | } 96 | if (reqOrRes instanceof Request) { 97 | const request = new Request(reqOrRes.url, { ...reqOrRes, headers }); 98 | Object.defineProperty(request, IS_CACHED, { value: true, enumerable: false, writable: false }); 99 | return request; 100 | } else if (reqOrRes instanceof Response) { 101 | const response = new Response(reqOrRes.body, { ...reqOrRes, headers }); 102 | Object.defineProperty(response, IS_CACHED, { value: true, enumerable: false, writable: false }); 103 | return response; 104 | } 105 | } 106 | 107 | export type ResponseLike = Omit 108 | export function isCached(response: ResponseLike): boolean { 109 | return IS_CACHED in response; 110 | } 111 | -------------------------------------------------------------------------------- /src/env.d.ts: -------------------------------------------------------------------------------- 1 | declare module "shorthash" { 2 | function unique(value: string): string; 3 | } 4 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export type { WithCacheOptions, AsyncMap } from './with-cache'; 2 | export { withCache, isCached } from './with-cache.js' 3 | -------------------------------------------------------------------------------- /src/with-cache.ts: -------------------------------------------------------------------------------- 1 | import CachePolicy from "http-cache-semantics"; 2 | import { unique } from "shorthash"; 3 | 4 | import { webToCachePolicyRequest, webToCachePolicyResponse, cachedResponseToWeb, webToCachedResponse, updateHeaders } from './convert.js'; 5 | export { isCached } from './convert.js'; 6 | 7 | export interface AsyncMap { 8 | clear(): Promise; 9 | delete(key: K): Promise; 10 | get(key: K): Promise; 11 | has(key: K): Promise; 12 | set(key: K, value: V): Promise; 13 | readonly size: number; 14 | } 15 | 16 | type Cache = Map | AsyncMap; 17 | 18 | export interface WithCacheOptions { 19 | cache?: Cache; 20 | } 21 | 22 | function normalizeURL(input: URL) { 23 | if (input.search) { 24 | input.searchParams.sort(); 25 | input.search = `?${input.searchParams}` 26 | } 27 | if (input.pathname === '/') { 28 | return input.toString().replace(/\/$/, ''); 29 | } 30 | return input.toString(); 31 | } 32 | 33 | function getVaryKey(request: Request) { 34 | const url = new URL(request.url); 35 | return `VARY:${normalizeURL(url)}` 36 | } 37 | 38 | async function getCacheKey(cache: Cache, request: Request, init?: RequestInit) { 39 | if (init?.cache === 'no-store') return null; 40 | 41 | const url = new URL(request.url); 42 | const headers = Object.fromEntries(new Headers(init?.headers).entries()); 43 | let key = `${request.method}:${normalizeURL(url)}`; 44 | 45 | if (Object.keys(headers).length !== 0) { 46 | const cachedVary = await cache.get(getVaryKey(request)); 47 | if (cachedVary) { 48 | const vary = JSON.parse(cachedVary); 49 | if (vary === '*') { 50 | key += `:${unique(JSON.stringify(headers))}`; 51 | } else { 52 | let varies: Record = {}; 53 | for (const varyKey of vary.split(',').map((v: string) => v.trim().toLowerCase())) { 54 | if (headers[varyKey]) { 55 | varies[varyKey] = headers[varyKey]; 56 | } 57 | } 58 | if (Object.keys(varies).length > 0) { 59 | key += `:${unique(JSON.stringify(varies))}` 60 | } 61 | } 62 | } else { 63 | key += `:${unique(JSON.stringify(headers))}`; 64 | } 65 | } 66 | 67 | if (['POST', 'PATCH', 'PUT'].includes(request.method)) { 68 | let body = init?.body; 69 | 70 | // If we can't read `body` or `body` is streamable, skip the cache by returning `undefined`. 71 | if (!body) return; 72 | if (body instanceof ReadableStream || (typeof body === 'object' && 'on' in (body as any))) return; 73 | 74 | // Convert valid `BodyInit` values to hashable strings 75 | if (body instanceof Blob) body = await body.text() 76 | if (body instanceof URLSearchParams) { 77 | body.sort(); 78 | body = body.toString() 79 | } 80 | if (body instanceof FormData) { 81 | const obj: Record = {}; 82 | for (const [key, value] of body) { 83 | obj[key] = value; 84 | } 85 | body = JSON.stringify(obj); 86 | } 87 | const hash = unique(body.toString()); 88 | return `${key}:${hash}`; 89 | } 90 | return key; 91 | } 92 | 93 | export function withCache any>(fetch: Fetch, opts?: WithCacheOptions): Fetch { 94 | const cache = opts?.cache ?? new Map(); 95 | return (async (input: RequestInfo | URL, init?: RequestInit): Promise => { 96 | let request: Request; 97 | if (input instanceof Request) { 98 | request = input 99 | } else { 100 | if (input instanceof URL) { 101 | input = input.toString(); 102 | } 103 | request = new Request(input, init); 104 | } 105 | const cacheKey = await getCacheKey(cache, request, init) 106 | // No valid cache key, skip custom logic 107 | if (!cacheKey) { 108 | return fetch(request.url, request); 109 | } 110 | 111 | const maybeCachedItem = await cache.get(cacheKey); 112 | if (typeof maybeCachedItem === "string") { 113 | // Deserialize cached policy and response 114 | const { policy: cachedPolicy, response: cachedResponse } = JSON.parse(maybeCachedItem); 115 | const policy = CachePolicy.fromObject(cachedPolicy); 116 | const cacheableRequest = webToCachePolicyRequest(request); 117 | 118 | // If cached response is still valid, return with updated headers 119 | if (policy.satisfiesWithoutRevalidation(cacheableRequest)) { 120 | return updateHeaders(cachedResponseToWeb(cachedResponse), policy.responseHeaders()) as ReturnType; 121 | } 122 | 123 | // Otherwise, let's revalidate the response 124 | const revalidationRequest = updateHeaders(request, policy.revalidationHeaders(cacheableRequest)); 125 | const revalidatedResponse = await fetch(revalidationRequest); 126 | const { policy: revalidatedPolicy, modified } = policy.revalidatedPolicy( 127 | webToCachePolicyRequest(request), 128 | webToCachePolicyResponse(revalidatedResponse) 129 | ); 130 | let response: Response = modified ? revalidatedResponse : cachedResponseToWeb(cachedResponse); 131 | // We can't store this response! Clear from the cache and return it. 132 | if (!revalidatedPolicy.storable()) { 133 | await cache.delete(cacheKey); 134 | return response; 135 | } 136 | 137 | response = updateHeaders(response, revalidatedPolicy.responseHeaders()) 138 | 139 | // Update the cache with the revalidated response 140 | await (cache as any).set( 141 | cacheKey, 142 | JSON.stringify({ policy: revalidatedPolicy.toObject(), response: await webToCachedResponse(response) }), 143 | { ttl: revalidatedPolicy.timeToLive() } 144 | ); 145 | 146 | const vary = response.headers.get('vary'); 147 | if (vary) { 148 | await (cache as any).set( 149 | getVaryKey(request), 150 | JSON.stringify(vary), 151 | { ttl: revalidatedPolicy.timeToLive() } 152 | ); 153 | } 154 | 155 | // Return the revalidated Response 156 | return response as ReturnType; 157 | } 158 | 159 | // node-fetch needs a URL first 160 | const response = await fetch(request.url, request); 161 | const policy = new CachePolicy(webToCachePolicyRequest(request), webToCachePolicyResponse(response)); 162 | 163 | // We can't store this response! Just return it. 164 | if (!policy.storable()) { 165 | return response; 166 | } 167 | 168 | // Store CachePolicy and Response in the cache 169 | await (cache as any).set( 170 | cacheKey, 171 | JSON.stringify({ policy: policy.toObject(), response: await webToCachedResponse(response) }), 172 | { ttl: policy.timeToLive() } 173 | ); 174 | 175 | const vary = response.headers.get('vary'); 176 | if (vary) { 177 | await (cache as any).set( 178 | getVaryKey(request), 179 | JSON.stringify(vary), 180 | { ttl: policy.timeToLive() } 181 | ); 182 | } 183 | 184 | return response as ReturnType; 185 | }) as Fetch; 186 | } 187 | -------------------------------------------------------------------------------- /test/basic.test.ts: -------------------------------------------------------------------------------- 1 | import { withCache, isCached } from "../src/"; 2 | import { describe, it, expect, beforeEach } from "vitest"; 3 | 4 | const fetch = async (...args: any) => 5 | new Response(null, { 6 | status: 200, 7 | headers: { "Cache-Control": `s-maxage=604800` }, 8 | }); 9 | 10 | describe("sanity", () => { 11 | it("exports", () => { 12 | expect(withCache).toBeTypeOf("function"); 13 | expect(isCached).toBeTypeOf("function"); 14 | }); 15 | 16 | it("comes with default cache", async () => { 17 | const fetchWithCache = withCache(fetch); 18 | await fetchWithCache("https://example.com/"); 19 | const res = await fetchWithCache("https://example.com/"); 20 | expect(isCached(res)).toBe(true); 21 | }); 22 | }); 23 | 24 | describe("basics", () => { 25 | let cache: Map; 26 | let fetchWithCache: any; 27 | 28 | beforeEach(() => { 29 | cache = new Map(); 30 | fetchWithCache = withCache(fetch, { cache }); 31 | }); 32 | 33 | it("appends to cache", async () => { 34 | expect(cache.size).toBe(0); 35 | const res = await fetchWithCache("https://example.com/"); 36 | expect(isCached(res)).toBe(false); 37 | expect(res.status).toBe(200); 38 | expect(cache.size).toBe(1); 39 | }); 40 | 41 | it("reads from cache", async () => { 42 | expect(cache.size).toBe(0); 43 | await fetchWithCache("https://example.com/"); 44 | const res = await fetchWithCache("https://example.com/"); 45 | expect(isCached(res)).toBe(true); 46 | expect(cache.size).toBe(1); 47 | }); 48 | }); 49 | 50 | describe("custom cache", () => { 51 | it("allows custom cache", async () => { 52 | const cache = new Map(); 53 | let called = 0; 54 | const set = () => { 55 | called++; 56 | return cache; 57 | }; 58 | cache.set = set; 59 | expect(cache.size).toBe(0); 60 | const fetchWithCache = withCache(fetch, { cache }); 61 | const res1 = await fetchWithCache("https://example.com/"); 62 | expect(res1.status).toBe(200); 63 | expect(called).toBe(1); 64 | }); 65 | }); 66 | 67 | describe("behavior", () => { 68 | let cache: Map; 69 | let fetchWithCache: any; 70 | 71 | beforeEach(() => { 72 | cache = new Map(); 73 | fetchWithCache = withCache(fetch, { cache }); 74 | }); 75 | 76 | it("appends to cache", async () => { 77 | expect(cache.size).toBe(0); 78 | const res1 = await fetchWithCache("https://example.com/", { headers: { 'x-test': '0' }}); 79 | expect(isCached(res1)).toBe(false); 80 | expect(res1.status).toBe(200); 81 | expect(cache.size).toBe(1); 82 | const res2 = await fetchWithCache("https://example.com/", { headers: { 'x-test': '1' }}); 83 | expect(isCached(res2)).toBe(false); 84 | expect(res1.status).toBe(200); 85 | expect(cache.size).toBe(2); 86 | const res3 = await fetchWithCache("https://example.com/", { headers: { 'x-test': '1' }}); 87 | expect(isCached(res3)).toBe(true); 88 | expect(res1.status).toBe(200); 89 | expect(cache.size).toBe(2); 90 | }); 91 | 92 | it("respects no-store", async () => { 93 | expect(cache.size).toBe(0); 94 | const res = await fetchWithCache("https://example.com/", { cache: 'no-store' }); 95 | expect(isCached(res)).toBe(false); 96 | expect(res.status).toBe(200); 97 | expect(cache.size).toBe(0); 98 | }); 99 | }); 100 | -------------------------------------------------------------------------------- /test/cache-key.test.ts: -------------------------------------------------------------------------------- 1 | import { withCache } from '../src/index'; 2 | import { it, expect, describe, beforeEach } from "vitest"; 3 | import stream from 'node:stream'; 4 | 5 | const fetch = async (...args: any) => new Response(null, { headers: { 'Cache-Control': `s-maxage=604800` }}); 6 | 7 | 8 | describe("Normalize URLs", () => { 9 | let cache: Map; 10 | let fetchWithCache: any; 11 | const cachedKey = () => Array.from(cache.keys())[0]; 12 | 13 | beforeEach(() => { 14 | cache = new Map(); 15 | fetchWithCache = withCache(fetch, { cache }); 16 | }) 17 | 18 | it("strips empty path", async () => { 19 | await fetchWithCache("https://example.com/"); 20 | expect(cachedKey()).toBe('GET:https://example.com') 21 | }); 22 | 23 | it("sorts search params", async () => { 24 | await fetchWithCache("https://example.com/?a=1&b=2"); 25 | await fetchWithCache("https://example.com/?b=2&a=1"); 26 | expect(cache.size).toBe(1); 27 | }); 28 | 29 | it("normalizes domain casing", async () => { 30 | await fetchWithCache("https://EXAMPLE.com/?a=1&b=2"); 31 | await fetchWithCache("https://example.com/?b=2&a=1"); 32 | expect(cache.size).toBe(1); 33 | }); 34 | 35 | it("does not normalize params casing", async () => { 36 | await fetchWithCache("https://example.com/?a=1&b=2"); 37 | await fetchWithCache("https://example.com/?A=1&B=2"); 38 | expect(cache.size).toBe(2); 39 | }); 40 | }); 41 | 42 | 43 | describe("Cache Key", () => { 44 | let cache: Map; 45 | let fetchWithCache: any; 46 | const cachedKey = () => Array.from(cache.keys())[0]; 47 | 48 | beforeEach(() => { 49 | cache = new Map(); 50 | fetchWithCache = withCache(fetch, { cache }); 51 | }) 52 | 53 | it('supports default GET', async () => { 54 | await fetchWithCache("https://example.com/"); 55 | expect(cachedKey()).toBe('GET:https://example.com') 56 | }) 57 | 58 | it('normalizes method casing', async () => { 59 | await fetchWithCache("https://example.com/", { method: 'get' }); 60 | expect(cachedKey()).toBe('GET:https://example.com') 61 | }) 62 | 63 | it('supports POST with string body', async () => { 64 | await fetchWithCache("https://example.com/", { method: 'post', body: '{}' }); 65 | expect(cachedKey()).toBe('POST:https://example.com:13y') 66 | }) 67 | 68 | it('supports POST with Blob body', async () => { 69 | await fetchWithCache("https://example.com/", { method: 'post', body: new Blob(['{}']) }); 70 | expect(cachedKey()).toBe('POST:https://example.com:13y') 71 | }) 72 | 73 | it('supports POST with Buffer body', async () => { 74 | await fetchWithCache("https://example.com/", { method: 'post', body: Buffer.from([123, 125]) }); 75 | expect(cachedKey()).toBe('POST:https://example.com:13y') 76 | }) 77 | 78 | it('supports POST with URLSearchParams body', async () => { 79 | await fetchWithCache("https://example.com/", { method: 'post', body: new URLSearchParams([['a', '1']]) }); 80 | expect(cachedKey()).toBe('POST:https://example.com:pyW') 81 | }) 82 | 83 | it('dedupes POST with URLSearchParams body', async () => { 84 | await fetchWithCache("https://example.com/", { method: 'post', body: new URLSearchParams([['a', '1'], ['b', '2']]) }); 85 | await fetchWithCache("https://example.com/", { method: 'post', body: new URLSearchParams([['b', '2'], ['a', '1']]) }); 86 | expect(cache.size).toBe(1) 87 | expect(cachedKey()).toBe('POST:https://example.com:2l6edi') 88 | }) 89 | 90 | it('supports POST with FormData body', async () => { 91 | const body = new FormData(); 92 | body.append('a', '1'); 93 | await fetchWithCache("https://example.com/", { method: 'post', body }); 94 | expect(cachedKey()).toBe('POST:https://example.com:1Bv2hw') 95 | }) 96 | 97 | it('dedupes POSTs with different bodies', async () => { 98 | await fetchWithCache("https://example.com/", { method: 'post', body: '{"b":2}' }); 99 | await fetchWithCache("https://example.com/", { method: 'post', body: '{"a":1}' }); 100 | expect(cache.size).toBe(2) 101 | }) 102 | 103 | it('does not support POST with web streaming body', async () => { 104 | await fetchWithCache("https://example.com/", { method: 'post', body: new ReadableStream() }); 105 | expect(cache.size).toBe(0) 106 | }) 107 | 108 | it('does not support POST with node streaming body', async () => { 109 | await fetchWithCache("https://example.com/", { method: 'post', body: new stream.Readable({}) }); 110 | expect(cache.size).toBe(0) 111 | }) 112 | }); 113 | 114 | -------------------------------------------------------------------------------- /test/github-api.test.ts: -------------------------------------------------------------------------------- 1 | import { withCache, isCached } from "../src/"; 2 | import { it, expect } from "vitest"; 3 | 4 | it("handles github api", async () => { 5 | const fetchWithCache = withCache(fetch); 6 | let previousRemaining: number = -1; 7 | for (let i = 0; i < 3; i++) { 8 | const res = await fetchWithCache("https://api.github.com/repos/withastro/astro"); 9 | const remaining = Number.parseInt(res.headers.get('x-ratelimit-remaining')!); 10 | if (isCached(res)) { 11 | expect(remaining).toEqual(previousRemaining); 12 | } 13 | previousRemaining = remaining; 14 | await new Promise(resolve => setTimeout(resolve, 100)); 15 | } 16 | }); 17 | -------------------------------------------------------------------------------- /test/with-node-fetch.test.ts: -------------------------------------------------------------------------------- 1 | import fetch from "node-fetch"; 2 | import { withCache, isCached } from "../src"; 3 | import { describe, it, expect } from "vitest"; 4 | 5 | describe("node-fetch", () => { 6 | it("works with Node Fetch", async () => { 7 | const cache = new Map(); 8 | expect(cache.size).toBe(0); 9 | const fetchWithCache = withCache(fetch, { cache }); 10 | const res1 = await fetchWithCache("https://example.com/"); 11 | expect(isCached(res1)).toBe(false); 12 | expect(res1.status).toBe(200); 13 | expect(cache.size).toBe(2); 14 | }); 15 | 16 | it("reads from cache", async () => { 17 | const cache = new Map(); 18 | const fetchWithCache = withCache(fetch, { cache }); 19 | await fetchWithCache("https://example.com/"); 20 | expect(cache.size).toBe(2); 21 | const res = await fetchWithCache("https://example.com/"); 22 | expect(isCached(res)).toBe(true); 23 | expect(cache.size).toBe(2); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "include": ["src"], 3 | "compilerOptions": { 4 | "declaration": true, 5 | "emitDeclarationOnly": true, 6 | "strict": true, 7 | "moduleResolution": "node", 8 | "esModuleInterop": true, 9 | "forceConsistentCasingInFileNames": true, 10 | "allowJs": true, 11 | "module": "ES2020", 12 | "outDir": "./dist", 13 | "declarationDir": "./dist", 14 | "target": "ES2020", 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vitest/config' 2 | 3 | export default defineConfig({ 4 | test: { 5 | }, 6 | }) 7 | --------------------------------------------------------------------------------