ng-easycommerce-v18 0.4.2 → 0.4.4-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ # Version 0.4.4-beta.1
2
+ - Se modifica el funcionamiento del runtime ya que no estaba tomando bien la url a la hora del despliegue.
1
3
  # Version 0.4.2
2
4
  - Se añade platformID en contact para comprobacion ssr.
3
5
  # Version 0.4.0
@@ -21,13 +21,12 @@ export class ConnectionService {
21
21
  */
22
22
  constantsSvr = inject(ApiConstantsService);
23
23
  /**
24
- * URL Base para las peticiones.
25
- * @type {string}
24
+ * URL Base para las peticiones - obtenida dinámicamente del runtime config
25
+ * @returns {string}
26
26
  * @memberof ConnectionService
27
27
  */
28
- url;
29
- constructor() {
30
- this.url = this.constantsSvr.getUrlBase();
28
+ get url() {
29
+ return this.constantsSvr.getUrlBase();
31
30
  }
32
31
  /**
33
32
  * Función para generar peticiones de tipo GET
@@ -75,5 +74,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
75
74
  args: [{
76
75
  providedIn: 'root'
77
76
  }]
78
- }], ctorParameters: () => [] });
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2FwaS9jb25uZWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUF1QixJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7QUFFekU7Ozs7O0dBS0c7QUFJSCxNQUFNLE9BQU8saUJBQWlCO0lBQzdCOzs7T0FHRztJQUNjLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFNUM7OztPQUdHO0lBQ0ssWUFBWSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRW5EOzs7O09BSUc7SUFDSyxHQUFHLENBQVM7SUFFcEI7UUFDQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsR0FBRyxDQUFDLE1BQWMsRUFBRSxJQUFVO1FBQzdCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQU0sSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUNELGtCQUFrQixDQUFDLE1BQWM7UUFDaEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBTSxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksQ0FBQyxNQUFjLEVBQUUsSUFBVTtRQUM5QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFNLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUNELEdBQUcsQ0FBQyxNQUFjLEVBQUUsSUFBVTtRQUM3QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFNLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBQ0QsTUFBTSxDQUFDLE1BQWMsRUFBRSxJQUFVO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQU0sSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxjQUFjLENBQUMsT0FBZTtRQUM3QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFRLE9BQU8sQ0FBQyxDQUFBO0lBQ3RDLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBVztRQUNsQixJQUFJLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLE1BQU0sRUFBRSx1QkFBdUIsRUFBRSxDQUFDLENBQUM7UUFDdkUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7d0dBL0RXLGlCQUFpQjs0R0FBakIsaUJBQWlCLGNBRmpCLE1BQU07OzRGQUVOLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29ubmVjdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUsIG9mLCB0YWtlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBBcGlDb25zdGFudHNTZXJ2aWNlIH0gZnJvbSAnLi4vY29uc3RhbnRzL2FwaS5jb25zdGFudHMuc2VydmljZSc7XHJcblxyXG4vKipcclxuICogU2VydmljaW8gcXVlIGZ1bmNpb25hIGNvbW8gYWJzdHJhY2Npw7NuIHBhcmEgbWFuZWphciBsYSBjb25leGnDs24gY29uIGxhIEFQSVxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBDb25uZWN0aW9uU2VydmljZVxyXG4gKiBAaW1wbGVtZW50cyB7Q29ubmVjdGlvbn1cclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuXHRwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbm5lY3Rpb25TZXJ2aWNlIGltcGxlbWVudHMgQ29ubmVjdGlvbiB7XHJcblx0LyoqXHJcblx0ICogSGVycnJhbWllbnRhIHVzYWRhIHBhcmEgZ2VuZXJhciBsYXMgcGV0aWNpb25lcy5cclxuXHQgKiBAbWVtYmVyb2YgQ29ubmVjdGlvblNlcnZpY2VcclxuXHQgKi9cclxuXHRwcml2YXRlIHJlYWRvbmx5IF9odHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xyXG5cclxuXHQvKipcclxuXHQgKiBTZXJ2aWNpbyBxdWUgY29udGllbmUgbGFzIGNvbnN0YW50ZXMgdXNhZGFzIHBhcmEgbGEgQVBJXHJcblx0ICogQG1lbWJlcm9mIENvbm5lY3Rpb25TZXJ2aWNlXHJcblx0ICovXHJcblx0cHJpdmF0ZSBjb25zdGFudHNTdnIgPSBpbmplY3QoQXBpQ29uc3RhbnRzU2VydmljZSk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVSTCBCYXNlIHBhcmEgbGFzIHBldGljaW9uZXMuXHJcblx0ICogQHR5cGUge3N0cmluZ31cclxuXHQgKiBAbWVtYmVyb2YgQ29ubmVjdGlvblNlcnZpY2VcclxuXHQgKi9cclxuXHRwcml2YXRlIHVybDogc3RyaW5nO1xyXG5cclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHRoaXMudXJsID0gdGhpcy5jb25zdGFudHNTdnIuZ2V0VXJsQmFzZSgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRnVuY2nDs24gcGFyYSBnZW5lcmFyIHBldGljaW9uZXMgZGUgdGlwbyBHRVRcclxuXHQgKiBAcGFyYW0gYXBpdXJsIHVybCBkZWwgZW5kcG9pbnRcclxuXHQgKiBAcGFyYW0gZGF0YSBwYXJhbWV0cm9zIHBhcmEgbGEgdXJsXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0Z2V0KGFwaXVybDogc3RyaW5nLCBkYXRhPzogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdHJldHVybiB0aGlzLl9odHRwLmdldDxhbnk+KHRoaXMudXJsICsgYXBpdXJsLCB7IHBhcmFtczogeyAuLi5kYXRhIH0gfSkucGlwZSh0YWtlKDEpKTtcclxuXHR9XHJcblx0Z2V0RXJyb3JOb3RIYW5kbGVyKGFwaXVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdHJldHVybiB0aGlzLl9odHRwLmdldDxhbnk+KHRoaXMudXJsICsgYXBpdXJsKS5waXBlKHRha2UoMSkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRnVuY2lvbiBwYXJhIGdlbmVyYXIgcGV0aWNpb25lcyBkZSB0aXBvIFBPU1RcclxuXHQgKiBAcGFyYW0gYXBpdXJsIHVybCBkZWwgZW5kcG9pbnRcclxuXHQgKiBAcGFyYW0gZGF0YSBcclxuXHQgKi9cclxuXHRwb3N0KGFwaXVybDogc3RyaW5nLCBkYXRhPzogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdHJldHVybiB0aGlzLl9odHRwLnBvc3Q8YW55Pih0aGlzLnVybCArIGFwaXVybCwgZGF0YSB8fCB7fSkucGlwZSh0YWtlKDEpKTtcclxuXHR9XHJcblx0cHV0KGFwaXVybDogc3RyaW5nLCBkYXRhPzogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdHJldHVybiB0aGlzLl9odHRwLnB1dDxhbnk+KHRoaXMudXJsICsgYXBpdXJsLCBkYXRhKS5waXBlKHRha2UoMSkpO1xyXG5cdH1cclxuXHRkZWxldGUoYXBpdXJsOiBzdHJpbmcsIGRhdGE/OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2h0dHAuZGVsZXRlPGFueT4odGhpcy51cmwgKyBhcGl1cmwpLnBpcGUodGFrZSgxKSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEdlbmVyYSB1biBwZXRpY2nDs24gdGlwbyBHRVQgcGVybyB1c2FuZG8gZWwgcGFyYW1ldHJvIGNvbW8gbGEgdXJsIGNvbXBsZXRhLlxyXG5cdCAqIEBwYXJhbSBmdWxsdXJsIFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGdldFdpdGhGdWxsVXJsKGZ1bGx1cmw6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcblx0XHRyZXR1cm4gdGhpcy5faHR0cC5nZXQ8YW55W10+KGZ1bGx1cmwpXHJcblx0fVxyXG5cclxuXHRnZXRIVE1MKGFwaTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdGxldCBodHRwSGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7IEFjY2VwdDogJ3RleHQvcGxhaW4sIHRleHQvaHRtbCcgfSk7XHJcblx0XHRyZXR1cm4gdGhpcy5faHR0cC5nZXQodGhpcy51cmwgKyBhcGksIHsgcmVzcG9uc2VUeXBlOiAndGV4dCcsIGhlYWRlcnM6IGh0dHBIZWFkZXJzIH0pLnBpcGUodGFrZSgxKSk7XHJcblx0fVxyXG5cclxuXHQvKiBmb3JtVXJsID0gKGFwaTogc3RyaW5nKSA9PiB7XHJcblx0ICByZXR1cm4gd2luZG93LmxvY2F0aW9uLnByb3RvY29sID09ICdodHRwczonICYmICF0aGlzLnVybC5pbmNsdWRlcygnaHR0cHMnKSA/ICh0aGlzLnVybC5yZXBsYWNlKCdodHRwJywgJ2h0dHBzJykpICsgYXBpIDogdGhpcy51cmwgKyBhcGk7XHJcblx0fSAqL1xyXG59XHJcbiJdfQ==
77
+ }] });
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2FwaS9jb25uZWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUF1QixJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7QUFFekU7Ozs7O0dBS0c7QUFJSCxNQUFNLE9BQU8saUJBQWlCO0lBQzdCOzs7T0FHRztJQUNjLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFNUM7OztPQUdHO0lBQ0ssWUFBWSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRW5EOzs7O09BSUc7SUFDSCxJQUFZLEdBQUc7UUFDZCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsR0FBRyxDQUFDLE1BQWMsRUFBRSxJQUFVO1FBQzdCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQU0sSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUNELGtCQUFrQixDQUFDLE1BQWM7UUFDaEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBTSxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksQ0FBQyxNQUFjLEVBQUUsSUFBVTtRQUM5QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFNLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUNELEdBQUcsQ0FBQyxNQUFjLEVBQUUsSUFBVTtRQUM3QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFNLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBQ0QsTUFBTSxDQUFDLE1BQWMsRUFBRSxJQUFVO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQU0sSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxjQUFjLENBQUMsT0FBZTtRQUM3QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFRLE9BQU8sQ0FBQyxDQUFBO0lBQ3RDLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBVztRQUNsQixJQUFJLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLE1BQU0sRUFBRSx1QkFBdUIsRUFBRSxDQUFDLENBQUM7UUFDdkUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7d0dBN0RXLGlCQUFpQjs0R0FBakIsaUJBQWlCLGNBRmpCLE1BQU07OzRGQUVOLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29ubmVjdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUsIG9mLCB0YWtlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBBcGlDb25zdGFudHNTZXJ2aWNlIH0gZnJvbSAnLi4vY29uc3RhbnRzL2FwaS5jb25zdGFudHMuc2VydmljZSc7XHJcblxyXG4vKipcclxuICogU2VydmljaW8gcXVlIGZ1bmNpb25hIGNvbW8gYWJzdHJhY2Npw7NuIHBhcmEgbWFuZWphciBsYSBjb25leGnDs24gY29uIGxhIEFQSVxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBDb25uZWN0aW9uU2VydmljZVxyXG4gKiBAaW1wbGVtZW50cyB7Q29ubmVjdGlvbn1cclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuXHRwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbm5lY3Rpb25TZXJ2aWNlIGltcGxlbWVudHMgQ29ubmVjdGlvbiB7XHJcblx0LyoqXHJcblx0ICogSGVycnJhbWllbnRhIHVzYWRhIHBhcmEgZ2VuZXJhciBsYXMgcGV0aWNpb25lcy5cclxuXHQgKiBAbWVtYmVyb2YgQ29ubmVjdGlvblNlcnZpY2VcclxuXHQgKi9cclxuXHRwcml2YXRlIHJlYWRvbmx5IF9odHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xyXG5cclxuXHQvKipcclxuXHQgKiBTZXJ2aWNpbyBxdWUgY29udGllbmUgbGFzIGNvbnN0YW50ZXMgdXNhZGFzIHBhcmEgbGEgQVBJXHJcblx0ICogQG1lbWJlcm9mIENvbm5lY3Rpb25TZXJ2aWNlXHJcblx0ICovXHJcblx0cHJpdmF0ZSBjb25zdGFudHNTdnIgPSBpbmplY3QoQXBpQ29uc3RhbnRzU2VydmljZSk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVSTCBCYXNlIHBhcmEgbGFzIHBldGljaW9uZXMgLSBvYnRlbmlkYSBkaW7DoW1pY2FtZW50ZSBkZWwgcnVudGltZSBjb25maWdcclxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG5cdCAqIEBtZW1iZXJvZiBDb25uZWN0aW9uU2VydmljZVxyXG5cdCAqL1xyXG5cdHByaXZhdGUgZ2V0IHVybCgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29uc3RhbnRzU3ZyLmdldFVybEJhc2UoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEZ1bmNpw7NuIHBhcmEgZ2VuZXJhciBwZXRpY2lvbmVzIGRlIHRpcG8gR0VUXHJcblx0ICogQHBhcmFtIGFwaXVybCB1cmwgZGVsIGVuZHBvaW50XHJcblx0ICogQHBhcmFtIGRhdGEgcGFyYW1ldHJvcyBwYXJhIGxhIHVybFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGdldChhcGl1cmw6IHN0cmluZywgZGF0YT86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcblx0XHRyZXR1cm4gdGhpcy5faHR0cC5nZXQ8YW55Pih0aGlzLnVybCArIGFwaXVybCwgeyBwYXJhbXM6IHsgLi4uZGF0YSB9IH0pLnBpcGUodGFrZSgxKSk7XHJcblx0fVxyXG5cdGdldEVycm9yTm90SGFuZGxlcihhcGl1cmw6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcblx0XHRyZXR1cm4gdGhpcy5faHR0cC5nZXQ8YW55Pih0aGlzLnVybCArIGFwaXVybCkucGlwZSh0YWtlKDEpKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEZ1bmNpb24gcGFyYSBnZW5lcmFyIHBldGljaW9uZXMgZGUgdGlwbyBQT1NUXHJcblx0ICogQHBhcmFtIGFwaXVybCB1cmwgZGVsIGVuZHBvaW50XHJcblx0ICogQHBhcmFtIGRhdGEgXHJcblx0ICovXHJcblx0cG9zdChhcGl1cmw6IHN0cmluZywgZGF0YT86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcblx0XHRyZXR1cm4gdGhpcy5faHR0cC5wb3N0PGFueT4odGhpcy51cmwgKyBhcGl1cmwsIGRhdGEgfHwge30pLnBpcGUodGFrZSgxKSk7XHJcblx0fVxyXG5cdHB1dChhcGl1cmw6IHN0cmluZywgZGF0YT86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcblx0XHRyZXR1cm4gdGhpcy5faHR0cC5wdXQ8YW55Pih0aGlzLnVybCArIGFwaXVybCwgZGF0YSkucGlwZSh0YWtlKDEpKTtcclxuXHR9XHJcblx0ZGVsZXRlKGFwaXVybDogc3RyaW5nLCBkYXRhPzogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdHJldHVybiB0aGlzLl9odHRwLmRlbGV0ZTxhbnk+KHRoaXMudXJsICsgYXBpdXJsKS5waXBlKHRha2UoMSkpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBHZW5lcmEgdW4gcGV0aWNpw7NuIHRpcG8gR0VUIHBlcm8gdXNhbmRvIGVsIHBhcmFtZXRybyBjb21vIGxhIHVybCBjb21wbGV0YS5cclxuXHQgKiBAcGFyYW0gZnVsbHVybCBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRnZXRXaXRoRnVsbFVybChmdWxsdXJsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2h0dHAuZ2V0PGFueVtdPihmdWxsdXJsKVxyXG5cdH1cclxuXHJcblx0Z2V0SFRNTChhcGk6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcblx0XHRsZXQgaHR0cEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoeyBBY2NlcHQ6ICd0ZXh0L3BsYWluLCB0ZXh0L2h0bWwnIH0pO1xyXG5cdFx0cmV0dXJuIHRoaXMuX2h0dHAuZ2V0KHRoaXMudXJsICsgYXBpLCB7IHJlc3BvbnNlVHlwZTogJ3RleHQnLCBoZWFkZXJzOiBodHRwSGVhZGVycyB9KS5waXBlKHRha2UoMSkpO1xyXG5cdH1cclxuXHJcblx0LyogZm9ybVVybCA9IChhcGk6IHN0cmluZykgPT4ge1xyXG5cdCAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCA9PSAnaHR0cHM6JyAmJiAhdGhpcy51cmwuaW5jbHVkZXMoJ2h0dHBzJykgPyAodGhpcy51cmwucmVwbGFjZSgnaHR0cCcsICdodHRwcycpKSArIGFwaSA6IHRoaXMudXJsICsgYXBpO1xyXG5cdH0gKi9cclxufVxyXG4iXX0=
@@ -3,26 +3,37 @@ import { isPlatformBrowser } from '@angular/common';
3
3
  import { of, BehaviorSubject } from 'rxjs';
4
4
  import { catchError, tap, shareReplay } from 'rxjs/operators';
5
5
  import { ENVIRONMENT_TOKEN } from '../providers/provideEnvironment';
6
+ import { SERVER_RUNTIME_CONFIG } from '../providers/provideServerRuntimeConfig';
6
7
  import * as i0 from "@angular/core";
7
8
  import * as i1 from "@angular/common/http";
8
9
  export class RuntimeConfigService {
9
10
  platformId;
10
11
  http;
11
12
  environment;
13
+ serverRuntimeConfig;
12
14
  configSubject = new BehaviorSubject(null);
13
15
  config$ = this.configSubject.asObservable();
14
16
  _config = null;
15
17
  _loadPromise = null;
16
18
  _isLoaded = false;
17
- constructor(platformId, http, environment) {
19
+ constructor(platformId, http, environment, serverRuntimeConfig) {
18
20
  this.platformId = platformId;
19
21
  this.http = http;
20
22
  this.environment = environment;
21
- // En SSR o browser, intentar cargar inmediatamente desde window si está disponible
22
- if (typeof window !== 'undefined' && window.__RUNTIME_CONFIG__ && !this._isLoaded) {
23
+ this.serverRuntimeConfig = serverRuntimeConfig;
24
+ // PRIORIDAD 1: En SSR, usar la configuración inyectada desde el servidor
25
+ if (!isPlatformBrowser(this.platformId) && this.serverRuntimeConfig) {
26
+ this._config = this.serverRuntimeConfig;
27
+ this._isLoaded = true;
28
+ this.configSubject.next(this._config);
29
+ console.log('✅ [RuntimeConfigService SSR] Configuración cargada desde SERVER_RUNTIME_CONFIG:', this._config);
30
+ }
31
+ // PRIORIDAD 2: En browser, intentar cargar inmediatamente desde window si está disponible
32
+ else if (typeof window !== 'undefined' && window.__RUNTIME_CONFIG__ && !this._isLoaded) {
23
33
  this._config = window.__RUNTIME_CONFIG__;
24
34
  this._isLoaded = true;
25
35
  this.configSubject.next(this._config);
36
+ console.log('✅ [RuntimeConfigService Browser] Configuración cargada desde window.__RUNTIME_CONFIG__:', this._config);
26
37
  }
27
38
  }
28
39
  /**
@@ -109,21 +120,23 @@ export class RuntimeConfigService {
109
120
  return this._loadPromise;
110
121
  }
111
122
  else {
112
- // En SSR, primero intentar usar fallback desde environment (más confiable)
123
+ // En SSR, PRIORIDAD 1: usar la configuración inyectada desde el servidor
124
+ if (this.serverRuntimeConfig && !this._isLoaded) {
125
+ this._config = this.serverRuntimeConfig;
126
+ this._isLoaded = true;
127
+ this.configSubject.next(this._config);
128
+ console.log('✅ [RuntimeConfigService SSR] Configuración cargada desde SERVER_RUNTIME_CONFIG:', this._config);
129
+ return of(this._config);
130
+ }
131
+ // PRIORIDAD 2: Como fallback, usar environment (solo si no hay serverRuntimeConfig)
113
132
  const fallbackConfig = this.getFallbackConfig();
114
133
  if (fallbackConfig) {
115
134
  this._config = fallbackConfig;
116
135
  this._isLoaded = true;
117
136
  this.configSubject.next(fallbackConfig);
137
+ console.warn('⚠️ [RuntimeConfigService SSR] Usando fallback desde environment.ts (no se encontró SERVER_RUNTIME_CONFIG)');
118
138
  return of(fallbackConfig);
119
139
  }
120
- // Como alternativa, intentar leer desde window si está disponible
121
- if (typeof window !== 'undefined' && window.__RUNTIME_CONFIG__ && !this._isLoaded) {
122
- this._config = window.__RUNTIME_CONFIG__;
123
- this._isLoaded = true;
124
- this.configSubject.next(this._config);
125
- return of(this._config);
126
- }
127
140
  // Si no hay environment configurado, lanzar error
128
141
  console.error('❌ [RuntimeConfigService SSR] No hay environment configurado. Agrega provideEnvironment() en app.config.ts');
129
142
  throw new Error('RuntimeConfig no disponible. Configura provideEnvironment() en app.config.ts');
@@ -199,7 +212,7 @@ export class RuntimeConfigService {
199
212
  const cleanPath = path.startsWith('/') ? path.slice(1) : path;
200
213
  return `${frontendUrl}${cleanPath}`;
201
214
  }
202
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RuntimeConfigService, deps: [{ token: PLATFORM_ID }, { token: i1.HttpClient }, { token: ENVIRONMENT_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
215
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RuntimeConfigService, deps: [{ token: PLATFORM_ID }, { token: i1.HttpClient }, { token: ENVIRONMENT_TOKEN, optional: true }, { token: SERVER_RUNTIME_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
203
216
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RuntimeConfigService, providedIn: 'root' });
204
217
  }
205
218
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RuntimeConfigService, decorators: [{
@@ -215,5 +228,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
215
228
  }, {
216
229
  type: Inject,
217
230
  args: [ENVIRONMENT_TOKEN]
231
+ }] }, { type: undefined, decorators: [{
232
+ type: Optional
233
+ }, {
234
+ type: Inject,
235
+ args: [SERVER_RUNTIME_CONFIG]
218
236
  }] }] });
219
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1jb25maWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1zZXJ2aWNlcy9ydW50aW1lLWNvbmZpZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFcEQsT0FBTyxFQUFjLEVBQUUsRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7OztBQVFwRSxNQUFNLE9BQU8sb0JBQW9CO0lBU0E7SUFDckI7SUFDdUM7SUFWekMsYUFBYSxHQUFHLElBQUksZUFBZSxDQUF1QixJQUFJLENBQUMsQ0FBQztJQUNqRSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUUzQyxPQUFPLEdBQXlCLElBQUksQ0FBQztJQUNyQyxZQUFZLEdBQXFDLElBQUksQ0FBQztJQUN0RCxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRTFCLFlBQytCLFVBQWtCLEVBQ3ZDLElBQWdCLEVBQ3VCLFdBQStCO1FBRmpELGVBQVUsR0FBVixVQUFVLENBQVE7UUFDdkMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUN1QixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFFOUUsbUZBQW1GO1FBQ25GLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVB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QUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDOUQsT0FBTyxHQUFHLFdBQVcsR0FBRyxTQUFTLEVBQUUsQ0FBQztJQUN0QyxDQUFDO3dHQXhOVSxvQkFBb0Isa0JBU3JCLFdBQVcsdUNBRUMsaUJBQWlCOzRHQVg1QixvQkFBb0IsY0FGbkIsTUFBTTs7NEZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBVUksTUFBTTsyQkFBQyxXQUFXOzswQkFFbEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIFBMQVRGT1JNX0lELCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgdGFwLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUnVudGltZUNvbmZpZyB9IGZyb20gJy4uL2ludGVyZmFjZXMvcnVudGltZS1jb25maWcnO1xyXG5pbXBvcnQgeyBFTlZJUk9OTUVOVF9UT0tFTiB9IGZyb20gJy4uL3Byb3ZpZGVycy9wcm92aWRlRW52aXJvbm1lbnQnO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5cclxuZGVjbGFyZSBjb25zdCB3aW5kb3c6IGFueTtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFJ1bnRpbWVDb25maWdTZXJ2aWNlIHtcclxuICBwcml2YXRlIGNvbmZpZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJ1bnRpbWVDb25maWcgfCBudWxsPihudWxsKTtcclxuICBwdWJsaWMgY29uZmlnJCA9IHRoaXMuY29uZmlnU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICBcclxuICBwcml2YXRlIF9jb25maWc6IFJ1bnRpbWVDb25maWcgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIF9sb2FkUHJvbWlzZTogT2JzZXJ2YWJsZTxSdW50aW1lQ29uZmlnPiB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgX2lzTG9hZGVkID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBPYmplY3QsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEVOVklST05NRU5UX1RPS0VOKSBwcml2YXRlIGVudmlyb25tZW50OiBFbnZpcm9ubWVudCB8IG51bGxcclxuICApIHtcclxuICAgIC8vIEVuIFNTUiBvIGJyb3dzZXIsIGludGVudGFyIGNhcmdhciBpbm1lZGlhdGFtZW50ZSBkZXNkZSB3aW5kb3cgc2kgZXN0w6EgZGlzcG9uaWJsZVxyXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5fX1JVTlRJTUVfQ09ORklHX18gJiYgIXRoaXMuX2lzTG9hZGVkKSB7XHJcbiAgICAgIHRoaXMuX2NvbmZpZyA9IHdpbmRvdy5fX1JVTlRJTUVfQ09ORklHX187XHJcbiAgICAgIHRoaXMuX2lzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jb25maWdTdWJqZWN0Lm5leHQodGhpcy5fY29uZmlnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9idGllbmUgY29uZmlndXJhY2nDs24gZGUgZmFsbGJhY2sgZGVzZGUgZW52aXJvbm1lbnQudHNcclxuICAgKi9cclxuICBwcml2YXRlIGdldEZhbGxiYWNrQ29uZmlnKCk6IFJ1bnRpbWVDb25maWcgfCBudWxsIHtcclxuICAgIGlmICh0aGlzLmVudmlyb25tZW50KSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgYXBpVXJsOiB0aGlzLmVudmlyb25tZW50LmFwaVVybCB8fCAnJyxcclxuICAgICAgICBhcHBFbnY6ICh0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24gPyAncHJvZCcgOiAncHJlcHJvZCcpIGFzICdwcm9kJyB8ICdwcmVwcm9kJyB8ICd0ZXN0JyxcclxuICAgICAgICBwcm9kdWN0aW9uOiB0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24sXHJcbiAgICAgICAgbG9jYWxlOiB0aGlzLmVudmlyb25tZW50LmxvY2FsZSxcclxuICAgICAgICBjaGFubmVsOiB0aGlzLmVudmlyb25tZW50LmNoYW5uZWxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pY2lhbGl6YWNpw7NuIMO6bmljYSAtIGxsYW1hZGEgcG9yIEFQUF9JTklUSUFMSVpFUlxyXG4gICAqIEdhcmFudGl6YSBxdWUgbGEgY29uZmlndXJhY2nDs24gc2UgY2FyZ2Egc29sbyB1bmEgdmV6IGFsIGluaWNpb1xyXG4gICAqL1xyXG4gIGluaXRpYWxpemUoKTogUHJvbWlzZTxSdW50aW1lQ29uZmlnPiB7XHJcbiAgICBpZiAodGhpcy5faXNMb2FkZWQgJiYgdGhpcy5fY29uZmlnKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRDb25maWcoKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChjb25maWc6IFJ1bnRpbWVDb25maWcpID0+IHtcclxuICAgICAgICAgIHRoaXMuX2lzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgIHJlc29sdmUoY29uZmlnKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FyZ2EgbGEgY29uZmlndXJhY2nDs24gZW4gcnVudGltZSAob3B0aW1pemFkYSBwYXJhIHVuYSBzb2xhIGNhcmdhKVxyXG4gICAqIC0gRW4gU1NSOiBMZWUgZGVzZGUgZWwgb2JqZXRvIHdpbmRvdyBpbnllY3RhZG8gcG9yIGVsIHNlcnZpZG9yXHJcbiAgICogLSBFbiBCcm93c2VyOiBIYWNlIHBldGljacOzbiBIVFRQIGEgL3J1bnRpbWUtY29uZmlnLmpzb24gKHNvbG8gc2kgbm8gZXN0w6EgZW4gd2luZG93KVxyXG4gICAqL1xyXG4gIGxvYWRDb25maWcoKTogT2JzZXJ2YWJsZTxSdW50aW1lQ29uZmlnPiB7XHJcbiAgICAvLyBTaSB5YSB0ZW5lbW9zIGxhIGNvbmZpZyBjYXJnYWRhLCBsYSBkZXZvbHZlbW9zIGlubWVkaWF0YW1lbnRlXHJcbiAgICBpZiAodGhpcy5faXNMb2FkZWQgJiYgdGhpcy5fY29uZmlnKSB7XHJcbiAgICAgIHJldHVybiBvZih0aGlzLl9jb25maWcgYXMgUnVudGltZUNvbmZpZyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2kgeWEgaGF5IHVuYSBjYXJnYSBlbiBwcm9ncmVzbywgcmV1dGlsaXphbW9zIGVzYSBwZXRpY2nDs25cclxuICAgIGlmICh0aGlzLl9sb2FkUHJvbWlzZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fbG9hZFByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcclxuICAgICAgLy8gRW4gZWwgbmF2ZWdhZG9yLCBwcmltZXJvIGludGVudGFtb3Mgb2J0ZW5lciBsYSBjb25maWcgZGVzZGUgd2luZG93XHJcbiAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuX19SVU5USU1FX0NPTkZJR19fICYmICF0aGlzLl9pc0xvYWRlZCkge1xyXG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IHdpbmRvdy5fX1JVTlRJTUVfQ09ORklHX187XHJcbiAgICAgICAgdGhpcy5faXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY29uZmlnU3ViamVjdC5uZXh0KHRoaXMuX2NvbmZpZyk7XHJcbiAgICAgICAgcmV0dXJuIG9mKHRoaXMuX2NvbmZpZyBhcyBSdW50aW1lQ29uZmlnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gU2kgbm8gZXN0w6EgZW4gd2luZG93LCBoYWNlbW9zIHBldGljacOzbiBIVFRQIChzb2xvIHVuYSB2ZXopXHJcbiAgICAgIHRoaXMuX2xvYWRQcm9taXNlID0gdGhpcy5odHRwLmdldDxSdW50aW1lQ29uZmlnPignL3J1bnRpbWUtY29uZmlnLmpzb24nKS5waXBlKFxyXG4gICAgICAgIHRhcChjb25maWcgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xyXG4gICAgICAgICAgdGhpcy5faXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jb25maWdTdWJqZWN0Lm5leHQoY29uZmlnKTtcclxuICAgICAgICAgIC8vIEd1YXJkYW1vcyBlbiB3aW5kb3cgcGFyYSBzaWd1aWVudGVzIGFjY2Vzb3NcclxuICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuX19SVU5USU1FX0NPTkZJR19fID0gY29uZmlnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpLCAvLyBDYWNoZSBsYSByZXNwdWVzdGEgcGFyYSBtw7psdGlwbGVzIHN1c2NyaXBjaW9uZXNcclxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+KdjCBbUnVudGltZUNvbmZpZ1NlcnZpY2VdIEVycm9yIGxvYWRpbmcgL3J1bnRpbWUtY29uZmlnLmpzb246JywgZXJyb3IpO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvLyBJbnRlbnRhciB1c2FyIGZhbGxiYWNrIGRlc2RlIGVudmlyb25tZW50XHJcbiAgICAgICAgICBjb25zdCBmYWxsYmFja0NvbmZpZyA9IHRoaXMuZ2V0RmFsbGJhY2tDb25maWcoKTtcclxuICAgICAgICAgIGlmIChmYWxsYmFja0NvbmZpZykge1xyXG4gICAgICAgICAgICB0aGlzLl9jb25maWcgPSBmYWxsYmFja0NvbmZpZztcclxuICAgICAgICAgICAgdGhpcy5faXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZ1N1YmplY3QubmV4dChmYWxsYmFja0NvbmZpZyk7XHJcbiAgICAgICAgICAgIHJldHVybiBvZihmYWxsYmFja0NvbmZpZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIFNpIG5vIGhheSBlbnZpcm9ubWVudCwgbGFuemFyIGVycm9yXHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCfinYwgW1J1bnRpbWVDb25maWdTZXJ2aWNlXSBObyBzZSBwdWRvIGNhcmdhciBydW50aW1lLWNvbmZpZy5qc29uIHkgbm8gaGF5IGVudmlyb25tZW50IGNvbmZpZ3VyYWRvJyk7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgICBcclxuICAgICAgcmV0dXJuIHRoaXMuX2xvYWRQcm9taXNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gRW4gU1NSLCBwcmltZXJvIGludGVudGFyIHVzYXIgZmFsbGJhY2sgZGVzZGUgZW52aXJvbm1lbnQgKG3DoXMgY29uZmlhYmxlKVxyXG4gICAgICBjb25zdCBmYWxsYmFja0NvbmZpZyA9IHRoaXMuZ2V0RmFsbGJhY2tDb25maWcoKTtcclxuICAgICAgaWYgKGZhbGxiYWNrQ29uZmlnKSB7XHJcbiAgICAgICAgdGhpcy5fY29uZmlnID0gZmFsbGJhY2tDb25maWc7XHJcbiAgICAgICAgdGhpcy5faXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY29uZmlnU3ViamVjdC5uZXh0KGZhbGxiYWNrQ29uZmlnKTtcclxuICAgICAgICByZXR1cm4gb2YoZmFsbGJhY2tDb25maWcpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBDb21vIGFsdGVybmF0aXZhLCBpbnRlbnRhciBsZWVyIGRlc2RlIHdpbmRvdyBzaSBlc3TDoSBkaXNwb25pYmxlXHJcbiAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuX19SVU5USU1FX0NPTkZJR19fICYmICF0aGlzLl9pc0xvYWRlZCkge1xyXG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IHdpbmRvdy5fX1JVTlRJTUVfQ09ORklHX187XHJcbiAgICAgICAgdGhpcy5faXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY29uZmlnU3ViamVjdC5uZXh0KHRoaXMuX2NvbmZpZyk7XHJcbiAgICAgICAgcmV0dXJuIG9mKHRoaXMuX2NvbmZpZyBhcyBSdW50aW1lQ29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gU2kgbm8gaGF5IGVudmlyb25tZW50IGNvbmZpZ3VyYWRvLCBsYW56YXIgZXJyb3JcclxuICAgICAgY29uc29sZS5lcnJvcign4p2MIFtSdW50aW1lQ29uZmlnU2VydmljZSBTU1JdIE5vIGhheSBlbnZpcm9ubWVudCBjb25maWd1cmFkby4gQWdyZWdhIHByb3ZpZGVFbnZpcm9ubWVudCgpIGVuIGFwcC5jb25maWcudHMnKTtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSdW50aW1lQ29uZmlnIG5vIGRpc3BvbmlibGUuIENvbmZpZ3VyYSBwcm92aWRlRW52aXJvbm1lbnQoKSBlbiBhcHAuY29uZmlnLnRzJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPYnRpZW5lIGxhIGNvbmZpZ3VyYWNpw7NuIGFjdHVhbCAoc8OtbmNyb25vKVxyXG4gICAqL1xyXG4gIGdldENvbmZpZygpOiBSdW50aW1lQ29uZmlnIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2J0aWVuZSBsYSBBUEkgVVJMIGFjdHVhbFxyXG4gICAqL1xyXG4gIGdldEFwaVVybCgpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLl9jb25maWc/LmFwaVVybCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ+KaoO+4jyBbUnVudGltZUNvbmZpZ1NlcnZpY2VdIGdldEFwaVVybCgpIGxsYW1hZG8gc2luIGNvbmZpZ3VyYWNpw7NuIGNhcmdhZGEsIHVzYW5kbyBmYWxsYmFjaycpO1xyXG4gICAgICBjb25zdCBmYWxsYmFjayA9IHRoaXMuZ2V0RmFsbGJhY2tDb25maWcoKTtcclxuICAgICAgcmV0dXJuIGZhbGxiYWNrPy5hcGlVcmwgfHwgJyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLmFwaVVybDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9idGllbmUgbGEgRnJvbnRlbmQgVVJMIGFjdHVhbFxyXG4gICAqL1xyXG4gIGdldEZyb250ZW5kVXJsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnPy5mcm9udGVuZFVybDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9idGllbmUgZWwgZW50b3JubyBhY3R1YWxcclxuICAgKi9cclxuICBnZXRBcHBFbnYoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9jb25maWc/LmFwcEVudiB8fCAnZGV2ZWxvcG1lbnQnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmVyaWZpY2Egc2kgZXN0YW1vcyBlbiBwcm9kdWNjacOzblxyXG4gICAqL1xyXG4gIGlzUHJvZHVjdGlvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9jb25maWc/LnByb2R1Y3Rpb24gfHwgZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPYnRpZW5lIGVsIGxvY2FsZSBhY3R1YWxcclxuICAgKi9cclxuICBnZXRMb2NhbGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9jb25maWc/LmxvY2FsZSB8fCAnZXNfQVInO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2J0aWVuZSBlbCBjYW5hbCBhY3R1YWxcclxuICAgKi9cclxuICBnZXRDaGFubmVsKCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMuX2NvbmZpZz8uY2hhbm5lbCkge1xyXG4gICAgICBjb25zdCBmYWxsYmFjayA9IHRoaXMuZ2V0RmFsbGJhY2tDb25maWcoKTtcclxuICAgICAgcmV0dXJuIGZhbGxiYWNrPy5jaGFubmVsIHx8ICcnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5jaGFubmVsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyBoZWxwZXIgcGFyYSBjb25zdHJ1aXIgVVJMcyBkZSBBUElcclxuICAgKi9cclxuICBidWlsZEFwaVVybChlbmRwb2ludDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGFwaVVybCA9IHRoaXMuZ2V0QXBpVXJsKCk7XHJcbiAgICBjb25zdCBjbGVhbkVuZHBvaW50ID0gZW5kcG9pbnQuc3RhcnRzV2l0aCgnLycpID8gZW5kcG9pbnQuc2xpY2UoMSkgOiBlbmRwb2ludDtcclxuICAgIHJldHVybiBgJHthcGlVcmx9JHtjbGVhbkVuZHBvaW50fWA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIGhlbHBlciBwYXJhIGNvbnN0cnVpciBVUkxzIGRlbCBmcm9udGVuZFxyXG4gICAqL1xyXG4gIGJ1aWxkRnJvbnRlbmRVcmwocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGZyb250ZW5kVXJsID0gdGhpcy5nZXRGcm9udGVuZFVybCgpO1xyXG4gICAgaWYgKCFmcm9udGVuZFVybCkge1xyXG4gICAgICByZXR1cm4gcGF0aDtcclxuICAgIH1cclxuICAgIGNvbnN0IGNsZWFuUGF0aCA9IHBhdGguc3RhcnRzV2l0aCgnLycpID8gcGF0aC5zbGljZSgxKSA6IHBhdGg7XHJcbiAgICByZXR1cm4gYCR7ZnJvbnRlbmRVcmx9JHtjbGVhblBhdGh9YDtcclxuICB9XHJcbn0iXX0=
237
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1jb25maWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1zZXJ2aWNlcy9ydW50aW1lLWNvbmZpZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFcEQsT0FBTyxFQUFjLEVBQUUsRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDcEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUNBQXlDLENBQUM7OztBQVFoRixNQUFNLE9BQU8sb0JBQW9CO0lBU0E7SUFDckI7SUFDdUM7SUFDSTtJQVg3QyxhQUFhLEdBQUcsSUFBSSxlQUFlLENBQXVCLElBQUksQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRTNDLE9BQU8sR0FBeUIsSUFBSSxDQUFDO0lBQ3JDLFlBQVksR0FBcUMsSUFBSSxDQUFDO0lBQ3RELFNBQVMsR0FBRyxLQUFLLENBQUM7SUFFMUIsWUFDK0IsVUFBa0IsRUFDdkMsSUFBZ0IsRUFDdUIsV0FBK0IsRUFDM0IsbUJBQXlDO1FBSC9ELGVBQVUsR0FBVixVQUFVLENBQVE7UUFDdkMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUN1QixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDM0Isd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFz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OzswQkFBSSxNQUFNOzJCQUFDLGlCQUFpQjs7MEJBQ3BDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0LCBQTEFURk9STV9JRCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHRhcCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFJ1bnRpbWVDb25maWcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3J1bnRpbWUtY29uZmlnJztcclxuaW1wb3J0IHsgRU5WSVJPTk1FTlRfVE9LRU4gfSBmcm9tICcuLi9wcm92aWRlcnMvcHJvdmlkZUVudmlyb25tZW50JztcclxuaW1wb3J0IHsgU0VSVkVSX1JVTlRJTUVfQ09ORklHIH0gZnJvbSAnLi4vcHJvdmlkZXJzL3Byb3ZpZGVTZXJ2ZXJSdW50aW1lQ29uZmlnJztcclxuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuXHJcbmRlY2xhcmUgY29uc3Qgd2luZG93OiBhbnk7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSdW50aW1lQ29uZmlnU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBjb25maWdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSdW50aW1lQ29uZmlnIHwgbnVsbD4obnVsbCk7XHJcbiAgcHVibGljIGNvbmZpZyQgPSB0aGlzLmNvbmZpZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgXHJcbiAgcHJpdmF0ZSBfY29uZmlnOiBSdW50aW1lQ29uZmlnIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfbG9hZFByb21pc2U6IE9ic2VydmFibGU8UnVudGltZUNvbmZpZz4gfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIF9pc0xvYWRlZCA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogT2JqZWN0LFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChFTlZJUk9OTUVOVF9UT0tFTikgcHJpdmF0ZSBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQgfCBudWxsLFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChTRVJWRVJfUlVOVElNRV9DT05GSUcpIHByaXZhdGUgc2VydmVyUnVudGltZUNvbmZpZzogUnVudGltZUNvbmZpZyB8IG51bGxcclxuICApIHtcclxuICAgIC8vIFBSSU9SSURBRCAxOiBFbiBTU1IsIHVzYXIgbGEgY29uZmlndXJhY2nDs24gaW55ZWN0YWRhIGRlc2RlIGVsIHNlcnZpZG9yXHJcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkgJiYgdGhpcy5zZXJ2ZXJSdW50aW1lQ29uZmlnKSB7XHJcbiAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuc2VydmVyUnVudGltZUNvbmZpZztcclxuICAgICAgdGhpcy5faXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmNvbmZpZ1N1YmplY3QubmV4dCh0aGlzLl9jb25maWcpO1xyXG4gICAgICBjb25zb2xlLmxvZygn4pyFIFtSdW50aW1lQ29uZmlnU2VydmljZSBTU1JdIENvbmZpZ3VyYWNpw7NuIGNhcmdhZGEgZGVzZGUgU0VSVkVSX1JVTlRJTUVfQ09ORklHOicsIHRoaXMuX2NvbmZpZyk7XHJcbiAgICB9XHJcbiAgICAvLyBQUklPUklEQUQgMjogRW4gYnJvd3NlciwgaW50ZW50YXIgY2FyZ2FyIGlubWVkaWF0YW1lbnRlIGRlc2RlIHdpbmRvdyBzaSBlc3TDoSBkaXNwb25pYmxlXHJcbiAgICBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuX19SVU5USU1FX0NPTkZJR19fICYmICF0aGlzLl9pc0xvYWRlZCkge1xyXG4gICAgICB0aGlzLl9jb25maWcgPSB3aW5kb3cuX19SVU5USU1FX0NPTkZJR19fO1xyXG4gICAgICB0aGlzLl9pc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuY29uZmlnU3ViamVjdC5uZXh0KHRoaXMuX2NvbmZpZyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCfinIUgW1J1bnRpbWVDb25maWdTZXJ2aWNlIEJyb3dzZXJdIENvbmZpZ3VyYWNpw7NuIGNhcmdhZGEgZGVzZGUgd2luZG93Ll9fUlVOVElNRV9DT05GSUdfXzonLCB0aGlzLl9jb25maWcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2J0aWVuZSBjb25maWd1cmFjacOzbiBkZSBmYWxsYmFjayBkZXNkZSBlbnZpcm9ubWVudC50c1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0RmFsbGJhY2tDb25maWcoKTogUnVudGltZUNvbmZpZyB8IG51bGwge1xyXG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBhcGlVcmw6IHRoaXMuZW52aXJvbm1lbnQuYXBpVXJsIHx8ICcnLFxyXG4gICAgICAgIGFwcEVudjogKHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbiA/ICdwcm9kJyA6ICdwcmVwcm9kJykgYXMgJ3Byb2QnIHwgJ3ByZXByb2QnIHwgJ3Rlc3QnLFxyXG4gICAgICAgIHByb2R1Y3Rpb246IHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbixcclxuICAgICAgICBsb2NhbGU6IHRoaXMuZW52aXJvbm1lbnQubG9jYWxlLFxyXG4gICAgICAgIGNoYW5uZWw6IHRoaXMuZW52aXJvbm1lbnQuY2hhbm5lbFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbmljaWFsaXphY2nDs24gw7puaWNhIC0gbGxhbWFkYSBwb3IgQVBQX0lOSVRJQUxJWkVSXHJcbiAgICogR2FyYW50aXphIHF1ZSBsYSBjb25maWd1cmFjacOzbiBzZSBjYXJnYSBzb2xvIHVuYSB2ZXogYWwgaW5pY2lvXHJcbiAgICovXHJcbiAgaW5pdGlhbGl6ZSgpOiBQcm9taXNlPFJ1bnRpbWVDb25maWc+IHtcclxuICAgIGlmICh0aGlzLl9pc0xvYWRlZCAmJiB0aGlzLl9jb25maWcpIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHRoaXMubG9hZENvbmZpZygpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGNvbmZpZzogUnVudGltZUNvbmZpZykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5faXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgcmVzb2x2ZShjb25maWcpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYXJnYSBsYSBjb25maWd1cmFjacOzbiBlbiBydW50aW1lIChvcHRpbWl6YWRhIHBhcmEgdW5hIHNvbGEgY2FyZ2EpXHJcbiAgICogLSBFbiBTU1I6IExlZSBkZXNkZSBlbCBvYmpldG8gd2luZG93IGlueWVjdGFkbyBwb3IgZWwgc2Vydmlkb3JcclxuICAgKiAtIEVuIEJyb3dzZXI6IEhhY2UgcGV0aWNpw7NuIEhUVFAgYSAvcnVudGltZS1jb25maWcuanNvbiAoc29sbyBzaSBubyBlc3TDoSBlbiB3aW5kb3cpXHJcbiAgICovXHJcbiAgbG9hZENvbmZpZygpOiBPYnNlcnZhYmxlPFJ1bnRpbWVDb25maWc+IHtcclxuICAgIC8vIFNpIHlhIHRlbmVtb3MgbGEgY29uZmlnIGNhcmdhZGEsIGxhIGRldm9sdmVtb3MgaW5tZWRpYXRhbWVudGVcclxuICAgIGlmICh0aGlzLl9pc0xvYWRlZCAmJiB0aGlzLl9jb25maWcpIHtcclxuICAgICAgcmV0dXJuIG9mKHRoaXMuX2NvbmZpZyBhcyBSdW50aW1lQ29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTaSB5YSBoYXkgdW5hIGNhcmdhIGVuIHByb2dyZXNvLCByZXV0aWxpemFtb3MgZXNhIHBldGljacOzblxyXG4gICAgaWYgKHRoaXMuX2xvYWRQcm9taXNlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9sb2FkUHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG4gICAgICAvLyBFbiBlbCBuYXZlZ2Fkb3IsIHByaW1lcm8gaW50ZW50YW1vcyBvYnRlbmVyIGxhIGNvbmZpZyBkZXNkZSB3aW5kb3dcclxuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5fX1JVTlRJTUVfQ09ORklHX18gJiYgIXRoaXMuX2lzTG9hZGVkKSB7XHJcbiAgICAgICAgdGhpcy5fY29uZmlnID0gd2luZG93Ll9fUlVOVElNRV9DT05GSUdfXztcclxuICAgICAgICB0aGlzLl9pc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb25maWdTdWJqZWN0Lm5leHQodGhpcy5fY29uZmlnKTtcclxuICAgICAgICByZXR1cm4gb2YodGhpcy5fY29uZmlnIGFzIFJ1bnRpbWVDb25maWcpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBTaSBubyBlc3TDoSBlbiB3aW5kb3csIGhhY2Vtb3MgcGV0aWNpw7NuIEhUVFAgKHNvbG8gdW5hIHZleilcclxuICAgICAgdGhpcy5fbG9hZFByb21pc2UgPSB0aGlzLmh0dHAuZ2V0PFJ1bnRpbWVDb25maWc+KCcvcnVudGltZS1jb25maWcuanNvbicpLnBpcGUoXHJcbiAgICAgICAgdGFwKGNvbmZpZyA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XHJcbiAgICAgICAgICB0aGlzLl9pc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ1N1YmplY3QubmV4dChjb25maWcpO1xyXG4gICAgICAgICAgLy8gR3VhcmRhbW9zIGVuIHdpbmRvdyBwYXJhIHNpZ3VpZW50ZXMgYWNjZXNvc1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5fX1JVTlRJTUVfQ09ORklHX18gPSBjb25maWc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgc2hhcmVSZXBsYXkoMSksIC8vIENhY2hlIGxhIHJlc3B1ZXN0YSBwYXJhIG3Dumx0aXBsZXMgc3VzY3JpcGNpb25lc1xyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcign4p2MIFtSdW50aW1lQ29uZmlnU2VydmljZV0gRXJyb3IgbG9hZGluZyAvcnVudGltZS1jb25maWcuanNvbjonLCBlcnJvcik7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIEludGVudGFyIHVzYXIgZmFsbGJhY2sgZGVzZGUgZW52aXJvbm1lbnRcclxuICAgICAgICAgIGNvbnN0IGZhbGxiYWNrQ29uZmlnID0gdGhpcy5nZXRGYWxsYmFja0NvbmZpZygpO1xyXG4gICAgICAgICAgaWYgKGZhbGxiYWNrQ29uZmlnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbmZpZyA9IGZhbGxiYWNrQ29uZmlnO1xyXG4gICAgICAgICAgICB0aGlzLl9pc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlnU3ViamVjdC5uZXh0KGZhbGxiYWNrQ29uZmlnKTtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKGZhbGxiYWNrQ29uZmlnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gU2kgbm8gaGF5IGVudmlyb25tZW50LCBsYW56YXIgZXJyb3JcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+KdjCBbUnVudGltZUNvbmZpZ1NlcnZpY2VdIE5vIHNlIHB1ZG8gY2FyZ2FyIHJ1bnRpbWUtY29uZmlnLmpzb24geSBubyBoYXkgZW52aXJvbm1lbnQgY29uZmlndXJhZG8nKTtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICAgIFxyXG4gICAgICByZXR1cm4gdGhpcy5fbG9hZFByb21pc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBFbiBTU1IsIFBSSU9SSURBRCAxOiB1c2FyIGxhIGNvbmZpZ3VyYWNpw7NuIGlueWVjdGFkYSBkZXNkZSBlbCBzZXJ2aWRvclxyXG4gICAgICBpZiAodGhpcy5zZXJ2ZXJSdW50aW1lQ29uZmlnICYmICF0aGlzLl9pc0xvYWRlZCkge1xyXG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuc2VydmVyUnVudGltZUNvbmZpZztcclxuICAgICAgICB0aGlzLl9pc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb25maWdTdWJqZWN0Lm5leHQodGhpcy5fY29uZmlnKTtcclxuICAgICAgICBjb25zb2xlLmxvZygn4pyFIFtSdW50aW1lQ29uZmlnU2VydmljZSBTU1JdIENvbmZpZ3VyYWNpw7NuIGNhcmdhZGEgZGVzZGUgU0VSVkVSX1JVTlRJTUVfQ09ORklHOicsIHRoaXMuX2NvbmZpZyk7XHJcbiAgICAgICAgcmV0dXJuIG9mKHRoaXMuX2NvbmZpZyBhcyBSdW50aW1lQ29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gUFJJT1JJREFEIDI6IENvbW8gZmFsbGJhY2ssIHVzYXIgZW52aXJvbm1lbnQgKHNvbG8gc2kgbm8gaGF5IHNlcnZlclJ1bnRpbWVDb25maWcpXHJcbiAgICAgIGNvbnN0IGZhbGxiYWNrQ29uZmlnID0gdGhpcy5nZXRGYWxsYmFja0NvbmZpZygpO1xyXG4gICAgICBpZiAoZmFsbGJhY2tDb25maWcpIHtcclxuICAgICAgICB0aGlzLl9jb25maWcgPSBmYWxsYmFja0NvbmZpZztcclxuICAgICAgICB0aGlzLl9pc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb25maWdTdWJqZWN0Lm5leHQoZmFsbGJhY2tDb25maWcpO1xyXG4gICAgICAgIGNvbnNvbGUud2Fybign4pqg77iPIFtSdW50aW1lQ29uZmlnU2VydmljZSBTU1JdIFVzYW5kbyBmYWxsYmFjayBkZXNkZSBlbnZpcm9ubWVudC50cyAobm8gc2UgZW5jb250csOzIFNFUlZFUl9SVU5USU1FX0NPTkZJRyknKTtcclxuICAgICAgICByZXR1cm4gb2YoZmFsbGJhY2tDb25maWcpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBTaSBubyBoYXkgZW52aXJvbm1lbnQgY29uZmlndXJhZG8sIGxhbnphciBlcnJvclxyXG4gICAgICBjb25zb2xlLmVycm9yKCfinYwgW1J1bnRpbWVDb25maWdTZXJ2aWNlIFNTUl0gTm8gaGF5IGVudmlyb25tZW50IGNvbmZpZ3VyYWRvLiBBZ3JlZ2EgcHJvdmlkZUVudmlyb25tZW50KCkgZW4gYXBwLmNvbmZpZy50cycpO1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1J1bnRpbWVDb25maWcgbm8gZGlzcG9uaWJsZS4gQ29uZmlndXJhIHByb3ZpZGVFbnZpcm9ubWVudCgpIGVuIGFwcC5jb25maWcudHMnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9idGllbmUgbGEgY29uZmlndXJhY2nDs24gYWN0dWFsIChzw61uY3Jvbm8pXHJcbiAgICovXHJcbiAgZ2V0Q29uZmlnKCk6IFJ1bnRpbWVDb25maWcgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl9jb25maWc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPYnRpZW5lIGxhIEFQSSBVUkwgYWN0dWFsXHJcbiAgICovXHJcbiAgZ2V0QXBpVXJsKCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMuX2NvbmZpZz8uYXBpVXJsKSB7XHJcbiAgICAgIGNvbnNvbGUud2Fybign4pqg77iPIFtSdW50aW1lQ29uZmlnU2VydmljZV0gZ2V0QXBpVXJsKCkgbGxhbWFkbyBzaW4gY29uZmlndXJhY2nDs24gY2FyZ2FkYSwgdXNhbmRvIGZhbGxiYWNrJyk7XHJcbiAgICAgIGNvbnN0IGZhbGxiYWNrID0gdGhpcy5nZXRGYWxsYmFja0NvbmZpZygpO1xyXG4gICAgICByZXR1cm4gZmFsbGJhY2s/LmFwaVVybCB8fCAnJztcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl9jb25maWcuYXBpVXJsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2J0aWVuZSBsYSBGcm9udGVuZCBVUkwgYWN0dWFsXHJcbiAgICovXHJcbiAgZ2V0RnJvbnRlbmRVcmwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9jb25maWc/LmZyb250ZW5kVXJsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2J0aWVuZSBlbCBlbnRvcm5vIGFjdHVhbFxyXG4gICAqL1xyXG4gIGdldEFwcEVudigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZz8uYXBwRW52IHx8ICdkZXZlbG9wbWVudCc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWZXJpZmljYSBzaSBlc3RhbW9zIGVuIHByb2R1Y2Npw7NuXHJcbiAgICovXHJcbiAgaXNQcm9kdWN0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZz8ucHJvZHVjdGlvbiB8fCBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9idGllbmUgZWwgbG9jYWxlIGFjdHVhbFxyXG4gICAqL1xyXG4gIGdldExvY2FsZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZz8ubG9jYWxlIHx8ICdlc19BUic7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPYnRpZW5lIGVsIGNhbmFsIGFjdHVhbFxyXG4gICAqL1xyXG4gIGdldENoYW5uZWwoKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5fY29uZmlnPy5jaGFubmVsKSB7XHJcbiAgICAgIGNvbnN0IGZhbGxiYWNrID0gdGhpcy5nZXRGYWxsYmFja0NvbmZpZygpO1xyXG4gICAgICByZXR1cm4gZmFsbGJhY2s/LmNoYW5uZWwgfHwgJyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLmNoYW5uZWw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIGhlbHBlciBwYXJhIGNvbnN0cnVpciBVUkxzIGRlIEFQSVxyXG4gICAqL1xyXG4gIGJ1aWxkQXBpVXJsKGVuZHBvaW50OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgYXBpVXJsID0gdGhpcy5nZXRBcGlVcmwoKTtcclxuICAgIGNvbnN0IGNsZWFuRW5kcG9pbnQgPSBlbmRwb2ludC5zdGFydHNXaXRoKCcvJykgPyBlbmRwb2ludC5zbGljZSgxKSA6IGVuZHBvaW50O1xyXG4gICAgcmV0dXJuIGAke2FwaVVybH0ke2NsZWFuRW5kcG9pbnR9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE3DqXRvZG8gaGVscGVyIHBhcmEgY29uc3RydWlyIFVSTHMgZGVsIGZyb250ZW5kXHJcbiAgICovXHJcbiAgYnVpbGRGcm9udGVuZFVybChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZnJvbnRlbmRVcmwgPSB0aGlzLmdldEZyb250ZW5kVXJsKCk7XHJcbiAgICBpZiAoIWZyb250ZW5kVXJsKSB7XHJcbiAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2xlYW5QYXRoID0gcGF0aC5zdGFydHNXaXRoKCcvJykgPyBwYXRoLnNsaWNlKDEpIDogcGF0aDtcclxuICAgIHJldHVybiBgJHtmcm9udGVuZFVybH0ke2NsZWFuUGF0aH1gO1xyXG4gIH1cclxufSJdfQ==
@@ -1,3 +1,4 @@
1
1
  export * from './provideEnvironment';
2
2
  export * from './provideRuntimeConfig';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvcHJvdmlkZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcHJvdmlkZUVudmlyb25tZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9wcm92aWRlUnVudGltZUNvbmZpZyc7Il19
3
+ export * from './provideServerRuntimeConfig';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvcHJvdmlkZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDhCQUE4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9wcm92aWRlRW52aXJvbm1lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL3Byb3ZpZGVSdW50aW1lQ29uZmlnJztcclxuZXhwb3J0ICogZnJvbSAnLi9wcm92aWRlU2VydmVyUnVudGltZUNvbmZpZyc7Il19
@@ -0,0 +1,20 @@
1
+ import { InjectionToken, makeEnvironmentProviders } from '@angular/core';
2
+ /**
3
+ * Token para inyectar la configuración de runtime desde el servidor
4
+ */
5
+ export const SERVER_RUNTIME_CONFIG = new InjectionToken('server.runtime.config');
6
+ /**
7
+ * Provider para inyectar la configuración de runtime en SSR
8
+ * Debe ser usado en app.config.server.ts
9
+ *
10
+ * @param config Configuración de runtime obtenida desde las variables de entorno del servidor
11
+ */
12
+ export function provideServerRuntimeConfig(config) {
13
+ return makeEnvironmentProviders([
14
+ {
15
+ provide: SERVER_RUNTIME_CONFIG,
16
+ useValue: config
17
+ }
18
+ ]);
19
+ }
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZVNlcnZlclJ1bnRpbWVDb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvcHJvdmlkZXJzL3Byb3ZpZGVTZXJ2ZXJSdW50aW1lQ29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBd0IsY0FBYyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9GOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxjQUFjLENBQWdCLHVCQUF1QixDQUFDLENBQUM7QUFFaEc7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsTUFBcUI7SUFDOUQsT0FBTyx3QkFBd0IsQ0FBQztRQUM5QjtZQUNFLE9BQU8sRUFBRSxxQkFBcUI7WUFDOUIsUUFBUSxFQUFFLE1BQU07U0FDakI7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW52aXJvbm1lbnRQcm92aWRlcnMsIEluamVjdGlvblRva2VuLCBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUnVudGltZUNvbmZpZyB9IGZyb20gJy4uL2ludGVyZmFjZXMvcnVudGltZS1jb25maWcnO1xyXG5cclxuLyoqXHJcbiAqIFRva2VuIHBhcmEgaW55ZWN0YXIgbGEgY29uZmlndXJhY2nDs24gZGUgcnVudGltZSBkZXNkZSBlbCBzZXJ2aWRvclxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFNFUlZFUl9SVU5USU1FX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxSdW50aW1lQ29uZmlnPignc2VydmVyLnJ1bnRpbWUuY29uZmlnJyk7XHJcblxyXG4vKipcclxuICogUHJvdmlkZXIgcGFyYSBpbnllY3RhciBsYSBjb25maWd1cmFjacOzbiBkZSBydW50aW1lIGVuIFNTUlxyXG4gKiBEZWJlIHNlciB1c2FkbyBlbiBhcHAuY29uZmlnLnNlcnZlci50c1xyXG4gKiBcclxuICogQHBhcmFtIGNvbmZpZyBDb25maWd1cmFjacOzbiBkZSBydW50aW1lIG9idGVuaWRhIGRlc2RlIGxhcyB2YXJpYWJsZXMgZGUgZW50b3JubyBkZWwgc2Vydmlkb3JcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlU2VydmVyUnVudGltZUNvbmZpZyhjb25maWc6IFJ1bnRpbWVDb25maWcpOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XHJcbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IFNFUlZFUl9SVU5USU1FX0NPTkZJRyxcclxuICAgICAgdXNlVmFsdWU6IGNvbmZpZ1xyXG4gICAgfVxyXG4gIF0pO1xyXG59XHJcbiJdfQ==
@@ -44,24 +44,53 @@ const provideEnvironment = (environment) => {
44
44
  ]);
45
45
  };
