@vuu-ui/vuu-data-remote 0.8.94 → 0.8.95

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 (40) hide show
  1. package/cjs/ConnectionManager.js +0 -7
  2. package/cjs/ConnectionManager.js.map +1 -1
  3. package/cjs/WebSocketConnection.js.map +1 -1
  4. package/cjs/index.js +2 -0
  5. package/cjs/index.js.map +1 -1
  6. package/cjs/inlined-worker.js +15 -6
  7. package/cjs/inlined-worker.js.map +1 -1
  8. package/cjs/rest-data/moving-window.js +66 -0
  9. package/cjs/rest-data/moving-window.js.map +1 -0
  10. package/cjs/rest-data/rest-data-source.js +195 -0
  11. package/cjs/rest-data/rest-data-source.js.map +1 -0
  12. package/cjs/rest-data/rest-utils.js +52 -0
  13. package/cjs/rest-data/rest-utils.js.map +1 -0
  14. package/cjs/vuu-data-source.js +11 -1
  15. package/cjs/vuu-data-source.js.map +1 -1
  16. package/esm/ConnectionManager.js +0 -7
  17. package/esm/ConnectionManager.js.map +1 -1
  18. package/esm/WebSocketConnection.js.map +1 -1
  19. package/esm/index.js +1 -0
  20. package/esm/index.js.map +1 -1
  21. package/esm/inlined-worker.js +15 -6
  22. package/esm/inlined-worker.js.map +1 -1
  23. package/esm/rest-data/moving-window.js +64 -0
  24. package/esm/rest-data/moving-window.js.map +1 -0
  25. package/esm/rest-data/rest-data-source.js +193 -0
  26. package/esm/rest-data/rest-data-source.js.map +1 -0
  27. package/esm/rest-data/rest-utils.js +49 -0
  28. package/esm/rest-data/rest-utils.js.map +1 -0
  29. package/esm/vuu-data-source.js +12 -2
  30. package/esm/vuu-data-source.js.map +1 -1
  31. package/package.json +7 -7
  32. package/types/ConnectionManager.d.ts +0 -2
  33. package/types/WebSocketConnection.d.ts +7 -7
  34. package/types/index.d.ts +1 -0
  35. package/types/inlined-worker.d.ts +1 -1
  36. package/types/rest-data/moving-window.d.ts +14 -0
  37. package/types/rest-data/rest-data-source.d.ts +48 -0
  38. package/types/rest-data/rest-utils.d.ts +11 -0
  39. package/types/server-proxy/viewport.d.ts +1 -5
  40. package/types/vuu-data-source.d.ts +6 -4
