@hydranium/glsp-client-theia 1.0.0-next.23 → 1.0.0-next.232
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.
- package/README.md +59 -24
- package/lib/browser/action-dispatcher.d.ts +1 -1
- package/lib/browser/action-dispatcher.d.ts.map +1 -1
- package/lib/browser/action-dispatcher.js +1 -1
- package/lib/browser/action-dispatcher.js.map +1 -1
- package/lib/browser/client-contribution.d.ts +83 -25
- package/lib/browser/client-contribution.d.ts.map +1 -1
- package/lib/browser/client-contribution.js +225 -53
- package/lib/browser/client-contribution.js.map +1 -1
- package/lib/browser/diagram-loader.d.ts +16 -7
- package/lib/browser/diagram-loader.d.ts.map +1 -1
- package/lib/browser/diagram-loader.js +18 -10
- package/lib/browser/diagram-loader.js.map +1 -1
- package/lib/browser/diagram-only-marker-manager.d.ts.map +1 -1
- package/lib/browser/diagram-only-marker-manager.js.map +1 -1
- package/lib/browser/diagram-widget.d.ts +42 -24
- package/lib/browser/diagram-widget.d.ts.map +1 -1
- package/lib/browser/diagram-widget.js +74 -24
- package/lib/browser/diagram-widget.js.map +1 -1
- package/lib/browser/glsp-client-theia-module.d.ts +1 -1
- package/lib/browser/glsp-client-theia-module.d.ts.map +1 -1
- package/lib/browser/glsp-client-theia-module.js +3 -1
- package/lib/browser/glsp-client-theia-module.js.map +1 -1
- package/lib/browser/glsp-client.d.ts +17 -0
- package/lib/browser/glsp-client.d.ts.map +1 -0
- package/lib/browser/glsp-client.js +23 -0
- package/lib/browser/glsp-client.js.map +1 -0
- package/lib/browser/glsp-diagram-manager.d.ts +61 -0
- package/lib/browser/glsp-diagram-manager.d.ts.map +1 -1
- package/lib/browser/glsp-diagram-manager.js +126 -0
- package/lib/browser/glsp-diagram-manager.js.map +1 -1
- package/lib/browser/glsp-message-service.d.ts +8 -0
- package/lib/browser/glsp-message-service.d.ts.map +1 -1
- package/lib/browser/glsp-message-service.js +8 -0
- package/lib/browser/glsp-message-service.js.map +1 -1
- package/lib/browser/glsp-saveable.d.ts +66 -0
- package/lib/browser/glsp-saveable.d.ts.map +1 -0
- package/lib/browser/glsp-saveable.js +109 -0
- package/lib/browser/glsp-saveable.js.map +1 -0
- package/lib/browser/glsp-theia-frontend-module.d.ts.map +1 -1
- package/lib/browser/glsp-theia-frontend-module.js +4 -1
- package/lib/browser/glsp-theia-frontend-module.js.map +1 -1
- package/lib/browser/hidden-bounds-updater.d.ts +3 -5
- package/lib/browser/hidden-bounds-updater.d.ts.map +1 -1
- package/lib/browser/hidden-bounds-updater.js +8 -4
- package/lib/browser/hidden-bounds-updater.js.map +1 -1
- package/lib/browser/hydranium-glsp-diagram-configuration.d.ts.map +1 -1
- package/lib/browser/hydranium-glsp-diagram-configuration.js.map +1 -1
- package/lib/browser/index.d.ts +5 -0
- package/lib/browser/index.d.ts.map +1 -1
- package/lib/browser/index.js +4 -0
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/status-overlay.d.ts +23 -0
- package/lib/browser/status-overlay.d.ts.map +1 -0
- package/lib/browser/status-overlay.js +52 -0
- package/lib/browser/status-overlay.js.map +1 -0
- package/lib/browser/window-session.d.ts +57 -0
- package/lib/browser/window-session.d.ts.map +1 -0
- package/lib/browser/window-session.js +102 -0
- package/lib/browser/window-session.js.map +1 -0
- package/lib/node/connection-container-module.js.map +1 -1
- package/lib/node/glsp-server-connection-handler.d.ts +12 -11
- package/lib/node/glsp-server-connection-handler.d.ts.map +1 -1
- package/lib/node/glsp-server-connection-handler.js +12 -15
- package/lib/node/glsp-server-connection-handler.js.map +1 -1
- package/lib/testing/bind-recorder.js.map +1 -1
- package/package.json +34 -41
- package/src/browser/action-dispatcher.ts +1 -1
- package/src/browser/client-contribution.ts +250 -54
- package/src/browser/diagram-loader.ts +19 -12
- package/src/browser/diagram-widget.ts +79 -27
- package/src/browser/glsp-client-theia-module.ts +4 -2
- package/src/browser/glsp-client.ts +20 -0
- package/src/browser/glsp-diagram-manager.ts +140 -2
- package/src/browser/glsp-message-service.ts +8 -0
- package/src/browser/glsp-saveable.ts +110 -0
- package/src/browser/glsp-theia-frontend-module.ts +4 -1
- package/src/browser/hidden-bounds-updater.ts +6 -7
- package/src/browser/index.ts +9 -0
- package/src/browser/status-overlay.ts +43 -0
- package/src/browser/window-session.ts +114 -0
- package/src/node/glsp-server-connection-handler.ts +13 -15
- package/style/diagram-loading.css +2 -5
package/README.md
CHANGED
|
@@ -21,7 +21,9 @@ if you are mounting a hydranium GLSP diagram in a Theia application.
|
|
|
21
21
|
- **`createGlspClientTheiaModule(context, options)`** — the standard per-diagram
|
|
22
22
|
bindings, all unconditional: the cross-head `ChannelLogger`,
|
|
23
23
|
`HydraniumGlspActionDispatcher`, `HydraniumDiagramLoader`,
|
|
24
|
-
`HydraniumHiddenBoundsUpdater`,
|
|
24
|
+
`HydraniumHiddenBoundsUpdater`, `HydraniumGlspMessageService`, and
|
|
25
|
+
`HydraniumStatusOverlay`, which keeps GLSP's status overlay on the page after
|
|
26
|
+
sprotty's first render replaces the diagram's base div. Each
|
|
25
27
|
replaces a GLSP default with a strict superset of its behaviour, so a head that
|
|
26
28
|
wants the original rebinds that one token back.
|
|
27
29
|
- **Loading feedback that cannot silently vanish.** `HydraniumDiagramLoader`
|
|
@@ -46,13 +48,42 @@ if you are mounting a hydranium GLSP diagram in a Theia application.
|
|
|
46
48
|
LSP already publishes the same diagnostics, and the per-diagram container binds
|
|
47
49
|
`NoOpExternalMarkerManager` instead: markers still decorate the diagram, but
|
|
48
50
|
Theia's Problems view stops double-listing them.
|
|
49
|
-
|
|
50
|
-
getters from one descriptor plus a label
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
- **`AbstractHydraniumGlspDiagramManager`** derives the language-correlated
|
|
52
|
+
getters from one descriptor plus a label, and `reopen` replaces a diagram
|
|
53
|
+
with a fresh widget in the same tab position, as the Retry of a failed load
|
|
54
|
+
does. It reopens every diagram when their client is lost, and a failed one
|
|
55
|
+
when a client starts. A diagram's client id is the same for the same widget
|
|
56
|
+
in the same window, so a diagram reopened after its client is lost, or
|
|
57
|
+
reloaded with its page, takes its old session over with the window's resume
|
|
58
|
+
token and keeps its unsaved text.
|
|
59
|
+
- **`WindowSessionService`** — the window's id and resume token, claimed as
|
|
60
|
+
the frontend starts. The default keeps them in `sessionStorage` and hands
|
|
61
|
+
them on only as the page leaves, so a reload resumes and a duplicated tab
|
|
62
|
+
draws its own. Rebind it for a different notion of a window.
|
|
63
|
+
- **`HydraniumGlspClientContribution`** — for a server that starts late: it
|
|
64
|
+
defers `start` until a workspace is open, fails a start that takes longer than
|
|
65
|
+
`startupTimeoutMs` (30 s by default), and starts a fresh client after a failed
|
|
66
|
+
start or a lost connection, after a delay that grows while clients keep
|
|
67
|
+
failing, reporting each attempt through `client-theia`'s
|
|
68
|
+
`ConnectionReporter`. `onDidStartClient` and `onDidLoseClient` announce each
|
|
69
|
+
client, and each start and loss is logged to the application-scope
|
|
70
|
+
`ChannelLogger` an adopter binds with `bindChannelLogger`. Its client is
|
|
71
|
+
`HydraniumGlspClient`, which ends a session without the server once the
|
|
72
|
+
connection is gone.
|
|
73
|
+
- **`HydraniumGlspSaveable`** — the diagram widget's saveable. Each save is a
|
|
74
|
+
`RequestSaveModelAction` the server answers: the save resolves on its own
|
|
75
|
+
response, and rejects on its own rejection or after 10 s rather than GLSP's
|
|
76
|
+
2 s. It stays dirty while a save is pending, so Theia's exit check still
|
|
77
|
+
counts it. The server answers through
|
|
78
|
+
`HydraniumGlspRequestSaveModelActionHandler`, which
|
|
79
|
+
`AbstractHydraniumGlspDiagramModule` registers; against a server that does
|
|
80
|
+
not advertise the request, the saveable behaves as GLSP's does. The dirty
|
|
81
|
+
flag follows the server, so an edit whose dirty state has not arrived when
|
|
82
|
+
Save All runs is not saved. Under the `fire-and-forget` `SaveDeliveryPolicy`
|
|
83
|
+
the server answers before the disk write finishes, and answers a failed
|
|
84
|
+
write as saved.
|
|
54
85
|
- **Backend (`./node`)** — `GlspServerConnectionHandler` (the socket bridge,
|
|
55
|
-
|
|
86
|
+
over `@hydranium/client-theia`'s `SocketChannelForwarder`) and
|
|
56
87
|
`createGlspConnectionContainerModule(handler)` for the frontend-scoped module
|
|
57
88
|
boilerplate.
|
|
58
89
|
|
|
@@ -73,11 +104,11 @@ hydranium GLSP server. The declared peer dependencies are:
|
|
|
73
104
|
| `@hydranium/client-theia` | `^1.0.0-next` |
|
|
74
105
|
| `@hydranium/protocol` | `^1.0.0-next` |
|
|
75
106
|
| `@theia/core` | `^1.70.0` |
|
|
76
|
-
| `@theia/output` | `^1.70.0` |
|
|
77
107
|
| `@theia/process` | `^1.70.0` |
|
|
78
108
|
| `@theia/workspace` | `^1.70.0` |
|
|
79
109
|
| `inversify` | `^6.0.0` |
|
|
80
110
|
| `snabbdom` | `^3.5.1` |
|
|
111
|
+
| `vscode-jsonrpc` | `^9.0.0` |
|
|
81
112
|
|
|
82
113
|
## Wiring
|
|
83
114
|
|
|
@@ -89,7 +120,9 @@ frontend/backend pair:
|
|
|
89
120
|
`export default new MyDiagramModule()`, where `MyDiagramModule` extends
|
|
90
121
|
`AbstractHydraniumGlspTheiaFrontendModule`. Your `DiagramConfiguration`
|
|
91
122
|
subclass calls `createGlspClientTheiaModule` in its container initialisation,
|
|
92
|
-
passing the `channelLogger` name
|
|
123
|
+
passing the `channelLogger` name. One of the extension's frontend modules
|
|
124
|
+
also calls `bindEditorDiskSync` from `@hydranium/client-theia`, since a
|
|
125
|
+
diagram save writes a file an editor can have open;
|
|
93
126
|
- the **backend** entry is typically
|
|
94
127
|
`export default createGlspConnectionContainerModule(MyHandler)`, where
|
|
95
128
|
`MyHandler` extends `GlspServerConnectionHandler`. The handler's
|
|
@@ -107,25 +140,27 @@ stylesheet loaded afterwards.
|
|
|
107
140
|
|
|
108
141
|
## Entry points
|
|
109
142
|
|
|
110
|
-
| Subpath | Holds
|
|
111
|
-
| ----------- |
|
|
112
|
-
| `.` | Re-exports `./browser` — the larger of the two tiers and safe to load anywhere.
|
|
113
|
-
| `./browser` | The frontend module bases, `createGlspClientTheiaModule`, the dispatcher, loader, widget, bounds updater, message service, diagram manager and configuration bases, `NoOpExternalMarkerManager`
|
|
114
|
-
| `./node` | `GlspServerConnectionHandler`, `createGlspConnectionContainerModule`
|
|
115
|
-
| `./testing` | `makeBindRecorder`, the GLSP-module-specific Inversify double (the cross-head doubles live in `@hydranium/client-theia/testing`)
|
|
143
|
+
| Subpath | Holds | Environment |
|
|
144
|
+
| ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- |
|
|
145
|
+
| `.` | Re-exports `./browser` — the larger of the two tiers and safe to load anywhere. | browser-neutral (gated) |
|
|
146
|
+
| `./browser` | The frontend module bases, `createGlspClientTheiaModule`, the dispatcher, loader, widget and its saveable, bounds updater, message service, diagram manager and configuration bases, `NoOpExternalMarkerManager` | browser / Theia frontend (gated) |
|
|
147
|
+
| `./node` | `GlspServerConnectionHandler`, `createGlspConnectionContainerModule` | Node / Theia backend |
|
|
148
|
+
| `./testing` | `makeBindRecorder`, the GLSP-module-specific Inversify double (the cross-head doubles live in `@hydranium/client-theia/testing`) | browser-neutral (gated) |
|
|
116
149
|
|
|
117
|
-
|
|
118
|
-
`
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
150
|
+
Resolve the subpaths with [a resolver that reads
|
|
151
|
+
`exports`](../../docs/adopting/requirements.md#a-resolver-that-reads-exports);
|
|
152
|
+
`"Node"` (node10) reaches none of them. "Gated" means the
|
|
153
|
+
repository's neutral-bundle check enforces that the entry bundles for the
|
|
154
|
+
browser with no `node:*` import, transitive ones included; `./node` is
|
|
155
|
+
deliberately outside that gate. Also worth reading: [what "gated neutral" does and does not promise](../../docs/concepts/browser-hosting.md#a-note-on-what-gated-neutral-does-and-does-not-promise).
|
|
122
156
|
|
|
123
157
|
## Status
|
|
124
158
|
|
|
125
|
-
Alpha — pre-v0,
|
|
126
|
-
deprecation cycle. See
|
|
127
|
-
|
|
128
|
-
[repository README](../../README.md)
|
|
159
|
+
Alpha — pre-v0, published as a `1.0.0-next` prerelease on every merge to `main`.
|
|
160
|
+
The API is not stable and may change without a deprecation cycle. See
|
|
161
|
+
[`docs/concepts/architecture.md`](../../docs/concepts/architecture.md) for the
|
|
162
|
+
GLSP head's place among the heads, and the [repository README](../../README.md)
|
|
163
|
+
for current status and known limitations.
|
|
129
164
|
|
|
130
165
|
## License
|
|
131
166
|
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
import { type Action, GLSPActionDispatcher } from '@eclipse-glsp/client';
|
|
10
|
-
import { ChannelLogger } from '@hydranium/client-theia/
|
|
10
|
+
import { ChannelLogger } from '@hydranium/client-theia/browser';
|
|
11
11
|
import { type Tracer } from '@hydranium/protocol';
|
|
12
12
|
/** Default subset of action kinds the framework dispatcher will log: the GLSP
|
|
13
13
|
* traffic an observer reading the Output channel typically wants to see. All
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-dispatcher.d.ts","sourceRoot":"","sources":["../../src/browser/action-dispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EACJ,KAAK,MAAM,EAEX,oBAAoB,EAmBtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAiB,MAAM,
|
|
1
|
+
{"version":3,"file":"action-dispatcher.d.ts","sourceRoot":"","sources":["../../src/browser/action-dispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EACJ,KAAK,MAAM,EAEX,oBAAoB,EAmBtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAiB,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD;;;qCAGqC;AACrC,eAAO,MAAM,8BAA8B,EAAE,WAAW,CAAC,MAAM,CAe7D,CAAC;AAEH;;gEAEgE;AAChE,eAAO,MAAM,4BAA4B,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAInE,CAAC;AAEH;;6EAE6E;AAC7E,MAAM,WAAW,oCAAoC;IAClD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D;+DAC2D;IAC3D,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;CAClD;AAED;;;;;;;;;;GAUG;AACH,qBACa,6BAA8B,SAAQ,oBAAoB;IAC7C,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAG,aAAa,CAAC;IAC3C,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAG,MAAM,CAAC;IAE1D,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpD,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1D,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjE,SAAS,CAAC,WAAW,SAAK;IAC1B,wEAAwE;IACxE,SAAS,CAAC,WAAW;YAAyB,MAAM;eAAS,MAAM;OAAM;IACzE,wFAAwF;IACxF,SAAS,CAAC,aAAa;YAA+B,MAAM;eAAS,MAAM;SAAO;IAElF,YAAyB,OAAO,CAAC,EAAE,oCAAoC,EAWtE;IAEQ,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAOnC;IAED;;;;;;;OAOG;IACH,SAAS,CAAC,kBAAkB,IAAI,IAAI,CAMnC;IAEQ,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK/C;IAED,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAYxC;IAED,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAgBtE;IAED;gFAC4E;IAC5E,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA+B1C;IAED,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAGrE;IAED,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAmC1C;CACH"}
|
|
@@ -22,7 +22,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
22
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
23
|
exports.HydraniumGlspActionDispatcher = exports.HYDRANIUM_DEFAULT_KIND_PAIRS = exports.HYDRANIUM_DEFAULT_LOGGED_KINDS = void 0;
|
|
24
24
|
const client_1 = require("@eclipse-glsp/client");
|
|
25
|
-
const browser_1 = require("@hydranium/client-theia/
|
|
25
|
+
const browser_1 = require("@hydranium/client-theia/browser");
|
|
26
26
|
const inversify_1 = require("@theia/core/shared/inversify");
|
|
27
27
|
/** Default subset of action kinds the framework dispatcher will log: the GLSP
|
|
28
28
|
* traffic an observer reading the Output channel typically wants to see. All
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-dispatcher.js","sourceRoot":"","sources":["../../src/browser/action-dispatcher.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;;;;;;;;;;;;;;AAElF,iDAsB8B;AAC9B,
|
|
1
|
+
{"version":3,"file":"action-dispatcher.js","sourceRoot":"","sources":["../../src/browser/action-dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,48 +6,106 @@
|
|
|
6
6
|
*
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
|
-
import { type GLSPClient } from '@eclipse-glsp/client';
|
|
9
|
+
import { type GLSPClient, type InitializeResult } from '@eclipse-glsp/client';
|
|
10
10
|
import { BaseGLSPClientContribution } from '@eclipse-glsp/theia-integration';
|
|
11
|
-
import {
|
|
11
|
+
import { ChannelLogger, ConnectionReporter, type ConnectionTarget } from '@hydranium/client-theia/browser';
|
|
12
|
+
import { type Channel, Emitter, Event } from '@theia/core';
|
|
13
|
+
import { Deferred } from '@theia/core/lib/common/promise-util';
|
|
12
14
|
import { WorkspaceService } from '@theia/workspace/lib/browser';
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
* "the GLSP server is accepting client connections". */
|
|
15
|
+
import 'vscode-jsonrpc/browser';
|
|
16
|
+
export declare const DEFAULT_GLSP_CLIENT_STARTUP_TIMEOUT_MS = 30000;
|
|
17
|
+
/** Options for `HydraniumGlspClientContribution`. */
|
|
17
18
|
export interface ClientContributionOptions {
|
|
18
19
|
readonly languageContributionId: string;
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
/** How long a start may take, from the workspace opening to the server
|
|
21
|
+
* answering `initializeServer`, before it fails; `0` or less waits for good. */
|
|
22
|
+
readonly startupTimeoutMs?: number;
|
|
21
23
|
}
|
|
22
24
|
/**
|
|
23
25
|
* Theia GLSP client contribution for adopters whose GLSP server runs in a
|
|
24
26
|
* sideloaded VS Code extension process (or any other deferred-start setup).
|
|
25
|
-
* The behaviours adopters reliably need are lifted:
|
|
26
27
|
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* "connecting" progress spinner) from firing prematurely.
|
|
28
|
+
* The client starts once a workspace is open and sends its first request at
|
|
29
|
+
* once; the backend handler holds it until its socket to the server is up. A
|
|
30
|
+
* start that fails, and a connection lost after one succeeded, start a fresh
|
|
31
|
+
* client after a backoff, for as long as the contribution lives. Each start is
|
|
32
|
+
* reported through the {@link ConnectionReporter}, and announced through
|
|
33
|
+
* {@link onDidStartClient} and {@link onDidLoseClient}.
|
|
34
34
|
*
|
|
35
35
|
* A `GLSPClient` override filtering inbound messages by clientId is
|
|
36
36
|
* deliberately NOT provided: upstream's `BaseJsonrpcGLSPClient.onActionMessage`
|
|
37
|
-
* already filters by clientId
|
|
38
|
-
* `BaseGLSPClientContribution.createGLSPClient` is correct as-is.
|
|
37
|
+
* already filters by clientId.
|
|
39
38
|
*/
|
|
40
39
|
export declare class HydraniumGlspClientContribution extends BaseGLSPClientContribution {
|
|
41
|
-
protected outputChannelManager: OutputChannelManager;
|
|
42
40
|
protected readonly workspaceService: WorkspaceService;
|
|
41
|
+
protected readonly connectionReporter: ConnectionReporter;
|
|
42
|
+
protected readonly logger: ChannelLogger;
|
|
43
43
|
readonly id: string;
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
/** Delay before the restart following each consecutive failed start or lost
|
|
45
|
+
* client; the last repeats. */
|
|
46
|
+
protected readonly restartDelaysMs: readonly number[];
|
|
47
|
+
/** How long a client must stay up before the restart delays start over, so
|
|
48
|
+
* a server that fails right after starting is not restarted at once. */
|
|
49
|
+
protected readonly restartEscalationResetMs: number;
|
|
50
|
+
protected consecutiveFailures: number;
|
|
51
|
+
protected restartTimer?: ReturnType<typeof setTimeout>;
|
|
52
|
+
/** When the current client started; `0` once a restart has taken it into account. */
|
|
53
|
+
protected startedAt: number;
|
|
54
|
+
/** Clients started so far, which numbers them in the log: they share {@link id}. */
|
|
55
|
+
protected startedClients: number;
|
|
56
|
+
/** The attempt waiting for a channel, if any. */
|
|
57
|
+
protected channelRequest?: Deferred<Channel>;
|
|
58
|
+
protected disposed: boolean;
|
|
59
|
+
protected readonly clientStartedEmitter: Emitter<GLSPClient>;
|
|
60
|
+
protected readonly clientLostEmitter: Emitter<void>;
|
|
61
|
+
/** Fires with each client once it has started and its server has answered. */
|
|
62
|
+
readonly onDidStartClient: Event<GLSPClient>;
|
|
63
|
+
/** Fires when the started client stops; {@link glspClient} already waits
|
|
64
|
+
* for its replacement then. */
|
|
65
|
+
readonly onDidLoseClient: Event<void>;
|
|
46
66
|
constructor(options: ClientContributionOptions);
|
|
47
|
-
/**
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
67
|
+
/** The client every diagram load awaits; after a failed start, a fresh one. */
|
|
68
|
+
get glspClient(): Promise<GLSPClient>;
|
|
69
|
+
/** Start a fresh client over a fresh channel at once, if the last start failed. */
|
|
70
|
+
restart(): Promise<GLSPClient>;
|
|
71
|
+
/** Point {@link glspClient} at a fresh client still to start, and tear down
|
|
72
|
+
* the old one's channel. */
|
|
73
|
+
protected replaceClient(): void;
|
|
74
|
+
/** Settles the promise current when it began, so a start a restart overtook
|
|
75
|
+
* cannot settle its successor. */
|
|
76
|
+
protected activateClient(): Promise<void>;
|
|
77
|
+
/** Run `restart` after the delay for the failures so far, and return that delay. */
|
|
78
|
+
protected scheduleRestart(restart: () => void): number;
|
|
79
|
+
/** Once `client` stops, replace it and start its replacement after the
|
|
80
|
+
* restart delay, unless a dispose stopped it. */
|
|
81
|
+
protected restartOnLoss(client: GLSPClient): void;
|
|
82
|
+
/** Start the client and initialize its server, rejecting on failure; the
|
|
83
|
+
* caller settles {@link glspClient}. */
|
|
51
84
|
protected start(glspClient: GLSPClient): Promise<void>;
|
|
85
|
+
/** Without upstream's own error notification, which would duplicate the reporter's. */
|
|
86
|
+
protected initialize(glspClient: GLSPClient): Promise<InitializeResult>;
|
|
87
|
+
/** Upstream's base client, without the notifications of its Theia subclass,
|
|
88
|
+
* which would duplicate the reporter's. */
|
|
89
|
+
protected createGLSPClient(connectionProvider: Parameters<BaseGLSPClientContribution['createGLSPClient']>[0]): Promise<GLSPClient>;
|
|
90
|
+
/**
|
|
91
|
+
* Whichever channel arrives goes to the attempt waiting now, and one that
|
|
92
|
+
* arrives with none waiting is closed. Theia holds each open until its
|
|
93
|
+
* websocket is back, and after an outage every held open past the first
|
|
94
|
+
* throws "already open" without reaching its handler, so the first to arrive
|
|
95
|
+
* has to serve the latest attempt. Without Theia's replay, which would be a
|
|
96
|
+
* second opener of the same path.
|
|
97
|
+
*/
|
|
98
|
+
protected createChannelConnection(): ReturnType<BaseGLSPClientContribution['createChannelConnection']>;
|
|
99
|
+
/** Also closes the channel: upstream leaves a Theia channel open, and the
|
|
100
|
+
* next one on the same path then cannot open. */
|
|
101
|
+
protected disposeChannel(connection: Parameters<BaseGLSPClientContribution['disposeChannel']>[0], channel: Channel): Promise<void>;
|
|
102
|
+
/** Also fails a start in flight, so nothing reports it after this. */
|
|
103
|
+
dispose(): void;
|
|
104
|
+
protected workspaceOpened(): Promise<void>;
|
|
105
|
+
protected get connectionTarget(): ConnectionTarget;
|
|
106
|
+
/** One object per contribution: the reporter keys what it has shown on it. */
|
|
107
|
+
protected cachedConnectionTarget?: ConnectionTarget;
|
|
108
|
+
protected unreachableMessage(): string;
|
|
109
|
+
protected startupTimeoutMessage(): string;
|
|
52
110
|
}
|
|
53
111
|
//# sourceMappingURL=client-contribution.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-contribution.d.ts","sourceRoot":"","sources":["../../src/browser/client-contribution.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,
|
|
1
|
+
{"version":3,"file":"client-contribution.d.ts","sourceRoot":"","sources":["../../src/browser/client-contribution.ts"],"names":[],"mappings":"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"}
|