@hydranium/data-client-theia 1.0.0-next.8 → 1.0.0-next.85

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 (48) hide show
  1. package/README.md +24 -25
  2. package/lib/browser/channel-connection.d.ts +2 -2
  3. package/lib/browser/channel-data-port.d.ts +65 -0
  4. package/lib/browser/channel-data-port.d.ts.map +1 -0
  5. package/lib/browser/channel-data-port.js +115 -0
  6. package/lib/browser/channel-data-port.js.map +1 -0
  7. package/lib/browser/index.d.ts +1 -3
  8. package/lib/browser/index.d.ts.map +1 -1
  9. package/lib/browser/index.js +1 -3
  10. package/lib/browser/index.js.map +1 -1
  11. package/lib/common/emitter-data-client.d.ts +9 -1
  12. package/lib/common/emitter-data-client.d.ts.map +1 -1
  13. package/lib/common/emitter-data-client.js +12 -0
  14. package/lib/common/emitter-data-client.js.map +1 -1
  15. package/lib/node/connection-container-module.d.ts +5 -4
  16. package/lib/node/connection-container-module.d.ts.map +1 -1
  17. package/lib/node/connection-container-module.js +5 -4
  18. package/lib/node/connection-container-module.js.map +1 -1
  19. package/lib/node/data-server-connection-handler.d.ts +10 -0
  20. package/lib/node/data-server-connection-handler.d.ts.map +1 -1
  21. package/lib/node/data-server-connection-handler.js +1 -1
  22. package/lib/node/data-server-connection-handler.js.map +1 -1
  23. package/lib/node/socket-channel-forwarder.d.ts.map +1 -1
  24. package/lib/node/socket-channel-forwarder.js +6 -1
  25. package/lib/node/socket-channel-forwarder.js.map +1 -1
  26. package/package.json +13 -12
  27. package/src/browser/channel-connection.ts +2 -2
  28. package/src/browser/channel-data-port.ts +100 -0
  29. package/src/browser/index.ts +1 -3
  30. package/src/common/emitter-data-client.ts +18 -0
  31. package/src/node/connection-container-module.ts +5 -4
  32. package/src/node/data-server-connection-handler.ts +11 -1
  33. package/src/node/socket-channel-forwarder.ts +6 -1
  34. package/lib/browser/data-service-frontend.d.ts +0 -154
  35. package/lib/browser/data-service-frontend.d.ts.map +0 -1
  36. package/lib/browser/data-service-frontend.js +0 -169
  37. package/lib/browser/data-service-frontend.js.map +0 -1
  38. package/lib/browser/diagnostics-data-service-frontend.d.ts +0 -35
  39. package/lib/browser/diagnostics-data-service-frontend.d.ts.map +0 -1
  40. package/lib/browser/diagnostics-data-service-frontend.js +0 -54
  41. package/lib/browser/diagnostics-data-service-frontend.js.map +0 -1
  42. package/lib/browser/references-data-service-frontend.d.ts +0 -45
  43. package/lib/browser/references-data-service-frontend.d.ts.map +0 -1
  44. package/lib/browser/references-data-service-frontend.js +0 -55
  45. package/lib/browser/references-data-service-frontend.js.map +0 -1
  46. package/src/browser/data-service-frontend.ts +0 -208
  47. package/src/browser/diagnostics-data-service-frontend.ts +0 -70
  48. package/src/browser/references-data-service-frontend.ts +0 -70
package/README.md CHANGED
@@ -6,10 +6,12 @@ Theia client primitives for the hydranium **data head** — the companion of
6
6
 
7
7
  The data head's frontend speaks the data server's own `vscode-jsonrpc` protocol
8
8
  over a channel that the Theia backend relays byte-for-byte onto the server's
9
- socket. This package is both halves of that arrangement: the browser-side
10
- connection and typed-frontend bases, and the backend-side connection handler and
11
- forwarder. Install it if a Theia application needs form editors, trees, or
12
- code-gen driven from the live AST rather than from LSP text edits.
9
+ socket. This package is the Theia-specific half of that arrangement: the browser-side
10
+ transport and the backend-side connection handler and forwarder. Everything above
11
+ the transport the connection, its sessions, the event fan-out is host-neutral
12
+ and lives in `@hydranium/protocol/client`. Install it if a Theia application needs
13
+ form editors, trees, or code-gen driven from the live AST rather than from LSP
14
+ text edits.
13
15
 
14
16
  ## What it gives you
15
17
 
@@ -22,19 +24,13 @@ code-gen driven from the live AST rather than from LSP text edits.
22
24
  channel ever arrives on its own. Retries follow `DEFAULT_RECONNECT_DELAYS`,
23
25
  escalating per consecutive loss and resetting after
24
26
  `RECONNECT_ESCALATION_RESET_MS`.
25
- - **`AbstractDataServiceFrontend`** — base for a frontend that owns the
26
- data-server connection: the workspace-gated connect, the typed server proxy,
27
- the inbound client binding, and a lazy idempotent init gate (`ensureConnected`).
28
- You supply the connection seams (`connectionProvider`, `servicePath`,
29
- `methodNamespace`, `client`, `clientMethods`); progress UI and domain caching
30
- layer on top.
31
- - **`AbstractDiagnosticsDataServiceFrontend`** and
32
- **`AbstractReferencesDataServiceFrontend`** — the same base specialised for the
33
- two protocol fragments an adopter most often keeps: each diagnostics
34
- (`dumpServerState`, `writeHeapSnapshot`, `dumpPodMemory`, the profiling and
35
- latency calls) and each reference method is implemented as a readiness-gated
36
- pass-through, so you do not hand-write identical one-line bodies. They are
37
- deliberately independent bases rather than chained.
27
+ - **`ChannelDataPort`** — the `DataPort` implementation over a Theia frontend
28
+ channel, and the only class a Theia adopter has to write against. Subclass it
29
+ with a `servicePath`; it supplies the channel, the workspace gate, the
30
+ reconnect signal and the `MessageService` error sink. Bind one per service path
31
+ in singleton scope. Hand it to `DataConnectionWithEvents` (from
32
+ `@hydranium/protocol`) and the connection, its sessions and its event fan-out
33
+ are the host-neutral ones every other shell uses.
38
34
  - **`EmitterDataClient`** (on `./common`, not `./browser`) — the default
39
35
  client-side implementation of the data protocol's inbound notifications,
40
36
  fanning each one out to a Theia `Event`: `onDidUpdateDocument`,
@@ -67,10 +63,10 @@ running hydranium data server to connect to. The declared peer dependencies are:
67
63
  | `@hydranium/client-theia` | `^1.0.0-next` |
68
64
  | `@hydranium/core` | `^1.0.0-next` |
69
65
  | `@hydranium/protocol` | `^1.0.0-next` |
70
- | `@theia/core` | `^1.71.0` |
71
- | `@theia/workspace` | `^1.71.0` |
66
+ | `@theia/core` | `^1.70.0` |
67
+ | `@theia/workspace` | `^1.70.0` |
72
68
  | `inversify` | `^6.0.0` |
