tuain-ng-forms-lib
Version:
Componentes y Clases Angular para la gestión de formularios TUAIN
139 lines • 22.3 kB
JavaScript
import { Subject, takeUntil } from 'rxjs';
export class FormPiece {
destroy$ = new Subject();
_formState = '';
_visibleForced;
_isForced;
_absoluteVisible = true;
_absoluteDisabled = false;
_widget = null;
visibleStates = [];
enabledStates = [];
_form = null;
_formConfig;
_visible = true;
_disabled = false;
customAttributes = {};
constructor(pieceDefinition, formConfig) {
this._formConfig = formConfig;
this._isForced = false;
this._visibleForced = false;
this.setVisibleStates(pieceDefinition.visibleStates);
this.setEnabledStates(pieceDefinition.enabledStates);
this.enabled = !pieceDefinition?.disabled;
this.setVisibility(pieceDefinition?.visible ?? true);
this.customAttributes = pieceDefinition?.customAttributes ?? {};
if (pieceDefinition?.customAttributes) {
Object.keys(pieceDefinition?.customAttributes)
?.forEach(attr => this.customAttributes[attr] = pieceDefinition?.customAttributes?.[attr]);
}
}
getCustomAttribute(name) { return this.customAttributes?.[name] ?? null; }
setCustomAttribute(name, value) { if (name) {
this.customAttributes[name] = value;
} }
setCustomAttributes(attributes) {
Object.entries(attributes).forEach(([name, value]) => {
this.setCustomAttribute(name, value);
});
return this;
}
matchAttribute(name, value) { return this.customAttributes?.[name] === value; }
setVisibleStates(newStates) {
const visibleStates = (!Array.isArray(newStates) && typeof newStates === 'string')
? newStates.split(',').map(state => state.trim()).filter(state => state.length > 0)
: newStates;
this.visibleStates = (Array.isArray(visibleStates)) ? [...(new Set(visibleStates))] : [];
}
addVisibleState(state) {
if (!this.visibleStates.includes(state)) {
this.visibleStates.push(state);
}
}
removeVisibleState(state) {
const existStateIdx = this.visibleStates.findIndex(st => st === state);
if (existStateIdx >= 0) {
this.visibleStates.splice(existStateIdx, 1);
}
}
setEnabledStates(newStates) {
const enabledStates = (!Array.isArray(newStates) && typeof newStates === 'string')
? newStates.split(',').map(state => state.trim()).filter(state => state.length > 0)
: newStates;
this.enabledStates = (Array.isArray(enabledStates)) ? [...(new Set(enabledStates))] : [];
}
addEnabledState(state) {
if (!this.enabledStates.includes(state)) {
this.enabledStates.push(state);
}
}
removeEnabledState(state) {
const existStateIdx = this.enabledStates.findIndex(st => st === state);
if (existStateIdx >= 0) {
this.enabledStates.splice(existStateIdx, 1);
}
}
viewOnState(state) { return (this.visibleStates && state) ? this.visibleStates.includes(state) : false; }
enabledOnState(state) { return (this.enabledStates && state) ? this.enabledStates.includes(state) : false; }
get absoluteVisible() { return this._absoluteVisible; }
get absoluteDisabled() { return this._absoluteDisabled; }
get visible() { return this._visible; }
set visible(visible) { this.setVisibility(visible); }
visibleOn(state) {
return this._absoluteVisible && this.viewOnState(state);
}
enabledOn(state) {
return !this._absoluteDisabled && this.enabledOnState(state);
}
setVisibility(visible, forced = null) {
this._absoluteVisible = !!visible;
if (forced !== null) {
this._isForced = forced;
this._visibleForced = visible;
}
this._visible = this._absoluteVisible && this.viewOnState(this._formState);
}
show(forced = null) {
this.setVisibility(true, forced);
}
hide(forced = null) {
this.setVisibility(false, forced);
}
get enabled() { return !this._disabled; }
set enabled(enabled) {
this._absoluteDisabled = !enabled;
this._disabled = this._absoluteDisabled || !this.enabledOnState(this._formState);
}
get editable() { return !this._disabled; }
get disabled() { return this._disabled; }
set disabled(disabled) { this.enabled = !disabled; }
enable() { this.enabled = true; }
disable() { this.enabled = false; }
formStateChangeCustomSubscribe(form, formChangeSubject) { }
formStateChange(state) {
if (state) {
this._formState = state;
this._visible = this._absoluteVisible && this.viewOnState(state);
this._disabled = this._absoluteDisabled || !this.enabledOnState(state);
}
}
connectWithParentForm(form, formChangeSubject) {
this._form = form;
this.formStateChangeCustomSubscribe(form, formChangeSubject);
formChangeSubject
.pipe(takeUntil(this.destroy$))
.subscribe({
next: (event) => this.formStateChange(event?.state),
error: (err) => console.error(`Error en formStateChange subscription: ${err}`)
});
}
get form() { return this._form; }
get formConfig() { return this._formConfig; }
set widget(widget) { this._widget = widget; }
get widget() { return this._widget; }
destroy() {
this.destroy$.next();
this.destroy$.complete();
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGllY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWFpbi1uZy1mb3Jtcy1saWIvc3JjL2xpYi9jbGFzc2VzL2Zvcm1zL3BpZWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzFDLE1BQU0sT0FBZ0IsU0FBUztJQUNuQixRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUUvQixVQUFVLEdBQVcsRUFBRSxDQUFDO0lBQ3hCLGNBQWMsQ0FBVTtJQUN4QixTQUFTLENBQVU7SUFDbkIsZ0JBQWdCLEdBQVksSUFBSSxDQUFDO0lBQ2pDLGlCQUFpQixHQUFZLEtBQUssQ0FBQztJQUNuQyxPQUFPLEdBQVEsSUFBSSxDQUFDO0lBRXBCLGFBQWEsR0FBYSxFQUFFLENBQUM7SUFDN0IsYUFBYSxHQUFhLEVBQUUsQ0FBQztJQUU3QixLQUFLLEdBQVEsSUFBSSxDQUFDO0lBQ2xCLFdBQVcsQ0FBYztJQUN6QixRQUFRLEdBQVksSUFBSSxDQUFDO0lBQ3pCLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDOUIsZ0JBQWdCLEdBQXdCLEVBQUUsQ0FBQztJQUVsRCxZQUFZLGVBQWdDLEVBQUUsVUFBdUI7UUFDbkUsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXJELElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxlQUFlLEVBQUUsUUFBUSxDQUFDO1FBQzFDLElBQUksQ0FBQyxhQUFhLENB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LEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRm9ybVN0YXRlRXZlbnQsIElGb3JtQ29uZmlnLCBQaWVjZURlZmluaXRpb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2Zvcm0tY29uZmlnLmludGVyZmFjZSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBGb3JtUGllY2Uge1xuICBwcm90ZWN0ZWQgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByb3RlY3RlZCBfZm9ybVN0YXRlOiBzdHJpbmcgPSAnJztcbiAgcHJvdGVjdGVkIF92aXNpYmxlRm9yY2VkOiBib29sZWFuO1xuICBwcm90ZWN0ZWQgX2lzRm9yY2VkOiBib29sZWFuO1xuICBwcm90ZWN0ZWQgX2Fic29sdXRlVmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIHByb3RlY3RlZCBfYWJzb2x1dGVEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgX3dpZGdldDogYW55ID0gbnVsbDtcblxuICBwcm90ZWN0ZWQgdmlzaWJsZVN0YXRlczogc3RyaW5nW10gPSBbXTtcbiAgcHJvdGVjdGVkIGVuYWJsZWRTdGF0ZXM6IHN0cmluZ1tdID0gW107XG5cbiAgcHJvdGVjdGVkIF9mb3JtOiBhbnkgPSBudWxsO1xuICBwcm90ZWN0ZWQgX2Zvcm1Db25maWc6IElGb3JtQ29uZmlnO1xuICBwcm90ZWN0ZWQgX3Zpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xuICBwcm90ZWN0ZWQgX2Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBjdXN0b21BdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgY29uc3RydWN0b3IocGllY2VEZWZpbml0aW9uOiBQaWVjZURlZmluaXRpb24sIGZvcm1Db25maWc6IElGb3JtQ29uZmlnKSB7XG4gICAgdGhpcy5fZm9ybUNvbmZpZyA9IGZvcm1Db25maWc7XG4gICAgdGhpcy5faXNGb3JjZWQgPSBmYWxzZTtcbiAgICB0aGlzLl92aXNpYmxlRm9yY2VkID0gZmFsc2U7XG4gICAgdGhpcy5zZXRWaXNpYmxlU3RhdGVzKHBpZWNlRGVmaW5pdGlvbi52aXNpYmxlU3RhdGVzKTtcbiAgICB0aGlzLnNldEVuYWJsZWRTdGF0ZXMocGllY2VEZWZpbml0aW9uLmVuYWJsZWRTdGF0ZXMpO1xuXG4gICAgdGhpcy5lbmFibGVkID0gIXBpZWNlRGVmaW5pdGlvbj8uZGlzYWJsZWQ7XG4gICAgdGhpcy5zZXRWaXNpYmlsaXR5KHBpZWNlRGVmaW5pdGlvbj8udmlzaWJsZSA/PyB0cnVlKTtcbiAgICB0aGlzLmN1c3RvbUF0dHJpYnV0ZXMgPSBwaWVjZURlZmluaXRpb24/LmN1c3RvbUF0dHJpYnV0ZXMgPz8ge307XG4gICAgaWYgKHBpZWNlRGVmaW5pdGlvbj8uY3VzdG9tQXR0cmlidXRlcykge1xuICAgICAgT2JqZWN0LmtleXMocGllY2VEZWZpbml0aW9uPy5jdXN0b21BdHRyaWJ1dGVzKVxuICAgICAgICA/LmZvckVhY2goYXR0ciA9PiB0aGlzLmN1c3RvbUF0dHJpYnV0ZXNbYXR0cl0gPSBwaWVjZURlZmluaXRpb24/LmN1c3RvbUF0dHJpYnV0ZXM/LlthdHRyXSlcbiAgICB9XG4gIH1cblxuICBnZXRDdXN0b21BdHRyaWJ1dGUobmFtZTogc3RyaW5nKTogYW55IHsgcmV0dXJuIHRoaXMuY3VzdG9tQXR0cmlidXRlcz8uW25hbWVdID8/IG51bGw7IH1cbiAgc2V0Q3VzdG9tQXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQgeyBpZiAobmFtZSkgeyB0aGlzLmN1c3RvbUF0dHJpYnV0ZXNbbmFtZV0gPSB2YWx1ZTsgfSB9XG5cbiAgc2V0Q3VzdG9tQXR0cmlidXRlcyhhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogRm9ybVBpZWNlIHtcbiAgICBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzKS5mb3JFYWNoKChbbmFtZSwgdmFsdWVdKSA9PiB7XG4gICAgICB0aGlzLnNldEN1c3RvbUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtYXRjaEF0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY3VzdG9tQXR0cmlidXRlcz8uW25hbWVdID09PSB2YWx1ZTsgfVxuXG4gIHNldFZpc2libGVTdGF0ZXMobmV3U3RhdGVzOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCB2aXNpYmxlU3RhdGVzID0gKCFBcnJheS5pc0FycmF5KG5ld1N0YXRlcykgJiYgdHlwZW9mIG5ld1N0YXRlcyA9PT0gJ3N0cmluZycpXG4gICAgICA/IG5ld1N0YXRlcy5zcGxpdCgnLCcpLm1hcChzdGF0ZSA9PiBzdGF0ZS50cmltKCkpLmZpbHRlcihzdGF0ZSA9PiBzdGF0ZS5sZW5ndGggPiAwKVxuICAgICAgOiBuZXdTdGF0ZXM7XG4gICAgdGhpcy52aXNpYmxlU3RhdGVzID0gKEFycmF5LmlzQXJyYXkodmlzaWJsZVN0YXRlcykpID8gWy4uLihuZXcgU2V0KHZpc2libGVTdGF0ZXMpKV0gOiBbXTtcbiAgfVxuXG4gIGFkZFZpc2libGVTdGF0ZShzdGF0ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnZpc2libGVTdGF0ZXMuaW5jbHVkZXMoc3RhdGUpKSB7XG4gICAgICB0aGlzLnZpc2libGVTdGF0ZXMucHVzaChzdGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlVmlzaWJsZVN0YXRlKHN0YXRlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBleGlzdFN0YXRlSWR4ID0gdGhpcy52aXNpYmxlU3RhdGVzLmZpbmRJbmRleChzdCA9PiBzdCA9PT0gc3RhdGUpO1xuICAgIGlmIChleGlzdFN0YXRlSWR4ID49IDApIHtcbiAgICAgIHRoaXMudmlzaWJsZVN0YXRlcy5zcGxpY2UoZXhpc3RTdGF0ZUlkeCwgMSk7XG4gICAgfVxuICB9XG5cbiAgc2V0RW5hYmxlZFN0YXRlcyhuZXdTdGF0ZXM6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGVuYWJsZWRTdGF0ZXMgPSAoIUFycmF5LmlzQXJyYXkobmV3U3RhdGVzKSAmJiB0eXBlb2YgbmV3U3RhdGVzID09PSAnc3RyaW5nJylcbiAgICAgID8gbmV3U3RhdGVzLnNwbGl0KCcsJykubWFwKHN0YXRlID0+IHN0YXRlLnRyaW0oKSkuZmlsdGVyKHN0YXRlID0+IHN0YXRlLmxlbmd0aCA+IDApXG4gICAgICA6IG5ld1N0YXRlcztcbiAgICB0aGlzLmVuYWJsZWRTdGF0ZXMgPSAoQXJyYXkuaXNBcnJheShlbmFibGVkU3RhdGVzKSkgPyBbLi4uKG5ldyBTZXQoZW5hYmxlZFN0YXRlcykpXSA6IFtdO1xuICB9XG5cbiAgYWRkRW5hYmxlZFN0YXRlKHN0YXRlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlZFN0YXRlcy5pbmNsdWRlcyhzdGF0ZSkpIHtcbiAgICAgIHRoaXMuZW5hYmxlZFN0YXRlcy5wdXNoKHN0YXRlKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVFbmFibGVkU3RhdGUoc3RhdGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGV4aXN0U3RhdGVJZHggPSB0aGlzLmVuYWJsZWRTdGF0ZXMuZmluZEluZGV4KHN0ID0+IHN0ID09PSBzdGF0ZSk7XG4gICAgaWYgKGV4aXN0U3RhdGVJZHggPj0gMCkge1xuICAgICAgdGhpcy5lbmFibGVkU3RhdGVzLnNwbGljZShleGlzdFN0YXRlSWR4LCAxKTtcbiAgICB9XG4gIH1cblxuICB2aWV3T25TdGF0ZShzdGF0ZTogc3RyaW5nKTogYm9vbGVhbiB7IHJldHVybiAodGhpcy52aXNpYmxlU3RhdGVzICYmIHN0YXRlKSA/IHRoaXMudmlzaWJsZVN0YXRlcy5pbmNsdWRlcyhzdGF0ZSkgOiBmYWxzZTsgfVxuICBlbmFibGVkT25TdGF0ZShzdGF0ZTogc3RyaW5nKTogYm9vbGVhbiB7IHJldHVybiAodGhpcy5lbmFibGVkU3RhdGVzICYmIHN0YXRlKSA/IHRoaXMuZW5hYmxlZFN0YXRlcy5pbmNsdWRlcyhzdGF0ZSkgOiBmYWxzZTsgfVxuXG4gIGdldCBhYnNvbHV0ZVZpc2libGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9hYnNvbHV0ZVZpc2libGU7IH1cbiAgZ2V0IGFic29sdXRlRGlzYWJsZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9hYnNvbHV0ZURpc2FibGVkOyB9XG5cbiAgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl92aXNpYmxlOyB9XG4gIHNldCB2aXNpYmxlKHZpc2libGU6IGJvb2xlYW4pIHsgdGhpcy5zZXRWaXNpYmlsaXR5KHZpc2libGUpOyB9XG5cbiAgdmlzaWJsZU9uKHN0YXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYWJzb2x1dGVWaXNpYmxlICYmIHRoaXMudmlld09uU3RhdGUoc3RhdGUpO1xuICB9XG5cbiAgZW5hYmxlZE9uKHN0YXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuX2Fic29sdXRlRGlzYWJsZWQgJiYgdGhpcy5lbmFibGVkT25TdGF0ZShzdGF0ZSk7XG4gIH1cblxuICBzZXRWaXNpYmlsaXR5KHZpc2libGU6IGJvb2xlYW4sIGZvcmNlZDogYm9vbGVhbiB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5fYWJzb2x1dGVWaXNpYmxlID0gISF2aXNpYmxlO1xuICAgIGlmIChmb3JjZWQgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX2lzRm9yY2VkID0gZm9yY2VkO1xuICAgICAgdGhpcy5fdmlzaWJsZUZvcmNlZCA9IHZpc2libGU7XG4gICAgfVxuICAgIHRoaXMuX3Zpc2libGUgPSB0aGlzLl9hYnNvbHV0ZVZpc2libGUgJiYgdGhpcy52aWV3T25TdGF0ZSh0aGlzLl9mb3JtU3RhdGUpO1xuICB9XG5cbiAgc2hvdyhmb3JjZWQ6IGJvb2xlYW4gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuc2V0VmlzaWJpbGl0eSh0cnVlLCBmb3JjZWQpO1xuICB9XG5cbiAgaGlkZShmb3JjZWQ6IGJvb2xlYW4gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuc2V0VmlzaWJpbGl0eShmYWxzZSwgZm9yY2VkKTtcbiAgfVxuXG4gIGdldCBlbmFibGVkKCk6IGJvb2xlYW4geyByZXR1cm4gIXRoaXMuX2Rpc2FibGVkOyB9XG4gIHNldCBlbmFibGVkKGVuYWJsZWQpIHtcbiAgICB0aGlzLl9hYnNvbHV0ZURpc2FibGVkID0gIWVuYWJsZWQ7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSB0aGlzLl9hYnNvbHV0ZURpc2FibGVkIHx8ICF0aGlzLmVuYWJsZWRPblN0YXRlKHRoaXMuX2Zvcm1TdGF0ZSk7XG4gIH1cblxuICBnZXQgZWRpdGFibGUoKTogYm9vbGVhbiB7IHJldHVybiAhdGhpcy5fZGlzYWJsZWQ7IH1cblxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9kaXNhYmxlZDsgfVxuXG4gIHNldCBkaXNhYmxlZChkaXNhYmxlZCkgeyB0aGlzLmVuYWJsZWQgPSAhZGlzYWJsZWQ7IH1cblxuICBlbmFibGUoKTogdm9pZCB7IHRoaXMuZW5hYmxlZCA9IHRydWU7IH1cbiAgZGlzYWJsZSgpOiB2b2lkIHsgdGhpcy5lbmFibGVkID0gZmFsc2U7IH1cblxuICBmb3JtU3RhdGVDaGFuZ2VDdXN0b21TdWJzY3JpYmUoZm9ybTogYW55LCBmb3JtQ2hhbmdlU3ViamVjdDogYW55KTogdm9pZCB7IH1cblxuICBmb3JtU3RhdGVDaGFuZ2Uoc3RhdGU6IGFueSk6IHZvaWQge1xuICAgIGlmIChzdGF0ZSkge1xuICAgICAgdGhpcy5fZm9ybVN0YXRlID0gc3RhdGU7XG4gICAgICB0aGlzLl92aXNpYmxlID0gdGhpcy5fYWJzb2x1dGVWaXNpYmxlICYmIHRoaXMudmlld09uU3RhdGUoc3RhdGUpO1xuICAgICAgdGhpcy5fZGlzYWJsZWQgPSB0aGlzLl9hYnNvbHV0ZURpc2FibGVkIHx8ICF0aGlzLmVuYWJsZWRPblN0YXRlKHN0YXRlKTtcbiAgICB9XG4gIH1cblxuICBjb25uZWN0V2l0aFBhcmVudEZvcm0oZm9ybTogYW55LCBmb3JtQ2hhbmdlU3ViamVjdDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fZm9ybSA9IGZvcm07XG4gICAgdGhpcy5mb3JtU3RhdGVDaGFuZ2VDdXN0b21TdWJzY3JpYmUoZm9ybSwgZm9ybUNoYW5nZVN1YmplY3QpO1xuICAgIGZvcm1DaGFuZ2VTdWJqZWN0XG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGV2ZW50OiBGb3JtU3RhdGVFdmVudCkgPT4gdGhpcy5mb3JtU3RhdGVDaGFuZ2UoZXZlbnQ/LnN0YXRlKSxcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4gY29uc29sZS5lcnJvcihgRXJyb3IgZW4gZm9ybVN0YXRlQ2hhbmdlIHN1YnNjcmlwdGlvbjogJHtlcnJ9YClcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0IGZvcm0oKTogYW55IHsgcmV0dXJuIHRoaXMuX2Zvcm07IH1cbiAgZ2V0IGZvcm1Db25maWcoKTogSUZvcm1Db25maWcgeyByZXR1cm4gdGhpcy5fZm9ybUNvbmZpZzsgfVxuXG4gIHNldCB3aWRnZXQod2lkZ2V0KSB7IHRoaXMuX3dpZGdldCA9IHdpZGdldDsgfVxuICBnZXQgd2lkZ2V0KCk6IGFueSB7IHJldHVybiB0aGlzLl93aWRnZXQ7IH1cblxuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxufVxuIl19