@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
@@ -0,0 +1,574 @@
1
+ 'use strict';
2
+
3
+ var vuuFilterParser = require('@vuu-ui/vuu-filter-parser');
4
+ var vuuUtils = require('@vuu-ui/vuu-utils');
5
+ var connectionManager = require('./connection-manager.js');
6
+ var dataSource = require('./data-source.js');
7
+
8
+ var __accessCheck = (obj, member, msg) => {
9
+ if (!member.has(obj))
10
+ throw TypeError("Cannot " + msg);
11
+ };
12
+ var __privateGet = (obj, member, getter) => {
13
+ __accessCheck(obj, member, "read from private field");
14
+ return getter ? getter.call(obj) : member.get(obj);
15
+ };
16
+ var __privateAdd = (obj, member, value) => {
17
+ if (member.has(obj))
18
+ throw TypeError("Cannot add the same private member more than once");
19
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
20
+ };
21
+ var __privateSet = (obj, member, value, setter) => {
22
+ __accessCheck(obj, member, "write to private field");
23
+ setter ? setter.call(obj, value) : member.set(obj, value);
24
+ return value;
25
+ };
26
+ var _config, _groupBy, _links, _menu, _optimize, _range, _selectedRowsCount, _size, _status, _tableSchema, _title;
27
+ const { info } = vuuUtils.logger("VuuDataSource");
28
+ const { KEY } = vuuUtils.metadataKeys;
29
+ class VuuDataSource extends vuuUtils.EventEmitter {
30
+ constructor({
31
+ bufferSize = 100,
32
+ aggregations,
33
+ columns,
34
+ filter,
35
+ groupBy,
36
+ sort,
37
+ table,
38
+ title,
39
+ viewport,
40
+ visualLink
41
+ }) {
42
+ super();
43
+ this.server = null;
44
+ __privateAdd(this, _config, vuuUtils.vanillaConfig);
45
+ __privateAdd(this, _groupBy, []);
46
+ __privateAdd(this, _links, void 0);
47
+ __privateAdd(this, _menu, void 0);
48
+ __privateAdd(this, _optimize, "throttle");
49
+ __privateAdd(this, _range, { from: 0, to: 0 });
50
+ __privateAdd(this, _selectedRowsCount, 0);
51
+ __privateAdd(this, _size, 0);
52
+ __privateAdd(this, _status, "initialising");
53
+ __privateAdd(this, _tableSchema, void 0);
54
+ __privateAdd(this, _title, void 0);
55
+ this.handleMessageFromServer = (message) => {
56
+ if (message.type === "subscribed") {
57
+ __privateSet(this, _status, "subscribed");
58
+ this.tableSchema = message.tableSchema;
59
+ this.clientCallback?.(message);
60
+ } else if (message.type === "disabled") {
61
+ __privateSet(this, _status, "disabled");
62
+ } else if (message.type === "enabled") {
63
+ __privateSet(this, _status, "enabled");
64
+ } else if (dataSource.isDataSourceConfigMessage(message)) {
65
+ return;
66
+ } else if (message.type === "debounce-begin") {
67
+ this.optimize = "debounce";
68
+ } else {
69
+ if (message.type === "viewport-update" && message.size !== void 0 && message.size !== __privateGet(this, _size)) {
70
+ __privateSet(this, _size, message.size);
71
+ this.emit("resize", message.size);
72
+ }
73
+ if (this.configChangePending) {
74
+ this.setConfigPending();
75
+ }
76
+ if (vuuUtils.isViewportMenusAction(message)) {
77
+ __privateSet(this, _menu, message.menu);
78
+ } else if (vuuUtils.isVisualLinksAction(message)) {
79
+ __privateSet(this, _links, message.links);
80
+ } else {
81
+ this.clientCallback?.(message);
82
+ }
83
+ if (this.optimize === "debounce") {
84
+ this.revertDebounce();
85
+ }
86
+ }
87
+ };
88
+ this.revertDebounce = vuuUtils.debounce(() => {
89
+ this.optimize = "throttle";
90
+ }, 100);
91
+ this.rawRangeRequest = (range) => {
92
+ if (this.viewport && this.server) {
93
+ this.server.send({
94
+ viewport: this.viewport,
95
+ type: "setViewRange",
96
+ range
97
+ });
98
+ }
99
+ };
100
+ this.debounceRangeRequest = vuuUtils.debounce((range) => {
101
+ if (this.viewport && this.server) {
102
+ this.server.send({
103
+ viewport: this.viewport,
104
+ type: "setViewRange",
105
+ range
106
+ });
107
+ }
108
+ }, 50);
109
+ this.throttleRangeRequest = vuuUtils.throttle((range) => {
110
+ if (this.viewport && this.server) {
111
+ this.server.send({
112
+ viewport: this.viewport,
113
+ type: "setViewRange",
114
+ range
115
+ });
116
+ }
117
+ }, 80);
118
+ if (!table)
119
+ throw Error("RemoteDataSource constructor called without table");
120
+ this.bufferSize = bufferSize;
121
+ this.table = table;
122
+ this.viewport = viewport;
123
+ __privateSet(this, _config, {
124
+ ...__privateGet(this, _config),
125
+ aggregations: aggregations || __privateGet(this, _config).aggregations,
126
+ columns: columns || __privateGet(this, _config).columns,
127
+ filter: filter || __privateGet(this, _config).filter,
128
+ groupBy: groupBy || __privateGet(this, _config).groupBy,
129
+ sort: sort || __privateGet(this, _config).sort,
130
+ visualLink: visualLink || __privateGet(this, _config).visualLink
131
+ });
132
+ __privateSet(this, _title, title);
133
+ this.rangeRequest = this.throttleRangeRequest;
134
+ }
135
+ async subscribe({
136
+ viewport = this.viewport ?? (this.viewport = vuuUtils.uuid()),
137
+ columns,
138
+ aggregations,
139
+ range,
140
+ sort,
141
+ groupBy,
142
+ filter
143
+ }, callback) {
144
+ if (__privateGet(this, _status) === "disabled" || __privateGet(this, _status) === "disabling") {
145
+ this.enable(callback);
146
+ return;
147
+ }
148
+ this.clientCallback = callback;
149
+ if (aggregations || columns || filter || groupBy || sort) {
150
+ __privateSet(this, _config, {
151
+ ...__privateGet(this, _config),
152
+ aggregations: aggregations || __privateGet(this, _config).aggregations,
153
+ columns: columns || __privateGet(this, _config).columns,
154
+ filter: filter || __privateGet(this, _config).filter,
155
+ groupBy: groupBy || __privateGet(this, _config).groupBy,
156
+ sort: sort || __privateGet(this, _config).sort
157
+ });
158
+ }
159
+ if (range) {
160
+ __privateSet(this, _range, range);
161
+ }
162
+ if (__privateGet(this, _status) !== "initialising" && __privateGet(this, _status) !== "unsubscribed") {
163
+ return;
164
+ }
165
+ __privateSet(this, _status, "subscribing");
166
+ this.viewport = viewport;
167
+ this.server = await connectionManager.getServerAPI();
168
+ const { bufferSize } = this;
169
+ this.server?.subscribe(
170
+ {
171
+ ...__privateGet(this, _config),
172
+ bufferSize,
173
+ viewport,
174
+ table: this.table,
175
+ range: __privateGet(this, _range),
176
+ title: __privateGet(this, _title)
177
+ },
178
+ this.handleMessageFromServer
179
+ );
180
+ }
181
+ unsubscribe() {
182
+ console.log(`unsubscribe #${this.viewport}`);
183
+ info?.(`unsubscribe #${this.viewport}`);
184
+ if (this.viewport) {
185
+ this.server?.unsubscribe(this.viewport);
186
+ }
187
+ this.server?.destroy(this.viewport);
188
+ this.server = null;
189
+ this.removeAllListeners();
190
+ __privateSet(this, _status, "unsubscribed");
191
+ this.viewport = void 0;
192
+ this.range = { from: 0, to: 0 };
193
+ }
194
+ suspend() {
195
+ console.log(`suspend #${this.viewport}, current status ${__privateGet(this, _status)}`);
196
+ info?.(`suspend #${this.viewport}, current status ${__privateGet(this, _status)}`);
197
+ if (this.viewport) {
198
+ __privateSet(this, _status, "suspended");
199
+ this.server?.send({
200
+ type: "suspend",
201
+ viewport: this.viewport
202
+ });
203
+ }
204
+ return this;
205
+ }
206
+ resume() {
207
+ console.log(`resume #${this.viewport}, current status ${__privateGet(this, _status)}`);
208
+ const isDisabled = __privateGet(this, _status).startsWith("disabl");
209
+ const isSuspended = __privateGet(this, _status) === "suspended";
210
+ info?.(`resume #${this.viewport}, current status ${__privateGet(this, _status)}`);
211
+ if (this.viewport) {
212
+ if (isDisabled) {
213
+ this.enable();
214
+ } else if (isSuspended) {
215
+ this.server?.send({
216
+ type: "resume",
217
+ viewport: this.viewport
218
+ });
219
+ __privateSet(this, _status, "subscribed");
220
+ }
221
+ }
222
+ return this;
223
+ }
224
+ disable() {
225
+ info?.(`disable #${this.viewport}, current status ${__privateGet(this, _status)}`);
226
+ if (this.viewport) {
227
+ __privateSet(this, _status, "disabling");
228
+ this.server?.send({
229
+ viewport: this.viewport,
230
+ type: "disable"
231
+ });
232
+ }
233
+ return this;
234
+ }
235
+ enable(callback) {
236
+ info?.(`enable #${this.viewport}, current status ${__privateGet(this, _status)}`);
237
+ if (this.viewport && (__privateGet(this, _status) === "disabled" || __privateGet(this, _status) === "disabling")) {
238
+ __privateSet(this, _status, "enabling");
239
+ if (callback) {
240
+ this.clientCallback = callback;
241
+ }
242
+ this.server?.send({
243
+ viewport: this.viewport,
244
+ type: "enable"
245
+ });
246
+ }
247
+ return this;
248
+ }
249
+ select(selected) {
250
+ __privateSet(this, _selectedRowsCount, selected.length);
251
+ if (this.viewport) {
252
+ this.server?.send({
253
+ viewport: this.viewport,
254
+ type: "select",
255
+ selected
256
+ });
257
+ }
258
+ }
259
+ openTreeNode(key) {
260
+ if (this.viewport) {
261
+ this.server?.send({
262
+ viewport: this.viewport,
263
+ type: "openTreeNode",
264
+ key
265
+ });
266
+ }
267
+ }
268
+ closeTreeNode(key) {
269
+ if (this.viewport) {
270
+ this.server?.send({
271
+ viewport: this.viewport,
272
+ type: "closeTreeNode",
273
+ key
274
+ });
275
+ }
276
+ }
277
+ get tableSchema() {
278
+ return __privateGet(this, _tableSchema);
279
+ }
280
+ set tableSchema(tableSchema) {
281
+ __privateSet(this, _tableSchema, tableSchema);
282
+ }
283
+ get links() {
284
+ return __privateGet(this, _links);
285
+ }
286
+ get menu() {
287
+ return __privateGet(this, _menu);
288
+ }
289
+ get status() {
290
+ return __privateGet(this, _status);
291
+ }
292
+ get optimize() {
293
+ return __privateGet(this, _optimize);
294
+ }
295
+ set optimize(optimize) {
296
+ if (optimize !== __privateGet(this, _optimize)) {
297
+ __privateSet(this, _optimize, optimize);
298
+ switch (optimize) {
299
+ case "none":
300
+ this.rangeRequest = this.rawRangeRequest;
301
+ break;
302
+ case "debounce":
303
+ this.rangeRequest = this.debounceRangeRequest;
304
+ break;
305
+ case "throttle":
306
+ this.rangeRequest = this.throttleRangeRequest;
307
+ break;
308
+ }
309
+ this.emit("optimize", optimize);
310
+ }
311
+ }
312
+ get selectedRowsCount() {
313
+ return __privateGet(this, _selectedRowsCount);
314
+ }
315
+ get size() {
316
+ return __privateGet(this, _size);
317
+ }
318
+ get range() {
319
+ return __privateGet(this, _range);
320
+ }
321
+ set range(range) {
322
+ if (range.from !== __privateGet(this, _range).from || range.to !== __privateGet(this, _range).to) {
323
+ __privateSet(this, _range, range);
324
+ this.rangeRequest(range);
325
+ }
326
+ }
327
+ get config() {
328
+ return __privateGet(this, _config);
329
+ }
330
+ set config(config) {
331
+ const configChanges = this.applyConfig(config);
332
+ if (configChanges) {
333
+ if (__privateGet(this, _config) && this.viewport) {
334
+ if (config) {
335
+ this.server?.send({
336
+ viewport: this.viewport,
337
+ type: "config",
338
+ config: __privateGet(this, _config)
339
+ });
340
+ }
341
+ }
342
+ this.emit("config", __privateGet(this, _config), void 0, configChanges);
343
+ }
344
+ }
345
+ applyConfig(config) {
346
+ const { noChanges, ...otherChanges } = vuuUtils.isConfigChanged(
347
+ __privateGet(this, _config),
348
+ config
349
+ );
350
+ if (noChanges !== true) {
351
+ if (config) {
352
+ const newConfig = config?.filter?.filter && config?.filter.filterStruct === void 0 ? {
353
+ ...config,
354
+ filter: {
355
+ filter: config.filter.filter,
356
+ filterStruct: vuuFilterParser.parseFilter(config.filter.filter)
357
+ }
358
+ } : config;
359
+ __privateSet(this, _config, vuuUtils.withConfigDefaults(newConfig));
360
+ return otherChanges;
361
+ }
362
+ }
363
+ }
364
+ //TODO replace all these individual server calls with calls to setConfig
365
+ get columns() {
366
+ return __privateGet(this, _config).columns;
367
+ }
368
+ set columns(columns) {
369
+ __privateSet(this, _config, {
370
+ ...__privateGet(this, _config),
371
+ columns
372
+ });
373
+ if (this.viewport) {
374
+ const message = {
375
+ viewport: this.viewport,
376
+ type: "setColumns",
377
+ columns
378
+ };
379
+ if (this.server) {
380
+ this.server.send(message);
381
+ }
382
+ }
383
+ this.emit("config", __privateGet(this, _config));
384
+ }
385
+ get aggregations() {
386
+ return __privateGet(this, _config).aggregations;
387
+ }
388
+ set aggregations(aggregations) {
389
+ __privateSet(this, _config, {
390
+ ...__privateGet(this, _config),
391
+ aggregations
392
+ });
393
+ if (this.viewport) {
394
+ this.server?.send({
395
+ viewport: this.viewport,
396
+ type: "aggregate",
397
+ aggregations
398
+ });
399
+ }
400
+ this.emit("config", __privateGet(this, _config));
401
+ }
402
+ get sort() {
403
+ return __privateGet(this, _config).sort;
404
+ }
405
+ set sort(sort) {
406
+ __privateSet(this, _config, {
407
+ ...__privateGet(this, _config),
408
+ sort
409
+ });
410
+ if (this.viewport) {
411
+ const message = {
412
+ viewport: this.viewport,
413
+ type: "sort",
414
+ sort
415
+ };
416
+ this.server?.send(message);
417
+ }
418
+ this.emit("config", __privateGet(this, _config));
419
+ }
420
+ get filter() {
421
+ return __privateGet(this, _config).filter;
422
+ }
423
+ set filter(filter) {
424
+ this.config = {
425
+ ...__privateGet(this, _config),
426
+ filter
427
+ };
428
+ }
429
+ get groupBy() {
430
+ return __privateGet(this, _config).groupBy;
431
+ }
432
+ set groupBy(groupBy) {
433
+ if (vuuUtils.itemsOrOrderChanged(this.groupBy, groupBy)) {
434
+ const wasGrouped = __privateGet(this, _groupBy).length > 0;
435
+ this.config = {
436
+ ...__privateGet(this, _config),
437
+ groupBy
438
+ };
439
+ if (!wasGrouped && groupBy.length > 0 && this.viewport) {
440
+ this.clientCallback?.({
441
+ clientViewportId: this.viewport,
442
+ mode: "batch",
443
+ type: "viewport-update",
444
+ size: 0,
445
+ rows: []
446
+ });
447
+ }
448
+ this.setConfigPending({ groupBy });
449
+ }
450
+ }
451
+ get title() {
452
+ return __privateGet(this, _title);
453
+ }
454
+ set title(title) {
455
+ __privateSet(this, _title, title);
456
+ if (this.viewport && title) {
457
+ this.server?.send({
458
+ type: "setTitle",
459
+ title,
460
+ viewport: this.viewport
461
+ });
462
+ }
463
+ }
464
+ get visualLink() {
465
+ return __privateGet(this, _config).visualLink;
466
+ }
467
+ set visualLink(visualLink) {
468
+ __privateSet(this, _config, {
469
+ ...__privateGet(this, _config),
470
+ visualLink
471
+ });
472
+ if (visualLink) {
473
+ const {
474
+ parentClientVpId,
475
+ link: { fromColumn, toColumn }
476
+ } = visualLink;
477
+ if (this.viewport) {
478
+ this.server?.send({
479
+ viewport: this.viewport,
480
+ type: "createLink",
481
+ parentClientVpId,
482
+ parentColumnName: toColumn,
483
+ childColumnName: fromColumn
484
+ });
485
+ }
486
+ } else {
487
+ if (this.viewport) {
488
+ this.server?.send({
489
+ type: "removeLink",
490
+ viewport: this.viewport
491
+ });
492
+ }
493
+ }
494
+ this.emit("config", __privateGet(this, _config));
495
+ }
496
+ setConfigPending(config) {
497
+ const pendingConfig = this.configChangePending;
498
+ this.configChangePending = config;
499
+ if (config !== void 0) {
500
+ this.emit("config", config, false);
501
+ } else {
502
+ this.emit("config", pendingConfig, true);
503
+ }
504
+ }
505
+ async rpcCall(rpcRequest) {
506
+ if (this.viewport) {
507
+ return this.server?.rpcCall({
508
+ vpId: this.viewport,
509
+ ...rpcRequest
510
+ });
511
+ }
512
+ }
513
+ async menuRpcCall(rpcRequest) {
514
+ if (this.viewport) {
515
+ return this.server?.rpcCall({
516
+ vpId: this.viewport,
517
+ ...rpcRequest
518
+ });
519
+ }
520
+ }
521
+ applyEdit(row, columnName, value) {
522
+ return this.menuRpcCall({
523
+ rowKey: row[KEY],
524
+ field: columnName,
525
+ value,
526
+ type: "VP_EDIT_CELL_RPC"
527
+ }).then((response) => {
528
+ if (response?.error) {
529
+ return response.error;
530
+ } else {
531
+ return true;
532
+ }
533
+ });
534
+ }
535
+ insertRow(key, data) {
536
+ return this.menuRpcCall({
537
+ rowKey: key,
538
+ data,
539
+ type: "VP_EDIT_ADD_ROW_RPC"
540
+ }).then((response) => {
541
+ if (response?.error) {
542
+ return response.error;
543
+ } else {
544
+ return true;
545
+ }
546
+ });
547
+ }
548
+ deleteRow(rowKey) {
549
+ return this.menuRpcCall({
550
+ rowKey,
551
+ type: "VP_EDIT_DELETE_ROW_RPC"
552
+ }).then((response) => {
553
+ if (response?.error) {
554
+ return response.error;
555
+ } else {
556
+ return true;
557
+ }
558
+ });
559
+ }
560
+ }
561
+ _config = new WeakMap();
562
+ _groupBy = new WeakMap();
563
+ _links = new WeakMap();
564
+ _menu = new WeakMap();
565
+ _optimize = new WeakMap();
566
+ _range = new WeakMap();
567
+ _selectedRowsCount = new WeakMap();
568
+ _size = new WeakMap();
569
+ _status = new WeakMap();
570
+ _tableSchema = new WeakMap();
571
+ _title = new WeakMap();
572
+
573
+ exports.VuuDataSource = VuuDataSource;
574
+ //# sourceMappingURL=vuu-data-source.js.map
@@ -0,0 +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 DataSourceRow,\n DataSourceStatus,\n OptimizeStrategy,\n RpcResponse,\n Selection,\n SubscribeCallback,\n SubscribeProps,\n TableSchema,\n WithFullConfig,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n ClientToServerEditRpc,\n ClientToServerMenuRPC,\n ClientToServerViewportRpcCall,\n LinkDescriptorWithLabel,\n VuuAggregation,\n VuuDataRowDto,\n VuuGroupBy,\n VuuMenu,\n VuuRange,\n VuuRowDataItemType,\n VuuSort,\n VuuTable,\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 metadataKeys,\n throttle,\n uuid,\n vanillaConfig,\n withConfigDefaults,\n DataSourceConfigChanges,\n} from \"@vuu-ui/vuu-utils\";\nimport { getServerAPI, ServerAPI } from \"./connection-manager\";\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\nconst { KEY } = metadataKeys;\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 = vanillaConfig;\n #groupBy: VuuGroupBy = [];\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 filter,\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 filter: filter || this.#config.filter,\n groupBy: groupBy || this.#config.groupBy,\n sort: sort || this.#config.sort,\n visualLink: visualLink || this.#config.visualLink,\n };\n\n this.#title = title;\n this.rangeRequest = this.throttleRangeRequest;\n }\n\n async subscribe(\n {\n viewport = this.viewport ?? (this.viewport = uuid()),\n columns,\n aggregations,\n range,\n sort,\n groupBy,\n filter,\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 || filter || groupBy || sort) {\n this.#config = {\n ...this.#config,\n aggregations: aggregations || this.#config.aggregations,\n columns: columns || this.#config.columns,\n filter: filter || this.#config.filter,\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 getServerAPI();\n\n const { bufferSize } = this;\n\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 } 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 }\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 console.log(`unsubscribe #${this.viewport}`);\n info?.(`unsubscribe #${this.viewport}`);\n if (this.viewport) {\n this.server?.unsubscribe(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 suspend() {\n console.log(`suspend #${this.viewport}, current status ${this.#status}`);\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 }\n return this;\n }\n\n resume() {\n console.log(`resume #${this.viewport}, current status ${this.#status}`);\n const isDisabled = this.#status.startsWith(\"disabl\");\n const isSuspended = this.#status === \"suspended\";\n info?.(`resume #${this.viewport}, current status ${this.#status}`);\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 }\n }\n return this;\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 }\n return this;\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 }\n return this;\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 = selected.length;\n if (this.viewport) {\n this.server?.send({\n viewport: this.viewport,\n type: \"select\",\n selected,\n });\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(config: DataSourceConfig): 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?.filter?.filter && config?.filter.filterStruct === undefined\n ? {\n ...config,\n filter: {\n filter: config.filter.filter,\n filterStruct: parseFilter(config.filter.filter),\n },\n }\n : config;\n this.#config = withConfigDefaults(newConfig);\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.filter;\n }\n\n set filter(filter: DataSourceFilter) {\n this.config = {\n ...this.#config,\n 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 // if (this.viewport) {\n // const message = {\n // viewport: this.viewport,\n // type: \"groupBy\",\n // groupBy: this.#config.groupBy,\n // } as const;\n\n // if (this.server) {\n // this.server.send(message);\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.emit(\"config\", this.#config, undefined, {\n // ...NO_CONFIG_CHANGES,\n // groupByChanged: true,\n // });\n this.setConfigPending({ groupBy });\n }\n }\n\n get title() {\n return this.#title;\n }\n\n set title(title: string | undefined) {\n this.#title = title;\n if (this.viewport && title) {\n this.server?.send({\n type: \"setTitle\",\n title,\n viewport: this.viewport,\n });\n }\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?.send({\n viewport: this.viewport,\n type: \"createLink\",\n parentClientVpId,\n parentColumnName: toColumn,\n childColumnName: fromColumn,\n });\n }\n } else {\n if (this.viewport) {\n this.server?.send({\n type: \"removeLink\",\n viewport: this.viewport,\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 rpcCall<T extends RpcResponse = RpcResponse>(\n rpcRequest: Omit<ClientToServerViewportRpcCall, \"vpId\">\n ) {\n if (this.viewport) {\n return this.server?.rpcCall<T>({\n vpId: this.viewport,\n ...rpcRequest,\n } as ClientToServerViewportRpcCall);\n }\n }\n\n async menuRpcCall(\n rpcRequest: Omit<ClientToServerMenuRPC, \"vpId\"> | ClientToServerEditRpc\n ) {\n if (this.viewport) {\n return this.server?.rpcCall<MenuRpcResponse>({\n vpId: this.viewport,\n ...rpcRequest,\n } as ClientToServerMenuRPC);\n }\n }\n\n applyEdit(row: DataSourceRow, columnName: string, value: VuuRowDataItemType) {\n return this.menuRpcCall({\n rowKey: row[KEY],\n field: columnName,\n value: value,\n type: \"VP_EDIT_CELL_RPC\",\n }).then((response) => {\n if (response?.error) {\n return response.error;\n } else {\n return true;\n }\n });\n }\n\n insertRow(key: string, data: VuuDataRowDto) {\n return this.menuRpcCall({\n rowKey: key,\n data,\n type: \"VP_EDIT_ADD_ROW_RPC\",\n }).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({\n rowKey,\n type: \"VP_EDIT_DELETE_ROW_RPC\",\n }).then((response) => {\n if (response?.error) {\n return response.error;\n } else {\n return true;\n }\n });\n }\n}\n"],"names":["logger","metadataKeys","EventEmitter","vanillaConfig","isDataSourceConfigMessage","isViewportMenusAction","isVisualLinksAction","debounce","throttle","uuid","getServerAPI","isConfigChanged","parseFilter","withConfigDefaults","itemsOrOrderChanged"],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ const defaultAuthUrl = "api/authn";
2
+ const authenticate = async (username, password, authUrl = defaultAuthUrl) => fetch(authUrl, {
3
+ method: "POST",
4
+ credentials: "include",
5
+ headers: {
6
+ "Content-Type": "application/json",
7
+ "access-control-allow-origin": location.host
8
+ },
9
+ body: JSON.stringify({ username, password })
10
+ }).then((response) => {
11
+ if (response.ok) {
12
+ const authToken = response.headers.get("vuu-auth-token");
13
+ if (typeof authToken === "string" && authToken.length > 0) {
14
+ return authToken;
15
+ } else {
16
+ throw Error(`Authentication failed auth token not returned by server`);
17
+ }
18
+ } else {
19
+ throw Error(
20
+ `Authentication failed ${response.status} ${response.statusText}`
21
+ );
22
+ }
23
+ });
24
+
25
+ export { authenticate };
26
+ //# sourceMappingURL=authenticate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authenticate.js","sources":["../src/authenticate.ts"],"sourcesContent":["const defaultAuthUrl = \"api/authn\";\n\nexport const authenticate = async (\n username: string,\n password: string,\n authUrl = defaultAuthUrl\n): Promise<string | void> =>\n fetch(authUrl, {\n method: \"POST\",\n credentials: \"include\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"access-control-allow-origin\": location.host,\n },\n body: JSON.stringify({ username, password }),\n }).then((response) => {\n if (response.ok) {\n const authToken = response.headers.get(\"vuu-auth-token\");\n if (typeof authToken === \"string\" && authToken.length > 0) {\n return authToken;\n } else {\n throw Error(`Authentication failed auth token not returned by server`);\n }\n } else {\n throw Error(\n `Authentication failed ${response.status} ${response.statusText}`\n );\n }\n });\n"],"names":[],"mappings":"AAAA,MAAM,cAAiB,GAAA,WAAA,CAAA;AAEhB,MAAM,eAAe,OAC1B,QAAA,EACA,UACA,OAAU,GAAA,cAAA,KAEV,MAAM,OAAS,EAAA;AAAA,EACb,MAAQ,EAAA,MAAA;AAAA,EACR,WAAa,EAAA,SAAA;AAAA,EACb,OAAS,EAAA;AAAA,IACP,cAAgB,EAAA,kBAAA;AAAA,IAChB,+BAA+B,QAAS,CAAA,IAAA;AAAA,GAC1C;AAAA,EACA,MAAM,IAAK,CAAA,SAAA,CAAU,EAAE,QAAA,EAAU,UAAU,CAAA;AAC7C,CAAC,CAAA,CAAE,IAAK,CAAA,CAAC,QAAa,KAAA;AACpB,EAAA,IAAI,SAAS,EAAI,EAAA;AACf,IAAA,MAAM,SAAY,GAAA,QAAA,CAAS,OAAQ,CAAA,GAAA,CAAI,gBAAgB,CAAA,CAAA;AACvD,IAAA,IAAI,OAAO,SAAA,KAAc,QAAY,IAAA,SAAA,CAAU,SAAS,CAAG,EAAA;AACzD,MAAO,OAAA,SAAA,CAAA;AAAA,KACF,MAAA;AACL,MAAA,MAAM,MAAM,CAAyD,uDAAA,CAAA,CAAA,CAAA;AAAA,KACvE;AAAA,GACK,MAAA;AACL,IAAM,MAAA,KAAA;AAAA,MACJ,CAAyB,sBAAA,EAAA,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,SAAS,UAAU,CAAA,CAAA;AAAA,KACjE,CAAA;AAAA,GACF;AACF,CAAC;;;;"}