@uwrl/qc-utils 0.0.23 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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 Fe,mt;function $r(){if(mt)return Fe;mt=1;const e=Lr();return Fe=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},Fe}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 D="https://lro.hydroserver.org/api",he=`${D}/auth`,B=`${he}/browser/account`,fe=`${he}/browser/session`,te=`${he}/browser/provider`,I=`${D}/data/workspaces`,De=`${D}/data/roles`,U=`${D}/data/datastreams`,z=`${D}/data/sensors`,T=`${D}/data/things`,Pe=`${T}/tags`,K=`${D}/data/orchestration-systems`,H=`${D}/data/data-sources`,q=`${D}/data/observed-properties`,Z=`${D}/data/processing-levels`,re=`${D}/data/result-qualifiers`,J=`${D}/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(`${De}?is_user_role=true`),getAPIKeyRoles:async e=>c.paginatedFetch(`${De}?is_apikey_role=true`),getRole:async e=>c.fetch(`${De}/${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,Fr=Be*7,Dr=Ne*30,Pr=Be*365,ne={[M.SECOND]:vt,[M.MINUTE]:de,[M.HOUR]:Ne,[M.DAY]:Be,[M.WEEK]:Fr,[M.MONTH]:Dr,[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 Ft=`(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
- `,Dt=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Ft],{type:"text/javascript;charset=utf-8"});function Xr(e){let t;try{if(t=Dt&&(self.URL||self.webkitURL).createObjectURL(Dt),!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(Ft),{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=typeof SharedArrayBuffer<"u";function F(e,t){return bn?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 Sn(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 En(e,t){switch(e){case k.ADD_POINTS:case k.FILL_GAPS:return!1;default:return!0}}class vn{dataset={source:{x:new Float64Array(F(ee*Float64Array.BYTES_PER_ELEMENT,ee*Float64Array.BYTES_PER_ELEMENT)),y:new Float32Array(F(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=F(this.dataX.buffer.byteLength,n*Float64Array.BYTES_PER_ELEMENT),a=F(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),En(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)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=F(i*Float64Array.BYTES_PER_ELEMENT),u=F(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=F(E,Math.max(this.dataX.buffer.maxByteLength,E)),$=F(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(Ln=>{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=$n=>{Ln($n.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=F(this.dataX.buffer.byteLength,this.dataX.buffer.maxByteLength),S=F(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=F(this.dataX.buffer.byteLength,this.dataX.buffer.maxByteLength),g=F(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=F(a,Math.max(this.dataX.buffer.maxByteLength,a)),l=F(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&&Sn(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",kn=new Set([...Object.values(k),...Object.values(L)]);function _n(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 An(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(!kn.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 Tn(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=D,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=vn,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=Tn,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=An,w.requestInterceptor=Se,w.responseInterceptor=Ee,w.runBenchmarks=qt,w.serializeHistory=_n,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||{}),L=(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))(L||{}),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||{}),Ae=(r=>(r.ADD="ADD",r.SUB="SUB",r.MULT="MULT",r.DIV="DIV",r.ASSIGN="ASSIGN",r))(Ae||{}),Le=(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))(Le||{});class Te{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 At extends Te{resourceTitle;resourceAbstract;resourceKeywords;constructor(){super(),this.resourceTitle=void 0,this.resourceAbstract=void 0,this.resourceKeywords=void 0}}class _e{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 _e;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 Tt{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 Rt{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 It{id;workspaceId;name;definition;description;type;code;constructor(){this.id="",this.workspaceId="",this.name="",this.definition="",this.description="",this.type="Hydrology",this.code=""}}class Mt{id;workspaceId;code;definition;explanation;constructor(){this.id="",this.workspaceId="",this.code="",this.definition="",this.explanation=""}}class Ot{id;workspaceId;code;description;constructor(){this.id="",this.workspaceId="",this.code="",this.description=""}}class Ut{name;code;type;description;link;constructor(){}}class Ct{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 Dt{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 Nt{id="";key="";name="";description="";isActive=!0;expiresAt="";createdAt="";lastUsed="";workspaceId="";role=null;constructor(e){Object.assign(this,e)}}class Ft{id;name;isPrivate;owner;collaboratorRole;pendingTransferTo;constructor(){this.id="",this.name="",this.isPrivate=!1,this.owner=null,this.collaboratorRole=null,this.pendingTransferTo=null}}class Pt{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 Bt{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 jt{name="";mappings=[];extractorVariables={};constructor(e){Object.assign(this,e)}}const Ce=1,H=Ce*60,te=H*60,re=te*24,xt=re*7,Wt=te*30,Yt=re*365,W={[I.SECOND]:Ce,[I.MINUTE]:H,[I.HOUR]:te,[I.DAY]:re,[I.WEEK]:xt,[I.MONTH]:Wt,[I.YEAR]:Yt},Gt=r=>r.toLocaleString(void 0,{year:"numeric",month:"short",day:"2-digit",hour:"2-digit",hour12:!1,minute:"2-digit",second:"2-digit"}),zt=r=>{let e,t;r>=H*1e3?(e=r/(H*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}`},X=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 d=c.value;d.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),p=m.next();!p.done;p=m.next()){var y=p.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{p&&!p.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 $t(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=Kt,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),Vt=(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 Vt(s),i}return e})(je);function K(r){$t(r)}function qt(r){throw r}var Kt={closed:!0,next:Be,error:qt,complete:Be},Jt=(function(){return typeof Symbol=="function"&&Symbol.observable||"@@observable"})();function Qt(r){return r}function Zt(r){return r.length===0?Qt: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=tr(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[Jt]=function(){return this},r.prototype.pipe=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return Zt(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 er(r){return r&&B(r.next)&&B(r.error)&&B(r.complete)}function tr(r){return r&&r instanceof je||er(r)&&Fe(r)}var rr=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 rr},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(d){o={error:d}}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||{}),ze=(r=>(r.Center="center",r.Left="left",r.Right="right",r.Bottom="bottom",r.Top="top",r))(ze||{});class He{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 nr{static subject=new Ye;static get snack$(){return this.subject.asObservable()}static createSnackbar(e,t){this.subject.next(new He(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 sr(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},Xe=`(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);",Xe],{type:"text/javascript;charset=utf-8"});function or(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(Xe),{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 ir(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 ar(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 cr(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 lr(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 ur(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 fr(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 hr(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 dr(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 pr(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 mr(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 d=!1;for(let f=0;f<s;f++){const w=n[f],m=o[f];if(w===0){if(c<m){d=!0;break}}else if(w===1){if(c<=m){d=!0;break}}else if(w===2){if(c>m){d=!0;break}}else if(w===3){if(c>=m){d=!0;break}}else if(c==m){d=!0;break}}d&&i.push(a)}return i}function wr(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 gr(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 yr(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 br(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 Sr(r,e,t,n,o,i,s,a,c,d,f){let w=0,m=a;for(let p=i;p<=s;p++)if(n[m]=r[p],o[m]=e[p],m++,w<t.length&&p===t[w][0]){const y=t[w][0],l=t[w][1],u=r[y],g=r[l],h=e[y],S=e[l],E=g-u,A=S-h;let T=u+c;for(;T<g;)n[m]=T,o[m]=d?h+(T-u)*A/E:f,m++,T+=c;w++}return m-a}function Er(r,e,t,n,o,i,s,a){let c=i,d=0,f=a;const w=t.length;for(;c<s&&d<w;){const m=t[d][0];r[c]<=m?(n[f]=r[c],o[f]=e[c],c++):(n[f]=m,o[f]=t[d][1],d++),f++}for(;c<s;)n[f]=r[c],o[f]=e[c],c++,f++;for(;d<w;)n[f]=t[d][0],o[f]=t[d][1],d++,f++;return f-a}function vr(r,e,t,n,o,i,s,a){let c=0,d=a;for(let f=i;f<=s;f++)c<t.length&&f===t[c]?c++:(n[d]=r[f],o[d]=e[f],d++);return d-a}function kr(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 Ar(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],d=r[s],f=e[s],w=d-a,m=f-c;if(w===0){for(let p=0;p<o.length;p++)e[o[p]]=c;continue}for(let p=0;p<o.length;p++){const y=o[p];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 d=o;d<i;d++)e[d]=e[d]+s*((r[d]-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",Tr=720*60*60*1e3,J=5e4,Q=2e5,Z={spawnOverheadMs:50,inlineThroughput:5e4,workerThroughput:8e4,hwConcurrency:4,measuredAt:0,userAgent:"default"};let M=Dr()??Z,we=null,Y=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"},[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 Rr(r){return ge.add(r),()=>ge.delete(r)}function Ir(){return M}function Mr(){return we}function Or(){return Object.keys(ye).map(r=>({op:r,...ye[r]}))}function Ur(){M=Z,we=null;try{localStorage.removeItem(me)}catch{}}async function Cr(r={}){if(typeof window>"u"||!(r.force||M.measuredAt===0||Date.now()-M.measuredAt>Tr))return M;if(Y)await Y;else{Y=yt().finally(()=>{Y=null});const t=await Y;M=t,Nr(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=Se(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=Se(a),d=new SharedArrayBuffer(Q*Float32Array.BYTES_PER_ELEMENT),f=new Float32Array(d);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:d,start:0,end:Q,ops:[2],values:[.5]})}),performance.now()-l}),m=Math.max(Se(w)-c,.1),p=Q/m;return{spawnOverheadMs:c,inlineThroughput:i,workerThroughput:p,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 Se(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 Dr(){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 Nr(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,Fr=typeof SharedArrayBuffer<"u";function O(r,e){return Fr?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 Pr(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 St(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 X(()=>{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);const s=St(e,t)&&this.history[this.history.length-1]?.method===L.SELECTION?this.history[this.history.length-1].selected?.length:void 0;i={method:e,args:t,execution:{startedAt:Date.now(),inFlight:!0,datasetSize:this.dataset.source.x?.length??0,selectionSize:s}},this.history.push(i),St(e,t)||this.history[this.history.length-2]?.method===L.SELECTION&&this.history.splice(this.history.length-2,1),this._pendingExecutionMode="inline";const a=await X(async()=>await n[e].apply(this,t));o=a.response;const c=this.history.indexOf(i),d=c>=0?this.history[c]:void 0;d&&(d.execution={...d.execution,status:"success",durationMs:a.duration,mode:this._pendingExecutionMode,inFlight:!1})}catch{if(i){const a=this.history.indexOf(i),c=a>=0?this.history[a]:void 0;c&&(c.execution={...c.execution,status:"failed",inFlight:!1})}}return o}async dispatch(e,...t){const n=async(o,i)=>L[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={[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 o=[],i=null;try{const s=e===L.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,execution:{startedAt:Date.now(),inFlight:!0,datasetSize:this.dataset.source.x?.length??0}};const c=this.history[this.history.length-1],d=!!L[c?.method],f=c?.method===e||d&&!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 X(async()=>await n[e].apply(this,t));o=m.response;const p=this.history.indexOf(i),y=p>=0?this.history[p]:void 0;y&&(y.selected=m.response,y.execution={...y.execution,status:"success",durationMs:m.duration,mode:this._pendingExecutionMode,selectionSize:m.response?.length,inFlight:!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.execution={...c.execution,status:"failed",inFlight:!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=[],d=[];for(let f=0;f<s;f++){const w=f*a,m=Math.min((f+1)*a,o);if(w>=m)break;const p=n.slice(w,m);d.push(new Promise(y=>{const l=new mr;c.push(l),l.postMessage({bufferY:this.dataY.buffer,indexes:p,operator:e,value:t}),l.onmessage=u=>{y(u.data)}}))}return await Promise.all(d),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){Ar(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=[],d=[];for(let f=0;f<s;f++){const w=o.slice(f*a,(f+1)*a);if(w.length===0)break;d.push(new Promise(m=>{const p=new ar;c.push(p),p.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,groups:w}),p.onmessage=y=>{m(y.data)}}))}await Promise.all(d),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=kr(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 d=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),p=[],y=[];for(let h=0;h<w;h++){const S=h*m,E=Math.min((h+1)*m,a);if(S>=E)break;const A=e.slice(S,E);y.push(new Promise(T=>{const _=new ur;p.push(_),_.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,outputBufferX:d,outputBufferY:f,indexes:A,outStart:S,amount:t,isMonth:o,isYear:i,deltaMs:s}),_.onmessage=R=>{T(R.data)}}))}await Promise.all(y),p.forEach(h=>h.terminate());const l=new Float64Array(d),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,d=this.dataX,f=i?.[0]!=null&&Number.isFinite(i[0])?D(d,i[0]):0,w=i?.[1]!=null&&Number.isFinite(i[1])?N(d,i[1]):s-1,m=[],p=[];let y=0;for(let k=f+1;k<=w;k++)if(d[k]-d[k-1]>a){let C=0,F=d[k-1]+c;for(;F<d[k];)C++,F+=c;C>0&&(m.push([k-1,k]),p.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=p[k];for(let F=1;F<=C;F++)l[g++]=P+u+F;u+=C}const h=s+y,S=h*Float64Array.BYTES_PER_ELEMENT,E=h*Float32Array.BYTES_PER_ELEMENT,A=O(S,Math.max(this.dataX.buffer.maxByteLength,S)),T=O(E,Math.max(this.dataY.buffer.maxByteLength,E));if(!U(v.FILL_GAPS,{datasetSize:s,selectionSize:y}).useWorker){const k=new Float64Array(A),P=new Float32Array(T);return Sr(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),Ee=[];let z=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(;z<m.length&&m[z][0]<=C;)F.push(m[z]),ee+=p[z],z++;Ee.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]+Ee[k-1].fillsInSegment;const vt=[],kt=[];for(let k=0;k<R;k++){const{start:P,end:C,gapsSegment:F}=Ee[k],ee=P+ve[k];kt.push(new Promise(Hr=>{const ke=new ir;vt.push(ke),ke.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,outputBufferX:A,outputBufferY:T,start:P,end:C,gapsSegment:F,startTarget:ee,fillDelta:c,interpolate:n,fillValue:o}),ke.onmessage=Xr=>{Hr(Xr.data)}}))}return await Promise.all(kt),vt.forEach(k=>k.terminate()),this.dataset.source.x=new Float64Array(A),this.dataset.source.y=new Float32Array(T),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 p=O(this.dataX.buffer.byteLength,this.dataX.buffer.maxByteLength),y=O(this.dataY.buffer.byteLength,this.dataY.buffer.maxByteLength),l=new Float64Array(p),u=new Float32Array(y);vr(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 p=0;p<i;p++){const y=p*s,l=Math.min((p+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 d=new Array(i).fill(0);for(let p=1;p<i;p++)d[p]=d[p-1]+c[p-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 p=0;p<i;p++){const{start:y,end:l,deleteSegment:u}=c[p],g=y-d[p];f.push(new Promise(h=>{const S=new or;a.push(S),S.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,outputBufferX:w,outputBufferY:m,start:y,end:l,deleteSegment:u,startTarget:g}),S.onmessage=E=>{h(E.data)}}))}await Promise.all(f),a.forEach(p=>p.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,p]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:p,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 d=[],f=[];for(const w of c)w.length!==0&&f.push(new Promise(m=>{const p=new cr;d.push(p),p.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,jobs:w}),p.onmessage=y=>{m(y.data)}}));await Promise.all(f),d.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),p=[],y=[];for(let l=0;l<w;l++){const u=l*m,g=Math.min((l+1)*m,t),h=D(f,u),S=l===w-1?e.length:D(f,g),E=e.slice(h,S),A=u+h;u>=g&&E.length===0||y.push(new Promise(T=>{const _=new lr;p.push(_),_.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,outputBufferX:a,outputBufferY:c,origStart:u,origEnd:g,insertions:E,outStart:A}),_.onmessage=R=>{T(R.data)}}))}return await Promise.all(y),p.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(S=>o[S]??4),s=n.map(S=>e[S]),a=this.dataset.source.y,c=this.dataset.source.x;let d=0,f=a.length;if(f===0)return[];if(t!=null){const[S,E]=t;S!=null&&Number.isFinite(S)&&(d=D(c,S)),E!=null&&Number.isFinite(E)&&(f=N(c,E)+1)}if(f<=d)return[];const w=f-d;if(!U(L.VALUE_THRESHOLD,{datasetSize:w}).useWorker)return wt(a,d,f,i,s);this._pendingExecutionMode="worker";const p=Math.min(navigator.hardwareConcurrency||1,w),y=Math.ceil(w/p),l=[],u=[];for(let S=0;S<p;S++){const E=d+S*y,A=Math.min(d+(S+1)*y,f);if(E>=A)break;u.push(new Promise(T=>{const _=new pe;l.push(_),_.postMessage({bufferY:this.dataY.buffer,start:E,end:A,ops:i,values:s}),_.onmessage=R=>{T(R.data)}}))}const g=await Promise.all(u);l.forEach(S=>S.terminate());const h=[];for(let S=0;S<g.length;S++){const E=g[S];for(let A=0;A<E.length;A++)h.push(E[A])}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(L.RATE_OF_CHANGE,{datasetSize:o.length}).useWorker)return gr(o,s,a,e,t);this._pendingExecutionMode="worker";const f=Math.min(navigator.hardwareConcurrency||1,c),w=Math.ceil(c/f),m=[],p=[];for(let u=0;u<f;u++){const g=s+u*w,h=Math.min(s+(u+1)*w,a);if(g>=h)break;p.push(new Promise(S=>{const E=new pr;m.push(E),E.postMessage({bufferY:this.dataY.buffer,start:g,end:h,comparator:e,value:t}),E.onmessage=A=>{S(A.data)}}))}const y=await Promise.all(p);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!==L.SELECTION&&!!L[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&&Pr(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(L.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=[],p=[];for(let u=0;u<f;u++){const g=s+u*w,h=Math.min(s+(u+1)*w,a);if(g>=h)break;p.push(new Promise(S=>{const E=new dr;m.push(E),E.postMessage({bufferY:this.dataY.buffer,start:g,end:h,comparator:e,value:t}),E.onmessage=A=>{S(A.data)}}))}const y=await Promise.all(p);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(L.FIND_GAPS,{datasetSize:s-i}).useWorker){const u=yr(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 d=s-i,f=Math.min(navigator.hardwareConcurrency||1,d),w=Math.ceil(d/f),m=[],p=[];for(let u=0;u<f;u++){const g=i+u*w,h=Math.min(i+(u+1)*w,s);if(g>=h)break;p.push(new Promise(S=>{const E=new fr;m.push(E),E.postMessage({bufferX:this.dataX.buffer,start:g,endInclusive:h,threshold:a}),E.onmessage=A=>{S(A.data)}}))}const y=await Promise.all(p);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,S]=t;h!=null&&Number.isFinite(h)&&(i=D(n,h)),S!=null&&Number.isFinite(S)&&(s=N(n,S)+1)}if(s<=i)return[];const a=s-i;if(!U(L.PERSISTENCE,{datasetSize:a}).useWorker){const h=br(o,i,s),S=[];for(let E=0;E<h.length;E+=3){const A=h[E],T=h[E+1];if(T>=e)for(let _=0;_<T;_++)S.push(A+_)}return S}this._pendingExecutionMode="worker";const d=Math.min(navigator.hardwareConcurrency||1,a),f=Math.ceil(a/d),w=[],m=[];for(let h=0;h<d;h++){const S=i+h*f,E=Math.min(i+(h+1)*f,s);if(S>=E)break;m.push(new Promise(A=>{const T=new hr;w.push(T),T.postMessage({bufferY:this.dataY.buffer,start:S,end:E}),T.onmessage=_=>{A(_.data)}}))}const p=await Promise.all(m);w.forEach(h=>h.terminate());const y=[],l=[],u=[];for(let h=0;h<p.length;h++){const S=p[h];for(let E=0;E<S.length;E+=3){const A=S[E],T=S[E+1],_=S[E+2],R=y.length-1;R>=0&&u[R]===_&&y[R]+l[R]===A?l[R]+=T:(y.push(A),l.push(T),u.push(_))}}const g=[];for(let h=0;h<y.length;h++){const S=l[h];if(S>=e){const E=y[h];for(let A=0;A<S;A++)g.push(E+A)}}return g}}const G="1",jr=new Set([...Object.values(v),...Object.values(L)]);function xr(r){if(!r)return;const e={},t=a=>typeof a=="number"&&Number.isFinite(a)?a:void 0,n=t(r.startedAt);n!==void 0&&(e.startedAt=n),(r.status==="success"||r.status==="failed")&&(e.status=r.status);const o=t(r.durationMs);o!==void 0&&(e.durationMs=o),(r.mode==="worker"||r.mode==="inline")&&(e.mode=r.mode);const i=t(r.datasetSize);i!==void 0&&(e.datasetSize=i);const s=t(r.selectionSize);return s!==void 0&&(e.selectionSize=s),Object.keys(e).length===0?void 0:e}function Wr(r,e){if(r===void 0)return;if(!r||typeof r!="object")throw new Error(`Operation ${e} \`execution\` must be an object when present.`);const t=r,n={},o=(i,s)=>{if(typeof s!="number"||!Number.isFinite(s))throw new Error(`Operation ${e} \`execution.${i}\` must be a finite number when present.`)};if(t.startedAt!==void 0&&(o("startedAt",t.startedAt),n.startedAt=t.startedAt),t.status!==void 0){if(t.status!=="success"&&t.status!=="failed")throw new Error(`Operation ${e} \`execution.status\` must be "success" or "failed" when present.`);n.status=t.status}if(t.durationMs!==void 0&&(o("durationMs",t.durationMs),n.durationMs=t.durationMs),t.mode!==void 0){if(t.mode!=="worker"&&t.mode!=="inline")throw new Error(`Operation ${e} \`execution.mode\` must be "worker" or "inline" when present.`);n.mode=t.mode}return t.datasetSize!==void 0&&(o("datasetSize",t.datasetSize),n.datasetSize=t.datasetSize),t.selectionSize!==void 0&&(o("selectionSize",t.selectionSize),n.selectionSize=t.selectionSize),n}function Yr(r,e){const t=r.history.map(n=>{const o={method:n.method,args:n.args?[...n.args]:[]},i=xr(n.execution);return i&&(o.execution=i),o});return{version:G,createdAt:new Date().toISOString(),window:{startDate:e.startDate,endDate:e.endDate},operations:t}}function Gr(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]},c=Wr(s.execution,i);return c&&(a.execution=c),a});return{version:G,createdAt:e.createdAt,window:{startDate:t.startDate,endDate:t.endDate},operations:n}}async function zr(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]?.execution.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=Nt,b.Collaborator=Pt,b.DEFAULT_SNACK_DURATION=ue,b.DataSource=Bt,b.Datastream=Tt,b.EnumEditOperations=v,b.EnumFilterOperations=L,b.FilterOperation=j,b.HydroShareArchive=Te,b.INCREASE_AMOUNT=x,b.Location=_e,b.LogicalOperation=Le,b.OAuthProvider=Dt,b.ObservationRecord=Br,b.ObservedProperty=It,b.Operator=Ae,b.Organization=Ut,b.Payload=jt,b.PermissionAction=Re,b.PermissionResource=Ie,b.Position=ze,b.PostHydroShareArchive=At,b.ProcessingLevel=Mt,b.QC_SCRIPT_VERSION=G,b.ResultQualifier=Ot,b.Sensor=Rt,b.Snack=He,b.SnackColor=fe,b.SnackIcon=he,b.SnackTitle=de,b.Snackbar=nr,b.Thing=Lt,b.TimeUnit=I,b.Unit=_t,b.User=Ct,b.Workspace=Ft,b.applyScript=zr,b.clearCalibration=Ur,b.ensureCalibration=Cr,b.findFirstGreaterOrEqual=D,b.findLastLessOrEqual=N,b.formatDate=Gt,b.formatDuration=zt,b.getCalibration=Ir,b.getLastBenchmarkDetail=Mr,b.getOperationTable=Or,b.measureEllapsedTime=X,b.onCalibrationChange=Rr,b.parseScript=Gr,b.runBenchmarks=yt,b.serializeHistory=Yr,b.shouldUseWorker=U,b.subtractHours=sr,b.timeUnitMultipliers=W,Object.defineProperty(b,Symbol.toStringTag,{value:"Module"})}));
@@ -64,23 +64,82 @@ export declare enum LogicalOperation {
64
64
  GTE = "Greater than or equal to",
65
65
  E = "Equal"
66
66
  }
67
+ /**
68
+ * Per-dispatch runtime information attached to every `HistoryItem`.
69
+ *
70
+ * Populated in two phases by `ObservationRecord.dispatchAction` /
71
+ * `dispatchFilter`:
72
+ *
73
+ * - **Push time**: `startedAt`, `inFlight: true`, `datasetSize`,
74
+ * and (for selection-consuming edits) `selectionSize` are set
75
+ * before the handler runs.
76
+ * - **Resolve time**: `status`, `durationMs`, `mode`, and (for
77
+ * filters) `selectionSize` are set when the handler returns or
78
+ * throws.
79
+ *
80
+ * The qc-app reads this object to drive the EditHistory UI
81
+ * (per-row spinner via `inFlight`, failure badge via `status`,
82
+ * duration text via `durationMs`, dev-only worker/inline chip via
83
+ * `mode`). Replays from `undo()` / `redo()` / `applyScript` build
84
+ * a fresh execution record for the new run rather than re-stamping
85
+ * the saved one.
86
+ */
87
+ export interface HistoryExecution {
88
+ /**
89
+ * Wall-clock epoch-milliseconds (UTC) when the dispatch site pushed
90
+ * this entry. Re-stamped on every replay so the in-memory value
91
+ * always reflects the current session's execution. `serializeHistory`
92
+ * persists it for audit; the script loader does not restore it.
93
+ */
94
+ startedAt: number;
95
+ /**
96
+ * True from the moment the dispatch pushed the entry until the
97
+ * handler resolves (success or failure). Drives per-row spinners
98
+ * in the qc-app.
99
+ */
100
+ inFlight: boolean;
101
+ /** Final outcome — `undefined` while `inFlight` is `true`. */
102
+ status?: "success" | "failed";
103
+ /**
104
+ * Wall-clock duration in milliseconds. Set after the handler
105
+ * resolves. `undefined` while `inFlight`.
106
+ */
107
+ durationMs?: number;
108
+ /**
109
+ * Whether the op actually ran on a web worker or inline on the
110
+ * main thread. Populated based on the calibration decision and
111
+ * any always-inline / always-worker handler behaviour. Mainly
112
+ * useful in dev for verifying that the calibration layer is
113
+ * routing as expected.
114
+ */
115
+ mode?: "worker" | "inline";
116
+ /**
117
+ * Number of observations in the record at the time the op ran,
118
+ * captured at push time. Reflects the pre-edit shape — i.e.
119
+ * exactly what the handler saw on entry. Useful for retrospective
120
+ * perf inspection: "this op took 300ms because the record had
121
+ * 500k points."
122
+ */
123
+ datasetSize?: number;
124
+ /**
125
+ * Number of indices the op acted on. For filters this is the
126
+ * size of the resulting selection (populated at resolve time);
127
+ * for selection-consuming edits it's the size of the preceding
128
+ * SELECTION (populated at push time). `undefined` when not
129
+ * applicable (e.g. ADD_POINTS, which is datetime-addressed).
130
+ */
131
+ selectionSize?: number;
132
+ }
67
133
  export type HistoryItem = {
68
134
  method: EnumEditOperations | EnumFilterOperations;
69
- isLoading: boolean;
70
135
  args?: any[];
71
- duration?: number;
72
136
  selected?: number[];
73
- status?: "success" | "failed";
74
137
  /**
75
- * Whether the operation actually ran on a web worker or inline on
76
- * the main thread. Populated by the `ObservationRecord` dispatch
77
- * site based on the calibration decision and any always-inline /
78
- * always-worker handler behaviour. Mainly useful in dev for
79
- * verifying that the calibration layer is routing as expected —
80
- * the qc-app surfaces a small badge per history entry when
81
- * `import.meta.env.DEV` is truthy.
138
+ * Per-dispatch runtime information. Always present; some fields
139
+ * populate at push time, others fill in after the handler resolves.
140
+ * See `HistoryExecution` for the two-phase population rules.
82
141
  */
83
- executionMode?: "worker" | "inline";
142
+ execution: HistoryExecution;
84
143
  };
85
144
  /** The wall-clock window the script was authored against. The
86
145
  * loader is responsible for fetching this exact range of
@@ -91,15 +150,36 @@ export type QcScriptWindow = {
91
150
  startDate: string;
92
151
  endDate: string;
93
152
  };
153
+ /**
154
+ * The execution record persisted alongside a saved script operation.
155
+ * Mirrors `HistoryExecution` minus the runtime-only `inFlight` flag,
156
+ * since a serialized op is always "resolved" by definition. Every
157
+ * field is optional so pre-v1.1 scripts (and any consumer that
158
+ * hand-writes the JSON) still load.
159
+ *
160
+ * Replays do **not** restore these values onto the new
161
+ * `HistoryItem.execution`; the dispatch site stamps fresh runtime
162
+ * data for the current session. Persistence is for audit only:
163
+ * "this op originally ran inline on a 50k record in 240ms."
164
+ */
165
+ export type QcScriptExecution = {
166
+ startedAt?: number;
167
+ status?: "success" | "failed";
168
+ durationMs?: number;
169
+ mode?: "worker" | "inline";
170
+ datasetSize?: number;
171
+ selectionSize?: number;
172
+ };
94
173
  /** A single replayable operation entry. Mirrors the
95
174
  * `[method, ...args]` tuple shape that
96
- * `ObservationRecord.dispatch` accepts. `status` round-trips
97
- * author-time failures so failed steps stay visibly failed across
98
- * save / load. */
175
+ * `ObservationRecord.dispatch` accepts. `execution` carries
176
+ * per-dispatch audit data (timing, mode, dataset shape) round-
177
+ * tripped verbatim so the saved script preserves the authoring
178
+ * context for review. */
99
179
  export type QcScriptOperation = {
100
180
  method: EnumEditOperations | EnumFilterOperations;
101
181
  args: any[];
102
- status?: "success" | "failed";
182
+ execution?: QcScriptExecution;
103
183
  };
104
184
  /** A serialized QC history. Schema `version: "1"`. */
105
185
  export type QcScript = {
@@ -4,11 +4,14 @@
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`, keep `method` and `args`,
8
+ * project the live `HistoryExecution` into a `QcScriptExecution`
9
+ * (drop `inFlight` since a serialized entry is always
10
+ * resolved; keep the rest — `startedAt`, `status`, `durationMs`,
11
+ * `mode`, `datasetSize`, `selectionSize`). The runtime-only
12
+ * `selected` array is recomputed on replay and not persisted.
13
+ * Wrap with a `version`, `createdAt`, and the wall-clock
14
+ * `window` the consumer was working in.
12
15
  *
13
16
  * - **Load:** reset `history` + `redoStack`, `record.reload()`,
14
17
  * 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.23",
3
+ "version": "0.1.1",
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 {};