@rosoftlab/core 0.0.100

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. package/README.md +6 -0
  2. package/esm2020/lib/base-components/base-form-edit.component.mjs +242 -0
  3. package/esm2020/lib/base-components/field-error-display/field-error-display.component.mjs +15 -0
  4. package/esm2020/lib/base-components/generic-table/generic-table.component.mjs +431 -0
  5. package/esm2020/lib/base-components/index.mjs +5 -0
  6. package/esm2020/lib/base-components/page-not-found/page-not-found.component.mjs +15 -0
  7. package/esm2020/lib/base-components/searchable-dropdown/searchable-dropdown.component.mjs +231 -0
  8. package/esm2020/lib/base-components/under-construction/under-construction.component.mjs +12 -0
  9. package/esm2020/lib/constants/symbols.mjs +3 -0
  10. package/esm2020/lib/converters/date/date.converter.mjs +12 -0
  11. package/esm2020/lib/decorators/attribute.decorator.mjs +85 -0
  12. package/esm2020/lib/decorators/base-datastore-config.decorator.mjs +7 -0
  13. package/esm2020/lib/decorators/base-model-config.decorator.mjs +10 -0
  14. package/esm2020/lib/decorators/custom.type.decorator.mjs +11 -0
  15. package/esm2020/lib/decorators/grid-layout.decorator.mjs +23 -0
  16. package/esm2020/lib/directives/translated-content.directive.mjs +96 -0
  17. package/esm2020/lib/directives/translated-element.directive.mjs +20 -0
  18. package/esm2020/lib/index.mjs +29 -0
  19. package/esm2020/lib/interfaces/attribute-decorator-options.interface.mjs +2 -0
  20. package/esm2020/lib/interfaces/datastore-config.interface.mjs +2 -0
  21. package/esm2020/lib/interfaces/model-config.interface.mjs +2 -0
  22. package/esm2020/lib/interfaces/overrides.interface.mjs +2 -0
  23. package/esm2020/lib/interfaces/property-converter.interface.mjs +2 -0
  24. package/esm2020/lib/material.mjs +94 -0
  25. package/esm2020/lib/models/base-meta.model.mjs +7 -0
  26. package/esm2020/lib/models/base-query-data.mjs +13 -0
  27. package/esm2020/lib/models/base.model.mjs +171 -0
  28. package/esm2020/lib/models/error-response.model.mjs +9 -0
  29. package/esm2020/lib/models/grid-layout-format.enum.mjs +15 -0
  30. package/esm2020/lib/models/grid-layout.mjs +18 -0
  31. package/esm2020/lib/models/rule.mjs +6 -0
  32. package/esm2020/lib/module.mjs +55 -0
  33. package/esm2020/lib/pipes/Nl2brPipe.pipe.mjs +21 -0
  34. package/esm2020/lib/pipes/input-error.pipe.mjs +37 -0
  35. package/esm2020/lib/providers.mjs +10 -0
  36. package/esm2020/lib/services/base-datastore.service.mjs +333 -0
  37. package/esm2020/lib/services/base.service.mjs +95 -0
  38. package/esm2020/lib/services/dialog.service.mjs +150 -0
  39. package/esm2020/lib/services/grid-layout.service.mjs +21 -0
  40. package/esm2020/lib/services/index.mjs +5 -0
  41. package/esm2020/lib/validators/pattern-validator.mjs +15 -0
  42. package/esm2020/public-api.mjs +12 -0
  43. package/esm2020/rosoftlab-core.mjs +5 -0
  44. package/fesm2015/rosoftlab-core.mjs +2217 -0
  45. package/fesm2015/rosoftlab-core.mjs.map +1 -0
  46. package/fesm2020/rosoftlab-core.mjs +2210 -0
  47. package/fesm2020/rosoftlab-core.mjs.map +1 -0
  48. package/lib/base-components/base-form-edit.component.d.ts +58 -0
  49. package/lib/base-components/field-error-display/field-error-display.component.d.ts +7 -0
  50. package/lib/base-components/generic-table/generic-table.component.d.ts +93 -0
  51. package/lib/base-components/index.d.ts +4 -0
  52. package/lib/base-components/page-not-found/page-not-found.component.d.ts +8 -0
  53. package/lib/base-components/searchable-dropdown/searchable-dropdown.component.d.ts +62 -0
  54. package/lib/base-components/under-construction/under-construction.component.d.ts +6 -0
  55. package/lib/constants/symbols.d.ts +1 -0
  56. package/lib/converters/date/date.converter.d.ts +5 -0
  57. package/lib/decorators/attribute.decorator.d.ts +2 -0
  58. package/lib/decorators/base-datastore-config.decorator.d.ts +1 -0
  59. package/lib/decorators/base-model-config.decorator.d.ts +1 -0
  60. package/lib/decorators/custom.type.decorator.d.ts +1 -0
  61. package/lib/decorators/grid-layout.decorator.d.ts +2 -0
  62. package/lib/directives/translated-content.directive.d.ts +21 -0
  63. package/lib/directives/translated-element.directive.d.ts +10 -0
  64. package/lib/index.d.ts +27 -0
  65. package/lib/interfaces/attribute-decorator-options.interface.d.ts +8 -0
  66. package/lib/interfaces/datastore-config.interface.d.ts +8 -0
  67. package/lib/interfaces/model-config.interface.d.ts +8 -0
  68. package/lib/interfaces/overrides.interface.d.ts +5 -0
  69. package/lib/interfaces/property-converter.interface.d.ts +4 -0
  70. package/lib/material.d.ts +42 -0
  71. package/lib/models/base-meta.model.d.ts +5 -0
  72. package/lib/models/base-query-data.d.ts +7 -0
  73. package/lib/models/base.model.d.ts +33 -0
  74. package/lib/models/error-response.model.d.ts +17 -0
  75. package/lib/models/grid-layout-format.enum.d.ts +12 -0
  76. package/lib/models/grid-layout.d.ts +13 -0
  77. package/lib/models/rule.d.ts +5 -0
  78. package/lib/module.d.ts +14 -0
  79. package/lib/pipes/Nl2brPipe.pipe.d.ts +7 -0
  80. package/lib/pipes/input-error.pipe.d.ts +10 -0
  81. package/lib/providers.d.ts +2 -0
  82. package/lib/services/base-datastore.service.d.ts +45 -0
  83. package/lib/services/base.service.d.ts +26 -0
  84. package/lib/services/dialog.service.d.ts +21 -0
  85. package/lib/services/grid-layout.service.d.ts +9 -0
  86. package/lib/services/index.d.ts +4 -0
  87. package/lib/validators/pattern-validator.d.ts +4 -0
  88. package/package.json +53 -0
  89. package/public-api.d.ts +7 -0
  90. package/rosoftlab-core.d.ts +5 -0
