tubular-common
Version:
Tubular Common Models and Data Transformer
74 lines • 2.48 kB
JavaScript
const responseKeys = [
'AggregationPayload',
'Counter',
'CurrentPage',
'FilteredRecordCount',
'Payload',
'TotalPages',
'TotalRecordCount',
];
const expectedStructureKeys = JSON.stringify([
'aggregationpayload',
'counter',
'currentpage',
'filteredrecordcount',
'payload',
'totalpages',
'totalrecordcount',
]);
class TubularHttpClient {
static resolveRequest(request) {
const httpCast = request;
if (httpCast.request) {
return httpCast.request;
}
return request || request;
}
static getRequest(objRequest, gridRequest) {
if (typeof objRequest === 'string') {
return new Request(objRequest, {
body: JSON.stringify(gridRequest),
headers: new Headers({ 'Content-Type': 'application/json;charset=utf-8' }),
method: 'POST',
});
}
objRequest.headers.append('Content-Type', 'application/json;charset=utf-8');
return new Request(objRequest.url, {
body: JSON.stringify(gridRequest),
headers: objRequest.headers,
method: objRequest.method,
});
}
static isValidResponse(data) {
return (data &&
expectedStructureKeys ===
JSON.stringify(Object.keys(data)
.map((x) => x.toLowerCase())
.sort()));
}
static fixResponse(responseObject) {
// biome-ignore lint/complexity/noForEach: <explanation>
responseKeys.forEach((k) => {
if (Object.hasOwnProperty.call(responseObject, k)) {
responseObject[k.charAt(0).toLowerCase() + k.slice(1)] = responseObject[k];
delete responseObject[k];
}
});
}
request;
constructor(request) {
this.request = TubularHttpClient.resolveRequest(request);
}
async fetch(gridRequest) {
const response = await fetch(TubularHttpClient.getRequest(this.request, gridRequest));
if (response.status >= 200 && response.status < 300) {
const responseBody = await response.text();
const responseObject = responseBody ? JSON.parse(responseBody) : {};
TubularHttpClient.fixResponse(responseObject);
return responseObject;
}
throw new Error('Invalid request');
}
}
export default TubularHttpClient;
//# sourceMappingURL=TubularHttpClient.js.map