@ethlete/query-devtools 1.0.0-next.1 → 1.0.0-next.10
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 +94 -0
- package/fesm2022/ethlete-query-devtools-lazy.mjs +4 -2
- package/fesm2022/ethlete-query-devtools-lazy.mjs.map +1 -1
- package/fesm2022/ethlete-query-devtools-toggle.mjs +12 -3
- package/fesm2022/ethlete-query-devtools-toggle.mjs.map +1 -1
- package/fesm2022/ethlete-query-devtools.mjs +1404 -711
- package/fesm2022/ethlete-query-devtools.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ethlete-query-devtools-toggle.d.ts +4 -0
- package/types/ethlete-query-devtools.d.ts +176 -24
package/package.json
CHANGED
|
@@ -12,6 +12,10 @@ declare const queryDevtoolsShortcutLabel: () => "⌘⌥Q" | "Ctrl+Alt+Q";
|
|
|
12
12
|
* host application's global CSS (Tailwind resets, button styles, …) can never touch it and its own
|
|
13
13
|
* styles can never leak out. Uses px (not rem) internally so it doesn't depend on the host's root
|
|
14
14
|
* font-size; theme accent colour is read from an inherited custom property with a fallback.
|
|
15
|
+
*
|
|
16
|
+
* Mounted on its own - without `<et-query-devtools-lazy>` or `<et-query-devtools>` - it declares no
|
|
17
|
+
* devtools UI, so the floating API env and session pills take themselves off the page once the
|
|
18
|
+
* application settles. Call `setQueryDevtoolsUiMounted(true)` to keep them.
|
|
15
19
|
*/
|
|
16
20
|
declare class QueryDevtoolsToggleComponent {
|
|
17
21
|
tampered: _angular_core.InputSignal<boolean>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
2
|
import { Signal, WritableSignal, OnInit } from '@angular/core';
|
|
3
3
|
import * as _ethlete_query from '@ethlete/query';
|
|
4
|
-
import { JsonPath, QueryDevtoolsOverridesRecorder, QueryRefreshCause, QueryRepositoryEntryDestroyedCause, Query, QueryRepositoryCacheEntry, HttpRequestRetryState, HttpRequestLoadingProgressState, QueryDevtoolsStats, QueryDevtoolsStatsHandle, QueryDevtoolsEntry, QueryRepository, QueryClient, QueryKeyLockState, QueryDevtoolsFeature, QueryDevtoolsFault, AnyQueryStack, AnyPagedQueryStack, QuerySequence, AnyBearerAuthProvider, WebSocketDevtoolsHandle, QueryDevtoolsFormHandle, QuerySequenceStatus, AnyQuerySnapshot, QueryDevtoolsRun, QueryDevtoolsRunError, WebSocketDevtoolsMessage, QueryDevtoolsStorageScope } from '@ethlete/query';
|
|
4
|
+
import { JsonPath, QueryDevtoolsOverridesRecorder, QueryRefreshCause, QueryRepositoryEntryDestroyedCause, Query, QueryRepositoryCacheEntry, HttpRequestRetryState, HttpRequestLoadingProgressState, QueryDevtoolsStats, QueryDevtoolsStatsHandle, QueryDevtoolsEntry, AnyQueryBatchItemResult, QueryRepository, QueryClient, QueryKeyLockState, QueryDevtoolsFeature, QueryDevtoolsFault, AnyQueryStack, AnyPagedQueryStack, QuerySequence, AnyQueryBatch, AnyBearerAuthProvider, WebSocketDevtoolsHandle, QueryDevtoolsFormHandle, QuerySequenceStatus, AnyQuerySnapshot, QueryDevtoolsRun, QueryDevtoolsRunError, WebSocketDevtoolsMessage, QueryDevtoolsStorageScope, QueryDevtoolsApiEnvSwitch } from '@ethlete/query';
|
|
5
5
|
import { ResizeEdge, DragMoveEvent, ResizeMoveEvent } from '@ethlete/core';
|
|
6
6
|
|
|
7
7
|
type AboutRow = {
|
|
@@ -82,7 +82,10 @@ declare class QueryDevtoolsJsonComponent {
|
|
|
82
82
|
private shapePath;
|
|
83
83
|
protected annotation: _angular_core.Signal<string | null>;
|
|
84
84
|
protected annotationTitle: _angular_core.Signal<string>;
|
|
85
|
-
/**
|
|
85
|
+
/**
|
|
86
|
+
* A `Date` is object-typed but has nothing to expand into, so it renders as a leaf. A resolved
|
|
87
|
+
* header provider is the other way round: a function that does expand.
|
|
88
|
+
*/
|
|
86
89
|
protected isContainer: _angular_core.Signal<boolean>;
|
|
87
90
|
/** The entries this node covers: the container's own, or just the window a chunk stands for. */
|
|
88
91
|
ownEntries: _angular_core.Signal<JsonEntry[]>;
|
|
@@ -93,7 +96,7 @@ declare class QueryDevtoolsJsonComponent {
|
|
|
93
96
|
private togglePath;
|
|
94
97
|
private defaultExpanded;
|
|
95
98
|
private localExpanded;
|
|
96
|
-
|
|
99
|
+
private expanded;
|
|
97
100
|
/** Only slices that actually contain a match unfold while searching, so a filter stays cheap. */
|
|
98
101
|
private chunkHasHit;
|
|
99
102
|
protected effectiveExpanded: _angular_core.Signal<boolean>;
|
|
@@ -202,7 +205,7 @@ type QueryDevtoolsSelection = {
|
|
|
202
205
|
* to count, so the badge/overflow logic would push it behind **More** - it is reached from the header's
|
|
203
206
|
* gear instead.
|
|
204
207
|
*/
|
|
205
|
-
type DevtoolsTab = 'queries' | 'stacks' | 'sequences' | 'forms' | 'auth' | 'ws' | 'cache' | 'locks' | 'timeline' | 'events' | 'faults' | 'mocks' | 'about' | 'settings';
|
|
208
|
+
type DevtoolsTab = 'queries' | 'stacks' | 'sequences' | 'batches' | 'forms' | 'auth' | 'ws' | 'cache' | 'locks' | 'timeline' | 'events' | 'faults' | 'mocks' | 'about' | 'settings';
|
|
206
209
|
/**
|
|
207
210
|
* The sections of the query detail drawer. The head and its actions stay pinned above them - the detail
|
|
208
211
|
* holds more than fits a column, and everything below the actions is reading material.
|
|
@@ -261,6 +264,20 @@ type QueryLink = {
|
|
|
261
264
|
clientBaseUrl: string;
|
|
262
265
|
stats?: QueryDevtoolsStatsHandle;
|
|
263
266
|
};
|
|
267
|
+
/** One settled item of a query batch, with the route the args it was sent with resolve to. */
|
|
268
|
+
type BatchItemRow = {
|
|
269
|
+
result: AnyQueryBatchItemResult;
|
|
270
|
+
segments: RouteSegment[];
|
|
271
|
+
};
|
|
272
|
+
/**
|
|
273
|
+
* A batch's settled items as its card lists them. Capped, and `hidden` says by how much - a bulk run
|
|
274
|
+
* settles more items than a list can hold, and a truncated one must not read as the whole run.
|
|
275
|
+
*/
|
|
276
|
+
type BatchItemView = {
|
|
277
|
+
rows: BatchItemRow[];
|
|
278
|
+
total: number;
|
|
279
|
+
hidden: number;
|
|
280
|
+
};
|
|
264
281
|
/**
|
|
265
282
|
* Query stats plus the numbers the panel derives from them rather than storing: an execution that never
|
|
266
283
|
* reached the network was answered from the cache, and the averages come from the running totals.
|
|
@@ -391,6 +408,7 @@ type QueryDevtoolsHost = {
|
|
|
391
408
|
queryEntries: Signal<QueryDevtoolsEntry[]>;
|
|
392
409
|
stackEntries: Signal<QueryDevtoolsEntry[]>;
|
|
393
410
|
sequenceEntries: Signal<QueryDevtoolsEntry[]>;
|
|
411
|
+
batchEntries: Signal<QueryDevtoolsEntry[]>;
|
|
394
412
|
formEntries: Signal<QueryDevtoolsEntry[]>;
|
|
395
413
|
authEntries: Signal<QueryDevtoolsEntry[]>;
|
|
396
414
|
wsEntries: Signal<QueryDevtoolsEntry[]>;
|
|
@@ -450,6 +468,7 @@ type QueryDevtoolsHost = {
|
|
|
450
468
|
asStack(entry: QueryDevtoolsEntry): AnyQueryStack;
|
|
451
469
|
asPagedStack(entry: QueryDevtoolsEntry): AnyPagedQueryStack;
|
|
452
470
|
asSequence(entry: QueryDevtoolsEntry): QuerySequence<unknown[]>;
|
|
471
|
+
asBatch(entry: QueryDevtoolsEntry): AnyQueryBatch;
|
|
453
472
|
asAuth(entry: QueryDevtoolsEntry): AnyBearerAuthProvider;
|
|
454
473
|
asWs(entry: QueryDevtoolsEntry): WebSocketDevtoolsHandle;
|
|
455
474
|
asForm(entry: QueryDevtoolsEntry): QueryDevtoolsFormHandle;
|
|
@@ -475,6 +494,11 @@ type QueryDevtoolsHost = {
|
|
|
475
494
|
requestUrl(query: AnyQuery): string | null;
|
|
476
495
|
requestPath(url: string): string;
|
|
477
496
|
queryArgs(query: AnyQuery): unknown;
|
|
497
|
+
/**
|
|
498
|
+
* The headers the query's last run sent, or - before it has run - the ones its args and its client
|
|
499
|
+
* resolve to now. `null` when there are none, or while a header provider cannot resolve yet.
|
|
500
|
+
*/
|
|
501
|
+
requestHeaders(query: AnyQuery): Record<string, string> | null;
|
|
478
502
|
routeSegments(entry: QueryDevtoolsEntry | undefined, query: AnyQuery): RouteSegment[];
|
|
479
503
|
queryActivity(entry: QueryDevtoolsEntry): QueryActivity;
|
|
480
504
|
linkActivity(link: QueryLink): QueryActivity;
|
|
@@ -492,6 +516,30 @@ type QueryDevtoolsHost = {
|
|
|
492
516
|
/** Whether a sequence step's in/out detail (`<entryId>:<stepIndex>`) is expanded - persisted. */
|
|
493
517
|
isStepExpanded(entryId: string, index: number): boolean;
|
|
494
518
|
toggleStep(entryId: string, index: number): void;
|
|
519
|
+
/** A batch's route with its path params left as `:name` - a batch fills them in per item, not once. */
|
|
520
|
+
batchRouteSegments(entry: QueryDevtoolsEntry): RouteSegment[];
|
|
521
|
+
/**
|
|
522
|
+
* The batch entry that created a query, or `null` for a query no batch did. What lets the Queries list
|
|
523
|
+
* fold a bulk run's items under one row instead of listing whatever it has in flight.
|
|
524
|
+
*/
|
|
525
|
+
batchOf(entry: QueryDevtoolsEntry): QueryDevtoolsEntry | null;
|
|
526
|
+
/**
|
|
527
|
+
* The item queries a batch has in flight. Only those: a batch destroys each item's query the moment
|
|
528
|
+
* that item settles, so a settled item is read from {@link batchItems} instead.
|
|
529
|
+
*/
|
|
530
|
+
queriesForBatch(entry: QueryDevtoolsEntry): QueryLink[];
|
|
531
|
+
/** A batch's settled items, failures first and capped - see {@link BatchItemView}. */
|
|
532
|
+
batchItems(entry: QueryDevtoolsEntry): BatchItemView;
|
|
533
|
+
/**
|
|
534
|
+
* The registry entry of one of a batch's items, or `null` once it has fallen out of the batch's capped
|
|
535
|
+
* tombstone tail - which is what makes an item row openable only while its query is still kept.
|
|
536
|
+
*/
|
|
537
|
+
batchItemQueryId(entry: QueryDevtoolsEntry, index: number): string | null;
|
|
538
|
+
/** An item's throughput line (`12.4 items/s · ~8s left`), or `null` before there is a rate to show. */
|
|
539
|
+
batchThroughput(batch: AnyQueryBatch): string | null;
|
|
540
|
+
/** Whether a batch item's args/response detail (`<entryId>:<itemIndex>`) is expanded - persisted. */
|
|
541
|
+
isBatchItemExpanded(entryId: string, index: number): boolean;
|
|
542
|
+
toggleBatchItem(entryId: string, index: number): void;
|
|
495
543
|
/** Keys of the Queries-list groups of identical rows the user opened - persisted. */
|
|
496
544
|
expandedQueryGroups: Signal<ReadonlySet<string>>;
|
|
497
545
|
toggleQueryGroup(key: string): void;
|
|
@@ -632,6 +680,16 @@ type QueryDevtoolsHost = {
|
|
|
632
680
|
entry: QueryDevtoolsEntry;
|
|
633
681
|
query: AnyQuery;
|
|
634
682
|
} | null>;
|
|
683
|
+
batchSelectedQueryId: WritableSignal<string | null>;
|
|
684
|
+
batchSelectedQuery: Signal<{
|
|
685
|
+
entry: QueryDevtoolsEntry;
|
|
686
|
+
query: AnyQuery;
|
|
687
|
+
} | null>;
|
|
688
|
+
eventSelectedQueryId: WritableSignal<string | null>;
|
|
689
|
+
eventSelectedQuery: Signal<{
|
|
690
|
+
entry: QueryDevtoolsEntry;
|
|
691
|
+
query: AnyQuery;
|
|
692
|
+
} | null>;
|
|
635
693
|
formSelectedQueryId: WritableSignal<string | null>;
|
|
636
694
|
formSelectedQuery: Signal<{
|
|
637
695
|
entry: QueryDevtoolsEntry;
|
|
@@ -673,7 +731,7 @@ type QueryDevtoolsHost = {
|
|
|
673
731
|
resetPaneSize(pane: PaneTarget): void;
|
|
674
732
|
};
|
|
675
733
|
|
|
676
|
-
type ScopeKey = 'viewState' | 'pins' | 'overrides' | 'mocks' | 'armedMocks' | 'armedFaults';
|
|
734
|
+
type ScopeKey = 'viewState' | 'pins' | 'overrides' | 'mocks' | 'armedMocks' | 'armedFaults' | 'authSessions';
|
|
677
735
|
type ScopeRow = {
|
|
678
736
|
key: ScopeKey;
|
|
679
737
|
label: string;
|
|
@@ -702,6 +760,7 @@ type LimitRow = {
|
|
|
702
760
|
* otherwise hold as constants, and the toggles their own tabs also carry.
|
|
703
761
|
*/
|
|
704
762
|
declare class QueryDevtoolsSettingsComponent {
|
|
763
|
+
private document;
|
|
705
764
|
protected host: QueryDevtoolsHost;
|
|
706
765
|
protected readonly SCOPE_ROWS: ScopeRow[];
|
|
707
766
|
protected readonly SCOPES: {
|
|
@@ -716,9 +775,27 @@ declare class QueryDevtoolsSettingsComponent {
|
|
|
716
775
|
/** What queries actually retain, which is the application's value unless this panel raised it. */
|
|
717
776
|
protected responseHistory: _angular_core.Signal<number>;
|
|
718
777
|
protected mockCount: _angular_core.Signal<number>;
|
|
778
|
+
protected sessionCount: _angular_core.Signal<number>;
|
|
719
779
|
protected armedMockCount: _angular_core.Signal<number>;
|
|
720
780
|
protected armedFaultCount: _angular_core.Signal<number>;
|
|
721
781
|
protected resetConfirming: _angular_core.WritableSignal<boolean>;
|
|
782
|
+
protected readonly FORGET_SESSIONS: () => void;
|
|
783
|
+
/** The backends the application declared, or an empty list - the card renders only for a declared one. */
|
|
784
|
+
protected apiEnvs: _angular_core.Signal<QueryDevtoolsApiEnvSwitch[]>;
|
|
785
|
+
/** The env id (or typed URL) a switch's key holds, or `null` while the application picks for itself. */
|
|
786
|
+
protected apiEnvValue(apiSwitch: QueryDevtoolsApiEnvSwitch): string | null;
|
|
787
|
+
/** The env a switch falls back to with nothing stored, described for the default button. */
|
|
788
|
+
protected apiEnvFallback(apiSwitch: QueryDevtoolsApiEnvSwitch): {
|
|
789
|
+
label: string;
|
|
790
|
+
production: boolean;
|
|
791
|
+
};
|
|
792
|
+
/** Whether the pick in force - the stored env, or the fallback behind an unwritten key - is production. */
|
|
793
|
+
protected apiEnvIsProduction(apiSwitch: QueryDevtoolsApiEnvSwitch): boolean;
|
|
794
|
+
/** A stored value no declared env carries, which is a URL somebody typed in below. */
|
|
795
|
+
protected apiEnvCustomUrl(apiSwitch: QueryDevtoolsApiEnvSwitch): string;
|
|
796
|
+
/** Writes the application's own key and reloads - it is read before Angular boots, so nothing else can. */
|
|
797
|
+
protected pickApiEnv(apiSwitch: QueryDevtoolsApiEnvSwitch, value: string | null): void;
|
|
798
|
+
protected setCustomApiUrl(apiSwitch: QueryDevtoolsApiEnvSwitch, value: string): void;
|
|
722
799
|
protected settings(): _ethlete_query.QueryDevtoolsSettings;
|
|
723
800
|
protected scopeOf(key: ScopeKey): QueryDevtoolsStorageScope;
|
|
724
801
|
protected limitOf(key: LimitKey): number;
|
|
@@ -761,21 +838,6 @@ type FloatRect = {
|
|
|
761
838
|
width: number;
|
|
762
839
|
height: number;
|
|
763
840
|
};
|
|
764
|
-
/**
|
|
765
|
-
* A drag in progress: the panel's docked edge, the floating panel being moved or resized, or the
|
|
766
|
-
* divider between a two-pane tab's panes.
|
|
767
|
-
*/
|
|
768
|
-
type ResizeDrag = {
|
|
769
|
-
/** The document the pointer moves in - a popped-out panel lives in a window of its own. */
|
|
770
|
-
doc: Document;
|
|
771
|
-
} & ({
|
|
772
|
-
kind: 'panel';
|
|
773
|
-
} | {
|
|
774
|
-
kind: 'pane';
|
|
775
|
-
pane: PaneTarget;
|
|
776
|
-
axis: PaneAxis;
|
|
777
|
-
container: HTMLElement;
|
|
778
|
-
});
|
|
779
841
|
type PersistedState = {
|
|
780
842
|
open?: boolean;
|
|
781
843
|
height?: number;
|
|
@@ -785,12 +847,19 @@ type PersistedState = {
|
|
|
785
847
|
listHeight?: number | null;
|
|
786
848
|
drawerHeight?: number | null;
|
|
787
849
|
dock?: DevtoolsDock;
|
|
850
|
+
reservesSpace?: boolean;
|
|
788
851
|
floatRect?: FloatRect;
|
|
789
852
|
floatParked?: boolean;
|
|
790
853
|
activeTab?: DevtoolsTab;
|
|
791
854
|
detailTab?: DetailTab;
|
|
792
855
|
selectedClientName?: string | null;
|
|
793
856
|
selectedQueryId?: string | null;
|
|
857
|
+
stackSelectedQueryId?: string | null;
|
|
858
|
+
sequenceSelectedQueryId?: string | null;
|
|
859
|
+
batchSelectedQueryId?: string | null;
|
|
860
|
+
eventSelectedQueryId?: string | null;
|
|
861
|
+
formSelectedQueryId?: string | null;
|
|
862
|
+
timelineSelectedQueryId?: string | null;
|
|
794
863
|
selectedFormId?: string | null;
|
|
795
864
|
inspectFilterIds?: string[] | null;
|
|
796
865
|
queryFilter?: string;
|
|
@@ -803,6 +872,7 @@ type PersistedState = {
|
|
|
803
872
|
socketFilter?: string;
|
|
804
873
|
jsonSearch?: string;
|
|
805
874
|
expandedSteps?: string[];
|
|
875
|
+
expandedBatchItems?: string[];
|
|
806
876
|
expandedQueryGroups?: string[];
|
|
807
877
|
jsonExpanded?: string[];
|
|
808
878
|
jsonCollapsed?: string[];
|
|
@@ -875,6 +945,9 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
875
945
|
} | {
|
|
876
946
|
id: "sequences";
|
|
877
947
|
label: string;
|
|
948
|
+
} | {
|
|
949
|
+
id: "batches";
|
|
950
|
+
label: string;
|
|
878
951
|
} | {
|
|
879
952
|
id: "forms";
|
|
880
953
|
label: string;
|
|
@@ -956,7 +1029,7 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
956
1029
|
protected drawerWidth: WritableSignal<number | null>;
|
|
957
1030
|
protected listHeight: WritableSignal<number | null>;
|
|
958
1031
|
protected drawerHeight: WritableSignal<number | null>;
|
|
959
|
-
|
|
1032
|
+
private drag;
|
|
960
1033
|
protected resizing: _angular_core.Signal<boolean>;
|
|
961
1034
|
/** Which edge the panel is docked to, or `float` for a window of its own inside the page. */
|
|
962
1035
|
protected dock: WritableSignal<DevtoolsDock>;
|
|
@@ -992,6 +1065,11 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
992
1065
|
readonly label: "Pop out";
|
|
993
1066
|
readonly hint: "Move the panel into a window of its own - the same live panel, on your other screen";
|
|
994
1067
|
}>;
|
|
1068
|
+
/**
|
|
1069
|
+
* Whether a docked panel takes its size out of the page instead of covering it - so the last rows of a
|
|
1070
|
+
* long page can still be scrolled to. Only docks can: a float sits wherever it was dragged.
|
|
1071
|
+
*/
|
|
1072
|
+
protected reservesSpace: WritableSignal<boolean>;
|
|
995
1073
|
/** Where the floating panel sits and how big it is. Kept while docked, so a return to float restores it. */
|
|
996
1074
|
private floatRect;
|
|
997
1075
|
/** The rect a resize gesture started from, or `null` outside one. */
|
|
@@ -1029,6 +1107,20 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1029
1107
|
/** The floating panel's offset from the viewport's top-left, or `null` while it is docked. */
|
|
1030
1108
|
protected panelInsetBlock: _angular_core.Signal<number | null>;
|
|
1031
1109
|
protected panelInsetInline: _angular_core.Signal<number | null>;
|
|
1110
|
+
/**
|
|
1111
|
+
* The panel's rendered size, not its dragged one - the stylesheet clamps a dock (`min-block-size`,
|
|
1112
|
+
* `max-block-size: 90vh`) and it is the clamped size the page has to give up.
|
|
1113
|
+
*/
|
|
1114
|
+
private panelSize;
|
|
1115
|
+
/** Which padding a docked panel asks of the page and how much, or `null` when it asks for none. */
|
|
1116
|
+
private pageReservation;
|
|
1117
|
+
/**
|
|
1118
|
+
* The viewport edge a docked panel covers, reserved for overlays whatever {@link reservesSpace} says:
|
|
1119
|
+
* page content can be scrolled out from under the panel, a dialog or a menu cannot. A dock edge is
|
|
1120
|
+
* logical, so which physical edge a side dock covers flips in RTL - read from the panel, since the
|
|
1121
|
+
* writing direction cannot change under a dock switch.
|
|
1122
|
+
*/
|
|
1123
|
+
private overlayReservation;
|
|
1032
1124
|
/** Which section of the query detail is showing. Shared by the Queries tab and both drawers. */
|
|
1033
1125
|
detailTab: WritableSignal<DetailTab>;
|
|
1034
1126
|
selectedClientName: WritableSignal<string | null>;
|
|
@@ -1037,6 +1129,8 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1037
1129
|
selectedFormId: WritableSignal<string | null>;
|
|
1038
1130
|
stackSelectedQueryId: WritableSignal<string | null>;
|
|
1039
1131
|
sequenceSelectedQueryId: WritableSignal<string | null>;
|
|
1132
|
+
batchSelectedQueryId: WritableSignal<string | null>;
|
|
1133
|
+
eventSelectedQueryId: WritableSignal<string | null>;
|
|
1040
1134
|
formSelectedQueryId: WritableSignal<string | null>;
|
|
1041
1135
|
timelineSelectedQueryId: WritableSignal<string | null>;
|
|
1042
1136
|
/** Free-text narrowing of the Queries list. Every whitespace-separated term has to match. */
|
|
@@ -1082,6 +1176,8 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1082
1176
|
private socketEmitError;
|
|
1083
1177
|
/** Keys (`<entryId>:<stepIndex>`) of the sequence steps whose in/out detail is expanded. */
|
|
1084
1178
|
private expandedSteps;
|
|
1179
|
+
/** Keys (`<entryId>:<itemIndex>`) of the batch items whose args/response detail is expanded. */
|
|
1180
|
+
private expandedBatchItems;
|
|
1085
1181
|
/** Keys of the Queries-list groups the user opened - the tab is rebuilt on every switch back. */
|
|
1086
1182
|
expandedQueryGroups: WritableSignal<ReadonlySet<string>>;
|
|
1087
1183
|
/** Shared value-explorer search term. */
|
|
@@ -1135,7 +1231,8 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1135
1231
|
lockRows: _angular_core.Signal<DevtoolsLockRow[] | null>;
|
|
1136
1232
|
/** "Inspect" mode: hover the live UI to find the query that a component created. */
|
|
1137
1233
|
protected inspectActive: WritableSignal<boolean>;
|
|
1138
|
-
|
|
1234
|
+
/** @internal */
|
|
1235
|
+
inspectHover: WritableSignal<{
|
|
1139
1236
|
rect: DOMRect;
|
|
1140
1237
|
entries: QueryDevtoolsEntry[];
|
|
1141
1238
|
} | null>;
|
|
@@ -1155,6 +1252,7 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1155
1252
|
protected panelTampered: _angular_core.Signal<boolean>;
|
|
1156
1253
|
stackEntries: _angular_core.Signal<QueryDevtoolsEntry[]>;
|
|
1157
1254
|
sequenceEntries: _angular_core.Signal<QueryDevtoolsEntry[]>;
|
|
1255
|
+
batchEntries: _angular_core.Signal<QueryDevtoolsEntry[]>;
|
|
1158
1256
|
formEntries: _angular_core.Signal<QueryDevtoolsEntry[]>;
|
|
1159
1257
|
authEntries: _angular_core.Signal<QueryDevtoolsEntry[]>;
|
|
1160
1258
|
wsEntries: _angular_core.Signal<QueryDevtoolsEntry[]>;
|
|
@@ -1212,6 +1310,9 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1212
1310
|
} | {
|
|
1213
1311
|
id: "sequences";
|
|
1214
1312
|
label: string;
|
|
1313
|
+
} | {
|
|
1314
|
+
id: "batches";
|
|
1315
|
+
label: string;
|
|
1215
1316
|
} | {
|
|
1216
1317
|
id: "forms";
|
|
1217
1318
|
label: string;
|
|
@@ -1253,6 +1354,9 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1253
1354
|
} | {
|
|
1254
1355
|
id: "sequences";
|
|
1255
1356
|
label: string;
|
|
1357
|
+
} | {
|
|
1358
|
+
id: "batches";
|
|
1359
|
+
label: string;
|
|
1256
1360
|
} | {
|
|
1257
1361
|
id: "forms";
|
|
1258
1362
|
label: string;
|
|
@@ -1296,6 +1400,14 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1296
1400
|
entry: QueryDevtoolsEntry;
|
|
1297
1401
|
query: AnyQuery;
|
|
1298
1402
|
} | null>;
|
|
1403
|
+
batchSelectedQuery: _angular_core.Signal<{
|
|
1404
|
+
entry: QueryDevtoolsEntry;
|
|
1405
|
+
query: AnyQuery;
|
|
1406
|
+
} | null>;
|
|
1407
|
+
eventSelectedQuery: _angular_core.Signal<{
|
|
1408
|
+
entry: QueryDevtoolsEntry;
|
|
1409
|
+
query: AnyQuery;
|
|
1410
|
+
} | null>;
|
|
1299
1411
|
formSelectedQuery: _angular_core.Signal<{
|
|
1300
1412
|
entry: QueryDevtoolsEntry;
|
|
1301
1413
|
query: AnyQuery;
|
|
@@ -1422,7 +1534,20 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1422
1534
|
* query) never writes them to its own `args` signal - only the `withArgs` feature does - so the args
|
|
1423
1535
|
* its current request was built from stand in.
|
|
1424
1536
|
*/
|
|
1425
|
-
queryArgs(query: AnyQuery): Omit<any, "response"> | null;
|
|
1537
|
+
queryArgs(query: AnyQuery): Omit<any, "response" | "rawResponse"> | null;
|
|
1538
|
+
/**
|
|
1539
|
+
* The headers a query's request carries, as a plain `name: value` record, or `null` for a query that
|
|
1540
|
+
* has none the panel can read. The set the last run sent, so it stays readable after the token it
|
|
1541
|
+
* used was replaced; for a query that has not run, what its current args and its client resolve to
|
|
1542
|
+
* now. `null` while a header provider throws - a secure query's needs an access token.
|
|
1543
|
+
*
|
|
1544
|
+
* The args tree cannot answer this on its own: a `withArgs` query reads its args from the feature's
|
|
1545
|
+
* source, which the secure `Authorization` provider is never written back to, and client-level
|
|
1546
|
+
* headers are merged in per execution rather than being part of the args at all.
|
|
1547
|
+
*/
|
|
1548
|
+
requestHeaders(query: AnyQuery): {
|
|
1549
|
+
[k: string]: string;
|
|
1550
|
+
} | null;
|
|
1426
1551
|
queryStatus(query: AnyQuery): QueryStatus;
|
|
1427
1552
|
/**
|
|
1428
1553
|
* A request in flight is already refreshing, so reporting it as stale on top of `loading` is noise -
|
|
@@ -1598,6 +1723,7 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1598
1723
|
asStack(entry: QueryDevtoolsEntry): AnyQueryStack;
|
|
1599
1724
|
asPagedStack(entry: QueryDevtoolsEntry): AnyPagedQueryStack;
|
|
1600
1725
|
asSequence(entry: QueryDevtoolsEntry): QuerySequence<unknown[]>;
|
|
1726
|
+
asBatch(entry: QueryDevtoolsEntry): AnyQueryBatch;
|
|
1601
1727
|
asAuth(entry: QueryDevtoolsEntry): AnyBearerAuthProvider;
|
|
1602
1728
|
asWs(entry: QueryDevtoolsEntry): WebSocketDevtoolsHandle;
|
|
1603
1729
|
/**
|
|
@@ -1662,6 +1788,19 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1662
1788
|
expandQueryGroup(key: string): void;
|
|
1663
1789
|
isStepExpanded(entryId: string, index: number): boolean;
|
|
1664
1790
|
toggleStep(entryId: string, index: number): void;
|
|
1791
|
+
/** A batch's route with its path params left as `:name` - a batch fills them in per item, not once. */
|
|
1792
|
+
batchRouteSegments(entry: QueryDevtoolsEntry): RouteSegment[];
|
|
1793
|
+
batchOf(entry: QueryDevtoolsEntry): QueryDevtoolsEntry | null;
|
|
1794
|
+
queriesForBatch(entry: QueryDevtoolsEntry): QueryLink[];
|
|
1795
|
+
/**
|
|
1796
|
+
* The registry entry of one of a batch's items, or `null` once it has fallen out of the batch's capped
|
|
1797
|
+
* tombstone tail - which is what makes an item row openable only while its query is still kept.
|
|
1798
|
+
*/
|
|
1799
|
+
batchItemQueryId(entry: QueryDevtoolsEntry, index: number): string | null;
|
|
1800
|
+
batchItems(entry: QueryDevtoolsEntry): BatchItemView;
|
|
1801
|
+
batchThroughput(batch: AnyQueryBatch): string | null;
|
|
1802
|
+
isBatchItemExpanded(entryId: string, index: number): boolean;
|
|
1803
|
+
toggleBatchItem(entryId: string, index: number): void;
|
|
1665
1804
|
/** Dedents a GraphQL document (template-literal indentation) for readable display. */
|
|
1666
1805
|
gqlDocument(doc: string): string;
|
|
1667
1806
|
featureLabel(type: string): string;
|
|
@@ -1687,6 +1826,18 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1687
1826
|
content: string;
|
|
1688
1827
|
type: string;
|
|
1689
1828
|
}): void;
|
|
1829
|
+
/**
|
|
1830
|
+
* The headers an execution of this request would resolve to now: the client's with the per-request
|
|
1831
|
+
* ones merged on top, providers called. `undefined` when a provider throws, which for a secure query
|
|
1832
|
+
* means no access token is available yet.
|
|
1833
|
+
*/
|
|
1834
|
+
private resolvedHeaders;
|
|
1835
|
+
/**
|
|
1836
|
+
* The same route rendered from a set of args rather than from a query, which is what a batch item leaves
|
|
1837
|
+
* behind: the batch destroys its query the moment the item settles.
|
|
1838
|
+
*/
|
|
1839
|
+
private argsRouteSegments;
|
|
1840
|
+
private renderRoute;
|
|
1690
1841
|
/**
|
|
1691
1842
|
* Takes - or gives back - the lock whose name only this tab can have produced. Its `clientId` in the
|
|
1692
1843
|
* snapshot is what tells this tab's rows from another tab's: `LockInfo` carries no tab identity, and
|
|
@@ -1779,6 +1930,7 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1779
1930
|
private sessionQuery;
|
|
1780
1931
|
private sessionActivity;
|
|
1781
1932
|
private sessionSequence;
|
|
1933
|
+
private sessionBatch;
|
|
1782
1934
|
private sessionForm;
|
|
1783
1935
|
/**
|
|
1784
1936
|
* An auth provider without its tokens. A session report is a file that gets attached to a ticket, and
|
|
@@ -1830,7 +1982,7 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1830
1982
|
declare const QUERY_DEVTOOLS_IMPORTS: readonly [typeof QueryDevtoolsComponent];
|
|
1831
1983
|
|
|
1832
1984
|
/** The version of `@ethlete/query-devtools` this build was cut from. */
|
|
1833
|
-
declare const QUERY_DEVTOOLS_VERSION = "1.0.0-next.
|
|
1985
|
+
declare const QUERY_DEVTOOLS_VERSION = "1.0.0-next.10";
|
|
1834
1986
|
|
|
1835
1987
|
export { QUERY_DEVTOOLS_IMPORTS, QUERY_DEVTOOLS_VERSION, QueryDevtoolsAboutComponent, QueryDevtoolsComponent, QueryDevtoolsJsonComponent, QueryDevtoolsJsonStylesComponent, QueryDevtoolsSettingsComponent, QueryDevtoolsTimelineStylesComponent, clampFloatToPeek, kindOf, resizedFloatRect, settledFloatRect };
|
|
1836
1988
|
export type { JsonKind };
|