@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
package/README.md ADDED
@@ -0,0 +1,6 @@
1
+ # Rosoftlab Core
2
+ This is the core module used in all aplications
3
+
4
+ # Install
5
+
6
+ npm i @rosoftlab/core
@@ -0,0 +1,242 @@
1
+ import { __decorate } from "tslib";
2
+ import { Component } from '@angular/core';
3
+ import { FormControl, FormGroup } from '@angular/forms';
4
+ import { BlockUI } from 'ng-block-ui';
5
+ import { Observable } from 'rxjs';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/forms";
8
+ import * as i2 from "@angular/router";
9
+ import * as i3 from "../services/base.service";
10
+ import * as i4 from "../services/dialog.service";
11
+ import * as i5 from "@ngx-translate/core";
12
+ import * as i6 from "@angular/common";
13
+ export class BaseFormEditComponent {
14
+ constructor(fb, router, route, modelService, dialogService, translate, location) {
15
+ this.fb = fb;
16
+ this.router = router;
17
+ this.route = route;
18
+ this.modelService = modelService;
19
+ this.dialogService = dialogService;
20
+ this.translate = translate;
21
+ this.location = location;
22
+ this.isLoading = true;
23
+ this.changeUrlRoute = true;
24
+ this.generateForm(this.modelService.newModel());
25
+ }
26
+ afterSave(model) {
27
+ return new Observable((observer) => {
28
+ observer.next(model);
29
+ observer.complete();
30
+ });
31
+ }
32
+ beforeSave(model) {
33
+ return new Observable((observer) => {
34
+ observer.next(model);
35
+ observer.complete();
36
+ });
37
+ }
38
+ ngOnInit() {
39
+ this.initForm();
40
+ }
41
+ initForm(customInclude = '', newModelId = null, model = null) {
42
+ if (model === null) {
43
+ this.modelId = this.route.snapshot.paramMap.get('id') ?? newModelId;
44
+ this.isEdit = false;
45
+ if (this.modelId) {
46
+ this.modelService.get(this.modelId, customInclude).subscribe((value) => {
47
+ this.isEdit = true;
48
+ this.generateForm(value);
49
+ });
50
+ }
51
+ else {
52
+ if (this.changeUrlRoute) {
53
+ const addUrl = this.router.createUrlTree([]).toString();
54
+ this.editRoute = this.router.createUrlTree([addUrl.replace('add', 'edit')]).toString();
55
+ }
56
+ // }
57
+ this.generateForm(this.modelService.newModel());
58
+ }
59
+ }
60
+ else {
61
+ this.modelId = model.id;
62
+ this.isEdit = true;
63
+ this.generateForm(model);
64
+ }
65
+ }
66
+ generateForm(model) {
67
+ this.isLoading = false;
68
+ this.modelId = model.id;
69
+ this.model = model;
70
+ this.baseForm = this.modelService.toFormGroup(this.fb, model);
71
+ this.afterFormGenerated();
72
+ }
73
+ afterFormGenerated() {
74
+ }
75
+ getFromGroup(formGroup = null) {
76
+ if (!formGroup)
77
+ return this.baseForm;
78
+ if (formGroup instanceof FormGroup)
79
+ return formGroup;
80
+ return this.baseForm.controls[formGroup];
81
+ }
82
+ validateAllFormFields(formGroup = null) {
83
+ const fg = this.getFromGroup(formGroup);
84
+ Object.keys(fg.controls).forEach(field => {
85
+ // console.log(field);
86
+ const control = fg.get(field);
87
+ if (control instanceof FormControl) {
88
+ control.markAsTouched({ onlySelf: true });
89
+ }
90
+ else if (control instanceof FormGroup) {
91
+ this.validateAllFormFields(control);
92
+ }
93
+ });
94
+ }
95
+ isFieldValid(field, formGroup = null) {
96
+ const fg = this.getFromGroup(formGroup);
97
+ const filedControl = fg.get(field);
98
+ return !filedControl.valid && filedControl.touched;
99
+ }
100
+ isFieldValidFromArray(arrayIndex, field, arrayName = 'formArray') {
101
+ const fieldControl = this.baseForm.get(arrayName).get([arrayIndex]).get(field);
102
+ return !fieldControl.valid && fieldControl.touched;
103
+ }
104
+ displayFieldCss(field) {
105
+ return {
106
+ 'has-error': this.isFieldValid(field),
107
+ 'has-feedback': this.isFieldValid(field)
108
+ };
109
+ }
110
+ onCancel() {
111
+ this.router.navigate([this.cancelRoute]);
112
+ }
113
+ onSave() {
114
+ this.saveModel(this.baseForm);
115
+ }
116
+ saveModel(formGroup = null) {
117
+ const fg = this.getFromGroup(formGroup);
118
+ const that = this;
119
+ if (fg) {
120
+ if (fg.valid) {
121
+ that.blockUI.start('Saving ...');
122
+ this.beforeSave(this.model).subscribe(_ => {
123
+ this.modelService.save(this.baseForm, this.modelId, this.model).subscribe((newModel) => {
124
+ this.model = newModel;
125
+ this.modelId = newModel.id;
126
+ if (this.editRoute) {
127
+ this.isEdit = true;
128
+ if (this.changeUrlRoute) {
129
+ const url = this.router.createUrlTree([this.editRoute, this.modelId]).toString();
130
+ this.location.replaceState(url);
131
+ }
132
+ }
133
+ this.afterSave(newModel).subscribe((val) => {
134
+ this.blockUI.stop();
135
+ this.dialogService.showSaveMessage('Your changes were saved successfully.').subscribe(d => {
136
+ fg.markAsPristine();
137
+ });
138
+ });
139
+ }, err => {
140
+ this.serverErrors(err);
141
+ this.blockUI.stop();
142
+ });
143
+ });
144
+ }
145
+ else {
146
+ this.validateAllFormFields(formGroup);
147
+ }
148
+ }
149
+ }
150
+ serverErrors(err) {
151
+ if (err.error) {
152
+ if (err.error.errors) {
153
+ const validationErrors = err.error.errors;
154
+ if (Array.isArray(validationErrors)) {
155
+ validationErrors.forEach(prop => {
156
+ const formControl = this.baseForm.get(prop);
157
+ if (formControl) {
158
+ // activate the error message
159
+ formControl.setErrors({
160
+ serverError: validationErrors[prop].join('\n')
161
+ });
162
+ }
163
+ });
164
+ }
165
+ else {
166
+ const keys = Object.keys(validationErrors);
167
+ keys.forEach(prop => {
168
+ const formControl = this.baseForm.get(prop);
169
+ if (formControl) {
170
+ // activate the error message
171
+ formControl.setErrors({
172
+ serverError: validationErrors[prop].join('\n')
173
+ });
174
+ }
175
+ });
176
+ }
177
+ }
178
+ }
179
+ }
180
+ canDeactivate() {
181
+ // Allow synchronous navigation (`true`) if no crisis or the crisis is unchanged
182
+ if (!this.baseForm.dirty) {
183
+ return true;
184
+ }
185
+ // Otherwise ask the user with the dialog service and return its
186
+ // observable which resolves to true or false when the user decides
187
+ return this.dialogService.confirm('Discard changes ?', null, 'Discard');
188
+ }
189
+ getFiledName(filedTranslationKey) {
190
+ return { field: this.translate.instant(filedTranslationKey) };
191
+ }
192
+ getCustomErrorMessage(error, fieldLabel) {
193
+ return '';
194
+ }
195
+ getErrorMessageFromArray(arrayIndex, field, filedTranslationKey, arrayName = 'formArray') {
196
+ const fieldControl = this.baseForm.get(arrayName).get([arrayIndex]).get(field);
197
+ return this.getErrorMessageForField(fieldControl, filedTranslationKey);
198
+ }
199
+ getErrorMessage(field, filedTranslationKey, formGroup = null) {
200
+ const fg = this.getFromGroup(formGroup);
201
+ return this.getErrorMessageForField(fg.get(field), filedTranslationKey);
202
+ }
203
+ getErrorMessageForField(fieldControl, filedTranslationKey) {
204
+ const error = fieldControl.errors;
205
+ const fieldLabel = this.translate.instant(filedTranslationKey);
206
+ let rvalue = '';
207
+ if (error !== null) {
208
+ if (error['required'] === true) {
209
+ rvalue = this.translate.instant('General.Field.Required', { field: fieldLabel });
210
+ }
211
+ if (error['minlength']) {
212
+ rvalue = this.translate.instant('General.Field.MinLength', { field: fieldLabel, requiredLength: error.minlength.requiredLength });
213
+ }
214
+ if (error['email'] === true) {
215
+ rvalue = this.translate.instant('General.Field.InvalidEmail');
216
+ }
217
+ if (error['url'] === true) {
218
+ rvalue = this.translate.instant('General.Field.InvalidUrl');
219
+ }
220
+ if (error['serverError']) {
221
+ rvalue = error['serverError'];
222
+ }
223
+ if (rvalue === '') {
224
+ rvalue = this.getCustomErrorMessage(error, fieldLabel);
225
+ }
226
+ }
227
+ return rvalue;
228
+ }
229
+ }
230
+ BaseFormEditComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: BaseFormEditComponent, deps: [{ token: i1.FormBuilder }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.BaseService }, { token: i4.DialogService }, { token: i5.TranslateService }, { token: i6.Location }], target: i0.ɵɵFactoryTarget.Component });
231
+ BaseFormEditComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: BaseFormEditComponent, selector: "app-base.form.edit", ngImport: i0, template: '', isInline: true });
232
+ __decorate([
233
+ BlockUI()
234
+ ], BaseFormEditComponent.prototype, "blockUI", void 0);
235
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: BaseFormEditComponent, decorators: [{
236
+ type: Component,
237
+ args: [{
238
+ selector: 'app-base.form.edit',
239
+ template: ''
240
+ }]
241
+ }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.BaseService }, { type: i4.DialogService }, { type: i5.TranslateService }, { type: i6.Location }]; }, propDecorators: { blockUI: [] } });
242
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1mb3JtLWVkaXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcm9zb2Z0bGFiL2NvcmUvc3JjL2xpYi9iYXNlLWNvbXBvbmVudHMvYmFzZS1mb3JtLWVkaXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBZSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHckUsT0FBTyxFQUFFLE9BQU8sRUFBYSxNQUFNLGFBQWEsQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQVFsQyxNQUFNLE9BQWdCLHFCQUFxQjtJQVV6QyxZQUNZLEVBQWUsRUFDZixNQUFjLEVBQ2QsS0FBcUIsRUFDckIsWUFBNEIsRUFDNUIsYUFBNEIsRUFDNUIsU0FBMkIsRUFDM0IsUUFBa0I7UUFObEIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFDNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQVg5QixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBR1YsbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFVcEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVNLFNBQVMsQ0FBQyxLQUFRO1FBQ3ZCLE9BQU8sSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNqQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUss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QyxFQUFFO2dCQUN0QixNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMseUJBQXlCLEVBQUUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7YUFDbkk7WUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUU7Z0JBQzNCLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO2FBQy9EO1lBQ0QsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUN6QixNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FBQzthQUM3RDtZQUNELElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUN4QixNQUFNLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQy9CO1lBQ0QsSUFBSSxNQUFNLEtBQUssRUFBRSxFQUFFO2dCQUNqQixNQUFNLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQzthQUN4RDtTQUNGO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7a0hBbk9tQixxQkFBcUI7c0dBQXJCLHFCQUFxQiwwREFGL0IsRUFBRTtBQUdEO0lBQVYsT0FBTyxFQUFFO3NEQUFvQjsyRkFEVixxQkFBcUI7a0JBSjFDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsUUFBUSxFQUFFLEVBQUU7aUJBQ2I7Z1FBRVksT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEJsb2NrVUksIE5nQmxvY2tVSSB9IGZyb20gJ25nLWJsb2NrLXVpJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBCYXNlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvYmFzZS5tb2RlbCc7XHJcbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtYmFzZS5mb3JtLmVkaXQnLFxyXG4gIHRlbXBsYXRlOiAnJ1xyXG59KVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUZvcm1FZGl0Q29tcG9uZW50PFQgZXh0ZW5kcyBCYXNlTW9kZWw+IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAQmxvY2tVSSgpIGJsb2NrVUk6IE5nQmxvY2tVSTtcclxuICBiYXNlRm9ybTogRm9ybUdyb3VwO1xyXG4gIG1vZGVsSWQ6IHN0cmluZztcclxuICBtb2RlbDogVDtcclxuICBpc0VkaXQ6IGJvb2xlYW47XHJcbiAgaXNMb2FkaW5nID0gdHJ1ZTtcclxuICBjYW5jZWxSb3V0ZTogc3RyaW5nO1xyXG4gIGVkaXRSb3V0ZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBjaGFuZ2VVcmxSb3V0ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByb3RlY3RlZCBtb2RlbFNlcnZpY2U6IEJhc2VTZXJ2aWNlPFQ+LFxyXG4gICAgcHJvdGVjdGVkIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIGxvY2F0aW9uOiBMb2NhdGlvblxyXG4gICkge1xyXG4gICAgdGhpcy5nZW5lcmF0ZUZvcm0odGhpcy5tb2RlbFNlcnZpY2UubmV3TW9kZWwoKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWZ0ZXJTYXZlKG1vZGVsOiBUKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgIG9ic2VydmVyLm5leHQobW9kZWwpO1xyXG4gICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYmVmb3JlU2F2ZShtb2RlbDogVCk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xyXG4gICAgICBvYnNlcnZlci5uZXh0KG1vZGVsKTtcclxuICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmluaXRGb3JtKCk7XHJcbiAgfVxyXG4gIGluaXRGb3JtKGN1c3RvbUluY2x1ZGU6IHN0cmluZyA9ICcnLCBuZXdNb2RlbElkOiBzdHJpbmcgPSBudWxsLCBtb2RlbDogVCA9IG51bGwpIHtcclxuICAgIGlmIChtb2RlbCA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLm1vZGVsSWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgnaWQnKSA/PyBuZXdNb2RlbElkO1xyXG4gICAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG4gICAgICBpZiAodGhpcy5tb2RlbElkKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbFNlcnZpY2UuZ2V0KHRoaXMubW9kZWxJZCwgY3VzdG9tSW5jbHVkZSkuc3Vic2NyaWJlKCh2YWx1ZTogVCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc0VkaXQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5nZW5lcmF0ZUZvcm0odmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hhbmdlVXJsUm91dGUpIHtcclxuICAgICAgICAgIGNvbnN0IGFkZFVybCA9IHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUoW10pLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICB0aGlzLmVkaXRSb3V0ZSA9IHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUoW2FkZFVybC5yZXBsYWNlKCdhZGQnLCAnZWRpdCcpXSkudG9TdHJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVGb3JtKHRoaXMubW9kZWxTZXJ2aWNlLm5ld01vZGVsKCkpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm1vZGVsSWQgPSBtb2RlbC5pZDtcclxuICAgICAgdGhpcy5pc0VkaXQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmdlbmVyYXRlRm9ybShtb2RlbClcclxuICAgIH1cclxuICB9XHJcbiAgZ2VuZXJhdGVGb3JtKG1vZGVsPzogVCkge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMubW9kZWxJZCA9IG1vZGVsLmlkO1xyXG4gICAgdGhpcy5tb2RlbCA9IG1vZGVsO1xyXG4gICAgdGhpcy5iYXNlRm9ybSA9IHRoaXMubW9kZWxTZXJ2aWNlLnRvRm9ybUdyb3VwKHRoaXMuZmIsIG1vZGVsKTtcclxuICAgIHRoaXMuYWZ0ZXJGb3JtR2VuZXJhdGVkKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBhZnRlckZvcm1HZW5lcmF0ZWQoKSB7XHJcblxyXG4gIH1cclxuICBwcml2YXRlIGdldEZyb21Hcm91cChmb3JtR3JvdXA6IEZvcm1Hcm91cCB8IHN0cmluZyA9IG51bGwpOiBGb3JtR3JvdXAge1xyXG4gICAgaWYgKCFmb3JtR3JvdXApXHJcbiAgICAgIHJldHVybiB0aGlzLmJhc2VGb3JtO1xyXG4gICAgaWYgKGZvcm1Hcm91cCBpbnN0YW5jZW9mIEZvcm1Hcm91cClcclxuICAgICAgcmV0dXJuIGZvcm1Hcm91cDtcclxuICAgIHJldHVybiB0aGlzLmJhc2VGb3JtLmNvbnRyb2xzW2Zvcm1Hcm91cF0gYXMgRm9ybUdyb3VwO1xyXG4gIH1cclxuICB2YWxpZGF0ZUFsbEZvcm1GaWVsZHMoZm9ybUdyb3VwOiBGb3JtR3JvdXAgfCBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICBjb25zdCBmZyA9IHRoaXMuZ2V0RnJvbUdyb3VwKGZvcm1Hcm91cClcclxuICAgIE9iamVjdC5rZXlzKGZnLmNvbnRyb2xzKS5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgLy8gY29uc29sZS5sb2coZmllbGQpO1xyXG4gICAgICBjb25zdCBjb250cm9sID0gZmcuZ2V0KGZpZWxkKTtcclxuICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkge1xyXG4gICAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCh7IG9ubHlTZWxmOiB0cnVlIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRlQWxsRm9ybUZpZWxkcyhjb250cm9sKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGlzRmllbGRWYWxpZChmaWVsZDogc3RyaW5nLCBmb3JtR3JvdXA6IEZvcm1Hcm91cCB8IHN0cmluZyA9IG51bGwpIHtcclxuICAgIGNvbnN0IGZnID0gdGhpcy5nZXRGcm9tR3JvdXAoZm9ybUdyb3VwKVxyXG4gICAgY29uc3QgZmlsZWRDb250cm9sID0gZmcuZ2V0KGZpZWxkKVxyXG4gICAgcmV0dXJuICFmaWxlZENvbnRyb2wudmFsaWQgJiYgZmlsZWRDb250cm9sLnRvdWNoZWQ7XHJcbiAgfVxyXG5cclxuICBpc0ZpZWxkVmFsaWRGcm9tQXJyYXkoYXJyYXlJbmRleDogbnVtYmVyLCBmaWVsZDogc3RyaW5nLCBhcnJheU5hbWU6IHN0cmluZyA9ICdmb3JtQXJyYXknKSB7XHJcbiAgICBjb25zdCBmaWVsZENvbnRyb2wgPSB0aGlzLmJhc2VGb3JtLmdldChhcnJheU5hbWUpLmdldChbYXJyYXlJbmRleF0pLmdldChmaWVsZClcclxuICAgIHJldHVybiAhZmllbGRDb250cm9sLnZhbGlkICYmIGZpZWxkQ29udHJvbC50b3VjaGVkO1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheUZpZWxkQ3NzKGZpZWxkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICdoYXMtZXJyb3InOiB0aGlzLmlzRmllbGRWYWxpZChmaWVsZCksXHJcbiAgICAgICdoYXMtZmVlZGJhY2snOiB0aGlzLmlzRmllbGRWYWxpZChmaWVsZClcclxuICAgIH07XHJcbiAgfVxyXG4gIG9uQ2FuY2VsKCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuY2FuY2VsUm91dGVdKTtcclxuICB9XHJcbiAgb25TYXZlKCkge1xyXG4gICAgdGhpcy5zYXZlTW9kZWwodGhpcy5iYXNlRm9ybSlcclxuICB9XHJcbiAgc2F2ZU1vZGVsKGZvcm1Hcm91cDogRm9ybUdyb3VwIHwgc3RyaW5nID0gbnVsbCkge1xyXG4gICAgY29uc3QgZmcgPSB0aGlzLmdldEZyb21Hcm91cChmb3JtR3JvdXApXHJcbiAgICBjb25zdCB0aGF0ID0gdGhpcztcclxuICAgIGlmIChmZykge1xyXG4gICAgICBpZiAoZmcudmFsaWQpIHtcclxuICAgICAgICB0aGF0LmJsb2NrVUkuc3RhcnQoJ1NhdmluZyAuLi4nKTtcclxuICAgICAgICB0aGlzLmJlZm9yZVNhdmUodGhpcy5tb2RlbCkuc3Vic2NyaWJlKF8gPT4ge1xyXG4gICAgICAgICAgdGhpcy5tb2RlbFNlcnZpY2Uuc2F2ZSh0aGlzLmJhc2VGb3JtLCB0aGlzLm1vZGVsSWQsIHRoaXMubW9kZWwpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgKG5ld01vZGVsOiBUKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tb2RlbCA9IG5ld01vZGVsO1xyXG4gICAgICAgICAgICAgIHRoaXMubW9kZWxJZCA9IG5ld01vZGVsLmlkO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmVkaXRSb3V0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0VkaXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hhbmdlVXJsUm91dGUpIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgdXJsID0gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShbdGhpcy5lZGl0Um91dGUsIHRoaXMubW9kZWxJZF0pLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHVybCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuYWZ0ZXJTYXZlKG5ld01vZGVsKS5zdWJzY3JpYmUoKHZhbDogVCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja1VJLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93U2F2ZU1lc3NhZ2UoJ1lvdXIgY2hhbmdlcyB3ZXJlIHNhdmVkIHN1Y2Nlc3NmdWxseS4nKS5zdWJzY3JpYmUoZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGZnLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNlcnZlckVycm9ycyhlcnIpXHJcbiAgICAgICAgICAgICAgdGhpcy5ibG9ja1VJLnN0b3AoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZUFsbEZvcm1GaWVsZHMoZm9ybUdyb3VwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBzZXJ2ZXJFcnJvcnMoZXJyOiBhbnkpIHtcclxuICAgIGlmIChlcnIuZXJyb3IpIHtcclxuICAgICAgaWYgKGVyci5lcnJvci5lcnJvcnMpIHtcclxuICAgICAgICBjb25zdCB2YWxpZGF0aW9uRXJyb3JzID0gZXJyLmVycm9yLmVycm9ycztcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWxpZGF0aW9uRXJyb3JzKSkge1xyXG4gICAgICAgICAgdmFsaWRhdGlvbkVycm9ycy5mb3JFYWNoKHByb3AgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuYmFzZUZvcm0uZ2V0KHByb3ApO1xyXG4gICAgICAgICAgICBpZiAoZm9ybUNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAvLyBhY3RpdmF0ZSB0aGUgZXJyb3IgbWVzc2FnZVxyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sLnNldEVycm9ycyh7XHJcbiAgICAgICAgICAgICAgICBzZXJ2ZXJFcnJvcjogdmFsaWRhdGlvbkVycm9yc1twcm9wXS5qb2luKCdcXG4nKVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbGlkYXRpb25FcnJvcnMpO1xyXG4gICAgICAgICAga2V5cy5mb3JFYWNoKHByb3AgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuYmFzZUZvcm0uZ2V0KHByb3ApO1xyXG4gICAgICAgICAgICBpZiAoZm9ybUNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAvLyBhY3RpdmF0ZSB0aGUgZXJyb3IgbWVzc2FnZVxyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sLnNldEVycm9ycyh7XHJcbiAgICAgICAgICAgICAgICBzZXJ2ZXJFcnJvcjogdmFsaWRhdGlvbkVycm9yc1twcm9wXS5qb2luKCdcXG4nKVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgY2FuRGVhY3RpdmF0ZSgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgYm9vbGVhbiB7XHJcbiAgICAvLyBBbGxvdyBzeW5jaHJvbm91cyBuYXZpZ2F0aW9uIChgdHJ1ZWApIGlmIG5vIGNyaXNpcyBvciB0aGUgY3Jpc2lzIGlzIHVuY2hhbmdlZFxyXG4gICAgaWYgKCF0aGlzLmJhc2VGb3JtLmRpcnR5KSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgLy8gT3RoZXJ3aXNlIGFzayB0aGUgdXNlciB3aXRoIHRoZSBkaWFsb2cgc2VydmljZSBhbmQgcmV0dXJuIGl0c1xyXG4gICAgLy8gb2JzZXJ2YWJsZSB3aGljaCByZXNvbHZlcyB0byB0cnVlIG9yIGZhbHNlIHdoZW4gdGhlIHVzZXIgZGVjaWRlc1xyXG4gICAgcmV0dXJuIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKCdEaXNjYXJkIGNoYW5nZXMgPycsIG51bGwsICdEaXNjYXJkJyk7XHJcbiAgfVxyXG4gIGdldEZpbGVkTmFtZShmaWxlZFRyYW5zbGF0aW9uS2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB7IGZpZWxkOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGZpbGVkVHJhbnNsYXRpb25LZXkpIH07XHJcbiAgfVxyXG4gIGdldEN1c3RvbUVycm9yTWVzc2FnZShlcnJvcjogYW55LCBmaWVsZExhYmVsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuICBnZXRFcnJvck1lc3NhZ2VGcm9tQXJyYXkoYXJyYXlJbmRleDogbnVtYmVyLCBmaWVsZDogc3RyaW5nLCBmaWxlZFRyYW5zbGF0aW9uS2V5OiBzdHJpbmcsIGFycmF5TmFtZTogc3RyaW5nID0gJ2Zvcm1BcnJheScpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZmllbGRDb250cm9sID0gdGhpcy5iYXNlRm9ybS5nZXQoYXJyYXlOYW1lKS5nZXQoW2FycmF5SW5kZXhdKS5nZXQoZmllbGQpXHJcbiAgICByZXR1cm4gdGhpcy5nZXRFcnJvck1lc3NhZ2VGb3JGaWVsZChmaWVsZENvbnRyb2wsIGZpbGVkVHJhbnNsYXRpb25LZXkpXHJcbiAgfVxyXG4gIGdldEVycm9yTWVzc2FnZShmaWVsZDogc3RyaW5nLCBmaWxlZFRyYW5zbGF0aW9uS2V5OiBzdHJpbmcsIGZvcm1Hcm91cDogRm9ybUdyb3VwIHwgc3RyaW5nID0gbnVsbCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBmZyA9IHRoaXMuZ2V0RnJvbUdyb3VwKGZvcm1Hcm91cClcclxuICAgIHJldHVybiB0aGlzLmdldEVycm9yTWVzc2FnZUZvckZpZWxkKGZnLmdldChmaWVsZCksIGZpbGVkVHJhbnNsYXRpb25LZXkpXHJcbiAgfVxyXG4gIGdldEVycm9yTWVzc2FnZUZvckZpZWxkKGZpZWxkQ29udHJvbDogYW55LCBmaWxlZFRyYW5zbGF0aW9uS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZXJyb3IgPSBmaWVsZENvbnRyb2wuZXJyb3JzO1xyXG4gICAgY29uc3QgZmllbGRMYWJlbCA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZmlsZWRUcmFuc2xhdGlvbktleSk7XHJcbiAgICBsZXQgcnZhbHVlID0gJyc7XHJcbiAgICBpZiAoZXJyb3IgIT09IG51bGwpIHtcclxuICAgICAgaWYgKGVycm9yWydyZXF1aXJlZCddID09PSB0cnVlKSB7XHJcbiAgICAgICAgcnZhbHVlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnR2VuZXJhbC5GaWVsZC5SZXF1aXJlZCcsIHsgZmllbGQ6IGZpZWxkTGFiZWwgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGVycm9yWydtaW5sZW5ndGgnXSkge1xyXG4gICAgICAgIHJ2YWx1ZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ0dlbmVyYWwuRmllbGQuTWluTGVuZ3RoJywgeyBmaWVsZDogZmllbGRMYWJlbCwgcmVxdWlyZWRMZW5ndGg6IGVycm9yLm1pbmxlbmd0aC5yZXF1aXJlZExlbmd0aCB9KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZXJyb3JbJ2VtYWlsJ10gPT09IHRydWUpIHtcclxuICAgICAgICBydmFsdWUgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdHZW5lcmFsLkZpZWxkLkludmFsaWRFbWFpbCcpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChlcnJvclsndXJsJ10gPT09IHRydWUpIHtcclxuICAgICAgICBydmFsdWUgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdHZW5lcmFsLkZpZWxkLkludmFsaWRVcmwnKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZXJyb3JbJ3NlcnZlckVycm9yJ10pIHtcclxuICAgICAgICBydmFsdWUgPSBlcnJvclsnc2VydmVyRXJyb3InXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocnZhbHVlID09PSAnJykge1xyXG4gICAgICAgIHJ2YWx1ZSA9IHRoaXMuZ2V0Q3VzdG9tRXJyb3JNZXNzYWdlKGVycm9yLCBmaWVsZExhYmVsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJ2YWx1ZTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,15 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class FieldErrorDisplayComponent {
4
+ }
5
+ FieldErrorDisplayComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: FieldErrorDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6
+ FieldErrorDisplayComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: FieldErrorDisplayComponent, selector: "rsl-field-error-display", inputs: { errorMsg: "errorMsg", displayError: "displayError" }, ngImport: i0, template: "<div *ngIf=\"displayError\" >\n <!-- <span class=\"glyphicon glyphicon-remove form-control-feedback fix-error-icon\"></span> -->\n <span class=\"sr-only\">(error)</span>\n <div class=\"error-msg\">\n {{ errorMsg }}\n </div>\n</div>\n", styles: [".error-msg{color:red}.fix-error-icon{top:27px}\n"] });
7
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: FieldErrorDisplayComponent, decorators: [{
8
+ type: Component,
9
+ args: [{ selector: 'rsl-field-error-display', template: "<div *ngIf=\"displayError\" >\n <!-- <span class=\"glyphicon glyphicon-remove form-control-feedback fix-error-icon\"></span> -->\n <span class=\"sr-only\">(error)</span>\n <div class=\"error-msg\">\n {{ errorMsg }}\n </div>\n</div>\n", styles: [".error-msg{color:red}.fix-error-icon{top:27px}\n"] }]
10
+ }], propDecorators: { errorMsg: [{
11
+ type: Input
12
+ }], displayError: [{
13
+ type: Input
14
+ }] } });
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtZXJyb3ItZGlzcGxheS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvY29yZS9zcmMvbGliL2Jhc2UtY29tcG9uZW50cy9maWVsZC1lcnJvci1kaXNwbGF5L2ZpZWxkLWVycm9yLWRpc3BsYXkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcm9zb2Z0bGFiL2NvcmUvc3JjL2xpYi9iYXNlLWNvbXBvbmVudHMvZmllbGQtZXJyb3ItZGlzcGxheS9maWVsZC1lcnJvci1kaXNwbGF5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU9qRCxNQUFNLE9BQU8sMEJBQTBCOzt1SEFBMUIsMEJBQTBCOzJHQUExQiwwQkFBMEIsK0hDUHZDLGtQQU9BOzJGREFhLDBCQUEwQjtrQkFMdEMsU0FBUzsrQkFDRSx5QkFBeUI7OEJBTTFCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnNsLWZpZWxkLWVycm9yLWRpc3BsYXknLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9maWVsZC1lcnJvci1kaXNwbGF5LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9maWVsZC1lcnJvci1kaXNwbGF5LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEZpZWxkRXJyb3JEaXNwbGF5Q29tcG9uZW50IHtcclxuXHJcbiAgQElucHV0KCkgZXJyb3JNc2c6IHN0cmluZztcclxuICBASW5wdXQoKSBkaXNwbGF5RXJyb3I6IGJvb2xlYW47XHJcblxyXG59XHJcbiIsIjxkaXYgKm5nSWY9XCJkaXNwbGF5RXJyb3JcIiA+XG4gIDwhLS0gPHNwYW4gY2xhc3M9XCJnbHlwaGljb24gZ2x5cGhpY29uLXJlbW92ZSBmb3JtLWNvbnRyb2wtZmVlZGJhY2sgZml4LWVycm9yLWljb25cIj48L3NwYW4+IC0tPlxuICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj4oZXJyb3IpPC9zcGFuPlxuICA8ZGl2IGNsYXNzPVwiZXJyb3ItbXNnXCI+XG4gICAge3sgZXJyb3JNc2cgfX1cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==