@hydranium/glsp-client 0.0.0-stage → 1.0.0-next

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 (73) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +97 -2
  3. package/lib/action-dispatcher.d.ts +89 -0
  4. package/lib/action-dispatcher.d.ts.map +1 -0
  5. package/lib/action-dispatcher.js +257 -0
  6. package/lib/action-dispatcher.js.map +1 -0
  7. package/lib/diagram-load-failed.d.ts +20 -0
  8. package/lib/diagram-load-failed.d.ts.map +1 -0
  9. package/lib/diagram-load-failed.js +24 -0
  10. package/lib/diagram-load-failed.js.map +1 -0
  11. package/lib/diagram-loader.d.ts +124 -0
  12. package/lib/diagram-loader.d.ts.map +1 -0
  13. package/lib/diagram-loader.js +154 -0
  14. package/lib/diagram-loader.js.map +1 -0
  15. package/lib/edge.d.ts +40 -0
  16. package/lib/edge.d.ts.map +1 -0
  17. package/lib/edge.js +56 -0
  18. package/lib/edge.js.map +1 -0
  19. package/lib/glsp-client-module.d.ts +36 -0
  20. package/lib/glsp-client-module.d.ts.map +1 -0
  21. package/lib/glsp-client-module.js +63 -0
  22. package/lib/glsp-client-module.js.map +1 -0
  23. package/lib/glsp-client.d.ts +17 -0
  24. package/lib/glsp-client.d.ts.map +1 -0
  25. package/lib/glsp-client.js +23 -0
  26. package/lib/glsp-client.js.map +1 -0
  27. package/lib/hidden-bounds-updater.d.ts +119 -0
  28. package/lib/hidden-bounds-updater.d.ts.map +1 -0
  29. package/lib/hidden-bounds-updater.js +210 -0
  30. package/lib/hidden-bounds-updater.js.map +1 -0
  31. package/lib/index.d.ts +19 -0
  32. package/lib/index.d.ts.map +1 -0
  33. package/lib/index.js +40 -0
  34. package/lib/index.js.map +1 -0
  35. package/lib/messages/index.d.ts +10 -0
  36. package/lib/messages/index.d.ts.map +1 -0
  37. package/lib/messages/index.js +20 -0
  38. package/lib/messages/index.js.map +1 -0
  39. package/lib/sprotty-logger-adapter.d.ts +61 -0
  40. package/lib/sprotty-logger-adapter.d.ts.map +1 -0
  41. package/lib/sprotty-logger-adapter.js +130 -0
  42. package/lib/sprotty-logger-adapter.js.map +1 -0
  43. package/lib/status-overlay.d.ts +23 -0
  44. package/lib/status-overlay.d.ts.map +1 -0
  45. package/lib/status-overlay.js +52 -0
  46. package/lib/status-overlay.js.map +1 -0
  47. package/lib/testing/bind-recorder.d.ts +67 -0
  48. package/lib/testing/bind-recorder.d.ts.map +1 -0
  49. package/lib/testing/bind-recorder.js +72 -0
  50. package/lib/testing/bind-recorder.js.map +1 -0
  51. package/lib/testing/index.d.ts +10 -0
  52. package/lib/testing/index.d.ts.map +1 -0
  53. package/lib/testing/index.js +28 -0
  54. package/lib/testing/index.js.map +1 -0
  55. package/lib/types.d.ts +27 -0
  56. package/lib/types.d.ts.map +1 -0
  57. package/lib/types.js +33 -0
  58. package/lib/types.js.map +1 -0
  59. package/package.json +79 -4
  60. package/src/action-dispatcher.ts +273 -0
  61. package/src/diagram-load-failed.ts +22 -0
  62. package/src/diagram-loader.ts +173 -0
  63. package/src/edge.ts +65 -0
  64. package/src/glsp-client-module.ts +75 -0
  65. package/src/glsp-client.ts +20 -0
  66. package/src/hidden-bounds-updater.ts +210 -0
  67. package/src/index.ts +24 -0
  68. package/src/messages/index.ts +17 -0
  69. package/src/sprotty-logger-adapter.ts +121 -0
  70. package/src/status-overlay.ts +43 -0
  71. package/src/testing/bind-recorder.ts +126 -0
  72. package/src/testing/index.ts +13 -0
  73. package/src/types.ts +34 -0
