ang-jsoneditor
Version:
[](https://travis-ci.org/mariohmol/ang-jsoneditor)
233 lines • 24.2 kB
JavaScript
/* 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbmVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmctanNvbmVkaXRvci9zcmMvbGliL2pzb25lZGl0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlEQUFpRDtBQUNqRCxvREFBb0Q7QUFDcEQscURBQXFEO0FBRXJELE9BQU8sVUFBVSxNQUFNLFlBQVksQ0FBQztBQUVwQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1QsVUFBVSxFQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQTBCLGlCQUFpQixFQUFzQixNQUFNLHFCQUFxQixDQUFDOztBQWtCcEcsTUFBTSxPQUFPLG1CQUFtQjtJQWlCOUI7UUFmUyxZQUFPLEdBQXNCLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUU5RCxXQUFNLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFFcEQsZUFBVSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBQy9DLFVBQUssR0FBRyxLQUFLLENBQUM7UUFDaEIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFFOUIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRVgsT0FBRSxHQUFHLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUMxRCxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBb0ZwQixhQUFRLEdBQUcsR0FBRyxFQUFFO1lBQ3JCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDZixJQUFJO29CQUNGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENB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VSxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQzs0QkFDbEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7b0JBQ0QsbUJBQW1CLEVBQUUsS0FBSztvQkFDMUIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEO3dEQUdxRCxtQkFBbUI7c0JBQXRFLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUN6QyxPQUFPO3NCQUFmLEtBQUs7Z0JBRU4sTUFBTTtzQkFETCxNQUFNO2dCQUdQLFVBQVU7c0JBRFQsTUFBTTtnQkFFRSxLQUFLO3NCQUFiLEtBQUs7Z0JBYUYsSUFBSTtzQkFEUCxLQUFLO3VCQUFDLE1BQU07O0FBb05mLE9BQU8sRUFBRSxpQkFBaUIsRUFBOEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9uby1pbnB1dC1yZW5hbWUgKi9cbi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlICovXG5cbmltcG9ydCBKU09ORWRpdG9yIGZyb20gJ2pzb25lZGl0b3InO1xuXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIGZvcndhcmRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJRXJyb3IsIEpzb25FZGl0b3JNb2RlLCBKc29uRWRpdG9yT3B0aW9ucywgSnNvbkVkaXRvclRyZWVOb2RlIH0gZnJvbSAnLi9qc29uZWRpdG9yb3B0aW9ucyc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2pzb24tZWRpdG9yJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGU6IGA8ZGl2IFtpZF09XCJpZFwiICNqc29uRWRpdG9yQ29udGFpbmVyPjwvZGl2PmAsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSnNvbkVkaXRvckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXSxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuXG5leHBvcnQgY2xhc3MgSnNvbkVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ2pzb25FZGl0b3JDb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBqc29uRWRpdG9yQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuICBASW5wdXQoKSBvcHRpb25zOiBKc29uRWRpdG9yT3B0aW9ucyA9IG5ldyBKc29uRWRpdG9yT3B0aW9ucygpO1xuICBAT3V0cHV0KClcbiAgY2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAganNvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQElucHV0KCkgZGVidWcgPSBmYWxzZTtcbiAgcHVibGljIG9wdGlvbnNDaGFuZ2VkID0gZmFsc2U7XG5cbiAgZGlzYWJsZWQgPSBmYWxzZTtcbiAgaXNGb2N1c2VkID0gZmFsc2U7XG5cbiAgcHVibGljIGlkID0gJ2FuZ2pzb25lZGl0b3InICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMCk7XG4gIHByaXZhdGUgX2RhdGE6IE9iamVjdCA9IHt9O1xuICBwcml2YXRlIGVkaXRvcjogSlNPTkVkaXRvcjtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIEBJbnB1dCgnZGF0YScpXG4gIHNldCBkYXRhKHZhbHVlOiBPYmplY3QpIHtcbiAgICB0aGlzLl9kYXRhID0gdmFsdWU7XG4gICAgaWYgKHRoaXMuZWRpdG9yKSB7XG4gICAgICB0aGlzLmVkaXRvci5kZXN0cm95KCk7XG4gICAgICB0aGlzLm5nT25Jbml0KCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgbGV0IG9wdGlvbnNCZWZvcmUgPSB0aGlzLm9wdGlvbnM7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnNDaGFuZ2VkICYmIHRoaXMuZWRpdG9yKSB7XG4gICAgICAvL1RPRE86IGNoZWNrIGlmIHRoaXMgaXMgbmVlZGVkXG4gICAgICBvcHRpb25zQmVmb3JlID0gKHRoaXMuZWRpdG9yIGFzIGFueSkub3B0aW9ucztcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5vbkNoYW5nZUpTT04gJiYgdGhpcy5qc29uQ2hhbmdlKSB7XG4gICAgICB0aGlzLm9wdGlvbnMub25DaGFuZ2VKU09OID0gdGhpcy5vbkNoYW5nZUpTT047XG4gICAgfVxuICAgIGlmICghdGhpcy5vcHRpb25zLm9uQ2hhbmdlICYmIHRoaXMuY2hhbmdlKSB7XG4gICAgICB0aGlzLm9wdGlvbnMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25zQ29weSA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnNCZWZvcmUpO1xuXG4gICAgLy8gZXhwYW5kQWxsIGlzIGFuIG9wdGlvbiBvbmx5IHN1cHBvcnRlZCBieSBhbmctanNvbmVkaXRvciBhbmQgbm90IGJ5IHRoZSB0aGUgb3JpZ2luYWwganNvbmVkaXRvci5cbiAgICBkZWxldGUgb3B0aW9uc0NvcHkuZXhwYW5kQWxsO1xuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICBjb25zb2xlLmxvZyhvcHRpb25zQ29weSwgdGhpcy5fZGF0YSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5qc29uRWRpdG9yQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYENhbid0IGZpbmQgdGhlIEVsZW1lbnRSZWYgcmVmZXJlbmNlIGZvciBqc29uZWRpdG9yKWApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgICAgb3B0aW9uc0NvcHkubW9kZSA9PT0gJ3RleHQnIHx8IG9wdGlvbnNDb3B5Lm1vZGUgPT09ICdjb2RlJyB8fFxuICAgICAgICAoXG4gICAgICAgICAgb3B0aW9uc0NvcHkubW9kZXMgJiZcbiAgICAgICAgICAob3B0aW9uc0NvcHkubW9kZXMuaW5kZXhPZigndGV4dCcpICE9PSAtMSB8fCBvcHRpb25zQ29weS5tb2Rlcy5pbmRleE9mKCdjb2RlJykgIT09IC0xKVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgIG9wdGlvbnNDb3B5Lm9uQ2hhbmdlSlNPTiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5lZGl0b3IgPSBuZXcgSlNPTkVkaXRvcih0aGlzLmpzb25FZGl0b3JDb250YWluZXIubmF0aXZlRWxlbWVudCwgb3B0aW9uc0NvcHkgYXMgYW55LCB0aGlzLl9kYXRhKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZXhwYW5kQWxsKSB7XG4gICAgICB0aGlzLmVkaXRvci5leHBhbmRBbGwoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIG5nTW9kZWxcbiAgICogQ29udHJvbFZhbHVlQWNjZXNzb3JcbiAgICovXG5cbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW1wbGVtZW50YXRpb25cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5kYXRhID0gdmFsdWU7XG4gIH1cblxuICAvLyBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgIHRoaXMub25DaGFuZ2VNb2RlbCA9IGZuO1xuICB9XG5cbiAgLy8gSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICAvLyBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHB1YmxpYyBvbkNoYW5nZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5lZGl0b3IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLmVkaXRvci5nZXQoKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZU1vZGVsKGpzb24pO1xuICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KGpzb24pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25DaGFuZ2VKU09OID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLmVkaXRvcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5qc29uQ2hhbmdlLmVtaXQodGhpcy5lZGl0b3IuZ2V0KCkpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBKU09OIEVESVRPUiBGVU5DVElPTlNcbiAgICovXG5cbiAgcHVibGljIGNvbGxhcHNlQWxsKCkge1xuICAgIHRoaXMuZWRpdG9yLmNvbGxhcHNlQWxsKCk7XG4gIH1cblxuICBwdWJsaWMgZXhwYW5kQWxsKCkge1xuICAgIHRoaXMuZWRpdG9yLmV4cGFuZEFsbCgpO1xuICB9XG5cbiAgcHVibGljIGZvY3VzKCkge1xuICAgIHRoaXMuZWRpdG9yLmZvY3VzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0KCk6IEpTT04ge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5nZXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNb2RlKCk6IEpzb25FZGl0b3JNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IuZ2V0TW9kZSgpIGFzIEpzb25FZGl0b3JNb2RlO1xuICB9XG5cbiAgcHVibGljIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IuZ2V0TmFtZSgpITtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmdldFRleHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQoanNvbjogSlNPTikge1xuICAgIHRoaXMuZWRpdG9yLnNldChqc29uKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRNb2RlKG1vZGU6IEpzb25FZGl0b3JNb2RlKSB7XG4gICAgdGhpcy5lZGl0b3Iuc2V0TW9kZShtb2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXROYW1lKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuZWRpdG9yLnNldE5hbWUobmFtZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0U2VsZWN0aW9uKHN0YXJ0OiBhbnksIGVuZDogYW55KSB7XG4gICAgdGhpcy5lZGl0b3Iuc2V0U2VsZWN0aW9uKHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGlvbigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5nZXRTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRWYWxpZGF0ZVNjaGVtYSgpOiBhbnkge1xuICAgIC8vVE9ETzogY2hlY2sgaWYgdGhpcyBpcyBuZWVkZWRcbiAgICByZXR1cm4gKHRoaXMuZWRpdG9yIGFzIGFueSkudmFsaWRhdGVTY2hlbWE7XG4gIH1cblxuICBwdWJsaWMgc2V0U2NoZW1hKHNjaGVtYTogYW55LCBzY2hlbWFSZWZzOiBhbnkpIHtcbiAgICB0aGlzLmVkaXRvci5zZXRTY2hlbWEoc2NoZW1hLCBzY2hlbWFSZWZzKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWFyY2gocXVlcnk6IHN0cmluZykge1xuICAgIC8vVE9ETzogY2hlY2sgaWYgdGhpcyBpcyBuZWVkZWRcbiAgICAodGhpcy5lZGl0b3IgYXMgYW55KS5zZWFyY2gocXVlcnkpO1xuICB9XG5cbiAgcHVibGljIHNldE9wdGlvbnMobmV3T3B0aW9uczogSnNvbkVkaXRvck9wdGlvbnMpIHtcbiAgICBpZiAodGhpcy5lZGl0b3IpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zQ2hhbmdlZCA9IHRydWU7XG4gICAgdGhpcy5vcHRpb25zID0gbmV3T3B0aW9ucztcbiAgICB0aGlzLm5nT25Jbml0KCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlKGpzb246IEpTT04pIHtcbiAgICB0aGlzLmVkaXRvci51cGRhdGUoanNvbik7XG4gIH1cblxuICBwdWJsaWMgZGVzdHJveSgpIHtcbiAgICB0aGlzLmVkaXRvci5kZXN0cm95KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RWRpdG9yKCl7XG4gICAgLy9UT0RPOiBtYWRlIGl0IGFueSBiZWNhdXNlIG9mIHRoZSBtaXNzaW5nIHR5cGUgZGVmaW5pdGlvblxuICAgIHJldHVybiB0aGlzLmVkaXRvciBhcyBhbnk7XG4gIH1cblxuICBwdWJsaWMgaXNWYWxpZEpzb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgIEpTT04ucGFyc2UodGhpcy5nZXRUZXh0KCkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gIHByaXZhdGUgb25Ub3VjaGVkID0gKCkgPT4ge1xuICB9O1xuXG4gIC8vIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gIHByaXZhdGUgb25DaGFuZ2VNb2RlbCA9IChlOiBhbnkpID0+IHtcbiAgfTtcbn1cblxuZXhwb3J0IHsgSnNvbkVkaXRvck9wdGlvbnMsIEpzb25FZGl0b3JNb2RlLCBKc29uRWRpdG9yVHJlZU5vZGUsIElFcnJvciB9O1xuIl19