@vuu-ui/vuu-data-remote 0.0.26

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.
Files changed (55) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +19 -0
  3. package/cjs/authenticate.js +28 -0
  4. package/cjs/authenticate.js.map +1 -0
  5. package/cjs/connection-manager.js +228 -0
  6. package/cjs/connection-manager.js.map +1 -0
  7. package/cjs/constants.js +50 -0
  8. package/cjs/constants.js.map +1 -0
  9. package/cjs/data-source.js +58 -0
  10. package/cjs/data-source.js.map +1 -0
  11. package/cjs/index.js +32 -0
  12. package/cjs/index.js.map +1 -0
  13. package/cjs/inlined-worker.js +14 -0
  14. package/cjs/inlined-worker.js.map +1 -0
  15. package/cjs/message-utils.js +63 -0
  16. package/cjs/message-utils.js.map +1 -0
  17. package/cjs/server-proxy/messages.js +6 -0
  18. package/cjs/server-proxy/messages.js.map +1 -0
  19. package/cjs/vuu-data-source.js +574 -0
  20. package/cjs/vuu-data-source.js.map +1 -0
  21. package/esm/authenticate.js +26 -0
  22. package/esm/authenticate.js.map +1 -0
  23. package/esm/connection-manager.js +223 -0
  24. package/esm/connection-manager.js.map +1 -0
  25. package/esm/constants.js +47 -0
  26. package/esm/constants.js.map +1 -0
  27. package/esm/data-source.js +51 -0
  28. package/esm/data-source.js.map +1 -0
  29. package/esm/index.js +7 -0
  30. package/esm/index.js.map +1 -0
  31. package/esm/inlined-worker.js +12 -0
  32. package/esm/inlined-worker.js.map +1 -0
  33. package/esm/message-utils.js +56 -0
  34. package/esm/message-utils.js.map +1 -0
  35. package/esm/server-proxy/messages.js +4 -0
  36. package/esm/server-proxy/messages.js.map +1 -0
  37. package/esm/vuu-data-source.js +572 -0
  38. package/esm/vuu-data-source.js.map +1 -0
  39. package/package.json +33 -0
  40. package/types/authenticate.d.ts +1 -0
  41. package/types/connection-manager.d.ts +52 -0
  42. package/types/connectionTypes.d.ts +5 -0
  43. package/types/constants.d.ts +41 -0
  44. package/types/data-source.d.ts +8 -0
  45. package/types/index.d.ts +7 -0
  46. package/types/inlined-worker.d.ts +1 -0
  47. package/types/message-utils.d.ts +14 -0
  48. package/types/server-proxy/array-backed-moving-window.d.ts +28 -0
  49. package/types/server-proxy/messages.d.ts +38 -0
  50. package/types/server-proxy/rpc-services.d.ts +2 -0
  51. package/types/server-proxy/server-proxy.d.ts +62 -0
  52. package/types/server-proxy/viewport.d.ts +141 -0
  53. package/types/vuu-data-source.d.ts +63 -0
  54. package/types/websocket-connection.d.ts +24 -0
  55. package/types/worker.d.ts +1 -0
