@jsonforms/angular
Version:
Angular module of JSON Forms
186 lines (182 loc) • 25.2 kB
JavaScript
/*
The MIT License
Copyright (c) 2017-2020 EclipseSource Munich
https://github.com/eclipsesource/jsonforms
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
import { Component, EventEmitter, Input, Output, } from '@angular/core';
import { Actions, defaultMiddleware, } from '@jsonforms/core';
import { JsonFormsAngularService, USE_STATE_VALUE } from './jsonforms.service';
import * as i0 from "@angular/core";
import * as i1 from "./jsonforms.service";
import * as i2 from "./jsonforms.component";
// TODO Can this be rewritten to not use DoCheck and OnChanges?
/* eslint-disable @angular-eslint/no-conflicting-lifecycle */
export class JsonForms {
jsonformsService;
uischema;
schema;
data;
renderers;
uischemas;
dataChange = new EventEmitter();
readonly;
validationMode;
ajv;
config;
i18n;
additionalErrors;
middleware = defaultMiddleware;
errors = new EventEmitter();
previousData;
previousErrors;
subscription;
initialized = false;
oldI18N;
constructor(jsonformsService) {
this.jsonformsService = jsonformsService;
}
ngOnInit() {
this.jsonformsService.init({
core: {
data: this.data,
uischema: this.uischema,
schema: this.schema,
ajv: this.ajv,
validationMode: this.validationMode,
additionalErrors: this.additionalErrors,
},
uischemas: this.uischemas,
i18n: this.i18n,
renderers: this.renderers,
config: this.config,
readonly: this.readonly,
}, this.middleware);
this.subscription = this.jsonformsService.$state.subscribe((state) => {
const data = state?.jsonforms?.core?.data;
const errors = state?.jsonforms?.core?.errors;
if (this.previousData !== data) {
this.previousData = data;
this.dataChange.emit(data);
}
if (this.previousErrors !== errors) {
this.previousErrors = errors;
this.errors.emit(errors);
}
});
this.oldI18N = this.i18n;
this.initialized = true;
}
ngDoCheck() {
// we can't use ngOnChanges as then nested i18n changes will not be detected
// the update will result in a no-op when the parameters did not change
if (this.oldI18N?.locale !== this.i18n?.locale ||
this.oldI18N?.translate !== this.i18n?.translate ||
this.oldI18N?.translateError !== this.i18n?.translateError) {
this.jsonformsService.updateI18n(Actions.updateI18n(this.oldI18N?.locale === this.i18n?.locale
? this.jsonformsService.getState().jsonforms.i18n.locale
: this.i18n?.locale, this.oldI18N?.translate === this.i18n?.translate
? this.jsonformsService.getState().jsonforms.i18n.translate
: this.i18n?.translate, this.oldI18N?.translateError === this.i18n?.translateError
? this.jsonformsService.getState().jsonforms.i18n.translateError
: this.i18n?.translateError));
this.oldI18N = this.i18n;
}
}
ngOnChanges(changes) {
if (!this.initialized) {
return;
}
const newData = changes.data;
const newSchema = changes.schema;
const newUiSchema = changes.uischema;
const newRenderers = changes.renderers;
const newUischemas = changes.uischemas;
const newI18n = changes.i18n;
const newReadonly = changes.readonly;
const newValidationMode = changes.validationMode;
const newAjv = changes.ajv;
const newConfig = changes.config;
const newAdditionalErrors = changes.additionalErrors;
if (newData ||
newSchema ||
newUiSchema ||
newValidationMode ||
newAjv ||
newAdditionalErrors) {
this.jsonformsService.updateCoreState(newData ? newData.currentValue : USE_STATE_VALUE, newSchema ? newSchema.currentValue : USE_STATE_VALUE, newUiSchema ? newUiSchema.currentValue : USE_STATE_VALUE, newAjv ? newAjv.currentValue : USE_STATE_VALUE, newValidationMode ? newValidationMode.currentValue : USE_STATE_VALUE, newAdditionalErrors ? newAdditionalErrors.currentValue : USE_STATE_VALUE);
}
if (newRenderers && !newRenderers.isFirstChange()) {
this.jsonformsService.setRenderers(newRenderers.currentValue);
}
if (newUischemas && !newUischemas.isFirstChange()) {
this.jsonformsService.setUiSchemas(newUischemas.currentValue);
}
if (newI18n && !newI18n.isFirstChange()) {
this.jsonformsService.updateI18n(Actions.updateI18n(newI18n.currentValue?.locale, newI18n.currentValue?.translate, newI18n.currentValue?.translateError));
}
if (newReadonly && !newReadonly.isFirstChange()) {
this.jsonformsService.setReadonly(newReadonly.currentValue);
}
if (newConfig && !newConfig.isFirstChange()) {
this.jsonformsService.updateConfig(Actions.setConfig(newConfig.currentValue));
}
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: JsonForms, deps: [{ token: i1.JsonFormsAngularService }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: JsonForms, selector: "jsonforms", inputs: { uischema: "uischema", schema: "schema", data: "data", renderers: "renderers", uischemas: "uischemas", readonly: "readonly", validationMode: "validationMode", ajv: "ajv", config: "config", i18n: "i18n", additionalErrors: "additionalErrors", middleware: "middleware" }, outputs: { dataChange: "dataChange", errors: "errors" }, providers: [JsonFormsAngularService], usesOnChanges: true, ngImport: i0, template: '<jsonforms-outlet></jsonforms-outlet>', isInline: true, dependencies: [{ kind: "directive", type: i2.JsonFormsOutlet, selector: "jsonforms-outlet", inputs: ["renderProps"] }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: JsonForms, decorators: [{
type: Component,
args: [{
selector: 'jsonforms',
template: '<jsonforms-outlet></jsonforms-outlet>',
providers: [JsonFormsAngularService],
standalone: false,
}]
}], ctorParameters: () => [{ type: i1.JsonFormsAngularService }], propDecorators: { uischema: [{
type: Input
}], schema: [{
type: Input
}], data: [{
type: Input
}], renderers: [{
type: Input
}], uischemas: [{
type: Input
}], dataChange: [{
type: Output
}], readonly: [{
type: Input
}], validationMode: [{
type: Input
}], ajv: [{
type: Input
}], config: [{
type: Input
}], i18n: [{
type: Input
}], additionalErrors: [{
type: Input
}], middleware: [{
type: Input
}], errors: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbmZvcm1zLXJvb3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYnJhcnkvanNvbmZvcm1zLXJvb3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXVCRTtBQUNGLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLE9BQU8sRUFRUCxpQkFBaUIsR0FDbEIsTUFBTSxpQkFBaUIsQ0FBQztBQUd6QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7QUFHL0UsK0RBQStEO0FBQy9ELDZEQUE2RDtBQU83RCxNQUFNLE9BQU8sU0FBUztJQXVCQTtJQXRCWCxRQUFRLENBQWtCO0lBQzFCLE1BQU0sQ0FBYTtJQUNuQixJQUFJLENBQU07SUFDVixTQUFTLENBQW1DO0lBQzVDLFNBQVMsQ0FBMEQ7SUFDbEUsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDdEMsUUFBUSxDQUFVO0lBQ2xCLGNBQWMsQ0FBaUI7SUFDL0IsR0FBRyxDQUFNO0lBQ1QsTUFBTSxDQUFNO0lBQ1osSUFBSSxDQUFxQjtJQUN6QixnQkFBZ0IsQ0FBZ0I7SUFDaEMsVUFBVSxHQUFlLGlCQUFpQixDQUFDO0lBQzFDLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztJQUU3QyxZQUFZLENBQU07SUFDbEIsY0FBYyxDQUFnQjtJQUN0QyxZQUFZLENBQWU7SUFFbkIsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUM1QixPQUFPLENBQXFCO0lBRTVCLFlBQW9CLGdCQUF5QztRQUF6QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXlCO0lBQUcsQ0FBQztJQUVqRSxRQUFRO1FBQ04sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUks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UUFFRCxJQUFJLFNBQVMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQ2hDLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUMxQyxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsQyxDQUFDO3dHQXRKVSxTQUFTOzRGQUFULFNBQVMsbVhBSFQsQ0FBQyx1QkFBdUIsQ0FBQywrQ0FEMUIsdUNBQXVDOzs0RkFJdEMsU0FBUztrQkFOckIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsV0FBVztvQkFDckIsUUFBUSxFQUFFLHVDQUF1QztvQkFDakQsU0FBUyxFQUFFLENBQUMsdUJBQXVCLENBQUM7b0JBQ3BDLFVBQVUsRUFBRSxLQUFLO2lCQUNsQjs0RkFFVSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0UsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNJLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gIFRoZSBNSVQgTGljZW5zZVxuXG4gIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIEVjbGlwc2VTb3VyY2UgTXVuaWNoXG4gIGh0dHBzOi8vZ2l0aHViLmNvbS9lY2xpcHNlc291cmNlL2pzb25mb3Jtc1xuXG4gIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICBUSEUgU09GVFdBUkUuXG4qL1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBEb0NoZWNrLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWN0aW9ucyxcbiAgSnNvbkZvcm1zSTE4blN0YXRlLFxuICBKc29uRm9ybXNSZW5kZXJlclJlZ2lzdHJ5RW50cnksXG4gIEpzb25TY2hlbWEsXG4gIE1pZGRsZXdhcmUsXG4gIFVJU2NoZW1hRWxlbWVudCxcbiAgVUlTY2hlbWFUZXN0ZXIsXG4gIFZhbGlkYXRpb25Nb2RlLFxuICBkZWZhdWx0TWlkZGxld2FyZSxcbn0gZnJvbSAnQGpzb25mb3Jtcy9jb3JlJztcbmltcG9ydCB0eXBlIEFqdiBmcm9tICdhanYnO1xuaW1wb3J0IHR5cGUgeyBFcnJvck9iamVjdCB9IGZyb20gJ2Fqdic7XG5pbXBvcnQgeyBKc29uRm9ybXNBbmd1bGFyU2VydmljZSwgVVNFX1NUQVRFX1ZBTFVFIH0gZnJvbSAnLi9qc29uZm9ybXMuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuLy8gVE9ETyBDYW4gdGhpcyBiZSByZXdyaXR0ZW4gdG8gbm90IHVzZSBEb0NoZWNrIGFuZCBPbkNoYW5nZXM/XG4vKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvbm8tY29uZmxpY3RpbmctbGlmZWN5Y2xlICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdqc29uZm9ybXMnLFxuICB0ZW1wbGF0ZTogJzxqc29uZm9ybXMtb3V0bGV0PjwvanNvbmZvcm1zLW91dGxldD4nLFxuICBwcm92aWRlcnM6IFtKc29uRm9ybXNBbmd1bGFyU2VydmljZV0sXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxufSlcbmV4cG9ydCBjbGFzcyBKc29uRm9ybXMgaW1wbGVtZW50cyBEb0NoZWNrLCBPbkNoYW5nZXMsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgdWlzY2hlbWE6IFVJU2NoZW1hRWxlbWVudDtcbiAgQElucHV0KCkgc2NoZW1hOiBKc29uU2NoZW1hO1xuICBASW5wdXQoKSBkYXRhOiBhbnk7XG4gIEBJbnB1dCgpIHJlbmRlcmVyczogSnNvbkZvcm1zUmVuZGVyZXJSZWdpc3RyeUVudHJ5W107XG4gIEBJbnB1dCgpIHVpc2NoZW1hczogeyB0ZXN0ZXI6IFVJU2NoZW1hVGVzdGVyOyB1aXNjaGVtYTogVUlTY2hlbWFFbGVtZW50IH1bXTtcbiAgQE91dHB1dCgpIGRhdGFDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHZhbGlkYXRpb25Nb2RlOiBWYWxpZGF0aW9uTW9kZTtcbiAgQElucHV0KCkgYWp2OiBBanY7XG4gIEBJbnB1dCgpIGNvbmZpZzogYW55O1xuICBASW5wdXQoKSBpMThuOiBKc29uRm9ybXNJMThuU3RhdGU7XG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxFcnJvcnM6IEVycm9yT2JqZWN0W107XG4gIEBJbnB1dCgpIG1pZGRsZXdhcmU6IE1pZGRsZXdhcmUgPSBkZWZhdWx0TWlkZGxld2FyZTtcbiAgQE91dHB1dCgpIGVycm9ycyA9IG5ldyBFdmVudEVtaXR0ZXI8RXJyb3JPYmplY3RbXT4oKTtcblxuICBwcml2YXRlIHByZXZpb3VzRGF0YTogYW55O1xuICBwcml2YXRlIHByZXZpb3VzRXJyb3JzOiBFcnJvck9iamVjdFtdO1xuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIGluaXRpYWxpemVkID0gZmFsc2U7XG4gIG9sZEkxOE46IEpzb25Gb3Jtc0kxOG5TdGF0ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGpzb25mb3Jtc1NlcnZpY2U6IEpzb25Gb3Jtc0FuZ3VsYXJTZXJ2aWNlKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuanNvbmZvcm1zU2VydmljZS5pbml0KFxuICAgICAge1xuICAgICAgICBjb3JlOiB7XG4gICAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgICAgICAgIHVpc2NoZW1hOiB0aGlzLnVpc2NoZW1hLFxuICAgICAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWEsXG4gICAgICAgICAgYWp2OiB0aGlzLmFqdixcbiAgICAgICAgICB2YWxpZGF0aW9uTW9kZTogdGhpcy52YWxpZGF0aW9uTW9kZSxcbiAgICAgICAgICBhZGRpdGlvbmFsRXJyb3JzOiB0aGlzLmFkZGl0aW9uYWxFcnJvcnMsXG4gICAgICAgIH0sXG4gICAgICAgIHVpc2NoZW1hczogdGhpcy51aXNjaGVtYXMsXG4gICAgICAgIGkxOG46IHRoaXMuaTE4bixcbiAgICAgICAgcmVuZGVyZXJzOiB0aGlzLnJlbmRlcmVycyxcbiAgICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgICAgcmVhZG9ubHk6IHRoaXMucmVhZG9ubHksXG4gICAgICB9LFxuICAgICAgdGhpcy5taWRkbGV3YXJlXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuanNvbmZvcm1zU2VydmljZS4kc3RhdGUuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHN0YXRlPy5qc29uZm9ybXM/LmNvcmU/LmRhdGE7XG4gICAgICBjb25zdCBlcnJvcnMgPSBzdGF0ZT8uanNvbmZvcm1zPy5jb3JlPy5lcnJvcnM7XG4gICAgICBpZiAodGhpcy5wcmV2aW91c0RhdGEgIT09IGRhdGEpIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c0RhdGEgPSBkYXRhO1xuICAgICAgICB0aGlzLmRhdGFDaGFuZ2UuZW1pdChkYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnByZXZpb3VzRXJyb3JzICE9PSBlcnJvcnMpIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c0Vycm9ycyA9IGVycm9ycztcbiAgICAgICAgdGhpcy5lcnJvcnMuZW1pdChlcnJvcnMpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMub2xkSTE4TiA9IHRoaXMuaTE4bjtcbiAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICAvLyB3ZSBjYW4ndCB1c2UgbmdPbkNoYW5nZXMgYXMgdGhlbiBuZXN0ZWQgaTE4biBjaGFuZ2VzIHdpbGwgbm90IGJlIGRldGVjdGVkXG4gICAgLy8gdGhlIHVwZGF0ZSB3aWxsIHJlc3VsdCBpbiBhIG5vLW9wIHdoZW4gdGhlIHBhcmFtZXRlcnMgZGlkIG5vdCBjaGFuZ2VcbiAgICBpZiAoXG4gICAgICB0aGlzLm9sZEkxOE4/LmxvY2FsZSAhPT0gdGhpcy5pMThuPy5sb2NhbGUgfHxcbiAgICAgIHRoaXMub2xkSTE4Tj8udHJhbnNsYXRlICE9PSB0aGlzLmkxOG4/LnRyYW5zbGF0ZSB8fFxuICAgICAgdGhpcy5vbGRJMThOPy50cmFuc2xhdGVFcnJvciAhPT0gdGhpcy5pMThuPy50cmFuc2xhdGVFcnJvclxuICAgICkge1xuICAgICAgdGhpcy5qc29uZm9ybXNTZXJ2aWNlLnVwZGF0ZUkxOG4oXG4gICAgICAgIEFjdGlvbnMudXBkYXRlSTE4bihcbiAgICAgICAgICB0aGlzLm9sZEkxOE4/LmxvY2FsZSA9PT0gdGhpcy5pMThuPy5sb2NhbGVcbiAgICAgICAgICAgID8gdGhpcy5qc29uZm9ybXNTZXJ2aWNlLmdldFN0YXRlKCkuanNvbmZvcm1zLmkxOG4ubG9jYWxlXG4gICAgICAgICAgICA6IHRoaXMuaTE4bj8ubG9jYWxlLFxuICAgICAgICAgIHRoaXMub2xkSTE4Tj8udHJhbnNsYXRlID09PSB0aGlzLmkxOG4/LnRyYW5zbGF0ZVxuICAgICAgICAgICAgPyB0aGlzLmpzb25mb3Jtc1NlcnZpY2UuZ2V0U3RhdGUoKS5qc29uZm9ybXMuaTE4bi50cmFuc2xhdGVcbiAgICAgICAgICAgIDogdGhpcy5pMThuPy50cmFuc2xhdGUsXG4gICAgICAgICAgdGhpcy5vbGRJMThOPy50cmFuc2xhdGVFcnJvciA9PT0gdGhpcy5pMThuPy50cmFuc2xhdGVFcnJvclxuICAgICAgICAgICAgPyB0aGlzLmpzb25mb3Jtc1NlcnZpY2UuZ2V0U3RhdGUoKS5qc29uZm9ybXMuaTE4bi50cmFuc2xhdGVFcnJvclxuICAgICAgICAgICAgOiB0aGlzLmkxOG4/LnRyYW5zbGF0ZUVycm9yXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICB0aGlzLm9sZEkxOE4gPSB0aGlzLmkxOG47XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXdEYXRhID0gY2hhbmdlcy5kYXRhO1xuICAgIGNvbnN0IG5ld1NjaGVtYSA9IGNoYW5nZXMuc2NoZW1hO1xuICAgIGNvbnN0IG5ld1VpU2NoZW1hID0gY2hhbmdlcy51aXNjaGVtYTtcbiAgICBjb25zdCBuZXdSZW5kZXJlcnMgPSBjaGFuZ2VzLnJlbmRlcmVycztcbiAgICBjb25zdCBuZXdVaXNjaGVtYXMgPSBjaGFuZ2VzLnVpc2NoZW1hcztcbiAgICBjb25zdCBuZXdJMThuID0gY2hhbmdlcy5pMThuO1xuICAgIGNvbnN0IG5ld1JlYWRvbmx5ID0gY2hhbmdlcy5yZWFkb25seTtcbiAgICBjb25zdCBuZXdWYWxpZGF0aW9uTW9kZSA9IGNoYW5nZXMudmFsaWRhdGlvbk1vZGU7XG4gICAgY29uc3QgbmV3QWp2ID0gY2hhbmdlcy5hanY7XG4gICAgY29uc3QgbmV3Q29uZmlnID0gY2hhbmdlcy5jb25maWc7XG4gICAgY29uc3QgbmV3QWRkaXRpb25hbEVycm9ycyA9IGNoYW5nZXMuYWRkaXRpb25hbEVycm9ycztcblxuICAgIGlmIChcbiAgICAgIG5ld0RhdGEgfHxcbiAgICAgIG5ld1NjaGVtYSB8fFxuICAgICAgbmV3VWlTY2hlbWEgfHxcbiAgICAgIG5ld1ZhbGlkYXRpb25Nb2RlIHx8XG4gICAgICBuZXdBanYgfHxcbiAgICAgIG5ld0FkZGl0aW9uYWxFcnJvcnNcbiAgICApIHtcbiAgICAgIHRoaXMuanNvbmZvcm1zU2VydmljZS51cGRhdGVDb3JlU3RhdGUoXG4gICAgICAgIG5ld0RhdGEgPyBuZXdEYXRhLmN1cnJlbnRWYWx1ZSA6IFVTRV9TVEFURV9WQUxVRSxcbiAgICAgICAgbmV3U2NoZW1hID8gbmV3U2NoZW1hLmN1cnJlbnRWYWx1ZSA6IFVTRV9TVEFURV9WQUxVRSxcbiAgICAgICAgbmV3VWlTY2hlbWEgPyBuZXdVaVNjaGVtYS5jdXJyZW50VmFsdWUgOiBVU0VfU1RBVEVfVkFMVUUsXG4gICAgICAgIG5ld0FqdiA/IG5ld0Fqdi5jdXJyZW50VmFsdWUgOiBVU0VfU1RBVEVfVkFMVUUsXG4gICAgICAgIG5ld1ZhbGlkYXRpb25Nb2RlID8gbmV3VmFsaWRhdGlvbk1vZGUuY3VycmVudFZhbHVlIDogVVNFX1NUQVRFX1ZBTFVFLFxuICAgICAgICBuZXdBZGRpdGlvbmFsRXJyb3JzID8gbmV3QWRkaXRpb25hbEVycm9ycy5jdXJyZW50VmFsdWUgOiBVU0VfU1RBVEVfVkFMVUVcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKG5ld1JlbmRlcmVycyAmJiAhbmV3UmVuZGVyZXJzLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgdGhpcy5qc29uZm9ybXNTZXJ2aWNlLnNldFJlbmRlcmVycyhuZXdSZW5kZXJlcnMuY3VycmVudFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAobmV3VWlzY2hlbWFzICYmICFuZXdVaXNjaGVtYXMuaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICB0aGlzLmpzb25mb3Jtc1NlcnZpY2Uuc2V0VWlTY2hlbWFzKG5ld1Vpc2NoZW1hcy5jdXJyZW50VmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChuZXdJMThuICYmICFuZXdJMThuLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgdGhpcy5qc29uZm9ybXNTZXJ2aWNlLnVwZGF0ZUkxOG4oXG4gICAgICAgIEFjdGlvbnMudXBkYXRlSTE4bihcbiAgICAgICAgICBuZXdJMThuLmN1cnJlbnRWYWx1ZT8ubG9jYWxlLFxuICAgICAgICAgIG5ld0kxOG4uY3VycmVudFZhbHVlPy50cmFuc2xhdGUsXG4gICAgICAgICAgbmV3STE4bi5jdXJyZW50VmFsdWU/LnRyYW5zbGF0ZUVycm9yXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKG5ld1JlYWRvbmx5ICYmICFuZXdSZWFkb25seS5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgIHRoaXMuanNvbmZvcm1zU2VydmljZS5zZXRSZWFkb25seShuZXdSZWFkb25seS5jdXJyZW50VmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChuZXdDb25maWcgJiYgIW5ld0NvbmZpZy5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgIHRoaXMuanNvbmZvcm1zU2VydmljZS51cGRhdGVDb25maWcoXG4gICAgICAgIEFjdGlvbnMuc2V0Q29uZmlnKG5ld0NvbmZpZy5jdXJyZW50VmFsdWUpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiJdfQ==