@deltares/fews-web-oc-utils
Version:
Util Library for common Web OC functionality
64 lines • 2.83 kB
JavaScript
import { RequestOptions } from "./requestOptions.js";
import { DefaultParser } from "../parser/defaultParser.js";
export class PiRestService {
webserviceUrl;
transformRequest;
constructor(webserviceUrl, transformRequestFn) {
this.webserviceUrl = webserviceUrl;
if (transformRequestFn !== undefined) {
this.transformRequest = transformRequestFn;
}
else {
async function transformRequestFn(request) {
return request;
}
this.transformRequest = transformRequestFn;
}
}
async getDataWithParser(url, requestOption, parser) {
const requestUrl = requestOption.relativeUrl ? this.webserviceUrl + url : url;
const dataRequestResult = {};
const requestParameters = {};
requestParameters.method = "GET";
const request = new Request(requestUrl, requestParameters);
const res = await fetch(await this.transformRequest(request));
if (!res.ok)
throw new Error('Fetch Error', { cause: res });
return await this.processResponse(dataRequestResult, res, requestUrl, parser);
}
async postDataWithParser(url, requestOption, parser, body, headers) {
const requestUrl = requestOption.relativeUrl ? this.webserviceUrl + url : url;
const dataRequestResult = {};
const requestParameters = {};
requestParameters.method = "POST";
requestParameters.body = body;
requestParameters.headers = headers;
const request = new Request(requestUrl, requestParameters);
const res = await fetch(await this.transformRequest(request));
if (!res.ok)
throw new Error('Fetch Error', { cause: res });
return await this.processResponse(dataRequestResult, res, requestUrl, parser);
}
async getData(url) {
const requestOption = new RequestOptions();
requestOption.relativeUrl = !url.startsWith("http");
return this.getDataWithParser(url, requestOption, new DefaultParser());
}
async postData(url, body, headers = { "Content-Type": "application/json" }) {
const requestOption = new RequestOptions();
requestOption.relativeUrl = !url.startsWith("http");
return this.postDataWithParser(url, requestOption, new DefaultParser(), body, headers);
}
async processResponse(dataRequestResult, res, url, parser) {
dataRequestResult.responseCode = res.status;
dataRequestResult.contentType = res.headers.get('content-type');
try {
dataRequestResult.data = await parser.parse(res);
}
catch (e) {
throw new Error(`Parse Error for response ${url}.`, { cause: e });
}
return dataRequestResult;
}
}
//# sourceMappingURL=piRestService.js.map