@ethlete/query 5.13.0 → 5.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -16
- package/esm2022/lib/devtools/components/query-devtools/query-devtools.component.mjs +3 -3
- package/esm2022/lib/devtools/pipes/query-short-name.pipe.mjs +3 -3
- package/esm2022/lib/directives/infinity-query-trigger.directive.mjs +5 -5
- package/esm2022/lib/directives/infinity-query.directive.mjs +3 -3
- package/esm2022/lib/directives/query.directive.mjs +3 -3
- package/esm2022/lib/infinite-query/infinity-query.mjs +2 -3
- package/esm2022/lib/query-client/query-client.utils.mjs +16 -10
- package/esm2022/lib/query-creator/query-creator.mjs +4 -5
- package/fesm2022/ethlete-query.mjs +34 -30
- package/fesm2022/ethlete-query.mjs.map +1 -1
- package/lib/query-client/query-client.utils.d.ts +2 -2
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @ethlete/query
|
|
2
2
|
|
|
3
|
+
## 5.13.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`63f8f20`](https://github.com/ethlete-io/ethdk/commit/63f8f2062da109b263996b24eb0e64daeb869cca) Thanks [@TomTomB](https://github.com/TomTomB)! - Only bind click listener to infinity query trigger if the element is of type button
|
|
8
|
+
|
|
9
|
+
## 5.13.1
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [`2fe84fa`](https://github.com/ethlete-io/ethdk/commit/2fe84fa12b02248d0a7838ac89d07b172a4c977f) Thanks [@TomTomB](https://github.com/TomTomB)! - Fix an issue inside the infinity query where using skip-based pagination could result in a runtime error.
|
|
14
|
+
|
|
3
15
|
## 5.13.0
|
|
4
16
|
|
|
5
17
|
### Minor Changes
|
|
@@ -139,7 +151,7 @@
|
|
|
139
151
|
```ts
|
|
140
152
|
class MyComponent {
|
|
141
153
|
form = new QueryForm({
|
|
142
|
-
name: new QueryField({ control: new FormControl(
|
|
154
|
+
name: new QueryField({ control: new FormControl('John') }),
|
|
143
155
|
}).observe();
|
|
144
156
|
}
|
|
145
157
|
```
|
|
@@ -639,19 +651,15 @@
|
|
|
639
651
|
Before
|
|
640
652
|
|
|
641
653
|
```ts
|
|
642
|
-
import {
|
|
643
|
-
EntityStore,
|
|
644
|
-
def,
|
|
645
|
-
paginatedEntityValueUpdater,
|
|
646
|
-
} from "@ethlete/query";
|
|
654
|
+
import { EntityStore, def, paginatedEntityValueUpdater } from '@ethlete/query';
|
|
647
655
|
|
|
648
656
|
const mediaWithDetailsStore = new EntityStore<MediaViewWithDetails>({
|
|
649
|
-
name:
|
|
650
|
-
idKey:
|
|
657
|
+
name: 'media',
|
|
658
|
+
idKey: 'uuid',
|
|
651
659
|
});
|
|
652
660
|
|
|
653
661
|
export const getMediaListWithDetails = myClient.get({
|
|
654
|
-
route:
|
|
662
|
+
route: '/media/list/with-details',
|
|
655
663
|
secure: true,
|
|
656
664
|
types: {
|
|
657
665
|
args: def<GetMediaListArgs>(),
|
|
@@ -668,14 +676,14 @@
|
|
|
668
676
|
After
|
|
669
677
|
|
|
670
678
|
```ts
|
|
671
|
-
import { EntityStore, def, mapToPaginated } from
|
|
679
|
+
import { EntityStore, def, mapToPaginated } from '@ethlete/query';
|
|
672
680
|
|
|
673
681
|
const mediaWithDetailsStore = new EntityStore<MediaViewWithDetails>({
|
|
674
|
-
name:
|
|
682
|
+
name: 'media',
|
|
675
683
|
});
|
|
676
684
|
|
|
677
685
|
export const getMediaListWithDetails = myClient.get({
|
|
678
|
-
route:
|
|
686
|
+
route: '/media/list/with-details',
|
|
679
687
|
secure: true,
|
|
680
688
|
types: {
|
|
681
689
|
args: def<GetMediaListArgs>(),
|
|
@@ -684,8 +692,7 @@
|
|
|
684
692
|
entity: {
|
|
685
693
|
store: mediaWithDetailsStore,
|
|
686
694
|
id: ({ response }) => response.items.map((item) => item.uuid),
|
|
687
|
-
get: ({ store, id, response }) =>
|
|
688
|
-
store.select(id).pipe(mapToPaginated(response)),
|
|
695
|
+
get: ({ store, id, response }) => store.select(id).pipe(mapToPaginated(response)),
|
|
689
696
|
set: ({ store, id, response }) => store.set(id, response.items),
|
|
690
697
|
},
|
|
691
698
|
});
|
|
@@ -844,13 +851,13 @@
|
|
|
844
851
|
Before:
|
|
845
852
|
|
|
846
853
|
```ts
|
|
847
|
-
QueryClient.setDefaultHeaders({
|
|
854
|
+
QueryClient.setDefaultHeaders({ 'X-My-Header': 'Some Value' });
|
|
848
855
|
```
|
|
849
856
|
|
|
850
857
|
After:
|
|
851
858
|
|
|
852
859
|
```ts
|
|
853
|
-
QueryClient.setDefaultHeaders({ headers: {
|
|
860
|
+
QueryClient.setDefaultHeaders({ headers: { 'X-My-Header': 'Some Value' } });
|
|
854
861
|
```
|
|
855
862
|
|
|
856
863
|
## 1.0.1
|
|
@@ -285,10 +285,10 @@ export class QueryDevtoolsComponent {
|
|
|
285
285
|
clearQueryHistory() {
|
|
286
286
|
this.queryHistory$.next([]);
|
|
287
287
|
}
|
|
288
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.
|
|
289
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", 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 }); }
|
|
288
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: QueryDevtoolsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
289
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.9", 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
290
|
}
|
|
291
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.
|
|
291
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: QueryDevtoolsComponent, decorators: [{
|
|
292
292
|
type: Component,
|
|
293
293
|
args: [{ selector: 'et-query-devtools', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.ShadowDom, host: {
|
|
294
294
|
class: 'et-query-devtools',
|
|
@@ -14,10 +14,10 @@ export class QueryShortNamePipe {
|
|
|
14
14
|
}
|
|
15
15
|
return route;
|
|
16
16
|
}
|
|
17
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.
|
|
18
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.
|
|
17
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: QueryShortNamePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
18
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.9", ngImport: i0, type: QueryShortNamePipe, isStandalone: true, name: "queryShortName" }); }
|
|
19
19
|
}
|
|
20
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.
|
|
20
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: QueryShortNamePipe, decorators: [{
|
|
21
21
|
type: Pipe,
|
|
22
22
|
args: [{ name: 'queryShortName', standalone: true }]
|
|
23
23
|
}] });
|
|
@@ -12,7 +12,7 @@ export class InfinityQueryTriggerDirective {
|
|
|
12
12
|
this.scrollContainerSelector = null;
|
|
13
13
|
}
|
|
14
14
|
ngOnInit() {
|
|
15
|
-
const isInteractive = this._elementRef.nativeElement.
|
|
15
|
+
const isInteractive = this._elementRef.nativeElement.tagName === 'BUTTON';
|
|
16
16
|
if (isInteractive) {
|
|
17
17
|
this.click$.pipe(takeUntil(this._destroy)).subscribe(() => this._infinityQuery.loadNextPage());
|
|
18
18
|
}
|
|
@@ -40,10 +40,10 @@ export class InfinityQueryTriggerDirective {
|
|
|
40
40
|
});
|
|
41
41
|
this._observer.observe(this._elementRef.nativeElement);
|
|
42
42
|
}
|
|
43
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.
|
|
44
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.
|
|
43
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: InfinityQueryTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
44
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.9", type: InfinityQueryTriggerDirective, isStandalone: true, selector: "[etInfinityQueryTrigger], et-infinity-query-trigger", inputs: { scrollContainerSelector: "scrollContainerSelector" }, ngImport: i0 }); }
|
|
45
45
|
}
|
|
46
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.
|
|
46
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: InfinityQueryTriggerDirective, decorators: [{
|
|
47
47
|
type: Directive,
|
|
48
48
|
args: [{
|
|
49
49
|
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
@@ -53,4 +53,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
|
|
|
53
53
|
}], propDecorators: { scrollContainerSelector: [{
|
|
54
54
|
type: Input
|
|
55
55
|
}] } });
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdHktcXVlcnktdHJpZ2dlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZGlyZWN0aXZlcy9pbmZpbml0eS1xdWVyeS10cmlnZ2VyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBT2xFLE1BQU0sT0FBTyw2QkFBNkI7SUFMMUM7UUFNVSxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxDQUFBLFVBQXVCLENBQUEsQ0FBQyxDQUFDO1FBQzlDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFOUMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFDbEMsY0FBUyxHQUFnQyxJQUFJLENBQUM7UUFFdEQsV0FBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUc1RCw0QkFBdUIsR0FBa0IsSUFBSSxDQUFDO0tBc0MvQztJQXBDQyxRQUFRO1FBQ04sTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsT0FBTyxLQUFLLFFBQVEsQ0FBQztRQUUxRSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ2pHLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDcEMsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFTywwQkFBMEI7UUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLG9CQUFvQixDQUN2QyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ1YsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXpCLElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU87WUFFbkIsSUFBSSxLQUFLLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pFLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDckMsQ0FBQztRQUNILENBQUMsRUFDRDtZQUNFLElBQUksRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDaEcsVUFBVSxFQUFFLEtBQUs7WUFDakIsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ2hDLENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDekQsQ0FBQzs4R0EvQ1UsNkJBQTZCO2tHQUE3Qiw2QkFBNkI7OzJGQUE3Qiw2QkFBNkI7a0JBTHpDLFNBQVM7bUJBQUM7b0JBQ1QsOERBQThEO29CQUM5RCxRQUFRLEVBQUUscURBQXFEO29CQUMvRCxVQUFVLEVBQUUsSUFBSTtpQkFDakI7OEJBV0MsdUJBQXVCO3NCQUR0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBpbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElORklOSVRZX1FVRVJZX1RPS0VOIH0gZnJvbSAnLi9pbmZpbml0eS1xdWVyeS5kaXJlY3RpdmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdbZXRJbmZpbml0eVF1ZXJ5VHJpZ2dlcl0sIGV0LWluZmluaXR5LXF1ZXJ5LXRyaWdnZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBJbmZpbml0eVF1ZXJ5VHJpZ2dlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmPEhUTUxFbGVtZW50Pik7XG4gIHByaXZhdGUgX2luZmluaXR5UXVlcnkgPSBpbmplY3QoSU5GSU5JVFlfUVVFUllfVE9LRU4pO1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwcml2YXRlIF9vYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcblxuICBjbGljayQgPSBmcm9tRXZlbnQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnY2xpY2snKTtcblxuICBASW5wdXQoKVxuICBzY3JvbGxDb250YWluZXJTZWxlY3Rvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgaXNJbnRlcmFjdGl2ZSA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50YWdOYW1lID09PSAnQlVUVE9OJztcblxuICAgIGlmIChpc0ludGVyYWN0aXZlKSB7XG4gICAgICB0aGlzLmNsaWNrJC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2luZmluaXR5UXVlcnkubG9hZE5leHRQYWdlKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXR1cEludGVyc2VjdGlvbk9ic2VydmVyKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveS5uZXh0KHRydWUpO1xuICAgIHRoaXMuX2Rlc3Ryb3kudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9vYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlcigpOiB2b2lkIHtcbiAgICB0aGlzLl9vYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgIChlbnRyaWVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gZW50cmllc1swXTtcblxuICAgICAgICBpZiAoIWVudHJ5KSByZXR1cm47XG5cbiAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nICYmICF0aGlzLl9pbmZpbml0eVF1ZXJ5LmNvbnRleHQubG9hZGluZykge1xuICAgICAgICAgIHRoaXMuX2luZmluaXR5UXVlcnkubG9hZE5leHRQYWdlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHJvb3Q6IHRoaXMuc2Nyb2xsQ29udGFpbmVyU2VsZWN0b3IgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuc2Nyb2xsQ29udGFpbmVyU2VsZWN0b3IpIDogbnVsbCxcbiAgICAgICAgcm9vdE1hcmdpbjogJzBweCcsXG4gICAgICAgIHRocmVzaG9sZDogWzAuMjUsIDAuNSwgMC43NSwgMV0sXG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLl9vYnNlcnZlci5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -127,10 +127,10 @@ export class InfinityQueryDirective {
|
|
|
127
127
|
this._viewContext.currentQuery = null;
|
|
128
128
|
this._data$.next([]);
|
|
129
129
|
}
|
|
130
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.
|
|
131
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.
|
|
130
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: InfinityQueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
131
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.9", type: InfinityQueryDirective, isStandalone: true, selector: "[etInfinityQuery]", inputs: { infinityQuery: ["etInfinityQuery", "infinityQuery"] }, providers: [{ provide: INFINITY_QUERY_TOKEN, useExisting: InfinityQueryDirective }], exportAs: ["etInfinityQuery"], hostDirectives: [{ directive: i1.DelayableDirective }], ngImport: i0 }); }
|
|
132
132
|
}
|
|
133
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.
|
|
133
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: InfinityQueryDirective, decorators: [{
|
|
134
134
|
type: Directive,
|
|
135
135
|
args: [{
|
|
136
136
|
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
@@ -103,10 +103,10 @@ export class QueryDirective {
|
|
|
103
103
|
this._viewContainerRef.createEmbeddedView(this._mainTemplateRef, this._viewContext);
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.
|
|
107
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.
|
|
106
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: QueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
107
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.9", type: QueryDirective, isStandalone: true, selector: "[etQuery]", inputs: { query: ["etQuery", "query"], cache: ["etQueryCache", "cache"] }, ngImport: i0 }); }
|
|
108
108
|
}
|
|
109
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.
|
|
109
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: QueryDirective, decorators: [{
|
|
110
110
|
type: Directive,
|
|
111
111
|
args: [{
|
|
112
112
|
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
@@ -39,7 +39,6 @@ export class InfinityQuery {
|
|
|
39
39
|
this._currentCalculatedPage$ = new BehaviorSubject(null);
|
|
40
40
|
this._totalPages$ = new BehaviorSubject(null);
|
|
41
41
|
this._itemsPerPage$ = new BehaviorSubject(this._config.limitParam?.value ?? 10);
|
|
42
|
-
// FIXME: This will go boom with polling
|
|
43
42
|
this._data$ = this._queries$.pipe(switchMap((queries) => {
|
|
44
43
|
if (!queries.length) {
|
|
45
44
|
return of([]);
|
|
@@ -93,7 +92,7 @@ export class InfinityQuery {
|
|
|
93
92
|
totalPages: this.totalPages,
|
|
94
93
|
itemsPerPage: this.itemsPerPage,
|
|
95
94
|
}) ?? newPage;
|
|
96
|
-
if (this.totalPages !== null &&
|
|
95
|
+
if (this.totalPages !== null && newPage > this.totalPages) {
|
|
97
96
|
console.error('Cannot load more pages, already at the end. Make sure to not render the infinity query trigger using *ngIf canLoadMore');
|
|
98
97
|
return;
|
|
99
98
|
}
|
|
@@ -169,4 +168,4 @@ export class InfinityQuery {
|
|
|
169
168
|
}
|
|
170
169
|
}
|
|
171
170
|
}
|
|
172
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdHktcXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvaW5maW5pdGUtcXVlcnkvaW5maW5pdHktcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBYyxhQUFhLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4RyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBSXpDLE1BQU0sT0FBTyxhQUFhO0lBc0Z4QixJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSSxzQkFBc0I7UUFDeEIsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELElBQUkscUJBQXFCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDeEMs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UUFDekQsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgY29tYmluZUxhdGVzdCwgbWFwLCBvZiwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXJTdWNjZXNzIH0gZnJvbSAnLi4vcXVlcnknO1xuaW1wb3J0IHsgQW55UXVlcnlDcmVhdG9yLCBDb25zdHJ1Y3RRdWVyeSwgUXVlcnlBcmdzT2YsIFF1ZXJ5RGF0YU9mIH0gZnJvbSAnLi4vcXVlcnktY3JlYXRvcic7XG5pbXBvcnQgeyBJbmZpbml0eVF1ZXJ5Q29uZmlnLCBJbmZpbml0eVF1ZXJ5UGFyYW1Mb2NhdGlvbiB9IGZyb20gJy4vaW5maW5pdHktcXVlcnkudHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgSW5maW5pdHlRdWVyeTxcbiAgUXVlcnlDcmVhdG9yIGV4dGVuZHMgQW55UXVlcnlDcmVhdG9yLFxuICBRdWVyeSBleHRlbmRzIENvbnN0cnVjdFF1ZXJ5PFF1ZXJ5Q3JlYXRvcj4sXG4gIEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3NPZjxRdWVyeUNyZWF0b3I+LFxuICBRdWVyeVJlc3BvbnNlIGV4dGVuZHMgUXVlcnlEYXRhT2Y8UXVlcnlDcmVhdG9yPixcbiAgSW5maW5pdHlSZXNwb25zZSBleHRlbmRzIHVua25vd25bXSxcbj4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9xdWVyaWVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UXVlcnlbXT4oW10pO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdXJyZW50UGFnZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlciB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdXJyZW50Q2FsY3VsYXRlZFBhZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXIgfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdG90YWxQYWdlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlciB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pdGVtc1BlclBhZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KHRoaXMuX2NvbmZpZy5saW1pdFBhcmFtPy52YWx1ZSA/PyAxMCk7XG5cbiAgLy8gRklYTUU6IFRoaXMgd2lsbCBnbyBib29tIHdpdGggcG9sbGluZ1xuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhJCA9IHRoaXMuX3F1ZXJpZXMkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChxdWVyaWVzKSA9PiB7XG4gICAgICBpZiAoIXF1ZXJpZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFxuICAgICAgICBxdWVyaWVzLm1hcCgocXVlcnkpID0+XG4gICAgICAgICAgcXVlcnkuc3RhdGUkLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXJTdWNjZXNzKCksXG4gICAgICAgICAgICBtYXAoKHN0YXRlKSA9PiAoeyBzdGF0ZSwgcXVlcnkgfSkpLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0pLFxuICAgIHRhcCgoc3RhdGVNYXBzKSA9PiB7XG4gICAgICBjb25zdCBsYXN0U3RhdGUgPSBzdGF0ZU1hcHNbc3RhdGVNYXBzLmxlbmd0aCAtIDFdPy5zdGF0ZTtcbiAgICAgIGNvbnN0IGxhc3RRdWVyeSA9IHN0YXRlTWFwc1tzdGF0ZU1hcHMubGVuZ3RoIC0gMV0/LnF1ZXJ5O1xuXG4gICAgICBpZiAoIWxhc3RTdGF0ZSB8fCAhbGFzdFF1ZXJ5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdG90YWxQYWdlcyA9XG4gICAgICAgIHRoaXMuX2NvbmZpZy5yZXNwb25zZS50b3RhbFBhZ2VzRXh0cmFjdG9yPy4oe1xuICAgICAgICAgIHJlc3BvbnNlOiBsYXN0U3RhdGUucmVzcG9uc2UgYXMgUXVlcnlSZXNwb25zZSxcbiAgICAgICAgICBpdGVtc1BlclBhZ2U6IHRoaXMuaXRlbXNQZXJQYWdlLFxuICAgICAgICAgIGFyZ3M6IGxhc3RRdWVyeS5fYXJndW1lbnRzLFxuICAgICAgICB9KSA/P1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAobGFzdFN0YXRlLnJlc3BvbnNlIGFzIGFueSk/LnRvdGFsUGFnZXMgPz9cbiAgICAgICAgbnVsbDtcblxuICAgICAgdGhpcy5fdG90YWxQYWdlcyQubmV4dCh0b3RhbFBhZ2VzKTtcbiAgICB9KSxcbiAgICBtYXAoKHN0YXRlTWFwcykgPT4ge1xuICAgICAgaWYgKCFzdGF0ZU1hcHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmdWxsRGF0YSA9IHN0YXRlTWFwcy5yZWR1Y2UoXG4gICAgICAgIChhY2MsIHN0YXRlTWFwKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsRXh0cmFjdEZuID0gdGhpcy5fY29uZmlnPy5yZXNwb25zZT8udmFsdWVFeHRyYWN0b3I7XG4gICAgICAgICAgbGV0IGRhdGEgPSB2YWxFeHRyYWN0Rm5cbiAgICAgICAgICAgID8gdmFsRXh0cmFjdEZuPy4oc3RhdGVNYXAuc3RhdGUucmVzcG9uc2UgYXMgUXVlcnlSZXNwb25zZSlcbiAgICAgICAgICAgIDogKHN0YXRlTWFwLnN0YXRlLnJlc3BvbnNlIGFzIEluZmluaXR5UmVzcG9uc2UpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5yZXNwb25zZS5yZXZlcnNlKSB7XG4gICAgICAgICAgICBkYXRhID0gWy4uLmRhdGFdLnJldmVyc2UoKSBhcyBJbmZpbml0eVJlc3BvbnNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLl9jb25maWcucmVzcG9uc2UuYXBwZW5kSXRlbXNUbyA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICAgICAgYWNjLnVuc2hpZnQoLi4uZGF0YSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjYy5wdXNoKC4uLmRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBbXSBhcyBhbnkgYXMgSW5maW5pdHlSZXNwb25zZSxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBmdWxsRGF0YTtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pLFxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xhc3RRdWVyeSQgPSB0aGlzLl9xdWVyaWVzJC5waXBlKFxuICAgIG1hcCgocXVlcmllcykgPT4gcXVlcmllc1txdWVyaWVzLmxlbmd0aCAtIDFdID8/IG51bGwpLFxuICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICk7XG5cbiAgZ2V0IGN1cnJlbnRQYWdlJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFBhZ2UkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRQYWdlKCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50UGFnZSQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50Q2FsY3VsYXRlZFBhZ2UkKCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Q2FsY3VsYXRlZFBhZ2UkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRDYWxjdWxhdGVkUGFnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudENhbGN1bGF0ZWRQYWdlJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgZ2V0IHRvdGFsUGFnZXMkKCkge1xuICAgIHJldHVybiB0aGlzLl90b3RhbFBhZ2VzJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCB0b3RhbFBhZ2VzKCkge1xuICAgIHJldHVybiB0aGlzLl90b3RhbFBhZ2VzJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgZ2V0IGl0ZW1zUGVyUGFnZSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zUGVyUGFnZSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgaXRlbXNQZXJQYWdlKCkge1xuICAgIHJldHVybiB0aGlzLl9pdGVtc1BlclBhZ2UkLmdldFZhbHVlKCk7XG4gIH1cblxuICBnZXQgZGF0YSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEkO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRRdWVyeSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhc3RRdWVyeSQ7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9jb25maWc6IEluZmluaXR5UXVlcnlDb25maWc8UXVlcnlDcmVhdG9yLCBBcmdzLCBRdWVyeVJlc3BvbnNlLCBJbmZpbml0eVJlc3BvbnNlPixcbiAgICBwcml2YXRlIF9kZXN0cm95JDogT2JzZXJ2YWJsZTxib29sZWFuPixcbiAgKSB7fVxuXG4gIG5leHRQYWdlKCkge1xuICAgIGNvbnN0IG5ld1BhZ2UgPSAodGhpcy5fY3VycmVudFBhZ2UkLnZhbHVlID8/IDApICsgMTtcbiAgICBjb25zdCBjYWxjdWxhdGVkUGFnZSA9XG4gICAgICB0aGlzLl9jb25maWc/LnBhZ2VQYXJhbT8udmFsdWVDYWxjdWxhdG9yPy4oe1xuICAgICAgICBwYWdlOiBuZXdQYWdlLFxuICAgICAgICB0b3RhbFBhZ2VzOiB0aGlzLnRvdGFsUGFnZXMsXG4gICAgICAgIGl0ZW1zUGVyUGFnZTogdGhpcy5pdGVtc1BlclBhZ2UsXG4gICAgICB9KSA/PyBuZXdQYWdlO1xuXG4gICAgaWYgKHRoaXMudG90YWxQYWdlcyAhPT0gbnVsbCAmJiBjYWxjdWxhdGVkUGFnZSA+IHRoaXMudG90YWxQYWdlcykge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ0Nhbm5vdCBsb2FkIG1vcmUgcGFnZXMsIGFscmVhZHkgYXQgdGhlIGVuZC4gTWFrZSBzdXJlIHRvIG5vdCByZW5kZXIgdGhlIGluZmluaXR5IHF1ZXJ5IHRyaWdnZXIgdXNpbmcgKm5nSWYgY2FuTG9hZE1vcmUnLFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhcmdzID0gdGhpcy5fcHJlcGFyZUFyZ3ModGhpcy5fY29uZmlnLCBjYWxjdWxhdGVkUGFnZSk7XG5cbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuX2NvbmZpZy5xdWVyeUNyZWF0b3IucHJlcGFyZShhcmdzKS5leGVjdXRlKCkgYXMgUXVlcnk7XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnBvbGxpbmdJbnRlcnZhbCkge1xuICAgICAgcXVlcnkucG9sbCh7IGludGVydmFsOiB0aGlzLl9jb25maWcucG9sbGluZ0ludGVydmFsLCB0YWtlVW50aWw6IHRoaXMuX2Rlc3Ryb3kkIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX3F1ZXJpZXMkLm5leHQoWy4uLnRoaXMuX3F1ZXJpZXMkLnZhbHVlLCBxdWVyeV0pO1xuXG4gICAgdGhpcy5fY3VycmVudFBhZ2UkLm5leHQobmV3UGFnZSk7XG4gICAgdGhpcy5fY3VycmVudENhbGN1bGF0ZWRQYWdlJC5uZXh0KGNhbGN1bGF0ZWRQYWdlKTtcbiAgfVxuXG4gIHJlc2V0KFxuICAgIG5ld0NvbmZpZz86IE9taXQ8XG4gICAgICBJbmZpbml0eVF1ZXJ5Q29uZmlnPFF1ZXJ5Q3JlYXRvciwgQXJncywgUXVlcnlSZXNwb25zZSwgSW5maW5pdHlSZXNwb25zZT4sXG4gICAgICAncXVlcnlDcmVhdG9yJyB8ICdyZXNwb25zZSdcbiAgICA+LFxuICApIHtcbiAgICB0aGlzLl9jb25maWcgPSB7IC4uLnRoaXMuX2NvbmZpZywgLi4uKG5ld0NvbmZpZyA/PyB7fSkgfTtcblxuICAgIHRoaXMuX2N1cnJlbnRQYWdlJC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2N1cnJlbnRDYWxjdWxhdGVkUGFnZSQubmV4dChudWxsKTtcbiAgICB0aGlzLl90b3RhbFBhZ2VzJC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2l0ZW1zUGVyUGFnZSQubmV4dCh0aGlzLl9jb25maWcubGltaXRQYXJhbT8udmFsdWUgPz8gMTApO1xuICAgIHRoaXMuX3F1ZXJpZXMkLm5leHQoW10pO1xuXG4gICAgdGhpcy5uZXh0UGFnZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJlcGFyZUFyZ3MoY29uZmlnOiBJbmZpbml0eVF1ZXJ5Q29uZmlnPFF1ZXJ5Q3JlYXRvciwgQXJncywgUXVlcnlSZXNwb25zZSwgSW5maW5pdHlSZXNwb25zZT4sIHBhZ2U6IG51bWJlcikge1xuICAgIGNvbnN0IHBhZ2VQYXJhbUxvY2F0aW9uID0gdGhpcy5fZ2V0UGFnZVBhcmFtTG9jYXRpb24oY29uZmlnPy5wYWdlUGFyYW0/LmxvY2F0aW9uKTtcblxuICAgIGNvbnN0IHBhZ2VBcmdzID0ge1xuICAgICAgW3BhZ2VQYXJhbUxvY2F0aW9uXToge1xuICAgICAgICBbY29uZmlnPy5wYWdlUGFyYW0/LmtleSA/PyAncGFnZSddOiBwYWdlLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgbGltaXRQYXJhbUxvY2F0aW9uID0gdGhpcy5fZ2V0UGFnZVBhcmFtTG9jYXRpb24oY29uZmlnPy5saW1pdFBhcmFtPy5sb2NhdGlvbik7XG5cbiAgICBjb25zdCBsaW1pdEFyZ3MgPSB7XG4gICAgICBbbGltaXRQYXJhbUxvY2F0aW9uXToge1xuICAgICAgICBbY29uZmlnPy5saW1pdFBhcmFtPy5rZXkgPz8gJ2xpbWl0J106IGNvbmZpZz8ubGltaXRQYXJhbT8udmFsdWUgPz8gMTAsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBkZWZhdWx0Q29uZmlnID0gY29uZmlnPy5kZWZhdWx0QXJncyA/PyB7fTtcblxuICAgIGNvbnN0IG1lcmdlZEFyZ3MgPVxuICAgICAgcGFnZVBhcmFtTG9jYXRpb24gPT09IGxpbWl0UGFyYW1Mb2NhdGlvblxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLmRlZmF1bHRDb25maWcsXG4gICAgICAgICAgICBbcGFnZVBhcmFtTG9jYXRpb25dOiB7XG4gICAgICAgICAgICAgIC4uLihjb25maWc/LmRlZmF1bHRBcmdzPy5bcGFnZVBhcmFtTG9jYXRpb25dID8/IHt9KSxcbiAgICAgICAgICAgICAgLi4ucGFnZUFyZ3NbbGltaXRQYXJhbUxvY2F0aW9uXSxcbiAgICAgICAgICAgICAgLi4ubGltaXRBcmdzW2xpbWl0UGFyYW1Mb2NhdGlvbl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICAuLi5kZWZhdWx0Q29uZmlnLFxuICAgICAgICAgICAgW3BhZ2VQYXJhbUxvY2F0aW9uXToge1xuICAgICAgICAgICAgICAuLi4oY29uZmlnPy5kZWZhdWx0QXJncz8uW3BhZ2VQYXJhbUxvY2F0aW9uXSA/PyB7fSksXG4gICAgICAgICAgICAgIC4uLnBhZ2VBcmdzW3BhZ2VQYXJhbUxvY2F0aW9uXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbbGltaXRQYXJhbUxvY2F0aW9uXToge1xuICAgICAgICAgICAgICAuLi4oY29uZmlnPy5kZWZhdWx0QXJncz8uW2xpbWl0UGFyYW1Mb2NhdGlvbl0gPz8ge30pLFxuICAgICAgICAgICAgICAuLi5saW1pdEFyZ3NbbGltaXRQYXJhbUxvY2F0aW9uXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcblxuICAgIHJldHVybiBtZXJnZWRBcmdzO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UGFnZVBhcmFtTG9jYXRpb24obG9jYXRpb246IEluZmluaXR5UXVlcnlQYXJhbUxvY2F0aW9uIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgbG9jID0gbG9jYXRpb24gPz8gJ3F1ZXJ5JztcblxuICAgIHN3aXRjaCAobG9jKSB7XG4gICAgICBjYXNlICdwYXRoJzpcbiAgICAgICAgcmV0dXJuICdwYXRoUGFyYW1zJztcbiAgICAgIGNhc2UgJ3F1ZXJ5JzpcbiAgICAgICAgcmV0dXJuICdxdWVyeVBhcmFtcyc7XG4gICAgICBjYXNlICdib2R5JzpcbiAgICAgICAgcmV0dXJuICdib2R5JztcbiAgICAgIGNhc2UgJ2hlYWRlcic6XG4gICAgICAgIHJldHVybiAnaGVhZGVycyc7XG4gICAgICBjYXNlICd2YXJpYWJsZSc6XG4gICAgICAgIHJldHVybiAndmFyaWFibGVzJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYWdlUGFyYW1Mb2NhdGlvbjogJHtsb2N9YCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdHktcXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvaW5maW5pdGUtcXVlcnkvaW5maW5pdHktcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBYyxhQUFhLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4RyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBSXpDLE1BQU0sT0FBTyxhQUFhO0lBcUZ4QixJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSSxzQkFBc0I7UUFDeEIsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELElBQUkscUJBQXFCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDeEMs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Q0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBjb21iaW5lTGF0ZXN0LCBtYXAsIG9mLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlclN1Y2Nlc3MgfSBmcm9tICcuLi9xdWVyeSc7XG5pbXBvcnQgeyBBbnlRdWVyeUNyZWF0b3IsIENvbnN0cnVjdFF1ZXJ5LCBRdWVyeUFyZ3NPZiwgUXVlcnlEYXRhT2YgfSBmcm9tICcuLi9xdWVyeS1jcmVhdG9yJztcbmltcG9ydCB7IEluZmluaXR5UXVlcnlDb25maWcsIEluZmluaXR5UXVlcnlQYXJhbUxvY2F0aW9uIH0gZnJvbSAnLi9pbmZpbml0eS1xdWVyeS50eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBJbmZpbml0eVF1ZXJ5PFxuICBRdWVyeUNyZWF0b3IgZXh0ZW5kcyBBbnlRdWVyeUNyZWF0b3IsXG4gIFF1ZXJ5IGV4dGVuZHMgQ29uc3RydWN0UXVlcnk8UXVlcnlDcmVhdG9yPixcbiAgQXJncyBleHRlbmRzIFF1ZXJ5QXJnc09mPFF1ZXJ5Q3JlYXRvcj4sXG4gIFF1ZXJ5UmVzcG9uc2UgZXh0ZW5kcyBRdWVyeURhdGFPZjxRdWVyeUNyZWF0b3I+LFxuICBJbmZpbml0eVJlc3BvbnNlIGV4dGVuZHMgdW5rbm93bltdLFxuPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3F1ZXJpZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRdWVyeVtdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N1cnJlbnRQYWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N1cnJlbnRDYWxjdWxhdGVkUGFnZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlciB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b3RhbFBhZ2VzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2l0ZW1zUGVyUGFnZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4odGhpcy5fY29uZmlnLmxpbWl0UGFyYW0/LnZhbHVlID8/IDEwKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhJCA9IHRoaXMuX3F1ZXJpZXMkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChxdWVyaWVzKSA9PiB7XG4gICAgICBpZiAoIXF1ZXJpZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFxuICAgICAgICBxdWVyaWVzLm1hcCgocXVlcnkpID0+XG4gICAgICAgICAgcXVlcnkuc3RhdGUkLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXJTdWNjZXNzKCksXG4gICAgICAgICAgICBtYXAoKHN0YXRlKSA9PiAoeyBzdGF0ZSwgcXVlcnkgfSkpLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0pLFxuICAgIHRhcCgoc3RhdGVNYXBzKSA9PiB7XG4gICAgICBjb25zdCBsYXN0U3RhdGUgPSBzdGF0ZU1hcHNbc3RhdGVNYXBzLmxlbmd0aCAtIDFdPy5zdGF0ZTtcbiAgICAgIGNvbnN0IGxhc3RRdWVyeSA9IHN0YXRlTWFwc1tzdGF0ZU1hcHMubGVuZ3RoIC0gMV0/LnF1ZXJ5O1xuXG4gICAgICBpZiAoIWxhc3RTdGF0ZSB8fCAhbGFzdFF1ZXJ5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdG90YWxQYWdlcyA9XG4gICAgICAgIHRoaXMuX2NvbmZpZy5yZXNwb25zZS50b3RhbFBhZ2VzRXh0cmFjdG9yPy4oe1xuICAgICAgICAgIHJlc3BvbnNlOiBsYXN0U3RhdGUucmVzcG9uc2UgYXMgUXVlcnlSZXNwb25zZSxcbiAgICAgICAgICBpdGVtc1BlclBhZ2U6IHRoaXMuaXRlbXNQZXJQYWdlLFxuICAgICAgICAgIGFyZ3M6IGxhc3RRdWVyeS5fYXJndW1lbnRzLFxuICAgICAgICB9KSA/P1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAobGFzdFN0YXRlLnJlc3BvbnNlIGFzIGFueSk/LnRvdGFsUGFnZXMgPz9cbiAgICAgICAgbnVsbDtcblxuICAgICAgdGhpcy5fdG90YWxQYWdlcyQubmV4dCh0b3RhbFBhZ2VzKTtcbiAgICB9KSxcbiAgICBtYXAoKHN0YXRlTWFwcykgPT4ge1xuICAgICAgaWYgKCFzdGF0ZU1hcHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmdWxsRGF0YSA9IHN0YXRlTWFwcy5yZWR1Y2UoXG4gICAgICAgIChhY2MsIHN0YXRlTWFwKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsRXh0cmFjdEZuID0gdGhpcy5fY29uZmlnPy5yZXNwb25zZT8udmFsdWVFeHRyYWN0b3I7XG4gICAgICAgICAgbGV0IGRhdGEgPSB2YWxFeHRyYWN0Rm5cbiAgICAgICAgICAgID8gdmFsRXh0cmFjdEZuPy4oc3RhdGVNYXAuc3RhdGUucmVzcG9uc2UgYXMgUXVlcnlSZXNwb25zZSlcbiAgICAgICAgICAgIDogKHN0YXRlTWFwLnN0YXRlLnJlc3BvbnNlIGFzIEluZmluaXR5UmVzcG9uc2UpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5yZXNwb25zZS5yZXZlcnNlKSB7XG4gICAgICAgICAgICBkYXRhID0gWy4uLmRhdGFdLnJldmVyc2UoKSBhcyBJbmZpbml0eVJlc3BvbnNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLl9jb25maWcucmVzcG9uc2UuYXBwZW5kSXRlbXNUbyA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICAgICAgYWNjLnVuc2hpZnQoLi4uZGF0YSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjYy5wdXNoKC4uLmRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBbXSBhcyBhbnkgYXMgSW5maW5pdHlSZXNwb25zZSxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBmdWxsRGF0YTtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pLFxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xhc3RRdWVyeSQgPSB0aGlzLl9xdWVyaWVzJC5waXBlKFxuICAgIG1hcCgocXVlcmllcykgPT4gcXVlcmllc1txdWVyaWVzLmxlbmd0aCAtIDFdID8/IG51bGwpLFxuICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICk7XG5cbiAgZ2V0IGN1cnJlbnRQYWdlJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFBhZ2UkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRQYWdlKCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50UGFnZSQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50Q2FsY3VsYXRlZFBhZ2UkKCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Q2FsY3VsYXRlZFBhZ2UkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRDYWxjdWxhdGVkUGFnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudENhbGN1bGF0ZWRQYWdlJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgZ2V0IHRvdGFsUGFnZXMkKCkge1xuICAgIHJldHVybiB0aGlzLl90b3RhbFBhZ2VzJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCB0b3RhbFBhZ2VzKCkge1xuICAgIHJldHVybiB0aGlzLl90b3RhbFBhZ2VzJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgZ2V0IGl0ZW1zUGVyUGFnZSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zUGVyUGFnZSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgaXRlbXNQZXJQYWdlKCkge1xuICAgIHJldHVybiB0aGlzLl9pdGVtc1BlclBhZ2UkLmdldFZhbHVlKCk7XG4gIH1cblxuICBnZXQgZGF0YSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEkO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRRdWVyeSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhc3RRdWVyeSQ7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9jb25maWc6IEluZmluaXR5UXVlcnlDb25maWc8UXVlcnlDcmVhdG9yLCBBcmdzLCBRdWVyeVJlc3BvbnNlLCBJbmZpbml0eVJlc3BvbnNlPixcbiAgICBwcml2YXRlIF9kZXN0cm95JDogT2JzZXJ2YWJsZTxib29sZWFuPixcbiAgKSB7fVxuXG4gIG5leHRQYWdlKCkge1xuICAgIGNvbnN0IG5ld1BhZ2UgPSAodGhpcy5fY3VycmVudFBhZ2UkLnZhbHVlID8/IDApICsgMTtcbiAgICBjb25zdCBjYWxjdWxhdGVkUGFnZSA9XG4gICAgICB0aGlzLl9jb25maWc/LnBhZ2VQYXJhbT8udmFsdWVDYWxjdWxhdG9yPy4oe1xuICAgICAgICBwYWdlOiBuZXdQYWdlLFxuICAgICAgICB0b3RhbFBhZ2VzOiB0aGlzLnRvdGFsUGFnZXMsXG4gICAgICAgIGl0ZW1zUGVyUGFnZTogdGhpcy5pdGVtc1BlclBhZ2UsXG4gICAgICB9KSA/PyBuZXdQYWdlO1xuXG4gICAgaWYgKHRoaXMudG90YWxQYWdlcyAhPT0gbnVsbCAmJiBuZXdQYWdlID4gdGhpcy50b3RhbFBhZ2VzKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAnQ2Fubm90IGxvYWQgbW9yZSBwYWdlcywgYWxyZWFkeSBhdCB0aGUgZW5kLiBNYWtlIHN1cmUgdG8gbm90IHJlbmRlciB0aGUgaW5maW5pdHkgcXVlcnkgdHJpZ2dlciB1c2luZyAqbmdJZiBjYW5Mb2FkTW9yZScsXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFyZ3MgPSB0aGlzLl9wcmVwYXJlQXJncyh0aGlzLl9jb25maWcsIGNhbGN1bGF0ZWRQYWdlKTtcblxuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5fY29uZmlnLnF1ZXJ5Q3JlYXRvci5wcmVwYXJlKGFyZ3MpLmV4ZWN1dGUoKSBhcyBRdWVyeTtcblxuICAgIGlmICh0aGlzLl9jb25maWcucG9sbGluZ0ludGVydmFsKSB7XG4gICAgICBxdWVyeS5wb2xsKHsgaW50ZXJ2YWw6IHRoaXMuX2NvbmZpZy5wb2xsaW5nSW50ZXJ2YWwsIHRha2VVbnRpbDogdGhpcy5fZGVzdHJveSQgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcXVlcmllcyQubmV4dChbLi4udGhpcy5fcXVlcmllcyQudmFsdWUsIHF1ZXJ5XSk7XG5cbiAgICB0aGlzLl9jdXJyZW50UGFnZSQubmV4dChuZXdQYWdlKTtcbiAgICB0aGlzLl9jdXJyZW50Q2FsY3VsYXRlZFBhZ2UkLm5leHQoY2FsY3VsYXRlZFBhZ2UpO1xuICB9XG5cbiAgcmVzZXQoXG4gICAgbmV3Q29uZmlnPzogT21pdDxcbiAgICAgIEluZmluaXR5UXVlcnlDb25maWc8UXVlcnlDcmVhdG9yLCBBcmdzLCBRdWVyeVJlc3BvbnNlLCBJbmZpbml0eVJlc3BvbnNlPixcbiAgICAgICdxdWVyeUNyZWF0b3InIHwgJ3Jlc3BvbnNlJ1xuICAgID4sXG4gICkge1xuICAgIHRoaXMuX2NvbmZpZyA9IHsgLi4udGhpcy5fY29uZmlnLCAuLi4obmV3Q29uZmlnID8/IHt9KSB9O1xuXG4gICAgdGhpcy5fY3VycmVudFBhZ2UkLm5leHQobnVsbCk7XG4gICAgdGhpcy5fY3VycmVudENhbGN1bGF0ZWRQYWdlJC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX3RvdGFsUGFnZXMkLm5leHQobnVsbCk7XG4gICAgdGhpcy5faXRlbXNQZXJQYWdlJC5uZXh0KHRoaXMuX2NvbmZpZy5saW1pdFBhcmFtPy52YWx1ZSA/PyAxMCk7XG4gICAgdGhpcy5fcXVlcmllcyQubmV4dChbXSk7XG5cbiAgICB0aGlzLm5leHRQYWdlKCk7XG4gIH1cblxuICBwcml2YXRlIF9wcmVwYXJlQXJncyhjb25maWc6IEluZmluaXR5UXVlcnlDb25maWc8UXVlcnlDcmVhdG9yLCBBcmdzLCBRdWVyeVJlc3BvbnNlLCBJbmZpbml0eVJlc3BvbnNlPiwgcGFnZTogbnVtYmVyKSB7XG4gICAgY29uc3QgcGFnZVBhcmFtTG9jYXRpb24gPSB0aGlzLl9nZXRQYWdlUGFyYW1Mb2NhdGlvbihjb25maWc/LnBhZ2VQYXJhbT8ubG9jYXRpb24pO1xuXG4gICAgY29uc3QgcGFnZUFyZ3MgPSB7XG4gICAgICBbcGFnZVBhcmFtTG9jYXRpb25dOiB7XG4gICAgICAgIFtjb25maWc/LnBhZ2VQYXJhbT8ua2V5ID8/ICdwYWdlJ106IHBhZ2UsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBsaW1pdFBhcmFtTG9jYXRpb24gPSB0aGlzLl9nZXRQYWdlUGFyYW1Mb2NhdGlvbihjb25maWc/LmxpbWl0UGFyYW0/LmxvY2F0aW9uKTtcblxuICAgIGNvbnN0IGxpbWl0QXJncyA9IHtcbiAgICAgIFtsaW1pdFBhcmFtTG9jYXRpb25dOiB7XG4gICAgICAgIFtjb25maWc/LmxpbWl0UGFyYW0/LmtleSA/PyAnbGltaXQnXTogY29uZmlnPy5saW1pdFBhcmFtPy52YWx1ZSA/PyAxMCxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IGRlZmF1bHRDb25maWcgPSBjb25maWc/LmRlZmF1bHRBcmdzID8/IHt9O1xuXG4gICAgY29uc3QgbWVyZ2VkQXJncyA9XG4gICAgICBwYWdlUGFyYW1Mb2NhdGlvbiA9PT0gbGltaXRQYXJhbUxvY2F0aW9uXG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZGVmYXVsdENvbmZpZyxcbiAgICAgICAgICAgIFtwYWdlUGFyYW1Mb2NhdGlvbl06IHtcbiAgICAgICAgICAgICAgLi4uKGNvbmZpZz8uZGVmYXVsdEFyZ3M/LltwYWdlUGFyYW1Mb2NhdGlvbl0gPz8ge30pLFxuICAgICAgICAgICAgICAuLi5wYWdlQXJnc1tsaW1pdFBhcmFtTG9jYXRpb25dLFxuICAgICAgICAgICAgICAuLi5saW1pdEFyZ3NbbGltaXRQYXJhbUxvY2F0aW9uXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIC4uLmRlZmF1bHRDb25maWcsXG4gICAgICAgICAgICBbcGFnZVBhcmFtTG9jYXRpb25dOiB7XG4gICAgICAgICAgICAgIC4uLihjb25maWc/LmRlZmF1bHRBcmdzPy5bcGFnZVBhcmFtTG9jYXRpb25dID8/IHt9KSxcbiAgICAgICAgICAgICAgLi4ucGFnZUFyZ3NbcGFnZVBhcmFtTG9jYXRpb25dLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtsaW1pdFBhcmFtTG9jYXRpb25dOiB7XG4gICAgICAgICAgICAgIC4uLihjb25maWc/LmRlZmF1bHRBcmdzPy5bbGltaXRQYXJhbUxvY2F0aW9uXSA/PyB7fSksXG4gICAgICAgICAgICAgIC4uLmxpbWl0QXJnc1tsaW1pdFBhcmFtTG9jYXRpb25dLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIG1lcmdlZEFyZ3M7XG4gIH1cblxuICBwcml2YXRlIF9nZXRQYWdlUGFyYW1Mb2NhdGlvbihsb2NhdGlvbjogSW5maW5pdHlRdWVyeVBhcmFtTG9jYXRpb24gfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBsb2MgPSBsb2NhdGlvbiA/PyAncXVlcnknO1xuXG4gICAgc3dpdGNoIChsb2MpIHtcbiAgICAgIGNhc2UgJ3BhdGgnOlxuICAgICAgICByZXR1cm4gJ3BhdGhQYXJhbXMnO1xuICAgICAgY2FzZSAncXVlcnknOlxuICAgICAgICByZXR1cm4gJ3F1ZXJ5UGFyYW1zJztcbiAgICAgIGNhc2UgJ2JvZHknOlxuICAgICAgICByZXR1cm4gJ2JvZHknO1xuICAgICAgY2FzZSAnaGVhZGVyJzpcbiAgICAgICAgcmV0dXJuICdoZWFkZXJzJztcbiAgICAgIGNhc2UgJ3ZhcmlhYmxlJzpcbiAgICAgICAgcmV0dXJuICd2YXJpYWJsZXMnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhZ2VQYXJhbUxvY2F0aW9uOiAke2xvY31gKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
export const shouldCacheQuery = (method) => {
|
|
2
2
|
return method === 'GET' || method === 'OPTIONS' || method === 'HEAD' || method === 'GQL_QUERY';
|
|
3
3
|
};
|
|
4
|
-
export const
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
4
|
+
export const buildQueryCacheKey = (route, args) => {
|
|
5
|
+
const variables = JSON.stringify(args?.variables || {})
|
|
6
|
+
// replace all curly braces with empty string
|
|
7
|
+
.replace(/{|}/g, '')
|
|
8
|
+
// replace new lines and whitespaces with empty string
|
|
9
|
+
.replace(/\s/g, '');
|
|
10
|
+
const seed = `${route}...${variables}`;
|
|
11
|
+
let hash = 0;
|
|
12
|
+
for (const char of seed) {
|
|
13
|
+
hash = (Math.imul(31, hash) + char.charCodeAt(0)) << 0;
|
|
14
|
+
}
|
|
15
|
+
// Force positive number hash.
|
|
16
|
+
// 2147483647 = equivalent of Integer.MAX_VALUE.
|
|
17
|
+
hash += 2147483647 + 1;
|
|
18
|
+
return hash.toString();
|
|
13
19
|
};
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY2xpZW50LnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL3F1ZXJ5LWNsaWVudC9xdWVyeS1jbGllbnQudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRTtJQUNqRCxPQUFPLE1BQU0sS0FBSyxLQUFLLElBQUksTUFBTSxLQUFLLFNBQVMsSUFBSSxNQUFNLEtBQUssTUFBTSxJQUFJLE1BQU0sS0FBSyxXQUFXLENBQUM7QUFDakcsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxLQUFhLEVBQUUsSUFBK0IsRUFBRSxFQUFFO0lBQ25GLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDckQsNkNBQTZDO1NBQzVDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQ3BCLHNEQUFzRDtTQUNyRCxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRXRCLE1BQU0sSUFBSSxHQUFHLEdBQUcsS0FBSyxNQUFNLFNBQVMsRUFBRSxDQUFDO0lBRXZDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUViLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7UUFDeEIsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsOEJBQThCO0lBQzlCLGdEQUFnRDtJQUNoRCxJQUFJLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztJQUV2QixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN6QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQXJndW1lbnRzIH0gZnJvbSAnLi4vcXVlcnkvcXVlcnkudHlwZXMnO1xuaW1wb3J0IHsgTWV0aG9kIH0gZnJvbSAnLi4vcmVxdWVzdCc7XG5cbmV4cG9ydCBjb25zdCBzaG91bGRDYWNoZVF1ZXJ5ID0gKG1ldGhvZDogTWV0aG9kKSA9PiB7XG4gIHJldHVybiBtZXRob2QgPT09ICdHRVQnIHx8IG1ldGhvZCA9PT0gJ09QVElPTlMnIHx8IG1ldGhvZCA9PT0gJ0hFQUQnIHx8IG1ldGhvZCA9PT0gJ0dRTF9RVUVSWSc7XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRRdWVyeUNhY2hlS2V5ID0gKHJvdXRlOiBzdHJpbmcsIGFyZ3M6IEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQpID0+IHtcbiAgY29uc3QgdmFyaWFibGVzID0gSlNPTi5zdHJpbmdpZnkoYXJncz8udmFyaWFibGVzIHx8IHt9KVxuICAgIC8vIHJlcGxhY2UgYWxsIGN1cmx5IGJyYWNlcyB3aXRoIGVtcHR5IHN0cmluZ1xuICAgIC5yZXBsYWNlKC97fH0vZywgJycpXG4gICAgLy8gcmVwbGFjZSBuZXcgbGluZXMgYW5kIHdoaXRlc3BhY2VzIHdpdGggZW1wdHkgc3RyaW5nXG4gICAgLnJlcGxhY2UoL1xccy9nLCAnJyk7XG5cbiAgY29uc3Qgc2VlZCA9IGAke3JvdXRlfS4uLiR7dmFyaWFibGVzfWA7XG5cbiAgbGV0IGhhc2ggPSAwO1xuXG4gIGZvciAoY29uc3QgY2hhciBvZiBzZWVkKSB7XG4gICAgaGFzaCA9IChNYXRoLmltdWwoMzEsIGhhc2gpICsgY2hhci5jaGFyQ29kZUF0KDApKSA8PCAwO1xuICB9XG5cbiAgLy8gRm9yY2UgcG9zaXRpdmUgbnVtYmVyIGhhc2guXG4gIC8vIDIxNDc0ODM2NDcgPSBlcXVpdmFsZW50IG9mIEludGVnZXIuTUFYX1ZBTFVFLlxuICBoYXNoICs9IDIxNDc0ODM2NDcgKyAxO1xuXG4gIHJldHVybiBoYXNoLnRvU3RyaW5nKCk7XG59O1xuIl19
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { assertInInjectionContext, signal } from '@angular/core';
|
|
2
2
|
import { toObservable } from '@angular/core/rxjs-interop';
|
|
3
3
|
import { BehaviorSubject } from 'rxjs';
|
|
4
|
-
import { Query, computeQueryQueryParams
|
|
5
|
-
import {
|
|
4
|
+
import { Query, computeQueryQueryParams } from '../query';
|
|
5
|
+
import { buildQueryCacheKey, shouldCacheQuery } from '../query-client';
|
|
6
6
|
import { buildRoute } from '../request';
|
|
7
7
|
import { addQueryContainerHandling } from '../utils';
|
|
8
8
|
export class QueryCreator {
|
|
@@ -20,8 +20,7 @@ export class QueryCreator {
|
|
|
20
20
|
queryParams: computeQueryQueryParams({ config: this._queryConfig, client: this._client, args }),
|
|
21
21
|
queryParamConfig: this._client.config.request?.queryParams,
|
|
22
22
|
});
|
|
23
|
-
const cacheKey = (args?.config?.queryStoreCacheKey ?? '') +
|
|
24
|
-
(isGqlQueryConfig(this._queryConfig) ? buildGqlCacheKey(this._queryConfig, args) : route);
|
|
23
|
+
const cacheKey = (args?.config?.queryStoreCacheKey ?? '') + buildQueryCacheKey(route, args);
|
|
25
24
|
if (shouldCacheQuery(this._queryConfig.method) && !args?.config?.skipQueryStore) {
|
|
26
25
|
const existingQuery = this._store.get(cacheKey);
|
|
27
26
|
if (existingQuery) {
|
|
@@ -53,4 +52,4 @@ export class QueryCreator {
|
|
|
53
52
|
this.behaviorSubject = (initialValue) => new BehaviorSubject(initialValue ?? null);
|
|
54
53
|
}
|
|
55
54
|
}
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY3JlYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9xdWVyeS1jcmVhdG9yL3F1ZXJ5LWNyZWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzFELE9BQU8sRUFBZSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBWXBGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDeEMsT0FBTyxFQUF3Qix5QkFBeUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUczRSxNQUFNLE9BQU8sWUFBWTtJQVF2QixZQUNVLFlBRXVELEVBQ3ZELE9BQW9CLEVBQ3BCLE1BQWtCO1FBSmxCLGlCQUFZLEdBQVosWUFBWSxDQUUyQztRQUN2RCxZQUFPLEdBQVAsT0FBTyxDQUFhO1FBQ3BCLFdBQU0sR0FBTixNQUFNLENBQVk7UUFHNUIsNkRBQTZEO1FBQzdELGFBQWE7UUFDYixZQUFPLEdBQWdFLENBQ3JFLElBQWdFLEVBQ2hFLEVBQUU7WUFDRixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUM7Z0JBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTO2dCQUNuQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFpQjtnQkFDMUMsVUFBVSxFQUFFLElBQUksRUFBRSxVQUFVO2dCQUM1QixXQUFXLEVBQUUsdUJBQXVCLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDL0YsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLFdBQVc7YUFDM0QsQ0FBVSxDQUFDO1lBRVosTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixJQUFJLEVBQUUsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLEtBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUV0RyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxDQUFDO2dCQUNoRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBcUQsUUFBUSxDQUFDLENBQUM7Z0JBRXBHLElBQUksYUFBYSxFQUFFLENBQUM7b0JBQ2xCLE9BQU8sYUFBYSxDQUFDO2dCQUN2QixDQUFDO1lBQ0gsQ0FBQztZQUVELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUNyQixJQUFJLENBQUMsT0FBTyxFQUNaLElBQUksQ0FBQyxZQUFZLEVBQ2pCLEtBQUssRUFDTCxJQUFJLElBQUssRUFBZ0IsRUFDekIsUUFBUSxDQUNULENBQUM7WUFFRixJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxDQUFDO2dCQUNoRixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbkMsQ0FBQztZQUVELElBQUksQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFekMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUM7UUFFRixrQkFBYSxHQUFHLENBQUMsWUFBcUQsRUFBRSxNQUE2QixFQUFFLEVBQUU7WUFDdkcsd0JBQXdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBRTdDLE1BQU0sT0FBTyxHQUFHLElBQUksZUFBZSxDQUF5QyxZQUFZLElBQUksSUFBSSxDQUFDLENBQUM7WUFFbEcseUJBQXlCLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUVyRSxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLENBQUM7UUFFRixpQkFBWSxHQUFHLENBQUMsWUFBcUQsRUFBRSxNQUE2QixFQUFFLEVBQUU7WUFDdEcsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRTVDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBeUMsWUFBWSxJQUFJLElBQUksQ0FBQyxDQUFDO1lBRXJGLHlCQUF5QixDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUUxRSxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLENBQUM7UUFFRjs7V0FFRztRQUNILG9CQUFlLEdBQUcsQ0FBQyxZQUFxRCxFQUFFLEVBQUUsQ0FDMUUsSUFBSSxlQUFlLENBQXlDLFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQztJQWxFakYsQ0FBQztDQW1FTCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVudGl0eVN0b3JlIH0gZnJvbSAnLi4vZW50aXR5JztcbmltcG9ydCB7IFF1ZXJ5LCBjb21wdXRlUXVlcnlRdWVyeVBhcmFtcyB9IGZyb20gJy4uL3F1ZXJ5JztcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBidWlsZFF1ZXJ5Q2FjaGVLZXksIHNob3VsZENhY2hlUXVlcnkgfSBmcm9tICcuLi9xdWVyeS1jbGllbnQnO1xuaW1wb3J0IHsgUXVlcnlTdG9yZSB9IGZyb20gJy4uL3F1ZXJ5LXN0b3JlJztcbmltcG9ydCB7XG4gIEFueVJvdXRlLFxuICBCYXNlQXJndW1lbnRzLFxuICBHcWxRdWVyeUNvbmZpZyxcbiAgUmVzdFF1ZXJ5Q29uZmlnLFxuICBSb3V0ZVR5cGUsXG4gIFdpdGhDb25maWcsXG4gIFdpdGhIZWFkZXJzLFxuICBXaXRoTW9jayxcbn0gZnJvbSAnLi4vcXVlcnkvcXVlcnkudHlwZXMnO1xuaW1wb3J0IHsgYnVpbGRSb3V0ZSB9IGZyb20gJy4uL3JlcXVlc3QnO1xuaW1wb3J0IHsgUXVlcnlDb250YWluZXJDb25maWcsIGFkZFF1ZXJ5Q29udGFpbmVySGFuZGxpbmcgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBRdWVyeVByZXBhcmVGbiB9IGZyb20gJy4vcXVlcnktY3JlYXRvci50eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeUNyZWF0b3I8XG4gIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIFJlc3BvbnNlLFxuICBSb3V0ZSBleHRlbmRzIFJvdXRlVHlwZTxBcmd1bWVudHM+LFxuICBTdG9yZSBleHRlbmRzIEVudGl0eVN0b3JlPHVua25vd24+LFxuICBEYXRhLFxuICBJZCxcbj4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9xdWVyeUNvbmZpZzpcbiAgICAgIHwgUmVzdFF1ZXJ5Q29uZmlnPFJvdXRlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+XG4gICAgICB8IEdxbFF1ZXJ5Q29uZmlnPFJvdXRlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+LFxuICAgIHByaXZhdGUgX2NsaWVudDogUXVlcnlDbGllbnQsXG4gICAgcHJpdmF0ZSBfc3RvcmU6IFF1ZXJ5U3RvcmUsXG4gICkge31cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gIC8vIEB0cy1pZ25vcmVcbiAgcHJlcGFyZTogUXVlcnlQcmVwYXJlRm48QXJndW1lbnRzLCBSZXNwb25zZSwgUm91dGUsIFN0b3JlLCBEYXRhLCBJZD4gPSAoXG4gICAgYXJncz86IEFyZ3VtZW50cyAmIFdpdGhIZWFkZXJzICYgV2l0aENvbmZpZyAmIFdpdGhNb2NrPFJlc3BvbnNlPixcbiAgKSA9PiB7XG4gICAgY29uc3Qgcm91dGUgPSBidWlsZFJvdXRlKHtcbiAgICAgIGJhc2U6IHRoaXMuX2NsaWVudC5jb25maWcuYmFzZVJvdXRlLFxuICAgICAgcm91dGU6IHRoaXMuX3F1ZXJ5Q29uZmlnLnJvdXRlIGFzIEFueVJvdXRlLFxuICAgICAgcGF0aFBhcmFtczogYXJncz8ucGF0aFBhcmFtcyxcbiAgICAgIHF1ZXJ5UGFyYW1zOiBjb21wdXRlUXVlcnlRdWVyeVBhcmFtcyh7IGNvbmZpZzogdGhpcy5fcXVlcnlDb25maWcsIGNsaWVudDogdGhpcy5fY2xpZW50LCBhcmdzIH0pLFxuICAgICAgcXVlcnlQYXJhbUNvbmZpZzogdGhpcy5fY2xpZW50LmNvbmZpZy5yZXF1ZXN0Py5xdWVyeVBhcmFtcyxcbiAgICB9KSBhcyBSb3V0ZTtcblxuICAgIGNvbnN0IGNhY2hlS2V5ID0gKGFyZ3M/LmNvbmZpZz8ucXVlcnlTdG9yZUNhY2hlS2V5ID8/ICcnKSArIGJ1aWxkUXVlcnlDYWNoZUtleShyb3V0ZSBhcyBzdHJpbmcsIGFyZ3MpO1xuXG4gICAgaWYgKHNob3VsZENhY2hlUXVlcnkodGhpcy5fcXVlcnlDb25maWcubWV0aG9kKSAmJiAhYXJncz8uY29uZmlnPy5za2lwUXVlcnlTdG9yZSkge1xuICAgICAgY29uc3QgZXhpc3RpbmdRdWVyeSA9IHRoaXMuX3N0b3JlLmdldDxRdWVyeTxSZXNwb25zZSwgQXJndW1lbnRzLCBSb3V0ZSwgU3RvcmUsIERhdGEsIElkPj4oY2FjaGVLZXkpO1xuXG4gICAgICBpZiAoZXhpc3RpbmdRdWVyeSkge1xuICAgICAgICByZXR1cm4gZXhpc3RpbmdRdWVyeTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeSA9IG5ldyBRdWVyeTxSZXNwb25zZSwgQXJndW1lbnRzLCBSb3V0ZSwgU3RvcmUsIERhdGEsIElkPihcbiAgICAgIHRoaXMuX2NsaWVudCxcbiAgICAgIHRoaXMuX3F1ZXJ5Q29uZmlnLFxuICAgICAgcm91dGUsXG4gICAgICBhcmdzID8/ICh7fSBhcyBBcmd1bWVudHMpLFxuICAgICAgY2FjaGVLZXksXG4gICAgKTtcblxuICAgIGlmIChzaG91bGRDYWNoZVF1ZXJ5KHRoaXMuX3F1ZXJ5Q29uZmlnLm1ldGhvZCkgJiYgIWFyZ3M/LmNvbmZpZz8uc2tpcFF1ZXJ5U3RvcmUpIHtcbiAgICAgIHRoaXMuX3N0b3JlLmFkZChjYWNoZUtleSwgcXVlcnkpO1xuICAgIH1cblxuICAgIHRoaXMuX3N0b3JlLl9kaXNwYXRjaFF1ZXJ5Q3JlYXRlZChxdWVyeSk7XG5cbiAgICByZXR1cm4gcXVlcnk7XG4gIH07XG5cbiAgY3JlYXRlU3ViamVjdCA9IChpbml0aWFsVmFsdWU/OiBSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLnByZXBhcmU+IHwgbnVsbCwgY29uZmlnPzogUXVlcnlDb250YWluZXJDb25maWcpID0+IHtcbiAgICBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQodGhpcy5jcmVhdGVTdWJqZWN0KTtcblxuICAgIGNvbnN0IHN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJldHVyblR5cGU8dHlwZW9mIHRoaXMucHJlcGFyZT4gfCBudWxsPihpbml0aWFsVmFsdWUgPz8gbnVsbCk7XG5cbiAgICBhZGRRdWVyeUNvbnRhaW5lckhhbmRsaW5nKHN1YmplY3QsICgpID0+IHN1YmplY3QuZ2V0VmFsdWUoKSwgY29uZmlnKTtcblxuICAgIHJldHVybiBzdWJqZWN0O1xuICB9O1xuXG4gIGNyZWF0ZVNpZ25hbCA9IChpbml0aWFsVmFsdWU/OiBSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLnByZXBhcmU+IHwgbnVsbCwgY29uZmlnPzogUXVlcnlDb250YWluZXJDb25maWcpID0+IHtcbiAgICBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQodGhpcy5jcmVhdGVTaWduYWwpO1xuXG4gICAgY29uc3QgX3NpZ25hbCA9IHNpZ25hbDxSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLnByZXBhcmU+IHwgbnVsbD4oaW5pdGlhbFZhbHVlID8/IG51bGwpO1xuXG4gICAgYWRkUXVlcnlDb250YWluZXJIYW5kbGluZyh0b09ic2VydmFibGUoX3NpZ25hbCksICgpID0+IF9zaWduYWwoKSwgY29uZmlnKTtcblxuICAgIHJldHVybiBfc2lnbmFsO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYG15UXVlcnkuY3JlYXRlU3ViamVjdCgpYCBvciBgbXlRdWVyeS5jcmVhdGVTaWduYWwoKWAgaW5zdGVhZC4gV2lsbCBiZSByZW1vdmVkIGluIHY2LlxuICAgKi9cbiAgYmVoYXZpb3JTdWJqZWN0ID0gKGluaXRpYWxWYWx1ZT86IFJldHVyblR5cGU8dHlwZW9mIHRoaXMucHJlcGFyZT4gfCBudWxsKSA9PlxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8UmV0dXJuVHlwZTx0eXBlb2YgdGhpcy5wcmVwYXJlPiB8IG51bGw+KGluaXRpYWxWYWx1ZSA/PyBudWxsKTtcbn1cbiJdfQ==
|