@hydranium/glsp-client-theia 1.0.0-next.4 → 1.0.0-next.400

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 (90) hide show
  1. package/README.md +67 -104
  2. package/lib/browser/client-contribution.d.ts +87 -25
  3. package/lib/browser/client-contribution.d.ts.map +1 -1
  4. package/lib/browser/client-contribution.js +233 -53
  5. package/lib/browser/client-contribution.js.map +1 -1
  6. package/lib/browser/diagram-only-marker-manager.d.ts.map +1 -1
  7. package/lib/browser/diagram-only-marker-manager.js.map +1 -1
  8. package/lib/browser/diagram-widget.d.ts +43 -25
  9. package/lib/browser/diagram-widget.d.ts.map +1 -1
  10. package/lib/browser/diagram-widget.js +76 -26
  11. package/lib/browser/diagram-widget.js.map +1 -1
  12. package/lib/browser/glsp-client-theia-module.d.ts +12 -5
  13. package/lib/browser/glsp-client-theia-module.d.ts.map +1 -1
  14. package/lib/browser/glsp-client-theia-module.js +27 -12
  15. package/lib/browser/glsp-client-theia-module.js.map +1 -1
  16. package/lib/browser/glsp-diagram-manager.d.ts +61 -0
  17. package/lib/browser/glsp-diagram-manager.d.ts.map +1 -1
  18. package/lib/browser/glsp-diagram-manager.js +129 -0
  19. package/lib/browser/glsp-diagram-manager.js.map +1 -1
  20. package/lib/browser/glsp-message-service.d.ts +8 -0
  21. package/lib/browser/glsp-message-service.d.ts.map +1 -1
  22. package/lib/browser/glsp-message-service.js +8 -0
  23. package/lib/browser/glsp-message-service.js.map +1 -1
  24. package/lib/browser/glsp-saveable.d.ts +69 -0
  25. package/lib/browser/glsp-saveable.d.ts.map +1 -0
  26. package/lib/browser/glsp-saveable.js +112 -0
  27. package/lib/browser/glsp-saveable.js.map +1 -0
  28. package/lib/browser/glsp-theia-frontend-module.d.ts.map +1 -1
  29. package/lib/browser/glsp-theia-frontend-module.js +4 -1
  30. package/lib/browser/glsp-theia-frontend-module.js.map +1 -1
  31. package/lib/browser/hydranium-glsp-diagram-configuration.d.ts +3 -1
  32. package/lib/browser/hydranium-glsp-diagram-configuration.d.ts.map +1 -1
  33. package/lib/browser/hydranium-glsp-diagram-configuration.js +3 -1
  34. package/lib/browser/hydranium-glsp-diagram-configuration.js.map +1 -1
  35. package/lib/browser/index.d.ts +4 -3
  36. package/lib/browser/index.d.ts.map +1 -1
  37. package/lib/browser/index.js +7 -5
  38. package/lib/browser/index.js.map +1 -1
  39. package/lib/browser/theia-diagram-loader.d.ts +25 -0
  40. package/lib/browser/theia-diagram-loader.d.ts.map +1 -0
  41. package/lib/browser/theia-diagram-loader.js +42 -0
  42. package/lib/browser/theia-diagram-loader.js.map +1 -0
  43. package/lib/browser/window-session.d.ts +57 -0
  44. package/lib/browser/window-session.d.ts.map +1 -0
  45. package/lib/browser/window-session.js +102 -0
  46. package/lib/browser/window-session.js.map +1 -0
  47. package/lib/node/connection-container-module.js.map +1 -1
  48. package/lib/node/glsp-server-connection-handler.d.ts +12 -11
  49. package/lib/node/glsp-server-connection-handler.d.ts.map +1 -1
  50. package/lib/node/glsp-server-connection-handler.js +12 -15
  51. package/lib/node/glsp-server-connection-handler.js.map +1 -1
  52. package/package.json +52 -59
  53. package/src/browser/client-contribution.ts +254 -55
  54. package/src/browser/diagram-widget.ts +80 -28
  55. package/src/browser/glsp-client-theia-module.ts +34 -13
  56. package/src/browser/glsp-diagram-manager.ts +143 -2
  57. package/src/browser/glsp-message-service.ts +8 -0
  58. package/src/browser/glsp-saveable.ts +113 -0
  59. package/src/browser/glsp-theia-frontend-module.ts +4 -1
  60. package/src/browser/hydranium-glsp-diagram-configuration.ts +3 -1
  61. package/src/browser/index.ts +12 -5
  62. package/src/browser/theia-diagram-loader.ts +31 -0
  63. package/src/browser/window-session.ts +114 -0
  64. package/src/node/glsp-server-connection-handler.ts +13 -15
  65. package/style/diagram-loading.css +2 -5
  66. package/lib/browser/action-dispatcher.d.ts +0 -85
  67. package/lib/browser/action-dispatcher.d.ts.map +0 -1
  68. package/lib/browser/action-dispatcher.js +0 -238
  69. package/lib/browser/action-dispatcher.js.map +0 -1
  70. package/lib/browser/diagram-loader.d.ts +0 -123
  71. package/lib/browser/diagram-loader.d.ts.map +0 -1
  72. package/lib/browser/diagram-loader.js +0 -153
  73. package/lib/browser/diagram-loader.js.map +0 -1
  74. package/lib/browser/hidden-bounds-updater.d.ts +0 -122
  75. package/lib/browser/hidden-bounds-updater.d.ts.map +0 -1
  76. package/lib/browser/hidden-bounds-updater.js +0 -207
  77. package/lib/browser/hidden-bounds-updater.js.map +0 -1
  78. package/lib/testing/bind-recorder.d.ts +0 -67
  79. package/lib/testing/bind-recorder.d.ts.map +0 -1
  80. package/lib/testing/bind-recorder.js +0 -72
  81. package/lib/testing/bind-recorder.js.map +0 -1
  82. package/lib/testing/index.d.ts +0 -10
  83. package/lib/testing/index.d.ts.map +0 -1
  84. package/lib/testing/index.js +0 -30
  85. package/lib/testing/index.js.map +0 -1
  86. package/src/browser/action-dispatcher.ts +0 -257
  87. package/src/browser/diagram-loader.ts +0 -173
  88. package/src/browser/hidden-bounds-updater.ts +0 -212
  89. package/src/testing/bind-recorder.ts +0 -126
  90. package/src/testing/index.ts +0 -15
