UNPKG

fets

Version:

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

71 lines (70 loc) 2.34 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[exports.LAZY_SERIALIZED_RESPONSE]; } exports.isLazySerializedResponse = isLazySerializedResponse; function isHeadersLike(headers) { return headers?.get && headers?.forEach; } const JSON_CONTENT_TYPE = 'application/json; charset=utf-8'; function getHeadersFromHeadersInit(init) { let headers; if (isHeadersLike(init)) { headers = init; } else { headers = new fetch_1.Headers(init); } if (!headers.has('content-type')) { headers.set('content-type', JSON_CONTENT_TYPE); } return headers; } function createLazySerializedResponse(jsonObj, init = {}) { let actualResponse; let headers; function getHeaders() { if (headers == null) { headers = getHeadersFromHeadersInit(init.headers); } return headers; } return { jsonObj, get actualResponse() { return actualResponse; }, [exports.LAZY_SERIALIZED_RESPONSE]: true, init, resolveWithSerializer(serializer) { const serialized = serializer(jsonObj); init.headers = getHeaders(); actualResponse = new fetch_1.Response(serialized, init); }, json() { return Promise.resolve(jsonObj); }, get status() { return (init?.status || 200); }, get headers() { return getHeaders(); }, }; } 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); }, });