ngx-material-entity 0.1.3 → 1.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/README.md +914 -336
- package/capsulation/lodash.utilities.d.ts +62 -0
- package/capsulation/reflect.utilities.d.ts +56 -0
- package/classes/{base-builder.class.d.ts → base.builder.d.ts} +2 -1
- package/classes/date.utilities.d.ts +70 -0
- package/classes/entity.model.d.ts +20 -0
- package/classes/entity.service.d.ts +108 -0
- package/classes/{entity-utilities.class.d.ts → entity.utilities.d.ts} +52 -16
- package/classes/file.utilities.d.ts +52 -0
- package/components/confirm-dialog/confirm-dialog-data.builder.d.ts +1 -1
- package/components/input/add-array-item-dialog-data.builder.d.ts +4 -4
- package/components/input/add-array-item-dialog-data.d.ts +2 -2
- package/components/input/array/array-date-input/array-date-input.component.d.ts +11 -0
- package/components/input/array/array-date-range-input/array-date-range-input.component.d.ts +20 -0
- package/components/input/array/array-date-time-input/array-date-time-input.component.d.ts +22 -0
- package/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.d.ts +51 -0
- package/components/input/array/array-string-chips-input/array-string-chips-input.component.d.ts +44 -0
- package/components/input/array/array-table.class.d.ts +49 -0
- package/components/input/base-input.component.d.ts +31 -0
- package/components/input/boolean/boolean-checkbox-input/boolean-checkbox-input.component.d.ts +10 -0
- package/components/input/boolean/boolean-dropdown-input/boolean-dropdown-input.component.d.ts +9 -0
- package/components/input/boolean/boolean-toggle-input/boolean-toggle-input.component.d.ts +10 -0
- package/components/input/custom/custom.component.d.ts +13 -0
- package/components/input/date/date-input/date-input.component.d.ts +13 -0
- package/components/input/date/date-range-input/date-range-input.component.d.ts +20 -0
- package/components/input/date/date-time-input/date-time-input.component.d.ts +31 -0
- package/components/input/file/file-default-input/file-default-input.component.d.ts +13 -0
- package/components/input/file/file-image-input/file-image-input.component.d.ts +22 -0
- package/components/input/file/file-input/dragDrop.directive.d.ts +32 -0
- package/components/input/file/file-input/file-input.component.d.ts +32 -0
- package/components/input/input.component.d.ts +49 -73
- package/components/input/input.module.d.ts +38 -15
- package/components/input/number/number-dropdown-input/number-dropdown-input.component.d.ts +9 -0
- package/components/input/number/number-input/number-input.component.d.ts +9 -0
- package/components/input/string/string-autocomplete-input/string-autocomplete-input.component.d.ts +18 -0
- package/components/input/string/string-dropdown-input/string-dropdown-input.component.d.ts +9 -0
- package/components/input/string/string-input/string-input.component.d.ts +9 -0
- package/components/input/string/string-textbox-input/string-textbox-input.component.d.ts +9 -0
- package/components/table/create-dialog/create-dialog-data.builder.d.ts +1 -1
- package/components/table/create-dialog/create-entity-dialog-data.builder.d.ts +5 -5
- package/components/table/create-dialog/create-entity-dialog-data.d.ts +3 -3
- package/components/table/create-dialog/create-entity-dialog.component.d.ts +9 -5
- package/components/table/edit-dialog/edit-dialog-data.builder.d.ts +4 -4
- package/components/table/edit-dialog/edit-entity-dialog-data.d.ts +3 -3
- package/components/table/edit-dialog/edit-entity-dialog.builder.d.ts +5 -5
- package/components/table/edit-dialog/edit-entity-dialog.component.d.ts +7 -5
- package/components/table/table-data.builder.d.ts +9 -9
- package/components/table/table-data.d.ts +8 -8
- package/components/table/table.component.d.ts +2 -2
- package/decorators/array/array-decorator-internal.data.d.ts +72 -7
- package/decorators/array/array-decorator.data.d.ts +179 -13
- package/decorators/array/array.decorator.d.ts +3 -3
- package/decorators/base/base-property.decorator.d.ts +2 -3
- package/decorators/base/decorator-types.enum.d.ts +15 -4
- package/decorators/base/dropdown-value.interface.d.ts +14 -0
- package/decorators/custom/custom-decorator-internal.data.d.ts +17 -0
- package/decorators/custom/custom-decorator.data.d.ts +33 -0
- package/decorators/custom/custom.decorator.d.ts +11 -0
- package/decorators/date/date-decorator-internal.data.d.ts +44 -0
- package/decorators/date/date-decorator.data.d.ts +129 -0
- package/decorators/date/date.decorator.d.ts +8 -0
- package/decorators/file/file-decorator-internal.data.d.ts +92 -0
- package/decorators/file/file-decorator.data.d.ts +92 -0
- package/decorators/file/file.decorator.d.ts +9 -0
- package/decorators/number/number-decorator-internal.data.d.ts +2 -4
- package/decorators/number/number-decorator.data.d.ts +2 -4
- package/decorators/number/number.decorator.d.ts +2 -2
- package/decorators/object/object-decorator-internal.data.d.ts +3 -3
- package/decorators/object/object-decorator.data.d.ts +5 -5
- package/decorators/object/object.decorator.d.ts +2 -2
- package/decorators/string/string-decorator-internal.data.d.ts +2 -4
- package/decorators/string/string-decorator.data.d.ts +2 -4
- package/esm2020/capsulation/lodash.utilities.mjs +75 -0
- package/esm2020/capsulation/reflect.utilities.mjs +69 -0
- package/esm2020/classes/base.builder.mjs +42 -0
- package/esm2020/classes/date.utilities.mjs +158 -0
- package/esm2020/classes/entity.model.mjs +23 -0
- package/esm2020/classes/entity.service.mjs +180 -0
- package/esm2020/classes/entity.utilities.mjs +686 -0
- package/esm2020/classes/file.utilities.mjs +123 -0
- package/esm2020/components/confirm-dialog/confirm-dialog-data.builder.mjs +5 -5
- package/esm2020/components/confirm-dialog/confirm-dialog.component.mjs +3 -3
- package/esm2020/components/input/add-array-item-dialog-data.builder.mjs +4 -4
- package/esm2020/components/input/add-array-item-dialog-data.mjs +1 -1
- package/esm2020/components/input/array/array-date-input/array-date-input.component.mjs +26 -0
- package/esm2020/components/input/array/array-date-range-input/array-date-range-input.component.mjs +50 -0
- package/esm2020/components/input/array/array-date-time-input/array-date-time-input.component.mjs +50 -0
- package/esm2020/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.mjs +119 -0
- package/esm2020/components/input/array/array-string-chips-input/array-string-chips-input.component.mjs +104 -0
- package/esm2020/components/input/array/array-table.class.mjs +107 -0
- package/esm2020/components/input/base-input.component.mjs +39 -0
- package/esm2020/components/input/boolean/boolean-checkbox-input/boolean-checkbox-input.component.mjs +23 -0
- package/esm2020/components/input/boolean/boolean-dropdown-input/boolean-dropdown-input.component.mjs +17 -0
- package/esm2020/components/input/boolean/boolean-toggle-input/boolean-toggle-input.component.mjs +23 -0
- package/esm2020/components/input/custom/custom.component.mjs +25 -0
- package/esm2020/components/input/date/date-input/date-input.component.mjs +23 -0
- package/esm2020/components/input/date/date-range-input/date-range-input.component.mjs +51 -0
- package/esm2020/components/input/date/date-time-input/date-time-input.component.mjs +63 -0
- package/esm2020/components/input/file/file-default-input/file-default-input.component.mjs +24 -0
- package/esm2020/components/input/file/file-image-input/file-image-input.component.mjs +79 -0
- package/esm2020/components/input/file/file-input/dragDrop.directive.mjs +64 -0
- package/esm2020/components/input/file/file-input/file-input.component.mjs +152 -0
- package/esm2020/components/input/input.component.mjs +143 -179
- package/esm2020/components/input/input.module.mjs +76 -6
- package/esm2020/components/input/number/number-dropdown-input/number-dropdown-input.component.mjs +18 -0
- package/esm2020/components/input/number/number-input/number-input.component.mjs +16 -0
- package/esm2020/components/input/string/string-autocomplete-input/string-autocomplete-input.component.mjs +37 -0
- package/esm2020/components/input/string/string-dropdown-input/string-dropdown-input.component.mjs +18 -0
- package/esm2020/components/input/string/string-input/string-input.component.mjs +16 -0
- package/esm2020/components/input/string/string-textbox-input/string-textbox-input.component.mjs +17 -0
- package/esm2020/components/table/create-dialog/create-dialog-data.builder.mjs +3 -3
- package/esm2020/components/table/create-dialog/create-entity-dialog-data.builder.mjs +2 -2
- package/esm2020/components/table/create-dialog/create-entity-dialog-data.mjs +1 -1
- package/esm2020/components/table/create-dialog/create-entity-dialog.component.mjs +16 -9
- package/esm2020/components/table/edit-dialog/edit-dialog-data.builder.mjs +3 -3
- package/esm2020/components/table/edit-dialog/edit-entity-dialog-data.mjs +1 -1
- package/esm2020/components/table/edit-dialog/edit-entity-dialog.builder.mjs +3 -3
- package/esm2020/components/table/edit-dialog/edit-entity-dialog.component.mjs +19 -11
- package/esm2020/components/table/table-data.builder.mjs +4 -4
- package/esm2020/components/table/table-data.mjs +1 -1
- package/esm2020/components/table/table.component.mjs +21 -23
- package/esm2020/decorators/array/array-decorator-internal.data.mjs +102 -14
- package/esm2020/decorators/array/array-decorator.data.mjs +2 -2
- package/esm2020/decorators/array/array.decorator.mjs +8 -2
- package/esm2020/decorators/base/base-property.decorator.mjs +4 -3
- package/esm2020/decorators/base/decorator-types.enum.mjs +10 -1
- package/esm2020/decorators/base/dropdown-value.interface.mjs +2 -0
- package/esm2020/decorators/base/property-decorator-internal.data.mjs +10 -10
- package/esm2020/decorators/base/property-decorator.data.mjs +1 -1
- package/esm2020/decorators/boolean/boolean-decorator-internal.data.mjs +3 -3
- package/esm2020/decorators/custom/custom-decorator-internal.data.mjs +26 -0
- package/esm2020/decorators/custom/custom-decorator.data.mjs +2 -0
- package/esm2020/decorators/custom/custom.decorator.mjs +13 -0
- package/esm2020/decorators/date/date-decorator-internal.data.mjs +48 -0
- package/esm2020/decorators/date/date-decorator.data.mjs +7 -0
- package/esm2020/decorators/date/date.decorator.mjs +21 -0
- package/esm2020/decorators/file/file-decorator-internal.data.mjs +98 -0
- package/esm2020/decorators/file/file-decorator.data.mjs +7 -0
- package/esm2020/decorators/file/file.decorator.mjs +22 -0
- package/esm2020/decorators/number/number-decorator-internal.data.mjs +1 -1
- package/esm2020/decorators/number/number-decorator.data.mjs +1 -1
- package/esm2020/decorators/number/number.decorator.mjs +3 -3
- package/esm2020/decorators/object/object-decorator-internal.data.mjs +2 -2
- package/esm2020/decorators/object/object-decorator.data.mjs +1 -1
- package/esm2020/decorators/object/object.decorator.mjs +1 -1
- package/esm2020/decorators/string/string-decorator-internal.data.mjs +1 -1
- package/esm2020/decorators/string/string-decorator.data.mjs +1 -1
- package/esm2020/decorators/string/string.decorator.mjs +1 -1
- package/esm2020/mocks/placeholder-data.png.mjs +3 -0
- package/esm2020/public-api.mjs +15 -5
- package/fesm2015/ngx-material-entity.mjs +2649 -422
- package/fesm2015/ngx-material-entity.mjs.map +1 -1
- package/fesm2020/ngx-material-entity.mjs +2537 -397
- package/fesm2020/ngx-material-entity.mjs.map +1 -1
- package/mocks/placeholder-data.png.d.ts +1 -0
- package/package.json +7 -1
- package/public-api.d.ts +15 -4
- package/classes/entity-model.class.d.ts +0 -9
- package/classes/entity-service.class.d.ts +0 -66
- package/esm2020/classes/base-builder.class.mjs +0 -43
- package/esm2020/classes/entity-model.class.mjs +0 -19
- package/esm2020/classes/entity-service.class.mjs +0 -76
- package/esm2020/classes/entity-utilities.class.mjs +0 -377
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const placeholder = "data:image/png;base64,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";
|
package/package.json
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ngx-material-entity",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"license": "MIT",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"angular",
|
|
7
|
+
"material",
|
|
8
|
+
"crud",
|
|
9
|
+
"entity"
|
|
10
|
+
],
|
|
5
11
|
"peerDependencies": {
|
|
6
12
|
"@angular/animations": "~13.3.0",
|
|
7
13
|
"@angular/cdk": "^13.3.9",
|
package/public-api.d.ts
CHANGED
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
* Public API Surface of ngx-material-entity.
|
|
3
3
|
*/
|
|
4
4
|
import 'reflect-metadata';
|
|
5
|
-
export * from './classes/entity
|
|
6
|
-
export * from './classes/entity
|
|
7
|
-
export * from './classes/entity
|
|
5
|
+
export * from './classes/entity.model';
|
|
6
|
+
export * from './classes/entity.service';
|
|
7
|
+
export * from './classes/entity.utilities';
|
|
8
|
+
export * from './classes/date.utilities';
|
|
9
|
+
export * from './classes/file.utilities';
|
|
8
10
|
export * from './components/confirm-dialog/confirm-dialog-data';
|
|
9
11
|
export * from './components/confirm-dialog/confirm-dialog.component';
|
|
10
12
|
export * from './components/confirm-dialog/confirm-dialog.module';
|
|
@@ -20,14 +22,23 @@ export * from './components/table/edit-dialog/edit-entity-dialog-data';
|
|
|
20
22
|
export * from './components/table/edit-dialog/edit-entity-dialog.module';
|
|
21
23
|
export * from './components/table/edit-dialog/edit-entity-dialog.component';
|
|
22
24
|
export * from './components/get-validation-error-message.function';
|
|
23
|
-
export * from './
|
|
25
|
+
export * from './components/input/base-input.component';
|
|
24
26
|
export * from './decorators/array/array.decorator';
|
|
25
27
|
export * from './decorators/array/array-decorator.data';
|
|
28
|
+
export * from './decorators/base/decorator-types.enum';
|
|
29
|
+
export * from './decorators/base/dropdown-value.interface';
|
|
30
|
+
export { Col, Position } from './decorators/base/property-decorator.data';
|
|
26
31
|
export * from './decorators/boolean/boolean.decorator';
|
|
27
32
|
export * from './decorators/boolean/boolean-decorator.data';
|
|
33
|
+
export * from './decorators/date/date.decorator';
|
|
34
|
+
export * from './decorators/date/date-decorator.data';
|
|
28
35
|
export * from './decorators/number/number.decorator';
|
|
29
36
|
export * from './decorators/number/number-decorator.data';
|
|
30
37
|
export * from './decorators/object/object.decorator';
|
|
31
38
|
export * from './decorators/object/object-decorator.data';
|
|
32
39
|
export * from './decorators/string/string.decorator';
|
|
33
40
|
export * from './decorators/string/string-decorator.data';
|
|
41
|
+
export * from './decorators/file/file.decorator';
|
|
42
|
+
export * from './decorators/file/file-decorator.data';
|
|
43
|
+
export * from './decorators/custom/custom.decorator';
|
|
44
|
+
export * from './decorators/custom/custom-decorator.data';
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { Entity } from './entity-model.class';
|
|
2
|
-
import { HttpClient } from '@angular/common/http';
|
|
3
|
-
import { BehaviorSubject } from 'rxjs';
|
|
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 declare abstract class EntityService<EntityType extends Entity> {
|
|
11
|
-
private readonly http;
|
|
12
|
-
/**
|
|
13
|
-
* The base url used for api requests. If u want to have more control over this,
|
|
14
|
-
* you can override the create, read, update and delete methods.
|
|
15
|
-
*
|
|
16
|
-
* Create Sends a POST-Request to baseUrl.
|
|
17
|
-
*
|
|
18
|
-
* Read Sends a GET-Request to baseUrl.
|
|
19
|
-
*
|
|
20
|
-
* Update Sends a PATCH-Request to baseUrl/{id}.
|
|
21
|
-
*
|
|
22
|
-
* Delete Sends a DEL-Request to baseUrl/{id}.
|
|
23
|
-
*/
|
|
24
|
-
abstract readonly baseUrl: string;
|
|
25
|
-
/**
|
|
26
|
-
* A subject of all the entity values.
|
|
27
|
-
* Can be subscribed to when you want to do a specific thing whenever the entities change.
|
|
28
|
-
*/
|
|
29
|
-
readonly entitiesSubject: BehaviorSubject<EntityType[]>;
|
|
30
|
-
/**
|
|
31
|
-
* Gets the entities in an array from the internal entitiesSubject.
|
|
32
|
-
*
|
|
33
|
-
* @returns The current entities in form of an array.
|
|
34
|
-
*/
|
|
35
|
-
get entities(): EntityType[];
|
|
36
|
-
constructor(http: HttpClient);
|
|
37
|
-
/**
|
|
38
|
-
* Creates a new Entity and pushes it to the entities array.
|
|
39
|
-
*
|
|
40
|
-
* @param entity - The data of the entity to create.
|
|
41
|
-
* All values that should be omitted will be removed from it inside this method.
|
|
42
|
-
* @returns A Promise of the created entity.
|
|
43
|
-
*/
|
|
44
|
-
create(entity: EntityType): Promise<EntityType>;
|
|
45
|
-
/**
|
|
46
|
-
* Gets all existing entities and pushes them to the entities array.
|
|
47
|
-
*
|
|
48
|
-
* @returns A Promise of all received Entities.
|
|
49
|
-
*/
|
|
50
|
-
read(): Promise<EntityType[]>;
|
|
51
|
-
/**
|
|
52
|
-
* Updates a specific Entity.
|
|
53
|
-
*
|
|
54
|
-
* @param entity - The updated Entity
|
|
55
|
-
* All values that should be omitted will be removed from it inside this method.
|
|
56
|
-
* @param entityPriorChanges - The current Entity.
|
|
57
|
-
* It Is used to get changed values and only update them instead of sending the whole entity data.
|
|
58
|
-
*/
|
|
59
|
-
update(entity: EntityType, entityPriorChanges: EntityType): Promise<void>;
|
|
60
|
-
/**
|
|
61
|
-
* Deletes a specific Entity.
|
|
62
|
-
*
|
|
63
|
-
* @param id - The id of the element to delete.
|
|
64
|
-
*/
|
|
65
|
-
delete(id: string): Promise<void>;
|
|
66
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The abstract BaseBuilder class.
|
|
3
|
-
*/
|
|
4
|
-
export class BaseBuilder {
|
|
5
|
-
constructor(data) {
|
|
6
|
-
this.validateInput(data);
|
|
7
|
-
this.inputData = data;
|
|
8
|
-
this.data = this.generateBaseData(data);
|
|
9
|
-
return this;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Used to validate the user input in the constructor.
|
|
13
|
-
*
|
|
14
|
-
* @param data - The user input.
|
|
15
|
-
*/
|
|
16
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
17
|
-
validateInput(data) {
|
|
18
|
-
// By default, no validation is done
|
|
19
|
-
}
|
|
20
|
-
;
|
|
21
|
-
/**
|
|
22
|
-
* Sets the value for the given key if no user value was provided.
|
|
23
|
-
*
|
|
24
|
-
* @param key - The key to set the default value for.
|
|
25
|
-
* @param value - The value to set when nothing was provided.
|
|
26
|
-
* @returns The Builder.
|
|
27
|
-
*/
|
|
28
|
-
withDefault(key, value) {
|
|
29
|
-
if (!this.inputData || !this.inputData[key]) {
|
|
30
|
-
this.data[key] = value;
|
|
31
|
-
}
|
|
32
|
-
return this;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Method used to get the final build value after applying all chaining.
|
|
36
|
-
*
|
|
37
|
-
* @returns The build value.
|
|
38
|
-
*/
|
|
39
|
-
getResult() {
|
|
40
|
-
return this.data;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1idWlsZGVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvY2xhc3Nlcy9iYXNlLWJ1aWxkZXIuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0E7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLFdBQVc7SUFLN0IsWUFBc0IsSUFBZ0I7UUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBVUQ7Ozs7T0FJRztJQUNILDZEQUE2RDtJQUNuRCxhQUFhLENBQUMsSUFBZ0I7UUFDcEMsb0NBQW9DO0lBQ3hDLENBQUM7SUFBQSxDQUFDO0lBRUY7Ozs7OztPQU1HO0lBQ0gsV0FBVyxDQUFDLEdBQW9CLEVBQUUsS0FBdUQ7UUFDckYsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBc0MsQ0FBQztTQUMzRDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsU0FBUztRQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNyQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKlxuICogVGhlIGFic3RyYWN0IEJhc2VCdWlsZGVyIGNsYXNzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUJ1aWxkZXI8SW50ZXJuYWxUeXBlIGV4dGVuZHMgSW5wdXRUeXBlLCBJbnB1dFR5cGUgZXh0ZW5kcyBvYmplY3Q+IHtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0YTogSW50ZXJuYWxUeXBlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5wdXREYXRhPzogSW5wdXRUeXBlO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGRhdGE/OiBJbnB1dFR5cGUpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUlucHV0KGRhdGEpO1xuICAgICAgICB0aGlzLmlucHV0RGF0YSA9IGRhdGE7XG4gICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZ2VuZXJhdGVCYXNlRGF0YShkYXRhKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIHRoZSBpbnRlcm5hbCBkYXRhIGZyb20gdGhlIGdpdmVuIHVzZXIgaW5wdXRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGEgLSBUaGUgaW5wdXQgZnJvbSB0aGUgdXNlci5cbiAgICAgKiBAcmV0dXJucyBUaGUgaW50ZXJuYWwgZGF0YS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2VuZXJhdGVCYXNlRGF0YShkYXRhPzogSW5wdXRUeXBlKTogSW50ZXJuYWxUeXBlO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byB2YWxpZGF0ZSB0aGUgdXNlciBpbnB1dCBpbiB0aGUgY29uc3RydWN0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YSAtIFRoZSB1c2VyIGlucHV0LlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGVJbnB1dChkYXRhPzogSW5wdXRUeXBlKTogdm9pZCB7XG4gICAgICAgIC8vIEJ5IGRlZmF1bHQsIG5vIHZhbGlkYXRpb24gaXMgZG9uZVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIGtleSBpZiBubyB1c2VyIHZhbHVlIHdhcyBwcm92aWRlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IHRvIHNldCB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IuXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHNldCB3aGVuIG5vdGhpbmcgd2FzIHByb3ZpZGVkLlxuICAgICAqIEByZXR1cm5zIFRoZSBCdWlsZGVyLlxuICAgICAqL1xuICAgIHdpdGhEZWZhdWx0KGtleToga2V5b2YgSW5wdXRUeXBlLCB2YWx1ZTogT21pdDxJbnRlcm5hbFR5cGVba2V5b2YgSW5wdXRUeXBlXSwgJ3VuZGVmaW5lZCc+KTogQmFzZUJ1aWxkZXI8SW50ZXJuYWxUeXBlLCBJbnB1dFR5cGU+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlucHV0RGF0YSB8fCAhdGhpcy5pbnB1dERhdGFba2V5XSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhW2tleV0gPSB2YWx1ZSBhcyBJbnRlcm5hbFR5cGVba2V5b2YgSW5wdXRUeXBlXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgdXNlZCB0byBnZXQgdGhlIGZpbmFsIGJ1aWxkIHZhbHVlIGFmdGVyIGFwcGx5aW5nIGFsbCBjaGFpbmluZy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFRoZSBidWlsZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBnZXRSZXN1bHQoKTogSW50ZXJuYWxUeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgICB9XG59Il19
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import { string } from '../decorators/string/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LW1vZGVsLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvY2xhc3Nlcy9lbnRpdHktbW9kZWwuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUUvRDs7R0FFRztBQUNILE1BQU0sT0FBZ0IsTUFBTTtDQWEzQjtBQURHO0lBUkMsTUFBTSxDQUFDO1FBQ0osYUFBYSxFQUFFLElBQUk7UUFDbkIsYUFBYSxFQUFFLElBQUk7UUFDbkIsT0FBTyxFQUFFLEtBQUs7UUFDZCxZQUFZLEVBQUUsTUFBTTtRQUNwQixXQUFXLEVBQUUsSUFBSTtRQUNqQixRQUFRLEVBQUUsSUFBSTtLQUNqQixDQUFDOztrQ0FDVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN0cmluZyB9IGZyb20gJy4uL2RlY29yYXRvcnMvc3RyaW5nL3N0cmluZy5kZWNvcmF0b3InO1xuXG4vKipcbiAqIFRoZSBiYXNlIEVudGl0eSBjbGFzcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEVudGl0eSB7XG4gICAgLyoqXG4gICAgICogQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIEVudGl0eS5cbiAgICAgKi9cbiAgICBAc3RyaW5nKHtcbiAgICAgICAgb21pdEZvckNyZWF0ZTogdHJ1ZSxcbiAgICAgICAgb21pdEZvclVwZGF0ZTogdHJ1ZSxcbiAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgIGRpc3BsYXlTdHlsZTogJ2xpbmUnLFxuICAgICAgICBkaXNwbGF5TmFtZTogJ0lEJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9KVxuICAgIGlkITogc3RyaW5nO1xufSJdfQ==
|
|
@@ -1,76 +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
|
-
* @returns The current entities in form of an array.
|
|
23
|
-
*/
|
|
24
|
-
get entities() {
|
|
25
|
-
return this.entitiesSubject.value;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Creates a new Entity and pushes it to the entities array.
|
|
29
|
-
*
|
|
30
|
-
* @param entity - The data of the entity to create.
|
|
31
|
-
* All values that should be omitted will be removed from it inside this method.
|
|
32
|
-
* @returns A Promise of the created entity.
|
|
33
|
-
*/
|
|
34
|
-
async create(entity) {
|
|
35
|
-
const body = omit(entity, EntityUtilities.getOmitForCreate(entity));
|
|
36
|
-
const e = await firstValueFrom(this.http.post(this.baseUrl, body));
|
|
37
|
-
this.entities.push(e);
|
|
38
|
-
this.entitiesSubject.next(this.entities);
|
|
39
|
-
return e;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Gets all existing entities and pushes them to the entities array.
|
|
43
|
-
*
|
|
44
|
-
* @returns A Promise of all received Entities.
|
|
45
|
-
*/
|
|
46
|
-
async read() {
|
|
47
|
-
const e = await firstValueFrom(this.http.get(this.baseUrl));
|
|
48
|
-
this.entitiesSubject.next(e);
|
|
49
|
-
return e;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Updates a specific Entity.
|
|
53
|
-
*
|
|
54
|
-
* @param entity - The updated Entity
|
|
55
|
-
* All values that should be omitted will be removed from it inside this method.
|
|
56
|
-
* @param entityPriorChanges - The current Entity.
|
|
57
|
-
* It Is used to get changed values and only update them instead of sending the whole entity data.
|
|
58
|
-
*/
|
|
59
|
-
async update(entity, entityPriorChanges) {
|
|
60
|
-
const reqBody = omit(EntityUtilities.difference(entity, entityPriorChanges), EntityUtilities.getOmitForUpdate(entity));
|
|
61
|
-
const updatedEntity = await firstValueFrom(this.http.patch(`${this.baseUrl}/${entityPriorChanges.id}`, omitBy(reqBody, isNil)));
|
|
62
|
-
this.entities[this.entities.findIndex((e) => e.id === entityPriorChanges.id)] = updatedEntity;
|
|
63
|
-
this.entitiesSubject.next(this.entities);
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Deletes a specific Entity.
|
|
67
|
-
*
|
|
68
|
-
* @param id - The id of the element to delete.
|
|
69
|
-
*/
|
|
70
|
-
async delete(id) {
|
|
71
|
-
await firstValueFrom(this.http.delete(`${this.baseUrl}/${id}`));
|
|
72
|
-
this.entities.splice(this.entities.findIndex((e) => e.id === id), 1);
|
|
73
|
-
this.entitiesSubject.next(this.entities);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXNlcnZpY2UuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jbGFzc2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0Q7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQWdCLGFBQWE7SUE4Qi9CLFlBQTZCLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7UUFmN0M7OztXQUdHO1FBQ00sb0JBQWUsR0FBa0MsSUFBSSxlQUFlLENBQWUsRUFBRSxDQUFDLENBQUM7SUFXaEQsQ0FBQztJQVRqRDs7OztPQUlHO0lBQ0gsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQztJQUN0QyxDQUFDO0lBSUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFrQjtRQUMzQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sQ0FBQyxHQUFHLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFhLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekMsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxJQUFJO1FBQ04sTUFBTSxDQUFDLEdBQUcsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQWUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBa0IsRUFBRSxrQkFBOEI7UUFDM0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUNoQixlQUFlLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxFQUN0RCxlQUFlLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQzNDLENBQUM7UUFDRixNQUFNLGFBQWEsR0FBRyxNQUFNLGNBQWMsQ0FDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQ1gsR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxFQUMxQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUN6QixDQUNKLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDO1FBQzlGLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBVTtRQUNuQixNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQ2pELENBQUM7UUFDRixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5IH0gZnJvbSAnLi9lbnRpdHktbW9kZWwuY2xhc3MnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzTmlsLCBvbWl0LCBvbWl0QnkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgRW50aXR5VXRpbGl0aWVzIH0gZnJvbSAnLi9lbnRpdHktdXRpbGl0aWVzLmNsYXNzJztcblxuLyoqXG4gKiBBIGdlbmVyaWMgRW50aXR5U2VydmljZSBjbGFzcy5cbiAqIE9mZmVycyBiYXNpYyBDUlVELWZ1bmN0aW9uYWxpdHkuXG4gKiBZb3Ugc2hvdWxkIGNyZWF0ZSBhIHNlcnZpY2UgZm9yIGV2ZXJ5IEVudGl0eSB5b3UgaGF2ZS5cbiAqIElmIHlvdSBleHRlbmQgZnJvbSB0aGlzIHlvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBleHRlbmRlZCBTZXJ2aWNlIGNhbiBiZSBpbmplY3RlZC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEVudGl0eVNlcnZpY2U8RW50aXR5VHlwZSBleHRlbmRzIEVudGl0eT4ge1xuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHVybCB1c2VkIGZvciBhcGkgcmVxdWVzdHMuIElmIHUgd2FudCB0byBoYXZlIG1vcmUgY29udHJvbCBvdmVyIHRoaXMsXG4gICAgICogeW91IGNhbiBvdmVycmlkZSB0aGUgY3JlYXRlLCByZWFkLCB1cGRhdGUgYW5kIGRlbGV0ZSBtZXRob2RzLlxuICAgICAqXG4gICAgICogQ3JlYXRlIFNlbmRzIGEgUE9TVC1SZXF1ZXN0IHRvIGJhc2VVcmwuXG4gICAgICpcbiAgICAgKiBSZWFkIFNlbmRzIGEgR0VULVJlcXVlc3QgdG8gYmFzZVVybC5cbiAgICAgKlxuICAgICAqIFVwZGF0ZSBTZW5kcyBhIFBBVENILVJlcXVlc3QgdG8gYmFzZVVybC97aWR9LlxuICAgICAqXG4gICAgICogRGVsZXRlIFNlbmRzIGEgREVMLVJlcXVlc3QgdG8gYmFzZVVybC97aWR9LlxuICAgICAqL1xuICAgIGFic3RyYWN0IHJlYWRvbmx5IGJhc2VVcmw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEEgc3ViamVjdCBvZiBhbGwgdGhlIGVudGl0eSB2YWx1ZXMuXG4gICAgICogQ2FuIGJlIHN1YnNjcmliZWQgdG8gd2hlbiB5b3Ugd2FudCB0byBkbyBhIHNwZWNpZmljIHRoaW5nIHdoZW5ldmVyIHRoZSBlbnRpdGllcyBjaGFuZ2UuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZW50aXRpZXNTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8RW50aXR5VHlwZVtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RW50aXR5VHlwZVtdPihbXSk7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBlbnRpdGllcyBpbiBhbiBhcnJheSBmcm9tIHRoZSBpbnRlcm5hbCBlbnRpdGllc1N1YmplY3QuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBlbnRpdGllcyBpbiBmb3JtIG9mIGFuIGFycmF5LlxuICAgICAqL1xuICAgIGdldCBlbnRpdGllcygpOiBFbnRpdHlUeXBlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnRpdGllc1N1YmplY3QudmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50KSB7fVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBFbnRpdHkgYW5kIHB1c2hlcyBpdCB0byB0aGUgZW50aXRpZXMgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZW50aXR5IC0gVGhlIGRhdGEgb2YgdGhlIGVudGl0eSB0byBjcmVhdGUuXG4gICAgICogQWxsIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBvbWl0dGVkIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGl0IGluc2lkZSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAcmV0dXJucyBBIFByb21pc2Ugb2YgdGhlIGNyZWF0ZWQgZW50aXR5LlxuICAgICAqL1xuICAgIGFzeW5jIGNyZWF0ZShlbnRpdHk6IEVudGl0eVR5cGUpOiBQcm9taXNlPEVudGl0eVR5cGU+IHtcbiAgICAgICAgY29uc3QgYm9keSA9IG9taXQoZW50aXR5LCBFbnRpdHlVdGlsaXRpZXMuZ2V0T21pdEZvckNyZWF0ZShlbnRpdHkpKTtcbiAgICAgICAgY29uc3QgZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5wb3N0PEVudGl0eVR5cGU+KHRoaXMuYmFzZVVybCwgYm9keSkpO1xuICAgICAgICB0aGlzLmVudGl0aWVzLnB1c2goZSk7XG4gICAgICAgIHRoaXMuZW50aXRpZXNTdWJqZWN0Lm5leHQodGhpcy5lbnRpdGllcyk7XG4gICAgICAgIHJldHVybiBlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYWxsIGV4aXN0aW5nIGVudGl0aWVzIGFuZCBwdXNoZXMgdGhlbSB0byB0aGUgZW50aXRpZXMgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBIFByb21pc2Ugb2YgYWxsIHJlY2VpdmVkIEVudGl0aWVzLlxuICAgICAqL1xuICAgIGFzeW5jIHJlYWQoKTogUHJvbWlzZTxFbnRpdHlUeXBlW10+IHtcbiAgICAgICAgY29uc3QgZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5nZXQ8RW50aXR5VHlwZVtdPih0aGlzLmJhc2VVcmwpKTtcbiAgICAgICAgdGhpcy5lbnRpdGllc1N1YmplY3QubmV4dChlKTtcbiAgICAgICAgcmV0dXJuIGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyBhIHNwZWNpZmljIEVudGl0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbnRpdHkgLSBUaGUgdXBkYXRlZCBFbnRpdHlcbiAgICAgKiBBbGwgdmFsdWVzIHRoYXQgc2hvdWxkIGJlIG9taXR0ZWQgd2lsbCBiZSByZW1vdmVkIGZyb20gaXQgaW5zaWRlIHRoaXMgbWV0aG9kLlxuICAgICAqIEBwYXJhbSBlbnRpdHlQcmlvckNoYW5nZXMgLSBUaGUgY3VycmVudCBFbnRpdHkuXG4gICAgICogSXQgSXMgdXNlZCB0byBnZXQgY2hhbmdlZCB2YWx1ZXMgYW5kIG9ubHkgdXBkYXRlIHRoZW0gaW5zdGVhZCBvZiBzZW5kaW5nIHRoZSB3aG9sZSBlbnRpdHkgZGF0YS5cbiAgICAgKi9cbiAgICBhc3luYyB1cGRhdGUoZW50aXR5OiBFbnRpdHlUeXBlLCBlbnRpdHlQcmlvckNoYW5nZXM6IEVudGl0eVR5cGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcmVxQm9keSA9IG9taXQoXG4gICAgICAgICAgICBFbnRpdHlVdGlsaXRpZXMuZGlmZmVyZW5jZShlbnRpdHksIGVudGl0eVByaW9yQ2hhbmdlcyksXG4gICAgICAgICAgICBFbnRpdHlVdGlsaXRpZXMuZ2V0T21pdEZvclVwZGF0ZShlbnRpdHkpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRFbnRpdHkgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgICAgIHRoaXMuaHR0cC5wYXRjaDxFbnRpdHlUeXBlPihcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmJhc2VVcmx9LyR7ZW50aXR5UHJpb3JDaGFuZ2VzLmlkfWAsXG4gICAgICAgICAgICAgICAgb21pdEJ5KHJlcUJvZHksIGlzTmlsKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmVudGl0aWVzW3RoaXMuZW50aXRpZXMuZmluZEluZGV4KChlKSA9PiBlLmlkID09PSBlbnRpdHlQcmlvckNoYW5nZXMuaWQpXSA9IHVwZGF0ZWRFbnRpdHk7XG4gICAgICAgIHRoaXMuZW50aXRpZXNTdWJqZWN0Lm5leHQodGhpcy5lbnRpdGllcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVsZXRlcyBhIHNwZWNpZmljIEVudGl0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgZWxlbWVudCB0byBkZWxldGUuXG4gICAgICovXG4gICAgYXN5bmMgZGVsZXRlKGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwLmRlbGV0ZTx2b2lkPihgJHt0aGlzLmJhc2VVcmx9LyR7aWR9YCkpO1xuICAgICAgICB0aGlzLmVudGl0aWVzLnNwbGljZShcbiAgICAgICAgICAgIHRoaXMuZW50aXRpZXMuZmluZEluZGV4KChlKSA9PiBlLmlkID09PSBpZCksIDFcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5lbnRpdGllc1N1YmplY3QubmV4dCh0aGlzLmVudGl0aWVzKTtcbiAgICB9XG59Il19
|