ngx-material-entity 15.3.0 → 16.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/classes/entity.model.d.ts +2 -2
- package/components/confirm-dialog/confirm-dialog-data.d.ts +1 -1
- package/components/edit-page/edit-page.component.d.ts +4 -2
- package/components/edit-page/page-edit-data.builder.d.ts +1 -1
- package/components/input/array/array-string-chips-input/array-string-chips-input.component.d.ts +1 -0
- package/components/input/array/array-table.class.d.ts +4 -2
- package/components/input/base-input.component.d.ts +5 -1
- package/components/input/boolean/boolean-checkbox-input/boolean-checkbox-input.component.d.ts +1 -1
- package/components/input/boolean/boolean-dropdown-input/boolean-dropdown-input.component.d.ts +1 -1
- package/components/input/file/file-default-input/file-default-input.component.d.ts +0 -2
- package/components/input/file/file-image-input/file-image-input.component.d.ts +3 -2
- package/components/input/file/file-input/file-input.component.d.ts +4 -2
- package/components/input/input.component.d.ts +9 -4
- package/components/input/input.module.d.ts +2 -1
- package/components/table/display-column-value/base-display-column-value.component.d.ts +1 -1
- package/components/table/display-column-value/display-column-value.component.d.ts +1 -1
- package/components/table/edit-dialog/edit-entity-dialog.component.d.ts +3 -1
- package/components/table/table-data.builder.d.ts +1 -1
- package/components/table/table-data.d.ts +1 -1
- package/components/table/table.component.d.ts +1 -1
- package/decorators/base/decorator-types.enum.d.ts +1 -1
- package/decorators/base/property-decorator.data.d.ts +1 -1
- package/decorators/file/file-decorator.data.d.ts +1 -1
- package/decorators/number/number-decorator.data.d.ts +1 -1
- package/decorators/string/string-decorator.data.d.ts +1 -1
- package/encapsulation/jszip.utilities.d.ts +1 -1
- package/encapsulation/uuid.utilities.d.ts +11 -0
- package/esm2022/classes/base.builder.mjs +44 -0
- package/esm2022/classes/entity.model.mjs +26 -0
- package/esm2022/components/confirm-dialog/confirm-dialog-data.builder.mjs +58 -0
- package/esm2022/components/confirm-dialog/confirm-dialog.component.mjs +60 -0
- package/esm2022/components/edit-page/edit-page.component.mjs +291 -0
- package/esm2022/components/input/array/array-date-input/array-date-input.component.mjs +23 -0
- package/esm2022/components/input/array/array-date-range-input/array-date-range-input.component.mjs +49 -0
- package/esm2022/components/input/array/array-date-time-input/array-date-time-input.component.mjs +49 -0
- package/esm2022/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.mjs +50 -0
- package/esm2022/components/input/array/array-string-chips-input/array-string-chips-input.component.mjs +69 -0
- package/esm2022/components/input/array/array-table.class.mjs +100 -0
- package/esm2022/components/input/base-input.component.mjs +88 -0
- package/esm2022/components/input/boolean/boolean-checkbox-input/boolean-checkbox-input.component.mjs +21 -0
- package/esm2022/components/input/boolean/boolean-dropdown-input/boolean-dropdown-input.component.mjs +17 -0
- package/esm2022/components/input/boolean/boolean-toggle-input/boolean-toggle-input.component.mjs +21 -0
- package/esm2022/components/input/custom/custom.component.mjs +28 -0
- package/esm2022/components/input/date/date-input/date-input.component.mjs +19 -0
- package/esm2022/components/input/date/date-range-input/date-range-input.component.mjs +68 -0
- package/esm2022/components/input/date/date-time-input/date-time-input.component.mjs +69 -0
- package/esm2022/components/input/file/file-default-input/file-default-input.component.mjs +18 -0
- package/esm2022/components/input/file/file-image-input/file-image-input.component.mjs +101 -0
- package/esm2022/components/input/file/file-input/dragDrop.directive.mjs +62 -0
- package/esm2022/components/input/file/file-input/file-input.component.mjs +206 -0
- package/esm2022/components/input/input.component.mjs +849 -0
- package/esm2022/components/input/input.module.mjs +172 -0
- package/esm2022/components/input/number/number-dropdown-input/number-dropdown-input.component.mjs +23 -0
- package/esm2022/components/input/number/number-input/number-input.component.mjs +16 -0
- package/esm2022/components/input/number/number-slider-input/number-slider-input.component.mjs +17 -0
- package/esm2022/components/input/relations/references-many-input/references-many-input.component.mjs +102 -0
- package/esm2022/components/input/string/string-autocomplete-input/string-autocomplete-input.component.mjs +36 -0
- package/esm2022/components/input/string/string-dropdown-input/string-dropdown-input.component.mjs +23 -0
- package/esm2022/components/input/string/string-input/string-input.component.mjs +16 -0
- package/esm2022/components/input/string/string-password-input/string-password-input.component.mjs +39 -0
- package/esm2022/components/input/string/string-textbox-input/string-textbox-input.component.mjs +17 -0
- package/esm2022/components/table/create-dialog/create-dialog-data.builder.mjs +42 -0
- package/esm2022/components/table/create-dialog/create-entity-dialog-data.builder.mjs +32 -0
- package/esm2022/components/table/create-dialog/create-entity-dialog.component.mjs +107 -0
- package/esm2022/components/table/display-column-value/base-display-column-value.component.mjs +28 -0
- package/esm2022/components/table/display-column-value/display-column-value.component.mjs +37 -0
- package/esm2022/components/table/edit-dialog/edit-data.builder.mjs +106 -0
- package/esm2022/components/table/edit-dialog/edit-entity-dialog.component.mjs +209 -0
- package/esm2022/components/table/edit-dialog/edit-entity.builder.mjs +39 -0
- package/esm2022/components/table/table-data.builder.mjs +269 -0
- package/esm2022/components/table/table.component.mjs +348 -0
- package/esm2022/decorators/array/array-decorator-internal.data.mjs +286 -0
- package/esm2022/decorators/array/array-decorator.data.mjs +21 -0
- package/esm2022/decorators/base/property-decorator-internal.data.mjs +82 -0
- package/esm2022/decorators/base/property-decorator.data.mjs +56 -0
- package/esm2022/decorators/boolean/boolean-decorator-internal.data.mjs +43 -0
- package/esm2022/decorators/boolean/boolean-decorator.data.mjs +11 -0
- package/esm2022/decorators/custom/custom-decorator-internal.data.mjs +35 -0
- package/{esm2020 → esm2022}/decorators/date/date-decorator-internal.data.mjs +43 -1
- package/esm2022/decorators/date/date-decorator.data.mjs +11 -0
- package/esm2022/decorators/file/file-decorator-internal.data.mjs +143 -0
- package/esm2022/decorators/file/file-decorator.data.mjs +64 -0
- package/esm2022/decorators/has-many/has-many-decorator-internal.data.mjs +42 -0
- package/esm2022/decorators/number/number-decorator-internal.data.mjs +76 -0
- package/esm2022/decorators/number/number-decorator.data.mjs +11 -0
- package/esm2022/decorators/object/object-decorator-internal.data.mjs +20 -0
- package/esm2022/decorators/object/object-decorator.data.mjs +22 -0
- package/esm2022/decorators/references-many/references-many-decorator-internal.data.mjs +48 -0
- package/esm2022/decorators/references-one/references-one-decorator-internal.data.mjs +24 -0
- package/esm2022/decorators/string/string-decorator-internal.data.mjs +114 -0
- package/esm2022/decorators/string/string-decorator.data.mjs +11 -0
- package/esm2022/encapsulation/uuid.utilities.mjs +15 -0
- package/esm2022/services/entity.service.mjs +276 -0
- package/esm2022/utilities/date.utilities.mjs +159 -0
- package/esm2022/utilities/entity.utilities.mjs +905 -0
- package/esm2022/utilities/file.utilities.mjs +180 -0
- package/{fesm2020 → fesm2022}/ngx-material-entity.mjs +1355 -484
- package/fesm2022/ngx-material-entity.mjs.map +1 -0
- package/package.json +11 -17
- package/utilities/date.utilities.d.ts +1 -1
- package/utilities/entity.utilities.d.ts +7 -3
- package/utilities/file.utilities.d.ts +6 -2
- package/esm2020/classes/base.builder.mjs +0 -42
- package/esm2020/classes/entity.model.mjs +0 -22
- package/esm2020/components/confirm-dialog/confirm-dialog-data.builder.mjs +0 -44
- package/esm2020/components/confirm-dialog/confirm-dialog.component.mjs +0 -57
- package/esm2020/components/edit-page/edit-page.component.mjs +0 -274
- package/esm2020/components/input/array/array-date-input/array-date-input.component.mjs +0 -26
- package/esm2020/components/input/array/array-date-range-input/array-date-range-input.component.mjs +0 -50
- package/esm2020/components/input/array/array-date-time-input/array-date-time-input.component.mjs +0 -49
- package/esm2020/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.mjs +0 -49
- package/esm2020/components/input/array/array-string-chips-input/array-string-chips-input.component.mjs +0 -70
- package/esm2020/components/input/array/array-table.class.mjs +0 -93
- package/esm2020/components/input/base-input.component.mjs +0 -64
- package/esm2020/components/input/boolean/boolean-checkbox-input/boolean-checkbox-input.component.mjs +0 -21
- package/esm2020/components/input/boolean/boolean-dropdown-input/boolean-dropdown-input.component.mjs +0 -17
- package/esm2020/components/input/boolean/boolean-toggle-input/boolean-toggle-input.component.mjs +0 -21
- package/esm2020/components/input/custom/custom.component.mjs +0 -26
- package/esm2020/components/input/date/date-input/date-input.component.mjs +0 -22
- package/esm2020/components/input/date/date-range-input/date-range-input.component.mjs +0 -71
- package/esm2020/components/input/date/date-time-input/date-time-input.component.mjs +0 -71
- package/esm2020/components/input/file/file-default-input/file-default-input.component.mjs +0 -23
- package/esm2020/components/input/file/file-image-input/file-image-input.component.mjs +0 -98
- package/esm2020/components/input/file/file-input/dragDrop.directive.mjs +0 -63
- package/esm2020/components/input/file/file-input/file-input.component.mjs +0 -195
- package/esm2020/components/input/input.component.mjs +0 -746
- package/esm2020/components/input/input.module.mjs +0 -169
- package/esm2020/components/input/number/number-dropdown-input/number-dropdown-input.component.mjs +0 -26
- package/esm2020/components/input/number/number-input/number-input.component.mjs +0 -16
- package/esm2020/components/input/number/number-slider-input/number-slider-input.component.mjs +0 -17
- package/esm2020/components/input/relations/references-many-input/references-many-input.component.mjs +0 -100
- package/esm2020/components/input/string/string-autocomplete-input/string-autocomplete-input.component.mjs +0 -34
- package/esm2020/components/input/string/string-dropdown-input/string-dropdown-input.component.mjs +0 -26
- package/esm2020/components/input/string/string-input/string-input.component.mjs +0 -16
- package/esm2020/components/input/string/string-password-input/string-password-input.component.mjs +0 -42
- package/esm2020/components/input/string/string-textbox-input/string-textbox-input.component.mjs +0 -17
- package/esm2020/components/table/create-dialog/create-dialog-data.builder.mjs +0 -32
- package/esm2020/components/table/create-dialog/create-entity-dialog-data.builder.mjs +0 -26
- package/esm2020/components/table/create-dialog/create-entity-dialog.component.mjs +0 -100
- package/esm2020/components/table/display-column-value/base-display-column-value.component.mjs +0 -27
- package/esm2020/components/table/display-column-value/display-column-value.component.mjs +0 -33
- package/esm2020/components/table/edit-dialog/edit-data.builder.mjs +0 -76
- package/esm2020/components/table/edit-dialog/edit-entity-dialog.component.mjs +0 -195
- package/esm2020/components/table/edit-dialog/edit-entity.builder.mjs +0 -29
- package/esm2020/components/table/table-data.builder.mjs +0 -205
- package/esm2020/components/table/table.component.mjs +0 -333
- package/esm2020/decorators/array/array-decorator-internal.data.mjs +0 -150
- package/esm2020/decorators/array/array-decorator.data.mjs +0 -7
- package/esm2020/decorators/base/property-decorator-internal.data.mjs +0 -58
- package/esm2020/decorators/base/property-decorator.data.mjs +0 -6
- package/esm2020/decorators/boolean/boolean-decorator-internal.data.mjs +0 -33
- package/esm2020/decorators/boolean/boolean-decorator.data.mjs +0 -7
- package/esm2020/decorators/custom/custom-decorator-internal.data.mjs +0 -27
- package/esm2020/decorators/date/date-decorator.data.mjs +0 -7
- package/esm2020/decorators/file/file-decorator-internal.data.mjs +0 -97
- package/esm2020/decorators/file/file-decorator.data.mjs +0 -7
- package/esm2020/decorators/has-many/has-many-decorator-internal.data.mjs +0 -32
- package/esm2020/decorators/number/number-decorator-internal.data.mjs +0 -54
- package/esm2020/decorators/number/number-decorator.data.mjs +0 -7
- package/esm2020/decorators/object/object-decorator-internal.data.mjs +0 -14
- package/esm2020/decorators/object/object-decorator.data.mjs +0 -7
- package/esm2020/decorators/references-many/references-many-decorator-internal.data.mjs +0 -30
- package/esm2020/decorators/references-one/references-one-decorator-internal.data.mjs +0 -16
- package/esm2020/decorators/string/string-decorator-internal.data.mjs +0 -72
- package/esm2020/decorators/string/string-decorator.data.mjs +0 -7
- package/esm2020/services/entity.service.mjs +0 -274
- package/esm2020/utilities/date.utilities.mjs +0 -159
- package/esm2020/utilities/entity.utilities.mjs +0 -896
- package/esm2020/utilities/file.utilities.mjs +0 -176
- package/fesm2015/ngx-material-entity.mjs +0 -6300
- package/fesm2015/ngx-material-entity.mjs.map +0 -1
- package/fesm2020/ngx-material-entity.mjs.map +0 -1
- /package/{esm2020 → esm2022}/components/confirm-dialog/confirm-dialog-data.mjs +0 -0
- /package/{esm2020 → esm2022}/components/edit-page/edit-data.route.mjs +0 -0
- /package/{esm2020 → esm2022}/components/edit-page/page-edit-data.builder.mjs +0 -0
- /package/{esm2020 → esm2022}/components/get-validation-error-message.function.mjs +0 -0
- /package/{esm2020 → esm2022}/components/table/create-dialog/create-entity-dialog-data.mjs +0 -0
- /package/{esm2020 → esm2022}/components/table/default.actions.mjs +0 -0
- /package/{esm2020 → esm2022}/components/table/edit-dialog/edit-entity-data.mjs +0 -0
- /package/{esm2020 → esm2022}/components/table/table-data.mjs +0 -0
- /package/{esm2020 → esm2022}/decorators/array/array.decorator.mjs +0 -0
- /package/{esm2020 → esm2022}/decorators/base/base-property.decorator.mjs +0 -0
- /package/{esm2020 → esm2022}/decorators/base/decorator-types.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/decorators/base/dropdown-value.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/decorators/boolean/boolean.decorator.mjs +0 -0
- /package/{esm2020 → esm2022}/decorators/custom/custom-decorator.data.mjs +0 -0
- /package/{esm2020 → esm2022}/decorators/custom/custom.decorator.mjs +0 -0
- /package/{esm2020 → esm2022}/decorators/date/date.decorator.mjs +0 -0
- /package/{esm2020 → esm2022}/decorators/file/file.decorator.mjs +0 -0
- /package/{esm2020 → esm2022}/decorators/has-many/has-many-decorator.data.mjs +0 -0
- /package/{esm2020 → esm2022}/decorators/has-many/has-many.decorator.mjs +0 -0
- /package/{esm2020 → esm2022}/decorators/number/number.decorator.mjs +0 -0
- /package/{esm2020 → esm2022}/decorators/object/object.decorator.mjs +0 -0
- /package/{esm2020 → esm2022}/decorators/references-many/references-many-decorator.data.mjs +0 -0
- /package/{esm2020 → esm2022}/decorators/references-many/references-many.decorator.mjs +0 -0
- /package/{esm2020 → esm2022}/decorators/references-one/references-one-decorator.data.mjs +0 -0
- /package/{esm2020 → esm2022}/decorators/references-one/references-one.decorator.mjs +0 -0
- /package/{esm2020 → esm2022}/decorators/string/string.decorator.mjs +0 -0
- /package/{esm2020 → esm2022}/encapsulation/js-2-xml.utilities.mjs +0 -0
- /package/{esm2020 → esm2022}/encapsulation/jszip.utilities.mjs +0 -0
- /package/{esm2020 → esm2022}/encapsulation/lodash.utilities.mjs +0 -0
- /package/{esm2020 → esm2022}/encapsulation/reflect.utilities.mjs +0 -0
- /package/{esm2020 → esm2022}/functions/default-false.function.mjs +0 -0
- /package/{esm2020 → esm2022}/functions/default-true.function.mjs +0 -0
- /package/{esm2020 → esm2022}/functions/is-async-function.function.mjs +0 -0
- /package/{esm2020 → esm2022}/mocks/placeholder-data.png.mjs +0 -0
- /package/{esm2020 → esm2022}/ngx-material-entity.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/services/unsaved-changes.guard.mjs +0 -0
- /package/{esm2020 → esm2022}/utilities/selection.utilities.mjs +0 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { PropertyDecoratorConfig } from '../base/property-decorator.data';
|
|
2
|
+
/**
|
|
3
|
+
* Definition for the @object metadata.
|
|
4
|
+
*/
|
|
5
|
+
class ObjectDecoratorConfig extends PropertyDecoratorConfig {
|
|
6
|
+
/**
|
|
7
|
+
* The class of the object. Is used to call the constructor so that all metadata is initialized.
|
|
8
|
+
*/
|
|
9
|
+
EntityClass;
|
|
10
|
+
/**
|
|
11
|
+
* How to display the object.
|
|
12
|
+
*
|
|
13
|
+
* The objects properties are added as input fields in an section of the entity.
|
|
14
|
+
* Useful if the object only contains a few properties (e.g. A address on a user).
|
|
15
|
+
*/
|
|
16
|
+
displayStyle;
|
|
17
|
+
/**
|
|
18
|
+
* Some properties of the objects entity class that should be omitted.
|
|
19
|
+
*/
|
|
20
|
+
omit;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWRlY29yYXRvci5kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvZGVjb3JhdG9ycy9vYmplY3Qvb2JqZWN0LWRlY29yYXRvci5kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTFFOztHQUVHO0FBQ0gsTUFBZSxxQkFBcUUsU0FBUSx1QkFBdUI7SUFDL0c7O09BRUc7SUFDSCxXQUFXLENBQWtDO0lBRTdDOzs7OztPQUtHO0lBQ0gsWUFBWSxDQUFZO0lBRXhCOztPQUVHO0lBQ0gsSUFBSSxDQUF3QjtDQUMvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VFbnRpdHlUeXBlLCBFbnRpdHlDbGFzc05ld2FibGUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBQcm9wZXJ0eURlY29yYXRvckNvbmZpZyB9IGZyb20gJy4uL2Jhc2UvcHJvcGVydHktZGVjb3JhdG9yLmRhdGEnO1xuXG4vKipcbiAqIERlZmluaXRpb24gZm9yIHRoZSBAb2JqZWN0IG1ldGFkYXRhLlxuICovXG5hYnN0cmFjdCBjbGFzcyBPYmplY3REZWNvcmF0b3JDb25maWc8RW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+PiBleHRlbmRzIFByb3BlcnR5RGVjb3JhdG9yQ29uZmlnIHtcbiAgICAvKipcbiAgICAgKiBUaGUgY2xhc3Mgb2YgdGhlIG9iamVjdC4gSXMgdXNlZCB0byBjYWxsIHRoZSBjb25zdHJ1Y3RvciBzbyB0aGF0IGFsbCBtZXRhZGF0YSBpcyBpbml0aWFsaXplZC5cbiAgICAgKi9cbiAgICBFbnRpdHlDbGFzcyE6IEVudGl0eUNsYXNzTmV3YWJsZTxFbnRpdHlUeXBlPjtcblxuICAgIC8qKlxuICAgICAqIEhvdyB0byBkaXNwbGF5IHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBUaGUgb2JqZWN0cyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCBhcyBpbnB1dCBmaWVsZHMgaW4gYW4gc2VjdGlvbiBvZiB0aGUgZW50aXR5LlxuICAgICAqIFVzZWZ1bCBpZiB0aGUgb2JqZWN0IG9ubHkgY29udGFpbnMgYSBmZXcgcHJvcGVydGllcyAoZS5nLiBBIGFkZHJlc3Mgb24gYSB1c2VyKS5cbiAgICAgKi9cbiAgICBkaXNwbGF5U3R5bGUhOiAnaW5saW5lJztcblxuICAgIC8qKlxuICAgICAqIFNvbWUgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0cyBlbnRpdHkgY2xhc3MgdGhhdCBzaG91bGQgYmUgb21pdHRlZC5cbiAgICAgKi9cbiAgICBvbWl0PzogKGtleW9mIEVudGl0eVR5cGUpW107XG59XG5cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYSBvYmplY3QgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVmYXVsdE9iamVjdERlY29yYXRvckNvbmZpZzxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+IGV4dGVuZHMgT2JqZWN0RGVjb3JhdG9yQ29uZmlnPEVudGl0eVR5cGU+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGRpc3BsYXlTdHlsZTogJ2lubGluZSdcbn0iXX0=
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';
|
|
2
|
+
/**
|
|
3
|
+
* The internal DefaultNumberDecoratorConfig. Sets default values.
|
|
4
|
+
*/
|
|
5
|
+
export class ReferencesManyDecoratorConfigInternal extends PropertyDecoratorConfigInternal {
|
|
6
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
7
|
+
getReferencedEntities;
|
|
8
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
9
|
+
getDropdownValues;
|
|
10
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
11
|
+
getEntityForId;
|
|
12
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
13
|
+
displayColumns;
|
|
14
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
15
|
+
addButtonLabel;
|
|
16
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
17
|
+
removeButtonLabel;
|
|
18
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
19
|
+
dropdownLabel;
|
|
20
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
21
|
+
addAll;
|
|
22
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
23
|
+
addAllButtonLabel;
|
|
24
|
+
constructor(data) {
|
|
25
|
+
super(data);
|
|
26
|
+
this.getReferencedEntities = data.getReferencedEntities;
|
|
27
|
+
this.getDropdownValues = data.getDropdownValues;
|
|
28
|
+
this.getEntityForId = data.getEntityForId ?? defaultGetEntityForId;
|
|
29
|
+
this.displayColumns = data.displayColumns;
|
|
30
|
+
this.addButtonLabel = data.addButtonLabel ?? 'Add';
|
|
31
|
+
this.removeButtonLabel = data.removeButtonLabel ?? 'Remove';
|
|
32
|
+
this.defaultWidths = data.defaultWidths ?? [12, 12, 12];
|
|
33
|
+
this.dropdownLabel = data.dropdownLabel ?? 'Select';
|
|
34
|
+
this.addAll = data.addAll ?? false;
|
|
35
|
+
this.addAllButtonLabel = data.addAllButtonLabel ?? 'Add all';
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The default function to use when trying to get the referenced entity for the given id.
|
|
40
|
+
*
|
|
41
|
+
* @param entityId - The id of the referenced entity.
|
|
42
|
+
* @param allReferencedEntities - All referenced entities.
|
|
43
|
+
* @returns The entity that has the given id.
|
|
44
|
+
*/
|
|
45
|
+
export function defaultGetEntityForId(entityId, allReferencedEntities) {
|
|
46
|
+
return allReferencedEntities.find(e => e['id'] === entityId);
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlcy1tYW55LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvZGVjb3JhdG9ycy9yZWZlcmVuY2VzLW1hbnkvcmVmZXJlbmNlcy1tYW55LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRzNGOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHFDQUNULFNBQVEsK0JBQStCO0lBQ3ZDLCtDQUErQztJQUMvQyxxQkFBcUIsQ0FBOEI7SUFDbkQsK0NBQStDO0lBQy9DLGlCQUFpQixDQUFnRTtJQUNqRiwrQ0FBK0M7SUFDL0MsY0FBYyxDQUF3RTtJQUN0RiwrQ0FBK0M7SUFDL0MsY0FBYyxDQUE4QjtJQUM1QywrQ0FBK0M7SUFDL0MsY0FBYyxDQUFTO0lBQ3ZCLCtDQUErQztJQUMvQyxpQkFBaUIsQ0FBUztJQUMxQiwrQ0FBK0M7SUFDL0MsYUFBYSxDQUFTO0lBQ3RCLCtDQUErQztJQUMvQyxNQUFNLENBQVU7SUFDaEIsK0NBQStDO0lBQy9DLGlCQUFpQixDQUFTO0lBRTFCLFlBQVksSUFBK0M7UUFDdkQsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1osSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztRQUN4RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQ2hELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsSUFBSSxxQkFBcUIsQ0FBQztRQUNuRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDMUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxJQUFJLEtBQUssQ0FBQztRQUNuRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixJQUFJLFFBQVEsQ0FBQztRQUM1RCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxRQUFRLENBQUM7UUFDcEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztRQUNuQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixJQUFJLFNBQVMsQ0FBQztJQUNqRSxDQUFDO0NBQ0o7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQ2pDLFFBQWdCLEVBQ2hCLHFCQUFtQztJQUVuQyxPQUFPLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUF3QixDQUFDLEtBQUssUUFBUSxDQUFlLENBQUM7QUFDbkcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VFbnRpdHlUeXBlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgRGlzcGxheUNvbHVtbiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvdGFibGUvdGFibGUtZGF0YSc7XG5pbXBvcnQgeyBEcm9wZG93blZhbHVlIH0gZnJvbSAnLi4vYmFzZS9kcm9wZG93bi12YWx1ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUHJvcGVydHlEZWNvcmF0b3JDb25maWdJbnRlcm5hbCB9IGZyb20gJy4uL2Jhc2UvcHJvcGVydHktZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgUmVmZXJlbmNlc01hbnlEZWNvcmF0b3JDb25maWcgfSBmcm9tICcuL3JlZmVyZW5jZXMtbWFueS1kZWNvcmF0b3IuZGF0YSc7XG5cbi8qKlxuICogVGhlIGludGVybmFsIERlZmF1bHROdW1iZXJEZWNvcmF0b3JDb25maWcuIFNldHMgZGVmYXVsdCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWZlcmVuY2VzTWFueURlY29yYXRvckNvbmZpZ0ludGVybmFsPEVudGl0eVR5cGUgZXh0ZW5kcyBCYXNlRW50aXR5VHlwZTxFbnRpdHlUeXBlPj5cbiAgICBleHRlbmRzIFByb3BlcnR5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgaW1wbGVtZW50cyBSZWZlcmVuY2VzTWFueURlY29yYXRvckNvbmZpZzxFbnRpdHlUeXBlPiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBnZXRSZWZlcmVuY2VkRW50aXRpZXM6ICgpID0+IFByb21pc2U8RW50aXR5VHlwZVtdPjtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGdldERyb3Bkb3duVmFsdWVzOiAocmVmZXJlbmNlZEVudGl0aWVzOiBFbnRpdHlUeXBlW10pID0+IERyb3Bkb3duVmFsdWU8c3RyaW5nPltdO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgZ2V0RW50aXR5Rm9ySWQ6IChlbnRpdHlJZDogc3RyaW5nLCBhbGxSZWZlcmVuY2VkRW50aXRpZXM6IEVudGl0eVR5cGVbXSkgPT4gRW50aXR5VHlwZTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGRpc3BsYXlDb2x1bW5zOiBEaXNwbGF5Q29sdW1uPEVudGl0eVR5cGU+W107XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBhZGRCdXR0b25MYWJlbDogc3RyaW5nO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgcmVtb3ZlQnV0dG9uTGFiZWw6IHN0cmluZztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGRyb3Bkb3duTGFiZWw6IHN0cmluZztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGFkZEFsbDogYm9vbGVhbjtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGFkZEFsbEJ1dHRvbkxhYmVsOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhOiBSZWZlcmVuY2VzTWFueURlY29yYXRvckNvbmZpZzxFbnRpdHlUeXBlPikge1xuICAgICAgICBzdXBlcihkYXRhKTtcbiAgICAgICAgdGhpcy5nZXRSZWZlcmVuY2VkRW50aXRpZXMgPSBkYXRhLmdldFJlZmVyZW5jZWRFbnRpdGllcztcbiAgICAgICAgdGhpcy5nZXREcm9wZG93blZhbHVlcyA9IGRhdGEuZ2V0RHJvcGRvd25WYWx1ZXM7XG4gICAgICAgIHRoaXMuZ2V0RW50aXR5Rm9ySWQgPSBkYXRhLmdldEVudGl0eUZvcklkID8/IGRlZmF1bHRHZXRFbnRpdHlGb3JJZDtcbiAgICAgICAgdGhpcy5kaXNwbGF5Q29sdW1ucyA9IGRhdGEuZGlzcGxheUNvbHVtbnM7XG4gICAgICAgIHRoaXMuYWRkQnV0dG9uTGFiZWwgPSBkYXRhLmFkZEJ1dHRvbkxhYmVsID8/ICdBZGQnO1xuICAgICAgICB0aGlzLnJlbW92ZUJ1dHRvbkxhYmVsID0gZGF0YS5yZW1vdmVCdXR0b25MYWJlbCA/PyAnUmVtb3ZlJztcbiAgICAgICAgdGhpcy5kZWZhdWx0V2lkdGhzID0gZGF0YS5kZWZhdWx0V2lkdGhzID8/IFsxMiwgMTIsIDEyXTtcbiAgICAgICAgdGhpcy5kcm9wZG93bkxhYmVsID0gZGF0YS5kcm9wZG93bkxhYmVsID8/ICdTZWxlY3QnO1xuICAgICAgICB0aGlzLmFkZEFsbCA9IGRhdGEuYWRkQWxsID8/IGZhbHNlO1xuICAgICAgICB0aGlzLmFkZEFsbEJ1dHRvbkxhYmVsID0gZGF0YS5hZGRBbGxCdXR0b25MYWJlbCA/PyAnQWRkIGFsbCc7XG4gICAgfVxufVxuXG4vKipcbiAqIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIHRvIHVzZSB3aGVuIHRyeWluZyB0byBnZXQgdGhlIHJlZmVyZW5jZWQgZW50aXR5IGZvciB0aGUgZ2l2ZW4gaWQuXG4gKlxuICogQHBhcmFtIGVudGl0eUlkIC0gVGhlIGlkIG9mIHRoZSByZWZlcmVuY2VkIGVudGl0eS5cbiAqIEBwYXJhbSBhbGxSZWZlcmVuY2VkRW50aXRpZXMgLSBBbGwgcmVmZXJlbmNlZCBlbnRpdGllcy5cbiAqIEByZXR1cm5zIFRoZSBlbnRpdHkgdGhhdCBoYXMgdGhlIGdpdmVuIGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdEdldEVudGl0eUZvcklkPEVudGl0eVR5cGUgZXh0ZW5kcyBCYXNlRW50aXR5VHlwZTxFbnRpdHlUeXBlPj4oXG4gICAgZW50aXR5SWQ6IHN0cmluZyxcbiAgICBhbGxSZWZlcmVuY2VkRW50aXRpZXM6IEVudGl0eVR5cGVbXVxuKTogRW50aXR5VHlwZSB7XG4gICAgcmV0dXJuIGFsbFJlZmVyZW5jZWRFbnRpdGllcy5maW5kKGUgPT4gZVsnaWQnIGFzIGtleW9mIEVudGl0eVR5cGVdID09PSBlbnRpdHlJZCkgYXMgRW50aXR5VHlwZTtcbn0iXX0=
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';
|
|
2
|
+
import { defaultGetEntityForId } from '../references-many/references-many-decorator-internal.data';
|
|
3
|
+
/**
|
|
4
|
+
* The internal DefaultNumberDecoratorConfig. Sets default values.
|
|
5
|
+
*/
|
|
6
|
+
export class ReferencesOneDecoratorConfigInternal extends PropertyDecoratorConfigInternal {
|
|
7
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
8
|
+
getReferencedEntities;
|
|
9
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
10
|
+
getDropdownValues;
|
|
11
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
12
|
+
getEntityForId;
|
|
13
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
14
|
+
EntityClass;
|
|
15
|
+
constructor(data) {
|
|
16
|
+
super(data);
|
|
17
|
+
this.getReferencedEntities = data.getReferencedEntities;
|
|
18
|
+
this.getDropdownValues = data.getDropdownValues;
|
|
19
|
+
this.getEntityForId = data.getEntityForId ?? defaultGetEntityForId;
|
|
20
|
+
this.EntityClass = data.EntityClass;
|
|
21
|
+
this.defaultWidths = data.defaultWidths ?? [12, 12, 12];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlcy1vbmUtZGVjb3JhdG9yLWludGVybmFsLmRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9kZWNvcmF0b3JzL3JlZmVyZW5jZXMtb25lL3JlZmVyZW5jZXMtb25lLWRlY29yYXRvci1pbnRlcm5hbC5kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBR25HOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG9DQUNULFNBQVEsK0JBQStCO0lBRXZDLCtDQUErQztJQUMvQyxxQkFBcUIsQ0FBOEI7SUFDbkQsK0NBQStDO0lBQy9DLGlCQUFpQixDQUFnRTtJQUNqRiwrQ0FBK0M7SUFDL0MsY0FBYyxDQUF3RTtJQUN0RiwrQ0FBK0M7SUFDL0MsV0FBVyxDQUFpQztJQUU1QyxZQUFZLElBQThDO1FBQ3RELEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNaLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7UUFDeEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUNoRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLElBQUkscUJBQXFCLENBQUM7UUFDbkUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUVudGl0eVR5cGUsIEVudGl0eUNsYXNzTmV3YWJsZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7IERyb3Bkb3duVmFsdWUgfSBmcm9tICcuLi9iYXNlL2Ryb3Bkb3duLXZhbHVlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQcm9wZXJ0eURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vYmFzZS9wcm9wZXJ0eS1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBkZWZhdWx0R2V0RW50aXR5Rm9ySWQgfSBmcm9tICcuLi9yZWZlcmVuY2VzLW1hbnkvcmVmZXJlbmNlcy1tYW55LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IFJlZmVyZW5jZXNPbmVEZWNvcmF0b3JDb25maWcgfSBmcm9tICcuL3JlZmVyZW5jZXMtb25lLWRlY29yYXRvci5kYXRhJztcblxuLyoqXG4gKiBUaGUgaW50ZXJuYWwgRGVmYXVsdE51bWJlckRlY29yYXRvckNvbmZpZy4gU2V0cyBkZWZhdWx0IHZhbHVlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlZmVyZW5jZXNPbmVEZWNvcmF0b3JDb25maWdJbnRlcm5hbDxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+XG4gICAgZXh0ZW5kcyBQcm9wZXJ0eURlY29yYXRvckNvbmZpZ0ludGVybmFsIGltcGxlbWVudHMgUmVmZXJlbmNlc09uZURlY29yYXRvckNvbmZpZzxFbnRpdHlUeXBlPiB7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGdldFJlZmVyZW5jZWRFbnRpdGllczogKCkgPT4gUHJvbWlzZTxFbnRpdHlUeXBlW10+O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgZ2V0RHJvcGRvd25WYWx1ZXM6IChyZWZlcmVuY2VkRW50aXRpZXM6IEVudGl0eVR5cGVbXSkgPT4gRHJvcGRvd25WYWx1ZTxzdHJpbmc+W107XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBnZXRFbnRpdHlGb3JJZDogKGVudGl0eUlkOiBzdHJpbmcsIGFsbFJlZmVyZW5jZWRFbnRpdGllczogRW50aXR5VHlwZVtdKSA9PiBFbnRpdHlUeXBlO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgRW50aXR5Q2xhc3M6IEVudGl0eUNsYXNzTmV3YWJsZTxFbnRpdHlUeXBlPjtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE6IFJlZmVyZW5jZXNPbmVEZWNvcmF0b3JDb25maWc8RW50aXR5VHlwZT4pIHtcbiAgICAgICAgc3VwZXIoZGF0YSk7XG4gICAgICAgIHRoaXMuZ2V0UmVmZXJlbmNlZEVudGl0aWVzID0gZGF0YS5nZXRSZWZlcmVuY2VkRW50aXRpZXM7XG4gICAgICAgIHRoaXMuZ2V0RHJvcGRvd25WYWx1ZXMgPSBkYXRhLmdldERyb3Bkb3duVmFsdWVzO1xuICAgICAgICB0aGlzLmdldEVudGl0eUZvcklkID0gZGF0YS5nZXRFbnRpdHlGb3JJZCA/PyBkZWZhdWx0R2V0RW50aXR5Rm9ySWQ7XG4gICAgICAgIHRoaXMuRW50aXR5Q2xhc3MgPSBkYXRhLkVudGl0eUNsYXNzO1xuICAgICAgICB0aGlzLmRlZmF1bHRXaWR0aHMgPSBkYXRhLmRlZmF1bHRXaWR0aHMgPz8gWzEyLCAxMiwgMTJdO1xuICAgIH1cbn0iXX0=
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';
|
|
2
|
+
/**
|
|
3
|
+
* The internal DropdownStringDecoratorConfig. Sets default values.
|
|
4
|
+
*/
|
|
5
|
+
export class DropdownStringDecoratorConfigInternal extends PropertyDecoratorConfigInternal {
|
|
6
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
7
|
+
displayStyle;
|
|
8
|
+
// eslint-disable-next-line jsdoc/require-jsdoc, @typescript-eslint/no-explicit-any
|
|
9
|
+
dropdownValues;
|
|
10
|
+
constructor(data) {
|
|
11
|
+
super(data);
|
|
12
|
+
this.displayStyle = data.displayStyle;
|
|
13
|
+
this.dropdownValues = this.dropdownValuesToFunction(data.dropdownValues);
|
|
14
|
+
}
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
16
|
+
dropdownValuesToFunction(dropdownValues) {
|
|
17
|
+
if (Array.isArray(dropdownValues)) {
|
|
18
|
+
return async () => dropdownValues;
|
|
19
|
+
}
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
21
|
+
return async (e) => await dropdownValues(e);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* The internal DefaultStringDecoratorConfig. Sets default values.
|
|
26
|
+
*/
|
|
27
|
+
export class DefaultStringDecoratorConfigInternal extends PropertyDecoratorConfigInternal {
|
|
28
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
29
|
+
displayStyle;
|
|
30
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
31
|
+
minLength;
|
|
32
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
33
|
+
maxLength;
|
|
34
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
35
|
+
regex;
|
|
36
|
+
constructor(data) {
|
|
37
|
+
super(data);
|
|
38
|
+
this.displayStyle = data.displayStyle;
|
|
39
|
+
this.minLength = data.minLength;
|
|
40
|
+
this.maxLength = data.maxLength;
|
|
41
|
+
this.regex = data.regex;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* The internal TextboxStringDecoratorConfig. Sets default values.
|
|
46
|
+
*/
|
|
47
|
+
export class TextboxStringDecoratorConfigInternal extends PropertyDecoratorConfigInternal {
|
|
48
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
49
|
+
displayStyle;
|
|
50
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
51
|
+
minLength;
|
|
52
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
53
|
+
maxLength;
|
|
54
|
+
constructor(data) {
|
|
55
|
+
super(data);
|
|
56
|
+
this.displayStyle = data.displayStyle;
|
|
57
|
+
this.minLength = data.minLength;
|
|
58
|
+
this.maxLength = data.maxLength;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The internal AutocompleteStringDecoratorConfig. Sets default values.
|
|
63
|
+
*/
|
|
64
|
+
export class AutocompleteStringDecoratorConfigInternal extends PropertyDecoratorConfigInternal {
|
|
65
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
66
|
+
displayStyle;
|
|
67
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
68
|
+
autocompleteValues;
|
|
69
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
70
|
+
minLength;
|
|
71
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
72
|
+
maxLength;
|
|
73
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
74
|
+
regex;
|
|
75
|
+
constructor(data) {
|
|
76
|
+
super(data);
|
|
77
|
+
this.displayStyle = data.displayStyle;
|
|
78
|
+
this.autocompleteValues = data.autocompleteValues;
|
|
79
|
+
this.minLength = data.minLength;
|
|
80
|
+
this.maxLength = data.maxLength;
|
|
81
|
+
this.regex = data.regex;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* The internal PasswordStringDecoratorConfig. Sets default values.
|
|
86
|
+
*/
|
|
87
|
+
export class PasswordStringDecoratorConfigInternal extends PropertyDecoratorConfigInternal {
|
|
88
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
89
|
+
displayStyle;
|
|
90
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
91
|
+
minLength;
|
|
92
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
93
|
+
maxLength;
|
|
94
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
95
|
+
regex;
|
|
96
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
97
|
+
needsConfirmation;
|
|
98
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
99
|
+
confirmationDisplayName;
|
|
100
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
101
|
+
passwordsDontMatchErrorMessage;
|
|
102
|
+
constructor(data) {
|
|
103
|
+
super(data);
|
|
104
|
+
this.displayStyle = data.displayStyle;
|
|
105
|
+
this.minLength = data.minLength;
|
|
106
|
+
this.maxLength = data.maxLength;
|
|
107
|
+
this.regex = data.regex;
|
|
108
|
+
this.needsConfirmation = data.needsConfirmation ?? true;
|
|
109
|
+
this.confirmationDisplayName = data.confirmationDisplayName ?? 'Confirm Password';
|
|
110
|
+
this.passwordsDontMatchErrorMessage = data.passwordsDontMatchErrorMessage ?? 'Passwords need to match!';
|
|
111
|
+
this.defaultWidths = data.defaultWidths ?? [12, 12, 12];
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLWRlY29yYXRvci1pbnRlcm5hbC5kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvZGVjb3JhdG9ycy9zdHJpbmcvc3RyaW5nLWRlY29yYXRvci1pbnRlcm5hbC5kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRzNGOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHFDQUFzQyxTQUFRLCtCQUErQjtJQUN0RiwrQ0FBK0M7SUFDL0MsWUFBWSxDQUFhO0lBQ3pCLG1GQUFtRjtJQUNuRixjQUFjLENBQWtFO0lBRWhGLFlBQVksSUFBbUM7UUFDM0MsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1osSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsOERBQThEO0lBQ3RELHdCQUF3QixDQUFDLGNBQW9DO1FBQ2pFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUMvQixPQUFPLEtBQUssSUFBSSxFQUFFLENBQUMsY0FBYyxDQUFDO1NBQ3JDO1FBQ0QsOERBQThEO1FBQzlELE9BQU8sS0FBSyxFQUFFLENBQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztDQUNKO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sb0NBQXFDLFNBQVEsK0JBQStCO0lBQ3JGLCtDQUErQztJQUMvQyxZQUFZLENBQVM7SUFDckIsK0NBQStDO0lBQy9DLFNBQVMsQ0FBVTtJQUNuQiwrQ0FBK0M7SUFDL0MsU0FBUyxDQUFVO0lBQ25CLCtDQUErQztJQUMvQyxLQUFLLENBQVU7SUFFZixZQUFZLElBQWtDO1FBQzFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNaLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUN0QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUM1QixDQUFDO0NBQ0o7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxvQ0FBcUMsU0FBUSwrQkFBK0I7SUFDckYsK0NBQStDO0lBQy9DLFlBQVksQ0FBWTtJQUN4QiwrQ0FBK0M7SUFDL0MsU0FBUyxDQUFVO0lBQ25CLCtDQUErQztJQUMvQyxTQUFTLENBQVU7SUFFbkIsWUFBWSxJQUFrQztRQUMxQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDWixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDdEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUNwQyxDQUFDO0NBQ0o7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyx5Q0FDVCxTQUFRLCtCQUErQjtJQUV2QywrQ0FBK0M7SUFDL0MsWUFBWSxDQUFpQjtJQUM3QiwrQ0FBK0M7SUFDL0Msa0JBQWtCLENBQVc7SUFDN0IsK0NBQStDO0lBQy9DLFNBQVMsQ0FBVTtJQUNuQiwrQ0FBK0M7SUFDL0MsU0FBUyxDQUFVO0lBQ25CLCtDQUErQztJQUMvQyxLQUFLLENBQVU7SUFFZixZQUFZLElBQXVDO1FBQy9DLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNaLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUN0QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBQ2xELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQzVCLENBQUM7Q0FDSjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHFDQUNULFNBQVEsK0JBQStCO0lBQ3ZDLCtDQUErQztJQUMvQyxZQUFZLENBQWE7SUFDekIsK0NBQStDO0lBQy9DLFNBQVMsQ0FBVTtJQUNuQiwrQ0FBK0M7SUFDL0MsU0FBUyxDQUFVO0lBQ25CLCtDQUErQztJQUMvQyxLQUFLLENBQVU7SUFDZiwrQ0FBK0M7SUFDL0MsaUJBQWlCLENBQVU7SUFDM0IsK0NBQStDO0lBQy9DLHVCQUF1QixDQUFTO0lBQ2hDLCtDQUErQztJQUMvQyw4QkFBOEIsQ0FBUztJQUV2QyxZQUFZLElBQW1DO1FBQzNDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNaLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUN0QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQztRQUN4RCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixJQUFJLGtCQUFrQixDQUFDO1FBQ2xGLElBQUksQ0FBQyw4QkFBOEIsR0FBRyxJQUFJLENBQUMsOEJBQThCLElBQUksMEJBQTBCLENBQUM7UUFDeEcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1RCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEcm9wZG93blZhbHVlIH0gZnJvbSAnLi4vYmFzZS9kcm9wZG93bi12YWx1ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUHJvcGVydHlEZWNvcmF0b3JDb25maWdJbnRlcm5hbCB9IGZyb20gJy4uL2Jhc2UvcHJvcGVydHktZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgQXV0b2NvbXBsZXRlU3RyaW5nRGVjb3JhdG9yQ29uZmlnLCBEZWZhdWx0U3RyaW5nRGVjb3JhdG9yQ29uZmlnLCBEcm9wZG93blN0cmluZ0RlY29yYXRvckNvbmZpZywgUGFzc3dvcmRTdHJpbmdEZWNvcmF0b3JDb25maWcsIFN0cmluZ0Ryb3Bkb3duVmFsdWVzLCBUZXh0Ym94U3RyaW5nRGVjb3JhdG9yQ29uZmlnIH0gZnJvbSAnLi9zdHJpbmctZGVjb3JhdG9yLmRhdGEnO1xuXG4vKipcbiAqIFRoZSBpbnRlcm5hbCBEcm9wZG93blN0cmluZ0RlY29yYXRvckNvbmZpZy4gU2V0cyBkZWZhdWx0IHZhbHVlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIERyb3Bkb3duU3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgZXh0ZW5kcyBQcm9wZXJ0eURlY29yYXRvckNvbmZpZ0ludGVybmFsIGltcGxlbWVudHMgRHJvcGRvd25TdHJpbmdEZWNvcmF0b3JDb25maWcge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgZGlzcGxheVN0eWxlOiAnZHJvcGRvd24nO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgZHJvcGRvd25WYWx1ZXM6ICgoZW50aXR5OiBhbnkpID0+IFByb21pc2U8RHJvcGRvd25WYWx1ZTxzdHJpbmcgfCB1bmRlZmluZWQ+W10+KTtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE6IERyb3Bkb3duU3RyaW5nRGVjb3JhdG9yQ29uZmlnKSB7XG4gICAgICAgIHN1cGVyKGRhdGEpO1xuICAgICAgICB0aGlzLmRpc3BsYXlTdHlsZSA9IGRhdGEuZGlzcGxheVN0eWxlO1xuICAgICAgICB0aGlzLmRyb3Bkb3duVmFsdWVzID0gdGhpcy5kcm9wZG93blZhbHVlc1RvRnVuY3Rpb24oZGF0YS5kcm9wZG93blZhbHVlcyk7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwcml2YXRlIGRyb3Bkb3duVmFsdWVzVG9GdW5jdGlvbihkcm9wZG93blZhbHVlczogU3RyaW5nRHJvcGRvd25WYWx1ZXMpOiAoZW50aXR5OiBhbnkpID0+IFByb21pc2U8RHJvcGRvd25WYWx1ZTxzdHJpbmcgfCB1bmRlZmluZWQ+W10+IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZHJvcGRvd25WYWx1ZXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gYXN5bmMgKCkgPT4gZHJvcGRvd25WYWx1ZXM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgcmV0dXJuIGFzeW5jIChlOiBhbnkpID0+IGF3YWl0IGRyb3Bkb3duVmFsdWVzKGUpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBUaGUgaW50ZXJuYWwgRGVmYXVsdFN0cmluZ0RlY29yYXRvckNvbmZpZy4gU2V0cyBkZWZhdWx0IHZhbHVlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIERlZmF1bHRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCBleHRlbmRzIFByb3BlcnR5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgaW1wbGVtZW50cyBEZWZhdWx0U3RyaW5nRGVjb3JhdG9yQ29uZmlnIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGRpc3BsYXlTdHlsZTogJ2xpbmUnO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgbWluTGVuZ3RoPzogbnVtYmVyO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgbWF4TGVuZ3RoPzogbnVtYmVyO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgcmVnZXg/OiBSZWdFeHA7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhOiBEZWZhdWx0U3RyaW5nRGVjb3JhdG9yQ29uZmlnKSB7XG4gICAgICAgIHN1cGVyKGRhdGEpO1xuICAgICAgICB0aGlzLmRpc3BsYXlTdHlsZSA9IGRhdGEuZGlzcGxheVN0eWxlO1xuICAgICAgICB0aGlzLm1pbkxlbmd0aCA9IGRhdGEubWluTGVuZ3RoO1xuICAgICAgICB0aGlzLm1heExlbmd0aCA9IGRhdGEubWF4TGVuZ3RoO1xuICAgICAgICB0aGlzLnJlZ2V4ID0gZGF0YS5yZWdleDtcbiAgICB9XG59XG5cbi8qKlxuICogVGhlIGludGVybmFsIFRleHRib3hTdHJpbmdEZWNvcmF0b3JDb25maWcuIFNldHMgZGVmYXVsdCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0Ym94U3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgZXh0ZW5kcyBQcm9wZXJ0eURlY29yYXRvckNvbmZpZ0ludGVybmFsIGltcGxlbWVudHMgVGV4dGJveFN0cmluZ0RlY29yYXRvckNvbmZpZyB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBkaXNwbGF5U3R5bGU6ICd0ZXh0Ym94JztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIG1pbkxlbmd0aD86IG51bWJlcjtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIG1heExlbmd0aD86IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE6IFRleHRib3hTdHJpbmdEZWNvcmF0b3JDb25maWcpIHtcbiAgICAgICAgc3VwZXIoZGF0YSk7XG4gICAgICAgIHRoaXMuZGlzcGxheVN0eWxlID0gZGF0YS5kaXNwbGF5U3R5bGU7XG4gICAgICAgIHRoaXMubWluTGVuZ3RoID0gZGF0YS5taW5MZW5ndGg7XG4gICAgICAgIHRoaXMubWF4TGVuZ3RoID0gZGF0YS5tYXhMZW5ndGg7XG4gICAgfVxufVxuXG4vKipcbiAqIFRoZSBpbnRlcm5hbCBBdXRvY29tcGxldGVTdHJpbmdEZWNvcmF0b3JDb25maWcuIFNldHMgZGVmYXVsdCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBBdXRvY29tcGxldGVTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbFxuICAgIGV4dGVuZHMgUHJvcGVydHlEZWNvcmF0b3JDb25maWdJbnRlcm5hbCBpbXBsZW1lbnRzIEF1dG9jb21wbGV0ZVN0cmluZ0RlY29yYXRvckNvbmZpZyB7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGRpc3BsYXlTdHlsZTogJ2F1dG9jb21wbGV0ZSc7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBhdXRvY29tcGxldGVWYWx1ZXM6IHN0cmluZ1tdO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgbWluTGVuZ3RoPzogbnVtYmVyO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgbWF4TGVuZ3RoPzogbnVtYmVyO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgcmVnZXg/OiBSZWdFeHA7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhOiBBdXRvY29tcGxldGVTdHJpbmdEZWNvcmF0b3JDb25maWcpIHtcbiAgICAgICAgc3VwZXIoZGF0YSk7XG4gICAgICAgIHRoaXMuZGlzcGxheVN0eWxlID0gZGF0YS5kaXNwbGF5U3R5bGU7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlVmFsdWVzID0gZGF0YS5hdXRvY29tcGxldGVWYWx1ZXM7XG4gICAgICAgIHRoaXMubWluTGVuZ3RoID0gZGF0YS5taW5MZW5ndGg7XG4gICAgICAgIHRoaXMubWF4TGVuZ3RoID0gZGF0YS5tYXhMZW5ndGg7XG4gICAgICAgIHRoaXMucmVnZXggPSBkYXRhLnJlZ2V4O1xuICAgIH1cbn1cblxuLyoqXG4gKiBUaGUgaW50ZXJuYWwgUGFzc3dvcmRTdHJpbmdEZWNvcmF0b3JDb25maWcuIFNldHMgZGVmYXVsdCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXNzd29yZFN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsXG4gICAgZXh0ZW5kcyBQcm9wZXJ0eURlY29yYXRvckNvbmZpZ0ludGVybmFsIGltcGxlbWVudHMgUGFzc3dvcmRTdHJpbmdEZWNvcmF0b3JDb25maWcge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgZGlzcGxheVN0eWxlOiAncGFzc3dvcmQnO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgbWluTGVuZ3RoPzogbnVtYmVyO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgbWF4TGVuZ3RoPzogbnVtYmVyO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgcmVnZXg/OiBSZWdFeHA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBuZWVkc0NvbmZpcm1hdGlvbjogYm9vbGVhbjtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGNvbmZpcm1hdGlvbkRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBwYXNzd29yZHNEb250TWF0Y2hFcnJvck1lc3NhZ2U6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE6IFBhc3N3b3JkU3RyaW5nRGVjb3JhdG9yQ29uZmlnKSB7XG4gICAgICAgIHN1cGVyKGRhdGEpO1xuICAgICAgICB0aGlzLmRpc3BsYXlTdHlsZSA9IGRhdGEuZGlzcGxheVN0eWxlO1xuICAgICAgICB0aGlzLm1pbkxlbmd0aCA9IGRhdGEubWluTGVuZ3RoO1xuICAgICAgICB0aGlzLm1heExlbmd0aCA9IGRhdGEubWF4TGVuZ3RoO1xuICAgICAgICB0aGlzLnJlZ2V4ID0gZGF0YS5yZWdleDtcbiAgICAgICAgdGhpcy5uZWVkc0NvbmZpcm1hdGlvbiA9IGRhdGEubmVlZHNDb25maXJtYXRpb24gPz8gdHJ1ZTtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25EaXNwbGF5TmFtZSA9IGRhdGEuY29uZmlybWF0aW9uRGlzcGxheU5hbWUgPz8gJ0NvbmZpcm0gUGFzc3dvcmQnO1xuICAgICAgICB0aGlzLnBhc3N3b3Jkc0RvbnRNYXRjaEVycm9yTWVzc2FnZSA9IGRhdGEucGFzc3dvcmRzRG9udE1hdGNoRXJyb3JNZXNzYWdlID8/ICdQYXNzd29yZHMgbmVlZCB0byBtYXRjaCEnO1xuICAgICAgICB0aGlzLmRlZmF1bHRXaWR0aHMgPSBkYXRhLmRlZmF1bHRXaWR0aHMgPz8gWzEyLCAxMiwgMTJdO1xuICAgIH1cbn0iXX0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { PropertyDecoratorConfig } from '../base/property-decorator.data';
|
|
2
|
+
/**
|
|
3
|
+
* Definition for the @string metadata.
|
|
4
|
+
*/
|
|
5
|
+
class StringDecoratorConfig extends PropertyDecoratorConfig {
|
|
6
|
+
/**
|
|
7
|
+
* How to display the string.
|
|
8
|
+
*/
|
|
9
|
+
displayStyle;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLWRlY29yYXRvci5kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvZGVjb3JhdG9ycy9zdHJpbmcvc3RyaW5nLWRlY29yYXRvci5kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBVTFFOztHQUVHO0FBQ0gsTUFBZSxxQkFBc0IsU0FBUSx1QkFBdUI7SUFDaEU7O09BRUc7SUFDSCxZQUFZLENBQWlFO0NBQ2hGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHJvcGRvd25WYWx1ZSB9IGZyb20gJy4uL2Jhc2UvZHJvcGRvd24tdmFsdWUuaW50ZXJmYWNlJztcbmltcG9ydCB7IFByb3BlcnR5RGVjb3JhdG9yQ29uZmlnIH0gZnJvbSAnLi4vYmFzZS9wcm9wZXJ0eS1kZWNvcmF0b3IuZGF0YSc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgdHlwZSBTdHJpbmdEcm9wZG93blZhbHVlcyA9XG4gICAgRHJvcGRvd25WYWx1ZTxzdHJpbmcgfCB1bmRlZmluZWQ+W11cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHwgKChlbnRpdHk6IGFueSkgPT4gRHJvcGRvd25WYWx1ZTxzdHJpbmcgfCB1bmRlZmluZWQ+W10pXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICB8ICgoZW50aXR5OiBhbnkpID0+IFByb21pc2U8RHJvcGRvd25WYWx1ZTxzdHJpbmcgfCB1bmRlZmluZWQ+W10+KVxuXG4vKipcbiAqIERlZmluaXRpb24gZm9yIHRoZSBAc3RyaW5nIG1ldGFkYXRhLlxuICovXG5hYnN0cmFjdCBjbGFzcyBTdHJpbmdEZWNvcmF0b3JDb25maWcgZXh0ZW5kcyBQcm9wZXJ0eURlY29yYXRvckNvbmZpZyB7XG4gICAgLyoqXG4gICAgICogSG93IHRvIGRpc3BsYXkgdGhlIHN0cmluZy5cbiAgICAgKi9cbiAgICBkaXNwbGF5U3R5bGUhOiAnbGluZScgfCAndGV4dGJveCcgfCAnYXV0b2NvbXBsZXRlJyB8ICdkcm9wZG93bicgfCAncGFzc3dvcmQnO1xufVxuXG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGEgc3RyaW5nIHByb3BlcnR5IGRpc3BsYXllZCBhcyBhIGRyb3Bkb3duLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERyb3Bkb3duU3RyaW5nRGVjb3JhdG9yQ29uZmlnIGV4dGVuZHMgU3RyaW5nRGVjb3JhdG9yQ29uZmlnIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGRpc3BsYXlTdHlsZTogJ2Ryb3Bkb3duJyxcbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWVzIG9mIHRoZSBkcm9wZG93biwgY29uc2lzdGluZyBvZiBhIG5hbWUgdG8gZGlzcGxheSBhbmQgdGhlIGFjdHVhbCB2YWx1ZVxuICAgICAqIENhbiBhbHNvIHJlY2VpdmUgYSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIHZhbHVlcy5cbiAgICAgKi9cbiAgICBkcm9wZG93blZhbHVlczogU3RyaW5nRHJvcGRvd25WYWx1ZXNcbn1cblxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIHN0cmluZyBwcm9wZXJ0eSBkaXNwbGF5ZWQgaW4gYSBkZWZhdWx0IHRleHQgaW5wdXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVmYXVsdFN0cmluZ0RlY29yYXRvckNvbmZpZyBleHRlbmRzIFN0cmluZ0RlY29yYXRvckNvbmZpZyB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBkaXNwbGF5U3R5bGU6ICdsaW5lJyxcbiAgICAvKipcbiAgICAgKiBUaGUgbWluaW11bSByZXF1aXJlZCBsZW5ndGggb2YgdGhlIHN0cmluZy5cbiAgICAgKi9cbiAgICBtaW5MZW5ndGg/OiBudW1iZXIsXG4gICAgLyoqXG4gICAgICogVGhlIG1heGltdW0gcmVxdWlyZWQgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuXG4gICAgICovXG4gICAgbWF4TGVuZ3RoPzogbnVtYmVyLFxuICAgIC8qKlxuICAgICAqIEEgcmVnZXggdXNlZCBmb3IgdmFsaWRhdGlvbi5cbiAgICAgKi9cbiAgICByZWdleD86IFJlZ0V4cFxufVxuXG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGEgc3RyaW5nIHByb3BlcnR5IGRpc3BsYXllZCBpbiBhIHRleHRib3ggaW5wdXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dGJveFN0cmluZ0RlY29yYXRvckNvbmZpZyBleHRlbmRzIFN0cmluZ0RlY29yYXRvckNvbmZpZyB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBkaXNwbGF5U3R5bGU6ICd0ZXh0Ym94JyxcbiAgICAvKipcbiAgICAgKiBUaGUgbWluaW11bSByZXF1aXJlZCBsZW5ndGggb2YgdGhlIHN0cmluZy5cbiAgICAgKi9cbiAgICBtaW5MZW5ndGg/OiBudW1iZXIsXG4gICAgLyoqXG4gICAgICogVGhlIG1heGltdW0gcmVxdWlyZWQgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuXG4gICAgICovXG4gICAgbWF4TGVuZ3RoPzogbnVtYmVyXG59XG5cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYSBzdHJpbmcgcHJvcGVydHkgZGlzcGxheWVkIGluIGEgbWF0LWF1dG9jb21wbGV0ZSBpbnB1dC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRvY29tcGxldGVTdHJpbmdEZWNvcmF0b3JDb25maWcgZXh0ZW5kcyBTdHJpbmdEZWNvcmF0b3JDb25maWcge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgZGlzcGxheVN0eWxlOiAnYXV0b2NvbXBsZXRlJyxcbiAgICAvKipcbiAgICAgKiBUaGUgYXV0b2NvbXBsZXRlIHZhbHVlcy5cbiAgICAgKi9cbiAgICBhdXRvY29tcGxldGVWYWx1ZXM6IHN0cmluZ1tdLFxuICAgIC8qKlxuICAgICAqIFRoZSBtaW5pbXVtIHJlcXVpcmVkIGxlbmd0aCBvZiB0aGUgc3RyaW5nLlxuICAgICAqL1xuICAgIG1pbkxlbmd0aD86IG51bWJlcixcbiAgICAvKipcbiAgICAgKiBUaGUgbWF4aW11bSByZXF1aXJlZCBsZW5ndGggb2YgdGhlIHN0cmluZy5cbiAgICAgKi9cbiAgICBtYXhMZW5ndGg/OiBudW1iZXIsXG4gICAgLyoqXG4gICAgICogQSByZWdleCB1c2VkIGZvciB2YWxpZGF0aW9uLlxuICAgICAqL1xuICAgIHJlZ2V4PzogUmVnRXhwXG59XG5cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYSBzdHJpbmcgcHJvcGVydHkgZGlzcGxheWVkIGluIGEgcGFzc3dvcmQgaW5wdXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRTdHJpbmdEZWNvcmF0b3JDb25maWcgZXh0ZW5kcyBTdHJpbmdEZWNvcmF0b3JDb25maWcge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgZGlzcGxheVN0eWxlOiAncGFzc3dvcmQnLFxuICAgIC8qKlxuICAgICAqIFRoZSBtaW5pbXVtIHJlcXVpcmVkIGxlbmd0aCBvZiB0aGUgcGFzc3dvcmQuXG4gICAgICovXG4gICAgbWluTGVuZ3RoPzogbnVtYmVyLFxuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIHJlcXVpcmVkIGxlbmd0aCBvZiB0aGUgcGFzc3dvcmQuXG4gICAgICovXG4gICAgbWF4TGVuZ3RoPzogbnVtYmVyLFxuICAgIC8qKlxuICAgICAqIEEgcmVnZXggdXNlZCBmb3IgdmFsaWRhdGlvbi5cbiAgICAgKi9cbiAgICByZWdleD86IFJlZ0V4cCxcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgcGFzc3dvcmQgbmVlZHMgdG8gYmUgcmV0eXBlZC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBuZWVkc0NvbmZpcm1hdGlvbj86IGJvb2xlYW4sXG4gICAgLyoqXG4gICAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgY29uZmlybWF0aW9uIHBhc3N3b3JkIGlucHV0LlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ0NvbmZpcm0gUGFzc3dvcmQnXG4gICAgICovXG4gICAgY29uZmlybWF0aW9uRGlzcGxheU5hbWU/OiBzdHJpbmcsXG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIG1lc3NhZ2UgdG8gZGlzcGxheSB3aGVuIHRoZSBwYXNzd29yZCBhbmQgdGhlIGNvbmZpcm0gcGFzc3dvcmQgZG9uJ3QgbWF0Y2guXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnUGFzc3dvcmRzIG5lZWQgdG8gbWF0Y2ghJ1xuICAgICAqL1xuICAgIHBhc3N3b3Jkc0RvbnRNYXRjaEVycm9yTWVzc2FnZT86IHN0cmluZ1xufSJdfQ==
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as uuid from 'uuid';
|
|
2
|
+
/**
|
|
3
|
+
* Encapsulates functionality of the uuid package.
|
|
4
|
+
*/
|
|
5
|
+
export class UUIDUtilities {
|
|
6
|
+
/**
|
|
7
|
+
* Creates a new v4 uuid.
|
|
8
|
+
*
|
|
9
|
+
* @returns The created uuid.
|
|
10
|
+
*/
|
|
11
|
+
static create() {
|
|
12
|
+
return uuid.v4();
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXVpZC51dGlsaXRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9lbmNhcHN1bGF0aW9uL3V1aWQudXRpbGl0aWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRTdCOztHQUVHO0FBQ0gsTUFBTSxPQUFnQixhQUFhO0lBQy9COzs7O09BSUc7SUFDSCxNQUFNLENBQUMsTUFBTTtRQUNULE9BQU8sSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ3JCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XG5cbi8qKlxuICogRW5jYXBzdWxhdGVzIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHV1aWQgcGFja2FnZS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFVVSURVdGlsaXRpZXMge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgdjQgdXVpZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIHV1aWQuXG4gICAgICovXG4gICAgc3RhdGljIGNyZWF0ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdXVpZC52NCgpO1xuICAgIH1cbn0iXX0=
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
import { BehaviorSubject, firstValueFrom } from 'rxjs';
|
|
2
|
+
import { DecoratorTypes } from '../decorators/base/decorator-types.enum';
|
|
3
|
+
import { LodashUtilities } from '../encapsulation/lodash.utilities';
|
|
4
|
+
import { EntityUtilities } from '../utilities/entity.utilities';
|
|
5
|
+
import { FileUtilities } from '../utilities/file.utilities';
|
|
6
|
+
/**
|
|
7
|
+
* A generic EntityService class.
|
|
8
|
+
* Offers basic CRUD-functionality.
|
|
9
|
+
* You should create a service for every Entity you have.
|
|
10
|
+
* If you extend from this you need to make sure that the extended Service can be injected.
|
|
11
|
+
*/
|
|
12
|
+
export class EntityService {
|
|
13
|
+
http;
|
|
14
|
+
/**
|
|
15
|
+
* The route segment that comes before the id when editing an entity in a separate page.
|
|
16
|
+
*/
|
|
17
|
+
editBaseRoute = 'entities';
|
|
18
|
+
/**
|
|
19
|
+
* The key which holds the id value.
|
|
20
|
+
*
|
|
21
|
+
* @default 'id'
|
|
22
|
+
*/
|
|
23
|
+
idKey = 'id';
|
|
24
|
+
/**
|
|
25
|
+
* A subject of all the entity values.
|
|
26
|
+
* Can be subscribed to when you want to do a specific thing whenever the entities change.
|
|
27
|
+
*/
|
|
28
|
+
entitiesSubject = new BehaviorSubject([]);
|
|
29
|
+
/**
|
|
30
|
+
* When frequently trying to find a single entity by an id (eg. When nesting relations)
|
|
31
|
+
* you might send a lot of unnecessary requests.
|
|
32
|
+
* Therefore the findById method tries to look in the already existing entities first,
|
|
33
|
+
* IF the entities have been requested in the last READ_EXPIRATION_IN_MS milliseconds.
|
|
34
|
+
*
|
|
35
|
+
* @default 900000 (5 minutes)
|
|
36
|
+
*/
|
|
37
|
+
READ_EXPIRATION_IN_MS = 900000;
|
|
38
|
+
/**
|
|
39
|
+
* Gets the entities in an array from the internal entitiesSubject.
|
|
40
|
+
*
|
|
41
|
+
* @returns The current entities in form of an array.
|
|
42
|
+
*/
|
|
43
|
+
get entities() {
|
|
44
|
+
return this.entitiesSubject.value;
|
|
45
|
+
}
|
|
46
|
+
lastRead;
|
|
47
|
+
constructor(http) {
|
|
48
|
+
this.http = http;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Creates a new Entity and pushes it to the entities array.
|
|
52
|
+
*
|
|
53
|
+
* @param entity - The data of the entity to create.
|
|
54
|
+
* All values that should be omitted will be removed from it inside this method.
|
|
55
|
+
* @param baseUrl - The base url to send the post request to.
|
|
56
|
+
* This can be used if you want to create an entity belonging to another, like "customers/{id}/invoices".
|
|
57
|
+
* @returns A Promise of the created entity.
|
|
58
|
+
*/
|
|
59
|
+
async create(entity, baseUrl = this.baseUrl) {
|
|
60
|
+
const body = EntityUtilities.getWithoutOmitCreateValues(entity);
|
|
61
|
+
const filePropertyKeys = EntityUtilities.getFileProperties(entity);
|
|
62
|
+
if (!filePropertyKeys.length) {
|
|
63
|
+
return await this.createWithJson(body, baseUrl);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
return await this.createWithFormData(body, filePropertyKeys, entity, baseUrl);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// TODO: Find a way to use blobs with jest
|
|
70
|
+
/* istanbul ignore next */
|
|
71
|
+
/**
|
|
72
|
+
* Imports everything from the provided json file.
|
|
73
|
+
*
|
|
74
|
+
* @param file - The json file to import from.
|
|
75
|
+
* @returns All entities that have been imported.
|
|
76
|
+
*/
|
|
77
|
+
async import(file) {
|
|
78
|
+
const formData = new FormData();
|
|
79
|
+
formData.append('import', file);
|
|
80
|
+
const result = await firstValueFrom(this.http.post(`${this.baseUrl}/import`, formData));
|
|
81
|
+
this.entities.push(...result);
|
|
82
|
+
this.entitiesSubject.next(this.entities);
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
// TODO: Find a way to use blobs with jest
|
|
86
|
+
/* istanbul ignore next */
|
|
87
|
+
/**
|
|
88
|
+
* Creates the entity with form data when the entity contains files in contrast to creating it with a normal json body.
|
|
89
|
+
* All file values are stored inside their respective property key and their name.
|
|
90
|
+
* Form data is able to handle setting multiple files to the same key.
|
|
91
|
+
*
|
|
92
|
+
* @param body - The body Of the request.
|
|
93
|
+
* @param filePropertyKeys - All property keys that are files and need to be added to the form data.
|
|
94
|
+
* @param entity - The entity to create. This is needed in addition to the body because the body doesn't contain any metadata.
|
|
95
|
+
* @param baseUrl - The base url to send the post request to.
|
|
96
|
+
* This can be used if you want to create an entity belonging to another, like "customers/{id}/invoices".
|
|
97
|
+
* @returns The created entity from the server.
|
|
98
|
+
*/
|
|
99
|
+
async createWithFormData(body, filePropertyKeys, entity, baseUrl = this.baseUrl) {
|
|
100
|
+
const formData = new FormData();
|
|
101
|
+
formData.append('body', JSON.stringify(LodashUtilities.omit(body, filePropertyKeys)));
|
|
102
|
+
for (const key of filePropertyKeys) {
|
|
103
|
+
if (EntityUtilities.getPropertyMetadata(entity, key, DecoratorTypes.FILE_DEFAULT).multiple) {
|
|
104
|
+
const fileDataValues = body[key];
|
|
105
|
+
for (const value of fileDataValues) {
|
|
106
|
+
formData.append(key, (await FileUtilities.getFileData(value, this.http)).file, value.name);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
const fileData = body[key];
|
|
111
|
+
formData.append(key, (await FileUtilities.getFileData(fileData, this.http)).file, fileData.name);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
const e = await firstValueFrom(this.http.post(baseUrl, formData));
|
|
115
|
+
if (!e) {
|
|
116
|
+
throw new Error(`
|
|
117
|
+
The created entity was not returned in the response.
|
|
118
|
+
If you want to provide a logic that allows that
|
|
119
|
+
you need to override the create methods of this class.
|
|
120
|
+
`);
|
|
121
|
+
}
|
|
122
|
+
this.entities.push(e);
|
|
123
|
+
this.entitiesSubject.next(this.entities);
|
|
124
|
+
return e;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Creates the entity with a normal json body in contrast to creating it with form data when the entity contains files.
|
|
128
|
+
*
|
|
129
|
+
* @param body - The body Of the request.
|
|
130
|
+
* @param baseUrl - The base url to send the post request to.
|
|
131
|
+
* This can be used if you want to create an entity belonging to another, like "customers/{id}/invoices".
|
|
132
|
+
* @returns The created entity from the server.
|
|
133
|
+
*/
|
|
134
|
+
async createWithJson(body, baseUrl = this.baseUrl) {
|
|
135
|
+
const e = await firstValueFrom(this.http.post(baseUrl, body));
|
|
136
|
+
if (!e) {
|
|
137
|
+
throw new Error(`
|
|
138
|
+
The created entity was not returned in the response.
|
|
139
|
+
If you want to provide a logic that allows that
|
|
140
|
+
you need to override the create methods of this class.
|
|
141
|
+
`);
|
|
142
|
+
}
|
|
143
|
+
this.entities.push(e);
|
|
144
|
+
this.entitiesSubject.next(this.entities);
|
|
145
|
+
return e;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Gets all existing entities and pushes them to the entities array.
|
|
149
|
+
*
|
|
150
|
+
* @param baseUrl - The base url for the request. Defaults to the baseUrl on the service.
|
|
151
|
+
* @returns A Promise of all received Entities.
|
|
152
|
+
*/
|
|
153
|
+
async read(baseUrl = this.baseUrl) {
|
|
154
|
+
const e = await firstValueFrom(this.http.get(baseUrl));
|
|
155
|
+
this.entitiesSubject.next(e);
|
|
156
|
+
this.lastRead = new Date();
|
|
157
|
+
return e;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Tries to find an entity with the given id.
|
|
161
|
+
*
|
|
162
|
+
* @param id - The id of the entity to find.
|
|
163
|
+
* @returns The found entity.
|
|
164
|
+
*/
|
|
165
|
+
async findById(id) {
|
|
166
|
+
if (this.lastRead == null
|
|
167
|
+
|| (new Date().getTime() - this.lastRead.getTime()) > this.READ_EXPIRATION_IN_MS) {
|
|
168
|
+
return firstValueFrom(this.http.get(`${this.baseUrl}/${id}`));
|
|
169
|
+
}
|
|
170
|
+
return this.entities.find(e => e[this.idKey] === id) ?? firstValueFrom(this.http.get(`${this.baseUrl}/${id}`));
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Updates a specific Entity.
|
|
174
|
+
*
|
|
175
|
+
* @param entity - The updated Entity
|
|
176
|
+
* All values that should be omitted will be removed from it inside this method.
|
|
177
|
+
* @param entityPriorChanges - The current Entity.
|
|
178
|
+
* It Is used to get changed values and only update them instead of sending the whole entity data.
|
|
179
|
+
*/
|
|
180
|
+
async update(entity, entityPriorChanges) {
|
|
181
|
+
const filePropertyKeys = EntityUtilities.getFileProperties(entityPriorChanges);
|
|
182
|
+
const body = await this.entityToUpdateRequestBody(entity, entityPriorChanges);
|
|
183
|
+
if (!filePropertyKeys.length) {
|
|
184
|
+
await this.updateWithJson(body, entityPriorChanges[this.idKey]);
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
await this.updateWithFormData(body, filePropertyKeys, entity, entityPriorChanges[this.idKey]);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Builds the update request body from the given entity before and after its changes.
|
|
192
|
+
*
|
|
193
|
+
* @param entity - The entity with changed values.
|
|
194
|
+
* @param entityPriorChanges - The entity before any changes.
|
|
195
|
+
* @returns A partial of only the changed values.
|
|
196
|
+
*/
|
|
197
|
+
async entityToUpdateRequestBody(entity, entityPriorChanges) {
|
|
198
|
+
const body = await EntityUtilities.getWithoutOmitUpdateValues(entity, entityPriorChanges, this.http);
|
|
199
|
+
return LodashUtilities.omitBy(body, LodashUtilities.isNil);
|
|
200
|
+
}
|
|
201
|
+
// TODO: Find a way to use blobs with jest
|
|
202
|
+
/* istanbul ignore next */
|
|
203
|
+
/**
|
|
204
|
+
* Updates the entity with form data when the entity contains files in contrast to creating it with a normal json body.
|
|
205
|
+
* All file values are stored inside their respective property key and their name.
|
|
206
|
+
* Form data is able to handle setting multiple files to the same key.
|
|
207
|
+
*
|
|
208
|
+
* @param body - The request body. Already contains only properties that have changed.
|
|
209
|
+
* @param filePropertyKeys - The keys of all properties which are files and need to separately be appended to the form data.
|
|
210
|
+
* @param entity - The original entity. Is needed to get the metadata of all the files.
|
|
211
|
+
* @param id - The id of the entity to update.
|
|
212
|
+
*/
|
|
213
|
+
async updateWithFormData(body, filePropertyKeys, entity, id) {
|
|
214
|
+
const formData = new FormData();
|
|
215
|
+
formData.append('body', JSON.stringify(body));
|
|
216
|
+
for (const key of filePropertyKeys) {
|
|
217
|
+
if (EntityUtilities.getPropertyMetadata(entity, key, DecoratorTypes.FILE_DEFAULT).multiple) {
|
|
218
|
+
const fileDataValues = body[key];
|
|
219
|
+
for (const value of fileDataValues) {
|
|
220
|
+
formData.append(key, (await FileUtilities.getFileData(value, this.http)).file, value.name);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
const fileData = body[key];
|
|
225
|
+
formData.append(key, (await FileUtilities.getFileData(fileData, this.http)).file, fileData.name);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
const updatedEntity = await firstValueFrom(this.http.patch(`${this.baseUrl}/${id}`, formData));
|
|
229
|
+
if (!updatedEntity) {
|
|
230
|
+
// eslint-disable-next-line no-console
|
|
231
|
+
console.warn('The updated entity was not returned in the response. Applying the changes from the request body.');
|
|
232
|
+
for (const key in body) {
|
|
233
|
+
this.entities[this.entities.findIndex(e => e[this.idKey] === id)][key]
|
|
234
|
+
= body[key];
|
|
235
|
+
}
|
|
236
|
+
this.entitiesSubject.next(this.entities);
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
this.entities[this.entities.findIndex(e => e[this.idKey] === id)] = updatedEntity;
|
|
240
|
+
this.entitiesSubject.next(this.entities);
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Updates the entity with a normal json body in contrast to updating it with form data when the entity contains files.
|
|
244
|
+
*
|
|
245
|
+
* @param body - The body of the Request. Has already removed all unnecessary values.
|
|
246
|
+
* @param id - The id of the entity to update.
|
|
247
|
+
*/
|
|
248
|
+
async updateWithJson(body, id) {
|
|
249
|
+
const updatedEntity = await firstValueFrom(this.http.patch(`${this.baseUrl}/${id}`, LodashUtilities.omitBy(body, LodashUtilities.isNil)));
|
|
250
|
+
if (!updatedEntity) {
|
|
251
|
+
// eslint-disable-next-line no-console
|
|
252
|
+
console.warn('The updated entity was not returned in the response. Applying the changes from the request body.');
|
|
253
|
+
const foundEntity = this.entities[this.entities.findIndex(e => e[this.idKey] === id)];
|
|
254
|
+
for (const key in body) {
|
|
255
|
+
foundEntity[key]
|
|
256
|
+
= body[key];
|
|
257
|
+
}
|
|
258
|
+
this.entitiesSubject.next(this.entities);
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
this.entities[this.entities.findIndex(e => e[this.idKey] === id)] = updatedEntity;
|
|
262
|
+
this.entitiesSubject.next(this.entities);
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Deletes a specific Entity.
|
|
266
|
+
*
|
|
267
|
+
* @param entity - The entity to delete.
|
|
268
|
+
*/
|
|
269
|
+
async delete(entity) {
|
|
270
|
+
await firstValueFrom(this.http.delete(`${this.baseUrl}/${entity[this.idKey]}`));
|
|
271
|
+
// the == comparison instead of === is to catch ids that are numbers.
|
|
272
|
+
this.entities.splice(this.entities.findIndex(e => e[this.idKey] === entity[this.idKey]), 1);
|
|
273
|
+
this.entitiesSubject.next(this.entities);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9zZXJ2aWNlcy9lbnRpdHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFNUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQWdCLGFBQWE7SUF1REE7SUF4Qy9COztPQUVHO0lBQ00sYUFBYSxHQUFXLFVBQVUsQ0FBQztJQUU1Qzs7OztPQUlHO0lBQ00sS0FBSyxHQUFxQixJQUF3QixDQUFDO0lBRTVEOzs7T0FHRztJQUNNLGVBQWUsR0FBa0MsSUFBSSxlQUFlLENBQWUsRUFBRSxDQUFDLENBQUM7SUFHaEc7Ozs7Ozs7T0FPRztJQUNnQixxQkFBcUIsR0FBVyxNQUFNLENBQUM7SUFFMUQ7Ozs7T0FJRztJQUNILElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUM7SUFDdEMsQ0FBQztJQUVELFFBQVEsQ0FBUTtJQUVoQixZQUErQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO0lBQUcsQ0FBQztJQUVuRDs7Ozs7Ozs7T0FRRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBa0IsRUFBRSxVQUFrQixJQUFJLENBQUMsT0FBTztRQUMzRCxNQUFNLElBQUksR0FBd0IsZUFBZSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JG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QyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVGLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3QyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQmFzZUVudGl0eVR5cGUgfSBmcm9tICcuLi9jbGFzc2VzL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBEZWNvcmF0b3JUeXBlcyB9IGZyb20gJy4uL2RlY29yYXRvcnMvYmFzZS9kZWNvcmF0b3ItdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBGaWxlRGF0YSB9IGZyb20gJy4uL2RlY29yYXRvcnMvZmlsZS9maWxlLWRlY29yYXRvci5kYXRhJztcbmltcG9ydCB7IExvZGFzaFV0aWxpdGllcyB9IGZyb20gJy4uL2VuY2Fwc3VsYXRpb24vbG9kYXNoLnV0aWxpdGllcyc7XG5pbXBvcnQgeyBFbnRpdHlVdGlsaXRpZXMgfSBmcm9tICcuLi91dGlsaXRpZXMvZW50aXR5LnV0aWxpdGllcyc7XG5pbXBvcnQgeyBGaWxlVXRpbGl0aWVzIH0gZnJvbSAnLi4vdXRpbGl0aWVzL2ZpbGUudXRpbGl0aWVzJztcblxuLyoqXG4gKiBBIGdlbmVyaWMgRW50aXR5U2VydmljZSBjbGFzcy5cbiAqIE9mZmVycyBiYXNpYyBDUlVELWZ1bmN0aW9uYWxpdHkuXG4gKiBZb3Ugc2hvdWxkIGNyZWF0ZSBhIHNlcnZpY2UgZm9yIGV2ZXJ5IEVudGl0eSB5b3UgaGF2ZS5cbiAqIElmIHlvdSBleHRlbmQgZnJvbSB0aGlzIHlvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBleHRlbmRlZCBTZXJ2aWNlIGNhbiBiZSBpbmplY3RlZC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEVudGl0eVNlcnZpY2U8RW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+PiB7XG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIHVzZWQgZm9yIGFwaSByZXF1ZXN0cy4gSWYgdSB3YW50IHRvIGhhdmUgbW9yZSBjb250cm9sIG92ZXIgdGhpcyxcbiAgICAgKiB5b3UgY2FuIG92ZXJyaWRlIHRoZSBjcmVhdGUsIHJlYWQsIHVwZGF0ZSBhbmQgZGVsZXRlIG1ldGhvZHMuXG4gICAgICpcbiAgICAgKiBDcmVhdGUgU2VuZHMgYSBQT1NULVJlcXVlc3QgdG8gYmFzZVVybC5cbiAgICAgKlxuICAgICAqIFJlYWQgU2VuZHMgYSBHRVQtUmVxdWVzdCB0byBiYXNlVXJsLlxuICAgICAqXG4gICAgICogVXBkYXRlIFNlbmRzIGEgUEFUQ0gtUmVxdWVzdCB0byBiYXNlVXJsL3tpZH0uXG4gICAgICpcbiAgICAgKiBEZWxldGUgU2VuZHMgYSBERUwtUmVxdWVzdCB0byBiYXNlVXJsL3tpZH0uXG4gICAgICovXG4gICAgYWJzdHJhY3QgcmVhZG9ubHkgYmFzZVVybDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvdXRlIHNlZ21lbnQgdGhhdCBjb21lcyBiZWZvcmUgdGhlIGlkIHdoZW4gZWRpdGluZyBhbiBlbnRpdHkgaW4gYSBzZXBhcmF0ZSBwYWdlLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGVkaXRCYXNlUm91dGU6IHN0cmluZyA9ICdlbnRpdGllcyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUga2V5IHdoaWNoIGhvbGRzIHRoZSBpZCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICdpZCdcbiAgICAgKi9cbiAgICByZWFkb25seSBpZEtleToga2V5b2YgRW50aXR5VHlwZSA9ICdpZCcgYXMga2V5b2YgRW50aXR5VHlwZTtcblxuICAgIC8qKlxuICAgICAqIEEgc3ViamVjdCBvZiBhbGwgdGhlIGVudGl0eSB2YWx1ZXMuXG4gICAgICogQ2FuIGJlIHN1YnNjcmliZWQgdG8gd2hlbiB5b3Ugd2FudCB0byBkbyBhIHNwZWNpZmljIHRoaW5nIHdoZW5ldmVyIHRoZSBlbnRpdGllcyBjaGFuZ2UuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZW50aXRpZXNTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8RW50aXR5VHlwZVtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RW50aXR5VHlwZVtdPihbXSk7XG5cblxuICAgIC8qKlxuICAgICAqIFdoZW4gZnJlcXVlbnRseSB0cnlpbmcgdG8gZmluZCBhIHNpbmdsZSBlbnRpdHkgYnkgYW4gaWQgKGVnLiBXaGVuIG5lc3RpbmcgcmVsYXRpb25zKVxuICAgICAqIHlvdSBtaWdodCBzZW5kIGEgbG90IG9mIHVubmVjZXNzYXJ5IHJlcXVlc3RzLlxuICAgICAqIFRoZXJlZm9yZSB0aGUgZmluZEJ5SWQgbWV0aG9kIHRyaWVzIHRvIGxvb2sgaW4gdGhlIGFscmVhZHkgZXhpc3RpbmcgZW50aXRpZXMgZmlyc3QsXG4gICAgICogSUYgdGhlIGVudGl0aWVzIGhhdmUgYmVlbiByZXF1ZXN0ZWQgaW4gdGhlIGxhc3QgUkVBRF9FWFBJUkFUSU9OX0lOX01TIG1pbGxpc2Vjb25kcy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IDkwMDAwMCAoNSBtaW51dGVzKVxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBSRUFEX0VYUElSQVRJT05fSU5fTVM6IG51bWJlciA9IDkwMDAwMDtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGVudGl0aWVzIGluIGFuIGFycmF5IGZyb20gdGhlIGludGVybmFsIGVudGl0aWVzU3ViamVjdC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGVudGl0aWVzIGluIGZvcm0gb2YgYW4gYXJyYXkuXG4gICAgICovXG4gICAgZ2V0IGVudGl0aWVzKCk6IEVudGl0eVR5cGVbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVudGl0aWVzU3ViamVjdC52YWx1ZTtcbiAgICB9XG5cbiAgICBsYXN0UmVhZD86IERhdGU7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCkge31cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgRW50aXR5IGFuZCBwdXNoZXMgaXQgdG8gdGhlIGVudGl0aWVzIGFycmF5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGVudGl0eSAtIFRoZSBkYXRhIG9mIHRoZSBlbnRpdHkgdG8gY3JlYXRlLlxuICAgICAqIEFsbCB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgb21pdHRlZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBpdCBpbnNpZGUgdGhpcyBtZXRob2QuXG4gICAgICogQHBhcmFtIGJhc2VVcmwgLSBUaGUgYmFzZSB1cmwgdG8gc2VuZCB0aGUgcG9zdCByZXF1ZXN0IHRvLlxuICAgICAqIFRoaXMgY2FuIGJlIHVzZWQgaWYgeW91IHdhbnQgdG8gY3JlYXRlIGFuIGVudGl0eSBiZWxvbmdpbmcgdG8gYW5vdGhlciwgbGlrZSBcImN1c3RvbWVycy97aWR9L2ludm9pY2VzXCIuXG4gICAgICogQHJldHVybnMgQSBQcm9taXNlIG9mIHRoZSBjcmVhdGVkIGVudGl0eS5cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGUoZW50aXR5OiBFbnRpdHlUeXBlLCBiYXNlVXJsOiBzdHJpbmcgPSB0aGlzLmJhc2VVcmwpOiBQcm9taXNlPEVudGl0eVR5cGU+IHtcbiAgICAgICAgY29uc3QgYm9keTogUGFydGlhbDxFbnRpdHlUeXBlPiA9IEVudGl0eVV0aWxpdGllcy5nZXRXaXRob3V0T21pdENyZWF0ZVZhbHVlcyhlbnRpdHkpO1xuICAgICAgICBjb25zdCBmaWxlUHJvcGVydHlLZXlzOiAoa2V5b2YgRW50aXR5VHlwZSlbXSA9IEVudGl0eVV0aWxpdGllcy5nZXRGaWxlUHJvcGVydGllcyhlbnRpdHkpO1xuICAgICAgICBpZiAoIWZpbGVQcm9wZXJ0eUtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jcmVhdGVXaXRoSnNvbihib2R5LCBiYXNlVXJsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNyZWF0ZVdpdGhGb3JtRGF0YShib2R5LCBmaWxlUHJvcGVydHlLZXlzLCBlbnRpdHksIGJhc2VVcmwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ETzogRmluZCBhIHdheSB0byB1c2UgYmxvYnMgd2l0aCBqZXN0XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAvKipcbiAgICAgKiBJbXBvcnRzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcHJvdmlkZWQganNvbiBmaWxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZpbGUgLSBUaGUganNvbiBmaWxlIHRvIGltcG9ydCBmcm9tLlxuICAgICAqIEByZXR1cm5zIEFsbCBlbnRpdGllcyB0aGF0IGhhdmUgYmVlbiBpbXBvcnRlZC5cbiAgICAgKi9cbiAgICBhc3luYyBpbXBvcnQoZmlsZTogRmlsZSk6IFByb21pc2U8RW50aXR5VHlwZVtdPiB7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ltcG9ydCcsIGZpbGUpO1xuICAgICAgICBjb25zdCByZXN1bHQ6IEVudGl0eVR5cGVbXSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5wb3N0PEVudGl0eVR5cGVbXT4oYCR7dGhpcy5iYXNlVXJsfS9pbXBvcnRgLCBmb3JtRGF0YSkpO1xuICAgICAgICB0aGlzLmVudGl0aWVzLnB1c2goLi4ucmVzdWx0KTtcbiAgICAgICAgdGhpcy5lbnRpdGllc1N1YmplY3QubmV4dCh0aGlzLmVudGl0aWVzKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBGaW5kIGEgd2F5IHRvIHVzZSBibG9icyB3aXRoIGplc3RcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgdGhlIGVudGl0eSB3aXRoIGZvcm0gZGF0YSB3aGVuIHRoZSBlbnRpdHkgY29udGFpbnMgZmlsZXMgaW4gY29udHJhc3QgdG8gY3JlYXRpbmcgaXQgd2l0aCBhIG5vcm1hbCBqc29uIGJvZHkuXG4gICAgICogQWxsIGZpbGUgdmFsdWVzIGFyZSBzdG9yZWQgaW5zaWRlIHRoZWlyIHJlc3BlY3RpdmUgcHJvcGVydHkga2V5IGFuZCB0aGVpciBuYW1lLlxuICAgICAqIEZvcm0gZGF0YSBpcyBhYmxlIHRvIGhhbmRsZSBzZXR0aW5nIG11bHRpcGxlIGZpbGVzIHRvIHRoZSBzYW1lIGtleS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBib2R5IC0gVGhlIGJvZHkgT2YgdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIGZpbGVQcm9wZXJ0eUtleXMgLSBBbGwgcHJvcGVydHkga2V5cyB0aGF0IGFyZSBmaWxlcyBhbmQgbmVlZCB0byBiZSBhZGRlZCB0byB0aGUgZm9ybSBkYXRhLlxuICAgICAqIEBwYXJhbSBlbnRpdHkgLSBUaGUgZW50aXR5IHRvIGNyZWF0ZS4gVGhpcyBpcyBuZWVkZWQgaW4gYWRkaXRpb24gdG8gdGhlIGJvZHkgYmVjYXVzZSB0aGUgYm9keSBkb2Vzbid0IGNvbnRhaW4gYW55IG1ldGFkYXRhLlxuICAgICAqIEBwYXJhbSBiYXNlVXJsIC0gVGhlIGJhc2UgdXJsIHRvIHNlbmQgdGhlIHBvc3QgcmVxdWVzdCB0by5cbiAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIGlmIHlvdSB3YW50IHRvIGNyZWF0ZSBhbiBlbnRpdHkgYmVsb25naW5nIHRvIGFub3RoZXIsIGxpa2UgXCJjdXN0b21lcnMve2lkfS9pbnZvaWNlc1wiLlxuICAgICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGVudGl0eSBmcm9tIHRoZSBzZXJ2ZXIuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFzeW5jIGNyZWF0ZVdpdGhGb3JtRGF0YShcbiAgICAgICAgYm9keTogUGFydGlhbDxFbnRpdHlUeXBlPixcbiAgICAgICAgZmlsZVByb3BlcnR5S2V5czogKGtleW9mIEVudGl0eVR5cGUpW10sXG4gICAgICAgIGVudGl0eTogRW50aXR5VHlwZSxcbiAgICAgICAgYmFzZVVybDogc3RyaW5nID0gdGhpcy5iYXNlVXJsXG4gICAgKTogUHJvbWlzZTxFbnRpdHlUeXBlPiB7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2JvZHknLCBKU09OLnN0cmluZ2lmeShMb2Rhc2hVdGlsaXRpZXMub21pdChib2R5LCBmaWxlUHJvcGVydHlLZXlzKSkpO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBmaWxlUHJvcGVydHlLZXlzKSB7XG4gICAgICAgICAgICBpZiAoRW50aXR5VXRpbGl0aWVzLmdldFByb3BlcnR5TWV0YWRhdGEoZW50aXR5LCBrZXksIERlY29yYXRvclR5cGVzLkZJTEVfREVGQVVMVCkubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlRGF0YVZhbHVlczogRmlsZURhdGFbXSA9IGJvZHlba2V5XSBhcyBGaWxlRGF0YVtdO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgZmlsZURhdGFWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSBhcyBzdHJpbmcsIChhd2FpdCBGaWxlVXRpbGl0aWVzLmdldEZpbGVEYXRhKHZhbHVlLCB0aGlzLmh0dHApKS5maWxlLCB2YWx1ZS5uYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlRGF0YTogRmlsZURhdGEgPSBib2R5W2tleV0gYXMgRmlsZURhdGE7XG4gICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSBhcyBzdHJpbmcsIChhd2FpdCBGaWxlVXRpbGl0aWVzLmdldEZpbGVEYXRhKGZpbGVEYXRhLCB0aGlzLmh0dHApKS5maWxlLCBmaWxlRGF0YS5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlOiBFbnRpdHlUeXBlIHwgdW5kZWZpbmVkID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwLnBvc3Q8RW50aXR5VHlwZSB8IHVuZGVmaW5lZD4oYmFzZVVybCwgZm9ybURhdGEpKTtcbiAgICAgICAgaWYgKCFlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFxuICAgICAgICAgICAgICAgIFRoZSBjcmVhdGVkIGVudGl0eSB3YXMgbm90IHJldHVybmVkIGluIHRoZSByZXNwb25zZS5cbiAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBwcm92aWRlIGEgbG9naWMgdGhhdCBhbGxvd3MgdGhhdFxuICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIG92ZXJyaWRlIHRoZSBjcmVhdGUgbWV0aG9kcyBvZiB0aGlzIGNsYXNzLlxuICAgICAgICAgICAgYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbnRpdGllcy5wdXNoKGUpO1xuICAgICAgICB0aGlzLmVudGl0aWVzU3ViamVjdC5uZXh0KHRoaXMuZW50aXRpZXMpO1xuICAgICAgICByZXR1cm4gZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRoZSBlbnRpdHkgd2l0aCBhIG5vcm1hbCBqc29uIGJvZHkgaW4gY29udHJhc3QgdG8gY3JlYXRpbmcgaXQgd2l0aCBmb3JtIGRhdGEgd2hlbiB0aGUgZW50aXR5IGNvbnRhaW5zIGZpbGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGJvZHkgLSBUaGUgYm9keSBPZiB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gYmFzZVVybCAtIFRoZSBiYXNlIHVybCB0byBzZW5kIHRoZSBwb3N0IHJlcXVlc3QgdG8uXG4gICAgICogVGhpcyBjYW4gYmUgdXNlZCBpZiB5b3Ugd2FudCB0byBjcmVhdGUgYW4gZW50aXR5IGJlbG9uZ2luZyB0byBhbm90aGVyLCBsaWtlIFwiY3VzdG9tZXJzL3tpZH0vaW52b2ljZXNcIi5cbiAgICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBlbnRpdHkgZnJvbSB0aGUgc2VydmVyLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhc3luYyBjcmVhdGVXaXRoSnNvbihib2R5OiBQYXJ0aWFsPEVudGl0eVR5cGU+LCBiYXNlVXJsOiBzdHJpbmcgPSB0aGlzLmJhc2VVcmwpOiBQcm9taXNlPEVudGl0eVR5cGU+IHtcbiAgICAgICAgY29uc3QgZTogRW50aXR5VHlwZSB8IHVuZGVmaW5lZCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5wb3N0PEVudGl0eVR5cGUgfCB1bmRlZmluZWQ+KGJhc2VVcmwsIGJvZHkpKTtcbiAgICAgICAgaWYgKCFlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFxuICAgICAgICAgICAgICAgIFRoZSBjcmVhdGVkIGVudGl0eSB3YXMgbm90IHJldHVybmVkIGluIHRoZSByZXNwb25zZS5cbiAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBwcm92aWRlIGEgbG9naWMgdGhhdCBhbGxvd3MgdGhhdFxuICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIG92ZXJyaWRlIHRoZSBjcmVhdGUgbWV0aG9kcyBvZiB0aGlzIGNsYXNzLlxuICAgICAgICAgICAgYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbnRpdGllcy5wdXNoKGUpO1xuICAgICAgICB0aGlzLmVudGl0aWVzU3ViamVjdC5uZXh0KHRoaXMuZW50aXRpZXMpO1xuICAgICAgICByZXR1cm4gZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFsbCBleGlzdGluZyBlbnRpdGllcyBhbmQgcHVzaGVzIHRoZW0gdG8gdGhlIGVudGl0aWVzIGFycmF5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGJhc2VVcmwgLSBUaGUgYmFzZSB1cmwgZm9yIHRoZSByZXF1ZXN0LiBEZWZhdWx0cyB0byB0aGUgYmFzZVVybCBvbiB0aGUgc2VydmljZS5cbiAgICAgKiBAcmV0dXJucyBBIFByb21pc2Ugb2YgYWxsIHJlY2VpdmVkIEVudGl0aWVzLlxuICAgICAqL1xuICAgIGFzeW5jIHJlYWQoYmFzZVVybCA9IHRoaXMuYmFzZVVybCk6IFByb21pc2U8RW50aXR5VHlwZVtdPiB7XG4gICAgICAgIGNvbnN0IGU6IEVudGl0eVR5cGVbXSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5nZXQ8RW50aXR5VHlwZVtdPihiYXNlVXJsKSk7XG4gICAgICAgIHRoaXMuZW50aXRpZXNTdWJqZWN0Lm5leHQoZSk7XG4gICAgICAgIHRoaXMubGFzdFJlYWQgPSBuZXcgRGF0ZSgpO1xuICAgICAgICByZXR1cm4gZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmllcyB0byBmaW5kIGFuIGVudGl0eSB3aXRoIHRoZSBnaXZlbiBpZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgZW50aXR5IHRvIGZpbmQuXG4gICAgICogQHJldHVybnMgVGhlIGZvdW5kIGVudGl0eS5cbiAgICAgKi9cbiAgICBhc3luYyBmaW5kQnlJZChpZDogRW50aXR5VHlwZVtrZXlvZiBFbnRpdHlUeXBlXSk6IFByb21pc2U8RW50aXR5VHlwZT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmxhc3RSZWFkID09IG51bGxcbiAgICAgICAgICAgIHx8IChuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHRoaXMubGFzdFJlYWQuZ2V0VGltZSgpKSA+IHRoaXMuUkVBRF9FWFBJUkFUSU9OX0lOX01TXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5nZXQ8RW50aXR5VHlwZT4oYCR7dGhpcy5iYXNlVXJsfS8ke2lkfWApKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5lbnRpdGllcy5maW5kKGUgPT4gZVt0aGlzLmlkS2V5XSA9PT0gaWQpID8/IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5nZXQ8RW50aXR5VHlwZT4oYCR7dGhpcy5iYXNlVXJsfS8ke2lkfWApKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIGEgc3BlY2lmaWMgRW50aXR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGVudGl0eSAtIFRoZSB1cGRhdGVkIEVudGl0eVxuICAgICAqIEFsbCB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgb21pdHRlZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBpdCBpbnNpZGUgdGhpcyBtZXRob2QuXG4gICAgICogQHBhcmFtIGVudGl0eVByaW9yQ2hhbmdlcyAtIFRoZSBjdXJyZW50IEVudGl0eS5cbiAgICAgKiBJdCBJcyB1c2VkIHRvIGdldCBjaGFuZ2VkIHZhbHVlcyBhbmQgb25seSB1cGRhdGUgdGhlbSBpbnN0ZWFkIG9mIHNlbmRpbmcgdGhlIHdob2xlIGVudGl0eSBkYXRhLlxuICAgICAqL1xuICAgIGFzeW5jIHVwZGF0ZShlbnRpdHk6IEVudGl0eVR5cGUsIGVudGl0eVByaW9yQ2hhbmdlczogRW50aXR5VHlwZSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBmaWxlUHJvcGVydHlLZXlzOiAoa2V5b2YgRW50aXR5VHlwZSlbXSA9IEVudGl0eVV0aWxpdGllcy5nZXRGaWxlUHJvcGVydGllcyhlbnRpdHlQcmlvckNoYW5nZXMpO1xuICAgICAgICBjb25zdCBib2R5OiBQYXJ0aWFsPEVudGl0eVR5cGU+ID0gYXdhaXQgdGhpcy5lbnRpdHlUb1VwZGF0ZVJlcXVlc3RCb2R5KGVudGl0eSwgZW50aXR5UHJpb3JDaGFuZ2VzKTtcbiAgICAgICAgaWYgKCFmaWxlUHJvcGVydHlLZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVXaXRoSnNvbihib2R5LCBlbnRpdHlQcmlvckNoYW5nZXNbdGhpcy5pZEtleV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVXaXRoRm9ybURhdGEoYm9keSwgZmlsZVByb3BlcnR5S2V5cywgZW50aXR5LCBlbnRpdHlQcmlvckNoYW5nZXNbdGhpcy5pZEtleV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGRzIHRoZSB1cGRhdGUgcmVxdWVzdCBib2R5IGZyb20gdGhlIGdpdmVuIGVudGl0eSBiZWZvcmUgYW5kIGFmdGVyIGl0cyBjaGFuZ2VzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGVudGl0eSAtIFRoZSBlbnRpdHkgd2l0aCBjaGFuZ2VkIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0gZW50aXR5UHJpb3JDaGFuZ2VzIC0gVGhlIGVudGl0eSBiZWZvcmUgYW55IGNoYW5nZXMuXG4gICAgICogQHJldHVybnMgQSBwYXJ0aWFsIG9mIG9ubHkgdGhlIGNoYW5nZWQgdmFsdWVzLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhc3luYyBlbnRpdHlUb1VwZGF0ZVJlcXVlc3RCb2R5KGVudGl0eTogRW50aXR5VHlwZSwgZW50aXR5UHJpb3JDaGFuZ2VzOiBFbnRpdHlUeXBlKTogUHJvbWlzZTxQYXJ0aWFsPEVudGl0eVR5cGU+PiB7XG4gICAgICAgIGNvbnN0IGJvZHk6IFBhcnRpYWw8RW50aXR5VHlwZT4gPSBhd2FpdCBFbnRpdHlVdGlsaXRpZXMuZ2V0V2l0aG91dE9taXRVcGRhdGVWYWx1ZXMoZW50aXR5LCBlbnRpdHlQcmlvckNoYW5nZXMsIHRoaXMuaHR0cCk7XG4gICAgICAgIHJldHVybiBMb2Rhc2hVdGlsaXRpZXMub21pdEJ5KGJvZHksIExvZGFzaFV0aWxpdGllcy5pc05pbCk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogRmluZCBhIHdheSB0byB1c2UgYmxvYnMgd2l0aCBqZXN0XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBlbnRpdHkgd2l0aCBmb3JtIGRhdGEgd2hlbiB0aGUgZW50aXR5IGNvbnRhaW5zIGZpbGVzIGluIGNvbnRyYXN0IHRvIGNyZWF0aW5nIGl0IHdpdGggYSBub3JtYWwganNvbiBib2R5LlxuICAgICAqIEFsbCBmaWxlIHZhbHVlcyBhcmUgc3RvcmVkIGluc2lkZSB0aGVpciByZXNwZWN0aXZlIHByb3BlcnR5IGtleSBhbmQgdGhlaXIgbmFtZS5cbiAgICAgKiBGb3JtIGRhdGEgaXMgYWJsZSB0byBoYW5kbGUgc2V0dGluZyBtdWx0aXBsZSBmaWxlcyB0byB0aGUgc2FtZSBrZXkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYm9keSAtIFRoZSByZXF1ZXN0IGJvZHkuIEFscmVhZHkgY29udGFpbnMgb25seSBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBjaGFuZ2VkLlxuICAgICAqIEBwYXJhbSBmaWxlUHJvcGVydHlLZXlzIC0gVGhlIGtleXMgb2YgYWxsIHByb3BlcnRpZXMgd2hpY2ggYXJlIGZpbGVzIGFuZCBuZWVkIHRvIHNlcGFyYXRlbHkgYmUgYXBwZW5kZWQgdG8gdGhlIGZvcm0gZGF0YS5cbiAgICAgKiBAcGFyYW0gZW50aXR5IC0gVGhlIG9yaWdpbmFsIGVudGl0eS4gSXMgbmVlZGVkIHRvIGdldCB0aGUgbWV0YWRhdGEgb2YgYWxsIHRoZSBmaWxlcy5cbiAgICAgKiBAcGFyYW0gaWQgLSBUaGUgaWQgb2YgdGhlIGVudGl0eSB0byB1cGRhdGUuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFzeW5jIHVwZGF0ZVdpdGhGb3JtRGF0YShcbiAgICAgICAgYm9keTogUGFydGlhbDxFbnRpdHlUeXBlPixcbiAgICAgICAgZmlsZVByb3BlcnR5S2V5czogKGtleW9mIEVudGl0eVR5cGUpW10sXG4gICAgICAgIGVudGl0eTogRW50aXR5VHlwZSxcbiAgICAgICAgaWQ6IEVudGl0eVR5cGVba2V5b2YgRW50aXR5VHlwZV1cbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgZm9ybURhdGE6IEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnYm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgZmlsZVByb3BlcnR5S2V5cykge1xuICAgICAgICAgICAgaWYgKEVudGl0eVV0aWxpdGllcy5nZXRQcm9wZXJ0eU1ldGFkYXRhKGVudGl0eSwga2V5LCBEZWNvcmF0b3JUeXBlcy5GSUxFX0RFRkFVTFQpLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZURhdGFWYWx1ZXM6IEZpbGVEYXRhW10gPSBib2R5W2tleV0gYXMgRmlsZURhdGFbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGZpbGVEYXRhVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXkgYXMgc3RyaW5nLCAoYXdhaXQgRmlsZVV0aWxpdGllcy5nZXRGaWxlRGF0YSh2YWx1ZSwgdGhpcy5odHRwKSkuZmlsZSwgdmFsdWUubmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZURhdGE6IEZpbGVEYXRhID0gYm9keVtrZXldIGFzIEZpbGVEYXRhO1xuICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXkgYXMgc3RyaW5nLCAoYXdhaXQgRmlsZVV0aWxpdGllcy5nZXRGaWxlRGF0YShmaWxlRGF0YSwgdGhpcy5odHRwKSkuZmlsZSwgZmlsZURhdGEubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXBkYXRlZEVudGl0eTogRW50aXR5VHlwZSB8IHVuZGVmaW5lZCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgdGhpcy5odHRwLnBhdGNoPEVudGl0eVR5cGUgfCB1bmRlZmluZWQ+KGAke3RoaXMuYmFzZVVybH0vJHtpZH1gLCBmb3JtRGF0YSlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCF1cGRhdGVkRW50aXR5KSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgdXBkYXRlZCBlbnRpdHkgd2FzIG5vdCByZXR1cm5lZCBpbiB0aGUgcmVzcG9uc2UuIEFwcGx5aW5nIHRoZSBjaGFuZ2VzIGZyb20gdGhlIHJlcXVlc3QgYm9keS4nKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGJvZHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVudGl0aWVzW3RoaXMuZW50aXRpZXMuZmluZEluZGV4KGUgPT4gZVt0aGlzLmlkS2V5XSA9PT0gaWQpXVtrZXldXG4gICAgICAgICAgICAgICAgICAgID0gYm9keVtrZXldIGFzIEVudGl0eVR5cGVbRXh0cmFjdDxrZXlvZiBFbnRpdHlUeXBlLCBzdHJpbmc+XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW50aXRpZXNTdWJqZWN0Lm5leHQodGhpcy5lbnRpdGllcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbnRpdGllc1t0aGlzLmVudGl0aWVzLmZpbmRJbmRleChlID0+IGVbdGhpcy5pZEtleV0gPT09IGlkKV0gPSB1cGRhdGVkRW50aXR5O1xuICAgICAgICB0aGlzLmVudGl0aWVzU3ViamVjdC5uZXh0KHRoaXMuZW50aXRpZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGVudGl0eSB3aXRoIGEgbm9ybWFsIGpzb24gYm9keSBpbiBjb250cmFzdCB0byB1cGRhdGluZyBpdCB3aXRoIGZvcm0gZGF0YSB3aGVuIHRoZSBlbnRpdHkgY29udGFpbnMgZmlsZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYm9keSAtIFRoZSBib2R5IG9mIHRoZSBSZXF1ZXN0LiBIYXMgYWxyZWFkeSByZW1vdmVkIGFsbCB1bm5lY2Vzc2FyeSB2YWx1ZXMuXG4gICAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSBlbnRpdHkgdG8gdXBkYXRlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhc3luYyB1cGRhdGVXaXRoSnNvbihib2R5OiBQYXJ0aWFsPEVudGl0eVR5cGU+LCBpZDogRW50aXR5VHlwZVtrZXlvZiBFbnRpdHlUeXBlXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkRW50aXR5OiBFbnRpdHlUeXBlIHwgdW5kZWZpbmVkID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICB0aGlzLmh0dHAucGF0Y2g8RW50aXR5VHlwZSB8IHVuZGVmaW5lZD4oXG4gICAgICAgICAgICAgICAgYCR7dGhpcy5iYXNlVXJsfS8ke2lkfWAsXG4gICAgICAgICAgICAgICAgTG9kYXNoVXRpbGl0aWVzLm9taXRCeShib2R5LCBMb2Rhc2hVdGlsaXRpZXMuaXNOaWwpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGlmICghdXBkYXRlZEVudGl0eSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIHVwZGF0ZWQgZW50aXR5IHdhcyBub3QgcmV0dXJuZWQgaW4gdGhlIHJlc3BvbnNlLiBBcHBseWluZyB0aGUgY2hhbmdlcyBmcm9tIHRoZSByZXF1ZXN0IGJvZHkuJyk7XG4gICAgICAgICAgICBjb25zdCBmb3VuZEVudGl0eTogRW50aXR5VHlwZSA9IHRoaXMuZW50aXRpZXNbdGhpcy5lbnRpdGllcy5maW5kSW5kZXgoZSA9PiBlW3RoaXMuaWRLZXldID09PSBpZCldO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gYm9keSkge1xuICAgICAgICAgICAgICAgIGZvdW5kRW50aXR5W2tleV1cbiAgICAgICAgICAgICAgICAgICAgPSBib2R5W2tleV0gYXMgRW50aXR5VHlwZVtFeHRyYWN0PGtleW9mIEVudGl0eVR5cGUsIHN0cmluZz5dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbnRpdGllc1N1YmplY3QubmV4dCh0aGlzLmVudGl0aWVzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVudGl0aWVzW3RoaXMuZW50aXRpZXMuZmluZEluZGV4KGUgPT4gZVt0aGlzLmlkS2V5XSA9PT0gaWQpXSA9IHVwZGF0ZWRFbnRpdHk7XG4gICAgICAgIHRoaXMuZW50aXRpZXNTdWJqZWN0Lm5leHQodGhpcy5lbnRpdGllcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVsZXRlcyBhIHNwZWNpZmljIEVudGl0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbnRpdHkgLSBUaGUgZW50aXR5IHRvIGRlbGV0ZS5cbiAgICAgKi9cbiAgICBhc3luYyBkZWxldGUoZW50aXR5OiBFbnRpdHlUeXBlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5kZWxldGU8dm9pZD4oYCR7dGhpcy5iYXNlVXJsfS8ke2VudGl0eVt0aGlzLmlkS2V5XX1gKSk7XG4gICAgICAgIC8vIHRoZSA9PSBjb21wYXJpc29uIGluc3RlYWQgb2YgPT09IGlzIHRvIGNhdGNoIGlkcyB0aGF0IGFyZSBudW1iZXJzLlxuICAgICAgICB0aGlzLmVudGl0aWVzLnNwbGljZSh0aGlzLmVudGl0aWVzLmZpbmRJbmRleChlID0+IGVbdGhpcy5pZEtleV0gPT09IGVudGl0eVt0aGlzLmlkS2V5XSksIDEpO1xuICAgICAgICB0aGlzLmVudGl0aWVzU3ViamVjdC5uZXh0KHRoaXMuZW50aXRpZXMpO1xuICAgIH1cbn0iXX0=
|