UNPKG

@ngneat/transloco

Version:

The internationalization (i18n) library for Angular

344 lines 26.6 kB
/** * @fileoverview added by tsickle * Generated from: lib/transloco.directive.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { ChangeDetectorRef, Directive, ElementRef, Inject, Input, Optional, TemplateRef, ViewContainerRef } from '@angular/core'; import { forkJoin } from 'rxjs'; import { switchMap } from 'rxjs/operators'; import { TemplateHandler } from './template-handler'; import { TRANSLOCO_LANG } from './transloco-lang'; import { TRANSLOCO_LOADING_TEMPLATE } from './transloco-loading-template'; import { TRANSLOCO_SCOPE } from './transloco-scope'; import { TranslocoService } from './transloco.service'; import { listenOrNotOperator, resolveInlineLoader, shouldListenToLangChanges } from './shared'; import { LangResolver } from './lang-resolver'; import { ScopeResolver } from './scope-resolver'; var TranslocoDirective = /** @class */ (function () { function TranslocoDirective(translocoService, tpl, providerScope, providerLang, providedLoadingTpl, vcr, cdr, host) { this.translocoService = translocoService; this.tpl = tpl; this.providerScope = providerScope; this.providerLang = providerLang; this.providedLoadingTpl = providedLoadingTpl; this.vcr = vcr; this.cdr = cdr; this.host = host; this.translationMemo = {}; this.params = {}; this.loaderTplHandler = null; // Whether we already rendered the view once this.initialized = false; this.langResolver = new LangResolver(); this.scopeResolver = new ScopeResolver(this.translocoService); } /** * @return {?} */ TranslocoDirective.prototype.ngOnInit = /** * @return {?} */ function () { var _this = this; /** @type {?} */ var listenToLangChange = shouldListenToLangChanges(this.translocoService, this.providerLang || this.inlineLang); this.subscription = this.translocoService.langChanges$ .pipe(switchMap((/** * @param {?} activeLang * @return {?} */ function (activeLang) { /** @type {?} */ var lang = _this.langResolver.resolve({ inline: _this.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(listenToLangChange)) .subscribe((/** * @return {?} */ function () { _this.currentLang = _this.langResolver.resolveLangBasedOnScope(_this.path); _this.tpl === null ? _this.simpleStrategy() : _this.structuralStrategy(_this.currentLang, _this.inlineRead); _this.cdr.markForCheck(); _this.initialized = true; })); /** @type {?} */ var loadingTpl = this.getLoadingTpl(); if (!this.initialized && loadingTpl) { this.loaderTplHandler = new TemplateHandler(loadingTpl, this.vcr); this.loaderTplHandler.attachView(); } }; /** * @param {?} changes * @return {?} */ TranslocoDirective.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { // We need to support dynamic keys/params, so if this is not the first change CD cycle // we need to run the function again in order to update the value /** @type {?} */ var notInit = Object.keys(changes).some((/** * @param {?} v * @return {?} */ function (v) { return changes[v].firstChange === false; })); notInit && this.simpleStrategy(); }; /** * @private * @return {?} */ TranslocoDirective.prototype.simpleStrategy = /** * @private * @return {?} */ function () { this.detachLoader(); this.host.nativeElement.innerText = this.translocoService.translate(this.key, this.params, this.currentLang); }; /** * @private * @param {?} lang * @param {?} read * @return {?} */ TranslocoDirective.prototype.structuralStrategy = /** * @private * @param {?} lang * @param {?} read * @return {?} */ function (lang, read) { this.translationMemo = {}; if (this.view) { // when the lang changes we need to change the reference so Angular will update the view this.view.context['$implicit'] = this.getTranslateFn(lang, read); this.view.context['currentLang'] = this.currentLang; } else { this.detachLoader(); this.view = this.vcr.createEmbeddedView(this.tpl, { $implicit: this.getTranslateFn(lang, read), currentLang: this.currentLang }); } }; /** * @protected * @param {?} lang * @param {?} read * @return {?} */ TranslocoDirective.prototype.getTranslateFn = /** * @protected * @param {?} lang * @param {?} read * @return {?} */ function (lang, read) { var _this = this; return (/** * @param {?} key * @param {?} params * @return {?} */ function (key, params) { /** @type {?} */ var withRead = read ? read + "." + key : key; /** @type {?} */ var withParams = params ? "" + withRead + JSON.stringify(params) : withRead; if (_this.translationMemo.hasOwnProperty(withParams)) { return _this.translationMemo[withParams].value; } _this.translationMemo[withParams] = { params: params, value: _this.translocoService.translate(withRead, params, lang) }; return _this.translationMemo[withParams].value; }); }; /** * @private * @return {?} */ TranslocoDirective.prototype.getLoadingTpl = /** * @private * @return {?} */ function () { return this.inlineTpl || this.providedLoadingTpl; }; /** * @return {?} */ TranslocoDirective.prototype.ngOnDestroy = /** * @return {?} */ function () { this.subscription && this.subscription.unsubscribe(); }; /** * @private * @return {?} */ TranslocoDirective.prototype.detachLoader = /** * @private * @return {?} */ function () { this.loaderTplHandler && this.loaderTplHandler.detachView(); }; /** * @private * @param {?} lang * @param {?} providerScope * @return {?} */ TranslocoDirective.prototype.resolveScope = /** * @private * @param {?} lang * @param {?} providerScope * @return {?} */ function (lang, providerScope) { /** @type {?} */ var resolvedScope = this.scopeResolver.resolve({ inline: this.inlineScope, provider: providerScope }); this.path = this.langResolver.resolveLangPath(lang, resolvedScope); /** @type {?} */ var inlineLoader = resolveInlineLoader(providerScope, resolvedScope); return this.translocoService._loadDependencies(this.path, inlineLoader); }; TranslocoDirective.decorators = [ { type: Directive, args: [{ selector: '[transloco]' },] } ]; /** @nocollapse */ TranslocoDirective.ctorParameters = function () { return [ { type: TranslocoService }, { type: TemplateRef, decorators: [{ type: Optional }] }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [TRANSLOCO_SCOPE,] }] }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [TRANSLOCO_LANG,] }] }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [TRANSLOCO_LOADING_TEMPLATE,] }] }, { type: ViewContainerRef }, { type: ChangeDetectorRef }, { type: ElementRef } ]; }; TranslocoDirective.propDecorators = { key: [{ type: Input, args: ['transloco',] }], params: [{ type: Input, args: ['translocoParams',] }], inlineScope: [{ type: Input, args: ['translocoScope',] }], inlineRead: [{ type: Input, args: ['translocoRead',] }], inlineLang: [{ type: Input, args: ['translocoLang',] }], inlineTpl: [{ type: Input, args: ['translocoLoadingTpl',] }] }; return TranslocoDirective; }()); export { TranslocoDirective }; if (false) { /** @type {?} */ TranslocoDirective.prototype.subscription; /** @type {?} */ TranslocoDirective.prototype.view; /** * @type {?} * @private */ TranslocoDirective.prototype.translationMemo; /** @type {?} */ TranslocoDirective.prototype.key; /** @type {?} */ TranslocoDirective.prototype.params; /** @type {?} */ TranslocoDirective.prototype.inlineScope; /** @type {?} */ TranslocoDirective.prototype.inlineRead; /** @type {?} */ TranslocoDirective.prototype.inlineLang; /** @type {?} */ TranslocoDirective.prototype.inlineTpl; /** * @type {?} * @private */ TranslocoDirective.prototype.currentLang; /** * @type {?} * @private */ TranslocoDirective.prototype.loaderTplHandler; /** * @type {?} * @private */ TranslocoDirective.prototype.initialized; /** * @type {?} * @private */ TranslocoDirective.prototype.path; /** * @type {?} * @private */ TranslocoDirective.prototype.langResolver; /** * @type {?} * @private */ TranslocoDirective.prototype.scopeResolver; /** * @type {?} * @private */ TranslocoDirective.prototype.translocoService; /** * @type {?} * @private */ TranslocoDirective.prototype.tpl; /** * @type {?} * @private */ TranslocoDirective.prototype.providerScope; /** * @type {?} * @private */ TranslocoDirective.prototype.providerLang; /** * @type {?} * @private */ TranslocoDirective.prototype.providedLoadingTpl; /** * @type {?} * @private */ TranslocoDirective.prototype.vcr; /** * @type {?} * @private */ TranslocoDirective.prototype.cdr; /** * @type {?} * @private */ TranslocoDirective.prototype.host; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsb2NvLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZ25lYXQvdHJhbnNsb2NvLyIsInNvdXJjZXMiOlsibGliL3RyYW5zbG9jby5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBRVYsTUFBTSxFQUNOLEtBQUssRUFJTCxRQUFRLEVBQ1IsV0FBVyxFQUVYLGdCQUFnQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBUSxNQUFNLG9CQUFvQixDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLHlCQUF5QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakQ7SUF1QkUsNEJBQ1UsZ0JBQWtDLEVBQ3RCLEdBQTRGLEVBQ25FLGFBQXlDLEVBQzFDLFlBQTJCLEVBQ2Ysa0JBQXNDLEVBQ3RGLEdBQXFCLEVBQ3JCLEdBQXNCLEVBQ3RCLElBQWdCO1FBUGhCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDdEIsUUFBRyxHQUFILEdBQUcsQ0FBeUY7UUFDbkUs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QUNyQiwwQ0FBMEM7Ozs7O0lBQzFDLDJDQUFpRTs7Ozs7SUFHL0QsOENBQTBDOzs7OztJQUMxQyxpQ0FBZ0g7Ozs7O0lBQ2hILDJDQUFzRjs7Ozs7SUFDdEYsMENBQXVFOzs7OztJQUN2RSxnREFBOEY7Ozs7O0lBQzlGLGlDQUE2Qjs7Ozs7SUFDN0IsaUNBQThCOzs7OztJQUM5QixrQ0FBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFbWJlZGRlZFZpZXdSZWYsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBUZW1wbGF0ZVJlZixcbiAgVHlwZSxcbiAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZvcmtKb2luLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRlbXBsYXRlSGFuZGxlciwgVmlldyB9IGZyb20gJy4vdGVtcGxhdGUtaGFuZGxlcic7XG5pbXBvcnQgeyBUUkFOU0xPQ09fTEFORyB9IGZyb20gJy4vdHJhbnNsb2NvLWxhbmcnO1xuaW1wb3J0IHsgVFJBTlNMT0NPX0xPQURJTkdfVEVNUExBVEUgfSBmcm9tICcuL3RyYW5zbG9jby1sb2FkaW5nLXRlbXBsYXRlJztcbmltcG9ydCB7IFRSQU5TTE9DT19TQ09QRSB9IGZyb20gJy4vdHJhbnNsb2NvLXNjb3BlJztcbmltcG9ydCB7IFRyYW5zbG9jb1NlcnZpY2UgfSBmcm9tICcuL3RyYW5zbG9jby5zZXJ2aWNlJztcbmltcG9ydCB7IEhhc2hNYXAsIE1heWJlQXJyYXksIFRyYW5zbGF0aW9uLCBUcmFuc2xvY29TY29wZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgbGlzdGVuT3JOb3RPcGVyYXRvciwgcmVzb2x2ZUlubGluZUxvYWRlciwgc2hvdWxkTGlzdGVuVG9MYW5nQ2hhbmdlcyB9IGZyb20gJy4vc2hhcmVkJztcbmltcG9ydCB7IExhbmdSZXNvbHZlciB9IGZyb20gJy4vbGFuZy1yZXNvbHZlcic7XG5pbXBvcnQgeyBTY29wZVJlc29sdmVyIH0gZnJvbSAnLi9zY29wZS1yZXNvbHZlcic7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t0cmFuc2xvY29dJ1xufSlcbmV4cG9ydCBjbGFzcyBUcmFuc2xvY29EaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsO1xuICB2aWV3OiBFbWJlZGRlZFZpZXdSZWY8YW55PjtcbiAgcHJpdmF0ZSB0cmFuc2xhdGlvbk1lbW86IHsgW2tleTogc3RyaW5nXTogeyB2YWx1ZTogYW55OyBwYXJhbXM6IEhhc2hNYXAgfSB9ID0ge307XG5cbiAgQElucHV0KCd0cmFuc2xvY28nKSBrZXk6IHN0cmluZztcbiAgQElucHV0KCd0cmFuc2xvY29QYXJhbXMnKSBwYXJhbXM6IEhhc2hNYXAgPSB7fTtcbiAgQElucHV0KCd0cmFuc2xvY29TY29wZScpIGlubGluZVNjb3BlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgndHJhbnNsb2NvUmVhZCcpIGlubGluZVJlYWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCd0cmFuc2xvY29MYW5nJykgaW5saW5lTGFuZzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoJ3RyYW5zbG9jb0xvYWRpbmdUcGwnKSBpbmxpbmVUcGw6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBjdXJyZW50TGFuZzogc3RyaW5nO1xuICBwcml2YXRlIGxvYWRlclRwbEhhbmRsZXI6IFRlbXBsYXRlSGFuZGxlciA9IG51bGw7XG4gIC8vIFdoZXRoZXIgd2UgYWxyZWFkeSByZW5kZXJlZCB0aGUgdmlldyBvbmNlXG4gIHByaXZhdGUgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBwYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgbGFuZ1Jlc29sdmVyID0gbmV3IExhbmdSZXNvbHZlcigpO1xuICBwcml2YXRlIHNjb3BlUmVzb2x2ZXIgPSBuZXcgU2NvcGVSZXNvbHZlcih0aGlzLnRyYW5zbG9jb1NlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdHJhbnNsb2NvU2VydmljZTogVHJhbnNsb2NvU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHRwbDogVGVtcGxhdGVSZWY8eyAkaW1wbGljaXQ6IChrZXk6IHN0cmluZywgcGFyYW1zPzogSGFzaE1hcCkgPT4gYW55OyBjdXJyZW50TGFuZzogc3RyaW5nIH0+LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoVFJBTlNMT0NPX1NDT1BFKSBwcml2YXRlIHByb3ZpZGVyU2NvcGU6IE1heWJlQXJyYXk8VHJhbnNsb2NvU2NvcGU+LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoVFJBTlNMT0NPX0xBTkcpIHByaXZhdGUgcHJvdmlkZXJMYW5nOiBzdHJpbmcgfCBudWxsLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoVFJBTlNMT0NPX0xPQURJTkdfVEVNUExBVEUpIHByaXZhdGUgcHJvdmlkZWRMb2FkaW5nVHBsOiBUeXBlPGFueT4gfCBzdHJpbmcsXG4gICAgcHJpdmF0ZSB2Y3I6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgaG9zdDogRWxlbWVudFJlZlxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgbGlzdGVuVG9MYW5nQ2hhbmdlID0gc2hvdWxkTGlzdGVuVG9MYW5nQ2hhbmdlcyh0aGlzLnRyYW5zbG9jb1NlcnZpY2UsIHRoaXMucHJvdmlkZXJMYW5nIHx8IHRoaXMuaW5saW5lTGFuZyk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMudHJhbnNsb2NvU2VydmljZS5sYW5nQ2hhbmdlcyRcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoYWN0aXZlTGFuZyA9PiB7XG4gICAgICAgICAgY29uc3QgbGFuZyA9IHRoaXMubGFuZ1Jlc29sdmVyLnJlc29sdmUoe1xuICAgICAgICAgICAgaW5saW5lOiB0aGlzLmlubGluZUxhbmcsXG4gICAgICAgICAgICBwcm92aWRlcjogdGhpcy5wcm92aWRlckxhbmcsXG4gICAgICAgICAgICBhY3RpdmU6IGFjdGl2ZUxhbmdcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucHJvdmlkZXJTY29wZSlcbiAgICAgICAgICAgID8gZm9ya0pvaW4oXG4gICAgICAgICAgICAgICAgKDxUcmFuc2xvY29TY29wZVtdPnRoaXMucHJvdmlkZXJTY29wZSkubWFwKHByb3ZpZGVyU2NvcGUgPT4gdGhpcy5yZXNvbHZlU2NvcGUobGFuZywgcHJvdmlkZXJTY29wZSkpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogdGhpcy5yZXNvbHZlU2NvcGUobGFuZywgdGhpcy5wcm92aWRlclNjb3BlKTtcbiAgICAgICAgfSksXG4gICAgICAgIGxpc3Rlbk9yTm90T3BlcmF0b3IobGlzdGVuVG9MYW5nQ2hhbmdlKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudExhbmcgPSB0aGlzLmxhbmdSZXNvbHZlci5yZXNvbHZlTGFuZ0Jhc2VkT25TY29wZSh0aGlzLnBhdGgpO1xuICAgICAgICB0aGlzLnRwbCA9PT0gbnVsbCA/IHRoaXMuc2ltcGxlU3RyYXRlZ3koKSA6IHRoaXMuc3RydWN0dXJhbFN0cmF0ZWd5KHRoaXMuY3VycmVudExhbmcsIHRoaXMuaW5saW5lUmVhZCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgbG9hZGluZ1RwbCA9IHRoaXMuZ2V0TG9hZGluZ1RwbCgpO1xuICAgIGlmICghdGhpcy5pbml0aWFsaXplZCAmJiBsb2FkaW5nVHBsKSB7XG4gICAgICB0aGlzLmxvYWRlclRwbEhhbmRsZXIgPSBuZXcgVGVtcGxhdGVIYW5kbGVyKGxvYWRpbmdUcGwsIHRoaXMudmNyKTtcbiAgICAgIHRoaXMubG9hZGVyVHBsSGFuZGxlci5hdHRhY2hWaWV3KCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgIC8vIFdlIG5lZWQgdG8gc3VwcG9ydCBkeW5hbWljIGtleXMvcGFyYW1zLCBzbyBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgY2hhbmdlIENEIGN5Y2xlXG4gICAgLy8gd2UgbmVlZCB0byBydW4gdGhlIGZ1bmN0aW9uIGFnYWluIGluIG9yZGVyIHRvIHVwZGF0ZSB0aGUgdmFsdWVcbiAgICBjb25zdCBub3RJbml0ID0gT2JqZWN0LmtleXMoY2hhbmdlcykuc29tZSh2ID0+IGNoYW5nZXNbdl0uZmlyc3RDaGFuZ2UgPT09IGZhbHNlKTtcbiAgICBub3RJbml0ICYmIHRoaXMuc2ltcGxlU3RyYXRlZ3koKTtcbiAgfVxuXG4gIHByaXZhdGUgc2ltcGxlU3RyYXRlZ3koKSB7XG4gICAgdGhpcy5kZXRhY2hMb2FkZXIoKTtcbiAgICB0aGlzLmhvc3QubmF0aXZlRWxlbWVudC5pbm5lclRleHQgPSB0aGlzLnRyYW5zbG9jb1NlcnZpY2UudHJhbnNsYXRlKHRoaXMua2V5LCB0aGlzLnBhcmFtcywgdGhpcy5jdXJyZW50TGFuZyk7XG4gIH1cblxuICBwcml2YXRlIHN0cnVjdHVyYWxTdHJhdGVneShsYW5nOiBzdHJpbmcsIHJlYWQ6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMudHJhbnNsYXRpb25NZW1vID0ge307XG5cbiAgICBpZiAodGhpcy52aWV3KSB7XG4gICAgICAvLyB3aGVuIHRoZSBsYW5nIGNoYW5nZXMgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIHJlZmVyZW5jZSBzbyBBbmd1bGFyIHdpbGwgdXBkYXRlIHRoZSB2aWV3XG4gICAgICB0aGlzLnZpZXcuY29udGV4dFsnJGltcGxpY2l0J10gPSB0aGlzLmdldFRyYW5zbGF0ZUZuKGxhbmcsIHJlYWQpO1xuICAgICAgdGhpcy52aWV3LmNvbnRleHRbJ2N1cnJlbnRMYW5nJ10gPSB0aGlzLmN1cnJlbnRMYW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRldGFjaExvYWRlcigpO1xuICAgICAgdGhpcy52aWV3ID0gdGhpcy52Y3IuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudHBsLCB7XG4gICAgICAgICRpbXBsaWNpdDogdGhpcy5nZXRUcmFuc2xhdGVGbihsYW5nLCByZWFkKSxcbiAgICAgICAgY3VycmVudExhbmc6IHRoaXMuY3VycmVudExhbmdcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRUcmFuc2xhdGVGbihsYW5nOiBzdHJpbmcsIHJlYWQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IChrZXk6IHN0cmluZywgcGFyYW1zPzogSGFzaE1hcCkgPT4gYW55IHtcbiAgICByZXR1cm4gKGtleTogc3RyaW5nLCBwYXJhbXM6IEhhc2hNYXApID0+IHtcbiAgICAgIGNvbnN0IHdpdGhSZWFkID0gcmVhZCA/IGAke3JlYWR9LiR7a2V5fWAgOiBrZXk7XG4gICAgICBjb25zdCB3aXRoUGFyYW1zID0gcGFyYW1zID8gYCR7d2l0aFJlYWR9JHtKU09OLnN0cmluZ2lmeShwYXJhbXMpfWAgOiB3aXRoUmVhZDtcbiAgICAgIGlmICh0aGlzLnRyYW5zbGF0aW9uTWVtby5oYXNPd25Qcm9wZXJ0eSh3aXRoUGFyYW1zKSkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvbk1lbW9bd2l0aFBhcmFtc10udmFsdWU7XG4gICAgICB9XG4gICAgICB0aGlzLnRyYW5zbGF0aW9uTWVtb1t3aXRoUGFyYW1zXSA9IHtcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICB2YWx1ZTogdGhpcy50cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSh3aXRoUmVhZCwgcGFyYW1zLCBsYW5nKVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb25NZW1vW3dpdGhQYXJhbXNdLnZhbHVlO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldExvYWRpbmdUcGwoKTogVmlldyB7XG4gICAgcmV0dXJuIHRoaXMuaW5saW5lVHBsIHx8IHRoaXMucHJvdmlkZWRMb2FkaW5nVHBsO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gJiYgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZGV0YWNoTG9hZGVyKCkge1xuICAgIHRoaXMubG9hZGVyVHBsSGFuZGxlciAmJiB0aGlzLmxvYWRlclRwbEhhbmRsZXIuZGV0YWNoVmlldygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlU2NvcGUobGFuZzogc3RyaW5nLCBwcm92aWRlclNjb3BlOiBUcmFuc2xvY29TY29wZSk6IE9ic2VydmFibGU8VHJhbnNsYXRpb24gfCBUcmFuc2xhdGlvbltdPiB7XG4gICAgbGV0IHJlc29sdmVkU2NvcGUgPSB0aGlzLnNjb3BlUmVzb2x2ZXIucmVzb2x2ZSh7IGlubGluZTogdGhpcy5pbmxpbmVTY29wZSwgcHJvdmlkZXI6IHByb3ZpZGVyU2NvcGUgfSk7XG4gICAgdGhpcy5wYXRoID0gdGhpcy5sYW5nUmVzb2x2ZXIucmVzb2x2ZUxhbmdQYXRoKGxhbmcsIHJlc29sdmVkU2NvcGUpO1xuICAgIGNvbnN0IGlubGluZUxvYWRlciA9IHJlc29sdmVJbmxpbmVMb2FkZXIocHJvdmlkZXJTY29wZSwgcmVzb2x2ZWRTY29wZSk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsb2NvU2VydmljZS5fbG9hZERlcGVuZGVuY2llcyh0aGlzLnBhdGgsIGlubGluZUxvYWRlcik7XG4gIH1cbn1cbiJdfQ==