ngx-material-entity 0.1.1 → 0.1.4

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 (133) hide show
  1. package/CONTRIBUTING.md +7 -1
  2. package/README.md +536 -328
  3. package/classes/base.builder.d.ts +35 -0
  4. package/classes/date.utilities.d.ts +58 -0
  5. package/classes/entity.model.d.ts +13 -0
  6. package/classes/{entity-service.class.d.ts → entity.service.d.ts} +35 -20
  7. package/classes/entity.utilities.d.ts +153 -0
  8. package/components/confirm-dialog/confirm-dialog-data.builder.d.ts +23 -0
  9. package/components/confirm-dialog/confirm-dialog-data.d.ts +18 -8
  10. package/components/confirm-dialog/confirm-dialog.component.d.ts +15 -5
  11. package/components/get-validation-error-message.function.d.ts +3 -2
  12. package/components/input/add-array-item-dialog-data.builder.d.ts +20 -0
  13. package/components/input/add-array-item-dialog-data.d.ts +19 -0
  14. package/components/input/input.component.d.ts +151 -30
  15. package/components/input/input.module.d.ts +7 -4
  16. package/components/table/create-dialog/create-dialog-data.builder.d.ts +21 -0
  17. package/components/table/create-dialog/create-entity-dialog-data.builder.d.ts +21 -0
  18. package/components/table/create-dialog/create-entity-dialog-data.d.ts +4 -5
  19. package/components/table/create-dialog/create-entity-dialog.component.d.ts +21 -8
  20. package/components/table/edit-dialog/edit-dialog-data.builder.d.ts +24 -0
  21. package/components/table/edit-dialog/edit-entity-dialog-data.d.ts +7 -8
  22. package/components/table/edit-dialog/edit-entity-dialog.builder.d.ts +22 -0
  23. package/components/table/edit-dialog/edit-entity-dialog.component.d.ts +25 -8
  24. package/components/table/table-data.builder.d.ts +51 -0
  25. package/components/table/table-data.d.ts +46 -30
  26. package/components/table/table.component.d.ts +53 -7
  27. package/components/table/table.module.d.ts +3 -1
  28. package/decorators/array/array-decorator-internal.data.d.ts +45 -0
  29. package/decorators/array/array-decorator.data.d.ts +129 -0
  30. package/decorators/array/array.decorator.d.ts +9 -0
  31. package/decorators/base/base-property.decorator.d.ts +7 -6
  32. package/decorators/base/decorator-types.enum.d.ts +12 -9
  33. package/decorators/base/dropdown-value.interface.d.ts +14 -0
  34. package/decorators/base/property-decorator-internal.data.d.ts +24 -0
  35. package/decorators/base/property-decorator.data.d.ts +70 -0
  36. package/decorators/boolean/boolean-decorator-internal.data.d.ts +25 -0
  37. package/decorators/boolean/boolean-decorator.data.d.ts +37 -0
  38. package/decorators/boolean/boolean.decorator.d.ts +8 -0
  39. package/decorators/date/date-decorator-internal.data.d.ts +44 -0
  40. package/decorators/date/date-decorator.data.d.ts +129 -0
  41. package/decorators/number/number-decorator-internal.data.d.ts +20 -0
  42. package/decorators/number/number-decorator.data.d.ts +36 -0
  43. package/decorators/number/number.decorator.d.ts +8 -0
  44. package/decorators/object/object-decorator-internal.data.d.ts +11 -0
  45. package/decorators/object/object-decorator.data.d.ts +25 -0
  46. package/decorators/object/object.decorator.d.ts +8 -0
  47. package/decorators/string/string-decorator-internal.data.d.ts +41 -0
  48. package/decorators/string/string-decorator.data.d.ts +77 -0
  49. package/decorators/string/string.decorator.d.ts +8 -0
  50. package/esm2020/classes/base.builder.mjs +43 -0
  51. package/esm2020/classes/date.utilities.mjs +138 -0
  52. package/esm2020/classes/entity.model.mjs +19 -0
  53. package/esm2020/classes/entity.service.mjs +83 -0
  54. package/esm2020/classes/entity.utilities.mjs +538 -0
  55. package/esm2020/components/confirm-dialog/confirm-dialog-data.builder.mjs +44 -0
  56. package/esm2020/components/confirm-dialog/confirm-dialog-data.mjs +1 -1
  57. package/esm2020/components/confirm-dialog/confirm-dialog.component.mjs +18 -22
  58. package/esm2020/components/get-validation-error-message.function.mjs +8 -3
  59. package/esm2020/components/input/add-array-item-dialog-data.builder.mjs +30 -0
  60. package/esm2020/components/input/add-array-item-dialog-data.mjs +2 -0
  61. package/esm2020/components/input/input.component.mjs +240 -36
  62. package/esm2020/components/input/input.module.mjs +23 -9
  63. package/esm2020/components/table/create-dialog/create-dialog-data.builder.mjs +32 -0
  64. package/esm2020/components/table/create-dialog/create-entity-dialog-data.builder.mjs +26 -0
  65. package/esm2020/components/table/create-dialog/create-entity-dialog-data.mjs +1 -1
  66. package/esm2020/components/table/create-dialog/create-entity-dialog.component.mjs +31 -31
  67. package/esm2020/components/table/create-dialog/create-entity-dialog.module.mjs +20 -4
  68. package/esm2020/components/table/edit-dialog/edit-dialog-data.builder.mjs +41 -0
  69. package/esm2020/components/table/edit-dialog/edit-entity-dialog-data.mjs +1 -1
  70. package/esm2020/components/table/edit-dialog/edit-entity-dialog.builder.mjs +27 -0
  71. package/esm2020/components/table/edit-dialog/edit-entity-dialog.component.mjs +45 -49
  72. package/esm2020/components/table/table-data.builder.mjs +105 -0
  73. package/esm2020/components/table/table-data.mjs +1 -1
  74. package/esm2020/components/table/table.component.mjs +91 -83
  75. package/esm2020/components/table/table.module.mjs +12 -4
  76. package/esm2020/decorators/array/array-decorator-internal.data.mjs +51 -0
  77. package/esm2020/decorators/array/array-decorator.data.mjs +7 -0
  78. package/esm2020/decorators/array/array.decorator.mjs +24 -0
  79. package/esm2020/decorators/base/base-property.decorator.mjs +6 -5
  80. package/esm2020/decorators/base/decorator-types.enum.mjs +4 -1
  81. package/esm2020/decorators/base/dropdown-value.interface.mjs +2 -0
  82. package/esm2020/decorators/base/property-decorator-internal.data.mjs +38 -0
  83. package/esm2020/decorators/base/property-decorator.data.mjs +6 -0
  84. package/esm2020/decorators/boolean/boolean-decorator-internal.data.mjs +33 -0
  85. package/esm2020/decorators/boolean/boolean-decorator.data.mjs +7 -0
  86. package/esm2020/decorators/boolean/boolean.decorator.mjs +21 -0
  87. package/esm2020/decorators/date/date-decorator-internal.data.mjs +48 -0
  88. package/esm2020/decorators/date/date-decorator.data.mjs +7 -0
  89. package/esm2020/decorators/number/number-decorator-internal.data.mjs +23 -0
  90. package/esm2020/decorators/number/number-decorator.data.mjs +7 -0
  91. package/esm2020/decorators/number/number.decorator.mjs +18 -0
  92. package/esm2020/decorators/object/object-decorator-internal.data.mjs +12 -0
  93. package/esm2020/decorators/object/object-decorator.data.mjs +7 -0
  94. package/esm2020/decorators/object/object.decorator.mjs +13 -0
  95. package/esm2020/decorators/string/string-decorator-internal.data.mjs +48 -0
  96. package/esm2020/decorators/string/string-decorator.data.mjs +7 -0
  97. package/esm2020/decorators/string/string.decorator.mjs +24 -0
  98. package/esm2020/public-api.mjs +20 -13
  99. package/fesm2015/ngx-material-entity.mjs +1664 -944
  100. package/fesm2015/ngx-material-entity.mjs.map +1 -1
  101. package/fesm2020/ngx-material-entity.mjs +1667 -941
  102. package/fesm2020/ngx-material-entity.mjs.map +1 -1
  103. package/package.json +7 -1
  104. package/public-api.d.ts +21 -10
  105. package/classes/entity-model.class.d.ts +0 -9
  106. package/classes/entity-utilities.class.d.ts +0 -95
  107. package/components/input/array-table/add-array-item-dialog/add-array-item-dialog.component.d.ts +0 -35
  108. package/components/input/array-table/add-array-item-dialog/add-array-item-dialog.module.d.ts +0 -12
  109. package/components/input/array-table/array-table.component.d.ts +0 -34
  110. package/components/input/array-table/array-table.module.d.ts +0 -19
  111. package/components/input/internal-input/internal-input.component.d.ts +0 -57
  112. package/components/input/internal-input/internal-input.module.d.ts +0 -16
  113. package/decorators/array.decorator.d.ts +0 -125
  114. package/decorators/base/property-decorator-config.interface.d.ts +0 -50
  115. package/decorators/boolean.decorator.d.ts +0 -42
  116. package/decorators/number.decorator.d.ts +0 -40
  117. package/decorators/object.decorator.d.ts +0 -27
  118. package/decorators/string.decorator.d.ts +0 -76
  119. package/esm2020/classes/entity-model.class.mjs +0 -19
  120. package/esm2020/classes/entity-service.class.mjs +0 -70
  121. package/esm2020/classes/entity-utilities.class.mjs +0 -296
  122. package/esm2020/components/input/array-table/add-array-item-dialog/add-array-item-dialog.component.mjs +0 -43
  123. package/esm2020/components/input/array-table/add-array-item-dialog/add-array-item-dialog.module.mjs +0 -22
  124. package/esm2020/components/input/array-table/array-table.component.mjs +0 -116
  125. package/esm2020/components/input/array-table/array-table.module.mjs +0 -66
  126. package/esm2020/components/input/internal-input/internal-input.component.mjs +0 -73
  127. package/esm2020/components/input/internal-input/internal-input.module.mjs +0 -54
  128. package/esm2020/decorators/array.decorator.mjs +0 -70
  129. package/esm2020/decorators/base/property-decorator-config.interface.mjs +0 -31
  130. package/esm2020/decorators/boolean.decorator.mjs +0 -44
  131. package/esm2020/decorators/number.decorator.mjs +0 -36
  132. package/esm2020/decorators/object.decorator.mjs +0 -23
  133. package/esm2020/decorators/string.decorator.mjs +0 -61
