fets
Version:
TypeScript HTTP Framework focusing on e2e type-safety, easy setup, performance & great developer experience
58 lines (57 loc) • 2.02 kB
JavaScript
;
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);
},
});