@ethlete/query 5.21.1 → 5.22.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 (88) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/fesm2022/ethlete-query.mjs +21 -37
  3. package/fesm2022/ethlete-query.mjs.map +1 -1
  4. package/package.json +5 -7
  5. package/esm2022/ethlete-query.mjs +0 -5
  6. package/esm2022/index.mjs +0 -21
  7. package/esm2022/lib/auth/auth-provider.types.mjs +0 -2
  8. package/esm2022/lib/auth/auth-provider.utils.mjs +0 -25
  9. package/esm2022/lib/auth/basic-auth-provider.mjs +0 -15
  10. package/esm2022/lib/auth/bearer-auth-provider.mjs +0 -168
  11. package/esm2022/lib/auth/custom-header-auth-provider.mjs +0 -12
  12. package/esm2022/lib/auth/index.mjs +0 -6
  13. package/esm2022/lib/class-validator/class-validator.types.mjs +0 -2
  14. package/esm2022/lib/class-validator/class-validator.utils.mjs +0 -4
  15. package/esm2022/lib/class-validator/index.mjs +0 -3
  16. package/esm2022/lib/devtools/components/query-devtools/index.mjs +0 -2
  17. package/esm2022/lib/devtools/components/query-devtools/query-devtools.component.mjs +0 -297
  18. package/esm2022/lib/devtools/pipes/index.mjs +0 -2
  19. package/esm2022/lib/devtools/pipes/query-short-name.pipe.mjs +0 -24
  20. package/esm2022/lib/devtools/utils/index.mjs +0 -2
  21. package/esm2022/lib/devtools/utils/query-client.utils.mjs +0 -13
  22. package/esm2022/lib/directives/index.mjs +0 -4
  23. package/esm2022/lib/directives/infinity-query-trigger.directive.mjs +0 -56
  24. package/esm2022/lib/directives/infinity-query.directive.mjs +0 -147
  25. package/esm2022/lib/directives/query.directive.mjs +0 -123
  26. package/esm2022/lib/entity/entity-store.mjs +0 -127
  27. package/esm2022/lib/entity/entity.types.mjs +0 -2
  28. package/esm2022/lib/entity/entity.utils.mjs +0 -29
  29. package/esm2022/lib/entity/index.mjs +0 -4
  30. package/esm2022/lib/experimental/bearer-auth-provider-config.mjs +0 -19
  31. package/esm2022/lib/experimental/bearer-auth-provider.mjs +0 -245
  32. package/esm2022/lib/experimental/http-request.mjs +0 -154
  33. package/esm2022/lib/experimental/index.mjs +0 -23
  34. package/esm2022/lib/experimental/paged-query.mjs +0 -194
  35. package/esm2022/lib/experimental/query-client-config.mjs +0 -13
  36. package/esm2022/lib/experimental/query-client.mjs +0 -16
  37. package/esm2022/lib/experimental/query-creator-templates.mjs +0 -33
  38. package/esm2022/lib/experimental/query-creator.mjs +0 -28
  39. package/esm2022/lib/experimental/query-dependencies.mjs +0 -14
  40. package/esm2022/lib/experimental/query-errors.mjs +0 -70
  41. package/esm2022/lib/experimental/query-execute-utils.mjs +0 -54
  42. package/esm2022/lib/experimental/query-execute.mjs +0 -14
  43. package/esm2022/lib/experimental/query-features.mjs +0 -126
  44. package/esm2022/lib/experimental/query-repository.mjs +0 -97
  45. package/esm2022/lib/experimental/query-snapshot.mjs +0 -45
  46. package/esm2022/lib/experimental/query-stack.mjs +0 -65
  47. package/esm2022/lib/experimental/query-state.mjs +0 -20
  48. package/esm2022/lib/experimental/query-utils.mjs +0 -176
  49. package/esm2022/lib/experimental/query.mjs +0 -29
  50. package/esm2022/lib/experimental/secure-query-creator.mjs +0 -15
  51. package/esm2022/lib/experimental/secure-query-execute.mjs +0 -80
  52. package/esm2022/lib/experimental/secure-query.mjs +0 -33
  53. package/esm2022/lib/gql/gql.mjs +0 -23
  54. package/esm2022/lib/gql/index.mjs +0 -2
  55. package/esm2022/lib/infinite-query/index.mjs +0 -4
  56. package/esm2022/lib/infinite-query/infinity-query.mjs +0 -171
  57. package/esm2022/lib/infinite-query/infinity-query.types.mjs +0 -2
  58. package/esm2022/lib/infinite-query/infinity-query.utils.mjs +0 -3
  59. package/esm2022/lib/logger/index.mjs +0 -2
  60. package/esm2022/lib/logger/logger.mjs +0 -16
  61. package/esm2022/lib/query/index.mjs +0 -4
  62. package/esm2022/lib/query/query.mjs +0 -431
  63. package/esm2022/lib/query/query.types.mjs +0 -2
  64. package/esm2022/lib/query/query.utils.mjs +0 -253
  65. package/esm2022/lib/query-client/index.mjs +0 -4
  66. package/esm2022/lib/query-client/query-client.mjs +0 -80
  67. package/esm2022/lib/query-client/query-client.types.mjs +0 -2
  68. package/esm2022/lib/query-client/query-client.utils.mjs +0 -20
  69. package/esm2022/lib/query-creator/index.mjs +0 -3
  70. package/esm2022/lib/query-creator/query-creator.mjs +0 -55
  71. package/esm2022/lib/query-creator/query-creator.types.mjs +0 -2
  72. package/esm2022/lib/query-form/index.mjs +0 -4
  73. package/esm2022/lib/query-form/query-form.mjs +0 -412
  74. package/esm2022/lib/query-form/query-form.types.mjs +0 -2
  75. package/esm2022/lib/query-form/query-form.utils.mjs +0 -97
  76. package/esm2022/lib/query-store/index.mjs +0 -2
  77. package/esm2022/lib/query-store/query-store.mjs +0 -144
  78. package/esm2022/lib/request/index.mjs +0 -4
  79. package/esm2022/lib/request/request.mjs +0 -196
  80. package/esm2022/lib/request/request.types.mjs +0 -2
  81. package/esm2022/lib/request/request.util.mjs +0 -252
  82. package/esm2022/lib/symfony/index.mjs +0 -3
  83. package/esm2022/lib/symfony/symfony.types.mjs +0 -2
  84. package/esm2022/lib/symfony/symfony.utils.mjs +0 -31
  85. package/esm2022/lib/utils/data.utils.mjs +0 -138
  86. package/esm2022/lib/utils/deep-freeze.util.mjs +0 -17
  87. package/esm2022/lib/utils/def.util.mjs +0 -8
  88. package/esm2022/lib/utils/index.mjs +0 -4
