rpx-xui-translation 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/rpx-xui-translation.umd.js +1 -1
- package/bundles/rpx-xui-translation.umd.js.map +1 -1
- package/bundles/rpx-xui-translation.umd.min.js +1 -1
- package/bundles/rpx-xui-translation.umd.min.js.map +1 -1
- package/esm2015/lib/rpx-translation.service.js +2 -2
- package/esm5/lib/rpx-translation.service.js +2 -2
- package/fesm2015/rpx-xui-translation.js +1 -1
- package/fesm2015/rpx-xui-translation.js.map +1 -1
- package/fesm5/rpx-xui-translation.js +1 -1
- package/fesm5/rpx-xui-translation.js.map +1 -1
- package/package.json +1 -1
|
@@ -272,6 +272,7 @@
|
|
|
272
272
|
this.phrases = {};
|
|
273
273
|
this.observables = {};
|
|
274
274
|
this.requesting = {};
|
|
275
|
+
this.languageSource = new rxjs.BehaviorSubject(this.currentLanguage);
|
|
275
276
|
var persistedLanguage = this.getPersistedLanguage();
|
|
276
277
|
if (persistedLanguage) {
|
|
277
278
|
this.language = persistedLanguage;
|
|
@@ -280,7 +281,6 @@
|
|
|
280
281
|
// no language persisted yet, save default
|
|
281
282
|
this.persistLanguage();
|
|
282
283
|
}
|
|
283
|
-
this.languageSource = new rxjs.BehaviorSubject(this.currentLanguage);
|
|
284
284
|
this.language$ = this.languageSource.asObservable();
|
|
285
285
|
}
|
|
286
286
|
Object.defineProperty(RpxTranslationService.prototype, "language", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpx-xui-translation.umd.js","sources":["../../../node_modules/tslib/tslib.es6.js","ng://rpx-xui-translation/lib/rpx-translation.config.ts","ng://rpx-xui-translation/lib/db.ts","ng://rpx-xui-translation/lib/rpx-translation.service.ts","ng://rpx-xui-translation/lib/rpx-translate.pipe.ts","ng://rpx-xui-translation/lib/rpx-translation.module.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export type ValidityDurationSpec = {\n years?: number;\n quarters?: number;\n months?: number;\n weeks?: number;\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n};\n\nexport class RpxTranslationConfig {\n validity: ValidityDurationSpec;\n baseUrl: string;\n\n debounceTimeMs = 300;\n testMode = false;\n}\n","import Dexie, { Table } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { RpxLanguage } from './rpx-language.enum';\n\nexport class Translation {\n id?: number;\n phrase: string;\n lang: RpxLanguage;\n translation: string;\n validity: string;\n\n public static create(phrase: string, lang: RpxLanguage, translation: string, validity: string): Translation {\n const t = new Translation();\n t.phrase = phrase;\n t.lang = lang;\n t.translation = translation;\n t.validity = validity;\n return t;\n }\n\n isExpired(): boolean {\n return DateTime.fromISO(this.validity) < DateTime.now();\n }\n}\n\nexport class TranslationDB extends Dexie {\n translations: Table<Translation, number>;\n\n constructor() {\n super('RpxTranslations');\n this.version(1).stores({\n translations: '++id, [phrase+lang]'\n });\n this.translations.mapToClass(Translation);\n }\n}\n\nexport const db = new TranslationDB();\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { liveQuery } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { BehaviorSubject, from, Observable, of, Subscription, timer } from 'rxjs';\nimport { catchError, map, tap } from 'rxjs/operators';\nimport { db, Translation } from './db';\nimport { RpxLanguage } from './rpx-language.enum';\nimport { RpxTranslationConfig } from './rpx-translation.config';\n\ninterface TranslationsDTO {\n translations: { [from: string]: string };\n}\n\nexport type Replacements = { [key: string]: string };\n\n@Injectable()\nexport class RpxTranslationService {\n\n private currentLanguage: RpxLanguage = 'en';\n private languageKey = 'exui-preferred-language';\n\n private phrases: { [phrase: string]: BehaviorSubject<string>} = {};\n private observables: { [phrase: string]: Observable<string>} = {};\n private requesting: { [lang: string]: string[] } = {};\n private requestTimerSubscription: Subscription | null;\n private languageSource: BehaviorSubject<RpxLanguage>;\n public language$: Observable<RpxLanguage>;\n\n public set language(lang: RpxLanguage) {\n if (lang !== this.currentLanguage) {\n this.currentLanguage = lang;\n this.persistLanguage();\n this.languageSource.next(lang);\n Object.keys(this.phrases).forEach(phrase => this.translate(phrase));\n }\n }\n\n public get language(): RpxLanguage {\n return this.currentLanguage;\n }\n\n constructor(\n private config: RpxTranslationConfig,\n private http: HttpClient\n ) {\n const persistedLanguage = this.getPersistedLanguage();\n if (persistedLanguage) {\n this.language = persistedLanguage;\n } else {\n // no language persisted yet, save default\n this.persistLanguage();\n }\n this.languageSource = new BehaviorSubject<RpxLanguage>(this.currentLanguage);\n this.language$ = this.languageSource.asObservable();\n }\n\n public getTranslation(phrase: string): Observable<string> {\n if (this.observables.hasOwnProperty(phrase)) {\n return this.observables[phrase];\n }\n\n return this.translate(phrase);\n }\n\n public getTranslationWithReplacements(phrase: string, replacements: Replacements): Observable<string> {\n return this.getTranslation(phrase).pipe(\n map(translation => this.replacePlaceholders(translation, replacements))\n );\n }\n\n public translate(phrase: string): Observable<string> {\n const lang = this.language;\n if (!this.phrases.hasOwnProperty(phrase)) {\n this.phrases[phrase] = new BehaviorSubject<string>(phrase);\n this.observables[phrase] = this.phrases[phrase].asObservable();\n }\n\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n } else {\n from(liveQuery(() => db.translations.where('[phrase+lang]').equals([phrase, lang]).first())).pipe(\n tap(t => {\n if (t && !t.isExpired()) {\n this.phrases[phrase].next(t.translation);\n } else {\n if (t) {\n // expired, clean up DB\n db.translations.delete(t.id!);\n }\n this.phrases[phrase].next(`${phrase} [Translation in progress]`);\n this.load(phrase, lang);\n }\n })\n ).subscribe(() => {});\n }\n\n return this.observables[phrase];\n }\n\n public replacePlaceholders(input: string, replacements: Replacements): string {\n Object.keys(replacements).forEach(key => {\n // Ideally use replaceAll here, but that isn't fully compatible with targeted browsers and packaging yet\n const search = `%${key}%`;\n while (input.indexOf(search) !== -1) {\n input = input.replace(search, replacements[key]);\n }\n });\n return input;\n }\n\n private load(phrase: string, lang: RpxLanguage): void {\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n return;\n }\n\n if (!this.requesting.hasOwnProperty(lang)) {\n this.requesting[lang] = [];\n }\n\n if (this.requesting[lang].indexOf(phrase) !== -1) {\n return;\n }\n\n this.requesting[lang].push(phrase);\n\n if (this.requestTimerSubscription) {\n this.requestTimerSubscription.unsubscribe();\n }\n\n this.requestTimerSubscription = timer(this.config.debounceTimeMs).subscribe(() => {\n const url = this.config.baseUrl + `/${lang}`;\n const s = this.http.post<TranslationsDTO>(url, { phrases: this.requesting[lang] }).pipe(\n map(t => t.translations),\n catchError(() => {\n const translations: { [from: string]: string } = {};\n this.requesting[lang].forEach(p => translations[p] = this.config.testMode ? `[Test translation for ${p}]` : p);\n return of(translations);\n })\n ).subscribe(translations => {\n const toAdd: Translation[] = [];\n Object.keys(translations).forEach(p => {\n toAdd.push(Translation.create(p, lang, translations[p], DateTime.now().plus(this.config.validity).toISO()));\n this.phrases[p].next(translations[p]);\n });\n db.translations.bulkAdd(toAdd);\n this.requesting[lang] = [];\n this.requestTimerSubscription!.unsubscribe();\n this.requestTimerSubscription = null;\n s.unsubscribe();\n });\n });\n }\n\n private persistLanguage(): void {\n document.cookie = `${this.languageKey}=${this.currentLanguage};`;\n }\n\n private getPersistedLanguage(): RpxLanguage {\n return document.cookie.split(';').find(cookie => cookie.trim().startsWith(this.languageKey + '='))?.split('=')[1].trim() as RpxLanguage;\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectorRef, Pipe, PipeTransform } from '@angular/core';\nimport { Observable, Subscribable } from 'rxjs';\nimport { RpxTranslationService, Replacements } from './rpx-translation.service';\n\n@Pipe({\n name: 'rpxTranslate',\n pure: false\n})\nexport class RpxTranslatePipe extends AsyncPipe implements PipeTransform {\n\n constructor(\n private translationService: RpxTranslationService,\n ref: ChangeDetectorRef\n ) {\n super(ref);\n }\n\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>): T|null;\n transform<T>(obj: null|undefined): null;\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>|null|undefined): T|null;\n transform<T = string>(value: T): T|null;\n transform<T = string>(value: T, replacements?: Replacements | null): T|null {\n if (typeof value === 'string') {\n let o: Observable<string>;\n if (replacements) {\n o = this.translationService.getTranslationWithReplacements(value, replacements);\n } else {\n o = this.translationService.getTranslation(value);\n }\n const ret = super.transform<string>(o);\n return ret as unknown as T;\n }\n return null;\n }\n\n}\n","import { HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RpxTranslatePipe } from './rpx-translate.pipe';\nimport { RpxTranslationConfig } from './rpx-translation.config';\nimport { RpxTranslationService } from './rpx-translation.service';\n\n@NgModule({\n declarations: [RpxTranslatePipe],\n imports: [HttpClientModule],\n exports: [RpxTranslatePipe]\n})\nexport class RpxTranslationModule {\n\n public static forRoot(config: RpxTranslationConfig): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule,\n providers: [\n {\n provide: RpxTranslationConfig, useValue: config\n },\n RpxTranslationService\n ]\n };\n }\n\n public static forChild(): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule\n };\n }\n}\n"],"names":["DateTime","Dexie","BehaviorSubject","map","from","liveQuery","tap","timer","catchError","of","HttpClient","Injectable","ChangeDetectorRef","Pipe","AsyncPipe","NgModule","HttpClientModule"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rpx-xui-translation.umd.js","sources":["../../../node_modules/tslib/tslib.es6.js","ng://rpx-xui-translation/lib/rpx-translation.config.ts","ng://rpx-xui-translation/lib/db.ts","ng://rpx-xui-translation/lib/rpx-translation.service.ts","ng://rpx-xui-translation/lib/rpx-translate.pipe.ts","ng://rpx-xui-translation/lib/rpx-translation.module.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export type ValidityDurationSpec = {\n years?: number;\n quarters?: number;\n months?: number;\n weeks?: number;\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n};\n\nexport class RpxTranslationConfig {\n validity: ValidityDurationSpec;\n baseUrl: string;\n\n debounceTimeMs = 300;\n testMode = false;\n}\n","import Dexie, { Table } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { RpxLanguage } from './rpx-language.enum';\n\nexport class Translation {\n id?: number;\n phrase: string;\n lang: RpxLanguage;\n translation: string;\n validity: string;\n\n public static create(phrase: string, lang: RpxLanguage, translation: string, validity: string): Translation {\n const t = new Translation();\n t.phrase = phrase;\n t.lang = lang;\n t.translation = translation;\n t.validity = validity;\n return t;\n }\n\n isExpired(): boolean {\n return DateTime.fromISO(this.validity) < DateTime.now();\n }\n}\n\nexport class TranslationDB extends Dexie {\n translations: Table<Translation, number>;\n\n constructor() {\n super('RpxTranslations');\n this.version(1).stores({\n translations: '++id, [phrase+lang]'\n });\n this.translations.mapToClass(Translation);\n }\n}\n\nexport const db = new TranslationDB();\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { liveQuery } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { BehaviorSubject, from, Observable, of, Subscription, timer } from 'rxjs';\nimport { catchError, map, tap } from 'rxjs/operators';\nimport { db, Translation } from './db';\nimport { RpxLanguage } from './rpx-language.enum';\nimport { RpxTranslationConfig } from './rpx-translation.config';\n\ninterface TranslationsDTO {\n translations: { [from: string]: string };\n}\n\nexport type Replacements = { [key: string]: string };\n\n@Injectable()\nexport class RpxTranslationService {\n\n private currentLanguage: RpxLanguage = 'en';\n private languageKey = 'exui-preferred-language';\n\n private phrases: { [phrase: string]: BehaviorSubject<string>} = {};\n private observables: { [phrase: string]: Observable<string>} = {};\n private requesting: { [lang: string]: string[] } = {};\n private requestTimerSubscription: Subscription | null;\n private languageSource: BehaviorSubject<RpxLanguage> = new BehaviorSubject<RpxLanguage>(this.currentLanguage);\n public language$: Observable<RpxLanguage>;\n\n public set language(lang: RpxLanguage) {\n if (lang !== this.currentLanguage) {\n this.currentLanguage = lang;\n this.persistLanguage();\n this.languageSource.next(lang);\n Object.keys(this.phrases).forEach(phrase => this.translate(phrase));\n }\n }\n\n public get language(): RpxLanguage {\n return this.currentLanguage;\n }\n\n constructor(\n private config: RpxTranslationConfig,\n private http: HttpClient\n ) {\n const persistedLanguage = this.getPersistedLanguage();\n if (persistedLanguage) {\n this.language = persistedLanguage;\n } else {\n // no language persisted yet, save default\n this.persistLanguage();\n }\n this.language$ = this.languageSource.asObservable();\n }\n\n public getTranslation(phrase: string): Observable<string> {\n if (this.observables.hasOwnProperty(phrase)) {\n return this.observables[phrase];\n }\n\n return this.translate(phrase);\n }\n\n public getTranslationWithReplacements(phrase: string, replacements: Replacements): Observable<string> {\n return this.getTranslation(phrase).pipe(\n map(translation => this.replacePlaceholders(translation, replacements))\n );\n }\n\n public translate(phrase: string): Observable<string> {\n const lang = this.language;\n if (!this.phrases.hasOwnProperty(phrase)) {\n this.phrases[phrase] = new BehaviorSubject<string>(phrase);\n this.observables[phrase] = this.phrases[phrase].asObservable();\n }\n\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n } else {\n from(liveQuery(() => db.translations.where('[phrase+lang]').equals([phrase, lang]).first())).pipe(\n tap(t => {\n if (t && !t.isExpired()) {\n this.phrases[phrase].next(t.translation);\n } else {\n if (t) {\n // expired, clean up DB\n db.translations.delete(t.id!);\n }\n this.phrases[phrase].next(`${phrase} [Translation in progress]`);\n this.load(phrase, lang);\n }\n })\n ).subscribe(() => {});\n }\n\n return this.observables[phrase];\n }\n\n public replacePlaceholders(input: string, replacements: Replacements): string {\n Object.keys(replacements).forEach(key => {\n // Ideally use replaceAll here, but that isn't fully compatible with targeted browsers and packaging yet\n const search = `%${key}%`;\n while (input.indexOf(search) !== -1) {\n input = input.replace(search, replacements[key]);\n }\n });\n return input;\n }\n\n private load(phrase: string, lang: RpxLanguage): void {\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n return;\n }\n\n if (!this.requesting.hasOwnProperty(lang)) {\n this.requesting[lang] = [];\n }\n\n if (this.requesting[lang].indexOf(phrase) !== -1) {\n return;\n }\n\n this.requesting[lang].push(phrase);\n\n if (this.requestTimerSubscription) {\n this.requestTimerSubscription.unsubscribe();\n }\n\n this.requestTimerSubscription = timer(this.config.debounceTimeMs).subscribe(() => {\n const url = this.config.baseUrl + `/${lang}`;\n const s = this.http.post<TranslationsDTO>(url, { phrases: this.requesting[lang] }).pipe(\n map(t => t.translations),\n catchError(() => {\n const translations: { [from: string]: string } = {};\n this.requesting[lang].forEach(p => translations[p] = this.config.testMode ? `[Test translation for ${p}]` : p);\n return of(translations);\n })\n ).subscribe(translations => {\n const toAdd: Translation[] = [];\n Object.keys(translations).forEach(p => {\n toAdd.push(Translation.create(p, lang, translations[p], DateTime.now().plus(this.config.validity).toISO()));\n this.phrases[p].next(translations[p]);\n });\n db.translations.bulkAdd(toAdd);\n this.requesting[lang] = [];\n this.requestTimerSubscription!.unsubscribe();\n this.requestTimerSubscription = null;\n s.unsubscribe();\n });\n });\n }\n\n private persistLanguage(): void {\n document.cookie = `${this.languageKey}=${this.currentLanguage};`;\n }\n\n private getPersistedLanguage(): RpxLanguage {\n return document.cookie.split(';').find(cookie => cookie.trim().startsWith(this.languageKey + '='))?.split('=')[1].trim() as RpxLanguage;\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectorRef, Pipe, PipeTransform } from '@angular/core';\nimport { Observable, Subscribable } from 'rxjs';\nimport { RpxTranslationService, Replacements } from './rpx-translation.service';\n\n@Pipe({\n name: 'rpxTranslate',\n pure: false\n})\nexport class RpxTranslatePipe extends AsyncPipe implements PipeTransform {\n\n constructor(\n private translationService: RpxTranslationService,\n ref: ChangeDetectorRef\n ) {\n super(ref);\n }\n\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>): T|null;\n transform<T>(obj: null|undefined): null;\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>|null|undefined): T|null;\n transform<T = string>(value: T): T|null;\n transform<T = string>(value: T, replacements?: Replacements | null): T|null {\n if (typeof value === 'string') {\n let o: Observable<string>;\n if (replacements) {\n o = this.translationService.getTranslationWithReplacements(value, replacements);\n } else {\n o = this.translationService.getTranslation(value);\n }\n const ret = super.transform<string>(o);\n return ret as unknown as T;\n }\n return null;\n }\n\n}\n","import { HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RpxTranslatePipe } from './rpx-translate.pipe';\nimport { RpxTranslationConfig } from './rpx-translation.config';\nimport { RpxTranslationService } from './rpx-translation.service';\n\n@NgModule({\n declarations: [RpxTranslatePipe],\n imports: [HttpClientModule],\n exports: [RpxTranslatePipe]\n})\nexport class RpxTranslationModule {\n\n public static forRoot(config: RpxTranslationConfig): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule,\n providers: [\n {\n provide: RpxTranslationConfig, useValue: config\n },\n RpxTranslationService\n ]\n };\n }\n\n public static forChild(): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule\n };\n }\n}\n"],"names":["DateTime","Dexie","BehaviorSubject","map","from","liveQuery","tap","timer","catchError","of","HttpClient","Injectable","ChangeDetectorRef","Pipe","AsyncPipe","NgModule","HttpClientModule"],"mappings":"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"}
|
|
@@ -12,5 +12,5 @@
|
|
|
12
12
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
13
13
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
14
14
|
PERFORMANCE OF THIS SOFTWARE.
|
|
15
|
-
***************************************************************************** */function p(e,t){function r(){this.constructor=e}c(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}function l(e,t,r,n){var i,s=arguments.length,o=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,r):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,n);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(o=(s<3?i(o):s>3?i(t,r,o):i(t,r))||o);return s>3&&o&&Object.defineProperty(t,r,o),o}var f=function(){this.debounceTimeMs=300,this.testMode=!1},h=function(){function e(){}return e.create=function(t,r,n,i){var s=new e;return s.phrase=t,s.lang=r,s.translation=n,s.validity=i,s},e.prototype.isExpired=function(){return i.DateTime.fromISO(this.validity)<i.DateTime.now()},e}(),g=new(function(e){function t(){var t=e.call(this,"RpxTranslations")||this;return t.version(1).stores({translations:"++id, [phrase+lang]"}),t.translations.mapToClass(h),t}return p(t,e),t}(u)),d=function(){function e(e,t){this.config=e,this.http=t,this.currentLanguage="en",this.languageKey="exui-preferred-language",this.phrases={},this.observables={},this.requesting={};var r=this.getPersistedLanguage();r?this.language=r:this.persistLanguage(),this.
|
|
15
|
+
***************************************************************************** */function p(e,t){function r(){this.constructor=e}c(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}function l(e,t,r,n){var i,s=arguments.length,o=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,r):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,n);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(o=(s<3?i(o):s>3?i(t,r,o):i(t,r))||o);return s>3&&o&&Object.defineProperty(t,r,o),o}var f=function(){this.debounceTimeMs=300,this.testMode=!1},h=function(){function e(){}return e.create=function(t,r,n,i){var s=new e;return s.phrase=t,s.lang=r,s.translation=n,s.validity=i,s},e.prototype.isExpired=function(){return i.DateTime.fromISO(this.validity)<i.DateTime.now()},e}(),g=new(function(e){function t(){var t=e.call(this,"RpxTranslations")||this;return t.version(1).stores({translations:"++id, [phrase+lang]"}),t.translations.mapToClass(h),t}return p(t,e),t}(u)),d=function(){function e(e,t){this.config=e,this.http=t,this.currentLanguage="en",this.languageKey="exui-preferred-language",this.phrases={},this.observables={},this.requesting={},this.languageSource=new s.BehaviorSubject(this.currentLanguage);var r=this.getPersistedLanguage();r?this.language=r:this.persistLanguage(),this.language$=this.languageSource.asObservable()}return Object.defineProperty(e.prototype,"language",{get:function(){return this.currentLanguage},set:function(e){var t=this;e!==this.currentLanguage&&(this.currentLanguage=e,this.persistLanguage(),this.languageSource.next(e),Object.keys(this.phrases).forEach((function(e){return t.translate(e)})))},enumerable:!0,configurable:!0}),e.prototype.getTranslation=function(e){return this.observables.hasOwnProperty(e)?this.observables[e]:this.translate(e)},e.prototype.getTranslationWithReplacements=function(e,t){var r=this;return this.getTranslation(e).pipe(o.map((function(e){return r.replacePlaceholders(e,t)})))},e.prototype.translate=function(e){var t=this,r=this.language;return this.phrases.hasOwnProperty(e)||(this.phrases[e]=new s.BehaviorSubject(e),this.observables[e]=this.phrases[e].asObservable()),"en"===r?this.phrases[e].next(e):s.from(n.liveQuery((function(){return g.translations.where("[phrase+lang]").equals([e,r]).first()}))).pipe(o.tap((function(n){n&&!n.isExpired()?t.phrases[e].next(n.translation):(n&&g.translations.delete(n.id),t.phrases[e].next(e+" [Translation in progress]"),t.load(e,r))}))).subscribe((function(){})),this.observables[e]},e.prototype.replacePlaceholders=function(e,t){return Object.keys(t).forEach((function(r){for(var n="%"+r+"%";-1!==e.indexOf(n);)e=e.replace(n,t[r])})),e},e.prototype.load=function(e,t){var r=this;"en"!==t?(this.requesting.hasOwnProperty(t)||(this.requesting[t]=[]),-1===this.requesting[t].indexOf(e)&&(this.requesting[t].push(e),this.requestTimerSubscription&&this.requestTimerSubscription.unsubscribe(),this.requestTimerSubscription=s.timer(this.config.debounceTimeMs).subscribe((function(){var e=r.config.baseUrl+"/"+t,n=r.http.post(e,{phrases:r.requesting[t]}).pipe(o.map((function(e){return e.translations})),o.catchError((function(){var e={};return r.requesting[t].forEach((function(t){return e[t]=r.config.testMode?"[Test translation for "+t+"]":t})),s.of(e)}))).subscribe((function(e){var s=[];Object.keys(e).forEach((function(n){s.push(h.create(n,t,e[n],i.DateTime.now().plus(r.config.validity).toISO())),r.phrases[n].next(e[n])})),g.translations.bulkAdd(s),r.requesting[t]=[],r.requestTimerSubscription.unsubscribe(),r.requestTimerSubscription=null,n.unsubscribe()}))})))):this.phrases[e].next(e)},e.prototype.persistLanguage=function(){document.cookie=this.languageKey+"="+this.currentLanguage+";"},e.prototype.getPersistedLanguage=function(){var e,t=this;return null===(e=document.cookie.split(";").find((function(e){return e.trim().startsWith(t.languageKey+"=")})))||void 0===e?void 0:e.split("=")[1].trim()},e.ctorParameters=function(){return[{type:f},{type:t.HttpClient}]},e=l([r.Injectable()],e)}(),b=function(e){function t(t,r){var n=e.call(this,r)||this;return n.translationService=t,n}return p(t,e),t.prototype.transform=function(t,r){if("string"==typeof t){var n=void 0;return n=r?this.translationService.getTranslationWithReplacements(t,r):this.translationService.getTranslation(t),e.prototype.transform.call(this,n)}return null},t.ctorParameters=function(){return[{type:d},{type:r.ChangeDetectorRef}]},t=l([r.Pipe({name:"rpxTranslate",pure:!1})],t)}(a.AsyncPipe),y=function(){function e(){}var n;return n=e,e.forRoot=function(e){return{ngModule:n,providers:[{provide:f,useValue:e},d]}},e.forChild=function(){return{ngModule:n}},e=n=l([r.NgModule({declarations:[b],imports:[t.HttpClientModule],exports:[b]})],e)}();e.RpxTranslatePipe=b,e.RpxTranslationConfig=f,e.RpxTranslationModule=y,e.RpxTranslationService=d,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
16
16
|
//# sourceMappingURL=rpx-xui-translation.umd.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://rpx-xui-translation/lib/rpx-translation.config.ts","ng://rpx-xui-translation/lib/db.ts","ng://rpx-xui-translation/lib/rpx-translation.service.ts","ng://rpx-xui-translation/lib/rpx-translate.pipe.ts","ng://rpx-xui-translation/lib/rpx-translation.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","debounceTimeMs","testMode","Translation","phrase","lang","translation","validity","t","isExpired","DateTime","fromISO","now","db","_super","TranslationDB","_this","call","version","stores","translations","mapToClass","Dexie","RpxTranslationService","config","http","currentLanguage","languageKey","phrases","observables","requesting","persistedLanguage","getPersistedLanguage","language","persistLanguage","languageSource","BehaviorSubject","language$","asObservable","next","keys","forEach","translate","getTranslation","getTranslationWithReplacements","replacements","pipe","map","replacePlaceholders","from","liveQuery","where","equals","first","tap","delete","id","load","subscribe","input","search","indexOf","replace","push","requestTimerSubscription","unsubscribe","timer","url","baseUrl","s","post","catchError","of","toAdd","plus","toISO","bulkAdd","document","cookie","_a","split","find","trim","startsWith","RpxTranslationConfig","HttpClient","Injectable","RpxTranslatePipe","translationService","ref","transform","value","o","ChangeDetectorRef","Pipe","name","pure","AsyncPipe","RpxTranslationModule","forRoot","ngModule","RpxTranslationModule_1","providers","provide","useValue","forChild","NgModule","declarations","imports","HttpClientModule","exports"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export type ValidityDurationSpec = {\n years?: number;\n quarters?: number;\n months?: number;\n weeks?: number;\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n};\n\nexport class RpxTranslationConfig {\n validity: ValidityDurationSpec;\n baseUrl: string;\n\n debounceTimeMs = 300;\n testMode = false;\n}\n","import Dexie, { Table } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { RpxLanguage } from './rpx-language.enum';\n\nexport class Translation {\n id?: number;\n phrase: string;\n lang: RpxLanguage;\n translation: string;\n validity: string;\n\n public static create(phrase: string, lang: RpxLanguage, translation: string, validity: string): Translation {\n const t = new Translation();\n t.phrase = phrase;\n t.lang = lang;\n t.translation = translation;\n t.validity = validity;\n return t;\n }\n\n isExpired(): boolean {\n return DateTime.fromISO(this.validity) < DateTime.now();\n }\n}\n\nexport class TranslationDB extends Dexie {\n translations: Table<Translation, number>;\n\n constructor() {\n super('RpxTranslations');\n this.version(1).stores({\n translations: '++id, [phrase+lang]'\n });\n this.translations.mapToClass(Translation);\n }\n}\n\nexport const db = new TranslationDB();\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { liveQuery } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { BehaviorSubject, from, Observable, of, Subscription, timer } from 'rxjs';\nimport { catchError, map, tap } from 'rxjs/operators';\nimport { db, Translation } from './db';\nimport { RpxLanguage } from './rpx-language.enum';\nimport { RpxTranslationConfig } from './rpx-translation.config';\n\ninterface TranslationsDTO {\n translations: { [from: string]: string };\n}\n\nexport type Replacements = { [key: string]: string };\n\n@Injectable()\nexport class RpxTranslationService {\n\n private currentLanguage: RpxLanguage = 'en';\n private languageKey = 'exui-preferred-language';\n\n private phrases: { [phrase: string]: BehaviorSubject<string>} = {};\n private observables: { [phrase: string]: Observable<string>} = {};\n private requesting: { [lang: string]: string[] } = {};\n private requestTimerSubscription: Subscription | null;\n private languageSource: BehaviorSubject<RpxLanguage>;\n public language$: Observable<RpxLanguage>;\n\n public set language(lang: RpxLanguage) {\n if (lang !== this.currentLanguage) {\n this.currentLanguage = lang;\n this.persistLanguage();\n this.languageSource.next(lang);\n Object.keys(this.phrases).forEach(phrase => this.translate(phrase));\n }\n }\n\n public get language(): RpxLanguage {\n return this.currentLanguage;\n }\n\n constructor(\n private config: RpxTranslationConfig,\n private http: HttpClient\n ) {\n const persistedLanguage = this.getPersistedLanguage();\n if (persistedLanguage) {\n this.language = persistedLanguage;\n } else {\n // no language persisted yet, save default\n this.persistLanguage();\n }\n this.languageSource = new BehaviorSubject<RpxLanguage>(this.currentLanguage);\n this.language$ = this.languageSource.asObservable();\n }\n\n public getTranslation(phrase: string): Observable<string> {\n if (this.observables.hasOwnProperty(phrase)) {\n return this.observables[phrase];\n }\n\n return this.translate(phrase);\n }\n\n public getTranslationWithReplacements(phrase: string, replacements: Replacements): Observable<string> {\n return this.getTranslation(phrase).pipe(\n map(translation => this.replacePlaceholders(translation, replacements))\n );\n }\n\n public translate(phrase: string): Observable<string> {\n const lang = this.language;\n if (!this.phrases.hasOwnProperty(phrase)) {\n this.phrases[phrase] = new BehaviorSubject<string>(phrase);\n this.observables[phrase] = this.phrases[phrase].asObservable();\n }\n\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n } else {\n from(liveQuery(() => db.translations.where('[phrase+lang]').equals([phrase, lang]).first())).pipe(\n tap(t => {\n if (t && !t.isExpired()) {\n this.phrases[phrase].next(t.translation);\n } else {\n if (t) {\n // expired, clean up DB\n db.translations.delete(t.id!);\n }\n this.phrases[phrase].next(`${phrase} [Translation in progress]`);\n this.load(phrase, lang);\n }\n })\n ).subscribe(() => {});\n }\n\n return this.observables[phrase];\n }\n\n public replacePlaceholders(input: string, replacements: Replacements): string {\n Object.keys(replacements).forEach(key => {\n // Ideally use replaceAll here, but that isn't fully compatible with targeted browsers and packaging yet\n const search = `%${key}%`;\n while (input.indexOf(search) !== -1) {\n input = input.replace(search, replacements[key]);\n }\n });\n return input;\n }\n\n private load(phrase: string, lang: RpxLanguage): void {\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n return;\n }\n\n if (!this.requesting.hasOwnProperty(lang)) {\n this.requesting[lang] = [];\n }\n\n if (this.requesting[lang].indexOf(phrase) !== -1) {\n return;\n }\n\n this.requesting[lang].push(phrase);\n\n if (this.requestTimerSubscription) {\n this.requestTimerSubscription.unsubscribe();\n }\n\n this.requestTimerSubscription = timer(this.config.debounceTimeMs).subscribe(() => {\n const url = this.config.baseUrl + `/${lang}`;\n const s = this.http.post<TranslationsDTO>(url, { phrases: this.requesting[lang] }).pipe(\n map(t => t.translations),\n catchError(() => {\n const translations: { [from: string]: string } = {};\n this.requesting[lang].forEach(p => translations[p] = this.config.testMode ? `[Test translation for ${p}]` : p);\n return of(translations);\n })\n ).subscribe(translations => {\n const toAdd: Translation[] = [];\n Object.keys(translations).forEach(p => {\n toAdd.push(Translation.create(p, lang, translations[p], DateTime.now().plus(this.config.validity).toISO()));\n this.phrases[p].next(translations[p]);\n });\n db.translations.bulkAdd(toAdd);\n this.requesting[lang] = [];\n this.requestTimerSubscription!.unsubscribe();\n this.requestTimerSubscription = null;\n s.unsubscribe();\n });\n });\n }\n\n private persistLanguage(): void {\n document.cookie = `${this.languageKey}=${this.currentLanguage};`;\n }\n\n private getPersistedLanguage(): RpxLanguage {\n return document.cookie.split(';').find(cookie => cookie.trim().startsWith(this.languageKey + '='))?.split('=')[1].trim() as RpxLanguage;\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectorRef, Pipe, PipeTransform } from '@angular/core';\nimport { Observable, Subscribable } from 'rxjs';\nimport { RpxTranslationService, Replacements } from './rpx-translation.service';\n\n@Pipe({\n name: 'rpxTranslate',\n pure: false\n})\nexport class RpxTranslatePipe extends AsyncPipe implements PipeTransform {\n\n constructor(\n private translationService: RpxTranslationService,\n ref: ChangeDetectorRef\n ) {\n super(ref);\n }\n\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>): T|null;\n transform<T>(obj: null|undefined): null;\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>|null|undefined): T|null;\n transform<T = string>(value: T): T|null;\n transform<T = string>(value: T, replacements?: Replacements | null): T|null {\n if (typeof value === 'string') {\n let o: Observable<string>;\n if (replacements) {\n o = this.translationService.getTranslationWithReplacements(value, replacements);\n } else {\n o = this.translationService.getTranslation(value);\n }\n const ret = super.transform<string>(o);\n return ret as unknown as T;\n }\n return null;\n }\n\n}\n","import { HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RpxTranslatePipe } from './rpx-translate.pipe';\nimport { RpxTranslationConfig } from './rpx-translation.config';\nimport { RpxTranslationService } from './rpx-translation.service';\n\n@NgModule({\n declarations: [RpxTranslatePipe],\n imports: [HttpClientModule],\n exports: [RpxTranslatePipe]\n})\nexport class RpxTranslationModule {\n\n public static forRoot(config: RpxTranslationConfig): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule,\n providers: [\n {\n provide: RpxTranslationConfig, useValue: config\n },\n RpxTranslationService\n ]\n };\n }\n\n public static forChild(): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://rpx-xui-translation/lib/rpx-translation.config.ts","ng://rpx-xui-translation/lib/db.ts","ng://rpx-xui-translation/lib/rpx-translation.service.ts","ng://rpx-xui-translation/lib/rpx-translate.pipe.ts","ng://rpx-xui-translation/lib/rpx-translation.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","debounceTimeMs","testMode","Translation","phrase","lang","translation","validity","t","isExpired","DateTime","fromISO","now","db","_super","TranslationDB","_this","call","version","stores","translations","mapToClass","Dexie","RpxTranslationService","config","http","currentLanguage","languageKey","phrases","observables","requesting","languageSource","BehaviorSubject","persistedLanguage","getPersistedLanguage","language","persistLanguage","language$","asObservable","next","keys","forEach","translate","getTranslation","getTranslationWithReplacements","replacements","pipe","map","replacePlaceholders","from","liveQuery","where","equals","first","tap","delete","id","load","subscribe","input","search","indexOf","replace","push","requestTimerSubscription","unsubscribe","timer","url","baseUrl","s","post","catchError","of","toAdd","plus","toISO","bulkAdd","document","cookie","_a","split","find","trim","startsWith","RpxTranslationConfig","HttpClient","Injectable","RpxTranslatePipe","translationService","ref","transform","value","o","ChangeDetectorRef","Pipe","name","pure","AsyncPipe","RpxTranslationModule","forRoot","ngModule","RpxTranslationModule_1","providers","provide","useValue","forChild","NgModule","declarations","imports","HttpClientModule","exports"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export type ValidityDurationSpec = {\n years?: number;\n quarters?: number;\n months?: number;\n weeks?: number;\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n};\n\nexport class RpxTranslationConfig {\n validity: ValidityDurationSpec;\n baseUrl: string;\n\n debounceTimeMs = 300;\n testMode = false;\n}\n","import Dexie, { Table } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { RpxLanguage } from './rpx-language.enum';\n\nexport class Translation {\n id?: number;\n phrase: string;\n lang: RpxLanguage;\n translation: string;\n validity: string;\n\n public static create(phrase: string, lang: RpxLanguage, translation: string, validity: string): Translation {\n const t = new Translation();\n t.phrase = phrase;\n t.lang = lang;\n t.translation = translation;\n t.validity = validity;\n return t;\n }\n\n isExpired(): boolean {\n return DateTime.fromISO(this.validity) < DateTime.now();\n }\n}\n\nexport class TranslationDB extends Dexie {\n translations: Table<Translation, number>;\n\n constructor() {\n super('RpxTranslations');\n this.version(1).stores({\n translations: '++id, [phrase+lang]'\n });\n this.translations.mapToClass(Translation);\n }\n}\n\nexport const db = new TranslationDB();\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { liveQuery } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { BehaviorSubject, from, Observable, of, Subscription, timer } from 'rxjs';\nimport { catchError, map, tap } from 'rxjs/operators';\nimport { db, Translation } from './db';\nimport { RpxLanguage } from './rpx-language.enum';\nimport { RpxTranslationConfig } from './rpx-translation.config';\n\ninterface TranslationsDTO {\n translations: { [from: string]: string };\n}\n\nexport type Replacements = { [key: string]: string };\n\n@Injectable()\nexport class RpxTranslationService {\n\n private currentLanguage: RpxLanguage = 'en';\n private languageKey = 'exui-preferred-language';\n\n private phrases: { [phrase: string]: BehaviorSubject<string>} = {};\n private observables: { [phrase: string]: Observable<string>} = {};\n private requesting: { [lang: string]: string[] } = {};\n private requestTimerSubscription: Subscription | null;\n private languageSource: BehaviorSubject<RpxLanguage> = new BehaviorSubject<RpxLanguage>(this.currentLanguage);\n public language$: Observable<RpxLanguage>;\n\n public set language(lang: RpxLanguage) {\n if (lang !== this.currentLanguage) {\n this.currentLanguage = lang;\n this.persistLanguage();\n this.languageSource.next(lang);\n Object.keys(this.phrases).forEach(phrase => this.translate(phrase));\n }\n }\n\n public get language(): RpxLanguage {\n return this.currentLanguage;\n }\n\n constructor(\n private config: RpxTranslationConfig,\n private http: HttpClient\n ) {\n const persistedLanguage = this.getPersistedLanguage();\n if (persistedLanguage) {\n this.language = persistedLanguage;\n } else {\n // no language persisted yet, save default\n this.persistLanguage();\n }\n this.language$ = this.languageSource.asObservable();\n }\n\n public getTranslation(phrase: string): Observable<string> {\n if (this.observables.hasOwnProperty(phrase)) {\n return this.observables[phrase];\n }\n\n return this.translate(phrase);\n }\n\n public getTranslationWithReplacements(phrase: string, replacements: Replacements): Observable<string> {\n return this.getTranslation(phrase).pipe(\n map(translation => this.replacePlaceholders(translation, replacements))\n );\n }\n\n public translate(phrase: string): Observable<string> {\n const lang = this.language;\n if (!this.phrases.hasOwnProperty(phrase)) {\n this.phrases[phrase] = new BehaviorSubject<string>(phrase);\n this.observables[phrase] = this.phrases[phrase].asObservable();\n }\n\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n } else {\n from(liveQuery(() => db.translations.where('[phrase+lang]').equals([phrase, lang]).first())).pipe(\n tap(t => {\n if (t && !t.isExpired()) {\n this.phrases[phrase].next(t.translation);\n } else {\n if (t) {\n // expired, clean up DB\n db.translations.delete(t.id!);\n }\n this.phrases[phrase].next(`${phrase} [Translation in progress]`);\n this.load(phrase, lang);\n }\n })\n ).subscribe(() => {});\n }\n\n return this.observables[phrase];\n }\n\n public replacePlaceholders(input: string, replacements: Replacements): string {\n Object.keys(replacements).forEach(key => {\n // Ideally use replaceAll here, but that isn't fully compatible with targeted browsers and packaging yet\n const search = `%${key}%`;\n while (input.indexOf(search) !== -1) {\n input = input.replace(search, replacements[key]);\n }\n });\n return input;\n }\n\n private load(phrase: string, lang: RpxLanguage): void {\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n return;\n }\n\n if (!this.requesting.hasOwnProperty(lang)) {\n this.requesting[lang] = [];\n }\n\n if (this.requesting[lang].indexOf(phrase) !== -1) {\n return;\n }\n\n this.requesting[lang].push(phrase);\n\n if (this.requestTimerSubscription) {\n this.requestTimerSubscription.unsubscribe();\n }\n\n this.requestTimerSubscription = timer(this.config.debounceTimeMs).subscribe(() => {\n const url = this.config.baseUrl + `/${lang}`;\n const s = this.http.post<TranslationsDTO>(url, { phrases: this.requesting[lang] }).pipe(\n map(t => t.translations),\n catchError(() => {\n const translations: { [from: string]: string } = {};\n this.requesting[lang].forEach(p => translations[p] = this.config.testMode ? `[Test translation for ${p}]` : p);\n return of(translations);\n })\n ).subscribe(translations => {\n const toAdd: Translation[] = [];\n Object.keys(translations).forEach(p => {\n toAdd.push(Translation.create(p, lang, translations[p], DateTime.now().plus(this.config.validity).toISO()));\n this.phrases[p].next(translations[p]);\n });\n db.translations.bulkAdd(toAdd);\n this.requesting[lang] = [];\n this.requestTimerSubscription!.unsubscribe();\n this.requestTimerSubscription = null;\n s.unsubscribe();\n });\n });\n }\n\n private persistLanguage(): void {\n document.cookie = `${this.languageKey}=${this.currentLanguage};`;\n }\n\n private getPersistedLanguage(): RpxLanguage {\n return document.cookie.split(';').find(cookie => cookie.trim().startsWith(this.languageKey + '='))?.split('=')[1].trim() as RpxLanguage;\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectorRef, Pipe, PipeTransform } from '@angular/core';\nimport { Observable, Subscribable } from 'rxjs';\nimport { RpxTranslationService, Replacements } from './rpx-translation.service';\n\n@Pipe({\n name: 'rpxTranslate',\n pure: false\n})\nexport class RpxTranslatePipe extends AsyncPipe implements PipeTransform {\n\n constructor(\n private translationService: RpxTranslationService,\n ref: ChangeDetectorRef\n ) {\n super(ref);\n }\n\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>): T|null;\n transform<T>(obj: null|undefined): null;\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>|null|undefined): T|null;\n transform<T = string>(value: T): T|null;\n transform<T = string>(value: T, replacements?: Replacements | null): T|null {\n if (typeof value === 'string') {\n let o: Observable<string>;\n if (replacements) {\n o = this.translationService.getTranslationWithReplacements(value, replacements);\n } else {\n o = this.translationService.getTranslation(value);\n }\n const ret = super.transform<string>(o);\n return ret as unknown as T;\n }\n return null;\n }\n\n}\n","import { HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RpxTranslatePipe } from './rpx-translate.pipe';\nimport { RpxTranslationConfig } from './rpx-translation.config';\nimport { RpxTranslationService } from './rpx-translation.service';\n\n@NgModule({\n declarations: [RpxTranslatePipe],\n imports: [HttpClientModule],\n exports: [RpxTranslatePipe]\n})\nexport class RpxTranslationModule {\n\n public static forRoot(config: RpxTranslationConfig): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule,\n providers: [\n {\n provide: RpxTranslationConfig, useValue: config\n },\n RpxTranslationService\n ]\n };\n }\n\n public static forChild(): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule\n };\n }\n}\n"]}
|
|
@@ -16,6 +16,7 @@ let RpxTranslationService = class RpxTranslationService {
|
|
|
16
16
|
this.phrases = {};
|
|
17
17
|
this.observables = {};
|
|
18
18
|
this.requesting = {};
|
|
19
|
+
this.languageSource = new BehaviorSubject(this.currentLanguage);
|
|
19
20
|
const persistedLanguage = this.getPersistedLanguage();
|
|
20
21
|
if (persistedLanguage) {
|
|
21
22
|
this.language = persistedLanguage;
|
|
@@ -24,7 +25,6 @@ let RpxTranslationService = class RpxTranslationService {
|
|
|
24
25
|
// no language persisted yet, save default
|
|
25
26
|
this.persistLanguage();
|
|
26
27
|
}
|
|
27
|
-
this.languageSource = new BehaviorSubject(this.currentLanguage);
|
|
28
28
|
this.language$ = this.languageSource.asObservable();
|
|
29
29
|
}
|
|
30
30
|
set language(lang) {
|
|
@@ -134,4 +134,4 @@ RpxTranslationService = __decorate([
|
|
|
134
134
|
Injectable()
|
|
135
135
|
], RpxTranslationService);
|
|
136
136
|
export { RpxTranslationService };
|
|
137
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB4LXRyYW5zbGF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9ycHgteHVpLXRyYW5zbGF0aW9uLyIsInNvdXJjZXMiOlsibGliL3JweC10cmFuc2xhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFnQixLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFTaEUsSUFBYSxxQkFBcUIsR0FBbEMsTUFBYSxxQkFBcUI7SUF5QmhDLFlBQ1UsTUFBNEIsRUFDNUIsSUFBZ0I7UUFEaEIsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFDNUIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQXpCbEIsb0JBQWUsR0FBZ0IsSUFBSSxDQUFDO1FBQ3BDLGdCQUFXLEdBQUcseUJBQXlCLENBQUM7UUFFeEMsWUFBTyxHQUFpRCxFQUFFLENBQUM7UUFDM0QsZ0JBQVcsR0FBNEMsRUFBRSxDQUFDO1FBQzFELGVBQVUsR0FBaUMsRUFBRSxDQUFDO1FBc0JwRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3RELElBQUksaUJBQWlCLEVBQUU7WUFDckIsSUFBSSxD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SUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsQ0FBQywwQ0FBRSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQWlCLENBQUM7SUFDMUksQ0FBQztDQUNGLENBQUE7O1lBdkhtQixvQkFBb0I7WUFDdEIsVUFBVTs7QUEzQmYscUJBQXFCO0lBRGpDLFVBQVUsRUFBRTtHQUNBLHFCQUFxQixDQWlKakM7U0FqSlkscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGxpdmVRdWVyeSB9IGZyb20gJ2RleGllJztcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnbHV4b24nO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tLCBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9uLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBkYiwgVHJhbnNsYXRpb24gfSBmcm9tICcuL2RiJztcbmltcG9ydCB7IFJweExhbmd1YWdlIH0gZnJvbSAnLi9ycHgtbGFuZ3VhZ2UuZW51bSc7XG5pbXBvcnQgeyBScHhUcmFuc2xhdGlvbkNvbmZpZyB9IGZyb20gJy4vcnB4LXRyYW5zbGF0aW9uLmNvbmZpZyc7XG5cbmludGVyZmFjZSBUcmFuc2xhdGlvbnNEVE8ge1xuICB0cmFuc2xhdGlvbnM6IHsgW2Zyb206IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG5leHBvcnQgdHlwZSBSZXBsYWNlbWVudHMgPSB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUnB4VHJhbnNsYXRpb25TZXJ2aWNlIHtcblxuICBwcml2YXRlIGN1cnJlbnRMYW5ndWFnZTogUnB4TGFuZ3VhZ2UgPSAnZW4nO1xuICBwcml2YXRlIGxhbmd1YWdlS2V5ID0gJ2V4dWktcHJlZmVycmVkLWxhbmd1YWdlJztcblxuICBwcml2YXRlIHBocmFzZXM6IHsgW3BocmFzZTogc3RyaW5nXTogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz59ID0ge307XG4gIHByaXZhdGUgb2JzZXJ2YWJsZXM6IHsgW3BocmFzZTogc3RyaW5nXTogT2JzZXJ2YWJsZTxzdHJpbmc+fSA9IHt9O1xuICBwcml2YXRlIHJlcXVlc3Rpbmc6IHsgW2xhbmc6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7fTtcbiAgcHJpdmF0ZSByZXF1ZXN0VGltZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGw7XG4gIHByaXZhdGUgbGFuZ3VhZ2VTb3VyY2U6IEJlaGF2aW9yU3ViamVjdDxScHhMYW5ndWFnZT47XG4gIHB1YmxpYyBsYW5ndWFnZSQ6IE9ic2VydmFibGU8UnB4TGFuZ3VhZ2U+O1xuXG4gIHB1YmxpYyBzZXQgbGFuZ3VhZ2UobGFuZzogUnB4TGFuZ3VhZ2UpIHtcbiAgICBpZiAobGFuZyAhPT0gdGhpcy5jdXJyZW50TGFuZ3VhZ2UpIHtcbiAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlID0gbGFuZztcbiAgICAgIHRoaXMucGVyc2lzdExhbmd1YWdlKCk7XG4gICAgICB0aGlzLmxhbmd1YWdlU291cmNlLm5leHQobGFuZyk7XG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnBocmFzZXMpLmZvckVhY2gocGhyYXNlID0+IHRoaXMudHJhbnNsYXRlKHBocmFzZSkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgbGFuZ3VhZ2UoKTogUnB4TGFuZ3VhZ2Uge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRMYW5ndWFnZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29uZmlnOiBScHhUcmFuc2xhdGlvbkNvbmZpZyxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnRcbiAgKSB7XG4gICAgY29uc3QgcGVyc2lzdGVkTGFuZ3VhZ2UgPSB0aGlzLmdldFBlcnNpc3RlZExhbmd1YWdlKCk7XG4gICAgaWYgKHBlcnNpc3RlZExhbmd1YWdlKSB7XG4gICAgICB0aGlzLmxhbmd1YWdlID0gcGVyc2lzdGVkTGFuZ3VhZ2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG5vIGxhbmd1YWdlIHBlcnNpc3RlZCB5ZXQsIHNhdmUgZGVmYXVsdFxuICAgICAgdGhpcy5wZXJzaXN0TGFuZ3VhZ2UoKTtcbiAgICB9XG4gICAgdGhpcy5sYW5ndWFnZVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UnB4TGFuZ3VhZ2U+KHRoaXMuY3VycmVudExhbmd1YWdlKTtcbiAgICB0aGlzLmxhbmd1YWdlJCA9IHRoaXMubGFuZ3VhZ2VTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VHJhbnNsYXRpb24ocGhyYXNlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGlmICh0aGlzLm9ic2VydmFibGVzLmhhc093blByb3BlcnR5KHBocmFzZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLm9ic2VydmFibGVzW3BocmFzZV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlKHBocmFzZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VHJhbnNsYXRpb25XaXRoUmVwbGFjZW1lbnRzKHBocmFzZTogc3RyaW5nLCByZXBsYWNlbWVudHM6IFJlcGxhY2VtZW50cyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRpb24ocGhyYXNlKS5waXBlKFxuICAgICAgbWFwKHRyYW5zbGF0aW9uID0+IHRoaXMucmVwbGFjZVBsYWNlaG9sZGVycyh0cmFuc2xhdGlvbiwgcmVwbGFjZW1lbnRzKSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHRyYW5zbGF0ZShwaHJhc2U6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgY29uc3QgbGFuZyA9IHRoaXMubGFuZ3VhZ2U7XG4gICAgaWYgKCF0aGlzLnBocmFzZXMuaGFzT3duUHJvcGVydHkocGhyYXNlKSkge1xuICAgICAgdGhpcy5waHJhc2VzW3BocmFzZV0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4ocGhyYXNlKTtcbiAgICAgIHRoaXMub2JzZXJ2YWJsZXNbcGhyYXNlXSA9IHRoaXMucGhyYXNlc1twaHJhc2VdLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIGlmIChsYW5nID09PSAnZW4nKSB7XG4gICAgICB0aGlzLnBocmFzZXNbcGhyYXNlXS5uZXh0KHBocmFzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZyb20obGl2ZVF1ZXJ5KCgpID0+IGRiLnRyYW5zbGF0aW9ucy53aGVyZSgnW3BocmFzZStsYW5nXScpLmVxdWFscyhbcGhyYXNlLCBsYW5nXSkuZmlyc3QoKSkpLnBpcGUoXG4gICAgICAgIHRhcCh0ID0+IHtcbiAgICAgICAgICBpZiAodCAmJiAhdC5pc0V4cGlyZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5waHJhc2VzW3BocmFzZV0ubmV4dCh0LnRyYW5zbGF0aW9uKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHQpIHtcbiAgICAgICAgICAgICAgLy8gZXhwaXJlZCwgY2xlYW4gdXAgREJcbiAgICAgICAgICAgICAgZGIudHJhbnNsYXRpb25zLmRlbGV0ZSh0LmlkISk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBocmFzZXNbcGhyYXNlXS5uZXh0KGAke3BocmFzZX0gW1RyYW5zbGF0aW9uIGluIHByb2dyZXNzXWApO1xuICAgICAgICAgICAgdGhpcy5sb2FkKHBocmFzZSwgbGFuZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKS5zdWJzY3JpYmUoKCkgPT4ge30pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm9ic2VydmFibGVzW3BocmFzZV07XG4gIH1cblxuICBwdWJsaWMgcmVwbGFjZVBsYWNlaG9sZGVycyhpbnB1dDogc3RyaW5nLCByZXBsYWNlbWVudHM6IFJlcGxhY2VtZW50cyk6IHN0cmluZyB7XG4gICAgT2JqZWN0LmtleXMocmVwbGFjZW1lbnRzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAvLyBJZGVhbGx5IHVzZSByZXBsYWNlQWxsIGhlcmUsIGJ1dCB0aGF0IGlzbid0IGZ1bGx5IGNvbXBhdGlibGUgd2l0aCB0YXJnZXRlZCBicm93c2VycyBhbmQgcGFja2FnaW5nIHlldFxuICAgICAgY29uc3Qgc2VhcmNoID0gYCUke2tleX0lYDtcbiAgICAgIHdoaWxlIChpbnB1dC5pbmRleE9mKHNlYXJjaCkgIT09IC0xKSB7XG4gICAgICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZShzZWFyY2gsIHJlcGxhY2VtZW50c1trZXldKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cblxuICBwcml2YXRlIGxvYWQocGhyYXNlOiBzdHJpbmcsIGxhbmc6IFJweExhbmd1YWdlKTogdm9pZCB7XG4gICAgaWYgKGxhbmcgPT09ICdlbicpIHtcbiAgICAgIHRoaXMucGhyYXNlc1twaHJhc2VdLm5leHQocGhyYXNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucmVxdWVzdGluZy5oYXNPd25Qcm9wZXJ0eShsYW5nKSkge1xuICAgICAgdGhpcy5yZXF1ZXN0aW5nW2xhbmddID0gW107XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVxdWVzdGluZ1tsYW5nXS5pbmRleE9mKHBocmFzZSkgIT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yZXF1ZXN0aW5nW2xhbmddLnB1c2gocGhyYXNlKTtcblxuICAgIGlmICh0aGlzLnJlcXVlc3RUaW1lclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5yZXF1ZXN0VGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlcXVlc3RUaW1lclN1YnNjcmlwdGlvbiA9IHRpbWVyKHRoaXMuY29uZmlnLmRlYm91bmNlVGltZU1zKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gdGhpcy5jb25maWcuYmFzZVVybCArIGAvJHtsYW5nfWA7XG4gICAgICBjb25zdCBzID0gdGhpcy5odHRwLnBvc3Q8VHJhbnNsYXRpb25zRFRPPih1cmwsIHsgcGhyYXNlczogdGhpcy5yZXF1ZXN0aW5nW2xhbmddIH0pLnBpcGUoXG4gICAgICAgIG1hcCh0ID0+IHQudHJhbnNsYXRpb25zKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHJhbnNsYXRpb25zOiB7IFtmcm9tOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgICAgICAgIHRoaXMucmVxdWVzdGluZ1tsYW5nXS5mb3JFYWNoKHAgPT4gdHJhbnNsYXRpb25zW3BdID0gdGhpcy5jb25maWcudGVzdE1vZGUgPyAgYFtUZXN0IHRyYW5zbGF0aW9uIGZvciAke3B9XWAgOiBwKTtcbiAgICAgICAgICByZXR1cm4gb2YodHJhbnNsYXRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICkuc3Vic2NyaWJlKHRyYW5zbGF0aW9ucyA9PiB7XG4gICAgICAgIGNvbnN0IHRvQWRkOiBUcmFuc2xhdGlvbltdID0gW107XG4gICAgICAgIE9iamVjdC5rZXlzKHRyYW5zbGF0aW9ucykuZm9yRWFjaChwID0+IHtcbiAgICAgICAgICB0b0FkZC5wdXNoKFRyYW5zbGF0aW9uLmNyZWF0ZShwLCBsYW5nLCB0cmFuc2xhdGlvbnNbcF0sIERhdGVUaW1lLm5vdygpLnBsdXModGhpcy5jb25maWcudmFsaWRpdHkpLnRvSVNPKCkpKTtcbiAgICAgICAgICB0aGlzLnBocmFzZXNbcF0ubmV4dCh0cmFuc2xhdGlvbnNbcF0pO1xuICAgICAgICB9KTtcbiAgICAgICAgZGIudHJhbnNsYXRpb25zLmJ1bGtBZGQodG9BZGQpO1xuICAgICAgICB0aGlzLnJlcXVlc3RpbmdbbGFuZ10gPSBbXTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0VGltZXJTdWJzY3JpcHRpb24hLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMucmVxdWVzdFRpbWVyU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgcy51bnN1YnNjcmliZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHBlcnNpc3RMYW5ndWFnZSgpOiB2b2lkIHtcbiAgICBkb2N1bWVudC5jb29raWUgPSBgJHt0aGlzLmxhbmd1YWdlS2V5fT0ke3RoaXMuY3VycmVudExhbmd1YWdlfTtgO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZXJzaXN0ZWRMYW5ndWFnZSgpOiBScHhMYW5ndWFnZSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpLmZpbmQoY29va2llID0+IGNvb2tpZS50cmltKCkuc3RhcnRzV2l0aCh0aGlzLmxhbmd1YWdlS2V5ICsgJz0nKSk/LnNwbGl0KCc9JylbMV0udHJpbSgpIGFzIFJweExhbmd1YWdlO1xuICB9XG59XG4iXX0=
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB4LXRyYW5zbGF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9ycHgteHVpLXRyYW5zbGF0aW9uLyIsInNvdXJjZXMiOlsibGliL3JweC10cmFuc2xhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFnQixLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFTaEUsSUFBYSxxQkFBcUIsR0FBbEMsTUFBYSxxQkFBcUI7SUF5QmhDLFlBQ1UsTUFBNEIsRUFDNUIsSUFBZ0I7UUFEaEIsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFDNUIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQXpCbEIsb0JBQWUsR0FBZ0IsSUFBSSxDQUFDO1FBQ3BDLGdCQUFXLEdBQUcseUJBQXlCLENBQUM7UUFFeEMsWUFBTyxHQUFpRCxFQUFFLENBQUM7UUFDM0QsZ0JBQVcsR0FBNEMsRUFBRSxDQUFDO1FBQzFELGVBQVUsR0FBaUMsRUFBRSxDQUFDO1FBRTlDLG1CQUFjLEdBQWlDLElBQUksZUFBZSxDQUFjLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQW9CNUcsTUFBTSxpQkFBaUIsR0FBRyxJQUFJ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QyxXQUFXLEdBQUcsR0FBRyxDQUFDLENBQUMsMENBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFpQixDQUFDO0lBQzFJLENBQUM7Q0FDRixDQUFBOztZQXRIbUIsb0JBQW9CO1lBQ3RCLFVBQVU7O0FBM0JmLHFCQUFxQjtJQURqQyxVQUFVLEVBQUU7R0FDQSxxQkFBcUIsQ0FnSmpDO1NBaEpZLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBsaXZlUXVlcnkgfSBmcm9tICdkZXhpZSc7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gJ2x1eG9uJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZnJvbSwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZGIsIFRyYW5zbGF0aW9uIH0gZnJvbSAnLi9kYic7XG5pbXBvcnQgeyBScHhMYW5ndWFnZSB9IGZyb20gJy4vcnB4LWxhbmd1YWdlLmVudW0nO1xuaW1wb3J0IHsgUnB4VHJhbnNsYXRpb25Db25maWcgfSBmcm9tICcuL3JweC10cmFuc2xhdGlvbi5jb25maWcnO1xuXG5pbnRlcmZhY2UgVHJhbnNsYXRpb25zRFRPIHtcbiAgdHJhbnNsYXRpb25zOiB7IFtmcm9tOiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuZXhwb3J0IHR5cGUgUmVwbGFjZW1lbnRzID0geyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJweFRyYW5zbGF0aW9uU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBjdXJyZW50TGFuZ3VhZ2U6IFJweExhbmd1YWdlID0gJ2VuJztcbiAgcHJpdmF0ZSBsYW5ndWFnZUtleSA9ICdleHVpLXByZWZlcnJlZC1sYW5ndWFnZSc7XG5cbiAgcHJpdmF0ZSBwaHJhc2VzOiB7IFtwaHJhc2U6IHN0cmluZ106IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+fSA9IHt9O1xuICBwcml2YXRlIG9ic2VydmFibGVzOiB7IFtwaHJhc2U6IHN0cmluZ106IE9ic2VydmFibGU8c3RyaW5nPn0gPSB7fTtcbiAgcHJpdmF0ZSByZXF1ZXN0aW5nOiB7IFtsYW5nOiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge307XG4gIHByaXZhdGUgcmVxdWVzdFRpbWVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsO1xuICBwcml2YXRlIGxhbmd1YWdlU291cmNlOiBCZWhhdmlvclN1YmplY3Q8UnB4TGFuZ3VhZ2U+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxScHhMYW5ndWFnZT4odGhpcy5jdXJyZW50TGFuZ3VhZ2UpO1xuICBwdWJsaWMgbGFuZ3VhZ2UkOiBPYnNlcnZhYmxlPFJweExhbmd1YWdlPjtcblxuICBwdWJsaWMgc2V0IGxhbmd1YWdlKGxhbmc6IFJweExhbmd1YWdlKSB7XG4gICAgaWYgKGxhbmcgIT09IHRoaXMuY3VycmVudExhbmd1YWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZSA9IGxhbmc7XG4gICAgICB0aGlzLnBlcnNpc3RMYW5ndWFnZSgpO1xuICAgICAgdGhpcy5sYW5ndWFnZVNvdXJjZS5uZXh0KGxhbmcpO1xuICAgICAgT2JqZWN0LmtleXModGhpcy5waHJhc2VzKS5mb3JFYWNoKHBocmFzZSA9PiB0aGlzLnRyYW5zbGF0ZShwaHJhc2UpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxhbmd1YWdlKCk6IFJweExhbmd1YWdlIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50TGFuZ3VhZ2U7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbmZpZzogUnB4VHJhbnNsYXRpb25Db25maWcsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50XG4gICkge1xuICAgIGNvbnN0IHBlcnNpc3RlZExhbmd1YWdlID0gdGhpcy5nZXRQZXJzaXN0ZWRMYW5ndWFnZSgpO1xuICAgIGlmIChwZXJzaXN0ZWRMYW5ndWFnZSkge1xuICAgICAgdGhpcy5sYW5ndWFnZSA9IHBlcnNpc3RlZExhbmd1YWdlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBubyBsYW5ndWFnZSBwZXJzaXN0ZWQgeWV0LCBzYXZlIGRlZmF1bHRcbiAgICAgIHRoaXMucGVyc2lzdExhbmd1YWdlKCk7XG4gICAgfVxuICAgIHRoaXMubGFuZ3VhZ2UkID0gdGhpcy5sYW5ndWFnZVNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUcmFuc2xhdGlvbihwaHJhc2U6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMub2JzZXJ2YWJsZXMuaGFzT3duUHJvcGVydHkocGhyYXNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMub2JzZXJ2YWJsZXNbcGhyYXNlXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUocGhyYXNlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUcmFuc2xhdGlvbldpdGhSZXBsYWNlbWVudHMocGhyYXNlOiBzdHJpbmcsIHJlcGxhY2VtZW50czogUmVwbGFjZW1lbnRzKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGlvbihwaHJhc2UpLnBpcGUoXG4gICAgICBtYXAodHJhbnNsYXRpb24gPT4gdGhpcy5yZXBsYWNlUGxhY2Vob2xkZXJzKHRyYW5zbGF0aW9uLCByZXBsYWNlbWVudHMpKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgdHJhbnNsYXRlKHBocmFzZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBjb25zdCBsYW5nID0gdGhpcy5sYW5ndWFnZTtcbiAgICBpZiAoIXRoaXMucGhyYXNlcy5oYXNPd25Qcm9wZXJ0eShwaHJhc2UpKSB7XG4gICAgICB0aGlzLnBocmFzZXNbcGhyYXNlXSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihwaHJhc2UpO1xuICAgICAgdGhpcy5vYnNlcnZhYmxlc1twaHJhc2VdID0gdGhpcy5waHJhc2VzW3BocmFzZV0uYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgaWYgKGxhbmcgPT09ICdlbicpIHtcbiAgICAgIHRoaXMucGhyYXNlc1twaHJhc2VdLm5leHQocGhyYXNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZnJvbShsaXZlUXVlcnkoKCkgPT4gZGIudHJhbnNsYXRpb25zLndoZXJlKCdbcGhyYXNlK2xhbmddJykuZXF1YWxzKFtwaHJhc2UsIGxhbmddKS5maXJzdCgpKSkucGlwZShcbiAgICAgICAgdGFwKHQgPT4ge1xuICAgICAgICAgIGlmICh0ICYmICF0LmlzRXhwaXJlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnBocmFzZXNbcGhyYXNlXS5uZXh0KHQudHJhbnNsYXRpb24pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodCkge1xuICAgICAgICAgICAgICAvLyBleHBpcmVkLCBjbGVhbiB1cCBEQlxuICAgICAgICAgICAgICBkYi50cmFuc2xhdGlvbnMuZGVsZXRlKHQuaWQhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGhyYXNlc1twaHJhc2VdLm5leHQoYCR7cGhyYXNlfSBbVHJhbnNsYXRpb24gaW4gcHJvZ3Jlc3NdYCk7XG4gICAgICAgICAgICB0aGlzLmxvYWQocGhyYXNlLCBsYW5nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApLnN1YnNjcmliZSgoKSA9PiB7fSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2YWJsZXNbcGhyYXNlXTtcbiAgfVxuXG4gIHB1YmxpYyByZXBsYWNlUGxhY2Vob2xkZXJzKGlucHV0OiBzdHJpbmcsIHJlcGxhY2VtZW50czogUmVwbGFjZW1lbnRzKTogc3RyaW5nIHtcbiAgICBPYmplY3Qua2V5cyhyZXBsYWNlbWVudHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIC8vIElkZWFsbHkgdXNlIHJlcGxhY2VBbGwgaGVyZSwgYnV0IHRoYXQgaXNuJ3QgZnVsbHkgY29tcGF0aWJsZSB3aXRoIHRhcmdldGVkIGJyb3dzZXJzIGFuZCBwYWNrYWdpbmcgeWV0XG4gICAgICBjb25zdCBzZWFyY2ggPSBgJSR7a2V5fSVgO1xuICAgICAgd2hpbGUgKGlucHV0LmluZGV4T2Yoc2VhcmNoKSAhPT0gLTEpIHtcbiAgICAgICAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKHNlYXJjaCwgcmVwbGFjZW1lbnRzW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZChwaHJhc2U6IHN0cmluZywgbGFuZzogUnB4TGFuZ3VhZ2UpOiB2b2lkIHtcbiAgICBpZiAobGFuZyA9PT0gJ2VuJykge1xuICAgICAgdGhpcy5waHJhc2VzW3BocmFzZV0ubmV4dChwaHJhc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5yZXF1ZXN0aW5nLmhhc093blByb3BlcnR5KGxhbmcpKSB7XG4gICAgICB0aGlzLnJlcXVlc3RpbmdbbGFuZ10gPSBbXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZXF1ZXN0aW5nW2xhbmddLmluZGV4T2YocGhyYXNlKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlcXVlc3RpbmdbbGFuZ10ucHVzaChwaHJhc2UpO1xuXG4gICAgaWYgKHRoaXMucmVxdWVzdFRpbWVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnJlcXVlc3RUaW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHRoaXMucmVxdWVzdFRpbWVyU3Vic2NyaXB0aW9uID0gdGltZXIodGhpcy5jb25maWcuZGVib3VuY2VUaW1lTXMpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmNvbmZpZy5iYXNlVXJsICsgYC8ke2xhbmd9YDtcbiAgICAgIGNvbnN0IHMgPSB0aGlzLmh0dHAucG9zdDxUcmFuc2xhdGlvbnNEVE8+KHVybCwgeyBwaHJhc2VzOiB0aGlzLnJlcXVlc3RpbmdbbGFuZ10gfSkucGlwZShcbiAgICAgICAgbWFwKHQgPT4gdC50cmFuc2xhdGlvbnMpLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnM6IHsgW2Zyb206IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgICAgICAgdGhpcy5yZXF1ZXN0aW5nW2xhbmddLmZvckVhY2gocCA9PiB0cmFuc2xhdGlvbnNbcF0gPSB0aGlzLmNvbmZpZy50ZXN0TW9kZSA/ICBgW1Rlc3QgdHJhbnNsYXRpb24gZm9yICR7cH1dYCA6IHApO1xuICAgICAgICAgIHJldHVybiBvZih0cmFuc2xhdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgKS5zdWJzY3JpYmUodHJhbnNsYXRpb25zID0+IHtcbiAgICAgICAgY29uc3QgdG9BZGQ6IFRyYW5zbGF0aW9uW10gPSBbXTtcbiAgICAgICAgT2JqZWN0LmtleXModHJhbnNsYXRpb25zKS5mb3JFYWNoKHAgPT4ge1xuICAgICAgICAgIHRvQWRkLnB1c2goVHJhbnNsYXRpb24uY3JlYXRlKHAsIGxhbmcsIHRyYW5zbGF0aW9uc1twXSwgRGF0ZVRpbWUubm93KCkucGx1cyh0aGlzLmNvbmZpZy52YWxpZGl0eSkudG9JU08oKSkpO1xuICAgICAgICAgIHRoaXMucGhyYXNlc1twXS5uZXh0KHRyYW5zbGF0aW9uc1twXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBkYi50cmFuc2xhdGlvbnMuYnVsa0FkZCh0b0FkZCk7XG4gICAgICAgIHRoaXMucmVxdWVzdGluZ1tsYW5nXSA9IFtdO1xuICAgICAgICB0aGlzLnJlcXVlc3RUaW1lclN1YnNjcmlwdGlvbiEudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0VGltZXJTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICBzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcGVyc2lzdExhbmd1YWdlKCk6IHZvaWQge1xuICAgIGRvY3VtZW50LmNvb2tpZSA9IGAke3RoaXMubGFuZ3VhZ2VLZXl9PSR7dGhpcy5jdXJyZW50TGFuZ3VhZ2V9O2A7XG4gIH1cblxuICBwcml2YXRlIGdldFBlcnNpc3RlZExhbmd1YWdlKCk6IFJweExhbmd1YWdlIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7JykuZmluZChjb29raWUgPT4gY29va2llLnRyaW0oKS5zdGFydHNXaXRoKHRoaXMubGFuZ3VhZ2VLZXkgKyAnPScpKT8uc3BsaXQoJz0nKVsxXS50cmltKCkgYXMgUnB4TGFuZ3VhZ2U7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -16,6 +16,7 @@ var RpxTranslationService = /** @class */ (function () {
|
|
|
16
16
|
this.phrases = {};
|
|
17
17
|
this.observables = {};
|
|
18
18
|
this.requesting = {};
|
|
19
|
+
this.languageSource = new BehaviorSubject(this.currentLanguage);
|
|
19
20
|
var persistedLanguage = this.getPersistedLanguage();
|
|
20
21
|
if (persistedLanguage) {
|
|
21
22
|
this.language = persistedLanguage;
|
|
@@ -24,7 +25,6 @@ var RpxTranslationService = /** @class */ (function () {
|
|
|
24
25
|
// no language persisted yet, save default
|
|
25
26
|
this.persistLanguage();
|
|
26
27
|
}
|
|
27
|
-
this.languageSource = new BehaviorSubject(this.currentLanguage);
|
|
28
28
|
this.language$ = this.languageSource.asObservable();
|
|
29
29
|
}
|
|
30
30
|
Object.defineProperty(RpxTranslationService.prototype, "language", {
|
|
@@ -144,4 +144,4 @@ var RpxTranslationService = /** @class */ (function () {
|
|
|
144
144
|
return RpxTranslationService;
|
|
145
145
|
}());
|
|
146
146
|
export { RpxTranslationService };
|
|
147
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB4LXRyYW5zbGF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9ycHgteHVpLXRyYW5zbGF0aW9uLyIsInNvdXJjZXMiOlsibGliL3JweC10cmFuc2xhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFnQixLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFTaEU7SUF5QkUsK0JBQ1UsTUFBNEIsRUFDNUIsSUFBZ0I7UUFEaEIsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFDNUIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQXpCbEIsb0JBQWUsR0FBZ0IsSUFBSSxDQUFDO1FBQ3BDLGdCQUFXLEdBQUcseUJBQXlCLENBQUM7UUFFeEMsWUFBTyxHQUFpRCxFQUFFLENBQUM7UUFDM0QsZ0JBQVcsR0FBNEMsRUFBRSxDQUFDO1FBQzFELGVBQVUsR0FBaUMsRUFBRSxDQUFDO1FBc0JwRCxJQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3RELElBQUksaUJBQWlCLEVBQUU7WUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQztTQUNuQzthQUFNO1lBQ0wsMENBQTBDO1lBQzFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN4QjtRQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxlQUFlLENBQWMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0RCxDQUFDO0lBMUJELHNCQUFXLDJDQUFRO2FBU25CO1lBQ0UsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzlCLENBQUM7YUFYRCxVQUFvQixJQUFpQjtZQUFyQyxpQkFPQztZQU5DLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO2dCQUM1QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxNQUFNLElBQUksT0FBQSxLQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUF0QixDQUFzQixDQUFDLENBQUM7YUFDckU7UUFDSCxDQUFDOzs7T0FBQTtJQXFCTSw4Q0FBYyxHQUFyQixVQUFzQixNQUFjO1FBQ2xDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDM0MsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2pDO1FBRUQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTSw4REFBOEIsR0FBckMsVUFBc0MsTUFBYyxFQUFFLFlBQTBCO1FBQWhGLGlCQUlDO1FBSEMsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FDckMsR0FBRyxDQUFDLFVBQUEsV0FBVyxJQUFJLE9BQUEsS0FBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsRUFBbkQsQ0FBbUQsQ0FBQyxDQUN4RSxDQUFDO0lBQ0osQ0FBQztJQUVNLHlDQUFTLEdBQWhCLFVBQWlCLE1BQWM7UUFBL0IsaUJBMkJDO1FBMUJDLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxlQUFlLENBQVMsTUFBTSxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ2hFO1FBRUQsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ25DO2FBQU07WUFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQU0sT0FBQSxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBckUsQ0FBcUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMvRixHQUFHLENBQUMsVUFBQSxDQUFDO2dCQUNILElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO29CQUN2QixLQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQzFDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxFQUFFO3dCQUNMLHVCQUF1Qjt3QkFDdkIsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUcsQ0FBQyxDQUFDO3FCQUMvQjtvQkFDRCxLQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBSSxNQUFNLCtCQUE0QixDQUFDLENBQUM7b0JBQ2pFLEtBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUN6QjtZQUNILENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxDQUFDLGNBQU8sQ0FBQyxDQUFDLENBQUM7U0FDdkI7UUFFRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVNLG1EQUFtQixHQUExQixVQUEyQixLQUFhLEVBQUUsWUFBMEI7UUFDbEUsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxHQUFHO1lBQ25DLHdHQUF3RztZQUN4RyxJQUFNLE1BQU0sR0FBRyxNQUFJLEdBQUcsTUFBRyxDQUFDO1lBQzFCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDbkMsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ2xEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxvQ0FBSSxHQUFaLFVBQWEsTUFBYyxFQUFFLElBQWlCO1FBQTlDLGlCQTBDQztRQXpDQyxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7WUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEMsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQzVCO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNoRCxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVuQyxJQUFJLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtZQUNqQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDN0M7UUFFRCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzFFLElBQU0sR0FBRyxHQUFHLEtBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFHLE1BQUksSUFBTSxDQUFBLENBQUM7WUFDN0MsSUFBTSxDQUFDLEdBQUcsS0FBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQWtCLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3JGLEdBQUcsQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxZQUFZLEVBQWQsQ0FBYyxDQUFDLEVBQ3hCLFVBQVUsQ0FBQztnQkFDVCxJQUFNLFlBQVksR0FBK0IsRUFBRSxDQUFDO2dCQUNwRCxLQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUUsMkJBQXlCLENBQUMsTUFBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQTNFLENBQTJFLENBQUMsQ0FBQztnQkFDaEgsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLENBQUMsVUFBQSxZQUFZO2dCQUN0QixJQUFNLEtBQUssR0FBa0IsRUFBRSxDQUFDO2dCQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFBLENBQUM7b0JBQ2pDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUM1RyxLQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLEtBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUMzQixLQUFJLENBQUMsd0JBQXlCLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzdDLEtBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUM7Z0JBQ3JDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNsQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLCtDQUFlLEdBQXZCO1FBQ0UsUUFBUSxDQUFDLE1BQU0sR0FBTSxJQUFJLENBQUMsV0FBVyxTQUFJLElBQUksQ0FBQyxlQUFlLE1BQUcsQ0FBQztJQUNuRSxDQUFDO0lBRU8sb0RBQW9CLEdBQTVCO1FBQUEsaUJBRUM7O1FBREMsT0FBTyxNQUFBLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFBLE1BQU0sSUFBSSxPQUFBLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsRUFBaEQsQ0FBZ0QsQ0FBQywwQ0FBRSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQWlCLENBQUM7SUFDMUksQ0FBQzs7Z0JBdEhpQixvQkFBb0I7Z0JBQ3RCLFVBQVU7O0lBM0JmLHFCQUFxQjtRQURqQyxVQUFVLEVBQUU7T0FDQSxxQkFBcUIsQ0FpSmpDO0lBQUQsNEJBQUM7Q0FBQSxBQWpKRCxJQWlKQztTQWpKWSxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbGl2ZVF1ZXJ5IH0gZnJvbSAnZGV4aWUnO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdsdXhvbic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb20sIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb24sIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGRiLCBUcmFuc2xhdGlvbiB9IGZyb20gJy4vZGInO1xuaW1wb3J0IHsgUnB4TGFuZ3VhZ2UgfSBmcm9tICcuL3JweC1sYW5ndWFnZS5lbnVtJztcbmltcG9ydCB7IFJweFRyYW5zbGF0aW9uQ29uZmlnIH0gZnJvbSAnLi9ycHgtdHJhbnNsYXRpb24uY29uZmlnJztcblxuaW50ZXJmYWNlIFRyYW5zbGF0aW9uc0RUTyB7XG4gIHRyYW5zbGF0aW9uczogeyBbZnJvbTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbmV4cG9ydCB0eXBlIFJlcGxhY2VtZW50cyA9IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBScHhUcmFuc2xhdGlvblNlcnZpY2Uge1xuXG4gIHByaXZhdGUgY3VycmVudExhbmd1YWdlOiBScHhMYW5ndWFnZSA9ICdlbic7XG4gIHByaXZhdGUgbGFuZ3VhZ2VLZXkgPSAnZXh1aS1wcmVmZXJyZWQtbGFuZ3VhZ2UnO1xuXG4gIHByaXZhdGUgcGhyYXNlczogeyBbcGhyYXNlOiBzdHJpbmddOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPn0gPSB7fTtcbiAgcHJpdmF0ZSBvYnNlcnZhYmxlczogeyBbcGhyYXNlOiBzdHJpbmddOiBPYnNlcnZhYmxlPHN0cmluZz59ID0ge307XG4gIHByaXZhdGUgcmVxdWVzdGluZzogeyBbbGFuZzogc3RyaW5nXTogc3RyaW5nW10gfSA9IHt9O1xuICBwcml2YXRlIHJlcXVlc3RUaW1lclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbDtcbiAgcHJpdmF0ZSBsYW5ndWFnZVNvdXJjZTogQmVoYXZpb3JTdWJqZWN0PFJweExhbmd1YWdlPjtcbiAgcHVibGljIGxhbmd1YWdlJDogT2JzZXJ2YWJsZTxScHhMYW5ndWFnZT47XG5cbiAgcHVibGljIHNldCBsYW5ndWFnZShsYW5nOiBScHhMYW5ndWFnZSkge1xuICAgIGlmIChsYW5nICE9PSB0aGlzLmN1cnJlbnRMYW5ndWFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UgPSBsYW5nO1xuICAgICAgdGhpcy5wZXJzaXN0TGFuZ3VhZ2UoKTtcbiAgICAgIHRoaXMubGFuZ3VhZ2VTb3VyY2UubmV4dChsYW5nKTtcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMucGhyYXNlcykuZm9yRWFjaChwaHJhc2UgPT4gdGhpcy50cmFuc2xhdGUocGhyYXNlKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBsYW5ndWFnZSgpOiBScHhMYW5ndWFnZSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudExhbmd1YWdlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb25maWc6IFJweFRyYW5zbGF0aW9uQ29uZmlnLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudFxuICApIHtcbiAgICBjb25zdCBwZXJzaXN0ZWRMYW5ndWFnZSA9IHRoaXMuZ2V0UGVyc2lzdGVkTGFuZ3VhZ2UoKTtcbiAgICBpZiAocGVyc2lzdGVkTGFuZ3VhZ2UpIHtcbiAgICAgIHRoaXMubGFuZ3VhZ2UgPSBwZXJzaXN0ZWRMYW5ndWFnZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbm8gbGFuZ3VhZ2UgcGVyc2lzdGVkIHlldCwgc2F2ZSBkZWZhdWx0XG4gICAgICB0aGlzLnBlcnNpc3RMYW5ndWFnZSgpO1xuICAgIH1cbiAgICB0aGlzLmxhbmd1YWdlU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxScHhMYW5ndWFnZT4odGhpcy5jdXJyZW50TGFuZ3VhZ2UpO1xuICAgIHRoaXMubGFuZ3VhZ2UkID0gdGhpcy5sYW5ndWFnZVNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUcmFuc2xhdGlvbihwaHJhc2U6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMub2JzZXJ2YWJsZXMuaGFzT3duUHJvcGVydHkocGhyYXNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMub2JzZXJ2YWJsZXNbcGhyYXNlXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUocGhyYXNlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUcmFuc2xhdGlvbldpdGhSZXBsYWNlbWVudHMocGhyYXNlOiBzdHJpbmcsIHJlcGxhY2VtZW50czogUmVwbGFjZW1lbnRzKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGlvbihwaHJhc2UpLnBpcGUoXG4gICAgICBtYXAodHJhbnNsYXRpb24gPT4gdGhpcy5yZXBsYWNlUGxhY2Vob2xkZXJzKHRyYW5zbGF0aW9uLCByZXBsYWNlbWVudHMpKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgdHJhbnNsYXRlKHBocmFzZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBjb25zdCBsYW5nID0gdGhpcy5sYW5ndWFnZTtcbiAgICBpZiAoIXRoaXMucGhyYXNlcy5oYXNPd25Qcm9wZXJ0eShwaHJhc2UpKSB7XG4gICAgICB0aGlzLnBocmFzZXNbcGhyYXNlXSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihwaHJhc2UpO1xuICAgICAgdGhpcy5vYnNlcnZhYmxlc1twaHJhc2VdID0gdGhpcy5waHJhc2VzW3BocmFzZV0uYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgaWYgKGxhbmcgPT09ICdlbicpIHtcbiAgICAgIHRoaXMucGhyYXNlc1twaHJhc2VdLm5leHQocGhyYXNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZnJvbShsaXZlUXVlcnkoKCkgPT4gZGIudHJhbnNsYXRpb25zLndoZXJlKCdbcGhyYXNlK2xhbmddJykuZXF1YWxzKFtwaHJhc2UsIGxhbmddKS5maXJzdCgpKSkucGlwZShcbiAgICAgICAgdGFwKHQgPT4ge1xuICAgICAgICAgIGlmICh0ICYmICF0LmlzRXhwaXJlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnBocmFzZXNbcGhyYXNlXS5uZXh0KHQudHJhbnNsYXRpb24pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodCkge1xuICAgICAgICAgICAgICAvLyBleHBpcmVkLCBjbGVhbiB1cCBEQlxuICAgICAgICAgICAgICBkYi50cmFuc2xhdGlvbnMuZGVsZXRlKHQuaWQhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGhyYXNlc1twaHJhc2VdLm5leHQoYCR7cGhyYXNlfSBbVHJhbnNsYXRpb24gaW4gcHJvZ3Jlc3NdYCk7XG4gICAgICAgICAgICB0aGlzLmxvYWQocGhyYXNlLCBsYW5nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApLnN1YnNjcmliZSgoKSA9PiB7fSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2YWJsZXNbcGhyYXNlXTtcbiAgfVxuXG4gIHB1YmxpYyByZXBsYWNlUGxhY2Vob2xkZXJzKGlucHV0OiBzdHJpbmcsIHJlcGxhY2VtZW50czogUmVwbGFjZW1lbnRzKTogc3RyaW5nIHtcbiAgICBPYmplY3Qua2V5cyhyZXBsYWNlbWVudHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIC8vIElkZWFsbHkgdXNlIHJlcGxhY2VBbGwgaGVyZSwgYnV0IHRoYXQgaXNuJ3QgZnVsbHkgY29tcGF0aWJsZSB3aXRoIHRhcmdldGVkIGJyb3dzZXJzIGFuZCBwYWNrYWdpbmcgeWV0XG4gICAgICBjb25zdCBzZWFyY2ggPSBgJSR7a2V5fSVgO1xuICAgICAgd2hpbGUgKGlucHV0LmluZGV4T2Yoc2VhcmNoKSAhPT0gLTEpIHtcbiAgICAgICAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKHNlYXJjaCwgcmVwbGFjZW1lbnRzW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZChwaHJhc2U6IHN0cmluZywgbGFuZzogUnB4TGFuZ3VhZ2UpOiB2b2lkIHtcbiAgICBpZiAobGFuZyA9PT0gJ2VuJykge1xuICAgICAgdGhpcy5waHJhc2VzW3BocmFzZV0ubmV4dChwaHJhc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5yZXF1ZXN0aW5nLmhhc093blByb3BlcnR5KGxhbmcpKSB7XG4gICAgICB0aGlzLnJlcXVlc3RpbmdbbGFuZ10gPSBbXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZXF1ZXN0aW5nW2xhbmddLmluZGV4T2YocGhyYXNlKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlcXVlc3RpbmdbbGFuZ10ucHVzaChwaHJhc2UpO1xuXG4gICAgaWYgKHRoaXMucmVxdWVzdFRpbWVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnJlcXVlc3RUaW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHRoaXMucmVxdWVzdFRpbWVyU3Vic2NyaXB0aW9uID0gdGltZXIodGhpcy5jb25maWcuZGVib3VuY2VUaW1lTXMpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmNvbmZpZy5iYXNlVXJsICsgYC8ke2xhbmd9YDtcbiAgICAgIGNvbnN0IHMgPSB0aGlzLmh0dHAucG9zdDxUcmFuc2xhdGlvbnNEVE8+KHVybCwgeyBwaHJhc2VzOiB0aGlzLnJlcXVlc3RpbmdbbGFuZ10gfSkucGlwZShcbiAgICAgICAgbWFwKHQgPT4gdC50cmFuc2xhdGlvbnMpLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnM6IHsgW2Zyb206IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgICAgICAgdGhpcy5yZXF1ZXN0aW5nW2xhbmddLmZvckVhY2gocCA9PiB0cmFuc2xhdGlvbnNbcF0gPSB0aGlzLmNvbmZpZy50ZXN0TW9kZSA/ICBgW1Rlc3QgdHJhbnNsYXRpb24gZm9yICR7cH1dYCA6IHApO1xuICAgICAgICAgIHJldHVybiBvZih0cmFuc2xhdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgKS5zdWJzY3JpYmUodHJhbnNsYXRpb25zID0+IHtcbiAgICAgICAgY29uc3QgdG9BZGQ6IFRyYW5zbGF0aW9uW10gPSBbXTtcbiAgICAgICAgT2JqZWN0LmtleXModHJhbnNsYXRpb25zKS5mb3JFYWNoKHAgPT4ge1xuICAgICAgICAgIHRvQWRkLnB1c2goVHJhbnNsYXRpb24uY3JlYXRlKHAsIGxhbmcsIHRyYW5zbGF0aW9uc1twXSwgRGF0ZVRpbWUubm93KCkucGx1cyh0aGlzLmNvbmZpZy52YWxpZGl0eSkudG9JU08oKSkpO1xuICAgICAgICAgIHRoaXMucGhyYXNlc1twXS5uZXh0KHRyYW5zbGF0aW9uc1twXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBkYi50cmFuc2xhdGlvbnMuYnVsa0FkZCh0b0FkZCk7XG4gICAgICAgIHRoaXMucmVxdWVzdGluZ1tsYW5nXSA9IFtdO1xuICAgICAgICB0aGlzLnJlcXVlc3RUaW1lclN1YnNjcmlwdGlvbiEudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0VGltZXJTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICBzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcGVyc2lzdExhbmd1YWdlKCk6IHZvaWQge1xuICAgIGRvY3VtZW50LmNvb2tpZSA9IGAke3RoaXMubGFuZ3VhZ2VLZXl9PSR7dGhpcy5jdXJyZW50TGFuZ3VhZ2V9O2A7XG4gIH1cblxuICBwcml2YXRlIGdldFBlcnNpc3RlZExhbmd1YWdlKCk6IFJweExhbmd1YWdlIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7JykuZmluZChjb29raWUgPT4gY29va2llLnRyaW0oKS5zdGFydHNXaXRoKHRoaXMubGFuZ3VhZ2VLZXkgKyAnPScpKT8uc3BsaXQoJz0nKVsxXS50cmltKCkgYXMgUnB4TGFuZ3VhZ2U7XG4gIH1cbn1cbiJdfQ==
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB4LXRyYW5zbGF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9ycHgteHVpLXRyYW5zbGF0aW9uLyIsInNvdXJjZXMiOlsibGliL3JweC10cmFuc2xhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFnQixLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFTaEU7SUF5QkUsK0JBQ1UsTUFBNEIsRUFDNUIsSUFBZ0I7UUFEaEIsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFDNUIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQXpCbEIsb0JBQWUsR0FBZ0IsSUFBSSxDQUFDO1FBQ3BDLGdCQUFXLEdBQUcseUJBQXlCLENBQUM7UUFFeEMsWUFBTyxHQUFpRCxFQUFFLENBQUM7UUFDM0QsZ0JBQVcsR0FBNEMsRUFBRSxDQUFDO1FBQzFELGVBQVUsR0FBaUMsRUFBRSxDQUFDO1FBRTlDLG1CQUFjLEdBQWlDLElBQUksZUFBZSxDQUFjLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQW9CNUcsSUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUN0RCxJQUFJLGlCQUFpQixFQUFFO1lBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsaUJBQWlCLENBQUM7U0FDbkM7YUFBTTtZQUNMLDBDQUEwQztZQUMxQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDeEI7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQXpCRCxzQkFBVywyQ0FBUTthQVNuQjtZQUNFLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUM5QixDQUFDO2FBWEQsVUFBb0IsSUFBaUI7WUFBckMsaUJBT0M7WUFOQyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUNqQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztnQkFDNUIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsTUFBTSxJQUFJLE9BQUEsS0FBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBdEIsQ0FBc0IsQ0FBQyxDQUFDO2FBQ3JFO1FBQ0gsQ0FBQzs7O09BQUE7SUFvQk0sOENBQWMsR0FBckIsVUFBc0IsTUFBYztRQUNsQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzNDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNqQztRQUVELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU0sOERBQThCLEdBQXJDLFVBQXNDLE1BQWMsRUFBRSxZQUEwQjtRQUFoRixpQkFJQztRQUhDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQ3JDLEdBQUcsQ0FBQyxVQUFBLFdBQVcsSUFBSSxPQUFBLEtBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLEVBQW5ELENBQW1ELENBQUMsQ0FDeEUsQ0FBQztJQUNKLENBQUM7SUFFTSx5Q0FBUyxHQUFoQixVQUFpQixNQUFjO1FBQS9CLGlCQTJCQztRQTFCQyxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN4QyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksZUFBZSxDQUFTLE1BQU0sQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNoRTtRQUVELElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtZQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNuQzthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFNLE9BQUEsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQXJFLENBQXFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDL0YsR0FBRyxDQUFDLFVBQUEsQ0FBQztnQkFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtvQkFDdkIsS0FBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUMxQztxQkFBTTtvQkFDTCxJQUFJLENBQUMsRUFBRTt3QkFDTCx1QkFBdUI7d0JBQ3ZCLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFHLENBQUMsQ0FBQztxQkFDL0I7b0JBQ0QsS0FBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUksTUFBTSwrQkFBNEIsQ0FBQyxDQUFDO29CQUNqRSxLQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDekI7WUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsQ0FBQyxjQUFPLENBQUMsQ0FBQyxDQUFDO1NBQ3ZCO1FBRUQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTSxtREFBbUIsR0FBMUIsVUFBMkIsS0FBYSxFQUFFLFlBQTBCO1FBQ2xFLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsR0FBRztZQUNuQyx3R0FBd0c7WUFDeEcsSUFBTSxNQUFNLEdBQUcsTUFBSSxHQUFHLE1BQUcsQ0FBQztZQUMxQixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ25DLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUNsRDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sb0NBQUksR0FBWixVQUFhLE1BQWMsRUFBRSxJQUFpQjtRQUE5QyxpQkEwQ0M7UUF6Q0MsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xDLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUM1QjtRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDaEQsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFbkMsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUU7WUFDakMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQzdDO1FBRUQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUMxRSxJQUFNLEdBQUcsR0FBRyxLQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBRyxNQUFJLElBQU0sQ0FBQSxDQUFDO1lBQzdDLElBQU0sQ0FBQyxHQUFHLEtBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFrQixHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUNyRixHQUFHLENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsWUFBWSxFQUFkLENBQWMsQ0FBQyxFQUN4QixVQUFVLENBQUM7Z0JBQ1QsSUFBTSxZQUFZLEdBQStCLEVBQUUsQ0FBQztnQkFDcEQsS0FBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFFLDJCQUF5QixDQUFDLE1BQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUEzRSxDQUEyRSxDQUFDLENBQUM7Z0JBQ2hILE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxDQUFDLFVBQUEsWUFBWTtnQkFDdEIsSUFBTSxLQUFLLEdBQWtCLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxDQUFDO29CQUNqQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDNUcsS0FBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLENBQUMsQ0FBQyxDQUFDO2dCQUNILEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixLQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDM0IsS0FBSSxDQUFDLHdCQUF5QixDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUM3QyxLQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO2dCQUNyQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTywrQ0FBZSxHQUF2QjtRQUNFLFFBQVEsQ0FBQyxNQUFNLEdBQU0sSUFBSSxDQUFDLFdBQVcsU0FBSSxJQUFJLENBQUMsZUFBZSxNQUFHLENBQUM7SUFDbkUsQ0FBQztJQUVPLG9EQUFvQixHQUE1QjtRQUFBLGlCQUVDOztRQURDLE9BQU8sTUFBQSxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQSxNQUFNLElBQUksT0FBQSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLEVBQWhELENBQWdELENBQUMsMENBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFpQixDQUFDO0lBQzFJLENBQUM7O2dCQXJIaUIsb0JBQW9CO2dCQUN0QixVQUFVOztJQTNCZixxQkFBcUI7UUFEakMsVUFBVSxFQUFFO09BQ0EscUJBQXFCLENBZ0pqQztJQUFELDRCQUFDO0NBQUEsQUFoSkQsSUFnSkM7U0FoSlkscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGxpdmVRdWVyeSB9IGZyb20gJ2RleGllJztcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnbHV4b24nO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tLCBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9uLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBkYiwgVHJhbnNsYXRpb24gfSBmcm9tICcuL2RiJztcbmltcG9ydCB7IFJweExhbmd1YWdlIH0gZnJvbSAnLi9ycHgtbGFuZ3VhZ2UuZW51bSc7XG5pbXBvcnQgeyBScHhUcmFuc2xhdGlvbkNvbmZpZyB9IGZyb20gJy4vcnB4LXRyYW5zbGF0aW9uLmNvbmZpZyc7XG5cbmludGVyZmFjZSBUcmFuc2xhdGlvbnNEVE8ge1xuICB0cmFuc2xhdGlvbnM6IHsgW2Zyb206IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG5leHBvcnQgdHlwZSBSZXBsYWNlbWVudHMgPSB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUnB4VHJhbnNsYXRpb25TZXJ2aWNlIHtcblxuICBwcml2YXRlIGN1cnJlbnRMYW5ndWFnZTogUnB4TGFuZ3VhZ2UgPSAnZW4nO1xuICBwcml2YXRlIGxhbmd1YWdlS2V5ID0gJ2V4dWktcHJlZmVycmVkLWxhbmd1YWdlJztcblxuICBwcml2YXRlIHBocmFzZXM6IHsgW3BocmFzZTogc3RyaW5nXTogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz59ID0ge307XG4gIHByaXZhdGUgb2JzZXJ2YWJsZXM6IHsgW3BocmFzZTogc3RyaW5nXTogT2JzZXJ2YWJsZTxzdHJpbmc+fSA9IHt9O1xuICBwcml2YXRlIHJlcXVlc3Rpbmc6IHsgW2xhbmc6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7fTtcbiAgcHJpdmF0ZSByZXF1ZXN0VGltZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGw7XG4gIHByaXZhdGUgbGFuZ3VhZ2VTb3VyY2U6IEJlaGF2aW9yU3ViamVjdDxScHhMYW5ndWFnZT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJweExhbmd1YWdlPih0aGlzLmN1cnJlbnRMYW5ndWFnZSk7XG4gIHB1YmxpYyBsYW5ndWFnZSQ6IE9ic2VydmFibGU8UnB4TGFuZ3VhZ2U+O1xuXG4gIHB1YmxpYyBzZXQgbGFuZ3VhZ2UobGFuZzogUnB4TGFuZ3VhZ2UpIHtcbiAgICBpZiAobGFuZyAhPT0gdGhpcy5jdXJyZW50TGFuZ3VhZ2UpIHtcbiAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlID0gbGFuZztcbiAgICAgIHRoaXMucGVyc2lzdExhbmd1YWdlKCk7XG4gICAgICB0aGlzLmxhbmd1YWdlU291cmNlLm5leHQobGFuZyk7XG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnBocmFzZXMpLmZvckVhY2gocGhyYXNlID0+IHRoaXMudHJhbnNsYXRlKHBocmFzZSkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgbGFuZ3VhZ2UoKTogUnB4TGFuZ3VhZ2Uge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRMYW5ndWFnZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29uZmlnOiBScHhUcmFuc2xhdGlvbkNvbmZpZyxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnRcbiAgKSB7XG4gICAgY29uc3QgcGVyc2lzdGVkTGFuZ3VhZ2UgPSB0aGlzLmdldFBlcnNpc3RlZExhbmd1YWdlKCk7XG4gICAgaWYgKHBlcnNpc3RlZExhbmd1YWdlKSB7XG4gICAgICB0aGlzLmxhbmd1YWdlID0gcGVyc2lzdGVkTGFuZ3VhZ2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG5vIGxhbmd1YWdlIHBlcnNpc3RlZCB5ZXQsIHNhdmUgZGVmYXVsdFxuICAgICAgdGhpcy5wZXJzaXN0TGFuZ3VhZ2UoKTtcbiAgICB9XG4gICAgdGhpcy5sYW5ndWFnZSQgPSB0aGlzLmxhbmd1YWdlU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldFRyYW5zbGF0aW9uKHBocmFzZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBpZiAodGhpcy5vYnNlcnZhYmxlcy5oYXNPd25Qcm9wZXJ0eShwaHJhc2UpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vYnNlcnZhYmxlc1twaHJhc2VdO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZShwaHJhc2UpO1xuICB9XG5cbiAgcHVibGljIGdldFRyYW5zbGF0aW9uV2l0aFJlcGxhY2VtZW50cyhwaHJhc2U6IHN0cmluZywgcmVwbGFjZW1lbnRzOiBSZXBsYWNlbWVudHMpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmdldFRyYW5zbGF0aW9uKHBocmFzZSkucGlwZShcbiAgICAgIG1hcCh0cmFuc2xhdGlvbiA9PiB0aGlzLnJlcGxhY2VQbGFjZWhvbGRlcnModHJhbnNsYXRpb24sIHJlcGxhY2VtZW50cykpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyB0cmFuc2xhdGUocGhyYXNlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGNvbnN0IGxhbmcgPSB0aGlzLmxhbmd1YWdlO1xuICAgIGlmICghdGhpcy5waHJhc2VzLmhhc093blByb3BlcnR5KHBocmFzZSkpIHtcbiAgICAgIHRoaXMucGhyYXNlc1twaHJhc2VdID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHBocmFzZSk7XG4gICAgICB0aGlzLm9ic2VydmFibGVzW3BocmFzZV0gPSB0aGlzLnBocmFzZXNbcGhyYXNlXS5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBpZiAobGFuZyA9PT0gJ2VuJykge1xuICAgICAgdGhpcy5waHJhc2VzW3BocmFzZV0ubmV4dChwaHJhc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmcm9tKGxpdmVRdWVyeSgoKSA9PiBkYi50cmFuc2xhdGlvbnMud2hlcmUoJ1twaHJhc2UrbGFuZ10nKS5lcXVhbHMoW3BocmFzZSwgbGFuZ10pLmZpcnN0KCkpKS5waXBlKFxuICAgICAgICB0YXAodCA9PiB7XG4gICAgICAgICAgaWYgKHQgJiYgIXQuaXNFeHBpcmVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMucGhyYXNlc1twaHJhc2VdLm5leHQodC50cmFuc2xhdGlvbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0KSB7XG4gICAgICAgICAgICAgIC8vIGV4cGlyZWQsIGNsZWFuIHVwIERCXG4gICAgICAgICAgICAgIGRiLnRyYW5zbGF0aW9ucy5kZWxldGUodC5pZCEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5waHJhc2VzW3BocmFzZV0ubmV4dChgJHtwaHJhc2V9IFtUcmFuc2xhdGlvbiBpbiBwcm9ncmVzc11gKTtcbiAgICAgICAgICAgIHRoaXMubG9hZChwaHJhc2UsIGxhbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICkuc3Vic2NyaWJlKCgpID0+IHt9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5vYnNlcnZhYmxlc1twaHJhc2VdO1xuICB9XG5cbiAgcHVibGljIHJlcGxhY2VQbGFjZWhvbGRlcnMoaW5wdXQ6IHN0cmluZywgcmVwbGFjZW1lbnRzOiBSZXBsYWNlbWVudHMpOiBzdHJpbmcge1xuICAgIE9iamVjdC5rZXlzKHJlcGxhY2VtZW50cykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgLy8gSWRlYWxseSB1c2UgcmVwbGFjZUFsbCBoZXJlLCBidXQgdGhhdCBpc24ndCBmdWxseSBjb21wYXRpYmxlIHdpdGggdGFyZ2V0ZWQgYnJvd3NlcnMgYW5kIHBhY2thZ2luZyB5ZXRcbiAgICAgIGNvbnN0IHNlYXJjaCA9IGAlJHtrZXl9JWA7XG4gICAgICB3aGlsZSAoaW5wdXQuaW5kZXhPZihzZWFyY2gpICE9PSAtMSkge1xuICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2Uoc2VhcmNoLCByZXBsYWNlbWVudHNba2V5XSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkKHBocmFzZTogc3RyaW5nLCBsYW5nOiBScHhMYW5ndWFnZSk6IHZvaWQge1xuICAgIGlmIChsYW5nID09PSAnZW4nKSB7XG4gICAgICB0aGlzLnBocmFzZXNbcGhyYXNlXS5uZXh0KHBocmFzZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnJlcXVlc3RpbmcuaGFzT3duUHJvcGVydHkobGFuZykpIHtcbiAgICAgIHRoaXMucmVxdWVzdGluZ1tsYW5nXSA9IFtdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlcXVlc3RpbmdbbGFuZ10uaW5kZXhPZihwaHJhc2UpICE9PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVxdWVzdGluZ1tsYW5nXS5wdXNoKHBocmFzZSk7XG5cbiAgICBpZiAodGhpcy5yZXF1ZXN0VGltZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucmVxdWVzdFRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXF1ZXN0VGltZXJTdWJzY3JpcHRpb24gPSB0aW1lcih0aGlzLmNvbmZpZy5kZWJvdW5jZVRpbWVNcykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMuY29uZmlnLmJhc2VVcmwgKyBgLyR7bGFuZ31gO1xuICAgICAgY29uc3QgcyA9IHRoaXMuaHR0cC5wb3N0PFRyYW5zbGF0aW9uc0RUTz4odXJsLCB7IHBocmFzZXM6IHRoaXMucmVxdWVzdGluZ1tsYW5nXSB9KS5waXBlKFxuICAgICAgICBtYXAodCA9PiB0LnRyYW5zbGF0aW9ucyksXG4gICAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uczogeyBbZnJvbTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICAgICAgICB0aGlzLnJlcXVlc3RpbmdbbGFuZ10uZm9yRWFjaChwID0+IHRyYW5zbGF0aW9uc1twXSA9IHRoaXMuY29uZmlnLnRlc3RNb2RlID8gIGBbVGVzdCB0cmFuc2xhdGlvbiBmb3IgJHtwfV1gIDogcCk7XG4gICAgICAgICAgcmV0dXJuIG9mKHRyYW5zbGF0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICApLnN1YnNjcmliZSh0cmFuc2xhdGlvbnMgPT4ge1xuICAgICAgICBjb25zdCB0b0FkZDogVHJhbnNsYXRpb25bXSA9IFtdO1xuICAgICAgICBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnMpLmZvckVhY2gocCA9PiB7XG4gICAgICAgICAgdG9BZGQucHVzaChUcmFuc2xhdGlvbi5jcmVhdGUocCwgbGFuZywgdHJhbnNsYXRpb25zW3BdLCBEYXRlVGltZS5ub3coKS5wbHVzKHRoaXMuY29uZmlnLnZhbGlkaXR5KS50b0lTTygpKSk7XG4gICAgICAgICAgdGhpcy5waHJhc2VzW3BdLm5leHQodHJhbnNsYXRpb25zW3BdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGRiLnRyYW5zbGF0aW9ucy5idWxrQWRkKHRvQWRkKTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0aW5nW2xhbmddID0gW107XG4gICAgICAgIHRoaXMucmVxdWVzdFRpbWVyU3Vic2NyaXB0aW9uIS51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnJlcXVlc3RUaW1lclN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIHMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwZXJzaXN0TGFuZ3VhZ2UoKTogdm9pZCB7XG4gICAgZG9jdW1lbnQuY29va2llID0gYCR7dGhpcy5sYW5ndWFnZUtleX09JHt0aGlzLmN1cnJlbnRMYW5ndWFnZX07YDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGVyc2lzdGVkTGFuZ3VhZ2UoKTogUnB4TGFuZ3VhZ2Uge1xuICAgIHJldHVybiBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKS5maW5kKGNvb2tpZSA9PiBjb29raWUudHJpbSgpLnN0YXJ0c1dpdGgodGhpcy5sYW5ndWFnZUtleSArICc9JykpPy5zcGxpdCgnPScpWzFdLnRyaW0oKSBhcyBScHhMYW5ndWFnZTtcbiAgfVxufVxuIl19
|
|
@@ -47,6 +47,7 @@ let RpxTranslationService = class RpxTranslationService {
|
|
|
47
47
|
this.phrases = {};
|
|
48
48
|
this.observables = {};
|
|
49
49
|
this.requesting = {};
|
|
50
|
+
this.languageSource = new BehaviorSubject(this.currentLanguage);
|
|
50
51
|
const persistedLanguage = this.getPersistedLanguage();
|
|
51
52
|
if (persistedLanguage) {
|
|
52
53
|
this.language = persistedLanguage;
|
|
@@ -55,7 +56,6 @@ let RpxTranslationService = class RpxTranslationService {
|
|
|
55
56
|
// no language persisted yet, save default
|
|
56
57
|
this.persistLanguage();
|
|
57
58
|
}
|
|
58
|
-
this.languageSource = new BehaviorSubject(this.currentLanguage);
|
|
59
59
|
this.language$ = this.languageSource.asObservable();
|
|
60
60
|
}
|
|
61
61
|
set language(lang) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpx-xui-translation.js","sources":["ng://rpx-xui-translation/lib/rpx-translation.config.ts","ng://rpx-xui-translation/lib/db.ts","ng://rpx-xui-translation/lib/rpx-translation.service.ts","ng://rpx-xui-translation/lib/rpx-translate.pipe.ts","ng://rpx-xui-translation/lib/rpx-translation.module.ts","ng://rpx-xui-translation/public-api.ts","ng://rpx-xui-translation/rpx-xui-translation.ts"],"sourcesContent":["export type ValidityDurationSpec = {\n years?: number;\n quarters?: number;\n months?: number;\n weeks?: number;\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n};\n\nexport class RpxTranslationConfig {\n validity: ValidityDurationSpec;\n baseUrl: string;\n\n debounceTimeMs = 300;\n testMode = false;\n}\n","import Dexie, { Table } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { RpxLanguage } from './rpx-language.enum';\n\nexport class Translation {\n id?: number;\n phrase: string;\n lang: RpxLanguage;\n translation: string;\n validity: string;\n\n public static create(phrase: string, lang: RpxLanguage, translation: string, validity: string): Translation {\n const t = new Translation();\n t.phrase = phrase;\n t.lang = lang;\n t.translation = translation;\n t.validity = validity;\n return t;\n }\n\n isExpired(): boolean {\n return DateTime.fromISO(this.validity) < DateTime.now();\n }\n}\n\nexport class TranslationDB extends Dexie {\n translations: Table<Translation, number>;\n\n constructor() {\n super('RpxTranslations');\n this.version(1).stores({\n translations: '++id, [phrase+lang]'\n });\n this.translations.mapToClass(Translation);\n }\n}\n\nexport const db = new TranslationDB();\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { liveQuery } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { BehaviorSubject, from, Observable, of, Subscription, timer } from 'rxjs';\nimport { catchError, map, tap } from 'rxjs/operators';\nimport { db, Translation } from './db';\nimport { RpxLanguage } from './rpx-language.enum';\nimport { RpxTranslationConfig } from './rpx-translation.config';\n\ninterface TranslationsDTO {\n translations: { [from: string]: string };\n}\n\nexport type Replacements = { [key: string]: string };\n\n@Injectable()\nexport class RpxTranslationService {\n\n private currentLanguage: RpxLanguage = 'en';\n private languageKey = 'exui-preferred-language';\n\n private phrases: { [phrase: string]: BehaviorSubject<string>} = {};\n private observables: { [phrase: string]: Observable<string>} = {};\n private requesting: { [lang: string]: string[] } = {};\n private requestTimerSubscription: Subscription | null;\n private languageSource: BehaviorSubject<RpxLanguage>;\n public language$: Observable<RpxLanguage>;\n\n public set language(lang: RpxLanguage) {\n if (lang !== this.currentLanguage) {\n this.currentLanguage = lang;\n this.persistLanguage();\n this.languageSource.next(lang);\n Object.keys(this.phrases).forEach(phrase => this.translate(phrase));\n }\n }\n\n public get language(): RpxLanguage {\n return this.currentLanguage;\n }\n\n constructor(\n private config: RpxTranslationConfig,\n private http: HttpClient\n ) {\n const persistedLanguage = this.getPersistedLanguage();\n if (persistedLanguage) {\n this.language = persistedLanguage;\n } else {\n // no language persisted yet, save default\n this.persistLanguage();\n }\n this.languageSource = new BehaviorSubject<RpxLanguage>(this.currentLanguage);\n this.language$ = this.languageSource.asObservable();\n }\n\n public getTranslation(phrase: string): Observable<string> {\n if (this.observables.hasOwnProperty(phrase)) {\n return this.observables[phrase];\n }\n\n return this.translate(phrase);\n }\n\n public getTranslationWithReplacements(phrase: string, replacements: Replacements): Observable<string> {\n return this.getTranslation(phrase).pipe(\n map(translation => this.replacePlaceholders(translation, replacements))\n );\n }\n\n public translate(phrase: string): Observable<string> {\n const lang = this.language;\n if (!this.phrases.hasOwnProperty(phrase)) {\n this.phrases[phrase] = new BehaviorSubject<string>(phrase);\n this.observables[phrase] = this.phrases[phrase].asObservable();\n }\n\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n } else {\n from(liveQuery(() => db.translations.where('[phrase+lang]').equals([phrase, lang]).first())).pipe(\n tap(t => {\n if (t && !t.isExpired()) {\n this.phrases[phrase].next(t.translation);\n } else {\n if (t) {\n // expired, clean up DB\n db.translations.delete(t.id!);\n }\n this.phrases[phrase].next(`${phrase} [Translation in progress]`);\n this.load(phrase, lang);\n }\n })\n ).subscribe(() => {});\n }\n\n return this.observables[phrase];\n }\n\n public replacePlaceholders(input: string, replacements: Replacements): string {\n Object.keys(replacements).forEach(key => {\n // Ideally use replaceAll here, but that isn't fully compatible with targeted browsers and packaging yet\n const search = `%${key}%`;\n while (input.indexOf(search) !== -1) {\n input = input.replace(search, replacements[key]);\n }\n });\n return input;\n }\n\n private load(phrase: string, lang: RpxLanguage): void {\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n return;\n }\n\n if (!this.requesting.hasOwnProperty(lang)) {\n this.requesting[lang] = [];\n }\n\n if (this.requesting[lang].indexOf(phrase) !== -1) {\n return;\n }\n\n this.requesting[lang].push(phrase);\n\n if (this.requestTimerSubscription) {\n this.requestTimerSubscription.unsubscribe();\n }\n\n this.requestTimerSubscription = timer(this.config.debounceTimeMs).subscribe(() => {\n const url = this.config.baseUrl + `/${lang}`;\n const s = this.http.post<TranslationsDTO>(url, { phrases: this.requesting[lang] }).pipe(\n map(t => t.translations),\n catchError(() => {\n const translations: { [from: string]: string } = {};\n this.requesting[lang].forEach(p => translations[p] = this.config.testMode ? `[Test translation for ${p}]` : p);\n return of(translations);\n })\n ).subscribe(translations => {\n const toAdd: Translation[] = [];\n Object.keys(translations).forEach(p => {\n toAdd.push(Translation.create(p, lang, translations[p], DateTime.now().plus(this.config.validity).toISO()));\n this.phrases[p].next(translations[p]);\n });\n db.translations.bulkAdd(toAdd);\n this.requesting[lang] = [];\n this.requestTimerSubscription!.unsubscribe();\n this.requestTimerSubscription = null;\n s.unsubscribe();\n });\n });\n }\n\n private persistLanguage(): void {\n document.cookie = `${this.languageKey}=${this.currentLanguage};`;\n }\n\n private getPersistedLanguage(): RpxLanguage {\n return document.cookie.split(';').find(cookie => cookie.trim().startsWith(this.languageKey + '='))?.split('=')[1].trim() as RpxLanguage;\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectorRef, Pipe, PipeTransform } from '@angular/core';\nimport { Observable, Subscribable } from 'rxjs';\nimport { RpxTranslationService, Replacements } from './rpx-translation.service';\n\n@Pipe({\n name: 'rpxTranslate',\n pure: false\n})\nexport class RpxTranslatePipe extends AsyncPipe implements PipeTransform {\n\n constructor(\n private translationService: RpxTranslationService,\n ref: ChangeDetectorRef\n ) {\n super(ref);\n }\n\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>): T|null;\n transform<T>(obj: null|undefined): null;\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>|null|undefined): T|null;\n transform<T = string>(value: T): T|null;\n transform<T = string>(value: T, replacements?: Replacements | null): T|null {\n if (typeof value === 'string') {\n let o: Observable<string>;\n if (replacements) {\n o = this.translationService.getTranslationWithReplacements(value, replacements);\n } else {\n o = this.translationService.getTranslation(value);\n }\n const ret = super.transform<string>(o);\n return ret as unknown as T;\n }\n return null;\n }\n\n}\n","import { HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RpxTranslatePipe } from './rpx-translate.pipe';\nimport { RpxTranslationConfig } from './rpx-translation.config';\nimport { RpxTranslationService } from './rpx-translation.service';\n\n@NgModule({\n declarations: [RpxTranslatePipe],\n imports: [HttpClientModule],\n exports: [RpxTranslatePipe]\n})\nexport class RpxTranslationModule {\n\n public static forRoot(config: RpxTranslationConfig): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule,\n providers: [\n {\n provide: RpxTranslationConfig, useValue: config\n },\n RpxTranslationService\n ]\n };\n }\n\n public static forChild(): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule\n };\n }\n}\n","/*\n * Public API Surface of rpx-translation\n */\n\nexport * from './lib/rpx-language.enum';\nexport * from './lib/rpx-translation.config';\nexport * from './lib/rpx-translation.service';\nexport * from './lib/rpx-translate.pipe';\nexport * from './lib/rpx-translation.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rpx-xui-translation.js","sources":["ng://rpx-xui-translation/lib/rpx-translation.config.ts","ng://rpx-xui-translation/lib/db.ts","ng://rpx-xui-translation/lib/rpx-translation.service.ts","ng://rpx-xui-translation/lib/rpx-translate.pipe.ts","ng://rpx-xui-translation/lib/rpx-translation.module.ts","ng://rpx-xui-translation/public-api.ts","ng://rpx-xui-translation/rpx-xui-translation.ts"],"sourcesContent":["export type ValidityDurationSpec = {\n years?: number;\n quarters?: number;\n months?: number;\n weeks?: number;\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n};\n\nexport class RpxTranslationConfig {\n validity: ValidityDurationSpec;\n baseUrl: string;\n\n debounceTimeMs = 300;\n testMode = false;\n}\n","import Dexie, { Table } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { RpxLanguage } from './rpx-language.enum';\n\nexport class Translation {\n id?: number;\n phrase: string;\n lang: RpxLanguage;\n translation: string;\n validity: string;\n\n public static create(phrase: string, lang: RpxLanguage, translation: string, validity: string): Translation {\n const t = new Translation();\n t.phrase = phrase;\n t.lang = lang;\n t.translation = translation;\n t.validity = validity;\n return t;\n }\n\n isExpired(): boolean {\n return DateTime.fromISO(this.validity) < DateTime.now();\n }\n}\n\nexport class TranslationDB extends Dexie {\n translations: Table<Translation, number>;\n\n constructor() {\n super('RpxTranslations');\n this.version(1).stores({\n translations: '++id, [phrase+lang]'\n });\n this.translations.mapToClass(Translation);\n }\n}\n\nexport const db = new TranslationDB();\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { liveQuery } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { BehaviorSubject, from, Observable, of, Subscription, timer } from 'rxjs';\nimport { catchError, map, tap } from 'rxjs/operators';\nimport { db, Translation } from './db';\nimport { RpxLanguage } from './rpx-language.enum';\nimport { RpxTranslationConfig } from './rpx-translation.config';\n\ninterface TranslationsDTO {\n translations: { [from: string]: string };\n}\n\nexport type Replacements = { [key: string]: string };\n\n@Injectable()\nexport class RpxTranslationService {\n\n private currentLanguage: RpxLanguage = 'en';\n private languageKey = 'exui-preferred-language';\n\n private phrases: { [phrase: string]: BehaviorSubject<string>} = {};\n private observables: { [phrase: string]: Observable<string>} = {};\n private requesting: { [lang: string]: string[] } = {};\n private requestTimerSubscription: Subscription | null;\n private languageSource: BehaviorSubject<RpxLanguage> = new BehaviorSubject<RpxLanguage>(this.currentLanguage);\n public language$: Observable<RpxLanguage>;\n\n public set language(lang: RpxLanguage) {\n if (lang !== this.currentLanguage) {\n this.currentLanguage = lang;\n this.persistLanguage();\n this.languageSource.next(lang);\n Object.keys(this.phrases).forEach(phrase => this.translate(phrase));\n }\n }\n\n public get language(): RpxLanguage {\n return this.currentLanguage;\n }\n\n constructor(\n private config: RpxTranslationConfig,\n private http: HttpClient\n ) {\n const persistedLanguage = this.getPersistedLanguage();\n if (persistedLanguage) {\n this.language = persistedLanguage;\n } else {\n // no language persisted yet, save default\n this.persistLanguage();\n }\n this.language$ = this.languageSource.asObservable();\n }\n\n public getTranslation(phrase: string): Observable<string> {\n if (this.observables.hasOwnProperty(phrase)) {\n return this.observables[phrase];\n }\n\n return this.translate(phrase);\n }\n\n public getTranslationWithReplacements(phrase: string, replacements: Replacements): Observable<string> {\n return this.getTranslation(phrase).pipe(\n map(translation => this.replacePlaceholders(translation, replacements))\n );\n }\n\n public translate(phrase: string): Observable<string> {\n const lang = this.language;\n if (!this.phrases.hasOwnProperty(phrase)) {\n this.phrases[phrase] = new BehaviorSubject<string>(phrase);\n this.observables[phrase] = this.phrases[phrase].asObservable();\n }\n\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n } else {\n from(liveQuery(() => db.translations.where('[phrase+lang]').equals([phrase, lang]).first())).pipe(\n tap(t => {\n if (t && !t.isExpired()) {\n this.phrases[phrase].next(t.translation);\n } else {\n if (t) {\n // expired, clean up DB\n db.translations.delete(t.id!);\n }\n this.phrases[phrase].next(`${phrase} [Translation in progress]`);\n this.load(phrase, lang);\n }\n })\n ).subscribe(() => {});\n }\n\n return this.observables[phrase];\n }\n\n public replacePlaceholders(input: string, replacements: Replacements): string {\n Object.keys(replacements).forEach(key => {\n // Ideally use replaceAll here, but that isn't fully compatible with targeted browsers and packaging yet\n const search = `%${key}%`;\n while (input.indexOf(search) !== -1) {\n input = input.replace(search, replacements[key]);\n }\n });\n return input;\n }\n\n private load(phrase: string, lang: RpxLanguage): void {\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n return;\n }\n\n if (!this.requesting.hasOwnProperty(lang)) {\n this.requesting[lang] = [];\n }\n\n if (this.requesting[lang].indexOf(phrase) !== -1) {\n return;\n }\n\n this.requesting[lang].push(phrase);\n\n if (this.requestTimerSubscription) {\n this.requestTimerSubscription.unsubscribe();\n }\n\n this.requestTimerSubscription = timer(this.config.debounceTimeMs).subscribe(() => {\n const url = this.config.baseUrl + `/${lang}`;\n const s = this.http.post<TranslationsDTO>(url, { phrases: this.requesting[lang] }).pipe(\n map(t => t.translations),\n catchError(() => {\n const translations: { [from: string]: string } = {};\n this.requesting[lang].forEach(p => translations[p] = this.config.testMode ? `[Test translation for ${p}]` : p);\n return of(translations);\n })\n ).subscribe(translations => {\n const toAdd: Translation[] = [];\n Object.keys(translations).forEach(p => {\n toAdd.push(Translation.create(p, lang, translations[p], DateTime.now().plus(this.config.validity).toISO()));\n this.phrases[p].next(translations[p]);\n });\n db.translations.bulkAdd(toAdd);\n this.requesting[lang] = [];\n this.requestTimerSubscription!.unsubscribe();\n this.requestTimerSubscription = null;\n s.unsubscribe();\n });\n });\n }\n\n private persistLanguage(): void {\n document.cookie = `${this.languageKey}=${this.currentLanguage};`;\n }\n\n private getPersistedLanguage(): RpxLanguage {\n return document.cookie.split(';').find(cookie => cookie.trim().startsWith(this.languageKey + '='))?.split('=')[1].trim() as RpxLanguage;\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectorRef, Pipe, PipeTransform } from '@angular/core';\nimport { Observable, Subscribable } from 'rxjs';\nimport { RpxTranslationService, Replacements } from './rpx-translation.service';\n\n@Pipe({\n name: 'rpxTranslate',\n pure: false\n})\nexport class RpxTranslatePipe extends AsyncPipe implements PipeTransform {\n\n constructor(\n private translationService: RpxTranslationService,\n ref: ChangeDetectorRef\n ) {\n super(ref);\n }\n\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>): T|null;\n transform<T>(obj: null|undefined): null;\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>|null|undefined): T|null;\n transform<T = string>(value: T): T|null;\n transform<T = string>(value: T, replacements?: Replacements | null): T|null {\n if (typeof value === 'string') {\n let o: Observable<string>;\n if (replacements) {\n o = this.translationService.getTranslationWithReplacements(value, replacements);\n } else {\n o = this.translationService.getTranslation(value);\n }\n const ret = super.transform<string>(o);\n return ret as unknown as T;\n }\n return null;\n }\n\n}\n","import { HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RpxTranslatePipe } from './rpx-translate.pipe';\nimport { RpxTranslationConfig } from './rpx-translation.config';\nimport { RpxTranslationService } from './rpx-translation.service';\n\n@NgModule({\n declarations: [RpxTranslatePipe],\n imports: [HttpClientModule],\n exports: [RpxTranslatePipe]\n})\nexport class RpxTranslationModule {\n\n public static forRoot(config: RpxTranslationConfig): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule,\n providers: [\n {\n provide: RpxTranslationConfig, useValue: config\n },\n RpxTranslationService\n ]\n };\n }\n\n public static forChild(): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule\n };\n }\n}\n","/*\n * Public API Surface of rpx-translation\n */\n\nexport * from './lib/rpx-language.enum';\nexport * from './lib/rpx-translation.config';\nexport * from './lib/rpx-translation.service';\nexport * from './lib/rpx-translate.pipe';\nexport * from './lib/rpx-translation.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -54,6 +54,7 @@ var RpxTranslationService = /** @class */ (function () {
|
|
|
54
54
|
this.phrases = {};
|
|
55
55
|
this.observables = {};
|
|
56
56
|
this.requesting = {};
|
|
57
|
+
this.languageSource = new BehaviorSubject(this.currentLanguage);
|
|
57
58
|
var persistedLanguage = this.getPersistedLanguage();
|
|
58
59
|
if (persistedLanguage) {
|
|
59
60
|
this.language = persistedLanguage;
|
|
@@ -62,7 +63,6 @@ var RpxTranslationService = /** @class */ (function () {
|
|
|
62
63
|
// no language persisted yet, save default
|
|
63
64
|
this.persistLanguage();
|
|
64
65
|
}
|
|
65
|
-
this.languageSource = new BehaviorSubject(this.currentLanguage);
|
|
66
66
|
this.language$ = this.languageSource.asObservable();
|
|
67
67
|
}
|
|
68
68
|
Object.defineProperty(RpxTranslationService.prototype, "language", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpx-xui-translation.js","sources":["ng://rpx-xui-translation/lib/rpx-translation.config.ts","ng://rpx-xui-translation/lib/db.ts","ng://rpx-xui-translation/lib/rpx-translation.service.ts","ng://rpx-xui-translation/lib/rpx-translate.pipe.ts","ng://rpx-xui-translation/lib/rpx-translation.module.ts","ng://rpx-xui-translation/public-api.ts","ng://rpx-xui-translation/rpx-xui-translation.ts"],"sourcesContent":["export type ValidityDurationSpec = {\n years?: number;\n quarters?: number;\n months?: number;\n weeks?: number;\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n};\n\nexport class RpxTranslationConfig {\n validity: ValidityDurationSpec;\n baseUrl: string;\n\n debounceTimeMs = 300;\n testMode = false;\n}\n","import Dexie, { Table } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { RpxLanguage } from './rpx-language.enum';\n\nexport class Translation {\n id?: number;\n phrase: string;\n lang: RpxLanguage;\n translation: string;\n validity: string;\n\n public static create(phrase: string, lang: RpxLanguage, translation: string, validity: string): Translation {\n const t = new Translation();\n t.phrase = phrase;\n t.lang = lang;\n t.translation = translation;\n t.validity = validity;\n return t;\n }\n\n isExpired(): boolean {\n return DateTime.fromISO(this.validity) < DateTime.now();\n }\n}\n\nexport class TranslationDB extends Dexie {\n translations: Table<Translation, number>;\n\n constructor() {\n super('RpxTranslations');\n this.version(1).stores({\n translations: '++id, [phrase+lang]'\n });\n this.translations.mapToClass(Translation);\n }\n}\n\nexport const db = new TranslationDB();\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { liveQuery } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { BehaviorSubject, from, Observable, of, Subscription, timer } from 'rxjs';\nimport { catchError, map, tap } from 'rxjs/operators';\nimport { db, Translation } from './db';\nimport { RpxLanguage } from './rpx-language.enum';\nimport { RpxTranslationConfig } from './rpx-translation.config';\n\ninterface TranslationsDTO {\n translations: { [from: string]: string };\n}\n\nexport type Replacements = { [key: string]: string };\n\n@Injectable()\nexport class RpxTranslationService {\n\n private currentLanguage: RpxLanguage = 'en';\n private languageKey = 'exui-preferred-language';\n\n private phrases: { [phrase: string]: BehaviorSubject<string>} = {};\n private observables: { [phrase: string]: Observable<string>} = {};\n private requesting: { [lang: string]: string[] } = {};\n private requestTimerSubscription: Subscription | null;\n private languageSource: BehaviorSubject<RpxLanguage>;\n public language$: Observable<RpxLanguage>;\n\n public set language(lang: RpxLanguage) {\n if (lang !== this.currentLanguage) {\n this.currentLanguage = lang;\n this.persistLanguage();\n this.languageSource.next(lang);\n Object.keys(this.phrases).forEach(phrase => this.translate(phrase));\n }\n }\n\n public get language(): RpxLanguage {\n return this.currentLanguage;\n }\n\n constructor(\n private config: RpxTranslationConfig,\n private http: HttpClient\n ) {\n const persistedLanguage = this.getPersistedLanguage();\n if (persistedLanguage) {\n this.language = persistedLanguage;\n } else {\n // no language persisted yet, save default\n this.persistLanguage();\n }\n this.languageSource = new BehaviorSubject<RpxLanguage>(this.currentLanguage);\n this.language$ = this.languageSource.asObservable();\n }\n\n public getTranslation(phrase: string): Observable<string> {\n if (this.observables.hasOwnProperty(phrase)) {\n return this.observables[phrase];\n }\n\n return this.translate(phrase);\n }\n\n public getTranslationWithReplacements(phrase: string, replacements: Replacements): Observable<string> {\n return this.getTranslation(phrase).pipe(\n map(translation => this.replacePlaceholders(translation, replacements))\n );\n }\n\n public translate(phrase: string): Observable<string> {\n const lang = this.language;\n if (!this.phrases.hasOwnProperty(phrase)) {\n this.phrases[phrase] = new BehaviorSubject<string>(phrase);\n this.observables[phrase] = this.phrases[phrase].asObservable();\n }\n\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n } else {\n from(liveQuery(() => db.translations.where('[phrase+lang]').equals([phrase, lang]).first())).pipe(\n tap(t => {\n if (t && !t.isExpired()) {\n this.phrases[phrase].next(t.translation);\n } else {\n if (t) {\n // expired, clean up DB\n db.translations.delete(t.id!);\n }\n this.phrases[phrase].next(`${phrase} [Translation in progress]`);\n this.load(phrase, lang);\n }\n })\n ).subscribe(() => {});\n }\n\n return this.observables[phrase];\n }\n\n public replacePlaceholders(input: string, replacements: Replacements): string {\n Object.keys(replacements).forEach(key => {\n // Ideally use replaceAll here, but that isn't fully compatible with targeted browsers and packaging yet\n const search = `%${key}%`;\n while (input.indexOf(search) !== -1) {\n input = input.replace(search, replacements[key]);\n }\n });\n return input;\n }\n\n private load(phrase: string, lang: RpxLanguage): void {\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n return;\n }\n\n if (!this.requesting.hasOwnProperty(lang)) {\n this.requesting[lang] = [];\n }\n\n if (this.requesting[lang].indexOf(phrase) !== -1) {\n return;\n }\n\n this.requesting[lang].push(phrase);\n\n if (this.requestTimerSubscription) {\n this.requestTimerSubscription.unsubscribe();\n }\n\n this.requestTimerSubscription = timer(this.config.debounceTimeMs).subscribe(() => {\n const url = this.config.baseUrl + `/${lang}`;\n const s = this.http.post<TranslationsDTO>(url, { phrases: this.requesting[lang] }).pipe(\n map(t => t.translations),\n catchError(() => {\n const translations: { [from: string]: string } = {};\n this.requesting[lang].forEach(p => translations[p] = this.config.testMode ? `[Test translation for ${p}]` : p);\n return of(translations);\n })\n ).subscribe(translations => {\n const toAdd: Translation[] = [];\n Object.keys(translations).forEach(p => {\n toAdd.push(Translation.create(p, lang, translations[p], DateTime.now().plus(this.config.validity).toISO()));\n this.phrases[p].next(translations[p]);\n });\n db.translations.bulkAdd(toAdd);\n this.requesting[lang] = [];\n this.requestTimerSubscription!.unsubscribe();\n this.requestTimerSubscription = null;\n s.unsubscribe();\n });\n });\n }\n\n private persistLanguage(): void {\n document.cookie = `${this.languageKey}=${this.currentLanguage};`;\n }\n\n private getPersistedLanguage(): RpxLanguage {\n return document.cookie.split(';').find(cookie => cookie.trim().startsWith(this.languageKey + '='))?.split('=')[1].trim() as RpxLanguage;\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectorRef, Pipe, PipeTransform } from '@angular/core';\nimport { Observable, Subscribable } from 'rxjs';\nimport { RpxTranslationService, Replacements } from './rpx-translation.service';\n\n@Pipe({\n name: 'rpxTranslate',\n pure: false\n})\nexport class RpxTranslatePipe extends AsyncPipe implements PipeTransform {\n\n constructor(\n private translationService: RpxTranslationService,\n ref: ChangeDetectorRef\n ) {\n super(ref);\n }\n\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>): T|null;\n transform<T>(obj: null|undefined): null;\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>|null|undefined): T|null;\n transform<T = string>(value: T): T|null;\n transform<T = string>(value: T, replacements?: Replacements | null): T|null {\n if (typeof value === 'string') {\n let o: Observable<string>;\n if (replacements) {\n o = this.translationService.getTranslationWithReplacements(value, replacements);\n } else {\n o = this.translationService.getTranslation(value);\n }\n const ret = super.transform<string>(o);\n return ret as unknown as T;\n }\n return null;\n }\n\n}\n","import { HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RpxTranslatePipe } from './rpx-translate.pipe';\nimport { RpxTranslationConfig } from './rpx-translation.config';\nimport { RpxTranslationService } from './rpx-translation.service';\n\n@NgModule({\n declarations: [RpxTranslatePipe],\n imports: [HttpClientModule],\n exports: [RpxTranslatePipe]\n})\nexport class RpxTranslationModule {\n\n public static forRoot(config: RpxTranslationConfig): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule,\n providers: [\n {\n provide: RpxTranslationConfig, useValue: config\n },\n RpxTranslationService\n ]\n };\n }\n\n public static forChild(): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule\n };\n }\n}\n","/*\n * Public API Surface of rpx-translation\n */\n\nexport * from './lib/rpx-language.enum';\nexport * from './lib/rpx-translation.config';\nexport * from './lib/rpx-translation.service';\nexport * from './lib/rpx-translate.pipe';\nexport * from './lib/rpx-translation.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rpx-xui-translation.js","sources":["ng://rpx-xui-translation/lib/rpx-translation.config.ts","ng://rpx-xui-translation/lib/db.ts","ng://rpx-xui-translation/lib/rpx-translation.service.ts","ng://rpx-xui-translation/lib/rpx-translate.pipe.ts","ng://rpx-xui-translation/lib/rpx-translation.module.ts","ng://rpx-xui-translation/public-api.ts","ng://rpx-xui-translation/rpx-xui-translation.ts"],"sourcesContent":["export type ValidityDurationSpec = {\n years?: number;\n quarters?: number;\n months?: number;\n weeks?: number;\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n};\n\nexport class RpxTranslationConfig {\n validity: ValidityDurationSpec;\n baseUrl: string;\n\n debounceTimeMs = 300;\n testMode = false;\n}\n","import Dexie, { Table } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { RpxLanguage } from './rpx-language.enum';\n\nexport class Translation {\n id?: number;\n phrase: string;\n lang: RpxLanguage;\n translation: string;\n validity: string;\n\n public static create(phrase: string, lang: RpxLanguage, translation: string, validity: string): Translation {\n const t = new Translation();\n t.phrase = phrase;\n t.lang = lang;\n t.translation = translation;\n t.validity = validity;\n return t;\n }\n\n isExpired(): boolean {\n return DateTime.fromISO(this.validity) < DateTime.now();\n }\n}\n\nexport class TranslationDB extends Dexie {\n translations: Table<Translation, number>;\n\n constructor() {\n super('RpxTranslations');\n this.version(1).stores({\n translations: '++id, [phrase+lang]'\n });\n this.translations.mapToClass(Translation);\n }\n}\n\nexport const db = new TranslationDB();\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { liveQuery } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { BehaviorSubject, from, Observable, of, Subscription, timer } from 'rxjs';\nimport { catchError, map, tap } from 'rxjs/operators';\nimport { db, Translation } from './db';\nimport { RpxLanguage } from './rpx-language.enum';\nimport { RpxTranslationConfig } from './rpx-translation.config';\n\ninterface TranslationsDTO {\n translations: { [from: string]: string };\n}\n\nexport type Replacements = { [key: string]: string };\n\n@Injectable()\nexport class RpxTranslationService {\n\n private currentLanguage: RpxLanguage = 'en';\n private languageKey = 'exui-preferred-language';\n\n private phrases: { [phrase: string]: BehaviorSubject<string>} = {};\n private observables: { [phrase: string]: Observable<string>} = {};\n private requesting: { [lang: string]: string[] } = {};\n private requestTimerSubscription: Subscription | null;\n private languageSource: BehaviorSubject<RpxLanguage> = new BehaviorSubject<RpxLanguage>(this.currentLanguage);\n public language$: Observable<RpxLanguage>;\n\n public set language(lang: RpxLanguage) {\n if (lang !== this.currentLanguage) {\n this.currentLanguage = lang;\n this.persistLanguage();\n this.languageSource.next(lang);\n Object.keys(this.phrases).forEach(phrase => this.translate(phrase));\n }\n }\n\n public get language(): RpxLanguage {\n return this.currentLanguage;\n }\n\n constructor(\n private config: RpxTranslationConfig,\n private http: HttpClient\n ) {\n const persistedLanguage = this.getPersistedLanguage();\n if (persistedLanguage) {\n this.language = persistedLanguage;\n } else {\n // no language persisted yet, save default\n this.persistLanguage();\n }\n this.language$ = this.languageSource.asObservable();\n }\n\n public getTranslation(phrase: string): Observable<string> {\n if (this.observables.hasOwnProperty(phrase)) {\n return this.observables[phrase];\n }\n\n return this.translate(phrase);\n }\n\n public getTranslationWithReplacements(phrase: string, replacements: Replacements): Observable<string> {\n return this.getTranslation(phrase).pipe(\n map(translation => this.replacePlaceholders(translation, replacements))\n );\n }\n\n public translate(phrase: string): Observable<string> {\n const lang = this.language;\n if (!this.phrases.hasOwnProperty(phrase)) {\n this.phrases[phrase] = new BehaviorSubject<string>(phrase);\n this.observables[phrase] = this.phrases[phrase].asObservable();\n }\n\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n } else {\n from(liveQuery(() => db.translations.where('[phrase+lang]').equals([phrase, lang]).first())).pipe(\n tap(t => {\n if (t && !t.isExpired()) {\n this.phrases[phrase].next(t.translation);\n } else {\n if (t) {\n // expired, clean up DB\n db.translations.delete(t.id!);\n }\n this.phrases[phrase].next(`${phrase} [Translation in progress]`);\n this.load(phrase, lang);\n }\n })\n ).subscribe(() => {});\n }\n\n return this.observables[phrase];\n }\n\n public replacePlaceholders(input: string, replacements: Replacements): string {\n Object.keys(replacements).forEach(key => {\n // Ideally use replaceAll here, but that isn't fully compatible with targeted browsers and packaging yet\n const search = `%${key}%`;\n while (input.indexOf(search) !== -1) {\n input = input.replace(search, replacements[key]);\n }\n });\n return input;\n }\n\n private load(phrase: string, lang: RpxLanguage): void {\n if (lang === 'en') {\n this.phrases[phrase].next(phrase);\n return;\n }\n\n if (!this.requesting.hasOwnProperty(lang)) {\n this.requesting[lang] = [];\n }\n\n if (this.requesting[lang].indexOf(phrase) !== -1) {\n return;\n }\n\n this.requesting[lang].push(phrase);\n\n if (this.requestTimerSubscription) {\n this.requestTimerSubscription.unsubscribe();\n }\n\n this.requestTimerSubscription = timer(this.config.debounceTimeMs).subscribe(() => {\n const url = this.config.baseUrl + `/${lang}`;\n const s = this.http.post<TranslationsDTO>(url, { phrases: this.requesting[lang] }).pipe(\n map(t => t.translations),\n catchError(() => {\n const translations: { [from: string]: string } = {};\n this.requesting[lang].forEach(p => translations[p] = this.config.testMode ? `[Test translation for ${p}]` : p);\n return of(translations);\n })\n ).subscribe(translations => {\n const toAdd: Translation[] = [];\n Object.keys(translations).forEach(p => {\n toAdd.push(Translation.create(p, lang, translations[p], DateTime.now().plus(this.config.validity).toISO()));\n this.phrases[p].next(translations[p]);\n });\n db.translations.bulkAdd(toAdd);\n this.requesting[lang] = [];\n this.requestTimerSubscription!.unsubscribe();\n this.requestTimerSubscription = null;\n s.unsubscribe();\n });\n });\n }\n\n private persistLanguage(): void {\n document.cookie = `${this.languageKey}=${this.currentLanguage};`;\n }\n\n private getPersistedLanguage(): RpxLanguage {\n return document.cookie.split(';').find(cookie => cookie.trim().startsWith(this.languageKey + '='))?.split('=')[1].trim() as RpxLanguage;\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectorRef, Pipe, PipeTransform } from '@angular/core';\nimport { Observable, Subscribable } from 'rxjs';\nimport { RpxTranslationService, Replacements } from './rpx-translation.service';\n\n@Pipe({\n name: 'rpxTranslate',\n pure: false\n})\nexport class RpxTranslatePipe extends AsyncPipe implements PipeTransform {\n\n constructor(\n private translationService: RpxTranslationService,\n ref: ChangeDetectorRef\n ) {\n super(ref);\n }\n\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>): T|null;\n transform<T>(obj: null|undefined): null;\n transform<T>(obj: Observable<T>|Subscribable<T>|Promise<T>|null|undefined): T|null;\n transform<T = string>(value: T): T|null;\n transform<T = string>(value: T, replacements?: Replacements | null): T|null {\n if (typeof value === 'string') {\n let o: Observable<string>;\n if (replacements) {\n o = this.translationService.getTranslationWithReplacements(value, replacements);\n } else {\n o = this.translationService.getTranslation(value);\n }\n const ret = super.transform<string>(o);\n return ret as unknown as T;\n }\n return null;\n }\n\n}\n","import { HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RpxTranslatePipe } from './rpx-translate.pipe';\nimport { RpxTranslationConfig } from './rpx-translation.config';\nimport { RpxTranslationService } from './rpx-translation.service';\n\n@NgModule({\n declarations: [RpxTranslatePipe],\n imports: [HttpClientModule],\n exports: [RpxTranslatePipe]\n})\nexport class RpxTranslationModule {\n\n public static forRoot(config: RpxTranslationConfig): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule,\n providers: [\n {\n provide: RpxTranslationConfig, useValue: config\n },\n RpxTranslationService\n ]\n };\n }\n\n public static forChild(): ModuleWithProviders {\n return {\n ngModule: RpxTranslationModule\n };\n }\n}\n","/*\n * Public API Surface of rpx-translation\n */\n\nexport * from './lib/rpx-language.enum';\nexport * from './lib/rpx-translation.config';\nexport * from './lib/rpx-translation.service';\nexport * from './lib/rpx-translate.pipe';\nexport * from './lib/rpx-translation.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;IAYA;QAII,mBAAc,GAAG,GAAG,CAAC;QACrB,aAAQ,GAAG,KAAK,CAAC;KACpB;IAAD,2BAAC;AAAD,CAAC;;ACdD;IAAA;KAmBC;IAZiB,kBAAM,GAApB,UAAqB,MAAc,EAAE,IAAiB,EAAE,WAAmB,EAAE,QAAgB;QACzF,IAAM,CAAC,GAAG,IAAI,WAAW,EAAE,CAAC;QAC5B,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC;QAClB,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;QACd,CAAC,CAAC,WAAW,GAAG,WAAW,CAAC;QAC5B,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACtB,OAAO,CAAC,CAAC;KACZ;IAED,+BAAS,GAAT;QACI,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC;KAC3D;IACL,kBAAC;AAAD,CAAC,IAAA;AAED;IAAmC,iCAAK;IAGpC;QAAA,YACI,kBAAM,iBAAiB,CAAC,SAK3B;QAJG,KAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACnB,YAAY,EAAE,qBAAqB;SACtC,CAAC,CAAC;QACH,KAAI,CAAC,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;;KAC7C;IACL,oBAAC;AAAD,CAVA,CAAmC,KAAK,GAUvC;AAEM,IAAM,EAAE,GAAG,IAAI,aAAa,EAAE;;;ICKnC,+BACU,MAA4B,EAC5B,IAAgB;QADhB,WAAM,GAAN,MAAM,CAAsB;QAC5B,SAAI,GAAJ,IAAI,CAAY;QAzBlB,oBAAe,GAAgB,IAAI,CAAC;QACpC,gBAAW,GAAG,yBAAyB,CAAC;QAExC,YAAO,GAAiD,EAAE,CAAC;QAC3D,gBAAW,GAA4C,EAAE,CAAC;QAC1D,eAAU,GAAiC,EAAE,CAAC;QAE9C,mBAAc,GAAiC,IAAI,eAAe,CAAc,IAAI,CAAC,eAAe,CAAC,CAAC;QAoB5G,IAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACtD,IAAI,iBAAiB,EAAE;YACrB,IAAI,CAAC,QAAQ,GAAG,iBAAiB,CAAC;SACnC;aAAM;;YAEL,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;KACrD;IAzBD,sBAAW,2CAAQ;aASnB;YACE,OAAO,IAAI,CAAC,eAAe,CAAC;SAC7B;aAXD,UAAoB,IAAiB;YAArC,iBAOC;YANC,IAAI,IAAI,KAAK,IAAI,CAAC,eAAe,EAAE;gBACjC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC5B,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,UAAA,MAAM,IAAI,OAAA,KAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAA,CAAC,CAAC;aACrE;SACF;;;OAAA;IAoBM,8CAAc,GAArB,UAAsB,MAAc;QAClC,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;YAC3C,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;SACjC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KAC/B;IAEM,8DAA8B,GAArC,UAAsC,MAAc,EAAE,YAA0B;QAAhF,iBAIC;QAHC,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CACrC,GAAG,CAAC,UAAA,WAAW,IAAI,OAAA,KAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,YAAY,CAAC,GAAA,CAAC,CACxE,CAAC;KACH;IAEM,yCAAS,GAAhB,UAAiB,MAAc;QAA/B,iBA2BC;QA1BC,IAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;YACxC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,eAAe,CAAS,MAAM,CAAC,CAAC;YAC3D,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,CAAC;SAChE;QAED,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACnC;aAAM;YACL,IAAI,CAAC,SAAS,CAAC,cAAM,OAAA,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,GAAA,CAAC,CAAC,CAAC,IAAI,CAC/F,GAAG,CAAC,UAAA,CAAC;gBACH,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE;oBACvB,KAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;iBAC1C;qBAAM;oBACL,IAAI,CAAC,EAAE;;wBAEL,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAG,CAAC,CAAC;qBAC/B;oBACD,KAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAI,MAAM,+BAA4B,CAAC,CAAC;oBACjE,KAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;iBACzB;aACF,CAAC,CACH,CAAC,SAAS,CAAC,eAAQ,CAAC,CAAC;SACvB;QAED,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;KACjC;IAEM,mDAAmB,GAA1B,UAA2B,KAAa,EAAE,YAA0B;QAClE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,UAAA,GAAG;;YAEnC,IAAM,MAAM,GAAG,MAAI,GAAG,MAAG,CAAC;YAC1B,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;gBACnC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;aAClD;SACF,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;KACd;IAEO,oCAAI,GAAZ,UAAa,MAAc,EAAE,IAAiB;QAA9C,iBA0CC;QAzCC,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClC,OAAO;SACR;QAED,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;SAC5B;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;YAChD,OAAO;SACR;QAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEnC,IAAI,IAAI,CAAC,wBAAwB,EAAE;YACjC,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE,CAAC;SAC7C;QAED,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC;YAC1E,IAAM,GAAG,GAAG,KAAI,CAAC,MAAM,CAAC,OAAO,IAAG,MAAI,IAAM,CAAA,CAAC;YAC7C,IAAM,CAAC,GAAG,KAAI,CAAC,IAAI,CAAC,IAAI,CAAkB,GAAG,EAAE,EAAE,OAAO,EAAE,KAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CACrF,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,YAAY,GAAA,CAAC,EACxB,UAAU,CAAC;gBACT,IAAM,YAAY,GAA+B,EAAE,CAAC;gBACpD,KAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAA,CAAC,IAAI,OAAA,YAAY,CAAC,CAAC,CAAC,GAAG,KAAI,CAAC,MAAM,CAAC,QAAQ,GAAI,2BAAyB,CAAC,MAAG,GAAG,CAAC,GAAA,CAAC,CAAC;gBAChH,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC;aACzB,CAAC,CACH,CAAC,SAAS,CAAC,UAAA,YAAY;gBACtB,IAAM,KAAK,GAAkB,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,UAAA,CAAC;oBACjC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;oBAC5G,KAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC,CAAC;gBACH,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC/B,KAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC3B,KAAI,CAAC,wBAAyB,CAAC,WAAW,EAAE,CAAC;gBAC7C,KAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;gBACrC,CAAC,CAAC,WAAW,EAAE,CAAC;aACjB,CAAC,CAAC;SACJ,CAAC,CAAC;KACJ;IAEO,+CAAe,GAAvB;QACE,QAAQ,CAAC,MAAM,GAAM,IAAI,CAAC,WAAW,SAAI,IAAI,CAAC,eAAe,MAAG,CAAC;KAClE;IAEO,oDAAoB,GAA5B;QAAA,iBAEC;;QADC,OAAO,MAAA,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,KAAI,CAAC,WAAW,GAAG,GAAG,CAAC,GAAA,CAAC,0CAAE,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAiB,CAAC;KACzI;;gBArHiB,oBAAoB;gBACtB,UAAU;;IA3Bf,qBAAqB;QADjC,UAAU,EAAE;OACA,qBAAqB,CAgJjC;IAAD,4BAAC;CAhJD;;;ICRsC,oCAAS;IAE7C,0BACU,kBAAyC,EACjD,GAAsB;QAFxB,YAIE,kBAAM,GAAG,CAAC,SACX;QAJS,wBAAkB,GAAlB,kBAAkB,CAAuB;;KAIlD;IAMD,oCAAS,GAAT,UAAsB,KAAQ,EAAE,YAAkC;QAChE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,IAAI,CAAC,SAAoB,CAAC;YAC1B,IAAI,YAAY,EAAE;gBAChB,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,8BAA8B,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;aACjF;iBAAM;gBACL,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;aACnD;YACD,IAAM,GAAG,GAAG,iBAAM,SAAS,YAAS,CAAC,CAAC,CAAC;YACvC,OAAO,GAAmB,CAAC;SAC5B;QACD,OAAO,IAAI,CAAC;KACb;;gBAtB6B,qBAAqB;gBAC5C,iBAAiB;;IAJb,gBAAgB;QAJ5B,IAAI,CAAC;YACJ,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,KAAK;SACZ,CAAC;OACW,gBAAgB,CA2B5B;IAAD,uBAAC;CAAA,CA3BqC,SAAS;;;ICE/C;KAmBC;6BAnBY,oBAAoB;IAEjB,4BAAO,GAArB,UAAsB,MAA4B;QAChD,OAAO;YACL,QAAQ,EAAE,sBAAoB;YAC9B,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM;iBAChD;gBACD,qBAAqB;aACtB;SACF,CAAC;KACH;IAEa,6BAAQ,GAAtB;QACE,OAAO;YACL,QAAQ,EAAE,sBAAoB;SAC/B,CAAC;KACH;;IAlBU,oBAAoB;QALhC,QAAQ,CAAC;YACR,YAAY,EAAE,CAAC,gBAAgB,CAAC;YAChC,OAAO,EAAE,CAAC,gBAAgB,CAAC;YAC3B,OAAO,EAAE,CAAC,gBAAgB,CAAC;SAC5B,CAAC;OACW,oBAAoB,CAmBhC;IAAD,2BAAC;CAnBD;;ACXA;;;;ACAA;;;;;;"}
|