@@ -0,0 +1,231 @@
1
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
+ import { Component, EventEmitter, Input, Optional, Output, Self } from '@angular/core';
3
+ import { FormControl } from '@angular/forms';
4
+ import { Subject } from 'rxjs';
5
+ import { debounceTime, filter, finalize, switchMap, takeUntil, tap } from 'rxjs/operators';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/cdk/a11y";
8
+ import * as i2 from "@angular/forms";
9
+ import * as i3 from "@angular/material/form-field";
10
+ import * as i4 from "@angular/material/button";
11
+ import * as i5 from "@angular/material/icon";
12
+ import * as i6 from "@angular/material/autocomplete";
13
+ import * as i7 from "@angular/material/core";
14
+ import * as i8 from "@angular/material/input";
15
+ import * as i9 from "@angular/common";
16
+ import * as i10 from "@ngx-translate/core";
17
+ export class SearchableDropdownComponent {
18
+ constructor(_focusMonitor, _elementRef, ngControl) {
19
+ this._focusMonitor = _focusMonitor;
20
+ this._elementRef = _elementRef;
21
+ this.ngControl = ngControl;
22
+ this.onChange = (_) => { };
23
+ this.onTouched = () => { };
24
+ this.stateChanges = new Subject();
25
+ this.focused = false;
26
+ this.errorState = false;
27
+ this.id = `rsl-searchable-dropdown-${SearchableDropdownComponent.nextId++}`;
28
+ // label for the search dropdown
29
+ this.label = '';
30
+ //Fields for sorting the API data
31
+ this.sortFields = '';
32
+ // The value used to populate the control value
33
+ this.valueField = 'id';
34
+ // The minumum char for search
35
+ this.minLengthTerm = 3;
36
+ this.modelSelected = new EventEmitter();
37
+ this._required = false;
38
+ this._disabled = false;
39
+ this.showSerach = true;
40
+ this.isLoading = false;
41
+ this.options = [];
42
+ this.filteredOptions = [];
43
+ /** Subject that emits when the component has been destroyed. */
44
+ this._onDestroy = new Subject();
45
+ this.searchControl = new FormControl('');
46
+ _focusMonitor.monitor(_elementRef, true).subscribe(origin => {
47
+ if (this.focused && !origin) {
48
+ this.onTouched();
49
+ }
50
+ this.focused = !!origin;
51
+ this.stateChanges.next();
52
+ });
53
+ if (this.ngControl) {
54
+ this.ngControl.valueAccessor = this;
55
+ }
56
+ }
57
+ get empty() {
58
+ return !this.value;
59
+ }
60
+ get required() { return this._required; }
61
+ set required(value) {
62
+ this._required = coerceBooleanProperty(value);
63
+ this.stateChanges.next();
64
+ }
65
+ get disabled() { return this._disabled; }
66
+ set disabled(value) {
67
+ this._disabled = coerceBooleanProperty(value);
68
+ this.stateChanges.next();
69
+ }
70
+ get value() {
71
+ return this._value;
72
+ }
73
+ set value(value) {
74
+ if (value)
75
+ if (this._value !== value) {
76
+ this.loadModel(value);
77
+ }
78
+ this._value = value;
79
+ this.stateChanges.next();
80
+ }
81
+ ngOnInit() {
82
+ if (!this.displayFields)
83
+ this.displayFields = this.searchFields;
84
+ this.loadModel(this.ngControl.value);
85
+ if (this.preloadElementsCount) {
86
+ this.serviceRef.getAll(1, this.preloadElementsCount).subscribe({
87
+ next: (data) => {
88
+ this.showSerach = false;
89
+ this.options = data.getModels();
90
+ this.filteredOptions = this.options;
91
+ }
92
+ });
93
+ }
94
+ this.searchControl.valueChanges
95
+ .pipe(filter((res) => {
96
+ const result = res !== null && res.length >= this.minLengthTerm;
97
+ if (!result) {
98
+ this.options = [];
99
+ this.filteredOptions = [];
100
+ }
101
+ this.showSerach = !result;
102
+ return result;
103
+ }), debounceTime(300), tap(() => {
104
+ this.filteredOptions = [];
105
+ this.isLoading = true;
106
+ }), switchMap((value) => this.serviceRef
107
+ .getAll(1, 10, this.sortFields, `${this.searchFields.replace(',', '|')}@=*${value}`)
108
+ .pipe(finalize(() => {
109
+ this.isLoading = false;
110
+ }))), takeUntil(this._onDestroy))
111
+ .subscribe((options) => {
112
+ this.filteredOptions = options.getModels();
113
+ });
114
+ }
115
+ onSelected($event) {
116
+ const value = $event.option.value;
117
+ this.searchControl.setValue(value);
118
+ this.modelSelected.emit(value);
119
+ if (this.valueField in value) {
120
+ this.setControlValue(value[this.valueField]);
121
+ }
122
+ }
123
+ setControlValue(value) {
124
+ this.value = value;
125
+ this.ngControl.control.setValue(value);
126
+ }
127
+ displayWith(value) {
128
+ return this.getConcatedFields(value);
129
+ }
130
+ clearSelection() {
131
+ this.modelSelected.emit(null);
132
+ this.setControlValue(null);
133
+ this.searchControl.setValue(null);
134
+ this.filteredOptions = this.options;
135
+ }
136
+ getConcatedFields(option) {
137
+ if (!option)
138
+ return null;
139
+ const filtersArr = this.displayFields.split(',');
140
+ return filtersArr.reduce((acc, cv) => {
141
+ return acc.concat(option[cv] + ' ');
142
+ }, '');
143
+ }
144
+ ngOnDestroy() {
145
+ this.searchControl = null;
146
+ this.stateChanges.complete();
147
+ this._focusMonitor.stopMonitoring(this._elementRef);
148
+ this._onDestroy.next();
149
+ this._onDestroy.complete();
150
+ }
151
+ getSearchText() {
152
+ return `Enter ${this.minLengthTerm} characters to start search`;
153
+ }
154
+ writeValue(model) {
155
+ console.log(model);
156
+ this.value = model;
157
+ }
158
+ registerOnChange(fn) {
159
+ this.onChange = fn;
160
+ }
161
+ registerOnTouched(fn) {
162
+ this.onTouched = fn;
163
+ }
164
+ setDisabledState(isDisabled) {
165
+ this.disabled = isDisabled;
166
+ }
167
+ loadModel(id) {
168
+ //Load the model from API to display the value
169
+ let needLoad = false;
170
+ if (id) {
171
+ if (!this.searchControl.value)
172
+ needLoad = true;
173
+ else {
174
+ if (this.searchControl.value[this.valueField] !== id) {
175
+ needLoad = true;
176
+ }
177
+ }
178
+ }
179
+ if (needLoad) {
180
+ this.serviceRef.get(id).subscribe({
181
+ next: (model) => {
182
+ this.options.push(model);
183
+ this.filteredOptions = this.options;
184
+ this.searchControl.setValue(model);
185
+ }
186
+ });
187
+ }
188
+ }
189
+ }
190
+ SearchableDropdownComponent.nextId = 0;
191
+ SearchableDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: SearchableDropdownComponent, deps: [{ token: i1.FocusMonitor }, { token: i0.ElementRef }, { token: i2.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
192
+ SearchableDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: SearchableDropdownComponent, selector: "rsl-searchable-dropdown", inputs: { label: "label", fControlName: "fControlName", serviceRef: "serviceRef", searchFields: "searchFields", displayFields: "displayFields", sortFields: "sortFields", valueField: "valueField", minLengthTerm: "minLengthTerm", preloadElementsCount: "preloadElementsCount", required: "required", disabled: "disabled", value: "value" }, outputs: { modelSelected: "modelSelected" }, host: { properties: { "class.example-floating": "shouldLabelFloat", "id": "id", "attr.aria-describedby": "describedBy" } }, ngImport: i0, template: "<div class=\"form-group\">\r\n <label>{{label | translate}}</label>\r\n <mat-form-field appearance=\"outline\" fxFlex>\r\n <input matInput [matAutocomplete]=\"auto\" [formControl]=\"searchControl\">\r\n <button *ngIf=\"searchControl.value\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearSelection()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onSelected($event)\"\r\n [displayWith]=\"displayWith.bind(this)\">\r\n <mat-option *ngIf=\"isLoading\">Loading...</mat-option>\r\n <mat-option *ngIf=\"!isLoading && filteredOptions.length == 0 && !showSerach\" disabled>Not found</mat-option>\r\n <mat-option *ngIf=\"showSerach\" disabled>{{getSearchText()}}</mat-option>\r\n <ng-container *ngIf=\"!isLoading && filteredOptions.length > 0\">\r\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option\">\r\n <span><b>{{getConcatedFields(option)}}</b></span>\r\n </mat-option>\r\n </ng-container>\r\n\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n</div>", components: [{ type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.MatSuffix, selector: "[matSuffix]" }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "translate": i10.TranslatePipe } });
193
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: SearchableDropdownComponent, decorators: [{
194
+ type: Component,
195
+ args: [{ selector: 'rsl-searchable-dropdown', host: {
196
+ '[class.example-floating]': 'shouldLabelFloat',
197
+ '[id]': 'id',
198
+ '[attr.aria-describedby]': 'describedBy',
199
+ }, template: "<div class=\"form-group\">\r\n <label>{{label | translate}}</label>\r\n <mat-form-field appearance=\"outline\" fxFlex>\r\n <input matInput [matAutocomplete]=\"auto\" [formControl]=\"searchControl\">\r\n <button *ngIf=\"searchControl.value\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearSelection()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onSelected($event)\"\r\n [displayWith]=\"displayWith.bind(this)\">\r\n <mat-option *ngIf=\"isLoading\">Loading...</mat-option>\r\n <mat-option *ngIf=\"!isLoading && filteredOptions.length == 0 && !showSerach\" disabled>Not found</mat-option>\r\n <mat-option *ngIf=\"showSerach\" disabled>{{getSearchText()}}</mat-option>\r\n <ng-container *ngIf=\"!isLoading && filteredOptions.length > 0\">\r\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option\">\r\n <span><b>{{getConcatedFields(option)}}</b></span>\r\n </mat-option>\r\n </ng-container>\r\n\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n</div>" }]
200
+ }], ctorParameters: function () { return [{ type: i1.FocusMonitor }, { type: i0.ElementRef }, { type: i2.NgControl, decorators: [{
201
+ type: Optional
202
+ }, {
203
+ type: Self
204
+ }] }]; }, propDecorators: { label: [{
205
+ type: Input
206
+ }], fControlName: [{
207
+ type: Input
208
+ }], serviceRef: [{
209
+ type: Input
210
+ }], searchFields: [{
211
+ type: Input
212
+ }], displayFields: [{
213
+ type: Input
214
+ }], sortFields: [{
215
+ type: Input
216
+ }], valueField: [{
217
+ type: Input
218
+ }], minLengthTerm: [{
219
+ type: Input
220
+ }], preloadElementsCount: [{
221
+ type: Input
222
+ }], modelSelected: [{
223
+ type: Output
224
+ }], required: [{
225
+ type: Input
226
+ }], disabled: [{
227
+ type: Input
228
+ }], value: [{
229
+ type: Input
230
+ }] } });
231
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoYWJsZS1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvY29yZS9zcmMvbGliL2Jhc2UtY29tcG9uZW50cy9zZWFyY2hhYmxlLWRyb3Bkb3duL3NlYXJjaGFibGUtZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcm9zb2Z0bGFiL2NvcmUvc3JjL2xpYi9iYXNlLWNvbXBvbmVudHMvc2VhcmNoYWJsZS1kcm9wZG93bi9zZWFyY2hhYmxlLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEgsT0FBTyxFQUF5QyxXQUFXLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7QUFlM0YsTUFBTSxPQUFPLDJCQUEyQjtJQXFGdEMsWUFDVSxhQUEyQixFQUMzQixXQUFvQyxFQUNqQixTQUFvQjtRQUZ2QyxrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUMzQixnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7UUFDakIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQXRGakQsYUFBUSxHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDM0IsY0FBUyxHQUFHLEdBQUcs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QXlCLFFBRzdCO3dCQUNKLDBCQUEwQixFQUFFLGtCQUFrQjt3QkFDOUMsTUFBTSxFQUFFLElBQUk7d0JBQ1oseUJBQXlCLEVBQUUsYUFBYTtxQkFDekM7OzBCQTBGRSxRQUFROzswQkFBSSxJQUFJOzRDQTlFVixLQUFLO3NCQUFiLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSztnQkFHRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTTtnQkFTSCxRQUFRO3NCQURYLEtBQUs7Z0JBU0YsUUFBUTtzQkFEWCxLQUFLO2dCQVdGLEtBQUs7c0JBRFIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvY3VzTW9uaXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcclxuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBmaW5hbGl6ZSwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQmFzZVF1ZXJ5RGF0YSB9IGZyb20gJy4uLy4uL21vZGVscy9iYXNlLXF1ZXJ5LWRhdGEnO1xyXG5pbXBvcnQgeyBCYXNlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvYmFzZS5tb2RlbCc7XHJcbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYmFzZS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnNsLXNlYXJjaGFibGUtZHJvcGRvd24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2hhYmxlLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcclxuICAvLyBzdHlsZVVybHM6IFsnLi9zZWFyY2hhYmxlLWRyb3Bkb3duLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgaG9zdDoge1xyXG4gICAgJ1tjbGFzcy5leGFtcGxlLWZsb2F0aW5nXSc6ICdzaG91bGRMYWJlbEZsb2F0JyxcclxuICAgICdbaWRdJzogJ2lkJyxcclxuICAgICdbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XSc6ICdkZXNjcmliZWRCeScsXHJcbiAgfVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2VhcmNoYWJsZURyb3Bkb3duQ29tcG9uZW50PFQgZXh0ZW5kcyBCYXNlTW9kZWw+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICBzdGF0aWMgbmV4dElkID0gMDtcclxuICBvbkNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcclxuICBvblRvdWNoZWQgPSAoKSA9PiB7IH07XHJcbiAgc3RhdGVDaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBmb2N1c2VkID0gZmFsc2U7XHJcbiAgZXJyb3JTdGF0ZSA9IGZhbHNlO1xyXG4gIGlkID0gYHJzbC1zZWFyY2hhYmxlLWRyb3Bkb3duLSR7U2VhcmNoYWJsZURyb3Bkb3duQ29tcG9uZW50Lm5leHRJZCsrfWA7XHJcblxyXG4gIC8vIGxhYmVsIGZvciB0aGUgc2VhcmNoIGRyb3Bkb3duXHJcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvL05hbWUgb2YgdGhlIGZvcm0gY29udHJvbFxyXG4gIEBJbnB1dCgpIGZDb250cm9sTmFtZTogc3RyaW5nO1xyXG5cclxuICAvL1JlZmVyZW5jZSBvZiB0aGUgc2VydmljZVxyXG4gIEBJbnB1dCgpIHNlcnZpY2VSZWY6IEJhc2VTZXJ2aWNlPFQ+O1xyXG5cclxuICAvL0ZpZWxkcyBmb3IgZmlsdGVyaW5nXHJcbiAgQElucHV0KCkgc2VhcmNoRmllbGRzOiBzdHJpbmc7XHJcblxyXG4gIC8vRmllbGRzIGZvciBkaXNwbGF5IFxyXG4gIEBJbnB1dCgpIGRpc3BsYXlGaWVsZHM6IHN0cmluZztcclxuXHJcbiAgLy9GaWVsZHMgZm9yIHNvcnRpbmcgdGhlIEFQSSBkYXRhXHJcbiAgQElucHV0KCkgc29ydEZpZWxkczogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8vIFRoZSB2YWx1ZSB1c2VkIHRvIHBvcHVsYXRlIHRoZSBjb250cm9sIHZhbHVlXHJcbiAgQElucHV0KCkgdmFsdWVGaWVsZDogc3RyaW5nID0gJ2lkJztcclxuXHJcbiAgLy8gVGhlIG1pbnVtdW0gY2hhciBmb3Igc2VhcmNoXHJcbiAgQElucHV0KCkgbWluTGVuZ3RoVGVybTogbnVtYmVyID0gMztcclxuXHJcbiAgLy8gVGhlIHByZWxvYWQgeCBlbGVtZW50c1xyXG4gIEBJbnB1dCgpIHByZWxvYWRFbGVtZW50c0NvdW50OiBudW1iZXI7XHJcblxyXG4gIEBPdXRwdXQoKSBtb2RlbFNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8QmFzZU1vZGVsPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcblxyXG4gIGdldCBlbXB0eSgpIHtcclxuICAgIHJldHVybiAhdGhpcy52YWx1ZTtcclxuICB9XHJcblxyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX3JlcXVpcmVkOyB9XHJcbiAgc2V0IHJlcXVpcmVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3JlcXVpcmVkID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7IH1cclxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcclxuXHJcblxyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCB2YWx1ZSgpOiBhbnkgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcclxuICB9XHJcbiAgc2V0IHZhbHVlKHZhbHVlOiBhbnkgfCBudWxsKSB7XHJcbiAgICBpZiAodmFsdWUpXHJcbiAgICAgIGlmICh0aGlzLl92YWx1ZSAhPT0gdmFsdWUpIHtcclxuICAgICAgICB0aGlzLmxvYWRNb2RlbCh2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3ZhbHVlOiBhbnk7XHJcbiAgLy8gU2VhcmNoIGZvcm0gY29udHJvbFxyXG4gIHNlYXJjaENvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcclxuXHJcbiAgc2hvd1NlcmFjaCA9IHRydWU7XHJcbiAgaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgb3B0aW9ucyA9IFtdO1xyXG4gIGZpbHRlcmVkT3B0aW9ucyA9IFtdO1xyXG4gIC8qKiBTdWJqZWN0IHRoYXQgZW1pdHMgd2hlbiB0aGUgY29tcG9uZW50IGhhcyBiZWVuIGRlc3Ryb3llZC4gKi9cclxuICBwcm90ZWN0ZWQgX29uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXHJcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcclxuICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sXHJcbiAgKSB7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcclxuICAgIF9mb2N1c01vbml0b3IubW9uaXRvcihfZWxlbWVudFJlZiwgdHJ1ZSkuc3Vic2NyaWJlKG9yaWdpbiA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmZvY3VzZWQgJiYgIW9yaWdpbikge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb2N1c2VkID0gISFvcmlnaW47XHJcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xyXG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICAgIGlmICghdGhpcy5kaXNwbGF5RmllbGRzKVxyXG4gICAgICB0aGlzLmRpc3BsYXlGaWVsZHMgPSB0aGlzLnNlYXJjaEZpZWxkcztcclxuXHJcbiAgICB0aGlzLmxvYWRNb2RlbCh0aGlzLm5nQ29udHJvbC52YWx1ZSlcclxuXHJcbiAgICBpZiAodGhpcy5wcmVsb2FkRWxlbWVudHNDb3VudCkge1xyXG4gICAgICB0aGlzLnNlcnZpY2VSZWYuZ2V0QWxsKDEsIHRoaXMucHJlbG9hZEVsZW1lbnRzQ291bnQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGRhdGE6IEJhc2VRdWVyeURhdGE8VD4pID0+IHtcclxuICAgICAgICAgIHRoaXMuc2hvd1NlcmFjaCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zID0gZGF0YS5nZXRNb2RlbHMoKTtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlYXJjaENvbnRyb2wudmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcigocmVzKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXMgIT09IG51bGwgJiYgcmVzLmxlbmd0aCA+PSB0aGlzLm1pbkxlbmd0aFRlcm07XHJcbiAgICAgICAgICBpZiAoIXJlc3VsdCkge1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuc2hvd1NlcmFjaCA9ICFyZXN1bHQ7XHJcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGRlYm91bmNlVGltZSgzMDApLFxyXG4gICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgodmFsdWU6IHN0cmluZykgPT5cclxuICAgICAgICAgIHRoaXMuc2VydmljZVJlZlxyXG4gICAgICAgICAgICAuZ2V0QWxsKDEsIDEwLCB0aGlzLnNvcnRGaWVsZHMsIGAke3RoaXMuc2VhcmNoRmllbGRzLnJlcGxhY2UoJywnLCAnfCcpfUA9KiR7dmFsdWV9YClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKSxcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKG9wdGlvbnM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gb3B0aW9ucy5nZXRNb2RlbHMoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGVkKCRldmVudCkge1xyXG4gICAgY29uc3QgdmFsdWUgPSAkZXZlbnQub3B0aW9uLnZhbHVlO1xyXG4gICAgdGhpcy5zZWFyY2hDb250cm9sLnNldFZhbHVlKHZhbHVlKTtcclxuICAgIHRoaXMubW9kZWxTZWxlY3RlZC5lbWl0KHZhbHVlKTtcclxuICAgIGlmICh0aGlzLnZhbHVlRmllbGQgaW4gdmFsdWUpIHtcclxuICAgICAgdGhpcy5zZXRDb250cm9sVmFsdWUodmFsdWVbdGhpcy52YWx1ZUZpZWxkXSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuICBzZXRDb250cm9sVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgfVxyXG4gIGRpc3BsYXlXaXRoKHZhbHVlOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmdldENvbmNhdGVkRmllbGRzKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGNsZWFyU2VsZWN0aW9uKCkge1xyXG4gICAgdGhpcy5tb2RlbFNlbGVjdGVkLmVtaXQobnVsbCk7XHJcbiAgICB0aGlzLnNldENvbnRyb2xWYWx1ZShudWxsKTtcclxuICAgIHRoaXMuc2VhcmNoQ29udHJvbC5zZXRWYWx1ZShudWxsKTtcclxuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29uY2F0ZWRGaWVsZHMob3B0aW9uKTogc3RyaW5nIHtcclxuICAgIGlmICghb3B0aW9uKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IGZpbHRlcnNBcnIgPSB0aGlzLmRpc3BsYXlGaWVsZHMuc3BsaXQoJywnKTtcclxuICAgIHJldHVybiBmaWx0ZXJzQXJyLnJlZHVjZSgoYWNjLCBjdikgPT4ge1xyXG4gICAgICByZXR1cm4gYWNjLmNvbmNhdChvcHRpb25bY3ZdICsgJyAnKTtcclxuICAgIH0sICcnKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5zZWFyY2hDb250cm9sID0gbnVsbDtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZik7XHJcbiAgICB0aGlzLl9vbkRlc3Ryb3kubmV4dCgpO1xyXG4gICAgdGhpcy5fb25EZXN0cm95LmNvbXBsZXRlKCk7XHJcbiAgfVxyXG4gIGdldFNlYXJjaFRleHQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgRW50ZXIgJHt0aGlzLm1pbkxlbmd0aFRlcm19IGNoYXJhY3RlcnMgdG8gc3RhcnQgc2VhcmNoYDtcclxuXHJcbiAgfVxyXG4gIHdyaXRlVmFsdWUobW9kZWw6IFQgfCBudWxsKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhtb2RlbCk7XHJcbiAgICB0aGlzLnZhbHVlID0gbW9kZWw7XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxuICBwcml2YXRlIGxvYWRNb2RlbChpZDogc3RyaW5nKSB7XHJcbiAgICAvL0xvYWQgdGhlIG1vZGVsIGZyb20gQVBJIHRvIGRpc3BsYXkgdGhlIHZhbHVlXHJcbiAgICBsZXQgbmVlZExvYWQgPSBmYWxzZTtcclxuICAgIGlmIChpZCkge1xyXG4gICAgICBpZiAoIXRoaXMuc2VhcmNoQ29udHJvbC52YWx1ZSlcclxuICAgICAgICBuZWVkTG9hZCA9IHRydWVcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoQ29udHJvbC52YWx1ZVt0aGlzLnZhbHVlRmllbGRdICE9PSBpZCkge1xyXG4gICAgICAgICAgbmVlZExvYWQgPSB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAobmVlZExvYWQpIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlUmVmLmdldChpZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAobW9kZWw6IFQpID0+IHtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5wdXNoKG1vZGVsKTtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hDb250cm9sLnNldFZhbHVlKG1vZGVsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgPGxhYmVsPnt7bGFiZWwgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgZnhGbGV4PlxyXG4gICAgPGlucHV0IG1hdElucHV0IFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiIFtmb3JtQ29udHJvbF09XCJzZWFyY2hDb250cm9sXCI+XHJcbiAgICA8YnV0dG9uICpuZ0lmPVwic2VhcmNoQ29udHJvbC52YWx1ZVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIkNsZWFyXCIgKGNsaWNrKT1cImNsZWFyU2VsZWN0aW9uKClcIj5cclxuICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiAob3B0aW9uU2VsZWN0ZWQpPVwib25TZWxlY3RlZCgkZXZlbnQpXCJcclxuICAgICAgW2Rpc3BsYXlXaXRoXT1cImRpc3BsYXlXaXRoLmJpbmQodGhpcylcIj5cclxuICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCJpc0xvYWRpbmdcIj5Mb2FkaW5nLi4uPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cIiFpc0xvYWRpbmcgJiYgZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PSAwICYmICFzaG93U2VyYWNoXCIgZGlzYWJsZWQ+Tm90IGZvdW5kPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cInNob3dTZXJhY2hcIiBkaXNhYmxlZD57e2dldFNlYXJjaFRleHQoKX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9hZGluZyAmJiBmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvblwiPlxyXG4gICAgICAgICAgPHNwYW4+PGI+e3tnZXRDb25jYXRlZEZpZWxkcyhvcHRpb24pfX08L2I+PC9zcGFuPlxyXG4gICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcbjwvZGl2PiJdfQ==
@@ -0,0 +1,12 @@
1
+ import { Component } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class UnderConstructionComponent {
4
+ constructor() { }
5
+ }
6
+ UnderConstructionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: UnderConstructionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7
+ UnderConstructionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: UnderConstructionComponent, selector: "rsl-under-construction", ngImport: i0, template: "<div class=\"forms-view-container\">\n <div class=\"under-construction-view-container\">\n Page under construction\n </div>\n</div>", styles: [".under-construction-view-container{height:calc(100vh - 250px);margin:60px 0 0;padding:0;display:flex;justify-content:center;align-items:center;box-sizing:border-box;font-size:1.8em;line-height:1.3em;font-weight:300;color:#58585b;text-align:center}\n"] });
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: UnderConstructionComponent, decorators: [{
9
+ type: Component,
10
+ args: [{ selector: 'rsl-under-construction', template: "<div class=\"forms-view-container\">\n <div class=\"under-construction-view-container\">\n Page under construction\n </div>\n</div>", styles: [".under-construction-view-container{height:calc(100vh - 250px);margin:60px 0 0;padding:0;display:flex;justify-content:center;align-items:center;box-sizing:border-box;font-size:1.8em;line-height:1.3em;font-weight:300;color:#58585b;text-align:center}\n"] }]
11
+ }], ctorParameters: function () { return []; } });
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5kZXItY29uc3RydWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jvc29mdGxhYi9jb3JlL3NyYy9saWIvYmFzZS1jb21wb25lbnRzL3VuZGVyLWNvbnN0cnVjdGlvbi91bmRlci1jb25zdHJ1Y3Rpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcm9zb2Z0bGFiL2NvcmUvc3JjL2xpYi9iYXNlLWNvbXBvbmVudHMvdW5kZXItY29uc3RydWN0aW9uL3VuZGVyLWNvbnN0cnVjdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU8xQyxNQUFNLE9BQU8sMEJBQTBCO0lBRXJDLGdCQUFnQixDQUFDOzt1SEFGTiwwQkFBMEI7MkdBQTFCLDBCQUEwQiw4RENQdkMsMElBSU07MkZER08sMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdyc2wtdW5kZXItY29uc3RydWN0aW9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdW5kZXItY29uc3RydWN0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi91bmRlci1jb25zdHJ1Y3Rpb24uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVW5kZXJDb25zdHJ1Y3Rpb25Db21wb25lbnQge1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJmb3Jtcy12aWV3LWNvbnRhaW5lclwiPlxuICA8ZGl2IGNsYXNzPVwidW5kZXItY29uc3RydWN0aW9uLXZpZXctY29udGFpbmVyXCI+XG4gICAgUGFnZSB1bmRlciBjb25zdHJ1Y3Rpb25cbiAgPC9kaXY+XG48L2Rpdj4iXX0=
@@ -0,0 +1,3 @@
1
+ // tslint:disable-next-line:variable-name
2
+ export const AttributeMetadata = Symbol('AttributeMetadata');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ltYm9scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jvc29mdGxhYi9jb3JlL3NyYy9saWIvY29uc3RhbnRzL3N5bWJvbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseUNBQXlDO0FBQ3pDLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFRLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcbmV4cG9ydCBjb25zdCBBdHRyaWJ1dGVNZXRhZGF0YTogYW55ID0gU3ltYm9sKCdBdHRyaWJ1dGVNZXRhZGF0YScpO1xuIl19
@@ -0,0 +1,12 @@
1
+ import { parseISO } from 'date-fns';
2
+ export class DateConverter {
3
+ mask(value) {
4
+ const d = parseISO(value);
5
+ return d;
6
+ }
7
+ unmask(value) {
8
+ // const result = format(value, 'YYYY-MM-DDTHH:mm:ssZ');
9
+ return value;
10
+ }
11
+ }
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5jb252ZXJ0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvY29yZS9zcmMvbGliL2NvbnZlcnRlcnMvZGF0ZS9kYXRlLmNvbnZlcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUduRCxNQUFNLE9BQU8sYUFBYTtJQUN4QixJQUFJLENBQUMsS0FBVTtRQUNiLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDRCxNQUFNLENBQUMsS0FBVTtRQUNmLHdEQUF3RDtRQUN4RCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcm1hdCwgcGFyc2UsIHBhcnNlSVNPIH0gZnJvbSAnZGF0ZS1mbnMnO1xyXG5pbXBvcnQgeyBQcm9wZXJ0eUNvbnZlcnRlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcHJvcGVydHktY29udmVydGVyLmludGVyZmFjZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgRGF0ZUNvbnZlcnRlciBpbXBsZW1lbnRzIFByb3BlcnR5Q29udmVydGVyIHtcclxuICBtYXNrKHZhbHVlOiBhbnkpIHtcclxuICAgIGNvbnN0IGQgPSBwYXJzZUlTTyh2YWx1ZSk7XHJcbiAgICByZXR1cm4gZDtcclxuICB9XHJcbiAgdW5tYXNrKHZhbHVlOiBhbnkpIHtcclxuICAgIC8vIGNvbnN0IHJlc3VsdCA9IGZvcm1hdCh2YWx1ZSwgJ1lZWVktTU0tRERUSEg6bW06c3NaJyk7XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,85 @@
1
+ import { AttributeMetadata } from '../constants/symbols';
2
+ import { DateConverter } from '../converters/date/date.converter';
3
+ export function Attribute(options = {}) {
4
+ return (target, propertyName) => {
5
+ const converter = (dataType, value, forSerialisation = false) => {
6
+ let attrConverter;
7
+ if (dataType) {
8
+ if (options.converter) {
9
+ attrConverter = options.converter;
10
+ }
11
+ else if (dataType === Date) {
12
+ attrConverter = new DateConverter();
13
+ }
14
+ else {
15
+ const datatype = new dataType();
16
+ if (datatype.mask && datatype.unmask) {
17
+ attrConverter = datatype;
18
+ }
19
+ }
20
+ if (attrConverter) {
21
+ if (!forSerialisation) {
22
+ return attrConverter.mask(value);
23
+ }
24
+ return attrConverter.unmask(value);
25
+ }
26
+ }
27
+ return value;
28
+ };
29
+ const saveAnnotations = () => {
30
+ const metadata = Reflect.getMetadata('Attribute', target) || {};
31
+ metadata[propertyName] = {
32
+ marked: true
33
+ };
34
+ Reflect.defineMetadata('Attribute', metadata, target);
35
+ const mappingMetadata = Reflect.getMetadata('AttributeMapping', target) || {};
36
+ const serializedPropertyName = options.serializedName !== undefined ? options.serializedName : propertyName;
37
+ mappingMetadata[serializedPropertyName] = propertyName;
38
+ Reflect.defineMetadata('AttributeMapping', mappingMetadata, target);
39
+ const requiredMetadata = Reflect.getMetadata('AttributeRequired', target) || {};
40
+ requiredMetadata[serializedPropertyName] = options.required !== undefined ? options.required : false;
41
+ Reflect.defineMetadata('AttributeRequired', requiredMetadata, target);
42
+ const defaultMetadata = Reflect.getMetadata('AttributedefaultValue', target) || {};
43
+ defaultMetadata[serializedPropertyName] = options.defaultValue !== undefined ? options.defaultValue : null;
44
+ Reflect.defineMetadata('AttributedefaultValue', defaultMetadata, target);
45
+ const formSubGroupMetadata = Reflect.getMetadata('AttributeformSubGroup', target) || {};
46
+ formSubGroupMetadata[serializedPropertyName] = options.formSubGroup !== undefined ? options.formSubGroup : null;
47
+ Reflect.defineMetadata('AttributeformSubGroup', formSubGroupMetadata, target);
48
+ };
49
+ const setMetadata = (hasDirtyAttributes, instance, oldValue, newValue, isNew) => {
50
+ const targetType = Reflect.getMetadata('design:type', target, propertyName);
51
+ if (!instance[AttributeMetadata]) {
52
+ instance[AttributeMetadata] = {};
53
+ }
54
+ const propertyHasDirtyAttributes = typeof oldValue === 'undefined' && !isNew ? false : hasDirtyAttributes;
55
+ instance[AttributeMetadata][propertyName] = {
56
+ newValue,
57
+ oldValue,
58
+ serializedName: options.serializedName,
59
+ hasDirtyAttributes: propertyHasDirtyAttributes,
60
+ serialisationValue: converter(targetType, newValue, true)
61
+ };
62
+ };
63
+ const getter = function () {
64
+ return this['_' + propertyName];
65
+ };
66
+ const setter = function (newVal) {
67
+ const targetType = Reflect.getMetadata('design:type', target, propertyName);
68
+ const convertedValue = converter(targetType, newVal);
69
+ if (convertedValue !== this['_' + propertyName]) {
70
+ setMetadata(true, this, this['_' + propertyName], newVal, !this.id);
71
+ this['_' + propertyName] = convertedValue;
72
+ }
73
+ };
74
+ if (delete target[propertyName]) {
75
+ saveAnnotations();
76
+ Object.defineProperty(target, propertyName, {
77
+ get: getter,
78
+ set: setter,
79
+ enumerable: true,
80
+ configurable: true
81
+ });
82
+ }
83
+ };
84
+ }
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLmRlY29yYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jvc29mdGxhYi9jb3JlL3NyYy9saWIvZGVjb3JhdG9ycy9hdHRyaWJ1dGUuZGVjb3JhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUdsRSxNQUFNLFVBQVUsU0FBUyxDQUFDLFVBQXFDLEVBQUU7SUFDL0QsT0FBTyxDQUFDLE1BQVcsRUFBRSxZQUFvQixFQUFFLEVBQUU7UUFFM0MsTUFBTSxTQUFTLEdBQUcsQ0FBQyxRQUFhLEVBQUUsS0FBVSxFQUFFLGdCQUFnQixHQUFHLEtBQUssRUFBTyxFQUFFO1lBQzdFLElBQUksYUFBYSxDQUFDO1lBQ2xCLElBQUksUUFBUSxFQUFFO2dCQUNaLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRTtvQkFDckIsYUFBYSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7aUJBQ25DO3FCQUFNLElBQUksUUFBUSxLQUFLLElBQUksRUFBRTtvQkFDNUIsYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7aUJBQ3JDO3FCQUFNO29CQUNMLE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7b0JBRWhDLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFO3dCQUNwQyxhQUFhLEdBQUcsUUFBUSxDQUFDO3FCQUMxQjtpQkFDRjtnQkFFRCxJQUFJLGFBQWEsRUFBRTtvQkFDakIsSUFBSSxDQUFDLGdCQUFnQixFQUFFO3dCQUNyQixPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQ2xDO29CQUNELE9BQU8sYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FB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ZGF0YSc7XHJcbmltcG9ydCB7IEF0dHJpYnV0ZU1ldGFkYXRhIH0gZnJvbSAnLi4vY29uc3RhbnRzL3N5bWJvbHMnO1xyXG5pbXBvcnQgeyBEYXRlQ29udmVydGVyIH0gZnJvbSAnLi4vY29udmVydGVycy9kYXRlL2RhdGUuY29udmVydGVyJztcclxuaW1wb3J0IHsgQXR0cmlidXRlRGVjb3JhdG9yT3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMvYXR0cmlidXRlLWRlY29yYXRvci1vcHRpb25zLmludGVyZmFjZSc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQXR0cmlidXRlKG9wdGlvbnM6IEF0dHJpYnV0ZURlY29yYXRvck9wdGlvbnMgPSB7fSk6IFByb3BlcnR5RGVjb3JhdG9yIHtcclxuICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eU5hbWU6IHN0cmluZykgPT4ge1xyXG5cclxuICAgIGNvbnN0IGNvbnZlcnRlciA9IChkYXRhVHlwZTogYW55LCB2YWx1ZTogYW55LCBmb3JTZXJpYWxpc2F0aW9uID0gZmFsc2UpOiBhbnkgPT4ge1xyXG4gICAgICBsZXQgYXR0ckNvbnZlcnRlcjtcclxuICAgICAgaWYgKGRhdGFUeXBlKSB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuY29udmVydGVyKSB7XHJcbiAgICAgICAgICBhdHRyQ29udmVydGVyID0gb3B0aW9ucy5jb252ZXJ0ZXI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhVHlwZSA9PT0gRGF0ZSkge1xyXG4gICAgICAgICAgYXR0ckNvbnZlcnRlciA9IG5ldyBEYXRlQ29udmVydGVyKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGRhdGF0eXBlID0gbmV3IGRhdGFUeXBlKCk7XHJcblxyXG4gICAgICAgICAgaWYgKGRhdGF0eXBlLm1hc2sgJiYgZGF0YXR5cGUudW5tYXNrKSB7XHJcbiAgICAgICAgICAgIGF0dHJDb252ZXJ0ZXIgPSBkYXRhdHlwZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChhdHRyQ29udmVydGVyKSB7XHJcbiAgICAgICAgICBpZiAoIWZvclNlcmlhbGlzYXRpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGF0dHJDb252ZXJ0ZXIubWFzayh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gYXR0ckNvbnZlcnRlci51bm1hc2sodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHNhdmVBbm5vdGF0aW9ucyA9ICgpID0+IHtcclxuICAgICAgY29uc3QgbWV0YWRhdGEgPSBSZWZsZWN0LmdldE1ldGFkYXRhKCdBdHRyaWJ1dGUnLCB0YXJnZXQpIHx8IHt9O1xyXG5cclxuICAgICAgbWV0YWRhdGFbcHJvcGVydHlOYW1lXSA9IHtcclxuICAgICAgICBtYXJrZWQ6IHRydWVcclxuICAgICAgfTtcclxuXHJcbiAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoJ0F0dHJpYnV0ZScsIG1ldGFkYXRhLCB0YXJnZXQpO1xyXG5cclxuICAgICAgY29uc3QgbWFwcGluZ01ldGFkYXRhID0gUmVmbGVjdC5nZXRNZXRhZGF0YSgnQXR0cmlidXRlTWFwcGluZycsIHRhcmdldCkgfHwge307XHJcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRQcm9wZXJ0eU5hbWUgPSBvcHRpb25zLnNlcmlhbGl6ZWROYW1lICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLnNlcmlhbGl6ZWROYW1lIDogcHJvcGVydHlOYW1lO1xyXG4gICAgICBtYXBwaW5nTWV0YWRhdGFbc2VyaWFsaXplZFByb3BlcnR5TmFtZV0gPSBwcm9wZXJ0eU5hbWU7XHJcbiAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoJ0F0dHJpYnV0ZU1hcHBpbmcnLCBtYXBwaW5nTWV0YWRhdGEsIHRhcmdldCk7XHJcblxyXG4gICAgICBjb25zdCByZXF1aXJlZE1ldGFkYXRhID0gUmVmbGVjdC5nZXRNZXRhZGF0YSgnQXR0cmlidXRlUmVxdWlyZWQnLCB0YXJnZXQpIHx8IHt9O1xyXG4gICAgICByZXF1aXJlZE1ldGFkYXRhW3NlcmlhbGl6ZWRQcm9wZXJ0eU5hbWVdID0gb3B0aW9ucy5yZXF1aXJlZCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5yZXF1aXJlZCA6IGZhbHNlO1xyXG4gICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKCdBdHRyaWJ1dGVSZXF1aXJlZCcsIHJlcXVpcmVkTWV0YWRhdGEsIHRhcmdldCk7XHJcblxyXG4gICAgICBjb25zdCBkZWZhdWx0TWV0YWRhdGEgPSBSZWZsZWN0LmdldE1ldGFkYXRhKCdBdHRyaWJ1dGVkZWZhdWx0VmFsdWUnLCB0YXJnZXQpIHx8IHt9O1xyXG4gICAgICBkZWZhdWx0TWV0YWRhdGFbc2VyaWFsaXplZFByb3BlcnR5TmFtZV0gPSBvcHRpb25zLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5kZWZhdWx0VmFsdWUgOiBudWxsO1xyXG4gICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKCdBdHRyaWJ1dGVkZWZhdWx0VmFsdWUnLCBkZWZhdWx0TWV0YWRhdGEsIHRhcmdldCk7XHJcblxyXG4gICAgICBjb25zdCBmb3JtU3ViR3JvdXBNZXRhZGF0YSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoJ0F0dHJpYnV0ZWZvcm1TdWJHcm91cCcsIHRhcmdldCkgfHwge307XHJcbiAgICAgIGZvcm1TdWJHcm91cE1ldGFkYXRhW3NlcmlhbGl6ZWRQcm9wZXJ0eU5hbWVdID0gb3B0aW9ucy5mb3JtU3ViR3JvdXAgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuZm9ybVN1Ykdyb3VwIDogbnVsbDtcclxuICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YSgnQXR0cmlidXRlZm9ybVN1Ykdyb3VwJywgZm9ybVN1Ykdyb3VwTWV0YWRhdGEsIHRhcmdldCk7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBzZXRNZXRhZGF0YSA9IChcclxuICAgICAgaGFzRGlydHlBdHRyaWJ1dGVzOiBib29sZWFuLFxyXG4gICAgICBpbnN0YW5jZTogYW55LFxyXG4gICAgICBvbGRWYWx1ZTogYW55LFxyXG4gICAgICBuZXdWYWx1ZTogYW55LFxyXG4gICAgICBpc05ldzogYm9vbGVhblxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGNvbnN0IHRhcmdldFR5cGUgPSBSZWZsZWN0LmdldE1ldGFkYXRhKCdkZXNpZ246dHlwZScsIHRhcmdldCwgcHJvcGVydHlOYW1lKTtcclxuXHJcbiAgICAgIGlmICghaW5zdGFuY2VbQXR0cmlidXRlTWV0YWRhdGFdKSB7XHJcbiAgICAgICAgaW5zdGFuY2VbQXR0cmlidXRlTWV0YWRhdGFdID0ge307XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHByb3BlcnR5SGFzRGlydHlBdHRyaWJ1dGVzID0gdHlwZW9mIG9sZFZhbHVlID09PSAndW5kZWZpbmVkJyAmJiAhaXNOZXcgPyBmYWxzZSA6IGhhc0RpcnR5QXR0cmlidXRlcztcclxuXHJcbiAgICAgIGluc3RhbmNlW0F0dHJpYnV0ZU1ldGFkYXRhXVtwcm9wZXJ0eU5hbWVdID0ge1xyXG4gICAgICAgIG5ld1ZhbHVlLFxyXG4gICAgICAgIG9sZFZhbHVlLFxyXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBvcHRpb25zLnNlcmlhbGl6ZWROYW1lLFxyXG4gICAgICAgIGhhc0RpcnR5QXR0cmlidXRlczogcHJvcGVydHlIYXNEaXJ0eUF0dHJpYnV0ZXMsXHJcbiAgICAgICAgc2VyaWFsaXNhdGlvblZhbHVlOiBjb252ZXJ0ZXIodGFyZ2V0VHlwZSwgbmV3VmFsdWUsIHRydWUpXHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGdldHRlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIHRoaXNbJ18nICsgKHByb3BlcnR5TmFtZSBhcyBzdHJpbmcpXTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc2V0dGVyID0gZnVuY3Rpb24gKG5ld1ZhbDogYW55KSB7XHJcbiAgICAgIGNvbnN0IHRhcmdldFR5cGUgPSBSZWZsZWN0LmdldE1ldGFkYXRhKCdkZXNpZ246dHlwZScsIHRhcmdldCwgcHJvcGVydHlOYW1lKTtcclxuICAgICAgY29uc3QgY29udmVydGVkVmFsdWUgPSBjb252ZXJ0ZXIodGFyZ2V0VHlwZSwgbmV3VmFsKTtcclxuXHJcbiAgICAgIGlmIChjb252ZXJ0ZWRWYWx1ZSAhPT0gdGhpc1snXycgKyAocHJvcGVydHlOYW1lIGFzIHN0cmluZyldKSB7XHJcbiAgICAgICAgc2V0TWV0YWRhdGEodHJ1ZSwgdGhpcywgdGhpc1snXycgKyAocHJvcGVydHlOYW1lIGFzIHN0cmluZyldLCBuZXdWYWwsICF0aGlzLmlkKTtcclxuICAgICAgICB0aGlzWydfJyArIChwcm9wZXJ0eU5hbWUgYXMgc3RyaW5nKV0gPSBjb252ZXJ0ZWRWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoZGVsZXRlIHRhcmdldFtwcm9wZXJ0eU5hbWVdKSB7XHJcbiAgICAgIHNhdmVBbm5vdGF0aW9ucygpO1xyXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eU5hbWUsIHtcclxuICAgICAgICBnZXQ6IGdldHRlcixcclxuICAgICAgICBzZXQ6IHNldHRlcixcclxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9O1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,7 @@
1
+ export function BaseDatastoreConfig(config = {}) {
2
+ // tslint:disable-next-line:only-arrow-functions
3
+ return (target) => {
4
+ Reflect.defineMetadata('BaseDatastoreConfig', config, target);
5
+ };
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kYXRhc3RvcmUtY29uZmlnLmRlY29yYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jvc29mdGxhYi9jb3JlL3NyYy9saWIvZGVjb3JhdG9ycy9iYXNlLWRhdGFzdG9yZS1jb25maWcuZGVjb3JhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxTQUFjLEVBQUU7SUFDbEQsZ0RBQWdEO0lBQ2hELE9BQU8sQ0FBQyxNQUFXLEVBQUUsRUFBRTtRQUNyQixPQUFPLENBQUMsY0FBYyxDQUFDLHFCQUFxQixFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoRSxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIEJhc2VEYXRhc3RvcmVDb25maWcoY29uZmlnOiBhbnkgPSB7fSkge1xyXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpvbmx5LWFycm93LWZ1bmN0aW9uc1xyXG4gIHJldHVybiAodGFyZ2V0OiBhbnkpID0+IHtcclxuICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoJ0Jhc2VEYXRhc3RvcmVDb25maWcnLCBjb25maWcsIHRhcmdldCk7XHJcbiAgfTtcclxufVxyXG4iXX0=
@@ -0,0 +1,10 @@
1
+ import { BaseMetaModel } from '../models/base-meta.model';
2
+ export function BaseModelConfig(config = {}) {
3
+ return (target) => {
4
+ if (typeof config['meta'] === 'undefined' || config['meta'] == null) {
5
+ config['meta'] = BaseMetaModel;
6
+ }
7
+ Reflect.defineMetadata('BaseModelConfig', config, target);
8
+ };
9
+ }
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1tb2RlbC1jb25maWcuZGVjb3JhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcm9zb2Z0bGFiL2NvcmUvc3JjL2xpYi9kZWNvcmF0b3JzL2Jhc2UtbW9kZWwtY29uZmlnLmRlY29yYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFMUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxTQUFjLEVBQUU7SUFDOUMsT0FBTyxDQUFDLE1BQVcsRUFBRSxFQUFFO1FBQ3JCLElBQUksT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssV0FBVyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDbkUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLGFBQWEsQ0FBQztTQUNoQztRQUVELE9BQU8sQ0FBQyxjQUFjLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVELENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlTWV0YU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2Jhc2UtbWV0YS5tb2RlbCc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQmFzZU1vZGVsQ29uZmlnKGNvbmZpZzogYW55ID0ge30pIHtcclxuICByZXR1cm4gKHRhcmdldDogYW55KSA9PiB7XHJcbiAgICBpZiAodHlwZW9mIGNvbmZpZ1snbWV0YSddID09PSAndW5kZWZpbmVkJyB8fCBjb25maWdbJ21ldGEnXSA9PSBudWxsKSB7XHJcbiAgICAgIGNvbmZpZ1snbWV0YSddID0gQmFzZU1ldGFNb2RlbDtcclxuICAgIH1cclxuXHJcbiAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKCdCYXNlTW9kZWxDb25maWcnLCBjb25maWcsIHRhcmdldCk7XHJcbiAgfTtcclxufVxyXG4iXX0=
@@ -0,0 +1,11 @@
1
+ export function CustomType(config = {}) {
2
+ return (target, propertyName) => {
3
+ const annotations = Reflect.getMetadata('CustomType', target) || [];
4
+ annotations.push({
5
+ propertyName,
6
+ relationship: config.key || propertyName
7
+ });
8
+ Reflect.defineMetadata('CustomType', annotations, target);
9
+ };
10
+ }
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLnR5cGUuZGVjb3JhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcm9zb2Z0bGFiL2NvcmUvc3JjL2xpYi9kZWNvcmF0b3JzL2N1c3RvbS50eXBlLmRlY29yYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsVUFBVSxDQUFDLFNBQWMsRUFBRTtJQUN2QyxPQUFPLENBQUMsTUFBVyxFQUFFLFlBQTZCLEVBQUUsRUFBRTtRQUNsRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFcEUsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNiLFlBQVk7WUFDWixZQUFZLEVBQUUsTUFBTSxDQUFDLEdBQUcsSUFBSSxZQUFZO1NBQzNDLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM5RCxDQUFDLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIEN1c3RvbVR5cGUoY29uZmlnOiBhbnkgPSB7fSkge1xyXG4gICAgcmV0dXJuICh0YXJnZXQ6IGFueSwgcHJvcGVydHlOYW1lOiBzdHJpbmcgfCBzeW1ib2wpID0+IHtcclxuICAgICAgICBjb25zdCBhbm5vdGF0aW9ucyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoJ0N1c3RvbVR5cGUnLCB0YXJnZXQpIHx8IFtdO1xyXG5cclxuICAgICAgICBhbm5vdGF0aW9ucy5wdXNoKHtcclxuICAgICAgICAgICAgcHJvcGVydHlOYW1lLFxyXG4gICAgICAgICAgICByZWxhdGlvbnNoaXA6IGNvbmZpZy5rZXkgfHwgcHJvcGVydHlOYW1lXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoJ0N1c3RvbVR5cGUnLCBhbm5vdGF0aW9ucywgdGFyZ2V0KTtcclxuICAgIH07XHJcbn1cclxuIl19
@@ -0,0 +1,23 @@
1
+ import { CellTextAlign, GridLayoutFormat } from '../models/grid-layout-format.enum';
2
+ export function GridLayout(translateKey, width, grow = 0, shrink = 0, subProperty, formating = GridLayoutFormat.none, format = '', order = 0, textAlign = CellTextAlign.left) {
3
+ return (target, propertyName) => {
4
+ const annotations = Reflect.getMetadata('GridLayout', target) || [];
5
+ let propName = propertyName;
6
+ if (subProperty) {
7
+ propName = propertyName.toString() + '.' + subProperty;
8
+ }
9
+ annotations.push({
10
+ propertyName: propName,
11
+ translateKey,
12
+ width,
13
+ grow,
14
+ shrink,
15
+ formating,
16
+ format,
17
+ order,
18
+ textAlign
19
+ });
20
+ Reflect.defineMetadata('GridLayout', annotations, target);
21
+ };
22
+ }
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1sYXlvdXQuZGVjb3JhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcm9zb2Z0bGFiL2NvcmUvc3JjL2xpYi9kZWNvcmF0b3JzL2dyaWQtbGF5b3V0LmRlY29yYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFcEYsTUFBTSxVQUFVLFVBQVUsQ0FBQyxZQUFvQixFQUFFLEtBQXFCLEVBQ2xFLE9BQWMsQ0FBQyxFQUFFLFNBQWdCLENBQUMsRUFBRSxXQUEyQixFQUMvRCxZQUE4QixnQkFBZ0IsQ0FBQyxJQUFJLEVBQ25ELFNBQWlCLEVBQUUsRUFBRSxRQUFnQixDQUFDLEVBQUUsWUFBMkIsYUFBYSxDQUFDLElBQUk7SUFDckYsT0FBTyxDQUFDLE1BQVcsRUFBRSxZQUE2QixFQUFFLEVBQUU7UUFDbEQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BFLElBQUksUUFBUSxHQUFHLFlBQVksQ0FBQTtRQUMzQixJQUFJLFdBQVcsRUFBRTtZQUNiLFFBQVEsR0FBRyxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsR0FBRyxHQUFHLFdBQVcsQ0FBQztTQUMxRDtRQUNELFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDYixZQUFZLEVBQUUsUUFBUTtZQUN0QixZQUFZO1lBQ1osS0FBSztZQUNMLElBQUk7WUFDSixNQUFNO1lBQ04sU0FBUztZQUNULE1BQU07WUFDTixLQUFLO1lBQ0wsU0FBUztTQUNaLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM5RCxDQUFDLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2VsbFRleHRBbGlnbiwgR3JpZExheW91dEZvcm1hdCB9IGZyb20gJy4uL21vZGVscy9ncmlkLWxheW91dC1mb3JtYXQuZW51bSc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gR3JpZExheW91dCh0cmFuc2xhdGVLZXk6IHN0cmluZywgd2lkdGg/OiBudW1iZXIgfCBudWxsLFxyXG4gICAgZ3JvdzogMCB8IDEgPSAwLCBzaHJpbms6IDAgfCAxID0gMCwgc3ViUHJvcGVydHk/OiBzdHJpbmcgfCBudWxsLFxyXG4gICAgZm9ybWF0aW5nOiBHcmlkTGF5b3V0Rm9ybWF0ID0gR3JpZExheW91dEZvcm1hdC5ub25lLFxyXG4gICAgZm9ybWF0OiBzdHJpbmcgPSAnJywgb3JkZXI6IG51bWJlciA9IDAsIHRleHRBbGlnbjogQ2VsbFRleHRBbGlnbiA9IENlbGxUZXh0QWxpZ24ubGVmdCkge1xyXG4gICAgcmV0dXJuICh0YXJnZXQ6IGFueSwgcHJvcGVydHlOYW1lOiBzdHJpbmcgfCBzeW1ib2wpID0+IHtcclxuICAgICAgICBjb25zdCBhbm5vdGF0aW9ucyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoJ0dyaWRMYXlvdXQnLCB0YXJnZXQpIHx8IFtdO1xyXG4gICAgICAgIGxldCBwcm9wTmFtZSA9IHByb3BlcnR5TmFtZVxyXG4gICAgICAgIGlmIChzdWJQcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICBwcm9wTmFtZSA9IHByb3BlcnR5TmFtZS50b1N0cmluZygpICsgJy4nICsgc3ViUHJvcGVydHk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFubm90YXRpb25zLnB1c2goe1xyXG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWU6IHByb3BOYW1lLFxyXG4gICAgICAgICAgICB0cmFuc2xhdGVLZXksXHJcbiAgICAgICAgICAgIHdpZHRoLFxyXG4gICAgICAgICAgICBncm93LFxyXG4gICAgICAgICAgICBzaHJpbmssXHJcbiAgICAgICAgICAgIGZvcm1hdGluZyxcclxuICAgICAgICAgICAgZm9ybWF0LFxyXG4gICAgICAgICAgICBvcmRlcixcclxuICAgICAgICAgICAgdGV4dEFsaWduXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoJ0dyaWRMYXlvdXQnLCBhbm5vdGF0aW9ucywgdGFyZ2V0KTtcclxuICAgIH07XHJcbn1cclxuIl19
@@ -0,0 +1,96 @@
1
+ import { ContentChildren, Directive, Input } from '@angular/core';
2
+ import { BehaviorSubject, combineLatest, merge } from 'rxjs';
3
+ import { map, switchMap } from 'rxjs/operators';
4
+ import { TranslatedElementDirective } from './translated-element.directive';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@ngx-translate/core";
7
+ const TOKEN_START_DEMARC = '{{';
8
+ const TOKEN_END_DEMARC = '}}';
9
+ // adapted from @kasperlauge's solution in https://github.com/ngx-translate/core/issues/223
10
+ export class TranslatedContentDirective {
11
+ constructor(viewRef, renderer, translateService, changeDetectorRef) {
12
+ this.viewRef = viewRef;
13
+ this.renderer = renderer;
14
+ this.translateService = translateService;
15
+ this.changeDetectorRef = changeDetectorRef;
16
+ this.subs = [];
17
+ }
18
+ ngOnInit() {
19
+ this.rawTranslation = merge(this.translateService.get(this.translationKey), this.translateService.onLangChange.asObservable().pipe(switchMap(() => this.translateService.get(this.translationKey))));
20
+ }
21
+ ngAfterContentInit() {
22
+ // QueryList.changes doesn't re-emit after its initial value, which we have by now
23
+ // BehaviorSubjects re-emit their initial value on subscription, so we get what we need by merging
24
+ // the BehaviorSubject and the QueryList.changes observable
25
+ const elementsSubject = new BehaviorSubject(this.elements.toArray());
26
+ const elementsChanges = merge(elementsSubject, this.elements.changes);
27
+ this.translationData = combineLatest(this.rawTranslation, elementsChanges)
28
+ .pipe(map(([rawTranslation]) => {
29
+ return {
30
+ elements: this.elements.toArray(),
31
+ rawTranslation,
32
+ };
33
+ }));
34
+ this.subs.push(this.translationData.subscribe(this.render.bind(this)));
35
+ }
36
+ render(translationData) {
37
+ if (!translationData.rawTranslation || translationData.rawTranslation === this.translationKey) {
38
+ throw new Error(`No resource matching the key '${this.translationKey}'`);
39
+ }
40
+ while (this.viewRef.element.nativeElement.firstChild) {
41
+ this.renderer.removeChild(this.viewRef.element.nativeElement, this.viewRef.element.nativeElement.firstChild);
42
+ }
43
+ let lastTokenEnd = 0;
44
+ while (lastTokenEnd < translationData.rawTranslation.length) {
45
+ const tokenStartDemarc = translationData.rawTranslation.indexOf(TOKEN_START_DEMARC, lastTokenEnd);
46
+ if (tokenStartDemarc < 0) {
47
+ break;
48
+ }
49
+ const tokenStart = tokenStartDemarc + TOKEN_START_DEMARC.length;
50
+ const tokenEnd = translationData.rawTranslation.indexOf(TOKEN_END_DEMARC, tokenStart);
51
+ if (tokenEnd < 0) {
52
+ throw new Error(`Encountered unterminated token in translation string '${this.translationKey}'`);
53
+ }
54
+ const tokenEndDemarc = tokenEnd + TOKEN_END_DEMARC.length;
55
+ const precedingText = translationData.rawTranslation.substring(lastTokenEnd, tokenStartDemarc);
56
+ const precedingTextElement = this.renderer.createText(precedingText);
57
+ this.renderer.appendChild(this.viewRef.element.nativeElement, precedingTextElement);
58
+ const elementKey = translationData.rawTranslation.substring(tokenStart, tokenEnd);
59
+ const embeddedElementTemplate = translationData.elements.find(element => element.elementKey === elementKey);
60
+ if (embeddedElementTemplate) {
61
+ const embeddedElementView = embeddedElementTemplate.viewRef.createEmbeddedView(embeddedElementTemplate.templateRef);
62
+ this.renderer.appendChild(this.viewRef.element.nativeElement, embeddedElementView.rootNodes[0]);
63
+ }
64
+ else {
65
+ const missingTokenText = translationData.rawTranslation.substring(tokenStartDemarc, tokenEndDemarc);
66
+ const missingTokenElement = this.renderer.createText(missingTokenText);
67
+ this.renderer.appendChild(this.viewRef.element.nativeElement, missingTokenElement);
68
+ }
69
+ lastTokenEnd = tokenEndDemarc;
70
+ }
71
+ const trailingText = translationData.rawTranslation.substring(lastTokenEnd);
72
+ const trailingTextElement = this.renderer.createText(trailingText);
73
+ this.renderer.appendChild(this.viewRef.element.nativeElement, trailingTextElement);
74
+ // in case the rendering happens outside of a change detection event, this ensures that any translations in the
75
+ // embedded elements are rendered
76
+ this.changeDetectorRef.detectChanges();
77
+ }
78
+ ngOnDestroy() {
79
+ this.subs.forEach(sub => sub.unsubscribe());
80
+ }
81
+ }
82
+ TranslatedContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: TranslatedContentDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.Renderer2 }, { token: i1.TranslateService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
83
+ TranslatedContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.0", type: TranslatedContentDirective, selector: "[appTranslatedContent]", inputs: { translationKey: ["appTranslatedContent", "translationKey"] }, queries: [{ propertyName: "elements", predicate: TranslatedElementDirective }], ngImport: i0 });
84
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: TranslatedContentDirective, decorators: [{
85
+ type: Directive,
86
+ args: [{
87
+ selector: '[appTranslatedContent]',
88
+ }]
89
+ }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.Renderer2 }, { type: i1.TranslateService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { translationKey: [{
90
+ type: Input,
91
+ args: ['appTranslatedContent']
92
+ }], elements: [{
93
+ type: ContentChildren,
94
+ args: [TranslatedElementDirective]
95
+ }] } });
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlZC1jb250ZW50LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jvc29mdGxhYi9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy90cmFuc2xhdGVkLWNvbnRlbnQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDZ0MsZUFBZSxFQUFFLFNBQVMsRUFDL0QsS0FBSyxFQUNOLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFDdkYsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7O0FBTzVFLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0FBRTlCLDJGQUEyRjtBQUkzRixNQUFNLE9BQU8sMEJBQTBCO0lBV3JDLFlBQ1UsT0FBeUIsRUFDekIsUUFBbUIsRUFDbkIsZ0JBQWtDLEVBQ2xDLGlCQUFvQztRQUhwQyxZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUN6QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQVJ0QyxTQUFJLEdBQW1CLEVBQUUsQ0FBQztJQVM5QixDQUFDO0lBRUUsUUFBUTtRQUNiLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFDOUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FB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K0dBQStHO1FBQy9HLGlDQUFpQztRQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7SUFFekMsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUM5QyxDQUFDOzt1SEFwR1UsMEJBQTBCOzJHQUExQiwwQkFBMEIsK0pBSXBCLDBCQUEwQjsyRkFKaEMsMEJBQTBCO2tCQUh0QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx3QkFBd0I7aUJBQ25DOzhMQUdnQyxjQUFjO3NCQUE1QyxLQUFLO3VCQUFDLHNCQUFzQjtnQkFHckIsUUFBUTtzQkFEZixlQUFlO3VCQUFDLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJDb250ZW50SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbnRlbnRDaGlsZHJlbiwgRGlyZWN0aXZlLFxyXG4gIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgUXVlcnlMaXN0LCBSZW5kZXJlcjIsIFZpZXdDb250YWluZXJSZWZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZWRFbGVtZW50RGlyZWN0aXZlIH0gZnJvbSAnLi90cmFuc2xhdGVkLWVsZW1lbnQuZGlyZWN0aXZlJztcclxuXHJcbmludGVyZmFjZSBUcmFuc2xhdGlvbkRhdGEge1xyXG4gIGVsZW1lbnRzOiBUcmFuc2xhdGVkRWxlbWVudERpcmVjdGl2ZVtdO1xyXG4gIHJhd1RyYW5zbGF0aW9uOiBzdHJpbmc7XHJcbn1cclxuXHJcbmNvbnN0IFRPS0VOX1NUQVJUX0RFTUFSQyA9ICd7eyc7XHJcbmNvbnN0IFRPS0VOX0VORF9ERU1BUkMgPSAnfX0nO1xyXG5cclxuLy8gYWRhcHRlZCBmcm9tIEBrYXNwZXJsYXVnZSdzIHNvbHV0aW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9uZ3gtdHJhbnNsYXRlL2NvcmUvaXNzdWVzLzIyM1xyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1thcHBUcmFuc2xhdGVkQ29udGVudF0nLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRlZENvbnRlbnREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJDb250ZW50SW5pdCB7XHJcblxyXG4gIEBJbnB1dCgnYXBwVHJhbnNsYXRlZENvbnRlbnQnKSB0cmFuc2xhdGlvbktleTogc3RyaW5nO1xyXG5cclxuICBAQ29udGVudENoaWxkcmVuKFRyYW5zbGF0ZWRFbGVtZW50RGlyZWN0aXZlKVxyXG4gIHByaXZhdGUgZWxlbWVudHM6IFF1ZXJ5TGlzdDxUcmFuc2xhdGVkRWxlbWVudERpcmVjdGl2ZT47XHJcblxyXG4gIHByaXZhdGUgc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBwcml2YXRlIHJhd1RyYW5zbGF0aW9uOiBPYnNlcnZhYmxlPHN0cmluZz47XHJcbiAgcHJpdmF0ZSB0cmFuc2xhdGlvbkRhdGE6IE9ic2VydmFibGU8VHJhbnNsYXRpb25EYXRhPjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHZpZXdSZWY6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICApIHsgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJhd1RyYW5zbGF0aW9uID0gbWVyZ2UoXHJcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQodGhpcy50cmFuc2xhdGlvbktleSksXHJcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5vbkxhbmdDaGFuZ2UuYXNPYnNlcnZhYmxlKCkucGlwZShzd2l0Y2hNYXAoKCkgPT4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCh0aGlzLnRyYW5zbGF0aW9uS2V5KSkpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICAvLyBRdWVyeUxpc3QuY2hhbmdlcyBkb2Vzbid0IHJlLWVtaXQgYWZ0ZXIgaXRzIGluaXRpYWwgdmFsdWUsIHdoaWNoIHdlIGhhdmUgYnkgbm93XHJcbiAgICAvLyBCZWhhdmlvclN1YmplY3RzIHJlLWVtaXQgdGhlaXIgaW5pdGlhbCB2YWx1ZSBvbiBzdWJzY3JpcHRpb24sIHNvIHdlIGdldCB3aGF0IHdlIG5lZWQgYnkgbWVyZ2luZ1xyXG4gICAgLy8gdGhlIEJlaGF2aW9yU3ViamVjdCBhbmQgdGhlIFF1ZXJ5TGlzdC5jaGFuZ2VzIG9ic2VydmFibGVcclxuICAgIGNvbnN0IGVsZW1lbnRzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5lbGVtZW50cy50b0FycmF5KCkpO1xyXG4gICAgY29uc3QgZWxlbWVudHNDaGFuZ2VzID0gbWVyZ2UoZWxlbWVudHNTdWJqZWN0LCB0aGlzLmVsZW1lbnRzLmNoYW5nZXMpO1xyXG5cclxuICAgIHRoaXMudHJhbnNsYXRpb25EYXRhID0gY29tYmluZUxhdGVzdCh0aGlzLnJhd1RyYW5zbGF0aW9uLCBlbGVtZW50c0NoYW5nZXMpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgoW3Jhd1RyYW5zbGF0aW9uXSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZWxlbWVudHM6IHRoaXMuZWxlbWVudHMudG9BcnJheSgpLFxyXG4gICAgICAgICAgICByYXdUcmFuc2xhdGlvbixcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnMucHVzaCh0aGlzLnRyYW5zbGF0aW9uRGF0YS5zdWJzY3JpYmUodGhpcy5yZW5kZXIuYmluZCh0aGlzKSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXIodHJhbnNsYXRpb25EYXRhOiBUcmFuc2xhdGlvbkRhdGEpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAoIXRyYW5zbGF0aW9uRGF0YS5yYXdUcmFuc2xhdGlvbiB8fCB0cmFuc2xhdGlvbkRhdGEucmF3VHJhbnNsYXRpb24gPT09IHRoaXMudHJhbnNsYXRpb25LZXkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyByZXNvdXJjZSBtYXRjaGluZyB0aGUga2V5ICcke3RoaXMudHJhbnNsYXRpb25LZXl9J2ApO1xyXG4gICAgfVxyXG5cclxuICAgIHdoaWxlICh0aGlzLnZpZXdSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50LmZpcnN0Q2hpbGQpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZCh0aGlzLnZpZXdSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50LCB0aGlzLnZpZXdSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50LmZpcnN0Q2hpbGQpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBsYXN0VG9rZW5FbmQgPSAwO1xyXG4gICAgd2hpbGUgKGxhc3RUb2tlbkVuZCA8IHRyYW5zbGF0aW9uRGF0YS5yYXdUcmFuc2xhdGlvbi5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgdG9rZW5TdGFydERlbWFyYyA9IHRyYW5zbGF0aW9uRGF0YS5yYXdUcmFuc2xhdGlvbi5pbmRleE9mKFRPS0VOX1NUQVJUX0RFTUFSQywgbGFzdFRva2VuRW5kKTtcclxuICAgICAgaWYgKHRva2VuU3RhcnREZW1hcmMgPCAwKSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdG9rZW5TdGFydCA9IHRva2VuU3RhcnREZW1hcmMgKyBUT0tFTl9TVEFSVF9ERU1BUkMubGVuZ3RoO1xyXG4gICAgICBjb25zdCB0b2tlbkVuZCA9IHRyYW5zbGF0aW9uRGF0YS5yYXdUcmFuc2xhdGlvbi5pbmRleE9mKFRPS0VOX0VORF9ERU1BUkMsIHRva2VuU3RhcnQpO1xyXG4gICAgICBpZiAodG9rZW5FbmQgPCAwKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbmNvdW50ZXJlZCB1bnRlcm1pbmF0ZWQgdG9rZW4gaW4gdHJhbnNsYXRpb24gc3RyaW5nICcke3RoaXMudHJhbnNsYXRpb25LZXl9J2ApO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHRva2VuRW5kRGVtYXJjID0gdG9rZW5FbmQgKyBUT0tFTl9FTkRfREVNQVJDLmxlbmd0aDtcclxuXHJcbiAgICAgIGNvbnN0IHByZWNlZGluZ1RleHQgPSB0cmFuc2xhdGlvbkRhdGEucmF3VHJhbnNsYXRpb24uc3Vic3RyaW5nKGxhc3RUb2tlbkVuZCwgdG9rZW5TdGFydERlbWFyYyk7XHJcbiAgICAgIGNvbnN0IHByZWNlZGluZ1RleHRFbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVUZXh0KHByZWNlZGluZ1RleHQpO1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMudmlld1JlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIHByZWNlZGluZ1RleHRFbGVtZW50KTtcclxuXHJcbiAgICAgIGNvbnN0IGVsZW1lbnRLZXkgPSB0cmFuc2xhdGlvbkRhdGEucmF3VHJhbnNsYXRpb24uc3Vic3RyaW5nKHRva2VuU3RhcnQsIHRva2VuRW5kKTtcclxuICAgICAgY29uc3QgZW1iZWRkZWRFbGVtZW50VGVtcGxhdGUgPSB0cmFuc2xhdGlvbkRhdGEuZWxlbWVudHMuZmluZChlbGVtZW50ID0+IGVsZW1lbnQuZWxlbWVudEtleSA9PT0gZWxlbWVudEtleSk7XHJcbiAgICAgIGlmIChlbWJlZGRlZEVsZW1lbnRUZW1wbGF0ZSkge1xyXG4gICAgICAgIGNvbnN0IGVtYmVkZGVkRWxlbWVudFZpZXcgPSBlbWJlZGRlZEVsZW1lbnRUZW1wbGF0ZS52aWV3UmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhlbWJlZGRlZEVsZW1lbnRUZW1wbGF0ZS50ZW1wbGF0ZVJlZik7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLnZpZXdSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50LCBlbWJlZGRlZEVsZW1lbnRWaWV3LnJvb3ROb2Rlc1swXSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgbWlzc2luZ1Rva2VuVGV4dCA9IHRyYW5zbGF0aW9uRGF0YS5yYXdUcmFuc2xhdGlvbi5zdWJzdHJpbmcodG9rZW5TdGFydERlbWFyYywgdG9rZW5FbmREZW1hcmMpO1xyXG4gICAgICAgIGNvbnN0IG1pc3NpbmdUb2tlbkVsZW1lbnQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZVRleHQobWlzc2luZ1Rva2VuVGV4dCk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLnZpZXdSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50LCBtaXNzaW5nVG9rZW5FbGVtZW50KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGFzdFRva2VuRW5kID0gdG9rZW5FbmREZW1hcmM7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhaWxpbmdUZXh0ID0gdHJhbnNsYXRpb25EYXRhLnJhd1RyYW5zbGF0aW9uLnN1YnN0cmluZyhsYXN0VG9rZW5FbmQpO1xyXG4gICAgY29uc3QgdHJhaWxpbmdUZXh0RWxlbWVudCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlVGV4dCh0cmFpbGluZ1RleHQpO1xyXG5cclxuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy52aWV3UmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgdHJhaWxpbmdUZXh0RWxlbWVudCk7XHJcblxyXG4gICAgLy8gaW4gY2FzZSB0aGUgcmVuZGVyaW5nIGhhcHBlbnMgb3V0c2lkZSBvZiBhIGNoYW5nZSBkZXRlY3Rpb24gZXZlbnQsIHRoaXMgZW5zdXJlcyB0aGF0IGFueSB0cmFuc2xhdGlvbnMgaW4gdGhlXHJcbiAgICAvLyBlbWJlZGRlZCBlbGVtZW50cyBhcmUgcmVuZGVyZWRcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vicy5mb3JFYWNoKHN1YiA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XHJcbiAgfVxyXG59Il19