package/cjs/index.js ADDED
@@ -0,0 +1,32 @@
1
+ 'use strict';
2
+
3
+ var authenticate = require('./authenticate.js');
4
+ var connectionManager = require('./connection-manager.js');
5
+ var constants = require('./constants.js');
6
+ var dataSource = require('./data-source.js');
7
+ var messageUtils = require('./message-utils.js');
8
+ var vuuDataSource = require('./vuu-data-source.js');
9
+
10
+
11
+
12
+ exports.authenticate = authenticate.authenticate;
13
+ exports.ConnectionManager = connectionManager.ConnectionManager;
14
+ exports.connectToServer = connectionManager.connectToServer;
15
+ exports.getServerAPI = connectionManager.getServerAPI;
16
+ exports.makeRpcCall = connectionManager.makeRpcCall;
17
+ exports.connectionId = constants.connectionId;
18
+ exports.msgType = constants.msgType;
19
+ exports.isDataSourceConfigMessage = dataSource.isDataSourceConfigMessage;
20
+ exports.isSessionTable = dataSource.isSessionTable;
21
+ exports.isSessionTableActionMessage = dataSource.isSessionTableActionMessage;
22
+ exports.isSizeOnly = dataSource.isSizeOnly;
23
+ exports.shouldMessageBeRoutedToDataSource = dataSource.shouldMessageBeRoutedToDataSource;
24
+ exports.toDataSourceConfig = dataSource.toDataSourceConfig;
25
+ exports.createSchemaFromTableMetadata = messageUtils.createSchemaFromTableMetadata;
26
+ exports.getFirstAndLastRows = messageUtils.getFirstAndLastRows;
27
+ exports.groupRowsByViewport = messageUtils.groupRowsByViewport;
28
+ exports.isVuuMenuRpcRequest = messageUtils.isVuuMenuRpcRequest;
29
+ exports.isVuuRpcRequest = messageUtils.isVuuRpcRequest;
30
+ exports.stripRequestId = messageUtils.stripRequestId;
31
+ exports.VuuDataSource = vuuDataSource.VuuDataSource;
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ const workerSourceCode = `
4
+ var 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
5
+ keys: \${this.toDebugString()}
6
+ \`),Error(\`KeySet, no key found for rowIndex \${e}\`);return t}toDebugString(){return\`\${this.keys.size} keys
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"});
10
+
11
+ `;
12
+
13
+ exports.workerSourceCode = workerSourceCode;
14
+ //# sourceMappingURL=inlined-worker.js.map
@@ -0,0 +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;;;;"}
@@ -0,0 +1,63 @@
1
+ 'use strict';
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
+ const isVuuRpcRequest = (message) => message["type"] === "VIEW_PORT_RPC_CALL";
17
+ const stripRequestId = ({
18
+ requestId,
19
+ ...rest
20
+ }) => [requestId, rest];
21
+ const getFirstAndLastRows = (rows) => {
22
+ let firstRow = rows.at(0);
23
+ if (firstRow.updateType === "SIZE") {
24
+ if (rows.length === 1) {
25
+ return rows;
26
+ } else {
27
+ firstRow = rows.at(1);
28
+ }
29
+ }
30
+ const lastRow = rows.at(-1);
31
+ return [firstRow, lastRow];
32
+ };
33
+ const groupRowsByViewport = (rows) => {
34
+ const result = {};
35
+ for (const row of rows) {
36
+ const rowsForViewport = result[row.viewPortId] || (result[row.viewPortId] = []);
37
+ rowsForViewport.push(row);
38
+ }
39
+ return result;
40
+ };
41
+ const createSchemaFromTableMetadata = ({
42
+ columns,
43
+ dataTypes,
44
+ key,
45
+ table
46
+ }) => {
47
+ return {
48
+ table,
49
+ columns: columns.map((col, idx) => ({
50
+ name: col,
51
+ serverDataType: dataTypes[idx]
52
+ })),
53
+ key
54
+ };
55
+ };
56
+
57
+ exports.createSchemaFromTableMetadata = createSchemaFromTableMetadata;
58
+ exports.getFirstAndLastRows = getFirstAndLastRows;
59
+ exports.groupRowsByViewport = groupRowsByViewport;
60
+ exports.isVuuMenuRpcRequest = isVuuMenuRpcRequest;
61
+ exports.isVuuRpcRequest = isVuuRpcRequest;
62
+ exports.stripRequestId = stripRequestId;
63
+ //# sourceMappingURL=message-utils.js.map
@@ -0,0 +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;;;;;;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ const GET_TABLE_META = "GET_TABLE_META";
4
+
5
+ exports.GET_TABLE_META = GET_TABLE_META;
6
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sources":["../../src/server-proxy/messages.ts"],"sourcesContent":["export const CHANGE_VP_SUCCESS = \"CHANGE_VP_SUCCESS\";\nexport const CHANGE_VP_RANGE_SUCCESS = \"CHANGE_VP_RANGE_SUCCESS\";\nexport const CLOSE_TREE_NODE = \"CLOSE_TREE_NODE\";\nexport const CLOSE_TREE_SUCCESS = \"CLOSE_TREE_SUCCESS\";\nexport const CLOSE_TREE_REJECT = \"CLOSE_TREE_REJECT\";\nexport const CREATE_VISUAL_LINK = \"CREATE_VISUAL_LINK\";\nexport const CREATE_VP = \"CREATE_VP\";\nexport const DISABLE_VP = \"DISABLE_VP\";\nexport const DISABLE_VP_SUCCESS = \"DISABLE_VP_SUCCESS\";\nexport const DISABLE_VP_REJECT = \"DISABLE_VP_REJECT\";\nexport const ENABLE_VP = \"ENABLE_VP\";\nexport const ENABLE_VP_SUCCESS = \"ENABLE_VP_SUCCESS\";\nexport const ENABLE_VP_REJECT = \"ENABLE_VP_REJECT\";\nexport const GET_TABLE_META = \"GET_TABLE_META\";\nexport const GET_VP_VISUAL_LINKS = \"GET_VP_VISUAL_LINKS\";\nexport const GET_VIEW_PORT_MENUS = \"GET_VIEW_PORT_MENUS\";\nexport const VIEW_PORT_MENUS_SELECT_RPC = \"VIEW_PORT_MENUS_SELECT_RPC\";\nexport const VIEW_PORT_MENU_CELL_RPC = \"VIEW_PORT_MENU_CELL_RPC\";\nexport const VIEW_PORT_MENU_TABLE_RPC = \"VIEW_PORT_MENU_TABLE_RPC\";\nexport const VIEW_PORT_MENU_ROW_RPC = \"VIEW_PORT_MENU_ROW_RPC\";\nexport const VIEW_PORT_MENU_RESP = \"VIEW_PORT_MENU_RESP\";\nexport const VIEW_PORT_MENU_REJ = \"VIEW_PORT_MENU_REJ\";\nexport const HB = \"HB\";\nexport const HB_RESP = \"HB_RESP\";\nexport const LOGIN = \"LOGIN\";\nexport const OPEN_TREE_NODE = \"OPEN_TREE_NODE\";\nexport const OPEN_TREE_SUCCESS = \"OPEN_TREE_SUCCESS\";\nexport const OPEN_TREE_REJECT = \"OPEN_TREE_REJECT\";\nexport const REMOVE_VP = \"REMOVE_VP\";\nexport const REMOVE_VP_REJECT = \"REMOVE_VP_REJECT\";\nexport const RPC_CALL = \"RPC_CALL\";\nexport const RPC_RESP = \"RPC_RESP\";\nexport const MENU_RPC_RESP = \"MENU_RPC_RESP\";\nexport const SET_SELECTION = \"SET_SELECTION\";\nexport const SET_SELECTION_SUCCESS = \"SET_SELECTION_SUCCESS\";\n\nexport const TABLE_ROW = \"TABLE_ROW\";\nexport const SIZE = \"SIZE\";\nexport const UPDATE = \"U\";\n"],"names":[],"mappings":";;AAaO,MAAM,cAAiB,GAAA;;;;"}