UNPKG

ang-jsoneditor

Version:

[![Build Status](https://travis-ci.org/mariohmol/ang-jsoneditor.svg?branch=master)](https://travis-ci.org/mariohmol/ang-jsoneditor)

233 lines 24.2 kB
/* eslint-disable @typescript-eslint/ban-types */ /* eslint-disable @angular-eslint/no-input-rename */ /* eslint-disable @angular-eslint/no-output-native */ import JSONEditor from 'jsoneditor'; import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, forwardRef } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { JsonEditorOptions } from './jsoneditoroptions'; import * as i0 from "@angular/core"; export class JsonEditorComponent { constructor() { this.options = new JsonEditorOptions(); this.change = new EventEmitter(); this.jsonChange = new EventEmitter(); this.debug = false; this.optionsChanged = false; this.disabled = false; this.isFocused = false; this.id = 'angjsoneditor' + Math.floor(Math.random() * 1000000); this._data = {}; this.onChange = () => { if (this.editor) { try { const json = this.editor.get(); this.onChangeModel(json); this.change.emit(json); } catch (error) { if (this.debug) { console.log(error); } } } }; this.onChangeJSON = () => { if (this.editor) { try { this.jsonChange.emit(this.editor.get()); } catch (error) { if (this.debug) { console.log(error); } } } }; // 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) { //TODO: check if this is needed optionsBefore = this.editor.options; } if (!this.options.onChangeJSON && this.jsonChange) { this.options.onChangeJSON = this.onChangeJSON; } if (!this.options.onChange && this.change) { this.options.onChange = this.onChange; } 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.modes && (optionsCopy.modes.indexOf('text') !== -1 || optionsCopy.modes.indexOf('code') !== -1))) { optionsCopy.onChangeJSON = undefined; } 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; } /** * 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() { //TODO: check if this is needed return this.editor.validateSchema; } setSchema(schema, schemaRefs) { this.editor.setSchema(schema, schemaRefs); } search(query) { //TODO: check if this is needed 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() { //TODO: made it any because of the missing type definition return this.editor; } isValidJson() { try { JSON.parse(this.getText()); return true; } catch (e) { return false; } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: JsonEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.2", type: JsonEditorComponent, isStandalone: true, selector: "json-editor", inputs: { options: "options", debug: "debug", data: "data" }, 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: "17.0.2", ngImport: i0, type: JsonEditorComponent, decorators: [{ type: Component, args: [{ // eslint-disable-next-line @angular-eslint/component-selector selector: 'json-editor', standalone: true, template: `<div [id]="id" #jsonEditorContainer></div>`, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => JsonEditorComponent), multi: true } ], preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush }] }], ctorParameters: () => [], propDecorators: { jsonEditorContainer: [{ type: ViewChild, args: ['jsonEditorContainer', { static: true }] }], options: [{ type: Input }], change: [{ type: Output }], jsonChange: [{ type: Output }], debug: [{ type: Input }], data: [{ type: Input, args: ['data'] }] } }); export { JsonEditorOptions }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbmVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmctanNvbmVkaXRvci9zcmMvbGliL2pzb25lZGl0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlEQUFpRDtBQUNqRCxvREFBb0Q7QUFDcEQscURBQXFEO0FBRXJELE9BQU8sVUFBVSxNQUFNLFlBQVksQ0FBQztBQUVwQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1QsVUFBVSxFQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQTBCLGlCQUFpQixFQUFzQixNQUFNLHFCQUFxQixDQUFDOztBQWtCcEcsTUFBTSxPQUFPLG1CQUFtQjtJQWlCOUI7UUFmUyxZQUFPLEdBQXNCLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUU5RCxXQUFNLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFFcEQsZUFBVSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBQy9DLFVBQUssR0FBRyxLQUFLLENBQUM7UUFDaEIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFFOUIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRVgsT0FBRSxHQUFHLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUMxRCxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBb0ZwQixhQUFRLEdBQUcsR0FBRyxFQUFFO1lBQ3JCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDZixJQUFJO29CQUNGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUN4QjtnQkFBQyxPQUFPLEtBQUssRUFBRTtvQkFDZCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7d0JBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDcEI7aUJBQ0Y7YUFDRjtRQUNILENBQUMsQ0FBQTtRQUVNLGlCQUFZLEdBQUcsR0FBRyxFQUFFO1lBQ3pCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDZixJQUFJO29CQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztpQkFDekM7Z0JBQUMsT0FBTyxLQUFLLEVBQUU7b0JBQ2QsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO3dCQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQ3BCO2lCQUNGO2FBQ0Y7UUFDSCxDQUFDLENBQUE7UUFvR0QsK0NBQStDO1FBQ3ZDLGNBQVMsR0FBRyxHQUFHLEVBQUU7UUFDekIsQ0FBQyxDQUFDO1FBRUYsK0NBQStDO1FBQ3ZDLGtCQUFhLEdBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRTtRQUNuQyxDQUFDLENBQUM7SUFuTmMsQ0FBQztJQUVqQixJQUNJLElBQUksQ0FBQyxLQUFhO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2pCO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDdkMsK0JBQStCO1lBQy9CLGFBQWEsR0FBSSxJQUFJLENBQUMsTUFBYyxDQUFDLE9BQU8sQ0FBQztTQUM5QztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pELElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDL0M7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUN6QyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ3ZDO1FBQ0QsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFckQsa0dBQWtHO1FBQ2xHLE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUM3QixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdEM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRTtZQUMzQyxPQUFPLENBQUMsS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7U0FDdEU7UUFFRCxJQUNJLFdBQVcsQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLFdBQVcsQ0FBQyxJQUFJLEtBQUssTUFBTTtZQUMxRCxDQUNFLFdBQVcsQ0FBQyxLQUFLO2dCQUNqQixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQ3ZGLEVBQ0Q7WUFDRixXQUFXLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztTQUN0QztRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxXQUFrQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVyRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBR0Q7OztPQUdHO0lBRUgsc0NBQXNDO0lBQ3RDLFVBQVUsQ0FBQyxLQUFVO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCw4Q0FBOEM7SUFDOUMsZ0JBQWdCLENBQUMsRUFBTztRQUN0QixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsK0NBQStDO0lBQy9DLGlCQUFpQixDQUFDLEVBQU87UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELCtDQUErQztJQUMvQyxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUM3QixDQUFDO0lBNkJEOztPQUVHO0lBRUksV0FBVztRQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFTSxTQUFTO1FBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU0sS0FBSztRQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVNLEdBQUc7UUFDUixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVNLE9BQU87UUFDWixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFvQixDQUFDO0lBQ2pELENBQUM7SUFFTSxPQUFPO1FBQ1osT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRyxDQUFDO0lBQ2hDLENBQUM7SUFFTSxPQUFPO1FBQ1osT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFTSxHQUFHLENBQUMsSUFBVTtRQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRU0sT0FBTyxDQUFDLElBQW9CO1FBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFTSxPQUFPLENBQUMsSUFBWTtRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRU0sWUFBWSxDQUFDLEtBQVUsRUFBRSxHQUFRO1FBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU0sWUFBWTtRQUNqQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QiwrQkFBK0I7UUFDL0IsT0FBUSxJQUFJLENBQUMsTUFBYyxDQUFDLGNBQWMsQ0FBQztJQUM3QyxDQUFDO0lBRU0sU0FBUyxDQUFDLE1BQVcsRUFBRSxVQUFlO1FBQzNDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQWE7UUFDekIsK0JBQStCO1FBQzlCLElBQUksQ0FBQyxNQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTSxVQUFVLENBQUMsVUFBNkI7UUFDN0MsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUN2QjtRQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDO1FBQzFCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRU0sTUFBTSxDQUFDLElBQVU7UUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVNLE9BQU87UUFDWixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFTSxTQUFTO1FBQ2QsMERBQTBEO1FBQzFELE9BQU8sSUFBSSxDQUFDLE1BQWEsQ0FBQztJQUM1QixDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJO1lBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUMzQixPQUFPLElBQUksQ0FBQztTQUNiO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQzs4R0E1TlUsbUJBQW1CO2tHQUFuQixtQkFBbUIsaUxBWG5CO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztnQkFDbEQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLG9LQVBTLDRDQUE0Qzs7MkZBWTNDLG1CQUFtQjtrQkFoQi9CLFNBQVM7bUJBQUM7b0JBQ1QsOERBQThEO29CQUM5RCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSw0Q0FBNEM7b0JBQ3RELFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQzs0QkFDbEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7b0JBQ0QsbUJBQW1CLEVBQUUsS0FBSztvQkFDMUIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEO3dEQUdxRCxtQkFBbUI7c0JBQXRFLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUN6QyxPQUFPO3NCQUFmLEtBQUs7Z0JBRU4sTUFBTTtzQkFETCxNQUFNO2dCQUdQLFVBQVU7c0JBRFQsTUFBTTtnQkFFRSxLQUFLO3NCQUFiLEtBQUs7Z0JBYUYsSUFBSTtzQkFEUCxLQUFLO3VCQUFDLE1BQU07O0FBb05mLE9BQU8sRUFBRSxpQkFBaUIsRUFBOEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9uby1pbnB1dC1yZW5hbWUgKi9cbi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlICovXG5cbmltcG9ydCBKU09ORWRpdG9yIGZyb20gJ2pzb25lZGl0b3InO1xuXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIGZvcndhcmRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJRXJyb3IsIEpzb25FZGl0b3JNb2RlLCBKc29uRWRpdG9yT3B0aW9ucywgSnNvbkVkaXRvclRyZWVOb2RlIH0gZnJvbSAnLi9qc29uZWRpdG9yb3B0aW9ucyc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2pzb24tZWRpdG9yJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGU6IGA8ZGl2IFtpZF09XCJpZFwiICNqc29uRWRpdG9yQ29udGFpbmVyPjwvZGl2PmAsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSnNvbkVkaXRvckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXSxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuXG5leHBvcnQgY2xhc3MgSnNvbkVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ2pzb25FZGl0b3JDb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBqc29uRWRpdG9yQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuICBASW5wdXQoKSBvcHRpb25zOiBKc29uRWRpdG9yT3B0aW9ucyA9IG5ldyBKc29uRWRpdG9yT3B0aW9ucygpO1xuICBAT3V0cHV0KClcbiAgY2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAganNvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQElucHV0KCkgZGVidWcgPSBmYWxzZTtcbiAgcHVibGljIG9wdGlvbnNDaGFuZ2VkID0gZmFsc2U7XG5cbiAgZGlzYWJsZWQgPSBmYWxzZTtcbiAgaXNGb2N1c2VkID0gZmFsc2U7XG5cbiAgcHVibGljIGlkID0gJ2FuZ2pzb25lZGl0b3InICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMCk7XG4gIHByaXZhdGUgX2RhdGE6IE9iamVjdCA9IHt9O1xuICBwcml2YXRlIGVkaXRvcjogSlNPTkVkaXRvcjtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIEBJbnB1dCgnZGF0YScpXG4gIHNldCBkYXRhKHZhbHVlOiBPYmplY3QpIHtcbiAgICB0aGlzLl9kYXRhID0gdmFsdWU7XG4gICAgaWYgKHRoaXMuZWRpdG9yKSB7XG4gICAgICB0aGlzLmVkaXRvci5kZXN0cm95KCk7XG4gICAgICB0aGlzLm5nT25Jbml0KCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgbGV0IG9wdGlvbnNCZWZvcmUgPSB0aGlzLm9wdGlvbnM7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnNDaGFuZ2VkICYmIHRoaXMuZWRpdG9yKSB7XG4gICAgICAvL1RPRE86IGNoZWNrIGlmIHRoaXMgaXMgbmVlZGVkXG4gICAgICBvcHRpb25zQmVmb3JlID0gKHRoaXMuZWRpdG9yIGFzIGFueSkub3B0aW9ucztcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5vbkNoYW5nZUpTT04gJiYgdGhpcy5qc29uQ2hhbmdlKSB7XG4gICAgICB0aGlzLm9wdGlvbnMub25DaGFuZ2VKU09OID0gdGhpcy5vbkNoYW5nZUpTT047XG4gICAgfVxuICAgIGlmICghdGhpcy5vcHRpb25zLm9uQ2hhbmdlICYmIHRoaXMuY2hhbmdlKSB7XG4gICAgICB0aGlzLm9wdGlvbnMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25zQ29weSA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnNCZWZvcmUpO1xuXG4gICAgLy8gZXhwYW5kQWxsIGlzIGFuIG9wdGlvbiBvbmx5IHN1cHBvcnRlZCBieSBhbmctanNvbmVkaXRvciBhbmQgbm90IGJ5IHRoZSB0aGUgb3JpZ2luYWwganNvbmVkaXRvci5cbiAgICBkZWxldGUgb3B0aW9uc0NvcHkuZXhwYW5kQWxsO1xuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICBjb25zb2xlLmxvZyhvcHRpb25zQ29weSwgdGhpcy5fZGF0YSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5qc29uRWRpdG9yQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYENhbid0IGZpbmQgdGhlIEVsZW1lbnRSZWYgcmVmZXJlbmNlIGZvciBqc29uZWRpdG9yKWApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgICAgb3B0aW9uc0NvcHkubW9kZSA9PT0gJ3RleHQnIHx8IG9wdGlvbnNDb3B5Lm1vZGUgPT09ICdjb2RlJyB8fFxuICAgICAgICAoXG4gICAgICAgICAgb3B0aW9uc0NvcHkubW9kZXMgJiZcbiAgICAgICAgICAob3B0aW9uc0NvcHkubW9kZXMuaW5kZXhPZigndGV4dCcpICE9PSAtMSB8fCBvcHRpb25zQ29weS5tb2Rlcy5pbmRleE9mKCdjb2RlJykgIT09IC0xKVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgIG9wdGlvbnNDb3B5Lm9uQ2hhbmdlSlNPTiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5lZGl0b3IgPSBuZXcgSlNPTkVkaXRvcih0aGlzLmpzb25FZGl0b3JDb250YWluZXIubmF0aXZlRWxlbWVudCwgb3B0aW9uc0NvcHkgYXMgYW55LCB0aGlzLl9kYXRhKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZXhwYW5kQWxsKSB7XG4gICAgICB0aGlzLmVkaXRvci5leHBhbmRBbGwoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIG5nTW9kZWxcbiAgICogQ29udHJvbFZhbHVlQWNjZXNzb3JcbiAgICovXG5cbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW1wbGVtZW50YXRpb25cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5kYXRhID0gdmFsdWU7XG4gIH1cblxuICAvLyBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgIHRoaXMub25DaGFuZ2VNb2RlbCA9IGZuO1xuICB9XG5cbiAgLy8gSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICAvLyBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHB1YmxpYyBvbkNoYW5nZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5lZGl0b3IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLmVkaXRvci5nZXQoKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZU1vZGVsKGpzb24pO1xuICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KGpzb24pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25DaGFuZ2VKU09OID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLmVkaXRvcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5qc29uQ2hhbmdlLmVtaXQodGhpcy5lZGl0b3IuZ2V0KCkpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBKU09OIEVESVRPUiBGVU5DVElPTlNcbiAgICovXG5cbiAgcHVibGljIGNvbGxhcHNlQWxsKCkge1xuICAgIHRoaXMuZWRpdG9yLmNvbGxhcHNlQWxsKCk7XG4gIH1cblxuICBwdWJsaWMgZXhwYW5kQWxsKCkge1xuICAgIHRoaXMuZWRpdG9yLmV4cGFuZEFsbCgpO1xuICB9XG5cbiAgcHVibGljIGZvY3VzKCkge1xuICAgIHRoaXMuZWRpdG9yLmZvY3VzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0KCk6IEpTT04ge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5nZXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNb2RlKCk6IEpzb25FZGl0b3JNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IuZ2V0TW9kZSgpIGFzIEpzb25FZGl0b3JNb2RlO1xuICB9XG5cbiAgcHVibGljIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IuZ2V0TmFtZSgpITtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmdldFRleHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQoanNvbjogSlNPTikge1xuICAgIHRoaXMuZWRpdG9yLnNldChqc29uKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRNb2RlKG1vZGU6IEpzb25FZGl0b3JNb2RlKSB7XG4gICAgdGhpcy5lZGl0b3Iuc2V0TW9kZShtb2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXROYW1lKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuZWRpdG9yLnNldE5hbWUobmFtZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0U2VsZWN0aW9uKHN0YXJ0OiBhbnksIGVuZDogYW55KSB7XG4gICAgdGhpcy5lZGl0b3Iuc2V0U2VsZWN0aW9uKHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGlvbigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5nZXRTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRWYWxpZGF0ZVNjaGVtYSgpOiBhbnkge1xuICAgIC8vVE9ETzogY2hlY2sgaWYgdGhpcyBpcyBuZWVkZWRcbiAgICByZXR1cm4gKHRoaXMuZWRpdG9yIGFzIGFueSkudmFsaWRhdGVTY2hlbWE7XG4gIH1cblxuICBwdWJsaWMgc2V0U2NoZW1hKHNjaGVtYTogYW55LCBzY2hlbWFSZWZzOiBhbnkpIHtcbiAgICB0aGlzLmVkaXRvci5zZXRTY2hlbWEoc2NoZW1hLCBzY2hlbWFSZWZzKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWFyY2gocXVlcnk6IHN0cmluZykge1xuICAgIC8vVE9ETzogY2hlY2sgaWYgdGhpcyBpcyBuZWVkZWRcbiAgICAodGhpcy5lZGl0b3IgYXMgYW55KS5zZWFyY2gocXVlcnkpO1xuICB9XG5cbiAgcHVibGljIHNldE9wdGlvbnMobmV3T3B0aW9uczogSnNvbkVkaXRvck9wdGlvbnMpIHtcbiAgICBpZiAodGhpcy5lZGl0b3IpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zQ2hhbmdlZCA9IHRydWU7XG4gICAgdGhpcy5vcHRpb25zID0gbmV3T3B0aW9ucztcbiAgICB0aGlzLm5nT25Jbml0KCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlKGpzb246IEpTT04pIHtcbiAgICB0aGlzLmVkaXRvci51cGRhdGUoanNvbik7XG4gIH1cblxuICBwdWJsaWMgZGVzdHJveSgpIHtcbiAgICB0aGlzLmVkaXRvci5kZXN0cm95KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RWRpdG9yKCl7XG4gICAgLy9UT0RPOiBtYWRlIGl0IGFueSBiZWNhdXNlIG9mIHRoZSBtaXNzaW5nIHR5cGUgZGVmaW5pdGlvblxuICAgIHJldHVybiB0aGlzLmVkaXRvciBhcyBhbnk7XG4gIH1cblxuICBwdWJsaWMgaXNWYWxpZEpzb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgIEpTT04ucGFyc2UodGhpcy5nZXRUZXh0KCkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gIHByaXZhdGUgb25Ub3VjaGVkID0gKCkgPT4ge1xuICB9O1xuXG4gIC8vIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gIHByaXZhdGUgb25DaGFuZ2VNb2RlbCA9IChlOiBhbnkpID0+IHtcbiAgfTtcbn1cblxuZXhwb3J0IHsgSnNvbkVkaXRvck9wdGlvbnMsIEpzb25FZGl0b3JNb2RlLCBKc29uRWRpdG9yVHJlZU5vZGUsIElFcnJvciB9O1xuIl19