ctt-babylon 0.11.4 → 0.11.6

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.
@@ -1,16 +1,32 @@
1
1
  import { isPlatformBrowser } from '@angular/common';
2
- import { Component, Inject, Input, PLATFORM_ID, ViewChild, } from '@angular/core';
2
+ import { afterNextRender, Component, Inject, Input, PLATFORM_ID, ViewChild, } from '@angular/core';
3
3
  import * as i0 from "@angular/core";
4
+ let widgetScriptPromise = null;
5
+ function loadOnce(src) {
6
+ if (widgetScriptPromise)
7
+ return widgetScriptPromise;
8
+ widgetScriptPromise = new Promise((resolve, reject) => {
9
+ // Si ya existe, resolvemos
10
+ if (window.WidgetSearch || window.initializeWidgetSearch) {
11
+ resolve();
12
+ return;
13
+ }
14
+ const s = document.createElement('script');
15
+ s.src = src;
16
+ s.async = true;
17
+ s.onload = () => resolve();
18
+ s.onerror = () => reject(new Error('No se pudo cargar el script del widget'));
19
+ document.head.appendChild(s);
20
+ });
21
+ return widgetScriptPromise;
22
+ }
4
23
  export class BabylonBookingWidgetComponent {
5
24
  constructor(platformId, zone) {
6
- this.platformId = platformId;
7
25
  this.zone = zone;
8
- // Base
9
26
  this.widgetId = 'widget-search';
10
- this.hotelId = 'default';
27
+ this.hotelId = 'alecad';
11
28
  this.type = 'chain';
12
29
  this.theme = 'light';
13
- // Extra config (con defaults)
14
30
  this.currency = 'EUR';
15
31
  this.locale = 'es-ES';
16
32
  this.layout = 'inline';
@@ -21,63 +37,96 @@ export class BabylonBookingWidgetComponent {
21
37
  this.showPromoCode = true;
22
38
  this.showChildAges = true;
23
39
  this.maxChildren = 2;
24
- /**
25
- * Por si algún día quieres sobreescribir todo de golpe desde CMS:
26
- * <lib-babylon-booking-widget [configOverride]="{ currency:'USD', showPrice:true }" />
27
- */
28
- this.configOverride = {};
29
- this.initialized = false;
30
- }
31
- ngAfterViewInit() {
32
- if (!isPlatformBrowser(this.platformId))
33
- return;
34
- if (this.initialized)
40
+ this.mounted = false;
41
+ if (!isPlatformBrowser(platformId))
35
42
  return;
36
- requestAnimationFrame(() => this.initWidget());
43
+ afterNextRender(() => {
44
+ this.zone.runOutsideAngular(async () => {
45
+ if (this.mounted)
46
+ return;
47
+ // ⬇️ PON AQUÍ la URL real del script de Witbooking
48
+ await loadOnce('https://widget-engine.b-cdn.net/widget.min.js');
49
+ this.mount();
50
+ });
51
+ });
37
52
  }
38
- initWidget() {
39
- const WidgetSearch = window.WidgetSearch;
40
- if (!WidgetSearch)
53
+ mount() {
54
+ if (this.mounted)
41
55
  return;
56
+ this.mounted = true;
42
57
  const el = this.widgetContainer.nativeElement;
43
- const config = {
44
- bookId: this.hotelId,
45
- type: this.type,
46
- theme: this.theme,
47
- currency: this.currency,
48
- locale: this.locale,
49
- layout: this.layout,
50
- defaultAdults: this.defaultAdults,
51
- defaultChildren: this.defaultChildren,
52
- showPrice: this.showPrice,
53
- showHotelSelector: this.showHotelSelector,
54
- showPromoCode: this.showPromoCode,
55
- showChildAges: this.showChildAges,
56
- maxChildren: this.maxChildren,
57
- baseUrl: this.baseUrl,
58
- urlChain: this.urlChain,
59
- urlHotel: this.urlHotel,
60
- buttonText: this.buttonText,
61
- ...this.configOverride, // al final para que pise defaults
62
- };
63
- this.zone.runOutsideAngular(() => {
64
- this.initialized = true;
65
- new WidgetSearch(el, config);
66
- });
67
- }
68
- ngOnDestroy() {
69
- this.initialized = false;
58
+ // Opción A (si existe): init global manual :contentReference[oaicite:1]{index=1}
59
+ if (window.initializeWidgetSearch) {
60
+ window.initializeWidgetSearch();
61
+ return;
62
+ }
63
+ // Opción B: constructor :contentReference[oaicite:2]{index=2}
64
+ if (window.WidgetSearch) {
65
+ // Si tu WidgetSearch acepta (el, config), aquí puedes pasar config.
66
+ new window.WidgetSearch(el, {});
67
+ }
70
68
  }
71
69
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BabylonBookingWidgetComponent, deps: [{ token: PLATFORM_ID }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
72
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: BabylonBookingWidgetComponent, isStandalone: true, selector: "lib-babylon-booking-widget", inputs: { widgetId: "widgetId", hotelId: "hotelId", type: "type", theme: "theme", currency: "currency", locale: "locale", layout: "layout", defaultAdults: "defaultAdults", defaultChildren: "defaultChildren", showPrice: "showPrice", showHotelSelector: "showHotelSelector", showPromoCode: "showPromoCode", showChildAges: "showChildAges", maxChildren: "maxChildren", baseUrl: "baseUrl", urlChain: "urlChain", urlHotel: "urlHotel", buttonText: "buttonText", configOverride: "configOverride" }, viewQueries: [{ propertyName: "widgetContainer", first: true, predicate: ["widgetContainer"], descendants: true, static: true }], ngImport: i0, template: `<div #widgetContainer [id]="widgetId"></div>`, isInline: true, styles: [""] }); }
70
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: BabylonBookingWidgetComponent, isStandalone: true, selector: "lib-babylon-booking-widget", inputs: { widgetId: "widgetId", hotelId: "hotelId", type: "type", theme: "theme", currency: "currency", locale: "locale", layout: "layout", defaultAdults: "defaultAdults", defaultChildren: "defaultChildren", showPrice: "showPrice", showHotelSelector: "showHotelSelector", showPromoCode: "showPromoCode", showChildAges: "showChildAges", maxChildren: "maxChildren", baseUrl: "baseUrl", urlChain: "urlChain", urlHotel: "urlHotel", buttonText: "buttonText" }, viewQueries: [{ propertyName: "widgetContainer", first: true, predicate: ["widgetContainer"], descendants: true, static: true }], ngImport: i0, template: `
71
+ <div
72
+ #widgetContainer
73
+ [id]="widgetId"
74
+ [attr.data-book-id]="hotelId"
75
+ [attr.data-type]="type"
76
+ [attr.data-theme]="theme"
77
+ [attr.data-currency]="currency"
78
+ [attr.data-locale]="locale"
79
+ [attr.data-layout]="layout"
80
+ [attr.data-default-adults]="defaultAdults"
81
+ [attr.data-default-children]="defaultChildren"
82
+ [attr.data-show-price]="showPrice"
83
+ [attr.data-show-hotel-selector]="showHotelSelector"
84
+ [attr.data-show-promo-code]="showPromoCode"
85
+ [attr.data-show-child-ages]="showChildAges"
86
+ [attr.data-max-children]="maxChildren"
87
+ [attr.data-base-url]="baseUrl"
88
+ [attr.data-url-chain]="urlChain"
89
+ [attr.data-url-hotel]="urlHotel"
90
+ [attr.data-button-text]="buttonText"
91
+ ></div>
92
+ `, isInline: true }); }
73
93
  }
