@eclipse-glsp/server 2.3.0-next.111 → 2.3.0-next.113
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/common/features/model/model-submission-handler.d.ts +8 -0
- package/lib/common/features/model/model-submission-handler.d.ts.map +1 -1
- package/lib/common/features/model/model-submission-handler.js +27 -2
- package/lib/common/features/model/model-submission-handler.js.map +1 -1
- package/package.json +5 -3
- package/src/common/features/model/model-submission-handler.ts +32 -2
|
@@ -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,
|
|
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
|
|
117
|
-
result.push(
|
|
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":";;;;;;;;;;;;AAAA;;;;;;;;;;;;;;kFAckF;AAClF,
|
|
1
|
+
{"version":3,"file":"model-submission-handler.js","sourceRoot":"","sources":["../../../../src/common/features/model/model-submission-handler.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eclipse-glsp/server",
|
|
3
|
-
"version": "2.3.0-next.
|
|
3
|
+
"version": "2.3.0-next.113+4e5da34",
|
|
4
4
|
"description": "A js server framework for Eclipse GLSP",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"eclipse",
|
|
@@ -58,16 +58,18 @@
|
|
|
58
58
|
"watch": "tsc -w"
|
|
59
59
|
},
|
|
60
60
|
"dependencies": {
|
|
61
|
-
"@eclipse-glsp/graph": "2.3.0-next.
|
|
61
|
+
"@eclipse-glsp/graph": "2.3.0-next.113+4e5da34",
|
|
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": {
|
|
@@ -76,5 +78,5 @@
|
|
|
76
78
|
"publishConfig": {
|
|
77
79
|
"access": "public"
|
|
78
80
|
},
|
|
79
|
-
"gitHead": "
|
|
81
|
+
"gitHead": "4e5da34c3b4f523969a816f3c385d3b302324d34"
|
|
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
|
|
153
|
-
result.push(
|
|
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 });
|