@uwrl/qc-utils 0.0.20 → 0.0.22
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.
- package/dist/index.js +1228 -1020
- package/dist/index.umd.cjs +14 -14
- package/dist/types/index.d.ts +35 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/plotting/__tests__/script.spec.d.ts +1 -0
- package/dist/utils/plotting/observation-record.d.ts +87 -6
- package/dist/utils/plotting/script.d.ts +67 -0
- package/package.json +3 -2
package/dist/index.umd.cjs
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
(function(
|
|
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
2
|
`+r.map(function(n,s){return s+1+") "+n.toString()}).join(`
|
|
3
|
-
`):"",this.name="UnsubscriptionError",this.errors=r}});function Ae(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var oe=(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=Ee(o),l=i.next();!l.done;l=i.next()){var f=l.value;f.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(N(u))try{u()}catch(h){a=h instanceof _e?h.errors:[h]}var p=this._finalizers;if(p){this._finalizers=null;try{for(var g=Ee(p),y=g.next();!y.done;y=g.next()){var d=y.value;try{nt(d)}catch(h){a=a??[],h instanceof _e?a=ve(ve([],ke(a)),ke(h.errors)):a.push(h)}}}catch(h){n={error:h}}finally{try{y&&!y.done&&(s=g.return)&&s.call(g)}finally{if(n)throw n.error}}}if(a)throw new _e(a)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)nt(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)&&Ae(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&Ae(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=(function(){var t=new e;return t.closed=!0,t})(),e})(),tt=oe.EMPTY;function rt(e){return e instanceof oe||e&&"closed"in e&&N(e.remove)&&N(e.add)&&N(e.unsubscribe)}function nt(e){N(e)?e():e.unsubscribe()}var ur={Promise:void 0},hr={setTimeout:function(e,t){for(var r=[],n=2;n<arguments.length;n++)r[n-2]=arguments[n];return setTimeout.apply(void 0,ve([e,t],ke(r)))},clearTimeout:function(e){return clearTimeout(e)},delegate:void 0};function fr(e){hr.setTimeout(function(){throw e})}function st(){}function ae(e){e()}var ot=(function(e){se(t,e);function t(r){var n=e.call(this)||this;return n.isStopped=!1,r?(n.destination=r,rt(r)&&r.add(n)):n.destination=yr,n}return t.create=function(r,n,s){return new Te(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})(oe),dr=(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){ie(n)}},e.prototype.error=function(t){var r=this.partialObserver;if(r.error)try{r.error(t)}catch(n){ie(n)}else ie(t)},e.prototype.complete=function(){var t=this.partialObserver;if(t.complete)try{t.complete()}catch(r){ie(r)}},e})(),Te=(function(e){se(t,e);function t(r,n,s){var a=e.call(this)||this,o;return N(r)||!r?o={next:r??void 0,error:n??void 0,complete:s??void 0}:o=r,a.destination=new dr(o),a}return t})(ot);function ie(e){fr(e)}function pr(e){throw e}var yr={closed:!0,next:st,error:pr,complete:st},gr=(function(){return typeof Symbol=="function"&&Symbol.observable||"@@observable"})();function mr(e){return e}function wr(e){return e.length===0?mr:e.length===1?e[0]:function(r){return e.reduce(function(n,s){return s(n)},r)}}var at=(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=Sr(t)?t:new Te(t,r,n);return ae(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=it(r),new r(function(s,a){var o=new Te({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[gr]=function(){return this},e.prototype.pipe=function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return wr(t)(this)},e.prototype.toPromise=function(t){var r=this;return t=it(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 it(e){var t;return(t=e??ur.Promise)!==null&&t!==void 0?t:Promise}function br(e){return e&&N(e.next)&&N(e.error)&&N(e.complete)}function Sr(e){return e&&e instanceof ot||br(e)&&rt(e)}var Er=et(function(e){return function(){e(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"}}),ct=(function(e){se(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 lt(this,this);return n.operator=r,n},t.prototype._throwIfClosed=function(){if(this.closed)throw new Er},t.prototype.next=function(r){var n=this;ae(function(){var s,a;if(n._throwIfClosed(),!n.isStopped){n.currentObservers||(n.currentObservers=Array.from(n.observers));try{for(var o=Ee(n.currentObservers),i=o.next();!i.done;i=o.next()){var l=i.value;l.next(r)}}catch(f){s={error:f}}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;ae(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;ae(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?tt:(this.currentObservers=null,i.push(r),new oe(function(){n.currentObservers=null,Ae(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 at;return r.source=this,r},t.create=function(r,n){return new lt(r,n)},t})(at),lt=(function(e){se(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:tt},t})(ct);const Le=3e3;var $e=(e=>(e.Warning="warning",e.Success="success",e.Error="error",e.Info="info",e))($e||{}),Re=(e=>(e.Success="mdi-checkbox-marked-circle",e.Warning="mdi-alert",e.Error="mdi-alert-circle",e.Info="mdi-information",e.None="none",e))(Re||{}),Ie=(e=>(e.Warning="Warning",e.Success="Success",e.Error="Error",e.Info="Info",e))(Ie||{}),ut=(e=>(e.Center="center",e.Left="left",e.Right="right",e.Bottom="bottom",e.Top="top",e))(ut||{});class ht{constructor(t="",r="info",n="none",s="Info",a=Le,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 ft{static subject=new ct;static get snack$(){return this.subject.asObservable()}static createSnackbar(t,r){this.subject.next(new ht(t,$e[r],Re[r],Ie[r],Le,"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 Oe(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=Oe(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 kr(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Ue,dt;function vr(){if(dt)return Ue;dt=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 Ue=t,Ue}var Me,pt;function _r(){if(pt)return Me;pt=1;const e=vr();return Me=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(f,u,...p)=>{s++;const g=(async()=>f(...p))();u(g);try{await g}catch{}a()},i=(f,u,...p)=>{n.enqueue(o.bind(null,f,u,...p)),(async()=>(await Promise.resolve(),s<r&&n.size>0&&n.dequeue()()))()},l=(f,...u)=>new Promise(p=>{i(f,p,...u)});return Object.defineProperties(l,{activeCount:{get:()=>s},pendingCount:{get:()=>n.size},clearQueue:{value:()=>{n.clear()}}}),l},Me}var Ar=_r();const Y=kr(Ar)(10),Tr=1e3;async function q(e,t){const r=we(t);try{const n=await fetch(e,r);return await be(n)}catch(n){throw n instanceof TypeError&&ft.error("Network error. Please check your connection."),n}}const c={async fetch(e,t={}){return t.method="GET",await Y(()=>q(e,t))},async patch(e,t,r=null,n={}){if(n.method="PATCH",n.body=r?Oe(r,t):t,Object.keys(n.body).length!==0)return await Y(()=>q(e,n))},async post(e,t=void 0,r={}){return r.method="POST",r.body=t,await Y(()=>q(e,r))},async put(e,t=void 0,r={}){return r.method="PUT",r.body=t,await Y(()=>q(e,r))},async delete(e,t=void 0,r={}){return r.method="DELETE",r.body=t,await Y(()=>q(e,r))},async paginatedFetch(e,t){const r=t??Tr,n=e.includes("?")?"&":"?",s=`${e}${n}page_size=${r}&page=1`,a=we({method:"GET"}),o=await Y(()=>fetch(s,a)),i=Number(o.headers.get("x-total-pages"))||1,f=[...await be(o)];for(let u=2;u<=i;u++){const p=`${e}${n}page_size=${r}&page=${u}`,g=await Y(()=>q(p,{method:"GET"}));f.push(...g)}return f}},yt={HTTP:{type:"HTTP",sourceUri:"",placeholderVariables:[]},local:{type:"local",sourceUri:"",placeholderVariables:[]}},gt={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"}},mt={HydroServer:{type:"HydroServer"}};class Lr{name="";settings={type:"SDL",extractor:JSON.parse(JSON.stringify(yt.local)),transformer:JSON.parse(JSON.stringify(gt.CSV)),loader:JSON.parse(JSON.stringify(mt.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(yt[t]))}switchTransformer(t){this.settings.transformer=JSON.parse(JSON.stringify(gt[t]))}switchLoader(t){this.settings.loader=JSON.parse(JSON.stringify(mt[t]))}}function wt(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",ce=`${D}/auth`,P=`${ce}/browser/account`,le=`${ce}/browser/session`,Z=`${ce}/browser/provider`,R=`${D}/data/workspaces`,Ce=`${D}/data/roles`,I=`${D}/data/datastreams`,W=`${D}/data/sensors`,_=`${D}/data/things`,De=`${_}/tags`,J=`${D}/data/orchestration-systems`,B=`${D}/data/data-sources`,H=`${D}/data/observed-properties`,K=`${D}/data/processing-levels`,ee=`${D}/data/result-qualifiers`,z=`${D}/data/units`,$r=(e,t,r,n,s)=>{let a=`${I}/${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},Rr={fetchSession:async()=>c.fetch(`${le}`),login:async(e,t)=>c.post(`${le}`,{email:e,password:t}),logout:async()=>c.delete(`${le}`),fetchUser:async()=>c.fetch(`${P}`),signup:async e=>c.post(`${P}`,e),updateUser:async(e,t)=>c.patch(`${P}`,e,t),deleteUser:async()=>c.delete(`${P}`),sendVerificationEmail:async e=>c.put(`${P}/email/verify`,{email:e}),verifyEmailWithCode:async e=>c.post(`${P}/email/verify`,{key:e}),requestPasswordReset:async e=>c.post(`${P}/password/request`,{email:e}),resetPassword:async(e,t)=>c.post(`${P}/password/reset`,{key:e,password:t}),fetchWorkspaces:async()=>c.paginatedFetch(`${R}`),fetchAssociatedWorkspaces:async()=>c.paginatedFetch(`${R}?is_associated=true`),fetchWorkspace:async e=>c.fetch(`${R}/${e}`),createWorkspace:async e=>c.post(R,e),updateWorkspace:async(e,t=null)=>c.patch(`${R}/${e.id}`,e,t),deleteWorkspace:async e=>c.delete(`${R}/${e}`),transferWorkspace:async(e,t)=>c.post(`${R}/${e}/transfer`,{newOwner:t}),acceptWorkspaceTransfer:async e=>c.put(`${R}/${e}/transfer`),rejectWorkspaceTransfer:async e=>c.delete(`${R}/${e}/transfer`),getCollaboratorRoles:async e=>c.paginatedFetch(`${Ce}?is_user_role=true`),getAPIKeyRoles:async e=>c.paginatedFetch(`${Ce}?is_apikey_role=true`),getRole:async e=>c.fetch(`${Ce}/${e}`),getCollaborators:async e=>c.paginatedFetch(`${R}/${e}/collaborators`),addCollaborator:async(e,t,r)=>c.post(`${R}/${e}/collaborators`,{email:t,roleId:r}),updateCollaboratorRole:async(e,t,r)=>c.put(`${R}/${e}/collaborators`,{email:t,roleId:r}),removeCollaborator:async(e,t)=>c.delete(`${R}/${e}/collaborators`,{email:t}),fetchApiKeys:async e=>c.paginatedFetch(`${R}/${e}/api-keys?expand_related=true`),fetchApiKey:async(e,t)=>c.fetch(`${R}/${e}/api-keys/${t}?expand_related=true`),createApiKey:async e=>c.post(`${R}/${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(`${R}/${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(`${R}/${e}/api-keys/${t}/regenerate?expand_related=true`),deleteApiKey:async(e,t)=>c.delete(`${R}/${e}/api-keys/${t}`),fetchConnectedProviders:async()=>c.fetch(`${Z}/connections`),providerRedirect:(e,t,r)=>{const n={provider:e,callback_url:t,process:r},s=me(),a=document.createElement("form");if(a.method="POST",a.action=`${Z}/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(`${Z}/signup`,e),deleteProvider:async(e,t)=>c.delete(`${Z}/connections`,{provider:e,account:t}),createUnit:async e=>c.post(z,e),fetchUnits:async()=>c.paginatedFetch(`${z}`),fetchWorkspaceUnits:async e=>c.paginatedFetch(`${z}?workspace_id=${e}`),updateUnit:async(e,t=null)=>c.patch(`${z}/${e.id}`,e,t),deleteUnit:async e=>c.delete(`${z}/${e}`),getUnit:async e=>c.fetch(`${z}/${e}`),removeThingOwner:async(e,t)=>c.patch(`${_}/${e}/ownership`,{email:t,removeOwner:!0}),addSecondaryOwner:async(e,t)=>c.patch(`${_}/${e}/ownership`,{email:t,makeOwner:!0}),transferPrimaryOwnership:async(e,t)=>c.patch(`${_}/${e}/ownership`,{email:t,transferPrimary:!0}),createThing:async e=>c.post(_,e),fetchThings:async()=>c.paginatedFetch(`${_}`),fetchThingsForWorkspace:async e=>c.paginatedFetch(`${_}?workspace_id=${e}`),fetchOwnedThings:async()=>c.paginatedFetch(`${_}?owned_only=true`),fetchThing:async e=>c.fetch(`${_}/${e}`),updateThing:async e=>c.patch(`${_}/${e.id}`,e),updateThingPrivacy:async(e,t)=>c.patch(`${_}/${e}`,{isPrivate:t}),deleteThing:async e=>c.delete(`${_}/${e}`),fetchMetadataForThingOwner:async e=>c.paginatedFetch(`${_}/${e}/metadata?include_assignable_metadata=true`),fetchMetadataForThing:async e=>c.fetch(`${_}/${e}/metadata`),uploadSitePhotos:async(e,t)=>c.post(`${_}/${e}/photos`,t),fetchSitePhotos:async e=>c.paginatedFetch(`${_}/${e}/photos`),deleteSitePhoto:async(e,t)=>c.delete(`${_}/${e}/photos`,{name:t}),createSiteTag:async(e,t)=>c.post(`${_}/${e}/tags`,t),editSiteTag:async(e,t)=>c.put(`${_}/${e}/tags`,t),fetchSiteTags:async e=>c.fetch(`${_}/${e}/tags`),fetchUsersSiteTags:async()=>c.fetch(`${De}`),deleteSiteTag:async(e,t)=>c.delete(`${_}/${e}/tags`,t),fetchWorkspaceTags:async e=>c.fetch(`${De}/keys?workspace_id=${e}`),createHydroShareArchive:async e=>c.post(`${_}/${e.thingId}/archive`,e),updateHydroShareArchive:async(e,t)=>c.patch(`${_}/${e.thingId}/archive`,e,t),fetchHydroShareArchive:async e=>c.fetch(`${_}/${e}/archive`),deleteHydroShareArchive:async e=>c.delete(`${_}/${e}/archive`),archiveToHydroShare:async e=>c.post(`${_}/${e}/archive/trigger`),createDatastream:async e=>c.post(I,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(`${I}${r}`)},fetchDatastreamsForThing:async e=>c.paginatedFetch(`${I}?thing_id=${e}`),fetchExpandedDatastreamsForThing:async e=>c.paginatedFetch(`${I}?thing_id=${e}&expand_related=true`),fetchDatastreamsForDataSource:async e=>c.paginatedFetch(`${I}?data_source_id=${e}`),fetchDatastream:async e=>c.fetch(`${I}/${e}`),fetchDatastreamExpanded:async e=>c.fetch(`${I}/${e}?expand_related=true`),fetchUsersDatastreams:async()=>c.paginatedFetch(`${I}?exclude_unowned=true`),updateDatastream:async(e,t=null)=>c.patch(`${I}/${e.id}`,e,t),deleteDatastream:async e=>c.delete(`${I}/${e}`),downloadDatastreamCSV:async e=>c.fetch(`${I}/${e}/csv`),createObservedProperty:async e=>c.post(H,e),fetchObservedProperty:async e=>c.fetch(`${H}/${e}`),fetchObservedProperties:async()=>c.paginatedFetch(`${H}`),fetchWorkspaceObservedProperties:async e=>c.paginatedFetch(`${H}?workspace_id=${e}`),updateObservedProperty:async(e,t=null)=>c.patch(`${H}/${e.id}`,e,t),deleteObservedProperty:async e=>c.delete(`${H}/${e}`),createProcessingLevel:async e=>c.post(K,e),fetchProcessingLevels:async()=>c.paginatedFetch(`${K}`),fetchProcessingLevel:async e=>c.fetch(`${K}/${e}`),fetchWorkspaceProcessingLevels:async e=>c.paginatedFetch(`${K}?workspace_id=${e}`),updateProcessingLevel:async(e,t=null)=>c.patch(`${K}/${e.id}`,e,t),deleteProcessingLevel:async e=>c.delete(`${K}/${e}`),createSensor:async e=>c.post(W,e),fetchSensors:async()=>c.paginatedFetch(`${W}`),fetchSensor:async e=>c.fetch(`${W}/${e}`),fetchWorkspaceSensors:async e=>c.paginatedFetch(`${W}?workspace_id=${e}`),updateSensor:async(e,t=null)=>c.patch(`${W}/${e.id}`,e,t),deleteSensor:async e=>c.delete(`${W}/${e}`),createResultQualifier:async e=>c.post(ee,e),fetchResultQualifiers:async()=>c.paginatedFetch(`${ee}`),fetchWorkspaceResultQualifiers:async e=>c.paginatedFetch(`${ee}?workspace_id=${e}`),updateResultQualifier:async(e,t=null)=>c.patch(`${ee}/${e.id}`,e,t),deleteResultQualifier:async e=>c.delete(`${ee}/${e}`),createOrchestrationSystem:async e=>c.post(J,e),fetchOrchestrationSystems:async()=>c.paginatedFetch(J),fetchWorkspaceOrchestrationSystems:async e=>c.paginatedFetch(`${J}?workspace_id=${e}`),fetchOrchestrationSystem:async e=>c.fetch(`${J}/${e}`),updateOrchestrationSystem:async(e,t)=>c.patch(`${J}/${e}`,t),deleteOrchestrationSystem:async e=>c.delete(`${J}/${e}`),createDataSource:async e=>c.post(`${B}?expand_related=true`,wt(e)),fetchDataSources:async()=>c.paginatedFetch(`${B}?expand_related=true`),fetchWorkspaceDataSources:async e=>c.paginatedFetch(`${B}?workspace_id=${e}&expand_related=true`),fetchDataSource:async e=>c.fetch(`${B}/${e}?expand_related=true`),updateDataSource:async e=>c.patch(`${B}/${e.id}?expand_related=true`,wt(e)),updateDataSourcePartial:async e=>c.patch(`${B}/${e.id}?expand_related=true`,e),deleteDataSource:async e=>c.delete(`${B}/${e}`),linkDatastreamToDataSource:async(e,t)=>c.post(`${B}/${e}/datastreams/${t}`),unlinkDatastreamFromDataSource:async(e,t)=>c.delete(`${B}/${e}/datastreams/${t}`),fetchObservations:async e=>c.fetch(e),deleteObservationsForDatastream:async e=>c.post(`${I}/${e}/observations/bulk-delete`,{phenomenonTimeStart:null,phenomenonTimeEnd:null}),fetchUserTypes:async()=>c.fetch(`${P}/user-types`),fetchOrganizationTypes:async()=>c.fetch(`${P}/organization-types`),fetchSiteTypes:async()=>c.fetch(`${_}/site-types`),fetchSamplingFeatureTypes:async()=>c.paginatedFetch(`${_}/sampling-feature-types`),fetchSensorEncodingTypes:async()=>c.paginatedFetch(`${W}/encoding-types`),fetchMethodTypes:async()=>c.paginatedFetch(`${W}/method-types`),fetchVariableTypes:async()=>c.paginatedFetch(`${H}/variable-types`),fetchUnitTypes:async()=>c.paginatedFetch(`${z}/types`),fetchDatastreamStatuses:async()=>c.paginatedFetch(`${I}/statuses`),fetchDatastreamAggregations:async()=>c.paginatedFetch(`${I}/aggregation-statistics`),fetchSampledMediums:async()=>c.paginatedFetch(`${I}/sampled-mediums`)};class Ir{name="";mappings=[];extractorVariables={};constructor(t){Object.assign(this,t)}}const bt=1,ue=bt*60,Fe=ue*60,Pe=Fe*24,Or=Pe*7,Ur=Fe*30,Mr=Pe*365,te={[O.SECOND]:bt,[O.MINUTE]:ue,[O.HOUR]:Fe,[O.DAY]:Pe,[O.WEEK]:Or,[O.MONTH]:Ur,[O.YEAR]:Mr},Cr=e=>e.toLocaleString(void 0,{year:"numeric",month:"short",day:"2-digit",hour:"2-digit",hour12:!1,minute:"2-digit",second:"2-digit"}),Dr=e=>{let t,r;e>=ue*1e3?(t=e/(ue*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}`},he=async(e,t)=>{t&&console.info(t);const r=performance.now(),n=await e(),s=performance.now();console.info(` Done in ${(s-r).toFixed(2)} ms`);const a=+(s-r);return{response:n,duration:a}};function Fr(e,t){const r=new Date(e);return r.setHours(r.getHours()-t),r.toISOString()}const re=(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},fe=(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},St=`(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
|
-
`,
|
|
5
|
-
`,
|
|
6
|
-
|
|
7
|
-
`,
|
|
8
|
-
`,
|
|
9
|
-
`,
|
|
10
|
-
`,
|
|
11
|
-
`,
|
|
12
|
-
`,
|
|
13
|
-
`,
|
|
14
|
-
`,
|
|
15
|
-
`,Gt=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",xt],{type:"text/javascript;charset=utf-8"});function Xr(e){let t;try{if(t=Gt&&(self.URL||self.webkitURL).createObjectURL(Gt),!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(xt),{name:e?.name})}}function Yt(e,t,r,n,s){const a=[],o=n.length;for(let i=t;i<r;i++){const l=e[i];let f=!1;for(let u=0;u<o;u++){const p=n[u],g=s[u];if(p===0){if(l<g){f=!0;break}}else if(p===1){if(l<=g){f=!0;break}}else if(p===2){if(l>g){f=!0;break}}else if(p===3){if(l>=g){f=!0;break}}else if(l==g){f=!0;break}}f&&a.push(i)}return a}function Vr(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 qr(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 Jr(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 Kr(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 Qr(e,t,r,n,s,a,o,i,l,f,u){let p=0,g=i;for(let y=a;y<=o;y++)if(n[g]=e[y],s[g]=t[y],g++,p<r.length&&y===r[p][0]){const d=r[p][0],h=r[p][1],S=e[d],b=e[h],w=t[d],k=t[h],T=b-S,L=k-w;let $=S+l;for(;$<b;)n[g]=$,s[g]=f?w+($-S)*L/T:u,g++,$+=l;p++}return g-i}function Zr(e,t,r,n,s,a,o,i){let l=a,f=0,u=i;const p=r.length;for(;l<o&&f<p;){const g=r[f][0];e[l]<=g?(n[u]=e[l],s[u]=t[l],l++):(n[u]=g,s[u]=r[f][1],f++),u++}for(;l<o;)n[u]=e[l],s[u]=t[l],l++,u++;for(;f<p;)n[u]=r[f][0],s[u]=r[f][1],f++,u++;return u-i}function en(e,t,r,n,s,a,o,i){let l=0,f=i;for(let u=a;u<=o;u++)l<r.length&&u===r[l]?l++:(n[f]=e[u],s[f]=t[u],f++);return f-i}function tn(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 rn(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],f=e[o],u=t[o],p=f-i,g=u-l;if(p===0){for(let y=0;y<s.length;y++)t[s[y]]=l;continue}for(let y=0;y<s.length;y++){const d=s[y];t[d]=l+(e[d]-i)*g/p}}}function nn(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 f=s;f<a;f++)t[f]=t[f]+o*((e[f]-i)/l)}}function Ht(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 Be="qc-utils:calibration:v1",sn=720*60*60*1e3,de=5e4,pe=2e5,ye={spawnOverheadMs:50,inlineThroughput:5e4,workerThroughput:8e4,hwConcurrency:4,measuredAt:0,userAgent:"default"};let U=dn()??ye,je=null,ne=null;const We=new Set,xe={[v.VALUE_THRESHOLD]:{mode:"calibrated",weight:1,rationale:"O(n) single-pass scan; baseline reference"},[v.CHANGE]:{mode:"calibrated",weight:1.1,rationale:"O(n) with one subtraction per step"},[v.RATE_OF_CHANGE]:{mode:"calibrated",weight:1.4,rationale:"O(n) with division + abs per step"},[v.FIND_GAPS]:{mode:"calibrated",weight:.9,rationale:"O(n) on X only, mostly empty output"},[v.PERSISTENCE]:{mode:"calibrated",weight:1.3,rationale:"O(n) + chunk-boundary stitch"},[v.DATETIME_RANGE]:{mode:"always-inline",weight:0,rationale:"O(log n) binary search; never worth the worker hop"},[v.SELECTION]:{mode:"always-inline",weight:0,rationale:"Pure history bookkeeping"},[E.CHANGE_VALUES]:{mode:"calibrated",weight:.7,rationale:"O(k) in-place arithmetic on selection"},[E.ASSIGN_VALUES_BULK]:{mode:"always-inline",weight:0,rationale:"Single tight loop, already inline"},[E.ASSIGN_DATETIMES_BULK]:{mode:"always-inline",weight:0,rationale:"Composes delete+add which handle their own dispatch"},[E.INTERPOLATE]:{mode:"calibrated",weight:1.5,rationale:"Linear interp per consecutive group; in-place writes"},[E.DRIFT_CORRECTION]:{mode:"calibrated",weight:1.2,rationale:"O(range total) in-place math; one pass per range"},[E.SHIFT_DATETIMES]:{mode:"calibrated",weight:1.1,rationale:"O(k) per-point shift math; inline skips SAB allocation"},[E.ADD_POINTS]:{mode:"calibrated",weight:1.8,rationale:"Single merge pass over Y/X + insertions; fresh SAB per call"},[E.DELETE_POINTS]:{mode:"calibrated",weight:1.4,rationale:"Single skip-on-delete pass over Y/X; fresh SAB per call"},[E.FILL_GAPS]:{mode:"calibrated",weight:1.3,rationale:"Single copy-with-fills pass; fresh SAB sized to newLength"}};function F(e,t){const r=xe[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=on(e,t);if(n<=0)return{useWorker:!1,predictedInlineMs:0,predictedWorkerMs:U.spawnOverheadMs,reason:"zero work units"};const s=Math.max(1,Math.min(t.parallelism??U.hwConcurrency,U.hwConcurrency)),a=r.weight*n/U.inlineThroughput,o=U.spawnOverheadMs+r.weight*n/(U.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 on(e,t){switch(e){case E.CHANGE_VALUES:case E.INTERPOLATE:case E.SHIFT_DATETIMES:case E.DRIFT_CORRECTION:return t.selectionSize??0;case E.DELETE_POINTS:return(t.selectionSize??0)+t.datasetSize*.25;case E.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 an(e){return We.add(e),()=>We.delete(e)}function cn(){return U}function ln(){return je}function un(){return Object.keys(xe).map(e=>({op:e,...xe[e]}))}function hn(){U=ye,je=null;try{localStorage.removeItem(Be)}catch{}}async function fn(e={}){if(typeof window>"u"||!(e.force||U.measuredAt===0||Date.now()-U.measuredAt>sn))return U;if(ne)await ne;else{ne=zt().finally(()=>{ne=null});const r=await ne;U=r,pn(r),je=r;for(const n of We)n(U)}return U}async function zt(){if(!(typeof SharedArrayBuffer<"u"))return{...ye,measuredAt:Date.now(),userAgent:navigator.userAgent,hwConcurrency:navigator.hardwareConcurrency||ye.hwConcurrency,sharedArrayBufferAvailable:!1,samples:{spawnRoundtripMs:[],inlineScanMs:[],workerScanMs:[]}};const t=navigator.hardwareConcurrency||4,r=new Float32Array(de);for(let h=0;h<de;h++)r[h]=Math.sin(h);const n=await Ge(3,()=>{const h=performance.now();return Yt(r,0,de,[2],[.5]),performance.now()-h}),s=Ye(n),a=de/Math.max(s,.001),o=new SharedArrayBuffer(256*Float32Array.BYTES_PER_ELEMENT),i=await Ge(3,async()=>{const h=performance.now();return await new Promise(S=>{const b=new Ne;b.onmessage=()=>{b.terminate(),S()},b.postMessage({bufferY:o,start:0,end:256,ops:[2],values:[.5]})}),performance.now()-h}),l=Ye(i),f=new SharedArrayBuffer(pe*Float32Array.BYTES_PER_ELEMENT),u=new Float32Array(f);for(let h=0;h<pe;h++)u[h]=Math.sin(h);const p=await Ge(3,async()=>{const h=performance.now();return await new Promise(S=>{const b=new Ne;b.onmessage=()=>{b.terminate(),S()},b.postMessage({bufferY:f,start:0,end:pe,ops:[2],values:[.5]})}),performance.now()-h}),g=Math.max(Ye(p)-l,.1),y=pe/g;return{spawnOverheadMs:l,inlineThroughput:a,workerThroughput:y,hwConcurrency:t,measuredAt:Date.now(),userAgent:navigator.userAgent,sharedArrayBufferAvailable:!0,samples:{spawnRoundtripMs:i,inlineScanMs:n,workerScanMs:p}}}async function Ge(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 Ye(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 dn(){if(typeof localStorage>"u")return null;try{const e=localStorage.getItem(Be);if(!e)return null;const t=JSON.parse(e);return!t||typeof t.spawnOverheadMs!="number"?null:t}catch{return null}}function pn(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(Be,JSON.stringify(t))}catch{}}const Q=20*1e3,yn=1024,gn=["date","value","qualifier"],mn=typeof SharedArrayBuffer<"u";function C(e,t){return mn?t!==void 0?new SharedArrayBuffer(e,{maxByteLength:t}):new SharedArrayBuffer(e):t!==void 0?new ArrayBuffer(e,{maxByteLength:t}):new ArrayBuffer(e)}function Xt(e,t){const r=e;typeof r.grow=="function"?r.grow(t):typeof r.resize=="function"&&r.resize(t)}class wn{dataset={dimensions:gn,source:{x:new Float64Array(C(Q*Float64Array.BYTES_PER_ELEMENT,Q*Float64Array.BYTES_PER_ELEMENT)),y:new Float32Array(C(Q*Float32Array.BYTES_PER_ELEMENT,Q*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 he(()=>{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+=Q*Float64Array.BYTES_PER_ELEMENT;if(n*Float64Array.BYTES_PER_ELEMENT>this.dataX.buffer.maxByteLength){const s=C(this.dataX.buffer.byteLength,n*Float64Array.BYTES_PER_ELEMENT),a=C(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&&(Xt(this.dataX.buffer,t*Float64Array.BYTES_PER_ELEMENT),Xt(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={[E.ADD_POINTS]:this._addDataPoints,[E.CHANGE_VALUES]:this._changeValues,[E.ASSIGN_VALUES_BULK]:this._assignValuesBulk,[E.DELETE_POINTS]:this._deleteDataPoints,[E.DRIFT_CORRECTION]:this._driftCorrection,[E.INTERPOLATE]:this._interpolate,[E.SHIFT_DATETIMES]:this._shift,[E.ASSIGN_DATETIMES_BULK]:this._assignDatetimesBulk,[E.FILL_GAPS]:this._fillGaps},s={[E.ADD_POINTS]:"mdi-plus",[E.CHANGE_VALUES]:"mdi-pencil",[E.ASSIGN_VALUES_BULK]:"mdi-pencil",[E.DELETE_POINTS]:"mdi-trash-can",[E.DRIFT_CORRECTION]:"mdi-chart-sankey",[E.INTERPOLATE]:"mdi-transit-connection-horizontal",[E.SHIFT_DATETIMES]:"mdi-calendar",[E.ASSIGN_DATETIMES_BULK]:"mdi-calendar",[E.FILL_GAPS]:"mdi-keyboard-space"};let a=[];try{this._isReplaying||(this.redoStack.length=0);const o={method:t,args:r,icon:s[t],isLoading:!0};this.history.push(o);const i=this.history.length-1;this._pendingExecutionMode="inline";const l=await he(async()=>await n[t].apply(this,r));a=l.response;const f=this.history[i];f&&(f.duration=l.duration,f.executionMode=this._pendingExecutionMode,f.isLoading=!1)}catch(o){console.log(`Failed to execute operation: ${t} with arguments: `,r),console.log(o)}return a}async dispatch(t,...r){const n=async(s,a)=>v[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={[v.FIND_GAPS]:this._findGaps,[v.VALUE_THRESHOLD]:this._valueThreshold,[v.DATETIME_RANGE]:this._datetimeRange,[v.PERSISTENCE]:this._persistence,[v.CHANGE]:this._change,[v.RATE_OF_CHANGE]:this._rateOfChange,[v.SELECTION]:this._selection},s={[v.FIND_GAPS]:"mdi-plus",[v.PERSISTENCE]:"mdi-plus",[v.CHANGE]:"mdi-plus",[v.RATE_OF_CHANGE]:"mdi-plus",[v.VALUE_THRESHOLD]:"mdi-plus",[v.DATETIME_RANGE]:"mdi-plus",[v.SELECTION]:"mdi-plus"};let a=[];try{this._isReplaying||(this.redoStack.length=0);const o={method:t,args:r,icon:s[t],isLoading:!0},i=this.history[this.history.length-1];let l;v[i?.method]?(l=this.history.length-1,this.history[l]=o):(this.history.push(o),l=this.history.length-1),this._pendingExecutionMode="inline";const f=await he(async()=>await n[t].apply(this,r));a=f.response;const u=this.history[l];u&&(u.duration=f.duration,u.executionMode=this._pendingExecutionMode,u.selected=f.response,u.isLoading=!1)}catch(o){console.log(`Failed to execute filter operation: ${t} with arguments: `,r),console.log(o)}return a}async _changeValues(t,r){const n=this.history[this.history.length-2]?.selected;if(!n||n.length===0)return[];const s=n.length;if(!F(E.CHANGE_VALUES,{datasetSize:this.dataset.source.y.length,selectionSize:s}).useWorker||s<yn)return Ht(this.dataY,n,t,r),[];this._pendingExecutionMode="worker";const o=Math.min(navigator.hardwareConcurrency||1,s),i=Math.ceil(s/o),l=[],f=[];for(let u=0;u<o;u++){const p=u*i,g=Math.min((u+1)*i,s);if(p>=g)break;const y=n.slice(p,g);f.push(new Promise(d=>{const h=new Xr;l.push(h),h.postMessage({bufferY:this.dataY.buffer,indexes:y,operator:t,value:r}),h.onmessage=S=>{d(S.data)}}))}return await Promise.all(f),l.forEach(u=>u.terminate()),[]}_applyOperatorInPlace(t,r,n){Ht(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 _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(!F(E.INTERPOLATE,{datasetSize:n,selectionSize:t.length}).useWorker){rn(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=[],f=[];for(let u=0;u<o;u++){const p=s.slice(u*i,(u+1)*i);if(p.length===0)break;f.push(new Promise(g=>{const y=new Br;l.push(y),y.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,groups:p}),y.onmessage=d=>{g(d.data)}}))}await Promise.all(f),l.forEach(u=>u.terminate())}async _shift(t,r,n){if(t.length===0)return;const s=n===O.MONTH,a=n===O.YEAR,o=!s&&!a?r*te[n]*1e3:0,i=t.length;if(!F(E.SHIFT_DATETIMES,{datasetSize:this.dataset.source.x.length,selectionSize:i}).useWorker){const w=tn(this.dataX,this.dataY,t,{amount:r,isMonth:s,isYear:a,deltaMs:o});await this._deleteDataPoints(t),await this._addDataPoints(w);return}this._pendingExecutionMode="worker";const f=C(i*Float64Array.BYTES_PER_ELEMENT),u=C(i*Float32Array.BYTES_PER_ELEMENT),p=Math.min(navigator.hardwareConcurrency||1,i),g=Math.ceil(i/p),y=[],d=[];for(let w=0;w<p;w++){const k=w*g,T=Math.min((w+1)*g,i);if(k>=T)break;const L=t.slice(k,T);d.push(new Promise($=>{const M=new xr;y.push(M),M.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,outputBufferX:f,outputBufferY:u,indexes:L,outStart:k,amount:r,isMonth:s,isYear:a,deltaMs:o}),M.onmessage=X=>{$(X.data)}}))}await Promise.all(d),y.forEach(w=>w.terminate());const h=new Float64Array(f),S=new Float32Array(u),b=new Array(i);for(let w=0;w<i;w++)b[w]=[h[w],S[w]];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]*te[t[1]]*1e3,l=r[0]*te[r[1]]*1e3,f=a?.[0]??0,u=a?.[1]??o-1,p=this.dataX,g=[],y=[];let d=0;for(let A=f+1;A<=u;A++)if(p[A]-p[A-1]>i){let j=0,V=p[A-1]+l;for(;V<p[A];)j++,V+=l;j>0&&(g.push([A-1,A]),y.push(j),d+=j)}if(d===0)return;const h=o+d,S=h*Float64Array.BYTES_PER_ELEMENT,b=h*Float32Array.BYTES_PER_ELEMENT,w=C(S,Math.max(this.dataX.buffer.maxByteLength,S)),k=C(b,Math.max(this.dataY.buffer.maxByteLength,b));if(!F(E.FILL_GAPS,{datasetSize:o,selectionSize:d}).useWorker){const A=new Float64Array(w),x=new Float32Array(k);Qr(this.dataX,this.dataY,g,A,x,0,o-1,0,l,n,s),this.dataset.source.x=A,this.dataset.source.y=x,this._resizeTo(h);return}this._pendingExecutionMode="worker";const L=navigator.hardwareConcurrency||1,$=Math.ceil(o/L),M=[];let X=0;for(let A=0;A<L;A++){const x=A*$,j=Math.min((A+1)*$-1,o-1),V=[];let ge=0;for(;X<g.length&&g[X][0]<=j;)V.push(g[X]),ge+=y[X],X++;M.push({start:x,end:j,gapsSegment:V,fillsInSegment:ge})}const He=new Array(L).fill(0);for(let A=1;A<L;A++)He[A]=He[A-1]+M[A-1].fillsInSegment;const Vt=[],qt=[];for(let A=0;A<L;A++){const{start:x,end:j,gapsSegment:V}=M[A],ge=x+He[A];qt.push(new Promise(bn=>{const ze=new Nr;Vt.push(ze),ze.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,outputBufferX:w,outputBufferY:k,start:x,end:j,gapsSegment:V,startTarget:ge,fillDelta:l,interpolate:n,fillValue:s}),ze.onmessage=Sn=>{bn(Sn.data)}}))}await Promise.all(qt),Vt.forEach(A=>A.terminate()),this.dataset.source.x=new Float64Array(w),this.dataset.source.y=new Float32Array(k),this._resizeTo(h)}async _deleteDataPoints(t){const r=this.dataX.length,n=r-t.length;if(!F(E.DELETE_POINTS,{datasetSize:r,selectionSize:t.length}).useWorker){const y=C(this.dataX.buffer.byteLength,this.dataX.buffer.maxByteLength),d=C(this.dataY.buffer.byteLength,this.dataY.buffer.maxByteLength),h=new Float64Array(y),S=new Float32Array(d);en(this.dataX,this.dataY,t,h,S,0,r-1,0),this.dataset.source.x=h,this.dataset.source.y=S,this._resizeTo(n);return}this._pendingExecutionMode="worker";const a=navigator.hardwareConcurrency||1,o=Math.ceil(this.dataX.length/a),i=[],l=[];for(let y=0;y<a;y++){const d=y*o,h=Math.min((y+1)*o-1,this.dataX.length-1),S=re(t,d),b=fe(t,h),w=t.slice(S,b+1);l.push({start:d,end:h,deleteSegment:w})}const f=new Array(a).fill(0);for(let y=1;y<a;y++)f[y]=f[y-1]+l[y-1].deleteSegment.length;const u=[],p=C(this.dataX.buffer.byteLength,this.dataX.buffer.maxByteLength),g=C(this.dataY.buffer.byteLength,this.dataY.buffer.maxByteLength);for(let y=0;y<a;y++){const{start:d,end:h,deleteSegment:S}=l[y],b=d-f[y];u.push(new Promise(w=>{const k=new Pr;i.push(k),k.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,outputBufferX:p,outputBufferY:g,start:d,end:h,deleteSegment:S,startTarget:b}),k.onmessage=T=>{w(T.data)}}))}await Promise.all(u),i.forEach(y=>y.terminate()),this.dataset.source.x=new Float64Array(p),this.dataset.source.y=new Float32Array(g),this._resizeTo(n)}async _driftCorrection(t){if(!t||t.length===0)return;const r=this.dataset.source.x,n=navigator.hardwareConcurrency||1;let s=0;for(const[p,g]of t)g>p&&(s+=g-p);if(!F(E.DRIFT_CORRECTION,{datasetSize:r.length,selectionSize:s}).useWorker){nn(r,this.dataY,t);return}this._pendingExecutionMode="worker";const o=[];for(const[p,g,y]of t){if(g<=p)continue;const d=r[p],h=r[g]-d;if(h===0)continue;const S=g-p,b=Math.max(1,Math.ceil(S/n));for(let w=p;w<g;w+=b)o.push({chunkStart:w,chunkEnd:Math.min(w+b,g),startDatetime:d,value:y,extent:h})}if(o.length===0)return;const i=Math.min(n,o.length),l=Array.from({length:i},()=>[]);o.forEach((p,g)=>l[g%i].push(p));const f=[],u=[];for(const p of l)p.length!==0&&u.push(new Promise(g=>{const y=new jr;f.push(y),y.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,jobs:p}),y.onmessage=d=>{g(d.data)}}));await Promise.all(u),f.forEach(p=>p.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((d,h)=>d[0]-h[0]);const s=n*Float64Array.BYTES_PER_ELEMENT,a=n*Float32Array.BYTES_PER_ELEMENT,o=C(s,Math.max(this.dataX.buffer.maxByteLength,s)),i=C(a,Math.max(this.dataY.buffer.maxByteLength,a));if(!F(E.ADD_POINTS,{datasetSize:r,selectionSize:t.length}).useWorker){const d=new Float64Array(o),h=new Float32Array(i);Zr(this.dataX,this.dataY,t,d,h,0,r,0),this.dataset.source.x=d,this.dataset.source.y=h,this._resizeTo(n);return}this._pendingExecutionMode="worker";const f=t.map(d=>fe(this.dataX,d[0])+1),u=Math.max(1,Math.min(navigator.hardwareConcurrency||1,Math.max(r,1))),p=Math.ceil(Math.max(r,1)/u),g=[],y=[];for(let d=0;d<u;d++){const h=d*p,S=Math.min((d+1)*p,r),b=re(f,h),w=d===u-1?t.length:re(f,S),k=t.slice(b,w),T=h+b;h>=S&&k.length===0||y.push(new Promise(L=>{const $=new Wr;g.push($),$.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,outputBufferX:o,outputBufferY:i,origStart:h,origEnd:S,insertions:k,outStart:T}),$.onmessage=M=>{L(M.data)}}))}await Promise.all(y),g.forEach(d=>d.terminate()),this.dataset.source.x=new Float64Array(o),this.dataset.source.y=new Float32Array(i),this._resizeTo(n)}async _valueThreshold(t){const r=Object.keys(t);if(r.length===0)return[];const n={[G.LT]:0,[G.LTE]:1,[G.GT]:2,[G.GTE]:3,[G.E]:4},s=r.map(h=>n[h]??4),a=r.map(h=>t[h]),o=this.dataset.source.y,i=o.length;if(i===0)return[];if(!F(v.VALUE_THRESHOLD,{datasetSize:i}).useWorker)return Yt(o,0,i,s,a);this._pendingExecutionMode="worker";const f=Math.min(navigator.hardwareConcurrency||1,i),u=Math.ceil(i/f),p=[],g=[];for(let h=0;h<f;h++){const S=h*u,b=Math.min((h+1)*u,i);if(S>=b)break;g.push(new Promise(w=>{const k=new Ne;p.push(k),k.postMessage({bufferY:this.dataY.buffer,start:S,end:b,ops:s,values:a}),k.onmessage=T=>{w(T.data)}}))}const y=await Promise.all(g);p.forEach(h=>h.terminate());const d=[];for(let h=0;h<y.length;h++){const S=y[h];for(let b=0;b<S.length;b++)d.push(S[b])}return d}async _rateOfChange(t,r){const n=this.dataset.source.y;if(n.length<2)return[];const s=1,a=n.length,o=a-s;if(!F(v.RATE_OF_CHANGE,{datasetSize:n.length}).useWorker)return qr(n,s,a,t,r);this._pendingExecutionMode="worker";const l=Math.min(navigator.hardwareConcurrency||1,o),f=Math.ceil(o/l),u=[],p=[];for(let d=0;d<l;d++){const h=s+d*f,S=Math.min(s+(d+1)*f,a);if(h>=S)break;p.push(new Promise(b=>{const w=new zr;u.push(w),w.postMessage({bufferY:this.dataY.buffer,start:h,end:S,comparator:t,value:r}),w.onmessage=k=>{b(k.data)}}))}const g=await Promise.all(p);u.forEach(d=>d.terminate());const y=[];for(let d=0;d<g.length;d++){const h=g[d];for(let S=0;S<h.length;S++)y.push(h[S])}return y}async _datetimeRange(t,r){const n=this.dataset.source.x,s=n.length;if(s===0)return[];const a=t==null?0:re(n,t),o=r==null?s-1:fe(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){return(!t||!t.length)&&this.history.pop(),t}async _change(t,r){const n=this.dataset.source.y;if(n.length<2)return[];const s=1,a=n.length,o=a-s;if(!F(v.CHANGE,{datasetSize:n.length}).useWorker)return Vr(n,s,a,t,r);this._pendingExecutionMode="worker";const l=Math.min(navigator.hardwareConcurrency||1,o),f=Math.ceil(o/l),u=[],p=[];for(let d=0;d<l;d++){const h=s+d*f,S=Math.min(s+(d+1)*f,a);if(h>=S)break;p.push(new Promise(b=>{const w=new Hr;u.push(w),w.postMessage({bufferY:this.dataY.buffer,start:h,end:S,comparator:t,value:r}),w.onmessage=k=>{b(k.data)}}))}const g=await Promise.all(p);u.forEach(d=>d.terminate());const y=[];for(let d=0;d<g.length;d++){const h=g[d];for(let S=0;S<h.length;S++)y.push(h[S])}return y}async _findGaps(t,r,n){const s=this.dataset.source.x;let a=0,o=s.length;if(n?.[0]&&n?.[1]&&(a=n[0],o=n[1]),o<=a)return[];const i=t*te[r]*1e3;if(!F(v.FIND_GAPS,{datasetSize:o-a}).useWorker){const S=Jr(s,a,o-1,i),b=new Set;for(let w=0;w<S.length;w++)b.add(S[w]);return[...b]}this._pendingExecutionMode="worker";const f=o-a,u=Math.min(navigator.hardwareConcurrency||1,f),p=Math.ceil(f/u),g=[],y=[];for(let S=0;S<u;S++){const b=a+S*p,w=Math.min(a+(S+1)*p,o);if(b>=w)break;y.push(new Promise(k=>{const T=new Gr;g.push(T),T.postMessage({bufferX:this.dataX.buffer,start:b,endInclusive:w,threshold:i}),T.onmessage=L=>{k(L.data)}}))}const d=await Promise.all(y);g.forEach(S=>S.terminate());const h=new Set;for(let S=0;S<d.length;S++){const b=d[S];for(let w=0;w<b.length;w++)h.add(b[w])}return[...h]}async _persistence(t,r){const n=this.dataset.source.y;let s=0,a=n.length;if(r?.[0]&&r?.[1]&&(s=r[0],a=r[1]),a<=s)return[];const o=a-s;if(!F(v.PERSISTENCE,{datasetSize:o}).useWorker){const b=Kr(n,s,a),w=[];for(let k=0;k<b.length;k+=3){const T=b[k],L=b[k+1];if(L>=t)for(let $=0;$<L;$++)w.push(T+$)}return w}this._pendingExecutionMode="worker";const l=Math.min(navigator.hardwareConcurrency||1,o),f=Math.ceil(o/l),u=[],p=[];for(let b=0;b<l;b++){const w=s+b*f,k=Math.min(s+(b+1)*f,a);if(w>=k)break;p.push(new Promise(T=>{const L=new Yr;u.push(L),L.postMessage({bufferY:this.dataY.buffer,start:w,end:k}),L.onmessage=$=>{T($.data)}}))}const g=await Promise.all(p);u.forEach(b=>b.terminate());const y=[],d=[],h=[];for(let b=0;b<g.length;b++){const w=g[b];for(let k=0;k<w.length;k+=3){const T=w[k],L=w[k+1],$=w[k+2],M=y.length-1;M>=0&&h[M]===$&&y[M]+d[M]===T?d[M]+=L:(y.push(T),d.push(L),h.push($))}}const S=[];for(let b=0;b<y.length;b++){const w=d[b];if(w>=t){const k=y[b];for(let T=0;T<w;T++)S.push(k+T)}}return S}}m.ACCOUNT_BASE=P,m.AUTH_BASE=ce,m.ApiKey=ir,m.BASE_URL=D,m.Collaborator=lr,m.DEFAULT_SNACK_DURATION=Le,m.DataSource=Lr,m.Datastream=Qt,m.EnumEditOperations=E,m.EnumFilterOperations=v,m.FilterOperation=G,m.HydroShareArchive=qe,m.INCREASE_AMOUNT=Q,m.Location=Je,m.LogicalOperation=Ve,m.OAuthProvider=ar,m.ObservationRecord=wn,m.ObservedProperty=tr,m.Operator=Xe,m.Organization=sr,m.PROVIDER_BASE=Z,m.Payload=Ir,m.PermissionAction=Ke,m.PermissionResource=Qe,m.Position=ut,m.PostHydroShareArchive=Jt,m.ProcessingLevel=rr,m.ResultQualifier=nr,m.SESSION_BASE=le,m.Sensor=er,m.Snack=ht,m.SnackColor=$e,m.SnackIcon=Re,m.SnackTitle=Ie,m.Snackbar=ft,m.TAG_BASE=De,m.THINGS_BASE=_,m.Thing=Kt,m.TimeUnit=O,m.Unit=Zt,m.User=or,m.Workspace=cr,m.api=Rr,m.apiMethods=c,m.clearCalibration=hn,m.createPatchObject=Oe,m.ensureCalibration=fn,m.extractErrorMessage=Ze,m.findFirstGreaterOrEqual=re,m.findLastLessOrEqual=fe,m.formatDate=Cr,m.formatDuration=Dr,m.getCSRFToken=me,m.getCalibration=cn,m.getLastBenchmarkDetail=ln,m.getObservationsEndpoint=$r,m.getOperationTable=un,m.measureEllapsedTime=he,m.onCalibrationChange=an,m.requestInterceptor=we,m.responseInterceptor=be,m.runBenchmarks=zt,m.shouldUseWorker=F,m.subtractHours=Fr,m.timeUnitMultipliers=te,Object.defineProperty(m,Symbol.toStringTag,{value:"Module"})}));
|
|
3
|
+
`):"",this.name="UnsubscriptionError",this.errors=r}});function Le(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var ce=(function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,n,s,a;if(!this.closed){this.closed=!0;var o=this._parentage;if(o)if(this._parentage=null,Array.isArray(o))try{for(var i=ke(o),l=i.next();!l.done;l=i.next()){var d=l.value;d.remove(this)}}catch(h){t={error:h}}finally{try{l&&!l.done&&(r=i.return)&&r.call(i)}finally{if(t)throw t.error}}else o.remove(this);var u=this.initialTeardown;if(Y(u))try{u()}catch(h){a=h instanceof Te?h.errors:[h]}var y=this._finalizers;if(y){this._finalizers=null;try{for(var g=ke(y),m=g.next();!m.done;m=g.next()){var S=m.value;try{at(S)}catch(h){a=a??[],h instanceof Te?a=Ae(Ae([],_e(a)),_e(h.errors)):a.push(h)}}}catch(h){n={error:h}}finally{try{m&&!m.done&&(s=g.return)&&s.call(g)}finally{if(n)throw n.error}}}if(a)throw new Te(a)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)at(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&Le(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&Le(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=(function(){var t=new e;return t.closed=!0,t})(),e})(),st=ce.EMPTY;function ot(e){return e instanceof ce||e&&"closed"in e&&Y(e.remove)&&Y(e.add)&&Y(e.unsubscribe)}function at(e){Y(e)?e():e.unsubscribe()}var pr={Promise:void 0},yr={setTimeout:function(e,t){for(var r=[],n=2;n<arguments.length;n++)r[n-2]=arguments[n];return setTimeout.apply(void 0,Ae([e,t],_e(r)))},clearTimeout:function(e){return clearTimeout(e)},delegate:void 0};function gr(e){yr.setTimeout(function(){throw e})}function it(){}function le(e){e()}var ct=(function(e){ie(t,e);function t(r){var n=e.call(this)||this;return n.isStopped=!1,r?(n.destination=r,ot(r)&&r.add(n)):n.destination=br,n}return t.create=function(r,n,s){return new $e(r,n,s)},t.prototype.next=function(r){this.isStopped||this._next(r)},t.prototype.error=function(r){this.isStopped||(this.isStopped=!0,this._error(r))},t.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},t.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,e.prototype.unsubscribe.call(this),this.destination=null)},t.prototype._next=function(r){this.destination.next(r)},t.prototype._error=function(r){try{this.destination.error(r)}finally{this.unsubscribe()}},t.prototype._complete=function(){try{this.destination.complete()}finally{this.unsubscribe()}},t})(ce),mr=(function(){function e(t){this.partialObserver=t}return e.prototype.next=function(t){var r=this.partialObserver;if(r.next)try{r.next(t)}catch(n){ue(n)}},e.prototype.error=function(t){var r=this.partialObserver;if(r.error)try{r.error(t)}catch(n){ue(n)}else ue(t)},e.prototype.complete=function(){var t=this.partialObserver;if(t.complete)try{t.complete()}catch(r){ue(r)}},e})(),$e=(function(e){ie(t,e);function t(r,n,s){var a=e.call(this)||this,o;return Y(r)||!r?o={next:r??void 0,error:n??void 0,complete:s??void 0}:o=r,a.destination=new mr(o),a}return t})(ct);function ue(e){gr(e)}function wr(e){throw e}var br={closed:!0,next:it,error:wr,complete:it},Sr=(function(){return typeof Symbol=="function"&&Symbol.observable||"@@observable"})();function Er(e){return e}function vr(e){return e.length===0?Er:e.length===1?e[0]:function(r){return e.reduce(function(n,s){return s(n)},r)}}var lt=(function(){function e(t){t&&(this._subscribe=t)}return e.prototype.lift=function(t){var r=new e;return r.source=this,r.operator=t,r},e.prototype.subscribe=function(t,r,n){var s=this,a=_r(t)?t:new $e(t,r,n);return le(function(){var o=s,i=o.operator,l=o.source;a.add(i?i.call(a,l):l?s._subscribe(a):s._trySubscribe(a))}),a},e.prototype._trySubscribe=function(t){try{return this._subscribe(t)}catch(r){t.error(r)}},e.prototype.forEach=function(t,r){var n=this;return r=ut(r),new r(function(s,a){var o=new $e({next:function(i){try{t(i)}catch(l){a(l),o.unsubscribe()}},error:a,complete:s});n.subscribe(o)})},e.prototype._subscribe=function(t){var r;return(r=this.source)===null||r===void 0?void 0:r.subscribe(t)},e.prototype[Sr]=function(){return this},e.prototype.pipe=function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return vr(t)(this)},e.prototype.toPromise=function(t){var r=this;return t=ut(t),new t(function(n,s){var a;r.subscribe(function(o){return a=o},function(o){return s(o)},function(){return n(a)})})},e.create=function(t){return new e(t)},e})();function ut(e){var t;return(t=e??pr.Promise)!==null&&t!==void 0?t:Promise}function kr(e){return e&&Y(e.next)&&Y(e.error)&&Y(e.complete)}function _r(e){return e&&e instanceof ct||kr(e)&&ot(e)}var Ar=nt(function(e){return function(){e(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"}}),ht=(function(e){ie(t,e);function t(){var r=e.call(this)||this;return r.closed=!1,r.currentObservers=null,r.observers=[],r.isStopped=!1,r.hasError=!1,r.thrownError=null,r}return t.prototype.lift=function(r){var n=new ft(this,this);return n.operator=r,n},t.prototype._throwIfClosed=function(){if(this.closed)throw new Ar},t.prototype.next=function(r){var n=this;le(function(){var s,a;if(n._throwIfClosed(),!n.isStopped){n.currentObservers||(n.currentObservers=Array.from(n.observers));try{for(var o=ke(n.currentObservers),i=o.next();!i.done;i=o.next()){var l=i.value;l.next(r)}}catch(d){s={error:d}}finally{try{i&&!i.done&&(a=o.return)&&a.call(o)}finally{if(s)throw s.error}}}})},t.prototype.error=function(r){var n=this;le(function(){if(n._throwIfClosed(),!n.isStopped){n.hasError=n.isStopped=!0,n.thrownError=r;for(var s=n.observers;s.length;)s.shift().error(r)}})},t.prototype.complete=function(){var r=this;le(function(){if(r._throwIfClosed(),!r.isStopped){r.isStopped=!0;for(var n=r.observers;n.length;)n.shift().complete()}})},t.prototype.unsubscribe=function(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null},Object.defineProperty(t.prototype,"observed",{get:function(){var r;return((r=this.observers)===null||r===void 0?void 0:r.length)>0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var n=this,s=this,a=s.hasError,o=s.isStopped,i=s.observers;return a||o?st:(this.currentObservers=null,i.push(r),new ce(function(){n.currentObservers=null,Le(i,r)}))},t.prototype._checkFinalizedStatuses=function(r){var n=this,s=n.hasError,a=n.thrownError,o=n.isStopped;s?r.error(a):o&&r.complete()},t.prototype.asObservable=function(){var r=new lt;return r.source=this,r},t.create=function(r,n){return new ft(r,n)},t})(lt),ft=(function(e){ie(t,e);function t(r,n){var s=e.call(this)||this;return s.destination=r,s.source=n,s}return t.prototype.next=function(r){var n,s;(s=(n=this.destination)===null||n===void 0?void 0:n.next)===null||s===void 0||s.call(n,r)},t.prototype.error=function(r){var n,s;(s=(n=this.destination)===null||n===void 0?void 0:n.error)===null||s===void 0||s.call(n,r)},t.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},t.prototype._subscribe=function(r){var n,s;return(s=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&s!==void 0?s:st},t})(ht);const Re=3e3;var Ie=(e=>(e.Warning="warning",e.Success="success",e.Error="error",e.Info="info",e))(Ie||{}),Oe=(e=>(e.Success="mdi-checkbox-marked-circle",e.Warning="mdi-alert",e.Error="mdi-alert-circle",e.Info="mdi-information",e.None="none",e))(Oe||{}),Ue=(e=>(e.Warning="Warning",e.Success="Success",e.Error="Error",e.Info="Info",e))(Ue||{}),dt=(e=>(e.Center="center",e.Left="left",e.Right="right",e.Bottom="bottom",e.Top="top",e))(dt||{});class pt{constructor(t="",r="info",n="none",s="Info",a=Re,o="center",i=!1){this.message=t,this.color=r,this.icon=n,this.title=s,this.timeout=a,this.position=o,this.visible=i}}class yt{static subject=new ht;static get snack$(){return this.subject.asObservable()}static createSnackbar(t,r){this.subject.next(new pt(t,Ie[r],Oe[r],Ue[r],Re,"bottom",!0))}static success(t){this.createSnackbar(t,"Success")}static warn(t){this.createSnackbar(t,"Warning")}static error(t){this.createSnackbar(t,"Error")}static info(t){this.createSnackbar(t,"Info")}}function Me(e,t){const r={};for(let n in t)if(Array.isArray(t[n]))JSON.stringify(e[n])!==JSON.stringify(t[n])&&(r[n]=t[n]);else if(e[n]&&typeof e[n]=="object"&&t[n]&&typeof t[n]=="object"){const s=Me(e[n],t[n]);Object.keys(s).length>0&&(r[n]=s)}else JSON.stringify(e[n])!==JSON.stringify(t[n])&&(r[n]=t[n]);return r}function Tr(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Ce,gt;function Lr(){if(gt)return Ce;gt=1;class e{constructor(n){this.value=n,this.next=void 0}}class t{constructor(){this.clear()}enqueue(n){const s=new e(n);this._head?(this._tail.next=s,this._tail=s):(this._head=s,this._tail=s),this._size++}dequeue(){const n=this._head;if(n)return this._head=this._head.next,this._size--,n.value}clear(){this._head=void 0,this._tail=void 0,this._size=0}get size(){return this._size}*[Symbol.iterator](){let n=this._head;for(;n;)yield n.value,n=n.next}}return Ce=t,Ce}var De,mt;function $r(){if(mt)return De;mt=1;const e=Lr();return De=r=>{if(!((Number.isInteger(r)||r===1/0)&&r>0))throw new TypeError("Expected `concurrency` to be a number from 1 and up");const n=new e;let s=0;const a=()=>{s--,n.size>0&&n.dequeue()()},o=async(d,u,...y)=>{s++;const g=(async()=>d(...y))();u(g);try{await g}catch{}a()},i=(d,u,...y)=>{n.enqueue(o.bind(null,d,u,...y)),(async()=>(await Promise.resolve(),s<r&&n.size>0&&n.dequeue()()))()},l=(d,...u)=>new Promise(y=>{i(d,y,...u)});return Object.defineProperties(l,{activeCount:{get:()=>s},pendingCount:{get:()=>n.size},clearQueue:{value:()=>{n.clear()}}}),l},De}var Rr=$r();const V=Tr(Rr)(10),Ir=1e3;async function Q(e,t){const r=Se(t);try{const n=await fetch(e,r);return await Ee(n)}catch(n){throw n instanceof TypeError&&yt.error("Network error. Please check your connection."),n}}const c={async fetch(e,t={}){return t.method="GET",await V(()=>Q(e,t))},async patch(e,t,r=null,n={}){if(n.method="PATCH",n.body=r?Me(r,t):t,Object.keys(n.body).length!==0)return await V(()=>Q(e,n))},async post(e,t=void 0,r={}){return r.method="POST",r.body=t,await V(()=>Q(e,r))},async put(e,t=void 0,r={}){return r.method="PUT",r.body=t,await V(()=>Q(e,r))},async delete(e,t=void 0,r={}){return r.method="DELETE",r.body=t,await V(()=>Q(e,r))},async paginatedFetch(e,t){const r=t??Ir,n=e.includes("?")?"&":"?",s=`${e}${n}page_size=${r}&page=1`,a=Se({method:"GET"}),o=await V(()=>fetch(s,a)),i=Number(o.headers.get("x-total-pages"))||1,d=[...await Ee(o)];for(let u=2;u<=i;u++){const y=`${e}${n}page_size=${r}&page=${u}`,g=await V(()=>Q(y,{method:"GET"}));d.push(...g)}return d}},wt={HTTP:{type:"HTTP",sourceUri:"",placeholderVariables:[]},local:{type:"local",sourceUri:"",placeholderVariables:[]}},bt={JSON:{type:"JSON",timestamp:{key:"",format:"ISO8601",timezoneMode:"embeddedOffset"},JMESPath:""},CSV:{type:"CSV",timestamp:{key:"",format:"ISO8601",timezoneMode:"embeddedOffset"},headerRow:1,dataStartRow:2,delimiter:",",identifierType:"name"}},St={HydroServer:{type:"HydroServer"}};class Or{name="";settings={type:"SDL",extractor:JSON.parse(JSON.stringify(wt.local)),transformer:JSON.parse(JSON.stringify(bt.CSV)),loader:JSON.parse(JSON.stringify(St.HydroServer)),payloads:[]};id="";workspaceId="";orchestrationSystem={id:"",name:"",workspaceId:"",type:""};schedule={interval:15,intervalUnits:"minutes"};status={paused:!0};datastreams=[];constructor(t){Object.assign(this,t)}switchExtractor(t){this.settings.extractor=JSON.parse(JSON.stringify(wt[t]))}switchTransformer(t){this.settings.transformer=JSON.parse(JSON.stringify(bt[t]))}switchLoader(t){this.settings.loader=JSON.parse(JSON.stringify(St[t]))}}function Et(e){return{name:e.name,settings:e.settings,workspaceId:e.workspaceId,orchestrationSystemId:e.orchestrationSystem.id,schedule:e.schedule,status:e.status}}const F="https://lro.hydroserver.org/api",he=`${F}/auth`,B=`${he}/browser/account`,fe=`${he}/browser/session`,te=`${he}/browser/provider`,I=`${F}/data/workspaces`,Fe=`${F}/data/roles`,U=`${F}/data/datastreams`,z=`${F}/data/sensors`,T=`${F}/data/things`,Pe=`${T}/tags`,K=`${F}/data/orchestration-systems`,H=`${F}/data/data-sources`,q=`${F}/data/observed-properties`,Z=`${F}/data/processing-levels`,re=`${F}/data/result-qualifiers`,J=`${F}/data/units`,Ur=(e,t,r,n,s)=>{let a=`${U}/${e}/observations?format=column`;return a+=`&order_by=phenomenonTime&page_size=${t}`,a+=`&phenomenon_time_min=${encodeURIComponent(r)}`,n&&(a+=`&phenomenon_time_max=${encodeURIComponent(n)}`),s&&(a+=`&page=${s}`),a},Mr={fetchSession:async()=>c.fetch(`${fe}`),login:async(e,t)=>c.post(`${fe}`,{email:e,password:t}),logout:async()=>c.delete(`${fe}`),fetchUser:async()=>c.fetch(`${B}`),signup:async e=>c.post(`${B}`,e),updateUser:async(e,t)=>c.patch(`${B}`,e,t),deleteUser:async()=>c.delete(`${B}`),sendVerificationEmail:async e=>c.put(`${B}/email/verify`,{email:e}),verifyEmailWithCode:async e=>c.post(`${B}/email/verify`,{key:e}),requestPasswordReset:async e=>c.post(`${B}/password/request`,{email:e}),resetPassword:async(e,t)=>c.post(`${B}/password/reset`,{key:e,password:t}),fetchWorkspaces:async()=>c.paginatedFetch(`${I}`),fetchAssociatedWorkspaces:async()=>c.paginatedFetch(`${I}?is_associated=true`),fetchWorkspace:async e=>c.fetch(`${I}/${e}`),createWorkspace:async e=>c.post(I,e),updateWorkspace:async(e,t=null)=>c.patch(`${I}/${e.id}`,e,t),deleteWorkspace:async e=>c.delete(`${I}/${e}`),transferWorkspace:async(e,t)=>c.post(`${I}/${e}/transfer`,{newOwner:t}),acceptWorkspaceTransfer:async e=>c.put(`${I}/${e}/transfer`),rejectWorkspaceTransfer:async e=>c.delete(`${I}/${e}/transfer`),getCollaboratorRoles:async e=>c.paginatedFetch(`${Fe}?is_user_role=true`),getAPIKeyRoles:async e=>c.paginatedFetch(`${Fe}?is_apikey_role=true`),getRole:async e=>c.fetch(`${Fe}/${e}`),getCollaborators:async e=>c.paginatedFetch(`${I}/${e}/collaborators`),addCollaborator:async(e,t,r)=>c.post(`${I}/${e}/collaborators`,{email:t,roleId:r}),updateCollaboratorRole:async(e,t,r)=>c.put(`${I}/${e}/collaborators`,{email:t,roleId:r}),removeCollaborator:async(e,t)=>c.delete(`${I}/${e}/collaborators`,{email:t}),fetchApiKeys:async e=>c.paginatedFetch(`${I}/${e}/api-keys?expand_related=true`),fetchApiKey:async(e,t)=>c.fetch(`${I}/${e}/api-keys/${t}?expand_related=true`),createApiKey:async e=>c.post(`${I}/${e.workspaceId}/api-keys?expand_related=true`,{name:e.name,description:e.description,isActive:!0,roleId:e.role.id}),updateApiKey:async(e,t)=>c.patch(`${I}/${e.workspaceId}/api-keys/${e.id}?expand_related=true`,{name:e.name,description:e.description,isActive:!0,roleId:e.role.id},t&&{name:t.name,description:t.description,isActive:!0,roleId:t.role.id}),regenerateApiKey:async(e,t)=>c.put(`${I}/${e}/api-keys/${t}/regenerate?expand_related=true`),deleteApiKey:async(e,t)=>c.delete(`${I}/${e}/api-keys/${t}`),fetchConnectedProviders:async()=>c.fetch(`${te}/connections`),providerRedirect:(e,t,r)=>{const n={provider:e,callback_url:t,process:r},s=be(),a=document.createElement("form");if(a.method="POST",a.action=`${te}/redirect`,s){const o=document.createElement("input");o.type="hidden",o.name="csrfmiddlewaretoken",o.value=s,a.appendChild(o)}for(const o in n){const i=document.createElement("input");i.type="hidden",i.name=o,i.value=n[o]||"",a.appendChild(i)}document.body.appendChild(a),a.submit()},providerSignup:async e=>c.post(`${te}/signup`,e),deleteProvider:async(e,t)=>c.delete(`${te}/connections`,{provider:e,account:t}),createUnit:async e=>c.post(J,e),fetchUnits:async()=>c.paginatedFetch(`${J}`),fetchWorkspaceUnits:async e=>c.paginatedFetch(`${J}?workspace_id=${e}`),updateUnit:async(e,t=null)=>c.patch(`${J}/${e.id}`,e,t),deleteUnit:async e=>c.delete(`${J}/${e}`),getUnit:async e=>c.fetch(`${J}/${e}`),removeThingOwner:async(e,t)=>c.patch(`${T}/${e}/ownership`,{email:t,removeOwner:!0}),addSecondaryOwner:async(e,t)=>c.patch(`${T}/${e}/ownership`,{email:t,makeOwner:!0}),transferPrimaryOwnership:async(e,t)=>c.patch(`${T}/${e}/ownership`,{email:t,transferPrimary:!0}),createThing:async e=>c.post(T,e),fetchThings:async()=>c.paginatedFetch(`${T}`),fetchThingsForWorkspace:async e=>c.paginatedFetch(`${T}?workspace_id=${e}`),fetchOwnedThings:async()=>c.paginatedFetch(`${T}?owned_only=true`),fetchThing:async e=>c.fetch(`${T}/${e}`),updateThing:async e=>c.patch(`${T}/${e.id}`,e),updateThingPrivacy:async(e,t)=>c.patch(`${T}/${e}`,{isPrivate:t}),deleteThing:async e=>c.delete(`${T}/${e}`),fetchMetadataForThingOwner:async e=>c.paginatedFetch(`${T}/${e}/metadata?include_assignable_metadata=true`),fetchMetadataForThing:async e=>c.fetch(`${T}/${e}/metadata`),uploadSitePhotos:async(e,t)=>c.post(`${T}/${e}/photos`,t),fetchSitePhotos:async e=>c.paginatedFetch(`${T}/${e}/photos`),deleteSitePhoto:async(e,t)=>c.delete(`${T}/${e}/photos`,{name:t}),createSiteTag:async(e,t)=>c.post(`${T}/${e}/tags`,t),editSiteTag:async(e,t)=>c.put(`${T}/${e}/tags`,t),fetchSiteTags:async e=>c.fetch(`${T}/${e}/tags`),fetchUsersSiteTags:async()=>c.fetch(`${Pe}`),deleteSiteTag:async(e,t)=>c.delete(`${T}/${e}/tags`,t),fetchWorkspaceTags:async e=>c.fetch(`${Pe}/keys?workspace_id=${e}`),createHydroShareArchive:async e=>c.post(`${T}/${e.thingId}/archive`,e),updateHydroShareArchive:async(e,t)=>c.patch(`${T}/${e.thingId}/archive`,e,t),fetchHydroShareArchive:async e=>c.fetch(`${T}/${e}/archive`),deleteHydroShareArchive:async e=>c.delete(`${T}/${e}/archive`),archiveToHydroShare:async e=>c.post(`${T}/${e}/archive/trigger`),createDatastream:async e=>c.post(U,e),fetchDatastreams:async e=>{const t=[];if(e)for(const[n,s]of Object.entries(e))t.push(`${encodeURIComponent(n)}=${encodeURIComponent(s)}`);const r=t.length?`?${t.join("&")}`:"";return c.paginatedFetch(`${U}${r}`)},fetchDatastreamsForThing:async e=>c.paginatedFetch(`${U}?thing_id=${e}`),fetchExpandedDatastreamsForThing:async e=>c.paginatedFetch(`${U}?thing_id=${e}&expand_related=true`),fetchDatastreamsForDataSource:async e=>c.paginatedFetch(`${U}?data_source_id=${e}`),fetchDatastream:async e=>c.fetch(`${U}/${e}`),fetchDatastreamExpanded:async e=>c.fetch(`${U}/${e}?expand_related=true`),fetchUsersDatastreams:async()=>c.paginatedFetch(`${U}?exclude_unowned=true`),updateDatastream:async(e,t=null)=>c.patch(`${U}/${e.id}`,e,t),deleteDatastream:async e=>c.delete(`${U}/${e}`),downloadDatastreamCSV:async e=>c.fetch(`${U}/${e}/csv`),createObservedProperty:async e=>c.post(q,e),fetchObservedProperty:async e=>c.fetch(`${q}/${e}`),fetchObservedProperties:async()=>c.paginatedFetch(`${q}`),fetchWorkspaceObservedProperties:async e=>c.paginatedFetch(`${q}?workspace_id=${e}`),updateObservedProperty:async(e,t=null)=>c.patch(`${q}/${e.id}`,e,t),deleteObservedProperty:async e=>c.delete(`${q}/${e}`),createProcessingLevel:async e=>c.post(Z,e),fetchProcessingLevels:async()=>c.paginatedFetch(`${Z}`),fetchProcessingLevel:async e=>c.fetch(`${Z}/${e}`),fetchWorkspaceProcessingLevels:async e=>c.paginatedFetch(`${Z}?workspace_id=${e}`),updateProcessingLevel:async(e,t=null)=>c.patch(`${Z}/${e.id}`,e,t),deleteProcessingLevel:async e=>c.delete(`${Z}/${e}`),createSensor:async e=>c.post(z,e),fetchSensors:async()=>c.paginatedFetch(`${z}`),fetchSensor:async e=>c.fetch(`${z}/${e}`),fetchWorkspaceSensors:async e=>c.paginatedFetch(`${z}?workspace_id=${e}`),updateSensor:async(e,t=null)=>c.patch(`${z}/${e.id}`,e,t),deleteSensor:async e=>c.delete(`${z}/${e}`),createResultQualifier:async e=>c.post(re,e),fetchResultQualifiers:async()=>c.paginatedFetch(`${re}`),fetchWorkspaceResultQualifiers:async e=>c.paginatedFetch(`${re}?workspace_id=${e}`),updateResultQualifier:async(e,t=null)=>c.patch(`${re}/${e.id}`,e,t),deleteResultQualifier:async e=>c.delete(`${re}/${e}`),createOrchestrationSystem:async e=>c.post(K,e),fetchOrchestrationSystems:async()=>c.paginatedFetch(K),fetchWorkspaceOrchestrationSystems:async e=>c.paginatedFetch(`${K}?workspace_id=${e}`),fetchOrchestrationSystem:async e=>c.fetch(`${K}/${e}`),updateOrchestrationSystem:async(e,t)=>c.patch(`${K}/${e}`,t),deleteOrchestrationSystem:async e=>c.delete(`${K}/${e}`),createDataSource:async e=>c.post(`${H}?expand_related=true`,Et(e)),fetchDataSources:async()=>c.paginatedFetch(`${H}?expand_related=true`),fetchWorkspaceDataSources:async e=>c.paginatedFetch(`${H}?workspace_id=${e}&expand_related=true`),fetchDataSource:async e=>c.fetch(`${H}/${e}?expand_related=true`),updateDataSource:async e=>c.patch(`${H}/${e.id}?expand_related=true`,Et(e)),updateDataSourcePartial:async e=>c.patch(`${H}/${e.id}?expand_related=true`,e),deleteDataSource:async e=>c.delete(`${H}/${e}`),linkDatastreamToDataSource:async(e,t)=>c.post(`${H}/${e}/datastreams/${t}`),unlinkDatastreamFromDataSource:async(e,t)=>c.delete(`${H}/${e}/datastreams/${t}`),fetchObservations:async e=>c.fetch(e),deleteObservationsForDatastream:async e=>c.post(`${U}/${e}/observations/bulk-delete`,{phenomenonTimeStart:null,phenomenonTimeEnd:null}),fetchUserTypes:async()=>c.fetch(`${B}/user-types`),fetchOrganizationTypes:async()=>c.fetch(`${B}/organization-types`),fetchSiteTypes:async()=>c.fetch(`${T}/site-types`),fetchSamplingFeatureTypes:async()=>c.paginatedFetch(`${T}/sampling-feature-types`),fetchSensorEncodingTypes:async()=>c.paginatedFetch(`${z}/encoding-types`),fetchMethodTypes:async()=>c.paginatedFetch(`${z}/method-types`),fetchVariableTypes:async()=>c.paginatedFetch(`${q}/variable-types`),fetchUnitTypes:async()=>c.paginatedFetch(`${J}/types`),fetchDatastreamStatuses:async()=>c.paginatedFetch(`${U}/statuses`),fetchDatastreamAggregations:async()=>c.paginatedFetch(`${U}/aggregation-statistics`),fetchSampledMediums:async()=>c.paginatedFetch(`${U}/sampled-mediums`)};class Cr{name="";mappings=[];extractorVariables={};constructor(t){Object.assign(this,t)}}const vt=1,de=vt*60,Ne=de*60,Be=Ne*24,Dr=Be*7,Fr=Ne*30,Pr=Be*365,ne={[M.SECOND]:vt,[M.MINUTE]:de,[M.HOUR]:Ne,[M.DAY]:Be,[M.WEEK]:Dr,[M.MONTH]:Fr,[M.YEAR]:Pr},Nr=e=>e.toLocaleString(void 0,{year:"numeric",month:"short",day:"2-digit",hour:"2-digit",hour12:!1,minute:"2-digit",second:"2-digit"}),Br=e=>{let t,r;e>=de*1e3?(t=e/(de*1e3),r="m"):e>=1e3?(t=e/1e3,r="s"):(t=e,r="ms");let n;return r==="ms"?n=Math.round(t).toString():n=t.toFixed(2),`${n} ${r}`},pe=async(e,t)=>{t&&console.info(t);const r=performance.now(),n=await e(),a=+(performance.now()-r);return{response:n,duration:a}};function jr(e,t){const r=new Date(e);return r.setHours(r.getHours()-t),r.toISOString()}const j=(e,t)=>{let r=0,n=e.length;for(;r<n;){const s=r+n>>1;e[s]<t?r=s+1:n=s}return r},W=(e,t)=>{let r=0,n=e.length;for(;r<n;){const s=r+n>>1;e[s]>t?n=s:r=s+1}return r-1},kt=`(function(){"use strict";function c(n,s,a,u,f,l,y,o){let r=0,e=o;for(let t=l;t<=y;t++)r<a.length&&t===a[r]?r++:(u[e]=n[t],f[e]=s[t],e++);return e-o}self.onmessage=n=>{const{bufferX:s,bufferY:a,outputBufferX:u,outputBufferY:f,start:l,end:y,deleteSegment:o,startTarget:r}=n.data,e=new Float64Array(s),t=new Float32Array(a),A=new Float64Array(u),g=new Float32Array(f);c(e,t,o,A,g,l,y,r),self.postMessage("Done")}})();
|
|
4
|
+
`,_t=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",kt],{type:"text/javascript;charset=utf-8"});function Wr(e){let t;try{if(t=_t&&(self.URL||self.webkitURL).createObjectURL(_t),!t)throw"";const r=new Worker(t,{name:e?.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(kt),{name:e?.name})}}const At=`(function(){"use strict";function F(n,l,a,o,s,y,g,f,i,w,A){let e=0,t=f;for(let r=y;r<=g;r++)if(o[t]=n[r],s[t]=l[r],t++,e<a.length&&r===a[e][0]){const u=a[e][0],c=a[e][1],d=n[u],h=n[c],m=l[u],D=l[c],x=h-d,P=D-m;let p=d+i;for(;p<h;)o[t]=p,s[t]=w?m+(p-d)*P/x:A,t++,p+=i;e++}return t-f}self.onmessage=n=>{const{bufferX:l,bufferY:a,outputBufferX:o,outputBufferY:s,start:y,end:g,gapsSegment:f,startTarget:i,fillDelta:w,interpolate:A,fillValue:e}=n.data,t=new Float64Array(l),r=new Float32Array(a),u=new Float64Array(o),c=new Float32Array(s);F(t,r,f,u,c,y,g,i,w,A,e),self.postMessage("Done")}})();
|
|
5
|
+
`,Tt=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",At],{type:"text/javascript;charset=utf-8"});function xr(e){let t;try{if(t=Tt&&(self.URL||self.webkitURL).createObjectURL(Tt),!t)throw"";const r=new Worker(t,{name:e?.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(At),{name:e?.name})}}const Lt=`(function(){"use strict";function g(o,n,c){for(let s=0;s<c.length;s++){const{indexes:t,lowerIdx:l,upperIdx:r}=c[s],i=o[l],f=n[l],a=o[r],d=n[r],p=a-i,w=d-f;if(p===0){for(let e=0;e<t.length;e++)n[t[e]]=f;continue}for(let e=0;e<t.length;e++){const u=t[e];n[u]=f+(o[u]-i)*w/p}}}self.onmessage=o=>{const{bufferX:n,bufferY:c,groups:s}=o.data,t=new Float64Array(n),l=new Float32Array(c);g(t,l,s),self.postMessage("Done")}})();
|
|
6
|
+
`,$t=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Lt],{type:"text/javascript;charset=utf-8"});function Gr(e){let t;try{if(t=$t&&(self.URL||self.webkitURL).createObjectURL($t),!t)throw"";const r=new Worker(t,{name:e?.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Lt),{name:e?.name})}}const Rt=`(function(){"use strict";self.onmessage=r=>{const{bufferX:s,bufferY:o,jobs:a}=r.data,f=new Float64Array(s),n=new Float32Array(o);for(let e=0;e<a.length;e++){const{chunkStart:c,chunkEnd:l,startDatetime:u,value:i,extent:y}=a[e];for(let t=c;t<l;t++)n[t]=n[t]+i*((f[t]-u)/y)}self.postMessage("Done")}})();
|
|
7
|
+
`,It=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Rt],{type:"text/javascript;charset=utf-8"});function Yr(e){let t;try{if(t=It&&(self.URL||self.webkitURL).createObjectURL(It),!t)throw"";const r=new Worker(t,{name:e?.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Rt),{name:e?.name})}}const Ot=`(function(){"use strict";function u(f,o,a,n,l,c,s,i){let r=c,e=0,t=i;const w=a.length;for(;r<s&&e<w;){const y=a[e][0];f[r]<=y?(n[t]=f[r],l[t]=o[r],r++):(n[t]=y,l[t]=a[e][1],e++),t++}for(;r<s;)n[t]=f[r],l[t]=o[r],r++,t++;for(;e<w;)n[t]=a[e][0],l[t]=a[e][1],e++,t++;return t-i}self.onmessage=f=>{const{bufferX:o,bufferY:a,outputBufferX:n,outputBufferY:l,origStart:c,origEnd:s,insertions:i,outStart:r}=f.data,e=new Float64Array(o),t=new Float32Array(a),w=new Float64Array(n),y=new Float32Array(l);u(e,t,i,w,y,c,s,r),self.postMessage("Done")}})();
|
|
8
|
+
`,Ut=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Ot],{type:"text/javascript;charset=utf-8"});function Hr(e){let t;try{if(t=Ut&&(self.URL||self.webkitURL).createObjectURL(Ut),!t)throw"";const r=new Worker(t,{name:e?.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Ot),{name:e?.name})}}const Mt=`(function(){"use strict";self.onmessage=i=>{const{bufferX:c,bufferY:g,outputBufferX:d,outputBufferY:y,indexes:n,outStart:r,amount:f,isMonth:Y,isYear:h,deltaMs:w}=i.data,s=new Float64Array(c),a=new Float32Array(g),l=new Float64Array(d),u=new Float32Array(y);if(Y)for(let t=0;t<n.length;t++){const e=n[t],o=new Date(s[e]);o.setMonth(o.getMonth()+f),l[r+t]=o.getTime(),u[r+t]=a[e]}else if(h)for(let t=0;t<n.length;t++){const e=n[t],o=new Date(s[e]);o.setFullYear(o.getFullYear()+f),l[r+t]=o.getTime(),u[r+t]=a[e]}else for(let t=0;t<n.length;t++){const e=n[t];l[r+t]=s[e]+w,u[r+t]=a[e]}self.postMessage("Done")}})();
|
|
9
|
+
`,Ct=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Mt],{type:"text/javascript;charset=utf-8"});function zr(e){let t;try{if(t=Ct&&(self.URL||self.webkitURL).createObjectURL(Ct),!t)throw"";const r=new Worker(t,{name:e?.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Mt),{name:e?.name})}}const Dt=`(function(){"use strict";function a(e,t,o,c){const n=[];let r=e[t];for(let s=t+1;s<=o;s++){const f=e[s];f-r>c&&n.push(s-1,s),r=f}return n}self.onmessage=e=>{const{bufferX:t,start:o,endInclusive:c,threshold:n}=e.data,r=new Float64Array(t);self.postMessage(a(r,o,c,n))}})();
|
|
10
|
+
`,Ft=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Dt],{type:"text/javascript;charset=utf-8"});function Xr(e){let t;try{if(t=Ft&&(self.URL||self.webkitURL).createObjectURL(Ft),!t)throw"";const r=new Worker(t,{name:e?.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Dt),{name:e?.name})}}const Pt=`(function(){"use strict";function c(u,s,t){const n=[];if(s>=t)return n;let e=s,o=u[s];for(let r=s+1;r<t;r++){const f=u[r];f!==o&&(n.push(e,r-e,o),e=r,o=f)}return n.push(e,t-e,o),n}self.onmessage=u=>{const{bufferY:s,start:t,end:n}=u.data,e=new Float32Array(s);self.postMessage(c(e,t,n))}})();
|
|
11
|
+
`,Nt=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Pt],{type:"text/javascript;charset=utf-8"});function Vr(e){let t;try{if(t=Nt&&(self.URL||self.webkitURL).createObjectURL(Nt),!t)throw"";const r=new Worker(t,{name:e?.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Pt),{name:e?.name})}}const Bt=`(function(){"use strict";function o(s,i,t,n,l){const f=[];if(n==="Less than")for(let e=i;e<t;e++)s[e]-s[e-1]<l&&f.push(e);else if(n==="Less than or equal to")for(let e=i;e<t;e++)s[e]-s[e-1]<=l&&f.push(e);else if(n==="Greater than")for(let e=i;e<t;e++)s[e]-s[e-1]>l&&f.push(e);else if(n==="Greater than or equal to")for(let e=i;e<t;e++)s[e]-s[e-1]>=l&&f.push(e);else if(n==="Equal")for(let e=i;e<t;e++)s[e]-s[e-1]==l&&f.push(e);return f}self.onmessage=s=>{const{bufferY:i,start:t,end:n,comparator:l,value:f}=s.data,e=new Float32Array(i);self.postMessage(o(e,t,n,l,f))}})();
|
|
12
|
+
`,jt=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Bt],{type:"text/javascript;charset=utf-8"});function qr(e){let t;try{if(t=jt&&(self.URL||self.webkitURL).createObjectURL(jt),!t)throw"";const r=new Worker(t,{name:e?.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Bt),{name:e?.name})}}const Wt=`(function(){"use strict";function l(t,i,n,o,h){const f=[];if(o==="Less than")for(let e=i;e<n;e++){const s=t[e-1];(t[e]-s)/Math.abs(s)<h&&f.push(e)}else if(o==="Less than or equal to")for(let e=i;e<n;e++){const s=t[e-1];(t[e]-s)/Math.abs(s)<=h&&f.push(e)}else if(o==="Greater than")for(let e=i;e<n;e++){const s=t[e-1];(t[e]-s)/Math.abs(s)>h&&f.push(e)}else if(o==="Greater than or equal to")for(let e=i;e<n;e++){const s=t[e-1];(t[e]-s)/Math.abs(s)>=h&&f.push(e)}else if(o==="Equal")for(let e=i;e<n;e++){const s=t[e-1];(t[e]-s)/Math.abs(s)==h&&f.push(e)}return f}self.onmessage=t=>{const{bufferY:i,start:n,end:o,comparator:h,value:f}=t.data,e=new Float32Array(i);self.postMessage(l(e,n,o,h,f))}})();
|
|
13
|
+
`,xt=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Wt],{type:"text/javascript;charset=utf-8"});function Jr(e){let t;try{if(t=xt&&(self.URL||self.webkitURL).createObjectURL(xt),!t)throw"";const r=new Worker(t,{name:e?.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Wt),{name:e?.name})}}const Gt=`(function(){"use strict";function k(i,l,u,r,c){const f=[],b=r.length;for(let a=l;a<u;a++){const t=i[a];let e=!1;for(let n=0;n<b;n++){const o=r[n],s=c[n];if(o===0){if(t<s){e=!0;break}}else if(o===1){if(t<=s){e=!0;break}}else if(o===2){if(t>s){e=!0;break}}else if(o===3){if(t>=s){e=!0;break}}else if(t==s){e=!0;break}}e&&f.push(a)}return f}self.onmessage=i=>{const{bufferY:l,start:u,end:r,ops:c,values:f}=i.data,b=new Float32Array(l);self.postMessage(k(b,u,r,c,f))}})();
|
|
14
|
+
`,Yt=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Gt],{type:"text/javascript;charset=utf-8"});function je(e){let t;try{if(t=Yt&&(self.URL||self.webkitURL).createObjectURL(Yt),!t)throw"";const r=new Worker(t,{name:e?.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Gt),{name:e?.name})}}const Ht=`(function(){"use strict";function e(l,t,o,s){const c=t.length;if(o==="ADD")for(let f=0;f<c;f++)l[t[f]]=l[t[f]]+s;else if(o==="SUB")for(let f=0;f<c;f++)l[t[f]]=l[t[f]]-s;else if(o==="MULT")for(let f=0;f<c;f++)l[t[f]]=l[t[f]]*s;else if(o==="DIV")for(let f=0;f<c;f++)l[t[f]]=l[t[f]]/s;else if(o==="ASSIGN")for(let f=0;f<c;f++)l[t[f]]=s}self.onmessage=l=>{const{bufferY:t,indexes:o,operator:s,value:c}=l.data,f=new Float32Array(t);e(f,o,s,c),self.postMessage("Done")}})();
|
|
15
|
+
`,zt=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Ht],{type:"text/javascript;charset=utf-8"});function Qr(e){let t;try{if(t=zt&&(self.URL||self.webkitURL).createObjectURL(zt),!t)throw"";const r=new Worker(t,{name:e?.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Ht),{name:e?.name})}}function Xt(e,t,r,n,s){const a=[],o=n.length;for(let i=t;i<r;i++){const l=e[i];let d=!1;for(let u=0;u<o;u++){const y=n[u],g=s[u];if(y===0){if(l<g){d=!0;break}}else if(y===1){if(l<=g){d=!0;break}}else if(y===2){if(l>g){d=!0;break}}else if(y===3){if(l>=g){d=!0;break}}else if(l==g){d=!0;break}}d&&a.push(i)}return a}function Kr(e,t,r,n,s){const a=[];if(n==="Less than")for(let o=t;o<r;o++)e[o]-e[o-1]<s&&a.push(o);else if(n==="Less than or equal to")for(let o=t;o<r;o++)e[o]-e[o-1]<=s&&a.push(o);else if(n==="Greater than")for(let o=t;o<r;o++)e[o]-e[o-1]>s&&a.push(o);else if(n==="Greater than or equal to")for(let o=t;o<r;o++)e[o]-e[o-1]>=s&&a.push(o);else if(n==="Equal")for(let o=t;o<r;o++)e[o]-e[o-1]==s&&a.push(o);return a}function Zr(e,t,r,n,s){const a=[];if(n==="Less than")for(let o=t;o<r;o++){const i=e[o-1];(e[o]-i)/Math.abs(i)<s&&a.push(o)}else if(n==="Less than or equal to")for(let o=t;o<r;o++){const i=e[o-1];(e[o]-i)/Math.abs(i)<=s&&a.push(o)}else if(n==="Greater than")for(let o=t;o<r;o++){const i=e[o-1];(e[o]-i)/Math.abs(i)>s&&a.push(o)}else if(n==="Greater than or equal to")for(let o=t;o<r;o++){const i=e[o-1];(e[o]-i)/Math.abs(i)>=s&&a.push(o)}else if(n==="Equal")for(let o=t;o<r;o++){const i=e[o-1];(e[o]-i)/Math.abs(i)==s&&a.push(o)}return a}function en(e,t,r,n){const s=[];let a=e[t];for(let o=t+1;o<=r;o++){const i=e[o];i-a>n&&s.push(o-1,o),a=i}return s}function tn(e,t,r){const n=[];if(t>=r)return n;let s=t,a=e[t];for(let o=t+1;o<r;o++){const i=e[o];i!==a&&(n.push(s,o-s,a),s=o,a=i)}return n.push(s,r-s,a),n}function rn(e,t,r,n,s,a,o,i,l,d,u){let y=0,g=i;for(let m=a;m<=o;m++)if(n[g]=e[m],s[g]=t[m],g++,y<r.length&&m===r[y][0]){const S=r[y][0],h=r[y][1],f=e[S],b=e[h],p=t[S],E=t[h],v=b-f,A=E-p;let $=f+l;for(;$<b;)n[g]=$,s[g]=d?p+($-f)*A/v:u,g++,$+=l;y++}return g-i}function nn(e,t,r,n,s,a,o,i){let l=a,d=0,u=i;const y=r.length;for(;l<o&&d<y;){const g=r[d][0];e[l]<=g?(n[u]=e[l],s[u]=t[l],l++):(n[u]=g,s[u]=r[d][1],d++),u++}for(;l<o;)n[u]=e[l],s[u]=t[l],l++,u++;for(;d<y;)n[u]=r[d][0],s[u]=r[d][1],d++,u++;return u-i}function sn(e,t,r,n,s,a,o,i){let l=0,d=i;for(let u=a;u<=o;u++)l<r.length&&u===r[l]?l++:(n[d]=e[u],s[d]=t[u],d++);return d-i}function on(e,t,r,n){const s=r.length,a=new Array(s);if(n.isMonth)for(let o=0;o<s;o++){const i=r[o],l=new Date(e[i]);l.setMonth(l.getMonth()+n.amount),a[o]=[l.getTime(),t[i]]}else if(n.isYear)for(let o=0;o<s;o++){const i=r[o],l=new Date(e[i]);l.setFullYear(l.getFullYear()+n.amount),a[o]=[l.getTime(),t[i]]}else for(let o=0;o<s;o++){const i=r[o];a[o]=[e[i]+n.deltaMs,t[i]]}return a}function an(e,t,r){for(let n=0;n<r.length;n++){const{indexes:s,lowerIdx:a,upperIdx:o}=r[n],i=e[a],l=t[a],d=e[o],u=t[o],y=d-i,g=u-l;if(y===0){for(let m=0;m<s.length;m++)t[s[m]]=l;continue}for(let m=0;m<s.length;m++){const S=s[m];t[S]=l+(e[S]-i)*g/y}}}function cn(e,t,r){for(let n=0;n<r.length;n++){const s=r[n][0],a=r[n][1],o=r[n][2];if(a<=s)continue;const i=e[s],l=e[a]-i;if(l!==0)for(let d=s;d<a;d++)t[d]=t[d]+o*((e[d]-i)/l)}}function Vt(e,t,r,n){const s=t.length;if(r==="ADD")for(let a=0;a<s;a++)e[t[a]]=e[t[a]]+n;else if(r==="SUB")for(let a=0;a<s;a++)e[t[a]]=e[t[a]]-n;else if(r==="MULT")for(let a=0;a<s;a++)e[t[a]]=e[t[a]]*n;else if(r==="DIV")for(let a=0;a<s;a++)e[t[a]]=e[t[a]]/n;else if(r==="ASSIGN")for(let a=0;a<s;a++)e[t[a]]=n}const We="qc-utils:calibration:v1",ln=720*60*60*1e3,ye=5e4,ge=2e5,me={spawnOverheadMs:50,inlineThroughput:5e4,workerThroughput:8e4,hwConcurrency:4,measuredAt:0,userAgent:"default"};let C=mn()??me,xe=null,se=null;const Ge=new Set,Ye={[L.VALUE_THRESHOLD]:{mode:"calibrated",weight:1,rationale:"O(n) single-pass scan; baseline reference"},[L.CHANGE]:{mode:"calibrated",weight:1.1,rationale:"O(n) with one subtraction per step"},[L.RATE_OF_CHANGE]:{mode:"calibrated",weight:1.4,rationale:"O(n) with division + abs per step"},[L.FIND_GAPS]:{mode:"calibrated",weight:.9,rationale:"O(n) on X only, mostly empty output"},[L.PERSISTENCE]:{mode:"calibrated",weight:1.3,rationale:"O(n) + chunk-boundary stitch"},[L.DATETIME_RANGE]:{mode:"always-inline",weight:0,rationale:"O(log n) binary search; never worth the worker hop"},[L.SELECTION]:{mode:"always-inline",weight:0,rationale:"Pure history bookkeeping"},[k.CHANGE_VALUES]:{mode:"calibrated",weight:.7,rationale:"O(k) in-place arithmetic on selection"},[k.ASSIGN_VALUES_BULK]:{mode:"always-inline",weight:0,rationale:"Single tight loop, already inline"},[k.ASSIGN_DATETIMES_BULK]:{mode:"always-inline",weight:0,rationale:"Composes delete+add which handle their own dispatch"},[k.INTERPOLATE]:{mode:"calibrated",weight:1.5,rationale:"Linear interp per consecutive group; in-place writes"},[k.DRIFT_CORRECTION]:{mode:"calibrated",weight:1.2,rationale:"O(range total) in-place math; one pass per range"},[k.SHIFT_DATETIMES]:{mode:"calibrated",weight:1.1,rationale:"O(k) per-point shift math; inline skips SAB allocation"},[k.ADD_POINTS]:{mode:"calibrated",weight:1.8,rationale:"Single merge pass over Y/X + insertions; fresh SAB per call"},[k.DELETE_POINTS]:{mode:"calibrated",weight:1.4,rationale:"Single skip-on-delete pass over Y/X; fresh SAB per call"},[k.FILL_GAPS]:{mode:"calibrated",weight:1.3,rationale:"Single copy-with-fills pass; fresh SAB sized to newLength"}};function P(e,t){const r=Ye[e];if(!r)return{useWorker:!0,predictedInlineMs:1/0,predictedWorkerMs:0,reason:"unknown op; keeping default worker path"};if(r.mode==="always-inline")return{useWorker:!1,predictedInlineMs:0,predictedWorkerMs:0,reason:r.rationale};if(typeof SharedArrayBuffer>"u")return{useWorker:!1,predictedInlineMs:0,predictedWorkerMs:1/0,reason:"SharedArrayBuffer unavailable; forced inline"};if(r.mode==="always-worker")return{useWorker:!0,predictedInlineMs:1/0,predictedWorkerMs:0,reason:r.rationale};const n=un(e,t);if(n<=0)return{useWorker:!1,predictedInlineMs:0,predictedWorkerMs:C.spawnOverheadMs,reason:"zero work units"};const s=Math.max(1,Math.min(t.parallelism??C.hwConcurrency,C.hwConcurrency)),a=r.weight*n/C.inlineThroughput,o=C.spawnOverheadMs+r.weight*n/(C.workerThroughput*s),i=a>o;return{useWorker:i,predictedInlineMs:a,predictedWorkerMs:o,reason:i?`worker faster (${o.toFixed(1)} vs ${a.toFixed(1)} ms)`:`inline faster (${a.toFixed(1)} vs ${o.toFixed(1)} ms)`}}function un(e,t){switch(e){case k.CHANGE_VALUES:case k.INTERPOLATE:case k.SHIFT_DATETIMES:case k.DRIFT_CORRECTION:return t.selectionSize??0;case k.DELETE_POINTS:return(t.selectionSize??0)+t.datasetSize*.25;case k.ADD_POINTS:{const r=Math.max(1,Math.log2(Math.max(t.datasetSize,2)));return t.datasetSize+(t.selectionSize??0)*r}default:return t.datasetSize}}function hn(e){return Ge.add(e),()=>Ge.delete(e)}function fn(){return C}function dn(){return xe}function pn(){return Object.keys(Ye).map(e=>({op:e,...Ye[e]}))}function yn(){C=me,xe=null;try{localStorage.removeItem(We)}catch{}}async function gn(e={}){if(typeof window>"u"||!(e.force||C.measuredAt===0||Date.now()-C.measuredAt>ln))return C;if(se)await se;else{se=qt().finally(()=>{se=null});const r=await se;C=r,wn(r),xe=r;for(const n of Ge)n(C)}return C}async function qt(){if(!(typeof SharedArrayBuffer<"u"))return{...me,measuredAt:Date.now(),userAgent:navigator.userAgent,hwConcurrency:navigator.hardwareConcurrency||me.hwConcurrency,sharedArrayBufferAvailable:!1,samples:{spawnRoundtripMs:[],inlineScanMs:[],workerScanMs:[]}};const t=navigator.hardwareConcurrency||4,r=new Float32Array(ye);for(let h=0;h<ye;h++)r[h]=Math.sin(h);const n=await He(3,()=>{const h=performance.now();return Xt(r,0,ye,[2],[.5]),performance.now()-h}),s=ze(n),a=ye/Math.max(s,.001),o=new SharedArrayBuffer(256*Float32Array.BYTES_PER_ELEMENT),i=await He(3,async()=>{const h=performance.now();return await new Promise(f=>{const b=new je;b.onmessage=()=>{b.terminate(),f()},b.postMessage({bufferY:o,start:0,end:256,ops:[2],values:[.5]})}),performance.now()-h}),l=ze(i),d=new SharedArrayBuffer(ge*Float32Array.BYTES_PER_ELEMENT),u=new Float32Array(d);for(let h=0;h<ge;h++)u[h]=Math.sin(h);const y=await He(3,async()=>{const h=performance.now();return await new Promise(f=>{const b=new je;b.onmessage=()=>{b.terminate(),f()},b.postMessage({bufferY:d,start:0,end:ge,ops:[2],values:[.5]})}),performance.now()-h}),g=Math.max(ze(y)-l,.1),m=ge/g;return{spawnOverheadMs:l,inlineThroughput:a,workerThroughput:m,hwConcurrency:t,measuredAt:Date.now(),userAgent:navigator.userAgent,sharedArrayBufferAvailable:!0,samples:{spawnRoundtripMs:i,inlineScanMs:n,workerScanMs:y}}}async function He(e,t){const r=[];for(let n=0;n<e;n++)await new Promise(s=>setTimeout(s,0)),r.push(await t());return r}function ze(e){if(!e.length)return 0;const t=[...e].sort((n,s)=>n-s),r=Math.floor(t.length/2);return t.length%2?t[r]:(t[r-1]+t[r])/2}function mn(){if(typeof localStorage>"u")return null;try{const e=localStorage.getItem(We);if(!e)return null;const t=JSON.parse(e);return!t||typeof t.spawnOverheadMs!="number"?null:t}catch{return null}}function wn(e){if(!(typeof localStorage>"u"))try{const t={spawnOverheadMs:e.spawnOverheadMs,inlineThroughput:e.inlineThroughput,workerThroughput:e.workerThroughput,hwConcurrency:e.hwConcurrency,measuredAt:e.measuredAt,userAgent:e.userAgent};localStorage.setItem(We,JSON.stringify(t))}catch{}}const ee=20*1e3,bn=1024,Sn=["date","value","qualifier"],En=typeof SharedArrayBuffer<"u";function D(e,t){return En?t!==void 0?new SharedArrayBuffer(e,{maxByteLength:t}):new SharedArrayBuffer(e):t!==void 0?new ArrayBuffer(e,{maxByteLength:t}):new ArrayBuffer(e)}function Jt(e,t){const r=e;typeof r.grow=="function"?r.grow(t):typeof r.resize=="function"&&r.resize(t)}function vn(e,t){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0}function kn(e,t){switch(e){case k.ADD_POINTS:case k.FILL_GAPS:return!1;default:return!0}}class _n{dataset={dimensions:Sn,source:{x:new Float64Array(D(ee*Float64Array.BYTES_PER_ELEMENT,ee*Float64Array.BYTES_PER_ELEMENT)),y:new Float32Array(D(ee*Float32Array.BYTES_PER_ELEMENT,ee*Float32Array.BYTES_PER_ELEMENT))}};history=[];redoStack=[];_isReplaying=!1;_pendingExecutionMode="inline";loadingTime=null;isLoading=!0;rawData;constructor(t){this.history=[],this.rawData=t,this.loadData(this.rawData)}async loadData(t){if(!t)return;this.isLoading=!0;const r=await pe(()=>{this._growBuffer(t.datetimes.length),this._resizeTo(t.datetimes.length),this.dataX.set(t.datetimes),this.dataY.set(t.dataValues)});this.loadingTime=r.duration,this.history.length=0,this.isLoading=!1}get dataX(){return this.dataset.source.x}get dataY(){return this.dataset.source.y}_resizeTo(t){this.dataset.source.x=new Float64Array(this.dataset.source.x.buffer).subarray(0,t),this.dataset.source.y=new Float32Array(this.dataset.source.y.buffer).subarray(0,t)}_growBuffer(t){const r=t*Float64Array.BYTES_PER_ELEMENT;let n=this.dataX.buffer.byteLength;for(;r>n;)n+=ee*Float64Array.BYTES_PER_ELEMENT;if(n*Float64Array.BYTES_PER_ELEMENT>this.dataX.buffer.maxByteLength){const s=D(this.dataX.buffer.byteLength,n*Float64Array.BYTES_PER_ELEMENT),a=D(this.dataY.buffer.byteLength,n*Float32Array.BYTES_PER_ELEMENT),o=new Float64Array(s),i=new Float32Array(a);o.set(this.dataX),i.set(this.dataY),this.dataset.source.x=o,this.dataset.source.y=i}this.dataX.buffer.byteLength<t*Float64Array.BYTES_PER_ELEMENT&&(Jt(this.dataX.buffer,t*Float64Array.BYTES_PER_ELEMENT),Jt(this.dataY.buffer,t*Float32Array.BYTES_PER_ELEMENT))}async reload(){this.loadingTime=null,this.isLoading=!0,this.history.length=0,await this.loadData(this.rawData)}async reloadHistory(t){const r=this.history.slice(0,t+1);return this.redoStack.length=0,await this.reload(),await this.dispatch(r.map(n=>[n.method,...n.args||[]]))}async removeHistoryItem(t){const r=[...this.history];return r.splice(t,1),this.redoStack.length=0,await this.reload(),await this.dispatch(r.map(n=>[n.method,...n.args||[]]))}async undo(){if(!this.history.length)return[];const t=this.history[this.history.length-1],r=this.history.slice(0,-1);await this.reload(),this.redoStack.push(t),this._isReplaying=!0;try{return await this.dispatch(r.map(n=>[n.method,...n.args||[]]))}finally{this._isReplaying=!1}}async redo(){if(!this.redoStack.length)return[];const t=this.redoStack.pop();this._isReplaying=!0;try{return await this.dispatch([[t.method,...t.args||[]]])}finally{this._isReplaying=!1}}get beginTime(){return this.dataset.source.x.length?new Date(this.dataset.source.x[0]):null}get endTime(){return this.dataset.source.x.length?new Date(this.dataset.source.x[this.dataset.source.x.length-1]):null}async dispatchAction(t,...r){const n={[k.ADD_POINTS]:this._addDataPoints,[k.CHANGE_VALUES]:this._changeValues,[k.ASSIGN_VALUES_BULK]:this._assignValuesBulk,[k.DELETE_POINTS]:this._deleteDataPointsFromSelection,[k.DRIFT_CORRECTION]:this._driftCorrectionFromSelection,[k.INTERPOLATE]:this._interpolateFromSelection,[k.SHIFT_DATETIMES]:this._shiftFromSelection,[k.ASSIGN_DATETIMES_BULK]:this._assignDatetimesBulk,[k.FILL_GAPS]:this._fillGaps};let s=[],a=null;try{this._isReplaying||(this.redoStack.length=0),a={method:t,args:r,isLoading:!0},this.history.push(a),kn(t,r)||this.history[this.history.length-2]?.method===L.SELECTION&&this.history.splice(this.history.length-2,1),this._pendingExecutionMode="inline";const o=await pe(async()=>await n[t].apply(this,r));s=o.response;const i=this.history.indexOf(a),l=i>=0?this.history[i]:void 0;l&&(l.duration=o.duration,l.executionMode=this._pendingExecutionMode,l.status="success",l.isLoading=!1)}catch{if(a){const i=this.history.indexOf(a),l=i>=0?this.history[i]:void 0;l&&(l.status="failed",l.isLoading=!1)}}return s}async dispatch(t,...r){const n=async(s,a)=>L[s]?await this.dispatchFilter(s,...a):await this.dispatchAction(s,...a);if(Array.isArray(t)){let s=[];for(let a=0;a<t.length;a++){const o=t[a][0],i=t[a].slice(1,t[a].length);s=await n(o,i)}return s}else return await n(t,r)}async dispatchFilter(t,...r){const n={[L.FIND_GAPS]:this._findGaps,[L.VALUE_THRESHOLD]:this._valueThreshold,[L.DATETIME_RANGE]:this._datetimeRange,[L.PERSISTENCE]:this._persistence,[L.CHANGE]:this._change,[L.RATE_OF_CHANGE]:this._rateOfChange,[L.SELECTION]:this._selection};let s=[],a=null;try{const o=t===L.SELECTION,i=o&&(!r[0]||Array.isArray(r[0])&&r[0].length===0);!this._isReplaying&&!i&&(this.redoStack.length=0),a={method:t,args:r,isLoading:!0};const l=this.history[this.history.length-1],d=!!L[l?.method],u=l?.method===t||d&&!o;let y;u?(y=this.history.length-1,this.history[y]=a):(this.history.push(a),y=this.history.length-1),this._pendingExecutionMode="inline";const g=await pe(async()=>await n[t].apply(this,r));s=g.response;const m=this.history.indexOf(a),S=m>=0?this.history[m]:void 0;S&&(S.duration=g.duration,S.executionMode=this._pendingExecutionMode,S.selected=g.response,S.status="success",S.isLoading=!1)}catch(o){if(console.log(`Failed to execute filter operation: ${t} with arguments: `,r),console.log(o),a){const i=this.history.indexOf(a),l=i>=0?this.history[i]:void 0;l&&(l.status="failed",l.isLoading=!1)}}return s}async _changeValues(t,r){const n=this.history[this.history.length-2]?.selected;if(!n||n.length===0)return[];const s=n.length;if(!P(k.CHANGE_VALUES,{datasetSize:this.dataset.source.y.length,selectionSize:s}).useWorker||s<bn)return Vt(this.dataY,n,t,r),[];this._pendingExecutionMode="worker";const o=Math.min(navigator.hardwareConcurrency||1,s),i=Math.ceil(s/o),l=[],d=[];for(let u=0;u<o;u++){const y=u*i,g=Math.min((u+1)*i,s);if(y>=g)break;const m=n.slice(y,g);d.push(new Promise(S=>{const h=new Qr;l.push(h),h.postMessage({bufferY:this.dataY.buffer,indexes:m,operator:t,value:r}),h.onmessage=f=>{S(f.data)}}))}return await Promise.all(d),l.forEach(u=>u.terminate()),[]}_applyOperatorInPlace(t,r,n){Vt(this.dataY,t,r,n)}async _assignValuesBulk(t){const r=this.history[this.history.length-2]?.selected;if(!r||!r.length||!t?.length)return[];const n=Math.min(r.length,t.length),s=this.dataY;for(let a=0;a<n;a++)s[r[a]]=t[a];return[]}async _assignDatetimesBulk(t){const r=this.history[this.history.length-2]?.selected;if(!r||!r.length||!t?.length)return[];const n=Math.min(r.length,t.length),s=new Array(n),a=new Array(n);for(let o=0;o<n;o++)s[o]=[t[o],this.dataY[r[o]]],a[o]=r[o];return a.sort((o,i)=>o-i),await this._deleteDataPoints(a),await this._addDataPoints(s),[]}async _interpolateFromSelection(){const t=this.history[this.history.length-2]?.selected;if(!(!t||t.length===0))return this._interpolate(t)}async _interpolate(t){const r=this._getConsecutiveGroups(t);if(r.length===0||r[0].length===0)return;const n=this.dataset.source.y.length,s=r.map(u=>({indexes:u,lowerIdx:Math.max(0,u[0]-1),upperIdx:Math.min(n-1,u[u.length-1]+1)}));if(!P(k.INTERPOLATE,{datasetSize:n,selectionSize:t.length}).useWorker){an(this.dataX,this.dataY,s);return}this._pendingExecutionMode="worker";const o=Math.min(navigator.hardwareConcurrency||1,s.length),i=Math.ceil(s.length/o),l=[],d=[];for(let u=0;u<o;u++){const y=s.slice(u*i,(u+1)*i);if(y.length===0)break;d.push(new Promise(g=>{const m=new Gr;l.push(m),m.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,groups:y}),m.onmessage=S=>{g(S.data)}}))}await Promise.all(d),l.forEach(u=>u.terminate())}async _shiftFromSelection(t,r){const n=this.history[this.history.length-2]?.selected;return!n||n.length===0?[]:await this._shift(n,t,r)??[]}async _shift(t,r,n){if(t.length===0)return[];const s=n===M.MONTH,a=n===M.YEAR,o=!s&&!a?r*ne[n]*1e3:0,i=t.length;if(!P(k.SHIFT_DATETIMES,{datasetSize:this.dataset.source.x.length,selectionSize:i}).useWorker){const p=on(this.dataX,this.dataY,t,{amount:r,isMonth:s,isYear:a,deltaMs:o});return await this._deleteDataPoints(t),await this._addDataPoints(p)??[]}this._pendingExecutionMode="worker";const d=D(i*Float64Array.BYTES_PER_ELEMENT),u=D(i*Float32Array.BYTES_PER_ELEMENT),y=Math.min(navigator.hardwareConcurrency||1,i),g=Math.ceil(i/y),m=[],S=[];for(let p=0;p<y;p++){const E=p*g,v=Math.min((p+1)*g,i);if(E>=v)break;const A=t.slice(E,v);S.push(new Promise($=>{const R=new zr;m.push(R),R.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,outputBufferX:d,outputBufferY:u,indexes:A,outStart:E,amount:r,isMonth:s,isYear:a,deltaMs:o}),R.onmessage=O=>{$(O.data)}}))}await Promise.all(S),m.forEach(p=>p.terminate());const h=new Float64Array(d),f=new Float32Array(u),b=new Array(i);for(let p=0;p<i;p++)b[p]=[h[p],f[p]];return await this._deleteDataPoints(t),await this._addDataPoints(b)??[]}async _fillGaps(t,r,n,s,a){const o=this.dataX.length;if(o===0)return[];const i=t[0]*ne[t[1]]*1e3,l=r[0]*ne[r[1]]*1e3,d=this.dataX,u=a?.[0]!=null&&Number.isFinite(a[0])?j(d,a[0]):0,y=a?.[1]!=null&&Number.isFinite(a[1])?W(d,a[1]):o-1,g=[],m=[];let S=0;for(let _=u+1;_<=y;_++)if(d[_]-d[_-1]>i){let N=0,x=d[_-1]+l;for(;x<d[_];)N++,x+=l;N>0&&(g.push([_-1,_]),m.push(N),S+=N)}if(S===0)return[];const h=new Array(S);let f=0,b=0;for(let _=0;_<g.length;_++){const G=g[_][0],N=m[_];for(let x=1;x<=N;x++)h[b++]=G+f+x;f+=N}const p=o+S,E=p*Float64Array.BYTES_PER_ELEMENT,v=p*Float32Array.BYTES_PER_ELEMENT,A=D(E,Math.max(this.dataX.buffer.maxByteLength,E)),$=D(v,Math.max(this.dataY.buffer.maxByteLength,v));if(!P(k.FILL_GAPS,{datasetSize:o,selectionSize:S}).useWorker){const _=new Float64Array(A),G=new Float32Array($);return rn(this.dataX,this.dataY,g,_,G,0,o-1,0,l,n,s),this.dataset.source.x=_,this.dataset.source.y=G,this._resizeTo(p),h}this._pendingExecutionMode="worker";const O=navigator.hardwareConcurrency||1,Qt=Math.ceil(o/O),Xe=[];let ae=0;for(let _=0;_<O;_++){const G=_*Qt,N=Math.min((_+1)*Qt-1,o-1),x=[];let we=0;for(;ae<g.length&&g[ae][0]<=N;)x.push(g[ae]),we+=m[ae],ae++;Xe.push({start:G,end:N,gapsSegment:x,fillsInSegment:we})}const Ve=new Array(O).fill(0);for(let _=1;_<O;_++)Ve[_]=Ve[_-1]+Xe[_-1].fillsInSegment;const Kt=[],Zt=[];for(let _=0;_<O;_++){const{start:G,end:N,gapsSegment:x}=Xe[_],we=G+Ve[_];Zt.push(new Promise(Rn=>{const qe=new xr;Kt.push(qe),qe.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,outputBufferX:A,outputBufferY:$,start:G,end:N,gapsSegment:x,startTarget:we,fillDelta:l,interpolate:n,fillValue:s}),qe.onmessage=In=>{Rn(In.data)}}))}return await Promise.all(Zt),Kt.forEach(_=>_.terminate()),this.dataset.source.x=new Float64Array(A),this.dataset.source.y=new Float32Array($),this._resizeTo(p),h}async _deleteDataPointsFromSelection(){const t=this.history[this.history.length-2]?.selected;if(!(!t||t.length===0))return this._deleteDataPoints(t)}async _deleteDataPoints(t){const r=this.dataX.length,n=r-t.length;if(!P(k.DELETE_POINTS,{datasetSize:r,selectionSize:t.length}).useWorker){const m=D(this.dataX.buffer.byteLength,this.dataX.buffer.maxByteLength),S=D(this.dataY.buffer.byteLength,this.dataY.buffer.maxByteLength),h=new Float64Array(m),f=new Float32Array(S);sn(this.dataX,this.dataY,t,h,f,0,r-1,0),this.dataset.source.x=h,this.dataset.source.y=f,this._resizeTo(n);return}this._pendingExecutionMode="worker";const a=navigator.hardwareConcurrency||1,o=Math.ceil(this.dataX.length/a),i=[],l=[];for(let m=0;m<a;m++){const S=m*o,h=Math.min((m+1)*o-1,this.dataX.length-1),f=j(t,S),b=W(t,h),p=t.slice(f,b+1);l.push({start:S,end:h,deleteSegment:p})}const d=new Array(a).fill(0);for(let m=1;m<a;m++)d[m]=d[m-1]+l[m-1].deleteSegment.length;const u=[],y=D(this.dataX.buffer.byteLength,this.dataX.buffer.maxByteLength),g=D(this.dataY.buffer.byteLength,this.dataY.buffer.maxByteLength);for(let m=0;m<a;m++){const{start:S,end:h,deleteSegment:f}=l[m],b=S-d[m];u.push(new Promise(p=>{const E=new Wr;i.push(E),E.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,outputBufferX:y,outputBufferY:g,start:S,end:h,deleteSegment:f,startTarget:b}),E.onmessage=v=>{p(v.data)}}))}await Promise.all(u),i.forEach(m=>m.terminate()),this.dataset.source.x=new Float64Array(y),this.dataset.source.y=new Float32Array(g),this._resizeTo(n)}async _driftCorrectionFromSelection(t){const r=this.history[this.history.length-2]?.selected;if(!r||r.length===0)return;const n=this._getConsecutiveGroups(r),s=[];for(const a of n)a.length!==0&&s.push([a[0],a[a.length-1],t]);if(s.length!==0)return this._driftCorrection(s)}async _driftCorrection(t){if(!t||t.length===0)return;const r=this.dataset.source.x,n=navigator.hardwareConcurrency||1;let s=0;for(const[y,g]of t)g>y&&(s+=g-y);if(!P(k.DRIFT_CORRECTION,{datasetSize:r.length,selectionSize:s}).useWorker){cn(r,this.dataY,t);return}this._pendingExecutionMode="worker";const o=[];for(const[y,g,m]of t){if(g<=y)continue;const S=r[y],h=r[g]-S;if(h===0)continue;const f=g-y,b=Math.max(1,Math.ceil(f/n));for(let p=y;p<g;p+=b)o.push({chunkStart:p,chunkEnd:Math.min(p+b,g),startDatetime:S,value:m,extent:h})}if(o.length===0)return;const i=Math.min(n,o.length),l=Array.from({length:i},()=>[]);o.forEach((y,g)=>l[g%i].push(y));const d=[],u=[];for(const y of l)y.length!==0&&u.push(new Promise(g=>{const m=new Yr;d.push(m),m.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,jobs:y}),m.onmessage=S=>{g(S.data)}}));await Promise.all(u),d.forEach(y=>y.terminate())}_getConsecutiveGroups(t){const r=[[]];return t.reduce((n,s)=>{const a=n[n.length-1];return!a.length||s==a[a.length-1]+1?a.push(s):n.push([s]),n},r),r}async _addDataPoints(t){if(t.length===0)return[];const r=this.dataX.length,n=r+t.length;t.sort((h,f)=>h[0]-f[0]);const s=new Array(t.length);for(let h=0;h<t.length;h++){const f=t[h][0],b=W(this.dataX,f)+1;s[h]=b+h}const a=n*Float64Array.BYTES_PER_ELEMENT,o=n*Float32Array.BYTES_PER_ELEMENT,i=D(a,Math.max(this.dataX.buffer.maxByteLength,a)),l=D(o,Math.max(this.dataY.buffer.maxByteLength,o));if(!P(k.ADD_POINTS,{datasetSize:r,selectionSize:t.length}).useWorker){const h=new Float64Array(i),f=new Float32Array(l);return nn(this.dataX,this.dataY,t,h,f,0,r,0),this.dataset.source.x=h,this.dataset.source.y=f,this._resizeTo(n),s}this._pendingExecutionMode="worker";const u=t.map(h=>W(this.dataX,h[0])+1),y=Math.max(1,Math.min(navigator.hardwareConcurrency||1,Math.max(r,1))),g=Math.ceil(Math.max(r,1)/y),m=[],S=[];for(let h=0;h<y;h++){const f=h*g,b=Math.min((h+1)*g,r),p=j(u,f),E=h===y-1?t.length:j(u,b),v=t.slice(p,E),A=f+p;f>=b&&v.length===0||S.push(new Promise($=>{const R=new Hr;m.push(R),R.postMessage({bufferX:this.dataX.buffer,bufferY:this.dataY.buffer,outputBufferX:i,outputBufferY:l,origStart:f,origEnd:b,insertions:v,outStart:A}),R.onmessage=O=>{$(O.data)}}))}return await Promise.all(S),m.forEach(h=>h.terminate()),this.dataset.source.x=new Float64Array(i),this.dataset.source.y=new Float32Array(l),this._resizeTo(n),s}async _valueThreshold(t,r){const n=Object.keys(t);if(n.length===0)return[];const s={[X.LT]:0,[X.LTE]:1,[X.GT]:2,[X.GTE]:3,[X.E]:4},a=n.map(E=>s[E]??4),o=n.map(E=>t[E]),i=this.dataset.source.y,l=this.dataset.source.x;let d=0,u=i.length;if(u===0)return[];if(r!=null){const[E,v]=r;E!=null&&Number.isFinite(E)&&(d=j(l,E)),v!=null&&Number.isFinite(v)&&(u=W(l,v)+1)}if(u<=d)return[];const y=u-d;if(!P(L.VALUE_THRESHOLD,{datasetSize:y}).useWorker)return Xt(i,d,u,a,o);this._pendingExecutionMode="worker";const m=Math.min(navigator.hardwareConcurrency||1,y),S=Math.ceil(y/m),h=[],f=[];for(let E=0;E<m;E++){const v=d+E*S,A=Math.min(d+(E+1)*S,u);if(v>=A)break;f.push(new Promise($=>{const R=new je;h.push(R),R.postMessage({bufferY:this.dataY.buffer,start:v,end:A,ops:a,values:o}),R.onmessage=O=>{$(O.data)}}))}const b=await Promise.all(f);h.forEach(E=>E.terminate());const p=[];for(let E=0;E<b.length;E++){const v=b[E];for(let A=0;A<v.length;A++)p.push(v[A])}return p}async _rateOfChange(t,r,n){const s=this.dataset.source.y,a=this.dataset.source.x;if(s.length<2)return[];let o=1,i=s.length;if(n!=null){const[f,b]=n;f!=null&&Number.isFinite(f)&&(o=Math.max(1,j(a,f))),b!=null&&Number.isFinite(b)&&(i=W(a,b)+1)}if(i<=o)return[];const l=i-o;if(!P(L.RATE_OF_CHANGE,{datasetSize:s.length}).useWorker)return Zr(s,o,i,t,r);this._pendingExecutionMode="worker";const u=Math.min(navigator.hardwareConcurrency||1,l),y=Math.ceil(l/u),g=[],m=[];for(let f=0;f<u;f++){const b=o+f*y,p=Math.min(o+(f+1)*y,i);if(b>=p)break;m.push(new Promise(E=>{const v=new Jr;g.push(v),v.postMessage({bufferY:this.dataY.buffer,start:b,end:p,comparator:t,value:r}),v.onmessage=A=>{E(A.data)}}))}const S=await Promise.all(m);g.forEach(f=>f.terminate());const h=[];for(let f=0;f<S.length;f++){const b=S[f];for(let p=0;p<b.length;p++)h.push(b[p])}return h}async _datetimeRange(t,r){const n=this.dataset.source.x,s=n.length;if(s===0)return[];const a=t==null?0:j(n,t),o=r==null?s-1:W(n,r);if(a>o)return[];const i=new Array(o-a+1);for(let l=a;l<=o;l++)i[l-a]=l;return i}async _selection(t){const r=this.history[this.history.length-2],n=!!r&&r.method!==L.SELECTION&&!!L[r.method],s=n&&Array.isArray(r.selected)?r.selected:void 0;return!t||!t.length?(this.history.pop(),s&&s.length>0&&this.history.pop(),t):(s&&vn(s,t)?this.history.pop():n&&this.history.splice(this.history.length-2,1),t)}async _change(t,r,n){const s=this.dataset.source.y,a=this.dataset.source.x;if(s.length<2)return[];let o=1,i=s.length;if(n!=null){const[f,b]=n;f!=null&&Number.isFinite(f)&&(o=Math.max(1,j(a,f))),b!=null&&Number.isFinite(b)&&(i=W(a,b)+1)}if(i<=o)return[];const l=i-o;if(!P(L.CHANGE,{datasetSize:s.length}).useWorker)return Kr(s,o,i,t,r);this._pendingExecutionMode="worker";const u=Math.min(navigator.hardwareConcurrency||1,l),y=Math.ceil(l/u),g=[],m=[];for(let f=0;f<u;f++){const b=o+f*y,p=Math.min(o+(f+1)*y,i);if(b>=p)break;m.push(new Promise(E=>{const v=new qr;g.push(v),v.postMessage({bufferY:this.dataY.buffer,start:b,end:p,comparator:t,value:r}),v.onmessage=A=>{E(A.data)}}))}const S=await Promise.all(m);g.forEach(f=>f.terminate());const h=[];for(let f=0;f<S.length;f++){const b=S[f];for(let p=0;p<b.length;p++)h.push(b[p])}return h}async _findGaps(t,r,n){const s=this.dataset.source.x;let a=0,o=s.length;if(n!=null){const[f,b]=n;f!=null&&Number.isFinite(f)&&(a=j(s,f)),b!=null&&Number.isFinite(b)&&(o=W(s,b)+1)}if(o<=a)return[];const i=t*ne[r]*1e3;if(!P(L.FIND_GAPS,{datasetSize:o-a}).useWorker){const f=en(s,a,o-1,i),b=new Set;for(let p=0;p<f.length;p++)b.add(f[p]);return[...b]}this._pendingExecutionMode="worker";const d=o-a,u=Math.min(navigator.hardwareConcurrency||1,d),y=Math.ceil(d/u),g=[],m=[];for(let f=0;f<u;f++){const b=a+f*y,p=Math.min(a+(f+1)*y,o);if(b>=p)break;m.push(new Promise(E=>{const v=new Xr;g.push(v),v.postMessage({bufferX:this.dataX.buffer,start:b,endInclusive:p,threshold:i}),v.onmessage=A=>{E(A.data)}}))}const S=await Promise.all(m);g.forEach(f=>f.terminate());const h=new Set;for(let f=0;f<S.length;f++){const b=S[f];for(let p=0;p<b.length;p++)h.add(b[p])}return[...h]}async _persistence(t,r){const n=this.dataset.source.x,s=this.dataset.source.y;let a=0,o=s.length;if(r!=null){const[p,E]=r;p!=null&&Number.isFinite(p)&&(a=j(n,p)),E!=null&&Number.isFinite(E)&&(o=W(n,E)+1)}if(o<=a)return[];const i=o-a;if(!P(L.PERSISTENCE,{datasetSize:i}).useWorker){const p=tn(s,a,o),E=[];for(let v=0;v<p.length;v+=3){const A=p[v],$=p[v+1];if($>=t)for(let R=0;R<$;R++)E.push(A+R)}return E}this._pendingExecutionMode="worker";const d=Math.min(navigator.hardwareConcurrency||1,i),u=Math.ceil(i/d),y=[],g=[];for(let p=0;p<d;p++){const E=a+p*u,v=Math.min(a+(p+1)*u,o);if(E>=v)break;g.push(new Promise(A=>{const $=new Vr;y.push($),$.postMessage({bufferY:this.dataY.buffer,start:E,end:v}),$.onmessage=R=>{A(R.data)}}))}const m=await Promise.all(g);y.forEach(p=>p.terminate());const S=[],h=[],f=[];for(let p=0;p<m.length;p++){const E=m[p];for(let v=0;v<E.length;v+=3){const A=E[v],$=E[v+1],R=E[v+2],O=S.length-1;O>=0&&f[O]===R&&S[O]+h[O]===A?h[O]+=$:(S.push(A),h.push($),f.push(R))}}const b=[];for(let p=0;p<S.length;p++){const E=h[p];if(E>=t){const v=S[p];for(let A=0;A<E;A++)b.push(v+A)}}return b}}const oe="1",An=new Set([...Object.values(k),...Object.values(L)]);function Tn(e,t){const r=e.history.map(n=>{const s={method:n.method,args:n.args?[...n.args]:[]};return n.status==="failed"&&(s.status="failed"),s});return{version:oe,createdAt:new Date().toISOString(),window:{startDate:t.startDate,endDate:t.endDate},operations:r}}function Ln(e){if(!e||typeof e!="object")throw new Error("QC script must be a JSON object.");const t=e;if(t.version!==oe)throw new Error(`Unsupported QC script version: ${String(t.version)}. This loader understands version "${oe}".`);if(typeof t.createdAt!="string")throw new Error("QC script is missing `createdAt` (ISO-8601 string).");const r=t.window;if(!r||typeof r!="object")throw new Error("QC script is missing `window`.");if(typeof r.startDate!="string"||typeof r.endDate!="string")throw new Error("`window.startDate` and `window.endDate` must be ISO-8601 strings.");if(!Array.isArray(t.operations))throw new Error("QC script `operations` must be an array.");const n=t.operations.map((s,a)=>{if(!s||typeof s!="object")throw new Error(`Operation ${a} must be an object.`);const o=s;if(typeof o.method!="string")throw new Error(`Operation ${a} missing string \`method\`.`);if(!An.has(o.method))throw new Error(`Operation ${a} has unknown method: "${o.method}".`);if(!Array.isArray(o.args))throw new Error(`Operation ${a} \`args\` must be an array.`);const i={method:o.method,args:[...o.args]};return o.status==="failed"&&(i.status="failed"),i});return{version:oe,createdAt:t.createdAt,window:{startDate:r.startDate,endDate:r.endDate},operations:n}}async function $n(e,t){e.history.length=0,e.redoStack.length=0,await e.reload();const r={applied:0,failed:[]};for(let n=0;n<t.operations.length;n++){const s=t.operations[n];try{await e.dispatch(s.method,...s.args),e.history[e.history.length-1]?.status==="failed"?r.failed.push({index:n,method:s.method,error:"Operation handler reported failure (see console)."}):r.applied++}catch(a){r.failed.push({index:n,method:s.method,error:a instanceof Error?a.message:String(a)})}}return r}w.ACCOUNT_BASE=B,w.AUTH_BASE=he,w.ApiKey=hr,w.BASE_URL=F,w.Collaborator=dr,w.DEFAULT_SNACK_DURATION=Re,w.DataSource=Or,w.Datastream=rr,w.EnumEditOperations=k,w.EnumFilterOperations=L,w.FilterOperation=X,w.HydroShareArchive=Ke,w.INCREASE_AMOUNT=ee,w.Location=Ze,w.LogicalOperation=Qe,w.OAuthProvider=ur,w.ObservationRecord=_n,w.ObservedProperty=or,w.Operator=Je,w.Organization=cr,w.PROVIDER_BASE=te,w.Payload=Cr,w.PermissionAction=et,w.PermissionResource=tt,w.Position=dt,w.PostHydroShareArchive=er,w.ProcessingLevel=ar,w.QC_SCRIPT_VERSION=oe,w.ResultQualifier=ir,w.SESSION_BASE=fe,w.Sensor=sr,w.Snack=pt,w.SnackColor=Ie,w.SnackIcon=Oe,w.SnackTitle=Ue,w.Snackbar=yt,w.TAG_BASE=Pe,w.THINGS_BASE=T,w.Thing=tr,w.TimeUnit=M,w.Unit=nr,w.User=lr,w.Workspace=fr,w.api=Mr,w.apiMethods=c,w.applyScript=$n,w.clearCalibration=yn,w.createPatchObject=Me,w.ensureCalibration=gn,w.extractErrorMessage=rt,w.findFirstGreaterOrEqual=j,w.findLastLessOrEqual=W,w.formatDate=Nr,w.formatDuration=Br,w.getCSRFToken=be,w.getCalibration=fn,w.getLastBenchmarkDetail=dn,w.getObservationsEndpoint=Ur,w.getOperationTable=pn,w.measureEllapsedTime=pe,w.onCalibrationChange=hn,w.parseScript=Ln,w.requestInterceptor=Se,w.responseInterceptor=Ee,w.runBenchmarks=qt,w.serializeHistory=Tn,w.shouldUseWorker=P,w.subtractHours=jr,w.timeUnitMultipliers=ne,Object.defineProperty(w,Symbol.toStringTag,{value:"Module"})}));
|
package/dist/types/index.d.ts
CHANGED
|
@@ -66,7 +66,6 @@ export declare enum LogicalOperation {
|
|
|
66
66
|
}
|
|
67
67
|
export type HistoryItem = {
|
|
68
68
|
method: EnumEditOperations | EnumFilterOperations;
|
|
69
|
-
icon: string;
|
|
70
69
|
isLoading: boolean;
|
|
71
70
|
args?: any[];
|
|
72
71
|
duration?: number;
|
|
@@ -83,6 +82,41 @@ export type HistoryItem = {
|
|
|
83
82
|
*/
|
|
84
83
|
executionMode?: "worker" | "inline";
|
|
85
84
|
};
|
|
85
|
+
/** The wall-clock window the script was authored against. The
|
|
86
|
+
* loader is responsible for fetching this exact range of
|
|
87
|
+
* observations into the target `ObservationRecord` before
|
|
88
|
+
* replaying. ISO-8601 strings (not `Date`) so the type round-trips
|
|
89
|
+
* cleanly through `JSON.stringify`/`JSON.parse`. */
|
|
90
|
+
export type QcScriptWindow = {
|
|
91
|
+
startDate: string;
|
|
92
|
+
endDate: string;
|
|
93
|
+
};
|
|
94
|
+
/** A single replayable operation entry. Mirrors the
|
|
95
|
+
* `[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. */
|
|
99
|
+
export type QcScriptOperation = {
|
|
100
|
+
method: EnumEditOperations | EnumFilterOperations;
|
|
101
|
+
args: any[];
|
|
102
|
+
status?: "success" | "failed";
|
|
103
|
+
};
|
|
104
|
+
/** A serialized QC history. Schema `version: "1"`. */
|
|
105
|
+
export type QcScript = {
|
|
106
|
+
version: "1";
|
|
107
|
+
createdAt: string;
|
|
108
|
+
window: QcScriptWindow;
|
|
109
|
+
operations: QcScriptOperation[];
|
|
110
|
+
};
|
|
111
|
+
/** Returned by `applyScript` — per-op success/failure tally. */
|
|
112
|
+
export type ApplyScriptReport = {
|
|
113
|
+
applied: number;
|
|
114
|
+
failed: Array<{
|
|
115
|
+
index: number;
|
|
116
|
+
method: string;
|
|
117
|
+
error: string;
|
|
118
|
+
}>;
|
|
119
|
+
};
|
|
86
120
|
export type DataPoint = {
|
|
87
121
|
date: Date;
|
|
88
122
|
value: number;
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -96,7 +96,19 @@ export declare class ObservationRecord {
|
|
|
96
96
|
redo(): Promise<number[]>;
|
|
97
97
|
get beginTime(): Date | null;
|
|
98
98
|
get endTime(): Date | null;
|
|
99
|
-
/**
|
|
99
|
+
/**
|
|
100
|
+
* Dispatch an operation and log its signature in history.
|
|
101
|
+
*
|
|
102
|
+
* The selection-consuming entries below (DELETE_POINTS, INTERPOLATE,
|
|
103
|
+
* SHIFT_DATETIMES, DRIFT_CORRECTION) route to thin
|
|
104
|
+
* `*FromSelection` wrappers that read the target indices off
|
|
105
|
+
* `history[length - 2].selected` at dispatch time, mirroring the
|
|
106
|
+
* pattern CHANGE_VALUES already uses. The internal handlers
|
|
107
|
+
* (`_deleteDataPoints`, `_shift`, etc.) keep their explicit-
|
|
108
|
+
* indices signatures so other internal callers (e.g.
|
|
109
|
+
* `_assignDatetimesBulk` → `_deleteDataPoints` + `_addDataPoints`)
|
|
110
|
+
* can pass locally-computed indices without going through history.
|
|
111
|
+
*/
|
|
100
112
|
dispatchAction(action: EnumEditOperations, ...args: any): Promise<number[]>;
|
|
101
113
|
dispatch(actions: EnumEditOperations | EnumFilterOperations | [EnumEditOperations | EnumFilterOperations, ...any][], ...args: any): Promise<number[]>;
|
|
102
114
|
/** Filter operations do not transform the data and return a selection */
|
|
@@ -144,6 +156,14 @@ export declare class ObservationRecord {
|
|
|
144
156
|
* [[SELECTION, indices], [ASSIGN_DATETIMES_BULK, datetimes]]
|
|
145
157
|
*/
|
|
146
158
|
private _assignDatetimesBulk;
|
|
159
|
+
/**
|
|
160
|
+
* Dispatch wrapper around `_interpolate` — reads target indices
|
|
161
|
+
* from `history[length - 2].selected` (the SELECTION the caller
|
|
162
|
+
* dispatched immediately before this op). External callers go
|
|
163
|
+
* through here; internal callers can keep using `_interpolate`
|
|
164
|
+
* directly with explicit indices.
|
|
165
|
+
*/
|
|
166
|
+
private _interpolateFromSelection;
|
|
147
167
|
/**
|
|
148
168
|
* Multi-threaded linear interpolation over the selected indexes.
|
|
149
169
|
* 1. Main thread partitions the selected indexes into consecutive groups and computes each group's lower/upper anchors.
|
|
@@ -151,7 +171,12 @@ export declare class ObservationRecord {
|
|
|
151
171
|
* 3. Each worker writes interpolated Y values directly into the shared Y buffer — no output copy needed since only a subset of Y changes.
|
|
152
172
|
*/
|
|
153
173
|
private _interpolate;
|
|
154
|
-
/**
|
|
174
|
+
/**
|
|
175
|
+
* Dispatch wrapper around `_shift` — reads target indices from
|
|
176
|
+
* `history[length - 2].selected`. The `amount` and `unit` args
|
|
177
|
+
* stay parametric on the public dispatch signature.
|
|
178
|
+
*/
|
|
179
|
+
private _shiftFromSelection;
|
|
155
180
|
/**
|
|
156
181
|
* Shifts the selected indexes by specified amount of units. Elements are reinserted according to their datetime.
|
|
157
182
|
* @param index The index of the elements to shift
|
|
@@ -167,7 +192,22 @@ export declare class ObservationRecord {
|
|
|
167
192
|
* 3. Cumulative fill counts before each segment give each worker's output startTarget, ensuring no overlap.
|
|
168
193
|
* 4. Each worker copies its segment to the output buffer and inserts its gap fills inline.
|
|
169
194
|
*/
|
|
195
|
+
/**
|
|
196
|
+
* @param range Optional `[startTs, endTs]` window in epoch
|
|
197
|
+
* milliseconds. Both bounds inclusive; snapped to the nearest
|
|
198
|
+
* enclosed point via binary search. Datetime-addressed (not
|
|
199
|
+
* index-addressed) so the same call survives data growth and is
|
|
200
|
+
* portable across datasets for QC script replay.
|
|
201
|
+
*/
|
|
170
202
|
private _fillGaps;
|
|
203
|
+
/**
|
|
204
|
+
* Dispatch wrapper around `_deleteDataPoints` — reads target
|
|
205
|
+
* indices from `history[length - 2].selected`. Internal callers
|
|
206
|
+
* (`_shift`, `_assignDatetimesBulk`'s delete + add chain) keep
|
|
207
|
+
* using `_deleteDataPoints` directly with locally-computed
|
|
208
|
+
* indices; only the external dispatch path goes through here.
|
|
209
|
+
*/
|
|
210
|
+
private _deleteDataPointsFromSelection;
|
|
171
211
|
/**
|
|
172
212
|
Deletes data points from a large array using worker threads.
|
|
173
213
|
1. The main thread divides the original array into equal parts to distribute work among workers.
|
|
@@ -177,6 +217,16 @@ export declare class ObservationRecord {
|
|
|
177
217
|
* @param deleteIndices
|
|
178
218
|
*/
|
|
179
219
|
private _deleteDataPoints;
|
|
220
|
+
/**
|
|
221
|
+
* Dispatch wrapper around `_driftCorrection` — reads target
|
|
222
|
+
* indices from `history[length - 2].selected`, partitions them
|
|
223
|
+
* into consecutive groups, and applies the same `value` drift to
|
|
224
|
+
* each group as one logged operation. The internal
|
|
225
|
+
* `_driftCorrection` retains its per-range `[start, end, value]`
|
|
226
|
+
* signature so future callers that need distinct per-range values
|
|
227
|
+
* can still use it directly.
|
|
228
|
+
*/
|
|
229
|
+
private _driftCorrectionFromSelection;
|
|
180
230
|
/**
|
|
181
231
|
*
|
|
182
232
|
* @param start The start index
|
|
@@ -240,8 +290,29 @@ export declare class ObservationRecord {
|
|
|
240
290
|
*/
|
|
241
291
|
private _datetimeRange;
|
|
242
292
|
/**
|
|
243
|
-
*
|
|
244
|
-
*
|
|
293
|
+
* SELECTION filter handler — also acts as the cleanup site for the
|
|
294
|
+
* SELECTION-vs-preceding-filter interaction. `dispatchFilter` always
|
|
295
|
+
* pushes (never replaces) a SELECTION when the previous entry is a
|
|
296
|
+
* non-SELECTION filter; this method then decides what to keep based
|
|
297
|
+
* on what the SELECTION's indices look like relative to the filter:
|
|
298
|
+
*
|
|
299
|
+
* | incoming SELECTION | preceding non-SEL filter | result |
|
|
300
|
+
* | -------------------------- | -------------------------- | ------------------------------------- |
|
|
301
|
+
* | empty | had non-empty `selected` | pop both — user cleared the filter |
|
|
302
|
+
* | empty | had empty `selected` | pop SELECTION — no-op echo on a |
|
|
303
|
+
* | | | zero-result filter, keep filter |
|
|
304
|
+
* | empty | none / non-filter prev | pop SELECTION (clear) |
|
|
305
|
+
* | non-empty matches prev | (any filter) | pop SELECTION — Plotly relayout echo |
|
|
306
|
+
* | | | of the filter's `selected` |
|
|
307
|
+
* | non-empty differs from prev| (any filter) | splice prev — user override takes |
|
|
308
|
+
* | | | ownership; SELECTION stands alone |
|
|
309
|
+
* | non-empty (other cases) | n/a | keep as-is (already pushed) |
|
|
310
|
+
*
|
|
311
|
+
* The "Plotly echo" case exists because consumers commonly chain
|
|
312
|
+
* `dispatchFilter(SOMETHING)` with `dispatchSelection(result)` for
|
|
313
|
+
* visual highlighting; Plotly's debounced relayout listener then
|
|
314
|
+
* fires a SELECTION carrying the same indices. Without this dedup
|
|
315
|
+
* the script would grow a phantom SELECTION after every real filter.
|
|
245
316
|
*/
|
|
246
317
|
private _selection;
|
|
247
318
|
/**
|
|
@@ -264,7 +335,12 @@ export declare class ObservationRecord {
|
|
|
264
335
|
* 3. Main thread collects all pairs and dedups via Set — identical return shape to the original implementation.
|
|
265
336
|
* @param value The time value
|
|
266
337
|
* @param unit The time unit (TimeUnit)
|
|
267
|
-
* @param range If specified,
|
|
338
|
+
* @param range If specified, gap detection is restricted to this
|
|
339
|
+
* `[startTs, endTs]` window in epoch milliseconds. Both bounds
|
|
340
|
+
* are inclusive and snapped to the nearest enclosed point via
|
|
341
|
+
* binary search. Datetime-addressed (not index-addressed) so the
|
|
342
|
+
* same call survives data growth and is portable across datasets
|
|
343
|
+
* for QC script replay.
|
|
268
344
|
*/
|
|
269
345
|
private _findGaps;
|
|
270
346
|
/**
|
|
@@ -275,7 +351,12 @@ export declare class ObservationRecord {
|
|
|
275
351
|
*
|
|
276
352
|
* Matches the Python reference implementation in `edit_service.py::persistence` — every member of a qualifying run is selected (including the run's first index).
|
|
277
353
|
* @param times The minimum run length to qualify
|
|
278
|
-
* @param range If specified,
|
|
354
|
+
* @param range If specified, persistence detection is restricted
|
|
355
|
+
* to this `[startTs, endTs]` window in epoch milliseconds. Both
|
|
356
|
+
* bounds are inclusive and snapped to the nearest enclosed point
|
|
357
|
+
* via binary search on `dataX`. Datetime-addressed (not index-
|
|
358
|
+
* addressed) so the same call survives data growth and is
|
|
359
|
+
* portable across datasets for QC script replay.
|
|
279
360
|
*/
|
|
280
361
|
private _persistence;
|
|
281
362
|
}
|