This repository has been archived on 2023-10-27. You can view files and clone it, but cannot push or open issues or pull requests.
node-fetch-cache/classes/response.js

54 lines
1.1 KiB
JavaScript
Raw Normal View History

2021-06-10 15:28:05 +00:00
const stream = require('stream');
2021-06-11 20:37:51 +00:00
const Blob = require('./blob.js');
2020-11-28 04:28:00 +00:00
const Headers = require('./headers.js');
class Response {
2021-06-11 15:25:24 +00:00
constructor(raw, ejectSelfFromCache, fromCache) {
2020-11-28 04:28:00 +00:00
Object.assign(this, raw);
2021-06-11 15:25:24 +00:00
this.ejectSelfFromCache = ejectSelfFromCache;
2020-11-28 04:28:00 +00:00
this.headers = new Headers(raw.headers);
this.fromCache = fromCache;
2021-06-10 15:28:05 +00:00
this.bodyUsed = false;
2020-11-28 04:28:00 +00:00
if (this.bodyBuffer.type === 'Buffer') {
this.bodyBuffer = Buffer.from(this.bodyBuffer);
}
}
2021-06-10 15:28:05 +00:00
get body() {
return stream.Readable.from(this.bodyBuffer);
}
consumeBody() {
2021-06-10 15:28:05 +00:00
if (this.bodyUsed) {
throw new Error('Error: body used already');
}
2021-06-10 15:28:05 +00:00
this.bodyUsed = true;
return this.bodyBuffer;
}
2021-06-11 20:37:51 +00:00
async text() {
return this.consumeBody().toString();
2020-11-28 04:28:00 +00:00
}
2021-06-11 20:37:51 +00:00
async json() {
return JSON.parse(this.consumeBody().toString());
2020-11-28 04:28:00 +00:00
}
2021-06-11 20:37:51 +00:00
async buffer() {
return this.consumeBody();
2020-11-28 04:28:00 +00:00
}
2021-06-11 20:37:51 +00:00
async blob() {
const type = this.headers.get('content-type');
return new Blob([this.consumeBody()], { type });
}
2021-06-11 15:25:24 +00:00
ejectFromCache() {
return this.ejectSelfFromCache();
2020-11-28 04:28:00 +00:00
}
}
module.exports = Response;