ngx-antd-json-schema-form
Version:
JSON form schema using ant-design and prismjs
233 lines • 19.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, Input, Output, EventEmitter, ViewEncapsulation } from "@angular/core";
import { FormGroup, FormControl, Validators } from "@angular/forms";
// ['', [ Validators.pattern(/^[0-9 ]{1,15}$/)]]
var NgxAntdJsonSchemaFormComponent = /** @class */ (function () {
function NgxAntdJsonSchemaFormComponent() {
this.schema = [];
this.registeredForm = new EventEmitter();
this.formChange = new EventEmitter();
this.formTouch = new EventEmitter();
this.submit = new EventEmitter();
this.formValid = new EventEmitter();
this.formSettings = this.getDefaultSettings();
}
/**
* @param {?} changes
* @return {?}
*/
NgxAntdJsonSchemaFormComponent.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
if (changes["schema"]) {
this.schema = changes["schema"]["currentValue"];
this.registerForm();
}
if (changes["settings"]) {
this.settings = changes["settings"]["currentValue"];
this.formSettings = this.mergeFormSettings(this.formSettings, this.settings);
this.submitButtonConfig = this.getSubmitButtonConfig(this.formSettings.submitButton);
}
};
/**
* @return {?}
*/
NgxAntdJsonSchemaFormComponent.prototype.registerForm = /**
* @return {?}
*/
function () {
this.form = this.createGroup(this.schema);
this.registeredForm.emit(this.form);
this.handleEmitters();
this.onFormUpdate();
};
/**
* @param {?} event
* @return {?}
*/
NgxAntdJsonSchemaFormComponent.prototype.handleSubmit = /**
* @param {?} event
* @return {?}
*/
function (event) {
event.preventDefault();
event.stopPropagation();
this.submit.emit(this.form.getRawValue());
};
/**
* @return {?}
*/
NgxAntdJsonSchemaFormComponent.prototype.onFormUpdate = /**
* @return {?}
*/
function () {
var _this = this;
this.form.valueChanges.subscribe((/**
* @param {?} val
* @return {?}
*/
function (val) {
_this.schema.forEach((/**
* @param {?} item
* @return {?}
*/
function (item) {
if (val[item.key] !== undefined) {
item.value = val[item.key];
}
}));
_this.handleEmitters();
}));
};
/**
* @param {?} schema
* @return {?}
*/
NgxAntdJsonSchemaFormComponent.prototype.createGroup = /**
* @param {?} schema
* @return {?}
*/
function (schema) {
/** @type {?} */
var group = {};
if (schema) {
schema.forEach((/**
* @param {?} item
* @return {?}
*/
function (item) {
/** @type {?} */
var value = item.value !== undefined ? item.value : "";
/** @type {?} */
var formState = { value: value, disabled: item.disabled || false };
group[item.key] = item.required ? new FormControl(formState, Validators.required) : new FormControl(formState);
}));
}
return new FormGroup(group);
};
/**
* @return {?}
*/
NgxAntdJsonSchemaFormComponent.prototype.handleEmitters = /**
* @return {?}
*/
function () {
/** @type {?} */
var isFormValid = this.form.valid;
this.submitButtonConfig = this.getSubmitButtonConfig({ disabled: !isFormValid });
this.formValid.emit(isFormValid);
if (this.form.dirty) {
this.formChange.emit({ raw: this.form.getRawValue(), schema: this.schema });
this.formTouch.emit(this.form.dirty);
}
};
/**
* @return {?}
*/
NgxAntdJsonSchemaFormComponent.prototype.getDefaultSettings = /**
* @return {?}
*/
function () {
/** @type {?} */
var formCommonSettings = {
nzGutter: 8,
itemClass: "",
nzSpanLabel: 8,
labelClass: "",
nzSpanControl: 16,
fieldClass: ""
};
/** @type {?} */
var defaultSettings = (/** @type {?} */ (tslib_1.__assign({}, formCommonSettings, { submitButton: (/** @type {?} */ ({
show: true,
label: "Submit",
disabled: false
})) })));
return JSON.parse(JSON.stringify(defaultSettings));
};
/**
* @param {?=} newConfig
* @return {?}
*/
NgxAntdJsonSchemaFormComponent.prototype.getSubmitButtonConfig = /**
* @param {?=} newConfig
* @return {?}
*/
function (newConfig) {
if (newConfig === void 0) { newConfig = {}; }
/** @type {?} */
var defaultConfig = Object.assign((/** @type {?} */ (tslib_1.__assign({ key: "submit", type: "button" }, this.formSettings.submitButton))), newConfig);
this.formSettings.submitButton = defaultConfig;
return JSON.parse(JSON.stringify(defaultConfig));
};
/**
* @param {?} dest
* @param {?} source
* @return {?}
*/
NgxAntdJsonSchemaFormComponent.prototype.mergeFormSettings = /**
* @param {?} dest
* @param {?} source
* @return {?}
*/
function (dest, source) {
/** @type {?} */
var newSubmitButtonConfig = source.submitButton || {};
/** @type {?} */
var submitButtonConfig = Object.assign(dest.submitButton, newSubmitButtonConfig);
/** @type {?} */
var settings = Object.assign(dest, source);
settings.submitButton = submitButtonConfig;
return settings;
};
NgxAntdJsonSchemaFormComponent.decorators = [
{ type: Component, args: [{
selector: "ngx-antd-json-schema-form",
template: "<form *ngIf=\"form\" class=\"json-schema-form\" nz-form [formGroup]=\"form\" (submit)=\"handleSubmit($event)\">\n <ng-container *ngFor=\"let field of schema\" dynamicField [config]=\"field\" [settings]=\"formSettings\" [group]=\"form\">\n </ng-container>\n <json-schema-form-button\n *ngIf=\"formSettings.submitButton.show\"\n [group]=\"form\"\n [config]=\"submitButtonConfig\"\n [settings]=\"formSettings\"\n >\n </json-schema-form-button>\n</form>\n",
encapsulation: ViewEncapsulation.None,
styles: [".json-form-schema-field.ant-form-item{padding-bottom:0;margin-bottom:0}"]
}] }
];
/** @nocollapse */
NgxAntdJsonSchemaFormComponent.ctorParameters = function () { return []; };
NgxAntdJsonSchemaFormComponent.propDecorators = {
schema: [{ type: Input }],
settings: [{ type: Input }],
registeredForm: [{ type: Output }],
formChange: [{ type: Output }],
formTouch: [{ type: Output }],
submit: [{ type: Output }],
formValid: [{ type: Output }]
};
return NgxAntdJsonSchemaFormComponent;
}());
export { NgxAntdJsonSchemaFormComponent };
if (false) {
/** @type {?} */
NgxAntdJsonSchemaFormComponent.prototype.schema;
/** @type {?} */
NgxAntdJsonSchemaFormComponent.prototype.settings;
/** @type {?} */
NgxAntdJsonSchemaFormComponent.prototype.registeredForm;
/** @type {?} */
NgxAntdJsonSchemaFormComponent.prototype.formChange;
/** @type {?} */
NgxAntdJsonSchemaFormComponent.prototype.formTouch;
/** @type {?} */
NgxAntdJsonSchemaFormComponent.prototype.submit;
/** @type {?} */
NgxAntdJsonSchemaFormComponent.prototype.formValid;
/** @type {?} */
NgxAntdJsonSchemaFormComponent.prototype.form;
/** @type {?} */
NgxAntdJsonSchemaFormComponent.prototype.submitButtonConfig;
/** @type {?} */
NgxAntdJsonSchemaFormComponent.prototype.formSettings;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWFudGQtanNvbi1zY2hlbWEtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtYW50ZC1qc29uLXNjaGVtYS1mb3JtLyIsInNvdXJjZXMiOlsibGliL25neC1hbnRkLWpzb24tc2NoZW1hLWZvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQTRCLE1BQU0sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBSXBFO0lBb0JFO1FBYlMsV0FBTSxHQUFlLEVBQUUsQ0FBQztRQUd2QixtQkFBYyxHQUE0QixJQUFJLFlBQVksRUFBYSxDQUFDO1FBQ3hFLGVBQVUsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN4RCxjQUFTLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDdkQsV0FBTSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3BELGNBQVMsR0FBMEIsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUl6RSxpQkFBWSxHQUFpQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUV4QyxDQUFDOzs7OztJQUVoQixvREFBVzs7OztJQUFYLFVBQVksT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3JCO1FBQ0QsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDcEQs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WUFBWSxJQUFJLEVBQUU7O1lBQ2pELGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxxQkFBcUIsQ0FBQzs7WUFDNUUsUUFBUSxHQUFpQixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7UUFDMUQsUUFBUSxDQUFDLFlBQVksR0FBRyxrQkFBa0IsQ0FBQztRQUMzQyxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOztnQkExSEYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSwyQkFBMkI7b0JBQ3JDLGdlQUF5RDtvQkFFekQsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7O2lCQUN0Qzs7Ozs7eUJBRUUsS0FBSzsyQkFDTCxLQUFLO2lDQUVMLE1BQU07NkJBQ04sTUFBTTs0QkFDTixNQUFNO3lCQUNOLE1BQU07NEJBQ04sTUFBTTs7SUE2R1QscUNBQUM7Q0FBQSxBQTNIRCxJQTJIQztTQXJIWSw4QkFBOEI7OztJQUN6QyxnREFBaUM7O0lBQ2pDLGtEQUFnQzs7SUFFaEMsd0RBQWtGOztJQUNsRixvREFBa0U7O0lBQ2xFLG1EQUFpRTs7SUFDakUsZ0RBQThEOztJQUM5RCxtREFBeUU7O0lBRXpFLDhDQUFnQjs7SUFDaEIsNERBQTZCOztJQUM3QixzREFBdUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBGb3JtSXRlbSwgRm9ybVNldHRpbmdzLCBGb3JtU3VibWl0QnV0dG9uLCBGb3JtQ29tbW9uU2V0dGluZ3MgfSBmcm9tIFwiLi9tb2RlbHMvaW5kZXhcIjtcblxuLy8gWycnLCBbIFZhbGlkYXRvcnMucGF0dGVybigvXlswLTkgXXsxLDE1fSQvKV1dXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwibmd4LWFudGQtanNvbi1zY2hlbWEtZm9ybVwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL25neC1hbnRkLWpzb24tc2NoZW1hLWZvcm0uY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL25neC1hbnRkLWpzb24tc2NoZW1hLWZvcm0uY29tcG9uZW50LnNjc3NcIl0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgTmd4QW50ZEpzb25TY2hlbWFGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgc2NoZW1hOiBGb3JtSXRlbVtdID0gW107XG4gIEBJbnB1dCgpIHNldHRpbmdzOiBGb3JtU2V0dGluZ3M7XG5cbiAgQE91dHB1dCgpIHJlZ2lzdGVyZWRGb3JtOiBFdmVudEVtaXR0ZXI8Rm9ybUdyb3VwPiA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybUdyb3VwPigpO1xuICBAT3V0cHV0KCkgZm9ybUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGZvcm1Ub3VjaDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHN1Ym1pdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGZvcm1WYWxpZDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIGZvcm06IEZvcm1Hcm91cDtcbiAgc3VibWl0QnV0dG9uQ29uZmlnOiBGb3JtSXRlbTtcbiAgZm9ybVNldHRpbmdzOiBGb3JtU2V0dGluZ3MgPSB0aGlzLmdldERlZmF1bHRTZXR0aW5ncygpO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbXCJzY2hlbWFcIl0pIHtcbiAgICAgIHRoaXMuc2NoZW1hID0gY2hhbmdlc1tcInNjaGVtYVwiXVtcImN1cnJlbnRWYWx1ZVwiXTtcbiAgICAgIHRoaXMucmVnaXN0ZXJGb3JtKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzW1wic2V0dGluZ3NcIl0pIHtcbiAgICAgIHRoaXMuc2V0dGluZ3MgPSBjaGFuZ2VzW1wic2V0dGluZ3NcIl1bXCJjdXJyZW50VmFsdWVcIl07XG4gICAgICB0aGlzLmZvcm1TZXR0aW5ncyA9IHRoaXMubWVyZ2VGb3JtU2V0dGluZ3ModGhpcy5mb3JtU2V0dGluZ3MsIHRoaXMuc2V0dGluZ3MpO1xuICAgICAgdGhpcy5zdWJtaXRCdXR0b25Db25maWcgPSB0aGlzLmdldFN1Ym1pdEJ1dHRvbkNvbmZpZyh0aGlzLmZvcm1TZXR0aW5ncy5zdWJtaXRCdXR0b24pO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyRm9ybSgpIHtcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmNyZWF0ZUdyb3VwKHRoaXMuc2NoZW1hKTtcbiAgICB0aGlzLnJlZ2lzdGVyZWRGb3JtLmVtaXQodGhpcy5mb3JtKTtcbiAgICB0aGlzLmhhbmRsZUVtaXR0ZXJzKCk7XG4gICAgdGhpcy5vbkZvcm1VcGRhdGUoKTtcbiAgfVxuXG4gIGhhbmRsZVN1Ym1pdChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuc3VibWl0LmVtaXQodGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkpO1xuICB9XG5cbiAgb25Gb3JtVXBkYXRlKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWwpID0+IHtcbiAgICAgIHRoaXMuc2NoZW1hLmZvckVhY2goKGl0ZW06IEZvcm1JdGVtKSA9PiB7XG4gICAgICAgIGlmICh2YWxbaXRlbS5rZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpdGVtLnZhbHVlID0gdmFsW2l0ZW0ua2V5XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmhhbmRsZUVtaXR0ZXJzKCk7XG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVHcm91cChzY2hlbWEpOiBGb3JtR3JvdXAge1xuICAgIGNvbnN0IGdyb3VwOiBhbnkgPSB7fTtcblxuICAgIGlmIChzY2hlbWEpIHtcbiAgICAgIHNjaGVtYS5mb3JFYWNoKChpdGVtOiBGb3JtSXRlbSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZW0udmFsdWUgIT09IHVuZGVmaW5lZCA/IGl0ZW0udmFsdWUgOiBcIlwiO1xuICAgICAgICBjb25zdCBmb3JtU3RhdGUgPSB7IHZhbHVlLCBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCB8fCBmYWxzZSB9O1xuICAgICAgICBncm91cFtpdGVtLmtleV0gPSBpdGVtLnJlcXVpcmVkID8gbmV3IEZvcm1Db250cm9sKGZvcm1TdGF0ZSwgVmFsaWRhdG9ycy5yZXF1aXJlZCkgOiBuZXcgRm9ybUNvbnRyb2woZm9ybVN0YXRlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRm9ybUdyb3VwKGdyb3VwKTtcbiAgfVxuXG4gIGhhbmRsZUVtaXR0ZXJzKCkge1xuICAgIGNvbnN0IGlzRm9ybVZhbGlkOiBib29sZWFuID0gdGhpcy5mb3JtLnZhbGlkO1xuICAgIHRoaXMuc3VibWl0QnV0dG9uQ29uZmlnID0gdGhpcy5nZXRTdWJtaXRCdXR0b25Db25maWcoeyBkaXNhYmxlZDogIWlzRm9ybVZhbGlkIH0pO1xuICAgIHRoaXMuZm9ybVZhbGlkLmVtaXQoaXNGb3JtVmFsaWQpO1xuICAgIGlmICh0aGlzLmZvcm0uZGlydHkpIHtcbiAgICAgIHRoaXMuZm9ybUNoYW5nZS5lbWl0KHsgcmF3OiB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSwgc2NoZW1hOiB0aGlzLnNjaGVtYSB9KTtcbiAgICAgIHRoaXMuZm9ybVRvdWNoLmVtaXQodGhpcy5mb3JtLmRpcnR5KTtcbiAgICB9XG4gIH1cblxuICBnZXREZWZhdWx0U2V0dGluZ3MoKTogRm9ybVNldHRpbmdzIHtcbiAgICBjb25zdCBmb3JtQ29tbW9uU2V0dGluZ3M6IEZvcm1Db21tb25TZXR0aW5ncyA9IHtcbiAgICAgIG56R3V0dGVyOiA4LFxuICAgICAgaXRlbUNsYXNzOiBcIlwiLFxuICAgICAgbnpTcGFuTGFiZWw6IDgsXG4gICAgICBsYWJlbENsYXNzOiBcIlwiLFxuICAgICAgbnpTcGFuQ29udHJvbDogMTYsXG4gICAgICBmaWVsZENsYXNzOiBcIlwiXG4gICAgfTtcbiAgICBjb25zdCBkZWZhdWx0U2V0dGluZ3MgPSB7XG4gICAgICAuLi5mb3JtQ29tbW9uU2V0dGluZ3MsXG4gICAgICBzdWJtaXRCdXR0b246IHtcbiAgICAgICAgc2hvdzogdHJ1ZSxcbiAgICAgICAgbGFiZWw6IFwiU3VibWl0XCIsXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZVxuICAgICAgfSBhcyBGb3JtU3VibWl0QnV0dG9uXG4gICAgfSBhcyBGb3JtU2V0dGluZ3M7XG5cbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkZWZhdWx0U2V0dGluZ3MpKTtcbiAgfVxuXG4gIGdldFN1Ym1pdEJ1dHRvbkNvbmZpZyhuZXdDb25maWc6IEZvcm1TdWJtaXRCdXR0b24gPSB7fSk6IEZvcm1JdGVtIHtcbiAgICBjb25zdCBkZWZhdWx0Q29uZmlnID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAga2V5OiBcInN1Ym1pdFwiLFxuICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAuLi50aGlzLmZvcm1TZXR0aW5ncy5zdWJtaXRCdXR0b25cbiAgICAgIH0gYXMgRm9ybUl0ZW0sXG4gICAgICBuZXdDb25maWdcbiAgICApO1xuICAgIHRoaXMuZm9ybVNldHRpbmdzLnN1Ym1pdEJ1dHRvbiA9IGRlZmF1bHRDb25maWc7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGVmYXVsdENvbmZpZykpO1xuICB9XG5cbiAgbWVyZ2VGb3JtU2V0dGluZ3MoZGVzdDogRm9ybVNldHRpbmdzLCBzb3VyY2U6IEZvcm1TZXR0aW5ncykge1xuICAgIGNvbnN0IG5ld1N1Ym1pdEJ1dHRvbkNvbmZpZyA9IHNvdXJjZS5zdWJtaXRCdXR0b24gfHwge307XG4gICAgY29uc3Qgc3VibWl0QnV0dG9uQ29uZmlnID0gT2JqZWN0LmFzc2lnbihkZXN0LnN1Ym1pdEJ1dHRvbiwgbmV3U3VibWl0QnV0dG9uQ29uZmlnKTtcbiAgICBjb25zdCBzZXR0aW5nczogRm9ybVNldHRpbmdzID0gT2JqZWN0LmFzc2lnbihkZXN0LCBzb3VyY2UpO1xuICAgIHNldHRpbmdzLnN1Ym1pdEJ1dHRvbiA9IHN1Ym1pdEJ1dHRvbkNvbmZpZztcbiAgICByZXR1cm4gc2V0dGluZ3M7XG4gIH1cbn1cbiJdfQ==