@signalk/freeboard-sk 2.22.0 → 2.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,4 +2,4 @@ var Ln=Object.create;var Gr=Object.defineProperty;var kn=Object.getOwnPropertyDe
2
2
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function lo(t,e){if(t){if(typeof t=="string")return Pi(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set")return Array.from(t);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Pi(t,e)}}function Pi(t,e){(e==null||e>t.length)&&(e=t.length);for(var r=0,i=new Array(e);r<e;r++)i[r]=t[r];return i}function fo(t,e){if(!(typeof Symbol>"u"||!(Symbol.iterator in Object(t)))){var r=[],i=!0,n=!1,a=void 0;try{for(var o=t[Symbol.iterator](),s;!(i=(s=o.next()).done)&&(r.push(s.value),!(e&&r.length===e));i=!0);}catch(u){n=!0,a=u}finally{try{!i&&o.return!=null&&o.return()}finally{if(n)throw a}}return r}}function co(t){if(Array.isArray(t))return t}var mo=function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:4,i=Math.pow(10,r);return Math.round(e*i)/i},po=function(e){var r=e.toString().split("."),i=xi(r,2),n=i[0],a=i[1],o=Math.abs(Number(n)),s=+("0."+(a||0))*60,u=s.toString().split("."),p=Math.floor(s),h=mo(+("0."+(u[1]||0))*60).toString(),v=h.split("."),m=xi(v,2),b=m[0],O=m[1],y=O===void 0?"0":O;return o+"\xB0 "+p.toString().padStart(2,"0")+"' "+b.padStart(2,"0")+"."+y.padEnd(1,"0")+'"'},go=po;at.default=go});var hr=l(ot=>{"use strict";Object.defineProperty(ot,"__esModule",{value:!0});ot.default=void 0;var ho=function(e){return e>1?1:e<-1?-1:e},vo=ho;ot.default=vo});var $=l(ut=>{"use strict";Object.defineProperty(ut,"__esModule",{value:!0});ut.default=void 0;var Si=st(R()),Oi=st(L()),ie=st(N()),yo=st(hr()),bo=S();function st(t){return t&&t.__esModule?t:{default:t}}var _o=function(e,r){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1;i=typeof i<"u"&&!isNaN(i)?i:1;var n=(0,Si.default)(e),a=(0,Oi.default)(e),o=(0,Si.default)(r),s=(0,Oi.default)(r),u=Math.acos((0,yo.default)(Math.sin((0,ie.default)(o))*Math.sin((0,ie.default)(n))+Math.cos((0,ie.default)(o))*Math.cos((0,ie.default)(n))*Math.cos((0,ie.default)(a)-(0,ie.default)(s))))*bo.earthRadius;return Math.round(u/i)*i},xo=_o;ut.default=xo});var vr=l(lt=>{"use strict";Object.defineProperty(lt,"__esModule",{value:!0});lt.default=void 0;var wi=Po($());function Po(t){return t&&t.__esModule?t:{default:t}}var Mo=function(e,r){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:wi.default;return i=typeof i=="function"?i:wi.default,r.slice().sort(function(n,a){return i(e,n)-i(e,a)})},So=Mo;lt.default=So});var Ai=l(ft=>{"use strict";Object.defineProperty(ft,"__esModule",{value:!0});ft.default=void 0;var Oo=wo(vr());function wo(t){return t&&t.__esModule?t:{default:t}}var Ao=function(e,r){return(0,Oo.default)(e,r)[0]},Do=Ao;ft.default=Do});var Li=l(ct=>{"use strict";Object.defineProperty(ct,"__esModule",{value:!0});ct.default=void 0;var yr=br(N()),Ro=br(R()),Di=br(L()),Ri=S();function br(t){return t&&t.__esModule?t:{default:t}}var Lo=function(e){var r=0;if(e.length>2){for(var i,n,a,o=0;o<e.length;o++){o===e.length-2?(i=e.length-2,n=e.length-1,a=0):o===e.length-1?(i=e.length-1,n=0,a=1):(i=o,n=o+1,a=o+2);var s=(0,Di.default)(e[i]),u=(0,Ro.default)(e[n]),p=(0,Di.default)(e[a]);r+=((0,yr.default)(p)-(0,yr.default)(s))*Math.sin((0,yr.default)(u))}r=r*Ri.earthRadius*Ri.earthRadius/2}return Math.abs(r)},ko=Lo;ct.default=ko});var _r=l(dt=>{"use strict";Object.defineProperty(dt,"__esModule",{value:!0});dt.default=void 0;var qo=ki(R()),To=ki(L());function ki(t){return t&&t.__esModule?t:{default:t}}var Co=function(e){if(Array.isArray(e)===!1||e.length===0)throw new Error("No points were given.");return e.reduce(function(r,i){var n=(0,qo.default)(i),a=(0,To.default)(i);return{maxLat:Math.max(n,r.maxLat),minLat:Math.min(n,r.minLat),maxLng:Math.max(a,r.maxLng),minLng:Math.min(a,r.minLng)}},{maxLat:-1/0,minLat:1/0,maxLng:-1/0,minLng:1/0})},Eo=Co;dt.default=Eo});var qi=l(gt=>{"use strict";Object.defineProperty(gt,"__esModule",{value:!0});gt.default=void 0;var Io=pt(R()),No=pt(L()),ne=pt(N()),mt=pt(z()),ye=S();function pt(t){return t&&t.__esModule?t:{default:t}}var Fo=function(e,r){var i=(0,Io.default)(e),n=(0,No.default)(e),a=(0,ne.default)(i),o=(0,ne.default)(n),s=r/ye.earthRadius,u=a-s,p=a+s,h=(0,ne.default)(ye.MAXLAT),v=(0,ne.default)(ye.MINLAT),m=(0,ne.default)(ye.MAXLON),b=(0,ne.default)(ye.MINLON),O,y;if(u>v&&p<h){var q=Math.asin(Math.sin(s)/Math.cos(a));O=o-q,O<b&&(O+=Math.PI*2),y=o+q,y>m&&(y-=Math.PI*2)}else u=Math.max(u,v),p=Math.min(p,h),O=b,y=m;return[{latitude:(0,mt.default)(u),longitude:(0,mt.default)(O)},{latitude:(0,mt.default)(p),longitude:(0,mt.default)(y)}]},Uo=Fo;gt.default=Uo});var Ei=l(vt=>{"use strict";Object.defineProperty(vt,"__esModule",{value:!0});vt.default=void 0;var Vo=ht(R()),Ko=ht(L()),Ti=ht(N()),Ci=ht(z());function ht(t){return t&&t.__esModule?t:{default:t}}var Wo=function(e){if(Array.isArray(e)===!1||e.length===0)return!1;var r=e.length,i=e.reduce(function(s,u){var p=(0,Ti.default)((0,Vo.default)(u)),h=(0,Ti.default)((0,Ko.default)(u));return{X:s.X+Math.cos(p)*Math.cos(h),Y:s.Y+Math.cos(p)*Math.sin(h),Z:s.Z+Math.sin(p)}},{X:0,Y:0,Z:0}),n=i.X/r,a=i.Y/r,o=i.Z/r;return{longitude:(0,Ci.default)(Math.atan2(a,n)),latitude:(0,Ci.default)(Math.atan2(o,Math.sqrt(n*n+a*a)))}},$o=Wo;vt.default=$o});var Ii=l(yt=>{"use strict";Object.defineProperty(yt,"__esModule",{value:!0});yt.default=void 0;var Bo=jo(_r());function jo(t){return t&&t.__esModule?t:{default:t}}var Ho=function(e){var r=(0,Bo.default)(e),i=r.minLat+(r.maxLat-r.minLat)/2,n=r.minLng+(r.maxLng-r.minLng)/2;return{latitude:parseFloat(i.toFixed(6)),longitude:parseFloat(n.toFixed(6))}},Go=Ho;yt.default=Go});var xr=l(xt=>{"use strict";Object.defineProperty(xt,"__esModule",{value:!0});xt.default=void 0;var Ni=_t(R()),Fi=_t(L()),bt=_t(N()),zo=_t(z());function _t(t){return t&&t.__esModule?t:{default:t}}var Xo=function(e,r){var i=(0,bt.default)((0,Fi.default)(r))-(0,bt.default)((0,Fi.default)(e)),n=Math.log(Math.tan((0,bt.default)((0,Ni.default)(r))/2+Math.PI/4)/Math.tan((0,bt.default)((0,Ni.default)(e))/2+Math.PI/4));return Math.abs(i)>Math.PI&&(i>0?i=(Math.PI*2-i)*-1:i=Math.PI*2+i),((0,zo.default)(Math.atan2(i,n))+360)%360},Yo=Xo;xt.default=Yo});var Vi=l(Pt=>{"use strict";Object.defineProperty(Pt,"__esModule",{value:!0});Pt.default=void 0;var Ui=Zo(xr());function Zo(t){return t&&t.__esModule?t:{default:t}}var Jo=function(e,r){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Ui.default,n=typeof i=="function"?i(e,r):(0,Ui.default)(e,r);if(isNaN(n))throw new Error("Could not calculate bearing for given points. Check your bearing function");switch(Math.round(n/22.5)){case 1:return"NNE";case 2:return"NE";case 3:return"ENE";case 4:return"E";case 5:return"ESE";case 6:return"SE";case 7:return"SSE";case 8:return"S";case 9:return"SSW";case 10:return"SW";case 11:return"WSW";case 12:return"W";case 13:return"WNW";case 14:return"NW";case 15:return"NNW";default:return"N"}},Qo=Jo;Pt.default=Qo});var Mr=l(Mt=>{"use strict";Object.defineProperty(Mt,"__esModule",{value:!0});Mt.default=void 0;var Pr=Wi($()),Ki=Wi(hr());function Wi(t){return t&&t.__esModule?t:{default:t}}var es=function(e,r,i){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:1,a=(0,Pr.default)(r,e,n),o=(0,Pr.default)(e,i,n),s=(0,Pr.default)(r,i,n),u=Math.acos((0,Ki.default)((a*a+s*s-o*o)/(2*a*s))),p=Math.acos((0,Ki.default)((o*o+s*s-a*a)/(2*o*s)));return u>Math.PI/2?a:p>Math.PI/2?o:Math.sin(u)*a},ts=es;Mt.default=ts});var ji=l(Ot=>{"use strict";Object.defineProperty(Ot,"__esModule",{value:!0});Ot.default=void 0;var $i=St(R()),Bi=St(L()),V=St(N()),rs=St(z());function St(t){return t&&t.__esModule?t:{default:t}}var is=function(e,r){var i=(0,$i.default)(r),n=(0,Bi.default)(r),a=(0,$i.default)(e),o=(0,Bi.default)(e),s=((0,rs.default)(Math.atan2(Math.sin((0,V.default)(n)-(0,V.default)(o))*Math.cos((0,V.default)(i)),Math.cos((0,V.default)(a))*Math.sin((0,V.default)(i))-Math.sin((0,V.default)(a))*Math.cos((0,V.default)(i))*Math.cos((0,V.default)(n)-(0,V.default)(o))))+360)%360;return s},ns=is;Ot.default=ns});var Hi=l(At=>{"use strict";Object.defineProperty(At,"__esModule",{value:!0});At.default=void 0;var as=os($());function os(t){return t&&t.__esModule?t:{default:t}}function wt(t){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?wt=function(r){return typeof r}:wt=function(r){return r&&typeof Symbol=="function"&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r},wt(t)}var ss=function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:as.default;return e.reduce(function(i,n){return wt(i)==="object"&&i.last!==null&&(i.distance+=r(n,i.last)),i.last=n,i},{last:null,distance:0}).distance},us=ss;At.default=us});var Yi=l(Dt=>{"use strict";Object.defineProperty(Dt,"__esModule",{value:!0});Dt.default=void 0;var Gi=Or(R()),zi=Or(L()),Sr=Or(N()),Xi=S();function Or(t){return t&&t.__esModule?t:{default:t}}var ls=function(e,r){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1;i=typeof i<"u"&&!isNaN(i)?i:1;var n=(0,Gi.default)(e),a=(0,zi.default)(e),o=(0,Gi.default)(r),s=(0,zi.default)(r),u=6356752314245e-6,p=1/298.257223563,h=(0,Sr.default)(s-a),v,m,b,O,y,q,$r=Math.atan((1-p)*Math.tan((0,Sr.default)(parseFloat(n)))),Br=Math.atan((1-p)*Math.tan((0,Sr.default)(parseFloat(o)))),Oe=Math.sin($r),we=Math.cos($r),Ae=Math.sin(Br),Z=Math.cos(Br),se=h,jr,Hr=100;do{var $t=Math.sin(se),Bt=Math.cos(se);if(q=Math.sqrt(Z*$t*(Z*$t)+(we*Ae-Oe*Z*Bt)*(we*Ae-Oe*Z*Bt)),q===0)return 0;v=Oe*Ae+we*Z*Bt,m=Math.atan2(q,v),b=we*Z*$t/q,O=1-b*b,y=v-2*Oe*Ae/O,isNaN(y)&&(y=0);var jt=p/16*O*(4+p*(4-3*O));jr=se,se=h+(1-jt)*p*b*(m+jt*q*(y+jt*v*(-1+2*y*y)))}while(Math.abs(se-jr)>1e-12&&--Hr>0);if(Hr===0)return NaN;var W=O*(Xi.earthRadius*Xi.earthRadius-u*u)/(u*u),An=1+W/16384*(4096+W*(-768+W*(320-175*W))),Ht=W/1024*(256+W*(-128+W*(74-47*W))),Dn=Ht*q*(y+Ht/4*(v*(-1+2*y*y)-Ht/6*y*(-3+4*q*q)*(-3+4*y*y))),Rn=u*An*(m-Dn);return Math.round(Rn/i)*i},fs=ls;Dt.default=fs});var Zi=l(Rt=>{"use strict";Object.defineProperty(Rt,"__esModule",{value:!0});Rt.default=void 0;var cs=function(e){if(/^(NNE|NE|NNW|N)$/.test(e))return"N";if(/^(ENE|E|ESE|SE)$/.test(e))return"E";if(/^(SSE|S|SSW|SW)$/.test(e))return"S";if(/^(WSW|W|WNW|NW)$/.test(e))return"W"},ds=cs;Rt.default=ds});var Ji=l(Lt=>{"use strict";Object.defineProperty(Lt,"__esModule",{value:!0});Lt.default=void 0;var ms=ps($());function ps(t){return t&&t.__esModule?t:{default:t}}var gs=function(e,r){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:ms.default,n=i(e,r),a=Number(r.time)-Number(e.time),o=n/a*1e3;return o},hs=gs;Lt.default=hs});var Qi=l(kt=>{"use strict";Object.defineProperty(kt,"__esModule",{value:!0});kt.default=void 0;var wr=vs($());function vs(t){return t&&t.__esModule?t:{default:t}}var ys=function(e,r,i){return(0,wr.default)(r,e)+(0,wr.default)(e,i)===(0,wr.default)(r,i)},bs=ys;kt.default=bs});var tn=l(Tt=>{"use strict";Object.defineProperty(Tt,"__esModule",{value:!0});Tt.default=void 0;var qt=en(R()),k=en(L());function en(t){return t&&t.__esModule?t:{default:t}}var _s=function(e,r){for(var i=!1,n=r.length,a=-1,o=n-1;++a<n;o=a)((0,k.default)(r[a])<=(0,k.default)(e)&&(0,k.default)(e)<(0,k.default)(r[o])||(0,k.default)(r[o])<=(0,k.default)(e)&&(0,k.default)(e)<(0,k.default)(r[a]))&&(0,qt.default)(e)<((0,qt.default)(r[o])-(0,qt.default)(r[a]))*((0,k.default)(e)-(0,k.default)(r[a]))/((0,k.default)(r[o])-(0,k.default)(r[a]))+(0,qt.default)(r[a])&&(i=!i);return i},xs=_s;Tt.default=xs});var rn=l(Ct=>{"use strict";Object.defineProperty(Ct,"__esModule",{value:!0});Ct.default=void 0;var Ps=Ms(Mr());function Ms(t){return t&&t.__esModule?t:{default:t}}var Ss=function(e,r,i,n){return(0,Ps.default)(e,r,i)<n},Os=Ss;Ct.default=Os});var nn=l(Et=>{"use strict";Object.defineProperty(Et,"__esModule",{value:!0});Et.default=void 0;var ws=As($());function As(t){return t&&t.__esModule?t:{default:t}}var Ds=function(e,r,i){var n=.01;return(0,ws.default)(e,r,n)<i},Rs=Ds;Et.default=Rs});var on=l(It=>{"use strict";Object.defineProperty(It,"__esModule",{value:!0});It.default=void 0;function Ls(t,e){return Cs(t)||Ts(t,e)||qs(t,e)||ks()}function ks(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
3
3
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function qs(t,e){if(t){if(typeof t=="string")return an(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set")return Array.from(t);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return an(t,e)}}function an(t,e){(e==null||e>t.length)&&(e=t.length);for(var r=0,i=new Array(e);r<e;r++)i[r]=t[r];return i}function Ts(t,e){if(!(typeof Symbol>"u"||!(Symbol.iterator in Object(t)))){var r=[],i=!0,n=!1,a=void 0;try{for(var o=t[Symbol.iterator](),s;!(i=(s=o.next()).done)&&(r.push(s.value),!(e&&r.length===e));i=!0);}catch(u){n=!0,a=u}finally{try{!i&&o.return!=null&&o.return()}finally{if(n)throw a}}return r}}function Cs(t){if(Array.isArray(t))return t}var Es=function(e){if(!e.startsWith("POLYGON"))throw new Error("Invalid wkt.");var r=e.slice(e.indexOf("(")+2,e.indexOf(")")).split(", "),i=r.map(function(n){var a=n.split(" "),o=Ls(a,2),s=o[0],u=o[1];return{longitude:parseFloat(s),latitude:parseFloat(u)}});return i},Is=Es;It.default=Is});var un=l(c=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var Ns={computeDestinationPoint:!0,convertArea:!0,convertDistance:!0,convertSpeed:!0,decimalToSexagesimal:!0,findNearest:!0,getAreaOfPolygon:!0,getBounds:!0,getBoundsOfDistance:!0,getCenter:!0,getCenterOfBounds:!0,getCompassDirection:!0,getCoordinateKey:!0,getCoordinateKeys:!0,getDistance:!0,getDistanceFromLine:!0,getGreatCircleBearing:!0,getLatitude:!0,getLongitude:!0,getPathLength:!0,getPreciseDistance:!0,getRhumbLineBearing:!0,getRoughCompassDirection:!0,getSpeed:!0,isDecimal:!0,isPointInLine:!0,isPointInPolygon:!0,isPointNearLine:!0,isPointWithinRadius:!0,isSexagesimal:!0,isValidCoordinate:!0,isValidLatitude:!0,isValidLongitude:!0,orderByDistance:!0,sexagesimalToDecimal:!0,toDecimal:!0,toRad:!0,toDeg:!0,wktToPolygon:!0};Object.defineProperty(c,"computeDestinationPoint",{enumerable:!0,get:function(){return Fs.default}});Object.defineProperty(c,"convertArea",{enumerable:!0,get:function(){return Us.default}});Object.defineProperty(c,"convertDistance",{enumerable:!0,get:function(){return Vs.default}});Object.defineProperty(c,"convertSpeed",{enumerable:!0,get:function(){return Ks.default}});Object.defineProperty(c,"decimalToSexagesimal",{enumerable:!0,get:function(){return Ws.default}});Object.defineProperty(c,"findNearest",{enumerable:!0,get:function(){return $s.default}});Object.defineProperty(c,"getAreaOfPolygon",{enumerable:!0,get:function(){return Bs.default}});Object.defineProperty(c,"getBounds",{enumerable:!0,get:function(){return js.default}});Object.defineProperty(c,"getBoundsOfDistance",{enumerable:!0,get:function(){return Hs.default}});Object.defineProperty(c,"getCenter",{enumerable:!0,get:function(){return Gs.default}});Object.defineProperty(c,"getCenterOfBounds",{enumerable:!0,get:function(){return zs.default}});Object.defineProperty(c,"getCompassDirection",{enumerable:!0,get:function(){return Xs.default}});Object.defineProperty(c,"getCoordinateKey",{enumerable:!0,get:function(){return Ys.default}});Object.defineProperty(c,"getCoordinateKeys",{enumerable:!0,get:function(){return Zs.default}});Object.defineProperty(c,"getDistance",{enumerable:!0,get:function(){return Js.default}});Object.defineProperty(c,"getDistanceFromLine",{enumerable:!0,get:function(){return Qs.default}});Object.defineProperty(c,"getGreatCircleBearing",{enumerable:!0,get:function(){return eu.default}});Object.defineProperty(c,"getLatitude",{enumerable:!0,get:function(){return tu.default}});Object.defineProperty(c,"getLongitude",{enumerable:!0,get:function(){return ru.default}});Object.defineProperty(c,"getPathLength",{enumerable:!0,get:function(){return iu.default}});Object.defineProperty(c,"getPreciseDistance",{enumerable:!0,get:function(){return nu.default}});Object.defineProperty(c,"getRhumbLineBearing",{enumerable:!0,get:function(){return au.default}});Object.defineProperty(c,"getRoughCompassDirection",{enumerable:!0,get:function(){return ou.default}});Object.defineProperty(c,"getSpeed",{enumerable:!0,get:function(){return su.default}});Object.defineProperty(c,"isDecimal",{enumerable:!0,get:function(){return uu.default}});Object.defineProperty(c,"isPointInLine",{enumerable:!0,get:function(){return lu.default}});Object.defineProperty(c,"isPointInPolygon",{enumerable:!0,get:function(){return fu.default}});Object.defineProperty(c,"isPointNearLine",{enumerable:!0,get:function(){return cu.default}});Object.defineProperty(c,"isPointWithinRadius",{enumerable:!0,get:function(){return du.default}});Object.defineProperty(c,"isSexagesimal",{enumerable:!0,get:function(){return mu.default}});Object.defineProperty(c,"isValidCoordinate",{enumerable:!0,get:function(){return pu.default}});Object.defineProperty(c,"isValidLatitude",{enumerable:!0,get:function(){return gu.default}});Object.defineProperty(c,"isValidLongitude",{enumerable:!0,get:function(){return hu.default}});Object.defineProperty(c,"orderByDistance",{enumerable:!0,get:function(){return vu.default}});Object.defineProperty(c,"sexagesimalToDecimal",{enumerable:!0,get:function(){return yu.default}});Object.defineProperty(c,"toDecimal",{enumerable:!0,get:function(){return bu.default}});Object.defineProperty(c,"toRad",{enumerable:!0,get:function(){return _u.default}});Object.defineProperty(c,"toDeg",{enumerable:!0,get:function(){return xu.default}});Object.defineProperty(c,"wktToPolygon",{enumerable:!0,get:function(){return Pu.default}});var Fs=d(vi()),Us=d(yi()),Vs=d(bi()),Ks=d(_i()),Ws=d(Mi()),$s=d(Ai()),Bs=d(Li()),js=d(_r()),Hs=d(qi()),Gs=d(Ei()),zs=d(Ii()),Xs=d(Vi()),Ys=d(me()),Zs=d($e()),Js=d($()),Qs=d(Mr()),eu=d(ji()),tu=d(R()),ru=d(L()),iu=d(Hi()),nu=d(Yi()),au=d(xr()),ou=d(Zi()),su=d(Ji()),uu=d(pe()),lu=d(Qi()),fu=d(tn()),cu=d(rn()),du=d(nn()),mu=d(ge()),pu=d(cr()),gu=d(sr()),hu=d(lr()),vu=d(vr()),yu=d(he()),bu=d(ze()),_u=d(N()),xu=d(z()),Pu=d(on()),sn=S();Object.keys(sn).forEach(function(t){t==="default"||t==="__esModule"||Object.prototype.hasOwnProperty.call(Ns,t)||Object.defineProperty(c,t,{enumerable:!0,get:function(){return sn[t]}})});function d(t){return t&&t.__esModule?t:{default:t}}});var ln=l(Lr=>{"use strict";Lr.__esModule=!0;function Dr(t,e){return t*t+e*e}function Mu(t,e){return Dr(t[0]-e[0],t[1]-e[1])}function Su(t,e,r){var i=e[0],n=e[1],a=r[0]-i,o=r[1]-n;if(a!==0||o!==0){var s=((t[0]-i)*a+(t[1]-n)*o)/Dr(a,o);s>1?(i=r[0],n=r[1]):s>0&&(i+=a*s,n+=o*s)}return Dr(t[0]-i,t[1]-n)}function Ou(t,e){for(var r=t[0],i,n=[r],a=1,o=t.length;a<o;a++)i=t[a],Mu(i,r)>e&&(n.push(i),r=i);return r!==i&&n.push(i),n}function Rr(t,e,r,i,n){for(var a=i,o,s=e+1;s<r;s++){var u=Su(t[s],t[e],t[r]);u>a&&(o=s,a=u)}a>i&&(o-e>1&&Rr(t,e,o,i,n),n.push(t[o]),r-o>1&&Rr(t,o,r,i,n))}function wu(t,e){var r=t.length-1,i=[t[0]];return Rr(t,0,r,e,i),i.push(t[r]),i}function Au(t,e,r){if(e===void 0&&(e=1),r===void 0&&(r=!1),t.length<=2)return t;var i=e*e;return t=r?t:Ou(t,i),t=wu(t,i),t}Lr.SimplifyAP=Au});var fn=l(Tr=>{"use strict";Tr.__esModule=!0;function kr(t,e){return t*t+e*e}function Du(t,e){return kr(t.longitude-e.longitude,t.latitude-e.latitude)}function Ru(t,e,r){var i=e.longitude,n=e.latitude,a=r.longitude-i,o=r.latitude-n;if(a!==0||o!==0){var s=((t.longitude-i)*a+(t.latitude-n)*o)/kr(a,o);s>1?(i=r.longitude,n=r.latitude):s>0&&(i+=a*s,n+=o*s)}return kr(t.longitude-i,t.latitude-n)}function Lu(t,e){for(var r=t[0],i,n=[r],a=1,o=t.length;a<o;a++)i=t[a],Du(i,r)>e&&(n.push(i),r=i);return r!==i&&n.push(i),n}function qr(t,e,r,i,n){for(var a=i,o,s=e+1;s<r;s++){var u=Ru(t[s],t[e],t[r]);u>a&&(o=s,a=u)}a>i&&(o-e>1&&qr(t,e,o,i,n),n.push(t[o]),r-o>1&&qr(t,o,r,i,n))}function ku(t,e){var r=t.length-1,i=[t[0]];return qr(t,0,r,e,i),i.push(t[r]),i}function qu(t,e,r){if(e===void 0&&(e=1),r===void 0&&(r=!1),t.length<=2)return t;var i=e*e;return t=r?t:Lu(t,i),t=ku(t,i),t}Tr.SimplifyLL=qu});var cn=l(Ir=>{"use strict";Ir.__esModule=!0;function Cr(t,e){return t*t+e*e}function Tu(t,e){return Cr(t.x-e.x,t.y-e.y)}function Cu(t,e,r){var i=e.x,n=e.y,a=r.x-i,o=r.y-n;if(a!==0||o!==0){var s=((t.x-i)*a+(t.y-n)*o)/Cr(a,o);s>1?(i=r.x,n=r.y):s>0&&(i+=a*s,n+=o*s)}return Cr(t.x-i,t.y-n)}function Eu(t,e){for(var r=t[0],i,n=[r],a=1,o=t.length;a<o;a++)i=t[a],Tu(i,r)>e&&(n.push(i),r=i);return r!==i&&n.push(i),n}function Er(t,e,r,i,n){for(var a=i,o,s=e+1;s<r;s++){var u=Cu(t[s],t[e],t[r]);u>a&&(o=s,a=u)}a>i&&(o-e>1&&Er(t,e,o,i,n),n.push(t[o]),r-o>1&&Er(t,o,r,i,n))}function Iu(t,e){var r=t.length-1,i=[t[0]];return Er(t,0,r,e,i),i.push(t[r]),i}function Nu(t,e,r){if(e===void 0&&(e=1),r===void 0&&(r=!1),t.length<=2)return t;var i=e*e;return t=r?t:Eu(t,i),t=Iu(t,i),t}Ir.Simplify=Nu});var dn=l(be=>{"use strict";be.__esModule=!0;var Fu=ln();be.SimplifyAP=Fu.SimplifyAP;var Uu=fn();be.SimplifyLL=Uu.SimplifyLL;var Vu=cn();be.Simplify=Vu.Simplify});function D(t){return typeof t=="function"}function De(t){let r=t(i=>{Error.call(i),i.stack=new Error().stack});return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var Re=De(t=>function(r){t(this),this.message=r?`${r.length} errors occurred during unsubscription:
4
4
  ${r.map((i,n)=>`${n+1}) ${i.toString()}`).join(`
5
- `)}`:"",this.name="UnsubscriptionError",this.errors=r});function ue(t,e){if(t){let r=t.indexOf(e);0<=r&&t.splice(r,1)}}var E=class t{constructor(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._finalizers=null}unsubscribe(){let e;if(!this.closed){this.closed=!0;let{_parentage:r}=this;if(r)if(this._parentage=null,Array.isArray(r))for(let a of r)a.remove(this);else r.remove(this);let{initialTeardown:i}=this;if(D(i))try{i()}catch(a){e=a instanceof Re?a.errors:[a]}let{_finalizers:n}=this;if(n){this._finalizers=null;for(let a of n)try{Xr(a)}catch(o){e=e??[],o instanceof Re?e=[...e,...o.errors]:e.push(o)}}if(e)throw new Re(e)}}add(e){var r;if(e&&e!==this)if(this.closed)Xr(e);else{if(e instanceof t){if(e.closed||e._hasParent(this))return;e._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(e)}}_hasParent(e){let{_parentage:r}=this;return r===e||Array.isArray(r)&&r.includes(e)}_addParent(e){let{_parentage:r}=this;this._parentage=Array.isArray(r)?(r.push(e),r):r?[r,e]:e}_removeParent(e){let{_parentage:r}=this;r===e?this._parentage=null:Array.isArray(r)&&ue(r,e)}remove(e){let{_finalizers:r}=this;r&&ue(r,e),e instanceof t&&e._removeParent(this)}};E.EMPTY=(()=>{let t=new E;return t.closed=!0,t})();var Gt=E.EMPTY;function Le(t){return t instanceof E||t&&"closed"in t&&D(t.remove)&&D(t.add)&&D(t.unsubscribe)}function Xr(t){D(t)?t():t.unsubscribe()}var T={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var J={setTimeout(t,e,...r){let{delegate:i}=J;return i?.setTimeout?i.setTimeout(t,e,...r):setTimeout(t,e,...r)},clearTimeout(t){let{delegate:e}=J;return(e?.clearTimeout||clearTimeout)(t)},delegate:void 0};function Yr(t){J.setTimeout(()=>{let{onUnhandledError:e}=T;if(e)e(t);else throw t})}function zt(){}var Zr=Xt("C",void 0,void 0);function Jr(t){return Xt("E",void 0,t)}function Qr(t){return Xt("N",t,void 0)}function Xt(t,e,r){return{kind:t,value:e,error:r}}var j=null;function Q(t){if(T.useDeprecatedSynchronousErrorHandling){let e=!j;if(e&&(j={errorThrown:!1,error:null}),t(),e){let{errorThrown:r,error:i}=j;if(j=null,r)throw i}}else t()}function ei(t){T.useDeprecatedSynchronousErrorHandling&&j&&(j.errorThrown=!0,j.error=t)}var le=class extends E{constructor(e){super(),this.isStopped=!1,e?(this.destination=e,Le(e)&&e.add(this)):this.destination=Fn}static create(e,r,i){return new ee(e,r,i)}next(e){this.isStopped?Zt(Qr(e),this):this._next(e)}error(e){this.isStopped?Zt(Jr(e),this):(this.isStopped=!0,this._error(e))}complete(){this.isStopped?Zt(Zr,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(e){this.destination.next(e)}_error(e){try{this.destination.error(e)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}},In=Function.prototype.bind;function Yt(t,e){return In.call(t,e)}var Jt=class{constructor(e){this.partialObserver=e}next(e){let{partialObserver:r}=this;if(r.next)try{r.next(e)}catch(i){ke(i)}}error(e){let{partialObserver:r}=this;if(r.error)try{r.error(e)}catch(i){ke(i)}else ke(e)}complete(){let{partialObserver:e}=this;if(e.complete)try{e.complete()}catch(r){ke(r)}}},ee=class extends le{constructor(e,r,i){super();let n;if(D(e)||!e)n={next:e??void 0,error:r??void 0,complete:i??void 0};else{let a;this&&T.useDeprecatedNextContext?(a=Object.create(e),a.unsubscribe=()=>this.unsubscribe(),n={next:e.next&&Yt(e.next,a),error:e.error&&Yt(e.error,a),complete:e.complete&&Yt(e.complete,a)}):n=e}this.destination=new Jt(n)}};function ke(t){T.useDeprecatedSynchronousErrorHandling?ei(t):Yr(t)}function Nn(t){throw t}function Zt(t,e){let{onStoppedNotification:r}=T;r&&J.setTimeout(()=>r(t,e))}var Fn={closed:!0,next:zt,error:Nn,complete:zt};var ti=typeof Symbol=="function"&&Symbol.observable||"@@observable";function ri(t){return t}function ii(t){return t.length===0?ri:t.length===1?t[0]:function(r){return t.reduce((i,n)=>n(i),r)}}var H=class t{constructor(e){e&&(this._subscribe=e)}lift(e){let r=new t;return r.source=this,r.operator=e,r}subscribe(e,r,i){let n=Vn(e)?e:new ee(e,r,i);return Q(()=>{let{operator:a,source:o}=this;n.add(a?a.call(n,o):o?this._subscribe(n):this._trySubscribe(n))}),n}_trySubscribe(e){try{return this._subscribe(e)}catch(r){e.error(r)}}forEach(e,r){return r=ni(r),new r((i,n)=>{let a=new ee({next:o=>{try{e(o)}catch(s){n(s),a.unsubscribe()}},error:n,complete:i});this.subscribe(a)})}_subscribe(e){var r;return(r=this.source)===null||r===void 0?void 0:r.subscribe(e)}[ti](){return this}pipe(...e){return ii(e)(this)}toPromise(e){return e=ni(e),new e((r,i)=>{let n;this.subscribe(a=>n=a,a=>i(a),()=>r(n))})}};H.create=t=>new H(t);function ni(t){var e;return(e=t??T.Promise)!==null&&e!==void 0?e:Promise}function Un(t){return t&&D(t.next)&&D(t.error)&&D(t.complete)}function Vn(t){return t&&t instanceof le||Un(t)&&Le(t)}var ai=De(t=>function(){t(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"});var I=class extends H{constructor(){super(),this.closed=!1,this.currentObservers=null,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(e){let r=new qe(this,this);return r.operator=e,r}_throwIfClosed(){if(this.closed)throw new ai}next(e){Q(()=>{if(this._throwIfClosed(),!this.isStopped){this.currentObservers||(this.currentObservers=Array.from(this.observers));for(let r of this.currentObservers)r.next(e)}})}error(e){Q(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=e;let{observers:r}=this;for(;r.length;)r.shift().error(e)}})}complete(){Q(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;let{observers:e}=this;for(;e.length;)e.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null}get observed(){var e;return((e=this.observers)===null||e===void 0?void 0:e.length)>0}_trySubscribe(e){return this._throwIfClosed(),super._trySubscribe(e)}_subscribe(e){return this._throwIfClosed(),this._checkFinalizedStatuses(e),this._innerSubscribe(e)}_innerSubscribe(e){let{hasError:r,isStopped:i,observers:n}=this;return r||i?Gt:(this.currentObservers=null,n.push(e),new E(()=>{this.currentObservers=null,ue(n,e)}))}_checkFinalizedStatuses(e){let{hasError:r,thrownError:i,isStopped:n}=this;r?e.error(i):n&&e.complete()}asObservable(){let e=new H;return e.source=this,e}};I.create=(t,e)=>new qe(t,e);var qe=class extends I{constructor(e,r){super(),this.destination=e,this.source=r}next(e){var r,i;(i=(r=this.destination)===null||r===void 0?void 0:r.next)===null||i===void 0||i.call(r,e)}error(e){var r,i;(i=(r=this.destination)===null||r===void 0?void 0:r.error)===null||i===void 0||i.call(r,e)}complete(){var e,r;(r=(e=this.destination)===null||e===void 0?void 0:e.complete)===null||r===void 0||r.call(e)}_subscribe(e){var r,i;return(i=(r=this.source)===null||r===void 0?void 0:r.subscribe(e))!==null&&i!==void 0?i:Gt}};var M=[];for(let t=0;t<256;++t)M.push((t+256).toString(16).slice(1));function oi(t,e=0){return(M[t[e+0]]+M[t[e+1]]+M[t[e+2]]+M[t[e+3]]+"-"+M[t[e+4]]+M[t[e+5]]+"-"+M[t[e+6]]+M[t[e+7]]+"-"+M[t[e+8]]+M[t[e+9]]+"-"+M[t[e+10]]+M[t[e+11]]+M[t[e+12]]+M[t[e+13]]+M[t[e+14]]+M[t[e+15]]).toLowerCase()}var Qt,Kn=new Uint8Array(16);function er(){if(!Qt){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");Qt=crypto.getRandomValues.bind(crypto)}return Qt(Kn)}var Wn=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),tr={randomUUID:Wn};function $n(t,e,r){if(tr.randomUUID&&!e&&!t)return tr.randomUUID();t=t||{};let i=t.random??t.rng?.()??er();if(i.length<16)throw new Error("Random bytes length must be >= 16");if(i[6]=i[6]&15|64,i[8]=i[8]&63|128,e){if(r=r||0,r<0||r+16>e.length)throw new RangeError(`UUID byte range ${r}:${r+15} is out of buffer bounds`);for(let n=0;n<16;++n)e[r+n]=i[n];return e}return oi(i)}var rr=$n;var Te=class{_connect;_close;_error;_message;ws;_filter="";_wsTimeout=2e4;_token="";_playbackMode=!1;onConnect;onClose;onError;onMessage;version=1;endpoint="";selfId="";_source=null;set source(e){this._source||(this._source={}),this._source.label=e}set authToken(e){this._token=e}get connectionTimeout(){return this._wsTimeout}set connectionTimeout(e){this._wsTimeout=e<3e3?3e3:e>6e4?6e4:e}get isOpen(){return!!(this.ws&&this.ws.readyState!=1&&this.ws.readyState!=3)}get filter(){return this._filter}set filter(e){e&&e.indexOf("self")!=-1?this._filter=this.selfId?this.selfId:"":this._filter=e}get playbackMode(){return this._playbackMode}constructor(){this._connect=new I,this.onConnect=this._connect.asObservable(),this._close=new I,this.onClose=this._close.asObservable(),this._error=new I,this.onError=this._error.asObservable(),this._message=new I,this.onMessage=this._message.asObservable()}close(){this.ws&&(this.ws.close(),this.ws=null)}open(e,r,i){if(e=e||this.endpoint,!e)return;let n=e.indexOf("?")==-1?"?":"&";r&&(e+=`${n}subscribe=${r}`),(this._token||i)&&(e+=`${r?"&":"?"}token=${this._token||i}`),this.close(),this.ws=new WebSocket(e),setTimeout(()=>{this.ws&&this.ws.readyState!=1&&this.ws.readyState!=3&&(console.warn(`Connection watchdog expired (${this._wsTimeout/1e3} sec): ${this.ws.readyState}... aborting connection...`),this.close())},this._wsTimeout),this.ws.onopen=a=>{this._connect.next(a)},this.ws.onclose=a=>{this._close.next(a)},this.ws.onerror=a=>{this._error.next(a)},this.ws.onmessage=a=>{this.parseOnMessage(a)}}parseOnMessage(e){let r;if(typeof e.data=="string")try{r=JSON.parse(e.data)}catch{return}this.isHello(r)?(this.selfId=r.self,this._playbackMode=typeof r.startTime<"u",this._message.next(r)):this.isResponse(r)?(typeof r.login<"u"&&typeof r.login.token<"u"&&(this._token=r.login.token),this._message.next(r)):this._filter&&this.isDelta(r)?r.context==this._filter&&this._message.next(r):this._message.next(r)}sendRequest(e){if(typeof e!="object")return"";let r=te.request();return typeof e.login>"u"&&this._token&&(r.token=this._token),Object.keys(e).forEach(n=>{r[n]=e[n]}),this.send(r),r.requestId}put(e,r,i){let n={context:e=="self"?"vessels.self":e,put:{path:r,value:i}};return this.sendRequest(n)}login(e,r){let i={login:{username:e,password:r}};return this.sendRequest(i)}send(e){this.ws&&(typeof e=="object"&&(e=JSON.stringify(e)),this.ws.send(e))}sendUpdate(e="self",r,i){let n=te.updates();this._token&&(n.token=this._token),n.context=e=="self"?"vessels.self":e,this._token&&(n.token=this._token);let a=[];typeof r=="string"&&a.push({path:r,value:i}),typeof r=="object"&&Array.isArray(r)&&(a=r);let o={timestamp:new Date().toISOString(),values:a};this._source&&(o.source=this._source),n.updates.push(o),this.send(n)}subscribe(e="*",r="*",i){let n=te.subscribe();if(this._token&&(n.token=this._token),n.context=e=="self"?"vessels.self":e,this._token&&(n.token=this._token),typeof r=="object"&&Array.isArray(r)&&(n.subscribe=r),typeof r=="string"){let a={};a.path=r,i&&typeof i=="object"&&(i.period&&(a.period=i.period),i.minPeriod&&(a.minPeriod=i.period),i.format&&(i.format=="delta"||i.format=="full")&&(a.format=i.format),i.policy&&(i.policy=="instant"||i.policy=="ideal"||i.policy=="fixed")&&(a.policy=i.policy)),n.subscribe.push(a)}this.send(n)}unsubscribe(e="*",r="*"){let i=te.unsubscribe();this._token&&(i.token=this._token),i.context=e=="self"?"vessels.self":e,this._token&&(i.token=this._token),typeof r=="object"&&Array.isArray(r)&&(i.unsubscribe=r),typeof r=="string"&&i.unsubscribe.push({path:r}),this.send(i)}raiseAlarm(e="*",r,i){let n;typeof r=="string"?n=r.indexOf("notifications.")==-1?`notifications.${r}`:r:n=r,this.put(e,n,i.value)}clearAlarm(e="*",r){let i=r.indexOf("notifications.")==-1?`notifications.${r}`:r;this.put(e,i,null)}isSelf(e){return e.context==this.selfId}isDelta(e){return typeof e.context<"u"}isHello(e){return typeof e.version<"u"&&typeof e.self<"u"}isResponse(e){return typeof e.requestId<"u"}},te=class{static updates(){return{context:null,updates:[]}}static subscribe(){return{context:null,subscribe:[]}}static unsubscribe(){return{context:null,unsubscribe:[]}}static request(){return{requestId:rr()}}},Ce=class{_state;_method=[];_message="";constructor(e,r,i,n){this._message=typeof e<"u"?e:"",this._state=typeof r<"u"?r:"alarm",i&&this._method.push("visual"),n&&this._method.push("sound")}get value(){return{message:this._message,state:this._state,method:this._method}}};var re=class{id;name;mmsi;position=[0,0];positionReceived=!1;positionTimestamp="";state;type={id:-1,name:""};properties={};lastUpdated=new Date;callsignVhf;callsignHf;orientation=0;virtual},fe=class extends re{anchor={maxRadius:null,radius:null,position:null};autopilot={state:null,mode:null,target:null,enabled:!1,default:null,availableActions:[]};buddy=!1;closestApproach={distance:null,timeTo:null};cog;cogTrue=null;cogMagnetic=null;courseApi={arrivalCircle:0,activeRoute:{},nextPoint:{},previousPoint:{}};courseCalcs={};distanceToSelf;environment={mode:null,sun:null};heading;headingTrue=null;headingMagnetic=null;performance={beatAngle:null,gybeAngle:null};racing;registrations={};resourceUpdates=[];sog;track=[];vectors={cog:[]};wind={direction:null,mwd:null,twd:null,tws:null,speedTrue:null,sog:null,awa:null,aws:null};design={airHeight:null,beam:null,draft:{current:null,maximum:null},length:null};destination={name:null,eta:null};flag;port},Ee=class extends re{constructor(){super()}},Ie=class extends re{sog=0;track=[];constructor(){super()}},ce=class extends re{constructor(){super()}},Ne=class extends ce{twd;tws;temperature;constructor(){super()}};var ir={K:{C:t=>t-273.15,F:t=>(t-273.15)*9/5+32},rad:{degree:t=>t*180/Math.PI},deg:{radian:t=>t*.0174532925199433},ratio:{percent:t=>t*100},"m/s":{kn:t=>t*1.94384,"km/h":t=>t*3.6,mph:t=>t*2.2369362920544025,Bf:t=>t/.836^.6666666666666666,fps:t=>t*3.280839895013124},"rad/s":{"deg/s":t=>t*57.2958,rpm:t=>t*9.549296585513723},Hz:{rpm:t=>t*60},m:{fathom:t=>t*.5467468562055768,league:t=>t*.0002071251035625518,kilometer:t=>t*.001,mile:t=>t*.000621371192237334,"naut-mile":t=>t*.0005399568034557236,foot:t=>t*3.280839895013124,yard:t=>t*1.0936132983377078},s:{hour:t=>t*.0002777777777777778,minute:t=>t*.016666666666666666,day:t=>t*11574074074074073e-21,year:t=>t*3168876461541279e-23},foot:{m:t=>t/3.280839895013124}},de={degree:{symbol:"\xBA",name:"Degrees"},radian:{symbol:"rad",name:"Radians"},percent:{symbol:"%",name:"Percent"},kilometer:{symbol:"km",name:"Kilometer"},"naut-mile":{symbol:"nmi",name:"Nautical Mile"},foot:{symbol:"ft",name:"Feet"},yard:{symbol:"yd",name:"Yard"},fathom:{symbol:"fm",name:"Fathom"},hour:{symbol:"hr",name:"Hour"},minute:{symbol:"min",name:"Minute"},F:{symbol:"\xBAF",name:"Fahrenheit"},C:{symbol:"\xBAC",name:"Celcius"}},G=class{static transform(e,r,i){if(!Number.isFinite(e))return null;if(r===i)return e;try{return ir[r][i](e)}catch{throw new Error("Transformation not found!")}}static setSymbol(e,r){e in de&&(de[e].symbol=r??de[e].symbol)}static getSymbol(e){return e in de?de[e].symbol:e}static degreesToRadians(e){return ir.deg.radian(e)}static radiansToDegrees(e=0){return ir.rad.degree(e)}static nauticalMilesToKm(e=0){return e*1.852}static angleToDirection(e,r){let i=Math.PI*2;if(r||(r=0),e||(e=0),!Number.isFinite(r)||!Number.isFinite(e))return null;let n=r+e;return n>i?n-i:n<0?i+n:n}static directionToAngle(e,r){let i=Math.PI*2;if(r||(r=0),e||(e=0),!Number.isFinite(r)||!Number.isFinite(e))return null;let n=r-e,a;if(n>0)a=n>Math.PI?i-n:0-n;else if(n<0){let o=Math.abs(n);a=o>Math.PI?o-i:o}else a=n;return a}};var A=zr(un()),F=class t{static R=6371e3;static rhumbDestination(e,r,i){let n=t.R,a=i/n,o=e[1]*Math.PI/180,s=e[0]*Math.PI/180,u=r,p=a*Math.cos(u),h=o+p,v=a,m=89*Math.PI/180;h>m&&o<m?(v=a*(m-o)/p,h=m):h<-m&&o>-m&&(v=a*(-m-o)/p,h=-m);let b=Math.log(Math.tan(Math.PI/4+h/2)/Math.tan(Math.PI/4+o/2)),O=Math.abs(b)>1e-12?(h-o)/b:Math.cos(o),y=v*Math.sin(u)/O;return[(s+y)*180/Math.PI,h*180/Math.PI]}static destCoordinate(e,r,i){let n=(0,A.computeDestinationPoint)(e,i,G.radiansToDegrees(r));return[n.longitude,n.latitude]}static distanceTo(e,r){return(0,A.getDistance)(e,r)}static routeLength(e){return(0,A.getPathLength)(e)}static routeLegs(e,r){if(e.length<2)return[];let i=[];r?i.push({bearing:(0,A.getGreatCircleBearing)(r,e[0]),distance:t.distanceTo(r,e[0])}):i.push({bearing:0,distance:0});for(let n=1;n<e.length;++n){let a={bearing:(0,A.getGreatCircleBearing)(e[n-1],e[n]),distance:t.distanceTo(e[n-1],e[n])};i.push(a)}return i}static closestForwardPoint(e,r,i){if(e.length<2||!r)return-1;let n={index:-1,distance:-1};for(let a=0;a<e.length;++a){let o=(0,A.getGreatCircleBearing)(r,e[a]),s=Ar.difference(i,o);if(s>-90&&s<90){let u=t.distanceTo(r,e[a]);(n.distance===-1||u<n.distance)&&(n.distance=u,n.index=a)}}return n.index}static centreOfPolygon(e){let r=(0,A.getCenter)(e);return[r.longitude,r.latitude]}static inDLCrossingZone(e,r=170){return Math.abs(e[0])>=r}static inBounds(e,r){return(0,A.isPointInPolygon)(e,[[r[0],r[1]],[r[0],r[3]],[r[2],r[3]],[r[2],r[1]],[r[0],r[1]]])}static calcMapifiedExtent(e,r){let n=111111*Math.cos(G.degreesToRadians(e[1])),a=[0,0,0,0];return a[1]=e[1]+(0-Math.abs(r))/111111,a[3]=e[1]+Math.abs(r)/111111,a[0]=e[0]+(0-Math.abs(r))/n,a[2]=e[0]+Math.abs(r)/n,a}static normaliseCoords(e){if(!Array.isArray(e))return[0,0];if(typeof e[0]=="number"){if(e[0]>180)for(;e[0]>180;)e[0]=e[0]-360;else if(e[0]<-180)for(;e[0]<-180;)e[0]=360+e[0];return e}else if(Array.isArray(e[0]))return e.forEach(r=>r=this.normaliseCoords(r)),e}},Ar=class t{static difference(e,r){let i=360-r,n=e+i,a=t.normalise(n);return a<180?0-a:360-a}static add(e,r){return t.normalise(e+r)}static normalise(e){return e<0?e+360:e>=360?e-360:e}};var Nt=class{action="notification";playback=!1;result=null;self=null;timestamp=new Date().toISOString();sourceRef},ae=class{action;playback=!1;result=null;timestamp;self=null;watchDogAlarm;constructor(){this.action="update"}},Ft=class extends ae{constructor(){super(),this.action="resource"}},Ut=class extends ae{constructor(){super(),this.action="trail"}};var hn=zr(dn());var Ku=["environment.wind.speedTrue","environment.wind.speedOverGround","environment.wind.angleTrueGround","environment.wind.angleTrueWater","environment.wind.directionTrue","environment.wind.directionMagnetic","navigation.courseOverGroundTrue","navigation.courseOverGroundMagnetic","navigation.headingTrue","navigation.headingMagnetic"],_={active:!1,maxMsgIntervals:18,intervalCount:0,msgCount:0,alarm:!1},f,P,vn,Me=[],Wt=[],Nr=!1,Kr,Fr=!1,x={signalk:{},aisState:[]},yn=[0,0,0,0],bn=60,_e=0,w,X={},Y=500,U=!1,_n,K={maxAge:54e4,staleAge:36e4,lastTick:new Date().valueOf(),maxTrack:20},Ur={cogLine:10,aisCogLine:10},xe={trailDuration:24,trailResolution:{lastHour:"5s",next23:"10s",beyond24:"1m"}},B,xn,oe="freeboard-sk";function Wu(){f={self:new fe,aisTargets:new Map,aisStatus:{updated:[],stale:[],expired:[]},paths:{},atons:new Map,aircraft:new Map,sar:new Map,meteo:new Map},f.self.positionReceived=!1,Pn()}function Pn(){w={updated:{},stale:{},expired:{}}}function Vt({action:t,msg:e}){switch(t){case"onConnect":postMessage({action:"open",playback:U,result:e.target.readyState}),_.msgCount=0,_.intervalCount=0,_.alarm=!1,_.active=!0;break;case"onClose":Mn(!1),_.active=!1;break;case"onError":postMessage({action:"error",playback:U,result:"Connection error!"}),_.msgCount=0,_.intervalCount=0,_.active=!1;break;case"onMessage":_.msgCount++,Gu(e);break}}addEventListener("message",({data:t})=>{$u(t)});function $u(t){if(t.cmd)switch(t.cmd){case"open":mn(t.options),ju(t.options);break;case"close":Mn(!0);break;case"subscribe":P.subscribe(t.options.context,t.options.path);break;case"settings":mn(t.options);break;case"alarm":Hu(t.options);break;case"vessel":if(t.options){let e;t.options.context==="self"?e=f.self:e=f.aisTargets.get(t.options.context),e&&t.options.name&&(e.name=t.options.name)}break;case"auth":t.options&&typeof t.options.token<"u"&&(vn=t.options.token);break;case"trail":t.options&&(xe.trailDuration=t.options.trailDuration??24,t.options.trailResolution&&(xe.trailResolution.lastHour=t.options.trailResolution.lastHour??"5s",xe.trailResolution.next23=t.options.trailResolution.next23??"1m",xe.trailResolution.beyond24=t.options.trailResolution.beyond24??"5m")),Bu(xe);break}}function mn(t={config:{}}){t.interval&&typeof t.interval=="number"&&(Y=t.interval,wn(),On(),bn=1/(Y/1e3)*60),U=!!t.playback,t.config&&(typeof t.config.units.preferredPaths<"u"&&(X=t.config.units.preferredPaths),t.config.vessels.aisMaxAge&&typeof t.config.vessels.aisMaxAge=="number"&&(K.maxAge=t.config.vessels.aisMaxAge),t.config.vessels.aisStaleAge&&typeof t.config.vessels.aisStaleAge=="number"&&(K.staleAge=t.config.vessels.aisStaleAge),typeof t.config.signalk.maxRadius=="number"&&(x.signalk=t.config.signalk),typeof t.config.selections.aisState<"u"&&Array.isArray(t.config.selections.aisState)&&(x.aisState=t.config.selections.aisState),Ur=t.config.vessels)}function Mn(t=!1){wn(),Me.forEach(e=>e.unsubscribe()),P&&t&&P.close(),P=null,postMessage({action:"close",result:t,playback:U})}var Kt=!1;function Se(t){if(!Kt)return new Promise((e,r)=>{Kt=!0,fetch(`${t}`).then(i=>{Kt=!1,i.json().then(n=>e(n)).catch(n=>r(n))}).catch(i=>{Kt=!1,r(i)})})}function Sn(){let t=x&&x.signalk&&x.signalk.maxRadius?`?radius=${x.signalk.maxRadius}`:"?radius=10000";Se(Kr+"/tracks"+t).then(e=>{Fr=!0,Object.entries(e).forEach(r=>{if(f.aisTargets.has(r[0])){let i=f.aisTargets.get(r[0]);i.track=r[1].coordinates,Wr(i)}})}).catch(()=>{Fr=!1})}function Bu(t){let e=Kr+"/self/track?",r=[],i=5e-4,n=!0;t.trailDuration>24&&(r.push(Se(`${e}timespan=${t.trailDuration-24}h&resolution=${t.trailResolution.beyond24}&timespanOffset=24`)),r.push(Se(`${e}timespan=23h&resolution=${t.trailResolution.next23}&timespanOffset=1`))),t.trailDuration>1&&t.trailDuration<25&&r.push(Se(`${e}timespan=${t.trailDuration-1}h&resolution=${t.trailResolution.next23}&timespanOffset=1`)),r.push(Se(`${e}timespan=1h&resolution=${t.trailResolution.lastHour}`));let a=[],o=new Ut;o.playback=U,Promise.all(r).then(s=>{let u=0,p=r.length-1,h=60;s.forEach(v=>{if(v.type&&v.type==="MultiLineString"&&v.coordinates&&Array.isArray(v.coordinates))if(u!==p){let m=[];for(v.coordinates.forEach(b=>{m=m.concat(b)}),m=(0,hn.SimplifyAP)(m,i,n);m.length>h;){let b=m.slice(0,h);a.push(b),m=m.slice(h-1),m[0]=[m[0][0]+5e-9,m[0][1]+5e-9]}m.length!==0&&a.push(m)}else a=a.concat(v.coordinates);u++}),o.result=a,postMessage(o)}).catch(()=>{o.result=null,postMessage(o)})}function ju(t){if(P)return;if(!t.url){postMessage({action:"error",result:"Valid options not provided!"});return}let e=t.url.split("/");if(e.pop(),e.push("api"),e[0]=e[0]==="wss:"?"https:":"http:",Kr=e.join("/"),Wu(),P=new Te,Me.push(P.onConnect.subscribe(r=>Vt({action:"onConnect",msg:r}))),Me.push(P.onClose.subscribe(r=>Vt({action:"onClose",msg:r}))),Me.push(P.onError.subscribe(r=>Vt({action:"onError",msg:r}))),Me.push(P.onMessage.subscribe(r=>Vt({action:"onMessage",msg:r}))),P.authToken=vn,t.playback){let r=t.playbackOptions.startTime?`?startTime=${t.playbackOptions.startTime}`:null,i=t.playbackOptions.playbackRate?`playbackRate=${t.playbackOptions.playbackRate}`:null;i=i?r?"&"+i:"?"+i:null;let n=`${t.url}${r||""}${i||""}`;P.open(n,t.playbackOptions.subscribe,t.token)}else P.open(t.url,t.subscribe,t.token),Sn()}function Hu(t){let e=t.type.indexOf("notifications.")===-1?`notifications.${t.type}`:t.type;t.raise?P.raiseAlarm("self",e,new Ce(t.message,t.state,!0,!0)):P.clearAlarm("self",e)}function Gu(t){P.isHello(t)?(postMessage({action:"hello",result:t,self:t.self,playback:U}),Y&&On()):P.isDelta(t)?(Nr=!0,t.updates.forEach(e=>{e.values&&(B=e.$source,xn=e.timestamp,e.values.forEach(r=>{if(_n=e.timestamp,!!t.context)switch(t.context.split(".")[0]){case"shore":case"atons":x?.signalk.atons&&Zu(t.context,r),Pe(t.context,f.atons,x?.signalk.atons);break;case"sar":x?.signalk.sar&&Ju(t.context,r),Pe(t.context,f.sar,x?.signalk.sar);break;case"aircraft":x?.signalk.aircraft&&el(t.context,r),Pe(t.context,f.aircraft,x?.signalk.aircraft);break;case"meteo":x?.signalk.meteo&&(Qu(t.context,r),gn(r)),Pe(t.context,f.meteo,x?.signalk.meteo);break;case"vessels":if(P.isSelf(t))f.self.id||(f.self.id=t.context),pn(f.self,r,!0),gn(r);else{if(x?.signalk.vessels){let i=zu(t.context);pn(i,r)}Pe(t.context,f.aisTargets,x?.signalk.vessels,x?.aisState)}break}}))}),Vr()):P.isResponse(t)&&postMessage({action:"response",result:t})}function Pe(t,e,r=!0,i=[]){if(r){let n=e.get(t);n&&i.includes(n?.state)&&(w.expired[t]=!0,n=null),n&&x.signalk.maxRadius?n.positionReceived&&F.inBounds(n.position,yn)?w.updated[t]=!0:(e.delete(t),w.expired[t]=!0):w.updated[t]=!0}else e.size!==0&&(e.forEach((n,a)=>{w.expired[a]=!0}),e.clear())}function Vr(t=!1){if(!Y||t){let e=new ae;e.watchDogAlarm=_.alarm,e.playback=U,f.aisStatus.updated=Object.keys(w.updated),f.aisStatus.stale=Object.keys(w.stale),f.aisStatus.expired=Object.keys(w.expired),e.result=f,e.timestamp=U?_n:f.self.lastUpdated.toISOString(),postMessage(e),Pn(),f.self.resourceUpdates=[],Yu(),_e===0&&f.self.positionReceived&&x?.signalk.maxRadius&&(yn=F.calcMapifiedExtent(f.self.position,x.signalk.maxRadius),_e++),_e=_e>=bn?0:_e+1}}function On(){Y&&typeof Y=="number"&&Wt.push(setInterval(()=>{_.active&&!_.msgCount?(_.intervalCount=_.intervalCount+1,_.intervalCount>=_.maxMsgIntervals&&(_.intervalCount=0,_.alarm=!0,Vr(!0))):(_.intervalCount=0,_.msgCount=0,_.alarm=!1),Nr&&(Vr(!0),Nr=!1)},Y)),Wt.push(setInterval(()=>{Fr&&Sn()},6e4))}function wn(){Wt.forEach(t=>clearInterval(t)),Wt=[]}function zu(t){if(!f.aisTargets.has(t)){let e=new fe;e.id=t,e.position=null,f.aisTargets.set(t,e)}return f.aisTargets.get(t)}function pn(t,e,r=!1){if(r){if(t.lastUpdated=new Date,e.path.startsWith("resources."))t.resourceUpdates.push(e),Xu(e);else if(e.path.startsWith("navigation.racing"))t.properties[e.path]=e.value;else if(e.path==="performance.beatAngle")t.performance.beatAngle=e.value;else if(e.path==="performance.gybeAngle")t.performance.gybeAngle=e.value;else if(e.path.startsWith("navigation.course."))if(e.path.startsWith("navigation.course.calcValues.")){let a=e.path.split(".").slice(3).join(".");t.courseCalcs[a]=e.value}else e.path.includes("activeRoute")?t.courseApi.activeRoute=e.value:e.path.includes("nextPoint")?t.courseApi.nextPoint=e.value:e.path.includes("previousPoint")?t.courseApi.previousPoint=e.value:e.path.includes("arrivalCircle")&&(t.courseApi.arrivalCircle=e.value);let n=e.path.indexOf("course")!==-1?e.path.split(".").slice(0,2).join("."):e.path;Ku.indexOf(n)!==-1&&(f.paths[n]=null)}else e.path==="navigation.distanceToSelf"&&(t.distanceToSelf=e.value),e.path==="navigation.closestApproach"&&(t.closestApproach=e.value);if(e.path==="")typeof e.value.name<"u"&&(t.name=e.value.name),typeof e.value.mmsi<"u"&&(t.mmsi=e.value.mmsi,t.lastUpdated=new Date),typeof e.value.registrations<"u"&&(t.registrations=e.value.registrations),typeof e.value.buddy<"u"&&(t.buddy=e.value.buddy),typeof e.value.communication<"u"&&(t.callsignVhf=e.value.communication.callsignVhf??"",t.callsignHf=e.value.communication.callsignHf??"");else if(e.path==="communication.callsignVhf")t.callsignVhf=e.value;else if(e.path==="communication.callsignHf")t.callsignHf=e.value;else if(e.path==="design.aisShipType")t.type=e.value;else if(e.path==="navigation.position"&&e.value){if(typeof e.value.latitude>"u"||typeof e.value.longitude>"u")return;t.position=F.normaliseCoords([e.value.longitude,e.value.latitude]),t.positionReceived=!0,t.positionTimestamp=xn??"",t.lastUpdated=new Date,r||Wr(t)}else e.path==="navigation.state"?t.state=e.value:e.path==="navigation.speedOverGround"?t.sog=e.value:e.path==="environment.mode"?t.environment.mode=e.value:e.path==="environment.sun"?t.environment.sun=e.value:e.path==="environment.wind.angleApparent"?t.wind.awa=e.value:e.path==="environment.wind.speedApparent"?t.wind.aws=e.value:e.path==="environment.wind.speedTrue"?t.wind.speedTrue=e.value:e.path==="environment.wind.speedOverGround"?t.wind.sog=e.value:e.path==="environment.wind.directionTrue"?t.wind.twd=e.value:e.path==="environment.wind.directionMagnetic"?t.wind.mwd=e.value:e.path==="navigation.anchor.position"?t.anchor.position=e.value:e.path==="navigation.anchor.maxRadius"?t.anchor.maxRadius=e.value:e.path==="navigation.anchor.currentRadius"?t.anchor.radius=e.value:e.path==="steering.autopilot.state"&&B===oe?t.autopilot.state=e.value:e.path==="steering.autopilot.mode"&&B===oe?t.autopilot.mode=e.value:e.path==="steering.autopilot.target"&&B===oe?t.autopilot.target=e.value:e.path==="steering.autopilot.engaged"&&B===oe?t.autopilot.enabled=e.value:e.path==="steering.autopilot.defaultPilot"?(t.autopilot.default=e.value,oe=e.value):e.path==="steering.autopilot.availableActions"&&B===oe?t.autopilot.availableActions=e.value??[]:e.path==="navigation.courseOverGroundTrue"?t.cogTrue=e.value:e.path==="navigation.courseOverGroundMagnetic"?t.cogMagnetic=e.value:e.path==="navigation.headingTrue"?t.headingTrue=e.value:e.path==="navigation.headingMagnetic"&&(t.headingMagnetic=e.value);typeof X.heading<"u"&&e.path===X.heading&&(t.orientation=e.value),typeof X.tws<"u"&&e.path===X.tws&&(t.wind.tws=e.value),typeof X.twd<"u"&&e.path===X.twd&&(t.wind.direction=e.path==="environment.wind.angleTrueGround"||e.path==="environment.wind.angleTrueWater"?G.angleToDirection(e.value,t.orientation??0):e.value);let i=t.cogTrue??t.cogMagnetic??void 0;if(typeof i<"u"&&t.position){let n=r?Ur.cogLine:Ur.aisCogLine,a=(t.sog??0)*(n*60);t.vectors.cog=[t.position,F.rhumbDestination(t.position,i,a)]}}function Xu(t){let e=new Ft;e.playback=U,e.result={path:t.path,value:t.value,sourceRef:B},postMessage(e)}function gn(t){if(t.path.includes("notifications.")){let e=new Nt;e.playback=U,e.result={path:t.path,value:t.value,sourceRef:B},postMessage(e)}}function Yu(){let t=new Date().valueOf();f.aisTargets.forEach((e,r)=>{e.lastUpdated.valueOf()<t-K.maxAge?(w.expired[r]=!0,f.aisTargets.delete(r)):e.lastUpdated.valueOf()<t-K.staleAge&&(w.stale[r]=!0)}),f.aircraft.forEach((e,r)=>{e.lastUpdated.valueOf()<t-K.maxAge?(w.expired[r]=!0,f.aircraft.delete(r)):e.lastUpdated.valueOf()<t-K.staleAge&&(w.stale[r]=!0)}),f.sar.forEach((e,r)=>{e.lastUpdated.valueOf()<t-K.maxAge?(w.expired[r]=!0,f.sar.delete(r)):e.lastUpdated.valueOf()<t-K.staleAge&&(w.stale[r]=!0)})}function Zu(t,e){let r=!1;if(t.indexOf("shore.basestations")!==-1&&(r=!0),!f.atons.has(t)){let n=new ce;n.id=t,n.position=null,r&&(n.type.id=-1,n.type.name="Basestation"),f.atons.set(t,n)}let i=f.atons.get(t);return e.path===""?(typeof e.value.name<"u"&&(i.name=e.value.name),typeof e.value.mmsi<"u"&&(i.mmsi=e.value.mmsi),typeof e.value.atonType<"u"&&(i.type=e.value.atonType)):e.path==="atonType"?i.type=e.value:e.path==="virtual"?i.virtual=e.value:e.path==="navigation.position"?(i.position=[e.value.longitude,e.value.latitude],i.positionReceived=!0):i.properties[e.path]=e.value,t}function Ju(t,e){if(!f.sar.has(t)){let i=new Ee;i.id=t,i.position=null,i.type.id=-1,i.type.name="SaR Beacon",f.sar.set(t,i)}let r=f.sar.get(t);e.path===""?(typeof e.value.name<"u"&&(r.name=e.value.name),typeof e.value.mmsi<"u"&&(r.mmsi=e.value.mmsi),typeof e.value.communication<"u"&&(r.callsignVhf=e.value.communication.callsignVhf??"",r.callsignHf=e.value.communication.callsignHf??"")):e.path==="communication.callsignVhf"?r.callsignVhf=e.value:e.path==="communication.callsignHf"?r.callsignHf=e.value:e.path==="navigation.position"&&e.value&&(r.position=F.normaliseCoords([e.value.longitude,e.value.latitude]),r.positionReceived=!0)}function Qu(t,e){if(!f.meteo.has(t)){let i=new Ne;i.id=t,i.position=null,i.type.id=-1,i.type.name="Weather Station",f.meteo.set(t,i)}let r=f.meteo.get(t);if(e.path===""){if(typeof e.value.name<"u"&&(r.name=e.value.name),typeof e.value.mmsi<"u"){let i=t.split(":").slice(-2);r.mmsi=i.length===2?`${i[0]}:${i[1]}`:e.value.mmsi}typeof e.value.communication<"u"&&(r.callsignVhf=e.value.communication.callsignVhf??"",r.callsignHf=e.value.communication.callsignHf??"")}else e.path==="communication.callsignVhf"?r.callsignVhf=e.value:e.path==="communication.callsignHf"?r.callsignHf=e.value:e.path==="environment.outside.temperature"?r.temperature=e.value:e.path==="environment.wind.directionTrue"?r.twd=e.value:e.path==="environment.wind.averageSpeed"?r.tws=e.value:e.path==="navigation.position"&&e.value&&(r.position=F.normaliseCoords([e.value.longitude,e.value.latitude]),r.positionReceived=!0)}function el(t,e){if(!f.aircraft.has(t)){let i=new Ie;i.id=t,i.position=null,f.aircraft.set(t,i)}let r=f.aircraft.get(t);e.path===""?(typeof e.value.name<"u"&&(r.name=e.value.name),typeof e.value.mmsi<"u"&&(r.mmsi=e.value.mmsi),typeof e.value.communication<"u"&&(r.callsignVhf=e.value.communication.callsignVhf??"",r.callsignHf=e.value.communication.callsignHf??"")):e.path==="communication.callsignVhf"?r.callsignVhf=e.value:e.path==="communication.callsignHf"?r.callsignHf=e.value:e.path==="navigation.position"&&e.value?(r.position=F.normaliseCoords([e.value.longitude,e.value.latitude]),r.positionReceived=!0,Wr(r)):e.path==="navigation.courseOverGroundTrue"?r.orientation=e.value:e.path==="navigation.speedOverGround"&&(r.sog=e.value)}function Wr(t){if(t.track&&t.track.length===0)t.track.push([t.position]);else{let e=t.track[t.track.length-1].length,r=t.track[t.track.length-1][e-1];r[0]!==t.position[0]&&r[1]!==t.position[1]&&t.track[t.track.length-1].push(t.position)}t.track[t.track.length-1]=t.track[t.track.length-1].slice(0-K.maxTrack)}
5
+ `)}`:"",this.name="UnsubscriptionError",this.errors=r});function ue(t,e){if(t){let r=t.indexOf(e);0<=r&&t.splice(r,1)}}var E=class t{constructor(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._finalizers=null}unsubscribe(){let e;if(!this.closed){this.closed=!0;let{_parentage:r}=this;if(r)if(this._parentage=null,Array.isArray(r))for(let a of r)a.remove(this);else r.remove(this);let{initialTeardown:i}=this;if(D(i))try{i()}catch(a){e=a instanceof Re?a.errors:[a]}let{_finalizers:n}=this;if(n){this._finalizers=null;for(let a of n)try{Xr(a)}catch(o){e=e??[],o instanceof Re?e=[...e,...o.errors]:e.push(o)}}if(e)throw new Re(e)}}add(e){var r;if(e&&e!==this)if(this.closed)Xr(e);else{if(e instanceof t){if(e.closed||e._hasParent(this))return;e._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(e)}}_hasParent(e){let{_parentage:r}=this;return r===e||Array.isArray(r)&&r.includes(e)}_addParent(e){let{_parentage:r}=this;this._parentage=Array.isArray(r)?(r.push(e),r):r?[r,e]:e}_removeParent(e){let{_parentage:r}=this;r===e?this._parentage=null:Array.isArray(r)&&ue(r,e)}remove(e){let{_finalizers:r}=this;r&&ue(r,e),e instanceof t&&e._removeParent(this)}};E.EMPTY=(()=>{let t=new E;return t.closed=!0,t})();var Gt=E.EMPTY;function Le(t){return t instanceof E||t&&"closed"in t&&D(t.remove)&&D(t.add)&&D(t.unsubscribe)}function Xr(t){D(t)?t():t.unsubscribe()}var T={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var J={setTimeout(t,e,...r){let{delegate:i}=J;return i?.setTimeout?i.setTimeout(t,e,...r):setTimeout(t,e,...r)},clearTimeout(t){let{delegate:e}=J;return(e?.clearTimeout||clearTimeout)(t)},delegate:void 0};function Yr(t){J.setTimeout(()=>{let{onUnhandledError:e}=T;if(e)e(t);else throw t})}function zt(){}var Zr=Xt("C",void 0,void 0);function Jr(t){return Xt("E",void 0,t)}function Qr(t){return Xt("N",t,void 0)}function Xt(t,e,r){return{kind:t,value:e,error:r}}var j=null;function Q(t){if(T.useDeprecatedSynchronousErrorHandling){let e=!j;if(e&&(j={errorThrown:!1,error:null}),t(),e){let{errorThrown:r,error:i}=j;if(j=null,r)throw i}}else t()}function ei(t){T.useDeprecatedSynchronousErrorHandling&&j&&(j.errorThrown=!0,j.error=t)}var le=class extends E{constructor(e){super(),this.isStopped=!1,e?(this.destination=e,Le(e)&&e.add(this)):this.destination=Fn}static create(e,r,i){return new ee(e,r,i)}next(e){this.isStopped?Zt(Qr(e),this):this._next(e)}error(e){this.isStopped?Zt(Jr(e),this):(this.isStopped=!0,this._error(e))}complete(){this.isStopped?Zt(Zr,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(e){this.destination.next(e)}_error(e){try{this.destination.error(e)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}},In=Function.prototype.bind;function Yt(t,e){return In.call(t,e)}var Jt=class{constructor(e){this.partialObserver=e}next(e){let{partialObserver:r}=this;if(r.next)try{r.next(e)}catch(i){ke(i)}}error(e){let{partialObserver:r}=this;if(r.error)try{r.error(e)}catch(i){ke(i)}else ke(e)}complete(){let{partialObserver:e}=this;if(e.complete)try{e.complete()}catch(r){ke(r)}}},ee=class extends le{constructor(e,r,i){super();let n;if(D(e)||!e)n={next:e??void 0,error:r??void 0,complete:i??void 0};else{let a;this&&T.useDeprecatedNextContext?(a=Object.create(e),a.unsubscribe=()=>this.unsubscribe(),n={next:e.next&&Yt(e.next,a),error:e.error&&Yt(e.error,a),complete:e.complete&&Yt(e.complete,a)}):n=e}this.destination=new Jt(n)}};function ke(t){T.useDeprecatedSynchronousErrorHandling?ei(t):Yr(t)}function Nn(t){throw t}function Zt(t,e){let{onStoppedNotification:r}=T;r&&J.setTimeout(()=>r(t,e))}var Fn={closed:!0,next:zt,error:Nn,complete:zt};var ti=typeof Symbol=="function"&&Symbol.observable||"@@observable";function ri(t){return t}function ii(t){return t.length===0?ri:t.length===1?t[0]:function(r){return t.reduce((i,n)=>n(i),r)}}var H=class t{constructor(e){e&&(this._subscribe=e)}lift(e){let r=new t;return r.source=this,r.operator=e,r}subscribe(e,r,i){let n=Vn(e)?e:new ee(e,r,i);return Q(()=>{let{operator:a,source:o}=this;n.add(a?a.call(n,o):o?this._subscribe(n):this._trySubscribe(n))}),n}_trySubscribe(e){try{return this._subscribe(e)}catch(r){e.error(r)}}forEach(e,r){return r=ni(r),new r((i,n)=>{let a=new ee({next:o=>{try{e(o)}catch(s){n(s),a.unsubscribe()}},error:n,complete:i});this.subscribe(a)})}_subscribe(e){var r;return(r=this.source)===null||r===void 0?void 0:r.subscribe(e)}[ti](){return this}pipe(...e){return ii(e)(this)}toPromise(e){return e=ni(e),new e((r,i)=>{let n;this.subscribe(a=>n=a,a=>i(a),()=>r(n))})}};H.create=t=>new H(t);function ni(t){var e;return(e=t??T.Promise)!==null&&e!==void 0?e:Promise}function Un(t){return t&&D(t.next)&&D(t.error)&&D(t.complete)}function Vn(t){return t&&t instanceof le||Un(t)&&Le(t)}var ai=De(t=>function(){t(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"});var I=class extends H{constructor(){super(),this.closed=!1,this.currentObservers=null,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(e){let r=new qe(this,this);return r.operator=e,r}_throwIfClosed(){if(this.closed)throw new ai}next(e){Q(()=>{if(this._throwIfClosed(),!this.isStopped){this.currentObservers||(this.currentObservers=Array.from(this.observers));for(let r of this.currentObservers)r.next(e)}})}error(e){Q(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=e;let{observers:r}=this;for(;r.length;)r.shift().error(e)}})}complete(){Q(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;let{observers:e}=this;for(;e.length;)e.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null}get observed(){var e;return((e=this.observers)===null||e===void 0?void 0:e.length)>0}_trySubscribe(e){return this._throwIfClosed(),super._trySubscribe(e)}_subscribe(e){return this._throwIfClosed(),this._checkFinalizedStatuses(e),this._innerSubscribe(e)}_innerSubscribe(e){let{hasError:r,isStopped:i,observers:n}=this;return r||i?Gt:(this.currentObservers=null,n.push(e),new E(()=>{this.currentObservers=null,ue(n,e)}))}_checkFinalizedStatuses(e){let{hasError:r,thrownError:i,isStopped:n}=this;r?e.error(i):n&&e.complete()}asObservable(){let e=new H;return e.source=this,e}};I.create=(t,e)=>new qe(t,e);var qe=class extends I{constructor(e,r){super(),this.destination=e,this.source=r}next(e){var r,i;(i=(r=this.destination)===null||r===void 0?void 0:r.next)===null||i===void 0||i.call(r,e)}error(e){var r,i;(i=(r=this.destination)===null||r===void 0?void 0:r.error)===null||i===void 0||i.call(r,e)}complete(){var e,r;(r=(e=this.destination)===null||e===void 0?void 0:e.complete)===null||r===void 0||r.call(e)}_subscribe(e){var r,i;return(i=(r=this.source)===null||r===void 0?void 0:r.subscribe(e))!==null&&i!==void 0?i:Gt}};var M=[];for(let t=0;t<256;++t)M.push((t+256).toString(16).slice(1));function oi(t,e=0){return(M[t[e+0]]+M[t[e+1]]+M[t[e+2]]+M[t[e+3]]+"-"+M[t[e+4]]+M[t[e+5]]+"-"+M[t[e+6]]+M[t[e+7]]+"-"+M[t[e+8]]+M[t[e+9]]+"-"+M[t[e+10]]+M[t[e+11]]+M[t[e+12]]+M[t[e+13]]+M[t[e+14]]+M[t[e+15]]).toLowerCase()}var Qt,Kn=new Uint8Array(16);function er(){if(!Qt){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");Qt=crypto.getRandomValues.bind(crypto)}return Qt(Kn)}var Wn=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),tr={randomUUID:Wn};function $n(t,e,r){if(tr.randomUUID&&!e&&!t)return tr.randomUUID();t=t||{};let i=t.random??t.rng?.()??er();if(i.length<16)throw new Error("Random bytes length must be >= 16");if(i[6]=i[6]&15|64,i[8]=i[8]&63|128,e){if(r=r||0,r<0||r+16>e.length)throw new RangeError(`UUID byte range ${r}:${r+15} is out of buffer bounds`);for(let n=0;n<16;++n)e[r+n]=i[n];return e}return oi(i)}var rr=$n;var Te=class{_connect;_close;_error;_message;ws;_filter="";_wsTimeout=2e4;_token="";_playbackMode=!1;onConnect;onClose;onError;onMessage;version=1;endpoint="";selfId="";_source=null;set source(e){this._source||(this._source={}),this._source.label=e}set authToken(e){this._token=e}get connectionTimeout(){return this._wsTimeout}set connectionTimeout(e){this._wsTimeout=e<3e3?3e3:e>6e4?6e4:e}get isOpen(){return!!(this.ws&&this.ws.readyState!=1&&this.ws.readyState!=3)}get filter(){return this._filter}set filter(e){e&&e.indexOf("self")!=-1?this._filter=this.selfId?this.selfId:"":this._filter=e}get playbackMode(){return this._playbackMode}constructor(){this._connect=new I,this.onConnect=this._connect.asObservable(),this._close=new I,this.onClose=this._close.asObservable(),this._error=new I,this.onError=this._error.asObservable(),this._message=new I,this.onMessage=this._message.asObservable()}close(){this.ws&&(this.ws.close(),this.ws=null)}open(e,r,i){if(e=e||this.endpoint,!e)return;let n=e.indexOf("?")==-1?"?":"&";r&&(e+=`${n}subscribe=${r}`),(this._token||i)&&(e+=`${r?"&":"?"}token=${this._token||i}`),this.close(),this.ws=new WebSocket(e),setTimeout(()=>{this.ws&&this.ws.readyState!=1&&this.ws.readyState!=3&&(console.warn(`Connection watchdog expired (${this._wsTimeout/1e3} sec): ${this.ws.readyState}... aborting connection...`),this.close())},this._wsTimeout),this.ws.onopen=a=>{this._connect.next(a)},this.ws.onclose=a=>{this._close.next(a)},this.ws.onerror=a=>{this._error.next(a)},this.ws.onmessage=a=>{this.parseOnMessage(a)}}parseOnMessage(e){let r;if(typeof e.data=="string")try{r=JSON.parse(e.data)}catch{return}this.isHello(r)?(this.selfId=r.self,this._playbackMode=typeof r.startTime<"u",this._message.next(r)):this.isResponse(r)?(typeof r.login<"u"&&typeof r.login.token<"u"&&(this._token=r.login.token),this._message.next(r)):this._filter&&this.isDelta(r)?r.context==this._filter&&this._message.next(r):this._message.next(r)}sendRequest(e){if(typeof e!="object")return"";let r=te.request();return typeof e.login>"u"&&this._token&&(r.token=this._token),Object.keys(e).forEach(n=>{r[n]=e[n]}),this.send(r),r.requestId}put(e,r,i){let n={context:e=="self"?"vessels.self":e,put:{path:r,value:i}};return this.sendRequest(n)}login(e,r){let i={login:{username:e,password:r}};return this.sendRequest(i)}send(e){this.ws&&(typeof e=="object"&&(e=JSON.stringify(e)),this.ws.send(e))}sendUpdate(e="self",r,i){let n=te.updates();this._token&&(n.token=this._token),n.context=e=="self"?"vessels.self":e,this._token&&(n.token=this._token);let a=[];typeof r=="string"&&a.push({path:r,value:i}),typeof r=="object"&&Array.isArray(r)&&(a=r);let o={timestamp:new Date().toISOString(),values:a};this._source&&(o.source=this._source),n.updates.push(o),this.send(n)}subscribe(e="*",r="*",i){let n=te.subscribe();if(this._token&&(n.token=this._token),n.context=e=="self"?"vessels.self":e,this._token&&(n.token=this._token),typeof r=="object"&&Array.isArray(r)&&(n.subscribe=r),typeof r=="string"){let a={};a.path=r,i&&typeof i=="object"&&(i.period&&(a.period=i.period),i.minPeriod&&(a.minPeriod=i.period),i.format&&(i.format=="delta"||i.format=="full")&&(a.format=i.format),i.policy&&(i.policy=="instant"||i.policy=="ideal"||i.policy=="fixed")&&(a.policy=i.policy)),n.subscribe.push(a)}this.send(n)}unsubscribe(e="*",r="*"){let i=te.unsubscribe();this._token&&(i.token=this._token),i.context=e=="self"?"vessels.self":e,this._token&&(i.token=this._token),typeof r=="object"&&Array.isArray(r)&&(i.unsubscribe=r),typeof r=="string"&&i.unsubscribe.push({path:r}),this.send(i)}raiseAlarm(e="*",r,i){let n;typeof r=="string"?n=r.indexOf("notifications.")==-1?`notifications.${r}`:r:n=r,this.put(e,n,i.value)}clearAlarm(e="*",r){let i=r.indexOf("notifications.")==-1?`notifications.${r}`:r;this.put(e,i,null)}isSelf(e){return e.context==this.selfId}isDelta(e){return typeof e.context<"u"}isHello(e){return typeof e.version<"u"&&typeof e.self<"u"}isResponse(e){return typeof e.requestId<"u"}},te=class{static updates(){return{context:null,updates:[]}}static subscribe(){return{context:null,subscribe:[]}}static unsubscribe(){return{context:null,unsubscribe:[]}}static request(){return{requestId:rr()}}},Ce=class{_state;_method=[];_message="";constructor(e,r,i,n){this._message=typeof e<"u"?e:"",this._state=typeof r<"u"?r:"alarm",i&&this._method.push("visual"),n&&this._method.push("sound")}get value(){return{message:this._message,state:this._state,method:this._method}}};var re=class{id;name;mmsi;position=[0,0];positionReceived=!1;positionTimestamp="";state;type={id:-1,name:""};properties={};lastUpdated=new Date;callsignVhf;callsignHf;orientation=0;virtual},fe=class extends re{anchor={maxRadius:null,radius:null,position:null};autopilot={state:null,mode:null,target:null,enabled:!1,default:null,availableActions:[]};buddy=!1;closestApproach={distance:null,timeTo:null};cog;cogTrue=null;cogMagnetic=null;courseApi={arrivalCircle:0,activeRoute:{},nextPoint:{},previousPoint:{}};courseCalcs={};distanceToSelf;environment={mode:null,sun:null};heading;headingTrue=null;headingMagnetic=null;performance={beatAngle:null,gybeAngle:null};racing;registrations={};resourceUpdates=[];sog;track=[];vectors={cog:[]};wind={direction:null,mwd:null,twd:null,tws:null,speedTrue:null,sog:null,awa:null,aws:null};design={airHeight:null,beam:null,draft:{current:null,maximum:null},length:null};destination={name:null,eta:null};flag;port},Ee=class extends re{constructor(){super()}},Ie=class extends re{sog=0;track=[];constructor(){super()}},ce=class extends re{constructor(){super()}},Ne=class extends ce{twd;tws;temperature;constructor(){super()}};var ir={K:{C:t=>t-273.15,F:t=>(t-273.15)*9/5+32},rad:{degree:t=>t*180/Math.PI},deg:{radian:t=>t*.0174532925199433},ratio:{percent:t=>t*100},"m/s":{kn:t=>t*1.94384,"km/h":t=>t*3.6,mph:t=>t*2.2369362920544025,Bf:t=>t/.836^.6666666666666666,fps:t=>t*3.280839895013124},"rad/s":{"deg/s":t=>t*57.2958,rpm:t=>t*9.549296585513723},Hz:{rpm:t=>t*60},m:{fathom:t=>t*.5467468562055768,league:t=>t*.0002071251035625518,kilometer:t=>t*.001,mile:t=>t*.000621371192237334,"naut-mile":t=>t*.0005399568034557236,foot:t=>t*3.280839895013124,yard:t=>t*1.0936132983377078},s:{hour:t=>t*.0002777777777777778,minute:t=>t*.016666666666666666,day:t=>t*11574074074074073e-21,year:t=>t*3168876461541279e-23},foot:{m:t=>t/3.280839895013124}},de={degree:{symbol:"\xBA",name:"Degrees"},radian:{symbol:"rad",name:"Radians"},percent:{symbol:"%",name:"Percent"},kilometer:{symbol:"km",name:"Kilometer"},"naut-mile":{symbol:"nmi",name:"Nautical Mile"},foot:{symbol:"ft",name:"Feet"},yard:{symbol:"yd",name:"Yard"},fathom:{symbol:"fm",name:"Fathom"},hour:{symbol:"hr",name:"Hour"},minute:{symbol:"min",name:"Minute"},F:{symbol:"\xBAF",name:"Fahrenheit"},C:{symbol:"\xBAC",name:"Celcius"}},G=class{static transform(e,r,i){if(!Number.isFinite(e))return null;if(r===i)return e;try{return ir[r][i](e)}catch{throw new Error("Transformation not found!")}}static setSymbol(e,r){e in de&&(de[e].symbol=r??de[e].symbol)}static getSymbol(e){return e in de?de[e].symbol:e}static degreesToRadians(e){return ir.deg.radian(e)}static radiansToDegrees(e=0){return ir.rad.degree(e)}static nauticalMilesToKm(e=0){return e*1.852}static angleToDirection(e,r){let i=Math.PI*2;if(r||(r=0),e||(e=0),!Number.isFinite(r)||!Number.isFinite(e))return null;let n=r+e;return n>i?n-i:n<0?i+n:n}static directionToAngle(e,r){let i=Math.PI*2;if(r||(r=0),e||(e=0),!Number.isFinite(r)||!Number.isFinite(e))return null;let n=r-e,a;if(n>0)a=n>Math.PI?i-n:0-n;else if(n<0){let o=Math.abs(n);a=o>Math.PI?o-i:o}else a=n;return a}};var A=zr(un()),F=class t{static R=6371e3;static rhumbDestination(e,r,i){let n=t.R,a=i/n,o=e[1]*Math.PI/180,s=e[0]*Math.PI/180,u=r,p=a*Math.cos(u),h=o+p,v=a,m=89*Math.PI/180;h>m&&o<m?(v=a*(m-o)/p,h=m):h<-m&&o>-m&&(v=a*(-m-o)/p,h=-m);let b=Math.log(Math.tan(Math.PI/4+h/2)/Math.tan(Math.PI/4+o/2)),O=Math.abs(b)>1e-12?(h-o)/b:Math.cos(o),y=v*Math.sin(u)/O;return[(s+y)*180/Math.PI,h*180/Math.PI]}static destCoordinate(e,r,i){let n=(0,A.computeDestinationPoint)(e,i,G.radiansToDegrees(r));return[n.longitude,n.latitude]}static distanceTo(e,r){return(0,A.getDistance)(e,r)}static routeLength(e){return(0,A.getPathLength)(e)}static routeLegs(e,r){if(e.length<2)return[];let i=[];r?i.push({bearing:(0,A.getGreatCircleBearing)(r,e[0]),distance:t.distanceTo(r,e[0])}):i.push({bearing:0,distance:0});for(let n=1;n<e.length;++n){let a={bearing:(0,A.getGreatCircleBearing)(e[n-1],e[n]),distance:t.distanceTo(e[n-1],e[n])};i.push(a)}return i}static closestForwardPoint(e,r,i){if(e.length<2||!r)return-1;let n={index:-1,distance:-1};for(let a=0;a<e.length;++a){let o=(0,A.getGreatCircleBearing)(r,e[a]),s=Ar.difference(i,o);if(s>-90&&s<90){let u=t.distanceTo(r,e[a]);(n.distance===-1||u<n.distance)&&(n.distance=u,n.index=a)}}return n.index}static centreOfPolygon(e){let r=(0,A.getCenter)(e);return[r.longitude,r.latitude]}static inDLCrossingZone(e,r=170){return Math.abs(e[0])>=r}static inBounds(e,r){return(0,A.isPointInPolygon)(e,[[r[0],r[1]],[r[0],r[3]],[r[2],r[3]],[r[2],r[1]],[r[0],r[1]]])}static calcMapifiedExtent(e,r){let n=111111*Math.cos(G.degreesToRadians(e[1])),a=[0,0,0,0];return a[1]=e[1]+(0-Math.abs(r))/111111,a[3]=e[1]+Math.abs(r)/111111,a[0]=e[0]+(0-Math.abs(r))/n,a[2]=e[0]+Math.abs(r)/n,a}static normaliseCoords(e){if(!Array.isArray(e))return[0,0];if(typeof e[0]=="number"){if(e[0]>180)for(;e[0]>180;)e[0]=e[0]-360;else if(e[0]<-180)for(;e[0]<-180;)e[0]=360+e[0];return e}else if(Array.isArray(e[0]))return e.forEach(r=>r=this.normaliseCoords(r)),e}},Ar=class t{static difference(e,r){let i=360-r,n=e+i,a=t.normalise(n);return a<180?0-a:360-a}static add(e,r){return t.normalise(e+r)}static normalise(e){return e<0?e+360:e>=360?e-360:e}};var Nt=class{action="notification";playback=!1;result=null;self=null;timestamp=new Date().toISOString();sourceRef},ae=class{action;playback=!1;result=null;timestamp;self=null;watchDogAlarm;constructor(){this.action="update"}},Ft=class extends ae{constructor(){super(),this.action="resource"}},Ut=class extends ae{constructor(){super(),this.action="trail"}};var hn=zr(dn());var Ku=["environment.wind.speedTrue","environment.wind.speedOverGround","environment.wind.angleTrueGround","environment.wind.angleTrueWater","environment.wind.directionTrue","environment.wind.directionMagnetic","navigation.courseOverGroundTrue","navigation.courseOverGroundMagnetic","navigation.headingTrue","navigation.headingMagnetic"],_={active:!1,maxMsgIntervals:18,intervalCount:0,msgCount:0,alarm:!1},f,P,vn,Me=[],Wt=[],Nr=!1,Kr,Fr=!1,x={signalk:{},aisState:[]},yn=[0,0,0,0],bn=60,_e=0,w,X={},Y=500,U=!1,_n,K={maxAge:54e4,staleAge:36e4,lastTick:new Date().valueOf(),maxTrack:20},Ur={cogLine:10,aisCogLine:10},xe={trailDuration:24,trailResolution:{lastHour:"5s",next23:"10s",beyond24:"1m"}},B,xn,oe="freeboard-sk";function Wu(){f={self:new fe,aisTargets:new Map,aisStatus:{updated:[],stale:[],expired:[]},paths:{},atons:new Map,aircraft:new Map,sar:new Map,meteo:new Map},f.self.positionReceived=!1,Pn()}function Pn(){w={updated:{},stale:{},expired:{}}}function Vt({action:t,msg:e}){switch(t){case"onConnect":postMessage({action:"open",playback:U,result:e.target.readyState}),_.msgCount=0,_.intervalCount=0,_.alarm=!1,_.active=!0;break;case"onClose":Mn(!1),_.active=!1;break;case"onError":postMessage({action:"error",playback:U,result:"Connection error!"}),_.msgCount=0,_.intervalCount=0,_.active=!1;break;case"onMessage":_.msgCount++,Gu(e);break}}addEventListener("message",({data:t})=>{$u(t)});function $u(t){if(t.cmd)switch(t.cmd){case"open":mn(t.options),ju(t.options);break;case"close":Mn(!0);break;case"subscribe":P.subscribe(t.options.context,t.options.path);break;case"settings":mn(t.options);break;case"alarm":Hu(t.options);break;case"vessel":if(t.options){let e;t.options.context==="self"?e=f.self:e=f.aisTargets.get(t.options.context),e&&t.options.name&&(e.name=t.options.name)}break;case"auth":t.options&&typeof t.options.token<"u"&&(vn=t.options.token);break;case"trail":t.options&&(xe.trailDuration=t.options.trailDuration??24,t.options.trailResolution&&(xe.trailResolution.lastHour=t.options.trailResolution.lastHour??"5s",xe.trailResolution.next23=t.options.trailResolution.next23??"1m",xe.trailResolution.beyond24=t.options.trailResolution.beyond24??"5m")),Bu(xe);break}}function mn(t={config:{}}){t.interval&&typeof t.interval=="number"&&(Y=t.interval,wn(),On(),bn=1/(Y/1e3)*60),U=!!t.playback,t.config&&(typeof t.config.units.preferredPaths<"u"&&(X=t.config.units.preferredPaths),t.config.vessels.aisMaxAge&&typeof t.config.vessels.aisMaxAge=="number"&&(K.maxAge=t.config.vessels.aisMaxAge),t.config.vessels.aisStaleAge&&typeof t.config.vessels.aisStaleAge=="number"&&(K.staleAge=t.config.vessels.aisStaleAge),typeof t.config.signalk.maxRadius=="number"&&(x.signalk=t.config.signalk),typeof t.config.selections.aisState<"u"&&Array.isArray(t.config.selections.aisState)&&(x.aisState=t.config.selections.aisState),Ur=t.config.vessels)}function Mn(t=!1){wn(),Me.forEach(e=>e.unsubscribe()),P&&t&&P.close(),P=null,postMessage({action:"close",result:t,playback:U})}var Kt=!1;function Se(t){if(!Kt)return new Promise((e,r)=>{Kt=!0,fetch(`${t}`).then(i=>{Kt=!1,i.json().then(n=>e(n)).catch(n=>r(n))}).catch(i=>{Kt=!1,r(i)})})}function Sn(){let t=x&&x.signalk&&x.signalk.maxRadius?`?radius=${x.signalk.maxRadius}`:"?radius=10000";Se(Kr+"/tracks"+t).then(e=>{Fr=!0,Object.entries(e).forEach(r=>{if(f.aisTargets.has(r[0])){let i=f.aisTargets.get(r[0]);i.track=r[1].coordinates,Wr(i)}})}).catch(()=>{Fr=!1})}function Bu(t){let e=Kr+"/self/track?",r=[],i=5e-4,n=!0;t.trailDuration>24&&(r.push(Se(`${e}timespan=${t.trailDuration-24}h&resolution=${t.trailResolution.beyond24}&timespanOffset=24`)),r.push(Se(`${e}timespan=23h&resolution=${t.trailResolution.next23}&timespanOffset=1`))),t.trailDuration>1&&t.trailDuration<25&&r.push(Se(`${e}timespan=${t.trailDuration-1}h&resolution=${t.trailResolution.next23}&timespanOffset=1`)),r.push(Se(`${e}timespan=1h&resolution=${t.trailResolution.lastHour}`));let a=[],o=new Ut;o.playback=U,Promise.all(r).then(s=>{let u=0,p=r.length-1,h=60;s.forEach(v=>{if(v.type&&v.type==="MultiLineString"&&v.coordinates&&Array.isArray(v.coordinates))if(u!==p){let m=[];for(v.coordinates.forEach(b=>{m=m.concat(b)}),m=(0,hn.SimplifyAP)(m,i,n);m.length>h;){let b=m.slice(0,h);a.push(b),m=m.slice(h-1),m[0]=[m[0][0]+5e-9,m[0][1]+5e-9]}m.length!==0&&a.push(m)}else a=a.concat(v.coordinates);u++}),o.result=a,postMessage(o)}).catch(()=>{o.result=null,postMessage(o)})}function ju(t){if(P)return;if(!t.url){postMessage({action:"error",result:"Valid options not provided!"});return}let e=t.url.split("/");if(e.pop(),e.push("api"),e[0]=e[0]==="wss:"?"https:":"http:",Kr=e.join("/"),Wu(),P=new Te,Me.push(P.onConnect.subscribe(r=>Vt({action:"onConnect",msg:r}))),Me.push(P.onClose.subscribe(r=>Vt({action:"onClose",msg:r}))),Me.push(P.onError.subscribe(r=>Vt({action:"onError",msg:r}))),Me.push(P.onMessage.subscribe(r=>Vt({action:"onMessage",msg:r}))),P.authToken=vn,t.playback){let r=t.playbackOptions.startTime?`?startTime=${t.playbackOptions.startTime}`:null,i=t.playbackOptions.playbackRate?`playbackRate=${t.playbackOptions.playbackRate}`:null;i=i?r?"&"+i:"?"+i:null;let n=`${t.url}${r||""}${i||""}`;P.open(n,t.playbackOptions.subscribe,t.token)}else P.open(t.url,t.subscribe,t.token),Sn()}function Hu(t){let e=t.type.indexOf("notifications.")===-1?`notifications.${t.type}`:t.type;t.raise?P.raiseAlarm("self",e,new Ce(t.message,t.state,!0,!0)):P.clearAlarm("self",e)}function Gu(t){P.isHello(t)?(postMessage({action:"hello",result:t,self:t.self,playback:U}),Y&&On()):P.isDelta(t)?(Nr=!0,t.updates.forEach(e=>{e.values&&(B=e.$source,xn=e.timestamp,e.values.forEach(r=>{if(_n=e.timestamp,!!t.context)switch(t.context.split(".")[0]){case"shore":case"atons":x?.signalk.atons&&Zu(t.context,r),Pe(t.context,f.atons,x?.signalk.atons);break;case"sar":x?.signalk.sar&&Ju(t.context,r),Pe(t.context,f.sar,x?.signalk.sar);break;case"aircraft":x?.signalk.aircraft&&el(t.context,r),Pe(t.context,f.aircraft,x?.signalk.aircraft);break;case"meteo":x?.signalk.meteo&&(Qu(t.context,r),gn(r)),Pe(t.context,f.meteo,x?.signalk.meteo);break;case"vessels":if(P.isSelf(t))f.self.id||(f.self.id=t.context),pn(f.self,r,!0),gn(r);else{if(x?.signalk.vessels){let i=zu(t.context);pn(i,r)}Pe(t.context,f.aisTargets,x?.signalk.vessels,x?.aisState)}break}}))}),Vr()):P.isResponse(t)&&postMessage({action:"response",result:t})}function Pe(t,e,r=!0,i=[]){if(r){let n=e.get(t);n&&i.includes(n?.state)&&(w.expired[t]=!0,n=null),n&&x.signalk.maxRadius?n.positionReceived&&F.inBounds(n.position,yn)?w.updated[t]=!0:(e.delete(t),w.expired[t]=!0):w.updated[t]=!0}else e.size!==0&&(e.forEach((n,a)=>{w.expired[a]=!0}),e.clear())}function Vr(t=!1){if(!Y||t){let e=new ae;e.watchDogAlarm=_.alarm,e.playback=U,f.aisStatus.updated=Object.keys(w.updated),f.aisStatus.stale=Object.keys(w.stale),f.aisStatus.expired=Object.keys(w.expired),e.result=f,e.timestamp=U?_n:f.self.lastUpdated.toISOString(),postMessage(e),Pn(),f.self.resourceUpdates=[],Yu(),_e===0&&f.self.positionReceived&&x?.signalk.maxRadius&&(yn=F.calcMapifiedExtent(f.self.position,x.signalk.maxRadius),_e++),_e=_e>=bn?0:_e+1}}function On(){Y&&typeof Y=="number"&&Wt.push(setInterval(()=>{_.active&&!_.msgCount?(_.intervalCount=_.intervalCount+1,_.intervalCount>=_.maxMsgIntervals&&(_.intervalCount=0,_.alarm=!0,Vr(!0))):(_.intervalCount=0,_.msgCount=0,_.alarm=!1),Nr&&(Vr(!0),Nr=!1)},Y)),Wt.push(setInterval(()=>{Fr&&Sn()},6e4))}function wn(){Wt.forEach(t=>clearInterval(t)),Wt=[]}function zu(t){if(!f.aisTargets.has(t)){let e=new fe;e.id=t,e.position=null,f.aisTargets.set(t,e)}return f.aisTargets.get(t)}function pn(t,e,r=!1){if(r){if(t.lastUpdated=new Date,e.path.startsWith("resources."))t.resourceUpdates.push(e),Xu(e);else if(e.path.startsWith("navigation.racing"))t.properties[e.path]=e.value;else if(e.path==="performance.beatAngle")t.performance.beatAngle=e.value;else if(e.path==="performance.gybeAngle")t.performance.gybeAngle=e.value;else if(e.path.startsWith("navigation.course."))if(e.path.startsWith("navigation.course.calcValues.")){let a=e.path.split(".").slice(3).join(".");t.courseCalcs[a]=e.value}else e.path.includes("activeRoute")?t.courseApi.activeRoute=e.value:e.path.includes("nextPoint")?t.courseApi.nextPoint=e.value:e.path.includes("previousPoint")?t.courseApi.previousPoint=e.value:e.path.includes("arrivalCircle")&&(t.courseApi.arrivalCircle=e.value);let n=e.path.indexOf("course")!==-1?e.path.split(".").slice(0,2).join("."):e.path;Ku.indexOf(n)!==-1&&(f.paths[n]=null)}else e.path==="navigation.distanceToSelf"&&(t.distanceToSelf=e.value),e.path==="navigation.closestApproach"&&(t.closestApproach=e.value);if(e.path==="")typeof e.value.name<"u"&&(t.name=e.value.name),typeof e.value.mmsi<"u"&&(t.mmsi=e.value.mmsi,t.lastUpdated=new Date),typeof e.value.registrations<"u"&&(t.registrations=e.value.registrations),typeof e.value.buddy<"u"&&(t.buddy=e.value.buddy),typeof e.value.communication<"u"&&(t.callsignVhf=e.value.communication.callsignVhf??"",t.callsignHf=e.value.communication.callsignHf??"");else if(e.path==="communication.callsignVhf")t.callsignVhf=e.value;else if(e.path==="communication.callsignHf")t.callsignHf=e.value;else if(e.path==="design.aisShipType")t.type=e.value;else if(e.path==="navigation.position"&&e.value){if(typeof e.value.latitude>"u"||typeof e.value.longitude>"u")return;t.position=F.normaliseCoords([e.value.longitude,e.value.latitude]),t.positionReceived=!0,t.positionTimestamp=xn??"",t.lastUpdated=new Date,r||Wr(t)}else e.path==="navigation.state"?t.state=e.value:e.path==="navigation.speedOverGround"?t.sog=e.value:e.path==="environment.mode"?t.environment.mode=e.value:e.path==="environment.sun"?t.environment.sun=e.value:e.path==="environment.wind.angleApparent"?t.wind.awa=e.value:e.path==="environment.wind.speedApparent"?t.wind.aws=e.value:e.path==="environment.wind.speedTrue"?t.wind.speedTrue=e.value:e.path==="environment.wind.speedOverGround"?t.wind.sog=e.value:e.path==="environment.wind.directionTrue"?t.wind.twd=e.value:e.path==="environment.wind.directionMagnetic"?t.wind.mwd=e.value:e.path==="navigation.anchor.position"?t.anchor.position=e.value:e.path==="navigation.anchor.maxRadius"?t.anchor.maxRadius=e.value:e.path==="navigation.anchor.currentRadius"?t.anchor.radius=e.value:e.path==="steering.autopilot.state"&&B===oe?t.autopilot.state=e.value:e.path==="steering.autopilot.mode"&&B===oe?t.autopilot.mode=e.value:e.path==="steering.autopilot.target"&&B===oe?t.autopilot.target=e.value:e.path==="steering.autopilot.engaged"&&B===oe?t.autopilot.enabled=e.value:e.path==="steering.autopilot.defaultPilot"?(t.autopilot.default=e.value,oe=e.value):e.path==="steering.autopilot.availableActions"&&B===oe?t.autopilot.availableActions=e.value??[]:e.path==="navigation.courseOverGroundTrue"?t.cogTrue=e.value:e.path==="navigation.courseOverGroundMagnetic"?t.cogMagnetic=e.value:e.path==="navigation.headingTrue"?t.headingTrue=e.value:e.path==="navigation.headingMagnetic"&&(t.headingMagnetic=e.value);typeof X.heading<"u"&&e.path===X.heading&&(t.orientation=e.value),typeof X.tws<"u"&&e.path===X.tws&&(t.wind.tws=e.value),typeof X.twd<"u"&&e.path===X.twd&&(t.wind.direction=e.path==="environment.wind.angleTrueGround"||e.path==="environment.wind.angleTrueWater"?G.angleToDirection(e.value,t.orientation??0):e.value);let i=t.cogTrue??t.cogMagnetic??void 0;if(typeof i<"u"&&t.position){let n=r?Ur.cogLine:Ur.aisCogLine,a=(t.sog??0)*(n*60);t.vectors.cog=[t.position,F.rhumbDestination(t.position,i,a)]}}function Xu(t){let e=new Ft;e.playback=U,e.result={path:t.path,value:t.value,sourceRef:B},postMessage(e)}function gn(t){if(t.path.includes("notifications.")){let e=new Nt;e.playback=U,e.result={path:t.path,value:t.value,sourceRef:B},postMessage(e)}}function Yu(){let t=new Date().valueOf();f.aisTargets.forEach((e,r)=>{e.lastUpdated.valueOf()<t-K.maxAge?(w.expired[r]=!0,f.aisTargets.delete(r)):e.lastUpdated.valueOf()<t-K.staleAge&&(w.stale[r]=!0)}),f.aircraft.forEach((e,r)=>{e.lastUpdated.valueOf()<t-K.maxAge?(w.expired[r]=!0,f.aircraft.delete(r)):e.lastUpdated.valueOf()<t-K.staleAge&&(w.stale[r]=!0)}),f.sar.forEach((e,r)=>{e.lastUpdated.valueOf()<t-K.maxAge?(w.expired[r]=!0,f.sar.delete(r)):e.lastUpdated.valueOf()<t-K.staleAge&&(w.stale[r]=!0)})}function Zu(t,e){let r=!1;if(t.indexOf("shore.basestations")!==-1&&(r=!0),!f.atons.has(t)){let n=new ce;n.id=t,n.position=null,n.type.id=null,r&&(n.type.id=-2,n.type.name="Basestation"),f.atons.set(t,n)}let i=f.atons.get(t);return e.path===""?(typeof e.value.name<"u"&&(i.name=e.value.name),typeof e.value.mmsi<"u"&&(i.mmsi=e.value.mmsi),typeof e.value.atonType<"u"&&(i.type=e.value.atonType)):e.path==="atonType"?i.type=e.value:e.path==="virtual"?i.virtual=e.value:e.path==="navigation.position"?(i.position=[e.value.longitude,e.value.latitude],i.positionReceived=!0):i.properties[e.path]=e.value,t}function Ju(t,e){if(!f.sar.has(t)){let i=new Ee;i.id=t,i.position=null,i.type.id=-1,i.type.name="SaR Beacon",f.sar.set(t,i)}let r=f.sar.get(t);e.path===""?(typeof e.value.name<"u"&&(r.name=e.value.name),typeof e.value.mmsi<"u"&&(r.mmsi=e.value.mmsi),typeof e.value.communication<"u"&&(r.callsignVhf=e.value.communication.callsignVhf??"",r.callsignHf=e.value.communication.callsignHf??"")):e.path==="communication.callsignVhf"?r.callsignVhf=e.value:e.path==="communication.callsignHf"?r.callsignHf=e.value:e.path==="navigation.position"&&e.value&&(r.position=F.normaliseCoords([e.value.longitude,e.value.latitude]),r.positionReceived=!0)}function Qu(t,e){if(!f.meteo.has(t)){let i=new Ne;i.id=t,i.position=null,i.type.id=-1,i.type.name="Weather Station",f.meteo.set(t,i)}let r=f.meteo.get(t);if(e.path===""){if(typeof e.value.name<"u"&&(r.name=e.value.name),typeof e.value.mmsi<"u"){let i=t.split(":").slice(-2);r.mmsi=i.length===2?`${i[0]}:${i[1]}`:e.value.mmsi}typeof e.value.communication<"u"&&(r.callsignVhf=e.value.communication.callsignVhf??"",r.callsignHf=e.value.communication.callsignHf??"")}else e.path==="communication.callsignVhf"?r.callsignVhf=e.value:e.path==="communication.callsignHf"?r.callsignHf=e.value:e.path==="environment.outside.temperature"?r.temperature=e.value:e.path==="environment.wind.directionTrue"?r.twd=e.value:e.path==="environment.wind.averageSpeed"?r.tws=e.value:e.path==="navigation.position"&&e.value&&(r.position=F.normaliseCoords([e.value.longitude,e.value.latitude]),r.positionReceived=!0)}function el(t,e){if(!f.aircraft.has(t)){let i=new Ie;i.id=t,i.position=null,f.aircraft.set(t,i)}let r=f.aircraft.get(t);e.path===""?(typeof e.value.name<"u"&&(r.name=e.value.name),typeof e.value.mmsi<"u"&&(r.mmsi=e.value.mmsi),typeof e.value.communication<"u"&&(r.callsignVhf=e.value.communication.callsignVhf??"",r.callsignHf=e.value.communication.callsignHf??"")):e.path==="communication.callsignVhf"?r.callsignVhf=e.value:e.path==="communication.callsignHf"?r.callsignHf=e.value:e.path==="navigation.position"&&e.value?(r.position=F.normaliseCoords([e.value.longitude,e.value.latitude]),r.positionReceived=!0,Wr(r)):e.path==="navigation.courseOverGroundTrue"?r.orientation=e.value:e.path==="navigation.speedOverGround"&&(r.sog=e.value)}function Wr(t){if(t.track&&t.track.length===0)t.track.push([t.position]);else{let e=t.track[t.track.length-1].length,r=t.track[t.track.length-1][e-1];r[0]!==t.position[0]&&r[1]!==t.position[1]&&t.track[t.track.length-1].push(t.position)}t.track[t.track.length-1]=t.track[t.track.length-1].slice(0-K.maxTrack)}
@@ -1,12 +0,0 @@
1
- // Learn more about Vitest configuration options at https://vitest.dev/config/
2
-
3
- import { defineConfig } from 'vitest/config';
4
-
5
- export default defineConfig({
6
- test: {
7
- setupFiles: [
8
- 'vitest-setup.js',
9
- '@vitest/web-worker'
10
- ]
11
- },
12
- });
package/vitest-setup.js DELETED
@@ -1,16 +0,0 @@
1
- // In a file like vitest.setup.js or similar
2
- class AudioContextMock {
3
- createOscillator() {}
4
- createGain() {
5
- return {
6
- connect: () => {},
7
- disconnect: () => {}
8
- };
9
- }
10
- // Add other methods that your code uses
11
- }
12
-
13
- // Assign the mock to the global window object
14
- global.AudioContext = AudioContextMock;
15
- // Also handle the vendor-prefixed version if your code uses it
16
- global.webkitAudioContext = AudioContextMock;