@hydranium/glsp-client-theia 1.0.0-next.22 → 1.0.0-next.220

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 (83) hide show
  1. package/README.md +55 -21
  2. package/lib/browser/action-dispatcher.d.ts +1 -1
  3. package/lib/browser/action-dispatcher.d.ts.map +1 -1
  4. package/lib/browser/action-dispatcher.js +1 -1
  5. package/lib/browser/action-dispatcher.js.map +1 -1
  6. package/lib/browser/client-contribution.d.ts +83 -25
  7. package/lib/browser/client-contribution.d.ts.map +1 -1
  8. package/lib/browser/client-contribution.js +225 -53
  9. package/lib/browser/client-contribution.js.map +1 -1
  10. package/lib/browser/diagram-loader.d.ts +16 -7
  11. package/lib/browser/diagram-loader.d.ts.map +1 -1
  12. package/lib/browser/diagram-loader.js +18 -10
  13. package/lib/browser/diagram-loader.js.map +1 -1
  14. package/lib/browser/diagram-only-marker-manager.d.ts.map +1 -1
  15. package/lib/browser/diagram-only-marker-manager.js.map +1 -1
  16. package/lib/browser/diagram-widget.d.ts +42 -24
  17. package/lib/browser/diagram-widget.d.ts.map +1 -1
  18. package/lib/browser/diagram-widget.js +74 -24
  19. package/lib/browser/diagram-widget.js.map +1 -1
  20. package/lib/browser/glsp-client-theia-module.d.ts +1 -1
  21. package/lib/browser/glsp-client-theia-module.d.ts.map +1 -1
  22. package/lib/browser/glsp-client-theia-module.js +3 -1
  23. package/lib/browser/glsp-client-theia-module.js.map +1 -1
  24. package/lib/browser/glsp-client.d.ts +17 -0
  25. package/lib/browser/glsp-client.d.ts.map +1 -0
  26. package/lib/browser/glsp-client.js +23 -0
  27. package/lib/browser/glsp-client.js.map +1 -0
  28. package/lib/browser/glsp-diagram-manager.d.ts +61 -0
  29. package/lib/browser/glsp-diagram-manager.d.ts.map +1 -1
  30. package/lib/browser/glsp-diagram-manager.js +126 -0
  31. package/lib/browser/glsp-diagram-manager.js.map +1 -1
  32. package/lib/browser/glsp-message-service.d.ts +8 -0
  33. package/lib/browser/glsp-message-service.d.ts.map +1 -1
  34. package/lib/browser/glsp-message-service.js +8 -0
  35. package/lib/browser/glsp-message-service.js.map +1 -1
  36. package/lib/browser/glsp-saveable.d.ts +66 -0
  37. package/lib/browser/glsp-saveable.d.ts.map +1 -0
  38. package/lib/browser/glsp-saveable.js +109 -0
  39. package/lib/browser/glsp-saveable.js.map +1 -0
  40. package/lib/browser/glsp-theia-frontend-module.d.ts.map +1 -1
  41. package/lib/browser/glsp-theia-frontend-module.js +4 -1
  42. package/lib/browser/glsp-theia-frontend-module.js.map +1 -1
  43. package/lib/browser/hidden-bounds-updater.d.ts +3 -5
  44. package/lib/browser/hidden-bounds-updater.d.ts.map +1 -1
  45. package/lib/browser/hidden-bounds-updater.js +8 -4
  46. package/lib/browser/hidden-bounds-updater.js.map +1 -1
  47. package/lib/browser/hydranium-glsp-diagram-configuration.d.ts.map +1 -1
  48. package/lib/browser/hydranium-glsp-diagram-configuration.js.map +1 -1
  49. package/lib/browser/index.d.ts +5 -0
  50. package/lib/browser/index.d.ts.map +1 -1
  51. package/lib/browser/index.js +4 -0
  52. package/lib/browser/index.js.map +1 -1
  53. package/lib/browser/status-overlay.d.ts +23 -0
  54. package/lib/browser/status-overlay.d.ts.map +1 -0
  55. package/lib/browser/status-overlay.js +52 -0
  56. package/lib/browser/status-overlay.js.map +1 -0
  57. package/lib/browser/window-session.d.ts +57 -0
  58. package/lib/browser/window-session.d.ts.map +1 -0
  59. package/lib/browser/window-session.js +102 -0
  60. package/lib/browser/window-session.js.map +1 -0
  61. package/lib/node/connection-container-module.js.map +1 -1
  62. package/lib/node/glsp-server-connection-handler.d.ts +12 -11
  63. package/lib/node/glsp-server-connection-handler.d.ts.map +1 -1
  64. package/lib/node/glsp-server-connection-handler.js +12 -15
  65. package/lib/node/glsp-server-connection-handler.js.map +1 -1
  66. package/lib/testing/bind-recorder.js.map +1 -1
  67. package/package.json +34 -41
  68. package/src/browser/action-dispatcher.ts +1 -1
  69. package/src/browser/client-contribution.ts +250 -54
  70. package/src/browser/diagram-loader.ts +19 -12
  71. package/src/browser/diagram-widget.ts +79 -27
  72. package/src/browser/glsp-client-theia-module.ts +4 -2
  73. package/src/browser/glsp-client.ts +20 -0
  74. package/src/browser/glsp-diagram-manager.ts +140 -2
  75. package/src/browser/glsp-message-service.ts +8 -0
  76. package/src/browser/glsp-saveable.ts +110 -0
  77. package/src/browser/glsp-theia-frontend-module.ts +4 -1
  78. package/src/browser/hidden-bounds-updater.ts +6 -7
  79. package/src/browser/index.ts +9 -0
  80. package/src/browser/status-overlay.ts +43 -0
  81. package/src/browser/window-session.ts +114 -0
  82. package/src/node/glsp-server-connection-handler.ts +13 -15
  83. 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`, and `HydraniumGlspMessageService`. Each
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
- **`AbstractHydraniumGlspDiagramManager`** derives the language-correlated
50
- getters from one descriptor plus a label.
51
- - **`HydraniumGlspClientContribution`** — for a server that starts late: it tails
52
- the Output channel for a server-printed ready marker and defers `start` until a
53
- workspace is open.
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
- plugging in `@eclipse-glsp/theia-integration`'s `SocketConnectionForwarder`) and
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,18 +140,19 @@ stylesheet loaded afterwards.
107
140
 
108
141
  ## Entry points
109
142
 
110
- | Subpath | Holds | Environment |
111
- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- |
112
- | `.` | Re-exports `./browser` — the larger of the two tiers and safe to load anywhere. | browser-neutral (gated) |
113
- | `./browser` | The frontend module bases, `createGlspClientTheiaModule`, the dispatcher, loader, widget, bounds updater, message service, diagram manager and configuration bases, `NoOpExternalMarkerManager` | browser / Theia frontend (gated) |
114
- | `./node` | `GlspServerConnectionHandler`, `createGlspConnectionContainerModule` | Node / Theia backend |
115
- | `./testing` | `makeBindRecorder`, the GLSP-module-specific Inversify double (the cross-head doubles live in `@hydranium/client-theia/testing`) | browser-neutral (gated) |
116
-
117
- Every subpath also has a `./lib/<name>` twin for consumers on
118
- `moduleResolution: "Node"`. "Gated" means the repository's neutral-bundle check
119
- enforces that the entry bundles for the browser with no `node:*` import,
120
- transitive ones included; `./node` is deliberately outside that gate. Also
121
- 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).
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) |
149
+
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
 
@@ -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/lib/browser';
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,qCAAqC,CAAC;AACnF,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;gBAEzD,OAAO,CAAC,EAAE,oCAAoC;IAa9D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IASpC;;;;;;;OAOG;IACH,SAAS,CAAC,kBAAkB,IAAI,IAAI;IAQ3B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOhD,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAczC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAkBvE;gFAC4E;IAC5E,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAiC3C,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAKtE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;CAoC7C"}
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/lib/browser");
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,iEAAmF;AAEnF,4DAA6E;AAE7E;;;qCAGqC;AACxB,QAAA,8BAA8B,GAAwB,IAAI,GAAG,CAAS;IAChF,uBAAc,CAAC,IAAI;IACnB,0BAAiB,CAAC,IAAI;IACtB,4BAAmB,CAAC,IAAI;IACxB,6BAAoB,CAAC,IAAI;IACzB,4BAAmB,CAAC,IAAI;IACxB,0BAAiB,CAAC,IAAI;IACtB,yBAAgB,CAAC,IAAI;IACrB,2BAAkB,CAAC,IAAI;IACvB,qBAAY,CAAC,IAAI;IACjB,sBAAa,CAAC,IAAI;IAClB,qBAAY,CAAC,IAAI;IACjB,8BAAqB,CAAC,IAAI;IAC1B,2BAAkB,CAAC,IAAI;IACvB,+BAAsB,CAAC,IAAI;CAC7B,CAAC,CAAC;AAEH;;gEAEgE;AACnD,QAAA,4BAA4B,GAAgC,IAAI,GAAG,CAAiB;IAC9F,CAAC,2BAAkB,CAAC,IAAI,EAAE,uBAAc,CAAC,IAAI,CAAC;IAC9C,CAAC,+BAAsB,CAAC,IAAI,EAAE,2BAAkB,CAAC,IAAI,CAAC;IACtD,CAAC,4BAAmB,CAAC,IAAI,EAAE,6BAAoB,CAAC,IAAI,CAAC;CACvD,CAAC,CAAC;AAaH;;;;;;;;;;GAUG;AAEI,IAAM,6BAA6B,GAAnC,MAAM,6BAA8B,SAAQ,6BAAoB;IAC1B,OAAO,CAAiB;IACxB,MAAM,CAAU;IAEvC,WAAW,CAAsB;IACjC,SAAS,CAA8B;IACvC,gBAAgB,CAA8B;IAEvD,WAAW,GAAG,CAAC,CAAC;IAC1B,wEAAwE;IAC9D,WAAW,GAAG,IAAI,GAAG,EAAyC,CAAC;IACzE,wFAAwF;IAC9E,aAAa,GAAG,IAAI,GAAG,EAAgD,CAAC;IAElF,YAAyB,OAA8C;QACpE,KAAK,EAAE,CAAC;QACR,MAAM,WAAW,GAAG,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1F,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,sCAA8B,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;QACxF,MAAM,UAAU,GAAG,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,MAAM,KAAK,GAAG,IAAI,GAAG,CAAiB,CAAC,GAAG,oCAA4B,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,CAAiB,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/F,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;YACtB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACtC,CAAC;IACJ,CAAC;IAEQ,UAAU;QAChB,0FAA0F;QAC1F,2FAA2F;QAC3F,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC7B,CAAC;QACD,OAAO,KAAK,CAAC,UAAU,EAAE,CAAC;IAC7B,CAAC;IAED;;;;;;;OAOG;IACO,kBAAkB;QACzB,IAAI,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;QACvG,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACZ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,6DAA6D,EAAE,GAAG,CAAC,CAAC;QAC1F,CAAC;IACJ,CAAC;IAEQ,QAAQ,CAAC,MAAc;QAC7B,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAES,SAAS,CAAC,MAAc;QAC/B,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,YAAY,MAAM,CAAC,IAAI,GAAG,EAAE,IAAI,SAAS,GAAG,CAAC,CAAC;QACpE,IAAI,OAAO,EAAE,CAAC;YACX,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,MAAM,EAAE,CAAC;YACV,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,CAAC;IAES,QAAQ,CAAC,MAAc;QAC9B,iGAAiG;QACjG,IAAI,kCAAyB,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;YACxC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;QAC5D,CAAC;QACD,uEAAuE;QACvE,IAAI,qBAAY,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;QAC5D,CAAC;QACD,kGAAkG;QAClG,oEAAoE;QACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,YAAY,wBAAe,CAAC,EAAE,CAAC;YAChE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;QACzD,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC5D,CAAC;IAED;gFAC4E;IAClE,SAAS,CAAC,MAAc;QAC/B,iBAAiB;QACjB,IAAI,uBAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACtD,IAAI,KAAK,EAAE,CAAC;gBACT,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAC3C,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACrC,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAClD,MAAM,KAAK,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC;YAC7B,IAAI,KAAK,EAAE,CAAC;gBACT,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACrC,CAAC;QACJ,CAAC;QACD,gBAAgB;QAChB,IAAI,sBAAa,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YAChD,MAAM,KAAK,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC;YACnE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC9C,OAAO,aAAa,KAAK,CAAC,EAAE,GAAG,CAAC;QACnC,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAE,CAAC;YACtD,MAAM,KAAK,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC;YACnE,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YAC5C,OAAO,aAAa,KAAK,CAAC,EAAE,GAAG,CAAC;QACnC,CAAC;QACD,OAAO,EAAE,CAAC;IACb,CAAC;IAES,cAAc,CAAC,KAAoC;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5D,OAAO,cAAc,KAAK,CAAC,EAAE,KAAK,OAAO,KAAK,CAAC;IAClD,CAAC;IAES,SAAS,CAAC,MAAc;QAC/B,IAAI,uBAAc,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,0BAAiB,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;YAC5B,OAAO,YAAY,IAAI,EAAE,IAAI,IAAI,MAAM,aAAa,IAAI,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;QACrF,CAAC;QACD,IAAI,4BAAmB,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,OAAO,YAAY,MAAM,CAAC,OAAO,CAAC,IAAI,aAAa,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;QAC7F,CAAC;QACD,IAAI,6BAAoB,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,OAAO,UAAU,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAC3C,CAAC;QACD,IAAI,4BAAmB,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,OAAO,WAAW,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;QACvE,CAAC;QACD,IAAI,0BAAiB,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,OAAO,YAAY,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxC,CAAC;QACD,IAAI,yBAAgB,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,OAAO,WAAW,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAC7C,CAAC;QACD,IAAI,qBAAY,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,sBAAa,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;YACvD,uEAAuE;YACvE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,KAAK,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9E,OAAO,YAAY,MAAM,CAAC,QAAQ,aAAa,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC;QAC1F,CAAC;QACD,IAAI,qBAAY,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,OAAO,WAAW,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;QACrD,CAAC;QACD,IAAI,2BAAkB,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,OAAO,UAAU,MAAM,CAAC,UAAU,CAAC,MAAM,UAAU,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QAChF,CAAC;QACD,IAAI,8BAAqB,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;YACpC,OAAO,aAAa,MAAM,CAAC,SAAS,EAAE,CAAC;QAC1C,CAAC;QACD,OAAO,EAAE,CAAC;IACb,CAAC;CACH,CAAA;AAvKY,sEAA6B;AACG;IAAzC,IAAA,kBAAM,EAAC,uBAAa,CAAC;8BAA8B,uBAAa;8DAAC;AACxB;IAAzC,IAAA,kBAAM,EAAC,uBAAa,CAAC;;6DAAoC;wCAFhD,6BAA6B;IADzC,IAAA,sBAAU,GAAE;IAeG,WAAA,IAAA,qBAAS,GAAE,CAAA;;GAdd,6BAA6B,CAuKzC"}
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 { OutputChannelManager } from '@theia/output/lib/browser/output-channel';
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
- /** Options for `HydraniumGlspClientContribution`. The channel name is the
14
- * Theia Output channel both the LSP and GLSP sides write to (so log lines
15
- * interleave); the ready marker is a server-printed substring that signals
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
- readonly channelName: string;
20
- readonly readyMarker: string;
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
- * 1. `waitForBackendConnected`: tail the OutputChannel for a server-printed
28
- * ready marker. While a socket connection might open earlier, the GLSP
29
- * server typically does internal initialisation before it can accept
30
- * client connections — we wait for it to say so.
31
- * 2. `start`: defer until a workspace is opened. If Theia starts without a
32
- * workspace, this prevents the frontend-backend connection (and its
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, so the `TheiaJsonrpcGLSPClient` returned by
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
- protected readonly channelName: string;
45
- protected readonly readyMarker: string;
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
- /** Wait for the server to print its ready marker into the OutputChannel.
48
- * Resolves immediately if the marker is already present (server started
49
- * before the client contribution mounted). */
50
- protected waitForBackendConnected(): Promise<void>;
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,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAG7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE;;;yDAGyD;AACzD,MAAM,WAAW,yBAAyB;IACvC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBACa,+BAAgC,SAAQ,0BAA0B;IAC9C,SAAS,CAAC,oBAAoB,EAAG,oBAAoB,CAAC;IAC1D,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAG,gBAAgB,CAAC;IAEjF,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IACvC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAEd,OAAO,EAAE,yBAAyB;IAO3D;;mDAE+C;cAC/B,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;cAkB/B,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAkBvE"}
1
+ {"version":3,"file":"client-contribution.d.ts","sourceRoot":"","sources":["../../src/browser/client-contribution.ts"],"names":[],"mappings":"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"}