1import { CacheObject } from 'cacache'; 2import { BodyInit, Response, ResponseInit } from 'node-fetch'; 3 4const responseInternalSymbol = Object.getOwnPropertySymbols(new Response())[1]; 5 6export class NFCResponse extends Response { 7 constructor( 8 bodyStream?: BodyInit, 9 metaData?: ResponseInit, 10 public ejectFromCache: () => Promise<[CacheObject, CacheObject]> = function ejectFromCache( 11 this: any 12 ) { 13 return this.ejectSelfFromCache(); 14 }, 15 public fromCache: boolean = false 16 ) { 17 super(bodyStream, metaData); 18 } 19 20 static serializeMetaFromNodeFetchResponse(res: Response) { 21 const metaData = { 22 url: res.url, 23 status: res.status, 24 statusText: res.statusText, 25 headers: res.headers.raw(), 26 size: res.size, 27 timeout: res.timeout, 28 // @ts-ignore 29 counter: res[responseInternalSymbol].counter, 30 }; 31 32 return metaData; 33 } 34} 35