UNPKG

fets

Version:

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

58 lines (57 loc) 2.02 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Response = exports.createLazySerializedResponse = exports.isLazySerializedResponse = exports.defaultSerializer = exports.LAZY_SERIALIZED_RESPONSE = void 0; const fetch_1 = require("@whatwg-node/fetch"); exports.LAZY_SERIALIZED_RESPONSE = Symbol('LAZY_SERIALIZED_RESPONSE'); const defaultSerializer = obj => JSON.stringify(obj); exports.defaultSerializer = defaultSerializer; function isLazySerializedResponse(response) { return response != null && response[exports.LAZY_SERIALIZED_RESPONSE]; } exports.isLazySerializedResponse = isLazySerializedResponse; function createLazySerializedResponse(jsonObj, init) { let resolve; const promise = new Promise(_resolve => { resolve = _resolve; }); let _serializerSet = false; const headers = new fetch_1.Headers({ ...init?.headers, 'Content-Type': 'application/json', }); return { jsonObj, responsePromise: promise, [exports.LAZY_SERIALIZED_RESPONSE]: true, init, get serializerSet() { return _serializerSet; }, resolveWithSerializer(serializer) { const serialized = serializer(jsonObj); _serializerSet = true; resolve(new fetch_1.Response(serialized, { ...init, status: init?.status || 200, headers, })); }, async json() { return jsonObj; }, get status() { return (init?.status || 200); }, headers, }; } exports.createLazySerializedResponse = createLazySerializedResponse; // This allows us to hook into serialization of the response body exports.Response = new Proxy(fetch_1.Response, { get(OriginalResponse, prop, receiver) { if (prop === 'json') { return createLazySerializedResponse; } return Reflect.get(OriginalResponse, prop, receiver); }, });