UNPKG

ais-uploader

Version:

Simple uploader library for Angular 2+

429 lines 28.5 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'; var UploaderDirective = /** @class */ (function () { function UploaderDirective(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(); } Object.defineProperty(UploaderDirective.prototype, "config", { get: /** * @return {?} */ function () { return this._config; }, set: /** * @param {?} config * @return {?} */ function (config) { if (config === this._config) { return; } this._config = config; }, enumerable: true, configurable: true }); /** * @return {?} */ UploaderDirective.prototype.ngOnInit = /** * @return {?} */ function () { if (!this.config.apiUrl || !this.config.supportedFormats) { this.onError.emit('Incorrect config!'); return; } this._setBtnContainer(); }; /** * @return {?} */ UploaderDirective.prototype.ngOnDestroy = /** * @return {?} */ function () { this.viewContainerRef.clear(); if (this._clickFn) { this._clickFn(); } }; Object.defineProperty(UploaderDirective.prototype, "instance", { // uploader instance get: // uploader instance /** * @return {?} */ function () { if (!this._btnContainer) { return; } return this._btnContainer.instance; }, enumerable: true, configurable: true }); Object.defineProperty(UploaderDirective.prototype, "fileName", { // selected file name get: // selected file name /** * @return {?} */ function () { if (!this.instance) { return; } return this.instance.fileName; }, enumerable: true, configurable: true }); Object.defineProperty(UploaderDirective.prototype, "tooltipMessage", { // info message get: // info message /** * @return {?} */ function () { if (!this.instance) { return; } return this.instance.tooltipMessage; }, enumerable: true, configurable: true }); Object.defineProperty(UploaderDirective.prototype, "progress", { // get progress get: // get progress /** * @return {?} */ function () { if (!this.instance) { return; } return this.instance.uploadingProgress; }, enumerable: true, configurable: true }); // delete file from uploader // delete file from uploader /** * @param {?} index * @return {?} */ UploaderDirective.prototype.delete = // delete file from uploader /** * @param {?} index * @return {?} */ function (index) { if (!this.instance) { return; } this.instance.delete(index); }; // remove file from uploader // remove file from uploader /** * @param {?=} emit * @return {?} */ UploaderDirective.prototype.clear = // remove file from uploader /** * @param {?=} emit * @return {?} */ function (emit) { if (emit === void 0) { emit = true; } if (!this.instance) { return; } this.instance.clear(emit); }; // cancel uploading // cancel uploading /** * @return {?} */ UploaderDirective.prototype.preventUploading = // cancel uploading /** * @return {?} */ function () { if (!this.instance) { return; } this.instance.preventUploading(); }; // start uploading // start uploading /** * @return {?} */ UploaderDirective.prototype.upload = // start uploading /** * @return {?} */ function () { if (!this.instance) { return; } return this.instance.upload(); }; // DROP // DROP /** * @param {?} event * @return {?} */ UploaderDirective.prototype.onDragOver = // DROP /** * @param {?} event * @return {?} */ function (event) { /** @type {?} */ var transfer = this._getTransfer(event); if (!this._haveFiles(transfer.types)) { return; } transfer.dropEffect = 'copy'; this._preventAndStop(event); }; /** * @param {?} event * @return {?} */ UploaderDirective.prototype.onDragLeave = /** * @param {?} event * @return {?} */ function (event) { if (((/** @type {?} */ (this))).element) { if (event.currentTarget === ((/** @type {?} */ (this))).element[0]) { return; } } this._preventAndStop(event); }; /** * @param {?} event * @return {?} */ UploaderDirective.prototype.onDrop = /** * @param {?} event * @return {?} */ function (event) { if (!this.config.isDropAllowed) { return; } /** @type {?} */ var transfer = this._getTransfer(event); if (!transfer) { return; } this._preventAndStop(event); this.instance.loadFile({ target: { files: transfer.files } }); }; /** * @protected * @param {?} event * @return {?} */ UploaderDirective.prototype._getTransfer = /** * @protected * @param {?} event * @return {?} */ function (event) { return event.dataTransfer ? event.dataTransfer : event.originalEvent.dataTransfer; // jQuery fix; }; /** * @protected * @param {?} event * @return {?} */ UploaderDirective.prototype._preventAndStop = /** * @protected * @param {?} event * @return {?} */ function (event) { event.preventDefault(); event.stopPropagation(); }; /** * @protected * @param {?} types * @return {?} */ UploaderDirective.prototype._haveFiles = /** * @protected * @param {?} types * @return {?} */ function (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 // DROP END /** * @private * @return {?} */ UploaderDirective.prototype._setBtnContainer = // DROP END /** * @private * @return {?} */ function () { var _this = this; /** @type {?} */ var 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', function (e) { return _this._handleClick(e); }); this._sub$.add(this._btnContainer.instance.onChange.subscribe(function (data) { return _this.onChange.emit(data); })); this._sub$.add(this._btnContainer.instance.onError.subscribe(function (err) { return _this.onError.emit(err); })); this._sub$.add(this._btnContainer.instance.onProgress.subscribe(function (progress) { return _this.onProgress.emit(progress); })); }; /** * @private * @param {?} event * @return {?} */ UploaderDirective.prototype._handleClick = /** * @private * @param {?} event * @return {?} */ function (event) { /** @type {?} */ var attributes = Object.values(event.target.attributes).map(function (el) { return el['name']; }); if (!!attributes.find(function (attr) { return attr == 'clear'; }) && this.fileName && !this.instance.uploadingProgress) { this.clear(); return; } if (!!attributes.find(function (attr) { return 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 = function () { return [ { 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'],] }] }; return UploaderDirective; }()); export { UploaderDirective }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYWlzLXVwbG9hZGVyLyIsInNvdXJjZXMiOlsibGliL2RpcmVjdGl2ZXMvdXBsb2FkZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0gsd0JBQXdCLEVBQUUsU0FBUyxFQUNuQyxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLGdCQUFnQixHQUNsRixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVqRTtJQTBCSSwyQkFDWSxPQUFpQyxFQUNqQyxHQUFlLEVBQ2YsZ0JBQWtDLEVBQ2xDLFFBQW1CO1FBSG5CLFlBQU8sR0FBUCxPQUFPLENBQTBCO1FBQ2pDLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFDZixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGFBQVEsR0FBUixRQUFRLENBQVc7UUFickIsYUFBUSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pELGVBQVUsR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN0RCxZQUFPLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFLckQsVUFBSyxHQUFpQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBUWpELENBQUM7SUEzQkQsc0JBQ0kscUNBQU07Ozs7UUFEVjtZQUVJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUN4QixDQUFDOzs7OztRQUVELFVBQVcsTUFBc0I7WUFDN0IsSUFBSSxNQUFNLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRTtn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QUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRTtZQUNsRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN6QyxDQUFDOztnQkFyTUosU0FBUyxTQUFDO29CQUNQLFFBQVEsRUFBRSxZQUFZO29CQUN0QixRQUFRLEVBQUUsVUFBVTtpQkFDdkI7Ozs7Z0JBWEcsd0JBQXdCO2dCQUN4QixVQUFVO2dCQUFxRCxnQkFBZ0I7Z0JBQTNCLFNBQVM7Ozt5QkFZNUQsS0FBSyxTQUFDLFVBQVU7MkJBWWhCLE1BQU07NkJBQ04sTUFBTTswQkFDTixNQUFNOzZCQWtHTixZQUFZLFNBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDOzhCQVVuQyxZQUFZLFNBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDO3lCQVVwQyxZQUFZLFNBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDOztJQThEcEMsd0JBQUM7Q0FBQSxBQXZNRCxJQXVNQztTQW5NWSxpQkFBaUI7OztJQWExQixxQ0FBMkQ7O0lBQzNELHVDQUFnRTs7SUFDaEUsb0NBQTZEOzs7OztJQUU3RCxxQ0FBMkI7Ozs7O0lBQzNCLDBDQUEyQjs7Ozs7SUFDM0Isb0NBQWdDOzs7OztJQUNoQyxrQ0FBaUQ7Ozs7O0lBRzdDLG9DQUF5Qzs7Ozs7SUFDekMsZ0NBQXVCOzs7OztJQUN2Qiw2Q0FBMEM7Ozs7O0lBQzFDLHFDQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIERpcmVjdGl2ZSxcclxuICAgIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBSZW5kZXJlcjIsIFZpZXdDb250YWluZXJSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVwbG9hZGVyQ29uZmlnIH0gZnJvbSAnLi4vbW9kZWxzL3VwbG9hZGVyLWNvbmZpZyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBaXNVcGxvYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2Fpcy11cGxvYWRlci5jb21wb25lbnQnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1t1cGxvYWRlcl0nLFxyXG4gICAgZXhwb3J0QXM6ICd1cGxvYWRlcicsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVcGxvYWRlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIEBJbnB1dCgndXBsb2FkZXInKVxyXG4gICAgZ2V0IGNvbmZpZygpOiBVcGxvYWRlckNvbmZpZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcclxuICAgIH1cclxuXHJcbiAgICBzZXQgY29uZmlnKGNvbmZpZzogVXBsb2FkZXJDb25maWcpIHtcclxuICAgICAgICBpZiAoY29uZmlnID09PSB0aGlzLl9jb25maWcpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBvblByb2dyZXNzOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBvbkVycm9yOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgICBwcml2YXRlIF9jbGlja0ZuOiBGdW5jdGlvbjtcclxuICAgIHByaXZhdGUgX2J0bkNvbnRhaW5lcjogYW55O1xyXG4gICAgcHJpdmF0ZSBfY29uZmlnOiBVcGxvYWRlckNvbmZpZztcclxuICAgIHByaXZhdGUgX3N1YiQ6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGZhY3Rvcnk6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgICAgICBwcml2YXRlIHJlZjogRWxlbWVudFJlZixcclxuICAgICAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhdGhpcy5jb25maWcuYXBpVXJsIHx8XHJcbiAgICAgICAgICAgICF0aGlzLmNvbmZpZy5zdXBwb3J0ZWRGb3JtYXRzXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KCdJbmNvcnJlY3QgY29uZmlnIScpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3NldEJ0bkNvbnRhaW5lcigpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xyXG4gICAgICAgIGlmICh0aGlzLl9jbGlja0ZuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NsaWNrRm4oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdXBsb2FkZXIgaW5zdGFuY2VcclxuICAgIGdldCBpbnN0YW5jZSgpOiBBaXNVcGxvYWRlckNvbXBvbmVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9idG5Db250YWluZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5fYnRuQ29udGFpbmVyLmluc3RhbmNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHNlbGVjdGVkIGZpbGUgbmFtZVxyXG4gICAgZ2V0IGZpbGVOYW1lKCk6IHN0cmluZyB8IHN0cmluZ1tdIHtcclxuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZS5maWxlTmFtZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpbmZvIG1lc3NhZ2VcclxuICAgIGdldCB0b29sdGlwTWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghdGhpcy5pbnN0YW5jZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlLnRvb2x0aXBNZXNzYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGdldCBwcm9ncmVzc1xyXG4gICAgZ2V0IHByb2dyZXNzKCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2UudXBsb2FkaW5nUHJvZ3Jlc3M7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZGVsZXRlIGZpbGUgZnJvbSB1cGxvYWRlclxyXG4gICAgZGVsZXRlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmluc3RhbmNlLmRlbGV0ZShpbmRleCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcmVtb3ZlIGZpbGUgZnJvbSB1cGxvYWRlclxyXG4gICAgY2xlYXIoZW1pdDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmluc3RhbmNlLmNsZWFyKGVtaXQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNhbmNlbCB1cGxvYWRpbmdcclxuICAgIHByZXZlbnRVcGxvYWRpbmcoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pbnN0YW5jZS5wcmV2ZW50VXBsb2FkaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc3RhcnQgdXBsb2FkaW5nXHJcbiAgICB1cGxvYWQoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZS51cGxvYWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEUk9QXHJcbiAgICBASG9zdExpc3RlbmVyKCdkcmFnb3ZlcicsIFsnJGV2ZW50J10pXHJcbiAgICBvbkRyYWdPdmVyKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB0cmFuc2ZlciA9IHRoaXMuX2dldFRyYW5zZmVyKGV2ZW50KTtcclxuICAgICAgICBpZiAoIXRoaXMuX2hhdmVGaWxlcyh0cmFuc2Zlci50eXBlcykpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cmFuc2Zlci5kcm9wRWZmZWN0ID0gJ2NvcHknO1xyXG4gICAgICAgIHRoaXMuX3ByZXZlbnRBbmRTdG9wKGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdkcmFnbGVhdmUnLCBbJyRldmVudCddKVxyXG4gICAgb25EcmFnTGVhdmUoZXZlbnQ6IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKCh0aGlzIGFzIGFueSkuZWxlbWVudCkge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQuY3VycmVudFRhcmdldCA9PT0gKHRoaXMgYXMgYW55KS5lbGVtZW50WzBdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcHJldmVudEFuZFN0b3AoZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2Ryb3AnLCBbJyRldmVudCddKVxyXG4gICAgb25Ecm9wKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29uZmlnLmlzRHJvcEFsbG93ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0cmFuc2ZlciA9IHRoaXMuX2dldFRyYW5zZmVyKGV2ZW50KTtcclxuICAgICAgICBpZiAoIXRyYW5zZmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcHJldmVudEFuZFN0b3AoZXZlbnQpO1xyXG4gICAgICAgIHRoaXMuaW5zdGFuY2UubG9hZEZpbGUoe3RhcmdldDoge2ZpbGVzOiB0cmFuc2Zlci5maWxlc319KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2dldFRyYW5zZmVyKGV2ZW50OiBhbnkpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiBldmVudC5kYXRhVHJhbnNmZXIgPyBldmVudC5kYXRhVHJhbnNmZXIgOiBldmVudC5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2ZlcjsgLy8galF1ZXJ5IGZpeDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3ByZXZlbnRBbmRTdG9wKGV2ZW50OiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9oYXZlRmlsZXModHlwZXM6IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKCF0eXBlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlcy5pbmRleE9mKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0eXBlcy5pbmRleE9mKCdGaWxlcycpICE9PSAtMTtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVzLmNvbnRhaW5zKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0eXBlcy5jb250YWlucygnRmlsZXMnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIERST1AgRU5EXHJcblxyXG4gICAgcHJpdmF0ZSBfc2V0QnRuQ29udGFpbmVyKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPSB0aGlzLmZhY3RvcnkucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoQWlzVXBsb2FkZXJDb21wb25lbnQpO1xyXG4gICAgICAgIHRoaXMuX2J0bkNvbnRhaW5lciA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XHJcbiAgICAgICAgdGhpcy5fYnRuQ29udGFpbmVyLmluc3RhbmNlLmNvbmZpZyA9IHRoaXMuY29uZmlnO1xyXG4gICAgICAgIHRoaXMuX2NsaWNrRm4gPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLnJlZi5uYXRpdmVFbGVtZW50LCAnY2xpY2snLCAoZSkgPT4gdGhpcy5faGFuZGxlQ2xpY2soZSkpO1xyXG4gICAgICAgIHRoaXMuX3N1YiQuYWRkKHRoaXMuX2J0bkNvbnRhaW5lci5pbnN0YW5jZS5vbkNoYW5nZS5zdWJzY3JpYmUoZGF0YSA9PiB0aGlzLm9uQ2hhbmdlLmVtaXQoZGF0YSkpKTtcclxuICAgICAgICB0aGlzLl9zdWIkLmFkZCh0aGlzLl9idG5Db250YWluZXIuaW5zdGFuY2Uub25FcnJvci5zdWJzY3JpYmUoZXJyID0+IHRoaXMub25FcnJvci5lbWl0KGVycikpKTtcclxuICAgICAgICB0aGlzLl9zdWIkLmFkZCh0aGlzLl9idG5Db250YWluZXIuaW5zdGFuY2Uub25Qcm9ncmVzcy5zdWJzY3JpYmUocHJvZ3Jlc3MgPT4gdGhpcy5vblByb2dyZXNzLmVtaXQocHJvZ3Jlc3MpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfaGFuZGxlQ2xpY2soZXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gT2JqZWN0LnZhbHVlcyhldmVudC50YXJnZXQuYXR0cmlidXRlcykubWFwKGVsID0+IGVsWyduYW1lJ10pO1xyXG4gICAgICAgIGlmICghIWF0dHJpYnV0ZXMuZmluZChhdHRyID0+IGF0dHIgPT0gJ2NsZWFyJykgJiZcclxuICAgICAgICAgICAgdGhpcy5maWxlTmFtZSAmJiAhdGhpcy5pbnN0YW5jZS51cGxvYWRpbmdQcm9ncmVzcykge1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCEhYXR0cmlidXRlcy5maW5kKGF0dHIgPT4gYXR0ciA9PSAnc3RvcCcpICYmXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZU5hbWUgJiYgdGhpcy5pbnN0YW5jZS51cGxvYWRpbmdQcm9ncmVzcykge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZlbnRVcGxvYWRpbmcoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9idG5Db250YWluZXIuaW5zdGFuY2Uuc2VsZWN0KCk7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==