74
94
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BabylonBookingWidgetComponent, decorators: [{
75
95
  type: Component,
76
- args: [{ selector: 'lib-babylon-booking-widget', standalone: true, template: `<div #widgetContainer [id]="widgetId"></div>` }]
96
+ args: [{
97
+ selector: 'lib-babylon-booking-widget',
98
+ standalone: true,
99
+ template: `
100
+ <div
101
+ #widgetContainer
102
+ [id]="widgetId"
103
+ [attr.data-book-id]="hotelId"
104
+ [attr.data-type]="type"
105
+ [attr.data-theme]="theme"
106
+ [attr.data-currency]="currency"
107
+ [attr.data-locale]="locale"
108
+ [attr.data-layout]="layout"
109
+ [attr.data-default-adults]="defaultAdults"
110
+ [attr.data-default-children]="defaultChildren"
111
+ [attr.data-show-price]="showPrice"
112
+ [attr.data-show-hotel-selector]="showHotelSelector"
113
+ [attr.data-show-promo-code]="showPromoCode"
114
+ [attr.data-show-child-ages]="showChildAges"
115
+ [attr.data-max-children]="maxChildren"
116
+ [attr.data-base-url]="baseUrl"
117
+ [attr.data-url-chain]="urlChain"
118
+ [attr.data-url-hotel]="urlHotel"
119
+ [attr.data-button-text]="buttonText"
120
+ ></div>
121
+ `,
122
+ }]
77
123
  }], ctorParameters: () => [{ type: undefined, decorators: [{
78
124
  type: Inject,
79
125
  args: [PLATFORM_ID]
80
- }] }, { type: i0.NgZone }], propDecorators: { widgetId: [{
126
+ }] }, { type: i0.NgZone }], propDecorators: { widgetContainer: [{
127
+ type: ViewChild,
128
+ args: ['widgetContainer', { static: true }]
129
+ }], widgetId: [{
81
130
  type: Input
82
131
  }], hotelId: [{
83
132
  type: Input
@@ -113,10 +162,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
113
162
  type: Input
114
163
  }], buttonText: [{
115
164
  type: Input
116
- }], configOverride: [{
117
- type: Input
118
- }], widgetContainer: [{
119
- type: ViewChild,
120
- args: ['widgetContainer', { static: true }]
121
165
  }] } });
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFieWxvbi1ib29raW5nLXdpZGdldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYWJ5bG9uL3NyYy9saWIvY29tcG9uZW50cy9jb3JlL2JhYnlsb24tYm9va2luZy13aWRnZXQvYmFieWxvbi1ib29raW5nLXdpZGdldC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUVILFNBQVMsRUFFVCxNQUFNLEVBQ04sS0FBSyxFQUdMLFdBQVcsRUFDWCxTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7O0FBMkN2QixNQUFNLE9BQU8sNkJBQTZCO0lBcUN0QyxZQUNpQyxVQUFrQixFQUN2QyxJQUFZO1FBRFMsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQUN2QyxTQUFJLEdBQUosSUFBSSxDQUFRO1FBdEN4QixPQUFPO1FBQ0UsYUFBUSxHQUFHLGVBQWUsQ0FBQztRQUMzQixZQUFPLEdBQUcsU0FBUyxDQUFDO1FBQ3BCLFNBQUksR0FBK0IsT0FBTyxDQUFDO1FBQzNDLFVBQUssR0FBZ0MsT0FBTyxDQUFDO1FBRXRELDhCQUE4QjtRQUNyQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLFdBQU0sR0FBRyxPQUFPLENBQUM7UUFDakIsV0FBTSxHQUF3QixRQUFRLENBQUM7UUFFdkMsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEIsb0JBQWUsR0FBRyxDQUFDLENBQUM7UUFFcEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixzQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDekIsa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFDckIsa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFDckIsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFPekI7OztXQUdHO1FBQ00sbUJBQWMsR0FBaUMsRUFBRSxDQUFDO1FBS25ELGdCQUFXLEdBQUcsS0FBSyxDQUFDO0lBS3pCLENBQUM7SUFFSixlQUFlO1FBQ1gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFBRSxPQUFPO1FBQ2hELElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBQzdCLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTyxVQUFVO1FBQ2QsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztRQUN6QyxJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU87UUFFMUIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUM7UUFFOUMsTUFBTSxNQUFNLEdBQXdCO1lBQ2hDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNwQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFFakIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFFbkIsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQ2pDLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtZQUVyQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtZQUN6QyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDakMsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQ2pDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUU3QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUV2QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFFM0IsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLGtDQUFrQztTQUM3RCxDQUFDO1FBRUYsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxZQUFZLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDOytHQXpGUSw2QkFBNkIsa0JBc0MxQixXQUFXO21HQXRDZCw2QkFBNkIsa3NCQUg1Qiw4Q0FBOEM7OzRGQUcvQyw2QkFBNkI7a0JBTnpDLFNBQVM7K0JBQ0ksNEJBQTRCLGNBQzFCLElBQUksWUFDTiw4Q0FBOEM7OzBCQXlDbkQsTUFBTTsyQkFBQyxXQUFXOzhEQXBDZCxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUdHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQU1HLGNBQWM7c0JBQXRCLEtBQUs7Z0JBR04sZUFBZTtzQkFEZCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBQTEFURk9STV9JRCxcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gICAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgICAgIFdpZGdldFNlYXJjaDogYW55O1xuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgQm9va2luZ1dpZGdldFR5cGUgPSAnY2hhaW4nIHwgJ2hvdGVsJztcbmV4cG9ydCB0eXBlIEJvb2tpbmdXaWRnZXRUaGVtZSA9ICdsaWdodCcgfCAnZGFyayc7XG5leHBvcnQgdHlwZSBCb29raW5nV2lkZ2V0TGF5b3V0ID0gJ2lubGluZScgfCAncG9wdXAnIHwgc3RyaW5nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJvb2tpbmdXaWRnZXRDb25maWcge1xuICAgIGJvb2tJZD86IHN0cmluZztcbiAgICB0eXBlPzogQm9va2luZ1dpZGdldFR5cGUgfCBzdHJpbmc7XG4gICAgdGhlbWU/OiBCb29raW5nV2lkZ2V0VGhlbWUgfCBzdHJpbmc7XG5cbiAgICBjdXJyZW5jeT86IHN0cmluZztcbiAgICBsb2NhbGU/OiBzdHJpbmc7XG4gICAgbGF5b3V0PzogQm9va2luZ1dpZGdldExheW91dDtcblxuICAgIGRlZmF1bHRBZHVsdHM/OiBudW1iZXI7XG4gICAgZGVmYXVsdENoaWxkcmVuPzogbnVtYmVyO1xuXG4gICAgc2hvd1ByaWNlPzogYm9vbGVhbjtcbiAgICBzaG93SG90ZWxTZWxlY3Rvcj86IGJvb2xlYW47XG4gICAgc2hvd1Byb21vQ29kZT86IGJvb2xlYW47XG4gICAgc2hvd0NoaWxkQWdlcz86IGJvb2xlYW47XG4gICAgbWF4Q2hpbGRyZW4/OiBudW1iZXI7XG5cbiAgICBiYXNlVXJsPzogc3RyaW5nO1xuICAgIHVybENoYWluPzogc3RyaW5nO1xuICAgIHVybEhvdGVsPzogc3RyaW5nO1xuXG4gICAgYnV0dG9uVGV4dD86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsaWItYmFieWxvbi1ib29raW5nLXdpZGdldCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYDxkaXYgI3dpZGdldENvbnRhaW5lciBbaWRdPVwid2lkZ2V0SWRcIj48L2Rpdj5gLFxuICAgIHN0eWxlVXJsOiAnLi9iYWJ5bG9uLWJvb2tpbmctd2lkZ2V0LmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgQmFieWxvbkJvb2tpbmdXaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIC8vIEJhc2VcbiAgICBASW5wdXQoKSB3aWRnZXRJZCA9ICd3aWRnZXQtc2VhcmNoJztcbiAgICBASW5wdXQoKSBob3RlbElkID0gJ2RlZmF1bHQnO1xuICAgIEBJbnB1dCgpIHR5cGU6IEJvb2tpbmdXaWRnZXRUeXBlIHwgc3RyaW5nID0gJ2NoYWluJztcbiAgICBASW5wdXQoKSB0aGVtZTogQm9va2luZ1dpZGdldFRoZW1lIHwgc3RyaW5nID0gJ2xpZ2h0JztcblxuICAgIC8vIEV4dHJhIGNvbmZpZyAoY29uIGRlZmF1bHRzKVxuICAgIEBJbnB1dCgpIGN1cnJlbmN5ID0gJ0VVUic7XG4gICAgQElucHV0KCkgbG9jYWxlID0gJ2VzLUVTJztcbiAgICBASW5wdXQoKSBsYXlvdXQ6IEJvb2tpbmdXaWRnZXRMYXlvdXQgPSAnaW5saW5lJztcblxuICAgIEBJbnB1dCgpIGRlZmF1bHRBZHVsdHMgPSAyO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRDaGlsZHJlbiA9IDA7XG5cbiAgICBASW5wdXQoKSBzaG93UHJpY2UgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBzaG93SG90ZWxTZWxlY3RvciA9IHRydWU7XG4gICAgQElucHV0KCkgc2hvd1Byb21vQ29kZSA9IHRydWU7XG4gICAgQElucHV0KCkgc2hvd0NoaWxkQWdlcyA9IHRydWU7XG4gICAgQElucHV0KCkgbWF4Q2hpbGRyZW4gPSAyO1xuXG4gICAgQElucHV0KCkgYmFzZVVybD86IHN0cmluZztcbiAgICBASW5wdXQoKSB1cmxDaGFpbj86IHN0cmluZztcbiAgICBASW5wdXQoKSB1cmxIb3RlbD86IHN0cmluZztcbiAgICBASW5wdXQoKSBidXR0b25UZXh0Pzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogUG9yIHNpIGFsZ8O6biBkw61hIHF1aWVyZXMgc29icmVlc2NyaWJpciB0b2RvIGRlIGdvbHBlIGRlc2RlIENNUzpcbiAgICAgKiA8bGliLWJhYnlsb24tYm9va2luZy13aWRnZXQgW2NvbmZpZ092ZXJyaWRlXT1cInsgY3VycmVuY3k6J1VTRCcsIHNob3dQcmljZTp0cnVlIH1cIiAvPlxuICAgICAqL1xuICAgIEBJbnB1dCgpIGNvbmZpZ092ZXJyaWRlOiBQYXJ0aWFsPEJvb2tpbmdXaWRnZXRDb25maWc+ID0ge307XG5cbiAgICBAVmlld0NoaWxkKCd3aWRnZXRDb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHdpZGdldENvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogb2JqZWN0LFxuICAgICAgICBwcml2YXRlIHpvbmU6IE5nWm9uZVxuICAgICkge31cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSByZXR1cm47XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLmluaXRXaWRnZXQoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0V2lkZ2V0KCkge1xuICAgICAgICBjb25zdCBXaWRnZXRTZWFyY2ggPSB3aW5kb3cuV2lkZ2V0U2VhcmNoO1xuICAgICAgICBpZiAoIVdpZGdldFNlYXJjaCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy53aWRnZXRDb250YWluZXIubmF0aXZlRWxlbWVudDtcblxuICAgICAgICBjb25zdCBjb25maWc6IEJvb2tpbmdXaWRnZXRDb25maWcgPSB7XG4gICAgICAgICAgICBib29rSWQ6IHRoaXMuaG90ZWxJZCxcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHRoZW1lOiB0aGlzLnRoZW1lLFxuXG4gICAgICAgICAgICBjdXJyZW5jeTogdGhpcy5jdXJyZW5jeSxcbiAgICAgICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgICAgICBsYXlvdXQ6IHRoaXMubGF5b3V0LFxuXG4gICAgICAgICAgICBkZWZhdWx0QWR1bHRzOiB0aGlzLmRlZmF1bHRBZHVsdHMsXG4gICAgICAgICAgICBkZWZhdWx0Q2hpbGRyZW46IHRoaXMuZGVmYXVsdENoaWxkcmVuLFxuXG4gICAgICAgICAgICBzaG93UHJpY2U6IHRoaXMuc2hvd1ByaWNlLFxuICAgICAgICAgICAgc2hvd0hvdGVsU2VsZWN0b3I6IHRoaXMuc2hvd0hvdGVsU2VsZWN0b3IsXG4gICAgICAgICAgICBzaG93UHJvbW9Db2RlOiB0aGlzLnNob3dQcm9tb0NvZGUsXG4gICAgICAgICAgICBzaG93Q2hpbGRBZ2VzOiB0aGlzLnNob3dDaGlsZEFnZXMsXG4gICAgICAgICAgICBtYXhDaGlsZHJlbjogdGhpcy5tYXhDaGlsZHJlbixcblxuICAgICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgICAgdXJsQ2hhaW46IHRoaXMudXJsQ2hhaW4sXG4gICAgICAgICAgICB1cmxIb3RlbDogdGhpcy51cmxIb3RlbCxcblxuICAgICAgICAgICAgYnV0dG9uVGV4dDogdGhpcy5idXR0b25UZXh0LFxuXG4gICAgICAgICAgICAuLi50aGlzLmNvbmZpZ092ZXJyaWRlLCAvLyBhbCBmaW5hbCBwYXJhIHF1ZSBwaXNlIGRlZmF1bHRzXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICAgICAgbmV3IFdpZGdldFNlYXJjaChlbCwgY29uZmlnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICB9XG59XG4iXX0=
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFieWxvbi1ib29raW5nLXdpZGdldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYWJ5bG9uL3NyYy9saWIvY29tcG9uZW50cy9jb3JlL2JhYnlsb24tYm9va2luZy13aWRnZXQvYmFieWxvbi1ib29raW5nLXdpZGdldC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUNILGVBQWUsRUFDZixTQUFTLEVBRVQsTUFBTSxFQUNOLEtBQUssRUFFTCxXQUFXLEVBQ1gsU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDOztBQVN2QixJQUFJLG1CQUFtQixHQUF5QixJQUFJLENBQUM7QUFFckQsU0FBUyxRQUFRLENBQUMsR0FBVztJQUN6QixJQUFJLG1CQUFtQjtRQUFFLE9BQU8sbUJBQW1CLENBQUM7SUFFcEQsbUJBQW1CLEdBQUcsSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDeEQsMkJBQTJCO1FBQzNCLElBQUksTUFBTSxDQUFDLFlBQVksSUFBSSxNQUFNLENBQUMsc0JBQXNCLEVBQUU7WUFDdEQsT0FBTyxFQUFFLENBQUM7WUFDVixPQUFPO1NBQ1Y7UUFFRCxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ1osQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDZixDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQ2IsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUMsQ0FB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QkFBckIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBhZnRlck5leHRSZW5kZXIsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBQTEFURk9STV9JRCxcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gICAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgICAgIFdpZGdldFNlYXJjaDogYW55O1xuICAgICAgICBpbml0aWFsaXplV2lkZ2V0U2VhcmNoPzogKCkgPT4gdm9pZDtcbiAgICB9XG59XG5cbmxldCB3aWRnZXRTY3JpcHRQcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG5cbmZ1bmN0aW9uIGxvYWRPbmNlKHNyYzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHdpZGdldFNjcmlwdFByb21pc2UpIHJldHVybiB3aWRnZXRTY3JpcHRQcm9taXNlO1xuXG4gICAgd2lkZ2V0U2NyaXB0UHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgLy8gU2kgeWEgZXhpc3RlLCByZXNvbHZlbW9zXG4gICAgICAgIGlmICh3aW5kb3cuV2lkZ2V0U2VhcmNoIHx8IHdpbmRvdy5pbml0aWFsaXplV2lkZ2V0U2VhcmNoKSB7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgIHMuc3JjID0gc3JjO1xuICAgICAgICBzLmFzeW5jID0gdHJ1ZTtcbiAgICAgICAgcy5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKCk7XG4gICAgICAgIHMub25lcnJvciA9ICgpID0+XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdObyBzZSBwdWRvIGNhcmdhciBlbCBzY3JpcHQgZGVsIHdpZGdldCcpKTtcbiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB3aWRnZXRTY3JpcHRQcm9taXNlO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1iYWJ5bG9uLWJvb2tpbmctd2lkZ2V0JyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgICN3aWRnZXRDb250YWluZXJcbiAgICAgICAgICAgIFtpZF09XCJ3aWRnZXRJZFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWJvb2staWRdPVwiaG90ZWxJZFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXR5cGVdPVwidHlwZVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRoZW1lXT1cInRoZW1lXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtY3VycmVuY3ldPVwiY3VycmVuY3lcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1sb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtbGF5b3V0XT1cImxheW91dFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWRlZmF1bHQtYWR1bHRzXT1cImRlZmF1bHRBZHVsdHNcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1kZWZhdWx0LWNoaWxkcmVuXT1cImRlZmF1bHRDaGlsZHJlblwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXNob3ctcHJpY2VdPVwic2hvd1ByaWNlXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtc2hvdy1ob3RlbC1zZWxlY3Rvcl09XCJzaG93SG90ZWxTZWxlY3RvclwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXNob3ctcHJvbW8tY29kZV09XCJzaG93UHJvbW9Db2RlXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtc2hvdy1jaGlsZC1hZ2VzXT1cInNob3dDaGlsZEFnZXNcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1tYXgtY2hpbGRyZW5dPVwibWF4Q2hpbGRyZW5cIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1iYXNlLXVybF09XCJiYXNlVXJsXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdXJsLWNoYWluXT1cInVybENoYWluXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdXJsLWhvdGVsXT1cInVybEhvdGVsXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtYnV0dG9uLXRleHRdPVwiYnV0dG9uVGV4dFwiXG4gICAgICAgID48L2Rpdj5cbiAgICBgLFxufSlcbmV4cG9ydCBjbGFzcyBCYWJ5bG9uQm9va2luZ1dpZGdldENvbXBvbmVudCB7XG4gICAgQFZpZXdDaGlsZCgnd2lkZ2V0Q29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICB3aWRnZXRDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIEBJbnB1dCgpIHdpZGdldElkID0gJ3dpZGdldC1zZWFyY2gnO1xuICAgIEBJbnB1dCgpIGhvdGVsSWQgPSAnYWxlY2FkJztcbiAgICBASW5wdXQoKSB0eXBlOiAnY2hhaW4nIHwgJ2hvdGVsJyB8IHN0cmluZyA9ICdjaGFpbic7XG4gICAgQElucHV0KCkgdGhlbWU6ICdsaWdodCcgfCAnZGFyaycgfCBzdHJpbmcgPSAnbGlnaHQnO1xuICAgIEBJbnB1dCgpIGN1cnJlbmN5ID0gJ0VVUic7XG4gICAgQElucHV0KCkgbG9jYWxlID0gJ2VzLUVTJztcbiAgICBASW5wdXQoKSBsYXlvdXQ6ICdpbmxpbmUnIHwgJ3BvcHVwJyB8IHN0cmluZyA9ICdpbmxpbmUnO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRBZHVsdHMgPSAyO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRDaGlsZHJlbiA9IDA7XG4gICAgQElucHV0KCkgc2hvd1ByaWNlID0gZmFsc2U7XG4gICAgQElucHV0KCkgc2hvd0hvdGVsU2VsZWN0b3IgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHNob3dQcm9tb0NvZGUgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHNob3dDaGlsZEFnZXMgPSB0cnVlO1xuICAgIEBJbnB1dCgpIG1heENoaWxkcmVuID0gMjtcbiAgICBASW5wdXQoKSBiYXNlVXJsPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHVybENoYWluPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHVybEhvdGVsPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIG1vdW50ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwbGF0Zm9ybUlkOiBvYmplY3QsXG4gICAgICAgIHByaXZhdGUgem9uZTogTmdab25lXG4gICAgKSB7XG4gICAgICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIocGxhdGZvcm1JZCkpIHJldHVybjtcblxuICAgICAgICBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tb3VudGVkKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAvLyDirIfvuI8gUE9OIEFRVcONIGxhIFVSTCByZWFsIGRlbCBzY3JpcHQgZGUgV2l0Ym9va2luZ1xuICAgICAgICAgICAgICAgIGF3YWl0IGxvYWRPbmNlKCdodHRwczovL3dpZGdldC1lbmdpbmUuYi1jZG4ubmV0L3dpZGdldC5taW4uanMnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMubW91bnQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdW50KCkge1xuICAgICAgICBpZiAodGhpcy5tb3VudGVkKSByZXR1cm47XG4gICAgICAgIHRoaXMubW91bnRlZCA9IHRydWU7XG5cbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLndpZGdldENvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIC8vIE9wY2nDs24gQSAoc2kgZXhpc3RlKTogaW5pdCBnbG9iYWwgbWFudWFsIDpjb250ZW50UmVmZXJlbmNlW29haWNpdGU6MV17aW5kZXg9MX1cbiAgICAgICAgaWYgKHdpbmRvdy5pbml0aWFsaXplV2lkZ2V0U2VhcmNoKSB7XG4gICAgICAgICAgICB3aW5kb3cuaW5pdGlhbGl6ZVdpZGdldFNlYXJjaCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3BjacOzbiBCOiBjb25zdHJ1Y3RvciA6Y29udGVudFJlZmVyZW5jZVtvYWljaXRlOjJde2luZGV4PTJ9XG4gICAgICAgIGlmICh3aW5kb3cuV2lkZ2V0U2VhcmNoKSB7XG4gICAgICAgICAgICAvLyBTaSB0dSBXaWRnZXRTZWFyY2ggYWNlcHRhIChlbCwgY29uZmlnKSwgYXF1w60gcHVlZGVzIHBhc2FyIGNvbmZpZy5cbiAgICAgICAgICAgIG5ldyB3aW5kb3cuV2lkZ2V0U2VhcmNoKGVsLCB7fSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=