@@ -0,0 +1,195 @@
1
+ 'use strict';
2
+
3
+ var vuuUtils = require('@vuu-ui/vuu-utils');
4
+ var restUtils = require('./rest-utils.js');
5
+ var movingWindow = require('./moving-window.js');
6
+
7
+ var __defProp = Object.defineProperty;
8
+ var __typeError = (msg) => {
9
+ throw TypeError(msg);
10
+ };
11
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
12
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
13
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
14
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
15
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
16
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
17
+ var _columnMap, _config, _data, _dataWindow, _range, _title;
18
+ const _RestDataSource = class _RestDataSource extends vuuUtils.EventEmitter {
19
+ constructor({
20
+ table,
21
+ title,
22
+ viewport = vuuUtils.uuid()
23
+ }) {
24
+ super();
25
+ __publicField(this, "clientCallback");
26
+ __privateAdd(this, _columnMap, vuuUtils.buildColumnMap([
27
+ "bbg",
28
+ "currency",
29
+ "description",
30
+ "exchange",
31
+ "ric",
32
+ "lotSize"
33
+ ]));
34
+ __privateAdd(this, _config, vuuUtils.vanillaConfig);
35
+ __privateAdd(this, _data, []);
36
+ __privateAdd(this, _dataWindow, new movingWindow.MovingWindow(vuuUtils.NULL_RANGE));
37
+ __privateAdd(this, _range, vuuUtils.NULL_RANGE);
38
+ __privateAdd(this, _title);
39
+ __publicField(this, "aggregations", []);
40
+ __publicField(this, "filter", { filter: "" });
41
+ __publicField(this, "groupBy", []);
42
+ __publicField(this, "selectedRowsCount", 0);
43
+ __publicField(this, "size", 0);
44
+ __publicField(this, "sort", { sortDefs: [] });
45
+ __publicField(this, "status", "initialising");
46
+ __publicField(this, "table");
47
+ __publicField(this, "viewport");
48
+ __publicField(this, "fetchData", async () => {
49
+ const { recordCount } = await this.fetchMetaData();
50
+ const pageCount = Math.ceil(recordCount / this.pageSize);
51
+ this.emit("page-count", pageCount);
52
+ const start = performance.now();
53
+ const allDone = () => {
54
+ const end = performance.now();
55
+ console.log(
56
+ `processing ${__privateGet(this, _dataWindow).data.length} rows took ${end - start}ms`
57
+ );
58
+ this.clientCallback?.({
59
+ clientViewportId: this.viewport,
60
+ mode: "update",
61
+ range: __privateGet(this, _range),
62
+ rows: __privateGet(this, _dataWindow).data,
63
+ size: recordCount,
64
+ type: "viewport-update"
65
+ });
66
+ };
67
+ console.log(`base ${_RestDataSource.api}`);
68
+ fetch(this.dataUrl, {
69
+ mode: "cors"
70
+ }).then(
71
+ restUtils.NDJsonReader(
72
+ __privateGet(this, _range).from,
73
+ (index, json) => __privateGet(this, _dataWindow).add(
74
+ restUtils.jsonToDataSourceRow(index, json, __privateGet(this, _columnMap))
75
+ ),
76
+ allDone
77
+ )
78
+ );
79
+ });
80
+ __publicField(this, "fetchMetaData", async () => new Promise((resolve, reject) => {
81
+ fetch(this.metaDataUrl, {
82
+ mode: "cors"
83
+ }).then((response) => {
84
+ if (response.ok) {
85
+ resolve(response.json());
86
+ } else {
87
+ reject(response.status);
88
+ }
89
+ });
90
+ }));
91
+ __publicField(this, "applyEdit", async () => {
92
+ return "Method not implemented";
93
+ });
94
+ __publicField(this, "applyConfig", () => vuuUtils.NO_CONFIG_CHANGES);
95
+ __publicField(this, "openTreeNode", () => {
96
+ throw new Error("openTreeNode, Method not implemented.");
97
+ });
98
+ __publicField(this, "closeTreeNode", () => {
99
+ throw new Error("closeTreeNode, Method not implemented.");
100
+ });
101
+ __publicField(this, "remoteProcedureCall", async () => "Method not implemented");
102
+ __publicField(this, "menuRpcCall", async () => {
103
+ return "Method not supported";
104
+ });
105
+ __publicField(this, "rpcCall", async () => {
106
+ return "Method not supported";
107
+ });
108
+ __publicField(this, "select", () => {
109
+ throw new Error("remoteProcedureCall, Method not implemented.");
110
+ });
111
+ if (!table) throw Error("RestDataSource constructor called without table");
112
+ this.table = table;
113
+ this.viewport = viewport;
114
+ __privateSet(this, _config, {
115
+ ...__privateGet(this, _config),
116
+ columns: [
117
+ "bbg",
118
+ "currency",
119
+ "description",
120
+ "exchange",
121
+ "ric",
122
+ "isin",
123
+ "lotSize"
124
+ ]
125
+ });
126
+ __privateSet(this, _title, title);
127
+ }
128
+ get pageSize() {
129
+ return __privateGet(this, _range).to - __privateGet(this, _range).from;
130
+ }
131
+ static get api() {
132
+ return this._api;
133
+ }
134
+ static set api(url) {
135
+ this._api = url;
136
+ }
137
+ get url() {
138
+ return `${_RestDataSource.api}/${this.table.table}`;
139
+ }
140
+ get dataUrl() {
141
+ const { from, to } = __privateGet(this, _range);
142
+ return `${this.url}?origin=${from}&limit=${to - from}`;
143
+ }
144
+ get metaDataUrl() {
145
+ return `${this.url}/summary`;
146
+ }
147
+ get title() {
148
+ return __privateGet(this, _title) ?? `${this.table.module} ${this.table.table}`;
149
+ }
150
+ set title(title) {
151
+ __privateSet(this, _title, title);
152
+ }
153
+ async subscribe({ range, ...props }, callback) {
154
+ if (range) {
155
+ this.range = range;
156
+ }
157
+ console.log(`subscribe ${JSON.stringify(props, null, 2)}`);
158
+ this.clientCallback = callback;
159
+ this.fetchData();
160
+ }
161
+ unsubscribe() {
162
+ console.log("unsubscribe");
163
+ }
164
+ get columns() {
165
+ return __privateGet(this, _config).columns;
166
+ }
167
+ get config() {
168
+ return __privateGet(this, _config);
169
+ }
170
+ get range() {
171
+ return __privateGet(this, _range);
172
+ }
173
+ set range(range) {
174
+ console.log(`set range ${JSON.stringify(range)}`);
175
+ if (range.from !== __privateGet(this, _range).from || range.to !== __privateGet(this, _range).to) {
176
+ __privateSet(this, _range, range);
177
+ __privateGet(this, _dataWindow).setRange(range);
178
+ this.fetchData();
179
+ }
180
+ }
181
+ sendRowsToClient() {
182
+ console.log(`send rows to client`);
183
+ }
184
+ };
185
+ _columnMap = new WeakMap();
186
+ _config = new WeakMap();
187
+ _data = new WeakMap();
188
+ _dataWindow = new WeakMap();
189
+ _range = new WeakMap();
190
+ _title = new WeakMap();
191
+ __publicField(_RestDataSource, "_api", "/api");
192
+ let RestDataSource = _RestDataSource;
193
+
194
+ exports.RestDataSource = RestDataSource;
195
+ //# sourceMappingURL=rest-data-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest-data-source.js","sources":["../../src/rest-data/rest-data-source.ts"],"sourcesContent":["import {\n DataSource,\n DataSourceConstructorProps,\n DataSourceEditHandler,\n DataSourceEvents,\n DataSourceFilter,\n DataSourceRow,\n DataSourceStatus,\n SubscribeCallback,\n SubscribeProps,\n WithFullConfig,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuAggregation,\n VuuTable,\n VuuGroupBy,\n VuuRange,\n VuuSort,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n ColumnMap,\n EventEmitter,\n NO_CONFIG_CHANGES,\n NULL_RANGE,\n buildColumnMap,\n uuid,\n vanillaConfig,\n} from \"@vuu-ui/vuu-utils\";\nimport { NDJsonReader, jsonToDataSourceRow } from \"./rest-utils\";\nimport { MovingWindow } from \"./moving-window\";\n\nexport type RestMetaData = {\n recordCount: number;\n};\n\nexport class RestDataSource\n extends EventEmitter<DataSourceEvents>\n implements DataSource\n{\n private static _api = \"/api\";\n\n private clientCallback: SubscribeCallback | undefined;\n #columnMap: ColumnMap = buildColumnMap([\n \"bbg\",\n \"currency\",\n \"description\",\n \"exchange\",\n \"ric\",\n \"lotSize\",\n ]);\n #config: WithFullConfig = vanillaConfig;\n #data: DataSourceRow[] = [];\n #dataWindow = new MovingWindow(NULL_RANGE);\n #range: VuuRange = NULL_RANGE;\n #title: string | undefined;\n\n aggregations: VuuAggregation[] = [];\n filter: DataSourceFilter = { filter: \"\" };\n groupBy: VuuGroupBy = [];\n selectedRowsCount = 0;\n size = 0;\n sort: VuuSort = { sortDefs: [] };\n status: DataSourceStatus = \"initialising\";\n table: VuuTable;\n\n viewport: string;\n\n constructor({\n table,\n title,\n viewport = uuid(),\n }: DataSourceConstructorProps & {\n url?: string;\n }) {\n super();\n\n if (!table) throw Error(\"RestDataSource constructor called without table\");\n\n this.table = table;\n this.viewport = viewport;\n\n this.#config = {\n ...this.#config,\n columns: [\n \"bbg\",\n \"currency\",\n \"description\",\n \"exchange\",\n \"ric\",\n \"isin\",\n \"lotSize\",\n ],\n };\n this.#title = title;\n }\n\n private get pageSize() {\n return this.#range.to - this.#range.from;\n }\n\n static get api() {\n return this._api;\n }\n\n static set api(url: string) {\n this._api = url;\n }\n\n get url() {\n return `${RestDataSource.api}/${this.table.table}`;\n }\n\n get dataUrl() {\n const { from, to } = this.#range;\n return `${this.url}?origin=${from}&limit=${to - from}`;\n }\n\n get metaDataUrl() {\n return `${this.url}/summary`;\n }\n\n get title() {\n return this.#title ?? `${this.table.module} ${this.table.table}`;\n }\n\n set title(title: string) {\n this.#title = title;\n }\n\n async subscribe(\n { range, ...props }: SubscribeProps,\n callback: SubscribeCallback,\n ) {\n if (range) {\n this.range = range;\n }\n\n console.log(`subscribe ${JSON.stringify(props, null, 2)}`);\n this.clientCallback = callback;\n\n this.fetchData();\n }\n\n unsubscribe() {\n console.log(\"unsubscribe\");\n }\n\n get columns() {\n return this.#config.columns;\n }\n\n get config() {\n return this.#config;\n }\n\n get range() {\n return this.#range;\n }\n\n set range(range: VuuRange) {\n console.log(`set range ${JSON.stringify(range)}`);\n if (range.from !== this.#range.from || range.to !== this.#range.to) {\n this.#range = range;\n this.#dataWindow.setRange(range);\n this.fetchData();\n }\n }\n\n private fetchData = async () => {\n const { recordCount } = await this.fetchMetaData();\n\n const pageCount = Math.ceil(recordCount / this.pageSize);\n this.emit(\"page-count\", pageCount);\n\n const start = performance.now();\n const allDone = () => {\n const end = performance.now();\n console.log(\n `processing ${this.#dataWindow.data.length} rows took ${end - start}ms`,\n );\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"update\",\n range: this.#range,\n rows: this.#dataWindow.data,\n size: recordCount,\n type: \"viewport-update\",\n });\n };\n\n console.log(`base ${RestDataSource.api}`);\n\n fetch(this.dataUrl, {\n mode: \"cors\",\n }).then(\n NDJsonReader(\n this.#range.from,\n (index, json) =>\n this.#dataWindow.add(\n jsonToDataSourceRow(index, json, this.#columnMap),\n ),\n allDone,\n ),\n );\n };\n\n private fetchMetaData = async () =>\n new Promise<RestMetaData>((resolve, reject) => {\n fetch(this.metaDataUrl, {\n mode: \"cors\",\n }).then((response) => {\n if (response.ok) {\n resolve(response.json());\n } else {\n reject(response.status);\n }\n });\n });\n\n private sendRowsToClient() {\n console.log(`send rows to client`);\n }\n\n applyEdit: DataSourceEditHandler = async () => {\n return \"Method not implemented\";\n };\n\n applyConfig = () => NO_CONFIG_CHANGES;\n\n openTreeNode = () => {\n throw new Error(\"openTreeNode, Method not implemented.\");\n };\n closeTreeNode = () => {\n throw new Error(\"closeTreeNode, Method not implemented.\");\n };\n\n remoteProcedureCall = async <T>() => \"Method not implemented\" as T;\n menuRpcCall = async () => {\n return \"Method not supported\";\n };\n rpcCall = async <T>() => {\n return \"Method not supported\" as T;\n };\n\n select = () => {\n throw new Error(\"remoteProcedureCall, Method not implemented.\");\n };\n}\n"],"names":["EventEmitter","uuid","buildColumnMap","vanillaConfig","MovingWindow","NULL_RANGE","NDJsonReader","jsonToDataSourceRow","NO_CONFIG_CHANGES"],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ 'use strict';
2
+
3
+ const NDJsonReader = (startIndex, jsonHandler, onEnd) => (response) => {
4
+ if (response.ok && response.body) {
5
+ const stream = response.body.getReader();
6
+ const decoder = new TextDecoder();
7
+ const matcher = /\r?\n/;
8
+ let buf = "";
9
+ let index = startIndex;
10
+ const loop = () => stream.read().then(({ done, value }) => {
11
+ if (done) {
12
+ if (buf.length > 0) jsonHandler(index, JSON.parse(buf));
13
+ onEnd();
14
+ } else {
15
+ const chunk = decoder.decode(value, {
16
+ stream: true
17
+ });
18
+ buf += chunk;
19
+ const jsonFragments = buf.split(matcher);
20
+ buf = jsonFragments.pop() ?? "";
21
+ for (const jsonFragment of jsonFragments) {
22
+ jsonHandler(index, JSON.parse(jsonFragment));
23
+ index += 1;
24
+ }
25
+ return loop();
26
+ }
27
+ });
28
+ return loop();
29
+ } else {
30
+ throw Error(`response invalid ${response.status} ${response.statusText}`);
31
+ }
32
+ };
33
+ const jsonToDataSourceRow = (rowIndex, json, columnMap) => {
34
+ const dataSourceRow = [
35
+ rowIndex,
36
+ rowIndex,
37
+ true,
38
+ false,
39
+ 0,
40
+ 0,
41
+ json.ric,
42
+ 0
43
+ ];
44
+ for (const [column, colIdx] of Object.entries(columnMap)) {
45
+ dataSourceRow[colIdx] = json[column];
46
+ }
47
+ return dataSourceRow;
48
+ };
49
+
50
+ exports.NDJsonReader = NDJsonReader;
51
+ exports.jsonToDataSourceRow = jsonToDataSourceRow;
52
+ //# sourceMappingURL=rest-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest-utils.js","sources":["../../src/rest-data/rest-utils.ts"],"sourcesContent":["import { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap } from \"@vuu-ui/vuu-utils\";\n\nexport type JsonPrimitive = string | number | boolean | null;\nexport type JsonArray = Json[];\nexport type JsonObject = { [key: string]: Json };\nexport type Json = JsonPrimitive | JsonArray | JsonObject;\nexport type JsonHandler = (rowIndex: number, json: JsonObject) => void;\n\nexport const NDJsonReader =\n (startIndex: number, jsonHandler: JsonHandler, onEnd: () => void) =>\n (response: Response) => {\n if (response.ok && response.body) {\n const stream = response.body.getReader();\n const decoder = new TextDecoder();\n const matcher = /\\r?\\n/;\n let buf = \"\";\n let index = startIndex;\n\n const loop: () => void = () =>\n stream.read().then(({ done, value }) => {\n if (done) {\n if (buf.length > 0) jsonHandler(index, JSON.parse(buf));\n onEnd();\n } else {\n const chunk = decoder.decode(value, {\n stream: true,\n });\n buf += chunk;\n\n const jsonFragments = buf.split(matcher);\n buf = jsonFragments.pop() ?? \"\";\n for (const jsonFragment of jsonFragments) {\n jsonHandler(index, JSON.parse(jsonFragment));\n index += 1;\n }\n return loop();\n }\n });\n return loop();\n } else {\n throw Error(`response invalid ${response.status} ${response.statusText}`);\n }\n };\n\nexport const jsonToDataSourceRow = (\n rowIndex: number,\n json: JsonObject,\n columnMap: ColumnMap,\n): DataSourceRow => {\n const dataSourceRow: DataSourceRow = [\n rowIndex,\n rowIndex,\n true,\n false,\n 0,\n 0,\n json.ric as string,\n 0,\n ];\n for (const [column, colIdx] of Object.entries(columnMap)) {\n dataSourceRow[colIdx] = json[column] as VuuRowDataItemType;\n }\n return dataSourceRow;\n};\n"],"names":[],"mappings":";;AAUO,MAAM,eACX,CAAC,UAAA,EAAoB,WAA0B,EAAA,KAAA,KAC/C,CAAC,QAAuB,KAAA;AACtB,EAAI,IAAA,QAAA,CAAS,EAAM,IAAA,QAAA,CAAS,IAAM,EAAA;AAChC,IAAM,MAAA,MAAA,GAAS,QAAS,CAAA,IAAA,CAAK,SAAU,EAAA,CAAA;AACvC,IAAM,MAAA,OAAA,GAAU,IAAI,WAAY,EAAA,CAAA;AAChC,IAAA,MAAM,OAAU,GAAA,OAAA,CAAA;AAChB,IAAA,IAAI,GAAM,GAAA,EAAA,CAAA;AACV,IAAA,IAAI,KAAQ,GAAA,UAAA,CAAA;AAEZ,IAAM,MAAA,IAAA,GAAmB,MACvB,MAAA,CAAO,IAAK,EAAA,CAAE,KAAK,CAAC,EAAE,IAAM,EAAA,KAAA,EAAY,KAAA;AACtC,MAAA,IAAI,IAAM,EAAA;AACR,QAAI,IAAA,GAAA,CAAI,SAAS,CAAG,EAAA,WAAA,CAAY,OAAO,IAAK,CAAA,KAAA,CAAM,GAAG,CAAC,CAAA,CAAA;AACtD,QAAM,KAAA,EAAA,CAAA;AAAA,OACD,MAAA;AACL,QAAM,MAAA,KAAA,GAAQ,OAAQ,CAAA,MAAA,CAAO,KAAO,EAAA;AAAA,UAClC,MAAQ,EAAA,IAAA;AAAA,SACT,CAAA,CAAA;AACD,QAAO,GAAA,IAAA,KAAA,CAAA;AAEP,QAAM,MAAA,aAAA,GAAgB,GAAI,CAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AACvC,QAAM,GAAA,GAAA,aAAA,CAAc,KAAS,IAAA,EAAA,CAAA;AAC7B,QAAA,KAAA,MAAW,gBAAgB,aAAe,EAAA;AACxC,UAAA,WAAA,CAAY,KAAO,EAAA,IAAA,CAAK,KAAM,CAAA,YAAY,CAAC,CAAA,CAAA;AAC3C,UAAS,KAAA,IAAA,CAAA,CAAA;AAAA,SACX;AACA,QAAA,OAAO,IAAK,EAAA,CAAA;AAAA,OACd;AAAA,KACD,CAAA,CAAA;AACH,IAAA,OAAO,IAAK,EAAA,CAAA;AAAA,GACP,MAAA;AACL,IAAA,MAAM,MAAM,CAAoB,iBAAA,EAAA,QAAA,CAAS,MAAM,CAAI,CAAA,EAAA,QAAA,CAAS,UAAU,CAAE,CAAA,CAAA,CAAA;AAAA,GAC1E;AACF,EAAA;AAEK,MAAM,mBAAsB,GAAA,CACjC,QACA,EAAA,IAAA,EACA,SACkB,KAAA;AAClB,EAAA,MAAM,aAA+B,GAAA;AAAA,IACnC,QAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,CAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAK,CAAA,GAAA;AAAA,IACL,CAAA;AAAA,GACF,CAAA;AACA,EAAA,KAAA,MAAW,CAAC,MAAQ,EAAA,MAAM,KAAK,MAAO,CAAA,OAAA,CAAQ,SAAS,CAAG,EAAA;AACxD,IAAc,aAAA,CAAA,MAAM,CAAI,GAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAAA,GACrC;AACA,EAAO,OAAA,aAAA,CAAA;AACT;;;;;"}
@@ -344,10 +344,11 @@ class VuuDataSource extends vuuUtils.EventEmitter {
344
344
  if (configChanges) {
345
345
  if (__privateGet(this, _config) && this.viewport) {
346
346
  if (config) {
347
+ const newConfig = vuuUtils.combineFilters(__privateGet(this, _config));
347
348
  this.server?.send({
348
349
  viewport: this.viewport,
349
350
  type: "config",
350
- config: __privateGet(this, _config)
351
+ config: newConfig
351
352
  });
352
353
  }
353
354
  }
@@ -436,6 +437,15 @@ class VuuDataSource extends vuuUtils.EventEmitter {
436
437
  }
437
438
  this.emit("config", __privateGet(this, _config));
438
439
  }
440
+ get baseFilter() {
441
+ return __privateGet(this, _config).baseFilterSpec;
442
+ }
443
+ set baseFilter(baseFilter) {
444
+ this.config = {
445
+ ...__privateGet(this, _config),
446
+ baseFilterSpec: baseFilter
447
+ };
448
+ }
439
449
  get filter() {
440
450
  return __privateGet(this, _config).filterSpec;
441
451
  }
@@ -1 +1 @@
1
- {"version":3,"file":"vuu-data-source.js","sources":["../src/vuu-data-source.ts"],"sourcesContent":["import {\n DataSource,\n DataSourceCallbackMessage,\n DataSourceConfig,\n DataSourceConstructorProps,\n DataSourceEvents,\n DataSourceFilter,\n DataSourceStatus,\n DataSourceVisualLinkCreatedMessage,\n OptimizeStrategy,\n Selection,\n ServerAPI,\n SubscribeCallback,\n SubscribeProps,\n TableSchema,\n WithFullConfig,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuRpcMenuRequest,\n VuuRpcViewportRequest,\n LinkDescriptorWithLabel,\n VuuAggregation,\n VuuDataRowDto,\n VuuGroupBy,\n VuuMenu,\n VuuRange,\n VuuRowDataItemType,\n VuuSort,\n VuuTable,\n VuuRpcResponse,\n VuuRpcRequest,\n VuuCreateVisualLink,\n} from \"@vuu-ui/vuu-protocol-types\";\n\nimport { parseFilter } from \"@vuu-ui/vuu-filter-parser\";\nimport {\n isConfigChanged,\n debounce,\n EventEmitter,\n isViewportMenusAction,\n isVisualLinksAction,\n itemsOrOrderChanged,\n logger,\n throttle,\n uuid,\n vanillaConfig,\n withConfigDefaults,\n DataSourceConfigChanges,\n selectionCount,\n vuuAddRowRequest,\n vuuDeleteRowRequest,\n vuuEditCellRequest,\n} from \"@vuu-ui/vuu-utils\";\nimport ConnectionManager from \"./ConnectionManager\";\nimport { isDataSourceConfigMessage } from \"./data-source\";\n\nimport { MenuRpcResponse } from \"@vuu-ui/vuu-data-types\";\n\ntype RangeRequest = (range: VuuRange) => void;\n\nconst { info } = logger(\"VuuDataSource\");\n\n/*-----------------------------------------------------------------\n A RemoteDataSource manages a single subscription via the ServerProxy\n ----------------------------------------------------------------*/\nexport class VuuDataSource\n extends EventEmitter<DataSourceEvents>\n implements DataSource\n{\n private bufferSize: number;\n private server: ServerAPI | null = null;\n private clientCallback: SubscribeCallback | undefined;\n private configChangePending: DataSourceConfig | undefined;\n private rangeRequest: RangeRequest;\n\n #config: WithFullConfig & { visualLink?: LinkDescriptorWithLabel } =\n vanillaConfig;\n #groupBy: VuuGroupBy = [];\n #pendingVisualLink?: LinkDescriptorWithLabel;\n #links: LinkDescriptorWithLabel[] | undefined;\n #menu: VuuMenu | undefined;\n #optimize: OptimizeStrategy = \"throttle\";\n #range: VuuRange = { from: 0, to: 0 };\n #selectedRowsCount = 0;\n #size = 0;\n #status: DataSourceStatus = \"initialising\";\n #tableSchema: TableSchema | undefined;\n\n #title: string | undefined;\n\n public table: VuuTable;\n public viewport: string | undefined;\n\n constructor({\n bufferSize = 100,\n aggregations,\n columns,\n filterSpec,\n groupBy,\n sort,\n table,\n title,\n viewport,\n visualLink,\n }: DataSourceConstructorProps) {\n super();\n\n if (!table)\n throw Error(\"RemoteDataSource constructor called without table\");\n\n this.bufferSize = bufferSize;\n this.table = table;\n this.viewport = viewport ?? \"\";\n\n this.#config = {\n ...this.#config,\n aggregations: aggregations || this.#config.aggregations,\n columns: columns || this.#config.columns,\n filterSpec: filterSpec || this.#config.filterSpec,\n groupBy: groupBy || this.#config.groupBy,\n sort: sort || this.#config.sort,\n };\n this.#pendingVisualLink = visualLink;\n\n this.#title = title;\n // this.rangeRequest = this.throttleRangeRequest;\n this.rangeRequest = this.rawRangeRequest;\n }\n\n async subscribe(\n {\n viewport = this.viewport || (this.viewport = uuid()),\n columns,\n aggregations,\n range,\n sort,\n groupBy,\n filterSpec,\n }: SubscribeProps,\n callback: SubscribeCallback,\n ) {\n if (this.#status === \"disabled\" || this.#status === \"disabling\") {\n this.enable(callback);\n return;\n }\n this.clientCallback = callback;\n if (aggregations || columns || filterSpec || groupBy || sort) {\n this.#config = {\n ...this.#config,\n aggregations: aggregations || this.#config.aggregations,\n columns: columns || this.#config.columns,\n filterSpec: filterSpec || this.#config.filterSpec,\n groupBy: groupBy || this.#config.groupBy,\n sort: sort || this.#config.sort,\n };\n }\n\n // store the range before we await the server. It's is possible the\n // range will be updated from the client before we have been able to\n // subscribe. This ensures we will subscribe with latest value.\n if (range) {\n this.#range = range;\n }\n\n if (\n this.#status !== \"initialising\" &&\n this.#status !== \"unsubscribed\"\n // We can subscribe to a disabled dataSource. No request will be\n // sent to server to create a new VP, just to enable the existing one.\n // The current subscribing client becomes the subscription owner\n ) {\n return;\n }\n\n this.#status = \"subscribing\";\n this.viewport = viewport;\n\n this.server = await ConnectionManager.serverAPI;\n\n const { bufferSize } = this;\n\n // TODO make this async and await response here\n this.server?.subscribe(\n {\n ...this.#config,\n bufferSize,\n viewport,\n table: this.table,\n range: this.#range,\n title: this.#title,\n },\n this.handleMessageFromServer,\n );\n }\n\n handleMessageFromServer = (message: DataSourceCallbackMessage) => {\n if (message.type === \"subscribed\") {\n this.#status = \"subscribed\";\n this.tableSchema = message.tableSchema;\n this.clientCallback?.(message);\n if (this.#pendingVisualLink) {\n this.visualLink = this.#pendingVisualLink;\n this.#pendingVisualLink = undefined;\n }\n this.emit(\"subscribed\", message);\n } else if (message.type === \"disabled\") {\n this.#status = \"disabled\";\n } else if (message.type === \"enabled\") {\n this.#status = \"enabled\";\n } else if (isDataSourceConfigMessage(message)) {\n // This is an ACK for a CHANGE_VP message. Nothing to do here. We need\n // to wait for data to be returned before we can consider the change\n // to be in effect.\n return;\n } else if (message.type === \"debounce-begin\") {\n this.optimize = \"debounce\";\n } else {\n if (\n message.type === \"viewport-update\" &&\n message.size !== undefined &&\n message.size !== this.#size\n ) {\n this.#size = message.size;\n this.emit(\"resize\", message.size);\n } else if (message.type === \"viewport-clear\") {\n this.#size = 0;\n this.emit(\"resize\", 0);\n }\n // This is used to remove any progress indication from the UI. We wait for actual data rather than\n // just the CHANGE_VP_SUCCESS ack as there is often a delay between receiving the ack and the data.\n // It may be a SIZE only message, eg in the case of removing a groupBy column from a multi-column\n // groupby, where no tree nodes are expanded.\n if (this.configChangePending) {\n this.setConfigPending();\n }\n\n if (isViewportMenusAction(message)) {\n this.#menu = message.menu;\n } else if (isVisualLinksAction(message)) {\n this.#links = message.links as LinkDescriptorWithLabel[];\n } else {\n this.clientCallback?.(message);\n }\n\n if (this.optimize === \"debounce\") {\n this.revertDebounce();\n }\n }\n };\n\n unsubscribe() {\n if (this.#status !== \"unsubscribed\") {\n info?.(`unsubscribe #${this.viewport}`);\n if (this.viewport) {\n this.server?.unsubscribe(this.viewport);\n this.emit(\"unsubscribed\", this.viewport);\n }\n this.server?.destroy(this.viewport);\n this.server = null;\n this.removeAllListeners();\n this.#status = \"unsubscribed\";\n this.viewport = undefined;\n this.range = { from: 0, to: 0 };\n }\n }\n\n suspend() {\n if (this.#status !== \"unsubscribed\") {\n info?.(`suspend #${this.viewport}, current status ${this.#status}`);\n if (this.viewport) {\n this.#status = \"suspended\";\n this.server?.send({\n type: \"suspend\",\n viewport: this.viewport,\n });\n this.emit(\"suspended\", this.viewport);\n }\n }\n }\n\n resume(callback?: SubscribeCallback) {\n const isDisabled = this.#status.startsWith(\"disabl\");\n const isSuspended = this.#status === \"suspended\";\n info?.(`resume #${this.viewport}, current status ${this.#status}`);\n if (callback) {\n this.clientCallback = callback;\n }\n if (this.viewport) {\n if (isDisabled) {\n this.enable();\n } else if (isSuspended) {\n this.server?.send({\n type: \"resume\",\n viewport: this.viewport,\n });\n this.#status = \"subscribed\";\n this.emit(\"resumed\", this.viewport);\n }\n }\n }\n\n disable() {\n info?.(`disable #${this.viewport}, current status ${this.#status}`);\n if (this.viewport) {\n this.#status = \"disabling\";\n this.server?.send({\n viewport: this.viewport,\n type: \"disable\",\n });\n this.emit(\"disabled\", this.viewport);\n }\n }\n\n enable(callback?: SubscribeCallback) {\n info?.(`enable #${this.viewport}, current status ${this.#status}`);\n if (\n this.viewport &&\n (this.#status === \"disabled\" || this.#status === \"disabling\")\n ) {\n this.#status = \"enabling\";\n if (callback) {\n this.clientCallback = callback;\n }\n this.server?.send({\n viewport: this.viewport,\n type: \"enable\",\n });\n this.emit(\"enabled\", this.viewport);\n }\n }\n\n select(selected: Selection) {\n //TODO this isn't always going to be correct - need to count\n // selection block items\n this.#selectedRowsCount = selectionCount(selected);\n if (this.viewport) {\n this.server?.send({\n viewport: this.viewport,\n type: \"select\",\n selected,\n });\n this.emit(\"row-selection\", selected, this.#selectedRowsCount);\n }\n }\n\n openTreeNode(key: string) {\n if (this.viewport) {\n this.server?.send({\n viewport: this.viewport,\n type: \"openTreeNode\",\n key,\n });\n }\n }\n\n closeTreeNode(key: string) {\n if (this.viewport) {\n this.server?.send({\n viewport: this.viewport,\n type: \"closeTreeNode\",\n key,\n });\n }\n }\n\n get tableSchema() {\n return this.#tableSchema;\n }\n\n set tableSchema(tableSchema: TableSchema | undefined) {\n this.#tableSchema = tableSchema;\n // TOSO emit an event\n }\n\n get links() {\n return this.#links;\n }\n\n get menu() {\n return this.#menu;\n }\n\n get status() {\n return this.#status;\n }\n\n get optimize() {\n return this.#optimize;\n }\n\n set optimize(optimize: OptimizeStrategy) {\n if (optimize !== this.#optimize) {\n this.#optimize = optimize;\n switch (optimize) {\n case \"none\":\n this.rangeRequest = this.rawRangeRequest;\n break;\n case \"debounce\":\n this.rangeRequest = this.debounceRangeRequest;\n break;\n case \"throttle\":\n this.rangeRequest = this.throttleRangeRequest;\n break;\n }\n this.emit(\"optimize\", optimize);\n }\n }\n\n private revertDebounce = debounce(() => {\n this.optimize = \"throttle\";\n }, 100);\n\n get selectedRowsCount() {\n return this.#selectedRowsCount;\n }\n\n get size() {\n return this.#size;\n }\n\n get range() {\n return this.#range;\n }\n\n set range(range: VuuRange) {\n if (range.from !== this.#range.from || range.to !== this.#range.to) {\n this.#range = range;\n this.rangeRequest(range);\n }\n }\n\n private rawRangeRequest: RangeRequest = (range) => {\n if (this.viewport && this.server) {\n this.server.send({\n viewport: this.viewport,\n type: \"setViewRange\",\n range,\n });\n }\n };\n\n private debounceRangeRequest: RangeRequest = debounce((range: VuuRange) => {\n if (this.viewport && this.server) {\n this.server.send({\n viewport: this.viewport,\n type: \"setViewRange\",\n range,\n });\n }\n }, 50);\n\n private throttleRangeRequest: RangeRequest = throttle((range: VuuRange) => {\n if (this.viewport && this.server) {\n this.server.send({\n viewport: this.viewport,\n type: \"setViewRange\",\n range,\n });\n }\n }, 80);\n\n get config() {\n return this.#config;\n }\n\n set config(config: DataSourceConfig) {\n const configChanges = this.applyConfig(config);\n if (configChanges) {\n if (this.#config && this.viewport) {\n if (config) {\n this.server?.send({\n viewport: this.viewport,\n type: \"config\",\n config: this.#config,\n });\n }\n }\n this.emit(\"config\", this.#config, undefined, configChanges);\n }\n }\n\n applyConfig(\n config: DataSourceConfig,\n preserveExistingConfigAttributes = false,\n ): DataSourceConfigChanges | undefined {\n const { noChanges, ...otherChanges } = isConfigChanged(\n this.#config,\n config,\n );\n if (noChanges !== true) {\n if (config) {\n const newConfig: DataSourceConfig =\n config?.filterSpec?.filter &&\n config?.filterSpec.filterStruct === undefined\n ? {\n ...config,\n filterSpec: {\n filter: config.filterSpec.filter,\n filterStruct: parseFilter(config.filterSpec.filter),\n },\n }\n : config;\n if (preserveExistingConfigAttributes) {\n this.#config = {\n ...this.#config,\n ...config,\n };\n } else {\n this.#config = withConfigDefaults(newConfig);\n }\n return otherChanges;\n }\n }\n }\n\n //TODO replace all these individual server calls with calls to setConfig\n get columns() {\n return this.#config.columns;\n }\n\n set columns(columns: string[]) {\n this.#config = {\n ...this.#config,\n columns,\n };\n if (this.viewport) {\n const message = {\n viewport: this.viewport,\n type: \"setColumns\",\n columns,\n } as const;\n if (this.server) {\n this.server.send(message);\n }\n }\n this.emit(\"config\", this.#config);\n }\n\n get aggregations() {\n return this.#config.aggregations;\n }\n\n set aggregations(aggregations: VuuAggregation[]) {\n this.#config = {\n ...this.#config,\n aggregations,\n };\n if (this.viewport) {\n this.server?.send({\n viewport: this.viewport,\n type: \"aggregate\",\n aggregations,\n });\n }\n this.emit(\"config\", this.#config);\n }\n\n get sort() {\n return this.#config.sort;\n }\n\n set sort(sort: VuuSort) {\n // TODO should we wait until server ACK before we assign #sort ?\n this.#config = {\n ...this.#config,\n sort,\n };\n if (this.viewport) {\n const message = {\n viewport: this.viewport,\n type: \"sort\",\n sort,\n } as const;\n this.server?.send(message);\n }\n this.emit(\"config\", this.#config);\n }\n\n get filter() {\n return this.#config.filterSpec;\n }\n\n set filter(filter: DataSourceFilter) {\n this.config = {\n ...this.#config,\n filterSpec: filter,\n };\n }\n\n get groupBy() {\n return this.#config.groupBy;\n }\n\n set groupBy(groupBy: VuuGroupBy) {\n if (itemsOrOrderChanged(this.groupBy, groupBy)) {\n const wasGrouped = this.groupBy.length > 0;\n\n this.config = {\n ...this.#config,\n groupBy,\n };\n\n if (!wasGrouped && groupBy.length > 0 && this.viewport) {\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"batch\",\n type: \"viewport-update\",\n size: 0,\n rows: [],\n });\n }\n this.setConfigPending({ groupBy });\n }\n }\n\n get title() {\n return this.#title ?? `${this.table.module} ${this.table.table}`;\n }\n\n set title(title: string) {\n this.#title = title;\n if (this.viewport && title) {\n // This message doesn't actually trigger a message to Vuu server\n // it will be used to recompute visual link labels\n this.server?.send({\n type: \"setTitle\",\n title,\n viewport: this.viewport,\n });\n }\n this.emit(\"title-changed\", this.viewport ?? \"'\", title);\n }\n\n get visualLink() {\n return this.#config.visualLink;\n }\n\n set visualLink(visualLink: LinkDescriptorWithLabel | undefined) {\n this.#config = {\n ...this.#config,\n visualLink,\n };\n\n if (visualLink) {\n const {\n parentClientVpId,\n link: { fromColumn, toColumn },\n } = visualLink;\n\n if (this.viewport) {\n this.server\n ?.rpcCall<DataSourceVisualLinkCreatedMessage>({\n childColumnName: fromColumn,\n childVpId: this.viewport,\n parentColumnName: toColumn,\n parentVpId: parentClientVpId,\n type: \"CREATE_VISUAL_LINK\",\n } as VuuCreateVisualLink)\n .then((response) => {\n this.emit(\"visual-link-created\", response);\n });\n }\n } else {\n if (this.viewport) {\n this.server\n ?.rpcCall({\n type: \"REMOVE_VISUAL_LINK\",\n childVpId: this.viewport,\n })\n .then(() => {\n this.emit(\"visual-link-removed\");\n });\n }\n }\n\n this.emit(\"config\", this.#config);\n }\n\n private setConfigPending(config?: DataSourceConfig) {\n const pendingConfig = this.configChangePending;\n this.configChangePending = config;\n\n if (config !== undefined) {\n this.emit(\"config\", config, false);\n } else {\n this.emit(\"config\", pendingConfig, true);\n }\n }\n\n async remoteProcedureCall<T extends VuuRpcResponse = VuuRpcResponse>() {\n return Promise.reject<T>();\n }\n\n /** @deprecated */\n async rpcCall<T extends VuuRpcResponse = VuuRpcResponse>(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\">,\n ) {\n if (this.viewport && this.server) {\n return this.server?.rpcCall<T>({\n ...rpcRequest,\n vpId: this.viewport,\n } as VuuRpcViewportRequest);\n } else {\n throw Error(`rpcCall server or viewport are undefined`);\n }\n }\n\n /** @deprecated */\n async menuRpcCall(rpcRequest: Omit<VuuRpcRequest, \"vpId\">) {\n if (this.viewport) {\n return this.server?.rpcCall<MenuRpcResponse>({\n ...rpcRequest,\n vpId: this.viewport,\n } as VuuRpcMenuRequest);\n }\n }\n\n applyEdit(rowKey: string, columnName: string, value: VuuRowDataItemType) {\n return this.menuRpcCall(vuuEditCellRequest(rowKey, columnName, value)).then(\n (response) => {\n if (response?.error) {\n return response.error;\n } else {\n return true;\n }\n },\n );\n }\n\n insertRow(rowKey: string, data: VuuDataRowDto) {\n return this.menuRpcCall(vuuAddRowRequest(rowKey, data)).then((response) => {\n if (response?.error) {\n return response.error;\n } else {\n return true;\n }\n });\n }\n deleteRow(rowKey: string) {\n return this.menuRpcCall(vuuDeleteRowRequest(rowKey)).then((response) => {\n if (response?.error) {\n return response.error;\n } else {\n return true;\n }\n });\n }\n}\n"],"names":["logger","EventEmitter","vanillaConfig","isDataSourceConfigMessage","isViewportMenusAction","isVisualLinksAction","debounce","throttle","uuid","selectionCount","isConfigChanged","parseFilter","withConfigDefaults","itemsOrOrderChanged","vuuEditCellRequest","vuuAddRowRequest","vuuDeleteRowRequest"],"mappings":"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"}
1
+ {"version":3,"file":"vuu-data-source.js","sources":["../src/vuu-data-source.ts"],"sourcesContent":["import {\n DataSource,\n DataSourceCallbackMessage,\n DataSourceConfig,\n DataSourceConstructorProps,\n DataSourceEvents,\n DataSourceFilter,\n DataSourceStatus,\n DataSourceVisualLinkCreatedMessage,\n OptimizeStrategy,\n Selection,\n ServerAPI,\n SubscribeCallback,\n SubscribeProps,\n TableSchema,\n WithBaseFilter,\n WithFullConfig,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n LinkDescriptorWithLabel,\n VuuAggregation,\n VuuCreateVisualLink,\n VuuDataRowDto,\n VuuGroupBy,\n VuuMenu,\n VuuRange,\n VuuRowDataItemType,\n VuuRpcMenuRequest,\n VuuRpcRequest,\n VuuRpcResponse,\n VuuRpcViewportRequest,\n VuuSort,\n VuuTable,\n} from \"@vuu-ui/vuu-protocol-types\";\n\nimport { parseFilter } from \"@vuu-ui/vuu-filter-parser\";\nimport {\n DataSourceConfigChanges,\n EventEmitter,\n combineFilters,\n debounce,\n isConfigChanged,\n isViewportMenusAction,\n isVisualLinksAction,\n itemsOrOrderChanged,\n logger,\n selectionCount,\n throttle,\n uuid,\n vanillaConfig,\n vuuAddRowRequest,\n vuuDeleteRowRequest,\n vuuEditCellRequest,\n withConfigDefaults,\n} from \"@vuu-ui/vuu-utils\";\nimport ConnectionManager from \"./ConnectionManager\";\nimport { isDataSourceConfigMessage } from \"./data-source\";\n\nimport { MenuRpcResponse } from \"@vuu-ui/vuu-data-types\";\n\ntype RangeRequest = (range: VuuRange) => void;\n\nconst { info } = logger(\"VuuDataSource\");\n\n/*-----------------------------------------------------------------\n A RemoteDataSource manages a single subscription via the ServerProxy\n ----------------------------------------------------------------*/\nexport class VuuDataSource\n extends EventEmitter<DataSourceEvents>\n implements DataSource\n{\n private bufferSize: number;\n private server: ServerAPI | null = null;\n private clientCallback: SubscribeCallback | undefined;\n private configChangePending: DataSourceConfig | undefined;\n private rangeRequest: RangeRequest;\n\n #config: WithFullConfig & { visualLink?: LinkDescriptorWithLabel } =\n vanillaConfig;\n #groupBy: VuuGroupBy = [];\n #pendingVisualLink?: LinkDescriptorWithLabel;\n #links: LinkDescriptorWithLabel[] | undefined;\n #menu: VuuMenu | undefined;\n #optimize: OptimizeStrategy = \"throttle\";\n #range: VuuRange = { from: 0, to: 0 };\n #selectedRowsCount = 0;\n #size = 0;\n #status: DataSourceStatus = \"initialising\";\n #tableSchema: TableSchema | undefined;\n\n #title: string | undefined;\n\n public table: VuuTable;\n public viewport: string | undefined;\n\n constructor({\n bufferSize = 100,\n aggregations,\n columns,\n filterSpec,\n groupBy,\n sort,\n table,\n title,\n viewport,\n visualLink,\n }: DataSourceConstructorProps) {\n super();\n\n if (!table)\n throw Error(\"RemoteDataSource constructor called without table\");\n\n this.bufferSize = bufferSize;\n this.table = table;\n this.viewport = viewport ?? \"\";\n\n this.#config = {\n ...this.#config,\n aggregations: aggregations || this.#config.aggregations,\n columns: columns || this.#config.columns,\n filterSpec: filterSpec || this.#config.filterSpec,\n groupBy: groupBy || this.#config.groupBy,\n sort: sort || this.#config.sort,\n };\n this.#pendingVisualLink = visualLink;\n\n this.#title = title;\n // this.rangeRequest = this.throttleRangeRequest;\n this.rangeRequest = this.rawRangeRequest;\n }\n\n async subscribe(\n {\n viewport = this.viewport || (this.viewport = uuid()),\n columns,\n aggregations,\n range,\n sort,\n groupBy,\n filterSpec,\n }: SubscribeProps,\n callback: SubscribeCallback,\n ) {\n if (this.#status === \"disabled\" || this.#status === \"disabling\") {\n this.enable(callback);\n return;\n }\n this.clientCallback = callback;\n if (aggregations || columns || filterSpec || groupBy || sort) {\n this.#config = {\n ...this.#config,\n aggregations: aggregations || this.#config.aggregations,\n columns: columns || this.#config.columns,\n filterSpec: filterSpec || this.#config.filterSpec,\n groupBy: groupBy || this.#config.groupBy,\n sort: sort || this.#config.sort,\n };\n }\n\n // store the range before we await the server. It's is possible the\n // range will be updated from the client before we have been able to\n // subscribe. This ensures we will subscribe with latest value.\n if (range) {\n this.#range = range;\n }\n\n if (\n this.#status !== \"initialising\" &&\n this.#status !== \"unsubscribed\"\n // We can subscribe to a disabled dataSource. No request will be\n // sent to server to create a new VP, just to enable the existing one.\n // The current subscribing client becomes the subscription owner\n ) {\n return;\n }\n\n this.#status = \"subscribing\";\n this.viewport = viewport;\n\n this.server = await ConnectionManager.serverAPI;\n\n const { bufferSize } = this;\n\n // TODO make this async and await response here\n this.server?.subscribe(\n {\n ...this.#config,\n bufferSize,\n viewport,\n table: this.table,\n range: this.#range,\n title: this.#title,\n },\n this.handleMessageFromServer,\n );\n }\n\n handleMessageFromServer = (message: DataSourceCallbackMessage) => {\n if (message.type === \"subscribed\") {\n this.#status = \"subscribed\";\n this.tableSchema = message.tableSchema;\n this.clientCallback?.(message);\n if (this.#pendingVisualLink) {\n this.visualLink = this.#pendingVisualLink;\n this.#pendingVisualLink = undefined;\n }\n this.emit(\"subscribed\", message);\n } else if (message.type === \"disabled\") {\n this.#status = \"disabled\";\n } else if (message.type === \"enabled\") {\n this.#status = \"enabled\";\n } else if (isDataSourceConfigMessage(message)) {\n // This is an ACK for a CHANGE_VP message. Nothing to do here. We need\n // to wait for data to be returned before we can consider the change\n // to be in effect.\n return;\n } else if (message.type === \"debounce-begin\") {\n this.optimize = \"debounce\";\n } else {\n if (\n message.type === \"viewport-update\" &&\n message.size !== undefined &&\n message.size !== this.#size\n ) {\n this.#size = message.size;\n this.emit(\"resize\", message.size);\n } else if (message.type === \"viewport-clear\") {\n this.#size = 0;\n this.emit(\"resize\", 0);\n }\n // This is used to remove any progress indication from the UI. We wait for actual data rather than\n // just the CHANGE_VP_SUCCESS ack as there is often a delay between receiving the ack and the data.\n // It may be a SIZE only message, eg in the case of removing a groupBy column from a multi-column\n // groupby, where no tree nodes are expanded.\n if (this.configChangePending) {\n this.setConfigPending();\n }\n\n if (isViewportMenusAction(message)) {\n this.#menu = message.menu;\n } else if (isVisualLinksAction(message)) {\n this.#links = message.links as LinkDescriptorWithLabel[];\n } else {\n this.clientCallback?.(message);\n }\n\n if (this.optimize === \"debounce\") {\n this.revertDebounce();\n }\n }\n };\n\n unsubscribe() {\n if (this.#status !== \"unsubscribed\") {\n info?.(`unsubscribe #${this.viewport}`);\n if (this.viewport) {\n this.server?.unsubscribe(this.viewport);\n this.emit(\"unsubscribed\", this.viewport);\n }\n this.server?.destroy(this.viewport);\n this.server = null;\n this.removeAllListeners();\n this.#status = \"unsubscribed\";\n this.viewport = undefined;\n this.range = { from: 0, to: 0 };\n }\n }\n\n suspend() {\n if (this.#status !== \"unsubscribed\") {\n info?.(`suspend #${this.viewport}, current status ${this.#status}`);\n if (this.viewport) {\n this.#status = \"suspended\";\n this.server?.send({\n type: \"suspend\",\n viewport: this.viewport,\n });\n this.emit(\"suspended\", this.viewport);\n }\n }\n }\n\n resume(callback?: SubscribeCallback) {\n const isDisabled = this.#status.startsWith(\"disabl\");\n const isSuspended = this.#status === \"suspended\";\n info?.(`resume #${this.viewport}, current status ${this.#status}`);\n if (callback) {\n this.clientCallback = callback;\n }\n if (this.viewport) {\n if (isDisabled) {\n this.enable();\n } else if (isSuspended) {\n this.server?.send({\n type: \"resume\",\n viewport: this.viewport,\n });\n this.#status = \"subscribed\";\n this.emit(\"resumed\", this.viewport);\n }\n }\n }\n\n disable() {\n info?.(`disable #${this.viewport}, current status ${this.#status}`);\n if (this.viewport) {\n this.#status = \"disabling\";\n this.server?.send({\n viewport: this.viewport,\n type: \"disable\",\n });\n this.emit(\"disabled\", this.viewport);\n }\n }\n\n enable(callback?: SubscribeCallback) {\n info?.(`enable #${this.viewport}, current status ${this.#status}`);\n if (\n this.viewport &&\n (this.#status === \"disabled\" || this.#status === \"disabling\")\n ) {\n this.#status = \"enabling\";\n if (callback) {\n this.clientCallback = callback;\n }\n this.server?.send({\n viewport: this.viewport,\n type: \"enable\",\n });\n this.emit(\"enabled\", this.viewport);\n }\n }\n\n select(selected: Selection) {\n //TODO this isn't always going to be correct - need to count\n // selection block items\n this.#selectedRowsCount = selectionCount(selected);\n if (this.viewport) {\n this.server?.send({\n viewport: this.viewport,\n type: \"select\",\n selected,\n });\n this.emit(\"row-selection\", selected, this.#selectedRowsCount);\n }\n }\n\n openTreeNode(key: string) {\n if (this.viewport) {\n this.server?.send({\n viewport: this.viewport,\n type: \"openTreeNode\",\n key,\n });\n }\n }\n\n closeTreeNode(key: string) {\n if (this.viewport) {\n this.server?.send({\n viewport: this.viewport,\n type: \"closeTreeNode\",\n key,\n });\n }\n }\n\n get tableSchema() {\n return this.#tableSchema;\n }\n\n set tableSchema(tableSchema: TableSchema | undefined) {\n this.#tableSchema = tableSchema;\n // TOSO emit an event\n }\n\n get links() {\n return this.#links;\n }\n\n get menu() {\n return this.#menu;\n }\n\n get status() {\n return this.#status;\n }\n\n get optimize() {\n return this.#optimize;\n }\n\n set optimize(optimize: OptimizeStrategy) {\n if (optimize !== this.#optimize) {\n this.#optimize = optimize;\n switch (optimize) {\n case \"none\":\n this.rangeRequest = this.rawRangeRequest;\n break;\n case \"debounce\":\n this.rangeRequest = this.debounceRangeRequest;\n break;\n case \"throttle\":\n this.rangeRequest = this.throttleRangeRequest;\n break;\n }\n this.emit(\"optimize\", optimize);\n }\n }\n\n private revertDebounce = debounce(() => {\n this.optimize = \"throttle\";\n }, 100);\n\n get selectedRowsCount() {\n return this.#selectedRowsCount;\n }\n\n get size() {\n return this.#size;\n }\n\n get range() {\n return this.#range;\n }\n\n set range(range: VuuRange) {\n if (range.from !== this.#range.from || range.to !== this.#range.to) {\n this.#range = range;\n this.rangeRequest(range);\n }\n }\n\n private rawRangeRequest: RangeRequest = (range) => {\n if (this.viewport && this.server) {\n this.server.send({\n viewport: this.viewport,\n type: \"setViewRange\",\n range,\n });\n }\n };\n\n private debounceRangeRequest: RangeRequest = debounce((range: VuuRange) => {\n if (this.viewport && this.server) {\n this.server.send({\n viewport: this.viewport,\n type: \"setViewRange\",\n range,\n });\n }\n }, 50);\n\n private throttleRangeRequest: RangeRequest = throttle((range: VuuRange) => {\n if (this.viewport && this.server) {\n this.server.send({\n viewport: this.viewport,\n type: \"setViewRange\",\n range,\n });\n }\n }, 80);\n\n get config() {\n return this.#config;\n }\n\n set config(config: DataSourceConfig) {\n const configChanges = this.applyConfig(config);\n if (configChanges) {\n if (this.#config && this.viewport) {\n if (config) {\n const newConfig = combineFilters(this.#config);\n this.server?.send({\n viewport: this.viewport,\n type: \"config\",\n config: newConfig,\n });\n }\n }\n this.emit(\"config\", this.#config, undefined, configChanges);\n }\n }\n\n applyConfig(\n config: WithBaseFilter<DataSourceConfig>,\n preserveExistingConfigAttributes = false,\n ): DataSourceConfigChanges | undefined {\n const { noChanges, ...otherChanges } = isConfigChanged(\n this.#config,\n config,\n );\n if (noChanges !== true) {\n if (config) {\n const newConfig: DataSourceConfig =\n config?.filterSpec?.filter &&\n config?.filterSpec.filterStruct === undefined\n ? {\n ...config,\n filterSpec: {\n filter: config.filterSpec.filter,\n filterStruct: parseFilter(config.filterSpec.filter),\n },\n }\n : config;\n if (preserveExistingConfigAttributes) {\n this.#config = {\n ...this.#config,\n ...config,\n };\n } else {\n this.#config = withConfigDefaults(newConfig);\n }\n return otherChanges;\n }\n }\n }\n\n //TODO replace all these individual server calls with calls to setConfig\n get columns() {\n return this.#config.columns;\n }\n\n set columns(columns: string[]) {\n this.#config = {\n ...this.#config,\n columns,\n };\n if (this.viewport) {\n const message = {\n viewport: this.viewport,\n type: \"setColumns\",\n columns,\n } as const;\n if (this.server) {\n this.server.send(message);\n }\n }\n this.emit(\"config\", this.#config);\n }\n\n get aggregations() {\n return this.#config.aggregations;\n }\n\n set aggregations(aggregations: VuuAggregation[]) {\n this.#config = {\n ...this.#config,\n aggregations,\n };\n if (this.viewport) {\n this.server?.send({\n viewport: this.viewport,\n type: \"aggregate\",\n aggregations,\n });\n }\n this.emit(\"config\", this.#config);\n }\n\n get sort() {\n return this.#config.sort;\n }\n\n set sort(sort: VuuSort) {\n // TODO should we wait until server ACK before we assign #sort ?\n this.#config = {\n ...this.#config,\n sort,\n };\n if (this.viewport) {\n const message = {\n viewport: this.viewport,\n type: \"sort\",\n sort,\n } as const;\n this.server?.send(message);\n }\n this.emit(\"config\", this.#config);\n }\n\n get baseFilter() {\n return this.#config.baseFilterSpec;\n }\n\n set baseFilter(baseFilter: DataSourceFilter) {\n this.config = {\n ...this.#config,\n baseFilterSpec: baseFilter,\n };\n }\n\n get filter() {\n return this.#config.filterSpec;\n }\n\n set filter(filter: DataSourceFilter) {\n this.config = {\n ...this.#config,\n filterSpec: filter,\n };\n }\n\n get groupBy() {\n return this.#config.groupBy;\n }\n\n set groupBy(groupBy: VuuGroupBy) {\n if (itemsOrOrderChanged(this.groupBy, groupBy)) {\n const wasGrouped = this.groupBy.length > 0;\n\n this.config = {\n ...this.#config,\n groupBy,\n };\n\n if (!wasGrouped && groupBy.length > 0 && this.viewport) {\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"batch\",\n type: \"viewport-update\",\n size: 0,\n rows: [],\n });\n }\n this.setConfigPending({ groupBy });\n }\n }\n\n get title() {\n return this.#title ?? `${this.table.module} ${this.table.table}`;\n }\n\n set title(title: string) {\n this.#title = title;\n if (this.viewport && title) {\n // This message doesn't actually trigger a message to Vuu server\n // it will be used to recompute visual link labels\n this.server?.send({\n type: \"setTitle\",\n title,\n viewport: this.viewport,\n });\n }\n this.emit(\"title-changed\", this.viewport ?? \"'\", title);\n }\n\n get visualLink() {\n return this.#config.visualLink;\n }\n\n set visualLink(visualLink: LinkDescriptorWithLabel | undefined) {\n this.#config = {\n ...this.#config,\n visualLink,\n };\n\n if (visualLink) {\n const {\n parentClientVpId,\n link: { fromColumn, toColumn },\n } = visualLink;\n\n if (this.viewport) {\n this.server\n ?.rpcCall<DataSourceVisualLinkCreatedMessage>({\n childColumnName: fromColumn,\n childVpId: this.viewport,\n parentColumnName: toColumn,\n parentVpId: parentClientVpId,\n type: \"CREATE_VISUAL_LINK\",\n } as VuuCreateVisualLink)\n .then((response) => {\n this.emit(\"visual-link-created\", response);\n });\n }\n } else {\n if (this.viewport) {\n this.server\n ?.rpcCall({\n type: \"REMOVE_VISUAL_LINK\",\n childVpId: this.viewport,\n })\n .then(() => {\n this.emit(\"visual-link-removed\");\n });\n }\n }\n\n this.emit(\"config\", this.#config);\n }\n\n private setConfigPending(config?: DataSourceConfig) {\n const pendingConfig = this.configChangePending;\n this.configChangePending = config;\n\n if (config !== undefined) {\n this.emit(\"config\", config, false);\n } else {\n this.emit(\"config\", pendingConfig, true);\n }\n }\n\n async remoteProcedureCall<T extends VuuRpcResponse = VuuRpcResponse>() {\n return Promise.reject<T>();\n }\n\n /** @deprecated */\n async rpcCall<T extends VuuRpcResponse = VuuRpcResponse>(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\">,\n ) {\n if (this.viewport && this.server) {\n return this.server?.rpcCall<T>({\n ...rpcRequest,\n vpId: this.viewport,\n } as VuuRpcViewportRequest);\n } else {\n throw Error(`rpcCall server or viewport are undefined`);\n }\n }\n\n /** @deprecated */\n async menuRpcCall(rpcRequest: Omit<VuuRpcRequest, \"vpId\">) {\n if (this.viewport) {\n return this.server?.rpcCall<MenuRpcResponse>({\n ...rpcRequest,\n vpId: this.viewport,\n } as VuuRpcMenuRequest);\n }\n }\n\n applyEdit(rowKey: string, columnName: string, value: VuuRowDataItemType) {\n return this.menuRpcCall(vuuEditCellRequest(rowKey, columnName, value)).then(\n (response) => {\n if (response?.error) {\n return response.error;\n } else {\n return true;\n }\n },\n );\n }\n\n insertRow(rowKey: string, data: VuuDataRowDto) {\n return this.menuRpcCall(vuuAddRowRequest(rowKey, data)).then((response) => {\n if (response?.error) {\n return response.error;\n } else {\n return true;\n }\n });\n }\n deleteRow(rowKey: string) {\n return this.menuRpcCall(vuuDeleteRowRequest(rowKey)).then((response) => {\n if (response?.error) {\n return response.error;\n } else {\n return true;\n }\n });\n }\n}\n"],"names":["logger","EventEmitter","vanillaConfig","isDataSourceConfigMessage","isViewportMenusAction","isVisualLinksAction","debounce","throttle","uuid","selectionCount","combineFilters","isConfigChanged","parseFilter","withConfigDefaults","itemsOrOrderChanged","vuuEditCellRequest","vuuAddRowRequest","vuuDeleteRowRequest"],"mappings":"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"}
@@ -151,13 +151,6 @@ const _ConnectionManager = class _ConnectionManager extends EventEmitter {
151
151
  destroy() {
152
152
  __privateGet(this, _worker).terminate();
153
153
  }
154
- async makeRpcCall(rpcRequest) {
155
- try {
156
- return this.asyncRequest(rpcRequest);
157
- } catch (err) {
158
- throw Error("Error accessing server api");
159
- }
160
- }
161
154
  };
162
155
  _connectionState = new WeakMap();
163
156
  _instance = new WeakMap();
@@ -1 +1 @@
1
- {"version":3,"file":"ConnectionManager.js","sources":["../src/ConnectionManager.ts"],"sourcesContent":["import {\n ConnectOptions,\n DataSourceCallbackMessage,\n ServerAPI,\n ServerProxySubscribeMessage,\n TableSchema,\n VuuUIMessageIn,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuCreateVisualLink,\n VuuRemoveVisualLink,\n VuuRpcMenuRequest,\n VuuRpcServiceRequest,\n VuuRpcViewportRequest,\n VuuTableList,\n VuuTableListRequest,\n VuuTableMetaRequest,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n DeferredPromise,\n EventEmitter,\n isConnectionQualityMetrics,\n isRequestResponse,\n isTableSchemaMessage,\n messageHasResult,\n uuid,\n} from \"@vuu-ui/vuu-utils\";\nimport {\n WebSocketConnectionEvents,\n WebSocketConnectionState,\n isWebSocketConnectionMessage,\n} from \"./WebSocketConnection\";\nimport { DedicatedWorker } from \"./DedicatedWorker\";\nimport { shouldMessageBeRoutedToDataSource } from \"./data-source\";\n\nimport { ConnectionQualityMetrics } from \"@vuu-ui/vuu-data-types\";\n\nexport type PostMessageToClientCallback = (\n msg: DataSourceCallbackMessage,\n) => void;\n\nexport type ConnectionEvents = WebSocketConnectionEvents & {\n \"connection-metrics\": (message: ConnectionQualityMetrics) => void;\n};\n\ntype RegisteredViewport = {\n postMessageToClientDataSource: PostMessageToClientCallback;\n request: ServerProxySubscribeMessage;\n status: \"subscribing\";\n};\n\nclass ConnectionManager extends EventEmitter<ConnectionEvents> {\n #connectionState: WebSocketConnectionState = {\n connectionPhase: \"connecting\",\n connectionStatus: \"closed\",\n retryAttemptsTotal: -1,\n retryAttemptsRemaining: -1,\n secondsToNextRetry: -1,\n };\n static #instance: ConnectionManager;\n #deferredServerAPI = new DeferredPromise<ServerAPI>();\n #pendingRequests = new Map();\n #viewports = new Map<string, RegisteredViewport>();\n // #worker?: Worker;\n #worker: DedicatedWorker;\n\n private constructor() {\n super();\n this.#worker = new DedicatedWorker(this.handleMessageFromWorker);\n }\n\n public static get instance(): ConnectionManager {\n if (!ConnectionManager.#instance) {\n ConnectionManager.#instance = new ConnectionManager();\n }\n return ConnectionManager.#instance;\n }\n\n /**\n * Open a connection to the VuuServer. This method opens the websocket connection\n * and logs in. It can be called from whichever client code has access to the auth\n * token (eg. the login page, or just a hardcoded login script in a sample).\n * This will unblock any DataSources which may have already tried to subscribe to data,\n * but lacked access to the auth token.\n *\n * @param serverUrl\n * @param token\n */\n async connect(options: ConnectOptions) {\n const result = await this.#worker.connect(options);\n if (result === \"connected\") {\n this.#deferredServerAPI.resolve(this.connectedServerAPI);\n }\n return result;\n }\n\n private handleMessageFromWorker = (\n message: VuuUIMessageIn | DataSourceCallbackMessage,\n ) => {\n if (shouldMessageBeRoutedToDataSource(message)) {\n const viewport = this.#viewports.get(message.clientViewportId);\n if (viewport) {\n viewport.postMessageToClientDataSource(message);\n } else {\n console.error(\n `[ConnectionManager] ${message.type} message received, viewport not found`,\n );\n }\n } else if (isWebSocketConnectionMessage(message)) {\n this.#connectionState = message;\n this.emit(\"connection-status\", message);\n } else if (isConnectionQualityMetrics(message)) {\n this.emit(\"connection-metrics\", message);\n } else if (isRequestResponse(message)) {\n const { requestId } = message;\n if (this.#pendingRequests.has(requestId)) {\n const { resolve } = this.#pendingRequests.get(requestId);\n this.#pendingRequests.delete(requestId);\n const { requestId: _, ...messageWithoutRequestId } = message;\n\n if (messageHasResult(message)) {\n resolve(message.result);\n } else if (\n message.type === \"VP_EDIT_RPC_RESPONSE\" ||\n message.type === \"VP_EDIT_RPC_REJECT\"\n ) {\n resolve(message);\n } else if (isTableSchemaMessage(message)) {\n resolve(message.tableSchema);\n } else {\n resolve(messageWithoutRequestId);\n }\n } else {\n console.warn(\n \"%cConnectionManager Unexpected message from the worker\",\n \"color:red;font-weight:bold;\",\n );\n }\n }\n };\n\n get connectionStatus() {\n return this.#connectionState.connectionStatus;\n }\n\n get serverAPI() {\n return this.#deferredServerAPI.promise;\n }\n\n private connectedServerAPI: ServerAPI = {\n subscribe: (message, callback) => {\n if (this.#viewports.get(message.viewport)) {\n throw Error(\n `ConnectionManager attempting to subscribe with an existing viewport id`,\n );\n }\n // TODO we never use this status\n this.#viewports.set(message.viewport, {\n status: \"subscribing\",\n request: message,\n postMessageToClientDataSource: callback,\n });\n this.#worker.send({ type: \"subscribe\", ...message });\n },\n\n unsubscribe: (viewport) => {\n this.#worker.send({ type: \"unsubscribe\", viewport });\n },\n\n send: (message) => {\n this.#worker.send(message);\n },\n\n destroy: (viewportId?: string) => {\n if (viewportId && this.#viewports.has(viewportId)) {\n this.#viewports.delete(viewportId);\n }\n },\n\n rpcCall: async <T = unknown>(\n message:\n | VuuRpcServiceRequest\n | VuuRpcMenuRequest\n | VuuRpcViewportRequest\n | VuuCreateVisualLink\n | VuuRemoveVisualLink,\n ) => this.asyncRequest<T>(message),\n\n getTableList: async () =>\n this.asyncRequest<VuuTableList>({ type: \"GET_TABLE_LIST\" }),\n\n getTableSchema: async (table) =>\n this.asyncRequest<TableSchema>({\n type: \"GET_TABLE_META\",\n table,\n }),\n };\n\n private asyncRequest = <T = unknown>(\n msg:\n | VuuRpcServiceRequest\n | VuuRpcMenuRequest\n | VuuTableListRequest\n | VuuTableMetaRequest\n | VuuRpcViewportRequest\n | VuuCreateVisualLink\n | VuuRemoveVisualLink,\n ): Promise<T> => {\n const requestId = uuid();\n this.#worker.send({\n requestId,\n ...msg,\n });\n return new Promise((resolve, reject) => {\n this.#pendingRequests.set(requestId, { resolve, reject });\n });\n };\n\n async disconnect() {\n try {\n // should we await this ?\n this.#worker.send({ type: \"disconnect\" });\n // how do we disable the serverAPI\n return \"disconnected\";\n } catch (err: unknown) {\n return \"rejected\";\n }\n }\n\n destroy() {\n this.#worker.terminate();\n }\n\n async makeRpcCall<T = unknown>(rpcRequest: VuuRpcServiceRequest) {\n try {\n return this.asyncRequest<T>(rpcRequest);\n } catch (err) {\n throw Error(\"Error accessing server api\");\n }\n }\n}\n\nexport default ConnectionManager.instance;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ConnectionManager.js","sources":["../src/ConnectionManager.ts"],"sourcesContent":["import {\n ConnectOptions,\n DataSourceCallbackMessage,\n ServerAPI,\n ServerProxySubscribeMessage,\n TableSchema,\n VuuUIMessageIn,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuCreateVisualLink,\n VuuRemoveVisualLink,\n VuuRpcMenuRequest,\n VuuRpcServiceRequest,\n VuuRpcViewportRequest,\n VuuTableList,\n VuuTableListRequest,\n VuuTableMetaRequest,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n DeferredPromise,\n EventEmitter,\n isConnectionQualityMetrics,\n isRequestResponse,\n isTableSchemaMessage,\n messageHasResult,\n uuid,\n} from \"@vuu-ui/vuu-utils\";\nimport {\n WebSocketConnectionEvents,\n WebSocketConnectionState,\n isWebSocketConnectionMessage,\n} from \"./WebSocketConnection\";\nimport { DedicatedWorker } from \"./DedicatedWorker\";\nimport { shouldMessageBeRoutedToDataSource } from \"./data-source\";\n\nimport { ConnectionQualityMetrics } from \"@vuu-ui/vuu-data-types\";\n\nexport type PostMessageToClientCallback = (\n msg: DataSourceCallbackMessage,\n) => void;\n\nexport type ConnectionEvents = WebSocketConnectionEvents & {\n \"connection-metrics\": (message: ConnectionQualityMetrics) => void;\n};\n\ntype RegisteredViewport = {\n postMessageToClientDataSource: PostMessageToClientCallback;\n request: ServerProxySubscribeMessage;\n status: \"subscribing\";\n};\n\nclass ConnectionManager extends EventEmitter<ConnectionEvents> {\n #connectionState: WebSocketConnectionState = {\n connectionPhase: \"connecting\",\n connectionStatus: \"closed\",\n retryAttemptsTotal: -1,\n retryAttemptsRemaining: -1,\n secondsToNextRetry: -1,\n };\n static #instance: ConnectionManager;\n #deferredServerAPI = new DeferredPromise<ServerAPI>();\n #pendingRequests = new Map();\n #viewports = new Map<string, RegisteredViewport>();\n // #worker?: Worker;\n #worker: DedicatedWorker;\n\n private constructor() {\n super();\n this.#worker = new DedicatedWorker(this.handleMessageFromWorker);\n }\n\n public static get instance(): ConnectionManager {\n if (!ConnectionManager.#instance) {\n ConnectionManager.#instance = new ConnectionManager();\n }\n return ConnectionManager.#instance;\n }\n\n /**\n * Open a connection to the VuuServer. This method opens the websocket connection\n * and logs in. It can be called from whichever client code has access to the auth\n * token (eg. the login page, or just a hardcoded login script in a sample).\n * This will unblock any DataSources which may have already tried to subscribe to data,\n * but lacked access to the auth token.\n *\n * @param serverUrl\n * @param token\n */\n async connect(options: ConnectOptions) {\n const result = await this.#worker.connect(options);\n if (result === \"connected\") {\n this.#deferredServerAPI.resolve(this.connectedServerAPI);\n }\n return result;\n }\n\n private handleMessageFromWorker = (\n message: VuuUIMessageIn | DataSourceCallbackMessage,\n ) => {\n if (shouldMessageBeRoutedToDataSource(message)) {\n const viewport = this.#viewports.get(message.clientViewportId);\n if (viewport) {\n viewport.postMessageToClientDataSource(message);\n } else {\n console.error(\n `[ConnectionManager] ${message.type} message received, viewport not found`,\n );\n }\n } else if (isWebSocketConnectionMessage(message)) {\n this.#connectionState = message;\n this.emit(\"connection-status\", message);\n } else if (isConnectionQualityMetrics(message)) {\n this.emit(\"connection-metrics\", message);\n } else if (isRequestResponse(message)) {\n const { requestId } = message;\n if (this.#pendingRequests.has(requestId)) {\n const { resolve } = this.#pendingRequests.get(requestId);\n this.#pendingRequests.delete(requestId);\n const { requestId: _, ...messageWithoutRequestId } = message;\n\n if (messageHasResult(message)) {\n resolve(message.result);\n } else if (\n message.type === \"VP_EDIT_RPC_RESPONSE\" ||\n message.type === \"VP_EDIT_RPC_REJECT\"\n ) {\n resolve(message);\n } else if (isTableSchemaMessage(message)) {\n resolve(message.tableSchema);\n } else {\n resolve(messageWithoutRequestId);\n }\n } else {\n console.warn(\n \"%cConnectionManager Unexpected message from the worker\",\n \"color:red;font-weight:bold;\",\n );\n }\n }\n };\n\n get connectionStatus() {\n return this.#connectionState.connectionStatus;\n }\n\n get serverAPI() {\n return this.#deferredServerAPI.promise;\n }\n\n private connectedServerAPI: ServerAPI = {\n subscribe: (message, callback) => {\n if (this.#viewports.get(message.viewport)) {\n throw Error(\n `ConnectionManager attempting to subscribe with an existing viewport id`,\n );\n }\n // TODO we never use this status\n this.#viewports.set(message.viewport, {\n status: \"subscribing\",\n request: message,\n postMessageToClientDataSource: callback,\n });\n this.#worker.send({ type: \"subscribe\", ...message });\n },\n\n unsubscribe: (viewport) => {\n this.#worker.send({ type: \"unsubscribe\", viewport });\n },\n\n send: (message) => {\n this.#worker.send(message);\n },\n\n destroy: (viewportId?: string) => {\n if (viewportId && this.#viewports.has(viewportId)) {\n this.#viewports.delete(viewportId);\n }\n },\n\n rpcCall: async <T = unknown>(\n message:\n | VuuRpcServiceRequest\n | VuuRpcMenuRequest\n | VuuRpcViewportRequest\n | VuuCreateVisualLink\n | VuuRemoveVisualLink,\n ) => this.asyncRequest<T>(message),\n\n getTableList: async () =>\n this.asyncRequest<VuuTableList>({ type: \"GET_TABLE_LIST\" }),\n\n getTableSchema: async (table) =>\n this.asyncRequest<TableSchema>({\n type: \"GET_TABLE_META\",\n table,\n }),\n };\n\n private asyncRequest = <T = unknown>(\n msg:\n | VuuRpcServiceRequest\n | VuuRpcMenuRequest\n | VuuTableListRequest\n | VuuTableMetaRequest\n | VuuRpcViewportRequest\n | VuuCreateVisualLink\n | VuuRemoveVisualLink,\n ): Promise<T> => {\n const requestId = uuid();\n this.#worker.send({\n requestId,\n ...msg,\n });\n return new Promise((resolve, reject) => {\n this.#pendingRequests.set(requestId, { resolve, reject });\n });\n };\n\n async disconnect() {\n try {\n // should we await this ?\n this.#worker.send({ type: \"disconnect\" });\n // how do we disable the serverAPI\n return \"disconnected\";\n } catch (err: unknown) {\n return \"rejected\";\n }\n }\n\n destroy() {\n this.#worker.terminate();\n }\n}\n\nexport default ConnectionManager.instance;\n"],"names":[],"mappings":"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"}