@decaf-ts/for-angular 0.0.24 → 0.0.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/decaf-ts-for-angular.mjs +1512 -1517
- package/fesm2022/decaf-ts-for-angular.mjs.map +1 -1
- package/index.d.ts +7470 -3
- package/package.json +14 -17
- package/components/component-renderer/component-renderer.component.d.ts +0 -278
- package/components/crud-field/crud-field.component.d.ts +0 -611
- package/components/crud-form/constants.d.ts +0 -5
- package/components/crud-form/crud-form.component.d.ts +0 -288
- package/components/crud-form/types.d.ts +0 -17
- package/components/empty-state/empty-state.component.d.ts +0 -300
- package/components/fieldset/fieldset.component.d.ts +0 -555
- package/components/filter/filter.component.d.ts +0 -514
- package/components/for-angular-components.module.d.ts +0 -20
- package/components/index.d.ts +0 -16
- package/components/layout/layout.component.d.ts +0 -110
- package/components/list/list.component.d.ts +0 -848
- package/components/list-item/list-item.component.d.ts +0 -390
- package/components/model-renderer/model-renderer.component.d.ts +0 -97
- package/components/pagination/constants.d.ts +0 -7
- package/components/pagination/pagination.component.d.ts +0 -264
- package/components/searchbar/searchbar.component.d.ts +0 -407
- package/components/steped-form/steped-form.component.d.ts +0 -243
- package/directives/collapsable.directive.d.ts +0 -9
- package/directives/index.d.ts +0 -1
- package/engine/DynamicModule.d.ts +0 -17
- package/engine/NgxBaseComponent.d.ts +0 -541
- package/engine/NgxCrudFormField.d.ts +0 -123
- package/engine/NgxFormService.d.ts +0 -601
- package/engine/NgxRenderingEngine.d.ts +0 -282
- package/engine/ValidatorFactory.d.ts +0 -15
- package/engine/constants.d.ts +0 -168
- package/engine/decorators.d.ts +0 -25
- package/engine/index.d.ts +0 -18
- package/engine/interfaces.d.ts +0 -271
- package/engine/types.d.ts +0 -200
- package/esm2022/components/component-renderer/component-renderer.component.mjs +0 -321
- package/esm2022/components/crud-field/crud-field.component.mjs +0 -518
- package/esm2022/components/crud-form/constants.mjs +0 -14
- package/esm2022/components/crud-form/crud-form.component.mjs +0 -259
- package/esm2022/components/crud-form/types.mjs +0 -2
- package/esm2022/components/empty-state/empty-state.component.mjs +0 -345
- package/esm2022/components/fieldset/fieldset.component.mjs +0 -677
- package/esm2022/components/filter/filter.component.mjs +0 -700
- package/esm2022/components/for-angular-components.module.mjs +0 -84
- package/esm2022/components/index.mjs +0 -20
- package/esm2022/components/layout/layout.component.mjs +0 -150
- package/esm2022/components/list/list.component.mjs +0 -1238
- package/esm2022/components/list-item/list-item.component.mjs +0 -405
- package/esm2022/components/model-renderer/model-renderer.component.mjs +0 -144
- package/esm2022/components/pagination/constants.mjs +0 -2
- package/esm2022/components/pagination/pagination.component.mjs +0 -321
- package/esm2022/components/searchbar/searchbar.component.mjs +0 -491
- package/esm2022/components/steped-form/steped-form.component.mjs +0 -291
- package/esm2022/decaf-ts-for-angular.mjs +0 -5
- package/esm2022/directives/collapsable.directive.mjs +0 -29
- package/esm2022/directives/index.mjs +0 -2
- package/esm2022/engine/DynamicModule.mjs +0 -18
- package/esm2022/engine/NgxBaseComponent.mjs +0 -541
- package/esm2022/engine/NgxCrudFormField.mjs +0 -137
- package/esm2022/engine/NgxFormService.mjs +0 -917
- package/esm2022/engine/NgxRenderingEngine.mjs +0 -376
- package/esm2022/engine/ValidatorFactory.mjs +0 -106
- package/esm2022/engine/constants.mjs +0 -170
- package/esm2022/engine/decorators.mjs +0 -38
- package/esm2022/engine/index.mjs +0 -19
- package/esm2022/engine/interfaces.mjs +0 -4
- package/esm2022/engine/types.mjs +0 -2
- package/esm2022/for-angular-common.module.mjs +0 -84
- package/esm2022/helpers/index.mjs +0 -13
- package/esm2022/helpers/utils.mjs +0 -436
- package/esm2022/i18n/Loader.mjs +0 -86
- package/esm2022/i18n/data/en.json +0 -80
- package/esm2022/public-apis.mjs +0 -15
- package/for-angular-common.module.d.ts +0 -50
- package/helpers/index.d.ts +0 -12
- package/helpers/utils.d.ts +0 -279
- package/i18n/Loader.d.ts +0 -43
- package/public-apis.d.ts +0 -14
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
import { RenderingError } from '@decaf-ts/ui-decorators';
|
|
2
|
-
import { InternalError, OperationKeys } from '@decaf-ts/db-decorators';
|
|
3
|
-
import { inject } from '@angular/core';
|
|
4
|
-
import { NgxFormService } from './NgxFormService';
|
|
5
|
-
import { sf } from '@decaf-ts/decorator-validation';
|
|
6
|
-
import { TranslateService } from '@ngx-translate/core';
|
|
7
|
-
import { EventConstants } from './constants';
|
|
8
|
-
/**
|
|
9
|
-
* @class NgxCrudFormField
|
|
10
|
-
* @implements {FieldProperties}
|
|
11
|
-
* @implements {ControlValueAccessor}
|
|
12
|
-
* @summary Abstract class representing a CRUD form field for Angular applications
|
|
13
|
-
* @description This class provides the base implementation for CRUD form fields in Angular,
|
|
14
|
-
* implementing both CrudFormField and ControlValueAccessor interfaces.
|
|
15
|
-
*/
|
|
16
|
-
export class NgxCrudFormField {
|
|
17
|
-
constructor() {
|
|
18
|
-
this.translateService = inject(TranslateService);
|
|
19
|
-
this.validationErrorEventDispateched = false;
|
|
20
|
-
// protected constructor() {}
|
|
21
|
-
/**
|
|
22
|
-
* @summary String formatting function
|
|
23
|
-
* @description Provides access to the sf function for error message formatting
|
|
24
|
-
* @prop {function(string, ...string): string} sf - String formatting function
|
|
25
|
-
*/
|
|
26
|
-
this.sf = sf;
|
|
27
|
-
/**
|
|
28
|
-
* @summary Change callback function
|
|
29
|
-
* @description Function called when the field value changes
|
|
30
|
-
* @property {function(): unknown} onChange - onChange event handler
|
|
31
|
-
*/
|
|
32
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
33
|
-
this.onChange = () => { };
|
|
34
|
-
/**
|
|
35
|
-
* @summary Touch callback function
|
|
36
|
-
* @description Function called when the field is touched
|
|
37
|
-
* @property {function(): unknown} onTouch - onTouch event handler
|
|
38
|
-
*/
|
|
39
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
40
|
-
this.onTouch = () => { };
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* @summary Write value to the field
|
|
44
|
-
* @description Sets the value of the field
|
|
45
|
-
* @param {string} obj - The value to be set
|
|
46
|
-
*/
|
|
47
|
-
writeValue(obj) {
|
|
48
|
-
this.value = obj;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* @summary Register change callback
|
|
52
|
-
* @description Registers a function to be called when the field value changes
|
|
53
|
-
* @param {function(): unknown} fn - The function to be called on change
|
|
54
|
-
*/
|
|
55
|
-
registerOnChange(fn) {
|
|
56
|
-
this.onChange = fn;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* @summary Register touch callback
|
|
60
|
-
* @description Registers a function to be called when the field is touched
|
|
61
|
-
* @param {function(): unknown} fn - The function to be called on touch
|
|
62
|
-
*/
|
|
63
|
-
registerOnTouched(fn) {
|
|
64
|
-
this.onTouch = fn;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* @summary Set disabled state
|
|
68
|
-
* @description Sets the disabled state of the field
|
|
69
|
-
* @param {boolean} isDisabled - Whether the field should be disabled
|
|
70
|
-
*/
|
|
71
|
-
setDisabledState(isDisabled) {
|
|
72
|
-
this.disabled = isDisabled;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* @summary After view initialization logic
|
|
76
|
-
* @description Performs necessary setup after the view has been initialized
|
|
77
|
-
* @returns {HTMLElement} The parent element of the field
|
|
78
|
-
*/
|
|
79
|
-
afterViewInit() {
|
|
80
|
-
let parent;
|
|
81
|
-
switch (this.operation) {
|
|
82
|
-
case OperationKeys.READ:
|
|
83
|
-
case OperationKeys.DELETE:
|
|
84
|
-
return this.component.nativeElement.parentElement;
|
|
85
|
-
case OperationKeys.CREATE:
|
|
86
|
-
case OperationKeys.UPDATE:
|
|
87
|
-
try {
|
|
88
|
-
parent = NgxFormService.getParentEl(this.component.nativeElement, 'div');
|
|
89
|
-
}
|
|
90
|
-
catch (e) {
|
|
91
|
-
throw new RenderingError(`Unable to retrieve parent form element for the ${this.operation}: ${e instanceof Error ? e.message : e}`);
|
|
92
|
-
}
|
|
93
|
-
// NgxFormService.register(parent.id, this.formGroup, this as AngularFieldDefinition);
|
|
94
|
-
return parent;
|
|
95
|
-
default:
|
|
96
|
-
throw new InternalError(`Invalid operation: ${this.operation}`);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* @summary Cleanup on component destruction
|
|
101
|
-
* @description Unregisters the field when the component is destroyed
|
|
102
|
-
*/
|
|
103
|
-
onDestroy() {
|
|
104
|
-
if (this.formGroup)
|
|
105
|
-
NgxFormService.unregister(this.formGroup);
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* @summary Get field errors
|
|
109
|
-
* @description Retrieves all errors associated with the field
|
|
110
|
-
* @returns {string|void} An array of error objects
|
|
111
|
-
*/
|
|
112
|
-
getErrors(parent) {
|
|
113
|
-
const formControl = this.formControl;
|
|
114
|
-
if (formControl) {
|
|
115
|
-
const accordionComponent = parent.closest('ngx-decaf-fieldset')?.querySelector('ion-accordion-group');
|
|
116
|
-
if ((!formControl.pristine || formControl.touched) && !formControl.valid) {
|
|
117
|
-
const errors = Object.keys(formControl.errors ?? {}).map(key => ({
|
|
118
|
-
key: key,
|
|
119
|
-
message: key,
|
|
120
|
-
}));
|
|
121
|
-
if (errors.length) {
|
|
122
|
-
if (accordionComponent && !this.validationErrorEventDispateched) {
|
|
123
|
-
const validationErrorEvent = new CustomEvent(EventConstants.VALIDATION_ERROR, {
|
|
124
|
-
detail: { fieldName: this.name, hasErrors: true },
|
|
125
|
-
bubbles: true
|
|
126
|
-
});
|
|
127
|
-
accordionComponent.dispatchEvent(validationErrorEvent);
|
|
128
|
-
this.validationErrorEventDispateched = true;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
for (const error of errors)
|
|
132
|
-
return `* ${this.sf(this.translateService.instant(`errors.${error?.['message']}`), this[error?.['key']] ?? "")}`;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmd4Q3J1ZEZvcm1GaWVsZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL05neENydWRGb3JtRmllbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFzQyxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU3RixPQUFPLEVBQWtCLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV2RixPQUFPLEVBQWMsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU3Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFnQixnQkFBZ0I7SUFBdEM7UUEwRFkscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFOUMsb0NBQStCLEdBQVksS0FBSyxDQUFDO1FBUXpELDZCQUE2QjtRQUU3Qjs7OztXQUlHO1FBQ0gsT0FBRSxHQUFHLEVBQUUsQ0FBQztRQUVSOzs7O1dBSUc7UUFDSCxnRUFBZ0U7UUFDaEUsYUFBUSxHQUFrQixHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFFbkM7Ozs7V0FJRztRQUNILGdFQUFnRTtRQUNoRSxZQUFPLEdBQWtCLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQXNHcEMsQ0FBQztJQXBHQzs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLEdBQVc7UUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxnQkFBZ0IsQ0FBQyxFQUFpQjtRQUNoQyxJQUFJLENB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SSxNQUFNLEtBQUssSUFBSSxNQUFNO29CQUN2QixPQUFPLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFVBQVUsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFHLElBQWlCLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ25JLENBQUM7UUFDSCxDQUFDO0lBRUgsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3J1ZE9wZXJhdGlvbktleXMsIEZpZWxkUHJvcGVydGllcywgUmVuZGVyaW5nRXJyb3IgfSBmcm9tICdAZGVjYWYtdHMvdWktZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBLZXlWYWx1ZSwgUG9zc2libGVJbnB1dFR5cGVzIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBDcnVkT3BlcmF0aW9ucywgSW50ZXJuYWxFcnJvciwgT3BlcmF0aW9uS2V5cyB9IGZyb20gJ0BkZWNhZi10cy9kYi1kZWNvcmF0b3JzJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRWxlbWVudFJlZiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3hGb3JtU2VydmljZSB9IGZyb20gJy4vTmd4Rm9ybVNlcnZpY2UnO1xuaW1wb3J0IHsgc2YgfSBmcm9tICdAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb24nO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRXZlbnRDb25zdGFudHMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogQGNsYXNzIE5neENydWRGb3JtRmllbGRcbiAqIEBpbXBsZW1lbnRzIHtGaWVsZFByb3BlcnRpZXN9XG4gKiBAaW1wbGVtZW50cyB7Q29udHJvbFZhbHVlQWNjZXNzb3J9XG4gKiBAc3VtbWFyeSBBYnN0cmFjdCBjbGFzcyByZXByZXNlbnRpbmcgYSBDUlVEIGZvcm0gZmllbGQgZm9yIEFuZ3VsYXIgYXBwbGljYXRpb25zXG4gKiBAZGVzY3JpcHRpb24gVGhpcyBjbGFzcyBwcm92aWRlcyB0aGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBmb3IgQ1JVRCBmb3JtIGZpZWxkcyBpbiBBbmd1bGFyLFxuICogaW1wbGVtZW50aW5nIGJvdGggQ3J1ZEZvcm1GaWVsZCBhbmQgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5neENydWRGb3JtRmllbGQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRmllbGRQcm9wZXJ0aWVzIHtcbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFJlZmVyZW5jZSB0byB0aGUgY29tcG9uZW50J3MgZWxlbWVudFxuICAgKiBAZGVzY3JpcHRpb24gRWxlbWVudFJlZiByZXByZXNlbnRpbmcgdGhlIGNvbXBvbmVudCdzIG5hdGl2ZSBlbGVtZW50XG4gICAqL1xuICBjb21wb25lbnQhOiBFbGVtZW50UmVmO1xuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBDdXJyZW50IENSVUQgb3BlcmF0aW9uXG4gICAqIEBkZXNjcmlwdGlvbiBSZXByZXNlbnRzIHRoZSBjdXJyZW50IENSVUQgb3BlcmF0aW9uIGJlaW5nIHBlcmZvcm1lZFxuICAgKi9cbiAgb3BlcmF0aW9uITogQ3J1ZE9wZXJhdGlvbnM7XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IEZvcm0gZ3JvdXAgZm9yIHRoZSBmaWVsZFxuICAgKiBAZGVzY3JpcHRpb24gQW5ndWxhciBGb3JtR3JvdXAgaW5zdGFuY2UgZm9yIHRoZSBmaWVsZFxuICAgKi9cbiAgZm9ybUdyb3VwITogRm9ybUdyb3VwIHwgdW5kZWZpbmVkO1xuXG4gIGZvcm1Db250cm9sITogRm9ybUNvbnRyb2w7XG5cbiAgbmFtZSE6IHN0cmluZztcblxuICBwYXRoITogc3RyaW5nO1xuXG4gIGNoaWxkT2Y/OiBzdHJpbmc7XG5cbiAgdHlwZSE6IFBvc3NpYmxlSW5wdXRUeXBlcztcblxuICBkaXNhYmxlZD86IGJvb2xlYW47XG5cbiAgdWlkPzogc3RyaW5nO1xuXG4gIHBhZ2UhOiBudW1iZXI7XG5cbiAgLy8gVmFsaWRhdGlvblxuXG4gIGZvcm1hdD86IHN0cmluZztcbiAgaGlkZGVuPzogYm9vbGVhbiB8IENydWRPcGVyYXRpb25LZXlzW107XG4gIG1heD86IG51bWJlciB8IERhdGU7XG4gIG1heGxlbmd0aD86IG51bWJlcjtcbiAgbWluPzogbnVtYmVyIHwgRGF0ZTtcbiAgbWlubGVuZ3RoPzogbnVtYmVyO1xuICBwYXR0ZXJuPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWFkb25seT86IGJvb2xlYW47XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgc3RlcD86IG51bWJlcjtcbiAgZXF1YWxzPzogc3RyaW5nO1xuICBkaWZmZXJlbnQ/OiBzdHJpbmc7XG4gIGxlc3NUaGFuPzogc3RyaW5nO1xuICBsZXNzVGhhbk9yRXF1YWw/OiBzdHJpbmc7XG4gIGdyZWF0ZXJUaGFuPzogc3RyaW5nO1xuICBncmVhdGVyVGhhbk9yRXF1YWw/OiBzdHJpbmc7XG5cbiAgdmFsdWUhOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlO1xuXG4gIG11bHRpcGxlITogYm9vbGVhbjtcblxuICBwcm90ZWN0ZWQgdHJhbnNsYXRlU2VydmljZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcblxuICBwcml2YXRlIHZhbGlkYXRpb25FcnJvckV2ZW50RGlzcGF0ZWNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQHN1bW1hcnkgUGFyZW50IEhUTUwgZWxlbWVudFxuICAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgSFRNTCBlbGVtZW50IG9mIHRoZSBmaWVsZFxuICAgKi9cbiAgcHJvdGVjdGVkIHBhcmVudD86IEhUTUxFbGVtZW50O1xuXG4gIC8vIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFN0cmluZyBmb3JtYXR0aW5nIGZ1bmN0aW9uXG4gICAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIHNmIGZ1bmN0aW9uIGZvciBlcnJvciBtZXNzYWdlIGZvcm1hdHRpbmdcbiAgICogQHByb3Age2Z1bmN0aW9uKHN0cmluZywgLi4uc3RyaW5nKTogc3RyaW5nfSBzZiAtIFN0cmluZyBmb3JtYXR0aW5nIGZ1bmN0aW9uXG4gICAqL1xuICBzZiA9IHNmO1xuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBDaGFuZ2UgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICogQGRlc2NyaXB0aW9uIEZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBmaWVsZCB2YWx1ZSBjaGFuZ2VzXG4gICAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogdW5rbm93bn0gb25DaGFuZ2UgLSBvbkNoYW5nZSBldmVudCBoYW5kbGVyXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIG9uQ2hhbmdlOiAoKSA9PiB1bmtub3duID0gKCkgPT4ge307XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFRvdWNoIGNhbGxiYWNrIGZ1bmN0aW9uXG4gICAqIEBkZXNjcmlwdGlvbiBGdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgZmllbGQgaXMgdG91Y2hlZFxuICAgKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IHVua25vd259IG9uVG91Y2ggLSBvblRvdWNoIGV2ZW50IGhhbmRsZXJcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgb25Ub3VjaDogKCkgPT4gdW5rbm93biA9ICgpID0+IHt9O1xuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBXcml0ZSB2YWx1ZSB0byB0aGUgZmllbGRcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gb2JqIC0gVGhlIHZhbHVlIHRvIGJlIHNldFxuICAgKi9cbiAgd3JpdGVWYWx1ZShvYmo6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSBvYmo7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgUmVnaXN0ZXIgY2hhbmdlIGNhbGxiYWNrXG4gICAqIEBkZXNjcmlwdGlvbiBSZWdpc3RlcnMgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZmllbGQgdmFsdWUgY2hhbmdlc1xuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCk6IHVua25vd259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiBjaGFuZ2VcbiAgICovXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICgpID0+IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgUmVnaXN0ZXIgdG91Y2ggY2FsbGJhY2tcbiAgICogQGRlc2NyaXB0aW9uIFJlZ2lzdGVycyBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBmaWVsZCBpcyB0b3VjaGVkXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oKTogdW5rbm93bn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIHRvdWNoXG4gICAqL1xuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaCA9IGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFNldCBkaXNhYmxlZCBzdGF0ZVxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIGZpZWxkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNEaXNhYmxlZCAtIFdoZXRoZXIgdGhlIGZpZWxkIHNob3VsZCBiZSBkaXNhYmxlZFxuICAgKi9cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IEFmdGVyIHZpZXcgaW5pdGlhbGl6YXRpb24gbG9naWNcbiAgICogQGRlc2NyaXB0aW9uIFBlcmZvcm1zIG5lY2Vzc2FyeSBzZXR1cCBhZnRlciB0aGUgdmlldyBoYXMgYmVlbiBpbml0aWFsaXplZFxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9IFRoZSBwYXJlbnQgZWxlbWVudCBvZiB0aGUgZmllbGRcbiAgICovXG4gIGFmdGVyVmlld0luaXQoKTogSFRNTEVsZW1lbnQge1xuICAgIGxldCBwYXJlbnQ6IEhUTUxFbGVtZW50O1xuICAgIHN3aXRjaCAodGhpcy5vcGVyYXRpb24pIHtcbiAgICAgIGNhc2UgT3BlcmF0aW9uS2V5cy5SRUFEOlxuICAgICAgY2FzZSBPcGVyYXRpb25LZXlzLkRFTEVURTpcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgIGNhc2UgT3BlcmF0aW9uS2V5cy5DUkVBVEU6XG4gICAgICBjYXNlIE9wZXJhdGlvbktleXMuVVBEQVRFOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIHBhcmVudCA9IE5neEZvcm1TZXJ2aWNlLmdldFBhcmVudEVsKHRoaXMuY29tcG9uZW50Lm5hdGl2ZUVsZW1lbnQsICdkaXYnKTtcbiAgICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAgIHRocm93IG5ldyBSZW5kZXJpbmdFcnJvcihgVW5hYmxlIHRvIHJldHJpZXZlIHBhcmVudCBmb3JtIGVsZW1lbnQgZm9yIHRoZSAke3RoaXMub3BlcmF0aW9ufTogJHtlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBlfWApO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5neEZvcm1TZXJ2aWNlLnJlZ2lzdGVyKHBhcmVudC5pZCwgdGhpcy5mb3JtR3JvdXAsIHRoaXMgYXMgQW5ndWxhckZpZWxkRGVmaW5pdGlvbik7XG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgSW52YWxpZCBvcGVyYXRpb246ICR7dGhpcy5vcGVyYXRpb259YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IENsZWFudXAgb24gY29tcG9uZW50IGRlc3RydWN0aW9uXG4gICAqIEBkZXNjcmlwdGlvbiBVbnJlZ2lzdGVycyB0aGUgZmllbGQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZFxuICAgKi9cbiAgb25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmKHRoaXMuZm9ybUdyb3VwKVxuICAgICAgTmd4Rm9ybVNlcnZpY2UudW5yZWdpc3Rlcih0aGlzLmZvcm1Hcm91cCk7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgR2V0IGZpZWxkIGVycm9yc1xuICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGFsbCBlcnJvcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWVsZFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfHZvaWR9IEFuIGFycmF5IG9mIGVycm9yIG9iamVjdHNcbiAgICovXG4gIGdldEVycm9ycyhwYXJlbnQ6IEhUTUxFbGVtZW50KTogc3RyaW5nIHwgdm9pZCB7XG4gICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLmZvcm1Db250cm9sO1xuICAgIGlmKGZvcm1Db250cm9sKSB7XG4gICAgICBjb25zdCBhY2NvcmRpb25Db21wb25lbnQgPSBwYXJlbnQuY2xvc2VzdCgnbmd4LWRlY2FmLWZpZWxkc2V0Jyk/LnF1ZXJ5U2VsZWN0b3IoJ2lvbi1hY2NvcmRpb24tZ3JvdXAnKTtcbiAgICAgIGlmKCghZm9ybUNvbnRyb2wucHJpc3RpbmUgfHwgZm9ybUNvbnRyb2wudG91Y2hlZCkgJiYgIWZvcm1Db250cm9sLnZhbGlkKSB7XG4gICAgICAgIGNvbnN0IGVycm9yczogUmVjb3JkPHN0cmluZywgc3RyaW5nPltdID0gT2JqZWN0LmtleXMoZm9ybUNvbnRyb2wuZXJyb3JzID8/IHt9KS5tYXAoa2V5ID0+ICh7XG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgbWVzc2FnZToga2V5LFxuICAgICAgICB9KSk7XG4gICAgICAgIGlmKGVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICBpZihhY2NvcmRpb25Db21wb25lbnQgJiYgIXRoaXMudmFsaWRhdGlvbkVycm9yRXZlbnREaXNwYXRlY2hlZCkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvbkVycm9yRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoRXZlbnRDb25zdGFudHMuVkFMSURBVElPTl9FUlJPUiwge1xuICAgICAgICAgICAgICBkZXRhaWw6IHtmaWVsZE5hbWU6IHRoaXMubmFtZSwgaGFzRXJyb3JzOiB0cnVlfSxcbiAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhY2NvcmRpb25Db21wb25lbnQuZGlzcGF0Y2hFdmVudCh2YWxpZGF0aW9uRXJyb3JFdmVudCk7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvckV2ZW50RGlzcGF0ZWNoZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IoY29uc3QgZXJyb3Igb2YgZXJyb3JzKVxuICAgICAgICAgIHJldHVybiBgKiAke3RoaXMuc2YodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYGVycm9ycy4ke2Vycm9yPy5bJ21lc3NhZ2UnXX1gKSwgKHRoaXMgYXMgS2V5VmFsdWUpW2Vycm9yPy5bJ2tleSddXSA/PyBcIlwiKX1gO1xuICAgICAgfVxuICAgIH1cblxuICB9XG59XG4iXX0=
|