@@ -1,76 +0,0 @@
1
- import { PropertyDecoratorConfig } from './base/property-decorator-config.interface';
2
- /**
3
- * Decorator for setting and getting string propery metadata
4
- * @param metadata The metadata of the string property
5
- */
6
- export declare function string(metadata: DropdownStringDecoratorConfig | AutocompleteStringDecoratorConfig | DefaultStringDecoratorConfig | TextboxStringDecoratorConfig): (target: object, propertyKey: string) => void;
7
- /**
8
- * Interface definition for the @string metadata
9
- */
10
- declare abstract class StringDecoratorConfig extends PropertyDecoratorConfig {
11
- /**
12
- * How to display the string
13
- */
14
- displayStyle: 'line' | 'textbox' | 'autocomplete' | 'dropdown';
15
- }
16
- export declare class DropdownStringDecoratorConfig extends StringDecoratorConfig {
17
- displayStyle: 'dropdown';
18
- /**
19
- * The values of the dropdown, consisting of a name to display and the actual value
20
- * Can also receive a function to determine the values
21
- */
22
- dropdownValues: {
23
- displayName: string;
24
- value: string;
25
- }[];
26
- constructor(metadata: DropdownStringDecoratorConfig);
27
- }
28
- export declare class DefaultStringDecoratorConfig extends StringDecoratorConfig {
29
- displayStyle: 'line';
30
- /**
31
- * (optional) The minimum required length of the string
32
- */
33
- minLength?: number;
34
- /**
35
- * (optional) The maximum required length of the string
36
- */
37
- maxLength?: number;
38
- /**
39
- * (optional) A regex used for validation
40
- */
41
- regex?: RegExp;
42
- constructor(metadata: DefaultStringDecoratorConfig);
43
- }
44
- export declare class TextboxStringDecoratorConfig extends StringDecoratorConfig {
45
- displayStyle: 'textbox';
46
- /**
47
- * (optional) The minimum required length of the string
48
- */
49
- minLength?: number;
50
- /**
51
- * (optional) The maximum required length of the string
52
- */
53
- maxLength?: number;
54
- constructor(metadata: TextboxStringDecoratorConfig);
55
- }
56
- export declare class AutocompleteStringDecoratorConfig extends StringDecoratorConfig {
57
- displayStyle: 'autocomplete';
58
- /**
59
- * The autocomplete values
60
- */
61
- autocompleteValues: string[];
62
- /**
63
- * (optional) The minimum required length of the string
64
- */
65
- minLength?: number;
66
- /**
67
- * (optional) The maximum required length of the string
68
- */
69
- maxLength?: number;
70
- /**
71
- * (optional) A regex used for validation
72
- */
73
- regex?: RegExp;
74
- constructor(metadata: AutocompleteStringDecoratorConfig);
75
- }
76
- export {};
@@ -1,19 +0,0 @@
1
- import { __decorate, __metadata } from "tslib";
2
- import { string } from '../decorators/string.decorator';
3
- /**
4
- * The base Entity class.
5
- */
6
- export class Entity {
7
- }
8
- __decorate([
9
- string({
10
- omitForCreate: true,
11
- omitForUpdate: true,
12
- display: false,
13
- displayStyle: 'line',
14
- displayName: 'ID',
15
- required: true
16
- }),
17
- __metadata("design:type", String)
18
- ], Entity.prototype, "id", void 0);
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LW1vZGVsLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvY2xhc3Nlcy9lbnRpdHktbW9kZWwuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4RDs7R0FFRztBQUNILE1BQU0sT0FBZ0IsTUFBTTtDQWEzQjtBQURHO0lBUkMsTUFBTSxDQUFDO1FBQ0osYUFBYSxFQUFFLElBQUk7UUFDbkIsYUFBYSxFQUFFLElBQUk7UUFDbkIsT0FBTyxFQUFFLEtBQUs7UUFDZCxZQUFZLEVBQUUsTUFBTTtRQUNwQixXQUFXLEVBQUUsSUFBSTtRQUNqQixRQUFRLEVBQUUsSUFBSTtLQUNqQixDQUFDOztrQ0FDVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN0cmluZyB9IGZyb20gJy4uL2RlY29yYXRvcnMvc3RyaW5nLmRlY29yYXRvcic7XG5cbi8qKlxuICogVGhlIGJhc2UgRW50aXR5IGNsYXNzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRW50aXR5IHtcbiAgICAvKipcbiAgICAgKiBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgRW50aXR5XG4gICAgICovXG4gICAgQHN0cmluZyh7XG4gICAgICAgIG9taXRGb3JDcmVhdGU6IHRydWUsXG4gICAgICAgIG9taXRGb3JVcGRhdGU6IHRydWUsXG4gICAgICAgIGRpc3BsYXk6IGZhbHNlLFxuICAgICAgICBkaXNwbGF5U3R5bGU6ICdsaW5lJyxcbiAgICAgICAgZGlzcGxheU5hbWU6ICdJRCcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSlcbiAgICBpZCE6IHN0cmluZztcbn0iXX0=
@@ -1,70 +0,0 @@
1
- import { BehaviorSubject, firstValueFrom } from 'rxjs';
2
- import { isNil, omit, omitBy } from 'lodash';
3
- import { EntityUtilities } from './entity-utilities.class';
4
- /**
5
- * A generic EntityService class.
6
- * Offers basic CRUD-functionality.
7
- * You should create a service for every Entity you have.
8
- * If you extend from this you need to make sure that the extended Service can be injected.
9
- */
10
- export class EntityService {
11
- constructor(http) {
12
- this.http = http;
13
- /**
14
- * a subject of all the entity values.
15
- * Can be subscribed to when you want to do a specific thing whenever the entities change.
16
- */
17
- this.entitiesSubject = new BehaviorSubject([]);
18
- }
19
- /**
20
- * gets the entities in an array from the internal entitiesSubject
21
- */
22
- get entities() {
23
- return this.entitiesSubject.value;
24
- }
25
- /**
26
- * Creates a new Entity and pushes it to the entities array
27
- * @param entity The data of the entity to create.
28
- * All values that should be omitted will be removed from it inside this method.
29
- * @returns A Promise of the created entity
30
- */
31
- async create(entity) {
32
- const body = omit(entity, EntityUtilities.getOmitForCreate(entity));
33
- const e = await firstValueFrom(this.http.post(this.baseUrl, body));
34
- this.entities.push(e);
35
- this.entitiesSubject.next(this.entities);
36
- return e;
37
- }
38
- /**
39
- * Gets all existing entities and pushes them to the entites array
40
- * @returns A Promise of all received Entities
41
- */
42
- async read() {
43
- const e = await firstValueFrom(this.http.get(this.baseUrl));
44
- this.entitiesSubject.next(e);
45
- return e;
46
- }
47
- /**
48
- * Updates a specific Entity
49
- * @param entity The updated Entity
50
- * All values that should be omitted will be removed from it inside this method.
51
- * @param entityPriorChanges The current Entity.
52
- * It Is used to get changed values and only update them instead of sending the whole entity data
53
- */
54
- async update(entity, entityPriorChanges) {
55
- const reqBody = omit(EntityUtilities.difference(entity, entityPriorChanges), EntityUtilities.getOmitForUpdate(entity));
56
- const updatedEntity = await firstValueFrom(this.http.patch(`${this.baseUrl}/${entityPriorChanges.id}`, omitBy(reqBody, isNil)));
57
- this.entities[this.entities.findIndex((e) => e.id === entityPriorChanges.id)] = updatedEntity;
58
- this.entitiesSubject.next(this.entities);
59
- }
60
- /**
61
- * Method to delete a specific Entity
62
- * @param id The id of the element to delete
63
- */
64
- async delete(id) {
65
- await firstValueFrom(this.http.delete(`${this.baseUrl}/${id}`));
66
- this.entities.splice(this.entities.findIndex((e) => e.id === id), 1);
67
- this.entitiesSubject.next(this.entities);
68
- }
69
- }
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXNlcnZpY2UuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jbGFzc2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0Q7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQWdCLGFBQWE7SUF3Qi9CLFlBQTZCLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7UUFiN0M7OztXQUdHO1FBQ00sb0JBQWUsR0FBa0MsSUFBSSxlQUFlLENBQWUsRUFBRSxDQUFDLENBQUM7SUFTaEQsQ0FBQztJQVBqRDs7T0FFRztJQUNILElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUM7SUFDdEMsQ0FBQztJQUlEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFrQjtRQUMzQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sQ0FBQyxHQUFHLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFhLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekMsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLElBQUk7UUFDTixNQUFNLENBQUMsR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBZSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQWtCLEVBQUUsa0JBQThCO1FBQzNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FDaEIsZUFBZSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsRUFDdEQsZUFBZSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUMzQyxDQUFDO1FBQ0YsTUFBTSxhQUFhLEdBQUcsTUFBTSxjQUFjLENBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUNYLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsRUFDMUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FDekIsQ0FDSixDQUFDO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQztRQUM5RixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBVTtRQUNuQixNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQ2pELENBQUM7UUFDRixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5IH0gZnJvbSAnLi9lbnRpdHktbW9kZWwuY2xhc3MnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzTmlsLCBvbWl0LCBvbWl0QnkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgRW50aXR5VXRpbGl0aWVzIH0gZnJvbSAnLi9lbnRpdHktdXRpbGl0aWVzLmNsYXNzJztcblxuLyoqXG4gKiBBIGdlbmVyaWMgRW50aXR5U2VydmljZSBjbGFzcy5cbiAqIE9mZmVycyBiYXNpYyBDUlVELWZ1bmN0aW9uYWxpdHkuXG4gKiBZb3Ugc2hvdWxkIGNyZWF0ZSBhIHNlcnZpY2UgZm9yIGV2ZXJ5IEVudGl0eSB5b3UgaGF2ZS5cbiAqIElmIHlvdSBleHRlbmQgZnJvbSB0aGlzIHlvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBleHRlbmRlZCBTZXJ2aWNlIGNhbiBiZSBpbmplY3RlZC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEVudGl0eVNlcnZpY2U8RW50aXR5VHlwZSBleHRlbmRzIEVudGl0eT4ge1xuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHVybCB1c2VkIGZvciBhcGkgcmVxdWVzdHMuIElmIHUgd2FudCB0byBoYXZlIG1vcmUgY29udHJvbCBvdmVyIHRoaXMsXG4gICAgICogeW91IGNhbiBvdmVycmlkZSB0aGUgY3JlYXRlLCByZWFkLCB1cGRhdGUgYW5kIGRlbGV0ZSBtZXRob2RzLlxuICAgICAqIEBjcmVhdGUgU2VuZHMgYSBQT1NULVJlcXVlc3QgdG8gYmFzZVVybFxuICAgICAqIEByZWFkIFNlbmRzIGEgR0VULVJlcXVlc3QgdG8gYmFzZVVybFxuICAgICAqIEB1cGRhdGUgU2VuZHMgYSBQQVRDSC1SZXF1ZXN0IHRvIGJhc2VVcmwve2lkfVxuICAgICAqIEBkZWxldGUgU2VuZHMgYSBERUwtUmVxdWVzdCB0byBiYXNlVXJsL3tpZH1cbiAgICAgKi9cbiAgICBhYnN0cmFjdCByZWFkb25seSBiYXNlVXJsOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBhIHN1YmplY3Qgb2YgYWxsIHRoZSBlbnRpdHkgdmFsdWVzLlxuICAgICAqIENhbiBiZSBzdWJzY3JpYmVkIHRvIHdoZW4geW91IHdhbnQgdG8gZG8gYSBzcGVjaWZpYyB0aGluZyB3aGVuZXZlciB0aGUgZW50aXRpZXMgY2hhbmdlLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGVudGl0aWVzU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PEVudGl0eVR5cGVbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVudGl0eVR5cGVbXT4oW10pO1xuXG4gICAgLyoqXG4gICAgICogZ2V0cyB0aGUgZW50aXRpZXMgaW4gYW4gYXJyYXkgZnJvbSB0aGUgaW50ZXJuYWwgZW50aXRpZXNTdWJqZWN0XG4gICAgICovXG4gICAgZ2V0IGVudGl0aWVzKCk6IEVudGl0eVR5cGVbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVudGl0aWVzU3ViamVjdC52YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGh0dHA6IEh0dHBDbGllbnQpIHt9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEVudGl0eSBhbmQgcHVzaGVzIGl0IHRvIHRoZSBlbnRpdGllcyBhcnJheVxuICAgICAqIEBwYXJhbSBlbnRpdHkgVGhlIGRhdGEgb2YgdGhlIGVudGl0eSB0byBjcmVhdGUuXG4gICAgICogQWxsIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBvbWl0dGVkIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGl0IGluc2lkZSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAcmV0dXJucyBBIFByb21pc2Ugb2YgdGhlIGNyZWF0ZWQgZW50aXR5XG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlKGVudGl0eTogRW50aXR5VHlwZSk6IFByb21pc2U8RW50aXR5VHlwZT4ge1xuICAgICAgICBjb25zdCBib2R5ID0gb21pdChlbnRpdHksIEVudGl0eVV0aWxpdGllcy5nZXRPbWl0Rm9yQ3JlYXRlKGVudGl0eSkpO1xuICAgICAgICBjb25zdCBlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwLnBvc3Q8RW50aXR5VHlwZT4odGhpcy5iYXNlVXJsLCBib2R5KSk7XG4gICAgICAgIHRoaXMuZW50aXRpZXMucHVzaChlKTtcbiAgICAgICAgdGhpcy5lbnRpdGllc1N1YmplY3QubmV4dCh0aGlzLmVudGl0aWVzKTtcbiAgICAgICAgcmV0dXJuIGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbGwgZXhpc3RpbmcgZW50aXRpZXMgYW5kIHB1c2hlcyB0aGVtIHRvIHRoZSBlbnRpdGVzIGFycmF5XG4gICAgICogQHJldHVybnMgQSBQcm9taXNlIG9mIGFsbCByZWNlaXZlZCBFbnRpdGllc1xuICAgICAqL1xuICAgIGFzeW5jIHJlYWQoKTogUHJvbWlzZTxFbnRpdHlUeXBlW10+IHtcbiAgICAgICAgY29uc3QgZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5nZXQ8RW50aXR5VHlwZVtdPih0aGlzLmJhc2VVcmwpKTtcbiAgICAgICAgdGhpcy5lbnRpdGllc1N1YmplY3QubmV4dChlKTtcbiAgICAgICAgcmV0dXJuIGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyBhIHNwZWNpZmljIEVudGl0eVxuICAgICAqIEBwYXJhbSBlbnRpdHkgVGhlIHVwZGF0ZWQgRW50aXR5XG4gICAgICogQWxsIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBvbWl0dGVkIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGl0IGluc2lkZSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAcGFyYW0gZW50aXR5UHJpb3JDaGFuZ2VzIFRoZSBjdXJyZW50IEVudGl0eS5cbiAgICAgKiBJdCBJcyB1c2VkIHRvIGdldCBjaGFuZ2VkIHZhbHVlcyBhbmQgb25seSB1cGRhdGUgdGhlbSBpbnN0ZWFkIG9mIHNlbmRpbmcgdGhlIHdob2xlIGVudGl0eSBkYXRhXG4gICAgICovXG4gICAgYXN5bmMgdXBkYXRlKGVudGl0eTogRW50aXR5VHlwZSwgZW50aXR5UHJpb3JDaGFuZ2VzOiBFbnRpdHlUeXBlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHJlcUJvZHkgPSBvbWl0KFxuICAgICAgICAgICAgRW50aXR5VXRpbGl0aWVzLmRpZmZlcmVuY2UoZW50aXR5LCBlbnRpdHlQcmlvckNoYW5nZXMpLFxuICAgICAgICAgICAgRW50aXR5VXRpbGl0aWVzLmdldE9taXRGb3JVcGRhdGUoZW50aXR5KVxuICAgICAgICApO1xuICAgICAgICBjb25zdCB1cGRhdGVkRW50aXR5ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICB0aGlzLmh0dHAucGF0Y2g8RW50aXR5VHlwZT4oXG4gICAgICAgICAgICAgICAgYCR7dGhpcy5iYXNlVXJsfS8ke2VudGl0eVByaW9yQ2hhbmdlcy5pZH1gLFxuICAgICAgICAgICAgICAgIG9taXRCeShyZXFCb2R5LCBpc05pbClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5lbnRpdGllc1t0aGlzLmVudGl0aWVzLmZpbmRJbmRleCgoZSkgPT4gZS5pZCA9PT0gZW50aXR5UHJpb3JDaGFuZ2VzLmlkKV0gPSB1cGRhdGVkRW50aXR5O1xuICAgICAgICB0aGlzLmVudGl0aWVzU3ViamVjdC5uZXh0KHRoaXMuZW50aXRpZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCB0byBkZWxldGUgYSBzcGVjaWZpYyBFbnRpdHlcbiAgICAgKiBAcGFyYW0gaWQgVGhlIGlkIG9mIHRoZSBlbGVtZW50IHRvIGRlbGV0ZVxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZShpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5kZWxldGU8dm9pZD4oYCR7dGhpcy5iYXNlVXJsfS8ke2lkfWApKTtcbiAgICAgICAgdGhpcy5lbnRpdGllcy5zcGxpY2UoXG4gICAgICAgICAgICB0aGlzLmVudGl0aWVzLmZpbmRJbmRleCgoZSkgPT4gZS5pZCA9PT0gaWQpLCAxXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZW50aXRpZXNTdWJqZWN0Lm5leHQodGhpcy5lbnRpdGllcyk7XG4gICAgfVxufSJdfQ==
@@ -1,296 +0,0 @@
1
- var _a;
2
- import { isEqual } from 'lodash';
3
- import { DecoratorTypes } from '../decorators/base/decorator-types.enum';
4
- /**
5
- * Contains HelperMethods around handling Entities and their property-metadata
6
- */
7
- export class EntityUtilities {
8
- /**
9
- * Gets the properties to omit when updating the entity
10
- * @returns The properties which should be left out for updating a new Entity
11
- */
12
- static getOmitForUpdate(entity) {
13
- const res = [];
14
- for (const key of Reflect.ownKeys(entity)) {
15
- const metadata = Reflect.getMetadata('metadata', entity, key);
16
- if (metadata.omitForUpdate) {
17
- res.push(key);
18
- }
19
- }
20
- return res;
21
- }
22
- /**
23
- * Gets the properties to omit when creating new entities
24
- * @returns The properties which should be left out for creating a new Entity
25
- */
26
- static getOmitForCreate(entity) {
27
- const res = [];
28
- for (const key of Reflect.ownKeys(entity)) {
29
- const metadata = Reflect.getMetadata('metadata', entity, key);
30
- if (metadata.omitForCreate) {
31
- res.push(key);
32
- }
33
- }
34
- return res;
35
- }
36
- /**
37
- * Gets the metadata included in an property
38
- * @param entity The entity with the property to get the metadata from
39
- * @param propertyKey The property on the given Entity to get the metadata from
40
- * @param type For secure Typing, defines the returned PropertyConfig
41
- * @returns The metadata of the property
42
- */
43
- static getPropertyMetadata(entity, propertyKey,
44
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
45
- type) {
46
- try {
47
- const metadata = Reflect.getMetadata('metadata', entity, propertyKey);
48
- if (!metadata) {
49
- throw new Error(`Could not find metadata for property ${String(propertyKey)}
50
- on the entity ${JSON.stringify(entity)}`);
51
- }
52
- return metadata;
53
- }
54
- catch (error) {
55
- throw new Error(`Could not find metadata for property ${String(propertyKey)}
56
- on the entity ${JSON.stringify(entity)}`);
57
- }
58
- }
59
- /**
60
- * Gets the type of the property-metadata.
61
- * @param entity The entity with the property to get the type from
62
- * @param propertyKey The property on the given Entity to get the type from
63
- * @returns The type of the metadata
64
- */
65
- static getPropertyType(entity, propertyKey) {
66
- try {
67
- const propertyType = Reflect.getMetadata('type', entity, propertyKey);
68
- if (!propertyType) {
69
- throw new Error(`Could not find type metadata for property ${String(propertyKey)}
70
- on the entity ${JSON.stringify(entity)}`);
71
- }
72
- return propertyType;
73
- }
74
- catch (error) {
75
- throw new Error(`Could not find type metadata for property ${String(propertyKey)}
76
- on the entity ${JSON.stringify(entity)}`);
77
- }
78
- }
79
- /**
80
- * Sets all property values based on a given entity data-object.
81
- * @param entity The data object to get the property values from.
82
- * @param target
83
- * the target object that needs to be constructed
84
- * (if called inside a Entity constructor its usually this)
85
- * @alias new
86
- * @alias build
87
- * @alias construct
88
- */
89
- static new(target, entity) {
90
- if (entity) {
91
- for (const key in entity) {
92
- Reflect.set(target, key, Reflect.get(entity, key));
93
- }
94
- }
95
- }
96
- /**
97
- * Checks if the values on an entity are valid.
98
- * Also checks all the validators given by the metadata ("required", "maxLength" etc.)
99
- * @param entity The entity to validate.
100
- * @param omit Whether to check for creatiung or editing validity
101
- * @returns Whether or not the entity is valid.
102
- */
103
- static isEntityValid(entity, omit) {
104
- for (const key in entity) {
105
- if (!this.isPropertyValid(entity, key, omit)) {
106
- return false;
107
- }
108
- }
109
- return true;
110
- }
111
- /**
112
- * Checks if a single property value is valid
113
- * @param entity The entity where the property is from
114
- * @param key The name of the property
115
- * @returns Whether or not the property value is valid
116
- */
117
- static isPropertyValid(entity, key, omit) {
118
- const type = this.getPropertyType(entity, key);
119
- const metadata = this.getPropertyMetadata(entity, key, type);
120
- const metadataDefaultString = metadata;
121
- const metadataTextboxString = metadata;
122
- const metadataAutocompleteString = metadata;
123
- const metadataDefaultNumber = metadata;
124
- const objectProperty = entity[key];
125
- const metadataEntityArray = metadata;
126
- const arrayItems = entity[key];
127
- if (metadata.omitForCreate && omit === 'create') {
128
- return true;
129
- }
130
- if (metadata.omitForUpdate && omit === 'edit') {
131
- return true;
132
- }
133
- if (metadata.required && !entity[key]) {
134
- return false;
135
- }
136
- switch (type) {
137
- case DecoratorTypes.STRING:
138
- if (metadataDefaultString.maxLength
139
- && entity[key].length > metadataDefaultString.maxLength) {
140
- return false;
141
- }
142
- if (metadataDefaultString.minLength
143
- && entity[key].length < metadataDefaultString.minLength) {
144
- return false;
145
- }
146
- if (metadataDefaultString.regex
147
- && !entity[key].match(metadataDefaultString.regex)) {
148
- return false;
149
- }
150
- break;
151
- case DecoratorTypes.STRING_AUTOCOMPLETE:
152
- if (metadataAutocompleteString.maxLength
153
- && entity[key].length > metadataAutocompleteString.maxLength) {
154
- return false;
155
- }
156
- if (metadataAutocompleteString.minLength
157
- && entity[key].length < metadataAutocompleteString.minLength) {
158
- return false;
159
- }
160
- if (metadataAutocompleteString.regex
161
- && entity[key].match(metadataAutocompleteString.regex)) {
162
- return false;
163
- }
164
- break;
165
- case DecoratorTypes.STRING_TEXTBOX:
166
- if (metadataTextboxString.maxLength
167
- && entity[key].length > metadataTextboxString.maxLength) {
168
- return false;
169
- }
170
- if (metadataTextboxString.minLength
171
- && entity[key].length < metadataTextboxString.minLength) {
172
- return false;
173
- }
174
- break;
175
- case DecoratorTypes.NUMBER:
176
- if (metadataDefaultNumber.max && entity[key] > metadataDefaultNumber.max) {
177
- return false;
178
- }
179
- if (metadataDefaultNumber.min && entity[key] > metadataDefaultNumber.min) {
180
- return false;
181
- }
182
- break;
183
- case DecoratorTypes.OBJECT:
184
- for (const parameterKey in objectProperty) {
185
- if (!this.isPropertyValid(objectProperty, parameterKey, omit)) {
186
- return false;
187
- }
188
- }
189
- break;
190
- case DecoratorTypes.ARRAY_STRING_CHIPS:
191
- case DecoratorTypes.ARRAY_STRING_AUTOCOMPLETE_CHIPS:
192
- case DecoratorTypes.ARRAY:
193
- if (metadataEntityArray.required && !arrayItems.length) {
194
- return false;
195
- }
196
- break;
197
- default:
198
- throw new Error(`Could not validate the input because the DecoratorType ${type} is not known`);
199
- }
200
- return true;
201
- }
202
- /**
203
- * Checks if an entity is "dirty" (if its values have changed)
204
- * @param entity The entity after all changes
205
- * @param entityPriorChanges The entity before the changes
206
- * @returns Whether or not the entity is dirty
207
- */
208
- static dirty(entity, entityPriorChanges) {
209
- if (!entityPriorChanges) {
210
- return false;
211
- }
212
- else {
213
- const diff = this.difference(entity, entityPriorChanges);
214
- if (JSON.stringify(diff) === '{}') {
215
- return false;
216
- }
217
- else {
218
- return true;
219
- }
220
- }
221
- }
222
- /**
223
- * Compares two Entities and returns their difference in an object
224
- * @param entity The first entity to compare
225
- * @param entityPriorChanges The second entity to compare
226
- * @returns The difference between the two Entities in form of a Partial
227
- */
228
- static difference(entity, entityPriorChanges) {
229
- const res = {};
230
- for (const key in entity) {
231
- if (!isEqual(entity[key], entityPriorChanges[key])) {
232
- res[key] = entity[key];
233
- }
234
- }
235
- return res;
236
- }
237
- /**
238
- * compare function for sorting entity keys by their order value
239
- * @param a first key of entity
240
- * @param b second key of entity
241
- * @param entity current entity (used to get metadata of entity keys)
242
- */
243
- static compareOrder(a, b, entity) {
244
- const metadataA = EntityUtilities.getPropertyMetadata(entity, a, EntityUtilities.getPropertyType(entity, a));
245
- const metadataB = EntityUtilities.getPropertyMetadata(entity, b, EntityUtilities.getPropertyType(entity, b));
246
- if (metadataA.order === -1) {
247
- return 1;
248
- }
249
- else if (metadataB.order === -1) {
250
- return 0;
251
- }
252
- return (metadataA.order - metadataB.order);
253
- }
254
- /**
255
- * gets the bootstrap column values for "lg", "md", "sm"
256
- * @param entity entity to get the bootstrap column values of the key
257
- * @param key key of the property to get bootstrap column values from
258
- * @param type defines for which screensize the column values should be returned
259
- * @returns bootstrap column value
260
- */
261
- static getWidth(entity, key, type) {
262
- const propertyType = EntityUtilities.getPropertyType(entity, key);
263
- const metadata = EntityUtilities.getPropertyMetadata(entity, key, propertyType);
264
- if (metadata.defaultWidths) {
265
- switch (type) {
266
- case 'lg':
267
- return metadata.defaultWidths[0];
268
- case 'md':
269
- return metadata.defaultWidths[1];
270
- case 'sm':
271
- return metadata.defaultWidths[2];
272
- default:
273
- throw new Error('Something went wrong getting the width');
274
- }
275
- }
276
- else {
277
- throw new Error('Something went wrong getting the width');
278
- }
279
- }
280
- /**
281
- * Resets all changes on an entity
282
- * @param entity The entity to reset
283
- * @param entityPriorChanges The entity before any changes
284
- */
285
- static resetChangesOnEntity(entity, entityPriorChanges) {
286
- for (const key in entityPriorChanges) {
287
- Reflect.set(entity, key, Reflect.get(entityPriorChanges, key));
288
- }
289
- }
290
- }
291
- _a = EntityUtilities;
292
- // eslint-disable-next-line @typescript-eslint/member-ordering
293
- EntityUtilities.construct = _a.new;
294
- // eslint-disable-next-line @typescript-eslint/member-ordering
295
- EntityUtilities.build = _a.new;
296
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXV0aWxpdGllcy5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1tYXRlcmlhbC1lbnRpdHkvc3JjL2NsYXNzZXMvZW50aXR5LXV0aWxpdGllcy5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBQWlCLGNBQWMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBT3hGOztHQUVHO0FBQ0gsTUFBTSxPQUFnQixlQUFlO0lBQ2pDOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBNEIsTUFBa0I7UUFDakUsTUFBTSxHQUFHLEdBQXlCLEVBQUUsQ0FBQztRQUNyQyxLQUFLLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdkMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBNEIsQ0FBQztZQUN6RixJQUFJLFFBQVEsQ0FBQyxhQUFhLEVBQUU7Z0JBQ3hCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBdUIsQ0FBQyxDQUFDO2FBQ3JDO1NBQ0o7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsZ0JBQWdCLENBQTRCLE1BQWtCO1FBQ2pFLE1BQU0sR0FBRyxHQUF5QixFQUFFLENBQUM7UUFDckMsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3ZDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQTRCLENBQUM7WUFDekYsSUFBSSxRQUFRLENBQUMsYUFBYSxFQUFFO2dCQUN4QixHQUFHLENBQUMsSUFBSSxD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SSxFQUFFO2dCQUNWLEtBQUssSUFBSTtvQkFDTCxPQUFPLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLEtBQUssSUFBSTtvQkFDTCxPQUFPLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLEtBQUssSUFBSTtvQkFDTCxPQUFPLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDO29CQUNJLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQzthQUNqRTtTQUNKO2FBQ0k7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7U0FDN0Q7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxvQkFBb0IsQ0FBNEIsTUFBa0IsRUFBRSxrQkFBOEI7UUFDckcsS0FBSyxNQUFNLEdBQUcsSUFBSSxrQkFBa0IsRUFBRTtZQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ2xFO0lBQ0wsQ0FBQzs7O0FBak9ELDhEQUE4RDtBQUN2RCx5QkFBUyxHQUFHLEVBQUksQ0FBQyxHQUFHLENBQUM7QUFDNUIsOERBQThEO0FBQ3ZELHFCQUFLLEdBQUcsRUFBSSxDQUFDLEdBQUcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgRGVjb3JhdG9yVHlwZSwgRGVjb3JhdG9yVHlwZXMgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2Jhc2UvZGVjb3JhdG9yLXR5cGVzLmVudW0nO1xuaW1wb3J0IHsgUHJvcGVydHlEZWNvcmF0b3JDb25maWcgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2Jhc2UvcHJvcGVydHktZGVjb3JhdG9yLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRGVmYXVsdE51bWJlckRlY29yYXRvckNvbmZpZyB9IGZyb20gJy4uL2RlY29yYXRvcnMvbnVtYmVyLmRlY29yYXRvcic7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVTdHJpbmdEZWNvcmF0b3JDb25maWcsIERlZmF1bHRTdHJpbmdEZWNvcmF0b3JDb25maWcsIFRleHRib3hTdHJpbmdEZWNvcmF0b3JDb25maWcgfSBmcm9tICcuLi9kZWNvcmF0b3JzL3N0cmluZy5kZWNvcmF0b3InO1xuaW1wb3J0IHsgRW50aXR5QXJyYXlEZWNvcmF0b3JDb25maWcgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2FycmF5LmRlY29yYXRvcic7XG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuL2VudGl0eS1tb2RlbC5jbGFzcyc7XG5cbi8qKlxuICogQ29udGFpbnMgSGVscGVyTWV0aG9kcyBhcm91bmQgaGFuZGxpbmcgRW50aXRpZXMgYW5kIHRoZWlyIHByb3BlcnR5LW1ldGFkYXRhXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBFbnRpdHlVdGlsaXRpZXMge1xuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHByb3BlcnRpZXMgdG8gb21pdCB3aGVuIHVwZGF0aW5nIHRoZSBlbnRpdHlcbiAgICAgKiBAcmV0dXJucyBUaGUgcHJvcGVydGllcyB3aGljaCBzaG91bGQgYmUgbGVmdCBvdXQgZm9yIHVwZGF0aW5nIGEgbmV3IEVudGl0eVxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRPbWl0Rm9yVXBkYXRlPEVudGl0eVR5cGUgZXh0ZW5kcyBFbnRpdHk+KGVudGl0eTogRW50aXR5VHlwZSk6IChrZXlvZiBFbnRpdHlUeXBlKVtdIHtcbiAgICAgICAgY29uc3QgcmVzOiAoa2V5b2YgRW50aXR5VHlwZSlbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXMoZW50aXR5KSkge1xuICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBSZWZsZWN0LmdldE1ldGFkYXRhKCdtZXRhZGF0YScsIGVudGl0eSwga2V5KSBhcyBQcm9wZXJ0eURlY29yYXRvckNvbmZpZztcbiAgICAgICAgICAgIGlmIChtZXRhZGF0YS5vbWl0Rm9yVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgcmVzLnB1c2goa2V5IGFzIGtleW9mIEVudGl0eVR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcHJvcGVydGllcyB0byBvbWl0IHdoZW4gY3JlYXRpbmcgbmV3IGVudGl0aWVzXG4gICAgICogQHJldHVybnMgVGhlIHByb3BlcnRpZXMgd2hpY2ggc2hvdWxkIGJlIGxlZnQgb3V0IGZvciBjcmVhdGluZyBhIG5ldyBFbnRpdHlcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0T21pdEZvckNyZWF0ZTxFbnRpdHlUeXBlIGV4dGVuZHMgRW50aXR5PihlbnRpdHk6IEVudGl0eVR5cGUpOiAoa2V5b2YgRW50aXR5VHlwZSlbXSB7XG4gICAgICAgIGNvbnN0IHJlczogKGtleW9mIEVudGl0eVR5cGUpW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgUmVmbGVjdC5vd25LZXlzKGVudGl0eSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhID0gUmVmbGVjdC5nZXRNZXRhZGF0YSgnbWV0YWRhdGEnLCBlbnRpdHksIGtleSkgYXMgUHJvcGVydHlEZWNvcmF0b3JDb25maWc7XG4gICAgICAgICAgICBpZiAobWV0YWRhdGEub21pdEZvckNyZWF0ZSkge1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKGtleSBhcyBrZXlvZiBFbnRpdHlUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG1ldGFkYXRhIGluY2x1ZGVkIGluIGFuIHByb3BlcnR5XG4gICAgICogQHBhcmFtIGVudGl0eSBUaGUgZW50aXR5IHdpdGggdGhlIHByb3BlcnR5IHRvIGdldCB0aGUgbWV0YWRhdGEgZnJvbVxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eUtleSBUaGUgcHJvcGVydHkgb24gdGhlIGdpdmVuIEVudGl0eSB0byBnZXQgdGhlIG1ldGFkYXRhIGZyb21cbiAgICAgKiBAcGFyYW0gdHlwZSBGb3Igc2VjdXJlIFR5cGluZywgZGVmaW5lcyB0aGUgcmV0dXJuZWQgUHJvcGVydHlDb25maWdcbiAgICAgKiBAcmV0dXJucyBUaGUgbWV0YWRhdGEgb2YgdGhlIHByb3BlcnR5XG4gICAgICovXG4gICAgc3RhdGljIGdldFByb3BlcnR5TWV0YWRhdGE8RW50aXR5VHlwZSBleHRlbmRzIEVudGl0eSwgVCBleHRlbmRzIERlY29yYXRvclR5cGVzPihcbiAgICAgICAgZW50aXR5OiBFbnRpdHlUeXBlLFxuICAgICAgICBwcm9wZXJ0eUtleToga2V5b2YgRW50aXR5VHlwZSxcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICB0eXBlOiBUXG4gICAgKTogRGVjb3JhdG9yVHlwZTxUPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBtZXRhZGF0YSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoJ21ldGFkYXRhJywgZW50aXR5LCBwcm9wZXJ0eUtleSBhcyBzdHJpbmcpIGFzIERlY29yYXRvclR5cGU8VD47XG4gICAgICAgICAgICBpZiAoIW1ldGFkYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgQ291bGQgbm90IGZpbmQgbWV0YWRhdGEgZm9yIHByb3BlcnR5ICR7U3RyaW5nKHByb3BlcnR5S2V5KX1cbiAgICAgICAgICAgICAgICAgICAgb24gdGhlIGVudGl0eSAke0pTT04uc3RyaW5naWZ5KGVudGl0eSl9YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbWV0YWRhdGEgO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBDb3VsZCBub3QgZmluZCBtZXRhZGF0YSBmb3IgcHJvcGVydHkgJHtTdHJpbmcocHJvcGVydHlLZXkpfVxuICAgICAgICAgICAgICAgIG9uIHRoZSBlbnRpdHkgJHtKU09OLnN0cmluZ2lmeShlbnRpdHkpfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB0eXBlIG9mIHRoZSBwcm9wZXJ0eS1tZXRhZGF0YS5cbiAgICAgKiBAcGFyYW0gZW50aXR5IFRoZSBlbnRpdHkgd2l0aCB0aGUgcHJvcGVydHkgdG8gZ2V0IHRoZSB0eXBlIGZyb21cbiAgICAgKiBAcGFyYW0gcHJvcGVydHlLZXkgVGhlIHByb3BlcnR5IG9uIHRoZSBnaXZlbiBFbnRpdHkgdG8gZ2V0IHRoZSB0eXBlIGZyb21cbiAgICAgKiBAcmV0dXJucyBUaGUgdHlwZSBvZiB0aGUgbWV0YWRhdGFcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UHJvcGVydHlUeXBlPEVudGl0eVR5cGUgZXh0ZW5kcyBFbnRpdHk+KFxuICAgICAgICBlbnRpdHk6IEVudGl0eVR5cGUsIHByb3BlcnR5S2V5OiBrZXlvZiBFbnRpdHlUeXBlXG4gICAgKTogRGVjb3JhdG9yVHlwZXMge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlUeXBlID0gUmVmbGVjdC5nZXRNZXRhZGF0YSgndHlwZScsIGVudGl0eSwgcHJvcGVydHlLZXkgYXMgc3RyaW5nKSBhcyBEZWNvcmF0b3JUeXBlcztcbiAgICAgICAgICAgIGlmICghcHJvcGVydHlUeXBlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgQ291bGQgbm90IGZpbmQgdHlwZSBtZXRhZGF0YSBmb3IgcHJvcGVydHkgJHtTdHJpbmcocHJvcGVydHlLZXkpfVxuICAgICAgICAgICAgICAgICAgICBvbiB0aGUgZW50aXR5ICR7SlNPTi5zdHJpbmdpZnkoZW50aXR5KX1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eVR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYENvdWxkIG5vdCBmaW5kIHR5cGUgbWV0YWRhdGEgZm9yIHByb3BlcnR5ICR7U3RyaW5nKHByb3BlcnR5S2V5KX1cbiAgICAgICAgICAgICAgICBvbiB0aGUgZW50aXR5ICR7SlNPTi5zdHJpbmdpZnkoZW50aXR5KX1gXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhbGwgcHJvcGVydHkgdmFsdWVzIGJhc2VkIG9uIGEgZ2l2ZW4gZW50aXR5IGRhdGEtb2JqZWN0LlxuICAgICAqIEBwYXJhbSBlbnRpdHkgVGhlIGRhdGEgb2JqZWN0IHRvIGdldCB0aGUgcHJvcGVydHkgdmFsdWVzIGZyb20uXG4gICAgICogQHBhcmFtIHRhcmdldFxuICAgICAqIHRoZSB0YXJnZXQgb2JqZWN0IHRoYXQgbmVlZHMgdG8gYmUgY29uc3RydWN0ZWRcbiAgICAgKiAoaWYgY2FsbGVkIGluc2lkZSBhIEVudGl0eSBjb25zdHJ1Y3RvciBpdHMgdXN1YWxseSB0aGlzKVxuICAgICAqIEBhbGlhcyBuZXdcbiAgICAgKiBAYWxpYXMgYnVpbGRcbiAgICAgKiBAYWxpYXMgY29uc3RydWN0XG4gICAgICovXG4gICAgc3RhdGljIG5ldzxFbnRpdHlUeXBlIGV4dGVuZHMgRW50aXR5Pih0YXJnZXQ6IEVudGl0eVR5cGUsIGVudGl0eT86IEVudGl0eVR5cGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKGVudGl0eSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZW50aXR5KSB7XG4gICAgICAgICAgICAgICAgUmVmbGVjdC5zZXQodGFyZ2V0LCBrZXksIFJlZmxlY3QuZ2V0KGVudGl0eSwga2V5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcbiAgICBzdGF0aWMgY29uc3RydWN0ID0gdGhpcy5uZXc7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcbiAgICBzdGF0aWMgYnVpbGQgPSB0aGlzLm5ldztcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgdmFsdWVzIG9uIGFuIGVudGl0eSBhcmUgdmFsaWQuXG4gICAgICogQWxzbyBjaGVja3MgYWxsIHRoZSB2YWxpZGF0b3JzIGdpdmVuIGJ5IHRoZSBtZXRhZGF0YSAoXCJyZXF1aXJlZFwiLCBcIm1heExlbmd0aFwiIGV0Yy4pXG4gICAgICogQHBhcmFtIGVudGl0eSBUaGUgZW50aXR5IHRvIHZhbGlkYXRlLlxuICAgICAqIEBwYXJhbSBvbWl0IFdoZXRoZXIgdG8gY2hlY2sgZm9yIGNyZWF0aXVuZyBvciBlZGl0aW5nIHZhbGlkaXR5XG4gICAgICogQHJldHVybnMgV2hldGhlciBvciBub3QgdGhlIGVudGl0eSBpcyB2YWxpZC5cbiAgICAgKi9cbiAgICBzdGF0aWMgaXNFbnRpdHlWYWxpZDxFbnRpdHlUeXBlIGV4dGVuZHMgRW50aXR5PihlbnRpdHk6IEVudGl0eVR5cGUsIG9taXQ6ICdjcmVhdGUnIHwgJ2VkaXQnKTogYm9vbGVhbiB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGVudGl0eSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzUHJvcGVydHlWYWxpZChlbnRpdHksIGtleSwgb21pdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhIHNpbmdsZSBwcm9wZXJ0eSB2YWx1ZSBpcyB2YWxpZFxuICAgICAqIEBwYXJhbSBlbnRpdHkgVGhlIGVudGl0eSB3aGVyZSB0aGUgcHJvcGVydHkgaXMgZnJvbVxuICAgICAqIEBwYXJhbSBrZXkgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5XG4gICAgICogQHJldHVybnMgV2hldGhlciBvciBub3QgdGhlIHByb3BlcnR5IHZhbHVlIGlzIHZhbGlkXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgaXNQcm9wZXJ0eVZhbGlkPEVudGl0eVR5cGUgZXh0ZW5kcyBFbnRpdHk+KGVudGl0eTogRW50aXR5VHlwZSwga2V5OiBrZXlvZiBFbnRpdHlUeXBlLCBvbWl0OiAnY3JlYXRlJyB8ICdlZGl0Jyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB0eXBlID0gdGhpcy5nZXRQcm9wZXJ0eVR5cGUoZW50aXR5LCBrZXkpO1xuICAgICAgICBjb25zdCBtZXRhZGF0YTogUHJvcGVydHlEZWNvcmF0b3JDb25maWcgPSB0aGlzLmdldFByb3BlcnR5TWV0YWRhdGEoZW50aXR5LCBrZXksIHR5cGUpO1xuICAgICAgICBjb25zdCBtZXRhZGF0YURlZmF1bHRTdHJpbmcgPSBtZXRhZGF0YSBhcyBEZWZhdWx0U3RyaW5nRGVjb3JhdG9yQ29uZmlnO1xuICAgICAgICBjb25zdCBtZXRhZGF0YVRleHRib3hTdHJpbmcgPSBtZXRhZGF0YSBhcyBUZXh0Ym94U3RyaW5nRGVjb3JhdG9yQ29uZmlnO1xuICAgICAgICBjb25zdCBtZXRhZGF0YUF1dG9jb21wbGV0ZVN0cmluZyA9IG1ldGFkYXRhIGFzIEF1dG9jb21wbGV0ZVN0cmluZ0RlY29yYXRvckNvbmZpZztcbiAgICAgICAgY29uc3QgbWV0YWRhdGFEZWZhdWx0TnVtYmVyID0gbWV0YWRhdGEgYXMgRGVmYXVsdE51bWJlckRlY29yYXRvckNvbmZpZztcbiAgICAgICAgY29uc3Qgb2JqZWN0UHJvcGVydHkgPSBlbnRpdHlba2V5XSBhcyB1bmtub3duIGFzIEVudGl0eVR5cGU7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhRW50aXR5QXJyYXkgPSBtZXRhZGF0YSBhcyBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZzxFbnRpdHk+O1xuICAgICAgICBjb25zdCBhcnJheUl0ZW1zID0gZW50aXR5W2tleV0gYXMgdW5rbm93biBhcyBbXTtcblxuICAgICAgICBpZiAobWV0YWRhdGEub21pdEZvckNyZWF0ZSAmJiBvbWl0ID09PSAnY3JlYXRlJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm9taXRGb3JVcGRhdGUgJiYgb21pdCA9PT0gJ2VkaXQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEucmVxdWlyZWQgJiYgIWVudGl0eVtrZXldKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlNUUklORzpcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhRGVmYXVsdFN0cmluZy5tYXhMZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgJiYgKGVudGl0eVtrZXldIGFzIHVua25vd24gYXMgc3RyaW5nKS5sZW5ndGggPiBtZXRhZGF0YURlZmF1bHRTdHJpbmcubWF4TGVuZ3RoXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YURlZmF1bHRTdHJpbmcubWluTGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICYmIChlbnRpdHlba2V5XSBhcyB1bmtub3duIGFzIHN0cmluZykubGVuZ3RoIDwgbWV0YWRhdGFEZWZhdWx0U3RyaW5nLm1pbkxlbmd0aFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGFEZWZhdWx0U3RyaW5nLnJlZ2V4XG4gICAgICAgICAgICAgICAgICAgICYmICEoZW50aXR5W2tleV0gYXMgdW5rbm93biBhcyBzdHJpbmcpLm1hdGNoKG1ldGFkYXRhRGVmYXVsdFN0cmluZy5yZWdleClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuU1RSSU5HX0FVVE9DT01QTEVURTpcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhQXV0b2NvbXBsZXRlU3RyaW5nLm1heExlbmd0aFxuICAgICAgICAgICAgICAgICAgICAmJiAoZW50aXR5W2tleV0gYXMgdW5rbm93biBhcyBzdHJpbmcpLmxlbmd0aCA+IG1ldGFkYXRhQXV0b2NvbXBsZXRlU3RyaW5nLm1heExlbmd0aFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGFBdXRvY29tcGxldGVTdHJpbmcubWluTGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICYmIChlbnRpdHlba2V5XSBhcyB1bmtub3duIGFzIHN0cmluZykubGVuZ3RoIDwgbWV0YWRhdGFBdXRvY29tcGxldGVTdHJpbmcubWluTGVuZ3RoXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YUF1dG9jb21wbGV0ZVN0cmluZy5yZWdleFxuICAgICAgICAgICAgICAgICAgICAmJiAoZW50aXR5W2tleV0gYXMgdW5rbm93biBhcyBzdHJpbmcpLm1hdGNoKG1ldGFkYXRhQXV0b2NvbXBsZXRlU3RyaW5nLnJlZ2V4KVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5TVFJJTkdfVEVYVEJPWDpcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhVGV4dGJveFN0cmluZy5tYXhMZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgJiYgKGVudGl0eVtrZXldIGFzIHVua25vd24gYXMgc3RyaW5nKS5sZW5ndGggPiBtZXRhZGF0YVRleHRib3hTdHJpbmcubWF4TGVuZ3RoXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YVRleHRib3hTdHJpbmcubWluTGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICYmIChlbnRpdHlba2V5XSBhcyB1bmtub3duIGFzIHN0cmluZykubGVuZ3RoIDwgbWV0YWRhdGFUZXh0Ym94U3RyaW5nLm1pbkxlbmd0aFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5OVU1CRVI6XG4gICAgICAgICAgICAgICAgaWYgKG1ldGFkYXRhRGVmYXVsdE51bWJlci5tYXggJiYgKGVudGl0eVtrZXldIGFzIHVua25vd24gYXMgbnVtYmVyKSA+IG1ldGFkYXRhRGVmYXVsdE51bWJlci5tYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobWV0YWRhdGFEZWZhdWx0TnVtYmVyLm1pbiAmJiAoZW50aXR5W2tleV0gYXMgdW5rbm93biBhcyBudW1iZXIpID4gbWV0YWRhdGFEZWZhdWx0TnVtYmVyLm1pbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5PQkpFQ1Q6XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYXJhbWV0ZXJLZXkgaW4gb2JqZWN0UHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzUHJvcGVydHlWYWxpZChvYmplY3RQcm9wZXJ0eSwgcGFyYW1ldGVyS2V5LCBvbWl0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5BUlJBWV9TVFJJTkdfQ0hJUFM6XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkFSUkFZX1NUUklOR19BVVRPQ09NUExFVEVfQ0hJUFM6XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkFSUkFZOlxuICAgICAgICAgICAgICAgIGlmIChtZXRhZGF0YUVudGl0eUFycmF5LnJlcXVpcmVkICYmICFhcnJheUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCB2YWxpZGF0ZSB0aGUgaW5wdXQgYmVjYXVzZSB0aGUgRGVjb3JhdG9yVHlwZSAke3R5cGV9IGlzIG5vdCBrbm93bmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhbiBlbnRpdHkgaXMgXCJkaXJ0eVwiIChpZiBpdHMgdmFsdWVzIGhhdmUgY2hhbmdlZClcbiAgICAgKiBAcGFyYW0gZW50aXR5IFRoZSBlbnRpdHkgYWZ0ZXIgYWxsIGNoYW5nZXNcbiAgICAgKiBAcGFyYW0gZW50aXR5UHJpb3JDaGFuZ2VzIFRoZSBlbnRpdHkgYmVmb3JlIHRoZSBjaGFuZ2VzXG4gICAgICogQHJldHVybnMgV2hldGhlciBvciBub3QgdGhlIGVudGl0eSBpcyBkaXJ0eVxuICAgICAqL1xuICAgIHN0YXRpYyBkaXJ0eShlbnRpdHk6IEVudGl0eSwgZW50aXR5UHJpb3JDaGFuZ2VzOiBFbnRpdHkpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFlbnRpdHlQcmlvckNoYW5nZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRpZmYgPSB0aGlzLmRpZmZlcmVuY2UoZW50aXR5LCBlbnRpdHlQcmlvckNoYW5nZXMpO1xuICAgICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGRpZmYpID09PSAne30nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wYXJlcyB0d28gRW50aXRpZXMgYW5kIHJldHVybnMgdGhlaXIgZGlmZmVyZW5jZSBpbiBhbiBvYmplY3RcbiAgICAgKiBAcGFyYW0gZW50aXR5IFRoZSBmaXJzdCBlbnRpdHkgdG8gY29tcGFyZVxuICAgICAqIEBwYXJhbSBlbnRpdHlQcmlvckNoYW5nZXMgVGhlIHNlY29uZCBlbnRpdHkgdG8gY29tcGFyZVxuICAgICAqIEByZXR1cm5zIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBFbnRpdGllcyBpbiBmb3JtIG9mIGEgUGFydGlhbFxuICAgICAqL1xuICAgIHN0YXRpYyBkaWZmZXJlbmNlPEVudGl0eVR5cGUgZXh0ZW5kcyBFbnRpdHk+KFxuICAgICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgICAgIGVudGl0eVByaW9yQ2hhbmdlczogRW50aXR5VHlwZVxuICAgICk6IFBhcnRpYWw8RW50aXR5VHlwZT4ge1xuICAgICAgICBjb25zdCByZXM6IFBhcnRpYWw8RW50aXR5VHlwZT4gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZW50aXR5KSB7XG4gICAgICAgICAgICBpZiAoIWlzRXF1YWwoZW50aXR5W2tleV0sIGVudGl0eVByaW9yQ2hhbmdlc1trZXldKSkge1xuICAgICAgICAgICAgICAgIHJlc1trZXldID0gZW50aXR5W2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjb21wYXJlIGZ1bmN0aW9uIGZvciBzb3J0aW5nIGVudGl0eSBrZXlzIGJ5IHRoZWlyIG9yZGVyIHZhbHVlXG4gICAgICogQHBhcmFtIGEgZmlyc3Qga2V5IG9mIGVudGl0eVxuICAgICAqIEBwYXJhbSBiIHNlY29uZCBrZXkgb2YgZW50aXR5XG4gICAgICogQHBhcmFtIGVudGl0eSBjdXJyZW50IGVudGl0eSAodXNlZCB0byBnZXQgbWV0YWRhdGEgb2YgZW50aXR5IGtleXMpXG4gICAgICovXG4gICAgc3RhdGljIGNvbXBhcmVPcmRlcjxFbnRpdHlUeXBlIGV4dGVuZHMgRW50aXR5PihhOiBrZXlvZiBFbnRpdHlUeXBlLCBiOiBrZXlvZiBFbnRpdHlUeXBlLCBlbnRpdHk6IEVudGl0eVR5cGUpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBtZXRhZGF0YUEgPSBFbnRpdHlVdGlsaXRpZXMuZ2V0UHJvcGVydHlNZXRhZGF0YShlbnRpdHksIGEsIEVudGl0eVV0aWxpdGllcy5nZXRQcm9wZXJ0eVR5cGUoZW50aXR5LCBhKSk7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhQiA9IEVudGl0eVV0aWxpdGllcy5nZXRQcm9wZXJ0eU1ldGFkYXRhKGVudGl0eSwgYiwgRW50aXR5VXRpbGl0aWVzLmdldFByb3BlcnR5VHlwZShlbnRpdHksIGIpKTtcblxuICAgICAgICBpZiAobWV0YWRhdGFBLm9yZGVyID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWV0YWRhdGFCLm9yZGVyID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKChtZXRhZGF0YUEub3JkZXIgYXMgbnVtYmVyKSAtIChtZXRhZGF0YUIub3JkZXIgYXMgbnVtYmVyKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2V0cyB0aGUgYm9vdHN0cmFwIGNvbHVtbiB2YWx1ZXMgZm9yIFwibGdcIiwgXCJtZFwiLCBcInNtXCJcbiAgICAgKiBAcGFyYW0gZW50aXR5IGVudGl0eSB0byBnZXQgdGhlIGJvb3RzdHJhcCBjb2x1bW4gdmFsdWVzIG9mIHRoZSBrZXlcbiAgICAgKiBAcGFyYW0ga2V5IGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0IGJvb3RzdHJhcCBjb2x1bW4gdmFsdWVzIGZyb21cbiAgICAgKiBAcGFyYW0gdHlwZSBkZWZpbmVzIGZvciB3aGljaCBzY3JlZW5zaXplIHRoZSBjb2x1bW4gdmFsdWVzIHNob3VsZCBiZSByZXR1cm5lZFxuICAgICAqIEByZXR1cm5zIGJvb3RzdHJhcCBjb2x1bW4gdmFsdWVcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0V2lkdGg8RW50aXR5VHlwZSBleHRlbmRzIEVudGl0eT4oZW50aXR5OiBFbnRpdHlUeXBlLCBrZXk6IGtleW9mIEVudGl0eVR5cGUsIHR5cGU6ICdsZycgfCAnbWQnIHwgJ3NtJyk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5VHlwZSA9IEVudGl0eVV0aWxpdGllcy5nZXRQcm9wZXJ0eVR5cGUoZW50aXR5LCBrZXkpO1xuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IEVudGl0eVV0aWxpdGllcy5nZXRQcm9wZXJ0eU1ldGFkYXRhKGVudGl0eSwga2V5LCBwcm9wZXJ0eVR5cGUpO1xuICAgICAgICBpZiAobWV0YWRhdGEuZGVmYXVsdFdpZHRocykge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnbGcnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWV0YWRhdGEuZGVmYXVsdFdpZHRoc1swXTtcbiAgICAgICAgICAgICAgICBjYXNlICdtZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXRhZGF0YS5kZWZhdWx0V2lkdGhzWzFdO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NtJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhLmRlZmF1bHRXaWR0aHNbMl07XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTb21ldGhpbmcgd2VudCB3cm9uZyBnZXR0aW5nIHRoZSB3aWR0aCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTb21ldGhpbmcgd2VudCB3cm9uZyBnZXR0aW5nIHRoZSB3aWR0aCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzZXRzIGFsbCBjaGFuZ2VzIG9uIGFuIGVudGl0eVxuICAgICAqIEBwYXJhbSBlbnRpdHkgVGhlIGVudGl0eSB0byByZXNldFxuICAgICAqIEBwYXJhbSBlbnRpdHlQcmlvckNoYW5nZXMgVGhlIGVudGl0eSBiZWZvcmUgYW55IGNoYW5nZXNcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVzZXRDaGFuZ2VzT25FbnRpdHk8RW50aXR5VHlwZSBleHRlbmRzIEVudGl0eT4oZW50aXR5OiBFbnRpdHlUeXBlLCBlbnRpdHlQcmlvckNoYW5nZXM6IEVudGl0eVR5cGUpOiB2b2lkIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZW50aXR5UHJpb3JDaGFuZ2VzKSB7XG4gICAgICAgICAgICBSZWZsZWN0LnNldChlbnRpdHksIGtleSwgUmVmbGVjdC5nZXQoZW50aXR5UHJpb3JDaGFuZ2VzLCBrZXkpKTtcbiAgICAgICAgfVxuICAgIH1cbn0iXX0=
@@ -1,43 +0,0 @@
1
- import { Component, Inject } from '@angular/core';
2
- import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
3
- import { EntityUtilities } from '../../../../classes/entity-utilities.class';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/material/dialog";
6
- import * as i2 from "../../internal-input/internal-input.component";
7
- import * as i3 from "@angular/material/button";
8
- import * as i4 from "@angular/forms";
9
- import * as i5 from "@angular/common";
10
- export class NgxMatEntityAddArrayItemDialogComponent {
11
- constructor(data, dialogRef) {
12
- this.data = data;
13
- this.dialogRef = dialogRef;
14
- this.EntityUtilities = EntityUtilities;
15
- this.getWidth = EntityUtilities.getWidth;
16
- }
17
- ngOnInit() {
18
- this.dialogRef.disableClose = true;
19
- this.setEntityKeys();
20
- }
21
- setEntityKeys() {
22
- this.entityKeys = Reflect.ownKeys(this.data.entity);
23
- const omitCreateKeys = EntityUtilities.getOmitForCreate(this.data.entity);
24
- this.entityKeys = this.entityKeys.filter((k) => !omitCreateKeys.includes(k))
25
- .sort((a, b) => EntityUtilities.compareOrder(a, b, this.data.entity));
26
- }
27
- create() {
28
- this.dialogRef.close(1);
29
- }
30
- cancel() {
31
- this.dialogRef.close();
32
- }
33
- }
34
- NgxMatEntityAddArrayItemDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NgxMatEntityAddArrayItemDialogComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
35
- NgxMatEntityAddArrayItemDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: NgxMatEntityAddArrayItemDialogComponent, selector: "ngx-mat-entity-add-array-item-dialog", ngImport: i0, template: "<h2 mat-dialog-title>{{data.createDialogData.title}}</h2>\n\n<mat-dialog-content>\n <form #form=\"ngForm\" class=\"row\">\n <ngx-mat-entity-internal-input\n *ngFor=\"let key of entityKeys\"\n [entity]=\"data.entity\"\n [propertyKey]=\"key\"\n [hideOmitForCreate]=\"true\"\n [getValidationErrorMessage]=\"data.getValidationErrorMessage\"\n class=\"col-lg-{{getWidth(data.entity, key, 'lg')}} col-md-{{getWidth(data.entity, key, 'md')}} col-sm-{{getWidth(data.entity, key, 'sm')}}\"\n >\n </ngx-mat-entity-internal-input>\n </form>\n</mat-dialog-content>\n\n<mat-dialog-actions>\n <button mat-raised-button (click)=\"create()\" [disabled]=\"!EntityUtilities.isEntityValid(data.entity, 'create')\">\n {{data.createDialogData.createButtonLabel ? data.createDialogData.createButtonLabel : 'Add'}}\n </button>\n <button mat-raised-button (click)=\"cancel()\" class=\"cancel-button\">\n {{data.createDialogData.cancelButtonLabel ? data.createDialogData.cancelButtonLabel : 'Cancel'}}\n </button>\n</mat-dialog-actions>\n", styles: ["mat-dialog-actions{display:flex;justify-content:space-between}\n"], components: [{ type: i2.NgxMatEntityInternalInputComponent, selector: "ngx-mat-entity-internal-input", inputs: ["entity", "propertyKey", "hideOmitForCreate", "hideOmitForEdit", "getValidationErrorMessage"] }, { type: i3.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"] }], directives: [{ type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }] });
36
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NgxMatEntityAddArrayItemDialogComponent, decorators: [{
37
- type: Component,
38
- args: [{ selector: 'ngx-mat-entity-add-array-item-dialog', template: "<h2 mat-dialog-title>{{data.createDialogData.title}}</h2>\n\n<mat-dialog-content>\n <form #form=\"ngForm\" class=\"row\">\n <ngx-mat-entity-internal-input\n *ngFor=\"let key of entityKeys\"\n [entity]=\"data.entity\"\n [propertyKey]=\"key\"\n [hideOmitForCreate]=\"true\"\n [getValidationErrorMessage]=\"data.getValidationErrorMessage\"\n class=\"col-lg-{{getWidth(data.entity, key, 'lg')}} col-md-{{getWidth(data.entity, key, 'md')}} col-sm-{{getWidth(data.entity, key, 'sm')}}\"\n >\n </ngx-mat-entity-internal-input>\n </form>\n</mat-dialog-content>\n\n<mat-dialog-actions>\n <button mat-raised-button (click)=\"create()\" [disabled]=\"!EntityUtilities.isEntityValid(data.entity, 'create')\">\n {{data.createDialogData.createButtonLabel ? data.createDialogData.createButtonLabel : 'Add'}}\n </button>\n <button mat-raised-button (click)=\"cancel()\" class=\"cancel-button\">\n {{data.createDialogData.cancelButtonLabel ? data.createDialogData.cancelButtonLabel : 'Cancel'}}\n </button>\n</mat-dialog-actions>\n", styles: ["mat-dialog-actions{display:flex;justify-content:space-between}\n"] }]
39
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
40
- type: Inject,
41
- args: [MAT_DIALOG_DATA]
42
- }] }, { type: i1.MatDialogRef }]; } });
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWFycmF5LWl0ZW0tZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1tYXRlcmlhbC1lbnRpdHkvc3JjL2NvbXBvbmVudHMvaW5wdXQvYXJyYXktdGFibGUvYWRkLWFycmF5LWl0ZW0tZGlhbG9nL2FkZC1hcnJheS1pdGVtLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2FycmF5LXRhYmxlL2FkZC1hcnJheS1pdGVtLWRpYWxvZy9hZGQtYXJyYXktaXRlbS1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNENBQTRDLENBQUM7Ozs7Ozs7QUF1QjdFLE1BQU0sT0FBTyx1Q0FBdUM7SUFPaEQsWUFFVyxJQUF3QyxFQUN4QyxTQUE0RTtRQUQ1RSxTQUFJLEdBQUosSUFBSSxDQUFvQztRQUN4QyxjQUFTLEdBQVQsU0FBUyxDQUFtRTtRQVR2RixvQkFBZSxHQUFHLGVBQWUsQ0FBQztRQUlsQyxhQUFRLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQztJQU1oQyxDQUFDO0lBRUwsUUFBUTtRQUNKLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUNuQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVPLGFBQWE7UUFDakIsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUF5QixDQUFDO1FBQzVFLE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN2RSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRCxNQUFNO1FBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELE1BQU07UUFDRixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNCLENBQUM7O3FJQS9CUSx1Q0FBdUMsa0JBUXBDLGVBQWU7eUhBUmxCLHVDQUF1Qyw0RUMzQnBELDhtQ0F3QkE7NEZER2EsdUNBQXVDO2tCQUxuRCxTQUFTOytCQUNJLHNDQUFzQzs7MEJBWTNDLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nTW9kZWwgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuLi8uLi8uLi8uLi9jbGFzc2VzL2VudGl0eS1tb2RlbC5jbGFzcyc7XG5pbXBvcnQgeyBFbnRpdHlVdGlsaXRpZXMgfSBmcm9tICcuLi8uLi8uLi8uLi9jbGFzc2VzL2VudGl0eS11dGlsaXRpZXMuY2xhc3MnO1xuaW1wb3J0IHsgQ3JlYXRlRGlhbG9nRGF0YSB9IGZyb20gJy4uLy4uLy4uL3RhYmxlL3RhYmxlLWRhdGEnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFkZEFycmF5SXRlbURpYWxvZ0RhdGE8RW50aXR5VHlwZSBleHRlbmRzIEVudGl0eT4ge1xuICAgIC8qKlxuICAgICAqIEFuIGVtcHR5IGVudGl0eSB0aGF0IGlzIHVzZWQgYXMgdGhlIGRhdGEgbW9kZWwuXG4gICAgICovXG4gICAgZW50aXR5OiBFbnRpdHlUeXBlLFxuICAgIC8qKlxuICAgICAqIFRoZSBpbmZvIG9mIHRoZSBnZW5lcmljIGNyZWF0ZS1kaWFsb2cuXG4gICAgICovXG4gICAgY3JlYXRlRGlhbG9nRGF0YTogQ3JlYXRlRGlhbG9nRGF0YSxcbiAgICAvKipcbiAgICAgKiAob3B0aW9uYWwpIEEgY3VzdG9tIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHRoZSBlcnJvci1tZXNzYWdlIGZvciBpbnZhbGlkIGlucHV0cy5cbiAgICAgKi9cbiAgICBnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlOiAobW9kZWw6IE5nTW9kZWwpID0+IHN0cmluZ1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25neC1tYXQtZW50aXR5LWFkZC1hcnJheS1pdGVtLWRpYWxvZycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FkZC1hcnJheS1pdGVtLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vYWRkLWFycmF5LWl0ZW0tZGlhbG9nLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTmd4TWF0RW50aXR5QWRkQXJyYXlJdGVtRGlhbG9nQ29tcG9uZW50PEVudGl0eVR5cGUgZXh0ZW5kcyBFbnRpdHk+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBFbnRpdHlVdGlsaXRpZXMgPSBFbnRpdHlVdGlsaXRpZXM7XG5cbiAgICBlbnRpdHlLZXlzITogKGtleW9mIEVudGl0eVR5cGUpW107XG5cbiAgICBnZXRXaWR0aCA9IEVudGl0eVV0aWxpdGllcy5nZXRXaWR0aDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSlcbiAgICAgICAgcHVibGljIGRhdGE6IEFkZEFycmF5SXRlbURpYWxvZ0RhdGE8RW50aXR5VHlwZT4sXG4gICAgICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxOZ3hNYXRFbnRpdHlBZGRBcnJheUl0ZW1EaWFsb2dDb21wb25lbnQ8RW50aXR5VHlwZT4+XG4gICAgKSB7IH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5kaXNhYmxlQ2xvc2UgPSB0cnVlO1xuICAgICAgICB0aGlzLnNldEVudGl0eUtleXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEVudGl0eUtleXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZW50aXR5S2V5cyA9IFJlZmxlY3Qub3duS2V5cyh0aGlzLmRhdGEuZW50aXR5KSBhcyAoa2V5b2YgRW50aXR5VHlwZSlbXTtcbiAgICAgICAgY29uc3Qgb21pdENyZWF0ZUtleXMgPSBFbnRpdHlVdGlsaXRpZXMuZ2V0T21pdEZvckNyZWF0ZSh0aGlzLmRhdGEuZW50aXR5KTtcbiAgICAgICAgdGhpcy5lbnRpdHlLZXlzID0gdGhpcy5lbnRpdHlLZXlzLmZpbHRlcigoaykgPT4gIW9taXRDcmVhdGVLZXlzLmluY2x1ZGVzKGspKVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IEVudGl0eVV0aWxpdGllcy5jb21wYXJlT3JkZXIoYSwgYiwgdGhpcy5kYXRhLmVudGl0eSkpO1xuICAgIH1cblxuICAgIGNyZWF0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoMSk7XG4gICAgfVxuXG4gICAgY2FuY2VsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICAgIH1cbn0iLCI8aDIgbWF0LWRpYWxvZy10aXRsZT57e2RhdGEuY3JlYXRlRGlhbG9nRGF0YS50aXRsZX19PC9oMj5cblxuPG1hdC1kaWFsb2ctY29udGVudD5cbiAgICA8Zm9ybSAjZm9ybT1cIm5nRm9ybVwiIGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxuZ3gtbWF0LWVudGl0eS1pbnRlcm5hbC1pbnB1dFxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGtleSBvZiBlbnRpdHlLZXlzXCJcbiAgICAgICAgICAgIFtlbnRpdHldPVwiZGF0YS5lbnRpdHlcIlxuICAgICAgICAgICAgW3Byb3BlcnR5S2V5XT1cImtleVwiXG4gICAgICAgICAgICBbaGlkZU9taXRGb3JDcmVhdGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZV09XCJkYXRhLmdldFZhbGlkYXRpb25FcnJvck1lc3NhZ2VcIlxuICAgICAgICAgICAgY2xhc3M9XCJjb2wtbGcte3tnZXRXaWR0aChkYXRhLmVudGl0eSwga2V5LCAnbGcnKX19IGNvbC1tZC17e2dldFdpZHRoKGRhdGEuZW50aXR5LCBrZXksICdtZCcpfX0gY29sLXNtLXt7Z2V0V2lkdGgoZGF0YS5lbnRpdHksIGtleSwgJ3NtJyl9fVwiXG4gICAgICAgID5cbiAgICAgICAgPC9uZ3gtbWF0LWVudGl0eS1pbnRlcm5hbC1pbnB1dD5cbiAgICA8L2Zvcm0+XG48L21hdC1kaWFsb2ctY29udGVudD5cblxuPG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIChjbGljayk9XCJjcmVhdGUoKVwiIFtkaXNhYmxlZF09XCIhRW50aXR5VXRpbGl0aWVzLmlzRW50aXR5VmFsaWQoZGF0YS5lbnRpdHksICdjcmVhdGUnKVwiPlxuICAgICAgICB7e2RhdGEuY3JlYXRlRGlhbG9nRGF0YS5jcmVhdGVCdXR0b25MYWJlbCA/IGRhdGEuY3JlYXRlRGlhbG9nRGF0YS5jcmVhdGVCdXR0b25MYWJlbCA6ICdBZGQnfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIChjbGljayk9XCJjYW5jZWwoKVwiIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiPlxuICAgICAgICB7e2RhdGEuY3JlYXRlRGlhbG9nRGF0YS5jYW5jZWxCdXR0b25MYWJlbCA/IGRhdGEuY3JlYXRlRGlhbG9nRGF0YS5jYW5jZWxCdXR0b25MYWJlbCA6ICdDYW5jZWwnfX1cbiAgICA8L2J1dHRvbj5cbjwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuIl19
@@ -1,22 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { NgxMatEntityAddArrayItemDialogComponent } from './add-array-item-dialog.component';
4
- import { NgxMatEntityInternalInputModule } from '../../internal-input/internal-input.module';
5
- import { MatDialogModule } from '@angular/material/dialog';
6
- import { FormsModule } from '@angular/forms';
7
- import { MatButtonModule } from '@angular/material/button';
8
- import * as i0 from "@angular/core";
9
- export class NgxMatEntityAddArrayItemDialogModule {
10
- }
11
- NgxMatEntityAddArrayItemDialogModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NgxMatEntityAddArrayItemDialogModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
12
- NgxMatEntityAddArrayItemDialogModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NgxMatEntityAddArrayItemDialogModule, declarations: [NgxMatEntityAddArrayItemDialogComponent], imports: [CommonModule, NgxMatEntityInternalInputModule, MatDialogModule, FormsModule, MatButtonModule], exports: [NgxMatEntityAddArrayItemDialogComponent] });
13
- NgxMatEntityAddArrayItemDialogModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NgxMatEntityAddArrayItemDialogModule, imports: [[CommonModule, NgxMatEntityInternalInputModule, MatDialogModule, FormsModule, MatButtonModule]] });
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NgxMatEntityAddArrayItemDialogModule, decorators: [{
15
- type: NgModule,
16
- args: [{
17
- declarations: [NgxMatEntityAddArrayItemDialogComponent],
18
- imports: [CommonModule, NgxMatEntityInternalInputModule, MatDialogModule, FormsModule, MatButtonModule],
19
- exports: [NgxMatEntityAddArrayItemDialogComponent]
20
- }]
21
- }] });
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWFycmF5LWl0ZW0tZGlhbG9nLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1tYXRlcmlhbC1lbnRpdHkvc3JjL2NvbXBvbmVudHMvaW5wdXQvYXJyYXktdGFibGUvYWRkLWFycmF5LWl0ZW0tZGlhbG9nL2FkZC1hcnJheS1pdGVtLWRpYWxvZy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVDQUF1QyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDNUYsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDN0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBTzNELE1BQU0sT0FBTyxvQ0FBb0M7O2tJQUFwQyxvQ0FBb0M7bUlBQXBDLG9DQUFvQyxpQkFKOUIsdUNBQXVDLGFBQzVDLFlBQVksRUFBRSwrQkFBK0IsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLGVBQWUsYUFDNUYsdUNBQXVDO21JQUV4QyxvQ0FBb0MsWUFIcEMsQ0FBQyxZQUFZLEVBQUUsK0JBQStCLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxlQUFlLENBQUM7NEZBRzlGLG9DQUFvQztrQkFMaEQsUUFBUTttQkFBQztvQkFDTixZQUFZLEVBQUUsQ0FBQyx1Q0FBdUMsQ0FBQztvQkFDdkQsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLCtCQUErQixFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsZUFBZSxDQUFDO29CQUN2RyxPQUFPLEVBQUUsQ0FBQyx1Q0FBdUMsQ0FBQztpQkFDckQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5neE1hdEVudGl0eUFkZEFycmF5SXRlbURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vYWRkLWFycmF5LWl0ZW0tZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ3hNYXRFbnRpdHlJbnRlcm5hbElucHV0TW9kdWxlIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwtaW5wdXQvaW50ZXJuYWwtaW5wdXQubW9kdWxlJztcbmltcG9ydCB7IE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbTmd4TWF0RW50aXR5QWRkQXJyYXlJdGVtRGlhbG9nQ29tcG9uZW50XSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBOZ3hNYXRFbnRpdHlJbnRlcm5hbElucHV0TW9kdWxlLCBNYXREaWFsb2dNb2R1bGUsIEZvcm1zTW9kdWxlLCBNYXRCdXR0b25Nb2R1bGVdLFxuICAgIGV4cG9ydHM6IFtOZ3hNYXRFbnRpdHlBZGRBcnJheUl0ZW1EaWFsb2dDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIE5neE1hdEVudGl0eUFkZEFycmF5SXRlbURpYWxvZ01vZHVsZSB7fSJdfQ==