@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.
Files changed (183) hide show
  1. package/fesm2022/ecodev-natural-vanilla.mjs +1193 -0
  2. package/fesm2022/ecodev-natural-vanilla.mjs.map +1 -0
  3. package/fesm2022/ecodev-natural.mjs +436 -425
  4. package/fesm2022/ecodev-natural.mjs.map +1 -1
  5. package/lib/classes/network-activity.service.d.ts +54 -0
  6. package/lib/classes/validators.d.ts +1 -1
  7. package/lib/modules/columns-picker/columns-picker.component.d.ts +2 -2
  8. package/lib/modules/common/services/seo.provider.d.ts +2 -2
  9. package/lib/modules/dropdown-components/type-select/type-select.component.d.ts +1 -1
  10. package/lib/modules/file/abstract-file.d.ts +6 -3
  11. package/lib/modules/file/component/file.component.d.ts +2 -2
  12. package/lib/modules/file/file-drop.directive.d.ts +2 -3
  13. package/lib/modules/fixed-button-detail/fixed-button-detail.component.d.ts +2 -3
  14. package/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.d.ts +3 -3
  15. package/lib/modules/icon/icon.module.d.ts +2 -2
  16. package/lib/modules/panels/panels.service.d.ts +1 -2
  17. package/lib/modules/relations/relations.component.d.ts +3 -3
  18. package/lib/modules/search/dropdown-container/dropdown-container.component.d.ts +2 -3
  19. package/lib/modules/search/group/group.component.d.ts +2 -3
  20. package/lib/modules/search/input/input.component.d.ts +5 -5
  21. package/lib/modules/search/search/search.component.d.ts +2 -2
  22. package/lib/modules/select/abstract-select.component.d.ts +3 -3
  23. package/lib/modules/select/select/select.component.d.ts +1 -1
  24. package/lib/modules/sidenav/sidenav-container/sidenav-container.component.d.ts +1 -1
  25. package/lib/modules/table-button/table-button.component.d.ts +4 -2
  26. package/package.json +16 -14
  27. package/public-api.d.ts +1 -0
  28. package/src/lib/_natural.theme.scss +1 -2
  29. package/vanilla/index.d.ts +5 -0
  30. package/vanilla/package.json +3 -0
  31. package/vanilla/public-api.d.ts +11 -0
  32. package/vanilla/src/lib/classes/crypto.d.ts +8 -0
  33. package/vanilla/src/lib/classes/data-source.d.ts +32 -0
  34. package/vanilla/src/lib/classes/query-variable-manager-utils.d.ts +2 -0
  35. package/vanilla/src/lib/classes/query-variable-manager.d.ts +91 -0
  36. package/vanilla/src/lib/classes/signing.d.ts +7 -0
  37. package/vanilla/src/lib/classes/utility.d.ts +77 -0
  38. package/vanilla/src/lib/modules/search/classes/graphql-doctrine.types.d.ts +83 -0
  39. package/vanilla/src/lib/modules/search/classes/utils.d.ts +17 -0
  40. package/vanilla/src/lib/modules/search/types/dropdown-component.d.ts +20 -0
  41. package/vanilla/src/lib/modules/search/types/facet.d.ts +75 -0
  42. package/vanilla/src/lib/modules/search/types/values.d.ts +32 -0
  43. package/vanilla/src/lib/services/abstract-model.service.d.ts +244 -0
  44. package/vanilla/src/lib/services/debounce.service.d.ts +52 -0
  45. package/vanilla/src/lib/types/types.d.ts +100 -0
  46. package/esm2022/ecodev-natural.mjs +0 -5
  47. package/esm2022/lib/classes/abstract-detail.mjs +0 -229
  48. package/esm2022/lib/classes/abstract-editable-list.mjs +0 -99
  49. package/esm2022/lib/classes/abstract-list.mjs +0 -461
  50. package/esm2022/lib/classes/abstract-navigable-list.mjs +0 -133
  51. package/esm2022/lib/classes/apollo-utils.mjs +0 -59
  52. package/esm2022/lib/classes/crypto.mjs +0 -23
  53. package/esm2022/lib/classes/cumulative-changes.mjs +0 -50
  54. package/esm2022/lib/classes/data-source.mjs +0 -71
  55. package/esm2022/lib/classes/providers.mjs +0 -13
  56. package/esm2022/lib/classes/query-variable-manager-utils.mjs +0 -14
  57. package/esm2022/lib/classes/query-variable-manager.mjs +0 -172
  58. package/esm2022/lib/classes/rxjs.mjs +0 -54
  59. package/esm2022/lib/classes/signing.mjs +0 -38
  60. package/esm2022/lib/classes/tld.mjs +0 -1476
  61. package/esm2022/lib/classes/utility.mjs +0 -234
  62. package/esm2022/lib/classes/validators.mjs +0 -179
  63. package/esm2022/lib/directives/http-prefix.directive.mjs +0 -47
  64. package/esm2022/lib/modules/alert/alert.service.mjs +0 -53
  65. package/esm2022/lib/modules/alert/confirm.component.mjs +0 -16
  66. package/esm2022/lib/modules/alert/public-api.mjs +0 -6
  67. package/esm2022/lib/modules/avatar/component/avatar.component.mjs +0 -203
  68. package/esm2022/lib/modules/avatar/public-api.mjs +0 -6
  69. package/esm2022/lib/modules/avatar/service/avatar.service.mjs +0 -63
  70. package/esm2022/lib/modules/avatar/sources/gravatar.mjs +0 -29
  71. package/esm2022/lib/modules/avatar/sources/image.mjs +0 -13
  72. package/esm2022/lib/modules/avatar/sources/initials.mjs +0 -39
  73. package/esm2022/lib/modules/avatar/sources/source.mjs +0 -16
  74. package/esm2022/lib/modules/columns-picker/columns-picker.component.mjs +0 -145
  75. package/esm2022/lib/modules/columns-picker/public-api.mjs +0 -5
  76. package/esm2022/lib/modules/columns-picker/types.mjs +0 -2
  77. package/esm2022/lib/modules/common/directives/background-density.directive.mjs +0 -63
  78. package/esm2022/lib/modules/common/directives/linkable-tab.directive.mjs +0 -93
  79. package/esm2022/lib/modules/common/directives/src-density.directive.mjs +0 -72
  80. package/esm2022/lib/modules/common/pipes/capitalize.pipe.mjs +0 -24
  81. package/esm2022/lib/modules/common/pipes/ellipsis.pipe.mjs +0 -17
  82. package/esm2022/lib/modules/common/pipes/enum.pipe.mjs +0 -24
  83. package/esm2022/lib/modules/common/pipes/time-ago.pipe.mjs +0 -140
  84. package/esm2022/lib/modules/common/public-api.mjs +0 -14
  85. package/esm2022/lib/modules/common/services/memory-storage.mjs +0 -110
  86. package/esm2022/lib/modules/common/services/seo.provider.mjs +0 -23
  87. package/esm2022/lib/modules/common/services/seo.service.mjs +0 -235
  88. package/esm2022/lib/modules/detail-header/detail-header.component.mjs +0 -84
  89. package/esm2022/lib/modules/detail-header/public-api.mjs +0 -5
  90. package/esm2022/lib/modules/dialog-trigger/dialog-trigger.component.mjs +0 -72
  91. package/esm2022/lib/modules/dialog-trigger/public-api.mjs +0 -5
  92. package/esm2022/lib/modules/dropdown-components/abstract-association-select-component.directive.mjs +0 -100
  93. package/esm2022/lib/modules/dropdown-components/public-api.mjs +0 -14
  94. package/esm2022/lib/modules/dropdown-components/type-boolean/type-boolean.component.mjs +0 -39
  95. package/esm2022/lib/modules/dropdown-components/type-date/type-date.component.mjs +0 -173
  96. package/esm2022/lib/modules/dropdown-components/type-date-range/type-date-range.component.mjs +0 -134
  97. package/esm2022/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.mjs +0 -80
  98. package/esm2022/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.mjs +0 -48
  99. package/esm2022/lib/modules/dropdown-components/type-number/type-number.component.mjs +0 -110
  100. package/esm2022/lib/modules/dropdown-components/type-options/type-options.component.mjs +0 -64
  101. package/esm2022/lib/modules/dropdown-components/type-select/type-select.component.mjs +0 -175
  102. package/esm2022/lib/modules/dropdown-components/type-text/type-text.component.mjs +0 -62
  103. package/esm2022/lib/modules/dropdown-components/types.mjs +0 -41
  104. package/esm2022/lib/modules/dropdown-components/utils.mjs +0 -35
  105. package/esm2022/lib/modules/file/abstract-file.mjs +0 -230
  106. package/esm2022/lib/modules/file/component/file.component.mjs +0 -172
  107. package/esm2022/lib/modules/file/file-drop.directive.mjs +0 -111
  108. package/esm2022/lib/modules/file/file-select.directive.mjs +0 -26
  109. package/esm2022/lib/modules/file/file.service.mjs +0 -43
  110. package/esm2022/lib/modules/file/public-api.mjs +0 -9
  111. package/esm2022/lib/modules/file/types.mjs +0 -2
  112. package/esm2022/lib/modules/file/utils.mjs +0 -129
  113. package/esm2022/lib/modules/fixed-button/fixed-button.component.mjs +0 -30
  114. package/esm2022/lib/modules/fixed-button/public-api.mjs +0 -5
  115. package/esm2022/lib/modules/fixed-button-detail/fixed-button-detail.component.mjs +0 -56
  116. package/esm2022/lib/modules/fixed-button-detail/public-api.mjs +0 -5
  117. package/esm2022/lib/modules/hierarchic-selector/classes/flat-node.mjs +0 -18
  118. package/esm2022/lib/modules/hierarchic-selector/classes/hierarchic-configuration.mjs +0 -2
  119. package/esm2022/lib/modules/hierarchic-selector/classes/hierarchic-filters-configuration.mjs +0 -2
  120. package/esm2022/lib/modules/hierarchic-selector/classes/model-node.mjs +0 -14
  121. package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.mjs +0 -398
  122. package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.mjs +0 -243
  123. package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.mjs +0 -38
  124. package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.mjs +0 -22
  125. package/esm2022/lib/modules/hierarchic-selector/public-api.mjs +0 -10
  126. package/esm2022/lib/modules/icon/icon.directive.mjs +0 -96
  127. package/esm2022/lib/modules/icon/icon.module.mjs +0 -33
  128. package/esm2022/lib/modules/icon/public-api.mjs +0 -6
  129. package/esm2022/lib/modules/logger/error-handler.mjs +0 -87
  130. package/esm2022/lib/modules/logger/error.module.mjs +0 -22
  131. package/esm2022/lib/modules/logger/public-api.mjs +0 -6
  132. package/esm2022/lib/modules/matomo/matomo.service.mjs +0 -96
  133. package/esm2022/lib/modules/matomo/public-api.mjs +0 -5
  134. package/esm2022/lib/modules/panels/abstract-panel.mjs +0 -76
  135. package/esm2022/lib/modules/panels/fallback-if-no-opened-panels.urlmatcher.mjs +0 -12
  136. package/esm2022/lib/modules/panels/panels.component.mjs +0 -27
  137. package/esm2022/lib/modules/panels/panels.module.mjs +0 -10
  138. package/esm2022/lib/modules/panels/panels.service.mjs +0 -329
  139. package/esm2022/lib/modules/panels/panels.urlmatcher.mjs +0 -75
  140. package/esm2022/lib/modules/panels/public-api.mjs +0 -11
  141. package/esm2022/lib/modules/panels/types.mjs +0 -3
  142. package/esm2022/lib/modules/relations/public-api.mjs +0 -5
  143. package/esm2022/lib/modules/relations/relations.component.mjs +0 -254
  144. package/esm2022/lib/modules/search/classes/graphql-doctrine.mjs +0 -111
  145. package/esm2022/lib/modules/search/classes/graphql-doctrine.types.mjs +0 -14
  146. package/esm2022/lib/modules/search/classes/transformers.mjs +0 -142
  147. package/esm2022/lib/modules/search/classes/url.mjs +0 -53
  148. package/esm2022/lib/modules/search/classes/utils.mjs +0 -25
  149. package/esm2022/lib/modules/search/dropdown-container/dropdown-container-animations.mjs +0 -44
  150. package/esm2022/lib/modules/search/dropdown-container/dropdown-container.component.mjs +0 -87
  151. package/esm2022/lib/modules/search/dropdown-container/dropdown-ref.mjs +0 -24
  152. package/esm2022/lib/modules/search/dropdown-container/dropdown.service.mjs +0 -90
  153. package/esm2022/lib/modules/search/facet-selector/facet-selector.component.mjs +0 -45
  154. package/esm2022/lib/modules/search/group/group.component.mjs +0 -53
  155. package/esm2022/lib/modules/search/input/input.component.mjs +0 -365
  156. package/esm2022/lib/modules/search/public-api.mjs +0 -7
  157. package/esm2022/lib/modules/search/search/search.component.mjs +0 -102
  158. package/esm2022/lib/modules/search/types/dropdown-component.mjs +0 -2
  159. package/esm2022/lib/modules/search/types/facet.mjs +0 -2
  160. package/esm2022/lib/modules/search/types/values.mjs +0 -2
  161. package/esm2022/lib/modules/select/abstract-select.component.mjs +0 -232
  162. package/esm2022/lib/modules/select/public-api.mjs +0 -7
  163. package/esm2022/lib/modules/select/select/select.component.mjs +0 -310
  164. package/esm2022/lib/modules/select/select-enum/select-enum.component.mjs +0 -57
  165. package/esm2022/lib/modules/select/select-hierarchic/select-hierarchic.component.mjs +0 -155
  166. package/esm2022/lib/modules/sidenav/public-api.mjs +0 -9
  167. package/esm2022/lib/modules/sidenav/sidenav/sidenav.component.mjs +0 -15
  168. package/esm2022/lib/modules/sidenav/sidenav-container/sidenav-container.component.mjs +0 -90
  169. package/esm2022/lib/modules/sidenav/sidenav-content/sidenav-content.component.mjs +0 -11
  170. package/esm2022/lib/modules/sidenav/sidenav-stack.service.mjs +0 -50
  171. package/esm2022/lib/modules/sidenav/sidenav.service.mjs +0 -196
  172. package/esm2022/lib/modules/stamp/public-api.mjs +0 -5
  173. package/esm2022/lib/modules/stamp/stamp.component.mjs +0 -23
  174. package/esm2022/lib/modules/table-button/public-api.mjs +0 -5
  175. package/esm2022/lib/modules/table-button/table-button.component.mjs +0 -78
  176. package/esm2022/lib/services/abstract-model.service.mjs +0 -526
  177. package/esm2022/lib/services/debounce.service.mjs +0 -149
  178. package/esm2022/lib/services/enum.service.mjs +0 -64
  179. package/esm2022/lib/services/link-mutation.service.mjs +0 -154
  180. package/esm2022/lib/services/persistence.service.mjs +0 -115
  181. package/esm2022/lib/services/swiss-parsing-date-adapter.service.mjs +0 -63
  182. package/esm2022/lib/types/types.mjs +0 -2
  183. 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=