@ethlete/query 5.16.0 → 5.16.1

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 (184) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/esm2022/ethlete-query.mjs +5 -0
  3. package/esm2022/index.mjs +20 -0
  4. package/esm2022/lib/auth/auth-provider.types.mjs +2 -0
  5. package/esm2022/lib/auth/auth-provider.utils.mjs +25 -0
  6. package/esm2022/lib/auth/basic-auth-provider.mjs +15 -0
  7. package/esm2022/lib/auth/bearer-auth-provider.mjs +168 -0
  8. package/esm2022/lib/auth/custom-header-auth-provider.mjs +12 -0
  9. package/esm2022/lib/auth/index.mjs +6 -0
  10. package/esm2022/lib/class-validator/class-validator.types.mjs +2 -0
  11. package/esm2022/lib/class-validator/class-validator.utils.mjs +4 -0
  12. package/esm2022/lib/class-validator/index.mjs +3 -0
  13. package/esm2022/lib/devtools/components/query-devtools/index.mjs +2 -0
  14. package/esm2022/lib/devtools/components/query-devtools/query-devtools.component.mjs +297 -0
  15. package/esm2022/lib/devtools/pipes/index.mjs +2 -0
  16. package/esm2022/lib/devtools/pipes/query-short-name.pipe.mjs +24 -0
  17. package/esm2022/lib/devtools/utils/index.mjs +2 -0
  18. package/esm2022/lib/devtools/utils/query-client.utils.mjs +13 -0
  19. package/esm2022/lib/directives/index.mjs +4 -0
  20. package/esm2022/lib/directives/infinity-query-trigger.directive.mjs +56 -0
  21. package/esm2022/lib/directives/infinity-query.directive.mjs +147 -0
  22. package/esm2022/lib/directives/query.directive.mjs +123 -0
  23. package/esm2022/lib/entity/entity-store.mjs +127 -0
  24. package/esm2022/lib/entity/entity.types.mjs +2 -0
  25. package/esm2022/lib/entity/entity.utils.mjs +29 -0
  26. package/esm2022/lib/entity/index.mjs +4 -0
  27. package/esm2022/lib/gql/gql.mjs +23 -0
  28. package/esm2022/lib/gql/index.mjs +2 -0
  29. package/esm2022/lib/infinite-query/index.mjs +4 -0
  30. package/esm2022/lib/infinite-query/infinity-query.mjs +171 -0
  31. package/esm2022/lib/infinite-query/infinity-query.types.mjs +2 -0
  32. package/esm2022/lib/infinite-query/infinity-query.utils.mjs +3 -0
  33. package/esm2022/lib/logger/index.mjs +2 -0
  34. package/esm2022/lib/logger/logger.mjs +16 -0
  35. package/esm2022/lib/query/index.mjs +4 -0
  36. package/esm2022/lib/query/query.mjs +428 -0
  37. package/esm2022/lib/query/query.types.mjs +2 -0
  38. package/esm2022/lib/query/query.utils.mjs +253 -0
  39. package/esm2022/lib/query-client/index.mjs +4 -0
  40. package/esm2022/lib/query-client/query-client.mjs +80 -0
  41. package/esm2022/lib/query-client/query-client.types.mjs +2 -0
  42. package/esm2022/lib/query-client/query-client.utils.mjs +20 -0
  43. package/esm2022/lib/query-creator/index.mjs +3 -0
  44. package/esm2022/lib/query-creator/query-creator.mjs +55 -0
  45. package/esm2022/lib/query-creator/query-creator.types.mjs +2 -0
  46. package/esm2022/lib/query-form/index.mjs +4 -0
  47. package/esm2022/lib/query-form/query-form.mjs +379 -0
  48. package/esm2022/lib/query-form/query-form.types.mjs +2 -0
  49. package/esm2022/lib/query-form/query-form.utils.mjs +97 -0
  50. package/esm2022/lib/query-store/index.mjs +2 -0
  51. package/esm2022/lib/query-store/query-store.mjs +144 -0
  52. package/esm2022/lib/request/index.mjs +4 -0
  53. package/esm2022/lib/request/request.mjs +196 -0
  54. package/esm2022/lib/request/request.types.mjs +2 -0
  55. package/esm2022/lib/request/request.util.mjs +252 -0
  56. package/esm2022/lib/symfony/index.mjs +3 -0
  57. package/esm2022/lib/symfony/symfony.types.mjs +2 -0
  58. package/esm2022/lib/symfony/symfony.utils.mjs +31 -0
  59. package/esm2022/lib/utils/data.utils.mjs +138 -0
  60. package/esm2022/lib/utils/deep-freeze.util.mjs +17 -0
  61. package/esm2022/lib/utils/def.util.mjs +8 -0
  62. package/esm2022/lib/utils/index.mjs +4 -0
  63. package/fesm2022/ethlete-query.mjs +3287 -0
  64. package/fesm2022/ethlete-query.mjs.map +1 -0
  65. package/{src/index.ts → index.d.ts} +0 -2
  66. package/lib/auth/auth-provider.types.d.ts +133 -0
  67. package/lib/auth/auth-provider.utils.d.ts +9 -0
  68. package/lib/auth/basic-auth-provider.d.ts +10 -0
  69. package/lib/auth/bearer-auth-provider.d.ts +23 -0
  70. package/lib/auth/custom-header-auth-provider.d.ts +9 -0
  71. package/{src/lib/class-validator/class-validator.types.ts → lib/class-validator/class-validator.types.d.ts} +3 -4
  72. package/lib/class-validator/class-validator.utils.d.ts +2 -0
  73. package/lib/devtools/components/query-devtools/query-devtools.component.d.ts +151 -0
  74. package/lib/devtools/pipes/query-short-name.pipe.d.ts +8 -0
  75. package/lib/devtools/utils/query-client.utils.d.ts +12 -0
  76. package/lib/directives/infinity-query-trigger.directive.d.ts +15 -0
  77. package/lib/directives/infinity-query.directive.d.ts +49 -0
  78. package/lib/directives/query.directive.d.ts +63 -0
  79. package/lib/entity/entity-store.d.ts +25 -0
  80. package/lib/entity/entity.types.d.ts +25 -0
  81. package/lib/entity/entity.utils.d.ts +12 -0
  82. package/lib/gql/gql.d.ts +6 -0
  83. package/lib/infinite-query/infinity-query.d.ts +29 -0
  84. package/lib/infinite-query/infinity-query.types.d.ts +104 -0
  85. package/lib/infinite-query/infinity-query.utils.d.ts +4 -0
  86. package/lib/logger/logger.d.ts +12 -0
  87. package/lib/query/query.d.ts +60 -0
  88. package/lib/query/query.types.d.ts +388 -0
  89. package/lib/query/query.utils.d.ts +91 -0
  90. package/lib/query-client/query-client.d.ts +29 -0
  91. package/lib/query-client/query-client.types.d.ts +82 -0
  92. package/lib/query-client/query-client.utils.d.ts +4 -0
  93. package/lib/query-creator/query-creator.d.ts +20 -0
  94. package/lib/query-creator/query-creator.types.d.ts +13 -0
  95. package/lib/query-form/query-form.d.ts +91 -0
  96. package/lib/query-form/query-form.types.d.ts +145 -0
  97. package/lib/query-form/query-form.utils.d.ts +13 -0
  98. package/lib/query-store/query-store.d.ts +31 -0
  99. package/lib/request/request.d.ts +3 -0
  100. package/lib/request/request.types.d.ts +126 -0
  101. package/lib/request/request.util.d.ts +92 -0
  102. package/lib/symfony/symfony.types.d.ts +19 -0
  103. package/lib/symfony/symfony.utils.d.ts +6 -0
  104. package/lib/utils/data.utils.d.ts +59 -0
  105. package/lib/utils/deep-freeze.util.d.ts +1 -0
  106. package/{src/lib/utils/def.util.ts → lib/utils/def.util.d.ts} +1 -1
  107. package/package.json +19 -2
  108. package/.eslintrc.json +0 -40
  109. package/jest.config.ts +0 -23
  110. package/ng-package.json +0 -8
  111. package/project.json +0 -37
  112. package/src/lib/auth/auth-provider.types.ts +0 -160
  113. package/src/lib/auth/auth-provider.utils.ts +0 -39
  114. package/src/lib/auth/basic-auth-provider.ts +0 -17
  115. package/src/lib/auth/bearer-auth-provider.ts +0 -243
  116. package/src/lib/auth/custom-header-auth-provider.ts +0 -13
  117. package/src/lib/class-validator/class-validator.utils.ts +0 -5
  118. package/src/lib/devtools/components/query-devtools/query-devtools.component.html +0 -402
  119. package/src/lib/devtools/components/query-devtools/query-devtools.component.scss +0 -360
  120. package/src/lib/devtools/components/query-devtools/query-devtools.component.ts +0 -427
  121. package/src/lib/devtools/pipes/query-short-name.pipe.ts +0 -24
  122. package/src/lib/devtools/utils/query-client.utils.ts +0 -25
  123. package/src/lib/directives/infinity-query-trigger.directive.ts +0 -58
  124. package/src/lib/directives/infinity-query.directive.ts +0 -208
  125. package/src/lib/directives/query.directive.ts +0 -201
  126. package/src/lib/entity/entity-store.ts +0 -180
  127. package/src/lib/entity/entity.types.ts +0 -34
  128. package/src/lib/entity/entity.utils.ts +0 -51
  129. package/src/lib/gql/gql.ts +0 -22
  130. package/src/lib/infinite-query/infinity-query.ts +0 -245
  131. package/src/lib/infinite-query/infinity-query.types.ts +0 -149
  132. package/src/lib/infinite-query/infinity-query.utils.ts +0 -14
  133. package/src/lib/logger/logger.ts +0 -30
  134. package/src/lib/query/query.ts +0 -631
  135. package/src/lib/query/query.types.ts +0 -532
  136. package/src/lib/query/query.utils.spec.ts +0 -92
  137. package/src/lib/query/query.utils.ts +0 -450
  138. package/src/lib/query-client/query-client.spec.ts +0 -77
  139. package/src/lib/query-client/query-client.ts +0 -195
  140. package/src/lib/query-client/query-client.types.ts +0 -101
  141. package/src/lib/query-client/query-client.utils.spec.ts +0 -61
  142. package/src/lib/query-client/query-client.utils.ts +0 -28
  143. package/src/lib/query-creator/query-creator.ts +0 -103
  144. package/src/lib/query-creator/query-creator.types.ts +0 -74
  145. package/src/lib/query-form/query-form.ts +0 -526
  146. package/src/lib/query-form/query-form.types.ts +0 -169
  147. package/src/lib/query-form/query-form.utils.ts +0 -116
  148. package/src/lib/query-store/query-store.ts +0 -192
  149. package/src/lib/request/request.ts +0 -253
  150. package/src/lib/request/request.types.ts +0 -164
  151. package/src/lib/request/request.util.spec.ts +0 -177
  152. package/src/lib/request/request.util.ts +0 -399
  153. package/src/lib/stories/angular-example-page.mdx +0 -85
  154. package/src/lib/stories/authentication-page.mdx +0 -35
  155. package/src/lib/stories/changelog-page.mdx +0 -9
  156. package/src/lib/stories/client-page.mdx +0 -100
  157. package/src/lib/stories/queries-page.mdx +0 -117
  158. package/src/lib/symfony/symfony.types.ts +0 -21
  159. package/src/lib/symfony/symfony.utils.ts +0 -43
  160. package/src/lib/utils/data.utils.ts +0 -280
  161. package/src/lib/utils/deep-freeze.util.ts +0 -21
  162. package/src/test-setup.ts +0 -1
  163. package/tsconfig.json +0 -29
  164. package/tsconfig.lib.json +0 -12
  165. package/tsconfig.lib.prod.json +0 -10
  166. package/tsconfig.spec.json +0 -11
  167. /package/{src/lib/auth/index.ts → lib/auth/index.d.ts} +0 -0
  168. /package/{src/lib/class-validator/index.ts → lib/class-validator/index.d.ts} +0 -0
  169. /package/{src/lib/devtools/components/query-devtools/index.ts → lib/devtools/components/query-devtools/index.d.ts} +0 -0
  170. /package/{src/lib/devtools/pipes/index.ts → lib/devtools/pipes/index.d.ts} +0 -0
  171. /package/{src/lib/devtools/utils/index.ts → lib/devtools/utils/index.d.ts} +0 -0
  172. /package/{src/lib/directives/index.ts → lib/directives/index.d.ts} +0 -0
  173. /package/{src/lib/entity/index.ts → lib/entity/index.d.ts} +0 -0
  174. /package/{src/lib/gql/index.ts → lib/gql/index.d.ts} +0 -0
  175. /package/{src/lib/infinite-query/index.ts → lib/infinite-query/index.d.ts} +0 -0
  176. /package/{src/lib/logger/index.ts → lib/logger/index.d.ts} +0 -0
  177. /package/{src/lib/query/index.ts → lib/query/index.d.ts} +0 -0
  178. /package/{src/lib/query-client/index.ts → lib/query-client/index.d.ts} +0 -0
  179. /package/{src/lib/query-creator/index.ts → lib/query-creator/index.d.ts} +0 -0
  180. /package/{src/lib/query-form/index.ts → lib/query-form/index.d.ts} +0 -0
  181. /package/{src/lib/query-store/index.ts → lib/query-store/index.d.ts} +0 -0
  182. /package/{src/lib/request/index.ts → lib/request/index.d.ts} +0 -0
  183. /package/{src/lib/symfony/index.ts → lib/symfony/index.d.ts} +0 -0
  184. /package/{src/lib/utils/index.ts → lib/utils/index.d.ts} +0 -0
