@maaxgr/ang-jsoneditor
Version:
This is a fork of mariohmol's [ang-jsoneditor](https://github.com/mariohmol/ang-jsoneditor) with support for Angular 11, 12, 13 and 14. This repository will probably become stale, when the original will be actively maintained again.
223 lines • 23.2 kB
JavaScript
import { Component, Input, ViewChild, Output, EventEmitter, forwardRef, ChangeDetectionStrategy } from '@angular/core';
import JSONEditor from "jsoneditor";
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { JsonEditorOptions } from './jsoneditoroptions';
import * as i0 from "@angular/core";
export class JsonEditorComponent {
constructor() {
this.id = 'angjsoneditor' + Math.floor(Math.random() * 1000000);
this.disabled = false;
this.isFocused = false;
this.optionsChanged = false;
this._data = {};
this.options = new JsonEditorOptions();
this.debug = false;
this.change = new EventEmitter();
this.jsonChange = new EventEmitter();
// Implemented as part of ControlValueAccessor.
this.onTouched = () => {
};
// Implemented as part of ControlValueAccessor.
this.onChangeModel = (e) => {
};
}
set data(value) {
this._data = value;
if (this.editor) {
this.editor.destroy();
this.ngOnInit();
}
}
ngOnInit() {
let optionsBefore = this.options;
if (!this.optionsChanged && this.editor) {
optionsBefore = this.editor.options;
}
if (!this.options.onChangeJSON && this.jsonChange) {
this.options.onChangeJSON = this.onChangeJSON.bind(this);
}
if (!this.options.onChange && this.change) {
this.options.onChange = this.onChange.bind(this);
}
const optionsCopy = Object.assign({}, optionsBefore);
// expandAll is an option only supported by ang-jsoneditor and not by the the original jsoneditor.
delete optionsCopy.expandAll;
if (this.debug) {
console.log(optionsCopy, this._data);
}
if (!this.jsonEditorContainer.nativeElement) {
console.error(`Can't find the ElementRef reference for jsoneditor)`);
}
if (optionsCopy.mode === 'text' || optionsCopy.mode === 'code') {
optionsCopy.onChangeJSON = null;
}
this.editor = new JSONEditor(this.jsonEditorContainer.nativeElement, optionsCopy, this._data);
if (this.options.expandAll) {
this.editor.expandAll();
}
}
ngOnDestroy() {
this.destroy();
}
/**
* ngModel
* ControlValueAccessor
*/
// ControlValueAccessor implementation
writeValue(value) {
this.data = value;
}
// Implemented as part of ControlValueAccessor
registerOnChange(fn) {
this.onChangeModel = fn;
}
// Implemented as part of ControlValueAccessor.
registerOnTouched(fn) {
this.onTouched = fn;
}
// Implemented as part of ControlValueAccessor.
setDisabledState(isDisabled) {
this.disabled = isDisabled;
}
onChange(e) {
if (this.editor) {
try {
const json = this.editor.get();
this.onChangeModel(json);
this.change.emit(json);
}
catch (e) {
if (this.debug) {
console.log(e);
}
}
}
}
onChangeJSON(e) {
if (this.editor) {
try {
this.jsonChange.emit(this.editor.get());
}
catch (e) {
if (this.debug) {
console.log(e);
}
}
}
}
/**
* JSON EDITOR FUNCTIONS
*/
collapseAll() {
this.editor.collapseAll();
}
expandAll() {
this.editor.expandAll();
}
focus() {
this.editor.focus();
}
get() {
return this.editor.get();
}
getMode() {
return this.editor.getMode();
}
getName() {
return this.editor.getName();
}
getText() {
return this.editor.getText();
}
set(json) {
this.editor.set(json);
}
setMode(mode) {
this.editor.setMode(mode);
}
setName(name) {
this.editor.setName(name);
}
setSelection(start, end) {
this.editor.setSelection(start, end);
}
getSelection() {
return this.editor.getSelection();
}
getValidateSchema() {
return this.editor.validateSchema;
}
setSchema(schema, schemaRefs) {
this.editor.setSchema(schema, schemaRefs);
}
search(query) {
this.editor.search(query);
}
setOptions(newOptions) {
if (this.editor) {
this.editor.destroy();
}
this.optionsChanged = true;
this.options = newOptions;
this.ngOnInit();
}
update(json) {
this.editor.update(json);
}
destroy() {
this.editor?.destroy();
}
getEditor() {
return this.editor;
}
isValidJson() {
try {
JSON.parse(this.getText());
return true;
}
catch (e) {
return false;
}
}
}
JsonEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: JsonEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
JsonEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: JsonEditorComponent, selector: "json-editor", inputs: { options: "options", data: "data", debug: "debug" }, outputs: { change: "change", jsonChange: "jsonChange" }, providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => JsonEditorComponent),
multi: true
}
], viewQueries: [{ propertyName: "jsonEditorContainer", first: true, predicate: ["jsonEditorContainer"], descendants: true, static: true }], ngImport: i0, template: `<div [id]="id" #jsonEditorContainer></div>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: JsonEditorComponent, decorators: [{
type: Component,
args: [{
// tslint:disable-next-line:component-selector
selector: 'json-editor',
template: `<div [id]="id" #jsonEditorContainer></div>`,
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => JsonEditorComponent),
multi: true
}
],
preserveWhitespaces: false,
changeDetection: ChangeDetectionStrategy.OnPush
}]
}], ctorParameters: function () { return []; }, propDecorators: { jsonEditorContainer: [{
type: ViewChild,
args: ['jsonEditorContainer', { static: true }]
}], options: [{
type: Input
}], data: [{
type: Input,
args: ['data']
}], debug: [{
type: Input
}], change: [{
type: Output
}], jsonChange: [{
type: Output
}] } });
export { JsonEditorOptions };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbmVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmctanNvbmVkaXRvci9zcmMvbGliL2pzb25lZGl0b3IvanNvbmVkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFBYyxLQUFLLEVBQXFCLFNBQVMsRUFDMUQsTUFBTSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsdUJBQXVCLEVBQzFELE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sVUFBVSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGlCQUFpQixFQUE4QyxNQUFNLHFCQUFxQixDQUFDOztBQWlCcEcsTUFBTSxPQUFPLG1CQUFtQjtJQTRCOUI7UUExQk8sT0FBRSxHQUFHLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUNsRSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFWCxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUl0QixVQUFLLEdBQVcsRUFBRSxDQUFDO1FBRWxCLFlBQU8sR0FBc0IsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBU3JELFVBQUssR0FBRyxLQUFLLENBQUM7UUFHdkIsV0FBTSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXBELGVBQVUsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQXFFeEQsK0NBQStDO1FBQ3ZDLGNBQVMsR0FBRyxHQUFHLEVBQUU7UUFDekIsQ0FBQyxDQUFDO1FBRUYsK0NBQStDO1FBQ3ZDLGtCQUFhLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUM5QixDQUFDLENBQUM7SUF4RUYsQ0FB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TUFBTTtnQkFRSixLQUFLO3NCQUFiLEtBQUs7Z0JBR04sTUFBTTtzQkFETCxNQUFNO2dCQUdQLFVBQVU7c0JBRFQsTUFBTTs7QUF3TVQsT0FBTyxFQUFFLGlCQUFpQixFQUE4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQsIE9uRGVzdHJveSwgVmlld0NoaWxkLFxyXG4gIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneVxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgSlNPTkVkaXRvciBmcm9tIFwianNvbmVkaXRvclwiO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEpzb25FZGl0b3JPcHRpb25zLCBKc29uRWRpdG9yTW9kZSwgSnNvbkVkaXRvclRyZWVOb2RlLCBJRXJyb3IgfSBmcm9tICcuL2pzb25lZGl0b3JvcHRpb25zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcclxuICBzZWxlY3RvcjogJ2pzb24tZWRpdG9yJyxcclxuICB0ZW1wbGF0ZTogYDxkaXYgW2lkXT1cImlkXCIgI2pzb25FZGl0b3JDb250YWluZXI+PC9kaXY+YCxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEpzb25FZGl0b3JDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfVxyXG4gIF0sXHJcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBKc29uRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIGVkaXRvcjogYW55O1xyXG4gIHB1YmxpYyBpZCA9ICdhbmdqc29uZWRpdG9yJyArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDApO1xyXG4gIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgaXNGb2N1c2VkID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBvcHRpb25zQ2hhbmdlZCA9IGZhbHNlO1xyXG5cclxuICBAVmlld0NoaWxkKCdqc29uRWRpdG9yQ29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSkganNvbkVkaXRvckNvbnRhaW5lcjogRWxlbWVudFJlZjtcclxuXHJcbiAgcHJpdmF0ZSBfZGF0YTogT2JqZWN0ID0ge307XHJcblxyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IEpzb25FZGl0b3JPcHRpb25zID0gbmV3IEpzb25FZGl0b3JPcHRpb25zKCk7XHJcbiAgQElucHV0KCdkYXRhJylcclxuICBzZXQgZGF0YSh2YWx1ZTogT2JqZWN0KSB7XHJcbiAgICB0aGlzLl9kYXRhID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5lZGl0b3IpIHtcclxuICAgICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpO1xyXG4gICAgICB0aGlzLm5nT25Jbml0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGRlYnVnID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIGNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KClcclxuICBqc29uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICB9XHJcblxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGxldCBvcHRpb25zQmVmb3JlID0gdGhpcy5vcHRpb25zO1xyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnNDaGFuZ2VkICYmIHRoaXMuZWRpdG9yKSB7XHJcbiAgICAgIG9wdGlvbnNCZWZvcmUgPSB0aGlzLmVkaXRvci5vcHRpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5vcHRpb25zLm9uQ2hhbmdlSlNPTiAmJiB0aGlzLmpzb25DaGFuZ2UpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLm9uQ2hhbmdlSlNPTiA9IHRoaXMub25DaGFuZ2VKU09OLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5vbkNoYW5nZSAmJiB0aGlzLmNoYW5nZSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBvcHRpb25zQ29weSA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnNCZWZvcmUpO1xyXG5cclxuICAgIC8vIGV4cGFuZEFsbCBpcyBhbiBvcHRpb24gb25seSBzdXBwb3J0ZWQgYnkgYW5nLWpzb25lZGl0b3IgYW5kIG5vdCBieSB0aGUgdGhlIG9yaWdpbmFsIGpzb25lZGl0b3IuXHJcbiAgICBkZWxldGUgb3B0aW9uc0NvcHkuZXhwYW5kQWxsO1xyXG4gICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgY29uc29sZS5sb2cob3B0aW9uc0NvcHksIHRoaXMuX2RhdGEpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmpzb25FZGl0b3JDb250YWluZXIubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBDYW4ndCBmaW5kIHRoZSBFbGVtZW50UmVmIHJlZmVyZW5jZSBmb3IganNvbmVkaXRvcilgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob3B0aW9uc0NvcHkubW9kZSA9PT0gJ3RleHQnIHx8IG9wdGlvbnNDb3B5Lm1vZGUgPT09ICdjb2RlJykge1xyXG4gICAgICBvcHRpb25zQ29weS5vbkNoYW5nZUpTT04gPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lZGl0b3IgPSBuZXcgSlNPTkVkaXRvcih0aGlzLmpzb25FZGl0b3JDb250YWluZXIubmF0aXZlRWxlbWVudCwgb3B0aW9uc0NvcHksIHRoaXMuX2RhdGEpO1xyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuZXhwYW5kQWxsKSB7XHJcbiAgICAgIHRoaXMuZWRpdG9yLmV4cGFuZEFsbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmRlc3Ryb3koKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBuZ01vZGVsXHJcbiAgICogQ29udHJvbFZhbHVlQWNjZXNzb3JcclxuICAgKi9cclxuXHJcbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW1wbGVtZW50YXRpb25cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuZGF0YSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3NvclxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm4pIHtcclxuICAgIHRoaXMub25DaGFuZ2VNb2RlbCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgLy8gSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbikge1xyXG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIC8vIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXHJcbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIC8vIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXHJcbiAgcHJpdmF0ZSBvblRvdWNoZWQgPSAoKSA9PiB7XHJcbiAgfTtcclxuXHJcbiAgLy8gSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cclxuICBwcml2YXRlIG9uQ2hhbmdlTW9kZWwgPSAoZSkgPT4ge1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBvbkNoYW5nZShlKSB7XHJcbiAgICBpZiAodGhpcy5lZGl0b3IpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBqc29uID0gdGhpcy5lZGl0b3IuZ2V0KCk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZU1vZGVsKGpzb24pO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlLmVtaXQoanNvbik7XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DaGFuZ2VKU09OKGUpIHtcclxuICAgIGlmICh0aGlzLmVkaXRvcikge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuanNvbkNoYW5nZS5lbWl0KHRoaXMuZWRpdG9yLmdldCgpKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBKU09OIEVESVRPUiBGVU5DVElPTlNcclxuICAgKi9cclxuXHJcbiAgcHVibGljIGNvbGxhcHNlQWxsKCkge1xyXG4gICAgdGhpcy5lZGl0b3IuY29sbGFwc2VBbGwoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBhbmRBbGwoKSB7XHJcbiAgICB0aGlzLmVkaXRvci5leHBhbmRBbGwoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmb2N1cygpIHtcclxuICAgIHRoaXMuZWRpdG9yLmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0KCk6IEpTT04ge1xyXG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmdldCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldE1vZGUoKTogSnNvbkVkaXRvck1vZGUge1xyXG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmdldE1vZGUoKSBhcyBKc29uRWRpdG9yTW9kZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXROYW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IuZ2V0TmFtZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFRleHQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmVkaXRvci5nZXRUZXh0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0KGpzb246IEpTT04pIHtcclxuICAgIHRoaXMuZWRpdG9yLnNldChqc29uKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRNb2RlKG1vZGU6IEpzb25FZGl0b3JNb2RlKSB7XHJcbiAgICB0aGlzLmVkaXRvci5zZXRNb2RlKG1vZGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldE5hbWUobmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmVkaXRvci5zZXROYW1lKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFNlbGVjdGlvbihzdGFydCwgZW5kKSB7XHJcbiAgICB0aGlzLmVkaXRvci5zZXRTZWxlY3Rpb24oc3RhcnQsIGVuZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U2VsZWN0aW9uKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VmFsaWRhdGVTY2hlbWEoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLmVkaXRvci52YWxpZGF0ZVNjaGVtYTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRTY2hlbWEoc2NoZW1hOiBhbnksIHNjaGVtYVJlZnM6IGFueSkge1xyXG4gICAgdGhpcy5lZGl0b3Iuc2V0U2NoZW1hKHNjaGVtYSwgc2NoZW1hUmVmcyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VhcmNoKHF1ZXJ5OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZWRpdG9yLnNlYXJjaChxdWVyeSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0T3B0aW9ucyhuZXdPcHRpb25zOiBKc29uRWRpdG9yT3B0aW9ucykge1xyXG4gICAgaWYgKHRoaXMuZWRpdG9yKSB7XHJcbiAgICAgIHRoaXMuZWRpdG9yLmRlc3Ryb3koKTtcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9uc0NoYW5nZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5vcHRpb25zID0gbmV3T3B0aW9ucztcclxuICAgIHRoaXMubmdPbkluaXQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGUoanNvbjogSlNPTikge1xyXG4gICAgdGhpcy5lZGl0b3IudXBkYXRlKGpzb24pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmVkaXRvcj8uZGVzdHJveSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEVkaXRvcigpe1xyXG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzVmFsaWRKc29uKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgSlNPTi5wYXJzZSh0aGlzLmdldFRleHQoKSk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgeyBKc29uRWRpdG9yT3B0aW9ucywgSnNvbkVkaXRvck1vZGUsIEpzb25FZGl0b3JUcmVlTm9kZSwgSUVycm9yIH07XHJcbiJdfQ==