73
- | `vscode-jsonrpc` | `^8.0.0 \|\| ^9.0.0` |
69
+ | `vscode-jsonrpc` | `9.0.1` |
74
70
 
75
71
  `@hydranium/core` is reached only from the `./node` tier (the host-diagnostics
76
72
  service), so a frontend-only consumer never loads it.
@@ -81,17 +77,20 @@ This package declares no `theiaExtensions` — it is a library your own Theia
81
77
  extension builds on. That extension's `package.json` declares the entries, and
82
78
  each entry names one frontend/backend module pair:
83
79
 
84
- - the **frontend** module binds your `AbstractDataServiceFrontend` subclass (and,
85
- for the diagnostics commands, calls `bindHostDiagnostics`);
80
+ - the **frontend** module binds your `ChannelDataPort` subclass and the
81
+ connection over it, both in singleton scope (and, for the diagnostics commands,
82
+ calls `bindHostDiagnostics`);
86
83
  - the **backend** module is typically a one-liner:
87
84
  `export default createDataServerConnectionContainerModule(MyHandler)`, where
88
85
  `MyHandler` extends `DataServerConnectionHandler`.
89
86
 
90
87
  More than one handler is the normal case, not an exotic one. Theia keys a
91
88
  frontend channel by its service path and refuses a second channel on a path
92
- already open, so every frontend abstraction reaching the data head needs its own
93
- `servicePath` — while the shared `portCommand` still names the one server process
94
- behind them all.
89
+ already open, so every frontend abstraction reaching the data head on its own
90
+ channel needs its own `servicePath` — while the shared `portCommand` still names
91
+ the one server process behind them all. Several participants over ONE channel
92
+ need no second handler: that is what `DataConnection`'s sessions are for, and it
93
+ is the cheaper arrangement.
95
94
 
96
95
  The refusal is silent, which is what makes it expensive: the loser's promise is
97
96
  left unsettled rather than rejected, so a frontend that shared a path hangs on
