valtech-components 2.0.829 → 2.0.831
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/esm2022/lib/components/organisms/debug-console/config.mjs +44 -0
- package/esm2022/lib/components/organisms/debug-console/debug-console.component.mjs +237 -0
- package/esm2022/lib/components/organisms/debug-console/types.mjs +12 -0
- package/esm2022/lib/services/app-version/app-version.service.mjs +10 -1
- package/esm2022/lib/services/auth/auth.service.mjs +26 -6
- package/esm2022/lib/services/firebase/notifications.service.mjs +1 -1
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/public-api.mjs +4 -1
- package/fesm2022/valtech-components.mjs +324 -7
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +1 -1
- package/lib/components/organisms/article/article.component.d.ts +2 -2
- package/lib/components/organisms/debug-console/config.d.ts +37 -0
- package/lib/components/organisms/debug-console/debug-console.component.d.ts +44 -0
- package/lib/components/organisms/debug-console/types.d.ts +27 -0
- package/lib/components/organisms/toolbar/toolbar.component.d.ts +1 -1
- package/lib/services/firebase/notifications.service.d.ts +0 -2
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +3 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DebugConsole Provider
|
|
3
|
+
*
|
|
4
|
+
* Provider e injection token para el overlay de logs `val-debug-console`.
|
|
5
|
+
*/
|
|
6
|
+
import { InjectionToken, makeEnvironmentProviders } from '@angular/core';
|
|
7
|
+
import { DEFAULT_DEBUG_CONSOLE_CONFIG } from './types';
|
|
8
|
+
/**
|
|
9
|
+
* Token de inyección para la configuración de DebugConsole.
|
|
10
|
+
*/
|
|
11
|
+
export const VALTECH_DEBUG_CONSOLE = new InjectionToken('ValtechDebugConsole');
|
|
12
|
+
/**
|
|
13
|
+
* Provee el overlay de logs `val-debug-console` a la aplicación Angular.
|
|
14
|
+
*
|
|
15
|
+
* El componente parchea `console.*` para espejar cada llamada a un panel en
|
|
16
|
+
* pantalla — útil para leer logs en un PWA iOS añadido al home screen, donde
|
|
17
|
+
* la consola del navegador no es accesible.
|
|
18
|
+
*
|
|
19
|
+
* El gate `enabled` lo decide la app (la lib no puede importar su
|
|
20
|
+
* `environment`). Sin provider, el componente queda inerte (`enabled: false`).
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* // main.ts
|
|
25
|
+
* import { provideValtechDebugConsole } from 'valtech-components';
|
|
26
|
+
* import { environment } from './environments/environment';
|
|
27
|
+
*
|
|
28
|
+
* bootstrapApplication(AppComponent, {
|
|
29
|
+
* providers: [
|
|
30
|
+
* provideValtechDebugConsole({ enabled: !environment.production }),
|
|
31
|
+
* ],
|
|
32
|
+
* });
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* Luego declarar `<val-debug-console />` una vez en el componente raíz.
|
|
36
|
+
*/
|
|
37
|
+
export function provideValtechDebugConsole(config = {}) {
|
|
38
|
+
const mergedConfig = {
|
|
39
|
+
...DEFAULT_DEBUG_CONSOLE_CONFIG,
|
|
40
|
+
...config,
|
|
41
|
+
};
|
|
42
|
+
return makeEnvironmentProviders([{ provide: VALTECH_DEBUG_CONSOLE, useValue: mergedConfig }]);
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9kZWJ1Zy1jb25zb2xlL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUF3QixjQUFjLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0YsT0FBTyxFQUFzQiw0QkFBNEIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUUzRTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUNyRCxxQkFBcUIsQ0FDdEIsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsU0FBNkIsRUFBRTtJQUN4RSxNQUFNLFlBQVksR0FBaUM7UUFDakQsR0FBRyw0QkFBNEI7UUFDL0IsR0FBRyxNQUFNO0tBQ1YsQ0FBQztJQUVGLE9BQU8sd0JBQXdCLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERlYnVnQ29uc29sZSBQcm92aWRlclxuICpcbiAqIFByb3ZpZGVyIGUgaW5qZWN0aW9uIHRva2VuIHBhcmEgZWwgb3ZlcmxheSBkZSBsb2dzIGB2YWwtZGVidWctY29uc29sZWAuXG4gKi9cblxuaW1wb3J0IHsgRW52aXJvbm1lbnRQcm92aWRlcnMsIEluamVjdGlvblRva2VuLCBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRGVidWdDb25zb2xlQ29uZmlnLCBERUZBVUxUX0RFQlVHX0NPTlNPTEVfQ09ORklHIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogVG9rZW4gZGUgaW55ZWNjacOzbiBwYXJhIGxhIGNvbmZpZ3VyYWNpw7NuIGRlIERlYnVnQ29uc29sZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFZBTFRFQ0hfREVCVUdfQ09OU09MRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxSZXF1aXJlZDxEZWJ1Z0NvbnNvbGVDb25maWc+PihcbiAgJ1ZhbHRlY2hEZWJ1Z0NvbnNvbGUnXG4pO1xuXG4vKipcbiAqIFByb3ZlZSBlbCBvdmVybGF5IGRlIGxvZ3MgYHZhbC1kZWJ1Zy1jb25zb2xlYCBhIGxhIGFwbGljYWNpw7NuIEFuZ3VsYXIuXG4gKlxuICogRWwgY29tcG9uZW50ZSBwYXJjaGVhIGBjb25zb2xlLipgIHBhcmEgZXNwZWphciBjYWRhIGxsYW1hZGEgYSB1biBwYW5lbCBlblxuICogcGFudGFsbGEg4oCUIMO6dGlsIHBhcmEgbGVlciBsb2dzIGVuIHVuIFBXQSBpT1MgYcOxYWRpZG8gYWwgaG9tZSBzY3JlZW4sIGRvbmRlXG4gKiBsYSBjb25zb2xhIGRlbCBuYXZlZ2Fkb3Igbm8gZXMgYWNjZXNpYmxlLlxuICpcbiAqIEVsIGdhdGUgYGVuYWJsZWRgIGxvIGRlY2lkZSBsYSBhcHAgKGxhIGxpYiBubyBwdWVkZSBpbXBvcnRhciBzdVxuICogYGVudmlyb25tZW50YCkuIFNpbiBwcm92aWRlciwgZWwgY29tcG9uZW50ZSBxdWVkYSBpbmVydGUgKGBlbmFibGVkOiBmYWxzZWApLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBtYWluLnRzXG4gKiBpbXBvcnQgeyBwcm92aWRlVmFsdGVjaERlYnVnQ29uc29sZSB9IGZyb20gJ3ZhbHRlY2gtY29tcG9uZW50cyc7XG4gKiBpbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJy4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50JztcbiAqXG4gKiBib290c3RyYXBBcHBsaWNhdGlvbihBcHBDb21wb25lbnQsIHtcbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAgcHJvdmlkZVZhbHRlY2hEZWJ1Z0NvbnNvbGUoeyBlbmFibGVkOiAhZW52aXJvbm1lbnQucHJvZHVjdGlvbiB9KSxcbiAqICAgXSxcbiAqIH0pO1xuICogYGBgXG4gKlxuICogTHVlZ28gZGVjbGFyYXIgYDx2YWwtZGVidWctY29uc29sZSAvPmAgdW5hIHZleiBlbiBlbCBjb21wb25lbnRlIHJhw616LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVZhbHRlY2hEZWJ1Z0NvbnNvbGUoY29uZmlnOiBEZWJ1Z0NvbnNvbGVDb25maWcgPSB7fSk6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgY29uc3QgbWVyZ2VkQ29uZmlnOiBSZXF1aXJlZDxEZWJ1Z0NvbnNvbGVDb25maWc+ID0ge1xuICAgIC4uLkRFRkFVTFRfREVCVUdfQ09OU09MRV9DT05GSUcsXG4gICAgLi4uY29uZmlnLFxuICB9O1xuXG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW3sgcHJvdmlkZTogVkFMVEVDSF9ERUJVR19DT05TT0xFLCB1c2VWYWx1ZTogbWVyZ2VkQ29uZmlnIH1dKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';
|
|
2
|
+
import { VALTECH_DEBUG_CONSOLE } from './config';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* `val-debug-console` — overlay de logs en pantalla para diagnóstico.
|
|
6
|
+
*
|
|
7
|
+
* Herramienta de desarrollo. Permite leer los `console.*` desde un PWA en iOS
|
|
8
|
+
* añadido a la pantalla de inicio, donde la consola del navegador no es
|
|
9
|
+
* accesible.
|
|
10
|
+
*
|
|
11
|
+
* Comportamiento:
|
|
12
|
+
* - Monkey-patch de `console.log/warn/error/info`: cada llamada también empuja
|
|
13
|
+
* una entrada al buffer (últimas ~150) además de llamar al `console` original.
|
|
14
|
+
* - Botón flotante (esquina) que abre/cierra un panel scrollable con las
|
|
15
|
+
* entradas más nuevas abajo, coloreadas por nivel.
|
|
16
|
+
* - Botones "copiar" (al portapapeles) y "limpiar".
|
|
17
|
+
*
|
|
18
|
+
* Gate maestro vía `provideValtechDebugConsole({ enabled })` en `main.ts`. Sin
|
|
19
|
+
* provider — o con `enabled: false` — el componente NO parchea `console` y NO
|
|
20
|
+
* renderiza nada. La app decide el valor (normalmente `!environment.production`).
|
|
21
|
+
*
|
|
22
|
+
* i18n: NO usa i18n a propósito — es un dev-tool que ningún end-user ve;
|
|
23
|
+
* los labels van en español plano.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* // main.ts
|
|
28
|
+
* provideValtechDebugConsole({ enabled: !environment.production }),
|
|
29
|
+
* ```
|
|
30
|
+
* ```html
|
|
31
|
+
* <!-- componente raíz, una sola vez -->
|
|
32
|
+
* <val-debug-console />
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
/** Máximo de entradas retenidas en el buffer. */
|
|
36
|
+
const MAX_ENTRIES = 150;
|
|
37
|
+
export class DebugConsoleComponent {
|
|
38
|
+
constructor() {
|
|
39
|
+
/** Gate maestro: `false` (sin provider o `enabled: false`) → todo inerte. */
|
|
40
|
+
this.enabled = inject(VALTECH_DEBUG_CONSOLE, { optional: true })?.enabled ?? false;
|
|
41
|
+
this.open = signal(false);
|
|
42
|
+
this.entries = signal([]);
|
|
43
|
+
/**
|
|
44
|
+
* Buffer plano (NO signal). `console.log` puede invocarse dentro de un
|
|
45
|
+
* `effect()`/`computed()`; escribir el signal `entries` ahí mismo dispara
|
|
46
|
+
* NG0600. Acumulamos en este array y volcamos al signal en un microtask,
|
|
47
|
+
* fuera de todo contexto reactivo.
|
|
48
|
+
*/
|
|
49
|
+
this.buffer = [];
|
|
50
|
+
this.flushScheduled = false;
|
|
51
|
+
/** Referencias a los métodos originales para restaurarlos en destroy. */
|
|
52
|
+
this.original = {};
|
|
53
|
+
}
|
|
54
|
+
ngOnInit() {
|
|
55
|
+
if (!this.enabled)
|
|
56
|
+
return;
|
|
57
|
+
this.patchConsole();
|
|
58
|
+
}
|
|
59
|
+
ngOnDestroy() {
|
|
60
|
+
if (!this.enabled)
|
|
61
|
+
return;
|
|
62
|
+
this.restoreConsole();
|
|
63
|
+
}
|
|
64
|
+
toggle() {
|
|
65
|
+
this.open.update(v => !v);
|
|
66
|
+
}
|
|
67
|
+
clear() {
|
|
68
|
+
this.buffer = [];
|
|
69
|
+
this.entries.set([]);
|
|
70
|
+
}
|
|
71
|
+
async copy() {
|
|
72
|
+
const text = this.entries()
|
|
73
|
+
.map(e => `${e.ts} [${e.level}] ${e.text}`)
|
|
74
|
+
.join('\n');
|
|
75
|
+
try {
|
|
76
|
+
await navigator.clipboard.writeText(text);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// Fallback para WebViews sin Clipboard API.
|
|
80
|
+
const ta = document.createElement('textarea');
|
|
81
|
+
ta.value = text;
|
|
82
|
+
ta.style.position = 'fixed';
|
|
83
|
+
ta.style.opacity = '0';
|
|
84
|
+
document.body.appendChild(ta);
|
|
85
|
+
ta.select();
|
|
86
|
+
try {
|
|
87
|
+
document.execCommand('copy');
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
/* sin recurso de copia disponible */
|
|
91
|
+
}
|
|
92
|
+
document.body.removeChild(ta);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/** Reemplaza los métodos de `console` para espejar cada llamada al buffer. */
|
|
96
|
+
patchConsole() {
|
|
97
|
+
const levels = ['log', 'warn', 'error', 'info'];
|
|
98
|
+
for (const level of levels) {
|
|
99
|
+
const orig = console[level].bind(console);
|
|
100
|
+
this.original[level] = orig;
|
|
101
|
+
console[level] = (...args) => {
|
|
102
|
+
orig(...args);
|
|
103
|
+
this.push(level, args);
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/** Restaura los métodos originales de `console`. */
|
|
108
|
+
restoreConsole() {
|
|
109
|
+
for (const level of Object.keys(this.original)) {
|
|
110
|
+
const orig = this.original[level];
|
|
111
|
+
if (orig) {
|
|
112
|
+
console[level] = orig;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
this.original = {};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Agrega una entrada al buffer plano y programa el volcado al signal.
|
|
119
|
+
* El volcado se difiere a un microtask: `console.log` puede llamarse desde
|
|
120
|
+
* dentro de un `effect()`, y escribir un signal ahí lanzaría NG0600.
|
|
121
|
+
*/
|
|
122
|
+
push(level, args) {
|
|
123
|
+
const text = args.map(a => this.stringify(a)).join(' ');
|
|
124
|
+
const ts = new Date().toISOString().slice(11, 23);
|
|
125
|
+
this.buffer.push({ ts, level, text });
|
|
126
|
+
if (this.buffer.length > MAX_ENTRIES) {
|
|
127
|
+
this.buffer = this.buffer.slice(this.buffer.length - MAX_ENTRIES);
|
|
128
|
+
}
|
|
129
|
+
this.scheduleFlush();
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Vuelca el buffer al signal `entries` en un microtask — fuera del contexto
|
|
133
|
+
* reactivo desde el que se haya llamado `console.log`. Batchea: múltiples
|
|
134
|
+
* logs del mismo tick resultan en una sola escritura del signal.
|
|
135
|
+
*/
|
|
136
|
+
scheduleFlush() {
|
|
137
|
+
if (this.flushScheduled)
|
|
138
|
+
return;
|
|
139
|
+
this.flushScheduled = true;
|
|
140
|
+
queueMicrotask(() => {
|
|
141
|
+
this.flushScheduled = false;
|
|
142
|
+
this.entries.set([...this.buffer]);
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
/** Convierte cualquier argumento a una representación legible de una línea. */
|
|
146
|
+
stringify(value) {
|
|
147
|
+
if (typeof value === 'string')
|
|
148
|
+
return value;
|
|
149
|
+
if (value instanceof Error)
|
|
150
|
+
return `${value.name}: ${value.message}`;
|
|
151
|
+
try {
|
|
152
|
+
return JSON.stringify(value);
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
return String(value);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DebugConsoleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
159
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DebugConsoleComponent, isStandalone: true, selector: "val-debug-console", ngImport: i0, template: `
|
|
160
|
+
@if (enabled) {
|
|
161
|
+
<button
|
|
162
|
+
type="button"
|
|
163
|
+
class="dbg-fab"
|
|
164
|
+
(click)="toggle()"
|
|
165
|
+
[attr.aria-label]="open() ? 'Cerrar consola' : 'Abrir consola'"
|
|
166
|
+
>
|
|
167
|
+
{{ open() ? '×' : '‹/›' }}
|
|
168
|
+
@if (!open() && entries().length) {
|
|
169
|
+
<span class="dbg-fab__count">{{ entries().length }}</span>
|
|
170
|
+
}
|
|
171
|
+
</button>
|
|
172
|
+
|
|
173
|
+
@if (open()) {
|
|
174
|
+
<div class="dbg-panel" role="log">
|
|
175
|
+
<div class="dbg-panel__bar">
|
|
176
|
+
<span class="dbg-panel__title"> Debug · {{ entries().length }} </span>
|
|
177
|
+
<span class="dbg-panel__actions">
|
|
178
|
+
<button type="button" (click)="copy()">copiar</button>
|
|
179
|
+
<button type="button" (click)="clear()">limpiar</button>
|
|
180
|
+
</span>
|
|
181
|
+
</div>
|
|
182
|
+
<div class="dbg-panel__body">
|
|
183
|
+
@for (e of entries(); track $index) {
|
|
184
|
+
<div class="dbg-line" [class]="'dbg-line--' + e.level">
|
|
185
|
+
<span class="dbg-line__ts">{{ e.ts }}</span>
|
|
186
|
+
<span class="dbg-line__text">{{ e.text }}</span>
|
|
187
|
+
</div>
|
|
188
|
+
} @empty {
|
|
189
|
+
<div class="dbg-empty">Sin logs todavía.</div>
|
|
190
|
+
}
|
|
191
|
+
</div>
|
|
192
|
+
</div>
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
`, isInline: true, styles: [":host{position:fixed;z-index:2147483000;inset:auto 0 0 auto;pointer-events:none}.dbg-fab,.dbg-panel{pointer-events:auto}.dbg-fab{position:fixed;right:calc(12px + env(safe-area-inset-right,0px));bottom:calc(12px + env(safe-area-inset-bottom,0px));width:48px;height:48px;border-radius:50%;border:0;background:#1a1a1a;color:#fff;font-size:16px;font-weight:700;cursor:pointer;box-shadow:0 2px 10px #0006;display:flex;align-items:center;justify-content:center}.dbg-fab__count{position:absolute;top:-4px;right:-4px;min-width:18px;height:18px;padding:0 4px;border-radius:9px;background:#d33;color:#fff;font-size:11px;line-height:18px;text-align:center}.dbg-panel{position:fixed;right:calc(8px + env(safe-area-inset-right,0px));left:calc(8px + env(safe-area-inset-left,0px));bottom:calc(68px + env(safe-area-inset-bottom,0px));max-width:560px;margin:0 auto;max-height:55vh;display:flex;flex-direction:column;background:#101010;color:#eee;border-radius:10px;box-shadow:0 6px 24px #00000080;overflow:hidden;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.dbg-panel__bar{display:flex;align-items:center;justify-content:space-between;padding:8px 10px;background:#1c1c1c;border-bottom:1px solid #2c2c2c}.dbg-panel__title{font-size:12px;font-weight:700}.dbg-panel__actions button{margin-left:8px;background:#2c2c2c;color:#eee;border:0;border-radius:6px;padding:4px 10px;font-size:11px;cursor:pointer}.dbg-panel__body{overflow-y:auto;padding:6px 8px;-webkit-overflow-scrolling:touch}.dbg-line{display:flex;gap:6px;padding:3px 0;font-size:11px;line-height:1.4;border-bottom:1px solid rgba(255,255,255,.04);word-break:break-word}.dbg-line__ts{flex-shrink:0;color:#777}.dbg-line__text{white-space:pre-wrap}.dbg-line--log .dbg-line__text{color:#ddd}.dbg-line--info .dbg-line__text{color:#6cb6ff}.dbg-line--warn .dbg-line__text{color:#f1c40f}.dbg-line--error .dbg-line__text{color:#ff6b6b}.dbg-empty{padding:12px;font-size:11px;color:#777;text-align:center}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
196
|
+
}
|
|
197
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DebugConsoleComponent, decorators: [{
|
|
198
|
+
type: Component,
|
|
199
|
+
args: [{ selector: 'val-debug-console', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
200
|
+
@if (enabled) {
|
|
201
|
+
<button
|
|
202
|
+
type="button"
|
|
203
|
+
class="dbg-fab"
|
|
204
|
+
(click)="toggle()"
|
|
205
|
+
[attr.aria-label]="open() ? 'Cerrar consola' : 'Abrir consola'"
|
|
206
|
+
>
|
|
207
|
+
{{ open() ? '×' : '‹/›' }}
|
|
208
|
+
@if (!open() && entries().length) {
|
|
209
|
+
<span class="dbg-fab__count">{{ entries().length }}</span>
|
|
210
|
+
}
|
|
211
|
+
</button>
|
|
212
|
+
|
|
213
|
+
@if (open()) {
|
|
214
|
+
<div class="dbg-panel" role="log">
|
|
215
|
+
<div class="dbg-panel__bar">
|
|
216
|
+
<span class="dbg-panel__title"> Debug · {{ entries().length }} </span>
|
|
217
|
+
<span class="dbg-panel__actions">
|
|
218
|
+
<button type="button" (click)="copy()">copiar</button>
|
|
219
|
+
<button type="button" (click)="clear()">limpiar</button>
|
|
220
|
+
</span>
|
|
221
|
+
</div>
|
|
222
|
+
<div class="dbg-panel__body">
|
|
223
|
+
@for (e of entries(); track $index) {
|
|
224
|
+
<div class="dbg-line" [class]="'dbg-line--' + e.level">
|
|
225
|
+
<span class="dbg-line__ts">{{ e.ts }}</span>
|
|
226
|
+
<span class="dbg-line__text">{{ e.text }}</span>
|
|
227
|
+
</div>
|
|
228
|
+
} @empty {
|
|
229
|
+
<div class="dbg-empty">Sin logs todavía.</div>
|
|
230
|
+
}
|
|
231
|
+
</div>
|
|
232
|
+
</div>
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
`, styles: [":host{position:fixed;z-index:2147483000;inset:auto 0 0 auto;pointer-events:none}.dbg-fab,.dbg-panel{pointer-events:auto}.dbg-fab{position:fixed;right:calc(12px + env(safe-area-inset-right,0px));bottom:calc(12px + env(safe-area-inset-bottom,0px));width:48px;height:48px;border-radius:50%;border:0;background:#1a1a1a;color:#fff;font-size:16px;font-weight:700;cursor:pointer;box-shadow:0 2px 10px #0006;display:flex;align-items:center;justify-content:center}.dbg-fab__count{position:absolute;top:-4px;right:-4px;min-width:18px;height:18px;padding:0 4px;border-radius:9px;background:#d33;color:#fff;font-size:11px;line-height:18px;text-align:center}.dbg-panel{position:fixed;right:calc(8px + env(safe-area-inset-right,0px));left:calc(8px + env(safe-area-inset-left,0px));bottom:calc(68px + env(safe-area-inset-bottom,0px));max-width:560px;margin:0 auto;max-height:55vh;display:flex;flex-direction:column;background:#101010;color:#eee;border-radius:10px;box-shadow:0 6px 24px #00000080;overflow:hidden;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.dbg-panel__bar{display:flex;align-items:center;justify-content:space-between;padding:8px 10px;background:#1c1c1c;border-bottom:1px solid #2c2c2c}.dbg-panel__title{font-size:12px;font-weight:700}.dbg-panel__actions button{margin-left:8px;background:#2c2c2c;color:#eee;border:0;border-radius:6px;padding:4px 10px;font-size:11px;cursor:pointer}.dbg-panel__body{overflow-y:auto;padding:6px 8px;-webkit-overflow-scrolling:touch}.dbg-line{display:flex;gap:6px;padding:3px 0;font-size:11px;line-height:1.4;border-bottom:1px solid rgba(255,255,255,.04);word-break:break-word}.dbg-line__ts{flex-shrink:0;color:#777}.dbg-line__text{white-space:pre-wrap}.dbg-line--log .dbg-line__text{color:#ddd}.dbg-line--info .dbg-line__text{color:#6cb6ff}.dbg-line--warn .dbg-line__text{color:#f1c40f}.dbg-line--error .dbg-line__text{color:#ff6b6b}.dbg-empty{padding:12px;font-size:11px;color:#777;text-align:center}\n"] }]
|
|
236
|
+
}] });
|
|
237
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWctY29uc29sZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2RlYnVnLWNvbnNvbGUvZGVidWctY29uc29sZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV0RyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBR2pEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFFSCxpREFBaUQ7QUFDakQsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBNkN4QixNQUFNLE9BQU8scUJBQXFCO0lBM0NsQztRQTRDRSw2RUFBNkU7UUFDcEUsWUFBTyxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sSUFBSSxLQUFLLENBQUM7UUFFOUUsU0FBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixZQUFPLEdBQUcsTUFBTSxDQUFrQixFQUFFLENBQUMsQ0FBQztRQUUvQzs7Ozs7V0FLRztRQUNLLFdBQU0sR0FBb0IsRUFBRSxDQUFDO1FBQzdCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBRS9CLHlFQUF5RTtRQUNqRSxhQUFRLEdBQWlFLEVBQUUsQ0FBQztLQTJHckY7SUF6R0MsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFDMUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUMxQixJQUFJLENBQUMsY0FBYyxFQUFFLENB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T0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQzsrR0EzSFUscUJBQXFCO21HQUFyQixxQkFBcUIsNkVBdkN0Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0NUOzs0RkFHVSxxQkFBcUI7a0JBM0NqQyxTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sWUFDckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9DVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCwgT25EZXN0cm95LCBPbkluaXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBWQUxURUNIX0RFQlVHX0NPTlNPTEUgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBEZWJ1Z0xvZ0VudHJ5LCBEZWJ1Z0xvZ0xldmVsIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogYHZhbC1kZWJ1Zy1jb25zb2xlYCDigJQgb3ZlcmxheSBkZSBsb2dzIGVuIHBhbnRhbGxhIHBhcmEgZGlhZ27Ds3N0aWNvLlxuICpcbiAqIEhlcnJhbWllbnRhIGRlIGRlc2Fycm9sbG8uIFBlcm1pdGUgbGVlciBsb3MgYGNvbnNvbGUuKmAgZGVzZGUgdW4gUFdBIGVuIGlPU1xuICogYcOxYWRpZG8gYSBsYSBwYW50YWxsYSBkZSBpbmljaW8sIGRvbmRlIGxhIGNvbnNvbGEgZGVsIG5hdmVnYWRvciBubyBlc1xuICogYWNjZXNpYmxlLlxuICpcbiAqIENvbXBvcnRhbWllbnRvOlxuICogIC0gTW9ua2V5LXBhdGNoIGRlIGBjb25zb2xlLmxvZy93YXJuL2Vycm9yL2luZm9gOiBjYWRhIGxsYW1hZGEgdGFtYmnDqW4gZW1wdWphXG4gKiAgICB1bmEgZW50cmFkYSBhbCBidWZmZXIgKMO6bHRpbWFzIH4xNTApIGFkZW3DoXMgZGUgbGxhbWFyIGFsIGBjb25zb2xlYCBvcmlnaW5hbC5cbiAqICAtIEJvdMOzbiBmbG90YW50ZSAoZXNxdWluYSkgcXVlIGFicmUvY2llcnJhIHVuIHBhbmVsIHNjcm9sbGFibGUgY29uIGxhc1xuICogICAgZW50cmFkYXMgbcOhcyBudWV2YXMgYWJham8sIGNvbG9yZWFkYXMgcG9yIG5pdmVsLlxuICogIC0gQm90b25lcyBcImNvcGlhclwiIChhbCBwb3J0YXBhcGVsZXMpIHkgXCJsaW1waWFyXCIuXG4gKlxuICogR2F0ZSBtYWVzdHJvIHbDrWEgYHByb3ZpZGVWYWx0ZWNoRGVidWdDb25zb2xlKHsgZW5hYmxlZCB9KWAgZW4gYG1haW4udHNgLiBTaW5cbiAqIHByb3ZpZGVyIOKAlCBvIGNvbiBgZW5hYmxlZDogZmFsc2VgIOKAlCBlbCBjb21wb25lbnRlIE5PIHBhcmNoZWEgYGNvbnNvbGVgIHkgTk9cbiAqIHJlbmRlcml6YSBuYWRhLiBMYSBhcHAgZGVjaWRlIGVsIHZhbG9yIChub3JtYWxtZW50ZSBgIWVudmlyb25tZW50LnByb2R1Y3Rpb25gKS5cbiAqXG4gKiBpMThuOiBOTyB1c2EgaTE4biBhIHByb3DDs3NpdG8g4oCUIGVzIHVuIGRldi10b29sIHF1ZSBuaW5nw7puIGVuZC11c2VyIHZlO1xuICogbG9zIGxhYmVscyB2YW4gZW4gZXNwYcOxb2wgcGxhbm8uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIG1haW4udHNcbiAqIHByb3ZpZGVWYWx0ZWNoRGVidWdDb25zb2xlKHsgZW5hYmxlZDogIWVudmlyb25tZW50LnByb2R1Y3Rpb24gfSksXG4gKiBgYGBcbiAqIGBgYGh0bWxcbiAqIDwhLS0gY29tcG9uZW50ZSByYcOteiwgdW5hIHNvbGEgdmV6IC0tPlxuICogPHZhbC1kZWJ1Zy1jb25zb2xlIC8+XG4gKiBgYGBcbiAqL1xuXG4vKiogTcOheGltbyBkZSBlbnRyYWRhcyByZXRlbmlkYXMgZW4gZWwgYnVmZmVyLiAqL1xuY29uc3QgTUFYX0VOVFJJRVMgPSAxNTA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1kZWJ1Zy1jb25zb2xlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgXG4gICAgQGlmIChlbmFibGVkKSB7XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImRiZy1mYWJcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlKClcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIm9wZW4oKSA/ICdDZXJyYXIgY29uc29sYScgOiAnQWJyaXIgY29uc29sYSdcIlxuICAgICAgPlxuICAgICAgICB7eyBvcGVuKCkgPyAnw5cnIDogJ+KAuS/igLonIH19XG4gICAgICAgIEBpZiAoIW9wZW4oKSAmJiBlbnRyaWVzKCkubGVuZ3RoKSB7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJkYmctZmFiX19jb3VudFwiPnt7IGVudHJpZXMoKS5sZW5ndGggfX08L3NwYW4+XG4gICAgICAgIH1cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICBAaWYgKG9wZW4oKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZGJnLXBhbmVsXCIgcm9sZT1cImxvZ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYmctcGFuZWxfX2JhclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkYmctcGFuZWxfX3RpdGxlXCI+IERlYnVnIMK3IHt7IGVudHJpZXMoKS5sZW5ndGggfX0gPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkYmctcGFuZWxfX2FjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNvcHkoKVwiPmNvcGlhcjwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2xlYXIoKVwiPmxpbXBpYXI8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGJnLXBhbmVsX19ib2R5XCI+XG4gICAgICAgICAgICBAZm9yIChlIG9mIGVudHJpZXMoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYmctbGluZVwiIFtjbGFzc109XCInZGJnLWxpbmUtLScgKyBlLmxldmVsXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkYmctbGluZV9fdHNcIj57eyBlLnRzIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGJnLWxpbmVfX3RleHRcIj57eyBlLnRleHQgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZW1wdHkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGJnLWVtcHR5XCI+U2luIGxvZ3MgdG9kYXbDrWEuPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIH1cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vZGVidWctY29uc29sZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEZWJ1Z0NvbnNvbGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKiBHYXRlIG1hZXN0cm86IGBmYWxzZWAgKHNpbiBwcm92aWRlciBvIGBlbmFibGVkOiBmYWxzZWApIOKGkiB0b2RvIGluZXJ0ZS4gKi9cbiAgcmVhZG9ubHkgZW5hYmxlZCA9IGluamVjdChWQUxURUNIX0RFQlVHX0NPTlNPTEUsIHsgb3B0aW9uYWw6IHRydWUgfSk/LmVuYWJsZWQgPz8gZmFsc2U7XG5cbiAgcmVhZG9ubHkgb3BlbiA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGVudHJpZXMgPSBzaWduYWw8RGVidWdMb2dFbnRyeVtdPihbXSk7XG5cbiAgLyoqXG4gICAqIEJ1ZmZlciBwbGFubyAoTk8gc2lnbmFsKS4gYGNvbnNvbGUubG9nYCBwdWVkZSBpbnZvY2Fyc2UgZGVudHJvIGRlIHVuXG4gICAqIGBlZmZlY3QoKWAvYGNvbXB1dGVkKClgOyBlc2NyaWJpciBlbCBzaWduYWwgYGVudHJpZXNgIGFow60gbWlzbW8gZGlzcGFyYVxuICAgKiBORzA2MDAuIEFjdW11bGFtb3MgZW4gZXN0ZSBhcnJheSB5IHZvbGNhbW9zIGFsIHNpZ25hbCBlbiB1biBtaWNyb3Rhc2ssXG4gICAqIGZ1ZXJhIGRlIHRvZG8gY29udGV4dG8gcmVhY3Rpdm8uXG4gICAqL1xuICBwcml2YXRlIGJ1ZmZlcjogRGVidWdMb2dFbnRyeVtdID0gW107XG4gIHByaXZhdGUgZmx1c2hTY2hlZHVsZWQgPSBmYWxzZTtcblxuICAvKiogUmVmZXJlbmNpYXMgYSBsb3MgbcOpdG9kb3Mgb3JpZ2luYWxlcyBwYXJhIHJlc3RhdXJhcmxvcyBlbiBkZXN0cm95LiAqL1xuICBwcml2YXRlIG9yaWdpbmFsOiBQYXJ0aWFsPFJlY29yZDxEZWJ1Z0xvZ0xldmVsLCAoLi4uYXJnczogdW5rbm93bltdKSA9PiB2b2lkPj4gPSB7fTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlZCkgcmV0dXJuO1xuICAgIHRoaXMucGF0Y2hDb25zb2xlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlZCkgcmV0dXJuO1xuICAgIHRoaXMucmVzdG9yZUNvbnNvbGUoKTtcbiAgfVxuXG4gIHRvZ2dsZSgpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW4udXBkYXRlKHYgPT4gIXYpO1xuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5idWZmZXIgPSBbXTtcbiAgICB0aGlzLmVudHJpZXMuc2V0KFtdKTtcbiAgfVxuXG4gIGFzeW5jIGNvcHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGV4dCA9IHRoaXMuZW50cmllcygpXG4gICAgICAubWFwKGUgPT4gYCR7ZS50c30gWyR7ZS5sZXZlbH1dICR7ZS50ZXh0fWApXG4gICAgICAuam9pbignXFxuJyk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gRmFsbGJhY2sgcGFyYSBXZWJWaWV3cyBzaW4gQ2xpcGJvYXJkIEFQSS5cbiAgICAgIGNvbnN0IHRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICAgIHRhLnZhbHVlID0gdGV4dDtcbiAgICAgIHRhLnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcbiAgICAgIHRhLnN0eWxlLm9wYWNpdHkgPSAnMCc7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRhKTtcbiAgICAgIHRhLnNlbGVjdCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvKiBzaW4gcmVjdXJzbyBkZSBjb3BpYSBkaXNwb25pYmxlICovXG4gICAgICB9XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRhKTtcbiAgICB9XG4gIH1cblxuICAvKiogUmVlbXBsYXphIGxvcyBtw6l0b2RvcyBkZSBgY29uc29sZWAgcGFyYSBlc3BlamFyIGNhZGEgbGxhbWFkYSBhbCBidWZmZXIuICovXG4gIHByaXZhdGUgcGF0Y2hDb25zb2xlKCk6IHZvaWQge1xuICAgIGNvbnN0IGxldmVsczogRGVidWdMb2dMZXZlbFtdID0gWydsb2cnLCAnd2FybicsICdlcnJvcicsICdpbmZvJ107XG4gICAgZm9yIChjb25zdCBsZXZlbCBvZiBsZXZlbHMpIHtcbiAgICAgIGNvbnN0IG9yaWcgPSBjb25zb2xlW2xldmVsXS5iaW5kKGNvbnNvbGUpIGFzICguLi5hOiB1bmtub3duW10pID0+IHZvaWQ7XG4gICAgICB0aGlzLm9yaWdpbmFsW2xldmVsXSA9IG9yaWc7XG4gICAgICBjb25zb2xlW2xldmVsXSA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICAgICAgb3JpZyguLi5hcmdzKTtcbiAgICAgICAgdGhpcy5wdXNoKGxldmVsLCBhcmdzKTtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqIFJlc3RhdXJhIGxvcyBtw6l0b2RvcyBvcmlnaW5hbGVzIGRlIGBjb25zb2xlYC4gKi9cbiAgcHJpdmF0ZSByZXN0b3JlQ29uc29sZSgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGxldmVsIG9mIE9iamVjdC5rZXlzKHRoaXMub3JpZ2luYWwpIGFzIERlYnVnTG9nTGV2ZWxbXSkge1xuICAgICAgY29uc3Qgb3JpZyA9IHRoaXMub3JpZ2luYWxbbGV2ZWxdO1xuICAgICAgaWYgKG9yaWcpIHtcbiAgICAgICAgY29uc29sZVtsZXZlbF0gPSBvcmlnO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9yaWdpbmFsID0ge307XG4gIH1cblxuICAvKipcbiAgICogQWdyZWdhIHVuYSBlbnRyYWRhIGFsIGJ1ZmZlciBwbGFubyB5IHByb2dyYW1hIGVsIHZvbGNhZG8gYWwgc2lnbmFsLlxuICAgKiBFbCB2b2xjYWRvIHNlIGRpZmllcmUgYSB1biBtaWNyb3Rhc2s6IGBjb25zb2xlLmxvZ2AgcHVlZGUgbGxhbWFyc2UgZGVzZGVcbiAgICogZGVudHJvIGRlIHVuIGBlZmZlY3QoKWAsIHkgZXNjcmliaXIgdW4gc2lnbmFsIGFow60gbGFuemFyw61hIE5HMDYwMC5cbiAgICovXG4gIHByaXZhdGUgcHVzaChsZXZlbDogRGVidWdMb2dMZXZlbCwgYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgY29uc3QgdGV4dCA9IGFyZ3MubWFwKGEgPT4gdGhpcy5zdHJpbmdpZnkoYSkpLmpvaW4oJyAnKTtcbiAgICBjb25zdCB0cyA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgxMSwgMjMpO1xuICAgIHRoaXMuYnVmZmVyLnB1c2goeyB0cywgbGV2ZWwsIHRleHQgfSk7XG4gICAgaWYgKHRoaXMuYnVmZmVyLmxlbmd0aCA+IE1BWF9FTlRSSUVTKSB7XG4gICAgICB0aGlzLmJ1ZmZlciA9IHRoaXMuYnVmZmVyLnNsaWNlKHRoaXMuYnVmZmVyLmxlbmd0aCAtIE1BWF9FTlRSSUVTKTtcbiAgICB9XG4gICAgdGhpcy5zY2hlZHVsZUZsdXNoKCk7XG4gIH1cblxuICAvKipcbiAgICogVnVlbGNhIGVsIGJ1ZmZlciBhbCBzaWduYWwgYGVudHJpZXNgIGVuIHVuIG1pY3JvdGFzayDigJQgZnVlcmEgZGVsIGNvbnRleHRvXG4gICAqIHJlYWN0aXZvIGRlc2RlIGVsIHF1ZSBzZSBoYXlhIGxsYW1hZG8gYGNvbnNvbGUubG9nYC4gQmF0Y2hlYTogbcO6bHRpcGxlc1xuICAgKiBsb2dzIGRlbCBtaXNtbyB0aWNrIHJlc3VsdGFuIGVuIHVuYSBzb2xhIGVzY3JpdHVyYSBkZWwgc2lnbmFsLlxuICAgKi9cbiAgcHJpdmF0ZSBzY2hlZHVsZUZsdXNoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZsdXNoU2NoZWR1bGVkKSByZXR1cm47XG4gICAgdGhpcy5mbHVzaFNjaGVkdWxlZCA9IHRydWU7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgdGhpcy5mbHVzaFNjaGVkdWxlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5lbnRyaWVzLnNldChbLi4udGhpcy5idWZmZXJdKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBDb252aWVydGUgY3VhbHF1aWVyIGFyZ3VtZW50byBhIHVuYSByZXByZXNlbnRhY2nDs24gbGVnaWJsZSBkZSB1bmEgbMOtbmVhLiAqL1xuICBwcml2YXRlIHN0cmluZ2lmeSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiB2YWx1ZTtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBFcnJvcikgcmV0dXJuIGAke3ZhbHVlLm5hbWV9OiAke3ZhbHVlLm1lc3NhZ2V9YDtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DebugConsole Types
|
|
3
|
+
*
|
|
4
|
+
* Tipos para el overlay de logs en pantalla (`val-debug-console`).
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Configuración por defecto: deshabilitado (inerte).
|
|
8
|
+
*/
|
|
9
|
+
export const DEFAULT_DEBUG_CONSOLE_CONFIG = {
|
|
10
|
+
enabled: false,
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2RlYnVnLWNvbnNvbGUvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQWFIOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQWlDO0lBQ3hFLE9BQU8sRUFBRSxLQUFLO0NBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGVidWdDb25zb2xlIFR5cGVzXG4gKlxuICogVGlwb3MgcGFyYSBlbCBvdmVybGF5IGRlIGxvZ3MgZW4gcGFudGFsbGEgKGB2YWwtZGVidWctY29uc29sZWApLlxuICovXG5cbi8qKlxuICogQ29uZmlndXJhY2nDs24gZGVsIHByb3ZlZWRvciBkZSBEZWJ1Z0NvbnNvbGUuXG4gKlxuICogQHByb3BlcnR5IGVuYWJsZWQgLSBHYXRlIG1hZXN0cm8uIEN1YW5kbyBlcyBgZmFsc2VgIGVsIGNvbXBvbmVudGUgTk8gcGFyY2hlYVxuICogICBgY29uc29sZWAgeSBOTyByZW5kZXJpemEgbmFkYS4gTGEgYXBwIGRlY2lkZSBlbCB2YWxvciDigJQgbm9ybWFsbWVudGVcbiAqICAgYCFlbnZpcm9ubWVudC5wcm9kdWN0aW9uYC4gU2luIHByb3ZpZGVyLCBlbCBkZWZhdWx0IGVzIGBmYWxzZWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVidWdDb25zb2xlQ29uZmlnIHtcbiAgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29uZmlndXJhY2nDs24gcG9yIGRlZmVjdG86IGRlc2hhYmlsaXRhZG8gKGluZXJ0ZSkuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0RFQlVHX0NPTlNPTEVfQ09ORklHOiBSZXF1aXJlZDxEZWJ1Z0NvbnNvbGVDb25maWc+ID0ge1xuICBlbmFibGVkOiBmYWxzZSxcbn07XG5cbi8qKiBOaXZlbCBkZSBsb2cgY2FwdHVyYWRvLiAqL1xuZXhwb3J0IHR5cGUgRGVidWdMb2dMZXZlbCA9ICdsb2cnIHwgJ3dhcm4nIHwgJ2Vycm9yJyB8ICdpbmZvJztcblxuLyoqIEVudHJhZGEgZGVsIGJ1ZmZlciBkZSBsb2dzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWJ1Z0xvZ0VudHJ5IHtcbiAgdHM6IHN0cmluZztcbiAgbGV2ZWw6IERlYnVnTG9nTGV2ZWw7XG4gIHRleHQ6IHN0cmluZztcbn1cbiJdfQ==
|
|
@@ -159,6 +159,15 @@ export class AppVersionService {
|
|
|
159
159
|
this.swUpdate.versionUpdates
|
|
160
160
|
.pipe(filter(evt => evt.type === 'VERSION_READY'), takeUntilDestroyed(this.destroyRef))
|
|
161
161
|
.subscribe(() => this.swUpdateReady.set(true));
|
|
162
|
+
// SW en estado irrecuperable — la caché del service worker se corrompió o
|
|
163
|
+
// fue parcialmente evictada (común en PWAs standalone de iOS tras deploys
|
|
164
|
+
// repetidos). La app no puede cargar sus assets → pantalla en blanco.
|
|
165
|
+
// Recuperación recomendada por Angular: recargar para traer todo fresco
|
|
166
|
+
// desde la red.
|
|
167
|
+
this.swUpdate.unrecoverable.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(event => {
|
|
168
|
+
console.error('[AppVersionService] SW unrecoverable — reloading:', event.reason);
|
|
169
|
+
this.document.defaultView?.location.reload();
|
|
170
|
+
});
|
|
162
171
|
// Chequeo periódico.
|
|
163
172
|
const intervalMs = this.serviceConfig?.checkIntervalMs ?? DEFAULT_APP_VERSION_SERVICE_CONFIG.checkIntervalMs;
|
|
164
173
|
interval(intervalMs)
|
|
@@ -184,4 +193,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
184
193
|
type: Injectable,
|
|
185
194
|
args: [{ providedIn: 'root' }]
|
|
186
195
|
}], ctorParameters: () => [] });
|
|
187
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXZlcnNpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvYXBwLXZlcnNpb24vYXBwLXZlcnNpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQVUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMvQyxPQUFPLEVBQW9CLGtDQUFrQyxFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUUvRTs7O0dBR0c7QUFDSCxTQUFTLGNBQWMsQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUMxQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRCxN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LEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRWpELHFCQUFxQjtRQUNyQixNQUFNLFVBQVUsR0FDZCxJQUFJLENBQUMsYUFBYSxFQUFFLGVBQWUsSUFBSSxrQ0FBa0MsQ0FBQyxlQUFlLENBQUM7UUFFNUYsUUFBUSxDQUFDLFVBQVUsQ0FBQzthQUNqQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3pDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRXpDLHlDQUF5QztRQUN6QyxNQUFNLFNBQVMsR0FBRyxHQUFTLEVBQUU7WUFDM0IsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDaEQsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdkIsQ0FBQztRQUNILENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbkUsQ0FBQyxDQUFDLENBQUM7UUFFSCxtQkFBbUI7UUFDbkIsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdkIsQ0FBQzsrR0F6SlUsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FESixNQUFNOzs0RkFDbkIsaUJBQWlCO2tCQUQ3QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXBwVmVyc2lvblNlcnZpY2VcbiAqXG4gKiBWZXJpZmljYWNpw7NuIGRlIHZlcnNpw7NuIGRlIGxhIGFwcCBwYXJhIFBXQSAvIHdlYi5cbiAqXG4gKiBVbmlmaWNhIGRvcyBzZcOxYWxlcyBwYXJhIGRldGVjdGFyIGFjdHVhbGl6YWNpb25lczpcbiAqXG4gKiAxLiBgU3dVcGRhdGVgIChgQGFuZ3VsYXIvc2VydmljZS13b3JrZXJgKSDigJQgZWwgZXZlbnRvIGBWRVJTSU9OX1JFQURZYCBpbmRpY2FcbiAqICAgIHF1ZSB1biBidW5kbGUgbnVldm8gZnVlIGRlc2NhcmdhZG8geSBlc3TDoSBsaXN0byBwYXJhIGFjdGl2YXJzZS4gU29sbyBlc3TDoVxuICogICAgZGlzcG9uaWJsZSBjdWFuZG8gZWwgc2VydmljZSB3b3JrZXIgZXN0w6EgcmVnaXN0cmFkbyAoYnVpbGQgZGUgcHJvZHVjY2nDs24pLlxuICogICAgQWRlbcOhcyBzZSBjaGVxdWVhIHByb2FjdGl2YW1lbnRlIGNhZGEgYGNoZWNrSW50ZXJ2YWxNc2AgeSBjYWRhIHZleiBxdWUgbGFcbiAqICAgIGFwcCB2dWVsdmUgYSBmb3JlZ3JvdW5kIChgdmlzaWJpbGl0eWNoYW5nZWApLlxuICpcbiAqIDIuIGBBcHBDb25maWdTZXJ2aWNlYCAoY29uZmlnIHJlbW90byBlbiBGaXJlc3RvcmUpIOKAlCBleHBvbmUgYHZlcnNpb25gXG4gKiAgICAow7psdGltYSB2ZXJzacOzbiBwdWJsaWNhZGEpIHkgYG1pblZlcnNpb25gICh2ZXJzacOzbiBtw61uaW1hIHNvcG9ydGFkYSkuXG4gKiAgICBTZSB1c2EgcGFyYSBsYSBwb2zDrXRpY2EgZGUgYWN0dWFsaXphY2nDs24gb2JsaWdhdG9yaWEgKGhhcmQgZ2F0ZSkuXG4gKlxuICogQW1iYXMgZGVwZW5kZW5jaWFzIHNlIGlueWVjdGFuIGNvbW8gb3BjaW9uYWxlczogZWwgc2VydmljaW8gZGVncmFkYSBjb25cbiAqIGdyYWNpYSBzaSBlbCBTVyBubyBlc3TDoSBoYWJpbGl0YWRvIChkZXYgbW9kZSkgbyBzaSBgQXBwQ29uZmlnU2VydmljZWAgbm9cbiAqIGVzdMOhIHdpcmVhZG8gZW4gbGEgYXBwLlxuICovXG5cbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERlc3Ryb3lSZWYsIEluamVjdGFibGUsIFNpZ25hbCwgY29tcHV0ZWQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBTd1VwZGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL3NlcnZpY2Utd29ya2VyJztcbmltcG9ydCB7IGZpbHRlciwgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL2FwcC1jb25maWcvYXBwLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFZBTFRFQ0hfQVBQX1ZFUlNJT04gfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBBcHBWZXJzaW9uU3RhdHVzLCBERUZBVUxUX0FQUF9WRVJTSU9OX1NFUlZJQ0VfQ09ORklHIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogQ29tcGFyYSBkb3MgdmVyc2lvbmVzIHNlbXZlci4gUmV0b3JuYSB0cnVlIHNpIGBhYCBlcyBlc3RyaWN0YW1lbnRlIG1lbm9yXG4gKiBxdWUgYGJgLiBUb2xlcmFudGUgYSBsb25naXR1ZGVzIGRpc3RpbnRhcyB5IGEgcGFydGVzIG5vIG51bcOpcmljYXMuXG4gKi9cbmZ1bmN0aW9uIGlzVmVyc2lvbkxvd2VyKGE6IHN0cmluZywgYjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHBhID0gYS5zcGxpdCgnLicpLm1hcChuID0+IE51bWJlcihuKSB8fCAwKTtcbiAgY29uc3QgcGIgPSBiLnNwbGl0KCcuJykubWFwKG4gPT4gTnVtYmVyKG4pIHx8IDApO1xuICBjb25zdCBsZW4gPSBNYXRoLm1heChwYS5sZW5ndGgsIHBiLmxlbmd0aCk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGNvbnN0IHggPSBwYVtpXSB8fCAwO1xuICAgIGNvbnN0IHkgPSBwYltpXSB8fCAwO1xuICAgIGlmICh4IDwgeSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHggPiB5KSByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQXBwVmVyc2lvblNlcnZpY2Uge1xuICAvKiogU3dVcGRhdGUgc29sbyBleGlzdGUgc2kgZWwgU1cgZXN0w6EgcmVnaXN0cmFkbyAocHJvZCBidWlsZCkuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgc3dVcGRhdGUgPSBpbmplY3QoU3dVcGRhdGUsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIC8qKiBBcHBDb25maWdTZXJ2aWNlIGVzIG9wY2lvbmFsOiBsYSBhcHAgcHVlZGUgbm8gd2lyZWFybG8uICovXG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwQ29uZmlnID0gaW5qZWN0KEFwcENvbmZpZ1NlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VydmljZUNvbmZpZyA9IGluamVjdChWQUxURUNIX0FQUF9WRVJTSU9OLCB7XG4gICAgb3B0aW9uYWw6IHRydWUsXG4gIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIC8qKiBUcnVlIGN1YW5kbyBlbCBTVyByZXBvcnTDsyB1biBidW5kbGUgbnVldm8gbGlzdG8gKGBWRVJTSU9OX1JFQURZYCkuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgc3dVcGRhdGVSZWFkeSA9IHNpZ25hbChmYWxzZSk7XG5cbiAgLyoqXG4gICAqIFRydWUgY3VhbmRvIGVsIHVzdWFyaW8gZGVzY2FydMOzIGVsIGJhbm5lciBkZSBhY3R1YWxpemFjacOzbiBvcGNpb25hbC5cbiAgICogRWwgYmFubmVyIG9ibGlnYXRvcmlvIChgdXBkYXRlLXJlcXVpcmVkYCkgaWdub3JhIGVzdGUgZmxhZy5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc21pc3NlZCA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGRpc21pc3NlZDogU2lnbmFsPGJvb2xlYW4+ID0gdGhpcy5fZGlzbWlzc2VkLmFzUmVhZG9ubHkoKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gU0lHTkFMUyBQw5pCTElDT1NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFZlcnNpw7NuIGxvY2FsIGRlbCBidWlsZCBhY3R1YWwgZGUgbGEgYXBwLlxuICAgKiBQcm92aWVuZSBkZWwgcHJvdmlkZXIgYHByb3ZpZGVWYWx0ZWNoQXBwVmVyc2lvbih7IGN1cnJlbnRWZXJzaW9uIH0pYC5cbiAgICovXG4gIHJlYWRvbmx5IGN1cnJlbnRWZXJzaW9uOiBTaWduYWw8c3RyaW5nPiA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuc2VydmljZUNvbmZpZz8uY3VycmVudFZlcnNpb24gPz8gJzAuMC4wJ1xuICApO1xuXG4gIC8qKlxuICAgKiDDmmx0aW1hIHZlcnNpw7NuIHB1YmxpY2FkYSBzZWfDum4gZWwgY29uZmlnIHJlbW90by5cbiAgICogYG51bGxgIHNpIGBBcHBDb25maWdTZXJ2aWNlYCBubyBlc3TDoSBkaXNwb25pYmxlIG8gYcO6biBubyBjYXJnw7MuXG4gICAqL1xuICByZWFkb25seSBsYXRlc3RWZXJzaW9uOiBTaWduYWw8c3RyaW5nIHwgbnVsbD4gPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLmFwcENvbmZpZz8ucmVtb3RlVmVyc2lvbigpID8/IG51bGxcbiAgKTtcblxuICAvKipcbiAgICogRXN0YWRvIGRlIGxhIHZlcnNpw7NuOlxuICAgKiAtIGB1cGRhdGUtcmVxdWlyZWRgIOKAlCBsYSB2ZXJzacOzbiBsb2NhbCBxdWVkw7MgcG9yIGRlYmFqbyBkZSBgbWluVmVyc2lvbmBcbiAgICogICBkZWwgY29uZmlnIHJlbW90by4gSGFyZCBnYXRlLiBTb2xvIHNpIGBBcHBDb25maWdTZXJ2aWNlYCB0aWVuZSBkYXRvcy5cbiAgICogLSBgdXBkYXRlLWF2YWlsYWJsZWAg4oCUIGVsIFNXIGRlc2NhcmfDsyB1biBidW5kbGUgbnVldm8gKGBWRVJTSU9OX1JFQURZYClcbiAgICogICBvIGBBcHBDb25maWdTZXJ2aWNlLmhhc1VwZGF0ZWAgZXMgdHJ1ZS5cbiAgICogLSBgdXAtdG8tZGF0ZWAg4oCUIGVuIGN1YWxxdWllciBvdHJvIGNhc28uXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM6IFNpZ25hbDxBcHBWZXJzaW9uU3RhdHVzPiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAvLyAxLiBIYXJkIGdhdGUg4oCUIG1pblZlcnNpb24gZGVsIGNvbmZpZyByZW1vdG8uXG4gICAgaWYgKHRoaXMuYXBwQ29uZmlnKSB7XG4gICAgICBjb25zdCBtaW5WZXJzaW9uID0gdGhpcy5hcHBDb25maWcuYXBwQ29uZmlnKCk/Lm1pblZlcnNpb247XG4gICAgICBpZiAobWluVmVyc2lvbiAmJiBpc1ZlcnNpb25Mb3dlcih0aGlzLmN1cnJlbnRWZXJzaW9uKCksIG1pblZlcnNpb24pKSB7XG4gICAgICAgIHJldHVybiAndXBkYXRlLXJlcXVpcmVkJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAyLiBVcGRhdGUgb3BjaW9uYWwg4oCUIFNXIGJ1bmRsZSBsaXN0byBvIGNvbmZpZyByZW1vdG8gbcOhcyBudWV2by5cbiAgICBpZiAodGhpcy5zd1VwZGF0ZVJlYWR5KCkgfHwgdGhpcy5hcHBDb25maWc/Lmhhc1VwZGF0ZSgpKSB7XG4gICAgICByZXR1cm4gJ3VwZGF0ZS1hdmFpbGFibGUnO1xuICAgIH1cblxuICAgIHJldHVybiAndXAtdG8tZGF0ZSc7XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMud2lyZVNlcnZpY2VXb3JrZXIoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNw4lUT0RPUyBQw5pCTElDT1NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEFwbGljYSBsYSBhY3R1YWxpemFjacOzbiBwZW5kaWVudGUuXG4gICAqXG4gICAqIFNpIGVsIFNXIGVzdMOhIGhhYmlsaXRhZG8sIGFjdGl2YSBsYSB2ZXJzacOzbiBkZXNjYXJnYWRhIHkgcmVjYXJnYTsgc2kgbm8sXG4gICAqIHNvbG8gcmVjYXJnYSBsYSBww6FnaW5hIChsYSB3ZWIgb2J0aWVuZSBlbCBidW5kbGUgbnVldm8gZGVsIHNlcnZpZG9yKS5cbiAgICovXG4gIGFzeW5jIGFwcGx5VXBkYXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5zd1VwZGF0ZT8uaXNFbmFibGVkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3dVcGRhdGUuYWN0aXZhdGVVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0FwcFZlcnNpb25TZXJ2aWNlXSBhY3RpdmF0ZVVwZGF0ZSBmYWlsZWQ6JywgZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5kb2N1bWVudC5kZWZhdWx0Vmlldz8ubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlc2NhcnRhIGVsIGJhbm5lciBkZSBhY3R1YWxpemFjacOzbiBvcGNpb25hbC5cbiAgICogTm8gdGllbmUgZWZlY3RvIHNvYnJlIGVsIGVzdGFkbyBgdXBkYXRlLXJlcXVpcmVkYCAoaGFyZCBnYXRlKS5cbiAgICovXG4gIGRpc21pc3MoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzbWlzc2VkLnNldCh0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdWVyemEgdW4gY2hlcXVlbyBkZSBhY3R1YWxpemFjacOzbiBkZWwgc2VydmljZSB3b3JrZXIuXG4gICAqIE5vLW9wIHNpIGVsIFNXIG5vIGVzdMOhIGhhYmlsaXRhZG8uXG4gICAqL1xuICBhc3luYyBjaGVja05vdygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuc3dVcGRhdGU/LmlzRW5hYmxlZCkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnN3VXBkYXRlLmNoZWNrRm9yVXBkYXRlKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tBcHBWZXJzaW9uU2VydmljZV0gY2hlY2tGb3JVcGRhdGUgZmFpbGVkOicsIGVycik7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBSSVZBRE9cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFN1c2NyaWJlIGB2ZXJzaW9uVXBkYXRlc2AsIHByb2dyYW1hIGNoZXF1ZW9zIHBlcmnDs2RpY29zIHkgcmVhY2Npb25hIGFsXG4gICAqIHZvbHZlciBsYSBhcHAgYSBmb3JlZ3JvdW5kLiBTb2xvIGFjdMO6YSBzaSBlbCBTVyBlc3TDoSBoYWJpbGl0YWRvLlxuICAgKi9cbiAgcHJpdmF0ZSB3aXJlU2VydmljZVdvcmtlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3dVcGRhdGU/LmlzRW5hYmxlZCkgcmV0dXJuO1xuXG4gICAgLy8gQnVuZGxlIG51ZXZvIGRlc2NhcmdhZG8geSBsaXN0by5cbiAgICB0aGlzLnN3VXBkYXRlLnZlcnNpb25VcGRhdGVzXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKGV2dCA9PiBldnQudHlwZSA9PT0gJ1ZFUlNJT05fUkVBRFknKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zd1VwZGF0ZVJlYWR5LnNldCh0cnVlKSk7XG5cbiAgICAvLyBDaGVxdWVvIHBlcmnDs2RpY28uXG4gICAgY29uc3QgaW50ZXJ2YWxNcyA9XG4gICAgICB0aGlzLnNlcnZpY2VDb25maWc/LmNoZWNrSW50ZXJ2YWxNcyA/PyBERUZBVUxUX0FQUF9WRVJTSU9OX1NFUlZJQ0VfQ09ORklHLmNoZWNrSW50ZXJ2YWxNcztcblxuICAgIGludGVydmFsKGludGVydmFsTXMpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdm9pZCB0aGlzLmNoZWNrTm93KCkpO1xuXG4gICAgLy8gQ2hlcXVlbyBhbCB2b2x2ZXIgbGEgYXBwIGEgZm9yZWdyb3VuZC5cbiAgICBjb25zdCBvblZpc2libGUgPSAoKTogdm9pZCA9PiB7XG4gICAgICBpZiAodGhpcy5kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICd2aXNpYmxlJykge1xuICAgICAgICB2b2lkIHRoaXMuY2hlY2tOb3coKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIG9uVmlzaWJsZSk7XG4gICAgdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICB0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBvblZpc2libGUpO1xuICAgIH0pO1xuXG4gICAgLy8gQ2hlcXVlbyBpbmljaWFsLlxuICAgIHZvaWQgdGhpcy5jaGVja05vdygpO1xuICB9XG59XG4iXX0=
|
|
196
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXZlcnNpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvYXBwLXZlcnNpb24vYXBwLXZlcnNpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQVUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMvQyxPQUFPLEVBQW9CLGtDQUFrQyxFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUUvRTs7O0dBR0c7QUFDSCxTQUFTLGNBQWMsQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUMxQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRCxN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QixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ25FLENBQUMsQ0FBQyxDQUFDO1FBRUgsbUJBQW1CO1FBQ25CLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7K0dBbktVLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBREosTUFBTTs7NEZBQ25CLGlCQUFpQjtrQkFEN0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFwcFZlcnNpb25TZXJ2aWNlXG4gKlxuICogVmVyaWZpY2FjacOzbiBkZSB2ZXJzacOzbiBkZSBsYSBhcHAgcGFyYSBQV0EgLyB3ZWIuXG4gKlxuICogVW5pZmljYSBkb3Mgc2XDsWFsZXMgcGFyYSBkZXRlY3RhciBhY3R1YWxpemFjaW9uZXM6XG4gKlxuICogMS4gYFN3VXBkYXRlYCAoYEBhbmd1bGFyL3NlcnZpY2Utd29ya2VyYCkg4oCUIGVsIGV2ZW50byBgVkVSU0lPTl9SRUFEWWAgaW5kaWNhXG4gKiAgICBxdWUgdW4gYnVuZGxlIG51ZXZvIGZ1ZSBkZXNjYXJnYWRvIHkgZXN0w6EgbGlzdG8gcGFyYSBhY3RpdmFyc2UuIFNvbG8gZXN0w6FcbiAqICAgIGRpc3BvbmlibGUgY3VhbmRvIGVsIHNlcnZpY2Ugd29ya2VyIGVzdMOhIHJlZ2lzdHJhZG8gKGJ1aWxkIGRlIHByb2R1Y2Npw7NuKS5cbiAqICAgIEFkZW3DoXMgc2UgY2hlcXVlYSBwcm9hY3RpdmFtZW50ZSBjYWRhIGBjaGVja0ludGVydmFsTXNgIHkgY2FkYSB2ZXogcXVlIGxhXG4gKiAgICBhcHAgdnVlbHZlIGEgZm9yZWdyb3VuZCAoYHZpc2liaWxpdHljaGFuZ2VgKS5cbiAqXG4gKiAyLiBgQXBwQ29uZmlnU2VydmljZWAgKGNvbmZpZyByZW1vdG8gZW4gRmlyZXN0b3JlKSDigJQgZXhwb25lIGB2ZXJzaW9uYFxuICogICAgKMO6bHRpbWEgdmVyc2nDs24gcHVibGljYWRhKSB5IGBtaW5WZXJzaW9uYCAodmVyc2nDs24gbcOtbmltYSBzb3BvcnRhZGEpLlxuICogICAgU2UgdXNhIHBhcmEgbGEgcG9sw610aWNhIGRlIGFjdHVhbGl6YWNpw7NuIG9ibGlnYXRvcmlhIChoYXJkIGdhdGUpLlxuICpcbiAqIEFtYmFzIGRlcGVuZGVuY2lhcyBzZSBpbnllY3RhbiBjb21vIG9wY2lvbmFsZXM6IGVsIHNlcnZpY2lvIGRlZ3JhZGEgY29uXG4gKiBncmFjaWEgc2kgZWwgU1cgbm8gZXN0w6EgaGFiaWxpdGFkbyAoZGV2IG1vZGUpIG8gc2kgYEFwcENvbmZpZ1NlcnZpY2VgIG5vXG4gKiBlc3TDoSB3aXJlYWRvIGVuIGxhIGFwcC5cbiAqL1xuXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEZXN0cm95UmVmLCBJbmplY3RhYmxlLCBTaWduYWwsIGNvbXB1dGVkLCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgU3dVcGRhdGUgfSBmcm9tICdAYW5ndWxhci9zZXJ2aWNlLXdvcmtlcic7XG5pbXBvcnQgeyBmaWx0ZXIsIGludGVydmFsIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9hcHAtY29uZmlnL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBWQUxURUNIX0FQUF9WRVJTSU9OIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgQXBwVmVyc2lvblN0YXR1cywgREVGQVVMVF9BUFBfVkVSU0lPTl9TRVJWSUNFX0NPTkZJRyB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIENvbXBhcmEgZG9zIHZlcnNpb25lcyBzZW12ZXIuIFJldG9ybmEgdHJ1ZSBzaSBgYWAgZXMgZXN0cmljdGFtZW50ZSBtZW5vclxuICogcXVlIGBiYC4gVG9sZXJhbnRlIGEgbG9uZ2l0dWRlcyBkaXN0aW50YXMgeSBhIHBhcnRlcyBubyBudW3DqXJpY2FzLlxuICovXG5mdW5jdGlvbiBpc1ZlcnNpb25Mb3dlcihhOiBzdHJpbmcsIGI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBwYSA9IGEuc3BsaXQoJy4nKS5tYXAobiA9PiBOdW1iZXIobikgfHwgMCk7XG4gIGNvbnN0IHBiID0gYi5zcGxpdCgnLicpLm1hcChuID0+IE51bWJlcihuKSB8fCAwKTtcbiAgY29uc3QgbGVuID0gTWF0aC5tYXgocGEubGVuZ3RoLCBwYi5sZW5ndGgpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCB4ID0gcGFbaV0gfHwgMDtcbiAgICBjb25zdCB5ID0gcGJbaV0gfHwgMDtcbiAgICBpZiAoeCA8IHkpIHJldHVybiB0cnVlO1xuICAgIGlmICh4ID4geSkgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEFwcFZlcnNpb25TZXJ2aWNlIHtcbiAgLyoqIFN3VXBkYXRlIHNvbG8gZXhpc3RlIHNpIGVsIFNXIGVzdMOhIHJlZ2lzdHJhZG8gKHByb2QgYnVpbGQpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHN3VXBkYXRlID0gaW5qZWN0KFN3VXBkYXRlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICAvKiogQXBwQ29uZmlnU2VydmljZSBlcyBvcGNpb25hbDogbGEgYXBwIHB1ZWRlIG5vIHdpcmVhcmxvLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGFwcENvbmZpZyA9IGluamVjdChBcHBDb25maWdTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlcnZpY2VDb25maWcgPSBpbmplY3QoVkFMVEVDSF9BUFBfVkVSU0lPTiwge1xuICAgIG9wdGlvbmFsOiB0cnVlLFxuICB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAvKiogVHJ1ZSBjdWFuZG8gZWwgU1cgcmVwb3J0w7MgdW4gYnVuZGxlIG51ZXZvIGxpc3RvIChgVkVSU0lPTl9SRUFEWWApLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHN3VXBkYXRlUmVhZHkgPSBzaWduYWwoZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBUcnVlIGN1YW5kbyBlbCB1c3VhcmlvIGRlc2NhcnTDsyBlbCBiYW5uZXIgZGUgYWN0dWFsaXphY2nDs24gb3BjaW9uYWwuXG4gICAqIEVsIGJhbm5lciBvYmxpZ2F0b3JpbyAoYHVwZGF0ZS1yZXF1aXJlZGApIGlnbm9yYSBlc3RlIGZsYWcuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNtaXNzZWQgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBkaXNtaXNzZWQ6IFNpZ25hbDxib29sZWFuPiA9IHRoaXMuX2Rpc21pc3NlZC5hc1JlYWRvbmx5KCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNJR05BTFMgUMOaQkxJQ09TXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBWZXJzacOzbiBsb2NhbCBkZWwgYnVpbGQgYWN0dWFsIGRlIGxhIGFwcC5cbiAgICogUHJvdmllbmUgZGVsIHByb3ZpZGVyIGBwcm92aWRlVmFsdGVjaEFwcFZlcnNpb24oeyBjdXJyZW50VmVyc2lvbiB9KWAuXG4gICAqL1xuICByZWFkb25seSBjdXJyZW50VmVyc2lvbjogU2lnbmFsPHN0cmluZz4gPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLnNlcnZpY2VDb25maWc/LmN1cnJlbnRWZXJzaW9uID8/ICcwLjAuMCdcbiAgKTtcblxuICAvKipcbiAgICogw5psdGltYSB2ZXJzacOzbiBwdWJsaWNhZGEgc2Vnw7puIGVsIGNvbmZpZyByZW1vdG8uXG4gICAqIGBudWxsYCBzaSBgQXBwQ29uZmlnU2VydmljZWAgbm8gZXN0w6EgZGlzcG9uaWJsZSBvIGHDum4gbm8gY2FyZ8OzLlxuICAgKi9cbiAgcmVhZG9ubHkgbGF0ZXN0VmVyc2lvbjogU2lnbmFsPHN0cmluZyB8IG51bGw+ID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5hcHBDb25maWc/LnJlbW90ZVZlcnNpb24oKSA/PyBudWxsXG4gICk7XG5cbiAgLyoqXG4gICAqIEVzdGFkbyBkZSBsYSB2ZXJzacOzbjpcbiAgICogLSBgdXBkYXRlLXJlcXVpcmVkYCDigJQgbGEgdmVyc2nDs24gbG9jYWwgcXVlZMOzIHBvciBkZWJham8gZGUgYG1pblZlcnNpb25gXG4gICAqICAgZGVsIGNvbmZpZyByZW1vdG8uIEhhcmQgZ2F0ZS4gU29sbyBzaSBgQXBwQ29uZmlnU2VydmljZWAgdGllbmUgZGF0b3MuXG4gICAqIC0gYHVwZGF0ZS1hdmFpbGFibGVgIOKAlCBlbCBTVyBkZXNjYXJnw7MgdW4gYnVuZGxlIG51ZXZvIChgVkVSU0lPTl9SRUFEWWApXG4gICAqICAgbyBgQXBwQ29uZmlnU2VydmljZS5oYXNVcGRhdGVgIGVzIHRydWUuXG4gICAqIC0gYHVwLXRvLWRhdGVgIOKAlCBlbiBjdWFscXVpZXIgb3RybyBjYXNvLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzOiBTaWduYWw8QXBwVmVyc2lvblN0YXR1cz4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgLy8gMS4gSGFyZCBnYXRlIOKAlCBtaW5WZXJzaW9uIGRlbCBjb25maWcgcmVtb3RvLlxuICAgIGlmICh0aGlzLmFwcENvbmZpZykge1xuICAgICAgY29uc3QgbWluVmVyc2lvbiA9IHRoaXMuYXBwQ29uZmlnLmFwcENvbmZpZygpPy5taW5WZXJzaW9uO1xuICAgICAgaWYgKG1pblZlcnNpb24gJiYgaXNWZXJzaW9uTG93ZXIodGhpcy5jdXJyZW50VmVyc2lvbigpLCBtaW5WZXJzaW9uKSkge1xuICAgICAgICByZXR1cm4gJ3VwZGF0ZS1yZXF1aXJlZCc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMi4gVXBkYXRlIG9wY2lvbmFsIOKAlCBTVyBidW5kbGUgbGlzdG8gbyBjb25maWcgcmVtb3RvIG3DoXMgbnVldm8uXG4gICAgaWYgKHRoaXMuc3dVcGRhdGVSZWFkeSgpIHx8IHRoaXMuYXBwQ29uZmlnPy5oYXNVcGRhdGUoKSkge1xuICAgICAgcmV0dXJuICd1cGRhdGUtYXZhaWxhYmxlJztcbiAgICB9XG5cbiAgICByZXR1cm4gJ3VwLXRvLWRhdGUnO1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLndpcmVTZXJ2aWNlV29ya2VyKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTcOJVE9ET1MgUMOaQkxJQ09TXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBBcGxpY2EgbGEgYWN0dWFsaXphY2nDs24gcGVuZGllbnRlLlxuICAgKlxuICAgKiBTaSBlbCBTVyBlc3TDoSBoYWJpbGl0YWRvLCBhY3RpdmEgbGEgdmVyc2nDs24gZGVzY2FyZ2FkYSB5IHJlY2FyZ2E7IHNpIG5vLFxuICAgKiBzb2xvIHJlY2FyZ2EgbGEgcMOhZ2luYSAobGEgd2ViIG9idGllbmUgZWwgYnVuZGxlIG51ZXZvIGRlbCBzZXJ2aWRvcikuXG4gICAqL1xuICBhc3luYyBhcHBseVVwZGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuc3dVcGRhdGU/LmlzRW5hYmxlZCkge1xuICAgICAgICBhd2FpdCB0aGlzLnN3VXBkYXRlLmFjdGl2YXRlVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tBcHBWZXJzaW9uU2VydmljZV0gYWN0aXZhdGVVcGRhdGUgZmFpbGVkOicsIGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXc/LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNjYXJ0YSBlbCBiYW5uZXIgZGUgYWN0dWFsaXphY2nDs24gb3BjaW9uYWwuXG4gICAqIE5vIHRpZW5lIGVmZWN0byBzb2JyZSBlbCBlc3RhZG8gYHVwZGF0ZS1yZXF1aXJlZGAgKGhhcmQgZ2F0ZSkuXG4gICAqL1xuICBkaXNtaXNzKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc21pc3NlZC5zZXQodHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogRnVlcnphIHVuIGNoZXF1ZW8gZGUgYWN0dWFsaXphY2nDs24gZGVsIHNlcnZpY2Ugd29ya2VyLlxuICAgKiBOby1vcCBzaSBlbCBTVyBubyBlc3TDoSBoYWJpbGl0YWRvLlxuICAgKi9cbiAgYXN5bmMgY2hlY2tOb3coKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLnN3VXBkYXRlPy5pc0VuYWJsZWQpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5zd1VwZGF0ZS5jaGVja0ZvclVwZGF0ZSgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS53YXJuKCdbQXBwVmVyc2lvblNlcnZpY2VdIGNoZWNrRm9yVXBkYXRlIGZhaWxlZDonLCBlcnIpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQUklWQURPXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBTdXNjcmliZSBgdmVyc2lvblVwZGF0ZXNgLCBwcm9ncmFtYSBjaGVxdWVvcyBwZXJpw7NkaWNvcyB5IHJlYWNjaW9uYSBhbFxuICAgKiB2b2x2ZXIgbGEgYXBwIGEgZm9yZWdyb3VuZC4gU29sbyBhY3TDumEgc2kgZWwgU1cgZXN0w6EgaGFiaWxpdGFkby5cbiAgICovXG4gIHByaXZhdGUgd2lyZVNlcnZpY2VXb3JrZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnN3VXBkYXRlPy5pc0VuYWJsZWQpIHJldHVybjtcblxuICAgIC8vIEJ1bmRsZSBudWV2byBkZXNjYXJnYWRvIHkgbGlzdG8uXG4gICAgdGhpcy5zd1VwZGF0ZS52ZXJzaW9uVXBkYXRlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihldnQgPT4gZXZ0LnR5cGUgPT09ICdWRVJTSU9OX1JFQURZJyksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuc3dVcGRhdGVSZWFkeS5zZXQodHJ1ZSkpO1xuXG4gICAgLy8gU1cgZW4gZXN0YWRvIGlycmVjdXBlcmFibGUg4oCUIGxhIGNhY2jDqSBkZWwgc2VydmljZSB3b3JrZXIgc2UgY29ycm9tcGnDsyBvXG4gICAgLy8gZnVlIHBhcmNpYWxtZW50ZSBldmljdGFkYSAoY29tw7puIGVuIFBXQXMgc3RhbmRhbG9uZSBkZSBpT1MgdHJhcyBkZXBsb3lzXG4gICAgLy8gcmVwZXRpZG9zKS4gTGEgYXBwIG5vIHB1ZWRlIGNhcmdhciBzdXMgYXNzZXRzIOKGkiBwYW50YWxsYSBlbiBibGFuY28uXG4gICAgLy8gUmVjdXBlcmFjacOzbiByZWNvbWVuZGFkYSBwb3IgQW5ndWxhcjogcmVjYXJnYXIgcGFyYSB0cmFlciB0b2RvIGZyZXNjb1xuICAgIC8vIGRlc2RlIGxhIHJlZC5cbiAgICB0aGlzLnN3VXBkYXRlLnVucmVjb3ZlcmFibGUucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tBcHBWZXJzaW9uU2VydmljZV0gU1cgdW5yZWNvdmVyYWJsZSDigJQgcmVsb2FkaW5nOicsIGV2ZW50LnJlYXNvbik7XG4gICAgICB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3Py5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICB9KTtcblxuICAgIC8vIENoZXF1ZW8gcGVyacOzZGljby5cbiAgICBjb25zdCBpbnRlcnZhbE1zID1cbiAgICAgIHRoaXMuc2VydmljZUNvbmZpZz8uY2hlY2tJbnRlcnZhbE1zID8/IERFRkFVTFRfQVBQX1ZFUlNJT05fU0VSVklDRV9DT05GSUcuY2hlY2tJbnRlcnZhbE1zO1xuXG4gICAgaW50ZXJ2YWwoaW50ZXJ2YWxNcylcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB2b2lkIHRoaXMuY2hlY2tOb3coKSk7XG5cbiAgICAvLyBDaGVxdWVvIGFsIHZvbHZlciBsYSBhcHAgYSBmb3JlZ3JvdW5kLlxuICAgIGNvbnN0IG9uVmlzaWJsZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGlmICh0aGlzLmRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ3Zpc2libGUnKSB7XG4gICAgICAgIHZvaWQgdGhpcy5jaGVja05vdygpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgb25WaXNpYmxlKTtcbiAgICB0aGlzLmRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHtcbiAgICAgIHRoaXMuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIG9uVmlzaWJsZSk7XG4gICAgfSk7XG5cbiAgICAvLyBDaGVxdWVvIGluaWNpYWwuXG4gICAgdm9pZCB0aGlzLmNoZWNrTm93KCk7XG4gIH1cbn1cbiJdfQ==
|