UNPKG

@deltares/fews-web-oc-utils

Version:

Util Library for common Web OC functionality

64 lines 2.83 kB
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