@@ -107,8 +107,8 @@ export interface ChannelConnectionHandle {
107
107
  /**
108
108
  * The current connection. Read it per use rather than caching it: after a
109
109
  * reconnect this returns a NEW promise, and a cached one resolves to the
110
- * dead connection forever. The same reasoning makes
111
- * `AbstractDataServiceFrontend` rebuild its proxy rather than hold one.
110
+ * dead connection forever. The same reasoning makes `RpcConnection` rebuild
111
+ * its proxy per generation rather than hold one.
112
112
  */
113
113
  readonly current: Promise<MessageConnection>;
114
114
  /**
@@ -0,0 +1,65 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 EclipseSource and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the MIT License which is available in the project root.
6
+ *
7
+ * SPDX-License-Identifier: MIT
8
+ ********************************************************************************/
9
+ import { type DataPort, type ResolvedMessage } from '@hydranium/protocol';
10
+ import { Emitter, MessageService, type Event } from '@theia/core';
11
+ import { type ServiceConnectionProvider } from '@theia/core/lib/browser';
12
+ import { WorkspaceService } from '@theia/workspace/lib/browser';
13
+ import type { MessageConnection } from 'vscode-jsonrpc';
14
+ import { type ChannelConnectionHandle } from './channel-connection';
15
+ /**
16
+ * A {@link DataPort} over a Theia frontend channel.
17
+ *
18
+ * Subclasses supply {@link servicePath}; everything above the port —
19
+ * `DataConnection`, its sessions, and whatever model a widget drives — is
20
+ * host-neutral and shared with the VS Code and browser shells.
21
+ *
22
+ * Bind one per service path and in singleton scope. Theia keys a frontend
23
+ * channel by its path and refuses a second on a path already open, and the
24
+ * throw escapes the `openChannelConnection` the loser is awaiting, leaving that
25
+ * promise unsettled rather than rejected.
26
+ */
27
+ export declare abstract class ChannelDataPort implements DataPort {
28
+ protected readonly connectionProvider: ServiceConnectionProvider;
29
+ protected readonly workspaceService: WorkspaceService;
30
+ protected readonly messageService: MessageService;
31
+ /** Frontend service path the backend forwarder for this head is registered under. */
32
+ protected abstract readonly servicePath: string;
33
+ /**
34
+ * Re-open the channel when the current connection is lost. Default `true` —
35
+ * re-opening is the only thing that recovers a restarted language server,
36
+ * which binds new ephemeral ports. Turn it off for a frontend that tears
37
+ * itself down on transport loss instead.
38
+ */
39
+ protected readonly reconnectOnConnectionLoss: boolean;
40
+ protected readonly disposeEmitter: Emitter<void>;
41
+ readonly onDispose: Event<void>;
42
+ protected handle?: ChannelConnectionHandle;
43
+ /**
44
+ * Open the workspace-gated channel and hand back its listening connection.
45
+ *
46
+ * Gated because the backend forwarder discovers the head's port by executing
47
+ * a command the language server answers, and the language server only
48
+ * launches once there is a workspace to launch it for. Asking earlier polls
49
+ * a command nobody has registered.
50
+ */
51
+ connect(): Promise<MessageConnection>;
52
+ /**
53
+ * Surface a transport or write failure as a Theia notification.
54
+ *
55
+ * Swallowing it is the failure this exists to prevent: a dead connection and
56
+ * an empty document are indistinguishable in a widget.
57
+ *
58
+ * `reported` is already a complete sentence with the detail interpolated, so
59
+ * wrapping it in a sentence of the host's own would nest one owner's clause
60
+ * inside another's and leave no translator in control of the whole.
61
+ */
62
+ reportError(_error: unknown, reported: ResolvedMessage): void;
63
+ dispose(): void;
64
+ }
65
+ //# sourceMappingURL=channel-data-port.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-data-port.d.ts","sourceRoot":"","sources":["../../src/browser/channel-data-port.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAA0B,KAAK,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAClG,OAAO,EAAE,OAAO,EAAE,cAAc,EAAO,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAGzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,KAAK,uBAAuB,EAAyB,MAAM,sBAAsB,CAAC;AAG3F;;;;;;;;;;;GAWG;AACH,8BACsB,eAAgB,YAAW,QAAQ;IACpB,SAAS,CAAC,QAAQ,CAAC,kBAAkB,EAAG,yBAAyB,CAAC;IAC1E,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAG,gBAAgB,CAAC;IACzD,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAG,cAAc,CAAC;IAE3E,qFAAqF;IACrF,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAEhD;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,CAAC,yBAAyB,EAAE,OAAO,CAAQ;IAE7D,SAAS,CAAC,QAAQ,CAAC,cAAc,gBAAuB;IACxD,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAA6B;IAE5D,SAAS,CAAC,MAAM,CAAC,EAAE,uBAAuB,CAAC;IAE3C;;;;;;;OAOG;IACH,OAAO,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAkBrC;;;;;;;;;OASG;IACH,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI;IAI7D,OAAO,IAAI,IAAI;CAMjB"}
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ /********************************************************************************
3
+ * Copyright (c) 2026 EclipseSource and others.
4
+ *
5
+ * This program and the accompanying materials are made available under the
6
+ * terms of the MIT License which is available in the project root.
7
+ *
8
+ * SPDX-License-Identifier: MIT
9
+ ********************************************************************************/
10
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
11
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
12
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
13
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
14
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
15
+ };
16
+ var __metadata = (this && this.__metadata) || function (k, v) {
17
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.ChannelDataPort = void 0;
21
+ const protocol_1 = require("@hydranium/protocol");
22
+ const core_1 = require("@theia/core");
23
+ const service_connection_provider_1 = require("@theia/core/lib/browser/messaging/service-connection-provider");
24
+ const inversify_1 = require("@theia/core/shared/inversify");
25
+ const browser_1 = require("@theia/workspace/lib/browser");
26
+ const channel_connection_1 = require("./channel-connection");
27
+ const workspace_gate_1 = require("./workspace-gate");
28
+ /**
29
+ * A {@link DataPort} over a Theia frontend channel.
30
+ *
31
+ * Subclasses supply {@link servicePath}; everything above the port —
32
+ * `DataConnection`, its sessions, and whatever model a widget drives — is
33
+ * host-neutral and shared with the VS Code and browser shells.
34
+ *
35
+ * Bind one per service path and in singleton scope. Theia keys a frontend
36
+ * channel by its path and refuses a second on a path already open, and the
37
+ * throw escapes the `openChannelConnection` the loser is awaiting, leaving that
38
+ * promise unsettled rather than rejected.
39
+ */
40
+ let ChannelDataPort = class ChannelDataPort {
41
+ connectionProvider;
42
+ workspaceService;
43
+ messageService;
44
+ /**
45
+ * Re-open the channel when the current connection is lost. Default `true` —
46
+ * re-opening is the only thing that recovers a restarted language server,
47
+ * which binds new ephemeral ports. Turn it off for a frontend that tears
48
+ * itself down on transport loss instead.
49
+ */
50
+ reconnectOnConnectionLoss = true;
51
+ disposeEmitter = new core_1.Emitter();
52
+ onDispose = this.disposeEmitter.event;
53
+ handle;
54
+ /**
55
+ * Open the workspace-gated channel and hand back its listening connection.
56
+ *
57
+ * Gated because the backend forwarder discovers the head's port by executing
58
+ * a command the language server answers, and the language server only
59
+ * launches once there is a workspace to launch it for. Asking earlier polls
60
+ * a command nobody has registered.
61
+ */
62
+ connect() {
63
+ // Read per call rather than cached: `current` is repointed at a fresh
64
+ // promise every time the channel is re-opened, so reading through the
65
+ // handle is what makes a later generation reach the live server.
66
+ if (!this.handle) {
67
+ this.handle = (0, channel_connection_1.openChannelConnection)(this.connectionProvider, this.servicePath, {
68
+ whenReady: (0, workspace_gate_1.whenWorkspaceOpen)(this.workspaceService),
69
+ reconnect: this.reconnectOnConnectionLoss
70
+ });
71
+ // A relaunched server binds new ephemeral ports; the handle re-opens
72
+ // and the forwarder rediscovers, but `DataConnection` caches its
73
+ // generation and would go on addressing the dead one. Its signal to
74
+ // drop that generation is this event.
75
+ this.handle.onDidLoseConnection(() => this.disposeEmitter.fire(undefined));
76
+ }
77
+ return this.handle.current;
78
+ }
79
+ /**
80
+ * Surface a transport or write failure as a Theia notification.
81
+ *
82
+ * Swallowing it is the failure this exists to prevent: a dead connection and
83
+ * an empty document are indistinguishable in a widget.
84
+ *
85
+ * `reported` is already a complete sentence with the detail interpolated, so
86
+ * wrapping it in a sentence of the host's own would nest one owner's clause
87
+ * inside another's and leave no translator in control of the whole.
88
+ */
89
+ reportError(_error, reported) {
90
+ this.messageService.error((0, protocol_1.renderFrameworkMessage)(reported, core_1.nls.localization?.translations));
91
+ }
92
+ dispose() {
93
+ this.handle?.dispose();
94
+ this.handle = undefined;
95
+ this.disposeEmitter.fire(undefined);
96
+ this.disposeEmitter.dispose();
97
+ }
98
+ };
99
+ exports.ChannelDataPort = ChannelDataPort;
100
+ __decorate([
101
+ (0, inversify_1.inject)(service_connection_provider_1.RemoteConnectionProvider),
102
+ __metadata("design:type", Function)
103
+ ], ChannelDataPort.prototype, "connectionProvider", void 0);
104
+ __decorate([
105
+ (0, inversify_1.inject)(browser_1.WorkspaceService),
106
+ __metadata("design:type", browser_1.WorkspaceService)
107
+ ], ChannelDataPort.prototype, "workspaceService", void 0);
108
+ __decorate([
109
+ (0, inversify_1.inject)(core_1.MessageService),
110
+ __metadata("design:type", core_1.MessageService)
111
+ ], ChannelDataPort.prototype, "messageService", void 0);
112
+ exports.ChannelDataPort = ChannelDataPort = __decorate([
113
+ (0, inversify_1.injectable)()
114
+ ], ChannelDataPort);
115
+ //# sourceMappingURL=channel-data-port.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-data-port.js","sourceRoot":"","sources":["../../src/browser/channel-data-port.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;;;;;;;;;;;AAElF,kDAAkG;AAClG,sCAAuE;AAEvE,+GAAyG;AACzG,4DAAkE;AAClE,0DAAgE;AAEhE,6DAA2F;AAC3F,qDAAqD;AAErD;;;;;;;;;;;GAWG;AAEI,IAAe,eAAe,GAA9B,MAAe,eAAe;IACmB,kBAAkB,CAA6B;IACvD,gBAAgB,CAAoB;IACtC,cAAc,CAAkB;IAK3E;;;;;OAKG;IACgB,yBAAyB,GAAY,IAAI,CAAC;IAE1C,cAAc,GAAG,IAAI,cAAO,EAAQ,CAAC;IAC/C,SAAS,GAAgB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;IAElD,MAAM,CAA2B;IAE3C;;;;;;;OAOG;IACH,OAAO;QACJ,sEAAsE;QACtE,sEAAsE;QACtE,iEAAiE;QACjE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,GAAG,IAAA,0CAAqB,EAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,WAAW,EAAE;gBAC5E,SAAS,EAAE,IAAA,kCAAiB,EAAC,IAAI,CAAC,gBAAgB,CAAC;gBACnD,SAAS,EAAE,IAAI,CAAC,yBAAyB;aAC3C,CAAC,CAAC;YACH,qEAAqE;YACrE,iEAAiE;YACjE,oEAAoE;YACpE,sCAAsC;YACtC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IAC9B,CAAC;IAED;;;;;;;;;OASG;IACH,WAAW,CAAC,MAAe,EAAE,QAAyB;QACnD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAA,iCAAsB,EAAC,QAAQ,EAAE,UAAG,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;IAC/F,CAAC;IAED,OAAO;QACJ,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;CACH,CAAA;AAnEqB,0CAAe;AACmB;IAApD,IAAA,kBAAM,EAAC,sDAAwB,CAAC;;2DAAmE;AACvD;IAA5C,IAAA,kBAAM,EAAC,0BAAgB,CAAC;8BAAuC,0BAAgB;yDAAC;AACtC;IAA1C,IAAA,kBAAM,EAAC,qBAAc,CAAC;8BAAqC,qBAAc;uDAAC;0BAHxD,eAAe;IADpC,IAAA,sBAAU,GAAE;GACS,eAAe,CAmEpC"}
@@ -7,9 +7,7 @@
7
7
  * SPDX-License-Identifier: MIT
8
8
  ********************************************************************************/
9
9
  export * from './channel-connection';
10
- export * from './data-service-frontend';
11
- export * from './diagnostics-data-service-frontend';
10
+ export * from './channel-data-port';
12
11
  export * from './host-diagnostics-frontend';
13
- export * from './references-data-service-frontend';
14
12
  export * from './workspace-gate';
15
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qCAAqC,CAAC;AACpD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oCAAoC,CAAC;AACnD,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kBAAkB,CAAC"}
@@ -23,9 +23,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
23
23
  };
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
25
  __exportStar(require("./channel-connection"), exports);
