@ecodev/natural 62.1.2 → 63.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/fesm2022/ecodev-natural-vanilla.mjs +1193 -0
- package/fesm2022/ecodev-natural-vanilla.mjs.map +1 -0
- package/fesm2022/ecodev-natural.mjs +436 -425
- package/fesm2022/ecodev-natural.mjs.map +1 -1
- package/lib/classes/network-activity.service.d.ts +54 -0
- package/lib/classes/validators.d.ts +1 -1
- package/lib/modules/columns-picker/columns-picker.component.d.ts +2 -2
- package/lib/modules/common/services/seo.provider.d.ts +2 -2
- package/lib/modules/dropdown-components/type-select/type-select.component.d.ts +1 -1
- package/lib/modules/file/abstract-file.d.ts +6 -3
- package/lib/modules/file/component/file.component.d.ts +2 -2
- package/lib/modules/file/file-drop.directive.d.ts +2 -3
- package/lib/modules/fixed-button-detail/fixed-button-detail.component.d.ts +2 -3
- package/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.d.ts +3 -3
- package/lib/modules/icon/icon.module.d.ts +2 -2
- package/lib/modules/panels/panels.service.d.ts +1 -2
- package/lib/modules/relations/relations.component.d.ts +3 -3
- package/lib/modules/search/dropdown-container/dropdown-container.component.d.ts +2 -3
- package/lib/modules/search/group/group.component.d.ts +2 -3
- package/lib/modules/search/input/input.component.d.ts +5 -5
- package/lib/modules/search/search/search.component.d.ts +2 -2
- package/lib/modules/select/abstract-select.component.d.ts +3 -3
- package/lib/modules/select/select/select.component.d.ts +1 -1
- package/lib/modules/sidenav/sidenav-container/sidenav-container.component.d.ts +1 -1
- package/lib/modules/table-button/table-button.component.d.ts +4 -2
- package/package.json +16 -14
- package/public-api.d.ts +1 -0
- package/src/lib/_natural.theme.scss +1 -2
- package/vanilla/index.d.ts +5 -0
- package/vanilla/package.json +3 -0
- package/vanilla/public-api.d.ts +11 -0
- package/vanilla/src/lib/classes/crypto.d.ts +8 -0
- package/vanilla/src/lib/classes/data-source.d.ts +32 -0
- package/vanilla/src/lib/classes/query-variable-manager-utils.d.ts +2 -0
- package/vanilla/src/lib/classes/query-variable-manager.d.ts +91 -0
- package/vanilla/src/lib/classes/signing.d.ts +7 -0
- package/vanilla/src/lib/classes/utility.d.ts +77 -0
- package/vanilla/src/lib/modules/search/classes/graphql-doctrine.types.d.ts +83 -0
- package/vanilla/src/lib/modules/search/classes/utils.d.ts +17 -0
- package/vanilla/src/lib/modules/search/types/dropdown-component.d.ts +20 -0
- package/vanilla/src/lib/modules/search/types/facet.d.ts +75 -0
- package/vanilla/src/lib/modules/search/types/values.d.ts +32 -0
- package/vanilla/src/lib/services/abstract-model.service.d.ts +244 -0
- package/vanilla/src/lib/services/debounce.service.d.ts +52 -0
- package/vanilla/src/lib/types/types.d.ts +100 -0
- package/esm2022/ecodev-natural.mjs +0 -5
- package/esm2022/lib/classes/abstract-detail.mjs +0 -229
- package/esm2022/lib/classes/abstract-editable-list.mjs +0 -99
- package/esm2022/lib/classes/abstract-list.mjs +0 -461
- package/esm2022/lib/classes/abstract-navigable-list.mjs +0 -133
- package/esm2022/lib/classes/apollo-utils.mjs +0 -59
- package/esm2022/lib/classes/crypto.mjs +0 -23
- package/esm2022/lib/classes/cumulative-changes.mjs +0 -50
- package/esm2022/lib/classes/data-source.mjs +0 -71
- package/esm2022/lib/classes/providers.mjs +0 -13
- package/esm2022/lib/classes/query-variable-manager-utils.mjs +0 -14
- package/esm2022/lib/classes/query-variable-manager.mjs +0 -172
- package/esm2022/lib/classes/rxjs.mjs +0 -54
- package/esm2022/lib/classes/signing.mjs +0 -38
- package/esm2022/lib/classes/tld.mjs +0 -1476
- package/esm2022/lib/classes/utility.mjs +0 -234
- package/esm2022/lib/classes/validators.mjs +0 -179
- package/esm2022/lib/directives/http-prefix.directive.mjs +0 -47
- package/esm2022/lib/modules/alert/alert.service.mjs +0 -53
- package/esm2022/lib/modules/alert/confirm.component.mjs +0 -16
- package/esm2022/lib/modules/alert/public-api.mjs +0 -6
- package/esm2022/lib/modules/avatar/component/avatar.component.mjs +0 -203
- package/esm2022/lib/modules/avatar/public-api.mjs +0 -6
- package/esm2022/lib/modules/avatar/service/avatar.service.mjs +0 -63
- package/esm2022/lib/modules/avatar/sources/gravatar.mjs +0 -29
- package/esm2022/lib/modules/avatar/sources/image.mjs +0 -13
- package/esm2022/lib/modules/avatar/sources/initials.mjs +0 -39
- package/esm2022/lib/modules/avatar/sources/source.mjs +0 -16
- package/esm2022/lib/modules/columns-picker/columns-picker.component.mjs +0 -145
- package/esm2022/lib/modules/columns-picker/public-api.mjs +0 -5
- package/esm2022/lib/modules/columns-picker/types.mjs +0 -2
- package/esm2022/lib/modules/common/directives/background-density.directive.mjs +0 -63
- package/esm2022/lib/modules/common/directives/linkable-tab.directive.mjs +0 -93
- package/esm2022/lib/modules/common/directives/src-density.directive.mjs +0 -72
- package/esm2022/lib/modules/common/pipes/capitalize.pipe.mjs +0 -24
- package/esm2022/lib/modules/common/pipes/ellipsis.pipe.mjs +0 -17
- package/esm2022/lib/modules/common/pipes/enum.pipe.mjs +0 -24
- package/esm2022/lib/modules/common/pipes/time-ago.pipe.mjs +0 -140
- package/esm2022/lib/modules/common/public-api.mjs +0 -14
- package/esm2022/lib/modules/common/services/memory-storage.mjs +0 -110
- package/esm2022/lib/modules/common/services/seo.provider.mjs +0 -23
- package/esm2022/lib/modules/common/services/seo.service.mjs +0 -235
- package/esm2022/lib/modules/detail-header/detail-header.component.mjs +0 -84
- package/esm2022/lib/modules/detail-header/public-api.mjs +0 -5
- package/esm2022/lib/modules/dialog-trigger/dialog-trigger.component.mjs +0 -72
- package/esm2022/lib/modules/dialog-trigger/public-api.mjs +0 -5
- package/esm2022/lib/modules/dropdown-components/abstract-association-select-component.directive.mjs +0 -100
- package/esm2022/lib/modules/dropdown-components/public-api.mjs +0 -14
- package/esm2022/lib/modules/dropdown-components/type-boolean/type-boolean.component.mjs +0 -39
- package/esm2022/lib/modules/dropdown-components/type-date/type-date.component.mjs +0 -173
- package/esm2022/lib/modules/dropdown-components/type-date-range/type-date-range.component.mjs +0 -134
- package/esm2022/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.mjs +0 -80
- package/esm2022/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.mjs +0 -48
- package/esm2022/lib/modules/dropdown-components/type-number/type-number.component.mjs +0 -110
- package/esm2022/lib/modules/dropdown-components/type-options/type-options.component.mjs +0 -64
- package/esm2022/lib/modules/dropdown-components/type-select/type-select.component.mjs +0 -175
- package/esm2022/lib/modules/dropdown-components/type-text/type-text.component.mjs +0 -62
- package/esm2022/lib/modules/dropdown-components/types.mjs +0 -41
- package/esm2022/lib/modules/dropdown-components/utils.mjs +0 -35
- package/esm2022/lib/modules/file/abstract-file.mjs +0 -230
- package/esm2022/lib/modules/file/component/file.component.mjs +0 -172
- package/esm2022/lib/modules/file/file-drop.directive.mjs +0 -111
- package/esm2022/lib/modules/file/file-select.directive.mjs +0 -26
- package/esm2022/lib/modules/file/file.service.mjs +0 -43
- package/esm2022/lib/modules/file/public-api.mjs +0 -9
- package/esm2022/lib/modules/file/types.mjs +0 -2
- package/esm2022/lib/modules/file/utils.mjs +0 -129
- package/esm2022/lib/modules/fixed-button/fixed-button.component.mjs +0 -30
- package/esm2022/lib/modules/fixed-button/public-api.mjs +0 -5
- package/esm2022/lib/modules/fixed-button-detail/fixed-button-detail.component.mjs +0 -56
- package/esm2022/lib/modules/fixed-button-detail/public-api.mjs +0 -5
- package/esm2022/lib/modules/hierarchic-selector/classes/flat-node.mjs +0 -18
- package/esm2022/lib/modules/hierarchic-selector/classes/hierarchic-configuration.mjs +0 -2
- package/esm2022/lib/modules/hierarchic-selector/classes/hierarchic-filters-configuration.mjs +0 -2
- package/esm2022/lib/modules/hierarchic-selector/classes/model-node.mjs +0 -14
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.mjs +0 -398
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.mjs +0 -243
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.mjs +0 -38
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.mjs +0 -22
- package/esm2022/lib/modules/hierarchic-selector/public-api.mjs +0 -10
- package/esm2022/lib/modules/icon/icon.directive.mjs +0 -96
- package/esm2022/lib/modules/icon/icon.module.mjs +0 -33
- package/esm2022/lib/modules/icon/public-api.mjs +0 -6
- package/esm2022/lib/modules/logger/error-handler.mjs +0 -87
- package/esm2022/lib/modules/logger/error.module.mjs +0 -22
- package/esm2022/lib/modules/logger/public-api.mjs +0 -6
- package/esm2022/lib/modules/matomo/matomo.service.mjs +0 -96
- package/esm2022/lib/modules/matomo/public-api.mjs +0 -5
- package/esm2022/lib/modules/panels/abstract-panel.mjs +0 -76
- package/esm2022/lib/modules/panels/fallback-if-no-opened-panels.urlmatcher.mjs +0 -12
- package/esm2022/lib/modules/panels/panels.component.mjs +0 -27
- package/esm2022/lib/modules/panels/panels.module.mjs +0 -10
- package/esm2022/lib/modules/panels/panels.service.mjs +0 -329
- package/esm2022/lib/modules/panels/panels.urlmatcher.mjs +0 -75
- package/esm2022/lib/modules/panels/public-api.mjs +0 -11
- package/esm2022/lib/modules/panels/types.mjs +0 -3
- package/esm2022/lib/modules/relations/public-api.mjs +0 -5
- package/esm2022/lib/modules/relations/relations.component.mjs +0 -254
- package/esm2022/lib/modules/search/classes/graphql-doctrine.mjs +0 -111
- package/esm2022/lib/modules/search/classes/graphql-doctrine.types.mjs +0 -14
- package/esm2022/lib/modules/search/classes/transformers.mjs +0 -142
- package/esm2022/lib/modules/search/classes/url.mjs +0 -53
- package/esm2022/lib/modules/search/classes/utils.mjs +0 -25
- package/esm2022/lib/modules/search/dropdown-container/dropdown-container-animations.mjs +0 -44
- package/esm2022/lib/modules/search/dropdown-container/dropdown-container.component.mjs +0 -87
- package/esm2022/lib/modules/search/dropdown-container/dropdown-ref.mjs +0 -24
- package/esm2022/lib/modules/search/dropdown-container/dropdown.service.mjs +0 -90
- package/esm2022/lib/modules/search/facet-selector/facet-selector.component.mjs +0 -45
- package/esm2022/lib/modules/search/group/group.component.mjs +0 -53
- package/esm2022/lib/modules/search/input/input.component.mjs +0 -365
- package/esm2022/lib/modules/search/public-api.mjs +0 -7
- package/esm2022/lib/modules/search/search/search.component.mjs +0 -102
- package/esm2022/lib/modules/search/types/dropdown-component.mjs +0 -2
- package/esm2022/lib/modules/search/types/facet.mjs +0 -2
- package/esm2022/lib/modules/search/types/values.mjs +0 -2
- package/esm2022/lib/modules/select/abstract-select.component.mjs +0 -232
- package/esm2022/lib/modules/select/public-api.mjs +0 -7
- package/esm2022/lib/modules/select/select/select.component.mjs +0 -310
- package/esm2022/lib/modules/select/select-enum/select-enum.component.mjs +0 -57
- package/esm2022/lib/modules/select/select-hierarchic/select-hierarchic.component.mjs +0 -155
- package/esm2022/lib/modules/sidenav/public-api.mjs +0 -9
- package/esm2022/lib/modules/sidenav/sidenav/sidenav.component.mjs +0 -15
- package/esm2022/lib/modules/sidenav/sidenav-container/sidenav-container.component.mjs +0 -90
- package/esm2022/lib/modules/sidenav/sidenav-content/sidenav-content.component.mjs +0 -11
- package/esm2022/lib/modules/sidenav/sidenav-stack.service.mjs +0 -50
- package/esm2022/lib/modules/sidenav/sidenav.service.mjs +0 -196
- package/esm2022/lib/modules/stamp/public-api.mjs +0 -5
- package/esm2022/lib/modules/stamp/stamp.component.mjs +0 -23
- package/esm2022/lib/modules/table-button/public-api.mjs +0 -5
- package/esm2022/lib/modules/table-button/table-button.component.mjs +0 -78
- package/esm2022/lib/services/abstract-model.service.mjs +0 -526
- package/esm2022/lib/services/debounce.service.mjs +0 -149
- package/esm2022/lib/services/enum.service.mjs +0 -64
- package/esm2022/lib/services/link-mutation.service.mjs +0 -154
- package/esm2022/lib/services/persistence.service.mjs +0 -115
- package/esm2022/lib/services/swiss-parsing-date-adapter.service.mjs +0 -63
- package/esm2022/lib/types/types.mjs +0 -2
- package/esm2022/public-api.mjs +0 -46
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import { Directive, Input } from '@angular/core';
|
|
2
|
-
import { map } from 'rxjs/operators';
|
|
3
|
-
import { NaturalAbstractList } from './abstract-list';
|
|
4
|
-
import { NaturalQueryVariablesManager } from './query-variable-manager';
|
|
5
|
-
import { first } from 'rxjs';
|
|
6
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
/**
|
|
9
|
-
* This class helps managing a list of paginated items that can be filtered,
|
|
10
|
-
* selected, and then bulk actions can be performed on selection.
|
|
11
|
-
*
|
|
12
|
-
* @dynamic
|
|
13
|
-
*/
|
|
14
|
-
export class NaturalAbstractNavigableList extends NaturalAbstractList {
|
|
15
|
-
/**
|
|
16
|
-
* Name of filter for child items to access ancestor item
|
|
17
|
-
*/
|
|
18
|
-
ancestorRelationName = 'parent';
|
|
19
|
-
oldAncertorId = null;
|
|
20
|
-
breadcrumbs = [];
|
|
21
|
-
constructor(service) {
|
|
22
|
-
super(service);
|
|
23
|
-
}
|
|
24
|
-
ngOnInit() {
|
|
25
|
-
// In fact, "na" and "ns" key may exist at the same time in url (but shouldn't).
|
|
26
|
-
// When this happens, on page reload, search is priority.
|
|
27
|
-
// "na" is a trailing param, and should be considered only when there is no search
|
|
28
|
-
this.route.params.subscribe(params => {
|
|
29
|
-
// "ns" stands for natural-search to be shorter in url
|
|
30
|
-
if (params.ns) {
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
let navigationConditionValue = null;
|
|
34
|
-
// "na" stands for "navigation" (relation) in url
|
|
35
|
-
if (params.na) {
|
|
36
|
-
navigationConditionValue = { have: { values: [params.na] } };
|
|
37
|
-
this.service.getOne(params.na).subscribe(
|
|
38
|
-
// TODO casting should disappear and instead this class should enforce
|
|
39
|
-
// the service to support Tone with a new generic
|
|
40
|
-
(ancestor) => (this.breadcrumbs = this.getBreadcrumb(ancestor)));
|
|
41
|
-
const hasAncestorChanged = params.na !== this.oldAncertorId;
|
|
42
|
-
this.oldAncertorId = params.na;
|
|
43
|
-
this.clearSearch(hasAncestorChanged);
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
navigationConditionValue = { empty: {} };
|
|
47
|
-
this.breadcrumbs = [];
|
|
48
|
-
}
|
|
49
|
-
const condition = {};
|
|
50
|
-
condition[this.ancestorRelationName] = navigationConditionValue;
|
|
51
|
-
const variables = { filter: { groups: [{ conditions: [condition] }] } };
|
|
52
|
-
// todo : check why without "as Vall" it errors. Vall is supposed to be QueryVariables, and filter too.
|
|
53
|
-
this.variablesManager.set('navigation', variables);
|
|
54
|
-
});
|
|
55
|
-
super.ngOnInit();
|
|
56
|
-
}
|
|
57
|
-
getDataObservable() {
|
|
58
|
-
return this.service.watchAll(this.variablesManager).pipe(takeUntilDestroyed(this.destroyRef), map(result => {
|
|
59
|
-
// On each data arriving, we query children count to show/hide chevron
|
|
60
|
-
const navigableItems = result.items.map(item => {
|
|
61
|
-
const navigableItem = {
|
|
62
|
-
item: item,
|
|
63
|
-
hasNavigation: false,
|
|
64
|
-
};
|
|
65
|
-
const condition = {};
|
|
66
|
-
condition[this.ancestorRelationName] = { have: { values: [item.id] } };
|
|
67
|
-
const variables = { filter: { groups: [{ conditions: [condition] }] } };
|
|
68
|
-
const qvm = new NaturalQueryVariablesManager();
|
|
69
|
-
qvm.set('variables', variables);
|
|
70
|
-
this.service
|
|
71
|
-
.count(qvm)
|
|
72
|
-
.pipe(first())
|
|
73
|
-
.subscribe(count => (navigableItem.hasNavigation = count > 0));
|
|
74
|
-
return navigableItem;
|
|
75
|
-
});
|
|
76
|
-
const navigableResult = {
|
|
77
|
-
...result,
|
|
78
|
-
items: navigableItems,
|
|
79
|
-
};
|
|
80
|
-
return navigableResult;
|
|
81
|
-
}));
|
|
82
|
-
}
|
|
83
|
-
translateSearchAndRefreshList(naturalSearchSelections) {
|
|
84
|
-
// Clear navigation filter if there is a search
|
|
85
|
-
if (naturalSearchSelections.some(s => s.length)) {
|
|
86
|
-
this.variablesManager.set('navigation', null);
|
|
87
|
-
this.breadcrumbs = [];
|
|
88
|
-
}
|
|
89
|
-
super.translateSearchAndRefreshList(naturalSearchSelections);
|
|
90
|
-
}
|
|
91
|
-
clearSearch(resetPagination = true) {
|
|
92
|
-
this.naturalSearchSelections = [[]];
|
|
93
|
-
super.search([[]], undefined, resetPagination);
|
|
94
|
-
this.persistenceService.persistInStorage('ns', null, this.getStorageKey());
|
|
95
|
-
}
|
|
96
|
-
search(naturalSearchSelections, navigationExtras, resetPagination = true) {
|
|
97
|
-
// na stands for navigation
|
|
98
|
-
this.persistenceService.persistInUrl('na', null, this.route).then(() => {
|
|
99
|
-
super.search(naturalSearchSelections, navigationExtras, resetPagination);
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Return an array for router link usage
|
|
104
|
-
*/
|
|
105
|
-
getChildLink(ancestor) {
|
|
106
|
-
if (ancestor?.id) {
|
|
107
|
-
return ['.', { na: ancestor.id }];
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
return ['.', {}];
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Depth is limited by queries
|
|
115
|
-
* @param item with an ancestor relation (must match ancestorRelationName attribute)
|
|
116
|
-
*/
|
|
117
|
-
getBreadcrumb(item) {
|
|
118
|
-
const ancestor = item[this.ancestorRelationName];
|
|
119
|
-
if (ancestor) {
|
|
120
|
-
return this.getBreadcrumb(ancestor).concat([item]);
|
|
121
|
-
}
|
|
122
|
-
return [item];
|
|
123
|
-
}
|
|
124
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAbstractNavigableList, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
|
|
125
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.3", type: NaturalAbstractNavigableList, isStandalone: true, inputs: { ancestorRelationName: "ancestorRelationName" }, usesInheritance: true, ngImport: i0 });
|
|
126
|
-
}
|
|
127
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAbstractNavigableList, decorators: [{
|
|
128
|
-
type: Directive,
|
|
129
|
-
args: [{ standalone: true }]
|
|
130
|
-
}], ctorParameters: () => [{ type: undefined }], propDecorators: { ancestorRelationName: [{
|
|
131
|
-
type: Input
|
|
132
|
-
}] } });
|
|
133
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbmF2aWdhYmxlLWxpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvY2xhc3Nlcy9hYnN0cmFjdC1uYXZpZ2FibGUtbGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUV2RCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFHbkMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFcEQsT0FBTyxFQUFDLDRCQUE0QixFQUFpQixNQUFNLDBCQUEwQixDQUFDO0FBRXRGLE9BQU8sRUFBQyxLQUFLLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7O0FBWTlEOzs7OztHQUtHO0FBRUgsTUFBTSxPQUFPLDRCQWNULFNBQVEsbUJBQThGO0lBR3RHOztPQUVHO0lBQ2Esb0JBQW9CLEdBQUcsUUFBUSxDQUFDO0lBRXhDLGFBQWEsR0FBa0IsSUFBSSxDQUFDO0lBRXJDLFdBQVcsR0FBcUIsRUFBRSxDQUFDO0lBRTFDLFlBQW1CLE9BQWlCO1FBQ2hDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRWUsUUFBUTtRQUNwQixnRkFBZ0Y7UUFDaEYseURBQXlEO1FBQ3pELGtGQUFrRjtRQUNsRixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDakMsc0RBQXNEO1lBQ3RELElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNaLE9BQU87WUFDWCxDQUFDO1lBRUQsSUFBSSx3QkFBd0IsR0FBZ0MsSUFBSSxDQUFDO1lBRWpFLGlEQUFpRDtZQUNqRCxJQUFJLE1BQU0sQ0FBQyxFQUFF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QUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVksQ0FBQyxRQUE2QjtRQUM3QyxJQUFJLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUM7UUFDcEMsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JCLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sYUFBYSxDQUFDLElBQW9CO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNqRCxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ1gsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQixDQUFDO3VHQTFKUSw0QkFBNEI7MkZBQTVCLDRCQUE0Qjs7MkZBQTVCLDRCQUE0QjtrQkFEeEMsU0FBUzttQkFBQyxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUM7MkVBcUJULG9CQUFvQjtzQkFBbkMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBJbnB1dCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TmF2aWdhdGlvbkV4dHJhcywgUm91dGVyTGlua30gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge05hdHVyYWxTZWFyY2hTZWxlY3Rpb25zfSBmcm9tICcuLi9tb2R1bGVzL3NlYXJjaC90eXBlcy92YWx1ZXMnO1xuaW1wb3J0IHtOYXR1cmFsQWJzdHJhY3RNb2RlbFNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL2Fic3RyYWN0LW1vZGVsLnNlcnZpY2UnO1xuaW1wb3J0IHtOYXR1cmFsQWJzdHJhY3RMaXN0fSBmcm9tICcuL2Fic3RyYWN0LWxpc3QnO1xuaW1wb3J0IHtQYWdpbmF0ZWREYXRhfSBmcm9tICcuL2RhdGEtc291cmNlJztcbmltcG9ydCB7TmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlciwgUXVlcnlWYXJpYWJsZXN9IGZyb20gJy4vcXVlcnktdmFyaWFibGUtbWFuYWdlcic7XG5pbXBvcnQge0V4dHJhY3RUYWxsLCBFeHRyYWN0VGFsbE9uZSwgRXh0cmFjdFZhbGwsIExpdGVyYWx9IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcbmltcG9ydCB7Zmlyc3QsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtGaWx0ZXJHcm91cENvbmRpdGlvbn0gZnJvbSAnLi4vbW9kdWxlcy9zZWFyY2gvY2xhc3Nlcy9ncmFwaHFsLWRvY3RyaW5lLnR5cGVzJztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbnR5cGUgQnJlYWRjcnVtYkl0ZW0gPSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG59ICYgTGl0ZXJhbDtcblxuZXhwb3J0IHR5cGUgTmF2aWdhYmxlSXRlbTxUPiA9IHtcbiAgICBpdGVtOiBUO1xuICAgIGhhc05hdmlnYXRpb246IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaGVscHMgbWFuYWdpbmcgYSBsaXN0IG9mIHBhZ2luYXRlZCBpdGVtcyB0aGF0IGNhbiBiZSBmaWx0ZXJlZCxcbiAqIHNlbGVjdGVkLCBhbmQgdGhlbiBidWxrIGFjdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCBvbiBzZWxlY3Rpb24uXG4gKlxuICogQGR5bmFtaWNcbiAqL1xuQERpcmVjdGl2ZSh7c3RhbmRhbG9uZTogdHJ1ZX0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbEFic3RyYWN0TmF2aWdhYmxlTGlzdDxcbiAgICAgICAgVFNlcnZpY2UgZXh0ZW5kcyBOYXR1cmFsQWJzdHJhY3RNb2RlbFNlcnZpY2U8XG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBQYWdpbmF0ZWREYXRhPHtpZDogc3RyaW5nfT4sXG4gICAgICAgICAgICBRdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueVxuICAgICAgICA+LFxuICAgID5cbiAgICBleHRlbmRzIE5hdHVyYWxBYnN0cmFjdExpc3Q8VFNlcnZpY2UsIFBhZ2luYXRlZERhdGE8TmF2aWdhYmxlSXRlbTxFeHRyYWN0VGFsbDxUU2VydmljZT5bJ2l0ZW1zJ11bMF0+Pj5cbiAgICBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICAgIC8qKlxuICAgICAqIE5hbWUgb2YgZmlsdGVyIGZvciBjaGlsZCBpdGVtcyB0byBhY2Nlc3MgYW5jZXN0b3IgaXRlbVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhbmNlc3RvclJlbGF0aW9uTmFtZSA9ICdwYXJlbnQnO1xuXG4gICAgcHJpdmF0ZSBvbGRBbmNlcnRvcklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIHB1YmxpYyBicmVhZGNydW1iczogQnJlYWRjcnVtYkl0ZW1bXSA9IFtdO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHNlcnZpY2U6IFRTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKHNlcnZpY2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gSW4gZmFjdCwgXCJuYVwiIGFuZCBcIm5zXCIga2V5IG1heSBleGlzdCBhdCB0aGUgc2FtZSB0aW1lIGluIHVybCAoYnV0IHNob3VsZG4ndCkuXG4gICAgICAgIC8vIFdoZW4gdGhpcyBoYXBwZW5zLCBvbiBwYWdlIHJlbG9hZCwgc2VhcmNoIGlzIHByaW9yaXR5LlxuICAgICAgICAvLyBcIm5hXCIgaXMgYSB0cmFpbGluZyBwYXJhbSwgYW5kIHNob3VsZCBiZSBjb25zaWRlcmVkIG9ubHkgd2hlbiB0aGVyZSBpcyBubyBzZWFyY2hcbiAgICAgICAgdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgICAgICAgICAvLyBcIm5zXCIgc3RhbmRzIGZvciBuYXR1cmFsLXNlYXJjaCB0byBiZSBzaG9ydGVyIGluIHVybFxuICAgICAgICAgICAgaWYgKHBhcmFtcy5ucykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IG5hdmlnYXRpb25Db25kaXRpb25WYWx1ZTogRmlsdGVyR3JvdXBDb25kaXRpb24gfCBudWxsID0gbnVsbDtcblxuICAgICAgICAgICAgLy8gXCJuYVwiIHN0YW5kcyBmb3IgXCJuYXZpZ2F0aW9uXCIgKHJlbGF0aW9uKSBpbiB1cmxcbiAgICAgICAgICAgIGlmIChwYXJhbXMubmEpIHtcbiAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uQ29uZGl0aW9uVmFsdWUgPSB7aGF2ZToge3ZhbHVlczogW3BhcmFtcy5uYV19fTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2UuZ2V0T25lKHBhcmFtcy5uYSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIGNhc3Rpbmcgc2hvdWxkIGRpc2FwcGVhciBhbmQgaW5zdGVhZCB0aGlzIGNsYXNzIHNob3VsZCBlbmZvcmNlXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBzZXJ2aWNlIHRvIHN1cHBvcnQgVG9uZSB3aXRoIGEgbmV3IGdlbmVyaWNcbiAgICAgICAgICAgICAgICAgICAgKGFuY2VzdG9yOiBCcmVhZGNydW1iSXRlbSkgPT4gKHRoaXMuYnJlYWRjcnVtYnMgPSB0aGlzLmdldEJyZWFkY3J1bWIoYW5jZXN0b3IpKSxcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaGFzQW5jZXN0b3JDaGFuZ2VkID0gcGFyYW1zLm5hICE9PSB0aGlzLm9sZEFuY2VydG9ySWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5vbGRBbmNlcnRvcklkID0gcGFyYW1zLm5hO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJTZWFyY2goaGFzQW5jZXN0b3JDaGFuZ2VkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmF2aWdhdGlvbkNvbmRpdGlvblZhbHVlID0ge2VtcHR5OiB7fX07XG4gICAgICAgICAgICAgICAgdGhpcy5icmVhZGNydW1icyA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb246IExpdGVyYWwgPSB7fTtcbiAgICAgICAgICAgIGNvbmRpdGlvblt0aGlzLmFuY2VzdG9yUmVsYXRpb25OYW1lXSA9IG5hdmlnYXRpb25Db25kaXRpb25WYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlczogUXVlcnlWYXJpYWJsZXMgPSB7ZmlsdGVyOiB7Z3JvdXBzOiBbe2NvbmRpdGlvbnM6IFtjb25kaXRpb25dfV19fTtcblxuICAgICAgICAgICAgLy8gdG9kbyA6IGNoZWNrIHdoeSB3aXRob3V0IFwiYXMgVmFsbFwiIGl0IGVycm9ycy4gVmFsbCBpcyBzdXBwb3NlZCB0byBiZSBRdWVyeVZhcmlhYmxlcywgYW5kIGZpbHRlciB0b28uXG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuc2V0KCduYXZpZ2F0aW9uJywgdmFyaWFibGVzIGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGdldERhdGFPYnNlcnZhYmxlKCk6IE9ic2VydmFibGU8UGFnaW5hdGVkRGF0YTxOYXZpZ2FibGVJdGVtPEV4dHJhY3RUYWxsT25lPFRTZXJ2aWNlPj4+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2Uud2F0Y2hBbGwodGhpcy52YXJpYWJsZXNNYW5hZ2VyIGFzIHVua25vd24gYXMgYW55KS5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZiksXG4gICAgICAgICAgICBtYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAvLyBPbiBlYWNoIGRhdGEgYXJyaXZpbmcsIHdlIHF1ZXJ5IGNoaWxkcmVuIGNvdW50IHRvIHNob3cvaGlkZSBjaGV2cm9uXG4gICAgICAgICAgICAgICAgY29uc3QgbmF2aWdhYmxlSXRlbXM6IE5hdmlnYWJsZUl0ZW08RXh0cmFjdFRhbGxPbmU8VFNlcnZpY2U+PltdID0gcmVzdWx0Lml0ZW1zLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmF2aWdhYmxlSXRlbTogTmF2aWdhYmxlSXRlbTxFeHRyYWN0VGFsbE9uZTxUU2VydmljZT4+ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbTogaXRlbSBhcyBFeHRyYWN0VGFsbE9uZTxUU2VydmljZT4sXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNOYXZpZ2F0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25kaXRpb246IExpdGVyYWwgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uW3RoaXMuYW5jZXN0b3JSZWxhdGlvbk5hbWVdID0ge2hhdmU6IHt2YWx1ZXM6IFtpdGVtLmlkXX19O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYWJsZXM6IFF1ZXJ5VmFyaWFibGVzID0ge2ZpbHRlcjoge2dyb3VwczogW3tjb25kaXRpb25zOiBbY29uZGl0aW9uXX1dfX07XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXZtID0gbmV3IE5hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgcXZtLnNldCgndmFyaWFibGVzJywgdmFyaWFibGVzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAuY291bnQocXZtKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoZmlyc3QoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoY291bnQgPT4gKG5hdmlnYWJsZUl0ZW0uaGFzTmF2aWdhdGlvbiA9IGNvdW50ID4gMCkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuYXZpZ2FibGVJdGVtO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbmF2aWdhYmxlUmVzdWx0OiBQYWdpbmF0ZWREYXRhPE5hdmlnYWJsZUl0ZW08RXh0cmFjdFRhbGxPbmU8VFNlcnZpY2U+Pj4gPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IG5hdmlnYWJsZUl0ZW1zLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmF2aWdhYmxlUmVzdWx0O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHRyYW5zbGF0ZVNlYXJjaEFuZFJlZnJlc2hMaXN0KG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zOiBOYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyk6IHZvaWQge1xuICAgICAgICAvLyBDbGVhciBuYXZpZ2F0aW9uIGZpbHRlciBpZiB0aGVyZSBpcyBhIHNlYXJjaFxuICAgICAgICBpZiAobmF0dXJhbFNlYXJjaFNlbGVjdGlvbnMuc29tZShzID0+IHMubGVuZ3RoKSkge1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLnNldCgnbmF2aWdhdGlvbicsIG51bGwpO1xuICAgICAgICAgICAgdGhpcy5icmVhZGNydW1icyA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXIudHJhbnNsYXRlU2VhcmNoQW5kUmVmcmVzaExpc3QobmF0dXJhbFNlYXJjaFNlbGVjdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhclNlYXJjaChyZXNldFBhZ2luYXRpb24gPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmF0dXJhbFNlYXJjaFNlbGVjdGlvbnMgPSBbW11dO1xuICAgICAgICBzdXBlci5zZWFyY2goW1tdXSwgdW5kZWZpbmVkLCByZXNldFBhZ2luYXRpb24pO1xuICAgICAgICB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0SW5TdG9yYWdlKCducycsIG51bGwsIHRoaXMuZ2V0U3RvcmFnZUtleSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2VhcmNoKFxuICAgICAgICBuYXR1cmFsU2VhcmNoU2VsZWN0aW9uczogTmF0dXJhbFNlYXJjaFNlbGVjdGlvbnMsXG4gICAgICAgIG5hdmlnYXRpb25FeHRyYXM/OiBOYXZpZ2F0aW9uRXh0cmFzLFxuICAgICAgICByZXNldFBhZ2luYXRpb24gPSB0cnVlLFxuICAgICk6IHZvaWQge1xuICAgICAgICAvLyBuYSBzdGFuZHMgZm9yIG5hdmlnYXRpb25cbiAgICAgICAgdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdEluVXJsKCduYScsIG51bGwsIHRoaXMucm91dGUpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgc3VwZXIuc2VhcmNoKG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zLCBuYXZpZ2F0aW9uRXh0cmFzLCByZXNldFBhZ2luYXRpb24pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgZm9yIHJvdXRlciBsaW5rIHVzYWdlXG4gICAgICovXG4gICAgcHVibGljIGdldENoaWxkTGluayhhbmNlc3Rvcjoge2lkOiBzdHJpbmd9IHwgbnVsbCk6IFJvdXRlckxpbmtbJ3JvdXRlckxpbmsnXSB7XG4gICAgICAgIGlmIChhbmNlc3Rvcj8uaWQpIHtcbiAgICAgICAgICAgIHJldHVybiBbJy4nLCB7bmE6IGFuY2VzdG9yLmlkfV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gWycuJywge31dO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVwdGggaXMgbGltaXRlZCBieSBxdWVyaWVzXG4gICAgICogQHBhcmFtIGl0ZW0gd2l0aCBhbiBhbmNlc3RvciByZWxhdGlvbiAobXVzdCBtYXRjaCBhbmNlc3RvclJlbGF0aW9uTmFtZSBhdHRyaWJ1dGUpXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldEJyZWFkY3J1bWIoaXRlbTogQnJlYWRjcnVtYkl0ZW0pOiBCcmVhZGNydW1iSXRlbVtdIHtcbiAgICAgICAgY29uc3QgYW5jZXN0b3IgPSBpdGVtW3RoaXMuYW5jZXN0b3JSZWxhdGlvbk5hbWVdO1xuICAgICAgICBpZiAoYW5jZXN0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEJyZWFkY3J1bWIoYW5jZXN0b3IpLmNvbmNhdChbaXRlbV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtpdGVtXTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { ApolloLink } from '@apollo/client/core';
|
|
2
|
-
import { isObject } from 'lodash-es';
|
|
3
|
-
import { formatIsoDateTime } from './utility';
|
|
4
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
5
|
-
// @ts-expect-error
|
|
6
|
-
import extractFiles from 'extract-files/extractFiles.mjs';
|
|
7
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
8
|
-
// @ts-expect-error
|
|
9
|
-
import isExtractableFile from 'extract-files/isExtractableFile.mjs';
|
|
10
|
-
import { Kind, OperationTypeNode } from 'graphql/language';
|
|
11
|
-
function isFile(value) {
|
|
12
|
-
return ((typeof File !== 'undefined' && value instanceof File) ||
|
|
13
|
-
(typeof Blob !== 'undefined' && value instanceof Blob) ||
|
|
14
|
-
(typeof FileList !== 'undefined' && value instanceof FileList));
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Detect if the given variables have a file to be uploaded or not, and
|
|
18
|
-
* also convert date to be serialized with their timezone.
|
|
19
|
-
*/
|
|
20
|
-
export function hasFilesAndProcessDate(variables) {
|
|
21
|
-
let fileFound = false;
|
|
22
|
-
if (!isObject(variables)) {
|
|
23
|
-
return false;
|
|
24
|
-
}
|
|
25
|
-
Object.values(variables).forEach(value => {
|
|
26
|
-
if (value instanceof Date) {
|
|
27
|
-
// Replace native toJSON() function by our own implementation
|
|
28
|
-
value.toJSON = () => formatIsoDateTime(value);
|
|
29
|
-
}
|
|
30
|
-
if (isFile(value)) {
|
|
31
|
-
fileFound = true;
|
|
32
|
-
}
|
|
33
|
-
if (hasFilesAndProcessDate(value)) {
|
|
34
|
-
fileFound = true;
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
return fileFound;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Whether the given GraphQL document contains at least one mutation
|
|
41
|
-
*/
|
|
42
|
-
export function isMutation(query) {
|
|
43
|
-
return query.definitions.some(definition => definition.kind === Kind.OPERATION_DEFINITION && definition.operation === OperationTypeNode.MUTATION);
|
|
44
|
-
}
|
|
45
|
-
export const naturalExtractFiles = body => extractFiles(body, isExtractableFile);
|
|
46
|
-
/**
|
|
47
|
-
* Create an Apollo link that supports batched queries and file uploads.
|
|
48
|
-
*
|
|
49
|
-
* File uploads and mutations are never batched.
|
|
50
|
-
*/
|
|
51
|
-
export function createHttpLink(httpLink, httpBatchLink, options) {
|
|
52
|
-
// If the query has no file, batch it, otherwise upload only that query
|
|
53
|
-
return ApolloLink.split(operation => hasFilesAndProcessDate(operation.variables) || isMutation(operation.query), httpLink.create({
|
|
54
|
-
...options,
|
|
55
|
-
useMultipart: true,
|
|
56
|
-
extractFiles: naturalExtractFiles,
|
|
57
|
-
}), httpBatchLink.create(options));
|
|
58
|
-
}
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBvbGxvLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL2NsYXNzZXMvYXBvbGxvLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQWUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ25DLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUU1Qyw2REFBNkQ7QUFDN0QsbUJBQW1CO0FBQ25CLE9BQU8sWUFBWSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFELDZEQUE2RDtBQUM3RCxtQkFBbUI7QUFDbkIsT0FBTyxpQkFBaUIsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRSxPQUFPLEVBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFFekQsU0FBUyxNQUFNLENBQUMsS0FBYztJQUMxQixPQUFPLENBQ0gsQ0FBQyxPQUFPLElBQUksS0FBSyxXQUFXLElBQUksS0FBSyxZQUFZLElBQUksQ0FBQztRQUN0RCxDQUFDLE9BQU8sSUFBSSxLQUFLLFdBQVcsSUFBSSxLQUFLLFlBQVksSUFBSSxDQUFDO1FBQ3RELENBQUMsT0FBTyxRQUFRLEtBQUssV0FBVyxJQUFJLEtBQUssWUFBWSxRQUFRLENBQUMsQ0FDakUsQ0FBQztBQUNOLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsU0FBa0I7SUFDckQsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUN2QixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDckMsSUFBSSxLQUFLLFlBQVksSUFBSSxFQUFFLENBQUM7WUFDeEIsNkRBQTZEO1lBQzdELEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEIsU0FBUyxHQUFHLElBQUksQ0FBQztRQUNyQixDQUFDO1FBRUQsSUFBSSxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDckIsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFtQjtJQUMxQyxPQUFPLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUN6QixVQUFVLENBQUMsRUFBRSxDQUNULFVBQVUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLG9CQUFvQixJQUFJLFVBQVUsQ0FBQyxTQUFTLEtBQUssaUJBQWlCLENBQUMsUUFBUSxDQUMzRyxDQUFDO0FBQ04sQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUF5QyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztBQUV2SDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxRQUFrQixFQUFFLGFBQTRCLEVBQUUsT0FBZ0I7SUFDN0YsdUVBQXVFO0lBQ3ZFLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FDbkIsU0FBUyxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFDdkYsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUNaLEdBQUcsT0FBTztRQUNWLFlBQVksRUFBRSxJQUFJO1FBQ2xCLFlBQVksRUFBRSxtQkFBbUI7S0FDcEMsQ0FBQyxFQUNGLGFBQWEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQ2hDLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBcG9sbG9MaW5rLCBEb2N1bWVudE5vZGV9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xuaW1wb3J0IHtpc09iamVjdH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7Zm9ybWF0SXNvRGF0ZVRpbWV9IGZyb20gJy4vdXRpbGl0eSc7XG5pbXBvcnQge0h0dHBCYXRjaExpbmssIEh0dHBMaW5rLCBPcHRpb25zfSBmcm9tICdhcG9sbG8tYW5ndWxhci9odHRwJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1leHBlY3QtZXJyb3JcbmltcG9ydCBleHRyYWN0RmlsZXMgZnJvbSAnZXh0cmFjdC1maWxlcy9leHRyYWN0RmlsZXMubWpzJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1leHBlY3QtZXJyb3JcbmltcG9ydCBpc0V4dHJhY3RhYmxlRmlsZSBmcm9tICdleHRyYWN0LWZpbGVzL2lzRXh0cmFjdGFibGVGaWxlLm1qcyc7XG5pbXBvcnQge0tpbmQsIE9wZXJhdGlvblR5cGVOb2RlfSBmcm9tICdncmFwaHFsL2xhbmd1YWdlJztcblxuZnVuY3Rpb24gaXNGaWxlKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKHR5cGVvZiBGaWxlICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIEZpbGUpIHx8XG4gICAgICAgICh0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgaW5zdGFuY2VvZiBCbG9iKSB8fFxuICAgICAgICAodHlwZW9mIEZpbGVMaXN0ICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIEZpbGVMaXN0KVxuICAgICk7XG59XG5cbi8qKlxuICogRGV0ZWN0IGlmIHRoZSBnaXZlbiB2YXJpYWJsZXMgaGF2ZSBhIGZpbGUgdG8gYmUgdXBsb2FkZWQgb3Igbm90LCBhbmRcbiAqIGFsc28gY29udmVydCBkYXRlIHRvIGJlIHNlcmlhbGl6ZWQgd2l0aCB0aGVpciB0aW1lem9uZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0ZpbGVzQW5kUHJvY2Vzc0RhdGUodmFyaWFibGVzOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgbGV0IGZpbGVGb3VuZCA9IGZhbHNlO1xuICAgIGlmICghaXNPYmplY3QodmFyaWFibGVzKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgT2JqZWN0LnZhbHVlcyh2YXJpYWJsZXMpLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAvLyBSZXBsYWNlIG5hdGl2ZSB0b0pTT04oKSBmdW5jdGlvbiBieSBvdXIgb3duIGltcGxlbWVudGF0aW9uXG4gICAgICAgICAgICB2YWx1ZS50b0pTT04gPSAoKSA9PiBmb3JtYXRJc29EYXRlVGltZSh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNGaWxlKHZhbHVlKSkge1xuICAgICAgICAgICAgZmlsZUZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNGaWxlc0FuZFByb2Nlc3NEYXRlKHZhbHVlKSkge1xuICAgICAgICAgICAgZmlsZUZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZpbGVGb3VuZDtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRoZSBnaXZlbiBHcmFwaFFMIGRvY3VtZW50IGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBtdXRhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNNdXRhdGlvbihxdWVyeTogRG9jdW1lbnROb2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHF1ZXJ5LmRlZmluaXRpb25zLnNvbWUoXG4gICAgICAgIGRlZmluaXRpb24gPT5cbiAgICAgICAgICAgIGRlZmluaXRpb24ua2luZCA9PT0gS2luZC5PUEVSQVRJT05fREVGSU5JVElPTiAmJiBkZWZpbml0aW9uLm9wZXJhdGlvbiA9PT0gT3BlcmF0aW9uVHlwZU5vZGUuTVVUQVRJT04sXG4gICAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IG5hdHVyYWxFeHRyYWN0RmlsZXM6IE5vbk51bGxhYmxlPE9wdGlvbnNbJ2V4dHJhY3RGaWxlcyddPiA9IGJvZHkgPT4gZXh0cmFjdEZpbGVzKGJvZHksIGlzRXh0cmFjdGFibGVGaWxlKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gQXBvbGxvIGxpbmsgdGhhdCBzdXBwb3J0cyBiYXRjaGVkIHF1ZXJpZXMgYW5kIGZpbGUgdXBsb2Fkcy5cbiAqXG4gKiBGaWxlIHVwbG9hZHMgYW5kIG11dGF0aW9ucyBhcmUgbmV2ZXIgYmF0Y2hlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUh0dHBMaW5rKGh0dHBMaW5rOiBIdHRwTGluaywgaHR0cEJhdGNoTGluazogSHR0cEJhdGNoTGluaywgb3B0aW9uczogT3B0aW9ucyk6IEFwb2xsb0xpbmsge1xuICAgIC8vIElmIHRoZSBxdWVyeSBoYXMgbm8gZmlsZSwgYmF0Y2ggaXQsIG90aGVyd2lzZSB1cGxvYWQgb25seSB0aGF0IHF1ZXJ5XG4gICAgcmV0dXJuIEFwb2xsb0xpbmsuc3BsaXQoXG4gICAgICAgIG9wZXJhdGlvbiA9PiBoYXNGaWxlc0FuZFByb2Nlc3NEYXRlKG9wZXJhdGlvbi52YXJpYWJsZXMpIHx8IGlzTXV0YXRpb24ob3BlcmF0aW9uLnF1ZXJ5KSxcbiAgICAgICAgaHR0cExpbmsuY3JlYXRlKHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICB1c2VNdWx0aXBhcnQ6IHRydWUsXG4gICAgICAgICAgICBleHRyYWN0RmlsZXM6IG5hdHVyYWxFeHRyYWN0RmlsZXMsXG4gICAgICAgIH0pLFxuICAgICAgICBodHRwQmF0Y2hMaW5rLmNyZWF0ZShvcHRpb25zKSxcbiAgICApO1xufVxuIl19
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
function bufferToHexa(hashBuffer) {
|
|
2
|
-
const hashArray = new Uint8Array(hashBuffer); // convert buffer to byte array
|
|
3
|
-
return hashArray.reduce((result, byte) => result + byte.toString(16).padStart(2, '0'), ''); // convert bytes to hex string
|
|
4
|
-
}
|
|
5
|
-
/**
|
|
6
|
-
* Thin wrapper around browsers' native SubtleCrypto for convenience of use
|
|
7
|
-
*/
|
|
8
|
-
export async function sha256(message) {
|
|
9
|
-
const msgUint8 = new TextEncoder().encode(message); // encode as (utf-8) Uint8Array
|
|
10
|
-
const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8); // hash the message
|
|
11
|
-
return bufferToHexa(hashBuffer);
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Thin wrapper around browsers' native SubtleCrypto for convenience of use
|
|
15
|
-
*/
|
|
16
|
-
export async function hmacSha256(secret, payload) {
|
|
17
|
-
const encoder = new TextEncoder();
|
|
18
|
-
const algorithm = { name: 'HMAC', hash: 'SHA-256' };
|
|
19
|
-
const key = await crypto.subtle.importKey('raw', encoder.encode(secret), algorithm, false, ['sign']);
|
|
20
|
-
const signature = await crypto.subtle.sign(algorithm.name, key, encoder.encode(payload));
|
|
21
|
-
return bufferToHexa(signature);
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL2NsYXNzZXMvY3J5cHRvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsWUFBWSxDQUFDLFVBQXVCO0lBQ3pDLE1BQU0sU0FBUyxHQUFHLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsK0JBQStCO0lBQzdFLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyw4QkFBOEI7QUFDOUgsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxNQUFNLENBQUMsT0FBZTtJQUN4QyxNQUFNLFFBQVEsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLCtCQUErQjtJQUNuRixNQUFNLFVBQVUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtJQUV2RixPQUFPLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFVBQVUsQ0FBQyxNQUFjLEVBQUUsT0FBZTtJQUM1RCxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ2xDLE1BQU0sU0FBUyxHQUFxQixFQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBQyxDQUFDO0lBRXBFLE1BQU0sR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckcsTUFBTSxTQUFTLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFekYsT0FBTyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGJ1ZmZlclRvSGV4YShoYXNoQnVmZmVyOiBBcnJheUJ1ZmZlcik6IHN0cmluZyB7XG4gICAgY29uc3QgaGFzaEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoaGFzaEJ1ZmZlcik7IC8vIGNvbnZlcnQgYnVmZmVyIHRvIGJ5dGUgYXJyYXlcbiAgICByZXR1cm4gaGFzaEFycmF5LnJlZHVjZSgocmVzdWx0LCBieXRlKSA9PiByZXN1bHQgKyBieXRlLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpLCAnJyk7IC8vIGNvbnZlcnQgYnl0ZXMgdG8gaGV4IHN0cmluZ1xufVxuXG4vKipcbiAqIFRoaW4gd3JhcHBlciBhcm91bmQgYnJvd3NlcnMnIG5hdGl2ZSBTdWJ0bGVDcnlwdG8gZm9yIGNvbnZlbmllbmNlIG9mIHVzZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hhMjU2KG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgbXNnVWludDggPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUobWVzc2FnZSk7IC8vIGVuY29kZSBhcyAodXRmLTgpIFVpbnQ4QXJyYXlcbiAgICBjb25zdCBoYXNoQnVmZmVyID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoJ1NIQS0yNTYnLCBtc2dVaW50OCk7IC8vIGhhc2ggdGhlIG1lc3NhZ2VcblxuICAgIHJldHVybiBidWZmZXJUb0hleGEoaGFzaEJ1ZmZlcik7XG59XG5cbi8qKlxuICogVGhpbiB3cmFwcGVyIGFyb3VuZCBicm93c2VycycgbmF0aXZlIFN1YnRsZUNyeXB0byBmb3IgY29udmVuaWVuY2Ugb2YgdXNlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBobWFjU2hhMjU2KHNlY3JldDogc3RyaW5nLCBwYXlsb2FkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICBjb25zdCBhbGdvcml0aG06IEhtYWNLZXlHZW5QYXJhbXMgPSB7bmFtZTogJ0hNQUMnLCBoYXNoOiAnU0hBLTI1Nid9O1xuXG4gICAgY29uc3Qga2V5ID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoJ3JhdycsIGVuY29kZXIuZW5jb2RlKHNlY3JldCksIGFsZ29yaXRobSwgZmFsc2UsIFsnc2lnbiddKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBjcnlwdG8uc3VidGxlLnNpZ24oYWxnb3JpdGhtLm5hbWUsIGtleSwgZW5jb2Rlci5lbmNvZGUocGF5bG9hZCkpO1xuXG4gICAgcmV0dXJuIGJ1ZmZlclRvSGV4YShzaWduYXR1cmUpO1xufVxuIl19
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { cloneDeep, isEqual } from 'lodash-es';
|
|
2
|
-
/**
|
|
3
|
-
* Cumulate all changes made to an object over time
|
|
4
|
-
*/
|
|
5
|
-
export class CumulativeChanges {
|
|
6
|
-
original = {};
|
|
7
|
-
diff = {};
|
|
8
|
-
/**
|
|
9
|
-
* Initialize the original values, should be called exactly one time per instance
|
|
10
|
-
*/
|
|
11
|
-
initialize(originalValues) {
|
|
12
|
-
this.original = cloneDeep(originalValues);
|
|
13
|
-
this.diff = {};
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Returns a literal that contains only the keys whose values have been changed by this call or any previous calls.
|
|
17
|
-
*
|
|
18
|
-
* Eg:
|
|
19
|
-
*
|
|
20
|
-
* ```ts
|
|
21
|
-
* changes.initialize({a: 1, b: 2});
|
|
22
|
-
* changes.differences({a: 1, b: 3}); // => {b: 3}
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
differences(newValues) {
|
|
26
|
-
Object.keys(newValues).forEach(key => {
|
|
27
|
-
const newValue = newValues[key];
|
|
28
|
-
if (key in this.diff ||
|
|
29
|
-
(newValue !== undefined && (!(key in this.original) || !isEqual(this.original[key], newValue)))) {
|
|
30
|
-
this.diff[key] = newValue;
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
return Object.keys(this.diff).length ? this.diff : null;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Commit the given new values, so they are not treated as differences anymore.
|
|
37
|
-
*/
|
|
38
|
-
commit(newValues) {
|
|
39
|
-
this.original = {
|
|
40
|
-
...this.original,
|
|
41
|
-
...cloneDeep(newValues),
|
|
42
|
-
};
|
|
43
|
-
Object.keys(newValues).forEach(key => {
|
|
44
|
-
if (key in this.diff && isEqual(this.diff[key], newValues[key])) {
|
|
45
|
-
delete this.diff[key];
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VtdWxhdGl2ZS1jaGFuZ2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL2NsYXNzZXMvY3VtdWxhdGl2ZS1jaGFuZ2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRzdDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUNsQixRQUFRLEdBQU0sRUFBTyxDQUFDO0lBQ3RCLElBQUksR0FBZSxFQUFFLENBQUM7SUFFOUI7O09BRUc7SUFDSSxVQUFVLENBQUMsY0FBMkI7UUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLFdBQVcsQ0FBQyxTQUFzQjtRQUNyQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNqQyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEMsSUFDSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUk7Z0JBQ2hCLENBQUMsUUFBUSxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUNqRyxDQUFDO2dCQUNFLElBQUksQ0FBQyxJQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDO1lBQ3ZDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDNUQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLFNBQXNCO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDWixHQUFHLElBQUksQ0FBQyxRQUFRO1lBQ2hCLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztTQUMxQixDQUFDO1FBRUYsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDakMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM5RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUIsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjbG9uZURlZXAsIGlzRXF1YWx9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge0xpdGVyYWx9IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcblxuLyoqXG4gKiBDdW11bGF0ZSBhbGwgY2hhbmdlcyBtYWRlIHRvIGFuIG9iamVjdCBvdmVyIHRpbWVcbiAqL1xuZXhwb3J0IGNsYXNzIEN1bXVsYXRpdmVDaGFuZ2VzPFQgZXh0ZW5kcyBMaXRlcmFsPiB7XG4gICAgcHJpdmF0ZSBvcmlnaW5hbDogVCA9IHt9IGFzIFQ7XG4gICAgcHJpdmF0ZSBkaWZmOiBQYXJ0aWFsPFQ+ID0ge307XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIHRoZSBvcmlnaW5hbCB2YWx1ZXMsIHNob3VsZCBiZSBjYWxsZWQgZXhhY3RseSBvbmUgdGltZSBwZXIgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBwdWJsaWMgaW5pdGlhbGl6ZShvcmlnaW5hbFZhbHVlczogUmVhZG9ubHk8VD4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vcmlnaW5hbCA9IGNsb25lRGVlcChvcmlnaW5hbFZhbHVlcyk7XG4gICAgICAgIHRoaXMuZGlmZiA9IHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBsaXRlcmFsIHRoYXQgY29udGFpbnMgb25seSB0aGUga2V5cyB3aG9zZSB2YWx1ZXMgaGF2ZSBiZWVuIGNoYW5nZWQgYnkgdGhpcyBjYWxsIG9yIGFueSBwcmV2aW91cyBjYWxscy5cbiAgICAgKlxuICAgICAqIEVnOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBjaGFuZ2VzLmluaXRpYWxpemUoe2E6IDEsIGI6IDJ9KTtcbiAgICAgKiBjaGFuZ2VzLmRpZmZlcmVuY2VzKHthOiAxLCBiOiAzfSk7IC8vID0+IHtiOiAzfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBkaWZmZXJlbmNlcyhuZXdWYWx1ZXM6IFJlYWRvbmx5PFQ+KTogUGFydGlhbDxUPiB8IG51bGwge1xuICAgICAgICBPYmplY3Qua2V5cyhuZXdWYWx1ZXMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gbmV3VmFsdWVzW2tleV07XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAga2V5IGluIHRoaXMuZGlmZiB8fFxuICAgICAgICAgICAgICAgIChuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkICYmICghKGtleSBpbiB0aGlzLm9yaWdpbmFsKSB8fCAhaXNFcXVhbCh0aGlzLm9yaWdpbmFsW2tleV0sIG5ld1ZhbHVlKSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAodGhpcy5kaWZmIGFzIGFueSlba2V5XSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5kaWZmKS5sZW5ndGggPyB0aGlzLmRpZmYgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbW1pdCB0aGUgZ2l2ZW4gbmV3IHZhbHVlcywgc28gdGhleSBhcmUgbm90IHRyZWF0ZWQgYXMgZGlmZmVyZW5jZXMgYW55bW9yZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29tbWl0KG5ld1ZhbHVlczogUmVhZG9ubHk8VD4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vcmlnaW5hbCA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMub3JpZ2luYWwsXG4gICAgICAgICAgICAuLi5jbG9uZURlZXAobmV3VmFsdWVzKSxcbiAgICAgICAgfTtcblxuICAgICAgICBPYmplY3Qua2V5cyhuZXdWYWx1ZXMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gdGhpcy5kaWZmICYmIGlzRXF1YWwodGhpcy5kaWZmW2tleV0sIG5ld1ZhbHVlc1trZXldKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmRpZmZba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { DataSource } from '@angular/cdk/collections';
|
|
2
|
-
import { BehaviorSubject, Observable, Subject } from 'rxjs';
|
|
3
|
-
import { map, takeUntil } from 'rxjs/operators';
|
|
4
|
-
/**
|
|
5
|
-
* A NaturalDataSource will connect immediately, in order to know as soon as possible if
|
|
6
|
-
* we need to show a template at all (as seen in my-ichtus)
|
|
7
|
-
*
|
|
8
|
-
* It also allow some extra data manipulation
|
|
9
|
-
*/
|
|
10
|
-
export class NaturalDataSource extends DataSource {
|
|
11
|
-
ngUnsubscribe = new Subject();
|
|
12
|
-
internalData;
|
|
13
|
-
constructor(value) {
|
|
14
|
-
super();
|
|
15
|
-
if (value instanceof Observable) {
|
|
16
|
-
this.internalData = new BehaviorSubject(null);
|
|
17
|
-
value.pipe(takeUntil(this.ngUnsubscribe)).subscribe(res => (this.data = res));
|
|
18
|
-
}
|
|
19
|
-
else {
|
|
20
|
-
this.internalData = new BehaviorSubject(value);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
get internalDataObservable() {
|
|
24
|
-
return this.internalData;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Array of data that should be rendered by the table, where each object represents one row.
|
|
28
|
-
*/
|
|
29
|
-
get data() {
|
|
30
|
-
return this.internalData.value;
|
|
31
|
-
}
|
|
32
|
-
set data(data) {
|
|
33
|
-
this.internalData.next(data);
|
|
34
|
-
}
|
|
35
|
-
connect() {
|
|
36
|
-
return this.internalData.pipe(takeUntil(this.ngUnsubscribe), map(data => (data ? data.items : [])));
|
|
37
|
-
}
|
|
38
|
-
disconnect() {
|
|
39
|
-
this.ngUnsubscribe.next(); // unsubscribe everybody
|
|
40
|
-
this.ngUnsubscribe.complete(); // complete the stream, because we will never emit again
|
|
41
|
-
}
|
|
42
|
-
push(item) {
|
|
43
|
-
if (!this.data) {
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
const fullList = [...this.data.items];
|
|
47
|
-
fullList.push(item);
|
|
48
|
-
this.data = { ...this.data, items: fullList, length: fullList.length };
|
|
49
|
-
}
|
|
50
|
-
pop() {
|
|
51
|
-
if (!this.data) {
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
const fullList = [...this.data.items];
|
|
55
|
-
const removedElement = fullList.pop();
|
|
56
|
-
this.data = { ...this.data, items: fullList, length: fullList.length };
|
|
57
|
-
return removedElement;
|
|
58
|
-
}
|
|
59
|
-
remove(item) {
|
|
60
|
-
if (!this.data) {
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
const index = this.data.items.indexOf(item);
|
|
64
|
-
if (index > -1) {
|
|
65
|
-
const fullList = [...this.data.items];
|
|
66
|
-
fullList.splice(index, 1);
|
|
67
|
-
this.data = { ...this.data, items: fullList, length: fullList.length };
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvY2xhc3Nlcy9kYXRhLXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDcEQsT0FBTyxFQUFDLGVBQWUsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzFELE9BQU8sRUFBQyxHQUFHLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFXOUM7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8saUJBQTZFLFNBQVEsVUFFakc7SUFDb0IsYUFBYSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFcEMsWUFBWSxDQUE0QjtJQUV6RCxZQUFtQixLQUF3QjtRQUN2QyxLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUksS0FBSyxZQUFZLFVBQVUsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxlQUFlLENBQVcsSUFBSSxDQUFDLENBQUM7WUFDeEQsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEYsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksZUFBZSxDQUFXLEtBQUssQ0FBQyxDQUFDO1FBQzdELENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBVyxzQkFBc0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsSUFBSTtRQUNYLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQVcsSUFBSSxDQUFDLElBQWM7UUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVNLE9BQU87UUFDVixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUN6QixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDeEMsQ0FBQztJQUNOLENBQUM7SUFFTSxVQUFVO1FBQ2IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QjtRQUNuRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsd0RBQXdEO0lBQzNGLENBQUM7SUFFTSxJQUFJLENBQUMsSUFBbUI7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNiLE9BQU87UUFDWCxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRU0sR0FBRztRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDYixPQUFPO1FBQ1gsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUMsQ0FBQztRQUVyRSxPQUFPLGNBQWMsQ0FBQztJQUMxQixDQUFDO0lBRU0sTUFBTSxDQUFDLElBQW1CO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDYixPQUFPO1FBQ1gsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2IsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFDLENBQUM7UUFDekUsQ0FBQztJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGF0YVNvdXJjZX0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TGl0ZXJhbH0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBQYWdpbmF0ZWREYXRhPFQ+ID0ge1xuICAgIHJlYWRvbmx5IGl0ZW1zOiByZWFkb25seSBUW107XG4gICAgcmVhZG9ubHkgb2Zmc2V0PzogbnVtYmVyIHwgbnVsbDtcbiAgICByZWFkb25seSBwYWdlU2l6ZTogbnVtYmVyO1xuICAgIHJlYWRvbmx5IHBhZ2VJbmRleDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGxlbmd0aDogbnVtYmVyO1xufTtcblxuLyoqXG4gKiBBIE5hdHVyYWxEYXRhU291cmNlIHdpbGwgY29ubmVjdCBpbW1lZGlhdGVseSwgaW4gb3JkZXIgdG8ga25vdyBhcyBzb29uIGFzIHBvc3NpYmxlIGlmXG4gKiB3ZSBuZWVkIHRvIHNob3cgYSB0ZW1wbGF0ZSBhdCBhbGwgKGFzIHNlZW4gaW4gbXktaWNodHVzKVxuICpcbiAqIEl0IGFsc28gYWxsb3cgc29tZSBleHRyYSBkYXRhIG1hbmlwdWxhdGlvblxuICovXG5leHBvcnQgY2xhc3MgTmF0dXJhbERhdGFTb3VyY2U8VCBleHRlbmRzIFBhZ2luYXRlZERhdGE8TGl0ZXJhbD4gPSBQYWdpbmF0ZWREYXRhPExpdGVyYWw+PiBleHRlbmRzIERhdGFTb3VyY2U8XG4gICAgVFsnaXRlbXMnXVswXVxuPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJuYWxEYXRhOiBCZWhhdmlvclN1YmplY3Q8VCB8IG51bGw+O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHZhbHVlOiBPYnNlcnZhYmxlPFQ+IHwgVCkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxEYXRhID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUIHwgbnVsbD4obnVsbCk7XG4gICAgICAgICAgICB2YWx1ZS5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUocmVzID0+ICh0aGlzLmRhdGEgPSByZXMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxEYXRhID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUIHwgbnVsbD4odmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpbnRlcm5hbERhdGFPYnNlcnZhYmxlKCk6IE9ic2VydmFibGU8VCB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxEYXRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFycmF5IG9mIGRhdGEgdGhhdCBzaG91bGQgYmUgcmVuZGVyZWQgYnkgdGhlIHRhYmxlLCB3aGVyZSBlYWNoIG9iamVjdCByZXByZXNlbnRzIG9uZSByb3cuXG4gICAgICovXG4gICAgcHVibGljIGdldCBkYXRhKCk6IFQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxEYXRhLnZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZGF0YShkYXRhOiBUIHwgbnVsbCkge1xuICAgICAgICB0aGlzLmludGVybmFsRGF0YS5uZXh0KGRhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb25uZWN0KCk6IE9ic2VydmFibGU8VFsnaXRlbXMnXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbERhdGEucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgbWFwKGRhdGEgPT4gKGRhdGEgPyBkYXRhLml0ZW1zIDogW10pKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzY29ubmVjdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTsgLy8gdW5zdWJzY3JpYmUgZXZlcnlib2R5XG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpOyAvLyBjb21wbGV0ZSB0aGUgc3RyZWFtLCBiZWNhdXNlIHdlIHdpbGwgbmV2ZXIgZW1pdCBhZ2FpblxuICAgIH1cblxuICAgIHB1YmxpYyBwdXNoKGl0ZW06IFRbJ2l0ZW1zJ11bMF0pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZ1bGxMaXN0ID0gWy4uLnRoaXMuZGF0YS5pdGVtc107XG4gICAgICAgIGZ1bGxMaXN0LnB1c2goaXRlbSk7XG4gICAgICAgIHRoaXMuZGF0YSA9IHsuLi50aGlzLmRhdGEsIGl0ZW1zOiBmdWxsTGlzdCwgbGVuZ3RoOiBmdWxsTGlzdC5sZW5ndGh9O1xuICAgIH1cblxuICAgIHB1YmxpYyBwb3AoKTogVFsnaXRlbXMnXVswXSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICghdGhpcy5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmdWxsTGlzdCA9IFsuLi50aGlzLmRhdGEuaXRlbXNdO1xuICAgICAgICBjb25zdCByZW1vdmVkRWxlbWVudCA9IGZ1bGxMaXN0LnBvcCgpO1xuICAgICAgICB0aGlzLmRhdGEgPSB7Li4udGhpcy5kYXRhLCBpdGVtczogZnVsbExpc3QsIGxlbmd0aDogZnVsbExpc3QubGVuZ3RofTtcblxuICAgICAgICByZXR1cm4gcmVtb3ZlZEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZShpdGVtOiBUWydpdGVtcyddWzBdKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZGF0YS5pdGVtcy5pbmRleE9mKGl0ZW0pO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgY29uc3QgZnVsbExpc3QgPSBbLi4udGhpcy5kYXRhLml0ZW1zXTtcbiAgICAgICAgICAgIGZ1bGxMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB7Li4udGhpcy5kYXRhLCBpdGVtczogZnVsbExpc3QsIGxlbmd0aDogZnVsbExpc3QubGVuZ3RofTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { importProvidersFrom } from '@angular/core';
|
|
2
|
-
import { MatDialogModule } from '@angular/material/dialog';
|
|
3
|
-
import { localStorageProvider, sessionStorageProvider } from '../modules/common/services/memory-storage';
|
|
4
|
-
import { MatSnackBarModule } from '@angular/material/snack-bar';
|
|
5
|
-
/**
|
|
6
|
-
* Minimal, global providers for Natural to work
|
|
7
|
-
*/
|
|
8
|
-
export const naturalProviders = [
|
|
9
|
-
importProvidersFrom([MatDialogModule, MatSnackBarModule]),
|
|
10
|
-
sessionStorageProvider,
|
|
11
|
-
localStorageProvider,
|
|
12
|
-
];
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL2NsYXNzZXMvcHJvdmlkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsbUJBQW1CLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxzQkFBc0IsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQ3ZHLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBRTlEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQW1DO0lBQzVELG1CQUFtQixDQUFDLENBQUMsZUFBZSxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDekQsc0JBQXNCO0lBQ3RCLG9CQUFvQjtDQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBcHBsaWNhdGlvbkNvbmZpZywgaW1wb3J0UHJvdmlkZXJzRnJvbX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01hdERpYWxvZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7bG9jYWxTdG9yYWdlUHJvdmlkZXIsIHNlc3Npb25TdG9yYWdlUHJvdmlkZXJ9IGZyb20gJy4uL21vZHVsZXMvY29tbW9uL3NlcnZpY2VzL21lbW9yeS1zdG9yYWdlJztcbmltcG9ydCB7TWF0U25hY2tCYXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5cbi8qKlxuICogTWluaW1hbCwgZ2xvYmFsIHByb3ZpZGVycyBmb3IgTmF0dXJhbCB0byB3b3JrXG4gKi9cbmV4cG9ydCBjb25zdCBuYXR1cmFsUHJvdmlkZXJzOiBBcHBsaWNhdGlvbkNvbmZpZ1sncHJvdmlkZXJzJ10gPSBbXG4gICAgaW1wb3J0UHJvdmlkZXJzRnJvbShbTWF0RGlhbG9nTW9kdWxlLCBNYXRTbmFja0Jhck1vZHVsZV0pLFxuICAgIHNlc3Npb25TdG9yYWdlUHJvdmlkZXIsXG4gICAgbG9jYWxTdG9yYWdlUHJvdmlkZXIsXG5dO1xuIl19
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { cloneDeep, groupBy, uniq } from 'lodash-es';
|
|
2
|
-
import { LogicalOperator } from '../modules/search/classes/graphql-doctrine.types';
|
|
3
|
-
export function hasMixedGroupLogic(groups) {
|
|
4
|
-
// Complete lack of definition by fallback on AND operator
|
|
5
|
-
const completedGroups = cloneDeep(groups).map(group => {
|
|
6
|
-
if (!group.groupLogic) {
|
|
7
|
-
group.groupLogic = LogicalOperator.AND;
|
|
8
|
-
}
|
|
9
|
-
return group;
|
|
10
|
-
});
|
|
11
|
-
const groupLogics = uniq(Object.keys(groupBy(completedGroups.slice(1), 'groupLogic')));
|
|
12
|
-
return groupLogics.length > 1;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktdmFyaWFibGUtbWFuYWdlci11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9jbGFzc2VzL3F1ZXJ5LXZhcmlhYmxlLW1hbmFnZXItdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxrREFBa0QsQ0FBQztBQUdqRixNQUFNLFVBQVUsa0JBQWtCLENBQUMsTUFBaUI7SUFDaEQsMERBQTBEO0lBQzFELE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixLQUFLLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUM7UUFDM0MsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXZGLE9BQU8sV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDbEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y2xvbmVEZWVwLCBncm91cEJ5LCB1bmlxfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtMb2dpY2FsT3BlcmF0b3J9IGZyb20gJy4uL21vZHVsZXMvc2VhcmNoL2NsYXNzZXMvZ3JhcGhxbC1kb2N0cmluZS50eXBlcyc7XG5pbXBvcnQge0xpdGVyYWx9IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc01peGVkR3JvdXBMb2dpYyhncm91cHM6IExpdGVyYWxbXSk6IGJvb2xlYW4ge1xuICAgIC8vIENvbXBsZXRlIGxhY2sgb2YgZGVmaW5pdGlvbiBieSBmYWxsYmFjayBvbiBBTkQgb3BlcmF0b3JcbiAgICBjb25zdCBjb21wbGV0ZWRHcm91cHMgPSBjbG9uZURlZXAoZ3JvdXBzKS5tYXAoZ3JvdXAgPT4ge1xuICAgICAgICBpZiAoIWdyb3VwLmdyb3VwTG9naWMpIHtcbiAgICAgICAgICAgIGdyb3VwLmdyb3VwTG9naWMgPSBMb2dpY2FsT3BlcmF0b3IuQU5EO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdyb3VwO1xuICAgIH0pO1xuXG4gICAgY29uc3QgZ3JvdXBMb2dpY3MgPSB1bmlxKE9iamVjdC5rZXlzKGdyb3VwQnkoY29tcGxldGVkR3JvdXBzLnNsaWNlKDEpLCAnZ3JvdXBMb2dpYycpKSk7XG5cbiAgICByZXR1cm4gZ3JvdXBMb2dpY3MubGVuZ3RoID4gMTtcbn1cbiJdfQ==
|
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
import { cloneDeep, defaultsDeep, mergeWith, omit } from 'lodash-es';
|
|
2
|
-
import { BehaviorSubject } from 'rxjs';
|
|
3
|
-
import { mergeOverrideArray } from './utility';
|
|
4
|
-
import { hasMixedGroupLogic } from './query-variable-manager-utils';
|
|
5
|
-
export var SortingOrder;
|
|
6
|
-
(function (SortingOrder) {
|
|
7
|
-
SortingOrder["ASC"] = "ASC";
|
|
8
|
-
SortingOrder["DESC"] = "DESC";
|
|
9
|
-
})(SortingOrder || (SortingOrder = {}));
|
|
10
|
-
/**
|
|
11
|
-
* During lodash merge, concat arrays
|
|
12
|
-
*/
|
|
13
|
-
function mergeConcatArray(destValue, source) {
|
|
14
|
-
if (Array.isArray(source)) {
|
|
15
|
-
if (destValue) {
|
|
16
|
-
return destValue.concat(source);
|
|
17
|
-
}
|
|
18
|
-
else {
|
|
19
|
-
return source;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Filter manager stores a set of channels that contain a variable object and exposes an observable "variables" that updates with the result
|
|
25
|
-
* of all channels merged together.
|
|
26
|
-
*
|
|
27
|
-
* A channel is supposed to be used by a given aspect of the GUI (pagination, sorting, search, others ?).
|
|
28
|
-
*
|
|
29
|
-
* ```ts
|
|
30
|
-
* const fm = new QueryVariablesManager();
|
|
31
|
-
* fm.merge('componentA-variables', {a : [1, 2, 3]});
|
|
32
|
-
* ```
|
|
33
|
-
*
|
|
34
|
-
* Variables attributes is a BehaviorSubject. That mean it's not mandatory to subscribe, we can just call getValue or value attributes on
|
|
35
|
-
* it :
|
|
36
|
-
*
|
|
37
|
-
* ```ts
|
|
38
|
-
* console.log(fm.variables.value); // {a : [1, 2, 3]}
|
|
39
|
-
* ```
|
|
40
|
-
*
|
|
41
|
-
* Set new variables for 'componentA-variables':
|
|
42
|
-
*
|
|
43
|
-
* ```ts
|
|
44
|
-
* fm.merge('componentA-variables', {a : [1, 2]});
|
|
45
|
-
* console.log(fm.variables.value); // {a : [1, 2, 3]}
|
|
46
|
-
* ```
|
|
47
|
-
*
|
|
48
|
-
* Set new variables for new channel:
|
|
49
|
-
*
|
|
50
|
-
* ```ts
|
|
51
|
-
* fm.merge('componentB-variables', {a : [3, 4]});
|
|
52
|
-
* console.log(fm.variables.value); // {a : [1, 2, 3, 4]}
|
|
53
|
-
* ```
|
|
54
|
-
*/
|
|
55
|
-
export class NaturalQueryVariablesManager {
|
|
56
|
-
variables = new BehaviorSubject(undefined);
|
|
57
|
-
channels = new Map();
|
|
58
|
-
constructor(queryVariablesManager) {
|
|
59
|
-
if (queryVariablesManager) {
|
|
60
|
-
this.channels = queryVariablesManager.getChannelsCopy();
|
|
61
|
-
this.updateVariables();
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Set or override all the variables that may exist in the given channel
|
|
66
|
-
*/
|
|
67
|
-
set(channelName, variables) {
|
|
68
|
-
// cloneDeep to change reference and prevent some interactions when merge
|
|
69
|
-
if (variables) {
|
|
70
|
-
this.channels.set(channelName, cloneDeep(variables));
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
this.channels.delete(channelName);
|
|
74
|
-
}
|
|
75
|
-
this.updateVariables();
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Return a deep clone of the variables for the given channel name.
|
|
79
|
-
*
|
|
80
|
-
* Avoid returning the same reference to prevent an attribute change, then another channel update that would
|
|
81
|
-
* used this changed attribute without having explicitly asked QueryVariablesManager to update it.
|
|
82
|
-
*/
|
|
83
|
-
get(channelName) {
|
|
84
|
-
return cloneDeep(this.channels.get(channelName));
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Merge variable into a channel, overriding arrays in same channel / key
|
|
88
|
-
*/
|
|
89
|
-
merge(channelName, newVariables) {
|
|
90
|
-
const variables = this.channels.get(channelName);
|
|
91
|
-
if (variables) {
|
|
92
|
-
mergeWith(variables, cloneDeep(newVariables), mergeOverrideArray); // merge preserves references, cloneDeep prevent that
|
|
93
|
-
this.updateVariables();
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
this.set(channelName, newVariables);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Apply default values to a channel
|
|
101
|
-
* Note : lodash defaults only defines values on destinations keys that are undefined
|
|
102
|
-
*/
|
|
103
|
-
defaults(channelName, newVariables) {
|
|
104
|
-
const variables = this.channels.get(channelName);
|
|
105
|
-
if (variables) {
|
|
106
|
-
defaultsDeep(variables, newVariables);
|
|
107
|
-
this.updateVariables();
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
this.set(channelName, newVariables);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
getChannelsCopy() {
|
|
114
|
-
return new Map(this.channels);
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Merge channels in a single object
|
|
118
|
-
* Arrays are concatenated
|
|
119
|
-
* Filter groups are combined smartly (see mergeGroupList)
|
|
120
|
-
*/
|
|
121
|
-
updateVariables() {
|
|
122
|
-
const merged = {};
|
|
123
|
-
this.channels.forEach(channelVariables => {
|
|
124
|
-
if (channelVariables.filter) {
|
|
125
|
-
// Merge filter's groups first
|
|
126
|
-
const groups = this.mergeGroupList(merged.filter?.groups ? merged.filter.groups : [], channelVariables.filter.groups || []);
|
|
127
|
-
// Merge filter key (that contain groups)
|
|
128
|
-
if (groups?.length) {
|
|
129
|
-
if (merged.filter) {
|
|
130
|
-
merged.filter.groups = groups;
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
merged.filter = { groups: groups };
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
mergeWith(merged, { filter: channelVariables.filter }, mergeConcatArray);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
// Merge other attributes than filter
|
|
141
|
-
mergeWith(merged, omit(channelVariables, 'filter'), mergeConcatArray);
|
|
142
|
-
});
|
|
143
|
-
this.variables.next(merged);
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Cross merge two filters
|
|
147
|
-
* Only accepts groups with same groupLogic (ignores the first one, because there is no groupLogic in this one)
|
|
148
|
-
* @throws In case two non-empty lists of groups are given and at one of them mix groupLogic value, throws an error
|
|
149
|
-
*/
|
|
150
|
-
mergeGroupList(groupsA, groupsB) {
|
|
151
|
-
if (groupsA.length === 0 && groupsB.length === 0) {
|
|
152
|
-
return []; // empty listings, return empty lists
|
|
153
|
-
}
|
|
154
|
-
if (groupsA.length === 0 && groupsB.length > 0) {
|
|
155
|
-
return groupsB; // One list is empty, return the one that is not
|
|
156
|
-
}
|
|
157
|
-
if (groupsB.length === 0 && groupsA.length > 0) {
|
|
158
|
-
return groupsA; // One list is empty, return the one that is not
|
|
159
|
-
}
|
|
160
|
-
const groups = [];
|
|
161
|
-
if (hasMixedGroupLogic(groupsA) || hasMixedGroupLogic(groupsB)) {
|
|
162
|
-
throw Error('QueryVariables groups contain mixed group logics');
|
|
163
|
-
}
|
|
164
|
-
groupsA.forEach(groupA => {
|
|
165
|
-
groupsB.forEach(groupB => {
|
|
166
|
-
groups.push(mergeWith(cloneDeep(groupA), groupB, mergeConcatArray));
|
|
167
|
-
});
|
|
168
|
-
});
|
|
169
|
-
return groups;
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktdmFyaWFibGUtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9jbGFzc2VzL3F1ZXJ5LXZhcmlhYmxlLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNuRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXJDLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUM3QyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQXNCbEUsTUFBTSxDQUFOLElBQVksWUFHWDtBQUhELFdBQVksWUFBWTtJQUNwQiwyQkFBVyxDQUFBO0lBQ1gsNkJBQWEsQ0FBQTtBQUNqQixDQUFDLEVBSFcsWUFBWSxLQUFaLFlBQVksUUFHdkI7QUFFRDs7R0FFRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsU0FBYyxFQUFFLE1BQVc7SUFDakQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDeEIsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNaLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sTUFBTSxDQUFDO1FBQ2xCLENBQUM7SUFDTCxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JHO0FBQ0gsTUFBTSxPQUFPLDRCQUE0QjtJQUNyQixTQUFTLEdBQW1DLElBQUksZUFBZSxDQUFnQixTQUFTLENBQUMsQ0FBQztJQUN6RixRQUFRLEdBQTRCLElBQUksR0FBRyxFQUFzQixDQUFDO0lBRW5GLFlBQW1CLHFCQUF1RDtRQUN0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QixPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUN4RSxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjbG9uZURlZXAsIGRlZmF1bHRzRGVlcCwgbWVyZ2VXaXRoLCBvbWl0fSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtMaXRlcmFsfSBmcm9tICcuLi90eXBlcy90eXBlcyc7XG5pbXBvcnQge21lcmdlT3ZlcnJpZGVBcnJheX0gZnJvbSAnLi91dGlsaXR5JztcbmltcG9ydCB7aGFzTWl4ZWRHcm91cExvZ2ljfSBmcm9tICcuL3F1ZXJ5LXZhcmlhYmxlLW1hbmFnZXItdXRpbHMnO1xuXG5leHBvcnQgdHlwZSBRdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlZHVuZGFudC10eXBlLWNvbnN0aXR1ZW50c1xuICAgIGZpbHRlcj86IGFueSB8IG51bGw7XG4gICAgcGFnaW5hdGlvbj86IFBhZ2luYXRpb25JbnB1dCB8IG51bGw7XG4gICAgc29ydGluZz86IFNvcnRpbmdbXSB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBQYWdpbmF0aW9uSW5wdXQgPSB7XG4gICAgb2Zmc2V0PzogbnVtYmVyIHwgbnVsbDtcbiAgICBwYWdlSW5kZXg/OiBudW1iZXIgfCBudWxsO1xuICAgIHBhZ2VTaXplPzogbnVtYmVyIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIFNvcnRpbmcgPSB7XG4gICAgZmllbGQ6IGFueTtcbiAgICBvcmRlcj86IFNvcnRpbmdPcmRlciB8IG51bGw7XG4gICAgbnVsbEFzSGlnaGVzdD86IGJvb2xlYW4gfCBudWxsO1xuICAgIGVtcHR5U3RyaW5nQXNIaWdoZXN0PzogYm9vbGVhbiB8IG51bGw7XG59O1xuXG5leHBvcnQgZW51bSBTb3J0aW5nT3JkZXIge1xuICAgIEFTQyA9ICdBU0MnLFxuICAgIERFU0MgPSAnREVTQycsXG59XG5cbi8qKlxuICogRHVyaW5nIGxvZGFzaCBtZXJnZSwgY29uY2F0IGFycmF5c1xuICovXG5mdW5jdGlvbiBtZXJnZUNvbmNhdEFycmF5KGRlc3RWYWx1ZTogYW55LCBzb3VyY2U6IGFueSk6IGFueSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICBpZiAoZGVzdFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVzdFZhbHVlLmNvbmNhdChzb3VyY2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBGaWx0ZXIgbWFuYWdlciBzdG9yZXMgYSBzZXQgb2YgY2hhbm5lbHMgdGhhdCBjb250YWluIGEgdmFyaWFibGUgb2JqZWN0IGFuZCBleHBvc2VzIGFuIG9ic2VydmFibGUgXCJ2YXJpYWJsZXNcIiB0aGF0IHVwZGF0ZXMgd2l0aCB0aGUgcmVzdWx0XG4gKiBvZiBhbGwgY2hhbm5lbHMgbWVyZ2VkIHRvZ2V0aGVyLlxuICpcbiAqIEEgY2hhbm5lbCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGJ5IGEgZ2l2ZW4gYXNwZWN0IG9mIHRoZSBHVUkgKHBhZ2luYXRpb24sIHNvcnRpbmcsIHNlYXJjaCwgb3RoZXJzID8pLlxuICpcbiAqIGBgYHRzXG4gKiBjb25zdCBmbSA9IG5ldyBRdWVyeVZhcmlhYmxlc01hbmFnZXIoKTtcbiAqIGZtLm1lcmdlKCdjb21wb25lbnRBLXZhcmlhYmxlcycsIHthIDogWzEsIDIsIDNdfSk7XG4gKiBgYGBcbiAqXG4gKiBWYXJpYWJsZXMgYXR0cmlidXRlcyBpcyBhIEJlaGF2aW9yU3ViamVjdC4gVGhhdCBtZWFuIGl0J3Mgbm90IG1hbmRhdG9yeSB0byBzdWJzY3JpYmUsIHdlIGNhbiBqdXN0IGNhbGwgZ2V0VmFsdWUgb3IgdmFsdWUgYXR0cmlidXRlcyBvblxuICogaXQgOlxuICpcbiAqIGBgYHRzXG4gKiBjb25zb2xlLmxvZyhmbS52YXJpYWJsZXMudmFsdWUpOyAvLyB7YSA6IFsxLCAyLCAzXX1cbiAqIGBgYFxuICpcbiAqIFNldCBuZXcgdmFyaWFibGVzIGZvciAnY29tcG9uZW50QS12YXJpYWJsZXMnOlxuICpcbiAqIGBgYHRzXG4gKiBmbS5tZXJnZSgnY29tcG9uZW50QS12YXJpYWJsZXMnLCB7YSA6IFsxLCAyXX0pO1xuICogY29uc29sZS5sb2coZm0udmFyaWFibGVzLnZhbHVlKTsgLy8ge2EgOiBbMSwgMiwgM119XG4gKiBgYGBcbiAqXG4gKiBTZXQgbmV3IHZhcmlhYmxlcyBmb3IgbmV3IGNoYW5uZWw6XG4gKlxuICogYGBgdHNcbiAqIGZtLm1lcmdlKCdjb21wb25lbnRCLXZhcmlhYmxlcycsIHthIDogWzMsIDRdfSk7XG4gKiBjb25zb2xlLmxvZyhmbS52YXJpYWJsZXMudmFsdWUpOyAvLyB7YSA6IFsxLCAyLCAzLCA0XX1cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcjxUIGV4dGVuZHMgUXVlcnlWYXJpYWJsZXMgPSBRdWVyeVZhcmlhYmxlcz4ge1xuICAgIHB1YmxpYyByZWFkb25seSB2YXJpYWJsZXM6IEJlaGF2aW9yU3ViamVjdDxUIHwgdW5kZWZpbmVkPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5uZWxzOiBNYXA8c3RyaW5nLCBQYXJ0aWFsPFQ+PiA9IG5ldyBNYXA8c3RyaW5nLCBQYXJ0aWFsPFQ+PigpO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHF1ZXJ5VmFyaWFibGVzTWFuYWdlcj86IE5hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXI8VD4pIHtcbiAgICAgICAgaWYgKHF1ZXJ5VmFyaWFibGVzTWFuYWdlcikge1xuICAgICAgICAgICAgdGhpcy5jaGFubmVscyA9IHF1ZXJ5VmFyaWFibGVzTWFuYWdlci5nZXRDaGFubmVsc0NvcHkoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmFyaWFibGVzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgb3Igb3ZlcnJpZGUgYWxsIHRoZSB2YXJpYWJsZXMgdGhhdCBtYXkgZXhpc3QgaW4gdGhlIGdpdmVuIGNoYW5uZWxcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0KGNoYW5uZWxOYW1lOiBzdHJpbmcsIHZhcmlhYmxlczogUGFydGlhbDxUPiB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgLy8gY2xvbmVEZWVwIHRvIGNoYW5nZSByZWZlcmVuY2UgYW5kIHByZXZlbnQgc29tZSBpbnRlcmFjdGlvbnMgd2hlbiBtZXJnZVxuICAgICAgICBpZiAodmFyaWFibGVzKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5uZWxzLnNldChjaGFubmVsTmFtZSwgY2xvbmVEZWVwKHZhcmlhYmxlcykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGFubmVscy5kZWxldGUoY2hhbm5lbE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlVmFyaWFibGVzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgZGVlcCBjbG9uZSBvZiB0aGUgdmFyaWFibGVzIGZvciB0aGUgZ2l2ZW4gY2hhbm5lbCBuYW1lLlxuICAgICAqXG4gICAgICogQXZvaWQgcmV0dXJuaW5nIHRoZSBzYW1lIHJlZmVyZW5jZSB0byBwcmV2ZW50IGFuIGF0dHJpYnV0ZSBjaGFuZ2UsIHRoZW4gYW5vdGhlciBjaGFubmVsIHVwZGF0ZSB0aGF0IHdvdWxkXG4gICAgICogdXNlZCB0aGlzIGNoYW5nZWQgYXR0cmlidXRlIHdpdGhvdXQgaGF2aW5nIGV4cGxpY2l0bHkgYXNrZWQgUXVlcnlWYXJpYWJsZXNNYW5hZ2VyIHRvIHVwZGF0ZSBpdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0KGNoYW5uZWxOYW1lOiBzdHJpbmcpOiBQYXJ0aWFsPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIGNsb25lRGVlcCh0aGlzLmNoYW5uZWxzLmdldChjaGFubmVsTmFtZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1lcmdlIHZhcmlhYmxlIGludG8gYSBjaGFubmVsLCBvdmVycmlkaW5nIGFycmF5cyBpbiBzYW1lIGNoYW5uZWwgLyBrZXlcbiAgICAgKi9cbiAgICBwdWJsaWMgbWVyZ2UoY2hhbm5lbE5hbWU6IHN0cmluZywgbmV3VmFyaWFibGVzOiBQYXJ0aWFsPFQ+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IHRoaXMuY2hhbm5lbHMuZ2V0KGNoYW5uZWxOYW1lKTtcbiAgICAgICAgaWYgKHZhcmlhYmxlcykge1xuICAgICAgICAgICAgbWVyZ2VXaXRoKHZhcmlhYmxlcywgY2xvbmVEZWVwKG5ld1ZhcmlhYmxlcyksIG1lcmdlT3ZlcnJpZGVBcnJheSk7IC8vIG1lcmdlIHByZXNlcnZlcyByZWZlcmVuY2VzLCBjbG9uZURlZXAgcHJldmVudCB0aGF0XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhcmlhYmxlcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXQoY2hhbm5lbE5hbWUsIG5ld1ZhcmlhYmxlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBseSBkZWZhdWx0IHZhbHVlcyB0byBhIGNoYW5uZWxcbiAgICAgKiBOb3RlIDogbG9kYXNoIGRlZmF1bHRzIG9ubHkgZGVmaW5lcyB2YWx1ZXMgb24gZGVzdGluYXRpb25zIGtleXMgdGhhdCBhcmUgdW5kZWZpbmVkXG4gICAgICovXG4gICAgcHVibGljIGRlZmF1bHRzKGNoYW5uZWxOYW1lOiBzdHJpbmcsIG5ld1ZhcmlhYmxlczogUGFydGlhbDxUPik6IHZvaWQge1xuICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSB0aGlzLmNoYW5uZWxzLmdldChjaGFubmVsTmFtZSk7XG4gICAgICAgIGlmICh2YXJpYWJsZXMpIHtcbiAgICAgICAgICAgIGRlZmF1bHRzRGVlcCh2YXJpYWJsZXMsIG5ld1ZhcmlhYmxlcyk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhcmlhYmxlcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXQoY2hhbm5lbE5hbWUsIG5ld1ZhcmlhYmxlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENoYW5uZWxzQ29weSgpOiBNYXA8c3RyaW5nLCBQYXJ0aWFsPFQ+PiB7XG4gICAgICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgUGFydGlhbDxUPj4odGhpcy5jaGFubmVscyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWVyZ2UgY2hhbm5lbHMgaW4gYSBzaW5nbGUgb2JqZWN0XG4gICAgICogQXJyYXlzIGFyZSBjb25jYXRlbmF0ZWRcbiAgICAgKiBGaWx0ZXIgZ3JvdXBzIGFyZSBjb21iaW5lZCBzbWFydGx5IChzZWUgbWVyZ2VHcm91cExpc3QpXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVWYXJpYWJsZXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1lcmdlZDogVCA9IHt9IGFzIFQ7XG5cbiAgICAgICAgdGhpcy5jaGFubmVscy5mb3JFYWNoKGNoYW5uZWxWYXJpYWJsZXMgPT4ge1xuICAgICAgICAgICAgaWYgKGNoYW5uZWxWYXJpYWJsZXMuZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgLy8gTWVyZ2UgZmlsdGVyJ3MgZ3JvdXBzIGZpcnN0XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBzID0gdGhpcy5tZXJnZUdyb3VwTGlzdChcbiAgICAgICAgICAgICAgICAgICAgbWVyZ2VkLmZpbHRlcj8uZ3JvdXBzID8gbWVyZ2VkLmZpbHRlci5ncm91cHMgOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFZhcmlhYmxlcy5maWx0ZXIuZ3JvdXBzIHx8IFtdLFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAvLyBNZXJnZSBmaWx0ZXIga2V5ICh0aGF0IGNvbnRhaW4gZ3JvdXBzKVxuICAgICAgICAgICAgICAgIGlmIChncm91cHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobWVyZ2VkLmZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VkLmZpbHRlci5ncm91cHMgPSBncm91cHM7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXJnZWQuZmlsdGVyID0ge2dyb3VwczogZ3JvdXBzfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG1lcmdlV2l0aChtZXJnZWQsIHtmaWx0ZXI6IGNoYW5uZWxWYXJpYWJsZXMuZmlsdGVyfSwgbWVyZ2VDb25jYXRBcnJheSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNZXJnZSBvdGhlciBhdHRyaWJ1dGVzIHRoYW4gZmlsdGVyXG4gICAgICAgICAgICBtZXJnZVdpdGgobWVyZ2VkLCBvbWl0KGNoYW5uZWxWYXJpYWJsZXMsICdmaWx0ZXInKSwgbWVyZ2VDb25jYXRBcnJheSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudmFyaWFibGVzLm5leHQobWVyZ2VkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcm9zcyBtZXJnZSB0d28gZmlsdGVyc1xuICAgICAqIE9ubHkgYWNjZXB0cyBncm91cHMgd2l0aCBzYW1lIGdyb3VwTG9naWMgKGlnbm9yZXMgdGhlIGZpcnN0IG9uZSwgYmVjYXVzZSB0aGVyZSBpcyBubyBncm91cExvZ2ljIGluIHRoaXMgb25lKVxuICAgICAqIEB0aHJvd3MgSW4gY2FzZSB0d28gbm9uLWVtcHR5IGxpc3RzIG9mIGdyb3VwcyBhcmUgZ2l2ZW4gYW5kIGF0IG9uZSBvZiB0aGVtIG1peCBncm91cExvZ2ljIHZhbHVlLCB0aHJvd3MgYW4gZXJyb3JcbiAgICAgKi9cbiAgICBwcml2YXRlIG1lcmdlR3JvdXBMaXN0KGdyb3Vwc0E6IExpdGVyYWxbXSwgZ3JvdXBzQjogTGl0ZXJhbFtdKTogTGl0ZXJhbCB7XG4gICAgICAgIGlmIChncm91cHNBLmxlbmd0aCA9PT0gMCAmJiBncm91cHNCLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdOyAvLyBlbXB0eSBsaXN0aW5ncywgcmV0dXJuIGVtcHR5IGxpc3RzXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZ3JvdXBzQS5sZW5ndGggPT09IDAgJiYgZ3JvdXBzQi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBzQjsgLy8gT25lIGxpc3QgaXMgZW1wdHksIHJldHVybiB0aGUgb25lIHRoYXQgaXMgbm90XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZ3JvdXBzQi5sZW5ndGggPT09IDAgJiYgZ3JvdXBzQS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBzQTsgLy8gT25lIGxpc3QgaXMgZW1wdHksIHJldHVybiB0aGUgb25lIHRoYXQgaXMgbm90XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBncm91cHM6IExpdGVyYWxbXSA9IFtdO1xuXG4gICAgICAgIGlmIChoYXNNaXhlZEdyb3VwTG9naWMoZ3JvdXBzQSkgfHwgaGFzTWl4ZWRHcm91cExvZ2ljKGdyb3Vwc0IpKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignUXVlcnlWYXJpYWJsZXMgZ3JvdXBzIGNvbnRhaW4gbWl4ZWQgZ3JvdXAgbG9naWNzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBncm91cHNBLmZvckVhY2goZ3JvdXBBID0+IHtcbiAgICAgICAgICAgIGdyb3Vwc0IuZm9yRWFjaChncm91cEIgPT4ge1xuICAgICAgICAgICAgICAgIGdyb3Vwcy5wdXNoKG1lcmdlV2l0aChjbG9uZURlZXAoZ3JvdXBBKSwgZ3JvdXBCLCBtZXJnZUNvbmNhdEFycmF5KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGdyb3VwcztcbiAgICB9XG59XG4iXX0=
|