@ngneat/transloco
Version:
The internationalization (i18n) library for Angular
201 lines • 15.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/transloco.pipe.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { ChangeDetectorRef, Inject, Optional, Pipe } from '@angular/core';
import { TranslocoService } from './transloco.service';
import { switchMap } from 'rxjs/operators';
import { forkJoin } from 'rxjs';
import { TRANSLOCO_SCOPE } from './transloco-scope';
import { TRANSLOCO_LANG } from './transloco-lang';
import { listenOrNotOperator, resolveInlineLoader, shouldListenToLangChanges } from './shared';
import { LangResolver } from './lang-resolver';
import { ScopeResolver } from './scope-resolver';
var TranslocoPipe = /** @class */ (function () {
function TranslocoPipe(translocoService, providerScope, providerLang, cdr) {
this.translocoService = translocoService;
this.providerScope = providerScope;
this.providerLang = providerLang;
this.cdr = cdr;
this.subscription = null;
this.lastValue = '';
this.langResolver = new LangResolver();
this.scopeResolver = new ScopeResolver(this.translocoService);
this.listenToLangChange = shouldListenToLangChanges(this.translocoService, this.providerLang);
}
// null is for handling strict mode + async pipe types https://github.com/ngneat/transloco/issues/311
// null is for handling strict mode + async pipe types https://github.com/ngneat/transloco/issues/311
/**
* @param {?} key
* @param {?=} params
* @param {?=} inlineLang
* @return {?}
*/
TranslocoPipe.prototype.transform =
// null is for handling strict mode + async pipe types https://github.com/ngneat/transloco/issues/311
/**
* @param {?} key
* @param {?=} params
* @param {?=} inlineLang
* @return {?}
*/
function (key, params, inlineLang) {
var _this = this;
if (!key) {
return key;
}
/** @type {?} */
var keyName = params ? "" + key + JSON.stringify(params) : key;
if (keyName === this.lastKey) {
return this.lastValue;
}
this.lastKey = keyName;
this.subscription && this.subscription.unsubscribe();
this.subscription = this.translocoService.langChanges$
.pipe(switchMap((/**
* @param {?} activeLang
* @return {?}
*/
function (activeLang) {
/** @type {?} */
var lang = _this.langResolver.resolve({
inline: inlineLang,
provider: _this.providerLang,
active: activeLang
});
return Array.isArray(_this.providerScope)
? forkJoin(((/** @type {?} */ (_this.providerScope))).map((/**
* @param {?} providerScope
* @return {?}
*/
function (providerScope) { return _this.resolveScope(lang, providerScope); })))
: _this.resolveScope(lang, _this.providerScope);
})), listenOrNotOperator(this.listenToLangChange))
.subscribe((/**
* @return {?}
*/
function () { return _this.updateValue(key, params); }));
return this.lastValue;
};
/**
* @return {?}
*/
TranslocoPipe.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.subscription && this.subscription.unsubscribe();
};
/**
* @private
* @param {?} key
* @param {?=} params
* @return {?}
*/
TranslocoPipe.prototype.updateValue = /**
* @private
* @param {?} key
* @param {?=} params
* @return {?}
*/
function (key, params) {
/** @type {?} */
var lang = this.langResolver.resolveLangBasedOnScope(this.path);
this.lastValue = this.translocoService.translate(key, params, lang);
this.cdr.markForCheck();
};
/**
* @private
* @param {?} lang
* @param {?} providerScope
* @return {?}
*/
TranslocoPipe.prototype.resolveScope = /**
* @private
* @param {?} lang
* @param {?} providerScope
* @return {?}
*/
function (lang, providerScope) {
/** @type {?} */
var resolvedScope = this.scopeResolver.resolve({ inline: undefined, provider: providerScope });
this.path = this.langResolver.resolveLangPath(lang, resolvedScope);
/** @type {?} */
var inlineLoader = resolveInlineLoader(providerScope, resolvedScope);
return this.translocoService._loadDependencies(this.path, inlineLoader);
};
TranslocoPipe.decorators = [
{ type: Pipe, args: [{
name: 'transloco',
pure: false
},] }
];
/** @nocollapse */
TranslocoPipe.ctorParameters = function () { return [
{ type: TranslocoService },
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [TRANSLOCO_SCOPE,] }] },
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [TRANSLOCO_LANG,] }] },
{ type: ChangeDetectorRef }
]; };
return TranslocoPipe;
}());
export { TranslocoPipe };
if (false) {
/**
* @type {?}
* @private
*/
TranslocoPipe.prototype.subscription;
/**
* @type {?}
* @private
*/
TranslocoPipe.prototype.lastValue;
/**
* @type {?}
* @private
*/
TranslocoPipe.prototype.lastKey;
/**
* @type {?}
* @private
*/
TranslocoPipe.prototype.listenToLangChange;
/**
* @type {?}
* @private
*/
TranslocoPipe.prototype.path;
/**
* @type {?}
* @private
*/
TranslocoPipe.prototype.langResolver;
/**
* @type {?}
* @private
*/
TranslocoPipe.prototype.scopeResolver;
/**
* @type {?}
* @private
*/
TranslocoPipe.prototype.translocoService;
/**
* @type {?}
* @private
*/
TranslocoPipe.prototype.providerScope;
/**
* @type {?}
* @private
*/
TranslocoPipe.prototype.providerLang;
/**
* @type {?}
* @private
*/
TranslocoPipe.prototype.cdr;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsb2NvLnBpcGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbmduZWF0L3RyYW5zbG9jby8iLCJzb3VyY2VzIjpbImxpYi90cmFuc2xvY28ucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQWEsUUFBUSxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLHlCQUF5QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakQ7SUFhRSx1QkFDVSxnQkFBa0MsRUFDRyxhQUF5QyxFQUMxQyxZQUEyQixFQUMvRCxHQUFzQjtRQUh0QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ0csa0JBQWEsR0FBYixhQUFhLENBQTRCO1FBQzFDLGlCQUFZLEdBQVosWUFBWSxDQUFlO1FBQy9ELFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBWnhCLGlCQUFZLEdBQXdCLElBQUksQ0FBQztRQUN6QyxjQUFTLEdBQVcsRUFBRSxDQUFDO1FBSXZCLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsQyxrQkFBYSxHQUFHLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBUS9ELElBQUksQ0FBQyxrQkFBa0IsR0FBRyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFRCxxR0FBcUc7Ozs7Ozs7O0lBQ3JHLGlDQUFTOzs7Ozs7OztJQUFULFVBQVUsR0FBa0IsRUFBRSxNQUE0QixFQUFFLFVBQStCO1FBQTNGLGlCQWtDQztRQWpDQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1IsT0FBTyxHQUFHLENBQUM7U0FDWjs7WUFFSyxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHO1FBRWhFLElBQUksT0FBTyxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDNUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQ3ZCO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXJELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVk7YUFDbkQsSUFBSSxDQUNILFNBQVM7Ozs7UUFBQyxVQUFBLFVBQVU7O2dCQUNaLElBQUksR0FBRyxLQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQztnQkFDckMsTUFBTSxFQUFFLFVBQVU7Z0JBQ2xCLFFBQVEsRUFBRSxLQUFJLENBQUMsWUFBWTtnQkFDM0IsTUFBTSxFQUFFLFVBQVU7YUFDbkIsQ0FBQztZQUVGLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFJLENBQUMsYUFBYSxDQUFDO2dCQUN0QyxDQUFDLENBQUMsUUFBUSxDQUNOLENBQUMsbUJBQWtCLEtBQUksQ0FBQyxhQUFhLEVBQUEsQ0FBQyxDQUFDLEdBQUc7Ozs7Z0JBQUMsVUFBQSxhQUFhLElBQUksT0FBQSxLQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsRUFBdEMsQ0FBc0MsRUFBQyxDQUNwRztnQkFDSCxDQUFDLENBQUMsS0FBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2xELENBQUMsRUFBQyxFQUNGLG1CQUFtQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUM3QzthQUNBLFNBQVM7OztRQUFDLGNBQU0sT0FBQSxLQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBN0IsQ0FBNkIsRUFBQyxDQUFDO1FBRWxELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDOzs7O0lBRUQsbUNBQVc7OztJQUFYO1FBQ0UsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3ZELENBQUM7Ozs7Ozs7SUFFTyxtQ0FBVzs7Ozs7O0lBQW5CLFVBQW9CLEdBQVcsRUFBRSxNQUE0Qjs7WUFDckQsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNqRSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7Ozs7Ozs7SUFFTyxvQ0FBWTs7Ozs7O0lBQXBCLFVBQXFCLElBQVksRUFBRSxhQUE2Qjs7WUFDMUQsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLENBQUM7UUFDOUYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7O1lBQzdELFlBQVksR0FBRyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDO1FBQ3RFLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDMUUsQ0FBQzs7Z0JBMUVGLElBQUksU0FBQztvQkFDSixJQUFJLEVBQUUsV0FBVztvQkFDakIsSUFBSSxFQUFFLEtBQUs7aUJBQ1o7Ozs7Z0JBYlEsZ0JBQWdCO2dEQXlCcEIsUUFBUSxZQUFJLE1BQU0sU0FBQyxlQUFlO2dEQUNsQyxRQUFRLFlBQUksTUFBTSxTQUFDLGNBQWM7Z0JBM0I3QixpQkFBaUI7O0lBc0YxQixvQkFBQztDQUFBLEFBM0VELElBMkVDO1NBdkVZLGFBQWE7Ozs7OztJQUN4QixxQ0FBaUQ7Ozs7O0lBQ2pELGtDQUErQjs7Ozs7SUFDL0IsZ0NBQW9DOzs7OztJQUNwQywyQ0FBb0M7Ozs7O0lBQ3BDLDZCQUFxQjs7Ozs7SUFDckIscUNBQTBDOzs7OztJQUMxQyxzQ0FBaUU7Ozs7O0lBRy9ELHlDQUEwQzs7Ozs7SUFDMUMsc0NBQXNGOzs7OztJQUN0RixxQ0FBdUU7Ozs7O0lBQ3ZFLDRCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBJbmplY3QsIE9uRGVzdHJveSwgT3B0aW9uYWwsIFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbG9jb1NlcnZpY2UgfSBmcm9tICcuL3RyYW5zbG9jby5zZXJ2aWNlJztcbmltcG9ydCB7IEhhc2hNYXAsIE1heWJlQXJyYXksIFRyYW5zbGF0aW9uLCBUcmFuc2xvY29TY29wZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZm9ya0pvaW4sIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVFJBTlNMT0NPX1NDT1BFIH0gZnJvbSAnLi90cmFuc2xvY28tc2NvcGUnO1xuaW1wb3J0IHsgVFJBTlNMT0NPX0xBTkcgfSBmcm9tICcuL3RyYW5zbG9jby1sYW5nJztcbmltcG9ydCB7IGxpc3Rlbk9yTm90T3BlcmF0b3IsIHJlc29sdmVJbmxpbmVMb2FkZXIsIHNob3VsZExpc3RlblRvTGFuZ0NoYW5nZXMgfSBmcm9tICcuL3NoYXJlZCc7XG5pbXBvcnQgeyBMYW5nUmVzb2x2ZXIgfSBmcm9tICcuL2xhbmctcmVzb2x2ZXInO1xuaW1wb3J0IHsgU2NvcGVSZXNvbHZlciB9IGZyb20gJy4vc2NvcGUtcmVzb2x2ZXInO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICd0cmFuc2xvY28nLFxuICBwdXJlOiBmYWxzZVxufSlcbmV4cG9ydCBjbGFzcyBUcmFuc2xvY29QaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGxhc3RWYWx1ZTogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgbGFzdEtleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGxpc3RlblRvTGFuZ0NoYW5nZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBwYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgbGFuZ1Jlc29sdmVyID0gbmV3IExhbmdSZXNvbHZlcigpO1xuICBwcml2YXRlIHNjb3BlUmVzb2x2ZXIgPSBuZXcgU2NvcGVSZXNvbHZlcih0aGlzLnRyYW5zbG9jb1NlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdHJhbnNsb2NvU2VydmljZTogVHJhbnNsb2NvU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFRSQU5TTE9DT19TQ09QRSkgcHJpdmF0ZSBwcm92aWRlclNjb3BlOiBNYXliZUFycmF5PFRyYW5zbG9jb1Njb3BlPixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFRSQU5TTE9DT19MQU5HKSBwcml2YXRlIHByb3ZpZGVyTGFuZzogc3RyaW5nIHwgbnVsbCxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgdGhpcy5saXN0ZW5Ub0xhbmdDaGFuZ2UgPSBzaG91bGRMaXN0ZW5Ub0xhbmdDaGFuZ2VzKHRoaXMudHJhbnNsb2NvU2VydmljZSwgdGhpcy5wcm92aWRlckxhbmcpO1xuICB9XG5cbiAgLy8gbnVsbCBpcyBmb3IgaGFuZGxpbmcgc3RyaWN0IG1vZGUgKyBhc3luYyBwaXBlIHR5cGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9uZ25lYXQvdHJhbnNsb2NvL2lzc3Vlcy8zMTFcbiAgdHJhbnNmb3JtKGtleTogc3RyaW5nIHwgbnVsbCwgcGFyYW1zPzogSGFzaE1hcCB8IHVuZGVmaW5lZCwgaW5saW5lTGFuZz86IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuXG4gICAgY29uc3Qga2V5TmFtZSA9IHBhcmFtcyA/IGAke2tleX0ke0pTT04uc3RyaW5naWZ5KHBhcmFtcyl9YCA6IGtleTtcblxuICAgIGlmIChrZXlOYW1lID09PSB0aGlzLmxhc3RLZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLmxhc3RWYWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmxhc3RLZXkgPSBrZXlOYW1lO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uICYmIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMudHJhbnNsb2NvU2VydmljZS5sYW5nQ2hhbmdlcyRcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoYWN0aXZlTGFuZyA9PiB7XG4gICAgICAgICAgY29uc3QgbGFuZyA9IHRoaXMubGFuZ1Jlc29sdmVyLnJlc29sdmUoe1xuICAgICAgICAgICAgaW5saW5lOiBpbmxpbmVMYW5nLFxuICAgICAgICAgICAgcHJvdmlkZXI6IHRoaXMucHJvdmlkZXJMYW5nLFxuICAgICAgICAgICAgYWN0aXZlOiBhY3RpdmVMYW5nXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnByb3ZpZGVyU2NvcGUpXG4gICAgICAgICAgICA/IGZvcmtKb2luKFxuICAgICAgICAgICAgICAgICg8VHJhbnNsb2NvU2NvcGVbXT50aGlzLnByb3ZpZGVyU2NvcGUpLm1hcChwcm92aWRlclNjb3BlID0+IHRoaXMucmVzb2x2ZVNjb3BlKGxhbmcsIHByb3ZpZGVyU2NvcGUpKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IHRoaXMucmVzb2x2ZVNjb3BlKGxhbmcsIHRoaXMucHJvdmlkZXJTY29wZSk7XG4gICAgICAgIH0pLFxuICAgICAgICBsaXN0ZW5Pck5vdE9wZXJhdG9yKHRoaXMubGlzdGVuVG9MYW5nQ2hhbmdlKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZVZhbHVlKGtleSwgcGFyYW1zKSk7XG5cbiAgICByZXR1cm4gdGhpcy5sYXN0VmFsdWU7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiAmJiB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVWYWx1ZShrZXk6IHN0cmluZywgcGFyYW1zPzogSGFzaE1hcCB8IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGxhbmcgPSB0aGlzLmxhbmdSZXNvbHZlci5yZXNvbHZlTGFuZ0Jhc2VkT25TY29wZSh0aGlzLnBhdGgpO1xuICAgIHRoaXMubGFzdFZhbHVlID0gdGhpcy50cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZShrZXksIHBhcmFtcywgbGFuZyk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVTY29wZShsYW5nOiBzdHJpbmcsIHByb3ZpZGVyU2NvcGU6IFRyYW5zbG9jb1Njb3BlKTogT2JzZXJ2YWJsZTxUcmFuc2xhdGlvbiB8IFRyYW5zbGF0aW9uW10+IHtcbiAgICBsZXQgcmVzb2x2ZWRTY29wZSA9IHRoaXMuc2NvcGVSZXNvbHZlci5yZXNvbHZlKHsgaW5saW5lOiB1bmRlZmluZWQsIHByb3ZpZGVyOiBwcm92aWRlclNjb3BlIH0pO1xuICAgIHRoaXMucGF0aCA9IHRoaXMubGFuZ1Jlc29sdmVyLnJlc29sdmVMYW5nUGF0aChsYW5nLCByZXNvbHZlZFNjb3BlKTtcbiAgICBjb25zdCBpbmxpbmVMb2FkZXIgPSByZXNvbHZlSW5saW5lTG9hZGVyKHByb3ZpZGVyU2NvcGUsIHJlc29sdmVkU2NvcGUpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zbG9jb1NlcnZpY2UuX2xvYWREZXBlbmRlbmNpZXModGhpcy5wYXRoLCBpbmxpbmVMb2FkZXIpO1xuICB9XG59XG4iXX0=