UNPKG

fets

Version:

TypeScript HTTP Framework focusing on e2e type-safety, easy setup, performance & great developer experience

52 lines (51 loc) 1.64 kB
import { Headers, Response as OriginalResponse } from '@whatwg-node/fetch'; export const LAZY_SERIALIZED_RESPONSE = Symbol('LAZY_SERIALIZED_RESPONSE'); export const defaultSerializer = obj => JSON.stringify(obj); export function isLazySerializedResponse(response) { return response != null && response[LAZY_SERIALIZED_RESPONSE]; } export function createLazySerializedResponse(jsonObj, init) { let resolve; const promise = new Promise(_resolve => { resolve = _resolve; }); let _serializerSet = false; const headers = new Headers({ ...init?.headers, 'Content-Type': 'application/json', }); return { jsonObj, responsePromise: promise, [LAZY_SERIALIZED_RESPONSE]: true, init, get serializerSet() { return _serializerSet; }, resolveWithSerializer(serializer) { const serialized = serializer(jsonObj); _serializerSet = true; resolve(new OriginalResponse(serialized, { ...init, status: init?.status || 200, headers, })); }, async json() { return jsonObj; }, get status() { return (init?.status || 200); }, headers, }; } // This allows us to hook into serialization of the response body export const Response = new Proxy(OriginalResponse, { get(OriginalResponse, prop, receiver) { if (prop === 'json') { return createLazySerializedResponse; } return Reflect.get(OriginalResponse, prop, receiver); }, });