UNPKG

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
/** * @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