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

408 lines 23.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { HttpRequest } from '@angular/common/http'; import { Observable, Subject } from 'rxjs'; var UploadItem = /** @class */ (function () { function UploadItem(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 {?} */ var fileCategory = this.file.type.split('/')[0]; if (fileCategory === 'image' || fileCategory === 'video') { this.preview = this.readMediaFile(); } } Object.defineProperty(UploadItem.prototype, "req", { get: /** * @return {?} */ function () { return this._req; }, enumerable: true, configurable: true }); Object.defineProperty(UploadItem.prototype, "progress", { get: /** * @return {?} */ function () { return this._progress; }, enumerable: true, configurable: true }); Object.defineProperty(UploadItem.prototype, "fileName", { get: /** * @return {?} */ function () { return this.file.name; }, enumerable: true, configurable: true }); Object.defineProperty(UploadItem.prototype, "isReady", { get: /** * @return {?} */ function () { return this.ready; }, enumerable: true, configurable: true }); Object.defineProperty(UploadItem.prototype, "isUploading", { get: /** * @return {?} */ function () { return this.uploading; }, enumerable: true, configurable: true }); Object.defineProperty(UploadItem.prototype, "isUploaded", { get: /** * @return {?} */ function () { return this.uploaded; }, enumerable: true, configurable: true }); Object.defineProperty(UploadItem.prototype, "isCancelled", { get: /** * @return {?} */ function () { return this.cancelled; }, enumerable: true, configurable: true }); Object.defineProperty(UploadItem.prototype, "isError", { get: /** * @return {?} */ function () { return this.error; }, enumerable: true, configurable: true }); /** * @private * @return {?} */ UploadItem.prototype.buildFormData = /** * @private * @return {?} */ function () { /** @type {?} */ var formData = new FormData(); if (this.additionalParams) { Object.entries(this.additionalParams).forEach((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), key = _b[0], value = _b[1]; return formData.set(key, value); })); } formData.set(this.fileAlias, this.file, this.file.name); return formData; }; /** * @private * @return {?} */ UploadItem.prototype.buildRequest = /** * @private * @return {?} */ function () { /** @type {?} */ var body = this.buildFormData(); return new HttpRequest(this.method, this.url, body, { reportProgress: true }); }; /** * @private * @return {?} */ UploadItem.prototype.readMediaFile = /** * @private * @return {?} */ function () { var _this = this; return new Observable((/** * @param {?} observer * @return {?} */ function (observer) { /** @type {?} */ var reader = new FileReader(); reader.onload = (/** * @return {?} */ function () { observer.next((/** @type {?} */ (reader.result))); observer.complete(); }); reader.onerror = (/** * @return {?} */ function () { reader.abort(); observer.error(reader.error); }); reader.readAsDataURL(_this.file); })); }; /** * @return {?} */ UploadItem.prototype.cleanup = /** * @return {?} */ function () { this.onResponseSubject.complete(); this.onProgressSubject.complete(); this.onErrorSubject.complete(); }; /** * @return {?} */ UploadItem.prototype.onBeforeUpload = /** * @return {?} */ function () { this.ready = true; this.uploading = false; this.uploaded = false; this.cancelled = false; this.error = false; this._progress = 0; }; /** * @return {?} */ UploadItem.prototype.onUploadStart = /** * @return {?} */ function () { this.ready = true; this.uploading = true; this.uploaded = false; this.cancelled = false; this.error = false; }; /** * @param {?} res * @return {?} */ UploadItem.prototype.onUploadSuccess = /** * @param {?} res * @return {?} */ function (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 {?} */ UploadItem.prototype.onUploadProgress = /** * @param {?} progress * @return {?} */ function (progress) { this._progress = progress; this.onProgressSubject.next(this._progress); }; /** * @return {?} */ UploadItem.prototype.onUploadCancelled = /** * @return {?} */ function () { this.ready = false; this.uploading = false; this.uploaded = false; this.cancelled = true; this.error = false; this._progress = 0; }; /** * @param {?} err * @return {?} */ UploadItem.prototype.onUploadError = /** * @param {?} err * @return {?} */ function (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 {?} */ UploadItem.prototype.upload = /** * @param {?=} additionalParams * @return {?} */ function (additionalParams) { if (additionalParams) { this.additionalParams = additionalParams; this._req = this.buildRequest(); } this.listener.uploadItem(this); }; /** * @return {?} */ UploadItem.prototype.cancel = /** * @return {?} */ function () { this.listener.cancelItem(this); }; /** * @return {?} */ UploadItem.prototype.remove = /** * @return {?} */ function () { this.listener.removeItem(this); }; return UploadItem; }()); export { UploadItem }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWl0ZW0uY2xhc3MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdHJlbmRzdGVyLWlvL25nLXVwbG9hZGVyLyIsInNvdXJjZXMiOlsibGliL3VwbG9hZC1pdGVtLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFxQixXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV0RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkzQztJQXFCRSxvQkFBb0IsUUFBd0IsRUFBRSxPQUEwQjtRQUFwRCxhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQUMxQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUM7UUFDN0MsSUFBSSxDQUFDLGdCQUFnQixHQUFH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QU07Ozs7SUFBTixVQUFPLGdCQUF5QztRQUM5QyxJQUFJLGdCQUFnQixFQUFFO1lBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztZQUN6QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNqQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7Ozs7SUFFRCwyQkFBTTs7O0lBQU47UUFDRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDOzs7O0lBRUQsMkJBQU07OztJQUFOO1FBQ0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUNILGlCQUFDO0FBQUQsQ0FBQyxBQW5MRCxJQW1MQzs7OztJQWxMQyw2QkFBcUM7O0lBQ3JDLGdDQUFxQzs7SUFDckMsZ0NBQXdDOztJQUN4Qyw2QkFBZ0Q7Ozs7O0lBQ2hELHVDQUF3Qzs7Ozs7SUFDeEMsdUNBQTJDOzs7OztJQUMzQyxvQ0FBbUQ7Ozs7O0lBQ25ELDBCQUFvQzs7Ozs7SUFDcEMsK0JBQTBCOzs7OztJQUMxQix5QkFBb0I7Ozs7O0lBQ3BCLDRCQUF5Qzs7Ozs7SUFDekMsMEJBQW1COzs7OztJQUNuQiwrQkFBMEI7Ozs7O0lBQzFCLHNDQUFpRDs7Ozs7SUFDakQsMkJBQXVCOzs7OztJQUN2QiwrQkFBMkI7Ozs7O0lBQzNCLDhCQUEwQjs7Ozs7SUFDMUIsK0JBQTJCOzs7OztJQUMzQiwyQkFBdUI7Ozs7O0lBRVgsOEJBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFVwbG9hZExpc3RlbmVyLCBVcGxvYWRJdGVtT3B0aW9ucyB9IGZyb20gJy4vbW9kZWxzJztcblxuZXhwb3J0IGNsYXNzIFVwbG9hZEl0ZW0ge1xuICByZWFkb25seSBwcmV2aWV3OiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIHJlYWRvbmx5IG9uUmVzcG9uc2U6IE9ic2VydmFibGU8YW55PjtcbiAgcmVhZG9ubHkgb25Qcm9ncmVzczogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICByZWFkb25seSBvbkVycm9yOiBPYnNlcnZhYmxlPEh0dHBFcnJvclJlc3BvbnNlPjtcbiAgcHJpdmF0ZSBvblJlc3BvbnNlU3ViamVjdDogU3ViamVjdDxhbnk+O1xuICBwcml2YXRlIG9uUHJvZ3Jlc3NTdWJqZWN0OiBTdWJqZWN0PG51bWJlcj47XG4gIHByaXZhdGUgb25FcnJvclN1YmplY3Q6IFN1YmplY3Q8SHR0cEVycm9yUmVzcG9uc2U+O1xuICBwcml2YXRlIF9yZXE6IEh0dHBSZXF1ZXN0PEZvcm1EYXRhPjtcbiAgcHJpdmF0ZSBfcHJvZ3Jlc3M6IG51bWJlcjtcbiAgcHJpdmF0ZSB1cmw6IHN0cmluZztcbiAgcHJpdmF0ZSBtZXRob2Q6ICdQT1NUJyB8ICdQVVQnIHwgJ1BBVENIJztcbiAgcHJpdmF0ZSBmaWxlOiBGaWxlO1xuICBwcml2YXRlIGZpbGVBbGlhczogc3RyaW5nO1xuICBwcml2YXRlIGFkZGl0aW9uYWxQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gIHByaXZhdGUgcmVhZHk6IGJvb2xlYW47XG4gIHByaXZhdGUgdXBsb2FkaW5nOiBib29sZWFuO1xuICBwcml2YXRlIHVwbG9hZGVkOiBib29sZWFuO1xuICBwcml2YXRlIGNhbmNlbGxlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBlcnJvcjogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxpc3RlbmVyOiBVcGxvYWRMaXN0ZW5lciwgb3B0aW9uczogVXBsb2FkSXRlbU9wdGlvbnMpIHtcbiAgICB0aGlzLm9uUmVzcG9uc2VTdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcbiAgICB0aGlzLm9uUHJvZ3Jlc3NTdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcbiAgICB0aGlzLm9uRXJyb3JTdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcbiAgICB0aGlzLm9uUmVzcG9uc2UgPSB0aGlzLm9uUmVzcG9uc2VTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMub25Qcm9ncmVzcyA9IHRoaXMub25Qcm9ncmVzc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5vbkVycm9yID0gdGhpcy5vbkVycm9yU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLl9wcm9ncmVzcyA9IDA7XG4gICAgdGhpcy51cmwgPSBvcHRpb25zLnVybDtcbiAgICB0aGlzLm1ldGhvZCA9IG9wdGlvbnMubWV0aG9kO1xuICAgIHRoaXMuZmlsZSA9IG9wdGlvbnMuZmlsZTtcbiAgICB0aGlzLmZpbGVBbGlhcyA9IG9wdGlvbnMuZmlsZUFsaWFzIHx8ICdmaWxlJztcbiAgICB0aGlzLmFkZGl0aW9uYWxQYXJhbXMgPSBvcHRpb25zLmFkZGl0aW9uYWxQYXJhbXM7XG4gICAgdGhpcy5fcmVxID0gdGhpcy5idWlsZFJlcXVlc3QoKTtcbiAgICBjb25zdCBmaWxlQ2F0ZWdvcnkgPSB0aGlzLmZpbGUudHlwZS5zcGxpdCgnLycpWzBdO1xuICAgIGlmIChmaWxlQ2F0ZWdvcnkgPT09ICdpbWFnZScgfHwgZmlsZUNhdGVnb3J5ID09PSAndmlkZW8nKSB7XG4gICAgICB0aGlzLnByZXZpZXcgPSB0aGlzLnJlYWRNZWRpYUZpbGUoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcmVxKCk6IEh0dHBSZXF1ZXN0PEZvcm1EYXRhPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcTtcbiAgfVxuXG4gIGdldCBwcm9ncmVzcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9wcm9ncmVzcztcbiAgfVxuXG4gIGdldCBmaWxlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZpbGUubmFtZTtcbiAgfVxuXG4gIGdldCBpc1JlYWR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlYWR5O1xuICB9XG5cbiAgZ2V0IGlzVXBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnVwbG9hZGluZztcbiAgfVxuXG4gIGdldCBpc1VwbG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnVwbG9hZGVkO1xuICB9XG5cbiAgZ2V0IGlzQ2FuY2VsbGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNhbmNlbGxlZDtcbiAgfVxuXG4gIGdldCBpc0Vycm9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVycm9yO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZvcm1EYXRhKCk6IEZvcm1EYXRhIHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGlmICh0aGlzLmFkZGl0aW9uYWxQYXJhbXMpIHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuYWRkaXRpb25hbFBhcmFtcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PlxuICAgICAgICBmb3JtRGF0YS5zZXQoa2V5LCB2YWx1ZSlcbiAgICAgICk7XG4gICAgfVxuICAgIGZvcm1EYXRhLnNldCh0aGlzLmZpbGVBbGlhcywgdGhpcy5maWxlLCB0aGlzLmZpbGUubmFtZSk7XG4gICAgcmV0dXJuIGZvcm1EYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFJlcXVlc3QoKTogSHR0cFJlcXVlc3Q8Rm9ybURhdGE+IHtcbiAgICBjb25zdCBib2R5ID0gdGhpcy5idWlsZEZvcm1EYXRhKCk7XG4gICAgcmV0dXJuIG5ldyBIdHRwUmVxdWVzdCh0aGlzLm1ldGhvZCwgdGhpcy51cmwsIGJvZHksIHtcbiAgICAgIHJlcG9ydFByb2dyZXNzOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRNZWRpYUZpbGUoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIG9ic2VydmVyLm5leHQocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpO1xuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgfTtcbiAgICAgIHJlYWRlci5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICByZWFkZXIuYWJvcnQoKTtcbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3IocmVhZGVyLmVycm9yKTtcbiAgICAgIH07XG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTCh0aGlzLmZpbGUpO1xuICAgIH0pO1xuICB9XG5cbiAgY2xlYW51cCgpOiB2b2lkIHtcbiAgICB0aGlzLm9uUmVzcG9uc2VTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vblByb2dyZXNzU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIHRoaXMub25FcnJvclN1YmplY3QuY29tcGxldGUoKTtcbiAgfVxuXG4gIG9uQmVmb3JlVXBsb2FkKCk6IHZvaWQge1xuICAgIHRoaXMucmVhZHkgPSB0cnVlO1xuICAgIHRoaXMudXBsb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy51cGxvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgdGhpcy5lcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuX3Byb2dyZXNzID0gMDtcbiAgfVxuXG4gIG9uVXBsb2FkU3RhcnQoKTogdm9pZCB7XG4gICAgdGhpcy5yZWFkeSA9IHRydWU7XG4gICAgdGhpcy51cGxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMudXBsb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNhbmNlbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZXJyb3IgPSBmYWxzZTtcbiAgfVxuXG4gIG9uVXBsb2FkU3VjY2VzcyhyZXMpOiB2b2lkIHtcbiAgICB0aGlzLnJlYWR5ID0gZmFsc2U7XG4gICAgdGhpcy51cGxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnVwbG9hZGVkID0gdHJ1ZTtcbiAgICB0aGlzLmNhbmNlbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLl9wcm9ncmVzcyA9IDEwMDtcbiAgICB0aGlzLm9uUmVzcG9uc2VTdWJqZWN0Lm5leHQocmVzKTtcbiAgICB0aGlzLmNsZWFudXAoKTtcbiAgfVxuXG4gIG9uVXBsb2FkUHJvZ3Jlc3MocHJvZ3Jlc3M6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3Byb2dyZXNzID0gcHJvZ3Jlc3M7XG4gICAgdGhpcy5vblByb2dyZXNzU3ViamVjdC5uZXh0KHRoaXMuX3Byb2dyZXNzKTtcbiAgfVxuXG4gIG9uVXBsb2FkQ2FuY2VsbGVkKCk6IHZvaWQge1xuICAgIHRoaXMucmVhZHkgPSBmYWxzZTtcbiAgICB0aGlzLnVwbG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMudXBsb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgdGhpcy5lcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuX3Byb2dyZXNzID0gMDtcbiAgfVxuXG4gIG9uVXBsb2FkRXJyb3IoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSk6IHZvaWQge1xuICAgIHRoaXMucmVhZHkgPSBmYWxzZTtcbiAgICB0aGlzLnVwbG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMudXBsb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNhbmNlbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZXJyb3IgPSB0cnVlO1xuICAgIHRoaXMuX3Byb2dyZXNzID0gMDtcbiAgICB0aGlzLm9uRXJyb3JTdWJqZWN0Lm5leHQoZXJyKTtcbiAgfVxuXG4gIHVwbG9hZChhZGRpdGlvbmFsUGFyYW1zPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IHZvaWQge1xuICAgIGlmIChhZGRpdGlvbmFsUGFyYW1zKSB7XG4gICAgICB0aGlzLmFkZGl0aW9uYWxQYXJhbXMgPSBhZGRpdGlvbmFsUGFyYW1zO1xuICAgICAgdGhpcy5fcmVxID0gdGhpcy5idWlsZFJlcXVlc3QoKTtcbiAgICB9XG4gICAgdGhpcy5saXN0ZW5lci51cGxvYWRJdGVtKHRoaXMpO1xuICB9XG5cbiAgY2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMubGlzdGVuZXIuY2FuY2VsSXRlbSh0aGlzKTtcbiAgfVxuXG4gIHJlbW92ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RlbmVyLnJlbW92ZUl0ZW0odGhpcyk7XG4gIH1cbn1cbiJdfQ==