├── .gitignore ├── README.md ├── example └── 1.ts ├── hammer.mjs ├── license ├── package-lock.json ├── package.json ├── screenshots └── 1.png ├── src ├── index.ts └── tsconfig.json └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 |

Fetch TypeBox

4 |

Type and Validate fetch responses using TypeBox

5 |
6 | 7 |
8 | 9 | `@erfanium/fetch-typebox` is a drop-in replacement for fetch that brings easy integration with [TypeBox](https://github.com/sinclairzx81/typebox) 10 | 11 | 12 | 13 | 14 | 15 | ## Install 16 | 17 | You only need an environment with fetch support (natively or via polyfill) 18 | 19 | ``` 20 | npm install @sinclair/typebox @erfanium/fetch-typebox 21 | ``` -------------------------------------------------------------------------------- /example/1.ts: -------------------------------------------------------------------------------- 1 | import { Type } from "@sinclair/typebox"; 2 | import { TypeCompiler } from "@sinclair/typebox/compiler"; 3 | import { fetch } from "../src"; 4 | 5 | const ResponseType = TypeCompiler.Compile( 6 | Type.Object({ 7 | id: Type.Number(), 8 | userId: Type.Number(), 9 | title: Type.String(), 10 | }) 11 | ); 12 | 13 | async function main() { 14 | const response = await fetch("https://jsonplaceholder.typicode.com/todos/1"); 15 | const body = await response.json(ResponseType); 16 | 17 | console.log(body); 18 | } 19 | 20 | main(); 21 | -------------------------------------------------------------------------------- /hammer.mjs: -------------------------------------------------------------------------------- 1 | import { readFileSync } from "fs"; 2 | 3 | // ------------------------------------------------------------------------------- 4 | // Build 5 | // ------------------------------------------------------------------------------- 6 | export async function build(target = "dist") { 7 | await folder(target).delete(); 8 | await shell(`tsc -p ./src/tsconfig.json --outDir ${target}`); 9 | await folder(target).add("package.json"); 10 | await folder(target).add("README.md"); 11 | await folder(target).add("license"); 12 | await shell(`cd ${target} && npm pack`); 13 | } 14 | // ------------------------------------------------------------- 15 | // Publish 16 | // ------------------------------------------------------------- 17 | export async function publish(target = "dist") { 18 | const { version } = JSON.parse(readFileSync("package.json", "utf8")); 19 | await shell( 20 | `cd ${target} && npm publish erfanium-fetch-typebox-${version}.tgz --access=public` 21 | ); 22 | } 23 | -------------------------------------------------------------------------------- /license: -------------------------------------------------------------------------------- 1 | TypeBox: drop-in replacement for fetch that brings easy integration with TypeBox 2 | 3 | The MIT License (MIT) 4 | 5 | Copyright (c) 2017-2023 Erfan Safari (erfanium) 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in 15 | all copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 | THE SOFTWARE. -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@erfanium/fetch-typebox", 3 | "version": "0.1.2", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "@erfanium/fetch-typebox", 9 | "version": "0.1.2", 10 | "license": "ISC", 11 | "devDependencies": { 12 | "@sinclair/hammer": "^0.17.2", 13 | "@sinclair/typebox": "^0.28.7", 14 | "ts-node": "^10.9.1", 15 | "typescript": "^5.0.4" 16 | }, 17 | "peerDependencies": { 18 | "@sinclair/typebox": ">=0.28.0" 19 | } 20 | }, 21 | "node_modules/@cspotcode/source-map-support": { 22 | "version": "0.8.1", 23 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 24 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 25 | "dev": true, 26 | "dependencies": { 27 | "@jridgewell/trace-mapping": "0.3.9" 28 | }, 29 | "engines": { 30 | "node": ">=12" 31 | } 32 | }, 33 | "node_modules/@esbuild/android-arm": { 34 | "version": "0.15.18", 35 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", 36 | "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", 37 | "cpu": [ 38 | "arm" 39 | ], 40 | "dev": true, 41 | "optional": true, 42 | "os": [ 43 | "android" 44 | ], 45 | "engines": { 46 | "node": ">=12" 47 | } 48 | }, 49 | "node_modules/@esbuild/linux-loong64": { 50 | "version": "0.15.18", 51 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", 52 | "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", 53 | "cpu": [ 54 | "loong64" 55 | ], 56 | "dev": true, 57 | "optional": true, 58 | "os": [ 59 | "linux" 60 | ], 61 | "engines": { 62 | "node": ">=12" 63 | } 64 | }, 65 | "node_modules/@jridgewell/resolve-uri": { 66 | "version": "3.1.1", 67 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", 68 | "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", 69 | "dev": true, 70 | "engines": { 71 | "node": ">=6.0.0" 72 | } 73 | }, 74 | "node_modules/@jridgewell/sourcemap-codec": { 75 | "version": "1.4.15", 76 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 77 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 78 | "dev": true 79 | }, 80 | "node_modules/@jridgewell/trace-mapping": { 81 | "version": "0.3.9", 82 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 83 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 84 | "dev": true, 85 | "dependencies": { 86 | "@jridgewell/resolve-uri": "^3.0.3", 87 | "@jridgewell/sourcemap-codec": "^1.4.10" 88 | } 89 | }, 90 | "node_modules/@sinclair/hammer": { 91 | "version": "0.17.2", 92 | "resolved": "https://registry.npmjs.org/@sinclair/hammer/-/hammer-0.17.2.tgz", 93 | "integrity": "sha512-Nnzq4JuC3VB0JNEfxU4U9W65yCe4+/ft0+FGf6/HBn7BoxW3aigusstFdrzVdhjJ6NVABCwUBMgtYbD9X7Z94g==", 94 | "dev": true, 95 | "dependencies": { 96 | "esbuild": "^0.15.7" 97 | }, 98 | "bin": { 99 | "hammer": "hammer" 100 | } 101 | }, 102 | "node_modules/@sinclair/typebox": { 103 | "version": "0.28.7", 104 | "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.28.7.tgz", 105 | "integrity": "sha512-Ubom8FLHLw0tKXpsbDrcljkGUJpD+FlcLdALsTx+cQNjv3NxW87JaAvqnmHKmLxvI7SQCmdxFcIPytW9Jal3Iw==", 106 | "dev": true 107 | }, 108 | "node_modules/@tsconfig/node10": { 109 | "version": "1.0.9", 110 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", 111 | "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", 112 | "dev": true 113 | }, 114 | "node_modules/@tsconfig/node12": { 115 | "version": "1.0.11", 116 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", 117 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", 118 | "dev": true 119 | }, 120 | "node_modules/@tsconfig/node14": { 121 | "version": "1.0.3", 122 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", 123 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", 124 | "dev": true 125 | }, 126 | "node_modules/@tsconfig/node16": { 127 | "version": "1.0.3", 128 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", 129 | "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", 130 | "dev": true 131 | }, 132 | "node_modules/@types/node": { 133 | "version": "18.16.2", 134 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.2.tgz", 135 | "integrity": "sha512-GQW/JL/5Fz/0I8RpeBG9lKp0+aNcXEaVL71c0D2Q0QHDTFvlYKT7an0onCUXj85anv7b4/WesqdfchLc0jtsCg==", 136 | "dev": true, 137 | "peer": true 138 | }, 139 | "node_modules/acorn": { 140 | "version": "8.8.2", 141 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", 142 | "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", 143 | "dev": true, 144 | "bin": { 145 | "acorn": "bin/acorn" 146 | }, 147 | "engines": { 148 | "node": ">=0.4.0" 149 | } 150 | }, 151 | "node_modules/acorn-walk": { 152 | "version": "8.2.0", 153 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", 154 | "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", 155 | "dev": true, 156 | "engines": { 157 | "node": ">=0.4.0" 158 | } 159 | }, 160 | "node_modules/arg": { 161 | "version": "4.1.3", 162 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", 163 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 164 | "dev": true 165 | }, 166 | "node_modules/create-require": { 167 | "version": "1.1.1", 168 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", 169 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 170 | "dev": true 171 | }, 172 | "node_modules/diff": { 173 | "version": "4.0.2", 174 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 175 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 176 | "dev": true, 177 | "engines": { 178 | "node": ">=0.3.1" 179 | } 180 | }, 181 | "node_modules/esbuild": { 182 | "version": "0.15.18", 183 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz", 184 | "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==", 185 | "dev": true, 186 | "hasInstallScript": true, 187 | "bin": { 188 | "esbuild": "bin/esbuild" 189 | }, 190 | "engines": { 191 | "node": ">=12" 192 | }, 193 | "optionalDependencies": { 194 | "@esbuild/android-arm": "0.15.18", 195 | "@esbuild/linux-loong64": "0.15.18", 196 | "esbuild-android-64": "0.15.18", 197 | "esbuild-android-arm64": "0.15.18", 198 | "esbuild-darwin-64": "0.15.18", 199 | "esbuild-darwin-arm64": "0.15.18", 200 | "esbuild-freebsd-64": "0.15.18", 201 | "esbuild-freebsd-arm64": "0.15.18", 202 | "esbuild-linux-32": "0.15.18", 203 | "esbuild-linux-64": "0.15.18", 204 | "esbuild-linux-arm": "0.15.18", 205 | "esbuild-linux-arm64": "0.15.18", 206 | "esbuild-linux-mips64le": "0.15.18", 207 | "esbuild-linux-ppc64le": "0.15.18", 208 | "esbuild-linux-riscv64": "0.15.18", 209 | "esbuild-linux-s390x": "0.15.18", 210 | "esbuild-netbsd-64": "0.15.18", 211 | "esbuild-openbsd-64": "0.15.18", 212 | "esbuild-sunos-64": "0.15.18", 213 | "esbuild-windows-32": "0.15.18", 214 | "esbuild-windows-64": "0.15.18", 215 | "esbuild-windows-arm64": "0.15.18" 216 | } 217 | }, 218 | "node_modules/esbuild-android-64": { 219 | "version": "0.15.18", 220 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz", 221 | "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==", 222 | "cpu": [ 223 | "x64" 224 | ], 225 | "dev": true, 226 | "optional": true, 227 | "os": [ 228 | "android" 229 | ], 230 | "engines": { 231 | "node": ">=12" 232 | } 233 | }, 234 | "node_modules/esbuild-android-arm64": { 235 | "version": "0.15.18", 236 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz", 237 | "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==", 238 | "cpu": [ 239 | "arm64" 240 | ], 241 | "dev": true, 242 | "optional": true, 243 | "os": [ 244 | "android" 245 | ], 246 | "engines": { 247 | "node": ">=12" 248 | } 249 | }, 250 | "node_modules/esbuild-darwin-64": { 251 | "version": "0.15.18", 252 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz", 253 | "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==", 254 | "cpu": [ 255 | "x64" 256 | ], 257 | "dev": true, 258 | "optional": true, 259 | "os": [ 260 | "darwin" 261 | ], 262 | "engines": { 263 | "node": ">=12" 264 | } 265 | }, 266 | "node_modules/esbuild-darwin-arm64": { 267 | "version": "0.15.18", 268 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz", 269 | "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==", 270 | "cpu": [ 271 | "arm64" 272 | ], 273 | "dev": true, 274 | "optional": true, 275 | "os": [ 276 | "darwin" 277 | ], 278 | "engines": { 279 | "node": ">=12" 280 | } 281 | }, 282 | "node_modules/esbuild-freebsd-64": { 283 | "version": "0.15.18", 284 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz", 285 | "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==", 286 | "cpu": [ 287 | "x64" 288 | ], 289 | "dev": true, 290 | "optional": true, 291 | "os": [ 292 | "freebsd" 293 | ], 294 | "engines": { 295 | "node": ">=12" 296 | } 297 | }, 298 | "node_modules/esbuild-freebsd-arm64": { 299 | "version": "0.15.18", 300 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz", 301 | "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==", 302 | "cpu": [ 303 | "arm64" 304 | ], 305 | "dev": true, 306 | "optional": true, 307 | "os": [ 308 | "freebsd" 309 | ], 310 | "engines": { 311 | "node": ">=12" 312 | } 313 | }, 314 | "node_modules/esbuild-linux-32": { 315 | "version": "0.15.18", 316 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz", 317 | "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==", 318 | "cpu": [ 319 | "ia32" 320 | ], 321 | "dev": true, 322 | "optional": true, 323 | "os": [ 324 | "linux" 325 | ], 326 | "engines": { 327 | "node": ">=12" 328 | } 329 | }, 330 | "node_modules/esbuild-linux-64": { 331 | "version": "0.15.18", 332 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz", 333 | "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==", 334 | "cpu": [ 335 | "x64" 336 | ], 337 | "dev": true, 338 | "optional": true, 339 | "os": [ 340 | "linux" 341 | ], 342 | "engines": { 343 | "node": ">=12" 344 | } 345 | }, 346 | "node_modules/esbuild-linux-arm": { 347 | "version": "0.15.18", 348 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz", 349 | "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==", 350 | "cpu": [ 351 | "arm" 352 | ], 353 | "dev": true, 354 | "optional": true, 355 | "os": [ 356 | "linux" 357 | ], 358 | "engines": { 359 | "node": ">=12" 360 | } 361 | }, 362 | "node_modules/esbuild-linux-arm64": { 363 | "version": "0.15.18", 364 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz", 365 | "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==", 366 | "cpu": [ 367 | "arm64" 368 | ], 369 | "dev": true, 370 | "optional": true, 371 | "os": [ 372 | "linux" 373 | ], 374 | "engines": { 375 | "node": ">=12" 376 | } 377 | }, 378 | "node_modules/esbuild-linux-mips64le": { 379 | "version": "0.15.18", 380 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz", 381 | "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==", 382 | "cpu": [ 383 | "mips64el" 384 | ], 385 | "dev": true, 386 | "optional": true, 387 | "os": [ 388 | "linux" 389 | ], 390 | "engines": { 391 | "node": ">=12" 392 | } 393 | }, 394 | "node_modules/esbuild-linux-ppc64le": { 395 | "version": "0.15.18", 396 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz", 397 | "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==", 398 | "cpu": [ 399 | "ppc64" 400 | ], 401 | "dev": true, 402 | "optional": true, 403 | "os": [ 404 | "linux" 405 | ], 406 | "engines": { 407 | "node": ">=12" 408 | } 409 | }, 410 | "node_modules/esbuild-linux-riscv64": { 411 | "version": "0.15.18", 412 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz", 413 | "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==", 414 | "cpu": [ 415 | "riscv64" 416 | ], 417 | "dev": true, 418 | "optional": true, 419 | "os": [ 420 | "linux" 421 | ], 422 | "engines": { 423 | "node": ">=12" 424 | } 425 | }, 426 | "node_modules/esbuild-linux-s390x": { 427 | "version": "0.15.18", 428 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz", 429 | "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==", 430 | "cpu": [ 431 | "s390x" 432 | ], 433 | "dev": true, 434 | "optional": true, 435 | "os": [ 436 | "linux" 437 | ], 438 | "engines": { 439 | "node": ">=12" 440 | } 441 | }, 442 | "node_modules/esbuild-netbsd-64": { 443 | "version": "0.15.18", 444 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz", 445 | "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==", 446 | "cpu": [ 447 | "x64" 448 | ], 449 | "dev": true, 450 | "optional": true, 451 | "os": [ 452 | "netbsd" 453 | ], 454 | "engines": { 455 | "node": ">=12" 456 | } 457 | }, 458 | "node_modules/esbuild-openbsd-64": { 459 | "version": "0.15.18", 460 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz", 461 | "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==", 462 | "cpu": [ 463 | "x64" 464 | ], 465 | "dev": true, 466 | "optional": true, 467 | "os": [ 468 | "openbsd" 469 | ], 470 | "engines": { 471 | "node": ">=12" 472 | } 473 | }, 474 | "node_modules/esbuild-sunos-64": { 475 | "version": "0.15.18", 476 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz", 477 | "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==", 478 | "cpu": [ 479 | "x64" 480 | ], 481 | "dev": true, 482 | "optional": true, 483 | "os": [ 484 | "sunos" 485 | ], 486 | "engines": { 487 | "node": ">=12" 488 | } 489 | }, 490 | "node_modules/esbuild-windows-32": { 491 | "version": "0.15.18", 492 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz", 493 | "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==", 494 | "cpu": [ 495 | "ia32" 496 | ], 497 | "dev": true, 498 | "optional": true, 499 | "os": [ 500 | "win32" 501 | ], 502 | "engines": { 503 | "node": ">=12" 504 | } 505 | }, 506 | "node_modules/esbuild-windows-64": { 507 | "version": "0.15.18", 508 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz", 509 | "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==", 510 | "cpu": [ 511 | "x64" 512 | ], 513 | "dev": true, 514 | "optional": true, 515 | "os": [ 516 | "win32" 517 | ], 518 | "engines": { 519 | "node": ">=12" 520 | } 521 | }, 522 | "node_modules/esbuild-windows-arm64": { 523 | "version": "0.15.18", 524 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz", 525 | "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==", 526 | "cpu": [ 527 | "arm64" 528 | ], 529 | "dev": true, 530 | "optional": true, 531 | "os": [ 532 | "win32" 533 | ], 534 | "engines": { 535 | "node": ">=12" 536 | } 537 | }, 538 | "node_modules/make-error": { 539 | "version": "1.3.6", 540 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 541 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 542 | "dev": true 543 | }, 544 | "node_modules/ts-node": { 545 | "version": "10.9.1", 546 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", 547 | "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", 548 | "dev": true, 549 | "dependencies": { 550 | "@cspotcode/source-map-support": "^0.8.0", 551 | "@tsconfig/node10": "^1.0.7", 552 | "@tsconfig/node12": "^1.0.7", 553 | "@tsconfig/node14": "^1.0.0", 554 | "@tsconfig/node16": "^1.0.2", 555 | "acorn": "^8.4.1", 556 | "acorn-walk": "^8.1.1", 557 | "arg": "^4.1.0", 558 | "create-require": "^1.1.0", 559 | "diff": "^4.0.1", 560 | "make-error": "^1.1.1", 561 | "v8-compile-cache-lib": "^3.0.1", 562 | "yn": "3.1.1" 563 | }, 564 | "bin": { 565 | "ts-node": "dist/bin.js", 566 | "ts-node-cwd": "dist/bin-cwd.js", 567 | "ts-node-esm": "dist/bin-esm.js", 568 | "ts-node-script": "dist/bin-script.js", 569 | "ts-node-transpile-only": "dist/bin-transpile.js", 570 | "ts-script": "dist/bin-script-deprecated.js" 571 | }, 572 | "peerDependencies": { 573 | "@swc/core": ">=1.2.50", 574 | "@swc/wasm": ">=1.2.50", 575 | "@types/node": "*", 576 | "typescript": ">=2.7" 577 | }, 578 | "peerDependenciesMeta": { 579 | "@swc/core": { 580 | "optional": true 581 | }, 582 | "@swc/wasm": { 583 | "optional": true 584 | } 585 | } 586 | }, 587 | "node_modules/typescript": { 588 | "version": "5.0.4", 589 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", 590 | "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", 591 | "dev": true, 592 | "bin": { 593 | "tsc": "bin/tsc", 594 | "tsserver": "bin/tsserver" 595 | }, 596 | "engines": { 597 | "node": ">=12.20" 598 | } 599 | }, 600 | "node_modules/v8-compile-cache-lib": { 601 | "version": "3.0.1", 602 | "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", 603 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", 604 | "dev": true 605 | }, 606 | "node_modules/yn": { 607 | "version": "3.1.1", 608 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", 609 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 610 | "dev": true, 611 | "engines": { 612 | "node": ">=6" 613 | } 614 | } 615 | }, 616 | "dependencies": { 617 | "@cspotcode/source-map-support": { 618 | "version": "0.8.1", 619 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 620 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 621 | "dev": true, 622 | "requires": { 623 | "@jridgewell/trace-mapping": "0.3.9" 624 | } 625 | }, 626 | "@esbuild/android-arm": { 627 | "version": "0.15.18", 628 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", 629 | "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", 630 | "dev": true, 631 | "optional": true 632 | }, 633 | "@esbuild/linux-loong64": { 634 | "version": "0.15.18", 635 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", 636 | "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", 637 | "dev": true, 638 | "optional": true 639 | }, 640 | "@jridgewell/resolve-uri": { 641 | "version": "3.1.1", 642 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", 643 | "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", 644 | "dev": true 645 | }, 646 | "@jridgewell/sourcemap-codec": { 647 | "version": "1.4.15", 648 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 649 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 650 | "dev": true 651 | }, 652 | "@jridgewell/trace-mapping": { 653 | "version": "0.3.9", 654 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 655 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 656 | "dev": true, 657 | "requires": { 658 | "@jridgewell/resolve-uri": "^3.0.3", 659 | "@jridgewell/sourcemap-codec": "^1.4.10" 660 | } 661 | }, 662 | "@sinclair/hammer": { 663 | "version": "0.17.2", 664 | "resolved": "https://registry.npmjs.org/@sinclair/hammer/-/hammer-0.17.2.tgz", 665 | "integrity": "sha512-Nnzq4JuC3VB0JNEfxU4U9W65yCe4+/ft0+FGf6/HBn7BoxW3aigusstFdrzVdhjJ6NVABCwUBMgtYbD9X7Z94g==", 666 | "dev": true, 667 | "requires": { 668 | "esbuild": "^0.15.7" 669 | } 670 | }, 671 | "@sinclair/typebox": { 672 | "version": "0.28.7", 673 | "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.28.7.tgz", 674 | "integrity": "sha512-Ubom8FLHLw0tKXpsbDrcljkGUJpD+FlcLdALsTx+cQNjv3NxW87JaAvqnmHKmLxvI7SQCmdxFcIPytW9Jal3Iw==", 675 | "dev": true 676 | }, 677 | "@tsconfig/node10": { 678 | "version": "1.0.9", 679 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", 680 | "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", 681 | "dev": true 682 | }, 683 | "@tsconfig/node12": { 684 | "version": "1.0.11", 685 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", 686 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", 687 | "dev": true 688 | }, 689 | "@tsconfig/node14": { 690 | "version": "1.0.3", 691 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", 692 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", 693 | "dev": true 694 | }, 695 | "@tsconfig/node16": { 696 | "version": "1.0.3", 697 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", 698 | "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", 699 | "dev": true 700 | }, 701 | "@types/node": { 702 | "version": "18.16.2", 703 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.2.tgz", 704 | "integrity": "sha512-GQW/JL/5Fz/0I8RpeBG9lKp0+aNcXEaVL71c0D2Q0QHDTFvlYKT7an0onCUXj85anv7b4/WesqdfchLc0jtsCg==", 705 | "dev": true, 706 | "peer": true 707 | }, 708 | "acorn": { 709 | "version": "8.8.2", 710 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", 711 | "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", 712 | "dev": true 713 | }, 714 | "acorn-walk": { 715 | "version": "8.2.0", 716 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", 717 | "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", 718 | "dev": true 719 | }, 720 | "arg": { 721 | "version": "4.1.3", 722 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", 723 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 724 | "dev": true 725 | }, 726 | "create-require": { 727 | "version": "1.1.1", 728 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", 729 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 730 | "dev": true 731 | }, 732 | "diff": { 733 | "version": "4.0.2", 734 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 735 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 736 | "dev": true 737 | }, 738 | "esbuild": { 739 | "version": "0.15.18", 740 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz", 741 | "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==", 742 | "dev": true, 743 | "requires": { 744 | "@esbuild/android-arm": "0.15.18", 745 | "@esbuild/linux-loong64": "0.15.18", 746 | "esbuild-android-64": "0.15.18", 747 | "esbuild-android-arm64": "0.15.18", 748 | "esbuild-darwin-64": "0.15.18", 749 | "esbuild-darwin-arm64": "0.15.18", 750 | "esbuild-freebsd-64": "0.15.18", 751 | "esbuild-freebsd-arm64": "0.15.18", 752 | "esbuild-linux-32": "0.15.18", 753 | "esbuild-linux-64": "0.15.18", 754 | "esbuild-linux-arm": "0.15.18", 755 | "esbuild-linux-arm64": "0.15.18", 756 | "esbuild-linux-mips64le": "0.15.18", 757 | "esbuild-linux-ppc64le": "0.15.18", 758 | "esbuild-linux-riscv64": "0.15.18", 759 | "esbuild-linux-s390x": "0.15.18", 760 | "esbuild-netbsd-64": "0.15.18", 761 | "esbuild-openbsd-64": "0.15.18", 762 | "esbuild-sunos-64": "0.15.18", 763 | "esbuild-windows-32": "0.15.18", 764 | "esbuild-windows-64": "0.15.18", 765 | "esbuild-windows-arm64": "0.15.18" 766 | } 767 | }, 768 | "esbuild-android-64": { 769 | "version": "0.15.18", 770 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz", 771 | "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==", 772 | "dev": true, 773 | "optional": true 774 | }, 775 | "esbuild-android-arm64": { 776 | "version": "0.15.18", 777 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz", 778 | "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==", 779 | "dev": true, 780 | "optional": true 781 | }, 782 | "esbuild-darwin-64": { 783 | "version": "0.15.18", 784 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz", 785 | "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==", 786 | "dev": true, 787 | "optional": true 788 | }, 789 | "esbuild-darwin-arm64": { 790 | "version": "0.15.18", 791 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz", 792 | "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==", 793 | "dev": true, 794 | "optional": true 795 | }, 796 | "esbuild-freebsd-64": { 797 | "version": "0.15.18", 798 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz", 799 | "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==", 800 | "dev": true, 801 | "optional": true 802 | }, 803 | "esbuild-freebsd-arm64": { 804 | "version": "0.15.18", 805 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz", 806 | "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==", 807 | "dev": true, 808 | "optional": true 809 | }, 810 | "esbuild-linux-32": { 811 | "version": "0.15.18", 812 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz", 813 | "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==", 814 | "dev": true, 815 | "optional": true 816 | }, 817 | "esbuild-linux-64": { 818 | "version": "0.15.18", 819 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz", 820 | "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==", 821 | "dev": true, 822 | "optional": true 823 | }, 824 | "esbuild-linux-arm": { 825 | "version": "0.15.18", 826 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz", 827 | "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==", 828 | "dev": true, 829 | "optional": true 830 | }, 831 | "esbuild-linux-arm64": { 832 | "version": "0.15.18", 833 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz", 834 | "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==", 835 | "dev": true, 836 | "optional": true 837 | }, 838 | "esbuild-linux-mips64le": { 839 | "version": "0.15.18", 840 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz", 841 | "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==", 842 | "dev": true, 843 | "optional": true 844 | }, 845 | "esbuild-linux-ppc64le": { 846 | "version": "0.15.18", 847 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz", 848 | "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==", 849 | "dev": true, 850 | "optional": true 851 | }, 852 | "esbuild-linux-riscv64": { 853 | "version": "0.15.18", 854 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz", 855 | "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==", 856 | "dev": true, 857 | "optional": true 858 | }, 859 | "esbuild-linux-s390x": { 860 | "version": "0.15.18", 861 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz", 862 | "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==", 863 | "dev": true, 864 | "optional": true 865 | }, 866 | "esbuild-netbsd-64": { 867 | "version": "0.15.18", 868 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz", 869 | "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==", 870 | "dev": true, 871 | "optional": true 872 | }, 873 | "esbuild-openbsd-64": { 874 | "version": "0.15.18", 875 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz", 876 | "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==", 877 | "dev": true, 878 | "optional": true 879 | }, 880 | "esbuild-sunos-64": { 881 | "version": "0.15.18", 882 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz", 883 | "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==", 884 | "dev": true, 885 | "optional": true 886 | }, 887 | "esbuild-windows-32": { 888 | "version": "0.15.18", 889 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz", 890 | "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==", 891 | "dev": true, 892 | "optional": true 893 | }, 894 | "esbuild-windows-64": { 895 | "version": "0.15.18", 896 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz", 897 | "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==", 898 | "dev": true, 899 | "optional": true 900 | }, 901 | "esbuild-windows-arm64": { 902 | "version": "0.15.18", 903 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz", 904 | "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==", 905 | "dev": true, 906 | "optional": true 907 | }, 908 | "make-error": { 909 | "version": "1.3.6", 910 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 911 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 912 | "dev": true 913 | }, 914 | "ts-node": { 915 | "version": "10.9.1", 916 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", 917 | "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", 918 | "dev": true, 919 | "requires": { 920 | "@cspotcode/source-map-support": "^0.8.0", 921 | "@tsconfig/node10": "^1.0.7", 922 | "@tsconfig/node12": "^1.0.7", 923 | "@tsconfig/node14": "^1.0.0", 924 | "@tsconfig/node16": "^1.0.2", 925 | "acorn": "^8.4.1", 926 | "acorn-walk": "^8.1.1", 927 | "arg": "^4.1.0", 928 | "create-require": "^1.1.0", 929 | "diff": "^4.0.1", 930 | "make-error": "^1.1.1", 931 | "v8-compile-cache-lib": "^3.0.1", 932 | "yn": "3.1.1" 933 | } 934 | }, 935 | "typescript": { 936 | "version": "5.0.4", 937 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", 938 | "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", 939 | "dev": true 940 | }, 941 | "v8-compile-cache-lib": { 942 | "version": "3.0.1", 943 | "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", 944 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", 945 | "dev": true 946 | }, 947 | "yn": { 948 | "version": "3.1.1", 949 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", 950 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 951 | "dev": true 952 | } 953 | } 954 | } 955 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@erfanium/fetch-typebox", 3 | "version": "0.2.2", 4 | "description": "", 5 | "main": "index.js", 6 | "types": "index.d.ts", 7 | "scripts": { 8 | "build": "hammer task build", 9 | "publish": "hammer task publish" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "git+https://github.com/erfanium/fetch-typebox.git" 14 | }, 15 | "keywords": [], 16 | "author": "", 17 | "license": "ISC", 18 | "bugs": { 19 | "url": "https://github.com/erfanium/fetch-typebox/issues" 20 | }, 21 | "homepage": "https://github.com/erfanium/fetch-typebox#readme", 22 | "devDependencies": { 23 | "@sinclair/hammer": "^0.17.2", 24 | "@sinclair/typebox": "^0.28.7", 25 | "ts-node": "^10.9.1", 26 | "typescript": "^5.0.4" 27 | }, 28 | "peerDependencies": { 29 | "@sinclair/typebox": ">=0.28.0" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /screenshots/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/erfanium/fetch-typebox/ea927c5cc7ee0a43a3adc6fabfb81dad9f06ffb2/screenshots/1.png -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { Static, TSchema, TUnknown } from "@sinclair/typebox"; 2 | import { TypeCheck } from "@sinclair/typebox/compiler"; 3 | 4 | export class ResponseValidationError extends Error {} 5 | 6 | export class TypeBoxResponse extends Response { 7 | constructor(response: Response) { 8 | super(response.body, { 9 | status: response.status, 10 | statusText: response.statusText, 11 | headers: response.headers, 12 | }); 13 | } 14 | 15 | json(): Promise; 16 | json(typeChecker: TypeCheck): Promise>; 17 | async json( 18 | typeChecker?: TypeCheck 19 | ): Promise> { 20 | if (!typeChecker) return super.json(); 21 | const body = await super.json(); 22 | const result = typeChecker.Check(body); 23 | if (result) return body; 24 | 25 | const errors = typeChecker.Errors(body); 26 | const firstError = errors.First(); 27 | 28 | throw new ResponseValidationError( 29 | `ResponseValidationError ${firstError?.message}. path: ${firstError?.path} value: ${firstError?.value}`, 30 | { 31 | cause: firstError, 32 | } 33 | ); 34 | } 35 | } 36 | 37 | async function typeboxFetch( 38 | input: RequestInfo, 39 | init?: RequestInit 40 | ): Promise { 41 | const response = await fetch(input, init); 42 | return new TypeBoxResponse(response); 43 | } 44 | 45 | export { typeboxFetch as fetch, TypeBoxResponse as Response }; 46 | -------------------------------------------------------------------------------- /src/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "strict": true, 4 | "lib": ["ES2022", "DOM"], 5 | "target": "ES2022", 6 | "noImplicitAny": true, 7 | "module": "CommonJS", 8 | "declaration": true, 9 | "allowJs": true, 10 | "checkJs": false, 11 | "outDir": "dist", 12 | "skipLibCheck": false, 13 | "baseUrl": "." 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "strict": true, 4 | "target": "ES2022", 5 | "module": "CommonJS", 6 | "moduleResolution": "node", 7 | "declaration": true, 8 | "baseUrl": "." 9 | } 10 | } 11 | --------------------------------------------------------------------------------