@senior-gestao-pessoas/hcmxt-bridge-lib 1.0.1 → 1.0.2

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.
@@ -0,0 +1,14 @@
1
+ {
2
+ "hcm.hcmxt_bridge_lib.toast.error.summary": "Error",
3
+ "hcm.hcmxt_bridge_lib.toast.error.callback_failed": "Error receiving communication from the Back-End.",
4
+ "hcm.hcmxt_bridge_lib.toast.error.response_parse_failed": "Failed to process Back-End response.",
5
+ "hcm.hcmxt_bridge_lib.toast.error.response_process_failed_with_id": "Failed to process Back-End response with ID: {id}",
6
+ "hcm.hcmxt_bridge_lib.toast.error.cef_unavailable": "Back-End communication functions are not available.",
7
+ "hcm.hcmxt_bridge_lib.toast.error.communication_failed_after_retries": "Back-End communication failed after {attempts} attempt(s).",
8
+ "hcm.hcmxt_bridge_lib.toast.error.request_send_failed": "Failed to send request to the Back-End.",
9
+ "hcm.hcmxt_bridge_lib.toast.error.invalid_response": "Invalid response from Back-End.",
10
+ "hcm.hcmxt_bridge_lib.toast.error.response_missing_id": "Invalid response from Back-End (missing id).",
11
+ "hcm.hcmxt_bridge_lib.toast.error.response_unknown_id": "Back-End response received for unknown/completed request ID: {id}",
12
+ "hcm.hcmxt_bridge_lib.toast.error.chunk_unknown_id": "Back-End chunked response received for unknown request ID: {id}",
13
+ "hcm.hcmxt_bridge_lib.toast.error.chunk_limit_exceeded": "Back-End response reached the maximum chunk limit for request ID: {id}"
14
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "hcm.hcmxt_bridge_lib.toast.error.summary": "Error",
3
+ "hcm.hcmxt_bridge_lib.toast.error.callback_failed": "Error al recibir comunicación con el Back-End.",
4
+ "hcm.hcmxt_bridge_lib.toast.error.response_parse_failed": "Error al procesar la respuesta del Back-End.",
5
+ "hcm.hcmxt_bridge_lib.toast.error.response_process_failed_with_id": "Error al procesar la respuesta del Back-End con ID: {id}",
6
+ "hcm.hcmxt_bridge_lib.toast.error.cef_unavailable": "Funciones de comunicación con el Back-End no disponibles.",
7
+ "hcm.hcmxt_bridge_lib.toast.error.communication_failed_after_retries": "Error de comunicación con el Back-End tras {attempts} intento(s).",
8
+ "hcm.hcmxt_bridge_lib.toast.error.request_send_failed": "Error al enviar la solicitud al Back-End.",
9
+ "hcm.hcmxt_bridge_lib.toast.error.invalid_response": "Respuesta no válida del Back-End.",
10
+ "hcm.hcmxt_bridge_lib.toast.error.response_missing_id": "Respuesta no válida del Back-End (id ausente).",
11
+ "hcm.hcmxt_bridge_lib.toast.error.response_unknown_id": "Respuesta del Back-End recibida para ID de solicitud desconocido/completado: {id}",
12
+ "hcm.hcmxt_bridge_lib.toast.error.chunk_unknown_id": "Respuesta fragmentada del Back-End recibida para ID de solicitud desconocido: {id}",
13
+ "hcm.hcmxt_bridge_lib.toast.error.chunk_limit_exceeded": "La respuesta del Back-End alcanzó el límite máximo de fragmentos para el ID de solicitud: {id}"
14
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "hcm.hcmxt_bridge_lib.toast.error.summary": "Erro",
3
+ "hcm.hcmxt_bridge_lib.toast.error.callback_failed": "Erro ao receber comunicação com o Back-End.",
4
+ "hcm.hcmxt_bridge_lib.toast.error.response_parse_failed": "Falha ao processar resposta do Back-End.",
5
+ "hcm.hcmxt_bridge_lib.toast.error.response_process_failed_with_id": "Falha ao processar resposta do Back-End com ID: {id}",
6
+ "hcm.hcmxt_bridge_lib.toast.error.cef_unavailable": "Funções de comunicação com o Back-End não disponíveis.",
7
+ "hcm.hcmxt_bridge_lib.toast.error.communication_failed_after_retries": "Falha na comunicação com o Back-End após {attempts} tentativa(s).",
8
+ "hcm.hcmxt_bridge_lib.toast.error.request_send_failed": "Falha ao enviar requisição para o Back-End.",
9
+ "hcm.hcmxt_bridge_lib.toast.error.invalid_response": "Resposta inválida do Back-End.",
10
+ "hcm.hcmxt_bridge_lib.toast.error.response_missing_id": "Resposta inválida do Back-End (id ausente).",
11
+ "hcm.hcmxt_bridge_lib.toast.error.response_unknown_id": "Resposta do Back-End recebida para ID de requisição desconhecido/concluído: {id}",
12
+ "hcm.hcmxt_bridge_lib.toast.error.chunk_unknown_id": "Resposta do Back-End com Chunk recebido para ID de requisição desconhecido: {id}",
13
+ "hcm.hcmxt_bridge_lib.toast.error.chunk_limit_exceeded": "Resposta do Back-End atingiu limite máximo de Chunk para ID de requisição: {id}"
14
+ }
@@ -0,0 +1,94 @@
1
+ import { Injectable, LOCALE_ID, inject } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import ptBR from '../locale/pt-BR.json';
4
+ import enUS from '../locale/en-US.json';
5
+ import esES from '../locale/es-ES.json';
6
+ import * as i0 from "@angular/core";
7
+ export const DEFAULT_LOCALE = 'pt-BR';
8
+ const BUILT_IN_TRANSLATIONS = {
9
+ 'pt-BR': ptBR,
10
+ 'en-US': enUS,
11
+ 'es-ES': esES,
12
+ };
13
+ export class TranslationService {
14
+ constructor() {
15
+ this.translations = new Map(Object.entries(BUILT_IN_TRANSLATIONS));
16
+ const angularLocale = inject(LOCALE_ID, { optional: true });
17
+ this.localeSubject = new BehaviorSubject(this.resolveLocale(angularLocale));
18
+ }
19
+ /**
20
+ * Get the currently active locale.
21
+ */
22
+ getLocale() {
23
+ return this.localeSubject.value;
24
+ }
25
+ /**
26
+ * Change the active locale. Falls back to the default if unsupported.
27
+ */
28
+ setLocale(locale) {
29
+ this.localeSubject.next(this.resolveLocale(locale));
30
+ }
31
+ /**
32
+ * Register or override translations for a given locale.
33
+ * Useful for consumers that want to customize the built-in messages.
34
+ */
35
+ registerTranslations(locale, dictionary) {
36
+ const existing = this.translations.get(locale) ?? {};
37
+ this.translations.set(locale, { ...existing, ...dictionary });
38
+ }
39
+ /**
40
+ * Translate a key using the active locale, with optional placeholder interpolation.
41
+ * Placeholders use {name} syntax. If the key is not found, the key itself is returned.
42
+ */
43
+ translate(key, params) {
44
+ const dict = this.translations.get(this.localeSubject.value)
45
+ ?? this.translations.get(DEFAULT_LOCALE)
46
+ ?? {};
47
+ const template = Object.hasOwn(dict, key)
48
+ ? dict[key]
49
+ : (this.translations.get(DEFAULT_LOCALE)?.[key] ?? key);
50
+ return this.interpolate(template, params);
51
+ }
52
+ interpolate(template, params) {
53
+ if (!params) {
54
+ return template;
55
+ }
56
+ return template.replace(/\{(\w+)\}/g, (match, name) => {
57
+ return Object.hasOwn(params, name)
58
+ ? String(params[name])
59
+ : match;
60
+ });
61
+ }
62
+ resolveLocale(locale) {
63
+ if (!locale) {
64
+ return DEFAULT_LOCALE;
65
+ }
66
+ const normalized = locale.replace('_', '-');
67
+ if (this.isSupported(normalized)) {
68
+ return normalized;
69
+ }
70
+ const lang = normalized.split('-')[0].toLowerCase();
71
+ switch (lang) {
72
+ case 'pt':
73
+ return 'pt-BR';
74
+ case 'en':
75
+ return 'en-US';
76
+ case 'es':
77
+ return 'es-ES';
78
+ default:
79
+ return DEFAULT_LOCALE;
80
+ }
81
+ }
82
+ isSupported(locale) {
83
+ return this.translations.has(locale);
84
+ }
85
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TranslationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
86
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TranslationService, providedIn: 'root' }); }
87
+ }
88
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TranslationService, decorators: [{
89
+ type: Injectable,
90
+ args: [{
91
+ providedIn: 'root'
92
+ }]
93
+ }], ctorParameters: function () { return []; } });
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9zcmMvbGliL3NlcnZpY2VzL3RyYW5zbGF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxJQUFJLE1BQU0sc0JBQXNCLENBQUM7QUFDeEMsT0FBTyxJQUFJLE1BQU0sc0JBQXNCLENBQUM7QUFDeEMsT0FBTyxJQUFJLE1BQU0sc0JBQXNCLENBQUM7O0FBTXhDLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBb0IsT0FBTyxDQUFDO0FBRXZELE1BQU0scUJBQXFCLEdBQTZEO0lBQ3RGLE9BQU8sRUFBRSxJQUE2QjtJQUN0QyxPQUFPLEVBQUUsSUFBNkI7SUFDdEMsT0FBTyxFQUFFLElBQTZCO0NBQ3ZDLENBQUM7QUFLRixNQUFNLE9BQU8sa0JBQWtCO0lBUTdCO1FBTmlCLGlCQUFZLEdBQUcsSUFBSSxHQUFHLENBQ3JDLE1BQU0sQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQStDLENBQ3BGLENBQUM7UUFLQSxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFrQixDQUFDO1FBQzdFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxlQUFlLENBQWtCLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztJQUNsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTLENBQUMsTUFBaUM7UUFDekMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRDs7O09BR0c7SUFDSCxvQkFBb0IsQ0FBQyxNQUF1QixFQUFFLFVBQWlDO1FBQzdFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyRCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLFFBQVEsRUFBRSxHQUFHLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVMsQ0FBQyxHQUFXLEVBQUUsTUFBd0M7UUFDN0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7ZUFDdkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDO2VBQ3JDLEVBQUUsQ0FBQztRQUVSLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztZQUN2QyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUNYLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFFMUQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU8sV0FBVyxDQUFDLFFBQWdCLEVBQUUsTUFBd0M7UUFDNUUsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE9BQU8sUUFBUSxDQUFDO1NBQ2pCO1FBQ0QsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFZLEVBQUUsRUFBRTtZQUM1RCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztnQkFDaEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3RCLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDWixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxhQUFhLENBQUMsTUFBaUM7UUFDckQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE9BQU8sY0FBYyxDQUFDO1NBQ3ZCO1FBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFNUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ2hDLE9BQU8sVUFBVSxDQUFDO1NBQ25CO1FBRUQsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwRCxRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssSUFBSTtnQkFDUCxPQUFPLE9BQU8sQ0FBQztZQUNqQixLQUFLLElBQUk7Z0JBQ1AsT0FBTyxPQUFPLENBQUM7WUFDakIsS0FBSyxJQUFJO2dCQUNQLE9BQU8sT0FBTyxDQUFDO1lBQ2pCO2dCQUNFLE9BQU8sY0FBYyxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVPLFdBQVcsQ0FBQyxNQUFjO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBeUIsQ0FBQyxDQUFDO0lBQzFELENBQUM7K0dBekZVLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzRGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBMT0NBTEVfSUQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCBwdEJSIGZyb20gJy4uL2xvY2FsZS9wdC1CUi5qc29uJztcbmltcG9ydCBlblVTIGZyb20gJy4uL2xvY2FsZS9lbi1VUy5qc29uJztcbmltcG9ydCBlc0VTIGZyb20gJy4uL2xvY2FsZS9lcy1FUy5qc29uJztcblxuZXhwb3J0IHR5cGUgU3VwcG9ydGVkTG9jYWxlID0gJ3B0LUJSJyB8ICdlbi1VUycgfCAnZXMtRVMnO1xuXG5leHBvcnQgdHlwZSBUcmFuc2xhdGlvbkRpY3Rpb25hcnkgPSBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTE9DQUxFOiBTdXBwb3J0ZWRMb2NhbGUgPSAncHQtQlInO1xuXG5jb25zdCBCVUlMVF9JTl9UUkFOU0xBVElPTlM6IFJlYWRvbmx5PFJlY29yZDxTdXBwb3J0ZWRMb2NhbGUsIFRyYW5zbGF0aW9uRGljdGlvbmFyeT4+ID0ge1xuICAncHQtQlInOiBwdEJSIGFzIFRyYW5zbGF0aW9uRGljdGlvbmFyeSxcbiAgJ2VuLVVTJzogZW5VUyBhcyBUcmFuc2xhdGlvbkRpY3Rpb25hcnksXG4gICdlcy1FUyc6IGVzRVMgYXMgVHJhbnNsYXRpb25EaWN0aW9uYXJ5LFxufTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRpb25TZXJ2aWNlIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0aW9ucyA9IG5ldyBNYXA8U3VwcG9ydGVkTG9jYWxlLCBUcmFuc2xhdGlvbkRpY3Rpb25hcnk+KFxuICAgIE9iamVjdC5lbnRyaWVzKEJVSUxUX0lOX1RSQU5TTEFUSU9OUykgYXMgW1N1cHBvcnRlZExvY2FsZSwgVHJhbnNsYXRpb25EaWN0aW9uYXJ5XVtdXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhbGVTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8U3VwcG9ydGVkTG9jYWxlPjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBhbmd1bGFyTG9jYWxlID0gaW5qZWN0KExPQ0FMRV9JRCwgeyBvcHRpb25hbDogdHJ1ZSB9KSBhcyBzdHJpbmcgfCBudWxsO1xuICAgIHRoaXMubG9jYWxlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3VwcG9ydGVkTG9jYWxlPih0aGlzLnJlc29sdmVMb2NhbGUoYW5ndWxhckxvY2FsZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudGx5IGFjdGl2ZSBsb2NhbGUuXG4gICAqL1xuICBnZXRMb2NhbGUoKTogU3VwcG9ydGVkTG9jYWxlIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGVTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZSB0aGUgYWN0aXZlIGxvY2FsZS4gRmFsbHMgYmFjayB0byB0aGUgZGVmYXVsdCBpZiB1bnN1cHBvcnRlZC5cbiAgICovXG4gIHNldExvY2FsZShsb2NhbGU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLmxvY2FsZVN1YmplY3QubmV4dCh0aGlzLnJlc29sdmVMb2NhbGUobG9jYWxlKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgb3Igb3ZlcnJpZGUgdHJhbnNsYXRpb25zIGZvciBhIGdpdmVuIGxvY2FsZS5cbiAgICogVXNlZnVsIGZvciBjb25zdW1lcnMgdGhhdCB3YW50IHRvIGN1c3RvbWl6ZSB0aGUgYnVpbHQtaW4gbWVzc2FnZXMuXG4gICAqL1xuICByZWdpc3RlclRyYW5zbGF0aW9ucyhsb2NhbGU6IFN1cHBvcnRlZExvY2FsZSwgZGljdGlvbmFyeTogVHJhbnNsYXRpb25EaWN0aW9uYXJ5KTogdm9pZCB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLnRyYW5zbGF0aW9ucy5nZXQobG9jYWxlKSA/PyB7fTtcbiAgICB0aGlzLnRyYW5zbGF0aW9ucy5zZXQobG9jYWxlLCB7IC4uLmV4aXN0aW5nLCAuLi5kaWN0aW9uYXJ5IH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zbGF0ZSBhIGtleSB1c2luZyB0aGUgYWN0aXZlIGxvY2FsZSwgd2l0aCBvcHRpb25hbCBwbGFjZWhvbGRlciBpbnRlcnBvbGF0aW9uLlxuICAgKiBQbGFjZWhvbGRlcnMgdXNlIHtuYW1lfSBzeW50YXguIElmIHRoZSBrZXkgaXMgbm90IGZvdW5kLCB0aGUga2V5IGl0c2VsZiBpcyByZXR1cm5lZC5cbiAgICovXG4gIHRyYW5zbGF0ZShrZXk6IHN0cmluZywgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPik6IHN0cmluZyB7XG4gICAgY29uc3QgZGljdCA9IHRoaXMudHJhbnNsYXRpb25zLmdldCh0aGlzLmxvY2FsZVN1YmplY3QudmFsdWUpXG4gICAgICA/PyB0aGlzLnRyYW5zbGF0aW9ucy5nZXQoREVGQVVMVF9MT0NBTEUpXG4gICAgICA/PyB7fTtcblxuICAgIGNvbnN0IHRlbXBsYXRlID0gT2JqZWN0Lmhhc093bihkaWN0LCBrZXkpXG4gICAgICA/IGRpY3Rba2V5XVxuICAgICAgOiAodGhpcy50cmFuc2xhdGlvbnMuZ2V0KERFRkFVTFRfTE9DQUxFKT8uW2tleV0gPz8ga2V5KTtcblxuICAgIHJldHVybiB0aGlzLmludGVycG9sYXRlKHRlbXBsYXRlLCBwYXJhbXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnRlcnBvbGF0ZSh0ZW1wbGF0ZTogc3RyaW5nLCBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+KTogc3RyaW5nIHtcbiAgICBpZiAoIXBhcmFtcykge1xuICAgICAgcmV0dXJuIHRlbXBsYXRlO1xuICAgIH1cbiAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvXFx7KFxcdyspXFx9L2csIChtYXRjaCwgbmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gT2JqZWN0Lmhhc093bihwYXJhbXMsIG5hbWUpXG4gICAgICAgID8gU3RyaW5nKHBhcmFtc1tuYW1lXSlcbiAgICAgICAgOiBtYXRjaDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUxvY2FsZShsb2NhbGU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBTdXBwb3J0ZWRMb2NhbGUge1xuICAgIGlmICghbG9jYWxlKSB7XG4gICAgICByZXR1cm4gREVGQVVMVF9MT0NBTEU7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IGxvY2FsZS5yZXBsYWNlKCdfJywgJy0nKTtcblxuICAgIGlmICh0aGlzLmlzU3VwcG9ydGVkKG5vcm1hbGl6ZWQpKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplZDtcbiAgICB9XG5cbiAgICBjb25zdCBsYW5nID0gbm9ybWFsaXplZC5zcGxpdCgnLScpWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgc3dpdGNoIChsYW5nKSB7XG4gICAgICBjYXNlICdwdCc6XG4gICAgICAgIHJldHVybiAncHQtQlInO1xuICAgICAgY2FzZSAnZW4nOlxuICAgICAgICByZXR1cm4gJ2VuLVVTJztcbiAgICAgIGNhc2UgJ2VzJzpcbiAgICAgICAgcmV0dXJuICdlcy1FUyc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gREVGQVVMVF9MT0NBTEU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc1N1cHBvcnRlZChsb2NhbGU6IHN0cmluZyk6IGxvY2FsZSBpcyBTdXBwb3J0ZWRMb2NhbGUge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9ucy5oYXMobG9jYWxlIGFzIFN1cHBvcnRlZExvY2FsZSk7XG4gIH1cbn1cbiJdfQ==