├── .changeset ├── README.md └── config.json ├── .github └── workflows │ ├── main.yml │ └── publish.yml ├── .gitignore ├── .npmignore ├── CHANGELOG.md ├── docs └── swapi-example │ ├── swapi-example.ts │ └── types.ts ├── package.json ├── pnpm-lock.yaml ├── readme.md ├── src ├── client.ts ├── constants.ts ├── index.ts ├── playground.ts ├── safe-client.ts ├── tests │ ├── add.test.ts │ ├── dynamic-args.test.ts │ ├── merge.test.ts │ ├── repl.test.ts │ ├── router-definition.test.ts │ ├── type-only.test.ts │ ├── utils.ts │ └── with-schemas.test.ts ├── types.ts └── untypeable.ts ├── tsconfig.json └── tsup.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@2.3.0/schema.json", 3 | "changelog": "@changesets/cli/changelog", 4 | "commit": false, 5 | "fixed": [], 6 | "linked": [], 7 | "access": "public", 8 | "baseBranch": "main", 9 | "updateInternalDependencies": "patch", 10 | "ignore": [] 11 | } 12 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | on: 3 | push: 4 | branches: 5 | - "**" 6 | pull_request: 7 | branches: 8 | - "**" 9 | 10 | jobs: 11 | build: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v3 15 | - uses: pnpm/action-setup@v2 16 | with: 17 | version: 7 18 | - uses: actions/setup-node@v3 19 | with: 20 | node-version: 16.x 21 | cache: "pnpm" 22 | 23 | - run: pnpm install --frozen-lockfile 24 | - run: pnpm run ci 25 | -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: Publish 2 | on: 3 | push: 4 | branches: 5 | - "main" 6 | 7 | concurrency: ${{ github.workflow }}-${{ github.ref }} 8 | 9 | jobs: 10 | publish: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v3 14 | - uses: pnpm/action-setup@v2 15 | with: 16 | version: 7 17 | - uses: actions/setup-node@v3 18 | with: 19 | node-version: 16.x 20 | cache: "pnpm" 21 | 22 | - run: pnpm install --frozen-lockfile 23 | - name: Create Release Pull Request or Publish 24 | id: changesets 25 | uses: changesets/action@v1 26 | with: 27 | publish: pnpm run release 28 | env: 29 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 30 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }} 31 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | src 2 | node_modules 3 | pnpm-lock.yaml 4 | tsconfig.json -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # untypeable 2 | 3 | ## 0.2.0 4 | 5 | ### Minor Changes 6 | 7 | - 9db7f9b: Made it so you don't need to pass an empty object to the client if the input is entirely partial. 8 | 9 | ## 0.1.0 10 | 11 | ### Minor Changes 12 | 13 | - 0441952: Initial release of untypeable - check the readme for details! 14 | -------------------------------------------------------------------------------- /docs/swapi-example/swapi-example.ts: -------------------------------------------------------------------------------- 1 | import { createTypeLevelClient, initUntypeable } from "../../src/index"; 2 | import { Person, Paginated, Planet, Film, Vehicle } from "./types"; 3 | 4 | const u = initUntypeable(); 5 | 6 | /** 7 | * Create the router 8 | */ 9 | const router = u.router({ 10 | "/people/:id": u.input<{ id: string }>().output(), 11 | "/people": u.output>(), 12 | "/planets/:id": u.input<{ id: string }>().output(), 13 | "/planets": u.output>(), 14 | "/films/:id": u.input<{ id: string }>().output(), 15 | "/films": u.output>(), 16 | "/vehicles/:id": u.input<{ id: string }>().output(), 17 | "/vehicles": u.output>(), 18 | }); 19 | 20 | /** 21 | * Create the client, using the zero-bundle method 22 | */ 23 | export const fetchFromSwapi = createTypeLevelClient( 24 | (path, input = {}) => { 25 | // Replace dynamic path params in url 26 | const pathWithParams = path.replace( 27 | /:([a-zA-Z0-9_]+)/g, 28 | (_, key) => input[key], 29 | ); 30 | 31 | return fetch(`https://swapi.dev/api${pathWithParams}`, { 32 | method: "GET", 33 | headers: { 34 | "Content-Type": "application/json", 35 | }, 36 | }).then((res) => { 37 | if (!res.ok) { 38 | throw new Error(`HTTP error! status: ${res.status}`); 39 | } 40 | 41 | return res.json(); 42 | }); 43 | }, 44 | ); 45 | -------------------------------------------------------------------------------- /docs/swapi-example/types.ts: -------------------------------------------------------------------------------- 1 | export type Person = { 2 | name: string; 3 | height: string; 4 | mass: string; 5 | hair_color: string; 6 | skin_color: string; 7 | birth_year: string; 8 | gender: string; 9 | homeworld: string; 10 | films: string[]; 11 | }; 12 | 13 | export type Planet = { 14 | climate: string; 15 | diameter: string; 16 | gravity: string; 17 | name: string; 18 | orbital_period: string; 19 | population: string; 20 | residents: string[]; 21 | }; 22 | 23 | export type Film = { 24 | title: string; 25 | episode_id: number; 26 | opening_crawl: string; 27 | director: string; 28 | producer: string; 29 | release_date: string; 30 | characters: string[]; 31 | planets: string[]; 32 | starships: string[]; 33 | vehicles: string[]; 34 | }; 35 | 36 | export type Vehicle = { 37 | name: string; 38 | model: string; 39 | manufacturer: string; 40 | cost_in_credits: string; 41 | length: string; 42 | max_atmosphering_speed: string; 43 | }; 44 | 45 | export type Paginated = { 46 | count: number; 47 | next: string | null; 48 | previous: string | null; 49 | results: T[]; 50 | }; 51 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "untypeable", 3 | "version": "0.2.1", 4 | "description": "Get type-safe access to any API, with a zero-bundle size option.", 5 | "main": "dist/index.js", 6 | "module": "dist/index.mjs", 7 | "types": "dist/index.d.ts", 8 | "exports": { 9 | ".": { 10 | "types": "./dist/index.d.ts", 11 | "import": "./dist/index.mjs", 12 | "require": "./dist/index.js" 13 | }, 14 | "./client": { 15 | "types": "./dist/client.d.ts", 16 | "import": "./dist/client.mjs", 17 | "require": "./dist/client.js" 18 | }, 19 | "./package.json": "./package.json" 20 | }, 21 | "scripts": { 22 | "build": "tsup", 23 | "lint": "tsc", 24 | "ci": "npm run build && npm run lint && npm run test", 25 | "prepublish": "npm run ci", 26 | "test": "vitest run", 27 | "dev": "vitest", 28 | "release": "npm run ci && changeset publish" 29 | }, 30 | "keywords": [], 31 | "author": "Matt Pocock", 32 | "license": "ISC", 33 | "devDependencies": { 34 | "@changesets/cli": "^2.26.0", 35 | "tsup": "^6.6.3", 36 | "typescript": "^4.9.5", 37 | "vite": "^4.1.4", 38 | "vitest": "^0.29.2", 39 | "zod": "^3.21.4" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | specifiers: 4 | '@changesets/cli': ^2.26.0 5 | tsup: ^6.6.3 6 | typescript: ^4.9.5 7 | vite: ^4.1.4 8 | vitest: ^0.29.2 9 | zod: ^3.21.4 10 | 11 | devDependencies: 12 | '@changesets/cli': 2.26.0 13 | tsup: 6.6.3_typescript@4.9.5 14 | typescript: 4.9.5 15 | vite: 4.1.4 16 | vitest: 0.29.2 17 | zod: 3.21.4 18 | 19 | packages: 20 | 21 | /@babel/code-frame/7.18.6: 22 | resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} 23 | engines: {node: '>=6.9.0'} 24 | dependencies: 25 | '@babel/highlight': 7.18.6 26 | dev: true 27 | 28 | /@babel/helper-validator-identifier/7.19.1: 29 | resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} 30 | engines: {node: '>=6.9.0'} 31 | dev: true 32 | 33 | /@babel/highlight/7.18.6: 34 | resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} 35 | engines: {node: '>=6.9.0'} 36 | dependencies: 37 | '@babel/helper-validator-identifier': 7.19.1 38 | chalk: 2.4.2 39 | js-tokens: 4.0.0 40 | dev: true 41 | 42 | /@babel/runtime/7.21.0: 43 | resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==} 44 | engines: {node: '>=6.9.0'} 45 | dependencies: 46 | regenerator-runtime: 0.13.11 47 | dev: true 48 | 49 | /@changesets/apply-release-plan/6.1.3: 50 | resolution: {integrity: sha512-ECDNeoc3nfeAe1jqJb5aFQX7CqzQhD2klXRez2JDb/aVpGUbX673HgKrnrgJRuQR/9f2TtLoYIzrGB9qwD77mg==} 51 | dependencies: 52 | '@babel/runtime': 7.21.0 53 | '@changesets/config': 2.3.0 54 | '@changesets/get-version-range-type': 0.3.2 55 | '@changesets/git': 2.0.0 56 | '@changesets/types': 5.2.1 57 | '@manypkg/get-packages': 1.1.3 58 | detect-indent: 6.1.0 59 | fs-extra: 7.0.1 60 | lodash.startcase: 4.4.0 61 | outdent: 0.5.0 62 | prettier: 2.8.4 63 | resolve-from: 5.0.0 64 | semver: 5.7.1 65 | dev: true 66 | 67 | /@changesets/assemble-release-plan/5.2.3: 68 | resolution: {integrity: sha512-g7EVZCmnWz3zMBAdrcKhid4hkHT+Ft1n0mLussFMcB1dE2zCuwcvGoy9ec3yOgPGF4hoMtgHaMIk3T3TBdvU9g==} 69 | dependencies: 70 | '@babel/runtime': 7.21.0 71 | '@changesets/errors': 0.1.4 72 | '@changesets/get-dependents-graph': 1.3.5 73 | '@changesets/types': 5.2.1 74 | '@manypkg/get-packages': 1.1.3 75 | semver: 5.7.1 76 | dev: true 77 | 78 | /@changesets/changelog-git/0.1.14: 79 | resolution: {integrity: sha512-+vRfnKtXVWsDDxGctOfzJsPhaCdXRYoe+KyWYoq5X/GqoISREiat0l3L8B0a453B2B4dfHGcZaGyowHbp9BSaA==} 80 | dependencies: 81 | '@changesets/types': 5.2.1 82 | dev: true 83 | 84 | /@changesets/cli/2.26.0: 85 | resolution: {integrity: sha512-0cbTiDms+ICTVtEwAFLNW0jBNex9f5+fFv3I771nBvdnV/mOjd1QJ4+f8KtVSOrwD9SJkk9xbDkWFb0oXd8d1Q==} 86 | hasBin: true 87 | dependencies: 88 | '@babel/runtime': 7.21.0 89 | '@changesets/apply-release-plan': 6.1.3 90 | '@changesets/assemble-release-plan': 5.2.3 91 | '@changesets/changelog-git': 0.1.14 92 | '@changesets/config': 2.3.0 93 | '@changesets/errors': 0.1.4 94 | '@changesets/get-dependents-graph': 1.3.5 95 | '@changesets/get-release-plan': 3.0.16 96 | '@changesets/git': 2.0.0 97 | '@changesets/logger': 0.0.5 98 | '@changesets/pre': 1.0.14 99 | '@changesets/read': 0.5.9 100 | '@changesets/types': 5.2.1 101 | '@changesets/write': 0.2.3 102 | '@manypkg/get-packages': 1.1.3 103 | '@types/is-ci': 3.0.0 104 | '@types/semver': 6.2.3 105 | ansi-colors: 4.1.3 106 | chalk: 2.4.2 107 | enquirer: 2.3.6 108 | external-editor: 3.1.0 109 | fs-extra: 7.0.1 110 | human-id: 1.0.2 111 | is-ci: 3.0.1 112 | meow: 6.1.1 113 | outdent: 0.5.0 114 | p-limit: 2.3.0 115 | preferred-pm: 3.0.3 116 | resolve-from: 5.0.0 117 | semver: 5.7.1 118 | spawndamnit: 2.0.0 119 | term-size: 2.2.1 120 | tty-table: 4.1.6 121 | dev: true 122 | 123 | /@changesets/config/2.3.0: 124 | resolution: {integrity: sha512-EgP/px6mhCx8QeaMAvWtRrgyxW08k/Bx2tpGT+M84jEdX37v3VKfh4Cz1BkwrYKuMV2HZKeHOh8sHvja/HcXfQ==} 125 | dependencies: 126 | '@changesets/errors': 0.1.4 127 | '@changesets/get-dependents-graph': 1.3.5 128 | '@changesets/logger': 0.0.5 129 | '@changesets/types': 5.2.1 130 | '@manypkg/get-packages': 1.1.3 131 | fs-extra: 7.0.1 132 | micromatch: 4.0.5 133 | dev: true 134 | 135 | /@changesets/errors/0.1.4: 136 | resolution: {integrity: sha512-HAcqPF7snsUJ/QzkWoKfRfXushHTu+K5KZLJWPb34s4eCZShIf8BFO3fwq6KU8+G7L5KdtN2BzQAXOSXEyiY9Q==} 137 | dependencies: 138 | extendable-error: 0.1.7 139 | dev: true 140 | 141 | /@changesets/get-dependents-graph/1.3.5: 142 | resolution: {integrity: sha512-w1eEvnWlbVDIY8mWXqWuYE9oKhvIaBhzqzo4ITSJY9hgoqQ3RoBqwlcAzg11qHxv/b8ReDWnMrpjpKrW6m1ZTA==} 143 | dependencies: 144 | '@changesets/types': 5.2.1 145 | '@manypkg/get-packages': 1.1.3 146 | chalk: 2.4.2 147 | fs-extra: 7.0.1 148 | semver: 5.7.1 149 | dev: true 150 | 151 | /@changesets/get-release-plan/3.0.16: 152 | resolution: {integrity: sha512-OpP9QILpBp1bY2YNIKFzwigKh7Qe9KizRsZomzLe6pK8IUo8onkAAVUD8+JRKSr8R7d4+JRuQrfSSNlEwKyPYg==} 153 | dependencies: 154 | '@babel/runtime': 7.21.0 155 | '@changesets/assemble-release-plan': 5.2.3 156 | '@changesets/config': 2.3.0 157 | '@changesets/pre': 1.0.14 158 | '@changesets/read': 0.5.9 159 | '@changesets/types': 5.2.1 160 | '@manypkg/get-packages': 1.1.3 161 | dev: true 162 | 163 | /@changesets/get-version-range-type/0.3.2: 164 | resolution: {integrity: sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg==} 165 | dev: true 166 | 167 | /@changesets/git/2.0.0: 168 | resolution: {integrity: sha512-enUVEWbiqUTxqSnmesyJGWfzd51PY4H7mH9yUw0hPVpZBJ6tQZFMU3F3mT/t9OJ/GjyiM4770i+sehAn6ymx6A==} 169 | dependencies: 170 | '@babel/runtime': 7.21.0 171 | '@changesets/errors': 0.1.4 172 | '@changesets/types': 5.2.1 173 | '@manypkg/get-packages': 1.1.3 174 | is-subdir: 1.2.0 175 | micromatch: 4.0.5 176 | spawndamnit: 2.0.0 177 | dev: true 178 | 179 | /@changesets/logger/0.0.5: 180 | resolution: {integrity: sha512-gJyZHomu8nASHpaANzc6bkQMO9gU/ib20lqew1rVx753FOxffnCrJlGIeQVxNWCqM+o6OOleCo/ivL8UAO5iFw==} 181 | dependencies: 182 | chalk: 2.4.2 183 | dev: true 184 | 185 | /@changesets/parse/0.3.16: 186 | resolution: {integrity: sha512-127JKNd167ayAuBjUggZBkmDS5fIKsthnr9jr6bdnuUljroiERW7FBTDNnNVyJ4l69PzR57pk6mXQdtJyBCJKg==} 187 | dependencies: 188 | '@changesets/types': 5.2.1 189 | js-yaml: 3.14.1 190 | dev: true 191 | 192 | /@changesets/pre/1.0.14: 193 | resolution: {integrity: sha512-dTsHmxQWEQekHYHbg+M1mDVYFvegDh9j/kySNuDKdylwfMEevTeDouR7IfHNyVodxZXu17sXoJuf2D0vi55FHQ==} 194 | dependencies: 195 | '@babel/runtime': 7.21.0 196 | '@changesets/errors': 0.1.4 197 | '@changesets/types': 5.2.1 198 | '@manypkg/get-packages': 1.1.3 199 | fs-extra: 7.0.1 200 | dev: true 201 | 202 | /@changesets/read/0.5.9: 203 | resolution: {integrity: sha512-T8BJ6JS6j1gfO1HFq50kU3qawYxa4NTbI/ASNVVCBTsKquy2HYwM9r7ZnzkiMe8IEObAJtUVGSrePCOxAK2haQ==} 204 | dependencies: 205 | '@babel/runtime': 7.21.0 206 | '@changesets/git': 2.0.0 207 | '@changesets/logger': 0.0.5 208 | '@changesets/parse': 0.3.16 209 | '@changesets/types': 5.2.1 210 | chalk: 2.4.2 211 | fs-extra: 7.0.1 212 | p-filter: 2.1.0 213 | dev: true 214 | 215 | /@changesets/types/4.1.0: 216 | resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} 217 | dev: true 218 | 219 | /@changesets/types/5.2.1: 220 | resolution: {integrity: sha512-myLfHbVOqaq9UtUKqR/nZA/OY7xFjQMdfgfqeZIBK4d0hA6pgxArvdv8M+6NUzzBsjWLOtvApv8YHr4qM+Kpfg==} 221 | dev: true 222 | 223 | /@changesets/write/0.2.3: 224 | resolution: {integrity: sha512-Dbamr7AIMvslKnNYsLFafaVORx4H0pvCA2MHqgtNCySMe1blImEyAEOzDmcgKAkgz4+uwoLz7demIrX+JBr/Xw==} 225 | dependencies: 226 | '@babel/runtime': 7.21.0 227 | '@changesets/types': 5.2.1 228 | fs-extra: 7.0.1 229 | human-id: 1.0.2 230 | prettier: 2.8.4 231 | dev: true 232 | 233 | /@esbuild/android-arm/0.16.17: 234 | resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==} 235 | engines: {node: '>=12'} 236 | cpu: [arm] 237 | os: [android] 238 | requiresBuild: true 239 | dev: true 240 | optional: true 241 | 242 | /@esbuild/android-arm/0.17.11: 243 | resolution: {integrity: sha512-CdyX6sRVh1NzFCsf5vw3kULwlAhfy9wVt8SZlrhQ7eL2qBjGbFhRBWkkAzuZm9IIEOCKJw4DXA6R85g+qc8RDw==} 244 | engines: {node: '>=12'} 245 | cpu: [arm] 246 | os: [android] 247 | requiresBuild: true 248 | dev: true 249 | optional: true 250 | 251 | /@esbuild/android-arm64/0.16.17: 252 | resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==} 253 | engines: {node: '>=12'} 254 | cpu: [arm64] 255 | os: [android] 256 | requiresBuild: true 257 | dev: true 258 | optional: true 259 | 260 | /@esbuild/android-arm64/0.17.11: 261 | resolution: {integrity: sha512-QnK4d/zhVTuV4/pRM4HUjcsbl43POALU2zvBynmrrqZt9LPcLA3x1fTZPBg2RRguBQnJcnU059yKr+bydkntjg==} 262 | engines: {node: '>=12'} 263 | cpu: [arm64] 264 | os: [android] 265 | requiresBuild: true 266 | dev: true 267 | optional: true 268 | 269 | /@esbuild/android-x64/0.16.17: 270 | resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==} 271 | engines: {node: '>=12'} 272 | cpu: [x64] 273 | os: [android] 274 | requiresBuild: true 275 | dev: true 276 | optional: true 277 | 278 | /@esbuild/android-x64/0.17.11: 279 | resolution: {integrity: sha512-3PL3HKtsDIXGQcSCKtWD/dy+mgc4p2Tvo2qKgKHj9Yf+eniwFnuoQ0OUhlSfAEpKAFzF9N21Nwgnap6zy3L3MQ==} 280 | engines: {node: '>=12'} 281 | cpu: [x64] 282 | os: [android] 283 | requiresBuild: true 284 | dev: true 285 | optional: true 286 | 287 | /@esbuild/darwin-arm64/0.16.17: 288 | resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==} 289 | engines: {node: '>=12'} 290 | cpu: [arm64] 291 | os: [darwin] 292 | requiresBuild: true 293 | dev: true 294 | optional: true 295 | 296 | /@esbuild/darwin-arm64/0.17.11: 297 | resolution: {integrity: sha512-pJ950bNKgzhkGNO3Z9TeHzIFtEyC2GDQL3wxkMApDEghYx5Qers84UTNc1bAxWbRkuJOgmOha5V0WUeh8G+YGw==} 298 | engines: {node: '>=12'} 299 | cpu: [arm64] 300 | os: [darwin] 301 | requiresBuild: true 302 | dev: true 303 | optional: true 304 | 305 | /@esbuild/darwin-x64/0.16.17: 306 | resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==} 307 | engines: {node: '>=12'} 308 | cpu: [x64] 309 | os: [darwin] 310 | requiresBuild: true 311 | dev: true 312 | optional: true 313 | 314 | /@esbuild/darwin-x64/0.17.11: 315 | resolution: {integrity: sha512-iB0dQkIHXyczK3BZtzw1tqegf0F0Ab5texX2TvMQjiJIWXAfM4FQl7D909YfXWnB92OQz4ivBYQ2RlxBJrMJOw==} 316 | engines: {node: '>=12'} 317 | cpu: [x64] 318 | os: [darwin] 319 | requiresBuild: true 320 | dev: true 321 | optional: true 322 | 323 | /@esbuild/freebsd-arm64/0.16.17: 324 | resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==} 325 | engines: {node: '>=12'} 326 | cpu: [arm64] 327 | os: [freebsd] 328 | requiresBuild: true 329 | dev: true 330 | optional: true 331 | 332 | /@esbuild/freebsd-arm64/0.17.11: 333 | resolution: {integrity: sha512-7EFzUADmI1jCHeDRGKgbnF5sDIceZsQGapoO6dmw7r/ZBEKX7CCDnIz8m9yEclzr7mFsd+DyasHzpjfJnmBB1Q==} 334 | engines: {node: '>=12'} 335 | cpu: [arm64] 336 | os: [freebsd] 337 | requiresBuild: true 338 | dev: true 339 | optional: true 340 | 341 | /@esbuild/freebsd-x64/0.16.17: 342 | resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==} 343 | engines: {node: '>=12'} 344 | cpu: [x64] 345 | os: [freebsd] 346 | requiresBuild: true 347 | dev: true 348 | optional: true 349 | 350 | /@esbuild/freebsd-x64/0.17.11: 351 | resolution: {integrity: sha512-iPgenptC8i8pdvkHQvXJFzc1eVMR7W2lBPrTE6GbhR54sLcF42mk3zBOjKPOodezzuAz/KSu8CPyFSjcBMkE9g==} 352 | engines: {node: '>=12'} 353 | cpu: [x64] 354 | os: [freebsd] 355 | requiresBuild: true 356 | dev: true 357 | optional: true 358 | 359 | /@esbuild/linux-arm/0.16.17: 360 | resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} 361 | engines: {node: '>=12'} 362 | cpu: [arm] 363 | os: [linux] 364 | requiresBuild: true 365 | dev: true 366 | optional: true 367 | 368 | /@esbuild/linux-arm/0.17.11: 369 | resolution: {integrity: sha512-M9iK/d4lgZH0U5M1R2p2gqhPV/7JPJcRz+8O8GBKVgqndTzydQ7B2XGDbxtbvFkvIs53uXTobOhv+RyaqhUiMg==} 370 | engines: {node: '>=12'} 371 | cpu: [arm] 372 | os: [linux] 373 | requiresBuild: true 374 | dev: true 375 | optional: true 376 | 377 | /@esbuild/linux-arm64/0.16.17: 378 | resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} 379 | engines: {node: '>=12'} 380 | cpu: [arm64] 381 | os: [linux] 382 | requiresBuild: true 383 | dev: true 384 | optional: true 385 | 386 | /@esbuild/linux-arm64/0.17.11: 387 | resolution: {integrity: sha512-Qxth3gsWWGKz2/qG2d5DsW/57SeA2AmpSMhdg9TSB5Svn2KDob3qxfQSkdnWjSd42kqoxIPy3EJFs+6w1+6Qjg==} 388 | engines: {node: '>=12'} 389 | cpu: [arm64] 390 | os: [linux] 391 | requiresBuild: true 392 | dev: true 393 | optional: true 394 | 395 | /@esbuild/linux-ia32/0.16.17: 396 | resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==} 397 | engines: {node: '>=12'} 398 | cpu: [ia32] 399 | os: [linux] 400 | requiresBuild: true 401 | dev: true 402 | optional: true 403 | 404 | /@esbuild/linux-ia32/0.17.11: 405 | resolution: {integrity: sha512-dB1nGaVWtUlb/rRDHmuDQhfqazWE0LMro/AIbT2lWM3CDMHJNpLckH+gCddQyhhcLac2OYw69ikUMO34JLt3wA==} 406 | engines: {node: '>=12'} 407 | cpu: [ia32] 408 | os: [linux] 409 | requiresBuild: true 410 | dev: true 411 | optional: true 412 | 413 | /@esbuild/linux-loong64/0.16.17: 414 | resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==} 415 | engines: {node: '>=12'} 416 | cpu: [loong64] 417 | os: [linux] 418 | requiresBuild: true 419 | dev: true 420 | optional: true 421 | 422 | /@esbuild/linux-loong64/0.17.11: 423 | resolution: {integrity: sha512-aCWlq70Q7Nc9WDnormntGS1ar6ZFvUpqr8gXtO+HRejRYPweAFQN615PcgaSJkZjhHp61+MNLhzyVALSF2/Q0g==} 424 | engines: {node: '>=12'} 425 | cpu: [loong64] 426 | os: [linux] 427 | requiresBuild: true 428 | dev: true 429 | optional: true 430 | 431 | /@esbuild/linux-mips64el/0.16.17: 432 | resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==} 433 | engines: {node: '>=12'} 434 | cpu: [mips64el] 435 | os: [linux] 436 | requiresBuild: true 437 | dev: true 438 | optional: true 439 | 440 | /@esbuild/linux-mips64el/0.17.11: 441 | resolution: {integrity: sha512-cGeGNdQxqY8qJwlYH1BP6rjIIiEcrM05H7k3tR7WxOLmD1ZxRMd6/QIOWMb8mD2s2YJFNRuNQ+wjMhgEL2oCEw==} 442 | engines: {node: '>=12'} 443 | cpu: [mips64el] 444 | os: [linux] 445 | requiresBuild: true 446 | dev: true 447 | optional: true 448 | 449 | /@esbuild/linux-ppc64/0.16.17: 450 | resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==} 451 | engines: {node: '>=12'} 452 | cpu: [ppc64] 453 | os: [linux] 454 | requiresBuild: true 455 | dev: true 456 | optional: true 457 | 458 | /@esbuild/linux-ppc64/0.17.11: 459 | resolution: {integrity: sha512-BdlziJQPW/bNe0E8eYsHB40mYOluS+jULPCjlWiHzDgr+ZBRXPtgMV1nkLEGdpjrwgmtkZHEGEPaKdS/8faLDA==} 460 | engines: {node: '>=12'} 461 | cpu: [ppc64] 462 | os: [linux] 463 | requiresBuild: true 464 | dev: true 465 | optional: true 466 | 467 | /@esbuild/linux-riscv64/0.16.17: 468 | resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==} 469 | engines: {node: '>=12'} 470 | cpu: [riscv64] 471 | os: [linux] 472 | requiresBuild: true 473 | dev: true 474 | optional: true 475 | 476 | /@esbuild/linux-riscv64/0.17.11: 477 | resolution: {integrity: sha512-MDLwQbtF+83oJCI1Cixn68Et/ME6gelmhssPebC40RdJaect+IM+l7o/CuG0ZlDs6tZTEIoxUe53H3GmMn8oMA==} 478 | engines: {node: '>=12'} 479 | cpu: [riscv64] 480 | os: [linux] 481 | requiresBuild: true 482 | dev: true 483 | optional: true 484 | 485 | /@esbuild/linux-s390x/0.16.17: 486 | resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==} 487 | engines: {node: '>=12'} 488 | cpu: [s390x] 489 | os: [linux] 490 | requiresBuild: true 491 | dev: true 492 | optional: true 493 | 494 | /@esbuild/linux-s390x/0.17.11: 495 | resolution: {integrity: sha512-4N5EMESvws0Ozr2J94VoUD8HIRi7X0uvUv4c0wpTHZyZY9qpaaN7THjosdiW56irQ4qnJ6Lsc+i+5zGWnyqWqQ==} 496 | engines: {node: '>=12'} 497 | cpu: [s390x] 498 | os: [linux] 499 | requiresBuild: true 500 | dev: true 501 | optional: true 502 | 503 | /@esbuild/linux-x64/0.16.17: 504 | resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==} 505 | engines: {node: '>=12'} 506 | cpu: [x64] 507 | os: [linux] 508 | requiresBuild: true 509 | dev: true 510 | optional: true 511 | 512 | /@esbuild/linux-x64/0.17.11: 513 | resolution: {integrity: sha512-rM/v8UlluxpytFSmVdbCe1yyKQd/e+FmIJE2oPJvbBo+D0XVWi1y/NQ4iTNx+436WmDHQBjVLrbnAQLQ6U7wlw==} 514 | engines: {node: '>=12'} 515 | cpu: [x64] 516 | os: [linux] 517 | requiresBuild: true 518 | dev: true 519 | optional: true 520 | 521 | /@esbuild/netbsd-x64/0.16.17: 522 | resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==} 523 | engines: {node: '>=12'} 524 | cpu: [x64] 525 | os: [netbsd] 526 | requiresBuild: true 527 | dev: true 528 | optional: true 529 | 530 | /@esbuild/netbsd-x64/0.17.11: 531 | resolution: {integrity: sha512-4WaAhuz5f91h3/g43VBGdto1Q+X7VEZfpcWGtOFXnggEuLvjV+cP6DyLRU15IjiU9fKLLk41OoJfBFN5DhPvag==} 532 | engines: {node: '>=12'} 533 | cpu: [x64] 534 | os: [netbsd] 535 | requiresBuild: true 536 | dev: true 537 | optional: true 538 | 539 | /@esbuild/openbsd-x64/0.16.17: 540 | resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==} 541 | engines: {node: '>=12'} 542 | cpu: [x64] 543 | os: [openbsd] 544 | requiresBuild: true 545 | dev: true 546 | optional: true 547 | 548 | /@esbuild/openbsd-x64/0.17.11: 549 | resolution: {integrity: sha512-UBj135Nx4FpnvtE+C8TWGp98oUgBcmNmdYgl5ToKc0mBHxVVqVE7FUS5/ELMImOp205qDAittL6Ezhasc2Ev/w==} 550 | engines: {node: '>=12'} 551 | cpu: [x64] 552 | os: [openbsd] 553 | requiresBuild: true 554 | dev: true 555 | optional: true 556 | 557 | /@esbuild/sunos-x64/0.16.17: 558 | resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==} 559 | engines: {node: '>=12'} 560 | cpu: [x64] 561 | os: [sunos] 562 | requiresBuild: true 563 | dev: true 564 | optional: true 565 | 566 | /@esbuild/sunos-x64/0.17.11: 567 | resolution: {integrity: sha512-1/gxTifDC9aXbV2xOfCbOceh5AlIidUrPsMpivgzo8P8zUtczlq1ncFpeN1ZyQJ9lVs2hILy1PG5KPp+w8QPPg==} 568 | engines: {node: '>=12'} 569 | cpu: [x64] 570 | os: [sunos] 571 | requiresBuild: true 572 | dev: true 573 | optional: true 574 | 575 | /@esbuild/win32-arm64/0.16.17: 576 | resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==} 577 | engines: {node: '>=12'} 578 | cpu: [arm64] 579 | os: [win32] 580 | requiresBuild: true 581 | dev: true 582 | optional: true 583 | 584 | /@esbuild/win32-arm64/0.17.11: 585 | resolution: {integrity: sha512-vtSfyx5yRdpiOW9yp6Ax0zyNOv9HjOAw8WaZg3dF5djEHKKm3UnoohftVvIJtRh0Ec7Hso0RIdTqZvPXJ7FdvQ==} 586 | engines: {node: '>=12'} 587 | cpu: [arm64] 588 | os: [win32] 589 | requiresBuild: true 590 | dev: true 591 | optional: true 592 | 593 | /@esbuild/win32-ia32/0.16.17: 594 | resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==} 595 | engines: {node: '>=12'} 596 | cpu: [ia32] 597 | os: [win32] 598 | requiresBuild: true 599 | dev: true 600 | optional: true 601 | 602 | /@esbuild/win32-ia32/0.17.11: 603 | resolution: {integrity: sha512-GFPSLEGQr4wHFTiIUJQrnJKZhZjjq4Sphf+mM76nQR6WkQn73vm7IsacmBRPkALfpOCHsopSvLgqdd4iUW2mYw==} 604 | engines: {node: '>=12'} 605 | cpu: [ia32] 606 | os: [win32] 607 | requiresBuild: true 608 | dev: true 609 | optional: true 610 | 611 | /@esbuild/win32-x64/0.16.17: 612 | resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==} 613 | engines: {node: '>=12'} 614 | cpu: [x64] 615 | os: [win32] 616 | requiresBuild: true 617 | dev: true 618 | optional: true 619 | 620 | /@esbuild/win32-x64/0.17.11: 621 | resolution: {integrity: sha512-N9vXqLP3eRL8BqSy8yn4Y98cZI2pZ8fyuHx6lKjiG2WABpT2l01TXdzq5Ma2ZUBzfB7tx5dXVhge8X9u0S70ZQ==} 622 | engines: {node: '>=12'} 623 | cpu: [x64] 624 | os: [win32] 625 | requiresBuild: true 626 | dev: true 627 | optional: true 628 | 629 | /@manypkg/find-root/1.1.0: 630 | resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} 631 | dependencies: 632 | '@babel/runtime': 7.21.0 633 | '@types/node': 12.20.55 634 | find-up: 4.1.0 635 | fs-extra: 8.1.0 636 | dev: true 637 | 638 | /@manypkg/get-packages/1.1.3: 639 | resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} 640 | dependencies: 641 | '@babel/runtime': 7.21.0 642 | '@changesets/types': 4.1.0 643 | '@manypkg/find-root': 1.1.0 644 | fs-extra: 8.1.0 645 | globby: 11.1.0 646 | read-yaml-file: 1.1.0 647 | dev: true 648 | 649 | /@nodelib/fs.scandir/2.1.5: 650 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 651 | engines: {node: '>= 8'} 652 | dependencies: 653 | '@nodelib/fs.stat': 2.0.5 654 | run-parallel: 1.2.0 655 | dev: true 656 | 657 | /@nodelib/fs.stat/2.0.5: 658 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 659 | engines: {node: '>= 8'} 660 | dev: true 661 | 662 | /@nodelib/fs.walk/1.2.8: 663 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 664 | engines: {node: '>= 8'} 665 | dependencies: 666 | '@nodelib/fs.scandir': 2.1.5 667 | fastq: 1.15.0 668 | dev: true 669 | 670 | /@types/chai-subset/1.3.3: 671 | resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} 672 | dependencies: 673 | '@types/chai': 4.3.4 674 | dev: true 675 | 676 | /@types/chai/4.3.4: 677 | resolution: {integrity: sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==} 678 | dev: true 679 | 680 | /@types/is-ci/3.0.0: 681 | resolution: {integrity: sha512-Q0Op0hdWbYd1iahB+IFNQcWXFq4O0Q5MwQP7uN0souuQ4rPg1vEYcnIOfr1gY+M+6rc8FGoRaBO1mOOvL29sEQ==} 682 | dependencies: 683 | ci-info: 3.8.0 684 | dev: true 685 | 686 | /@types/minimist/1.2.2: 687 | resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} 688 | dev: true 689 | 690 | /@types/node/12.20.55: 691 | resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} 692 | dev: true 693 | 694 | /@types/node/18.15.1: 695 | resolution: {integrity: sha512-U2TWca8AeHSmbpi314QBESRk7oPjSZjDsR+c+H4ECC1l+kFgpZf8Ydhv3SJpPy51VyZHHqxlb6mTTqYNNRVAIw==} 696 | dev: true 697 | 698 | /@types/normalize-package-data/2.4.1: 699 | resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} 700 | dev: true 701 | 702 | /@types/semver/6.2.3: 703 | resolution: {integrity: sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A==} 704 | dev: true 705 | 706 | /@vitest/expect/0.29.2: 707 | resolution: {integrity: sha512-wjrdHB2ANTch3XKRhjWZN0UueFocH0cQbi2tR5Jtq60Nb3YOSmakjdAvUa2JFBu/o8Vjhj5cYbcMXkZxn1NzmA==} 708 | dependencies: 709 | '@vitest/spy': 0.29.2 710 | '@vitest/utils': 0.29.2 711 | chai: 4.3.7 712 | dev: true 713 | 714 | /@vitest/runner/0.29.2: 715 | resolution: {integrity: sha512-A1P65f5+6ru36AyHWORhuQBJrOOcmDuhzl5RsaMNFe2jEkoj0faEszQS4CtPU/LxUYVIazlUtZTY0OEZmyZBnA==} 716 | dependencies: 717 | '@vitest/utils': 0.29.2 718 | p-limit: 4.0.0 719 | pathe: 1.1.0 720 | dev: true 721 | 722 | /@vitest/spy/0.29.2: 723 | resolution: {integrity: sha512-Hc44ft5kaAytlGL2PyFwdAsufjbdOvHklwjNy/gy/saRbg9Kfkxfh+PklLm1H2Ib/p586RkQeNFKYuJInUssyw==} 724 | dependencies: 725 | tinyspy: 1.1.1 726 | dev: true 727 | 728 | /@vitest/utils/0.29.2: 729 | resolution: {integrity: sha512-F14/Uc+vCdclStS2KEoXJlOLAEyqRhnw0gM27iXw9bMTcyKRPJrQ+rlC6XZ125GIPvvKYMPpVxNhiou6PsEeYQ==} 730 | dependencies: 731 | cli-truncate: 3.1.0 732 | diff: 5.1.0 733 | loupe: 2.3.6 734 | picocolors: 1.0.0 735 | pretty-format: 27.5.1 736 | dev: true 737 | 738 | /acorn-walk/8.2.0: 739 | resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} 740 | engines: {node: '>=0.4.0'} 741 | dev: true 742 | 743 | /acorn/8.8.2: 744 | resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} 745 | engines: {node: '>=0.4.0'} 746 | hasBin: true 747 | dev: true 748 | 749 | /ansi-colors/4.1.3: 750 | resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} 751 | engines: {node: '>=6'} 752 | dev: true 753 | 754 | /ansi-regex/5.0.1: 755 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 756 | engines: {node: '>=8'} 757 | dev: true 758 | 759 | /ansi-regex/6.0.1: 760 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} 761 | engines: {node: '>=12'} 762 | dev: true 763 | 764 | /ansi-styles/3.2.1: 765 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 766 | engines: {node: '>=4'} 767 | dependencies: 768 | color-convert: 1.9.3 769 | dev: true 770 | 771 | /ansi-styles/4.3.0: 772 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 773 | engines: {node: '>=8'} 774 | dependencies: 775 | color-convert: 2.0.1 776 | dev: true 777 | 778 | /ansi-styles/5.2.0: 779 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 780 | engines: {node: '>=10'} 781 | dev: true 782 | 783 | /ansi-styles/6.2.1: 784 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 785 | engines: {node: '>=12'} 786 | dev: true 787 | 788 | /any-promise/1.3.0: 789 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 790 | dev: true 791 | 792 | /anymatch/3.1.3: 793 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 794 | engines: {node: '>= 8'} 795 | dependencies: 796 | normalize-path: 3.0.0 797 | picomatch: 2.3.1 798 | dev: true 799 | 800 | /argparse/1.0.10: 801 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 802 | dependencies: 803 | sprintf-js: 1.0.3 804 | dev: true 805 | 806 | /array-buffer-byte-length/1.0.0: 807 | resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} 808 | dependencies: 809 | call-bind: 1.0.2 810 | is-array-buffer: 3.0.2 811 | dev: true 812 | 813 | /array-union/2.1.0: 814 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 815 | engines: {node: '>=8'} 816 | dev: true 817 | 818 | /array.prototype.flat/1.3.1: 819 | resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} 820 | engines: {node: '>= 0.4'} 821 | dependencies: 822 | call-bind: 1.0.2 823 | define-properties: 1.2.0 824 | es-abstract: 1.21.2 825 | es-shim-unscopables: 1.0.0 826 | dev: true 827 | 828 | /arrify/1.0.1: 829 | resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} 830 | engines: {node: '>=0.10.0'} 831 | dev: true 832 | 833 | /assertion-error/1.1.0: 834 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} 835 | dev: true 836 | 837 | /available-typed-arrays/1.0.5: 838 | resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} 839 | engines: {node: '>= 0.4'} 840 | dev: true 841 | 842 | /balanced-match/1.0.2: 843 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 844 | dev: true 845 | 846 | /better-path-resolve/1.0.0: 847 | resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} 848 | engines: {node: '>=4'} 849 | dependencies: 850 | is-windows: 1.0.2 851 | dev: true 852 | 853 | /binary-extensions/2.2.0: 854 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 855 | engines: {node: '>=8'} 856 | dev: true 857 | 858 | /brace-expansion/1.1.11: 859 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 860 | dependencies: 861 | balanced-match: 1.0.2 862 | concat-map: 0.0.1 863 | dev: true 864 | 865 | /braces/3.0.2: 866 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 867 | engines: {node: '>=8'} 868 | dependencies: 869 | fill-range: 7.0.1 870 | dev: true 871 | 872 | /breakword/1.0.5: 873 | resolution: {integrity: sha512-ex5W9DoOQ/LUEU3PMdLs9ua/CYZl1678NUkKOdUSi8Aw5F1idieaiRURCBFJCwVcrD1J8Iy3vfWSloaMwO2qFg==} 874 | dependencies: 875 | wcwidth: 1.0.1 876 | dev: true 877 | 878 | /bundle-require/4.0.1_esbuild@0.17.11: 879 | resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} 880 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 881 | peerDependencies: 882 | esbuild: '>=0.17' 883 | dependencies: 884 | esbuild: 0.17.11 885 | load-tsconfig: 0.2.3 886 | dev: true 887 | 888 | /cac/6.7.14: 889 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 890 | engines: {node: '>=8'} 891 | dev: true 892 | 893 | /call-bind/1.0.2: 894 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} 895 | dependencies: 896 | function-bind: 1.1.1 897 | get-intrinsic: 1.2.0 898 | dev: true 899 | 900 | /camelcase-keys/6.2.2: 901 | resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} 902 | engines: {node: '>=8'} 903 | dependencies: 904 | camelcase: 5.3.1 905 | map-obj: 4.3.0 906 | quick-lru: 4.0.1 907 | dev: true 908 | 909 | /camelcase/5.3.1: 910 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} 911 | engines: {node: '>=6'} 912 | dev: true 913 | 914 | /chai/4.3.7: 915 | resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} 916 | engines: {node: '>=4'} 917 | dependencies: 918 | assertion-error: 1.1.0 919 | check-error: 1.0.2 920 | deep-eql: 4.1.3 921 | get-func-name: 2.0.0 922 | loupe: 2.3.6 923 | pathval: 1.1.1 924 | type-detect: 4.0.8 925 | dev: true 926 | 927 | /chalk/2.4.2: 928 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 929 | engines: {node: '>=4'} 930 | dependencies: 931 | ansi-styles: 3.2.1 932 | escape-string-regexp: 1.0.5 933 | supports-color: 5.5.0 934 | dev: true 935 | 936 | /chalk/4.1.2: 937 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 938 | engines: {node: '>=10'} 939 | dependencies: 940 | ansi-styles: 4.3.0 941 | supports-color: 7.2.0 942 | dev: true 943 | 944 | /chardet/0.7.0: 945 | resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} 946 | dev: true 947 | 948 | /check-error/1.0.2: 949 | resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} 950 | dev: true 951 | 952 | /chokidar/3.5.3: 953 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 954 | engines: {node: '>= 8.10.0'} 955 | dependencies: 956 | anymatch: 3.1.3 957 | braces: 3.0.2 958 | glob-parent: 5.1.2 959 | is-binary-path: 2.1.0 960 | is-glob: 4.0.3 961 | normalize-path: 3.0.0 962 | readdirp: 3.6.0 963 | optionalDependencies: 964 | fsevents: 2.3.2 965 | dev: true 966 | 967 | /ci-info/3.8.0: 968 | resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} 969 | engines: {node: '>=8'} 970 | dev: true 971 | 972 | /cli-truncate/3.1.0: 973 | resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} 974 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 975 | dependencies: 976 | slice-ansi: 5.0.0 977 | string-width: 5.1.2 978 | dev: true 979 | 980 | /cliui/6.0.0: 981 | resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} 982 | dependencies: 983 | string-width: 4.2.3 984 | strip-ansi: 6.0.1 985 | wrap-ansi: 6.2.0 986 | dev: true 987 | 988 | /cliui/8.0.1: 989 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 990 | engines: {node: '>=12'} 991 | dependencies: 992 | string-width: 4.2.3 993 | strip-ansi: 6.0.1 994 | wrap-ansi: 7.0.0 995 | dev: true 996 | 997 | /clone/1.0.4: 998 | resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} 999 | engines: {node: '>=0.8'} 1000 | dev: true 1001 | 1002 | /color-convert/1.9.3: 1003 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 1004 | dependencies: 1005 | color-name: 1.1.3 1006 | dev: true 1007 | 1008 | /color-convert/2.0.1: 1009 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 1010 | engines: {node: '>=7.0.0'} 1011 | dependencies: 1012 | color-name: 1.1.4 1013 | dev: true 1014 | 1015 | /color-name/1.1.3: 1016 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 1017 | dev: true 1018 | 1019 | /color-name/1.1.4: 1020 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 1021 | dev: true 1022 | 1023 | /commander/4.1.1: 1024 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 1025 | engines: {node: '>= 6'} 1026 | dev: true 1027 | 1028 | /concat-map/0.0.1: 1029 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} 1030 | dev: true 1031 | 1032 | /cross-spawn/5.1.0: 1033 | resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} 1034 | dependencies: 1035 | lru-cache: 4.1.5 1036 | shebang-command: 1.2.0 1037 | which: 1.3.1 1038 | dev: true 1039 | 1040 | /cross-spawn/7.0.3: 1041 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 1042 | engines: {node: '>= 8'} 1043 | dependencies: 1044 | path-key: 3.1.1 1045 | shebang-command: 2.0.0 1046 | which: 2.0.2 1047 | dev: true 1048 | 1049 | /csv-generate/3.4.3: 1050 | resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} 1051 | dev: true 1052 | 1053 | /csv-parse/4.16.3: 1054 | resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} 1055 | dev: true 1056 | 1057 | /csv-stringify/5.6.5: 1058 | resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==} 1059 | dev: true 1060 | 1061 | /csv/5.5.3: 1062 | resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} 1063 | engines: {node: '>= 0.1.90'} 1064 | dependencies: 1065 | csv-generate: 3.4.3 1066 | csv-parse: 4.16.3 1067 | csv-stringify: 5.6.5 1068 | stream-transform: 2.1.3 1069 | dev: true 1070 | 1071 | /debug/4.3.4: 1072 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 1073 | engines: {node: '>=6.0'} 1074 | peerDependencies: 1075 | supports-color: '*' 1076 | peerDependenciesMeta: 1077 | supports-color: 1078 | optional: true 1079 | dependencies: 1080 | ms: 2.1.2 1081 | dev: true 1082 | 1083 | /decamelize-keys/1.1.1: 1084 | resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} 1085 | engines: {node: '>=0.10.0'} 1086 | dependencies: 1087 | decamelize: 1.2.0 1088 | map-obj: 1.0.1 1089 | dev: true 1090 | 1091 | /decamelize/1.2.0: 1092 | resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} 1093 | engines: {node: '>=0.10.0'} 1094 | dev: true 1095 | 1096 | /deep-eql/4.1.3: 1097 | resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} 1098 | engines: {node: '>=6'} 1099 | dependencies: 1100 | type-detect: 4.0.8 1101 | dev: true 1102 | 1103 | /defaults/1.0.4: 1104 | resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} 1105 | dependencies: 1106 | clone: 1.0.4 1107 | dev: true 1108 | 1109 | /define-properties/1.2.0: 1110 | resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} 1111 | engines: {node: '>= 0.4'} 1112 | dependencies: 1113 | has-property-descriptors: 1.0.0 1114 | object-keys: 1.1.1 1115 | dev: true 1116 | 1117 | /detect-indent/6.1.0: 1118 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} 1119 | engines: {node: '>=8'} 1120 | dev: true 1121 | 1122 | /diff/5.1.0: 1123 | resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} 1124 | engines: {node: '>=0.3.1'} 1125 | dev: true 1126 | 1127 | /dir-glob/3.0.1: 1128 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 1129 | engines: {node: '>=8'} 1130 | dependencies: 1131 | path-type: 4.0.0 1132 | dev: true 1133 | 1134 | /eastasianwidth/0.2.0: 1135 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 1136 | dev: true 1137 | 1138 | /emoji-regex/8.0.0: 1139 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1140 | dev: true 1141 | 1142 | /emoji-regex/9.2.2: 1143 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 1144 | dev: true 1145 | 1146 | /enquirer/2.3.6: 1147 | resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} 1148 | engines: {node: '>=8.6'} 1149 | dependencies: 1150 | ansi-colors: 4.1.3 1151 | dev: true 1152 | 1153 | /error-ex/1.3.2: 1154 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 1155 | dependencies: 1156 | is-arrayish: 0.2.1 1157 | dev: true 1158 | 1159 | /es-abstract/1.21.2: 1160 | resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==} 1161 | engines: {node: '>= 0.4'} 1162 | dependencies: 1163 | array-buffer-byte-length: 1.0.0 1164 | available-typed-arrays: 1.0.5 1165 | call-bind: 1.0.2 1166 | es-set-tostringtag: 2.0.1 1167 | es-to-primitive: 1.2.1 1168 | function.prototype.name: 1.1.5 1169 | get-intrinsic: 1.2.0 1170 | get-symbol-description: 1.0.0 1171 | globalthis: 1.0.3 1172 | gopd: 1.0.1 1173 | has: 1.0.3 1174 | has-property-descriptors: 1.0.0 1175 | has-proto: 1.0.1 1176 | has-symbols: 1.0.3 1177 | internal-slot: 1.0.5 1178 | is-array-buffer: 3.0.2 1179 | is-callable: 1.2.7 1180 | is-negative-zero: 2.0.2 1181 | is-regex: 1.1.4 1182 | is-shared-array-buffer: 1.0.2 1183 | is-string: 1.0.7 1184 | is-typed-array: 1.1.10 1185 | is-weakref: 1.0.2 1186 | object-inspect: 1.12.3 1187 | object-keys: 1.1.1 1188 | object.assign: 4.1.4 1189 | regexp.prototype.flags: 1.4.3 1190 | safe-regex-test: 1.0.0 1191 | string.prototype.trim: 1.2.7 1192 | string.prototype.trimend: 1.0.6 1193 | string.prototype.trimstart: 1.0.6 1194 | typed-array-length: 1.0.4 1195 | unbox-primitive: 1.0.2 1196 | which-typed-array: 1.1.9 1197 | dev: true 1198 | 1199 | /es-set-tostringtag/2.0.1: 1200 | resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} 1201 | engines: {node: '>= 0.4'} 1202 | dependencies: 1203 | get-intrinsic: 1.2.0 1204 | has: 1.0.3 1205 | has-tostringtag: 1.0.0 1206 | dev: true 1207 | 1208 | /es-shim-unscopables/1.0.0: 1209 | resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} 1210 | dependencies: 1211 | has: 1.0.3 1212 | dev: true 1213 | 1214 | /es-to-primitive/1.2.1: 1215 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 1216 | engines: {node: '>= 0.4'} 1217 | dependencies: 1218 | is-callable: 1.2.7 1219 | is-date-object: 1.0.5 1220 | is-symbol: 1.0.4 1221 | dev: true 1222 | 1223 | /esbuild/0.16.17: 1224 | resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==} 1225 | engines: {node: '>=12'} 1226 | hasBin: true 1227 | requiresBuild: true 1228 | optionalDependencies: 1229 | '@esbuild/android-arm': 0.16.17 1230 | '@esbuild/android-arm64': 0.16.17 1231 | '@esbuild/android-x64': 0.16.17 1232 | '@esbuild/darwin-arm64': 0.16.17 1233 | '@esbuild/darwin-x64': 0.16.17 1234 | '@esbuild/freebsd-arm64': 0.16.17 1235 | '@esbuild/freebsd-x64': 0.16.17 1236 | '@esbuild/linux-arm': 0.16.17 1237 | '@esbuild/linux-arm64': 0.16.17 1238 | '@esbuild/linux-ia32': 0.16.17 1239 | '@esbuild/linux-loong64': 0.16.17 1240 | '@esbuild/linux-mips64el': 0.16.17 1241 | '@esbuild/linux-ppc64': 0.16.17 1242 | '@esbuild/linux-riscv64': 0.16.17 1243 | '@esbuild/linux-s390x': 0.16.17 1244 | '@esbuild/linux-x64': 0.16.17 1245 | '@esbuild/netbsd-x64': 0.16.17 1246 | '@esbuild/openbsd-x64': 0.16.17 1247 | '@esbuild/sunos-x64': 0.16.17 1248 | '@esbuild/win32-arm64': 0.16.17 1249 | '@esbuild/win32-ia32': 0.16.17 1250 | '@esbuild/win32-x64': 0.16.17 1251 | dev: true 1252 | 1253 | /esbuild/0.17.11: 1254 | resolution: {integrity: sha512-pAMImyokbWDtnA/ufPxjQg0fYo2DDuzAlqwnDvbXqHLphe+m80eF++perYKVm8LeTuj2zUuFXC+xgSVxyoHUdg==} 1255 | engines: {node: '>=12'} 1256 | hasBin: true 1257 | requiresBuild: true 1258 | optionalDependencies: 1259 | '@esbuild/android-arm': 0.17.11 1260 | '@esbuild/android-arm64': 0.17.11 1261 | '@esbuild/android-x64': 0.17.11 1262 | '@esbuild/darwin-arm64': 0.17.11 1263 | '@esbuild/darwin-x64': 0.17.11 1264 | '@esbuild/freebsd-arm64': 0.17.11 1265 | '@esbuild/freebsd-x64': 0.17.11 1266 | '@esbuild/linux-arm': 0.17.11 1267 | '@esbuild/linux-arm64': 0.17.11 1268 | '@esbuild/linux-ia32': 0.17.11 1269 | '@esbuild/linux-loong64': 0.17.11 1270 | '@esbuild/linux-mips64el': 0.17.11 1271 | '@esbuild/linux-ppc64': 0.17.11 1272 | '@esbuild/linux-riscv64': 0.17.11 1273 | '@esbuild/linux-s390x': 0.17.11 1274 | '@esbuild/linux-x64': 0.17.11 1275 | '@esbuild/netbsd-x64': 0.17.11 1276 | '@esbuild/openbsd-x64': 0.17.11 1277 | '@esbuild/sunos-x64': 0.17.11 1278 | '@esbuild/win32-arm64': 0.17.11 1279 | '@esbuild/win32-ia32': 0.17.11 1280 | '@esbuild/win32-x64': 0.17.11 1281 | dev: true 1282 | 1283 | /escalade/3.1.1: 1284 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1285 | engines: {node: '>=6'} 1286 | dev: true 1287 | 1288 | /escape-string-regexp/1.0.5: 1289 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 1290 | engines: {node: '>=0.8.0'} 1291 | dev: true 1292 | 1293 | /esprima/4.0.1: 1294 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 1295 | engines: {node: '>=4'} 1296 | hasBin: true 1297 | dev: true 1298 | 1299 | /execa/5.1.1: 1300 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 1301 | engines: {node: '>=10'} 1302 | dependencies: 1303 | cross-spawn: 7.0.3 1304 | get-stream: 6.0.1 1305 | human-signals: 2.1.0 1306 | is-stream: 2.0.1 1307 | merge-stream: 2.0.0 1308 | npm-run-path: 4.0.1 1309 | onetime: 5.1.2 1310 | signal-exit: 3.0.7 1311 | strip-final-newline: 2.0.0 1312 | dev: true 1313 | 1314 | /extendable-error/0.1.7: 1315 | resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} 1316 | dev: true 1317 | 1318 | /external-editor/3.1.0: 1319 | resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} 1320 | engines: {node: '>=4'} 1321 | dependencies: 1322 | chardet: 0.7.0 1323 | iconv-lite: 0.4.24 1324 | tmp: 0.0.33 1325 | dev: true 1326 | 1327 | /fast-glob/3.2.12: 1328 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} 1329 | engines: {node: '>=8.6.0'} 1330 | dependencies: 1331 | '@nodelib/fs.stat': 2.0.5 1332 | '@nodelib/fs.walk': 1.2.8 1333 | glob-parent: 5.1.2 1334 | merge2: 1.4.1 1335 | micromatch: 4.0.5 1336 | dev: true 1337 | 1338 | /fastq/1.15.0: 1339 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 1340 | dependencies: 1341 | reusify: 1.0.4 1342 | dev: true 1343 | 1344 | /fill-range/7.0.1: 1345 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1346 | engines: {node: '>=8'} 1347 | dependencies: 1348 | to-regex-range: 5.0.1 1349 | dev: true 1350 | 1351 | /find-up/4.1.0: 1352 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 1353 | engines: {node: '>=8'} 1354 | dependencies: 1355 | locate-path: 5.0.0 1356 | path-exists: 4.0.0 1357 | dev: true 1358 | 1359 | /find-up/5.0.0: 1360 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1361 | engines: {node: '>=10'} 1362 | dependencies: 1363 | locate-path: 6.0.0 1364 | path-exists: 4.0.0 1365 | dev: true 1366 | 1367 | /find-yarn-workspace-root2/1.2.16: 1368 | resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} 1369 | dependencies: 1370 | micromatch: 4.0.5 1371 | pkg-dir: 4.2.0 1372 | dev: true 1373 | 1374 | /for-each/0.3.3: 1375 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 1376 | dependencies: 1377 | is-callable: 1.2.7 1378 | dev: true 1379 | 1380 | /fs-extra/7.0.1: 1381 | resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} 1382 | engines: {node: '>=6 <7 || >=8'} 1383 | dependencies: 1384 | graceful-fs: 4.2.10 1385 | jsonfile: 4.0.0 1386 | universalify: 0.1.2 1387 | dev: true 1388 | 1389 | /fs-extra/8.1.0: 1390 | resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} 1391 | engines: {node: '>=6 <7 || >=8'} 1392 | dependencies: 1393 | graceful-fs: 4.2.10 1394 | jsonfile: 4.0.0 1395 | universalify: 0.1.2 1396 | dev: true 1397 | 1398 | /fs.realpath/1.0.0: 1399 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1400 | dev: true 1401 | 1402 | /fsevents/2.3.2: 1403 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 1404 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1405 | os: [darwin] 1406 | requiresBuild: true 1407 | dev: true 1408 | optional: true 1409 | 1410 | /function-bind/1.1.1: 1411 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1412 | dev: true 1413 | 1414 | /function.prototype.name/1.1.5: 1415 | resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} 1416 | engines: {node: '>= 0.4'} 1417 | dependencies: 1418 | call-bind: 1.0.2 1419 | define-properties: 1.2.0 1420 | es-abstract: 1.21.2 1421 | functions-have-names: 1.2.3 1422 | dev: true 1423 | 1424 | /functions-have-names/1.2.3: 1425 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 1426 | dev: true 1427 | 1428 | /get-caller-file/2.0.5: 1429 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 1430 | engines: {node: 6.* || 8.* || >= 10.*} 1431 | dev: true 1432 | 1433 | /get-func-name/2.0.0: 1434 | resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} 1435 | dev: true 1436 | 1437 | /get-intrinsic/1.2.0: 1438 | resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} 1439 | dependencies: 1440 | function-bind: 1.1.1 1441 | has: 1.0.3 1442 | has-symbols: 1.0.3 1443 | dev: true 1444 | 1445 | /get-stream/6.0.1: 1446 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 1447 | engines: {node: '>=10'} 1448 | dev: true 1449 | 1450 | /get-symbol-description/1.0.0: 1451 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} 1452 | engines: {node: '>= 0.4'} 1453 | dependencies: 1454 | call-bind: 1.0.2 1455 | get-intrinsic: 1.2.0 1456 | dev: true 1457 | 1458 | /glob-parent/5.1.2: 1459 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1460 | engines: {node: '>= 6'} 1461 | dependencies: 1462 | is-glob: 4.0.3 1463 | dev: true 1464 | 1465 | /glob/7.1.6: 1466 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} 1467 | dependencies: 1468 | fs.realpath: 1.0.0 1469 | inflight: 1.0.6 1470 | inherits: 2.0.4 1471 | minimatch: 3.1.2 1472 | once: 1.4.0 1473 | path-is-absolute: 1.0.1 1474 | dev: true 1475 | 1476 | /globalthis/1.0.3: 1477 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} 1478 | engines: {node: '>= 0.4'} 1479 | dependencies: 1480 | define-properties: 1.2.0 1481 | dev: true 1482 | 1483 | /globby/11.1.0: 1484 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1485 | engines: {node: '>=10'} 1486 | dependencies: 1487 | array-union: 2.1.0 1488 | dir-glob: 3.0.1 1489 | fast-glob: 3.2.12 1490 | ignore: 5.2.4 1491 | merge2: 1.4.1 1492 | slash: 3.0.0 1493 | dev: true 1494 | 1495 | /gopd/1.0.1: 1496 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 1497 | dependencies: 1498 | get-intrinsic: 1.2.0 1499 | dev: true 1500 | 1501 | /graceful-fs/4.2.10: 1502 | resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} 1503 | dev: true 1504 | 1505 | /grapheme-splitter/1.0.4: 1506 | resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} 1507 | dev: true 1508 | 1509 | /hard-rejection/2.1.0: 1510 | resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} 1511 | engines: {node: '>=6'} 1512 | dev: true 1513 | 1514 | /has-bigints/1.0.2: 1515 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 1516 | dev: true 1517 | 1518 | /has-flag/3.0.0: 1519 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1520 | engines: {node: '>=4'} 1521 | dev: true 1522 | 1523 | /has-flag/4.0.0: 1524 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1525 | engines: {node: '>=8'} 1526 | dev: true 1527 | 1528 | /has-property-descriptors/1.0.0: 1529 | resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} 1530 | dependencies: 1531 | get-intrinsic: 1.2.0 1532 | dev: true 1533 | 1534 | /has-proto/1.0.1: 1535 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} 1536 | engines: {node: '>= 0.4'} 1537 | dev: true 1538 | 1539 | /has-symbols/1.0.3: 1540 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 1541 | engines: {node: '>= 0.4'} 1542 | dev: true 1543 | 1544 | /has-tostringtag/1.0.0: 1545 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} 1546 | engines: {node: '>= 0.4'} 1547 | dependencies: 1548 | has-symbols: 1.0.3 1549 | dev: true 1550 | 1551 | /has/1.0.3: 1552 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1553 | engines: {node: '>= 0.4.0'} 1554 | dependencies: 1555 | function-bind: 1.1.1 1556 | dev: true 1557 | 1558 | /hosted-git-info/2.8.9: 1559 | resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} 1560 | dev: true 1561 | 1562 | /human-id/1.0.2: 1563 | resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} 1564 | dev: true 1565 | 1566 | /human-signals/2.1.0: 1567 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 1568 | engines: {node: '>=10.17.0'} 1569 | dev: true 1570 | 1571 | /iconv-lite/0.4.24: 1572 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 1573 | engines: {node: '>=0.10.0'} 1574 | dependencies: 1575 | safer-buffer: 2.1.2 1576 | dev: true 1577 | 1578 | /ignore/5.2.4: 1579 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} 1580 | engines: {node: '>= 4'} 1581 | dev: true 1582 | 1583 | /indent-string/4.0.0: 1584 | resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} 1585 | engines: {node: '>=8'} 1586 | dev: true 1587 | 1588 | /inflight/1.0.6: 1589 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1590 | dependencies: 1591 | once: 1.4.0 1592 | wrappy: 1.0.2 1593 | dev: true 1594 | 1595 | /inherits/2.0.4: 1596 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1597 | dev: true 1598 | 1599 | /internal-slot/1.0.5: 1600 | resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} 1601 | engines: {node: '>= 0.4'} 1602 | dependencies: 1603 | get-intrinsic: 1.2.0 1604 | has: 1.0.3 1605 | side-channel: 1.0.4 1606 | dev: true 1607 | 1608 | /is-array-buffer/3.0.2: 1609 | resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} 1610 | dependencies: 1611 | call-bind: 1.0.2 1612 | get-intrinsic: 1.2.0 1613 | is-typed-array: 1.1.10 1614 | dev: true 1615 | 1616 | /is-arrayish/0.2.1: 1617 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 1618 | dev: true 1619 | 1620 | /is-bigint/1.0.4: 1621 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 1622 | dependencies: 1623 | has-bigints: 1.0.2 1624 | dev: true 1625 | 1626 | /is-binary-path/2.1.0: 1627 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1628 | engines: {node: '>=8'} 1629 | dependencies: 1630 | binary-extensions: 2.2.0 1631 | dev: true 1632 | 1633 | /is-boolean-object/1.1.2: 1634 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 1635 | engines: {node: '>= 0.4'} 1636 | dependencies: 1637 | call-bind: 1.0.2 1638 | has-tostringtag: 1.0.0 1639 | dev: true 1640 | 1641 | /is-callable/1.2.7: 1642 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 1643 | engines: {node: '>= 0.4'} 1644 | dev: true 1645 | 1646 | /is-ci/3.0.1: 1647 | resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} 1648 | hasBin: true 1649 | dependencies: 1650 | ci-info: 3.8.0 1651 | dev: true 1652 | 1653 | /is-core-module/2.11.0: 1654 | resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} 1655 | dependencies: 1656 | has: 1.0.3 1657 | dev: true 1658 | 1659 | /is-date-object/1.0.5: 1660 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 1661 | engines: {node: '>= 0.4'} 1662 | dependencies: 1663 | has-tostringtag: 1.0.0 1664 | dev: true 1665 | 1666 | /is-extglob/2.1.1: 1667 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1668 | engines: {node: '>=0.10.0'} 1669 | dev: true 1670 | 1671 | /is-fullwidth-code-point/3.0.0: 1672 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1673 | engines: {node: '>=8'} 1674 | dev: true 1675 | 1676 | /is-fullwidth-code-point/4.0.0: 1677 | resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} 1678 | engines: {node: '>=12'} 1679 | dev: true 1680 | 1681 | /is-glob/4.0.3: 1682 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1683 | engines: {node: '>=0.10.0'} 1684 | dependencies: 1685 | is-extglob: 2.1.1 1686 | dev: true 1687 | 1688 | /is-negative-zero/2.0.2: 1689 | resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} 1690 | engines: {node: '>= 0.4'} 1691 | dev: true 1692 | 1693 | /is-number-object/1.0.7: 1694 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 1695 | engines: {node: '>= 0.4'} 1696 | dependencies: 1697 | has-tostringtag: 1.0.0 1698 | dev: true 1699 | 1700 | /is-number/7.0.0: 1701 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1702 | engines: {node: '>=0.12.0'} 1703 | dev: true 1704 | 1705 | /is-plain-obj/1.1.0: 1706 | resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} 1707 | engines: {node: '>=0.10.0'} 1708 | dev: true 1709 | 1710 | /is-regex/1.1.4: 1711 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 1712 | engines: {node: '>= 0.4'} 1713 | dependencies: 1714 | call-bind: 1.0.2 1715 | has-tostringtag: 1.0.0 1716 | dev: true 1717 | 1718 | /is-shared-array-buffer/1.0.2: 1719 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} 1720 | dependencies: 1721 | call-bind: 1.0.2 1722 | dev: true 1723 | 1724 | /is-stream/2.0.1: 1725 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 1726 | engines: {node: '>=8'} 1727 | dev: true 1728 | 1729 | /is-string/1.0.7: 1730 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 1731 | engines: {node: '>= 0.4'} 1732 | dependencies: 1733 | has-tostringtag: 1.0.0 1734 | dev: true 1735 | 1736 | /is-subdir/1.2.0: 1737 | resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} 1738 | engines: {node: '>=4'} 1739 | dependencies: 1740 | better-path-resolve: 1.0.0 1741 | dev: true 1742 | 1743 | /is-symbol/1.0.4: 1744 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 1745 | engines: {node: '>= 0.4'} 1746 | dependencies: 1747 | has-symbols: 1.0.3 1748 | dev: true 1749 | 1750 | /is-typed-array/1.1.10: 1751 | resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} 1752 | engines: {node: '>= 0.4'} 1753 | dependencies: 1754 | available-typed-arrays: 1.0.5 1755 | call-bind: 1.0.2 1756 | for-each: 0.3.3 1757 | gopd: 1.0.1 1758 | has-tostringtag: 1.0.0 1759 | dev: true 1760 | 1761 | /is-weakref/1.0.2: 1762 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 1763 | dependencies: 1764 | call-bind: 1.0.2 1765 | dev: true 1766 | 1767 | /is-windows/1.0.2: 1768 | resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} 1769 | engines: {node: '>=0.10.0'} 1770 | dev: true 1771 | 1772 | /isexe/2.0.0: 1773 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1774 | dev: true 1775 | 1776 | /joycon/3.1.1: 1777 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} 1778 | engines: {node: '>=10'} 1779 | dev: true 1780 | 1781 | /js-tokens/4.0.0: 1782 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1783 | dev: true 1784 | 1785 | /js-yaml/3.14.1: 1786 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 1787 | hasBin: true 1788 | dependencies: 1789 | argparse: 1.0.10 1790 | esprima: 4.0.1 1791 | dev: true 1792 | 1793 | /json-parse-even-better-errors/2.3.1: 1794 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1795 | dev: true 1796 | 1797 | /jsonc-parser/3.2.0: 1798 | resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} 1799 | dev: true 1800 | 1801 | /jsonfile/4.0.0: 1802 | resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} 1803 | optionalDependencies: 1804 | graceful-fs: 4.2.10 1805 | dev: true 1806 | 1807 | /kind-of/6.0.3: 1808 | resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} 1809 | engines: {node: '>=0.10.0'} 1810 | dev: true 1811 | 1812 | /kleur/4.1.5: 1813 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 1814 | engines: {node: '>=6'} 1815 | dev: true 1816 | 1817 | /lilconfig/2.1.0: 1818 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 1819 | engines: {node: '>=10'} 1820 | dev: true 1821 | 1822 | /lines-and-columns/1.2.4: 1823 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1824 | dev: true 1825 | 1826 | /load-tsconfig/0.2.3: 1827 | resolution: {integrity: sha512-iyT2MXws+dc2Wi6o3grCFtGXpeMvHmJqS27sMPGtV2eUu4PeFnG+33I8BlFK1t1NWMjOpcx9bridn5yxLDX2gQ==} 1828 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1829 | dev: true 1830 | 1831 | /load-yaml-file/0.2.0: 1832 | resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} 1833 | engines: {node: '>=6'} 1834 | dependencies: 1835 | graceful-fs: 4.2.10 1836 | js-yaml: 3.14.1 1837 | pify: 4.0.1 1838 | strip-bom: 3.0.0 1839 | dev: true 1840 | 1841 | /local-pkg/0.4.3: 1842 | resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} 1843 | engines: {node: '>=14'} 1844 | dev: true 1845 | 1846 | /locate-path/5.0.0: 1847 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1848 | engines: {node: '>=8'} 1849 | dependencies: 1850 | p-locate: 4.1.0 1851 | dev: true 1852 | 1853 | /locate-path/6.0.0: 1854 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1855 | engines: {node: '>=10'} 1856 | dependencies: 1857 | p-locate: 5.0.0 1858 | dev: true 1859 | 1860 | /lodash.sortby/4.7.0: 1861 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} 1862 | dev: true 1863 | 1864 | /lodash.startcase/4.4.0: 1865 | resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} 1866 | dev: true 1867 | 1868 | /loupe/2.3.6: 1869 | resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} 1870 | dependencies: 1871 | get-func-name: 2.0.0 1872 | dev: true 1873 | 1874 | /lru-cache/4.1.5: 1875 | resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} 1876 | dependencies: 1877 | pseudomap: 1.0.2 1878 | yallist: 2.1.2 1879 | dev: true 1880 | 1881 | /map-obj/1.0.1: 1882 | resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} 1883 | engines: {node: '>=0.10.0'} 1884 | dev: true 1885 | 1886 | /map-obj/4.3.0: 1887 | resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} 1888 | engines: {node: '>=8'} 1889 | dev: true 1890 | 1891 | /meow/6.1.1: 1892 | resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} 1893 | engines: {node: '>=8'} 1894 | dependencies: 1895 | '@types/minimist': 1.2.2 1896 | camelcase-keys: 6.2.2 1897 | decamelize-keys: 1.1.1 1898 | hard-rejection: 2.1.0 1899 | minimist-options: 4.1.0 1900 | normalize-package-data: 2.5.0 1901 | read-pkg-up: 7.0.1 1902 | redent: 3.0.0 1903 | trim-newlines: 3.0.1 1904 | type-fest: 0.13.1 1905 | yargs-parser: 18.1.3 1906 | dev: true 1907 | 1908 | /merge-stream/2.0.0: 1909 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1910 | dev: true 1911 | 1912 | /merge2/1.4.1: 1913 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1914 | engines: {node: '>= 8'} 1915 | dev: true 1916 | 1917 | /micromatch/4.0.5: 1918 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1919 | engines: {node: '>=8.6'} 1920 | dependencies: 1921 | braces: 3.0.2 1922 | picomatch: 2.3.1 1923 | dev: true 1924 | 1925 | /mimic-fn/2.1.0: 1926 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 1927 | engines: {node: '>=6'} 1928 | dev: true 1929 | 1930 | /min-indent/1.0.1: 1931 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 1932 | engines: {node: '>=4'} 1933 | dev: true 1934 | 1935 | /minimatch/3.1.2: 1936 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1937 | dependencies: 1938 | brace-expansion: 1.1.11 1939 | dev: true 1940 | 1941 | /minimist-options/4.1.0: 1942 | resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} 1943 | engines: {node: '>= 6'} 1944 | dependencies: 1945 | arrify: 1.0.1 1946 | is-plain-obj: 1.1.0 1947 | kind-of: 6.0.3 1948 | dev: true 1949 | 1950 | /mixme/0.5.5: 1951 | resolution: {integrity: sha512-/6IupbRx32s7jjEwHcycXikJwFD5UujbVNuJFkeKLYje+92OvtuPniF6JhnFm5JCTDUhS+kYK3W/4BWYQYXz7w==} 1952 | engines: {node: '>= 8.0.0'} 1953 | dev: true 1954 | 1955 | /mlly/1.2.0: 1956 | resolution: {integrity: sha512-+c7A3CV0KGdKcylsI6khWyts/CYrGTrRVo4R/I7u/cUsy0Conxa6LUhiEzVKIw14lc2L5aiO4+SeVe4TeGRKww==} 1957 | dependencies: 1958 | acorn: 8.8.2 1959 | pathe: 1.1.0 1960 | pkg-types: 1.0.2 1961 | ufo: 1.1.1 1962 | dev: true 1963 | 1964 | /ms/2.1.2: 1965 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1966 | dev: true 1967 | 1968 | /mz/2.7.0: 1969 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 1970 | dependencies: 1971 | any-promise: 1.3.0 1972 | object-assign: 4.1.1 1973 | thenify-all: 1.6.0 1974 | dev: true 1975 | 1976 | /nanoid/3.3.4: 1977 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} 1978 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1979 | hasBin: true 1980 | dev: true 1981 | 1982 | /normalize-package-data/2.5.0: 1983 | resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} 1984 | dependencies: 1985 | hosted-git-info: 2.8.9 1986 | resolve: 1.22.1 1987 | semver: 5.7.1 1988 | validate-npm-package-license: 3.0.4 1989 | dev: true 1990 | 1991 | /normalize-path/3.0.0: 1992 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1993 | engines: {node: '>=0.10.0'} 1994 | dev: true 1995 | 1996 | /npm-run-path/4.0.1: 1997 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 1998 | engines: {node: '>=8'} 1999 | dependencies: 2000 | path-key: 3.1.1 2001 | dev: true 2002 | 2003 | /object-assign/4.1.1: 2004 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 2005 | engines: {node: '>=0.10.0'} 2006 | dev: true 2007 | 2008 | /object-inspect/1.12.3: 2009 | resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} 2010 | dev: true 2011 | 2012 | /object-keys/1.1.1: 2013 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 2014 | engines: {node: '>= 0.4'} 2015 | dev: true 2016 | 2017 | /object.assign/4.1.4: 2018 | resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} 2019 | engines: {node: '>= 0.4'} 2020 | dependencies: 2021 | call-bind: 1.0.2 2022 | define-properties: 1.2.0 2023 | has-symbols: 1.0.3 2024 | object-keys: 1.1.1 2025 | dev: true 2026 | 2027 | /once/1.4.0: 2028 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 2029 | dependencies: 2030 | wrappy: 1.0.2 2031 | dev: true 2032 | 2033 | /onetime/5.1.2: 2034 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 2035 | engines: {node: '>=6'} 2036 | dependencies: 2037 | mimic-fn: 2.1.0 2038 | dev: true 2039 | 2040 | /os-tmpdir/1.0.2: 2041 | resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} 2042 | engines: {node: '>=0.10.0'} 2043 | dev: true 2044 | 2045 | /outdent/0.5.0: 2046 | resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} 2047 | dev: true 2048 | 2049 | /p-filter/2.1.0: 2050 | resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} 2051 | engines: {node: '>=8'} 2052 | dependencies: 2053 | p-map: 2.1.0 2054 | dev: true 2055 | 2056 | /p-limit/2.3.0: 2057 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 2058 | engines: {node: '>=6'} 2059 | dependencies: 2060 | p-try: 2.2.0 2061 | dev: true 2062 | 2063 | /p-limit/3.1.0: 2064 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 2065 | engines: {node: '>=10'} 2066 | dependencies: 2067 | yocto-queue: 0.1.0 2068 | dev: true 2069 | 2070 | /p-limit/4.0.0: 2071 | resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} 2072 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2073 | dependencies: 2074 | yocto-queue: 1.0.0 2075 | dev: true 2076 | 2077 | /p-locate/4.1.0: 2078 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 2079 | engines: {node: '>=8'} 2080 | dependencies: 2081 | p-limit: 2.3.0 2082 | dev: true 2083 | 2084 | /p-locate/5.0.0: 2085 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 2086 | engines: {node: '>=10'} 2087 | dependencies: 2088 | p-limit: 3.1.0 2089 | dev: true 2090 | 2091 | /p-map/2.1.0: 2092 | resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} 2093 | engines: {node: '>=6'} 2094 | dev: true 2095 | 2096 | /p-try/2.2.0: 2097 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 2098 | engines: {node: '>=6'} 2099 | dev: true 2100 | 2101 | /parse-json/5.2.0: 2102 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 2103 | engines: {node: '>=8'} 2104 | dependencies: 2105 | '@babel/code-frame': 7.18.6 2106 | error-ex: 1.3.2 2107 | json-parse-even-better-errors: 2.3.1 2108 | lines-and-columns: 1.2.4 2109 | dev: true 2110 | 2111 | /path-exists/4.0.0: 2112 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 2113 | engines: {node: '>=8'} 2114 | dev: true 2115 | 2116 | /path-is-absolute/1.0.1: 2117 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 2118 | engines: {node: '>=0.10.0'} 2119 | dev: true 2120 | 2121 | /path-key/3.1.1: 2122 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 2123 | engines: {node: '>=8'} 2124 | dev: true 2125 | 2126 | /path-parse/1.0.7: 2127 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 2128 | dev: true 2129 | 2130 | /path-type/4.0.0: 2131 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 2132 | engines: {node: '>=8'} 2133 | dev: true 2134 | 2135 | /pathe/1.1.0: 2136 | resolution: {integrity: sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==} 2137 | dev: true 2138 | 2139 | /pathval/1.1.1: 2140 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} 2141 | dev: true 2142 | 2143 | /picocolors/1.0.0: 2144 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 2145 | dev: true 2146 | 2147 | /picomatch/2.3.1: 2148 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 2149 | engines: {node: '>=8.6'} 2150 | dev: true 2151 | 2152 | /pify/4.0.1: 2153 | resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} 2154 | engines: {node: '>=6'} 2155 | dev: true 2156 | 2157 | /pirates/4.0.5: 2158 | resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} 2159 | engines: {node: '>= 6'} 2160 | dev: true 2161 | 2162 | /pkg-dir/4.2.0: 2163 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 2164 | engines: {node: '>=8'} 2165 | dependencies: 2166 | find-up: 4.1.0 2167 | dev: true 2168 | 2169 | /pkg-types/1.0.2: 2170 | resolution: {integrity: sha512-hM58GKXOcj8WTqUXnsQyJYXdeAPbythQgEF3nTcEo+nkD49chjQ9IKm/QJy9xf6JakXptz86h7ecP2024rrLaQ==} 2171 | dependencies: 2172 | jsonc-parser: 3.2.0 2173 | mlly: 1.2.0 2174 | pathe: 1.1.0 2175 | dev: true 2176 | 2177 | /postcss-load-config/3.1.4: 2178 | resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} 2179 | engines: {node: '>= 10'} 2180 | peerDependencies: 2181 | postcss: '>=8.0.9' 2182 | ts-node: '>=9.0.0' 2183 | peerDependenciesMeta: 2184 | postcss: 2185 | optional: true 2186 | ts-node: 2187 | optional: true 2188 | dependencies: 2189 | lilconfig: 2.1.0 2190 | yaml: 1.10.2 2191 | dev: true 2192 | 2193 | /postcss/8.4.21: 2194 | resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==} 2195 | engines: {node: ^10 || ^12 || >=14} 2196 | dependencies: 2197 | nanoid: 3.3.4 2198 | picocolors: 1.0.0 2199 | source-map-js: 1.0.2 2200 | dev: true 2201 | 2202 | /preferred-pm/3.0.3: 2203 | resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==} 2204 | engines: {node: '>=10'} 2205 | dependencies: 2206 | find-up: 5.0.0 2207 | find-yarn-workspace-root2: 1.2.16 2208 | path-exists: 4.0.0 2209 | which-pm: 2.0.0 2210 | dev: true 2211 | 2212 | /prettier/2.8.4: 2213 | resolution: {integrity: sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==} 2214 | engines: {node: '>=10.13.0'} 2215 | hasBin: true 2216 | dev: true 2217 | 2218 | /pretty-format/27.5.1: 2219 | resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} 2220 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2221 | dependencies: 2222 | ansi-regex: 5.0.1 2223 | ansi-styles: 5.2.0 2224 | react-is: 17.0.2 2225 | dev: true 2226 | 2227 | /pseudomap/1.0.2: 2228 | resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} 2229 | dev: true 2230 | 2231 | /punycode/2.3.0: 2232 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} 2233 | engines: {node: '>=6'} 2234 | dev: true 2235 | 2236 | /queue-microtask/1.2.3: 2237 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 2238 | dev: true 2239 | 2240 | /quick-lru/4.0.1: 2241 | resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} 2242 | engines: {node: '>=8'} 2243 | dev: true 2244 | 2245 | /react-is/17.0.2: 2246 | resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} 2247 | dev: true 2248 | 2249 | /read-pkg-up/7.0.1: 2250 | resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} 2251 | engines: {node: '>=8'} 2252 | dependencies: 2253 | find-up: 4.1.0 2254 | read-pkg: 5.2.0 2255 | type-fest: 0.8.1 2256 | dev: true 2257 | 2258 | /read-pkg/5.2.0: 2259 | resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} 2260 | engines: {node: '>=8'} 2261 | dependencies: 2262 | '@types/normalize-package-data': 2.4.1 2263 | normalize-package-data: 2.5.0 2264 | parse-json: 5.2.0 2265 | type-fest: 0.6.0 2266 | dev: true 2267 | 2268 | /read-yaml-file/1.1.0: 2269 | resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} 2270 | engines: {node: '>=6'} 2271 | dependencies: 2272 | graceful-fs: 4.2.10 2273 | js-yaml: 3.14.1 2274 | pify: 4.0.1 2275 | strip-bom: 3.0.0 2276 | dev: true 2277 | 2278 | /readdirp/3.6.0: 2279 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 2280 | engines: {node: '>=8.10.0'} 2281 | dependencies: 2282 | picomatch: 2.3.1 2283 | dev: true 2284 | 2285 | /redent/3.0.0: 2286 | resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} 2287 | engines: {node: '>=8'} 2288 | dependencies: 2289 | indent-string: 4.0.0 2290 | strip-indent: 3.0.0 2291 | dev: true 2292 | 2293 | /regenerator-runtime/0.13.11: 2294 | resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} 2295 | dev: true 2296 | 2297 | /regexp.prototype.flags/1.4.3: 2298 | resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} 2299 | engines: {node: '>= 0.4'} 2300 | dependencies: 2301 | call-bind: 1.0.2 2302 | define-properties: 1.2.0 2303 | functions-have-names: 1.2.3 2304 | dev: true 2305 | 2306 | /require-directory/2.1.1: 2307 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 2308 | engines: {node: '>=0.10.0'} 2309 | dev: true 2310 | 2311 | /require-main-filename/2.0.0: 2312 | resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} 2313 | dev: true 2314 | 2315 | /resolve-from/5.0.0: 2316 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 2317 | engines: {node: '>=8'} 2318 | dev: true 2319 | 2320 | /resolve/1.22.1: 2321 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} 2322 | hasBin: true 2323 | dependencies: 2324 | is-core-module: 2.11.0 2325 | path-parse: 1.0.7 2326 | supports-preserve-symlinks-flag: 1.0.0 2327 | dev: true 2328 | 2329 | /reusify/1.0.4: 2330 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2331 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2332 | dev: true 2333 | 2334 | /rollup/3.19.1: 2335 | resolution: {integrity: sha512-lAbrdN7neYCg/8WaoWn/ckzCtz+jr70GFfYdlf50OF7387HTg+wiuiqJRFYawwSPpqfqDNYqK7smY/ks2iAudg==} 2336 | engines: {node: '>=14.18.0', npm: '>=8.0.0'} 2337 | hasBin: true 2338 | optionalDependencies: 2339 | fsevents: 2.3.2 2340 | dev: true 2341 | 2342 | /run-parallel/1.2.0: 2343 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2344 | dependencies: 2345 | queue-microtask: 1.2.3 2346 | dev: true 2347 | 2348 | /safe-regex-test/1.0.0: 2349 | resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} 2350 | dependencies: 2351 | call-bind: 1.0.2 2352 | get-intrinsic: 1.2.0 2353 | is-regex: 1.1.4 2354 | dev: true 2355 | 2356 | /safer-buffer/2.1.2: 2357 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 2358 | dev: true 2359 | 2360 | /semver/5.7.1: 2361 | resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} 2362 | hasBin: true 2363 | dev: true 2364 | 2365 | /set-blocking/2.0.0: 2366 | resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} 2367 | dev: true 2368 | 2369 | /shebang-command/1.2.0: 2370 | resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} 2371 | engines: {node: '>=0.10.0'} 2372 | dependencies: 2373 | shebang-regex: 1.0.0 2374 | dev: true 2375 | 2376 | /shebang-command/2.0.0: 2377 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2378 | engines: {node: '>=8'} 2379 | dependencies: 2380 | shebang-regex: 3.0.0 2381 | dev: true 2382 | 2383 | /shebang-regex/1.0.0: 2384 | resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} 2385 | engines: {node: '>=0.10.0'} 2386 | dev: true 2387 | 2388 | /shebang-regex/3.0.0: 2389 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2390 | engines: {node: '>=8'} 2391 | dev: true 2392 | 2393 | /side-channel/1.0.4: 2394 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 2395 | dependencies: 2396 | call-bind: 1.0.2 2397 | get-intrinsic: 1.2.0 2398 | object-inspect: 1.12.3 2399 | dev: true 2400 | 2401 | /siginfo/2.0.0: 2402 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 2403 | dev: true 2404 | 2405 | /signal-exit/3.0.7: 2406 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 2407 | dev: true 2408 | 2409 | /slash/3.0.0: 2410 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2411 | engines: {node: '>=8'} 2412 | dev: true 2413 | 2414 | /slice-ansi/5.0.0: 2415 | resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} 2416 | engines: {node: '>=12'} 2417 | dependencies: 2418 | ansi-styles: 6.2.1 2419 | is-fullwidth-code-point: 4.0.0 2420 | dev: true 2421 | 2422 | /smartwrap/2.0.2: 2423 | resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} 2424 | engines: {node: '>=6'} 2425 | hasBin: true 2426 | dependencies: 2427 | array.prototype.flat: 1.3.1 2428 | breakword: 1.0.5 2429 | grapheme-splitter: 1.0.4 2430 | strip-ansi: 6.0.1 2431 | wcwidth: 1.0.1 2432 | yargs: 15.4.1 2433 | dev: true 2434 | 2435 | /source-map-js/1.0.2: 2436 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 2437 | engines: {node: '>=0.10.0'} 2438 | dev: true 2439 | 2440 | /source-map/0.6.1: 2441 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 2442 | engines: {node: '>=0.10.0'} 2443 | dev: true 2444 | 2445 | /source-map/0.8.0-beta.0: 2446 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} 2447 | engines: {node: '>= 8'} 2448 | dependencies: 2449 | whatwg-url: 7.1.0 2450 | dev: true 2451 | 2452 | /spawndamnit/2.0.0: 2453 | resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} 2454 | dependencies: 2455 | cross-spawn: 5.1.0 2456 | signal-exit: 3.0.7 2457 | dev: true 2458 | 2459 | /spdx-correct/3.2.0: 2460 | resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} 2461 | dependencies: 2462 | spdx-expression-parse: 3.0.1 2463 | spdx-license-ids: 3.0.13 2464 | dev: true 2465 | 2466 | /spdx-exceptions/2.3.0: 2467 | resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} 2468 | dev: true 2469 | 2470 | /spdx-expression-parse/3.0.1: 2471 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} 2472 | dependencies: 2473 | spdx-exceptions: 2.3.0 2474 | spdx-license-ids: 3.0.13 2475 | dev: true 2476 | 2477 | /spdx-license-ids/3.0.13: 2478 | resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} 2479 | dev: true 2480 | 2481 | /sprintf-js/1.0.3: 2482 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 2483 | dev: true 2484 | 2485 | /stackback/0.0.2: 2486 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 2487 | dev: true 2488 | 2489 | /std-env/3.3.2: 2490 | resolution: {integrity: sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA==} 2491 | dev: true 2492 | 2493 | /stream-transform/2.1.3: 2494 | resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} 2495 | dependencies: 2496 | mixme: 0.5.5 2497 | dev: true 2498 | 2499 | /string-width/4.2.3: 2500 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 2501 | engines: {node: '>=8'} 2502 | dependencies: 2503 | emoji-regex: 8.0.0 2504 | is-fullwidth-code-point: 3.0.0 2505 | strip-ansi: 6.0.1 2506 | dev: true 2507 | 2508 | /string-width/5.1.2: 2509 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 2510 | engines: {node: '>=12'} 2511 | dependencies: 2512 | eastasianwidth: 0.2.0 2513 | emoji-regex: 9.2.2 2514 | strip-ansi: 7.0.1 2515 | dev: true 2516 | 2517 | /string.prototype.trim/1.2.7: 2518 | resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} 2519 | engines: {node: '>= 0.4'} 2520 | dependencies: 2521 | call-bind: 1.0.2 2522 | define-properties: 1.2.0 2523 | es-abstract: 1.21.2 2524 | dev: true 2525 | 2526 | /string.prototype.trimend/1.0.6: 2527 | resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} 2528 | dependencies: 2529 | call-bind: 1.0.2 2530 | define-properties: 1.2.0 2531 | es-abstract: 1.21.2 2532 | dev: true 2533 | 2534 | /string.prototype.trimstart/1.0.6: 2535 | resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} 2536 | dependencies: 2537 | call-bind: 1.0.2 2538 | define-properties: 1.2.0 2539 | es-abstract: 1.21.2 2540 | dev: true 2541 | 2542 | /strip-ansi/6.0.1: 2543 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2544 | engines: {node: '>=8'} 2545 | dependencies: 2546 | ansi-regex: 5.0.1 2547 | dev: true 2548 | 2549 | /strip-ansi/7.0.1: 2550 | resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} 2551 | engines: {node: '>=12'} 2552 | dependencies: 2553 | ansi-regex: 6.0.1 2554 | dev: true 2555 | 2556 | /strip-bom/3.0.0: 2557 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 2558 | engines: {node: '>=4'} 2559 | dev: true 2560 | 2561 | /strip-final-newline/2.0.0: 2562 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 2563 | engines: {node: '>=6'} 2564 | dev: true 2565 | 2566 | /strip-indent/3.0.0: 2567 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 2568 | engines: {node: '>=8'} 2569 | dependencies: 2570 | min-indent: 1.0.1 2571 | dev: true 2572 | 2573 | /strip-literal/1.0.1: 2574 | resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==} 2575 | dependencies: 2576 | acorn: 8.8.2 2577 | dev: true 2578 | 2579 | /sucrase/3.29.0: 2580 | resolution: {integrity: sha512-bZPAuGA5SdFHuzqIhTAqt9fvNEo9rESqXIG3oiKdF8K4UmkQxC4KlNL3lVyAErXp+mPvUqZ5l13qx6TrDIGf3A==} 2581 | engines: {node: '>=8'} 2582 | hasBin: true 2583 | dependencies: 2584 | commander: 4.1.1 2585 | glob: 7.1.6 2586 | lines-and-columns: 1.2.4 2587 | mz: 2.7.0 2588 | pirates: 4.0.5 2589 | ts-interface-checker: 0.1.13 2590 | dev: true 2591 | 2592 | /supports-color/5.5.0: 2593 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 2594 | engines: {node: '>=4'} 2595 | dependencies: 2596 | has-flag: 3.0.0 2597 | dev: true 2598 | 2599 | /supports-color/7.2.0: 2600 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2601 | engines: {node: '>=8'} 2602 | dependencies: 2603 | has-flag: 4.0.0 2604 | dev: true 2605 | 2606 | /supports-preserve-symlinks-flag/1.0.0: 2607 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 2608 | engines: {node: '>= 0.4'} 2609 | dev: true 2610 | 2611 | /term-size/2.2.1: 2612 | resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} 2613 | engines: {node: '>=8'} 2614 | dev: true 2615 | 2616 | /thenify-all/1.6.0: 2617 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 2618 | engines: {node: '>=0.8'} 2619 | dependencies: 2620 | thenify: 3.3.1 2621 | dev: true 2622 | 2623 | /thenify/3.3.1: 2624 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 2625 | dependencies: 2626 | any-promise: 1.3.0 2627 | dev: true 2628 | 2629 | /tinybench/2.4.0: 2630 | resolution: {integrity: sha512-iyziEiyFxX4kyxSp+MtY1oCH/lvjH3PxFN8PGCDeqcZWAJ/i+9y+nL85w99PxVzrIvew/GSkSbDYtiGVa85Afg==} 2631 | dev: true 2632 | 2633 | /tinypool/0.3.1: 2634 | resolution: {integrity: sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ==} 2635 | engines: {node: '>=14.0.0'} 2636 | dev: true 2637 | 2638 | /tinyspy/1.1.1: 2639 | resolution: {integrity: sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g==} 2640 | engines: {node: '>=14.0.0'} 2641 | dev: true 2642 | 2643 | /tmp/0.0.33: 2644 | resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} 2645 | engines: {node: '>=0.6.0'} 2646 | dependencies: 2647 | os-tmpdir: 1.0.2 2648 | dev: true 2649 | 2650 | /to-regex-range/5.0.1: 2651 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2652 | engines: {node: '>=8.0'} 2653 | dependencies: 2654 | is-number: 7.0.0 2655 | dev: true 2656 | 2657 | /tr46/1.0.1: 2658 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} 2659 | dependencies: 2660 | punycode: 2.3.0 2661 | dev: true 2662 | 2663 | /tree-kill/1.2.2: 2664 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 2665 | hasBin: true 2666 | dev: true 2667 | 2668 | /trim-newlines/3.0.1: 2669 | resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} 2670 | engines: {node: '>=8'} 2671 | dev: true 2672 | 2673 | /ts-interface-checker/0.1.13: 2674 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 2675 | dev: true 2676 | 2677 | /tsup/6.6.3_typescript@4.9.5: 2678 | resolution: {integrity: sha512-OLx/jFllYlVeZQ7sCHBuRVEQBBa1tFbouoc/gbYakyipjVQdWy/iQOvmExUA/ewap9iQ7tbJf9pW0PgcEFfJcQ==} 2679 | engines: {node: '>=14.18'} 2680 | hasBin: true 2681 | peerDependencies: 2682 | '@swc/core': ^1 2683 | postcss: ^8.4.12 2684 | typescript: ^4.1.0 2685 | peerDependenciesMeta: 2686 | '@swc/core': 2687 | optional: true 2688 | postcss: 2689 | optional: true 2690 | typescript: 2691 | optional: true 2692 | dependencies: 2693 | bundle-require: 4.0.1_esbuild@0.17.11 2694 | cac: 6.7.14 2695 | chokidar: 3.5.3 2696 | debug: 4.3.4 2697 | esbuild: 0.17.11 2698 | execa: 5.1.1 2699 | globby: 11.1.0 2700 | joycon: 3.1.1 2701 | postcss-load-config: 3.1.4 2702 | resolve-from: 5.0.0 2703 | rollup: 3.19.1 2704 | source-map: 0.8.0-beta.0 2705 | sucrase: 3.29.0 2706 | tree-kill: 1.2.2 2707 | typescript: 4.9.5 2708 | transitivePeerDependencies: 2709 | - supports-color 2710 | - ts-node 2711 | dev: true 2712 | 2713 | /tty-table/4.1.6: 2714 | resolution: {integrity: sha512-kRj5CBzOrakV4VRRY5kUWbNYvo/FpOsz65DzI5op9P+cHov3+IqPbo1JE1ZnQGkHdZgNFDsrEjrfqqy/Ply9fw==} 2715 | engines: {node: '>=8.0.0'} 2716 | hasBin: true 2717 | dependencies: 2718 | chalk: 4.1.2 2719 | csv: 5.5.3 2720 | kleur: 4.1.5 2721 | smartwrap: 2.0.2 2722 | strip-ansi: 6.0.1 2723 | wcwidth: 1.0.1 2724 | yargs: 17.7.1 2725 | dev: true 2726 | 2727 | /type-detect/4.0.8: 2728 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 2729 | engines: {node: '>=4'} 2730 | dev: true 2731 | 2732 | /type-fest/0.13.1: 2733 | resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} 2734 | engines: {node: '>=10'} 2735 | dev: true 2736 | 2737 | /type-fest/0.6.0: 2738 | resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} 2739 | engines: {node: '>=8'} 2740 | dev: true 2741 | 2742 | /type-fest/0.8.1: 2743 | resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} 2744 | engines: {node: '>=8'} 2745 | dev: true 2746 | 2747 | /typed-array-length/1.0.4: 2748 | resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} 2749 | dependencies: 2750 | call-bind: 1.0.2 2751 | for-each: 0.3.3 2752 | is-typed-array: 1.1.10 2753 | dev: true 2754 | 2755 | /typescript/4.9.5: 2756 | resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} 2757 | engines: {node: '>=4.2.0'} 2758 | hasBin: true 2759 | dev: true 2760 | 2761 | /ufo/1.1.1: 2762 | resolution: {integrity: sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==} 2763 | dev: true 2764 | 2765 | /unbox-primitive/1.0.2: 2766 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 2767 | dependencies: 2768 | call-bind: 1.0.2 2769 | has-bigints: 1.0.2 2770 | has-symbols: 1.0.3 2771 | which-boxed-primitive: 1.0.2 2772 | dev: true 2773 | 2774 | /universalify/0.1.2: 2775 | resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} 2776 | engines: {node: '>= 4.0.0'} 2777 | dev: true 2778 | 2779 | /validate-npm-package-license/3.0.4: 2780 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} 2781 | dependencies: 2782 | spdx-correct: 3.2.0 2783 | spdx-expression-parse: 3.0.1 2784 | dev: true 2785 | 2786 | /vite-node/0.29.2_@types+node@18.15.1: 2787 | resolution: {integrity: sha512-5oe1z6wzI3gkvc4yOBbDBbgpiWiApvuN4P55E8OI131JGrSuo4X3SOZrNmZYo4R8Zkze/dhi572blX0zc+6SdA==} 2788 | engines: {node: '>=v14.16.0'} 2789 | hasBin: true 2790 | dependencies: 2791 | cac: 6.7.14 2792 | debug: 4.3.4 2793 | mlly: 1.2.0 2794 | pathe: 1.1.0 2795 | picocolors: 1.0.0 2796 | vite: 4.1.4_@types+node@18.15.1 2797 | transitivePeerDependencies: 2798 | - '@types/node' 2799 | - less 2800 | - sass 2801 | - stylus 2802 | - sugarss 2803 | - supports-color 2804 | - terser 2805 | dev: true 2806 | 2807 | /vite/4.1.4: 2808 | resolution: {integrity: sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg==} 2809 | engines: {node: ^14.18.0 || >=16.0.0} 2810 | hasBin: true 2811 | peerDependencies: 2812 | '@types/node': '>= 14' 2813 | less: '*' 2814 | sass: '*' 2815 | stylus: '*' 2816 | sugarss: '*' 2817 | terser: ^5.4.0 2818 | peerDependenciesMeta: 2819 | '@types/node': 2820 | optional: true 2821 | less: 2822 | optional: true 2823 | sass: 2824 | optional: true 2825 | stylus: 2826 | optional: true 2827 | sugarss: 2828 | optional: true 2829 | terser: 2830 | optional: true 2831 | dependencies: 2832 | esbuild: 0.16.17 2833 | postcss: 8.4.21 2834 | resolve: 1.22.1 2835 | rollup: 3.19.1 2836 | optionalDependencies: 2837 | fsevents: 2.3.2 2838 | dev: true 2839 | 2840 | /vite/4.1.4_@types+node@18.15.1: 2841 | resolution: {integrity: sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg==} 2842 | engines: {node: ^14.18.0 || >=16.0.0} 2843 | hasBin: true 2844 | peerDependencies: 2845 | '@types/node': '>= 14' 2846 | less: '*' 2847 | sass: '*' 2848 | stylus: '*' 2849 | sugarss: '*' 2850 | terser: ^5.4.0 2851 | peerDependenciesMeta: 2852 | '@types/node': 2853 | optional: true 2854 | less: 2855 | optional: true 2856 | sass: 2857 | optional: true 2858 | stylus: 2859 | optional: true 2860 | sugarss: 2861 | optional: true 2862 | terser: 2863 | optional: true 2864 | dependencies: 2865 | '@types/node': 18.15.1 2866 | esbuild: 0.16.17 2867 | postcss: 8.4.21 2868 | resolve: 1.22.1 2869 | rollup: 3.19.1 2870 | optionalDependencies: 2871 | fsevents: 2.3.2 2872 | dev: true 2873 | 2874 | /vitest/0.29.2: 2875 | resolution: {integrity: sha512-ydK9IGbAvoY8wkg29DQ4ivcVviCaUi3ivuPKfZEVddMTenFHUfB8EEDXQV8+RasEk1ACFLgMUqAaDuQ/Nk+mQA==} 2876 | engines: {node: '>=v14.16.0'} 2877 | hasBin: true 2878 | peerDependencies: 2879 | '@edge-runtime/vm': '*' 2880 | '@vitest/browser': '*' 2881 | '@vitest/ui': '*' 2882 | happy-dom: '*' 2883 | jsdom: '*' 2884 | peerDependenciesMeta: 2885 | '@edge-runtime/vm': 2886 | optional: true 2887 | '@vitest/browser': 2888 | optional: true 2889 | '@vitest/ui': 2890 | optional: true 2891 | happy-dom: 2892 | optional: true 2893 | jsdom: 2894 | optional: true 2895 | dependencies: 2896 | '@types/chai': 4.3.4 2897 | '@types/chai-subset': 1.3.3 2898 | '@types/node': 18.15.1 2899 | '@vitest/expect': 0.29.2 2900 | '@vitest/runner': 0.29.2 2901 | '@vitest/spy': 0.29.2 2902 | '@vitest/utils': 0.29.2 2903 | acorn: 8.8.2 2904 | acorn-walk: 8.2.0 2905 | cac: 6.7.14 2906 | chai: 4.3.7 2907 | debug: 4.3.4 2908 | local-pkg: 0.4.3 2909 | pathe: 1.1.0 2910 | picocolors: 1.0.0 2911 | source-map: 0.6.1 2912 | std-env: 3.3.2 2913 | strip-literal: 1.0.1 2914 | tinybench: 2.4.0 2915 | tinypool: 0.3.1 2916 | tinyspy: 1.1.1 2917 | vite: 4.1.4_@types+node@18.15.1 2918 | vite-node: 0.29.2_@types+node@18.15.1 2919 | why-is-node-running: 2.2.2 2920 | transitivePeerDependencies: 2921 | - less 2922 | - sass 2923 | - stylus 2924 | - sugarss 2925 | - supports-color 2926 | - terser 2927 | dev: true 2928 | 2929 | /wcwidth/1.0.1: 2930 | resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} 2931 | dependencies: 2932 | defaults: 1.0.4 2933 | dev: true 2934 | 2935 | /webidl-conversions/4.0.2: 2936 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} 2937 | dev: true 2938 | 2939 | /whatwg-url/7.1.0: 2940 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} 2941 | dependencies: 2942 | lodash.sortby: 4.7.0 2943 | tr46: 1.0.1 2944 | webidl-conversions: 4.0.2 2945 | dev: true 2946 | 2947 | /which-boxed-primitive/1.0.2: 2948 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 2949 | dependencies: 2950 | is-bigint: 1.0.4 2951 | is-boolean-object: 1.1.2 2952 | is-number-object: 1.0.7 2953 | is-string: 1.0.7 2954 | is-symbol: 1.0.4 2955 | dev: true 2956 | 2957 | /which-module/2.0.0: 2958 | resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} 2959 | dev: true 2960 | 2961 | /which-pm/2.0.0: 2962 | resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} 2963 | engines: {node: '>=8.15'} 2964 | dependencies: 2965 | load-yaml-file: 0.2.0 2966 | path-exists: 4.0.0 2967 | dev: true 2968 | 2969 | /which-typed-array/1.1.9: 2970 | resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} 2971 | engines: {node: '>= 0.4'} 2972 | dependencies: 2973 | available-typed-arrays: 1.0.5 2974 | call-bind: 1.0.2 2975 | for-each: 0.3.3 2976 | gopd: 1.0.1 2977 | has-tostringtag: 1.0.0 2978 | is-typed-array: 1.1.10 2979 | dev: true 2980 | 2981 | /which/1.3.1: 2982 | resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} 2983 | hasBin: true 2984 | dependencies: 2985 | isexe: 2.0.0 2986 | dev: true 2987 | 2988 | /which/2.0.2: 2989 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2990 | engines: {node: '>= 8'} 2991 | hasBin: true 2992 | dependencies: 2993 | isexe: 2.0.0 2994 | dev: true 2995 | 2996 | /why-is-node-running/2.2.2: 2997 | resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} 2998 | engines: {node: '>=8'} 2999 | hasBin: true 3000 | dependencies: 3001 | siginfo: 2.0.0 3002 | stackback: 0.0.2 3003 | dev: true 3004 | 3005 | /wrap-ansi/6.2.0: 3006 | resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} 3007 | engines: {node: '>=8'} 3008 | dependencies: 3009 | ansi-styles: 4.3.0 3010 | string-width: 4.2.3 3011 | strip-ansi: 6.0.1 3012 | dev: true 3013 | 3014 | /wrap-ansi/7.0.0: 3015 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 3016 | engines: {node: '>=10'} 3017 | dependencies: 3018 | ansi-styles: 4.3.0 3019 | string-width: 4.2.3 3020 | strip-ansi: 6.0.1 3021 | dev: true 3022 | 3023 | /wrappy/1.0.2: 3024 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 3025 | dev: true 3026 | 3027 | /y18n/4.0.3: 3028 | resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} 3029 | dev: true 3030 | 3031 | /y18n/5.0.8: 3032 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 3033 | engines: {node: '>=10'} 3034 | dev: true 3035 | 3036 | /yallist/2.1.2: 3037 | resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} 3038 | dev: true 3039 | 3040 | /yaml/1.10.2: 3041 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} 3042 | engines: {node: '>= 6'} 3043 | dev: true 3044 | 3045 | /yargs-parser/18.1.3: 3046 | resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} 3047 | engines: {node: '>=6'} 3048 | dependencies: 3049 | camelcase: 5.3.1 3050 | decamelize: 1.2.0 3051 | dev: true 3052 | 3053 | /yargs-parser/21.1.1: 3054 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 3055 | engines: {node: '>=12'} 3056 | dev: true 3057 | 3058 | /yargs/15.4.1: 3059 | resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} 3060 | engines: {node: '>=8'} 3061 | dependencies: 3062 | cliui: 6.0.0 3063 | decamelize: 1.2.0 3064 | find-up: 4.1.0 3065 | get-caller-file: 2.0.5 3066 | require-directory: 2.1.1 3067 | require-main-filename: 2.0.0 3068 | set-blocking: 2.0.0 3069 | string-width: 4.2.3 3070 | which-module: 2.0.0 3071 | y18n: 4.0.3 3072 | yargs-parser: 18.1.3 3073 | dev: true 3074 | 3075 | /yargs/17.7.1: 3076 | resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==} 3077 | engines: {node: '>=12'} 3078 | dependencies: 3079 | cliui: 8.0.1 3080 | escalade: 3.1.1 3081 | get-caller-file: 2.0.5 3082 | require-directory: 2.1.1 3083 | string-width: 4.2.3 3084 | y18n: 5.0.8 3085 | yargs-parser: 21.1.1 3086 | dev: true 3087 | 3088 | /yocto-queue/0.1.0: 3089 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 3090 | engines: {node: '>=10'} 3091 | dev: true 3092 | 3093 | /yocto-queue/1.0.0: 3094 | resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} 3095 | engines: {node: '>=12.20'} 3096 | dev: true 3097 | 3098 | /zod/3.21.4: 3099 | resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} 3100 | dev: true 3101 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # Untypeable 2 | 3 | Get type-safe access to any API, with a zero-bundle size option. 4 | 5 | ## The Problem 6 | 7 | If you're lucky enough to use [tRPC](https://trpc.io/), [GraphQL](https://graphql.org/), or [OpenAPI](https://www.openapis.org/), you'll be able to get **type-safe access to your API** - either through a type-safe RPC or codegen. 8 | 9 | But **what about the rest of us**? 10 | 11 | What do you do if **your API has no types**? 12 | 13 | ## Solution 14 | 15 | Enter `untypeable` - a first-class library for typing API's you don't control. 16 | 17 | - 🚀 Get **autocomplete on your entire API**, without needing to set up a single generic function. 18 | - 💪 **Simple to configure**, and extremely **flexible**. 19 | - 🤯 Choose between two modes: 20 | - **Zero bundle-size**: use `import type` to ensure `untypeable` adds nothing to your bundle. 21 | - **Strong types**: integrates with libraries like [Zod](https://zod.dev/) to add runtime safety to the types. 22 | - ✨ **Keep things organized** with helpers for merging and combining your config. 23 | - ❤️ You bring the fetcher, we bring the types. There's **no hidden magic**. 24 | 25 | ## Quickstart 26 | 27 | `npm i untypeable` 28 | 29 | ```ts 30 | import { initUntypeable, createTypeLevelClient } from "untypeable"; 31 | 32 | // Initialize untypeable 33 | const u = initUntypeable(); 34 | 35 | type User = { 36 | id: string; 37 | name: string; 38 | }; 39 | 40 | // Create a router 41 | // - Add typed inputs and outputs 42 | const router = u.router({ 43 | "/user": u.input<{ id: string }>().output(), 44 | }); 45 | 46 | const BASE_PATH = "http://localhost:3000"; 47 | 48 | // Create your client 49 | // - Pass any fetch implementation here 50 | const client = createTypeLevelClient((path, input) => { 51 | return fetch(BASE_PATH + path + `?${new URLSearchParams(input)}`).then( 52 | (res) => res.json(), 53 | ); 54 | }); 55 | 56 | // Type-safe data access! 57 | // - user is typed as User 58 | // - { id: string } must be passed as the input 59 | const user = await client("/user", { 60 | id: "1", 61 | }); 62 | ``` 63 | 64 | ## SWAPI Example 65 | 66 | We've added a [full example](./docs/swapi-example/swapi-example.ts) of typing `swapi.dev`. 67 | 68 | ## Zero-bundle mode 69 | 70 | You can set up `untypeable` to run in zero-bundle mode. This is great for situations where you trust the API you're calling, but it just doesn't have types. 71 | 72 | To set up zero-bundle mode, you'll need to: 73 | 74 | 1. Define your router in a file called `router.ts`. 75 | 2. Export the type of your router: `export type MyRouter = typeof router;` 76 | 77 | ```ts 78 | // router.ts 79 | 80 | import { initUntypeable } from "untypeable"; 81 | 82 | const u = initUntypeable(); 83 | 84 | type User = { 85 | id: string; 86 | name: string; 87 | }; 88 | 89 | const router = u.router({ 90 | "/user": u.input<{ id: string }>().output(), 91 | }); 92 | 93 | export type MyRouter = typeof router; 94 | ``` 95 | 96 | 3. In a file called `client.ts`, import `createTypeLevelClient` from `untypeable/type-level-client`. 97 | 98 | ```ts 99 | // client.ts 100 | 101 | import { createTypeLevelClient } from "untypeable/client"; 102 | import type { MyRouter } from "./router"; 103 | 104 | export const client = createTypeLevelClient(() => { 105 | // your implementation... 106 | }); 107 | ``` 108 | 109 | ### How does this work? 110 | 111 | This works because `createTypeLevelClient` is just an identity function, which directly returns the function you pass it. Most modern bundlers are smart enough to [collapse identity functions](https://github.com/evanw/esbuild/pull/1898) and erase type imports, so you end up with: 112 | 113 | ```ts 114 | // client.ts 115 | 116 | export const client = () => { 117 | // your implementation... 118 | }; 119 | ``` 120 | 121 | ## Runtime-safe mode 122 | 123 | Sometimes, you just don't trust the API you're calling. In those situations, you'll often like to _validate_ the data you get back. 124 | 125 | `untypeable` offers first-class integration with [Zod](https://zod.dev). You can pass a Zod schema to `u.input` and `u.output` to ensure that these values are validated with Zod. 126 | 127 | ```ts 128 | import { initUntypeable, createSafeClient } from "untypeable"; 129 | import { z } from "zod"; 130 | 131 | const u = initUntypeable(); 132 | 133 | const router = u.router({ 134 | "/user": u 135 | .input( 136 | z.object({ 137 | id: z.string(), 138 | }), 139 | ) 140 | .output( 141 | z.object({ 142 | id: z.string(), 143 | name: z.string(), 144 | }), 145 | ), 146 | }); 147 | 148 | export const client = createSafeClient(router, () => { 149 | // Implementation... 150 | }); 151 | ``` 152 | 153 | Now, every call made to client will have its `input` and `output` verified by the zod schemas passed. 154 | 155 | ## Configuration & Arguments 156 | 157 | `untypeable` lets you be extremely flexible with the shape of your router. 158 | 159 | Each level of the router corresponds to an argument that'll be passed to your client. 160 | 161 | ```ts 162 | // A router that looks like this: 163 | const router = u.router({ 164 | github: { 165 | "/repos": { 166 | GET: u.output(), 167 | POST: u.output(), 168 | }, 169 | }, 170 | }); 171 | 172 | const client = createTypeLevelClient(() => {}); 173 | 174 | // Will need to be called like this: 175 | client("github", "/repos", "POST"); 176 | ``` 177 | 178 | You can set up this argument structure using the methods below: 179 | 180 | ### `.pushArg` 181 | 182 | Using the `.pushArg` method when we `initUntypeable` lets us add new arguments that must be passed to our client. 183 | 184 | ```ts 185 | import { initUntypeable, createTypeLevelClient } from "untypeable"; 186 | 187 | // use .pushArg to add a new argument to 188 | // the router definition 189 | const u = initUntypeable().pushArg<"GET" | "POST" | "PUT" | "DELETE">(); 190 | 191 | type User = { 192 | id: string; 193 | name: string; 194 | }; 195 | 196 | // You can now optionally specify the 197 | // method on each route's definition 198 | const router = u.router({ 199 | "/user": { 200 | GET: u.input<{ id: string }>().output(), 201 | POST: u.input<{ name: string }>().output(), 202 | DELETE: u.input<{ id: string }>().output(), 203 | }, 204 | }); 205 | 206 | // The client now takes a new argument - method, which 207 | // is typed as 'GET' | 'POST' | 'PUT' | 'DELETE' 208 | const client = createTypeLevelClient((path, method, input) => { 209 | let resolvedPath = path; 210 | let resolvedInit: RequestInit = {}; 211 | 212 | switch (method) { 213 | case "GET": 214 | resolvedPath += `?${new URLSearchParams(input as any)}`; 215 | break; 216 | case "DELETE": 217 | case "POST": 218 | case "PUT": 219 | resolvedInit = { 220 | method, 221 | body: JSON.stringify(input), 222 | }; 223 | } 224 | 225 | return fetch(resolvedPath, resolvedInit).then((res) => res.json()); 226 | }); 227 | 228 | // This now needs to be passed to client, and 229 | // is still beautifully type-safe! 230 | const result = await client("/user", "POST", { 231 | name: "Matt", 232 | }); 233 | ``` 234 | 235 | You can call this as many times as you want! 236 | 237 | ```ts 238 | const u = initUntypeable() 239 | .pushArg<"GET" | "POST" | "PUT" | "DELETE">() 240 | .pushArg<"foo" | "bar">(); 241 | 242 | const router = u.router({ 243 | "/": { 244 | GET: { 245 | foo: u.output, 246 | }, 247 | }, 248 | }); 249 | ``` 250 | 251 | ### `.unshiftArg` 252 | 253 | You can also add an argument at the _start_ using `.unshiftArg`. This is useful for when you want to add different base endpoints: 254 | 255 | ```ts 256 | const u = initUntypeable().unshiftArg<"github", "youtube">(); 257 | 258 | const router = u.router({ 259 | github: { 260 | "/repos": u.output<{ repos: { id: string }[] }>(), 261 | }, 262 | }); 263 | ``` 264 | 265 | ### `.args` 266 | 267 | Useful for when you want to set the args up manually: 268 | 269 | ```ts 270 | const u = initUntypeable().args(); 271 | 272 | const router = u.router({ 273 | "any-string": { 274 | "any-other-string": { 275 | "yet-another-string": u.output(), 276 | }, 277 | }, 278 | }); 279 | ``` 280 | 281 | ## Organizing your routers 282 | 283 | ### `.add` 284 | 285 | You can add more detail to a router, or split it over multiple calls, by using `router.add`. 286 | 287 | ```ts 288 | const router = u 289 | .router({ 290 | "/": u.output(), 291 | }) 292 | .add({ 293 | "/user": u.output(), 294 | }); 295 | ``` 296 | 297 | ### `.merge` 298 | 299 | You can merge two routers together using `router.merge`. This is useful for when you want to combine multiple routers (perhaps in different modules) together. 300 | 301 | ```ts 302 | import { userRouter } from "./userRouter"; 303 | import { postRouter } from "./postRouter"; 304 | 305 | export const baseRouter = userRouter.merge(postRouter); 306 | ``` 307 | -------------------------------------------------------------------------------- /src/client.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ArgsFromRouter, 3 | LooseUntypeableHandler, 4 | RoutesFromRouter, 5 | UntypeableHandler, 6 | UntypeableRouter, 7 | } from "./types"; 8 | 9 | /** 10 | * Creates an API client that does not check the input or output 11 | * at runtime. For runtime checking, use createSafeClient. 12 | * 13 | * If you're using createTypeLevelClient, we recommend importing 14 | * it from 'untypeable/client' to minimize bundle size. 15 | * 16 | * @example 17 | * 18 | * const client = createTypeLevelClient((path) => { 19 | * return fetch(path).then(res => res.json()); 20 | * }); 21 | */ 22 | export const createTypeLevelClient = < 23 | TRouter extends UntypeableRouter, 24 | TArgs extends readonly string[] = ArgsFromRouter, 25 | TRoutes extends Record = RoutesFromRouter, 26 | >( 27 | handler: LooseUntypeableHandler, 28 | ): UntypeableHandler => { 29 | return handler as any; 30 | }; 31 | -------------------------------------------------------------------------------- /src/constants.ts: -------------------------------------------------------------------------------- 1 | export const SEPARATOR = "__"; 2 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./client"; 2 | export * from "./types"; 3 | export * from "./untypeable"; 4 | export * from "./safe-client"; 5 | -------------------------------------------------------------------------------- /src/playground.ts: -------------------------------------------------------------------------------- 1 | import { initUntypeable, createTypeLevelClient } from "untypeable"; 2 | 3 | // Initialize untypeable 4 | const u = initUntypeable(); 5 | 6 | type User = { 7 | id: string; 8 | name: string; 9 | }; 10 | 11 | // Create a router 12 | // - Add typed inputs and outputs 13 | const router = u.router({ 14 | "/user": u.input<{ id: string }>().output(), 15 | }); 16 | 17 | // Create your client 18 | // - Pass any fetch implementation here 19 | const client = createTypeLevelClient((path, input) => { 20 | return fetch(path + `?${new URLSearchParams(input)}`).then((res) => 21 | res.json(), 22 | ); 23 | }); 24 | 25 | // Type-safe data access! 26 | // - user is typed as User 27 | // - { id: string } must be passed as the input 28 | const user = client("/user", { 29 | id: "1", 30 | }); 31 | -------------------------------------------------------------------------------- /src/safe-client.ts: -------------------------------------------------------------------------------- 1 | import { SEPARATOR } from "./constants"; 2 | import { 3 | AcceptedParser, 4 | ArgsFromRouter, 5 | LooseUntypeableHandler, 6 | RoutesFromRouter, 7 | Schemas, 8 | UntypeableHandler, 9 | UntypeableRouter, 10 | } from "./types"; 11 | 12 | export const createSafeClient = < 13 | TRouter extends UntypeableRouter, 14 | TArgs extends ArgsFromRouter, 15 | TRoutes extends RoutesFromRouter, 16 | >( 17 | router: TRouter, 18 | handler: LooseUntypeableHandler, 19 | ): UntypeableHandler => { 20 | return (async (...args: any[]) => { 21 | let schemas: Schemas; 22 | 23 | const argsExceptLast = args.slice(0, -1); 24 | 25 | const matchingSchemas = router._schemaMap.get( 26 | argsExceptLast.join(SEPARATOR), 27 | ); 28 | 29 | const secondSchemaMatchAttempt = router._schemaMap.get( 30 | args.join(SEPARATOR), 31 | ); 32 | let shouldCheckInput: boolean; 33 | 34 | if (matchingSchemas) { 35 | schemas = matchingSchemas; 36 | shouldCheckInput = true; 37 | } else if (secondSchemaMatchAttempt) { 38 | schemas = secondSchemaMatchAttempt; 39 | shouldCheckInput = false; 40 | } else { 41 | throw new Error( 42 | `No matching schema found for args: ${argsExceptLast.join(", ")}`, 43 | ); 44 | } 45 | 46 | const inputSchema = resolveParser(schemas.input); 47 | const outputSchema = resolveParser(schemas.output); 48 | 49 | let output; 50 | 51 | if (shouldCheckInput) { 52 | const input = args[args.length - 1]; 53 | const parsedInput = inputSchema(input); 54 | 55 | output = await (handler as any)(...argsExceptLast, parsedInput); 56 | } else { 57 | output = await (handler as any)(...args); 58 | } 59 | 60 | return outputSchema(output); 61 | }) as any; 62 | }; 63 | 64 | const resolveParser = (parser: AcceptedParser | undefined) => { 65 | if (typeof parser === "function") { 66 | return parser; 67 | } else if (typeof parser === "undefined") { 68 | return (x: any) => x; 69 | } else { 70 | return parser.parse; 71 | } 72 | }; 73 | -------------------------------------------------------------------------------- /src/tests/add.test.ts: -------------------------------------------------------------------------------- 1 | import { expect, it, vitest } from "vitest"; 2 | import { z } from "zod"; 3 | import { createSafeClient } from "../safe-client"; 4 | import { initUntypeable } from "../untypeable"; 5 | 6 | const u = initUntypeable(); 7 | 8 | const router = u 9 | .router({ 10 | inputNeeded: u.input(z.string()).output(z.object({ hello: z.string() })), 11 | }) 12 | .add({ 13 | inputNotNeeded: u.output(z.object({ hello: z.string() })), 14 | }); 15 | 16 | it('Should pick up schemas added by the "add" method', async () => { 17 | const fn = vitest.fn(); 18 | const client = createSafeClient(router, fn); 19 | 20 | fn.mockResolvedValueOnce({ hello: "world" }); 21 | 22 | await client("inputNeeded", "hello"); 23 | 24 | expect(fn).toHaveBeenLastCalledWith("inputNeeded", "hello"); 25 | 26 | fn.mockResolvedValueOnce({ hello: "world" }); 27 | 28 | await client("inputNotNeeded"); 29 | }); 30 | -------------------------------------------------------------------------------- /src/tests/dynamic-args.test.ts: -------------------------------------------------------------------------------- 1 | import { it, vitest } from "vitest"; 2 | import { createTypeLevelClient } from "../client"; 3 | import { initUntypeable } from "../untypeable"; 4 | 5 | it("Should let you specify 2 args", async () => { 6 | const u = initUntypeable().args<"GET" | "POST", "SOMETHING" | "ELSE">(); 7 | 8 | const router = u.router({ 9 | GET: { 10 | ELSE: u.output(), 11 | }, 12 | }); 13 | 14 | const client = createTypeLevelClient(vitest.fn()); 15 | 16 | await client("GET", "ELSE"); 17 | 18 | // @ts-expect-error 19 | await client("GET", "SOMETHING"); 20 | 21 | // @ts-expect-error 22 | await client("POST", "ELSE"); 23 | }); 24 | 25 | it("Should default to only requiring one arg", async () => { 26 | const u = initUntypeable(); 27 | 28 | const router = u.router({ 29 | GET: u.output(), 30 | }); 31 | 32 | const client = createTypeLevelClient(vitest.fn()); 33 | 34 | await client("GET"); 35 | 36 | // @ts-expect-error 37 | await client("POST"); 38 | }); 39 | -------------------------------------------------------------------------------- /src/tests/merge.test.ts: -------------------------------------------------------------------------------- 1 | import { expect, it, vitest } from "vitest"; 2 | import { z } from "zod"; 3 | import { createSafeClient } from "../safe-client"; 4 | import { initUntypeable } from "../untypeable"; 5 | 6 | const u = initUntypeable(); 7 | 8 | const router1 = u.router({ 9 | inputNeeded: u.input(z.string()).output(z.object({ hello: z.string() })), 10 | }); 11 | 12 | const router2 = u.router({ 13 | inputNotNeeded: u.output(z.object({ hello: z.string() })), 14 | }); 15 | 16 | const router = router2.merge(router1); 17 | 18 | it('Should pick up schemas added by the "merge" method', async () => { 19 | const fn = vitest.fn(); 20 | const client = createSafeClient(router, fn); 21 | 22 | fn.mockResolvedValueOnce({ hello: "world" }); 23 | 24 | await client("inputNeeded", "hello"); 25 | 26 | expect(fn).toHaveBeenLastCalledWith("inputNeeded", "hello"); 27 | 28 | fn.mockResolvedValueOnce({ hello: "world" }); 29 | 30 | await client("inputNotNeeded"); 31 | }); 32 | -------------------------------------------------------------------------------- /src/tests/repl.test.ts: -------------------------------------------------------------------------------- 1 | import { it } from "vitest"; 2 | import { initUntypeable } from "../untypeable"; 3 | 4 | it("REPL", () => { 5 | const u = initUntypeable().pushArg<"GET" | "POST">(); 6 | 7 | const router = u.router({ 8 | something: { 9 | GET: u.output(), 10 | POST: u.input().output(), 11 | }, 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /src/tests/router-definition.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from "vitest"; 2 | import { initUntypeable } from "../untypeable"; 3 | 4 | it("Should not let you pass an input directly to a route", () => { 5 | const u = initUntypeable(); 6 | 7 | expect(() => 8 | u.router({ 9 | // @ts-expect-error 10 | inputNeeded: u.input(), 11 | }), 12 | ).toThrowError(); 13 | }); 14 | 15 | it("Should let you pass an output without an input", () => { 16 | const u = initUntypeable(); 17 | 18 | u.router({ 19 | noInputNeeded: u.output(), 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /src/tests/type-only.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it, vitest } from "vitest"; 2 | import { createTypeLevelClient } from "../client"; 3 | import { initUntypeable } from "../untypeable"; 4 | import { Equal, Expect } from "./utils"; 5 | 6 | const u = initUntypeable(); 7 | 8 | const router = u.router({ 9 | inputNeeded: u.input().output(), 10 | noInputNeeded: u.output(), 11 | partialInputOnly: u.input<{ a?: string }>().output<{ a: string }>(), 12 | }); 13 | 14 | describe("input types", () => { 15 | it("Should require an input of the correct type if one has been specified", async () => { 16 | const fn = vitest.fn(); 17 | 18 | const client = createTypeLevelClient(fn); 19 | 20 | // @ts-expect-error 21 | await client("inputNeeded"); 22 | expect(fn).toHaveBeenLastCalledWith("inputNeeded"); 23 | 24 | await client("inputNeeded", "hello"); 25 | expect(fn).toHaveBeenLastCalledWith("inputNeeded", "hello"); 26 | 27 | // @ts-expect-error 28 | await client("inputNeeded", 0); 29 | expect(fn).toHaveBeenLastCalledWith("inputNeeded", 0); 30 | }); 31 | 32 | it("Should not require an input if one has not been specified", async () => { 33 | const fn = vitest.fn(); 34 | 35 | const client = createTypeLevelClient(fn); 36 | 37 | await client("noInputNeeded"); 38 | expect(fn).toHaveBeenLastCalledWith("noInputNeeded"); 39 | 40 | // @ts-expect-error 41 | await client("noInputNeeded", "hello"); 42 | 43 | expect(fn).toHaveBeenLastCalledWith("noInputNeeded", "hello"); 44 | }); 45 | 46 | it("Should not require an input if all properties of the input are optional", async () => { 47 | const fn = vitest.fn(); 48 | 49 | const client = createTypeLevelClient(fn); 50 | 51 | await client("partialInputOnly"); 52 | expect(fn).toHaveBeenLastCalledWith("partialInputOnly"); 53 | 54 | await client("partialInputOnly", {}); 55 | expect(fn).toHaveBeenLastCalledWith("partialInputOnly", {}); 56 | }); 57 | }); 58 | 59 | describe("Output types", () => { 60 | it("Should return an output of the correct type", async () => { 61 | const fn = vitest.fn(); 62 | 63 | const client = createTypeLevelClient(fn); 64 | 65 | const numResult = await client("inputNeeded", "adwawd"); 66 | const boolResult = await client("noInputNeeded"); 67 | 68 | type tests = [ 69 | Expect>, 70 | Expect>, 71 | ]; 72 | }); 73 | }); 74 | -------------------------------------------------------------------------------- /src/tests/utils.ts: -------------------------------------------------------------------------------- 1 | export type Expect = T; 2 | export type ExpectTrue = T; 3 | export type ExpectFalse = T; 4 | export type IsTrue = T; 5 | export type IsFalse = T; 6 | 7 | export type Equal = (() => T extends X ? 1 : 2) extends < 8 | T, 9 | >() => T extends Y ? 1 : 2 10 | ? true 11 | : false; 12 | export type NotEqual = true extends Equal ? false : true; 13 | 14 | // https://stackoverflow.com/questions/49927523/disallow-call-with-any/49928360#49928360 15 | export type IsAny = 0 extends 1 & T ? true : false; 16 | export type NotAny = true extends IsAny ? false : true; 17 | 18 | export type Debug = { [K in keyof T]: T[K] }; 19 | export type MergeInsertions = T extends object 20 | ? { [K in keyof T]: MergeInsertions } 21 | : T; 22 | 23 | export type Alike = Equal, MergeInsertions>; 24 | 25 | export type ExpectExtends = EXPECTED extends VALUE 26 | ? true 27 | : false; 28 | export type ExpectValidArgs< 29 | FUNC extends (...args: any[]) => any, 30 | ARGS extends any[], 31 | > = ARGS extends Parameters ? true : false; 32 | 33 | export type UnionToIntersection = ( 34 | U extends any ? (k: U) => void : never 35 | ) extends (k: infer I) => void 36 | ? I 37 | : never; 38 | 39 | export const doNotExecute = (func: () => any) => {}; 40 | -------------------------------------------------------------------------------- /src/tests/with-schemas.test.ts: -------------------------------------------------------------------------------- 1 | import { expect, it, vitest } from "vitest"; 2 | import { z } from "zod"; 3 | import { createSafeClient } from "../safe-client"; 4 | import { initUntypeable } from "../untypeable"; 5 | 6 | it("Should let you define inputs and outputs as schemas", async () => { 7 | const u = initUntypeable(); 8 | const router = u.router({ 9 | inputNeeded: u.input(z.string()).output(z.object({ hello: z.string() })), 10 | }); 11 | 12 | const fn = vitest.fn(); 13 | 14 | const client = createSafeClient(router, fn); 15 | 16 | fn.mockResolvedValueOnce({ hello: "world" }); 17 | 18 | await client("inputNeeded", "hello"); 19 | }); 20 | 21 | it("Should error if you do not provide the correct input", async () => { 22 | const u = initUntypeable(); 23 | const router = u.router({ 24 | inputNeeded: u.input(z.string()).output(z.object({ hello: z.string() })), 25 | }); 26 | 27 | const fn = vitest.fn(); 28 | 29 | const client = createSafeClient(router, fn); 30 | 31 | fn.mockResolvedValueOnce({ hello: "world" }); 32 | 33 | await client("inputNeeded", "hello"); 34 | }); 35 | 36 | it("Should error if the fetcher does not provide the correct output WITHOUT an input", async () => { 37 | const u = initUntypeable(); 38 | const router = u.router({ 39 | inputNotNeeded: u.output(z.object({ hello: z.string() })), 40 | }); 41 | 42 | const fn = vitest.fn(); 43 | 44 | const client = createSafeClient(router, fn); 45 | 46 | fn.mockResolvedValueOnce({ hello: 124 }); 47 | 48 | await expect(() => client("inputNotNeeded")).rejects.toThrowError(); 49 | }); 50 | 51 | it("Should error if the fetcher does not provide the correct output WITH an input", async () => { 52 | const u = initUntypeable(); 53 | const router = u.router({ 54 | inputNeeded: u.input(z.string()).output(z.object({ hello: z.string() })), 55 | }); 56 | 57 | const fn = vitest.fn(); 58 | 59 | const client = createSafeClient(router, fn); 60 | 61 | fn.mockResolvedValueOnce({ hello: 124 }); 62 | 63 | await expect(() => client("inputNeeded", "124123123")).rejects.toThrowError(); 64 | }); 65 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | type DefaultArgs = [string]; 2 | 3 | export type AcceptedParser = 4 | | ((input: unknown) => T) 5 | | { 6 | parse: (input: unknown) => T; 7 | }; 8 | 9 | export type SchemaMap = Map; 10 | 11 | export type Schemas = { 12 | input: AcceptedParser | undefined; 13 | output: AcceptedParser | undefined; 14 | }; 15 | 16 | export interface UntypeableBase { 17 | pushArg: () => UntypeableBase<[...TArgs, TArg]>; 18 | unshiftArg: () => UntypeableBase<[TArg, ...TArgs]>; 19 | args(): UntypeableBase<[TArg1]>; 20 | args(): UntypeableBase< 21 | [TArg1, TArg2] 22 | >; 23 | args< 24 | TArg1 extends string, 25 | TArg2 extends string, 26 | TArg3 extends string, 27 | >(): UntypeableBase<[TArg1, TArg2, TArg3]>; 28 | args< 29 | TArg1 extends string, 30 | TArg2 extends string, 31 | TArg3 extends string, 32 | TArg4 extends string, 33 | >(): UntypeableBase<[TArg1, TArg2, TArg3, TArg4]>; 34 | args(): UntypeableBase; 35 | router: < 36 | TNewRoutes extends StringArrayToObject>, 37 | >( 38 | routes: TNewRoutes, 39 | ) => UntypeableRouter>; 40 | input: (parser?: AcceptedParser) => UntypeableInput; 41 | output: ( 42 | parser?: AcceptedParser, 43 | ) => UntypeableOutput<{}, TOutput>; 44 | } 45 | 46 | export type Prettify = { 47 | [K in keyof T]: T[K]; 48 | } & {}; 49 | 50 | export interface UntypeableInput { 51 | __type: "input"; 52 | output: ( 53 | schema?: AcceptedParser, 54 | ) => UntypeableOutput; 55 | inputSchema: AcceptedParser | undefined; 56 | } 57 | 58 | export interface UntypeableOutput { 59 | __type: "output"; 60 | outputSchema: AcceptedParser | undefined; 61 | inputSchema: AcceptedParser | undefined; 62 | } 63 | 64 | export interface UntypeableRouter< 65 | TArgs extends readonly string[] = DefaultArgs, 66 | TRoutes extends Record = {}, 67 | > { 68 | _schemaMap: SchemaMap; 69 | add: < 70 | TNewRoutes extends StringArrayToObject>, 71 | >( 72 | routes: TNewRoutes, 73 | ) => UntypeableRouter>; 74 | 75 | merge: >( 76 | router: UntypeableRouter, 77 | ) => UntypeableRouter>; 78 | } 79 | 80 | export type LooseUntypeableHandler = ( 81 | ...args: [...args: TArgs, input: any] 82 | ) => Promise; 83 | 84 | export type UntypeableHandler< 85 | TArgs extends readonly string[] = DefaultArgs, 86 | TRoutes extends Record = {}, 87 | > = TArgs["length"] extends 1 88 | ? ( 89 | firstArg: T1, 90 | ...args: ArgsFromRoutes 91 | ) => TRoutes[T1] extends UntypeableOutput 92 | ? Promise 93 | : never 94 | : TArgs["length"] extends 2 95 | ? ( 96 | firstArg: T1, 97 | secondArg: T2, 98 | ...args: ArgsFromRoutes 99 | ) => TRoutes[T1][T2] extends UntypeableOutput 100 | ? Promise 101 | : never 102 | : TArgs["length"] extends 3 103 | ? < 104 | T1 extends keyof TRoutes, 105 | T2 extends keyof TRoutes[T1], 106 | T3 extends keyof TRoutes[T1][T2], 107 | >( 108 | firstArg: T1, 109 | secondArg: T2, 110 | thirdArg: T3, 111 | ...args: ArgsFromRoutes 112 | ) => TRoutes[T1][T2][T3] extends UntypeableOutput 113 | ? Promise 114 | : never 115 | : TArgs["length"] extends 4 116 | ? < 117 | T1 extends keyof TRoutes, 118 | T2 extends keyof TRoutes[T1], 119 | T3 extends keyof TRoutes[T1][T2], 120 | T4 extends keyof TRoutes[T1][T2][T3], 121 | >( 122 | firstArg: T1, 123 | secondArg: T2, 124 | thirdArg: T3, 125 | fourthArg: T4, 126 | ...args: ArgsFromRoutes 127 | ) => TRoutes[T1][T2][T3][T4] extends UntypeableOutput 128 | ? Promise 129 | : never 130 | : never; 131 | 132 | export type ArgsFromRoutes = TRoutes extends UntypeableOutput< 133 | infer TInput, 134 | any 135 | > 136 | ? TInput extends Record 137 | ? [] 138 | : Record extends TInput 139 | ? [input?: TInput] 140 | : [input: Prettify] 141 | : never; 142 | 143 | export type StringArrayToObject< 144 | T extends readonly string[], 145 | TValue, 146 | > = T extends [ 147 | infer THead extends string, 148 | ...infer TTail extends readonly string[], 149 | ] 150 | ? { [K in THead]?: StringArrayToObject } 151 | : TValue; 152 | 153 | export type ArgsFromRouter> = 154 | TRouter extends UntypeableRouter ? TArgs : never; 155 | 156 | export type RoutesFromRouter> = 157 | TRouter extends UntypeableRouter ? TRoutes : never; 158 | -------------------------------------------------------------------------------- /src/untypeable.ts: -------------------------------------------------------------------------------- 1 | import { SEPARATOR } from "./constants"; 2 | import { 3 | UntypeableBase, 4 | UntypeableInput, 5 | UntypeableOutput, 6 | UntypeableRouter, 7 | AcceptedParser, 8 | SchemaMap, 9 | } from "./types"; 10 | 11 | const isOutput = (value: { 12 | __type?: string; 13 | }): value is UntypeableOutput => { 14 | return value.__type === "output"; 15 | }; 16 | 17 | const isInput = (value: { 18 | __type?: string; 19 | }): value is UntypeableOutput => { 20 | return value.__type === "input"; 21 | }; 22 | 23 | const combineMaps = (map1: Map, map2: Map) => { 24 | const newMap = new Map(map1); 25 | 26 | for (const [key, value] of map2) { 27 | newMap.set(key, value); 28 | } 29 | 30 | return newMap; 31 | }; 32 | 33 | const initRouter = = {}>( 34 | routes: TRoutes, 35 | schemaMap: SchemaMap = new Map(), 36 | ): UntypeableRouter => { 37 | const collectRoutes = ( 38 | routes: Record | Record>, 39 | path: string[] = [], 40 | ) => { 41 | for (const [key, value] of Object.entries(routes)) { 42 | if (isOutput(value)) { 43 | schemaMap.set([...path, key].join(SEPARATOR), { 44 | input: value.inputSchema, 45 | output: value.outputSchema, 46 | }); 47 | } else if (isInput(value)) { 48 | throw new Error("An input cannot be passed directly to a router."); 49 | } else { 50 | collectRoutes(value, [...path, key]); 51 | } 52 | } 53 | }; 54 | 55 | collectRoutes(routes); 56 | 57 | return { 58 | add: (newRoutes) => initRouter(newRoutes, schemaMap), 59 | merge: (router) => 60 | initRouter({}, combineMaps(router._schemaMap, schemaMap)), 61 | _schemaMap: schemaMap, 62 | }; 63 | }; 64 | 65 | const initInput = ( 66 | inputSchema: AcceptedParser | undefined, 67 | ): UntypeableInput => { 68 | return { 69 | output: (outputSchema) => initOutput(inputSchema, outputSchema), 70 | inputSchema, 71 | __type: "input", 72 | }; 73 | }; 74 | 75 | const initOutput = ( 76 | inputSchema: AcceptedParser | undefined, 77 | outputSchema: AcceptedParser | undefined, 78 | ): UntypeableOutput => { 79 | return { 80 | __type: "output", 81 | inputSchema, 82 | outputSchema, 83 | }; 84 | }; 85 | 86 | export const initUntypeable = (): UntypeableBase => { 87 | return { 88 | pushArg: () => initUntypeable() as any, 89 | unshiftArg: () => initUntypeable() as any, 90 | args: () => initUntypeable() as any, 91 | input: initInput, 92 | output: (outputSchema) => initOutput(undefined, outputSchema), 93 | router: (routes) => initRouter(routes), 94 | }; 95 | }; 96 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig to read more about this file */ 4 | /* Projects */ 5 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 6 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 7 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 8 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 9 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 10 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 11 | /* Language and Environment */ 12 | "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 13 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 14 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 15 | // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ 16 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 17 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 18 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 19 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 20 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 21 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 22 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 23 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 24 | /* Modules */ 25 | "module": "NodeNext", /* Specify what module code is generated. */ 26 | // "rootDir": "./", /* Specify the root folder within your source files. */ 27 | // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ 28 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 29 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 30 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 31 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ 32 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 33 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 34 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 35 | // "resolveJsonModule": true, /* Enable importing .json files. */ 36 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ 37 | /* JavaScript Support */ 38 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 39 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 40 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 41 | /* Emit */ 42 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 43 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 44 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 45 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 46 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ 47 | // "outDir": "./", /* Specify an output folder for all emitted files. */ 48 | // "removeComments": true, /* Disable emitting comments. */ 49 | "noEmit": true, /* Disable emitting files from a compilation. */ 50 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 51 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ 52 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 53 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 54 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 55 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 56 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 57 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 58 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 59 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ 60 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ 61 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 62 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ 63 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 64 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 65 | /* Interop Constraints */ 66 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 67 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 68 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ 69 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 70 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 71 | /* Type Checking */ 72 | "strict": true, /* Enable all strict type-checking options. */ 73 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 74 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 75 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 76 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 77 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 78 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 79 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 80 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 81 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 82 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 83 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 84 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 85 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 86 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 87 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 88 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 89 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 90 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 91 | /* Completeness */ 92 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 93 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 94 | }, 95 | "exclude": [ 96 | "dist" 97 | ] 98 | } -------------------------------------------------------------------------------- /tsup.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "tsup"; 2 | 3 | const config = defineConfig({ 4 | format: ["cjs", "esm"], 5 | dts: true, 6 | entry: { 7 | index: "src/index.ts", 8 | client: "src/client.ts", 9 | }, 10 | }); 11 | 12 | export default config; 13 | --------------------------------------------------------------------------------