@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,149 +0,0 @@
1
- import { catchError, debounceTime, EMPTY, forkJoin, map, mergeMap, Observable, of, raceWith, ReplaySubject, shareReplay, Subject, take, } from 'rxjs';
2
- import { Injectable } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- /**
5
- * Debounce subscriptions to update mutations, with the possibility to cancel one, flush one, or flush all of them.
6
- *
7
- * `modelService` is also used to separate objects by their types. So User with ID 1 is not confused with Product with ID 1.
8
- *
9
- * `id` must be the ID of the object that will be updated.
10
- */
11
- export class NaturalDebounceService {
12
- /**
13
- * Stores the debounced update function
14
- */
15
- allDebouncedUpdateCache = new Map();
16
- /**
17
- * Debounce the `modelService.updateNow()` mutation for a short time. If called multiple times with the same
18
- * modelService and id, it will postpone the subscription to the mutation.
19
- *
20
- * All input variables for the same object (same service and ID) will be cumulated over time. So it is possible
21
- * to update `field1`, then `field2`, and they will be batched into a single XHR including `field1` and `field2`.
22
- *
23
- * But it will always keep the same debouncing timeline.
24
- */
25
- debounce(modelService, id, object) {
26
- const debouncedUpdateCache = this.getMap(modelService);
27
- let debounced = debouncedUpdateCache.get(id);
28
- if (debounced) {
29
- debounced.object = {
30
- ...debounced.object,
31
- ...object,
32
- };
33
- }
34
- else {
35
- const debouncer = new ReplaySubject(1);
36
- let wasCancelled = false;
37
- const canceller = new Subject();
38
- canceller.subscribe(() => {
39
- wasCancelled = true;
40
- debouncer.complete();
41
- canceller.complete();
42
- this.delete(modelService, id);
43
- });
44
- const flusher = new Subject();
45
- debounced = {
46
- object,
47
- debouncer,
48
- canceller,
49
- flusher,
50
- modelService: modelService,
51
- result: debouncer.pipe(debounceTime(2000), // Wait 2 seconds...
52
- raceWith(flusher), // ...unless flusher is triggered
53
- take(1), mergeMap(() => {
54
- this.delete(modelService, id);
55
- if (wasCancelled || !debounced) {
56
- return EMPTY;
57
- }
58
- return modelService.updateNow(debounced.object);
59
- }), shareReplay()),
60
- };
61
- debouncedUpdateCache.set(id, debounced);
62
- }
63
- // Notify our debounced update each time we ask to update
64
- debounced.debouncer.next();
65
- // Return and observable that is updated when mutation is done
66
- return debounced.result;
67
- }
68
- cancelOne(modelService, id) {
69
- const debounced = this.allDebouncedUpdateCache.get(modelService)?.get(id);
70
- debounced?.canceller.next();
71
- }
72
- /**
73
- * Immediately execute the pending update, if any.
74
- *
75
- * It should typically be called before resolving the object, to mutate it before re-fetching it from server.
76
- *
77
- * The returned observable will complete when the update completes, even if it errors.
78
- */
79
- flushOne(modelService, id) {
80
- const debounced = this.allDebouncedUpdateCache.get(modelService)?.get(id);
81
- return this.internalFlush(debounced ? [debounced] : []);
82
- }
83
- /**
84
- * Immediately execute all pending updates.
85
- *
86
- * It should typically be called before login out.
87
- *
88
- * The returned observable will complete when all updates complete, even if some of them error.
89
- */
90
- flush() {
91
- const all = [];
92
- this.allDebouncedUpdateCache.forEach(map => map.forEach(debounced => all.push(debounced)));
93
- return this.internalFlush(all);
94
- }
95
- internalFlush(debounceds) {
96
- const all = [];
97
- const allFlusher = [];
98
- debounceds.forEach(debounced => {
99
- all.push(debounced.result.pipe(catchError(() => of(undefined))));
100
- allFlusher.push(debounced.flusher);
101
- });
102
- if (!all.length) {
103
- all.push(of(undefined));
104
- }
105
- return new Observable(subscriber => {
106
- const subscription = forkJoin(all)
107
- .pipe(map(() => undefined))
108
- .subscribe(subscriber);
109
- // Flush only after subscription process is finished
110
- allFlusher.forEach(flusher => flusher.next());
111
- return subscription;
112
- });
113
- }
114
- /**
115
- * Count of pending updates
116
- */
117
- get count() {
118
- let count = 0;
119
- this.allDebouncedUpdateCache.forEach(map => (count += map.size));
120
- return count;
121
- }
122
- getMap(modelService) {
123
- let debouncedUpdateCache = this.allDebouncedUpdateCache.get(modelService);
124
- if (!debouncedUpdateCache) {
125
- debouncedUpdateCache = new Map();
126
- this.allDebouncedUpdateCache.set(modelService, debouncedUpdateCache);
127
- }
128
- return debouncedUpdateCache;
129
- }
130
- delete(modelService, id) {
131
- const map = this.allDebouncedUpdateCache.get(modelService);
132
- if (!map) {
133
- return;
134
- }
135
- map.delete(id);
136
- if (!map.size) {
137
- this.allDebouncedUpdateCache.delete(modelService);
138
- }
139
- }
140
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalDebounceService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
141
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalDebounceService, providedIn: 'root' });
142
- }
143
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalDebounceService, decorators: [{
144
- type: Injectable,
145
- args: [{
146
- providedIn: 'root',
147
- }]
148
- }] });
149
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVib3VuY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9zZXJ2aWNlcy9kZWJvdW5jZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFDTCxRQUFRLEVBQ1IsR0FBRyxFQUNILFFBQVEsRUFDUixVQUFVLEVBQ1YsRUFBRSxFQUNGLFFBQVEsRUFDUixhQUFhLEVBQ2IsV0FBVyxFQUNYLE9BQU8sRUFDUCxJQUFJLEdBQ1AsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOztBQVl6Qzs7Ozs7O0dBTUc7QUFJSCxNQUFNLE9BQU8sc0JBQXNCO0lBQy9COztPQUVHO0lBQ2MsdUJBQXVCLEdBQUcsSUFBSSxHQUFHLEVBRy9DLENBQUM7SUFFSjs7Ozs7Ozs7T0FRRztJQUNJLFFBQVEsQ0FDWCxZQUFpQyxFQUNqQyxFQUFVLEVBQ1YsTUFBcUM7UUFFckMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZELElBQUksU0FBUyxHQUFHLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQTZCLENBQUM7UUFFekUsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNaLFNBQVMsQ0FBQyxNQUFNLEdBQUc7Z0JBQ2YsR0FBRyxTQUFTLENBQUMsTUFBTTtnQkFDbkIsR0FBRyxNQUFNO2FBQ1osQ0FBQztRQUNOLENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxTQUFTLEdBQUcsSUFBSSxhQUFhLENBQU8sQ0FBQyxDQUFDLENBQUM7WUFDN0MsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLE1BQU0sU0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7WUFDdEMsU0FBUyxDQUFDLFNBQVMsQ0FB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QUFDO1FBRUQsT0FBTyxvQkFBaUQsQ0FBQztJQUM3RCxDQUFDO0lBRU8sTUFBTSxDQUFDLFlBQWlDLEVBQUUsRUFBVTtRQUN4RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNQLE9BQU87UUFDWCxDQUFDO1FBRUQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVmLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDTCxDQUFDO3VHQXJLUSxzQkFBc0I7MkdBQXRCLHNCQUFzQixjQUZuQixNQUFNOzsyRkFFVCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBjYXRjaEVycm9yLFxuICAgIGRlYm91bmNlVGltZSxcbiAgICBFTVBUWSxcbiAgICBmb3JrSm9pbixcbiAgICBtYXAsXG4gICAgbWVyZ2VNYXAsXG4gICAgT2JzZXJ2YWJsZSxcbiAgICBvZixcbiAgICByYWNlV2l0aCxcbiAgICBSZXBsYXlTdWJqZWN0LFxuICAgIHNoYXJlUmVwbGF5LFxuICAgIFN1YmplY3QsXG4gICAgdGFrZSxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtVbnR5cGVkTW9kZWxTZXJ2aWNlfSBmcm9tICcuLi90eXBlcy90eXBlcyc7XG5cbnR5cGUgRGVib3VuY2VkPFQgZXh0ZW5kcyBVbnR5cGVkTW9kZWxTZXJ2aWNlPiA9IHtcbiAgICBvYmplY3Q6IFBhcmFtZXRlcnM8VFsndXBkYXRlTm93J10+WzBdO1xuICAgIG1vZGVsU2VydmljZTogVDtcbiAgICBkZWJvdW5jZXI6IFN1YmplY3Q8dm9pZD47XG4gICAgY2FuY2VsbGVyOiBTdWJqZWN0PHZvaWQ+O1xuICAgIGZsdXNoZXI6IFN1YmplY3Q8dm9pZD47XG4gICAgcmVzdWx0OiBSZXR1cm5UeXBlPFRbJ3VwZGF0ZU5vdyddPjtcbn07XG5cbi8qKlxuICogRGVib3VuY2Ugc3Vic2NyaXB0aW9ucyB0byB1cGRhdGUgbXV0YXRpb25zLCB3aXRoIHRoZSBwb3NzaWJpbGl0eSB0byBjYW5jZWwgb25lLCBmbHVzaCBvbmUsIG9yIGZsdXNoIGFsbCBvZiB0aGVtLlxuICpcbiAqIGBtb2RlbFNlcnZpY2VgIGlzIGFsc28gdXNlZCB0byBzZXBhcmF0ZSBvYmplY3RzIGJ5IHRoZWlyIHR5cGVzLiBTbyBVc2VyIHdpdGggSUQgMSBpcyBub3QgY29uZnVzZWQgd2l0aCBQcm9kdWN0IHdpdGggSUQgMS5cbiAqXG4gKiBgaWRgIG11c3QgYmUgdGhlIElEIG9mIHRoZSBvYmplY3QgdGhhdCB3aWxsIGJlIHVwZGF0ZWQuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxEZWJvdW5jZVNlcnZpY2Uge1xuICAgIC8qKlxuICAgICAqIFN0b3JlcyB0aGUgZGVib3VuY2VkIHVwZGF0ZSBmdW5jdGlvblxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxsRGVib3VuY2VkVXBkYXRlQ2FjaGUgPSBuZXcgTWFwPFxuICAgICAgICBVbnR5cGVkTW9kZWxTZXJ2aWNlLFxuICAgICAgICBNYXA8c3RyaW5nLCBEZWJvdW5jZWQ8VW50eXBlZE1vZGVsU2VydmljZT4+XG4gICAgPigpO1xuXG4gICAgLyoqXG4gICAgICogRGVib3VuY2UgdGhlIGBtb2RlbFNlcnZpY2UudXBkYXRlTm93KClgIG11dGF0aW9uIGZvciBhIHNob3J0IHRpbWUuIElmIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB3aXRoIHRoZSBzYW1lXG4gICAgICogbW9kZWxTZXJ2aWNlIGFuZCBpZCwgaXQgd2lsbCBwb3N0cG9uZSB0aGUgc3Vic2NyaXB0aW9uIHRvIHRoZSBtdXRhdGlvbi5cbiAgICAgKlxuICAgICAqIEFsbCBpbnB1dCB2YXJpYWJsZXMgZm9yIHRoZSBzYW1lIG9iamVjdCAoc2FtZSBzZXJ2aWNlIGFuZCBJRCkgd2lsbCBiZSBjdW11bGF0ZWQgb3ZlciB0aW1lLiBTbyBpdCBpcyBwb3NzaWJsZVxuICAgICAqIHRvIHVwZGF0ZSBgZmllbGQxYCwgdGhlbiBgZmllbGQyYCwgYW5kIHRoZXkgd2lsbCBiZSBiYXRjaGVkIGludG8gYSBzaW5nbGUgWEhSIGluY2x1ZGluZyBgZmllbGQxYCBhbmQgYGZpZWxkMmAuXG4gICAgICpcbiAgICAgKiBCdXQgaXQgd2lsbCBhbHdheXMga2VlcCB0aGUgc2FtZSBkZWJvdW5jaW5nIHRpbWVsaW5lLlxuICAgICAqL1xuICAgIHB1YmxpYyBkZWJvdW5jZTxUIGV4dGVuZHMgVW50eXBlZE1vZGVsU2VydmljZT4oXG4gICAgICAgIG1vZGVsU2VydmljZTogVW50eXBlZE1vZGVsU2VydmljZSxcbiAgICAgICAgaWQ6IHN0cmluZyxcbiAgICAgICAgb2JqZWN0OiBQYXJhbWV0ZXJzPFRbJ3VwZGF0ZU5vdyddPlswXSxcbiAgICApOiBSZXR1cm5UeXBlPFRbJ3VwZGF0ZU5vdyddPiB7XG4gICAgICAgIGNvbnN0IGRlYm91bmNlZFVwZGF0ZUNhY2hlID0gdGhpcy5nZXRNYXAobW9kZWxTZXJ2aWNlKTtcbiAgICAgICAgbGV0IGRlYm91bmNlZCA9IGRlYm91bmNlZFVwZGF0ZUNhY2hlLmdldChpZCkgYXMgRGVib3VuY2VkPFQ+IHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChkZWJvdW5jZWQpIHtcbiAgICAgICAgICAgIGRlYm91bmNlZC5vYmplY3QgPSB7XG4gICAgICAgICAgICAgICAgLi4uZGVib3VuY2VkLm9iamVjdCxcbiAgICAgICAgICAgICAgICAuLi5vYmplY3QsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGVib3VuY2VyID0gbmV3IFJlcGxheVN1YmplY3Q8dm9pZD4oMSk7XG4gICAgICAgICAgICBsZXQgd2FzQ2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBjYW5jZWxsZXIgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgICAgICAgICAgY2FuY2VsbGVyLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgd2FzQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBkZWJvdW5jZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICBjYW5jZWxsZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZShtb2RlbFNlcnZpY2UsIGlkKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBmbHVzaGVyID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgICAgICAgICAgZGVib3VuY2VkID0ge1xuICAgICAgICAgICAgICAgIG9iamVjdCxcbiAgICAgICAgICAgICAgICBkZWJvdW5jZXIsXG4gICAgICAgICAgICAgICAgY2FuY2VsbGVyLFxuICAgICAgICAgICAgICAgIGZsdXNoZXIsXG4gICAgICAgICAgICAgICAgbW9kZWxTZXJ2aWNlOiBtb2RlbFNlcnZpY2UgYXMgVCxcbiAgICAgICAgICAgICAgICByZXN1bHQ6IGRlYm91bmNlci5waXBlKFxuICAgICAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMjAwMCksIC8vIFdhaXQgMiBzZWNvbmRzLi4uXG4gICAgICAgICAgICAgICAgICAgIHJhY2VXaXRoKGZsdXNoZXIpLCAvLyAuLi51bmxlc3MgZmx1c2hlciBpcyB0cmlnZ2VyZWRcbiAgICAgICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICAgICAgbWVyZ2VNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGUobW9kZWxTZXJ2aWNlLCBpZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3YXNDYW5jZWxsZWQgfHwgIWRlYm91bmNlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZGVsU2VydmljZS51cGRhdGVOb3coZGVib3VuY2VkLm9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSgpLCAvLyBBbGwgYXR0ZW1wdHMgdG8gdXBkYXRlIHdpbGwgc2hhcmUgdGhlIGV4YWN0IHNhbWUgc2luZ2xlIHJlc3VsdCBmcm9tIEFQSVxuICAgICAgICAgICAgICAgICkgYXMgUmV0dXJuVHlwZTxUWyd1cGRhdGVOb3cnXT4sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBkZWJvdW5jZWRVcGRhdGVDYWNoZS5zZXQoaWQsIGRlYm91bmNlZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOb3RpZnkgb3VyIGRlYm91bmNlZCB1cGRhdGUgZWFjaCB0aW1lIHdlIGFzayB0byB1cGRhdGVcbiAgICAgICAgZGVib3VuY2VkLmRlYm91bmNlci5uZXh0KCk7XG5cbiAgICAgICAgLy8gUmV0dXJuIGFuZCBvYnNlcnZhYmxlIHRoYXQgaXMgdXBkYXRlZCB3aGVuIG11dGF0aW9uIGlzIGRvbmVcbiAgICAgICAgcmV0dXJuIGRlYm91bmNlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGNhbmNlbE9uZShtb2RlbFNlcnZpY2U6IFVudHlwZWRNb2RlbFNlcnZpY2UsIGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGVib3VuY2VkID0gdGhpcy5hbGxEZWJvdW5jZWRVcGRhdGVDYWNoZS5nZXQobW9kZWxTZXJ2aWNlKT8uZ2V0KGlkKTtcbiAgICAgICAgZGVib3VuY2VkPy5jYW5jZWxsZXIubmV4dCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEltbWVkaWF0ZWx5IGV4ZWN1dGUgdGhlIHBlbmRpbmcgdXBkYXRlLCBpZiBhbnkuXG4gICAgICpcbiAgICAgKiBJdCBzaG91bGQgdHlwaWNhbGx5IGJlIGNhbGxlZCBiZWZvcmUgcmVzb2x2aW5nIHRoZSBvYmplY3QsIHRvIG11dGF0ZSBpdCBiZWZvcmUgcmUtZmV0Y2hpbmcgaXQgZnJvbSBzZXJ2ZXIuXG4gICAgICpcbiAgICAgKiBUaGUgcmV0dXJuZWQgb2JzZXJ2YWJsZSB3aWxsIGNvbXBsZXRlIHdoZW4gdGhlIHVwZGF0ZSBjb21wbGV0ZXMsIGV2ZW4gaWYgaXQgZXJyb3JzLlxuICAgICAqL1xuICAgIHB1YmxpYyBmbHVzaE9uZShtb2RlbFNlcnZpY2U6IFVudHlwZWRNb2RlbFNlcnZpY2UsIGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgZGVib3VuY2VkID0gdGhpcy5hbGxEZWJvdW5jZWRVcGRhdGVDYWNoZS5nZXQobW9kZWxTZXJ2aWNlKT8uZ2V0KGlkKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbEZsdXNoKGRlYm91bmNlZCA/IFtkZWJvdW5jZWRdIDogW10pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEltbWVkaWF0ZWx5IGV4ZWN1dGUgYWxsIHBlbmRpbmcgdXBkYXRlcy5cbiAgICAgKlxuICAgICAqIEl0IHNob3VsZCB0eXBpY2FsbHkgYmUgY2FsbGVkIGJlZm9yZSBsb2dpbiBvdXQuXG4gICAgICpcbiAgICAgKiBUaGUgcmV0dXJuZWQgb2JzZXJ2YWJsZSB3aWxsIGNvbXBsZXRlIHdoZW4gYWxsIHVwZGF0ZXMgY29tcGxldGUsIGV2ZW4gaWYgc29tZSBvZiB0aGVtIGVycm9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBmbHVzaCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgYWxsOiBEZWJvdW5jZWQ8VW50eXBlZE1vZGVsU2VydmljZT5bXSA9IFtdO1xuICAgICAgICB0aGlzLmFsbERlYm91bmNlZFVwZGF0ZUNhY2hlLmZvckVhY2gobWFwID0+IG1hcC5mb3JFYWNoKGRlYm91bmNlZCA9PiBhbGwucHVzaChkZWJvdW5jZWQpKSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxGbHVzaChhbGwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW50ZXJuYWxGbHVzaChkZWJvdW5jZWRzOiBEZWJvdW5jZWQ8VW50eXBlZE1vZGVsU2VydmljZT5bXSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICBjb25zdCBhbGw6IE9ic2VydmFibGU8dW5rbm93bj5bXSA9IFtdO1xuICAgICAgICBjb25zdCBhbGxGbHVzaGVyOiBTdWJqZWN0PHZvaWQ+W10gPSBbXTtcblxuICAgICAgICBkZWJvdW5jZWRzLmZvckVhY2goZGVib3VuY2VkID0+IHtcbiAgICAgICAgICAgIGFsbC5wdXNoKGRlYm91bmNlZC5yZXN1bHQucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKHVuZGVmaW5lZCkpKSk7XG4gICAgICAgICAgICBhbGxGbHVzaGVyLnB1c2goZGVib3VuY2VkLmZsdXNoZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIWFsbC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFsbC5wdXNoKG9mKHVuZGVmaW5lZCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZXIgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gZm9ya0pvaW4oYWxsKVxuICAgICAgICAgICAgICAgIC5waXBlKG1hcCgoKSA9PiB1bmRlZmluZWQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG5cbiAgICAgICAgICAgIC8vIEZsdXNoIG9ubHkgYWZ0ZXIgc3Vic2NyaXB0aW9uIHByb2Nlc3MgaXMgZmluaXNoZWRcbiAgICAgICAgICAgIGFsbEZsdXNoZXIuZm9yRWFjaChmbHVzaGVyID0+IGZsdXNoZXIubmV4dCgpKTtcblxuICAgICAgICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ291bnQgb2YgcGVuZGluZyB1cGRhdGVzXG4gICAgICovXG4gICAgcHVibGljIGdldCBjb3VudCgpOiBudW1iZXIge1xuICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICB0aGlzLmFsbERlYm91bmNlZFVwZGF0ZUNhY2hlLmZvckVhY2gobWFwID0+IChjb3VudCArPSBtYXAuc2l6ZSkpO1xuXG4gICAgICAgIHJldHVybiBjb3VudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1hcDxUIGV4dGVuZHMgVW50eXBlZE1vZGVsU2VydmljZT4obW9kZWxTZXJ2aWNlOiBUKTogTWFwPHN0cmluZywgRGVib3VuY2VkPFQ+PiB7XG4gICAgICAgIGxldCBkZWJvdW5jZWRVcGRhdGVDYWNoZSA9IHRoaXMuYWxsRGVib3VuY2VkVXBkYXRlQ2FjaGUuZ2V0KG1vZGVsU2VydmljZSk7XG4gICAgICAgIGlmICghZGVib3VuY2VkVXBkYXRlQ2FjaGUpIHtcbiAgICAgICAgICAgIGRlYm91bmNlZFVwZGF0ZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIERlYm91bmNlZDxVbnR5cGVkTW9kZWxTZXJ2aWNlPj4oKTtcbiAgICAgICAgICAgIHRoaXMuYWxsRGVib3VuY2VkVXBkYXRlQ2FjaGUuc2V0KG1vZGVsU2VydmljZSwgZGVib3VuY2VkVXBkYXRlQ2FjaGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlYm91bmNlZFVwZGF0ZUNhY2hlIGFzIE1hcDxzdHJpbmcsIERlYm91bmNlZDxUPj47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWxldGUobW9kZWxTZXJ2aWNlOiBVbnR5cGVkTW9kZWxTZXJ2aWNlLCBpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1hcCA9IHRoaXMuYWxsRGVib3VuY2VkVXBkYXRlQ2FjaGUuZ2V0KG1vZGVsU2VydmljZSk7XG4gICAgICAgIGlmICghbWFwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBtYXAuZGVsZXRlKGlkKTtcblxuICAgICAgICBpZiAoIW1hcC5zaXplKSB7XG4gICAgICAgICAgICB0aGlzLmFsbERlYm91bmNlZFVwZGF0ZUNhY2hlLmRlbGV0ZShtb2RlbFNlcnZpY2UpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -1,64 +0,0 @@
1
- import { Apollo, gql } from 'apollo-angular';
2
- import { inject, Injectable } from '@angular/core';
3
- import { map } from 'rxjs/operators';
4
- import * as i0 from "@angular/core";
5
- const enumTypeQuery = gql `
6
- query EnumType($name: String!) {
7
- __type(name: $name) {
8
- __typename
9
- enumValues {
10
- name
11
- description
12
- }
13
- }
14
- }
15
- `;
16
- export class NaturalEnumService {
17
- apollo = inject(Apollo);
18
- /**
19
- * Return a list of observable enumerables considering the given name
20
- */
21
- get(name) {
22
- // Load possible action statuses
23
- return this.apollo
24
- .query({
25
- query: enumTypeQuery,
26
- variables: { name: name },
27
- fetchPolicy: 'cache-first',
28
- })
29
- .pipe(map(result => {
30
- const values = [];
31
- if (result.data.__type?.enumValues) {
32
- for (const enumValue of result.data.__type.enumValues) {
33
- values.push({
34
- value: enumValue.name,
35
- name: enumValue.description || '',
36
- });
37
- }
38
- }
39
- return values;
40
- }));
41
- }
42
- /**
43
- * Returns the enum user-friendly name, instead of its value.
44
- */
45
- getValueName(value, enumName) {
46
- return this.get(enumName).pipe(map(values => {
47
- for (const v of values) {
48
- if (v.value === value) {
49
- return v.name;
50
- }
51
- }
52
- return '';
53
- }));
54
- }
55
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalEnumService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
56
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalEnumService, providedIn: 'root' });
57
- }
58
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalEnumService, decorators: [{
59
- type: Injectable,
60
- args: [{
61
- providedIn: 'root',
62
- }]
63
- }] });
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL3NlcnZpY2VzL2VudW0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFbkMsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFBOzs7Ozs7Ozs7O0NBVXhCLENBQUM7QUFzQkYsTUFBTSxPQUFPLGtCQUFrQjtJQUNWLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFekM7O09BRUc7SUFDSSxHQUFHLENBQUMsSUFBWTtRQUNuQixnQ0FBZ0M7UUFDaEMsT0FBTyxJQUFJLENBQUMsTUFBTTthQUNiLEtBQUssQ0FBVztZQUNiLEtBQUssRUFBRSxhQUFhO1lBQ3BCLFNBQVMsRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUM7WUFDdkIsV0FBVyxFQUFFLGFBQWE7U0FDN0IsQ0FBQzthQUNELElBQUksQ0FDRCxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDVCxNQUFNLE1BQU0sR0FBWSxFQUFFLENBQUM7WUFDM0IsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQztnQkFDakMsS0FBSyxNQUFNLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDcEQsTUFBTSxDQUFDLElBQUksQ0FBQzt3QkFDUixLQUFLLEVBQUUsU0FBUyxDQUFDLElBQUk7d0JBQ3JCLElBQUksRUFBRSxTQUFTLENBQUMsV0FBVyxJQUFJLEVBQUU7cUJBQ3BDLENBQUMsQ0FBQztnQkFDUCxDQUFDO1lBQ0wsQ0FBQztZQUVELE9BQU8sTUFBTSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDVixDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZLENBQUMsS0FBYSxFQUFFLFFBQWdCO1FBQy9DLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQzFCLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNULEtBQUssTUFBTSxDQUFDLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztvQkFDcEIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNsQixDQUFDO1lBQ0wsQ0FBQztZQUVELE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7dUdBOUNRLGtCQUFrQjsyR0FBbEIsa0JBQWtCLGNBRmYsTUFBTTs7MkZBRVQsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXBvbGxvLCBncWx9IGZyb20gJ2Fwb2xsby1hbmd1bGFyJztcbmltcG9ydCB7aW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5jb25zdCBlbnVtVHlwZVF1ZXJ5ID0gZ3FsYFxuICAgIHF1ZXJ5IEVudW1UeXBlKCRuYW1lOiBTdHJpbmchKSB7XG4gICAgICAgIF9fdHlwZShuYW1lOiAkbmFtZSkge1xuICAgICAgICAgICAgX190eXBlbmFtZVxuICAgICAgICAgICAgZW51bVZhbHVlcyB7XG4gICAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5gO1xuXG50eXBlIEVudW1UeXBlID0ge1xuICAgIF9fdHlwZTogbnVsbCB8IHtcbiAgICAgICAgX190eXBlbmFtZTogc3RyaW5nO1xuICAgICAgICBlbnVtVmFsdWVzOlxuICAgICAgICAgICAgfCBudWxsXG4gICAgICAgICAgICB8IHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBudWxsIHwgc3RyaW5nO1xuICAgICAgICAgICAgICB9W107XG4gICAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIElFbnVtID0ge1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xufTtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbEVudW1TZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFwb2xsbyA9IGluamVjdChBcG9sbG8pO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgbGlzdCBvZiBvYnNlcnZhYmxlIGVudW1lcmFibGVzIGNvbnNpZGVyaW5nIHRoZSBnaXZlbiBuYW1lXG4gICAgICovXG4gICAgcHVibGljIGdldChuYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPElFbnVtW10+IHtcbiAgICAgICAgLy8gTG9hZCBwb3NzaWJsZSBhY3Rpb24gc3RhdHVzZXNcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBvbGxvXG4gICAgICAgICAgICAucXVlcnk8RW51bVR5cGU+KHtcbiAgICAgICAgICAgICAgICBxdWVyeTogZW51bVR5cGVRdWVyeSxcbiAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IHtuYW1lOiBuYW1lfSxcbiAgICAgICAgICAgICAgICBmZXRjaFBvbGljeTogJ2NhY2hlLWZpcnN0JyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWVzOiBJRW51bVtdID0gW107XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZGF0YS5fX3R5cGU/LmVudW1WYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZW51bVZhbHVlIG9mIHJlc3VsdC5kYXRhLl9fdHlwZS5lbnVtVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZW51bVZhbHVlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGVudW1WYWx1ZS5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGVudW0gdXNlci1mcmllbmRseSBuYW1lLCBpbnN0ZWFkIG9mIGl0cyB2YWx1ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0VmFsdWVOYW1lKHZhbHVlOiBzdHJpbmcsIGVudW1OYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoZW51bU5hbWUpLnBpcGUoXG4gICAgICAgICAgICBtYXAodmFsdWVzID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2LnZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHYubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,154 +0,0 @@
1
- import { Apollo, gql } from 'apollo-angular';
2
- import { inject, Injectable } from '@angular/core';
3
- import { clone } from 'lodash-es';
4
- import { forkJoin, of } from 'rxjs';
5
- import { map, switchMap } from 'rxjs/operators';
6
- import { upperCaseFirstLetter } from '../classes/utility';
7
- import * as i0 from "@angular/core";
8
- /**
9
- * Query to get list of mutations
10
- */
11
- const queriesQuery = gql `
12
- query Mutations {
13
- __type(name: "Mutation") {
14
- fields {
15
- name
16
- args {
17
- name
18
- type {
19
- ofType {
20
- name
21
- }
22
- }
23
- }
24
- }
25
- }
26
- }
27
- `;
28
- export class NaturalLinkMutationService {
29
- apollo = inject(Apollo);
30
- /**
31
- * Receives the list of available mutations
32
- */
33
- allMutations;
34
- /**
35
- * Link two objects together
36
- */
37
- link(obj1, obj2, otherName = null, variables = {}) {
38
- // clone prevents to affect the original reference
39
- const clonedVariables = clone(variables);
40
- return this.getMutation('link', obj1, obj2, otherName, clonedVariables).pipe(switchMap(mutation => this.execute(mutation)));
41
- }
42
- /**
43
- * Link many objects
44
- */
45
- linkMany(obj1, objects, otherName = null, variables = {}) {
46
- return forkJoin(objects.map(obj2 => this.link(obj1, obj2, otherName, variables)));
47
- }
48
- /**
49
- * Unlink two objects
50
- */
51
- unlink(obj1, obj2, otherName = null) {
52
- return this.getMutation('unlink', obj1, obj2, otherName).pipe(switchMap(mutation => this.execute(mutation)));
53
- }
54
- /**
55
- * Return the list of all available mutation names
56
- */
57
- getAllMutationNames() {
58
- if (this.allMutations) {
59
- return of(this.allMutations);
60
- }
61
- const mapArg = (arg) => {
62
- return {
63
- name: arg.name,
64
- type: arg.type?.ofType?.name?.replace(/ID$/, '') || 'should-never-happen',
65
- };
66
- };
67
- return this.apollo
68
- .query({
69
- query: queriesQuery,
70
- fetchPolicy: 'cache-first',
71
- })
72
- .pipe(map(({ data }) => {
73
- if (data.__type?.fields) {
74
- this.allMutations = data.__type.fields
75
- .filter(v => /^(link|unlink)/.exec(v.name))
76
- .map(v => {
77
- return {
78
- name: v.name,
79
- arg1: mapArg(v.args[0]),
80
- arg2: mapArg(v.args[1]),
81
- };
82
- });
83
- }
84
- else {
85
- this.allMutations = [];
86
- }
87
- return this.allMutations;
88
- }));
89
- }
90
- /**
91
- * Generate mutation using patterns and replacing variables
92
- */
93
- getMutation(action, obj1, obj2, otherName, variables = {}) {
94
- otherName = otherName ? upperCaseFirstLetter(otherName) : otherName;
95
- const mutationName = action + obj1.__typename + (otherName || obj2.__typename);
96
- const reversedMutationName = action + obj2.__typename + (otherName || obj1.__typename);
97
- return this.getAllMutationNames().pipe(map(allMutationNames => {
98
- const mutation = allMutationNames.find(mut => mut.name === mutationName) ||
99
- allMutationNames.find(mut => mut.name === reversedMutationName);
100
- if (mutation) {
101
- return this.buildTemplate(mutation, obj1, obj2, variables);
102
- }
103
- throw TypeError('API does not allow to ' + action + ' ' + obj1.__typename + ' and ' + obj2.__typename);
104
- }));
105
- }
106
- /**
107
- * Execute mutation
108
- */
109
- execute(mutation) {
110
- return this.apollo
111
- .mutate({
112
- mutation: gql(mutation),
113
- })
114
- .pipe(map(r => {
115
- this.apollo.client.reFetchObservableQueries();
116
- return r;
117
- }));
118
- }
119
- /**
120
- * Build the actual mutation string
121
- */
122
- buildTemplate(mutation, obj1, obj2, variables = {}) {
123
- let name1;
124
- let name2;
125
- if (obj1.__typename === mutation.arg1.type) {
126
- name1 = mutation.arg1.name;
127
- name2 = mutation.arg2.name;
128
- }
129
- else {
130
- name1 = mutation.arg2.name;
131
- name2 = mutation.arg1.name;
132
- }
133
- variables[name1] = obj1.id;
134
- variables[name2] = obj2.id;
135
- let serializedVariables = '';
136
- for (const key of Object.keys(variables)) {
137
- serializedVariables += key + ': ' + JSON.stringify(variables[key]) + ' ';
138
- }
139
- return `mutation linkAndUnlink {
140
- ${mutation.name}(${serializedVariables}) {
141
- id
142
- }
143
- }`;
144
- }
145
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalLinkMutationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
146
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalLinkMutationService, providedIn: 'root' });
147
- }
148
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalLinkMutationService, decorators: [{
149
- type: Injectable,
150
- args: [{
151
- providedIn: 'root',
152
- }]
153
- }] });
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1tdXRhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL3NlcnZpY2VzL2xpbmstbXV0YXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDaEMsT0FBTyxFQUFDLFFBQVEsRUFBYyxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQzs7QUFFeEQ7O0dBRUc7QUFDSCxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FnQnZCLENBQUM7QUF5Q0YsTUFBTSxPQUFPLDBCQUEwQjtJQUNsQixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXpDOztPQUVHO0lBQ0ssWUFBWSxDQUFjO0lBRWxDOztPQUVHO0lBQ0ksSUFBSSxDQUNQLElBQW9CLEVBQ3BCLElBQW9CLEVBQ3BCLFlBQTJCLElBQUksRUFDL0IsWUFBcUIsRUFBRTtRQUV2QixrREFBa0Q7UUFDbEQsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXpDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUN4RSxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENB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Q3BCLElBQW9CLEVBQ3BCLFlBQXFCLEVBQUU7UUFFdkIsSUFBSSxLQUFLLENBQUM7UUFDVixJQUFJLEtBQUssQ0FBQztRQUNWLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3pDLEtBQUssR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUMzQixLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDL0IsQ0FBQzthQUFNLENBQUM7WUFDSixLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDM0IsS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQy9CLENBQUM7UUFDRCxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMzQixTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUUzQixJQUFJLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUM3QixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUN2QyxtQkFBbUIsSUFBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzdFLENBQUM7UUFFRCxPQUFPO2NBQ0QsUUFBUSxDQUFDLElBQUksSUFBSSxtQkFBbUI7OztVQUd4QyxDQUFDO0lBQ1AsQ0FBQzt1R0FyS1EsMEJBQTBCOzJHQUExQiwwQkFBMEIsY0FGdkIsTUFBTTs7MkZBRVQsMEJBQTBCO2tCQUh0QyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXBvbGxvLCBncWx9IGZyb20gJ2Fwb2xsby1hbmd1bGFyJztcbmltcG9ydCB7RmV0Y2hSZXN1bHR9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xuaW1wb3J0IHtpbmplY3QsIEluamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtjbG9uZX0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7Zm9ya0pvaW4sIE9ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TGl0ZXJhbH0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHt1cHBlckNhc2VGaXJzdExldHRlcn0gZnJvbSAnLi4vY2xhc3Nlcy91dGlsaXR5JztcblxuLyoqXG4gKiBRdWVyeSB0byBnZXQgbGlzdCBvZiBtdXRhdGlvbnNcbiAqL1xuY29uc3QgcXVlcmllc1F1ZXJ5ID0gZ3FsYFxuICAgIHF1ZXJ5IE11dGF0aW9ucyB7XG4gICAgICAgIF9fdHlwZShuYW1lOiBcIk11dGF0aW9uXCIpIHtcbiAgICAgICAgICAgIGZpZWxkcyB7XG4gICAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICAgIGFyZ3Mge1xuICAgICAgICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICAgICAgICAgIHR5cGUge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2ZUeXBlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5gO1xuXG50eXBlIEludHJvc3BlY3RlZEFyZyA9IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdHlwZToge1xuICAgICAgICBvZlR5cGU6IG51bGwgfCB7XG4gICAgICAgICAgICBuYW1lOiBudWxsIHwgc3RyaW5nO1xuICAgICAgICB9O1xuICAgIH07XG59O1xuXG50eXBlIEludHJvc3BlY3RlZE11dGF0aW9ucyA9IHtcbiAgICBfX3R5cGU6IG51bGwgfCB7XG4gICAgICAgIGZpZWxkczpcbiAgICAgICAgICAgIHwgbnVsbFxuICAgICAgICAgICAgfCB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICBhcmdzOiBJbnRyb3NwZWN0ZWRBcmdbXTtcbiAgICAgICAgICAgICAgfVtdO1xuICAgIH07XG59O1xuXG5leHBvcnQgdHlwZSBMaW5rYWJsZU9iamVjdCA9IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIF9fdHlwZW5hbWU6IHN0cmluZztcbn07XG5cbnR5cGUgTXV0YXRpb25BcmcgPSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHR5cGU6IHN0cmluZztcbn07XG5cbnR5cGUgTXV0YXRpb24gPSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGFyZzE6IE11dGF0aW9uQXJnO1xuICAgIGFyZzI6IE11dGF0aW9uQXJnO1xufTtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbExpbmtNdXRhdGlvblNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYXBvbGxvID0gaW5qZWN0KEFwb2xsbyk7XG5cbiAgICAvKipcbiAgICAgKiBSZWNlaXZlcyB0aGUgbGlzdCBvZiBhdmFpbGFibGUgbXV0YXRpb25zXG4gICAgICovXG4gICAgcHJpdmF0ZSBhbGxNdXRhdGlvbnM/OiBNdXRhdGlvbltdO1xuXG4gICAgLyoqXG4gICAgICogTGluayB0d28gb2JqZWN0cyB0b2dldGhlclxuICAgICAqL1xuICAgIHB1YmxpYyBsaW5rKFxuICAgICAgICBvYmoxOiBMaW5rYWJsZU9iamVjdCxcbiAgICAgICAgb2JqMjogTGlua2FibGVPYmplY3QsXG4gICAgICAgIG90aGVyTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlczogTGl0ZXJhbCA9IHt9LFxuICAgICk6IE9ic2VydmFibGU8RmV0Y2hSZXN1bHQ8e2lkOiBzdHJpbmd9Pj4ge1xuICAgICAgICAvLyBjbG9uZSBwcmV2ZW50cyB0byBhZmZlY3QgdGhlIG9yaWdpbmFsIHJlZmVyZW5jZVxuICAgICAgICBjb25zdCBjbG9uZWRWYXJpYWJsZXMgPSBjbG9uZSh2YXJpYWJsZXMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmdldE11dGF0aW9uKCdsaW5rJywgb2JqMSwgb2JqMiwgb3RoZXJOYW1lLCBjbG9uZWRWYXJpYWJsZXMpLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAobXV0YXRpb24gPT4gdGhpcy5leGVjdXRlKG11dGF0aW9uKSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTGluayBtYW55IG9iamVjdHNcbiAgICAgKi9cbiAgICBwdWJsaWMgbGlua01hbnkoXG4gICAgICAgIG9iajE6IExpbmthYmxlT2JqZWN0LFxuICAgICAgICBvYmplY3RzOiBMaW5rYWJsZU9iamVjdFtdLFxuICAgICAgICBvdGhlck5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZXM6IExpdGVyYWwgPSB7fSxcbiAgICApOiBPYnNlcnZhYmxlPEZldGNoUmVzdWx0PHtpZDogc3RyaW5nfT5bXT4ge1xuICAgICAgICByZXR1cm4gZm9ya0pvaW4ob2JqZWN0cy5tYXAob2JqMiA9PiB0aGlzLmxpbmsob2JqMSwgb2JqMiwgb3RoZXJOYW1lLCB2YXJpYWJsZXMpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVW5saW5rIHR3byBvYmplY3RzXG4gICAgICovXG4gICAgcHVibGljIHVubGluayhcbiAgICAgICAgb2JqMTogTGlua2FibGVPYmplY3QsXG4gICAgICAgIG9iajI6IExpbmthYmxlT2JqZWN0LFxuICAgICAgICBvdGhlck5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICAgICk6IE9ic2VydmFibGU8RmV0Y2hSZXN1bHQ8e2lkOiBzdHJpbmd9Pj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRNdXRhdGlvbigndW5saW5rJywgb2JqMSwgb2JqMiwgb3RoZXJOYW1lKS5waXBlKHN3aXRjaE1hcChtdXRhdGlvbiA9PiB0aGlzLmV4ZWN1dGUobXV0YXRpb24pKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgbXV0YXRpb24gbmFtZXNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldEFsbE11dGF0aW9uTmFtZXMoKTogT2JzZXJ2YWJsZTxNdXRhdGlvbltdPiB7XG4gICAgICAgIGlmICh0aGlzLmFsbE11dGF0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIG9mKHRoaXMuYWxsTXV0YXRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1hcEFyZyA9IChhcmc6IEludHJvc3BlY3RlZEFyZyk6IE11dGF0aW9uQXJnID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbmFtZTogYXJnLm5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogYXJnLnR5cGU/Lm9mVHlwZT8ubmFtZT8ucmVwbGFjZSgvSUQkLywgJycpIHx8ICdzaG91bGQtbmV2ZXItaGFwcGVuJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBvbGxvXG4gICAgICAgICAgICAucXVlcnk8SW50cm9zcGVjdGVkTXV0YXRpb25zPih7XG4gICAgICAgICAgICAgICAgcXVlcnk6IHF1ZXJpZXNRdWVyeSxcbiAgICAgICAgICAgICAgICBmZXRjaFBvbGljeTogJ2NhY2hlLWZpcnN0JyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHtkYXRhfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5fX3R5cGU/LmZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxNdXRhdGlvbnMgPSBkYXRhLl9fdHlwZS5maWVsZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKHYgPT4gL14obGlua3x1bmxpbmspLy5leGVjKHYubmFtZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCh2ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHYubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzE6IG1hcEFyZyh2LmFyZ3NbMF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnMjogbWFwQXJnKHYuYXJnc1sxXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsbE11dGF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWxsTXV0YXRpb25zO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZSBtdXRhdGlvbiB1c2luZyBwYXR0ZXJucyBhbmQgcmVwbGFjaW5nIHZhcmlhYmxlc1xuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0TXV0YXRpb24oXG4gICAgICAgIGFjdGlvbjogc3RyaW5nLFxuICAgICAgICBvYmoxOiBMaW5rYWJsZU9iamVjdCxcbiAgICAgICAgb2JqMjogTGlua2FibGVPYmplY3QsXG4gICAgICAgIG90aGVyTmFtZTogc3RyaW5nIHwgbnVsbCxcbiAgICAgICAgdmFyaWFibGVzOiBMaXRlcmFsID0ge30sXG4gICAgKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgb3RoZXJOYW1lID0gb3RoZXJOYW1lID8gdXBwZXJDYXNlRmlyc3RMZXR0ZXIob3RoZXJOYW1lKSA6IG90aGVyTmFtZTtcbiAgICAgICAgY29uc3QgbXV0YXRpb25OYW1lID0gYWN0aW9uICsgb2JqMS5fX3R5cGVuYW1lICsgKG90aGVyTmFtZSB8fCBvYmoyLl9fdHlwZW5hbWUpO1xuICAgICAgICBjb25zdCByZXZlcnNlZE11dGF0aW9uTmFtZSA9IGFjdGlvbiArIG9iajIuX190eXBlbmFtZSArIChvdGhlck5hbWUgfHwgb2JqMS5fX3R5cGVuYW1lKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRBbGxNdXRhdGlvbk5hbWVzKCkucGlwZShcbiAgICAgICAgICAgIG1hcChhbGxNdXRhdGlvbk5hbWVzID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtdXRhdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIGFsbE11dGF0aW9uTmFtZXMuZmluZChtdXQgPT4gbXV0Lm5hbWUgPT09IG11dGF0aW9uTmFtZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgYWxsTXV0YXRpb25OYW1lcy5maW5kKG11dCA9PiBtdXQubmFtZSA9PT0gcmV2ZXJzZWRNdXRhdGlvbk5hbWUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG11dGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1aWxkVGVtcGxhdGUobXV0YXRpb24sIG9iajEsIG9iajIsIHZhcmlhYmxlcyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdBUEkgZG9lcyBub3QgYWxsb3cgdG8gJyArIGFjdGlvbiArICcgJyArIG9iajEuX190eXBlbmFtZSArICcgYW5kICcgKyBvYmoyLl9fdHlwZW5hbWUpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhlY3V0ZSBtdXRhdGlvblxuICAgICAqL1xuICAgIHByaXZhdGUgZXhlY3V0ZShtdXRhdGlvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxGZXRjaFJlc3VsdDx7aWQ6IHN0cmluZ30+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwb2xsb1xuICAgICAgICAgICAgLm11dGF0ZTx7aWQ6IHN0cmluZ30+KHtcbiAgICAgICAgICAgICAgICBtdXRhdGlvbjogZ3FsKG11dGF0aW9uKSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAociA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBvbGxvLmNsaWVudC5yZUZldGNoT2JzZXJ2YWJsZVF1ZXJpZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1aWxkIHRoZSBhY3R1YWwgbXV0YXRpb24gc3RyaW5nXG4gICAgICovXG4gICAgcHJpdmF0ZSBidWlsZFRlbXBsYXRlKFxuICAgICAgICBtdXRhdGlvbjogTXV0YXRpb24sXG4gICAgICAgIG9iajE6IExpbmthYmxlT2JqZWN0LFxuICAgICAgICBvYmoyOiBMaW5rYWJsZU9iamVjdCxcbiAgICAgICAgdmFyaWFibGVzOiBMaXRlcmFsID0ge30sXG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IG5hbWUxO1xuICAgICAgICBsZXQgbmFtZTI7XG4gICAgICAgIGlmIChvYmoxLl9fdHlwZW5hbWUgPT09IG11dGF0aW9uLmFyZzEudHlwZSkge1xuICAgICAgICAgICAgbmFtZTEgPSBtdXRhdGlvbi5hcmcxLm5hbWU7XG4gICAgICAgICAgICBuYW1lMiA9IG11dGF0aW9uLmFyZzIubmFtZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5hbWUxID0gbXV0YXRpb24uYXJnMi5uYW1lO1xuICAgICAgICAgICAgbmFtZTIgPSBtdXRhdGlvbi5hcmcxLm5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyaWFibGVzW25hbWUxXSA9IG9iajEuaWQ7XG4gICAgICAgIHZhcmlhYmxlc1tuYW1lMl0gPSBvYmoyLmlkO1xuXG4gICAgICAgIGxldCBzZXJpYWxpemVkVmFyaWFibGVzID0gJyc7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHZhcmlhYmxlcykpIHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZWRWYXJpYWJsZXMgKz0ga2V5ICsgJzogJyArIEpTT04uc3RyaW5naWZ5KHZhcmlhYmxlc1trZXldKSArICcgJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBgbXV0YXRpb24gbGlua0FuZFVubGluayB7XG4gICAgICAgICAgICAke211dGF0aW9uLm5hbWV9KCR7c2VyaWFsaXplZFZhcmlhYmxlc30pIHtcbiAgICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgfVxuICAgICAgICB9YDtcbiAgICB9XG59XG4iXX0=
@@ -1,115 +0,0 @@
1
- import { inject, Injectable, InjectionToken } from '@angular/core';
2
- import { Router } from '@angular/router';
3
- import { clone } from 'lodash-es';
4
- import { SESSION_STORAGE } from '../modules/common/services/memory-storage';
5
- import * as i0 from "@angular/core";
6
- export const NATURAL_PERSISTENCE_VALIDATOR = new InjectionToken('Validator for persisted value retrieved from NaturalPersistenceService. If returns false, the persisted value will never be returned.');
7
- export class NaturalPersistenceService {
8
- router = inject(Router);
9
- sessionStorage = inject(SESSION_STORAGE);
10
- isValid = inject(NATURAL_PERSISTENCE_VALIDATOR, { optional: true }) ?? (() => true); // By default, anything is valid
11
- /**
12
- * Persist in url and local storage the given value with the given key.
13
- * When stored in storage, we need more "key" to identify the controller.
14
- */
15
- persist(key, value, route, storageKey, navigationExtras) {
16
- this.persistInStorage(key, value, storageKey);
17
- return this.persistInUrl(key, value, route, navigationExtras);
18
- }
19
- /**
20
- * Return object with persisted data in url or in session storage
21
- * Url has priority over session storage because of url sharing. When url is provided, session storage is ignored.
22
- * Url and storage are synced when arriving in a component :
23
- * - When loading with url parameters, storage is updated to stay synced
24
- * - When loading without url, but with storage data, the url is updated
25
- */
26
- // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
27
- get(key, route, storageKey) {
28
- // From url
29
- let params = this.getFromUrl(key, route);
30
- if (!this.isFalseyValue(params)) {
31
- this.persistInStorage(key, params, storageKey);
32
- return params;
33
- }
34
- // From storage
35
- params = this.getFromStorage(key, storageKey);
36
- if (!this.isFalseyValue(params)) {
37
- this.persistInUrl(key, params, route);
38
- return params;
39
- }
40
- return null;
41
- }
42
- /**
43
- * Get given key from the url parameters
44
- */
45
- // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
46
- getFromUrl(key, route) {
47
- const value = route.snapshot.paramMap.get(key);
48
- return this.deserialize(key, null, value);
49
- }
50
- /**
51
- * Add/override given pair key-value in the url
52
- * Always JSON.stringify() the given value
53
- * If the value is falsey, the pair key-value is removed from the url.
54
- */
55
- persistInUrl(key, value, route, navigationExtras) {
56
- const params = clone(route.snapshot.url[route.snapshot.url.length - 1].parameters);
57
- if (this.isFalseyValue(value)) {
58
- delete params[key];
59
- }
60
- else {
61
- params[key] = JSON.stringify(value);
62
- }
63
- navigationExtras = Object.assign(navigationExtras || {}, { relativeTo: route });
64
- return this.router.navigate(['.', params], navigationExtras);
65
- }
66
- // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
67
- getFromStorage(key, storageKey) {
68
- const value = this.sessionStorage.getItem(this.getStorageKey(key, storageKey));
69
- return this.deserialize(key, storageKey, value);
70
- }
71
- /**
72
- * Store value in session storage.
73
- * If value is falsy, the entry is removed
74
- */
75
- persistInStorage(key, value, storageKey) {
76
- if (this.isFalseyValue(value)) {
77
- this.sessionStorage.removeItem(this.getStorageKey(key, storageKey));
78
- }
79
- else {
80
- this.sessionStorage.setItem(this.getStorageKey(key, storageKey), JSON.stringify(value));
81
- }
82
- }
83
- getStorageKey(key, storageKey) {
84
- return storageKey + '-' + key;
85
- }
86
- // Returns if the given value is falsey
87
- // Falsey values are : null, undefined and empty string.
88
- // This cause usually the parameter to be removed from url/storage instead of being stored with no value. Url would be polluted.
89
- isFalseyValue(value) {
90
- return value == null || value === ''; // == means null or undefined;
91
- }
92
- // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
93
- deserialize(key, storageKey, value) {
94
- if (!value) {
95
- return null;
96
- }
97
- let result = null;
98
- try {
99
- result = JSON.parse(value);
100
- }
101
- catch (e) {
102
- // noop
103
- }
104
- return this.isValid(key, storageKey, result) ? result : null;
105
- }
106
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalPersistenceService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
107
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalPersistenceService, providedIn: 'root' });
108
- }
109
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalPersistenceService, decorators: [{
110
- type: Injectable,
111
- args: [{
112
- providedIn: 'root',
113
- }]
114
- }] });
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc2lzdGVuY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9zZXJ2aWNlcy9wZXJzaXN0ZW5jZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQW1DLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pFLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDaEMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDJDQUEyQyxDQUFDOztBQVUxRSxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxJQUFJLGNBQWMsQ0FDM0QsdUlBQXVJLENBQzFJLENBQUM7QUFLRixNQUFNLE9BQU8seUJBQXlCO0lBQ2pCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEIsY0FBYyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN6QyxPQUFPLEdBQUcsTUFBTSxDQUFDLDZCQUE2QixFQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGdDQUFnQztJQUVwSTs7O09BR0c7SUFDSSxPQUFPLENBQ1YsR0FBVyxFQUNYLEtBQWMsRUFDZCxLQUFxQixFQUNyQixVQUFrQixFQUNsQixnQkFBbUM7UUFFbkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDOUMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNI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LEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDNUYsQ0FBQztJQUNMLENBQUM7SUFFTyxhQUFhLENBQUMsR0FBVyxFQUFFLFVBQWtCO1FBQ2pELE9BQU8sVUFBVSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDbEMsQ0FBQztJQUVELHVDQUF1QztJQUN2Qyx3REFBd0Q7SUFDeEQsZ0lBQWdJO0lBQ3hILGFBQWEsQ0FBQyxLQUFjO1FBQ2hDLE9BQU8sS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDLENBQUMsOEJBQThCO0lBQ3hFLENBQUM7SUFFRCw2RUFBNkU7SUFDckUsV0FBVyxDQUFDLEdBQVcsRUFBRSxVQUF5QixFQUFFLEtBQW9CO1FBQzVFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNULE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDO1lBQ0QsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDVCxPQUFPO1FBQ1gsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNqRSxDQUFDO3VHQTVIUSx5QkFBeUI7MkdBQXpCLHlCQUF5QixjQUZ0QixNQUFNOzsyRkFFVCx5QkFBeUI7a0JBSHJDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FeHRyYXMsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7Y2xvbmV9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1NFU1NJT05fU1RPUkFHRX0gZnJvbSAnLi4vbW9kdWxlcy9jb21tb24vc2VydmljZXMvbWVtb3J5LXN0b3JhZ2UnO1xuXG4vKipcbiAqIFZhbGlkYXRvciBmb3IgcGVyc2lzdGVkIHZhbHVlcyByZXRyaWV2ZWQgZnJvbSBOYXR1cmFsUGVyc2lzdGVuY2VTZXJ2aWNlLiBJZiByZXR1cm5zIGZhbHNlLCB0aGUgcGVyc2lzdGVkIHZhbHVlXG4gKiB3aWxsIGJlIGlnbm9yZWQsIGFuZCBpbnN0ZWFkIGBudWxsYCB3aWxsIGJlIHJldHVybmVkLlxuICpcbiAqIGBzdG9yYWdlS2V5YCBpcyBvbmx5IGdpdmVuIGlmIHRoZSB2YWx1ZSBpcyBjb21pbmcgZnJvbSBzZXNzaW9uIHN0b3JhZ2UgKGFuZCBub3QgZnJvbSBVUkwpLlxuICovXG5leHBvcnQgdHlwZSBQZXJzaXN0ZW5jZVZhbGlkYXRvciA9IChrZXk6IHN0cmluZywgc3RvcmFnZUtleTogc3RyaW5nIHwgbnVsbCwgdmFsdWU6IHVua25vd24pID0+IGJvb2xlYW47XG5cbmV4cG9ydCBjb25zdCBOQVRVUkFMX1BFUlNJU1RFTkNFX1ZBTElEQVRPUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxQZXJzaXN0ZW5jZVZhbGlkYXRvcj4oXG4gICAgJ1ZhbGlkYXRvciBmb3IgcGVyc2lzdGVkIHZhbHVlIHJldHJpZXZlZCBmcm9tIE5hdHVyYWxQZXJzaXN0ZW5jZVNlcnZpY2UuIElmIHJldHVybnMgZmFsc2UsIHRoZSBwZXJzaXN0ZWQgdmFsdWUgd2lsbCBuZXZlciBiZSByZXR1cm5lZC4nLFxuKTtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbFBlcnNpc3RlbmNlU2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25TdG9yYWdlID0gaW5qZWN0KFNFU1NJT05fU1RPUkFHRSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpc1ZhbGlkID0gaW5qZWN0KE5BVFVSQUxfUEVSU0lTVEVOQ0VfVkFMSURBVE9SLCB7b3B0aW9uYWw6IHRydWV9KSA/PyAoKCkgPT4gdHJ1ZSk7IC8vIEJ5IGRlZmF1bHQsIGFueXRoaW5nIGlzIHZhbGlkXG5cbiAgICAvKipcbiAgICAgKiBQZXJzaXN0IGluIHVybCBhbmQgbG9jYWwgc3RvcmFnZSB0aGUgZ2l2ZW4gdmFsdWUgd2l0aCB0aGUgZ2l2ZW4ga2V5LlxuICAgICAqIFdoZW4gc3RvcmVkIGluIHN0b3JhZ2UsIHdlIG5lZWQgbW9yZSBcImtleVwiIHRvIGlkZW50aWZ5IHRoZSBjb250cm9sbGVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBwZXJzaXN0KFxuICAgICAgICBrZXk6IHN0cmluZyxcbiAgICAgICAgdmFsdWU6IHVua25vd24sXG4gICAgICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgc3RvcmFnZUtleTogc3RyaW5nLFxuICAgICAgICBuYXZpZ2F0aW9uRXh0cmFzPzogTmF2aWdhdGlvbkV4dHJhcyxcbiAgICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgdGhpcy5wZXJzaXN0SW5TdG9yYWdlKGtleSwgdmFsdWUsIHN0b3JhZ2VLZXkpO1xuICAgICAgICByZXR1cm4gdGhpcy5wZXJzaXN0SW5Vcmwoa2V5LCB2YWx1ZSwgcm91dGUsIG5hdmlnYXRpb25FeHRyYXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBvYmplY3Qgd2l0aCBwZXJzaXN0ZWQgZGF0YSBpbiB1cmwgb3IgaW4gc2Vzc2lvbiBzdG9yYWdlXG4gICAgICogVXJsIGhhcyBwcmlvcml0eSBvdmVyIHNlc3Npb24gc3RvcmFnZSBiZWNhdXNlIG9mIHVybCBzaGFyaW5nLiBXaGVuIHVybCBpcyBwcm92aWRlZCwgc2Vzc2lvbiBzdG9yYWdlIGlzIGlnbm9yZWQuXG4gICAgICogVXJsIGFuZCBzdG9yYWdlIGFyZSBzeW5jZWQgd2hlbiBhcnJpdmluZyBpbiBhIGNvbXBvbmVudCA6XG4gICAgICogIC0gV2hlbiBsb2FkaW5nIHdpdGggdXJsIHBhcmFtZXRlcnMsIHN0b3JhZ2UgaXMgdXBkYXRlZCB0byBzdGF5IHN5bmNlZFxuICAgICAqICAtIFdoZW4gbG9hZGluZyB3aXRob3V0IHVybCwgYnV0IHdpdGggc3RvcmFnZSBkYXRhLCB0aGUgdXJsIGlzIHVwZGF0ZWRcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlZHVuZGFudC10eXBlLWNvbnN0aXR1ZW50c1xuICAgIHB1YmxpYyBnZXQoa2V5OiBzdHJpbmcsIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgc3RvcmFnZUtleTogc3RyaW5nKTogYW55IHwgbnVsbCB7XG4gICAgICAgIC8vIEZyb20gdXJsXG4gICAgICAgIGxldCBwYXJhbXMgPSB0aGlzLmdldEZyb21Vcmwoa2V5LCByb3V0ZSk7XG4gICAgICAgIGlmICghdGhpcy5pc0ZhbHNleVZhbHVlKHBhcmFtcykpIHtcbiAgICAgICAgICAgIHRoaXMucGVyc2lzdEluU3RvcmFnZShrZXksIHBhcmFtcywgc3RvcmFnZUtleSk7XG4gICAgICAgICAgICByZXR1cm4gcGFyYW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRnJvbSBzdG9yYWdlXG4gICAgICAgIHBhcmFtcyA9IHRoaXMuZ2V0RnJvbVN0b3JhZ2Uoa2V5LCBzdG9yYWdlS2V5KTtcbiAgICAgICAgaWYgKCF0aGlzLmlzRmFsc2V5VmFsdWUocGFyYW1zKSkge1xuICAgICAgICAgICAgdGhpcy5wZXJzaXN0SW5Vcmwoa2V5LCBwYXJhbXMsIHJvdXRlKTtcbiAgICAgICAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgZ2l2ZW4ga2V5IGZyb20gdGhlIHVybCBwYXJhbWV0ZXJzXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZWR1bmRhbnQtdHlwZS1jb25zdGl0dWVudHNcbiAgICBwdWJsaWMgZ2V0RnJvbVVybChrZXk6IHN0cmluZywgcm91dGU6IEFjdGl2YXRlZFJvdXRlKTogYW55IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KGtleSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVzZXJpYWxpemUoa2V5LCBudWxsLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkL292ZXJyaWRlIGdpdmVuIHBhaXIga2V5LXZhbHVlIGluIHRoZSB1cmxcbiAgICAgKiBBbHdheXMgSlNPTi5zdHJpbmdpZnkoKSB0aGUgZ2l2ZW4gdmFsdWVcbiAgICAgKiBJZiB0aGUgdmFsdWUgaXMgZmFsc2V5LCB0aGUgcGFpciBrZXktdmFsdWUgaXMgcmVtb3ZlZCBmcm9tIHRoZSB1cmwuXG4gICAgICovXG4gICAgcHVibGljIHBlcnNpc3RJblVybChcbiAgICAgICAga2V5OiBzdHJpbmcsXG4gICAgICAgIHZhbHVlOiB1bmtub3duLFxuICAgICAgICByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIG5hdmlnYXRpb25FeHRyYXM/OiBOYXZpZ2F0aW9uRXh0cmFzLFxuICAgICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBjbG9uZShyb3V0ZS5zbmFwc2hvdC51cmxbcm91dGUuc25hcHNob3QudXJsLmxlbmd0aCAtIDFdLnBhcmFtZXRlcnMpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzRmFsc2V5VmFsdWUodmFsdWUpKSB7XG4gICAgICAgICAgICBkZWxldGUgcGFyYW1zW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJhbXNba2V5XSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5hdmlnYXRpb25FeHRyYXMgPSBPYmplY3QuYXNzaWduKG5hdmlnYXRpb25FeHRyYXMgfHwge30sIHtyZWxhdGl2ZVRvOiByb3V0ZX0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4nLCBwYXJhbXNdLCBuYXZpZ2F0aW9uRXh0cmFzKTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlZHVuZGFudC10eXBlLWNvbnN0aXR1ZW50c1xuICAgIHB1YmxpYyBnZXRGcm9tU3RvcmFnZShrZXk6IHN0cmluZywgc3RvcmFnZUtleTogc3RyaW5nKTogYW55IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuZ2V0U3RvcmFnZUtleShrZXksIHN0b3JhZ2VLZXkpKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5kZXNlcmlhbGl6ZShrZXksIHN0b3JhZ2VLZXksIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdG9yZSB2YWx1ZSBpbiBzZXNzaW9uIHN0b3JhZ2UuXG4gICAgICogSWYgdmFsdWUgaXMgZmFsc3ksIHRoZSBlbnRyeSBpcyByZW1vdmVkXG4gICAgICovXG4gICAgcHVibGljIHBlcnNpc3RJblN0b3JhZ2Uoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBzdG9yYWdlS2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNGYWxzZXlWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmdldFN0b3JhZ2VLZXkoa2V5LCBzdG9yYWdlS2V5KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy5nZXRTdG9yYWdlS2V5KGtleSwgc3RvcmFnZUtleSksIEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN0b3JhZ2VLZXkoa2V5OiBzdHJpbmcsIHN0b3JhZ2VLZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBzdG9yYWdlS2V5ICsgJy0nICsga2V5O1xuICAgIH1cblxuICAgIC8vIFJldHVybnMgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGZhbHNleVxuICAgIC8vIEZhbHNleSB2YWx1ZXMgYXJlIDogbnVsbCwgdW5kZWZpbmVkIGFuZCBlbXB0eSBzdHJpbmcuXG4gICAgLy8gVGhpcyBjYXVzZSB1c3VhbGx5IHRoZSBwYXJhbWV0ZXIgdG8gYmUgcmVtb3ZlZCBmcm9tIHVybC9zdG9yYWdlIGluc3RlYWQgb2YgYmVpbmcgc3RvcmVkIHdpdGggbm8gdmFsdWUuIFVybCB3b3VsZCBiZSBwb2xsdXRlZC5cbiAgICBwcml2YXRlIGlzRmFsc2V5VmFsdWUodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnOyAvLyA9PSBtZWFucyBudWxsIG9yIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlZHVuZGFudC10eXBlLWNvbnN0aXR1ZW50c1xuICAgIHByaXZhdGUgZGVzZXJpYWxpemUoa2V5OiBzdHJpbmcsIHN0b3JhZ2VLZXk6IHN0cmluZyB8IG51bGwsIHZhbHVlOiBzdHJpbmcgfCBudWxsKTogdW5rbm93biB8IG51bGwge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoa2V5LCBzdG9yYWdlS2V5LCByZXN1bHQpID8gcmVzdWx0IDogbnVsbDtcbiAgICB9XG59XG4iXX0=
@@ -1,63 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { NativeDateAdapter } from '@angular/material/core';
3
- import * as i0 from "@angular/core";
4
- const patterns = [
5
- /^(?<day>\d{1,2})\.(?<month>\d{1,2})\.(?<year>\d{4}|\d{2})$/,
6
- /^(?<day>\d{1,2})-(?<month>\d{1,2})-(?<year>\d{4}|\d{2})$/,
7
- /^(?<day>\d{1,2})\/(?<month>\d{1,2})\/(?<year>\d{4}|\d{2})$/,
8
- /^(?<day>\d{1,2})\\(?<month>\d{1,2})\\(?<year>\d{4}|\d{2})$/,
9
- // strict ISO format
10
- /^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/,
11
- ];
12
- export class NaturalSwissParsingDateAdapter extends NativeDateAdapter {
13
- /**
14
- * Parse commonly accepted swiss format, such as:
15
- *
16
- * - 24.12.2018
17
- * - 1.4.18
18
- * - 2018-12-24
19
- */
20
- parse(value) {
21
- if (typeof value === 'number') {
22
- return new Date(value);
23
- }
24
- if (typeof value === 'string') {
25
- const trimmed = value.trim();
26
- for (const pattern of patterns) {
27
- const m = trimmed.match(pattern);
28
- if (m?.groups) {
29
- const year = +m.groups.year;
30
- const month = +m.groups.month;
31
- const day = +m.groups.day;
32
- return this.createDateIfValid(year, month, day);
33
- }
34
- }
35
- }
36
- return null;
37
- }
38
- createDateIfValid(year, month, date) {
39
- // Assume year 2000 if only two digits
40
- if (year < 100) {
41
- year += 2000;
42
- }
43
- month = month - 1;
44
- if (month >= 0 && month <= 11 && date >= 1 && date <= 31) {
45
- return this.createDate(year, month, date);
46
- }
47
- return null;
48
- }
49
- getFirstDayOfWeek() {
50
- // Always starts on Monday, even though it is not true for Canada, U.S., Mexico and many more
51
- // Also see https://github.com/tc39/ecma402/issues/6
52
- return 1;
53
- }
54
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalSwissParsingDateAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
55
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalSwissParsingDateAdapter, providedIn: 'root' });
56
- }
57
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalSwissParsingDateAdapter, decorators: [{
58
- type: Injectable,
59
- args: [{
60
- providedIn: 'root',
61
- }]
62
- }] });
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpc3MtcGFyc2luZy1kYXRlLWFkYXB0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9zZXJ2aWNlcy9zd2lzcy1wYXJzaW5nLWRhdGUtYWRhcHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7O0FBRXpELE1BQU0sUUFBUSxHQUFzQjtJQUNoQyw0REFBNEQ7SUFDNUQsMERBQTBEO0lBQzFELDREQUE0RDtJQUM1RCw0REFBNEQ7SUFDNUQsb0JBQW9CO0lBQ3BCLGdEQUFnRDtDQUNuRCxDQUFDO0FBS0YsTUFBTSxPQUFPLDhCQUErQixTQUFRLGlCQUFpQjtJQUNqRTs7Ozs7O09BTUc7SUFDYSxLQUFLLENBQUMsS0FBYztRQUNoQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzVCLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsQ0FBQztRQUVELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDNUIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBRTdCLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO29CQUNaLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7b0JBQzVCLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7b0JBQzlCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7b0JBRTFCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3BELENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxJQUFZLEVBQUUsS0FBYSxFQUFFLElBQVk7UUFDL0Qsc0NBQXNDO1FBQ3RDLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxJQUFJLElBQUksQ0FBQztRQUNqQixDQUFDO1FBRUQsS0FBSyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDbEIsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLENBQUM7WUFDdkQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFZSxpQkFBaUI7UUFDN0IsNkZBQTZGO1FBQzdGLG9EQUFvRDtRQUNwRCxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7dUdBakRRLDhCQUE4QjsyR0FBOUIsOEJBQThCLGNBRjNCLE1BQU07OzJGQUVULDhCQUE4QjtrQkFIMUMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOYXRpdmVEYXRlQWRhcHRlcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5cbmNvbnN0IHBhdHRlcm5zOiByZWFkb25seSBSZWdFeHBbXSA9IFtcbiAgICAvXig/PGRheT5cXGR7MSwyfSlcXC4oPzxtb250aD5cXGR7MSwyfSlcXC4oPzx5ZWFyPlxcZHs0fXxcXGR7Mn0pJC8sXG4gICAgL14oPzxkYXk+XFxkezEsMn0pLSg/PG1vbnRoPlxcZHsxLDJ9KS0oPzx5ZWFyPlxcZHs0fXxcXGR7Mn0pJC8sXG4gICAgL14oPzxkYXk+XFxkezEsMn0pXFwvKD88bW9udGg+XFxkezEsMn0pXFwvKD88eWVhcj5cXGR7NH18XFxkezJ9KSQvLFxuICAgIC9eKD88ZGF5PlxcZHsxLDJ9KVxcXFwoPzxtb250aD5cXGR7MSwyfSlcXFxcKD88eWVhcj5cXGR7NH18XFxkezJ9KSQvLFxuICAgIC8vIHN0cmljdCBJU08gZm9ybWF0XG4gICAgL14oPzx5ZWFyPlxcZHs0fSktKD88bW9udGg+XFxkezJ9KS0oPzxkYXk+XFxkezJ9KSQvLFxuXTtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbFN3aXNzUGFyc2luZ0RhdGVBZGFwdGVyIGV4dGVuZHMgTmF0aXZlRGF0ZUFkYXB0ZXIge1xuICAgIC8qKlxuICAgICAqIFBhcnNlIGNvbW1vbmx5IGFjY2VwdGVkIHN3aXNzIGZvcm1hdCwgc3VjaCBhczpcbiAgICAgKlxuICAgICAqIC0gMjQuMTIuMjAxOFxuICAgICAqIC0gMS40LjE4XG4gICAgICogLSAyMDE4LTEyLTI0XG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHBhcnNlKHZhbHVlOiB1bmtub3duKTogRGF0ZSB8IG51bGwge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCB0cmltbWVkID0gdmFsdWUudHJpbSgpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtID0gdHJpbW1lZC5tYXRjaChwYXR0ZXJuKTtcbiAgICAgICAgICAgICAgICBpZiAobT8uZ3JvdXBzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHllYXIgPSArbS5ncm91cHMueWVhcjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9udGggPSArbS5ncm91cHMubW9udGg7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheSA9ICttLmdyb3Vwcy5kYXk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRGF0ZUlmVmFsaWQoeWVhciwgbW9udGgsIGRheSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVEYXRlSWZWYWxpZCh5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIsIGRhdGU6IG51bWJlcik6IERhdGUgfCBudWxsIHtcbiAgICAgICAgLy8gQXNzdW1lIHllYXIgMjAwMCBpZiBvbmx5IHR3byBkaWdpdHNcbiAgICAgICAgaWYgKHllYXIgPCAxMDApIHtcbiAgICAgICAgICAgIHllYXIgKz0gMjAwMDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1vbnRoID0gbW9udGggLSAxO1xuICAgICAgICBpZiAobW9udGggPj0gMCAmJiBtb250aCA8PSAxMSAmJiBkYXRlID49IDEgJiYgZGF0ZSA8PSAzMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0Rmlyc3REYXlPZldlZWsoKTogbnVtYmVyIHtcbiAgICAgICAgLy8gQWx3YXlzIHN0YXJ0cyBvbiBNb25kYXksIGV2ZW4gdGhvdWdoIGl0IGlzIG5vdCB0cnVlIGZvciBDYW5hZGEsIFUuUy4sIE1leGljbyBhbmQgbWFueSBtb3JlXG4gICAgICAgIC8vIEFsc28gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L2VjbWE0MDIvaXNzdWVzLzZcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxufVxuIl19