@rosoftlab/core 0.0.100
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +6 -0
- package/esm2020/lib/base-components/base-form-edit.component.mjs +242 -0
- package/esm2020/lib/base-components/field-error-display/field-error-display.component.mjs +15 -0
- package/esm2020/lib/base-components/generic-table/generic-table.component.mjs +431 -0
- package/esm2020/lib/base-components/index.mjs +5 -0
- package/esm2020/lib/base-components/page-not-found/page-not-found.component.mjs +15 -0
- package/esm2020/lib/base-components/searchable-dropdown/searchable-dropdown.component.mjs +231 -0
- package/esm2020/lib/base-components/under-construction/under-construction.component.mjs +12 -0
- package/esm2020/lib/constants/symbols.mjs +3 -0
- package/esm2020/lib/converters/date/date.converter.mjs +12 -0
- package/esm2020/lib/decorators/attribute.decorator.mjs +85 -0
- package/esm2020/lib/decorators/base-datastore-config.decorator.mjs +7 -0
- package/esm2020/lib/decorators/base-model-config.decorator.mjs +10 -0
- package/esm2020/lib/decorators/custom.type.decorator.mjs +11 -0
- package/esm2020/lib/decorators/grid-layout.decorator.mjs +23 -0
- package/esm2020/lib/directives/translated-content.directive.mjs +96 -0
- package/esm2020/lib/directives/translated-element.directive.mjs +20 -0
- package/esm2020/lib/index.mjs +29 -0
- package/esm2020/lib/interfaces/attribute-decorator-options.interface.mjs +2 -0
- package/esm2020/lib/interfaces/datastore-config.interface.mjs +2 -0
- package/esm2020/lib/interfaces/model-config.interface.mjs +2 -0
- package/esm2020/lib/interfaces/overrides.interface.mjs +2 -0
- package/esm2020/lib/interfaces/property-converter.interface.mjs +2 -0
- package/esm2020/lib/material.mjs +94 -0
- package/esm2020/lib/models/base-meta.model.mjs +7 -0
- package/esm2020/lib/models/base-query-data.mjs +13 -0
- package/esm2020/lib/models/base.model.mjs +171 -0
- package/esm2020/lib/models/error-response.model.mjs +9 -0
- package/esm2020/lib/models/grid-layout-format.enum.mjs +15 -0
- package/esm2020/lib/models/grid-layout.mjs +18 -0
- package/esm2020/lib/models/rule.mjs +6 -0
- package/esm2020/lib/module.mjs +55 -0
- package/esm2020/lib/pipes/Nl2brPipe.pipe.mjs +21 -0
- package/esm2020/lib/pipes/input-error.pipe.mjs +37 -0
- package/esm2020/lib/providers.mjs +10 -0
- package/esm2020/lib/services/base-datastore.service.mjs +333 -0
- package/esm2020/lib/services/base.service.mjs +95 -0
- package/esm2020/lib/services/dialog.service.mjs +150 -0
- package/esm2020/lib/services/grid-layout.service.mjs +21 -0
- package/esm2020/lib/services/index.mjs +5 -0
- package/esm2020/lib/validators/pattern-validator.mjs +15 -0
- package/esm2020/public-api.mjs +12 -0
- package/esm2020/rosoftlab-core.mjs +5 -0
- package/fesm2015/rosoftlab-core.mjs +2217 -0
- package/fesm2015/rosoftlab-core.mjs.map +1 -0
- package/fesm2020/rosoftlab-core.mjs +2210 -0
- package/fesm2020/rosoftlab-core.mjs.map +1 -0
- package/lib/base-components/base-form-edit.component.d.ts +58 -0
- package/lib/base-components/field-error-display/field-error-display.component.d.ts +7 -0
- package/lib/base-components/generic-table/generic-table.component.d.ts +93 -0
- package/lib/base-components/index.d.ts +4 -0
- package/lib/base-components/page-not-found/page-not-found.component.d.ts +8 -0
- package/lib/base-components/searchable-dropdown/searchable-dropdown.component.d.ts +62 -0
- package/lib/base-components/under-construction/under-construction.component.d.ts +6 -0
- package/lib/constants/symbols.d.ts +1 -0
- package/lib/converters/date/date.converter.d.ts +5 -0
- package/lib/decorators/attribute.decorator.d.ts +2 -0
- package/lib/decorators/base-datastore-config.decorator.d.ts +1 -0
- package/lib/decorators/base-model-config.decorator.d.ts +1 -0
- package/lib/decorators/custom.type.decorator.d.ts +1 -0
- package/lib/decorators/grid-layout.decorator.d.ts +2 -0
- package/lib/directives/translated-content.directive.d.ts +21 -0
- package/lib/directives/translated-element.directive.d.ts +10 -0
- package/lib/index.d.ts +27 -0
- package/lib/interfaces/attribute-decorator-options.interface.d.ts +8 -0
- package/lib/interfaces/datastore-config.interface.d.ts +8 -0
- package/lib/interfaces/model-config.interface.d.ts +8 -0
- package/lib/interfaces/overrides.interface.d.ts +5 -0
- package/lib/interfaces/property-converter.interface.d.ts +4 -0
- package/lib/material.d.ts +42 -0
- package/lib/models/base-meta.model.d.ts +5 -0
- package/lib/models/base-query-data.d.ts +7 -0
- package/lib/models/base.model.d.ts +33 -0
- package/lib/models/error-response.model.d.ts +17 -0
- package/lib/models/grid-layout-format.enum.d.ts +12 -0
- package/lib/models/grid-layout.d.ts +13 -0
- package/lib/models/rule.d.ts +5 -0
- package/lib/module.d.ts +14 -0
- package/lib/pipes/Nl2brPipe.pipe.d.ts +7 -0
- package/lib/pipes/input-error.pipe.d.ts +10 -0
- package/lib/providers.d.ts +2 -0
- package/lib/services/base-datastore.service.d.ts +45 -0
- package/lib/services/base.service.d.ts +26 -0
- package/lib/services/dialog.service.d.ts +21 -0
- package/lib/services/grid-layout.service.d.ts +9 -0
- package/lib/services/index.d.ts +4 -0
- package/lib/validators/pattern-validator.d.ts +4 -0
- package/package.json +53 -0
- package/public-api.d.ts +7 -0
- 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
|