diff --git a/package-lock.json b/package-lock.json index edf0e30..1f9147a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ztimson/utils", - "version": "0.10.2", + "version": "0.10.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@ztimson/utils", - "version": "0.10.2", + "version": "0.10.4", "license": "MIT", "devDependencies": { "@types/jest": "^29.5.12", diff --git a/package.json b/package.json index d7d9971..e135f48 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@ztimson/utils", - "version": "0.10.3", + "version": "0.10.4", "description": "Utility library", "author": "Zak Timson", "license": "MIT", diff --git a/src/xhr.ts b/src/xhr.ts index e5eab92..1beaf4f 100644 --- a/src/xhr.ts +++ b/src/xhr.ts @@ -75,10 +75,16 @@ export class XHR { await new Promise(res => fn(resp, () => res())); } - if(!resp.ok) throw new Error(resp.statusText); - if(!opts.skipConverting && resp.headers.get('Content-Type')?.startsWith('application/json')) return await resp.json(); - if(!opts.skipConverting && resp.headers.get('Content-Type')?.startsWith('text/plain')) return await resp.text(); - return resp; + const decode = async () => { + if(!opts.skipConverting && resp.headers.get('Content-Type')?.startsWith('application/json')) return await resp.json(); + if(!opts.skipConverting && resp.headers.get('Content-Type')?.startsWith('text/plain')) return await resp.text(); + return resp; + } + + const payload = await decode(); + if(resp.ok) return payload; + const text = resp.statusText || (typeof payload == 'string' ? payload : null); + throw (text ? new Error(text) : payload); }); } }