UNPKG

@trendster-io/ng-uploader

Version:

A fully featured Angular file uploader that utilizes Angular's HttpClient internally, allows you to customize outgoing HTTP requests using the "Angular Way" (Interceptors), provides customizable concurrent queuing of uploads and a simple way to select fil

327 lines 20.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { HttpRequest } from '@angular/common/http'; import { Observable, Subject } from 'rxjs'; export class UploadItem { /** * @param {?} listener * @param {?} options */ constructor(listener, options) { this.listener = listener; this.onResponseSubject = new Subject(); this.onProgressSubject = new Subject(); this.onErrorSubject = new Subject(); this.onResponse = this.onResponseSubject.asObservable(); this.onProgress = this.onProgressSubject.asObservable(); this.onError = this.onErrorSubject.asObservable(); this._progress = 0; this.url = options.url; this.method = options.method; this.file = options.file; this.fileAlias = options.fileAlias || 'file'; this.additionalParams = options.additionalParams; this._req = this.buildRequest(); /** @type {?} */ const fileCategory = this.file.type.split('/')[0]; if (fileCategory === 'image' || fileCategory === 'video') { this.preview = this.readMediaFile(); } } /** * @return {?} */ get req() { return this._req; } /** * @return {?} */ get progress() { return this._progress; } /** * @return {?} */ get fileName() { return this.file.name; } /** * @return {?} */ get isReady() { return this.ready; } /** * @return {?} */ get isUploading() { return this.uploading; } /** * @return {?} */ get isUploaded() { return this.uploaded; } /** * @return {?} */ get isCancelled() { return this.cancelled; } /** * @return {?} */ get isError() { return this.error; } /** * @private * @return {?} */ buildFormData() { /** @type {?} */ const formData = new FormData(); if (this.additionalParams) { Object.entries(this.additionalParams).forEach((/** * @param {?} __0 * @return {?} */ ([key, value]) => formData.set(key, value))); } formData.set(this.fileAlias, this.file, this.file.name); return formData; } /** * @private * @return {?} */ buildRequest() { /** @type {?} */ const body = this.buildFormData(); return new HttpRequest(this.method, this.url, body, { reportProgress: true }); } /** * @private * @return {?} */ readMediaFile() { return new Observable((/** * @param {?} observer * @return {?} */ observer => { /** @type {?} */ const reader = new FileReader(); reader.onload = (/** * @return {?} */ () => { observer.next((/** @type {?} */ (reader.result))); observer.complete(); }); reader.onerror = (/** * @return {?} */ () => { reader.abort(); observer.error(reader.error); }); reader.readAsDataURL(this.file); })); } /** * @return {?} */ cleanup() { this.onResponseSubject.complete(); this.onProgressSubject.complete(); this.onErrorSubject.complete(); } /** * @return {?} */ onBeforeUpload() { this.ready = true; this.uploading = false; this.uploaded = false; this.cancelled = false; this.error = false; this._progress = 0; } /** * @return {?} */ onUploadStart() { this.ready = true; this.uploading = true; this.uploaded = false; this.cancelled = false; this.error = false; } /** * @param {?} res * @return {?} */ onUploadSuccess(res) { this.ready = false; this.uploading = false; this.uploaded = true; this.cancelled = false; this.error = false; this._progress = 100; this.onResponseSubject.next(res); this.cleanup(); } /** * @param {?} progress * @return {?} */ onUploadProgress(progress) { this._progress = progress; this.onProgressSubject.next(this._progress); } /** * @return {?} */ onUploadCancelled() { this.ready = false; this.uploading = false; this.uploaded = false; this.cancelled = true; this.error = false; this._progress = 0; } /** * @param {?} err * @return {?} */ onUploadError(err) { this.ready = false; this.uploading = false; this.uploaded = false; this.cancelled = false; this.error = true; this._progress = 0; this.onErrorSubject.next(err); } /** * @param {?=} additionalParams * @return {?} */ upload(additionalParams) { if (additionalParams) { this.additionalParams = additionalParams; this._req = this.buildRequest(); } this.listener.uploadItem(this); } /** * @return {?} */ cancel() { this.listener.cancelItem(this); } /** * @return {?} */ remove() { this.listener.removeItem(this); } } if (false) { /** @type {?} */ UploadItem.prototype.preview; /** @type {?} */ UploadItem.prototype.onResponse; /** @type {?} */ UploadItem.prototype.onProgress; /** @type {?} */ UploadItem.prototype.onError; /** * @type {?} * @private */ UploadItem.prototype.onResponseSubject; /** * @type {?} * @private */ UploadItem.prototype.onProgressSubject; /** * @type {?} * @private */ UploadItem.prototype.onErrorSubject; /** * @type {?} * @private */ UploadItem.prototype._req; /** * @type {?} * @private */ UploadItem.prototype._progress; /** * @type {?} * @private */ UploadItem.prototype.url; /** * @type {?} * @private */ UploadItem.prototype.method; /** * @type {?} * @private */ UploadItem.prototype.file; /** * @type {?} * @private */ UploadItem.prototype.fileAlias; /** * @type {?} * @private */ UploadItem.prototype.additionalParams; /** * @type {?} * @private */ UploadItem.prototype.ready; /** * @type {?} * @private */ UploadItem.prototype.uploading; /** * @type {?} * @private */ UploadItem.prototype.uploaded; /** * @type {?} * @private */ UploadItem.prototype.cancelled; /** * @type {?} * @private */ UploadItem.prototype.error; /** * @type {?} * @private */ UploadItem.prototype.listener; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWl0ZW0uY2xhc3MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdHJlbmRzdGVyLWlvL25nLXVwbG9hZGVyLyIsInNvdXJjZXMiOlsibGliL3VwbG9hZC1pdGVtLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQXFCLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSTNDLE1BQU0sT0FBTyxVQUFVOzs7OztJQXFCckIsWUFBb0IsUUFBd0IsRUFBRSxPQUEwQjtRQUFwRCxhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQUMxQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUM7UUFDN0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztRQUNqRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzs7Y0FDMUIsWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakQsSUFBSSxZQUFZLEtBQUssT0FBTyxJQUFJLFlBQVksS0FBSyxPQUFPLEVBQUU7WUFDeEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDckM7SUFDSCxDQUFDOzs7O0lBRUQsSUFBSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7Ozs7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQzs7OztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDeEIsQ0FBQzs7OztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDOzs7O0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7Ozs7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQzs7OztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDOzs7O0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7Ozs7O0lBRU8sYUFBYTs7Y0FDYixRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUU7UUFDL0IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDekIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPOzs7O1lBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQzdELFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUN6QixDQUFDO1NBQ0g7UUFDRCxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7Ozs7O0lBRU8sWUFBWTs7Y0FDWixJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRTtRQUNqQyxPQUFPLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUU7WUFDbEQsY0FBYyxFQUFFLElBQUk7U0FDckIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7Ozs7SUFFTyxhQUFhO1FBQ25CLE9BQU8sSUFBSSxVQUFVOzs7O1FBQUMsUUFBUSxDQUFDLEVBQUU7O2tCQUN6QixNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUU7WUFDL0IsTUFBTSxDQUFDLE1BQU07OztZQUFHLEdBQUcsRUFBRTtnQkFDbkIsUUFBUSxDQUFDLElBQUksQ0FBQyxtQkFBQSxNQUFNLENBQUMsTUFBTSxFQUFVLENBQUMsQ0FBQztnQkFDdkMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3RCLENBQUMsQ0FBQSxDQUFDO1lBQ0YsTUFBTSxDQUFDLE9BQU87OztZQUFHLEdBQUcsRUFBRTtnQkFDcEIsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNmLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9CLENBQUMsQ0FBQSxDQUFDO1lBQ0YsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDOzs7O0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqQyxDQUFDOzs7O0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7Ozs7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQzs7Ozs7SUFFRCxlQUFlLENBQUMsR0FBRztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztRQUNyQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQixDQUFDOzs7OztJQUVELGdCQUFnQixDQUFDLFFBQWdCO1FBQy9CLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1FBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7Ozs7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNyQixDQUFDOzs7OztJQUVELGFBQWEsQ0FBQyxHQUFzQjtRQUNsQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDOzs7OztJQUVELE1BQU0sQ0FBQyxnQkFBeUM7UUFDOUMsSUFBSSxnQkFBZ0IsRUFBRTtZQUNwQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7WUFDekMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDakM7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDOzs7O0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7Ozs7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztDQUNGOzs7SUFsTEMsNkJBQXFDOztJQUNyQyxnQ0FBcUM7O0lBQ3JDLGdDQUF3Qzs7SUFDeEMsNkJBQWdEOzs7OztJQUNoRCx1Q0FBd0M7Ozs7O0lBQ3hDLHVDQUEyQzs7Ozs7SUFDM0Msb0NBQW1EOzs7OztJQUNuRCwwQkFBb0M7Ozs7O0lBQ3BDLCtCQUEwQjs7Ozs7SUFDMUIseUJBQW9COzs7OztJQUNwQiw0QkFBeUM7Ozs7O0lBQ3pDLDBCQUFtQjs7Ozs7SUFDbkIsK0JBQTBCOzs7OztJQUMxQixzQ0FBaUQ7Ozs7O0lBQ2pELDJCQUF1Qjs7Ozs7SUFDdkIsK0JBQTJCOzs7OztJQUMzQiw4QkFBMEI7Ozs7O0lBQzFCLCtCQUEyQjs7Ozs7SUFDM0IsMkJBQXVCOzs7OztJQUVYLDhCQUFnQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwUmVxdWVzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBVcGxvYWRMaXN0ZW5lciwgVXBsb2FkSXRlbU9wdGlvbnMgfSBmcm9tICcuL21vZGVscyc7XG5cbmV4cG9ydCBjbGFzcyBVcGxvYWRJdGVtIHtcbiAgcmVhZG9ubHkgcHJldmlldzogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICByZWFkb25seSBvblJlc3BvbnNlOiBPYnNlcnZhYmxlPGFueT47XG4gIHJlYWRvbmx5IG9uUHJvZ3Jlc3M6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgcmVhZG9ubHkgb25FcnJvcjogT2JzZXJ2YWJsZTxIdHRwRXJyb3JSZXNwb25zZT47XG4gIHByaXZhdGUgb25SZXNwb25zZVN1YmplY3Q6IFN1YmplY3Q8YW55PjtcbiAgcHJpdmF0ZSBvblByb2dyZXNzU3ViamVjdDogU3ViamVjdDxudW1iZXI+O1xuICBwcml2YXRlIG9uRXJyb3JTdWJqZWN0OiBTdWJqZWN0PEh0dHBFcnJvclJlc3BvbnNlPjtcbiAgcHJpdmF0ZSBfcmVxOiBIdHRwUmVxdWVzdDxGb3JtRGF0YT47XG4gIHByaXZhdGUgX3Byb2dyZXNzOiBudW1iZXI7XG4gIHByaXZhdGUgdXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgbWV0aG9kOiAnUE9TVCcgfCAnUFVUJyB8ICdQQVRDSCc7XG4gIHByaXZhdGUgZmlsZTogRmlsZTtcbiAgcHJpdmF0ZSBmaWxlQWxpYXM6IHN0cmluZztcbiAgcHJpdmF0ZSBhZGRpdGlvbmFsUGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuICBwcml2YXRlIHJlYWR5OiBib29sZWFuO1xuICBwcml2YXRlIHVwbG9hZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSB1cGxvYWRlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBjYW5jZWxsZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgZXJyb3I6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBsaXN0ZW5lcjogVXBsb2FkTGlzdGVuZXIsIG9wdGlvbnM6IFVwbG9hZEl0ZW1PcHRpb25zKSB7XG4gICAgdGhpcy5vblJlc3BvbnNlU3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgdGhpcy5vblByb2dyZXNzU3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgdGhpcy5vbkVycm9yU3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgdGhpcy5vblJlc3BvbnNlID0gdGhpcy5vblJlc3BvbnNlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLm9uUHJvZ3Jlc3MgPSB0aGlzLm9uUHJvZ3Jlc3NTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMub25FcnJvciA9IHRoaXMub25FcnJvclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5fcHJvZ3Jlc3MgPSAwO1xuICAgIHRoaXMudXJsID0gb3B0aW9ucy51cmw7XG4gICAgdGhpcy5tZXRob2QgPSBvcHRpb25zLm1ldGhvZDtcbiAgICB0aGlzLmZpbGUgPSBvcHRpb25zLmZpbGU7XG4gICAgdGhpcy5maWxlQWxpYXMgPSBvcHRpb25zLmZpbGVBbGlhcyB8fCAnZmlsZSc7XG4gICAgdGhpcy5hZGRpdGlvbmFsUGFyYW1zID0gb3B0aW9ucy5hZGRpdGlvbmFsUGFyYW1zO1xuICAgIHRoaXMuX3JlcSA9IHRoaXMuYnVpbGRSZXF1ZXN0KCk7XG4gICAgY29uc3QgZmlsZUNhdGVnb3J5ID0gdGhpcy5maWxlLnR5cGUuc3BsaXQoJy8nKVswXTtcbiAgICBpZiAoZmlsZUNhdGVnb3J5ID09PSAnaW1hZ2UnIHx8IGZpbGVDYXRlZ29yeSA9PT0gJ3ZpZGVvJykge1xuICAgICAgdGhpcy5wcmV2aWV3ID0gdGhpcy5yZWFkTWVkaWFGaWxlKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJlcSgpOiBIdHRwUmVxdWVzdDxGb3JtRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLl9yZXE7XG4gIH1cblxuICBnZXQgcHJvZ3Jlc3MoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvZ3Jlc3M7XG4gIH1cblxuICBnZXQgZmlsZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5maWxlLm5hbWU7XG4gIH1cblxuICBnZXQgaXNSZWFkeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeTtcbiAgfVxuXG4gIGdldCBpc1VwbG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy51cGxvYWRpbmc7XG4gIH1cblxuICBnZXQgaXNVcGxvYWRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy51cGxvYWRlZDtcbiAgfVxuXG4gIGdldCBpc0NhbmNlbGxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYW5jZWxsZWQ7XG4gIH1cblxuICBnZXQgaXNFcnJvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvcjtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGb3JtRGF0YSgpOiBGb3JtRGF0YSB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBpZiAodGhpcy5hZGRpdGlvbmFsUGFyYW1zKSB7XG4gICAgICBPYmplY3QuZW50cmllcyh0aGlzLmFkZGl0aW9uYWxQYXJhbXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT5cbiAgICAgICAgZm9ybURhdGEuc2V0KGtleSwgdmFsdWUpXG4gICAgICApO1xuICAgIH1cbiAgICBmb3JtRGF0YS5zZXQodGhpcy5maWxlQWxpYXMsIHRoaXMuZmlsZSwgdGhpcy5maWxlLm5hbWUpO1xuICAgIHJldHVybiBmb3JtRGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRSZXF1ZXN0KCk6IEh0dHBSZXF1ZXN0PEZvcm1EYXRhPiB7XG4gICAgY29uc3QgYm9keSA9IHRoaXMuYnVpbGRGb3JtRGF0YSgpO1xuICAgIHJldHVybiBuZXcgSHR0cFJlcXVlc3QodGhpcy5tZXRob2QsIHRoaXMudXJsLCBib2R5LCB7XG4gICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkTWVkaWFGaWxlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICBvYnNlcnZlci5uZXh0KHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKTtcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgIH07XG4gICAgICByZWFkZXIub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgcmVhZGVyLmFib3J0KCk7XG4gICAgICAgIG9ic2VydmVyLmVycm9yKHJlYWRlci5lcnJvcik7XG4gICAgICB9O1xuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwodGhpcy5maWxlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNsZWFudXAoKTogdm9pZCB7XG4gICAgdGhpcy5vblJlc3BvbnNlU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIHRoaXMub25Qcm9ncmVzc1N1YmplY3QuY29tcGxldGUoKTtcbiAgICB0aGlzLm9uRXJyb3JTdWJqZWN0LmNvbXBsZXRlKCk7XG4gIH1cblxuICBvbkJlZm9yZVVwbG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlYWR5ID0gdHJ1ZTtcbiAgICB0aGlzLnVwbG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMudXBsb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNhbmNlbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLl9wcm9ncmVzcyA9IDA7XG4gIH1cblxuICBvblVwbG9hZFN0YXJ0KCk6IHZvaWQge1xuICAgIHRoaXMucmVhZHkgPSB0cnVlO1xuICAgIHRoaXMudXBsb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnVwbG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5jYW5jZWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gIH1cblxuICBvblVwbG9hZFN1Y2Nlc3MocmVzKTogdm9pZCB7XG4gICAgdGhpcy5yZWFkeSA9IGZhbHNlO1xuICAgIHRoaXMudXBsb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy51cGxvYWRlZCA9IHRydWU7XG4gICAgdGhpcy5jYW5jZWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5fcHJvZ3Jlc3MgPSAxMDA7XG4gICAgdGhpcy5vblJlc3BvbnNlU3ViamVjdC5uZXh0KHJlcyk7XG4gICAgdGhpcy5jbGVhbnVwKCk7XG4gIH1cblxuICBvblVwbG9hZFByb2dyZXNzKHByb2dyZXNzOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9wcm9ncmVzcyA9IHByb2dyZXNzO1xuICAgIHRoaXMub25Qcm9ncmVzc1N1YmplY3QubmV4dCh0aGlzLl9wcm9ncmVzcyk7XG4gIH1cblxuICBvblVwbG9hZENhbmNlbGxlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlYWR5ID0gZmFsc2U7XG4gICAgdGhpcy51cGxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnVwbG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5jYW5jZWxsZWQgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLl9wcm9ncmVzcyA9IDA7XG4gIH1cblxuICBvblVwbG9hZEVycm9yKGVycjogSHR0cEVycm9yUmVzcG9uc2UpOiB2b2lkIHtcbiAgICB0aGlzLnJlYWR5ID0gZmFsc2U7XG4gICAgdGhpcy51cGxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnVwbG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5jYW5jZWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmVycm9yID0gdHJ1ZTtcbiAgICB0aGlzLl9wcm9ncmVzcyA9IDA7XG4gICAgdGhpcy5vbkVycm9yU3ViamVjdC5uZXh0KGVycik7XG4gIH1cblxuICB1cGxvYWQoYWRkaXRpb25hbFBhcmFtcz86IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiB2b2lkIHtcbiAgICBpZiAoYWRkaXRpb25hbFBhcmFtcykge1xuICAgICAgdGhpcy5hZGRpdGlvbmFsUGFyYW1zID0gYWRkaXRpb25hbFBhcmFtcztcbiAgICAgIHRoaXMuX3JlcSA9IHRoaXMuYnVpbGRSZXF1ZXN0KCk7XG4gICAgfVxuICAgIHRoaXMubGlzdGVuZXIudXBsb2FkSXRlbSh0aGlzKTtcbiAgfVxuXG4gIGNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RlbmVyLmNhbmNlbEl0ZW0odGhpcyk7XG4gIH1cblxuICByZW1vdmUoKTogdm9pZCB7XG4gICAgdGhpcy5saXN0ZW5lci5yZW1vdmVJdGVtKHRoaXMpO1xuICB9XG59XG4iXX0=