@@ -0,0 +1,379 @@
1
+ import { NgZone, assertInInjectionContext, inject, isDevMode } from '@angular/core';
2
+ import { toSignal } from '@angular/core/rxjs-interop';
3
+ import { FormGroup } from '@angular/forms';
4
+ import { ActivatedRoute, Router } from '@angular/router';
5
+ import { ET_PROPERTY_REMOVED, RouterStateService, clone, createDestroy, equal } from '@ethlete/core';
6
+ import { BehaviorSubject, Subject, debounceTime, map, merge, of, switchMap, takeUntil, tap, timer } from 'rxjs';
7
+ import { transformToBoolean, transformToNumber } from './query-form.utils';
8
+ const ET_ARR_PREFIX = 'ET_ARR__';
9
+ export class QueryField {
10
+ get control() {
11
+ return this.data.control;
12
+ }
13
+ constructor(data) {
14
+ this.data = data;
15
+ }
16
+ }
17
+ const IGNORED_FILTER_COUNT_FIELDS = ['page', 'skip', 'take', 'limit', 'sort', 'sortBy', 'sortOrder', 'query', 'search'];
18
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
19
+ export class QueryForm {
20
+ get _formValue() {
21
+ return this.form.getRawValue();
22
+ }
23
+ get _form() {
24
+ return this.form;
25
+ }
26
+ get controls() {
27
+ return this.form.controls;
28
+ }
29
+ get value() {
30
+ return this._changes$.value.currentValue;
31
+ }
32
+ get defaultFormValue() {
33
+ return Object.entries(this._defaultValues).reduce((acc, [key]) => {
34
+ acc[key] = this._getDefaultValue(key);
35
+ return acc;
36
+ }, {});
37
+ }
38
+ // with prefix eg. page should become ${prefix}-page
39
+ constructor(_fields, _options) {
40
+ this._fields = _fields;
41
+ this._options = _options;
42
+ this._destroy$ = createDestroy();
43
+ this._unobserveTrigger$ = new Subject();
44
+ this._router = inject(Router);
45
+ this._activatedRoute = inject(ActivatedRoute);
46
+ this._defaultValues = this._extractDefaultValues();
47
+ this._routerStateService = inject(RouterStateService);
48
+ this._zone = inject(NgZone);
49
+ this._didValueChanges$ = new Subject();
50
+ this._isObserving = false;
51
+ this._skipNextResets = false;
52
+ /**
53
+ * The angular form group that contains all the fields.
54
+ *
55
+ * **Do not** use any of the following methods on this form group:
56
+ * - `setValue`: Use `QueryForm.setValue` instead.
57
+ * - `patchValue`: Use `QueryForm.patchValue` instead.
58
+ * - `valueChanges`: Use `QueryForm.changes$` instead.
59
+ * - `value`: Use `QueryForm.value` instead.
60
+ * - `controls`: Use `QueryForm.controls` instead.
61
+ */
62
+ this.form = this._setupFormGroup();
63
+ this._lastFormValue$ = new BehaviorSubject(null);
64
+ this._currentFormValue$ = new BehaviorSubject(this._formValue);
65
+ this._changes$ = new BehaviorSubject({
66
+ previousValue: null,
67
+ currentValue: this.form.getRawValue(),
68
+ });
69
+ this.changes$ = this._changes$.asObservable();
70
+ this.currentValue$ = this._changes$.pipe(map(({ currentValue }) => currentValue));
71
+ this.previousValue$ = this._changes$.pipe(map(({ previousValue }) => previousValue));
72
+ this.changes = toSignal(this.changes$);
73
+ this.currentValue = toSignal(this.currentValue$);
74
+ this.previousValue = toSignal(this.previousValue$);
75
+ /**
76
+ * The number of active filters.
77
+ *
78
+ * Excludes the following fields by default:
79
+ * - `page`
80
+ * - `skip`
81
+ * - `take`
82
+ * - `limit`
83
+ * - `sort`
84
+ * - `sortBy`
85
+ * - `sortOrder`
86
+ * - `query`
87
+ * - `search`
88
+ */
89
+ this.activeFilterCount$ = this.changes$.pipe(map(({ currentValue }) => Object.entries(currentValue)
90
+ .map(([key, value]) => {
91
+ if (IGNORED_FILTER_COUNT_FIELDS.includes(key) || this._fields[key]?.data.skipInFilterCount) {
92
+ return true;
93
+ }
94
+ return this._isDefaultValue(key, value);
95
+ })
96
+ .filter((v) => v === false).length));
97
+ assertInInjectionContext(QueryForm);
98
+ }
99
+ observe(options) {
100
+ if (this._isObserving) {
101
+ if (isDevMode()) {
102
+ console.warn('QueryForm.observe() was called multiple times. This is not supported.');
103
+ }
104
+ return this;
105
+ }
106
+ this._isObserving = true;
107
+ if (options?.syncOnNavigation !== false) {
108
+ const didChanges = this.setFormValueFromUrlQueryParams({
109
+ queryParams: this._routerStateService.queryParams,
110
+ });
111
+ if (didChanges) {
112
+ this._handleFormChange(true);
113
+ }
114
+ }
115
+ merge(...Object.values(this._fields).map((field) => field.control.valueChanges), this._didValueChanges$)
116
+ .pipe(debounceTime(0), tap(() => {
117
+ this._handleFormChange();
118
+ }), takeUntil(this._destroy$), takeUntil(this._unobserveTrigger$))
119
+ .subscribe();
120
+ let changedFieldsInLastResetLoop = [];
121
+ let currentUniqueChangedFields = [];
122
+ this._currentFormValue$
123
+ .pipe(map((currentValue) => {
124
+ return {
125
+ previousValue: clone(this._lastFormValue$.value),
126
+ currentValue: clone(currentValue),
127
+ };
128
+ }), tap(({ currentValue, previousValue }) => {
129
+ if (options?.writeToQueryParams !== false) {
130
+ this._syncViaUrlQueryParams(currentValue, options?.replaceUrl);
131
+ }
132
+ const didResetValues = this._skipNextResets
133
+ ? false
134
+ : this._handleQueryFormResets(previousValue ?? null, currentValue);
135
+ this._skipNextResets = false;
136
+ const changedFields = Object.keys(currentValue).filter((key) => !equal(previousValue?.[key], currentValue[key]));
137
+ if (changedFieldsInLastResetLoop.length) {
138
+ changedFields.push(...changedFieldsInLastResetLoop);
139
+ changedFieldsInLastResetLoop = [];
140
+ }
141
+ if (didResetValues) {
142
+ this._didValueChanges$.next(true);
143
+ changedFieldsInLastResetLoop = changedFields;
144
+ }
145
+ currentUniqueChangedFields = [...new Set(changedFields)];
146
+ }), switchMap(({ currentValue, previousValue }) => {
147
+ if (changedFieldsInLastResetLoop.length)
148
+ return of(null).pipe(map(() => ({ currentValue, previousValue })));
149
+ const debounceValues = currentUniqueChangedFields.map((key) => {
150
+ const field = this._fields[key];
151
+ if (!field)
152
+ return null;
153
+ if (field.data.disableDebounceIfFalsy === true && !currentValue[key]) {
154
+ return null;
155
+ }
156
+ return field.data.debounce ?? null;
157
+ });
158
+ currentUniqueChangedFields = [];
159
+ if (debounceValues.some((v) => v === null) || !debounceValues.length) {
160
+ return of(null).pipe(map(() => ({ currentValue, previousValue })));
161
+ }
162
+ const shortestDebounceTime = Math.min(...debounceValues.filter((v) => v !== null));
163
+ return timer(shortestDebounceTime).pipe(map(() => ({ currentValue, previousValue })));
164
+ }), tap(({ currentValue, previousValue }) => {
165
+ if (changedFieldsInLastResetLoop.length)
166
+ return;
167
+ this._changes$.next({
168
+ previousValue: previousValue ?? null,
169
+ currentValue: currentValue,
170
+ });
171
+ }), takeUntil(this._destroy$), takeUntil(this._unobserveTrigger$))
172
+ .subscribe();
173
+ if (options?.syncOnNavigation !== false) {
174
+ this._routerStateService.queryParamChanges$
175
+ .pipe(takeUntil(this._destroy$), takeUntil(this._unobserveTrigger$), tap((changes) => {
176
+ const didValueChanges = this.setFormValueFromUrlQueryParams({ queryParams: changes });
177
+ if (didValueChanges) {
178
+ this._didValueChanges$.next(true);
179
+ }
180
+ }))
181
+ .subscribe();
182
+ }
183
+ return this;
184
+ }
185
+ _handleQueryFormResets(previousValue, currentValue) {
186
+ let didResetValues = false;
187
+ for (const formFieldKey in this._fields) {
188
+ const field = this._fields[formFieldKey];
189
+ if (!field)
190
+ continue;
191
+ const resets = field.data.isResetBy;
192
+ if (!resets)
193
+ continue;
194
+ const resetConditionKeys = Array.isArray(resets) ? resets : [resets];
195
+ for (const resetConditionKey of resetConditionKeys) {
196
+ if (!(resetConditionKey in this._fields)) {
197
+ if (isDevMode()) {
198
+ console.warn(`The field "${resetConditionKey}" is not defined in the QueryForm. Is it a typo?`, this);
199
+ }
200
+ continue;
201
+ }
202
+ if (previousValue &&
203
+ currentValue &&
204
+ !equal(previousValue[resetConditionKey], currentValue[resetConditionKey])) {
205
+ const defaultValueForKeyToReset = this._getDefaultValue(formFieldKey);
206
+ const currentValueForKeyToReset = currentValue[formFieldKey];
207
+ if (equal(defaultValueForKeyToReset, currentValueForKeyToReset)) {
208
+ continue;
209
+ }
210
+ this.form.controls[formFieldKey].setValue(defaultValueForKeyToReset);
211
+ didResetValues = true;
212
+ break;
213
+ }
214
+ }
215
+ }
216
+ return didResetValues;
217
+ }
218
+ unobserve() {
219
+ this._unobserveTrigger$.next(true);
220
+ }
221
+ setFormValueFromUrlQueryParams(options) {
222
+ let didValueChanges = false;
223
+ for (const [key, field] of Object.entries(this._fields)) {
224
+ const value = options.queryParams[this._transformKeyToQueryParam(key)];
225
+ const valueDoesNotExist = value === undefined;
226
+ if (valueDoesNotExist)
227
+ continue;
228
+ const valueGotRemoved = value === ET_PROPERTY_REMOVED;
229
+ if (valueGotRemoved) {
230
+ field.control.setValue(this._getDefaultValue(key), { emitEvent: false });
231
+ didValueChanges = true;
232
+ continue;
233
+ }
234
+ let deserializedValue = value;
235
+ if (field.data.queryParamToValueTransformFn) {
236
+ deserializedValue = field.data.queryParamToValueTransformFn(value);
237
+ }
238
+ else if (typeof this._getDefaultValue(key) === 'number' || !isNaN(Number(value))) {
239
+ deserializedValue = transformToNumber(value);
240
+ }
241
+ else if (typeof this._getDefaultValue(key) === 'boolean' || value === 'true' || value === 'false') {
242
+ deserializedValue = transformToBoolean(value);
243
+ }
244
+ const valueIsEqualToCurrent = equal(deserializedValue, field.control.value);
245
+ if (valueIsEqualToCurrent)
246
+ continue;
247
+ field.control.setValue(deserializedValue, { emitEvent: false });
248
+ didValueChanges = true;
249
+ }
250
+ return didValueChanges;
251
+ }
252
+ setValue(value, options) {
253
+ this._form._setValue(value, options);
254
+ if (options?.skipResets) {
255
+ this._skipNextResets = true;
256
+ }
257
+ }
258
+ patchValue(value, options) {
259
+ this._form._patchValue(value, options);
260
+ if (options?.skipResets) {
261
+ this._skipNextResets = true;
262
+ }
263
+ }
264
+ resetFieldToDefault(key, options) {
265
+ const defaultValue = this._getDefaultValue(key);
266
+ this.form.controls[key].setValue(defaultValue);
267
+ if (options?.skipResets) {
268
+ this._skipNextResets = true;
269
+ }
270
+ }
271
+ resetFieldsToDefault(keys, options) {
272
+ const defaults = keys.reduce((acc, key) => {
273
+ acc[key] = this._getDefaultValue(key);
274
+ return acc;
275
+ }, {});
276
+ this.patchValue(defaults);
277
+ if (options?.skipResets) {
278
+ this._skipNextResets = true;
279
+ }
280
+ }
281
+ resetAllFieldsToDefault(options) {
282
+ const keys = Object.keys(this._fields);
283
+ if (options?.skipFields) {
284
+ for (const key of options.skipFields) {
285
+ const index = keys.indexOf(key);
286
+ if (index !== -1) {
287
+ keys.splice(index, 1);
288
+ }
289
+ }
290
+ }
291
+ this.resetFieldsToDefault(keys, options);
292
+ }
293
+ _getDefaultValue(key) {
294
+ const val = this._defaultValues[key];
295
+ if (typeof val === 'string' && val.startsWith(ET_ARR_PREFIX)) {
296
+ return JSON.parse(val.slice(ET_ARR_PREFIX.length));
297
+ }
298
+ return val ?? null;
299
+ }
300
+ _transformKeyToQueryParam(key) {
301
+ if (!this._options?.queryParamPrefix)
302
+ return key;
303
+ const prefix = typeof this._options?.queryParamPrefix === 'string'
304
+ ? this._options.queryParamPrefix
305
+ : this._options.queryParamPrefix();
306
+ return `${prefix}-${key}`;
307
+ }
308
+ _isDefaultValue(key, value) {
309
+ const normalizedValue = Array.isArray(value) ? `${ET_ARR_PREFIX}${JSON.stringify(value)}` : value;
310
+ return this._getDefaultValue(key) === normalizedValue;
311
+ }
312
+ _setupFormGroup() {
313
+ const group = new FormGroup({});
314
+ for (const [key, field] of Object.entries(this._fields)) {
315
+ group.addControl(key, field.control);
316
+ }
317
+ group._patchValue = group.patchValue;
318
+ group._setValue = group.setValue;
319
+ group.patchValue = this.patchValue.bind(this);
320
+ group.setValue = this.setValue.bind(this);
321
+ return group;
322
+ }
323
+ _extractDefaultValues() {
324
+ const defaultValues = {};
325
+ for (const [key, field] of Object.entries(this._fields)) {
326
+ const value = field.data.defaultValue !== undefined ? field.data.defaultValue : field.control.value;
327
+ if (Array.isArray(value)) {
328
+ defaultValues[key] = `${ET_ARR_PREFIX}${JSON.stringify(value)}`;
329
+ }
330
+ else {
331
+ defaultValues[key] = value;
332
+ }
333
+ }
334
+ return defaultValues;
335
+ }
336
+ _syncViaUrlQueryParams(values, replaceUrl) {
337
+ const queryParams = { ...clone(this._activatedRoute.snapshot.queryParams) };
338
+ for (const [key, value] of Object.entries(values)) {
339
+ const queryParamKey = this._transformKeyToQueryParam(key);
340
+ const field = this._fields[key];
341
+ if (!field) {
342
+ continue;
343
+ }
344
+ const isDefault = this._isDefaultValue(key, value);
345
+ const writeDefaultToUrl = field.data.appendDefaultValueToUrl === true;
346
+ const writeToUrl = field.data.appendToUrl !== false;
347
+ if (!writeToUrl || (isDefault && !writeDefaultToUrl)) {
348
+ queryParams[queryParamKey] = undefined;
349
+ }
350
+ else {
351
+ queryParams[queryParamKey] = field.data.valueToQueryParamTransformFn
352
+ ? field.data.valueToQueryParamTransformFn?.(value)
353
+ : value;
354
+ }
355
+ }
356
+ this._zone.run(() => {
357
+ this._router.navigate([], {
358
+ queryParams,
359
+ replaceUrl,
360
+ queryParamsHandling: 'merge',
361
+ });
362
+ });
363
+ }
364
+ _handleFormChange(forceOverwrite = false) {
365
+ const currentVal = clone(this._currentFormValue$.value);
366
+ const newVal = clone(this._formValue);
367
+ if (equal(currentVal, newVal)) {
368
+ return;
369
+ }
370
+ if (forceOverwrite) {
371
+ this._lastFormValue$.next(newVal);
372
+ }
373
+ else {
374
+ this._lastFormValue$.next(currentVal);
375
+ }
376
+ this._currentFormValue$.next(newVal);
377
+ }
378
+ }
379
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9xdWVyeS1mb3JtL3F1ZXJ5LWZvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVVoSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUzRSxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUM7QUFFakMsTUFBTSxPQUFPLFVBQVU7SUFDckIsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUMzQixDQUFDO0lBRUQsWUFBbUIsSUFBMEI7UUFBMUIsU0FBSSxHQUFKLElBQUksQ0FBc0I7SUFBRyxDQUFDO0NBQ2xEO0FBRUQsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFF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QjtvQkFDbEUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxLQUFLLENBQUM7b0JBQ2xELENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDWixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3hCLFdBQVc7Z0JBQ1gsVUFBVTtnQkFDVixtQkFBbUIsRUFBRSxPQUFPO2FBQzdCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGlCQUFpQixDQUFDLGNBQWMsR0FBRyxLQUFLO1FBQzlDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV0QyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUM5QixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBRUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1pvbmUsIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCwgaW5qZWN0LCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBFVF9QUk9QRVJUWV9SRU1PVkVELCBSb3V0ZXJTdGF0ZVNlcnZpY2UsIGNsb25lLCBjcmVhdGVEZXN0cm95LCBlcXVhbCB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIG1hcCwgbWVyZ2UsIG9mLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgUXVlcnlGaWVsZE9wdGlvbnMsXG4gIFF1ZXJ5Rm9ybUdyb3VwLFxuICBRdWVyeUZvcm1Hcm91cENvbnRyb2xzLFxuICBRdWVyeUZvcm1PYnNlcnZlT3B0aW9ucyxcbiAgUXVlcnlGb3JtVmFsdWUsXG4gIFF1ZXJ5Rm9ybVZhbHVlRXZlbnQsXG4gIFF1ZXJ5Rm9ybVdyaXRlT3B0aW9ucyxcbn0gZnJvbSAnLi9xdWVyeS1mb3JtLnR5cGVzJztcbmltcG9ydCB7IHRyYW5zZm9ybVRvQm9vbGVhbiwgdHJhbnNmb3JtVG9OdW1iZXIgfSBmcm9tICcuL3F1ZXJ5LWZvcm0udXRpbHMnO1xuXG5jb25zdCBFVF9BUlJfUFJFRklYID0gJ0VUX0FSUl9fJztcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5RmllbGQ8VD4ge1xuICBnZXQgY29udHJvbCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmNvbnRyb2w7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGF0YTogUXVlcnlGaWVsZE9wdGlvbnM8VD4pIHt9XG59XG5cbmNvbnN0IElHTk9SRURfRklMVEVSX0NPVU5UX0ZJRUxEUyA9IFsncGFnZScsICdza2lwJywgJ3Rha2UnLCAnbGltaXQnLCAnc29ydCcsICdzb3J0QnknLCAnc29ydE9yZGVyJywgJ3F1ZXJ5JywgJ3NlYXJjaCddO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5Rm9ybU9wdGlvbnMge1xuICAvKipcbiAgICogQSBwcmVmaXggdG8gdXNlIGZvciB0aGUgcXVlcnkgcGFyYW1ldGVycy4gVGhpcyBpcyB1c2VmdWwgd2hlbiB5b3UgaGF2ZSBtdWx0aXBsZSBxdWVyeSBmb3JtcyBvbiB0aGUgc2FtZSBwYWdlLlxuICAgKi9cbiAgcXVlcnlQYXJhbVByZWZpeD86IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcpO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IHR5cGUgQW55UXVlcnlGb3JtID0gUXVlcnlGb3JtPGFueT47XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgY2xhc3MgUXVlcnlGb3JtPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBRdWVyeUZpZWxkPGFueT4+PiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kkID0gY3JlYXRlRGVzdHJveSgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF91bm9ic2VydmVUcmlnZ2VyJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hY3RpdmF0ZWRSb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRWYWx1ZXMgPSB0aGlzLl9leHRyYWN0RGVmYXVsdFZhbHVlcygpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yb3V0ZXJTdGF0ZVNlcnZpY2UgPSBpbmplY3QoUm91dGVyU3RhdGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaWRWYWx1ZUNoYW5nZXMkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICBwcml2YXRlIF9pc09ic2VydmluZyA9IGZhbHNlO1xuICBwcml2YXRlIF9za2lwTmV4dFJlc2V0cyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgYW5ndWxhciBmb3JtIGdyb3VwIHRoYXQgY29udGFpbnMgYWxsIHRoZSBmaWVsZHMuXG4gICAqXG4gICAqICoqRG8gbm90KiogdXNlIGFueSBvZiB0aGUgZm9sbG93aW5nIG1ldGhvZHMgb24gdGhpcyBmb3JtIGdyb3VwOlxuICAgKiAtIGBzZXRWYWx1ZWA6IFVzZSBgUXVlcnlGb3JtLnNldFZhbHVlYCBpbnN0ZWFkLlxuICAgKiAtIGBwYXRjaFZhbHVlYDogVXNlIGBRdWVyeUZvcm0ucGF0Y2hWYWx1ZWAgaW5zdGVhZC5cbiAgICogLSBgdmFsdWVDaGFuZ2VzYDogVXNlIGBRdWVyeUZvcm0uY2hhbmdlcyRgIGluc3RlYWQuXG4gICAqIC0gYHZhbHVlYDogVXNlIGBRdWVyeUZvcm0udmFsdWVgIGluc3RlYWQuXG4gICAqIC0gYGNvbnRyb2xzYDogVXNlIGBRdWVyeUZvcm0uY29udHJvbHNgIGluc3RlYWQuXG4gICAqL1xuICByZWFkb25seSBmb3JtID0gdGhpcy5fc2V0dXBGb3JtR3JvdXAoKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9sYXN0Rm9ybVZhbHVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UXVlcnlGb3JtVmFsdWU8VD4gfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3VycmVudEZvcm1WYWx1ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFF1ZXJ5Rm9ybVZhbHVlPFQ+Pih0aGlzLl9mb3JtVmFsdWUpO1xuXG4gIHByaXZhdGUgZ2V0IF9mb3JtVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpIGFzIFF1ZXJ5Rm9ybVZhbHVlPFQ+O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgX2Zvcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybSBhcyB1bmtub3duIGFzIFF1ZXJ5Rm9ybUdyb3VwO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbmdlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFF1ZXJ5Rm9ybVZhbHVlRXZlbnQ8VD4+KHtcbiAgICBwcmV2aW91c1ZhbHVlOiBudWxsLFxuICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkgYXMgUXVlcnlGb3JtVmFsdWU8VD4sXG4gIH0pO1xuXG4gIHJlYWRvbmx5IGNoYW5nZXMkID0gdGhpcy5fY2hhbmdlcyQuYXNPYnNlcnZhYmxlKCk7XG4gIHJlYWRvbmx5IGN1cnJlbnRWYWx1ZSQgPSB0aGlzLl9jaGFuZ2VzJC5waXBlKG1hcCgoeyBjdXJyZW50VmFsdWUgfSkgPT4gY3VycmVudFZhbHVlKSk7XG4gIHJlYWRvbmx5IHByZXZpb3VzVmFsdWUkID0gdGhpcy5fY2hhbmdlcyQucGlwZShtYXAoKHsgcHJldmlvdXNWYWx1ZSB9KSA9PiBwcmV2aW91c1ZhbHVlKSk7XG5cbiAgcmVhZG9ubHkgY2hhbmdlcyA9IHRvU2lnbmFsKHRoaXMuY2hhbmdlcyQpO1xuICByZWFkb25seSBjdXJyZW50VmFsdWUgPSB0b1NpZ25hbCh0aGlzLmN1cnJlbnRWYWx1ZSQpO1xuICByZWFkb25seSBwcmV2aW91c1ZhbHVlID0gdG9TaWduYWwodGhpcy5wcmV2aW91c1ZhbHVlJCk7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgYWN0aXZlIGZpbHRlcnMuXG4gICAqXG4gICAqIEV4Y2x1ZGVzIHRoZSBmb2xsb3dpbmcgZmllbGRzIGJ5IGRlZmF1bHQ6XG4gICAqIC0gYHBhZ2VgXG4gICAqIC0gYHNraXBgXG4gICAqIC0gYHRha2VgXG4gICAqIC0gYGxpbWl0YFxuICAgKiAtIGBzb3J0YFxuICAgKiAtIGBzb3J0QnlgXG4gICAqIC0gYHNvcnRPcmRlcmBcbiAgICogLSBgcXVlcnlgXG4gICAqIC0gYHNlYXJjaGBcbiAgICovXG4gIHJlYWRvbmx5IGFjdGl2ZUZpbHRlckNvdW50JCA9IHRoaXMuY2hhbmdlcyQucGlwZShcbiAgICBtYXAoXG4gICAgICAoeyBjdXJyZW50VmFsdWUgfSkgPT5cbiAgICAgICAgT2JqZWN0LmVudHJpZXMoY3VycmVudFZhbHVlKVxuICAgICAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgaWYgKElHTk9SRURfRklMVEVSX0NPVU5UX0ZJRUxEUy5pbmNsdWRlcyhrZXkpIHx8IHRoaXMuX2ZpZWxkc1trZXldPy5kYXRhLnNraXBJbkZpbHRlckNvdW50KSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNEZWZhdWx0VmFsdWUoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKCh2KSA9PiB2ID09PSBmYWxzZSkubGVuZ3RoLFxuICAgICksXG4gICk7XG5cbiAgZ2V0IGNvbnRyb2xzKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm0uY29udHJvbHM7XG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYW5nZXMkLnZhbHVlLmN1cnJlbnRWYWx1ZTtcbiAgfVxuXG4gIGdldCBkZWZhdWx0Rm9ybVZhbHVlKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLl9kZWZhdWx0VmFsdWVzKS5yZWR1Y2UoKGFjYywgW2tleV0pID0+IHtcbiAgICAgIGFjY1trZXkgYXMga2V5b2YgUXVlcnlGb3JtVmFsdWU8VD5dID0gdGhpcy5fZ2V0RGVmYXVsdFZhbHVlKGtleSk7XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgUXVlcnlGb3JtVmFsdWU8VD4pO1xuICB9XG5cbiAgLy8gd2l0aCBwcmVmaXggZWcuIHBhZ2Ugc2hvdWxkIGJlY29tZSAke3ByZWZpeH0tcGFnZVxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9maWVsZHM6IFQsXG4gICAgcHJpdmF0ZSBfb3B0aW9ucz86IFF1ZXJ5Rm9ybU9wdGlvbnMsXG4gICkge1xuICAgIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChRdWVyeUZvcm0pO1xuICB9XG5cbiAgb2JzZXJ2ZShvcHRpb25zPzogUXVlcnlGb3JtT2JzZXJ2ZU9wdGlvbnMpIHtcbiAgICBpZiAodGhpcy5faXNPYnNlcnZpbmcpIHtcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1F1ZXJ5Rm9ybS5vYnNlcnZlKCkgd2FzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy5faXNPYnNlcnZpbmcgPSB0cnVlO1xuXG4gICAgaWYgKG9wdGlvbnM/LnN5bmNPbk5hdmlnYXRpb24gIT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBkaWRDaGFuZ2VzID0gdGhpcy5zZXRGb3JtVmFsdWVGcm9tVXJsUXVlcnlQYXJhbXMoe1xuICAgICAgICBxdWVyeVBhcmFtczogdGhpcy5fcm91dGVyU3RhdGVTZXJ2aWNlLnF1ZXJ5UGFyYW1zLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChkaWRDaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMuX2hhbmRsZUZvcm1DaGFuZ2UodHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWVyZ2UoLi4uT2JqZWN0LnZhbHVlcyh0aGlzLl9maWVsZHMpLm1hcCgoZmllbGQpID0+IGZpZWxkLmNvbnRyb2wudmFsdWVDaGFuZ2VzKSwgdGhpcy5fZGlkVmFsdWVDaGFuZ2VzJClcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMCksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5faGFuZGxlRm9ybUNoYW5nZSgpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX3Vub2JzZXJ2ZVRyaWdnZXIkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIGxldCBjaGFuZ2VkRmllbGRzSW5MYXN0UmVzZXRMb29wOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBjdXJyZW50VW5pcXVlQ2hhbmdlZEZpZWxkczogc3RyaW5nW10gPSBbXTtcblxuICAgIHRoaXMuX2N1cnJlbnRGb3JtVmFsdWUkXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChjdXJyZW50VmFsdWUpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJldmlvdXNWYWx1ZTogY2xvbmUodGhpcy5fbGFzdEZvcm1WYWx1ZSQudmFsdWUpLFxuICAgICAgICAgICAgY3VycmVudFZhbHVlOiBjbG9uZShjdXJyZW50VmFsdWUpLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKHsgY3VycmVudFZhbHVlLCBwcmV2aW91c1ZhbHVlIH0pID0+IHtcbiAgICAgICAgICBpZiAob3B0aW9ucz8ud3JpdGVUb1F1ZXJ5UGFyYW1zICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5fc3luY1ZpYVVybFF1ZXJ5UGFyYW1zKGN1cnJlbnRWYWx1ZSwgb3B0aW9ucz8ucmVwbGFjZVVybCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZGlkUmVzZXRWYWx1ZXMgPSB0aGlzLl9za2lwTmV4dFJlc2V0c1xuICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgOiB0aGlzLl9oYW5kbGVRdWVyeUZvcm1SZXNldHMocHJldmlvdXNWYWx1ZSA/PyBudWxsLCBjdXJyZW50VmFsdWUpO1xuXG4gICAgICAgICAgdGhpcy5fc2tpcE5leHRSZXNldHMgPSBmYWxzZTtcblxuICAgICAgICAgIGNvbnN0IGNoYW5nZWRGaWVsZHMgPSBPYmplY3Qua2V5cyhjdXJyZW50VmFsdWUpLmZpbHRlcihcbiAgICAgICAgICAgIChrZXkpID0+ICFlcXVhbChwcmV2aW91c1ZhbHVlPy5ba2V5XSwgY3VycmVudFZhbHVlW2tleV0pLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoY2hhbmdlZEZpZWxkc0luTGFzdFJlc2V0TG9vcC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNoYW5nZWRGaWVsZHMucHVzaCguLi5jaGFuZ2VkRmllbGRzSW5MYXN0UmVzZXRMb29wKTtcbiAgICAgICAgICAgIGNoYW5nZWRGaWVsZHNJbkxhc3RSZXNldExvb3AgPSBbXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGlkUmVzZXRWYWx1ZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX2RpZFZhbHVlQ2hhbmdlcyQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIGNoYW5nZWRGaWVsZHNJbkxhc3RSZXNldExvb3AgPSBjaGFuZ2VkRmllbGRzO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGN1cnJlbnRVbmlxdWVDaGFuZ2VkRmllbGRzID0gWy4uLm5ldyBTZXQoY2hhbmdlZEZpZWxkcyldO1xuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKCh7IGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSB9KSA9PiB7XG4gICAgICAgICAgaWYgKGNoYW5nZWRGaWVsZHNJbkxhc3RSZXNldExvb3AubGVuZ3RoKSByZXR1cm4gb2YobnVsbCkucGlwZShtYXAoKCkgPT4gKHsgY3VycmVudFZhbHVlLCBwcmV2aW91c1ZhbHVlIH0pKSk7XG5cbiAgICAgICAgICBjb25zdCBkZWJvdW5jZVZhbHVlcyA9IGN1cnJlbnRVbmlxdWVDaGFuZ2VkRmllbGRzLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuX2ZpZWxkc1trZXldO1xuXG4gICAgICAgICAgICBpZiAoIWZpZWxkKSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgaWYgKGZpZWxkLmRhdGEuZGlzYWJsZURlYm91bmNlSWZGYWxzeSA9PT0gdHJ1ZSAmJiAhY3VycmVudFZhbHVlW2tleV0pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmaWVsZC5kYXRhLmRlYm91bmNlID8/IG51bGw7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjdXJyZW50VW5pcXVlQ2hhbmdlZEZpZWxkcyA9IFtdO1xuXG4gICAgICAgICAgaWYgKGRlYm91bmNlVmFsdWVzLnNvbWUoKHYpID0+IHYgPT09IG51bGwpIHx8ICFkZWJvdW5jZVZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKS5waXBlKG1hcCgoKSA9PiAoeyBjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUgfSkpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBzaG9ydGVzdERlYm91bmNlVGltZSA9IE1hdGgubWluKC4uLmRlYm91bmNlVmFsdWVzLmZpbHRlcigodik6IHYgaXMgbnVtYmVyID0+IHYgIT09IG51bGwpKTtcblxuICAgICAgICAgIHJldHVybiB0aW1lcihzaG9ydGVzdERlYm91bmNlVGltZSkucGlwZShtYXAoKCkgPT4gKHsgY3VycmVudFZhbHVlLCBwcmV2aW91c1ZhbHVlIH0pKSk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKHsgY3VycmVudFZhbHVlLCBwcmV2aW91c1ZhbHVlIH0pID0+IHtcbiAgICAgICAgICBpZiAoY2hhbmdlZEZpZWxkc0luTGFzdFJlc2V0TG9vcC5sZW5ndGgpIHJldHVybjtcblxuICAgICAgICAgIHRoaXMuX2NoYW5nZXMkLm5leHQoe1xuICAgICAgICAgICAgcHJldmlvdXNWYWx1ZTogcHJldmlvdXNWYWx1ZSA/PyBudWxsLFxuICAgICAgICAgICAgY3VycmVudFZhbHVlOiBjdXJyZW50VmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fdW5vYnNlcnZlVHJpZ2dlciQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgaWYgKG9wdGlvbnM/LnN5bmNPbk5hdmlnYXRpb24gIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl9yb3V0ZXJTdGF0ZVNlcnZpY2UucXVlcnlQYXJhbUNoYW5nZXMkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX3Vub2JzZXJ2ZVRyaWdnZXIkKSxcbiAgICAgICAgICB0YXAoKGNoYW5nZXMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRpZFZhbHVlQ2hhbmdlcyA9IHRoaXMuc2V0Rm9ybVZhbHVlRnJvbVVybFF1ZXJ5UGFyYW1zKHsgcXVlcnlQYXJhbXM6IGNoYW5nZXMgfSk7XG5cbiAgICAgICAgICAgIGlmIChkaWRWYWx1ZUNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgdGhpcy5fZGlkVmFsdWVDaGFuZ2VzJC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVF1ZXJ5Rm9ybVJlc2V0cyhwcmV2aW91c1ZhbHVlOiBRdWVyeUZvcm1WYWx1ZTxUPiB8IG51bGwsIGN1cnJlbnRWYWx1ZTogUXVlcnlGb3JtVmFsdWU8VD4pIHtcbiAgICBsZXQgZGlkUmVzZXRWYWx1ZXMgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgZm9ybUZpZWxkS2V5IGluIHRoaXMuX2ZpZWxkcykge1xuICAgICAgY29uc3QgZmllbGQgPSB0aGlzLl9maWVsZHNbZm9ybUZpZWxkS2V5XTtcblxuICAgICAgaWYgKCFmaWVsZCkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IHJlc2V0cyA9IGZpZWxkLmRhdGEuaXNSZXNldEJ5O1xuXG4gICAgICBpZiAoIXJlc2V0cykgY29udGludWU7XG5cbiAgICAgIGNvbnN0IHJlc2V0Q29uZGl0aW9uS2V5cyA9IEFycmF5LmlzQXJyYXkocmVzZXRzKSA/IHJlc2V0cyA6IFtyZXNldHNdO1xuXG4gICAgICBmb3IgKGNvbnN0IHJlc2V0Q29uZGl0aW9uS2V5IG9mIHJlc2V0Q29uZGl0aW9uS2V5cykge1xuICAgICAgICBpZiAoIShyZXNldENvbmRpdGlvbktleSBpbiB0aGlzLl9maWVsZHMpKSB7XG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFRoZSBmaWVsZCBcIiR7cmVzZXRDb25kaXRpb25LZXl9XCIgaXMgbm90IGRlZmluZWQgaW4gdGhlIFF1ZXJ5Rm9ybS4gSXMgaXQgYSB0eXBvP2AsIHRoaXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByZXZpb3VzVmFsdWUgJiZcbiAgICAgICAgICBjdXJyZW50VmFsdWUgJiZcbiAgICAgICAgICAhZXF1YWwocHJldmlvdXNWYWx1ZVtyZXNldENvbmRpdGlvbktleV0sIGN1cnJlbnRWYWx1ZVtyZXNldENvbmRpdGlvbktleV0pXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZUZvcktleVRvUmVzZXQgPSB0aGlzLl9nZXREZWZhdWx0VmFsdWUoZm9ybUZpZWxkS2V5KTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWVGb3JLZXlUb1Jlc2V0ID0gY3VycmVudFZhbHVlW2Zvcm1GaWVsZEtleV07XG5cbiAgICAgICAgICBpZiAoZXF1YWwoZGVmYXVsdFZhbHVlRm9yS2V5VG9SZXNldCwgY3VycmVudFZhbHVlRm9yS2V5VG9SZXNldCkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9sc1tmb3JtRmllbGRLZXldLnNldFZhbHVlKGRlZmF1bHRWYWx1ZUZvcktleVRvUmVzZXQpO1xuXG4gICAgICAgICAgZGlkUmVzZXRWYWx1ZXMgPSB0cnVlO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGlkUmVzZXRWYWx1ZXM7XG4gIH1cblxuICB1bm9ic2VydmUoKSB7XG4gICAgdGhpcy5fdW5vYnNlcnZlVHJpZ2dlciQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHNldEZvcm1WYWx1ZUZyb21VcmxRdWVyeVBhcmFtcyhvcHRpb25zOiB7IHF1ZXJ5UGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9KSB7XG4gICAgbGV0IGRpZFZhbHVlQ2hhbmdlcyA9IGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCBmaWVsZF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5fZmllbGRzKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnF1ZXJ5UGFyYW1zW3RoaXMuX3RyYW5zZm9ybUtleVRvUXVlcnlQYXJhbShrZXkpXTtcblxuICAgICAgY29uc3QgdmFsdWVEb2VzTm90RXhpc3QgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuXG4gICAgICBpZiAodmFsdWVEb2VzTm90RXhpc3QpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCB2YWx1ZUdvdFJlbW92ZWQgPSB2YWx1ZSA9PT0gRVRfUFJPUEVSVFlfUkVNT1ZFRDtcblxuICAgICAgaWYgKHZhbHVlR290UmVtb3ZlZCkge1xuICAgICAgICBmaWVsZC5jb250cm9sLnNldFZhbHVlKHRoaXMuX2dldERlZmF1bHRWYWx1ZShrZXkpLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIGRpZFZhbHVlQ2hhbmdlcyA9IHRydWU7XG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBsZXQgZGVzZXJpYWxpemVkVmFsdWUgPSB2YWx1ZTtcblxuICAgICAgaWYgKGZpZWxkLmRhdGEucXVlcnlQYXJhbVRvVmFsdWVUcmFuc2Zvcm1Gbikge1xuICAgICAgICBkZXNlcmlhbGl6ZWRWYWx1ZSA9IGZpZWxkLmRhdGEucXVlcnlQYXJhbVRvVmFsdWVUcmFuc2Zvcm1Gbih2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9nZXREZWZhdWx0VmFsdWUoa2V5KSA9PT0gJ251bWJlcicgfHwgIWlzTmFOKE51bWJlcih2YWx1ZSkpKSB7XG4gICAgICAgIGRlc2VyaWFsaXplZFZhbHVlID0gdHJhbnNmb3JtVG9OdW1iZXIodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5fZ2V0RGVmYXVsdFZhbHVlKGtleSkgPT09ICdib29sZWFuJyB8fCB2YWx1ZSA9PT0gJ3RydWUnIHx8IHZhbHVlID09PSAnZmFsc2UnKSB7XG4gICAgICAgIGRlc2VyaWFsaXplZFZhbHVlID0gdHJhbnNmb3JtVG9Cb29sZWFuKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsdWVJc0VxdWFsVG9DdXJyZW50ID0gZXF1YWwoZGVzZXJpYWxpemVkVmFsdWUsIGZpZWxkLmNvbnRyb2wudmFsdWUpO1xuXG4gICAgICBpZiAodmFsdWVJc0VxdWFsVG9DdXJyZW50KSBjb250aW51ZTtcblxuICAgICAgZmllbGQuY29udHJvbC5zZXRWYWx1ZShkZXNlcmlhbGl6ZWRWYWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgZGlkVmFsdWVDaGFuZ2VzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlkVmFsdWVDaGFuZ2VzO1xuICB9XG5cbiAgc2V0VmFsdWUodmFsdWU6IFF1ZXJ5Rm9ybVZhbHVlPFQ+LCBvcHRpb25zPzogUXVlcnlGb3JtV3JpdGVPcHRpb25zKSB7XG4gICAgdGhpcy5fZm9ybS5fc2V0VmFsdWUodmFsdWUsIG9wdGlvbnMpO1xuXG4gICAgaWYgKG9wdGlvbnM/LnNraXBSZXNldHMpIHtcbiAgICAgIHRoaXMuX3NraXBOZXh0UmVzZXRzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwYXRjaFZhbHVlKHZhbHVlOiBQYXJ0aWFsPFF1ZXJ5Rm9ybVZhbHVlPFQ+Piwgb3B0aW9ucz86IFF1ZXJ5Rm9ybVdyaXRlT3B0aW9ucykge1xuICAgIHRoaXMuX2Zvcm0uX3BhdGNoVmFsdWUodmFsdWUsIG9wdGlvbnMpO1xuXG4gICAgaWYgKG9wdGlvbnM/LnNraXBSZXNldHMpIHtcbiAgICAgIHRoaXMuX3NraXBOZXh0UmVzZXRzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXNldEZpZWxkVG9EZWZhdWx0KGtleToga2V5b2YgUXVlcnlGb3JtVmFsdWU8VD4sIG9wdGlvbnM/OiBRdWVyeUZvcm1Xcml0ZU9wdGlvbnMpIHtcbiAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLl9nZXREZWZhdWx0VmFsdWUoa2V5IGFzIHN0cmluZyk7XG5cbiAgICB0aGlzLmZvcm0uY29udHJvbHNba2V5XS5zZXRWYWx1ZShkZWZhdWx0VmFsdWUpO1xuXG4gICAgaWYgKG9wdGlvbnM/LnNraXBSZXNldHMpIHtcbiAgICAgIHRoaXMuX3NraXBOZXh0UmVzZXRzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXNldEZpZWxkc1RvRGVmYXVsdChrZXlzOiAoa2V5b2YgUXVlcnlGb3JtVmFsdWU8VD4pW10sIG9wdGlvbnM/OiBRdWVyeUZvcm1Xcml0ZU9wdGlvbnMpIHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IGtleXMucmVkdWNlKFxuICAgICAgKGFjYywga2V5KSA9PiB7XG4gICAgICAgIGFjY1trZXldID0gdGhpcy5fZ2V0RGVmYXVsdFZhbHVlKGtleSBhcyBzdHJpbmcpO1xuXG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LFxuICAgICAge30gYXMgUGFydGlhbDxRdWVyeUZvcm1WYWx1ZTxUPj4sXG4gICAgKTtcblxuICAgIHRoaXMucGF0Y2hWYWx1ZShkZWZhdWx0cyk7XG5cbiAgICBpZiAob3B0aW9ucz8uc2tpcFJlc2V0cykge1xuICAgICAgdGhpcy5fc2tpcE5leHRSZXNldHMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0QWxsRmllbGRzVG9EZWZhdWx0KG9wdGlvbnM/OiBRdWVyeUZvcm1Xcml0ZU9wdGlvbnMgJiB7IHNraXBGaWVsZHM/OiAoa2V5b2YgUXVlcnlGb3JtVmFsdWU8VD4pW10gfSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLl9maWVsZHMpIGFzIChrZXlvZiBRdWVyeUZvcm1WYWx1ZTxUPilbXTtcblxuICAgIGlmIChvcHRpb25zPy5za2lwRmllbGRzKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBvcHRpb25zLnNraXBGaWVsZHMpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBrZXlzLmluZGV4T2Yoa2V5KTtcblxuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAga2V5cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5yZXNldEZpZWxkc1RvRGVmYXVsdChrZXlzLCBvcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldERlZmF1bHRWYWx1ZShrZXk6IHN0cmluZykge1xuICAgIGNvbnN0IHZhbCA9IHRoaXMuX2RlZmF1bHRWYWx1ZXNba2V5XTtcblxuICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiB2YWwuc3RhcnRzV2l0aChFVF9BUlJfUFJFRklYKSkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UodmFsLnNsaWNlKEVUX0FSUl9QUkVGSVgubGVuZ3RoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbCA/PyBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfdHJhbnNmb3JtS2V5VG9RdWVyeVBhcmFtKGtleTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLl9vcHRpb25zPy5xdWVyeVBhcmFtUHJlZml4KSByZXR1cm4ga2V5O1xuXG4gICAgY29uc3QgcHJlZml4ID1cbiAgICAgIHR5cGVvZiB0aGlzLl9vcHRpb25zPy5xdWVyeVBhcmFtUHJlZml4ID09PSAnc3RyaW5nJ1xuICAgICAgICA/IHRoaXMuX29wdGlvbnMucXVlcnlQYXJhbVByZWZpeFxuICAgICAgICA6IHRoaXMuX29wdGlvbnMucXVlcnlQYXJhbVByZWZpeCgpO1xuXG4gICAgcmV0dXJuIGAke3ByZWZpeH0tJHtrZXl9YDtcbiAgfVxuXG4gIHByaXZhdGUgX2lzRGVmYXVsdFZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gYCR7RVRfQVJSX1BSRUZJWH0ke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gIDogdmFsdWU7XG5cbiAgICByZXR1cm4gdGhpcy5fZ2V0RGVmYXVsdFZhbHVlKGtleSkgPT09IG5vcm1hbGl6ZWRWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwRm9ybUdyb3VwKCkge1xuICAgIGNvbnN0IGdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSBhcyBRdWVyeUZvcm1Hcm91cENvbnRyb2xzPFQ+KSBhcyB1bmtub3duIGFzIFF1ZXJ5Rm9ybUdyb3VwO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCBmaWVsZF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5fZmllbGRzKSkge1xuICAgICAgZ3JvdXAuYWRkQ29udHJvbChrZXksIGZpZWxkLmNvbnRyb2wpO1xuICAgIH1cblxuICAgIGdyb3VwLl9wYXRjaFZhbHVlID0gZ3JvdXAucGF0Y2hWYWx1ZTtcbiAgICBncm91cC5fc2V0VmFsdWUgPSBncm91cC5zZXRWYWx1ZTtcblxuICAgIGdyb3VwLnBhdGNoVmFsdWUgPSB0aGlzLnBhdGNoVmFsdWUuYmluZCh0aGlzKTtcbiAgICBncm91cC5zZXRWYWx1ZSA9IHRoaXMuc2V0VmFsdWUuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBncm91cCBhcyB1bmtub3duIGFzIEZvcm1Hcm91cDxRdWVyeUZvcm1Hcm91cENvbnRyb2xzPFQ+PjtcbiAgfVxuXG4gIHByaXZhdGUgX2V4dHJhY3REZWZhdWx0VmFsdWVzKCkge1xuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIGZpZWxkXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9maWVsZHMpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGZpZWxkLmRhdGEuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgPyBmaWVsZC5kYXRhLmRlZmF1bHRWYWx1ZSA6IGZpZWxkLmNvbnRyb2wudmFsdWU7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBkZWZhdWx0VmFsdWVzW2tleV0gPSBgJHtFVF9BUlJfUFJFRklYfSR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZhdWx0VmFsdWVzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlcztcbiAgfVxuXG4gIHByaXZhdGUgX3N5bmNWaWFVcmxRdWVyeVBhcmFtcyh2YWx1ZXM6IFF1ZXJ5Rm9ybVZhbHVlPFQ+LCByZXBsYWNlVXJsPzogYm9vbGVhbikge1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0geyAuLi5jbG9uZSh0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcykgfTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlcykpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1LZXkgPSB0aGlzLl90cmFuc2Zvcm1LZXlUb1F1ZXJ5UGFyYW0oa2V5KTtcbiAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZmllbGRzW2tleV07XG5cbiAgICAgIGlmICghZmllbGQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzRGVmYXVsdCA9IHRoaXMuX2lzRGVmYXVsdFZhbHVlKGtleSwgdmFsdWUpO1xuICAgICAgY29uc3Qgd3JpdGVEZWZhdWx0VG9VcmwgPSBmaWVsZC5kYXRhLmFwcGVuZERlZmF1bHRWYWx1ZVRvVXJsID09PSB0cnVlO1xuICAgICAgY29uc3Qgd3JpdGVUb1VybCA9IGZpZWxkLmRhdGEuYXBwZW5kVG9VcmwgIT09IGZhbHNlO1xuXG4gICAgICBpZiAoIXdyaXRlVG9VcmwgfHwgKGlzRGVmYXVsdCAmJiAhd3JpdGVEZWZhdWx0VG9VcmwpKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zW3F1ZXJ5UGFyYW1LZXldID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVlcnlQYXJhbXNbcXVlcnlQYXJhbUtleV0gPSBmaWVsZC5kYXRhLnZhbHVlVG9RdWVyeVBhcmFtVHJhbnNmb3JtRm5cbiAgICAgICAgICA/IGZpZWxkLmRhdGEudmFsdWVUb1F1ZXJ5UGFyYW1UcmFuc2Zvcm1Gbj8uKHZhbHVlKVxuICAgICAgICAgIDogdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fem9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICByZXBsYWNlVXJsLFxuICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVGb3JtQ2hhbmdlKGZvcmNlT3ZlcndyaXRlID0gZmFsc2UpIHtcbiAgICBjb25zdCBjdXJyZW50VmFsID0gY2xvbmUodGhpcy5fY3VycmVudEZvcm1WYWx1ZSQudmFsdWUpO1xuICAgIGNvbnN0IG5ld1ZhbCA9IGNsb25lKHRoaXMuX2Zvcm1WYWx1ZSk7XG5cbiAgICBpZiAoZXF1YWwoY3VycmVudFZhbCwgbmV3VmFsKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChmb3JjZU92ZXJ3cml0ZSkge1xuICAgICAgdGhpcy5fbGFzdEZvcm1WYWx1ZSQubmV4dChuZXdWYWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sYXN0Rm9ybVZhbHVlJC5uZXh0KGN1cnJlbnRWYWwpO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRGb3JtVmFsdWUkLm5leHQobmV3VmFsKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZm9ybS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9xdWVyeS1mb3JtL3F1ZXJ5LWZvcm0udHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBRdWVyeUZpZWxkIH0gZnJvbSAnLi9xdWVyeS1mb3JtJztcblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeUZpZWxkT3B0aW9uczxUID0gdW5rbm93bj4ge1xuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGZpZWxkLlxuICAgKiBXaWxsIGJlIHNldCB0byB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgZm9ybSBjb250cm9sIGlmIG5vdCBzcGVjaWZpZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU/OiBUIHwgbnVsbDtcblxuICAvKipcbiAgICogRGVib3VuY2UgdGltZSBpbiBtaWxsaXNlY29uZHMuXG4gICAqL1xuICBkZWJvdW5jZT86IG51bWJlcjtcblxuICAvKipcbiAgICogIFdoZXRoZXIgdGhlIGRlYm91bmNlIHNob3VsZCBub3QgYmUgYXBwbGllZCBpZiB0aGUgdmFsdWUgaXMgZmFsc3kuXG4gICAqICBUaGlzIGlzIHVzZWZ1bCBmb3IgZmllbGRzIHRoYXQgY2FuIGJlIGNsZWFyZWQgbGlrZSBhIHNlYXJjaCBmaWVsZC5cbiAgICpcbiAgICogIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlRGVib3VuY2VJZkZhbHN5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGZvcm0gY29udHJvbCBmb3IgdGhlIGZpZWxkLlxuICAgKi9cbiAgY29udHJvbDogRm9ybUNvbnRyb2w8VCB8IG51bGw+O1xuXG4gIC8qKlxuICAgKiBBcHBlbmQgdGhlIGZpZWxkJ3MgdmFsdWUgdG8gdGhlIHVybC5cbiAgICpcbiAgICogVGhlIGZpZWxkIHdvbnQgYmUgYXBwZW5kZWQgdG8gdGhlIHVybCBpZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOlxuICAgKiAtIEl0IGlzIHRoZSBkZWZhdWx0IHZhbHVlIGFuZCBgYXBwZW5kRGVmYXVsdFZhbHVlVG9VcmxgIGlzIGBmYWxzZWBcbiAgICogLSBJdCBpcyBhbiBlbXB0eSBzdHJpbmdcbiAgICogLSBJdCBpcyBgbnVsbGBcbiAgICogLSBJdCBpcyBgdW5kZWZpbmVkYFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBhcHBlbmRUb1VybD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFwcGVuZCB0aGUgZmllbGQncyB2YWx1ZSB0byB0aGUgdXJsIGV2ZW4gaWYgaXQgaXMgdGhlIGRlZmF1bHQgdmFsdWUuXG4gICAqIFdpbGwgYmUgaWdub3JlZCBpZiBgYXBwZW5kVG9VcmxgIGlzIGBmYWxzZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhcHBlbmREZWZhdWx0VmFsdWVUb1VybD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBmaWVsZCdzIHZhbHVlIHRvIHRoZSBkZWZhdWx0IHZhbHVlIGlmIG9uZSBvciBtb3JlIG9mIHRoZSBzcGVjaWZpZWQgZmllbGRzIGFyZSBjaGFuZ2VkLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBHaXZlbiB0aGlzIGZpZWxkIGlzIGEgYHBhZ2VgIGZpZWxkLCB0aGUgZmllbGQgd2lsbCBiZSByZXNldCBpZiB0aGUgYGxpbWl0YCwgYHF1ZXJ5YCBvciBgc2VhcmNoYCBmaWVsZHMgYXJlIGNoYW5nZWQuXG4gICAqIFsnbGltaXQnLCAncXVlcnknLCAnc2VhcmNoJ11cbiAgICovXG4gIGlzUmVzZXRCeT86IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBmaWVsZCBzaG91bGQgY2hhbmdlIHRoZSBjb3VudCBvZiBjdXJyZW50IGFjdGl2ZSBmaWx0ZXJzLlxuICAgKlxuICAgKiBXaWxsIGJlIGB0cnVlYCBmb3IgdGhlc2UgY29tbW9uIGZpZWxkczpcbiAgICogLSBgcGFnZWBcbiAgICogLSBgc2tpcGBcbiAgICogLSBgdGFrZWBcbiAgICogLSBgbGltaXRgXG4gICAqIC0gYHNvcnRgXG4gICAqIC0gYHNvcnRCeWBcbiAgICogLSBgc29ydE9yZGVyYFxuICAgKiAtIGBxdWVyeWBcbiAgICogLSBgc2VhcmNoYFxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc2tpcEluRmlsdGVyQ291bnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgdHJhbnNmb3JtcyB0aGUgdGhlIHZhbHVlIGdvdHRlbiBmcm9tIHRoZSB1cmwgcXVlcnkgcGFyYW1zIHRvIGEgdmFsdWUgcmVxdWlyZWQgYnkgdGhlIGZpZWxkLlxuICAgKiBFLmcuIGZvciBhIG51bWJlciBmaWVsZCwgdGhlIHZhbHVlIGZyb20gdGhlIHVybCBxdWVyeSBwYXJhbXMgaXMgYSBzdHJpbmcsIGJ1dCB0aGUgZmllbGQgcmVxdWlyZXMgYSBudW1iZXIuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgY29tbW9uIHRyYW5zZm9ybWF0aW9ucyBhcmUgYWxyZWFkeSBpbXBsZW1lbnRlZDpcbiAgICogLSBgdHJhbnNmb3JtVG9TdHJpbmdgXG4gICAqIC0gYHRyYW5zZm9ybVRvU3RyaW5nQXJyYXlgXG4gICAqIC0gYHRyYW5zZm9ybVRvTnVtYmVyYFxuICAgKiAtIGB0cmFuc2Zvcm1Ub051bWJlckFycmF5YFxuICAgKiAtIGB0cmFuc2Zvcm1Ub0Jvb2xlYW5gXG4gICAqIC0gYHRyYW5zZm9ybVRvQm9vbGVhbkFycmF5YFxuICAgKiAtIGB0cmFuc2Zvcm1Ub0RhdGVgIChleHBlY3RzIGEgc3RyaW5nIGluIHRoZSBkZWZhdWx0IGpzIGZvcm1hdClcbiAgICogLSBgdHJhbnNmb3JtVG9EYXRlQXJyYXlgIChleHBlY3RzIHN0cmluZ3MgaW4gdGhlIGRlZmF1bHQganMgZm9ybWF0KVxuICAgKiAtIGB0cmFuc2Zvcm1Ub1NvcnRgIChleHBlY3RzIGEgc3RyaW5nIGluIHRoZSBmb3JtYXQgYGZpZWxkOmRpcmVjdGlvbmApXG4gICAqL1xuICBxdWVyeVBhcmFtVG9WYWx1ZVRyYW5zZm9ybUZuPzogKHZhbDogdW5rbm93bikgPT4gVCB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCB0cmFuc2Zvcm1zIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgdG8gYSB2YWx1ZSB0aGF0IGNhbiBiZSBhcHBlbmRlZCB0byB0aGUgdXJsIHF1ZXJ5IHBhcmFtcy5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBjb21tb24gdHJhbnNmb3JtYXRpb25zIGFyZSBhbHJlYWR5IGltcGxlbWVudGVkOlxuICAgKiAtIGB0cmFuc2Zvcm1Ub1NvcnRRdWVyeVBhcmFtYCAocmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyBgZmllbGRgIGFuZCBgZGlyZWN0aW9uYCBwcm9wZXJ0aWVzKVxuICAgKi9cbiAgdmFsdWVUb1F1ZXJ5UGFyYW1UcmFuc2Zvcm1Gbj86ICh2YWw6IFQgfCBudWxsKSA9PiB1bmtub3duO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IHR5cGUgUXVlcnlGb3JtR3JvdXBDb250cm9sczxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgUXVlcnlGaWVsZDxhbnk+Pj4gPSB7XG4gIFtQcm9wZXJ0eSBpbiBrZXlvZiBUXTogVFtQcm9wZXJ0eV1bJ2NvbnRyb2wnXTtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgdHlwZSBRdWVyeUZvcm1WYWx1ZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgUXVlcnlGaWVsZDxhbnk+Pj4gPSB7XG4gIFtQcm9wZXJ0eSBpbiBrZXlvZiBUXTogVFtQcm9wZXJ0eV1bJ2NvbnRyb2wnXVsndmFsdWUnXTtcbn07XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5Rm9ybU9mPFQgZXh0ZW5kcyBGb3JtR3JvdXA+ID0ge1xuICBbSyBpbiBrZXlvZiBUWydjb250cm9scyddXTogUXVlcnlGaWVsZDxUWydjb250cm9scyddW0tdWyd2YWx1ZSddPjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlGb3JtR3JvdXAgZXh0ZW5kcyBGb3JtR3JvdXAge1xuICBfc2V0VmFsdWU6IEZvcm1Hcm91cFsnc2V0VmFsdWUnXTtcbiAgX3BhdGNoVmFsdWU6IEZvcm1Hcm91cFsncGF0Y2hWYWx1ZSddO1xuICBzZXRWYWx1ZSh2YWx1ZTogdW5rbm93biwgb3B0aW9ucz86IFF1ZXJ5Rm9ybVdyaXRlT3B0aW9ucyk6IHZvaWQ7XG4gIHBhdGNoVmFsdWUodmFsdWU6IHVua25vd24sIG9wdGlvbnM/OiBRdWVyeUZvcm1Xcml0ZU9wdGlvbnMpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5Rm9ybU9ic2VydmVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGZvcm0gdmFsdWUgc2hvdWxkIGJlIHN5bmNlZCB0byB0aGUgdXJsIHF1ZXJ5IHBhcmFtcy5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgd3JpdGVUb1F1ZXJ5UGFyYW1zPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZm9ybSB2YWx1ZSBzaG91bGQgYmUgdXBkYXRlZCB3aGVuIHRoZSB1cmwgcXVlcnkgcGFyYW1zIGNoYW5nZS5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgc3luY09uTmF2aWdhdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHRydWUsIHRoZSBuYXZpZ2F0aW9uIHdpbGwgbm90IGNyZWF0ZSBhIG5ldyBlbnRyeSBpbiB0aGUgYnJvd3NlcidzIGhpc3RvcnkuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZXBsYWNlVXJsPzogYm9vbGVhbjtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlGb3JtVmFsdWVFdmVudDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgUXVlcnlGaWVsZDxhbnk+Pj4ge1xuICBwcmV2aW91c1ZhbHVlOiBRdWVyeUZvcm1WYWx1ZTxUPiB8IG51bGw7XG4gIGN1cnJlbnRWYWx1ZTogUXVlcnlGb3JtVmFsdWU8VD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlGb3JtV3JpdGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgZWFjaCBjaGFuZ2Ugb25seSBhZmZlY3RzIHRoaXMgY29udHJvbCwgYW5kIG5vdCBpdHMgcGFyZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgb25seVNlbGY/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVuIHRydWUgb3Igbm90IHN1cHBsaWVkICh0aGUgZGVmYXVsdCksIGJvdGggdGhlIGBzdGF0dXNDaGFuZ2VzYCBhbmQgYHZhbHVlQ2hhbmdlc2BcbiAgICogb2JzZXJ2YWJsZXMgZW1pdCBldmVudHMgd2l0aCB0aGUgbGF0ZXN0IHN0YXR1cyBhbmQgdmFsdWUgd2hlbiB0aGUgY29udHJvbCB2YWx1ZSBpcyB1cGRhdGVkLlxuICAgKiBXaGVuIGZhbHNlLCBubyBldmVudHMgYXJlIGVtaXR0ZWQuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGVtaXRFdmVudD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgdGhlIGByZXNldEJ5YCBjb25kaXRpb25zIHdpbGwgYmUgaWdub3JlZCBmb3IgdGhpcyB3cml0ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHNraXBSZXNldHM/OiBib29sZWFuO1xufVxuIl19
@@ -0,0 +1,97 @@
1
+ export const transformToString = (value) => {
2
+ if (typeof value === 'string') {
3
+ return value;
4
+ }
5
+ return null;
6
+ };
7
+ export const transformToStringArray = (value) => {
8
+ if (Array.isArray(value)) {
9
+ return value.map(transformToString).filter(Boolean);
10
+ }
11
+ else if (typeof value === 'string') {
12
+ return [transformToString(value)];
13
+ }
14
+ return null;
15
+ };
16
+ export const transformToNumber = (value) => {
17
+ if (typeof value === 'number') {
18
+ return value;
19
+ }
20
+ if (typeof value === 'string') {
21
+ return Number(value);
22
+ }
23
+ return null;
24
+ };
25
+ export const transformToNumberArray = (value) => {
26
+ if (Array.isArray(value)) {
27
+ return value.map(transformToNumber).filter((item) => item !== null);
28
+ }
29
+ else if (typeof value === 'number') {
30
+ return [value];
31
+ }
32
+ return null;
33
+ };
34
+ export const transformToBoolean = (value) => {
35
+ if (typeof value === 'boolean') {
36
+ return value;
37
+ }
38
+ if (typeof value === 'string') {
39
+ return value === 'true' || value === '1';
40
+ }
41
+ return null;
42
+ };
43
+ export const transformToBooleanArray = (value) => {
44
+ if (Array.isArray(value)) {
45
+ return value.map(transformToBoolean).filter((item) => item !== null);
46
+ }
47
+ else if (typeof value === 'string' || typeof value === 'boolean') {
48
+ return [transformToBoolean(value)];
49
+ }
50
+ return null;
51
+ };
52
+ export const transformToDate = (value) => {
53
+ if (value instanceof Date) {
54
+ return value;
55
+ }
56
+ if (typeof value === 'string') {
57
+ const date = new Date(value);
58
+ if (isNaN(date.getTime())) {
59
+ return null;
60
+ }
61
+ return date;
62
+ }
63
+ return null;
64
+ };
65
+ export const transformToDateArray = (value) => {
66
+ if (Array.isArray(value)) {
67
+ return value.map(transformToDate).filter((item) => item !== null);
68
+ }
69
+ else if (typeof value === 'string' || value instanceof Date) {
70
+ return [transformToDate(value)];
71
+ }
72
+ return null;
73
+ };
74
+ export const transformToSort = (value) => {
75
+ if (typeof value === 'string') {
76
+ const [active, direction] = value.split(':');
77
+ if (!active) {
78
+ return null;
79
+ }
80
+ return {
81
+ active,
82
+ direction: direction,
83
+ };
84
+ }
85
+ return null;
86
+ };
87
+ export const transformToSortQueryParam = (value) => {
88
+ if (typeof value === 'string') {
89
+ return value;
90
+ }
91
+ if (value && typeof value === 'object' && 'active' in value && 'direction' in value) {
92
+ const valAsSort = value;
93
+ return valAsSort.direction ? `${valAsSort.active}:${valAsSort.direction}` : null;
94
+ }
95
+ return null;
96
+ };
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZm9ybS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9xdWVyeS1mb3JtL3F1ZXJ5LWZvcm0udXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxLQUFjLEVBQUUsRUFBRTtJQUNsRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxLQUFjLEVBQUUsRUFBRTtJQUN2RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFhLENBQUM7SUFDbEUsQ0FBQztTQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDckMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFhLENBQUM7SUFDaEQsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxLQUFjLEVBQUUsRUFBRTtJQUNsRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBRUYsTUFBTSxD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QUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFN0MsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTztZQUNMLE1BQU07WUFDTixTQUFTLEVBQUUsU0FBMkI7U0FDdkMsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLENBQUMsS0FBYyxFQUFFLEVBQUU7SUFDMUQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksUUFBUSxJQUFJLEtBQUssSUFBSSxXQUFXLElBQUksS0FBSyxFQUFFLENBQUM7UUFDcEYsTUFBTSxTQUFTLEdBQUcsS0FHakIsQ0FBQztRQUVGLE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ25GLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCB0cmFuc2Zvcm1Ub1N0cmluZyA9ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybVRvU3RyaW5nQXJyYXkgPSAodmFsdWU6IHVua25vd24pID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcCh0cmFuc2Zvcm1Ub1N0cmluZykuZmlsdGVyKEJvb2xlYW4pIGFzIHN0cmluZ1tdO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gW3RyYW5zZm9ybVRvU3RyaW5nKHZhbHVlKV0gYXMgc3RyaW5nW107XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1Ub051bWJlciA9ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBOdW1iZXIodmFsdWUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybVRvTnVtYmVyQXJyYXkgPSAodmFsdWU6IHVua25vd24pID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcCh0cmFuc2Zvcm1Ub051bWJlcikuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9PSBudWxsKSBhcyBudW1iZXJbXTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIFt2YWx1ZV0gYXMgbnVtYmVyW107XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1Ub0Jvb2xlYW4gPSAodmFsdWU6IHVua25vd24pID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAndHJ1ZScgfHwgdmFsdWUgPT09ICcxJztcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1Ub0Jvb2xlYW5BcnJheSA9ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUubWFwKHRyYW5zZm9ybVRvQm9vbGVhbikuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9PSBudWxsKSBhcyBib29sZWFuW107XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgIHJldHVybiBbdHJhbnNmb3JtVG9Cb29sZWFuKHZhbHVlKV0gYXMgYm9vbGVhbltdO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtVG9EYXRlID0gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXG4gICAgaWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtVG9EYXRlQXJyYXkgPSAodmFsdWU6IHVua25vd24pID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcCh0cmFuc2Zvcm1Ub0RhdGUpLmZpbHRlcigoaXRlbSkgPT4gaXRlbSAhPT0gbnVsbCkgYXMgRGF0ZVtdO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgcmV0dXJuIFt0cmFuc2Zvcm1Ub0RhdGUodmFsdWUpXSBhcyBEYXRlW107XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1Ub1NvcnQgPSAodmFsdWU6IHVua25vd24pID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBbYWN0aXZlLCBkaXJlY3Rpb25dID0gdmFsdWUuc3BsaXQoJzonKTtcblxuICAgIGlmICghYWN0aXZlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWN0aXZlLFxuICAgICAgZGlyZWN0aW9uOiBkaXJlY3Rpb24gYXMgJ2FzYycgfCAnZGVzYycsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybVRvU29ydFF1ZXJ5UGFyYW0gPSAodmFsdWU6IHVua25vd24pID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ2FjdGl2ZScgaW4gdmFsdWUgJiYgJ2RpcmVjdGlvbicgaW4gdmFsdWUpIHtcbiAgICBjb25zdCB2YWxBc1NvcnQgPSB2YWx1ZSBhcyB7XG4gICAgICBhY3RpdmU6IHN0cmluZztcbiAgICAgIGRpcmVjdGlvbjogJ2FzYycgfCAnZGVzYyc7XG4gICAgfTtcblxuICAgIHJldHVybiB2YWxBc1NvcnQuZGlyZWN0aW9uID8gYCR7dmFsQXNTb3J0LmFjdGl2ZX06JHt2YWxBc1NvcnQuZGlyZWN0aW9ufWAgOiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuIl19
@@ -0,0 +1,2 @@
1
+ export * from './query-store';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvcXVlcnktc3RvcmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3F1ZXJ5LXN0b3JlJztcbiJdfQ==