ngx-material-entity 0.1.2 → 0.1.5
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 +533 -326
- package/capsulation/lodash.utilities.d.ts +62 -0
- package/capsulation/reflect.utilities.d.ts +56 -0
- package/classes/base.builder.d.ts +36 -0
- package/classes/date.utilities.d.ts +70 -0
- package/classes/entity.model.d.ts +19 -0
- package/classes/entity.service.d.ts +108 -0
- package/classes/entity.utilities.d.ts +180 -0
- package/classes/file.utilities.d.ts +52 -0
- package/components/confirm-dialog/confirm-dialog-data.builder.d.ts +10 -11
- package/components/confirm-dialog/confirm-dialog-data.d.ts +4 -0
- package/components/confirm-dialog/confirm-dialog.component.d.ts +11 -0
- package/components/input/add-array-item-dialog-data.builder.d.ts +21 -0
- package/components/input/{array-table/add-array-item-dialog/add-array-item-dialog-data.d.ts → add-array-item-dialog-data.d.ts} +6 -3
- package/components/input/array/array-date-input/array-date-input.component.d.ts +22 -0
- package/components/input/array/array-date-range-input/array-date-range-input.component.d.ts +30 -0
- package/components/input/array/array-date-time-input/array-date-time-input.component.d.ts +32 -0
- package/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.d.ts +58 -0
- package/components/input/array/array-string-chips-input/array-string-chips-input.component.d.ts +51 -0
- package/components/input/array/array-table.class.d.ts +48 -0
- package/components/input/boolean/boolean-checkbox-input/boolean-checkbox-input.component.d.ts +17 -0
- package/components/input/boolean/boolean-dropdown-input/boolean-dropdown-input.component.d.ts +17 -0
- package/components/input/boolean/boolean-toggle-input/boolean-toggle-input.component.d.ts +17 -0
- package/components/input/date/date-input/date-input.component.d.ts +21 -0
- package/components/input/date/date-range-input/date-range-input.component.d.ts +27 -0
- package/components/input/date/date-time-input/date-time-input.component.d.ts +38 -0
- package/components/input/file/file-default-input/file-default-input.component.d.ts +21 -0
- package/components/input/file/file-image-input/file-image-input.component.d.ts +30 -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 +108 -39
- package/components/input/input.module.d.ts +37 -13
- package/components/input/number/number-dropdown-input/number-dropdown-input.component.d.ts +17 -0
- package/components/input/number/number-input/number-input.component.d.ts +17 -0
- package/components/input/string/string-autocomplete-input/string-autocomplete-input.component.d.ts +25 -0
- package/components/input/string/string-dropdown-input/string-dropdown-input.component.d.ts +17 -0
- package/components/input/string/string-input/string-input.component.d.ts +17 -0
- package/components/input/string/string-textbox-input/string-textbox-input.component.d.ts +17 -0
- package/components/table/create-dialog/create-dialog-data.builder.d.ts +9 -8
- package/components/table/create-dialog/create-entity-dialog-data.builder.d.ts +12 -6
- package/components/table/create-dialog/create-entity-dialog-data.d.ts +3 -3
- package/components/table/create-dialog/create-entity-dialog.component.d.ts +23 -7
- package/components/table/edit-dialog/edit-dialog-data.builder.d.ts +11 -13
- package/components/table/edit-dialog/edit-entity-dialog-data.d.ts +3 -3
- package/components/table/edit-dialog/edit-entity-dialog.builder.d.ts +12 -6
- package/components/table/edit-dialog/edit-entity-dialog.component.d.ts +25 -7
- package/components/table/table-data.builder.d.ts +25 -14
- package/components/table/table-data.d.ts +22 -10
- package/components/table/table.component.d.ts +48 -2
- package/components/table/table.module.d.ts +3 -1
- package/decorators/array/array-decorator-internal.data.d.ts +85 -9
- package/decorators/array/array-decorator.data.d.ts +200 -25
- package/decorators/array/array.decorator.d.ts +4 -4
- package/decorators/base/base-property.decorator.d.ts +2 -3
- package/decorators/base/decorator-types.enum.d.ts +13 -4
- package/decorators/base/dropdown-value.interface.d.ts +14 -0
- package/decorators/base/property-decorator-internal.data.d.ts +16 -3
- package/decorators/base/property-decorator.data.d.ts +26 -5
- package/decorators/boolean/boolean-decorator-internal.data.d.ts +9 -0
- package/decorators/boolean/boolean-decorator.data.d.ts +9 -0
- package/decorators/boolean/boolean.decorator.d.ts +1 -1
- 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 +8 -4
- package/decorators/number/number-decorator.data.d.ts +8 -4
- package/decorators/number/number.decorator.d.ts +2 -2
- package/decorators/object/object-decorator-internal.data.d.ts +6 -3
- package/decorators/object/object-decorator.data.d.ts +8 -5
- package/decorators/object/object.decorator.d.ts +3 -3
- package/decorators/string/string-decorator-internal.data.d.ts +14 -4
- package/decorators/string/string-decorator.data.d.ts +14 -4
- package/decorators/string/string.decorator.d.ts +1 -1
- 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 +19 -0
- package/esm2020/classes/entity.service.mjs +180 -0
- package/esm2020/classes/entity.utilities.mjs +669 -0
- package/esm2020/classes/file.utilities.mjs +123 -0
- package/esm2020/components/confirm-dialog/confirm-dialog-data.builder.mjs +17 -50
- package/esm2020/components/confirm-dialog/confirm-dialog-data.mjs +1 -1
- package/esm2020/components/confirm-dialog/confirm-dialog.component.mjs +15 -4
- package/esm2020/components/get-validation-error-message.function.mjs +5 -1
- package/esm2020/components/input/add-array-item-dialog-data.builder.mjs +30 -0
- package/esm2020/components/input/add-array-item-dialog-data.mjs +2 -0
- package/esm2020/components/input/array/array-date-input/array-date-input.component.mjs +44 -0
- package/esm2020/components/input/array/array-date-range-input/array-date-range-input.component.mjs +68 -0
- package/esm2020/components/input/array/array-date-time-input/array-date-time-input.component.mjs +65 -0
- package/esm2020/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.mjs +131 -0
- package/esm2020/components/input/array/array-string-chips-input/array-string-chips-input.component.mjs +116 -0
- package/esm2020/components/input/array/array-table.class.mjs +92 -0
- package/esm2020/components/input/boolean/boolean-checkbox-input/boolean-checkbox-input.component.mjs +38 -0
- package/esm2020/components/input/boolean/boolean-dropdown-input/boolean-dropdown-input.component.mjs +35 -0
- package/esm2020/components/input/boolean/boolean-toggle-input/boolean-toggle-input.component.mjs +38 -0
- package/esm2020/components/input/date/date-input/date-input.component.mjs +38 -0
- package/esm2020/components/input/date/date-range-input/date-range-input.component.mjs +63 -0
- package/esm2020/components/input/date/date-time-input/date-time-input.component.mjs +74 -0
- package/esm2020/components/input/file/file-default-input/file-default-input.component.mjs +39 -0
- package/esm2020/components/input/file/file-image-input/file-image-input.component.mjs +95 -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 +207 -110
- package/esm2020/components/input/input.module.mjs +87 -10
- package/esm2020/components/input/number/number-dropdown-input/number-dropdown-input.component.mjs +36 -0
- package/esm2020/components/input/number/number-input/number-input.component.mjs +34 -0
- package/esm2020/components/input/string/string-autocomplete-input/string-autocomplete-input.component.mjs +52 -0
- package/esm2020/components/input/string/string-dropdown-input/string-dropdown-input.component.mjs +36 -0
- package/esm2020/components/input/string/string-input/string-input.component.mjs +34 -0
- package/esm2020/components/input/string/string-textbox-input/string-textbox-input.component.mjs +35 -0
- package/esm2020/components/table/create-dialog/create-dialog-data.builder.mjs +18 -40
- package/esm2020/components/table/create-dialog/create-entity-dialog-data.builder.mjs +15 -7
- package/esm2020/components/table/create-dialog/create-entity-dialog-data.mjs +1 -1
- package/esm2020/components/table/create-dialog/create-entity-dialog.component.mjs +36 -22
- package/esm2020/components/table/create-dialog/create-entity-dialog.module.mjs +20 -4
- package/esm2020/components/table/edit-dialog/edit-dialog-data.builder.mjs +23 -63
- package/esm2020/components/table/edit-dialog/edit-entity-dialog-data.mjs +1 -1
- package/esm2020/components/table/edit-dialog/edit-entity-dialog.builder.mjs +15 -7
- package/esm2020/components/table/edit-dialog/edit-entity-dialog.component.mjs +50 -31
- package/esm2020/components/table/table-data.builder.mjs +31 -15
- package/esm2020/components/table/table-data.mjs +1 -1
- package/esm2020/components/table/table.component.mjs +77 -32
- package/esm2020/components/table/table.module.mjs +12 -4
- package/esm2020/decorators/array/array-decorator-internal.data.mjs +111 -12
- package/esm2020/decorators/array/array-decorator.data.mjs +2 -2
- package/esm2020/decorators/array/array.decorator.mjs +9 -3
- package/esm2020/decorators/base/base-property.decorator.mjs +4 -3
- package/esm2020/decorators/base/decorator-types.enum.mjs +9 -1
- package/esm2020/decorators/base/dropdown-value.interface.mjs +2 -0
- package/esm2020/decorators/base/property-decorator-internal.data.mjs +33 -10
- package/esm2020/decorators/base/property-decorator.data.mjs +1 -1
- package/esm2020/decorators/boolean/boolean-decorator-internal.data.mjs +12 -1
- package/esm2020/decorators/boolean/boolean-decorator.data.mjs +1 -1
- package/esm2020/decorators/boolean/boolean.decorator.mjs +2 -2
- 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 +7 -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 +5 -2
- package/esm2020/decorators/object/object-decorator.data.mjs +1 -1
- package/esm2020/decorators/object/object.decorator.mjs +2 -2
- package/esm2020/decorators/string/string-decorator-internal.data.mjs +13 -1
- package/esm2020/decorators/string/string-decorator.data.mjs +1 -1
- package/esm2020/decorators/string/string.decorator.mjs +2 -2
- package/esm2020/mocks/placeholder-data.png.mjs +3 -0
- package/esm2020/public-api.mjs +12 -5
- package/fesm2015/ngx-material-entity.mjs +3271 -894
- package/fesm2015/ngx-material-entity.mjs.map +1 -1
- package/fesm2020/ngx-material-entity.mjs +3140 -829
- 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 +12 -5
- package/classes/entity-model.class.d.ts +0 -9
- package/classes/entity-service.class.d.ts +0 -66
- package/classes/entity-utilities.class.d.ts +0 -112
- package/components/input/array-table/add-array-item-dialog/add-array-item-dialog-data.builder.d.ts +0 -17
- package/components/input/array-table/add-array-item-dialog/add-array-item-dialog.component.d.ts +0 -22
- package/components/input/array-table/add-array-item-dialog/add-array-item-dialog.module.d.ts +0 -12
- package/components/input/array-table/array-table.component.d.ts +0 -34
- package/components/input/array-table/array-table.module.d.ts +0 -19
- package/components/input/internal-input/internal-input.component.d.ts +0 -54
- package/components/input/internal-input/internal-input.module.d.ts +0 -16
- 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 -329
- package/esm2020/components/input/array-table/add-array-item-dialog/add-array-item-dialog-data.builder.mjs +0 -33
- package/esm2020/components/input/array-table/add-array-item-dialog/add-array-item-dialog-data.mjs +0 -2
- package/esm2020/components/input/array-table/add-array-item-dialog/add-array-item-dialog.component.mjs +0 -45
- package/esm2020/components/input/array-table/add-array-item-dialog/add-array-item-dialog.module.mjs +0 -22
- package/esm2020/components/input/array-table/array-table.component.mjs +0 -119
- package/esm2020/components/input/array-table/array-table.module.mjs +0 -66
- package/esm2020/components/input/internal-input/internal-input.component.mjs +0 -70
- package/esm2020/components/input/internal-input/internal-input.module.mjs +0 -54
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';
|
|
2
2
|
import { PropertyDecoratorConfig } from '../base/property-decorator.data';
|
|
3
3
|
/**
|
|
4
4
|
* Definition for the @object metadata.
|
|
5
5
|
*/
|
|
6
|
-
declare abstract class ObjectDecoratorConfig<EntityType extends
|
|
6
|
+
declare abstract class ObjectDecoratorConfig<EntityType extends BaseEntityType<EntityType>> extends PropertyDecoratorConfig {
|
|
7
7
|
/**
|
|
8
|
-
* The
|
|
8
|
+
* The class of the object. Is used to call the constructor so that all metadata is initialized.
|
|
9
9
|
*/
|
|
10
|
-
|
|
10
|
+
EntityClass: EntityClassNewable<EntityType>;
|
|
11
11
|
/**
|
|
12
12
|
* How to display the object.
|
|
13
13
|
*
|
|
@@ -16,7 +16,10 @@ declare abstract class ObjectDecoratorConfig<EntityType extends Entity> extends
|
|
|
16
16
|
*/
|
|
17
17
|
displayStyle: 'inline';
|
|
18
18
|
}
|
|
19
|
-
|
|
19
|
+
/**
|
|
20
|
+
* The configuration options for a object property.
|
|
21
|
+
*/
|
|
22
|
+
export interface DefaultObjectDecoratorConfig<EntityType extends BaseEntityType<EntityType>> extends ObjectDecoratorConfig<EntityType> {
|
|
20
23
|
displayStyle: 'inline';
|
|
21
24
|
}
|
|
22
25
|
export {};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { Entity } from '../../classes/entity-model.class';
|
|
2
1
|
import { DefaultObjectDecoratorConfig } from './object-decorator.data';
|
|
2
|
+
import { BaseEntityType } from '../../classes/entity.model';
|
|
3
3
|
/**
|
|
4
|
-
* Decorator for setting and getting object
|
|
4
|
+
* Decorator for setting and getting object property metadata.
|
|
5
5
|
*
|
|
6
6
|
* @param metadata - The metadata of the object property.
|
|
7
7
|
* @returns The method that defines the metadata.
|
|
8
8
|
*/
|
|
9
|
-
export declare function object<EntityType extends
|
|
9
|
+
export declare function object<EntityType extends BaseEntityType<EntityType>>(metadata: DefaultObjectDecoratorConfig<EntityType>): (target: object, propertyKey: string) => void;
|
|
@@ -1,13 +1,17 @@
|
|
|
1
|
+
import { DropdownValue } from '../base/dropdown-value.interface';
|
|
1
2
|
import { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';
|
|
2
3
|
import { AutocompleteStringDecoratorConfig, DefaultStringDecoratorConfig, DropdownStringDecoratorConfig, TextboxStringDecoratorConfig } from './string-decorator.data';
|
|
4
|
+
/**
|
|
5
|
+
* The internal DropdownStringDecoratorConfig. Sets default values.
|
|
6
|
+
*/
|
|
3
7
|
export declare class DropdownStringDecoratorConfigInternal extends PropertyDecoratorConfigInternal implements DropdownStringDecoratorConfig {
|
|
4
8
|
displayStyle: 'dropdown';
|
|
5
|
-
dropdownValues:
|
|
6
|
-
displayName: string;
|
|
7
|
-
value: string;
|
|
8
|
-
}[];
|
|
9
|
+
dropdownValues: DropdownValue<string>[];
|
|
9
10
|
constructor(data: DropdownStringDecoratorConfig);
|
|
10
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* The internal DefaultStringDecoratorConfig. Sets default values.
|
|
14
|
+
*/
|
|
11
15
|
export declare class DefaultStringDecoratorConfigInternal extends PropertyDecoratorConfigInternal implements DefaultStringDecoratorConfig {
|
|
12
16
|
displayStyle: 'line';
|
|
13
17
|
minLength?: number;
|
|
@@ -15,12 +19,18 @@ export declare class DefaultStringDecoratorConfigInternal extends PropertyDecora
|
|
|
15
19
|
regex?: RegExp;
|
|
16
20
|
constructor(data: DefaultStringDecoratorConfig);
|
|
17
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* The internal TextboxStringDecoratorConfig. Sets default values.
|
|
24
|
+
*/
|
|
18
25
|
export declare class TextboxStringDecoratorConfigInternal extends PropertyDecoratorConfigInternal implements TextboxStringDecoratorConfig {
|
|
19
26
|
displayStyle: 'textbox';
|
|
20
27
|
minLength?: number;
|
|
21
28
|
maxLength?: number;
|
|
22
29
|
constructor(data: TextboxStringDecoratorConfig);
|
|
23
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* The internal AutocompleteStringDecoratorConfig. Sets default values.
|
|
33
|
+
*/
|
|
24
34
|
export declare class AutocompleteStringDecoratorConfigInternal extends PropertyDecoratorConfigInternal implements AutocompleteStringDecoratorConfig {
|
|
25
35
|
displayStyle: 'autocomplete';
|
|
26
36
|
autocompleteValues: string[];
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DropdownValue } from '../base/dropdown-value.interface';
|
|
1
2
|
import { PropertyDecoratorConfig } from '../base/property-decorator.data';
|
|
2
3
|
/**
|
|
3
4
|
* Definition for the @string metadata.
|
|
@@ -8,17 +9,20 @@ declare abstract class StringDecoratorConfig extends PropertyDecoratorConfig {
|
|
|
8
9
|
*/
|
|
9
10
|
displayStyle: 'line' | 'textbox' | 'autocomplete' | 'dropdown';
|
|
10
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* The configuration options for a string property displayed as a dropdown.
|
|
14
|
+
*/
|
|
11
15
|
export interface DropdownStringDecoratorConfig extends StringDecoratorConfig {
|
|
12
16
|
displayStyle: 'dropdown';
|
|
13
17
|
/**
|
|
14
18
|
* The values of the dropdown, consisting of a name to display and the actual value
|
|
15
19
|
* Can also receive a function to determine the values.
|
|
16
20
|
*/
|
|
17
|
-
dropdownValues:
|
|
18
|
-
displayName: string;
|
|
19
|
-
value: string;
|
|
20
|
-
}[];
|
|
21
|
+
dropdownValues: DropdownValue<string>[];
|
|
21
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* The configuration options for a string property displayed in a default text input.
|
|
25
|
+
*/
|
|
22
26
|
export interface DefaultStringDecoratorConfig extends StringDecoratorConfig {
|
|
23
27
|
displayStyle: 'line';
|
|
24
28
|
/**
|
|
@@ -34,6 +38,9 @@ export interface DefaultStringDecoratorConfig extends StringDecoratorConfig {
|
|
|
34
38
|
*/
|
|
35
39
|
regex?: RegExp;
|
|
36
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* The configuration options for a string property displayed in a textbox input.
|
|
43
|
+
*/
|
|
37
44
|
export interface TextboxStringDecoratorConfig extends StringDecoratorConfig {
|
|
38
45
|
displayStyle: 'textbox';
|
|
39
46
|
/**
|
|
@@ -45,6 +52,9 @@ export interface TextboxStringDecoratorConfig extends StringDecoratorConfig {
|
|
|
45
52
|
*/
|
|
46
53
|
maxLength?: number;
|
|
47
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* The configuration options for a string property displayed in a mat-autocomplete input.
|
|
57
|
+
*/
|
|
48
58
|
export interface AutocompleteStringDecoratorConfig extends StringDecoratorConfig {
|
|
49
59
|
displayStyle: 'autocomplete';
|
|
50
60
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AutocompleteStringDecoratorConfig, DefaultStringDecoratorConfig, DropdownStringDecoratorConfig, TextboxStringDecoratorConfig } from './string-decorator.data';
|
|
2
2
|
/**
|
|
3
|
-
* Decorator for setting and getting string
|
|
3
|
+
* Decorator for setting and getting string Property metadata.
|
|
4
4
|
*
|
|
5
5
|
* @param metadata - The metadata of the string property.
|
|
6
6
|
* @returns The method that defines the metadata.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { cloneDeep, isArray, isEqual, isNil, omit, omitBy } from 'lodash';
|
|
2
|
+
/**
|
|
3
|
+
* Encapsulates all functionality of lodash.
|
|
4
|
+
*/
|
|
5
|
+
export class LodashUtilities {
|
|
6
|
+
/**
|
|
7
|
+
* Performs a deep comparison between two values to determine if they are
|
|
8
|
+
* equivalent.
|
|
9
|
+
*
|
|
10
|
+
* **Note:** This method supports comparing arrays, array buffers, booleans,
|
|
11
|
+
* date objects, error objects, maps, numbers, `Object` objects, regexps,
|
|
12
|
+
* sets, strings, symbols, and typed arrays. `Object` objects are compared
|
|
13
|
+
* by their own, not inherited, enumerable properties. Functions and DOM
|
|
14
|
+
* nodes are **not** supported.
|
|
15
|
+
*
|
|
16
|
+
* @param value - The value to compare.
|
|
17
|
+
* @param other - The other value to compare.
|
|
18
|
+
* @returns Returns `true` if the values are equivalent, else `false`.
|
|
19
|
+
*/
|
|
20
|
+
static isEqual(value, other) {
|
|
21
|
+
return isEqual(value, other);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* This method is like _.clone except that it recursively clones value.
|
|
25
|
+
*
|
|
26
|
+
* @param value - The value to recursively clone.
|
|
27
|
+
* @returns Returns the deep cloned value.
|
|
28
|
+
*/
|
|
29
|
+
static cloneDeep(value) {
|
|
30
|
+
return cloneDeep(value);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* The opposite of `_.pick`; this method creates an object composed of the
|
|
34
|
+
* own and inherited enumerable properties of `object` that are not omitted.
|
|
35
|
+
*
|
|
36
|
+
* @param object - The source object.
|
|
37
|
+
* @param paths - The property names to omit, specified
|
|
38
|
+
* individually or in arrays.
|
|
39
|
+
* @returns Returns the new object.
|
|
40
|
+
*/
|
|
41
|
+
static omit(object, ...paths) {
|
|
42
|
+
return omit(object, ...paths);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Checks if `value` is `null` or `undefined`.
|
|
46
|
+
*
|
|
47
|
+
* @param value - The value to check.
|
|
48
|
+
* @returns Returns `true` if `value` is nullish, else `false`.
|
|
49
|
+
*/
|
|
50
|
+
static isNil(value) {
|
|
51
|
+
return isNil(value);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* The opposite of `_.pickBy`; this method creates an object composed of the
|
|
55
|
+
* own and inherited enumerable properties of `object` that `predicate`
|
|
56
|
+
* doesn't return truthy for.
|
|
57
|
+
*
|
|
58
|
+
* @param object - The source object.
|
|
59
|
+
* @param predicate - The function invoked per property.
|
|
60
|
+
* @returns Returns the new object.
|
|
61
|
+
*/
|
|
62
|
+
static omitBy(object, predicate) {
|
|
63
|
+
return omitBy(object, predicate);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Checks if value is classified as an Array object.
|
|
67
|
+
*
|
|
68
|
+
* @param value - The value to check.
|
|
69
|
+
* @returns Returns true if value is correctly classified, else false.
|
|
70
|
+
*/
|
|
71
|
+
static isArray(value) {
|
|
72
|
+
return isArray(value);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9kYXNoLnV0aWxpdGllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1tYXRlcmlhbC1lbnRpdHkvc3JjL2NhcHN1bGF0aW9uL2xvZGFzaC51dGlsaXRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBUSxJQUFJLEVBQUUsTUFBTSxFQUFvQixNQUFNLFFBQVEsQ0FBQztBQUU5Rzs7R0FFRztBQUNILE1BQU0sT0FBZ0IsZUFBZTtJQUVqQzs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFjLEVBQUUsS0FBYztRQUN6QyxPQUFPLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLFNBQVMsQ0FBSSxLQUFRO1FBQ3hCLE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILE1BQU0sQ0FBQyxJQUFJLENBQXNDLE1BQTRCLEVBQUUsR0FBRyxLQUFnQjtRQUM5RixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQWM7UUFDdkIsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBSSxNQUF3QyxFQUFFLFNBQStCO1FBQ3RGLE9BQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQWU7UUFDMUIsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2xvbmVEZWVwLCBEaWN0aW9uYXJ5LCBpc0FycmF5LCBpc0VxdWFsLCBpc05pbCwgTWFueSwgb21pdCwgb21pdEJ5LCBWYWx1ZUtleUl0ZXJhdGVlIH0gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBFbmNhcHN1bGF0ZXMgYWxsIGZ1bmN0aW9uYWxpdHkgb2YgbG9kYXNoLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTG9kYXNoVXRpbGl0aWVzIHtcblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGEgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmVcbiAgICAgKiBlcXVpdmFsZW50LlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIHN1cHBvcnRzIGNvbXBhcmluZyBhcnJheXMsIGFycmF5IGJ1ZmZlcnMsIGJvb2xlYW5zLFxuICAgICAqIGRhdGUgb2JqZWN0cywgZXJyb3Igb2JqZWN0cywgbWFwcywgbnVtYmVycywgYE9iamVjdGAgb2JqZWN0cywgcmVnZXhwcyxcbiAgICAgKiBzZXRzLCBzdHJpbmdzLCBzeW1ib2xzLCBhbmQgdHlwZWQgYXJyYXlzLiBgT2JqZWN0YCBvYmplY3RzIGFyZSBjb21wYXJlZFxuICAgICAqIGJ5IHRoZWlyIG93biwgbm90IGluaGVyaXRlZCwgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLiBGdW5jdGlvbnMgYW5kIERPTVxuICAgICAqIG5vZGVzIGFyZSAqKm5vdCoqIHN1cHBvcnRlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSBvdGhlciAtIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBzdGF0aWMgaXNFcXVhbCh2YWx1ZTogdW5rbm93biwgb3RoZXI6IHVua25vd24pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGlzRXF1YWwodmFsdWUsIG90aGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIF8uY2xvbmUgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgY2xvbmVzIHZhbHVlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHJlY3Vyc2l2ZWx5IGNsb25lLlxuICAgICAqIEByZXR1cm5zIFJldHVybnMgdGhlIGRlZXAgY2xvbmVkIHZhbHVlLlxuICAgICAqL1xuICAgIHN0YXRpYyBjbG9uZURlZXA8VD4odmFsdWU6IFQpOiBUIHtcbiAgICAgICAgcmV0dXJuIGNsb25lRGVlcCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLnBpY2tgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGVcbiAgICAgKiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXMgb2YgYG9iamVjdGAgdGhhdCBhcmUgbm90IG9taXR0ZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2JqZWN0IC0gVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHBhdGhzIC0gVGhlIHByb3BlcnR5IG5hbWVzIHRvIG9taXQsIHNwZWNpZmllZFxuICAgICAqIGluZGl2aWR1YWxseSBvciBpbiBhcnJheXMuXG4gICAgICogQHJldHVybnMgUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKi9cbiAgICBzdGF0aWMgb21pdDxUIGV4dGVuZHMgb2JqZWN0LCBLIGV4dGVuZHMga2V5b2YgVD4ob2JqZWN0OiBUIHwgbnVsbCB8IHVuZGVmaW5lZCwgLi4ucGF0aHM6IE1hbnk8Sz5bXSk6IE9taXQ8VCwgSz4ge1xuICAgICAgICByZXR1cm4gb21pdChvYmplY3QsIC4uLnBhdGhzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBgbnVsbGAgb3IgYHVuZGVmaW5lZGAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMgUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBudWxsaXNoLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgc3RhdGljIGlzTmlsKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiBpc05pbCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLnBpY2tCeWA7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZVxuICAgICAqIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcyBvZiBgb2JqZWN0YCB0aGF0IGBwcmVkaWNhdGVgXG4gICAgICogZG9lc24ndCByZXR1cm4gdHJ1dGh5IGZvci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3QgLSBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gcHJlZGljYXRlIC0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIHByb3BlcnR5LlxuICAgICAqIEByZXR1cm5zIFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICovXG4gICAgc3RhdGljIG9taXRCeTxUPihvYmplY3Q6IERpY3Rpb25hcnk8VD4gfCBudWxsIHwgdW5kZWZpbmVkLCBwcmVkaWNhdGU/OiBWYWx1ZUtleUl0ZXJhdGVlPFQ+KTogRGljdGlvbmFyeTxUPiB7XG4gICAgICAgIHJldHVybiBvbWl0Qnkob2JqZWN0LCBwcmVkaWNhdGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB2YWx1ZSBpcyBjbGFzc2lmaWVkIGFzIGFuIEFycmF5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgdmFsdWUgaXMgY29ycmVjdGx5IGNsYXNzaWZpZWQsIGVsc2UgZmFsc2UuXG4gICAgICovXG4gICAgc3RhdGljIGlzQXJyYXkodmFsdWU/OiB1bmtub3duKTogdmFsdWUgaXMgdW5rbm93bltdIHtcbiAgICAgICAgcmV0dXJuIGlzQXJyYXkodmFsdWUpO1xuICAgIH1cbn0iXX0=
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Encapsulates all functionality of Reflect.
|
|
3
|
+
*/
|
|
4
|
+
export class ReflectUtilities {
|
|
5
|
+
/**
|
|
6
|
+
* Gets the metadata value for the provided metadata key on the target object or its prototype chain.
|
|
7
|
+
*
|
|
8
|
+
* @param metadataKey - A key used to store and retrieve metadata.
|
|
9
|
+
* @param target - The target object on which the metadata is defined.
|
|
10
|
+
* @param propertyKey - The property key for the target.
|
|
11
|
+
* @returns The metadata value for the metadata key if found; otherwise, undefined.
|
|
12
|
+
*/
|
|
13
|
+
static getMetadata(metadataKey, target, propertyKey) {
|
|
14
|
+
return Reflect.getMetadata(metadataKey, target, propertyKey);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Returns the string and symbol keys of the own properties of an object. The own properties of an object
|
|
18
|
+
* are those that are defined directly on that object, and are not inherited from the object's prototype.
|
|
19
|
+
*
|
|
20
|
+
* @param target - Object that contains the own properties.
|
|
21
|
+
* @returns The keys of the given object.
|
|
22
|
+
*/
|
|
23
|
+
static ownKeys(target) {
|
|
24
|
+
return Reflect.ownKeys(target);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Gets the property of target, equivalent to `target[propertyKey]`.
|
|
28
|
+
*
|
|
29
|
+
* @param target - Object that contains the property on itself or in its prototype chain.
|
|
30
|
+
* @param propertyKey - The property name.
|
|
31
|
+
* @returns The property of the target of the given key.
|
|
32
|
+
*/
|
|
33
|
+
static get(target, propertyKey) {
|
|
34
|
+
return Reflect.get(target, propertyKey);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Sets the property of target, equivalent to `target[propertyKey] = value`.
|
|
38
|
+
*
|
|
39
|
+
* @param target - Object that contains the property on itself or in its prototype chain.
|
|
40
|
+
* @param propertyKey - The property name.
|
|
41
|
+
* @param value - The value to set the property to.
|
|
42
|
+
* @returns If setting the value was successful.
|
|
43
|
+
*/
|
|
44
|
+
static set(target, propertyKey, value) {
|
|
45
|
+
return Reflect.set(target, propertyKey, value);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Equivalent to `propertyKey in target`.
|
|
49
|
+
*
|
|
50
|
+
* @param target - Object that contains the property on itself or in its prototype chain.
|
|
51
|
+
* @param propertyKey - Name of the property.
|
|
52
|
+
* @returns Whether or not the given target has the key.
|
|
53
|
+
*/
|
|
54
|
+
static has(target, propertyKey) {
|
|
55
|
+
return Reflect.has(target, propertyKey);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Define a unique metadata entry on the target.
|
|
59
|
+
*
|
|
60
|
+
* @param metadataKey - A key used to store and retrieve metadata.
|
|
61
|
+
* @param metadataValue - A value that contains attached metadata.
|
|
62
|
+
* @param target - The target object on which to define metadata.
|
|
63
|
+
* @param propertyKey - The property key for the target.
|
|
64
|
+
*/
|
|
65
|
+
static defineMetadata(metadataKey, metadataValue, target, propertyKey) {
|
|
66
|
+
Reflect.defineMetadata(metadataKey, metadataValue, target, propertyKey);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmbGVjdC51dGlsaXRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jYXBzdWxhdGlvbi9yZWZsZWN0LnV0aWxpdGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTs7R0FFRztBQUNILE1BQU0sT0FBZ0IsZ0JBQWdCO0lBQ2xDOzs7Ozs7O09BT0c7SUFDSCxNQUFNLENBQUMsV0FBVyxDQUFtQixXQUFtQixFQUFFLE1BQVMsRUFBRSxXQUFvQjtRQUNyRixPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxXQUFxQixDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxPQUFPLENBQW1CLE1BQVM7UUFDdEMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBZ0IsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLEdBQUcsQ0FBbUIsTUFBUyxFQUFFLFdBQW9CO1FBQ3hELE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxNQUFNLENBQUMsR0FBRyxDQUFtQixNQUFTLEVBQUUsV0FBb0IsRUFBRSxLQUFjO1FBQ3hFLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsR0FBRyxDQUFtQixNQUFTLEVBQUUsV0FBb0I7UUFDeEQsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQ2pCLFdBQW9CLEVBQ3BCLGFBQXNCLEVBQ3RCLE1BQVMsRUFDVCxXQUFtQjtRQUVuQixPQUFPLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzVFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBFbmNhcHN1bGF0ZXMgYWxsIGZ1bmN0aW9uYWxpdHkgb2YgUmVmbGVjdC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJlZmxlY3RVdGlsaXRpZXMge1xuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG1ldGFkYXRhIHZhbHVlIGZvciB0aGUgcHJvdmlkZWQgbWV0YWRhdGEga2V5IG9uIHRoZSB0YXJnZXQgb2JqZWN0IG9yIGl0cyBwcm90b3R5cGUgY2hhaW4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWV0YWRhdGFLZXkgLSBBIGtleSB1c2VkIHRvIHN0b3JlIGFuZCByZXRyaWV2ZSBtZXRhZGF0YS5cbiAgICAgKiBAcGFyYW0gdGFyZ2V0IC0gVGhlIHRhcmdldCBvYmplY3Qgb24gd2hpY2ggdGhlIG1ldGFkYXRhIGlzIGRlZmluZWQuXG4gICAgICogQHBhcmFtIHByb3BlcnR5S2V5IC0gVGhlIHByb3BlcnR5IGtleSBmb3IgdGhlIHRhcmdldC5cbiAgICAgKiBAcmV0dXJucyBUaGUgbWV0YWRhdGEgdmFsdWUgZm9yIHRoZSBtZXRhZGF0YSBrZXkgaWYgZm91bmQ7IG90aGVyd2lzZSwgdW5kZWZpbmVkLlxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRNZXRhZGF0YTxUIGV4dGVuZHMgb2JqZWN0PihtZXRhZGF0YUtleTogc3RyaW5nLCB0YXJnZXQ6IFQsIHByb3BlcnR5S2V5OiBrZXlvZiBUKTogdW5rbm93biB7XG4gICAgICAgIHJldHVybiBSZWZsZWN0LmdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQsIHByb3BlcnR5S2V5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc3RyaW5nIGFuZCBzeW1ib2wga2V5cyBvZiB0aGUgb3duIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0LiBUaGUgb3duIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0XG4gICAgICogYXJlIHRob3NlIHRoYXQgYXJlIGRlZmluZWQgZGlyZWN0bHkgb24gdGhhdCBvYmplY3QsIGFuZCBhcmUgbm90IGluaGVyaXRlZCBmcm9tIHRoZSBvYmplY3QncyBwcm90b3R5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFyZ2V0IC0gT2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIG93biBwcm9wZXJ0aWVzLlxuICAgICAqIEByZXR1cm5zIFRoZSBrZXlzIG9mIHRoZSBnaXZlbiBvYmplY3QuXG4gICAgICovXG4gICAgc3RhdGljIG93bktleXM8VCBleHRlbmRzIG9iamVjdD4odGFyZ2V0OiBUKTogKGtleW9mIFQpW10ge1xuICAgICAgICByZXR1cm4gUmVmbGVjdC5vd25LZXlzKHRhcmdldCkgYXMgKGtleW9mIFQpW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcHJvcGVydHkgb2YgdGFyZ2V0LCBlcXVpdmFsZW50IHRvIGB0YXJnZXRbcHJvcGVydHlLZXldYC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YXJnZXQgLSBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgcHJvcGVydHkgb24gaXRzZWxmIG9yIGluIGl0cyBwcm90b3R5cGUgY2hhaW4uXG4gICAgICogQHBhcmFtIHByb3BlcnR5S2V5IC0gVGhlIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHJldHVybnMgVGhlIHByb3BlcnR5IG9mIHRoZSB0YXJnZXQgb2YgdGhlIGdpdmVuIGtleS5cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0PFQgZXh0ZW5kcyBvYmplY3Q+KHRhcmdldDogVCwgcHJvcGVydHlLZXk6IGtleW9mIFQpOiB1bmtub3duIHtcbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHByb3BlcnR5IG9mIHRhcmdldCwgZXF1aXZhbGVudCB0byBgdGFyZ2V0W3Byb3BlcnR5S2V5XSA9IHZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YXJnZXQgLSBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgcHJvcGVydHkgb24gaXRzZWxmIG9yIGluIGl0cyBwcm90b3R5cGUgY2hhaW4uXG4gICAgICogQHBhcmFtIHByb3BlcnR5S2V5IC0gVGhlIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHNldCB0aGUgcHJvcGVydHkgdG8uXG4gICAgICogQHJldHVybnMgSWYgc2V0dGluZyB0aGUgdmFsdWUgd2FzIHN1Y2Nlc3NmdWwuXG4gICAgICovXG4gICAgc3RhdGljIHNldDxUIGV4dGVuZHMgb2JqZWN0Pih0YXJnZXQ6IFQsIHByb3BlcnR5S2V5OiBrZXlvZiBULCB2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gUmVmbGVjdC5zZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSwgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVxdWl2YWxlbnQgdG8gYHByb3BlcnR5S2V5IGluIHRhcmdldGAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFyZ2V0IC0gT2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIHByb3BlcnR5IG9uIGl0c2VsZiBvciBpbiBpdHMgcHJvdG90eXBlIGNoYWluLlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eUtleSAtIE5hbWUgb2YgdGhlIHByb3BlcnR5LlxuICAgICAqIEByZXR1cm5zIFdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiB0YXJnZXQgaGFzIHRoZSBrZXkuXG4gICAgICovXG4gICAgc3RhdGljIGhhczxUIGV4dGVuZHMgb2JqZWN0Pih0YXJnZXQ6IFQsIHByb3BlcnR5S2V5OiBrZXlvZiBUKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBSZWZsZWN0Lmhhcyh0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmUgYSB1bmlxdWUgbWV0YWRhdGEgZW50cnkgb24gdGhlIHRhcmdldC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBtZXRhZGF0YUtleSAtIEEga2V5IHVzZWQgdG8gc3RvcmUgYW5kIHJldHJpZXZlIG1ldGFkYXRhLlxuICAgICAqIEBwYXJhbSBtZXRhZGF0YVZhbHVlIC0gQSB2YWx1ZSB0aGF0IGNvbnRhaW5zIGF0dGFjaGVkIG1ldGFkYXRhLlxuICAgICAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgdGFyZ2V0IG9iamVjdCBvbiB3aGljaCB0byBkZWZpbmUgbWV0YWRhdGEuXG4gICAgICogQHBhcmFtIHByb3BlcnR5S2V5IC0gVGhlIHByb3BlcnR5IGtleSBmb3IgdGhlIHRhcmdldC5cbiAgICAgKi9cbiAgICBzdGF0aWMgZGVmaW5lTWV0YWRhdGE8VCBleHRlbmRzIG9iamVjdD4oXG4gICAgICAgIG1ldGFkYXRhS2V5OiB1bmtub3duLFxuICAgICAgICBtZXRhZGF0YVZhbHVlOiB1bmtub3duLFxuICAgICAgICB0YXJnZXQ6IFQsXG4gICAgICAgIHByb3BlcnR5S2V5OiBzdHJpbmdcbiAgICApOiB2b2lkIHtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgfVxufSJdfQ==
|
|
@@ -0,0 +1,42 @@
|
|
|
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
|
+
* Sets the value for the given key if no user value was provided.
|
|
22
|
+
*
|
|
23
|
+
* @param key - The key to set the default value for.
|
|
24
|
+
* @param value - The value to set when nothing was provided.
|
|
25
|
+
* @returns The Builder.
|
|
26
|
+
*/
|
|
27
|
+
withDefault(key, value) {
|
|
28
|
+
if (this.inputData == null || this.inputData[key] == null) {
|
|
29
|
+
this.data[key] = value;
|
|
30
|
+
}
|
|
31
|
+
return this;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Method used to get the final build value after applying all chaining.
|
|
35
|
+
*
|
|
36
|
+
* @returns The build value.
|
|
37
|
+
*/
|
|
38
|
+
getResult() {
|
|
39
|
+
return this.data;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvY2xhc3Nlcy9iYXNlLmJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLFdBQVc7SUFLN0IsWUFBc0IsSUFBZ0I7UUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBVUQ7Ozs7T0FJRztJQUNILDZEQUE2RDtJQUNuRCxhQUFhLENBQUMsSUFBZ0I7UUFDcEMsb0NBQW9DO0lBQ3hDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxXQUFXLENBQUMsR0FBb0IsRUFBRSxLQUF1RDtRQUNyRixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFO1lBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBc0MsQ0FBQztTQUMzRDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsU0FBUztRQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNyQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlRW50aXR5VHlwZSB9IGZyb20gJy4vZW50aXR5Lm1vZGVsJztcblxuLyoqXG4gKiBUaGUgYWJzdHJhY3QgQmFzZUJ1aWxkZXIgY2xhc3MuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlQnVpbGRlcjxJbnRlcm5hbFR5cGUgZXh0ZW5kcyBJbnB1dFR5cGUsIElucHV0VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPElucHV0VHlwZT4+IHtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0YTogSW50ZXJuYWxUeXBlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5wdXREYXRhPzogSW5wdXRUeXBlO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGRhdGE/OiBJbnB1dFR5cGUpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUlucHV0KGRhdGEpO1xuICAgICAgICB0aGlzLmlucHV0RGF0YSA9IGRhdGE7XG4gICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZ2VuZXJhdGVCYXNlRGF0YShkYXRhKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIHRoZSBpbnRlcm5hbCBkYXRhIGZyb20gdGhlIGdpdmVuIHVzZXIgaW5wdXRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGEgLSBUaGUgaW5wdXQgZnJvbSB0aGUgdXNlci5cbiAgICAgKiBAcmV0dXJucyBUaGUgaW50ZXJuYWwgZGF0YS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2VuZXJhdGVCYXNlRGF0YShkYXRhPzogSW5wdXRUeXBlKTogSW50ZXJuYWxUeXBlO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byB2YWxpZGF0ZSB0aGUgdXNlciBpbnB1dCBpbiB0aGUgY29uc3RydWN0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YSAtIFRoZSB1c2VyIGlucHV0LlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGVJbnB1dChkYXRhPzogSW5wdXRUeXBlKTogdm9pZCB7XG4gICAgICAgIC8vIEJ5IGRlZmF1bHQsIG5vIHZhbGlkYXRpb24gaXMgZG9uZVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHZhbHVlIGZvciB0aGUgZ2l2ZW4ga2V5IGlmIG5vIHVzZXIgdmFsdWUgd2FzIHByb3ZpZGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgdG8gc2V0IHRoZSBkZWZhdWx0IHZhbHVlIGZvci5cbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0IHdoZW4gbm90aGluZyB3YXMgcHJvdmlkZWQuXG4gICAgICogQHJldHVybnMgVGhlIEJ1aWxkZXIuXG4gICAgICovXG4gICAgd2l0aERlZmF1bHQoa2V5OiBrZXlvZiBJbnB1dFR5cGUsIHZhbHVlOiBPbWl0PEludGVybmFsVHlwZVtrZXlvZiBJbnB1dFR5cGVdLCAndW5kZWZpbmVkJz4pOiBCYXNlQnVpbGRlcjxJbnRlcm5hbFR5cGUsIElucHV0VHlwZT4ge1xuICAgICAgICBpZiAodGhpcy5pbnB1dERhdGEgPT0gbnVsbCB8fCB0aGlzLmlucHV0RGF0YVtrZXldID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtrZXldID0gdmFsdWUgYXMgSW50ZXJuYWxUeXBlW2tleW9mIElucHV0VHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHVzZWQgdG8gZ2V0IHRoZSBmaW5hbCBidWlsZCB2YWx1ZSBhZnRlciBhcHBseWluZyBhbGwgY2hhaW5pbmcuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgYnVpbGQgdmFsdWUuXG4gICAgICovXG4gICAgZ2V0UmVzdWx0KCk6IEludGVybmFsVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGE7XG4gICAgfVxufSJdfQ==
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { LodashUtilities } from '../capsulation/lodash.utilities';
|
|
2
|
+
const DAY_IN_MS = 1000 * 60 * 60 * 24;
|
|
3
|
+
/**
|
|
4
|
+
* Contains Helper Functions for handling date properties.
|
|
5
|
+
*/
|
|
6
|
+
export class DateUtilities {
|
|
7
|
+
/**
|
|
8
|
+
* Gets the given value as a date value.
|
|
9
|
+
*
|
|
10
|
+
* @param value - The value to get as a date.
|
|
11
|
+
* @returns The given value as a date.
|
|
12
|
+
*/
|
|
13
|
+
static asDate(value) {
|
|
14
|
+
return value;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Gets the default times used by the DateTime picker when nothing is specified by the user.
|
|
18
|
+
*
|
|
19
|
+
* @param format - The time format. Defaults to 24.
|
|
20
|
+
* @param minuteSteps - The steps from one time value to the next. Defaults to 30.
|
|
21
|
+
* @returns Times in the 24 hour format from 0:00 until 23:30 in 30 minute steps.
|
|
22
|
+
*/
|
|
23
|
+
static getDefaultTimes(format = 24, minuteSteps = 30) {
|
|
24
|
+
const res = [{ displayName: '-', value: undefined }];
|
|
25
|
+
for (let hour = 0; hour < 24; hour++) {
|
|
26
|
+
for (let minute = 0; minute < 60; minute += minuteSteps) {
|
|
27
|
+
res.push(DateUtilities.getTimeDropdownValue(format, hour, minute));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return res;
|
|
31
|
+
}
|
|
32
|
+
static getTimeDropdownValue(format, hour, minute) {
|
|
33
|
+
const displayHour = DateUtilities.getFormattedHour(format, LodashUtilities.cloneDeep(hour));
|
|
34
|
+
const displayMinute = DateUtilities.getFormattedMinute(format, hour, minute);
|
|
35
|
+
return {
|
|
36
|
+
displayName: `${displayHour}:${displayMinute}`,
|
|
37
|
+
value: {
|
|
38
|
+
hours: hour,
|
|
39
|
+
minutes: minute
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
static getFormattedHour(format, hour) {
|
|
44
|
+
if (format === 12 && hour > 12) {
|
|
45
|
+
hour -= 12;
|
|
46
|
+
}
|
|
47
|
+
return hour;
|
|
48
|
+
}
|
|
49
|
+
static getFormattedMinute(format, hour, minute) {
|
|
50
|
+
let res = `${minute}`;
|
|
51
|
+
if (format === 12) {
|
|
52
|
+
if (hour > 12) {
|
|
53
|
+
res = `${minute} PM`;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
res = `${minute} AM`;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (minute.toString().length === 1) {
|
|
60
|
+
res = '0'.concat(res);
|
|
61
|
+
}
|
|
62
|
+
return res;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Gets the Time object from the given date.
|
|
66
|
+
*
|
|
67
|
+
* @param value - The date to get the time object from.
|
|
68
|
+
* @returns The Time object build from the date value.
|
|
69
|
+
*/
|
|
70
|
+
static getTimeFromDate(value) {
|
|
71
|
+
if (!value) {
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
return {
|
|
76
|
+
hours: new Date(value).getHours(),
|
|
77
|
+
minutes: new Date(value).getMinutes()
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Gets the dates between the two given gates. Does additional filtering based on the provided DateRange metadata.
|
|
83
|
+
*
|
|
84
|
+
* @param startDate - The start date.
|
|
85
|
+
* @param endDate - The end date.
|
|
86
|
+
* @param filter - The custom filter from the metadata.
|
|
87
|
+
* @returns All dates between the two provided dates. Includes start and end date.
|
|
88
|
+
*/
|
|
89
|
+
static getDatesBetween(startDate, endDate, filter) {
|
|
90
|
+
const res = [];
|
|
91
|
+
while (startDate.getFullYear() < endDate.getFullYear()
|
|
92
|
+
|| startDate.getMonth() < endDate.getMonth()
|
|
93
|
+
|| startDate.getDate() <= endDate.getDate()) {
|
|
94
|
+
res.push(new Date(startDate));
|
|
95
|
+
startDate.setTime(startDate.getTime() + DAY_IN_MS);
|
|
96
|
+
}
|
|
97
|
+
if (filter) {
|
|
98
|
+
return res.filter(d => filter(d));
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
return res;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get all valid times for the dropdown of a datetime property.
|
|
106
|
+
*
|
|
107
|
+
* @param date - The date of the datetime.
|
|
108
|
+
* @param times - All given times to filter.
|
|
109
|
+
* @param min - The function that defines the minimum time.
|
|
110
|
+
* @param max - The function that defines the maximum time.
|
|
111
|
+
* @param filter - A filter function to do more specific time filtering. This could be e.g. The removal of lunch breaks.
|
|
112
|
+
* @returns All valid dropdown values for the datetime property.
|
|
113
|
+
*/
|
|
114
|
+
static getValidTimesForDropdown(date, times, min, max, filter) {
|
|
115
|
+
if (min) {
|
|
116
|
+
const minTime = min(date);
|
|
117
|
+
times = times.filter(t => !t.value
|
|
118
|
+
|| t.value.hours > minTime.hours
|
|
119
|
+
|| (t.value.hours === minTime.hours
|
|
120
|
+
&& t.value.minutes >= minTime.minutes));
|
|
121
|
+
}
|
|
122
|
+
if (max) {
|
|
123
|
+
const maxTime = max(date);
|
|
124
|
+
times = times.filter(t => !t.value
|
|
125
|
+
|| t.value.hours < maxTime.hours
|
|
126
|
+
|| (t.value.hours === maxTime.hours
|
|
127
|
+
&& t.value.minutes <= maxTime.minutes));
|
|
128
|
+
}
|
|
129
|
+
if (filter) {
|
|
130
|
+
times = times.filter(t => !t.value || filter(t.value));
|
|
131
|
+
}
|
|
132
|
+
return times;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Checks if the time object has processable hours and minutes properties.
|
|
136
|
+
* Doesn't check custom validators like min/max from the metadata configuration.
|
|
137
|
+
*
|
|
138
|
+
* @param time - The time to check.
|
|
139
|
+
* @returns Whether or not the time object is unprocessable.
|
|
140
|
+
*/
|
|
141
|
+
static timeIsUnprocessable(time) {
|
|
142
|
+
if (!time
|
|
143
|
+
|| time.hours == null
|
|
144
|
+
|| typeof time.hours !== 'number'
|
|
145
|
+
|| Number.isNaN(time.hours)
|
|
146
|
+
|| time.minutes == null
|
|
147
|
+
|| typeof time.minutes !== 'number'
|
|
148
|
+
|| Number.isNaN(time.minutes)) {
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* The default filter function to user when none was provided by the user.
|
|
156
|
+
*/
|
|
157
|
+
DateUtilities.defaultDateFilter = () => true;
|
|
158
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS51dGlsaXRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jbGFzc2VzL2RhdGUudXRpbGl0aWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUdsRSxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFPdEM7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLGFBQWE7SUFPL0I7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQWM7UUFDeEIsT0FBTyxLQUFhLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxlQUFlLENBQUMsU0FBa0IsRUFBRSxFQUFFLGNBQTJCLEVBQUU7UUFDdEUsTUFBTSxHQUFHLEdBQTBCLENBQUMsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUE0QixFQUFDLENBQUMsQ0FBQztRQUM5RixLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ2xDLEtBQUssSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUFFLEVBQUUsTUFBTSxJQUFJLFdBQVcsRUFBRTtnQkFDckQsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO2FBQ3RFO1NBQ0o7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFTyxNQUFNLENBQUMsb0JBQW9CLENBQUMsTUFBZSxFQUFFLElBQVksRUFBRSxNQUFjO1FBQzdFLE1BQU0sV0FBVyxHQUFXLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxN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QUssQ0FBQztlQUN4QixJQUFJLENBQUMsT0FBTyxJQUFJLElBQUk7ZUFDcEIsT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFFBQVE7ZUFDaEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQy9CO1lBQ0UsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7O0FBckxEOztHQUVHO0FBQ0ksK0JBQWlCLEdBQTBDLEdBQVksRUFBRSxDQUFDLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRpbWUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRGF0ZUZpbHRlckZuIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBMb2Rhc2hVdGlsaXRpZXMgfSBmcm9tICcuLi9jYXBzdWxhdGlvbi9sb2Rhc2gudXRpbGl0aWVzJztcbmltcG9ydCB7IERyb3Bkb3duVmFsdWUgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2Jhc2UvZHJvcGRvd24tdmFsdWUuaW50ZXJmYWNlJztcblxuY29uc3QgREFZX0lOX01TID0gMTAwMCAqIDYwICogNjAgKiAyNDtcblxuLyoqXG4gKiBWYWxpZCBzdGVwcyBmcm9tIG9uZSB0aW1lIHZhbHVlIHRvIHRoZSBuZXh0LiBOZWVkcyB0byBiZSBhYmxlIHRvIGRpdmlkZSA2MCBtaW51dGVzIHdpdGhvdXQgcmVtYWluZGVyLlxuICovXG50eXBlIE1pbnV0ZVN0ZXBzID0gMSB8IDIgfCAzIHwgNCB8IDUgfCA2IHwgMTAgfCAxMiB8IDE1IHwgMjAgfCAzMCB8IDYwO1xuXG4vKipcbiAqIENvbnRhaW5zIEhlbHBlciBGdW5jdGlvbnMgZm9yIGhhbmRsaW5nIGRhdGUgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERhdGVVdGlsaXRpZXMge1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgZmlsdGVyIGZ1bmN0aW9uIHRvIHVzZXIgd2hlbiBub25lIHdhcyBwcm92aWRlZCBieSB0aGUgdXNlci5cbiAgICAgKi9cbiAgICBzdGF0aWMgZGVmYXVsdERhdGVGaWx0ZXI6IERhdGVGaWx0ZXJGbjxEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZD4gPSAoKTogYm9vbGVhbiA9PiB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZ2l2ZW4gdmFsdWUgYXMgYSBkYXRlIHZhbHVlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGdldCBhcyBhIGRhdGUuXG4gICAgICogQHJldHVybnMgVGhlIGdpdmVuIHZhbHVlIGFzIGEgZGF0ZS5cbiAgICAgKi9cbiAgICBzdGF0aWMgYXNEYXRlKHZhbHVlOiB1bmtub3duKTogRGF0ZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSBhcyBEYXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdGltZXMgdXNlZCBieSB0aGUgRGF0ZVRpbWUgcGlja2VyIHdoZW4gbm90aGluZyBpcyBzcGVjaWZpZWQgYnkgdGhlIHVzZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZm9ybWF0IC0gVGhlIHRpbWUgZm9ybWF0LiBEZWZhdWx0cyB0byAyNC5cbiAgICAgKiBAcGFyYW0gbWludXRlU3RlcHMgLSBUaGUgc3RlcHMgZnJvbSBvbmUgdGltZSB2YWx1ZSB0byB0aGUgbmV4dC4gRGVmYXVsdHMgdG8gMzAuXG4gICAgICogQHJldHVybnMgVGltZXMgaW4gdGhlIDI0IGhvdXIgZm9ybWF0IGZyb20gMDowMCB1bnRpbCAyMzozMCBpbiAzMCBtaW51dGUgc3RlcHMuXG4gICAgICovXG4gICAgc3RhdGljIGdldERlZmF1bHRUaW1lcyhmb3JtYXQ6IDEyIHwgMjQgPSAyNCwgbWludXRlU3RlcHM6IE1pbnV0ZVN0ZXBzID0gMzApOiBEcm9wZG93blZhbHVlPFRpbWU+W10ge1xuICAgICAgICBjb25zdCByZXM6IERyb3Bkb3duVmFsdWU8VGltZT5bXSA9IFt7IGRpc3BsYXlOYW1lOiAnLScsIHZhbHVlOiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBUaW1lfV07XG4gICAgICAgIGZvciAobGV0IGhvdXIgPSAwOyBob3VyIDwgMjQ7IGhvdXIrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgbWludXRlID0gMDsgbWludXRlIDwgNjA7IG1pbnV0ZSArPSBtaW51dGVTdGVwcykge1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKERhdGVVdGlsaXRpZXMuZ2V0VGltZURyb3Bkb3duVmFsdWUoZm9ybWF0LCBob3VyLCBtaW51dGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldFRpbWVEcm9wZG93blZhbHVlKGZvcm1hdDogMTIgfCAyNCwgaG91cjogbnVtYmVyLCBtaW51dGU6IG51bWJlcik6IERyb3Bkb3duVmFsdWU8VGltZT4ge1xuICAgICAgICBjb25zdCBkaXNwbGF5SG91cjogbnVtYmVyID0gRGF0ZVV0aWxpdGllcy5nZXRGb3JtYXR0ZWRIb3VyKGZvcm1hdCwgTG9kYXNoVXRpbGl0aWVzLmNsb25lRGVlcChob3VyKSk7XG4gICAgICAgIGNvbnN0IGRpc3BsYXlNaW51dGU6IHN0cmluZyA9IERhdGVVdGlsaXRpZXMuZ2V0Rm9ybWF0dGVkTWludXRlKGZvcm1hdCwgaG91ciwgbWludXRlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBgJHtkaXNwbGF5SG91cn06JHtkaXNwbGF5TWludXRlfWAsXG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIGhvdXJzOiBob3VyLFxuICAgICAgICAgICAgICAgIG1pbnV0ZXM6IG1pbnV0ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldEZvcm1hdHRlZEhvdXIoZm9ybWF0OiAxMiB8IDI0LCBob3VyOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBpZiAoZm9ybWF0ID09PSAxMiAmJiBob3VyID4gMTIpIHtcbiAgICAgICAgICAgIGhvdXIgLT0gMTI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Rm9ybWF0dGVkTWludXRlKGZvcm1hdDogMTIgfCAyNCwgaG91cjogbnVtYmVyLCBtaW51dGU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGxldCByZXMgPSBgJHttaW51dGV9YDtcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gMTIpIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpIHtcbiAgICAgICAgICAgICAgICByZXMgPSBgJHttaW51dGV9IFBNYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlcyA9IGAke21pbnV0ZX0gQU1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtaW51dGUudG9TdHJpbmcoKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJlcyA9ICcwJy5jb25jYXQocmVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIFRpbWUgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgZGF0ZSB0byBnZXQgdGhlIHRpbWUgb2JqZWN0IGZyb20uXG4gICAgICogQHJldHVybnMgVGhlIFRpbWUgb2JqZWN0IGJ1aWxkIGZyb20gdGhlIGRhdGUgdmFsdWUuXG4gICAgICovXG4gICAgc3RhdGljIGdldFRpbWVGcm9tRGF0ZSh2YWx1ZTogRGF0ZSk6IFRpbWUgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoISh2YWx1ZSBhcyBEYXRlIHwgdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaG91cnM6IG5ldyBEYXRlKHZhbHVlKS5nZXRIb3VycygpLFxuICAgICAgICAgICAgICAgIG1pbnV0ZXM6IG5ldyBEYXRlKHZhbHVlKS5nZXRNaW51dGVzKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBkYXRlcyBiZXR3ZWVuIHRoZSB0d28gZ2l2ZW4gZ2F0ZXMuIERvZXMgYWRkaXRpb25hbCBmaWx0ZXJpbmcgYmFzZWQgb24gdGhlIHByb3ZpZGVkIERhdGVSYW5nZSBtZXRhZGF0YS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdGFydERhdGUgLSBUaGUgc3RhcnQgZGF0ZS5cbiAgICAgKiBAcGFyYW0gZW5kRGF0ZSAtIFRoZSBlbmQgZGF0ZS5cbiAgICAgKiBAcGFyYW0gZmlsdGVyIC0gVGhlIGN1c3RvbSBmaWx0ZXIgZnJvbSB0aGUgbWV0YWRhdGEuXG4gICAgICogQHJldHVybnMgQWxsIGRhdGVzIGJldHdlZW4gdGhlIHR3byBwcm92aWRlZCBkYXRlcy4gSW5jbHVkZXMgc3RhcnQgYW5kIGVuZCBkYXRlLlxuICAgICAqL1xuICAgIHN0YXRpYyBnZXREYXRlc0JldHdlZW4oXG4gICAgICAgIHN0YXJ0RGF0ZTogRGF0ZSxcbiAgICAgICAgZW5kRGF0ZTogRGF0ZSxcbiAgICAgICAgZmlsdGVyPzogRGF0ZUZpbHRlckZuPERhdGU+XG4gICAgKTogRGF0ZVtdIHtcbiAgICAgICAgY29uc3QgcmVzOiBEYXRlW10gPSBbXTtcbiAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICAgc3RhcnREYXRlLmdldEZ1bGxZZWFyKCkgPCBlbmREYXRlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgICAgIHx8IHN0YXJ0RGF0ZS5nZXRNb250aCgpIDwgZW5kRGF0ZS5nZXRNb250aCgpXG4gICAgICAgICAgICB8fCBzdGFydERhdGUuZ2V0RGF0ZSgpIDw9IGVuZERhdGUuZ2V0RGF0ZSgpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmVzLnB1c2gobmV3IERhdGUoc3RhcnREYXRlKSk7XG4gICAgICAgICAgICBzdGFydERhdGUuc2V0VGltZShzdGFydERhdGUuZ2V0VGltZSgpICsgREFZX0lOX01TKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzLmZpbHRlcihkID0+IGZpbHRlcihkKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGFsbCB2YWxpZCB0aW1lcyBmb3IgdGhlIGRyb3Bkb3duIG9mIGEgZGF0ZXRpbWUgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIG9mIHRoZSBkYXRldGltZS5cbiAgICAgKiBAcGFyYW0gdGltZXMgLSBBbGwgZ2l2ZW4gdGltZXMgdG8gZmlsdGVyLlxuICAgICAqIEBwYXJhbSBtaW4gLSBUaGUgZnVuY3Rpb24gdGhhdCBkZWZpbmVzIHRoZSBtaW5pbXVtIHRpbWUuXG4gICAgICogQHBhcmFtIG1heCAtIFRoZSBmdW5jdGlvbiB0aGF0IGRlZmluZXMgdGhlIG1heGltdW0gdGltZS5cbiAgICAgKiBAcGFyYW0gZmlsdGVyIC0gQSBmaWx0ZXIgZnVuY3Rpb24gdG8gZG8gbW9yZSBzcGVjaWZpYyB0aW1lIGZpbHRlcmluZy4gVGhpcyBjb3VsZCBiZSBlLmcuIFRoZSByZW1vdmFsIG9mIGx1bmNoIGJyZWFrcy5cbiAgICAgKiBAcmV0dXJucyBBbGwgdmFsaWQgZHJvcGRvd24gdmFsdWVzIGZvciB0aGUgZGF0ZXRpbWUgcHJvcGVydHkuXG4gICAgICovXG4gICAgc3RhdGljIGdldFZhbGlkVGltZXNGb3JEcm9wZG93bihcbiAgICAgICAgZGF0ZTogRGF0ZSxcbiAgICAgICAgdGltZXM6IERyb3Bkb3duVmFsdWU8VGltZT5bXSxcbiAgICAgICAgbWluPzogKGRhdGU/OiBEYXRlKSA9PiBUaW1lLFxuICAgICAgICBtYXg/OiAoZGF0ZT86IERhdGUpID0+IFRpbWUsXG4gICAgICAgIGZpbHRlcj86ICgodGltZTogVGltZSkgPT4gYm9vbGVhbikgfCAoKCkgPT4gYm9vbGVhbilcbiAgICApOiBEcm9wZG93blZhbHVlPFRpbWU+W10ge1xuICAgICAgICBpZiAobWluKSB7XG4gICAgICAgICAgICBjb25zdCBtaW5UaW1lOiBUaW1lID0gbWluKGRhdGUpO1xuICAgICAgICAgICAgdGltZXMgPSB0aW1lcy5maWx0ZXIodCA9PlxuICAgICAgICAgICAgICAgICEodC52YWx1ZSBhcyBUaW1lIHwgdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHx8IHQudmFsdWUuaG91cnMgPiBtaW5UaW1lLmhvdXJzXG4gICAgICAgICAgICAgICAgfHwgKFxuICAgICAgICAgICAgICAgICAgICB0LnZhbHVlLmhvdXJzID09PSBtaW5UaW1lLmhvdXJzXG4gICAgICAgICAgICAgICAgICAgICYmIHQudmFsdWUubWludXRlcyA+PSBtaW5UaW1lLm1pbnV0ZXNcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXgpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heFRpbWU6IFRpbWUgPSBtYXgoZGF0ZSk7XG4gICAgICAgICAgICB0aW1lcyA9IHRpbWVzLmZpbHRlcih0ID0+XG4gICAgICAgICAgICAgICAgISh0LnZhbHVlIGFzIFRpbWUgfCB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgfHwgdC52YWx1ZS5ob3VycyA8IG1heFRpbWUuaG91cnNcbiAgICAgICAgICAgICAgICB8fCAoXG4gICAgICAgICAgICAgICAgICAgIHQudmFsdWUuaG91cnMgPT09IG1heFRpbWUuaG91cnNcbiAgICAgICAgICAgICAgICAgICAgJiYgdC52YWx1ZS5taW51dGVzIDw9IG1heFRpbWUubWludXRlc1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcikge1xuICAgICAgICAgICAgdGltZXMgPSB0aW1lcy5maWx0ZXIodCA9PiAhKHQudmFsdWUgYXMgVGltZSB8IHVuZGVmaW5lZCkgfHwgZmlsdGVyKHQudmFsdWUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aW1lcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdGhlIHRpbWUgb2JqZWN0IGhhcyBwcm9jZXNzYWJsZSBob3VycyBhbmQgbWludXRlcyBwcm9wZXJ0aWVzLlxuICAgICAqIERvZXNuJ3QgY2hlY2sgY3VzdG9tIHZhbGlkYXRvcnMgbGlrZSBtaW4vbWF4IGZyb20gdGhlIG1ldGFkYXRhIGNvbmZpZ3VyYXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGltZSAtIFRoZSB0aW1lIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIFdoZXRoZXIgb3Igbm90IHRoZSB0aW1lIG9iamVjdCBpcyB1bnByb2Nlc3NhYmxlLlxuICAgICAqL1xuICAgIHN0YXRpYyB0aW1lSXNVbnByb2Nlc3NhYmxlKHRpbWU/OiBUaW1lKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aW1lXG4gICAgICAgICAgICB8fCB0aW1lLmhvdXJzID09IG51bGxcbiAgICAgICAgICAgIHx8IHR5cGVvZiB0aW1lLmhvdXJzICE9PSAnbnVtYmVyJ1xuICAgICAgICAgICAgfHwgTnVtYmVyLmlzTmFOKHRpbWUuaG91cnMpXG4gICAgICAgICAgICB8fCB0aW1lLm1pbnV0ZXMgPT0gbnVsbFxuICAgICAgICAgICAgfHwgdHlwZW9mIHRpbWUubWludXRlcyAhPT0gJ251bWJlcidcbiAgICAgICAgICAgIHx8IE51bWJlci5pc05hTih0aW1lLm1pbnV0ZXMpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn0iXX0=
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { string } from '../decorators/string/string.decorator';
|
|
3
|
+
/**
|
|
4
|
+
* A base Entity class with a builtin id.
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvY2xhc3Nlcy9lbnRpdHkubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQVkvRDs7R0FFRztBQUNILE1BQU0sT0FBZ0IsTUFBTTtDQWEzQjtBQURHO0lBUkMsTUFBTSxDQUFDO1FBQ0osYUFBYSxFQUFFLElBQUk7UUFDbkIsYUFBYSxFQUFFLElBQUk7UUFDbkIsT0FBTyxFQUFFLEtBQUs7UUFDZCxZQUFZLEVBQUUsTUFBTTtRQUNwQixXQUFXLEVBQUUsSUFBSTtRQUNqQixRQUFRLEVBQUUsSUFBSTtLQUNqQixDQUFDOztrQ0FDVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN0cmluZyB9IGZyb20gJy4uL2RlY29yYXRvcnMvc3RyaW5nL3N0cmluZy5kZWNvcmF0b3InO1xuXG4vKipcbiAqIFRoZSBuZXdhYmxlIHR5cGUgdXNlZCB3aGVuZXZlciBhbiBlbnRpdHkgY2xhc3MgaXMgcGFzc2VkIHRvIGNyZWF0ZSBhbiBlbnRpdHkgYW5kIGluaXRpYWxpemUgaXRzIG1ldGFkYXRhLlxuICovXG5leHBvcnQgdHlwZSBFbnRpdHlDbGFzc05ld2FibGU8RW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+PiA9IG5ldyhkYXRhPzogRW50aXR5VHlwZSkgPT4gRW50aXR5VHlwZTtcblxuLyoqXG4gKiBUaGUgR2VuZXJpYyBCYXNlIEVudGl0eVR5cGUuXG4gKi9cbmV4cG9ydCB0eXBlIEJhc2VFbnRpdHlUeXBlPFQ+ID0geyBbSyBpbiBrZXlvZiBUXTogdW5rbm93biB9O1xuXG4vKipcbiAqIEEgYmFzZSBFbnRpdHkgY2xhc3Mgd2l0aCBhIGJ1aWx0aW4gaWQuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBFbnRpdHkge1xuICAgIC8qKlxuICAgICAqIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBFbnRpdHkuXG4gICAgICovXG4gICAgQHN0cmluZyh7XG4gICAgICAgIG9taXRGb3JDcmVhdGU6IHRydWUsXG4gICAgICAgIG9taXRGb3JVcGRhdGU6IHRydWUsXG4gICAgICAgIGRpc3BsYXk6IGZhbHNlLFxuICAgICAgICBkaXNwbGF5U3R5bGU6ICdsaW5lJyxcbiAgICAgICAgZGlzcGxheU5hbWU6ICdJRCcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSlcbiAgICBpZCE6IHN0cmluZztcbn0iXX0=
|