@hmcts/media-viewer
Version:
67 lines • 16 kB
JavaScript
import { Injectable } from '@angular/core';
import { createEffect, ofType } from '@ngrx/effects';
import { catchError, exhaustMap, map, switchMap, tap } from 'rxjs/operators';
import { of } from 'rxjs';
import * as redactionActions from '../actions/redaction.actions';
import * as i0 from "@angular/core";
import * as i1 from "@ngrx/effects";
import * as i2 from "../../redaction/services/redaction-api.service";
import * as i3 from "../../toolbar/toolbar-event.service";
export class RedactionEffects {
constructor(actions$, redactionApiService, toolbarEvents) {
this.actions$ = actions$;
this.redactionApiService = redactionApiService;
this.toolbarEvents = toolbarEvents;
this.loadRedactions$ = createEffect(() => this.actions$.pipe(ofType(redactionActions.LOAD_REDACTIONS), map((action) => action.payload), switchMap((documentId) => {
return this.redactionApiService.getRedactions(documentId).pipe(map(resp => {
return new redactionActions.LoadRedactionSuccess(resp.body);
}), catchError(error => {
return of(new redactionActions.LoadRedactionFailure(error));
}));
})));
this.saveRedaction$ = createEffect(() => this.actions$.pipe(ofType(redactionActions.SAVE_REDACTION), map((action) => action.payload), exhaustMap((redaction) => {
return this.redactionApiService.saveRedaction(redaction).pipe(map(resp => {
return new redactionActions.SaveRedactionSuccess(resp);
}), catchError(error => {
return of(new redactionActions.SaveRedactionFailure(error));
}));
})));
this.saveBulkRedaction$ = createEffect(() => this.actions$.pipe(ofType(redactionActions.SAVE_BULK_REDACTION), map((action) => action.payload), exhaustMap((redaction) => {
return this.redactionApiService.saveBulkRedaction(redaction).pipe(tap(() => this.toolbarEvents.redactAllInProgressSubject.next(false))).pipe(map(resp => {
return new redactionActions.SaveBulkRedactionSuccess(resp);
}), catchError(error => {
return of(new redactionActions.SaveBulkRedactionFailure(error));
}));
})));
this.deleteRedaction$ = createEffect(() => this.actions$.pipe(ofType(redactionActions.DELETE_REDACTION), map((action) => action.payload), exhaustMap((redactionPayload) => {
return this.redactionApiService.deleteRedaction(redactionPayload).pipe(map(() => {
return new redactionActions.DeleteRedactionSuccess(redactionPayload);
}), catchError(error => {
return of(new redactionActions.DeleteRedactionFailure(error));
}));
})));
this.redact$ = createEffect(() => this.actions$.pipe(ofType(redactionActions.REDACT), map((action) => action.payload), exhaustMap((redactionPayload) => {
return this.redactionApiService.redact(redactionPayload).pipe(map((result) => {
const header = result.headers.get('content-disposition').split('filename=');
const filename = header.length > 1 ? header[1].replace(/"/g, '')
: `redacted-document-${redactionPayload.documentId}`;
return new redactionActions.RedactSuccess({ blob: result.body, filename });
}), catchError(error => {
return of(new redactionActions.RedactFailure(error));
}));
})));
this.unmarkAll$ = createEffect(() => this.actions$.pipe(ofType(redactionActions.UNMARK_ALL), map((action) => action.payload), exhaustMap((documentId) => {
return this.redactionApiService.deleteAllMarkers(documentId).pipe(map(result => {
return new redactionActions.UnmarkAllSuccess();
}), catchError(error => {
return of(new redactionActions.DeleteRedactionFailure(error));
}));
})));
}
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RedactionEffects, deps: [{ token: i1.Actions }, { token: i2.RedactionApiService }, { token: i3.ToolbarEventService }], target: i0.ɵɵFactoryTarget.Injectable }); }
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RedactionEffects }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RedactionEffects, decorators: [{
type: Injectable
}], ctorParameters: () => [{ type: i1.Actions }, { type: i2.RedactionApiService }, { type: i3.ToolbarEventService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkYWN0aW9uLmVmZmVjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYS12aWV3ZXIvc3JjL2xpYi9zdG9yZS9lZmZlY3RzL3JlZGFjdGlvbi5lZmZlY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFXLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFCLE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7QUFLakUsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixZQUNVLFFBQWlCLEVBQ2pCLG1CQUF3QyxFQUN4QyxhQUFrQztRQUZsQyxhQUFRLEdBQVIsUUFBUSxDQUFTO1FBQ2pCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsa0JBQWEsR0FBYixhQUFhLENBQXFCO1FBRzVDLG9CQUFlLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDbEIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxFQUN4QyxHQUFHLENBQUMsQ0FBQyxNQUF1QyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQ2hFLFNBQVMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQzVELEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDVCxPQUFPLElBQUksZ0JBQWdCLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlELENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDakIsT0FBTyxFQUFFLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzlELENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLENBQUMsQ0FBQyxDQUNKLENBQUM7UUFFRixtQkFBYyxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2xCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsRUFDdkMsR0FBRyxDQUFDLENBQUMsTUFBc0MsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUMvRCxVQUFVLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUN2QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUMzRCxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ1QsT0FBTyxJQUFJLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pELENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDakIsT0FBTyxFQUFFLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzlELENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLENBQUMsQ0FBQyxDQUNKLENBQUM7UUFFRix1QkFBa0IsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNsQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsRUFDNUMsR0FBRyxDQUFDLENBQUMsTUFBc0MsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUMvRCxVQUFVLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUN2QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQy9ELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDcEYsT0FBTyxJQUFJLGdCQUFnQixDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdELENBQUMsQ0FBQyxFQUNBLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDakIsT0FBTyxFQUFFLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2xFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixDQUFDLENBQUMsQ0FBQyxDQUNKLENBQUM7UUFFRixxQkFBZ0IsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNsQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsRUFDekMsR0FBRyxDQUFDLENBQUMsTUFBd0MsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUNqRSxVQUFVLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FDcEUsR0FBRyxDQUFDLEdBQUcsRUFBRTtnQkFDUCxPQUFPLElBQUksZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN2RSxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2pCLE9BQU8sRUFBRSxDQUFDLElBQUksZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNoRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQyxDQUFDLENBQUMsQ0FDSixDQUFDO1FBRUYsWUFBTyxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2xCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFDL0IsR0FBRyxDQUFDLENBQUMsTUFBK0IsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUN4RCxVQUFVLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FDM0QsR0FBRyxDQUFDLENBQUMsTUFBMEIsRUFBRSxFQUFFO2dCQUNqQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDNUUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztvQkFDOUQsQ0FBQyxDQUFDLHFCQUFxQixnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDdkQsT0FBTyxJQUFJLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDN0UsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNqQixPQUFPLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLENBQUMsQ0FBQyxDQUNKLENBQUM7UUFFRixlQUFVLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDbEIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxFQUNuQyxHQUFHLENBQUMsQ0FBQyxNQUFrQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQzNELFVBQVUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FDL0QsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNYLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2pELENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDakIsT0FBTyxFQUFFLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2hFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLENBQUMsQ0FBQyxDQUNKLENBQUM7SUE3RkUsQ0FBQztrSUFMTSxnQkFBZ0I7c0lBQWhCLGdCQUFnQjs7NEZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGlvbnMsIGNyZWF0ZUVmZmVjdCwgb2ZUeXBlIH0gZnJvbSAnQG5ncngvZWZmZWN0cyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBleGhhdXN0TWFwLCBtYXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJlZGFjdGlvbkFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9yZWRhY3Rpb24vc2VydmljZXMvcmVkYWN0aW9uLWFwaS5zZXJ2aWNlJztcbmltcG9ydCAqIGFzIHJlZGFjdGlvbkFjdGlvbnMgZnJvbSAnLi4vYWN0aW9ucy9yZWRhY3Rpb24uYWN0aW9ucyc7XG5pbXBvcnQgeyBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBUb29sYmFyRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdG9vbGJhci90b29sYmFyLWV2ZW50LnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUmVkYWN0aW9uRWZmZWN0cyB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWN0aW9ucyQ6IEFjdGlvbnMsXG4gICAgcHJpdmF0ZSByZWRhY3Rpb25BcGlTZXJ2aWNlOiBSZWRhY3Rpb25BcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9vbGJhckV2ZW50czogVG9vbGJhckV2ZW50U2VydmljZVxuICApIHsgfVxuXG4gIGxvYWRSZWRhY3Rpb25zJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICBvZlR5cGUocmVkYWN0aW9uQWN0aW9ucy5MT0FEX1JFREFDVElPTlMpLFxuICAgIG1hcCgoYWN0aW9uOiByZWRhY3Rpb25BY3Rpb25zLkxvYWRSZWRhY3Rpb25zKSA9PiBhY3Rpb24ucGF5bG9hZCksXG4gICAgc3dpdGNoTWFwKChkb2N1bWVudElkKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5yZWRhY3Rpb25BcGlTZXJ2aWNlLmdldFJlZGFjdGlvbnMoZG9jdW1lbnRJZCkucGlwZShcbiAgICAgICAgbWFwKHJlc3AgPT4ge1xuICAgICAgICAgIHJldHVybiBuZXcgcmVkYWN0aW9uQWN0aW9ucy5Mb2FkUmVkYWN0aW9uU3VjY2VzcyhyZXNwLmJvZHkpO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgcmV0dXJuIG9mKG5ldyByZWRhY3Rpb25BY3Rpb25zLkxvYWRSZWRhY3Rpb25GYWlsdXJlKGVycm9yKSk7XG4gICAgICAgIH0pKTtcbiAgICB9KSlcbiAgKTtcblxuICBzYXZlUmVkYWN0aW9uJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICBvZlR5cGUocmVkYWN0aW9uQWN0aW9ucy5TQVZFX1JFREFDVElPTiksXG4gICAgbWFwKChhY3Rpb246IHJlZGFjdGlvbkFjdGlvbnMuU2F2ZVJlZGFjdGlvbikgPT4gYWN0aW9uLnBheWxvYWQpLFxuICAgIGV4aGF1c3RNYXAoKHJlZGFjdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMucmVkYWN0aW9uQXBpU2VydmljZS5zYXZlUmVkYWN0aW9uKHJlZGFjdGlvbikucGlwZShcbiAgICAgICAgbWFwKHJlc3AgPT4ge1xuICAgICAgICAgIHJldHVybiBuZXcgcmVkYWN0aW9uQWN0aW9ucy5TYXZlUmVkYWN0aW9uU3VjY2VzcyhyZXNwKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgIHJldHVybiBvZihuZXcgcmVkYWN0aW9uQWN0aW9ucy5TYXZlUmVkYWN0aW9uRmFpbHVyZShlcnJvcikpO1xuICAgICAgICB9KSk7XG4gICAgfSkpXG4gICk7XG5cbiAgc2F2ZUJ1bGtSZWRhY3Rpb24kID0gY3JlYXRlRWZmZWN0KCgpID0+XG4gICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgIG9mVHlwZShyZWRhY3Rpb25BY3Rpb25zLlNBVkVfQlVMS19SRURBQ1RJT04pLFxuICAgIG1hcCgoYWN0aW9uOiByZWRhY3Rpb25BY3Rpb25zLlNhdmVSZWRhY3Rpb24pID0+IGFjdGlvbi5wYXlsb2FkKSxcbiAgICBleGhhdXN0TWFwKChyZWRhY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnJlZGFjdGlvbkFwaVNlcnZpY2Uuc2F2ZUJ1bGtSZWRhY3Rpb24ocmVkYWN0aW9uKS5waXBlKFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy50b29sYmFyRXZlbnRzLnJlZGFjdEFsbEluUHJvZ3Jlc3NTdWJqZWN0Lm5leHQoZmFsc2UpKSkucGlwZShtYXAocmVzcCA9PiB7XG4gICAgICAgICAgcmV0dXJuIG5ldyByZWRhY3Rpb25BY3Rpb25zLlNhdmVCdWxrUmVkYWN0aW9uU3VjY2VzcyhyZXNwKTtcbiAgICAgICAgfSksXG4gICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgICByZXR1cm4gb2YobmV3IHJlZGFjdGlvbkFjdGlvbnMuU2F2ZUJ1bGtSZWRhY3Rpb25GYWlsdXJlKGVycm9yKSk7XG4gICAgICAgICAgfSkpO1xuICAgIH0pKVxuICApO1xuXG4gIGRlbGV0ZVJlZGFjdGlvbiQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgb2ZUeXBlKHJlZGFjdGlvbkFjdGlvbnMuREVMRVRFX1JFREFDVElPTiksXG4gICAgbWFwKChhY3Rpb246IHJlZGFjdGlvbkFjdGlvbnMuRGVsZXRlUmVkYWN0aW9uKSA9PiBhY3Rpb24ucGF5bG9hZCksXG4gICAgZXhoYXVzdE1hcCgocmVkYWN0aW9uUGF5bG9hZCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMucmVkYWN0aW9uQXBpU2VydmljZS5kZWxldGVSZWRhY3Rpb24ocmVkYWN0aW9uUGF5bG9hZCkucGlwZShcbiAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gbmV3IHJlZGFjdGlvbkFjdGlvbnMuRGVsZXRlUmVkYWN0aW9uU3VjY2VzcyhyZWRhY3Rpb25QYXlsb2FkKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgIHJldHVybiBvZihuZXcgcmVkYWN0aW9uQWN0aW9ucy5EZWxldGVSZWRhY3Rpb25GYWlsdXJlKGVycm9yKSk7XG4gICAgICAgIH0pKTtcbiAgICB9KSlcbiAgKTtcblxuICByZWRhY3QkID0gY3JlYXRlRWZmZWN0KCgpID0+XG4gICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgIG9mVHlwZShyZWRhY3Rpb25BY3Rpb25zLlJFREFDVCksXG4gICAgbWFwKChhY3Rpb246IHJlZGFjdGlvbkFjdGlvbnMuUmVkYWN0KSA9PiBhY3Rpb24ucGF5bG9hZCksXG4gICAgZXhoYXVzdE1hcCgocmVkYWN0aW9uUGF5bG9hZCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMucmVkYWN0aW9uQXBpU2VydmljZS5yZWRhY3QocmVkYWN0aW9uUGF5bG9hZCkucGlwZShcbiAgICAgICAgbWFwKChyZXN1bHQ6IEh0dHBSZXNwb25zZTxCbG9iPikgPT4ge1xuICAgICAgICAgIGNvbnN0IGhlYWRlciA9IHJlc3VsdC5oZWFkZXJzLmdldCgnY29udGVudC1kaXNwb3NpdGlvbicpLnNwbGl0KCdmaWxlbmFtZT0nKTtcbiAgICAgICAgICBjb25zdCBmaWxlbmFtZSA9IGhlYWRlci5sZW5ndGggPiAxID8gaGVhZGVyWzFdLnJlcGxhY2UoL1wiL2csICcnKVxuICAgICAgICAgICAgOiBgcmVkYWN0ZWQtZG9jdW1lbnQtJHtyZWRhY3Rpb25QYXlsb2FkLmRvY3VtZW50SWR9YDtcbiAgICAgICAgICByZXR1cm4gbmV3IHJlZGFjdGlvbkFjdGlvbnMuUmVkYWN0U3VjY2Vzcyh7IGJsb2I6IHJlc3VsdC5ib2R5LCBmaWxlbmFtZSB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgIHJldHVybiBvZihuZXcgcmVkYWN0aW9uQWN0aW9ucy5SZWRhY3RGYWlsdXJlKGVycm9yKSk7XG4gICAgICAgIH0pKTtcbiAgICB9KSlcbiAgKTtcblxuICB1bm1hcmtBbGwkID0gY3JlYXRlRWZmZWN0KCgpID0+XG4gICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgIG9mVHlwZShyZWRhY3Rpb25BY3Rpb25zLlVOTUFSS19BTEwpLFxuICAgIG1hcCgoYWN0aW9uOiByZWRhY3Rpb25BY3Rpb25zLlVubWFya0FsbCkgPT4gYWN0aW9uLnBheWxvYWQpLFxuICAgIGV4aGF1c3RNYXAoKGRvY3VtZW50SWQpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnJlZGFjdGlvbkFwaVNlcnZpY2UuZGVsZXRlQWxsTWFya2Vycyhkb2N1bWVudElkKS5waXBlKFxuICAgICAgICBtYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICByZXR1cm4gbmV3IHJlZGFjdGlvbkFjdGlvbnMuVW5tYXJrQWxsU3VjY2VzcygpO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgcmV0dXJuIG9mKG5ldyByZWRhY3Rpb25BY3Rpb25zLkRlbGV0ZVJlZGFjdGlvbkZhaWx1cmUoZXJyb3IpKTtcbiAgICAgICAgfSkpO1xuICAgIH0pKVxuICApO1xufVxuXG4iXX0=