@@ -13,12 +13,19 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
13
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
14
  return c > 3 && r && Object.defineProperty(target, key, r), r;
15
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
+ };
16
19
  Object.defineProperty(exports, "__esModule", { value: true });
17
20
  exports.HydraniumGlspDiagramWidget = exports.DIAGRAM_LOADING_FAILED_CLASS = exports.DIAGRAM_LOADING_CLASS = void 0;
18
21
  const client_1 = require("@eclipse-glsp/client");
22
+ const protocol_1 = require("@hydranium/protocol");
19
23
  const theia_integration_1 = require("@eclipse-glsp/theia-integration");
24
+ const glsp_client_1 = require("@hydranium/glsp-client");
25
+ const core_1 = require("@theia/core");
20
26
  const inversify_1 = require("@theia/core/shared/inversify");
21
- const diagram_loader_1 = require("./diagram-loader");
27
+ const glsp_saveable_1 = require("./glsp-saveable");
28
+ const window_session_1 = require("./window-session");
22
29
  // Shipped by this package rather than left to adopters: an overlay whose
23
30
  // stylesheet was forgotten is an unstyled div in normal flow, which is a silent
24
31
  // failure. Adopters override individual rules from their own stylesheet.
@@ -37,30 +44,50 @@ exports.DIAGRAM_LOADING_FAILED_CLASS = `${exports.DIAGRAM_LOADING_CLASS}-failed`
37
44
  * model to read as a broken editor rather than a slow one.
38
45
  *
39
46
  * **How the pending state is sourced.** From {@link HydraniumDiagramLoader}, not
40
- * from `actionDispatcher.onceModelInitialized()`. The loader settles on failure
41
- * as well as on success, and it does so even when its own error-reporting
42
- * dispatch throws; `onceModelInitialized()` simply never settles on a failed
43
- * load. That distinction is not academic here: this overlay is opaque and covers
44
- * the widget node, while GLSP's `StatusOverlay` — where the loader reports the
45
- * failure — mounts *inside* the diagram's base div. Keyed on model
46
- * initialization, a failed load would leave a spinner turning on top of the
47
- * error message explaining it. Keyed on the loader, exactly one component decides
48
- * whether the canvas is pending and the two mechanisms compose instead of
49
- * competing.
47
+ * from `actionDispatcher.onceModelInitialized()`: the loader settles on failure
48
+ * as well as on success, even when its own error report throws, while
49
+ * `onceModelInitialized()` never settles on a failed load and would leave the
50
+ * spinner turning for good.
50
51
  *
51
- * **The one case where this overlay reports the failure itself.** When
52
- * `DiagramLoadFailure.surfaced` is `false` the loader could not dispatch its
53
- * `StatusAction` — the action dispatcher was what failed — so the status overlay
54
- * shows nothing. Uncovering the canvas would then leave a blank diagram whose only
55
- * explanation is a line in the Output channel. In that case, and only that case,
56
- * the overlay stays up and swaps the spinner for the error text.
52
+ * A failed load keeps the overlay up with the error and a Retry, which asks for
53
+ * a fresh widget through {@link onDidRequestReopen}.
57
54
  *
58
55
  * Bound unconditionally by `AbstractHydraniumGlspTheiaFrontendModule`. To opt out,
59
56
  * override {@link showLoadingOverlay} to a no-op; to change what is rendered,
60
57
  * override {@link createLoadingOverlay} or {@link loadingLabel}.
58
+ *
59
+ * Its saveable is a {@link HydraniumGlspSaveable}, which keeps a pending save
60
+ * dirty, so Theia's exit check still counts it; see {@link createSaveable}.
61
61
  */
