From 7626c20f081db72553af5c2cb8622f701c9d6ecc Mon Sep 17 00:00:00 2001 From: ztimson Date: Fri, 19 Jul 2024 09:24:53 -0400 Subject: [PATCH] Improved http --- package.json | 2 +- src/http.ts | 25 +++++++++++-------------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 8f68a26..2b614c1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@ztimson/utils", - "version": "0.14.2", + "version": "0.14.3", "description": "Utility library", "author": "Zak Timson", "license": "MIT", diff --git a/src/http.ts b/src/http.ts index c7bf37f..ef654c8 100644 --- a/src/http.ts +++ b/src/http.ts @@ -1,7 +1,7 @@ import {clean} from './objects'; import {PromiseProgress} from './promise-progress'; -export type DecodedResponse = Response & {data?: T} +export type DecodedResponse = Response & {data: T | null} export type HttpInterceptor = (response: Response, next: () => void) => void; @@ -78,14 +78,11 @@ export class Http { headers, method: opts.method || (opts.body ? 'POST' : 'GET'), body: opts.body - }).then(async (resp: DecodedResponse) => { - console.log('done!'); + }).then(async (resp: any) => { for(let fn of [...Object.values(Http.interceptors), ...Object.values(this.interceptors)]) { await new Promise(res => fn(resp, () => res())); } - if(!resp.ok) rej(resp); - const contentLength = resp.headers.get('Content-Length'); const total = contentLength ? parseInt(contentLength, 10) : 0; let loaded = 0; @@ -94,28 +91,28 @@ export class Http { const stream = new ReadableStream({ start(controller) { function push() { - reader?.read().then(({done, value}) => { - if(done) return controller.close(); - loaded += value.byteLength; + reader?.read().then((event: any) => { + if(event.done) return controller.close(); + loaded += event.value.byteLength; prog(loaded / total); - controller.enqueue(value); + controller.enqueue(event.value); push(); - }).catch(error => { - controller.error(error); - }); + }).catch((error: any) => controller.error(error)); } push(); } }); const data = new Response(stream); - const content = resp.headers.get('Content-Type')?.toLowerCase(); if(content?.includes('json')) resp.data = await data.json(); else if(content?.includes('text')) resp.data = await data.text(); else if(content?.includes('form')) resp.data = await data.formData(); else if(content?.includes('application')) resp.data = await data.blob(); - res(resp); + else resp.data = null; + + if(resp.ok) res(resp); + else rej(resp); }) }); }