ng-easycommerce-v18 0.3.18-beta.1 → 0.3.18-beta.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.
- package/README.md +2 -0
- package/esm2022/lib/ec-services/runtime-config.service.mjs +53 -12
- package/esm2022/lib/interceptors/index.mjs +2 -1
- package/esm2022/lib/interceptors/runtime-config.interceptor.mjs +41 -0
- package/esm2022/lib/providers/provideRuntimeConfig.mjs +17 -14
- package/fesm2022/ng-easycommerce-v18.mjs +116 -34
- package/fesm2022/ng-easycommerce-v18.mjs.map +1 -1
- package/lib/ec-services/runtime-config.service.d.ts +9 -2
- package/lib/interceptors/index.d.ts +1 -0
- package/lib/interceptors/runtime-config.interceptor.d.ts +7 -0
- package/lib/providers/provideRuntimeConfig.d.ts +3 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# Version 0.3.18-beta.2
|
|
2
|
+
- Se optimizar y comenta codigo para que el runtime no sea un bucle y se haga antes de la primera carga
|
|
1
3
|
# Version 0.3.18-beta.1
|
|
2
4
|
- Se modifican servicios y componentes para que funcione el deploy SSR.
|
|
3
5
|
- Se elimina uso de DOM ya que en SSR tira error.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Injectable, Inject, PLATFORM_ID } from '@angular/core';
|
|
2
2
|
import { isPlatformBrowser } from '@angular/common';
|
|
3
3
|
import { of, BehaviorSubject } from 'rxjs';
|
|
4
|
-
import { catchError, tap } from 'rxjs/operators';
|
|
4
|
+
import { catchError, tap, shareReplay } from 'rxjs/operators';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
import * as i1 from "@angular/common/http";
|
|
7
7
|
export class RuntimeConfigService {
|
|
@@ -10,34 +10,71 @@ export class RuntimeConfigService {
|
|
|
10
10
|
configSubject = new BehaviorSubject(null);
|
|
11
11
|
config$ = this.configSubject.asObservable();
|
|
12
12
|
_config = null;
|
|
13
|
+
_loadPromise = null;
|
|
14
|
+
_isLoaded = false;
|
|
13
15
|
constructor(platformId, http) {
|
|
14
16
|
this.platformId = platformId;
|
|
15
17
|
this.http = http;
|
|
18
|
+
// En SSR o browser, intentar cargar inmediatamente desde window si está disponible
|
|
19
|
+
if (typeof window !== 'undefined' && window.__RUNTIME_CONFIG__ && !this._isLoaded) {
|
|
20
|
+
this._config = window.__RUNTIME_CONFIG__;
|
|
21
|
+
this._isLoaded = true;
|
|
22
|
+
this.configSubject.next(this._config);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Inicialización única - llamada por APP_INITIALIZER
|
|
27
|
+
* Garantiza que la configuración se carga solo una vez al inicio
|
|
28
|
+
*/
|
|
29
|
+
initialize() {
|
|
30
|
+
if (this._isLoaded && this._config) {
|
|
31
|
+
return Promise.resolve(this._config);
|
|
32
|
+
}
|
|
33
|
+
return new Promise((resolve, reject) => {
|
|
34
|
+
this.loadConfig().subscribe({
|
|
35
|
+
next: (config) => {
|
|
36
|
+
this._isLoaded = true;
|
|
37
|
+
resolve(config);
|
|
38
|
+
},
|
|
39
|
+
error: (error) => {
|
|
40
|
+
reject(error);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
});
|
|
16
44
|
}
|
|
17
45
|
/**
|
|
18
|
-
* Carga la configuración en runtime
|
|
46
|
+
* Carga la configuración en runtime (optimizada para una sola carga)
|
|
19
47
|
* - En SSR: Lee desde el objeto window inyectado por el servidor
|
|
20
|
-
* - En Browser: Hace petición HTTP a /runtime-config.json
|
|
48
|
+
* - En Browser: Hace petición HTTP a /runtime-config.json (solo si no está en window)
|
|
21
49
|
*/
|
|
22
50
|
loadConfig() {
|
|
23
|
-
// Si ya tenemos la config cargada, la devolvemos
|
|
24
|
-
if (this._config) {
|
|
51
|
+
// Si ya tenemos la config cargada, la devolvemos inmediatamente
|
|
52
|
+
if (this._isLoaded && this._config) {
|
|
25
53
|
return of(this._config);
|
|
26
54
|
}
|
|
55
|
+
// Si ya hay una carga en progreso, reutilizamos esa petición
|
|
56
|
+
if (this._loadPromise) {
|
|
57
|
+
return this._loadPromise;
|
|
58
|
+
}
|
|
27
59
|
if (isPlatformBrowser(this.platformId)) {
|
|
28
60
|
// En el navegador, primero intentamos obtener la config desde window
|
|
29
|
-
if (window.__RUNTIME_CONFIG__) {
|
|
61
|
+
if (typeof window !== 'undefined' && window.__RUNTIME_CONFIG__ && !this._isLoaded) {
|
|
30
62
|
this._config = window.__RUNTIME_CONFIG__;
|
|
63
|
+
this._isLoaded = true;
|
|
31
64
|
this.configSubject.next(this._config);
|
|
32
65
|
return of(this._config);
|
|
33
66
|
}
|
|
34
|
-
// Si no está en window, hacemos petición HTTP
|
|
35
|
-
|
|
67
|
+
// Si no está en window, hacemos petición HTTP (solo una vez)
|
|
68
|
+
this._loadPromise = this.http.get('/runtime-config.json').pipe(tap(config => {
|
|
36
69
|
this._config = config;
|
|
70
|
+
this._isLoaded = true;
|
|
37
71
|
this.configSubject.next(config);
|
|
38
72
|
// Guardamos en window para siguientes accesos
|
|
39
|
-
window
|
|
40
|
-
|
|
73
|
+
if (typeof window !== 'undefined') {
|
|
74
|
+
window.__RUNTIME_CONFIG__ = config;
|
|
75
|
+
}
|
|
76
|
+
}), shareReplay(1), // Cache la respuesta para múltiples suscripciones
|
|
77
|
+
catchError(error => {
|
|
41
78
|
console.error('Error loading runtime config:', error);
|
|
42
79
|
// Fallback config si falla la carga
|
|
43
80
|
const fallbackConfig = {
|
|
@@ -48,14 +85,17 @@ export class RuntimeConfigService {
|
|
|
48
85
|
channel: 'minorista'
|
|
49
86
|
};
|
|
50
87
|
this._config = fallbackConfig;
|
|
88
|
+
this._isLoaded = true;
|
|
51
89
|
this.configSubject.next(fallbackConfig);
|
|
52
90
|
return of(fallbackConfig);
|
|
53
91
|
}));
|
|
92
|
+
return this._loadPromise;
|
|
54
93
|
}
|
|
55
94
|
else {
|
|
56
95
|
// En SSR, leemos desde window que fue inyectado por el servidor
|
|
57
|
-
if (typeof window !== 'undefined' && window.__RUNTIME_CONFIG__) {
|
|
96
|
+
if (typeof window !== 'undefined' && window.__RUNTIME_CONFIG__ && !this._isLoaded) {
|
|
58
97
|
this._config = window.__RUNTIME_CONFIG__;
|
|
98
|
+
this._isLoaded = true;
|
|
59
99
|
this.configSubject.next(this._config);
|
|
60
100
|
return of(this._config);
|
|
61
101
|
}
|
|
@@ -69,6 +109,7 @@ export class RuntimeConfigService {
|
|
|
69
109
|
channel: 'minorista'
|
|
70
110
|
};
|
|
71
111
|
this._config = fallbackConfig;
|
|
112
|
+
this._isLoaded = true;
|
|
72
113
|
this.configSubject.next(fallbackConfig);
|
|
73
114
|
return of(fallbackConfig);
|
|
74
115
|
}
|
|
@@ -146,4 +187,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
146
187
|
type: Inject,
|
|
147
188
|
args: [PLATFORM_ID]
|
|
148
189
|
}] }, { type: i1.HttpClient }] });
|
|
149
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1jb25maWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1zZXJ2aWNlcy9ydW50aW1lLWNvbmZpZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVwRCxPQUFPLEVBQWMsRUFBRSxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFRakQsTUFBTSxPQUFPLG9CQUFvQjtJQU9BO0lBQ3JCO0lBUEYsYUFBYSxHQUFHLElBQUksZUFBZSxDQUF1QixJQUFJLENBQUMsQ0FBQztJQUNqRSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUUzQyxPQUFPLEdBQXlCLElBQUksQ0FBQztJQUU3QyxZQUMrQixVQUFrQixFQUN2QyxJQUFnQjtRQURLLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDdkMsU0FBSSxHQUFKLElBQUksQ0FBWTtJQUN2QixDQUFDO0lBRUo7Ozs7T0FJRztJQUNILFVBQVU7UUFDUixpREFBaUQ7UUFDakQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQXdCLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBRUQsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUN2QyxxRUFBcUU7WUFDckUsSUFBSSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFD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ICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUnVudGltZUNvbmZpZyB9IGZyb20gJy4uL2ludGVyZmFjZXMvcnVudGltZS1jb25maWcnO1xyXG5cclxuZGVjbGFyZSBjb25zdCB3aW5kb3c6IGFueTtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFJ1bnRpbWVDb25maWdTZXJ2aWNlIHtcclxuICBwcml2YXRlIGNvbmZpZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJ1bnRpbWVDb25maWcgfCBudWxsPihudWxsKTtcclxuICBwdWJsaWMgY29uZmlnJCA9IHRoaXMuY29uZmlnU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICBcclxuICBwcml2YXRlIF9jb25maWc6IFJ1bnRpbWVDb25maWcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IE9iamVjdCxcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudFxyXG4gICkge31cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FyZ2EgbGEgY29uZmlndXJhY2nDs24gZW4gcnVudGltZVxyXG4gICAqIC0gRW4gU1NSOiBMZWUgZGVzZGUgZWwgb2JqZXRvIHdpbmRvdyBpbnllY3RhZG8gcG9yIGVsIHNlcnZpZG9yXHJcbiAgICogLSBFbiBCcm93c2VyOiBIYWNlIHBldGljacOzbiBIVFRQIGEgL3J1bnRpbWUtY29uZmlnLmpzb25cclxuICAgKi9cclxuICBsb2FkQ29uZmlnKCk6IE9ic2VydmFibGU8UnVudGltZUNvbmZpZz4ge1xyXG4gICAgLy8gU2kgeWEgdGVuZW1vcyBsYSBjb25maWcgY2FyZ2FkYSwgbGEgZGV2b2x2ZW1vc1xyXG4gICAgaWYgKHRoaXMuX2NvbmZpZykge1xyXG4gICAgICByZXR1cm4gb2YodGhpcy5fY29uZmlnIGFzIFJ1bnRpbWVDb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcbiAgICAgIC8vIEVuIGVsIG5hdmVnYWRvciwgcHJpbWVybyBpbnRlbnRhbW9zIG9idGVuZXIgbGEgY29uZmlnIGRlc2RlIHdpbmRvd1xyXG4gICAgICBpZiAod2luZG93Ll9fUlVOVElNRV9DT05GSUdfXykge1xyXG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IHdpbmRvdy5fX1JVTlRJTUVfQ09ORklHX187XHJcbiAgICAgICAgdGhpcy5jb25maWdTdWJqZWN0Lm5leHQodGhpcy5fY29uZmlnKTtcclxuICAgICAgICByZXR1cm4gb2YodGhpcy5fY29uZmlnIGFzIFJ1bnRpbWVDb25maWcpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBTaSBubyBlc3TDoSBlbiB3aW5kb3csIGhhY2Vtb3MgcGV0aWNpw7NuIEhUVFBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8UnVudGltZUNvbmZpZz4oJy9ydW50aW1lLWNvbmZpZy5qc29uJykucGlwZShcclxuICAgICAgICB0YXAoY29uZmlnID0+IHtcclxuICAgICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcclxuICAgICAgICAgIHRoaXMuY29uZmlnU3ViamVjdC5uZXh0KGNvbmZpZyk7XHJcbiAgICAgICAgICAvLyBHdWFyZGFtb3MgZW4gd2luZG93IHBhcmEgc2lndWllbnRlcyBhY2Nlc29zXHJcbiAgICAgICAgICB3aW5kb3cuX19SVU5USU1FX0NPTkZJR19fID0gY29uZmlnO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBydW50aW1lIGNvbmZpZzonLCBlcnJvcik7XHJcbiAgICAgICAgICAvLyBGYWxsYmFjayBjb25maWcgc2kgZmFsbGEgbGEgY2FyZ2FcclxuICAgICAgICAgIGNvbnN0IGZhbGxiYWNrQ29uZmlnOiBSdW50aW1lQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBhcGlVcmw6ICdodHRwczovL2VsZGVuLXByZXByb2QuYmFja2VuZC5lYXN5Y29tbWVyY2UuY29tLmFyLycsXHJcbiAgICAgICAgICAgIGFwcEVudjogJ3ByZXByb2QnLFxyXG4gICAgICAgICAgICBwcm9kdWN0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgbG9jYWxlOiAnZXNfQVInLFxyXG4gICAgICAgICAgICBjaGFubmVsOiAnbWlub3Jpc3RhJ1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuX2NvbmZpZyA9IGZhbGxiYWNrQ29uZmlnO1xyXG4gICAgICAgICAgdGhpcy5jb25maWdTdWJqZWN0Lm5leHQoZmFsbGJhY2tDb25maWcpO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKGZhbGxiYWNrQ29uZmlnKTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gRW4gU1NSLCBsZWVtb3MgZGVzZGUgd2luZG93IHF1ZSBmdWUgaW55ZWN0YWRvIHBvciBlbCBzZXJ2aWRvclxyXG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Ll9fUlVOVElNRV9DT05GSUdfXykge1xyXG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IHdpbmRvdy5fX1JVTlRJTUVfQ09ORklHX187XHJcbiAgICAgICAgdGhpcy5jb25maWdTdWJqZWN0Lm5leHQodGhpcy5fY29uZmlnKTtcclxuICAgICAgICByZXR1cm4gb2YodGhpcy5fY29uZmlnIGFzIFJ1bnRpbWVDb25maWcpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBGYWxsYmFjayBwYXJhIFNTUiBzaSBubyBoYXkgY29uZmlnIGlueWVjdGFkYVxyXG4gICAgICAvLyBFbiBlbCBzZXJ2aWRvciwgbGFzIHZhcmlhYmxlcyBkZSBlbnRvcm5vIHNlIGNvbmZpZ3VyYW4gZGVzZGUgZWwgc2VydmVyLnRzXHJcbiAgICAgIGNvbnN0IGZhbGxiYWNrQ29uZmlnOiBSdW50aW1lQ29uZmlnID0ge1xyXG4gICAgICAgIGFwaVVybDogJ2h0dHBzOi8vZWxkZW4tcHJlcHJvZC5iYWNrZW5kLmVhc3ljb21tZXJjZS5jb20uYXIvJyxcclxuICAgICAgICBhcHBFbnY6ICdwcmVwcm9kJyxcclxuICAgICAgICBwcm9kdWN0aW9uOiBmYWxzZSxcclxuICAgICAgICBsb2NhbGU6ICdlc19BUicsXHJcbiAgICAgICAgY2hhbm5lbDogJ21pbm9yaXN0YSdcclxuICAgICAgfTtcclxuICAgICAgXHJcbiAgICAgIHRoaXMuX2NvbmZpZyA9IGZhbGxiYWNrQ29uZmlnO1xyXG4gICAgICB0aGlzLmNvbmZpZ1N1YmplY3QubmV4dChmYWxsYmFja0NvbmZpZyk7XHJcbiAgICAgIHJldHVybiBvZihmYWxsYmFja0NvbmZpZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPYnRpZW5lIGxhIGNvbmZpZ3VyYWNpw7NuIGFjdHVhbCAoc8OtbmNyb25vKVxyXG4gICAqL1xyXG4gIGdldENvbmZpZygpOiBSdW50aW1lQ29uZmlnIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2J0aWVuZSBsYSBBUEkgVVJMIGFjdHVhbFxyXG4gICAqL1xyXG4gIGdldEFwaVVybCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZz8uYXBpVXJsIHx8ICdodHRwczovL2VsZGVuLXByZXByb2QuYmFja2VuZC5lYXN5Y29tbWVyY2UuY29tLmFyLyc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPYnRpZW5lIGxhIEZyb250ZW5kIFVSTCBhY3R1YWxcclxuICAgKi9cclxuICBnZXRGcm9udGVuZFVybCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZz8uZnJvbnRlbmRVcmw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPYnRpZW5lIGVsIGVudG9ybm8gYWN0dWFsXHJcbiAgICovXHJcbiAgZ2V0QXBwRW52KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnPy5hcHBFbnYgfHwgJ2RldmVsb3BtZW50JztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZlcmlmaWNhIHNpIGVzdGFtb3MgZW4gcHJvZHVjY2nDs25cclxuICAgKi9cclxuICBpc1Byb2R1Y3Rpb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnPy5wcm9kdWN0aW9uIHx8IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2J0aWVuZSBlbCBsb2NhbGUgYWN0dWFsXHJcbiAgICovXHJcbiAgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnPy5sb2NhbGUgfHwgJ2VzX0FSJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9idGllbmUgZWwgY2FuYWwgYWN0dWFsXHJcbiAgICovXHJcbiAgZ2V0Q2hhbm5lbCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZz8uY2hhbm5lbCB8fCAnbWlub3Jpc3RhJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE3DqXRvZG8gaGVscGVyIHBhcmEgY29uc3RydWlyIFVSTHMgZGUgQVBJXHJcbiAgICovXHJcbiAgYnVpbGRBcGlVcmwoZW5kcG9pbnQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBhcGlVcmwgPSB0aGlzLmdldEFwaVVybCgpO1xyXG4gICAgY29uc3QgY2xlYW5FbmRwb2ludCA9IGVuZHBvaW50LnN0YXJ0c1dpdGgoJy8nKSA/IGVuZHBvaW50LnNsaWNlKDEpIDogZW5kcG9pbnQ7XHJcbiAgICByZXR1cm4gYCR7YXBpVXJsfSR7Y2xlYW5FbmRwb2ludH1gO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyBoZWxwZXIgcGFyYSBjb25zdHJ1aXIgVVJMcyBkZWwgZnJvbnRlbmRcclxuICAgKi9cclxuICBidWlsZEZyb250ZW5kVXJsKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBmcm9udGVuZFVybCA9IHRoaXMuZ2V0RnJvbnRlbmRVcmwoKTtcclxuICAgIGlmICghZnJvbnRlbmRVcmwpIHtcclxuICAgICAgcmV0dXJuIHBhdGg7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjbGVhblBhdGggPSBwYXRoLnN0YXJ0c1dpdGgoJy8nKSA/IHBhdGguc2xpY2UoMSkgOiBwYXRoO1xyXG4gICAgcmV0dXJuIGAke2Zyb250ZW5kVXJsfSR7Y2xlYW5QYXRofWA7XHJcbiAgfVxyXG59Il19
|
|
190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1jb25maWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1zZXJ2aWNlcy9ydW50aW1lLWNvbmZpZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVwRCxPQUFPLEVBQWMsRUFBRSxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBUTlELE1BQU0sT0FBTyxvQkFBb0I7SUFTQTtJQUNyQjtJQVRGLGFBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBdUIsSUFBSSxDQUFDLENBQUM7SUFDakUsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFM0MsT0FBTyxHQUF5QixJQUFJLENBQUM7SUFDckMsWUFBWSxHQUFxQyxJQUFJLENBQUM7SUFDdEQsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUUxQixZQUMrQixVQUFrQixFQUN2QyxJQUFnQjtRQURLLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDdkMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUV4QixtRkFBbUY7UUFDbkYsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksTUFBTSxDQUFDLGtCQUFrQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2xGLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDO1lBQ3pDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUks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Q0FBQztZQUNqQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDOUQsT0FBTyxHQUFHLFdBQVcsR0FBRyxTQUFTLEVBQUUsQ0FBQztJQUN0QyxDQUFDO3dHQS9MVSxvQkFBb0Isa0JBU3JCLFdBQVc7NEdBVFYsb0JBQW9CLGNBRm5CLE1BQU07OzRGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQVVJLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgUExBVEZPUk1fSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHRhcCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFJ1bnRpbWVDb25maWcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3J1bnRpbWUtY29uZmlnJztcclxuXHJcbmRlY2xhcmUgY29uc3Qgd2luZG93OiBhbnk7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSdW50aW1lQ29uZmlnU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBjb25maWdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSdW50aW1lQ29uZmlnIHwgbnVsbD4obnVsbCk7XHJcbiAgcHVibGljIGNvbmZpZyQgPSB0aGlzLmNvbmZpZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgXHJcbiAgcHJpdmF0ZSBfY29uZmlnOiBSdW50aW1lQ29uZmlnIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfbG9hZFByb21pc2U6IE9ic2VydmFibGU8UnVudGltZUNvbmZpZz4gfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIF9pc0xvYWRlZCA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogT2JqZWN0LFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50XHJcbiAgKSB7XHJcbiAgICAvLyBFbiBTU1IgbyBicm93c2VyLCBpbnRlbnRhciBjYXJnYXIgaW5tZWRpYXRhbWVudGUgZGVzZGUgd2luZG93IHNpIGVzdMOhIGRpc3BvbmlibGVcclxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuX19SVU5USU1FX0NPTkZJR19fICYmICF0aGlzLl9pc0xvYWRlZCkge1xyXG4gICAgICB0aGlzLl9jb25maWcgPSB3aW5kb3cuX19SVU5USU1FX0NPTkZJR19fO1xyXG4gICAgICB0aGlzLl9pc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuY29uZmlnU3ViamVjdC5uZXh0KHRoaXMuX2NvbmZpZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbmljaWFsaXphY2nDs24gw7puaWNhIC0gbGxhbWFkYSBwb3IgQVBQX0lOSVRJQUxJWkVSXHJcbiAgICogR2FyYW50aXphIHF1ZSBsYSBjb25maWd1cmFjacOzbiBzZSBjYXJnYSBzb2xvIHVuYSB2ZXogYWwgaW5pY2lvXHJcbiAgICovXHJcbiAgaW5pdGlhbGl6ZSgpOiBQcm9taXNlPFJ1bnRpbWVDb25maWc+IHtcclxuICAgIGlmICh0aGlzLl9pc0xvYWRlZCAmJiB0aGlzLl9jb25maWcpIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHRoaXMubG9hZENvbmZpZygpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGNvbmZpZzogUnVudGltZUNvbmZpZykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5faXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgcmVzb2x2ZShjb25maWcpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYXJnYSBsYSBjb25maWd1cmFjacOzbiBlbiBydW50aW1lIChvcHRpbWl6YWRhIHBhcmEgdW5hIHNvbGEgY2FyZ2EpXHJcbiAgICogLSBFbiBTU1I6IExlZSBkZXNkZSBlbCBvYmpldG8gd2luZG93IGlueWVjdGFkbyBwb3IgZWwgc2Vydmlkb3JcclxuICAgKiAtIEVuIEJyb3dzZXI6IEhhY2UgcGV0aWNpw7NuIEhUVFAgYSAvcnVudGltZS1jb25maWcuanNvbiAoc29sbyBzaSBubyBlc3TDoSBlbiB3aW5kb3cpXHJcbiAgICovXHJcbiAgbG9hZENvbmZpZygpOiBPYnNlcnZhYmxlPFJ1bnRpbWVDb25maWc+IHtcclxuICAgIC8vIFNpIHlhIHRlbmVtb3MgbGEgY29uZmlnIGNhcmdhZGEsIGxhIGRldm9sdmVtb3MgaW5tZWRpYXRhbWVudGVcclxuICAgIGlmICh0aGlzLl9pc0xvYWRlZCAmJiB0aGlzLl9jb25maWcpIHtcclxuICAgICAgcmV0dXJuIG9mKHRoaXMuX2NvbmZpZyBhcyBSdW50aW1lQ29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTaSB5YSBoYXkgdW5hIGNhcmdhIGVuIHByb2dyZXNvLCByZXV0aWxpemFtb3MgZXNhIHBldGljacOzblxyXG4gICAgaWYgKHRoaXMuX2xvYWRQcm9taXNlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9sb2FkUHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG4gICAgICAvLyBFbiBlbCBuYXZlZ2Fkb3IsIHByaW1lcm8gaW50ZW50YW1vcyBvYnRlbmVyIGxhIGNvbmZpZyBkZXNkZSB3aW5kb3dcclxuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5fX1JVTlRJTUVfQ09ORklHX18gJiYgIXRoaXMuX2lzTG9hZGVkKSB7XHJcbiAgICAgICAgdGhpcy5fY29uZmlnID0gd2luZG93Ll9fUlVOVElNRV9DT05GSUdfXztcclxuICAgICAgICB0aGlzLl9pc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb25maWdTdWJqZWN0Lm5leHQodGhpcy5fY29uZmlnKTtcclxuICAgICAgICByZXR1cm4gb2YodGhpcy5fY29uZmlnIGFzIFJ1bnRpbWVDb25maWcpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBTaSBubyBlc3TDoSBlbiB3aW5kb3csIGhhY2Vtb3MgcGV0aWNpw7NuIEhUVFAgKHNvbG8gdW5hIHZleilcclxuICAgICAgdGhpcy5fbG9hZFByb21pc2UgPSB0aGlzLmh0dHAuZ2V0PFJ1bnRpbWVDb25maWc+KCcvcnVudGltZS1jb25maWcuanNvbicpLnBpcGUoXHJcbiAgICAgICAgdGFwKGNvbmZpZyA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XHJcbiAgICAgICAgICB0aGlzLl9pc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ1N1YmplY3QubmV4dChjb25maWcpO1xyXG4gICAgICAgICAgLy8gR3VhcmRhbW9zIGVuIHdpbmRvdyBwYXJhIHNpZ3VpZW50ZXMgYWNjZXNvc1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5fX1JVTlRJTUVfQ09ORklHX18gPSBjb25maWc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgc2hhcmVSZXBsYXkoMSksIC8vIENhY2hlIGxhIHJlc3B1ZXN0YSBwYXJhIG3Dumx0aXBsZXMgc3VzY3JpcGNpb25lc1xyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBydW50aW1lIGNvbmZpZzonLCBlcnJvcik7XHJcbiAgICAgICAgICAvLyBGYWxsYmFjayBjb25maWcgc2kgZmFsbGEgbGEgY2FyZ2FcclxuICAgICAgICAgIGNvbnN0IGZhbGxiYWNrQ29uZmlnOiBSdW50aW1lQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBhcGlVcmw6ICdodHRwczovL2VsZGVuLXByZXByb2QuYmFja2VuZC5lYXN5Y29tbWVyY2UuY29tLmFyLycsXHJcbiAgICAgICAgICAgIGFwcEVudjogJ3ByZXByb2QnLFxyXG4gICAgICAgICAgICBwcm9kdWN0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgbG9jYWxlOiAnZXNfQVInLFxyXG4gICAgICAgICAgICBjaGFubmVsOiAnbWlub3Jpc3RhJ1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuX2NvbmZpZyA9IGZhbGxiYWNrQ29uZmlnO1xyXG4gICAgICAgICAgdGhpcy5faXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jb25maWdTdWJqZWN0Lm5leHQoZmFsbGJhY2tDb25maWcpO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKGZhbGxiYWNrQ29uZmlnKTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgICBcclxuICAgICAgcmV0dXJuIHRoaXMuX2xvYWRQcm9taXNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gRW4gU1NSLCBsZWVtb3MgZGVzZGUgd2luZG93IHF1ZSBmdWUgaW55ZWN0YWRvIHBvciBlbCBzZXJ2aWRvclxyXG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Ll9fUlVOVElNRV9DT05GSUdfXyAmJiAhdGhpcy5faXNMb2FkZWQpIHtcclxuICAgICAgICB0aGlzLl9jb25maWcgPSB3aW5kb3cuX19SVU5USU1FX0NPTkZJR19fO1xyXG4gICAgICAgIHRoaXMuX2lzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNvbmZpZ1N1YmplY3QubmV4dCh0aGlzLl9jb25maWcpO1xyXG4gICAgICAgIHJldHVybiBvZih0aGlzLl9jb25maWcgYXMgUnVudGltZUNvbmZpZyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEZhbGxiYWNrIHBhcmEgU1NSIHNpIG5vIGhheSBjb25maWcgaW55ZWN0YWRhXHJcbiAgICAgIC8vIEVuIGVsIHNlcnZpZG9yLCBsYXMgdmFyaWFibGVzIGRlIGVudG9ybm8gc2UgY29uZmlndXJhbiBkZXNkZSBlbCBzZXJ2ZXIudHNcclxuICAgICAgY29uc3QgZmFsbGJhY2tDb25maWc6IFJ1bnRpbWVDb25maWcgPSB7XHJcbiAgICAgICAgYXBpVXJsOiAnaHR0cHM6Ly9lbGRlbi1wcmVwcm9kLmJhY2tlbmQuZWFzeWNvbW1lcmNlLmNvbS5hci8nLFxyXG4gICAgICAgIGFwcEVudjogJ3ByZXByb2QnLFxyXG4gICAgICAgIHByb2R1Y3Rpb246IGZhbHNlLFxyXG4gICAgICAgIGxvY2FsZTogJ2VzX0FSJyxcclxuICAgICAgICBjaGFubmVsOiAnbWlub3Jpc3RhJ1xyXG4gICAgICB9O1xyXG4gICAgICBcclxuICAgICAgdGhpcy5fY29uZmlnID0gZmFsbGJhY2tDb25maWc7XHJcbiAgICAgIHRoaXMuX2lzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jb25maWdTdWJqZWN0Lm5leHQoZmFsbGJhY2tDb25maWcpO1xyXG4gICAgICByZXR1cm4gb2YoZmFsbGJhY2tDb25maWcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2J0aWVuZSBsYSBjb25maWd1cmFjacOzbiBhY3R1YWwgKHPDrW5jcm9ubylcclxuICAgKi9cclxuICBnZXRDb25maWcoKTogUnVudGltZUNvbmZpZyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9idGllbmUgbGEgQVBJIFVSTCBhY3R1YWxcclxuICAgKi9cclxuICBnZXRBcGlVcmwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9jb25maWc/LmFwaVVybCB8fCAnaHR0cHM6Ly9lbGRlbi1wcmVwcm9kLmJhY2tlbmQuZWFzeWNvbW1lcmNlLmNvbS5hci8nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2J0aWVuZSBsYSBGcm9udGVuZCBVUkwgYWN0dWFsXHJcbiAgICovXHJcbiAgZ2V0RnJvbnRlbmRVcmwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9jb25maWc/LmZyb250ZW5kVXJsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2J0aWVuZSBlbCBlbnRvcm5vIGFjdHVhbFxyXG4gICAqL1xyXG4gIGdldEFwcEVudigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZz8uYXBwRW52IHx8ICdkZXZlbG9wbWVudCc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWZXJpZmljYSBzaSBlc3RhbW9zIGVuIHByb2R1Y2Npw7NuXHJcbiAgICovXHJcbiAgaXNQcm9kdWN0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZz8ucHJvZHVjdGlvbiB8fCBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9idGllbmUgZWwgbG9jYWxlIGFjdHVhbFxyXG4gICAqL1xyXG4gIGdldExvY2FsZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZz8ubG9jYWxlIHx8ICdlc19BUic7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPYnRpZW5lIGVsIGNhbmFsIGFjdHVhbFxyXG4gICAqL1xyXG4gIGdldENoYW5uZWwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9jb25maWc/LmNoYW5uZWwgfHwgJ21pbm9yaXN0YSc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIGhlbHBlciBwYXJhIGNvbnN0cnVpciBVUkxzIGRlIEFQSVxyXG4gICAqL1xyXG4gIGJ1aWxkQXBpVXJsKGVuZHBvaW50OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgYXBpVXJsID0gdGhpcy5nZXRBcGlVcmwoKTtcclxuICAgIGNvbnN0IGNsZWFuRW5kcG9pbnQgPSBlbmRwb2ludC5zdGFydHNXaXRoKCcvJykgPyBlbmRwb2ludC5zbGljZSgxKSA6IGVuZHBvaW50O1xyXG4gICAgcmV0dXJuIGAke2FwaVVybH0ke2NsZWFuRW5kcG9pbnR9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE3DqXRvZG8gaGVscGVyIHBhcmEgY29uc3RydWlyIFVSTHMgZGVsIGZyb250ZW5kXHJcbiAgICovXHJcbiAgYnVpbGRGcm9udGVuZFVybChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZnJvbnRlbmRVcmwgPSB0aGlzLmdldEZyb250ZW5kVXJsKCk7XHJcbiAgICBpZiAoIWZyb250ZW5kVXJsKSB7XHJcbiAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2xlYW5QYXRoID0gcGF0aC5zdGFydHNXaXRoKCcvJykgPyBwYXRoLnNsaWNlKDEpIDogcGF0aDtcclxuICAgIHJldHVybiBgJHtmcm9udGVuZFVybH0ke2NsZWFuUGF0aH1gO1xyXG4gIH1cclxufSJdfQ==
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
export * from './auth.interceptor';
|
|
2
|
-
|
|
2
|
+
export * from './runtime-config.interceptor';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvaW50ZXJjZXB0b3JzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyw4QkFBOEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYXV0aC5pbnRlcmNlcHRvcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vcnVudGltZS1jb25maWcuaW50ZXJjZXB0b3InOyJdfQ==
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { inject } from '@angular/core';
|
|
2
|
+
import { RuntimeConfigService } from '../ec-services/runtime-config.service';
|
|
3
|
+
import { switchMap, take, filter } from 'rxjs/operators';
|
|
4
|
+
/**
|
|
5
|
+
* Interceptor que garantiza que las peticiones HTTP no se hagan hasta que
|
|
6
|
+
* el runtime config esté completamente cargado
|
|
7
|
+
* Evita que se hagan peticiones con URLs incorrectas
|
|
8
|
+
*/
|
|
9
|
+
export const runtimeConfigInterceptor = (req, next) => {
|
|
10
|
+
const runtimeConfigService = inject(RuntimeConfigService);
|
|
11
|
+
// Si la petición es para obtener el runtime config, la dejamos pasar inmediatamente
|
|
12
|
+
if (req.url.includes('/runtime-config.json')) {
|
|
13
|
+
return next(req);
|
|
14
|
+
}
|
|
15
|
+
// Si la petición es para assets estáticos, la dejamos pasar
|
|
16
|
+
if (req.url.includes('/assets/') || req.url.includes('.json') || req.url.includes('.css') || req.url.includes('.js')) {
|
|
17
|
+
return next(req);
|
|
18
|
+
}
|
|
19
|
+
// Para las demás peticiones, esperamos a que el config esté listo
|
|
20
|
+
return runtimeConfigService.config$.pipe(filter(config => config !== null), // Esperamos hasta que haya config
|
|
21
|
+
take(1), // Solo tomamos el primer valor válido
|
|
22
|
+
switchMap(config => {
|
|
23
|
+
// Si la URL ya es completa (empieza con http), la dejamos como está
|
|
24
|
+
if (req.url.startsWith('http')) {
|
|
25
|
+
return next(req);
|
|
26
|
+
}
|
|
27
|
+
// Si es una URL relativa que debería ir al API, la completamos
|
|
28
|
+
if (req.url.startsWith('/api/') || req.url.startsWith('api/')) {
|
|
29
|
+
const apiUrl = config.apiUrl;
|
|
30
|
+
const cleanUrl = req.url.startsWith('/') ? req.url.substring(1) : req.url;
|
|
31
|
+
const fullUrl = `${apiUrl}${cleanUrl}`;
|
|
32
|
+
const modifiedReq = req.clone({
|
|
33
|
+
url: fullUrl
|
|
34
|
+
});
|
|
35
|
+
return next(modifiedReq);
|
|
36
|
+
}
|
|
37
|
+
// Para otras URLs, las dejamos pasar sin modificar
|
|
38
|
+
return next(req);
|
|
39
|
+
}));
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1jb25maWcuaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvaW50ZXJjZXB0b3JzL3J1bnRpbWUtY29uZmlnLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFzQixDQUFDLEdBQXlCLEVBQUUsSUFBbUIsRUFBRSxFQUFFO0lBQzVHLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFFMUQsb0ZBQW9GO0lBQ3BGLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDO1FBQzdDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCw0REFBNEQ7SUFDNUQsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3JILE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCxrRUFBa0U7SUFDbEUsT0FBTyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUN0QyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLEVBQUUsa0NBQWtDO0lBQ3JFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxzQ0FBc0M7SUFDL0MsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ2pCLG9FQUFvRTtRQUNwRSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDL0IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkIsQ0FBQztRQUVELCtEQUErRDtRQUMvRCxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDOUQsTUFBTSxNQUFNLEdBQUcsTUFBTyxDQUFDLE1BQU0sQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7WUFDMUUsTUFBTSxPQUFPLEdBQUcsR0FBRyxNQUFNLEdBQUcsUUFBUSxFQUFFLENBQUM7WUFFdkMsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDNUIsR0FBRyxFQUFFLE9BQU87YUFDYixDQUFDLENBQUM7WUFFSCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBRUQsbURBQW1EO1FBQ25ELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUMsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwSW50ZXJjZXB0b3JGbiwgSHR0cFJlcXVlc3QsIEh0dHBIYW5kbGVyRm4gfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSdW50aW1lQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL2VjLXNlcnZpY2VzL3J1bnRpbWUtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHRha2UsIGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbi8qKlxyXG4gKiBJbnRlcmNlcHRvciBxdWUgZ2FyYW50aXphIHF1ZSBsYXMgcGV0aWNpb25lcyBIVFRQIG5vIHNlIGhhZ2FuIGhhc3RhIHF1ZSBcclxuICogZWwgcnVudGltZSBjb25maWcgZXN0w6kgY29tcGxldGFtZW50ZSBjYXJnYWRvXHJcbiAqIEV2aXRhIHF1ZSBzZSBoYWdhbiBwZXRpY2lvbmVzIGNvbiBVUkxzIGluY29ycmVjdGFzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgcnVudGltZUNvbmZpZ0ludGVyY2VwdG9yOiBIdHRwSW50ZXJjZXB0b3JGbiA9IChyZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+LCBuZXh0OiBIdHRwSGFuZGxlckZuKSA9PiB7XHJcbiAgY29uc3QgcnVudGltZUNvbmZpZ1NlcnZpY2UgPSBpbmplY3QoUnVudGltZUNvbmZpZ1NlcnZpY2UpO1xyXG4gIFxyXG4gIC8vIFNpIGxhIHBldGljacOzbiBlcyBwYXJhIG9idGVuZXIgZWwgcnVudGltZSBjb25maWcsIGxhIGRlamFtb3MgcGFzYXIgaW5tZWRpYXRhbWVudGVcclxuICBpZiAocmVxLnVybC5pbmNsdWRlcygnL3J1bnRpbWUtY29uZmlnLmpzb24nKSkge1xyXG4gICAgcmV0dXJuIG5leHQocmVxKTtcclxuICB9XHJcbiAgXHJcbiAgLy8gU2kgbGEgcGV0aWNpw7NuIGVzIHBhcmEgYXNzZXRzIGVzdMOhdGljb3MsIGxhIGRlamFtb3MgcGFzYXJcclxuICBpZiAocmVxLnVybC5pbmNsdWRlcygnL2Fzc2V0cy8nKSB8fCByZXEudXJsLmluY2x1ZGVzKCcuanNvbicpIHx8IHJlcS51cmwuaW5jbHVkZXMoJy5jc3MnKSB8fCByZXEudXJsLmluY2x1ZGVzKCcuanMnKSkge1xyXG4gICAgcmV0dXJuIG5leHQocmVxKTtcclxuICB9XHJcblxyXG4gIC8vIFBhcmEgbGFzIGRlbcOhcyBwZXRpY2lvbmVzLCBlc3BlcmFtb3MgYSBxdWUgZWwgY29uZmlnIGVzdMOpIGxpc3RvXHJcbiAgcmV0dXJuIHJ1bnRpbWVDb25maWdTZXJ2aWNlLmNvbmZpZyQucGlwZShcclxuICAgIGZpbHRlcihjb25maWcgPT4gY29uZmlnICE9PSBudWxsKSwgLy8gRXNwZXJhbW9zIGhhc3RhIHF1ZSBoYXlhIGNvbmZpZ1xyXG4gICAgdGFrZSgxKSwgLy8gU29sbyB0b21hbW9zIGVsIHByaW1lciB2YWxvciB2w6FsaWRvXHJcbiAgICBzd2l0Y2hNYXAoY29uZmlnID0+IHtcclxuICAgICAgLy8gU2kgbGEgVVJMIHlhIGVzIGNvbXBsZXRhIChlbXBpZXphIGNvbiBodHRwKSwgbGEgZGVqYW1vcyBjb21vIGVzdMOhXHJcbiAgICAgIGlmIChyZXEudXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xyXG4gICAgICAgIHJldHVybiBuZXh0KHJlcSk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIC8vIFNpIGVzIHVuYSBVUkwgcmVsYXRpdmEgcXVlIGRlYmVyw61hIGlyIGFsIEFQSSwgbGEgY29tcGxldGFtb3NcclxuICAgICAgaWYgKHJlcS51cmwuc3RhcnRzV2l0aCgnL2FwaS8nKSB8fCByZXEudXJsLnN0YXJ0c1dpdGgoJ2FwaS8nKSkge1xyXG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGNvbmZpZyEuYXBpVXJsO1xyXG4gICAgICAgIGNvbnN0IGNsZWFuVXJsID0gcmVxLnVybC5zdGFydHNXaXRoKCcvJykgPyByZXEudXJsLnN1YnN0cmluZygxKSA6IHJlcS51cmw7XHJcbiAgICAgICAgY29uc3QgZnVsbFVybCA9IGAke2FwaVVybH0ke2NsZWFuVXJsfWA7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgbW9kaWZpZWRSZXEgPSByZXEuY2xvbmUoe1xyXG4gICAgICAgICAgdXJsOiBmdWxsVXJsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIG5leHQobW9kaWZpZWRSZXEpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBQYXJhIG90cmFzIFVSTHMsIGxhcyBkZWphbW9zIHBhc2FyIHNpbiBtb2RpZmljYXJcclxuICAgICAgcmV0dXJuIG5leHQocmVxKTtcclxuICAgIH0pXHJcbiAgKTtcclxufTsiXX0=
|
|
@@ -1,23 +1,26 @@
|
|
|
1
1
|
import { APP_INITIALIZER, makeEnvironmentProviders } from '@angular/core';
|
|
2
2
|
import { RuntimeConfigService } from '../ec-services/runtime-config.service';
|
|
3
3
|
/**
|
|
4
|
-
* Factory function para APP_INITIALIZER
|
|
5
|
-
* Carga la configuración runtime antes de que Angular bootstrap la aplicación
|
|
4
|
+
* Factory function para APP_INITIALIZER (OPTIMIZADA)
|
|
5
|
+
* Carga la configuración runtime UNA SOLA VEZ antes de que Angular bootstrap la aplicación
|
|
6
|
+
* Evita múltiples cargas y mejora el rendimiento
|
|
6
7
|
*/
|
|
7
8
|
export function initializeRuntimeConfig(runtimeConfigService) {
|
|
8
9
|
return () => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
console.error('❌ Failed to load runtime config:', error);
|
|
17
|
-
// Aún en caso de error, resolvemos para no bloquear la app
|
|
18
|
-
resolve(null);
|
|
19
|
-
}
|
|
10
|
+
console.log('🚀 Inicializando Runtime Config...');
|
|
11
|
+
return runtimeConfigService.initialize()
|
|
12
|
+
.then((config) => {
|
|
13
|
+
console.log('✅ Runtime config inicializado correctamente:', {
|
|
14
|
+
apiUrl: config.apiUrl,
|
|
15
|
+
appEnv: config.appEnv,
|
|
16
|
+
production: config.production
|
|
20
17
|
});
|
|
18
|
+
return config;
|
|
19
|
+
})
|
|
20
|
+
.catch((error) => {
|
|
21
|
+
console.error('❌ Error al inicializar runtime config:', error);
|
|
22
|
+
// Aún en caso de error, continuamos para no bloquear la app
|
|
23
|
+
return null;
|
|
21
24
|
});
|
|
22
25
|
};
|
|
23
26
|
}
|
|
@@ -36,4 +39,4 @@ export function provideRuntimeConfig() {
|
|
|
36
39
|
}
|
|
37
40
|
]);
|
|
38
41
|
}
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZVJ1bnRpbWVDb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvcHJvdmlkZXJzL3Byb3ZpZGVSdW50aW1lQ29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQXdCLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRTdFOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsb0JBQTBDO0lBQ2hGLE9BQU8sR0FBaUIsRUFBRTtRQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7UUFDbEQsT0FBTyxvQkFBb0IsQ0FBQyxVQUFVLEVBQUU7YUFDckMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLDhDQUE4QyxFQUFFO2dCQUMxRCxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07Z0JBQ3JCLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtnQkFDckIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO2FBQzlCLENBQUMsQ0FBQztZQUNILE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyx3Q0FBd0MsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMvRCw0REFBNEQ7WUFDNUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE9BQU8sd0JBQXdCLENBQUM7UUFDOUIsb0JBQW9CO1FBQ3BCO1lBQ0UsT0FBTyxFQUFFLGVBQWU7WUFDeEIsVUFBVSxFQUFFLHVCQUF1QjtZQUNuQyxJQUFJLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztZQUM1QixLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQUF9JTklUSUFMSVpFUiwgRW52aXJvbm1lbnRQcm92aWRlcnMsIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSdW50aW1lQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL2VjLXNlcnZpY2VzL3J1bnRpbWUtY29uZmlnLnNlcnZpY2UnO1xyXG5cclxuLyoqXHJcbiAqIEZhY3RvcnkgZnVuY3Rpb24gcGFyYSBBUFBfSU5JVElBTElaRVIgKE9QVElNSVpBREEpXHJcbiAqIENhcmdhIGxhIGNvbmZpZ3VyYWNpw7NuIHJ1bnRpbWUgVU5BIFNPTEEgVkVaIGFudGVzIGRlIHF1ZSBBbmd1bGFyIGJvb3RzdHJhcCBsYSBhcGxpY2FjacOzblxyXG4gKiBFdml0YSBtw7psdGlwbGVzIGNhcmdhcyB5IG1lam9yYSBlbCByZW5kaW1pZW50b1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVSdW50aW1lQ29uZmlnKHJ1bnRpbWVDb25maWdTZXJ2aWNlOiBSdW50aW1lQ29uZmlnU2VydmljZSk6ICgpID0+IFByb21pc2U8YW55PiB7XHJcbiAgcmV0dXJuICgpOiBQcm9taXNlPGFueT4gPT4ge1xyXG4gICAgY29uc29sZS5sb2coJ/CfmoAgSW5pY2lhbGl6YW5kbyBSdW50aW1lIENvbmZpZy4uLicpO1xyXG4gICAgcmV0dXJuIHJ1bnRpbWVDb25maWdTZXJ2aWNlLmluaXRpYWxpemUoKVxyXG4gICAgICAudGhlbigoY29uZmlnKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ+KchSBSdW50aW1lIGNvbmZpZyBpbmljaWFsaXphZG8gY29ycmVjdGFtZW50ZTonLCB7XHJcbiAgICAgICAgICBhcGlVcmw6IGNvbmZpZy5hcGlVcmwsXHJcbiAgICAgICAgICBhcHBFbnY6IGNvbmZpZy5hcHBFbnYsXHJcbiAgICAgICAgICBwcm9kdWN0aW9uOiBjb25maWcucHJvZHVjdGlvblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBjb25maWc7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCfinYwgRXJyb3IgYWwgaW5pY2lhbGl6YXIgcnVudGltZSBjb25maWc6JywgZXJyb3IpO1xyXG4gICAgICAgIC8vIEHDum4gZW4gY2FzbyBkZSBlcnJvciwgY29udGludWFtb3MgcGFyYSBubyBibG9xdWVhciBsYSBhcHBcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfSk7XHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEZ1bmNpw7NuIHF1ZSBjb25maWd1cmEgZWwgUnVudGltZUNvbmZpZ1NlcnZpY2UgeSBzdSBpbmljaWFsaXphY2nDs25cclxuICogRGViZSBzZXIgdXNhZG8gZW4gYXBwLmNvbmZpZy50cyBqdW50byBjb24gcHJvdmlkZUVudmlyb25tZW50XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVJ1bnRpbWVDb25maWcoKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xyXG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xyXG4gICAgUnVudGltZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcclxuICAgICAgdXNlRmFjdG9yeTogaW5pdGlhbGl6ZVJ1bnRpbWVDb25maWcsXHJcbiAgICAgIGRlcHM6IFtSdW50aW1lQ29uZmlnU2VydmljZV0sXHJcbiAgICAgIG11bHRpOiB0cnVlXHJcbiAgICB9XHJcbiAgXSk7XHJcbn0iXX0=
|
|
@@ -2,10 +2,10 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { InjectionToken, makeEnvironmentProviders, PLATFORM_ID, Injectable, Inject, APP_INITIALIZER, inject, RendererFactory2, afterNextRender, signal, EnvironmentInjector, runInInjectionContext, Component, ChangeDetectorRef, HostListener, CUSTOM_ELEMENTS_SCHEMA, Input, Pipe, Injector, EventEmitter, Output, forwardRef, afterRender, ViewChild, computed, Renderer2, ChangeDetectionStrategy, Directive } from '@angular/core';
|
|
3
3
|
import * as i1$1 from '@angular/common';
|
|
4
4
|
import { isPlatformBrowser, DOCUMENT, AsyncPipe, CommonModule, TitleCasePipe, JsonPipe, UpperCasePipe, Location } from '@angular/common';
|
|
5
|
-
import { BehaviorSubject, of, take, shareReplay, map, catchError as catchError$1, filter, ReplaySubject, firstValueFrom, concatMap, throwError, switchMap, combineLatest } from 'rxjs';
|
|
5
|
+
import { BehaviorSubject, of, take, shareReplay as shareReplay$1, map, catchError as catchError$1, filter, ReplaySubject, firstValueFrom, concatMap, throwError, switchMap, combineLatest } from 'rxjs';
|
|
6
6
|
import * as i1 from '@angular/common/http';
|
|
7
7
|
import { HttpClient, HttpHeaders } from '@angular/common/http';
|
|
8
|
-
import { tap, catchError, filter as filter$1, skipWhile } from 'rxjs/operators';
|
|
8
|
+
import { tap, shareReplay, catchError, filter as filter$1, skipWhile, take as take$1, switchMap as switchMap$1 } from 'rxjs/operators';
|
|
9
9
|
import * as i1$2 from '@ngx-translate/core';
|
|
10
10
|
import { TranslateService, TranslateModule } from '@ngx-translate/core';
|
|
11
11
|
import { CookieService } from 'ngx-cookie-service';
|
|
@@ -50,34 +50,71 @@ class RuntimeConfigService {
|
|
|
50
50
|
configSubject = new BehaviorSubject(null);
|
|
51
51
|
config$ = this.configSubject.asObservable();
|
|
52
52
|
_config = null;
|
|
53
|
+
_loadPromise = null;
|
|
54
|
+
_isLoaded = false;
|
|
53
55
|
constructor(platformId, http) {
|
|
54
56
|
this.platformId = platformId;
|
|
55
57
|
this.http = http;
|
|
58
|
+
// En SSR o browser, intentar cargar inmediatamente desde window si está disponible
|
|
59
|
+
if (typeof window !== 'undefined' && window.__RUNTIME_CONFIG__ && !this._isLoaded) {
|
|
60
|
+
this._config = window.__RUNTIME_CONFIG__;
|
|
61
|
+
this._isLoaded = true;
|
|
62
|
+
this.configSubject.next(this._config);
|
|
63
|
+
}
|
|
56
64
|
}
|
|
57
65
|
/**
|
|
58
|
-
*
|
|
66
|
+
* Inicialización única - llamada por APP_INITIALIZER
|
|
67
|
+
* Garantiza que la configuración se carga solo una vez al inicio
|
|
68
|
+
*/
|
|
69
|
+
initialize() {
|
|
70
|
+
if (this._isLoaded && this._config) {
|
|
71
|
+
return Promise.resolve(this._config);
|
|
72
|
+
}
|
|
73
|
+
return new Promise((resolve, reject) => {
|
|
74
|
+
this.loadConfig().subscribe({
|
|
75
|
+
next: (config) => {
|
|
76
|
+
this._isLoaded = true;
|
|
77
|
+
resolve(config);
|
|
78
|
+
},
|
|
79
|
+
error: (error) => {
|
|
80
|
+
reject(error);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Carga la configuración en runtime (optimizada para una sola carga)
|
|
59
87
|
* - En SSR: Lee desde el objeto window inyectado por el servidor
|
|
60
|
-
* - En Browser: Hace petición HTTP a /runtime-config.json
|
|
88
|
+
* - En Browser: Hace petición HTTP a /runtime-config.json (solo si no está en window)
|
|
61
89
|
*/
|
|
62
90
|
loadConfig() {
|
|
63
|
-
// Si ya tenemos la config cargada, la devolvemos
|
|
64
|
-
if (this._config) {
|
|
91
|
+
// Si ya tenemos la config cargada, la devolvemos inmediatamente
|
|
92
|
+
if (this._isLoaded && this._config) {
|
|
65
93
|
return of(this._config);
|
|
66
94
|
}
|
|
95
|
+
// Si ya hay una carga en progreso, reutilizamos esa petición
|
|
96
|
+
if (this._loadPromise) {
|
|
97
|
+
return this._loadPromise;
|
|
98
|
+
}
|
|
67
99
|
if (isPlatformBrowser(this.platformId)) {
|
|
68
100
|
// En el navegador, primero intentamos obtener la config desde window
|
|
69
|
-
if (window.__RUNTIME_CONFIG__) {
|
|
101
|
+
if (typeof window !== 'undefined' && window.__RUNTIME_CONFIG__ && !this._isLoaded) {
|
|
70
102
|
this._config = window.__RUNTIME_CONFIG__;
|
|
103
|
+
this._isLoaded = true;
|
|
71
104
|
this.configSubject.next(this._config);
|
|
72
105
|
return of(this._config);
|
|
73
106
|
}
|
|
74
|
-
// Si no está en window, hacemos petición HTTP
|
|
75
|
-
|
|
107
|
+
// Si no está en window, hacemos petición HTTP (solo una vez)
|
|
108
|
+
this._loadPromise = this.http.get('/runtime-config.json').pipe(tap(config => {
|
|
76
109
|
this._config = config;
|
|
110
|
+
this._isLoaded = true;
|
|
77
111
|
this.configSubject.next(config);
|
|
78
112
|
// Guardamos en window para siguientes accesos
|
|
79
|
-
window
|
|
80
|
-
|
|
113
|
+
if (typeof window !== 'undefined') {
|
|
114
|
+
window.__RUNTIME_CONFIG__ = config;
|
|
115
|
+
}
|
|
116
|
+
}), shareReplay(1), // Cache la respuesta para múltiples suscripciones
|
|
117
|
+
catchError(error => {
|
|
81
118
|
console.error('Error loading runtime config:', error);
|
|
82
119
|
// Fallback config si falla la carga
|
|
83
120
|
const fallbackConfig = {
|
|
@@ -88,14 +125,17 @@ class RuntimeConfigService {
|
|
|
88
125
|
channel: 'minorista'
|
|
89
126
|
};
|
|
90
127
|
this._config = fallbackConfig;
|
|
128
|
+
this._isLoaded = true;
|
|
91
129
|
this.configSubject.next(fallbackConfig);
|
|
92
130
|
return of(fallbackConfig);
|
|
93
131
|
}));
|
|
132
|
+
return this._loadPromise;
|
|
94
133
|
}
|
|
95
134
|
else {
|
|
96
135
|
// En SSR, leemos desde window que fue inyectado por el servidor
|
|
97
|
-
if (typeof window !== 'undefined' && window.__RUNTIME_CONFIG__) {
|
|
136
|
+
if (typeof window !== 'undefined' && window.__RUNTIME_CONFIG__ && !this._isLoaded) {
|
|
98
137
|
this._config = window.__RUNTIME_CONFIG__;
|
|
138
|
+
this._isLoaded = true;
|
|
99
139
|
this.configSubject.next(this._config);
|
|
100
140
|
return of(this._config);
|
|
101
141
|
}
|
|
@@ -109,6 +149,7 @@ class RuntimeConfigService {
|
|
|
109
149
|
channel: 'minorista'
|
|
110
150
|
};
|
|
111
151
|
this._config = fallbackConfig;
|
|
152
|
+
this._isLoaded = true;
|
|
112
153
|
this.configSubject.next(fallbackConfig);
|
|
113
154
|
return of(fallbackConfig);
|
|
114
155
|
}
|
|
@@ -188,23 +229,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
188
229
|
}] }, { type: i1.HttpClient }] });
|
|
189
230
|
|
|
190
231
|
/**
|
|
191
|
-
* Factory function para APP_INITIALIZER
|
|
192
|
-
* Carga la configuración runtime antes de que Angular bootstrap la aplicación
|
|
232
|
+
* Factory function para APP_INITIALIZER (OPTIMIZADA)
|
|
233
|
+
* Carga la configuración runtime UNA SOLA VEZ antes de que Angular bootstrap la aplicación
|
|
234
|
+
* Evita múltiples cargas y mejora el rendimiento
|
|
193
235
|
*/
|
|
194
236
|
function initializeRuntimeConfig(runtimeConfigService) {
|
|
195
237
|
return () => {
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
console.error('❌ Failed to load runtime config:', error);
|
|
204
|
-
// Aún en caso de error, resolvemos para no bloquear la app
|
|
205
|
-
resolve(null);
|
|
206
|
-
}
|
|
238
|
+
console.log('🚀 Inicializando Runtime Config...');
|
|
239
|
+
return runtimeConfigService.initialize()
|
|
240
|
+
.then((config) => {
|
|
241
|
+
console.log('✅ Runtime config inicializado correctamente:', {
|
|
242
|
+
apiUrl: config.apiUrl,
|
|
243
|
+
appEnv: config.appEnv,
|
|
244
|
+
production: config.production
|
|
207
245
|
});
|
|
246
|
+
return config;
|
|
247
|
+
})
|
|
248
|
+
.catch((error) => {
|
|
249
|
+
console.error('❌ Error al inicializar runtime config:', error);
|
|
250
|
+
// Aún en caso de error, continuamos para no bloquear la app
|
|
251
|
+
return null;
|
|
208
252
|
});
|
|
209
253
|
};
|
|
210
254
|
}
|
|
@@ -773,7 +817,7 @@ class OptionsService {
|
|
|
773
817
|
*/
|
|
774
818
|
getCategories() {
|
|
775
819
|
if (this.categoriesSubject.getValue().length === 0) {
|
|
776
|
-
this.connection.get(this.taxonsApi()).pipe(shareReplay(1), map((response) => {
|
|
820
|
+
this.connection.get(this.taxonsApi()).pipe(shareReplay$1(1), map((response) => {
|
|
777
821
|
const categories = this.appendPaths(true, response);
|
|
778
822
|
this.categoriesSubject.next(categories);
|
|
779
823
|
return categories;
|
|
@@ -791,7 +835,7 @@ class OptionsService {
|
|
|
791
835
|
*/
|
|
792
836
|
getSections() {
|
|
793
837
|
if (this.sectionsSubject.getValue().length === 0) {
|
|
794
|
-
this.connection.get(this.sectionsApi()).pipe(shareReplay(1), map((response) => {
|
|
838
|
+
this.connection.get(this.sectionsApi()).pipe(shareReplay$1(1), map((response) => {
|
|
795
839
|
let sections = response.filter((section) => section.code != 'home');
|
|
796
840
|
sections = sections.map((section) => this.appendSection(section));
|
|
797
841
|
this.sectionsSubject.next(sections);
|
|
@@ -807,7 +851,7 @@ class OptionsService {
|
|
|
807
851
|
*/
|
|
808
852
|
getAttributes(params) {
|
|
809
853
|
if (this.attributesSubject.getValue().length === 0) {
|
|
810
|
-
this.connection.get(this.attributesApi(params)).pipe(shareReplay(1), map((response) => {
|
|
854
|
+
this.connection.get(this.attributesApi(params)).pipe(shareReplay$1(1), map((response) => {
|
|
811
855
|
const attributes = this.appendPaths(false, (response.attributes[0] || response));
|
|
812
856
|
this.attributesSubject.next(attributes);
|
|
813
857
|
return attributes;
|
|
@@ -1039,7 +1083,7 @@ class ParametersService {
|
|
|
1039
1083
|
*/
|
|
1040
1084
|
getParameters() {
|
|
1041
1085
|
if (this.parametersSubject.getValue() === null) {
|
|
1042
|
-
this.connection.get(this.getAllParametersAPI()).pipe(shareReplay(1), map((response) => {
|
|
1086
|
+
this.connection.get(this.getAllParametersAPI()).pipe(shareReplay$1(1), map((response) => {
|
|
1043
1087
|
this.parametersSubject.next(response);
|
|
1044
1088
|
return response;
|
|
1045
1089
|
}), catchError$1((error) => {
|
|
@@ -1103,7 +1147,7 @@ class BlocksRepositoryService {
|
|
|
1103
1147
|
*/
|
|
1104
1148
|
getBlocks(section) {
|
|
1105
1149
|
//if(this.blocksSubject.getValue() != null){
|
|
1106
|
-
this.connection.get(this.blocksAPI(section)).pipe(shareReplay(1), map((response) => {
|
|
1150
|
+
this.connection.get(this.blocksAPI(section)).pipe(shareReplay$1(1), map((response) => {
|
|
1107
1151
|
//console.log(response)
|
|
1108
1152
|
this.blocksSubject.next(response.items);
|
|
1109
1153
|
return response;
|
|
@@ -2285,7 +2329,7 @@ class ChannelService {
|
|
|
2285
2329
|
* @returns Observable con el canal.
|
|
2286
2330
|
*/
|
|
2287
2331
|
getChannel = () => {
|
|
2288
|
-
this.connection.get(this.channelApi()).pipe(shareReplay(1), map((response) => {
|
|
2332
|
+
this.connection.get(this.channelApi()).pipe(shareReplay$1(1), map((response) => {
|
|
2289
2333
|
this.setChannelInfo(response);
|
|
2290
2334
|
this.channelSubject.next(response);
|
|
2291
2335
|
this.channelType = response.type;
|
|
@@ -2725,7 +2769,7 @@ class FormService {
|
|
|
2725
2769
|
* @returns
|
|
2726
2770
|
*/
|
|
2727
2771
|
getCountriesData() {
|
|
2728
|
-
this.connection.get(this.countriesApi()).pipe(shareReplay(1), map((response) => {
|
|
2772
|
+
this.connection.get(this.countriesApi()).pipe(shareReplay$1(1), map((response) => {
|
|
2729
2773
|
//console.log(response);
|
|
2730
2774
|
const data = response._embedded.items;
|
|
2731
2775
|
this.countriesSubject.next(data);
|
|
@@ -4011,7 +4055,7 @@ class PaginationService {
|
|
|
4011
4055
|
_connectionService = inject(ConnectionService);
|
|
4012
4056
|
_filtersService = inject(FiltersService);
|
|
4013
4057
|
_constants = inject(CoreConstantsService);
|
|
4014
|
-
paginationData$ = this._filtersService.filters$.pipe(shareReplay(1), filter(filters => filters && filters.length > 0), switchMap((filters) => {
|
|
4058
|
+
paginationData$ = this._filtersService.filters$.pipe(shareReplay$1(1), filter(filters => filters && filters.length > 0), switchMap((filters) => {
|
|
4015
4059
|
const url = this.buildUrl(filters);
|
|
4016
4060
|
return this.getData(url);
|
|
4017
4061
|
}));
|
|
@@ -12246,6 +12290,44 @@ const authInterceptor = (req, next) => {
|
|
|
12246
12290
|
return next(req);
|
|
12247
12291
|
};
|
|
12248
12292
|
|
|
12293
|
+
/**
|
|
12294
|
+
* Interceptor que garantiza que las peticiones HTTP no se hagan hasta que
|
|
12295
|
+
* el runtime config esté completamente cargado
|
|
12296
|
+
* Evita que se hagan peticiones con URLs incorrectas
|
|
12297
|
+
*/
|
|
12298
|
+
const runtimeConfigInterceptor = (req, next) => {
|
|
12299
|
+
const runtimeConfigService = inject(RuntimeConfigService);
|
|
12300
|
+
// Si la petición es para obtener el runtime config, la dejamos pasar inmediatamente
|
|
12301
|
+
if (req.url.includes('/runtime-config.json')) {
|
|
12302
|
+
return next(req);
|
|
12303
|
+
}
|
|
12304
|
+
// Si la petición es para assets estáticos, la dejamos pasar
|
|
12305
|
+
if (req.url.includes('/assets/') || req.url.includes('.json') || req.url.includes('.css') || req.url.includes('.js')) {
|
|
12306
|
+
return next(req);
|
|
12307
|
+
}
|
|
12308
|
+
// Para las demás peticiones, esperamos a que el config esté listo
|
|
12309
|
+
return runtimeConfigService.config$.pipe(filter$1(config => config !== null), // Esperamos hasta que haya config
|
|
12310
|
+
take$1(1), // Solo tomamos el primer valor válido
|
|
12311
|
+
switchMap$1(config => {
|
|
12312
|
+
// Si la URL ya es completa (empieza con http), la dejamos como está
|
|
12313
|
+
if (req.url.startsWith('http')) {
|
|
12314
|
+
return next(req);
|
|
12315
|
+
}
|
|
12316
|
+
// Si es una URL relativa que debería ir al API, la completamos
|
|
12317
|
+
if (req.url.startsWith('/api/') || req.url.startsWith('api/')) {
|
|
12318
|
+
const apiUrl = config.apiUrl;
|
|
12319
|
+
const cleanUrl = req.url.startsWith('/') ? req.url.substring(1) : req.url;
|
|
12320
|
+
const fullUrl = `${apiUrl}${cleanUrl}`;
|
|
12321
|
+
const modifiedReq = req.clone({
|
|
12322
|
+
url: fullUrl
|
|
12323
|
+
});
|
|
12324
|
+
return next(modifiedReq);
|
|
12325
|
+
}
|
|
12326
|
+
// Para otras URLs, las dejamos pasar sin modificar
|
|
12327
|
+
return next(req);
|
|
12328
|
+
}));
|
|
12329
|
+
};
|
|
12330
|
+
|
|
12249
12331
|
class ProductStockDirective {
|
|
12250
12332
|
templateRef;
|
|
12251
12333
|
viewContainer;
|
|
@@ -12447,5 +12529,5 @@ const directives = [
|
|
|
12447
12529
|
* Generated bundle index. Do not edit.
|
|
12448
12530
|
*/
|
|
12449
12531
|
|
|
12450
|
-
export { AccountEcComponent, AddressingService, AnalyticsService, AuthEcComponent, AuthService, AuthStorageService, BaseApiService, BlockBannerBoxEcComponent, BlockBannerFullEcComponent, BlockFormContactEcComponent, BlockHtmlEcComponent, BlockNewsletterEcComponent, BlockProductsEcComponent, BlocksEcComponent, BlocksRepositoryService, BlocksService, BreadcrumbEcComponent, CartEcComponent, CartItemEcComponent, CartService, ChannelService, CheckoutEcComponent, CheckoutService, CollectionEcComponent, ConfirmAccountEcComponent, ContactEcComponent, CoreConstantsService, CouponEcComponent, CurrencyService, DopplerService, ENVIRONMENT_TOKEN, EcCurrencySymbolPipe, EcSafeHtmlPipe, FacebookPixelService, FaqsEcComponent, FiltersEcComponent, FiltersService, FiltersSortEcComponent, FooterEcComponent, ForgotPasswordEcComponent, FormService, GTMService, GoogleAnalyticsService, HeaderEcComponent, HomeEcComponent, LoadingFullEcComponent, LoadingInlineEcComponent, LoadingSectionEcComponent, LocalStorageService, LoginFormEcComponent, MagnizoomEcComponent, MetricoolPixelService, NgxLocalStorageService, OptionsService, OrderEcComponent, OrderUtilityService, OrdersListEcComponent, OrdersService, PaginationService, ParametersService, ParamsContext, PasswordResetEcComponent, PaymentService, PriceEcComponent, PriceRangeFilterComponent, ProductDetailEcComponent, ProductDetailService, ProductEcComponent, ProductOffDirective, ProductStockDirective, ProductsService, ReCaptchaEcComponent, ReCaptchaService, RedsysCatchEcComponent, RegisterFormEcComponent, RegisterWholesalerFormEcComponent, RelatedProductsEcComponent, ReviewsEcComponent, ReviewsFormEcComponent, RuntimeConfigService, SectionContainerEcComponent, ShareEcComponent, ShipmentService, SidebarEcComponent, StoresEcComponent, SuccessEcComponent, TestService, ToastService, VariantsEcComponent, authGuard, authInterceptor, directives, initializeRuntimeConfig, provideEnvironment, provideRuntimeConfig };
|
|
12532
|
+
export { AccountEcComponent, AddressingService, AnalyticsService, AuthEcComponent, AuthService, AuthStorageService, BaseApiService, BlockBannerBoxEcComponent, BlockBannerFullEcComponent, BlockFormContactEcComponent, BlockHtmlEcComponent, BlockNewsletterEcComponent, BlockProductsEcComponent, BlocksEcComponent, BlocksRepositoryService, BlocksService, BreadcrumbEcComponent, CartEcComponent, CartItemEcComponent, CartService, ChannelService, CheckoutEcComponent, CheckoutService, CollectionEcComponent, ConfirmAccountEcComponent, ContactEcComponent, CoreConstantsService, CouponEcComponent, CurrencyService, DopplerService, ENVIRONMENT_TOKEN, EcCurrencySymbolPipe, EcSafeHtmlPipe, FacebookPixelService, FaqsEcComponent, FiltersEcComponent, FiltersService, FiltersSortEcComponent, FooterEcComponent, ForgotPasswordEcComponent, FormService, GTMService, GoogleAnalyticsService, HeaderEcComponent, HomeEcComponent, LoadingFullEcComponent, LoadingInlineEcComponent, LoadingSectionEcComponent, LocalStorageService, LoginFormEcComponent, MagnizoomEcComponent, MetricoolPixelService, NgxLocalStorageService, OptionsService, OrderEcComponent, OrderUtilityService, OrdersListEcComponent, OrdersService, PaginationService, ParametersService, ParamsContext, PasswordResetEcComponent, PaymentService, PriceEcComponent, PriceRangeFilterComponent, ProductDetailEcComponent, ProductDetailService, ProductEcComponent, ProductOffDirective, ProductStockDirective, ProductsService, ReCaptchaEcComponent, ReCaptchaService, RedsysCatchEcComponent, RegisterFormEcComponent, RegisterWholesalerFormEcComponent, RelatedProductsEcComponent, ReviewsEcComponent, ReviewsFormEcComponent, RuntimeConfigService, SectionContainerEcComponent, ShareEcComponent, ShipmentService, SidebarEcComponent, StoresEcComponent, SuccessEcComponent, TestService, ToastService, VariantsEcComponent, authGuard, authInterceptor, directives, initializeRuntimeConfig, provideEnvironment, provideRuntimeConfig, runtimeConfigInterceptor };
|
|
12451
12533
|
//# sourceMappingURL=ng-easycommerce-v18.mjs.map
|