@eclipse-glsp/server 2.3.0-next.112 → 2.3.0-next.114

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.
@@ -14,6 +14,8 @@
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
16
  import { Action, DirtyStateChangeReason, GModelRootSchema, MaybePromise, RequestModelAction, SetModelAction } from '@eclipse-glsp/protocol';
17
+ import { DebouncedFunc } from 'lodash';
18
+ import { ActionDispatcher } from '../../actions/action-dispatcher';
17
19
  import { CommandStack } from '../../command/command-stack';
18
20
  import { DiagramConfiguration } from '../../diagram/diagram-configuration';
19
21
  import { LayoutEngine } from '../layout/layout-engine';
@@ -38,7 +40,10 @@ export declare class ModelSubmissionHandler {
38
40
  protected layoutEngine: LayoutEngine;
39
41
  protected commandStack: CommandStack;
40
42
  protected validator?: ModelValidator;
43
+ protected actionDispatcher: ActionDispatcher;
41
44
  protected requestModelAction?: RequestModelAction;
45
+ liveValidationDelay: number;
46
+ protected debouncedLiveValidation?: DebouncedFunc<(validator: ModelValidator) => void>;
42
47
  /**
43
48
  * Returns a list of actions to submit the initial revision of the client-side model, based on the injected
44
49
  * {@link ModelState}. Typically this method is invoked by the {@link RequestModelActionHandler} when the diagram
@@ -79,6 +84,9 @@ export declare class ModelSubmissionHandler {
79
84
  * @returns A list of actions to be processed in order to submit the model.
80
85
  */
81
86
  submitModelDirectly(reason?: DirtyStateChangeReason): Promise<Action[]>;
87
+ protected validateModel(validator: ModelValidator): MaybePromise<Action[]>;
88
+ protected scheduleLiveValidation(validator: ModelValidator): void;
89
+ protected performLiveValidation(validator: ModelValidator): Promise<void>;
82
90
  protected createSetModeAction(newRoot: GModelRootSchema): SetModelAction;
83
91
  protected serializeGModel(): GModelRootSchema;
84
92
  }