46
46
 
47
+ /**
48
+ * Token para inyectar la configuración de runtime desde el servidor
49
+ */
50
+ const SERVER_RUNTIME_CONFIG = new InjectionToken('server.runtime.config');
51
+ /**
52
+ * Provider para inyectar la configuración de runtime en SSR
53
+ * Debe ser usado en app.config.server.ts
54
+ *
55
+ * @param config Configuración de runtime obtenida desde las variables de entorno del servidor
56
+ */
57
+ function provideServerRuntimeConfig(config) {
58
+ return makeEnvironmentProviders([
59
+ {
60
+ provide: SERVER_RUNTIME_CONFIG,
61
+ useValue: config
62
+ }
63
+ ]);
64
+ }
65
+
47
66
  class RuntimeConfigService {
48
67
  platformId;
49
68
  http;
50
69
  environment;
70
+ serverRuntimeConfig;
51
71
  configSubject = new BehaviorSubject(null);
52
72
  config$ = this.configSubject.asObservable();
53
73
  _config = null;
54
74
  _loadPromise = null;
55
75
  _isLoaded = false;
56
- constructor(platformId, http, environment) {
76
+ constructor(platformId, http, environment, serverRuntimeConfig) {
57
77
  this.platformId = platformId;
58
78
  this.http = http;
59
79
  this.environment = environment;
60
- // En SSR o browser, intentar cargar inmediatamente desde window si está disponible
61
- if (typeof window !== 'undefined' && window.__RUNTIME_CONFIG__ && !this._isLoaded) {
80
+ this.serverRuntimeConfig = serverRuntimeConfig;
81
+ // PRIORIDAD 1: En SSR, usar la configuración inyectada desde el servidor
82
+ if (!isPlatformBrowser(this.platformId) && this.serverRuntimeConfig) {
83
+ this._config = this.serverRuntimeConfig;
84
+ this._isLoaded = true;
85
+ this.configSubject.next(this._config);
86
+ console.log('✅ [RuntimeConfigService SSR] Configuración cargada desde SERVER_RUNTIME_CONFIG:', this._config);
87
+ }
88
+ // PRIORIDAD 2: En browser, intentar cargar inmediatamente desde window si está disponible
89
+ else if (typeof window !== 'undefined' && window.__RUNTIME_CONFIG__ && !this._isLoaded) {
62
90
  this._config = window.__RUNTIME_CONFIG__;
63
91
  this._isLoaded = true;
64
92
  this.configSubject.next(this._config);
93
+ console.log('✅ [RuntimeConfigService Browser] Configuración cargada desde window.__RUNTIME_CONFIG__:', this._config);
65
94
  }
66
95
  }
67
96
  /**
@@ -148,21 +177,23 @@ class RuntimeConfigService {
148
177
  return this._loadPromise;
149
178
  }
150
179
  else {
151
- // En SSR, primero intentar usar fallback desde environment (más confiable)
180
+ // En SSR, PRIORIDAD 1: usar la configuración inyectada desde el servidor
181
+ if (this.serverRuntimeConfig && !this._isLoaded) {
182
+ this._config = this.serverRuntimeConfig;
183
+ this._isLoaded = true;
184
+ this.configSubject.next(this._config);
185
+ console.log('✅ [RuntimeConfigService SSR] Configuración cargada desde SERVER_RUNTIME_CONFIG:', this._config);
186
+ return of(this._config);
187
+ }
188
+ // PRIORIDAD 2: Como fallback, usar environment (solo si no hay serverRuntimeConfig)
152
189
  const fallbackConfig = this.getFallbackConfig();
153
190
  if (fallbackConfig) {
154
191
  this._config = fallbackConfig;
155
192
  this._isLoaded = true;
156
193
  this.configSubject.next(fallbackConfig);
194
+ console.warn('⚠️ [RuntimeConfigService SSR] Usando fallback desde environment.ts (no se encontró SERVER_RUNTIME_CONFIG)');
157
195
  return of(fallbackConfig);
158
196
  }
159
- // Como alternativa, intentar leer desde window si está disponible
160
- if (typeof window !== 'undefined' && window.__RUNTIME_CONFIG__ && !this._isLoaded) {
161
- this._config = window.__RUNTIME_CONFIG__;
162
- this._isLoaded = true;
163
- this.configSubject.next(this._config);
164
- return of(this._config);
165
- }
166
197
  // Si no hay environment configurado, lanzar error
167
198
  console.error('❌ [RuntimeConfigService SSR] No hay environment configurado. Agrega provideEnvironment() en app.config.ts');
168
199
  throw new Error('RuntimeConfig no disponible. Configura provideEnvironment() en app.config.ts');
@@ -238,7 +269,7 @@ class RuntimeConfigService {
238
269
  const cleanPath = path.startsWith('/') ? path.slice(1) : path;
239
270
  return `${frontendUrl}${cleanPath}`;
240
271
  }
241
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RuntimeConfigService, deps: [{ token: PLATFORM_ID }, { token: i1.HttpClient }, { token: ENVIRONMENT_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
272
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RuntimeConfigService, deps: [{ token: PLATFORM_ID }, { token: i1.HttpClient }, { token: ENVIRONMENT_TOKEN, optional: true }, { token: SERVER_RUNTIME_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
242
273
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RuntimeConfigService, providedIn: 'root' });
243
274
  }
244
275
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RuntimeConfigService, decorators: [{
@@ -254,6 +285,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
254
285
  }, {
255
286
  type: Inject,
256
287
  args: [ENVIRONMENT_TOKEN]
288
+ }] }, { type: undefined, decorators: [{
289
+ type: Optional
290
+ }, {
291
+ type: Inject,
292
+ args: [SERVER_RUNTIME_CONFIG]
257
293
  }] }] });
258
294
 
259
295
  /**
@@ -410,13 +446,12 @@ class ConnectionService {
410
446
  */
411
447
  constantsSvr = inject(ApiConstantsService);
412
448
  /**
413
- * URL Base para las peticiones.
414
- * @type {string}
449
+ * URL Base para las peticiones - obtenida dinámicamente del runtime config
450
+ * @returns {string}
415
451
  * @memberof ConnectionService
416
452
  */
417
- url;
418
- constructor() {
419
- this.url = this.constantsSvr.getUrlBase();
453
+ get url() {
454
+ return this.constantsSvr.getUrlBase();
420
455
  }
421
456
  /**
422
457
  * Función para generar peticiones de tipo GET
@@ -464,7 +499,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
464
499
  args: [{
465
500
  providedIn: 'root'
466
501
  }]
467
- }], ctorParameters: () => [] });
502
+ }] });
468
503
 
469
504
  /**
470
505
  * Servicio que provee las constantes necesarias que se utilizan por toda la aplicación.
@@ -13322,5 +13357,5 @@ const directives = [
13322
13357
  * Generated bundle index. Do not edit.
13323
13358
  */
13324
13359
 
13325
- 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 };
13360
+ 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, SERVER_RUNTIME_CONFIG, SectionContainerEcComponent, ShareEcComponent, ShipmentService, SidebarEcComponent, StoresEcComponent, SuccessEcComponent, TestService, ToastService, VariantsEcComponent, authGuard, authInterceptor, directives, initializeRuntimeConfig, provideEnvironment, provideRuntimeConfig, provideServerRuntimeConfig, runtimeConfigInterceptor };
13326
13361
  //# sourceMappingURL=ng-easycommerce-v18.mjs.map