@@ -0,0 +1,124 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 CrossBreeze, EclipseSource and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the MIT License which is available in the project root.
6
+ *
7
+ * SPDX-License-Identifier: MIT
8
+ ********************************************************************************/
9
+ import { DiagramLoader, type DiagramLoadingOptions } from '@eclipse-glsp/client';
10
+ import { Deferred, type Logger } from '@hydranium/protocol';
11
+ /**
12
+ * How a diagram load ended. A discriminated union rather than a boolean or a
13
+ * string: a consumer showing a pending indicator has to distinguish "not settled
14
+ * yet" (`undefined`) from either terminal state, and the failed arm has to carry
15
+ * enough for that consumer to decide whether *it* is now the only thing that can
16
+ * report the failure — see {@link DiagramLoadFailure.surfaced}.
17
+ */
18
+ export type DiagramLoadOutcome = DiagramLoadSuccess | DiagramLoadFailure;
19
+ export interface DiagramLoadSuccess {
20
+ readonly status: 'loaded';
21
+ }
22
+ export interface DiagramLoadFailure {
23
+ readonly status: 'failed';
24
+ /** The thrown value, verbatim. `unknown` because a rejection can be anything. */
25
+ readonly error: unknown;
26
+ /**
27
+ * Whether the `severity: 'ERROR'` {@link StatusAction} reached the action
28
+ * dispatcher. It says nothing about whether a status overlay shows it.
29
+ *
30
+ * `false` means the report itself failed, which happens when the action
31
+ * dispatcher is the thing that could not initialize. A consumer that covers
32
+ * the canvas must then render the failure itself: it is the only surface
33
+ * left, and removing its overlay would leave a blank diagram whose only
34
+ * explanation is a line in the log — the exact failure mode this loader
35
+ * exists to prevent.
36
+ */
37
+ readonly surfaced: boolean;
38
+ }
39
+ /**
40
+ * Diagram loader that never lets a load failure vanish.
41
+ *
42
+ * `DiagramLoader.load()` orchestrates the full diagram-init path — action
43
+ * dispatcher init, GLSP-client connect + server `initialize`, the first
44
+ * `RequestModelAction`, and the model-initialization constraint. Of these only
45
+ * the `IDiagramStartup` hooks are wrapped by the base loader (it logs them to
46
+ * `console.error`); the dispatcher-init / connection / request-model steps are
47
+ * not. The Theia widget that drives loading
48
+ * (`@eclipse-glsp/theia-integration`'s `GLSPDiagramWidget.onAfterAttach`)
49
+ * calls `load()` *without awaiting or catching it*, so any rejection becomes an
50
+ * uncaught promise rejection visible only in the browser devtools console —
51
+ * nothing reaches the e2e output, the server log, or a Theia log sink, and the
52
+ * diagram just stays blank.
53
+ *
54
+ * This subclass closes that gap: it catches every load failure, routes it to
55
+ * the host's logger (in Theia the Output channel the server log and action
56
+ * traffic share, so it is discoverable where a developer already looks), and
57
+ * surfaces a persistent error to the user via a `severity: 'ERROR'`
58
+ * {@link StatusAction} on the diagram's status overlay. It deliberately does
59
+ * **not** rethrow — the caller drops the promise, so rethrowing would only
60
+ * reproduce the uncaught rejection this exists to prevent.
61
+ *
62
+ * It also publishes the load's terminal state ({@link loadOutcome} /
63
+ * {@link onceLoadSettled}) so a pending indicator has one authority to key on.
64
+ * The Theia diagram widget uses it to cover the canvas while loading; see
65
+ * {@link settle} for why the signal cannot be derived from the error
66
+ * `StatusAction` instead.
67
+ *
68
+ * Bound by `createGlspClientModule` via `rebind(DiagramLoader)`.
69
+ */
70
+ export declare class HydraniumDiagramLoader extends DiagramLoader {
71
+ protected readonly hydraniumLogger: Logger;
72
+ protected readonly settled: Deferred<DiagramLoadOutcome>;
73
+ protected outcome?: DiagramLoadOutcome;
74
+ /** Terminal state of the load, or `undefined` while it is still in flight.
75
+ * The synchronous companion of {@link onceLoadSettled}, for a consumer that
76
+ * must decide something in the same tick (e.g. whether to show an indicator
77
+ * at all when re-attaching an already-loaded diagram). */
78
+ get loadOutcome(): DiagramLoadOutcome | undefined;
79
+ /** Resolves once the load reaches a terminal state — on success **and** on
80
+ * failure, so a caller awaiting it cannot hang. Never rejects. */
81
+ onceLoadSettled(): Promise<DiagramLoadOutcome>;
82
+ load(options?: DiagramLoadingOptions): Promise<void>;
83
+ /**
84
+ * Record the terminal state and release {@link onceLoadSettled}. Idempotent —
85
+ * the first outcome wins, so a reload cannot flip a settled indicator.
86
+ *
87
+ * This runs unconditionally after {@link reportLoadFailure}, *including* when
88
+ * the status dispatch inside it threw. That is the load-bearing property: when
89
+ * the action dispatcher is itself the thing that failed to initialize — the
90
+ * exact failure this class exists for — no `StatusAction` ever lands, so a
91
+ * consumer observing actions would wait forever. Settling here means a pending
92
+ * indicator always comes down, and `surfaced: false` tells that consumer it is
93
+ * now the only thing that can report the failure.
94
+ */
95
+ protected settle(outcome: DiagramLoadOutcome): void;
96
+ /**
97
+ * Route a diagram-load failure to the host's logger and the status overlay.
98
+ * The status dispatch is itself guarded: when the action dispatcher is the
99
+ * thing that failed to initialize, dispatching may throw too, and a failure
100
+ * to *report* the failure must not re-escape as an uncaught rejection.
101
+ *
102
+ * @returns whether the `StatusAction` reached the dispatcher — i.e. whether the
103
+ * user can see this failure on the diagram. The log line always happens, so
104
+ * the return value is specifically about the *user-visible* report; a `false`
105
+ * makes {@link DiagramLoadFailure.surfaced} false and hands the job to whoever
106
+ * is covering the canvas.
107
+ */
108
+ protected reportLoadFailure(err: unknown): Promise<boolean>;
109
+ /**
110
+ * The sentence a failed load is reported with, on every surface that reports
111
+ * it. Public because the canvas overlay is one of those surfaces and lives in
112
+ * another class, where a second copy of the sentence would drift.
113
+ *
114
+ * English, formatted from {@link DIAGRAM_LOAD_FAILED}: this tier knows no
115
+ * locale. A host that does renders the code through its own mechanism by
116
+ * overriding this method, so every surface, the log line included, carries
117
+ * the one sentence the user reads.
118
+ */
119
+ loadFailureLabel(err: unknown): string;
120
+ /** Render a thrown value as a message. Shared so the log line, the status
121
+ * overlay and any consumer rendering {@link DiagramLoadFailure.error} agree. */
122
+ protected formatError(err: unknown): string;
123
+ }
124
+ //# sourceMappingURL=diagram-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagram-loader.d.ts","sourceRoot":"","sources":["../src/diagram-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,aAAa,EAAE,KAAK,qBAAqB,EAAgB,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,QAAQ,EAAiB,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAK3E;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;AAEzE,MAAM,WAAW,kBAAkB;IAChC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IAChC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,iFAAiF;IACjF,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBACa,sBAAuB,SAAQ,aAAa;IACjB,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAG,MAAM,CAAC;IAEjF,SAAS,CAAC,QAAQ,CAAC,OAAO,+BAAsC;IAChE,SAAS,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAEvC;;;+DAG2D;IAC3D,IAAI,WAAW,IAAI,kBAAkB,GAAG,SAAS,CAEhD;IAED;uEACmE;IACnE,eAAe,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAE7C;IAEc,IAAI,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CASlE;IAED;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAMlD;IAED;;;;;;;;;;;OAWG;IACH,UAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAUhE;IAED;;;;;;;;;OASG;IACH,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAErC;IAED;qFACiF;IACjF,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAE1C;CACH"}
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ /********************************************************************************
3
+ * Copyright (c) 2026 CrossBreeze, EclipseSource and others.
4
+ *
5
+ * This program and the accompanying materials are made available under the
6
+ * terms of the MIT License which is available in the project root.
7
+ *
8
+ * SPDX-License-Identifier: MIT
9
+ ********************************************************************************/
10
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
11
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
12
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
13
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
14
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
15
+ };
16
+ var __metadata = (this && this.__metadata) || function (k, v) {
17
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.HydraniumDiagramLoader = void 0;
21
+ const client_1 = require("@eclipse-glsp/client");
22
+ const protocol_1 = require("@hydranium/protocol");
23
+ const inversify_1 = require("inversify");
24
+ const diagram_load_failed_1 = require("./diagram-load-failed");
25
+ const types_1 = require("./types");
26
+ /**
27
+ * Diagram loader that never lets a load failure vanish.
28
+ *
29
+ * `DiagramLoader.load()` orchestrates the full diagram-init path — action
30
+ * dispatcher init, GLSP-client connect + server `initialize`, the first
31
+ * `RequestModelAction`, and the model-initialization constraint. Of these only
32
+ * the `IDiagramStartup` hooks are wrapped by the base loader (it logs them to
33
+ * `console.error`); the dispatcher-init / connection / request-model steps are
34
+ * not. The Theia widget that drives loading
35
+ * (`@eclipse-glsp/theia-integration`'s `GLSPDiagramWidget.onAfterAttach`)
36
+ * calls `load()` *without awaiting or catching it*, so any rejection becomes an
37
+ * uncaught promise rejection visible only in the browser devtools console —
38
+ * nothing reaches the e2e output, the server log, or a Theia log sink, and the
39
+ * diagram just stays blank.
40
+ *
41
+ * This subclass closes that gap: it catches every load failure, routes it to
42
+ * the host's logger (in Theia the Output channel the server log and action
43
+ * traffic share, so it is discoverable where a developer already looks), and
44
+ * surfaces a persistent error to the user via a `severity: 'ERROR'`
45
+ * {@link StatusAction} on the diagram's status overlay. It deliberately does
46
+ * **not** rethrow — the caller drops the promise, so rethrowing would only
47
+ * reproduce the uncaught rejection this exists to prevent.
48
+ *
49
+ * It also publishes the load's terminal state ({@link loadOutcome} /
50
+ * {@link onceLoadSettled}) so a pending indicator has one authority to key on.
51
+ * The Theia diagram widget uses it to cover the canvas while loading; see
52
+ * {@link settle} for why the signal cannot be derived from the error
53
+ * `StatusAction` instead.
54
+ *
55
+ * Bound by `createGlspClientModule` via `rebind(DiagramLoader)`.
56
+ */
57
+ let HydraniumDiagramLoader = class HydraniumDiagramLoader extends client_1.DiagramLoader {
58
+ hydraniumLogger;
59
+ settled = new protocol_1.Deferred();
60
+ outcome;
61
+ /** Terminal state of the load, or `undefined` while it is still in flight.
62
+ * The synchronous companion of {@link onceLoadSettled}, for a consumer that
63
+ * must decide something in the same tick (e.g. whether to show an indicator
64
+ * at all when re-attaching an already-loaded diagram). */
65
+ get loadOutcome() {
66
+ return this.outcome;
67
+ }
68
+ /** Resolves once the load reaches a terminal state — on success **and** on
69
+ * failure, so a caller awaiting it cannot hang. Never rejects. */
70
+ onceLoadSettled() {
71
+ return this.settled.promise;
72
+ }
73
+ async load(options) {
74
+ try {
75
+ await super.load(options);
76
+ this.settle({ status: 'loaded' });
77
+ }
78
+ catch (err) {
79
+ // Report first, settle second, and carry whether the report landed.
80
+ const surfaced = await this.reportLoadFailure(err);
81
+ this.settle({ status: 'failed', error: err, surfaced });
82
+ }
83
+ }
84
+ /**
85
+ * Record the terminal state and release {@link onceLoadSettled}. Idempotent —
86
+ * the first outcome wins, so a reload cannot flip a settled indicator.
87
+ *
88
+ * This runs unconditionally after {@link reportLoadFailure}, *including* when
89
+ * the status dispatch inside it threw. That is the load-bearing property: when
90
+ * the action dispatcher is itself the thing that failed to initialize — the
91
+ * exact failure this class exists for — no `StatusAction` ever lands, so a
92
+ * consumer observing actions would wait forever. Settling here means a pending
93
+ * indicator always comes down, and `surfaced: false` tells that consumer it is
94
+ * now the only thing that can report the failure.
95
+ */
96
+ settle(outcome) {
97
+ if (this.outcome !== undefined) {
98
+ return;
99
+ }
100
+ this.outcome = outcome;
101
+ this.settled.resolve(outcome);
102
+ }
103
+ /**
104
+ * Route a diagram-load failure to the host's logger and the status overlay.
105
+ * The status dispatch is itself guarded: when the action dispatcher is the
106
+ * thing that failed to initialize, dispatching may throw too, and a failure
107
+ * to *report* the failure must not re-escape as an uncaught rejection.
108
+ *
109
+ * @returns whether the `StatusAction` reached the dispatcher — i.e. whether the
110
+ * user can see this failure on the diagram. The log line always happens, so
111
+ * the return value is specifically about the *user-visible* report; a `false`
112
+ * makes {@link DiagramLoadFailure.surfaced} false and hands the job to whoever
113
+ * is covering the canvas.
114
+ */
115
+ async reportLoadFailure(err) {
116
+ const label = this.loadFailureLabel(err);
117
+ this.hydraniumLogger.error(label, err);
118
+ try {
119
+ await this.actionDispatcher.dispatch(client_1.StatusAction.create(label, { severity: 'ERROR' }));
120
+ return true;
121
+ }
122
+ catch (statusErr) {
123
+ this.hydraniumLogger.error('Failed to surface the diagram-load failure on the status overlay', statusErr);
124
+ return false;
125
+ }
126
+ }
127
+ /**
128
+ * The sentence a failed load is reported with, on every surface that reports
129
+ * it. Public because the canvas overlay is one of those surfaces and lives in
130
+ * another class, where a second copy of the sentence would drift.
131
+ *
132
+ * English, formatted from {@link DIAGRAM_LOAD_FAILED}: this tier knows no
133
+ * locale. A host that does renders the code through its own mechanism by
134
+ * overriding this method, so every surface, the log line included, carries
135
+ * the one sentence the user reads.
136
+ */
137
+ loadFailureLabel(err) {
138
+ return diagram_load_failed_1.DIAGRAM_LOAD_FAILED.format({ reason: this.formatError(err) });
139
+ }
140
+ /** Render a thrown value as a message. Shared so the log line, the status
141
+ * overlay and any consumer rendering {@link DiagramLoadFailure.error} agree. */
142
+ formatError(err) {
143
+ return (0, protocol_1.describeError)(err);
144
+ }
145
+ };
146
+ exports.HydraniumDiagramLoader = HydraniumDiagramLoader;
147
+ __decorate([
148
+ (0, inversify_1.inject)(types_1.HydraniumClientTypes.Logger),
149
+ __metadata("design:type", Object)
150
+ ], HydraniumDiagramLoader.prototype, "hydraniumLogger", void 0);
151
+ exports.HydraniumDiagramLoader = HydraniumDiagramLoader = __decorate([
152
+ (0, inversify_1.injectable)()
153
+ ], HydraniumDiagramLoader);
154
+ //# sourceMappingURL=diagram-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagram-loader.js","sourceRoot":"","sources":["../src/diagram-loader.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;;;;;;;;;;;AAElF,iDAA+F;AAC/F,kDAA2E;AAC3E,yCAA+C;AAC/C,+DAA4D;AAC5D,mCAA+C;AAiC/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEI,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,sBAAa;IACE,eAAe,CAAU;IAE9D,OAAO,GAAG,IAAI,mBAAQ,EAAsB,CAAC;IACtD,OAAO,CAAsB;IAEvC;;;+DAG2D;IAC3D,IAAI,WAAW;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC;IACvB,CAAC;IAED;uEACmE;IACnE,eAAe;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAC/B,CAAC;IAEQ,KAAK,CAAC,IAAI,CAAC,OAA+B;QAChD,IAAI,CAAC;YACF,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACZ,oEAAoE;YACpE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;YACnD,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3D,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;OAWG;IACO,MAAM,CAAC,OAA2B;QACzC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO;QACV,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAED;;;;;;;;;;;OAWG;IACO,KAAK,CAAC,iBAAiB,CAAC,GAAY;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC;YACF,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,qBAAY,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YACxF,OAAO,IAAI,CAAC;QACf,CAAC;QAAC,OAAO,SAAS,EAAE,CAAC;YAClB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,kEAAkE,EAAE,SAAS,CAAC,CAAC;YAC1G,OAAO,KAAK,CAAC;QAChB,CAAC;IACJ,CAAC;IAED;;;;;;;;;OASG;IACH,gBAAgB,CAAC,GAAY;QAC1B,OAAO,yCAAmB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;IAED;qFACiF;IACvE,WAAW,CAAC,GAAY;QAC/B,OAAO,IAAA,wBAAa,EAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;CACH,CAAA;;AA7F0D;IAAvD,IAAA,kBAAM,EAAC,4BAAoB,CAAC,MAAM,CAAC;;+DAA6C;iCADvE,sBAAsB;IADlC,IAAA,sBAAU,GAAE;GACA,sBAAsB,CA8FlC"}
package/lib/edge.d.ts ADDED
@@ -0,0 +1,40 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 CrossBreeze, EclipseSource and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the MIT License which is available in the project root.
6
+ *
7
+ * SPDX-License-Identifier: MIT
8
+ ********************************************************************************/
9
+ import { type BindingContext, type Bounds, GEdge, type Point } from '@eclipse-glsp/client';
10
+ /**
11
+ * GLSP's edge, with an empty route transforming its children through the
12
+ * origin.
13
+ *
14
+ * `GEdge` offsets a child by the bounds of its routing points, and sprotty's
15
+ * `getRouteBounds` answers `NaN` for an empty route, which an edge without
16
+ * bendpoints always has. An edge label's bounds then come out `NaN`, and a
17
+ * fit-to-screen over every element lands the viewport at `translate(NaN,NaN)`,
18
+ * where every shape fails its visibility check and the canvas goes blank.
19
+ *
20
+ * Register your own edge types with this class in place of `GEdge`; sprotty
21
+ * fixes a type's class when it is registered, so an edge type registered with
22
+ * `GEdge` keeps the defect. Patching `GEdge`'s prototype would reach those
23
+ * types too, and is not done: it is no extension point of GLSP's.
24
+ */
25
+ export declare class HydraniumGEdge extends GEdge {
26
+ localToParent(point: Point | Bounds): Bounds;
27
+ parentToLocal(point: Point | Bounds): Bounds;
28
+ }
29
+ /**
30
+ * GLSP's default model elements, with `DefaultTypes.EDGE` built as a
31
+ * {@link HydraniumGEdge}.
32
+ *
33
+ * Call it from your diagram module in place of GLSP's
34
+ * `configureDefaultModelElements`. The replacement cannot come from the
35
+ * binder: a diagram module is loaded after the host's, and GLSP's model
36
+ * registry gives a type to whichever registration came last, so a replacement
37
+ * bound before the defaults is the one overwritten.
38
+ */
39
+ export declare function configureHydraniumModelElements(context: Pick<BindingContext, 'bind' | 'isBound'>): void;
40
+ //# sourceMappingURL=edge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edge.d.ts","sourceRoot":"","sources":["../src/edge.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EACJ,KAAK,cAAc,EACnB,KAAK,MAAM,EAGX,KAAK,EAIL,KAAK,KAAK,EACZ,MAAM,sBAAsB,CAAC;AAE9B;;;;;;;;;;;;;;GAcG;AACH,qBAAa,cAAe,SAAQ,KAAK;IAC7B,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAEpD;IAEQ,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAEpD;CACH;AAOD;;;;;;;;;GASG;AACH,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,IAAI,CAGvG"}
package/lib/edge.js ADDED
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ /********************************************************************************
3
+ * Copyright (c) 2026 CrossBreeze, EclipseSource and others.
4
+ *
5
+ * This program and the accompanying materials are made available under the
6
+ * terms of the MIT License which is available in the project root.
7
+ *
8
+ * SPDX-License-Identifier: MIT
9
+ ********************************************************************************/
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.HydraniumGEdge = void 0;
12
+ exports.configureHydraniumModelElements = configureHydraniumModelElements;
13
+ const client_1 = require("@eclipse-glsp/client");
14
+ /**
15
+ * GLSP's edge, with an empty route transforming its children through the
16
+ * origin.
17
+ *
18
+ * `GEdge` offsets a child by the bounds of its routing points, and sprotty's
19
+ * `getRouteBounds` answers `NaN` for an empty route, which an edge without
20
+ * bendpoints always has. An edge label's bounds then come out `NaN`, and a
21
+ * fit-to-screen over every element lands the viewport at `translate(NaN,NaN)`,
22
+ * where every shape fails its visibility check and the canvas goes blank.
23
+ *
24
+ * Register your own edge types with this class in place of `GEdge`; sprotty
25
+ * fixes a type's class when it is registered, so an edge type registered with
26
+ * `GEdge` keeps the defect. Patching `GEdge`'s prototype would reach those
27
+ * types too, and is not done: it is no extension point of GLSP's.
28
+ */
29
+ class HydraniumGEdge extends client_1.GEdge {
30
+ localToParent(point) {
31
+ return this.routingPoints.length === 0 ? asBounds(point) : super.localToParent(point);
32
+ }
33
+ parentToLocal(point) {
34
+ return this.routingPoints.length === 0 ? asBounds(point) : super.parentToLocal(point);
35
+ }
36
+ }
37
+ exports.HydraniumGEdge = HydraniumGEdge;
38
+ /** The shape `GEdge` returns: a point gains the size `-1`, bounds keep theirs. */
39
+ function asBounds(point) {
40
+ return { x: point.x, y: point.y, width: (0, client_1.isBounds)(point) ? point.width : -1, height: (0, client_1.isBounds)(point) ? point.height : -1 };
41
+ }
42
+ /**
43
+ * GLSP's default model elements, with `DefaultTypes.EDGE` built as a
44
+ * {@link HydraniumGEdge}.
45
+ *
46
+ * Call it from your diagram module in place of GLSP's
47
+ * `configureDefaultModelElements`. The replacement cannot come from the
48
+ * binder: a diagram module is loaded after the host's, and GLSP's model
49
+ * registry gives a type to whichever registration came last, so a replacement
50
+ * bound before the defaults is the one overwritten.
51
+ */
52
+ function configureHydraniumModelElements(context) {
53
+ (0, client_1.configureDefaultModelElements)(context);
54
+ (0, client_1.overrideModelElement)(context, client_1.DefaultTypes.EDGE, HydraniumGEdge, client_1.GEdgeView);
55
+ }
56
+ //# sourceMappingURL=edge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edge.js","sourceRoot":"","sources":["../src/edge.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;;;AAElF,iDAU8B;AAE9B;;;;;;;;;;;;;;GAcG;AACH,oBAA4B,SAAQ,cAAK;IAC7B,aAAa,CAAC,KAAqB;QACzC,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACzF,CAAC;IAEQ,aAAa,CAAC,KAAqB;QACzC,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACzF,CAAC;CACH;;AAED,kFAAkF;AAClF,SAAS,QAAQ,CAAC,KAAqB;IACpC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,IAAA,iBAAQ,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAA,iBAAQ,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7H,CAAC;AAED;;;;;;;;;GASG;AACH,yCAAgD,OAAiD;IAC9F,IAAA,sCAA6B,EAAC,OAAO,CAAC,CAAC;IACvC,IAAA,6BAAoB,EAAC,OAAO,EAAE,qBAAY,CAAC,IAAI,EAAE,cAAc,EAAE,kBAAS,CAAC,CAAC;AAC/E,CAAC"}
@@ -0,0 +1,36 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 CrossBreeze, EclipseSource and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the MIT License which is available in the project root.
6
+ *
7
+ * SPDX-License-Identifier: MIT
8
+ ********************************************************************************/
9
+ import { type BindingContext } from '@eclipse-glsp/client';
10
+ import { type Logger } from '@hydranium/protocol';
11
+ /** Options for {@link createGlspClientModule}. */
12
+ export interface GlspClientModuleOptions {
13
+ /** The host's logger, bound on `HydraniumClientTypes.Logger` in place of any
14
+ * binding the host made. Absent, the token keeps the host's own binding, or
15
+ * gets a `ConsoleLogger` when it has none. */
16
+ readonly logger?: Logger;
17
+ }
18
+ /**
19
+ * Binds the framework's client classes into a GLSP diagram container, whatever
20
+ * hosts it: the instrumented action dispatcher, the failure-reporting diagram
21
+ * loader, the route-repairing hidden-bounds updater, the status overlay that
22
+ * stays on the page, and a sprotty logger that reports through the host's.
23
+ *
24
+ * Call it from the module a host adds AFTER GLSP's defaults, since every class
25
+ * here replaces a token those defaults bind; `rebind` on an unbound token
26
+ * throws. A host that wants one GLSP default back rebinds that token after
27
+ * this call, the same one-line move this function makes.
28
+ *
29
+ * The logger and tracer tokens are bound only when the host has not bound
30
+ * them, so a host with a richer logger binds `HydraniumClientTypes.Logger`
31
+ * first and passes no option. The tracer composes the bound logger and clock.
32
+ * Bind the tokens in the container this runs in: `isBound` sees a parent
33
+ * container's binding, which `rebind` cannot replace.
34
+ */
35
+ export declare function createGlspClientModule(context: BindingContext, options?: GlspClientModuleOptions): void;
36
+ //# sourceMappingURL=glsp-client-module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glsp-client-module.d.ts","sourceRoot":"","sources":["../src/glsp-client-module.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EACJ,KAAK,cAAc,EAMrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAA4C,KAAK,MAAM,EAAe,MAAM,qBAAqB,CAAC;AAQzG,kDAAkD;AAClD,MAAM,WAAW,uBAAuB;IACrC;;mDAE+C;IAC/C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,GAAE,uBAA4B,GAAG,IAAI,CAwB3G"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ /********************************************************************************
3
+ * Copyright (c) 2026 CrossBreeze, EclipseSource and others.
4
+ *
5
+ * This program and the accompanying materials are made available under the
6
+ * terms of the MIT License which is available in the project root.
7
+ *
8
+ * SPDX-License-Identifier: MIT
9
+ ********************************************************************************/
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.createGlspClientModule = createGlspClientModule;
12
+ const client_1 = require("@eclipse-glsp/client");
13
+ const protocol_1 = require("@hydranium/protocol");
14
+ const action_dispatcher_1 = require("./action-dispatcher");
15
+ const diagram_loader_1 = require("./diagram-loader");
16
+ const hidden_bounds_updater_1 = require("./hidden-bounds-updater");
17
+ const sprotty_logger_adapter_1 = require("./sprotty-logger-adapter");
18
+ const status_overlay_1 = require("./status-overlay");
19
+ const types_1 = require("./types");
20
+ /**
21
+ * Binds the framework's client classes into a GLSP diagram container, whatever
22
+ * hosts it: the instrumented action dispatcher, the failure-reporting diagram
23
+ * loader, the route-repairing hidden-bounds updater, the status overlay that
24
+ * stays on the page, and a sprotty logger that reports through the host's.
25
+ *
26
+ * Call it from the module a host adds AFTER GLSP's defaults, since every class
27
+ * here replaces a token those defaults bind; `rebind` on an unbound token
28
+ * throws. A host that wants one GLSP default back rebinds that token after
29
+ * this call, the same one-line move this function makes.
30
+ *
31
+ * The logger and tracer tokens are bound only when the host has not bound
32
+ * them, so a host with a richer logger binds `HydraniumClientTypes.Logger`
33
+ * first and passes no option. The tracer composes the bound logger and clock.
34
+ * Bind the tokens in the container this runs in: `isBound` sees a parent
35
+ * container's binding, which `rebind` cannot replace.
36
+ */
37
+ function createGlspClientModule(context, options = {}) {
38
+ const { bind, isBound, rebind } = context;
39
+ if (options.logger) {
40
+ (isBound(types_1.HydraniumClientTypes.Logger) ? rebind : bind)(types_1.HydraniumClientTypes.Logger).toConstantValue(options.logger);
41
+ }
42
+ else if (!isBound(types_1.HydraniumClientTypes.Logger)) {
43
+ bind(types_1.HydraniumClientTypes.Logger).toConstantValue(new protocol_1.ConsoleLogger());
44
+ }
45
+ if (!isBound(types_1.HydraniumClientTypes.Tracer)) {
46
+ bind(types_1.HydraniumClientTypes.Tracer)
47
+ .toDynamicValue(ctx => {
48
+ const logger = ctx.container.get(types_1.HydraniumClientTypes.Logger);
49
+ const clock = ctx.container.isBound(types_1.HydraniumClientTypes.Clock)
50
+ ? ctx.container.get(types_1.HydraniumClientTypes.Clock)
51
+ : new protocol_1.SystemClock();
52
+ return new protocol_1.DefaultTracer(logger, clock);
53
+ })
54
+ .inSingletonScope();
55
+ }
56
+ bind(action_dispatcher_1.HydraniumGlspActionDispatcher).toSelf().inSingletonScope();
57
+ rebind(client_1.GLSPActionDispatcher).toService(action_dispatcher_1.HydraniumGlspActionDispatcher);
58
+ rebind(client_1.DiagramLoader).to(diagram_loader_1.HydraniumDiagramLoader).inSingletonScope();
59
+ rebind(client_1.GLSPHiddenBoundsUpdater).to(hidden_bounds_updater_1.HydraniumHiddenBoundsUpdater).inSingletonScope();
60
+ rebind(client_1.StatusOverlay).to(status_overlay_1.HydraniumStatusOverlay).inSingletonScope();
61
+ rebind(client_1.TYPES.ILogger).to(sprotty_logger_adapter_1.SprottyLoggerAdapter).inSingletonScope();
62
+ }
63
+ //# sourceMappingURL=glsp-client-module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glsp-client-module.js","sourceRoot":"","sources":["../src/glsp-client-module.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;;AAElF,iDAO8B;AAC9B,kDAAyG;AACzG,2DAAoE;AACpE,qDAA0D;AAC1D,mEAAuE;AACvE,qEAAgE;AAChE,qDAA0D;AAC1D,mCAA+C;AAU/C;;;;;;;;;;;;;;;;GAgBG;AACH,gCAAuC,OAAuB,EAAE,OAAO,GAA4B,EAAE;IAClG,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC1C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC,OAAO,CAAC,4BAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,4BAAoB,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvH,CAAC;SAAM,IAAI,CAAC,OAAO,CAAC,4BAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC,4BAAoB,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,IAAI,wBAAa,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,4BAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,4BAAoB,CAAC,MAAM,CAAC;aAC7B,cAAc,CAAC,GAAG,CAAC,EAAE;YACnB,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAS,4BAAoB,CAAC,MAAM,CAAC,CAAC;YACtE,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,4BAAoB,CAAC,KAAK,CAAC;gBAC5D,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAQ,4BAAoB,CAAC,KAAK,CAAC;gBACtD,CAAC,CAAC,IAAI,sBAAW,EAAE,CAAC;YACvB,OAAO,IAAI,wBAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC,CAAC;aACD,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IACD,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,MAAM,CAAC,sBAAa,CAAC,CAAC,EAAE,CAAC,uCAAsB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACpE,MAAM,CAAC,cAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,6CAAoB,CAAC,CAAC,gBAAgB,EAAE,CAAC;AACrE,CAAC"}
@@ -0,0 +1,17 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 CrossBreeze, EclipseSource and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the MIT License which is available in the project root.
6
+ *
7
+ * SPDX-License-Identifier: MIT
8
+ ********************************************************************************/
9
+ import { BaseJsonrpcGLSPClient, type DisposeClientSessionParameters } from '@eclipse-glsp/client';
10
+ /** The GLSP client a host builds over its connection to the GLSP head. */
11
+ export declare class HydraniumGlspClient extends BaseJsonrpcGLSPClient {
12
+ /** Resolves at once when the connection is gone: the session went with its
13
+ * server, and upstream would throw, which a diagram disposed after its
14
+ * client was lost logs as an error. */
15
+ disposeClientSession(params: DisposeClientSessionParameters): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=glsp-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glsp-client.d.ts","sourceRoot":"","sources":["../src/glsp-client.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,qBAAqB,EAAE,KAAK,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AAElG,0EAA0E;AAC1E,qBAAa,mBAAoB,SAAQ,qBAAqB;IAC3D;;4CAEwC;IAC/B,oBAAoB,CAAC,MAAM,EAAE,8BAA8B,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnF;CACH"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ /********************************************************************************
3
+ * Copyright (c) 2026 CrossBreeze, EclipseSource and others.
4
+ *
5
+ * This program and the accompanying materials are made available under the
6
+ * terms of the MIT License which is available in the project root.
7
+ *
8
+ * SPDX-License-Identifier: MIT
9
+ ********************************************************************************/
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.HydraniumGlspClient = void 0;
12
+ const client_1 = require("@eclipse-glsp/client");
13
+ /** The GLSP client a host builds over its connection to the GLSP head. */
14
+ class HydraniumGlspClient extends client_1.BaseJsonrpcGLSPClient {
15
+ /** Resolves at once when the connection is gone: the session went with its
16
+ * server, and upstream would throw, which a diagram disposed after its
17
+ * client was lost logs as an error. */
18
+ disposeClientSession(params) {
19
+ return this.isConnectionActive() ? super.disposeClientSession(params) : Promise.resolve();
20
+ }
21
+ }
22
+ exports.HydraniumGlspClient = HydraniumGlspClient;
23
+ //# sourceMappingURL=glsp-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glsp-client.js","sourceRoot":"","sources":["../src/glsp-client.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;;AAElF,iDAAkG;AAElG,0EAA0E;AAC1E,yBAAiC,SAAQ,8BAAqB;IAC3D;;4CAEwC;IAC/B,oBAAoB,CAAC,MAAsC;QACjE,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7F,CAAC;CACH"}