26
- __exportStar(require("./data-service-frontend"), exports);
27
- __exportStar(require("./diagnostics-data-service-frontend"), exports);
26
+ __exportStar(require("./channel-data-port"), exports);
28
27
  __exportStar(require("./host-diagnostics-frontend"), exports);
29
- __exportStar(require("./references-data-service-frontend"), exports);
30
28
  __exportStar(require("./workspace-gate"), exports);
31
29
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;;;;;;;;;;;;;;;AAElF,uDAAqC;AACrC,0DAAwC;AACxC,sEAAoD;AACpD,8DAA4C;AAC5C,qEAAmD;AACnD,mDAAiC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;;;;;;;;;;;;;;;AAElF,uDAAqC;AACrC,sDAAoC;AACpC,8DAA4C;AAC5C,mDAAiC"}
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * SPDX-License-Identifier: MIT
8
8
  ********************************************************************************/
9
- import type { DataClientProtocol, Project, ProjectsChangedEvent, TransferDiagnostic, TransferDocumentSavedEvent, TransferDocumentUpdatedEvent, TransferElement } from '@hydranium/protocol';
9
+ import type { DataClientProtocol, Project, ProjectsChangedEvent, TransferDiagnostic, TransferDocumentDeletedEvent, TransferDocumentSavedEvent, TransferDocumentsBuiltEvent, TransferDocumentUpdatedEvent, TransferElement } from '@hydranium/protocol';
10
10
  import { Emitter, type Event } from '@theia/core';
11
11
  /**
12
12
  * Default {@link DataClientProtocol} implementation for a Theia frontend:
@@ -30,11 +30,19 @@ export declare class EmitterDataClient<TTransfer extends TransferElement, TDiagn
30
30
  protected readonly onDocumentSavedEmitter: Emitter<TransferDocumentSavedEvent<TTransfer, TDiagnostic>>;
31
31
  /** Fires for each inbound {@link onDocumentSaved} notification. */
32
32
  readonly onDidSaveDocument: Event<TransferDocumentSavedEvent<TTransfer, TDiagnostic>>;
33
+ protected readonly onDocumentDeletedEmitter: Emitter<TransferDocumentDeletedEvent>;
34
+ /** Fires for each inbound {@link onDocumentDeleted} notification. */
35
+ readonly onDidDeleteDocument: Event<TransferDocumentDeletedEvent>;
36
+ protected readonly onDocumentsBuiltEmitter: Emitter<TransferDocumentsBuiltEvent>;
37
+ /** Fires for each inbound {@link onDocumentsBuilt} notification. */
38
+ readonly onDidBuildDocuments: Event<TransferDocumentsBuiltEvent>;
33
39
  protected readonly onProjectsChangedEmitter: Emitter<ProjectsChangedEvent<TProject>>;
34
40
  /** Fires for each inbound {@link onProjectsChanged} notification. */
35
41
  readonly onDidChangeProjects: Event<ProjectsChangedEvent<TProject>>;
36
42
  onDocumentUpdated(event: TransferDocumentUpdatedEvent<TTransfer, TDiagnostic>): void;
37
43
  onDocumentSaved(event: TransferDocumentSavedEvent<TTransfer, TDiagnostic>): void;
44
+ onDocumentDeleted(event: TransferDocumentDeletedEvent): void;
45
+ onDocumentsBuilt(event: TransferDocumentsBuiltEvent): void;
38
46
  onProjectsChanged(event: ProjectsChangedEvent<TProject>): void;
39
47
  }
40
48
  //# sourceMappingURL=emitter-data-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"emitter-data-client.d.ts","sourceRoot":"","sources":["../../src/common/emitter-data-client.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,KAAK,EACT,kBAAkB,EAClB,OAAO,EACP,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,EAC1B,4BAA4B,EAC5B,eAAe,EACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,iBAAiB,CAC3B,SAAS,SAAS,eAAe,EACjC,WAAW,SAAS,kBAAkB,GAAG,kBAAkB,EAC3D,QAAQ,SAAS,OAAO,GAAG,OAAO,CACnC,YAAW,kBAAkB,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC;IAC9D,SAAS,CAAC,QAAQ,CAAC,wBAAwB,gEAAuE;IAClH,qEAAqE;IACrE,QAAQ,CAAC,mBAAmB,EAAE,KAAK,CAAC,4BAA4B,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAuC;IAEhI,SAAS,CAAC,QAAQ,CAAC,sBAAsB,8DAAqE;IAC9G,mEAAmE;IACnE,QAAQ,CAAC,iBAAiB,EAAE,KAAK,CAAC,0BAA0B,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAqC;IAE1H,SAAS,CAAC,QAAQ,CAAC,wBAAwB,0CAAiD;IAC5F,qEAAqE;IACrE,QAAQ,CAAC,mBAAmB,EAAE,KAAK,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAuC;IAE1G,iBAAiB,CAAC,KAAK,EAAE,4BAA4B,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,IAAI;IAIpF,eAAe,CAAC,KAAK,EAAE,0BAA0B,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,IAAI;IAIhF,iBAAiB,CAAC,KAAK,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GAAG,IAAI;CAGhE"}
