@uwrl/qc-utils 0.0.22 → 0.1.0

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.
@@ -1,15 +1,15 @@
1
- (function(w,M){typeof exports=="object"&&typeof module<"u"?M(exports):typeof define=="function"&&define.amd?define(["exports"],M):(w=typeof globalThis<"u"?globalThis:w||self,M(w["@uwrl/qc-utils"]={}))})(this,(function(w){"use strict";var M=(e=>(e.SECOND="s",e.MINUTE="m",e.HOUR="h",e.DAY="D",e.WEEK="W",e.MONTH="M",e.YEAR="Y",e))(M||{}),k=(e=>(e.ADD_POINTS="ADD_POINTS",e.CHANGE_VALUES="CHANGE_VALUES",e.ASSIGN_VALUES_BULK="ASSIGN_VALUES_BULK",e.DELETE_POINTS="DELETE_POINTS",e.DRIFT_CORRECTION="DRIFT_CORRECTION",e.INTERPOLATE="INTERPOLATE",e.SHIFT_DATETIMES="SHIFT_DATETIMES",e.ASSIGN_DATETIMES_BULK="ASSIGN_DATETIMES_BULK",e.FILL_GAPS="FILL_GAPS",e))(k||{}),L=(e=>(e.FIND_GAPS="FIND_GAPS",e.PERSISTENCE="PERSISTENCE",e.CHANGE="CHANGE",e.RATE_OF_CHANGE="RATE_OF_CHANGE",e.VALUE_THRESHOLD="VALUE_THRESHOLD",e.DATETIME_RANGE="DATETIME_RANGE",e.SELECTION="SELECTION",e))(L||{}),X=(e=>(e.LT="Less than",e.LTE="Less than or equal to",e.GT="Greater than",e.GTE="Greater than or equal to",e.E="Equal",e))(X||{}),Je=(e=>(e.ADD="ADD",e.SUB="SUB",e.MULT="MULT",e.DIV="DIV",e.ASSIGN="ASSIGN",e))(Je||{}),Qe=(e=>(e.LT="Less than",e.LTE="Less than or equal to",e.GT="Greater than",e.GTE="Greater than or equal to",e.E="Equal",e))(Qe||{});class Ke{id;thingId;link;frequency;path;datastreamIds;publicResource;constructor(){this.id="",this.thingId="",this.link="",this.frequency=null,this.path="HydroShare",this.datastreamIds=[],this.publicResource=!1}}class er extends Ke{resourceTitle;resourceAbstract;resourceKeywords;constructor(){super(),this.resourceTitle=void 0,this.resourceAbstract=void 0,this.resourceKeywords=void 0}}class Ze{latitude;longitude;elevation_m;elevationDatum;state;county;country;constructor(){this.elevationDatum="WGS84",this.state="",this.county="",this.country=""}}class tr{id;workspaceId;name;location=new Ze;tags;hydroShareArchive;siteType;samplingFeatureCode;isPrivate;description;samplingFeatureType;dataDisclaimer;constructor(){this.id="",this.workspaceId="",this.name="",this.tags=[],this.siteType="",this.samplingFeatureCode="",this.isPrivate=!1,this.description="",this.samplingFeatureType="Site",this.dataDisclaimer=""}}class rr{id;workspaceId;name;description;thingId;observationType;resultType;status;sampledMedium;noDataValue;aggregationStatistic;unitId;observedPropertyId;sensorId;processingLevelId;isPrivate;isVisible;phenomenonBeginTime;phenomenonEndTime;intendedTimeSpacing;intendedTimeSpacingUnit;timeAggregationInterval;timeAggregationIntervalUnit;dataSourceId;valueCount;constructor(t){this.id="",this.workspaceId="",this.name="",this.description="",this.thingId=t||"",this.observationType="OM_Measurement",this.resultType="Time Series Coverage",this.sampledMedium="",this.noDataValue=-9999,this.aggregationStatistic="",this.unitId="",this.observedPropertyId="",this.sensorId="",this.processingLevelId="",this.timeAggregationInterval=null,this.timeAggregationIntervalUnit="seconds",this.isPrivate=!0,this.isVisible=!0,this.valueCount=0}}class nr{id;workspaceId;name;symbol;definition;type;constructor(){this.id="",this.workspaceId="",this.name="",this.symbol="",this.definition="",this.type=""}}class sr{id;workspaceId;name;description;manufacturer;model;methodType;methodCode;methodLink;encodingType;modelLink;constructor(){this.id="",this.workspaceId="",this.name="",this.description="",this.manufacturer="",this.model="",this.methodType="Instrument Deployment",this.methodCode="",this.methodLink="",this.encodingType="application/json",this.modelLink=""}}class or{id;workspaceId;name;definition;description;type;code;constructor(){this.id="",this.workspaceId="",this.name="",this.definition="",this.description="",this.type="Hydrology",this.code=""}}class ar{id;workspaceId;code;definition;explanation;constructor(){this.id="",this.workspaceId="",this.code="",this.definition="",this.explanation=""}}class ir{id;workspaceId;code;description;constructor(){this.id="",this.workspaceId="",this.code="",this.description=""}}class cr{name;code;type;description;link;constructor(){}}class lr{id;email;password;firstName;middleName;lastName;phone;address;organization;type;link;accountType;hydroShareConnected;constructor(){this.id="",this.email="",this.password="",this.firstName="",this.middleName="",this.lastName="",this.phone="",this.address="",this.type="",this.link="",this.accountType="standard",this.hydroShareConnected=!1}}class ur{id;name;iconLink;signupEnabled;connectEnabled;constructor(){this.id="",this.name="",this.iconLink="",this.signupEnabled=!0,this.connectEnabled=!0}}var et=(e=>(e.Global="*",e.View="view",e.Create="create",e.Edit="edit",e.Delete="delete",e))(et||{}),tt=(e=>(e.Global="*",e.Workspace="Workspace",e.Collaborator="Collaborator",e.Thing="Thing",e.Datastream="Datastream",e.Sensor="Sensor",e.Unit="Unit",e.ObservedProperty="ObservedProperty",e.ProcessingLevel="ProcessingLevel",e.Observation="Observation",e))(tt||{});class hr{id="";key="";name="";description="";isActive=!0;expiresAt="";createdAt="";lastUsed="";workspaceId="";role=null;constructor(t){Object.assign(this,t)}}class fr{id;name;isPrivate;owner;collaboratorRole;pendingTransferTo;constructor(){this.id="",this.name="",this.isPrivate=!1,this.owner=null,this.collaboratorRole=null,this.pendingTransferTo=null}}class dr{user;role;constructor(){this.user={phone:"",address:"",link:"",type:"",name:"",email:"",organizationName:""},this.role={name:"",description:"",id:"",isApikeyRole:!1,isUserRole:!1,workspaceId:"",permissions:[]}}}function be(){const e="csrftoken=",r=decodeURIComponent(document.cookie).split(";");for(const n of r){const s=n.trim();if(s.startsWith(e))return s.substring(e.length)}return null}function Se(e){let t=e.headers?{...e.headers}:{},r;return e.body!==void 0&&(r=typeof e.body=="string"||e.body instanceof FormData?e.body:JSON.stringify(e.body)),t["X-CSRFToken"]=be()||"",{...e,headers:t,body:r,credentials:"omit"}}function rt(e){if(Array.isArray(e?.errors)&&e.errors.length&&(e=e.errors[0]),typeof e!="object"||e===null)return"An unknown error occurred.";const t=["message","detail","error"];for(const r of t)if(e[r])return e[r];return"An unknown error occurred."}async function Ee(e){if(e.headers.get("Content-Length")==="0"||e.statusText==="No Content")return null;const t=e.headers.get("content-type")||"";let r=null;if(t.includes("application/json"))try{r=await e.json()}catch(s){console.error("Failed to parse error JSON:",s)}else if(t.includes("text/csv"))try{r=await e.blob()}catch(s){console.error("Failed to parse error JSON:",s)}if(e.ok||e.status===401)return r;const n={status:e.status,message:rt(r)};throw console.error("API response not OK:",n.message),n}var ve=function(e,t){return ve=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,n){r.__proto__=n}||function(r,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(r[s]=n[s])},ve(e,t)};function ie(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");ve(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}function ke(e){var t=typeof Symbol=="function"&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function _e(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),s,a=[],o;try{for(;(t===void 0||t-- >0)&&!(s=n.next()).done;)a.push(s.value)}catch(i){o={error:i}}finally{try{s&&!s.done&&(r=n.return)&&r.call(n)}finally{if(o)throw o.error}}return a}function Ae(e,t,r){if(r||arguments.length===2)for(var n=0,s=t.length,a;n<s;n++)(a||!(n in t))&&(a||(a=Array.prototype.slice.call(t,0,n)),a[n]=t[n]);return e.concat(a||Array.prototype.slice.call(t))}typeof SuppressedError=="function"&&SuppressedError;function Y(e){return typeof e=="function"}function nt(e){var t=function(n){Error.call(n),n.stack=new Error().stack},r=e(t);return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var Te=nt(function(e){return function(r){e(this),this.message=r?r.length+` errors occurred during unsubscription:
2
- `+r.map(function(n,s){return s+1+") "+n.toString()}).join(`
3
- `):"",this.name="UnsubscriptionError",this.errors=r}});function Le(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var ce=(function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,n,s,a;if(!this.closed){this.closed=!0;var o=this._parentage;if(o)if(this._parentage=null,Array.isArray(o))try{for(var i=ke(o),l=i.next();!l.done;l=i.next()){var d=l.value;d.remove(this)}}catch(h){t={error:h}}finally{try{l&&!l.done&&(r=i.return)&&r.call(i)}finally{if(t)throw t.error}}else o.remove(this);var u=this.initialTeardown;if(Y(u))try{u()}catch(h){a=h instanceof Te?h.errors:[h]}var y=this._finalizers;if(y){this._finalizers=null;try{for(var g=ke(y),m=g.next();!m.done;m=g.next()){var S=m.value;try{at(S)}catch(h){a=a??[],h instanceof Te?a=Ae(Ae([],_e(a)),_e(h.errors)):a.push(h)}}}catch(h){n={error:h}}finally{try{m&&!m.done&&(s=g.return)&&s.call(g)}finally{if(n)throw n.error}}}if(a)throw new Te(a)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)at(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&Le(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&Le(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=(function(){var t=new e;return t.closed=!0,t})(),e})(),st=ce.EMPTY;function ot(e){return e instanceof ce||e&&"closed"in e&&Y(e.remove)&&Y(e.add)&&Y(e.unsubscribe)}function at(e){Y(e)?e():e.unsubscribe()}var pr={Promise:void 0},yr={setTimeout:function(e,t){for(var r=[],n=2;n<arguments.length;n++)r[n-2]=arguments[n];return setTimeout.apply(void 0,Ae([e,t],_e(r)))},clearTimeout:function(e){return clearTimeout(e)},delegate:void 0};function gr(e){yr.setTimeout(function(){throw e})}function it(){}function le(e){e()}var ct=(function(e){ie(t,e);function t(r){var n=e.call(this)||this;return n.isStopped=!1,r?(n.destination=r,ot(r)&&r.add(n)):n.destination=br,n}return t.create=function(r,n,s){return new $e(r,n,s)},t.prototype.next=function(r){this.isStopped||this._next(r)},t.prototype.error=function(r){this.isStopped||(this.isStopped=!0,this._error(r))},t.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},t.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,e.prototype.unsubscribe.call(this),this.destination=null)},t.prototype._next=function(r){this.destination.next(r)},t.prototype._error=function(r){try{this.destination.error(r)}finally{this.unsubscribe()}},t.prototype._complete=function(){try{this.destination.complete()}finally{this.unsubscribe()}},t})(ce),mr=(function(){function e(t){this.partialObserver=t}return e.prototype.next=function(t){var r=this.partialObserver;if(r.next)try{r.next(t)}catch(n){ue(n)}},e.prototype.error=function(t){var r=this.partialObserver;if(r.error)try{r.error(t)}catch(n){ue(n)}else ue(t)},e.prototype.complete=function(){var t=this.partialObserver;if(t.complete)try{t.complete()}catch(r){ue(r)}},e})(),$e=(function(e){ie(t,e);function t(r,n,s){var a=e.call(this)||this,o;return Y(r)||!r?o={next:r??void 0,error:n??void 0,complete:s??void 0}:o=r,a.destination=new mr(o),a}return t})(ct);function ue(e){gr(e)}function wr(e){throw e}var br={closed:!0,next:it,error:wr,complete:it},Sr=(function(){return typeof Symbol=="function"&&Symbol.observable||"@@observable"})();function Er(e){return e}function vr(e){return e.length===0?Er:e.length===1?e[0]:function(r){return e.reduce(function(n,s){return s(n)},r)}}var lt=(function(){function e(t){t&&(this._subscribe=t)}return e.prototype.lift=function(t){var r=new e;return r.source=this,r.operator=t,r},e.prototype.subscribe=function(t,r,n){var s=this,a=_r(t)?t:new $e(t,r,n);return le(function(){var o=s,i=o.operator,l=o.source;a.add(i?i.call(a,l):l?s._subscribe(a):s._trySubscribe(a))}),a},e.prototype._trySubscribe=function(t){try{return this._subscribe(t)}catch(r){t.error(r)}},e.prototype.forEach=function(t,r){var n=this;return r=ut(r),new r(function(s,a){var o=new $e({next:function(i){try{t(i)}catch(l){a(l),o.unsubscribe()}},error:a,complete:s});n.subscribe(o)})},e.prototype._subscribe=function(t){var r;return(r=this.source)===null||r===void 0?void 0:r.subscribe(t)},e.prototype[Sr]=function(){return this},e.prototype.pipe=function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return vr(t)(this)},e.prototype.toPromise=function(t){var r=this;return t=ut(t),new t(function(n,s){var a;r.subscribe(function(o){return a=o},function(o){return s(o)},function(){return n(a)})})},e.create=function(t){return new e(t)},e})();function ut(e){var t;return(t=e??pr.Promise)!==null&&t!==void 0?t:Promise}function kr(e){return e&&Y(e.next)&&Y(e.error)&&Y(e.complete)}function _r(e){return e&&e instanceof ct||kr(e)&&ot(e)}var Ar=nt(function(e){return function(){e(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"}}),ht=(function(e){ie(t,e);function t(){var r=e.call(this)||this;return r.closed=!1,r.currentObservers=null,r.observers=[],r.isStopped=!1,r.hasError=!1,r.thrownError=null,r}return t.prototype.lift=function(r){var n=new ft(this,this);return n.operator=r,n},t.prototype._throwIfClosed=function(){if(this.closed)throw new Ar},t.prototype.next=function(r){var n=this;le(function(){var s,a;if(n._throwIfClosed(),!n.isStopped){n.currentObservers||(n.currentObservers=Array.from(n.observers));try{for(var o=ke(n.currentObservers),i=o.next();!i.done;i=o.next()){var l=i.value;l.next(r)}}catch(d){s={error:d}}finally{try{i&&!i.done&&(a=o.return)&&a.call(o)}finally{if(s)throw s.error}}}})},t.prototype.error=function(r){var n=this;le(function(){if(n._throwIfClosed(),!n.isStopped){n.hasError=n.isStopped=!0,n.thrownError=r;for(var s=n.observers;s.length;)s.shift().error(r)}})},t.prototype.complete=function(){var r=this;le(function(){if(r._throwIfClosed(),!r.isStopped){r.isStopped=!0;for(var n=r.observers;n.length;)n.shift().complete()}})},t.prototype.unsubscribe=function(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null},Object.defineProperty(t.prototype,"observed",{get:function(){var r;return((r=this.observers)===null||r===void 0?void 0:r.length)>0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var n=this,s=this,a=s.hasError,o=s.isStopped,i=s.observers;return a||o?st:(this.currentObservers=null,i.push(r),new ce(function(){n.currentObservers=null,Le(i,r)}))},t.prototype._checkFinalizedStatuses=function(r){var n=this,s=n.hasError,a=n.thrownError,o=n.isStopped;s?r.error(a):o&&r.complete()},t.prototype.asObservable=function(){var r=new lt;return r.source=this,r},t.create=function(r,n){return new ft(r,n)},t})(lt),ft=(function(e){ie(t,e);function t(r,n){var s=e.call(this)||this;return s.destination=r,s.source=n,s}return t.prototype.next=function(r){var n,s;(s=(n=this.destination)===null||n===void 0?void 0:n.next)===null||s===void 0||s.call(n,r)},t.prototype.error=function(r){var n,s;(s=(n=this.destination)===null||n===void 0?void 0:n.error)===null||s===void 0||s.call(n,r)},t.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},t.prototype._subscribe=function(r){var n,s;return(s=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&s!==void 0?s:st},t})(ht);const Re=3e3;var Ie=(e=>(e.Warning="warning",e.Success="success",e.Error="error",e.Info="info",e))(Ie||{}),Oe=(e=>(e.Success="mdi-checkbox-marked-circle",e.Warning="mdi-alert",e.Error="mdi-alert-circle",e.Info="mdi-information",e.None="none",e))(Oe||{}),Ue=(e=>(e.Warning="Warning",e.Success="Success",e.Error="Error",e.Info="Info",e))(Ue||{}),dt=(e=>(e.Center="center",e.Left="left",e.Right="right",e.Bottom="bottom",e.Top="top",e))(dt||{});class pt{constructor(t="",r="info",n="none",s="Info",a=Re,o="center",i=!1){this.message=t,this.color=r,this.icon=n,this.title=s,this.timeout=a,this.position=o,this.visible=i}}class yt{static subject=new ht;static get snack$(){return this.subject.asObservable()}static createSnackbar(t,r){this.subject.next(new pt(t,Ie[r],Oe[r],Ue[r],Re,"bottom",!0))}static success(t){this.createSnackbar(t,"Success")}static warn(t){this.createSnackbar(t,"Warning")}static error(t){this.createSnackbar(t,"Error")}static info(t){this.createSnackbar(t,"Info")}}function Me(e,t){const r={};for(let n in t)if(Array.isArray(t[n]))JSON.stringify(e[n])!==JSON.stringify(t[n])&&(r[n]=t[n]);else if(e[n]&&typeof e[n]=="object"&&t[n]&&typeof t[n]=="object"){const s=Me(e[n],t[n]);Object.keys(s).length>0&&(r[n]=s)}else JSON.stringify(e[n])!==JSON.stringify(t[n])&&(r[n]=t[n]);return r}function Tr(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Ce,gt;function Lr(){if(gt)return Ce;gt=1;class e{constructor(n){this.value=n,this.next=void 0}}class t{constructor(){this.clear()}enqueue(n){const s=new e(n);this._head?(this._tail.next=s,this._tail=s):(this._head=s,this._tail=s),this._size++}dequeue(){const n=this._head;if(n)return this._head=this._head.next,this._size--,n.value}clear(){this._head=void 0,this._tail=void 0,this._size=0}get size(){return this._size}*[Symbol.iterator](){let n=this._head;for(;n;)yield n.value,n=n.next}}return Ce=t,Ce}var De,mt;function $r(){if(mt)return De;mt=1;const e=Lr();return De=r=>{if(!((Number.isInteger(r)||r===1/0)&&r>0))throw new TypeError("Expected `concurrency` to be a number from 1 and up");const n=new e;let s=0;const a=()=>{s--,n.size>0&&n.dequeue()()},o=async(d,u,...y)=>{s++;const g=(async()=>d(...y))();u(g);try{await g}catch{}a()},i=(d,u,...y)=>{n.enqueue(o.bind(null,d,u,...y)),(async()=>(await Promise.resolve(),s<r&&n.size>0&&n.dequeue()()))()},l=(d,...u)=>new Promise(y=>{i(d,y,...u)});return Object.defineProperties(l,{activeCount:{get:()=>s},pendingCount:{get:()=>n.size},clearQueue:{value:()=>{n.clear()}}}),l},De}var Rr=$r();const V=Tr(Rr)(10),Ir=1e3;async function Q(e,t){const r=Se(t);try{const n=await fetch(e,r);return await Ee(n)}catch(n){throw n instanceof TypeError&&yt.error("Network error. Please check your connection."),n}}const c={async fetch(e,t={}){return t.method="GET",await V(()=>Q(e,t))},async patch(e,t,r=null,n={}){if(n.method="PATCH",n.body=r?Me(r,t):t,Object.keys(n.body).length!==0)return await V(()=>Q(e,n))},async post(e,t=void 0,r={}){return r.method="POST",r.body=t,await V(()=>Q(e,r))},async put(e,t=void 0,r={}){return r.method="PUT",r.body=t,await V(()=>Q(e,r))},async delete(e,t=void 0,r={}){return r.method="DELETE",r.body=t,await V(()=>Q(e,r))},async paginatedFetch(e,t){const r=t??Ir,n=e.includes("?")?"&":"?",s=`${e}${n}page_size=${r}&page=1`,a=Se({method:"GET"}),o=await V(()=>fetch(s,a)),i=Number(o.headers.get("x-total-pages"))||1,d=[...await Ee(o)];for(let u=2;u<=i;u++){const y=`${e}${n}page_size=${r}&page=${u}`,g=await V(()=>Q(y,{method:"GET"}));d.push(...g)}return d}},wt={HTTP:{type:"HTTP",sourceUri:"",placeholderVariables:[]},local:{type:"local",sourceUri:"",placeholderVariables:[]}},bt={JSON:{type:"JSON",timestamp:{key:"",format:"ISO8601",timezoneMode:"embeddedOffset"},JMESPath:""},CSV:{type:"CSV",timestamp:{key:"",format:"ISO8601",timezoneMode:"embeddedOffset"},headerRow:1,dataStartRow:2,delimiter:",",identifierType:"name"}},St={HydroServer:{type:"HydroServer"}};class Or{name="";settings={type:"SDL",extractor:JSON.parse(JSON.stringify(wt.local)),transformer:JSON.parse(JSON.stringify(bt.CSV)),loader:JSON.parse(JSON.stringify(St.HydroServer)),payloads:[]};id="";workspaceId="";orchestrationSystem={id:"",name:"",workspaceId:"",type:""};schedule={interval:15,intervalUnits:"minutes"};status={paused:!0};datastreams=[];constructor(t){Object.assign(this,t)}switchExtractor(t){this.settings.extractor=JSON.parse(JSON.stringify(wt[t]))}switchTransformer(t){this.settings.transformer=JSON.parse(JSON.stringify(bt[t]))}switchLoader(t){this.settings.loader=JSON.parse(JSON.stringify(St[t]))}}function Et(e){return{name:e.name,settings:e.settings,workspaceId:e.workspaceId,orchestrationSystemId:e.orchestrationSystem.id,schedule:e.schedule,status:e.status}}const F="https://lro.hydroserver.org/api",he=`${F}/auth`,B=`${he}/browser/account`,fe=`${he}/browser/session`,te=`${he}/browser/provider`,I=`${F}/data/workspaces`,Fe=`${F}/data/roles`,U=`${F}/data/datastreams`,z=`${F}/data/sensors`,T=`${F}/data/things`,Pe=`${T}/tags`,K=`${F}/data/orchestration-systems`,H=`${F}/data/data-sources`,q=`${F}/data/observed-properties`,Z=`${F}/data/processing-levels`,re=`${F}/data/result-qualifiers`,J=`${F}/data/units`,Ur=(e,t,r,n,s)=>{let a=`${U}/${e}/observations?format=column`;return a+=`&order_by=phenomenonTime&page_size=${t}`,a+=`&phenomenon_time_min=${encodeURIComponent(r)}`,n&&(a+=`&phenomenon_time_max=${encodeURIComponent(n)}`),s&&(a+=`&page=${s}`),a},Mr={fetchSession:async()=>c.fetch(`${fe}`),login:async(e,t)=>c.post(`${fe}`,{email:e,password:t}),logout:async()=>c.delete(`${fe}`),fetchUser:async()=>c.fetch(`${B}`),signup:async e=>c.post(`${B}`,e),updateUser:async(e,t)=>c.patch(`${B}`,e,t),deleteUser:async()=>c.delete(`${B}`),sendVerificationEmail:async e=>c.put(`${B}/email/verify`,{email:e}),verifyEmailWithCode:async e=>c.post(`${B}/email/verify`,{key:e}),requestPasswordReset:async e=>c.post(`${B}/password/request`,{email:e}),resetPassword:async(e,t)=>c.post(`${B}/password/reset`,{key:e,password:t}),fetchWorkspaces:async()=>c.paginatedFetch(`${I}`),fetchAssociatedWorkspaces:async()=>c.paginatedFetch(`${I}?is_associated=true`),fetchWorkspace:async e=>c.fetch(`${I}/${e}`),createWorkspace:async e=>c.post(I,e),updateWorkspace:async(e,t=null)=>c.patch(`${I}/${e.id}`,e,t),deleteWorkspace:async e=>c.delete(`${I}/${e}`),transferWorkspace:async(e,t)=>c.post(`${I}/${e}/transfer`,{newOwner:t}),acceptWorkspaceTransfer:async e=>c.put(`${I}/${e}/transfer`),rejectWorkspaceTransfer:async e=>c.delete(`${I}/${e}/transfer`),getCollaboratorRoles:async e=>c.paginatedFetch(`${Fe}?is_user_role=true`),getAPIKeyRoles:async e=>c.paginatedFetch(`${Fe}?is_apikey_role=true`),getRole:async e=>c.fetch(`${Fe}/${e}`),getCollaborators:async e=>c.paginatedFetch(`${I}/${e}/collaborators`),addCollaborator:async(e,t,r)=>c.post(`${I}/${e}/collaborators`,{email:t,roleId:r}),updateCollaboratorRole:async(e,t,r)=>c.put(`${I}/${e}/collaborators`,{email:t,roleId:r}),removeCollaborator:async(e,t)=>c.delete(`${I}/${e}/collaborators`,{email:t}),fetchApiKeys:async e=>c.paginatedFetch(`${I}/${e}/api-keys?expand_related=true`),fetchApiKey:async(e,t)=>c.fetch(`${I}/${e}/api-keys/${t}?expand_related=true`),createApiKey:async e=>c.post(`${I}/${e.workspaceId}/api-keys?expand_related=true`,{name:e.name,description:e.description,isActive:!0,roleId:e.role.id}),updateApiKey:async(e,t)=>c.patch(`${I}/${e.workspaceId}/api-keys/${e.id}?expand_related=true`,{name:e.name,description:e.description,isActive:!0,roleId:e.role.id},t&&{name:t.name,description:t.description,isActive:!0,roleId:t.role.id}),regenerateApiKey:async(e,t)=>c.put(`${I}/${e}/api-keys/${t}/regenerate?expand_related=true`),deleteApiKey:async(e,t)=>c.delete(`${I}/${e}/api-keys/${t}`),fetchConnectedProviders:async()=>c.fetch(`${te}/connections`),providerRedirect:(e,t,r)=>{const n={provider:e,callback_url:t,process:r},s=be(),a=document.createElement("form");if(a.method="POST",a.action=`${te}/redirect`,s){const o=document.createElement("input");o.type="hidden",o.name="csrfmiddlewaretoken",o.value=s,a.appendChild(o)}for(const o in n){const i=document.createElement("input");i.type="hidden",i.name=o,i.value=n[o]||"",a.appendChild(i)}document.body.appendChild(a),a.submit()},providerSignup:async e=>c.post(`${te}/signup`,e),deleteProvider:async(e,t)=>c.delete(`${te}/connections`,{provider:e,account:t}),createUnit:async e=>c.post(J,e),fetchUnits:async()=>c.paginatedFetch(`${J}`),fetchWorkspaceUnits:async e=>c.paginatedFetch(`${J}?workspace_id=${e}`),updateUnit:async(e,t=null)=>c.patch(`${J}/${e.id}`,e,t),deleteUnit:async e=>c.delete(`${J}/${e}`),getUnit:async e=>c.fetch(`${J}/${e}`),removeThingOwner:async(e,t)=>c.patch(`${T}/${e}/ownership`,{email:t,removeOwner:!0}),addSecondaryOwner:async(e,t)=>c.patch(`${T}/${e}/ownership`,{email:t,makeOwner:!0}),transferPrimaryOwnership:async(e,t)=>c.patch(`${T}/${e}/ownership`,{email:t,transferPrimary:!0}),createThing:async e=>c.post(T,e),fetchThings:async()=>c.paginatedFetch(`${T}`),fetchThingsForWorkspace:async e=>c.paginatedFetch(`${T}?workspace_id=${e}`),fetchOwnedThings:async()=>c.paginatedFetch(`${T}?owned_only=true`),fetchThing:async e=>c.fetch(`${T}/${e}`),updateThing:async e=>c.patch(`${T}/${e.id}`,e),updateThingPrivacy:async(e,t)=>c.patch(`${T}/${e}`,{isPrivate:t}),deleteThing:async e=>c.delete(`${T}/${e}`),fetchMetadataForThingOwner:async e=>c.paginatedFetch(`${T}/${e}/metadata?include_assignable_metadata=true`),fetchMetadataForThing:async e=>c.fetch(`${T}/${e}/metadata`),uploadSitePhotos:async(e,t)=>c.post(`${T}/${e}/photos`,t),fetchSitePhotos:async e=>c.paginatedFetch(`${T}/${e}/photos`),deleteSitePhoto:async(e,t)=>c.delete(`${T}/${e}/photos`,{name:t}),createSiteTag:async(e,t)=>c.post(`${T}/${e}/tags`,t),editSiteTag:async(e,t)=>c.put(`${T}/${e}/tags`,t),fetchSiteTags:async e=>c.fetch(`${T}/${e}/tags`),fetchUsersSiteTags:async()=>c.fetch(`${Pe}`),deleteSiteTag:async(e,t)=>c.delete(`${T}/${e}/tags`,t),fetchWorkspaceTags:async e=>c.fetch(`${Pe}/keys?workspace_id=${e}`),createHydroShareArchive:async e=>c.post(`${T}/${e.thingId}/archive`,e),updateHydroShareArchive:async(e,t)=>c.patch(`${T}/${e.thingId}/archive`,e,t),fetchHydroShareArchive:async e=>c.fetch(`${T}/${e}/archive`),deleteHydroShareArchive:async e=>c.delete(`${T}/${e}/archive`),archiveToHydroShare:async e=>c.post(`${T}/${e}/archive/trigger`),createDatastream:async e=>c.post(U,e),fetchDatastreams:async e=>{const t=[];if(e)for(const[n,s]of Object.entries(e))t.push(`${encodeURIComponent(n)}=${encodeURIComponent(s)}`);const r=t.length?`?${t.join("&")}`:"";return c.paginatedFetch(`${U}${r}`)},fetchDatastreamsForThing:async e=>c.paginatedFetch(`${U}?thing_id=${e}`),fetchExpandedDatastreamsForThing:async e=>c.paginatedFetch(`${U}?thing_id=${e}&expand_related=true`),fetchDatastreamsForDataSource:async e=>c.paginatedFetch(`${U}?data_source_id=${e}`),fetchDatastream:async e=>c.fetch(`${U}/${e}`),fetchDatastreamExpanded:async e=>c.fetch(`${U}/${e}?expand_related=true`),fetchUsersDatastreams:async()=>c.paginatedFetch(`${U}?exclude_unowned=true`),updateDatastream:async(e,t=null)=>c.patch(`${U}/${e.id}`,e,t),deleteDatastream:async e=>c.delete(`${U}/${e}`),downloadDatastreamCSV:async e=>c.fetch(`${U}/${e}/csv`),createObservedProperty:async e=>c.post(q,e),fetchObservedProperty:async e=>c.fetch(`${q}/${e}`),fetchObservedProperties:async()=>c.paginatedFetch(`${q}`),fetchWorkspaceObservedProperties:async e=>c.paginatedFetch(`${q}?workspace_id=${e}`),updateObservedProperty:async(e,t=null)=>c.patch(`${q}/${e.id}`,e,t),deleteObservedProperty:async e=>c.delete(`${q}/${e}`),createProcessingLevel:async e=>c.post(Z,e),fetchProcessingLevels:async()=>c.paginatedFetch(`${Z}`),fetchProcessingLevel:async e=>c.fetch(`${Z}/${e}`),fetchWorkspaceProcessingLevels:async e=>c.paginatedFetch(`${Z}?workspace_id=${e}`),updateProcessingLevel:async(e,t=null)=>c.patch(`${Z}/${e.id}`,e,t),deleteProcessingLevel:async e=>c.delete(`${Z}/${e}`),createSensor:async e=>c.post(z,e),fetchSensors:async()=>c.paginatedFetch(`${z}`),fetchSensor:async e=>c.fetch(`${z}/${e}`),fetchWorkspaceSensors:async e=>c.paginatedFetch(`${z}?workspace_id=${e}`),updateSensor:async(e,t=null)=>c.patch(`${z}/${e.id}`,e,t),deleteSensor:async e=>c.delete(`${z}/${e}`),createResultQualifier:async e=>c.post(re,e),fetchResultQualifiers:async()=>c.paginatedFetch(`${re}`),fetchWorkspaceResultQualifiers:async e=>c.paginatedFetch(`${re}?workspace_id=${e}`),updateResultQualifier:async(e,t=null)=>c.patch(`${re}/${e.id}`,e,t),deleteResultQualifier:async e=>c.delete(`${re}/${e}`),createOrchestrationSystem:async e=>c.post(K,e),fetchOrchestrationSystems:async()=>c.paginatedFetch(K),fetchWorkspaceOrchestrationSystems:async e=>c.paginatedFetch(`${K}?workspace_id=${e}`),fetchOrchestrationSystem:async e=>c.fetch(`${K}/${e}`),updateOrchestrationSystem:async(e,t)=>c.patch(`${K}/${e}`,t),deleteOrchestrationSystem:async e=>c.delete(`${K}/${e}`),createDataSource:async e=>c.post(`${H}?expand_related=true`,Et(e)),fetchDataSources:async()=>c.paginatedFetch(`${H}?expand_related=true`),fetchWorkspaceDataSources:async e=>c.paginatedFetch(`${H}?workspace_id=${e}&expand_related=true`),fetchDataSource:async e=>c.fetch(`${H}/${e}?expand_related=true`),updateDataSource:async e=>c.patch(`${H}/${e.id}?expand_related=true`,Et(e)),updateDataSourcePartial:async e=>c.patch(`${H}/${e.id}?expand_related=true`,e),deleteDataSource:async e=>c.delete(`${H}/${e}`),linkDatastreamToDataSource:async(e,t)=>c.post(`${H}/${e}/datastreams/${t}`),unlinkDatastreamFromDataSource:async(e,t)=>c.delete(`${H}/${e}/datastreams/${t}`),fetchObservations:async e=>c.fetch(e),deleteObservationsForDatastream:async e=>c.post(`${U}/${e}/observations/bulk-delete`,{phenomenonTimeStart:null,phenomenonTimeEnd:null}),fetchUserTypes:async()=>c.fetch(`${B}/user-types`),fetchOrganizationTypes:async()=>c.fetch(`${B}/organization-types`),fetchSiteTypes:async()=>c.fetch(`${T}/site-types`),fetchSamplingFeatureTypes:async()=>c.paginatedFetch(`${T}/sampling-feature-types`),fetchSensorEncodingTypes:async()=>c.paginatedFetch(`${z}/encoding-types`),fetchMethodTypes:async()=>c.paginatedFetch(`${z}/method-types`),fetchVariableTypes:async()=>c.paginatedFetch(`${q}/variable-types`),fetchUnitTypes:async()=>c.paginatedFetch(`${J}/types`),fetchDatastreamStatuses:async()=>c.paginatedFetch(`${U}/statuses`),fetchDatastreamAggregations:async()=>c.paginatedFetch(`${U}/aggregation-statistics`),fetchSampledMediums:async()=>c.paginatedFetch(`${U}/sampled-mediums`)};class Cr{name="";mappings=[];extractorVariables={};constructor(t){Object.assign(this,t)}}const vt=1,de=vt*60,Ne=de*60,Be=Ne*24,Dr=Be*7,Fr=Ne*30,Pr=Be*365,ne={[M.SECOND]:vt,[M.MINUTE]:de,[M.HOUR]:Ne,[M.DAY]:Be,[M.WEEK]:Dr,[M.MONTH]:Fr,[M.YEAR]:Pr},Nr=e=>e.toLocaleString(void 0,{year:"numeric",month:"short",day:"2-digit",hour:"2-digit",hour12:!1,minute:"2-digit",second:"2-digit"}),Br=e=>{let t,r;e>=de*1e3?(t=e/(de*1e3),r="m"):e>=1e3?(t=e/1e3,r="s"):(t=e,r="ms");let n;return r==="ms"?n=Math.round(t).toString():n=t.toFixed(2),`${n} ${r}`},pe=async(e,t)=>{t&&console.info(t);const r=performance.now(),n=await e(),a=+(performance.now()-r);return{response:n,duration:a}};function jr(e,t){const r=new Date(e);return r.setHours(r.getHours()-t),r.toISOString()}const j=(e,t)=>{let r=0,n=e.length;for(;r<n;){const s=r+n>>1;e[s]<t?r=s+1:n=s}return r},W=(e,t)=>{let r=0,n=e.length;for(;r<n;){const s=r+n>>1;e[s]>t?n=s:r=s+1}return r-1},kt=`(function(){"use strict";function c(n,s,a,u,f,l,y,o){let r=0,e=o;for(let t=l;t<=y;t++)r<a.length&&t===a[r]?r++:(u[e]=n[t],f[e]=s[t],e++);return e-o}self.onmessage=n=>{const{bufferX:s,bufferY:a,outputBufferX:u,outputBufferY:f,start:l,end:y,deleteSegment:o,startTarget:r}=n.data,e=new Float64Array(s),t=new Float32Array(a),A=new Float64Array(u),g=new Float32Array(f);c(e,t,o,A,g,l,y,r),self.postMessage("Done")}})();
4
- `,_t=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",kt],{type:"text/javascript;charset=utf-8"});function Wr(e){let t;try{if(t=_t&&(self.URL||self.webkitURL).createObjectURL(_t),!t)throw"";const r=new Worker(t,{name:e?.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(kt),{name:e?.name})}}const At=`(function(){"use strict";function F(n,l,a,o,s,y,g,f,i,w,A){let e=0,t=f;for(let r=y;r<=g;r++)if(o[t]=n[r],s[t]=l[r],t++,e<a.length&&r===a[e][0]){const u=a[e][0],c=a[e][1],d=n[u],h=n[c],m=l[u],D=l[c],x=h-d,P=D-m;let p=d+i;for(;p<h;)o[t]=p,s[t]=w?m+(p-d)*P/x:A,t++,p+=i;e++}return t-f}self.onmessage=n=>{const{bufferX:l,bufferY:a,outputBufferX:o,outputBufferY:s,start:y,end:g,gapsSegment:f,startTarget:i,fillDelta:w,interpolate:A,fillValue:e}=n.data,t=new Float64Array(l),r=new Float32Array(a),u=new Float64Array(o),c=new Float32Array(s);F(t,r,f,u,c,y,g,i,w,A,e),self.postMessage("Done")}})();
5
- `,Tt=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",At],{type:"text/javascript;charset=utf-8"});function xr(e){let t;try{if(t=Tt&&(self.URL||self.webkitURL).createObjectURL(Tt),!t)throw"";const r=new Worker(t,{name:e?.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(At),{name:e?.name})}}const Lt=`(function(){"use strict";function g(o,n,c){for(let s=0;s<c.length;s++){const{indexes:t,lowerIdx:l,upperIdx:r}=c[s],i=o[l],f=n[l],a=o[r],d=n[r],p=a-i,w=d-f;if(p===0){for(let e=0;e<t.length;e++)n[t[e]]=f;continue}for(let e=0;e<t.length;e++){const u=t[e];n[u]=f+(o[u]-i)*w/p}}}self.onmessage=o=>{const{bufferX:n,bufferY:c,groups:s}=o.data,t=new Float64Array(n),l=new Float32Array(c);g(t,l,s),self.postMessage("Done")}})();
6
- `,$t=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Lt],{type:"text/javascript;charset=utf-8"});function Gr(e){let t;try{if(t=$t&&(self.URL||self.webkitURL).createObjectURL($t),!t)throw"";const r=new Worker(t,{name:e?.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Lt),{name:e?.name})}}const Rt=`(function(){"use strict";self.onmessage=r=>{const{bufferX:s,bufferY:o,jobs:a}=r.data,f=new Float64Array(s),n=new Float32Array(o);for(let e=0;e<a.length;e++){const{chunkStart:c,chunkEnd:l,startDatetime:u,value:i,extent:y}=a[e];for(let t=c;t<l;t++)n[t]=n[t]+i*((f[t]-u)/y)}self.postMessage("Done")}})();
7
- `,It=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Rt],{type:"text/javascript;charset=utf-8"});function Yr(e){let t;try{if(t=It&&(self.URL||self.webkitURL).createObjectURL(It),!t)throw"";const r=new Worker(t,{name:e?.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Rt),{name:e?.name})}}const Ot=`(function(){"use strict";function u(f,o,a,n,l,c,s,i){let r=c,e=0,t=i;const w=a.length;for(;r<s&&e<w;){const y=a[e][0];f[r]<=y?(n[t]=f[r],l[t]=o[r],r++):(n[t]=y,l[t]=a[e][1],e++),t++}for(;r<s;)n[t]=f[r],l[t]=o[r],r++,t++;for(;e<w;)n[t]=a[e][0],l[t]=a[e][1],e++,t++;return t-i}self.onmessage=f=>{const{bufferX:o,bufferY:a,outputBufferX:n,outputBufferY:l,origStart:c,origEnd:s,insertions:i,outStart:r}=f.data,e=new Float64Array(o),t=new Float32Array(a),w=new Float64Array(n),y=new Float32Array(l);u(e,t,i,w,y,c,s,r),self.postMessage("Done")}})();
8
- `,Ut=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Ot],{type:"text/javascript;charset=utf-8"});function Hr(e){let t;try{if(t=Ut&&(self.URL||self.webkitURL).createObjectURL(Ut),!t)throw"";const r=new Worker(t,{name:e?.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Ot),{name:e?.name})}}const Mt=`(function(){"use strict";self.onmessage=i=>{const{bufferX:c,bufferY:g,outputBufferX:d,outputBufferY:y,indexes:n,outStart:r,amount:f,isMonth:Y,isYear:h,deltaMs:w}=i.data,s=new Float64Array(c),a=new Float32Array(g),l=new Float64Array(d),u=new Float32Array(y);if(Y)for(let t=0;t<n.length;t++){const e=n[t],o=new Date(s[e]);o.setMonth(o.getMonth()+f),l[r+t]=o.getTime(),u[r+t]=a[e]}else if(h)for(let t=0;t<n.length;t++){const e=n[t],o=new Date(s[e]);o.setFullYear(o.getFullYear()+f),l[r+t]=o.getTime(),u[r+t]=a[e]}else for(let t=0;t<n.length;t++){const e=n[t];l[r+t]=s[e]+w,u[r+t]=a[e]}self.postMessage("Done")}})();
9
- `,Ct=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Mt],{type:"text/javascript;charset=utf-8"});function zr(e){let t;try{if(t=Ct&&(self.URL||self.webkitURL).createObjectURL(Ct),!t)throw"";const r=new Worker(t,{name:e?.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Mt),{name:e?.name})}}const Dt=`(function(){"use strict";function a(e,t,o,c){const n=[];let r=e[t];for(let s=t+1;s<=o;s++){const f=e[s];f-r>c&&n.push(s-1,s),r=f}return n}self.onmessage=e=>{const{bufferX:t,start:o,endInclusive:c,threshold:n}=e.data,r=new Float64Array(t);self.postMessage(a(r,o,c,n))}})();
10
- `,Ft=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Dt],{type:"text/javascript;charset=utf-8"});function Xr(e){let t;try{if(t=Ft&&(self.URL||self.webkitURL).createObjectURL(Ft),!t)throw"";const r=new Worker(t,{name:e?.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Dt),{name:e?.name})}}const Pt=`(function(){"use strict";function c(u,s,t){const n=[];if(s>=t)return n;let e=s,o=u[s];for(let r=s+1;r<t;r++){const f=u[r];f!==o&&(n.push(e,r-e,o),e=r,o=f)}return n.push(e,t-e,o),n}self.onmessage=u=>{const{bufferY:s,start:t,end:n}=u.data,e=new Float32Array(s);self.postMessage(c(e,t,n))}})();
11
- `,Nt=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Pt],{type:"text/javascript;charset=utf-8"});function Vr(e){let t;try{if(t=Nt&&(self.URL||self.webkitURL).createObjectURL(Nt),!t)throw"";const r=new Worker(t,{name:e?.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Pt),{name:e?.name})}}const Bt=`(function(){"use strict";function o(s,i,t,n,l){const f=[];if(n==="Less than")for(let e=i;e<t;e++)s[e]-s[e-1]<l&&f.push(e);else if(n==="Less than or equal to")for(let e=i;e<t;e++)s[e]-s[e-1]<=l&&f.push(e);else if(n==="Greater than")for(let e=i;e<t;e++)s[e]-s[e-1]>l&&f.push(e);else if(n==="Greater than or equal to")for(let e=i;e<t;e++)s[e]-s[e-1]>=l&&f.push(e);else if(n==="Equal")for(let e=i;e<t;e++)s[e]-s[e-1]==l&&f.push(e);return f}self.onmessage=s=>{const{bufferY:i,start:t,end:n,comparator:l,value:f}=s.data,e=new Float32Array(i);self.postMessage(o(e,t,n,l,f))}})();
12
- `,jt=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Bt],{type:"text/javascript;charset=utf-8"});function qr(e){let t;try{if(t=jt&&(self.URL||self.webkitURL).createObjectURL(jt),!t)throw"";const r=new Worker(t,{name:e?.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Bt),{name:e?.name})}}const Wt=`(function(){"use strict";function l(t,i,n,o,h){const f=[];if(o==="Less than")for(let e=i;e<n;e++){const s=t[e-1];(t[e]-s)/Math.abs(s)<h&&f.push(e)}else if(o==="Less than or equal to")for(let e=i;e<n;e++){const s=t[e-1];(t[e]-s)/Math.abs(s)<=h&&f.push(e)}else if(o==="Greater than")for(let e=i;e<n;e++){const s=t[e-1];(t[e]-s)/Math.abs(s)>h&&f.push(e)}else if(o==="Greater than or equal to")for(let e=i;e<n;e++){const s=t[e-1];(t[e]-s)/Math.abs(s)>=h&&f.push(e)}else if(o==="Equal")for(let e=i;e<n;e++){const s=t[e-1];(t[e]-s)/Math.abs(s)==h&&f.push(e)}return f}self.onmessage=t=>{const{bufferY:i,start:n,end:o,comparator:h,value:f}=t.data,e=new Float32Array(i);self.postMessage(l(e,n,o,h,f))}})();
13
- `,xt=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Wt],{type:"text/javascript;charset=utf-8"});function Jr(e){let t;try{if(t=xt&&(self.URL||self.webkitURL).createObjectURL(xt),!t)throw"";const r=new Worker(t,{name:e?.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Wt),{name:e?.name})}}const Gt=`(function(){"use strict";function k(i,l,u,r,c){const f=[],b=r.length;for(let a=l;a<u;a++){const t=i[a];let e=!1;for(let n=0;n<b;n++){const o=r[n],s=c[n];if(o===0){if(t<s){e=!0;break}}else if(o===1){if(t<=s){e=!0;break}}else if(o===2){if(t>s){e=!0;break}}else if(o===3){if(t>=s){e=!0;break}}else if(t==s){e=!0;break}}e&&f.push(a)}return f}self.onmessage=i=>{const{bufferY:l,start:u,end:r,ops:c,values:f}=i.data,b=new Float32Array(l);self.postMessage(k(b,u,r,c,f))}})();
14
- `,Yt=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Gt],{type:"text/javascript;charset=utf-8"});function je(e){let t;try{if(t=Yt&&(self.URL||self.webkitURL).createObjectURL(Yt),!t)throw"";const r=new Worker(t,{name:e?.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Gt),{name:e?.name})}}const Ht=`(function(){"use strict";function e(l,t,o,s){const c=t.length;if(o==="ADD")for(let f=0;f<c;f++)l[t[f]]=l[t[f]]+s;else if(o==="SUB")for(let f=0;f<c;f++)l[t[f]]=l[t[f]]-s;else if(o==="MULT")for(let f=0;f<c;f++)l[t[f]]=l[t[f]]*s;else if(o==="DIV")for(let f=0;f<c;f++)l[t[f]]=l[t[f]]/s;else if(o==="ASSIGN")for(let f=0;f<c;f++)l[t[f]]=s}self.onmessage=l=>{const{bufferY:t,indexes:o,operator:s,value:c}=l.data,f=new Float32Array(t);e(f,o,s,c),self.postMessage("Done")}})();
15
- `,zt=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Ht],{type:"text/javascript;charset=utf-8"});function Qr(e){let t;try{if(t=zt&&(self.URL||self.webkitURL).createObjectURL(zt),!t)throw"";const r=new Worker(t,{name:e?.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Ht),{name:e?.name})}}function Xt(e,t,r,n,s){const a=[],o=n.length;for(let i=t;i<r;i++){const l=e[i];let d=!1;for(let u=0;u<o;u++){const y=n[u],g=s[u];if(y===0){if(l<g){d=!0;break}}else if(y===1){if(l<=g){d=!0;break}}else if(y===2){if(l>g){d=!0;break}}else if(y===3){if(l>=g){d=!0;break}}else if(l==g){d=!0;break}}d&&a.push(i)}return a}function Kr(e,t,r,n,s){const a=[];if(n==="Less than")for(let o=t;o<r;o++)e[o]-e[o-1]<s&&a.push(o);else if(n==="Less than or equal to")for(let o=t;o<r;o++)e[o]-e[o-1]<=s&&a.push(o);else if(n==="Greater than")for(let o=t;o<r;o++)e[o]-e[o-1]>s&&a.push(o);else if(n==="Greater than or equal to")for(let o=t;o<r;o++)e[o]-e[o-1]>=s&&a.push(o);else if(n==="Equal")for(let o=t;o<r;o++)e[o]-e[o-1]==s&&a.push(o);return a}function Zr(e,t,r,n,s){const a=[];if(n==="Less than")for(let o=t;o<r;o++){const i=e[o-1];(e[o]-i)/Math.abs(i)<s&&a.push(o)}else if(n==="Less than or equal to")for(let o=t;o<r;o++){const i=e[o-1];(e[o]-i)/Math.abs(i)<=s&&a.push(o)}else if(n==="Greater than")for(let o=t;o<r;o++){const i=e[o-1];(e[o]-i)/Math.abs(i)>s&&a.push(o)}else if(n==="Greater than or equal to")for(let o=t;o<r;o++){const i=e[o-1];(e[o]-i)/Math.abs(i)>=s&&a.push(o)}else if(n==="Equal")for(let o=t;o<r;o++){const i=e[o-1];(e[o]-i)/Math.abs(i)==s&&a.push(o)}return a}function en(e,t,r,n){const s=[];let a=e[t];for(let o=t+1;o<=r;o++){const i=e[o];i-a>n&&s.push(o-1,o),a=i}return s}function tn(e,t,r){const n=[];if(t>=r)return n;let s=t,a=e[t];for(let o=t+1;o<r;o++){const i=e[o];i!==a&&(n.push(s,o-s,a),s=o,a=i)}return n.push(s,r-s,a),n}function rn(e,t,r,n,s,a,o,i,l,d,u){let y=0,g=i;for(let m=a;m<=o;m++)if(n[g]=e[m],s[g]=t[m],g++,y<r.length&&m===r[y][0]){const S=r[y][0],h=r[y][1],f=e[S],b=e[h],p=t[S],E=t[h],v=b-f,A=E-p;let $=f+l;for(;$<b;)n[g]=$,s[g]=d?p+($-f)*A/v:u,g++,$+=l;y++}return g-i}function nn(e,t,r,n,s,a,o,i){let l=a,d=0,u=i;const y=r.length;for(;l<o&&d<y;){const g=r[d][0];e[l]<=g?(n[u]=e[l],s[u]=t[l],l++):(n[u]=g,s[u]=r[d][1],d++),u++}for(;l<o;)n[u]=e[l],s[u]=t[l],l++,u++;for(;d<y;)n[u]=r[d][0],s[u]=r[d][1],d++,u++;return u-i}function sn(e,t,r,n,s,a,o,i){let l=0,d=i;for(let u=a;u<=o;u++)l<r.length&&u===r[l]?l++:(n[d]=e[u],s[d]=t[u],d++);return d-i}function on(e,t,r,n){const s=r.length,a=new Array(s);if(n.isMonth)for(let o=0;o<s;o++){const i=r[o],l=new Date(e[i]);l.setMonth(l.getMonth()+n.amount),a[o]=[l.getTime(),t[i]]}else if(n.isYear)for(let o=0;o<s;o++){const i=r[o],l=new Date(e[i]);l.setFullYear(l.getFullYear()+n.amount),a[o]=[l.getTime(),t[i]]}else for(let o=0;o<s;o++){const i=r[o];a[o]=[e[i]+n.deltaMs,t[i]]}return a}function an(e,t,r){for(let n=0;n<r.length;n++){const{indexes:s,lowerIdx:a,upperIdx:o}=r[n],i=e[a],l=t[a],d=e[o],u=t[o],y=d-i,g=u-l;if(y===0){for(let m=0;m<s.length;m++)t[s[m]]=l;continue}for(let m=0;m<s.length;m++){const S=s[m];t[S]=l+(e[S]-i)*g/y}}}function cn(e,t,r){for(let n=0;n<r.length;n++){const s=r[n][0],a=r[n][1],o=r[n][2];if(a<=s)continue;const i=e[s],l=e[a]-i;if(l!==0)for(let d=s;d<a;d++)t[d]=t[d]+o*((e[d]-i)/l)}}function Vt(e,t,r,n){const s=t.length;if(r==="ADD")for(let a=0;a<s;a++)e[t[a]]=e[t[a]]+n;else if(r==="SUB")for(let a=0;a<s;a++)e[t[a]]=e[t[a]]-n;else if(r==="MULT")for(let a=0;a<s;a++)e[t[a]]=e[t[a]]*n;else if(r==="DIV")for(let a=0;a<s;a++)e[t[a]]=e[t[a]]/n;else if(r==="ASSIGN")for(let a=0;a<s;a++)e[t[a]]=n}const We="qc-utils:calibration:v1",ln=720*60*60*1e3,ye=5e4,ge=2e5,me={spawnOverheadMs:50,inlineThroughput:5e4,workerThroughput:8e4,hwConcurrency:4,measuredAt:0,userAgent:"default"};let C=mn()??me,xe=null,se=null;const Ge=new Set,Ye={[L.VALUE_THRESHOLD]:{mode:"calibrated",weight:1,rationale:"O(n) single-pass scan; baseline reference"},[L.CHANGE]:{mode:"calibrated",weight:1.1,rationale:"O(n) with one subtraction per step"},[L.RATE_OF_CHANGE]:{mode:"calibrated",weight:1.4,rationale:"O(n) with division + abs per step"},[L.FIND_GAPS]:{mode:"calibrated",weight:.9,rationale:"O(n) on X only, mostly empty output"},[L.PERSISTENCE]:{mode:"calibrated",weight:1.3,rationale:"O(n) + chunk-boundary stitch"},[L.DATETIME_RANGE]:{mode:"always-inline",weight:0,rationale:"O(log n) binary search; never worth the worker hop"},[L.SELECTION]:{mode:"always-inline",weight:0,rationale:"Pure history bookkeeping"},[k.CHANGE_VALUES]:{mode:"calibrated",weight:.7,rationale:"O(k) in-place arithmetic on selection"},[k.ASSIGN_VALUES_BULK]:{mode:"always-inline",weight:0,rationale:"Single tight loop, already inline"},[k.ASSIGN_DATETIMES_BULK]:{mode:"always-inline",weight:0,rationale:"Composes delete+add which handle their own dispatch"},[k.INTERPOLATE]:{mode:"calibrated",weight:1.5,rationale:"Linear interp per consecutive group; in-place writes"},[k.DRIFT_CORRECTION]:{mode:"calibrated",weight:1.2,rationale:"O(range total) in-place math; one pass per range"},[k.SHIFT_DATETIMES]:{mode:"calibrated",weight:1.1,rationale:"O(k) per-point shift math; inline skips SAB allocation"},[k.ADD_POINTS]:{mode:"calibrated",weight:1.8,rationale:"Single merge pass over Y/X + insertions; fresh SAB per call"},[k.DELETE_POINTS]:{mode:"calibrated",weight:1.4,rationale:"Single skip-on-delete pass over Y/X; fresh SAB per call"},[k.FILL_GAPS]:{mode:"calibrated",weight:1.3,rationale:"Single copy-with-fills pass; fresh SAB sized to newLength"}};function P(e,t){const r=Ye[e];if(!r)return{useWorker:!0,predictedInlineMs:1/0,predictedWorkerMs:0,reason:"unknown op; keeping default worker path"};if(r.mode==="always-inline")return{useWorker:!1,predictedInlineMs:0,predictedWorkerMs:0,reason:r.rationale};if(typeof SharedArrayBuffer>"u")return{useWorker:!1,predictedInlineMs:0,predictedWorkerMs:1/0,reason:"SharedArrayBuffer unavailable; forced inline"};if(r.mode==="always-worker")return{useWorker:!0,predictedInlineMs:1/0,predictedWorkerMs:0,reason:r.rationale};const n=un(e,t);if(n<=0)return{useWorker:!1,predictedInlineMs:0,predictedWorkerMs:C.spawnOverheadMs,reason:"zero work units"};const s=Math.max(1,Math.min(t.parallelism??C.hwConcurrency,C.hwConcurrency)),a=r.weight*n/C.inlineThroughput,o=C.spawnOverheadMs+r.weight*n/(C.workerThroughput*s),i=a>o;return{useWorker:i,predictedInlineMs:a,predictedWorkerMs:o,reason:i?`worker faster (${o.toFixed(1)} vs ${a.toFixed(1)} ms)`:`inline faster (${a.toFixed(1)} vs ${o.toFixed(1)} ms)`}}function un(e,t){switch(e){case k.CHANGE_VALUES:case k.INTERPOLATE:case k.SHIFT_DATETIMES:case k.DRIFT_CORRECTION:return t.selectionSize??0;case k.DELETE_POINTS:return(t.selectionSize??0)+t.datasetSize*.25;case k.ADD_POINTS:{const r=Math.max(1,Math.log2(Math.max(t.datasetSize,2)));return t.datasetSize+(t.selectionSize??0)*r}default:return t.datasetSize}}function hn(e){return Ge.add(e),()=>Ge.delete(e)}function fn(){return C}function dn(){return xe}function pn(){return Object.keys(Ye).map(e=>({op:e,...Ye[e]}))}function yn(){C=me,xe=null;try{localStorage.removeItem(We)}catch{}}async function gn(e={}){if(typeof window>"u"||!(e.force||C.measuredAt===0||Date.now()-C.measuredAt>ln))return C;if(se)await se;else{se=qt().finally(()=>{se=null});const r=await se;C=r,wn(r),xe=r;for(const n of Ge)n(C)}return C}async function qt(){if(!(typeof SharedArrayBuffer<"u"))return{...me,measuredAt:Date.now(),userAgent:navigator.userAgent,hwConcurrency:navigator.hardwareConcurrency||me.hwConcurrency,sharedArrayBufferAvailable:!1,samples:{spawnRoundtripMs:[],inlineScanMs:[],workerScanMs:[]}};const t=navigator.hardwareConcurrency||4,r=new Float32Array(ye);for(let h=0;h<ye;h++)r[h]=Math.sin(h);const n=await He(3,()=>{const h=performance.now();return Xt(r,0,ye,[2],[.5]),performance.now()-h}),s=ze(n),a=ye/Math.max(s,.001),o=new SharedArrayBuffer(256*Float32Array.BYTES_PER_ELEMENT),i=await He(3,async()=>{const h=performance.now();return await new Promise(f=>{const b=new je;b.onmessage=()=>{b.terminate(),f()},b.postMessage({bufferY:o,start:0,end:256,ops:[2],values:[.5]})}),performance.now()-h}),l=ze(i),d=new SharedArrayBuffer(ge*Float32Array.BYTES_PER_ELEMENT),u=new Float32Array(d);for(let h=0;h<ge;h++)u[h]=Math.sin(h);const y=await He(3,async()=>{const h=performance.now();return await new Promise(f=>{const b=new je;b.onmessage=()=>{b.terminate(),f()},b.postMessage({bufferY:d,start:0,end:ge,ops:[2],values:[.5]})}),performance.now()-h}),g=Math.max(ze(y)-l,.1),m=ge/g;return{spawnOverheadMs:l,inlineThroughput:a,workerThroughput:m,hwConcurrency:t,measuredAt:Date.now(),userAgent:navigator.userAgent,sharedArrayBufferAvailable:!0,samples:{spawnRoundtripMs:i,inlineScanMs:n,workerScanMs:y}}}async function He(e,t){const r=[];for(let n=0;n<e;n++)await new Promise(s=>setTimeout(s,0)),r.push(await t());return r}function ze(e){if(!e.length)return 0;const t=[...e].sort((n,s)=>n-s),r=Math.floor(t.length/2);return t.length%2?t[r]:(t[r-1]+t[r])/2}function mn(){if(typeof localStorage>"u")return null;try{const e=localStorage.getItem(We);if(!e)return null;const t=JSON.parse(e);return!t||typeof t.spawnOverheadMs!="number"?null:t}catch{return null}}function wn(e){if(!(typeof localStorage>"u"))try{const t={spawnOverheadMs:e.spawnOverheadMs,inlineThroughput:e.inlineThroughput,workerThroughput:e.workerThroughput,hwConcurrency:e.hwConcurrency,measuredAt:e.measuredAt,userAgent:e.userAgent};localStorage.setItem(We,JSON.stringify(t))}catch{}}const ee=20*1e3,bn=1024,Sn=["date","value","qualifier"],En=typeof SharedArrayBuffer<"u";function D(e,t){return En?t!==void 0?new SharedArrayBuffer(e,{maxByteLength:t}):new SharedArrayBuffer(e):t!==void 0?new ArrayBuffer(e,{maxByteLength:t}):new ArrayBuffer(e)}function Jt(e,t){const r=e;typeof r.grow=="function"?r.grow(t):typeof r.resize=="function"&&r.resize(t)}function vn(e,t){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0}function kn(e,t){switch(e){case k.ADD_POINTS:case k.FILL_GAPS:return!1;default:return!0}}class _n{dataset={dimensions:Sn,source:{x:new Float64Array(D(ee*Float64Array.BYTES_PER_ELEMENT,ee*Float64Array.BYTES_PER_ELEMENT)),y:new Float32Array(D(ee*Float32Array.BYTES_PER_ELEMENT,ee*Float32Array.BYTES_PER_ELEMENT))}};history=[];redoStack=[];_isReplaying=!1;_pendingExecutionMode="inline";loadingTime=null;isLoading=!0;rawData;constructor(t){this.history=[],this.rawData=t,this.loadData(this.rawData)}async loadData(t){if(!t)return;this.isLoading=!0;const r=await pe(()=>{this._growBuffer(t.datetimes.length),this._resizeTo(t.datetimes.length),this.dataX.set(t.datetimes),this.dataY.set(t.dataValues)});this.loadingTime=r.duration,this.history.length=0,this.isLoading=!1}get dataX(){return this.dataset.source.x}get dataY(){return this.dataset.source.y}_resizeTo(t){this.dataset.source.x=new Float64Array(this.dataset.source.x.buffer).subarray(0,t),this.dataset.source.y=new Float32Array(this.dataset.source.y.buffer).subarray(0,t)}_growBuffer(t){const r=t*Float64Array.BYTES_PER_ELEMENT;let n=this.dataX.buffer.byteLength;for(;r>n;)n+=ee*Float64Array.BYTES_PER_ELEMENT;if(n*Float64Array.BYTES_PER_ELEMENT>this.dataX.buffer.maxByteLength){const s=D(this.dataX.buffer.byteLength,n*Float64Array.BYTES_PER_ELEMENT),a=D(this.dataY.buffer.byteLength,n*Float32Array.BYTES_PER_ELEMENT),o=new Float64Array(s),i=new Float32Array(a);o.set(this.dataX),i.set(this.dataY),this.dataset.source.x=o,this.dataset.source.y=i}this.dataX.buffer.byteLength<t*Float64Array.BYTES_PER_ELEMENT&&(Jt(this.dataX.buffer,t*Float64Array.BYTES_PER_ELEMENT),Jt(this.dataY.buffer,t*Float32Array.BYTES_PER_ELEMENT))}async reload(){this.loadingTime=null,this.isLoading=!0,this.history.length=0,await this.loadData(this.rawData)}async reloadHistory(t){const r=this.history.slice(0,t+1);return this.redoStack.length=0,await this.reload(),await this.dispatch(r.map(n=>[n.method,...n.args||[]]))}async removeHistoryItem(t){const r=[...this.history];return r.splice(t,1),this.redoStack.length=0,await this.reload(),await this.dispatch(r.map(n=>[n.method,...n.args||[]]))}async undo(){if(!this.history.length)return[];const t=this.history[this.history.length-1],r=this.history.slice(0,-1);await this.reload(),this.redoStack.push(t),this._isReplaying=!0;try{return await this.dispatch(r.map(n=>[n.method,...n.args||[]]))}finally{this._isReplaying=!1}}async redo(){if(!this.redoStack.length)return[];const t=this.redoStack.pop();this._isReplaying=!0;try{return await this.dispatch([[t.method,...t.args||[]]])}finally{this._isReplaying=!1}}get beginTime(){return this.dataset.source.x.length?new Date(this.dataset.source.x[0]):null}get endTime(){return this.dataset.source.x.length?new Date(this.dataset.source.x[this.dataset.source.x.length-1]):null}async dispatchAction(t,...r){const n={[k.ADD_POINTS]:this._addDataPoints,[k.CHANGE_VALUES]:this._changeValues,[k.ASSIGN_VALUES_BULK]:this._assignValuesBulk,[k.DELETE_POINTS]:this._deleteDataPointsFromSelection,[k.DRIFT_CORRECTION]:this._driftCorrectionFromSelection,[k.INTERPOLATE]:this._interpolateFromSelection,[k.SHIFT_DATETIMES]:this._shiftFromSelection,[k.ASSIGN_DATETIMES_BULK]:this._assignDatetimesBulk,[k.FILL_GAPS]:this._fillGaps};let s=[],a=null;try{this._isReplaying||(this.redoStack.length=0),a={method:t,args:r,isLoading:!0},this.history.push(a),kn(t,r)||this.history[this.history.length-2]?.method===L.SELECTION&&this.history.splice(this.history.length-2,1),this._pendingExecutionMode="inline";const o=await pe(async()=>await n[t].apply(this,r));s=o.response;const i=this.history.indexOf(a),l=i>=0?this.history[i]:void 0;l&&(l.duration=o.duration,l.executionMode=this._pendingExecutionMode,l.status="success",l.isLoading=!1)}catch{if(a){const i=this.history.indexOf(a),l=i>=0?this.history[i]:void 0;l&&(l.status="failed",l.isLoading=!1)}}return s}async dispatch(t,...r){const n=async(s,a)=>L[s]?await this.dispatchFilter(s,...a):await this.dispatchAction(s,...a);if(Array.isArray(t)){let s=[];for(let a=0;a<t.length;a++){const o=t[a][0],i=t[a].slice(1,t[a].length);s=await n(o,i)}return s}else return await n(t,r)}async dispatchFilter(t,...r){const n={[L.FIND_GAPS]:this._findGaps,[L.VALUE_THRESHOLD]:this._valueThreshold,[L.DATETIME_RANGE]:this._datetimeRange,[L.PERSISTENCE]:this._persistence,[L.CHANGE]:this._change,[L.RATE_OF_CHANGE]:this._rateOfChange,[L.SELECTION]:this._selection};let s=[],a=null;try{const o=t===L.SELECTION,i=o&&(!r[0]||Array.isArray(r[0])&&r[0].length===0);!this._isReplaying&&!i&&(this.redoStack.length=0),a={method:t,args:r,isLoading:!0};const l=this.history[this.history.length-1],d=!!L[l?.method],u=l?.method===t||d&&!o;let y;u?(y=this.history.length-1,this.history[y]=a):(this.history.push(a),y=this.history.length-1),this._pendingExecutionMode="inline";const g=await pe(async()=>await n[t].apply(this,r));s=g.response;const m=this.history.indexOf(a),S=m>=0?this.history[m]:void 0;S&&(S.duration=g.duration,S.executionMode=this._pendingExecutionMode,S.selected=g.response,S.status="success",S.isLoading=!1)}catch(o){if(console.log(`Failed to execute filter operation: ${t} with arguments: `,r),console.log(o),a){const i=this.history.indexOf(a),l=i>=0?this.history[i]:void 0;l&&(l.status="failed",l.isLoading=!1)}}return s}async _changeValues(t,r){const n=this.history[this.history.length-2]?.selected;if(!n||n.length===0)return[];const s=n.length;if(!P(k.CHANGE_VALUES,{datasetSize:this.dataset.source.y.length,selectionSize:s}).useWorker||s<bn)return Vt(this.dataY,n,t,r),[];this._pendingExecutionMode="worker";const o=Math.min(navigator.hardwareConcurrency||1,s),i=Math.ceil(s/o),l=[],d=[];for(let u=0;u<o;u++){const y=u*i,g=Math.min((u+1)*i,s);if(y>=g)break;const m=n.slice(y,g);d.push(new Promise(S=>{const h=new Qr;l.push(h),h.postMessage({bufferY:this.dataY.buffer,indexes:m,operator:t,value:r}),h.onmessage=f=>{S(f.data)}}))}return await Promise.all(d),l.forEach(u=>u.terminate()),[]}_applyOperatorInPlace(t,r,n){Vt(this.dataY,t,r,n)}async _assignValuesBulk(t){const r=this.history[this.history.length-2]?.selected;if(!r||!r.length||!t?.length)return[];const n=Math.min(r.length,t.length),s=this.dataY;for(let a=0;a<n;a++)s[r[a]]=t[a];return[]}async _assignDatetimesBulk(t){const r=this.history[this.history.length-2]?.selected;if(!r||!r.length||!t?.length)return[];const n=Math.min(r.length,t.length),s=new Array(n),a=new Array(n);for(let o=0;o<n;o++)s[o]=[t[o],this.dataY[r[o]]],a[o]=r[o];return a.sort((o,i)=>o-i),await this._deleteDataPoints(a),await this._addDataPoints(s),[]}async _interpolateFromSelection(){const t=this.history[this.history.length-2]?.selected;if(!(!t||t.length===0))return this._interpolate(t)}async _interpolate(t){const r=this._getConsecutiveGroups(t);if(r.length===0||r[0].length===0)return;const n=this.dataset.source.y.length,s=r.map(u=>({indexes:u,lowerIdx:Math.max(0,u[0]-1),upperIdx:Math.min(n-1,u[u.length-1]+1)}));if(!P(k.INTERPOLATE,{datasetSize:n,selectionSize:t.length}).useWorker){an(this.dataX,this.dataY,s);return}this._pendingExecutionMode="worker";const o=Math.min(navigator.hardwareConcurrency||1,s.length),i=Math.ceil(s.length/o),l=[],d=[];for(let u=0;u<o;u++){const y=s.slice(u*i,(u+1)*i);if(y.length===0)break;d.push(new Promise(g=>{const m=new Gr;l.push(m),m.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,groups:y}),m.onmessage=S=>{g(S.data)}}))}await Promise.all(d),l.forEach(u=>u.terminate())}async _shiftFromSelection(t,r){const n=this.history[this.history.length-2]?.selected;return!n||n.length===0?[]:await this._shift(n,t,r)??[]}async _shift(t,r,n){if(t.length===0)return[];const s=n===M.MONTH,a=n===M.YEAR,o=!s&&!a?r*ne[n]*1e3:0,i=t.length;if(!P(k.SHIFT_DATETIMES,{datasetSize:this.dataset.source.x.length,selectionSize:i}).useWorker){const p=on(this.dataX,this.dataY,t,{amount:r,isMonth:s,isYear:a,deltaMs:o});return await this._deleteDataPoints(t),await this._addDataPoints(p)??[]}this._pendingExecutionMode="worker";const d=D(i*Float64Array.BYTES_PER_ELEMENT),u=D(i*Float32Array.BYTES_PER_ELEMENT),y=Math.min(navigator.hardwareConcurrency||1,i),g=Math.ceil(i/y),m=[],S=[];for(let p=0;p<y;p++){const E=p*g,v=Math.min((p+1)*g,i);if(E>=v)break;const A=t.slice(E,v);S.push(new Promise($=>{const R=new zr;m.push(R),R.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,outputBufferX:d,outputBufferY:u,indexes:A,outStart:E,amount:r,isMonth:s,isYear:a,deltaMs:o}),R.onmessage=O=>{$(O.data)}}))}await Promise.all(S),m.forEach(p=>p.terminate());const h=new Float64Array(d),f=new Float32Array(u),b=new Array(i);for(let p=0;p<i;p++)b[p]=[h[p],f[p]];return await this._deleteDataPoints(t),await this._addDataPoints(b)??[]}async _fillGaps(t,r,n,s,a){const o=this.dataX.length;if(o===0)return[];const i=t[0]*ne[t[1]]*1e3,l=r[0]*ne[r[1]]*1e3,d=this.dataX,u=a?.[0]!=null&&Number.isFinite(a[0])?j(d,a[0]):0,y=a?.[1]!=null&&Number.isFinite(a[1])?W(d,a[1]):o-1,g=[],m=[];let S=0;for(let _=u+1;_<=y;_++)if(d[_]-d[_-1]>i){let N=0,x=d[_-1]+l;for(;x<d[_];)N++,x+=l;N>0&&(g.push([_-1,_]),m.push(N),S+=N)}if(S===0)return[];const h=new Array(S);let f=0,b=0;for(let _=0;_<g.length;_++){const G=g[_][0],N=m[_];for(let x=1;x<=N;x++)h[b++]=G+f+x;f+=N}const p=o+S,E=p*Float64Array.BYTES_PER_ELEMENT,v=p*Float32Array.BYTES_PER_ELEMENT,A=D(E,Math.max(this.dataX.buffer.maxByteLength,E)),$=D(v,Math.max(this.dataY.buffer.maxByteLength,v));if(!P(k.FILL_GAPS,{datasetSize:o,selectionSize:S}).useWorker){const _=new Float64Array(A),G=new Float32Array($);return rn(this.dataX,this.dataY,g,_,G,0,o-1,0,l,n,s),this.dataset.source.x=_,this.dataset.source.y=G,this._resizeTo(p),h}this._pendingExecutionMode="worker";const O=navigator.hardwareConcurrency||1,Qt=Math.ceil(o/O),Xe=[];let ae=0;for(let _=0;_<O;_++){const G=_*Qt,N=Math.min((_+1)*Qt-1,o-1),x=[];let we=0;for(;ae<g.length&&g[ae][0]<=N;)x.push(g[ae]),we+=m[ae],ae++;Xe.push({start:G,end:N,gapsSegment:x,fillsInSegment:we})}const Ve=new Array(O).fill(0);for(let _=1;_<O;_++)Ve[_]=Ve[_-1]+Xe[_-1].fillsInSegment;const Kt=[],Zt=[];for(let _=0;_<O;_++){const{start:G,end:N,gapsSegment:x}=Xe[_],we=G+Ve[_];Zt.push(new Promise(Rn=>{const qe=new xr;Kt.push(qe),qe.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,outputBufferX:A,outputBufferY:$,start:G,end:N,gapsSegment:x,startTarget:we,fillDelta:l,interpolate:n,fillValue:s}),qe.onmessage=In=>{Rn(In.data)}}))}return await Promise.all(Zt),Kt.forEach(_=>_.terminate()),this.dataset.source.x=new Float64Array(A),this.dataset.source.y=new Float32Array($),this._resizeTo(p),h}async _deleteDataPointsFromSelection(){const t=this.history[this.history.length-2]?.selected;if(!(!t||t.length===0))return this._deleteDataPoints(t)}async _deleteDataPoints(t){const r=this.dataX.length,n=r-t.length;if(!P(k.DELETE_POINTS,{datasetSize:r,selectionSize:t.length}).useWorker){const m=D(this.dataX.buffer.byteLength,this.dataX.buffer.maxByteLength),S=D(this.dataY.buffer.byteLength,this.dataY.buffer.maxByteLength),h=new Float64Array(m),f=new Float32Array(S);sn(this.dataX,this.dataY,t,h,f,0,r-1,0),this.dataset.source.x=h,this.dataset.source.y=f,this._resizeTo(n);return}this._pendingExecutionMode="worker";const a=navigator.hardwareConcurrency||1,o=Math.ceil(this.dataX.length/a),i=[],l=[];for(let m=0;m<a;m++){const S=m*o,h=Math.min((m+1)*o-1,this.dataX.length-1),f=j(t,S),b=W(t,h),p=t.slice(f,b+1);l.push({start:S,end:h,deleteSegment:p})}const d=new Array(a).fill(0);for(let m=1;m<a;m++)d[m]=d[m-1]+l[m-1].deleteSegment.length;const u=[],y=D(this.dataX.buffer.byteLength,this.dataX.buffer.maxByteLength),g=D(this.dataY.buffer.byteLength,this.dataY.buffer.maxByteLength);for(let m=0;m<a;m++){const{start:S,end:h,deleteSegment:f}=l[m],b=S-d[m];u.push(new Promise(p=>{const E=new Wr;i.push(E),E.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,outputBufferX:y,outputBufferY:g,start:S,end:h,deleteSegment:f,startTarget:b}),E.onmessage=v=>{p(v.data)}}))}await Promise.all(u),i.forEach(m=>m.terminate()),this.dataset.source.x=new Float64Array(y),this.dataset.source.y=new Float32Array(g),this._resizeTo(n)}async _driftCorrectionFromSelection(t){const r=this.history[this.history.length-2]?.selected;if(!r||r.length===0)return;const n=this._getConsecutiveGroups(r),s=[];for(const a of n)a.length!==0&&s.push([a[0],a[a.length-1],t]);if(s.length!==0)return this._driftCorrection(s)}async _driftCorrection(t){if(!t||t.length===0)return;const r=this.dataset.source.x,n=navigator.hardwareConcurrency||1;let s=0;for(const[y,g]of t)g>y&&(s+=g-y);if(!P(k.DRIFT_CORRECTION,{datasetSize:r.length,selectionSize:s}).useWorker){cn(r,this.dataY,t);return}this._pendingExecutionMode="worker";const o=[];for(const[y,g,m]of t){if(g<=y)continue;const S=r[y],h=r[g]-S;if(h===0)continue;const f=g-y,b=Math.max(1,Math.ceil(f/n));for(let p=y;p<g;p+=b)o.push({chunkStart:p,chunkEnd:Math.min(p+b,g),startDatetime:S,value:m,extent:h})}if(o.length===0)return;const i=Math.min(n,o.length),l=Array.from({length:i},()=>[]);o.forEach((y,g)=>l[g%i].push(y));const d=[],u=[];for(const y of l)y.length!==0&&u.push(new Promise(g=>{const m=new Yr;d.push(m),m.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,jobs:y}),m.onmessage=S=>{g(S.data)}}));await Promise.all(u),d.forEach(y=>y.terminate())}_getConsecutiveGroups(t){const r=[[]];return t.reduce((n,s)=>{const a=n[n.length-1];return!a.length||s==a[a.length-1]+1?a.push(s):n.push([s]),n},r),r}async _addDataPoints(t){if(t.length===0)return[];const r=this.dataX.length,n=r+t.length;t.sort((h,f)=>h[0]-f[0]);const s=new Array(t.length);for(let h=0;h<t.length;h++){const f=t[h][0],b=W(this.dataX,f)+1;s[h]=b+h}const a=n*Float64Array.BYTES_PER_ELEMENT,o=n*Float32Array.BYTES_PER_ELEMENT,i=D(a,Math.max(this.dataX.buffer.maxByteLength,a)),l=D(o,Math.max(this.dataY.buffer.maxByteLength,o));if(!P(k.ADD_POINTS,{datasetSize:r,selectionSize:t.length}).useWorker){const h=new Float64Array(i),f=new Float32Array(l);return nn(this.dataX,this.dataY,t,h,f,0,r,0),this.dataset.source.x=h,this.dataset.source.y=f,this._resizeTo(n),s}this._pendingExecutionMode="worker";const u=t.map(h=>W(this.dataX,h[0])+1),y=Math.max(1,Math.min(navigator.hardwareConcurrency||1,Math.max(r,1))),g=Math.ceil(Math.max(r,1)/y),m=[],S=[];for(let h=0;h<y;h++){const f=h*g,b=Math.min((h+1)*g,r),p=j(u,f),E=h===y-1?t.length:j(u,b),v=t.slice(p,E),A=f+p;f>=b&&v.length===0||S.push(new Promise($=>{const R=new Hr;m.push(R),R.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,outputBufferX:i,outputBufferY:l,origStart:f,origEnd:b,insertions:v,outStart:A}),R.onmessage=O=>{$(O.data)}}))}return await Promise.all(S),m.forEach(h=>h.terminate()),this.dataset.source.x=new Float64Array(i),this.dataset.source.y=new Float32Array(l),this._resizeTo(n),s}async _valueThreshold(t,r){const n=Object.keys(t);if(n.length===0)return[];const s={[X.LT]:0,[X.LTE]:1,[X.GT]:2,[X.GTE]:3,[X.E]:4},a=n.map(E=>s[E]??4),o=n.map(E=>t[E]),i=this.dataset.source.y,l=this.dataset.source.x;let d=0,u=i.length;if(u===0)return[];if(r!=null){const[E,v]=r;E!=null&&Number.isFinite(E)&&(d=j(l,E)),v!=null&&Number.isFinite(v)&&(u=W(l,v)+1)}if(u<=d)return[];const y=u-d;if(!P(L.VALUE_THRESHOLD,{datasetSize:y}).useWorker)return Xt(i,d,u,a,o);this._pendingExecutionMode="worker";const m=Math.min(navigator.hardwareConcurrency||1,y),S=Math.ceil(y/m),h=[],f=[];for(let E=0;E<m;E++){const v=d+E*S,A=Math.min(d+(E+1)*S,u);if(v>=A)break;f.push(new Promise($=>{const R=new je;h.push(R),R.postMessage({bufferY:this.dataY.buffer,start:v,end:A,ops:a,values:o}),R.onmessage=O=>{$(O.data)}}))}const b=await Promise.all(f);h.forEach(E=>E.terminate());const p=[];for(let E=0;E<b.length;E++){const v=b[E];for(let A=0;A<v.length;A++)p.push(v[A])}return p}async _rateOfChange(t,r,n){const s=this.dataset.source.y,a=this.dataset.source.x;if(s.length<2)return[];let o=1,i=s.length;if(n!=null){const[f,b]=n;f!=null&&Number.isFinite(f)&&(o=Math.max(1,j(a,f))),b!=null&&Number.isFinite(b)&&(i=W(a,b)+1)}if(i<=o)return[];const l=i-o;if(!P(L.RATE_OF_CHANGE,{datasetSize:s.length}).useWorker)return Zr(s,o,i,t,r);this._pendingExecutionMode="worker";const u=Math.min(navigator.hardwareConcurrency||1,l),y=Math.ceil(l/u),g=[],m=[];for(let f=0;f<u;f++){const b=o+f*y,p=Math.min(o+(f+1)*y,i);if(b>=p)break;m.push(new Promise(E=>{const v=new Jr;g.push(v),v.postMessage({bufferY:this.dataY.buffer,start:b,end:p,comparator:t,value:r}),v.onmessage=A=>{E(A.data)}}))}const S=await Promise.all(m);g.forEach(f=>f.terminate());const h=[];for(let f=0;f<S.length;f++){const b=S[f];for(let p=0;p<b.length;p++)h.push(b[p])}return h}async _datetimeRange(t,r){const n=this.dataset.source.x,s=n.length;if(s===0)return[];const a=t==null?0:j(n,t),o=r==null?s-1:W(n,r);if(a>o)return[];const i=new Array(o-a+1);for(let l=a;l<=o;l++)i[l-a]=l;return i}async _selection(t){const r=this.history[this.history.length-2],n=!!r&&r.method!==L.SELECTION&&!!L[r.method],s=n&&Array.isArray(r.selected)?r.selected:void 0;return!t||!t.length?(this.history.pop(),s&&s.length>0&&this.history.pop(),t):(s&&vn(s,t)?this.history.pop():n&&this.history.splice(this.history.length-2,1),t)}async _change(t,r,n){const s=this.dataset.source.y,a=this.dataset.source.x;if(s.length<2)return[];let o=1,i=s.length;if(n!=null){const[f,b]=n;f!=null&&Number.isFinite(f)&&(o=Math.max(1,j(a,f))),b!=null&&Number.isFinite(b)&&(i=W(a,b)+1)}if(i<=o)return[];const l=i-o;if(!P(L.CHANGE,{datasetSize:s.length}).useWorker)return Kr(s,o,i,t,r);this._pendingExecutionMode="worker";const u=Math.min(navigator.hardwareConcurrency||1,l),y=Math.ceil(l/u),g=[],m=[];for(let f=0;f<u;f++){const b=o+f*y,p=Math.min(o+(f+1)*y,i);if(b>=p)break;m.push(new Promise(E=>{const v=new qr;g.push(v),v.postMessage({bufferY:this.dataY.buffer,start:b,end:p,comparator:t,value:r}),v.onmessage=A=>{E(A.data)}}))}const S=await Promise.all(m);g.forEach(f=>f.terminate());const h=[];for(let f=0;f<S.length;f++){const b=S[f];for(let p=0;p<b.length;p++)h.push(b[p])}return h}async _findGaps(t,r,n){const s=this.dataset.source.x;let a=0,o=s.length;if(n!=null){const[f,b]=n;f!=null&&Number.isFinite(f)&&(a=j(s,f)),b!=null&&Number.isFinite(b)&&(o=W(s,b)+1)}if(o<=a)return[];const i=t*ne[r]*1e3;if(!P(L.FIND_GAPS,{datasetSize:o-a}).useWorker){const f=en(s,a,o-1,i),b=new Set;for(let p=0;p<f.length;p++)b.add(f[p]);return[...b]}this._pendingExecutionMode="worker";const d=o-a,u=Math.min(navigator.hardwareConcurrency||1,d),y=Math.ceil(d/u),g=[],m=[];for(let f=0;f<u;f++){const b=a+f*y,p=Math.min(a+(f+1)*y,o);if(b>=p)break;m.push(new Promise(E=>{const v=new Xr;g.push(v),v.postMessage({bufferX:this.dataX.buffer,start:b,endInclusive:p,threshold:i}),v.onmessage=A=>{E(A.data)}}))}const S=await Promise.all(m);g.forEach(f=>f.terminate());const h=new Set;for(let f=0;f<S.length;f++){const b=S[f];for(let p=0;p<b.length;p++)h.add(b[p])}return[...h]}async _persistence(t,r){const n=this.dataset.source.x,s=this.dataset.source.y;let a=0,o=s.length;if(r!=null){const[p,E]=r;p!=null&&Number.isFinite(p)&&(a=j(n,p)),E!=null&&Number.isFinite(E)&&(o=W(n,E)+1)}if(o<=a)return[];const i=o-a;if(!P(L.PERSISTENCE,{datasetSize:i}).useWorker){const p=tn(s,a,o),E=[];for(let v=0;v<p.length;v+=3){const A=p[v],$=p[v+1];if($>=t)for(let R=0;R<$;R++)E.push(A+R)}return E}this._pendingExecutionMode="worker";const d=Math.min(navigator.hardwareConcurrency||1,i),u=Math.ceil(i/d),y=[],g=[];for(let p=0;p<d;p++){const E=a+p*u,v=Math.min(a+(p+1)*u,o);if(E>=v)break;g.push(new Promise(A=>{const $=new Vr;y.push($),$.postMessage({bufferY:this.dataY.buffer,start:E,end:v}),$.onmessage=R=>{A(R.data)}}))}const m=await Promise.all(g);y.forEach(p=>p.terminate());const S=[],h=[],f=[];for(let p=0;p<m.length;p++){const E=m[p];for(let v=0;v<E.length;v+=3){const A=E[v],$=E[v+1],R=E[v+2],O=S.length-1;O>=0&&f[O]===R&&S[O]+h[O]===A?h[O]+=$:(S.push(A),h.push($),f.push(R))}}const b=[];for(let p=0;p<S.length;p++){const E=h[p];if(E>=t){const v=S[p];for(let A=0;A<E;A++)b.push(v+A)}}return b}}const oe="1",An=new Set([...Object.values(k),...Object.values(L)]);function Tn(e,t){const r=e.history.map(n=>{const s={method:n.method,args:n.args?[...n.args]:[]};return n.status==="failed"&&(s.status="failed"),s});return{version:oe,createdAt:new Date().toISOString(),window:{startDate:t.startDate,endDate:t.endDate},operations:r}}function Ln(e){if(!e||typeof e!="object")throw new Error("QC script must be a JSON object.");const t=e;if(t.version!==oe)throw new Error(`Unsupported QC script version: ${String(t.version)}. This loader understands version "${oe}".`);if(typeof t.createdAt!="string")throw new Error("QC script is missing `createdAt` (ISO-8601 string).");const r=t.window;if(!r||typeof r!="object")throw new Error("QC script is missing `window`.");if(typeof r.startDate!="string"||typeof r.endDate!="string")throw new Error("`window.startDate` and `window.endDate` must be ISO-8601 strings.");if(!Array.isArray(t.operations))throw new Error("QC script `operations` must be an array.");const n=t.operations.map((s,a)=>{if(!s||typeof s!="object")throw new Error(`Operation ${a} must be an object.`);const o=s;if(typeof o.method!="string")throw new Error(`Operation ${a} missing string \`method\`.`);if(!An.has(o.method))throw new Error(`Operation ${a} has unknown method: "${o.method}".`);if(!Array.isArray(o.args))throw new Error(`Operation ${a} \`args\` must be an array.`);const i={method:o.method,args:[...o.args]};return o.status==="failed"&&(i.status="failed"),i});return{version:oe,createdAt:t.createdAt,window:{startDate:r.startDate,endDate:r.endDate},operations:n}}async function $n(e,t){e.history.length=0,e.redoStack.length=0,await e.reload();const r={applied:0,failed:[]};for(let n=0;n<t.operations.length;n++){const s=t.operations[n];try{await e.dispatch(s.method,...s.args),e.history[e.history.length-1]?.status==="failed"?r.failed.push({index:n,method:s.method,error:"Operation handler reported failure (see console)."}):r.applied++}catch(a){r.failed.push({index:n,method:s.method,error:a instanceof Error?a.message:String(a)})}}return r}w.ACCOUNT_BASE=B,w.AUTH_BASE=he,w.ApiKey=hr,w.BASE_URL=F,w.Collaborator=dr,w.DEFAULT_SNACK_DURATION=Re,w.DataSource=Or,w.Datastream=rr,w.EnumEditOperations=k,w.EnumFilterOperations=L,w.FilterOperation=X,w.HydroShareArchive=Ke,w.INCREASE_AMOUNT=ee,w.Location=Ze,w.LogicalOperation=Qe,w.OAuthProvider=ur,w.ObservationRecord=_n,w.ObservedProperty=or,w.Operator=Je,w.Organization=cr,w.PROVIDER_BASE=te,w.Payload=Cr,w.PermissionAction=et,w.PermissionResource=tt,w.Position=dt,w.PostHydroShareArchive=er,w.ProcessingLevel=ar,w.QC_SCRIPT_VERSION=oe,w.ResultQualifier=ir,w.SESSION_BASE=fe,w.Sensor=sr,w.Snack=pt,w.SnackColor=Ie,w.SnackIcon=Oe,w.SnackTitle=Ue,w.Snackbar=yt,w.TAG_BASE=Pe,w.THINGS_BASE=T,w.Thing=tr,w.TimeUnit=M,w.Unit=nr,w.User=lr,w.Workspace=fr,w.api=Mr,w.apiMethods=c,w.applyScript=$n,w.clearCalibration=yn,w.createPatchObject=Me,w.ensureCalibration=gn,w.extractErrorMessage=rt,w.findFirstGreaterOrEqual=j,w.findLastLessOrEqual=W,w.formatDate=Nr,w.formatDuration=Br,w.getCSRFToken=be,w.getCalibration=fn,w.getLastBenchmarkDetail=dn,w.getObservationsEndpoint=Ur,w.getOperationTable=pn,w.measureEllapsedTime=pe,w.onCalibrationChange=hn,w.parseScript=Ln,w.requestInterceptor=Se,w.responseInterceptor=Ee,w.runBenchmarks=qt,w.serializeHistory=Tn,w.shouldUseWorker=P,w.subtractHours=jr,w.timeUnitMultipliers=ne,Object.defineProperty(w,Symbol.toStringTag,{value:"Module"})}));
1
+ (function(b,I){typeof exports=="object"&&typeof module<"u"?I(exports):typeof define=="function"&&define.amd?define(["exports"],I):(b=typeof globalThis<"u"?globalThis:b||self,I(b["@uwrl/qc-utils"]={}))})(this,(function(b){"use strict";var I=(r=>(r.SECOND="s",r.MINUTE="m",r.HOUR="h",r.DAY="D",r.WEEK="W",r.MONTH="M",r.YEAR="Y",r))(I||{}),v=(r=>(r.ADD_POINTS="ADD_POINTS",r.CHANGE_VALUES="CHANGE_VALUES",r.ASSIGN_VALUES_BULK="ASSIGN_VALUES_BULK",r.DELETE_POINTS="DELETE_POINTS",r.DRIFT_CORRECTION="DRIFT_CORRECTION",r.INTERPOLATE="INTERPOLATE",r.SHIFT_DATETIMES="SHIFT_DATETIMES",r.ASSIGN_DATETIMES_BULK="ASSIGN_DATETIMES_BULK",r.FILL_GAPS="FILL_GAPS",r))(v||{}),A=(r=>(r.FIND_GAPS="FIND_GAPS",r.PERSISTENCE="PERSISTENCE",r.CHANGE="CHANGE",r.RATE_OF_CHANGE="RATE_OF_CHANGE",r.VALUE_THRESHOLD="VALUE_THRESHOLD",r.DATETIME_RANGE="DATETIME_RANGE",r.SELECTION="SELECTION",r))(A||{}),j=(r=>(r.LT="Less than",r.LTE="Less than or equal to",r.GT="Greater than",r.GTE="Greater than or equal to",r.E="Equal",r))(j||{}),Le=(r=>(r.ADD="ADD",r.SUB="SUB",r.MULT="MULT",r.DIV="DIV",r.ASSIGN="ASSIGN",r))(Le||{}),Ae=(r=>(r.LT="Less than",r.LTE="Less than or equal to",r.GT="Greater than",r.GTE="Greater than or equal to",r.E="Equal",r))(Ae||{});class _e{id;thingId;link;frequency;path;datastreamIds;publicResource;constructor(){this.id="",this.thingId="",this.link="",this.frequency=null,this.path="HydroShare",this.datastreamIds=[],this.publicResource=!1}}class kt extends _e{resourceTitle;resourceAbstract;resourceKeywords;constructor(){super(),this.resourceTitle=void 0,this.resourceAbstract=void 0,this.resourceKeywords=void 0}}class Te{latitude;longitude;elevation_m;elevationDatum;state;county;country;constructor(){this.elevationDatum="WGS84",this.state="",this.county="",this.country=""}}class Lt{id;workspaceId;name;location=new Te;tags;hydroShareArchive;siteType;samplingFeatureCode;isPrivate;description;samplingFeatureType;dataDisclaimer;constructor(){this.id="",this.workspaceId="",this.name="",this.tags=[],this.siteType="",this.samplingFeatureCode="",this.isPrivate=!1,this.description="",this.samplingFeatureType="Site",this.dataDisclaimer=""}}class At{id;workspaceId;name;description;thingId;observationType;resultType;status;sampledMedium;noDataValue;aggregationStatistic;unitId;observedPropertyId;sensorId;processingLevelId;isPrivate;isVisible;phenomenonBeginTime;phenomenonEndTime;intendedTimeSpacing;intendedTimeSpacingUnit;timeAggregationInterval;timeAggregationIntervalUnit;dataSourceId;valueCount;constructor(e){this.id="",this.workspaceId="",this.name="",this.description="",this.thingId=e||"",this.observationType="OM_Measurement",this.resultType="Time Series Coverage",this.sampledMedium="",this.noDataValue=-9999,this.aggregationStatistic="",this.unitId="",this.observedPropertyId="",this.sensorId="",this.processingLevelId="",this.timeAggregationInterval=null,this.timeAggregationIntervalUnit="seconds",this.isPrivate=!0,this.isVisible=!0,this.valueCount=0}}class _t{id;workspaceId;name;symbol;definition;type;constructor(){this.id="",this.workspaceId="",this.name="",this.symbol="",this.definition="",this.type=""}}class Tt{id;workspaceId;name;description;manufacturer;model;methodType;methodCode;methodLink;encodingType;modelLink;constructor(){this.id="",this.workspaceId="",this.name="",this.description="",this.manufacturer="",this.model="",this.methodType="Instrument Deployment",this.methodCode="",this.methodLink="",this.encodingType="application/json",this.modelLink=""}}class Rt{id;workspaceId;name;definition;description;type;code;constructor(){this.id="",this.workspaceId="",this.name="",this.definition="",this.description="",this.type="Hydrology",this.code=""}}class It{id;workspaceId;code;definition;explanation;constructor(){this.id="",this.workspaceId="",this.code="",this.definition="",this.explanation=""}}class Mt{id;workspaceId;code;description;constructor(){this.id="",this.workspaceId="",this.code="",this.description=""}}class Ot{name;code;type;description;link;constructor(){}}class Ut{id;email;password;firstName;middleName;lastName;phone;address;organization;type;link;accountType;hydroShareConnected;constructor(){this.id="",this.email="",this.password="",this.firstName="",this.middleName="",this.lastName="",this.phone="",this.address="",this.type="",this.link="",this.accountType="standard",this.hydroShareConnected=!1}}class Ct{id;name;iconLink;signupEnabled;connectEnabled;constructor(){this.id="",this.name="",this.iconLink="",this.signupEnabled=!0,this.connectEnabled=!0}}var Re=(r=>(r.Global="*",r.View="view",r.Create="create",r.Edit="edit",r.Delete="delete",r))(Re||{}),Ie=(r=>(r.Global="*",r.Workspace="Workspace",r.Collaborator="Collaborator",r.Thing="Thing",r.Datastream="Datastream",r.Sensor="Sensor",r.Unit="Unit",r.ObservedProperty="ObservedProperty",r.ProcessingLevel="ProcessingLevel",r.Observation="Observation",r))(Ie||{});class Dt{id="";key="";name="";description="";isActive=!0;expiresAt="";createdAt="";lastUsed="";workspaceId="";role=null;constructor(e){Object.assign(this,e)}}class Nt{id;name;isPrivate;owner;collaboratorRole;pendingTransferTo;constructor(){this.id="",this.name="",this.isPrivate=!1,this.owner=null,this.collaboratorRole=null,this.pendingTransferTo=null}}class Ft{user;role;constructor(){this.user={phone:"",address:"",link:"",type:"",name:"",email:"",organizationName:""},this.role={name:"",description:"",id:"",isApikeyRole:!1,isUserRole:!1,workspaceId:"",permissions:[]}}}const Me={HTTP:{type:"HTTP",sourceUri:"",placeholderVariables:[]},local:{type:"local",sourceUri:"",placeholderVariables:[]}},Oe={JSON:{type:"JSON",timestamp:{key:"",format:"ISO8601",timezoneMode:"embeddedOffset"},JMESPath:""},CSV:{type:"CSV",timestamp:{key:"",format:"ISO8601",timezoneMode:"embeddedOffset"},headerRow:1,dataStartRow:2,delimiter:",",identifierType:"name"}},Ue={HydroServer:{type:"HydroServer"}};class Pt{name="";settings={type:"SDL",extractor:JSON.parse(JSON.stringify(Me.local)),transformer:JSON.parse(JSON.stringify(Oe.CSV)),loader:JSON.parse(JSON.stringify(Ue.HydroServer)),payloads:[]};id="";workspaceId="";orchestrationSystem={id:"",name:"",workspaceId:"",type:""};schedule={interval:15,intervalUnits:"minutes"};status={paused:!0};datastreams=[];constructor(e){Object.assign(this,e)}switchExtractor(e){this.settings.extractor=JSON.parse(JSON.stringify(Me[e]))}switchTransformer(e){this.settings.transformer=JSON.parse(JSON.stringify(Oe[e]))}switchLoader(e){this.settings.loader=JSON.parse(JSON.stringify(Ue[e]))}}class Bt{name="";mappings=[];extractorVariables={};constructor(e){Object.assign(this,e)}}const Ce=1,X=Ce*60,te=X*60,re=te*24,jt=re*7,xt=te*30,Wt=re*365,W={[I.SECOND]:Ce,[I.MINUTE]:X,[I.HOUR]:te,[I.DAY]:re,[I.WEEK]:jt,[I.MONTH]:xt,[I.YEAR]:Wt},Yt=r=>r.toLocaleString(void 0,{year:"numeric",month:"short",day:"2-digit",hour:"2-digit",hour12:!1,minute:"2-digit",second:"2-digit"}),Gt=r=>{let e,t;r>=X*1e3?(e=r/(X*1e3),t="m"):r>=1e3?(e=r/1e3,t="s"):(e=r,t="ms");let n;return t==="ms"?n=Math.round(e).toString():n=e.toFixed(2),`${n} ${t}`},z=async(r,e)=>{e&&console.info(e);const t=performance.now(),n=await r(),i=+(performance.now()-t);return{response:n,duration:i}};var ne=function(r,e){return ne=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(t[o]=n[o])},ne(r,e)};function $(r,e){if(typeof e!="function"&&e!==null)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");ne(r,e);function t(){this.constructor=r}r.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}function se(r){var e=typeof Symbol=="function"&&Symbol.iterator,t=e&&r[e],n=0;if(t)return t.call(r);if(r&&typeof r.length=="number")return{next:function(){return r&&n>=r.length&&(r=void 0),{value:r&&r[n++],done:!r}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function oe(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],s;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(a){s={error:a}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(s)throw s.error}}return i}function ie(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,i;n<o;n++)(i||!(n in e))&&(i||(i=Array.prototype.slice.call(e,0,n)),i[n]=e[n]);return r.concat(i||Array.prototype.slice.call(e))}typeof SuppressedError=="function"&&SuppressedError;function B(r){return typeof r=="function"}function De(r){var e=function(n){Error.call(n),n.stack=new Error().stack},t=r(e);return t.prototype=Object.create(Error.prototype),t.prototype.constructor=t,t}var ae=De(function(r){return function(t){r(this),this.message=t?t.length+` errors occurred during unsubscription:
2
+ `+t.map(function(n,o){return o+1+") "+n.toString()}).join(`
3
+ `):"",this.name="UnsubscriptionError",this.errors=t}});function ce(r,e){if(r){var t=r.indexOf(e);0<=t&&r.splice(t,1)}}var V=(function(){function r(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._finalizers=null}return r.prototype.unsubscribe=function(){var e,t,n,o,i;if(!this.closed){this.closed=!0;var s=this._parentage;if(s)if(this._parentage=null,Array.isArray(s))try{for(var a=se(s),c=a.next();!c.done;c=a.next()){var p=c.value;p.remove(this)}}catch(l){e={error:l}}finally{try{c&&!c.done&&(t=a.return)&&t.call(a)}finally{if(e)throw e.error}}else s.remove(this);var f=this.initialTeardown;if(B(f))try{f()}catch(l){i=l instanceof ae?l.errors:[l]}var w=this._finalizers;if(w){this._finalizers=null;try{for(var m=se(w),d=m.next();!d.done;d=m.next()){var y=d.value;try{Pe(y)}catch(l){i=i??[],l instanceof ae?i=ie(ie([],oe(i)),oe(l.errors)):i.push(l)}}}catch(l){n={error:l}}finally{try{d&&!d.done&&(o=m.return)&&o.call(m)}finally{if(n)throw n.error}}}if(i)throw new ae(i)}},r.prototype.add=function(e){var t;if(e&&e!==this)if(this.closed)Pe(e);else{if(e instanceof r){if(e.closed||e._hasParent(this))return;e._addParent(this)}(this._finalizers=(t=this._finalizers)!==null&&t!==void 0?t:[]).push(e)}},r.prototype._hasParent=function(e){var t=this._parentage;return t===e||Array.isArray(t)&&t.includes(e)},r.prototype._addParent=function(e){var t=this._parentage;this._parentage=Array.isArray(t)?(t.push(e),t):t?[t,e]:e},r.prototype._removeParent=function(e){var t=this._parentage;t===e?this._parentage=null:Array.isArray(t)&&ce(t,e)},r.prototype.remove=function(e){var t=this._finalizers;t&&ce(t,e),e instanceof r&&e._removeParent(this)},r.EMPTY=(function(){var e=new r;return e.closed=!0,e})(),r})(),Ne=V.EMPTY;function Fe(r){return r instanceof V||r&&"closed"in r&&B(r.remove)&&B(r.add)&&B(r.unsubscribe)}function Pe(r){B(r)?r():r.unsubscribe()}var Ht={Promise:void 0},Xt={setTimeout:function(r,e){for(var t=[],n=2;n<arguments.length;n++)t[n-2]=arguments[n];return setTimeout.apply(void 0,ie([r,e],oe(t)))},clearTimeout:function(r){return clearTimeout(r)},delegate:void 0};function zt(r){Xt.setTimeout(function(){throw r})}function Be(){}function q(r){r()}var je=(function(r){$(e,r);function e(t){var n=r.call(this)||this;return n.isStopped=!1,t?(n.destination=t,Fe(t)&&t.add(n)):n.destination=qt,n}return e.create=function(t,n,o){return new le(t,n,o)},e.prototype.next=function(t){this.isStopped||this._next(t)},e.prototype.error=function(t){this.isStopped||(this.isStopped=!0,this._error(t))},e.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},e.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,r.prototype.unsubscribe.call(this),this.destination=null)},e.prototype._next=function(t){this.destination.next(t)},e.prototype._error=function(t){try{this.destination.error(t)}finally{this.unsubscribe()}},e.prototype._complete=function(){try{this.destination.complete()}finally{this.unsubscribe()}},e})(V),$t=(function(){function r(e){this.partialObserver=e}return r.prototype.next=function(e){var t=this.partialObserver;if(t.next)try{t.next(e)}catch(n){K(n)}},r.prototype.error=function(e){var t=this.partialObserver;if(t.error)try{t.error(e)}catch(n){K(n)}else K(e)},r.prototype.complete=function(){var e=this.partialObserver;if(e.complete)try{e.complete()}catch(t){K(t)}},r})(),le=(function(r){$(e,r);function e(t,n,o){var i=r.call(this)||this,s;return B(t)||!t?s={next:t??void 0,error:n??void 0,complete:o??void 0}:s=t,i.destination=new $t(s),i}return e})(je);function K(r){zt(r)}function Vt(r){throw r}var qt={closed:!0,next:Be,error:Vt,complete:Be},Kt=(function(){return typeof Symbol=="function"&&Symbol.observable||"@@observable"})();function Jt(r){return r}function Qt(r){return r.length===0?Jt:r.length===1?r[0]:function(t){return r.reduce(function(n,o){return o(n)},t)}}var xe=(function(){function r(e){e&&(this._subscribe=e)}return r.prototype.lift=function(e){var t=new r;return t.source=this,t.operator=e,t},r.prototype.subscribe=function(e,t,n){var o=this,i=er(e)?e:new le(e,t,n);return q(function(){var s=o,a=s.operator,c=s.source;i.add(a?a.call(i,c):c?o._subscribe(i):o._trySubscribe(i))}),i},r.prototype._trySubscribe=function(e){try{return this._subscribe(e)}catch(t){e.error(t)}},r.prototype.forEach=function(e,t){var n=this;return t=We(t),new t(function(o,i){var s=new le({next:function(a){try{e(a)}catch(c){i(c),s.unsubscribe()}},error:i,complete:o});n.subscribe(s)})},r.prototype._subscribe=function(e){var t;return(t=this.source)===null||t===void 0?void 0:t.subscribe(e)},r.prototype[Kt]=function(){return this},r.prototype.pipe=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return Qt(e)(this)},r.prototype.toPromise=function(e){var t=this;return e=We(e),new e(function(n,o){var i;t.subscribe(function(s){return i=s},function(s){return o(s)},function(){return n(i)})})},r.create=function(e){return new r(e)},r})();function We(r){var e;return(e=r??Ht.Promise)!==null&&e!==void 0?e:Promise}function Zt(r){return r&&B(r.next)&&B(r.error)&&B(r.complete)}function er(r){return r&&r instanceof je||Zt(r)&&Fe(r)}var tr=De(function(r){return function(){r(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"}}),Ye=(function(r){$(e,r);function e(){var t=r.call(this)||this;return t.closed=!1,t.currentObservers=null,t.observers=[],t.isStopped=!1,t.hasError=!1,t.thrownError=null,t}return e.prototype.lift=function(t){var n=new Ge(this,this);return n.operator=t,n},e.prototype._throwIfClosed=function(){if(this.closed)throw new tr},e.prototype.next=function(t){var n=this;q(function(){var o,i;if(n._throwIfClosed(),!n.isStopped){n.currentObservers||(n.currentObservers=Array.from(n.observers));try{for(var s=se(n.currentObservers),a=s.next();!a.done;a=s.next()){var c=a.value;c.next(t)}}catch(p){o={error:p}}finally{try{a&&!a.done&&(i=s.return)&&i.call(s)}finally{if(o)throw o.error}}}})},e.prototype.error=function(t){var n=this;q(function(){if(n._throwIfClosed(),!n.isStopped){n.hasError=n.isStopped=!0,n.thrownError=t;for(var o=n.observers;o.length;)o.shift().error(t)}})},e.prototype.complete=function(){var t=this;q(function(){if(t._throwIfClosed(),!t.isStopped){t.isStopped=!0;for(var n=t.observers;n.length;)n.shift().complete()}})},e.prototype.unsubscribe=function(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null},Object.defineProperty(e.prototype,"observed",{get:function(){var t;return((t=this.observers)===null||t===void 0?void 0:t.length)>0},enumerable:!1,configurable:!0}),e.prototype._trySubscribe=function(t){return this._throwIfClosed(),r.prototype._trySubscribe.call(this,t)},e.prototype._subscribe=function(t){return this._throwIfClosed(),this._checkFinalizedStatuses(t),this._innerSubscribe(t)},e.prototype._innerSubscribe=function(t){var n=this,o=this,i=o.hasError,s=o.isStopped,a=o.observers;return i||s?Ne:(this.currentObservers=null,a.push(t),new V(function(){n.currentObservers=null,ce(a,t)}))},e.prototype._checkFinalizedStatuses=function(t){var n=this,o=n.hasError,i=n.thrownError,s=n.isStopped;o?t.error(i):s&&t.complete()},e.prototype.asObservable=function(){var t=new xe;return t.source=this,t},e.create=function(t,n){return new Ge(t,n)},e})(xe),Ge=(function(r){$(e,r);function e(t,n){var o=r.call(this)||this;return o.destination=t,o.source=n,o}return e.prototype.next=function(t){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.next)===null||o===void 0||o.call(n,t)},e.prototype.error=function(t){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.error)===null||o===void 0||o.call(n,t)},e.prototype.complete=function(){var t,n;(n=(t=this.destination)===null||t===void 0?void 0:t.complete)===null||n===void 0||n.call(t)},e.prototype._subscribe=function(t){var n,o;return(o=(n=this.source)===null||n===void 0?void 0:n.subscribe(t))!==null&&o!==void 0?o:Ne},e})(Ye);const ue=3e3;var fe=(r=>(r.Warning="warning",r.Success="success",r.Error="error",r.Info="info",r))(fe||{}),he=(r=>(r.Success="mdi-checkbox-marked-circle",r.Warning="mdi-alert",r.Error="mdi-alert-circle",r.Info="mdi-information",r.None="none",r))(he||{}),de=(r=>(r.Warning="Warning",r.Success="Success",r.Error="Error",r.Info="Info",r))(de||{}),He=(r=>(r.Center="center",r.Left="left",r.Right="right",r.Bottom="bottom",r.Top="top",r))(He||{});class Xe{constructor(e="",t="info",n="none",o="Info",i=ue,s="center",a=!1){this.message=e,this.color=t,this.icon=n,this.title=o,this.timeout=i,this.position=s,this.visible=a}}class rr{static subject=new Ye;static get snack$(){return this.subject.asObservable()}static createSnackbar(e,t){this.subject.next(new Xe(e,fe[t],he[t],de[t],ue,"bottom",!0))}static success(e){this.createSnackbar(e,"Success")}static warn(e){this.createSnackbar(e,"Warning")}static error(e){this.createSnackbar(e,"Error")}static info(e){this.createSnackbar(e,"Info")}}function nr(r,e){const t=new Date(r);return t.setHours(t.getHours()-e),t.toISOString()}const D=(r,e)=>{let t=0,n=r.length;for(;t<n;){const o=t+n>>1;r[o]<e?t=o+1:n=o}return t},N=(r,e)=>{let t=0,n=r.length;for(;t<n;){const o=t+n>>1;r[o]>e?n=o:t=o+1}return t-1},ze=`(function(){"use strict";function c(n,s,a,u,f,l,y,o){let r=0,e=o;for(let t=l;t<=y;t++)r<a.length&&t===a[r]?r++:(u[e]=n[t],f[e]=s[t],e++);return e-o}self.onmessage=n=>{const{bufferX:s,bufferY:a,outputBufferX:u,outputBufferY:f,start:l,end:y,deleteSegment:o,startTarget:r}=n.data,e=new Float64Array(s),t=new Float32Array(a),A=new Float64Array(u),g=new Float32Array(f);c(e,t,o,A,g,l,y,r),self.postMessage("Done")}})();
4
+ `,$e=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",ze],{type:"text/javascript;charset=utf-8"});function sr(r){let e;try{if(e=$e&&(self.URL||self.webkitURL).createObjectURL($e),!e)throw"";const t=new Worker(e,{name:r?.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(ze),{name:r?.name})}}const Ve=`(function(){"use strict";function F(n,l,a,o,s,y,g,f,i,w,A){let e=0,t=f;for(let r=y;r<=g;r++)if(o[t]=n[r],s[t]=l[r],t++,e<a.length&&r===a[e][0]){const u=a[e][0],c=a[e][1],d=n[u],h=n[c],m=l[u],D=l[c],x=h-d,P=D-m;let p=d+i;for(;p<h;)o[t]=p,s[t]=w?m+(p-d)*P/x:A,t++,p+=i;e++}return t-f}self.onmessage=n=>{const{bufferX:l,bufferY:a,outputBufferX:o,outputBufferY:s,start:y,end:g,gapsSegment:f,startTarget:i,fillDelta:w,interpolate:A,fillValue:e}=n.data,t=new Float64Array(l),r=new Float32Array(a),u=new Float64Array(o),c=new Float32Array(s);F(t,r,f,u,c,y,g,i,w,A,e),self.postMessage("Done")}})();
5
+ `,qe=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Ve],{type:"text/javascript;charset=utf-8"});function or(r){let e;try{if(e=qe&&(self.URL||self.webkitURL).createObjectURL(qe),!e)throw"";const t=new Worker(e,{name:r?.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Ve),{name:r?.name})}}const Ke=`(function(){"use strict";function g(o,n,c){for(let s=0;s<c.length;s++){const{indexes:t,lowerIdx:l,upperIdx:r}=c[s],i=o[l],f=n[l],a=o[r],d=n[r],p=a-i,w=d-f;if(p===0){for(let e=0;e<t.length;e++)n[t[e]]=f;continue}for(let e=0;e<t.length;e++){const u=t[e];n[u]=f+(o[u]-i)*w/p}}}self.onmessage=o=>{const{bufferX:n,bufferY:c,groups:s}=o.data,t=new Float64Array(n),l=new Float32Array(c);g(t,l,s),self.postMessage("Done")}})();
6
+ `,Je=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Ke],{type:"text/javascript;charset=utf-8"});function ir(r){let e;try{if(e=Je&&(self.URL||self.webkitURL).createObjectURL(Je),!e)throw"";const t=new Worker(e,{name:r?.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Ke),{name:r?.name})}}const Qe=`(function(){"use strict";self.onmessage=r=>{const{bufferX:s,bufferY:o,jobs:a}=r.data,f=new Float64Array(s),n=new Float32Array(o);for(let e=0;e<a.length;e++){const{chunkStart:c,chunkEnd:l,startDatetime:u,value:i,extent:y}=a[e];for(let t=c;t<l;t++)n[t]=n[t]+i*((f[t]-u)/y)}self.postMessage("Done")}})();
7
+ `,Ze=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Qe],{type:"text/javascript;charset=utf-8"});function ar(r){let e;try{if(e=Ze&&(self.URL||self.webkitURL).createObjectURL(Ze),!e)throw"";const t=new Worker(e,{name:r?.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Qe),{name:r?.name})}}const et=`(function(){"use strict";function u(f,o,a,n,l,c,s,i){let r=c,e=0,t=i;const w=a.length;for(;r<s&&e<w;){const y=a[e][0];f[r]<=y?(n[t]=f[r],l[t]=o[r],r++):(n[t]=y,l[t]=a[e][1],e++),t++}for(;r<s;)n[t]=f[r],l[t]=o[r],r++,t++;for(;e<w;)n[t]=a[e][0],l[t]=a[e][1],e++,t++;return t-i}self.onmessage=f=>{const{bufferX:o,bufferY:a,outputBufferX:n,outputBufferY:l,origStart:c,origEnd:s,insertions:i,outStart:r}=f.data,e=new Float64Array(o),t=new Float32Array(a),w=new Float64Array(n),y=new Float32Array(l);u(e,t,i,w,y,c,s,r),self.postMessage("Done")}})();
8
+ `,tt=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",et],{type:"text/javascript;charset=utf-8"});function cr(r){let e;try{if(e=tt&&(self.URL||self.webkitURL).createObjectURL(tt),!e)throw"";const t=new Worker(e,{name:r?.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(et),{name:r?.name})}}const rt=`(function(){"use strict";self.onmessage=i=>{const{bufferX:c,bufferY:g,outputBufferX:d,outputBufferY:y,indexes:n,outStart:r,amount:f,isMonth:Y,isYear:h,deltaMs:w}=i.data,s=new Float64Array(c),a=new Float32Array(g),l=new Float64Array(d),u=new Float32Array(y);if(Y)for(let t=0;t<n.length;t++){const e=n[t],o=new Date(s[e]);o.setMonth(o.getMonth()+f),l[r+t]=o.getTime(),u[r+t]=a[e]}else if(h)for(let t=0;t<n.length;t++){const e=n[t],o=new Date(s[e]);o.setFullYear(o.getFullYear()+f),l[r+t]=o.getTime(),u[r+t]=a[e]}else for(let t=0;t<n.length;t++){const e=n[t];l[r+t]=s[e]+w,u[r+t]=a[e]}self.postMessage("Done")}})();
9
+ `,nt=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",rt],{type:"text/javascript;charset=utf-8"});function lr(r){let e;try{if(e=nt&&(self.URL||self.webkitURL).createObjectURL(nt),!e)throw"";const t=new Worker(e,{name:r?.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(rt),{name:r?.name})}}const st=`(function(){"use strict";function a(e,t,o,c){const n=[];let r=e[t];for(let s=t+1;s<=o;s++){const f=e[s];f-r>c&&n.push(s-1,s),r=f}return n}self.onmessage=e=>{const{bufferX:t,start:o,endInclusive:c,threshold:n}=e.data,r=new Float64Array(t);self.postMessage(a(r,o,c,n))}})();
10
+ `,ot=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",st],{type:"text/javascript;charset=utf-8"});function ur(r){let e;try{if(e=ot&&(self.URL||self.webkitURL).createObjectURL(ot),!e)throw"";const t=new Worker(e,{name:r?.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(st),{name:r?.name})}}const it=`(function(){"use strict";function c(u,s,t){const n=[];if(s>=t)return n;let e=s,o=u[s];for(let r=s+1;r<t;r++){const f=u[r];f!==o&&(n.push(e,r-e,o),e=r,o=f)}return n.push(e,t-e,o),n}self.onmessage=u=>{const{bufferY:s,start:t,end:n}=u.data,e=new Float32Array(s);self.postMessage(c(e,t,n))}})();
11
+ `,at=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",it],{type:"text/javascript;charset=utf-8"});function fr(r){let e;try{if(e=at&&(self.URL||self.webkitURL).createObjectURL(at),!e)throw"";const t=new Worker(e,{name:r?.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(it),{name:r?.name})}}const ct=`(function(){"use strict";function o(s,i,t,n,l){const f=[];if(n==="Less than")for(let e=i;e<t;e++)s[e]-s[e-1]<l&&f.push(e);else if(n==="Less than or equal to")for(let e=i;e<t;e++)s[e]-s[e-1]<=l&&f.push(e);else if(n==="Greater than")for(let e=i;e<t;e++)s[e]-s[e-1]>l&&f.push(e);else if(n==="Greater than or equal to")for(let e=i;e<t;e++)s[e]-s[e-1]>=l&&f.push(e);else if(n==="Equal")for(let e=i;e<t;e++)s[e]-s[e-1]==l&&f.push(e);return f}self.onmessage=s=>{const{bufferY:i,start:t,end:n,comparator:l,value:f}=s.data,e=new Float32Array(i);self.postMessage(o(e,t,n,l,f))}})();
12
+ `,lt=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",ct],{type:"text/javascript;charset=utf-8"});function hr(r){let e;try{if(e=lt&&(self.URL||self.webkitURL).createObjectURL(lt),!e)throw"";const t=new Worker(e,{name:r?.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(ct),{name:r?.name})}}const ut=`(function(){"use strict";function l(t,i,n,o,h){const f=[];if(o==="Less than")for(let e=i;e<n;e++){const s=t[e-1];(t[e]-s)/Math.abs(s)<h&&f.push(e)}else if(o==="Less than or equal to")for(let e=i;e<n;e++){const s=t[e-1];(t[e]-s)/Math.abs(s)<=h&&f.push(e)}else if(o==="Greater than")for(let e=i;e<n;e++){const s=t[e-1];(t[e]-s)/Math.abs(s)>h&&f.push(e)}else if(o==="Greater than or equal to")for(let e=i;e<n;e++){const s=t[e-1];(t[e]-s)/Math.abs(s)>=h&&f.push(e)}else if(o==="Equal")for(let e=i;e<n;e++){const s=t[e-1];(t[e]-s)/Math.abs(s)==h&&f.push(e)}return f}self.onmessage=t=>{const{bufferY:i,start:n,end:o,comparator:h,value:f}=t.data,e=new Float32Array(i);self.postMessage(l(e,n,o,h,f))}})();
13
+ `,ft=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",ut],{type:"text/javascript;charset=utf-8"});function dr(r){let e;try{if(e=ft&&(self.URL||self.webkitURL).createObjectURL(ft),!e)throw"";const t=new Worker(e,{name:r?.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(ut),{name:r?.name})}}const ht=`(function(){"use strict";function k(i,l,u,r,c){const f=[],b=r.length;for(let a=l;a<u;a++){const t=i[a];let e=!1;for(let n=0;n<b;n++){const o=r[n],s=c[n];if(o===0){if(t<s){e=!0;break}}else if(o===1){if(t<=s){e=!0;break}}else if(o===2){if(t>s){e=!0;break}}else if(o===3){if(t>=s){e=!0;break}}else if(t==s){e=!0;break}}e&&f.push(a)}return f}self.onmessage=i=>{const{bufferY:l,start:u,end:r,ops:c,values:f}=i.data,b=new Float32Array(l);self.postMessage(k(b,u,r,c,f))}})();
14
+ `,dt=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",ht],{type:"text/javascript;charset=utf-8"});function pe(r){let e;try{if(e=dt&&(self.URL||self.webkitURL).createObjectURL(dt),!e)throw"";const t=new Worker(e,{name:r?.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(ht),{name:r?.name})}}const pt=`(function(){"use strict";function e(l,t,o,s){const c=t.length;if(o==="ADD")for(let f=0;f<c;f++)l[t[f]]=l[t[f]]+s;else if(o==="SUB")for(let f=0;f<c;f++)l[t[f]]=l[t[f]]-s;else if(o==="MULT")for(let f=0;f<c;f++)l[t[f]]=l[t[f]]*s;else if(o==="DIV")for(let f=0;f<c;f++)l[t[f]]=l[t[f]]/s;else if(o==="ASSIGN")for(let f=0;f<c;f++)l[t[f]]=s}self.onmessage=l=>{const{bufferY:t,indexes:o,operator:s,value:c}=l.data,f=new Float32Array(t);e(f,o,s,c),self.postMessage("Done")}})();
15
+ `,mt=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",pt],{type:"text/javascript;charset=utf-8"});function pr(r){let e;try{if(e=mt&&(self.URL||self.webkitURL).createObjectURL(mt),!e)throw"";const t=new Worker(e,{name:r?.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(pt),{name:r?.name})}}function wt(r,e,t,n,o){const i=[],s=n.length;for(let a=e;a<t;a++){const c=r[a];let p=!1;for(let f=0;f<s;f++){const w=n[f],m=o[f];if(w===0){if(c<m){p=!0;break}}else if(w===1){if(c<=m){p=!0;break}}else if(w===2){if(c>m){p=!0;break}}else if(w===3){if(c>=m){p=!0;break}}else if(c==m){p=!0;break}}p&&i.push(a)}return i}function mr(r,e,t,n,o){const i=[];if(n==="Less than")for(let s=e;s<t;s++)r[s]-r[s-1]<o&&i.push(s);else if(n==="Less than or equal to")for(let s=e;s<t;s++)r[s]-r[s-1]<=o&&i.push(s);else if(n==="Greater than")for(let s=e;s<t;s++)r[s]-r[s-1]>o&&i.push(s);else if(n==="Greater than or equal to")for(let s=e;s<t;s++)r[s]-r[s-1]>=o&&i.push(s);else if(n==="Equal")for(let s=e;s<t;s++)r[s]-r[s-1]==o&&i.push(s);return i}function wr(r,e,t,n,o){const i=[];if(n==="Less than")for(let s=e;s<t;s++){const a=r[s-1];(r[s]-a)/Math.abs(a)<o&&i.push(s)}else if(n==="Less than or equal to")for(let s=e;s<t;s++){const a=r[s-1];(r[s]-a)/Math.abs(a)<=o&&i.push(s)}else if(n==="Greater than")for(let s=e;s<t;s++){const a=r[s-1];(r[s]-a)/Math.abs(a)>o&&i.push(s)}else if(n==="Greater than or equal to")for(let s=e;s<t;s++){const a=r[s-1];(r[s]-a)/Math.abs(a)>=o&&i.push(s)}else if(n==="Equal")for(let s=e;s<t;s++){const a=r[s-1];(r[s]-a)/Math.abs(a)==o&&i.push(s)}return i}function gr(r,e,t,n){const o=[];let i=r[e];for(let s=e+1;s<=t;s++){const a=r[s];a-i>n&&o.push(s-1,s),i=a}return o}function yr(r,e,t){const n=[];if(e>=t)return n;let o=e,i=r[e];for(let s=e+1;s<t;s++){const a=r[s];a!==i&&(n.push(o,s-o,i),o=s,i=a)}return n.push(o,t-o,i),n}function br(r,e,t,n,o,i,s,a,c,p,f){let w=0,m=a;for(let d=i;d<=s;d++)if(n[m]=r[d],o[m]=e[d],m++,w<t.length&&d===t[w][0]){const y=t[w][0],l=t[w][1],u=r[y],g=r[l],h=e[y],E=e[l],S=g-u,L=E-h;let _=u+c;for(;_<g;)n[m]=_,o[m]=p?h+(_-u)*L/S:f,m++,_+=c;w++}return m-a}function Er(r,e,t,n,o,i,s,a){let c=i,p=0,f=a;const w=t.length;for(;c<s&&p<w;){const m=t[p][0];r[c]<=m?(n[f]=r[c],o[f]=e[c],c++):(n[f]=m,o[f]=t[p][1],p++),f++}for(;c<s;)n[f]=r[c],o[f]=e[c],c++,f++;for(;p<w;)n[f]=t[p][0],o[f]=t[p][1],p++,f++;return f-a}function Sr(r,e,t,n,o,i,s,a){let c=0,p=a;for(let f=i;f<=s;f++)c<t.length&&f===t[c]?c++:(n[p]=r[f],o[p]=e[f],p++);return p-a}function vr(r,e,t,n){const o=t.length,i=new Array(o);if(n.isMonth)for(let s=0;s<o;s++){const a=t[s],c=new Date(r[a]);c.setMonth(c.getMonth()+n.amount),i[s]=[c.getTime(),e[a]]}else if(n.isYear)for(let s=0;s<o;s++){const a=t[s],c=new Date(r[a]);c.setFullYear(c.getFullYear()+n.amount),i[s]=[c.getTime(),e[a]]}else for(let s=0;s<o;s++){const a=t[s];i[s]=[r[a]+n.deltaMs,e[a]]}return i}function kr(r,e,t){for(let n=0;n<t.length;n++){const{indexes:o,lowerIdx:i,upperIdx:s}=t[n],a=r[i],c=e[i],p=r[s],f=e[s],w=p-a,m=f-c;if(w===0){for(let d=0;d<o.length;d++)e[o[d]]=c;continue}for(let d=0;d<o.length;d++){const y=o[d];e[y]=c+(r[y]-a)*m/w}}}function Lr(r,e,t){for(let n=0;n<t.length;n++){const o=t[n][0],i=t[n][1],s=t[n][2];if(i<=o)continue;const a=r[o],c=r[i]-a;if(c!==0)for(let p=o;p<i;p++)e[p]=e[p]+s*((r[p]-a)/c)}}function gt(r,e,t,n){const o=e.length;if(t==="ADD")for(let i=0;i<o;i++)r[e[i]]=r[e[i]]+n;else if(t==="SUB")for(let i=0;i<o;i++)r[e[i]]=r[e[i]]-n;else if(t==="MULT")for(let i=0;i<o;i++)r[e[i]]=r[e[i]]*n;else if(t==="DIV")for(let i=0;i<o;i++)r[e[i]]=r[e[i]]/n;else if(t==="ASSIGN")for(let i=0;i<o;i++)r[e[i]]=n}const me="qc-utils:calibration:v1",Ar=720*60*60*1e3,J=5e4,Q=2e5,Z={spawnOverheadMs:50,inlineThroughput:5e4,workerThroughput:8e4,hwConcurrency:4,measuredAt:0,userAgent:"default"};let M=Cr()??Z,we=null,Y=null;const ge=new Set,ye={[A.VALUE_THRESHOLD]:{mode:"calibrated",weight:1,rationale:"O(n) single-pass scan; baseline reference"},[A.CHANGE]:{mode:"calibrated",weight:1.1,rationale:"O(n) with one subtraction per step"},[A.RATE_OF_CHANGE]:{mode:"calibrated",weight:1.4,rationale:"O(n) with division + abs per step"},[A.FIND_GAPS]:{mode:"calibrated",weight:.9,rationale:"O(n) on X only, mostly empty output"},[A.PERSISTENCE]:{mode:"calibrated",weight:1.3,rationale:"O(n) + chunk-boundary stitch"},[A.DATETIME_RANGE]:{mode:"always-inline",weight:0,rationale:"O(log n) binary search; never worth the worker hop"},[A.SELECTION]:{mode:"always-inline",weight:0,rationale:"Pure history bookkeeping"},[v.CHANGE_VALUES]:{mode:"calibrated",weight:.7,rationale:"O(k) in-place arithmetic on selection"},[v.ASSIGN_VALUES_BULK]:{mode:"always-inline",weight:0,rationale:"Single tight loop, already inline"},[v.ASSIGN_DATETIMES_BULK]:{mode:"always-inline",weight:0,rationale:"Composes delete+add which handle their own dispatch"},[v.INTERPOLATE]:{mode:"calibrated",weight:1.5,rationale:"Linear interp per consecutive group; in-place writes"},[v.DRIFT_CORRECTION]:{mode:"calibrated",weight:1.2,rationale:"O(range total) in-place math; one pass per range"},[v.SHIFT_DATETIMES]:{mode:"calibrated",weight:1.1,rationale:"O(k) per-point shift math; inline skips SAB allocation"},[v.ADD_POINTS]:{mode:"calibrated",weight:1.8,rationale:"Single merge pass over Y/X + insertions; fresh SAB per call"},[v.DELETE_POINTS]:{mode:"calibrated",weight:1.4,rationale:"Single skip-on-delete pass over Y/X; fresh SAB per call"},[v.FILL_GAPS]:{mode:"calibrated",weight:1.3,rationale:"Single copy-with-fills pass; fresh SAB sized to newLength"}};function U(r,e){const t=ye[r];if(!t)return{useWorker:!0,predictedInlineMs:1/0,predictedWorkerMs:0,reason:"unknown op; keeping default worker path"};if(t.mode==="always-inline")return{useWorker:!1,predictedInlineMs:0,predictedWorkerMs:0,reason:t.rationale};if(typeof SharedArrayBuffer>"u")return{useWorker:!1,predictedInlineMs:0,predictedWorkerMs:1/0,reason:"SharedArrayBuffer unavailable; forced inline"};if(t.mode==="always-worker")return{useWorker:!0,predictedInlineMs:1/0,predictedWorkerMs:0,reason:t.rationale};const n=_r(r,e);if(n<=0)return{useWorker:!1,predictedInlineMs:0,predictedWorkerMs:M.spawnOverheadMs,reason:"zero work units"};const o=Math.max(1,Math.min(e.parallelism??M.hwConcurrency,M.hwConcurrency)),i=t.weight*n/M.inlineThroughput,s=M.spawnOverheadMs+t.weight*n/(M.workerThroughput*o),a=i>s;return{useWorker:a,predictedInlineMs:i,predictedWorkerMs:s,reason:a?`worker faster (${s.toFixed(1)} vs ${i.toFixed(1)} ms)`:`inline faster (${i.toFixed(1)} vs ${s.toFixed(1)} ms)`}}function _r(r,e){switch(r){case v.CHANGE_VALUES:case v.INTERPOLATE:case v.SHIFT_DATETIMES:case v.DRIFT_CORRECTION:return e.selectionSize??0;case v.DELETE_POINTS:return(e.selectionSize??0)+e.datasetSize*.25;case v.ADD_POINTS:{const t=Math.max(1,Math.log2(Math.max(e.datasetSize,2)));return e.datasetSize+(e.selectionSize??0)*t}default:return e.datasetSize}}function Tr(r){return ge.add(r),()=>ge.delete(r)}function Rr(){return M}function Ir(){return we}function Mr(){return Object.keys(ye).map(r=>({op:r,...ye[r]}))}function Or(){M=Z,we=null;try{localStorage.removeItem(me)}catch{}}async function Ur(r={}){if(typeof window>"u"||!(r.force||M.measuredAt===0||Date.now()-M.measuredAt>Ar))return M;if(Y)await Y;else{Y=yt().finally(()=>{Y=null});const t=await Y;M=t,Dr(t),we=t;for(const n of ge)n(M)}return M}async function yt(){if(!(typeof SharedArrayBuffer<"u"))return{...Z,measuredAt:Date.now(),userAgent:navigator.userAgent,hwConcurrency:navigator.hardwareConcurrency||Z.hwConcurrency,sharedArrayBufferAvailable:!1,samples:{spawnRoundtripMs:[],inlineScanMs:[],workerScanMs:[]}};const e=navigator.hardwareConcurrency||4,t=new Float32Array(J);for(let l=0;l<J;l++)t[l]=Math.sin(l);const n=await be(3,()=>{const l=performance.now();return wt(t,0,J,[2],[.5]),performance.now()-l}),o=Ee(n),i=J/Math.max(o,.001),s=new SharedArrayBuffer(256*Float32Array.BYTES_PER_ELEMENT),a=await be(3,async()=>{const l=performance.now();return await new Promise(u=>{const g=new pe;g.onmessage=()=>{g.terminate(),u()},g.postMessage({bufferY:s,start:0,end:256,ops:[2],values:[.5]})}),performance.now()-l}),c=Ee(a),p=new SharedArrayBuffer(Q*Float32Array.BYTES_PER_ELEMENT),f=new Float32Array(p);for(let l=0;l<Q;l++)f[l]=Math.sin(l);const w=await be(3,async()=>{const l=performance.now();return await new Promise(u=>{const g=new pe;g.onmessage=()=>{g.terminate(),u()},g.postMessage({bufferY:p,start:0,end:Q,ops:[2],values:[.5]})}),performance.now()-l}),m=Math.max(Ee(w)-c,.1),d=Q/m;return{spawnOverheadMs:c,inlineThroughput:i,workerThroughput:d,hwConcurrency:e,measuredAt:Date.now(),userAgent:navigator.userAgent,sharedArrayBufferAvailable:!0,samples:{spawnRoundtripMs:a,inlineScanMs:n,workerScanMs:w}}}async function be(r,e){const t=[];for(let n=0;n<r;n++)await new Promise(o=>setTimeout(o,0)),t.push(await e());return t}function Ee(r){if(!r.length)return 0;const e=[...r].sort((n,o)=>n-o),t=Math.floor(e.length/2);return e.length%2?e[t]:(e[t-1]+e[t])/2}function Cr(){if(typeof localStorage>"u")return null;try{const r=localStorage.getItem(me);if(!r)return null;const e=JSON.parse(r);return!e||typeof e.spawnOverheadMs!="number"?null:e}catch{return null}}function Dr(r){if(!(typeof localStorage>"u"))try{const e={spawnOverheadMs:r.spawnOverheadMs,inlineThroughput:r.inlineThroughput,workerThroughput:r.workerThroughput,hwConcurrency:r.hwConcurrency,measuredAt:r.measuredAt,userAgent:r.userAgent};localStorage.setItem(me,JSON.stringify(e))}catch{}}const x=20*1e3,Nr=typeof SharedArrayBuffer<"u";function O(r,e){return Nr?e!==void 0?new SharedArrayBuffer(r,{maxByteLength:e}):new SharedArrayBuffer(r):e!==void 0?new ArrayBuffer(r,{maxByteLength:e}):new ArrayBuffer(r)}function bt(r,e){const t=r;typeof t.grow=="function"?t.grow(e):typeof t.resize=="function"&&t.resize(e)}function Fr(r,e){if(r.length!==e.length)return!1;for(let t=0;t<r.length;t++)if(r[t]!==e[t])return!1;return!0}function Pr(r,e){switch(r){case v.ADD_POINTS:case v.FILL_GAPS:return!1;default:return!0}}class Br{dataset={source:{x:new Float64Array(O(x*Float64Array.BYTES_PER_ELEMENT,x*Float64Array.BYTES_PER_ELEMENT)),y:new Float32Array(O(x*Float32Array.BYTES_PER_ELEMENT,x*Float32Array.BYTES_PER_ELEMENT))}};history=[];redoStack=[];_isReplaying=!1;_pendingExecutionMode="inline";loadingTime=null;isLoading=!0;rawData;constructor(e){this.history=[],this.rawData=e,this.loadData(this.rawData)}async loadData(e){if(!e)return;this.isLoading=!0;const t=await z(()=>{this._growBuffer(e.datetimes.length),this._resizeTo(e.datetimes.length),this.dataX.set(e.datetimes),this.dataY.set(e.dataValues)});this.loadingTime=t.duration,this.history.length=0,this.isLoading=!1}get dataX(){return this.dataset.source.x}get dataY(){return this.dataset.source.y}_resizeTo(e){this.dataset.source.x=new Float64Array(this.dataset.source.x.buffer).subarray(0,e),this.dataset.source.y=new Float32Array(this.dataset.source.y.buffer).subarray(0,e)}_growBuffer(e){const t=e*Float64Array.BYTES_PER_ELEMENT;let n=this.dataX.buffer.byteLength;for(;t>n;)n+=x*Float64Array.BYTES_PER_ELEMENT;if(n*Float64Array.BYTES_PER_ELEMENT>this.dataX.buffer.maxByteLength){const o=O(this.dataX.buffer.byteLength,n*Float64Array.BYTES_PER_ELEMENT),i=O(this.dataY.buffer.byteLength,n*Float32Array.BYTES_PER_ELEMENT),s=new Float64Array(o),a=new Float32Array(i);s.set(this.dataX),a.set(this.dataY),this.dataset.source.x=s,this.dataset.source.y=a}this.dataX.buffer.byteLength<e*Float64Array.BYTES_PER_ELEMENT&&(bt(this.dataX.buffer,e*Float64Array.BYTES_PER_ELEMENT),bt(this.dataY.buffer,e*Float32Array.BYTES_PER_ELEMENT))}async reload(){this.loadingTime=null,this.isLoading=!0,this.history.length=0,await this.loadData(this.rawData)}async reloadHistory(e){const t=this.history.slice(0,e+1);return this.redoStack.length=0,await this.reload(),await this.dispatch(t.map(n=>[n.method,...n.args||[]]))}async removeHistoryItem(e){const t=[...this.history];return t.splice(e,1),this.redoStack.length=0,await this.reload(),await this.dispatch(t.map(n=>[n.method,...n.args||[]]))}async undo(){if(!this.history.length)return[];const e=this.history[this.history.length-1],t=this.history.slice(0,-1);await this.reload(),this.redoStack.push(e),this._isReplaying=!0;try{return await this.dispatch(t.map(n=>[n.method,...n.args||[]]))}finally{this._isReplaying=!1}}async redo(){if(!this.redoStack.length)return[];const e=this.redoStack.pop();this._isReplaying=!0;try{return await this.dispatch([[e.method,...e.args||[]]])}finally{this._isReplaying=!1}}get beginTime(){return this.dataset.source.x.length?new Date(this.dataset.source.x[0]):null}get endTime(){return this.dataset.source.x.length?new Date(this.dataset.source.x[this.dataset.source.x.length-1]):null}async dispatchAction(e,...t){const n={[v.ADD_POINTS]:this._addDataPoints,[v.CHANGE_VALUES]:this._changeValues,[v.ASSIGN_VALUES_BULK]:this._assignValuesBulk,[v.DELETE_POINTS]:this._deleteDataPointsFromSelection,[v.DRIFT_CORRECTION]:this._driftCorrectionFromSelection,[v.INTERPOLATE]:this._interpolateFromSelection,[v.SHIFT_DATETIMES]:this._shiftFromSelection,[v.ASSIGN_DATETIMES_BULK]:this._assignDatetimesBulk,[v.FILL_GAPS]:this._fillGaps};let o=[],i=null;try{this._isReplaying||(this.redoStack.length=0),i={method:e,args:t,isLoading:!0,timestamp:Date.now()},this.history.push(i),Pr(e,t)||this.history[this.history.length-2]?.method===A.SELECTION&&this.history.splice(this.history.length-2,1),this._pendingExecutionMode="inline";const s=await z(async()=>await n[e].apply(this,t));o=s.response;const a=this.history.indexOf(i),c=a>=0?this.history[a]:void 0;c&&(c.duration=s.duration,c.executionMode=this._pendingExecutionMode,c.status="success",c.isLoading=!1)}catch{if(i){const a=this.history.indexOf(i),c=a>=0?this.history[a]:void 0;c&&(c.status="failed",c.isLoading=!1)}}return o}async dispatch(e,...t){const n=async(o,i)=>A[o]?await this.dispatchFilter(o,...i):await this.dispatchAction(o,...i);if(Array.isArray(e)){let o=[];for(let i=0;i<e.length;i++){const s=e[i][0],a=e[i].slice(1,e[i].length);o=await n(s,a)}return o}else return await n(e,t)}async dispatchFilter(e,...t){const n={[A.FIND_GAPS]:this._findGaps,[A.VALUE_THRESHOLD]:this._valueThreshold,[A.DATETIME_RANGE]:this._datetimeRange,[A.PERSISTENCE]:this._persistence,[A.CHANGE]:this._change,[A.RATE_OF_CHANGE]:this._rateOfChange,[A.SELECTION]:this._selection};let o=[],i=null;try{const s=e===A.SELECTION,a=s&&(!t[0]||Array.isArray(t[0])&&t[0].length===0);!this._isReplaying&&!a&&(this.redoStack.length=0),i={method:e,args:t,isLoading:!0,timestamp:Date.now()};const c=this.history[this.history.length-1],p=!!A[c?.method],f=c?.method===e||p&&!s;let w;f?(w=this.history.length-1,this.history[w]=i):(this.history.push(i),w=this.history.length-1),this._pendingExecutionMode="inline";const m=await z(async()=>await n[e].apply(this,t));o=m.response;const d=this.history.indexOf(i),y=d>=0?this.history[d]:void 0;y&&(y.duration=m.duration,y.executionMode=this._pendingExecutionMode,y.selected=m.response,y.status="success",y.isLoading=!1)}catch(s){if(console.log(`Failed to execute filter operation: ${e} with arguments: `,t),console.log(s),i){const a=this.history.indexOf(i),c=a>=0?this.history[a]:void 0;c&&(c.status="failed",c.isLoading=!1)}}return o}async _changeValues(e,t){const n=this.history[this.history.length-2]?.selected;if(!n||n.length===0)return[];const o=n.length;if(!U(v.CHANGE_VALUES,{datasetSize:this.dataset.source.y.length,selectionSize:o}).useWorker)return gt(this.dataY,n,e,t),[];this._pendingExecutionMode="worker";const s=Math.min(navigator.hardwareConcurrency||1,o),a=Math.ceil(o/s),c=[],p=[];for(let f=0;f<s;f++){const w=f*a,m=Math.min((f+1)*a,o);if(w>=m)break;const d=n.slice(w,m);p.push(new Promise(y=>{const l=new pr;c.push(l),l.postMessage({bufferY:this.dataY.buffer,indexes:d,operator:e,value:t}),l.onmessage=u=>{y(u.data)}}))}return await Promise.all(p),c.forEach(f=>f.terminate()),[]}_applyOperatorInPlace(e,t,n){gt(this.dataY,e,t,n)}async _assignValuesBulk(e){const t=this.history[this.history.length-2]?.selected;if(!t||!t.length||!e?.length)return[];const n=Math.min(t.length,e.length),o=this.dataY;for(let i=0;i<n;i++)o[t[i]]=e[i];return[]}async _assignDatetimesBulk(e){const t=this.history[this.history.length-2]?.selected;if(!t||!t.length||!e?.length)return[];const n=Math.min(t.length,e.length),o=new Array(n),i=new Array(n);for(let s=0;s<n;s++)o[s]=[e[s],this.dataY[t[s]]],i[s]=t[s];return i.sort((s,a)=>s-a),await this._deleteDataPoints(i),await this._addDataPoints(o),[]}async _interpolateFromSelection(){const e=this.history[this.history.length-2]?.selected;if(!(!e||e.length===0))return this._interpolate(e)}async _interpolate(e){const t=this._getConsecutiveGroups(e);if(t.length===0||t[0].length===0)return;const n=this.dataset.source.y.length,o=t.map(f=>({indexes:f,lowerIdx:Math.max(0,f[0]-1),upperIdx:Math.min(n-1,f[f.length-1]+1)}));if(!U(v.INTERPOLATE,{datasetSize:n,selectionSize:e.length}).useWorker){kr(this.dataX,this.dataY,o);return}this._pendingExecutionMode="worker";const s=Math.min(navigator.hardwareConcurrency||1,o.length),a=Math.ceil(o.length/s),c=[],p=[];for(let f=0;f<s;f++){const w=o.slice(f*a,(f+1)*a);if(w.length===0)break;p.push(new Promise(m=>{const d=new ir;c.push(d),d.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,groups:w}),d.onmessage=y=>{m(y.data)}}))}await Promise.all(p),c.forEach(f=>f.terminate())}async _shiftFromSelection(e,t){const n=this.history[this.history.length-2]?.selected;return!n||n.length===0?[]:await this._shift(n,e,t)??[]}async _shift(e,t,n){if(e.length===0)return[];const o=n===I.MONTH,i=n===I.YEAR,s=!o&&!i?t*W[n]*1e3:0,a=e.length;if(!U(v.SHIFT_DATETIMES,{datasetSize:this.dataset.source.x.length,selectionSize:a}).useWorker){const h=vr(this.dataX,this.dataY,e,{amount:t,isMonth:o,isYear:i,deltaMs:s});return await this._deleteDataPoints(e),await this._addDataPoints(h)??[]}this._pendingExecutionMode="worker";const p=O(a*Float64Array.BYTES_PER_ELEMENT),f=O(a*Float32Array.BYTES_PER_ELEMENT),w=Math.min(navigator.hardwareConcurrency||1,a),m=Math.ceil(a/w),d=[],y=[];for(let h=0;h<w;h++){const E=h*m,S=Math.min((h+1)*m,a);if(E>=S)break;const L=e.slice(E,S);y.push(new Promise(_=>{const T=new lr;d.push(T),T.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,outputBufferX:p,outputBufferY:f,indexes:L,outStart:E,amount:t,isMonth:o,isYear:i,deltaMs:s}),T.onmessage=R=>{_(R.data)}}))}await Promise.all(y),d.forEach(h=>h.terminate());const l=new Float64Array(p),u=new Float32Array(f),g=new Array(a);for(let h=0;h<a;h++)g[h]=[l[h],u[h]];return await this._deleteDataPoints(e),await this._addDataPoints(g)??[]}async _fillGaps(e,t,n,o,i){const s=this.dataX.length;if(s===0)return[];const a=e[0]*W[e[1]]*1e3,c=t[0]*W[t[1]]*1e3,p=this.dataX,f=i?.[0]!=null&&Number.isFinite(i[0])?D(p,i[0]):0,w=i?.[1]!=null&&Number.isFinite(i[1])?N(p,i[1]):s-1,m=[],d=[];let y=0;for(let k=f+1;k<=w;k++)if(p[k]-p[k-1]>a){let C=0,F=p[k-1]+c;for(;F<p[k];)C++,F+=c;C>0&&(m.push([k-1,k]),d.push(C),y+=C)}if(y===0)return[];const l=new Array(y);let u=0,g=0;for(let k=0;k<m.length;k++){const P=m[k][0],C=d[k];for(let F=1;F<=C;F++)l[g++]=P+u+F;u+=C}const h=s+y,E=h*Float64Array.BYTES_PER_ELEMENT,S=h*Float32Array.BYTES_PER_ELEMENT,L=O(E,Math.max(this.dataX.buffer.maxByteLength,E)),_=O(S,Math.max(this.dataY.buffer.maxByteLength,S));if(!U(v.FILL_GAPS,{datasetSize:s,selectionSize:y}).useWorker){const k=new Float64Array(L),P=new Float32Array(_);return br(this.dataX,this.dataY,m,k,P,0,s-1,0,c,n,o),this.dataset.source.x=k,this.dataset.source.y=P,this._resizeTo(h),l}this._pendingExecutionMode="worker";const R=navigator.hardwareConcurrency||1,Et=Math.ceil(s/R),Se=[];let H=0;for(let k=0;k<R;k++){const P=k*Et,C=Math.min((k+1)*Et-1,s-1),F=[];let ee=0;for(;H<m.length&&m[H][0]<=C;)F.push(m[H]),ee+=d[H],H++;Se.push({start:P,end:C,gapsSegment:F,fillsInSegment:ee})}const ve=new Array(R).fill(0);for(let k=1;k<R;k++)ve[k]=ve[k-1]+Se[k-1].fillsInSegment;const St=[],vt=[];for(let k=0;k<R;k++){const{start:P,end:C,gapsSegment:F}=Se[k],ee=P+ve[k];vt.push(new Promise(Gr=>{const ke=new or;St.push(ke),ke.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,outputBufferX:L,outputBufferY:_,start:P,end:C,gapsSegment:F,startTarget:ee,fillDelta:c,interpolate:n,fillValue:o}),ke.onmessage=Hr=>{Gr(Hr.data)}}))}return await Promise.all(vt),St.forEach(k=>k.terminate()),this.dataset.source.x=new Float64Array(L),this.dataset.source.y=new Float32Array(_),this._resizeTo(h),l}async _deleteDataPointsFromSelection(){const e=this.history[this.history.length-2]?.selected;if(!(!e||e.length===0))return this._deleteDataPoints(e)}async _deleteDataPoints(e){const t=this.dataX.length,n=t-e.length;if(!U(v.DELETE_POINTS,{datasetSize:t,selectionSize:e.length}).useWorker){const d=O(this.dataX.buffer.byteLength,this.dataX.buffer.maxByteLength),y=O(this.dataY.buffer.byteLength,this.dataY.buffer.maxByteLength),l=new Float64Array(d),u=new Float32Array(y);Sr(this.dataX,this.dataY,e,l,u,0,t-1,0),this.dataset.source.x=l,this.dataset.source.y=u,this._resizeTo(n);return}this._pendingExecutionMode="worker";const i=navigator.hardwareConcurrency||1,s=Math.ceil(this.dataX.length/i),a=[],c=[];for(let d=0;d<i;d++){const y=d*s,l=Math.min((d+1)*s-1,this.dataX.length-1),u=D(e,y),g=N(e,l),h=e.slice(u,g+1);c.push({start:y,end:l,deleteSegment:h})}const p=new Array(i).fill(0);for(let d=1;d<i;d++)p[d]=p[d-1]+c[d-1].deleteSegment.length;const f=[],w=O(this.dataX.buffer.byteLength,this.dataX.buffer.maxByteLength),m=O(this.dataY.buffer.byteLength,this.dataY.buffer.maxByteLength);for(let d=0;d<i;d++){const{start:y,end:l,deleteSegment:u}=c[d],g=y-p[d];f.push(new Promise(h=>{const E=new sr;a.push(E),E.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,outputBufferX:w,outputBufferY:m,start:y,end:l,deleteSegment:u,startTarget:g}),E.onmessage=S=>{h(S.data)}}))}await Promise.all(f),a.forEach(d=>d.terminate()),this.dataset.source.x=new Float64Array(w),this.dataset.source.y=new Float32Array(m),this._resizeTo(n)}async _driftCorrectionFromSelection(e){const t=this.history[this.history.length-2]?.selected;if(!t||t.length===0)return;const n=this._getConsecutiveGroups(t),o=[];for(const i of n)i.length!==0&&o.push([i[0],i[i.length-1],e]);if(o.length!==0)return this._driftCorrection(o)}async _driftCorrection(e){if(!e||e.length===0)return;const t=this.dataset.source.x,n=navigator.hardwareConcurrency||1;let o=0;for(const[w,m]of e)m>w&&(o+=m-w);if(!U(v.DRIFT_CORRECTION,{datasetSize:t.length,selectionSize:o}).useWorker){Lr(t,this.dataY,e);return}this._pendingExecutionMode="worker";const s=[];for(const[w,m,d]of e){if(m<=w)continue;const y=t[w],l=t[m]-y;if(l===0)continue;const u=m-w,g=Math.max(1,Math.ceil(u/n));for(let h=w;h<m;h+=g)s.push({chunkStart:h,chunkEnd:Math.min(h+g,m),startDatetime:y,value:d,extent:l})}if(s.length===0)return;const a=Math.min(n,s.length),c=Array.from({length:a},()=>[]);s.forEach((w,m)=>c[m%a].push(w));const p=[],f=[];for(const w of c)w.length!==0&&f.push(new Promise(m=>{const d=new ar;p.push(d),d.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,jobs:w}),d.onmessage=y=>{m(y.data)}}));await Promise.all(f),p.forEach(w=>w.terminate())}_getConsecutiveGroups(e){const t=[[]];return e.reduce((n,o)=>{const i=n[n.length-1];return!i.length||o==i[i.length-1]+1?i.push(o):n.push([o]),n},t),t}async _addDataPoints(e){if(e.length===0)return[];const t=this.dataX.length,n=t+e.length;e.sort((l,u)=>l[0]-u[0]);const o=new Array(e.length);for(let l=0;l<e.length;l++){const u=e[l][0],g=N(this.dataX,u)+1;o[l]=g+l}const i=n*Float64Array.BYTES_PER_ELEMENT,s=n*Float32Array.BYTES_PER_ELEMENT,a=O(i,Math.max(this.dataX.buffer.maxByteLength,i)),c=O(s,Math.max(this.dataY.buffer.maxByteLength,s));if(!U(v.ADD_POINTS,{datasetSize:t,selectionSize:e.length}).useWorker){const l=new Float64Array(a),u=new Float32Array(c);return Er(this.dataX,this.dataY,e,l,u,0,t,0),this.dataset.source.x=l,this.dataset.source.y=u,this._resizeTo(n),o}this._pendingExecutionMode="worker";const f=e.map(l=>N(this.dataX,l[0])+1),w=Math.max(1,Math.min(navigator.hardwareConcurrency||1,Math.max(t,1))),m=Math.ceil(Math.max(t,1)/w),d=[],y=[];for(let l=0;l<w;l++){const u=l*m,g=Math.min((l+1)*m,t),h=D(f,u),E=l===w-1?e.length:D(f,g),S=e.slice(h,E),L=u+h;u>=g&&S.length===0||y.push(new Promise(_=>{const T=new cr;d.push(T),T.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,outputBufferX:a,outputBufferY:c,origStart:u,origEnd:g,insertions:S,outStart:L}),T.onmessage=R=>{_(R.data)}}))}return await Promise.all(y),d.forEach(l=>l.terminate()),this.dataset.source.x=new Float64Array(a),this.dataset.source.y=new Float32Array(c),this._resizeTo(n),o}async _valueThreshold(e,t){const n=Object.keys(e);if(n.length===0)return[];const o={[j.LT]:0,[j.LTE]:1,[j.GT]:2,[j.GTE]:3,[j.E]:4},i=n.map(E=>o[E]??4),s=n.map(E=>e[E]),a=this.dataset.source.y,c=this.dataset.source.x;let p=0,f=a.length;if(f===0)return[];if(t!=null){const[E,S]=t;E!=null&&Number.isFinite(E)&&(p=D(c,E)),S!=null&&Number.isFinite(S)&&(f=N(c,S)+1)}if(f<=p)return[];const w=f-p;if(!U(A.VALUE_THRESHOLD,{datasetSize:w}).useWorker)return wt(a,p,f,i,s);this._pendingExecutionMode="worker";const d=Math.min(navigator.hardwareConcurrency||1,w),y=Math.ceil(w/d),l=[],u=[];for(let E=0;E<d;E++){const S=p+E*y,L=Math.min(p+(E+1)*y,f);if(S>=L)break;u.push(new Promise(_=>{const T=new pe;l.push(T),T.postMessage({bufferY:this.dataY.buffer,start:S,end:L,ops:i,values:s}),T.onmessage=R=>{_(R.data)}}))}const g=await Promise.all(u);l.forEach(E=>E.terminate());const h=[];for(let E=0;E<g.length;E++){const S=g[E];for(let L=0;L<S.length;L++)h.push(S[L])}return h}async _rateOfChange(e,t,n){const o=this.dataset.source.y,i=this.dataset.source.x;if(o.length<2)return[];let s=1,a=o.length;if(n!=null){const[u,g]=n;u!=null&&Number.isFinite(u)&&(s=Math.max(1,D(i,u))),g!=null&&Number.isFinite(g)&&(a=N(i,g)+1)}if(a<=s)return[];const c=a-s;if(!U(A.RATE_OF_CHANGE,{datasetSize:o.length}).useWorker)return wr(o,s,a,e,t);this._pendingExecutionMode="worker";const f=Math.min(navigator.hardwareConcurrency||1,c),w=Math.ceil(c/f),m=[],d=[];for(let u=0;u<f;u++){const g=s+u*w,h=Math.min(s+(u+1)*w,a);if(g>=h)break;d.push(new Promise(E=>{const S=new dr;m.push(S),S.postMessage({bufferY:this.dataY.buffer,start:g,end:h,comparator:e,value:t}),S.onmessage=L=>{E(L.data)}}))}const y=await Promise.all(d);m.forEach(u=>u.terminate());const l=[];for(let u=0;u<y.length;u++){const g=y[u];for(let h=0;h<g.length;h++)l.push(g[h])}return l}async _datetimeRange(e,t){const n=this.dataset.source.x,o=n.length;if(o===0)return[];const i=e==null?0:D(n,e),s=t==null?o-1:N(n,t);if(i>s)return[];const a=new Array(s-i+1);for(let c=i;c<=s;c++)a[c-i]=c;return a}async _selection(e){const t=this.history[this.history.length-2],n=!!t&&t.method!==A.SELECTION&&!!A[t.method],o=n&&Array.isArray(t.selected)?t.selected:void 0;return!e||!e.length?(this.history.pop(),o&&o.length>0&&this.history.pop(),e):(o&&Fr(o,e)?this.history.pop():n&&this.history.splice(this.history.length-2,1),e)}async _change(e,t,n){const o=this.dataset.source.y,i=this.dataset.source.x;if(o.length<2)return[];let s=1,a=o.length;if(n!=null){const[u,g]=n;u!=null&&Number.isFinite(u)&&(s=Math.max(1,D(i,u))),g!=null&&Number.isFinite(g)&&(a=N(i,g)+1)}if(a<=s)return[];const c=a-s;if(!U(A.CHANGE,{datasetSize:o.length}).useWorker)return mr(o,s,a,e,t);this._pendingExecutionMode="worker";const f=Math.min(navigator.hardwareConcurrency||1,c),w=Math.ceil(c/f),m=[],d=[];for(let u=0;u<f;u++){const g=s+u*w,h=Math.min(s+(u+1)*w,a);if(g>=h)break;d.push(new Promise(E=>{const S=new hr;m.push(S),S.postMessage({bufferY:this.dataY.buffer,start:g,end:h,comparator:e,value:t}),S.onmessage=L=>{E(L.data)}}))}const y=await Promise.all(d);m.forEach(u=>u.terminate());const l=[];for(let u=0;u<y.length;u++){const g=y[u];for(let h=0;h<g.length;h++)l.push(g[h])}return l}async _findGaps(e,t,n){const o=this.dataset.source.x;let i=0,s=o.length;if(n!=null){const[u,g]=n;u!=null&&Number.isFinite(u)&&(i=D(o,u)),g!=null&&Number.isFinite(g)&&(s=N(o,g)+1)}if(s<=i)return[];const a=e*W[t]*1e3;if(!U(A.FIND_GAPS,{datasetSize:s-i}).useWorker){const u=gr(o,i,s-1,a),g=new Set;for(let h=0;h<u.length;h++)g.add(u[h]);return[...g]}this._pendingExecutionMode="worker";const p=s-i,f=Math.min(navigator.hardwareConcurrency||1,p),w=Math.ceil(p/f),m=[],d=[];for(let u=0;u<f;u++){const g=i+u*w,h=Math.min(i+(u+1)*w,s);if(g>=h)break;d.push(new Promise(E=>{const S=new ur;m.push(S),S.postMessage({bufferX:this.dataX.buffer,start:g,endInclusive:h,threshold:a}),S.onmessage=L=>{E(L.data)}}))}const y=await Promise.all(d);m.forEach(u=>u.terminate());const l=new Set;for(let u=0;u<y.length;u++){const g=y[u];for(let h=0;h<g.length;h++)l.add(g[h])}return[...l]}async _persistence(e,t){const n=this.dataset.source.x,o=this.dataset.source.y;let i=0,s=o.length;if(t!=null){const[h,E]=t;h!=null&&Number.isFinite(h)&&(i=D(n,h)),E!=null&&Number.isFinite(E)&&(s=N(n,E)+1)}if(s<=i)return[];const a=s-i;if(!U(A.PERSISTENCE,{datasetSize:a}).useWorker){const h=yr(o,i,s),E=[];for(let S=0;S<h.length;S+=3){const L=h[S],_=h[S+1];if(_>=e)for(let T=0;T<_;T++)E.push(L+T)}return E}this._pendingExecutionMode="worker";const p=Math.min(navigator.hardwareConcurrency||1,a),f=Math.ceil(a/p),w=[],m=[];for(let h=0;h<p;h++){const E=i+h*f,S=Math.min(i+(h+1)*f,s);if(E>=S)break;m.push(new Promise(L=>{const _=new fr;w.push(_),_.postMessage({bufferY:this.dataY.buffer,start:E,end:S}),_.onmessage=T=>{L(T.data)}}))}const d=await Promise.all(m);w.forEach(h=>h.terminate());const y=[],l=[],u=[];for(let h=0;h<d.length;h++){const E=d[h];for(let S=0;S<E.length;S+=3){const L=E[S],_=E[S+1],T=E[S+2],R=y.length-1;R>=0&&u[R]===T&&y[R]+l[R]===L?l[R]+=_:(y.push(L),l.push(_),u.push(T))}}const g=[];for(let h=0;h<y.length;h++){const E=l[h];if(E>=e){const S=y[h];for(let L=0;L<E;L++)g.push(S+L)}}return g}}const G="1",jr=new Set([...Object.values(v),...Object.values(A)]);function xr(r,e){const t=r.history.map(n=>{const o={method:n.method,args:n.args?[...n.args]:[]};return n.status==="failed"&&(o.status="failed"),typeof n.timestamp=="number"&&Number.isFinite(n.timestamp)&&(o.timestamp=n.timestamp),o});return{version:G,createdAt:new Date().toISOString(),window:{startDate:e.startDate,endDate:e.endDate},operations:t}}function Wr(r){if(!r||typeof r!="object")throw new Error("QC script must be a JSON object.");const e=r;if(e.version!==G)throw new Error(`Unsupported QC script version: ${String(e.version)}. This loader understands version "${G}".`);if(typeof e.createdAt!="string")throw new Error("QC script is missing `createdAt` (ISO-8601 string).");const t=e.window;if(!t||typeof t!="object")throw new Error("QC script is missing `window`.");if(typeof t.startDate!="string"||typeof t.endDate!="string")throw new Error("`window.startDate` and `window.endDate` must be ISO-8601 strings.");if(!Array.isArray(e.operations))throw new Error("QC script `operations` must be an array.");const n=e.operations.map((o,i)=>{if(!o||typeof o!="object")throw new Error(`Operation ${i} must be an object.`);const s=o;if(typeof s.method!="string")throw new Error(`Operation ${i} missing string \`method\`.`);if(!jr.has(s.method))throw new Error(`Operation ${i} has unknown method: "${s.method}".`);if(!Array.isArray(s.args))throw new Error(`Operation ${i} \`args\` must be an array.`);const a={method:s.method,args:[...s.args]};if(s.status==="failed"&&(a.status="failed"),s.timestamp!==void 0){if(typeof s.timestamp!="number"||!Number.isFinite(s.timestamp))throw new Error(`Operation ${i} \`timestamp\` must be a finite epoch-ms number when present.`);a.timestamp=s.timestamp}return a});return{version:G,createdAt:e.createdAt,window:{startDate:t.startDate,endDate:t.endDate},operations:n}}async function Yr(r,e){r.history.length=0,r.redoStack.length=0,await r.reload();const t={applied:0,failed:[]};for(let n=0;n<e.operations.length;n++){const o=e.operations[n];try{await r.dispatch(o.method,...o.args),r.history[r.history.length-1]?.status==="failed"?t.failed.push({index:n,method:o.method,error:"Operation handler reported failure (see console)."}):t.applied++}catch(i){t.failed.push({index:n,method:o.method,error:i instanceof Error?i.message:String(i)})}}return t}b.ApiKey=Dt,b.Collaborator=Ft,b.DEFAULT_SNACK_DURATION=ue,b.DataSource=Pt,b.Datastream=At,b.EnumEditOperations=v,b.EnumFilterOperations=A,b.FilterOperation=j,b.HydroShareArchive=_e,b.INCREASE_AMOUNT=x,b.Location=Te,b.LogicalOperation=Ae,b.OAuthProvider=Ct,b.ObservationRecord=Br,b.ObservedProperty=Rt,b.Operator=Le,b.Organization=Ot,b.Payload=Bt,b.PermissionAction=Re,b.PermissionResource=Ie,b.Position=He,b.PostHydroShareArchive=kt,b.ProcessingLevel=It,b.QC_SCRIPT_VERSION=G,b.ResultQualifier=Mt,b.Sensor=Tt,b.Snack=Xe,b.SnackColor=fe,b.SnackIcon=he,b.SnackTitle=de,b.Snackbar=rr,b.Thing=Lt,b.TimeUnit=I,b.Unit=_t,b.User=Ut,b.Workspace=Nt,b.applyScript=Yr,b.clearCalibration=Or,b.ensureCalibration=Ur,b.findFirstGreaterOrEqual=D,b.findLastLessOrEqual=N,b.formatDate=Yt,b.formatDuration=Gt,b.getCalibration=Rr,b.getLastBenchmarkDetail=Ir,b.getOperationTable=Mr,b.measureEllapsedTime=z,b.onCalibrationChange=Tr,b.parseScript=Wr,b.runBenchmarks=yt,b.serializeHistory=xr,b.shouldUseWorker=U,b.subtractHours=nr,b.timeUnitMultipliers=W,Object.defineProperty(b,Symbol.toStringTag,{value:"Module"})}));
@@ -81,6 +81,16 @@ export type HistoryItem = {
81
81
  * `import.meta.env.DEV` is truthy.
82
82
  */
83
83
  executionMode?: "worker" | "inline";
84
+ /**
85
+ * Wall-clock epoch-milliseconds (UTC) at which the dispatch site
86
+ * pushed this entry — i.e. when the user (or script replay) ran
87
+ * the operation. Stamped at push time in `dispatchAction` /
88
+ * `dispatchFilter`, so re-dispatches from `undo()` / `redo()` /
89
+ * `applyScript` overwrite an older value with the replay time.
90
+ * Optional because the field is runtime-only: it is stripped on
91
+ * `serializeHistory` and re-stamped when the loader replays.
92
+ */
93
+ timestamp?: number;
84
94
  };
