ngx-uploader-directive
Version:
Angular File Uploader Directive which provides two directives, which are select and file drag and drop to upload files on server.
198 lines • 20.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/directives/ngx-uploader-drop.directive.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @license
* The MIT License (MIT)
* Copyright (c) 2015-2018 Jan Kuri jan@bleenco.com
* 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.
*/
// tslint:disable: max-line-length
// tslint:disable: no-console
import { Directive, Input, EventEmitter, Output, ElementRef, HostListener } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { NgxUploaderDirectiveService } from '../services/ngx-uploader-directive.service';
import { environment } from '../configs/config';
export class NgxUploaderDropDirective {
/**
* @param {?} elementRef
* @param {?} httpClient
*/
constructor(elementRef, httpClient) {
this.elementRef = elementRef;
this.httpClient = httpClient;
this.devEnv = !environment.production;
this.stopEvent = (/**
* @param {?} event
* @return {?}
*/
(event) => {
event.stopPropagation();
event.preventDefault();
});
this.uploadOutput = new EventEmitter();
}
// tslint:disable-next-line: use-life-cycle-interface
/**
* @return {?}
*/
ngOnInit() {
this.subscriptions = new Array();
/** @type {?} */
const concurrency = this.options.requestConcurrency;
/** @type {?} */
const allowedFileTypes = this.options.allowedFileTypes;
/** @type {?} */
const maxFileUploads = this.options.maxFileUploads;
/** @type {?} */
const maxFileSize = this.options.maxFileSize;
this.uploadService = new NgxUploaderDirectiveService(concurrency, this.options.maxFilesToAddInSingleRequest, allowedFileTypes, maxFileUploads, maxFileSize, this.httpClient, this.options.logs);
// file upload element
this.element = this.elementRef.nativeElement;
this.element.addEventListener('drop', this.stopEvent, false);
this.element.addEventListener('dragenter', this.stopEvent, false);
this.element.addEventListener('dragover', this.stopEvent, false);
// Adding events to subscriptions
this.subscriptions.push(this.uploadService.fileServiceEvents.subscribe((/**
* @param {?} event
* @return {?}
*/
(event) => {
if (event.fileSelectedEventType === 'DROP' || event.fileSelectedEventType === 'ALL') {
if (this.options.logs && this.devEnv) {
console.info('Output drop event', event);
}
if (event.type === 'error' || event.type === 'removedAll') {
this.element.files = null;
this.element.value = '';
}
else if (event.type === 'removed' || event.type === 'rejected') {
if (this.uploadService.queue.length === 0) {
this.element.files = null;
this.element.value = '';
}
}
this.uploadOutput.emit(event);
}
})));
if (this.uploadInput instanceof EventEmitter) {
if (this.options.logs && this.devEnv) {
console.info('Input drop Init');
}
this.subscriptions.push(this.uploadService.handleInputEvents(this.uploadInput));
}
}
// tslint:disable-next-line: use-life-cycle-interface
/**
* @return {?}
*/
ngOnDestroy() {
this.subscriptions.forEach((/**
* @param {?} sub
* @return {?}
*/
sub => sub.unsubscribe()));
}
/**
* @param {?} event
* @return {?}
*/
onDrop(event) {
event.stopPropagation();
event.preventDefault();
/** @type {?} */
const outputEvent = { type: 'drop', fileSelectedEventType: 'DROP' };
this.uploadOutput.emit(outputEvent);
this.uploadService.handleSelectedFiles(event.dataTransfer.files, 'DROP');
}
/**
* @param {?} event
* @return {?}
*/
onDragOver(event) {
if (!event) {
return;
}
/** @type {?} */
const outputEvent = { type: 'dragOver', fileSelectedEventType: 'DROP' };
this.uploadOutput.emit(outputEvent);
}
/**
* @param {?} event
* @return {?}
*/
onDragLeave(event) {
if (!event) {
return;
}
/** @type {?} */
const outputEvent = { type: 'dragOut', fileSelectedEventType: 'DROP' };
this.uploadOutput.emit(outputEvent);
}
}
NgxUploaderDropDirective.decorators = [
{ type: Directive, args: [{
// tslint:disable-next-line: directive-selector
selector: '[ngxFileDrop]'
},] }
];
/** @nocollapse */
NgxUploaderDropDirective.ctorParameters = () => [
{ type: ElementRef },
{ type: HttpClient }
];
NgxUploaderDropDirective.propDecorators = {
options: [{ type: Input }],
uploadInput: [{ type: Input }],
uploadOutput: [{ type: Output }],
onDrop: [{ type: HostListener, args: ['drop', ['$event'],] }],
onDragOver: [{ type: HostListener, args: ['dragover', ['$event'],] }],
onDragLeave: [{ type: HostListener, args: ['dragleave', ['$event'],] }]
};
if (false) {
/**
* @type {?}
* @private
*/
NgxUploaderDropDirective.prototype.devEnv;
/** @type {?} */
NgxUploaderDropDirective.prototype.options;
/** @type {?} */
NgxUploaderDropDirective.prototype.uploadInput;
/** @type {?} */
NgxUploaderDropDirective.prototype.uploadOutput;
/** @type {?} */
NgxUploaderDropDirective.prototype.uploadService;
/** @type {?} */
NgxUploaderDropDirective.prototype.element;
/** @type {?} */
NgxUploaderDropDirective.prototype.subscriptions;
/** @type {?} */
NgxUploaderDropDirective.prototype.stopEvent;
/** @type {?} */
NgxUploaderDropDirective.prototype.elementRef;
/**
* @type {?}
* @private
*/
NgxUploaderDropDirective.prototype.httpClient;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXVwbG9hZGVyLWRyb3AuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uL3Byb2plY3RzL25neC11cGxvYWRlci1kaXJlY3RpdmUvc3JjLyIsInNvdXJjZXMiOlsibGliL2RpcmVjdGl2ZXMvbmd4LXVwbG9hZGVyLWRyb3AuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBeUJBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdqRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDekYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBT2hELE1BQU0sT0FBTyx3QkFBd0I7Ozs7O0lBYW5DLFlBQ1MsVUFBc0IsRUFDckIsVUFBc0I7UUFEdkIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNyQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBYnhCLFdBQU0sR0FBRyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7UUFvRXpDLGNBQVM7Ozs7UUFBRyxDQUFDLEtBQVksRUFBRSxFQUFFO1lBQzNCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDekIsQ0FBQyxFQUFBO1FBeERDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7SUFDeEQsQ0FBQzs7Ozs7SUFHRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEtBQUssRUFBZ0IsQ0FBQzs7Y0FDekMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCOztjQUM3QyxnQkFBZ0IsR0FBRyxJQUFJ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QTdGckMsMENBQXlDOztJQUV6QywyQ0FBaUM7O0lBQ2pDLCtDQUFpRDs7SUFDakQsZ0RBQW9EOztJQUVwRCxpREFBMkM7O0lBQzNDLDJDQUEwQjs7SUFFMUIsaURBQW1DOztJQTJEbkMsNkNBR0M7O0lBM0RDLDhDQUE2Qjs7Ozs7SUFDN0IsOENBQThCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBsaWNlbnNlXHJcbiAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxOCBKYW4gS3VyaSBqYW5AYmxlZW5jby5jb21cclxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxyXG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXHJcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcclxuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxyXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcclxuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcclxuICpcclxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXHJcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXHJcbiAqXHJcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcclxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXHJcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxyXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXHJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXHJcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXHJcbiAqIFNPRlRXQVJFLlxyXG4gKi9cclxuXHJcbi8vIHRzbGludDpkaXNhYmxlOiBtYXgtbGluZS1sZW5ndGhcclxuLy8gdHNsaW50OmRpc2FibGU6IG5vLWNvbnNvbGVcclxuaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJVXBsb2FkT3B0aW9ucywgSVVwbG9hZElucHV0LCBJVXBsb2FkT3V0cHV0IH0gZnJvbSAnLi4vbW9kZWxzL25neC11cGxvYWRlci1kaXJlY3RpdmUtbW9kZWxzJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE5neFVwbG9hZGVyRGlyZWN0aXZlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL25neC11cGxvYWRlci1kaXJlY3RpdmUuc2VydmljZSc7XHJcbmltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi4vY29uZmlncy9jb25maWcnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBkaXJlY3RpdmUtc2VsZWN0b3JcclxuICBzZWxlY3RvcjogJ1tuZ3hGaWxlRHJvcF0nXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgTmd4VXBsb2FkZXJEcm9wRGlyZWN0aXZlIHtcclxuXHJcbiAgcHJpdmF0ZSBkZXZFbnYgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcclxuXHJcbiAgQElucHV0KCkgb3B0aW9uczogSVVwbG9hZE9wdGlvbnM7XHJcbiAgQElucHV0KCkgdXBsb2FkSW5wdXQ6IEV2ZW50RW1pdHRlcjxJVXBsb2FkSW5wdXQ+O1xyXG4gIEBPdXRwdXQoKSB1cGxvYWRPdXRwdXQ6IEV2ZW50RW1pdHRlcjxJVXBsb2FkT3V0cHV0PjtcclxuXHJcbiAgdXBsb2FkU2VydmljZTogTmd4VXBsb2FkZXJEaXJlY3RpdmVTZXJ2aWNlO1xyXG4gIGVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcblxyXG4gIHN1YnNjcmlwdGlvbnM6IEFycmF5PFN1YnNjcmlwdGlvbj47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXHJcbiAgKSB7XHJcbiAgICB0aGlzLnVwbG9hZE91dHB1dCA9IG5ldyBFdmVudEVtaXR0ZXI8SVVwbG9hZE91dHB1dD4oKTtcclxuICB9XHJcblxyXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogdXNlLWxpZmUtY3ljbGUtaW50ZXJmYWNlXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBuZXcgQXJyYXk8U3Vic2NyaXB0aW9uPigpO1xyXG4gICAgY29uc3QgY29uY3VycmVuY3kgPSB0aGlzLm9wdGlvbnMucmVxdWVzdENvbmN1cnJlbmN5O1xyXG4gICAgY29uc3QgYWxsb3dlZEZpbGVUeXBlcyA9IHRoaXMub3B0aW9ucy5hbGxvd2VkRmlsZVR5cGVzO1xyXG4gICAgY29uc3QgbWF4RmlsZVVwbG9hZHMgPSB0aGlzLm9wdGlvbnMubWF4RmlsZVVwbG9hZHM7XHJcbiAgICBjb25zdCBtYXhGaWxlU2l6ZSA9IHRoaXMub3B0aW9ucy5tYXhGaWxlU2l6ZTtcclxuICAgIHRoaXMudXBsb2FkU2VydmljZSA9IG5ldyBOZ3hVcGxvYWRlckRpcmVjdGl2ZVNlcnZpY2UoY29uY3VycmVuY3ksIHRoaXMub3B0aW9ucy5tYXhGaWxlc1RvQWRkSW5TaW5nbGVSZXF1ZXN0LCBhbGxvd2VkRmlsZVR5cGVzLCBtYXhGaWxlVXBsb2FkcywgbWF4RmlsZVNpemUsIHRoaXMuaHR0cENsaWVudCwgdGhpcy5vcHRpb25zLmxvZ3MpO1xyXG5cclxuICAgIC8vIGZpbGUgdXBsb2FkIGVsZW1lbnRcclxuICAgIHRoaXMuZWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgdGhpcy5zdG9wRXZlbnQsIGZhbHNlKTtcclxuICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzLnN0b3BFdmVudCwgZmFsc2UpO1xyXG4gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdGhpcy5zdG9wRXZlbnQsIGZhbHNlKTtcclxuXHJcbiAgICAvLyBBZGRpbmcgZXZlbnRzIHRvIHN1YnNjcmlwdGlvbnNcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLnVwbG9hZFNlcnZpY2UuZmlsZVNlcnZpY2VFdmVudHMuc3Vic2NyaWJlKChldmVudDogSVVwbG9hZE91dHB1dCkgPT4ge1xyXG4gICAgICAgIGlmIChldmVudC5maWxlU2VsZWN0ZWRFdmVudFR5cGUgPT09ICdEUk9QJyB8fCBldmVudC5maWxlU2VsZWN0ZWRFdmVudFR5cGUgPT09ICdBTEwnKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxvZ3MgJiYgdGhpcy5kZXZFbnYpIHtcclxuICAgICAgICAgICAgY29uc29sZS5pbmZvKCdPdXRwdXQgZHJvcCBldmVudCcsIGV2ZW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChldmVudC50eXBlID09PSAnZXJyb3InIHx8IGV2ZW50LnR5cGUgPT09ICdyZW1vdmVkQWxsJykge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuZmlsZXMgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gJ3JlbW92ZWQnIHx8IGV2ZW50LnR5cGUgPT09ICdyZWplY3RlZCcpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudXBsb2FkU2VydmljZS5xdWV1ZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuZmlsZXMgPSBudWxsO1xyXG4gICAgICAgICAgICAgIHRoaXMuZWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnVwbG9hZE91dHB1dC5lbWl0KGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIGlmICh0aGlzLnVwbG9hZElucHV0IGluc3RhbmNlb2YgRXZlbnRFbWl0dGVyKSB7XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubG9ncyAmJiB0aGlzLmRldkVudikge1xyXG4gICAgICAgIGNvbnNvbGUuaW5mbygnSW5wdXQgZHJvcCBJbml0Jyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy51cGxvYWRTZXJ2aWNlLmhhbmRsZUlucHV0RXZlbnRzKHRoaXMudXBsb2FkSW5wdXQpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogdXNlLWxpZmUtY3ljbGUtaW50ZXJmYWNlXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWIgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xyXG4gIH1cclxuXHJcbiAgc3RvcEV2ZW50ID0gKGV2ZW50OiBFdmVudCkgPT4ge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZHJvcCcsIFsnJGV2ZW50J10pXHJcbiAgcHVibGljIG9uRHJvcChldmVudDogYW55KSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgY29uc3Qgb3V0cHV0RXZlbnQ6IElVcGxvYWRPdXRwdXQgPSB7IHR5cGU6ICdkcm9wJywgZmlsZVNlbGVjdGVkRXZlbnRUeXBlOiAnRFJPUCcgfTtcclxuICAgIHRoaXMudXBsb2FkT3V0cHV0LmVtaXQob3V0cHV0RXZlbnQpO1xyXG4gICAgdGhpcy51cGxvYWRTZXJ2aWNlLmhhbmRsZVNlbGVjdGVkRmlsZXMoZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzLCAnRFJPUCcpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZHJhZ292ZXInLCBbJyRldmVudCddKVxyXG4gIHB1YmxpYyBvbkRyYWdPdmVyKGV2ZW50OiBFdmVudCkge1xyXG4gICAgaWYgKCFldmVudCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgb3V0cHV0RXZlbnQ6IElVcGxvYWRPdXRwdXQgPSB7IHR5cGU6ICdkcmFnT3ZlcicsIGZpbGVTZWxlY3RlZEV2ZW50VHlwZTogJ0RST1AnIH07XHJcbiAgICB0aGlzLnVwbG9hZE91dHB1dC5lbWl0KG91dHB1dEV2ZW50KTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIFsnJGV2ZW50J10pXHJcbiAgcHVibGljIG9uRHJhZ0xlYXZlKGV2ZW50OiBFdmVudCkge1xyXG4gICAgaWYgKCFldmVudCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgb3V0cHV0RXZlbnQ6IElVcGxvYWRPdXRwdXQgPSB7IHR5cGU6ICdkcmFnT3V0JywgZmlsZVNlbGVjdGVkRXZlbnRUeXBlOiAnRFJPUCcgfTtcclxuICAgIHRoaXMudXBsb2FkT3V0cHV0LmVtaXQob3V0cHV0RXZlbnQpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19