@vuu-ui/vuu-data-remote 0.8.53 → 0.8.55

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/cjs/index.js CHANGED
@@ -25,7 +25,6 @@ exports.toDataSourceConfig = dataSource.toDataSourceConfig;
25
25
  exports.createSchemaFromTableMetadata = messageUtils.createSchemaFromTableMetadata;
26
26
  exports.getFirstAndLastRows = messageUtils.getFirstAndLastRows;
27
27
  exports.groupRowsByViewport = messageUtils.groupRowsByViewport;
28
- exports.isVuuMenuRpcRequest = messageUtils.isVuuMenuRpcRequest;
29
28
  exports.isVuuRpcRequest = messageUtils.isVuuRpcRequest;
30
29
  exports.stripRequestId = messageUtils.stripRequestId;
31
30
  exports.VuuDataSource = vuuDataSource.VuuDataSource;
package/cjs/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -5,8 +5,8 @@ var ie=(r,e,t)=>{if(!e.has(r))throw TypeError("Cannot "+t)};var m=(r,e,t)=>(ie(r
5
5
  keys: \${this.toDebugString()}
6
6
  \`),Error(\`KeySet, no key found for rowIndex \${e}\`);return t}toDebugString(){return\`\${this.keys.size} keys
7
7
  \${Array.from(this.keys.entries()).sort(([e],[t])=>e-t).map(([e,t])=>\`\${e}=>\${t}\`).join(",")}]
8
- \`}};var{SELECTED:Ft}=B,E={False:0,True:1,First:2,Last:4};var ot=(r,e)=>e>=r[0]&&e<=r[1],it=E.True+E.First+E.Last,at=E.True+E.First,ut=E.True+E.Last,H=(r,e)=>{for(let t of r)if(typeof t=="number"){if(t===e)return it}else if(ot(t,e))return e===t[0]?at:e===t[1]?ut:E.True;return E.False};var he=r=>{if(r.every(t=>typeof t=="number"))return r;let e=[];for(let t of r)if(typeof t=="number")e.push(t);else for(let n=t[0];n<=t[1];n++)e.push(n);return e};var fe=r=>r.type==="VIEW_PORT_MENU_RESP"&&r.action!==null&&O(r.action.table),O=r=>r!==null&&typeof r=="object"&&"table"in r&&"module"in r?r.table.startsWith("session"):!1;var lt=["VIEW_PORT_MENUS_SELECT_RPC","VIEW_PORT_MENU_TABLE_RPC","VIEW_PORT_MENU_ROW_RPC","VIEW_PORT_MENU_CELL_RPC","VP_EDIT_CELL_RPC","VP_EDIT_ROW_RPC","VP_EDIT_ADD_ROW_RPC","VP_EDIT_DELETE_CELL_RPC","VP_EDIT_DELETE_ROW_RPC","VP_EDIT_SUBMIT_FORM_RPC"],me=r=>lt.includes(r.type),Ce=r=>r.type==="VIEW_PORT_RPC_CALL",A=({requestId:r,...e})=>[r,e],Re=r=>{let e=r.at(0);if(e.updateType==="SIZE"){if(r.length===1)return r;e=r.at(1)}let t=r.at(-1);return[e,t]},Se=r=>{let e={};for(let t of r)(e[t.viewPortId]||(e[t.viewPortId]=[])).push(t);return e},z=({columns:r,dataTypes:e,key:t,table:n})=>({table:n,columns:r.map((s,o)=>({name:s,serverDataType:e[o]})),key:t});var Te="CHANGE_VP_SUCCESS";var be="CLOSE_TREE_NODE",we="CLOSE_TREE_SUCCESS";var Ee="CREATE_VP",Ve="DISABLE_VP",ve="DISABLE_VP_SUCCESS";var Me="ENABLE_VP",ye="ENABLE_VP_SUCCESS";var K="GET_VP_VISUAL_LINKS",_e="GET_VIEW_PORT_MENUS";var De="HB",Ie="HB_RESP",Pe="LOGIN",Le="OPEN_TREE_NODE",ke="OPEN_TREE_SUCCESS";var xe="REMOVE_VP";var Oe="SET_SELECTION_SUCCESS";var We=r=>{switch(r){case"TypeAheadRpcHandler":return"TYPEAHEAD";default:return"SIMUL"}};var Ne=[],C=b("array-backed-moving-window");function ct(r,e){if(!e||e.data.length!==r.data.length||e.sel!==r.sel)return!1;for(let t=0;t<e.data.length;t++)if(e.data[t]!==r.data[t])return!1;return!0}var h,W=class{constructor({from:e,to:t},{from:n,to:s},o){ae(this,h,void 0);this.setRowCount=e=>{var t;if((t=C.info)==null||t.call(C,\`setRowCount \${e}\`),e<this.internalData.length&&(this.internalData.length=e),e<this.rowCount){this.rowsWithinRange=0;let n=Math.min(e,this.clientRange.to);for(let s=this.clientRange.from;s<n;s++){let o=s-m(this,h).from;this.internalData[o]!==void 0&&(this.rowsWithinRange+=1)}}this.rowCount=e};this.bufferBreakout=(e,t)=>{let n=this.bufferSize*.25;return m(this,h).to-t<n?!0:m(this,h).from>0&&e-m(this,h).from<n};this.bufferSize=o,this.clientRange=new I(e,t),ue(this,h,new I(n,s)),this.internalData=new Array(o),this.rowsWithinRange=0,this.rowCount=0}get range(){return m(this,h)}get hasAllRowsWithinRange(){return this.rowsWithinRange===this.clientRange.to-this.clientRange.from||this.rowCount>0&&this.clientRange.from+this.rowsWithinRange===this.rowCount}outOfRange(e,t){let{from:n,to:s}=this.range;if(t<n||e>=s)return!0}setAtIndex(e){let{rowIndex:t}=e,n=t-m(this,h).from;if(ct(e,this.internalData[n]))return!1;let s=this.isWithinClientRange(t);return(s||this.isWithinRange(t))&&(!this.internalData[n]&&s&&(this.rowsWithinRange+=1),this.internalData[n]=e),s}getAtIndex(e){return m(this,h).isWithin(e)&&this.internalData[e-m(this,h).from]!=null?this.internalData[e-m(this,h).from]:void 0}isWithinRange(e){return m(this,h).isWithin(e)}isWithinClientRange(e){return this.clientRange.isWithin(e)}setClientRange(e,t){var p;(p=C.debug)==null||p.call(C,\`setClientRange \${e} - \${t}\`);let n=this.clientRange.from,s=Math.min(this.clientRange.to,this.rowCount);if(e===n&&t===s)return[!1,Ne];let o=this.clientRange.copy();this.clientRange.from=e,this.clientRange.to=t,this.rowsWithinRange=0;for(let a=e;a<t;a++){let c=a-m(this,h).from;this.internalData[c]&&(this.rowsWithinRange+=1)}let i=Ne,u=m(this,h).from;if(this.hasAllRowsWithinRange)if(t>o.to){let a=Math.max(e,o.to);i=this.internalData.slice(a-u,t-u)}else{let a=Math.min(o.from,t);i=this.internalData.slice(e-u,a-u)}return[this.bufferBreakout(e,t),i]}setRange(e,t){var n,s;if(e!==m(this,h).from||t!==m(this,h).to){(n=C.debug)==null||n.call(C,\`setRange \${e} - \${t}\`);let[o,i]=m(this,h).overlap(e,t),u=new Array(t-e);this.rowsWithinRange=0;for(let l=o;l<i;l++){let p=this.getAtIndex(l);if(p){let a=l-e;u[a]=p,this.isWithinClientRange(l)&&(this.rowsWithinRange+=1)}}this.internalData=u,m(this,h).from=e,m(this,h).to=t}else(s=C.debug)==null||s.call(C,\`setRange \${e} - \${t} IGNORED because not changed\`)}get data(){return this.internalData}getData(){var u;let{from:e,to:t}=m(this,h),{from:n,to:s}=this.clientRange,o=Math.max(0,n-e),i=Math.min(t-e,t,s-e,(u=this.rowCount)!=null?u:t);return this.internalData.slice(o,i)}clear(){var e;(e=C.debug)==null||e.call(C,"clear"),this.internalData.length=0,this.rowsWithinRange=0,this.setRowCount(0)}getCurrentDataRange(){let e=this.internalData,t=e.length,[n]=this.internalData,s=this.internalData[t-1];if(n&&s)return[n.rowIndex,s.rowIndex];for(let o=0;o<t;o++)if(e[o]!==void 0){n=e[o];break}for(let o=t-1;o>=0;o--)if(e[o]!==void 0){s=e[o];break}return n&&s?[n.rowIndex,s.rowIndex]:[-1,-1]}};h=new WeakMap;var{debug:f,debugEnabled:N,error:pt,info:d,infoEnabled:dt,warn:M}=b("viewport"),gt=({rowKey:r,updateType:e})=>e==="U"&&!r.startsWith("$root"),U=[void 0,void 0],ht={count:0,mode:void 0,size:0,ts:0},q=class{constructor({aggregations:e,bufferSize:t=50,columns:n,filter:s,groupBy:o=[],table:i,range:u,sort:l,title:p,viewport:a,visualLink:c},g){this.batchMode=!0;this.hasUpdates=!1;this.pendingUpdates=[];this.pendingOperations=new Map;this.pendingRangeRequests=[];this.rowCountChanged=!1;this.selectedRows=[];this.useBatchMode=!0;this.lastUpdateStatus=ht;this.updateThrottleTimer=void 0;this.rangeMonitor=new k("ViewPort");this.disabled=!1;this.isTree=!1;this.status="";this.suspended=!1;this.suspendTimer=null;this.setLastSizeOnlyUpdateSize=e=>{this.lastUpdateStatus.size=e};this.setLastUpdate=e=>{let{ts:t,mode:n}=this.lastUpdateStatus,s=0;if(n===e){let o=Date.now();this.lastUpdateStatus.count+=1,this.lastUpdateStatus.ts=o,s=t===0?0:o-t}else this.lastUpdateStatus.count=1,this.lastUpdateStatus.ts=0,s=0;return this.lastUpdateStatus.mode=e,s};this.rangeRequestAlreadyPending=e=>{let{bufferSize:t}=this,n=t*.25,{from:s}=e;for(let{from:o,to:i}of this.pendingRangeRequests)if(s>=o&&s<i){if(e.to+n<=i)return!0;s=i}return!1};this.sendThrottledSizeMessage=()=>{this.updateThrottleTimer=void 0,this.lastUpdateStatus.count=3,this.postMessageToClient({clientViewportId:this.clientViewportId,mode:"size-only",size:this.lastUpdateStatus.size,type:"viewport-update"})};this.shouldThrottleMessage=e=>{let t=this.setLastUpdate(e);return e==="size-only"&&t>0&&t<500&&this.lastUpdateStatus.count>3};this.throttleMessage=e=>this.shouldThrottleMessage(e)?(d==null||d("throttling updates setTimeout to 2000"),this.updateThrottleTimer===void 0&&(this.updateThrottleTimer=setTimeout(this.sendThrottledSizeMessage,2e3)),!0):(this.updateThrottleTimer!==void 0&&(clearTimeout(this.updateThrottleTimer),this.updateThrottleTimer=void 0),!1);this.getNewRowCount=()=>{if(this.rowCountChanged&&this.dataWindow)return this.rowCountChanged=!1,this.dataWindow.rowCount};this.aggregations=e,this.bufferSize=t,this.clientRange=u,this.clientViewportId=a,this.columns=n,this.filter=s,this.groupBy=o,this.keys=new x(u),this.pendingLinkedParent=c,this.table=i,this.sort=l,this.title=p,dt&&(d==null||d(\`constructor #\${a} \${i.table} bufferSize=\${t}\`)),this.dataWindow=new W(this.clientRange,u,this.bufferSize),this.postMessageToClient=g}get hasUpdatesToProcess(){return this.suspended?!1:this.rowCountChanged||this.hasUpdates}get size(){var e;return(e=this.dataWindow.rowCount)!=null?e:0}subscribe(){let{filter:e}=this.filter;return this.status=this.status==="subscribed"?"resubscribing":"subscribing",{type:Ee,table:this.table,range:G(this.clientRange,this.bufferSize),aggregations:this.aggregations,columns:this.columns,sort:this.sort,groupBy:this.groupBy,filterSpec:{filter:e}}}handleSubscribed({viewPortId:e,aggregations:t,columns:n,filterSpec:s,range:o,sort:i,groupBy:u,table:l},p){this.serverViewportId=e,this.status="subscribed",this.aggregations=t,this.columns=n,this.groupBy=u,this.isTree=u&&u.length>0,this.dataWindow.setRange(o.from,o.to);let a=l===p.table.table?p:{...p,table:{...p.table,session:l}};return{aggregations:t,type:"subscribed",clientViewportId:this.clientViewportId,columns:n,filter:s,groupBy:u,range:o,sort:i,tableSchema:a}}awaitOperation(e,t){this.pendingOperations.set(e,t)}completeOperation(e,...t){var u;let{clientViewportId:n,pendingOperations:s}=this,o=s.get(e);if(!o){pt(\`no matching operation found to complete for requestId \${e}\`);return}let{type:i}=o;if(d==null||d(\`completeOperation \${i}\`),s.delete(e),i==="CHANGE_VP_RANGE"){let[l,p]=t;(u=this.dataWindow)==null||u.setRange(l,p);for(let a=this.pendingRangeRequests.length-1;a>=0;a--){let c=this.pendingRangeRequests[a];if(c.requestId===e){c.acked=!0;break}else M==null||M("range requests sent faster than they are being ACKed")}}else if(i==="config"){let{aggregations:l,columns:p,filter:a,groupBy:c,sort:g}=o.data;return this.aggregations=l,this.columns=p,this.filter=a,this.groupBy=c,this.sort=g,c.length>0?this.isTree=!0:this.isTree&&(this.isTree=!1),f==null||f(\`config change confirmed, isTree : \${this.isTree}\`),{clientViewportId:n,type:i,config:o.data}}else{if(i==="groupBy")return this.isTree=o.data.length>0,this.groupBy=o.data,f==null||f(\`groupBy change confirmed, isTree : \${this.isTree}\`),{clientViewportId:n,type:i,groupBy:o.data};if(i==="columns")return this.columns=o.data,{clientViewportId:n,type:i,columns:o.data};if(i==="filter")return this.filter=o.data,{clientViewportId:n,type:i,filter:o.data};if(i==="aggregate")return this.aggregations=o.data,{clientViewportId:n,type:"aggregate",aggregations:this.aggregations};if(i==="sort")return this.sort=o.data,{clientViewportId:n,type:i,sort:this.sort};if(i!=="selection"){if(i==="disable")return this.disabled=!0,{type:"disabled",clientViewportId:n};if(i==="enable")return this.disabled=!1,{type:"enabled",clientViewportId:n};if(i==="CREATE_VISUAL_LINK"){let[l,p,a]=t;return this.linkedParent={colName:l,parentViewportId:p,parentColName:a},this.pendingLinkedParent=void 0,{type:"vuu-link-created",clientViewportId:n,colName:l,parentViewportId:p,parentColName:a}}else if(i==="REMOVE_VISUAL_LINK")return this.linkedParent=void 0,{type:"vuu-link-removed",clientViewportId:n}}}}rangeRequest(e,t){N&&this.rangeMonitor.set(t);let n="CHANGE_VP_RANGE";if(this.dataWindow){let[s,o]=this.dataWindow.setClientRange(t.from,t.to),i,u=this.dataWindow.rowCount||void 0,l=s&&!this.rangeRequestAlreadyPending(t)?{type:n,viewPortId:this.serverViewportId,...G(t,this.bufferSize,u)}:null;if(l){N&&(f==null||f(\`create CHANGE_VP_RANGE: [\${l.from} - \${l.to}]\`)),this.awaitOperation(e,{type:n});let a=this.pendingRangeRequests.at(-1);if(a)if(a.acked)console.warn("Range Request before previous request is filled");else{let{from:c,to:g}=a;this.dataWindow.outOfRange(c,g)?i={clientViewportId:this.clientViewportId,type:"debounce-begin"}:M==null||M("Range Request before previous request is acked")}this.pendingRangeRequests.push({...l,requestId:e}),this.useBatchMode&&(this.batchMode=!0)}else o.length>0&&(this.batchMode=!1);this.keys.reset(this.dataWindow.clientRange);let p=this.isTree?j:J;return o.length?[l,o.map(a=>p(a,this.keys,this.selectedRows))]:i?[l,void 0,i]:[l]}else return[null]}setLinks(e){return this.links=e,[{type:"vuu-links",links:e,clientViewportId:this.clientViewportId},this.pendingLinkedParent]}setMenu(e){return{type:"vuu-menu",menu:e,clientViewportId:this.clientViewportId}}openTreeNode(e,t){return this.useBatchMode&&(this.batchMode=!0),{type:Le,vpId:this.serverViewportId,treeKey:t.key}}closeTreeNode(e,t){return this.useBatchMode&&(this.batchMode=!0),{type:be,vpId:this.serverViewportId,treeKey:t.key}}createLink(e,t,n,s){let o={type:"CREATE_VISUAL_LINK",parentVpId:n,childVpId:this.serverViewportId,parentColumnName:s,childColumnName:t};return this.awaitOperation(e,o),this.useBatchMode&&(this.batchMode=!0),o}removeLink(e){let t={type:"REMOVE_VISUAL_LINK",childVpId:this.serverViewportId};return this.awaitOperation(e,t),t}suspend(){this.suspended=!0,d==null||d("suspend")}resume(){return this.suspended=!1,N&&(f==null||f(\`resume: \${this.currentData()}\`)),[this.size,this.currentData()]}currentData(){let e=[];if(this.dataWindow){let t=this.dataWindow.getData(),{keys:n}=this,s=this.isTree?j:J;for(let o of t)o&&e.push(s(o,n,this.selectedRows))}return e}enable(e){return this.awaitOperation(e,{type:"enable"}),d==null||d(\`enable: \${this.serverViewportId}\`),{type:Me,viewPortId:this.serverViewportId}}disable(e){return this.awaitOperation(e,{type:"disable"}),d==null||d(\`disable: \${this.serverViewportId}\`),this.suspended=!1,{type:Ve,viewPortId:this.serverViewportId}}columnRequest(e,t){return this.awaitOperation(e,{type:"columns",data:t}),f==null||f(\`columnRequest: \${t}\`),this.createRequest({columns:t})}setConfig(e,t){var o;this.awaitOperation(e,{type:"config",data:t});let{filter:n,...s}=t;return this.useBatchMode&&(this.batchMode=!0),N?f==null||f(\`setConfig \${JSON.stringify(t)}\`):d==null||d("setConfig"),!this.isTree&&t.groupBy.length>0&&((o=this.dataWindow)==null||o.clear()),this.createRequest({...s,filterSpec:typeof(n==null?void 0:n.filter)=="string"?{filter:n.filter}:{filter:""}},!0)}aggregateRequest(e,t){return this.awaitOperation(e,{type:"aggregate",data:t}),d==null||d(\`aggregateRequest: \${t}\`),this.createRequest({aggregations:t})}sortRequest(e,t){return this.awaitOperation(e,{type:"sort",data:t}),d==null||d(\`sortRequest: \${JSON.stringify(t.sortDefs)}\`),this.createRequest({sort:t})}selectRequest(e,t){return this.selectedRows=t,this.awaitOperation(e,{type:"selection",data:t}),d==null||d(\`selectRequest: \${t}\`),{type:"SET_SELECTION",vpId:this.serverViewportId,selection:he(t)}}removePendingRangeRequest(e,t){for(let n=this.pendingRangeRequests.length-1;n>=0;n--){let{from:s,to:o}=this.pendingRangeRequests[n],i=!0;if(e>=s&&e<o||t>s&&t<o){i||console.warn("removePendingRangeRequest TABLE_ROWS are not for latest request"),this.pendingRangeRequests.splice(n,1);break}else i=!1}}updateRows(e){var s,o,i;let[t,n]=Re(e);if(t&&n&&this.removePendingRangeRequest(t.rowIndex,n.rowIndex),e.length===1)if(t.vpSize===0&&this.disabled){f==null||f(\`ignore a SIZE=0 message on disabled viewport (\${e.length} rows)\`);return}else t.updateType==="SIZE"&&this.setLastSizeOnlyUpdateSize(t.vpSize);for(let u of e)this.isTree&&gt(u)||((u.updateType==="SIZE"||((s=this.dataWindow)==null?void 0:s.rowCount)!==u.vpSize)&&((o=this.dataWindow)==null||o.setRowCount(u.vpSize),this.rowCountChanged=!0),u.updateType==="U"&&(i=this.dataWindow)!=null&&i.setAtIndex(u)&&(this.hasUpdates=!0,this.batchMode||this.pendingUpdates.push(u)))}getClientRows(){let e,t="size-only";if(!this.hasUpdates&&!this.rowCountChanged)return U;if(this.hasUpdates){let{keys:n,selectedRows:s}=this,o=this.isTree?j:J;if(this.updateThrottleTimer&&(self.clearTimeout(this.updateThrottleTimer),this.updateThrottleTimer=void 0),this.pendingUpdates.length>0){e=[],t="update";for(let i of this.pendingUpdates)e.push(o(i,n,s));this.pendingUpdates.length=0}else{let i=this.dataWindow.getData();if(this.dataWindow.hasAllRowsWithinRange){e=[],t="batch";for(let u of i)e.push(o(u,n,s));this.batchMode=!1}}this.hasUpdates=!1}return this.throttleMessage(t)?U:[e,t]}createRequest(e,t=!1){return t?{type:"CHANGE_VP",viewPortId:this.serverViewportId,...e}:{type:"CHANGE_VP",viewPortId:this.serverViewportId,aggregations:this.aggregations,columns:this.columns,sort:this.sort,groupBy:this.groupBy,filterSpec:{filter:this.filter.filter},...e}}},J=({rowIndex:r,rowKey:e,sel:t,data:n},s,o)=>[r,s.keyFor(r),!0,!1,0,0,e,t?H(o,r):0].concat(n),j=({rowIndex:r,rowKey:e,sel:t,data:n},s,o)=>{let[i,u,,l,,p,...a]=n;return[r,s.keyFor(r),l,u,i,p,e,t?H(o,r):0].concat(a)};var Ue=1;var{debug:V,debugEnabled:Y,error:y,info:T,infoEnabled:ft,warn:Q}=b("server-proxy"),R=()=>\`\${Ue++}\`,mt={},Ct=r=>r.disabled!==!0&&r.suspended!==!0,Rt={type:"NO_ACTION"},St=(r,e,t)=>r.map(n=>n.parentVpId===e?{...n,label:t}:n);function Tt(r,e){return r.map(t=>{let{parentVpId:n}=t,s=e.get(n);if(s)return{...t,parentClientVpId:s.clientViewportId,label:s.title};throw Error("addLabelsToLinks viewport not found")})}var $=class{constructor(e,t){this.authToken="";this.user="user";this.pendingRequests=new Map;this.queuedRequests=[];this.cachedTableMetaRequests=new Map;this.cachedTableSchemas=new Map;this.connection=e,this.postMessageToClient=t,this.viewports=new Map,this.mapClientToServerViewport=new Map}async reconnect(){await this.login(this.authToken);let[e,t]=le(Array.from(this.viewports.values()),Ct);this.viewports.clear(),this.mapClientToServerViewport.clear();let n=s=>{s.forEach(o=>{let{clientViewportId:i}=o;this.viewports.set(i,o),this.sendMessageToServer(o.subscribe(),i)})};n(e),setTimeout(()=>{n(t)},2e3)}async login(e,t="user"){if(e)return this.authToken=e,this.user=t,new Promise((n,s)=>{this.sendMessageToServer({type:Pe,token:this.authToken,user:t},""),this.pendingLogin={resolve:n,reject:s}});this.authToken===""&&y("login, cannot login until auth token has been obtained")}subscribe(e){if(this.mapClientToServerViewport.has(e.viewport))y(\`spurious subscribe call \${e.viewport}\`);else{let t=this.getTableMeta(e.table),n=new q(e,this.postMessageToClient);this.viewports.set(e.viewport,n);let s=this.awaitResponseToMessage(n.subscribe(),e.viewport);Promise.all([s,t]).then(([i,u])=>{let{viewPortId:l}=i,{status:p}=n;e.viewport!==l&&(this.viewports.delete(e.viewport),this.viewports.set(l,n)),this.mapClientToServerViewport.set(e.viewport,l);let a=n.handleSubscribed(i,u);a&&(this.postMessageToClient(a),Y&&V(\`post DataSourceSubscribedMessage to client: \${JSON.stringify(a)}\`)),n.disabled&&this.disableViewport(n),this.queuedRequests.length>0&&this.processQueuedRequests(),p==="subscribing"&&!O(n.table)&&(this.sendMessageToServer({type:K,vpId:l}),this.sendMessageToServer({type:_e,vpId:l}),Array.from(this.viewports.entries()).filter(([c,{disabled:g}])=>c!==l&&!g).forEach(([c])=>{this.sendMessageToServer({type:K,vpId:c})}))})}}processQueuedRequests(){let e={};for(;this.queuedRequests.length;){let t=this.queuedRequests.pop();if(t){let{clientViewportId:n,message:s,requestId:o}=t;if(s.type==="CHANGE_VP_RANGE"){if(e.CHANGE_VP_RANGE)continue;e.CHANGE_VP_RANGE=!0;let i=this.mapClientToServerViewport.get(n);i&&this.sendMessageToServer({...s,viewPortId:i},o)}}}}unsubscribe(e){let t=this.mapClientToServerViewport.get(e);t?(T==null||T(\`Unsubscribe Message (Client to Server):
9
- \${t}\`),this.sendMessageToServer({type:xe,viewPortId:t})):y(\`failed to unsubscribe client viewport \${e}, viewport not found\`)}getViewportForClient(e,t=!0){let n=this.mapClientToServerViewport.get(e);if(n){let s=this.viewports.get(n);if(s)return s;if(t)throw Error(\`Viewport not found for client viewport \${e}\`);return null}else{if(this.viewports.has(e))return this.viewports.get(e);if(t)throw Error(\`Viewport server id not found for client viewport \${e}\`);return null}}setViewRange(e,t){let n=R(),[s,o,i]=e.rangeRequest(n,t.range);T==null||T(\`setViewRange \${t.range.from} - \${t.range.to}\`),s&&(this.sendIfReady(s,n,e.status==="subscribed")||this.queuedRequests.push({clientViewportId:t.viewport,message:s,requestId:n})),o?(T==null||T(\`setViewRange \${o.length} rows returned from cache\`),this.postMessageToClient({mode:"batch",type:"viewport-update",clientViewportId:e.clientViewportId,rows:o})):i&&this.postMessageToClient(i)}setConfig(e,t){let n=R(),s=e.setConfig(n,t.config);this.sendIfReady(s,n,e.status==="subscribed")}aggregate(e,t){let n=R(),s=e.aggregateRequest(n,t.aggregations);this.sendIfReady(s,n,e.status==="subscribed")}sort(e,t){let n=R(),s=e.sortRequest(n,t.sort);this.sendIfReady(s,n,e.status==="subscribed")}setColumns(e,t){let n=R(),{columns:s}=t,o=e.columnRequest(n,s);this.sendIfReady(o,n,e.status==="subscribed")}setTitle(e,t){e&&(e.title=t.title,this.updateTitleOnVisualLinks(e))}select(e,t){let n=R(),{selected:s}=t,o=e.selectRequest(n,s);this.sendIfReady(o,n,e.status==="subscribed")}disableViewport(e){let t=R(),n=e.disable(t);this.sendIfReady(n,t,e.status==="subscribed")}enableViewport(e){if(e.disabled){let t=R(),n=e.enable(t);this.sendIfReady(n,t,e.status==="subscribed")}}suspendViewport(e){e.suspend(),e.suspendTimer=setTimeout(()=>{T==null||T("suspendTimer expired, escalate suspend to disable"),this.disableViewport(e)},3e3)}resumeViewport(e){e.suspendTimer&&(V==null||V("clear suspend timer"),clearTimeout(e.suspendTimer),e.suspendTimer=null);let[t,n]=e.resume();V==null||V(\`resumeViewport size \${t}, \${n.length} rows sent to client\`),this.postMessageToClient({clientViewportId:e.clientViewportId,mode:"batch",rows:n,size:t,type:"viewport-update"})}openTreeNode(e,t){if(e.serverViewportId){let n=R();this.sendIfReady(e.openTreeNode(n,t),n,e.status==="subscribed")}}closeTreeNode(e,t){if(e.serverViewportId){let n=R();this.sendIfReady(e.closeTreeNode(n,t),n,e.status==="subscribed")}}createLink(e,t){let{parentClientVpId:n,parentColumnName:s,childColumnName:o}=t,i=R(),u=this.mapClientToServerViewport.get(n);if(u){let l=e.createLink(i,o,u,s);this.sendMessageToServer(l,i)}else y("ServerProxy unable to create link, viewport not found")}removeLink(e){let t=R(),n=e.removeLink(t);this.sendMessageToServer(n,t)}updateTitleOnVisualLinks(e){var s;let{serverViewportId:t,title:n}=e;for(let o of this.viewports.values())if(o!==e&&o.links&&t&&n&&(s=o.links)!=null&&s.some(i=>i.parentVpId===t)){let[i]=o.setLinks(St(o.links,t,n));this.postMessageToClient(i)}}removeViewportFromVisualLinks(e){var t;for(let n of this.viewports.values())if((t=n.links)!=null&&t.some(({parentVpId:s})=>s===e)){let[s]=n.setLinks(n.links.filter(({parentVpId:o})=>o!==e));this.postMessageToClient(s)}}menuRpcCall(e){let t=this.getViewportForClient(e.vpId,!1);if(t!=null&&t.serverViewportId){let[n,s]=A(e);this.sendMessageToServer({...s,vpId:t.serverViewportId},n)}}viewportRpcCall(e){let t=this.getViewportForClient(e.vpId,!1);if(t!=null&&t.serverViewportId){let[n,s]=A(e);this.sendMessageToServer({...s,vpId:t.serverViewportId,namedParams:{}},n)}}rpcCall(e){let[t,n]=A(e),s=We(n.service);this.sendMessageToServer(n,t,{module:s})}handleMessageFromClient(e){var t;if(ge(e))if(e.type==="disable"){let n=this.getViewportForClient(e.viewport,!1);return n!==null?this.disableViewport(n):void 0}else{let n=this.getViewportForClient(e.viewport);switch(e.type){case"setViewRange":return this.setViewRange(n,e);case"config":return this.setConfig(n,e);case"aggregate":return this.aggregate(n,e);case"sort":return this.sort(n,e);case"select":return this.select(n,e);case"suspend":return this.suspendViewport(n);case"resume":return this.resumeViewport(n);case"enable":return this.enableViewport(n);case"openTreeNode":return this.openTreeNode(n,e);case"closeTreeNode":return this.closeTreeNode(n,e);case"createLink":return this.createLink(n,e);case"removeLink":return this.removeLink(n);case"setColumns":return this.setColumns(n,e);case"setTitle":return this.setTitle(n,e);default:}}else{if(Ce(e))return this.viewportRpcCall(e);if(me(e))return this.menuRpcCall(e);{let{type:n,requestId:s}=e;switch(n){case"GET_TABLE_LIST":{(t=this.tableList)!=null||(this.tableList=this.awaitResponseToMessage({type:n},s)),this.tableList.then(o=>{this.postMessageToClient({type:"TABLE_LIST_RESP",tables:o.tables,requestId:s})});return}case"GET_TABLE_META":{this.getTableMeta(e.table,s).then(o=>{o&&this.postMessageToClient({type:"TABLE_META_RESP",tableSchema:o,requestId:s})});return}case"RPC_CALL":return this.rpcCall(e);default:}}}y(\`Vuu ServerProxy Unexpected message from client \${JSON.stringify(e)}\`)}getTableMeta(e,t=R()){if(O(e))return Promise.resolve(void 0);let n=\`\${e.module}:\${e.table}\`,s=this.cachedTableMetaRequests.get(n);return s||(s=this.awaitResponseToMessage({type:"GET_TABLE_META",table:e},t),this.cachedTableMetaRequests.set(n,s)),s==null?void 0:s.then(o=>this.cacheTableMeta(o))}awaitResponseToMessage(e,t=R()){return new Promise((n,s)=>{this.sendMessageToServer(e,t),this.pendingRequests.set(t,{reject:s,resolve:n})})}sendIfReady(e,t,n=!0){return n&&this.sendMessageToServer(e,t),n}sendMessageToServer(e,t=\`\${Ue++}\`,n=mt){let{module:s="CORE"}=n;this.authToken&&this.connection.send({requestId:t,sessionId:this.sessionId,token:this.authToken,user:this.user,module:s,body:e})}handleMessageFromServer(e){var u;let{body:t,requestId:n,sessionId:s}=e,o=this.pendingRequests.get(n);if(o){let{resolve:a}=o;this.pendingRequests.delete(n),a(t);return}let{viewports:i}=this;switch(t.type){case De:this.sendMessageToServer({type:Ie,ts:+new Date},"NA");break;case"LOGIN_SUCCESS":if(s)this.sessionId=s,(u=this.pendingLogin)==null||u.resolve(s),this.pendingLogin=void 0;else throw Error("LOGIN_SUCCESS did not provide sessionId");break;case"REMOVE_VP_SUCCESS":{let a=i.get(t.viewPortId);a&&(this.mapClientToServerViewport.delete(a.clientViewportId),i.delete(t.viewPortId),this.removeViewportFromVisualLinks(t.viewPortId))}break;case Oe:{let a=this.viewports.get(t.vpId);a&&a.completeOperation(n)}break;case Te:case ve:if(i.has(t.viewPortId)){let a=this.viewports.get(t.viewPortId);if(a){let c=a.completeOperation(n);c!==void 0&&(this.postMessageToClient(c),Y&&V(\`postMessageToClient \${JSON.stringify(c)}\`))}}break;case ye:{let a=this.viewports.get(t.viewPortId);if(a){let c=a.completeOperation(n);if(c){this.postMessageToClient(c);let[g,S]=a.resume();this.postMessageToClient({clientViewportId:a.clientViewportId,mode:"batch",rows:S,size:g,type:"viewport-update"})}}}break;case"TABLE_ROW":{let a=Se(t.rows);for(let[c,g]of Object.entries(a)){let S=i.get(c);S?S.updateRows(g):Q==null||Q(\`TABLE_ROW message received for non registered viewport \${c}\`)}this.processUpdates()}break;case"CHANGE_VP_RANGE_SUCCESS":{let a=this.viewports.get(t.viewPortId);if(a){let{from:c,to:g}=t;a.completeOperation(n,c,g)}}break;case ke:case we:break;case"CREATE_VISUAL_LINK_SUCCESS":{let a=this.viewports.get(t.childVpId),c=this.viewports.get(t.parentVpId);if(a&&c){let{childColumnName:g,parentColumnName:S}=t,D=a.completeOperation(n,g,c.clientViewportId,S);D&&this.postMessageToClient(D)}}break;case"REMOVE_VISUAL_LINK_SUCCESS":{let a=this.viewports.get(t.childVpId);if(a){let c=a.completeOperation(n);c&&this.postMessageToClient(c)}}break;case"VP_VISUAL_LINKS_RESP":{let a=this.getActiveLinks(t.links),c=this.viewports.get(t.vpId);if(a.length&&c){let g=Tt(a,this.viewports),[S,D]=c.setLinks(g);if(this.postMessageToClient(S),D){let{link:se,parentClientVpId:ze}=D,re=R(),oe=this.mapClientToServerViewport.get(ze);if(oe){let Ke=c.createLink(re,se.fromColumn,oe,se.toColumn);this.sendMessageToServer(Ke,re)}}}}break;case"VIEW_PORT_MENUS_RESP":if(t.menu.name){let a=this.viewports.get(t.vpId);if(a){let c=a.setMenu(t.menu);this.postMessageToClient(c)}}break;case"VP_EDIT_RPC_RESPONSE":this.postMessageToClient({action:t.action,requestId:n,rpcName:t.rpcName,type:"VP_EDIT_RPC_RESPONSE"});break;case"VP_EDIT_RPC_REJECT":this.viewports.get(t.vpId)&&this.postMessageToClient({requestId:n,type:"VP_EDIT_RPC_REJECT",error:t.error});break;case"VIEW_PORT_MENU_REJ":{console.log("send menu error back to client");let{error:a,rpcName:c,vpId:g}=t,S=this.viewports.get(g);S&&this.postMessageToClient({clientViewportId:S.clientViewportId,error:a,rpcName:c,type:"VIEW_PORT_MENU_REJ",requestId:n});break}case"VIEW_PORT_MENU_RESP":if(fe(t)){let{action:a,rpcName:c}=t;this.awaitResponseToMessage({type:"GET_TABLE_META",table:a.table}).then(g=>{let S=z(g);this.postMessageToClient({rpcName:c,type:"VIEW_PORT_MENU_RESP",action:{...a,tableSchema:S},tableAlreadyOpen:this.isTableOpen(a.table),requestId:n})})}else{let{action:a}=t;this.postMessageToClient({type:"VIEW_PORT_MENU_RESP",action:a||Rt,tableAlreadyOpen:a!==null&&this.isTableOpen(a.table),requestId:n})}break;case"RPC_RESP":{let{method:a,result:c}=t;this.postMessageToClient({type:"RPC_RESP",method:a,result:c,requestId:n})}break;case"VIEW_PORT_RPC_REPONSE":{let{method:a,action:c}=t;this.postMessageToClient({type:"VIEW_PORT_RPC_RESPONSE",rpcName:a,action:c,requestId:n})}break;case"ERROR":y(t.msg);break;default:ft&&T(\`handleMessageFromServer \${t.type}.\`)}}cacheTableMeta(e){let{module:t,table:n}=e.table,s=\`\${t}:\${n}\`,o=this.cachedTableSchemas.get(s);return o||(o=z(e),this.cachedTableSchemas.set(s,o)),o}isTableOpen(e){if(e){let t=e.table;for(let n of this.viewports.values())if(!n.suspended&&n.table.table===t)return!0}}getActiveLinks(e){return e.filter(t=>{let n=this.viewports.get(t.parentVpId);return n&&!n.suspended})}processUpdates(){this.viewports.forEach(e=>{var t;if(e.hasUpdatesToProcess){let n=e.getClientRows();if(n!==U){let[s,o]=n,i=e.getNewRowCount();(i!==void 0||s&&s.length>0)&&(Y&&V(\`postMessageToClient #\${e.clientViewportId} viewport-update \${o}, \${(t=s==null?void 0:s.length)!=null?t:"no"} rows, size \${i}\`),o&&this.postMessageToClient({clientViewportId:e.clientViewportId,mode:o,rows:s,size:i,type:"viewport-update"}))}}})}};var{debug:un,debugEnabled:ln,error:qe,info:w,infoEnabled:bt,warn:_}=b("websocket-connection"),Be={},Z=Symbol("setWebsocket"),F=Symbol("connectionCallback");async function Ge(r,e,t,n=10,s=5){return Be[r]={status:"connecting",connect:{allowed:s,remaining:s},reconnect:{allowed:n,remaining:n}},He(r,e,t)}async function X(r){throw Error("connection broken")}async function He(r,e,t,n){let{status:s,connect:o,reconnect:i}=Be[r],u=s==="connecting"?o:i;try{t({type:"connection-status",status:"connecting"});let l=typeof n<"u",p=await Et(r,e);console.info("%c\u26A1 %cconnected","font-size: 24px;color: green;font-weight: bold;","color:green; font-size: 14px;"),n!==void 0&&n[Z](p);let a=n!=null?n:new ee(p,r,e,t),c=l?"reconnected":"connection-open-awaiting-session";return t({type:"connection-status",status:c}),a.status=c,u.remaining=u.allowed,a}catch{let p=--u.remaining>0;if(t({type:"connection-status",status:"disconnected",reason:"failed to connect",retry:p}),p)return wt(r,e,t,n,2e3);throw t({type:"connection-status",status:"failed",reason:"unable to connect",retry:p}),Error("Failed to establish connection")}}var wt=(r,e,t,n,s)=>new Promise(o=>{setTimeout(()=>{o(He(r,e,t,n))},s)}),Et=(r,e)=>new Promise((t,n)=>{bt&&e!==void 0&&w(\`WebSocket Protocol \${e==null?void 0:e.toString()}\`);let s=new WebSocket(r,e);s.onopen=()=>t(s),s.onerror=o=>n(o)}),$e=()=>{_==null||_("Connection cannot be closed, socket not yet opened")},Fe=r=>{_==null||_(\`Message cannot be sent, socket closed \${r.body.type}\`)},Vt=r=>{try{return JSON.parse(r)}catch{throw Error(\`Error parsing JSON response from server \${r}\`)}},ee=class{constructor(e,t,n,s){this.close=$e;this.requiresLogin=!0;this.send=Fe;this.status="ready";this.messagesCount=0;this.connectionMetricsInterval=null;this.handleWebsocketMessage=e=>{let t=Vt(e.data);this.messagesCount+=1,this[F](t)};this.url=t,this.protocol=n,this[F]=s,this[Z](e)}reconnect(){X(this)}[(F,Z)](e){let t=this[F];e.onmessage=o=>{this.status="connected",e.onmessage=this.handleWebsocketMessage,this.handleWebsocketMessage(o)},this.connectionMetricsInterval=setInterval(()=>{t({type:"connection-metrics",messagesLength:this.messagesCount}),this.messagesCount=0},2e3),e.onerror=()=>{qe("\u26A1 connection error"),t({type:"connection-status",status:"disconnected",reason:"error"}),this.connectionMetricsInterval&&(clearInterval(this.connectionMetricsInterval),this.connectionMetricsInterval=null),this.status==="connection-open-awaiting-session"?qe("Websocket connection lost before Vuu session established, check websocket configuration"):this.status!=="closed"&&(X(this),this.send=s)},e.onclose=()=>{w==null||w("\u26A1 connection close"),t({type:"connection-status",status:"disconnected",reason:"close"}),this.connectionMetricsInterval&&(clearInterval(this.connectionMetricsInterval),this.connectionMetricsInterval=null),this.status!=="closed"&&(X(this),this.send=s)};let n=o=>{e.send(JSON.stringify(o))},s=o=>{w==null||w(\`TODO queue message until websocket reconnected \${o.body.type}\`)};this.send=n,this.close=()=>{this.status="closed",e.close(),this.close=$e,this.send=Fe,w==null||w("close websocket")}}};var v,{info:te,infoEnabled:ne}=b("worker");async function vt(r,e,t,n,s,o,i){let u=await Ge(r,e,l=>{de(l)?postMessage({type:"connection-metrics",messages:l}):pe(l)?(s(l),l.status==="reconnected"&&v.reconnect()):v.handleMessageFromServer(l)},o,i);v=new $(u,l=>Mt(l)),u.requiresLogin&&await v.login(t,n)}function Mt(r){postMessage(r)}var yt=async({data:r})=>{switch(r.type){case"connect":try{await vt(r.url,r.protocol,r.token,r.username,postMessage,r.retryLimitDisconnect,r.retryLimitStartup),postMessage({type:"connected"})}catch(e){postMessage({type:"connection-failed",reason:String(e)})}break;case"subscribe":ne&&te(\`client subscribe: \${JSON.stringify(r)}\`),v.subscribe(r);break;case"unsubscribe":ne&&te(\`client unsubscribe: \${JSON.stringify(r)}\`),v.unsubscribe(r.viewport);break;default:ne&&te(\`client message: \${JSON.stringify(r)}\`),v.handleMessageFromClient(r)}};self.addEventListener("message",yt);postMessage({type:"ready"});
8
+ \`}};var ot=["VIEW_PORT_MENUS_SELECT_RPC","VIEW_PORT_MENU_TABLE_RPC","VIEW_PORT_MENU_ROW_RPC","VIEW_PORT_MENU_CELL_RPC","VP_EDIT_CELL_RPC","VP_EDIT_ROW_RPC","VP_EDIT_ADD_ROW_RPC","VP_EDIT_DELETE_CELL_RPC","VP_EDIT_DELETE_ROW_RPC","VP_EDIT_SUBMIT_FORM_RPC"],he=r=>ot.includes(r.type);var{SELECTED:Bt}=B,E={False:0,True:1,First:2,Last:4};var it=(r,e)=>e>=r[0]&&e<=r[1],at=E.True+E.First+E.Last,ut=E.True+E.First,lt=E.True+E.Last,H=(r,e)=>{for(let t of r)if(typeof t=="number"){if(t===e)return at}else if(it(t,e))return e===t[0]?ut:e===t[1]?lt:E.True;return E.False};var fe=r=>{if(r.every(t=>typeof t=="number"))return r;let e=[];for(let t of r)if(typeof t=="number")e.push(t);else for(let n=t[0];n<=t[1];n++)e.push(n);return e};var me=r=>r.type==="VIEW_PORT_MENU_RESP"&&r.action!==null&&O(r.action.table),O=r=>r!==null&&typeof r=="object"&&"table"in r&&"module"in r?r.table.startsWith("session"):!1;var Ce=r=>r.type==="VIEW_PORT_RPC_CALL",A=({requestId:r,...e})=>[r,e],Re=r=>{let e=r.at(0);if(e.updateType==="SIZE"){if(r.length===1)return r;e=r.at(1)}let t=r.at(-1);return[e,t]},Se=r=>{let e={};for(let t of r)(e[t.viewPortId]||(e[t.viewPortId]=[])).push(t);return e},z=({columns:r,dataTypes:e,key:t,table:n})=>({table:n,columns:r.map((s,o)=>({name:s,serverDataType:e[o]})),key:t});var Te="CHANGE_VP_SUCCESS";var be="CLOSE_TREE_NODE",we="CLOSE_TREE_SUCCESS";var Ee="CREATE_VP",Ve="DISABLE_VP",ve="DISABLE_VP_SUCCESS";var Me="ENABLE_VP",ye="ENABLE_VP_SUCCESS";var K="GET_VP_VISUAL_LINKS",_e="GET_VIEW_PORT_MENUS";var De="HB",Ie="HB_RESP",Pe="LOGIN",Le="OPEN_TREE_NODE",ke="OPEN_TREE_SUCCESS";var xe="REMOVE_VP";var Oe="SET_SELECTION_SUCCESS";var We=r=>{switch(r){case"TypeAheadRpcHandler":return"TYPEAHEAD";default:return"SIMUL"}};var Ne=[],C=b("array-backed-moving-window");function ct(r,e){if(!e||e.data.length!==r.data.length||e.sel!==r.sel)return!1;for(let t=0;t<e.data.length;t++)if(e.data[t]!==r.data[t])return!1;return!0}var h,W=class{constructor({from:e,to:t},{from:n,to:s},o){ae(this,h,void 0);this.setRowCount=e=>{var t;if((t=C.info)==null||t.call(C,\`setRowCount \${e}\`),e<this.internalData.length&&(this.internalData.length=e),e<this.rowCount){this.rowsWithinRange=0;let n=Math.min(e,this.clientRange.to);for(let s=this.clientRange.from;s<n;s++){let o=s-m(this,h).from;this.internalData[o]!==void 0&&(this.rowsWithinRange+=1)}}this.rowCount=e};this.bufferBreakout=(e,t)=>{let n=this.bufferSize*.25;return m(this,h).to-t<n?!0:m(this,h).from>0&&e-m(this,h).from<n};this.bufferSize=o,this.clientRange=new I(e,t),ue(this,h,new I(n,s)),this.internalData=new Array(o),this.rowsWithinRange=0,this.rowCount=0}get range(){return m(this,h)}get hasAllRowsWithinRange(){return this.rowsWithinRange===this.clientRange.to-this.clientRange.from||this.rowCount>0&&this.clientRange.from+this.rowsWithinRange===this.rowCount}outOfRange(e,t){let{from:n,to:s}=this.range;if(t<n||e>=s)return!0}setAtIndex(e){let{rowIndex:t}=e,n=t-m(this,h).from;if(ct(e,this.internalData[n]))return!1;let s=this.isWithinClientRange(t);return(s||this.isWithinRange(t))&&(!this.internalData[n]&&s&&(this.rowsWithinRange+=1),this.internalData[n]=e),s}getAtIndex(e){return m(this,h).isWithin(e)&&this.internalData[e-m(this,h).from]!=null?this.internalData[e-m(this,h).from]:void 0}isWithinRange(e){return m(this,h).isWithin(e)}isWithinClientRange(e){return this.clientRange.isWithin(e)}setClientRange(e,t){var p;(p=C.debug)==null||p.call(C,\`setClientRange \${e} - \${t}\`);let n=this.clientRange.from,s=Math.min(this.clientRange.to,this.rowCount);if(e===n&&t===s)return[!1,Ne];let o=this.clientRange.copy();this.clientRange.from=e,this.clientRange.to=t,this.rowsWithinRange=0;for(let a=e;a<t;a++){let c=a-m(this,h).from;this.internalData[c]&&(this.rowsWithinRange+=1)}let i=Ne,u=m(this,h).from;if(this.hasAllRowsWithinRange)if(t>o.to){let a=Math.max(e,o.to);i=this.internalData.slice(a-u,t-u)}else{let a=Math.min(o.from,t);i=this.internalData.slice(e-u,a-u)}return[this.bufferBreakout(e,t),i]}setRange(e,t){var n,s;if(e!==m(this,h).from||t!==m(this,h).to){(n=C.debug)==null||n.call(C,\`setRange \${e} - \${t}\`);let[o,i]=m(this,h).overlap(e,t),u=new Array(t-e);this.rowsWithinRange=0;for(let l=o;l<i;l++){let p=this.getAtIndex(l);if(p){let a=l-e;u[a]=p,this.isWithinClientRange(l)&&(this.rowsWithinRange+=1)}}this.internalData=u,m(this,h).from=e,m(this,h).to=t}else(s=C.debug)==null||s.call(C,\`setRange \${e} - \${t} IGNORED because not changed\`)}get data(){return this.internalData}getData(){var u;let{from:e,to:t}=m(this,h),{from:n,to:s}=this.clientRange,o=Math.max(0,n-e),i=Math.min(t-e,t,s-e,(u=this.rowCount)!=null?u:t);return this.internalData.slice(o,i)}clear(){var e;(e=C.debug)==null||e.call(C,"clear"),this.internalData.length=0,this.rowsWithinRange=0,this.setRowCount(0)}getCurrentDataRange(){let e=this.internalData,t=e.length,[n]=this.internalData,s=this.internalData[t-1];if(n&&s)return[n.rowIndex,s.rowIndex];for(let o=0;o<t;o++)if(e[o]!==void 0){n=e[o];break}for(let o=t-1;o>=0;o--)if(e[o]!==void 0){s=e[o];break}return n&&s?[n.rowIndex,s.rowIndex]:[-1,-1]}};h=new WeakMap;var{debug:f,debugEnabled:N,error:pt,info:d,infoEnabled:dt,warn:M}=b("viewport"),gt=({rowKey:r,updateType:e})=>e==="U"&&!r.startsWith("$root"),U=[void 0,void 0],ht={count:0,mode:void 0,size:0,ts:0},q=class{constructor({aggregations:e,bufferSize:t=50,columns:n,filter:s,groupBy:o=[],table:i,range:u,sort:l,title:p,viewport:a,visualLink:c},g){this.batchMode=!0;this.hasUpdates=!1;this.pendingUpdates=[];this.pendingOperations=new Map;this.pendingRangeRequests=[];this.rowCountChanged=!1;this.selectedRows=[];this.useBatchMode=!0;this.lastUpdateStatus=ht;this.updateThrottleTimer=void 0;this.rangeMonitor=new k("ViewPort");this.disabled=!1;this.isTree=!1;this.status="";this.suspended=!1;this.suspendTimer=null;this.setLastSizeOnlyUpdateSize=e=>{this.lastUpdateStatus.size=e};this.setLastUpdate=e=>{let{ts:t,mode:n}=this.lastUpdateStatus,s=0;if(n===e){let o=Date.now();this.lastUpdateStatus.count+=1,this.lastUpdateStatus.ts=o,s=t===0?0:o-t}else this.lastUpdateStatus.count=1,this.lastUpdateStatus.ts=0,s=0;return this.lastUpdateStatus.mode=e,s};this.rangeRequestAlreadyPending=e=>{let{bufferSize:t}=this,n=t*.25,{from:s}=e;for(let{from:o,to:i}of this.pendingRangeRequests)if(s>=o&&s<i){if(e.to+n<=i)return!0;s=i}return!1};this.sendThrottledSizeMessage=()=>{this.updateThrottleTimer=void 0,this.lastUpdateStatus.count=3,this.postMessageToClient({clientViewportId:this.clientViewportId,mode:"size-only",size:this.lastUpdateStatus.size,type:"viewport-update"})};this.shouldThrottleMessage=e=>{let t=this.setLastUpdate(e);return e==="size-only"&&t>0&&t<500&&this.lastUpdateStatus.count>3};this.throttleMessage=e=>this.shouldThrottleMessage(e)?(d==null||d("throttling updates setTimeout to 2000"),this.updateThrottleTimer===void 0&&(this.updateThrottleTimer=setTimeout(this.sendThrottledSizeMessage,2e3)),!0):(this.updateThrottleTimer!==void 0&&(clearTimeout(this.updateThrottleTimer),this.updateThrottleTimer=void 0),!1);this.getNewRowCount=()=>{if(this.rowCountChanged&&this.dataWindow)return this.rowCountChanged=!1,this.dataWindow.rowCount};this.aggregations=e,this.bufferSize=t,this.clientRange=u,this.clientViewportId=a,this.columns=n,this.filter=s,this.groupBy=o,this.keys=new x(u),this.pendingLinkedParent=c,this.table=i,this.sort=l,this.title=p,dt&&(d==null||d(\`constructor #\${a} \${i.table} bufferSize=\${t}\`)),this.dataWindow=new W(this.clientRange,u,this.bufferSize),this.postMessageToClient=g}get hasUpdatesToProcess(){return this.suspended?!1:this.rowCountChanged||this.hasUpdates}get size(){var e;return(e=this.dataWindow.rowCount)!=null?e:0}subscribe(){let{filter:e}=this.filter;return this.status=this.status==="subscribed"?"resubscribing":"subscribing",{type:Ee,table:this.table,range:G(this.clientRange,this.bufferSize),aggregations:this.aggregations,columns:this.columns,sort:this.sort,groupBy:this.groupBy,filterSpec:{filter:e}}}handleSubscribed({viewPortId:e,aggregations:t,columns:n,filterSpec:s,range:o,sort:i,groupBy:u,table:l},p){this.serverViewportId=e,this.status="subscribed",this.aggregations=t,this.columns=n,this.groupBy=u,this.isTree=u&&u.length>0,this.dataWindow.setRange(o.from,o.to);let a=l===p.table.table?p:{...p,table:{...p.table,session:l}};return{aggregations:t,type:"subscribed",clientViewportId:this.clientViewportId,columns:n,filter:s,groupBy:u,range:o,sort:i,tableSchema:a}}awaitOperation(e,t){this.pendingOperations.set(e,t)}completeOperation(e,...t){var u;let{clientViewportId:n,pendingOperations:s}=this,o=s.get(e);if(!o){pt(\`no matching operation found to complete for requestId \${e}\`);return}let{type:i}=o;if(d==null||d(\`completeOperation \${i}\`),s.delete(e),i==="CHANGE_VP_RANGE"){let[l,p]=t;(u=this.dataWindow)==null||u.setRange(l,p);for(let a=this.pendingRangeRequests.length-1;a>=0;a--){let c=this.pendingRangeRequests[a];if(c.requestId===e){c.acked=!0;break}else M==null||M("range requests sent faster than they are being ACKed")}}else if(i==="config"){let{aggregations:l,columns:p,filter:a,groupBy:c,sort:g}=o.data;return this.aggregations=l,this.columns=p,this.filter=a,this.groupBy=c,this.sort=g,c.length>0?this.isTree=!0:this.isTree&&(this.isTree=!1),f==null||f(\`config change confirmed, isTree : \${this.isTree}\`),{clientViewportId:n,type:i,config:o.data}}else{if(i==="groupBy")return this.isTree=o.data.length>0,this.groupBy=o.data,f==null||f(\`groupBy change confirmed, isTree : \${this.isTree}\`),{clientViewportId:n,type:i,groupBy:o.data};if(i==="columns")return this.columns=o.data,{clientViewportId:n,type:i,columns:o.data};if(i==="filter")return this.filter=o.data,{clientViewportId:n,type:i,filter:o.data};if(i==="aggregate")return this.aggregations=o.data,{clientViewportId:n,type:"aggregate",aggregations:this.aggregations};if(i==="sort")return this.sort=o.data,{clientViewportId:n,type:i,sort:this.sort};if(i!=="selection"){if(i==="disable")return this.disabled=!0,{type:"disabled",clientViewportId:n};if(i==="enable")return this.disabled=!1,{type:"enabled",clientViewportId:n};if(i==="CREATE_VISUAL_LINK"){let[l,p,a]=t;return this.linkedParent={colName:l,parentViewportId:p,parentColName:a},this.pendingLinkedParent=void 0,{type:"vuu-link-created",clientViewportId:n,colName:l,parentViewportId:p,parentColName:a}}else if(i==="REMOVE_VISUAL_LINK")return this.linkedParent=void 0,{type:"vuu-link-removed",clientViewportId:n}}}}rangeRequest(e,t){N&&this.rangeMonitor.set(t);let n="CHANGE_VP_RANGE";if(this.dataWindow){let[s,o]=this.dataWindow.setClientRange(t.from,t.to),i,u=this.dataWindow.rowCount||void 0,l=s&&!this.rangeRequestAlreadyPending(t)?{type:n,viewPortId:this.serverViewportId,...G(t,this.bufferSize,u)}:null;if(l){N&&(f==null||f(\`create CHANGE_VP_RANGE: [\${l.from} - \${l.to}]\`)),this.awaitOperation(e,{type:n});let a=this.pendingRangeRequests.at(-1);if(a)if(a.acked)console.warn("Range Request before previous request is filled");else{let{from:c,to:g}=a;this.dataWindow.outOfRange(c,g)?i={clientViewportId:this.clientViewportId,type:"debounce-begin"}:M==null||M("Range Request before previous request is acked")}this.pendingRangeRequests.push({...l,requestId:e}),this.useBatchMode&&(this.batchMode=!0)}else o.length>0&&(this.batchMode=!1);this.keys.reset(this.dataWindow.clientRange);let p=this.isTree?j:J;return o.length?[l,o.map(a=>p(a,this.keys,this.selectedRows))]:i?[l,void 0,i]:[l]}else return[null]}setLinks(e){return this.links=e,[{type:"vuu-links",links:e,clientViewportId:this.clientViewportId},this.pendingLinkedParent]}setMenu(e){return{type:"vuu-menu",menu:e,clientViewportId:this.clientViewportId}}openTreeNode(e,t){return this.useBatchMode&&(this.batchMode=!0),{type:Le,vpId:this.serverViewportId,treeKey:t.key}}closeTreeNode(e,t){return this.useBatchMode&&(this.batchMode=!0),{type:be,vpId:this.serverViewportId,treeKey:t.key}}createLink(e,t,n,s){let o={type:"CREATE_VISUAL_LINK",parentVpId:n,childVpId:this.serverViewportId,parentColumnName:s,childColumnName:t};return this.awaitOperation(e,o),this.useBatchMode&&(this.batchMode=!0),o}removeLink(e){let t={type:"REMOVE_VISUAL_LINK",childVpId:this.serverViewportId};return this.awaitOperation(e,t),t}suspend(){this.suspended=!0,d==null||d("suspend")}resume(){return this.suspended=!1,N&&(f==null||f(\`resume: \${this.currentData()}\`)),[this.size,this.currentData()]}currentData(){let e=[];if(this.dataWindow){let t=this.dataWindow.getData(),{keys:n}=this,s=this.isTree?j:J;for(let o of t)o&&e.push(s(o,n,this.selectedRows))}return e}enable(e){return this.awaitOperation(e,{type:"enable"}),d==null||d(\`enable: \${this.serverViewportId}\`),{type:Me,viewPortId:this.serverViewportId}}disable(e){return this.awaitOperation(e,{type:"disable"}),d==null||d(\`disable: \${this.serverViewportId}\`),this.suspended=!1,{type:Ve,viewPortId:this.serverViewportId}}columnRequest(e,t){return this.awaitOperation(e,{type:"columns",data:t}),f==null||f(\`columnRequest: \${t}\`),this.createRequest({columns:t})}setConfig(e,t){var o;this.awaitOperation(e,{type:"config",data:t});let{filter:n,...s}=t;return this.useBatchMode&&(this.batchMode=!0),N?f==null||f(\`setConfig \${JSON.stringify(t)}\`):d==null||d("setConfig"),!this.isTree&&t.groupBy.length>0&&((o=this.dataWindow)==null||o.clear()),this.createRequest({...s,filterSpec:typeof(n==null?void 0:n.filter)=="string"?{filter:n.filter}:{filter:""}},!0)}aggregateRequest(e,t){return this.awaitOperation(e,{type:"aggregate",data:t}),d==null||d(\`aggregateRequest: \${t}\`),this.createRequest({aggregations:t})}sortRequest(e,t){return this.awaitOperation(e,{type:"sort",data:t}),d==null||d(\`sortRequest: \${JSON.stringify(t.sortDefs)}\`),this.createRequest({sort:t})}selectRequest(e,t){return this.selectedRows=t,this.awaitOperation(e,{type:"selection",data:t}),d==null||d(\`selectRequest: \${t}\`),{type:"SET_SELECTION",vpId:this.serverViewportId,selection:fe(t)}}removePendingRangeRequest(e,t){for(let n=this.pendingRangeRequests.length-1;n>=0;n--){let{from:s,to:o}=this.pendingRangeRequests[n],i=!0;if(e>=s&&e<o||t>s&&t<o){i||console.warn("removePendingRangeRequest TABLE_ROWS are not for latest request"),this.pendingRangeRequests.splice(n,1);break}else i=!1}}updateRows(e){var s,o,i;let[t,n]=Re(e);if(t&&n&&this.removePendingRangeRequest(t.rowIndex,n.rowIndex),e.length===1)if(t.vpSize===0&&this.disabled){f==null||f(\`ignore a SIZE=0 message on disabled viewport (\${e.length} rows)\`);return}else t.updateType==="SIZE"&&this.setLastSizeOnlyUpdateSize(t.vpSize);for(let u of e)this.isTree&&gt(u)||((u.updateType==="SIZE"||((s=this.dataWindow)==null?void 0:s.rowCount)!==u.vpSize)&&((o=this.dataWindow)==null||o.setRowCount(u.vpSize),this.rowCountChanged=!0),u.updateType==="U"&&(i=this.dataWindow)!=null&&i.setAtIndex(u)&&(this.hasUpdates=!0,this.batchMode||this.pendingUpdates.push(u)))}getClientRows(){let e,t="size-only";if(!this.hasUpdates&&!this.rowCountChanged)return U;if(this.hasUpdates){let{keys:n,selectedRows:s}=this,o=this.isTree?j:J;if(this.updateThrottleTimer&&(self.clearTimeout(this.updateThrottleTimer),this.updateThrottleTimer=void 0),this.pendingUpdates.length>0){e=[],t="update";for(let i of this.pendingUpdates)e.push(o(i,n,s));this.pendingUpdates.length=0}else{let i=this.dataWindow.getData();if(this.dataWindow.hasAllRowsWithinRange){e=[],t="batch";for(let u of i)e.push(o(u,n,s));this.batchMode=!1}}this.hasUpdates=!1}return this.throttleMessage(t)?U:[e,t]}createRequest(e,t=!1){return t?{type:"CHANGE_VP",viewPortId:this.serverViewportId,...e}:{type:"CHANGE_VP",viewPortId:this.serverViewportId,aggregations:this.aggregations,columns:this.columns,sort:this.sort,groupBy:this.groupBy,filterSpec:{filter:this.filter.filter},...e}}},J=({rowIndex:r,rowKey:e,sel:t,data:n},s,o)=>[r,s.keyFor(r),!0,!1,0,0,e,t?H(o,r):0].concat(n),j=({rowIndex:r,rowKey:e,sel:t,data:n},s,o)=>{let[i,u,,l,,p,...a]=n;return[r,s.keyFor(r),l,u,i,p,e,t?H(o,r):0].concat(a)};var Ue=1;var{debug:V,debugEnabled:Y,error:y,info:T,infoEnabled:ft,warn:Q}=b("server-proxy"),R=()=>\`\${Ue++}\`,mt={},Ct=r=>r.disabled!==!0&&r.suspended!==!0,Rt={type:"NO_ACTION"},St=(r,e,t)=>r.map(n=>n.parentVpId===e?{...n,label:t}:n);function Tt(r,e){return r.map(t=>{let{parentVpId:n}=t,s=e.get(n);if(s)return{...t,parentClientVpId:s.clientViewportId,label:s.title};throw Error("addLabelsToLinks viewport not found")})}var $=class{constructor(e,t){this.authToken="";this.user="user";this.pendingRequests=new Map;this.queuedRequests=[];this.cachedTableMetaRequests=new Map;this.cachedTableSchemas=new Map;this.connection=e,this.postMessageToClient=t,this.viewports=new Map,this.mapClientToServerViewport=new Map}async reconnect(){await this.login(this.authToken);let[e,t]=le(Array.from(this.viewports.values()),Ct);this.viewports.clear(),this.mapClientToServerViewport.clear();let n=s=>{s.forEach(o=>{let{clientViewportId:i}=o;this.viewports.set(i,o),this.sendMessageToServer(o.subscribe(),i)})};n(e),setTimeout(()=>{n(t)},2e3)}async login(e,t="user"){if(e)return this.authToken=e,this.user=t,new Promise((n,s)=>{this.sendMessageToServer({type:Pe,token:this.authToken,user:t},""),this.pendingLogin={resolve:n,reject:s}});this.authToken===""&&y("login, cannot login until auth token has been obtained")}subscribe(e){if(this.mapClientToServerViewport.has(e.viewport))y(\`spurious subscribe call \${e.viewport}\`);else{let t=this.getTableMeta(e.table),n=new q(e,this.postMessageToClient);this.viewports.set(e.viewport,n);let s=this.awaitResponseToMessage(n.subscribe(),e.viewport);Promise.all([s,t]).then(([i,u])=>{let{viewPortId:l}=i,{status:p}=n;e.viewport!==l&&(this.viewports.delete(e.viewport),this.viewports.set(l,n)),this.mapClientToServerViewport.set(e.viewport,l);let a=n.handleSubscribed(i,u);a&&(this.postMessageToClient(a),Y&&V(\`post DataSourceSubscribedMessage to client: \${JSON.stringify(a)}\`)),n.disabled&&this.disableViewport(n),this.queuedRequests.length>0&&this.processQueuedRequests(),p==="subscribing"&&!O(n.table)&&(this.sendMessageToServer({type:K,vpId:l}),this.sendMessageToServer({type:_e,vpId:l}),Array.from(this.viewports.entries()).filter(([c,{disabled:g}])=>c!==l&&!g).forEach(([c])=>{this.sendMessageToServer({type:K,vpId:c})}))})}}processQueuedRequests(){let e={};for(;this.queuedRequests.length;){let t=this.queuedRequests.pop();if(t){let{clientViewportId:n,message:s,requestId:o}=t;if(s.type==="CHANGE_VP_RANGE"){if(e.CHANGE_VP_RANGE)continue;e.CHANGE_VP_RANGE=!0;let i=this.mapClientToServerViewport.get(n);i&&this.sendMessageToServer({...s,viewPortId:i},o)}}}}unsubscribe(e){let t=this.mapClientToServerViewport.get(e);t?(T==null||T(\`Unsubscribe Message (Client to Server):
9
+ \${t}\`),this.sendMessageToServer({type:xe,viewPortId:t})):y(\`failed to unsubscribe client viewport \${e}, viewport not found\`)}getViewportForClient(e,t=!0){let n=this.mapClientToServerViewport.get(e);if(n){let s=this.viewports.get(n);if(s)return s;if(t)throw Error(\`Viewport not found for client viewport \${e}\`);return null}else{if(this.viewports.has(e))return this.viewports.get(e);if(t)throw Error(\`Viewport server id not found for client viewport \${e}\`);return null}}setViewRange(e,t){let n=R(),[s,o,i]=e.rangeRequest(n,t.range);T==null||T(\`setViewRange \${t.range.from} - \${t.range.to}\`),s&&(this.sendIfReady(s,n,e.status==="subscribed")||this.queuedRequests.push({clientViewportId:t.viewport,message:s,requestId:n})),o?(T==null||T(\`setViewRange \${o.length} rows returned from cache\`),this.postMessageToClient({mode:"batch",type:"viewport-update",clientViewportId:e.clientViewportId,rows:o})):i&&this.postMessageToClient(i)}setConfig(e,t){let n=R(),s=e.setConfig(n,t.config);this.sendIfReady(s,n,e.status==="subscribed")}aggregate(e,t){let n=R(),s=e.aggregateRequest(n,t.aggregations);this.sendIfReady(s,n,e.status==="subscribed")}sort(e,t){let n=R(),s=e.sortRequest(n,t.sort);this.sendIfReady(s,n,e.status==="subscribed")}setColumns(e,t){let n=R(),{columns:s}=t,o=e.columnRequest(n,s);this.sendIfReady(o,n,e.status==="subscribed")}setTitle(e,t){e&&(e.title=t.title,this.updateTitleOnVisualLinks(e))}select(e,t){let n=R(),{selected:s}=t,o=e.selectRequest(n,s);this.sendIfReady(o,n,e.status==="subscribed")}disableViewport(e){let t=R(),n=e.disable(t);this.sendIfReady(n,t,e.status==="subscribed")}enableViewport(e){if(e.disabled){let t=R(),n=e.enable(t);this.sendIfReady(n,t,e.status==="subscribed")}}suspendViewport(e){e.suspend(),e.suspendTimer=setTimeout(()=>{T==null||T("suspendTimer expired, escalate suspend to disable"),this.disableViewport(e)},3e3)}resumeViewport(e){e.suspendTimer&&(V==null||V("clear suspend timer"),clearTimeout(e.suspendTimer),e.suspendTimer=null);let[t,n]=e.resume();V==null||V(\`resumeViewport size \${t}, \${n.length} rows sent to client\`),this.postMessageToClient({clientViewportId:e.clientViewportId,mode:"batch",rows:n,size:t,type:"viewport-update"})}openTreeNode(e,t){if(e.serverViewportId){let n=R();this.sendIfReady(e.openTreeNode(n,t),n,e.status==="subscribed")}}closeTreeNode(e,t){if(e.serverViewportId){let n=R();this.sendIfReady(e.closeTreeNode(n,t),n,e.status==="subscribed")}}createLink(e,t){let{parentClientVpId:n,parentColumnName:s,childColumnName:o}=t,i=R(),u=this.mapClientToServerViewport.get(n);if(u){let l=e.createLink(i,o,u,s);this.sendMessageToServer(l,i)}else y("ServerProxy unable to create link, viewport not found")}removeLink(e){let t=R(),n=e.removeLink(t);this.sendMessageToServer(n,t)}updateTitleOnVisualLinks(e){var s;let{serverViewportId:t,title:n}=e;for(let o of this.viewports.values())if(o!==e&&o.links&&t&&n&&(s=o.links)!=null&&s.some(i=>i.parentVpId===t)){let[i]=o.setLinks(St(o.links,t,n));this.postMessageToClient(i)}}removeViewportFromVisualLinks(e){var t;for(let n of this.viewports.values())if((t=n.links)!=null&&t.some(({parentVpId:s})=>s===e)){let[s]=n.setLinks(n.links.filter(({parentVpId:o})=>o!==e));this.postMessageToClient(s)}}menuRpcCall(e){let t=this.getViewportForClient(e.vpId,!1);if(t!=null&&t.serverViewportId){let[n,s]=A(e);this.sendMessageToServer({...s,vpId:t.serverViewportId},n)}}viewportRpcCall(e){let t=this.getViewportForClient(e.vpId,!1);if(t!=null&&t.serverViewportId){let[n,s]=A(e);this.sendMessageToServer({...s,vpId:t.serverViewportId,namedParams:{}},n)}}rpcCall(e){let[t,n]=A(e),s=We(n.service);this.sendMessageToServer(n,t,{module:s})}handleMessageFromClient(e){var t;if(ge(e))if(e.type==="disable"){let n=this.getViewportForClient(e.viewport,!1);return n!==null?this.disableViewport(n):void 0}else{let n=this.getViewportForClient(e.viewport);switch(e.type){case"setViewRange":return this.setViewRange(n,e);case"config":return this.setConfig(n,e);case"aggregate":return this.aggregate(n,e);case"sort":return this.sort(n,e);case"select":return this.select(n,e);case"suspend":return this.suspendViewport(n);case"resume":return this.resumeViewport(n);case"enable":return this.enableViewport(n);case"openTreeNode":return this.openTreeNode(n,e);case"closeTreeNode":return this.closeTreeNode(n,e);case"createLink":return this.createLink(n,e);case"removeLink":return this.removeLink(n);case"setColumns":return this.setColumns(n,e);case"setTitle":return this.setTitle(n,e);default:}}else{if(Ce(e))return this.viewportRpcCall(e);if(he(e))return this.menuRpcCall(e);{let{type:n,requestId:s}=e;switch(n){case"GET_TABLE_LIST":{(t=this.tableList)!=null||(this.tableList=this.awaitResponseToMessage({type:n},s)),this.tableList.then(o=>{this.postMessageToClient({type:"TABLE_LIST_RESP",tables:o.tables,requestId:s})});return}case"GET_TABLE_META":{this.getTableMeta(e.table,s).then(o=>{o&&this.postMessageToClient({type:"TABLE_META_RESP",tableSchema:o,requestId:s})});return}case"RPC_CALL":return this.rpcCall(e);default:}}}y(\`Vuu ServerProxy Unexpected message from client \${JSON.stringify(e)}\`)}getTableMeta(e,t=R()){if(O(e))return Promise.resolve(void 0);let n=\`\${e.module}:\${e.table}\`,s=this.cachedTableMetaRequests.get(n);return s||(s=this.awaitResponseToMessage({type:"GET_TABLE_META",table:e},t),this.cachedTableMetaRequests.set(n,s)),s==null?void 0:s.then(o=>this.cacheTableMeta(o))}awaitResponseToMessage(e,t=R()){return new Promise((n,s)=>{this.sendMessageToServer(e,t),this.pendingRequests.set(t,{reject:s,resolve:n})})}sendIfReady(e,t,n=!0){return n&&this.sendMessageToServer(e,t),n}sendMessageToServer(e,t=\`\${Ue++}\`,n=mt){let{module:s="CORE"}=n;this.authToken&&this.connection.send({requestId:t,sessionId:this.sessionId,token:this.authToken,user:this.user,module:s,body:e})}handleMessageFromServer(e){var u;let{body:t,requestId:n,sessionId:s}=e,o=this.pendingRequests.get(n);if(o){let{resolve:a}=o;this.pendingRequests.delete(n),a(t);return}let{viewports:i}=this;switch(t.type){case De:this.sendMessageToServer({type:Ie,ts:+new Date},"NA");break;case"LOGIN_SUCCESS":if(s)this.sessionId=s,(u=this.pendingLogin)==null||u.resolve(s),this.pendingLogin=void 0;else throw Error("LOGIN_SUCCESS did not provide sessionId");break;case"REMOVE_VP_SUCCESS":{let a=i.get(t.viewPortId);a&&(this.mapClientToServerViewport.delete(a.clientViewportId),i.delete(t.viewPortId),this.removeViewportFromVisualLinks(t.viewPortId))}break;case Oe:{let a=this.viewports.get(t.vpId);a&&a.completeOperation(n)}break;case Te:case ve:if(i.has(t.viewPortId)){let a=this.viewports.get(t.viewPortId);if(a){let c=a.completeOperation(n);c!==void 0&&(this.postMessageToClient(c),Y&&V(\`postMessageToClient \${JSON.stringify(c)}\`))}}break;case ye:{let a=this.viewports.get(t.viewPortId);if(a){let c=a.completeOperation(n);if(c){this.postMessageToClient(c);let[g,S]=a.resume();this.postMessageToClient({clientViewportId:a.clientViewportId,mode:"batch",rows:S,size:g,type:"viewport-update"})}}}break;case"TABLE_ROW":{let a=Se(t.rows);for(let[c,g]of Object.entries(a)){let S=i.get(c);S?S.updateRows(g):Q==null||Q(\`TABLE_ROW message received for non registered viewport \${c}\`)}this.processUpdates()}break;case"CHANGE_VP_RANGE_SUCCESS":{let a=this.viewports.get(t.viewPortId);if(a){let{from:c,to:g}=t;a.completeOperation(n,c,g)}}break;case ke:case we:break;case"CREATE_VISUAL_LINK_SUCCESS":{let a=this.viewports.get(t.childVpId),c=this.viewports.get(t.parentVpId);if(a&&c){let{childColumnName:g,parentColumnName:S}=t,D=a.completeOperation(n,g,c.clientViewportId,S);D&&this.postMessageToClient(D)}}break;case"REMOVE_VISUAL_LINK_SUCCESS":{let a=this.viewports.get(t.childVpId);if(a){let c=a.completeOperation(n);c&&this.postMessageToClient(c)}}break;case"VP_VISUAL_LINKS_RESP":{let a=this.getActiveLinks(t.links),c=this.viewports.get(t.vpId);if(a.length&&c){let g=Tt(a,this.viewports),[S,D]=c.setLinks(g);if(this.postMessageToClient(S),D){let{link:se,parentClientVpId:ze}=D,re=R(),oe=this.mapClientToServerViewport.get(ze);if(oe){let Ke=c.createLink(re,se.fromColumn,oe,se.toColumn);this.sendMessageToServer(Ke,re)}}}}break;case"VIEW_PORT_MENUS_RESP":if(t.menu.name){let a=this.viewports.get(t.vpId);if(a){let c=a.setMenu(t.menu);this.postMessageToClient(c)}}break;case"VP_EDIT_RPC_RESPONSE":this.postMessageToClient({action:t.action,requestId:n,rpcName:t.rpcName,type:"VP_EDIT_RPC_RESPONSE"});break;case"VP_EDIT_RPC_REJECT":this.viewports.get(t.vpId)&&this.postMessageToClient({requestId:n,type:"VP_EDIT_RPC_REJECT",error:t.error});break;case"VIEW_PORT_MENU_REJ":{console.log("send menu error back to client");let{error:a,rpcName:c,vpId:g}=t,S=this.viewports.get(g);S&&this.postMessageToClient({clientViewportId:S.clientViewportId,error:a,rpcName:c,type:"VIEW_PORT_MENU_REJ",requestId:n});break}case"VIEW_PORT_MENU_RESP":if(me(t)){let{action:a,rpcName:c}=t;this.awaitResponseToMessage({type:"GET_TABLE_META",table:a.table}).then(g=>{let S=z(g);this.postMessageToClient({rpcName:c,type:"VIEW_PORT_MENU_RESP",action:{...a,tableSchema:S},tableAlreadyOpen:this.isTableOpen(a.table),requestId:n})})}else{let{action:a}=t;this.postMessageToClient({type:"VIEW_PORT_MENU_RESP",action:a||Rt,tableAlreadyOpen:a!==null&&this.isTableOpen(a.table),requestId:n})}break;case"RPC_RESP":{let{method:a,result:c}=t;this.postMessageToClient({type:"RPC_RESP",method:a,result:c,requestId:n})}break;case"VIEW_PORT_RPC_REPONSE":{let{method:a,action:c}=t;this.postMessageToClient({type:"VIEW_PORT_RPC_RESPONSE",rpcName:a,action:c,requestId:n})}break;case"ERROR":y(t.msg);break;default:ft&&T(\`handleMessageFromServer \${t.type}.\`)}}cacheTableMeta(e){let{module:t,table:n}=e.table,s=\`\${t}:\${n}\`,o=this.cachedTableSchemas.get(s);return o||(o=z(e),this.cachedTableSchemas.set(s,o)),o}isTableOpen(e){if(e){let t=e.table;for(let n of this.viewports.values())if(!n.suspended&&n.table.table===t)return!0}}getActiveLinks(e){return e.filter(t=>{let n=this.viewports.get(t.parentVpId);return n&&!n.suspended})}processUpdates(){this.viewports.forEach(e=>{var t;if(e.hasUpdatesToProcess){let n=e.getClientRows();if(n!==U){let[s,o]=n,i=e.getNewRowCount();(i!==void 0||s&&s.length>0)&&(Y&&V(\`postMessageToClient #\${e.clientViewportId} viewport-update \${o}, \${(t=s==null?void 0:s.length)!=null?t:"no"} rows, size \${i}\`),o&&this.postMessageToClient({clientViewportId:e.clientViewportId,mode:o,rows:s,size:i,type:"viewport-update"}))}}})}};var{debug:ln,debugEnabled:cn,error:qe,info:w,infoEnabled:bt,warn:_}=b("websocket-connection"),Be={},Z=Symbol("setWebsocket"),F=Symbol("connectionCallback");async function Ge(r,e,t,n=10,s=5){return Be[r]={status:"connecting",connect:{allowed:s,remaining:s},reconnect:{allowed:n,remaining:n}},He(r,e,t)}async function X(r){throw Error("connection broken")}async function He(r,e,t,n){let{status:s,connect:o,reconnect:i}=Be[r],u=s==="connecting"?o:i;try{t({type:"connection-status",status:"connecting"});let l=typeof n<"u",p=await Et(r,e);console.info("%c\u26A1 %cconnected","font-size: 24px;color: green;font-weight: bold;","color:green; font-size: 14px;"),n!==void 0&&n[Z](p);let a=n!=null?n:new ee(p,r,e,t),c=l?"reconnected":"connection-open-awaiting-session";return t({type:"connection-status",status:c}),a.status=c,u.remaining=u.allowed,a}catch{let p=--u.remaining>0;if(t({type:"connection-status",status:"disconnected",reason:"failed to connect",retry:p}),p)return wt(r,e,t,n,2e3);throw t({type:"connection-status",status:"failed",reason:"unable to connect",retry:p}),Error("Failed to establish connection")}}var wt=(r,e,t,n,s)=>new Promise(o=>{setTimeout(()=>{o(He(r,e,t,n))},s)}),Et=(r,e)=>new Promise((t,n)=>{bt&&e!==void 0&&w(\`WebSocket Protocol \${e==null?void 0:e.toString()}\`);let s=new WebSocket(r,e);s.onopen=()=>t(s),s.onerror=o=>n(o)}),$e=()=>{_==null||_("Connection cannot be closed, socket not yet opened")},Fe=r=>{_==null||_(\`Message cannot be sent, socket closed \${r.body.type}\`)},Vt=r=>{try{return JSON.parse(r)}catch{throw Error(\`Error parsing JSON response from server \${r}\`)}},ee=class{constructor(e,t,n,s){this.close=$e;this.requiresLogin=!0;this.send=Fe;this.status="ready";this.messagesCount=0;this.connectionMetricsInterval=null;this.handleWebsocketMessage=e=>{let t=Vt(e.data);this.messagesCount+=1,this[F](t)};this.url=t,this.protocol=n,this[F]=s,this[Z](e)}reconnect(){X(this)}[(F,Z)](e){let t=this[F];e.onmessage=o=>{this.status="connected",e.onmessage=this.handleWebsocketMessage,this.handleWebsocketMessage(o)},this.connectionMetricsInterval=setInterval(()=>{t({type:"connection-metrics",messagesLength:this.messagesCount}),this.messagesCount=0},2e3),e.onerror=()=>{qe("\u26A1 connection error"),t({type:"connection-status",status:"disconnected",reason:"error"}),this.connectionMetricsInterval&&(clearInterval(this.connectionMetricsInterval),this.connectionMetricsInterval=null),this.status==="connection-open-awaiting-session"?qe("Websocket connection lost before Vuu session established, check websocket configuration"):this.status!=="closed"&&(X(this),this.send=s)},e.onclose=()=>{w==null||w("\u26A1 connection close"),t({type:"connection-status",status:"disconnected",reason:"close"}),this.connectionMetricsInterval&&(clearInterval(this.connectionMetricsInterval),this.connectionMetricsInterval=null),this.status!=="closed"&&(X(this),this.send=s)};let n=o=>{e.send(JSON.stringify(o))},s=o=>{w==null||w(\`TODO queue message until websocket reconnected \${o.body.type}\`)};this.send=n,this.close=()=>{this.status="closed",e.close(),this.close=$e,this.send=Fe,w==null||w("close websocket")}}};var v,{info:te,infoEnabled:ne}=b("worker");async function vt(r,e,t,n,s,o,i){let u=await Ge(r,e,l=>{de(l)?postMessage({type:"connection-metrics",messages:l}):pe(l)?(s(l),l.status==="reconnected"&&v.reconnect()):v.handleMessageFromServer(l)},o,i);v=new $(u,l=>Mt(l)),u.requiresLogin&&await v.login(t,n)}function Mt(r){postMessage(r)}var yt=async({data:r})=>{switch(r.type){case"connect":try{await vt(r.url,r.protocol,r.token,r.username,postMessage,r.retryLimitDisconnect,r.retryLimitStartup),postMessage({type:"connected"})}catch(e){postMessage({type:"connection-failed",reason:String(e)})}break;case"subscribe":ne&&te(\`client subscribe: \${JSON.stringify(r)}\`),v.subscribe(r);break;case"unsubscribe":ne&&te(\`client unsubscribe: \${JSON.stringify(r)}\`),v.unsubscribe(r.viewport);break;default:ne&&te(\`client message: \${JSON.stringify(r)}\`),v.handleMessageFromClient(r)}};self.addEventListener("message",yt);postMessage({type:"ready"});
10
10
 
11
11
  `;
12
12
 
@@ -1 +1 @@
1
- {"version":3,"file":"inlined-worker.js","sources":["../src/inlined-worker.js"],"sourcesContent":["export const workerSourceCode = `\nvar ie=(r,e,t)=>{if(!e.has(r))throw TypeError(\"Cannot \"+t)};var m=(r,e,t)=>(ie(r,e,\"read from private field\"),t?t.call(r):e.get(r)),ae=(r,e,t)=>{if(e.has(r))throw TypeError(\"Cannot add the same private member more than once\");e instanceof WeakSet?e.add(r):e.set(r,t)},ue=(r,e,t,n)=>(ie(r,e,\"write to private field\"),n?n.call(r,t):e.set(r,t),t);function le(r,e,t=[],n=[]){for(let s=0,o=r.length;s<o;s++)(e(r[s],s)?t:n).push(r[s]);return[t,n]}var Je=6,B={IDX:0,RENDER_IDX:1,IS_LEAF:2,IS_EXPANDED:3,DEPTH:4,COUNT:5,KEY:Je,SELECTED:7,count:8,PARENT_IDX:\"parent_idx\",IDX_POINTER:\"idx_pointer\",FILTER_COUNT:\"filter_count\",NEXT_FILTER_IDX:\"next_filter_idx\"};var{DEPTH:It,IS_LEAF:Pt}=B;var ce=r=>{var e,t;if(((e=globalThis.document)==null?void 0:e.cookie)!==void 0)return(t=globalThis.document.cookie.split(\"; \").find(n=>n.startsWith(\\`\\${r}=\\`)))==null?void 0:t.split(\"=\")[1]};function G({from:r,to:e},t=0,n=Number.MAX_SAFE_INTEGER){if(r===0&&e===0)return{from:r,to:e};if(t===0)return n<r?{from:0,to:0}:{from:r,to:Math.min(e,n)};if(r===0)return{from:r,to:Math.min(e+t,n)};{let s=r-t<0,o=n-(e+t)<0;return s&&o?{from:0,to:n}:s?{from:0,to:e+t}:o?{from:Math.max(0,r-t),to:n}:{from:r-t,to:e+t}}}var je=(r,{from:e,to:t})=>r>=e&&r<t;var I=class r{constructor(e,t){this.from=e,this.to=t}isWithin(e){return je(e,this)}overlap(e,t){return e>=this.to||t<this.from?[0,0]:[Math.max(e,this.from),Math.min(t,this.to)]}copy(){return new r(this.from,this.to)}};var pe=r=>r.type===\"connection-status\",de=r=>r.type===\"connection-metrics\";var ge=r=>\"viewport\"in r;var Ye=[\"error\",\"warn\",\"info\",\"debug\"],Qe=r=>typeof r==\"string\"&&Ye.includes(r),Xe=\"error\",P=()=>{},Ze=\"error\",{loggingLevel:L=Ze}=et(),b=r=>{let e=L===\"debug\",t=e||L===\"info\",n=t||L===\"warn\",s=n||L===\"error\",o=t?p=>console.info(\\`[\\${r}] \\${p}\\`):P,i=n?p=>console.warn(\\`[\\${r}] \\${p}\\`):P,u=e?p=>console.debug(\\`[\\${r}] \\${p}\\`):P;return{errorEnabled:s,error:s?p=>console.error(\\`[\\${r}] \\${p}\\`):P}};function et(){return typeof loggingSettings<\"u\"?loggingSettings:{loggingLevel:tt()}}function tt(){let r=ce(\"vuu-logging-level\");return Qe(r)?r:Xe}var{debug:nt,debugEnabled:st}=b(\"range-monitor\"),k=class{constructor(e){this.source=e;this.range={from:0,to:0};this.timestamp=0}isSet(){return this.timestamp!==0}set({from:e,to:t}){let{timestamp:n}=this;if(this.range.from=e,this.range.to=t,this.timestamp=performance.now(),n)st&&nt(\\`<\\${this.source}> [\\${e}-\\${t}], \\${(this.timestamp-n).toFixed(0)} ms elapsed\\`);else return 0}};var rt=[],x=class{constructor(e){this.keys=new Map;this.nextKeyValue=0;this.range=e,this.init(e)}next(e=rt){return e.length>0?e.shift():this.nextKeyValue++}init({from:e,to:t}){this.keys.clear(),this.nextKeyValue=0;for(let n=e;n<t;n++){let s=this.next();this.keys.set(n,s)}return!0}reset(e){let{from:t,to:n}=e,s=n-t,o=this.range.to-this.range.from;if(this.range=e,o>s)return this.init(e);let i=[];this.keys.forEach((u,l)=>{(l<t||l>=n)&&(i.push(u),this.keys.delete(l))});for(let u=t;u<n;u++)if(!this.keys.has(u)){let l=this.next(i);this.keys.set(u,l)}return!1}keyFor(e){let t=this.keys.get(e);if(t===void 0)throw console.log(\\`key not found\n keys: \\${this.toDebugString()}\n \\`),Error(\\`KeySet, no key found for rowIndex \\${e}\\`);return t}toDebugString(){return\\`\\${this.keys.size} keys\n\\${Array.from(this.keys.entries()).sort(([e],[t])=>e-t).map(([e,t])=>\\`\\${e}=>\\${t}\\`).join(\",\")}]\n\\`}};var{SELECTED:Ft}=B,E={False:0,True:1,First:2,Last:4};var ot=(r,e)=>e>=r[0]&&e<=r[1],it=E.True+E.First+E.Last,at=E.True+E.First,ut=E.True+E.Last,H=(r,e)=>{for(let t of r)if(typeof t==\"number\"){if(t===e)return it}else if(ot(t,e))return e===t[0]?at:e===t[1]?ut:E.True;return E.False};var he=r=>{if(r.every(t=>typeof t==\"number\"))return r;let e=[];for(let t of r)if(typeof t==\"number\")e.push(t);else for(let n=t[0];n<=t[1];n++)e.push(n);return e};var fe=r=>r.type===\"VIEW_PORT_MENU_RESP\"&&r.action!==null&&O(r.action.table),O=r=>r!==null&&typeof r==\"object\"&&\"table\"in r&&\"module\"in r?r.table.startsWith(\"session\"):!1;var lt=[\"VIEW_PORT_MENUS_SELECT_RPC\",\"VIEW_PORT_MENU_TABLE_RPC\",\"VIEW_PORT_MENU_ROW_RPC\",\"VIEW_PORT_MENU_CELL_RPC\",\"VP_EDIT_CELL_RPC\",\"VP_EDIT_ROW_RPC\",\"VP_EDIT_ADD_ROW_RPC\",\"VP_EDIT_DELETE_CELL_RPC\",\"VP_EDIT_DELETE_ROW_RPC\",\"VP_EDIT_SUBMIT_FORM_RPC\"],me=r=>lt.includes(r.type),Ce=r=>r.type===\"VIEW_PORT_RPC_CALL\",A=({requestId:r,...e})=>[r,e],Re=r=>{let e=r.at(0);if(e.updateType===\"SIZE\"){if(r.length===1)return r;e=r.at(1)}let t=r.at(-1);return[e,t]},Se=r=>{let e={};for(let t of r)(e[t.viewPortId]||(e[t.viewPortId]=[])).push(t);return e},z=({columns:r,dataTypes:e,key:t,table:n})=>({table:n,columns:r.map((s,o)=>({name:s,serverDataType:e[o]})),key:t});var Te=\"CHANGE_VP_SUCCESS\";var be=\"CLOSE_TREE_NODE\",we=\"CLOSE_TREE_SUCCESS\";var Ee=\"CREATE_VP\",Ve=\"DISABLE_VP\",ve=\"DISABLE_VP_SUCCESS\";var Me=\"ENABLE_VP\",ye=\"ENABLE_VP_SUCCESS\";var K=\"GET_VP_VISUAL_LINKS\",_e=\"GET_VIEW_PORT_MENUS\";var De=\"HB\",Ie=\"HB_RESP\",Pe=\"LOGIN\",Le=\"OPEN_TREE_NODE\",ke=\"OPEN_TREE_SUCCESS\";var xe=\"REMOVE_VP\";var Oe=\"SET_SELECTION_SUCCESS\";var We=r=>{switch(r){case\"TypeAheadRpcHandler\":return\"TYPEAHEAD\";default:return\"SIMUL\"}};var Ne=[],C=b(\"array-backed-moving-window\");function ct(r,e){if(!e||e.data.length!==r.data.length||e.sel!==r.sel)return!1;for(let t=0;t<e.data.length;t++)if(e.data[t]!==r.data[t])return!1;return!0}var h,W=class{constructor({from:e,to:t},{from:n,to:s},o){ae(this,h,void 0);this.setRowCount=e=>{var t;if((t=C.info)==null||t.call(C,\\`setRowCount \\${e}\\`),e<this.internalData.length&&(this.internalData.length=e),e<this.rowCount){this.rowsWithinRange=0;let n=Math.min(e,this.clientRange.to);for(let s=this.clientRange.from;s<n;s++){let o=s-m(this,h).from;this.internalData[o]!==void 0&&(this.rowsWithinRange+=1)}}this.rowCount=e};this.bufferBreakout=(e,t)=>{let n=this.bufferSize*.25;return m(this,h).to-t<n?!0:m(this,h).from>0&&e-m(this,h).from<n};this.bufferSize=o,this.clientRange=new I(e,t),ue(this,h,new I(n,s)),this.internalData=new Array(o),this.rowsWithinRange=0,this.rowCount=0}get range(){return m(this,h)}get hasAllRowsWithinRange(){return this.rowsWithinRange===this.clientRange.to-this.clientRange.from||this.rowCount>0&&this.clientRange.from+this.rowsWithinRange===this.rowCount}outOfRange(e,t){let{from:n,to:s}=this.range;if(t<n||e>=s)return!0}setAtIndex(e){let{rowIndex:t}=e,n=t-m(this,h).from;if(ct(e,this.internalData[n]))return!1;let s=this.isWithinClientRange(t);return(s||this.isWithinRange(t))&&(!this.internalData[n]&&s&&(this.rowsWithinRange+=1),this.internalData[n]=e),s}getAtIndex(e){return m(this,h).isWithin(e)&&this.internalData[e-m(this,h).from]!=null?this.internalData[e-m(this,h).from]:void 0}isWithinRange(e){return m(this,h).isWithin(e)}isWithinClientRange(e){return this.clientRange.isWithin(e)}setClientRange(e,t){var p;(p=C.debug)==null||p.call(C,\\`setClientRange \\${e} - \\${t}\\`);let n=this.clientRange.from,s=Math.min(this.clientRange.to,this.rowCount);if(e===n&&t===s)return[!1,Ne];let o=this.clientRange.copy();this.clientRange.from=e,this.clientRange.to=t,this.rowsWithinRange=0;for(let a=e;a<t;a++){let c=a-m(this,h).from;this.internalData[c]&&(this.rowsWithinRange+=1)}let i=Ne,u=m(this,h).from;if(this.hasAllRowsWithinRange)if(t>o.to){let a=Math.max(e,o.to);i=this.internalData.slice(a-u,t-u)}else{let a=Math.min(o.from,t);i=this.internalData.slice(e-u,a-u)}return[this.bufferBreakout(e,t),i]}setRange(e,t){var n,s;if(e!==m(this,h).from||t!==m(this,h).to){(n=C.debug)==null||n.call(C,\\`setRange \\${e} - \\${t}\\`);let[o,i]=m(this,h).overlap(e,t),u=new Array(t-e);this.rowsWithinRange=0;for(let l=o;l<i;l++){let p=this.getAtIndex(l);if(p){let a=l-e;u[a]=p,this.isWithinClientRange(l)&&(this.rowsWithinRange+=1)}}this.internalData=u,m(this,h).from=e,m(this,h).to=t}else(s=C.debug)==null||s.call(C,\\`setRange \\${e} - \\${t} IGNORED because not changed\\`)}get data(){return this.internalData}getData(){var u;let{from:e,to:t}=m(this,h),{from:n,to:s}=this.clientRange,o=Math.max(0,n-e),i=Math.min(t-e,t,s-e,(u=this.rowCount)!=null?u:t);return this.internalData.slice(o,i)}clear(){var e;(e=C.debug)==null||e.call(C,\"clear\"),this.internalData.length=0,this.rowsWithinRange=0,this.setRowCount(0)}getCurrentDataRange(){let e=this.internalData,t=e.length,[n]=this.internalData,s=this.internalData[t-1];if(n&&s)return[n.rowIndex,s.rowIndex];for(let o=0;o<t;o++)if(e[o]!==void 0){n=e[o];break}for(let o=t-1;o>=0;o--)if(e[o]!==void 0){s=e[o];break}return n&&s?[n.rowIndex,s.rowIndex]:[-1,-1]}};h=new WeakMap;var{debug:f,debugEnabled:N,error:pt,info:d,infoEnabled:dt,warn:M}=b(\"viewport\"),gt=({rowKey:r,updateType:e})=>e===\"U\"&&!r.startsWith(\"\\$root\"),U=[void 0,void 0],ht={count:0,mode:void 0,size:0,ts:0},q=class{constructor({aggregations:e,bufferSize:t=50,columns:n,filter:s,groupBy:o=[],table:i,range:u,sort:l,title:p,viewport:a,visualLink:c},g){this.batchMode=!0;this.hasUpdates=!1;this.pendingUpdates=[];this.pendingOperations=new Map;this.pendingRangeRequests=[];this.rowCountChanged=!1;this.selectedRows=[];this.useBatchMode=!0;this.lastUpdateStatus=ht;this.updateThrottleTimer=void 0;this.rangeMonitor=new k(\"ViewPort\");this.disabled=!1;this.isTree=!1;this.status=\"\";this.suspended=!1;this.suspendTimer=null;this.setLastSizeOnlyUpdateSize=e=>{this.lastUpdateStatus.size=e};this.setLastUpdate=e=>{let{ts:t,mode:n}=this.lastUpdateStatus,s=0;if(n===e){let o=Date.now();this.lastUpdateStatus.count+=1,this.lastUpdateStatus.ts=o,s=t===0?0:o-t}else this.lastUpdateStatus.count=1,this.lastUpdateStatus.ts=0,s=0;return this.lastUpdateStatus.mode=e,s};this.rangeRequestAlreadyPending=e=>{let{bufferSize:t}=this,n=t*.25,{from:s}=e;for(let{from:o,to:i}of this.pendingRangeRequests)if(s>=o&&s<i){if(e.to+n<=i)return!0;s=i}return!1};this.sendThrottledSizeMessage=()=>{this.updateThrottleTimer=void 0,this.lastUpdateStatus.count=3,this.postMessageToClient({clientViewportId:this.clientViewportId,mode:\"size-only\",size:this.lastUpdateStatus.size,type:\"viewport-update\"})};this.shouldThrottleMessage=e=>{let t=this.setLastUpdate(e);return e===\"size-only\"&&t>0&&t<500&&this.lastUpdateStatus.count>3};this.throttleMessage=e=>this.shouldThrottleMessage(e)?(d==null||d(\"throttling updates setTimeout to 2000\"),this.updateThrottleTimer===void 0&&(this.updateThrottleTimer=setTimeout(this.sendThrottledSizeMessage,2e3)),!0):(this.updateThrottleTimer!==void 0&&(clearTimeout(this.updateThrottleTimer),this.updateThrottleTimer=void 0),!1);this.getNewRowCount=()=>{if(this.rowCountChanged&&this.dataWindow)return this.rowCountChanged=!1,this.dataWindow.rowCount};this.aggregations=e,this.bufferSize=t,this.clientRange=u,this.clientViewportId=a,this.columns=n,this.filter=s,this.groupBy=o,this.keys=new x(u),this.pendingLinkedParent=c,this.table=i,this.sort=l,this.title=p,dt&&(d==null||d(\\`constructor #\\${a} \\${i.table} bufferSize=\\${t}\\`)),this.dataWindow=new W(this.clientRange,u,this.bufferSize),this.postMessageToClient=g}get hasUpdatesToProcess(){return this.suspended?!1:this.rowCountChanged||this.hasUpdates}get size(){var e;return(e=this.dataWindow.rowCount)!=null?e:0}subscribe(){let{filter:e}=this.filter;return this.status=this.status===\"subscribed\"?\"resubscribing\":\"subscribing\",{type:Ee,table:this.table,range:G(this.clientRange,this.bufferSize),aggregations:this.aggregations,columns:this.columns,sort:this.sort,groupBy:this.groupBy,filterSpec:{filter:e}}}handleSubscribed({viewPortId:e,aggregations:t,columns:n,filterSpec:s,range:o,sort:i,groupBy:u,table:l},p){this.serverViewportId=e,this.status=\"subscribed\",this.aggregations=t,this.columns=n,this.groupBy=u,this.isTree=u&&u.length>0,this.dataWindow.setRange(o.from,o.to);let a=l===p.table.table?p:{...p,table:{...p.table,session:l}};return{aggregations:t,type:\"subscribed\",clientViewportId:this.clientViewportId,columns:n,filter:s,groupBy:u,range:o,sort:i,tableSchema:a}}awaitOperation(e,t){this.pendingOperations.set(e,t)}completeOperation(e,...t){var u;let{clientViewportId:n,pendingOperations:s}=this,o=s.get(e);if(!o){pt(\\`no matching operation found to complete for requestId \\${e}\\`);return}let{type:i}=o;if(d==null||d(\\`completeOperation \\${i}\\`),s.delete(e),i===\"CHANGE_VP_RANGE\"){let[l,p]=t;(u=this.dataWindow)==null||u.setRange(l,p);for(let a=this.pendingRangeRequests.length-1;a>=0;a--){let c=this.pendingRangeRequests[a];if(c.requestId===e){c.acked=!0;break}else M==null||M(\"range requests sent faster than they are being ACKed\")}}else if(i===\"config\"){let{aggregations:l,columns:p,filter:a,groupBy:c,sort:g}=o.data;return this.aggregations=l,this.columns=p,this.filter=a,this.groupBy=c,this.sort=g,c.length>0?this.isTree=!0:this.isTree&&(this.isTree=!1),f==null||f(\\`config change confirmed, isTree : \\${this.isTree}\\`),{clientViewportId:n,type:i,config:o.data}}else{if(i===\"groupBy\")return this.isTree=o.data.length>0,this.groupBy=o.data,f==null||f(\\`groupBy change confirmed, isTree : \\${this.isTree}\\`),{clientViewportId:n,type:i,groupBy:o.data};if(i===\"columns\")return this.columns=o.data,{clientViewportId:n,type:i,columns:o.data};if(i===\"filter\")return this.filter=o.data,{clientViewportId:n,type:i,filter:o.data};if(i===\"aggregate\")return this.aggregations=o.data,{clientViewportId:n,type:\"aggregate\",aggregations:this.aggregations};if(i===\"sort\")return this.sort=o.data,{clientViewportId:n,type:i,sort:this.sort};if(i!==\"selection\"){if(i===\"disable\")return this.disabled=!0,{type:\"disabled\",clientViewportId:n};if(i===\"enable\")return this.disabled=!1,{type:\"enabled\",clientViewportId:n};if(i===\"CREATE_VISUAL_LINK\"){let[l,p,a]=t;return this.linkedParent={colName:l,parentViewportId:p,parentColName:a},this.pendingLinkedParent=void 0,{type:\"vuu-link-created\",clientViewportId:n,colName:l,parentViewportId:p,parentColName:a}}else if(i===\"REMOVE_VISUAL_LINK\")return this.linkedParent=void 0,{type:\"vuu-link-removed\",clientViewportId:n}}}}rangeRequest(e,t){N&&this.rangeMonitor.set(t);let n=\"CHANGE_VP_RANGE\";if(this.dataWindow){let[s,o]=this.dataWindow.setClientRange(t.from,t.to),i,u=this.dataWindow.rowCount||void 0,l=s&&!this.rangeRequestAlreadyPending(t)?{type:n,viewPortId:this.serverViewportId,...G(t,this.bufferSize,u)}:null;if(l){N&&(f==null||f(\\`create CHANGE_VP_RANGE: [\\${l.from} - \\${l.to}]\\`)),this.awaitOperation(e,{type:n});let a=this.pendingRangeRequests.at(-1);if(a)if(a.acked)console.warn(\"Range Request before previous request is filled\");else{let{from:c,to:g}=a;this.dataWindow.outOfRange(c,g)?i={clientViewportId:this.clientViewportId,type:\"debounce-begin\"}:M==null||M(\"Range Request before previous request is acked\")}this.pendingRangeRequests.push({...l,requestId:e}),this.useBatchMode&&(this.batchMode=!0)}else o.length>0&&(this.batchMode=!1);this.keys.reset(this.dataWindow.clientRange);let p=this.isTree?j:J;return o.length?[l,o.map(a=>p(a,this.keys,this.selectedRows))]:i?[l,void 0,i]:[l]}else return[null]}setLinks(e){return this.links=e,[{type:\"vuu-links\",links:e,clientViewportId:this.clientViewportId},this.pendingLinkedParent]}setMenu(e){return{type:\"vuu-menu\",menu:e,clientViewportId:this.clientViewportId}}openTreeNode(e,t){return this.useBatchMode&&(this.batchMode=!0),{type:Le,vpId:this.serverViewportId,treeKey:t.key}}closeTreeNode(e,t){return this.useBatchMode&&(this.batchMode=!0),{type:be,vpId:this.serverViewportId,treeKey:t.key}}createLink(e,t,n,s){let o={type:\"CREATE_VISUAL_LINK\",parentVpId:n,childVpId:this.serverViewportId,parentColumnName:s,childColumnName:t};return this.awaitOperation(e,o),this.useBatchMode&&(this.batchMode=!0),o}removeLink(e){let t={type:\"REMOVE_VISUAL_LINK\",childVpId:this.serverViewportId};return this.awaitOperation(e,t),t}suspend(){this.suspended=!0,d==null||d(\"suspend\")}resume(){return this.suspended=!1,N&&(f==null||f(\\`resume: \\${this.currentData()}\\`)),[this.size,this.currentData()]}currentData(){let e=[];if(this.dataWindow){let t=this.dataWindow.getData(),{keys:n}=this,s=this.isTree?j:J;for(let o of t)o&&e.push(s(o,n,this.selectedRows))}return e}enable(e){return this.awaitOperation(e,{type:\"enable\"}),d==null||d(\\`enable: \\${this.serverViewportId}\\`),{type:Me,viewPortId:this.serverViewportId}}disable(e){return this.awaitOperation(e,{type:\"disable\"}),d==null||d(\\`disable: \\${this.serverViewportId}\\`),this.suspended=!1,{type:Ve,viewPortId:this.serverViewportId}}columnRequest(e,t){return this.awaitOperation(e,{type:\"columns\",data:t}),f==null||f(\\`columnRequest: \\${t}\\`),this.createRequest({columns:t})}setConfig(e,t){var o;this.awaitOperation(e,{type:\"config\",data:t});let{filter:n,...s}=t;return this.useBatchMode&&(this.batchMode=!0),N?f==null||f(\\`setConfig \\${JSON.stringify(t)}\\`):d==null||d(\"setConfig\"),!this.isTree&&t.groupBy.length>0&&((o=this.dataWindow)==null||o.clear()),this.createRequest({...s,filterSpec:typeof(n==null?void 0:n.filter)==\"string\"?{filter:n.filter}:{filter:\"\"}},!0)}aggregateRequest(e,t){return this.awaitOperation(e,{type:\"aggregate\",data:t}),d==null||d(\\`aggregateRequest: \\${t}\\`),this.createRequest({aggregations:t})}sortRequest(e,t){return this.awaitOperation(e,{type:\"sort\",data:t}),d==null||d(\\`sortRequest: \\${JSON.stringify(t.sortDefs)}\\`),this.createRequest({sort:t})}selectRequest(e,t){return this.selectedRows=t,this.awaitOperation(e,{type:\"selection\",data:t}),d==null||d(\\`selectRequest: \\${t}\\`),{type:\"SET_SELECTION\",vpId:this.serverViewportId,selection:he(t)}}removePendingRangeRequest(e,t){for(let n=this.pendingRangeRequests.length-1;n>=0;n--){let{from:s,to:o}=this.pendingRangeRequests[n],i=!0;if(e>=s&&e<o||t>s&&t<o){i||console.warn(\"removePendingRangeRequest TABLE_ROWS are not for latest request\"),this.pendingRangeRequests.splice(n,1);break}else i=!1}}updateRows(e){var s,o,i;let[t,n]=Re(e);if(t&&n&&this.removePendingRangeRequest(t.rowIndex,n.rowIndex),e.length===1)if(t.vpSize===0&&this.disabled){f==null||f(\\`ignore a SIZE=0 message on disabled viewport (\\${e.length} rows)\\`);return}else t.updateType===\"SIZE\"&&this.setLastSizeOnlyUpdateSize(t.vpSize);for(let u of e)this.isTree&&gt(u)||((u.updateType===\"SIZE\"||((s=this.dataWindow)==null?void 0:s.rowCount)!==u.vpSize)&&((o=this.dataWindow)==null||o.setRowCount(u.vpSize),this.rowCountChanged=!0),u.updateType===\"U\"&&(i=this.dataWindow)!=null&&i.setAtIndex(u)&&(this.hasUpdates=!0,this.batchMode||this.pendingUpdates.push(u)))}getClientRows(){let e,t=\"size-only\";if(!this.hasUpdates&&!this.rowCountChanged)return U;if(this.hasUpdates){let{keys:n,selectedRows:s}=this,o=this.isTree?j:J;if(this.updateThrottleTimer&&(self.clearTimeout(this.updateThrottleTimer),this.updateThrottleTimer=void 0),this.pendingUpdates.length>0){e=[],t=\"update\";for(let i of this.pendingUpdates)e.push(o(i,n,s));this.pendingUpdates.length=0}else{let i=this.dataWindow.getData();if(this.dataWindow.hasAllRowsWithinRange){e=[],t=\"batch\";for(let u of i)e.push(o(u,n,s));this.batchMode=!1}}this.hasUpdates=!1}return this.throttleMessage(t)?U:[e,t]}createRequest(e,t=!1){return t?{type:\"CHANGE_VP\",viewPortId:this.serverViewportId,...e}:{type:\"CHANGE_VP\",viewPortId:this.serverViewportId,aggregations:this.aggregations,columns:this.columns,sort:this.sort,groupBy:this.groupBy,filterSpec:{filter:this.filter.filter},...e}}},J=({rowIndex:r,rowKey:e,sel:t,data:n},s,o)=>[r,s.keyFor(r),!0,!1,0,0,e,t?H(o,r):0].concat(n),j=({rowIndex:r,rowKey:e,sel:t,data:n},s,o)=>{let[i,u,,l,,p,...a]=n;return[r,s.keyFor(r),l,u,i,p,e,t?H(o,r):0].concat(a)};var Ue=1;var{debug:V,debugEnabled:Y,error:y,info:T,infoEnabled:ft,warn:Q}=b(\"server-proxy\"),R=()=>\\`\\${Ue++}\\`,mt={},Ct=r=>r.disabled!==!0&&r.suspended!==!0,Rt={type:\"NO_ACTION\"},St=(r,e,t)=>r.map(n=>n.parentVpId===e?{...n,label:t}:n);function Tt(r,e){return r.map(t=>{let{parentVpId:n}=t,s=e.get(n);if(s)return{...t,parentClientVpId:s.clientViewportId,label:s.title};throw Error(\"addLabelsToLinks viewport not found\")})}var \\$=class{constructor(e,t){this.authToken=\"\";this.user=\"user\";this.pendingRequests=new Map;this.queuedRequests=[];this.cachedTableMetaRequests=new Map;this.cachedTableSchemas=new Map;this.connection=e,this.postMessageToClient=t,this.viewports=new Map,this.mapClientToServerViewport=new Map}async reconnect(){await this.login(this.authToken);let[e,t]=le(Array.from(this.viewports.values()),Ct);this.viewports.clear(),this.mapClientToServerViewport.clear();let n=s=>{s.forEach(o=>{let{clientViewportId:i}=o;this.viewports.set(i,o),this.sendMessageToServer(o.subscribe(),i)})};n(e),setTimeout(()=>{n(t)},2e3)}async login(e,t=\"user\"){if(e)return this.authToken=e,this.user=t,new Promise((n,s)=>{this.sendMessageToServer({type:Pe,token:this.authToken,user:t},\"\"),this.pendingLogin={resolve:n,reject:s}});this.authToken===\"\"&&y(\"login, cannot login until auth token has been obtained\")}subscribe(e){if(this.mapClientToServerViewport.has(e.viewport))y(\\`spurious subscribe call \\${e.viewport}\\`);else{let t=this.getTableMeta(e.table),n=new q(e,this.postMessageToClient);this.viewports.set(e.viewport,n);let s=this.awaitResponseToMessage(n.subscribe(),e.viewport);Promise.all([s,t]).then(([i,u])=>{let{viewPortId:l}=i,{status:p}=n;e.viewport!==l&&(this.viewports.delete(e.viewport),this.viewports.set(l,n)),this.mapClientToServerViewport.set(e.viewport,l);let a=n.handleSubscribed(i,u);a&&(this.postMessageToClient(a),Y&&V(\\`post DataSourceSubscribedMessage to client: \\${JSON.stringify(a)}\\`)),n.disabled&&this.disableViewport(n),this.queuedRequests.length>0&&this.processQueuedRequests(),p===\"subscribing\"&&!O(n.table)&&(this.sendMessageToServer({type:K,vpId:l}),this.sendMessageToServer({type:_e,vpId:l}),Array.from(this.viewports.entries()).filter(([c,{disabled:g}])=>c!==l&&!g).forEach(([c])=>{this.sendMessageToServer({type:K,vpId:c})}))})}}processQueuedRequests(){let e={};for(;this.queuedRequests.length;){let t=this.queuedRequests.pop();if(t){let{clientViewportId:n,message:s,requestId:o}=t;if(s.type===\"CHANGE_VP_RANGE\"){if(e.CHANGE_VP_RANGE)continue;e.CHANGE_VP_RANGE=!0;let i=this.mapClientToServerViewport.get(n);i&&this.sendMessageToServer({...s,viewPortId:i},o)}}}}unsubscribe(e){let t=this.mapClientToServerViewport.get(e);t?(T==null||T(\\`Unsubscribe Message (Client to Server):\n \\${t}\\`),this.sendMessageToServer({type:xe,viewPortId:t})):y(\\`failed to unsubscribe client viewport \\${e}, viewport not found\\`)}getViewportForClient(e,t=!0){let n=this.mapClientToServerViewport.get(e);if(n){let s=this.viewports.get(n);if(s)return s;if(t)throw Error(\\`Viewport not found for client viewport \\${e}\\`);return null}else{if(this.viewports.has(e))return this.viewports.get(e);if(t)throw Error(\\`Viewport server id not found for client viewport \\${e}\\`);return null}}setViewRange(e,t){let n=R(),[s,o,i]=e.rangeRequest(n,t.range);T==null||T(\\`setViewRange \\${t.range.from} - \\${t.range.to}\\`),s&&(this.sendIfReady(s,n,e.status===\"subscribed\")||this.queuedRequests.push({clientViewportId:t.viewport,message:s,requestId:n})),o?(T==null||T(\\`setViewRange \\${o.length} rows returned from cache\\`),this.postMessageToClient({mode:\"batch\",type:\"viewport-update\",clientViewportId:e.clientViewportId,rows:o})):i&&this.postMessageToClient(i)}setConfig(e,t){let n=R(),s=e.setConfig(n,t.config);this.sendIfReady(s,n,e.status===\"subscribed\")}aggregate(e,t){let n=R(),s=e.aggregateRequest(n,t.aggregations);this.sendIfReady(s,n,e.status===\"subscribed\")}sort(e,t){let n=R(),s=e.sortRequest(n,t.sort);this.sendIfReady(s,n,e.status===\"subscribed\")}setColumns(e,t){let n=R(),{columns:s}=t,o=e.columnRequest(n,s);this.sendIfReady(o,n,e.status===\"subscribed\")}setTitle(e,t){e&&(e.title=t.title,this.updateTitleOnVisualLinks(e))}select(e,t){let n=R(),{selected:s}=t,o=e.selectRequest(n,s);this.sendIfReady(o,n,e.status===\"subscribed\")}disableViewport(e){let t=R(),n=e.disable(t);this.sendIfReady(n,t,e.status===\"subscribed\")}enableViewport(e){if(e.disabled){let t=R(),n=e.enable(t);this.sendIfReady(n,t,e.status===\"subscribed\")}}suspendViewport(e){e.suspend(),e.suspendTimer=setTimeout(()=>{T==null||T(\"suspendTimer expired, escalate suspend to disable\"),this.disableViewport(e)},3e3)}resumeViewport(e){e.suspendTimer&&(V==null||V(\"clear suspend timer\"),clearTimeout(e.suspendTimer),e.suspendTimer=null);let[t,n]=e.resume();V==null||V(\\`resumeViewport size \\${t}, \\${n.length} rows sent to client\\`),this.postMessageToClient({clientViewportId:e.clientViewportId,mode:\"batch\",rows:n,size:t,type:\"viewport-update\"})}openTreeNode(e,t){if(e.serverViewportId){let n=R();this.sendIfReady(e.openTreeNode(n,t),n,e.status===\"subscribed\")}}closeTreeNode(e,t){if(e.serverViewportId){let n=R();this.sendIfReady(e.closeTreeNode(n,t),n,e.status===\"subscribed\")}}createLink(e,t){let{parentClientVpId:n,parentColumnName:s,childColumnName:o}=t,i=R(),u=this.mapClientToServerViewport.get(n);if(u){let l=e.createLink(i,o,u,s);this.sendMessageToServer(l,i)}else y(\"ServerProxy unable to create link, viewport not found\")}removeLink(e){let t=R(),n=e.removeLink(t);this.sendMessageToServer(n,t)}updateTitleOnVisualLinks(e){var s;let{serverViewportId:t,title:n}=e;for(let o of this.viewports.values())if(o!==e&&o.links&&t&&n&&(s=o.links)!=null&&s.some(i=>i.parentVpId===t)){let[i]=o.setLinks(St(o.links,t,n));this.postMessageToClient(i)}}removeViewportFromVisualLinks(e){var t;for(let n of this.viewports.values())if((t=n.links)!=null&&t.some(({parentVpId:s})=>s===e)){let[s]=n.setLinks(n.links.filter(({parentVpId:o})=>o!==e));this.postMessageToClient(s)}}menuRpcCall(e){let t=this.getViewportForClient(e.vpId,!1);if(t!=null&&t.serverViewportId){let[n,s]=A(e);this.sendMessageToServer({...s,vpId:t.serverViewportId},n)}}viewportRpcCall(e){let t=this.getViewportForClient(e.vpId,!1);if(t!=null&&t.serverViewportId){let[n,s]=A(e);this.sendMessageToServer({...s,vpId:t.serverViewportId,namedParams:{}},n)}}rpcCall(e){let[t,n]=A(e),s=We(n.service);this.sendMessageToServer(n,t,{module:s})}handleMessageFromClient(e){var t;if(ge(e))if(e.type===\"disable\"){let n=this.getViewportForClient(e.viewport,!1);return n!==null?this.disableViewport(n):void 0}else{let n=this.getViewportForClient(e.viewport);switch(e.type){case\"setViewRange\":return this.setViewRange(n,e);case\"config\":return this.setConfig(n,e);case\"aggregate\":return this.aggregate(n,e);case\"sort\":return this.sort(n,e);case\"select\":return this.select(n,e);case\"suspend\":return this.suspendViewport(n);case\"resume\":return this.resumeViewport(n);case\"enable\":return this.enableViewport(n);case\"openTreeNode\":return this.openTreeNode(n,e);case\"closeTreeNode\":return this.closeTreeNode(n,e);case\"createLink\":return this.createLink(n,e);case\"removeLink\":return this.removeLink(n);case\"setColumns\":return this.setColumns(n,e);case\"setTitle\":return this.setTitle(n,e);default:}}else{if(Ce(e))return this.viewportRpcCall(e);if(me(e))return this.menuRpcCall(e);{let{type:n,requestId:s}=e;switch(n){case\"GET_TABLE_LIST\":{(t=this.tableList)!=null||(this.tableList=this.awaitResponseToMessage({type:n},s)),this.tableList.then(o=>{this.postMessageToClient({type:\"TABLE_LIST_RESP\",tables:o.tables,requestId:s})});return}case\"GET_TABLE_META\":{this.getTableMeta(e.table,s).then(o=>{o&&this.postMessageToClient({type:\"TABLE_META_RESP\",tableSchema:o,requestId:s})});return}case\"RPC_CALL\":return this.rpcCall(e);default:}}}y(\\`Vuu ServerProxy Unexpected message from client \\${JSON.stringify(e)}\\`)}getTableMeta(e,t=R()){if(O(e))return Promise.resolve(void 0);let n=\\`\\${e.module}:\\${e.table}\\`,s=this.cachedTableMetaRequests.get(n);return s||(s=this.awaitResponseToMessage({type:\"GET_TABLE_META\",table:e},t),this.cachedTableMetaRequests.set(n,s)),s==null?void 0:s.then(o=>this.cacheTableMeta(o))}awaitResponseToMessage(e,t=R()){return new Promise((n,s)=>{this.sendMessageToServer(e,t),this.pendingRequests.set(t,{reject:s,resolve:n})})}sendIfReady(e,t,n=!0){return n&&this.sendMessageToServer(e,t),n}sendMessageToServer(e,t=\\`\\${Ue++}\\`,n=mt){let{module:s=\"CORE\"}=n;this.authToken&&this.connection.send({requestId:t,sessionId:this.sessionId,token:this.authToken,user:this.user,module:s,body:e})}handleMessageFromServer(e){var u;let{body:t,requestId:n,sessionId:s}=e,o=this.pendingRequests.get(n);if(o){let{resolve:a}=o;this.pendingRequests.delete(n),a(t);return}let{viewports:i}=this;switch(t.type){case De:this.sendMessageToServer({type:Ie,ts:+new Date},\"NA\");break;case\"LOGIN_SUCCESS\":if(s)this.sessionId=s,(u=this.pendingLogin)==null||u.resolve(s),this.pendingLogin=void 0;else throw Error(\"LOGIN_SUCCESS did not provide sessionId\");break;case\"REMOVE_VP_SUCCESS\":{let a=i.get(t.viewPortId);a&&(this.mapClientToServerViewport.delete(a.clientViewportId),i.delete(t.viewPortId),this.removeViewportFromVisualLinks(t.viewPortId))}break;case Oe:{let a=this.viewports.get(t.vpId);a&&a.completeOperation(n)}break;case Te:case ve:if(i.has(t.viewPortId)){let a=this.viewports.get(t.viewPortId);if(a){let c=a.completeOperation(n);c!==void 0&&(this.postMessageToClient(c),Y&&V(\\`postMessageToClient \\${JSON.stringify(c)}\\`))}}break;case ye:{let a=this.viewports.get(t.viewPortId);if(a){let c=a.completeOperation(n);if(c){this.postMessageToClient(c);let[g,S]=a.resume();this.postMessageToClient({clientViewportId:a.clientViewportId,mode:\"batch\",rows:S,size:g,type:\"viewport-update\"})}}}break;case\"TABLE_ROW\":{let a=Se(t.rows);for(let[c,g]of Object.entries(a)){let S=i.get(c);S?S.updateRows(g):Q==null||Q(\\`TABLE_ROW message received for non registered viewport \\${c}\\`)}this.processUpdates()}break;case\"CHANGE_VP_RANGE_SUCCESS\":{let a=this.viewports.get(t.viewPortId);if(a){let{from:c,to:g}=t;a.completeOperation(n,c,g)}}break;case ke:case we:break;case\"CREATE_VISUAL_LINK_SUCCESS\":{let a=this.viewports.get(t.childVpId),c=this.viewports.get(t.parentVpId);if(a&&c){let{childColumnName:g,parentColumnName:S}=t,D=a.completeOperation(n,g,c.clientViewportId,S);D&&this.postMessageToClient(D)}}break;case\"REMOVE_VISUAL_LINK_SUCCESS\":{let a=this.viewports.get(t.childVpId);if(a){let c=a.completeOperation(n);c&&this.postMessageToClient(c)}}break;case\"VP_VISUAL_LINKS_RESP\":{let a=this.getActiveLinks(t.links),c=this.viewports.get(t.vpId);if(a.length&&c){let g=Tt(a,this.viewports),[S,D]=c.setLinks(g);if(this.postMessageToClient(S),D){let{link:se,parentClientVpId:ze}=D,re=R(),oe=this.mapClientToServerViewport.get(ze);if(oe){let Ke=c.createLink(re,se.fromColumn,oe,se.toColumn);this.sendMessageToServer(Ke,re)}}}}break;case\"VIEW_PORT_MENUS_RESP\":if(t.menu.name){let a=this.viewports.get(t.vpId);if(a){let c=a.setMenu(t.menu);this.postMessageToClient(c)}}break;case\"VP_EDIT_RPC_RESPONSE\":this.postMessageToClient({action:t.action,requestId:n,rpcName:t.rpcName,type:\"VP_EDIT_RPC_RESPONSE\"});break;case\"VP_EDIT_RPC_REJECT\":this.viewports.get(t.vpId)&&this.postMessageToClient({requestId:n,type:\"VP_EDIT_RPC_REJECT\",error:t.error});break;case\"VIEW_PORT_MENU_REJ\":{console.log(\"send menu error back to client\");let{error:a,rpcName:c,vpId:g}=t,S=this.viewports.get(g);S&&this.postMessageToClient({clientViewportId:S.clientViewportId,error:a,rpcName:c,type:\"VIEW_PORT_MENU_REJ\",requestId:n});break}case\"VIEW_PORT_MENU_RESP\":if(fe(t)){let{action:a,rpcName:c}=t;this.awaitResponseToMessage({type:\"GET_TABLE_META\",table:a.table}).then(g=>{let S=z(g);this.postMessageToClient({rpcName:c,type:\"VIEW_PORT_MENU_RESP\",action:{...a,tableSchema:S},tableAlreadyOpen:this.isTableOpen(a.table),requestId:n})})}else{let{action:a}=t;this.postMessageToClient({type:\"VIEW_PORT_MENU_RESP\",action:a||Rt,tableAlreadyOpen:a!==null&&this.isTableOpen(a.table),requestId:n})}break;case\"RPC_RESP\":{let{method:a,result:c}=t;this.postMessageToClient({type:\"RPC_RESP\",method:a,result:c,requestId:n})}break;case\"VIEW_PORT_RPC_REPONSE\":{let{method:a,action:c}=t;this.postMessageToClient({type:\"VIEW_PORT_RPC_RESPONSE\",rpcName:a,action:c,requestId:n})}break;case\"ERROR\":y(t.msg);break;default:ft&&T(\\`handleMessageFromServer \\${t.type}.\\`)}}cacheTableMeta(e){let{module:t,table:n}=e.table,s=\\`\\${t}:\\${n}\\`,o=this.cachedTableSchemas.get(s);return o||(o=z(e),this.cachedTableSchemas.set(s,o)),o}isTableOpen(e){if(e){let t=e.table;for(let n of this.viewports.values())if(!n.suspended&&n.table.table===t)return!0}}getActiveLinks(e){return e.filter(t=>{let n=this.viewports.get(t.parentVpId);return n&&!n.suspended})}processUpdates(){this.viewports.forEach(e=>{var t;if(e.hasUpdatesToProcess){let n=e.getClientRows();if(n!==U){let[s,o]=n,i=e.getNewRowCount();(i!==void 0||s&&s.length>0)&&(Y&&V(\\`postMessageToClient #\\${e.clientViewportId} viewport-update \\${o}, \\${(t=s==null?void 0:s.length)!=null?t:\"no\"} rows, size \\${i}\\`),o&&this.postMessageToClient({clientViewportId:e.clientViewportId,mode:o,rows:s,size:i,type:\"viewport-update\"}))}}})}};var{debug:un,debugEnabled:ln,error:qe,info:w,infoEnabled:bt,warn:_}=b(\"websocket-connection\"),Be={},Z=Symbol(\"setWebsocket\"),F=Symbol(\"connectionCallback\");async function Ge(r,e,t,n=10,s=5){return Be[r]={status:\"connecting\",connect:{allowed:s,remaining:s},reconnect:{allowed:n,remaining:n}},He(r,e,t)}async function X(r){throw Error(\"connection broken\")}async function He(r,e,t,n){let{status:s,connect:o,reconnect:i}=Be[r],u=s===\"connecting\"?o:i;try{t({type:\"connection-status\",status:\"connecting\"});let l=typeof n<\"u\",p=await Et(r,e);console.info(\"%c\\u26A1 %cconnected\",\"font-size: 24px;color: green;font-weight: bold;\",\"color:green; font-size: 14px;\"),n!==void 0&&n[Z](p);let a=n!=null?n:new ee(p,r,e,t),c=l?\"reconnected\":\"connection-open-awaiting-session\";return t({type:\"connection-status\",status:c}),a.status=c,u.remaining=u.allowed,a}catch{let p=--u.remaining>0;if(t({type:\"connection-status\",status:\"disconnected\",reason:\"failed to connect\",retry:p}),p)return wt(r,e,t,n,2e3);throw t({type:\"connection-status\",status:\"failed\",reason:\"unable to connect\",retry:p}),Error(\"Failed to establish connection\")}}var wt=(r,e,t,n,s)=>new Promise(o=>{setTimeout(()=>{o(He(r,e,t,n))},s)}),Et=(r,e)=>new Promise((t,n)=>{bt&&e!==void 0&&w(\\`WebSocket Protocol \\${e==null?void 0:e.toString()}\\`);let s=new WebSocket(r,e);s.onopen=()=>t(s),s.onerror=o=>n(o)}),\\$e=()=>{_==null||_(\"Connection cannot be closed, socket not yet opened\")},Fe=r=>{_==null||_(\\`Message cannot be sent, socket closed \\${r.body.type}\\`)},Vt=r=>{try{return JSON.parse(r)}catch{throw Error(\\`Error parsing JSON response from server \\${r}\\`)}},ee=class{constructor(e,t,n,s){this.close=\\$e;this.requiresLogin=!0;this.send=Fe;this.status=\"ready\";this.messagesCount=0;this.connectionMetricsInterval=null;this.handleWebsocketMessage=e=>{let t=Vt(e.data);this.messagesCount+=1,this[F](t)};this.url=t,this.protocol=n,this[F]=s,this[Z](e)}reconnect(){X(this)}[(F,Z)](e){let t=this[F];e.onmessage=o=>{this.status=\"connected\",e.onmessage=this.handleWebsocketMessage,this.handleWebsocketMessage(o)},this.connectionMetricsInterval=setInterval(()=>{t({type:\"connection-metrics\",messagesLength:this.messagesCount}),this.messagesCount=0},2e3),e.onerror=()=>{qe(\"\\u26A1 connection error\"),t({type:\"connection-status\",status:\"disconnected\",reason:\"error\"}),this.connectionMetricsInterval&&(clearInterval(this.connectionMetricsInterval),this.connectionMetricsInterval=null),this.status===\"connection-open-awaiting-session\"?qe(\"Websocket connection lost before Vuu session established, check websocket configuration\"):this.status!==\"closed\"&&(X(this),this.send=s)},e.onclose=()=>{w==null||w(\"\\u26A1 connection close\"),t({type:\"connection-status\",status:\"disconnected\",reason:\"close\"}),this.connectionMetricsInterval&&(clearInterval(this.connectionMetricsInterval),this.connectionMetricsInterval=null),this.status!==\"closed\"&&(X(this),this.send=s)};let n=o=>{e.send(JSON.stringify(o))},s=o=>{w==null||w(\\`TODO queue message until websocket reconnected \\${o.body.type}\\`)};this.send=n,this.close=()=>{this.status=\"closed\",e.close(),this.close=\\$e,this.send=Fe,w==null||w(\"close websocket\")}}};var v,{info:te,infoEnabled:ne}=b(\"worker\");async function vt(r,e,t,n,s,o,i){let u=await Ge(r,e,l=>{de(l)?postMessage({type:\"connection-metrics\",messages:l}):pe(l)?(s(l),l.status===\"reconnected\"&&v.reconnect()):v.handleMessageFromServer(l)},o,i);v=new \\$(u,l=>Mt(l)),u.requiresLogin&&await v.login(t,n)}function Mt(r){postMessage(r)}var yt=async({data:r})=>{switch(r.type){case\"connect\":try{await vt(r.url,r.protocol,r.token,r.username,postMessage,r.retryLimitDisconnect,r.retryLimitStartup),postMessage({type:\"connected\"})}catch(e){postMessage({type:\"connection-failed\",reason:String(e)})}break;case\"subscribe\":ne&&te(\\`client subscribe: \\${JSON.stringify(r)}\\`),v.subscribe(r);break;case\"unsubscribe\":ne&&te(\\`client unsubscribe: \\${JSON.stringify(r)}\\`),v.unsubscribe(r.viewport);break;default:ne&&te(\\`client message: \\${JSON.stringify(r)}\\`),v.handleMessageFromClient(r)}};self.addEventListener(\"message\",yt);postMessage({type:\"ready\"});\n\n`;"],"names":[],"mappings":";;AAAO,MAAM,gBAAmB,GAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;"}
1
+ {"version":3,"file":"inlined-worker.js","sources":["../src/inlined-worker.js"],"sourcesContent":["export const workerSourceCode = `\nvar ie=(r,e,t)=>{if(!e.has(r))throw TypeError(\"Cannot \"+t)};var m=(r,e,t)=>(ie(r,e,\"read from private field\"),t?t.call(r):e.get(r)),ae=(r,e,t)=>{if(e.has(r))throw TypeError(\"Cannot add the same private member more than once\");e instanceof WeakSet?e.add(r):e.set(r,t)},ue=(r,e,t,n)=>(ie(r,e,\"write to private field\"),n?n.call(r,t):e.set(r,t),t);function le(r,e,t=[],n=[]){for(let s=0,o=r.length;s<o;s++)(e(r[s],s)?t:n).push(r[s]);return[t,n]}var Je=6,B={IDX:0,RENDER_IDX:1,IS_LEAF:2,IS_EXPANDED:3,DEPTH:4,COUNT:5,KEY:Je,SELECTED:7,count:8,PARENT_IDX:\"parent_idx\",IDX_POINTER:\"idx_pointer\",FILTER_COUNT:\"filter_count\",NEXT_FILTER_IDX:\"next_filter_idx\"};var{DEPTH:It,IS_LEAF:Pt}=B;var ce=r=>{var e,t;if(((e=globalThis.document)==null?void 0:e.cookie)!==void 0)return(t=globalThis.document.cookie.split(\"; \").find(n=>n.startsWith(\\`\\${r}=\\`)))==null?void 0:t.split(\"=\")[1]};function G({from:r,to:e},t=0,n=Number.MAX_SAFE_INTEGER){if(r===0&&e===0)return{from:r,to:e};if(t===0)return n<r?{from:0,to:0}:{from:r,to:Math.min(e,n)};if(r===0)return{from:r,to:Math.min(e+t,n)};{let s=r-t<0,o=n-(e+t)<0;return s&&o?{from:0,to:n}:s?{from:0,to:e+t}:o?{from:Math.max(0,r-t),to:n}:{from:r-t,to:e+t}}}var je=(r,{from:e,to:t})=>r>=e&&r<t;var I=class r{constructor(e,t){this.from=e,this.to=t}isWithin(e){return je(e,this)}overlap(e,t){return e>=this.to||t<this.from?[0,0]:[Math.max(e,this.from),Math.min(t,this.to)]}copy(){return new r(this.from,this.to)}};var pe=r=>r.type===\"connection-status\",de=r=>r.type===\"connection-metrics\";var ge=r=>\"viewport\"in r;var Ye=[\"error\",\"warn\",\"info\",\"debug\"],Qe=r=>typeof r==\"string\"&&Ye.includes(r),Xe=\"error\",P=()=>{},Ze=\"error\",{loggingLevel:L=Ze}=et(),b=r=>{let e=L===\"debug\",t=e||L===\"info\",n=t||L===\"warn\",s=n||L===\"error\",o=t?p=>console.info(\\`[\\${r}] \\${p}\\`):P,i=n?p=>console.warn(\\`[\\${r}] \\${p}\\`):P,u=e?p=>console.debug(\\`[\\${r}] \\${p}\\`):P;return{errorEnabled:s,error:s?p=>console.error(\\`[\\${r}] \\${p}\\`):P}};function et(){return typeof loggingSettings<\"u\"?loggingSettings:{loggingLevel:tt()}}function tt(){let r=ce(\"vuu-logging-level\");return Qe(r)?r:Xe}var{debug:nt,debugEnabled:st}=b(\"range-monitor\"),k=class{constructor(e){this.source=e;this.range={from:0,to:0};this.timestamp=0}isSet(){return this.timestamp!==0}set({from:e,to:t}){let{timestamp:n}=this;if(this.range.from=e,this.range.to=t,this.timestamp=performance.now(),n)st&&nt(\\`<\\${this.source}> [\\${e}-\\${t}], \\${(this.timestamp-n).toFixed(0)} ms elapsed\\`);else return 0}};var rt=[],x=class{constructor(e){this.keys=new Map;this.nextKeyValue=0;this.range=e,this.init(e)}next(e=rt){return e.length>0?e.shift():this.nextKeyValue++}init({from:e,to:t}){this.keys.clear(),this.nextKeyValue=0;for(let n=e;n<t;n++){let s=this.next();this.keys.set(n,s)}return!0}reset(e){let{from:t,to:n}=e,s=n-t,o=this.range.to-this.range.from;if(this.range=e,o>s)return this.init(e);let i=[];this.keys.forEach((u,l)=>{(l<t||l>=n)&&(i.push(u),this.keys.delete(l))});for(let u=t;u<n;u++)if(!this.keys.has(u)){let l=this.next(i);this.keys.set(u,l)}return!1}keyFor(e){let t=this.keys.get(e);if(t===void 0)throw console.log(\\`key not found\n keys: \\${this.toDebugString()}\n \\`),Error(\\`KeySet, no key found for rowIndex \\${e}\\`);return t}toDebugString(){return\\`\\${this.keys.size} keys\n\\${Array.from(this.keys.entries()).sort(([e],[t])=>e-t).map(([e,t])=>\\`\\${e}=>\\${t}\\`).join(\",\")}]\n\\`}};var ot=[\"VIEW_PORT_MENUS_SELECT_RPC\",\"VIEW_PORT_MENU_TABLE_RPC\",\"VIEW_PORT_MENU_ROW_RPC\",\"VIEW_PORT_MENU_CELL_RPC\",\"VP_EDIT_CELL_RPC\",\"VP_EDIT_ROW_RPC\",\"VP_EDIT_ADD_ROW_RPC\",\"VP_EDIT_DELETE_CELL_RPC\",\"VP_EDIT_DELETE_ROW_RPC\",\"VP_EDIT_SUBMIT_FORM_RPC\"],he=r=>ot.includes(r.type);var{SELECTED:Bt}=B,E={False:0,True:1,First:2,Last:4};var it=(r,e)=>e>=r[0]&&e<=r[1],at=E.True+E.First+E.Last,ut=E.True+E.First,lt=E.True+E.Last,H=(r,e)=>{for(let t of r)if(typeof t==\"number\"){if(t===e)return at}else if(it(t,e))return e===t[0]?ut:e===t[1]?lt:E.True;return E.False};var fe=r=>{if(r.every(t=>typeof t==\"number\"))return r;let e=[];for(let t of r)if(typeof t==\"number\")e.push(t);else for(let n=t[0];n<=t[1];n++)e.push(n);return e};var me=r=>r.type===\"VIEW_PORT_MENU_RESP\"&&r.action!==null&&O(r.action.table),O=r=>r!==null&&typeof r==\"object\"&&\"table\"in r&&\"module\"in r?r.table.startsWith(\"session\"):!1;var Ce=r=>r.type===\"VIEW_PORT_RPC_CALL\",A=({requestId:r,...e})=>[r,e],Re=r=>{let e=r.at(0);if(e.updateType===\"SIZE\"){if(r.length===1)return r;e=r.at(1)}let t=r.at(-1);return[e,t]},Se=r=>{let e={};for(let t of r)(e[t.viewPortId]||(e[t.viewPortId]=[])).push(t);return e},z=({columns:r,dataTypes:e,key:t,table:n})=>({table:n,columns:r.map((s,o)=>({name:s,serverDataType:e[o]})),key:t});var Te=\"CHANGE_VP_SUCCESS\";var be=\"CLOSE_TREE_NODE\",we=\"CLOSE_TREE_SUCCESS\";var Ee=\"CREATE_VP\",Ve=\"DISABLE_VP\",ve=\"DISABLE_VP_SUCCESS\";var Me=\"ENABLE_VP\",ye=\"ENABLE_VP_SUCCESS\";var K=\"GET_VP_VISUAL_LINKS\",_e=\"GET_VIEW_PORT_MENUS\";var De=\"HB\",Ie=\"HB_RESP\",Pe=\"LOGIN\",Le=\"OPEN_TREE_NODE\",ke=\"OPEN_TREE_SUCCESS\";var xe=\"REMOVE_VP\";var Oe=\"SET_SELECTION_SUCCESS\";var We=r=>{switch(r){case\"TypeAheadRpcHandler\":return\"TYPEAHEAD\";default:return\"SIMUL\"}};var Ne=[],C=b(\"array-backed-moving-window\");function ct(r,e){if(!e||e.data.length!==r.data.length||e.sel!==r.sel)return!1;for(let t=0;t<e.data.length;t++)if(e.data[t]!==r.data[t])return!1;return!0}var h,W=class{constructor({from:e,to:t},{from:n,to:s},o){ae(this,h,void 0);this.setRowCount=e=>{var t;if((t=C.info)==null||t.call(C,\\`setRowCount \\${e}\\`),e<this.internalData.length&&(this.internalData.length=e),e<this.rowCount){this.rowsWithinRange=0;let n=Math.min(e,this.clientRange.to);for(let s=this.clientRange.from;s<n;s++){let o=s-m(this,h).from;this.internalData[o]!==void 0&&(this.rowsWithinRange+=1)}}this.rowCount=e};this.bufferBreakout=(e,t)=>{let n=this.bufferSize*.25;return m(this,h).to-t<n?!0:m(this,h).from>0&&e-m(this,h).from<n};this.bufferSize=o,this.clientRange=new I(e,t),ue(this,h,new I(n,s)),this.internalData=new Array(o),this.rowsWithinRange=0,this.rowCount=0}get range(){return m(this,h)}get hasAllRowsWithinRange(){return this.rowsWithinRange===this.clientRange.to-this.clientRange.from||this.rowCount>0&&this.clientRange.from+this.rowsWithinRange===this.rowCount}outOfRange(e,t){let{from:n,to:s}=this.range;if(t<n||e>=s)return!0}setAtIndex(e){let{rowIndex:t}=e,n=t-m(this,h).from;if(ct(e,this.internalData[n]))return!1;let s=this.isWithinClientRange(t);return(s||this.isWithinRange(t))&&(!this.internalData[n]&&s&&(this.rowsWithinRange+=1),this.internalData[n]=e),s}getAtIndex(e){return m(this,h).isWithin(e)&&this.internalData[e-m(this,h).from]!=null?this.internalData[e-m(this,h).from]:void 0}isWithinRange(e){return m(this,h).isWithin(e)}isWithinClientRange(e){return this.clientRange.isWithin(e)}setClientRange(e,t){var p;(p=C.debug)==null||p.call(C,\\`setClientRange \\${e} - \\${t}\\`);let n=this.clientRange.from,s=Math.min(this.clientRange.to,this.rowCount);if(e===n&&t===s)return[!1,Ne];let o=this.clientRange.copy();this.clientRange.from=e,this.clientRange.to=t,this.rowsWithinRange=0;for(let a=e;a<t;a++){let c=a-m(this,h).from;this.internalData[c]&&(this.rowsWithinRange+=1)}let i=Ne,u=m(this,h).from;if(this.hasAllRowsWithinRange)if(t>o.to){let a=Math.max(e,o.to);i=this.internalData.slice(a-u,t-u)}else{let a=Math.min(o.from,t);i=this.internalData.slice(e-u,a-u)}return[this.bufferBreakout(e,t),i]}setRange(e,t){var n,s;if(e!==m(this,h).from||t!==m(this,h).to){(n=C.debug)==null||n.call(C,\\`setRange \\${e} - \\${t}\\`);let[o,i]=m(this,h).overlap(e,t),u=new Array(t-e);this.rowsWithinRange=0;for(let l=o;l<i;l++){let p=this.getAtIndex(l);if(p){let a=l-e;u[a]=p,this.isWithinClientRange(l)&&(this.rowsWithinRange+=1)}}this.internalData=u,m(this,h).from=e,m(this,h).to=t}else(s=C.debug)==null||s.call(C,\\`setRange \\${e} - \\${t} IGNORED because not changed\\`)}get data(){return this.internalData}getData(){var u;let{from:e,to:t}=m(this,h),{from:n,to:s}=this.clientRange,o=Math.max(0,n-e),i=Math.min(t-e,t,s-e,(u=this.rowCount)!=null?u:t);return this.internalData.slice(o,i)}clear(){var e;(e=C.debug)==null||e.call(C,\"clear\"),this.internalData.length=0,this.rowsWithinRange=0,this.setRowCount(0)}getCurrentDataRange(){let e=this.internalData,t=e.length,[n]=this.internalData,s=this.internalData[t-1];if(n&&s)return[n.rowIndex,s.rowIndex];for(let o=0;o<t;o++)if(e[o]!==void 0){n=e[o];break}for(let o=t-1;o>=0;o--)if(e[o]!==void 0){s=e[o];break}return n&&s?[n.rowIndex,s.rowIndex]:[-1,-1]}};h=new WeakMap;var{debug:f,debugEnabled:N,error:pt,info:d,infoEnabled:dt,warn:M}=b(\"viewport\"),gt=({rowKey:r,updateType:e})=>e===\"U\"&&!r.startsWith(\"\\$root\"),U=[void 0,void 0],ht={count:0,mode:void 0,size:0,ts:0},q=class{constructor({aggregations:e,bufferSize:t=50,columns:n,filter:s,groupBy:o=[],table:i,range:u,sort:l,title:p,viewport:a,visualLink:c},g){this.batchMode=!0;this.hasUpdates=!1;this.pendingUpdates=[];this.pendingOperations=new Map;this.pendingRangeRequests=[];this.rowCountChanged=!1;this.selectedRows=[];this.useBatchMode=!0;this.lastUpdateStatus=ht;this.updateThrottleTimer=void 0;this.rangeMonitor=new k(\"ViewPort\");this.disabled=!1;this.isTree=!1;this.status=\"\";this.suspended=!1;this.suspendTimer=null;this.setLastSizeOnlyUpdateSize=e=>{this.lastUpdateStatus.size=e};this.setLastUpdate=e=>{let{ts:t,mode:n}=this.lastUpdateStatus,s=0;if(n===e){let o=Date.now();this.lastUpdateStatus.count+=1,this.lastUpdateStatus.ts=o,s=t===0?0:o-t}else this.lastUpdateStatus.count=1,this.lastUpdateStatus.ts=0,s=0;return this.lastUpdateStatus.mode=e,s};this.rangeRequestAlreadyPending=e=>{let{bufferSize:t}=this,n=t*.25,{from:s}=e;for(let{from:o,to:i}of this.pendingRangeRequests)if(s>=o&&s<i){if(e.to+n<=i)return!0;s=i}return!1};this.sendThrottledSizeMessage=()=>{this.updateThrottleTimer=void 0,this.lastUpdateStatus.count=3,this.postMessageToClient({clientViewportId:this.clientViewportId,mode:\"size-only\",size:this.lastUpdateStatus.size,type:\"viewport-update\"})};this.shouldThrottleMessage=e=>{let t=this.setLastUpdate(e);return e===\"size-only\"&&t>0&&t<500&&this.lastUpdateStatus.count>3};this.throttleMessage=e=>this.shouldThrottleMessage(e)?(d==null||d(\"throttling updates setTimeout to 2000\"),this.updateThrottleTimer===void 0&&(this.updateThrottleTimer=setTimeout(this.sendThrottledSizeMessage,2e3)),!0):(this.updateThrottleTimer!==void 0&&(clearTimeout(this.updateThrottleTimer),this.updateThrottleTimer=void 0),!1);this.getNewRowCount=()=>{if(this.rowCountChanged&&this.dataWindow)return this.rowCountChanged=!1,this.dataWindow.rowCount};this.aggregations=e,this.bufferSize=t,this.clientRange=u,this.clientViewportId=a,this.columns=n,this.filter=s,this.groupBy=o,this.keys=new x(u),this.pendingLinkedParent=c,this.table=i,this.sort=l,this.title=p,dt&&(d==null||d(\\`constructor #\\${a} \\${i.table} bufferSize=\\${t}\\`)),this.dataWindow=new W(this.clientRange,u,this.bufferSize),this.postMessageToClient=g}get hasUpdatesToProcess(){return this.suspended?!1:this.rowCountChanged||this.hasUpdates}get size(){var e;return(e=this.dataWindow.rowCount)!=null?e:0}subscribe(){let{filter:e}=this.filter;return this.status=this.status===\"subscribed\"?\"resubscribing\":\"subscribing\",{type:Ee,table:this.table,range:G(this.clientRange,this.bufferSize),aggregations:this.aggregations,columns:this.columns,sort:this.sort,groupBy:this.groupBy,filterSpec:{filter:e}}}handleSubscribed({viewPortId:e,aggregations:t,columns:n,filterSpec:s,range:o,sort:i,groupBy:u,table:l},p){this.serverViewportId=e,this.status=\"subscribed\",this.aggregations=t,this.columns=n,this.groupBy=u,this.isTree=u&&u.length>0,this.dataWindow.setRange(o.from,o.to);let a=l===p.table.table?p:{...p,table:{...p.table,session:l}};return{aggregations:t,type:\"subscribed\",clientViewportId:this.clientViewportId,columns:n,filter:s,groupBy:u,range:o,sort:i,tableSchema:a}}awaitOperation(e,t){this.pendingOperations.set(e,t)}completeOperation(e,...t){var u;let{clientViewportId:n,pendingOperations:s}=this,o=s.get(e);if(!o){pt(\\`no matching operation found to complete for requestId \\${e}\\`);return}let{type:i}=o;if(d==null||d(\\`completeOperation \\${i}\\`),s.delete(e),i===\"CHANGE_VP_RANGE\"){let[l,p]=t;(u=this.dataWindow)==null||u.setRange(l,p);for(let a=this.pendingRangeRequests.length-1;a>=0;a--){let c=this.pendingRangeRequests[a];if(c.requestId===e){c.acked=!0;break}else M==null||M(\"range requests sent faster than they are being ACKed\")}}else if(i===\"config\"){let{aggregations:l,columns:p,filter:a,groupBy:c,sort:g}=o.data;return this.aggregations=l,this.columns=p,this.filter=a,this.groupBy=c,this.sort=g,c.length>0?this.isTree=!0:this.isTree&&(this.isTree=!1),f==null||f(\\`config change confirmed, isTree : \\${this.isTree}\\`),{clientViewportId:n,type:i,config:o.data}}else{if(i===\"groupBy\")return this.isTree=o.data.length>0,this.groupBy=o.data,f==null||f(\\`groupBy change confirmed, isTree : \\${this.isTree}\\`),{clientViewportId:n,type:i,groupBy:o.data};if(i===\"columns\")return this.columns=o.data,{clientViewportId:n,type:i,columns:o.data};if(i===\"filter\")return this.filter=o.data,{clientViewportId:n,type:i,filter:o.data};if(i===\"aggregate\")return this.aggregations=o.data,{clientViewportId:n,type:\"aggregate\",aggregations:this.aggregations};if(i===\"sort\")return this.sort=o.data,{clientViewportId:n,type:i,sort:this.sort};if(i!==\"selection\"){if(i===\"disable\")return this.disabled=!0,{type:\"disabled\",clientViewportId:n};if(i===\"enable\")return this.disabled=!1,{type:\"enabled\",clientViewportId:n};if(i===\"CREATE_VISUAL_LINK\"){let[l,p,a]=t;return this.linkedParent={colName:l,parentViewportId:p,parentColName:a},this.pendingLinkedParent=void 0,{type:\"vuu-link-created\",clientViewportId:n,colName:l,parentViewportId:p,parentColName:a}}else if(i===\"REMOVE_VISUAL_LINK\")return this.linkedParent=void 0,{type:\"vuu-link-removed\",clientViewportId:n}}}}rangeRequest(e,t){N&&this.rangeMonitor.set(t);let n=\"CHANGE_VP_RANGE\";if(this.dataWindow){let[s,o]=this.dataWindow.setClientRange(t.from,t.to),i,u=this.dataWindow.rowCount||void 0,l=s&&!this.rangeRequestAlreadyPending(t)?{type:n,viewPortId:this.serverViewportId,...G(t,this.bufferSize,u)}:null;if(l){N&&(f==null||f(\\`create CHANGE_VP_RANGE: [\\${l.from} - \\${l.to}]\\`)),this.awaitOperation(e,{type:n});let a=this.pendingRangeRequests.at(-1);if(a)if(a.acked)console.warn(\"Range Request before previous request is filled\");else{let{from:c,to:g}=a;this.dataWindow.outOfRange(c,g)?i={clientViewportId:this.clientViewportId,type:\"debounce-begin\"}:M==null||M(\"Range Request before previous request is acked\")}this.pendingRangeRequests.push({...l,requestId:e}),this.useBatchMode&&(this.batchMode=!0)}else o.length>0&&(this.batchMode=!1);this.keys.reset(this.dataWindow.clientRange);let p=this.isTree?j:J;return o.length?[l,o.map(a=>p(a,this.keys,this.selectedRows))]:i?[l,void 0,i]:[l]}else return[null]}setLinks(e){return this.links=e,[{type:\"vuu-links\",links:e,clientViewportId:this.clientViewportId},this.pendingLinkedParent]}setMenu(e){return{type:\"vuu-menu\",menu:e,clientViewportId:this.clientViewportId}}openTreeNode(e,t){return this.useBatchMode&&(this.batchMode=!0),{type:Le,vpId:this.serverViewportId,treeKey:t.key}}closeTreeNode(e,t){return this.useBatchMode&&(this.batchMode=!0),{type:be,vpId:this.serverViewportId,treeKey:t.key}}createLink(e,t,n,s){let o={type:\"CREATE_VISUAL_LINK\",parentVpId:n,childVpId:this.serverViewportId,parentColumnName:s,childColumnName:t};return this.awaitOperation(e,o),this.useBatchMode&&(this.batchMode=!0),o}removeLink(e){let t={type:\"REMOVE_VISUAL_LINK\",childVpId:this.serverViewportId};return this.awaitOperation(e,t),t}suspend(){this.suspended=!0,d==null||d(\"suspend\")}resume(){return this.suspended=!1,N&&(f==null||f(\\`resume: \\${this.currentData()}\\`)),[this.size,this.currentData()]}currentData(){let e=[];if(this.dataWindow){let t=this.dataWindow.getData(),{keys:n}=this,s=this.isTree?j:J;for(let o of t)o&&e.push(s(o,n,this.selectedRows))}return e}enable(e){return this.awaitOperation(e,{type:\"enable\"}),d==null||d(\\`enable: \\${this.serverViewportId}\\`),{type:Me,viewPortId:this.serverViewportId}}disable(e){return this.awaitOperation(e,{type:\"disable\"}),d==null||d(\\`disable: \\${this.serverViewportId}\\`),this.suspended=!1,{type:Ve,viewPortId:this.serverViewportId}}columnRequest(e,t){return this.awaitOperation(e,{type:\"columns\",data:t}),f==null||f(\\`columnRequest: \\${t}\\`),this.createRequest({columns:t})}setConfig(e,t){var o;this.awaitOperation(e,{type:\"config\",data:t});let{filter:n,...s}=t;return this.useBatchMode&&(this.batchMode=!0),N?f==null||f(\\`setConfig \\${JSON.stringify(t)}\\`):d==null||d(\"setConfig\"),!this.isTree&&t.groupBy.length>0&&((o=this.dataWindow)==null||o.clear()),this.createRequest({...s,filterSpec:typeof(n==null?void 0:n.filter)==\"string\"?{filter:n.filter}:{filter:\"\"}},!0)}aggregateRequest(e,t){return this.awaitOperation(e,{type:\"aggregate\",data:t}),d==null||d(\\`aggregateRequest: \\${t}\\`),this.createRequest({aggregations:t})}sortRequest(e,t){return this.awaitOperation(e,{type:\"sort\",data:t}),d==null||d(\\`sortRequest: \\${JSON.stringify(t.sortDefs)}\\`),this.createRequest({sort:t})}selectRequest(e,t){return this.selectedRows=t,this.awaitOperation(e,{type:\"selection\",data:t}),d==null||d(\\`selectRequest: \\${t}\\`),{type:\"SET_SELECTION\",vpId:this.serverViewportId,selection:fe(t)}}removePendingRangeRequest(e,t){for(let n=this.pendingRangeRequests.length-1;n>=0;n--){let{from:s,to:o}=this.pendingRangeRequests[n],i=!0;if(e>=s&&e<o||t>s&&t<o){i||console.warn(\"removePendingRangeRequest TABLE_ROWS are not for latest request\"),this.pendingRangeRequests.splice(n,1);break}else i=!1}}updateRows(e){var s,o,i;let[t,n]=Re(e);if(t&&n&&this.removePendingRangeRequest(t.rowIndex,n.rowIndex),e.length===1)if(t.vpSize===0&&this.disabled){f==null||f(\\`ignore a SIZE=0 message on disabled viewport (\\${e.length} rows)\\`);return}else t.updateType===\"SIZE\"&&this.setLastSizeOnlyUpdateSize(t.vpSize);for(let u of e)this.isTree&&gt(u)||((u.updateType===\"SIZE\"||((s=this.dataWindow)==null?void 0:s.rowCount)!==u.vpSize)&&((o=this.dataWindow)==null||o.setRowCount(u.vpSize),this.rowCountChanged=!0),u.updateType===\"U\"&&(i=this.dataWindow)!=null&&i.setAtIndex(u)&&(this.hasUpdates=!0,this.batchMode||this.pendingUpdates.push(u)))}getClientRows(){let e,t=\"size-only\";if(!this.hasUpdates&&!this.rowCountChanged)return U;if(this.hasUpdates){let{keys:n,selectedRows:s}=this,o=this.isTree?j:J;if(this.updateThrottleTimer&&(self.clearTimeout(this.updateThrottleTimer),this.updateThrottleTimer=void 0),this.pendingUpdates.length>0){e=[],t=\"update\";for(let i of this.pendingUpdates)e.push(o(i,n,s));this.pendingUpdates.length=0}else{let i=this.dataWindow.getData();if(this.dataWindow.hasAllRowsWithinRange){e=[],t=\"batch\";for(let u of i)e.push(o(u,n,s));this.batchMode=!1}}this.hasUpdates=!1}return this.throttleMessage(t)?U:[e,t]}createRequest(e,t=!1){return t?{type:\"CHANGE_VP\",viewPortId:this.serverViewportId,...e}:{type:\"CHANGE_VP\",viewPortId:this.serverViewportId,aggregations:this.aggregations,columns:this.columns,sort:this.sort,groupBy:this.groupBy,filterSpec:{filter:this.filter.filter},...e}}},J=({rowIndex:r,rowKey:e,sel:t,data:n},s,o)=>[r,s.keyFor(r),!0,!1,0,0,e,t?H(o,r):0].concat(n),j=({rowIndex:r,rowKey:e,sel:t,data:n},s,o)=>{let[i,u,,l,,p,...a]=n;return[r,s.keyFor(r),l,u,i,p,e,t?H(o,r):0].concat(a)};var Ue=1;var{debug:V,debugEnabled:Y,error:y,info:T,infoEnabled:ft,warn:Q}=b(\"server-proxy\"),R=()=>\\`\\${Ue++}\\`,mt={},Ct=r=>r.disabled!==!0&&r.suspended!==!0,Rt={type:\"NO_ACTION\"},St=(r,e,t)=>r.map(n=>n.parentVpId===e?{...n,label:t}:n);function Tt(r,e){return r.map(t=>{let{parentVpId:n}=t,s=e.get(n);if(s)return{...t,parentClientVpId:s.clientViewportId,label:s.title};throw Error(\"addLabelsToLinks viewport not found\")})}var \\$=class{constructor(e,t){this.authToken=\"\";this.user=\"user\";this.pendingRequests=new Map;this.queuedRequests=[];this.cachedTableMetaRequests=new Map;this.cachedTableSchemas=new Map;this.connection=e,this.postMessageToClient=t,this.viewports=new Map,this.mapClientToServerViewport=new Map}async reconnect(){await this.login(this.authToken);let[e,t]=le(Array.from(this.viewports.values()),Ct);this.viewports.clear(),this.mapClientToServerViewport.clear();let n=s=>{s.forEach(o=>{let{clientViewportId:i}=o;this.viewports.set(i,o),this.sendMessageToServer(o.subscribe(),i)})};n(e),setTimeout(()=>{n(t)},2e3)}async login(e,t=\"user\"){if(e)return this.authToken=e,this.user=t,new Promise((n,s)=>{this.sendMessageToServer({type:Pe,token:this.authToken,user:t},\"\"),this.pendingLogin={resolve:n,reject:s}});this.authToken===\"\"&&y(\"login, cannot login until auth token has been obtained\")}subscribe(e){if(this.mapClientToServerViewport.has(e.viewport))y(\\`spurious subscribe call \\${e.viewport}\\`);else{let t=this.getTableMeta(e.table),n=new q(e,this.postMessageToClient);this.viewports.set(e.viewport,n);let s=this.awaitResponseToMessage(n.subscribe(),e.viewport);Promise.all([s,t]).then(([i,u])=>{let{viewPortId:l}=i,{status:p}=n;e.viewport!==l&&(this.viewports.delete(e.viewport),this.viewports.set(l,n)),this.mapClientToServerViewport.set(e.viewport,l);let a=n.handleSubscribed(i,u);a&&(this.postMessageToClient(a),Y&&V(\\`post DataSourceSubscribedMessage to client: \\${JSON.stringify(a)}\\`)),n.disabled&&this.disableViewport(n),this.queuedRequests.length>0&&this.processQueuedRequests(),p===\"subscribing\"&&!O(n.table)&&(this.sendMessageToServer({type:K,vpId:l}),this.sendMessageToServer({type:_e,vpId:l}),Array.from(this.viewports.entries()).filter(([c,{disabled:g}])=>c!==l&&!g).forEach(([c])=>{this.sendMessageToServer({type:K,vpId:c})}))})}}processQueuedRequests(){let e={};for(;this.queuedRequests.length;){let t=this.queuedRequests.pop();if(t){let{clientViewportId:n,message:s,requestId:o}=t;if(s.type===\"CHANGE_VP_RANGE\"){if(e.CHANGE_VP_RANGE)continue;e.CHANGE_VP_RANGE=!0;let i=this.mapClientToServerViewport.get(n);i&&this.sendMessageToServer({...s,viewPortId:i},o)}}}}unsubscribe(e){let t=this.mapClientToServerViewport.get(e);t?(T==null||T(\\`Unsubscribe Message (Client to Server):\n \\${t}\\`),this.sendMessageToServer({type:xe,viewPortId:t})):y(\\`failed to unsubscribe client viewport \\${e}, viewport not found\\`)}getViewportForClient(e,t=!0){let n=this.mapClientToServerViewport.get(e);if(n){let s=this.viewports.get(n);if(s)return s;if(t)throw Error(\\`Viewport not found for client viewport \\${e}\\`);return null}else{if(this.viewports.has(e))return this.viewports.get(e);if(t)throw Error(\\`Viewport server id not found for client viewport \\${e}\\`);return null}}setViewRange(e,t){let n=R(),[s,o,i]=e.rangeRequest(n,t.range);T==null||T(\\`setViewRange \\${t.range.from} - \\${t.range.to}\\`),s&&(this.sendIfReady(s,n,e.status===\"subscribed\")||this.queuedRequests.push({clientViewportId:t.viewport,message:s,requestId:n})),o?(T==null||T(\\`setViewRange \\${o.length} rows returned from cache\\`),this.postMessageToClient({mode:\"batch\",type:\"viewport-update\",clientViewportId:e.clientViewportId,rows:o})):i&&this.postMessageToClient(i)}setConfig(e,t){let n=R(),s=e.setConfig(n,t.config);this.sendIfReady(s,n,e.status===\"subscribed\")}aggregate(e,t){let n=R(),s=e.aggregateRequest(n,t.aggregations);this.sendIfReady(s,n,e.status===\"subscribed\")}sort(e,t){let n=R(),s=e.sortRequest(n,t.sort);this.sendIfReady(s,n,e.status===\"subscribed\")}setColumns(e,t){let n=R(),{columns:s}=t,o=e.columnRequest(n,s);this.sendIfReady(o,n,e.status===\"subscribed\")}setTitle(e,t){e&&(e.title=t.title,this.updateTitleOnVisualLinks(e))}select(e,t){let n=R(),{selected:s}=t,o=e.selectRequest(n,s);this.sendIfReady(o,n,e.status===\"subscribed\")}disableViewport(e){let t=R(),n=e.disable(t);this.sendIfReady(n,t,e.status===\"subscribed\")}enableViewport(e){if(e.disabled){let t=R(),n=e.enable(t);this.sendIfReady(n,t,e.status===\"subscribed\")}}suspendViewport(e){e.suspend(),e.suspendTimer=setTimeout(()=>{T==null||T(\"suspendTimer expired, escalate suspend to disable\"),this.disableViewport(e)},3e3)}resumeViewport(e){e.suspendTimer&&(V==null||V(\"clear suspend timer\"),clearTimeout(e.suspendTimer),e.suspendTimer=null);let[t,n]=e.resume();V==null||V(\\`resumeViewport size \\${t}, \\${n.length} rows sent to client\\`),this.postMessageToClient({clientViewportId:e.clientViewportId,mode:\"batch\",rows:n,size:t,type:\"viewport-update\"})}openTreeNode(e,t){if(e.serverViewportId){let n=R();this.sendIfReady(e.openTreeNode(n,t),n,e.status===\"subscribed\")}}closeTreeNode(e,t){if(e.serverViewportId){let n=R();this.sendIfReady(e.closeTreeNode(n,t),n,e.status===\"subscribed\")}}createLink(e,t){let{parentClientVpId:n,parentColumnName:s,childColumnName:o}=t,i=R(),u=this.mapClientToServerViewport.get(n);if(u){let l=e.createLink(i,o,u,s);this.sendMessageToServer(l,i)}else y(\"ServerProxy unable to create link, viewport not found\")}removeLink(e){let t=R(),n=e.removeLink(t);this.sendMessageToServer(n,t)}updateTitleOnVisualLinks(e){var s;let{serverViewportId:t,title:n}=e;for(let o of this.viewports.values())if(o!==e&&o.links&&t&&n&&(s=o.links)!=null&&s.some(i=>i.parentVpId===t)){let[i]=o.setLinks(St(o.links,t,n));this.postMessageToClient(i)}}removeViewportFromVisualLinks(e){var t;for(let n of this.viewports.values())if((t=n.links)!=null&&t.some(({parentVpId:s})=>s===e)){let[s]=n.setLinks(n.links.filter(({parentVpId:o})=>o!==e));this.postMessageToClient(s)}}menuRpcCall(e){let t=this.getViewportForClient(e.vpId,!1);if(t!=null&&t.serverViewportId){let[n,s]=A(e);this.sendMessageToServer({...s,vpId:t.serverViewportId},n)}}viewportRpcCall(e){let t=this.getViewportForClient(e.vpId,!1);if(t!=null&&t.serverViewportId){let[n,s]=A(e);this.sendMessageToServer({...s,vpId:t.serverViewportId,namedParams:{}},n)}}rpcCall(e){let[t,n]=A(e),s=We(n.service);this.sendMessageToServer(n,t,{module:s})}handleMessageFromClient(e){var t;if(ge(e))if(e.type===\"disable\"){let n=this.getViewportForClient(e.viewport,!1);return n!==null?this.disableViewport(n):void 0}else{let n=this.getViewportForClient(e.viewport);switch(e.type){case\"setViewRange\":return this.setViewRange(n,e);case\"config\":return this.setConfig(n,e);case\"aggregate\":return this.aggregate(n,e);case\"sort\":return this.sort(n,e);case\"select\":return this.select(n,e);case\"suspend\":return this.suspendViewport(n);case\"resume\":return this.resumeViewport(n);case\"enable\":return this.enableViewport(n);case\"openTreeNode\":return this.openTreeNode(n,e);case\"closeTreeNode\":return this.closeTreeNode(n,e);case\"createLink\":return this.createLink(n,e);case\"removeLink\":return this.removeLink(n);case\"setColumns\":return this.setColumns(n,e);case\"setTitle\":return this.setTitle(n,e);default:}}else{if(Ce(e))return this.viewportRpcCall(e);if(he(e))return this.menuRpcCall(e);{let{type:n,requestId:s}=e;switch(n){case\"GET_TABLE_LIST\":{(t=this.tableList)!=null||(this.tableList=this.awaitResponseToMessage({type:n},s)),this.tableList.then(o=>{this.postMessageToClient({type:\"TABLE_LIST_RESP\",tables:o.tables,requestId:s})});return}case\"GET_TABLE_META\":{this.getTableMeta(e.table,s).then(o=>{o&&this.postMessageToClient({type:\"TABLE_META_RESP\",tableSchema:o,requestId:s})});return}case\"RPC_CALL\":return this.rpcCall(e);default:}}}y(\\`Vuu ServerProxy Unexpected message from client \\${JSON.stringify(e)}\\`)}getTableMeta(e,t=R()){if(O(e))return Promise.resolve(void 0);let n=\\`\\${e.module}:\\${e.table}\\`,s=this.cachedTableMetaRequests.get(n);return s||(s=this.awaitResponseToMessage({type:\"GET_TABLE_META\",table:e},t),this.cachedTableMetaRequests.set(n,s)),s==null?void 0:s.then(o=>this.cacheTableMeta(o))}awaitResponseToMessage(e,t=R()){return new Promise((n,s)=>{this.sendMessageToServer(e,t),this.pendingRequests.set(t,{reject:s,resolve:n})})}sendIfReady(e,t,n=!0){return n&&this.sendMessageToServer(e,t),n}sendMessageToServer(e,t=\\`\\${Ue++}\\`,n=mt){let{module:s=\"CORE\"}=n;this.authToken&&this.connection.send({requestId:t,sessionId:this.sessionId,token:this.authToken,user:this.user,module:s,body:e})}handleMessageFromServer(e){var u;let{body:t,requestId:n,sessionId:s}=e,o=this.pendingRequests.get(n);if(o){let{resolve:a}=o;this.pendingRequests.delete(n),a(t);return}let{viewports:i}=this;switch(t.type){case De:this.sendMessageToServer({type:Ie,ts:+new Date},\"NA\");break;case\"LOGIN_SUCCESS\":if(s)this.sessionId=s,(u=this.pendingLogin)==null||u.resolve(s),this.pendingLogin=void 0;else throw Error(\"LOGIN_SUCCESS did not provide sessionId\");break;case\"REMOVE_VP_SUCCESS\":{let a=i.get(t.viewPortId);a&&(this.mapClientToServerViewport.delete(a.clientViewportId),i.delete(t.viewPortId),this.removeViewportFromVisualLinks(t.viewPortId))}break;case Oe:{let a=this.viewports.get(t.vpId);a&&a.completeOperation(n)}break;case Te:case ve:if(i.has(t.viewPortId)){let a=this.viewports.get(t.viewPortId);if(a){let c=a.completeOperation(n);c!==void 0&&(this.postMessageToClient(c),Y&&V(\\`postMessageToClient \\${JSON.stringify(c)}\\`))}}break;case ye:{let a=this.viewports.get(t.viewPortId);if(a){let c=a.completeOperation(n);if(c){this.postMessageToClient(c);let[g,S]=a.resume();this.postMessageToClient({clientViewportId:a.clientViewportId,mode:\"batch\",rows:S,size:g,type:\"viewport-update\"})}}}break;case\"TABLE_ROW\":{let a=Se(t.rows);for(let[c,g]of Object.entries(a)){let S=i.get(c);S?S.updateRows(g):Q==null||Q(\\`TABLE_ROW message received for non registered viewport \\${c}\\`)}this.processUpdates()}break;case\"CHANGE_VP_RANGE_SUCCESS\":{let a=this.viewports.get(t.viewPortId);if(a){let{from:c,to:g}=t;a.completeOperation(n,c,g)}}break;case ke:case we:break;case\"CREATE_VISUAL_LINK_SUCCESS\":{let a=this.viewports.get(t.childVpId),c=this.viewports.get(t.parentVpId);if(a&&c){let{childColumnName:g,parentColumnName:S}=t,D=a.completeOperation(n,g,c.clientViewportId,S);D&&this.postMessageToClient(D)}}break;case\"REMOVE_VISUAL_LINK_SUCCESS\":{let a=this.viewports.get(t.childVpId);if(a){let c=a.completeOperation(n);c&&this.postMessageToClient(c)}}break;case\"VP_VISUAL_LINKS_RESP\":{let a=this.getActiveLinks(t.links),c=this.viewports.get(t.vpId);if(a.length&&c){let g=Tt(a,this.viewports),[S,D]=c.setLinks(g);if(this.postMessageToClient(S),D){let{link:se,parentClientVpId:ze}=D,re=R(),oe=this.mapClientToServerViewport.get(ze);if(oe){let Ke=c.createLink(re,se.fromColumn,oe,se.toColumn);this.sendMessageToServer(Ke,re)}}}}break;case\"VIEW_PORT_MENUS_RESP\":if(t.menu.name){let a=this.viewports.get(t.vpId);if(a){let c=a.setMenu(t.menu);this.postMessageToClient(c)}}break;case\"VP_EDIT_RPC_RESPONSE\":this.postMessageToClient({action:t.action,requestId:n,rpcName:t.rpcName,type:\"VP_EDIT_RPC_RESPONSE\"});break;case\"VP_EDIT_RPC_REJECT\":this.viewports.get(t.vpId)&&this.postMessageToClient({requestId:n,type:\"VP_EDIT_RPC_REJECT\",error:t.error});break;case\"VIEW_PORT_MENU_REJ\":{console.log(\"send menu error back to client\");let{error:a,rpcName:c,vpId:g}=t,S=this.viewports.get(g);S&&this.postMessageToClient({clientViewportId:S.clientViewportId,error:a,rpcName:c,type:\"VIEW_PORT_MENU_REJ\",requestId:n});break}case\"VIEW_PORT_MENU_RESP\":if(me(t)){let{action:a,rpcName:c}=t;this.awaitResponseToMessage({type:\"GET_TABLE_META\",table:a.table}).then(g=>{let S=z(g);this.postMessageToClient({rpcName:c,type:\"VIEW_PORT_MENU_RESP\",action:{...a,tableSchema:S},tableAlreadyOpen:this.isTableOpen(a.table),requestId:n})})}else{let{action:a}=t;this.postMessageToClient({type:\"VIEW_PORT_MENU_RESP\",action:a||Rt,tableAlreadyOpen:a!==null&&this.isTableOpen(a.table),requestId:n})}break;case\"RPC_RESP\":{let{method:a,result:c}=t;this.postMessageToClient({type:\"RPC_RESP\",method:a,result:c,requestId:n})}break;case\"VIEW_PORT_RPC_REPONSE\":{let{method:a,action:c}=t;this.postMessageToClient({type:\"VIEW_PORT_RPC_RESPONSE\",rpcName:a,action:c,requestId:n})}break;case\"ERROR\":y(t.msg);break;default:ft&&T(\\`handleMessageFromServer \\${t.type}.\\`)}}cacheTableMeta(e){let{module:t,table:n}=e.table,s=\\`\\${t}:\\${n}\\`,o=this.cachedTableSchemas.get(s);return o||(o=z(e),this.cachedTableSchemas.set(s,o)),o}isTableOpen(e){if(e){let t=e.table;for(let n of this.viewports.values())if(!n.suspended&&n.table.table===t)return!0}}getActiveLinks(e){return e.filter(t=>{let n=this.viewports.get(t.parentVpId);return n&&!n.suspended})}processUpdates(){this.viewports.forEach(e=>{var t;if(e.hasUpdatesToProcess){let n=e.getClientRows();if(n!==U){let[s,o]=n,i=e.getNewRowCount();(i!==void 0||s&&s.length>0)&&(Y&&V(\\`postMessageToClient #\\${e.clientViewportId} viewport-update \\${o}, \\${(t=s==null?void 0:s.length)!=null?t:\"no\"} rows, size \\${i}\\`),o&&this.postMessageToClient({clientViewportId:e.clientViewportId,mode:o,rows:s,size:i,type:\"viewport-update\"}))}}})}};var{debug:ln,debugEnabled:cn,error:qe,info:w,infoEnabled:bt,warn:_}=b(\"websocket-connection\"),Be={},Z=Symbol(\"setWebsocket\"),F=Symbol(\"connectionCallback\");async function Ge(r,e,t,n=10,s=5){return Be[r]={status:\"connecting\",connect:{allowed:s,remaining:s},reconnect:{allowed:n,remaining:n}},He(r,e,t)}async function X(r){throw Error(\"connection broken\")}async function He(r,e,t,n){let{status:s,connect:o,reconnect:i}=Be[r],u=s===\"connecting\"?o:i;try{t({type:\"connection-status\",status:\"connecting\"});let l=typeof n<\"u\",p=await Et(r,e);console.info(\"%c\\u26A1 %cconnected\",\"font-size: 24px;color: green;font-weight: bold;\",\"color:green; font-size: 14px;\"),n!==void 0&&n[Z](p);let a=n!=null?n:new ee(p,r,e,t),c=l?\"reconnected\":\"connection-open-awaiting-session\";return t({type:\"connection-status\",status:c}),a.status=c,u.remaining=u.allowed,a}catch{let p=--u.remaining>0;if(t({type:\"connection-status\",status:\"disconnected\",reason:\"failed to connect\",retry:p}),p)return wt(r,e,t,n,2e3);throw t({type:\"connection-status\",status:\"failed\",reason:\"unable to connect\",retry:p}),Error(\"Failed to establish connection\")}}var wt=(r,e,t,n,s)=>new Promise(o=>{setTimeout(()=>{o(He(r,e,t,n))},s)}),Et=(r,e)=>new Promise((t,n)=>{bt&&e!==void 0&&w(\\`WebSocket Protocol \\${e==null?void 0:e.toString()}\\`);let s=new WebSocket(r,e);s.onopen=()=>t(s),s.onerror=o=>n(o)}),\\$e=()=>{_==null||_(\"Connection cannot be closed, socket not yet opened\")},Fe=r=>{_==null||_(\\`Message cannot be sent, socket closed \\${r.body.type}\\`)},Vt=r=>{try{return JSON.parse(r)}catch{throw Error(\\`Error parsing JSON response from server \\${r}\\`)}},ee=class{constructor(e,t,n,s){this.close=\\$e;this.requiresLogin=!0;this.send=Fe;this.status=\"ready\";this.messagesCount=0;this.connectionMetricsInterval=null;this.handleWebsocketMessage=e=>{let t=Vt(e.data);this.messagesCount+=1,this[F](t)};this.url=t,this.protocol=n,this[F]=s,this[Z](e)}reconnect(){X(this)}[(F,Z)](e){let t=this[F];e.onmessage=o=>{this.status=\"connected\",e.onmessage=this.handleWebsocketMessage,this.handleWebsocketMessage(o)},this.connectionMetricsInterval=setInterval(()=>{t({type:\"connection-metrics\",messagesLength:this.messagesCount}),this.messagesCount=0},2e3),e.onerror=()=>{qe(\"\\u26A1 connection error\"),t({type:\"connection-status\",status:\"disconnected\",reason:\"error\"}),this.connectionMetricsInterval&&(clearInterval(this.connectionMetricsInterval),this.connectionMetricsInterval=null),this.status===\"connection-open-awaiting-session\"?qe(\"Websocket connection lost before Vuu session established, check websocket configuration\"):this.status!==\"closed\"&&(X(this),this.send=s)},e.onclose=()=>{w==null||w(\"\\u26A1 connection close\"),t({type:\"connection-status\",status:\"disconnected\",reason:\"close\"}),this.connectionMetricsInterval&&(clearInterval(this.connectionMetricsInterval),this.connectionMetricsInterval=null),this.status!==\"closed\"&&(X(this),this.send=s)};let n=o=>{e.send(JSON.stringify(o))},s=o=>{w==null||w(\\`TODO queue message until websocket reconnected \\${o.body.type}\\`)};this.send=n,this.close=()=>{this.status=\"closed\",e.close(),this.close=\\$e,this.send=Fe,w==null||w(\"close websocket\")}}};var v,{info:te,infoEnabled:ne}=b(\"worker\");async function vt(r,e,t,n,s,o,i){let u=await Ge(r,e,l=>{de(l)?postMessage({type:\"connection-metrics\",messages:l}):pe(l)?(s(l),l.status===\"reconnected\"&&v.reconnect()):v.handleMessageFromServer(l)},o,i);v=new \\$(u,l=>Mt(l)),u.requiresLogin&&await v.login(t,n)}function Mt(r){postMessage(r)}var yt=async({data:r})=>{switch(r.type){case\"connect\":try{await vt(r.url,r.protocol,r.token,r.username,postMessage,r.retryLimitDisconnect,r.retryLimitStartup),postMessage({type:\"connected\"})}catch(e){postMessage({type:\"connection-failed\",reason:String(e)})}break;case\"subscribe\":ne&&te(\\`client subscribe: \\${JSON.stringify(r)}\\`),v.subscribe(r);break;case\"unsubscribe\":ne&&te(\\`client unsubscribe: \\${JSON.stringify(r)}\\`),v.unsubscribe(r.viewport);break;default:ne&&te(\\`client message: \\${JSON.stringify(r)}\\`),v.handleMessageFromClient(r)}};self.addEventListener(\"message\",yt);postMessage({type:\"ready\"});\n\n`;"],"names":[],"mappings":";;AAAO,MAAM,gBAAmB,GAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;"}
@@ -1,18 +1,5 @@
1
1
  'use strict';
2
2
 
3
- const MENU_RPC_TYPES = [
4
- "VIEW_PORT_MENUS_SELECT_RPC",
5
- "VIEW_PORT_MENU_TABLE_RPC",
6
- "VIEW_PORT_MENU_ROW_RPC",
7
- "VIEW_PORT_MENU_CELL_RPC",
8
- "VP_EDIT_CELL_RPC",
9
- "VP_EDIT_ROW_RPC",
10
- "VP_EDIT_ADD_ROW_RPC",
11
- "VP_EDIT_DELETE_CELL_RPC",
12
- "VP_EDIT_DELETE_ROW_RPC",
13
- "VP_EDIT_SUBMIT_FORM_RPC"
14
- ];
15
- const isVuuMenuRpcRequest = (message) => MENU_RPC_TYPES.includes(message["type"]);
16
3
  const isVuuRpcRequest = (message) => message["type"] === "VIEW_PORT_RPC_CALL";
17
4
  const stripRequestId = ({
18
5
  requestId,
@@ -57,7 +44,6 @@ const createSchemaFromTableMetadata = ({
57
44
  exports.createSchemaFromTableMetadata = createSchemaFromTableMetadata;
58
45
  exports.getFirstAndLastRows = getFirstAndLastRows;
59
46
  exports.groupRowsByViewport = groupRowsByViewport;
60
- exports.isVuuMenuRpcRequest = isVuuMenuRpcRequest;
61
47
  exports.isVuuRpcRequest = isVuuRpcRequest;
62
48
  exports.stripRequestId = stripRequestId;
63
49
  //# sourceMappingURL=message-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"message-utils.js","sources":["../src/message-utils.ts"],"sourcesContent":["import {\n TableSchema,\n VuuUIMessageOut,\n WithRequestId,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n ClientToServerMenuRPC,\n ClientToServerViewportRpcCall,\n VuuRow,\n VuuRpcRequest,\n VuuTable,\n VuuTableMeta,\n} from \"@vuu-ui/vuu-protocol-types\";\n\nconst MENU_RPC_TYPES = [\n \"VIEW_PORT_MENUS_SELECT_RPC\",\n \"VIEW_PORT_MENU_TABLE_RPC\",\n \"VIEW_PORT_MENU_ROW_RPC\",\n \"VIEW_PORT_MENU_CELL_RPC\",\n \"VP_EDIT_CELL_RPC\",\n \"VP_EDIT_ROW_RPC\",\n \"VP_EDIT_ADD_ROW_RPC\",\n \"VP_EDIT_DELETE_CELL_RPC\",\n \"VP_EDIT_DELETE_ROW_RPC\",\n \"VP_EDIT_SUBMIT_FORM_RPC\",\n];\n\nexport const isVuuMenuRpcRequest = (\n message: VuuUIMessageOut | VuuRpcRequest | ClientToServerMenuRPC\n): message is ClientToServerMenuRPC => MENU_RPC_TYPES.includes(message[\"type\"]);\n\nexport const isVuuRpcRequest = (\n message:\n | VuuUIMessageOut\n | VuuRpcRequest\n | ClientToServerMenuRPC\n | ClientToServerViewportRpcCall\n): message is ClientToServerViewportRpcCall =>\n message[\"type\"] === \"VIEW_PORT_RPC_CALL\";\n\nexport const stripRequestId = <T>({\n requestId,\n ...rest\n}: WithRequestId<T>): [string, T] => [requestId, rest as T];\n\nexport const getFirstAndLastRows = (\n rows: VuuRow[]\n): [VuuRow, VuuRow] | [VuuRow] => {\n let firstRow = rows.at(0) as VuuRow;\n if (firstRow.updateType === \"SIZE\") {\n if (rows.length === 1) {\n return rows as [VuuRow];\n } else {\n firstRow = rows.at(1) as VuuRow;\n }\n }\n const lastRow = rows.at(-1) as VuuRow;\n return [firstRow, lastRow];\n};\n\nexport type ViewportRowMap = { [key: string]: VuuRow[] };\nexport const groupRowsByViewport = (rows: VuuRow[]): ViewportRowMap => {\n const result: ViewportRowMap = {};\n for (const row of rows) {\n const rowsForViewport =\n result[row.viewPortId] || (result[row.viewPortId] = []);\n rowsForViewport.push(row);\n }\n return result;\n};\n\nexport interface VuuTableMetaWithTable extends VuuTableMeta {\n table: VuuTable;\n}\n\nexport const createSchemaFromTableMetadata = ({\n columns,\n dataTypes,\n key,\n table,\n}: VuuTableMetaWithTable): Readonly<TableSchema> => {\n return {\n table,\n columns: columns.map((col, idx) => ({\n name: col,\n serverDataType: dataTypes[idx],\n })),\n key,\n };\n};\n"],"names":[],"mappings":";;AAcA,MAAM,cAAiB,GAAA;AAAA,EACrB,4BAAA;AAAA,EACA,0BAAA;AAAA,EACA,wBAAA;AAAA,EACA,yBAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,qBAAA;AAAA,EACA,yBAAA;AAAA,EACA,wBAAA;AAAA,EACA,yBAAA;AACF,CAAA,CAAA;AAEO,MAAM,sBAAsB,CACjC,OAAA,KACqC,eAAe,QAAS,CAAA,OAAA,CAAQ,MAAM,CAAC,EAAA;AAEvE,MAAM,eAAkB,GAAA,CAC7B,OAMA,KAAA,OAAA,CAAQ,MAAM,CAAM,KAAA,qBAAA;AAEf,MAAM,iBAAiB,CAAI;AAAA,EAChC,SAAA;AAAA,EACA,GAAG,IAAA;AACL,CAAqC,KAAA,CAAC,WAAW,IAAS,EAAA;AAE7C,MAAA,mBAAA,GAAsB,CACjC,IACgC,KAAA;AAChC,EAAI,IAAA,QAAA,GAAW,IAAK,CAAA,EAAA,CAAG,CAAC,CAAA,CAAA;AACxB,EAAI,IAAA,QAAA,CAAS,eAAe,MAAQ,EAAA;AAClC,IAAI,IAAA,IAAA,CAAK,WAAW,CAAG,EAAA;AACrB,MAAO,OAAA,IAAA,CAAA;AAAA,KACF,MAAA;AACL,MAAW,QAAA,GAAA,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAAA,KACtB;AAAA,GACF;AACA,EAAM,MAAA,OAAA,GAAU,IAAK,CAAA,EAAA,CAAG,CAAE,CAAA,CAAA,CAAA;AAC1B,EAAO,OAAA,CAAC,UAAU,OAAO,CAAA,CAAA;AAC3B,EAAA;AAGa,MAAA,mBAAA,GAAsB,CAAC,IAAmC,KAAA;AACrE,EAAA,MAAM,SAAyB,EAAC,CAAA;AAChC,EAAA,KAAA,MAAW,OAAO,IAAM,EAAA;AACtB,IAAM,MAAA,eAAA,GACJ,OAAO,GAAI,CAAA,UAAU,MAAM,MAAO,CAAA,GAAA,CAAI,UAAU,CAAA,GAAI,EAAC,CAAA,CAAA;AACvD,IAAA,eAAA,CAAgB,KAAK,GAAG,CAAA,CAAA;AAAA,GAC1B;AACA,EAAO,OAAA,MAAA,CAAA;AACT,EAAA;AAMO,MAAM,gCAAgC,CAAC;AAAA,EAC5C,OAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAA;AAAA,EACA,KAAA;AACF,CAAoD,KAAA;AAClD,EAAO,OAAA;AAAA,IACL,KAAA;AAAA,IACA,OAAS,EAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,KAAK,GAAS,MAAA;AAAA,MAClC,IAAM,EAAA,GAAA;AAAA,MACN,cAAA,EAAgB,UAAU,GAAG,CAAA;AAAA,KAC7B,CAAA,CAAA;AAAA,IACF,GAAA;AAAA,GACF,CAAA;AACF;;;;;;;;;"}
1
+ {"version":3,"file":"message-utils.js","sources":["../src/message-utils.ts"],"sourcesContent":["import {\n TableSchema,\n VuuUIMessageOut,\n WithRequestId,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n ClientToServerMenuRPC,\n ClientToServerViewportRpcCall,\n VuuRow,\n VuuRpcRequest,\n VuuTable,\n VuuTableMeta,\n} from \"@vuu-ui/vuu-protocol-types\";\n\nexport const isVuuRpcRequest = (\n message:\n | VuuUIMessageOut\n | VuuRpcRequest\n | ClientToServerMenuRPC\n | ClientToServerViewportRpcCall\n): message is ClientToServerViewportRpcCall =>\n message[\"type\"] === \"VIEW_PORT_RPC_CALL\";\n\nexport const stripRequestId = <T>({\n requestId,\n ...rest\n}: WithRequestId<T>): [string, T] => [requestId, rest as T];\n\nexport const getFirstAndLastRows = (\n rows: VuuRow[]\n): [VuuRow, VuuRow] | [VuuRow] => {\n let firstRow = rows.at(0) as VuuRow;\n if (firstRow.updateType === \"SIZE\") {\n if (rows.length === 1) {\n return rows as [VuuRow];\n } else {\n firstRow = rows.at(1) as VuuRow;\n }\n }\n const lastRow = rows.at(-1) as VuuRow;\n return [firstRow, lastRow];\n};\n\nexport type ViewportRowMap = { [key: string]: VuuRow[] };\nexport const groupRowsByViewport = (rows: VuuRow[]): ViewportRowMap => {\n const result: ViewportRowMap = {};\n for (const row of rows) {\n const rowsForViewport =\n result[row.viewPortId] || (result[row.viewPortId] = []);\n rowsForViewport.push(row);\n }\n return result;\n};\n\nexport interface VuuTableMetaWithTable extends VuuTableMeta {\n table: VuuTable;\n}\n\nexport const createSchemaFromTableMetadata = ({\n columns,\n dataTypes,\n key,\n table,\n}: VuuTableMetaWithTable): Readonly<TableSchema> => {\n return {\n table,\n columns: columns.map((col, idx) => ({\n name: col,\n serverDataType: dataTypes[idx],\n })),\n key,\n };\n};\n"],"names":[],"mappings":";;AAcO,MAAM,eAAkB,GAAA,CAC7B,OAMA,KAAA,OAAA,CAAQ,MAAM,CAAM,KAAA,qBAAA;AAEf,MAAM,iBAAiB,CAAI;AAAA,EAChC,SAAA;AAAA,EACA,GAAG,IAAA;AACL,CAAqC,KAAA,CAAC,WAAW,IAAS,EAAA;AAE7C,MAAA,mBAAA,GAAsB,CACjC,IACgC,KAAA;AAChC,EAAI,IAAA,QAAA,GAAW,IAAK,CAAA,EAAA,CAAG,CAAC,CAAA,CAAA;AACxB,EAAI,IAAA,QAAA,CAAS,eAAe,MAAQ,EAAA;AAClC,IAAI,IAAA,IAAA,CAAK,WAAW,CAAG,EAAA;AACrB,MAAO,OAAA,IAAA,CAAA;AAAA,KACF,MAAA;AACL,MAAW,QAAA,GAAA,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAAA,KACtB;AAAA,GACF;AACA,EAAM,MAAA,OAAA,GAAU,IAAK,CAAA,EAAA,CAAG,CAAE,CAAA,CAAA,CAAA;AAC1B,EAAO,OAAA,CAAC,UAAU,OAAO,CAAA,CAAA;AAC3B,EAAA;AAGa,MAAA,mBAAA,GAAsB,CAAC,IAAmC,KAAA;AACrE,EAAA,MAAM,SAAyB,EAAC,CAAA;AAChC,EAAA,KAAA,MAAW,OAAO,IAAM,EAAA;AACtB,IAAM,MAAA,eAAA,GACJ,OAAO,GAAI,CAAA,UAAU,MAAM,MAAO,CAAA,GAAA,CAAI,UAAU,CAAA,GAAI,EAAC,CAAA,CAAA;AACvD,IAAA,eAAA,CAAgB,KAAK,GAAG,CAAA,CAAA;AAAA,GAC1B;AACA,EAAO,OAAA,MAAA,CAAA;AACT,EAAA;AAMO,MAAM,gCAAgC,CAAC;AAAA,EAC5C,OAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAA;AAAA,EACA,KAAA;AACF,CAAoD,KAAA;AAClD,EAAO,OAAA;AAAA,IACL,KAAA;AAAA,IACA,OAAS,EAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,KAAK,GAAS,MAAA;AAAA,MAClC,IAAM,EAAA,GAAA;AAAA,MACN,cAAA,EAAgB,UAAU,GAAG,CAAA;AAAA,KAC7B,CAAA,CAAA;AAAA,IACF,GAAA;AAAA,GACF,CAAA;AACF;;;;;;;;"}
package/esm/index.js CHANGED
@@ -2,6 +2,6 @@ export { authenticate } from './authenticate.js';
2
2
  export { ConnectionManager, connectToServer, getServerAPI, makeRpcCall } from './connection-manager.js';
3
3
  export { connectionId, msgType } from './constants.js';
4
4
  export { isDataSourceConfigMessage, isSessionTable, isSessionTableActionMessage, isSizeOnly, shouldMessageBeRoutedToDataSource, toDataSourceConfig } from './data-source.js';
5
- export { createSchemaFromTableMetadata, getFirstAndLastRows, groupRowsByViewport, isVuuMenuRpcRequest, isVuuRpcRequest, stripRequestId } from './message-utils.js';
5
+ export { createSchemaFromTableMetadata, getFirstAndLastRows, groupRowsByViewport, isVuuRpcRequest, stripRequestId } from './message-utils.js';
6
6
  export { VuuDataSource } from './vuu-data-source.js';
7
7
  //# sourceMappingURL=index.js.map
@@ -3,8 +3,8 @@ var ie=(r,e,t)=>{if(!e.has(r))throw TypeError("Cannot "+t)};var m=(r,e,t)=>(ie(r
3
3
  keys: \${this.toDebugString()}
4
4
  \`),Error(\`KeySet, no key found for rowIndex \${e}\`);return t}toDebugString(){return\`\${this.keys.size} keys
5
5
  \${Array.from(this.keys.entries()).sort(([e],[t])=>e-t).map(([e,t])=>\`\${e}=>\${t}\`).join(",")}]
6
- \`}};var{SELECTED:Ft}=B,E={False:0,True:1,First:2,Last:4};var ot=(r,e)=>e>=r[0]&&e<=r[1],it=E.True+E.First+E.Last,at=E.True+E.First,ut=E.True+E.Last,H=(r,e)=>{for(let t of r)if(typeof t=="number"){if(t===e)return it}else if(ot(t,e))return e===t[0]?at:e===t[1]?ut:E.True;return E.False};var he=r=>{if(r.every(t=>typeof t=="number"))return r;let e=[];for(let t of r)if(typeof t=="number")e.push(t);else for(let n=t[0];n<=t[1];n++)e.push(n);return e};var fe=r=>r.type==="VIEW_PORT_MENU_RESP"&&r.action!==null&&O(r.action.table),O=r=>r!==null&&typeof r=="object"&&"table"in r&&"module"in r?r.table.startsWith("session"):!1;var lt=["VIEW_PORT_MENUS_SELECT_RPC","VIEW_PORT_MENU_TABLE_RPC","VIEW_PORT_MENU_ROW_RPC","VIEW_PORT_MENU_CELL_RPC","VP_EDIT_CELL_RPC","VP_EDIT_ROW_RPC","VP_EDIT_ADD_ROW_RPC","VP_EDIT_DELETE_CELL_RPC","VP_EDIT_DELETE_ROW_RPC","VP_EDIT_SUBMIT_FORM_RPC"],me=r=>lt.includes(r.type),Ce=r=>r.type==="VIEW_PORT_RPC_CALL",A=({requestId:r,...e})=>[r,e],Re=r=>{let e=r.at(0);if(e.updateType==="SIZE"){if(r.length===1)return r;e=r.at(1)}let t=r.at(-1);return[e,t]},Se=r=>{let e={};for(let t of r)(e[t.viewPortId]||(e[t.viewPortId]=[])).push(t);return e},z=({columns:r,dataTypes:e,key:t,table:n})=>({table:n,columns:r.map((s,o)=>({name:s,serverDataType:e[o]})),key:t});var Te="CHANGE_VP_SUCCESS";var be="CLOSE_TREE_NODE",we="CLOSE_TREE_SUCCESS";var Ee="CREATE_VP",Ve="DISABLE_VP",ve="DISABLE_VP_SUCCESS";var Me="ENABLE_VP",ye="ENABLE_VP_SUCCESS";var K="GET_VP_VISUAL_LINKS",_e="GET_VIEW_PORT_MENUS";var De="HB",Ie="HB_RESP",Pe="LOGIN",Le="OPEN_TREE_NODE",ke="OPEN_TREE_SUCCESS";var xe="REMOVE_VP";var Oe="SET_SELECTION_SUCCESS";var We=r=>{switch(r){case"TypeAheadRpcHandler":return"TYPEAHEAD";default:return"SIMUL"}};var Ne=[],C=b("array-backed-moving-window");function ct(r,e){if(!e||e.data.length!==r.data.length||e.sel!==r.sel)return!1;for(let t=0;t<e.data.length;t++)if(e.data[t]!==r.data[t])return!1;return!0}var h,W=class{constructor({from:e,to:t},{from:n,to:s},o){ae(this,h,void 0);this.setRowCount=e=>{var t;if((t=C.info)==null||t.call(C,\`setRowCount \${e}\`),e<this.internalData.length&&(this.internalData.length=e),e<this.rowCount){this.rowsWithinRange=0;let n=Math.min(e,this.clientRange.to);for(let s=this.clientRange.from;s<n;s++){let o=s-m(this,h).from;this.internalData[o]!==void 0&&(this.rowsWithinRange+=1)}}this.rowCount=e};this.bufferBreakout=(e,t)=>{let n=this.bufferSize*.25;return m(this,h).to-t<n?!0:m(this,h).from>0&&e-m(this,h).from<n};this.bufferSize=o,this.clientRange=new I(e,t),ue(this,h,new I(n,s)),this.internalData=new Array(o),this.rowsWithinRange=0,this.rowCount=0}get range(){return m(this,h)}get hasAllRowsWithinRange(){return this.rowsWithinRange===this.clientRange.to-this.clientRange.from||this.rowCount>0&&this.clientRange.from+this.rowsWithinRange===this.rowCount}outOfRange(e,t){let{from:n,to:s}=this.range;if(t<n||e>=s)return!0}setAtIndex(e){let{rowIndex:t}=e,n=t-m(this,h).from;if(ct(e,this.internalData[n]))return!1;let s=this.isWithinClientRange(t);return(s||this.isWithinRange(t))&&(!this.internalData[n]&&s&&(this.rowsWithinRange+=1),this.internalData[n]=e),s}getAtIndex(e){return m(this,h).isWithin(e)&&this.internalData[e-m(this,h).from]!=null?this.internalData[e-m(this,h).from]:void 0}isWithinRange(e){return m(this,h).isWithin(e)}isWithinClientRange(e){return this.clientRange.isWithin(e)}setClientRange(e,t){var p;(p=C.debug)==null||p.call(C,\`setClientRange \${e} - \${t}\`);let n=this.clientRange.from,s=Math.min(this.clientRange.to,this.rowCount);if(e===n&&t===s)return[!1,Ne];let o=this.clientRange.copy();this.clientRange.from=e,this.clientRange.to=t,this.rowsWithinRange=0;for(let a=e;a<t;a++){let c=a-m(this,h).from;this.internalData[c]&&(this.rowsWithinRange+=1)}let i=Ne,u=m(this,h).from;if(this.hasAllRowsWithinRange)if(t>o.to){let a=Math.max(e,o.to);i=this.internalData.slice(a-u,t-u)}else{let a=Math.min(o.from,t);i=this.internalData.slice(e-u,a-u)}return[this.bufferBreakout(e,t),i]}setRange(e,t){var n,s;if(e!==m(this,h).from||t!==m(this,h).to){(n=C.debug)==null||n.call(C,\`setRange \${e} - \${t}\`);let[o,i]=m(this,h).overlap(e,t),u=new Array(t-e);this.rowsWithinRange=0;for(let l=o;l<i;l++){let p=this.getAtIndex(l);if(p){let a=l-e;u[a]=p,this.isWithinClientRange(l)&&(this.rowsWithinRange+=1)}}this.internalData=u,m(this,h).from=e,m(this,h).to=t}else(s=C.debug)==null||s.call(C,\`setRange \${e} - \${t} IGNORED because not changed\`)}get data(){return this.internalData}getData(){var u;let{from:e,to:t}=m(this,h),{from:n,to:s}=this.clientRange,o=Math.max(0,n-e),i=Math.min(t-e,t,s-e,(u=this.rowCount)!=null?u:t);return this.internalData.slice(o,i)}clear(){var e;(e=C.debug)==null||e.call(C,"clear"),this.internalData.length=0,this.rowsWithinRange=0,this.setRowCount(0)}getCurrentDataRange(){let e=this.internalData,t=e.length,[n]=this.internalData,s=this.internalData[t-1];if(n&&s)return[n.rowIndex,s.rowIndex];for(let o=0;o<t;o++)if(e[o]!==void 0){n=e[o];break}for(let o=t-1;o>=0;o--)if(e[o]!==void 0){s=e[o];break}return n&&s?[n.rowIndex,s.rowIndex]:[-1,-1]}};h=new WeakMap;var{debug:f,debugEnabled:N,error:pt,info:d,infoEnabled:dt,warn:M}=b("viewport"),gt=({rowKey:r,updateType:e})=>e==="U"&&!r.startsWith("$root"),U=[void 0,void 0],ht={count:0,mode:void 0,size:0,ts:0},q=class{constructor({aggregations:e,bufferSize:t=50,columns:n,filter:s,groupBy:o=[],table:i,range:u,sort:l,title:p,viewport:a,visualLink:c},g){this.batchMode=!0;this.hasUpdates=!1;this.pendingUpdates=[];this.pendingOperations=new Map;this.pendingRangeRequests=[];this.rowCountChanged=!1;this.selectedRows=[];this.useBatchMode=!0;this.lastUpdateStatus=ht;this.updateThrottleTimer=void 0;this.rangeMonitor=new k("ViewPort");this.disabled=!1;this.isTree=!1;this.status="";this.suspended=!1;this.suspendTimer=null;this.setLastSizeOnlyUpdateSize=e=>{this.lastUpdateStatus.size=e};this.setLastUpdate=e=>{let{ts:t,mode:n}=this.lastUpdateStatus,s=0;if(n===e){let o=Date.now();this.lastUpdateStatus.count+=1,this.lastUpdateStatus.ts=o,s=t===0?0:o-t}else this.lastUpdateStatus.count=1,this.lastUpdateStatus.ts=0,s=0;return this.lastUpdateStatus.mode=e,s};this.rangeRequestAlreadyPending=e=>{let{bufferSize:t}=this,n=t*.25,{from:s}=e;for(let{from:o,to:i}of this.pendingRangeRequests)if(s>=o&&s<i){if(e.to+n<=i)return!0;s=i}return!1};this.sendThrottledSizeMessage=()=>{this.updateThrottleTimer=void 0,this.lastUpdateStatus.count=3,this.postMessageToClient({clientViewportId:this.clientViewportId,mode:"size-only",size:this.lastUpdateStatus.size,type:"viewport-update"})};this.shouldThrottleMessage=e=>{let t=this.setLastUpdate(e);return e==="size-only"&&t>0&&t<500&&this.lastUpdateStatus.count>3};this.throttleMessage=e=>this.shouldThrottleMessage(e)?(d==null||d("throttling updates setTimeout to 2000"),this.updateThrottleTimer===void 0&&(this.updateThrottleTimer=setTimeout(this.sendThrottledSizeMessage,2e3)),!0):(this.updateThrottleTimer!==void 0&&(clearTimeout(this.updateThrottleTimer),this.updateThrottleTimer=void 0),!1);this.getNewRowCount=()=>{if(this.rowCountChanged&&this.dataWindow)return this.rowCountChanged=!1,this.dataWindow.rowCount};this.aggregations=e,this.bufferSize=t,this.clientRange=u,this.clientViewportId=a,this.columns=n,this.filter=s,this.groupBy=o,this.keys=new x(u),this.pendingLinkedParent=c,this.table=i,this.sort=l,this.title=p,dt&&(d==null||d(\`constructor #\${a} \${i.table} bufferSize=\${t}\`)),this.dataWindow=new W(this.clientRange,u,this.bufferSize),this.postMessageToClient=g}get hasUpdatesToProcess(){return this.suspended?!1:this.rowCountChanged||this.hasUpdates}get size(){var e;return(e=this.dataWindow.rowCount)!=null?e:0}subscribe(){let{filter:e}=this.filter;return this.status=this.status==="subscribed"?"resubscribing":"subscribing",{type:Ee,table:this.table,range:G(this.clientRange,this.bufferSize),aggregations:this.aggregations,columns:this.columns,sort:this.sort,groupBy:this.groupBy,filterSpec:{filter:e}}}handleSubscribed({viewPortId:e,aggregations:t,columns:n,filterSpec:s,range:o,sort:i,groupBy:u,table:l},p){this.serverViewportId=e,this.status="subscribed",this.aggregations=t,this.columns=n,this.groupBy=u,this.isTree=u&&u.length>0,this.dataWindow.setRange(o.from,o.to);let a=l===p.table.table?p:{...p,table:{...p.table,session:l}};return{aggregations:t,type:"subscribed",clientViewportId:this.clientViewportId,columns:n,filter:s,groupBy:u,range:o,sort:i,tableSchema:a}}awaitOperation(e,t){this.pendingOperations.set(e,t)}completeOperation(e,...t){var u;let{clientViewportId:n,pendingOperations:s}=this,o=s.get(e);if(!o){pt(\`no matching operation found to complete for requestId \${e}\`);return}let{type:i}=o;if(d==null||d(\`completeOperation \${i}\`),s.delete(e),i==="CHANGE_VP_RANGE"){let[l,p]=t;(u=this.dataWindow)==null||u.setRange(l,p);for(let a=this.pendingRangeRequests.length-1;a>=0;a--){let c=this.pendingRangeRequests[a];if(c.requestId===e){c.acked=!0;break}else M==null||M("range requests sent faster than they are being ACKed")}}else if(i==="config"){let{aggregations:l,columns:p,filter:a,groupBy:c,sort:g}=o.data;return this.aggregations=l,this.columns=p,this.filter=a,this.groupBy=c,this.sort=g,c.length>0?this.isTree=!0:this.isTree&&(this.isTree=!1),f==null||f(\`config change confirmed, isTree : \${this.isTree}\`),{clientViewportId:n,type:i,config:o.data}}else{if(i==="groupBy")return this.isTree=o.data.length>0,this.groupBy=o.data,f==null||f(\`groupBy change confirmed, isTree : \${this.isTree}\`),{clientViewportId:n,type:i,groupBy:o.data};if(i==="columns")return this.columns=o.data,{clientViewportId:n,type:i,columns:o.data};if(i==="filter")return this.filter=o.data,{clientViewportId:n,type:i,filter:o.data};if(i==="aggregate")return this.aggregations=o.data,{clientViewportId:n,type:"aggregate",aggregations:this.aggregations};if(i==="sort")return this.sort=o.data,{clientViewportId:n,type:i,sort:this.sort};if(i!=="selection"){if(i==="disable")return this.disabled=!0,{type:"disabled",clientViewportId:n};if(i==="enable")return this.disabled=!1,{type:"enabled",clientViewportId:n};if(i==="CREATE_VISUAL_LINK"){let[l,p,a]=t;return this.linkedParent={colName:l,parentViewportId:p,parentColName:a},this.pendingLinkedParent=void 0,{type:"vuu-link-created",clientViewportId:n,colName:l,parentViewportId:p,parentColName:a}}else if(i==="REMOVE_VISUAL_LINK")return this.linkedParent=void 0,{type:"vuu-link-removed",clientViewportId:n}}}}rangeRequest(e,t){N&&this.rangeMonitor.set(t);let n="CHANGE_VP_RANGE";if(this.dataWindow){let[s,o]=this.dataWindow.setClientRange(t.from,t.to),i,u=this.dataWindow.rowCount||void 0,l=s&&!this.rangeRequestAlreadyPending(t)?{type:n,viewPortId:this.serverViewportId,...G(t,this.bufferSize,u)}:null;if(l){N&&(f==null||f(\`create CHANGE_VP_RANGE: [\${l.from} - \${l.to}]\`)),this.awaitOperation(e,{type:n});let a=this.pendingRangeRequests.at(-1);if(a)if(a.acked)console.warn("Range Request before previous request is filled");else{let{from:c,to:g}=a;this.dataWindow.outOfRange(c,g)?i={clientViewportId:this.clientViewportId,type:"debounce-begin"}:M==null||M("Range Request before previous request is acked")}this.pendingRangeRequests.push({...l,requestId:e}),this.useBatchMode&&(this.batchMode=!0)}else o.length>0&&(this.batchMode=!1);this.keys.reset(this.dataWindow.clientRange);let p=this.isTree?j:J;return o.length?[l,o.map(a=>p(a,this.keys,this.selectedRows))]:i?[l,void 0,i]:[l]}else return[null]}setLinks(e){return this.links=e,[{type:"vuu-links",links:e,clientViewportId:this.clientViewportId},this.pendingLinkedParent]}setMenu(e){return{type:"vuu-menu",menu:e,clientViewportId:this.clientViewportId}}openTreeNode(e,t){return this.useBatchMode&&(this.batchMode=!0),{type:Le,vpId:this.serverViewportId,treeKey:t.key}}closeTreeNode(e,t){return this.useBatchMode&&(this.batchMode=!0),{type:be,vpId:this.serverViewportId,treeKey:t.key}}createLink(e,t,n,s){let o={type:"CREATE_VISUAL_LINK",parentVpId:n,childVpId:this.serverViewportId,parentColumnName:s,childColumnName:t};return this.awaitOperation(e,o),this.useBatchMode&&(this.batchMode=!0),o}removeLink(e){let t={type:"REMOVE_VISUAL_LINK",childVpId:this.serverViewportId};return this.awaitOperation(e,t),t}suspend(){this.suspended=!0,d==null||d("suspend")}resume(){return this.suspended=!1,N&&(f==null||f(\`resume: \${this.currentData()}\`)),[this.size,this.currentData()]}currentData(){let e=[];if(this.dataWindow){let t=this.dataWindow.getData(),{keys:n}=this,s=this.isTree?j:J;for(let o of t)o&&e.push(s(o,n,this.selectedRows))}return e}enable(e){return this.awaitOperation(e,{type:"enable"}),d==null||d(\`enable: \${this.serverViewportId}\`),{type:Me,viewPortId:this.serverViewportId}}disable(e){return this.awaitOperation(e,{type:"disable"}),d==null||d(\`disable: \${this.serverViewportId}\`),this.suspended=!1,{type:Ve,viewPortId:this.serverViewportId}}columnRequest(e,t){return this.awaitOperation(e,{type:"columns",data:t}),f==null||f(\`columnRequest: \${t}\`),this.createRequest({columns:t})}setConfig(e,t){var o;this.awaitOperation(e,{type:"config",data:t});let{filter:n,...s}=t;return this.useBatchMode&&(this.batchMode=!0),N?f==null||f(\`setConfig \${JSON.stringify(t)}\`):d==null||d("setConfig"),!this.isTree&&t.groupBy.length>0&&((o=this.dataWindow)==null||o.clear()),this.createRequest({...s,filterSpec:typeof(n==null?void 0:n.filter)=="string"?{filter:n.filter}:{filter:""}},!0)}aggregateRequest(e,t){return this.awaitOperation(e,{type:"aggregate",data:t}),d==null||d(\`aggregateRequest: \${t}\`),this.createRequest({aggregations:t})}sortRequest(e,t){return this.awaitOperation(e,{type:"sort",data:t}),d==null||d(\`sortRequest: \${JSON.stringify(t.sortDefs)}\`),this.createRequest({sort:t})}selectRequest(e,t){return this.selectedRows=t,this.awaitOperation(e,{type:"selection",data:t}),d==null||d(\`selectRequest: \${t}\`),{type:"SET_SELECTION",vpId:this.serverViewportId,selection:he(t)}}removePendingRangeRequest(e,t){for(let n=this.pendingRangeRequests.length-1;n>=0;n--){let{from:s,to:o}=this.pendingRangeRequests[n],i=!0;if(e>=s&&e<o||t>s&&t<o){i||console.warn("removePendingRangeRequest TABLE_ROWS are not for latest request"),this.pendingRangeRequests.splice(n,1);break}else i=!1}}updateRows(e){var s,o,i;let[t,n]=Re(e);if(t&&n&&this.removePendingRangeRequest(t.rowIndex,n.rowIndex),e.length===1)if(t.vpSize===0&&this.disabled){f==null||f(\`ignore a SIZE=0 message on disabled viewport (\${e.length} rows)\`);return}else t.updateType==="SIZE"&&this.setLastSizeOnlyUpdateSize(t.vpSize);for(let u of e)this.isTree&&gt(u)||((u.updateType==="SIZE"||((s=this.dataWindow)==null?void 0:s.rowCount)!==u.vpSize)&&((o=this.dataWindow)==null||o.setRowCount(u.vpSize),this.rowCountChanged=!0),u.updateType==="U"&&(i=this.dataWindow)!=null&&i.setAtIndex(u)&&(this.hasUpdates=!0,this.batchMode||this.pendingUpdates.push(u)))}getClientRows(){let e,t="size-only";if(!this.hasUpdates&&!this.rowCountChanged)return U;if(this.hasUpdates){let{keys:n,selectedRows:s}=this,o=this.isTree?j:J;if(this.updateThrottleTimer&&(self.clearTimeout(this.updateThrottleTimer),this.updateThrottleTimer=void 0),this.pendingUpdates.length>0){e=[],t="update";for(let i of this.pendingUpdates)e.push(o(i,n,s));this.pendingUpdates.length=0}else{let i=this.dataWindow.getData();if(this.dataWindow.hasAllRowsWithinRange){e=[],t="batch";for(let u of i)e.push(o(u,n,s));this.batchMode=!1}}this.hasUpdates=!1}return this.throttleMessage(t)?U:[e,t]}createRequest(e,t=!1){return t?{type:"CHANGE_VP",viewPortId:this.serverViewportId,...e}:{type:"CHANGE_VP",viewPortId:this.serverViewportId,aggregations:this.aggregations,columns:this.columns,sort:this.sort,groupBy:this.groupBy,filterSpec:{filter:this.filter.filter},...e}}},J=({rowIndex:r,rowKey:e,sel:t,data:n},s,o)=>[r,s.keyFor(r),!0,!1,0,0,e,t?H(o,r):0].concat(n),j=({rowIndex:r,rowKey:e,sel:t,data:n},s,o)=>{let[i,u,,l,,p,...a]=n;return[r,s.keyFor(r),l,u,i,p,e,t?H(o,r):0].concat(a)};var Ue=1;var{debug:V,debugEnabled:Y,error:y,info:T,infoEnabled:ft,warn:Q}=b("server-proxy"),R=()=>\`\${Ue++}\`,mt={},Ct=r=>r.disabled!==!0&&r.suspended!==!0,Rt={type:"NO_ACTION"},St=(r,e,t)=>r.map(n=>n.parentVpId===e?{...n,label:t}:n);function Tt(r,e){return r.map(t=>{let{parentVpId:n}=t,s=e.get(n);if(s)return{...t,parentClientVpId:s.clientViewportId,label:s.title};throw Error("addLabelsToLinks viewport not found")})}var $=class{constructor(e,t){this.authToken="";this.user="user";this.pendingRequests=new Map;this.queuedRequests=[];this.cachedTableMetaRequests=new Map;this.cachedTableSchemas=new Map;this.connection=e,this.postMessageToClient=t,this.viewports=new Map,this.mapClientToServerViewport=new Map}async reconnect(){await this.login(this.authToken);let[e,t]=le(Array.from(this.viewports.values()),Ct);this.viewports.clear(),this.mapClientToServerViewport.clear();let n=s=>{s.forEach(o=>{let{clientViewportId:i}=o;this.viewports.set(i,o),this.sendMessageToServer(o.subscribe(),i)})};n(e),setTimeout(()=>{n(t)},2e3)}async login(e,t="user"){if(e)return this.authToken=e,this.user=t,new Promise((n,s)=>{this.sendMessageToServer({type:Pe,token:this.authToken,user:t},""),this.pendingLogin={resolve:n,reject:s}});this.authToken===""&&y("login, cannot login until auth token has been obtained")}subscribe(e){if(this.mapClientToServerViewport.has(e.viewport))y(\`spurious subscribe call \${e.viewport}\`);else{let t=this.getTableMeta(e.table),n=new q(e,this.postMessageToClient);this.viewports.set(e.viewport,n);let s=this.awaitResponseToMessage(n.subscribe(),e.viewport);Promise.all([s,t]).then(([i,u])=>{let{viewPortId:l}=i,{status:p}=n;e.viewport!==l&&(this.viewports.delete(e.viewport),this.viewports.set(l,n)),this.mapClientToServerViewport.set(e.viewport,l);let a=n.handleSubscribed(i,u);a&&(this.postMessageToClient(a),Y&&V(\`post DataSourceSubscribedMessage to client: \${JSON.stringify(a)}\`)),n.disabled&&this.disableViewport(n),this.queuedRequests.length>0&&this.processQueuedRequests(),p==="subscribing"&&!O(n.table)&&(this.sendMessageToServer({type:K,vpId:l}),this.sendMessageToServer({type:_e,vpId:l}),Array.from(this.viewports.entries()).filter(([c,{disabled:g}])=>c!==l&&!g).forEach(([c])=>{this.sendMessageToServer({type:K,vpId:c})}))})}}processQueuedRequests(){let e={};for(;this.queuedRequests.length;){let t=this.queuedRequests.pop();if(t){let{clientViewportId:n,message:s,requestId:o}=t;if(s.type==="CHANGE_VP_RANGE"){if(e.CHANGE_VP_RANGE)continue;e.CHANGE_VP_RANGE=!0;let i=this.mapClientToServerViewport.get(n);i&&this.sendMessageToServer({...s,viewPortId:i},o)}}}}unsubscribe(e){let t=this.mapClientToServerViewport.get(e);t?(T==null||T(\`Unsubscribe Message (Client to Server):
7
- \${t}\`),this.sendMessageToServer({type:xe,viewPortId:t})):y(\`failed to unsubscribe client viewport \${e}, viewport not found\`)}getViewportForClient(e,t=!0){let n=this.mapClientToServerViewport.get(e);if(n){let s=this.viewports.get(n);if(s)return s;if(t)throw Error(\`Viewport not found for client viewport \${e}\`);return null}else{if(this.viewports.has(e))return this.viewports.get(e);if(t)throw Error(\`Viewport server id not found for client viewport \${e}\`);return null}}setViewRange(e,t){let n=R(),[s,o,i]=e.rangeRequest(n,t.range);T==null||T(\`setViewRange \${t.range.from} - \${t.range.to}\`),s&&(this.sendIfReady(s,n,e.status==="subscribed")||this.queuedRequests.push({clientViewportId:t.viewport,message:s,requestId:n})),o?(T==null||T(\`setViewRange \${o.length} rows returned from cache\`),this.postMessageToClient({mode:"batch",type:"viewport-update",clientViewportId:e.clientViewportId,rows:o})):i&&this.postMessageToClient(i)}setConfig(e,t){let n=R(),s=e.setConfig(n,t.config);this.sendIfReady(s,n,e.status==="subscribed")}aggregate(e,t){let n=R(),s=e.aggregateRequest(n,t.aggregations);this.sendIfReady(s,n,e.status==="subscribed")}sort(e,t){let n=R(),s=e.sortRequest(n,t.sort);this.sendIfReady(s,n,e.status==="subscribed")}setColumns(e,t){let n=R(),{columns:s}=t,o=e.columnRequest(n,s);this.sendIfReady(o,n,e.status==="subscribed")}setTitle(e,t){e&&(e.title=t.title,this.updateTitleOnVisualLinks(e))}select(e,t){let n=R(),{selected:s}=t,o=e.selectRequest(n,s);this.sendIfReady(o,n,e.status==="subscribed")}disableViewport(e){let t=R(),n=e.disable(t);this.sendIfReady(n,t,e.status==="subscribed")}enableViewport(e){if(e.disabled){let t=R(),n=e.enable(t);this.sendIfReady(n,t,e.status==="subscribed")}}suspendViewport(e){e.suspend(),e.suspendTimer=setTimeout(()=>{T==null||T("suspendTimer expired, escalate suspend to disable"),this.disableViewport(e)},3e3)}resumeViewport(e){e.suspendTimer&&(V==null||V("clear suspend timer"),clearTimeout(e.suspendTimer),e.suspendTimer=null);let[t,n]=e.resume();V==null||V(\`resumeViewport size \${t}, \${n.length} rows sent to client\`),this.postMessageToClient({clientViewportId:e.clientViewportId,mode:"batch",rows:n,size:t,type:"viewport-update"})}openTreeNode(e,t){if(e.serverViewportId){let n=R();this.sendIfReady(e.openTreeNode(n,t),n,e.status==="subscribed")}}closeTreeNode(e,t){if(e.serverViewportId){let n=R();this.sendIfReady(e.closeTreeNode(n,t),n,e.status==="subscribed")}}createLink(e,t){let{parentClientVpId:n,parentColumnName:s,childColumnName:o}=t,i=R(),u=this.mapClientToServerViewport.get(n);if(u){let l=e.createLink(i,o,u,s);this.sendMessageToServer(l,i)}else y("ServerProxy unable to create link, viewport not found")}removeLink(e){let t=R(),n=e.removeLink(t);this.sendMessageToServer(n,t)}updateTitleOnVisualLinks(e){var s;let{serverViewportId:t,title:n}=e;for(let o of this.viewports.values())if(o!==e&&o.links&&t&&n&&(s=o.links)!=null&&s.some(i=>i.parentVpId===t)){let[i]=o.setLinks(St(o.links,t,n));this.postMessageToClient(i)}}removeViewportFromVisualLinks(e){var t;for(let n of this.viewports.values())if((t=n.links)!=null&&t.some(({parentVpId:s})=>s===e)){let[s]=n.setLinks(n.links.filter(({parentVpId:o})=>o!==e));this.postMessageToClient(s)}}menuRpcCall(e){let t=this.getViewportForClient(e.vpId,!1);if(t!=null&&t.serverViewportId){let[n,s]=A(e);this.sendMessageToServer({...s,vpId:t.serverViewportId},n)}}viewportRpcCall(e){let t=this.getViewportForClient(e.vpId,!1);if(t!=null&&t.serverViewportId){let[n,s]=A(e);this.sendMessageToServer({...s,vpId:t.serverViewportId,namedParams:{}},n)}}rpcCall(e){let[t,n]=A(e),s=We(n.service);this.sendMessageToServer(n,t,{module:s})}handleMessageFromClient(e){var t;if(ge(e))if(e.type==="disable"){let n=this.getViewportForClient(e.viewport,!1);return n!==null?this.disableViewport(n):void 0}else{let n=this.getViewportForClient(e.viewport);switch(e.type){case"setViewRange":return this.setViewRange(n,e);case"config":return this.setConfig(n,e);case"aggregate":return this.aggregate(n,e);case"sort":return this.sort(n,e);case"select":return this.select(n,e);case"suspend":return this.suspendViewport(n);case"resume":return this.resumeViewport(n);case"enable":return this.enableViewport(n);case"openTreeNode":return this.openTreeNode(n,e);case"closeTreeNode":return this.closeTreeNode(n,e);case"createLink":return this.createLink(n,e);case"removeLink":return this.removeLink(n);case"setColumns":return this.setColumns(n,e);case"setTitle":return this.setTitle(n,e);default:}}else{if(Ce(e))return this.viewportRpcCall(e);if(me(e))return this.menuRpcCall(e);{let{type:n,requestId:s}=e;switch(n){case"GET_TABLE_LIST":{(t=this.tableList)!=null||(this.tableList=this.awaitResponseToMessage({type:n},s)),this.tableList.then(o=>{this.postMessageToClient({type:"TABLE_LIST_RESP",tables:o.tables,requestId:s})});return}case"GET_TABLE_META":{this.getTableMeta(e.table,s).then(o=>{o&&this.postMessageToClient({type:"TABLE_META_RESP",tableSchema:o,requestId:s})});return}case"RPC_CALL":return this.rpcCall(e);default:}}}y(\`Vuu ServerProxy Unexpected message from client \${JSON.stringify(e)}\`)}getTableMeta(e,t=R()){if(O(e))return Promise.resolve(void 0);let n=\`\${e.module}:\${e.table}\`,s=this.cachedTableMetaRequests.get(n);return s||(s=this.awaitResponseToMessage({type:"GET_TABLE_META",table:e},t),this.cachedTableMetaRequests.set(n,s)),s==null?void 0:s.then(o=>this.cacheTableMeta(o))}awaitResponseToMessage(e,t=R()){return new Promise((n,s)=>{this.sendMessageToServer(e,t),this.pendingRequests.set(t,{reject:s,resolve:n})})}sendIfReady(e,t,n=!0){return n&&this.sendMessageToServer(e,t),n}sendMessageToServer(e,t=\`\${Ue++}\`,n=mt){let{module:s="CORE"}=n;this.authToken&&this.connection.send({requestId:t,sessionId:this.sessionId,token:this.authToken,user:this.user,module:s,body:e})}handleMessageFromServer(e){var u;let{body:t,requestId:n,sessionId:s}=e,o=this.pendingRequests.get(n);if(o){let{resolve:a}=o;this.pendingRequests.delete(n),a(t);return}let{viewports:i}=this;switch(t.type){case De:this.sendMessageToServer({type:Ie,ts:+new Date},"NA");break;case"LOGIN_SUCCESS":if(s)this.sessionId=s,(u=this.pendingLogin)==null||u.resolve(s),this.pendingLogin=void 0;else throw Error("LOGIN_SUCCESS did not provide sessionId");break;case"REMOVE_VP_SUCCESS":{let a=i.get(t.viewPortId);a&&(this.mapClientToServerViewport.delete(a.clientViewportId),i.delete(t.viewPortId),this.removeViewportFromVisualLinks(t.viewPortId))}break;case Oe:{let a=this.viewports.get(t.vpId);a&&a.completeOperation(n)}break;case Te:case ve:if(i.has(t.viewPortId)){let a=this.viewports.get(t.viewPortId);if(a){let c=a.completeOperation(n);c!==void 0&&(this.postMessageToClient(c),Y&&V(\`postMessageToClient \${JSON.stringify(c)}\`))}}break;case ye:{let a=this.viewports.get(t.viewPortId);if(a){let c=a.completeOperation(n);if(c){this.postMessageToClient(c);let[g,S]=a.resume();this.postMessageToClient({clientViewportId:a.clientViewportId,mode:"batch",rows:S,size:g,type:"viewport-update"})}}}break;case"TABLE_ROW":{let a=Se(t.rows);for(let[c,g]of Object.entries(a)){let S=i.get(c);S?S.updateRows(g):Q==null||Q(\`TABLE_ROW message received for non registered viewport \${c}\`)}this.processUpdates()}break;case"CHANGE_VP_RANGE_SUCCESS":{let a=this.viewports.get(t.viewPortId);if(a){let{from:c,to:g}=t;a.completeOperation(n,c,g)}}break;case ke:case we:break;case"CREATE_VISUAL_LINK_SUCCESS":{let a=this.viewports.get(t.childVpId),c=this.viewports.get(t.parentVpId);if(a&&c){let{childColumnName:g,parentColumnName:S}=t,D=a.completeOperation(n,g,c.clientViewportId,S);D&&this.postMessageToClient(D)}}break;case"REMOVE_VISUAL_LINK_SUCCESS":{let a=this.viewports.get(t.childVpId);if(a){let c=a.completeOperation(n);c&&this.postMessageToClient(c)}}break;case"VP_VISUAL_LINKS_RESP":{let a=this.getActiveLinks(t.links),c=this.viewports.get(t.vpId);if(a.length&&c){let g=Tt(a,this.viewports),[S,D]=c.setLinks(g);if(this.postMessageToClient(S),D){let{link:se,parentClientVpId:ze}=D,re=R(),oe=this.mapClientToServerViewport.get(ze);if(oe){let Ke=c.createLink(re,se.fromColumn,oe,se.toColumn);this.sendMessageToServer(Ke,re)}}}}break;case"VIEW_PORT_MENUS_RESP":if(t.menu.name){let a=this.viewports.get(t.vpId);if(a){let c=a.setMenu(t.menu);this.postMessageToClient(c)}}break;case"VP_EDIT_RPC_RESPONSE":this.postMessageToClient({action:t.action,requestId:n,rpcName:t.rpcName,type:"VP_EDIT_RPC_RESPONSE"});break;case"VP_EDIT_RPC_REJECT":this.viewports.get(t.vpId)&&this.postMessageToClient({requestId:n,type:"VP_EDIT_RPC_REJECT",error:t.error});break;case"VIEW_PORT_MENU_REJ":{console.log("send menu error back to client");let{error:a,rpcName:c,vpId:g}=t,S=this.viewports.get(g);S&&this.postMessageToClient({clientViewportId:S.clientViewportId,error:a,rpcName:c,type:"VIEW_PORT_MENU_REJ",requestId:n});break}case"VIEW_PORT_MENU_RESP":if(fe(t)){let{action:a,rpcName:c}=t;this.awaitResponseToMessage({type:"GET_TABLE_META",table:a.table}).then(g=>{let S=z(g);this.postMessageToClient({rpcName:c,type:"VIEW_PORT_MENU_RESP",action:{...a,tableSchema:S},tableAlreadyOpen:this.isTableOpen(a.table),requestId:n})})}else{let{action:a}=t;this.postMessageToClient({type:"VIEW_PORT_MENU_RESP",action:a||Rt,tableAlreadyOpen:a!==null&&this.isTableOpen(a.table),requestId:n})}break;case"RPC_RESP":{let{method:a,result:c}=t;this.postMessageToClient({type:"RPC_RESP",method:a,result:c,requestId:n})}break;case"VIEW_PORT_RPC_REPONSE":{let{method:a,action:c}=t;this.postMessageToClient({type:"VIEW_PORT_RPC_RESPONSE",rpcName:a,action:c,requestId:n})}break;case"ERROR":y(t.msg);break;default:ft&&T(\`handleMessageFromServer \${t.type}.\`)}}cacheTableMeta(e){let{module:t,table:n}=e.table,s=\`\${t}:\${n}\`,o=this.cachedTableSchemas.get(s);return o||(o=z(e),this.cachedTableSchemas.set(s,o)),o}isTableOpen(e){if(e){let t=e.table;for(let n of this.viewports.values())if(!n.suspended&&n.table.table===t)return!0}}getActiveLinks(e){return e.filter(t=>{let n=this.viewports.get(t.parentVpId);return n&&!n.suspended})}processUpdates(){this.viewports.forEach(e=>{var t;if(e.hasUpdatesToProcess){let n=e.getClientRows();if(n!==U){let[s,o]=n,i=e.getNewRowCount();(i!==void 0||s&&s.length>0)&&(Y&&V(\`postMessageToClient #\${e.clientViewportId} viewport-update \${o}, \${(t=s==null?void 0:s.length)!=null?t:"no"} rows, size \${i}\`),o&&this.postMessageToClient({clientViewportId:e.clientViewportId,mode:o,rows:s,size:i,type:"viewport-update"}))}}})}};var{debug:un,debugEnabled:ln,error:qe,info:w,infoEnabled:bt,warn:_}=b("websocket-connection"),Be={},Z=Symbol("setWebsocket"),F=Symbol("connectionCallback");async function Ge(r,e,t,n=10,s=5){return Be[r]={status:"connecting",connect:{allowed:s,remaining:s},reconnect:{allowed:n,remaining:n}},He(r,e,t)}async function X(r){throw Error("connection broken")}async function He(r,e,t,n){let{status:s,connect:o,reconnect:i}=Be[r],u=s==="connecting"?o:i;try{t({type:"connection-status",status:"connecting"});let l=typeof n<"u",p=await Et(r,e);console.info("%c\u26A1 %cconnected","font-size: 24px;color: green;font-weight: bold;","color:green; font-size: 14px;"),n!==void 0&&n[Z](p);let a=n!=null?n:new ee(p,r,e,t),c=l?"reconnected":"connection-open-awaiting-session";return t({type:"connection-status",status:c}),a.status=c,u.remaining=u.allowed,a}catch{let p=--u.remaining>0;if(t({type:"connection-status",status:"disconnected",reason:"failed to connect",retry:p}),p)return wt(r,e,t,n,2e3);throw t({type:"connection-status",status:"failed",reason:"unable to connect",retry:p}),Error("Failed to establish connection")}}var wt=(r,e,t,n,s)=>new Promise(o=>{setTimeout(()=>{o(He(r,e,t,n))},s)}),Et=(r,e)=>new Promise((t,n)=>{bt&&e!==void 0&&w(\`WebSocket Protocol \${e==null?void 0:e.toString()}\`);let s=new WebSocket(r,e);s.onopen=()=>t(s),s.onerror=o=>n(o)}),$e=()=>{_==null||_("Connection cannot be closed, socket not yet opened")},Fe=r=>{_==null||_(\`Message cannot be sent, socket closed \${r.body.type}\`)},Vt=r=>{try{return JSON.parse(r)}catch{throw Error(\`Error parsing JSON response from server \${r}\`)}},ee=class{constructor(e,t,n,s){this.close=$e;this.requiresLogin=!0;this.send=Fe;this.status="ready";this.messagesCount=0;this.connectionMetricsInterval=null;this.handleWebsocketMessage=e=>{let t=Vt(e.data);this.messagesCount+=1,this[F](t)};this.url=t,this.protocol=n,this[F]=s,this[Z](e)}reconnect(){X(this)}[(F,Z)](e){let t=this[F];e.onmessage=o=>{this.status="connected",e.onmessage=this.handleWebsocketMessage,this.handleWebsocketMessage(o)},this.connectionMetricsInterval=setInterval(()=>{t({type:"connection-metrics",messagesLength:this.messagesCount}),this.messagesCount=0},2e3),e.onerror=()=>{qe("\u26A1 connection error"),t({type:"connection-status",status:"disconnected",reason:"error"}),this.connectionMetricsInterval&&(clearInterval(this.connectionMetricsInterval),this.connectionMetricsInterval=null),this.status==="connection-open-awaiting-session"?qe("Websocket connection lost before Vuu session established, check websocket configuration"):this.status!=="closed"&&(X(this),this.send=s)},e.onclose=()=>{w==null||w("\u26A1 connection close"),t({type:"connection-status",status:"disconnected",reason:"close"}),this.connectionMetricsInterval&&(clearInterval(this.connectionMetricsInterval),this.connectionMetricsInterval=null),this.status!=="closed"&&(X(this),this.send=s)};let n=o=>{e.send(JSON.stringify(o))},s=o=>{w==null||w(\`TODO queue message until websocket reconnected \${o.body.type}\`)};this.send=n,this.close=()=>{this.status="closed",e.close(),this.close=$e,this.send=Fe,w==null||w("close websocket")}}};var v,{info:te,infoEnabled:ne}=b("worker");async function vt(r,e,t,n,s,o,i){let u=await Ge(r,e,l=>{de(l)?postMessage({type:"connection-metrics",messages:l}):pe(l)?(s(l),l.status==="reconnected"&&v.reconnect()):v.handleMessageFromServer(l)},o,i);v=new $(u,l=>Mt(l)),u.requiresLogin&&await v.login(t,n)}function Mt(r){postMessage(r)}var yt=async({data:r})=>{switch(r.type){case"connect":try{await vt(r.url,r.protocol,r.token,r.username,postMessage,r.retryLimitDisconnect,r.retryLimitStartup),postMessage({type:"connected"})}catch(e){postMessage({type:"connection-failed",reason:String(e)})}break;case"subscribe":ne&&te(\`client subscribe: \${JSON.stringify(r)}\`),v.subscribe(r);break;case"unsubscribe":ne&&te(\`client unsubscribe: \${JSON.stringify(r)}\`),v.unsubscribe(r.viewport);break;default:ne&&te(\`client message: \${JSON.stringify(r)}\`),v.handleMessageFromClient(r)}};self.addEventListener("message",yt);postMessage({type:"ready"});
6
+ \`}};var ot=["VIEW_PORT_MENUS_SELECT_RPC","VIEW_PORT_MENU_TABLE_RPC","VIEW_PORT_MENU_ROW_RPC","VIEW_PORT_MENU_CELL_RPC","VP_EDIT_CELL_RPC","VP_EDIT_ROW_RPC","VP_EDIT_ADD_ROW_RPC","VP_EDIT_DELETE_CELL_RPC","VP_EDIT_DELETE_ROW_RPC","VP_EDIT_SUBMIT_FORM_RPC"],he=r=>ot.includes(r.type);var{SELECTED:Bt}=B,E={False:0,True:1,First:2,Last:4};var it=(r,e)=>e>=r[0]&&e<=r[1],at=E.True+E.First+E.Last,ut=E.True+E.First,lt=E.True+E.Last,H=(r,e)=>{for(let t of r)if(typeof t=="number"){if(t===e)return at}else if(it(t,e))return e===t[0]?ut:e===t[1]?lt:E.True;return E.False};var fe=r=>{if(r.every(t=>typeof t=="number"))return r;let e=[];for(let t of r)if(typeof t=="number")e.push(t);else for(let n=t[0];n<=t[1];n++)e.push(n);return e};var me=r=>r.type==="VIEW_PORT_MENU_RESP"&&r.action!==null&&O(r.action.table),O=r=>r!==null&&typeof r=="object"&&"table"in r&&"module"in r?r.table.startsWith("session"):!1;var Ce=r=>r.type==="VIEW_PORT_RPC_CALL",A=({requestId:r,...e})=>[r,e],Re=r=>{let e=r.at(0);if(e.updateType==="SIZE"){if(r.length===1)return r;e=r.at(1)}let t=r.at(-1);return[e,t]},Se=r=>{let e={};for(let t of r)(e[t.viewPortId]||(e[t.viewPortId]=[])).push(t);return e},z=({columns:r,dataTypes:e,key:t,table:n})=>({table:n,columns:r.map((s,o)=>({name:s,serverDataType:e[o]})),key:t});var Te="CHANGE_VP_SUCCESS";var be="CLOSE_TREE_NODE",we="CLOSE_TREE_SUCCESS";var Ee="CREATE_VP",Ve="DISABLE_VP",ve="DISABLE_VP_SUCCESS";var Me="ENABLE_VP",ye="ENABLE_VP_SUCCESS";var K="GET_VP_VISUAL_LINKS",_e="GET_VIEW_PORT_MENUS";var De="HB",Ie="HB_RESP",Pe="LOGIN",Le="OPEN_TREE_NODE",ke="OPEN_TREE_SUCCESS";var xe="REMOVE_VP";var Oe="SET_SELECTION_SUCCESS";var We=r=>{switch(r){case"TypeAheadRpcHandler":return"TYPEAHEAD";default:return"SIMUL"}};var Ne=[],C=b("array-backed-moving-window");function ct(r,e){if(!e||e.data.length!==r.data.length||e.sel!==r.sel)return!1;for(let t=0;t<e.data.length;t++)if(e.data[t]!==r.data[t])return!1;return!0}var h,W=class{constructor({from:e,to:t},{from:n,to:s},o){ae(this,h,void 0);this.setRowCount=e=>{var t;if((t=C.info)==null||t.call(C,\`setRowCount \${e}\`),e<this.internalData.length&&(this.internalData.length=e),e<this.rowCount){this.rowsWithinRange=0;let n=Math.min(e,this.clientRange.to);for(let s=this.clientRange.from;s<n;s++){let o=s-m(this,h).from;this.internalData[o]!==void 0&&(this.rowsWithinRange+=1)}}this.rowCount=e};this.bufferBreakout=(e,t)=>{let n=this.bufferSize*.25;return m(this,h).to-t<n?!0:m(this,h).from>0&&e-m(this,h).from<n};this.bufferSize=o,this.clientRange=new I(e,t),ue(this,h,new I(n,s)),this.internalData=new Array(o),this.rowsWithinRange=0,this.rowCount=0}get range(){return m(this,h)}get hasAllRowsWithinRange(){return this.rowsWithinRange===this.clientRange.to-this.clientRange.from||this.rowCount>0&&this.clientRange.from+this.rowsWithinRange===this.rowCount}outOfRange(e,t){let{from:n,to:s}=this.range;if(t<n||e>=s)return!0}setAtIndex(e){let{rowIndex:t}=e,n=t-m(this,h).from;if(ct(e,this.internalData[n]))return!1;let s=this.isWithinClientRange(t);return(s||this.isWithinRange(t))&&(!this.internalData[n]&&s&&(this.rowsWithinRange+=1),this.internalData[n]=e),s}getAtIndex(e){return m(this,h).isWithin(e)&&this.internalData[e-m(this,h).from]!=null?this.internalData[e-m(this,h).from]:void 0}isWithinRange(e){return m(this,h).isWithin(e)}isWithinClientRange(e){return this.clientRange.isWithin(e)}setClientRange(e,t){var p;(p=C.debug)==null||p.call(C,\`setClientRange \${e} - \${t}\`);let n=this.clientRange.from,s=Math.min(this.clientRange.to,this.rowCount);if(e===n&&t===s)return[!1,Ne];let o=this.clientRange.copy();this.clientRange.from=e,this.clientRange.to=t,this.rowsWithinRange=0;for(let a=e;a<t;a++){let c=a-m(this,h).from;this.internalData[c]&&(this.rowsWithinRange+=1)}let i=Ne,u=m(this,h).from;if(this.hasAllRowsWithinRange)if(t>o.to){let a=Math.max(e,o.to);i=this.internalData.slice(a-u,t-u)}else{let a=Math.min(o.from,t);i=this.internalData.slice(e-u,a-u)}return[this.bufferBreakout(e,t),i]}setRange(e,t){var n,s;if(e!==m(this,h).from||t!==m(this,h).to){(n=C.debug)==null||n.call(C,\`setRange \${e} - \${t}\`);let[o,i]=m(this,h).overlap(e,t),u=new Array(t-e);this.rowsWithinRange=0;for(let l=o;l<i;l++){let p=this.getAtIndex(l);if(p){let a=l-e;u[a]=p,this.isWithinClientRange(l)&&(this.rowsWithinRange+=1)}}this.internalData=u,m(this,h).from=e,m(this,h).to=t}else(s=C.debug)==null||s.call(C,\`setRange \${e} - \${t} IGNORED because not changed\`)}get data(){return this.internalData}getData(){var u;let{from:e,to:t}=m(this,h),{from:n,to:s}=this.clientRange,o=Math.max(0,n-e),i=Math.min(t-e,t,s-e,(u=this.rowCount)!=null?u:t);return this.internalData.slice(o,i)}clear(){var e;(e=C.debug)==null||e.call(C,"clear"),this.internalData.length=0,this.rowsWithinRange=0,this.setRowCount(0)}getCurrentDataRange(){let e=this.internalData,t=e.length,[n]=this.internalData,s=this.internalData[t-1];if(n&&s)return[n.rowIndex,s.rowIndex];for(let o=0;o<t;o++)if(e[o]!==void 0){n=e[o];break}for(let o=t-1;o>=0;o--)if(e[o]!==void 0){s=e[o];break}return n&&s?[n.rowIndex,s.rowIndex]:[-1,-1]}};h=new WeakMap;var{debug:f,debugEnabled:N,error:pt,info:d,infoEnabled:dt,warn:M}=b("viewport"),gt=({rowKey:r,updateType:e})=>e==="U"&&!r.startsWith("$root"),U=[void 0,void 0],ht={count:0,mode:void 0,size:0,ts:0},q=class{constructor({aggregations:e,bufferSize:t=50,columns:n,filter:s,groupBy:o=[],table:i,range:u,sort:l,title:p,viewport:a,visualLink:c},g){this.batchMode=!0;this.hasUpdates=!1;this.pendingUpdates=[];this.pendingOperations=new Map;this.pendingRangeRequests=[];this.rowCountChanged=!1;this.selectedRows=[];this.useBatchMode=!0;this.lastUpdateStatus=ht;this.updateThrottleTimer=void 0;this.rangeMonitor=new k("ViewPort");this.disabled=!1;this.isTree=!1;this.status="";this.suspended=!1;this.suspendTimer=null;this.setLastSizeOnlyUpdateSize=e=>{this.lastUpdateStatus.size=e};this.setLastUpdate=e=>{let{ts:t,mode:n}=this.lastUpdateStatus,s=0;if(n===e){let o=Date.now();this.lastUpdateStatus.count+=1,this.lastUpdateStatus.ts=o,s=t===0?0:o-t}else this.lastUpdateStatus.count=1,this.lastUpdateStatus.ts=0,s=0;return this.lastUpdateStatus.mode=e,s};this.rangeRequestAlreadyPending=e=>{let{bufferSize:t}=this,n=t*.25,{from:s}=e;for(let{from:o,to:i}of this.pendingRangeRequests)if(s>=o&&s<i){if(e.to+n<=i)return!0;s=i}return!1};this.sendThrottledSizeMessage=()=>{this.updateThrottleTimer=void 0,this.lastUpdateStatus.count=3,this.postMessageToClient({clientViewportId:this.clientViewportId,mode:"size-only",size:this.lastUpdateStatus.size,type:"viewport-update"})};this.shouldThrottleMessage=e=>{let t=this.setLastUpdate(e);return e==="size-only"&&t>0&&t<500&&this.lastUpdateStatus.count>3};this.throttleMessage=e=>this.shouldThrottleMessage(e)?(d==null||d("throttling updates setTimeout to 2000"),this.updateThrottleTimer===void 0&&(this.updateThrottleTimer=setTimeout(this.sendThrottledSizeMessage,2e3)),!0):(this.updateThrottleTimer!==void 0&&(clearTimeout(this.updateThrottleTimer),this.updateThrottleTimer=void 0),!1);this.getNewRowCount=()=>{if(this.rowCountChanged&&this.dataWindow)return this.rowCountChanged=!1,this.dataWindow.rowCount};this.aggregations=e,this.bufferSize=t,this.clientRange=u,this.clientViewportId=a,this.columns=n,this.filter=s,this.groupBy=o,this.keys=new x(u),this.pendingLinkedParent=c,this.table=i,this.sort=l,this.title=p,dt&&(d==null||d(\`constructor #\${a} \${i.table} bufferSize=\${t}\`)),this.dataWindow=new W(this.clientRange,u,this.bufferSize),this.postMessageToClient=g}get hasUpdatesToProcess(){return this.suspended?!1:this.rowCountChanged||this.hasUpdates}get size(){var e;return(e=this.dataWindow.rowCount)!=null?e:0}subscribe(){let{filter:e}=this.filter;return this.status=this.status==="subscribed"?"resubscribing":"subscribing",{type:Ee,table:this.table,range:G(this.clientRange,this.bufferSize),aggregations:this.aggregations,columns:this.columns,sort:this.sort,groupBy:this.groupBy,filterSpec:{filter:e}}}handleSubscribed({viewPortId:e,aggregations:t,columns:n,filterSpec:s,range:o,sort:i,groupBy:u,table:l},p){this.serverViewportId=e,this.status="subscribed",this.aggregations=t,this.columns=n,this.groupBy=u,this.isTree=u&&u.length>0,this.dataWindow.setRange(o.from,o.to);let a=l===p.table.table?p:{...p,table:{...p.table,session:l}};return{aggregations:t,type:"subscribed",clientViewportId:this.clientViewportId,columns:n,filter:s,groupBy:u,range:o,sort:i,tableSchema:a}}awaitOperation(e,t){this.pendingOperations.set(e,t)}completeOperation(e,...t){var u;let{clientViewportId:n,pendingOperations:s}=this,o=s.get(e);if(!o){pt(\`no matching operation found to complete for requestId \${e}\`);return}let{type:i}=o;if(d==null||d(\`completeOperation \${i}\`),s.delete(e),i==="CHANGE_VP_RANGE"){let[l,p]=t;(u=this.dataWindow)==null||u.setRange(l,p);for(let a=this.pendingRangeRequests.length-1;a>=0;a--){let c=this.pendingRangeRequests[a];if(c.requestId===e){c.acked=!0;break}else M==null||M("range requests sent faster than they are being ACKed")}}else if(i==="config"){let{aggregations:l,columns:p,filter:a,groupBy:c,sort:g}=o.data;return this.aggregations=l,this.columns=p,this.filter=a,this.groupBy=c,this.sort=g,c.length>0?this.isTree=!0:this.isTree&&(this.isTree=!1),f==null||f(\`config change confirmed, isTree : \${this.isTree}\`),{clientViewportId:n,type:i,config:o.data}}else{if(i==="groupBy")return this.isTree=o.data.length>0,this.groupBy=o.data,f==null||f(\`groupBy change confirmed, isTree : \${this.isTree}\`),{clientViewportId:n,type:i,groupBy:o.data};if(i==="columns")return this.columns=o.data,{clientViewportId:n,type:i,columns:o.data};if(i==="filter")return this.filter=o.data,{clientViewportId:n,type:i,filter:o.data};if(i==="aggregate")return this.aggregations=o.data,{clientViewportId:n,type:"aggregate",aggregations:this.aggregations};if(i==="sort")return this.sort=o.data,{clientViewportId:n,type:i,sort:this.sort};if(i!=="selection"){if(i==="disable")return this.disabled=!0,{type:"disabled",clientViewportId:n};if(i==="enable")return this.disabled=!1,{type:"enabled",clientViewportId:n};if(i==="CREATE_VISUAL_LINK"){let[l,p,a]=t;return this.linkedParent={colName:l,parentViewportId:p,parentColName:a},this.pendingLinkedParent=void 0,{type:"vuu-link-created",clientViewportId:n,colName:l,parentViewportId:p,parentColName:a}}else if(i==="REMOVE_VISUAL_LINK")return this.linkedParent=void 0,{type:"vuu-link-removed",clientViewportId:n}}}}rangeRequest(e,t){N&&this.rangeMonitor.set(t);let n="CHANGE_VP_RANGE";if(this.dataWindow){let[s,o]=this.dataWindow.setClientRange(t.from,t.to),i,u=this.dataWindow.rowCount||void 0,l=s&&!this.rangeRequestAlreadyPending(t)?{type:n,viewPortId:this.serverViewportId,...G(t,this.bufferSize,u)}:null;if(l){N&&(f==null||f(\`create CHANGE_VP_RANGE: [\${l.from} - \${l.to}]\`)),this.awaitOperation(e,{type:n});let a=this.pendingRangeRequests.at(-1);if(a)if(a.acked)console.warn("Range Request before previous request is filled");else{let{from:c,to:g}=a;this.dataWindow.outOfRange(c,g)?i={clientViewportId:this.clientViewportId,type:"debounce-begin"}:M==null||M("Range Request before previous request is acked")}this.pendingRangeRequests.push({...l,requestId:e}),this.useBatchMode&&(this.batchMode=!0)}else o.length>0&&(this.batchMode=!1);this.keys.reset(this.dataWindow.clientRange);let p=this.isTree?j:J;return o.length?[l,o.map(a=>p(a,this.keys,this.selectedRows))]:i?[l,void 0,i]:[l]}else return[null]}setLinks(e){return this.links=e,[{type:"vuu-links",links:e,clientViewportId:this.clientViewportId},this.pendingLinkedParent]}setMenu(e){return{type:"vuu-menu",menu:e,clientViewportId:this.clientViewportId}}openTreeNode(e,t){return this.useBatchMode&&(this.batchMode=!0),{type:Le,vpId:this.serverViewportId,treeKey:t.key}}closeTreeNode(e,t){return this.useBatchMode&&(this.batchMode=!0),{type:be,vpId:this.serverViewportId,treeKey:t.key}}createLink(e,t,n,s){let o={type:"CREATE_VISUAL_LINK",parentVpId:n,childVpId:this.serverViewportId,parentColumnName:s,childColumnName:t};return this.awaitOperation(e,o),this.useBatchMode&&(this.batchMode=!0),o}removeLink(e){let t={type:"REMOVE_VISUAL_LINK",childVpId:this.serverViewportId};return this.awaitOperation(e,t),t}suspend(){this.suspended=!0,d==null||d("suspend")}resume(){return this.suspended=!1,N&&(f==null||f(\`resume: \${this.currentData()}\`)),[this.size,this.currentData()]}currentData(){let e=[];if(this.dataWindow){let t=this.dataWindow.getData(),{keys:n}=this,s=this.isTree?j:J;for(let o of t)o&&e.push(s(o,n,this.selectedRows))}return e}enable(e){return this.awaitOperation(e,{type:"enable"}),d==null||d(\`enable: \${this.serverViewportId}\`),{type:Me,viewPortId:this.serverViewportId}}disable(e){return this.awaitOperation(e,{type:"disable"}),d==null||d(\`disable: \${this.serverViewportId}\`),this.suspended=!1,{type:Ve,viewPortId:this.serverViewportId}}columnRequest(e,t){return this.awaitOperation(e,{type:"columns",data:t}),f==null||f(\`columnRequest: \${t}\`),this.createRequest({columns:t})}setConfig(e,t){var o;this.awaitOperation(e,{type:"config",data:t});let{filter:n,...s}=t;return this.useBatchMode&&(this.batchMode=!0),N?f==null||f(\`setConfig \${JSON.stringify(t)}\`):d==null||d("setConfig"),!this.isTree&&t.groupBy.length>0&&((o=this.dataWindow)==null||o.clear()),this.createRequest({...s,filterSpec:typeof(n==null?void 0:n.filter)=="string"?{filter:n.filter}:{filter:""}},!0)}aggregateRequest(e,t){return this.awaitOperation(e,{type:"aggregate",data:t}),d==null||d(\`aggregateRequest: \${t}\`),this.createRequest({aggregations:t})}sortRequest(e,t){return this.awaitOperation(e,{type:"sort",data:t}),d==null||d(\`sortRequest: \${JSON.stringify(t.sortDefs)}\`),this.createRequest({sort:t})}selectRequest(e,t){return this.selectedRows=t,this.awaitOperation(e,{type:"selection",data:t}),d==null||d(\`selectRequest: \${t}\`),{type:"SET_SELECTION",vpId:this.serverViewportId,selection:fe(t)}}removePendingRangeRequest(e,t){for(let n=this.pendingRangeRequests.length-1;n>=0;n--){let{from:s,to:o}=this.pendingRangeRequests[n],i=!0;if(e>=s&&e<o||t>s&&t<o){i||console.warn("removePendingRangeRequest TABLE_ROWS are not for latest request"),this.pendingRangeRequests.splice(n,1);break}else i=!1}}updateRows(e){var s,o,i;let[t,n]=Re(e);if(t&&n&&this.removePendingRangeRequest(t.rowIndex,n.rowIndex),e.length===1)if(t.vpSize===0&&this.disabled){f==null||f(\`ignore a SIZE=0 message on disabled viewport (\${e.length} rows)\`);return}else t.updateType==="SIZE"&&this.setLastSizeOnlyUpdateSize(t.vpSize);for(let u of e)this.isTree&&gt(u)||((u.updateType==="SIZE"||((s=this.dataWindow)==null?void 0:s.rowCount)!==u.vpSize)&&((o=this.dataWindow)==null||o.setRowCount(u.vpSize),this.rowCountChanged=!0),u.updateType==="U"&&(i=this.dataWindow)!=null&&i.setAtIndex(u)&&(this.hasUpdates=!0,this.batchMode||this.pendingUpdates.push(u)))}getClientRows(){let e,t="size-only";if(!this.hasUpdates&&!this.rowCountChanged)return U;if(this.hasUpdates){let{keys:n,selectedRows:s}=this,o=this.isTree?j:J;if(this.updateThrottleTimer&&(self.clearTimeout(this.updateThrottleTimer),this.updateThrottleTimer=void 0),this.pendingUpdates.length>0){e=[],t="update";for(let i of this.pendingUpdates)e.push(o(i,n,s));this.pendingUpdates.length=0}else{let i=this.dataWindow.getData();if(this.dataWindow.hasAllRowsWithinRange){e=[],t="batch";for(let u of i)e.push(o(u,n,s));this.batchMode=!1}}this.hasUpdates=!1}return this.throttleMessage(t)?U:[e,t]}createRequest(e,t=!1){return t?{type:"CHANGE_VP",viewPortId:this.serverViewportId,...e}:{type:"CHANGE_VP",viewPortId:this.serverViewportId,aggregations:this.aggregations,columns:this.columns,sort:this.sort,groupBy:this.groupBy,filterSpec:{filter:this.filter.filter},...e}}},J=({rowIndex:r,rowKey:e,sel:t,data:n},s,o)=>[r,s.keyFor(r),!0,!1,0,0,e,t?H(o,r):0].concat(n),j=({rowIndex:r,rowKey:e,sel:t,data:n},s,o)=>{let[i,u,,l,,p,...a]=n;return[r,s.keyFor(r),l,u,i,p,e,t?H(o,r):0].concat(a)};var Ue=1;var{debug:V,debugEnabled:Y,error:y,info:T,infoEnabled:ft,warn:Q}=b("server-proxy"),R=()=>\`\${Ue++}\`,mt={},Ct=r=>r.disabled!==!0&&r.suspended!==!0,Rt={type:"NO_ACTION"},St=(r,e,t)=>r.map(n=>n.parentVpId===e?{...n,label:t}:n);function Tt(r,e){return r.map(t=>{let{parentVpId:n}=t,s=e.get(n);if(s)return{...t,parentClientVpId:s.clientViewportId,label:s.title};throw Error("addLabelsToLinks viewport not found")})}var $=class{constructor(e,t){this.authToken="";this.user="user";this.pendingRequests=new Map;this.queuedRequests=[];this.cachedTableMetaRequests=new Map;this.cachedTableSchemas=new Map;this.connection=e,this.postMessageToClient=t,this.viewports=new Map,this.mapClientToServerViewport=new Map}async reconnect(){await this.login(this.authToken);let[e,t]=le(Array.from(this.viewports.values()),Ct);this.viewports.clear(),this.mapClientToServerViewport.clear();let n=s=>{s.forEach(o=>{let{clientViewportId:i}=o;this.viewports.set(i,o),this.sendMessageToServer(o.subscribe(),i)})};n(e),setTimeout(()=>{n(t)},2e3)}async login(e,t="user"){if(e)return this.authToken=e,this.user=t,new Promise((n,s)=>{this.sendMessageToServer({type:Pe,token:this.authToken,user:t},""),this.pendingLogin={resolve:n,reject:s}});this.authToken===""&&y("login, cannot login until auth token has been obtained")}subscribe(e){if(this.mapClientToServerViewport.has(e.viewport))y(\`spurious subscribe call \${e.viewport}\`);else{let t=this.getTableMeta(e.table),n=new q(e,this.postMessageToClient);this.viewports.set(e.viewport,n);let s=this.awaitResponseToMessage(n.subscribe(),e.viewport);Promise.all([s,t]).then(([i,u])=>{let{viewPortId:l}=i,{status:p}=n;e.viewport!==l&&(this.viewports.delete(e.viewport),this.viewports.set(l,n)),this.mapClientToServerViewport.set(e.viewport,l);let a=n.handleSubscribed(i,u);a&&(this.postMessageToClient(a),Y&&V(\`post DataSourceSubscribedMessage to client: \${JSON.stringify(a)}\`)),n.disabled&&this.disableViewport(n),this.queuedRequests.length>0&&this.processQueuedRequests(),p==="subscribing"&&!O(n.table)&&(this.sendMessageToServer({type:K,vpId:l}),this.sendMessageToServer({type:_e,vpId:l}),Array.from(this.viewports.entries()).filter(([c,{disabled:g}])=>c!==l&&!g).forEach(([c])=>{this.sendMessageToServer({type:K,vpId:c})}))})}}processQueuedRequests(){let e={};for(;this.queuedRequests.length;){let t=this.queuedRequests.pop();if(t){let{clientViewportId:n,message:s,requestId:o}=t;if(s.type==="CHANGE_VP_RANGE"){if(e.CHANGE_VP_RANGE)continue;e.CHANGE_VP_RANGE=!0;let i=this.mapClientToServerViewport.get(n);i&&this.sendMessageToServer({...s,viewPortId:i},o)}}}}unsubscribe(e){let t=this.mapClientToServerViewport.get(e);t?(T==null||T(\`Unsubscribe Message (Client to Server):
7
+ \${t}\`),this.sendMessageToServer({type:xe,viewPortId:t})):y(\`failed to unsubscribe client viewport \${e}, viewport not found\`)}getViewportForClient(e,t=!0){let n=this.mapClientToServerViewport.get(e);if(n){let s=this.viewports.get(n);if(s)return s;if(t)throw Error(\`Viewport not found for client viewport \${e}\`);return null}else{if(this.viewports.has(e))return this.viewports.get(e);if(t)throw Error(\`Viewport server id not found for client viewport \${e}\`);return null}}setViewRange(e,t){let n=R(),[s,o,i]=e.rangeRequest(n,t.range);T==null||T(\`setViewRange \${t.range.from} - \${t.range.to}\`),s&&(this.sendIfReady(s,n,e.status==="subscribed")||this.queuedRequests.push({clientViewportId:t.viewport,message:s,requestId:n})),o?(T==null||T(\`setViewRange \${o.length} rows returned from cache\`),this.postMessageToClient({mode:"batch",type:"viewport-update",clientViewportId:e.clientViewportId,rows:o})):i&&this.postMessageToClient(i)}setConfig(e,t){let n=R(),s=e.setConfig(n,t.config);this.sendIfReady(s,n,e.status==="subscribed")}aggregate(e,t){let n=R(),s=e.aggregateRequest(n,t.aggregations);this.sendIfReady(s,n,e.status==="subscribed")}sort(e,t){let n=R(),s=e.sortRequest(n,t.sort);this.sendIfReady(s,n,e.status==="subscribed")}setColumns(e,t){let n=R(),{columns:s}=t,o=e.columnRequest(n,s);this.sendIfReady(o,n,e.status==="subscribed")}setTitle(e,t){e&&(e.title=t.title,this.updateTitleOnVisualLinks(e))}select(e,t){let n=R(),{selected:s}=t,o=e.selectRequest(n,s);this.sendIfReady(o,n,e.status==="subscribed")}disableViewport(e){let t=R(),n=e.disable(t);this.sendIfReady(n,t,e.status==="subscribed")}enableViewport(e){if(e.disabled){let t=R(),n=e.enable(t);this.sendIfReady(n,t,e.status==="subscribed")}}suspendViewport(e){e.suspend(),e.suspendTimer=setTimeout(()=>{T==null||T("suspendTimer expired, escalate suspend to disable"),this.disableViewport(e)},3e3)}resumeViewport(e){e.suspendTimer&&(V==null||V("clear suspend timer"),clearTimeout(e.suspendTimer),e.suspendTimer=null);let[t,n]=e.resume();V==null||V(\`resumeViewport size \${t}, \${n.length} rows sent to client\`),this.postMessageToClient({clientViewportId:e.clientViewportId,mode:"batch",rows:n,size:t,type:"viewport-update"})}openTreeNode(e,t){if(e.serverViewportId){let n=R();this.sendIfReady(e.openTreeNode(n,t),n,e.status==="subscribed")}}closeTreeNode(e,t){if(e.serverViewportId){let n=R();this.sendIfReady(e.closeTreeNode(n,t),n,e.status==="subscribed")}}createLink(e,t){let{parentClientVpId:n,parentColumnName:s,childColumnName:o}=t,i=R(),u=this.mapClientToServerViewport.get(n);if(u){let l=e.createLink(i,o,u,s);this.sendMessageToServer(l,i)}else y("ServerProxy unable to create link, viewport not found")}removeLink(e){let t=R(),n=e.removeLink(t);this.sendMessageToServer(n,t)}updateTitleOnVisualLinks(e){var s;let{serverViewportId:t,title:n}=e;for(let o of this.viewports.values())if(o!==e&&o.links&&t&&n&&(s=o.links)!=null&&s.some(i=>i.parentVpId===t)){let[i]=o.setLinks(St(o.links,t,n));this.postMessageToClient(i)}}removeViewportFromVisualLinks(e){var t;for(let n of this.viewports.values())if((t=n.links)!=null&&t.some(({parentVpId:s})=>s===e)){let[s]=n.setLinks(n.links.filter(({parentVpId:o})=>o!==e));this.postMessageToClient(s)}}menuRpcCall(e){let t=this.getViewportForClient(e.vpId,!1);if(t!=null&&t.serverViewportId){let[n,s]=A(e);this.sendMessageToServer({...s,vpId:t.serverViewportId},n)}}viewportRpcCall(e){let t=this.getViewportForClient(e.vpId,!1);if(t!=null&&t.serverViewportId){let[n,s]=A(e);this.sendMessageToServer({...s,vpId:t.serverViewportId,namedParams:{}},n)}}rpcCall(e){let[t,n]=A(e),s=We(n.service);this.sendMessageToServer(n,t,{module:s})}handleMessageFromClient(e){var t;if(ge(e))if(e.type==="disable"){let n=this.getViewportForClient(e.viewport,!1);return n!==null?this.disableViewport(n):void 0}else{let n=this.getViewportForClient(e.viewport);switch(e.type){case"setViewRange":return this.setViewRange(n,e);case"config":return this.setConfig(n,e);case"aggregate":return this.aggregate(n,e);case"sort":return this.sort(n,e);case"select":return this.select(n,e);case"suspend":return this.suspendViewport(n);case"resume":return this.resumeViewport(n);case"enable":return this.enableViewport(n);case"openTreeNode":return this.openTreeNode(n,e);case"closeTreeNode":return this.closeTreeNode(n,e);case"createLink":return this.createLink(n,e);case"removeLink":return this.removeLink(n);case"setColumns":return this.setColumns(n,e);case"setTitle":return this.setTitle(n,e);default:}}else{if(Ce(e))return this.viewportRpcCall(e);if(he(e))return this.menuRpcCall(e);{let{type:n,requestId:s}=e;switch(n){case"GET_TABLE_LIST":{(t=this.tableList)!=null||(this.tableList=this.awaitResponseToMessage({type:n},s)),this.tableList.then(o=>{this.postMessageToClient({type:"TABLE_LIST_RESP",tables:o.tables,requestId:s})});return}case"GET_TABLE_META":{this.getTableMeta(e.table,s).then(o=>{o&&this.postMessageToClient({type:"TABLE_META_RESP",tableSchema:o,requestId:s})});return}case"RPC_CALL":return this.rpcCall(e);default:}}}y(\`Vuu ServerProxy Unexpected message from client \${JSON.stringify(e)}\`)}getTableMeta(e,t=R()){if(O(e))return Promise.resolve(void 0);let n=\`\${e.module}:\${e.table}\`,s=this.cachedTableMetaRequests.get(n);return s||(s=this.awaitResponseToMessage({type:"GET_TABLE_META",table:e},t),this.cachedTableMetaRequests.set(n,s)),s==null?void 0:s.then(o=>this.cacheTableMeta(o))}awaitResponseToMessage(e,t=R()){return new Promise((n,s)=>{this.sendMessageToServer(e,t),this.pendingRequests.set(t,{reject:s,resolve:n})})}sendIfReady(e,t,n=!0){return n&&this.sendMessageToServer(e,t),n}sendMessageToServer(e,t=\`\${Ue++}\`,n=mt){let{module:s="CORE"}=n;this.authToken&&this.connection.send({requestId:t,sessionId:this.sessionId,token:this.authToken,user:this.user,module:s,body:e})}handleMessageFromServer(e){var u;let{body:t,requestId:n,sessionId:s}=e,o=this.pendingRequests.get(n);if(o){let{resolve:a}=o;this.pendingRequests.delete(n),a(t);return}let{viewports:i}=this;switch(t.type){case De:this.sendMessageToServer({type:Ie,ts:+new Date},"NA");break;case"LOGIN_SUCCESS":if(s)this.sessionId=s,(u=this.pendingLogin)==null||u.resolve(s),this.pendingLogin=void 0;else throw Error("LOGIN_SUCCESS did not provide sessionId");break;case"REMOVE_VP_SUCCESS":{let a=i.get(t.viewPortId);a&&(this.mapClientToServerViewport.delete(a.clientViewportId),i.delete(t.viewPortId),this.removeViewportFromVisualLinks(t.viewPortId))}break;case Oe:{let a=this.viewports.get(t.vpId);a&&a.completeOperation(n)}break;case Te:case ve:if(i.has(t.viewPortId)){let a=this.viewports.get(t.viewPortId);if(a){let c=a.completeOperation(n);c!==void 0&&(this.postMessageToClient(c),Y&&V(\`postMessageToClient \${JSON.stringify(c)}\`))}}break;case ye:{let a=this.viewports.get(t.viewPortId);if(a){let c=a.completeOperation(n);if(c){this.postMessageToClient(c);let[g,S]=a.resume();this.postMessageToClient({clientViewportId:a.clientViewportId,mode:"batch",rows:S,size:g,type:"viewport-update"})}}}break;case"TABLE_ROW":{let a=Se(t.rows);for(let[c,g]of Object.entries(a)){let S=i.get(c);S?S.updateRows(g):Q==null||Q(\`TABLE_ROW message received for non registered viewport \${c}\`)}this.processUpdates()}break;case"CHANGE_VP_RANGE_SUCCESS":{let a=this.viewports.get(t.viewPortId);if(a){let{from:c,to:g}=t;a.completeOperation(n,c,g)}}break;case ke:case we:break;case"CREATE_VISUAL_LINK_SUCCESS":{let a=this.viewports.get(t.childVpId),c=this.viewports.get(t.parentVpId);if(a&&c){let{childColumnName:g,parentColumnName:S}=t,D=a.completeOperation(n,g,c.clientViewportId,S);D&&this.postMessageToClient(D)}}break;case"REMOVE_VISUAL_LINK_SUCCESS":{let a=this.viewports.get(t.childVpId);if(a){let c=a.completeOperation(n);c&&this.postMessageToClient(c)}}break;case"VP_VISUAL_LINKS_RESP":{let a=this.getActiveLinks(t.links),c=this.viewports.get(t.vpId);if(a.length&&c){let g=Tt(a,this.viewports),[S,D]=c.setLinks(g);if(this.postMessageToClient(S),D){let{link:se,parentClientVpId:ze}=D,re=R(),oe=this.mapClientToServerViewport.get(ze);if(oe){let Ke=c.createLink(re,se.fromColumn,oe,se.toColumn);this.sendMessageToServer(Ke,re)}}}}break;case"VIEW_PORT_MENUS_RESP":if(t.menu.name){let a=this.viewports.get(t.vpId);if(a){let c=a.setMenu(t.menu);this.postMessageToClient(c)}}break;case"VP_EDIT_RPC_RESPONSE":this.postMessageToClient({action:t.action,requestId:n,rpcName:t.rpcName,type:"VP_EDIT_RPC_RESPONSE"});break;case"VP_EDIT_RPC_REJECT":this.viewports.get(t.vpId)&&this.postMessageToClient({requestId:n,type:"VP_EDIT_RPC_REJECT",error:t.error});break;case"VIEW_PORT_MENU_REJ":{console.log("send menu error back to client");let{error:a,rpcName:c,vpId:g}=t,S=this.viewports.get(g);S&&this.postMessageToClient({clientViewportId:S.clientViewportId,error:a,rpcName:c,type:"VIEW_PORT_MENU_REJ",requestId:n});break}case"VIEW_PORT_MENU_RESP":if(me(t)){let{action:a,rpcName:c}=t;this.awaitResponseToMessage({type:"GET_TABLE_META",table:a.table}).then(g=>{let S=z(g);this.postMessageToClient({rpcName:c,type:"VIEW_PORT_MENU_RESP",action:{...a,tableSchema:S},tableAlreadyOpen:this.isTableOpen(a.table),requestId:n})})}else{let{action:a}=t;this.postMessageToClient({type:"VIEW_PORT_MENU_RESP",action:a||Rt,tableAlreadyOpen:a!==null&&this.isTableOpen(a.table),requestId:n})}break;case"RPC_RESP":{let{method:a,result:c}=t;this.postMessageToClient({type:"RPC_RESP",method:a,result:c,requestId:n})}break;case"VIEW_PORT_RPC_REPONSE":{let{method:a,action:c}=t;this.postMessageToClient({type:"VIEW_PORT_RPC_RESPONSE",rpcName:a,action:c,requestId:n})}break;case"ERROR":y(t.msg);break;default:ft&&T(\`handleMessageFromServer \${t.type}.\`)}}cacheTableMeta(e){let{module:t,table:n}=e.table,s=\`\${t}:\${n}\`,o=this.cachedTableSchemas.get(s);return o||(o=z(e),this.cachedTableSchemas.set(s,o)),o}isTableOpen(e){if(e){let t=e.table;for(let n of this.viewports.values())if(!n.suspended&&n.table.table===t)return!0}}getActiveLinks(e){return e.filter(t=>{let n=this.viewports.get(t.parentVpId);return n&&!n.suspended})}processUpdates(){this.viewports.forEach(e=>{var t;if(e.hasUpdatesToProcess){let n=e.getClientRows();if(n!==U){let[s,o]=n,i=e.getNewRowCount();(i!==void 0||s&&s.length>0)&&(Y&&V(\`postMessageToClient #\${e.clientViewportId} viewport-update \${o}, \${(t=s==null?void 0:s.length)!=null?t:"no"} rows, size \${i}\`),o&&this.postMessageToClient({clientViewportId:e.clientViewportId,mode:o,rows:s,size:i,type:"viewport-update"}))}}})}};var{debug:ln,debugEnabled:cn,error:qe,info:w,infoEnabled:bt,warn:_}=b("websocket-connection"),Be={},Z=Symbol("setWebsocket"),F=Symbol("connectionCallback");async function Ge(r,e,t,n=10,s=5){return Be[r]={status:"connecting",connect:{allowed:s,remaining:s},reconnect:{allowed:n,remaining:n}},He(r,e,t)}async function X(r){throw Error("connection broken")}async function He(r,e,t,n){let{status:s,connect:o,reconnect:i}=Be[r],u=s==="connecting"?o:i;try{t({type:"connection-status",status:"connecting"});let l=typeof n<"u",p=await Et(r,e);console.info("%c\u26A1 %cconnected","font-size: 24px;color: green;font-weight: bold;","color:green; font-size: 14px;"),n!==void 0&&n[Z](p);let a=n!=null?n:new ee(p,r,e,t),c=l?"reconnected":"connection-open-awaiting-session";return t({type:"connection-status",status:c}),a.status=c,u.remaining=u.allowed,a}catch{let p=--u.remaining>0;if(t({type:"connection-status",status:"disconnected",reason:"failed to connect",retry:p}),p)return wt(r,e,t,n,2e3);throw t({type:"connection-status",status:"failed",reason:"unable to connect",retry:p}),Error("Failed to establish connection")}}var wt=(r,e,t,n,s)=>new Promise(o=>{setTimeout(()=>{o(He(r,e,t,n))},s)}),Et=(r,e)=>new Promise((t,n)=>{bt&&e!==void 0&&w(\`WebSocket Protocol \${e==null?void 0:e.toString()}\`);let s=new WebSocket(r,e);s.onopen=()=>t(s),s.onerror=o=>n(o)}),$e=()=>{_==null||_("Connection cannot be closed, socket not yet opened")},Fe=r=>{_==null||_(\`Message cannot be sent, socket closed \${r.body.type}\`)},Vt=r=>{try{return JSON.parse(r)}catch{throw Error(\`Error parsing JSON response from server \${r}\`)}},ee=class{constructor(e,t,n,s){this.close=$e;this.requiresLogin=!0;this.send=Fe;this.status="ready";this.messagesCount=0;this.connectionMetricsInterval=null;this.handleWebsocketMessage=e=>{let t=Vt(e.data);this.messagesCount+=1,this[F](t)};this.url=t,this.protocol=n,this[F]=s,this[Z](e)}reconnect(){X(this)}[(F,Z)](e){let t=this[F];e.onmessage=o=>{this.status="connected",e.onmessage=this.handleWebsocketMessage,this.handleWebsocketMessage(o)},this.connectionMetricsInterval=setInterval(()=>{t({type:"connection-metrics",messagesLength:this.messagesCount}),this.messagesCount=0},2e3),e.onerror=()=>{qe("\u26A1 connection error"),t({type:"connection-status",status:"disconnected",reason:"error"}),this.connectionMetricsInterval&&(clearInterval(this.connectionMetricsInterval),this.connectionMetricsInterval=null),this.status==="connection-open-awaiting-session"?qe("Websocket connection lost before Vuu session established, check websocket configuration"):this.status!=="closed"&&(X(this),this.send=s)},e.onclose=()=>{w==null||w("\u26A1 connection close"),t({type:"connection-status",status:"disconnected",reason:"close"}),this.connectionMetricsInterval&&(clearInterval(this.connectionMetricsInterval),this.connectionMetricsInterval=null),this.status!=="closed"&&(X(this),this.send=s)};let n=o=>{e.send(JSON.stringify(o))},s=o=>{w==null||w(\`TODO queue message until websocket reconnected \${o.body.type}\`)};this.send=n,this.close=()=>{this.status="closed",e.close(),this.close=$e,this.send=Fe,w==null||w("close websocket")}}};var v,{info:te,infoEnabled:ne}=b("worker");async function vt(r,e,t,n,s,o,i){let u=await Ge(r,e,l=>{de(l)?postMessage({type:"connection-metrics",messages:l}):pe(l)?(s(l),l.status==="reconnected"&&v.reconnect()):v.handleMessageFromServer(l)},o,i);v=new $(u,l=>Mt(l)),u.requiresLogin&&await v.login(t,n)}function Mt(r){postMessage(r)}var yt=async({data:r})=>{switch(r.type){case"connect":try{await vt(r.url,r.protocol,r.token,r.username,postMessage,r.retryLimitDisconnect,r.retryLimitStartup),postMessage({type:"connected"})}catch(e){postMessage({type:"connection-failed",reason:String(e)})}break;case"subscribe":ne&&te(\`client subscribe: \${JSON.stringify(r)}\`),v.subscribe(r);break;case"unsubscribe":ne&&te(\`client unsubscribe: \${JSON.stringify(r)}\`),v.unsubscribe(r.viewport);break;default:ne&&te(\`client message: \${JSON.stringify(r)}\`),v.handleMessageFromClient(r)}};self.addEventListener("message",yt);postMessage({type:"ready"});
8
8
 
9
9
  `;
10
10
 
@@ -1 +1 @@
1
- {"version":3,"file":"inlined-worker.js","sources":["../src/inlined-worker.js"],"sourcesContent":["export const workerSourceCode = `\nvar ie=(r,e,t)=>{if(!e.has(r))throw TypeError(\"Cannot \"+t)};var m=(r,e,t)=>(ie(r,e,\"read from private field\"),t?t.call(r):e.get(r)),ae=(r,e,t)=>{if(e.has(r))throw TypeError(\"Cannot add the same private member more than once\");e instanceof WeakSet?e.add(r):e.set(r,t)},ue=(r,e,t,n)=>(ie(r,e,\"write to private field\"),n?n.call(r,t):e.set(r,t),t);function le(r,e,t=[],n=[]){for(let s=0,o=r.length;s<o;s++)(e(r[s],s)?t:n).push(r[s]);return[t,n]}var Je=6,B={IDX:0,RENDER_IDX:1,IS_LEAF:2,IS_EXPANDED:3,DEPTH:4,COUNT:5,KEY:Je,SELECTED:7,count:8,PARENT_IDX:\"parent_idx\",IDX_POINTER:\"idx_pointer\",FILTER_COUNT:\"filter_count\",NEXT_FILTER_IDX:\"next_filter_idx\"};var{DEPTH:It,IS_LEAF:Pt}=B;var ce=r=>{var e,t;if(((e=globalThis.document)==null?void 0:e.cookie)!==void 0)return(t=globalThis.document.cookie.split(\"; \").find(n=>n.startsWith(\\`\\${r}=\\`)))==null?void 0:t.split(\"=\")[1]};function G({from:r,to:e},t=0,n=Number.MAX_SAFE_INTEGER){if(r===0&&e===0)return{from:r,to:e};if(t===0)return n<r?{from:0,to:0}:{from:r,to:Math.min(e,n)};if(r===0)return{from:r,to:Math.min(e+t,n)};{let s=r-t<0,o=n-(e+t)<0;return s&&o?{from:0,to:n}:s?{from:0,to:e+t}:o?{from:Math.max(0,r-t),to:n}:{from:r-t,to:e+t}}}var je=(r,{from:e,to:t})=>r>=e&&r<t;var I=class r{constructor(e,t){this.from=e,this.to=t}isWithin(e){return je(e,this)}overlap(e,t){return e>=this.to||t<this.from?[0,0]:[Math.max(e,this.from),Math.min(t,this.to)]}copy(){return new r(this.from,this.to)}};var pe=r=>r.type===\"connection-status\",de=r=>r.type===\"connection-metrics\";var ge=r=>\"viewport\"in r;var Ye=[\"error\",\"warn\",\"info\",\"debug\"],Qe=r=>typeof r==\"string\"&&Ye.includes(r),Xe=\"error\",P=()=>{},Ze=\"error\",{loggingLevel:L=Ze}=et(),b=r=>{let e=L===\"debug\",t=e||L===\"info\",n=t||L===\"warn\",s=n||L===\"error\",o=t?p=>console.info(\\`[\\${r}] \\${p}\\`):P,i=n?p=>console.warn(\\`[\\${r}] \\${p}\\`):P,u=e?p=>console.debug(\\`[\\${r}] \\${p}\\`):P;return{errorEnabled:s,error:s?p=>console.error(\\`[\\${r}] \\${p}\\`):P}};function et(){return typeof loggingSettings<\"u\"?loggingSettings:{loggingLevel:tt()}}function tt(){let r=ce(\"vuu-logging-level\");return Qe(r)?r:Xe}var{debug:nt,debugEnabled:st}=b(\"range-monitor\"),k=class{constructor(e){this.source=e;this.range={from:0,to:0};this.timestamp=0}isSet(){return this.timestamp!==0}set({from:e,to:t}){let{timestamp:n}=this;if(this.range.from=e,this.range.to=t,this.timestamp=performance.now(),n)st&&nt(\\`<\\${this.source}> [\\${e}-\\${t}], \\${(this.timestamp-n).toFixed(0)} ms elapsed\\`);else return 0}};var rt=[],x=class{constructor(e){this.keys=new Map;this.nextKeyValue=0;this.range=e,this.init(e)}next(e=rt){return e.length>0?e.shift():this.nextKeyValue++}init({from:e,to:t}){this.keys.clear(),this.nextKeyValue=0;for(let n=e;n<t;n++){let s=this.next();this.keys.set(n,s)}return!0}reset(e){let{from:t,to:n}=e,s=n-t,o=this.range.to-this.range.from;if(this.range=e,o>s)return this.init(e);let i=[];this.keys.forEach((u,l)=>{(l<t||l>=n)&&(i.push(u),this.keys.delete(l))});for(let u=t;u<n;u++)if(!this.keys.has(u)){let l=this.next(i);this.keys.set(u,l)}return!1}keyFor(e){let t=this.keys.get(e);if(t===void 0)throw console.log(\\`key not found\n keys: \\${this.toDebugString()}\n \\`),Error(\\`KeySet, no key found for rowIndex \\${e}\\`);return t}toDebugString(){return\\`\\${this.keys.size} keys\n\\${Array.from(this.keys.entries()).sort(([e],[t])=>e-t).map(([e,t])=>\\`\\${e}=>\\${t}\\`).join(\",\")}]\n\\`}};var{SELECTED:Ft}=B,E={False:0,True:1,First:2,Last:4};var ot=(r,e)=>e>=r[0]&&e<=r[1],it=E.True+E.First+E.Last,at=E.True+E.First,ut=E.True+E.Last,H=(r,e)=>{for(let t of r)if(typeof t==\"number\"){if(t===e)return it}else if(ot(t,e))return e===t[0]?at:e===t[1]?ut:E.True;return E.False};var he=r=>{if(r.every(t=>typeof t==\"number\"))return r;let e=[];for(let t of r)if(typeof t==\"number\")e.push(t);else for(let n=t[0];n<=t[1];n++)e.push(n);return e};var fe=r=>r.type===\"VIEW_PORT_MENU_RESP\"&&r.action!==null&&O(r.action.table),O=r=>r!==null&&typeof r==\"object\"&&\"table\"in r&&\"module\"in r?r.table.startsWith(\"session\"):!1;var lt=[\"VIEW_PORT_MENUS_SELECT_RPC\",\"VIEW_PORT_MENU_TABLE_RPC\",\"VIEW_PORT_MENU_ROW_RPC\",\"VIEW_PORT_MENU_CELL_RPC\",\"VP_EDIT_CELL_RPC\",\"VP_EDIT_ROW_RPC\",\"VP_EDIT_ADD_ROW_RPC\",\"VP_EDIT_DELETE_CELL_RPC\",\"VP_EDIT_DELETE_ROW_RPC\",\"VP_EDIT_SUBMIT_FORM_RPC\"],me=r=>lt.includes(r.type),Ce=r=>r.type===\"VIEW_PORT_RPC_CALL\",A=({requestId:r,...e})=>[r,e],Re=r=>{let e=r.at(0);if(e.updateType===\"SIZE\"){if(r.length===1)return r;e=r.at(1)}let t=r.at(-1);return[e,t]},Se=r=>{let e={};for(let t of r)(e[t.viewPortId]||(e[t.viewPortId]=[])).push(t);return e},z=({columns:r,dataTypes:e,key:t,table:n})=>({table:n,columns:r.map((s,o)=>({name:s,serverDataType:e[o]})),key:t});var Te=\"CHANGE_VP_SUCCESS\";var be=\"CLOSE_TREE_NODE\",we=\"CLOSE_TREE_SUCCESS\";var Ee=\"CREATE_VP\",Ve=\"DISABLE_VP\",ve=\"DISABLE_VP_SUCCESS\";var Me=\"ENABLE_VP\",ye=\"ENABLE_VP_SUCCESS\";var K=\"GET_VP_VISUAL_LINKS\",_e=\"GET_VIEW_PORT_MENUS\";var De=\"HB\",Ie=\"HB_RESP\",Pe=\"LOGIN\",Le=\"OPEN_TREE_NODE\",ke=\"OPEN_TREE_SUCCESS\";var xe=\"REMOVE_VP\";var Oe=\"SET_SELECTION_SUCCESS\";var We=r=>{switch(r){case\"TypeAheadRpcHandler\":return\"TYPEAHEAD\";default:return\"SIMUL\"}};var Ne=[],C=b(\"array-backed-moving-window\");function ct(r,e){if(!e||e.data.length!==r.data.length||e.sel!==r.sel)return!1;for(let t=0;t<e.data.length;t++)if(e.data[t]!==r.data[t])return!1;return!0}var h,W=class{constructor({from:e,to:t},{from:n,to:s},o){ae(this,h,void 0);this.setRowCount=e=>{var t;if((t=C.info)==null||t.call(C,\\`setRowCount \\${e}\\`),e<this.internalData.length&&(this.internalData.length=e),e<this.rowCount){this.rowsWithinRange=0;let n=Math.min(e,this.clientRange.to);for(let s=this.clientRange.from;s<n;s++){let o=s-m(this,h).from;this.internalData[o]!==void 0&&(this.rowsWithinRange+=1)}}this.rowCount=e};this.bufferBreakout=(e,t)=>{let n=this.bufferSize*.25;return m(this,h).to-t<n?!0:m(this,h).from>0&&e-m(this,h).from<n};this.bufferSize=o,this.clientRange=new I(e,t),ue(this,h,new I(n,s)),this.internalData=new Array(o),this.rowsWithinRange=0,this.rowCount=0}get range(){return m(this,h)}get hasAllRowsWithinRange(){return this.rowsWithinRange===this.clientRange.to-this.clientRange.from||this.rowCount>0&&this.clientRange.from+this.rowsWithinRange===this.rowCount}outOfRange(e,t){let{from:n,to:s}=this.range;if(t<n||e>=s)return!0}setAtIndex(e){let{rowIndex:t}=e,n=t-m(this,h).from;if(ct(e,this.internalData[n]))return!1;let s=this.isWithinClientRange(t);return(s||this.isWithinRange(t))&&(!this.internalData[n]&&s&&(this.rowsWithinRange+=1),this.internalData[n]=e),s}getAtIndex(e){return m(this,h).isWithin(e)&&this.internalData[e-m(this,h).from]!=null?this.internalData[e-m(this,h).from]:void 0}isWithinRange(e){return m(this,h).isWithin(e)}isWithinClientRange(e){return this.clientRange.isWithin(e)}setClientRange(e,t){var p;(p=C.debug)==null||p.call(C,\\`setClientRange \\${e} - \\${t}\\`);let n=this.clientRange.from,s=Math.min(this.clientRange.to,this.rowCount);if(e===n&&t===s)return[!1,Ne];let o=this.clientRange.copy();this.clientRange.from=e,this.clientRange.to=t,this.rowsWithinRange=0;for(let a=e;a<t;a++){let c=a-m(this,h).from;this.internalData[c]&&(this.rowsWithinRange+=1)}let i=Ne,u=m(this,h).from;if(this.hasAllRowsWithinRange)if(t>o.to){let a=Math.max(e,o.to);i=this.internalData.slice(a-u,t-u)}else{let a=Math.min(o.from,t);i=this.internalData.slice(e-u,a-u)}return[this.bufferBreakout(e,t),i]}setRange(e,t){var n,s;if(e!==m(this,h).from||t!==m(this,h).to){(n=C.debug)==null||n.call(C,\\`setRange \\${e} - \\${t}\\`);let[o,i]=m(this,h).overlap(e,t),u=new Array(t-e);this.rowsWithinRange=0;for(let l=o;l<i;l++){let p=this.getAtIndex(l);if(p){let a=l-e;u[a]=p,this.isWithinClientRange(l)&&(this.rowsWithinRange+=1)}}this.internalData=u,m(this,h).from=e,m(this,h).to=t}else(s=C.debug)==null||s.call(C,\\`setRange \\${e} - \\${t} IGNORED because not changed\\`)}get data(){return this.internalData}getData(){var u;let{from:e,to:t}=m(this,h),{from:n,to:s}=this.clientRange,o=Math.max(0,n-e),i=Math.min(t-e,t,s-e,(u=this.rowCount)!=null?u:t);return this.internalData.slice(o,i)}clear(){var e;(e=C.debug)==null||e.call(C,\"clear\"),this.internalData.length=0,this.rowsWithinRange=0,this.setRowCount(0)}getCurrentDataRange(){let e=this.internalData,t=e.length,[n]=this.internalData,s=this.internalData[t-1];if(n&&s)return[n.rowIndex,s.rowIndex];for(let o=0;o<t;o++)if(e[o]!==void 0){n=e[o];break}for(let o=t-1;o>=0;o--)if(e[o]!==void 0){s=e[o];break}return n&&s?[n.rowIndex,s.rowIndex]:[-1,-1]}};h=new WeakMap;var{debug:f,debugEnabled:N,error:pt,info:d,infoEnabled:dt,warn:M}=b(\"viewport\"),gt=({rowKey:r,updateType:e})=>e===\"U\"&&!r.startsWith(\"\\$root\"),U=[void 0,void 0],ht={count:0,mode:void 0,size:0,ts:0},q=class{constructor({aggregations:e,bufferSize:t=50,columns:n,filter:s,groupBy:o=[],table:i,range:u,sort:l,title:p,viewport:a,visualLink:c},g){this.batchMode=!0;this.hasUpdates=!1;this.pendingUpdates=[];this.pendingOperations=new Map;this.pendingRangeRequests=[];this.rowCountChanged=!1;this.selectedRows=[];this.useBatchMode=!0;this.lastUpdateStatus=ht;this.updateThrottleTimer=void 0;this.rangeMonitor=new k(\"ViewPort\");this.disabled=!1;this.isTree=!1;this.status=\"\";this.suspended=!1;this.suspendTimer=null;this.setLastSizeOnlyUpdateSize=e=>{this.lastUpdateStatus.size=e};this.setLastUpdate=e=>{let{ts:t,mode:n}=this.lastUpdateStatus,s=0;if(n===e){let o=Date.now();this.lastUpdateStatus.count+=1,this.lastUpdateStatus.ts=o,s=t===0?0:o-t}else this.lastUpdateStatus.count=1,this.lastUpdateStatus.ts=0,s=0;return this.lastUpdateStatus.mode=e,s};this.rangeRequestAlreadyPending=e=>{let{bufferSize:t}=this,n=t*.25,{from:s}=e;for(let{from:o,to:i}of this.pendingRangeRequests)if(s>=o&&s<i){if(e.to+n<=i)return!0;s=i}return!1};this.sendThrottledSizeMessage=()=>{this.updateThrottleTimer=void 0,this.lastUpdateStatus.count=3,this.postMessageToClient({clientViewportId:this.clientViewportId,mode:\"size-only\",size:this.lastUpdateStatus.size,type:\"viewport-update\"})};this.shouldThrottleMessage=e=>{let t=this.setLastUpdate(e);return e===\"size-only\"&&t>0&&t<500&&this.lastUpdateStatus.count>3};this.throttleMessage=e=>this.shouldThrottleMessage(e)?(d==null||d(\"throttling updates setTimeout to 2000\"),this.updateThrottleTimer===void 0&&(this.updateThrottleTimer=setTimeout(this.sendThrottledSizeMessage,2e3)),!0):(this.updateThrottleTimer!==void 0&&(clearTimeout(this.updateThrottleTimer),this.updateThrottleTimer=void 0),!1);this.getNewRowCount=()=>{if(this.rowCountChanged&&this.dataWindow)return this.rowCountChanged=!1,this.dataWindow.rowCount};this.aggregations=e,this.bufferSize=t,this.clientRange=u,this.clientViewportId=a,this.columns=n,this.filter=s,this.groupBy=o,this.keys=new x(u),this.pendingLinkedParent=c,this.table=i,this.sort=l,this.title=p,dt&&(d==null||d(\\`constructor #\\${a} \\${i.table} bufferSize=\\${t}\\`)),this.dataWindow=new W(this.clientRange,u,this.bufferSize),this.postMessageToClient=g}get hasUpdatesToProcess(){return this.suspended?!1:this.rowCountChanged||this.hasUpdates}get size(){var e;return(e=this.dataWindow.rowCount)!=null?e:0}subscribe(){let{filter:e}=this.filter;return this.status=this.status===\"subscribed\"?\"resubscribing\":\"subscribing\",{type:Ee,table:this.table,range:G(this.clientRange,this.bufferSize),aggregations:this.aggregations,columns:this.columns,sort:this.sort,groupBy:this.groupBy,filterSpec:{filter:e}}}handleSubscribed({viewPortId:e,aggregations:t,columns:n,filterSpec:s,range:o,sort:i,groupBy:u,table:l},p){this.serverViewportId=e,this.status=\"subscribed\",this.aggregations=t,this.columns=n,this.groupBy=u,this.isTree=u&&u.length>0,this.dataWindow.setRange(o.from,o.to);let a=l===p.table.table?p:{...p,table:{...p.table,session:l}};return{aggregations:t,type:\"subscribed\",clientViewportId:this.clientViewportId,columns:n,filter:s,groupBy:u,range:o,sort:i,tableSchema:a}}awaitOperation(e,t){this.pendingOperations.set(e,t)}completeOperation(e,...t){var u;let{clientViewportId:n,pendingOperations:s}=this,o=s.get(e);if(!o){pt(\\`no matching operation found to complete for requestId \\${e}\\`);return}let{type:i}=o;if(d==null||d(\\`completeOperation \\${i}\\`),s.delete(e),i===\"CHANGE_VP_RANGE\"){let[l,p]=t;(u=this.dataWindow)==null||u.setRange(l,p);for(let a=this.pendingRangeRequests.length-1;a>=0;a--){let c=this.pendingRangeRequests[a];if(c.requestId===e){c.acked=!0;break}else M==null||M(\"range requests sent faster than they are being ACKed\")}}else if(i===\"config\"){let{aggregations:l,columns:p,filter:a,groupBy:c,sort:g}=o.data;return this.aggregations=l,this.columns=p,this.filter=a,this.groupBy=c,this.sort=g,c.length>0?this.isTree=!0:this.isTree&&(this.isTree=!1),f==null||f(\\`config change confirmed, isTree : \\${this.isTree}\\`),{clientViewportId:n,type:i,config:o.data}}else{if(i===\"groupBy\")return this.isTree=o.data.length>0,this.groupBy=o.data,f==null||f(\\`groupBy change confirmed, isTree : \\${this.isTree}\\`),{clientViewportId:n,type:i,groupBy:o.data};if(i===\"columns\")return this.columns=o.data,{clientViewportId:n,type:i,columns:o.data};if(i===\"filter\")return this.filter=o.data,{clientViewportId:n,type:i,filter:o.data};if(i===\"aggregate\")return this.aggregations=o.data,{clientViewportId:n,type:\"aggregate\",aggregations:this.aggregations};if(i===\"sort\")return this.sort=o.data,{clientViewportId:n,type:i,sort:this.sort};if(i!==\"selection\"){if(i===\"disable\")return this.disabled=!0,{type:\"disabled\",clientViewportId:n};if(i===\"enable\")return this.disabled=!1,{type:\"enabled\",clientViewportId:n};if(i===\"CREATE_VISUAL_LINK\"){let[l,p,a]=t;return this.linkedParent={colName:l,parentViewportId:p,parentColName:a},this.pendingLinkedParent=void 0,{type:\"vuu-link-created\",clientViewportId:n,colName:l,parentViewportId:p,parentColName:a}}else if(i===\"REMOVE_VISUAL_LINK\")return this.linkedParent=void 0,{type:\"vuu-link-removed\",clientViewportId:n}}}}rangeRequest(e,t){N&&this.rangeMonitor.set(t);let n=\"CHANGE_VP_RANGE\";if(this.dataWindow){let[s,o]=this.dataWindow.setClientRange(t.from,t.to),i,u=this.dataWindow.rowCount||void 0,l=s&&!this.rangeRequestAlreadyPending(t)?{type:n,viewPortId:this.serverViewportId,...G(t,this.bufferSize,u)}:null;if(l){N&&(f==null||f(\\`create CHANGE_VP_RANGE: [\\${l.from} - \\${l.to}]\\`)),this.awaitOperation(e,{type:n});let a=this.pendingRangeRequests.at(-1);if(a)if(a.acked)console.warn(\"Range Request before previous request is filled\");else{let{from:c,to:g}=a;this.dataWindow.outOfRange(c,g)?i={clientViewportId:this.clientViewportId,type:\"debounce-begin\"}:M==null||M(\"Range Request before previous request is acked\")}this.pendingRangeRequests.push({...l,requestId:e}),this.useBatchMode&&(this.batchMode=!0)}else o.length>0&&(this.batchMode=!1);this.keys.reset(this.dataWindow.clientRange);let p=this.isTree?j:J;return o.length?[l,o.map(a=>p(a,this.keys,this.selectedRows))]:i?[l,void 0,i]:[l]}else return[null]}setLinks(e){return this.links=e,[{type:\"vuu-links\",links:e,clientViewportId:this.clientViewportId},this.pendingLinkedParent]}setMenu(e){return{type:\"vuu-menu\",menu:e,clientViewportId:this.clientViewportId}}openTreeNode(e,t){return this.useBatchMode&&(this.batchMode=!0),{type:Le,vpId:this.serverViewportId,treeKey:t.key}}closeTreeNode(e,t){return this.useBatchMode&&(this.batchMode=!0),{type:be,vpId:this.serverViewportId,treeKey:t.key}}createLink(e,t,n,s){let o={type:\"CREATE_VISUAL_LINK\",parentVpId:n,childVpId:this.serverViewportId,parentColumnName:s,childColumnName:t};return this.awaitOperation(e,o),this.useBatchMode&&(this.batchMode=!0),o}removeLink(e){let t={type:\"REMOVE_VISUAL_LINK\",childVpId:this.serverViewportId};return this.awaitOperation(e,t),t}suspend(){this.suspended=!0,d==null||d(\"suspend\")}resume(){return this.suspended=!1,N&&(f==null||f(\\`resume: \\${this.currentData()}\\`)),[this.size,this.currentData()]}currentData(){let e=[];if(this.dataWindow){let t=this.dataWindow.getData(),{keys:n}=this,s=this.isTree?j:J;for(let o of t)o&&e.push(s(o,n,this.selectedRows))}return e}enable(e){return this.awaitOperation(e,{type:\"enable\"}),d==null||d(\\`enable: \\${this.serverViewportId}\\`),{type:Me,viewPortId:this.serverViewportId}}disable(e){return this.awaitOperation(e,{type:\"disable\"}),d==null||d(\\`disable: \\${this.serverViewportId}\\`),this.suspended=!1,{type:Ve,viewPortId:this.serverViewportId}}columnRequest(e,t){return this.awaitOperation(e,{type:\"columns\",data:t}),f==null||f(\\`columnRequest: \\${t}\\`),this.createRequest({columns:t})}setConfig(e,t){var o;this.awaitOperation(e,{type:\"config\",data:t});let{filter:n,...s}=t;return this.useBatchMode&&(this.batchMode=!0),N?f==null||f(\\`setConfig \\${JSON.stringify(t)}\\`):d==null||d(\"setConfig\"),!this.isTree&&t.groupBy.length>0&&((o=this.dataWindow)==null||o.clear()),this.createRequest({...s,filterSpec:typeof(n==null?void 0:n.filter)==\"string\"?{filter:n.filter}:{filter:\"\"}},!0)}aggregateRequest(e,t){return this.awaitOperation(e,{type:\"aggregate\",data:t}),d==null||d(\\`aggregateRequest: \\${t}\\`),this.createRequest({aggregations:t})}sortRequest(e,t){return this.awaitOperation(e,{type:\"sort\",data:t}),d==null||d(\\`sortRequest: \\${JSON.stringify(t.sortDefs)}\\`),this.createRequest({sort:t})}selectRequest(e,t){return this.selectedRows=t,this.awaitOperation(e,{type:\"selection\",data:t}),d==null||d(\\`selectRequest: \\${t}\\`),{type:\"SET_SELECTION\",vpId:this.serverViewportId,selection:he(t)}}removePendingRangeRequest(e,t){for(let n=this.pendingRangeRequests.length-1;n>=0;n--){let{from:s,to:o}=this.pendingRangeRequests[n],i=!0;if(e>=s&&e<o||t>s&&t<o){i||console.warn(\"removePendingRangeRequest TABLE_ROWS are not for latest request\"),this.pendingRangeRequests.splice(n,1);break}else i=!1}}updateRows(e){var s,o,i;let[t,n]=Re(e);if(t&&n&&this.removePendingRangeRequest(t.rowIndex,n.rowIndex),e.length===1)if(t.vpSize===0&&this.disabled){f==null||f(\\`ignore a SIZE=0 message on disabled viewport (\\${e.length} rows)\\`);return}else t.updateType===\"SIZE\"&&this.setLastSizeOnlyUpdateSize(t.vpSize);for(let u of e)this.isTree&&gt(u)||((u.updateType===\"SIZE\"||((s=this.dataWindow)==null?void 0:s.rowCount)!==u.vpSize)&&((o=this.dataWindow)==null||o.setRowCount(u.vpSize),this.rowCountChanged=!0),u.updateType===\"U\"&&(i=this.dataWindow)!=null&&i.setAtIndex(u)&&(this.hasUpdates=!0,this.batchMode||this.pendingUpdates.push(u)))}getClientRows(){let e,t=\"size-only\";if(!this.hasUpdates&&!this.rowCountChanged)return U;if(this.hasUpdates){let{keys:n,selectedRows:s}=this,o=this.isTree?j:J;if(this.updateThrottleTimer&&(self.clearTimeout(this.updateThrottleTimer),this.updateThrottleTimer=void 0),this.pendingUpdates.length>0){e=[],t=\"update\";for(let i of this.pendingUpdates)e.push(o(i,n,s));this.pendingUpdates.length=0}else{let i=this.dataWindow.getData();if(this.dataWindow.hasAllRowsWithinRange){e=[],t=\"batch\";for(let u of i)e.push(o(u,n,s));this.batchMode=!1}}this.hasUpdates=!1}return this.throttleMessage(t)?U:[e,t]}createRequest(e,t=!1){return t?{type:\"CHANGE_VP\",viewPortId:this.serverViewportId,...e}:{type:\"CHANGE_VP\",viewPortId:this.serverViewportId,aggregations:this.aggregations,columns:this.columns,sort:this.sort,groupBy:this.groupBy,filterSpec:{filter:this.filter.filter},...e}}},J=({rowIndex:r,rowKey:e,sel:t,data:n},s,o)=>[r,s.keyFor(r),!0,!1,0,0,e,t?H(o,r):0].concat(n),j=({rowIndex:r,rowKey:e,sel:t,data:n},s,o)=>{let[i,u,,l,,p,...a]=n;return[r,s.keyFor(r),l,u,i,p,e,t?H(o,r):0].concat(a)};var Ue=1;var{debug:V,debugEnabled:Y,error:y,info:T,infoEnabled:ft,warn:Q}=b(\"server-proxy\"),R=()=>\\`\\${Ue++}\\`,mt={},Ct=r=>r.disabled!==!0&&r.suspended!==!0,Rt={type:\"NO_ACTION\"},St=(r,e,t)=>r.map(n=>n.parentVpId===e?{...n,label:t}:n);function Tt(r,e){return r.map(t=>{let{parentVpId:n}=t,s=e.get(n);if(s)return{...t,parentClientVpId:s.clientViewportId,label:s.title};throw Error(\"addLabelsToLinks viewport not found\")})}var \\$=class{constructor(e,t){this.authToken=\"\";this.user=\"user\";this.pendingRequests=new Map;this.queuedRequests=[];this.cachedTableMetaRequests=new Map;this.cachedTableSchemas=new Map;this.connection=e,this.postMessageToClient=t,this.viewports=new Map,this.mapClientToServerViewport=new Map}async reconnect(){await this.login(this.authToken);let[e,t]=le(Array.from(this.viewports.values()),Ct);this.viewports.clear(),this.mapClientToServerViewport.clear();let n=s=>{s.forEach(o=>{let{clientViewportId:i}=o;this.viewports.set(i,o),this.sendMessageToServer(o.subscribe(),i)})};n(e),setTimeout(()=>{n(t)},2e3)}async login(e,t=\"user\"){if(e)return this.authToken=e,this.user=t,new Promise((n,s)=>{this.sendMessageToServer({type:Pe,token:this.authToken,user:t},\"\"),this.pendingLogin={resolve:n,reject:s}});this.authToken===\"\"&&y(\"login, cannot login until auth token has been obtained\")}subscribe(e){if(this.mapClientToServerViewport.has(e.viewport))y(\\`spurious subscribe call \\${e.viewport}\\`);else{let t=this.getTableMeta(e.table),n=new q(e,this.postMessageToClient);this.viewports.set(e.viewport,n);let s=this.awaitResponseToMessage(n.subscribe(),e.viewport);Promise.all([s,t]).then(([i,u])=>{let{viewPortId:l}=i,{status:p}=n;e.viewport!==l&&(this.viewports.delete(e.viewport),this.viewports.set(l,n)),this.mapClientToServerViewport.set(e.viewport,l);let a=n.handleSubscribed(i,u);a&&(this.postMessageToClient(a),Y&&V(\\`post DataSourceSubscribedMessage to client: \\${JSON.stringify(a)}\\`)),n.disabled&&this.disableViewport(n),this.queuedRequests.length>0&&this.processQueuedRequests(),p===\"subscribing\"&&!O(n.table)&&(this.sendMessageToServer({type:K,vpId:l}),this.sendMessageToServer({type:_e,vpId:l}),Array.from(this.viewports.entries()).filter(([c,{disabled:g}])=>c!==l&&!g).forEach(([c])=>{this.sendMessageToServer({type:K,vpId:c})}))})}}processQueuedRequests(){let e={};for(;this.queuedRequests.length;){let t=this.queuedRequests.pop();if(t){let{clientViewportId:n,message:s,requestId:o}=t;if(s.type===\"CHANGE_VP_RANGE\"){if(e.CHANGE_VP_RANGE)continue;e.CHANGE_VP_RANGE=!0;let i=this.mapClientToServerViewport.get(n);i&&this.sendMessageToServer({...s,viewPortId:i},o)}}}}unsubscribe(e){let t=this.mapClientToServerViewport.get(e);t?(T==null||T(\\`Unsubscribe Message (Client to Server):\n \\${t}\\`),this.sendMessageToServer({type:xe,viewPortId:t})):y(\\`failed to unsubscribe client viewport \\${e}, viewport not found\\`)}getViewportForClient(e,t=!0){let n=this.mapClientToServerViewport.get(e);if(n){let s=this.viewports.get(n);if(s)return s;if(t)throw Error(\\`Viewport not found for client viewport \\${e}\\`);return null}else{if(this.viewports.has(e))return this.viewports.get(e);if(t)throw Error(\\`Viewport server id not found for client viewport \\${e}\\`);return null}}setViewRange(e,t){let n=R(),[s,o,i]=e.rangeRequest(n,t.range);T==null||T(\\`setViewRange \\${t.range.from} - \\${t.range.to}\\`),s&&(this.sendIfReady(s,n,e.status===\"subscribed\")||this.queuedRequests.push({clientViewportId:t.viewport,message:s,requestId:n})),o?(T==null||T(\\`setViewRange \\${o.length} rows returned from cache\\`),this.postMessageToClient({mode:\"batch\",type:\"viewport-update\",clientViewportId:e.clientViewportId,rows:o})):i&&this.postMessageToClient(i)}setConfig(e,t){let n=R(),s=e.setConfig(n,t.config);this.sendIfReady(s,n,e.status===\"subscribed\")}aggregate(e,t){let n=R(),s=e.aggregateRequest(n,t.aggregations);this.sendIfReady(s,n,e.status===\"subscribed\")}sort(e,t){let n=R(),s=e.sortRequest(n,t.sort);this.sendIfReady(s,n,e.status===\"subscribed\")}setColumns(e,t){let n=R(),{columns:s}=t,o=e.columnRequest(n,s);this.sendIfReady(o,n,e.status===\"subscribed\")}setTitle(e,t){e&&(e.title=t.title,this.updateTitleOnVisualLinks(e))}select(e,t){let n=R(),{selected:s}=t,o=e.selectRequest(n,s);this.sendIfReady(o,n,e.status===\"subscribed\")}disableViewport(e){let t=R(),n=e.disable(t);this.sendIfReady(n,t,e.status===\"subscribed\")}enableViewport(e){if(e.disabled){let t=R(),n=e.enable(t);this.sendIfReady(n,t,e.status===\"subscribed\")}}suspendViewport(e){e.suspend(),e.suspendTimer=setTimeout(()=>{T==null||T(\"suspendTimer expired, escalate suspend to disable\"),this.disableViewport(e)},3e3)}resumeViewport(e){e.suspendTimer&&(V==null||V(\"clear suspend timer\"),clearTimeout(e.suspendTimer),e.suspendTimer=null);let[t,n]=e.resume();V==null||V(\\`resumeViewport size \\${t}, \\${n.length} rows sent to client\\`),this.postMessageToClient({clientViewportId:e.clientViewportId,mode:\"batch\",rows:n,size:t,type:\"viewport-update\"})}openTreeNode(e,t){if(e.serverViewportId){let n=R();this.sendIfReady(e.openTreeNode(n,t),n,e.status===\"subscribed\")}}closeTreeNode(e,t){if(e.serverViewportId){let n=R();this.sendIfReady(e.closeTreeNode(n,t),n,e.status===\"subscribed\")}}createLink(e,t){let{parentClientVpId:n,parentColumnName:s,childColumnName:o}=t,i=R(),u=this.mapClientToServerViewport.get(n);if(u){let l=e.createLink(i,o,u,s);this.sendMessageToServer(l,i)}else y(\"ServerProxy unable to create link, viewport not found\")}removeLink(e){let t=R(),n=e.removeLink(t);this.sendMessageToServer(n,t)}updateTitleOnVisualLinks(e){var s;let{serverViewportId:t,title:n}=e;for(let o of this.viewports.values())if(o!==e&&o.links&&t&&n&&(s=o.links)!=null&&s.some(i=>i.parentVpId===t)){let[i]=o.setLinks(St(o.links,t,n));this.postMessageToClient(i)}}removeViewportFromVisualLinks(e){var t;for(let n of this.viewports.values())if((t=n.links)!=null&&t.some(({parentVpId:s})=>s===e)){let[s]=n.setLinks(n.links.filter(({parentVpId:o})=>o!==e));this.postMessageToClient(s)}}menuRpcCall(e){let t=this.getViewportForClient(e.vpId,!1);if(t!=null&&t.serverViewportId){let[n,s]=A(e);this.sendMessageToServer({...s,vpId:t.serverViewportId},n)}}viewportRpcCall(e){let t=this.getViewportForClient(e.vpId,!1);if(t!=null&&t.serverViewportId){let[n,s]=A(e);this.sendMessageToServer({...s,vpId:t.serverViewportId,namedParams:{}},n)}}rpcCall(e){let[t,n]=A(e),s=We(n.service);this.sendMessageToServer(n,t,{module:s})}handleMessageFromClient(e){var t;if(ge(e))if(e.type===\"disable\"){let n=this.getViewportForClient(e.viewport,!1);return n!==null?this.disableViewport(n):void 0}else{let n=this.getViewportForClient(e.viewport);switch(e.type){case\"setViewRange\":return this.setViewRange(n,e);case\"config\":return this.setConfig(n,e);case\"aggregate\":return this.aggregate(n,e);case\"sort\":return this.sort(n,e);case\"select\":return this.select(n,e);case\"suspend\":return this.suspendViewport(n);case\"resume\":return this.resumeViewport(n);case\"enable\":return this.enableViewport(n);case\"openTreeNode\":return this.openTreeNode(n,e);case\"closeTreeNode\":return this.closeTreeNode(n,e);case\"createLink\":return this.createLink(n,e);case\"removeLink\":return this.removeLink(n);case\"setColumns\":return this.setColumns(n,e);case\"setTitle\":return this.setTitle(n,e);default:}}else{if(Ce(e))return this.viewportRpcCall(e);if(me(e))return this.menuRpcCall(e);{let{type:n,requestId:s}=e;switch(n){case\"GET_TABLE_LIST\":{(t=this.tableList)!=null||(this.tableList=this.awaitResponseToMessage({type:n},s)),this.tableList.then(o=>{this.postMessageToClient({type:\"TABLE_LIST_RESP\",tables:o.tables,requestId:s})});return}case\"GET_TABLE_META\":{this.getTableMeta(e.table,s).then(o=>{o&&this.postMessageToClient({type:\"TABLE_META_RESP\",tableSchema:o,requestId:s})});return}case\"RPC_CALL\":return this.rpcCall(e);default:}}}y(\\`Vuu ServerProxy Unexpected message from client \\${JSON.stringify(e)}\\`)}getTableMeta(e,t=R()){if(O(e))return Promise.resolve(void 0);let n=\\`\\${e.module}:\\${e.table}\\`,s=this.cachedTableMetaRequests.get(n);return s||(s=this.awaitResponseToMessage({type:\"GET_TABLE_META\",table:e},t),this.cachedTableMetaRequests.set(n,s)),s==null?void 0:s.then(o=>this.cacheTableMeta(o))}awaitResponseToMessage(e,t=R()){return new Promise((n,s)=>{this.sendMessageToServer(e,t),this.pendingRequests.set(t,{reject:s,resolve:n})})}sendIfReady(e,t,n=!0){return n&&this.sendMessageToServer(e,t),n}sendMessageToServer(e,t=\\`\\${Ue++}\\`,n=mt){let{module:s=\"CORE\"}=n;this.authToken&&this.connection.send({requestId:t,sessionId:this.sessionId,token:this.authToken,user:this.user,module:s,body:e})}handleMessageFromServer(e){var u;let{body:t,requestId:n,sessionId:s}=e,o=this.pendingRequests.get(n);if(o){let{resolve:a}=o;this.pendingRequests.delete(n),a(t);return}let{viewports:i}=this;switch(t.type){case De:this.sendMessageToServer({type:Ie,ts:+new Date},\"NA\");break;case\"LOGIN_SUCCESS\":if(s)this.sessionId=s,(u=this.pendingLogin)==null||u.resolve(s),this.pendingLogin=void 0;else throw Error(\"LOGIN_SUCCESS did not provide sessionId\");break;case\"REMOVE_VP_SUCCESS\":{let a=i.get(t.viewPortId);a&&(this.mapClientToServerViewport.delete(a.clientViewportId),i.delete(t.viewPortId),this.removeViewportFromVisualLinks(t.viewPortId))}break;case Oe:{let a=this.viewports.get(t.vpId);a&&a.completeOperation(n)}break;case Te:case ve:if(i.has(t.viewPortId)){let a=this.viewports.get(t.viewPortId);if(a){let c=a.completeOperation(n);c!==void 0&&(this.postMessageToClient(c),Y&&V(\\`postMessageToClient \\${JSON.stringify(c)}\\`))}}break;case ye:{let a=this.viewports.get(t.viewPortId);if(a){let c=a.completeOperation(n);if(c){this.postMessageToClient(c);let[g,S]=a.resume();this.postMessageToClient({clientViewportId:a.clientViewportId,mode:\"batch\",rows:S,size:g,type:\"viewport-update\"})}}}break;case\"TABLE_ROW\":{let a=Se(t.rows);for(let[c,g]of Object.entries(a)){let S=i.get(c);S?S.updateRows(g):Q==null||Q(\\`TABLE_ROW message received for non registered viewport \\${c}\\`)}this.processUpdates()}break;case\"CHANGE_VP_RANGE_SUCCESS\":{let a=this.viewports.get(t.viewPortId);if(a){let{from:c,to:g}=t;a.completeOperation(n,c,g)}}break;case ke:case we:break;case\"CREATE_VISUAL_LINK_SUCCESS\":{let a=this.viewports.get(t.childVpId),c=this.viewports.get(t.parentVpId);if(a&&c){let{childColumnName:g,parentColumnName:S}=t,D=a.completeOperation(n,g,c.clientViewportId,S);D&&this.postMessageToClient(D)}}break;case\"REMOVE_VISUAL_LINK_SUCCESS\":{let a=this.viewports.get(t.childVpId);if(a){let c=a.completeOperation(n);c&&this.postMessageToClient(c)}}break;case\"VP_VISUAL_LINKS_RESP\":{let a=this.getActiveLinks(t.links),c=this.viewports.get(t.vpId);if(a.length&&c){let g=Tt(a,this.viewports),[S,D]=c.setLinks(g);if(this.postMessageToClient(S),D){let{link:se,parentClientVpId:ze}=D,re=R(),oe=this.mapClientToServerViewport.get(ze);if(oe){let Ke=c.createLink(re,se.fromColumn,oe,se.toColumn);this.sendMessageToServer(Ke,re)}}}}break;case\"VIEW_PORT_MENUS_RESP\":if(t.menu.name){let a=this.viewports.get(t.vpId);if(a){let c=a.setMenu(t.menu);this.postMessageToClient(c)}}break;case\"VP_EDIT_RPC_RESPONSE\":this.postMessageToClient({action:t.action,requestId:n,rpcName:t.rpcName,type:\"VP_EDIT_RPC_RESPONSE\"});break;case\"VP_EDIT_RPC_REJECT\":this.viewports.get(t.vpId)&&this.postMessageToClient({requestId:n,type:\"VP_EDIT_RPC_REJECT\",error:t.error});break;case\"VIEW_PORT_MENU_REJ\":{console.log(\"send menu error back to client\");let{error:a,rpcName:c,vpId:g}=t,S=this.viewports.get(g);S&&this.postMessageToClient({clientViewportId:S.clientViewportId,error:a,rpcName:c,type:\"VIEW_PORT_MENU_REJ\",requestId:n});break}case\"VIEW_PORT_MENU_RESP\":if(fe(t)){let{action:a,rpcName:c}=t;this.awaitResponseToMessage({type:\"GET_TABLE_META\",table:a.table}).then(g=>{let S=z(g);this.postMessageToClient({rpcName:c,type:\"VIEW_PORT_MENU_RESP\",action:{...a,tableSchema:S},tableAlreadyOpen:this.isTableOpen(a.table),requestId:n})})}else{let{action:a}=t;this.postMessageToClient({type:\"VIEW_PORT_MENU_RESP\",action:a||Rt,tableAlreadyOpen:a!==null&&this.isTableOpen(a.table),requestId:n})}break;case\"RPC_RESP\":{let{method:a,result:c}=t;this.postMessageToClient({type:\"RPC_RESP\",method:a,result:c,requestId:n})}break;case\"VIEW_PORT_RPC_REPONSE\":{let{method:a,action:c}=t;this.postMessageToClient({type:\"VIEW_PORT_RPC_RESPONSE\",rpcName:a,action:c,requestId:n})}break;case\"ERROR\":y(t.msg);break;default:ft&&T(\\`handleMessageFromServer \\${t.type}.\\`)}}cacheTableMeta(e){let{module:t,table:n}=e.table,s=\\`\\${t}:\\${n}\\`,o=this.cachedTableSchemas.get(s);return o||(o=z(e),this.cachedTableSchemas.set(s,o)),o}isTableOpen(e){if(e){let t=e.table;for(let n of this.viewports.values())if(!n.suspended&&n.table.table===t)return!0}}getActiveLinks(e){return e.filter(t=>{let n=this.viewports.get(t.parentVpId);return n&&!n.suspended})}processUpdates(){this.viewports.forEach(e=>{var t;if(e.hasUpdatesToProcess){let n=e.getClientRows();if(n!==U){let[s,o]=n,i=e.getNewRowCount();(i!==void 0||s&&s.length>0)&&(Y&&V(\\`postMessageToClient #\\${e.clientViewportId} viewport-update \\${o}, \\${(t=s==null?void 0:s.length)!=null?t:\"no\"} rows, size \\${i}\\`),o&&this.postMessageToClient({clientViewportId:e.clientViewportId,mode:o,rows:s,size:i,type:\"viewport-update\"}))}}})}};var{debug:un,debugEnabled:ln,error:qe,info:w,infoEnabled:bt,warn:_}=b(\"websocket-connection\"),Be={},Z=Symbol(\"setWebsocket\"),F=Symbol(\"connectionCallback\");async function Ge(r,e,t,n=10,s=5){return Be[r]={status:\"connecting\",connect:{allowed:s,remaining:s},reconnect:{allowed:n,remaining:n}},He(r,e,t)}async function X(r){throw Error(\"connection broken\")}async function He(r,e,t,n){let{status:s,connect:o,reconnect:i}=Be[r],u=s===\"connecting\"?o:i;try{t({type:\"connection-status\",status:\"connecting\"});let l=typeof n<\"u\",p=await Et(r,e);console.info(\"%c\\u26A1 %cconnected\",\"font-size: 24px;color: green;font-weight: bold;\",\"color:green; font-size: 14px;\"),n!==void 0&&n[Z](p);let a=n!=null?n:new ee(p,r,e,t),c=l?\"reconnected\":\"connection-open-awaiting-session\";return t({type:\"connection-status\",status:c}),a.status=c,u.remaining=u.allowed,a}catch{let p=--u.remaining>0;if(t({type:\"connection-status\",status:\"disconnected\",reason:\"failed to connect\",retry:p}),p)return wt(r,e,t,n,2e3);throw t({type:\"connection-status\",status:\"failed\",reason:\"unable to connect\",retry:p}),Error(\"Failed to establish connection\")}}var wt=(r,e,t,n,s)=>new Promise(o=>{setTimeout(()=>{o(He(r,e,t,n))},s)}),Et=(r,e)=>new Promise((t,n)=>{bt&&e!==void 0&&w(\\`WebSocket Protocol \\${e==null?void 0:e.toString()}\\`);let s=new WebSocket(r,e);s.onopen=()=>t(s),s.onerror=o=>n(o)}),\\$e=()=>{_==null||_(\"Connection cannot be closed, socket not yet opened\")},Fe=r=>{_==null||_(\\`Message cannot be sent, socket closed \\${r.body.type}\\`)},Vt=r=>{try{return JSON.parse(r)}catch{throw Error(\\`Error parsing JSON response from server \\${r}\\`)}},ee=class{constructor(e,t,n,s){this.close=\\$e;this.requiresLogin=!0;this.send=Fe;this.status=\"ready\";this.messagesCount=0;this.connectionMetricsInterval=null;this.handleWebsocketMessage=e=>{let t=Vt(e.data);this.messagesCount+=1,this[F](t)};this.url=t,this.protocol=n,this[F]=s,this[Z](e)}reconnect(){X(this)}[(F,Z)](e){let t=this[F];e.onmessage=o=>{this.status=\"connected\",e.onmessage=this.handleWebsocketMessage,this.handleWebsocketMessage(o)},this.connectionMetricsInterval=setInterval(()=>{t({type:\"connection-metrics\",messagesLength:this.messagesCount}),this.messagesCount=0},2e3),e.onerror=()=>{qe(\"\\u26A1 connection error\"),t({type:\"connection-status\",status:\"disconnected\",reason:\"error\"}),this.connectionMetricsInterval&&(clearInterval(this.connectionMetricsInterval),this.connectionMetricsInterval=null),this.status===\"connection-open-awaiting-session\"?qe(\"Websocket connection lost before Vuu session established, check websocket configuration\"):this.status!==\"closed\"&&(X(this),this.send=s)},e.onclose=()=>{w==null||w(\"\\u26A1 connection close\"),t({type:\"connection-status\",status:\"disconnected\",reason:\"close\"}),this.connectionMetricsInterval&&(clearInterval(this.connectionMetricsInterval),this.connectionMetricsInterval=null),this.status!==\"closed\"&&(X(this),this.send=s)};let n=o=>{e.send(JSON.stringify(o))},s=o=>{w==null||w(\\`TODO queue message until websocket reconnected \\${o.body.type}\\`)};this.send=n,this.close=()=>{this.status=\"closed\",e.close(),this.close=\\$e,this.send=Fe,w==null||w(\"close websocket\")}}};var v,{info:te,infoEnabled:ne}=b(\"worker\");async function vt(r,e,t,n,s,o,i){let u=await Ge(r,e,l=>{de(l)?postMessage({type:\"connection-metrics\",messages:l}):pe(l)?(s(l),l.status===\"reconnected\"&&v.reconnect()):v.handleMessageFromServer(l)},o,i);v=new \\$(u,l=>Mt(l)),u.requiresLogin&&await v.login(t,n)}function Mt(r){postMessage(r)}var yt=async({data:r})=>{switch(r.type){case\"connect\":try{await vt(r.url,r.protocol,r.token,r.username,postMessage,r.retryLimitDisconnect,r.retryLimitStartup),postMessage({type:\"connected\"})}catch(e){postMessage({type:\"connection-failed\",reason:String(e)})}break;case\"subscribe\":ne&&te(\\`client subscribe: \\${JSON.stringify(r)}\\`),v.subscribe(r);break;case\"unsubscribe\":ne&&te(\\`client unsubscribe: \\${JSON.stringify(r)}\\`),v.unsubscribe(r.viewport);break;default:ne&&te(\\`client message: \\${JSON.stringify(r)}\\`),v.handleMessageFromClient(r)}};self.addEventListener(\"message\",yt);postMessage({type:\"ready\"});\n\n`;"],"names":[],"mappings":"AAAO,MAAM,gBAAmB,GAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;"}
1
+ {"version":3,"file":"inlined-worker.js","sources":["../src/inlined-worker.js"],"sourcesContent":["export const workerSourceCode = `\nvar ie=(r,e,t)=>{if(!e.has(r))throw TypeError(\"Cannot \"+t)};var m=(r,e,t)=>(ie(r,e,\"read from private field\"),t?t.call(r):e.get(r)),ae=(r,e,t)=>{if(e.has(r))throw TypeError(\"Cannot add the same private member more than once\");e instanceof WeakSet?e.add(r):e.set(r,t)},ue=(r,e,t,n)=>(ie(r,e,\"write to private field\"),n?n.call(r,t):e.set(r,t),t);function le(r,e,t=[],n=[]){for(let s=0,o=r.length;s<o;s++)(e(r[s],s)?t:n).push(r[s]);return[t,n]}var Je=6,B={IDX:0,RENDER_IDX:1,IS_LEAF:2,IS_EXPANDED:3,DEPTH:4,COUNT:5,KEY:Je,SELECTED:7,count:8,PARENT_IDX:\"parent_idx\",IDX_POINTER:\"idx_pointer\",FILTER_COUNT:\"filter_count\",NEXT_FILTER_IDX:\"next_filter_idx\"};var{DEPTH:It,IS_LEAF:Pt}=B;var ce=r=>{var e,t;if(((e=globalThis.document)==null?void 0:e.cookie)!==void 0)return(t=globalThis.document.cookie.split(\"; \").find(n=>n.startsWith(\\`\\${r}=\\`)))==null?void 0:t.split(\"=\")[1]};function G({from:r,to:e},t=0,n=Number.MAX_SAFE_INTEGER){if(r===0&&e===0)return{from:r,to:e};if(t===0)return n<r?{from:0,to:0}:{from:r,to:Math.min(e,n)};if(r===0)return{from:r,to:Math.min(e+t,n)};{let s=r-t<0,o=n-(e+t)<0;return s&&o?{from:0,to:n}:s?{from:0,to:e+t}:o?{from:Math.max(0,r-t),to:n}:{from:r-t,to:e+t}}}var je=(r,{from:e,to:t})=>r>=e&&r<t;var I=class r{constructor(e,t){this.from=e,this.to=t}isWithin(e){return je(e,this)}overlap(e,t){return e>=this.to||t<this.from?[0,0]:[Math.max(e,this.from),Math.min(t,this.to)]}copy(){return new r(this.from,this.to)}};var pe=r=>r.type===\"connection-status\",de=r=>r.type===\"connection-metrics\";var ge=r=>\"viewport\"in r;var Ye=[\"error\",\"warn\",\"info\",\"debug\"],Qe=r=>typeof r==\"string\"&&Ye.includes(r),Xe=\"error\",P=()=>{},Ze=\"error\",{loggingLevel:L=Ze}=et(),b=r=>{let e=L===\"debug\",t=e||L===\"info\",n=t||L===\"warn\",s=n||L===\"error\",o=t?p=>console.info(\\`[\\${r}] \\${p}\\`):P,i=n?p=>console.warn(\\`[\\${r}] \\${p}\\`):P,u=e?p=>console.debug(\\`[\\${r}] \\${p}\\`):P;return{errorEnabled:s,error:s?p=>console.error(\\`[\\${r}] \\${p}\\`):P}};function et(){return typeof loggingSettings<\"u\"?loggingSettings:{loggingLevel:tt()}}function tt(){let r=ce(\"vuu-logging-level\");return Qe(r)?r:Xe}var{debug:nt,debugEnabled:st}=b(\"range-monitor\"),k=class{constructor(e){this.source=e;this.range={from:0,to:0};this.timestamp=0}isSet(){return this.timestamp!==0}set({from:e,to:t}){let{timestamp:n}=this;if(this.range.from=e,this.range.to=t,this.timestamp=performance.now(),n)st&&nt(\\`<\\${this.source}> [\\${e}-\\${t}], \\${(this.timestamp-n).toFixed(0)} ms elapsed\\`);else return 0}};var rt=[],x=class{constructor(e){this.keys=new Map;this.nextKeyValue=0;this.range=e,this.init(e)}next(e=rt){return e.length>0?e.shift():this.nextKeyValue++}init({from:e,to:t}){this.keys.clear(),this.nextKeyValue=0;for(let n=e;n<t;n++){let s=this.next();this.keys.set(n,s)}return!0}reset(e){let{from:t,to:n}=e,s=n-t,o=this.range.to-this.range.from;if(this.range=e,o>s)return this.init(e);let i=[];this.keys.forEach((u,l)=>{(l<t||l>=n)&&(i.push(u),this.keys.delete(l))});for(let u=t;u<n;u++)if(!this.keys.has(u)){let l=this.next(i);this.keys.set(u,l)}return!1}keyFor(e){let t=this.keys.get(e);if(t===void 0)throw console.log(\\`key not found\n keys: \\${this.toDebugString()}\n \\`),Error(\\`KeySet, no key found for rowIndex \\${e}\\`);return t}toDebugString(){return\\`\\${this.keys.size} keys\n\\${Array.from(this.keys.entries()).sort(([e],[t])=>e-t).map(([e,t])=>\\`\\${e}=>\\${t}\\`).join(\",\")}]\n\\`}};var ot=[\"VIEW_PORT_MENUS_SELECT_RPC\",\"VIEW_PORT_MENU_TABLE_RPC\",\"VIEW_PORT_MENU_ROW_RPC\",\"VIEW_PORT_MENU_CELL_RPC\",\"VP_EDIT_CELL_RPC\",\"VP_EDIT_ROW_RPC\",\"VP_EDIT_ADD_ROW_RPC\",\"VP_EDIT_DELETE_CELL_RPC\",\"VP_EDIT_DELETE_ROW_RPC\",\"VP_EDIT_SUBMIT_FORM_RPC\"],he=r=>ot.includes(r.type);var{SELECTED:Bt}=B,E={False:0,True:1,First:2,Last:4};var it=(r,e)=>e>=r[0]&&e<=r[1],at=E.True+E.First+E.Last,ut=E.True+E.First,lt=E.True+E.Last,H=(r,e)=>{for(let t of r)if(typeof t==\"number\"){if(t===e)return at}else if(it(t,e))return e===t[0]?ut:e===t[1]?lt:E.True;return E.False};var fe=r=>{if(r.every(t=>typeof t==\"number\"))return r;let e=[];for(let t of r)if(typeof t==\"number\")e.push(t);else for(let n=t[0];n<=t[1];n++)e.push(n);return e};var me=r=>r.type===\"VIEW_PORT_MENU_RESP\"&&r.action!==null&&O(r.action.table),O=r=>r!==null&&typeof r==\"object\"&&\"table\"in r&&\"module\"in r?r.table.startsWith(\"session\"):!1;var Ce=r=>r.type===\"VIEW_PORT_RPC_CALL\",A=({requestId:r,...e})=>[r,e],Re=r=>{let e=r.at(0);if(e.updateType===\"SIZE\"){if(r.length===1)return r;e=r.at(1)}let t=r.at(-1);return[e,t]},Se=r=>{let e={};for(let t of r)(e[t.viewPortId]||(e[t.viewPortId]=[])).push(t);return e},z=({columns:r,dataTypes:e,key:t,table:n})=>({table:n,columns:r.map((s,o)=>({name:s,serverDataType:e[o]})),key:t});var Te=\"CHANGE_VP_SUCCESS\";var be=\"CLOSE_TREE_NODE\",we=\"CLOSE_TREE_SUCCESS\";var Ee=\"CREATE_VP\",Ve=\"DISABLE_VP\",ve=\"DISABLE_VP_SUCCESS\";var Me=\"ENABLE_VP\",ye=\"ENABLE_VP_SUCCESS\";var K=\"GET_VP_VISUAL_LINKS\",_e=\"GET_VIEW_PORT_MENUS\";var De=\"HB\",Ie=\"HB_RESP\",Pe=\"LOGIN\",Le=\"OPEN_TREE_NODE\",ke=\"OPEN_TREE_SUCCESS\";var xe=\"REMOVE_VP\";var Oe=\"SET_SELECTION_SUCCESS\";var We=r=>{switch(r){case\"TypeAheadRpcHandler\":return\"TYPEAHEAD\";default:return\"SIMUL\"}};var Ne=[],C=b(\"array-backed-moving-window\");function ct(r,e){if(!e||e.data.length!==r.data.length||e.sel!==r.sel)return!1;for(let t=0;t<e.data.length;t++)if(e.data[t]!==r.data[t])return!1;return!0}var h,W=class{constructor({from:e,to:t},{from:n,to:s},o){ae(this,h,void 0);this.setRowCount=e=>{var t;if((t=C.info)==null||t.call(C,\\`setRowCount \\${e}\\`),e<this.internalData.length&&(this.internalData.length=e),e<this.rowCount){this.rowsWithinRange=0;let n=Math.min(e,this.clientRange.to);for(let s=this.clientRange.from;s<n;s++){let o=s-m(this,h).from;this.internalData[o]!==void 0&&(this.rowsWithinRange+=1)}}this.rowCount=e};this.bufferBreakout=(e,t)=>{let n=this.bufferSize*.25;return m(this,h).to-t<n?!0:m(this,h).from>0&&e-m(this,h).from<n};this.bufferSize=o,this.clientRange=new I(e,t),ue(this,h,new I(n,s)),this.internalData=new Array(o),this.rowsWithinRange=0,this.rowCount=0}get range(){return m(this,h)}get hasAllRowsWithinRange(){return this.rowsWithinRange===this.clientRange.to-this.clientRange.from||this.rowCount>0&&this.clientRange.from+this.rowsWithinRange===this.rowCount}outOfRange(e,t){let{from:n,to:s}=this.range;if(t<n||e>=s)return!0}setAtIndex(e){let{rowIndex:t}=e,n=t-m(this,h).from;if(ct(e,this.internalData[n]))return!1;let s=this.isWithinClientRange(t);return(s||this.isWithinRange(t))&&(!this.internalData[n]&&s&&(this.rowsWithinRange+=1),this.internalData[n]=e),s}getAtIndex(e){return m(this,h).isWithin(e)&&this.internalData[e-m(this,h).from]!=null?this.internalData[e-m(this,h).from]:void 0}isWithinRange(e){return m(this,h).isWithin(e)}isWithinClientRange(e){return this.clientRange.isWithin(e)}setClientRange(e,t){var p;(p=C.debug)==null||p.call(C,\\`setClientRange \\${e} - \\${t}\\`);let n=this.clientRange.from,s=Math.min(this.clientRange.to,this.rowCount);if(e===n&&t===s)return[!1,Ne];let o=this.clientRange.copy();this.clientRange.from=e,this.clientRange.to=t,this.rowsWithinRange=0;for(let a=e;a<t;a++){let c=a-m(this,h).from;this.internalData[c]&&(this.rowsWithinRange+=1)}let i=Ne,u=m(this,h).from;if(this.hasAllRowsWithinRange)if(t>o.to){let a=Math.max(e,o.to);i=this.internalData.slice(a-u,t-u)}else{let a=Math.min(o.from,t);i=this.internalData.slice(e-u,a-u)}return[this.bufferBreakout(e,t),i]}setRange(e,t){var n,s;if(e!==m(this,h).from||t!==m(this,h).to){(n=C.debug)==null||n.call(C,\\`setRange \\${e} - \\${t}\\`);let[o,i]=m(this,h).overlap(e,t),u=new Array(t-e);this.rowsWithinRange=0;for(let l=o;l<i;l++){let p=this.getAtIndex(l);if(p){let a=l-e;u[a]=p,this.isWithinClientRange(l)&&(this.rowsWithinRange+=1)}}this.internalData=u,m(this,h).from=e,m(this,h).to=t}else(s=C.debug)==null||s.call(C,\\`setRange \\${e} - \\${t} IGNORED because not changed\\`)}get data(){return this.internalData}getData(){var u;let{from:e,to:t}=m(this,h),{from:n,to:s}=this.clientRange,o=Math.max(0,n-e),i=Math.min(t-e,t,s-e,(u=this.rowCount)!=null?u:t);return this.internalData.slice(o,i)}clear(){var e;(e=C.debug)==null||e.call(C,\"clear\"),this.internalData.length=0,this.rowsWithinRange=0,this.setRowCount(0)}getCurrentDataRange(){let e=this.internalData,t=e.length,[n]=this.internalData,s=this.internalData[t-1];if(n&&s)return[n.rowIndex,s.rowIndex];for(let o=0;o<t;o++)if(e[o]!==void 0){n=e[o];break}for(let o=t-1;o>=0;o--)if(e[o]!==void 0){s=e[o];break}return n&&s?[n.rowIndex,s.rowIndex]:[-1,-1]}};h=new WeakMap;var{debug:f,debugEnabled:N,error:pt,info:d,infoEnabled:dt,warn:M}=b(\"viewport\"),gt=({rowKey:r,updateType:e})=>e===\"U\"&&!r.startsWith(\"\\$root\"),U=[void 0,void 0],ht={count:0,mode:void 0,size:0,ts:0},q=class{constructor({aggregations:e,bufferSize:t=50,columns:n,filter:s,groupBy:o=[],table:i,range:u,sort:l,title:p,viewport:a,visualLink:c},g){this.batchMode=!0;this.hasUpdates=!1;this.pendingUpdates=[];this.pendingOperations=new Map;this.pendingRangeRequests=[];this.rowCountChanged=!1;this.selectedRows=[];this.useBatchMode=!0;this.lastUpdateStatus=ht;this.updateThrottleTimer=void 0;this.rangeMonitor=new k(\"ViewPort\");this.disabled=!1;this.isTree=!1;this.status=\"\";this.suspended=!1;this.suspendTimer=null;this.setLastSizeOnlyUpdateSize=e=>{this.lastUpdateStatus.size=e};this.setLastUpdate=e=>{let{ts:t,mode:n}=this.lastUpdateStatus,s=0;if(n===e){let o=Date.now();this.lastUpdateStatus.count+=1,this.lastUpdateStatus.ts=o,s=t===0?0:o-t}else this.lastUpdateStatus.count=1,this.lastUpdateStatus.ts=0,s=0;return this.lastUpdateStatus.mode=e,s};this.rangeRequestAlreadyPending=e=>{let{bufferSize:t}=this,n=t*.25,{from:s}=e;for(let{from:o,to:i}of this.pendingRangeRequests)if(s>=o&&s<i){if(e.to+n<=i)return!0;s=i}return!1};this.sendThrottledSizeMessage=()=>{this.updateThrottleTimer=void 0,this.lastUpdateStatus.count=3,this.postMessageToClient({clientViewportId:this.clientViewportId,mode:\"size-only\",size:this.lastUpdateStatus.size,type:\"viewport-update\"})};this.shouldThrottleMessage=e=>{let t=this.setLastUpdate(e);return e===\"size-only\"&&t>0&&t<500&&this.lastUpdateStatus.count>3};this.throttleMessage=e=>this.shouldThrottleMessage(e)?(d==null||d(\"throttling updates setTimeout to 2000\"),this.updateThrottleTimer===void 0&&(this.updateThrottleTimer=setTimeout(this.sendThrottledSizeMessage,2e3)),!0):(this.updateThrottleTimer!==void 0&&(clearTimeout(this.updateThrottleTimer),this.updateThrottleTimer=void 0),!1);this.getNewRowCount=()=>{if(this.rowCountChanged&&this.dataWindow)return this.rowCountChanged=!1,this.dataWindow.rowCount};this.aggregations=e,this.bufferSize=t,this.clientRange=u,this.clientViewportId=a,this.columns=n,this.filter=s,this.groupBy=o,this.keys=new x(u),this.pendingLinkedParent=c,this.table=i,this.sort=l,this.title=p,dt&&(d==null||d(\\`constructor #\\${a} \\${i.table} bufferSize=\\${t}\\`)),this.dataWindow=new W(this.clientRange,u,this.bufferSize),this.postMessageToClient=g}get hasUpdatesToProcess(){return this.suspended?!1:this.rowCountChanged||this.hasUpdates}get size(){var e;return(e=this.dataWindow.rowCount)!=null?e:0}subscribe(){let{filter:e}=this.filter;return this.status=this.status===\"subscribed\"?\"resubscribing\":\"subscribing\",{type:Ee,table:this.table,range:G(this.clientRange,this.bufferSize),aggregations:this.aggregations,columns:this.columns,sort:this.sort,groupBy:this.groupBy,filterSpec:{filter:e}}}handleSubscribed({viewPortId:e,aggregations:t,columns:n,filterSpec:s,range:o,sort:i,groupBy:u,table:l},p){this.serverViewportId=e,this.status=\"subscribed\",this.aggregations=t,this.columns=n,this.groupBy=u,this.isTree=u&&u.length>0,this.dataWindow.setRange(o.from,o.to);let a=l===p.table.table?p:{...p,table:{...p.table,session:l}};return{aggregations:t,type:\"subscribed\",clientViewportId:this.clientViewportId,columns:n,filter:s,groupBy:u,range:o,sort:i,tableSchema:a}}awaitOperation(e,t){this.pendingOperations.set(e,t)}completeOperation(e,...t){var u;let{clientViewportId:n,pendingOperations:s}=this,o=s.get(e);if(!o){pt(\\`no matching operation found to complete for requestId \\${e}\\`);return}let{type:i}=o;if(d==null||d(\\`completeOperation \\${i}\\`),s.delete(e),i===\"CHANGE_VP_RANGE\"){let[l,p]=t;(u=this.dataWindow)==null||u.setRange(l,p);for(let a=this.pendingRangeRequests.length-1;a>=0;a--){let c=this.pendingRangeRequests[a];if(c.requestId===e){c.acked=!0;break}else M==null||M(\"range requests sent faster than they are being ACKed\")}}else if(i===\"config\"){let{aggregations:l,columns:p,filter:a,groupBy:c,sort:g}=o.data;return this.aggregations=l,this.columns=p,this.filter=a,this.groupBy=c,this.sort=g,c.length>0?this.isTree=!0:this.isTree&&(this.isTree=!1),f==null||f(\\`config change confirmed, isTree : \\${this.isTree}\\`),{clientViewportId:n,type:i,config:o.data}}else{if(i===\"groupBy\")return this.isTree=o.data.length>0,this.groupBy=o.data,f==null||f(\\`groupBy change confirmed, isTree : \\${this.isTree}\\`),{clientViewportId:n,type:i,groupBy:o.data};if(i===\"columns\")return this.columns=o.data,{clientViewportId:n,type:i,columns:o.data};if(i===\"filter\")return this.filter=o.data,{clientViewportId:n,type:i,filter:o.data};if(i===\"aggregate\")return this.aggregations=o.data,{clientViewportId:n,type:\"aggregate\",aggregations:this.aggregations};if(i===\"sort\")return this.sort=o.data,{clientViewportId:n,type:i,sort:this.sort};if(i!==\"selection\"){if(i===\"disable\")return this.disabled=!0,{type:\"disabled\",clientViewportId:n};if(i===\"enable\")return this.disabled=!1,{type:\"enabled\",clientViewportId:n};if(i===\"CREATE_VISUAL_LINK\"){let[l,p,a]=t;return this.linkedParent={colName:l,parentViewportId:p,parentColName:a},this.pendingLinkedParent=void 0,{type:\"vuu-link-created\",clientViewportId:n,colName:l,parentViewportId:p,parentColName:a}}else if(i===\"REMOVE_VISUAL_LINK\")return this.linkedParent=void 0,{type:\"vuu-link-removed\",clientViewportId:n}}}}rangeRequest(e,t){N&&this.rangeMonitor.set(t);let n=\"CHANGE_VP_RANGE\";if(this.dataWindow){let[s,o]=this.dataWindow.setClientRange(t.from,t.to),i,u=this.dataWindow.rowCount||void 0,l=s&&!this.rangeRequestAlreadyPending(t)?{type:n,viewPortId:this.serverViewportId,...G(t,this.bufferSize,u)}:null;if(l){N&&(f==null||f(\\`create CHANGE_VP_RANGE: [\\${l.from} - \\${l.to}]\\`)),this.awaitOperation(e,{type:n});let a=this.pendingRangeRequests.at(-1);if(a)if(a.acked)console.warn(\"Range Request before previous request is filled\");else{let{from:c,to:g}=a;this.dataWindow.outOfRange(c,g)?i={clientViewportId:this.clientViewportId,type:\"debounce-begin\"}:M==null||M(\"Range Request before previous request is acked\")}this.pendingRangeRequests.push({...l,requestId:e}),this.useBatchMode&&(this.batchMode=!0)}else o.length>0&&(this.batchMode=!1);this.keys.reset(this.dataWindow.clientRange);let p=this.isTree?j:J;return o.length?[l,o.map(a=>p(a,this.keys,this.selectedRows))]:i?[l,void 0,i]:[l]}else return[null]}setLinks(e){return this.links=e,[{type:\"vuu-links\",links:e,clientViewportId:this.clientViewportId},this.pendingLinkedParent]}setMenu(e){return{type:\"vuu-menu\",menu:e,clientViewportId:this.clientViewportId}}openTreeNode(e,t){return this.useBatchMode&&(this.batchMode=!0),{type:Le,vpId:this.serverViewportId,treeKey:t.key}}closeTreeNode(e,t){return this.useBatchMode&&(this.batchMode=!0),{type:be,vpId:this.serverViewportId,treeKey:t.key}}createLink(e,t,n,s){let o={type:\"CREATE_VISUAL_LINK\",parentVpId:n,childVpId:this.serverViewportId,parentColumnName:s,childColumnName:t};return this.awaitOperation(e,o),this.useBatchMode&&(this.batchMode=!0),o}removeLink(e){let t={type:\"REMOVE_VISUAL_LINK\",childVpId:this.serverViewportId};return this.awaitOperation(e,t),t}suspend(){this.suspended=!0,d==null||d(\"suspend\")}resume(){return this.suspended=!1,N&&(f==null||f(\\`resume: \\${this.currentData()}\\`)),[this.size,this.currentData()]}currentData(){let e=[];if(this.dataWindow){let t=this.dataWindow.getData(),{keys:n}=this,s=this.isTree?j:J;for(let o of t)o&&e.push(s(o,n,this.selectedRows))}return e}enable(e){return this.awaitOperation(e,{type:\"enable\"}),d==null||d(\\`enable: \\${this.serverViewportId}\\`),{type:Me,viewPortId:this.serverViewportId}}disable(e){return this.awaitOperation(e,{type:\"disable\"}),d==null||d(\\`disable: \\${this.serverViewportId}\\`),this.suspended=!1,{type:Ve,viewPortId:this.serverViewportId}}columnRequest(e,t){return this.awaitOperation(e,{type:\"columns\",data:t}),f==null||f(\\`columnRequest: \\${t}\\`),this.createRequest({columns:t})}setConfig(e,t){var o;this.awaitOperation(e,{type:\"config\",data:t});let{filter:n,...s}=t;return this.useBatchMode&&(this.batchMode=!0),N?f==null||f(\\`setConfig \\${JSON.stringify(t)}\\`):d==null||d(\"setConfig\"),!this.isTree&&t.groupBy.length>0&&((o=this.dataWindow)==null||o.clear()),this.createRequest({...s,filterSpec:typeof(n==null?void 0:n.filter)==\"string\"?{filter:n.filter}:{filter:\"\"}},!0)}aggregateRequest(e,t){return this.awaitOperation(e,{type:\"aggregate\",data:t}),d==null||d(\\`aggregateRequest: \\${t}\\`),this.createRequest({aggregations:t})}sortRequest(e,t){return this.awaitOperation(e,{type:\"sort\",data:t}),d==null||d(\\`sortRequest: \\${JSON.stringify(t.sortDefs)}\\`),this.createRequest({sort:t})}selectRequest(e,t){return this.selectedRows=t,this.awaitOperation(e,{type:\"selection\",data:t}),d==null||d(\\`selectRequest: \\${t}\\`),{type:\"SET_SELECTION\",vpId:this.serverViewportId,selection:fe(t)}}removePendingRangeRequest(e,t){for(let n=this.pendingRangeRequests.length-1;n>=0;n--){let{from:s,to:o}=this.pendingRangeRequests[n],i=!0;if(e>=s&&e<o||t>s&&t<o){i||console.warn(\"removePendingRangeRequest TABLE_ROWS are not for latest request\"),this.pendingRangeRequests.splice(n,1);break}else i=!1}}updateRows(e){var s,o,i;let[t,n]=Re(e);if(t&&n&&this.removePendingRangeRequest(t.rowIndex,n.rowIndex),e.length===1)if(t.vpSize===0&&this.disabled){f==null||f(\\`ignore a SIZE=0 message on disabled viewport (\\${e.length} rows)\\`);return}else t.updateType===\"SIZE\"&&this.setLastSizeOnlyUpdateSize(t.vpSize);for(let u of e)this.isTree&&gt(u)||((u.updateType===\"SIZE\"||((s=this.dataWindow)==null?void 0:s.rowCount)!==u.vpSize)&&((o=this.dataWindow)==null||o.setRowCount(u.vpSize),this.rowCountChanged=!0),u.updateType===\"U\"&&(i=this.dataWindow)!=null&&i.setAtIndex(u)&&(this.hasUpdates=!0,this.batchMode||this.pendingUpdates.push(u)))}getClientRows(){let e,t=\"size-only\";if(!this.hasUpdates&&!this.rowCountChanged)return U;if(this.hasUpdates){let{keys:n,selectedRows:s}=this,o=this.isTree?j:J;if(this.updateThrottleTimer&&(self.clearTimeout(this.updateThrottleTimer),this.updateThrottleTimer=void 0),this.pendingUpdates.length>0){e=[],t=\"update\";for(let i of this.pendingUpdates)e.push(o(i,n,s));this.pendingUpdates.length=0}else{let i=this.dataWindow.getData();if(this.dataWindow.hasAllRowsWithinRange){e=[],t=\"batch\";for(let u of i)e.push(o(u,n,s));this.batchMode=!1}}this.hasUpdates=!1}return this.throttleMessage(t)?U:[e,t]}createRequest(e,t=!1){return t?{type:\"CHANGE_VP\",viewPortId:this.serverViewportId,...e}:{type:\"CHANGE_VP\",viewPortId:this.serverViewportId,aggregations:this.aggregations,columns:this.columns,sort:this.sort,groupBy:this.groupBy,filterSpec:{filter:this.filter.filter},...e}}},J=({rowIndex:r,rowKey:e,sel:t,data:n},s,o)=>[r,s.keyFor(r),!0,!1,0,0,e,t?H(o,r):0].concat(n),j=({rowIndex:r,rowKey:e,sel:t,data:n},s,o)=>{let[i,u,,l,,p,...a]=n;return[r,s.keyFor(r),l,u,i,p,e,t?H(o,r):0].concat(a)};var Ue=1;var{debug:V,debugEnabled:Y,error:y,info:T,infoEnabled:ft,warn:Q}=b(\"server-proxy\"),R=()=>\\`\\${Ue++}\\`,mt={},Ct=r=>r.disabled!==!0&&r.suspended!==!0,Rt={type:\"NO_ACTION\"},St=(r,e,t)=>r.map(n=>n.parentVpId===e?{...n,label:t}:n);function Tt(r,e){return r.map(t=>{let{parentVpId:n}=t,s=e.get(n);if(s)return{...t,parentClientVpId:s.clientViewportId,label:s.title};throw Error(\"addLabelsToLinks viewport not found\")})}var \\$=class{constructor(e,t){this.authToken=\"\";this.user=\"user\";this.pendingRequests=new Map;this.queuedRequests=[];this.cachedTableMetaRequests=new Map;this.cachedTableSchemas=new Map;this.connection=e,this.postMessageToClient=t,this.viewports=new Map,this.mapClientToServerViewport=new Map}async reconnect(){await this.login(this.authToken);let[e,t]=le(Array.from(this.viewports.values()),Ct);this.viewports.clear(),this.mapClientToServerViewport.clear();let n=s=>{s.forEach(o=>{let{clientViewportId:i}=o;this.viewports.set(i,o),this.sendMessageToServer(o.subscribe(),i)})};n(e),setTimeout(()=>{n(t)},2e3)}async login(e,t=\"user\"){if(e)return this.authToken=e,this.user=t,new Promise((n,s)=>{this.sendMessageToServer({type:Pe,token:this.authToken,user:t},\"\"),this.pendingLogin={resolve:n,reject:s}});this.authToken===\"\"&&y(\"login, cannot login until auth token has been obtained\")}subscribe(e){if(this.mapClientToServerViewport.has(e.viewport))y(\\`spurious subscribe call \\${e.viewport}\\`);else{let t=this.getTableMeta(e.table),n=new q(e,this.postMessageToClient);this.viewports.set(e.viewport,n);let s=this.awaitResponseToMessage(n.subscribe(),e.viewport);Promise.all([s,t]).then(([i,u])=>{let{viewPortId:l}=i,{status:p}=n;e.viewport!==l&&(this.viewports.delete(e.viewport),this.viewports.set(l,n)),this.mapClientToServerViewport.set(e.viewport,l);let a=n.handleSubscribed(i,u);a&&(this.postMessageToClient(a),Y&&V(\\`post DataSourceSubscribedMessage to client: \\${JSON.stringify(a)}\\`)),n.disabled&&this.disableViewport(n),this.queuedRequests.length>0&&this.processQueuedRequests(),p===\"subscribing\"&&!O(n.table)&&(this.sendMessageToServer({type:K,vpId:l}),this.sendMessageToServer({type:_e,vpId:l}),Array.from(this.viewports.entries()).filter(([c,{disabled:g}])=>c!==l&&!g).forEach(([c])=>{this.sendMessageToServer({type:K,vpId:c})}))})}}processQueuedRequests(){let e={};for(;this.queuedRequests.length;){let t=this.queuedRequests.pop();if(t){let{clientViewportId:n,message:s,requestId:o}=t;if(s.type===\"CHANGE_VP_RANGE\"){if(e.CHANGE_VP_RANGE)continue;e.CHANGE_VP_RANGE=!0;let i=this.mapClientToServerViewport.get(n);i&&this.sendMessageToServer({...s,viewPortId:i},o)}}}}unsubscribe(e){let t=this.mapClientToServerViewport.get(e);t?(T==null||T(\\`Unsubscribe Message (Client to Server):\n \\${t}\\`),this.sendMessageToServer({type:xe,viewPortId:t})):y(\\`failed to unsubscribe client viewport \\${e}, viewport not found\\`)}getViewportForClient(e,t=!0){let n=this.mapClientToServerViewport.get(e);if(n){let s=this.viewports.get(n);if(s)return s;if(t)throw Error(\\`Viewport not found for client viewport \\${e}\\`);return null}else{if(this.viewports.has(e))return this.viewports.get(e);if(t)throw Error(\\`Viewport server id not found for client viewport \\${e}\\`);return null}}setViewRange(e,t){let n=R(),[s,o,i]=e.rangeRequest(n,t.range);T==null||T(\\`setViewRange \\${t.range.from} - \\${t.range.to}\\`),s&&(this.sendIfReady(s,n,e.status===\"subscribed\")||this.queuedRequests.push({clientViewportId:t.viewport,message:s,requestId:n})),o?(T==null||T(\\`setViewRange \\${o.length} rows returned from cache\\`),this.postMessageToClient({mode:\"batch\",type:\"viewport-update\",clientViewportId:e.clientViewportId,rows:o})):i&&this.postMessageToClient(i)}setConfig(e,t){let n=R(),s=e.setConfig(n,t.config);this.sendIfReady(s,n,e.status===\"subscribed\")}aggregate(e,t){let n=R(),s=e.aggregateRequest(n,t.aggregations);this.sendIfReady(s,n,e.status===\"subscribed\")}sort(e,t){let n=R(),s=e.sortRequest(n,t.sort);this.sendIfReady(s,n,e.status===\"subscribed\")}setColumns(e,t){let n=R(),{columns:s}=t,o=e.columnRequest(n,s);this.sendIfReady(o,n,e.status===\"subscribed\")}setTitle(e,t){e&&(e.title=t.title,this.updateTitleOnVisualLinks(e))}select(e,t){let n=R(),{selected:s}=t,o=e.selectRequest(n,s);this.sendIfReady(o,n,e.status===\"subscribed\")}disableViewport(e){let t=R(),n=e.disable(t);this.sendIfReady(n,t,e.status===\"subscribed\")}enableViewport(e){if(e.disabled){let t=R(),n=e.enable(t);this.sendIfReady(n,t,e.status===\"subscribed\")}}suspendViewport(e){e.suspend(),e.suspendTimer=setTimeout(()=>{T==null||T(\"suspendTimer expired, escalate suspend to disable\"),this.disableViewport(e)},3e3)}resumeViewport(e){e.suspendTimer&&(V==null||V(\"clear suspend timer\"),clearTimeout(e.suspendTimer),e.suspendTimer=null);let[t,n]=e.resume();V==null||V(\\`resumeViewport size \\${t}, \\${n.length} rows sent to client\\`),this.postMessageToClient({clientViewportId:e.clientViewportId,mode:\"batch\",rows:n,size:t,type:\"viewport-update\"})}openTreeNode(e,t){if(e.serverViewportId){let n=R();this.sendIfReady(e.openTreeNode(n,t),n,e.status===\"subscribed\")}}closeTreeNode(e,t){if(e.serverViewportId){let n=R();this.sendIfReady(e.closeTreeNode(n,t),n,e.status===\"subscribed\")}}createLink(e,t){let{parentClientVpId:n,parentColumnName:s,childColumnName:o}=t,i=R(),u=this.mapClientToServerViewport.get(n);if(u){let l=e.createLink(i,o,u,s);this.sendMessageToServer(l,i)}else y(\"ServerProxy unable to create link, viewport not found\")}removeLink(e){let t=R(),n=e.removeLink(t);this.sendMessageToServer(n,t)}updateTitleOnVisualLinks(e){var s;let{serverViewportId:t,title:n}=e;for(let o of this.viewports.values())if(o!==e&&o.links&&t&&n&&(s=o.links)!=null&&s.some(i=>i.parentVpId===t)){let[i]=o.setLinks(St(o.links,t,n));this.postMessageToClient(i)}}removeViewportFromVisualLinks(e){var t;for(let n of this.viewports.values())if((t=n.links)!=null&&t.some(({parentVpId:s})=>s===e)){let[s]=n.setLinks(n.links.filter(({parentVpId:o})=>o!==e));this.postMessageToClient(s)}}menuRpcCall(e){let t=this.getViewportForClient(e.vpId,!1);if(t!=null&&t.serverViewportId){let[n,s]=A(e);this.sendMessageToServer({...s,vpId:t.serverViewportId},n)}}viewportRpcCall(e){let t=this.getViewportForClient(e.vpId,!1);if(t!=null&&t.serverViewportId){let[n,s]=A(e);this.sendMessageToServer({...s,vpId:t.serverViewportId,namedParams:{}},n)}}rpcCall(e){let[t,n]=A(e),s=We(n.service);this.sendMessageToServer(n,t,{module:s})}handleMessageFromClient(e){var t;if(ge(e))if(e.type===\"disable\"){let n=this.getViewportForClient(e.viewport,!1);return n!==null?this.disableViewport(n):void 0}else{let n=this.getViewportForClient(e.viewport);switch(e.type){case\"setViewRange\":return this.setViewRange(n,e);case\"config\":return this.setConfig(n,e);case\"aggregate\":return this.aggregate(n,e);case\"sort\":return this.sort(n,e);case\"select\":return this.select(n,e);case\"suspend\":return this.suspendViewport(n);case\"resume\":return this.resumeViewport(n);case\"enable\":return this.enableViewport(n);case\"openTreeNode\":return this.openTreeNode(n,e);case\"closeTreeNode\":return this.closeTreeNode(n,e);case\"createLink\":return this.createLink(n,e);case\"removeLink\":return this.removeLink(n);case\"setColumns\":return this.setColumns(n,e);case\"setTitle\":return this.setTitle(n,e);default:}}else{if(Ce(e))return this.viewportRpcCall(e);if(he(e))return this.menuRpcCall(e);{let{type:n,requestId:s}=e;switch(n){case\"GET_TABLE_LIST\":{(t=this.tableList)!=null||(this.tableList=this.awaitResponseToMessage({type:n},s)),this.tableList.then(o=>{this.postMessageToClient({type:\"TABLE_LIST_RESP\",tables:o.tables,requestId:s})});return}case\"GET_TABLE_META\":{this.getTableMeta(e.table,s).then(o=>{o&&this.postMessageToClient({type:\"TABLE_META_RESP\",tableSchema:o,requestId:s})});return}case\"RPC_CALL\":return this.rpcCall(e);default:}}}y(\\`Vuu ServerProxy Unexpected message from client \\${JSON.stringify(e)}\\`)}getTableMeta(e,t=R()){if(O(e))return Promise.resolve(void 0);let n=\\`\\${e.module}:\\${e.table}\\`,s=this.cachedTableMetaRequests.get(n);return s||(s=this.awaitResponseToMessage({type:\"GET_TABLE_META\",table:e},t),this.cachedTableMetaRequests.set(n,s)),s==null?void 0:s.then(o=>this.cacheTableMeta(o))}awaitResponseToMessage(e,t=R()){return new Promise((n,s)=>{this.sendMessageToServer(e,t),this.pendingRequests.set(t,{reject:s,resolve:n})})}sendIfReady(e,t,n=!0){return n&&this.sendMessageToServer(e,t),n}sendMessageToServer(e,t=\\`\\${Ue++}\\`,n=mt){let{module:s=\"CORE\"}=n;this.authToken&&this.connection.send({requestId:t,sessionId:this.sessionId,token:this.authToken,user:this.user,module:s,body:e})}handleMessageFromServer(e){var u;let{body:t,requestId:n,sessionId:s}=e,o=this.pendingRequests.get(n);if(o){let{resolve:a}=o;this.pendingRequests.delete(n),a(t);return}let{viewports:i}=this;switch(t.type){case De:this.sendMessageToServer({type:Ie,ts:+new Date},\"NA\");break;case\"LOGIN_SUCCESS\":if(s)this.sessionId=s,(u=this.pendingLogin)==null||u.resolve(s),this.pendingLogin=void 0;else throw Error(\"LOGIN_SUCCESS did not provide sessionId\");break;case\"REMOVE_VP_SUCCESS\":{let a=i.get(t.viewPortId);a&&(this.mapClientToServerViewport.delete(a.clientViewportId),i.delete(t.viewPortId),this.removeViewportFromVisualLinks(t.viewPortId))}break;case Oe:{let a=this.viewports.get(t.vpId);a&&a.completeOperation(n)}break;case Te:case ve:if(i.has(t.viewPortId)){let a=this.viewports.get(t.viewPortId);if(a){let c=a.completeOperation(n);c!==void 0&&(this.postMessageToClient(c),Y&&V(\\`postMessageToClient \\${JSON.stringify(c)}\\`))}}break;case ye:{let a=this.viewports.get(t.viewPortId);if(a){let c=a.completeOperation(n);if(c){this.postMessageToClient(c);let[g,S]=a.resume();this.postMessageToClient({clientViewportId:a.clientViewportId,mode:\"batch\",rows:S,size:g,type:\"viewport-update\"})}}}break;case\"TABLE_ROW\":{let a=Se(t.rows);for(let[c,g]of Object.entries(a)){let S=i.get(c);S?S.updateRows(g):Q==null||Q(\\`TABLE_ROW message received for non registered viewport \\${c}\\`)}this.processUpdates()}break;case\"CHANGE_VP_RANGE_SUCCESS\":{let a=this.viewports.get(t.viewPortId);if(a){let{from:c,to:g}=t;a.completeOperation(n,c,g)}}break;case ke:case we:break;case\"CREATE_VISUAL_LINK_SUCCESS\":{let a=this.viewports.get(t.childVpId),c=this.viewports.get(t.parentVpId);if(a&&c){let{childColumnName:g,parentColumnName:S}=t,D=a.completeOperation(n,g,c.clientViewportId,S);D&&this.postMessageToClient(D)}}break;case\"REMOVE_VISUAL_LINK_SUCCESS\":{let a=this.viewports.get(t.childVpId);if(a){let c=a.completeOperation(n);c&&this.postMessageToClient(c)}}break;case\"VP_VISUAL_LINKS_RESP\":{let a=this.getActiveLinks(t.links),c=this.viewports.get(t.vpId);if(a.length&&c){let g=Tt(a,this.viewports),[S,D]=c.setLinks(g);if(this.postMessageToClient(S),D){let{link:se,parentClientVpId:ze}=D,re=R(),oe=this.mapClientToServerViewport.get(ze);if(oe){let Ke=c.createLink(re,se.fromColumn,oe,se.toColumn);this.sendMessageToServer(Ke,re)}}}}break;case\"VIEW_PORT_MENUS_RESP\":if(t.menu.name){let a=this.viewports.get(t.vpId);if(a){let c=a.setMenu(t.menu);this.postMessageToClient(c)}}break;case\"VP_EDIT_RPC_RESPONSE\":this.postMessageToClient({action:t.action,requestId:n,rpcName:t.rpcName,type:\"VP_EDIT_RPC_RESPONSE\"});break;case\"VP_EDIT_RPC_REJECT\":this.viewports.get(t.vpId)&&this.postMessageToClient({requestId:n,type:\"VP_EDIT_RPC_REJECT\",error:t.error});break;case\"VIEW_PORT_MENU_REJ\":{console.log(\"send menu error back to client\");let{error:a,rpcName:c,vpId:g}=t,S=this.viewports.get(g);S&&this.postMessageToClient({clientViewportId:S.clientViewportId,error:a,rpcName:c,type:\"VIEW_PORT_MENU_REJ\",requestId:n});break}case\"VIEW_PORT_MENU_RESP\":if(me(t)){let{action:a,rpcName:c}=t;this.awaitResponseToMessage({type:\"GET_TABLE_META\",table:a.table}).then(g=>{let S=z(g);this.postMessageToClient({rpcName:c,type:\"VIEW_PORT_MENU_RESP\",action:{...a,tableSchema:S},tableAlreadyOpen:this.isTableOpen(a.table),requestId:n})})}else{let{action:a}=t;this.postMessageToClient({type:\"VIEW_PORT_MENU_RESP\",action:a||Rt,tableAlreadyOpen:a!==null&&this.isTableOpen(a.table),requestId:n})}break;case\"RPC_RESP\":{let{method:a,result:c}=t;this.postMessageToClient({type:\"RPC_RESP\",method:a,result:c,requestId:n})}break;case\"VIEW_PORT_RPC_REPONSE\":{let{method:a,action:c}=t;this.postMessageToClient({type:\"VIEW_PORT_RPC_RESPONSE\",rpcName:a,action:c,requestId:n})}break;case\"ERROR\":y(t.msg);break;default:ft&&T(\\`handleMessageFromServer \\${t.type}.\\`)}}cacheTableMeta(e){let{module:t,table:n}=e.table,s=\\`\\${t}:\\${n}\\`,o=this.cachedTableSchemas.get(s);return o||(o=z(e),this.cachedTableSchemas.set(s,o)),o}isTableOpen(e){if(e){let t=e.table;for(let n of this.viewports.values())if(!n.suspended&&n.table.table===t)return!0}}getActiveLinks(e){return e.filter(t=>{let n=this.viewports.get(t.parentVpId);return n&&!n.suspended})}processUpdates(){this.viewports.forEach(e=>{var t;if(e.hasUpdatesToProcess){let n=e.getClientRows();if(n!==U){let[s,o]=n,i=e.getNewRowCount();(i!==void 0||s&&s.length>0)&&(Y&&V(\\`postMessageToClient #\\${e.clientViewportId} viewport-update \\${o}, \\${(t=s==null?void 0:s.length)!=null?t:\"no\"} rows, size \\${i}\\`),o&&this.postMessageToClient({clientViewportId:e.clientViewportId,mode:o,rows:s,size:i,type:\"viewport-update\"}))}}})}};var{debug:ln,debugEnabled:cn,error:qe,info:w,infoEnabled:bt,warn:_}=b(\"websocket-connection\"),Be={},Z=Symbol(\"setWebsocket\"),F=Symbol(\"connectionCallback\");async function Ge(r,e,t,n=10,s=5){return Be[r]={status:\"connecting\",connect:{allowed:s,remaining:s},reconnect:{allowed:n,remaining:n}},He(r,e,t)}async function X(r){throw Error(\"connection broken\")}async function He(r,e,t,n){let{status:s,connect:o,reconnect:i}=Be[r],u=s===\"connecting\"?o:i;try{t({type:\"connection-status\",status:\"connecting\"});let l=typeof n<\"u\",p=await Et(r,e);console.info(\"%c\\u26A1 %cconnected\",\"font-size: 24px;color: green;font-weight: bold;\",\"color:green; font-size: 14px;\"),n!==void 0&&n[Z](p);let a=n!=null?n:new ee(p,r,e,t),c=l?\"reconnected\":\"connection-open-awaiting-session\";return t({type:\"connection-status\",status:c}),a.status=c,u.remaining=u.allowed,a}catch{let p=--u.remaining>0;if(t({type:\"connection-status\",status:\"disconnected\",reason:\"failed to connect\",retry:p}),p)return wt(r,e,t,n,2e3);throw t({type:\"connection-status\",status:\"failed\",reason:\"unable to connect\",retry:p}),Error(\"Failed to establish connection\")}}var wt=(r,e,t,n,s)=>new Promise(o=>{setTimeout(()=>{o(He(r,e,t,n))},s)}),Et=(r,e)=>new Promise((t,n)=>{bt&&e!==void 0&&w(\\`WebSocket Protocol \\${e==null?void 0:e.toString()}\\`);let s=new WebSocket(r,e);s.onopen=()=>t(s),s.onerror=o=>n(o)}),\\$e=()=>{_==null||_(\"Connection cannot be closed, socket not yet opened\")},Fe=r=>{_==null||_(\\`Message cannot be sent, socket closed \\${r.body.type}\\`)},Vt=r=>{try{return JSON.parse(r)}catch{throw Error(\\`Error parsing JSON response from server \\${r}\\`)}},ee=class{constructor(e,t,n,s){this.close=\\$e;this.requiresLogin=!0;this.send=Fe;this.status=\"ready\";this.messagesCount=0;this.connectionMetricsInterval=null;this.handleWebsocketMessage=e=>{let t=Vt(e.data);this.messagesCount+=1,this[F](t)};this.url=t,this.protocol=n,this[F]=s,this[Z](e)}reconnect(){X(this)}[(F,Z)](e){let t=this[F];e.onmessage=o=>{this.status=\"connected\",e.onmessage=this.handleWebsocketMessage,this.handleWebsocketMessage(o)},this.connectionMetricsInterval=setInterval(()=>{t({type:\"connection-metrics\",messagesLength:this.messagesCount}),this.messagesCount=0},2e3),e.onerror=()=>{qe(\"\\u26A1 connection error\"),t({type:\"connection-status\",status:\"disconnected\",reason:\"error\"}),this.connectionMetricsInterval&&(clearInterval(this.connectionMetricsInterval),this.connectionMetricsInterval=null),this.status===\"connection-open-awaiting-session\"?qe(\"Websocket connection lost before Vuu session established, check websocket configuration\"):this.status!==\"closed\"&&(X(this),this.send=s)},e.onclose=()=>{w==null||w(\"\\u26A1 connection close\"),t({type:\"connection-status\",status:\"disconnected\",reason:\"close\"}),this.connectionMetricsInterval&&(clearInterval(this.connectionMetricsInterval),this.connectionMetricsInterval=null),this.status!==\"closed\"&&(X(this),this.send=s)};let n=o=>{e.send(JSON.stringify(o))},s=o=>{w==null||w(\\`TODO queue message until websocket reconnected \\${o.body.type}\\`)};this.send=n,this.close=()=>{this.status=\"closed\",e.close(),this.close=\\$e,this.send=Fe,w==null||w(\"close websocket\")}}};var v,{info:te,infoEnabled:ne}=b(\"worker\");async function vt(r,e,t,n,s,o,i){let u=await Ge(r,e,l=>{de(l)?postMessage({type:\"connection-metrics\",messages:l}):pe(l)?(s(l),l.status===\"reconnected\"&&v.reconnect()):v.handleMessageFromServer(l)},o,i);v=new \\$(u,l=>Mt(l)),u.requiresLogin&&await v.login(t,n)}function Mt(r){postMessage(r)}var yt=async({data:r})=>{switch(r.type){case\"connect\":try{await vt(r.url,r.protocol,r.token,r.username,postMessage,r.retryLimitDisconnect,r.retryLimitStartup),postMessage({type:\"connected\"})}catch(e){postMessage({type:\"connection-failed\",reason:String(e)})}break;case\"subscribe\":ne&&te(\\`client subscribe: \\${JSON.stringify(r)}\\`),v.subscribe(r);break;case\"unsubscribe\":ne&&te(\\`client unsubscribe: \\${JSON.stringify(r)}\\`),v.unsubscribe(r.viewport);break;default:ne&&te(\\`client message: \\${JSON.stringify(r)}\\`),v.handleMessageFromClient(r)}};self.addEventListener(\"message\",yt);postMessage({type:\"ready\"});\n\n`;"],"names":[],"mappings":"AAAO,MAAM,gBAAmB,GAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;"}
@@ -1,16 +1,3 @@
1
- const MENU_RPC_TYPES = [
2
- "VIEW_PORT_MENUS_SELECT_RPC",
3
- "VIEW_PORT_MENU_TABLE_RPC",
4
- "VIEW_PORT_MENU_ROW_RPC",
5
- "VIEW_PORT_MENU_CELL_RPC",
6
- "VP_EDIT_CELL_RPC",
7
- "VP_EDIT_ROW_RPC",
8
- "VP_EDIT_ADD_ROW_RPC",
9
- "VP_EDIT_DELETE_CELL_RPC",
10
- "VP_EDIT_DELETE_ROW_RPC",
11
- "VP_EDIT_SUBMIT_FORM_RPC"
12
- ];
13
- const isVuuMenuRpcRequest = (message) => MENU_RPC_TYPES.includes(message["type"]);
14
1
  const isVuuRpcRequest = (message) => message["type"] === "VIEW_PORT_RPC_CALL";
15
2
  const stripRequestId = ({
16
3
  requestId,
@@ -52,5 +39,5 @@ const createSchemaFromTableMetadata = ({
52
39
  };
53
40
  };
54
41
 
55
- export { createSchemaFromTableMetadata, getFirstAndLastRows, groupRowsByViewport, isVuuMenuRpcRequest, isVuuRpcRequest, stripRequestId };
42
+ export { createSchemaFromTableMetadata, getFirstAndLastRows, groupRowsByViewport, isVuuRpcRequest, stripRequestId };
56
43
  //# sourceMappingURL=message-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"message-utils.js","sources":["../src/message-utils.ts"],"sourcesContent":["import {\n TableSchema,\n VuuUIMessageOut,\n WithRequestId,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n ClientToServerMenuRPC,\n ClientToServerViewportRpcCall,\n VuuRow,\n VuuRpcRequest,\n VuuTable,\n VuuTableMeta,\n} from \"@vuu-ui/vuu-protocol-types\";\n\nconst MENU_RPC_TYPES = [\n \"VIEW_PORT_MENUS_SELECT_RPC\",\n \"VIEW_PORT_MENU_TABLE_RPC\",\n \"VIEW_PORT_MENU_ROW_RPC\",\n \"VIEW_PORT_MENU_CELL_RPC\",\n \"VP_EDIT_CELL_RPC\",\n \"VP_EDIT_ROW_RPC\",\n \"VP_EDIT_ADD_ROW_RPC\",\n \"VP_EDIT_DELETE_CELL_RPC\",\n \"VP_EDIT_DELETE_ROW_RPC\",\n \"VP_EDIT_SUBMIT_FORM_RPC\",\n];\n\nexport const isVuuMenuRpcRequest = (\n message: VuuUIMessageOut | VuuRpcRequest | ClientToServerMenuRPC\n): message is ClientToServerMenuRPC => MENU_RPC_TYPES.includes(message[\"type\"]);\n\nexport const isVuuRpcRequest = (\n message:\n | VuuUIMessageOut\n | VuuRpcRequest\n | ClientToServerMenuRPC\n | ClientToServerViewportRpcCall\n): message is ClientToServerViewportRpcCall =>\n message[\"type\"] === \"VIEW_PORT_RPC_CALL\";\n\nexport const stripRequestId = <T>({\n requestId,\n ...rest\n}: WithRequestId<T>): [string, T] => [requestId, rest as T];\n\nexport const getFirstAndLastRows = (\n rows: VuuRow[]\n): [VuuRow, VuuRow] | [VuuRow] => {\n let firstRow = rows.at(0) as VuuRow;\n if (firstRow.updateType === \"SIZE\") {\n if (rows.length === 1) {\n return rows as [VuuRow];\n } else {\n firstRow = rows.at(1) as VuuRow;\n }\n }\n const lastRow = rows.at(-1) as VuuRow;\n return [firstRow, lastRow];\n};\n\nexport type ViewportRowMap = { [key: string]: VuuRow[] };\nexport const groupRowsByViewport = (rows: VuuRow[]): ViewportRowMap => {\n const result: ViewportRowMap = {};\n for (const row of rows) {\n const rowsForViewport =\n result[row.viewPortId] || (result[row.viewPortId] = []);\n rowsForViewport.push(row);\n }\n return result;\n};\n\nexport interface VuuTableMetaWithTable extends VuuTableMeta {\n table: VuuTable;\n}\n\nexport const createSchemaFromTableMetadata = ({\n columns,\n dataTypes,\n key,\n table,\n}: VuuTableMetaWithTable): Readonly<TableSchema> => {\n return {\n table,\n columns: columns.map((col, idx) => ({\n name: col,\n serverDataType: dataTypes[idx],\n })),\n key,\n };\n};\n"],"names":[],"mappings":"AAcA,MAAM,cAAiB,GAAA;AAAA,EACrB,4BAAA;AAAA,EACA,0BAAA;AAAA,EACA,wBAAA;AAAA,EACA,yBAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,qBAAA;AAAA,EACA,yBAAA;AAAA,EACA,wBAAA;AAAA,EACA,yBAAA;AACF,CAAA,CAAA;AAEO,MAAM,sBAAsB,CACjC,OAAA,KACqC,eAAe,QAAS,CAAA,OAAA,CAAQ,MAAM,CAAC,EAAA;AAEvE,MAAM,eAAkB,GAAA,CAC7B,OAMA,KAAA,OAAA,CAAQ,MAAM,CAAM,KAAA,qBAAA;AAEf,MAAM,iBAAiB,CAAI;AAAA,EAChC,SAAA;AAAA,EACA,GAAG,IAAA;AACL,CAAqC,KAAA,CAAC,WAAW,IAAS,EAAA;AAE7C,MAAA,mBAAA,GAAsB,CACjC,IACgC,KAAA;AAChC,EAAI,IAAA,QAAA,GAAW,IAAK,CAAA,EAAA,CAAG,CAAC,CAAA,CAAA;AACxB,EAAI,IAAA,QAAA,CAAS,eAAe,MAAQ,EAAA;AAClC,IAAI,IAAA,IAAA,CAAK,WAAW,CAAG,EAAA;AACrB,MAAO,OAAA,IAAA,CAAA;AAAA,KACF,MAAA;AACL,MAAW,QAAA,GAAA,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAAA,KACtB;AAAA,GACF;AACA,EAAM,MAAA,OAAA,GAAU,IAAK,CAAA,EAAA,CAAG,CAAE,CAAA,CAAA,CAAA;AAC1B,EAAO,OAAA,CAAC,UAAU,OAAO,CAAA,CAAA;AAC3B,EAAA;AAGa,MAAA,mBAAA,GAAsB,CAAC,IAAmC,KAAA;AACrE,EAAA,MAAM,SAAyB,EAAC,CAAA;AAChC,EAAA,KAAA,MAAW,OAAO,IAAM,EAAA;AACtB,IAAM,MAAA,eAAA,GACJ,OAAO,GAAI,CAAA,UAAU,MAAM,MAAO,CAAA,GAAA,CAAI,UAAU,CAAA,GAAI,EAAC,CAAA,CAAA;AACvD,IAAA,eAAA,CAAgB,KAAK,GAAG,CAAA,CAAA;AAAA,GAC1B;AACA,EAAO,OAAA,MAAA,CAAA;AACT,EAAA;AAMO,MAAM,gCAAgC,CAAC;AAAA,EAC5C,OAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAA;AAAA,EACA,KAAA;AACF,CAAoD,KAAA;AAClD,EAAO,OAAA;AAAA,IACL,KAAA;AAAA,IACA,OAAS,EAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,KAAK,GAAS,MAAA;AAAA,MAClC,IAAM,EAAA,GAAA;AAAA,MACN,cAAA,EAAgB,UAAU,GAAG,CAAA;AAAA,KAC7B,CAAA,CAAA;AAAA,IACF,GAAA;AAAA,GACF,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"message-utils.js","sources":["../src/message-utils.ts"],"sourcesContent":["import {\n TableSchema,\n VuuUIMessageOut,\n WithRequestId,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n ClientToServerMenuRPC,\n ClientToServerViewportRpcCall,\n VuuRow,\n VuuRpcRequest,\n VuuTable,\n VuuTableMeta,\n} from \"@vuu-ui/vuu-protocol-types\";\n\nexport const isVuuRpcRequest = (\n message:\n | VuuUIMessageOut\n | VuuRpcRequest\n | ClientToServerMenuRPC\n | ClientToServerViewportRpcCall\n): message is ClientToServerViewportRpcCall =>\n message[\"type\"] === \"VIEW_PORT_RPC_CALL\";\n\nexport const stripRequestId = <T>({\n requestId,\n ...rest\n}: WithRequestId<T>): [string, T] => [requestId, rest as T];\n\nexport const getFirstAndLastRows = (\n rows: VuuRow[]\n): [VuuRow, VuuRow] | [VuuRow] => {\n let firstRow = rows.at(0) as VuuRow;\n if (firstRow.updateType === \"SIZE\") {\n if (rows.length === 1) {\n return rows as [VuuRow];\n } else {\n firstRow = rows.at(1) as VuuRow;\n }\n }\n const lastRow = rows.at(-1) as VuuRow;\n return [firstRow, lastRow];\n};\n\nexport type ViewportRowMap = { [key: string]: VuuRow[] };\nexport const groupRowsByViewport = (rows: VuuRow[]): ViewportRowMap => {\n const result: ViewportRowMap = {};\n for (const row of rows) {\n const rowsForViewport =\n result[row.viewPortId] || (result[row.viewPortId] = []);\n rowsForViewport.push(row);\n }\n return result;\n};\n\nexport interface VuuTableMetaWithTable extends VuuTableMeta {\n table: VuuTable;\n}\n\nexport const createSchemaFromTableMetadata = ({\n columns,\n dataTypes,\n key,\n table,\n}: VuuTableMetaWithTable): Readonly<TableSchema> => {\n return {\n table,\n columns: columns.map((col, idx) => ({\n name: col,\n serverDataType: dataTypes[idx],\n })),\n key,\n };\n};\n"],"names":[],"mappings":"AAcO,MAAM,eAAkB,GAAA,CAC7B,OAMA,KAAA,OAAA,CAAQ,MAAM,CAAM,KAAA,qBAAA;AAEf,MAAM,iBAAiB,CAAI;AAAA,EAChC,SAAA;AAAA,EACA,GAAG,IAAA;AACL,CAAqC,KAAA,CAAC,WAAW,IAAS,EAAA;AAE7C,MAAA,mBAAA,GAAsB,CACjC,IACgC,KAAA;AAChC,EAAI,IAAA,QAAA,GAAW,IAAK,CAAA,EAAA,CAAG,CAAC,CAAA,CAAA;AACxB,EAAI,IAAA,QAAA,CAAS,eAAe,MAAQ,EAAA;AAClC,IAAI,IAAA,IAAA,CAAK,WAAW,CAAG,EAAA;AACrB,MAAO,OAAA,IAAA,CAAA;AAAA,KACF,MAAA;AACL,MAAW,QAAA,GAAA,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAAA,KACtB;AAAA,GACF;AACA,EAAM,MAAA,OAAA,GAAU,IAAK,CAAA,EAAA,CAAG,CAAE,CAAA,CAAA,CAAA;AAC1B,EAAO,OAAA,CAAC,UAAU,OAAO,CAAA,CAAA;AAC3B,EAAA;AAGa,MAAA,mBAAA,GAAsB,CAAC,IAAmC,KAAA;AACrE,EAAA,MAAM,SAAyB,EAAC,CAAA;AAChC,EAAA,KAAA,MAAW,OAAO,IAAM,EAAA;AACtB,IAAM,MAAA,eAAA,GACJ,OAAO,GAAI,CAAA,UAAU,MAAM,MAAO,CAAA,GAAA,CAAI,UAAU,CAAA,GAAI,EAAC,CAAA,CAAA;AACvD,IAAA,eAAA,CAAgB,KAAK,GAAG,CAAA,CAAA;AAAA,GAC1B;AACA,EAAO,OAAA,MAAA,CAAA;AACT,EAAA;AAMO,MAAM,gCAAgC,CAAC;AAAA,EAC5C,OAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAA;AAAA,EACA,KAAA;AACF,CAAoD,KAAA;AAClD,EAAO,OAAA;AAAA,IACL,KAAA;AAAA,IACA,OAAS,EAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,KAAK,GAAS,MAAA;AAAA,MAClC,IAAM,EAAA,GAAA;AAAA,MACN,cAAA,EAAgB,UAAU,GAAG,CAAA;AAAA,KAC7B,CAAA,CAAA;AAAA,IACF,GAAA;AAAA,GACF,CAAA;AACF;;;;"}
package/package.json CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
- "version": "0.8.53",
2
+ "version": "0.8.55",
3
3
  "author": "heswell",
4
4
  "license": "Apache-2.0",
5
5
  "devDependencies": {
6
- "@vuu-ui/vuu-data-types": "0.8.53",
7
- "@vuu-ui/vuu-table-types": "0.8.53",
8
- "@vuu-ui/vuu-filter-types": "0.8.53",
9
- "@vuu-ui/vuu-protocol-types": "0.8.53"
6
+ "@vuu-ui/vuu-data-types": "0.8.55",
7
+ "@vuu-ui/vuu-table-types": "0.8.55",
8
+ "@vuu-ui/vuu-filter-types": "0.8.55",
9
+ "@vuu-ui/vuu-protocol-types": "0.8.55"
10
10
  },
11
11
  "dependencies": {
12
- "@vuu-ui/vuu-filter-parser": "0.8.53",
13
- "@vuu-ui/vuu-utils": "0.8.53"
12
+ "@vuu-ui/vuu-filter-parser": "0.8.55",
13
+ "@vuu-ui/vuu-utils": "0.8.55"
14
14
  },
15
15
  "files": [
16
16
  "README.md",
@@ -1 +1 @@
1
- export const workerSourceCode: "\nvar ie=(r,e,t)=>{if(!e.has(r))throw TypeError(\"Cannot \"+t)};var m=(r,e,t)=>(ie(r,e,\"read from private field\"),t?t.call(r):e.get(r)),ae=(r,e,t)=>{if(e.has(r))throw TypeError(\"Cannot add the same private member more than once\");e instanceof WeakSet?e.add(r):e.set(r,t)},ue=(r,e,t,n)=>(ie(r,e,\"write to private field\"),n?n.call(r,t):e.set(r,t),t);function le(r,e,t=[],n=[]){for(let s=0,o=r.length;s<o;s++)(e(r[s],s)?t:n).push(r[s]);return[t,n]}var Je=6,B={IDX:0,RENDER_IDX:1,IS_LEAF:2,IS_EXPANDED:3,DEPTH:4,COUNT:5,KEY:Je,SELECTED:7,count:8,PARENT_IDX:\"parent_idx\",IDX_POINTER:\"idx_pointer\",FILTER_COUNT:\"filter_count\",NEXT_FILTER_IDX:\"next_filter_idx\"};var{DEPTH:It,IS_LEAF:Pt}=B;var ce=r=>{var e,t;if(((e=globalThis.document)==null?void 0:e.cookie)!==void 0)return(t=globalThis.document.cookie.split(\"; \").find(n=>n.startsWith(`${r}=`)))==null?void 0:t.split(\"=\")[1]};function G({from:r,to:e},t=0,n=Number.MAX_SAFE_INTEGER){if(r===0&&e===0)return{from:r,to:e};if(t===0)return n<r?{from:0,to:0}:{from:r,to:Math.min(e,n)};if(r===0)return{from:r,to:Math.min(e+t,n)};{let s=r-t<0,o=n-(e+t)<0;return s&&o?{from:0,to:n}:s?{from:0,to:e+t}:o?{from:Math.max(0,r-t),to:n}:{from:r-t,to:e+t}}}var je=(r,{from:e,to:t})=>r>=e&&r<t;var I=class r{constructor(e,t){this.from=e,this.to=t}isWithin(e){return je(e,this)}overlap(e,t){return e>=this.to||t<this.from?[0,0]:[Math.max(e,this.from),Math.min(t,this.to)]}copy(){return new r(this.from,this.to)}};var pe=r=>r.type===\"connection-status\",de=r=>r.type===\"connection-metrics\";var ge=r=>\"viewport\"in r;var Ye=[\"error\",\"warn\",\"info\",\"debug\"],Qe=r=>typeof r==\"string\"&&Ye.includes(r),Xe=\"error\",P=()=>{},Ze=\"error\",{loggingLevel:L=Ze}=et(),b=r=>{let e=L===\"debug\",t=e||L===\"info\",n=t||L===\"warn\",s=n||L===\"error\",o=t?p=>console.info(`[${r}] ${p}`):P,i=n?p=>console.warn(`[${r}] ${p}`):P,u=e?p=>console.debug(`[${r}] ${p}`):P;return{errorEnabled:s,error:s?p=>console.error(`[${r}] ${p}`):P}};function et(){return typeof loggingSettings<\"u\"?loggingSettings:{loggingLevel:tt()}}function tt(){let r=ce(\"vuu-logging-level\");return Qe(r)?r:Xe}var{debug:nt,debugEnabled:st}=b(\"range-monitor\"),k=class{constructor(e){this.source=e;this.range={from:0,to:0};this.timestamp=0}isSet(){return this.timestamp!==0}set({from:e,to:t}){let{timestamp:n}=this;if(this.range.from=e,this.range.to=t,this.timestamp=performance.now(),n)st&&nt(`<${this.source}> [${e}-${t}], ${(this.timestamp-n).toFixed(0)} ms elapsed`);else return 0}};var rt=[],x=class{constructor(e){this.keys=new Map;this.nextKeyValue=0;this.range=e,this.init(e)}next(e=rt){return e.length>0?e.shift():this.nextKeyValue++}init({from:e,to:t}){this.keys.clear(),this.nextKeyValue=0;for(let n=e;n<t;n++){let s=this.next();this.keys.set(n,s)}return!0}reset(e){let{from:t,to:n}=e,s=n-t,o=this.range.to-this.range.from;if(this.range=e,o>s)return this.init(e);let i=[];this.keys.forEach((u,l)=>{(l<t||l>=n)&&(i.push(u),this.keys.delete(l))});for(let u=t;u<n;u++)if(!this.keys.has(u)){let l=this.next(i);this.keys.set(u,l)}return!1}keyFor(e){let t=this.keys.get(e);if(t===void 0)throw console.log(`key not found\n keys: ${this.toDebugString()}\n `),Error(`KeySet, no key found for rowIndex ${e}`);return t}toDebugString(){return`${this.keys.size} keys\n${Array.from(this.keys.entries()).sort(([e],[t])=>e-t).map(([e,t])=>`${e}=>${t}`).join(\",\")}]\n`}};var{SELECTED:Ft}=B,E={False:0,True:1,First:2,Last:4};var ot=(r,e)=>e>=r[0]&&e<=r[1],it=E.True+E.First+E.Last,at=E.True+E.First,ut=E.True+E.Last,H=(r,e)=>{for(let t of r)if(typeof t==\"number\"){if(t===e)return it}else if(ot(t,e))return e===t[0]?at:e===t[1]?ut:E.True;return E.False};var he=r=>{if(r.every(t=>typeof t==\"number\"))return r;let e=[];for(let t of r)if(typeof t==\"number\")e.push(t);else for(let n=t[0];n<=t[1];n++)e.push(n);return e};var fe=r=>r.type===\"VIEW_PORT_MENU_RESP\"&&r.action!==null&&O(r.action.table),O=r=>r!==null&&typeof r==\"object\"&&\"table\"in r&&\"module\"in r?r.table.startsWith(\"session\"):!1;var lt=[\"VIEW_PORT_MENUS_SELECT_RPC\",\"VIEW_PORT_MENU_TABLE_RPC\",\"VIEW_PORT_MENU_ROW_RPC\",\"VIEW_PORT_MENU_CELL_RPC\",\"VP_EDIT_CELL_RPC\",\"VP_EDIT_ROW_RPC\",\"VP_EDIT_ADD_ROW_RPC\",\"VP_EDIT_DELETE_CELL_RPC\",\"VP_EDIT_DELETE_ROW_RPC\",\"VP_EDIT_SUBMIT_FORM_RPC\"],me=r=>lt.includes(r.type),Ce=r=>r.type===\"VIEW_PORT_RPC_CALL\",A=({requestId:r,...e})=>[r,e],Re=r=>{let e=r.at(0);if(e.updateType===\"SIZE\"){if(r.length===1)return r;e=r.at(1)}let t=r.at(-1);return[e,t]},Se=r=>{let e={};for(let t of r)(e[t.viewPortId]||(e[t.viewPortId]=[])).push(t);return e},z=({columns:r,dataTypes:e,key:t,table:n})=>({table:n,columns:r.map((s,o)=>({name:s,serverDataType:e[o]})),key:t});var Te=\"CHANGE_VP_SUCCESS\";var be=\"CLOSE_TREE_NODE\",we=\"CLOSE_TREE_SUCCESS\";var Ee=\"CREATE_VP\",Ve=\"DISABLE_VP\",ve=\"DISABLE_VP_SUCCESS\";var Me=\"ENABLE_VP\",ye=\"ENABLE_VP_SUCCESS\";var K=\"GET_VP_VISUAL_LINKS\",_e=\"GET_VIEW_PORT_MENUS\";var De=\"HB\",Ie=\"HB_RESP\",Pe=\"LOGIN\",Le=\"OPEN_TREE_NODE\",ke=\"OPEN_TREE_SUCCESS\";var xe=\"REMOVE_VP\";var Oe=\"SET_SELECTION_SUCCESS\";var We=r=>{switch(r){case\"TypeAheadRpcHandler\":return\"TYPEAHEAD\";default:return\"SIMUL\"}};var Ne=[],C=b(\"array-backed-moving-window\");function ct(r,e){if(!e||e.data.length!==r.data.length||e.sel!==r.sel)return!1;for(let t=0;t<e.data.length;t++)if(e.data[t]!==r.data[t])return!1;return!0}var h,W=class{constructor({from:e,to:t},{from:n,to:s},o){ae(this,h,void 0);this.setRowCount=e=>{var t;if((t=C.info)==null||t.call(C,`setRowCount ${e}`),e<this.internalData.length&&(this.internalData.length=e),e<this.rowCount){this.rowsWithinRange=0;let n=Math.min(e,this.clientRange.to);for(let s=this.clientRange.from;s<n;s++){let o=s-m(this,h).from;this.internalData[o]!==void 0&&(this.rowsWithinRange+=1)}}this.rowCount=e};this.bufferBreakout=(e,t)=>{let n=this.bufferSize*.25;return m(this,h).to-t<n?!0:m(this,h).from>0&&e-m(this,h).from<n};this.bufferSize=o,this.clientRange=new I(e,t),ue(this,h,new I(n,s)),this.internalData=new Array(o),this.rowsWithinRange=0,this.rowCount=0}get range(){return m(this,h)}get hasAllRowsWithinRange(){return this.rowsWithinRange===this.clientRange.to-this.clientRange.from||this.rowCount>0&&this.clientRange.from+this.rowsWithinRange===this.rowCount}outOfRange(e,t){let{from:n,to:s}=this.range;if(t<n||e>=s)return!0}setAtIndex(e){let{rowIndex:t}=e,n=t-m(this,h).from;if(ct(e,this.internalData[n]))return!1;let s=this.isWithinClientRange(t);return(s||this.isWithinRange(t))&&(!this.internalData[n]&&s&&(this.rowsWithinRange+=1),this.internalData[n]=e),s}getAtIndex(e){return m(this,h).isWithin(e)&&this.internalData[e-m(this,h).from]!=null?this.internalData[e-m(this,h).from]:void 0}isWithinRange(e){return m(this,h).isWithin(e)}isWithinClientRange(e){return this.clientRange.isWithin(e)}setClientRange(e,t){var p;(p=C.debug)==null||p.call(C,`setClientRange ${e} - ${t}`);let n=this.clientRange.from,s=Math.min(this.clientRange.to,this.rowCount);if(e===n&&t===s)return[!1,Ne];let o=this.clientRange.copy();this.clientRange.from=e,this.clientRange.to=t,this.rowsWithinRange=0;for(let a=e;a<t;a++){let c=a-m(this,h).from;this.internalData[c]&&(this.rowsWithinRange+=1)}let i=Ne,u=m(this,h).from;if(this.hasAllRowsWithinRange)if(t>o.to){let a=Math.max(e,o.to);i=this.internalData.slice(a-u,t-u)}else{let a=Math.min(o.from,t);i=this.internalData.slice(e-u,a-u)}return[this.bufferBreakout(e,t),i]}setRange(e,t){var n,s;if(e!==m(this,h).from||t!==m(this,h).to){(n=C.debug)==null||n.call(C,`setRange ${e} - ${t}`);let[o,i]=m(this,h).overlap(e,t),u=new Array(t-e);this.rowsWithinRange=0;for(let l=o;l<i;l++){let p=this.getAtIndex(l);if(p){let a=l-e;u[a]=p,this.isWithinClientRange(l)&&(this.rowsWithinRange+=1)}}this.internalData=u,m(this,h).from=e,m(this,h).to=t}else(s=C.debug)==null||s.call(C,`setRange ${e} - ${t} IGNORED because not changed`)}get data(){return this.internalData}getData(){var u;let{from:e,to:t}=m(this,h),{from:n,to:s}=this.clientRange,o=Math.max(0,n-e),i=Math.min(t-e,t,s-e,(u=this.rowCount)!=null?u:t);return this.internalData.slice(o,i)}clear(){var e;(e=C.debug)==null||e.call(C,\"clear\"),this.internalData.length=0,this.rowsWithinRange=0,this.setRowCount(0)}getCurrentDataRange(){let e=this.internalData,t=e.length,[n]=this.internalData,s=this.internalData[t-1];if(n&&s)return[n.rowIndex,s.rowIndex];for(let o=0;o<t;o++)if(e[o]!==void 0){n=e[o];break}for(let o=t-1;o>=0;o--)if(e[o]!==void 0){s=e[o];break}return n&&s?[n.rowIndex,s.rowIndex]:[-1,-1]}};h=new WeakMap;var{debug:f,debugEnabled:N,error:pt,info:d,infoEnabled:dt,warn:M}=b(\"viewport\"),gt=({rowKey:r,updateType:e})=>e===\"U\"&&!r.startsWith(\"$root\"),U=[void 0,void 0],ht={count:0,mode:void 0,size:0,ts:0},q=class{constructor({aggregations:e,bufferSize:t=50,columns:n,filter:s,groupBy:o=[],table:i,range:u,sort:l,title:p,viewport:a,visualLink:c},g){this.batchMode=!0;this.hasUpdates=!1;this.pendingUpdates=[];this.pendingOperations=new Map;this.pendingRangeRequests=[];this.rowCountChanged=!1;this.selectedRows=[];this.useBatchMode=!0;this.lastUpdateStatus=ht;this.updateThrottleTimer=void 0;this.rangeMonitor=new k(\"ViewPort\");this.disabled=!1;this.isTree=!1;this.status=\"\";this.suspended=!1;this.suspendTimer=null;this.setLastSizeOnlyUpdateSize=e=>{this.lastUpdateStatus.size=e};this.setLastUpdate=e=>{let{ts:t,mode:n}=this.lastUpdateStatus,s=0;if(n===e){let o=Date.now();this.lastUpdateStatus.count+=1,this.lastUpdateStatus.ts=o,s=t===0?0:o-t}else this.lastUpdateStatus.count=1,this.lastUpdateStatus.ts=0,s=0;return this.lastUpdateStatus.mode=e,s};this.rangeRequestAlreadyPending=e=>{let{bufferSize:t}=this,n=t*.25,{from:s}=e;for(let{from:o,to:i}of this.pendingRangeRequests)if(s>=o&&s<i){if(e.to+n<=i)return!0;s=i}return!1};this.sendThrottledSizeMessage=()=>{this.updateThrottleTimer=void 0,this.lastUpdateStatus.count=3,this.postMessageToClient({clientViewportId:this.clientViewportId,mode:\"size-only\",size:this.lastUpdateStatus.size,type:\"viewport-update\"})};this.shouldThrottleMessage=e=>{let t=this.setLastUpdate(e);return e===\"size-only\"&&t>0&&t<500&&this.lastUpdateStatus.count>3};this.throttleMessage=e=>this.shouldThrottleMessage(e)?(d==null||d(\"throttling updates setTimeout to 2000\"),this.updateThrottleTimer===void 0&&(this.updateThrottleTimer=setTimeout(this.sendThrottledSizeMessage,2e3)),!0):(this.updateThrottleTimer!==void 0&&(clearTimeout(this.updateThrottleTimer),this.updateThrottleTimer=void 0),!1);this.getNewRowCount=()=>{if(this.rowCountChanged&&this.dataWindow)return this.rowCountChanged=!1,this.dataWindow.rowCount};this.aggregations=e,this.bufferSize=t,this.clientRange=u,this.clientViewportId=a,this.columns=n,this.filter=s,this.groupBy=o,this.keys=new x(u),this.pendingLinkedParent=c,this.table=i,this.sort=l,this.title=p,dt&&(d==null||d(`constructor #${a} ${i.table} bufferSize=${t}`)),this.dataWindow=new W(this.clientRange,u,this.bufferSize),this.postMessageToClient=g}get hasUpdatesToProcess(){return this.suspended?!1:this.rowCountChanged||this.hasUpdates}get size(){var e;return(e=this.dataWindow.rowCount)!=null?e:0}subscribe(){let{filter:e}=this.filter;return this.status=this.status===\"subscribed\"?\"resubscribing\":\"subscribing\",{type:Ee,table:this.table,range:G(this.clientRange,this.bufferSize),aggregations:this.aggregations,columns:this.columns,sort:this.sort,groupBy:this.groupBy,filterSpec:{filter:e}}}handleSubscribed({viewPortId:e,aggregations:t,columns:n,filterSpec:s,range:o,sort:i,groupBy:u,table:l},p){this.serverViewportId=e,this.status=\"subscribed\",this.aggregations=t,this.columns=n,this.groupBy=u,this.isTree=u&&u.length>0,this.dataWindow.setRange(o.from,o.to);let a=l===p.table.table?p:{...p,table:{...p.table,session:l}};return{aggregations:t,type:\"subscribed\",clientViewportId:this.clientViewportId,columns:n,filter:s,groupBy:u,range:o,sort:i,tableSchema:a}}awaitOperation(e,t){this.pendingOperations.set(e,t)}completeOperation(e,...t){var u;let{clientViewportId:n,pendingOperations:s}=this,o=s.get(e);if(!o){pt(`no matching operation found to complete for requestId ${e}`);return}let{type:i}=o;if(d==null||d(`completeOperation ${i}`),s.delete(e),i===\"CHANGE_VP_RANGE\"){let[l,p]=t;(u=this.dataWindow)==null||u.setRange(l,p);for(let a=this.pendingRangeRequests.length-1;a>=0;a--){let c=this.pendingRangeRequests[a];if(c.requestId===e){c.acked=!0;break}else M==null||M(\"range requests sent faster than they are being ACKed\")}}else if(i===\"config\"){let{aggregations:l,columns:p,filter:a,groupBy:c,sort:g}=o.data;return this.aggregations=l,this.columns=p,this.filter=a,this.groupBy=c,this.sort=g,c.length>0?this.isTree=!0:this.isTree&&(this.isTree=!1),f==null||f(`config change confirmed, isTree : ${this.isTree}`),{clientViewportId:n,type:i,config:o.data}}else{if(i===\"groupBy\")return this.isTree=o.data.length>0,this.groupBy=o.data,f==null||f(`groupBy change confirmed, isTree : ${this.isTree}`),{clientViewportId:n,type:i,groupBy:o.data};if(i===\"columns\")return this.columns=o.data,{clientViewportId:n,type:i,columns:o.data};if(i===\"filter\")return this.filter=o.data,{clientViewportId:n,type:i,filter:o.data};if(i===\"aggregate\")return this.aggregations=o.data,{clientViewportId:n,type:\"aggregate\",aggregations:this.aggregations};if(i===\"sort\")return this.sort=o.data,{clientViewportId:n,type:i,sort:this.sort};if(i!==\"selection\"){if(i===\"disable\")return this.disabled=!0,{type:\"disabled\",clientViewportId:n};if(i===\"enable\")return this.disabled=!1,{type:\"enabled\",clientViewportId:n};if(i===\"CREATE_VISUAL_LINK\"){let[l,p,a]=t;return this.linkedParent={colName:l,parentViewportId:p,parentColName:a},this.pendingLinkedParent=void 0,{type:\"vuu-link-created\",clientViewportId:n,colName:l,parentViewportId:p,parentColName:a}}else if(i===\"REMOVE_VISUAL_LINK\")return this.linkedParent=void 0,{type:\"vuu-link-removed\",clientViewportId:n}}}}rangeRequest(e,t){N&&this.rangeMonitor.set(t);let n=\"CHANGE_VP_RANGE\";if(this.dataWindow){let[s,o]=this.dataWindow.setClientRange(t.from,t.to),i,u=this.dataWindow.rowCount||void 0,l=s&&!this.rangeRequestAlreadyPending(t)?{type:n,viewPortId:this.serverViewportId,...G(t,this.bufferSize,u)}:null;if(l){N&&(f==null||f(`create CHANGE_VP_RANGE: [${l.from} - ${l.to}]`)),this.awaitOperation(e,{type:n});let a=this.pendingRangeRequests.at(-1);if(a)if(a.acked)console.warn(\"Range Request before previous request is filled\");else{let{from:c,to:g}=a;this.dataWindow.outOfRange(c,g)?i={clientViewportId:this.clientViewportId,type:\"debounce-begin\"}:M==null||M(\"Range Request before previous request is acked\")}this.pendingRangeRequests.push({...l,requestId:e}),this.useBatchMode&&(this.batchMode=!0)}else o.length>0&&(this.batchMode=!1);this.keys.reset(this.dataWindow.clientRange);let p=this.isTree?j:J;return o.length?[l,o.map(a=>p(a,this.keys,this.selectedRows))]:i?[l,void 0,i]:[l]}else return[null]}setLinks(e){return this.links=e,[{type:\"vuu-links\",links:e,clientViewportId:this.clientViewportId},this.pendingLinkedParent]}setMenu(e){return{type:\"vuu-menu\",menu:e,clientViewportId:this.clientViewportId}}openTreeNode(e,t){return this.useBatchMode&&(this.batchMode=!0),{type:Le,vpId:this.serverViewportId,treeKey:t.key}}closeTreeNode(e,t){return this.useBatchMode&&(this.batchMode=!0),{type:be,vpId:this.serverViewportId,treeKey:t.key}}createLink(e,t,n,s){let o={type:\"CREATE_VISUAL_LINK\",parentVpId:n,childVpId:this.serverViewportId,parentColumnName:s,childColumnName:t};return this.awaitOperation(e,o),this.useBatchMode&&(this.batchMode=!0),o}removeLink(e){let t={type:\"REMOVE_VISUAL_LINK\",childVpId:this.serverViewportId};return this.awaitOperation(e,t),t}suspend(){this.suspended=!0,d==null||d(\"suspend\")}resume(){return this.suspended=!1,N&&(f==null||f(`resume: ${this.currentData()}`)),[this.size,this.currentData()]}currentData(){let e=[];if(this.dataWindow){let t=this.dataWindow.getData(),{keys:n}=this,s=this.isTree?j:J;for(let o of t)o&&e.push(s(o,n,this.selectedRows))}return e}enable(e){return this.awaitOperation(e,{type:\"enable\"}),d==null||d(`enable: ${this.serverViewportId}`),{type:Me,viewPortId:this.serverViewportId}}disable(e){return this.awaitOperation(e,{type:\"disable\"}),d==null||d(`disable: ${this.serverViewportId}`),this.suspended=!1,{type:Ve,viewPortId:this.serverViewportId}}columnRequest(e,t){return this.awaitOperation(e,{type:\"columns\",data:t}),f==null||f(`columnRequest: ${t}`),this.createRequest({columns:t})}setConfig(e,t){var o;this.awaitOperation(e,{type:\"config\",data:t});let{filter:n,...s}=t;return this.useBatchMode&&(this.batchMode=!0),N?f==null||f(`setConfig ${JSON.stringify(t)}`):d==null||d(\"setConfig\"),!this.isTree&&t.groupBy.length>0&&((o=this.dataWindow)==null||o.clear()),this.createRequest({...s,filterSpec:typeof(n==null?void 0:n.filter)==\"string\"?{filter:n.filter}:{filter:\"\"}},!0)}aggregateRequest(e,t){return this.awaitOperation(e,{type:\"aggregate\",data:t}),d==null||d(`aggregateRequest: ${t}`),this.createRequest({aggregations:t})}sortRequest(e,t){return this.awaitOperation(e,{type:\"sort\",data:t}),d==null||d(`sortRequest: ${JSON.stringify(t.sortDefs)}`),this.createRequest({sort:t})}selectRequest(e,t){return this.selectedRows=t,this.awaitOperation(e,{type:\"selection\",data:t}),d==null||d(`selectRequest: ${t}`),{type:\"SET_SELECTION\",vpId:this.serverViewportId,selection:he(t)}}removePendingRangeRequest(e,t){for(let n=this.pendingRangeRequests.length-1;n>=0;n--){let{from:s,to:o}=this.pendingRangeRequests[n],i=!0;if(e>=s&&e<o||t>s&&t<o){i||console.warn(\"removePendingRangeRequest TABLE_ROWS are not for latest request\"),this.pendingRangeRequests.splice(n,1);break}else i=!1}}updateRows(e){var s,o,i;let[t,n]=Re(e);if(t&&n&&this.removePendingRangeRequest(t.rowIndex,n.rowIndex),e.length===1)if(t.vpSize===0&&this.disabled){f==null||f(`ignore a SIZE=0 message on disabled viewport (${e.length} rows)`);return}else t.updateType===\"SIZE\"&&this.setLastSizeOnlyUpdateSize(t.vpSize);for(let u of e)this.isTree&&gt(u)||((u.updateType===\"SIZE\"||((s=this.dataWindow)==null?void 0:s.rowCount)!==u.vpSize)&&((o=this.dataWindow)==null||o.setRowCount(u.vpSize),this.rowCountChanged=!0),u.updateType===\"U\"&&(i=this.dataWindow)!=null&&i.setAtIndex(u)&&(this.hasUpdates=!0,this.batchMode||this.pendingUpdates.push(u)))}getClientRows(){let e,t=\"size-only\";if(!this.hasUpdates&&!this.rowCountChanged)return U;if(this.hasUpdates){let{keys:n,selectedRows:s}=this,o=this.isTree?j:J;if(this.updateThrottleTimer&&(self.clearTimeout(this.updateThrottleTimer),this.updateThrottleTimer=void 0),this.pendingUpdates.length>0){e=[],t=\"update\";for(let i of this.pendingUpdates)e.push(o(i,n,s));this.pendingUpdates.length=0}else{let i=this.dataWindow.getData();if(this.dataWindow.hasAllRowsWithinRange){e=[],t=\"batch\";for(let u of i)e.push(o(u,n,s));this.batchMode=!1}}this.hasUpdates=!1}return this.throttleMessage(t)?U:[e,t]}createRequest(e,t=!1){return t?{type:\"CHANGE_VP\",viewPortId:this.serverViewportId,...e}:{type:\"CHANGE_VP\",viewPortId:this.serverViewportId,aggregations:this.aggregations,columns:this.columns,sort:this.sort,groupBy:this.groupBy,filterSpec:{filter:this.filter.filter},...e}}},J=({rowIndex:r,rowKey:e,sel:t,data:n},s,o)=>[r,s.keyFor(r),!0,!1,0,0,e,t?H(o,r):0].concat(n),j=({rowIndex:r,rowKey:e,sel:t,data:n},s,o)=>{let[i,u,,l,,p,...a]=n;return[r,s.keyFor(r),l,u,i,p,e,t?H(o,r):0].concat(a)};var Ue=1;var{debug:V,debugEnabled:Y,error:y,info:T,infoEnabled:ft,warn:Q}=b(\"server-proxy\"),R=()=>`${Ue++}`,mt={},Ct=r=>r.disabled!==!0&&r.suspended!==!0,Rt={type:\"NO_ACTION\"},St=(r,e,t)=>r.map(n=>n.parentVpId===e?{...n,label:t}:n);function Tt(r,e){return r.map(t=>{let{parentVpId:n}=t,s=e.get(n);if(s)return{...t,parentClientVpId:s.clientViewportId,label:s.title};throw Error(\"addLabelsToLinks viewport not found\")})}var $=class{constructor(e,t){this.authToken=\"\";this.user=\"user\";this.pendingRequests=new Map;this.queuedRequests=[];this.cachedTableMetaRequests=new Map;this.cachedTableSchemas=new Map;this.connection=e,this.postMessageToClient=t,this.viewports=new Map,this.mapClientToServerViewport=new Map}async reconnect(){await this.login(this.authToken);let[e,t]=le(Array.from(this.viewports.values()),Ct);this.viewports.clear(),this.mapClientToServerViewport.clear();let n=s=>{s.forEach(o=>{let{clientViewportId:i}=o;this.viewports.set(i,o),this.sendMessageToServer(o.subscribe(),i)})};n(e),setTimeout(()=>{n(t)},2e3)}async login(e,t=\"user\"){if(e)return this.authToken=e,this.user=t,new Promise((n,s)=>{this.sendMessageToServer({type:Pe,token:this.authToken,user:t},\"\"),this.pendingLogin={resolve:n,reject:s}});this.authToken===\"\"&&y(\"login, cannot login until auth token has been obtained\")}subscribe(e){if(this.mapClientToServerViewport.has(e.viewport))y(`spurious subscribe call ${e.viewport}`);else{let t=this.getTableMeta(e.table),n=new q(e,this.postMessageToClient);this.viewports.set(e.viewport,n);let s=this.awaitResponseToMessage(n.subscribe(),e.viewport);Promise.all([s,t]).then(([i,u])=>{let{viewPortId:l}=i,{status:p}=n;e.viewport!==l&&(this.viewports.delete(e.viewport),this.viewports.set(l,n)),this.mapClientToServerViewport.set(e.viewport,l);let a=n.handleSubscribed(i,u);a&&(this.postMessageToClient(a),Y&&V(`post DataSourceSubscribedMessage to client: ${JSON.stringify(a)}`)),n.disabled&&this.disableViewport(n),this.queuedRequests.length>0&&this.processQueuedRequests(),p===\"subscribing\"&&!O(n.table)&&(this.sendMessageToServer({type:K,vpId:l}),this.sendMessageToServer({type:_e,vpId:l}),Array.from(this.viewports.entries()).filter(([c,{disabled:g}])=>c!==l&&!g).forEach(([c])=>{this.sendMessageToServer({type:K,vpId:c})}))})}}processQueuedRequests(){let e={};for(;this.queuedRequests.length;){let t=this.queuedRequests.pop();if(t){let{clientViewportId:n,message:s,requestId:o}=t;if(s.type===\"CHANGE_VP_RANGE\"){if(e.CHANGE_VP_RANGE)continue;e.CHANGE_VP_RANGE=!0;let i=this.mapClientToServerViewport.get(n);i&&this.sendMessageToServer({...s,viewPortId:i},o)}}}}unsubscribe(e){let t=this.mapClientToServerViewport.get(e);t?(T==null||T(`Unsubscribe Message (Client to Server):\n ${t}`),this.sendMessageToServer({type:xe,viewPortId:t})):y(`failed to unsubscribe client viewport ${e}, viewport not found`)}getViewportForClient(e,t=!0){let n=this.mapClientToServerViewport.get(e);if(n){let s=this.viewports.get(n);if(s)return s;if(t)throw Error(`Viewport not found for client viewport ${e}`);return null}else{if(this.viewports.has(e))return this.viewports.get(e);if(t)throw Error(`Viewport server id not found for client viewport ${e}`);return null}}setViewRange(e,t){let n=R(),[s,o,i]=e.rangeRequest(n,t.range);T==null||T(`setViewRange ${t.range.from} - ${t.range.to}`),s&&(this.sendIfReady(s,n,e.status===\"subscribed\")||this.queuedRequests.push({clientViewportId:t.viewport,message:s,requestId:n})),o?(T==null||T(`setViewRange ${o.length} rows returned from cache`),this.postMessageToClient({mode:\"batch\",type:\"viewport-update\",clientViewportId:e.clientViewportId,rows:o})):i&&this.postMessageToClient(i)}setConfig(e,t){let n=R(),s=e.setConfig(n,t.config);this.sendIfReady(s,n,e.status===\"subscribed\")}aggregate(e,t){let n=R(),s=e.aggregateRequest(n,t.aggregations);this.sendIfReady(s,n,e.status===\"subscribed\")}sort(e,t){let n=R(),s=e.sortRequest(n,t.sort);this.sendIfReady(s,n,e.status===\"subscribed\")}setColumns(e,t){let n=R(),{columns:s}=t,o=e.columnRequest(n,s);this.sendIfReady(o,n,e.status===\"subscribed\")}setTitle(e,t){e&&(e.title=t.title,this.updateTitleOnVisualLinks(e))}select(e,t){let n=R(),{selected:s}=t,o=e.selectRequest(n,s);this.sendIfReady(o,n,e.status===\"subscribed\")}disableViewport(e){let t=R(),n=e.disable(t);this.sendIfReady(n,t,e.status===\"subscribed\")}enableViewport(e){if(e.disabled){let t=R(),n=e.enable(t);this.sendIfReady(n,t,e.status===\"subscribed\")}}suspendViewport(e){e.suspend(),e.suspendTimer=setTimeout(()=>{T==null||T(\"suspendTimer expired, escalate suspend to disable\"),this.disableViewport(e)},3e3)}resumeViewport(e){e.suspendTimer&&(V==null||V(\"clear suspend timer\"),clearTimeout(e.suspendTimer),e.suspendTimer=null);let[t,n]=e.resume();V==null||V(`resumeViewport size ${t}, ${n.length} rows sent to client`),this.postMessageToClient({clientViewportId:e.clientViewportId,mode:\"batch\",rows:n,size:t,type:\"viewport-update\"})}openTreeNode(e,t){if(e.serverViewportId){let n=R();this.sendIfReady(e.openTreeNode(n,t),n,e.status===\"subscribed\")}}closeTreeNode(e,t){if(e.serverViewportId){let n=R();this.sendIfReady(e.closeTreeNode(n,t),n,e.status===\"subscribed\")}}createLink(e,t){let{parentClientVpId:n,parentColumnName:s,childColumnName:o}=t,i=R(),u=this.mapClientToServerViewport.get(n);if(u){let l=e.createLink(i,o,u,s);this.sendMessageToServer(l,i)}else y(\"ServerProxy unable to create link, viewport not found\")}removeLink(e){let t=R(),n=e.removeLink(t);this.sendMessageToServer(n,t)}updateTitleOnVisualLinks(e){var s;let{serverViewportId:t,title:n}=e;for(let o of this.viewports.values())if(o!==e&&o.links&&t&&n&&(s=o.links)!=null&&s.some(i=>i.parentVpId===t)){let[i]=o.setLinks(St(o.links,t,n));this.postMessageToClient(i)}}removeViewportFromVisualLinks(e){var t;for(let n of this.viewports.values())if((t=n.links)!=null&&t.some(({parentVpId:s})=>s===e)){let[s]=n.setLinks(n.links.filter(({parentVpId:o})=>o!==e));this.postMessageToClient(s)}}menuRpcCall(e){let t=this.getViewportForClient(e.vpId,!1);if(t!=null&&t.serverViewportId){let[n,s]=A(e);this.sendMessageToServer({...s,vpId:t.serverViewportId},n)}}viewportRpcCall(e){let t=this.getViewportForClient(e.vpId,!1);if(t!=null&&t.serverViewportId){let[n,s]=A(e);this.sendMessageToServer({...s,vpId:t.serverViewportId,namedParams:{}},n)}}rpcCall(e){let[t,n]=A(e),s=We(n.service);this.sendMessageToServer(n,t,{module:s})}handleMessageFromClient(e){var t;if(ge(e))if(e.type===\"disable\"){let n=this.getViewportForClient(e.viewport,!1);return n!==null?this.disableViewport(n):void 0}else{let n=this.getViewportForClient(e.viewport);switch(e.type){case\"setViewRange\":return this.setViewRange(n,e);case\"config\":return this.setConfig(n,e);case\"aggregate\":return this.aggregate(n,e);case\"sort\":return this.sort(n,e);case\"select\":return this.select(n,e);case\"suspend\":return this.suspendViewport(n);case\"resume\":return this.resumeViewport(n);case\"enable\":return this.enableViewport(n);case\"openTreeNode\":return this.openTreeNode(n,e);case\"closeTreeNode\":return this.closeTreeNode(n,e);case\"createLink\":return this.createLink(n,e);case\"removeLink\":return this.removeLink(n);case\"setColumns\":return this.setColumns(n,e);case\"setTitle\":return this.setTitle(n,e);default:}}else{if(Ce(e))return this.viewportRpcCall(e);if(me(e))return this.menuRpcCall(e);{let{type:n,requestId:s}=e;switch(n){case\"GET_TABLE_LIST\":{(t=this.tableList)!=null||(this.tableList=this.awaitResponseToMessage({type:n},s)),this.tableList.then(o=>{this.postMessageToClient({type:\"TABLE_LIST_RESP\",tables:o.tables,requestId:s})});return}case\"GET_TABLE_META\":{this.getTableMeta(e.table,s).then(o=>{o&&this.postMessageToClient({type:\"TABLE_META_RESP\",tableSchema:o,requestId:s})});return}case\"RPC_CALL\":return this.rpcCall(e);default:}}}y(`Vuu ServerProxy Unexpected message from client ${JSON.stringify(e)}`)}getTableMeta(e,t=R()){if(O(e))return Promise.resolve(void 0);let n=`${e.module}:${e.table}`,s=this.cachedTableMetaRequests.get(n);return s||(s=this.awaitResponseToMessage({type:\"GET_TABLE_META\",table:e},t),this.cachedTableMetaRequests.set(n,s)),s==null?void 0:s.then(o=>this.cacheTableMeta(o))}awaitResponseToMessage(e,t=R()){return new Promise((n,s)=>{this.sendMessageToServer(e,t),this.pendingRequests.set(t,{reject:s,resolve:n})})}sendIfReady(e,t,n=!0){return n&&this.sendMessageToServer(e,t),n}sendMessageToServer(e,t=`${Ue++}`,n=mt){let{module:s=\"CORE\"}=n;this.authToken&&this.connection.send({requestId:t,sessionId:this.sessionId,token:this.authToken,user:this.user,module:s,body:e})}handleMessageFromServer(e){var u;let{body:t,requestId:n,sessionId:s}=e,o=this.pendingRequests.get(n);if(o){let{resolve:a}=o;this.pendingRequests.delete(n),a(t);return}let{viewports:i}=this;switch(t.type){case De:this.sendMessageToServer({type:Ie,ts:+new Date},\"NA\");break;case\"LOGIN_SUCCESS\":if(s)this.sessionId=s,(u=this.pendingLogin)==null||u.resolve(s),this.pendingLogin=void 0;else throw Error(\"LOGIN_SUCCESS did not provide sessionId\");break;case\"REMOVE_VP_SUCCESS\":{let a=i.get(t.viewPortId);a&&(this.mapClientToServerViewport.delete(a.clientViewportId),i.delete(t.viewPortId),this.removeViewportFromVisualLinks(t.viewPortId))}break;case Oe:{let a=this.viewports.get(t.vpId);a&&a.completeOperation(n)}break;case Te:case ve:if(i.has(t.viewPortId)){let a=this.viewports.get(t.viewPortId);if(a){let c=a.completeOperation(n);c!==void 0&&(this.postMessageToClient(c),Y&&V(`postMessageToClient ${JSON.stringify(c)}`))}}break;case ye:{let a=this.viewports.get(t.viewPortId);if(a){let c=a.completeOperation(n);if(c){this.postMessageToClient(c);let[g,S]=a.resume();this.postMessageToClient({clientViewportId:a.clientViewportId,mode:\"batch\",rows:S,size:g,type:\"viewport-update\"})}}}break;case\"TABLE_ROW\":{let a=Se(t.rows);for(let[c,g]of Object.entries(a)){let S=i.get(c);S?S.updateRows(g):Q==null||Q(`TABLE_ROW message received for non registered viewport ${c}`)}this.processUpdates()}break;case\"CHANGE_VP_RANGE_SUCCESS\":{let a=this.viewports.get(t.viewPortId);if(a){let{from:c,to:g}=t;a.completeOperation(n,c,g)}}break;case ke:case we:break;case\"CREATE_VISUAL_LINK_SUCCESS\":{let a=this.viewports.get(t.childVpId),c=this.viewports.get(t.parentVpId);if(a&&c){let{childColumnName:g,parentColumnName:S}=t,D=a.completeOperation(n,g,c.clientViewportId,S);D&&this.postMessageToClient(D)}}break;case\"REMOVE_VISUAL_LINK_SUCCESS\":{let a=this.viewports.get(t.childVpId);if(a){let c=a.completeOperation(n);c&&this.postMessageToClient(c)}}break;case\"VP_VISUAL_LINKS_RESP\":{let a=this.getActiveLinks(t.links),c=this.viewports.get(t.vpId);if(a.length&&c){let g=Tt(a,this.viewports),[S,D]=c.setLinks(g);if(this.postMessageToClient(S),D){let{link:se,parentClientVpId:ze}=D,re=R(),oe=this.mapClientToServerViewport.get(ze);if(oe){let Ke=c.createLink(re,se.fromColumn,oe,se.toColumn);this.sendMessageToServer(Ke,re)}}}}break;case\"VIEW_PORT_MENUS_RESP\":if(t.menu.name){let a=this.viewports.get(t.vpId);if(a){let c=a.setMenu(t.menu);this.postMessageToClient(c)}}break;case\"VP_EDIT_RPC_RESPONSE\":this.postMessageToClient({action:t.action,requestId:n,rpcName:t.rpcName,type:\"VP_EDIT_RPC_RESPONSE\"});break;case\"VP_EDIT_RPC_REJECT\":this.viewports.get(t.vpId)&&this.postMessageToClient({requestId:n,type:\"VP_EDIT_RPC_REJECT\",error:t.error});break;case\"VIEW_PORT_MENU_REJ\":{console.log(\"send menu error back to client\");let{error:a,rpcName:c,vpId:g}=t,S=this.viewports.get(g);S&&this.postMessageToClient({clientViewportId:S.clientViewportId,error:a,rpcName:c,type:\"VIEW_PORT_MENU_REJ\",requestId:n});break}case\"VIEW_PORT_MENU_RESP\":if(fe(t)){let{action:a,rpcName:c}=t;this.awaitResponseToMessage({type:\"GET_TABLE_META\",table:a.table}).then(g=>{let S=z(g);this.postMessageToClient({rpcName:c,type:\"VIEW_PORT_MENU_RESP\",action:{...a,tableSchema:S},tableAlreadyOpen:this.isTableOpen(a.table),requestId:n})})}else{let{action:a}=t;this.postMessageToClient({type:\"VIEW_PORT_MENU_RESP\",action:a||Rt,tableAlreadyOpen:a!==null&&this.isTableOpen(a.table),requestId:n})}break;case\"RPC_RESP\":{let{method:a,result:c}=t;this.postMessageToClient({type:\"RPC_RESP\",method:a,result:c,requestId:n})}break;case\"VIEW_PORT_RPC_REPONSE\":{let{method:a,action:c}=t;this.postMessageToClient({type:\"VIEW_PORT_RPC_RESPONSE\",rpcName:a,action:c,requestId:n})}break;case\"ERROR\":y(t.msg);break;default:ft&&T(`handleMessageFromServer ${t.type}.`)}}cacheTableMeta(e){let{module:t,table:n}=e.table,s=`${t}:${n}`,o=this.cachedTableSchemas.get(s);return o||(o=z(e),this.cachedTableSchemas.set(s,o)),o}isTableOpen(e){if(e){let t=e.table;for(let n of this.viewports.values())if(!n.suspended&&n.table.table===t)return!0}}getActiveLinks(e){return e.filter(t=>{let n=this.viewports.get(t.parentVpId);return n&&!n.suspended})}processUpdates(){this.viewports.forEach(e=>{var t;if(e.hasUpdatesToProcess){let n=e.getClientRows();if(n!==U){let[s,o]=n,i=e.getNewRowCount();(i!==void 0||s&&s.length>0)&&(Y&&V(`postMessageToClient #${e.clientViewportId} viewport-update ${o}, ${(t=s==null?void 0:s.length)!=null?t:\"no\"} rows, size ${i}`),o&&this.postMessageToClient({clientViewportId:e.clientViewportId,mode:o,rows:s,size:i,type:\"viewport-update\"}))}}})}};var{debug:un,debugEnabled:ln,error:qe,info:w,infoEnabled:bt,warn:_}=b(\"websocket-connection\"),Be={},Z=Symbol(\"setWebsocket\"),F=Symbol(\"connectionCallback\");async function Ge(r,e,t,n=10,s=5){return Be[r]={status:\"connecting\",connect:{allowed:s,remaining:s},reconnect:{allowed:n,remaining:n}},He(r,e,t)}async function X(r){throw Error(\"connection broken\")}async function He(r,e,t,n){let{status:s,connect:o,reconnect:i}=Be[r],u=s===\"connecting\"?o:i;try{t({type:\"connection-status\",status:\"connecting\"});let l=typeof n<\"u\",p=await Et(r,e);console.info(\"%c⚡ %cconnected\",\"font-size: 24px;color: green;font-weight: bold;\",\"color:green; font-size: 14px;\"),n!==void 0&&n[Z](p);let a=n!=null?n:new ee(p,r,e,t),c=l?\"reconnected\":\"connection-open-awaiting-session\";return t({type:\"connection-status\",status:c}),a.status=c,u.remaining=u.allowed,a}catch{let p=--u.remaining>0;if(t({type:\"connection-status\",status:\"disconnected\",reason:\"failed to connect\",retry:p}),p)return wt(r,e,t,n,2e3);throw t({type:\"connection-status\",status:\"failed\",reason:\"unable to connect\",retry:p}),Error(\"Failed to establish connection\")}}var wt=(r,e,t,n,s)=>new Promise(o=>{setTimeout(()=>{o(He(r,e,t,n))},s)}),Et=(r,e)=>new Promise((t,n)=>{bt&&e!==void 0&&w(`WebSocket Protocol ${e==null?void 0:e.toString()}`);let s=new WebSocket(r,e);s.onopen=()=>t(s),s.onerror=o=>n(o)}),$e=()=>{_==null||_(\"Connection cannot be closed, socket not yet opened\")},Fe=r=>{_==null||_(`Message cannot be sent, socket closed ${r.body.type}`)},Vt=r=>{try{return JSON.parse(r)}catch{throw Error(`Error parsing JSON response from server ${r}`)}},ee=class{constructor(e,t,n,s){this.close=$e;this.requiresLogin=!0;this.send=Fe;this.status=\"ready\";this.messagesCount=0;this.connectionMetricsInterval=null;this.handleWebsocketMessage=e=>{let t=Vt(e.data);this.messagesCount+=1,this[F](t)};this.url=t,this.protocol=n,this[F]=s,this[Z](e)}reconnect(){X(this)}[(F,Z)](e){let t=this[F];e.onmessage=o=>{this.status=\"connected\",e.onmessage=this.handleWebsocketMessage,this.handleWebsocketMessage(o)},this.connectionMetricsInterval=setInterval(()=>{t({type:\"connection-metrics\",messagesLength:this.messagesCount}),this.messagesCount=0},2e3),e.onerror=()=>{qe(\"⚡ connection error\"),t({type:\"connection-status\",status:\"disconnected\",reason:\"error\"}),this.connectionMetricsInterval&&(clearInterval(this.connectionMetricsInterval),this.connectionMetricsInterval=null),this.status===\"connection-open-awaiting-session\"?qe(\"Websocket connection lost before Vuu session established, check websocket configuration\"):this.status!==\"closed\"&&(X(this),this.send=s)},e.onclose=()=>{w==null||w(\"⚡ connection close\"),t({type:\"connection-status\",status:\"disconnected\",reason:\"close\"}),this.connectionMetricsInterval&&(clearInterval(this.connectionMetricsInterval),this.connectionMetricsInterval=null),this.status!==\"closed\"&&(X(this),this.send=s)};let n=o=>{e.send(JSON.stringify(o))},s=o=>{w==null||w(`TODO queue message until websocket reconnected ${o.body.type}`)};this.send=n,this.close=()=>{this.status=\"closed\",e.close(),this.close=$e,this.send=Fe,w==null||w(\"close websocket\")}}};var v,{info:te,infoEnabled:ne}=b(\"worker\");async function vt(r,e,t,n,s,o,i){let u=await Ge(r,e,l=>{de(l)?postMessage({type:\"connection-metrics\",messages:l}):pe(l)?(s(l),l.status===\"reconnected\"&&v.reconnect()):v.handleMessageFromServer(l)},o,i);v=new $(u,l=>Mt(l)),u.requiresLogin&&await v.login(t,n)}function Mt(r){postMessage(r)}var yt=async({data:r})=>{switch(r.type){case\"connect\":try{await vt(r.url,r.protocol,r.token,r.username,postMessage,r.retryLimitDisconnect,r.retryLimitStartup),postMessage({type:\"connected\"})}catch(e){postMessage({type:\"connection-failed\",reason:String(e)})}break;case\"subscribe\":ne&&te(`client subscribe: ${JSON.stringify(r)}`),v.subscribe(r);break;case\"unsubscribe\":ne&&te(`client unsubscribe: ${JSON.stringify(r)}`),v.unsubscribe(r.viewport);break;default:ne&&te(`client message: ${JSON.stringify(r)}`),v.handleMessageFromClient(r)}};self.addEventListener(\"message\",yt);postMessage({type:\"ready\"});\n\n";
1
+ export const workerSourceCode: "\nvar ie=(r,e,t)=>{if(!e.has(r))throw TypeError(\"Cannot \"+t)};var m=(r,e,t)=>(ie(r,e,\"read from private field\"),t?t.call(r):e.get(r)),ae=(r,e,t)=>{if(e.has(r))throw TypeError(\"Cannot add the same private member more than once\");e instanceof WeakSet?e.add(r):e.set(r,t)},ue=(r,e,t,n)=>(ie(r,e,\"write to private field\"),n?n.call(r,t):e.set(r,t),t);function le(r,e,t=[],n=[]){for(let s=0,o=r.length;s<o;s++)(e(r[s],s)?t:n).push(r[s]);return[t,n]}var Je=6,B={IDX:0,RENDER_IDX:1,IS_LEAF:2,IS_EXPANDED:3,DEPTH:4,COUNT:5,KEY:Je,SELECTED:7,count:8,PARENT_IDX:\"parent_idx\",IDX_POINTER:\"idx_pointer\",FILTER_COUNT:\"filter_count\",NEXT_FILTER_IDX:\"next_filter_idx\"};var{DEPTH:It,IS_LEAF:Pt}=B;var ce=r=>{var e,t;if(((e=globalThis.document)==null?void 0:e.cookie)!==void 0)return(t=globalThis.document.cookie.split(\"; \").find(n=>n.startsWith(`${r}=`)))==null?void 0:t.split(\"=\")[1]};function G({from:r,to:e},t=0,n=Number.MAX_SAFE_INTEGER){if(r===0&&e===0)return{from:r,to:e};if(t===0)return n<r?{from:0,to:0}:{from:r,to:Math.min(e,n)};if(r===0)return{from:r,to:Math.min(e+t,n)};{let s=r-t<0,o=n-(e+t)<0;return s&&o?{from:0,to:n}:s?{from:0,to:e+t}:o?{from:Math.max(0,r-t),to:n}:{from:r-t,to:e+t}}}var je=(r,{from:e,to:t})=>r>=e&&r<t;var I=class r{constructor(e,t){this.from=e,this.to=t}isWithin(e){return je(e,this)}overlap(e,t){return e>=this.to||t<this.from?[0,0]:[Math.max(e,this.from),Math.min(t,this.to)]}copy(){return new r(this.from,this.to)}};var pe=r=>r.type===\"connection-status\",de=r=>r.type===\"connection-metrics\";var ge=r=>\"viewport\"in r;var Ye=[\"error\",\"warn\",\"info\",\"debug\"],Qe=r=>typeof r==\"string\"&&Ye.includes(r),Xe=\"error\",P=()=>{},Ze=\"error\",{loggingLevel:L=Ze}=et(),b=r=>{let e=L===\"debug\",t=e||L===\"info\",n=t||L===\"warn\",s=n||L===\"error\",o=t?p=>console.info(`[${r}] ${p}`):P,i=n?p=>console.warn(`[${r}] ${p}`):P,u=e?p=>console.debug(`[${r}] ${p}`):P;return{errorEnabled:s,error:s?p=>console.error(`[${r}] ${p}`):P}};function et(){return typeof loggingSettings<\"u\"?loggingSettings:{loggingLevel:tt()}}function tt(){let r=ce(\"vuu-logging-level\");return Qe(r)?r:Xe}var{debug:nt,debugEnabled:st}=b(\"range-monitor\"),k=class{constructor(e){this.source=e;this.range={from:0,to:0};this.timestamp=0}isSet(){return this.timestamp!==0}set({from:e,to:t}){let{timestamp:n}=this;if(this.range.from=e,this.range.to=t,this.timestamp=performance.now(),n)st&&nt(`<${this.source}> [${e}-${t}], ${(this.timestamp-n).toFixed(0)} ms elapsed`);else return 0}};var rt=[],x=class{constructor(e){this.keys=new Map;this.nextKeyValue=0;this.range=e,this.init(e)}next(e=rt){return e.length>0?e.shift():this.nextKeyValue++}init({from:e,to:t}){this.keys.clear(),this.nextKeyValue=0;for(let n=e;n<t;n++){let s=this.next();this.keys.set(n,s)}return!0}reset(e){let{from:t,to:n}=e,s=n-t,o=this.range.to-this.range.from;if(this.range=e,o>s)return this.init(e);let i=[];this.keys.forEach((u,l)=>{(l<t||l>=n)&&(i.push(u),this.keys.delete(l))});for(let u=t;u<n;u++)if(!this.keys.has(u)){let l=this.next(i);this.keys.set(u,l)}return!1}keyFor(e){let t=this.keys.get(e);if(t===void 0)throw console.log(`key not found\n keys: ${this.toDebugString()}\n `),Error(`KeySet, no key found for rowIndex ${e}`);return t}toDebugString(){return`${this.keys.size} keys\n${Array.from(this.keys.entries()).sort(([e],[t])=>e-t).map(([e,t])=>`${e}=>${t}`).join(\",\")}]\n`}};var ot=[\"VIEW_PORT_MENUS_SELECT_RPC\",\"VIEW_PORT_MENU_TABLE_RPC\",\"VIEW_PORT_MENU_ROW_RPC\",\"VIEW_PORT_MENU_CELL_RPC\",\"VP_EDIT_CELL_RPC\",\"VP_EDIT_ROW_RPC\",\"VP_EDIT_ADD_ROW_RPC\",\"VP_EDIT_DELETE_CELL_RPC\",\"VP_EDIT_DELETE_ROW_RPC\",\"VP_EDIT_SUBMIT_FORM_RPC\"],he=r=>ot.includes(r.type);var{SELECTED:Bt}=B,E={False:0,True:1,First:2,Last:4};var it=(r,e)=>e>=r[0]&&e<=r[1],at=E.True+E.First+E.Last,ut=E.True+E.First,lt=E.True+E.Last,H=(r,e)=>{for(let t of r)if(typeof t==\"number\"){if(t===e)return at}else if(it(t,e))return e===t[0]?ut:e===t[1]?lt:E.True;return E.False};var fe=r=>{if(r.every(t=>typeof t==\"number\"))return r;let e=[];for(let t of r)if(typeof t==\"number\")e.push(t);else for(let n=t[0];n<=t[1];n++)e.push(n);return e};var me=r=>r.type===\"VIEW_PORT_MENU_RESP\"&&r.action!==null&&O(r.action.table),O=r=>r!==null&&typeof r==\"object\"&&\"table\"in r&&\"module\"in r?r.table.startsWith(\"session\"):!1;var Ce=r=>r.type===\"VIEW_PORT_RPC_CALL\",A=({requestId:r,...e})=>[r,e],Re=r=>{let e=r.at(0);if(e.updateType===\"SIZE\"){if(r.length===1)return r;e=r.at(1)}let t=r.at(-1);return[e,t]},Se=r=>{let e={};for(let t of r)(e[t.viewPortId]||(e[t.viewPortId]=[])).push(t);return e},z=({columns:r,dataTypes:e,key:t,table:n})=>({table:n,columns:r.map((s,o)=>({name:s,serverDataType:e[o]})),key:t});var Te=\"CHANGE_VP_SUCCESS\";var be=\"CLOSE_TREE_NODE\",we=\"CLOSE_TREE_SUCCESS\";var Ee=\"CREATE_VP\",Ve=\"DISABLE_VP\",ve=\"DISABLE_VP_SUCCESS\";var Me=\"ENABLE_VP\",ye=\"ENABLE_VP_SUCCESS\";var K=\"GET_VP_VISUAL_LINKS\",_e=\"GET_VIEW_PORT_MENUS\";var De=\"HB\",Ie=\"HB_RESP\",Pe=\"LOGIN\",Le=\"OPEN_TREE_NODE\",ke=\"OPEN_TREE_SUCCESS\";var xe=\"REMOVE_VP\";var Oe=\"SET_SELECTION_SUCCESS\";var We=r=>{switch(r){case\"TypeAheadRpcHandler\":return\"TYPEAHEAD\";default:return\"SIMUL\"}};var Ne=[],C=b(\"array-backed-moving-window\");function ct(r,e){if(!e||e.data.length!==r.data.length||e.sel!==r.sel)return!1;for(let t=0;t<e.data.length;t++)if(e.data[t]!==r.data[t])return!1;return!0}var h,W=class{constructor({from:e,to:t},{from:n,to:s},o){ae(this,h,void 0);this.setRowCount=e=>{var t;if((t=C.info)==null||t.call(C,`setRowCount ${e}`),e<this.internalData.length&&(this.internalData.length=e),e<this.rowCount){this.rowsWithinRange=0;let n=Math.min(e,this.clientRange.to);for(let s=this.clientRange.from;s<n;s++){let o=s-m(this,h).from;this.internalData[o]!==void 0&&(this.rowsWithinRange+=1)}}this.rowCount=e};this.bufferBreakout=(e,t)=>{let n=this.bufferSize*.25;return m(this,h).to-t<n?!0:m(this,h).from>0&&e-m(this,h).from<n};this.bufferSize=o,this.clientRange=new I(e,t),ue(this,h,new I(n,s)),this.internalData=new Array(o),this.rowsWithinRange=0,this.rowCount=0}get range(){return m(this,h)}get hasAllRowsWithinRange(){return this.rowsWithinRange===this.clientRange.to-this.clientRange.from||this.rowCount>0&&this.clientRange.from+this.rowsWithinRange===this.rowCount}outOfRange(e,t){let{from:n,to:s}=this.range;if(t<n||e>=s)return!0}setAtIndex(e){let{rowIndex:t}=e,n=t-m(this,h).from;if(ct(e,this.internalData[n]))return!1;let s=this.isWithinClientRange(t);return(s||this.isWithinRange(t))&&(!this.internalData[n]&&s&&(this.rowsWithinRange+=1),this.internalData[n]=e),s}getAtIndex(e){return m(this,h).isWithin(e)&&this.internalData[e-m(this,h).from]!=null?this.internalData[e-m(this,h).from]:void 0}isWithinRange(e){return m(this,h).isWithin(e)}isWithinClientRange(e){return this.clientRange.isWithin(e)}setClientRange(e,t){var p;(p=C.debug)==null||p.call(C,`setClientRange ${e} - ${t}`);let n=this.clientRange.from,s=Math.min(this.clientRange.to,this.rowCount);if(e===n&&t===s)return[!1,Ne];let o=this.clientRange.copy();this.clientRange.from=e,this.clientRange.to=t,this.rowsWithinRange=0;for(let a=e;a<t;a++){let c=a-m(this,h).from;this.internalData[c]&&(this.rowsWithinRange+=1)}let i=Ne,u=m(this,h).from;if(this.hasAllRowsWithinRange)if(t>o.to){let a=Math.max(e,o.to);i=this.internalData.slice(a-u,t-u)}else{let a=Math.min(o.from,t);i=this.internalData.slice(e-u,a-u)}return[this.bufferBreakout(e,t),i]}setRange(e,t){var n,s;if(e!==m(this,h).from||t!==m(this,h).to){(n=C.debug)==null||n.call(C,`setRange ${e} - ${t}`);let[o,i]=m(this,h).overlap(e,t),u=new Array(t-e);this.rowsWithinRange=0;for(let l=o;l<i;l++){let p=this.getAtIndex(l);if(p){let a=l-e;u[a]=p,this.isWithinClientRange(l)&&(this.rowsWithinRange+=1)}}this.internalData=u,m(this,h).from=e,m(this,h).to=t}else(s=C.debug)==null||s.call(C,`setRange ${e} - ${t} IGNORED because not changed`)}get data(){return this.internalData}getData(){var u;let{from:e,to:t}=m(this,h),{from:n,to:s}=this.clientRange,o=Math.max(0,n-e),i=Math.min(t-e,t,s-e,(u=this.rowCount)!=null?u:t);return this.internalData.slice(o,i)}clear(){var e;(e=C.debug)==null||e.call(C,\"clear\"),this.internalData.length=0,this.rowsWithinRange=0,this.setRowCount(0)}getCurrentDataRange(){let e=this.internalData,t=e.length,[n]=this.internalData,s=this.internalData[t-1];if(n&&s)return[n.rowIndex,s.rowIndex];for(let o=0;o<t;o++)if(e[o]!==void 0){n=e[o];break}for(let o=t-1;o>=0;o--)if(e[o]!==void 0){s=e[o];break}return n&&s?[n.rowIndex,s.rowIndex]:[-1,-1]}};h=new WeakMap;var{debug:f,debugEnabled:N,error:pt,info:d,infoEnabled:dt,warn:M}=b(\"viewport\"),gt=({rowKey:r,updateType:e})=>e===\"U\"&&!r.startsWith(\"$root\"),U=[void 0,void 0],ht={count:0,mode:void 0,size:0,ts:0},q=class{constructor({aggregations:e,bufferSize:t=50,columns:n,filter:s,groupBy:o=[],table:i,range:u,sort:l,title:p,viewport:a,visualLink:c},g){this.batchMode=!0;this.hasUpdates=!1;this.pendingUpdates=[];this.pendingOperations=new Map;this.pendingRangeRequests=[];this.rowCountChanged=!1;this.selectedRows=[];this.useBatchMode=!0;this.lastUpdateStatus=ht;this.updateThrottleTimer=void 0;this.rangeMonitor=new k(\"ViewPort\");this.disabled=!1;this.isTree=!1;this.status=\"\";this.suspended=!1;this.suspendTimer=null;this.setLastSizeOnlyUpdateSize=e=>{this.lastUpdateStatus.size=e};this.setLastUpdate=e=>{let{ts:t,mode:n}=this.lastUpdateStatus,s=0;if(n===e){let o=Date.now();this.lastUpdateStatus.count+=1,this.lastUpdateStatus.ts=o,s=t===0?0:o-t}else this.lastUpdateStatus.count=1,this.lastUpdateStatus.ts=0,s=0;return this.lastUpdateStatus.mode=e,s};this.rangeRequestAlreadyPending=e=>{let{bufferSize:t}=this,n=t*.25,{from:s}=e;for(let{from:o,to:i}of this.pendingRangeRequests)if(s>=o&&s<i){if(e.to+n<=i)return!0;s=i}return!1};this.sendThrottledSizeMessage=()=>{this.updateThrottleTimer=void 0,this.lastUpdateStatus.count=3,this.postMessageToClient({clientViewportId:this.clientViewportId,mode:\"size-only\",size:this.lastUpdateStatus.size,type:\"viewport-update\"})};this.shouldThrottleMessage=e=>{let t=this.setLastUpdate(e);return e===\"size-only\"&&t>0&&t<500&&this.lastUpdateStatus.count>3};this.throttleMessage=e=>this.shouldThrottleMessage(e)?(d==null||d(\"throttling updates setTimeout to 2000\"),this.updateThrottleTimer===void 0&&(this.updateThrottleTimer=setTimeout(this.sendThrottledSizeMessage,2e3)),!0):(this.updateThrottleTimer!==void 0&&(clearTimeout(this.updateThrottleTimer),this.updateThrottleTimer=void 0),!1);this.getNewRowCount=()=>{if(this.rowCountChanged&&this.dataWindow)return this.rowCountChanged=!1,this.dataWindow.rowCount};this.aggregations=e,this.bufferSize=t,this.clientRange=u,this.clientViewportId=a,this.columns=n,this.filter=s,this.groupBy=o,this.keys=new x(u),this.pendingLinkedParent=c,this.table=i,this.sort=l,this.title=p,dt&&(d==null||d(`constructor #${a} ${i.table} bufferSize=${t}`)),this.dataWindow=new W(this.clientRange,u,this.bufferSize),this.postMessageToClient=g}get hasUpdatesToProcess(){return this.suspended?!1:this.rowCountChanged||this.hasUpdates}get size(){var e;return(e=this.dataWindow.rowCount)!=null?e:0}subscribe(){let{filter:e}=this.filter;return this.status=this.status===\"subscribed\"?\"resubscribing\":\"subscribing\",{type:Ee,table:this.table,range:G(this.clientRange,this.bufferSize),aggregations:this.aggregations,columns:this.columns,sort:this.sort,groupBy:this.groupBy,filterSpec:{filter:e}}}handleSubscribed({viewPortId:e,aggregations:t,columns:n,filterSpec:s,range:o,sort:i,groupBy:u,table:l},p){this.serverViewportId=e,this.status=\"subscribed\",this.aggregations=t,this.columns=n,this.groupBy=u,this.isTree=u&&u.length>0,this.dataWindow.setRange(o.from,o.to);let a=l===p.table.table?p:{...p,table:{...p.table,session:l}};return{aggregations:t,type:\"subscribed\",clientViewportId:this.clientViewportId,columns:n,filter:s,groupBy:u,range:o,sort:i,tableSchema:a}}awaitOperation(e,t){this.pendingOperations.set(e,t)}completeOperation(e,...t){var u;let{clientViewportId:n,pendingOperations:s}=this,o=s.get(e);if(!o){pt(`no matching operation found to complete for requestId ${e}`);return}let{type:i}=o;if(d==null||d(`completeOperation ${i}`),s.delete(e),i===\"CHANGE_VP_RANGE\"){let[l,p]=t;(u=this.dataWindow)==null||u.setRange(l,p);for(let a=this.pendingRangeRequests.length-1;a>=0;a--){let c=this.pendingRangeRequests[a];if(c.requestId===e){c.acked=!0;break}else M==null||M(\"range requests sent faster than they are being ACKed\")}}else if(i===\"config\"){let{aggregations:l,columns:p,filter:a,groupBy:c,sort:g}=o.data;return this.aggregations=l,this.columns=p,this.filter=a,this.groupBy=c,this.sort=g,c.length>0?this.isTree=!0:this.isTree&&(this.isTree=!1),f==null||f(`config change confirmed, isTree : ${this.isTree}`),{clientViewportId:n,type:i,config:o.data}}else{if(i===\"groupBy\")return this.isTree=o.data.length>0,this.groupBy=o.data,f==null||f(`groupBy change confirmed, isTree : ${this.isTree}`),{clientViewportId:n,type:i,groupBy:o.data};if(i===\"columns\")return this.columns=o.data,{clientViewportId:n,type:i,columns:o.data};if(i===\"filter\")return this.filter=o.data,{clientViewportId:n,type:i,filter:o.data};if(i===\"aggregate\")return this.aggregations=o.data,{clientViewportId:n,type:\"aggregate\",aggregations:this.aggregations};if(i===\"sort\")return this.sort=o.data,{clientViewportId:n,type:i,sort:this.sort};if(i!==\"selection\"){if(i===\"disable\")return this.disabled=!0,{type:\"disabled\",clientViewportId:n};if(i===\"enable\")return this.disabled=!1,{type:\"enabled\",clientViewportId:n};if(i===\"CREATE_VISUAL_LINK\"){let[l,p,a]=t;return this.linkedParent={colName:l,parentViewportId:p,parentColName:a},this.pendingLinkedParent=void 0,{type:\"vuu-link-created\",clientViewportId:n,colName:l,parentViewportId:p,parentColName:a}}else if(i===\"REMOVE_VISUAL_LINK\")return this.linkedParent=void 0,{type:\"vuu-link-removed\",clientViewportId:n}}}}rangeRequest(e,t){N&&this.rangeMonitor.set(t);let n=\"CHANGE_VP_RANGE\";if(this.dataWindow){let[s,o]=this.dataWindow.setClientRange(t.from,t.to),i,u=this.dataWindow.rowCount||void 0,l=s&&!this.rangeRequestAlreadyPending(t)?{type:n,viewPortId:this.serverViewportId,...G(t,this.bufferSize,u)}:null;if(l){N&&(f==null||f(`create CHANGE_VP_RANGE: [${l.from} - ${l.to}]`)),this.awaitOperation(e,{type:n});let a=this.pendingRangeRequests.at(-1);if(a)if(a.acked)console.warn(\"Range Request before previous request is filled\");else{let{from:c,to:g}=a;this.dataWindow.outOfRange(c,g)?i={clientViewportId:this.clientViewportId,type:\"debounce-begin\"}:M==null||M(\"Range Request before previous request is acked\")}this.pendingRangeRequests.push({...l,requestId:e}),this.useBatchMode&&(this.batchMode=!0)}else o.length>0&&(this.batchMode=!1);this.keys.reset(this.dataWindow.clientRange);let p=this.isTree?j:J;return o.length?[l,o.map(a=>p(a,this.keys,this.selectedRows))]:i?[l,void 0,i]:[l]}else return[null]}setLinks(e){return this.links=e,[{type:\"vuu-links\",links:e,clientViewportId:this.clientViewportId},this.pendingLinkedParent]}setMenu(e){return{type:\"vuu-menu\",menu:e,clientViewportId:this.clientViewportId}}openTreeNode(e,t){return this.useBatchMode&&(this.batchMode=!0),{type:Le,vpId:this.serverViewportId,treeKey:t.key}}closeTreeNode(e,t){return this.useBatchMode&&(this.batchMode=!0),{type:be,vpId:this.serverViewportId,treeKey:t.key}}createLink(e,t,n,s){let o={type:\"CREATE_VISUAL_LINK\",parentVpId:n,childVpId:this.serverViewportId,parentColumnName:s,childColumnName:t};return this.awaitOperation(e,o),this.useBatchMode&&(this.batchMode=!0),o}removeLink(e){let t={type:\"REMOVE_VISUAL_LINK\",childVpId:this.serverViewportId};return this.awaitOperation(e,t),t}suspend(){this.suspended=!0,d==null||d(\"suspend\")}resume(){return this.suspended=!1,N&&(f==null||f(`resume: ${this.currentData()}`)),[this.size,this.currentData()]}currentData(){let e=[];if(this.dataWindow){let t=this.dataWindow.getData(),{keys:n}=this,s=this.isTree?j:J;for(let o of t)o&&e.push(s(o,n,this.selectedRows))}return e}enable(e){return this.awaitOperation(e,{type:\"enable\"}),d==null||d(`enable: ${this.serverViewportId}`),{type:Me,viewPortId:this.serverViewportId}}disable(e){return this.awaitOperation(e,{type:\"disable\"}),d==null||d(`disable: ${this.serverViewportId}`),this.suspended=!1,{type:Ve,viewPortId:this.serverViewportId}}columnRequest(e,t){return this.awaitOperation(e,{type:\"columns\",data:t}),f==null||f(`columnRequest: ${t}`),this.createRequest({columns:t})}setConfig(e,t){var o;this.awaitOperation(e,{type:\"config\",data:t});let{filter:n,...s}=t;return this.useBatchMode&&(this.batchMode=!0),N?f==null||f(`setConfig ${JSON.stringify(t)}`):d==null||d(\"setConfig\"),!this.isTree&&t.groupBy.length>0&&((o=this.dataWindow)==null||o.clear()),this.createRequest({...s,filterSpec:typeof(n==null?void 0:n.filter)==\"string\"?{filter:n.filter}:{filter:\"\"}},!0)}aggregateRequest(e,t){return this.awaitOperation(e,{type:\"aggregate\",data:t}),d==null||d(`aggregateRequest: ${t}`),this.createRequest({aggregations:t})}sortRequest(e,t){return this.awaitOperation(e,{type:\"sort\",data:t}),d==null||d(`sortRequest: ${JSON.stringify(t.sortDefs)}`),this.createRequest({sort:t})}selectRequest(e,t){return this.selectedRows=t,this.awaitOperation(e,{type:\"selection\",data:t}),d==null||d(`selectRequest: ${t}`),{type:\"SET_SELECTION\",vpId:this.serverViewportId,selection:fe(t)}}removePendingRangeRequest(e,t){for(let n=this.pendingRangeRequests.length-1;n>=0;n--){let{from:s,to:o}=this.pendingRangeRequests[n],i=!0;if(e>=s&&e<o||t>s&&t<o){i||console.warn(\"removePendingRangeRequest TABLE_ROWS are not for latest request\"),this.pendingRangeRequests.splice(n,1);break}else i=!1}}updateRows(e){var s,o,i;let[t,n]=Re(e);if(t&&n&&this.removePendingRangeRequest(t.rowIndex,n.rowIndex),e.length===1)if(t.vpSize===0&&this.disabled){f==null||f(`ignore a SIZE=0 message on disabled viewport (${e.length} rows)`);return}else t.updateType===\"SIZE\"&&this.setLastSizeOnlyUpdateSize(t.vpSize);for(let u of e)this.isTree&&gt(u)||((u.updateType===\"SIZE\"||((s=this.dataWindow)==null?void 0:s.rowCount)!==u.vpSize)&&((o=this.dataWindow)==null||o.setRowCount(u.vpSize),this.rowCountChanged=!0),u.updateType===\"U\"&&(i=this.dataWindow)!=null&&i.setAtIndex(u)&&(this.hasUpdates=!0,this.batchMode||this.pendingUpdates.push(u)))}getClientRows(){let e,t=\"size-only\";if(!this.hasUpdates&&!this.rowCountChanged)return U;if(this.hasUpdates){let{keys:n,selectedRows:s}=this,o=this.isTree?j:J;if(this.updateThrottleTimer&&(self.clearTimeout(this.updateThrottleTimer),this.updateThrottleTimer=void 0),this.pendingUpdates.length>0){e=[],t=\"update\";for(let i of this.pendingUpdates)e.push(o(i,n,s));this.pendingUpdates.length=0}else{let i=this.dataWindow.getData();if(this.dataWindow.hasAllRowsWithinRange){e=[],t=\"batch\";for(let u of i)e.push(o(u,n,s));this.batchMode=!1}}this.hasUpdates=!1}return this.throttleMessage(t)?U:[e,t]}createRequest(e,t=!1){return t?{type:\"CHANGE_VP\",viewPortId:this.serverViewportId,...e}:{type:\"CHANGE_VP\",viewPortId:this.serverViewportId,aggregations:this.aggregations,columns:this.columns,sort:this.sort,groupBy:this.groupBy,filterSpec:{filter:this.filter.filter},...e}}},J=({rowIndex:r,rowKey:e,sel:t,data:n},s,o)=>[r,s.keyFor(r),!0,!1,0,0,e,t?H(o,r):0].concat(n),j=({rowIndex:r,rowKey:e,sel:t,data:n},s,o)=>{let[i,u,,l,,p,...a]=n;return[r,s.keyFor(r),l,u,i,p,e,t?H(o,r):0].concat(a)};var Ue=1;var{debug:V,debugEnabled:Y,error:y,info:T,infoEnabled:ft,warn:Q}=b(\"server-proxy\"),R=()=>`${Ue++}`,mt={},Ct=r=>r.disabled!==!0&&r.suspended!==!0,Rt={type:\"NO_ACTION\"},St=(r,e,t)=>r.map(n=>n.parentVpId===e?{...n,label:t}:n);function Tt(r,e){return r.map(t=>{let{parentVpId:n}=t,s=e.get(n);if(s)return{...t,parentClientVpId:s.clientViewportId,label:s.title};throw Error(\"addLabelsToLinks viewport not found\")})}var $=class{constructor(e,t){this.authToken=\"\";this.user=\"user\";this.pendingRequests=new Map;this.queuedRequests=[];this.cachedTableMetaRequests=new Map;this.cachedTableSchemas=new Map;this.connection=e,this.postMessageToClient=t,this.viewports=new Map,this.mapClientToServerViewport=new Map}async reconnect(){await this.login(this.authToken);let[e,t]=le(Array.from(this.viewports.values()),Ct);this.viewports.clear(),this.mapClientToServerViewport.clear();let n=s=>{s.forEach(o=>{let{clientViewportId:i}=o;this.viewports.set(i,o),this.sendMessageToServer(o.subscribe(),i)})};n(e),setTimeout(()=>{n(t)},2e3)}async login(e,t=\"user\"){if(e)return this.authToken=e,this.user=t,new Promise((n,s)=>{this.sendMessageToServer({type:Pe,token:this.authToken,user:t},\"\"),this.pendingLogin={resolve:n,reject:s}});this.authToken===\"\"&&y(\"login, cannot login until auth token has been obtained\")}subscribe(e){if(this.mapClientToServerViewport.has(e.viewport))y(`spurious subscribe call ${e.viewport}`);else{let t=this.getTableMeta(e.table),n=new q(e,this.postMessageToClient);this.viewports.set(e.viewport,n);let s=this.awaitResponseToMessage(n.subscribe(),e.viewport);Promise.all([s,t]).then(([i,u])=>{let{viewPortId:l}=i,{status:p}=n;e.viewport!==l&&(this.viewports.delete(e.viewport),this.viewports.set(l,n)),this.mapClientToServerViewport.set(e.viewport,l);let a=n.handleSubscribed(i,u);a&&(this.postMessageToClient(a),Y&&V(`post DataSourceSubscribedMessage to client: ${JSON.stringify(a)}`)),n.disabled&&this.disableViewport(n),this.queuedRequests.length>0&&this.processQueuedRequests(),p===\"subscribing\"&&!O(n.table)&&(this.sendMessageToServer({type:K,vpId:l}),this.sendMessageToServer({type:_e,vpId:l}),Array.from(this.viewports.entries()).filter(([c,{disabled:g}])=>c!==l&&!g).forEach(([c])=>{this.sendMessageToServer({type:K,vpId:c})}))})}}processQueuedRequests(){let e={};for(;this.queuedRequests.length;){let t=this.queuedRequests.pop();if(t){let{clientViewportId:n,message:s,requestId:o}=t;if(s.type===\"CHANGE_VP_RANGE\"){if(e.CHANGE_VP_RANGE)continue;e.CHANGE_VP_RANGE=!0;let i=this.mapClientToServerViewport.get(n);i&&this.sendMessageToServer({...s,viewPortId:i},o)}}}}unsubscribe(e){let t=this.mapClientToServerViewport.get(e);t?(T==null||T(`Unsubscribe Message (Client to Server):\n ${t}`),this.sendMessageToServer({type:xe,viewPortId:t})):y(`failed to unsubscribe client viewport ${e}, viewport not found`)}getViewportForClient(e,t=!0){let n=this.mapClientToServerViewport.get(e);if(n){let s=this.viewports.get(n);if(s)return s;if(t)throw Error(`Viewport not found for client viewport ${e}`);return null}else{if(this.viewports.has(e))return this.viewports.get(e);if(t)throw Error(`Viewport server id not found for client viewport ${e}`);return null}}setViewRange(e,t){let n=R(),[s,o,i]=e.rangeRequest(n,t.range);T==null||T(`setViewRange ${t.range.from} - ${t.range.to}`),s&&(this.sendIfReady(s,n,e.status===\"subscribed\")||this.queuedRequests.push({clientViewportId:t.viewport,message:s,requestId:n})),o?(T==null||T(`setViewRange ${o.length} rows returned from cache`),this.postMessageToClient({mode:\"batch\",type:\"viewport-update\",clientViewportId:e.clientViewportId,rows:o})):i&&this.postMessageToClient(i)}setConfig(e,t){let n=R(),s=e.setConfig(n,t.config);this.sendIfReady(s,n,e.status===\"subscribed\")}aggregate(e,t){let n=R(),s=e.aggregateRequest(n,t.aggregations);this.sendIfReady(s,n,e.status===\"subscribed\")}sort(e,t){let n=R(),s=e.sortRequest(n,t.sort);this.sendIfReady(s,n,e.status===\"subscribed\")}setColumns(e,t){let n=R(),{columns:s}=t,o=e.columnRequest(n,s);this.sendIfReady(o,n,e.status===\"subscribed\")}setTitle(e,t){e&&(e.title=t.title,this.updateTitleOnVisualLinks(e))}select(e,t){let n=R(),{selected:s}=t,o=e.selectRequest(n,s);this.sendIfReady(o,n,e.status===\"subscribed\")}disableViewport(e){let t=R(),n=e.disable(t);this.sendIfReady(n,t,e.status===\"subscribed\")}enableViewport(e){if(e.disabled){let t=R(),n=e.enable(t);this.sendIfReady(n,t,e.status===\"subscribed\")}}suspendViewport(e){e.suspend(),e.suspendTimer=setTimeout(()=>{T==null||T(\"suspendTimer expired, escalate suspend to disable\"),this.disableViewport(e)},3e3)}resumeViewport(e){e.suspendTimer&&(V==null||V(\"clear suspend timer\"),clearTimeout(e.suspendTimer),e.suspendTimer=null);let[t,n]=e.resume();V==null||V(`resumeViewport size ${t}, ${n.length} rows sent to client`),this.postMessageToClient({clientViewportId:e.clientViewportId,mode:\"batch\",rows:n,size:t,type:\"viewport-update\"})}openTreeNode(e,t){if(e.serverViewportId){let n=R();this.sendIfReady(e.openTreeNode(n,t),n,e.status===\"subscribed\")}}closeTreeNode(e,t){if(e.serverViewportId){let n=R();this.sendIfReady(e.closeTreeNode(n,t),n,e.status===\"subscribed\")}}createLink(e,t){let{parentClientVpId:n,parentColumnName:s,childColumnName:o}=t,i=R(),u=this.mapClientToServerViewport.get(n);if(u){let l=e.createLink(i,o,u,s);this.sendMessageToServer(l,i)}else y(\"ServerProxy unable to create link, viewport not found\")}removeLink(e){let t=R(),n=e.removeLink(t);this.sendMessageToServer(n,t)}updateTitleOnVisualLinks(e){var s;let{serverViewportId:t,title:n}=e;for(let o of this.viewports.values())if(o!==e&&o.links&&t&&n&&(s=o.links)!=null&&s.some(i=>i.parentVpId===t)){let[i]=o.setLinks(St(o.links,t,n));this.postMessageToClient(i)}}removeViewportFromVisualLinks(e){var t;for(let n of this.viewports.values())if((t=n.links)!=null&&t.some(({parentVpId:s})=>s===e)){let[s]=n.setLinks(n.links.filter(({parentVpId:o})=>o!==e));this.postMessageToClient(s)}}menuRpcCall(e){let t=this.getViewportForClient(e.vpId,!1);if(t!=null&&t.serverViewportId){let[n,s]=A(e);this.sendMessageToServer({...s,vpId:t.serverViewportId},n)}}viewportRpcCall(e){let t=this.getViewportForClient(e.vpId,!1);if(t!=null&&t.serverViewportId){let[n,s]=A(e);this.sendMessageToServer({...s,vpId:t.serverViewportId,namedParams:{}},n)}}rpcCall(e){let[t,n]=A(e),s=We(n.service);this.sendMessageToServer(n,t,{module:s})}handleMessageFromClient(e){var t;if(ge(e))if(e.type===\"disable\"){let n=this.getViewportForClient(e.viewport,!1);return n!==null?this.disableViewport(n):void 0}else{let n=this.getViewportForClient(e.viewport);switch(e.type){case\"setViewRange\":return this.setViewRange(n,e);case\"config\":return this.setConfig(n,e);case\"aggregate\":return this.aggregate(n,e);case\"sort\":return this.sort(n,e);case\"select\":return this.select(n,e);case\"suspend\":return this.suspendViewport(n);case\"resume\":return this.resumeViewport(n);case\"enable\":return this.enableViewport(n);case\"openTreeNode\":return this.openTreeNode(n,e);case\"closeTreeNode\":return this.closeTreeNode(n,e);case\"createLink\":return this.createLink(n,e);case\"removeLink\":return this.removeLink(n);case\"setColumns\":return this.setColumns(n,e);case\"setTitle\":return this.setTitle(n,e);default:}}else{if(Ce(e))return this.viewportRpcCall(e);if(he(e))return this.menuRpcCall(e);{let{type:n,requestId:s}=e;switch(n){case\"GET_TABLE_LIST\":{(t=this.tableList)!=null||(this.tableList=this.awaitResponseToMessage({type:n},s)),this.tableList.then(o=>{this.postMessageToClient({type:\"TABLE_LIST_RESP\",tables:o.tables,requestId:s})});return}case\"GET_TABLE_META\":{this.getTableMeta(e.table,s).then(o=>{o&&this.postMessageToClient({type:\"TABLE_META_RESP\",tableSchema:o,requestId:s})});return}case\"RPC_CALL\":return this.rpcCall(e);default:}}}y(`Vuu ServerProxy Unexpected message from client ${JSON.stringify(e)}`)}getTableMeta(e,t=R()){if(O(e))return Promise.resolve(void 0);let n=`${e.module}:${e.table}`,s=this.cachedTableMetaRequests.get(n);return s||(s=this.awaitResponseToMessage({type:\"GET_TABLE_META\",table:e},t),this.cachedTableMetaRequests.set(n,s)),s==null?void 0:s.then(o=>this.cacheTableMeta(o))}awaitResponseToMessage(e,t=R()){return new Promise((n,s)=>{this.sendMessageToServer(e,t),this.pendingRequests.set(t,{reject:s,resolve:n})})}sendIfReady(e,t,n=!0){return n&&this.sendMessageToServer(e,t),n}sendMessageToServer(e,t=`${Ue++}`,n=mt){let{module:s=\"CORE\"}=n;this.authToken&&this.connection.send({requestId:t,sessionId:this.sessionId,token:this.authToken,user:this.user,module:s,body:e})}handleMessageFromServer(e){var u;let{body:t,requestId:n,sessionId:s}=e,o=this.pendingRequests.get(n);if(o){let{resolve:a}=o;this.pendingRequests.delete(n),a(t);return}let{viewports:i}=this;switch(t.type){case De:this.sendMessageToServer({type:Ie,ts:+new Date},\"NA\");break;case\"LOGIN_SUCCESS\":if(s)this.sessionId=s,(u=this.pendingLogin)==null||u.resolve(s),this.pendingLogin=void 0;else throw Error(\"LOGIN_SUCCESS did not provide sessionId\");break;case\"REMOVE_VP_SUCCESS\":{let a=i.get(t.viewPortId);a&&(this.mapClientToServerViewport.delete(a.clientViewportId),i.delete(t.viewPortId),this.removeViewportFromVisualLinks(t.viewPortId))}break;case Oe:{let a=this.viewports.get(t.vpId);a&&a.completeOperation(n)}break;case Te:case ve:if(i.has(t.viewPortId)){let a=this.viewports.get(t.viewPortId);if(a){let c=a.completeOperation(n);c!==void 0&&(this.postMessageToClient(c),Y&&V(`postMessageToClient ${JSON.stringify(c)}`))}}break;case ye:{let a=this.viewports.get(t.viewPortId);if(a){let c=a.completeOperation(n);if(c){this.postMessageToClient(c);let[g,S]=a.resume();this.postMessageToClient({clientViewportId:a.clientViewportId,mode:\"batch\",rows:S,size:g,type:\"viewport-update\"})}}}break;case\"TABLE_ROW\":{let a=Se(t.rows);for(let[c,g]of Object.entries(a)){let S=i.get(c);S?S.updateRows(g):Q==null||Q(`TABLE_ROW message received for non registered viewport ${c}`)}this.processUpdates()}break;case\"CHANGE_VP_RANGE_SUCCESS\":{let a=this.viewports.get(t.viewPortId);if(a){let{from:c,to:g}=t;a.completeOperation(n,c,g)}}break;case ke:case we:break;case\"CREATE_VISUAL_LINK_SUCCESS\":{let a=this.viewports.get(t.childVpId),c=this.viewports.get(t.parentVpId);if(a&&c){let{childColumnName:g,parentColumnName:S}=t,D=a.completeOperation(n,g,c.clientViewportId,S);D&&this.postMessageToClient(D)}}break;case\"REMOVE_VISUAL_LINK_SUCCESS\":{let a=this.viewports.get(t.childVpId);if(a){let c=a.completeOperation(n);c&&this.postMessageToClient(c)}}break;case\"VP_VISUAL_LINKS_RESP\":{let a=this.getActiveLinks(t.links),c=this.viewports.get(t.vpId);if(a.length&&c){let g=Tt(a,this.viewports),[S,D]=c.setLinks(g);if(this.postMessageToClient(S),D){let{link:se,parentClientVpId:ze}=D,re=R(),oe=this.mapClientToServerViewport.get(ze);if(oe){let Ke=c.createLink(re,se.fromColumn,oe,se.toColumn);this.sendMessageToServer(Ke,re)}}}}break;case\"VIEW_PORT_MENUS_RESP\":if(t.menu.name){let a=this.viewports.get(t.vpId);if(a){let c=a.setMenu(t.menu);this.postMessageToClient(c)}}break;case\"VP_EDIT_RPC_RESPONSE\":this.postMessageToClient({action:t.action,requestId:n,rpcName:t.rpcName,type:\"VP_EDIT_RPC_RESPONSE\"});break;case\"VP_EDIT_RPC_REJECT\":this.viewports.get(t.vpId)&&this.postMessageToClient({requestId:n,type:\"VP_EDIT_RPC_REJECT\",error:t.error});break;case\"VIEW_PORT_MENU_REJ\":{console.log(\"send menu error back to client\");let{error:a,rpcName:c,vpId:g}=t,S=this.viewports.get(g);S&&this.postMessageToClient({clientViewportId:S.clientViewportId,error:a,rpcName:c,type:\"VIEW_PORT_MENU_REJ\",requestId:n});break}case\"VIEW_PORT_MENU_RESP\":if(me(t)){let{action:a,rpcName:c}=t;this.awaitResponseToMessage({type:\"GET_TABLE_META\",table:a.table}).then(g=>{let S=z(g);this.postMessageToClient({rpcName:c,type:\"VIEW_PORT_MENU_RESP\",action:{...a,tableSchema:S},tableAlreadyOpen:this.isTableOpen(a.table),requestId:n})})}else{let{action:a}=t;this.postMessageToClient({type:\"VIEW_PORT_MENU_RESP\",action:a||Rt,tableAlreadyOpen:a!==null&&this.isTableOpen(a.table),requestId:n})}break;case\"RPC_RESP\":{let{method:a,result:c}=t;this.postMessageToClient({type:\"RPC_RESP\",method:a,result:c,requestId:n})}break;case\"VIEW_PORT_RPC_REPONSE\":{let{method:a,action:c}=t;this.postMessageToClient({type:\"VIEW_PORT_RPC_RESPONSE\",rpcName:a,action:c,requestId:n})}break;case\"ERROR\":y(t.msg);break;default:ft&&T(`handleMessageFromServer ${t.type}.`)}}cacheTableMeta(e){let{module:t,table:n}=e.table,s=`${t}:${n}`,o=this.cachedTableSchemas.get(s);return o||(o=z(e),this.cachedTableSchemas.set(s,o)),o}isTableOpen(e){if(e){let t=e.table;for(let n of this.viewports.values())if(!n.suspended&&n.table.table===t)return!0}}getActiveLinks(e){return e.filter(t=>{let n=this.viewports.get(t.parentVpId);return n&&!n.suspended})}processUpdates(){this.viewports.forEach(e=>{var t;if(e.hasUpdatesToProcess){let n=e.getClientRows();if(n!==U){let[s,o]=n,i=e.getNewRowCount();(i!==void 0||s&&s.length>0)&&(Y&&V(`postMessageToClient #${e.clientViewportId} viewport-update ${o}, ${(t=s==null?void 0:s.length)!=null?t:\"no\"} rows, size ${i}`),o&&this.postMessageToClient({clientViewportId:e.clientViewportId,mode:o,rows:s,size:i,type:\"viewport-update\"}))}}})}};var{debug:ln,debugEnabled:cn,error:qe,info:w,infoEnabled:bt,warn:_}=b(\"websocket-connection\"),Be={},Z=Symbol(\"setWebsocket\"),F=Symbol(\"connectionCallback\");async function Ge(r,e,t,n=10,s=5){return Be[r]={status:\"connecting\",connect:{allowed:s,remaining:s},reconnect:{allowed:n,remaining:n}},He(r,e,t)}async function X(r){throw Error(\"connection broken\")}async function He(r,e,t,n){let{status:s,connect:o,reconnect:i}=Be[r],u=s===\"connecting\"?o:i;try{t({type:\"connection-status\",status:\"connecting\"});let l=typeof n<\"u\",p=await Et(r,e);console.info(\"%c⚡ %cconnected\",\"font-size: 24px;color: green;font-weight: bold;\",\"color:green; font-size: 14px;\"),n!==void 0&&n[Z](p);let a=n!=null?n:new ee(p,r,e,t),c=l?\"reconnected\":\"connection-open-awaiting-session\";return t({type:\"connection-status\",status:c}),a.status=c,u.remaining=u.allowed,a}catch{let p=--u.remaining>0;if(t({type:\"connection-status\",status:\"disconnected\",reason:\"failed to connect\",retry:p}),p)return wt(r,e,t,n,2e3);throw t({type:\"connection-status\",status:\"failed\",reason:\"unable to connect\",retry:p}),Error(\"Failed to establish connection\")}}var wt=(r,e,t,n,s)=>new Promise(o=>{setTimeout(()=>{o(He(r,e,t,n))},s)}),Et=(r,e)=>new Promise((t,n)=>{bt&&e!==void 0&&w(`WebSocket Protocol ${e==null?void 0:e.toString()}`);let s=new WebSocket(r,e);s.onopen=()=>t(s),s.onerror=o=>n(o)}),$e=()=>{_==null||_(\"Connection cannot be closed, socket not yet opened\")},Fe=r=>{_==null||_(`Message cannot be sent, socket closed ${r.body.type}`)},Vt=r=>{try{return JSON.parse(r)}catch{throw Error(`Error parsing JSON response from server ${r}`)}},ee=class{constructor(e,t,n,s){this.close=$e;this.requiresLogin=!0;this.send=Fe;this.status=\"ready\";this.messagesCount=0;this.connectionMetricsInterval=null;this.handleWebsocketMessage=e=>{let t=Vt(e.data);this.messagesCount+=1,this[F](t)};this.url=t,this.protocol=n,this[F]=s,this[Z](e)}reconnect(){X(this)}[(F,Z)](e){let t=this[F];e.onmessage=o=>{this.status=\"connected\",e.onmessage=this.handleWebsocketMessage,this.handleWebsocketMessage(o)},this.connectionMetricsInterval=setInterval(()=>{t({type:\"connection-metrics\",messagesLength:this.messagesCount}),this.messagesCount=0},2e3),e.onerror=()=>{qe(\"⚡ connection error\"),t({type:\"connection-status\",status:\"disconnected\",reason:\"error\"}),this.connectionMetricsInterval&&(clearInterval(this.connectionMetricsInterval),this.connectionMetricsInterval=null),this.status===\"connection-open-awaiting-session\"?qe(\"Websocket connection lost before Vuu session established, check websocket configuration\"):this.status!==\"closed\"&&(X(this),this.send=s)},e.onclose=()=>{w==null||w(\"⚡ connection close\"),t({type:\"connection-status\",status:\"disconnected\",reason:\"close\"}),this.connectionMetricsInterval&&(clearInterval(this.connectionMetricsInterval),this.connectionMetricsInterval=null),this.status!==\"closed\"&&(X(this),this.send=s)};let n=o=>{e.send(JSON.stringify(o))},s=o=>{w==null||w(`TODO queue message until websocket reconnected ${o.body.type}`)};this.send=n,this.close=()=>{this.status=\"closed\",e.close(),this.close=$e,this.send=Fe,w==null||w(\"close websocket\")}}};var v,{info:te,infoEnabled:ne}=b(\"worker\");async function vt(r,e,t,n,s,o,i){let u=await Ge(r,e,l=>{de(l)?postMessage({type:\"connection-metrics\",messages:l}):pe(l)?(s(l),l.status===\"reconnected\"&&v.reconnect()):v.handleMessageFromServer(l)},o,i);v=new $(u,l=>Mt(l)),u.requiresLogin&&await v.login(t,n)}function Mt(r){postMessage(r)}var yt=async({data:r})=>{switch(r.type){case\"connect\":try{await vt(r.url,r.protocol,r.token,r.username,postMessage,r.retryLimitDisconnect,r.retryLimitStartup),postMessage({type:\"connected\"})}catch(e){postMessage({type:\"connection-failed\",reason:String(e)})}break;case\"subscribe\":ne&&te(`client subscribe: ${JSON.stringify(r)}`),v.subscribe(r);break;case\"unsubscribe\":ne&&te(`client unsubscribe: ${JSON.stringify(r)}`),v.unsubscribe(r.viewport);break;default:ne&&te(`client message: ${JSON.stringify(r)}`),v.handleMessageFromClient(r)}};self.addEventListener(\"message\",yt);postMessage({type:\"ready\"});\n\n";
@@ -1,6 +1,5 @@
1
1
  import { TableSchema, VuuUIMessageOut, WithRequestId } from "@vuu-ui/vuu-data-types";
2
2
  import { ClientToServerMenuRPC, ClientToServerViewportRpcCall, VuuRow, VuuRpcRequest, VuuTable, VuuTableMeta } from "@vuu-ui/vuu-protocol-types";
3
- export declare const isVuuMenuRpcRequest: (message: VuuUIMessageOut | VuuRpcRequest | ClientToServerMenuRPC) => message is ClientToServerMenuRPC;
4
3
  export declare const isVuuRpcRequest: (message: VuuUIMessageOut | VuuRpcRequest | ClientToServerMenuRPC | ClientToServerViewportRpcCall) => message is ClientToServerViewportRpcCall;
5
4
  export declare const stripRequestId: <T>({ requestId, ...rest }: WithRequestId<T>) => [string, T];
6
5
  export declare const getFirstAndLastRows: (rows: VuuRow[]) => [VuuRow, VuuRow] | [VuuRow];
@@ -56,7 +56,7 @@ export declare class VuuDataSource extends EventEmitter<DataSourceEvents> implem
56
56
  set visualLink(visualLink: LinkDescriptorWithLabel | undefined);
57
57
  private setConfigPending;
58
58
  rpcCall<T extends RpcResponse = RpcResponse>(rpcRequest: Omit<ClientToServerViewportRpcCall, "vpId">): Promise<T | undefined>;
59
- menuRpcCall(rpcRequest: Omit<ClientToServerMenuRPC, "vpId"> | ClientToServerEditRpc): Promise<MenuRpcResponse | undefined>;
59
+ menuRpcCall(rpcRequest: Omit<ClientToServerMenuRPC, "vpId"> | ClientToServerEditRpc): Promise<MenuRpcResponse<import("@vuu-ui/vuu-data-types").MenuRpcAction> | undefined>;
60
60
  applyEdit(row: DataSourceRow, columnName: string, value: VuuRowDataItemType): Promise<string | true>;
61
61
  insertRow(key: string, data: VuuDataRowDto): Promise<string | true>;
62
62
  deleteRow(rowKey: string): Promise<string | true>;