UNPKG

ais-uploader

Version:

Simple uploader library for Angular 2+

329 lines 24.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { ComponentFactoryResolver, Directive, ElementRef, HostListener, Input, Renderer2, ViewContainerRef, } from '@angular/core'; import { UploaderConfig } from '../models/uploader-config'; import { Subscription } from 'rxjs'; import { Output, EventEmitter } from '@angular/core'; import { AisUploaderComponent } from '../ais-uploader.component'; export class UploaderDirective { /** * @param {?} factory * @param {?} ref * @param {?} viewContainerRef * @param {?} renderer */ constructor(factory, ref, viewContainerRef, renderer) { this.factory = factory; this.ref = ref; this.viewContainerRef = viewContainerRef; this.renderer = renderer; this.onChange = new EventEmitter(); this.onProgress = new EventEmitter(); this.onError = new EventEmitter(); this._sub$ = new Subscription(); } /** * @return {?} */ get config() { return this._config; } /** * @param {?} config * @return {?} */ set config(config) { if (config === this._config) { return; } this._config = config; } /** * @return {?} */ ngOnInit() { if (!this.config.apiUrl || !this.config.supportedFormats) { this.onError.emit('Incorrect config!'); return; } this._setBtnContainer(); } /** * @return {?} */ ngOnDestroy() { this.viewContainerRef.clear(); if (this._clickFn) { this._clickFn(); } } // uploader instance /** * @return {?} */ get instance() { if (!this._btnContainer) { return; } return this._btnContainer.instance; } // selected file name /** * @return {?} */ get fileName() { if (!this.instance) { return; } return this.instance.fileName; } // info message /** * @return {?} */ get tooltipMessage() { if (!this.instance) { return; } return this.instance.tooltipMessage; } // get progress /** * @return {?} */ get progress() { if (!this.instance) { return; } return this.instance.uploadingProgress; } // delete file from uploader /** * @param {?} index * @return {?} */ delete(index) { if (!this.instance) { return; } this.instance.delete(index); } // remove file from uploader /** * @param {?=} emit * @return {?} */ clear(emit = true) { if (!this.instance) { return; } this.instance.clear(emit); } // cancel uploading /** * @return {?} */ preventUploading() { if (!this.instance) { return; } this.instance.preventUploading(); } // start uploading /** * @return {?} */ upload() { if (!this.instance) { return; } return this.instance.upload(); } // DROP /** * @param {?} event * @return {?} */ onDragOver(event) { /** @type {?} */ const transfer = this._getTransfer(event); if (!this._haveFiles(transfer.types)) { return; } transfer.dropEffect = 'copy'; this._preventAndStop(event); } /** * @param {?} event * @return {?} */ onDragLeave(event) { if (((/** @type {?} */ (this))).element) { if (event.currentTarget === ((/** @type {?} */ (this))).element[0]) { return; } } this._preventAndStop(event); } /** * @param {?} event * @return {?} */ onDrop(event) { if (!this.config.isDropAllowed) { return; } /** @type {?} */ const transfer = this._getTransfer(event); if (!transfer) { return; } this._preventAndStop(event); this.instance.loadFile({ target: { files: transfer.files } }); } /** * @protected * @param {?} event * @return {?} */ _getTransfer(event) { return event.dataTransfer ? event.dataTransfer : event.originalEvent.dataTransfer; // jQuery fix; } /** * @protected * @param {?} event * @return {?} */ _preventAndStop(event) { event.preventDefault(); event.stopPropagation(); } /** * @protected * @param {?} types * @return {?} */ _haveFiles(types) { if (!types) { return false; } if (types.indexOf) { return types.indexOf('Files') !== -1; } else if (types.contains) { return types.contains('Files'); } else { return false; } } // DROP END /** * @private * @return {?} */ _setBtnContainer() { /** @type {?} */ const componentFactory = this.factory.resolveComponentFactory(AisUploaderComponent); this._btnContainer = this.viewContainerRef.createComponent(componentFactory); this._btnContainer.instance.config = this.config; this._clickFn = this.renderer.listen(this.ref.nativeElement, 'click', (e) => this._handleClick(e)); this._sub$.add(this._btnContainer.instance.onChange.subscribe(data => this.onChange.emit(data))); this._sub$.add(this._btnContainer.instance.onError.subscribe(err => this.onError.emit(err))); this._sub$.add(this._btnContainer.instance.onProgress.subscribe(progress => this.onProgress.emit(progress))); } /** * @private * @param {?} event * @return {?} */ _handleClick(event) { /** @type {?} */ const attributes = Object.values(event.target.attributes).map(el => el['name']); if (!!attributes.find(attr => attr == 'clear') && this.fileName && !this.instance.uploadingProgress) { this.clear(); return; } if (!!attributes.find(attr => attr == 'stop') && this.fileName && this.instance.uploadingProgress) { this.preventUploading(); return; } this._btnContainer.instance.select(); } } UploaderDirective.decorators = [ { type: Directive, args: [{ selector: '[uploader]', exportAs: 'uploader', },] } ]; /** @nocollapse */ UploaderDirective.ctorParameters = () => [ { type: ComponentFactoryResolver }, { type: ElementRef }, { type: ViewContainerRef }, { type: Renderer2 } ]; UploaderDirective.propDecorators = { config: [{ type: Input, args: ['uploader',] }], onChange: [{ type: Output }], onProgress: [{ type: Output }], onError: [{ type: Output }], onDragOver: [{ type: HostListener, args: ['dragover', ['$event'],] }], onDragLeave: [{ type: HostListener, args: ['dragleave', ['$event'],] }], onDrop: [{ type: HostListener, args: ['drop', ['$event'],] }] }; if (false) { /** @type {?} */ UploaderDirective.prototype.onChange; /** @type {?} */ UploaderDirective.prototype.onProgress; /** @type {?} */ UploaderDirective.prototype.onError; /** * @type {?} * @private */ UploaderDirective.prototype._clickFn; /** * @type {?} * @private */ UploaderDirective.prototype._btnContainer; /** * @type {?} * @private */ UploaderDirective.prototype._config; /** * @type {?} * @private */ UploaderDirective.prototype._sub$; /** * @type {?} * @private */ UploaderDirective.prototype.factory; /** * @type {?} * @private */ UploaderDirective.prototype.ref; /** * @type {?} * @private */ UploaderDirective.prototype.viewContainerRef; /** * @type {?} * @private */ UploaderDirective.prototype.renderer; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYWlzLXVwbG9hZGVyLyIsInNvdXJjZXMiOlsibGliL2RpcmVjdGl2ZXMvdXBsb2FkZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0gsd0JBQXdCLEVBQUUsU0FBUyxFQUNuQyxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLGdCQUFnQixHQUNsRixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQU1qRSxNQUFNLE9BQU8saUJBQWlCOzs7Ozs7O0lBc0IxQixZQUNZLE9BQWlDLEVBQ2pDLEdBQWUsRUFDZixnQkFBa0MsRUFDbEMsUUFBbUI7UUFIbkIsWUFBTyxHQUFQLE9BQU8sQ0FBMEI7UUFDakMsUUFBRyxHQUFILEdBQUcsQ0FBWTtRQUNmLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQWJyQixhQUFRLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakQsZUFBVSxHQUF5QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3RELFlBQU8sR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUtyRCxVQUFLLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7SUFRakQsQ0FBQzs7OztJQTNCRCxJQUNJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQzs7Ozs7SUFFRCxJQUFJLE1BQU0sQ0FBQyxNQUFzQjtRQUM3QixJQUFJLE1BQU0s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VXBDLFlBQVksU0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUM7Ozs7SUF4SGhDLHFDQUEyRDs7SUFDM0QsdUNBQWdFOztJQUNoRSxvQ0FBNkQ7Ozs7O0lBRTdELHFDQUEyQjs7Ozs7SUFDM0IsMENBQTJCOzs7OztJQUMzQixvQ0FBZ0M7Ozs7O0lBQ2hDLGtDQUFpRDs7Ozs7SUFHN0Msb0NBQXlDOzs7OztJQUN6QyxnQ0FBdUI7Ozs7O0lBQ3ZCLDZDQUEwQzs7Ozs7SUFDMUMscUNBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgRGlyZWN0aXZlLFxyXG4gICAgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFJlbmRlcmVyMiwgVmlld0NvbnRhaW5lclJlZixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVXBsb2FkZXJDb25maWcgfSBmcm9tICcuLi9tb2RlbHMvdXBsb2FkZXItY29uZmlnJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFpc1VwbG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vYWlzLXVwbG9hZGVyLmNvbXBvbmVudCc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICAgIHNlbGVjdG9yOiAnW3VwbG9hZGVyXScsXHJcbiAgICBleHBvcnRBczogJ3VwbG9hZGVyJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFVwbG9hZGVyRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgQElucHV0KCd1cGxvYWRlcicpXHJcbiAgICBnZXQgY29uZmlnKCk6IFVwbG9hZGVyQ29uZmlnIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBjb25maWcoY29uZmlnOiBVcGxvYWRlckNvbmZpZykge1xyXG4gICAgICAgIGlmIChjb25maWcgPT09IHRoaXMuX2NvbmZpZykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KCkgb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIG9uUHJvZ3Jlc3M6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIG9uRXJyb3I6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAgIHByaXZhdGUgX2NsaWNrRm46IEZ1bmN0aW9uO1xyXG4gICAgcHJpdmF0ZSBfYnRuQ29udGFpbmVyOiBhbnk7XHJcbiAgICBwcml2YXRlIF9jb25maWc6IFVwbG9hZGVyQ29uZmlnO1xyXG4gICAgcHJpdmF0ZSBfc3ViJDogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgICAgIHByaXZhdGUgcmVmOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICApIHtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICF0aGlzLmNvbmZpZy5hcGlVcmwgfHxcclxuICAgICAgICAgICAgIXRoaXMuY29uZmlnLnN1cHBvcnRlZEZvcm1hdHNcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5vbkVycm9yLmVtaXQoJ0luY29ycmVjdCBjb25maWchJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fc2V0QnRuQ29udGFpbmVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NsaWNrRm4pIHtcclxuICAgICAgICAgICAgdGhpcy5fY2xpY2tGbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB1cGxvYWRlciBpbnN0YW5jZVxyXG4gICAgZ2V0IGluc3RhbmNlKCk6IEFpc1VwbG9hZGVyQ29tcG9uZW50IHtcclxuICAgICAgICBpZiAoIXRoaXMuX2J0bkNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9idG5Db250YWluZXIuaW5zdGFuY2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2VsZWN0ZWQgZmlsZSBuYW1lXHJcbiAgICBnZXQgZmlsZU5hbWUoKTogc3RyaW5nIHwgc3RyaW5nW10ge1xyXG4gICAgICAgIGlmICghdGhpcy5pbnN0YW5jZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlLmZpbGVOYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGluZm8gbWVzc2FnZVxyXG4gICAgZ2V0IHRvb2x0aXBNZXNzYWdlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2UudG9vbHRpcE1lc3NhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZ2V0IHByb2dyZXNzXHJcbiAgICBnZXQgcHJvZ3Jlc3MoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZS51cGxvYWRpbmdQcm9ncmVzcztcclxuICAgIH1cclxuXHJcbiAgICAvLyBkZWxldGUgZmlsZSBmcm9tIHVwbG9hZGVyXHJcbiAgICBkZWxldGUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5pbnN0YW5jZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaW5zdGFuY2UuZGVsZXRlKGluZGV4KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyByZW1vdmUgZmlsZSBmcm9tIHVwbG9hZGVyXHJcbiAgICBjbGVhcihlbWl0OiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5pbnN0YW5jZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaW5zdGFuY2UuY2xlYXIoZW1pdCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2FuY2VsIHVwbG9hZGluZ1xyXG4gICAgcHJldmVudFVwbG9hZGluZygpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmluc3RhbmNlLnByZXZlbnRVcGxvYWRpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBzdGFydCB1cGxvYWRpbmdcclxuICAgIHVwbG9hZCgpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5pbnN0YW5jZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlLnVwbG9hZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIERST1BcclxuICAgIEBIb3N0TGlzdGVuZXIoJ2RyYWdvdmVyJywgWyckZXZlbnQnXSlcclxuICAgIG9uRHJhZ092ZXIoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHRyYW5zZmVyID0gdGhpcy5fZ2V0VHJhbnNmZXIoZXZlbnQpO1xyXG4gICAgICAgIGlmICghdGhpcy5faGF2ZUZpbGVzKHRyYW5zZmVyLnR5cGVzKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnY29weSc7XHJcbiAgICAgICAgdGhpcy5fcHJldmVudEFuZFN0b3AoZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIFsnJGV2ZW50J10pXHJcbiAgICBvbkRyYWdMZWF2ZShldmVudDogYW55KTogYW55IHtcclxuICAgICAgICBpZiAoKHRoaXMgYXMgYW55KS5lbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC5jdXJyZW50VGFyZ2V0ID09PSAodGhpcyBhcyBhbnkpLmVsZW1lbnRbMF0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9wcmV2ZW50QW5kU3RvcChldmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignZHJvcCcsIFsnJGV2ZW50J10pXHJcbiAgICBvbkRyb3AoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5jb25maWcuaXNEcm9wQWxsb3dlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRyYW5zZmVyID0gdGhpcy5fZ2V0VHJhbnNmZXIoZXZlbnQpO1xyXG4gICAgICAgIGlmICghdHJhbnNmZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9wcmV2ZW50QW5kU3RvcChldmVudCk7XHJcbiAgICAgICAgdGhpcy5pbnN0YW5jZS5sb2FkRmlsZSh7dGFyZ2V0OiB7ZmlsZXM6IHRyYW5zZmVyLmZpbGVzfX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfZ2V0VHJhbnNmZXIoZXZlbnQ6IGFueSk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIGV2ZW50LmRhdGFUcmFuc2ZlciA/IGV2ZW50LmRhdGFUcmFuc2ZlciA6IGV2ZW50Lm9yaWdpbmFsRXZlbnQuZGF0YVRyYW5zZmVyOyAvLyBqUXVlcnkgZml4O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfcHJldmVudEFuZFN0b3AoZXZlbnQ6IGFueSk6IGFueSB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2hhdmVGaWxlcyh0eXBlczogYW55KTogYW55IHtcclxuICAgICAgICBpZiAoIXR5cGVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVzLmluZGV4T2YpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHR5cGVzLmluZGV4T2YoJ0ZpbGVzJykgIT09IC0xO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZXMuY29udGFpbnMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHR5cGVzLmNvbnRhaW5zKCdGaWxlcycpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRFJPUCBFTkRcclxuXHJcbiAgICBwcml2YXRlIF9zZXRCdG5Db250YWluZXIoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9IHRoaXMuZmFjdG9yeS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShBaXNVcGxvYWRlckNvbXBvbmVudCk7XHJcbiAgICAgICAgdGhpcy5fYnRuQ29udGFpbmVyID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRGYWN0b3J5KTtcclxuICAgICAgICB0aGlzLl9idG5Db250YWluZXIuaW5zdGFuY2UuY29uZmlnID0gdGhpcy5jb25maWc7XHJcbiAgICAgICAgdGhpcy5fY2xpY2tGbiA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsICdjbGljaycsIChlKSA9PiB0aGlzLl9oYW5kbGVDbGljayhlKSk7XHJcbiAgICAgICAgdGhpcy5fc3ViJC5hZGQodGhpcy5fYnRuQ29udGFpbmVyLmluc3RhbmNlLm9uQ2hhbmdlLnN1YnNjcmliZShkYXRhID0+IHRoaXMub25DaGFuZ2UuZW1pdChkYXRhKSkpO1xyXG4gICAgICAgIHRoaXMuX3N1YiQuYWRkKHRoaXMuX2J0bkNvbnRhaW5lci5pbnN0YW5jZS5vbkVycm9yLnN1YnNjcmliZShlcnIgPT4gdGhpcy5vbkVycm9yLmVtaXQoZXJyKSkpO1xyXG4gICAgICAgIHRoaXMuX3N1YiQuYWRkKHRoaXMuX2J0bkNvbnRhaW5lci5pbnN0YW5jZS5vblByb2dyZXNzLnN1YnNjcmliZShwcm9ncmVzcyA9PiB0aGlzLm9uUHJvZ3Jlc3MuZW1pdChwcm9ncmVzcykpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9oYW5kbGVDbGljayhldmVudCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBPYmplY3QudmFsdWVzKGV2ZW50LnRhcmdldC5hdHRyaWJ1dGVzKS5tYXAoZWwgPT4gZWxbJ25hbWUnXSk7XHJcbiAgICAgICAgaWYgKCEhYXR0cmlidXRlcy5maW5kKGF0dHIgPT4gYXR0ciA9PSAnY2xlYXInKSAmJlxyXG4gICAgICAgICAgICB0aGlzLmZpbGVOYW1lICYmICF0aGlzLmluc3RhbmNlLnVwbG9hZGluZ1Byb2dyZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoISFhdHRyaWJ1dGVzLmZpbmQoYXR0ciA9PiBhdHRyID09ICdzdG9wJykgJiZcclxuICAgICAgICAgICAgdGhpcy5maWxlTmFtZSAmJiB0aGlzLmluc3RhbmNlLnVwbG9hZGluZ1Byb2dyZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmVudFVwbG9hZGluZygpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2J0bkNvbnRhaW5lci5pbnN0YW5jZS5zZWxlY3QoKTtcclxuICAgIH1cclxuXHJcbn1cclxuIl19