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