@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
JavaScript
/**
* @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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWl0ZW0uY2xhc3MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdHJlbmRzdGVyLWlvL25nLXVwbG9hZGVyLyIsInNvdXJjZXMiOlsibGliL3VwbG9hZC1pdGVtLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQXFCLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSTNDLE1BQU0sT0FBTyxVQUFVOzs7OztJQXFCckIsWUFBb0IsUUFBd0IsRUFBRSxPQUEwQjtRQUFwRCxhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQUMxQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUM7UUFDN0MsSUFB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QyxDQUFDOzs7O0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7Ozs7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztDQUNGOzs7SUFsTEMsNkJBQXFDOztJQUNyQyxnQ0FBcUM7O0lBQ3JDLGdDQUF3Qzs7SUFDeEMsNkJBQWdEOzs7OztJQUNoRCx1Q0FBd0M7Ozs7O0lBQ3hDLHVDQUEyQzs7Ozs7SUFDM0Msb0NBQW1EOzs7OztJQUNuRCwwQkFBb0M7Ozs7O0lBQ3BDLCtCQUEwQjs7Ozs7SUFDMUIseUJBQW9COzs7OztJQUNwQiw0QkFBeUM7Ozs7O0lBQ3pDLDBCQUFtQjs7Ozs7SUFDbkIsK0JBQTBCOzs7OztJQUMxQixzQ0FBaUQ7Ozs7O0lBQ2pELDJCQUF1Qjs7Ozs7SUFDdkIsK0JBQTJCOzs7OztJQUMzQiw4QkFBMEI7Ozs7O0lBQzFCLCtCQUEyQjs7Ozs7SUFDM0IsMkJBQXVCOzs7OztJQUVYLDhCQUFnQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwUmVxdWVzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBVcGxvYWRMaXN0ZW5lciwgVXBsb2FkSXRlbU9wdGlvbnMgfSBmcm9tICcuL21vZGVscyc7XG5cbmV4cG9ydCBjbGFzcyBVcGxvYWRJdGVtIHtcbiAgcmVhZG9ubHkgcHJldmlldzogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICByZWFkb25seSBvblJlc3BvbnNlOiBPYnNlcnZhYmxlPGFueT47XG4gIHJlYWRvbmx5IG9uUHJvZ3Jlc3M6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgcmVhZG9ubHkgb25FcnJvcjogT2JzZXJ2YWJsZTxIdHRwRXJyb3JSZXNwb25zZT47XG4gIHByaXZhdGUgb25SZXNwb25zZVN1YmplY3Q6IFN1YmplY3Q8YW55PjtcbiAgcHJpdmF0ZSBvblByb2dyZXNzU3ViamVjdDogU3ViamVjdDxudW1iZXI+O1xuICBwcml2YXRlIG9uRXJyb3JTdWJqZWN0OiBTdWJqZWN0PEh0dHBFcnJvclJlc3BvbnNlPjtcbiAgcHJpdmF0ZSBfcmVxOiBIdHRwUmVxdWVzdDxGb3JtRGF0YT47XG4gIHByaXZhdGUgX3Byb2dyZXNzOiBudW1iZXI7XG4gIHByaXZhdGUgdXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgbWV0aG9kOiAnUE9TVCcgfCAnUFVUJyB8ICdQQVRDSCc7XG4gIHByaXZhdGUgZmlsZTogRmlsZTtcbiAgcHJpdmF0ZSBmaWxlQWxpYXM6IHN0cmluZztcbiAgcHJpdmF0ZSBhZGRpdGlvbmFsUGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuICBwcml2YXRlIHJlYWR5OiBib29sZWFuO1xuICBwcml2YXRlIHVwbG9hZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSB1cGxvYWRlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBjYW5jZWxsZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgZXJyb3I6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBsaXN0ZW5lcjogVXBsb2FkTGlzdGVuZXIsIG9wdGlvbnM6IFVwbG9hZEl0ZW1PcHRpb25zKSB7XG4gICAgdGhpcy5vblJlc3BvbnNlU3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgdGhpcy5vblByb2dyZXNzU3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgdGhpcy5vbkVycm9yU3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgdGhpcy5vblJlc3BvbnNlID0gdGhpcy5vblJlc3BvbnNlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLm9uUHJvZ3Jlc3MgPSB0aGlzLm9uUHJvZ3Jlc3NTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMub25FcnJvciA9IHRoaXMub25FcnJvclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5fcHJvZ3Jlc3MgPSAwO1xuICAgIHRoaXMudXJsID0gb3B0aW9ucy51cmw7XG4gICAgdGhpcy5tZXRob2QgPSBvcHRpb25zLm1ldGhvZDtcbiAgICB0aGlzLmZpbGUgPSBvcHRpb25zLmZpbGU7XG4gICAgdGhpcy5maWxlQWxpYXMgPSBvcHRpb25zLmZpbGVBbGlhcyB8fCAnZmlsZSc7XG4gICAgdGhpcy5hZGRpdGlvbmFsUGFyYW1zID0gb3B0aW9ucy5hZGRpdGlvbmFsUGFyYW1zO1xuICAgIHRoaXMuX3JlcSA9IHRoaXMuYnVpbGRSZXF1ZXN0KCk7XG4gICAgY29uc3QgZmlsZUNhdGVnb3J5ID0gdGhpcy5maWxlLnR5cGUuc3BsaXQoJy8nKVswXTtcbiAgICBpZiAoZmlsZUNhdGVnb3J5ID09PSAnaW1hZ2UnIHx8IGZpbGVDYXRlZ29yeSA9PT0gJ3ZpZGVvJykge1xuICAgICAgdGhpcy5wcmV2aWV3ID0gdGhpcy5yZWFkTWVkaWFGaWxlKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJlcSgpOiBIdHRwUmVxdWVzdDxGb3JtRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLl9yZXE7XG4gIH1cblxuICBnZXQgcHJvZ3Jlc3MoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvZ3Jlc3M7XG4gIH1cblxuICBnZXQgZmlsZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5maWxlLm5hbWU7XG4gIH1cblxuICBnZXQgaXNSZWFkeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeTtcbiAgfVxuXG4gIGdldCBpc1VwbG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy51cGxvYWRpbmc7XG4gIH1cblxuICBnZXQgaXNVcGxvYWRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy51cGxvYWRlZDtcbiAgfVxuXG4gIGdldCBpc0NhbmNlbGxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYW5jZWxsZWQ7XG4gIH1cblxuICBnZXQgaXNFcnJvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvcjtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGb3JtRGF0YSgpOiBGb3JtRGF0YSB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBpZiAodGhpcy5hZGRpdGlvbmFsUGFyYW1zKSB7XG4gICAgICBPYmplY3QuZW50cmllcyh0aGlzLmFkZGl0aW9uYWxQYXJhbXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT5cbiAgICAgICAgZm9ybURhdGEuc2V0KGtleSwgdmFsdWUpXG4gICAgICApO1xuICAgIH1cbiAgICBmb3JtRGF0YS5zZXQodGhpcy5maWxlQWxpYXMsIHRoaXMuZmlsZSwgdGhpcy5maWxlLm5hbWUpO1xuICAgIHJldHVybiBmb3JtRGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRSZXF1ZXN0KCk6IEh0dHBSZXF1ZXN0PEZvcm1EYXRhPiB7XG4gICAgY29uc3QgYm9keSA9IHRoaXMuYnVpbGRGb3JtRGF0YSgpO1xuICAgIHJldHVybiBuZXcgSHR0cFJlcXVlc3QodGhpcy5tZXRob2QsIHRoaXMudXJsLCBib2R5LCB7XG4gICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkTWVkaWFGaWxlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICBvYnNlcnZlci5uZXh0KHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKTtcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgIH07XG4gICAgICByZWFkZXIub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgcmVhZGVyLmFib3J0KCk7XG4gICAgICAgIG9ic2VydmVyLmVycm9yKHJlYWRlci5lcnJvcik7XG4gICAgICB9O1xuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwodGhpcy5maWxlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNsZWFudXAoKTogdm9pZCB7XG4gICAgdGhpcy5vblJlc3BvbnNlU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIHRoaXMub25Qcm9ncmVzc1N1YmplY3QuY29tcGxldGUoKTtcbiAgICB0aGlzLm9uRXJyb3JTdWJqZWN0LmNvbXBsZXRlKCk7XG4gIH1cblxuICBvbkJlZm9yZVVwbG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlYWR5ID0gdHJ1ZTtcbiAgICB0aGlzLnVwbG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMudXBsb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNhbmNlbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLl9wcm9ncmVzcyA9IDA7XG4gIH1cblxuICBvblVwbG9hZFN0YXJ0KCk6IHZvaWQge1xuICAgIHRoaXMucmVhZHkgPSB0cnVlO1xuICAgIHRoaXMudXBsb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnVwbG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5jYW5jZWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gIH1cblxuICBvblVwbG9hZFN1Y2Nlc3MocmVzKTogdm9pZCB7XG4gICAgdGhpcy5yZWFkeSA9IGZhbHNlO1xuICAgIHRoaXMudXBsb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy51cGxvYWRlZCA9IHRydWU7XG4gICAgdGhpcy5jYW5jZWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5fcHJvZ3Jlc3MgPSAxMDA7XG4gICAgdGhpcy5vblJlc3BvbnNlU3ViamVjdC5uZXh0KHJlcyk7XG4gICAgdGhpcy5jbGVhbnVwKCk7XG4gIH1cblxuICBvblVwbG9hZFByb2dyZXNzKHByb2dyZXNzOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9wcm9ncmVzcyA9IHByb2dyZXNzO1xuICAgIHRoaXMub25Qcm9ncmVzc1N1YmplY3QubmV4dCh0aGlzLl9wcm9ncmVzcyk7XG4gIH1cblxuICBvblVwbG9hZENhbmNlbGxlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlYWR5ID0gZmFsc2U7XG4gICAgdGhpcy51cGxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnVwbG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5jYW5jZWxsZWQgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLl9wcm9ncmVzcyA9IDA7XG4gIH1cblxuICBvblVwbG9hZEVycm9yKGVycjogSHR0cEVycm9yUmVzcG9uc2UpOiB2b2lkIHtcbiAgICB0aGlzLnJlYWR5ID0gZmFsc2U7XG4gICAgdGhpcy51cGxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnVwbG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5jYW5jZWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmVycm9yID0gdHJ1ZTtcbiAgICB0aGlzLl9wcm9ncmVzcyA9IDA7XG4gICAgdGhpcy5vbkVycm9yU3ViamVjdC5uZXh0KGVycik7XG4gIH1cblxuICB1cGxvYWQoYWRkaXRpb25hbFBhcmFtcz86IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiB2b2lkIHtcbiAgICBpZiAoYWRkaXRpb25hbFBhcmFtcykge1xuICAgICAgdGhpcy5hZGRpdGlvbmFsUGFyYW1zID0gYWRkaXRpb25hbFBhcmFtcztcbiAgICAgIHRoaXMuX3JlcSA9IHRoaXMuYnVpbGRSZXF1ZXN0KCk7XG4gICAgfVxuICAgIHRoaXMubGlzdGVuZXIudXBsb2FkSXRlbSh0aGlzKTtcbiAgfVxuXG4gIGNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RlbmVyLmNhbmNlbEl0ZW0odGhpcyk7XG4gIH1cblxuICByZW1vdmUoKTogdm9pZCB7XG4gICAgdGhpcy5saXN0ZW5lci5yZW1vdmVJdGVtKHRoaXMpO1xuICB9XG59XG4iXX0=