@freelog/freelog-cg-collection 1.0.8 → 1.0.10
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/CollectionPolicyCustomVisitor.js +135 -45
- package/dist/helper/ExpHelper.d.ts +5 -1
- package/dist/helper/ExpHelper.js +27 -5
- package/dist/helper/FunctionHelper.d.ts +5 -0
- package/dist/helper/FunctionHelper.js +19 -3
- package/dist/helper/PolicyHelper.d.ts +6 -1
- package/dist/helper/PolicyHelper.js +13 -1
- package/dist/model/policy/ActionInfo.d.ts +1 -0
- package/dist/model/policy/EventInfo.d.ts +4 -0
- package/dist/model/policy/PolicyInfo.d.ts +6 -0
- package/dist/model/policy/VarDeclarationInfo.d.ts +1 -0
- package/gen/CollectionPolicyLexer.js +552 -566
- package/gen/CollectionPolicyListener.js +18 -9
- package/gen/CollectionPolicyParser.js +1036 -927
- package/gen/CollectionPolicyVisitor.js +12 -6
- package/gen/LexToken.js +554 -568
- package/index.js +2 -2
- package/indexTest.js +1 -1
- package/package.json +1 -1
- package/resources/context_config/function_configs.json +28 -6
- package/resources/context_config/service_state_configs.json +11 -0
- package/resources/zhaojn.json +234 -159
- package/resources/zhaojn.sc +14 -10
- package/src/helper/ExpHelper.ts +28 -6
- package/src/helper/FunctionHelper.ts +22 -5
- package/src/model/policy/ActionInfo.ts +1 -0
- package/src/model/policy/EventInfo.ts +4 -0
- package/src/model/policy/PolicyInfo.ts +6 -0
- package/src/model/policy/VarDeclarationInfo.ts +1 -0
|
@@ -2,12 +2,13 @@ const {CollectionPolicyVisitor} = require("./gen/CollectionPolicyVisitor");
|
|
|
2
2
|
const {ExpHelper} = require("./dist/helper/ExpHelper");
|
|
3
3
|
const {FunctionHelper} = require("./dist/helper/FunctionHelper");
|
|
4
4
|
const system_keywords = require("./resources/context_config/system_keywords.json");
|
|
5
|
-
const
|
|
5
|
+
const service_state_configs = require("./resources/context_config/service_state_configs.json");
|
|
6
6
|
const event_configs = require("./resources/context_config/event_configs.json");
|
|
7
7
|
|
|
8
8
|
class CollectionPolicyCustomVisitor extends CollectionPolicyVisitor {
|
|
9
|
-
constructor() {
|
|
9
|
+
constructor(serviceName) {
|
|
10
10
|
super();
|
|
11
|
+
this.serviceName = serviceName;
|
|
11
12
|
// 签约条件
|
|
12
13
|
this.audienceSection = {};
|
|
13
14
|
// 全局定义(变量)声明
|
|
@@ -19,10 +20,25 @@ class CollectionPolicyCustomVisitor extends CollectionPolicyVisitor {
|
|
|
19
20
|
this.currentState = null;
|
|
20
21
|
this.currentStateObj = null;
|
|
21
22
|
this.currentEventElem = null;
|
|
23
|
+
this.parseState = {inActionSection: 0};
|
|
22
24
|
|
|
23
25
|
this.expHelper = new ExpHelper();
|
|
24
26
|
this.functionHelper = new FunctionHelper();
|
|
25
27
|
this.functionHelper.setExpHelper(this.expHelper);
|
|
28
|
+
this.expHelper.setFunctionHelper(this.functionHelper);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
generateVarValueTypeList(varValueList) {
|
|
32
|
+
let varValueListTmp = [...varValueList].reverse();
|
|
33
|
+
return varValueListTmp.map(vv => {
|
|
34
|
+
return {
|
|
35
|
+
varName: vv["varName"], varValueType: vv["varValueType"]
|
|
36
|
+
};
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
getVarDeclarationValueTypeList() {
|
|
41
|
+
return this.generateVarValueTypeList(this.varDeclarationList);
|
|
26
42
|
}
|
|
27
43
|
|
|
28
44
|
visitAudience_clause(ctx) {
|
|
@@ -36,9 +52,11 @@ class CollectionPolicyCustomVisitor extends CollectionPolicyVisitor {
|
|
|
36
52
|
let conditions = this.visitExpression_param_list(ctx.expression_param_list());
|
|
37
53
|
for (let condition of conditions) {
|
|
38
54
|
if (condition["paramName"] == null) {
|
|
39
|
-
throw new Error(`参数名不可为空 ${condition}`);
|
|
55
|
+
throw new Error(`参数名不可为空 ${condition["content"]}`);
|
|
56
|
+
}
|
|
57
|
+
if (["echoSubject", "labels", "exps"].indexOf(condition["paramName"]) === -1) {
|
|
58
|
+
throw new Error(`无效的参数名 ${condition["content"]}`);
|
|
40
59
|
}
|
|
41
|
-
console.log(condition);
|
|
42
60
|
}
|
|
43
61
|
this.audienceSection["conditions"] = conditions;
|
|
44
62
|
} else {
|
|
@@ -65,6 +83,9 @@ class CollectionPolicyCustomVisitor extends CollectionPolicyVisitor {
|
|
|
65
83
|
} else {
|
|
66
84
|
this.varDeclarationMap.set(varElem.varName, varElem);
|
|
67
85
|
}
|
|
86
|
+
varElem["varValueType"] = this.expHelper.guessBaseTypeByExpType(varElem["varValueObj"], this.getVarDeclarationValueTypeList());
|
|
87
|
+
console.debug(`>> ${ctx.getText()} --> ${varElem["varValueType"]}`);
|
|
88
|
+
|
|
68
89
|
this.varDeclarationList.push(varElem);
|
|
69
90
|
|
|
70
91
|
return varElem;
|
|
@@ -87,6 +108,9 @@ class CollectionPolicyCustomVisitor extends CollectionPolicyVisitor {
|
|
|
87
108
|
} else {
|
|
88
109
|
this.varDeclarationMap.set(varElem.varName, varElem);
|
|
89
110
|
}
|
|
111
|
+
varElem["varValueType"] = this.expHelper.guessBaseTypeByExpType(varElem["varValueObj"], this.getVarDeclarationValueTypeList());
|
|
112
|
+
console.debug(`>> ${ctx.getText()} --> ${varElem["varValueType"]}`);
|
|
113
|
+
|
|
90
114
|
this.varDeclarationList.push(varElem);
|
|
91
115
|
|
|
92
116
|
return varElem;
|
|
@@ -125,9 +149,33 @@ class CollectionPolicyCustomVisitor extends CollectionPolicyVisitor {
|
|
|
125
149
|
visitState_definition(ctx) {
|
|
126
150
|
this.currentState = ctx.state_name().getText();
|
|
127
151
|
this.currentStateObj = {stateName: this.currentState, assignments: [], events: []};
|
|
152
|
+
if (ctx.service_state_section() != null) {
|
|
153
|
+
this.currentStateObj["serviceStateSection"] = this.visitService_state_section(ctx.service_state_section());
|
|
154
|
+
}
|
|
155
|
+
if (ctx.state_context_args_section() != null) {
|
|
156
|
+
this.currentStateObj["stateContextArgs"] = ctx.state_context_args_section().ID().map(i => i.getText());
|
|
157
|
+
}
|
|
128
158
|
this.stateMachine.push(this.currentStateObj);
|
|
129
159
|
|
|
130
|
-
|
|
160
|
+
let result = super.visitState_definition(ctx);
|
|
161
|
+
this.currentState = null;
|
|
162
|
+
this.currentStateObj = null;
|
|
163
|
+
return result;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
visitService_state_section(ctx) {
|
|
167
|
+
let serviceStateSection = {};
|
|
168
|
+
if (ctx.service_state() != null) {
|
|
169
|
+
serviceStateSection["serviceState"] = ctx.service_state().getText();
|
|
170
|
+
if (service_state_configs[this.serviceName].indexOf(serviceStateSection["serviceState"]) === -1) {
|
|
171
|
+
throw new Error(`该颜色态颜色不被允许 --- ${serviceStateSection["serviceState"]}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if (ctx.service_state_collection() != null) {
|
|
175
|
+
serviceStateSection["serviceStateCollection"] = ctx.service_state_collection().ID().map(i => i.getText());
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return serviceStateSection;
|
|
131
179
|
}
|
|
132
180
|
|
|
133
181
|
visitFsmVarAssignment(ctx) {
|
|
@@ -136,7 +184,7 @@ class CollectionPolicyCustomVisitor extends CollectionPolicyVisitor {
|
|
|
136
184
|
content: ctx.getText(),
|
|
137
185
|
varName: ctx.variable_assignment().ID().getText(),
|
|
138
186
|
varValue: ctx.variable_assignment().assignment_clause().getText(),
|
|
139
|
-
varValueObj:
|
|
187
|
+
varValueObj: this.visitAssignment_clause(ctx.variable_assignment().assignment_clause())
|
|
140
188
|
};
|
|
141
189
|
|
|
142
190
|
if (this.varDeclarationMap.has(assignmentElem.varName)) {
|
|
@@ -147,6 +195,17 @@ class CollectionPolicyCustomVisitor extends CollectionPolicyVisitor {
|
|
|
147
195
|
}) == null) {
|
|
148
196
|
throw new Error(`该局部变量未声明 --- ${assignmentElem.varName}`);
|
|
149
197
|
}
|
|
198
|
+
let varValueTypeList = [...this.varDeclarationList, ...this.currentStateObj["assignments"]];
|
|
199
|
+
assignmentElem["varValueType"] = this.expHelper.guessBaseTypeByExpType(assignmentElem["varValueObj"], this.generateVarValueTypeList(varValueTypeList));
|
|
200
|
+
console.debug(`| ${this.currentState} | ${ctx.getText()} --> ${assignmentElem["varValueType"]}`);
|
|
201
|
+
let varValueTypeListTmp = [...varValueTypeList].reverse();
|
|
202
|
+
let varValueTypeObj = varValueTypeListTmp.find(elem => {
|
|
203
|
+
return elem.varName === assignmentElem.varName;
|
|
204
|
+
});
|
|
205
|
+
if (assignmentElem["varValueType"] !== varValueTypeObj.varValueType) {
|
|
206
|
+
throw new Error(`类型验证不通过 >| ${ctx.getText()}`);
|
|
207
|
+
}
|
|
208
|
+
|
|
150
209
|
this.currentStateObj["assignments"].push(assignmentElem);
|
|
151
210
|
|
|
152
211
|
return assignmentElem;
|
|
@@ -158,7 +217,7 @@ class CollectionPolicyCustomVisitor extends CollectionPolicyVisitor {
|
|
|
158
217
|
content: ctx.getText(),
|
|
159
218
|
varName: ctx.local_variable_name().getText(),
|
|
160
219
|
varValue: ctx.assignment_clause().getText(),
|
|
161
|
-
varValueObj:
|
|
220
|
+
varValueObj: this.visitAssignment_clause(ctx.assignment_clause())
|
|
162
221
|
};
|
|
163
222
|
|
|
164
223
|
if (this.varDeclarationMap.has(assignmentElem.varName)) {
|
|
@@ -169,12 +228,19 @@ class CollectionPolicyCustomVisitor extends CollectionPolicyVisitor {
|
|
|
169
228
|
}) != null) {
|
|
170
229
|
throw new Error(`该局部变量已声明 --- ${assignmentElem.varName}`);
|
|
171
230
|
}
|
|
231
|
+
let varValueTypeList = [...this.varDeclarationList, ...this.currentStateObj["assignments"]];
|
|
232
|
+
assignmentElem["varValueType"] = this.expHelper.guessBaseTypeByExpType(assignmentElem["varValueObj"], this.generateVarValueTypeList(varValueTypeList));
|
|
233
|
+
|
|
234
|
+
console.debug(`| ${this.currentState} | ${ctx.getText()} --> ${assignmentElem["varValueType"]}`);
|
|
235
|
+
|
|
172
236
|
this.currentStateObj["assignments"].push(assignmentElem);
|
|
173
237
|
|
|
174
238
|
return assignmentElem;
|
|
175
239
|
}
|
|
176
240
|
|
|
177
241
|
visitEventNormal(ctx) {
|
|
242
|
+
console.debug(`>> ${ctx.event().getText()}`);
|
|
243
|
+
|
|
178
244
|
let builtInFunctionResult = this.visitBuilt_in_function(ctx.event().built_in_function());
|
|
179
245
|
|
|
180
246
|
this.currentEventElem = {
|
|
@@ -188,6 +254,16 @@ class CollectionPolicyCustomVisitor extends CollectionPolicyVisitor {
|
|
|
188
254
|
if (ctx.event().event_path() != null) {
|
|
189
255
|
this.currentEventElem["eventPath"] = ctx.event().event_path().getText();
|
|
190
256
|
}
|
|
257
|
+
if (ctx.state_context_args_section() != null) {
|
|
258
|
+
this.currentEventElem["stateContextArgs"] = ctx.state_context_args_section().ID().map(elem => {
|
|
259
|
+
let elemStr = elem.getText();
|
|
260
|
+
if (!this.varDeclarationMap.has(elemStr) && this.currentStateObj["assignments"].find(elem => elem.varName === elemStr) == null) {
|
|
261
|
+
throw new Error(`该环境参数未声明 --- ${elemStr}`);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
return elemStr;
|
|
265
|
+
});
|
|
266
|
+
}
|
|
191
267
|
if (ctx.action_section() != null) {
|
|
192
268
|
this.visitAction_section(ctx.action_section());
|
|
193
269
|
}
|
|
@@ -206,7 +282,7 @@ class CollectionPolicyCustomVisitor extends CollectionPolicyVisitor {
|
|
|
206
282
|
});
|
|
207
283
|
if (event_config != null) {
|
|
208
284
|
try {
|
|
209
|
-
if (!this.functionHelper.argsMatch(this.currentEventElem["eventParamList"], event_config["paramList"])) {
|
|
285
|
+
if (!this.functionHelper.argsMatch(this.currentEventElem["eventParamList"], event_config["paramList"], this.getVarDeclarationValueTypeList())) {
|
|
210
286
|
throw new Error(`参数列表错误 ----- ${ctx.event().getText()}`);
|
|
211
287
|
}
|
|
212
288
|
} catch (e) {
|
|
@@ -217,32 +293,36 @@ class CollectionPolicyCustomVisitor extends CollectionPolicyVisitor {
|
|
|
217
293
|
|
|
218
294
|
this.currentStateObj["events"].push(this.currentEventElem);
|
|
219
295
|
|
|
220
|
-
|
|
296
|
+
let result = this.currentEventElem;
|
|
297
|
+
this.currentEventElem = null;
|
|
298
|
+
return result;
|
|
221
299
|
}
|
|
222
300
|
|
|
223
301
|
visitEventTerminate(ctx) {
|
|
224
302
|
this.currentEventElem = {
|
|
225
|
-
type: "terminate",
|
|
226
|
-
content: ctx.getText(),
|
|
227
|
-
eventName: ctx.TERMINATE().getText()
|
|
303
|
+
type: "terminate", content: ctx.getText(), eventName: ctx.TERMINATE().getText()
|
|
228
304
|
};
|
|
229
305
|
|
|
230
306
|
this.currentStateObj["events"].push(this.currentEventElem);
|
|
231
307
|
|
|
232
|
-
|
|
308
|
+
let result = this.currentEventElem;
|
|
309
|
+
this.currentEventElem = null;
|
|
310
|
+
return result;
|
|
233
311
|
}
|
|
234
312
|
|
|
235
313
|
visitAction_section(ctx) {
|
|
314
|
+
this.parseState.inActionSection = 1;
|
|
315
|
+
|
|
236
316
|
this.currentEventElem["actions"] = [];
|
|
237
317
|
|
|
238
|
-
|
|
318
|
+
let result = super.visitAction_section(ctx);
|
|
319
|
+
this.parseState.inActionSection = 0;
|
|
320
|
+
return result;
|
|
239
321
|
}
|
|
240
322
|
|
|
241
323
|
visitFsmActionFunctionCall(ctx) {
|
|
242
324
|
let actionElem = {
|
|
243
|
-
type: "functionCall",
|
|
244
|
-
content: ctx.getText(),
|
|
245
|
-
actionObj: this.visitFunction_call(ctx.function_call())
|
|
325
|
+
type: "functionCall", content: ctx.getText(), actionObj: this.visitFunction_call(ctx.function_call())
|
|
246
326
|
};
|
|
247
327
|
|
|
248
328
|
this.currentEventElem["actions"].push(actionElem);
|
|
@@ -252,15 +332,34 @@ class CollectionPolicyCustomVisitor extends CollectionPolicyVisitor {
|
|
|
252
332
|
|
|
253
333
|
visitFsmActionVarAssignment(ctx) {
|
|
254
334
|
let actionElem = {
|
|
255
|
-
type: "varAssignment",
|
|
256
|
-
content: "ctx.getText()",
|
|
257
|
-
actionObj: {
|
|
258
|
-
varName: ctx.variable_assignment().ID().getText(),
|
|
259
|
-
varValue: ctx.variable_assignment().assignment_clause().getText(),
|
|
260
|
-
varValueObj: this.visitAssignment_clause(ctx.variable_assignment().assignment_clause())
|
|
261
|
-
}
|
|
335
|
+
type: "varAssignment", content: ctx.getText(),
|
|
262
336
|
};
|
|
337
|
+
let actionObj = {
|
|
338
|
+
varName: ctx.variable_assignment().ID().getText(),
|
|
339
|
+
varValue: ctx.variable_assignment().assignment_clause().getText(),
|
|
340
|
+
varValueObj: this.visitAssignment_clause(ctx.variable_assignment().assignment_clause())
|
|
341
|
+
};
|
|
342
|
+
|
|
343
|
+
if (this.varDeclarationMap.has(actionObj.varName)) {
|
|
344
|
+
throw new Error(`全局变量不可以被再次赋值 --- ${actionObj.varName}`);
|
|
345
|
+
}
|
|
346
|
+
if (this.currentStateObj["assignments"].find(elem => {
|
|
347
|
+
return elem.varName === actionObj.varName;
|
|
348
|
+
}) == null) {
|
|
349
|
+
throw new Error(`该局部变量未声明 --- ${actionObj.varName}`);
|
|
350
|
+
}
|
|
351
|
+
let varValueTypeList = [...this.varDeclarationList, ...this.currentStateObj["assignments"]];
|
|
352
|
+
actionObj["varValueType"] = this.expHelper.guessBaseTypeByExpType(actionObj["varValueObj"], this.generateVarValueTypeList(varValueTypeList));
|
|
353
|
+
console.debug(`actions -- ${ctx.getText()} --> ${actionObj["varValueType"]}`);
|
|
354
|
+
let varValueTypeListTmp = [...varValueTypeList].reverse();
|
|
355
|
+
let varValueTypeObj = varValueTypeListTmp.find(elem => {
|
|
356
|
+
return elem.varName === actionObj.varName;
|
|
357
|
+
});
|
|
358
|
+
if (actionObj["varValueType"] !== varValueTypeObj.varValueType) {
|
|
359
|
+
throw new Error(`类型验证不通过 >| ${ctx.getText()}`);
|
|
360
|
+
}
|
|
263
361
|
|
|
362
|
+
actionElem["actionObj"] = actionObj;
|
|
264
363
|
this.currentEventElem["actions"].push(actionElem);
|
|
265
364
|
|
|
266
365
|
return actionElem;
|
|
@@ -342,9 +441,7 @@ class CollectionPolicyCustomVisitor extends CollectionPolicyVisitor {
|
|
|
342
441
|
return this.visitAtom(ctx.atom());
|
|
343
442
|
} else if (ctx.signedSymbol != null) {
|
|
344
443
|
return {
|
|
345
|
-
expType: "expSigned",
|
|
346
|
-
var1: this.visitSigned_atom(ctx.signed_atom()),
|
|
347
|
-
symbol: ctx.signedSymbol.text
|
|
444
|
+
expType: "expSigned", var1: this.visitSigned_atom(ctx.signed_atom()), symbol: ctx.signedSymbol.text
|
|
348
445
|
};
|
|
349
446
|
} else {
|
|
350
447
|
return super.visitSigned_atom(ctx);
|
|
@@ -376,8 +473,7 @@ class CollectionPolicyCustomVisitor extends CollectionPolicyVisitor {
|
|
|
376
473
|
|
|
377
474
|
if (ctx.LPAREN() != null) {
|
|
378
475
|
return {
|
|
379
|
-
expType: "expBooleanParen",
|
|
380
|
-
var1: this.visitBoolean_expression(ctx.boolean_expression(0))
|
|
476
|
+
expType: "expBooleanParen", var1: this.visitBoolean_expression(ctx.boolean_expression(0))
|
|
381
477
|
};
|
|
382
478
|
}
|
|
383
479
|
|
|
@@ -523,8 +619,7 @@ class CollectionPolicyCustomVisitor extends CollectionPolicyVisitor {
|
|
|
523
619
|
|
|
524
620
|
visitArgs_group_expression(ctx) {
|
|
525
621
|
return {
|
|
526
|
-
expType: "expArgsGroup",
|
|
527
|
-
paramList: this.visitArgs_group_param_list(ctx.args_group_param_list())
|
|
622
|
+
expType: "expArgsGroup", paramList: this.visitArgs_group_param_list(ctx.args_group_param_list())
|
|
528
623
|
};
|
|
529
624
|
}
|
|
530
625
|
|
|
@@ -578,7 +673,8 @@ class CollectionPolicyCustomVisitor extends CollectionPolicyVisitor {
|
|
|
578
673
|
ctx.expression_param().forEach(expParam => {
|
|
579
674
|
let paramElem = {
|
|
580
675
|
paramValue: expParam.assignment_clause().getText(),
|
|
581
|
-
paramValueObj: this.visitAssignment_clause(expParam.assignment_clause())
|
|
676
|
+
paramValueObj: this.visitAssignment_clause(expParam.assignment_clause()),
|
|
677
|
+
content: expParam.getText()
|
|
582
678
|
};
|
|
583
679
|
if (expParam.expression_param_name() != null) {
|
|
584
680
|
paramElem["paramName"] = expParam.expression_param_name().getText();
|
|
@@ -590,27 +686,18 @@ class CollectionPolicyCustomVisitor extends CollectionPolicyVisitor {
|
|
|
590
686
|
}
|
|
591
687
|
|
|
592
688
|
visitFunction_call(ctx) {
|
|
689
|
+
console.debug(`>> ${ctx.getText()}`);
|
|
690
|
+
|
|
593
691
|
let result = this.visitBuilt_in_function(ctx.built_in_function());
|
|
594
692
|
result["expType"] = "functionCall";
|
|
595
693
|
if (ctx.variable_chain() != null) {
|
|
596
694
|
result["varChain"] = ctx.variable_chain().getText();
|
|
597
695
|
}
|
|
598
696
|
|
|
599
|
-
let function_config =
|
|
600
|
-
let suitable = true;
|
|
601
|
-
if (result["varChain"] != null) {
|
|
602
|
-
if (result["varChain"] !== fc["varChain"]) {
|
|
603
|
-
suitable = false;
|
|
604
|
-
}
|
|
605
|
-
}
|
|
606
|
-
if (result["funcName"] !== fc["funcName"]) {
|
|
607
|
-
suitable = false;
|
|
608
|
-
}
|
|
609
|
-
return suitable;
|
|
610
|
-
});
|
|
697
|
+
let function_config = this.functionHelper.findFunctionConfig(result["varChain"], result["funcName"]);
|
|
611
698
|
if (function_config != null) {
|
|
612
699
|
try {
|
|
613
|
-
if (!this.functionHelper.argsMatch(result["paramList"], function_config["paramList"])) {
|
|
700
|
+
if (!this.functionHelper.argsMatch(result["paramList"], function_config["paramList"], this.getVarDeclarationValueTypeList())) {
|
|
614
701
|
throw new Error(`参数列表错误 ----- ${ctx.getText()}`);
|
|
615
702
|
}
|
|
616
703
|
} catch (e) {
|
|
@@ -655,6 +742,9 @@ class CollectionPolicyCustomVisitor extends CollectionPolicyVisitor {
|
|
|
655
742
|
let content = ctx.getText();
|
|
656
743
|
|
|
657
744
|
if (ctx.variable().environment_event() != null) {
|
|
745
|
+
if (this.parseState.inActionSection === 0) {
|
|
746
|
+
throw new Error(`该变量不能出现在除事件动作区以外的任何位置 -- ${ctx.getText()}`);
|
|
747
|
+
}
|
|
658
748
|
varType = "event";
|
|
659
749
|
} else if (content === "policy" || content === "contract") {
|
|
660
750
|
varType = "context";
|
|
@@ -4,9 +4,13 @@ import { Calculator } from "../interface/Calculator";
|
|
|
4
4
|
import { AssignmentClauseInfo } from "../model/AssignmentClauseInfo";
|
|
5
5
|
import { FunctionHelperAware } from "../interface/FunctionHelperAware";
|
|
6
6
|
export declare class ExpHelper implements Calculator, FunctionHelperAware {
|
|
7
|
+
private functionHelper;
|
|
7
8
|
private calculatorFactory;
|
|
8
9
|
constructor();
|
|
9
10
|
getExpValue(varObj: AssignmentClauseInfo, varContextCapable: VarContextCapable<any>): any;
|
|
10
11
|
setFunctionHelper(functionHelper: FunctionHelper): void;
|
|
11
|
-
guessBaseTypeByExpType(exp: AssignmentClauseInfo
|
|
12
|
+
guessBaseTypeByExpType(exp: AssignmentClauseInfo, varValueTypeList: {
|
|
13
|
+
varName: string;
|
|
14
|
+
varValueType: string;
|
|
15
|
+
}[]): string;
|
|
12
16
|
}
|
package/dist/helper/ExpHelper.js
CHANGED
|
@@ -17,12 +17,13 @@ class ExpHelper {
|
|
|
17
17
|
throw new Error("getExpValue fail [ExpHelper]...");
|
|
18
18
|
}
|
|
19
19
|
setFunctionHelper(functionHelper) {
|
|
20
|
+
this.functionHelper = functionHelper;
|
|
20
21
|
this.calculatorFactory.setFunctionHelper(functionHelper);
|
|
21
22
|
}
|
|
22
23
|
/*
|
|
23
24
|
* 类型推断
|
|
24
25
|
*/
|
|
25
|
-
guessBaseTypeByExpType(exp) {
|
|
26
|
+
guessBaseTypeByExpType(exp, varValueTypeList) {
|
|
26
27
|
switch (exp.expType) {
|
|
27
28
|
case "entity":
|
|
28
29
|
return "entity";
|
|
@@ -30,17 +31,38 @@ class ExpHelper {
|
|
|
30
31
|
return "number";
|
|
31
32
|
case "expParen":
|
|
32
33
|
let expParen = exp;
|
|
33
|
-
return this.guessBaseTypeByExpType(expParen.var1);
|
|
34
|
+
return this.guessBaseTypeByExpType(expParen.var1, varValueTypeList);
|
|
34
35
|
case "expSigned":
|
|
35
36
|
return "number";
|
|
36
37
|
case "functionCall":
|
|
37
|
-
|
|
38
|
+
let functionCallInfo = exp;
|
|
39
|
+
let function_config = this.functionHelper.findFunctionConfig(functionCallInfo.varChain, functionCallInfo.funcName);
|
|
40
|
+
if (function_config != null) {
|
|
41
|
+
return function_config["returnType"];
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
return "any";
|
|
45
|
+
}
|
|
38
46
|
case "number":
|
|
39
47
|
return "number";
|
|
40
48
|
case "string":
|
|
41
49
|
return "string";
|
|
42
50
|
case "variableChain":
|
|
43
|
-
|
|
51
|
+
if (varValueTypeList != null) {
|
|
52
|
+
let variableChainInfo = exp;
|
|
53
|
+
let vvtTemp = varValueTypeList.find(vvt => {
|
|
54
|
+
return variableChainInfo.content == vvt["varName"];
|
|
55
|
+
});
|
|
56
|
+
if (vvtTemp != null) {
|
|
57
|
+
return vvtTemp["varValueType"];
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
return "any";
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
return "any";
|
|
65
|
+
}
|
|
44
66
|
case "expArgsGroup":
|
|
45
67
|
return "argsGroup";
|
|
46
68
|
case "boolean":
|
|
@@ -62,4 +84,4 @@ class ExpHelper {
|
|
|
62
84
|
}
|
|
63
85
|
}
|
|
64
86
|
exports.ExpHelper = ExpHelper;
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwSGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hlbHBlci9FeHBIZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0EscUZBQWdGO0FBTWhGLE1BQWEsU0FBUztJQU1sQjtRQUNJLElBQUksY0FBYyxHQUFHLElBQUksbURBQXdCLEVBQUUsQ0FBQztRQUNwRCxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUE0QixFQUFFLGlCQUF5QztRQUMvRSxPQUFPLENBQUMsS0FBSyxDQUFDLDBCQUEwQixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVsRSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9FLElBQUksVUFBVSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3JCLE9BQU8sVUFBVSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxjQUE4QjtRQUM1QyxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUNyQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsc0JBQXNCLENBQUMsR0FBeUIsRUFDekIsZ0JBQTZEO1FBQ2hGLFFBQVEsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLEtBQUssUUFBUTtnQkFDVCxPQUFPLFFBQVEsQ0FBQztZQUNwQixLQUFLLE9BQU87Z0JBQ1IsT0FBTyxRQUFRLENBQUM7WUFDcEIsS0FBSyxVQUFVO2dCQUNYLElBQUksUUFBUSxHQUFhLEdBQWUsQ0FBQztnQkFDekMsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3hFLEtBQUssV0FBVztnQkFDWixPQUFPLFFBQVEsQ0FBQztZQUNwQixLQUFLLGNBQWM7Z0JBQ2YsSUFBSSxnQkFBZ0IsR0FBcUIsR0FBdUIsQ0FBQztnQkFDakUsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ25ILElBQUksZUFBZSxJQUFJLElBQUksRUFBRSxDQUFDO29CQUMxQixPQUFPLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDekMsQ0FBQztxQkFBTSxDQUFDO29CQUNKLE9BQU8sS0FBSyxDQUFDO2dCQUNqQixDQUFDO1lBQ0wsS0FBSyxRQUFRO2dCQUNULE9BQU8sUUFBUSxDQUFDO1lBQ3BCLEtBQUssUUFBUTtnQkFDVCxPQUFPLFFBQVEsQ0FBQztZQUNwQixLQUFLLGVBQWU7Z0JBQ2hCLElBQUksZ0JBQWdCLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQzNCLElBQUksaUJBQWlCLEdBQXNCLEdBQXdCLENBQUM7b0JBQ3BFLElBQUksT0FBTyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTt3QkFDdEMsT0FBTyxpQkFBaUIsQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUN2RCxDQUFDLENBQUMsQ0FBQztvQkFDSCxJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQzt3QkFDbEIsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBQ25DLENBQUM7eUJBQU0sQ0FBQzt3QkFDSixPQUFPLEtBQUssQ0FBQztvQkFDakIsQ0FBQztnQkFDTCxDQUFDO3FCQUFNLENBQUM7b0JBQ0osT0FBTyxLQUFLLENBQUM7Z0JBQ2pCLENBQUM7WUFDTCxLQUFLLGNBQWM7Z0JBQ2YsT0FBTyxXQUFXLENBQUM7WUFDdkIsS0FBSSxTQUFTO2dCQUNULE9BQU8sU0FBUyxDQUFDO1lBQ3JCLEtBQUssd0JBQXdCO2dCQUN6QixPQUFPLFNBQVMsQ0FBQztZQUNyQixLQUFLLHFCQUFxQjtnQkFDdEIsT0FBTyxTQUFTLENBQUM7WUFDckIsS0FBSyxtQkFBbUI7Z0JBQ3BCLE9BQU8sU0FBUyxDQUFDO1lBQ3JCLEtBQUssaUJBQWlCO2dCQUNsQixPQUFPLFNBQVMsQ0FBQztZQUVyQixLQUFLLGVBQWU7Z0JBQ2hCLE9BQU8sT0FBTyxDQUFDO1lBRW5CLEtBQUssY0FBYztnQkFDZixPQUFPLE9BQU8sQ0FBQztRQUN2QixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztDQUNKO0FBM0ZELDhCQTJGQyJ9
|
|
@@ -17,9 +17,14 @@ export declare class FunctionHelper implements FunctionInvoke, ExpHelperAware {
|
|
|
17
17
|
addExecutor(executorName: "Query" | "Kit" | "Time" | "fun" | "api", functionName: string, executor: FunctionInvoke): void;
|
|
18
18
|
setExpHelper(expHelper: ExpHelper): void;
|
|
19
19
|
argsMatch(paramList: {
|
|
20
|
+
paramValue: string;
|
|
20
21
|
paramValueObj: AssignmentClauseInfo;
|
|
21
22
|
}[], paramConfigList: {
|
|
22
23
|
name: string;
|
|
23
24
|
type: string;
|
|
25
|
+
}[], varValueTypeList: {
|
|
26
|
+
varName: string;
|
|
27
|
+
varValueType: string;
|
|
24
28
|
}[]): boolean;
|
|
29
|
+
findFunctionConfig(varChain: string, funcName: string): any;
|
|
25
30
|
}
|
|
@@ -6,6 +6,7 @@ const KitFunctionExecutor_1 = require("../function-executor/KitFunctionExecutor"
|
|
|
6
6
|
const TimeFunctionExecutor_1 = require("../function-executor/TimeFunctionExecutor");
|
|
7
7
|
const FunFunctionExecutor_1 = require("../function-executor/FunFunctionExecutor");
|
|
8
8
|
const ApiFunctionExecutor_1 = require("../function-executor/ApiFunctionExecutor");
|
|
9
|
+
const function_configs = require("../../resources/context_config/function_configs.json");
|
|
9
10
|
class FunctionHelper {
|
|
10
11
|
constructor() {
|
|
11
12
|
this.funcExecutors = new Map();
|
|
@@ -73,20 +74,35 @@ class FunctionHelper {
|
|
|
73
74
|
/*
|
|
74
75
|
* 参数校验
|
|
75
76
|
*/
|
|
76
|
-
argsMatch(paramList, paramConfigList) {
|
|
77
|
+
argsMatch(paramList, paramConfigList, varValueTypeList) {
|
|
77
78
|
if (paramList.length != paramConfigList.length) {
|
|
78
79
|
return false;
|
|
79
80
|
}
|
|
80
81
|
for (let i = 0; i < paramList.length; i++) {
|
|
81
82
|
let param = paramList[i];
|
|
82
83
|
let paramConfig = paramConfigList[i];
|
|
83
|
-
let paramType = this.expHelper.guessBaseTypeByExpType(param.paramValueObj);
|
|
84
|
+
let paramType = this.expHelper.guessBaseTypeByExpType(param.paramValueObj, varValueTypeList);
|
|
85
|
+
console.debug(`args -- ${param.paramValue} --> ${paramType}`);
|
|
84
86
|
if (paramType != "any" && paramConfig.type != "any" && paramType != paramConfig.type) {
|
|
85
87
|
return false;
|
|
86
88
|
}
|
|
87
89
|
}
|
|
88
90
|
return true;
|
|
89
91
|
}
|
|
92
|
+
findFunctionConfig(varChain, funcName) {
|
|
93
|
+
return function_configs.find(fc => {
|
|
94
|
+
let suitable = true;
|
|
95
|
+
if (varChain != null) {
|
|
96
|
+
if (varChain !== fc["varChain"]) {
|
|
97
|
+
suitable = false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (funcName !== fc["funcName"]) {
|
|
101
|
+
suitable = false;
|
|
102
|
+
}
|
|
103
|
+
return suitable;
|
|
104
|
+
});
|
|
105
|
+
}
|
|
90
106
|
}
|
|
91
107
|
exports.FunctionHelper = FunctionHelper;
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnVuY3Rpb25IZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaGVscGVyL0Z1bmN0aW9uSGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHNGQUFpRjtBQUNqRixrRkFBNkU7QUFDN0Usb0ZBQStFO0FBQy9FLGtGQUE2RTtBQUM3RSxrRkFBNkU7QUFLN0UsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsc0RBQXNELENBQUMsQ0FBQztBQUV6RixNQUFhLGNBQWM7SUFRdkI7UUFKUSxrQkFBYSxHQUFHLElBQUksR0FBRyxFQUFtQyxDQUFDO1FBSy9ELElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLDZDQUFxQixFQUFFLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSx5Q0FBbUIsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksMkNBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLHlDQUFtQixFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSx5Q0FBbUIsRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUFjO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxZQUFZLENBQUMsWUFBb0I7UUFDN0IsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3pELE9B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
|
|
@@ -12,13 +12,18 @@ export declare class PolicyHelper implements VarContextCapable<any>, Calculator,
|
|
|
12
12
|
protected varMacroList: any;
|
|
13
13
|
protected expHelper: ExpHelper;
|
|
14
14
|
protected functionHelper: FunctionHelper;
|
|
15
|
+
private audienceInfo;
|
|
15
16
|
constructor(policyInfo: PolicyInfo);
|
|
16
17
|
init(varContextCapable: VarContextCapable<any>): void;
|
|
17
18
|
setVarGlobal(varName: string, varValue: any): void;
|
|
18
|
-
setVarGlobalList(varGlobalList: []): void;
|
|
19
|
+
setVarGlobalList(varGlobalList: any[]): void;
|
|
19
20
|
getVarGlobal(varName: string): any;
|
|
20
21
|
getVarGlobalList(): any[];
|
|
21
22
|
getVarMacro(varName: string): any;
|
|
23
|
+
getPolicyInfoResult(): {
|
|
24
|
+
varGlobalList: any;
|
|
25
|
+
audienceInfo: any;
|
|
26
|
+
};
|
|
22
27
|
getVarContext(varName: string): any;
|
|
23
28
|
getExpValue(varObj: AssignmentClauseInfo, varContextCapable: VarContextCapable<any>): any;
|
|
24
29
|
invokeEnable(functionName: string): boolean;
|
|
@@ -13,6 +13,7 @@ class PolicyHelper {
|
|
|
13
13
|
this.functionHelper = new FunctionHelper_1.FunctionHelper();
|
|
14
14
|
this.expHelper.setFunctionHelper(this.functionHelper);
|
|
15
15
|
this.functionHelper.setExpHelper(this.expHelper);
|
|
16
|
+
this.audienceInfo = {};
|
|
16
17
|
}
|
|
17
18
|
// 在合约签约的时候,可签约条件和全局申明的变量是已经计算完毕的,在这里做这件事
|
|
18
19
|
init(varContextCapable) {
|
|
@@ -32,6 +33,11 @@ class PolicyHelper {
|
|
|
32
33
|
});
|
|
33
34
|
}
|
|
34
35
|
}
|
|
36
|
+
this.audienceInfo["audiences"] = this.policyInfo.audienceSection.audiences;
|
|
37
|
+
this.audienceInfo["condition"] = {};
|
|
38
|
+
for (let c of this.policyInfo.audienceSection.conditions) {
|
|
39
|
+
this.audienceInfo["condition"][c.paramName] = this.getExpValue(c.paramValueObj, varContextCapable);
|
|
40
|
+
}
|
|
35
41
|
for (let varDeclaration of varDeclarationList) {
|
|
36
42
|
if (varDeclaration.type == "varGlobal") {
|
|
37
43
|
if (this.getVarGlobal(varDeclaration.varName) == null) {
|
|
@@ -62,6 +68,12 @@ class PolicyHelper {
|
|
|
62
68
|
return elem.varName == varName;
|
|
63
69
|
});
|
|
64
70
|
}
|
|
71
|
+
getPolicyInfoResult() {
|
|
72
|
+
return {
|
|
73
|
+
varGlobalList: this.varGlobalList,
|
|
74
|
+
audienceInfo: this.audienceInfo
|
|
75
|
+
};
|
|
76
|
+
}
|
|
65
77
|
getVarContext(varName) {
|
|
66
78
|
let result = this.getVarGlobal(varName);
|
|
67
79
|
if (result != null) {
|
|
@@ -93,4 +105,4 @@ class PolicyHelper {
|
|
|
93
105
|
}
|
|
94
106
|
}
|
|
95
107
|
exports.PolicyHelper = PolicyHelper;
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9saWN5SGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hlbHBlci9Qb2xpY3lIZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsMkNBQXNDO0FBRXRDLHFEQUFnRDtBQU1oRCxNQUFhLFlBQVk7SUFnQnJCLFlBQVksVUFBc0I7UUFWMUIsaUJBQVksR0FBRyxJQUFJLEdBQUcsRUFBOEIsQ0FBQztRQVd6RCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUkscUJBQVMsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSwrQkFBYyxFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWpELElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsSUFBSSxDQUFDLGlCQUF5QztRQUMxQyxJQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUM7UUFDNUQsS0FBSyxJQUFJLGNBQWMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQzVDLElBQUksY0FBYyxDQUFDLElBQUksSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztZQUNsRSxDQUFDO1lBQ0QsSUFBSSxjQUFjLENBQUMsSUFBSSxJQUFJLFVBQVUsRUFBRSxD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
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AssignmentClauseInfo } from "../AssignmentClauseInfo";
|
|
2
|
+
import { ActionInfo } from "./ActionInfo";
|
|
2
3
|
export interface EventInfo {
|
|
3
4
|
type: "normal" | "terminate";
|
|
4
5
|
content: string;
|
|
@@ -11,4 +12,7 @@ export interface EventInfo {
|
|
|
11
12
|
paramValueObj: AssignmentClauseInfo;
|
|
12
13
|
}
|
|
13
14
|
];
|
|
15
|
+
toState: string;
|
|
16
|
+
stateContextArgs?: string[];
|
|
17
|
+
actions: ActionInfo[];
|
|
14
18
|
}
|
|
@@ -9,6 +9,7 @@ export interface PolicyInfo {
|
|
|
9
9
|
paramName?: string;
|
|
10
10
|
paramValue: string;
|
|
11
11
|
paramValueObj: AssignmentClauseInfo;
|
|
12
|
+
content: string;
|
|
12
13
|
}
|
|
13
14
|
];
|
|
14
15
|
};
|
|
@@ -18,6 +19,11 @@ export interface PolicyInfo {
|
|
|
18
19
|
stateName: string;
|
|
19
20
|
assignments: VarDeclarationInfo[];
|
|
20
21
|
events: EventInfo[];
|
|
22
|
+
serviceStateSection?: {
|
|
23
|
+
serviceState?: string;
|
|
24
|
+
serviceStateCollection?: string[];
|
|
25
|
+
};
|
|
26
|
+
stateContextArgs?: string[];
|
|
21
27
|
}
|
|
22
28
|
];
|
|
23
29
|
}
|