@decaf-ts/for-angular 0.0.25 → 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.
Files changed (78) hide show
  1. package/fesm2022/decaf-ts-for-angular.mjs +1465 -1488
  2. package/fesm2022/decaf-ts-for-angular.mjs.map +1 -1
  3. package/index.d.ts +7470 -3
  4. package/package.json +14 -17
  5. package/components/component-renderer/component-renderer.component.d.ts +0 -278
  6. package/components/crud-field/crud-field.component.d.ts +0 -611
  7. package/components/crud-form/constants.d.ts +0 -5
  8. package/components/crud-form/crud-form.component.d.ts +0 -288
  9. package/components/crud-form/types.d.ts +0 -17
  10. package/components/empty-state/empty-state.component.d.ts +0 -300
  11. package/components/fieldset/fieldset.component.d.ts +0 -555
  12. package/components/filter/filter.component.d.ts +0 -514
  13. package/components/for-angular-components.module.d.ts +0 -20
  14. package/components/index.d.ts +0 -16
  15. package/components/layout/layout.component.d.ts +0 -110
  16. package/components/list/list.component.d.ts +0 -848
  17. package/components/list-item/list-item.component.d.ts +0 -390
  18. package/components/model-renderer/model-renderer.component.d.ts +0 -97
  19. package/components/pagination/constants.d.ts +0 -7
  20. package/components/pagination/pagination.component.d.ts +0 -264
  21. package/components/searchbar/searchbar.component.d.ts +0 -407
  22. package/components/stepped-form/stepped-form.component.d.ts +0 -255
  23. package/directives/collapsable.directive.d.ts +0 -9
  24. package/directives/index.d.ts +0 -1
  25. package/engine/DynamicModule.d.ts +0 -17
  26. package/engine/NgxBaseComponent.d.ts +0 -541
  27. package/engine/NgxCrudFormField.d.ts +0 -123
  28. package/engine/NgxFormService.d.ts +0 -601
  29. package/engine/NgxRenderingEngine.d.ts +0 -282
  30. package/engine/ValidatorFactory.d.ts +0 -15
  31. package/engine/constants.d.ts +0 -168
  32. package/engine/decorators.d.ts +0 -25
  33. package/engine/index.d.ts +0 -18
  34. package/engine/interfaces.d.ts +0 -271
  35. package/engine/types.d.ts +0 -200
  36. package/esm2022/components/component-renderer/component-renderer.component.mjs +0 -321
  37. package/esm2022/components/crud-field/crud-field.component.mjs +0 -518
  38. package/esm2022/components/crud-form/constants.mjs +0 -14
  39. package/esm2022/components/crud-form/crud-form.component.mjs +0 -259
  40. package/esm2022/components/crud-form/types.mjs +0 -2
  41. package/esm2022/components/empty-state/empty-state.component.mjs +0 -345
  42. package/esm2022/components/fieldset/fieldset.component.mjs +0 -677
  43. package/esm2022/components/filter/filter.component.mjs +0 -700
  44. package/esm2022/components/for-angular-components.module.mjs +0 -84
  45. package/esm2022/components/index.mjs +0 -20
  46. package/esm2022/components/layout/layout.component.mjs +0 -150
  47. package/esm2022/components/list/list.component.mjs +0 -1238
  48. package/esm2022/components/list-item/list-item.component.mjs +0 -405
  49. package/esm2022/components/model-renderer/model-renderer.component.mjs +0 -144
  50. package/esm2022/components/pagination/constants.mjs +0 -2
  51. package/esm2022/components/pagination/pagination.component.mjs +0 -321
  52. package/esm2022/components/searchbar/searchbar.component.mjs +0 -491
  53. package/esm2022/components/stepped-form/stepped-form.component.mjs +0 -306
  54. package/esm2022/decaf-ts-for-angular.mjs +0 -5
  55. package/esm2022/directives/collapsable.directive.mjs +0 -29
  56. package/esm2022/directives/index.mjs +0 -2
  57. package/esm2022/engine/DynamicModule.mjs +0 -18
  58. package/esm2022/engine/NgxBaseComponent.mjs +0 -541
  59. package/esm2022/engine/NgxCrudFormField.mjs +0 -137
  60. package/esm2022/engine/NgxFormService.mjs +0 -917
  61. package/esm2022/engine/NgxRenderingEngine.mjs +0 -376
  62. package/esm2022/engine/ValidatorFactory.mjs +0 -106
  63. package/esm2022/engine/constants.mjs +0 -170
  64. package/esm2022/engine/decorators.mjs +0 -38
  65. package/esm2022/engine/index.mjs +0 -19
  66. package/esm2022/engine/interfaces.mjs +0 -4
  67. package/esm2022/engine/types.mjs +0 -2
  68. package/esm2022/for-angular-common.module.mjs +0 -84
  69. package/esm2022/helpers/index.mjs +0 -13
  70. package/esm2022/helpers/utils.mjs +0 -436
  71. package/esm2022/i18n/Loader.mjs +0 -86
  72. package/esm2022/i18n/data/en.json +0 -85
  73. package/esm2022/public-apis.mjs +0 -15
  74. package/for-angular-common.module.d.ts +0 -50
  75. package/helpers/index.d.ts +0 -12
  76. package/helpers/utils.d.ts +0 -279
  77. package/i18n/Loader.d.ts +0 -43
  78. 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=