kwikui
Version:
KwikID's UI Component Library in Angular
168 lines • 24.9 kB
JavaScript
import { Injectable } from "@angular/core";
import { BehaviorSubject } from "rxjs";
import { throwErrorMessage } from "../../../helpers/kwikui.common.helpers";
import { DEFAULT_VALUES, VALIDATE_KEY_VALUES } from "./toaster.constants";
import { isValidKeyValue } from "./toaster.validation";
import * as i0 from "@angular/core";
export class KwikUIToasterService {
constructor() {
this.showToasterSubject = new BehaviorSubject(false);
this.showToaster = this.showToasterSubject.asObservable();
this.duration = DEFAULT_VALUES.duration;
this.message = DEFAULT_VALUES.message;
this.position = DEFAULT_VALUES.position;
// For custom positioning
this.customPositionStyles = null;
this.offset = DEFAULT_VALUES.offset;
this.shape = DEFAULT_VALUES.shape;
this.size = DEFAULT_VALUES.size;
this.type = DEFAULT_VALUES.type;
this.id = DEFAULT_VALUES.id;
// Custom icons for different toaster types
this.customIcons = {
info: null,
success: null,
warning: null,
error: null
};
this.isShowToaster = false;
for (const inputs of Object.entries(VALIDATE_KEY_VALUES)) {
const key = inputs[0];
const validate = inputs[1];
if (validate) {
this.validateInputProperty(key, this[key]);
}
}
}
validateInputProperty(key, value) {
if (VALIDATE_KEY_VALUES[key] && !isValidKeyValue(key, value)) {
this[key] = DEFAULT_VALUES[key];
throwErrorMessage("kwikui-toaster", this.id, key, value, DEFAULT_VALUES[key]);
}
}
show(options) {
this.clearAutoDismissTimer();
this.showToasterSubject.next(true);
this.isShowToaster = true;
// Reset custom positioning
this.customPositionStyles = null;
if (options) {
this.message = options.message || this.message;
this.type = options.type || this.type;
this.position = options.position || this.position;
this.duration = options.duration || this.duration;
this.shape = options.shape || this.shape;
this.size = options.size || this.size;
// Update offset if provided
if (options.offset) {
this.offset = options.offset;
}
// Update custom icons if provided
if (options.customIcons) {
this.customIcons = {
info: options.customIcons.info !== undefined
? options.customIcons.info
: this.customIcons.info,
success: options.customIcons.success !== undefined
? options.customIcons.success
: this.customIcons.success,
warning: options.customIcons.warning !== undefined
? options.customIcons.warning
: this.customIcons.warning,
error: options.customIcons.error !== undefined
? options.customIcons.error
: this.customIcons.error
};
}
// Calculate position based on standard position + offset
this.calculatePositionWithOffset(this.offset.x, this.offset.y);
}
this.startAutoDismissTimer();
return this.isShowToaster;
}
hide() {
this.clearAutoDismissTimer();
this.isShowToaster = false;
this.showToasterSubject.next(false);
return this.isShowToaster;
}
/**
* Starts auto-dismiss timer based on duration
*/
startAutoDismissTimer() {
if (this.duration && this.duration > 0) {
this.autoDismissTimer = setTimeout(() => {
this.hide();
}, this.duration);
}
}
clearAutoDismissTimer() {
if (this.autoDismissTimer) {
clearTimeout(this.autoDismissTimer);
this.autoDismissTimer = null;
}
}
/**
* Calculates position with x and y offsets relative to standard position
*/
calculatePositionWithOffset(xOffset, yOffset) {
this.customPositionStyles = {
position: "fixed"
};
// Base position based on standard position
switch (this.position) {
case "top-left":
this.customPositionStyles.top = `calc(var(--kwikui-space-m) + ${yOffset}px)`;
this.customPositionStyles.left = `calc(var(--kwikui-space-m) + ${xOffset}px)`;
break;
case "top-center":
this.customPositionStyles.top = `calc(var(--kwikui-space-m) + ${yOffset}px)`;
this.customPositionStyles.left = `calc(50% + ${xOffset}px)`;
this.customPositionStyles.transform = "translateX(-50%)";
break;
case "top-right":
this.customPositionStyles.top = `calc(var(--kwikui-space-m) + ${yOffset}px)`;
this.customPositionStyles.right = `calc(var(--kwikui-space-m) - ${xOffset}px)`;
break;
case "center-left":
this.customPositionStyles.top = `calc(50% + ${yOffset}px)`;
this.customPositionStyles.left = `calc(var(--kwikui-space-m) + ${xOffset}px)`;
this.customPositionStyles.transform = "translateY(-50%)";
break;
case "center-center":
this.customPositionStyles.top = `calc(50% + ${yOffset}px)`;
this.customPositionStyles.left = `calc(50% + ${xOffset}px)`;
this.customPositionStyles.transform = "translate(-50%, -50%)";
break;
case "center-right":
this.customPositionStyles.top = `calc(50% + ${yOffset}px)`;
this.customPositionStyles.right = `calc(var(--kwikui-space-m) - ${xOffset}px)`;
this.customPositionStyles.transform = "translateY(-50%)";
break;
case "bottom-left":
this.customPositionStyles.bottom = `calc(var(--kwikui-space-m) - ${yOffset}px)`;
this.customPositionStyles.left = `calc(var(--kwikui-space-m) + ${xOffset}px)`;
break;
case "bottom-center":
this.customPositionStyles.bottom = `calc(var(--kwikui-space-m) - ${yOffset}px)`;
this.customPositionStyles.left = `calc(50% + ${xOffset}px)`;
this.customPositionStyles.transform = "translateX(-50%)";
break;
case "bottom-right":
this.customPositionStyles.bottom = `calc(var(--kwikui-space-m) - ${yOffset}px)`;
this.customPositionStyles.right = `calc(var(--kwikui-space-m) - ${xOffset}px)`;
break;
default:
// Default positioning
this.customPositionStyles.top = `${yOffset}px`;
this.customPositionStyles.left = `${xOffset}px`;
}
}
}
/** @nocollapse */ KwikUIToasterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: KwikUIToasterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
/** @nocollapse */ KwikUIToasterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: KwikUIToasterService, providedIn: "root" });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: KwikUIToasterService, decorators: [{
type: Injectable,
args: [{ providedIn: "root" }]
}], ctorParameters: function () { return []; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Rlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa3VpL3NyYy9saWIvY29tcG9uZW50cy9jdXN0b20vdG9hc3Rlci90b2FzdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBR3ZELE1BQU0sT0FBTyxvQkFBb0I7SUF5Qy9CO1FBeENBLHVCQUFrQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBRXpELGdCQUFXLEdBQW9CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV0RSxhQUFRLEdBQVcsY0FBYyxDQUFDLFFBQVEsQ0FBQztRQUUzQyxZQUFPLEdBQVcsY0FBYyxDQUFDLE9BQU8sQ0FBQztRQUV6QyxhQUFRLEdBQVcsY0FBYyxDQUFDLFFBQVEsQ0FBQztRQUUzQyx5QkFBeUI7UUFDekIseUJBQW9CLEdBQThCLElBQUksQ0FBQztRQUV2RCxXQUFNLEdBQTZCLGNBQWMsQ0FBQyxNQUFNLENBQUM7UUFFekQsVUFBSyxHQUFXLGNBQWMsQ0FBQyxLQUFLLENBQUM7UUFFckMsU0FBSSxHQUFXLGNBQWMsQ0FBQyxJQUFJLENBQUM7UUFFbkMsU0FBSSxHQUFXLGNBQWMsQ0FBQyxJQUFJLENBQUM7UUFFbkMsT0FBRSxHQUFXLGNBQWMsQ0FBQyxFQUFFLENBQUM7UUFFL0IsMkNBQTJDO1FBQzNDLGdCQUFXLEdB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QUcsR0FBRyxHQUFHLE9BQU8sSUFBSSxDQUFDO2dCQUMvQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxHQUFHLEdBQUcsT0FBTyxJQUFJLENBQUM7U0FDbkQ7SUFDSCxDQUFDOztxSUF0TlUsb0JBQW9CO3lJQUFwQixvQkFBb0IsY0FEUCxNQUFNOzRGQUNuQixvQkFBb0I7a0JBRGhDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgdGhyb3dFcnJvck1lc3NhZ2UgfSBmcm9tIFwiLi4vLi4vLi4vaGVscGVycy9rd2lrdWkuY29tbW9uLmhlbHBlcnNcIjtcbmltcG9ydCB7IERFRkFVTFRfVkFMVUVTLCBWQUxJREFURV9LRVlfVkFMVUVTIH0gZnJvbSBcIi4vdG9hc3Rlci5jb25zdGFudHNcIjtcbmltcG9ydCB7IGlzVmFsaWRLZXlWYWx1ZSB9IGZyb20gXCIuL3RvYXN0ZXIudmFsaWRhdGlvblwiO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXG5leHBvcnQgY2xhc3MgS3dpa1VJVG9hc3RlclNlcnZpY2Uge1xuICBzaG93VG9hc3RlclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBzaG93VG9hc3RlcjogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5zaG93VG9hc3RlclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgZHVyYXRpb246IG51bWJlciA9IERFRkFVTFRfVkFMVUVTLmR1cmF0aW9uO1xuXG4gIG1lc3NhZ2U6IHN0cmluZyA9IERFRkFVTFRfVkFMVUVTLm1lc3NhZ2U7XG5cbiAgcG9zaXRpb246IHN0cmluZyA9IERFRkFVTFRfVkFMVUVTLnBvc2l0aW9uO1xuXG4gIC8vIEZvciBjdXN0b20gcG9zaXRpb25pbmdcbiAgY3VzdG9tUG9zaXRpb25TdHlsZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSBudWxsO1xuXG4gIG9mZnNldDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9ID0gREVGQVVMVF9WQUxVRVMub2Zmc2V0O1xuXG4gIHNoYXBlOiBzdHJpbmcgPSBERUZBVUxUX1ZBTFVFUy5zaGFwZTtcblxuICBzaXplOiBzdHJpbmcgPSBERUZBVUxUX1ZBTFVFUy5zaXplO1xuXG4gIHR5cGU6IHN0cmluZyA9IERFRkFVTFRfVkFMVUVTLnR5cGU7XG5cbiAgaWQ6IHN0cmluZyA9IERFRkFVTFRfVkFMVUVTLmlkO1xuXG4gIC8vIEN1c3RvbSBpY29ucyBmb3IgZGlmZmVyZW50IHRvYXN0ZXIgdHlwZXNcbiAgY3VzdG9tSWNvbnM6IHtcbiAgICBpbmZvPzogc3RyaW5nO1xuICAgIHN1Y2Nlc3M/OiBzdHJpbmc7XG4gICAgd2FybmluZz86IHN0cmluZztcbiAgICBlcnJvcj86IHN0cmluZztcbiAgfSA9IHtcbiAgICBpbmZvOiBudWxsLFxuICAgIHN1Y2Nlc3M6IG51bGwsXG4gICAgd2FybmluZzogbnVsbCxcbiAgICBlcnJvcjogbnVsbFxuICB9O1xuXG4gIGlzU2hvd1RvYXN0ZXIgPSBmYWxzZTtcblxuICBwcml2YXRlIGF1dG9EaXNtaXNzVGltZXI6IGFueTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBmb3IgKGNvbnN0IGlucHV0cyBvZiBPYmplY3QuZW50cmllcyhWQUxJREFURV9LRVlfVkFMVUVTKSkge1xuICAgICAgY29uc3Qga2V5OiBzdHJpbmcgPSBpbnB1dHNbMF07XG4gICAgICBjb25zdCB2YWxpZGF0ZTogYW55ID0gaW5wdXRzWzFdO1xuXG4gICAgICBpZiAodmFsaWRhdGUpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUlucHV0UHJvcGVydHkoa2V5LCB0aGlzW2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVJbnB1dFByb3BlcnR5KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKFZBTElEQVRFX0tFWV9WQUxVRVNba2V5XSAmJiAhaXNWYWxpZEtleVZhbHVlKGtleSwgdmFsdWUpKSB7XG4gICAgICB0aGlzW2tleV0gPSBERUZBVUxUX1ZBTFVFU1trZXldO1xuICAgICAgdGhyb3dFcnJvck1lc3NhZ2UoXG4gICAgICAgIFwia3dpa3VpLXRvYXN0ZXJcIixcbiAgICAgICAgdGhpcy5pZCxcbiAgICAgICAga2V5LFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgREVGQVVMVF9WQUxVRVNba2V5XVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBzaG93KG9wdGlvbnM/OiB7XG4gICAgbWVzc2FnZT86IHN0cmluZztcbiAgICB0eXBlPzogc3RyaW5nO1xuICAgIHBvc2l0aW9uPzogc3RyaW5nO1xuICAgIGR1cmF0aW9uPzogbnVtYmVyO1xuICAgIHNoYXBlPzogc3RyaW5nO1xuICAgIHNpemU/OiBzdHJpbmc7XG4gICAgb2Zmc2V0PzogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9O1xuICAgIGN1c3RvbUljb25zPzoge1xuICAgICAgaW5mbz86IHN0cmluZztcbiAgICAgIHN1Y2Nlc3M/OiBzdHJpbmc7XG4gICAgICB3YXJuaW5nPzogc3RyaW5nO1xuICAgICAgZXJyb3I/OiBzdHJpbmc7XG4gICAgfTtcbiAgfSk6IGJvb2xlYW4ge1xuICAgIHRoaXMuY2xlYXJBdXRvRGlzbWlzc1RpbWVyKCk7XG5cbiAgICB0aGlzLnNob3dUb2FzdGVyU3ViamVjdC5uZXh0KHRydWUpO1xuICAgIHRoaXMuaXNTaG93VG9hc3RlciA9IHRydWU7XG5cbiAgICAvLyBSZXNldCBjdXN0b20gcG9zaXRpb25pbmdcbiAgICB0aGlzLmN1c3RvbVBvc2l0aW9uU3R5bGVzID0gbnVsbDtcblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICB0aGlzLm1lc3NhZ2UgPSBvcHRpb25zLm1lc3NhZ2UgfHwgdGhpcy5tZXNzYWdlO1xuICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlIHx8IHRoaXMudHlwZTtcbiAgICAgIHRoaXMucG9zaXRpb24gPSBvcHRpb25zLnBvc2l0aW9uIHx8IHRoaXMucG9zaXRpb247XG4gICAgICB0aGlzLmR1cmF0aW9uID0gb3B0aW9ucy5kdXJhdGlvbiB8fCB0aGlzLmR1cmF0aW9uO1xuICAgICAgdGhpcy5zaGFwZSA9IG9wdGlvbnMuc2hhcGUgfHwgdGhpcy5zaGFwZTtcbiAgICAgIHRoaXMuc2l6ZSA9IG9wdGlvbnMuc2l6ZSB8fCB0aGlzLnNpemU7XG5cbiAgICAgIC8vIFVwZGF0ZSBvZmZzZXQgaWYgcHJvdmlkZWRcbiAgICAgIGlmIChvcHRpb25zLm9mZnNldCkge1xuICAgICAgICB0aGlzLm9mZnNldCA9IG9wdGlvbnMub2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgY3VzdG9tIGljb25zIGlmIHByb3ZpZGVkXG4gICAgICBpZiAob3B0aW9ucy5jdXN0b21JY29ucykge1xuICAgICAgICB0aGlzLmN1c3RvbUljb25zID0ge1xuICAgICAgICAgIGluZm86XG4gICAgICAgICAgICBvcHRpb25zLmN1c3RvbUljb25zLmluZm8gIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IG9wdGlvbnMuY3VzdG9tSWNvbnMuaW5mb1xuICAgICAgICAgICAgICA6IHRoaXMuY3VzdG9tSWNvbnMuaW5mbyxcbiAgICAgICAgICBzdWNjZXNzOlxuICAgICAgICAgICAgb3B0aW9ucy5jdXN0b21JY29ucy5zdWNjZXNzICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyBvcHRpb25zLmN1c3RvbUljb25zLnN1Y2Nlc3NcbiAgICAgICAgICAgICAgOiB0aGlzLmN1c3RvbUljb25zLnN1Y2Nlc3MsXG4gICAgICAgICAgd2FybmluZzpcbiAgICAgICAgICAgIG9wdGlvbnMuY3VzdG9tSWNvbnMud2FybmluZyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gb3B0aW9ucy5jdXN0b21JY29ucy53YXJuaW5nXG4gICAgICAgICAgICAgIDogdGhpcy5jdXN0b21JY29ucy53YXJuaW5nLFxuICAgICAgICAgIGVycm9yOlxuICAgICAgICAgICAgb3B0aW9ucy5jdXN0b21JY29ucy5lcnJvciAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gb3B0aW9ucy5jdXN0b21JY29ucy5lcnJvclxuICAgICAgICAgICAgICA6IHRoaXMuY3VzdG9tSWNvbnMuZXJyb3JcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2FsY3VsYXRlIHBvc2l0aW9uIGJhc2VkIG9uIHN0YW5kYXJkIHBvc2l0aW9uICsgb2Zmc2V0XG4gICAgICB0aGlzLmNhbGN1bGF0ZVBvc2l0aW9uV2l0aE9mZnNldCh0aGlzLm9mZnNldC54LCB0aGlzLm9mZnNldC55KTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0QXV0b0Rpc21pc3NUaW1lcigpO1xuXG4gICAgcmV0dXJuIHRoaXMuaXNTaG93VG9hc3RlcjtcbiAgfVxuXG4gIGhpZGUoKTogYm9vbGVhbiB7XG4gICAgdGhpcy5jbGVhckF1dG9EaXNtaXNzVGltZXIoKTtcbiAgICB0aGlzLmlzU2hvd1RvYXN0ZXIgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dUb2FzdGVyU3ViamVjdC5uZXh0KGZhbHNlKTtcblxuICAgIHJldHVybiB0aGlzLmlzU2hvd1RvYXN0ZXI7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIGF1dG8tZGlzbWlzcyB0aW1lciBiYXNlZCBvbiBkdXJhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBzdGFydEF1dG9EaXNtaXNzVGltZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZHVyYXRpb24gJiYgdGhpcy5kdXJhdGlvbiA+IDApIHtcbiAgICAgIHRoaXMuYXV0b0Rpc21pc3NUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgIH0sIHRoaXMuZHVyYXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJBdXRvRGlzbWlzc1RpbWVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmF1dG9EaXNtaXNzVGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmF1dG9EaXNtaXNzVGltZXIpO1xuICAgICAgdGhpcy5hdXRvRGlzbWlzc1RpbWVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBwb3NpdGlvbiB3aXRoIHggYW5kIHkgb2Zmc2V0cyByZWxhdGl2ZSB0byBzdGFuZGFyZCBwb3NpdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVQb3NpdGlvbldpdGhPZmZzZXQoeE9mZnNldDogbnVtYmVyLCB5T2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmN1c3RvbVBvc2l0aW9uU3R5bGVzID0ge1xuICAgICAgcG9zaXRpb246IFwiZml4ZWRcIlxuICAgIH07XG5cbiAgICAvLyBCYXNlIHBvc2l0aW9uIGJhc2VkIG9uIHN0YW5kYXJkIHBvc2l0aW9uXG4gICAgc3dpdGNoICh0aGlzLnBvc2l0aW9uKSB7XG4gICAgICBjYXNlIFwidG9wLWxlZnRcIjpcbiAgICAgICAgdGhpcy5jdXN0b21Qb3NpdGlvblN0eWxlcy50b3AgPSBgY2FsYyh2YXIoLS1rd2lrdWktc3BhY2UtbSkgKyAke3lPZmZzZXR9cHgpYDtcbiAgICAgICAgdGhpcy5jdXN0b21Qb3NpdGlvblN0eWxlcy5sZWZ0ID0gYGNhbGModmFyKC0ta3dpa3VpLXNwYWNlLW0pICsgJHt4T2Zmc2V0fXB4KWA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInRvcC1jZW50ZXJcIjpcbiAgICAgICAgdGhpcy5jdXN0b21Qb3NpdGlvblN0eWxlcy50b3AgPSBgY2FsYyh2YXIoLS1rd2lrdWktc3BhY2UtbSkgKyAke3lPZmZzZXR9cHgpYDtcbiAgICAgICAgdGhpcy5jdXN0b21Qb3NpdGlvblN0eWxlcy5sZWZ0ID0gYGNhbGMoNTAlICsgJHt4T2Zmc2V0fXB4KWA7XG4gICAgICAgIHRoaXMuY3VzdG9tUG9zaXRpb25TdHlsZXMudHJhbnNmb3JtID0gXCJ0cmFuc2xhdGVYKC01MCUpXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInRvcC1yaWdodFwiOlxuICAgICAgICB0aGlzLmN1c3RvbVBvc2l0aW9uU3R5bGVzLnRvcCA9IGBjYWxjKHZhcigtLWt3aWt1aS1zcGFjZS1tKSArICR7eU9mZnNldH1weClgO1xuICAgICAgICB0aGlzLmN1c3RvbVBvc2l0aW9uU3R5bGVzLnJpZ2h0ID0gYGNhbGModmFyKC0ta3dpa3VpLXNwYWNlLW0pIC0gJHt4T2Zmc2V0fXB4KWA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImNlbnRlci1sZWZ0XCI6XG4gICAgICAgIHRoaXMuY3VzdG9tUG9zaXRpb25TdHlsZXMudG9wID0gYGNhbGMoNTAlICsgJHt5T2Zmc2V0fXB4KWA7XG4gICAgICAgIHRoaXMuY3VzdG9tUG9zaXRpb25TdHlsZXMubGVmdCA9IGBjYWxjKHZhcigtLWt3aWt1aS1zcGFjZS1tKSArICR7eE9mZnNldH1weClgO1xuICAgICAgICB0aGlzLmN1c3RvbVBvc2l0aW9uU3R5bGVzLnRyYW5zZm9ybSA9IFwidHJhbnNsYXRlWSgtNTAlKVwiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJjZW50ZXItY2VudGVyXCI6XG4gICAgICAgIHRoaXMuY3VzdG9tUG9zaXRpb25TdHlsZXMudG9wID0gYGNhbGMoNTAlICsgJHt5T2Zmc2V0fXB4KWA7XG4gICAgICAgIHRoaXMuY3VzdG9tUG9zaXRpb25TdHlsZXMubGVmdCA9IGBjYWxjKDUwJSArICR7eE9mZnNldH1weClgO1xuICAgICAgICB0aGlzLmN1c3RvbVBvc2l0aW9uU3R5bGVzLnRyYW5zZm9ybSA9IFwidHJhbnNsYXRlKC01MCUsIC01MCUpXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImNlbnRlci1yaWdodFwiOlxuICAgICAgICB0aGlzLmN1c3RvbVBvc2l0aW9uU3R5bGVzLnRvcCA9IGBjYWxjKDUwJSArICR7eU9mZnNldH1weClgO1xuICAgICAgICB0aGlzLmN1c3RvbVBvc2l0aW9uU3R5bGVzLnJpZ2h0ID0gYGNhbGModmFyKC0ta3dpa3VpLXNwYWNlLW0pIC0gJHt4T2Zmc2V0fXB4KWA7XG4gICAgICAgIHRoaXMuY3VzdG9tUG9zaXRpb25TdHlsZXMudHJhbnNmb3JtID0gXCJ0cmFuc2xhdGVZKC01MCUpXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImJvdHRvbS1sZWZ0XCI6XG4gICAgICAgIHRoaXMuY3VzdG9tUG9zaXRpb25TdHlsZXMuYm90dG9tID0gYGNhbGModmFyKC0ta3dpa3VpLXNwYWNlLW0pIC0gJHt5T2Zmc2V0fXB4KWA7XG4gICAgICAgIHRoaXMuY3VzdG9tUG9zaXRpb25TdHlsZXMubGVmdCA9IGBjYWxjKHZhcigtLWt3aWt1aS1zcGFjZS1tKSArICR7eE9mZnNldH1weClgO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJib3R0b20tY2VudGVyXCI6XG4gICAgICAgIHRoaXMuY3VzdG9tUG9zaXRpb25TdHlsZXMuYm90dG9tID0gYGNhbGModmFyKC0ta3dpa3VpLXNwYWNlLW0pIC0gJHt5T2Zmc2V0fXB4KWA7XG4gICAgICAgIHRoaXMuY3VzdG9tUG9zaXRpb25TdHlsZXMubGVmdCA9IGBjYWxjKDUwJSArICR7eE9mZnNldH1weClgO1xuICAgICAgICB0aGlzLmN1c3RvbVBvc2l0aW9uU3R5bGVzLnRyYW5zZm9ybSA9IFwidHJhbnNsYXRlWCgtNTAlKVwiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJib3R0b20tcmlnaHRcIjpcbiAgICAgICAgdGhpcy5jdXN0b21Qb3NpdGlvblN0eWxlcy5ib3R0b20gPSBgY2FsYyh2YXIoLS1rd2lrdWktc3BhY2UtbSkgLSAke3lPZmZzZXR9cHgpYDtcbiAgICAgICAgdGhpcy5jdXN0b21Qb3NpdGlvblN0eWxlcy5yaWdodCA9IGBjYWxjKHZhcigtLWt3aWt1aS1zcGFjZS1tKSAtICR7eE9mZnNldH1weClgO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIERlZmF1bHQgcG9zaXRpb25pbmdcbiAgICAgICAgdGhpcy5jdXN0b21Qb3NpdGlvblN0eWxlcy50b3AgPSBgJHt5T2Zmc2V0fXB4YDtcbiAgICAgICAgdGhpcy5jdXN0b21Qb3NpdGlvblN0eWxlcy5sZWZ0ID0gYCR7eE9mZnNldH1weGA7XG4gICAgfVxuICB9XG59XG4iXX0=