survery-lib 0.0.6 → 0.1.0
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/esm2022/lib/survery-lib.component.mjs +42 -161
- package/esm2022/lib/usecases/base/use-case.mjs +2 -0
- package/esm2022/lib/usecases/check-rule-exps.usecase.mjs +154 -0
- package/fesm2022/survery-lib.mjs +208 -177
- package/fesm2022/survery-lib.mjs.map +1 -1
- package/lib/survery-lib.component.d.ts +3 -6
- package/lib/usecases/base/use-case.d.ts +7 -0
- package/lib/usecases/check-rule-exps.usecase.d.ts +21 -0
- package/package.json +1 -1
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { of } from "rxjs";
|
|
2
|
+
import { Injectable } from "@angular/core";
|
|
3
|
+
import { QuestionTypeEnum } from "../../shared/enums/question-type.enum";
|
|
4
|
+
import { LogicPropertyEnum } from "../../shared/enums/Logic-Property.enum";
|
|
5
|
+
import { OperatorEnum } from "../../shared/enums/operator.enum";
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class CheckRuleExpsUsecase {
|
|
8
|
+
constructor() {
|
|
9
|
+
}
|
|
10
|
+
execute(params) {
|
|
11
|
+
var useCaseResult = {
|
|
12
|
+
exprestionResultArr: []
|
|
13
|
+
};
|
|
14
|
+
params.ruleExps.forEach(ruleExp => {
|
|
15
|
+
const index = params.questions.findIndex(x => x.questionId == ruleExp.questionId);
|
|
16
|
+
var questionGroupValue = params.questions.at(index);
|
|
17
|
+
var result;
|
|
18
|
+
if (questionGroupValue.questionType == QuestionTypeEnum.TextInput) {
|
|
19
|
+
result = this.checkRuleExpForAnswerText(ruleExp, questionGroupValue.answerText);
|
|
20
|
+
}
|
|
21
|
+
else if (questionGroupValue.questionType == QuestionTypeEnum.CheckBox) {
|
|
22
|
+
result = this.checkRuleExpForAnswerIdArr(ruleExp, questionGroupValue.answerIdArr);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
result = this.checkRuleExpForAnswerId(ruleExp, questionGroupValue.answerId);
|
|
26
|
+
}
|
|
27
|
+
var answers = ruleExp.ruleExpAnswers.map(x => x.answerId + '-' + x.answerTitle);
|
|
28
|
+
console.log(`Question ${questionGroupValue.questionId} type ${QuestionTypeEnum[questionGroupValue.questionType]} --- ${result == true ? 'passed' : 'not passed'} ---`, ` answers (${answers.join(' , ')}) logic (${LogicPropertyEnum[ruleExp.logicPropertyId]}) operator (${OperatorEnum[ruleExp.opporator]})`);
|
|
29
|
+
useCaseResult.exprestionResultArr.push(result);
|
|
30
|
+
});
|
|
31
|
+
return of(useCaseResult);
|
|
32
|
+
}
|
|
33
|
+
checkRuleExpForAnswerId(ruleExp, answerId) {
|
|
34
|
+
var ruleExpResultArr = [];
|
|
35
|
+
if (ruleExp.logicPropertyId == LogicPropertyEnum.GreaterThan) {
|
|
36
|
+
ruleExp.ruleExpAnswers.forEach(answer => {
|
|
37
|
+
var result = answerId > answer.answerId;
|
|
38
|
+
ruleExpResultArr.push(result);
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
else if (ruleExp.logicPropertyId == LogicPropertyEnum.GreaterThanOrEqual) {
|
|
42
|
+
ruleExp.ruleExpAnswers.forEach(answer => {
|
|
43
|
+
var result = answerId >= answer.answerId;
|
|
44
|
+
ruleExpResultArr.push(result);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
else if (ruleExp.logicPropertyId == LogicPropertyEnum.LessThan) {
|
|
48
|
+
ruleExp.ruleExpAnswers.forEach(answer => {
|
|
49
|
+
var result = answerId < answer.answerId;
|
|
50
|
+
ruleExpResultArr.push(result);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
else if (ruleExp.logicPropertyId == LogicPropertyEnum.LessThanOrEqual) {
|
|
54
|
+
ruleExp.ruleExpAnswers.forEach(answer => {
|
|
55
|
+
var result = answerId <= answer.answerId;
|
|
56
|
+
ruleExpResultArr.push(result);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
else if (ruleExp.logicPropertyId == LogicPropertyEnum.Equal) {
|
|
60
|
+
ruleExp.ruleExpAnswers.forEach(answer => {
|
|
61
|
+
var result = answerId == answer.answerId;
|
|
62
|
+
ruleExpResultArr.push(result);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
else if (ruleExp.logicPropertyId == LogicPropertyEnum.NotEqual) {
|
|
66
|
+
ruleExp.ruleExpAnswers.forEach(answer => {
|
|
67
|
+
var result = answerId != answer.answerId;
|
|
68
|
+
ruleExpResultArr.push(result);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
else if (ruleExp.logicPropertyId == LogicPropertyEnum.IsEmpty) {
|
|
72
|
+
var result = answerId == null;
|
|
73
|
+
ruleExpResultArr.push(result);
|
|
74
|
+
}
|
|
75
|
+
else if (ruleExp.logicPropertyId == LogicPropertyEnum.IsNotEmpty) {
|
|
76
|
+
var result = answerId != null;
|
|
77
|
+
ruleExpResultArr.push(result);
|
|
78
|
+
}
|
|
79
|
+
else if (ruleExp.logicPropertyId == LogicPropertyEnum.AnyOf) {
|
|
80
|
+
var answerIdArr = ruleExp.ruleExpAnswers.map(x => x.answerId);
|
|
81
|
+
var result = answerIdArr.findIndex(x => x == answerId) > -1;
|
|
82
|
+
ruleExpResultArr.push(result);
|
|
83
|
+
}
|
|
84
|
+
else if (ruleExp.logicPropertyId == LogicPropertyEnum.Then) {
|
|
85
|
+
var answerIdArr = ruleExp.ruleExpAnswers.map(x => x.answerId);
|
|
86
|
+
var result = answerIdArr.findIndex(x => x == answerId) == -1;
|
|
87
|
+
ruleExpResultArr.push(result);
|
|
88
|
+
}
|
|
89
|
+
if (ruleExpResultArr.length == 0) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
else if (ruleExp.ruleExpAnswers.length == 1) {
|
|
93
|
+
return ruleExpResultArr.filter(x => x == true).length > 0;
|
|
94
|
+
}
|
|
95
|
+
else if (ruleExp.opporator == OperatorEnum.Or) {
|
|
96
|
+
return ruleExpResultArr.filter(x => x == true).length > 0;
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
return ruleExpResultArr.filter(x => x == false).length == 0;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
checkRuleExpForAnswerIdArr(ruleExp, answerIdArr) {
|
|
103
|
+
var ruleExpResultArr = [];
|
|
104
|
+
answerIdArr?.forEach(answer => {
|
|
105
|
+
var isResult = this.checkRuleExpForAnswerId(ruleExp, answer);
|
|
106
|
+
ruleExpResultArr.push(isResult);
|
|
107
|
+
});
|
|
108
|
+
if (ruleExpResultArr.length == 0) {
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
else if (ruleExp.ruleExpAnswers.length == 1) {
|
|
112
|
+
return ruleExpResultArr.filter(x => x == true).length > 0;
|
|
113
|
+
}
|
|
114
|
+
else if (ruleExp.opporator == OperatorEnum.Or) {
|
|
115
|
+
return ruleExpResultArr.filter(x => x == true).length > 0;
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
return ruleExpResultArr.filter(x => x == false).length == 0;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
checkRuleExpForAnswerText(ruleExp, answer) {
|
|
122
|
+
var ruleExpResultArr = [];
|
|
123
|
+
if (ruleExp.logicPropertyId == LogicPropertyEnum.IsEmpty) {
|
|
124
|
+
var result = answer == null || answer == '';
|
|
125
|
+
ruleExpResultArr.push(result);
|
|
126
|
+
}
|
|
127
|
+
else if (ruleExp.logicPropertyId == LogicPropertyEnum.IsNotEmpty) {
|
|
128
|
+
var result = answer != null && answer != '';
|
|
129
|
+
ruleExpResultArr.push(result);
|
|
130
|
+
}
|
|
131
|
+
if (ruleExp.ruleExpAnswers.length == 1) {
|
|
132
|
+
return ruleExpResultArr.filter(x => x == true).length > 0;
|
|
133
|
+
}
|
|
134
|
+
else if (ruleExp.opporator == OperatorEnum.Or) {
|
|
135
|
+
return ruleExpResultArr.filter(x => x == true).length > 0;
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
return ruleExpResultArr.filter(x => x == false).length == 0;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckRuleExpsUsecase, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
142
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckRuleExpsUsecase, providedIn: 'root' }); }
|
|
143
|
+
}
|
|
144
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckRuleExpsUsecase, decorators: [{
|
|
145
|
+
type: Injectable,
|
|
146
|
+
args: [{
|
|
147
|
+
providedIn: 'root'
|
|
148
|
+
}]
|
|
149
|
+
}], ctorParameters: function () { return []; } });
|
|
150
|
+
export class CheckRulesUsecaseModel {
|
|
151
|
+
}
|
|
152
|
+
export class CheckRulesUsecaseResult {
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2stcnVsZS1leHBzLnVzZWNhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdXJ2ZXJ5LWxpYi9zcmMvbGliL3VzZWNhc2VzL2NoZWNrLXJ1bGUtZXhwcy51c2VjYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7O0FBS2hFLE1BQU0sT0FBTyxvQkFBb0I7SUFFL0I7SUFFQSxDQUFDO0lBRUQsT0FBTyxDQUFDLE1BQThCO1FBRXBDLElBQUksYUFBYSxHQUE0QjtZQUMzQyxtQkFBbUIsRUFBRSxFQUFFO1NBQ3hCLENBQUM7UUFFRixNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNoQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xGLElBQUksa0JBQWtCLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFcEQsSUFBSSxNQUFlLENBQUM7WUFFcEIsSUFBSSxrQkFBa0IsQ0FBQyxZQUFZLElBQUksZ0JBQWdCLENBQUMsU0FBUyxFQUFFO2dCQUNqRSxNQUFNLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQTth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Q0FBQztTQUUvQjthQUFNLElBQUksT0FBTyxDQUFDLGVBQWUsSUFBSSxpQkFBaUIsQ0FBQyxVQUFVLEVBQUU7WUFFbEUsSUFBSSxNQUFNLEdBQUcsTUFBTSxJQUFJLElBQUksSUFBSSxNQUFNLElBQUksRUFBRSxDQUFBO1lBQzNDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUUvQjtRQUdELElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQ3RDLE9BQU8sZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUE7U0FDMUQ7YUFDSSxJQUFJLE9BQU8sQ0FBQyxTQUFTLElBQUksWUFBWSxDQUFDLEVBQUUsRUFBRTtZQUM3QyxPQUFPLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO1NBQzFEO2FBQU07WUFDTCxPQUFPLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFBO1NBQzVEO0lBQ0gsQ0FBQzs4R0FuS1Usb0JBQW9CO2tIQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs7MkZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7QUF3S0QsTUFBTSxPQUFPLHNCQUFzQjtDQUdsQztBQUVELE1BQU0sT0FBTyx1QkFBdUI7Q0FFbkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFVzZUNhc2UgfSBmcm9tIFwiLi9iYXNlL3VzZS1jYXNlXCI7XHJcbmltcG9ydCB7IFN1cnZleVJ1bGVEdG8gfSBmcm9tIFwiLi4vLi4vc2hhcmVkL2R0b3Mvc3VydmV5LXJ1bGUuZHRvXCI7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBRdWVzdGlvbkNoaWxkT2ZTdXJ2ZXJ5TGliRm9ybUludGVyZmFjZSB9IGZyb20gXCIuLi8uLi9zaGFyZWQvZm9ybS1pbnRlcmZhY2VzL3N1cnZlcnktbGliLmZvcm0taW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7IFJ1bGVFeHBEdG8gfSBmcm9tIFwiLi4vLi4vc2hhcmVkL2R0b3MvcnVsZS1leHAuZHRvXCI7XHJcbmltcG9ydCB7IFF1ZXN0aW9uVHlwZUVudW0gfSBmcm9tIFwiLi4vLi4vc2hhcmVkL2VudW1zL3F1ZXN0aW9uLXR5cGUuZW51bVwiO1xyXG5pbXBvcnQgeyBMb2dpY1Byb3BlcnR5RW51bSB9IGZyb20gXCIuLi8uLi9zaGFyZWQvZW51bXMvTG9naWMtUHJvcGVydHkuZW51bVwiO1xyXG5pbXBvcnQgeyBPcGVyYXRvckVudW0gfSBmcm9tIFwiLi4vLi4vc2hhcmVkL2VudW1zL29wZXJhdG9yLmVudW1cIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENoZWNrUnVsZUV4cHNVc2VjYXNlIGltcGxlbWVudHMgVXNlQ2FzZTxDaGVja1J1bGVzVXNlY2FzZU1vZGVsLCBDaGVja1J1bGVzVXNlY2FzZVJlc3VsdD57XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG5cclxuICB9XHJcblxyXG4gIGV4ZWN1dGUocGFyYW1zOiBDaGVja1J1bGVzVXNlY2FzZU1vZGVsKTogT2JzZXJ2YWJsZTxDaGVja1J1bGVzVXNlY2FzZVJlc3VsdD4ge1xyXG5cclxuICAgIHZhciB1c2VDYXNlUmVzdWx0OiBDaGVja1J1bGVzVXNlY2FzZVJlc3VsdCA9IHtcclxuICAgICAgZXhwcmVzdGlvblJlc3VsdEFycjogW11cclxuICAgIH07XHJcblxyXG4gICAgcGFyYW1zLnJ1bGVFeHBzLmZvckVhY2gocnVsZUV4cCA9PiB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gcGFyYW1zLnF1ZXN0aW9ucy5maW5kSW5kZXgoeCA9PiB4LnF1ZXN0aW9uSWQgPT0gcnVsZUV4cC5xdWVzdGlvbklkKTtcclxuICAgICAgdmFyIHF1ZXN0aW9uR3JvdXBWYWx1ZSA9IHBhcmFtcy5xdWVzdGlvbnMuYXQoaW5kZXgpO1xyXG5cclxuICAgICAgdmFyIHJlc3VsdDogYm9vbGVhbjtcclxuXHJcbiAgICAgIGlmIChxdWVzdGlvbkdyb3VwVmFsdWUucXVlc3Rpb25UeXBlID09IFF1ZXN0aW9uVHlwZUVudW0uVGV4dElucHV0KSB7XHJcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5jaGVja1J1bGVFeHBGb3JBbnN3ZXJUZXh0KHJ1bGVFeHAsIHF1ZXN0aW9uR3JvdXBWYWx1ZS5hbnN3ZXJUZXh0KVxyXG4gICAgICB9IFxyXG4gICAgICBlbHNlIGlmIChxdWVzdGlvbkdyb3VwVmFsdWUucXVlc3Rpb25UeXBlID09IFF1ZXN0aW9uVHlwZUVudW0uQ2hlY2tCb3gpIHtcclxuICAgICAgICByZXN1bHQgPSB0aGlzLmNoZWNrUnVsZUV4cEZvckFuc3dlcklkQXJyKHJ1bGVFeHAsIHF1ZXN0aW9uR3JvdXBWYWx1ZS5hbnN3ZXJJZEFycik7XHJcbiAgICAgIH0gXHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuY2hlY2tSdWxlRXhwRm9yQW5zd2VySWQocnVsZUV4cCwgcXVlc3Rpb25Hcm91cFZhbHVlLmFuc3dlcklkKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIGFuc3dlcnMgPXJ1bGVFeHAucnVsZUV4cEFuc3dlcnMubWFwKHg9PnguYW5zd2VySWQrJy0nK3guYW5zd2VyVGl0bGUpO1xyXG4gICAgICBjb25zb2xlLmxvZyhgUXVlc3Rpb24gJHtxdWVzdGlvbkdyb3VwVmFsdWUucXVlc3Rpb25JZH0gdHlwZSAke1F1ZXN0aW9uVHlwZUVudW1bcXVlc3Rpb25Hcm91cFZhbHVlLnF1ZXN0aW9uVHlwZV19IC0tLSAke3Jlc3VsdCA9PSB0cnVlID8ncGFzc2VkJzonbm90IHBhc3NlZCd9IC0tLWAsXHJcbiAgICAgIGAgYW5zd2VycyAoJHthbnN3ZXJzLmpvaW4oJyAsICcpfSkgbG9naWMgKCR7IExvZ2ljUHJvcGVydHlFbnVtW3J1bGVFeHAubG9naWNQcm9wZXJ0eUlkXX0pIG9wZXJhdG9yICgke09wZXJhdG9yRW51bSBbcnVsZUV4cC5vcHBvcmF0b3JdfSlgKTtcclxuXHJcbiAgICAgIHVzZUNhc2VSZXN1bHQuZXhwcmVzdGlvblJlc3VsdEFyci5wdXNoKHJlc3VsdCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gb2YodXNlQ2FzZVJlc3VsdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrUnVsZUV4cEZvckFuc3dlcklkKHJ1bGVFeHA6IFJ1bGVFeHBEdG8sIGFuc3dlcklkOiBudW1iZXIpIHtcclxuICAgIHZhciBydWxlRXhwUmVzdWx0QXJyOiBib29sZWFuW10gPSBbXTtcclxuICAgIGlmIChydWxlRXhwLmxvZ2ljUHJvcGVydHlJZCA9PSBMb2dpY1Byb3BlcnR5RW51bS5HcmVhdGVyVGhhbikge1xyXG5cclxuICAgICAgcnVsZUV4cC5ydWxlRXhwQW5zd2Vycy5mb3JFYWNoKGFuc3dlciA9PiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGFuc3dlcklkID4gYW5zd2VyLmFuc3dlcklkXHJcbiAgICAgICAgcnVsZUV4cFJlc3VsdEFyci5wdXNoKHJlc3VsdCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH0gZWxzZSBpZiAocnVsZUV4cC5sb2dpY1Byb3BlcnR5SWQgPT0gTG9naWNQcm9wZXJ0eUVudW0uR3JlYXRlclRoYW5PckVxdWFsKSB7XHJcblxyXG4gICAgICBydWxlRXhwLnJ1bGVFeHBBbnN3ZXJzLmZvckVhY2goYW5zd2VyID0+IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gYW5zd2VySWQgPj0gYW5zd2VyLmFuc3dlcklkXHJcbiAgICAgICAgcnVsZUV4cFJlc3VsdEFyci5wdXNoKHJlc3VsdCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH0gZWxzZSBpZiAocnVsZUV4cC5sb2dpY1Byb3BlcnR5SWQgPT0gTG9naWNQcm9wZXJ0eUVudW0uTGVzc1RoYW4pIHtcclxuXHJcbiAgICAgIHJ1bGVFeHAucnVsZUV4cEFuc3dlcnMuZm9yRWFjaChhbnN3ZXIgPT4ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBhbnN3ZXJJZCA8IGFuc3dlci5hbnN3ZXJJZFxyXG4gICAgICAgIHJ1bGVFeHBSZXN1bHRBcnIucHVzaChyZXN1bHQpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB9IGVsc2UgaWYgKHJ1bGVFeHAubG9naWNQcm9wZXJ0eUlkID09IExvZ2ljUHJvcGVydHlFbnVtLkxlc3NUaGFuT3JFcXVhbCkge1xyXG5cclxuICAgICAgcnVsZUV4cC5ydWxlRXhwQW5zd2Vycy5mb3JFYWNoKGFuc3dlciA9PiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGFuc3dlcklkIDw9IGFuc3dlci5hbnN3ZXJJZFxyXG4gICAgICAgIHJ1bGVFeHBSZXN1bHRBcnIucHVzaChyZXN1bHQpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB9IGVsc2UgaWYgKHJ1bGVFeHAubG9naWNQcm9wZXJ0eUlkID09IExvZ2ljUHJvcGVydHlFbnVtLkVxdWFsKSB7XHJcblxyXG4gICAgICBydWxlRXhwLnJ1bGVFeHBBbnN3ZXJzLmZvckVhY2goYW5zd2VyID0+IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gYW5zd2VySWQgPT0gYW5zd2VyLmFuc3dlcklkXHJcbiAgICAgICAgcnVsZUV4cFJlc3VsdEFyci5wdXNoKHJlc3VsdCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH0gZWxzZSBpZiAocnVsZUV4cC5sb2dpY1Byb3BlcnR5SWQgPT0gTG9naWNQcm9wZXJ0eUVudW0uTm90RXF1YWwpIHtcclxuXHJcbiAgICAgIHJ1bGVFeHAucnVsZUV4cEFuc3dlcnMuZm9yRWFjaChhbnN3ZXIgPT4ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBhbnN3ZXJJZCAhPSBhbnN3ZXIuYW5zd2VySWRcclxuICAgICAgICBydWxlRXhwUmVzdWx0QXJyLnB1c2gocmVzdWx0KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgfSBlbHNlIGlmIChydWxlRXhwLmxvZ2ljUHJvcGVydHlJZCA9PSBMb2dpY1Byb3BlcnR5RW51bS5Jc0VtcHR5KSB7XHJcblxyXG4gICAgICB2YXIgcmVzdWx0ID0gYW5zd2VySWQgPT0gbnVsbFxyXG4gICAgICBydWxlRXhwUmVzdWx0QXJyLnB1c2gocmVzdWx0KTtcclxuXHJcbiAgICB9IGVsc2UgaWYgKHJ1bGVFeHAubG9naWNQcm9wZXJ0eUlkID09IExvZ2ljUHJvcGVydHlFbnVtLklzTm90RW1wdHkpIHtcclxuXHJcbiAgICAgIHZhciByZXN1bHQgPSBhbnN3ZXJJZCAhPSBudWxsXHJcbiAgICAgIHJ1bGVFeHBSZXN1bHRBcnIucHVzaChyZXN1bHQpO1xyXG5cclxuICAgIH0gZWxzZSBpZiAocnVsZUV4cC5sb2dpY1Byb3BlcnR5SWQgPT0gTG9naWNQcm9wZXJ0eUVudW0uQW55T2YpIHtcclxuXHJcbiAgICAgIHZhciBhbnN3ZXJJZEFycjogbnVtYmVyW10gPSBydWxlRXhwLnJ1bGVFeHBBbnN3ZXJzLm1hcCh4ID0+IHguYW5zd2VySWQpO1xyXG4gICAgICB2YXIgcmVzdWx0ID0gYW5zd2VySWRBcnIuZmluZEluZGV4KHggPT4geCA9PSBhbnN3ZXJJZCkgPiAtMVxyXG4gICAgICBydWxlRXhwUmVzdWx0QXJyLnB1c2gocmVzdWx0KTtcclxuXHJcbiAgICB9IGVsc2UgaWYgKHJ1bGVFeHAubG9naWNQcm9wZXJ0eUlkID09IExvZ2ljUHJvcGVydHlFbnVtLlRoZW4pIHtcclxuXHJcbiAgICAgIHZhciBhbnN3ZXJJZEFycjogbnVtYmVyW10gPSBydWxlRXhwLnJ1bGVFeHBBbnN3ZXJzLm1hcCh4ID0+IHguYW5zd2VySWQpO1xyXG4gICAgICB2YXIgcmVzdWx0ID0gYW5zd2VySWRBcnIuZmluZEluZGV4KHggPT4geCA9PSBhbnN3ZXJJZCkgPT0gLTFcclxuICAgICAgcnVsZUV4cFJlc3VsdEFyci5wdXNoKHJlc3VsdCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGlmIChydWxlRXhwUmVzdWx0QXJyLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHJ1bGVFeHAucnVsZUV4cEFuc3dlcnMubGVuZ3RoID09IDEpIHtcclxuICAgICAgcmV0dXJuIHJ1bGVFeHBSZXN1bHRBcnIuZmlsdGVyKHggPT4geCA9PSB0cnVlKS5sZW5ndGggPiAwXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChydWxlRXhwLm9wcG9yYXRvciA9PSBPcGVyYXRvckVudW0uT3IpIHtcclxuICAgICAgcmV0dXJuIHJ1bGVFeHBSZXN1bHRBcnIuZmlsdGVyKHggPT4geCA9PSB0cnVlKS5sZW5ndGggPiAwXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gcnVsZUV4cFJlc3VsdEFyci5maWx0ZXIoeCA9PiB4ID09IGZhbHNlKS5sZW5ndGggPT0gMFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja1J1bGVFeHBGb3JBbnN3ZXJJZEFycihydWxlRXhwOiBSdWxlRXhwRHRvLCBhbnN3ZXJJZEFycjogbnVtYmVyW10pIHtcclxuICAgIHZhciBydWxlRXhwUmVzdWx0QXJyOiBib29sZWFuW10gPSBbXTtcclxuXHJcbiAgICBhbnN3ZXJJZEFycj8uZm9yRWFjaChhbnN3ZXIgPT4ge1xyXG4gICAgICB2YXIgaXNSZXN1bHQgPSB0aGlzLmNoZWNrUnVsZUV4cEZvckFuc3dlcklkKHJ1bGVFeHAsIGFuc3dlcik7XHJcbiAgICAgIHJ1bGVFeHBSZXN1bHRBcnIucHVzaChpc1Jlc3VsdCk7XHJcbiAgICB9KVxyXG5cclxuICAgIGlmIChydWxlRXhwUmVzdWx0QXJyLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHJ1bGVFeHAucnVsZUV4cEFuc3dlcnMubGVuZ3RoID09IDEpIHtcclxuICAgICAgcmV0dXJuIHJ1bGVFeHBSZXN1bHRBcnIuZmlsdGVyKHggPT4geCA9PSB0cnVlKS5sZW5ndGggPiAwXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChydWxlRXhwLm9wcG9yYXRvciA9PSBPcGVyYXRvckVudW0uT3IpIHtcclxuICAgICAgcmV0dXJuIHJ1bGVFeHBSZXN1bHRBcnIuZmlsdGVyKHggPT4geCA9PSB0cnVlKS5sZW5ndGggPiAwXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gcnVsZUV4cFJlc3VsdEFyci5maWx0ZXIoeCA9PiB4ID09IGZhbHNlKS5sZW5ndGggPT0gMFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja1J1bGVFeHBGb3JBbnN3ZXJUZXh0KHJ1bGVFeHA6IFJ1bGVFeHBEdG8sIGFuc3dlcjogc3RyaW5nKSB7XHJcbiAgICB2YXIgcnVsZUV4cFJlc3VsdEFycjogYm9vbGVhbltdID0gW107XHJcbiAgICBpZiAocnVsZUV4cC5sb2dpY1Byb3BlcnR5SWQgPT0gTG9naWNQcm9wZXJ0eUVudW0uSXNFbXB0eSkge1xyXG5cclxuICAgICAgdmFyIHJlc3VsdCA9IGFuc3dlciA9PSBudWxsIHx8IGFuc3dlciA9PSAnJ1xyXG4gICAgICBydWxlRXhwUmVzdWx0QXJyLnB1c2gocmVzdWx0KTtcclxuXHJcbiAgICB9IGVsc2UgaWYgKHJ1bGVFeHAubG9naWNQcm9wZXJ0eUlkID09IExvZ2ljUHJvcGVydHlFbnVtLklzTm90RW1wdHkpIHtcclxuXHJcbiAgICAgIHZhciByZXN1bHQgPSBhbnN3ZXIgIT0gbnVsbCAmJiBhbnN3ZXIgIT0gJydcclxuICAgICAgcnVsZUV4cFJlc3VsdEFyci5wdXNoKHJlc3VsdCk7XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAocnVsZUV4cC5ydWxlRXhwQW5zd2Vycy5sZW5ndGggPT0gMSkge1xyXG4gICAgICByZXR1cm4gcnVsZUV4cFJlc3VsdEFyci5maWx0ZXIoeCA9PiB4ID09IHRydWUpLmxlbmd0aCA+IDBcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHJ1bGVFeHAub3Bwb3JhdG9yID09IE9wZXJhdG9yRW51bS5Pcikge1xyXG4gICAgICByZXR1cm4gcnVsZUV4cFJlc3VsdEFyci5maWx0ZXIoeCA9PiB4ID09IHRydWUpLmxlbmd0aCA+IDBcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBydWxlRXhwUmVzdWx0QXJyLmZpbHRlcih4ID0+IHggPT0gZmFsc2UpLmxlbmd0aCA9PSAwXHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENoZWNrUnVsZXNVc2VjYXNlTW9kZWwge1xyXG4gIHJ1bGVFeHBzOiBSdWxlRXhwRHRvW107XHJcbiAgcXVlc3Rpb25zOiBRdWVzdGlvbkNoaWxkT2ZTdXJ2ZXJ5TGliRm9ybUludGVyZmFjZVtdO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hlY2tSdWxlc1VzZWNhc2VSZXN1bHQge1xyXG4gIGV4cHJlc3Rpb25SZXN1bHRBcnI6IGJvb2xlYW5bXTtcclxufSJdfQ==
|