UNPKG

@deltares/fews-ssd-requests

Version:

Library for making requests to the FEWS SSD webservice

1 lines 5.71 kB
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports["fews-ssd-requests"]=t():e["fews-ssd-requests"]=t()}(this,(function(){return(()=>{"use strict";var e={d:(t,s)=>{for(var r in s)e.o(s,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:s[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{CapabilitiesParsers:()=>s,ClickType:()=>u,DefaultParser:()=>r,FEWS_NAMESPACE:()=>o,SsdWebserviceProvider:()=>l,SvgElementParser:()=>n,addKeyDownListener:()=>h,addLeftClickAction:()=>w,datesFromPeriod:()=>p,getUrlForAction:()=>i});class s{excludedGroups;constructor(e){this.excludedGroups=e}async parse(e){const t=await e.json(),s=t.displayGroups.filter((e=>!this.excludedGroups.includes(e.name)));return t.displayGroups=s,t}}class r{async parse(e){return await e.json()}}class n{async parse(e){const t=new DOMParser,s=await e.text(),r=t.parseFromString(s,"text/xml").querySelector("svg");if(null===r)throw new Error("respsonse does not contain a svg");return r}}function i(e){const t=void 0===e.clickType?"LEFTSINGLECLICK":e.clickType;let s=`?request=GetAction&ssd=${e.panelId}&action=${t}&objectid=${e.objectId}`;return void 0!==e.timeZero&&(s+=`&timezero=${e.timeZero}`),void 0!==e.convertDatum&&(s+=`&convertDatum=${e.convertDatum}`),void 0!==e.useDisplayUnits&&(s+=`&useDisplayUnits=${e.useDisplayUnits}`),void 0!==e.options&&(s+=`&options=${e.options.join(",")}`),!1!==e.config&&(s+="&config=true"),s+="&format=application/json",s}const o="http://www.wldelft.nl/fews";class a{_mode="cors";_relativeUrl=!0;get relativeUrl(){return this._relativeUrl}set relativeUrl(e){this._relativeUrl=e}get mode(){return this._mode}set mode(e){this._mode=e}}class c{async parse(e){return await e.json()}}class d{webserviceUrl;transformRequest;constructor(e,t){if(this.webserviceUrl=e,void 0!==t)this.transformRequest=t;else{async function e(e){return e}this.transformRequest=e}}async getDataWithParser(e,t,s){const r=t.relativeUrl?this.webserviceUrl+e:e,n=new Request(r,{method:"GET"}),i=await fetch(await this.transformRequest(n));return await this.processResponse({},i,r,s)}async postDataWithParser(e,t,s,r,n){const i=t.relativeUrl?this.webserviceUrl+e:e,o={method:"POST"};o.body=r,o.headers=n;const a=new Request(i,o),c=await fetch(await this.transformRequest(a));return await this.processResponse({},c,i,s)}async getData(e){const t=new a;return t.relativeUrl=!e.startsWith("http"),this.getDataWithParser(e,t,new c)}async postData(e,t,s={"Content-Type":"application/json"}){const r=new a;return r.relativeUrl=!e.startsWith("http"),this.postDataWithParser(e,r,new c,t,s)}async processResponse(e,t,s,r){if(e.responseCode=t.status,e.contentType=t.headers.get("content-type"),200!=t.status)return e.errorMessage=t.statusText,e;try{e.data=await r.parse(t)}catch(e){throw e.message+=`\n When loading ${s}.`,e}return e}}class l{_ssdUrl;_piUrl;SSD_ENDPOINT="ssd";PI_ENDPOINT="";piWebservice;ssdWebservice;constructor(e,t={}){e.endsWith("/")||(e+="/"),this._ssdUrl=e+this.SSD_ENDPOINT,this._piUrl=e+this.PI_ENDPOINT,this.piWebservice=new d(this._piUrl,t.transformRequestFn),this.ssdWebservice=new d(this._ssdUrl,t.transformRequestFn)}async getSvg(e){const t=new a;t.relativeUrl=!1;const s=await this.ssdWebservice.getDataWithParser(e,t,new n);if(200!=s.responseCode)throw new Error(s.errorMessage);return s.data}async getActionFromElement(e,t){const s=e.getAttributeNS(o,"id");if(null==s)throw new Error(`No element with 'fews:id=${s}] present`);return t.objectId=s,this.getAction(t).then((e=>({id:s,action:e})))}async fetchPiRequest(e){e=e.startsWith("/")?e:"/"+e;const t=await this.piWebservice.getData(e);if(200!=t.responseCode)throw new Error(t.errorMessage);return t.data}async getAction(e){const t=i(e),s=await this.ssdWebservice.getData(t);if(200!=s.responseCode)throw new Error(s.errorMessage);return s.data}urlForPanel(e,t){const s="?request=GetDisplay&ssd="+e+"&time="+t.toISOString().split(".")[0]+"Z";return encodeURI(this._ssdUrl+s)}async getCapabilities(e={displayGroups:[]}){const t=e.displayGroups.map((e=>e.name)),r=new s(t),n=await this.ssdWebservice.getDataWithParser("?request=GetCapabilities&format=application/json",new a,r);if(200!=n.responseCode)throw new Error(n.errorMessage);return n.data}}const u={LEFTSINGLECLICK:"LEFTSINGLECLICK",LEFTDOUBLECLICK:"LEFTDOUBLECLICK",WEBOCDASHBOARD:"WEBOCDASHBOARD"};function p(e){const t=e.split("/",3),s=new Date(t[0]),r=new Date(t[1]),n=[s],i=function(e){if(!e)return NaN;const t=60*(60*(24*(7*e.weeks+e.days)+e.hours)+e.minutes)+e.seconds;return+(e.sign+="1")*t*1e3}(function(e){const t=e.match(new RegExp("(-)?P(?:([.,\\d]+)Y)?(?:([.,\\d]+)M)?(?:([.,\\d]+)W)?(?:([.,\\d]+)D)?(?:T(?:([.,\\d]+)H)?(?:([.,\\d]+)M)?(?:([.,\\d]+)S)?)?"));if(t)return{sign:void 0===t[1]?"+":"-",years:void 0===t[2]?0:+t[2],months:void 0===t[3]?0:+t[3],weeks:void 0===t[4]?0:+t[4],days:void 0===t[5]?0:+t[5],hours:void 0===t[6]?0:+t[6],minutes:void 0===t[7]?0:+t[7],seconds:void 0===t[8]?0:+t[8]}}(t[2]));let o=s.getTime()+i;for(;o<r.getTime();)n.push(new Date(o)),o+=i;return n.push(r),n}function h(e,t,s){e.querySelectorAll("*").forEach((function(e){e.hasAttributeNS(o,"click")&&e.hasAttribute("tabindex")&&e.addEventListener("keydown",(e=>{t.includes(e.key)&&s(e)}))}))}function w(e,t){e.querySelectorAll("*").forEach((function(e){e.hasAttributeNS(o,"click")&&(e.addEventListener("click",t),e.style.cursor="pointer",e.setAttribute("pointer-events","auto"))}))}return t})()}));