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