@@ -1 +1 @@
1
- {"version":3,"file":"model-submission-handler.d.ts","sourceRoot":"","sources":["../../../../src/common/features/model/model-submission-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAClF,OAAO,EACH,MAAM,EACN,sBAAsB,EACtB,gBAAgB,EAEhB,YAAY,EAEZ,kBAAkB,EAGlB,cAAc,EAEjB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAoB,MAAM,qCAAqC,CAAC;AAC7F,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C;;;;;;;;GAQG;AACH,qBACa,sBAAsB;IAE/B,SAAS,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;IAGrD,SAAS,CAAC,UAAU,EAAE,gBAAgB,CAAC;IAGvC,SAAS,CAAC,YAAY,EAAE,aAAa,CAAC;IAGtC,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC;IAIjC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;IAGrC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;IAIrC,SAAS,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC;IAErC,SAAS,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IAElD;;;;;;;;;;;;;OAaG;IACH,kBAAkB,CAAC,aAAa,EAAE,kBAAkB,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;IAU7E;;;;;;;;OAQG;IACH,WAAW,CAAC,MAAM,CAAC,EAAE,sBAAsB,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;IAapE;;;;;;;;;;;;;OAaG;IACG,mBAAmB,CAAC,MAAM,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAuB7E,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,cAAc;IAOxE,SAAS,CAAC,eAAe,IAAI,gBAAgB;CAGhD"}
1
+ {"version":3,"file":"model-submission-handler.d.ts","sourceRoot":"","sources":["../../../../src/common/features/model/model-submission-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAClF,OAAO,EACH,MAAM,EACN,sBAAsB,EACtB,gBAAgB,EAEhB,YAAY,EAEZ,kBAAkB,EAGlB,cAAc,EAGjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,EAAY,MAAM,QAAQ,CAAC;AAGjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAoB,MAAM,qCAAqC,CAAC;AAC7F,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C;;;;;;;;GAQG;AACH,qBACa,sBAAsB;IAE/B,SAAS,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;IAGrD,SAAS,CAAC,UAAU,EAAE,gBAAgB,CAAC;IAGvC,SAAS,CAAC,YAAY,EAAE,aAAa,CAAC;IAGtC,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC;IAIjC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;IAGrC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;IAIrC,SAAS,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC;IAGrC,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAE7C,SAAS,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IAElD,mBAAmB,SAAO;IAC1B,SAAS,CAAC,uBAAuB,CAAC,EAAE,aAAa,CAAC,CAAC,SAAS,EAAE,cAAc,KAAK,IAAI,CAAC,CAAC;IAEvF;;;;;;;;;;;;;OAaG;IACH,kBAAkB,CAAC,aAAa,EAAE,kBAAkB,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;IAU7E;;;;;;;;OAQG;IACH,WAAW,CAAC,MAAM,CAAC,EAAE,sBAAsB,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;IAapE;;;;;;;;;;;;;OAaG;IACG,mBAAmB,CAAC,MAAM,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAuB7E,SAAS,CAAC,aAAa,CAAC,SAAS,EAAE,cAAc,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;IAM1E,SAAS,CAAC,sBAAsB,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;cAMjD,qBAAqB,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAS/E,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,cAAc;IAOxE,SAAS,CAAC,eAAe,IAAI,gBAAgB;CAGhD"}
@@ -26,7 +26,9 @@ exports.ModelSubmissionHandler = void 0;
26
26
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
27
27
  ********************************************************************************/
28
28
  const protocol_1 = require("@eclipse-glsp/protocol");
29
+ const lodash_1 = require("lodash");
29
30
  const inversify_1 = require("inversify");
31
+ const action_dispatcher_1 = require("../../actions/action-dispatcher");
30
32
  const command_stack_1 = require("../../command/command-stack");
31
33
  const diagram_configuration_1 = require("../../diagram/diagram-configuration");
32
34
  const layout_engine_1 = require("../layout/layout-engine");
@@ -44,6 +46,9 @@ const model_state_1 = require("./model-state");
44
46
  * `ActionHandler.execute` method.
45
47
  */
46
48
  let ModelSubmissionHandler = class ModelSubmissionHandler {
49
+ constructor() {
50
+ this.liveValidationDelay = 100;
51
+ }
47
52
  /**
48
53
  * Returns a list of actions to submit the initial revision of the client-side model, based on the injected
49
54
  * {@link ModelState}. Typically this method is invoked by the {@link RequestModelActionHandler} when the diagram
@@ -113,11 +118,27 @@ let ModelSubmissionHandler = class ModelSubmissionHandler {
113
118
  result.push(protocol_1.SetDirtyStateAction.create(this.commandStack.isDirty, { reason }));
114
119
  }
115
120
  if (this.validator) {
116
- const markers = await this.validator.validate([this.modelState.root], protocol_1.MarkersReason.LIVE);
117
- result.push(protocol_1.SetMarkersAction.create(markers, { reason: protocol_1.MarkersReason.LIVE }));
121
+ const validationActions = await this.validateModel(this.validator);
122
+ result.push(...validationActions);
118
123
  }
119
124
  return result;
120
125
  }
126
+ validateModel(validator) {
127
+ this.scheduleLiveValidation(validator);
128
+ // we are using async, debounced live validation so there are no actions to return for the model submission
129
+ return [];
130
+ }
131
+ scheduleLiveValidation(validator) {
132
+ var _a;
133
+ (_a = this.debouncedLiveValidation) === null || _a === void 0 ? void 0 : _a.cancel();
134
+ this.debouncedLiveValidation = (0, lodash_1.debounce)(validator => this.performLiveValidation(validator), this.liveValidationDelay);
135
+ this.debouncedLiveValidation(validator);
136
+ }
137
+ async performLiveValidation(validator) {
138
+ this.actionDispatcher.dispatch(protocol_1.StatusAction.create('Validate Model...'));
139
+ const markers = await validator.validate([this.modelState.root], protocol_1.MarkersReason.LIVE);
140
+ return this.actionDispatcher.dispatchAll(protocol_1.SetMarkersAction.create(markers, { reason: protocol_1.MarkersReason.LIVE }), protocol_1.StatusAction.create('', { severity: 'NONE' }));
141
+ }
121
142
  createSetModeAction(newRoot) {
122
143
  var _a, _b;
123
144
  const responseId = (_b = (_a = this.requestModelAction) === null || _a === void 0 ? void 0 : _a.requestId) !== null && _b !== void 0 ? _b : '';
@@ -160,6 +181,10 @@ __decorate([
160
181
  (0, inversify_1.optional)(),
161
182
  __metadata("design:type", Object)
162
183
  ], ModelSubmissionHandler.prototype, "validator", void 0);
184
+ __decorate([
185
+ (0, inversify_1.inject)(action_dispatcher_1.ActionDispatcher),
186
+ __metadata("design:type", Object)
187
+ ], ModelSubmissionHandler.prototype, "actionDispatcher", void 0);
163
188
  exports.ModelSubmissionHandler = ModelSubmissionHandler = __decorate([
164
189
  (0, inversify_1.injectable)()
165
190
  ], ModelSubmissionHandler);
@@ -1 +1 @@
1
- {"version":3,"file":"model-submission-handler.js","sourceRoot":"","sources":["../../../../src/common/features/model/model-submission-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model-submission-handler.js","sourceRoot":"","sources":["../../../../src/common/features/model/model-submission-handler.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"request-navigation-targets-action-handler.d.ts","sourceRoot":"","sources":["../../../../src/common/features/navigation/request-navigation-targets-action-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAClF,OAAO,EAAE,MAAM,EAAE,YAAY,EAAoB,8BAA8B,EAA8B,MAAM,wBAAwB,CAAC;AAG5I,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AAEzF,qBACa,qCAAsC,YAAW,aAAa;IACvE,WAAW,WAAyC;IAGpD,SAAS,CAAC,gCAAgC,EAAE,gCAAgC,CAAC;IAE7E,OAAO,CAAC,MAAM,EAAE,8BAA8B,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;CAU1E"}
1
+ {"version":3,"file":"request-navigation-targets-action-handler.d.ts","sourceRoot":"","sources":["../../../../src/common/features/navigation/request-navigation-targets-action-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAClF,OAAO,EAAE,MAAM,EAAE,YAAY,EAAoB,8BAA8B,EAA8B,MAAM,wBAAwB,CAAC;AAE5I,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AAEzF,qBACa,qCAAsC,YAAW,aAAa;IACvE,WAAW,WAAyC;IAGpD,SAAS,CAAC,gCAAgC,EAAE,gCAAgC,CAAC;IAE7E,OAAO,CAAC,MAAM,EAAE,8BAA8B,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;CAU1E"}
@@ -27,7 +27,6 @@ exports.RequestNavigationTargetsActionHandler = void 0;
27
27
  ********************************************************************************/
28
28
  const protocol_1 = require("@eclipse-glsp/protocol");
29
29
  const inversify_1 = require("inversify");
30
- const inject_1 = require("inversify/lib/annotation/inject");
31
30
  const navigation_target_provider_registry_1 = require("./navigation-target-provider-registry");
32
31
  let RequestNavigationTargetsActionHandler = class RequestNavigationTargetsActionHandler {
33
32
  constructor() {
@@ -46,7 +45,7 @@ let RequestNavigationTargetsActionHandler = class RequestNavigationTargetsAction
46
45
  };
47
46
  exports.RequestNavigationTargetsActionHandler = RequestNavigationTargetsActionHandler;
48
47
  __decorate([
49
- (0, inject_1.inject)(navigation_target_provider_registry_1.NavigationTargetProviderRegistry),
48
+ (0, inversify_1.inject)(navigation_target_provider_registry_1.NavigationTargetProviderRegistry),
50
49
  __metadata("design:type", Object)
51
50
  ], RequestNavigationTargetsActionHandler.prototype, "navigationTargetProviderRegistry", void 0);
52
51
  exports.RequestNavigationTargetsActionHandler = RequestNavigationTargetsActionHandler = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"request-navigation-targets-action-handler.js","sourceRoot":"","sources":["../../../../src/common/features/navigation/request-navigation-targets-action-handler.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;;;;;;;;;;;;;kFAckF;AAClF,qDAA4I;AAC5I,yCAAuC;AACvC,4DAAyD;AAEzD,+FAAyF;AAGlF,IAAM,qCAAqC,GAA3C,MAAM,qCAAqC;IAA3C;QACH,gBAAW,GAAG,CAAC,yCAA8B,CAAC,IAAI,CAAC,CAAC;IAexD,CAAC;IAVG,OAAO,CAAC,MAAsC;QAC1C,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC3C,MAAM,UAAU,GAAuB,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,gCAAgC,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAChF,IAAI,QAAQ,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YACnD,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,CAAC,qCAA0B,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACzF,CAAC;CACJ,CAAA;AAhBY,sFAAqC;AAIpC;IADT,IAAA,eAAM,EAAC,sEAAgC,CAAC;;+FACoC;gDAJpE,qCAAqC;IADjD,IAAA,sBAAU,GAAE;GACA,qCAAqC,CAgBjD"}
1
+ {"version":3,"file":"request-navigation-targets-action-handler.js","sourceRoot":"","sources":["../../../../src/common/features/navigation/request-navigation-targets-action-handler.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;;;;;;;;;;;;;kFAckF;AAClF,qDAA4I;AAC5I,yCAA+C;AAE/C,+FAAyF;AAGlF,IAAM,qCAAqC,GAA3C,MAAM,qCAAqC;IAA3C;QACH,gBAAW,GAAG,CAAC,yCAA8B,CAAC,IAAI,CAAC,CAAC;IAexD,CAAC;IAVG,OAAO,CAAC,MAAsC;QAC1C,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC3C,MAAM,UAAU,GAAuB,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,gCAAgC,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAChF,IAAI,QAAQ,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YACnD,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,CAAC,qCAA0B,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACzF,CAAC;CACJ,CAAA;AAhBY,sFAAqC;AAIpC;IADT,IAAA,kBAAM,EAAC,sEAAgC,CAAC;;+FACoC;gDAJpE,qCAAqC;IADjD,IAAA,sBAAU,GAAE;GACA,qCAAqC,CAgBjD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eclipse-glsp/server",
3
- "version": "2.3.0-next.112+a9ed9ad",
3
+ "version": "2.3.0-next.114+54ec18e",
4
4
  "description": "A js server framework for Eclipse GLSP",
5
5
  "keywords": [
6
6
  "eclipse",
@@ -58,23 +58,25 @@
58
58
  "watch": "tsc -w"
59
59
  },
60
60
  "dependencies": {
61
- "@eclipse-glsp/graph": "2.3.0-next.112+a9ed9ad",
61
+ "@eclipse-glsp/graph": "2.3.0-next.114+54ec18e",
62
62
  "@eclipse-glsp/protocol": "next",
63
63
  "@types/uuid": "8.3.1",
64
64
  "commander": "^8.3.0",
65
65
  "fast-json-patch": "^3.1.0",
66
+ "lodash": "4.17.21",
66
67
  "vscode-jsonrpc": "8.2.0",
67
68
  "winston": "^3.3.3",
68
69
  "ws": "^8.12.1"
69
70
  },
70
71
  "devDependencies": {
72
+ "@types/lodash": "4.14.191",
71
73
  "@types/ws": "^8.5.4"
72
74
  },
73
75
  "peerDependencies": {
74
- "inversify": "~6.0.2"
76
+ "inversify": "^6.1.3"
75
77
  },
76
78
  "publishConfig": {
77
79
  "access": "public"
78
80
  },
79
- "gitHead": "a9ed9ad7e3fec636dd13c455b7931c0894cbe486"
81
+ "gitHead": "54ec18e62b8809153d0942931db7ed942ed770ec"
80
82
  }
@@ -24,10 +24,13 @@ import {
24
24
  SetDirtyStateAction,
25
25
  SetMarkersAction,
26
26
  SetModelAction,
27
+ StatusAction,
27
28
  UpdateModelAction
28
29
  } from '@eclipse-glsp/protocol';
30
+ import { DebouncedFunc, debounce } from 'lodash';
29
31
 
30
32
  import { inject, injectable, optional } from 'inversify';
33
+ import { ActionDispatcher } from '../../actions/action-dispatcher';
31
34
  import { CommandStack } from '../../command/command-stack';
32
35
  import { DiagramConfiguration, ServerLayoutKind } from '../../diagram/diagram-configuration';
33
36
  import { LayoutEngine } from '../layout/layout-engine';
@@ -70,8 +73,14 @@ export class ModelSubmissionHandler {
70
73
  @optional()
71
74
  protected validator?: ModelValidator;
72
75
 
76
+ @inject(ActionDispatcher)
77
+ protected actionDispatcher: ActionDispatcher;
78
+
73
79
  protected requestModelAction?: RequestModelAction;
74
80
 
81
+ liveValidationDelay = 100;
82
+ protected debouncedLiveValidation?: DebouncedFunc<(validator: ModelValidator) => void>;
83
+
75
84
  /**
76
85
  * Returns a list of actions to submit the initial revision of the client-side model, based on the injected
77
86
  * {@link ModelState}. Typically this method is invoked by the {@link RequestModelActionHandler} when the diagram
@@ -149,12 +158,33 @@ export class ModelSubmissionHandler {
149
158
  result.push(SetDirtyStateAction.create(this.commandStack.isDirty, { reason }));
150
159
  }
151
160
  if (this.validator) {
152
- const markers = await this.validator.validate([this.modelState.root], MarkersReason.LIVE);
153
- result.push(SetMarkersAction.create(markers, { reason: MarkersReason.LIVE }));
161
+ const validationActions = await this.validateModel(this.validator);
162
+ result.push(...validationActions);
154
163
  }
155
164
  return result;
156
165
  }
157
166
 
167
+ protected validateModel(validator: ModelValidator): MaybePromise<Action[]> {
168
+ this.scheduleLiveValidation(validator);
169
+ // we are using async, debounced live validation so there are no actions to return for the model submission
170
+ return [];
171
+ }
172
+
173
+ protected scheduleLiveValidation(validator: ModelValidator): void {
174
+ this.debouncedLiveValidation?.cancel();
175
+ this.debouncedLiveValidation = debounce(validator => this.performLiveValidation(validator), this.liveValidationDelay);
176
+ this.debouncedLiveValidation(validator);
177
+ }
178
+
179
+ protected async performLiveValidation(validator: ModelValidator): Promise<void> {
180
+ this.actionDispatcher.dispatch(StatusAction.create('Validate Model...'));
181
+ const markers = await validator.validate([this.modelState.root], MarkersReason.LIVE);
182
+ return this.actionDispatcher.dispatchAll(
183
+ SetMarkersAction.create(markers, { reason: MarkersReason.LIVE }),
184
+ StatusAction.create('', { severity: 'NONE' })
185
+ );
186
+ }
187
+
158
188
  protected createSetModeAction(newRoot: GModelRootSchema): SetModelAction {
159
189
  const responseId = this.requestModelAction?.requestId ?? '';
160
190
  const response = SetModelAction.create(newRoot, { responseId });
@@ -14,8 +14,7 @@
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
16
  import { Action, MaybePromise, NavigationTarget, RequestNavigationTargetsAction, SetNavigationTargetsAction } from '@eclipse-glsp/protocol';
17
- import { injectable } from 'inversify';
18
- import { inject } from 'inversify/lib/annotation/inject';
17
+ import { inject, injectable } from 'inversify';
19
18
  import { ActionHandler } from '../../actions/action-handler';
20
19
  import { NavigationTargetProviderRegistry } from './navigation-target-provider-registry';
21
20