62
62
  let HydraniumGlspDiagramWidget = class HydraniumGlspDiagramWidget extends theia_integration_1.GLSPDiagramWidget {
63
+ windowSessions;
63
64
  loadingOverlay;
65
+ reopenRequestEmitter = new core_1.Emitter();
66
+ /** Fires when this diagram asks to be replaced by a fresh widget, as its
67
+ * Retry does; `AbstractHydraniumGlspDiagramManager` reopens it. A load is
68
+ * not repeated in place, since GLSP's model source registers its handlers
69
+ * once per load. */
70
+ onDidRequestReopen = this.reopenRequestEmitter.event;
71
+ /**
72
+ * Replaces the saveable GLSP's `configure` builds inline, with no factory
73
+ * seam. The widget factory calls `configure` before the widget reaches the
74
+ * shell, so Theia only ever tracks this one.
75
+ */
76
+ configure(options, diContainer) {
77
+ super.configure(options, diContainer);
78
+ this.saveable.dispose();
79
+ this.saveable = this.createSaveable();
80
+ this.toDispose.push(this.saveable);
81
+ this.toDispose.push(this.reopenRequestEmitter);
82
+ }
83
+ /** The widget's saveable. Override to change how saves and dirty state behave. */
84
+ createSaveable() {
85
+ return new glsp_saveable_1.HydraniumGlspSaveable(this.actionDispatcher, this.diContainer.get(client_1.EditorContextService));
86
+ }
87
+ /** Adds the window's resume token, so a reload or reconnect takes this diagram's session over. */
88
+ getRequestModelOptions() {
89
+ return { ...super.getRequestModelOptions(), [protocol_1.RESUME_TOKEN_ARG]: this.windowSessions.current().resumeToken };
90
+ }
64
91
  onAfterAttach(msg) {
65
92
  // Before `super`, which is what starts the load on first attach — so the
66
93
  // overlay is already up when the round trip begins.
@@ -71,6 +98,16 @@ let HydraniumGlspDiagramWidget = class HydraniumGlspDiagramWidget extends theia_
71
98
  this.hideLoadingOverlay();
72
99
  super.dispose();
73
100
  }
101
+ /**
102
+ * GLSP's restore with `animate: false`; compare the two on a GLSP upgrade.
103
+ * An animated restore holds back every later command, so a Delete right
104
+ * after a select-all typed as the diagram opens finds nothing selected.
105
+ */
106
+ async setViewportData(viewportData) {
107
+ if (this.actionDispatcher instanceof client_1.GLSPActionDispatcher) {
108
+ this.actionDispatcher.dispatchOnceModelInitialized(client_1.SetViewportAction.create(viewportData.elementId, viewportData.viewportData, { animate: false }));
109
+ }
110
+ }
74
111
  /**
75
112
  * Cover the canvas until the load settles.
76
113
  *
@@ -94,15 +131,9 @@ let HydraniumGlspDiagramWidget = class HydraniumGlspDiagramWidget extends theia_
94
131
  // outcome it cannot report, which is the safe reading.
95
132
  loader.onceLoadSettled().then(outcome => this.onLoadSettled(outcome), () => this.hideLoadingOverlay());
96
133
  }
97
- /**
98
- * Take the overlay down, or keep it as the failure's only reporter.
99
- *
100
- * The overlay is retained ONLY for a failure the loader could not surface;
101
- * anything else uncovers the canvas, so a load that failed *and was reported*
102
- * reveals GLSP's status overlay rather than double-reporting on top of it.
103
- */
134
+ /** Take the overlay down, or keep it as the failure's report. */
104
135
  onLoadSettled(outcome) {
105
- if (outcome.status === 'failed' && !outcome.surfaced) {
136
+ if (outcome.status === 'failed') {
106
137
  this.showLoadFailure(outcome.error);
107
138
  return;
108
139
  }
@@ -129,6 +160,21 @@ let HydraniumGlspDiagramWidget = class HydraniumGlspDiagramWidget extends theia_
129
160
  if (label) {
130
161
  label.textContent = loader.loadFailureLabel(error);
131
162
  }
163
+ overlay.appendChild(this.createRetryButton());
164
+ }
165
+ /** Ask for a fresh widget, after a failed load. */
166
+ retryLoad() {
167
+ if (this.hydraniumDiagramLoader?.loadOutcome?.status === 'failed') {
168
+ this.reopenRequestEmitter.fire();
169
+ }
170
+ }
171
+ /** Build the failure overlay's Retry button, which calls {@link retryLoad}. */
172
+ createRetryButton() {
173
+ const button = document.createElement('button');
174
+ button.className = `theia-button ${exports.DIAGRAM_LOADING_CLASS}-retry`;
175
+ button.textContent = core_1.nls.localize('hydranium/glsp-client-theia/diagram-load-retry', 'Retry');
176
+ button.addEventListener('click', () => this.retryLoad());
177
+ return button;
132
178
  }
133
179
  hideLoadingOverlay() {
134
180
  this.loadingOverlay?.remove();
@@ -162,10 +208,14 @@ let HydraniumGlspDiagramWidget = class HydraniumGlspDiagramWidget extends theia_
162
208
  */
163
209
  get hydraniumDiagramLoader() {
164
210
  const loader = this.diContainer.get(client_1.DiagramLoader);
165
- return loader instanceof diagram_loader_1.HydraniumDiagramLoader ? loader : undefined;
211
+ return loader instanceof glsp_client_1.HydraniumDiagramLoader ? loader : undefined;
166
212
  }
167
213
  };
168
214
  exports.HydraniumGlspDiagramWidget = HydraniumGlspDiagramWidget;
215
+ __decorate([
216
+ (0, inversify_1.inject)(window_session_1.WindowSessionService),
217
+ __metadata("design:type", Object)
218
+ ], HydraniumGlspDiagramWidget.prototype, "windowSessions", void 0);
169
219
  exports.HydraniumGlspDiagramWidget = HydraniumGlspDiagramWidget = __decorate([
170
220
  (0, inversify_1.injectable)()
171
221
  ], HydraniumGlspDiagramWidget);
@@ -1 +1 @@
1
- {"version":3,"file":"diagram-widget.js","sourceRoot":"","sources":["../../src/browser/diagram-widget.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diagram-widget.js","sourceRoot":"","sources":["../../src/browser/diagram-widget.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,8 @@
6
6
  *
7
7
  * SPDX-License-Identifier: MIT
8
8
  ********************************************************************************/
9
- import { type ChannelLoggerOptions } from '@hydranium/client-theia/lib/browser';
10
9
  import { type BindingContext } from '@eclipse-glsp/client';
10
+ import { type ChannelLoggerOptions } from '@hydranium/client-theia/browser';
11
11
  /** Options for `createGlspClientTheiaModule`. The adopter supplies the channel
12
12
  * logger configuration ({@link ChannelLoggerOptions} — a `channelName`, and
13
13
  * optionally a `component` label); the framework owns the dispatcher type and
@@ -18,10 +18,17 @@ export interface GlspClientTheiaModuleOptions {
18
18
  readonly channelLogger: ChannelLoggerOptions;
19
19
  }
20
20
  /**
21
- * Composes the standard framework client bindings: the cross-head Output-channel
22
- * logger, the instrumented action dispatcher, the failure-reporting diagram
23
- * loader, the instrumented hidden-bounds updater, and the message service that
24
- * drops the duplicate model-loading notification.
21
+ * Composes the standard framework client bindings for a Theia frontend: the
22
+ * cross-head Output-channel logger, the host-neutral classes
23
+ * `createGlspClientModule` binds, fed from that channel, the loader that renders
24
+ * its failure through Theia's catalogue, and the message service that drops
25
+ * the duplicate model-loading notification.
26
+ *
27
+ * The neutral tokens are bound BEFORE the neutral binder runs, so it binds no
28
+ * console defaults. The logger binding tags each line with the requesting
29
+ * class, as `bindChannelLogger`'s own does; a plain `toService` alias would
30
+ * start a fresh request and lose the tag. The clock is resolved lazily, so a
31
+ * clock an adopter module binds after this one is still the one used.
25
32
  *
26
33
  * Takes the whole {@link BindingContext} rather than `(bind, rebind)`: the
27
34
  * message-service rebind has to know whether GLSP's `theiaNotificationModule`
@@ -1 +1 @@
1
- {"version":3,"file":"glsp-client-theia-module.d.ts","sourceRoot":"","sources":["../../src/browser/glsp-client-theia-module.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAqB,KAAK,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AACnG,OAAO,EAAE,KAAK,cAAc,EAAgE,MAAM,sBAAsB,CAAC;AAMzH;;;;;qEAKqE;AACrE,MAAM,WAAW,4BAA4B;IAC1C,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;CAC/C;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,4BAA4B,GAAG,IAAI,CAQhH"}
1
+ {"version":3,"file":"glsp-client-theia-module.d.ts","sourceRoot":"","sources":["../../src/browser/glsp-client-theia-module.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,KAAK,cAAc,EAAiB,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAGJ,KAAK,oBAAoB,EAG3B,MAAM,iCAAiC,CAAC;AAOzC;;;;;qEAKqE;AACrE,MAAM,WAAW,4BAA4B;IAC1C,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;CAC/C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,4BAA4B,GAAG,IAAI,CAehH"}
@@ -9,17 +9,25 @@
9
9
  ********************************************************************************/
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
11
  exports.createGlspClientTheiaModule = createGlspClientTheiaModule;
12
- const browser_1 = require("@hydranium/client-theia/lib/browser");
13
12
  const client_1 = require("@eclipse-glsp/client");
14
- const action_dispatcher_1 = require("./action-dispatcher");
15
- const diagram_loader_1 = require("./diagram-loader");
13
+ const browser_1 = require("@hydranium/client-theia/browser");
14
+ const common_1 = require("@hydranium/client-theia/common");
15
+ const glsp_client_1 = require("@hydranium/glsp-client");
16
+ const protocol_1 = require("@hydranium/protocol");
16
17
  const glsp_message_service_1 = require("./glsp-message-service");
17
- const hidden_bounds_updater_1 = require("./hidden-bounds-updater");
18
+ const theia_diagram_loader_1 = require("./theia-diagram-loader");
18
19
  /**
19
- * Composes the standard framework client bindings: the cross-head Output-channel
20
- * logger, the instrumented action dispatcher, the failure-reporting diagram
21
- * loader, the instrumented hidden-bounds updater, and the message service that
22
- * drops the duplicate model-loading notification.
20
+ * Composes the standard framework client bindings for a Theia frontend: the
21
+ * cross-head Output-channel logger, the host-neutral classes
22
+ * `createGlspClientModule` binds, fed from that channel, the loader that renders
23
+ * its failure through Theia's catalogue, and the message service that drops
24
+ * the duplicate model-loading notification.
25
+ *
26
+ * The neutral tokens are bound BEFORE the neutral binder runs, so it binds no
27
+ * console defaults. The logger binding tags each line with the requesting
28
+ * class, as `bindChannelLogger`'s own does; a plain `toService` alias would
29
+ * start a fresh request and lose the tag. The clock is resolved lazily, so a
30
+ * clock an adopter module binds after this one is still the one used.
23
31
  *
24
32
  * Takes the whole {@link BindingContext} rather than `(bind, rebind)`: the
25
33
  * message-service rebind has to know whether GLSP's `theiaNotificationModule`
@@ -37,10 +45,17 @@ const hidden_bounds_updater_1 = require("./hidden-bounds-updater");
37
45
  function createGlspClientTheiaModule(context, options) {
38
46
  const { bind, isBound, rebind } = context;
39
47
  (0, browser_1.bindChannelLogger)(bind, options.channelLogger);
40
- bind(action_dispatcher_1.HydraniumGlspActionDispatcher).toSelf().inSingletonScope();
41
- rebind(client_1.GLSPActionDispatcher).toService(action_dispatcher_1.HydraniumGlspActionDispatcher);
42
- rebind(client_1.DiagramLoader).to(diagram_loader_1.HydraniumDiagramLoader).inSingletonScope();
43
- rebind(client_1.GLSPHiddenBoundsUpdater).to(hidden_bounds_updater_1.HydraniumHiddenBoundsUpdater).inSingletonScope();
48
+ bind(glsp_client_1.HydraniumClientTypes.Logger).toDynamicValue(ctx => {
49
+ const base = ctx.container.get(browser_1.ChannelLogger);
50
+ const parentName = (0, browser_1.getRequestParentName)(ctx);
51
+ return parentName ? base.for(parentName) : base;
52
+ });
53
+ bind(glsp_client_1.HydraniumClientTypes.Tracer).toService(browser_1.ChannelTracer);
54
+ bind(glsp_client_1.HydraniumClientTypes.Clock)
55
+ .toDynamicValue(ctx => (ctx.container.isBound(common_1.Clock) ? ctx.container.get(common_1.Clock) : new protocol_1.SystemClock()))
56
+ .inSingletonScope();
57
+ (0, glsp_client_1.createGlspClientModule)(context);
58
+ rebind(client_1.DiagramLoader).to(theia_diagram_loader_1.HydraniumGlspTheiaDiagramLoader).inSingletonScope();
44
59
  (0, glsp_message_service_1.bindHydraniumGlspMessageService)(bind, isBound, rebind);
45
60
  }
46
61
  //# sourceMappingURL=glsp-client-theia-module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"glsp-client-theia-module.js","sourceRoot":"","sources":["../../src/browser/glsp-client-theia-module.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;AAsClF,kEAQC;AA5CD,iEAAmG;AACnG,iDAAyH;AACzH,2DAAoE;AACpE,qDAA0D;AAC1D,iEAAyE;AACzE,mEAAuE;AAYvE;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,2BAA2B,CAAC,OAAuB,EAAE,OAAqC;IACvG,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC1C,IAAA,2BAAiB,EAAC,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAC/C,IAAI,CAAC,iDAA6B,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAChE,MAAM,CAAC,6BAAoB,CAAC,CAAC,SAAS,CAAC,iDAA6B,CAAC,CAAC;IACtE,MAAM,CAAC,sBAAa,CAAC,CAAC,EAAE,CAAC,uCAAsB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACpE,MAAM,CAAC,gCAAuB,CAAC,CAAC,EAAE,CAAC,oDAA4B,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACpF,IAAA,sDAA+B,EAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1D,CAAC"}
1
+ {"version":3,"file":"glsp-client-theia-module.js","sourceRoot":"","sources":["../../src/browser/glsp-client-theia-module.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;;AAElF,iDAA0E;AAC1E,6DAMyC;AACzC,2DAAuD;AACvD,wDAAsF;AACtF,kDAAkD;AAClD,iEAAyE;AACzE,iEAAyE;AAYzE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qCAA4C,OAAuB,EAAE,OAAqC;IACvG,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC1C,IAAA,2BAAiB,EAAC,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAC/C,IAAI,CAAC,kCAAoB,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;QACpD,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,uBAAa,CAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,IAAA,8BAAoB,EAAC,GAAG,CAAC,CAAC;QAC7C,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACnD,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,kCAAoB,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,uBAAa,CAAC,CAAC;IAC3D,IAAI,CAAC,kCAAoB,CAAC,KAAK,CAAC;SAC5B,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,cAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAQ,cAAK,CAAC,CAAC,CAAC,CAAC,IAAI,sBAAW,EAAE,CAAC,CAAC;SAC3G,gBAAgB,EAAE,CAAC;IACvB,IAAA,oCAAsB,EAAC,OAAO,CAAC,CAAC;IAChC,MAAM,CAAC,sBAAa,CAAC,CAAC,EAAE,CAAC,sDAA+B,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC7E,IAAA,sDAA+B,EAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1D,CAAC"}
@@ -6,8 +6,13 @@
6
6
  *
7
7
  * SPDX-License-Identifier: MIT
8
8
  ********************************************************************************/
9
+ import { type IDiagramOptions } from '@eclipse-glsp/client';
9
10
  import { GLSPDiagramManager } from '@eclipse-glsp/theia-integration';
10
11
  import { type GLSPDiagramLanguage } from '@eclipse-glsp/theia-integration/lib/common';
12
+ import { type GLSPDiagramWidget, type GLSPDiagramWidgetOptions } from '@eclipse-glsp/theia-integration/lib/browser';
13
+ import { type WidgetOpenerOptions } from '@theia/core/lib/browser';
14
+ import { type Disposable } from '@theia/core';
15
+ import { WindowSessionService } from './window-session';
11
16
  /**
12
17
  * `GLSPDiagramManager` subclass that derives the language-correlated getters
13
18
  * (`fileExtensions`, `diagramType`, `contributionId`, `iconClass`) from a
@@ -37,10 +42,66 @@ export declare abstract class AbstractHydraniumGlspDiagramManager extends GLSPDi
37
42
  protected abstract readonly managerLabel: string;
38
43
  /** Optional icon-class override; takes precedence over the language's `iconClass`. */
39
44
  protected readonly customIconClass?: string;
45
+ protected readonly windowSessions: WindowSessionService;
46
+ protected clientListeners?: Disposable;
47
+ /** The reopens asked for so far, which run one at a time. */
48
+ protected reopening: Promise<void>;
40
49
  get fileExtensions(): string[];
41
50
  get diagramType(): string;
42
51
  get contributionId(): string;
43
52
  get iconClass(): string;
44
53
  get label(): string;
54
+ createWidget(options?: unknown): Promise<GLSPDiagramWidget>;
55
+ /**
56
+ * The same client id for the same diagram in this window, across a reload
57
+ * and a reopen after a lost client, so its load takes over the session the
58
+ * old connection left and keeps its unsaved text. A diagram closed by the
59
+ * user ends its session, and opening it again starts afresh.
60
+ *
61
+ * The widget options enter as a hash: GLSP makes the id an element id and
62
+ * finds it with an `#id` selector, which a URI's `:` and `/` break. The
63
+ * options identify the widget, so two widgets of one document, in two edit
64
+ * modes or set apart by an option an adopter adds, do not take each other's
65
+ * session over.
66
+ */
67
+ protected createDiagramOptions(options: GLSPDiagramWidgetOptions): IDiagramOptions;
68
+ /**
69
+ * Reopen every diagram once its client is lost, since none of them has a
70
+ * server behind it any more, and a failed one once a client starts.
71
+ */
72
+ protected listenToClient(): void;
73
+ protected reopenAll(which: (widget: GLSPDiagramWidget) => boolean): void;
74
+ protected loadFailed(widget: GLSPDiagramWidget): boolean;
75
+ /**
76
+ * Replace `widget` with a fresh one for the same diagram, in the same tab
77
+ * position and with its viewport: a new container and load under the same
78
+ * client id, which takes over the session the old connection left.
79
+ * Reopens run one at a time, since each places its replacement next to a
80
+ * neighbour that a reopen running alongside could take out of the layout.
81
+ */
82
+ reopen(widget: GLSPDiagramWidget): Promise<void>;
83
+ /** Taken down as a close does, but without its save prompt, since a dirty
84
+ * diagram whose server is gone has nothing to save to. */
85
+ protected replaceWidget(widget: GLSPDiagramWidget): Promise<void>;
86
+ /**
87
+ * Drops a `selection` key that is present but `undefined` before the base
88
+ * class reads it.
89
+ *
90
+ * Without this, opening a diagram from Theia's file picker throws and the
91
+ * editor never leaves "Loading diagram…". Upstream's
92
+ * `OptionsWithSelection.is` tests `'selection' in options`, which is true for
93
+ * a key explicitly set to `undefined`, and the branch it guards then calls
94
+ * `Object.keys` on that value. Theia's own `QuickFileOpenService` always sets
95
+ * the key — its `buildOpenerOptions` returns `{ selection: range }`, and
96
+ * `range` is `undefined` unless the query carried a `:line:column` suffix —
97
+ * so the crash is reached by the ordinary act of opening a diagram by name.
98
+ *
99
+ * Normalising the OPTIONS rather than rebinding
100
+ * `TheiaOpenerOptionsNavigationService`: the service is shared by every
101
+ * diagram type in the container, so replacing it would make one adopter's
102
+ * fix silently global, and the guard belongs where the value enters rather
103
+ * than where it is consumed. The base method stays the single implementation.
104
+ */
105
+ protected handleNavigations(widget: GLSPDiagramWidget, options?: WidgetOpenerOptions): boolean;
45
106
  }
46
107
  //# sourceMappingURL=glsp-diagram-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"glsp-diagram-manager.d.ts","sourceRoot":"","sources":["../../src/browser/glsp-diagram-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAGlF,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAGtF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,8BACsB,mCAAoC,SAAQ,kBAAkB;IACjF,8EAA8E;IAC9E,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,EAAE,mBAAmB,CAAC;IAEjE,wEAAwE;IACxE,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAEjD,sFAAsF;IACtF,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAE5C,IAAa,cAAc,IAAI,MAAM,EAAE,CAEtC;IAED,IAAa,WAAW,IAAI,MAAM,CAEjC;IAED,IAAa,cAAc,IAAI,MAAM,CAEpC;IAED,IAAa,SAAS,IAAI,MAAM,CAE/B;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;CACH"}
1
+ {"version":3,"file":"glsp-diagram-manager.d.ts","sourceRoot":"","sources":["../../src/browser/glsp-diagram-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAmC,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACtF,OAAO,EACJ,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAE/B,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,KAAK,UAAU,EAAwB,MAAM,aAAa,CAAC;AAMpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,8BACsB,mCAAoC,SAAQ,kBAAkB;IACjF,8EAA8E;IAC9E,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,EAAE,mBAAmB,CAAC;IAEjE,wEAAwE;IACxE,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAEjD,sFAAsF;IACtF,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAEd,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAG,oBAAoB,CAAC;IAEvF,SAAS,CAAC,eAAe,CAAC,EAAE,UAAU,CAAC;IACvC,6DAA6D;IAC7D,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAqB;IAEvD,IAAa,cAAc,IAAI,MAAM,EAAE,CAEtC;IAED,IAAa,WAAW,IAAI,MAAM,CAEjC;IAED,IAAa,cAAc,IAAI,MAAM,CAEpC;IAED,IAAa,SAAS,IAAI,MAAM,CAE/B;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAEc,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAOzE;IAED;;;;;;;;;;;OAWG;IACH,UAAmB,oBAAoB,CAAC,OAAO,EAAE,wBAAwB,GAAG,eAAe,CAG1F;IAED;;;OAGG;IACH,SAAS,CAAC,cAAc,IAAI,IAAI,CAY/B;IAED,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,OAAO,GAAG,IAAI,CAIvE;IAED,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAGvD;IAED;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAO/C;IAED;+DAC2D;IAC3D,UAAgB,aAAa,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBtE;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,UAAmB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAMtG;CACH"}
@@ -13,11 +13,20 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
13
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
14
  return c > 3 && r && Object.defineProperty(target, key, r), r;
15
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
+ };
16
19
  Object.defineProperty(exports, "__esModule", { value: true });
17
20
  exports.AbstractHydraniumGlspDiagramManager = void 0;
18
21
  const client_1 = require("@eclipse-glsp/client");
19
22
  const theia_integration_1 = require("@eclipse-glsp/theia-integration");
23
+ const core_1 = require("@theia/core");
20
24
  const inversify_1 = require("@theia/core/shared/inversify");
25
+ const protocol_1 = require("@hydranium/protocol");
26
+ const glsp_client_1 = require("@hydranium/glsp-client");
27
+ const client_contribution_1 = require("./client-contribution");
28
+ const diagram_widget_1 = require("./diagram-widget");
29
+ const window_session_1 = require("./window-session");
21
30
  /**
22
31
  * `GLSPDiagramManager` subclass that derives the language-correlated getters
23
32
  * (`fileExtensions`, `diagramType`, `contributionId`, `iconClass`) from a
@@ -43,6 +52,10 @@ const inversify_1 = require("@theia/core/shared/inversify");
43
52
  let AbstractHydraniumGlspDiagramManager = class AbstractHydraniumGlspDiagramManager extends theia_integration_1.GLSPDiagramManager {
44
53
  /** Optional icon-class override; takes precedence over the language's `iconClass`. */
45
54
  customIconClass;
55
+ windowSessions;
56
+ clientListeners;
57
+ /** The reopens asked for so far, which run one at a time. */
58
+ reopening = Promise.resolve();
46
59
  get fileExtensions() {
47
60
  return [...this.diagramLanguage.fileExtensions];
48
61
  }
@@ -58,8 +71,124 @@ let AbstractHydraniumGlspDiagramManager = class AbstractHydraniumGlspDiagramMana
58
71
  get label() {
59
72
  return this.managerLabel;
60
73
  }
74
+ async createWidget(options) {
75
+ this.listenToClient();
76
+ const widget = await super.createWidget(options);
77
+ if (widget instanceof diagram_widget_1.HydraniumGlspDiagramWidget) {
78
+ widget.onDidRequestReopen(() => void this.reopen(widget));
79
+ }
80
+ return widget;
81
+ }
82
+ /**
83
+ * The same client id for the same diagram in this window, across a reload
84
+ * and a reopen after a lost client, so its load takes over the session the
85
+ * old connection left and keeps its unsaved text. A diagram closed by the
86
+ * user ends its session, and opening it again starts afresh.
87
+ *
88
+ * The widget options enter as a hash: GLSP makes the id an element id and
89
+ * finds it with an `#id` selector, which a URI's `:` and `/` break. The
90
+ * options identify the widget, so two widgets of one document, in two edit
91
+ * modes or set apart by an option an adopter adds, do not take each other's
92
+ * session over.
93
+ */
94
+ createDiagramOptions(options) {
95
+ const clientId = `${this.diagramType}_${this.windowSessions.current().id}_${(0, protocol_1.textHash)(JSON.stringify(options))}`;
96
+ return { ...super.createDiagramOptions(options), clientId };
97
+ }
98
+ /**
99
+ * Reopen every diagram once its client is lost, since none of them has a
100
+ * server behind it any more, and a failed one once a client starts.
101
+ */
102
+ listenToClient() {
103
+ if (this.clientListeners) {
104
+ return;
105
+ }
106
+ const contribution = this.diagramServiceProvider.getGLSPClientContribution(this.contributionId);
107
+ this.clientListeners =
108
+ contribution instanceof client_contribution_1.HydraniumGlspClientContribution
109
+ ? new core_1.DisposableCollection(contribution.onDidLoseClient(() => this.reopenAll(() => true)), contribution.onDidStartClient(() => this.reopenAll(widget => this.loadFailed(widget))))
110
+ : new core_1.DisposableCollection();
111
+ }
112
+ reopenAll(which) {
113
+ for (const widget of this.all.filter(which)) {
114
+ void this.reopen(widget);
115
+ }
116
+ }
117
+ loadFailed(widget) {
118
+ const loader = widget.diContainer.get(client_1.DiagramLoader);
119
+ return loader instanceof glsp_client_1.HydraniumDiagramLoader && loader.loadOutcome?.status === 'failed';
120
+ }
121
+ /**
122
+ * Replace `widget` with a fresh one for the same diagram, in the same tab
123
+ * position and with its viewport: a new container and load under the same
124
+ * client id, which takes over the session the old connection left.
125
+ * Reopens run one at a time, since each places its replacement next to a
126
+ * neighbour that a reopen running alongside could take out of the layout.
127
+ */
128
+ reopen(widget) {
129
+ const reopened = this.reopening.then(() => this.replaceWidget(widget));
130
+ // Derived, so a dropped failure is reported, and before the queue's
131
+ // catch, so the caller resumes before the next reopen starts.
132
+ const handed = reopened.then(() => undefined);
133
+ this.reopening = reopened.catch(() => undefined);
134
+ return handed;
135
+ }
136
+ /** Taken down as a close does, but without its save prompt, since a dirty
137
+ * diagram whose server is gone has nothing to save to. */
138
+ async replaceWidget(widget) {
139
+ if (widget.isDisposed) {
140
+ return;
141
+ }
142
+ const tabBar = this.shell.getTabBarFor(widget);
143
+ const titles = tabBar?.titles ?? [];
144
+ const index = titles.indexOf(widget.title);
145
+ // ponytail: a diagram alone in its tab bar reopens where a new one opens,
146
+ // since its split closes with it; restore the dock layout if that matters.
147
+ const neighbour = index > 0 ? titles[index - 1].owner : titles[index + 1]?.owner;
148
+ const mode = this.shell.activeWidget === widget ? 'activate' : tabBar?.currentTitle === widget.title ? 'reveal' : 'open';
149
+ // Detached before the dispose, as a close does: the widget stores its
150
+ // viewport on detach, and its dispose empties the container it reads.
151
+ widget.parent = null;
152
+ widget.dispose();
153
+ const options = {
154
+ mode,
155
+ editMode: widget.options.editMode,
156
+ widgetOptions: neighbour ? { ref: neighbour, mode: index > 0 ? 'tab-after' : 'tab-before' } : undefined
157
+ };
158
+ await this.open(widget.uri, options);
159
+ }
160
+ /**
161
+ * Drops a `selection` key that is present but `undefined` before the base
162
+ * class reads it.
163
+ *
164
+ * Without this, opening a diagram from Theia's file picker throws and the
165
+ * editor never leaves "Loading diagram…". Upstream's
166
+ * `OptionsWithSelection.is` tests `'selection' in options`, which is true for
167
+ * a key explicitly set to `undefined`, and the branch it guards then calls
168
+ * `Object.keys` on that value. Theia's own `QuickFileOpenService` always sets
169
+ * the key — its `buildOpenerOptions` returns `{ selection: range }`, and
170
+ * `range` is `undefined` unless the query carried a `:line:column` suffix —
171
+ * so the crash is reached by the ordinary act of opening a diagram by name.
172
+ *
173
+ * Normalising the OPTIONS rather than rebinding
174
+ * `TheiaOpenerOptionsNavigationService`: the service is shared by every
175
+ * diagram type in the container, so replacing it would make one adopter's
176
+ * fix silently global, and the guard belongs where the value enters rather
177
+ * than where it is consumed. The base method stays the single implementation.
178
+ */
179
+ handleNavigations(widget, options) {
180
+ if (options && 'selection' in options && options.selection === undefined) {
181
+ const { selection: _dropped, ...rest } = options;
182
+ return super.handleNavigations(widget, rest);
183
+ }
184
+ return super.handleNavigations(widget, options);
185
+ }
61
186
  };
62
187
  exports.AbstractHydraniumGlspDiagramManager = AbstractHydraniumGlspDiagramManager;
188
+ __decorate([
189
+ (0, inversify_1.inject)(window_session_1.WindowSessionService),
190
+ __metadata("design:type", Object)
191
+ ], AbstractHydraniumGlspDiagramManager.prototype, "windowSessions", void 0);
63
192
  exports.AbstractHydraniumGlspDiagramManager = AbstractHydraniumGlspDiagramManager = __decorate([
64
193
  (0, inversify_1.injectable)()
65
194
  ], AbstractHydraniumGlspDiagramManager);
@@ -1 +1 @@
1
- {"version":3,"file":"glsp-diagram-manager.js","sourceRoot":"","sources":["../../src/browser/glsp-diagram-manager.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;;;;;;;;AAElF,iDAAwD;AACxD,uEAAqE;AAErE,4DAA0D;AAE1D;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEI,IAAe,mCAAmC,GAAlD,MAAe,mCAAoC,SAAQ,sCAAkB;IAOjF,sFAAsF;IACnE,eAAe,CAAU;IAE5C,IAAa,cAAc;QACxB,OAAO,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;IACnD,CAAC;IAED,IAAa,WAAW;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;IAC3C,CAAC;IAED,IAAa,cAAc;QACxB,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC;IAC9C,CAAC;IAED,IAAa,SAAS;QACnB,OAAO,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,IAAI,IAAA,yBAAgB,EAAC,oBAAoB,CAAC,CAAC;IAC3G,CAAC;IAED,IAAI,KAAK;QACN,OAAO,IAAI,CAAC,YAAY,CAAC;IAC5B,CAAC;CACH,CAAA;AA7BqB,kFAAmC;8CAAnC,mCAAmC;IADxD,IAAA,sBAAU,GAAE;GACS,mCAAmC,CA6BxD"}
1
+ {"version":3,"file":"glsp-diagram-manager.js","sourceRoot":"","sources":["../../src/browser/glsp-diagram-manager.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,14 @@ import { type interfaces } from '@theia/core/shared/inversify';
22
22
  * Matching an English literal fails silently — no error, no log line, just the
23
23
  * duplicate progress popup back — so this needs keeping in step with
24
24
  * `RequestModelActionHandler` on every GLSP bump.
25
+ *
26
+ * **Exported to be imported, and it must NOT be externalized.** An adopter
27
+ * subclassing the message service needs the same literal to match on, and a
28
+ * second copy of it is a second thing to keep in step across that bump. It is
29
+ * also the one user-visible string in the framework that is deliberately excluded
30
+ * from the message catalogue: it exists to equal an upstream English literal that
31
+ * lives in no catalogue, so giving it a code and a translation would break the
32
+ * match it exists for.
25
33
  */
26
34
  export declare const MODEL_LOADING_PROGRESS_TITLE = "Model loading in progress";
27
35
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"glsp-message-service.d.ts","sourceRoot":"","sources":["../../src/browser/glsp-message-service.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,mBAAmB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACnH,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,KAAK,UAAU,EAAc,MAAM,8BAA8B,CAAC;AAE3E;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,4BAA4B,8BAA8B,CAAC;AAExE;;;;;;;;;;;;GAYG;AACH,qBACa,2BAA4B,SAAQ,uBAAuB;IACrE;;mBAEe;IACf,SAAS,CAAC,qBAAqB,cAAqB;cAEjC,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI;cAQhD,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI;cAOlD,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;CAQjE;AAED;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,GAAG,IAAI,CAMnI"}
1
+ {"version":3,"file":"glsp-message-service.d.ts","sourceRoot":"","sources":["../../src/browser/glsp-message-service.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,mBAAmB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACnH,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,KAAK,UAAU,EAAc,MAAM,8BAA8B,CAAC;AAE3E;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,4BAA4B,8BAA8B,CAAC;AAExE;;;;;;;;;;;;GAYG;AACH,qBACa,2BAA4B,SAAQ,uBAAuB;IACrE;;mBAEe;IACf,SAAS,CAAC,qBAAqB,cAAqB;IAEpD,UAAmB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAMlE;IAED,UAAmB,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAKpE;IAED,UAAmB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAO9D;CACH;AAED;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,GAAG,IAAI,CAMnI"}
@@ -31,6 +31,14 @@ const inversify_1 = require("@theia/core/shared/inversify");
31
31
  * Matching an English literal fails silently — no error, no log line, just the
32
32
  * duplicate progress popup back — so this needs keeping in step with
33
33
  * `RequestModelActionHandler` on every GLSP bump.
34
+ *
35
+ * **Exported to be imported, and it must NOT be externalized.** An adopter
36
+ * subclassing the message service needs the same literal to match on, and a
37
+ * second copy of it is a second thing to keep in step across that bump. It is
38
+ * also the one user-visible string in the framework that is deliberately excluded
39
+ * from the message catalogue: it exists to equal an upstream English literal that
40
+ * lives in no catalogue, so giving it a code and a translation would break the
41
+ * match it exists for.
34
42
  */
35
43
  exports.MODEL_LOADING_PROGRESS_TITLE = 'Model loading in progress';
36
44
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"glsp-message-service.js","sourceRoot":"","sources":["../../src/browser/glsp-message-service.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;;;;;;;;AA4ElF,0EAMC;AA/ED,uEAA0E;AAC1E,4DAA2E;AAE3E;;;;;;;;;;;;;GAaG;AACU,QAAA,4BAA4B,GAAG,2BAA2B,CAAC;AAExE;;;;;;;;;;;;GAYG;AAEI,IAAM,2BAA2B,GAAjC,MAAM,2BAA4B,SAAQ,2CAAuB;IACrE;;mBAEe;IACL,qBAAqB,GAAG,IAAI,GAAG,EAAU,CAAC;IAEjC,aAAa,CAAC,MAA2B;QACzD,IAAI,MAAM,CAAC,KAAK,KAAK,oCAA4B,EAAE,CAAC;YACjD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAClD,OAAO;QACV,CAAC;QACD,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAEkB,cAAc,CAAC,MAA4B;QAC3D,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YACrD,OAAO;QACV,CAAC;QACD,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAEkB,WAAW,CAAC,MAAyB;QACrD,4EAA4E;QAC5E,mDAAmD;QACnD,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YACxD,OAAO;QACV,CAAC;QACD,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;CACH,CAAA;AA7BY,kEAA2B;sCAA3B,2BAA2B;IADvC,IAAA,sBAAU,GAAE;GACA,2BAA2B,CA6BvC;AAED;;;;;;;;GAQG;AACH,SAAgB,+BAA+B,CAAC,IAAqB,EAAE,OAA2B,EAAE,MAAyB;IAC1H,IAAI,OAAO,CAAC,2CAAuB,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,2CAAuB,CAAC,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACtF,CAAC;SAAM,CAAC;QACL,IAAI,CAAC,2CAAuB,CAAC,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACpF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"glsp-message-service.js","sourceRoot":"","sources":["../../src/browser/glsp-message-service.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;;;;;;;;;AAGlF,uEAA0E;AAC1E,4DAA2E;AAE3E;;;;;;;;;;;;;;;;;;;;;GAqBG;AACU,QAAA,4BAA4B,GAAG,2BAA2B,CAAC;AAExE;;;;;;;;;;;;GAYG;AAEI,IAAM,2BAA2B,GAAjC,MAAM,2BAA4B,SAAQ,2CAAuB;IACrE;;mBAEe;IACL,qBAAqB,GAAG,IAAI,GAAG,EAAU,CAAC;IAEjC,aAAa,CAAC,MAA2B;QACzD,IAAI,MAAM,CAAC,KAAK,KAAK,QAAA,4BAA4B,EAAE,CAAC;YACjD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAClD,OAAO;QACV,CAAC;QACD,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAEkB,cAAc,CAAC,MAA4B;QAC3D,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YACrD,OAAO;QACV,CAAC;QACD,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAEkB,WAAW,CAAC,MAAyB;QACrD,4EAA4E;QAC5E,mDAAmD;QACnD,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YACxD,OAAO;QACV,CAAC;QACD,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;CACH,CAAA;;sCA7BY,2BAA2B;IADvC,IAAA,sBAAU,GAAE;GACA,2BAA2B,CA6BvC;AAED;;;;;;;;GAQG;AACH,yCAAgD,IAAqB,EAAE,OAA2B,EAAE,MAAyB;IAC1H,IAAI,OAAO,CAAC,2CAAuB,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,2CAAuB,CAAC,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACtF,CAAC;SAAM,CAAC;QACL,IAAI,CAAC,2CAAuB,CAAC,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACpF,CAAC;AACJ,CAAC"}