UNPKG

kwikid-forms

Version:

KwikID's JSON Configuration based Forms Renderer and Builder

114 lines 19.1 kB
import { __awaiter, __decorate } from "tslib"; /* eslint-disable no-unused-vars */ /* eslint-disable @typescript-eslint/no-unused-vars */ import { Action, Condition, Rule, Source, checkObjectKeyExists, isEmptyValue, isNotEmptyValue, logMethod, setValueToObjectPath } from "kwikid-toolkit"; import { convertFormFieldEmptyValueToKwikUIFormat } from "./form-view.fields.helper"; export class Defaults { constructor(field, object, takeAction) { this._field = field; this._object = object; this._takeAction = takeAction; } get object() { return this._object; } set object(value) { this._object = value; } getFormFieldValue() { return __awaiter(this, void 0, void 0, function* () { let defaultValue; if (checkObjectKeyExists(this._field.default.value, "value") && isNotEmptyValue(this._field.default.value.value)) { defaultValue = this._field.default.value.value; if (isEmptyValue(defaultValue)) { defaultValue = convertFormFieldEmptyValueToKwikUIFormat(this._field); } } else if (!checkObjectKeyExists(this._field.default.value, "sources")) { const engine = this._field.default.value; const { triggers, rules, actions } = engine; const rulesMapping = new Rule(rules, Object.assign(Object.assign({}, this._object), { FIELD_CONFIG: this._field })).mapping(); for (const action of actions) { const conditionEvaluation = new Condition(action.condition, rulesMapping).evaluate(); if (conditionEvaluation) { const actions = new Action(action, rulesMapping, Object.assign(Object.assign({}, this._object), { FIELD_CONFIG: this._field }), this._takeAction); yield actions.execute(); } } defaultValue = this._field.default.value.value; if (isEmptyValue(defaultValue)) { defaultValue = convertFormFieldEmptyValueToKwikUIFormat(this._field); } } else { const { sources } = this._field.default.value; let sourceIndex = 0; for (const source of sources) { const sources = new Source(Object.assign(Object.assign({}, this._object), { FIELD_CONFIG: this._field })); const value = sources.getValueFromSource(source); // Set the Value of current source. this._field = setValueToObjectPath(this._field, `default.value.sources.[${sourceIndex}].value`, value); const { validation } = source; const { triggers } = validation; const { rules } = validation; const { actions } = validation; const rulesMapping = new Rule(rules, Object.assign(Object.assign({}, this._object), { FIELD_CONFIG: this._field })).mapping(); for (const action of actions) { const conditionEvaluation = new Condition(action.condition, rulesMapping).evaluate(); if (conditionEvaluation) { const actions = new Action(action, rulesMapping, Object.assign(Object.assign({}, this._object), { FIELD_CONFIG: this._field }), this._takeAction); yield actions.execute(); } } sourceIndex += 1; } defaultValue = this._field.default.value.value; if (isEmptyValue(defaultValue)) { defaultValue = convertFormFieldEmptyValueToKwikUIFormat(this._field); } } return defaultValue; }); } getFormFieldApiValue() { return __awaiter(this, void 0, void 0, function* () { const apiConfig = this._field.default.api; const { rules } = apiConfig; const { actions } = apiConfig; const rulesMapping = new Rule(rules, Object.assign(Object.assign({}, this._object), { FIELD_CONFIG: this._field })).mapping(); for (const action of actions) { const conditionEvaluation = new Condition(action.condition, rulesMapping).evaluate(); if (conditionEvaluation) { const actions = new Action(action, rulesMapping, Object.assign(Object.assign({}, this._object), { FIELD_CONFIG: this._field }), this._takeAction); yield actions.execute(); } } }); } getFormFieldOptions() { return __awaiter(this, void 0, void 0, function* () { const optionsConfig = this._field.default.options; const { rules } = optionsConfig; const { actions } = optionsConfig; const rulesMapping = new Rule(rules, Object.assign(Object.assign({}, this._object), { FIELD_CONFIG: this._field })).mapping(); for (const action of actions) { const conditionEvaluation = new Condition(action.condition, rulesMapping).evaluate(); if (conditionEvaluation) { const actions = new Action(action, rulesMapping, Object.assign(Object.assign({}, this._object), { FIELD_CONFIG: this._field }), this._takeAction); yield actions.execute(); } } }); } } __decorate([ logMethod ], Defaults.prototype, "getFormFieldValue", null); __decorate([ logMethod ], Defaults.prototype, "getFormFieldApiValue", null); __decorate([ logMethod ], Defaults.prototype, "getFormFieldOptions", null); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LmRlZmF1bHRzLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1mb3Jtcy9zcmMvbGliL3JlbmRlcmVyL2Zvcm0tdmlldy9oZWxwZXJzL2Zvcm0tdmlldy5kZWZhdWx0cy5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLG1DQUFtQztBQUNuQyxzREFBc0Q7QUFDdEQsT0FBTyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsSUFBSSxFQUNKLE1BQU0sRUFFTixvQkFBb0IsRUFDcEIsWUFBWSxFQUNaLGVBQWUsRUFDZixTQUFTLEVBQ1Qsb0JBQW9CLEVBQ3JCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFckYsTUFBTSxPQUFPLFFBQVE7SUFlbkIsWUFBWSxLQUFhLEVBQUUsTUFBVyxFQUFFLFVBQWU7UUFDckQsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7SUFDaEMsQ0FBQztJQWhCRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLEtBQVU7UUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDdkIsQ0FBQztJQWFLLGlCQUFpQjs7WUFDckIsSUFBSSxZQUFpQixDQUFDO1lBRXRCLElBQ0Usb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQztnQkFDeEQsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFDaEQ7Z0JBQ0EsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBRS9DLElBQUksWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFO29CQUM5QixZQUFZLEdBQUcsd0NBQXdDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUN0RTthQUNGO2lCQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEVBQUU7Z0JBQ3RFLE1BQU0sTUFBTSxHQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQVksQ0FBQztnQkFFekQsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDO2dCQUU1QyxNQUFNLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLGtDQUM5QixJQUFJLENBQUMsT0FBTyxLQUNmLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxJQUN6QixDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUViLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO29CQUM1QixNQUFNLG1CQUFtQixHQUFHLElBQUksU0FBUyxDQUN2QyxNQUFNLENBQUMsU0FBUyxFQUNoQixZQUFZLENBQ2IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFFYixJQUFJLG1CQUFtQixFQUFFO3dCQUN2QixNQUFNLE9BQU8sR0FBRyxJQUFJLE1BQU0sQ0FDeEIsTUFBTSxFQUNOLFlBQVksa0NBRVAsSUFBSSxDQUFDLE9BQU8sS0FDZixZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sS0FFM0IsSUFBSSxDQUFDLFdBQVcsQ0FDakIsQ0FBQzt3QkFFRixNQUFNLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztxQkFDekI7aUJBQ0Y7Z0JBRUQsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBRS9DLElBQUksWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFO29CQUM5QixZQUFZLEdBQUcsd0NBQXdDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUN0RTthQUNGO2lCQUFNO2dCQUNMLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBRTlDLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztnQkFDcEIsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUU7b0JBQzVCLE1BQU0sT0FBTyxHQUFHLElBQUksTUFBTSxpQ0FDckIsSUFBSSxDQUFDLE9BQU8sS0FDZixZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sSUFDekIsQ0FBQztvQkFDSCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBRWpELG1DQUFtQztvQkFDbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxvQkFBb0IsQ0FDaEMsSUFBSSxDQUFDLE1BQU0sRUFDWCwwQkFBMEIsV0FBVyxTQUFTLEVBQzlDLEtBQUssQ0FDTixDQUFDO29CQUVGLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFhLENBQUM7b0JBRXJDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7b0JBQ2hDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxVQUFVLENBQUM7b0JBQzdCLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxVQUFVLENBQUM7b0JBRS9CLE1BQU0sWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssa0NBQzlCLElBQUksQ0FBQyxPQUFPLEtBQ2YsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQ3pCLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBRWIsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUU7d0JBQzVCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxTQUFTLENBQ3ZDLE1BQU0sQ0FBQyxTQUFTLEVBQ2hCLFlBQVksQ0FDYixDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUViLElBQUksbUJBQW1CLEVBQUU7NEJBQ3ZCLE1BQU0sT0FBTyxHQUFHLElBQUksTUFBTSxDQUN4QixNQUFNLEVBQ04sWUFBWSxrQ0FFUCxJQUFJLENBQUMsT0FBTyxLQUNmLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxLQUUzQixJQUFJLENBQUMsV0FBVyxDQUNqQixDQUFDOzRCQUVGLE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO3lCQUN6QjtxQkFDRjtvQkFFRCxXQUFXLElBQUksQ0FBQyxDQUFDO2lCQUNsQjtnQkFFRCxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztnQkFFL0MsSUFBSSxZQUFZLENBQUMsWUFBWSxDQUFDLEVBQUU7b0JBQzlCLFlBQVksR0FBRyx3Q0FBd0MsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3RFO2FBQ0Y7WUFFRCxPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDO0tBQUE7SUFHSyxvQkFBb0I7O1lBQ3hCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUUxQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsU0FBUyxDQUFDO1lBQzVCLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxTQUFTLENBQUM7WUFFOUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxrQ0FDOUIsSUFBSSxDQUFDLE9BQU8sS0FDZixZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sSUFDekIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUViLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO2dCQUM1QixNQUFNLG1CQUFtQixHQUFHLElBQUksU0FBUyxDQUN2QyxNQUFNLENBQUMsU0FBUyxFQUNoQixZQUFZLENBQ2IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFFYixJQUFJLG1CQUFtQixFQUFFO29CQUN2QixNQUFNLE9BQU8sR0FBRyxJQUFJLE1BQU0sQ0FDeEIsTUFBTSxFQUNOLFlBQVksa0NBRVAsSUFBSSxDQUFDLE9BQU8sS0FDZixZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sS0FFM0IsSUFBSSxDQUFDLFdBQVcsQ0FDakIsQ0FBQztvQkFFRixNQUFNLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztpQkFDekI7YUFDRjtRQUNILENBQUM7S0FBQTtJQUdLLG1CQUFtQjs7WUFDdkIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBRWxELE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxhQUFhLENBQUM7WUFDaEMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLGFBQWEsQ0FBQztZQUVsQyxNQUFNLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLGtDQUM5QixJQUFJLENBQUMsT0FBTyxLQUNmLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxJQUN6QixDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRWIsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUU7Z0JBQzVCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxTQUFTLENBQ3ZDLE1BQU0sQ0FBQyxTQUFTLEVBQ2hCLFlBQVksQ0FDYixDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUViLElBQUksbUJBQW1CLEVBQUU7b0JBQ3ZCLE1BQU0sT0FBTyxHQUFHLElBQUksTUFBTSxDQUN4QixNQUFNLEVBQ04sWUFBWSxrQ0FFUCxJQUFJLENBQUMsT0FBTyxLQUNmLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxLQUUzQixJQUFJLENBQUMsV0FBVyxDQUNqQixDQUFDO29CQUVGLE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUN6QjthQUNGO1FBQ0gsQ0FBQztLQUFBO0NBQ0Y7QUFsTEM7SUFEQyxTQUFTO2lEQThHVDtBQUdEO0lBREMsU0FBUztvREFnQ1Q7QUFHRDtJQURDLFNBQVM7bURBZ0NUIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuaW1wb3J0IHtcbiAgQWN0aW9uLFxuICBDb25kaXRpb24sXG4gIFJ1bGUsXG4gIFNvdXJjZSxcbiAgVEVuZ2luZSxcbiAgY2hlY2tPYmplY3RLZXlFeGlzdHMsXG4gIGlzRW1wdHlWYWx1ZSxcbiAgaXNOb3RFbXB0eVZhbHVlLFxuICBsb2dNZXRob2QsXG4gIHNldFZhbHVlVG9PYmplY3RQYXRoXG59IGZyb20gXCJrd2lraWQtdG9vbGtpdFwiO1xuaW1wb3J0IHsgVEZpZWxkIH0gZnJvbSBcIi4uL2RlZmluaXRpb25zL2Zvcm0tdmlldy5maWVsZHMuZGVmaW5pdGlvblwiO1xuaW1wb3J0IHsgY29udmVydEZvcm1GaWVsZEVtcHR5VmFsdWVUb0t3aWtVSUZvcm1hdCB9IGZyb20gXCIuL2Zvcm0tdmlldy5maWVsZHMuaGVscGVyXCI7XG5cbmV4cG9ydCBjbGFzcyBEZWZhdWx0cyB7XG4gIHByaXZhdGUgX29iamVjdDogYW55O1xuXG4gIGdldCBvYmplY3QoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fb2JqZWN0O1xuICB9XG5cbiAgc2V0IG9iamVjdCh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fb2JqZWN0ID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9maWVsZDogYW55O1xuXG4gIHByaXZhdGUgX3Rha2VBY3Rpb246IGFueTtcblxuICBjb25zdHJ1Y3RvcihmaWVsZDogVEZpZWxkLCBvYmplY3Q6IGFueSwgdGFrZUFjdGlvbjogYW55KSB7XG4gICAgdGhpcy5fZmllbGQgPSBmaWVsZDtcbiAgICB0aGlzLl9vYmplY3QgPSBvYmplY3Q7XG4gICAgdGhpcy5fdGFrZUFjdGlvbiA9IHRha2VBY3Rpb247XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGdldEZvcm1GaWVsZFZhbHVlKCkge1xuICAgIGxldCBkZWZhdWx0VmFsdWU6IGFueTtcblxuICAgIGlmIChcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuX2ZpZWxkLmRlZmF1bHQudmFsdWUsIFwidmFsdWVcIikgJiZcbiAgICAgIGlzTm90RW1wdHlWYWx1ZSh0aGlzLl9maWVsZC5kZWZhdWx0LnZhbHVlLnZhbHVlKVxuICAgICkge1xuICAgICAgZGVmYXVsdFZhbHVlID0gdGhpcy5fZmllbGQuZGVmYXVsdC52YWx1ZS52YWx1ZTtcblxuICAgICAgaWYgKGlzRW1wdHlWYWx1ZShkZWZhdWx0VmFsdWUpKSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IGNvbnZlcnRGb3JtRmllbGRFbXB0eVZhbHVlVG9Ld2lrVUlGb3JtYXQodGhpcy5fZmllbGQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuX2ZpZWxkLmRlZmF1bHQudmFsdWUsIFwic291cmNlc1wiKSkge1xuICAgICAgY29uc3QgZW5naW5lOiBURW5naW5lID0gdGhpcy5fZmllbGQuZGVmYXVsdC52YWx1ZSBhcyBhbnk7XG5cbiAgICAgIGNvbnN0IHsgdHJpZ2dlcnMsIHJ1bGVzLCBhY3Rpb25zIH0gPSBlbmdpbmU7XG5cbiAgICAgIGNvbnN0IHJ1bGVzTWFwcGluZyA9IG5ldyBSdWxlKHJ1bGVzLCB7XG4gICAgICAgIC4uLnRoaXMuX29iamVjdCxcbiAgICAgICAgRklFTERfQ09ORklHOiB0aGlzLl9maWVsZFxuICAgICAgfSkubWFwcGluZygpO1xuXG4gICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbkV2YWx1YXRpb24gPSBuZXcgQ29uZGl0aW9uKFxuICAgICAgICAgIGFjdGlvbi5jb25kaXRpb24sXG4gICAgICAgICAgcnVsZXNNYXBwaW5nXG4gICAgICAgICkuZXZhbHVhdGUoKTtcblxuICAgICAgICBpZiAoY29uZGl0aW9uRXZhbHVhdGlvbikge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSBuZXcgQWN0aW9uKFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgcnVsZXNNYXBwaW5nLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi50aGlzLl9vYmplY3QsXG4gICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogdGhpcy5fZmllbGRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLl90YWtlQWN0aW9uXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGF3YWl0IGFjdGlvbnMuZXhlY3V0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHRWYWx1ZSA9IHRoaXMuX2ZpZWxkLmRlZmF1bHQudmFsdWUudmFsdWU7XG5cbiAgICAgIGlmIChpc0VtcHR5VmFsdWUoZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICBkZWZhdWx0VmFsdWUgPSBjb252ZXJ0Rm9ybUZpZWxkRW1wdHlWYWx1ZVRvS3dpa1VJRm9ybWF0KHRoaXMuX2ZpZWxkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgeyBzb3VyY2VzIH0gPSB0aGlzLl9maWVsZC5kZWZhdWx0LnZhbHVlO1xuXG4gICAgICBsZXQgc291cmNlSW5kZXggPSAwO1xuICAgICAgZm9yIChjb25zdCBzb3VyY2Ugb2Ygc291cmNlcykge1xuICAgICAgICBjb25zdCBzb3VyY2VzID0gbmV3IFNvdXJjZSh7XG4gICAgICAgICAgLi4udGhpcy5fb2JqZWN0LFxuICAgICAgICAgIEZJRUxEX0NPTkZJRzogdGhpcy5fZmllbGRcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gc291cmNlcy5nZXRWYWx1ZUZyb21Tb3VyY2Uoc291cmNlKTtcblxuICAgICAgICAvLyBTZXQgdGhlIFZhbHVlIG9mIGN1cnJlbnQgc291cmNlLlxuICAgICAgICB0aGlzLl9maWVsZCA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICAgIHRoaXMuX2ZpZWxkLFxuICAgICAgICAgIGBkZWZhdWx0LnZhbHVlLnNvdXJjZXMuWyR7c291cmNlSW5kZXh9XS52YWx1ZWAsXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCB7IHZhbGlkYXRpb24gfSA9IHNvdXJjZSBhcyBhbnk7XG5cbiAgICAgICAgY29uc3QgeyB0cmlnZ2VycyB9ID0gdmFsaWRhdGlvbjtcbiAgICAgICAgY29uc3QgeyBydWxlcyB9ID0gdmFsaWRhdGlvbjtcbiAgICAgICAgY29uc3QgeyBhY3Rpb25zIH0gPSB2YWxpZGF0aW9uO1xuXG4gICAgICAgIGNvbnN0IHJ1bGVzTWFwcGluZyA9IG5ldyBSdWxlKHJ1bGVzLCB7XG4gICAgICAgICAgLi4udGhpcy5fb2JqZWN0LFxuICAgICAgICAgIEZJRUxEX0NPTkZJRzogdGhpcy5fZmllbGRcbiAgICAgICAgfSkubWFwcGluZygpO1xuXG4gICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgICBjb25zdCBjb25kaXRpb25FdmFsdWF0aW9uID0gbmV3IENvbmRpdGlvbihcbiAgICAgICAgICAgIGFjdGlvbi5jb25kaXRpb24sXG4gICAgICAgICAgICBydWxlc01hcHBpbmdcbiAgICAgICAgICApLmV2YWx1YXRlKCk7XG5cbiAgICAgICAgICBpZiAoY29uZGl0aW9uRXZhbHVhdGlvbikge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9ucyA9IG5ldyBBY3Rpb24oXG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgcnVsZXNNYXBwaW5nLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5fb2JqZWN0LFxuICAgICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogdGhpcy5fZmllbGRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdGhpcy5fdGFrZUFjdGlvblxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYXdhaXQgYWN0aW9ucy5leGVjdXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc291cmNlSW5kZXggKz0gMTtcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdFZhbHVlID0gdGhpcy5fZmllbGQuZGVmYXVsdC52YWx1ZS52YWx1ZTtcblxuICAgICAgaWYgKGlzRW1wdHlWYWx1ZShkZWZhdWx0VmFsdWUpKSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IGNvbnZlcnRGb3JtRmllbGRFbXB0eVZhbHVlVG9Ld2lrVUlGb3JtYXQodGhpcy5fZmllbGQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGdldEZvcm1GaWVsZEFwaVZhbHVlKCkge1xuICAgIGNvbnN0IGFwaUNvbmZpZyA9IHRoaXMuX2ZpZWxkLmRlZmF1bHQuYXBpO1xuXG4gICAgY29uc3QgeyBydWxlcyB9ID0gYXBpQ29uZmlnO1xuICAgIGNvbnN0IHsgYWN0aW9ucyB9ID0gYXBpQ29uZmlnO1xuXG4gICAgY29uc3QgcnVsZXNNYXBwaW5nID0gbmV3IFJ1bGUocnVsZXMsIHtcbiAgICAgIC4uLnRoaXMuX29iamVjdCxcbiAgICAgIEZJRUxEX0NPTkZJRzogdGhpcy5fZmllbGRcbiAgICB9KS5tYXBwaW5nKCk7XG5cbiAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XG4gICAgICBjb25zdCBjb25kaXRpb25FdmFsdWF0aW9uID0gbmV3IENvbmRpdGlvbihcbiAgICAgICAgYWN0aW9uLmNvbmRpdGlvbixcbiAgICAgICAgcnVsZXNNYXBwaW5nXG4gICAgICApLmV2YWx1YXRlKCk7XG5cbiAgICAgIGlmIChjb25kaXRpb25FdmFsdWF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbnMgPSBuZXcgQWN0aW9uKFxuICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICBydWxlc01hcHBpbmcsXG4gICAgICAgICAge1xuICAgICAgICAgICAgLi4udGhpcy5fb2JqZWN0LFxuICAgICAgICAgICAgRklFTERfQ09ORklHOiB0aGlzLl9maWVsZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5fdGFrZUFjdGlvblxuICAgICAgICApO1xuXG4gICAgICAgIGF3YWl0IGFjdGlvbnMuZXhlY3V0ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgZ2V0Rm9ybUZpZWxkT3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25zQ29uZmlnID0gdGhpcy5fZmllbGQuZGVmYXVsdC5vcHRpb25zO1xuXG4gICAgY29uc3QgeyBydWxlcyB9ID0gb3B0aW9uc0NvbmZpZztcbiAgICBjb25zdCB7IGFjdGlvbnMgfSA9IG9wdGlvbnNDb25maWc7XG5cbiAgICBjb25zdCBydWxlc01hcHBpbmcgPSBuZXcgUnVsZShydWxlcywge1xuICAgICAgLi4udGhpcy5fb2JqZWN0LFxuICAgICAgRklFTERfQ09ORklHOiB0aGlzLl9maWVsZFxuICAgIH0pLm1hcHBpbmcoKTtcblxuICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgIGNvbnN0IGNvbmRpdGlvbkV2YWx1YXRpb24gPSBuZXcgQ29uZGl0aW9uKFxuICAgICAgICBhY3Rpb24uY29uZGl0aW9uLFxuICAgICAgICBydWxlc01hcHBpbmdcbiAgICAgICkuZXZhbHVhdGUoKTtcblxuICAgICAgaWYgKGNvbmRpdGlvbkV2YWx1YXRpb24pIHtcbiAgICAgICAgY29uc3QgYWN0aW9ucyA9IG5ldyBBY3Rpb24oXG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIHJ1bGVzTWFwcGluZyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICAuLi50aGlzLl9vYmplY3QsXG4gICAgICAgICAgICBGSUVMRF9DT05GSUc6IHRoaXMuX2ZpZWxkXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLl90YWtlQWN0aW9uXG4gICAgICAgICk7XG5cbiAgICAgICAgYXdhaXQgYWN0aW9ucy5leGVjdXRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=