@freelog/freelog-cg-collection 1.2.13 → 1.2.14
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/dist/resources/context_config/event_configs.json +126 -0
- package/dist/src/calculator/CalculatorFactory.d.ts +17 -0
- package/dist/src/calculator/CalculatorFactory.js +40 -0
- package/dist/src/calculator/CalculatorFactoryBuilder.d.ts +4 -0
- package/dist/src/calculator/CalculatorFactoryBuilder.js +13 -0
- package/dist/src/calculator/ExpArgsGroupCalculator.d.ts +12 -0
- package/dist/src/calculator/ExpArgsGroupCalculator.js +25 -0
- package/dist/src/calculator/ExpBooleanCalculator.d.ts +13 -0
- package/dist/src/calculator/ExpBooleanCalculator.js +81 -0
- package/dist/src/calculator/ExpCalculator.d.ts +17 -0
- package/dist/src/calculator/ExpCalculator.js +56 -0
- package/dist/src/calculator/ExpCollectionCalculator.d.ts +0 -0
- package/dist/src/calculator/ExpCollectionCalculator.js +1 -0
- package/dist/src/calculator/ExpConditionCalculator.d.ts +12 -0
- package/dist/src/calculator/ExpConditionCalculator.js +34 -0
- package/dist/src/contract-declaration-executor/DefaultContractDeclarationExecutor.d.ts +8 -0
- package/dist/src/contract-declaration-executor/DefaultContractDeclarationExecutor.js +13 -0
- package/dist/src/contract-declaration-executor/DynamicContractDeclarationExecutor.d.ts +7 -0
- package/dist/src/contract-declaration-executor/DynamicContractDeclarationExecutor.js +21 -0
- package/dist/src/contract-declaration-executor/USEContractDeclaration.d.ts +4 -0
- package/dist/src/contract-declaration-executor/USEContractDeclaration.js +23 -0
- package/dist/src/function-executor/ApiFunctionExecutor.d.ts +11 -0
- package/dist/src/function-executor/ApiFunctionExecutor.js +17 -0
- package/dist/src/function-executor/DefaultFunctionExecutor.d.ts +11 -0
- package/dist/src/function-executor/DefaultFunctionExecutor.js +19 -0
- package/dist/src/function-executor/DynamicFunctionExecutor.d.ts +13 -0
- package/dist/src/function-executor/DynamicFunctionExecutor.js +58 -0
- package/dist/src/function-executor/FunFunctionExecutor.d.ts +15 -0
- package/dist/src/function-executor/FunFunctionExecutor.js +48 -0
- package/dist/src/function-executor/KitFunctionExecutor.d.ts +9 -0
- package/dist/src/function-executor/KitFunctionExecutor.js +32 -0
- package/dist/src/function-executor/QueryFunctionExecutor.d.ts +40 -0
- package/dist/src/function-executor/QueryFunctionExecutor.js +42 -0
- package/dist/src/function-executor/TimeFunctionExecutor.d.ts +8 -0
- package/dist/src/function-executor/TimeFunctionExecutor.js +51 -0
- package/dist/src/helper/ContractDeclarationHelper.d.ts +7 -0
- package/dist/src/helper/ContractDeclarationHelper.js +28 -0
- package/dist/src/helper/ExpHelper.d.ts +16 -0
- package/dist/src/helper/ExpHelper.js +86 -0
- package/dist/src/helper/FunctionHelper.d.ts +41 -0
- package/dist/src/helper/FunctionHelper.js +161 -0
- package/dist/src/helper/GetPostHelper.d.ts +5 -0
- package/dist/src/helper/GetPostHelper.js +13 -0
- package/dist/src/helper/PolicyHelper.d.ts +102 -0
- package/dist/src/helper/PolicyHelper.js +519 -0
- package/dist/src/interface/Calculator.d.ts +5 -0
- package/dist/src/interface/Calculator.js +3 -0
- package/dist/src/interface/ConstantForApi.d.ts +12 -0
- package/dist/src/interface/ConstantForApi.js +17 -0
- package/dist/src/interface/ContractDeclarationExecute.d.ts +3 -0
- package/dist/src/interface/ContractDeclarationExecute.js +3 -0
- package/dist/src/interface/ExpHelperAware.d.ts +4 -0
- package/dist/src/interface/ExpHelperAware.js +3 -0
- package/dist/src/interface/FunctionHelperAware.d.ts +4 -0
- package/dist/src/interface/FunctionHelperAware.js +3 -0
- package/dist/src/interface/FunctionInvoke.d.ts +4 -0
- package/dist/src/interface/FunctionInvoke.js +3 -0
- package/dist/src/interface/GetPostInvoke.d.ts +4 -0
- package/dist/src/interface/GetPostInvoke.js +3 -0
- package/dist/src/interface/OutsideApiServiceAware.d.ts +4 -0
- package/dist/src/interface/OutsideApiServiceAware.js +3 -0
- package/dist/src/interface/VarContextCapable.d.ts +3 -0
- package/dist/src/interface/VarContextCapable.js +3 -0
- package/dist/src/model/AssignmentClauseInfo.d.ts +3 -0
- package/dist/src/model/AssignmentClauseInfo.js +3 -0
- package/dist/src/model/contract-declaration/VarContractDeclarationInfo.d.ts +17 -0
- package/dist/src/model/contract-declaration/VarContractDeclarationInfo.js +3 -0
- package/dist/src/model/exp/EntityInfo.d.ts +6 -0
- package/dist/src/model/exp/EntityInfo.js +3 -0
- package/dist/src/model/exp/Exp.d.ts +3 -0
- package/dist/src/model/exp/Exp.js +3 -0
- package/dist/src/model/exp/ExpAtom.d.ts +3 -0
- package/dist/src/model/exp/ExpAtom.js +3 -0
- package/dist/src/model/exp/ExpOp.d.ts +7 -0
- package/dist/src/model/exp/ExpOp.js +3 -0
- package/dist/src/model/exp/ExpParen.d.ts +5 -0
- package/dist/src/model/exp/ExpParen.js +3 -0
- package/dist/src/model/exp/ExpSigned.d.ts +6 -0
- package/dist/src/model/exp/ExpSigned.js +3 -0
- package/dist/src/model/exp/FunctionCallInfo.d.ts +12 -0
- package/dist/src/model/exp/FunctionCallInfo.js +3 -0
- package/dist/src/model/exp/NumberInfo.d.ts +5 -0
- package/dist/src/model/exp/NumberInfo.js +3 -0
- package/dist/src/model/exp/StringInfo.d.ts +5 -0
- package/dist/src/model/exp/StringInfo.js +3 -0
- package/dist/src/model/exp/VariableChainInfo.d.ts +6 -0
- package/dist/src/model/exp/VariableChainInfo.js +3 -0
- package/dist/src/model/exp-args-group/ExpArgsGroup.d.ts +9 -0
- package/dist/src/model/exp-args-group/ExpArgsGroup.js +3 -0
- package/dist/src/model/exp-boolean/BooleanInfo.d.ts +5 -0
- package/dist/src/model/exp-boolean/BooleanInfo.js +3 -0
- package/dist/src/model/exp-boolean/ExpBoolean.d.ts +3 -0
- package/dist/src/model/exp-boolean/ExpBoolean.js +3 -0
- package/dist/src/model/exp-boolean/ExpBooleanAtom.d.ts +3 -0
- package/dist/src/model/exp-boolean/ExpBooleanAtom.js +3 -0
- package/dist/src/model/exp-boolean/ExpBooleanOpCollection.d.ts +7 -0
- package/dist/src/model/exp-boolean/ExpBooleanOpCollection.js +3 -0
- package/dist/src/model/exp-boolean/ExpBooleanOpCompare.d.ts +7 -0
- package/dist/src/model/exp-boolean/ExpBooleanOpCompare.js +3 -0
- package/dist/src/model/exp-boolean/ExpBooleanOpLogic.d.ts +7 -0
- package/dist/src/model/exp-boolean/ExpBooleanOpLogic.js +3 -0
- package/dist/src/model/exp-boolean/ExpBooleanParen.d.ts +5 -0
- package/dist/src/model/exp-boolean/ExpBooleanParen.js +3 -0
- package/dist/src/model/exp-collection/ExpCollection.d.ts +9 -0
- package/dist/src/model/exp-collection/ExpCollection.js +3 -0
- package/dist/src/model/exp-condition/ExpCondition.d.ts +11 -0
- package/dist/src/model/exp-condition/ExpCondition.js +3 -0
- package/dist/src/model/policy/ActionInfo.d.ts +20 -0
- package/dist/src/model/policy/ActionInfo.js +3 -0
- package/dist/src/model/policy/ContractDeclarationInfo.d.ts +7 -0
- package/dist/src/model/policy/ContractDeclarationInfo.js +7 -0
- package/dist/src/model/policy/EventInfo.d.ts +27 -0
- package/dist/src/model/policy/EventInfo.js +3 -0
- package/dist/src/model/policy/PolicyInfo.d.ts +32 -0
- package/dist/src/model/policy/PolicyInfo.js +3 -0
- package/dist/src/model/policy/VarDeclarationInfo.d.ts +10 -0
- package/dist/src/model/policy/VarDeclarationInfo.js +3 -0
- package/dist/src/service/OutsideApiService.d.ts +58 -0
- package/dist/src/service/OutsideApiService.js +62 -0
- package/dist/src/state-machine/ContractFsmHook.d.ts +17 -0
- package/dist/src/state-machine/ContractFsmHook.js +33 -0
- package/dist/src/state-machine/ContractStateMachine.d.ts +51 -0
- package/dist/src/state-machine/ContractStateMachine.js +190 -0
- package/dist/src/tools/PolicyDecompiler.d.ts +26 -0
- package/dist/src/tools/PolicyDecompiler.js +298 -0
- package/dist/src/tools/PolicyMapper.d.ts +3 -0
- package/dist/src/tools/PolicyMapper.js +83 -0
- package/package.json +1 -1
- package/src/tools/PolicyMapper.ts +1 -2
- package/test/library/MomentTest.test.ts +12 -0
- package/tsconfig.json +2 -0
|
@@ -0,0 +1,519 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PolicyInfoResult = exports.PolicyHelper = void 0;
|
|
4
|
+
const ExpHelper_1 = require("./ExpHelper");
|
|
5
|
+
const FunctionHelper_1 = require("./FunctionHelper");
|
|
6
|
+
const ContractDeclarationHelper_1 = require("./ContractDeclarationHelper");
|
|
7
|
+
const OutsideApiService_1 = require("../service/OutsideApiService");
|
|
8
|
+
const lodash = require('lodash');
|
|
9
|
+
class PolicyHelper {
|
|
10
|
+
constructor(policyInfo) {
|
|
11
|
+
this.audienceInfo = {};
|
|
12
|
+
this.varContractDeclarationMap = new Map();
|
|
13
|
+
// 合约声明变量
|
|
14
|
+
this.varContractDeclarationList = [];
|
|
15
|
+
this.varGlobalMap = new Map();
|
|
16
|
+
// 全局变量
|
|
17
|
+
this.varGlobalList = [];
|
|
18
|
+
// 宏
|
|
19
|
+
this.varMacroList = [];
|
|
20
|
+
/*
|
|
21
|
+
* 当前状态下的信息
|
|
22
|
+
*/
|
|
23
|
+
this.currentStateInfo = {
|
|
24
|
+
currentState: PolicyHelper.noneState,
|
|
25
|
+
currentServiceState: "",
|
|
26
|
+
varLocalAtStateList: [],
|
|
27
|
+
varLocalCurrentStateList: [],
|
|
28
|
+
currentEventInfos: []
|
|
29
|
+
};
|
|
30
|
+
this.currentStateInfoTransient = {
|
|
31
|
+
varLocalCurrentEventList: [],
|
|
32
|
+
varToStateList: []
|
|
33
|
+
};
|
|
34
|
+
this.policyInfo = policyInfo;
|
|
35
|
+
this.outsideApiService = new OutsideApiService_1.OutsideApiService();
|
|
36
|
+
this.contractDeclarationHelper = new ContractDeclarationHelper_1.ContractDeclarationHelper();
|
|
37
|
+
this.contractDeclarationHelper.setOutsideApiService(this.outsideApiService);
|
|
38
|
+
this.expHelper = new ExpHelper_1.ExpHelper();
|
|
39
|
+
this.functionHelper = new FunctionHelper_1.FunctionHelper();
|
|
40
|
+
this.expHelper.setFunctionHelper(this.functionHelper);
|
|
41
|
+
this.functionHelper.setExpHelper(this.expHelper);
|
|
42
|
+
this.functionHelper.setOutsideApiService(this.outsideApiService);
|
|
43
|
+
this.functionHelper.setVarContextProxy(this);
|
|
44
|
+
}
|
|
45
|
+
// 在合约签约的时候,可签约条件和全局申明的变量是已经计算完毕的,在这里做这件事
|
|
46
|
+
async init(varContextCapable, options) {
|
|
47
|
+
this.audienceInfo["audiences"] = this.policyInfo.audienceSection.audiences;
|
|
48
|
+
await this.buildSymbolTable();
|
|
49
|
+
await this.checkConditions(varContextCapable, options);
|
|
50
|
+
await this.doInit(varContextCapable);
|
|
51
|
+
}
|
|
52
|
+
/*
|
|
53
|
+
* 建立符号表
|
|
54
|
+
*/
|
|
55
|
+
async buildSymbolTable() {
|
|
56
|
+
let contractDeclarations = this.policyInfo["contractDeclarationSection"]["contractDeclarations"];
|
|
57
|
+
for (let contractDeclaration of contractDeclarations) {
|
|
58
|
+
if (contractDeclaration["varValueObj"] != null && contractDeclaration["varValueObj"]["expType"] == "varContractDeclaration") {
|
|
59
|
+
this.varContractDeclarationMap.set(contractDeclaration["varValueObj"]["varName"], contractDeclaration["varValueObj"]);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
let varDeclarationList = this.policyInfo.varDeclarationList;
|
|
63
|
+
for (let varDeclaration of varDeclarationList) {
|
|
64
|
+
if (varDeclaration.type == "varGlobal") {
|
|
65
|
+
this.varGlobalMap.set(varDeclaration.varName, varDeclaration);
|
|
66
|
+
}
|
|
67
|
+
if (varDeclaration.type == "varMacro") {
|
|
68
|
+
this.varMacroList.push({ varName: varDeclaration.varName, varValueObj: varDeclaration.varValueObj });
|
|
69
|
+
}
|
|
70
|
+
if (varDeclaration.type == "expCustom") {
|
|
71
|
+
this.functionHelper.setExpCustom({
|
|
72
|
+
varName: varDeclaration.varName,
|
|
73
|
+
paramList: varDeclaration.paramList,
|
|
74
|
+
varValueObj: varDeclaration.varValueObj
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/*
|
|
80
|
+
* 签约条件验证,这里可能有部分初始化动作
|
|
81
|
+
* this.audienceInfo["condition"]
|
|
82
|
+
*/
|
|
83
|
+
async checkConditions(varContextCapable, options) {
|
|
84
|
+
this.audienceInfo["condition"] = {};
|
|
85
|
+
// 格式校验
|
|
86
|
+
for (let c of this.policyInfo.audienceSection.conditions) {
|
|
87
|
+
let ev = await this.getExpValue(c.paramValueObj, varContextCapable);
|
|
88
|
+
// ${echoSubject} => entity
|
|
89
|
+
if (c.paramName == "echoSubject" && ev["expType"] != "entity") {
|
|
90
|
+
throw new Error(`【echoSubject】类型错误!`);
|
|
91
|
+
}
|
|
92
|
+
// ${echoPolicyId} => string
|
|
93
|
+
if (c.paramName == "echoPolicyId" && typeof ev != "string") {
|
|
94
|
+
throw new Error(`【echoPolicyId】类型错误!`);
|
|
95
|
+
}
|
|
96
|
+
// ${labels} => string[]
|
|
97
|
+
if (c.paramName == "labels") {
|
|
98
|
+
if (!Array.isArray(ev)) {
|
|
99
|
+
throw new Error(`【labels】类型错误!`);
|
|
100
|
+
}
|
|
101
|
+
if (ev.find(elem => typeof elem != "string") != null) {
|
|
102
|
+
throw new Error(`【labels】元素错误!`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// ${exps} => boolean[]
|
|
106
|
+
if (c.paramName == "exps") {
|
|
107
|
+
if (!Array.isArray(ev)) {
|
|
108
|
+
throw new Error(`【exps】类型错误!`);
|
|
109
|
+
}
|
|
110
|
+
if (ev.find(elem => [true, false].indexOf(elem) == -1) != null) {
|
|
111
|
+
throw new Error(`【exps】元素错误!`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
this.audienceInfo["condition"][c.paramName] = ev;
|
|
115
|
+
}
|
|
116
|
+
if (options.isCheckConditions) {
|
|
117
|
+
// 值校验
|
|
118
|
+
if (this.audienceInfo["condition"]["exps"] != null) {
|
|
119
|
+
if (this.audienceInfo["condition"]["exps"].indexOf(false) != -1) {
|
|
120
|
+
throw new Error(`【exps】验证失败!`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (this.audienceInfo["condition"]["echoSubject"] != null && this.audienceInfo["condition"]["labels"] != null) {
|
|
124
|
+
let echoSubject = this.audienceInfo["condition"]["echoSubject"];
|
|
125
|
+
let contractLicensee = await this.getVarContext("contract.licensee");
|
|
126
|
+
let labels = await this.invoke("Query.EchoService.Labels", [{
|
|
127
|
+
subject: echoSubject,
|
|
128
|
+
licensee: contractLicensee
|
|
129
|
+
}]);
|
|
130
|
+
if (labels.filter(label => this.audienceInfo["condition"]["labels"].indexOf(label) != -1).length != this.audienceInfo["condition"]["labels"].length) {
|
|
131
|
+
throw new Error(`【echoSubject】【labels】验证失败!`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/*
|
|
137
|
+
* 真正的初始化
|
|
138
|
+
*/
|
|
139
|
+
async doInit(varContextCapable) {
|
|
140
|
+
let contractDeclarations = this.policyInfo["contractDeclarationSection"]["contractDeclarations"];
|
|
141
|
+
for (let contractDeclaration of contractDeclarations) {
|
|
142
|
+
if (contractDeclaration["varValueObj"] != null && contractDeclaration["varValueObj"]["expType"] == "varContractDeclaration") {
|
|
143
|
+
if (contractDeclaration["varValueObj"]["keyword"] == "USE") {
|
|
144
|
+
let value = await this.getVarObjValue(contractDeclaration["varValueObj"], varContextCapable);
|
|
145
|
+
this.setVarContractDeclaration(contractDeclaration["varValueObj"]["varName"], value);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
let varDeclarationList = this.policyInfo.varDeclarationList;
|
|
150
|
+
for (let varDeclaration of varDeclarationList) {
|
|
151
|
+
if (varDeclaration.type == "varGlobal") {
|
|
152
|
+
if (this.getVarGlobal(varDeclaration.varName) == null) {
|
|
153
|
+
let value = await this.getExpValue(varDeclaration.varValueObj, varContextCapable);
|
|
154
|
+
this.setVarGlobal(varDeclaration.varName, value);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
async snapshotRollback(policyInfoResult) {
|
|
160
|
+
this.audienceInfo = policyInfoResult.audienceInfo;
|
|
161
|
+
this.varContractDeclarationList = policyInfoResult.varContractDeclarationList;
|
|
162
|
+
this.setVarGlobalList(policyInfoResult.varGlobalList);
|
|
163
|
+
this.audienceInfo = policyInfoResult.audienceInfo;
|
|
164
|
+
this.currentStateInfo = policyInfoResult.currentStateInfo;
|
|
165
|
+
}
|
|
166
|
+
async enterState(stateName, varContextCapable) {
|
|
167
|
+
console.log('PolicyHelper - enterState..');
|
|
168
|
+
this.currentStateInfo.currentState = PolicyHelper.noneState;
|
|
169
|
+
this.currentStateInfo.currentServiceState = "";
|
|
170
|
+
this.clearVarLocalAtStateList();
|
|
171
|
+
this.clearVarLocalCurrentStateList();
|
|
172
|
+
this.currentStateInfo.currentEventInfos.length = 0;
|
|
173
|
+
let stateMachine = this.policyInfo["stateMachine"];
|
|
174
|
+
let stateInfo = stateMachine.find(sm => sm.stateName == stateName);
|
|
175
|
+
if (stateInfo == null) {
|
|
176
|
+
throw new Error(`enterState fail [PolicyHelper]... stateName = ${stateName}`);
|
|
177
|
+
}
|
|
178
|
+
this.currentStateInfo.currentState = stateName;
|
|
179
|
+
let serviceStateSection = stateInfo["serviceStateSection"];
|
|
180
|
+
this.currentStateInfo.currentServiceState = serviceStateSection["serviceState"];
|
|
181
|
+
for (let stateContextArg of stateInfo["stateContextArgs"]) {
|
|
182
|
+
let stateContextArgInfo = this.currentStateInfoTransient.varToStateList.find(v => v.varName == stateContextArg);
|
|
183
|
+
if (stateContextArgInfo == null) {
|
|
184
|
+
throw new Error(`传递参数 ${stateContextArg} 不存在`);
|
|
185
|
+
}
|
|
186
|
+
this.setVarLocalAtState(stateContextArg, stateContextArgInfo.varValue);
|
|
187
|
+
}
|
|
188
|
+
for (let assignmentInfo of stateInfo["assignments"]) {
|
|
189
|
+
let varValue = await this.getVarObjValue(assignmentInfo.varValueObj, varContextCapable);
|
|
190
|
+
this.setVarLocalCurrentState(assignmentInfo.varName, varValue);
|
|
191
|
+
}
|
|
192
|
+
for (let eventInfo of stateInfo["events"]) {
|
|
193
|
+
let varLocalAtEventList = [];
|
|
194
|
+
if (eventInfo["type"] == "normal") {
|
|
195
|
+
for (let i = 0; i < eventInfo.eventParamList.length; i++) {
|
|
196
|
+
let eventParam = eventInfo.eventParamList[i];
|
|
197
|
+
let eventParamConfig = eventInfo["config_params"][i];
|
|
198
|
+
let varName = eventParamConfig["name"];
|
|
199
|
+
let varValue = await this.getVarObjValue(eventParam.paramValueObj, varContextCapable);
|
|
200
|
+
varLocalAtEventList.push({ varName: varName, varValue: varValue });
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
this.currentStateInfo.currentEventInfos.push({
|
|
204
|
+
eventType: eventInfo.type,
|
|
205
|
+
eventCode: eventInfo.eventCode,
|
|
206
|
+
eventPath: eventInfo.eventPath,
|
|
207
|
+
eventName: eventInfo.eventName,
|
|
208
|
+
eventId: eventInfo.eventId,
|
|
209
|
+
toState: eventInfo.toState,
|
|
210
|
+
varLocalAtEventList: varLocalAtEventList
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
// 参数传递清理
|
|
214
|
+
this.currentStateInfoTransient.varToStateList.length = 0;
|
|
215
|
+
}
|
|
216
|
+
async getServiceStateCollection() {
|
|
217
|
+
let stateMachine = this.policyInfo["stateMachine"];
|
|
218
|
+
let stateInfo = stateMachine.find(sm => sm.stateName == this.currentStateInfo.currentState);
|
|
219
|
+
if (stateInfo == null) {
|
|
220
|
+
throw new Error(`enterState fail [PolicyHelper]... stateName = ${this.currentStateInfo.currentState}`);
|
|
221
|
+
}
|
|
222
|
+
let serviceStateCollection = [];
|
|
223
|
+
let serviceStateSection = stateInfo["serviceStateSection"];
|
|
224
|
+
if (serviceStateSection["serviceStateCollection"] != null) {
|
|
225
|
+
for (let ss of serviceStateSection["serviceStateCollection"]) {
|
|
226
|
+
let varValue = ss;
|
|
227
|
+
try {
|
|
228
|
+
varValue = await this.getVarContext(ss);
|
|
229
|
+
}
|
|
230
|
+
catch (e) {
|
|
231
|
+
}
|
|
232
|
+
serviceStateCollection.push({ varName: ss, varValue: varValue });
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return serviceStateCollection;
|
|
236
|
+
}
|
|
237
|
+
async execEventTail(eventId, varContextCapable) {
|
|
238
|
+
if (this.currentStateInfo.currentState == PolicyHelper.noneState) {
|
|
239
|
+
throw new Error(`不在状态机内,不能执行该事件 eventId = ${eventId}`);
|
|
240
|
+
}
|
|
241
|
+
let stateMachine = this.policyInfo["stateMachine"];
|
|
242
|
+
let stateInfo = stateMachine.find(sm => sm.stateName == this.currentStateInfo.currentState);
|
|
243
|
+
let eventInfo = stateInfo["events"].find(event => event["eventId"] == eventId);
|
|
244
|
+
if (eventInfo == null) {
|
|
245
|
+
throw new Error(`该事件 eventId = ${eventId} 在当前状态内不存在 currentState = ${this.currentStateInfo.currentState}`);
|
|
246
|
+
}
|
|
247
|
+
// 事件参数处理
|
|
248
|
+
for (let i = 0; i < eventInfo.eventParamList.length; i++) {
|
|
249
|
+
let eventParam = eventInfo.eventParamList[i];
|
|
250
|
+
let eventParamConfig = eventInfo["config_params"][i];
|
|
251
|
+
let varName = eventParamConfig["name"];
|
|
252
|
+
let varValue = await this.getVarObjValue(eventParam.paramValueObj, varContextCapable);
|
|
253
|
+
this.setVarLocalCurrentEvent(`$event.${varName}`, varValue);
|
|
254
|
+
if (eventParam.paramValueObj.expType == "expArgsGroup") {
|
|
255
|
+
for (let k in varValue) {
|
|
256
|
+
this.setVarLocalCurrentEvent(`$event.${varName}.${k}`, varValue[k]);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
// action
|
|
261
|
+
for (let actionInfo of eventInfo["actions"]) {
|
|
262
|
+
if (actionInfo["type"] == "varAssignment") {
|
|
263
|
+
let varName = actionInfo["actionObj"]["varName"];
|
|
264
|
+
let varValue = await this.getVarObjValue(actionInfo["actionObj"]["varValueObj"], varContextCapable);
|
|
265
|
+
await this.setVarContext(varName, varValue);
|
|
266
|
+
}
|
|
267
|
+
else if (actionInfo["type"] == "functionCall") {
|
|
268
|
+
await this.getExpValue(actionInfo["actionObj"], varContextCapable);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
// 参数传递
|
|
272
|
+
for (let stateContextArgInfo of eventInfo["stateContextArgs"]) {
|
|
273
|
+
let varValue = await this.getVarObjValue(stateContextArgInfo.paramValueObj, varContextCapable);
|
|
274
|
+
this.currentStateInfoTransient.varToStateList.push({
|
|
275
|
+
varName: stateContextArgInfo.paramName,
|
|
276
|
+
varValue: varValue
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
// 事件参数清理
|
|
280
|
+
this.clearVarLocalCurrentEventList();
|
|
281
|
+
}
|
|
282
|
+
/*
|
|
283
|
+
* 合约声明变量
|
|
284
|
+
*/
|
|
285
|
+
setVarContractDeclaration(varName, varValue) {
|
|
286
|
+
this.getVarContractDeclarationList().push({ varName, varValue });
|
|
287
|
+
}
|
|
288
|
+
getVarContractDeclarationList() {
|
|
289
|
+
return this.varContractDeclarationList;
|
|
290
|
+
}
|
|
291
|
+
getVarContractDeclaration(varName) {
|
|
292
|
+
let varContractDeclarationListTmp = [...this.getVarContractDeclarationList()].reverse();
|
|
293
|
+
return varContractDeclarationListTmp.find((elem) => {
|
|
294
|
+
return elem.varName == varName;
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
/*
|
|
298
|
+
* 签约条件变量
|
|
299
|
+
*/
|
|
300
|
+
getVarAudienceConditionList() {
|
|
301
|
+
let varAudienceConditionList = [];
|
|
302
|
+
for (let varName in this.audienceInfo["condition"]) {
|
|
303
|
+
varAudienceConditionList.push({
|
|
304
|
+
varName: `policy.audienceCondition.${varName}`,
|
|
305
|
+
varValue: this.audienceInfo["condition"][varName]
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
return varAudienceConditionList;
|
|
309
|
+
}
|
|
310
|
+
getVarAudienceCondition(varName) {
|
|
311
|
+
let varAudienceConditionListTmp = [...this.getVarAudienceConditionList()].reverse();
|
|
312
|
+
return varAudienceConditionListTmp.find((elem) => {
|
|
313
|
+
return elem.varName == varName;
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
/*
|
|
317
|
+
* 全局变量
|
|
318
|
+
*/
|
|
319
|
+
setVarGlobal(varName, varValue) {
|
|
320
|
+
lodash.remove(this.getVarGlobalList(), v => v.varName == varName);
|
|
321
|
+
this.getVarGlobalList().push({ varName, varValue });
|
|
322
|
+
}
|
|
323
|
+
setVarGlobalList(varGlobalList) {
|
|
324
|
+
this.varGlobalList = varGlobalList;
|
|
325
|
+
}
|
|
326
|
+
getVarGlobal(varName) {
|
|
327
|
+
let varGlobalListTmp = [...this.getVarGlobalList()].reverse();
|
|
328
|
+
return varGlobalListTmp.find((elem) => {
|
|
329
|
+
return elem.varName == varName;
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
getVarGlobalList() {
|
|
333
|
+
return this.varGlobalList;
|
|
334
|
+
}
|
|
335
|
+
/*
|
|
336
|
+
* 宏
|
|
337
|
+
*/
|
|
338
|
+
getVarMacro(varName) {
|
|
339
|
+
let varMacroListTmp = [...this.varMacroList].reverse();
|
|
340
|
+
return varMacroListTmp.find((elem) => {
|
|
341
|
+
return elem.varName == varName;
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
// 状态机当前状态传递的参数
|
|
345
|
+
setVarLocalAtState(varName, varValue) {
|
|
346
|
+
lodash.remove(this.getVarLocalAtStateList(), v => v.varName == varName);
|
|
347
|
+
this.getVarLocalAtStateList().push({ varName, varValue });
|
|
348
|
+
}
|
|
349
|
+
getVarLocalAtState(varName) {
|
|
350
|
+
let varLocalAtStateListTmp = [...this.getVarLocalAtStateList()].reverse();
|
|
351
|
+
return varLocalAtStateListTmp.find((elem) => {
|
|
352
|
+
return elem.varName == varName;
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
getVarLocalAtStateList() {
|
|
356
|
+
return this.currentStateInfo.varLocalAtStateList;
|
|
357
|
+
}
|
|
358
|
+
clearVarLocalAtStateList() {
|
|
359
|
+
this.getVarLocalAtStateList().length = 0;
|
|
360
|
+
}
|
|
361
|
+
// 状态机当前状态内的局部变量
|
|
362
|
+
setVarLocalCurrentState(varName, varValue) {
|
|
363
|
+
lodash.remove(this.getVarLocalCurrentStateList(), v => v.varName == varName);
|
|
364
|
+
this.getVarLocalCurrentStateList().push({ varName, varValue });
|
|
365
|
+
}
|
|
366
|
+
getVarLocalCurrentState(varName) {
|
|
367
|
+
let varLocalCurrentStateListTmp = [...this.getVarLocalCurrentStateList()].reverse();
|
|
368
|
+
return varLocalCurrentStateListTmp.find((elem) => {
|
|
369
|
+
return elem.varName == varName;
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
getVarLocalCurrentStateList() {
|
|
373
|
+
return this.currentStateInfo.varLocalCurrentStateList;
|
|
374
|
+
}
|
|
375
|
+
clearVarLocalCurrentStateList() {
|
|
376
|
+
this.getVarLocalCurrentStateList().length = 0;
|
|
377
|
+
}
|
|
378
|
+
// 状态机当前事件内的局部变量(事件参数)
|
|
379
|
+
setVarLocalCurrentEvent(varName, varValue) {
|
|
380
|
+
lodash.remove(this.getVarLocalCurrentEventList(), v => v.varName == varName);
|
|
381
|
+
this.getVarLocalCurrentEventList().push({ varName, varValue });
|
|
382
|
+
}
|
|
383
|
+
getVarLocalCurrentEvent(varName) {
|
|
384
|
+
let varLocalCurrentEventListTmp = [...this.getVarLocalCurrentEventList()].reverse();
|
|
385
|
+
return varLocalCurrentEventListTmp.find((elem) => {
|
|
386
|
+
return elem.varName == varName;
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
getVarLocalCurrentEventList() {
|
|
390
|
+
return this.currentStateInfoTransient.varLocalCurrentEventList;
|
|
391
|
+
}
|
|
392
|
+
clearVarLocalCurrentEventList() {
|
|
393
|
+
this.getVarLocalCurrentEventList().length = 0;
|
|
394
|
+
}
|
|
395
|
+
async getPolicyInfoResult() {
|
|
396
|
+
return {
|
|
397
|
+
audienceInfo: this.audienceInfo,
|
|
398
|
+
varContractDeclarationList: this.varContractDeclarationList,
|
|
399
|
+
varGlobalList: this.varGlobalList,
|
|
400
|
+
currentStateInfo: {
|
|
401
|
+
currentState: this.currentStateInfo.currentState,
|
|
402
|
+
currentServiceState: this.currentStateInfo.currentServiceState,
|
|
403
|
+
serviceStateCollection: await this.getServiceStateCollection(),
|
|
404
|
+
varLocalAtStateList: this.currentStateInfo.varLocalAtStateList,
|
|
405
|
+
varLocalCurrentStateList: this.currentStateInfo.varLocalCurrentStateList,
|
|
406
|
+
currentEventInfos: this.currentStateInfo.currentEventInfos
|
|
407
|
+
}
|
|
408
|
+
};
|
|
409
|
+
}
|
|
410
|
+
async setVarContext(varName, varValue) {
|
|
411
|
+
let result = null;
|
|
412
|
+
result = this.getVarGlobal(varName);
|
|
413
|
+
if (result != null) {
|
|
414
|
+
this.setVarGlobal(varName, varValue);
|
|
415
|
+
return true;
|
|
416
|
+
}
|
|
417
|
+
result = this.getVarLocalCurrentState(varName);
|
|
418
|
+
if (result != null) {
|
|
419
|
+
this.setVarLocalCurrentState(varName, varValue);
|
|
420
|
+
return true;
|
|
421
|
+
}
|
|
422
|
+
return false;
|
|
423
|
+
}
|
|
424
|
+
async getVarContext(varName) {
|
|
425
|
+
let result = null;
|
|
426
|
+
result = await this.getVarContractDeclaration(varName);
|
|
427
|
+
if (result != null) {
|
|
428
|
+
return result["varValue"];
|
|
429
|
+
}
|
|
430
|
+
if (this.varContractDeclarationMap.has(varName)) {
|
|
431
|
+
let varValueObj = this.varContractDeclarationMap.get(varName);
|
|
432
|
+
if (varValueObj["keyword"] == "USE") {
|
|
433
|
+
let value = await this.getVarObjValue(varValueObj, this);
|
|
434
|
+
this.setVarContractDeclaration(varValueObj["varName"], value);
|
|
435
|
+
return value;
|
|
436
|
+
}
|
|
437
|
+
if (varValueObj["keyword"] == "DEMAND") {
|
|
438
|
+
return this.getVarObjValue(varValueObj, this);
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
result = this.getVarAudienceCondition(varName);
|
|
442
|
+
if (result != null) {
|
|
443
|
+
return result["varValue"];
|
|
444
|
+
}
|
|
445
|
+
result = this.getVarGlobal(varName);
|
|
446
|
+
if (result != null) {
|
|
447
|
+
return result["varValue"];
|
|
448
|
+
}
|
|
449
|
+
if (this.varGlobalMap.has(varName)) {
|
|
450
|
+
let varDeclaration = this.varGlobalMap.get(varName);
|
|
451
|
+
let value = await this.getExpValue(varDeclaration.varValueObj, this);
|
|
452
|
+
this.setVarGlobal(varDeclaration.varName, value);
|
|
453
|
+
return value;
|
|
454
|
+
}
|
|
455
|
+
let resultObj = this.getVarMacro(varName);
|
|
456
|
+
if (resultObj != null) {
|
|
457
|
+
return this.getExpValue(resultObj.varValueObj, this);
|
|
458
|
+
}
|
|
459
|
+
result = this.getVarLocalAtState(varName);
|
|
460
|
+
if (result != null) {
|
|
461
|
+
return result["varValue"];
|
|
462
|
+
}
|
|
463
|
+
result = this.getVarLocalCurrentState(varName);
|
|
464
|
+
if (result != null) {
|
|
465
|
+
return result["varValue"];
|
|
466
|
+
}
|
|
467
|
+
result = this.getVarLocalCurrentEvent(varName);
|
|
468
|
+
if (result != null) {
|
|
469
|
+
return result["varValue"];
|
|
470
|
+
}
|
|
471
|
+
throw new Error(`getVarContext fail [PolicyHelper]... varName = ${varName}`);
|
|
472
|
+
}
|
|
473
|
+
async getVarObjValue(varObj, varContextCapable) {
|
|
474
|
+
if (varObj["expType"] == "varContractDeclaration") {
|
|
475
|
+
return this.getContractDeclarationValue(varObj, varContextCapable);
|
|
476
|
+
}
|
|
477
|
+
else {
|
|
478
|
+
return this.getExpValue(varObj, varContextCapable);
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
async getContractDeclarationValue(varObj, varContextCapable) {
|
|
482
|
+
if (varObj["keyword"] == "USE" || varObj["keyword"] == "DEMAND") {
|
|
483
|
+
for (let condition of varObj["conditions"]) {
|
|
484
|
+
condition["paramValueData"] = await this.getExpValue(condition["paramValueObj"], varContextCapable);
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
return this.contractDeclarationHelper.execute(varObj["keyword"], varObj);
|
|
488
|
+
}
|
|
489
|
+
async getExpValue(varObj, varContextCapable) {
|
|
490
|
+
return this.expHelper.getExpValue(varObj, varContextCapable);
|
|
491
|
+
}
|
|
492
|
+
invokeEnable(functionName) {
|
|
493
|
+
throw new Error("这是个空实现,不能被调用!");
|
|
494
|
+
}
|
|
495
|
+
async invoke(functionName, args) {
|
|
496
|
+
return this.functionHelper.invoke(functionName, args);
|
|
497
|
+
}
|
|
498
|
+
addContractDeclarationExecutor(keyword, executor) {
|
|
499
|
+
this.contractDeclarationHelper.addExecutor(keyword, executor);
|
|
500
|
+
}
|
|
501
|
+
addExecutor(executorName, functionName, executor) {
|
|
502
|
+
this.functionHelper.addExecutor(executorName, functionName, executor);
|
|
503
|
+
}
|
|
504
|
+
setGetPostInvoke(getPostInvoke) {
|
|
505
|
+
this.outsideApiService.setGetPostInvoke(getPostInvoke);
|
|
506
|
+
}
|
|
507
|
+
setApiAddress(api, url) {
|
|
508
|
+
this.outsideApiService.setApiAddress(api, url);
|
|
509
|
+
}
|
|
510
|
+
setApiAddressMulti(tuples) {
|
|
511
|
+
this.outsideApiService.setApiAddressMulti(tuples);
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
exports.PolicyHelper = PolicyHelper;
|
|
515
|
+
PolicyHelper.noneState = "_none_";
|
|
516
|
+
class PolicyInfoResult {
|
|
517
|
+
}
|
|
518
|
+
exports.PolicyInfoResult = PolicyInfoResult;
|
|
519
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9saWN5SGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hlbHBlci9Qb2xpY3lIZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsMkNBQXNDO0FBRXRDLHFEQUFnRDtBQUtoRCwyRUFBc0U7QUFHdEUsb0VBQStEO0FBRy9ELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUVqQyxNQUFhLFlBQVk7SUE2Q3JCLFlBQVksVUFBc0I7UUF6Q3hCLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBRWxCLDhCQUF5QixHQUFHLElBQUksR0FBRyxFQUFzQyxDQUFDO1FBRXBGLFNBQVM7UUFDQywrQkFBMEIsR0FBRyxFQUFFLENBQUM7UUFFaEMsaUJBQVksR0FBRyxJQUFJLEdBQUcsRUFBOEIsQ0FBQztRQUUvRCxPQUFPO1FBQ0csa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFFN0IsSUFBSTtRQUNNLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBSTVCOztXQUVHO1FBQ08scUJBQWdCLEdBQUc7WUFDekIsWUFBWSxFQUFFLFlBQVksQ0FBQyxTQUFTO1lBQ3BDLG1CQUFtQixFQUFFLEVBQUU7WUFDdkIsbUJBQW1CLEVBQUUsRUFBRTtZQUN2Qix3QkFBd0IsRUFBRSxFQUFFO1lBQzVCLGlCQUFpQixFQUFFLEVBQUU7U0FDeEIsQ0FBQztRQUVLLDhCQUF5QixHQUFHO1lBQy9CLHdCQUF3QixFQUFFLEVBQUU7WUFDNUIsY0FBYyxFQUFFLEVBQUU7U0FDckIsQ0FBQztRQVdFLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLHFDQUFpQixFQUFFLENBQUM7UUFDakQsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUkscURBQXlCLEVBQUUsQ0FBQztRQUNqRSxJQUFJLENBQUMseUJBQXlCLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGlC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
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FsY3VsYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbnRlcmZhY2UvQ2FsY3VsYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare class ConstantForApi {
|
|
2
|
+
static ResourceCountOfUpdates: string;
|
|
3
|
+
static EchoLabels: string;
|
|
4
|
+
static EchoLabelInfos: string;
|
|
5
|
+
static ContractSignCount: string;
|
|
6
|
+
static ContractInfos: string;
|
|
7
|
+
static TransactionRecordsCount: string;
|
|
8
|
+
static TransactionAmountsSum: string;
|
|
9
|
+
static FunAppendTTL: string;
|
|
10
|
+
static FunSendEvent: string;
|
|
11
|
+
static FunSetLabel: string;
|
|
12
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConstantForApi = void 0;
|
|
4
|
+
class ConstantForApi {
|
|
5
|
+
}
|
|
6
|
+
exports.ConstantForApi = ConstantForApi;
|
|
7
|
+
ConstantForApi.ResourceCountOfUpdates = "resourceCountOfUpdates";
|
|
8
|
+
ConstantForApi.EchoLabels = "echoLabels";
|
|
9
|
+
ConstantForApi.EchoLabelInfos = "echoLabelInfos";
|
|
10
|
+
ConstantForApi.ContractSignCount = "contractSignCount";
|
|
11
|
+
ConstantForApi.ContractInfos = "contractInfos";
|
|
12
|
+
ConstantForApi.TransactionRecordsCount = "transactionRecordsCount";
|
|
13
|
+
ConstantForApi.TransactionAmountsSum = "transactionAmountsSum";
|
|
14
|
+
ConstantForApi.FunAppendTTL = "funAppendTTL";
|
|
15
|
+
ConstantForApi.FunSendEvent = "funSendEvent";
|
|
16
|
+
ConstantForApi.FunSetLabel = "funSetLabel";
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uc3RhbnRGb3JBcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW50ZXJmYWNlL0NvbnN0YW50Rm9yQXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQWEsY0FBYzs7QUFBM0Isd0NBZUM7QUFkaUIscUNBQXNCLEdBQUcsd0JBQXdCLENBQUM7QUFFbEQseUJBQVUsR0FBRyxZQUFZLENBQUM7QUFDMUIsNkJBQWMsR0FBRyxnQkFBZ0IsQ0FBQztBQUVsQyxnQ0FBaUIsR0FBRyxtQkFBbUIsQ0FBQztBQUN4Qyw0QkFBYSxHQUFHLGVBQWUsQ0FBQztBQUVoQyxzQ0FBdUIsR0FBRyx5QkFBeUIsQ0FBQztBQUNwRCxvQ0FBcUIsR0FBRyx1QkFBdUIsQ0FBQztBQUVoRCwyQkFBWSxHQUFHLGNBQWMsQ0FBQztBQUM5QiwyQkFBWSxHQUFHLGNBQWMsQ0FBQztBQUM5QiwwQkFBVyxHQUFHLGFBQWEsQ0FBQyJ9
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJhY3REZWNsYXJhdGlvbkV4ZWN1dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW50ZXJmYWNlL0NvbnRyYWN0RGVjbGFyYXRpb25FeGVjdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwSGVscGVyQXdhcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW50ZXJmYWNlL0V4cEhlbHBlckF3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnVuY3Rpb25IZWxwZXJBd2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbnRlcmZhY2UvRnVuY3Rpb25IZWxwZXJBd2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnVuY3Rpb25JbnZva2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW50ZXJmYWNlL0Z1bmN0aW9uSW52b2tlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
|