@@ -1,297 +0,0 @@
1
- import { AsyncPipe, JsonPipe, NgClass } from '@angular/common';
2
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ViewEncapsulation, computed, effect, inject, signal, untracked, } from '@angular/core';
3
- import { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';
4
- import { FormControl, ReactiveFormsModule } from '@angular/forms';
5
- import { createDestroy, nextFrame } from '@ethlete/core';
6
- import { BehaviorSubject, map, of, startWith, switchMap, takeUntil, tap } from 'rxjs';
7
- import { BasicAuthProvider, CustomHeaderAuthProvider, isBearerAuthProvider } from '../../../auth';
8
- import { QueryDirective } from '../../../directives';
9
- import { isGqlQueryConfig } from '../../../query';
10
- import { QueryShortNamePipe } from '../../pipes';
11
- import { QUERY_CLIENT_DEVTOOLS_TOKEN } from '../../utils';
12
- import * as i0 from "@angular/core";
13
- import * as i1 from "@angular/forms";
14
- export class QueryDevtoolsComponent {
15
- constructor() {
16
- this._cdr = inject(ChangeDetectorRef);
17
- this._destroy$ = createDestroy();
18
- this.queryClientConfigs = inject(QUERY_CLIENT_DEVTOOLS_TOKEN);
19
- this.isOpen = signal(false);
20
- this.isTranslucent = signal(false);
21
- this.snapLayout = signal('full');
22
- this.queryListMode = signal('live');
23
- this.viewMode = signal('query');
24
- this.showResponse = signal(false);
25
- this.showRawResponse = signal(false);
26
- this.showQueryConfig = signal(false);
27
- this.showEntityStoreValue = signal(false);
28
- this.showArguments = signal(false);
29
- this.selectedClientIdCtrl = new FormControl(0);
30
- this.selectedClientId = toSignal(this.selectedClientIdCtrl.valueChanges.pipe(startWith(this.selectedClientIdCtrl.value)));
31
- this.selectedQueryId = signal(null);
32
- this.selectedClientConfig = computed(() => {
33
- if (this.queryClientConfigs.length === 1) {
34
- return this.queryClientConfigs[0];
35
- }
36
- const index = this.selectedClientId() ?? 0;
37
- const cfg = this.queryClientConfigs[index];
38
- if (!cfg) {
39
- return this.queryClientConfigs[0];
40
- }
41
- return cfg;
42
- });
43
- this.queryStore = computed(() => {
44
- const config = this.selectedClientConfig();
45
- return config.client._store;
46
- });
47
- this.queryStore$ = toObservable(this.queryStore);
48
- this._queries$ = new BehaviorSubject([]);
49
- this.queries = toSignal(this._queries$);
50
- this.selectedQuery = computed(() => {
51
- const id = this.selectedQueryId();
52
- const mode = this.queryListMode();
53
- if (id === null || !mode) {
54
- return null;
55
- }
56
- if (mode === 'live') {
57
- return this.queries()?.find((q) => q._id === id) ?? null;
58
- }
59
- return this.queryHistory$.getValue()?.find((q) => q._id === id) ?? null;
60
- });
61
- this.selectedQuery$ = toObservable(this.selectedQuery);
62
- this.selectedQueryEntityStore = computed(() => {
63
- const query = this.selectedQuery();
64
- if (!query)
65
- return null;
66
- return query.store;
67
- });
68
- this.selectedQueryEntityStore$ = toObservable(this.selectedQueryEntityStore);
69
- this.selectedQueryEntityStoreValue$ = this.selectedQueryEntityStore$.pipe(switchMap((s) => s?._change$.pipe(startWith(''), map(() => {
70
- if (!s._dictionary)
71
- return null;
72
- return Array.from(s._dictionary).reduce((obj, [key, value]) => {
73
- obj[key] = value;
74
- return obj;
75
- }, {});
76
- })) ?? of(null)));
77
- this.queryHistory$ = new BehaviorSubject([]);
78
- this.stringifiedQueryConfig = computed(() => {
79
- const query = this.selectedQuery();
80
- if (!query)
81
- return null;
82
- const cfg = query._queryConfig;
83
- const route = typeof cfg.route === 'string' ? cfg.route : cfg.route ? cfg.route({}).replace(/undefined/g, ':param') : null;
84
- const sharedCfg = {
85
- method: cfg.method,
86
- secure: cfg.secure,
87
- route,
88
- reportProgress: cfg.reportProgress,
89
- responseType: cfg.responseType,
90
- withCredentials: cfg.withCredentials,
91
- autoRefreshOn: cfg.autoRefreshOn,
92
- enableSmartPolling: cfg.enableSmartPolling,
93
- hasEntityStore: !!cfg.entity,
94
- };
95
- if (isGqlQueryConfig(cfg)) {
96
- return {
97
- ...sharedCfg,
98
- query: cfg.query,
99
- transferVia: cfg.transferVia,
100
- };
101
- }
102
- return {
103
- ...sharedCfg,
104
- };
105
- });
106
- this.authProvider = toSignal(toObservable(this.selectedClientConfig).pipe(switchMap((c) => c.client.authProvider$)));
107
- this.authProviderDetails = computed(() => {
108
- const provider = this.authProvider();
109
- if (!provider)
110
- return null;
111
- if (provider instanceof CustomHeaderAuthProvider) {
112
- return {
113
- type: 'CustomHeaderAuthProvider',
114
- header: () => provider.header,
115
- provider: provider,
116
- config: {
117
- name: provider._config.name,
118
- value: provider._config.value,
119
- },
120
- };
121
- }
122
- else if (provider instanceof BasicAuthProvider) {
123
- return {
124
- type: 'BasicAuthProvider',
125
- header: () => provider.header,
126
- provider: provider,
127
- config: {
128
- username: provider._config.username,
129
- password: provider._config.password,
130
- },
131
- };
132
- }
133
- else if (isBearerAuthProvider(provider)) {
134
- const refreshCfg = provider._config.refreshConfig;
135
- return {
136
- type: 'BearerAuthProvider',
137
- header: () => provider.header,
138
- provider: provider,
139
- config: {
140
- token: provider._config.token,
141
- refreshConfig: {
142
- refreshOnUnauthorizedResponse: refreshCfg?.refreshOnUnauthorizedResponse ?? 'true (default)',
143
- token: refreshCfg?.token,
144
- cookieName: refreshCfg?.cookieName,
145
- cookieDomain: refreshCfg?.cookieDomain ?? 'current origin (default)',
146
- cookieExpiresInDays: refreshCfg?.cookieExpiresInDays ?? '30 (default)',
147
- cookiePath: refreshCfg?.cookiePath ?? '/ (default)',
148
- cookieEnabled: refreshCfg?.cookieEnabled ?? 'true (default)',
149
- cookieSameSite: refreshCfg?.cookieSameSite ?? 'lax (default)',
150
- refreshBuffer: refreshCfg?.refreshBuffer ?? '30000 (default)',
151
- expiresInPropertyName: refreshCfg?.expiresInPropertyName ?? 'exp (default)',
152
- strategy: refreshCfg?.strategy ?? 'AuthBearerRefreshStrategy.BeforeExpiration (default)',
153
- requestArgsAdapter: refreshCfg?.requestArgsAdapter ? 'custom' : 'default',
154
- responseAdapter: refreshCfg?.responseAdapter ? 'custom' : 'default',
155
- },
156
- },
157
- };
158
- }
159
- else {
160
- return {
161
- type: 'UnknownAuthProvider',
162
- header: () => provider.header,
163
- provider: provider,
164
- config: {},
165
- };
166
- }
167
- });
168
- this.trackByClient = (_, { client }) => client.config.baseRoute;
169
- this.trackByQuery = (_, { _id }) => _id;
170
- this.selectedClientIdCtrl.valueChanges
171
- .pipe(tap(() => this.clearQueryHistory()), takeUntil(this._destroy$))
172
- .subscribe();
173
- this.selectedQuery$
174
- .pipe(switchMap((q) => q?._dependentsChanged$ ?? of(null)), tap(() => this._cdr.markForCheck()), takeUntilDestroyed())
175
- .subscribe();
176
- toObservable(this.authProviderDetails)
177
- .pipe(switchMap((ap) => (ap?.type === 'BearerAuthProvider' ? ap.provider.tokens$ : of(null))))
178
- .pipe(tap(() => this._cdr.markForCheck()), takeUntilDestroyed())
179
- .subscribe();
180
- this.queryStore$
181
- .pipe(switchMap((s) => s.storeChange$.pipe(startWith(''), map(() => s._store), tap((s) => {
182
- untracked(() => {
183
- this._queries$.next(Array.from(s.values()));
184
- });
185
- }), takeUntil(this._destroy$))))
186
- .subscribe();
187
- this.queryStore$
188
- .pipe(switchMap((s) => s.queryCreated$.pipe(tap((query) => {
189
- const currentHistory = this.queryHistory$.getValue();
190
- if (!currentHistory)
191
- return;
192
- const currentHistoryClone = [...currentHistory];
193
- if (!currentHistory.some((q) => q._id === query._id)) {
194
- currentHistoryClone.unshift(query);
195
- }
196
- currentHistoryClone.splice(50);
197
- this.queryHistory$.next(currentHistoryClone);
198
- }), takeUntil(this._destroy$))))
199
- .subscribe();
200
- this._queries$
201
- .pipe(tap((queries) => {
202
- const currentHistory = this.queryHistory$.getValue();
203
- if (!queries || !currentHistory)
204
- return;
205
- const currentHistoryClone = [...currentHistory];
206
- for (const query of queries) {
207
- if (!currentHistoryClone.some((q) => q._id === query._id)) {
208
- currentHistoryClone.unshift(query);
209
- }
210
- }
211
- currentHistoryClone.splice(50);
212
- this.queryHistory$.next(currentHistoryClone);
213
- }), takeUntil(this._destroy$))
214
- .subscribe();
215
- effect(() => {
216
- const devtoolConfig = {
217
- isOpen: this.isOpen(),
218
- isTranslucent: this.isTranslucent(),
219
- snapLayout: this.snapLayout(),
220
- showResponse: this.showResponse(),
221
- showRawResponse: this.showRawResponse(),
222
- showQueryConfig: this.showQueryConfig(),
223
- showEntityStoreValue: this.showEntityStoreValue(),
224
- showArguments: this.showArguments(),
225
- selectedClientId: this.selectedClientId(),
226
- selectedQueryPath: this.selectedQueryId(),
227
- queryListMode: this.queryListMode(),
228
- viewMode: this.viewMode(),
229
- };
230
- window.localStorage.setItem('ethlete:query:devtools', JSON.stringify(devtoolConfig));
231
- }, { allowSignalWrites: true });
232
- const initialConfig = window.localStorage.getItem('ethlete:query:devtools');
233
- if (initialConfig) {
234
- const parsed = JSON.parse(initialConfig);
235
- this.isOpen.set(parsed.isOpen ?? false);
236
- this.isTranslucent.set(parsed.isTranslucent ?? false);
237
- this.snapLayout.set(parsed.snapLayout ?? 'full');
238
- this.showResponse.set(parsed.showResponse ?? false);
239
- this.showRawResponse.set(parsed.showRawResponse ?? false);
240
- this.showQueryConfig.set(parsed.showQueryConfig ?? false);
241
- this.showEntityStoreValue.set(parsed.showEntityStoreValue ?? false);
242
- this.showArguments.set(parsed.showArguments ?? false);
243
- this.selectedClientIdCtrl.setValue(parsed.selectedClientId ?? 0);
244
- this.selectedQueryId.set(parsed.selectedQueryPath ?? null);
245
- this.queryListMode.set(parsed.queryListMode ?? 'live');
246
- this.viewMode.set(parsed.viewMode ?? 'query');
247
- }
248
- }
249
- toggleOpen() {
250
- this.isOpen.set(!this.isOpen());
251
- }
252
- toggleTranslucent() {
253
- this.isTranslucent.set(!this.isTranslucent());
254
- }
255
- toggleShowResponse() {
256
- this.showResponse.set(!this.showResponse());
257
- nextFrame(() => {
258
- this._cdr.markForCheck();
259
- });
260
- }
261
- toggleShowQueryConfig() {
262
- this.showQueryConfig.set(!this.showQueryConfig());
263
- }
264
- toggleShowRawResponse() {
265
- this.showRawResponse.set(!this.showRawResponse());
266
- }
267
- toggleShowEntityStoreValue() {
268
- this.showEntityStoreValue.set(!this.showEntityStoreValue());
269
- }
270
- toggleShowArguments() {
271
- this.showArguments.set(!this.showArguments());
272
- }
273
- selectSnapLayout(layout) {
274
- this.snapLayout.set(layout);
275
- }
276
- selectQueryListMode(mode) {
277
- this.queryListMode.set(mode);
278
- }
279
- selectViewMode(mode) {
280
- this.viewMode.set(mode);
281
- }
282
- selectQuery(query) {
283
- this.selectedQueryId.set(query._id);
284
- }
285
- clearQueryHistory() {
286
- this.queryHistory$.next([]);
287
- }
288
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: QueryDevtoolsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
289
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.6", type: QueryDevtoolsComponent, isStandalone: true, selector: "et-query-devtools", host: { classAttribute: "et-query-devtools" }, ngImport: i0, template: "@if (!isOpen()) {\n <button (click)=\"toggleOpen()\" class=\"et-query-devtools-open-btn et-qd-chip\">Query Devtools</button>\n}\n\n@if (isOpen()) {\n <div\n [class.et-query-devtools-container--transparent]=\"isTranslucent()\"\n class=\"et-query-devtools-container et-query-devtools-container--snap-{{ snapLayout() }}\"\n >\n <header class=\"et-qd-header\">\n <h3 class=\"et-qd-header__title\">Query Devtools</h3>\n\n <div class=\"et-qd-header__select\">\n <label for=\"et-query-client-instance\">Client instance</label>\n <select [formControl]=\"selectedClientIdCtrl\" id=\"et-query-client-instance\">\n @for (clientConfig of queryClientConfigs; track trackByClient(i, clientConfig); let i = $index) {\n <option [value]=\"i\">\n {{ clientConfig.displayName ?? clientConfig.client.config.baseRoute }}\n </option>\n }\n </select>\n </div>\n\n <button (click)=\"toggleOpen()\" class=\"et-qd-btn et-qd-btn-secondary\">Close</button>\n </header>\n\n <div class=\"et-qd-sub-header\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !isTranslucent() }\"\n (click)=\"toggleTranslucent()\"\n class=\"et-qd-chip et-qd-translucent-clickable\"\n >\n Translucent\n </button>\n <div class=\"et-qd-sub-header__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'full' }\"\n (click)=\"selectSnapLayout('full')\"\n class=\"et-qd-chip\"\n >\n Fullscreen\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'top' }\"\n (click)=\"selectSnapLayout('top')\"\n class=\"et-qd-chip\"\n >\n Top\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'bottom' }\"\n (click)=\"selectSnapLayout('bottom')\"\n class=\"et-qd-chip\"\n >\n Bottom\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'left' }\"\n (click)=\"selectSnapLayout('left')\"\n class=\"et-qd-chip\"\n >\n Left\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'right' }\"\n (click)=\"selectSnapLayout('right')\"\n class=\"et-qd-chip\"\n >\n Right\n </button>\n </div>\n\n @if (selectedClientConfig(); as cfg) {\n <div class=\"et-qd-client\">\n <p class=\"et-qd-client__title\">{{ cfg.displayName ?? cfg.client.config.baseRoute }}</p>\n\n <div class=\"et-qd-client__actions\">\n <button (click)=\"cfg.client._store.refreshQueriesInUse()\" class=\"et-qd-chip\">Refresh all</button>\n <button (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true })\" class=\"et-qd-chip\">\n Refresh all (ignore caches)\n </button>\n <button\n (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true, purgeUnused: true })\"\n class=\"et-qd-chip\"\n >\n Refresh all (ignore caches & purge unused)\n </button>\n </div>\n </div>\n }\n\n @if (selectedClientConfig(); as cfg) {\n <div class=\"et-qd-queries\">\n <p class=\"et-qd-queries__title\">Inspector</p>\n <div class=\"et-qd-queries__actions\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'live' || viewMode() !== 'query' }\"\n (click)=\"selectQueryListMode('live'); selectViewMode('query')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Live Queries ({{ queries()?.length ?? 0 }})\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'history' || viewMode() !== 'query' }\"\n (click)=\"selectQueryListMode('history'); selectViewMode('query')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Query History ({{ (queryHistory$ | async)?.length ?? 0 }}/50)\n </button>\n @if (queryListMode() === 'history' && viewMode() === 'query') {\n <div class=\"et-qd-queries__divider\"></div>\n <button (click)=\"clearQueryHistory()\" class=\"et-qd-chip et-qd-chip-bordered\">Clear history</button>\n }\n\n <div class=\"et-qd-queries__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': viewMode() !== 'authProvider' }\"\n (click)=\"selectViewMode('authProvider')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Auth Provider\n </button>\n </div>\n\n @if (viewMode() === 'query') {\n <div class=\"et-qd-queries__browser\">\n @if (queryListMode() === 'live') {\n <ul class=\"et-qd-queries__browser-list\">\n @for (query of queries(); track trackByQuery($index, query)) {\n <li>\n <button\n [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\"\n (click)=\"selectQuery(query)\"\n >\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n }\n </ul>\n }\n @if (queryListMode() === 'history') {\n <ul class=\"et-qd-queries__browser-list\">\n @for (query of queryHistory$ | async; track trackByQuery($index, query)) {\n <li>\n <button\n [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\"\n (click)=\"selectQuery(query)\"\n >\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n }\n </ul>\n }\n <div class=\"et-qd-queries__browser-detail\">\n @if (selectedQuery(); as query) {\n <p class=\"et-qd-queries__browser-detail__title\">\n {{ query._queryConfig.method }} {{ query._routeWithParams }}\n </p>\n\n <div class=\"et-qd-queries__actions\">\n <button (click)=\"query.execute()\" class=\"et-qd-chip et-qd-chip-bordered\">Execute</button>\n <button (click)=\"query.execute({ skipCache: true })\" class=\"et-qd-chip et-qd-chip-bordered\">\n Execute (ignore cache)\n </button>\n\n <button (click)=\"query.abort()\" class=\"et-qd-chip et-qd-chip-bordered\">Abort</button>\n <div class=\"et-qd-queries__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !query.isPolling }\"\n (click)=\"query.poll({ interval: 5000, takeUntil: _destroy$ })\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Poll\n </button>\n\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': query.isPolling }\"\n (click)=\"query.stopPolling()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Stop polling\n </button>\n @if (query.isPolling || query._isPollingPaused) {\n <button (click)=\"query.pausePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Pause polling\n </button>\n <button (click)=\"query.resumePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Resume polling\n </button>\n }\n </div>\n\n <div class=\"et-qd-list\">\n <div class=\"et-qd-list-item\">\n <p>State type</p>\n <pre>{{ query.rawState.type }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Dependents</p>\n <pre>{{ query._dependents | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is expired</p>\n <pre>{{ query.isExpired }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is in use</p>\n <pre>{{ query.isInUse }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Subscriber count</p>\n <pre>{{ query._subscriberCount }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling</p>\n <pre>{{ query.isPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling paused</p>\n <pre>{{ query._isPollingPaused }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Enable smart polling</p>\n <pre>{{ query._enableSmartPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query store key</p>\n <pre>{{ query._queryStoreKey }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Arguments</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showArguments() }\"\n (click)=\"toggleShowArguments()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showArguments()) {\n <pre>{{ query._arguments | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>State</p>\n <p><i> Warning, this will cause a subscription if shown!</i></p>\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showResponse() }\"\n (click)=\"toggleShowResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showResponse()) {\n <pre>{{ query.state$ | async | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Raw state</p>\n <p><i> The query state unaffected by entity stores</i></p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showRawResponse() }\"\n (click)=\"toggleShowRawResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showRawResponse()) {\n <pre>{{ query.rawState | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query config</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showQueryConfig() }\"\n (click)=\"toggleShowQueryConfig()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showQueryConfig()) {\n <pre>{{ stringifiedQueryConfig() | json }}</pre>\n }\n </div>\n\n @if (!!query._queryConfig.entity) {\n <div class=\"et-qd-list-item\">\n <p>Entity store value</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showEntityStoreValue() }\"\n (click)=\"toggleShowEntityStoreValue()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showEntityStoreValue()) {\n <pre>{{ selectedQueryEntityStoreValue$ | async | json }}</pre>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n } @else if (viewMode() === 'authProvider') {\n <div class=\"et-qd-auth-provider__viewer\">\n @if (authProviderDetails(); as details) {\n <div class=\"et-qd-list\">\n <div class=\"et-qd-list-item\">\n <p>Type</p>\n <pre>{{ details.type }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Header value</p>\n <pre>{{ details.header() | json }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Config</p>\n <pre>{{ details.config | json }}</pre>\n </div>\n\n @if (details.type === 'BearerAuthProvider') {\n <div class=\"et-qd-list-item\">\n <p>Tokens</p>\n <pre>{{ details.provider.tokens$ | async | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Should refresh on unauthorized response</p>\n <pre>{{ details.provider.shouldRefreshOnUnauthorizedResponse }}</pre>\n </div>\n\n <ng-container\n *etQuery=\"\n details.provider.currentRefreshQuery$ | async as response;\n loading as loading;\n error as error;\n query as query\n \"\n >\n <div class=\"et-qd-list-item\">\n <p>Refresh query response</p>\n\n <div>\n <button (click)=\"details.provider._refreshQuery()\" class=\"et-qd-chip et-qd-chip-bordered\">\n Refresh\n </button>\n </div>\n <pre>{{ response | json }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Refresh query loading</p>\n <pre>{{ loading }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Refresh query error</p>\n <pre>{{ error ?? 'null' }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>State</p>\n <pre>{{ query?.state$ | async | json }}</pre>\n </div>\n </ng-container>\n }\n </div>\n } @else {\n <p>No auth provider set</p>\n }\n </div>\n }\n </div>\n }\n </div>\n}\n", styles: [":host{position:fixed;top:0;z-index:1000000;font-size:14px;color:#fff}.et-query-devtools-container{position:fixed;inset:0;background-color:#25292e;z-index:10000;overflow:auto;font-family:monospace;display:grid;grid-template-rows:auto auto auto minmax(0,1fr)}.et-query-devtools-container.et-query-devtools-container--transparent{opacity:.25;pointer-events:none}.et-query-devtools-container.et-query-devtools-container--transparent .et-query-devtools-translucent-btn{pointer-events:all}.et-query-devtools-container.et-query-devtools-container--snap-left{inset-inline-start:0;inset-block-start:0;inset-block-end:0;width:50%;border-right:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-right{inset-inline-start:unset;inset-inline-end:0;inset-block-start:0;inset-block-end:0;width:50%;border-left:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-top{inset-inline-start:0;inset-block-start:0;inset-inline-end:0;height:50%;border-bottom:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-bottom{inset-inline-start:0;inset-block-start:unset;inset-block-end:0;inset-inline-end:0;height:50%;border-top:1px solid rgb(37,41,46)}button.et-query-devtools-open-btn{position:fixed;inset-inline-end:20px;inset-block-end:0;z-index:9999;font-family:monospace;border-radius:3px 3px 0 0;line-height:14px;font-size:12px}.et-qd-header{background-color:#00ffa1;padding:12px;display:grid;grid-template-columns:1fr auto auto;gap:12px;align-items:center}.et-qd-header__title{color:#25292e;margin:0;font-size:22px}.et-qd-header__select{display:grid;background-color:#25292e;border-radius:10px;overflow:hidden}.et-qd-header__select select{width:250px;color:#fff;padding:3px 10px 2px;border:none;background-color:#25292e;font-family:monospace}.et-qd-header__select label{padding:3px 10px;color:#25292e;font-size:12px;font-weight:700;color:#fff;border-bottom:1px solid gray}.et-qd-sub-header{background-color:#00b371;padding:12px;display:flex;gap:12px;flex-wrap:wrap}.et-qd-sub-header__divider{width:1px;background-color:#25292e}.et-qd-btn{background-color:#00ffa1;color:#25292e;border:none;padding:12px;cursor:pointer;font-size:14px;font-weight:700;text-align:center;text-decoration:none;display:inline-block;width:100%;transition:all .3s ease-in-out;font-family:monospace;border-radius:10px}.et-qd-btn:hover{background-color:#00cc81}.et-qd-btn.et-qd-btn-secondary{background-color:#25292e;color:#00ffa1}.et-qd-btn.et-qd-btn-secondary:hover{background-color:#3c424a}.et-qd-chip{background-color:#00ffa1;color:#25292e;border:none;padding:4px 9px;cursor:pointer;font-size:12px;font-weight:700;text-align:center;text-decoration:none;display:inline-block;transition:all .3s ease-in-out;font-family:monospace;border-radius:10px}.et-qd-chip:hover{background-color:#00cc81}.et-qd-chip.et-qd-chip-secondary{background-color:#25292e;color:#00ffa1}.et-qd-chip.et-qd-chip-secondary:hover{background-color:#3c424a}.et-qd-chip.et-qd-chip-bordered{border:1px solid rgb(0,255,161)}.et-qd-translucent-clickable{pointer-events:all}.et-qd-client{border-bottom:1px solid #3c424a;padding:12px}.et-qd-client__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-client__actions{display:flex;gap:12px;margin-top:12px}.et-qd-queries{padding:12px;display:grid;grid-template-rows:auto auto minmax(0,1fr)}.et-qd-queries__actions{display:flex;gap:12px;margin-top:12px;margin-bottom:16px}.et-qd-queries__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-queries__divider{width:1px;background-color:#3c424a}.et-qd-queries__browser{display:grid;grid-template-columns:1fr minmax(0,3fr);margin-left:-12px;margin-right:-12px;border-top:1px solid #3c424a;margin-bottom:-12px}.et-qd-queries__browser-list{border-right:1px solid #3c424a;list-style:none;padding:0;margin:0;display:grid;grid-auto-flow:row;grid-auto-rows:55px;overflow-y:auto;overflow-x:hidden}.et-qd-queries__browser-list li{margin:0}.et-qd-queries__browser-list li button{all:unset;font-family:monospace;box-sizing:border-box;width:100%;border:none;border-bottom:1px solid #3c424a;background-color:#25292e;color:#fff;text-align:left;padding:12px;height:100%;transition:all .3s ease-in-out;cursor:pointer;display:grid;grid-template-columns:auto minmax(0,1fr);gap:2px;display:block}.et-qd-queries__browser-list li button span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.et-qd-queries__browser-list li button span:first-of-type{font-weight:700}.et-qd-queries__browser-list li button:hover,.et-qd-queries__browser-list li button.et-qd-query--active{background-color:#30363c}.et-qd-queries__browser-detail{padding:12px;overflow-y:auto;overflow-x:hidden}.et-qd-queries__browser-detail__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-auth-provider__viewer{border-top:1px solid #3c424a;margin-left:-12px;margin-right:-12px;margin-bottom:-12px;padding:12px;overflow-y:auto;overflow-x:hidden}.et-qd-list{display:grid;gap:12px}.et-qd-list-item{display:grid}.et-qd-list-item p{font-weight:700;margin:0;padding-bottom:8px}.et-qd-list-item p+p{margin-top:-8px}.et-qd-list-item div+pre{margin-top:8px}.et-qd-list-item pre{margin:0;padding:4px;background-color:#0e1012;border-radius:4px;max-height:450px;overflow:auto}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: QueryShortNamePipe, name: "queryShortName" }, { kind: "directive", type: QueryDirective, selector: "[etQuery]", inputs: ["etQuery", "etQueryCache"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.ShadowDom }); }
290
- }
291
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: QueryDevtoolsComponent, decorators: [{
292
- type: Component,
293
- args: [{ selector: 'et-query-devtools', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.ShadowDom, host: {
294
- class: 'et-query-devtools',
295
- }, imports: [AsyncPipe, JsonPipe, ReactiveFormsModule, NgClass, QueryShortNamePipe, QueryDirective], template: "@if (!isOpen()) {\n <button (click)=\"toggleOpen()\" class=\"et-query-devtools-open-btn et-qd-chip\">Query Devtools</button>\n}\n\n@if (isOpen()) {\n <div\n [class.et-query-devtools-container--transparent]=\"isTranslucent()\"\n class=\"et-query-devtools-container et-query-devtools-container--snap-{{ snapLayout() }}\"\n >\n <header class=\"et-qd-header\">\n <h3 class=\"et-qd-header__title\">Query Devtools</h3>\n\n <div class=\"et-qd-header__select\">\n <label for=\"et-query-client-instance\">Client instance</label>\n <select [formControl]=\"selectedClientIdCtrl\" id=\"et-query-client-instance\">\n @for (clientConfig of queryClientConfigs; track trackByClient(i, clientConfig); let i = $index) {\n <option [value]=\"i\">\n {{ clientConfig.displayName ?? clientConfig.client.config.baseRoute }}\n </option>\n }\n </select>\n </div>\n\n <button (click)=\"toggleOpen()\" class=\"et-qd-btn et-qd-btn-secondary\">Close</button>\n </header>\n\n <div class=\"et-qd-sub-header\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !isTranslucent() }\"\n (click)=\"toggleTranslucent()\"\n class=\"et-qd-chip et-qd-translucent-clickable\"\n >\n Translucent\n </button>\n <div class=\"et-qd-sub-header__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'full' }\"\n (click)=\"selectSnapLayout('full')\"\n class=\"et-qd-chip\"\n >\n Fullscreen\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'top' }\"\n (click)=\"selectSnapLayout('top')\"\n class=\"et-qd-chip\"\n >\n Top\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'bottom' }\"\n (click)=\"selectSnapLayout('bottom')\"\n class=\"et-qd-chip\"\n >\n Bottom\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'left' }\"\n (click)=\"selectSnapLayout('left')\"\n class=\"et-qd-chip\"\n >\n Left\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'right' }\"\n (click)=\"selectSnapLayout('right')\"\n class=\"et-qd-chip\"\n >\n Right\n </button>\n </div>\n\n @if (selectedClientConfig(); as cfg) {\n <div class=\"et-qd-client\">\n <p class=\"et-qd-client__title\">{{ cfg.displayName ?? cfg.client.config.baseRoute }}</p>\n\n <div class=\"et-qd-client__actions\">\n <button (click)=\"cfg.client._store.refreshQueriesInUse()\" class=\"et-qd-chip\">Refresh all</button>\n <button (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true })\" class=\"et-qd-chip\">\n Refresh all (ignore caches)\n </button>\n <button\n (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true, purgeUnused: true })\"\n class=\"et-qd-chip\"\n >\n Refresh all (ignore caches & purge unused)\n </button>\n </div>\n </div>\n }\n\n @if (selectedClientConfig(); as cfg) {\n <div class=\"et-qd-queries\">\n <p class=\"et-qd-queries__title\">Inspector</p>\n <div class=\"et-qd-queries__actions\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'live' || viewMode() !== 'query' }\"\n (click)=\"selectQueryListMode('live'); selectViewMode('query')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Live Queries ({{ queries()?.length ?? 0 }})\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'history' || viewMode() !== 'query' }\"\n (click)=\"selectQueryListMode('history'); selectViewMode('query')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Query History ({{ (queryHistory$ | async)?.length ?? 0 }}/50)\n </button>\n @if (queryListMode() === 'history' && viewMode() === 'query') {\n <div class=\"et-qd-queries__divider\"></div>\n <button (click)=\"clearQueryHistory()\" class=\"et-qd-chip et-qd-chip-bordered\">Clear history</button>\n }\n\n <div class=\"et-qd-queries__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': viewMode() !== 'authProvider' }\"\n (click)=\"selectViewMode('authProvider')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Auth Provider\n </button>\n </div>\n\n @if (viewMode() === 'query') {\n <div class=\"et-qd-queries__browser\">\n @if (queryListMode() === 'live') {\n <ul class=\"et-qd-queries__browser-list\">\n @for (query of queries(); track trackByQuery($index, query)) {\n <li>\n <button\n [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\"\n (click)=\"selectQuery(query)\"\n >\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n }\n </ul>\n }\n @if (queryListMode() === 'history') {\n <ul class=\"et-qd-queries__browser-list\">\n @for (query of queryHistory$ | async; track trackByQuery($index, query)) {\n <li>\n <button\n [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\"\n (click)=\"selectQuery(query)\"\n >\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n }\n </ul>\n }\n <div class=\"et-qd-queries__browser-detail\">\n @if (selectedQuery(); as query) {\n <p class=\"et-qd-queries__browser-detail__title\">\n {{ query._queryConfig.method }} {{ query._routeWithParams }}\n </p>\n\n <div class=\"et-qd-queries__actions\">\n <button (click)=\"query.execute()\" class=\"et-qd-chip et-qd-chip-bordered\">Execute</button>\n <button (click)=\"query.execute({ skipCache: true })\" class=\"et-qd-chip et-qd-chip-bordered\">\n Execute (ignore cache)\n </button>\n\n <button (click)=\"query.abort()\" class=\"et-qd-chip et-qd-chip-bordered\">Abort</button>\n <div class=\"et-qd-queries__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !query.isPolling }\"\n (click)=\"query.poll({ interval: 5000, takeUntil: _destroy$ })\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Poll\n </button>\n\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': query.isPolling }\"\n (click)=\"query.stopPolling()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Stop polling\n </button>\n @if (query.isPolling || query._isPollingPaused) {\n <button (click)=\"query.pausePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Pause polling\n </button>\n <button (click)=\"query.resumePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Resume polling\n </button>\n }\n </div>\n\n <div class=\"et-qd-list\">\n <div class=\"et-qd-list-item\">\n <p>State type</p>\n <pre>{{ query.rawState.type }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Dependents</p>\n <pre>{{ query._dependents | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is expired</p>\n <pre>{{ query.isExpired }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is in use</p>\n <pre>{{ query.isInUse }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Subscriber count</p>\n <pre>{{ query._subscriberCount }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling</p>\n <pre>{{ query.isPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling paused</p>\n <pre>{{ query._isPollingPaused }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Enable smart polling</p>\n <pre>{{ query._enableSmartPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query store key</p>\n <pre>{{ query._queryStoreKey }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Arguments</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showArguments() }\"\n (click)=\"toggleShowArguments()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showArguments()) {\n <pre>{{ query._arguments | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>State</p>\n <p><i> Warning, this will cause a subscription if shown!</i></p>\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showResponse() }\"\n (click)=\"toggleShowResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showResponse()) {\n <pre>{{ query.state$ | async | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Raw state</p>\n <p><i> The query state unaffected by entity stores</i></p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showRawResponse() }\"\n (click)=\"toggleShowRawResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showRawResponse()) {\n <pre>{{ query.rawState | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query config</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showQueryConfig() }\"\n (click)=\"toggleShowQueryConfig()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showQueryConfig()) {\n <pre>{{ stringifiedQueryConfig() | json }}</pre>\n }\n </div>\n\n @if (!!query._queryConfig.entity) {\n <div class=\"et-qd-list-item\">\n <p>Entity store value</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showEntityStoreValue() }\"\n (click)=\"toggleShowEntityStoreValue()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showEntityStoreValue()) {\n <pre>{{ selectedQueryEntityStoreValue$ | async | json }}</pre>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n } @else if (viewMode() === 'authProvider') {\n <div class=\"et-qd-auth-provider__viewer\">\n @if (authProviderDetails(); as details) {\n <div class=\"et-qd-list\">\n <div class=\"et-qd-list-item\">\n <p>Type</p>\n <pre>{{ details.type }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Header value</p>\n <pre>{{ details.header() | json }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Config</p>\n <pre>{{ details.config | json }}</pre>\n </div>\n\n @if (details.type === 'BearerAuthProvider') {\n <div class=\"et-qd-list-item\">\n <p>Tokens</p>\n <pre>{{ details.provider.tokens$ | async | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Should refresh on unauthorized response</p>\n <pre>{{ details.provider.shouldRefreshOnUnauthorizedResponse }}</pre>\n </div>\n\n <ng-container\n *etQuery=\"\n details.provider.currentRefreshQuery$ | async as response;\n loading as loading;\n error as error;\n query as query\n \"\n >\n <div class=\"et-qd-list-item\">\n <p>Refresh query response</p>\n\n <div>\n <button (click)=\"details.provider._refreshQuery()\" class=\"et-qd-chip et-qd-chip-bordered\">\n Refresh\n </button>\n </div>\n <pre>{{ response | json }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Refresh query loading</p>\n <pre>{{ loading }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Refresh query error</p>\n <pre>{{ error ?? 'null' }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>State</p>\n <pre>{{ query?.state$ | async | json }}</pre>\n </div>\n </ng-container>\n }\n </div>\n } @else {\n <p>No auth provider set</p>\n }\n </div>\n }\n </div>\n }\n </div>\n}\n", styles: [":host{position:fixed;top:0;z-index:1000000;font-size:14px;color:#fff}.et-query-devtools-container{position:fixed;inset:0;background-color:#25292e;z-index:10000;overflow:auto;font-family:monospace;display:grid;grid-template-rows:auto auto auto minmax(0,1fr)}.et-query-devtools-container.et-query-devtools-container--transparent{opacity:.25;pointer-events:none}.et-query-devtools-container.et-query-devtools-container--transparent .et-query-devtools-translucent-btn{pointer-events:all}.et-query-devtools-container.et-query-devtools-container--snap-left{inset-inline-start:0;inset-block-start:0;inset-block-end:0;width:50%;border-right:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-right{inset-inline-start:unset;inset-inline-end:0;inset-block-start:0;inset-block-end:0;width:50%;border-left:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-top{inset-inline-start:0;inset-block-start:0;inset-inline-end:0;height:50%;border-bottom:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-bottom{inset-inline-start:0;inset-block-start:unset;inset-block-end:0;inset-inline-end:0;height:50%;border-top:1px solid rgb(37,41,46)}button.et-query-devtools-open-btn{position:fixed;inset-inline-end:20px;inset-block-end:0;z-index:9999;font-family:monospace;border-radius:3px 3px 0 0;line-height:14px;font-size:12px}.et-qd-header{background-color:#00ffa1;padding:12px;display:grid;grid-template-columns:1fr auto auto;gap:12px;align-items:center}.et-qd-header__title{color:#25292e;margin:0;font-size:22px}.et-qd-header__select{display:grid;background-color:#25292e;border-radius:10px;overflow:hidden}.et-qd-header__select select{width:250px;color:#fff;padding:3px 10px 2px;border:none;background-color:#25292e;font-family:monospace}.et-qd-header__select label{padding:3px 10px;color:#25292e;font-size:12px;font-weight:700;color:#fff;border-bottom:1px solid gray}.et-qd-sub-header{background-color:#00b371;padding:12px;display:flex;gap:12px;flex-wrap:wrap}.et-qd-sub-header__divider{width:1px;background-color:#25292e}.et-qd-btn{background-color:#00ffa1;color:#25292e;border:none;padding:12px;cursor:pointer;font-size:14px;font-weight:700;text-align:center;text-decoration:none;display:inline-block;width:100%;transition:all .3s ease-in-out;font-family:monospace;border-radius:10px}.et-qd-btn:hover{background-color:#00cc81}.et-qd-btn.et-qd-btn-secondary{background-color:#25292e;color:#00ffa1}.et-qd-btn.et-qd-btn-secondary:hover{background-color:#3c424a}.et-qd-chip{background-color:#00ffa1;color:#25292e;border:none;padding:4px 9px;cursor:pointer;font-size:12px;font-weight:700;text-align:center;text-decoration:none;display:inline-block;transition:all .3s ease-in-out;font-family:monospace;border-radius:10px}.et-qd-chip:hover{background-color:#00cc81}.et-qd-chip.et-qd-chip-secondary{background-color:#25292e;color:#00ffa1}.et-qd-chip.et-qd-chip-secondary:hover{background-color:#3c424a}.et-qd-chip.et-qd-chip-bordered{border:1px solid rgb(0,255,161)}.et-qd-translucent-clickable{pointer-events:all}.et-qd-client{border-bottom:1px solid #3c424a;padding:12px}.et-qd-client__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-client__actions{display:flex;gap:12px;margin-top:12px}.et-qd-queries{padding:12px;display:grid;grid-template-rows:auto auto minmax(0,1fr)}.et-qd-queries__actions{display:flex;gap:12px;margin-top:12px;margin-bottom:16px}.et-qd-queries__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-queries__divider{width:1px;background-color:#3c424a}.et-qd-queries__browser{display:grid;grid-template-columns:1fr minmax(0,3fr);margin-left:-12px;margin-right:-12px;border-top:1px solid #3c424a;margin-bottom:-12px}.et-qd-queries__browser-list{border-right:1px solid #3c424a;list-style:none;padding:0;margin:0;display:grid;grid-auto-flow:row;grid-auto-rows:55px;overflow-y:auto;overflow-x:hidden}.et-qd-queries__browser-list li{margin:0}.et-qd-queries__browser-list li button{all:unset;font-family:monospace;box-sizing:border-box;width:100%;border:none;border-bottom:1px solid #3c424a;background-color:#25292e;color:#fff;text-align:left;padding:12px;height:100%;transition:all .3s ease-in-out;cursor:pointer;display:grid;grid-template-columns:auto minmax(0,1fr);gap:2px;display:block}.et-qd-queries__browser-list li button span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.et-qd-queries__browser-list li button span:first-of-type{font-weight:700}.et-qd-queries__browser-list li button:hover,.et-qd-queries__browser-list li button.et-qd-query--active{background-color:#30363c}.et-qd-queries__browser-detail{padding:12px;overflow-y:auto;overflow-x:hidden}.et-qd-queries__browser-detail__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-auth-provider__viewer{border-top:1px solid #3c424a;margin-left:-12px;margin-right:-12px;margin-bottom:-12px;padding:12px;overflow-y:auto;overflow-x:hidden}.et-qd-list{display:grid;gap:12px}.et-qd-list-item{display:grid}.et-qd-list-item p{font-weight:700;margin:0;padding-bottom:8px}.et-qd-list-item p+p{margin-top:-8px}.et-qd-list-item div+pre{margin-top:8px}.et-qd-list-item pre{margin:0;padding:4px;background-color:#0e1012;border-radius:4px;max-height:450px;overflow:auto}\n"] }]
296
- }], ctorParameters: () => [] });
297
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZGV2dG9vbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RldnRvb2xzL2NvbXBvbmVudHMvcXVlcnktZGV2dG9vbHMvcXVlcnktZGV2dG9vbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RldnRvb2xzL2NvbXBvbmVudHMvcXVlcnktZGV2dG9vbHMvcXVlcnktZGV2dG9vbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0QsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUVULGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHdCQUF3QixFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxP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QUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRVMsbUJBQW1CLENBQUMsSUFBbUI7UUFDL0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVTLGNBQWMsQ0FBQyxJQUFtQjtRQUMxQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRVMsV0FBVyxDQUFDLEtBQWU7UUFDbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFUyxpQkFBaUI7UUFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUIsQ0FBQzs4R0FoWVUsc0JBQXNCO2tHQUF0QixzQkFBc0IsNEhDekNuQyxtdmZBa1pBLDhzS0QzV1ksU0FBUyx5Q0FBRSxRQUFRLDRDQUFFLG1CQUFtQixxdEJBQUUsT0FBTywrRUFBRSxrQkFBa0IsdURBQUUsY0FBYzs7MkZBRXBGLHNCQUFzQjtrQkFibEMsU0FBUzsrQkFDRSxtQkFBbUIsY0FHakIsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxTQUFTLFFBRXBDO3dCQUNKLEtBQUssRUFBRSxtQkFBbUI7cUJBQzNCLFdBQ1EsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUsIEpzb25QaXBlLCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBUcmFja0J5RnVuY3Rpb24sXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIHNpZ25hbCxcbiAgdW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgY3JlYXRlRGVzdHJveSwgbmV4dEZyYW1lIH0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG1hcCwgb2YsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQmFzaWNBdXRoUHJvdmlkZXIsIEN1c3RvbUhlYWRlckF1dGhQcm92aWRlciwgaXNCZWFyZXJBdXRoUHJvdmlkZXIgfSBmcm9tICcuLi8uLi8uLi9hdXRoJztcbmltcG9ydCB7IFF1ZXJ5RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBFbnRpdHlTdG9yZSB9IGZyb20gJy4uLy4uLy4uL2VudGl0eSc7XG5pbXBvcnQgeyBBbnlRdWVyeSwgaXNHcWxRdWVyeUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL3F1ZXJ5JztcbmltcG9ydCB7IFF1ZXJ5U2hvcnROYW1lUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzJztcbmltcG9ydCB7IFFVRVJZX0NMSUVOVF9ERVZUT09MU19UT0tFTiwgUXVlcnlDbGllbnREZXZ0b29sc09wdGlvbnMgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbnR5cGUgUXVlcnlEZXZ0b29sc1NuYXBMYXlvdXQgPSAnZnVsbCcgfCAnbGVmdCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgfCAndG9wJztcbnR5cGUgUXVlcnlMaXN0TW9kZSA9ICdsaXZlJyB8ICdoaXN0b3J5JztcbnR5cGUgUXVlcnlWaWV3TW9kZSA9ICdxdWVyeScgfCAnYXV0aFByb3ZpZGVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZXQtcXVlcnktZGV2dG9vbHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vcXVlcnktZGV2dG9vbHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9xdWVyeS1kZXZ0b29scy5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uU2hhZG93RG9tLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWhvc3QtbWV0YWRhdGEtcHJvcGVydHlcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZXQtcXVlcnktZGV2dG9vbHMnLFxuICB9LFxuICBpbXBvcnRzOiBbQXN5bmNQaXBlLCBKc29uUGlwZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgTmdDbGFzcywgUXVlcnlTaG9ydE5hbWVQaXBlLCBRdWVyeURpcmVjdGl2ZV0sXG59KVxuZXhwb3J0IGNsYXNzIFF1ZXJ5RGV2dG9vbHNDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2Rlc3Ryb3kkID0gY3JlYXRlRGVzdHJveSgpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBxdWVyeUNsaWVudENvbmZpZ3MgPSBpbmplY3QoUVVFUllfQ0xJRU5UX0RFVlRPT0xTX1RPS0VOKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNPcGVuID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzVHJhbnNsdWNlbnQgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc25hcExheW91dCA9IHNpZ25hbDxRdWVyeURldnRvb2xzU25hcExheW91dD4oJ2Z1bGwnKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHF1ZXJ5TGlzdE1vZGUgPSBzaWduYWw8UXVlcnlMaXN0TW9kZT4oJ2xpdmUnKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHZpZXdNb2RlID0gc2lnbmFsPFF1ZXJ5Vmlld01vZGU+KCdxdWVyeScpO1xuXG4gIHByb3RlY3RlZCBzaG93UmVzcG9uc2UgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgc2hvd1Jhd1Jlc3BvbnNlID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIHNob3dRdWVyeUNvbmZpZyA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBzaG93RW50aXR5U3RvcmVWYWx1ZSA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBzaG93QXJndW1lbnRzID0gc2lnbmFsKGZhbHNlKTtcblxuICBwcm90ZWN0ZWQgc2VsZWN0ZWRDbGllbnRJZEN0cmwgPSBuZXcgRm9ybUNvbnRyb2woMCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkQ2xpZW50SWQgPSB0b1NpZ25hbChcbiAgICB0aGlzLnNlbGVjdGVkQ2xpZW50SWRDdHJsLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLnNlbGVjdGVkQ2xpZW50SWRDdHJsLnZhbHVlKSksXG4gICk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZFF1ZXJ5SWQgPSBzaWduYWw8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkQ2xpZW50Q29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICh0aGlzLnF1ZXJ5Q2xpZW50Q29uZmlncy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1ZXJ5Q2xpZW50Q29uZmlnc1swXSE7XG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkQ2xpZW50SWQoKSA/PyAwO1xuXG4gICAgY29uc3QgY2ZnID0gdGhpcy5xdWVyeUNsaWVudENvbmZpZ3NbaW5kZXhdO1xuXG4gICAgaWYgKCFjZmcpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1ZXJ5Q2xpZW50Q29uZmlnc1swXSE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNmZztcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHF1ZXJ5U3RvcmUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5zZWxlY3RlZENsaWVudENvbmZpZygpO1xuXG4gICAgcmV0dXJuIGNvbmZpZy5jbGllbnQuX3N0b3JlO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcXVlcnlTdG9yZSQgPSB0b09ic2VydmFibGUodGhpcy5xdWVyeVN0b3JlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9xdWVyaWVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QW55UXVlcnlbXT4oW10pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcXVlcmllcyA9IHRvU2lnbmFsKHRoaXMuX3F1ZXJpZXMkKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRRdWVyeSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBpZCA9IHRoaXMuc2VsZWN0ZWRRdWVyeUlkKCk7XG4gICAgY29uc3QgbW9kZSA9IHRoaXMucXVlcnlMaXN0TW9kZSgpO1xuXG4gICAgaWYgKGlkID09PSBudWxsIHx8ICFtb2RlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobW9kZSA9PT0gJ2xpdmUnKSB7XG4gICAgICByZXR1cm4gdGhpcy5xdWVyaWVzKCk/LmZpbmQoKHEpID0+IHEuX2lkID09PSBpZCkgPz8gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5xdWVyeUhpc3RvcnkkLmdldFZhbHVlKCk/LmZpbmQoKHEpID0+IHEuX2lkID09PSBpZCkgPz8gbnVsbDtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkUXVlcnkkID0gdG9PYnNlcnZhYmxlKHRoaXMuc2VsZWN0ZWRRdWVyeSk7XG5cbiAgcHJvdGVjdGVkIHNlbGVjdGVkUXVlcnlFbnRpdHlTdG9yZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuc2VsZWN0ZWRRdWVyeSgpO1xuXG4gICAgaWYgKCFxdWVyeSkgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gcXVlcnkuc3RvcmUgYXMgRW50aXR5U3RvcmU8dW5rbm93bj4gfCBudWxsO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRRdWVyeUVudGl0eVN0b3JlJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnNlbGVjdGVkUXVlcnlFbnRpdHlTdG9yZSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkUXVlcnlFbnRpdHlTdG9yZVZhbHVlJCA9IHRoaXMuc2VsZWN0ZWRRdWVyeUVudGl0eVN0b3JlJC5waXBlKFxuICAgIHN3aXRjaE1hcChcbiAgICAgIChzKSA9PlxuICAgICAgICBzPy5fY2hhbmdlJC5waXBlKFxuICAgICAgICAgIHN0YXJ0V2l0aCgnJyksXG4gICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgIGlmICghcy5fZGljdGlvbmFyeSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKHMuX2RpY3Rpb25hcnkpLnJlZHVjZShcbiAgICAgICAgICAgICAgKG9iaiwgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSksXG4gICAgICAgICkgPz8gb2YobnVsbCksXG4gICAgKSxcbiAgKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcXVlcnlIaXN0b3J5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QW55UXVlcnlbXT4oW10pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBzdHJpbmdpZmllZFF1ZXJ5Q29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5zZWxlY3RlZFF1ZXJ5KCk7XG5cbiAgICBpZiAoIXF1ZXJ5KSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGNmZyA9IHF1ZXJ5Ll9xdWVyeUNvbmZpZztcbiAgICBjb25zdCByb3V0ZSA9XG4gICAgICB0eXBlb2YgY2ZnLnJvdXRlID09PSAnc3RyaW5nJyA/IGNmZy5yb3V0ZSA6IGNmZy5yb3V0ZSA/IGNmZy5yb3V0ZSh7fSkucmVwbGFjZSgvdW5kZWZpbmVkL2csICc6cGFyYW0nKSA6IG51bGw7XG5cbiAgICBjb25zdCBzaGFyZWRDZmcgPSB7XG4gICAgICBtZXRob2Q6IGNmZy5tZXRob2QsXG4gICAgICBzZWN1cmU6IGNmZy5zZWN1cmUsXG4gICAgICByb3V0ZSxcbiAgICAgIHJlcG9ydFByb2dyZXNzOiBjZmcucmVwb3J0UHJvZ3Jlc3MsXG4gICAgICByZXNwb25zZVR5cGU6IGNmZy5yZXNwb25zZVR5cGUsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IGNmZy53aXRoQ3JlZGVudGlhbHMsXG4gICAgICBhdXRvUmVmcmVzaE9uOiBjZmcuYXV0b1JlZnJlc2hPbixcbiAgICAgIGVuYWJsZVNtYXJ0UG9sbGluZzogY2ZnLmVuYWJsZVNtYXJ0UG9sbGluZyxcbiAgICAgIGhhc0VudGl0eVN0b3JlOiAhIWNmZy5lbnRpdHksXG4gICAgfTtcblxuICAgIGlmIChpc0dxbFF1ZXJ5Q29uZmlnKGNmZykpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnNoYXJlZENmZyxcbiAgICAgICAgcXVlcnk6IGNmZy5xdWVyeSxcbiAgICAgICAgdHJhbnNmZXJWaWE6IGNmZy50cmFuc2ZlclZpYSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnNoYXJlZENmZyxcbiAgICB9O1xuICB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXV0aFByb3ZpZGVyID0gdG9TaWduYWwoXG4gICAgdG9PYnNlcnZhYmxlKHRoaXMuc2VsZWN0ZWRDbGllbnRDb25maWcpLnBpcGUoc3dpdGNoTWFwKChjKSA9PiBjLmNsaWVudC5hdXRoUHJvdmlkZXIkKSksXG4gICk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGF1dGhQcm92aWRlckRldGFpbHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmF1dGhQcm92aWRlcigpO1xuXG4gICAgaWYgKCFwcm92aWRlcikgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAocHJvdmlkZXIgaW5zdGFuY2VvZiBDdXN0b21IZWFkZXJBdXRoUHJvdmlkZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdDdXN0b21IZWFkZXJBdXRoUHJvdmlkZXInLFxuICAgICAgICBoZWFkZXI6ICgpID0+IHByb3ZpZGVyLmhlYWRlcixcbiAgICAgICAgcHJvdmlkZXI6IHByb3ZpZGVyLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICBuYW1lOiBwcm92aWRlci5fY29uZmlnLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHByb3ZpZGVyLl9jb25maWcudmFsdWUsXG4gICAgICAgIH0sXG4gICAgICB9IGFzIGNvbnN0O1xuICAgIH0gZWxzZSBpZiAocHJvdmlkZXIgaW5zdGFuY2VvZiBCYXNpY0F1dGhQcm92aWRlcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ0Jhc2ljQXV0aFByb3ZpZGVyJyxcbiAgICAgICAgaGVhZGVyOiAoKSA9PiBwcm92aWRlci5oZWFkZXIsXG4gICAgICAgIHByb3ZpZGVyOiBwcm92aWRlcixcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgdXNlcm5hbWU6IHByb3ZpZGVyLl9jb25maWcudXNlcm5hbWUsXG4gICAgICAgICAgcGFzc3dvcmQ6IHByb3ZpZGVyLl9jb25maWcucGFzc3dvcmQsXG4gICAgICAgIH0sXG4gICAgICB9IGFzIGNvbnN0O1xuICAgIH0gZWxzZSBpZiAoaXNCZWFyZXJBdXRoUHJvdmlkZXIocHJvdmlkZXIpKSB7XG4gICAgICBjb25zdCByZWZyZXNoQ2ZnID0gcHJvdmlkZXIuX2NvbmZpZy5yZWZyZXNoQ29uZmlnO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnQmVhcmVyQXV0aFByb3ZpZGVyJyxcbiAgICAgICAgaGVhZGVyOiAoKSA9PiBwcm92aWRlci5oZWFkZXIsXG4gICAgICAgIHByb3ZpZGVyOiBwcm92aWRlcixcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgdG9rZW46IHByb3ZpZGVyLl9jb25maWcudG9rZW4sXG4gICAgICAgICAgcmVmcmVzaENvbmZpZzoge1xuICAgICAgICAgICAgcmVmcmVzaE9uVW5hdXRob3JpemVkUmVzcG9uc2U6IHJlZnJlc2hDZmc/LnJlZnJlc2hPblVuYXV0aG9yaXplZFJlc3BvbnNlID8/ICd0cnVlIChkZWZhdWx0KScsXG4gICAgICAgICAgICB0b2tlbjogcmVmcmVzaENmZz8udG9rZW4sXG4gICAgICAgICAgICBjb29raWVOYW1lOiByZWZyZXNoQ2ZnPy5jb29raWVOYW1lLFxuICAgICAgICAgICAgY29va2llRG9tYWluOiByZWZyZXNoQ2ZnPy5jb29raWVEb21haW4gPz8gJ2N1cnJlbnQgb3JpZ2luIChkZWZhdWx0KScsXG4gICAgICAgICAgICBjb29raWVFeHBpcmVzSW5EYXlzOiByZWZyZXNoQ2ZnPy5jb29raWVFeHBpcmVzSW5EYXlzID8/ICczMCAoZGVmYXVsdCknLFxuICAgICAgICAgICAgY29va2llUGF0aDogcmVmcmVzaENmZz8uY29va2llUGF0aCA/PyAnLyAoZGVmYXVsdCknLFxuICAgICAgICAgICAgY29va2llRW5hYmxlZDogcmVmcmVzaENmZz8uY29va2llRW5hYmxlZCA/PyAndHJ1ZSAoZGVmYXVsdCknLFxuICAgICAgICAgICAgY29va2llU2FtZVNpdGU6IHJlZnJlc2hDZmc/LmNvb2tpZVNhbWVTaXRlID8/ICdsYXggKGRlZmF1bHQpJyxcbiAgICAgICAgICAgIHJlZnJlc2hCdWZmZXI6IHJlZnJlc2hDZmc/LnJlZnJlc2hCdWZmZXIgPz8gJzMwMDAwIChkZWZhdWx0KScsXG4gICAgICAgICAgICBleHBpcmVzSW5Qcm9wZXJ0eU5hbWU6IHJlZnJlc2hDZmc/LmV4cGlyZXNJblByb3BlcnR5TmFtZSA/PyAnZXhwIChkZWZhdWx0KScsXG4gICAgICAgICAgICBzdHJhdGVneTogcmVmcmVzaENmZz8uc3RyYXRlZ3kgPz8gJ0F1dGhCZWFyZXJSZWZyZXNoU3RyYXRlZ3kuQmVmb3JlRXhwaXJhdGlvbiAoZGVmYXVsdCknLFxuICAgICAgICAgICAgcmVxdWVzdEFyZ3NBZGFwdGVyOiByZWZyZXNoQ2ZnPy5yZXF1ZXN0QXJnc0FkYXB0ZXIgPyAnY3VzdG9tJyA6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgIHJlc3BvbnNlQWRhcHRlcjogcmVmcmVzaENmZz8ucmVzcG9uc2VBZGFwdGVyID8gJ2N1c3RvbScgOiAnZGVmYXVsdCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0gYXMgY29uc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdVbmtub3duQXV0aFByb3ZpZGVyJyxcbiAgICAgICAgaGVhZGVyOiAoKSA9PiBwcm92aWRlci5oZWFkZXIsXG4gICAgICAgIHByb3ZpZGVyOiBwcm92aWRlcixcbiAgICAgICAgY29uZmlnOiB7fSxcbiAgICAgIH0gYXMgY29uc3Q7XG4gICAgfVxuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ2xpZW50SWRDdHJsLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLmNsZWFyUXVlcnlIaXN0b3J5KCkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5zZWxlY3RlZFF1ZXJ5JFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocSkgPT4gcT8uX2RlcGVuZGVudHNDaGFuZ2VkJCA/PyBvZihudWxsKSksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCkpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRvT2JzZXJ2YWJsZSh0aGlzLmF1dGhQcm92aWRlckRldGFpbHMpXG4gICAgICAucGlwZShzd2l0Y2hNYXAoKGFwKSA9PiAoYXA/LnR5cGUgPT09ICdCZWFyZXJBdXRoUHJvdmlkZXInID8gYXAucHJvdmlkZXIudG9rZW5zJCA6IG9mKG51bGwpKSkpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5xdWVyeVN0b3JlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocykgPT5cbiAgICAgICAgICBzLnN0b3JlQ2hhbmdlJC5waXBlKFxuICAgICAgICAgICAgc3RhcnRXaXRoKCcnKSxcbiAgICAgICAgICAgIG1hcCgoKSA9PiBzLl9zdG9yZSksXG4gICAgICAgICAgICB0YXAoKHMpID0+IHtcbiAgICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9xdWVyaWVzJC5uZXh0KEFycmF5LmZyb20ocy52YWx1ZXMoKSkpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5xdWVyeVN0b3JlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocykgPT5cbiAgICAgICAgICBzLnF1ZXJ5Q3JlYXRlZCQucGlwZShcbiAgICAgICAgICAgIHRhcCgocXVlcnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudEhpc3RvcnkgPSB0aGlzLnF1ZXJ5SGlzdG9yeSQuZ2V0VmFsdWUoKTtcblxuICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRIaXN0b3J5KSByZXR1cm47XG5cbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudEhpc3RvcnlDbG9uZSA9IFsuLi5jdXJyZW50SGlzdG9yeV07XG5cbiAgICAgICAgICAgICAgaWYgKCFjdXJyZW50SGlzdG9yeS5zb21lKChxKSA9PiBxLl9pZCA9PT0gcXVlcnkuX2lkKSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRIaXN0b3J5Q2xvbmUudW5zaGlmdChxdWVyeSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjdXJyZW50SGlzdG9yeUNsb25lLnNwbGljZSg1MCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5xdWVyeUhpc3RvcnkkLm5leHQoY3VycmVudEhpc3RvcnlDbG9uZSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuX3F1ZXJpZXMkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChxdWVyaWVzKSA9PiB7XG4gICAgICAgICAgY29uc3QgY3VycmVudEhpc3RvcnkgPSB0aGlzLnF1ZXJ5SGlzdG9yeSQuZ2V0VmFsdWUoKTtcblxuICAgICAgICAgIGlmICghcXVlcmllcyB8fCAhY3VycmVudEhpc3RvcnkpIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRIaXN0b3J5Q2xvbmUgPSBbLi4uY3VycmVudEhpc3RvcnldO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBxdWVyeSBvZiBxdWVyaWVzKSB7XG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRIaXN0b3J5Q2xvbmUuc29tZSgocSkgPT4gcS5faWQgPT09IHF1ZXJ5Ll9pZCkpIHtcbiAgICAgICAgICAgICAgY3VycmVudEhpc3RvcnlDbG9uZS51bnNoaWZ0KHF1ZXJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50SGlzdG9yeUNsb25lLnNwbGljZSg1MCk7XG5cbiAgICAgICAgICB0aGlzLnF1ZXJ5SGlzdG9yeSQubmV4dChjdXJyZW50SGlzdG9yeUNsb25lKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRldnRvb2xDb25maWcgPSB7XG4gICAgICAgICAgaXNPcGVuOiB0aGlzLmlzT3BlbigpLFxuICAgICAgICAgIGlzVHJhbnNsdWNlbnQ6IHRoaXMuaXNUcmFuc2x1Y2VudCgpLFxuICAgICAgICAgIHNuYXBMYXlvdXQ6IHRoaXMuc25hcExheW91dCgpLFxuICAgICAgICAgIHNob3dSZXNwb25zZTogdGhpcy5zaG93UmVzcG9uc2UoKSxcbiAgICAgICAgICBzaG93UmF3UmVzcG9uc2U6IHRoaXMuc2hvd1Jhd1Jlc3BvbnNlKCksXG4gICAgICAgICAgc2hvd1F1ZXJ5Q29uZmlnOiB0aGlzLnNob3dRdWVyeUNvbmZpZygpLFxuICAgICAgICAgIHNob3dFbnRpdHlTdG9yZVZhbHVlOiB0aGlzLnNob3dFbnRpdHlTdG9yZVZhbHVlKCksXG4gICAgICAgICAgc2hvd0FyZ3VtZW50czogdGhpcy5zaG93QXJndW1lbnRzKCksXG4gICAgICAgICAgc2VsZWN0ZWRDbGllbnRJZDogdGhpcy5zZWxlY3RlZENsaWVudElkKCksXG4gICAgICAgICAgc2VsZWN0ZWRRdWVyeVBhdGg6IHRoaXMuc2VsZWN0ZWRRdWVyeUlkKCksXG4gICAgICAgICAgcXVlcnlMaXN0TW9kZTogdGhpcy5xdWVyeUxpc3RNb2RlKCksXG4gICAgICAgICAgdmlld01vZGU6IHRoaXMudmlld01vZGUoKSxcbiAgICAgICAgfTtcblxuICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2V0aGxldGU6cXVlcnk6ZGV2dG9vbHMnLCBKU09OLnN0cmluZ2lmeShkZXZ0b29sQ29uZmlnKSk7XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICAgICk7XG5cbiAgICBjb25zdCBpbml0aWFsQ29uZmlnID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdldGhsZXRlOnF1ZXJ5OmRldnRvb2xzJyk7XG5cbiAgICBpZiAoaW5pdGlhbENvbmZpZykge1xuICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShpbml0aWFsQ29uZmlnKTtcblxuICAgICAgdGhpcy5pc09wZW4uc2V0KHBhcnNlZC5pc09wZW4gPz8gZmFsc2UpO1xuICAgICAgdGhpcy5pc1RyYW5zbHVjZW50LnNldChwYXJzZWQuaXNUcmFuc2x1Y2VudCA/PyBmYWxzZSk7XG4gICAgICB0aGlzLnNuYXBMYXlvdXQuc2V0KHBhcnNlZC5zbmFwTGF5b3V0ID8/ICdmdWxsJyk7XG4gICAgICB0aGlzLnNob3dSZXNwb25zZS5zZXQocGFyc2VkLnNob3dSZXNwb25zZSA/PyBmYWxzZSk7XG4gICAgICB0aGlzLnNob3dSYXdSZXNwb25zZS5zZXQocGFyc2VkLnNob3dSYXdSZXNwb25zZSA/PyBmYWxzZSk7XG4gICAgICB0aGlzLnNob3dRdWVyeUNvbmZpZy5zZXQocGFyc2VkLnNob3dRdWVyeUNvbmZpZyA/PyBmYWxzZSk7XG4gICAgICB0aGlzLnNob3dFbnRpdHlTdG9yZVZhbHVlLnNldChwYXJzZWQuc2hvd0VudGl0eVN0b3JlVmFsdWUgPz8gZmFsc2UpO1xuICAgICAgdGhpcy5zaG93QXJndW1lbnRzLnNldChwYXJzZWQuc2hvd0FyZ3VtZW50cyA/PyBmYWxzZSk7XG4gICAgICB0aGlzLnNlbGVjdGVkQ2xpZW50SWRDdHJsLnNldFZhbHVlKHBhcnNlZC5zZWxlY3RlZENsaWVudElkID8/IDApO1xuICAgICAgdGhpcy5zZWxlY3RlZFF1ZXJ5SWQuc2V0KHBhcnNlZC5zZWxlY3RlZFF1ZXJ5UGF0aCA/PyBudWxsKTtcbiAgICAgIHRoaXMucXVlcnlMaXN0TW9kZS5zZXQocGFyc2VkLnF1ZXJ5TGlzdE1vZGUgPz8gJ2xpdmUnKTtcbiAgICAgIHRoaXMudmlld01vZGUuc2V0KHBhcnNlZC52aWV3TW9kZSA/PyAncXVlcnknKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgdHJhY2tCeUNsaWVudDogVHJhY2tCeUZ1bmN0aW9uPFF1ZXJ5Q2xpZW50RGV2dG9vbHNPcHRpb25zPiA9IChfLCB7IGNsaWVudCB9KSA9PiBjbGllbnQuY29uZmlnLmJhc2VSb3V0ZTtcbiAgcHJvdGVjdGVkIHRyYWNrQnlRdWVyeTogVHJhY2tCeUZ1bmN0aW9uPEFueVF1ZXJ5PiA9IChfLCB7IF9pZCB9KSA9PiBfaWQ7XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZU9wZW4oKSB7XG4gICAgdGhpcy5pc09wZW4uc2V0KCF0aGlzLmlzT3BlbigpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVUcmFuc2x1Y2VudCgpIHtcbiAgICB0aGlzLmlzVHJhbnNsdWNlbnQuc2V0KCF0aGlzLmlzVHJhbnNsdWNlbnQoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdG9nZ2xlU2hvd1Jlc3BvbnNlKCkge1xuICAgIHRoaXMuc2hvd1Jlc3BvbnNlLnNldCghdGhpcy5zaG93UmVzcG9uc2UoKSk7XG5cbiAgICBuZXh0RnJhbWUoKCkgPT4ge1xuICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZVNob3dRdWVyeUNvbmZpZygpIHtcbiAgICB0aGlzLnNob3dRdWVyeUNvbmZpZy5zZXQoIXRoaXMuc2hvd1F1ZXJ5Q29uZmlnKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZVNob3dSYXdSZXNwb25zZSgpIHtcbiAgICB0aGlzLnNob3dSYXdSZXNwb25zZS5zZXQoIXRoaXMuc2hvd1Jhd1Jlc3BvbnNlKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZVNob3dFbnRpdHlTdG9yZVZhbHVlKCkge1xuICAgIHRoaXMuc2hvd0VudGl0eVN0b3JlVmFsdWUuc2V0KCF0aGlzLnNob3dFbnRpdHlTdG9yZVZhbHVlKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZVNob3dBcmd1bWVudHMoKSB7XG4gICAgdGhpcy5zaG93QXJndW1lbnRzLnNldCghdGhpcy5zaG93QXJndW1lbnRzKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdFNuYXBMYXlvdXQobGF5b3V0OiBRdWVyeURldnRvb2xzU25hcExheW91dCkge1xuICAgIHRoaXMuc25hcExheW91dC5zZXQobGF5b3V0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3RRdWVyeUxpc3RNb2RlKG1vZGU6IFF1ZXJ5TGlzdE1vZGUpIHtcbiAgICB0aGlzLnF1ZXJ5TGlzdE1vZGUuc2V0KG1vZGUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdFZpZXdNb2RlKG1vZGU6IFF1ZXJ5Vmlld01vZGUpIHtcbiAgICB0aGlzLnZpZXdNb2RlLnNldChtb2RlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3RRdWVyeShxdWVyeTogQW55UXVlcnkpIHtcbiAgICB0aGlzLnNlbGVjdGVkUXVlcnlJZC5zZXQocXVlcnkuX2lkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbGVhclF1ZXJ5SGlzdG9yeSgpIHtcbiAgICB0aGlzLnF1ZXJ5SGlzdG9yeSQubmV4dChbXSk7XG4gIH1cbn1cbiIsIkBpZiAoIWlzT3BlbigpKSB7XG4gIDxidXR0b24gKGNsaWNrKT1cInRvZ2dsZU9wZW4oKVwiIGNsYXNzPVwiZXQtcXVlcnktZGV2dG9vbHMtb3Blbi1idG4gZXQtcWQtY2hpcFwiPlF1ZXJ5IERldnRvb2xzPC9idXR0b24+XG59XG5cbkBpZiAoaXNPcGVuKCkpIHtcbiAgPGRpdlxuICAgIFtjbGFzcy5ldC1xdWVyeS1kZXZ0b29scy1jb250YWluZXItLXRyYW5zcGFyZW50XT1cImlzVHJhbnNsdWNlbnQoKVwiXG4gICAgY2xhc3M9XCJldC1xdWVyeS1kZXZ0b29scy1jb250YWluZXIgZXQtcXVlcnktZGV2dG9vbHMtY29udGFpbmVyLS1zbmFwLXt7IHNuYXBMYXlvdXQoKSB9fVwiXG4gID5cbiAgICA8aGVhZGVyIGNsYXNzPVwiZXQtcWQtaGVhZGVyXCI+XG4gICAgICA8aDMgY2xhc3M9XCJldC1xZC1oZWFkZXJfX3RpdGxlXCI+UXVlcnkgRGV2dG9vbHM8L2gzPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtaGVhZGVyX19zZWxlY3RcIj5cbiAgICAgICAgPGxhYmVsIGZvcj1cImV0LXF1ZXJ5LWNsaWVudC1pbnN0YW5jZVwiPkNsaWVudCBpbnN0YW5jZTwvbGFiZWw+XG4gICAgICAgIDxzZWxlY3QgW2Zvcm1Db250cm9sXT1cInNlbGVjdGVkQ2xpZW50SWRDdHJsXCIgaWQ9XCJldC1xdWVyeS1jbGllbnQtaW5zdGFuY2VcIj5cbiAgICAgICAgICBAZm9yIChjbGllbnRDb25maWcgb2YgcXVlcnlDbGllbnRDb25maWdzOyB0cmFjayB0cmFja0J5Q2xpZW50KGksIGNsaWVudENvbmZpZyk7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJpXCI+XG4gICAgICAgICAgICAgIHt7IGNsaWVudENvbmZpZy5kaXNwbGF5TmFtZSA/PyBjbGllbnRDb25maWcuY2xpZW50LmNvbmZpZy5iYXNlUm91dGUgfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwidG9nZ2xlT3BlbigpXCIgY2xhc3M9XCJldC1xZC1idG4gZXQtcWQtYnRuLXNlY29uZGFyeVwiPkNsb3NlPC9idXR0b24+XG4gICAgPC9oZWFkZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtc3ViLWhlYWRlclwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBbbmdDbGFzc109XCJ7ICdldC1xZC1jaGlwLXNlY29uZGFyeSc6ICFpc1RyYW5zbHVjZW50KCkgfVwiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVUcmFuc2x1Y2VudCgpXCJcbiAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLXRyYW5zbHVjZW50LWNsaWNrYWJsZVwiXG4gICAgICA+XG4gICAgICAgIFRyYW5zbHVjZW50XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1zdWItaGVhZGVyX19kaXZpZGVyXCI+PC9kaXY+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2V0LXFkLWNoaXAtc2Vjb25kYXJ5Jzogc25hcExheW91dCgpICE9PSAnZnVsbCcgfVwiXG4gICAgICAgIChjbGljayk9XCJzZWxlY3RTbmFwTGF5b3V0KCdmdWxsJylcIlxuICAgICAgICBjbGFzcz1cImV0LXFkLWNoaXBcIlxuICAgICAgPlxuICAgICAgICBGdWxsc2NyZWVuXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiBzbmFwTGF5b3V0KCkgIT09ICd0b3AnIH1cIlxuICAgICAgICAoY2xpY2spPVwic2VsZWN0U25hcExheW91dCgndG9wJylcIlxuICAgICAgICBjbGFzcz1cImV0LXFkLWNoaXBcIlxuICAgICAgPlxuICAgICAgICBUb3BcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBbbmdDbGFzc109XCJ7ICdldC1xZC1jaGlwLXNlY29uZGFyeSc6IHNuYXBMYXlvdXQoKSAhPT0gJ2JvdHRvbScgfVwiXG4gICAgICAgIChjbGljayk9XCJzZWxlY3RTbmFwTGF5b3V0KCdib3R0b20nKVwiXG4gICAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcFwiXG4gICAgICA+XG4gICAgICAgIEJvdHRvbVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2V0LXFkLWNoaXAtc2Vjb25kYXJ5Jzogc25hcExheW91dCgpICE9PSAnbGVmdCcgfVwiXG4gICAgICAgIChjbGljayk9XCJzZWxlY3RTbmFwTGF5b3V0KCdsZWZ0JylcIlxuICAgICAgICBjbGFzcz1cImV0LXFkLWNoaXBcIlxuICAgICAgPlxuICAgICAgICBMZWZ0XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiBzbmFwTGF5b3V0KCkgIT09ICdyaWdodCcgfVwiXG4gICAgICAgIChjbGljayk9XCJzZWxlY3RTbmFwTGF5b3V0KCdyaWdodCcpXCJcbiAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwXCJcbiAgICAgID5cbiAgICAgICAgUmlnaHRcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgQGlmIChzZWxlY3RlZENsaWVudENvbmZpZygpOyBhcyBjZmcpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1jbGllbnRcIj5cbiAgICAgICAgPHAgY2xhc3M9XCJldC1xZC1jbGllbnRfX3RpdGxlXCI+e3sgY2ZnLmRpc3BsYXlOYW1lID8/IGNmZy5jbGllbnQuY29uZmlnLmJhc2VSb3V0ZSB9fTwvcD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtY2xpZW50X19hY3Rpb25zXCI+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2ZnLmNsaWVudC5fc3RvcmUucmVmcmVzaFF1ZXJpZXNJblVzZSgpXCIgY2xhc3M9XCJldC1xZC1jaGlwXCI+UmVmcmVzaCBhbGw8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjZmcuY2xpZW50Ll9zdG9yZS5yZWZyZXNoUXVlcmllc0luVXNlKHsgaWdub3JlQ2FjaGVWYWxpZGl0eTogdHJ1ZSB9KVwiIGNsYXNzPVwiZXQtcWQtY2hpcFwiPlxuICAgICAgICAgICAgUmVmcmVzaCBhbGwgKGlnbm9yZSBjYWNoZXMpXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cImNmZy5jbGllbnQuX3N0b3JlLnJlZnJlc2hRdWVyaWVzSW5Vc2UoeyBpZ25vcmVDYWNoZVZhbGlkaXR5OiB0cnVlLCBwdXJnZVVudXNlZDogdHJ1ZSB9KVwiXG4gICAgICAgICAgICBjbGFzcz1cImV0LXFkLWNoaXBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFJlZnJlc2ggYWxsIChpZ25vcmUgY2FjaGVzICYgcHVyZ2UgdW51c2VkKVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIEBpZiAoc2VsZWN0ZWRDbGllbnRDb25maWcoKTsgYXMgY2ZnKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtcXVlcmllc1wiPlxuICAgICAgICA8cCBjbGFzcz1cImV0LXFkLXF1ZXJpZXNfX3RpdGxlXCI+SW5zcGVjdG9yPC9wPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtcXVlcmllc19fYWN0aW9uc1wiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2V0LXFkLWNoaXAtc2Vjb25kYXJ5JzogcXVlcnlMaXN0TW9kZSgpICE9PSAnbGl2ZScgfHwgdmlld01vZGUoKSAhPT0gJ3F1ZXJ5JyB9XCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RRdWVyeUxpc3RNb2RlKCdsaXZlJyk7IHNlbGVjdFZpZXdNb2RlKCdxdWVyeScpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBMaXZlIFF1ZXJpZXMgKHt7IHF1ZXJpZXMoKT8ubGVuZ3RoID8/IDAgfX0pXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiBxdWVyeUxpc3RNb2RlKCkgIT09ICdoaXN0b3J5JyB8fCB2aWV3TW9kZSgpICE9PSAncXVlcnknIH1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFF1ZXJ5TGlzdE1vZGUoJ2hpc3RvcnknKTsgc2VsZWN0Vmlld01vZGUoJ3F1ZXJ5JylcIlxuICAgICAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFF1ZXJ5IEhpc3RvcnkgKHt7IChxdWVyeUhpc3RvcnkkIHwgYXN5bmMpPy5sZW5ndGggPz8gMCB9fS81MClcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICBAaWYgKHF1ZXJ5TGlzdE1vZGUoKSA9PT0gJ2hpc3RvcnknICYmIHZpZXdNb2RlKCkgPT09ICdxdWVyeScpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1xdWVyaWVzX19kaXZpZGVyXCI+PC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjbGVhclF1ZXJ5SGlzdG9yeSgpXCIgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIj5DbGVhciBoaXN0b3J5PC9idXR0b24+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLXF1ZXJpZXNfX2RpdmlkZXJcIj48L2Rpdj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdldC1xZC1jaGlwLXNlY29uZGFyeSc6IHZpZXdNb2RlKCkgIT09ICdhdXRoUHJvdmlkZXInIH1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFZpZXdNb2RlKCdhdXRoUHJvdmlkZXInKVwiXG4gICAgICAgICAgICBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1ib3JkZXJlZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgQXV0aCBQcm92aWRlclxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICBAaWYgKHZpZXdNb2RlKCkgPT09ICdxdWVyeScpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtcXVlcmllc19fYnJvd3NlclwiPlxuICAgICAgICAgICAgQGlmIChxdWVyeUxpc3RNb2RlKCkgPT09ICdsaXZlJykge1xuICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJldC1xZC1xdWVyaWVzX19icm93c2VyLWxpc3RcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChxdWVyeSBvZiBxdWVyaWVzKCk7IHRyYWNrIHRyYWNrQnlRdWVyeSgkaW5kZXgsIHF1ZXJ5KSkge1xuICAgICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmV0LXFkLXF1ZXJ5LS1hY3RpdmVdPVwic2VsZWN0ZWRRdWVyeSgpPy5faWQgPT09IHF1ZXJ5Ll9pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFF1ZXJ5KHF1ZXJ5KVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgcXVlcnkuX3F1ZXJ5Q29uZmlnLm1ldGhvZCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgcXVlcnkgfCBxdWVyeVNob3J0TmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAocXVlcnlMaXN0TW9kZSgpID09PSAnaGlzdG9yeScpIHtcbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiZXQtcWQtcXVlcmllc19fYnJvd3Nlci1saXN0XCI+XG4gICAgICAgICAgICAgICAgQGZvciAocXVlcnkgb2YgcXVlcnlIaXN0b3J5JCB8IGFzeW5jOyB0cmFjayB0cmFja0J5UXVlcnkoJGluZGV4LCBxdWVyeSkpIHtcbiAgICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5ldC1xZC1xdWVyeS0tYWN0aXZlXT1cInNlbGVjdGVkUXVlcnkoKT8uX2lkID09PSBxdWVyeS5faWRcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RRdWVyeShxdWVyeSlcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+IHt7IHF1ZXJ5Ll9xdWVyeUNvbmZpZy5tZXRob2QgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+IHt7IHF1ZXJ5IHwgcXVlcnlTaG9ydE5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtcXVlcmllc19fYnJvd3Nlci1kZXRhaWxcIj5cbiAgICAgICAgICAgICAgQGlmIChzZWxlY3RlZFF1ZXJ5KCk7IGFzIHF1ZXJ5KSB7XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJldC1xZC1xdWVyaWVzX19icm93c2VyLWRldGFpbF9fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHF1ZXJ5Ll9xdWVyeUNvbmZpZy5tZXRob2QgfX0ge3sgcXVlcnkuX3JvdXRlV2l0aFBhcmFtcyB9fVxuICAgICAgICAgICAgICAgIDwvcD5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1xdWVyaWVzX19hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJxdWVyeS5leGVjdXRlKClcIiBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1ib3JkZXJlZFwiPkV4ZWN1dGU8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInF1ZXJ5LmV4ZWN1dGUoeyBza2lwQ2FjaGU6IHRydWUgfSlcIiBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1ib3JkZXJlZFwiPlxuICAgICAgICAgICAgICAgICAgICBFeGVjdXRlIChpZ25vcmUgY2FjaGUpXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicXVlcnkuYWJvcnQoKVwiIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCI+QWJvcnQ8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1xdWVyaWVzX19kaXZpZGVyXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2V0LXFkLWNoaXAtc2Vjb25kYXJ5JzogIXF1ZXJ5LmlzUG9sbGluZyB9XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInF1ZXJ5LnBvbGwoeyBpbnRlcnZhbDogNTAwMCwgdGFrZVVudGlsOiBfZGVzdHJveSQgfSlcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1ib3JkZXJlZFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIFBvbGxcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2V0LXFkLWNoaXAtc2Vjb25kYXJ5JzogcXVlcnkuaXNQb2xsaW5nIH1cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicXVlcnkuc3RvcFBvbGxpbmcoKVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgU3RvcCBwb2xsaW5nXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIEBpZiAocXVlcnkuaXNQb2xsaW5nIHx8IHF1ZXJ5Ll9pc1BvbGxpbmdQYXVzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicXVlcnkucGF1c2VQb2xsaW5nKClcIiBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1zZWNvbmRhcnkgZXQtcWQtY2hpcC1ib3JkZXJlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgIFBhdXNlIHBvbGxpbmdcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInF1ZXJ5LnJlc3VtZVBvbGxpbmcoKVwiIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLXNlY29uZGFyeSBldC1xZC1jaGlwLWJvcmRlcmVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgUmVzdW1lIHBvbGxpbmdcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8cD5TdGF0ZSB0eXBlPC9wPlxuICAgICAgICAgICAgICAgICAgICA8cHJlPnt7IHF1ZXJ5LnJhd1N0YXRlLnR5cGUgfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPkRlcGVuZGVudHM8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwcmU+e3sgcXVlcnkuX2RlcGVuZGVudHMgfCBqc29uIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8cD5JcyBleHBpcmVkPC9wPlxuICAgICAgICAgICAgICAgICAgICA8cHJlPnt7IHF1ZXJ5LmlzRXhwaXJlZCB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+SXMgaW4gdXNlPC9wPlxuICAgICAgICAgICAgICAgICAgICA8cHJlPnt7IHF1ZXJ5LmlzSW5Vc2UgfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPlN1YnNjcmliZXIgY291bnQ8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwcmU+e3sgcXVlcnkuX3N1YnNjcmliZXJDb3VudCB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+SXMgcG9sbGluZzwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHByZT57eyBxdWVyeS5pc1BvbGxpbmcgfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPklzIHBvbGxpbmcgcGF1c2VkPC9wPlxuICAgICAgICAgICAgICAgICAgICA8cHJlPnt7IHF1ZXJ5Ll9pc1BvbGxpbmdQYXVzZWQgfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPkVuYWJsZSBzbWFydCBwb2xsaW5nPC9wPlxuICAgICAgICAgICAgICAgICAgICA8cHJlPnt7IHF1ZXJ5Ll9lbmFibGVTbWFydFBvbGxpbmcgfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPlF1ZXJ5IHN0b3JlIGtleTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHByZT57eyBxdWVyeS5fcXVlcnlTdG9yZUtleSB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+QXJndW1lbnRzPC9wPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiAhc2hvd0FyZ3VtZW50cygpIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNob3dBcmd1bWVudHMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1ib3JkZXJlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgVG9nZ2xlXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dBcmd1bWVudHMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxwcmU+e3sgcXVlcnkuX2FyZ3VtZW50cyB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+U3RhdGU8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwPjxpPiBXYXJuaW5nLCB0aGlzIHdpbGwgY2F1c2UgYSBzdWJzY3JpcHRpb24gaWYgc2hvd24hPC9pPjwvcD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdldC1xZC1jaGlwLXNlY29uZGFyeSc6ICFzaG93UmVzcG9uc2UoKSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTaG93UmVzcG9uc2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1ib3JkZXJlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgVG9nZ2xlXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dSZXNwb25zZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHByZT57eyBxdWVyeS5zdGF0ZSQgfCBhc3luYyB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+UmF3IHN0YXRlPC9wPlxuICAgICAgICAgICAgICAgICAgICA8cD48aT4gVGhlIHF1ZXJ5IHN0YXRlIHVuYWZmZWN0ZWQgYnkgZW50aXR5IHN0b3JlczwvaT48L3A+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdldC1xZC1jaGlwLXNlY29uZGFyeSc6ICFzaG93UmF3UmVzcG9uc2UoKSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTaG93UmF3UmVzcG9uc2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1ib3JkZXJlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgVG9nZ2xlXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dSYXdSZXNwb25zZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHByZT57eyBxdWVyeS5yYXdTdGF0ZSB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+UXVlcnkgY29uZmlnPC9wPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiAhc2hvd1F1ZXJ5Q29uZmlnKCkgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2hvd1F1ZXJ5Q29uZmlnKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRvZ2dsZVxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzaG93UXVlcnlDb25maWcoKSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxwcmU+e3sgc3RyaW5naWZpZWRRdWVyeUNvbmZpZygpIHwganNvbiB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgQGlmICghIXF1ZXJ5Ll9xdWVyeUNvbmZpZy5lbnRpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwPkVudGl0eSBzdG9yZSB2YWx1ZTwvcD5cblxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2V0LXFkLWNoaXAtc2Vjb25kYXJ5JzogIXNob3dFbnRpdHlTdG9yZVZhbHVlKCkgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTaG93RW50aXR5U3RvcmVWYWx1ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBUb2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd0VudGl0eVN0b3JlVmFsdWUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHByZT57eyBzZWxlY3RlZFF1ZXJ5RW50aXR5U3RvcmVWYWx1ZSQgfCBhc3luYyB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSBpZiAodmlld01vZGUoKSA9PT0gJ2F1dGhQcm92aWRlcicpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtYXV0aC1wcm92aWRlcl9fdmlld2VyXCI+XG4gICAgICAgICAgICBAaWYgKGF1dGhQcm92aWRlckRldGFpbHMoKTsgYXMgZGV0YWlscykge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgIDxwPlR5cGU8L3A+XG4gICAgICAgICAgICAgICAgICA8cHJlPnt7IGRldGFpbHMudHlwZSB9fTwvcHJlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgIDxwPkhlYWRlciB2YWx1ZTwvcD5cbiAgICAgICAgICAgICAgICAgIDxwcmU+e3sgZGV0YWlscy5oZWFkZXIoKSB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICA8cD5Db25maWc8L3A+XG4gICAgICAgICAgICAgICAgICA8cHJlPnt7IGRldGFpbHMuY29uZmlnIHwganNvbiB9fTwvcHJlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgQGlmIChkZXRhaWxzLnR5cGUgPT09ICdCZWFyZXJBdXRoUHJvdmlkZXInKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPlRva2VuczwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHByZT57eyBkZXRhaWxzLnByb3ZpZGVyLnRva2VucyQgfCBhc3luYyB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPlNob3VsZCByZWZyZXNoIG9uIHVuYXV0aG9yaXplZCByZXNwb25zZTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHByZT57eyBkZXRhaWxzLnByb3ZpZGVyLnNob3VsZFJlZnJlc2hPblVuYXV0aG9yaXplZFJlc3BvbnNlIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqZXRRdWVyeT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHMucHJvdmlkZXIuY3VycmVudFJlZnJlc2hRdWVyeSQgfCBhc3luYyBhcyByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nIGFzIGxvYWRpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgZXJyb3IgYXMgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgcXVlcnkgYXMgcXVlcnlcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwPlJlZnJlc2ggcXVlcnkgcmVzcG9uc2U8L3A+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZGV0YWlscy5wcm92aWRlci5fcmVmcmVzaFF1ZXJ5KClcIiBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1ib3JkZXJlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZyZXNoXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8cHJlPnt7IHJlc3BvbnNlIHwganNvbiB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwPlJlZnJlc2ggcXVlcnkgbG9hZGluZzwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8cHJlPnt7IGxvYWRpbmcgfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cD5SZWZyZXNoIHF1ZXJ5IGVycm9yPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDxwcmU+e3sgZXJyb3IgPz8gJ251bGwnIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHA+U3RhdGU8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgPHByZT57eyBxdWVyeT8uc3RhdGUkIHwgYXN5bmMgfCBqc29uIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8cD5ObyBhdXRoIHByb3ZpZGVyIHNldDwvcD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbn1cbiJdfQ==
@@ -1,2 +0,0 @@
1
- export * from './query-short-name.pipe';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZGV2dG9vbHMvcGlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcXVlcnktc2hvcnQtbmFtZS5waXBlJztcbiJdfQ==
@@ -1,24 +0,0 @@
1
- import { Pipe } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class QueryShortNamePipe {
4
- transform(value) {
5
- const route = value._routeWithParams;
6
- if (typeof route === 'string') {
7
- // given an url that looks like this: https://api.github.com/repos/EladBezalel/etimo-achievements or https://api.github.com/repos/EladBezalel/etimo-achievements?test=1&test2=2
8
- // we want to extract the last 3 parts of the url, so we get: repos/EladBezalel/etimo-achievements
9
- const parts = route.split('/');
10
- if (parts.length > 3) {
11
- return `.../${parts.slice(parts.length - 3).join('/')}`;
12
- }
13
- return route;
14
- }
15
- return route;
16
- }
17
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: QueryShortNamePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
18
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.6", ngImport: i0, type: QueryShortNamePipe, isStandalone: true, name: "queryShortName" }); }
19
- }
20
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: QueryShortNamePipe, decorators: [{
21
- type: Pipe,
22
- args: [{ name: 'queryShortName', standalone: true }]
23
- }] });
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktc2hvcnQtbmFtZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RldnRvb2xzL3BpcGVzL3F1ZXJ5LXNob3J0LW5hbWUucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7QUFJcEQsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixTQUFTLENBQUMsS0FBZTtRQUN2QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7UUFFckMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM5QiwrS0FBK0s7WUFDL0ssa0dBQWtHO1lBRWxHLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFL0IsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNyQixPQUFPLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFELENBQUM7WUFFRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxPQUFPLEtBQWUsQ0FBQztJQUN6QixDQUFDOzhHQWxCVSxrQkFBa0I7NEdBQWxCLGtCQUFrQjs7MkZBQWxCLGtCQUFrQjtrQkFEOUIsSUFBSTttQkFBQyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW55UXVlcnkgfSBmcm9tICcuLi8uLi9xdWVyeSc7XG5cbkBQaXBlKHsgbmFtZTogJ3F1ZXJ5U2hvcnROYW1lJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIFF1ZXJ5U2hvcnROYW1lUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odmFsdWU6IEFueVF1ZXJ5KSB7XG4gICAgY29uc3Qgcm91dGUgPSB2YWx1ZS5fcm91dGVXaXRoUGFyYW1zO1xuXG4gICAgaWYgKHR5cGVvZiByb3V0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGdpdmVuIGFuIHVybCB0aGF0IGxvb2tzIGxpa2UgdGhpczogaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9FbGFkQmV6YWxlbC9ldGltby1hY2hpZXZlbWVudHMgb3IgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9FbGFkQmV6YWxlbC9ldGltby1hY2hpZXZlbWVudHM/dGVzdD0xJnRlc3QyPTJcbiAgICAgIC8vIHdlIHdhbnQgdG8gZXh0cmFjdCB0aGUgbGFzdCAzIHBhcnRzIG9mIHRoZSB1cmwsIHNvIHdlIGdldDogcmVwb3MvRWxhZEJlemFsZWwvZXRpbW8tYWNoaWV2ZW1lbnRzXG5cbiAgICAgIGNvbnN0IHBhcnRzID0gcm91dGUuc3BsaXQoJy8nKTtcblxuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgcmV0dXJuIGAuLi4vJHtwYXJ0cy5zbGljZShwYXJ0cy5sZW5ndGggLSAzKS5qb2luKCcvJyl9YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJvdXRlO1xuICAgIH1cblxuICAgIHJldHVybiByb3V0ZSBhcyBzdHJpbmc7XG4gIH1cbn1cbiJdfQ==
@@ -1,2 +0,0 @@
1
- export * from './query-client.utils';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZGV2dG9vbHMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcXVlcnktY2xpZW50LnV0aWxzJztcbiJdfQ==
@@ -1,13 +0,0 @@
1
- import { InjectionToken, isDevMode } from '@angular/core';
2
- export const QUERY_CLIENT_DEVTOOLS_TOKEN = new InjectionToken('QUERY_CLIENT_DEVTOOLS_TOKEN');
3
- export const provideQueryClientForDevtools = (queryClient) => {
4
- if (!isDevMode()) {
5
- console.warn('You are using the Query Devtools in production mode. This increases the size of your bundle and should only be used for development purposes.');
6
- }
7
- return {
8
- provide: QUERY_CLIENT_DEVTOOLS_TOKEN,
9
- useValue: queryClient,
10
- multi: true,
11
- };
12
- };
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY2xpZW50LnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RldnRvb2xzL3V0aWxzL3F1ZXJ5LWNsaWVudC51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVExRCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLGNBQWMsQ0FDM0QsNkJBQTZCLENBQzlCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxDQUFDLFdBQXVDLEVBQUUsRUFBRTtJQUN2RixJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztRQUNqQixPQUFPLENBQUMsSUFBSSxDQUNWLCtJQUErSSxDQUNoSixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU87UUFDTCxPQUFPLEVBQUUsMkJBQTJCO1FBQ3BDLFFBQVEsRUFBRSxXQUFXO1FBQ3JCLEtBQUssRUFBRSxJQUFJO0tBQ1osQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuLCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50IH0gZnJvbSAnLi4vLi4vcXVlcnktY2xpZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeUNsaWVudERldnRvb2xzT3B0aW9ucyB7XG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICBjbGllbnQ6IFF1ZXJ5Q2xpZW50O1xufVxuXG5leHBvcnQgY29uc3QgUVVFUllfQ0xJRU5UX0RFVlRPT0xTX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPFF1ZXJ5Q2xpZW50RGV2dG9vbHNPcHRpb25zW10+KFxuICAnUVVFUllfQ0xJRU5UX0RFVlRPT0xTX1RPS0VOJyxcbik7XG5cbmV4cG9ydCBjb25zdCBwcm92aWRlUXVlcnlDbGllbnRGb3JEZXZ0b29scyA9IChxdWVyeUNsaWVudDogUXVlcnlDbGllbnREZXZ0b29sc09wdGlvbnMpID0+IHtcbiAgaWYgKCFpc0Rldk1vZGUoKSkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgICdZb3UgYXJlIHVzaW5nIHRoZSBRdWVyeSBEZXZ0b29scyBpbiBwcm9kdWN0aW9uIG1vZGUuIFRoaXMgaW5jcmVhc2VzIHRoZSBzaXplIG9mIHlvdXIgYnVuZGxlIGFuZCBzaG91bGQgb25seSBiZSB1c2VkIGZvciBkZXZlbG9wbWVudCBwdXJwb3Nlcy4nLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IFFVRVJZX0NMSUVOVF9ERVZUT09MU19UT0tFTixcbiAgICB1c2VWYWx1ZTogcXVlcnlDbGllbnQsXG4gICAgbXVsdGk6IHRydWUsXG4gIH07XG59O1xuIl19
@@ -1,4 +0,0 @@
1
- export * from './query.directive';
2
- export * from './infinity-query.directive';
3
- export * from './infinity-query-trigger.directive';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZGlyZWN0aXZlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxvQ0FBb0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcXVlcnkuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vaW5maW5pdHktcXVlcnkuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vaW5maW5pdHktcXVlcnktdHJpZ2dlci5kaXJlY3RpdmUnO1xuIl19