@vuu-ui/vuu-data-remote 2.1.15 → 2.1.16

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.
@@ -14,7 +14,7 @@ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot
14
14
  var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
15
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
16
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
17
- var _allColumns, _autosubscribeColumns, _pendingVisualLink, _links, _menu, _optimize, _selectedRowsCount, _sessionDataSource, _status, _tableSchema;
17
+ var _allColumns, _autosubscribeColumns, _pendingVisualLink, _links, _menu, _optimize, _selectedRowsCount, _sessionDataSource, _sessionTableMessageColumn, _status, _tableSchema;
18
18
  const { info, infoEnabled } = vuuUtils.logger("VuuDataSource");
19
19
  const combineColumnsWithAutosubscribeColumns = (columns, autosubscribeColumns = []) => {
20
20
  if (autosubscribeColumns.length === 0) {
@@ -30,7 +30,10 @@ const combineColumnsWithAutosubscribeColumns = (columns, autosubscribeColumns =
30
30
  }
31
31
  };
32
32
  const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
33
- constructor(props) {
33
+ constructor({
34
+ sessionTableMessageColumn,
35
+ ...props
36
+ }) {
34
37
  super(props);
35
38
  __publicField(this, "bufferSize");
36
39
  __publicField(this, "server", null);
@@ -46,6 +49,7 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
46
49
  __privateAdd(this, _optimize, "throttle");
47
50
  __privateAdd(this, _selectedRowsCount, 0);
48
51
  __privateAdd(this, _sessionDataSource);
52
+ __privateAdd(this, _sessionTableMessageColumn);
49
53
  __privateAdd(this, _status, "initialising");
50
54
  __privateAdd(this, _tableSchema);
51
55
  __publicField(this, "table");
@@ -69,9 +73,19 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
69
73
  } else if (message.type === "debounce-begin") {
70
74
  this.optimize = "debounce";
71
75
  } else {
72
- if (message.type === "viewport-update" && message.size !== void 0 && message.size !== this.size) {
73
- this.size = message.size;
74
- this.emit("resize", message.size);
76
+ if (message.type === "viewport-update") {
77
+ if (message.size !== void 0 && message.size !== this.size) {
78
+ this.size = message.size;
79
+ this.emit("resize", message.size);
80
+ }
81
+ if (Array.isArray(message.rows) && message.rows.length > 0 && __privateGet(this, _sessionDataSource)) {
82
+ this.emit("remote-update-during-local-edit", message.rows);
83
+ console.log(
84
+ `updates incoming whilst edit in progress ${this.viewport}`
85
+ );
86
+ console.table(message.rows);
87
+ return;
88
+ }
75
89
  } else if (message.type === "viewport-clear") {
76
90
  this.size = 0;
77
91
  this.emit("resize", 0);
@@ -144,6 +158,7 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
144
158
  this.bufferSize = bufferSize;
145
159
  this.table = table;
146
160
  __privateSet(this, _pendingVisualLink, visualLink);
161
+ __privateSet(this, _sessionTableMessageColumn, sessionTableMessageColumn);
147
162
  this.rangeRequest = this.rawRangeRequest;
148
163
  if (props.autosubscribeColumns) {
149
164
  __privateSet(this, _autosubscribeColumns, props.autosubscribeColumns);
@@ -213,6 +228,18 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
213
228
  }
214
229
  }
215
230
  }
231
+ /**
232
+ * Tell the server we wish to resume receiving messages. Server will send a
233
+ * snapshot of rows currently in cache. This can be used to update with
234
+ * latest data, e.g after an edit session during which we might have ignored
235
+ * some updates.
236
+ */
237
+ sendResumeMessage() {
238
+ this.server?.send({
239
+ type: "resume",
240
+ viewport: this.viewport
241
+ });
242
+ }
216
243
  resume(callback) {
217
244
  const isDisabled = __privateGet(this, _status).startsWith("disabl");
218
245
  const isSuspended = __privateGet(this, _status) === "suspended";
@@ -224,10 +251,7 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
224
251
  if (isDisabled) {
225
252
  this.enable();
226
253
  } else if (isSuspended) {
227
- this.server?.send({
228
- type: "resume",
229
- viewport: this.viewport
230
- });
254
+ this.sendResumeMessage();
231
255
  __privateSet(this, _status, "subscribed");
232
256
  this.emit("resumed", this.viewport);
233
257
  if (__privateGet(this, _selectedRowsCount) > 0) {
@@ -430,6 +454,15 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
430
454
  }
431
455
  }
432
456
  }
457
+ get range() {
458
+ return super.range;
459
+ }
460
+ set range(range) {
461
+ super.range = range;
462
+ if (__privateGet(this, _sessionDataSource)) {
463
+ __privateGet(this, _sessionDataSource).range = range;
464
+ }
465
+ }
433
466
  get title() {
434
467
  return super.title || `${this.table.module} ${this.table.table}`;
435
468
  }
@@ -483,9 +516,13 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
483
516
  return Promise.reject();
484
517
  }
485
518
  createSessionDataSource(sessionTable) {
486
- return new _VuuDataSource({ columns: this.columns, table: sessionTable });
519
+ const columns = __privateGet(this, _sessionTableMessageColumn) ? this.columns.concat(__privateGet(this, _sessionTableMessageColumn)) : this.columns;
520
+ return new _VuuDataSource({
521
+ columns,
522
+ table: sessionTable
523
+ });
487
524
  }
488
- async beginEditSession(editSessionMode = "inline-all-rows") {
525
+ async beginEditSession(editSessionMode = "all-rows") {
489
526
  const rpcResponse = await this?.rpcRequest?.({
490
527
  type: "RPC_REQUEST",
491
528
  rpcName: "beginEditSession",
@@ -496,8 +533,10 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
496
533
  if (vuuUtils.isRpcSuccess(rpcResponse)) {
497
534
  const { table: sessionTable } = rpcResponse.data;
498
535
  if (vuuUtils.isInlineEditingSession(editSessionMode)) {
536
+ const columns = __privateGet(this, _sessionTableMessageColumn) ? this.columns.concat(__privateGet(this, _sessionTableMessageColumn)) : this.columns;
499
537
  __privateSet(this, _sessionDataSource, new _VuuDataSource({
500
- columns: this.columns,
538
+ ...this.config,
539
+ columns,
501
540
  table: sessionTable,
502
541
  viewport: sessionTable.table
503
542
  }));
@@ -509,7 +548,7 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
509
548
  );
510
549
  } else {
511
550
  return new _VuuDataSource({
512
- columns: this.columns,
551
+ ...this.config,
513
552
  table: sessionTable,
514
553
  viewport: sessionTable.table
515
554
  });
@@ -521,11 +560,8 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
521
560
  }
522
561
  }
523
562
  async editCell(key, column, data) {
524
- console.log(
525
- `[VuuDataSource] editCell ${__privateGet(this, _sessionDataSource)?.viewport} rowKey ${key}, column ${column}, value ${data}`
526
- );
527
563
  const rpcHost = __privateGet(this, _sessionDataSource) ?? this;
528
- const rpcResponse = await rpcHost.rpcRequest?.({
564
+ return rpcHost.rpcRequest?.({
529
565
  type: "RPC_REQUEST",
530
566
  rpcName: "editCell",
531
567
  params: {
@@ -534,26 +570,31 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
534
570
  key
535
571
  }
536
572
  });
537
- if (vuuUtils.isRpcSuccess(rpcResponse)) {
538
- console.log("edit succeeded");
539
- } else {
540
- throw Error("oh oh");
541
- }
542
573
  }
543
- async endEditSession(saveChanges = false) {
544
- console.log(`[VuuDataSource] endEditSession saveChanges ${saveChanges}`);
574
+ async endEditSession(saveChanges = false, force = false) {
545
575
  const type = "RPC_REQUEST";
546
576
  const rpcName = "endEditSession";
547
- const rpcHost = __privateGet(this, _sessionDataSource) ?? this;
577
+ const sessionDataSource = __privateGet(this, _sessionDataSource);
578
+ const rpcHost = sessionDataSource ?? this;
579
+ if (sessionDataSource) {
580
+ __privateSet(this, _sessionDataSource, void 0);
581
+ }
548
582
  const rpcResponse = await rpcHost.rpcRequest?.(
549
- saveChanges ? { type, rpcName, params: { save: true } } : { type, rpcName, params: {} }
583
+ saveChanges ? { type, rpcName, params: { save: true, force } } : { type, rpcName, params: {} }
550
584
  );
551
585
  if (vuuUtils.isRpcSuccess(rpcResponse)) {
552
- console.log("edit succeeded");
553
- __privateGet(this, _sessionDataSource)?.unsubscribe();
586
+ if (sessionDataSource) {
587
+ sessionDataSource?.unsubscribe();
588
+ }
554
589
  } else {
555
- throw Error("oh oh");
590
+ if (rpcResponse?.errorMessage === "stale update") {
591
+ __privateSet(this, _sessionDataSource, sessionDataSource);
592
+ throw new vuuUtils.StaleUpdateError(rpcResponse.errorMessage);
593
+ } else {
594
+ throw Error("unknown error");
595
+ }
556
596
  }
597
+ this.sendResumeMessage();
557
598
  }
558
599
  async rpcRequest(rpcRequest) {
559
600
  if (this.viewport && this.server) {
@@ -588,6 +629,7 @@ _menu = new WeakMap();
588
629
  _optimize = new WeakMap();
589
630
  _selectedRowsCount = new WeakMap();
590
631
  _sessionDataSource = new WeakMap();
632
+ _sessionTableMessageColumn = new WeakMap();
591
633
  _status = new WeakMap();
592
634
  _tableSchema = new WeakMap();
593
635
  let VuuDataSource = _VuuDataSource;
@@ -1 +1 @@
1
- {"version":3,"file":"VuuDataSource.js","sources":["../../../packages/vuu-data-remote/src/VuuDataSource.ts"],"sourcesContent":["import type {\n DataSource,\n DataSourceCallbackMessage,\n DataSourceConstructorProps,\n DataSourceStatus,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n DataSourceVisualLinkCreatedMessage,\n EditSessionMode,\n OptimizeStrategy,\n ServerAPI,\n TableSchema,\n WithBaseFilter,\n WithFullConfig,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n LinkDescriptorWithLabel,\n RpcResultError,\n RpcResultSuccess,\n SelectRequest,\n VuuCreateVisualLink,\n VuuGroupBy,\n VuuMenu,\n VuuRange,\n VuuRowDataItemType,\n VuuRpcMenuRequest,\n VuuRpcResponse,\n VuuRpcServiceRequest,\n VuuTable,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { MenuRpcResponse } from \"@vuu-ui/vuu-data-types\";\nimport {\n BaseDataSource,\n combineFilters,\n debounce,\n isConfigChanged,\n isInlineEditingSession,\n isRpcSuccess,\n isSelectSuccessWithRowCount,\n isViewportMenusAction,\n isVisualLinksAction,\n itemsOrOrderChanged,\n logger,\n Range,\n throttle,\n uuid,\n} from \"@vuu-ui/vuu-utils\";\nimport ConnectionManager from \"./ConnectionManager\";\nimport { isDataSourceConfigMessage } from \"./data-source\";\n\ntype RangeRequest = (range: VuuRange) => void;\n\nconst { info, infoEnabled } = logger(\"VuuDataSource\");\n\n/**\n * Autosubscribe columns are always included in a subscription.\n * The same columns may or may not be included in subscription\n * requested by client and client may change column list over\n * lifetime of dataSource. Always make sure we include the\n * autosubscription columns, but never repeat them\n */\nconst combineColumnsWithAutosubscribeColumns = (\n columns: string[],\n autosubscribeColumns: string[] = [],\n) => {\n if (autosubscribeColumns.length === 0) {\n return columns;\n } else {\n const out = columns.slice();\n autosubscribeColumns.forEach((name) => {\n if (!out.includes(name)) {\n out.push(name);\n }\n });\n return out;\n }\n};\n\n/*---------------------------------------------------------------------\n A VuuDataSource manages a single subscription via the ServerProxy\n ---------------------------------------------------------------------*/\nexport class VuuDataSource extends BaseDataSource implements DataSource {\n private bufferSize: number;\n private server: ServerAPI | null = null;\n rangeRequest: RangeRequest;\n\n /**\n * this is the combined set of regular columns and autosubscribe columns\n */\n #allColumns: undefined | string[];\n #autosubscribeColumns: string[] = [];\n #pendingVisualLink?: LinkDescriptorWithLabel;\n #links: LinkDescriptorWithLabel[] | undefined;\n #menu: VuuMenu | undefined;\n #optimize: OptimizeStrategy = \"throttle\";\n #selectedRowsCount = 0;\n #sessionDataSource: DataSource | undefined = undefined;\n #status: DataSourceStatus = \"initialising\";\n #tableSchema: TableSchema | undefined;\n\n public table: VuuTable;\n\n constructor(props: DataSourceConstructorProps) {\n super(props);\n\n const { bufferSize = 100, table, visualLink } = props;\n\n if (!table)\n throw Error(\"RemoteDataSource constructor called without table\");\n\n this.bufferSize = bufferSize;\n this.table = table;\n\n this.#pendingVisualLink = visualLink;\n\n // this.rangeRequest = this.throttleRangeRequest;\n this.rangeRequest = this.rawRangeRequest;\n\n if (props.autosubscribeColumns) {\n this.#autosubscribeColumns = props.autosubscribeColumns;\n this.#allColumns = combineColumnsWithAutosubscribeColumns(\n super.columns,\n props.autosubscribeColumns,\n );\n }\n }\n\n async subscribe(\n subscribeProps: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n // super.subscribe(subscribeProps, this.handleMessageFromServer);\n super.subscribe(subscribeProps, callback);\n const { viewport = this.viewport || (this.viewport = uuid()) } =\n subscribeProps;\n\n console.log(`[VuuDataSource] subscribe ${this.viewport}`);\n\n if (\n this.#status === \"disabled\" ||\n this.#status === \"disabling\" ||\n this.#status === \"enabling\"\n ) {\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 this.enable(callback);\n return;\n }\n\n if (this.#status !== \"initialising\" && this.#status !== \"unsubscribed\") {\n throw Error(\n `[VuuDataSource] invalid status ${this.#status} for subscribe`,\n );\n }\n\n this.#status = \"subscribing\";\n\n this.server = await ConnectionManager.serverAPI;\n\n const { bufferSize } = this;\n\n const { columns, ...dataSourceConfig } = combineFilters(this.config);\n\n // TODO and await response here\n this.server?.subscribe(\n {\n ...dataSourceConfig,\n bufferSize,\n columns: this.columns,\n range: this._range.withBuffer,\n table: this.table,\n title: this._title,\n viewport,\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 = \"subscribed\";\n this.emit(\"enabled\", this.viewport);\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.isAwaitingConfirmationOfConfigChange) {\n this.confirmConfigChange();\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 if (infoEnabled && message.type === \"viewport-update\") {\n info(\n `handleMessageFromServer<viewport-update> range (${message.range?.from}:${message.range?.to}) rows ${message.rows?.at(0)?.[0]} - ${message.rows?.at(-1)?.[0]}`,\n );\n }\n this._clientCallback?.(message);\n }\n\n if (this.optimize === \"debounce\") {\n this.revertDebounce();\n }\n }\n };\n\n handleSessionMessageFromServer = (msg: DataSourceCallbackMessage) => {\n if (msg.type === \"subscribed\") {\n console.log(`[VuuDataSource subscribed to session table]`);\n } else if (msg.type === \"viewport-update\") {\n if (msg.size !== undefined && msg.size !== this.size) {\n this.size = msg.size;\n this.emit(\"resize\", msg.size);\n }\n console.log(`[VuuDataSource] clientCallback with ${msg.type}`);\n this._clientCallback?.(msg);\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 = \"\";\n this.range = Range(0, 0);\n }\n }\n\n suspend(\n escalateToDisable = this._defaultSuspenseProps.escalateToDisable,\n escalateDelay = this._defaultSuspenseProps.escalateDelay,\n ) {\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 escalateDelay,\n escalateToDisable,\n type: \"suspend\",\n viewport: this.viewport,\n });\n this.emit(\"suspended\", this.viewport);\n }\n }\n }\n\n resume(callback?: DataSourceSubscribeCallback) {\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 if (this.#selectedRowsCount > 0) {\n this.emit(\"row-selection\", this.#selectedRowsCount);\n }\n }\n }\n }\n\n freeze() {\n super.freeze();\n if (this.viewport) {\n this.server?.send({\n viewport: this.viewport,\n type: \"FREEZE_VP\",\n });\n }\n }\n\n unfreeze() {\n super.unfreeze();\n if (this.viewport) {\n this.server?.send({\n viewport: this.viewport,\n type: \"UNFREEZE_VP\",\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?: DataSourceSubscribeCallback) {\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 // TODO is this a bit premature ?\n this.emit(\"enabled\", this.viewport);\n }\n }\n\n async select(selectRequest: Omit<SelectRequest, \"vpId\">) {\n if (this.viewport && this.server) {\n const response = await this.server.select({\n ...selectRequest,\n vpId: this.viewport,\n } as SelectRequest);\n if (isSelectSuccessWithRowCount(response)) {\n console.log(\n `[VuuDataSource] select selectedRowCount ${response.selectedRowCount}`,\n );\n this.#selectedRowsCount = response.selectedRowCount;\n this.emit(\"row-selection\", response.selectedRowCount);\n } else {\n console.warn(`select error`);\n }\n }\n }\n\n openTreeNode(keyOrIndex: string | number) {\n if (this.viewport) {\n const [key, index] =\n typeof keyOrIndex === \"string\" ? [keyOrIndex] : [undefined, keyOrIndex];\n this.server?.send({\n index,\n key,\n type: \"openTreeNode\",\n viewport: this.viewport,\n });\n }\n }\n\n closeTreeNode(keyOrIndex: string | number) {\n if (this.viewport) {\n const [key, index] =\n typeof keyOrIndex === \"string\" ? [keyOrIndex] : [undefined, keyOrIndex];\n this.server?.send({\n index,\n key,\n type: \"closeTreeNode\",\n viewport: this.viewport,\n });\n }\n }\n\n //TODO is this going to be confusing - the lack of symmetry between set and get columns\n // when there are autoSubscribe columns ?\n // alternative would be an allColumns prop, but every datasource would then have to add it.\n get columns() {\n return this.#allColumns ?? super.columns;\n }\n\n set columns(columns: string[]) {\n super.columns = columns;\n if (this.#autosubscribeColumns.length) {\n this.#allColumns = combineColumnsWithAutosubscribeColumns(\n columns,\n this.#autosubscribeColumns,\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 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 super.config;\n }\n\n set config(config: WithBaseFilter<WithFullConfig>) {\n const { noChanges, columnsChanged } = isConfigChanged(this.config, config);\n if (!noChanges) {\n super.config = config;\n\n const { columns, ...dataSourceConfig } = combineFilters(this.config);\n const serverConfig: WithFullConfig = {\n ...dataSourceConfig,\n columns: combineColumnsWithAutosubscribeColumns(\n columns,\n this.#autosubscribeColumns,\n ),\n };\n\n if (columnsChanged && this.#autosubscribeColumns.length) {\n this.#allColumns = combineColumnsWithAutosubscribeColumns(\n columns,\n this.#autosubscribeColumns,\n );\n }\n\n this.server?.send({\n viewport: this.viewport,\n type: \"config\",\n config: serverConfig,\n });\n }\n }\n\n set impendingConfig(config: WithBaseFilter<WithFullConfig>) {\n if (config !== this.config) {\n super.impendingConfig = config;\n this.server?.send({\n viewport: this.viewport,\n type: \"config\",\n config: combineFilters(this.config),\n });\n }\n }\n\n get groupBy() {\n return this._configWithVisualLink.groupBy;\n }\n\n set groupBy(groupBy: VuuGroupBy) {\n if (itemsOrOrderChanged(this.groupBy, groupBy)) {\n const wasGrouped = this.groupBy.length > 0;\n\n this.impendingConfig = {\n ...this._configWithVisualLink,\n groupBy,\n };\n\n if (!wasGrouped && groupBy.length > 0 && this.viewport) {\n // clear data from table whilst we wait for grouped data from server\n this._clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"batch\",\n type: \"viewport-update\",\n size: 0,\n rows: [],\n });\n }\n }\n }\n\n get title() {\n return super.title || `${this.table.module} ${this.table.table}`;\n }\n\n set title(title: string) {\n super.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 }\n\n get visualLink() {\n return this._configWithVisualLink.visualLink;\n }\n\n set visualLink(visualLink: LinkDescriptorWithLabel | undefined) {\n this._configWithVisualLink = {\n ...this._configWithVisualLink,\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._configWithVisualLink, this.range);\n }\n\n async remoteProcedureCall<T extends VuuRpcResponse = VuuRpcResponse>() {\n return Promise.reject<T>();\n }\n\n createSessionDataSource(sessionTable: VuuTable) {\n //TODO filters, sort etc\n return new VuuDataSource({ columns: this.columns, table: sessionTable });\n }\n\n async beginEditSession(editSessionMode: EditSessionMode = \"inline-all-rows\") {\n const rpcResponse = await this?.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"beginEditSession\",\n params: {\n editSessionMode,\n },\n });\n\n if (isRpcSuccess(rpcResponse)) {\n const { table: sessionTable } = rpcResponse.data as { table: VuuTable };\n\n if (isInlineEditingSession(editSessionMode)) {\n this.#sessionDataSource = new VuuDataSource({\n columns: this.columns,\n table: sessionTable,\n viewport: sessionTable.table,\n });\n\n this.#sessionDataSource.subscribe(\n {\n range: this.range,\n },\n this.handleSessionMessageFromServer,\n );\n } else {\n return new VuuDataSource({\n columns: this.columns,\n table: sessionTable,\n viewport: sessionTable.table,\n });\n }\n\n // we need to route messages from the session datasource to listening\n // client whilst still monitoring responses on the source table to which\n // we are currently subscribed.\n } else {\n throw Error(\n `[VuuDataSource] beginEditSession ${rpcResponse.errorMessage}`,\n );\n ///\n }\n }\n\n async editCell(key: string, column: string, data: VuuRowDataItemType) {\n console.log(\n `[VuuDataSource] editCell ${this.#sessionDataSource?.viewport} rowKey ${key}, column ${column}, value ${data}`,\n );\n\n const rpcHost = this.#sessionDataSource ?? this;\n\n const rpcResponse = await rpcHost.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"editCell\",\n params: {\n column,\n data,\n key,\n },\n });\n\n if (isRpcSuccess(rpcResponse)) {\n console.log(\"edit succeeded\");\n } else {\n throw Error(\"oh oh\");\n }\n }\n\n async endEditSession(saveChanges = false) {\n console.log(`[VuuDataSource] endEditSession saveChanges ${saveChanges}`);\n\n const type = \"RPC_REQUEST\";\n const rpcName = \"endEditSession\";\n\n const rpcHost = this.#sessionDataSource ?? this;\n\n const rpcResponse = await rpcHost.rpcRequest?.(\n saveChanges\n ? { type, rpcName, params: { save: true } }\n : { type, rpcName, params: {} },\n );\n\n if (isRpcSuccess(rpcResponse)) {\n console.log(\"edit succeeded\");\n this.#sessionDataSource?.unsubscribe();\n // how do we ensure rows sent to clicnt\n } else {\n throw Error(\"oh oh\");\n }\n }\n\n async rpcRequest(rpcRequest: Omit<VuuRpcServiceRequest, \"context\">) {\n if (this.viewport && this.server) {\n return this.server?.rpcCall<RpcResultSuccess | RpcResultError>({\n ...rpcRequest,\n context: { type: \"VIEWPORT_CONTEXT\", viewPortId: this.viewport },\n } as VuuRpcServiceRequest);\n } else {\n throw Error(`rpcCall server or viewport are undefined`);\n }\n }\n\n async menuRpcCall(rpcRequest: Omit<VuuRpcMenuRequest, \"vpId\">) {\n if (this.viewport) {\n return this.server?.rpcCall<MenuRpcResponse>({\n ...rpcRequest,\n vpId: this.viewport,\n } as VuuRpcMenuRequest);\n }\n }\n\n insertRow() {\n return Promise.resolve(\"not supported\");\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() {\n return Promise.resolve(\"not supported\");\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","BaseDataSource","isDataSourceConfigMessage","isViewportMenusAction","isVisualLinksAction","debounce","throttle","uuid","combineFilters","Range","isSelectSuccessWithRowCount","isConfigChanged","itemsOrOrderChanged","isRpcSuccess","isInlineEditingSession"],"mappings":"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"}
1
+ {"version":3,"file":"VuuDataSource.js","sources":["../../../packages/vuu-data-remote/src/VuuDataSource.ts"],"sourcesContent":["import type {\n DataSource,\n DataSourceCallbackMessage,\n DataSourceConstructorProps,\n DataSourceStatus,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n DataSourceVisualLinkCreatedMessage,\n EditSessionMode,\n OptimizeStrategy,\n ServerAPI,\n TableSchema,\n WithBaseFilter,\n WithFullConfig,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n LinkDescriptorWithLabel,\n RpcResultError,\n RpcResultSuccess,\n SelectRequest,\n VuuCreateVisualLink,\n VuuGroupBy,\n VuuMenu,\n VuuRange,\n VuuRowDataItemType,\n VuuRpcMenuRequest,\n VuuRpcResponse,\n VuuRpcServiceRequest,\n VuuTable,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { MenuRpcResponse } from \"@vuu-ui/vuu-data-types\";\nimport {\n BaseDataSource,\n combineFilters,\n debounce,\n isConfigChanged,\n isInlineEditingSession,\n isRpcSuccess,\n isSelectSuccessWithRowCount,\n isViewportMenusAction,\n isVisualLinksAction,\n itemsOrOrderChanged,\n logger,\n Range,\n StaleUpdateError,\n throttle,\n uuid,\n} from \"@vuu-ui/vuu-utils\";\nimport ConnectionManager from \"./ConnectionManager\";\nimport { isDataSourceConfigMessage } from \"./data-source\";\n\ntype RangeRequest = (range: VuuRange) => void;\n\nconst { info, infoEnabled } = logger(\"VuuDataSource\");\n\n/**\n * Autosubscribe columns are always included in a subscription.\n * The same columns may or may not be included in subscription\n * requested by client and client may change column list over\n * lifetime of dataSource. Always make sure we include the\n * autosubscription columns, but never repeat them\n */\nconst combineColumnsWithAutosubscribeColumns = (\n columns: string[],\n autosubscribeColumns: string[] = [],\n) => {\n if (autosubscribeColumns.length === 0) {\n return columns;\n } else {\n const out = columns.slice();\n autosubscribeColumns.forEach((name) => {\n if (!out.includes(name)) {\n out.push(name);\n }\n });\n return out;\n }\n};\n\n/*---------------------------------------------------------------------\n A VuuDataSource manages a single subscription via the ServerProxy\n ---------------------------------------------------------------------*/\nexport class VuuDataSource extends BaseDataSource implements DataSource {\n private bufferSize: number;\n private server: ServerAPI | null = null;\n rangeRequest: RangeRequest;\n\n /**\n * this is the combined set of regular columns and autosubscribe columns\n */\n #allColumns: undefined | string[];\n #autosubscribeColumns: string[] = [];\n #pendingVisualLink?: LinkDescriptorWithLabel;\n #links: LinkDescriptorWithLabel[] | undefined;\n #menu: VuuMenu | undefined;\n #optimize: OptimizeStrategy = \"throttle\";\n #selectedRowsCount = 0;\n #sessionDataSource: DataSource | undefined = undefined;\n #sessionTableMessageColumn: string | undefined = undefined;\n #status: DataSourceStatus = \"initialising\";\n #tableSchema: TableSchema | undefined;\n\n public table: VuuTable;\n\n constructor({\n sessionTableMessageColumn,\n ...props\n }: DataSourceConstructorProps) {\n super(props);\n\n const { bufferSize = 100, table, visualLink } = props;\n\n if (!table)\n throw Error(\"RemoteDataSource constructor called without table\");\n\n this.bufferSize = bufferSize;\n this.table = table;\n\n this.#pendingVisualLink = visualLink;\n this.#sessionTableMessageColumn = sessionTableMessageColumn;\n // this.rangeRequest = this.throttleRangeRequest;\n this.rangeRequest = this.rawRangeRequest;\n\n if (props.autosubscribeColumns) {\n this.#autosubscribeColumns = props.autosubscribeColumns;\n this.#allColumns = combineColumnsWithAutosubscribeColumns(\n super.columns,\n props.autosubscribeColumns,\n );\n }\n }\n\n async subscribe(\n subscribeProps: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n // super.subscribe(subscribeProps, this.handleMessageFromServer);\n super.subscribe(subscribeProps, callback);\n const { viewport = this.viewport || (this.viewport = uuid()) } =\n subscribeProps;\n\n console.log(`[VuuDataSource] subscribe ${this.viewport}`);\n\n if (\n this.#status === \"disabled\" ||\n this.#status === \"disabling\" ||\n this.#status === \"enabling\"\n ) {\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 this.enable(callback);\n return;\n }\n\n if (this.#status !== \"initialising\" && this.#status !== \"unsubscribed\") {\n throw Error(\n `[VuuDataSource] invalid status ${this.#status} for subscribe`,\n );\n }\n\n this.#status = \"subscribing\";\n\n this.server = await ConnectionManager.serverAPI;\n\n const { bufferSize } = this;\n\n const { columns, ...dataSourceConfig } = combineFilters(this.config);\n\n // TODO and await response here\n this.server?.subscribe(\n {\n ...dataSourceConfig,\n bufferSize,\n columns: this.columns,\n range: this._range.withBuffer,\n table: this.table,\n title: this._title,\n viewport,\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 = \"subscribed\";\n this.emit(\"enabled\", this.viewport);\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 (message.type === \"viewport-update\") {\n if (message.size !== undefined && message.size !== this.size) {\n this.size = message.size;\n this.emit(\"resize\", message.size);\n }\n\n if (\n Array.isArray(message.rows) &&\n message.rows.length > 0 &&\n this.#sessionDataSource\n ) {\n this.emit(\"remote-update-during-local-edit\", message.rows);\n console.log(\n `updates incoming whilst edit in progress ${this.viewport}`,\n );\n console.table(message.rows);\n return;\n }\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.isAwaitingConfirmationOfConfigChange) {\n this.confirmConfigChange();\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 if (infoEnabled && message.type === \"viewport-update\") {\n info(\n `handleMessageFromServer<viewport-update> range (${message.range?.from}:${message.range?.to}) rows ${message.rows?.at(0)?.[0]} - ${message.rows?.at(-1)?.[0]}`,\n );\n }\n this._clientCallback?.(message);\n }\n\n if (this.optimize === \"debounce\") {\n this.revertDebounce();\n }\n }\n };\n\n handleSessionMessageFromServer = (msg: DataSourceCallbackMessage) => {\n if (msg.type === \"subscribed\") {\n console.log(`[VuuDataSource subscribed to session table]`);\n } else if (msg.type === \"viewport-update\") {\n if (msg.size !== undefined && msg.size !== this.size) {\n this.size = msg.size;\n this.emit(\"resize\", msg.size);\n }\n console.log(`[VuuDataSource] clientCallback with ${msg.type}`);\n this._clientCallback?.(msg);\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 = \"\";\n this.range = Range(0, 0);\n }\n }\n\n suspend(\n escalateToDisable = this._defaultSuspenseProps.escalateToDisable,\n escalateDelay = this._defaultSuspenseProps.escalateDelay,\n ) {\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 escalateDelay,\n escalateToDisable,\n type: \"suspend\",\n viewport: this.viewport,\n });\n this.emit(\"suspended\", this.viewport);\n }\n }\n }\n\n /**\n * Tell the server we wish to resume receiving messages. Server will send a\n * snapshot of rows currently in cache. This can be used to update with\n * latest data, e.g after an edit session during which we might have ignored\n * some updates.\n */\n private sendResumeMessage() {\n this.server?.send({\n type: \"resume\",\n viewport: this.viewport,\n });\n }\n\n resume(callback?: DataSourceSubscribeCallback) {\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.sendResumeMessage();\n this.#status = \"subscribed\";\n this.emit(\"resumed\", this.viewport);\n\n if (this.#selectedRowsCount > 0) {\n this.emit(\"row-selection\", this.#selectedRowsCount);\n }\n }\n }\n }\n\n freeze() {\n super.freeze();\n if (this.viewport) {\n this.server?.send({\n viewport: this.viewport,\n type: \"FREEZE_VP\",\n });\n }\n }\n\n unfreeze() {\n super.unfreeze();\n if (this.viewport) {\n this.server?.send({\n viewport: this.viewport,\n type: \"UNFREEZE_VP\",\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?: DataSourceSubscribeCallback) {\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 // TODO is this a bit premature ?\n this.emit(\"enabled\", this.viewport);\n }\n }\n\n async select(selectRequest: Omit<SelectRequest, \"vpId\">) {\n if (this.viewport && this.server) {\n const response = await this.server.select({\n ...selectRequest,\n vpId: this.viewport,\n } as SelectRequest);\n if (isSelectSuccessWithRowCount(response)) {\n console.log(\n `[VuuDataSource] select selectedRowCount ${response.selectedRowCount}`,\n );\n this.#selectedRowsCount = response.selectedRowCount;\n this.emit(\"row-selection\", response.selectedRowCount);\n } else {\n console.warn(`select error`);\n }\n }\n }\n\n openTreeNode(keyOrIndex: string | number) {\n if (this.viewport) {\n const [key, index] =\n typeof keyOrIndex === \"string\" ? [keyOrIndex] : [undefined, keyOrIndex];\n this.server?.send({\n index,\n key,\n type: \"openTreeNode\",\n viewport: this.viewport,\n });\n }\n }\n\n closeTreeNode(keyOrIndex: string | number) {\n if (this.viewport) {\n const [key, index] =\n typeof keyOrIndex === \"string\" ? [keyOrIndex] : [undefined, keyOrIndex];\n this.server?.send({\n index,\n key,\n type: \"closeTreeNode\",\n viewport: this.viewport,\n });\n }\n }\n\n //TODO is this going to be confusing - the lack of symmetry between set and get columns\n // when there are autoSubscribe columns ?\n // alternative would be an allColumns prop, but every datasource would then have to add it.\n get columns() {\n return this.#allColumns ?? super.columns;\n }\n\n set columns(columns: string[]) {\n super.columns = columns;\n if (this.#autosubscribeColumns.length) {\n this.#allColumns = combineColumnsWithAutosubscribeColumns(\n columns,\n this.#autosubscribeColumns,\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 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 super.config;\n }\n\n set config(config: WithBaseFilter<WithFullConfig>) {\n const { noChanges, columnsChanged } = isConfigChanged(this.config, config);\n if (!noChanges) {\n super.config = config;\n\n const { columns, ...dataSourceConfig } = combineFilters(this.config);\n const serverConfig: WithFullConfig = {\n ...dataSourceConfig,\n columns: combineColumnsWithAutosubscribeColumns(\n columns,\n this.#autosubscribeColumns,\n ),\n };\n\n if (columnsChanged && this.#autosubscribeColumns.length) {\n this.#allColumns = combineColumnsWithAutosubscribeColumns(\n columns,\n this.#autosubscribeColumns,\n );\n }\n\n this.server?.send({\n viewport: this.viewport,\n type: \"config\",\n config: serverConfig,\n });\n }\n }\n\n set impendingConfig(config: WithBaseFilter<WithFullConfig>) {\n if (config !== this.config) {\n super.impendingConfig = config;\n this.server?.send({\n viewport: this.viewport,\n type: \"config\",\n config: combineFilters(this.config),\n });\n }\n }\n\n get groupBy() {\n return this._configWithVisualLink.groupBy;\n }\n\n set groupBy(groupBy: VuuGroupBy) {\n if (itemsOrOrderChanged(this.groupBy, groupBy)) {\n const wasGrouped = this.groupBy.length > 0;\n\n this.impendingConfig = {\n ...this._configWithVisualLink,\n groupBy,\n };\n\n if (!wasGrouped && groupBy.length > 0 && this.viewport) {\n // clear data from table whilst we wait for grouped data from server\n this._clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"batch\",\n type: \"viewport-update\",\n size: 0,\n rows: [],\n });\n }\n }\n }\n\n get range() {\n return super.range;\n }\n\n set range(range: Range) {\n super.range = range;\n if (this.#sessionDataSource) {\n this.#sessionDataSource.range = range;\n }\n }\n\n get title() {\n return super.title || `${this.table.module} ${this.table.table}`;\n }\n\n set title(title: string) {\n super.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 }\n\n get visualLink() {\n return this._configWithVisualLink.visualLink;\n }\n\n set visualLink(visualLink: LinkDescriptorWithLabel | undefined) {\n this._configWithVisualLink = {\n ...this._configWithVisualLink,\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._configWithVisualLink, this.range);\n }\n\n async remoteProcedureCall<T extends VuuRpcResponse = VuuRpcResponse>() {\n return Promise.reject<T>();\n }\n\n createSessionDataSource(sessionTable: VuuTable) {\n //TODO filters, sort etc\n const columns = this.#sessionTableMessageColumn\n ? this.columns.concat(this.#sessionTableMessageColumn)\n : this.columns;\n return new VuuDataSource({\n columns: columns,\n table: sessionTable,\n });\n }\n\n async beginEditSession(editSessionMode: EditSessionMode = \"all-rows\") {\n const rpcResponse = await this?.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"beginEditSession\",\n params: {\n editSessionMode,\n },\n });\n\n if (isRpcSuccess(rpcResponse)) {\n const { table: sessionTable } = rpcResponse.data as { table: VuuTable };\n\n if (isInlineEditingSession(editSessionMode)) {\n const columns = this.#sessionTableMessageColumn\n ? this.columns.concat(this.#sessionTableMessageColumn)\n : this.columns;\n this.#sessionDataSource = new VuuDataSource({\n ...this.config,\n columns,\n table: sessionTable,\n viewport: sessionTable.table,\n });\n\n this.#sessionDataSource.subscribe(\n {\n range: this.range,\n },\n this.handleSessionMessageFromServer,\n );\n } else {\n return new VuuDataSource({\n ...this.config,\n table: sessionTable,\n viewport: sessionTable.table,\n });\n }\n\n // we need to route messages from the session datasource to listening\n // client whilst still monitoring responses on the source table to which\n // we are currently subscribed.\n } else {\n throw Error(\n `[VuuDataSource] beginEditSession ${rpcResponse.errorMessage}`,\n );\n ///\n }\n }\n\n async editCell(key: string, column: string, data: VuuRowDataItemType) {\n const rpcHost = this.#sessionDataSource ?? this;\n return rpcHost.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"editCell\",\n params: {\n column,\n data,\n key,\n },\n });\n }\n\n async endEditSession(saveChanges = false, force = false) {\n const type = \"RPC_REQUEST\";\n const rpcName = \"endEditSession\";\n const sessionDataSource = this.#sessionDataSource;\n const rpcHost = sessionDataSource ?? this;\n\n if (sessionDataSource) {\n // timing is important here. By breaking this reference before\n // we send the endEdit RPC call, the application of session edits\n // to the source table will be handled correctly.\n this.#sessionDataSource = undefined;\n }\n\n const rpcResponse = await rpcHost.rpcRequest?.(\n saveChanges\n ? { type, rpcName, params: { save: true, force } }\n : { type, rpcName, params: {} },\n );\n\n if (isRpcSuccess(rpcResponse)) {\n if (sessionDataSource) {\n sessionDataSource?.unsubscribe();\n }\n } else {\n if (rpcResponse?.errorMessage === \"stale update\") {\n this.#sessionDataSource = sessionDataSource;\n throw new StaleUpdateError(rpcResponse.errorMessage);\n } else {\n throw Error(\"unknown error\");\n }\n }\n\n this.sendResumeMessage();\n }\n\n async rpcRequest(rpcRequest: Omit<VuuRpcServiceRequest, \"context\">) {\n if (this.viewport && this.server) {\n return this.server?.rpcCall<RpcResultSuccess | RpcResultError>({\n ...rpcRequest,\n context: { type: \"VIEWPORT_CONTEXT\", viewPortId: this.viewport },\n } as VuuRpcServiceRequest);\n } else {\n throw Error(`rpcCall server or viewport are undefined`);\n }\n }\n\n async menuRpcCall(rpcRequest: Omit<VuuRpcMenuRequest, \"vpId\">) {\n if (this.viewport) {\n return this.server?.rpcCall<MenuRpcResponse>({\n ...rpcRequest,\n vpId: this.viewport,\n } as VuuRpcMenuRequest);\n }\n }\n\n insertRow() {\n return Promise.resolve(\"not supported\");\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() {\n return Promise.resolve(\"not supported\");\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","BaseDataSource","isDataSourceConfigMessage","isViewportMenusAction","isVisualLinksAction","debounce","throttle","uuid","combineFilters","Range","isSelectSuccessWithRowCount","isConfigChanged","itemsOrOrderChanged","isRpcSuccess","isInlineEditingSession","StaleUpdateError"],"mappings":"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"}
@@ -31,7 +31,8 @@ const datasourceMessages = [
31
31
  "vuu-links",
32
32
  "vuu-menu",
33
33
  "sort",
34
- "subscribed"
34
+ "subscribed",
35
+ "subscribe-failed"
35
36
  ];
36
37
  const shouldMessageBeRoutedToDataSource = (message) => {
37
38
  const type = message.type;
@@ -1 +1 @@
1
- {"version":3,"file":"data-source.js","sources":["../../../packages/vuu-data-remote/src/data-source.ts"],"sourcesContent":["import type {\n DataSourceCallbackMessage,\n DataSourceConfig,\n DataSourceConfigMessage,\n DataSourceDataSizeMessage,\n WithRequestId,\n} from \"@vuu-ui/vuu-data-types\";\nimport type { SelectSuccessWithRowCount } from \"@vuu-ui/vuu-protocol-types\";\n\nexport const isSizeOnly = (\n message: DataSourceCallbackMessage,\n): message is DataSourceDataSizeMessage =>\n message.type === \"viewport-update\" && message.mode === \"size-only\";\n\nexport const toDataSourceConfig = (\n message: DataSourceConfigMessage,\n): DataSourceConfig => {\n switch (message.type) {\n case \"aggregate\":\n return { aggregations: message.aggregations };\n case \"columns\":\n return { columns: message.columns };\n case \"filter\":\n return { filterSpec: message.filter };\n case \"groupBy\":\n return { groupBy: message.groupBy };\n case \"sort\":\n return { sort: message.sort };\n case \"config\":\n return message.config;\n }\n};\n\nconst datasourceMessages = [\n \"config\",\n \"aggregate\",\n \"viewport-clear\",\n \"viewport-update\",\n \"columns\",\n \"debounce-begin\",\n \"disabled\",\n \"enabled\",\n \"filter\",\n \"groupBy\",\n \"vuu-links\",\n \"vuu-menu\",\n \"sort\",\n \"subscribed\",\n];\n\nexport const shouldMessageBeRoutedToDataSource = (\n message: unknown,\n): message is Exclude<\n DataSourceCallbackMessage,\n WithRequestId<SelectSuccessWithRowCount>\n> => {\n const type = (message as DataSourceCallbackMessage).type;\n return datasourceMessages.includes(type);\n};\n\nexport const isDataSourceConfigMessage = (\n message: DataSourceCallbackMessage,\n): message is DataSourceConfigMessage =>\n [\"config\", \"aggregate\", \"columns\", \"filter\", \"groupBy\", \"sort\"].includes(\n message.type,\n );\n"],"names":[],"mappings":";;AASO,MAAM,aAAa,CACxB,OAAA,KAEA,QAAQ,IAAS,KAAA,iBAAA,IAAqB,QAAQ,IAAS,KAAA;AAE5C,MAAA,kBAAA,GAAqB,CAChC,OACqB,KAAA;AACrB,EAAA,QAAQ,QAAQ,IAAM;AAAA,IACpB,KAAK,WAAA;AACH,MAAO,OAAA,EAAE,YAAc,EAAA,OAAA,CAAQ,YAAa,EAAA;AAAA,IAC9C,KAAK,SAAA;AACH,MAAO,OAAA,EAAE,OAAS,EAAA,OAAA,CAAQ,OAAQ,EAAA;AAAA,IACpC,KAAK,QAAA;AACH,MAAO,OAAA,EAAE,UAAY,EAAA,OAAA,CAAQ,MAAO,EAAA;AAAA,IACtC,KAAK,SAAA;AACH,MAAO,OAAA,EAAE,OAAS,EAAA,OAAA,CAAQ,OAAQ,EAAA;AAAA,IACpC,KAAK,MAAA;AACH,MAAO,OAAA,EAAE,IAAM,EAAA,OAAA,CAAQ,IAAK,EAAA;AAAA,IAC9B,KAAK,QAAA;AACH,MAAA,OAAO,OAAQ,CAAA,MAAA;AAAA;AAErB;AAEA,MAAM,kBAAqB,GAAA;AAAA,EACzB,QAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA;AAEa,MAAA,iCAAA,GAAoC,CAC/C,OAIG,KAAA;AACH,EAAA,MAAM,OAAQ,OAAsC,CAAA,IAAA;AACpD,EAAO,OAAA,kBAAA,CAAmB,SAAS,IAAI,CAAA;AACzC;AAEa,MAAA,yBAAA,GAA4B,CACvC,OAAA,KAEA,CAAC,QAAA,EAAU,aAAa,SAAW,EAAA,QAAA,EAAU,SAAW,EAAA,MAAM,CAAE,CAAA,QAAA;AAAA,EAC9D,OAAQ,CAAA;AACV;;;;;;;"}
1
+ {"version":3,"file":"data-source.js","sources":["../../../packages/vuu-data-remote/src/data-source.ts"],"sourcesContent":["import type {\n DataSourceCallbackMessage,\n DataSourceConfig,\n DataSourceConfigMessage,\n DataSourceDataSizeMessage,\n WithRequestId,\n} from \"@vuu-ui/vuu-data-types\";\nimport type { SelectSuccessWithRowCount } from \"@vuu-ui/vuu-protocol-types\";\n\nexport const isSizeOnly = (\n message: DataSourceCallbackMessage,\n): message is DataSourceDataSizeMessage =>\n message.type === \"viewport-update\" && message.mode === \"size-only\";\n\nexport const toDataSourceConfig = (\n message: DataSourceConfigMessage,\n): DataSourceConfig => {\n switch (message.type) {\n case \"aggregate\":\n return { aggregations: message.aggregations };\n case \"columns\":\n return { columns: message.columns };\n case \"filter\":\n return { filterSpec: message.filter };\n case \"groupBy\":\n return { groupBy: message.groupBy };\n case \"sort\":\n return { sort: message.sort };\n case \"config\":\n return message.config;\n }\n};\n\nconst datasourceMessages = [\n \"config\",\n \"aggregate\",\n \"viewport-clear\",\n \"viewport-update\",\n \"columns\",\n \"debounce-begin\",\n \"disabled\",\n \"enabled\",\n \"filter\",\n \"groupBy\",\n \"vuu-links\",\n \"vuu-menu\",\n \"sort\",\n \"subscribed\",\n \"subscribe-failed\",\n];\n\nexport const shouldMessageBeRoutedToDataSource = (\n message: unknown,\n): message is Exclude<\n DataSourceCallbackMessage,\n WithRequestId<SelectSuccessWithRowCount>\n> => {\n const type = (message as DataSourceCallbackMessage).type;\n return datasourceMessages.includes(type);\n};\n\nexport const isDataSourceConfigMessage = (\n message: DataSourceCallbackMessage,\n): message is DataSourceConfigMessage =>\n [\"config\", \"aggregate\", \"columns\", \"filter\", \"groupBy\", \"sort\"].includes(\n message.type,\n );\n"],"names":[],"mappings":";;AASO,MAAM,aAAa,CACxB,OAAA,KAEA,QAAQ,IAAS,KAAA,iBAAA,IAAqB,QAAQ,IAAS,KAAA;AAE5C,MAAA,kBAAA,GAAqB,CAChC,OACqB,KAAA;AACrB,EAAA,QAAQ,QAAQ,IAAM;AAAA,IACpB,KAAK,WAAA;AACH,MAAO,OAAA,EAAE,YAAc,EAAA,OAAA,CAAQ,YAAa,EAAA;AAAA,IAC9C,KAAK,SAAA;AACH,MAAO,OAAA,EAAE,OAAS,EAAA,OAAA,CAAQ,OAAQ,EAAA;AAAA,IACpC,KAAK,QAAA;AACH,MAAO,OAAA,EAAE,UAAY,EAAA,OAAA,CAAQ,MAAO,EAAA;AAAA,IACtC,KAAK,SAAA;AACH,MAAO,OAAA,EAAE,OAAS,EAAA,OAAA,CAAQ,OAAQ,EAAA;AAAA,IACpC,KAAK,MAAA;AACH,MAAO,OAAA,EAAE,IAAM,EAAA,OAAA,CAAQ,IAAK,EAAA;AAAA,IAC9B,KAAK,QAAA;AACH,MAAA,OAAO,OAAQ,CAAA,MAAA;AAAA;AAErB;AAEA,MAAM,kBAAqB,GAAA;AAAA,EACzB,QAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA;AAEa,MAAA,iCAAA,GAAoC,CAC/C,OAIG,KAAA;AACH,EAAA,MAAM,OAAQ,OAAsC,CAAA,IAAA;AACpD,EAAO,OAAA,kBAAA,CAAmB,SAAS,IAAI,CAAA;AACzC;AAEa,MAAA,yBAAA,GAA4B,CACvC,OAAA,KAEA,CAAC,QAAA,EAAU,aAAa,SAAW,EAAA,QAAA,EAAU,SAAW,EAAA,MAAM,CAAE,CAAA,QAAA;AAAA,EAC9D,OAAQ,CAAA;AACV;;;;;;;"}
@@ -132,6 +132,45 @@ var EventEmitter = class {
132
132
  };
133
133
  _events = new WeakMap();
134
134
 
135
+ // ../vuu-utils/src/protocol-message-utils.ts
136
+ var MENU_RPC_TYPES = [
137
+ "VIEW_PORT_MENUS_SELECT_RPC",
138
+ "VIEW_PORT_MENU_TABLE_RPC",
139
+ "VIEW_PORT_MENU_ROW_RPC",
140
+ "VIEW_PORT_MENU_CELL_RPC"
141
+ ];
142
+ var INVALID_SESSION = "Invalid session";
143
+ var SESSION_LIMIT_EXCEEDED = "User session limit exceeded";
144
+ var INVALID_TOKEN = "Invalid token";
145
+ var TOKEN_EXPIRED = "Token has expired";
146
+ var InvalidLoginMessages = [
147
+ INVALID_SESSION,
148
+ SESSION_LIMIT_EXCEEDED,
149
+ INVALID_TOKEN,
150
+ TOKEN_EXPIRED
151
+ ];
152
+ var isErrorMessage = (message) => typeof message == "object" && (message == null ? void 0 : message.type) === "ERROR";
153
+ var isLoginErrorMessage = (message) => typeof message === "string" && InvalidLoginMessages.includes(message);
154
+ var isSelectRequest = (message) => message && typeof message === "object" && "type" in message && (message.type === "SELECT_ROW" || message.type === "DESELECT_ROW" || message.type === "SELECT_ROW_RANGE" || message.type === "SELECT_ALL" || message.type === "DESELECT_ALL");
155
+ var isRpcServiceRequest = (message) => message.type === "RPC_REQUEST";
156
+ var hasViewPortContext = (message) => message.context.type === "VIEWPORT_CONTEXT";
157
+ var isVuuMenuRpcRequest = (message) => MENU_RPC_TYPES.includes(message["type"]);
158
+ var isOpenDialogAction = (action) => action !== void 0 && action.type === "OPEN_DIALOG_ACTION";
159
+ var isCreateVpSuccess = (response) => response.type === "CREATE_VP_SUCCESS";
160
+ var isSessionTable = (table) => {
161
+ if (table !== null && typeof table === "object" && "table" in table && "module" in table) {
162
+ return table.table.startsWith("session");
163
+ }
164
+ return false;
165
+ };
166
+ function isActionMessage(rpcResponse) {
167
+ return rpcResponse.type === "VIEW_PORT_MENU_RESP";
168
+ }
169
+ function isSessionTableActionMessage(rpcResponse) {
170
+ var _a, _b;
171
+ return isActionMessage(rpcResponse) && isOpenDialogAction(rpcResponse.action) && isSessionTable(rpcResponse.action.table) && (((_a = rpcResponse.action) == null ? void 0 : _a.renderComponent) === "inline-form" || ((_b = rpcResponse.action) == null ? void 0 : _b.renderComponent) === "grid");
172
+ }
173
+
135
174
  // ../vuu-utils/src/datasource/datasource-utils.ts
136
175
  var isConnectionQualityMetrics = (msg) => msg.type === "connection-metrics";
137
176
  var isVisualLinkMessage = (msg) => msg.type.endsWith("_VISUAL_LINK");
@@ -306,44 +345,6 @@ var RangeMonitor = class {
306
345
  }
307
346
  };
308
347
 
309
- // ../vuu-utils/src/protocol-message-utils.ts
310
- var MENU_RPC_TYPES = [
311
- "VIEW_PORT_MENUS_SELECT_RPC",
312
- "VIEW_PORT_MENU_TABLE_RPC",
313
- "VIEW_PORT_MENU_ROW_RPC",
314
- "VIEW_PORT_MENU_CELL_RPC"
315
- ];
316
- var INVALID_SESSION = "Invalid session";
317
- var SESSION_LIMIT_EXCEEDED = "User session limit exceeded";
318
- var INVALID_TOKEN = "Invalid token";
319
- var TOKEN_EXPIRED = "Token has expired";
320
- var InvalidLoginMessages = [
321
- INVALID_SESSION,
322
- SESSION_LIMIT_EXCEEDED,
323
- INVALID_TOKEN,
324
- TOKEN_EXPIRED
325
- ];
326
- var isLoginErrorMessage = (message) => typeof message === "string" && InvalidLoginMessages.includes(message);
327
- var isSelectRequest = (message) => message && typeof message === "object" && "type" in message && (message.type === "SELECT_ROW" || message.type === "DESELECT_ROW" || message.type === "SELECT_ROW_RANGE" || message.type === "SELECT_ALL" || message.type === "DESELECT_ALL");
328
- var isRpcServiceRequest = (message) => message.type === "RPC_REQUEST";
329
- var hasViewPortContext = (message) => message.context.type === "VIEWPORT_CONTEXT";
330
- var isVuuMenuRpcRequest = (message) => MENU_RPC_TYPES.includes(message["type"]);
331
- var isOpenDialogAction = (action) => action !== void 0 && action.type === "OPEN_DIALOG_ACTION";
332
- var isCreateVpSuccess = (response) => response.type === "CREATE_VP_SUCCESS";
333
- var isSessionTable = (table) => {
334
- if (table !== null && typeof table === "object" && "table" in table && "module" in table) {
335
- return table.table.startsWith("session");
336
- }
337
- return false;
338
- };
339
- function isActionMessage(rpcResponse) {
340
- return rpcResponse.type === "VIEW_PORT_MENU_RESP";
341
- }
342
- function isSessionTableActionMessage(rpcResponse) {
343
- var _a, _b;
344
- return isActionMessage(rpcResponse) && isOpenDialogAction(rpcResponse.action) && isSessionTable(rpcResponse.action.table) && (((_a = rpcResponse.action) == null ? void 0 : _a.renderComponent) === "inline-form" || ((_b = rpcResponse.action) == null ? void 0 : _b.renderComponent) === "grid");
345
- }
346
-
347
348
  // ../vuu-utils/src/keyset.ts
348
349
  var EMPTY = [];
349
350
  var KeySet = class {
@@ -1776,7 +1777,13 @@ var ServerProxy = class {
1776
1777
  pendingSubscription,
1777
1778
  pendingTableSchema
1778
1779
  ]);
1779
- if (isCreateVpSuccess(subscribeResponse)) {
1780
+ if (isErrorMessage(tableSchema)) {
1781
+ this.postMessageToClient({
1782
+ clientViewportId: message.viewport,
1783
+ type: "subscribe-failed",
1784
+ msg: \`failed to fetch schema for table \${message.table.table}: \${tableSchema.msg}\`
1785
+ });
1786
+ } else if (isCreateVpSuccess(subscribeResponse)) {
1780
1787
  const { viewPortId: serverViewportId } = subscribeResponse;
1781
1788
  const { status: previousViewportStatus } = viewport;
1782
1789
  if (message.viewport !== serverViewportId) {
@@ -1824,6 +1831,11 @@ var ServerProxy = class {
1824
1831
  });
1825
1832
  }
1826
1833
  } else {
1834
+ this.postMessageToClient({
1835
+ clientViewportId: message.viewport,
1836
+ type: "subscribe-failed",
1837
+ msg: \`failed to open subscription on table \${message.table.table}: \${subscribeResponse.msg}\`
1838
+ });
1827
1839
  }
1828
1840
  } else {
1829
1841
  error2(\`spurious subscribe call \${message.viewport}\`);
@@ -2209,7 +2221,8 @@ var ServerProxy = class {
2209
2221
  }
2210
2222
  case "GET_TABLE_META": {
2211
2223
  this.getTableMeta(message.table, requestId).then((tableSchema) => {
2212
- if (tableSchema) {
2224
+ if (isErrorMessage(tableSchema)) {
2225
+ } else if (tableSchema) {
2213
2226
  this.postMessageToClient({
2214
2227
  type: "TABLE_META_RESP",
2215
2228
  tableSchema,
@@ -2230,10 +2243,9 @@ var ServerProxy = class {
2230
2243
  }
2231
2244
  getTableMeta(table, requestId = nextRequestId()) {
2232
2245
  if (isSessionTable(table)) {
2233
- return this.awaitResponseToMessage(
2234
- { type: "GET_TABLE_META", table },
2235
- requestId
2236
- ).then(createSchemaFromTableMetadata);
2246
+ return this.awaitResponseToMessage({ type: "GET_TABLE_META", table }, requestId).then(
2247
+ (resp) => isErrorMessage(resp) ? resp : createSchemaFromTableMetadata(resp)
2248
+ );
2237
2249
  }
2238
2250
  const key = \`\${table.module}:\${table.table}\`;
2239
2251
  let tableMetaRequest = this.cachedTableMetaRequests.get(key);
@@ -2244,7 +2256,13 @@ var ServerProxy = class {
2244
2256
  );
2245
2257
  this.cachedTableMetaRequests.set(key, tableMetaRequest);
2246
2258
  }
2247
- return tableMetaRequest == null ? void 0 : tableMetaRequest.then((response) => this.cacheTableMeta(response));
2259
+ return tableMetaRequest == null ? void 0 : tableMetaRequest.then((response) => {
2260
+ if (isErrorMessage(response)) {
2261
+ return response;
2262
+ } else {
2263
+ return this.cacheTableMeta(response);
2264
+ }
2265
+ });
2248
2266
  }
2249
2267
  awaitResponseToMessage(message, requestId = nextRequestId()) {
2250
2268
  return new Promise((resolve, reject) => {