├── .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 |
--------------------------------------------------------------------------------