1
+ {"version":3,"file":"emitter-data-client.d.ts","sourceRoot":"","sources":["../../src/common/emitter-data-client.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,KAAK,EACT,kBAAkB,EAClB,OAAO,EACP,oBAAoB,EACpB,kBAAkB,EAClB,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,EAC3B,4BAA4B,EAC5B,eAAe,EACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,iBAAiB,CAC3B,SAAS,SAAS,eAAe,EACjC,WAAW,SAAS,kBAAkB,GAAG,kBAAkB,EAC3D,QAAQ,SAAS,OAAO,GAAG,OAAO,CACnC,YAAW,kBAAkB,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC;IAC9D,SAAS,CAAC,QAAQ,CAAC,wBAAwB,gEAAuE;IAClH,qEAAqE;IACrE,QAAQ,CAAC,mBAAmB,EAAE,KAAK,CAAC,4BAA4B,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAuC;IAEhI,SAAS,CAAC,QAAQ,CAAC,sBAAsB,8DAAqE;IAC9G,mEAAmE;IACnE,QAAQ,CAAC,iBAAiB,EAAE,KAAK,CAAC,0BAA0B,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAqC;IAE1H,SAAS,CAAC,QAAQ,CAAC,wBAAwB,wCAA+C;IAC1F,qEAAqE;IACrE,QAAQ,CAAC,mBAAmB,EAAE,KAAK,CAAC,4BAA4B,CAAC,CAAuC;IAExG,SAAS,CAAC,QAAQ,CAAC,uBAAuB,uCAA8C;IACxF,oEAAoE;IACpE,QAAQ,CAAC,mBAAmB,EAAE,KAAK,CAAC,2BAA2B,CAAC,CAAsC;IAEtG,SAAS,CAAC,QAAQ,CAAC,wBAAwB,0CAAiD;IAC5F,qEAAqE;IACrE,QAAQ,CAAC,mBAAmB,EAAE,KAAK,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAuC;IAE1G,iBAAiB,CAAC,KAAK,EAAE,4BAA4B,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,IAAI;IAIpF,eAAe,CAAC,KAAK,EAAE,0BAA0B,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,IAAI;IAIhF,iBAAiB,CAAC,KAAK,EAAE,4BAA4B,GAAG,IAAI;IAI5D,gBAAgB,CAAC,KAAK,EAAE,2BAA2B,GAAG,IAAI;IAI1D,iBAAiB,CAAC,KAAK,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GAAG,IAAI;CAGhE"}
@@ -32,6 +32,12 @@ class EmitterDataClient {
32
32
  onDocumentSavedEmitter = new core_1.Emitter();
33
33
  /** Fires for each inbound {@link onDocumentSaved} notification. */
34
34
  onDidSaveDocument = this.onDocumentSavedEmitter.event;
35
+ onDocumentDeletedEmitter = new core_1.Emitter();
36
+ /** Fires for each inbound {@link onDocumentDeleted} notification. */
37
+ onDidDeleteDocument = this.onDocumentDeletedEmitter.event;
38
+ onDocumentsBuiltEmitter = new core_1.Emitter();
39
+ /** Fires for each inbound {@link onDocumentsBuilt} notification. */
40
+ onDidBuildDocuments = this.onDocumentsBuiltEmitter.event;
35
41
  onProjectsChangedEmitter = new core_1.Emitter();
36
42
  /** Fires for each inbound {@link onProjectsChanged} notification. */
37
43
  onDidChangeProjects = this.onProjectsChangedEmitter.event;
@@ -41,6 +47,12 @@ class EmitterDataClient {
41
47
  onDocumentSaved(event) {
42
48
  this.onDocumentSavedEmitter.fire(event);
43
49
  }
50
+ onDocumentDeleted(event) {
51
+ this.onDocumentDeletedEmitter.fire(event);
52
+ }
53
+ onDocumentsBuilt(event) {
54
+ this.onDocumentsBuiltEmitter.fire(event);
55
+ }
44
56
  onProjectsChanged(event) {
45
57
  this.onProjectsChangedEmitter.fire(event);
46
58
  }
@@ -1 +1 @@
1
- {"version":3,"file":"emitter-data-client.js","sourceRoot":"","sources":["../../src/common/emitter-data-client.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;;AAWlF,sCAAkD;AAElD;;;;;;;;;;;;;;GAcG;AACH,MAAa,iBAAiB;IAKR,wBAAwB,GAAG,IAAI,cAAO,EAAwD,CAAC;IAClH,qEAAqE;IAC5D,mBAAmB,GAAgE,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;IAE7G,sBAAsB,GAAG,IAAI,cAAO,EAAsD,CAAC;IAC9G,mEAAmE;IAC1D,iBAAiB,GAA8D,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;IAEvG,wBAAwB,GAAG,IAAI,cAAO,EAAkC,CAAC;IAC5F,qEAAqE;IAC5D,mBAAmB,GAA0C,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;IAE1G,iBAAiB,CAAC,KAA2D;QAC1E,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,eAAe,CAAC,KAAyD;QACtE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,iBAAiB,CAAC,KAAqC;QACpD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;CACH;AA5BD,8CA4BC"}
1
+ {"version":3,"file":"emitter-data-client.js","sourceRoot":"","sources":["../../src/common/emitter-data-client.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;;AAalF,sCAAkD;AAElD;;;;;;;;;;;;;;GAcG;AACH,MAAa,iBAAiB;IAKR,wBAAwB,GAAG,IAAI,cAAO,EAAwD,CAAC;IAClH,qEAAqE;IAC5D,mBAAmB,GAAgE,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;IAE7G,sBAAsB,GAAG,IAAI,cAAO,EAAsD,CAAC;IAC9G,mEAAmE;IAC1D,iBAAiB,GAA8D,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;IAEvG,wBAAwB,GAAG,IAAI,cAAO,EAAgC,CAAC;IAC1F,qEAAqE;IAC5D,mBAAmB,GAAwC,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;IAErF,uBAAuB,GAAG,IAAI,cAAO,EAA+B,CAAC;IACxF,oEAAoE;IAC3D,mBAAmB,GAAuC,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;IAEnF,wBAAwB,GAAG,IAAI,cAAO,EAAkC,CAAC;IAC5F,qEAAqE;IAC5D,mBAAmB,GAA0C,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;IAE1G,iBAAiB,CAAC,KAA2D;QAC1E,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,eAAe,CAAC,KAAyD;QACtE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,iBAAiB,CAAC,KAAmC;QAClD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,gBAAgB,CAAC,KAAkC;QAChD,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,iBAAiB,CAAC,KAAqC;QACpD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;CACH;AA5CD,8CA4CC"}
@@ -24,11 +24,12 @@ import { ContainerModule, type interfaces } from '@theia/core/shared/inversify';
24
24
  *
25
25
  * **More than one handler is the normal case, not an exotic one.** Theia keys a
26
26
  * frontend channel by its service path and refuses a second channel on a path
27
- * already open, so every frontend abstraction reaching the data head needs its
28
- * own path and therefore its own handler a host-neutral `DataPort` beside a
29
- * Theia `AbstractDataServiceFrontend` is exactly that shape. They still forward
27
+ * already open, so every frontend abstraction reaching the data head on its own
28
+ * channel needs its own path and therefore its own handler. They still forward
30
29
  * to the SAME data server: the path distinguishes the channel, the shared
31
- * `portCommand` names the one process behind it.
30
+ * `portCommand` names the one process behind it. Several participants over ONE
31
+ * channel need no second handler — that is what `DataConnection`'s sessions are
32
+ * for, and it is the cheaper arrangement.
32
33
  */
33
34
  export declare function createDataServerConnectionContainerModule(...handlerClasses: interfaces.Newable<ConnectionHandler>[]): ContainerModule;
34
35
  //# sourceMappingURL=connection-container-module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"connection-container-module.d.ts","sourceRoot":"","sources":["../../src/node/connection-container-module.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAEhF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,yCAAyC,CAAC,GAAG,cAAc,EAAE,UAAU,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,GAAG,eAAe,CAerI"}
1
+ {"version":3,"file":"connection-container-module.d.ts","sourceRoot":"","sources":["../../src/node/connection-container-module.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAEhF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,yCAAyC,CAAC,GAAG,cAAc,EAAE,UAAU,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,GAAG,eAAe,CAerI"}
@@ -28,11 +28,12 @@ const inversify_1 = require("@theia/core/shared/inversify");
28
28
  *
29
29
  * **More than one handler is the normal case, not an exotic one.** Theia keys a
30
30
  * frontend channel by its service path and refuses a second channel on a path
31
- * already open, so every frontend abstraction reaching the data head needs its
32
- * own path and therefore its own handler a host-neutral `DataPort` beside a
33
- * Theia `AbstractDataServiceFrontend` is exactly that shape. They still forward
31
+ * already open, so every frontend abstraction reaching the data head on its own
32
+ * channel needs its own path and therefore its own handler. They still forward
34
33
  * to the SAME data server: the path distinguishes the channel, the shared
35
- * `portCommand` names the one process behind it.
34
+ * `portCommand` names the one process behind it. Several participants over ONE
35
+ * channel need no second handler — that is what `DataConnection`'s sessions are
36
+ * for, and it is the cheaper arrangement.
36
37
  */
37
38
  function createDataServerConnectionContainerModule(...handlerClasses) {
38
39
  const frontendScopedConnectionModule = connection_container_module_1.ConnectionContainerModule.create(({ bind }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"connection-container-module.js","sourceRoot":"","sources":["../../src/node/connection-container-module.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;AA4BlF,8FAeC;AAzCD,sCAAgD;AAChD,4GAAuG;AACvG,4DAAgF;AAEhF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,SAAgB,yCAAyC,CAAC,GAAG,cAAuD;IACjH,MAAM,8BAA8B,GAAG,uDAAyB,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;QAClF,KAAK,MAAM,YAAY,IAAI,cAAc,EAAE,CAAC;YACzC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;YAC/C,mEAAmE;YACnE,mEAAmE;YACnE,oEAAoE;YACpE,IAAI,CAAC,wBAAiB,CAAC;iBACnB,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;iBAC9D,gBAAgB,EAAE,CAAC;QAC1B,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,2BAAe,CAAC,IAAI,CAAC,EAAE;QAC/B,IAAI,CAAC,uDAAyB,CAAC,CAAC,eAAe,CAAC,8BAA8B,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"connection-container-module.js","sourceRoot":"","sources":["../../src/node/connection-container-module.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;AA6BlF,8FAeC;AA1CD,sCAAgD;AAChD,4GAAuG;AACvG,4DAAgF;AAEhF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,SAAgB,yCAAyC,CAAC,GAAG,cAAuD;IACjH,MAAM,8BAA8B,GAAG,uDAAyB,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;QAClF,KAAK,MAAM,YAAY,IAAI,cAAc,EAAE,CAAC;YACzC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;YAC/C,mEAAmE;YACnE,mEAAmE;YACnE,oEAAoE;YACpE,IAAI,CAAC,wBAAiB,CAAC;iBACnB,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;iBAC9D,gBAAgB,EAAE,CAAC;QAC1B,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,2BAAe,CAAC,IAAI,CAAC,EAAE;QAC/B,IAAI,CAAC,uDAAyB,CAAC,CAAC,eAAe,CAAC,8BAA8B,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -25,6 +25,16 @@ export interface DataServerConnectionHandlerOptions {
25
25
  * Defaults to the framework `DATA_SERVER_PORT_COMMAND`; override to match
26
26
  * an adopter's established id. */
27
27
  readonly portCommand?: string;
28
+ /**
29
+ * Product name for the connect-failure dialog this handler raises.
30
+ *
31
+ * It reaches the adopter's UI verbatim, so the framework default leaks a
32
+ * framework noun into a product that is not ours. Not a translation concern —
33
+ * routing it through a catalogue would ask an adopter to "translate" English
34
+ * into their own product name, and would make their branding
35
+ * locale-dependent.
36
+ */
37
+ readonly serverName?: string;
28
38
  readonly findPortTimeout?: number;
29
39
  readonly findPortAttempts?: number;
30
40
  readonly connectTimeoutMs?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"data-server-connection-handler.d.ts","sourceRoot":"","sources":["../../src/node/data-server-connection-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,yCAAyC,EAAE,MAAM,kCAAkC,CAAC;AAE7F,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,KAAK,KAAK,GAAG,MAAM,UAAU,CAAC;AAGrC;;;;kBAIkB;AAClB,MAAM,WAAW,kCAAkC;IAChD;;;;yDAIqD;IACrD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;uCAEmC;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC;;;;;;OAMG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC;CAC1D;AAED;;;;;;;;;;;GAWG;AACH,qBACa,2BAA4B,SAAQ,yCAAyC;gBAC9D,OAAO,GAAE,kCAAuC;IAazE,SAAS,CAAC,yBAAyB,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,UAAU;CAG7F"}
1
+ {"version":3,"file":"data-server-connection-handler.d.ts","sourceRoot":"","sources":["../../src/node/data-server-connection-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,yCAAyC,EAAE,MAAM,kCAAkC,CAAC;AAE7F,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,KAAK,KAAK,GAAG,MAAM,UAAU,CAAC;AAGrC;;;;kBAIkB;AAClB,MAAM,WAAW,kCAAkC;IAChD;;;;yDAIqD;IACrD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;uCAEmC;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;;;;OAQG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC;;;;;;OAMG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC;CAC1D;AAED;;;;;;;;;;;GAWG;AACH,qBACa,2BAA4B,SAAQ,yCAAyC;gBAC9D,OAAO,GAAE,kCAAuC;IAazE,SAAS,CAAC,yBAAyB,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,UAAU;CAG7F"}
@@ -43,7 +43,7 @@ let DataServerConnectionHandler = class DataServerConnectionHandler extends node
43
43
  path: options.servicePath ?? protocol_1.DATA_SERVER_PATH,
44
44
  portCommand: options.portCommand ?? protocol_1.DATA_SERVER_PORT_COMMAND,
45
45
  logComponent: 'DataServer',
46
- serverName: 'Model Server',
46
+ serverName: options.serverName ?? 'Model Server',
47
47
  findPortTimeout: options.findPortTimeout,
48
48
  findPortAttempts: options.findPortAttempts,
49
49
  connectTimeoutMs: options.connectTimeoutMs,
@@ -1 +1 @@
1
- {"version":3,"file":"data-server-connection-handler.js","sourceRoot":"","sources":["../../src/node/data-server-connection-handler.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;;;;;;;;;;;;;;AAElF,2DAA6F;AAC7F,kDAAiF;AAEjF,4DAAqE;AAErE,yEAAoE;AA+BpE;;;;;;;;;;;GAWG;AAEI,IAAM,2BAA2B,GAAjC,MAAM,2BAA4B,SAAQ,gDAAyC;IACvF,YAAyB,UAA8C,EAAE;QACtE,KAAK,CAAC;YACH,IAAI,EAAE,OAAO,CAAC,WAAW,IAAI,2BAAgB;YAC7C,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,mCAAwB;YAC5D,YAAY,EAAE,YAAY;YAC1B,UAAU,EAAE,cAAc;YAC1B,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,eAAe,EAAE,OAAO,CAAC,eAAe;SAC1C,CAAC,CAAC;IACN,CAAC;IAES,yBAAyB,CAAC,aAAsB,EAAE,MAAkB;QAC3E,OAAO,IAAI,iDAAsB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC;CACH,CAAA;AAjBY,kEAA2B;sCAA3B,2BAA2B;IADvC,IAAA,sBAAU,GAAE;IAEG,WAAA,IAAA,qBAAS,GAAE,CAAA;;GADd,2BAA2B,CAiBvC"}
1
+ {"version":3,"file":"data-server-connection-handler.js","sourceRoot":"","sources":["../../src/node/data-server-connection-handler.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;;;;;;;;;;;;;;AAElF,2DAA6F;AAC7F,kDAAiF;AAEjF,4DAAqE;AAErE,yEAAoE;AAyCpE;;;;;;;;;;;GAWG;AAEI,IAAM,2BAA2B,GAAjC,MAAM,2BAA4B,SAAQ,gDAAyC;IACvF,YAAyB,UAA8C,EAAE;QACtE,KAAK,CAAC;YACH,IAAI,EAAE,OAAO,CAAC,WAAW,IAAI,2BAAgB;YAC7C,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,mCAAwB;YAC5D,YAAY,EAAE,YAAY;YAC1B,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,cAAc;YAChD,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,eAAe,EAAE,OAAO,CAAC,eAAe;SAC1C,CAAC,CAAC;IACN,CAAC;IAES,yBAAyB,CAAC,aAAsB,EAAE,MAAkB;QAC3E,OAAO,IAAI,iDAAsB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC;CACH,CAAA;AAjBY,kEAA2B;sCAA3B,2BAA2B;IADvC,IAAA,sBAAU,GAAE;IAEG,WAAA,IAAA,qBAAS,GAAE,CAAA;;GADd,2BAA2B,CAiBvC"}
@@ -1 +1 @@
1
- {"version":3,"file":"socket-channel-forwarder.d.ts","sourceRoot":"","sources":["../../src/node/socket-channel-forwarder.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,KAAK,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AACnG,OAAO,KAAK,KAAK,GAAG,MAAM,UAAU,CAAC;AACrC,OAAO,EAA2B,KAAK,OAAO,EAA4C,MAAM,qBAAqB,CAAC;AAEtH;;;;;;;;;;;;GAYG;AACH,qBAAa,sBAAuB,YAAW,UAAU;IAInD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO;IACnC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM;IAJxC,SAAS,CAAC,QAAQ,CAAC,SAAS,uBAA8B;gBAGpC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,GAAG,CAAC,MAAM;IAkBxC,SAAS,CAAC,oBAAoB,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO;IAKlE,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAMhD,OAAO,IAAI,IAAI;CAGjB"}
1
+ {"version":3,"file":"socket-channel-forwarder.d.ts","sourceRoot":"","sources":["../../src/node/socket-channel-forwarder.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,KAAK,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AACnG,OAAO,KAAK,KAAK,GAAG,MAAM,UAAU,CAAC;AACrC,OAAO,EAA2B,KAAK,OAAO,EAA4C,MAAM,qBAAqB,CAAC;AAEtH;;;;;;;;;;;;GAYG;AACH,qBAAa,sBAAuB,YAAW,UAAU;IAInD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO;IACnC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM;IAJxC,SAAS,CAAC,QAAQ,CAAC,SAAS,uBAA8B;gBAGpC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,GAAG,CAAC,MAAM;IAuBxC,SAAS,CAAC,oBAAoB,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO;IAKlE,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAMhD,OAAO,IAAI,IAAI;CAGjB"}
@@ -34,8 +34,13 @@ class SocketChannelForwarder {
34
34
  const reader = new node_1.SocketMessageReader(socket);
35
35
  const writer = new node_1.SocketMessageWriter(socket);
36
36
  const connection = (0, node_1.createMessageConnection)(reader, writer);
37
+ // Nothing here destroys the socket, and adding it back would be dead
38
+ // code in both directions. `SocketMessageWriter.dispose()` destroys it
39
+ // itself, which covers the dispose path; and `connection.onClose` fires
40
+ // only from the reader's or writer's own close, which for a socket means
41
+ // the socket has already gone — so a destroy handler there is downstream
42
+ // of the effect it would be trying to cause.
37
43
  this.toDispose.pushAll([
38
- connection.onClose(() => socket.destroy()),
39
44
  reader.listen(message => this.writeToChannel(message)),
40
45
  channel.onMessage(provider => void writer.write(this.decodeChannelMessage(provider))),
41
46
  channel.onClose(() => connection.dispose()),
@@ -1 +1 @@
1
- {"version":3,"file":"socket-channel-forwarder.js","sourceRoot":"","sources":["../../src/node/socket-channel-forwarder.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;;AAElF,sCAAmG;AAEnG,8CAAsH;AAEtH;;;;;;;;;;;;GAYG;AACH,MAAa,sBAAsB;IAIV;IACA;IAJH,SAAS,GAAG,IAAI,2BAAoB,EAAE,CAAC;IAE1D,YACsB,OAAgB,EAChB,MAAkB;QADlB,YAAO,GAAP,OAAO,CAAS;QAChB,WAAM,GAAN,MAAM,CAAY;QAErC,MAAM,MAAM,GAAG,IAAI,0BAAmB,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,0BAAmB,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAA,8BAAuB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3D,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YACpB,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YACtD,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC;YACrF,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAC3C,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACzC,iBAAU,CAAC,MAAM,CAAC,GAAG,EAAE;gBACpB,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,CAAC,CAAC;SACJ,CAAC,CAAC;IACN,CAAC;IAES,oBAAoB,CAAC,QAAyB;QACrD,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAY,CAAC;IAClE,CAAC;IAES,cAAc,CAAC,OAAgB;QACtC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAClD,WAAW,CAAC,UAAU,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1E,WAAW,CAAC,MAAM,EAAE,CAAC;IACxB,CAAC;IAED,OAAO;QACJ,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IAC5B,CAAC;CACH;AArCD,wDAqCC"}
1
+ {"version":3,"file":"socket-channel-forwarder.js","sourceRoot":"","sources":["../../src/node/socket-channel-forwarder.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;;AAElF,sCAAmG;AAEnG,8CAAsH;AAEtH;;;;;;;;;;;;GAYG;AACH,MAAa,sBAAsB;IAIV;IACA;IAJH,SAAS,GAAG,IAAI,2BAAoB,EAAE,CAAC;IAE1D,YACsB,OAAgB,EAChB,MAAkB;QADlB,YAAO,GAAP,OAAO,CAAS;QAChB,WAAM,GAAN,MAAM,CAAY;QAErC,MAAM,MAAM,GAAG,IAAI,0BAAmB,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,0BAAmB,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAA,8BAAuB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3D,qEAAqE;QACrE,uEAAuE;QACvE,wEAAwE;QACxE,yEAAyE;QACzE,yEAAyE;QACzE,6CAA6C;QAC7C,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YACpB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YACtD,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC;YACrF,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAC3C,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACzC,iBAAU,CAAC,MAAM,CAAC,GAAG,EAAE;gBACpB,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,CAAC,CAAC;SACJ,CAAC,CAAC;IACN,CAAC;IAES,oBAAoB,CAAC,QAAyB;QACrD,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAY,CAAC;IAClE,CAAC;IAES,cAAc,CAAC,OAAgB;QACtC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAClD,WAAW,CAAC,UAAU,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1E,WAAW,CAAC,MAAM,EAAE,CAAC;IACxB,CAAC;IAED,OAAO;QACJ,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IAC5B,CAAC;CACH;AA1CD,wDA0CC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hydranium/data-client-theia",
3
- "version": "1.0.0-next.8",
3
+ "version": "1.0.0-next.85",
4
4
  "description": "Theia-coupled client primitives for the hydranium data-server protocol head; companion of @hydranium/data-server. Bridges framework typed errors (e.g. ConflictError) across Theia's RPC boundary so their code + data survive the wire.",
5
5
  "keywords": [
6
6
  "hydranium",
@@ -70,11 +70,11 @@
70
70
  "watch": "tsc -b -w --preserveWatchOutput"
71
71
  },
72
72
  "devDependencies": {
73
- "@hydranium/client-theia": "1.0.0-next.8",
74
- "@hydranium/core": "1.0.0-next.8",
75
- "@hydranium/protocol": "1.0.0-next.8",
76
- "@theia/core": "^1.71.0",
77
- "@theia/workspace": "^1.71.0",
73
+ "@hydranium/client-theia": "1.0.0-next.85",
74
+ "@hydranium/core": "1.0.0-next.85",
75
+ "@hydranium/protocol": "1.0.0-next.85",
76
+ "@theia/core": "^1.70.0",
77
+ "@theia/workspace": "^1.70.0",
78
78
  "@types/node": "^22.0.0",
79
79
  "inversify": "6.2.2",
80
80
  "reflect-metadata": "0.2.2",
@@ -83,13 +83,13 @@
83
83
  "vscode-jsonrpc": "9.0.1"
84
84
  },
85
85
  "peerDependencies": {
86
- "@hydranium/client-theia": "1.0.0-next.8",
87
- "@hydranium/core": "1.0.0-next.8",
88
- "@hydranium/protocol": "1.0.0-next.8",
89
- "@theia/core": "^1.71.0",
90
- "@theia/workspace": "^1.71.0",
86
+ "@hydranium/client-theia": "1.0.0-next.85",
87
+ "@hydranium/core": "1.0.0-next.85",
88
+ "@hydranium/protocol": "1.0.0-next.85",
89
+ "@theia/core": "^1.70.0",
90
+ "@theia/workspace": "^1.70.0",
91
91
  "inversify": "^6.0.0",
92
- "vscode-jsonrpc": "^8.0.0 || ^9.0.0"
92
+ "vscode-jsonrpc": "9.0.1"
93
93
  },
94
94
  "engines": {
95
95
  "node": ">=22.13"
@@ -97,5 +97,6 @@
97
97
  "publishConfig": {
98
98
  "access": "public"
99
99
  },
100
+ "//peerDependencies": "`vscode-jsonrpc` is EXACT rather than a range, because it is one link of an atomic chain with no independently movable link: `vscode-languageserver-protocol` depends on it at exactly 9.0.1, so any other value an adopter supplies is a SECOND physical copy rather than an upgrade. This wire stack breaks on copy identity rather than on structure — `ParameterStructures.auto` is a singleton compared by `===` in connection.js, so a request type built by one copy and sent over a connection owned by the other throws `Unknown parameter structure auto`. A caret or union range was rejected because npm then resolves a `vscode-jsonrpc@8.2.0` tree SILENTLY, with no diagnostic at all, and the failure surfaces only later at server init. Exact does not fail the install either — npm downgrades an unsatisfiable peer to a warning — but it is a NAMED ERESOLVE warning printing the required version beside the found one, and a hard error for anyone installing with `--strict-peer-deps`. It does NOT prevent a NESTED copy — `@eclipse-glsp/*` carries its own exact `vscode-jsonrpc@8.2.0` dependency and root `overrides` do not ship — so a consumer of the GLSP head must pin the chain in its own manifest, and docs/adopting/requirements.md carries the block to paste.",
100
101
  "//prepack": "The publish guard, and it deliberately is NOT a `prepare`: npm runs a workspace `prepare` BEFORE the root `postinstall` that applies patches/vscode-jsonrpc+9.0.1.patch, so building there fails on a cold clone and npm rolls the entire install back. `prepack` runs only when a tarball is made (`npm pack`, `npm publish`) and never on install, so it cannot break the install it has no business touching. It FAILS rather than rebuilds, because the rebuild is exactly the part that ordering defeats. What it defends against: `files` lists `lib`, `lib` is gitignored, and a `files` entry matching nothing is skipped SILENTLY — so `npm publish` from an unbuilt tree emits a tarball of `src` and nothing else, with no error."
101
102
  }
@@ -199,8 +199,8 @@ export interface ChannelConnectionHandle {
199
199
  /**
200
200
  * The current connection. Read it per use rather than caching it: after a
201
201
  * reconnect this returns a NEW promise, and a cached one resolves to the
202
- * dead connection forever. The same reasoning makes
203
- * `AbstractDataServiceFrontend` rebuild its proxy rather than hold one.
202
+ * dead connection forever. The same reasoning makes `RpcConnection` rebuild
203
+ * its proxy per generation rather than hold one.
204
204
  */
205
205
  readonly current: Promise<MessageConnection>;
206
206