85
95
  /** The wall-clock window the script was authored against. The
86
96
  * loader is responsible for fetching this exact range of
@@ -100,6 +110,18 @@ export type QcScriptOperation = {
100
110
  method: EnumEditOperations | EnumFilterOperations;
101
111
  args: any[];
102
112
  status?: "success" | "failed";
113
+ /**
114
+ * Wall-clock epoch-milliseconds (UTC) at which the operation was
115
+ * originally dispatched — round-tripped verbatim so the saved
116
+ * script preserves the authoring timeline for audit / display.
117
+ * Optional because pre-v1.1 scripts (and any consumer that hand-
118
+ * writes the JSON without timestamps) must still load. The replay
119
+ * path does NOT use this value to re-stamp `HistoryItem.timestamp`:
120
+ * `dispatchAction` / `dispatchFilter` stamp fresh `Date.now()` at
121
+ * replay time so the in-memory history reflects when the operation
122
+ * actually ran in this session.
123
+ */
124
+ timestamp?: number;
103
125
  };
104
126
  /** A serialized QC history. Schema `version: "1"`. */
105
127
  export type QcScript = {
@@ -9,7 +9,6 @@ export declare const INCREASE_AMOUNT: number;
9
9
  export declare class ObservationRecord {
10
10
  /** The generated dataset to be used for plotting */
11
11
  dataset: {
12
- dimensions: string[];
13
12
  source: {
14
13
  x: Float64Array<ArrayBufferLike>;
15
14
  y: Float32Array<ArrayBufferLike>;
@@ -72,14 +71,13 @@ export declare class ObservationRecord {
72
71
  */
73
72
  reload(): Promise<void>;
74
73
  /**
75
- * @param index
76
- * @returns
74
+ * Truncate history at `index` (inclusive), reload from raw, and
75
+ * replay the surviving entries. Used by the "Reload from this step"
76
+ * button in EditHistory.
77
77
  */
78
78
  reloadHistory(index: number): Promise<number[]>;
79
- /**
80
- * Remove a history item
81
- * @param index
82
- */
79
+ /** Splice the history entry at `index`, reload from raw, and replay
80
+ * the survivors. */
83
81
  removeHistoryItem(index: number): Promise<number[]>;
84
82
  /**
85
83
  * Undo the most recent history entry. Pushes it onto `redoStack` so a
@@ -113,12 +111,6 @@ export declare class ObservationRecord {
113
111
  dispatch(actions: EnumEditOperations | EnumFilterOperations | [EnumEditOperations | EnumFilterOperations, ...any][], ...args: any): Promise<number[]>;
114
112
  /** Filter operations do not transform the data and return a selection */
115
113
  dispatchFilter(action: EnumFilterOperations, ...args: any): Promise<number[]>;
116
- /**
117
- * @param index An array containing the list of index of values to perform the operations on.
118
- * @param operator The operator that will be applied
119
- * @param value The value to use in the operation
120
- * @returns an array of index values to keep selected in the plot
121
- */
122
114
  /**
123
115
  * Multi-threaded apply of an arithmetic operator to Y at the previously-filtered selection.
124
116
  * 1. Selection is read from the previous history entry (the last entry is this operation itself).
@@ -186,13 +178,15 @@ export declare class ObservationRecord {
186
178
  */
187
179
  private _shift;
188
180
  /**
189
- * Multi-threaded version of {@link _fillGaps}.
181
+ * Detect gaps in the configured window and insert fill points using
182
+ * either linear interpolation or a sentinel `fillValue`. Inline path:
183
+ * single copy-with-fills sweep into freshly-allocated x/y buffers.
184
+ * Worker path:
190
185
  * 1. The main thread scans once for gaps and computes the number of fill points per gap.
191
186
  * 2. The original array is split into equal segments; each gap is assigned to the segment containing its left index.
192
187
  * 3. Cumulative fill counts before each segment give each worker's output startTarget, ensuring no overlap.
193
188
  * 4. Each worker copies its segment to the output buffer and inserts its gap fills inline.
194
- */
195
- /**
189
+ *
196
190
  * @param range Optional `[startTs, endTs]` window in epoch
197
191
  * milliseconds. Both bounds inclusive; snapped to the nearest
198
192
  * enclosed point via binary search. Datetime-addressed (not
@@ -209,12 +203,12 @@ export declare class ObservationRecord {
209
203
  */
210
204
  private _deleteDataPointsFromSelection;
211
205
  /**
212
- Deletes data points from a large array using worker threads.
213
- 1. The main thread divides the original array into equal parts to distribute work among workers.
214
- 2. For each segment, binary search locates the indexes to delete (deleteSegment), ensuring efficient lookups.
215
- 3. The cumulative deletions before each segment help compute the starting index (startTarget) for each worker's output, ensuring no overlap.
216
- 4. Each worker processes its segment linearly, skipping deletions and copying kept elements to their computed positions.
217
- * @param deleteIndices
206
+ * Delete points by ascending `deleteIndices` from x/y. Inline path
207
+ * runs a single skip-on-delete copy on the main thread; worker path:
208
+ * 1. Main thread splits the original array into equal segments.
209
+ * 2. Per-segment binary search locates the indexes to delete (deleteSegment) for efficient lookups.
210
+ * 3. Cumulative deletions before each segment give each worker's output startTarget so segments don't overlap.
211
+ * 4. Each worker walks its segment linearly, skipping deletions and copying kept elements into place.
218
212
  */
219
213
  private _deleteDataPoints;
220
214
  /**
@@ -227,12 +221,6 @@ export declare class ObservationRecord {
227
221
  * can still use it directly.
228
222
  */
229
223
  private _driftCorrectionFromSelection;
230
- /**
231
- *
232
- * @param start The start index
233
- * @param end The end index
234
- * @param value The drift amount
235
- */
236
224
  /**
237
225
  * Multi-threaded drift correction over one or more [start, end, value] ranges.
238
226
  * 1. Main thread reads each range's anchors (startDatetime, extent) once and chunks the range.
@@ -255,11 +243,6 @@ export declare class ObservationRecord {
255
243
  * 4. Each worker linearly merges its original slice with its insertion slice (both already sorted by datetime) into the output buffer. Originals win on datetime ties, matching the original `findLastLessOrEqual` semantics.
256
244
  */
257
245
  private _addDataPoints;
258
- /**
259
- * Filter by applying a set of logical operations
260
- * @param appliedFilters
261
- * @returns an array of index values to select in the plot
262
- */
263
246
  /**
264
247
  * Filter by applying a set of logical operations, using worker threads.
265
248
  * 1. Main thread encodes filters as numeric opcodes + thresholds (cheaper than string compares in the hot loop).
@@ -269,12 +252,6 @@ export declare class ObservationRecord {
269
252
  * Opcodes: 0=LT, 1=LTE, 2=GT, 3=GTE, 4=E.
270
253
  */
271
254
  private _valueThreshold;
272
- /**
273
- *
274
- * @param comparator
275
- * @param value
276
- * @returns
277
- */
278
255
  /**
279
256
  * Find points where the relative rate `(curr - prev) / |prev|` satisfies the comparator, using worker threads.
280
257
  * 1. Main thread partitions scan range [1, dataY.length) into chunks; `Y[i-1]` is safely read from the shared buffer across chunk boundaries.
@@ -315,12 +292,6 @@ export declare class ObservationRecord {
315
292
  * the script would grow a phantom SELECTION after every real filter.
316
293
  */
317
294
  private _selection;
318
- /**
319
- *
320
- * @param comparator
321
- * @param value
322
- * @returns
323
- */
324
295
  /**
325
296
  * Find points where the change from the previous value satisfies the comparator, using worker threads.
326
297
  * 1. Main thread partitions scan range [1, dataY.length) into chunks (each chunk's first index safely reads Y[i-1] from the shared buffer).
@@ -4,11 +4,13 @@
4
4
  * See `docs/HISTORY_SCRIPT.md` for the full design rationale. The
5
5
  * short version:
6
6
  *
7
- * - **Save:** walk `record.history`, strip runtime-only fields
8
- * (`isLoading`, `duration`, `executionMode`, `selected`), keep
9
- * `method`, `args`, and the optional `status` flag. Wrap with
10
- * a `version`, `createdAt`, and the wall-clock `window` the
11
- * consumer was working in.
7
+ * - **Save:** walk `record.history`, strip the truly ephemeral
8
+ * fields (`isLoading`, `duration`, `executionMode`, `selected`),
9
+ * keep `method`, `args`, the optional `status` flag, and the
10
+ * authoring `timestamp` (preserved verbatim so the saved script
11
+ * records when each step originally ran). Wrap with a `version`,
12
+ * `createdAt`, and the wall-clock `window` the consumer was
13
+ * working in.
12
14
  *
13
15
  * - **Load:** reset `history` + `redoStack`, `record.reload()`,
14
16
  * then `record.dispatch(operations.map(o => [o.method, ...o.args]))`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uwrl/qc-utils",
3
- "version": "0.0.22",
3
+ "version": "0.1.0",
4
4
  "description": "Quality Control Utilities",
5
5
  "homepage": "https://github.com/hydroserver2/qc-utils#readme",
6
6
  "bugs": {
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};