@ethlete/query-devtools 1.0.0-next.13 → 1.0.0-next.14
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 +17 -0
- package/fesm2022/ethlete-query-devtools-lazy.mjs +2 -2
- package/fesm2022/ethlete-query-devtools-lazy.mjs.map +1 -1
- package/fesm2022/ethlete-query-devtools-toggle.mjs +9 -1
- package/fesm2022/ethlete-query-devtools-toggle.mjs.map +1 -1
- package/fesm2022/ethlete-query-devtools.mjs +545 -962
- package/fesm2022/ethlete-query-devtools.mjs.map +1 -1
- package/package.json +1 -8
- package/types/ethlete-query-devtools-toggle.d.ts +6 -1
- package/types/ethlete-query-devtools.d.ts +129 -483
|
@@ -17,10 +17,13 @@ type AboutGroup = {
|
|
|
17
17
|
* `provideQueryDevtools({ about })`. A section rather than a tab body, so it can be shown anywhere.
|
|
18
18
|
*/
|
|
19
19
|
declare class QueryDevtoolsAboutComponent {
|
|
20
|
+
private hostEl;
|
|
20
21
|
protected readonly groups: AboutGroup[];
|
|
21
|
-
protected copied:
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
protected copied: {
|
|
23
|
+
value: _angular_core.Signal<boolean>;
|
|
24
|
+
mark: (next: boolean) => void;
|
|
25
|
+
clear: () => void;
|
|
26
|
+
};
|
|
24
27
|
protected copy(): void;
|
|
25
28
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<QueryDevtoolsAboutComponent, never>;
|
|
26
29
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<QueryDevtoolsAboutComponent, "et-query-devtools-about", never, {}, {}, never, never, true, never>;
|
|
@@ -49,10 +52,11 @@ declare const kindOf: (value: unknown) => JsonKind;
|
|
|
49
52
|
* re-enter as the same component with a `chunk` window over the same value.
|
|
50
53
|
*/
|
|
51
54
|
declare class QueryDevtoolsJsonComponent {
|
|
55
|
+
private hostEl;
|
|
52
56
|
value: _angular_core.InputSignal<unknown>;
|
|
53
57
|
nodeKey: _angular_core.InputSignal<string | null>;
|
|
54
58
|
depth: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
55
|
-
/** Lowercased search term; when set, the
|
|
59
|
+
/** Lowercased search term; when set, the containers holding a match auto-expand and matches are highlighted. */
|
|
56
60
|
search: _angular_core.InputSignal<string>;
|
|
57
61
|
/**
|
|
58
62
|
* When set, this node is not the value itself but a folded window over its entries. It shares the
|
|
@@ -78,6 +82,8 @@ declare class QueryDevtoolsJsonComponent {
|
|
|
78
82
|
* {@link QueryDevtoolsSchemaSeed} produces it. A node with an entry labels itself with it.
|
|
79
83
|
*/
|
|
80
84
|
annotations: _angular_core.InputSignal<ReadonlyMap<string, string> | null>;
|
|
85
|
+
/** The containers above this node, so a search does not unfold a value that holds itself again. */
|
|
86
|
+
ancestors: _angular_core.InputSignal<readonly unknown[]>;
|
|
81
87
|
protected kind: _angular_core.Signal<JsonKind>;
|
|
82
88
|
private exotic;
|
|
83
89
|
/** One annotation covers every element of an array, so the lookup path forgets which index this is. */
|
|
@@ -99,12 +105,15 @@ declare class QueryDevtoolsJsonComponent {
|
|
|
99
105
|
private defaultExpanded;
|
|
100
106
|
private localExpanded;
|
|
101
107
|
private expanded;
|
|
102
|
-
|
|
103
|
-
private
|
|
108
|
+
protected childAncestors: _angular_core.Signal<unknown[]>;
|
|
109
|
+
private hasHit;
|
|
104
110
|
protected effectiveExpanded: _angular_core.Signal<boolean>;
|
|
105
111
|
/** What the last copy put on the clipboard, or `null` once the tick has expired. */
|
|
106
|
-
protected copied:
|
|
107
|
-
|
|
112
|
+
protected copied: {
|
|
113
|
+
value: _angular_core.Signal<QueryDevtoolsCopyPayload | null>;
|
|
114
|
+
mark: (next: QueryDevtoolsCopyPayload | null) => void;
|
|
115
|
+
clear: () => void;
|
|
116
|
+
};
|
|
108
117
|
/**
|
|
109
118
|
* Whether this node has an address of its own to copy. An explorer root has no key, and a folded
|
|
110
119
|
* slice stands for a range of entries rather than one path - neither can name itself.
|
|
@@ -138,9 +147,8 @@ declare class QueryDevtoolsJsonComponent {
|
|
|
138
147
|
/** An exotic container copies the entries the tree shows, not the private fields `JSON.stringify` finds. */
|
|
139
148
|
private copyableValue;
|
|
140
149
|
private chunkValue;
|
|
141
|
-
private flagCopied;
|
|
142
150
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<QueryDevtoolsJsonComponent, never>;
|
|
143
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<QueryDevtoolsJsonComponent, "et-query-devtools-json", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "nodeKey": { "alias": "nodeKey"; "required": false; "isSignal": true; }; "depth": { "alias": "depth"; "required": false; "isSignal": true; }; "search": { "alias": "search"; "required": false; "isSignal": true; }; "chunk": { "alias": "chunk"; "required": false; "isSignal": true; }; "path": { "alias": "path"; "required": false; "isSignal": true; }; "expandedPaths": { "alias": "expandedPaths"; "required": false; "isSignal": true; }; "collapsedPaths": { "alias": "collapsedPaths"; "required": false; "isSignal": true; }; "toggleFn": { "alias": "toggleFn"; "required": false; "isSignal": true; }; "jsonPath": { "alias": "jsonPath"; "required": false; "isSignal": true; }; "parentKind": { "alias": "parentKind"; "required": false; "isSignal": true; }; "overrides": { "alias": "overrides"; "required": false; "isSignal": true; }; "annotations": { "alias": "annotations"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
151
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<QueryDevtoolsJsonComponent, "et-query-devtools-json", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "nodeKey": { "alias": "nodeKey"; "required": false; "isSignal": true; }; "depth": { "alias": "depth"; "required": false; "isSignal": true; }; "search": { "alias": "search"; "required": false; "isSignal": true; }; "chunk": { "alias": "chunk"; "required": false; "isSignal": true; }; "path": { "alias": "path"; "required": false; "isSignal": true; }; "expandedPaths": { "alias": "expandedPaths"; "required": false; "isSignal": true; }; "collapsedPaths": { "alias": "collapsedPaths"; "required": false; "isSignal": true; }; "toggleFn": { "alias": "toggleFn"; "required": false; "isSignal": true; }; "jsonPath": { "alias": "jsonPath"; "required": false; "isSignal": true; }; "parentKind": { "alias": "parentKind"; "required": false; "isSignal": true; }; "overrides": { "alias": "overrides"; "required": false; "isSignal": true; }; "annotations": { "alias": "annotations"; "required": false; "isSignal": true; }; "ancestors": { "alias": "ancestors"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
144
152
|
}
|
|
145
153
|
|
|
146
154
|
/**
|
|
@@ -154,6 +162,17 @@ declare class QueryDevtoolsJsonStylesComponent {
|
|
|
154
162
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<QueryDevtoolsJsonStylesComponent, "et-query-devtools-json-styles", never, {}, {}, never, never, true, never>;
|
|
155
163
|
}
|
|
156
164
|
|
|
165
|
+
/**
|
|
166
|
+
* A copy confirmation that falls back to `idle` once {@link QUERY_DEVTOOLS_COPIED_RESET_MS} pass; each
|
|
167
|
+
* `mark` restarts the countdown. Create it in an injection context.
|
|
168
|
+
*/
|
|
169
|
+
declare const createQueryDevtoolsCopiedTick: <T>(idle: T) => {
|
|
170
|
+
value: _angular_core.Signal<T>;
|
|
171
|
+
mark: (next: T) => void;
|
|
172
|
+
clear: () => void;
|
|
173
|
+
};
|
|
174
|
+
type QueryDevtoolsCopiedTick<T> = ReturnType<typeof createQueryDevtoolsCopiedTick<T>>;
|
|
175
|
+
|
|
157
176
|
/** Whether a path exists only in the newer value, only in the older one, or in both with a new value. */
|
|
158
177
|
type QueryDevtoolsDiffKind = 'added' | 'removed' | 'changed';
|
|
159
178
|
/** One difference between two values, located by the path it sits at. */
|
|
@@ -324,11 +343,8 @@ type EventLogItem = {
|
|
|
324
343
|
url: string | null;
|
|
325
344
|
isSecure: boolean;
|
|
326
345
|
status: number | null;
|
|
327
|
-
/**
|
|
328
|
-
|
|
329
|
-
* here rather than at click time so the log holds an id instead of a reference to the request itself.
|
|
330
|
-
*/
|
|
331
|
-
queryId: string | null;
|
|
346
|
+
/** Weak, so the log never keeps a destroyed request alive. `null` for an event that is not one request. */
|
|
347
|
+
request: WeakRef<object> | null;
|
|
332
348
|
/** What asked for a refresh, for a `queries-refreshed` row. `null` for every other type. */
|
|
333
349
|
cause: QueryRefreshCause | null;
|
|
334
350
|
/** Why a cache entry was torn down, for an `entry-destroyed` row. `null` for every other type. */
|
|
@@ -466,6 +482,7 @@ type QueryDevtoolsHost = {
|
|
|
466
482
|
/** 1-second tick driving every countdown/freshness readout across tabs. */
|
|
467
483
|
clock: Signal<number>;
|
|
468
484
|
findQuery(id: string | null): QueryDevtoolsSelection | null;
|
|
485
|
+
eventQueryId(event: EventLogItem): string | null;
|
|
469
486
|
queryLinkFor(entry: QueryDevtoolsEntry | undefined, query?: AnyQuery): QueryLink;
|
|
470
487
|
asStack(entry: QueryDevtoolsEntry): AnyQueryStack;
|
|
471
488
|
asPagedStack(entry: QueryDevtoolsEntry): AnyPagedQueryStack;
|
|
@@ -612,11 +629,11 @@ type QueryDevtoolsHost = {
|
|
|
612
629
|
run: QueryDevtoolsRun;
|
|
613
630
|
error: QueryDevtoolsRunError;
|
|
614
631
|
} | null;
|
|
615
|
-
copiedReport:
|
|
616
|
-
copiedInsomnia:
|
|
617
|
-
copiedCurl:
|
|
618
|
-
copiedGql:
|
|
619
|
-
copiedRoute:
|
|
632
|
+
copiedReport: QueryDevtoolsCopiedTick<boolean>;
|
|
633
|
+
copiedInsomnia: QueryDevtoolsCopiedTick<boolean>;
|
|
634
|
+
copiedCurl: QueryDevtoolsCopiedTick<boolean>;
|
|
635
|
+
copiedGql: QueryDevtoolsCopiedTick<boolean>;
|
|
636
|
+
copiedRoute: QueryDevtoolsCopiedTick<boolean>;
|
|
620
637
|
copyReport(entry: QueryDevtoolsEntry, query: AnyQuery): void;
|
|
621
638
|
copyInsomniaRequest(entry: QueryDevtoolsEntry, query: AnyQuery): void;
|
|
622
639
|
copyCurlRequest(entry: QueryDevtoolsEntry, query: AnyQuery): void;
|
|
@@ -836,14 +853,8 @@ declare class QueryDevtoolsTimelineStylesComponent {
|
|
|
836
853
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<QueryDevtoolsTimelineStylesComponent, "et-query-devtools-timeline-styles", never, {}, {}, never, never, true, never>;
|
|
837
854
|
}
|
|
838
855
|
|
|
839
|
-
/**
|
|
840
|
-
* Where the panel sits: attached to an edge, or floating over the page as a window of its own. A
|
|
841
|
-
* pop-out is not one of these - that is a real browser window, not a position in this document.
|
|
842
|
-
*/
|
|
843
856
|
type DevtoolsDock = 'bottom' | 'top' | 'left' | 'right' | 'float';
|
|
844
|
-
/** What the layout menu offers, in the order it lists them. `popout` is a window, not a position. */
|
|
845
857
|
type DevtoolsLayout = DevtoolsDock | 'popout';
|
|
846
|
-
/** The floating panel's position and size, in CSS px from the viewport's top-left. */
|
|
847
858
|
type FloatRect = {
|
|
848
859
|
x: number;
|
|
849
860
|
y: number;
|
|
@@ -899,21 +910,10 @@ type ViewportSize = {
|
|
|
899
910
|
* thing that drags the panel back, so it may never be the part that leaves.
|
|
900
911
|
*/
|
|
901
912
|
declare const clampFloatToPeek: (rect: FloatRect, viewport: ViewportSize) => FloatRect;
|
|
902
|
-
/**
|
|
903
|
-
* Where a float settles when the pointer is released. Dragged more than halfway off an edge, it stays
|
|
904
|
-
* parked there with {@link FLOAT_PEEK} showing - the panel gets out of the way of the thing you are
|
|
905
|
-
* debugging without being closed. Anything short of halfway is pulled back in, so a slightly clumsy
|
|
906
|
-
* drag does not park it.
|
|
907
|
-
*/
|
|
908
913
|
declare const settledFloatRect: (rect: FloatRect, viewport: ViewportSize) => {
|
|
909
914
|
rect: FloatRect;
|
|
910
915
|
collapsed: boolean;
|
|
911
916
|
};
|
|
912
|
-
/**
|
|
913
|
-
* The rect a resize gesture from `edge` produces, given where the panel was when the gesture started.
|
|
914
|
-
* A west or north drag grows away from the edge that stays pinned, so the origin follows whatever
|
|
915
|
-
* size the drag settled on - including when the size hit its floor and the origin must stop with it.
|
|
916
|
-
*/
|
|
917
917
|
declare const resizedFloatRect: (base: FloatRect, { move, viewport }: {
|
|
918
918
|
move: ResizeMoveEvent;
|
|
919
919
|
viewport: ViewportSize;
|
|
@@ -941,11 +941,9 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
941
941
|
* `<et-query-devtools-lazy>`, which downloads the panel on the click that was meant to open it.
|
|
942
942
|
*/
|
|
943
943
|
startOpen: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
944
|
-
/** The panel itself, so a pop-out can move it into another window's document. */
|
|
945
944
|
private panelEl;
|
|
946
945
|
private eventIdCounter;
|
|
947
946
|
private lastSelectionKey;
|
|
948
|
-
/** Where the gear goes back to, so opening Settings does not lose the tab it was opened over. */
|
|
949
947
|
private tabBeforeSettings;
|
|
950
948
|
readonly persisted: PersistedState;
|
|
951
949
|
protected readonly tabs: ({
|
|
@@ -991,10 +989,6 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
991
989
|
id: "about";
|
|
992
990
|
label: string;
|
|
993
991
|
})[];
|
|
994
|
-
/**
|
|
995
|
-
* Tabs the bar keeps whether they hold anything or not: the one the panel opens on, and the one that
|
|
996
|
-
* arms faults - which has entries to arm rather than to count.
|
|
997
|
-
*/
|
|
998
992
|
private readonly PINNED_TABS;
|
|
999
993
|
protected readonly shortcut: "⌘⌥Q" | "Ctrl+Alt+Q";
|
|
1000
994
|
protected readonly LAYOUTS: readonly [{
|
|
@@ -1028,24 +1022,18 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1028
1022
|
readonly label: "Pop out";
|
|
1029
1023
|
readonly hint: "Move the panel into a window of its own - the same live panel, on your other screen";
|
|
1030
1024
|
}];
|
|
1031
|
-
protected open: WritableSignal<boolean>;
|
|
1025
|
+
protected open: _angular_core.WritableSignal<boolean>;
|
|
1032
1026
|
private panelHeight;
|
|
1033
1027
|
private panelWidth;
|
|
1034
|
-
protected activeTab: WritableSignal<DevtoolsTab>;
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
*/
|
|
1040
|
-
protected listWidth: WritableSignal<number | null>;
|
|
1041
|
-
protected drawerWidth: WritableSignal<number | null>;
|
|
1042
|
-
protected listHeight: WritableSignal<number | null>;
|
|
1043
|
-
protected drawerHeight: WritableSignal<number | null>;
|
|
1028
|
+
protected activeTab: _angular_core.WritableSignal<DevtoolsTab>;
|
|
1029
|
+
protected listWidth: _angular_core.WritableSignal<number | null>;
|
|
1030
|
+
protected drawerWidth: _angular_core.WritableSignal<number | null>;
|
|
1031
|
+
protected listHeight: _angular_core.WritableSignal<number | null>;
|
|
1032
|
+
protected drawerHeight: _angular_core.WritableSignal<number | null>;
|
|
1044
1033
|
private drag;
|
|
1034
|
+
private floatGesture;
|
|
1045
1035
|
protected resizing: _angular_core.Signal<boolean>;
|
|
1046
|
-
|
|
1047
|
-
protected dock: WritableSignal<DevtoolsDock>;
|
|
1048
|
-
/** The entry the layout button shows, so it names where the panel is rather than where it could go. */
|
|
1036
|
+
protected dock: _angular_core.WritableSignal<DevtoolsDock>;
|
|
1049
1037
|
protected currentLayout: _angular_core.Signal<{
|
|
1050
1038
|
readonly id: "bottom";
|
|
1051
1039
|
readonly glyph: "⬓";
|
|
@@ -1077,46 +1065,32 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1077
1065
|
readonly label: "Pop out";
|
|
1078
1066
|
readonly hint: "Move the panel into a window of its own - the same live panel, on your other screen";
|
|
1079
1067
|
}>;
|
|
1080
|
-
|
|
1081
|
-
* Whether a docked panel takes its size out of the page instead of covering it - so the last rows of a
|
|
1082
|
-
* long page can still be scrolled to. Only docks can: a float sits wherever it was dragged.
|
|
1083
|
-
*/
|
|
1084
|
-
protected reservesSpace: WritableSignal<boolean>;
|
|
1085
|
-
/** Where the floating panel sits and how big it is. Kept while docked, so a return to float restores it. */
|
|
1068
|
+
protected reservesSpace: _angular_core.WritableSignal<boolean>;
|
|
1086
1069
|
private floatRect;
|
|
1087
|
-
/** The rect a resize gesture started from, or `null` outside one. */
|
|
1088
1070
|
private floatResizeBase;
|
|
1089
1071
|
/**
|
|
1090
1072
|
* Whether the float is shoved off an edge with only its peek showing. Persisted with the rect, since
|
|
1091
1073
|
* restoring the rect without it would either strand the panel off screen or silently un-park it.
|
|
1092
1074
|
*/
|
|
1093
|
-
protected floatParked: WritableSignal<boolean>;
|
|
1094
|
-
|
|
1095
|
-
* The browser refused the last pop-out. `window.open` returns `null` with no error to catch, so
|
|
1096
|
-
* without this the button simply did nothing - and floating is the fallback it should have offered.
|
|
1097
|
-
*/
|
|
1098
|
-
protected popOutBlocked: WritableSignal<boolean>;
|
|
1075
|
+
protected floatParked: _angular_core.WritableSignal<boolean>;
|
|
1076
|
+
protected popOutBlocked: _angular_core.WritableSignal<boolean>;
|
|
1099
1077
|
/**
|
|
1100
1078
|
* Whether the panel currently lives in a window of its own. Deliberately not persisted: a reload
|
|
1101
1079
|
* cannot re-adopt a window the previous document opened, so it always starts docked.
|
|
1102
1080
|
*/
|
|
1103
|
-
protected poppedOut: WritableSignal<boolean>;
|
|
1081
|
+
protected poppedOut: _angular_core.WritableSignal<boolean>;
|
|
1104
1082
|
protected floating: _angular_core.Signal<boolean>;
|
|
1105
|
-
/**
|
|
1106
|
-
* Below `md` a side-by-side split cannot fit: the list alone asks for `22rem` and the drawer for
|
|
1107
|
-
* `26rem`, which is wider than a phone. Narrow gets the same stacked layout a right dock does.
|
|
1108
|
-
*/
|
|
1109
1083
|
private narrowViewport;
|
|
1110
|
-
/** Whether the panel is docked to a side edge, which is what sizes it along the inline axis. */
|
|
1111
1084
|
private sideDocked;
|
|
1112
|
-
/** Which axis the two-pane tabs split along. The stylesheet keys the stacked layout off the same value. */
|
|
1113
1085
|
protected paneAxis: _angular_core.Signal<PaneAxis>;
|
|
1114
1086
|
private popup;
|
|
1115
|
-
/**
|
|
1087
|
+
/** Ends everything tied to one pop-out window: a pending `load`, its `pagehide`, shortcut and visibility. */
|
|
1088
|
+
private popOutEnded$;
|
|
1089
|
+
private popupVisible;
|
|
1090
|
+
private isPanelVisible;
|
|
1116
1091
|
private popOutStyleSync;
|
|
1117
1092
|
protected panelBlockSize: _angular_core.Signal<number | null>;
|
|
1118
1093
|
protected panelInlineSize: _angular_core.Signal<number | null>;
|
|
1119
|
-
/** The floating panel's offset from the viewport's top-left, or `null` while it is docked. */
|
|
1120
1094
|
protected panelInsetBlock: _angular_core.Signal<number | null>;
|
|
1121
1095
|
protected panelInsetInline: _angular_core.Signal<number | null>;
|
|
1122
1096
|
/**
|
|
@@ -1124,7 +1098,6 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1124
1098
|
* `max-block-size: 90vh`) and it is the clamped size the page has to give up.
|
|
1125
1099
|
*/
|
|
1126
1100
|
private panelSize;
|
|
1127
|
-
/** Which padding a docked panel asks of the page and how much, or `null` when it asks for none. */
|
|
1128
1101
|
private pageReservation;
|
|
1129
1102
|
/**
|
|
1130
1103
|
* The viewport edge a docked panel covers, reserved for overlays whatever {@link reservesSpace} says:
|
|
@@ -1133,109 +1106,84 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1133
1106
|
* writing direction cannot change under a dock switch.
|
|
1134
1107
|
*/
|
|
1135
1108
|
private overlayReservation;
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
/** The form whose detail the Forms tab has expanded. */
|
|
1141
|
-
selectedFormId: WritableSignal<string | null>;
|
|
1109
|
+
detailTab: _angular_core.WritableSignal<DetailTab>;
|
|
1110
|
+
selectedClientName: _angular_core.WritableSignal<string | null>;
|
|
1111
|
+
selectedQueryId: _angular_core.WritableSignal<string | null>;
|
|
1112
|
+
selectedFormId: _angular_core.WritableSignal<string | null>;
|
|
1142
1113
|
/**
|
|
1143
1114
|
* The type annotations of each seeded mock body, by mock id. It lives here rather than on the Mocks
|
|
1144
1115
|
* tab because a tab is destroyed the moment another one is selected, and a body seeded from an inline
|
|
1145
1116
|
* schema has no `schemaName` to recover its labels from.
|
|
1146
1117
|
*/
|
|
1147
|
-
seededTypes: WritableSignal<Record<string, ReadonlyMap<string, string>>>;
|
|
1148
|
-
stackSelectedQueryId: WritableSignal<string | null>;
|
|
1149
|
-
sequenceSelectedQueryId: WritableSignal<string | null>;
|
|
1150
|
-
batchSelectedQueryId: WritableSignal<string | null>;
|
|
1151
|
-
eventSelectedQueryId: WritableSignal<string | null>;
|
|
1152
|
-
formSelectedQueryId: WritableSignal<string | null>;
|
|
1153
|
-
timelineSelectedQueryId: WritableSignal<string | null>;
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
*/
|
|
1167
|
-
queryTreeView: WritableSignal<boolean>;
|
|
1168
|
-
/**
|
|
1169
|
-
* The path folders the user closed. Collapsed rather than expanded, because a tree that opens closed
|
|
1170
|
-
* shows nothing but the top segment of every route - which answers no question the flat list didn't.
|
|
1171
|
-
*/
|
|
1172
|
-
collapsedQueryPaths: WritableSignal<ReadonlySet<string>>;
|
|
1173
|
-
/**
|
|
1174
|
-
* The entry ids sorted to the top of the Queries list. Ids are derived from a stable descriptor plus a
|
|
1175
|
-
* per-descriptor sequence number, so a pin survives a reload as long as queries are created in the same
|
|
1176
|
-
* order - the same property the restored selection already relies on.
|
|
1177
|
-
*/
|
|
1178
|
-
pinnedQueryIds: WritableSignal<ReadonlySet<string>>;
|
|
1179
|
-
eventLog: WritableSignal<EventLogItem[]>;
|
|
1180
|
-
/**
|
|
1181
|
-
* The cache entries that are gone, newest first. Kept here rather than in the repository, which stays
|
|
1182
|
-
* lean in production - it emits the teardown and forgets it.
|
|
1183
|
-
*/
|
|
1184
|
-
droppedCacheEntries: WritableSignal<DroppedCacheEntry[]>;
|
|
1185
|
-
/** The client (by base URL) the event log is scoped to, or `null` for all of them. */
|
|
1186
|
-
eventClient: WritableSignal<string | null>;
|
|
1187
|
-
/** Whether the event log is narrowed to failures - the rows a bug report is about. */
|
|
1188
|
-
eventErrorsOnly: WritableSignal<boolean>;
|
|
1189
|
-
/** Free-text narrowing of every socket's message log. Matches the event, the room and the direction. */
|
|
1190
|
-
socketFilter: WritableSignal<string>;
|
|
1191
|
-
/** The cache entry whose response is expanded, as `<client>|<key>`, or `null` while none is. */
|
|
1118
|
+
seededTypes: _angular_core.WritableSignal<Record<string, ReadonlyMap<string, string>>>;
|
|
1119
|
+
stackSelectedQueryId: _angular_core.WritableSignal<string | null>;
|
|
1120
|
+
sequenceSelectedQueryId: _angular_core.WritableSignal<string | null>;
|
|
1121
|
+
batchSelectedQueryId: _angular_core.WritableSignal<string | null>;
|
|
1122
|
+
eventSelectedQueryId: _angular_core.WritableSignal<string | null>;
|
|
1123
|
+
formSelectedQueryId: _angular_core.WritableSignal<string | null>;
|
|
1124
|
+
timelineSelectedQueryId: _angular_core.WritableSignal<string | null>;
|
|
1125
|
+
queryFilter: _angular_core.WritableSignal<string>;
|
|
1126
|
+
queryFacets: _angular_core.WritableSignal<ReadonlySet<QueryListFacet>>;
|
|
1127
|
+
queryRecentFirst: _angular_core.WritableSignal<boolean>;
|
|
1128
|
+
queryTreeView: _angular_core.WritableSignal<boolean>;
|
|
1129
|
+
collapsedQueryPaths: _angular_core.WritableSignal<ReadonlySet<string>>;
|
|
1130
|
+
pinnedQueryIds: _angular_core.WritableSignal<ReadonlySet<string>>;
|
|
1131
|
+
eventLog: _angular_core.WritableSignal<EventLogItem[]>;
|
|
1132
|
+
private eventOwners;
|
|
1133
|
+
droppedCacheEntries: _angular_core.WritableSignal<DroppedCacheEntry[]>;
|
|
1134
|
+
eventClient: _angular_core.WritableSignal<string | null>;
|
|
1135
|
+
eventErrorsOnly: _angular_core.WritableSignal<boolean>;
|
|
1136
|
+
socketFilter: _angular_core.WritableSignal<string>;
|
|
1192
1137
|
private expandedCacheKey;
|
|
1193
|
-
/** The socket whose emit box last failed, so the message shows on that card and no other. */
|
|
1194
1138
|
private socketEmitError;
|
|
1195
|
-
/** Keys (`<entryId>:<stepIndex>`) of the sequence steps whose in/out detail is expanded. */
|
|
1196
1139
|
private expandedSteps;
|
|
1197
|
-
/** Keys (`<entryId>:<itemIndex>`) of the batch items whose args/response detail is expanded. */
|
|
1198
1140
|
private expandedBatchItems;
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
/** Shared value-explorer search term. */
|
|
1202
|
-
jsonSearch: WritableSignal<string>;
|
|
1141
|
+
expandedQueryGroups: _angular_core.WritableSignal<ReadonlySet<string>>;
|
|
1142
|
+
jsonSearch: _angular_core.WritableSignal<string>;
|
|
1203
1143
|
jsonSearchTerm: _angular_core.Signal<string>;
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
jsonCollapsedPaths: WritableSignal<ReadonlySet<string>>;
|
|
1207
|
-
/** Bound callback passed into the value explorer to persist per-path expansion. Assigned in the constructor. */
|
|
1144
|
+
jsonExpandedPaths: _angular_core.WritableSignal<ReadonlySet<string>>;
|
|
1145
|
+
jsonCollapsedPaths: _angular_core.WritableSignal<ReadonlySet<string>>;
|
|
1208
1146
|
toggleJsonPath: (path: string, expand: boolean) => void;
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
* The run the diff compares it *against*, or `null` to derive that side - the newest older run that
|
|
1213
|
-
* still holds a body, which is what one click on **Diff** gives you.
|
|
1214
|
-
*/
|
|
1215
|
-
diffBaseRunIndex: WritableSignal<number | null>;
|
|
1216
|
-
errorRunIndex: WritableSignal<number | null>;
|
|
1217
|
-
/** How many bodies a query retains, which is what bounds how far back a diff can reach. */
|
|
1147
|
+
diffRunIndex: _angular_core.WritableSignal<number | null>;
|
|
1148
|
+
diffBaseRunIndex: _angular_core.WritableSignal<number | null>;
|
|
1149
|
+
errorRunIndex: _angular_core.WritableSignal<number | null>;
|
|
1218
1150
|
retainedResponseCount: _angular_core.Signal<number>;
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
argsDraft: WritableSignal<string>;
|
|
1151
|
+
editorMode: _angular_core.WritableSignal<"none" | "response" | "args">;
|
|
1152
|
+
responseDraft: _angular_core.WritableSignal<string>;
|
|
1153
|
+
argsDraft: _angular_core.WritableSignal<string>;
|
|
1223
1154
|
/**
|
|
1224
1155
|
* The text the currently open editor was seeded with. The textareas bind `value` to this and not to
|
|
1225
1156
|
* the live draft: a `value` binding fed by the draft is written back on every keystroke, and writing
|
|
1226
1157
|
* a textarea's `value` puts the caret at the end.
|
|
1227
1158
|
*/
|
|
1228
1159
|
editorSeed: string;
|
|
1229
|
-
editError: WritableSignal<string | null>;
|
|
1230
|
-
/** The args the open editor was seeded from, so applying can put back what the draft cannot carry. */
|
|
1160
|
+
editError: _angular_core.WritableSignal<string | null>;
|
|
1231
1161
|
private editedArgsSource;
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1162
|
+
copiedReport: {
|
|
1163
|
+
value: _angular_core.Signal<boolean>;
|
|
1164
|
+
mark: (next: boolean) => void;
|
|
1165
|
+
clear: () => void;
|
|
1166
|
+
};
|
|
1167
|
+
copiedInsomnia: {
|
|
1168
|
+
value: _angular_core.Signal<boolean>;
|
|
1169
|
+
mark: (next: boolean) => void;
|
|
1170
|
+
clear: () => void;
|
|
1171
|
+
};
|
|
1172
|
+
copiedCurl: {
|
|
1173
|
+
value: _angular_core.Signal<boolean>;
|
|
1174
|
+
mark: (next: boolean) => void;
|
|
1175
|
+
clear: () => void;
|
|
1176
|
+
};
|
|
1177
|
+
copiedGql: {
|
|
1178
|
+
value: _angular_core.Signal<boolean>;
|
|
1179
|
+
mark: (next: boolean) => void;
|
|
1180
|
+
clear: () => void;
|
|
1181
|
+
};
|
|
1182
|
+
copiedRoute: {
|
|
1183
|
+
value: _angular_core.Signal<boolean>;
|
|
1184
|
+
mark: (next: boolean) => void;
|
|
1185
|
+
clear: () => void;
|
|
1186
|
+
};
|
|
1239
1187
|
/**
|
|
1240
1188
|
* 1-second tick driving the cache freshness countdowns. Gated the way the locks poll is: an ungated
|
|
1241
1189
|
* `interval` is a periodic macrotask zone.js counts forever, so a mounted panel would tick the host
|
|
@@ -1243,32 +1191,25 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1243
1191
|
* sits inside `@if (open())`, so there is nothing to drive while the panel is shut or the tab hidden.
|
|
1244
1192
|
*/
|
|
1245
1193
|
private clock;
|
|
1246
|
-
/**
|
|
1247
|
-
* The probe lock behind every Locks row's "this tab" answer, and the last snapshot read through it.
|
|
1248
|
-
* Both only exist while the Locks tab is on screen - see the polling stream in the constructor.
|
|
1249
|
-
*/
|
|
1250
1194
|
private probeLocks;
|
|
1251
1195
|
private probeId;
|
|
1252
1196
|
private probeHold;
|
|
1253
1197
|
private lockSnapshot;
|
|
1254
1198
|
lockRows: _angular_core.Signal<DevtoolsLockRow[] | null>;
|
|
1255
|
-
|
|
1256
|
-
protected inspectActive: WritableSignal<boolean>;
|
|
1199
|
+
protected inspectActive: _angular_core.WritableSignal<boolean>;
|
|
1257
1200
|
/** @internal */
|
|
1258
|
-
inspectHover: WritableSignal<{
|
|
1201
|
+
inspectHover: _angular_core.WritableSignal<{
|
|
1259
1202
|
rect: DOMRect;
|
|
1260
1203
|
entries: QueryDevtoolsEntry[];
|
|
1261
1204
|
} | null>;
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
locateState: WritableSignal<"idle" | "located" | "offscreen">;
|
|
1205
|
+
protected locatedRect: _angular_core.WritableSignal<DOMRect | null>;
|
|
1206
|
+
locateState: _angular_core.WritableSignal<"idle" | "located" | "offscreen">;
|
|
1265
1207
|
private locate$;
|
|
1266
|
-
|
|
1267
|
-
inspectFilterIds: WritableSignal<string[] | null>;
|
|
1208
|
+
inspectFilterIds: _angular_core.WritableSignal<string[] | null>;
|
|
1268
1209
|
private queryEntries;
|
|
1269
1210
|
/**
|
|
1270
1211
|
* The queries that still exist. Everything that measures what the application is doing right now -
|
|
1271
|
-
* the tab bar's error flags, the tamper dot, the timeline
|
|
1212
|
+
* the tab bar's error flags, the tamper dot, the timeline -
|
|
1272
1213
|
* reads this rather than {@link queryEntries}, so a tombstone never inflates a live number.
|
|
1273
1214
|
*/
|
|
1274
1215
|
private liveQueryEntries;
|
|
@@ -1279,7 +1220,6 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1279
1220
|
formEntries: _angular_core.Signal<QueryDevtoolsEntry[]>;
|
|
1280
1221
|
authEntries: _angular_core.Signal<QueryDevtoolsEntry[]>;
|
|
1281
1222
|
wsEntries: _angular_core.Signal<QueryDevtoolsEntry[]>;
|
|
1282
|
-
/** Unique client names present across queries and auth providers, for the Queries-tab picker. */
|
|
1283
1223
|
clientNames: _angular_core.Signal<string[]>;
|
|
1284
1224
|
/**
|
|
1285
1225
|
* Unique repositories (with their client name + base URL) used by the Cache and Events tabs. A
|
|
@@ -1287,47 +1227,18 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1287
1227
|
* and its **Evict all** long after its injector died.
|
|
1288
1228
|
*/
|
|
1289
1229
|
private repositories;
|
|
1290
|
-
/**
|
|
1291
|
-
* Every client the Faults tab can arm, with the fault it currently carries. Clients with nothing armed
|
|
1292
|
-
* read as {@link EMPTY_QUERY_DEVTOOLS_FAULT} so the inputs always have a value to show.
|
|
1293
|
-
*/
|
|
1294
1230
|
faultClients: _angular_core.Signal<{
|
|
1295
1231
|
name: string;
|
|
1296
1232
|
baseUrl: string;
|
|
1297
1233
|
fault: _ethlete_query.QueryDevtoolsFault;
|
|
1298
1234
|
armed: boolean;
|
|
1299
1235
|
}[]>;
|
|
1300
|
-
/**
|
|
1301
|
-
* The names of the clients currently carrying a fault, or `null` when none do - so a template can `@if`
|
|
1302
|
-
* on it. Armed faults are the one state where the panel is lying to the app on purpose, and a badge on a
|
|
1303
|
-
* tab that isn't open cannot say that: whichever tab you are reading, a red response has to be
|
|
1304
|
-
* attributable to the injection rather than to the API.
|
|
1305
|
-
*/
|
|
1306
1236
|
protected armedFaultClients: _angular_core.Signal<string[] | null>;
|
|
1307
|
-
/**
|
|
1308
|
-
* The routes currently answered by a designed mock, for the shell's banner. A mocked response is a
|
|
1309
|
-
* stronger lie than an override - nothing was sent at all - so it is named above every tab, not just
|
|
1310
|
-
* badged on the one that armed it.
|
|
1311
|
-
*/
|
|
1312
1237
|
protected armedMockRoutes: _angular_core.Signal<string[] | null>;
|
|
1313
|
-
/**
|
|
1314
|
-
* The queries the list is scoped to before the search box and the status chips narrow them further:
|
|
1315
|
-
* either the picked client's, or exactly the inspected element's.
|
|
1316
|
-
*/
|
|
1317
1238
|
scopedQueries: _angular_core.Signal<QueryDevtoolsEntry[]>;
|
|
1318
|
-
/** How many runs every query has recorded, for the Timeline tab's badge. */
|
|
1319
1239
|
private runTotals;
|
|
1320
|
-
/** Cache entries across every client, for the Cache tab's badge. */
|
|
1321
1240
|
private cacheEntryCount;
|
|
1322
|
-
/**
|
|
1323
|
-
* What each tab holds, so a failing query in a tab that is not open is still visible. Reading it
|
|
1324
|
-
* subscribes the tab bar to every entry's live state - which is the point of the badges.
|
|
1325
|
-
*/
|
|
1326
1241
|
protected tabBadges: _angular_core.Signal<Record<DevtoolsTab, TabBadge>>;
|
|
1327
|
-
/**
|
|
1328
|
-
* The tabs the bar shows: the pinned ones, the one that is open, and every tab that currently holds
|
|
1329
|
-
* something.
|
|
1330
|
-
*/
|
|
1331
1242
|
protected visibleTabs: _angular_core.Signal<({
|
|
1332
1243
|
id: "queries";
|
|
1333
1244
|
label: string;
|
|
@@ -1371,7 +1282,6 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1371
1282
|
id: "about";
|
|
1372
1283
|
label: string;
|
|
1373
1284
|
})[]>;
|
|
1374
|
-
/** The empty tabs, which the bar offers behind "More" instead. */
|
|
1375
1285
|
protected overflowTabs: _angular_core.Signal<({
|
|
1376
1286
|
id: "queries";
|
|
1377
1287
|
label: string;
|
|
@@ -1460,19 +1370,11 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1460
1370
|
client: QueryClient | null;
|
|
1461
1371
|
dropped: DroppedCacheEntry[];
|
|
1462
1372
|
}[]>;
|
|
1463
|
-
/** Map of a component's host element to the query entries it created (for the inspect tool). */
|
|
1464
1373
|
private elementQueryMap;
|
|
1465
|
-
/** Disarms every client's fault - the shell's "Faults armed" banner offers this above every tab. */
|
|
1466
1374
|
protected readonly CLEAR_FAULTS: (clientName?: string) => void;
|
|
1467
|
-
/** Whether what is armed came back from a previous page load, which is what the bars have to say. */
|
|
1468
1375
|
protected faultsRestored: _angular_core.Signal<boolean>;
|
|
1469
1376
|
protected mocksRestored: _angular_core.Signal<boolean>;
|
|
1470
|
-
/** Stops serving every designed mock - the shell's "Mocks armed" banner offers the same way out. */
|
|
1471
1377
|
protected readonly DISARM_MOCKS: () => void;
|
|
1472
|
-
/**
|
|
1473
|
-
* What the previous page load left armed: how many ops came back, how many queries took them, and the
|
|
1474
|
-
* ids nothing claimed. `null` when this page inherited nothing, so a template can `@if` on it.
|
|
1475
|
-
*/
|
|
1476
1378
|
protected restoredOverrides: _angular_core.Signal<{
|
|
1477
1379
|
queries: number;
|
|
1478
1380
|
ops: number;
|
|
@@ -1480,32 +1382,19 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1480
1382
|
orphaned: string[];
|
|
1481
1383
|
fromLocalStorage: boolean;
|
|
1482
1384
|
} | null>;
|
|
1483
|
-
/** Drops everything the reload re-armed, and empties the store it came from. */
|
|
1484
1385
|
protected readonly DROP_RESTORED_OVERRIDES: () => void;
|
|
1485
|
-
/** Every edge, so a float resizes the way a window does rather than only from one corner. */
|
|
1486
1386
|
protected readonly FLOAT_RESIZE_EDGES: ResizeEdge[];
|
|
1487
1387
|
constructor();
|
|
1488
1388
|
ngOnInit(): void;
|
|
1489
|
-
/** @see queryDevtoolsOverridePersistence */
|
|
1490
1389
|
overridesPersist(): boolean;
|
|
1491
1390
|
toggleOverridesPersist(): void;
|
|
1492
|
-
/** Where armed overrides are kept, as the drawer's toggle and the Settings picker both name it. */
|
|
1493
1391
|
overridesScopeLabel(): string;
|
|
1494
1392
|
/**
|
|
1495
|
-
* Puts
|
|
1496
|
-
*
|
|
1497
|
-
* scopes and limits that were chosen deliberately.
|
|
1498
|
-
*
|
|
1499
|
-
* Resetting the live state is the point, not just clearing the keys: the persistence effects would
|
|
1500
|
-
* write the current state straight back into whatever store the scopes name.
|
|
1393
|
+
* Puts layout, filters, selections, pins and stored overrides back the way they ship; the settings stay.
|
|
1394
|
+
* Resets the live state too, or the persistence effects write it straight back.
|
|
1501
1395
|
*/
|
|
1502
1396
|
resetDevtools(): void;
|
|
1503
|
-
/**
|
|
1504
|
-
* Opens Settings over whatever tab is showing, and the same click closes it again. Settings is not in
|
|
1505
|
-
* the tab bar - see {@link DevtoolsTab}.
|
|
1506
|
-
*/
|
|
1507
1397
|
protected toggleSettings(): void;
|
|
1508
|
-
/** Opens the first query the reload re-armed, so the banner leads somewhere rather than just warning. */
|
|
1509
1398
|
protected reviewRestoredOverrides(id: string): void;
|
|
1510
1399
|
/**
|
|
1511
1400
|
* Closing while popped out docks back instead: the panel a pop-out shows is the very element the
|
|
@@ -1515,17 +1404,13 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1515
1404
|
protected floatPanel(): void;
|
|
1516
1405
|
protected selectLayout(layout: DevtoolsLayout): void;
|
|
1517
1406
|
/**
|
|
1518
|
-
* Moves the panel into a
|
|
1519
|
-
*
|
|
1520
|
-
*
|
|
1521
|
-
* The panel's styles are global `<style>` tags in the host document, and the theming tokens it reads
|
|
1522
|
-
* hang off the root element, so both are copied over; without them the pop-out renders unstyled.
|
|
1407
|
+
* Moves the panel element into a pop-up window. The host document's `<style>` tags and root theming
|
|
1408
|
+
* tokens must be copied over with it, or the pop-out renders unstyled.
|
|
1523
1409
|
*/
|
|
1524
1410
|
popOut(): void;
|
|
1525
1411
|
selectClient(name: string | null): void;
|
|
1526
1412
|
clearInspectFilter(): void;
|
|
1527
1413
|
toggleFacet(facet: QueryListFacet): void;
|
|
1528
|
-
/** Drops the search term and the status chips, keeping the client / inspection scope. */
|
|
1529
1414
|
clearQueryFilters(): void;
|
|
1530
1415
|
isQueryPinned(entry: QueryDevtoolsEntry): boolean;
|
|
1531
1416
|
toggleQueryPath(key: string): void;
|
|
@@ -1533,11 +1418,8 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1533
1418
|
protected toggleInspect(): void;
|
|
1534
1419
|
protected startResize(event: PointerEvent): void;
|
|
1535
1420
|
protected moveFloat(move: DragMoveEvent): void;
|
|
1536
|
-
/** Parks the panel where a drag left it, or pulls it back in if the drag stopped short of an edge. */
|
|
1537
1421
|
protected endFloatMove(): void;
|
|
1538
|
-
/** A click on the title bar of a parked panel brings it back - the gesture that parked it, reversed. */
|
|
1539
1422
|
protected restoreFloat(): void;
|
|
1540
|
-
/** A resize reports a delta from where the pointer went down, so the rect it started from is kept. */
|
|
1541
1423
|
protected startFloatResize(): void;
|
|
1542
1424
|
protected resizeFloat(move: ResizeMoveEvent): void;
|
|
1543
1425
|
protected endFloatResize(): void;
|
|
@@ -1545,16 +1427,9 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1545
1427
|
pane: PaneTarget;
|
|
1546
1428
|
container: HTMLElement;
|
|
1547
1429
|
}): void;
|
|
1548
|
-
/** Hands a pane back to the stylesheet's proportional default, on the axis it is being sized along. */
|
|
1549
1430
|
resetPaneSize(pane: PaneTarget): void;
|
|
1550
1431
|
protected inspectLabel(entries: QueryDevtoolsEntry[]): string;
|
|
1551
|
-
/**
|
|
1552
|
-
* A query's route, split so the template can tell its static path from its path params (each carrying
|
|
1553
|
-
* the value the query used, or `:<name>` while it has none yet) and from the query string of the
|
|
1554
|
-
* request that ran - which is what tells two requests to the same endpoint apart.
|
|
1555
|
-
*/
|
|
1556
1432
|
routeSegments(entry: QueryDevtoolsEntry | undefined, query: AnyQuery): RouteSegment[];
|
|
1557
|
-
/** The full URL of the request a query last made, or `null` while it has not executed. */
|
|
1558
1433
|
requestUrl(query: AnyQuery): string | null;
|
|
1559
1434
|
/**
|
|
1560
1435
|
* The args of a query. A query executed imperatively (`execute({ args })`, a sequence step, an auth
|
|
@@ -1563,80 +1438,37 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1563
1438
|
*/
|
|
1564
1439
|
queryArgs(query: AnyQuery): Omit<any, "response" | "rawResponse"> | null;
|
|
1565
1440
|
/**
|
|
1566
|
-
* The headers
|
|
1567
|
-
*
|
|
1568
|
-
*
|
|
1569
|
-
* now. `null` while a header provider throws - a secure query's needs an access token.
|
|
1570
|
-
*
|
|
1571
|
-
* The args tree cannot answer this on its own: a `withArgs` query reads its args from the feature's
|
|
1572
|
-
* source, which the secure `Authorization` provider is never written back to, and client-level
|
|
1573
|
-
* headers are merged in per execution rather than being part of the args at all.
|
|
1441
|
+
* The headers the last run sent, or what the args and client resolve to now for a query that has not
|
|
1442
|
+
* run; `null` while a header provider throws. Client headers and the secure `Authorization` never
|
|
1443
|
+
* reach the args, so the args alone cannot answer this.
|
|
1574
1444
|
*/
|
|
1575
1445
|
requestHeaders(query: AnyQuery): {
|
|
1576
1446
|
[k: string]: string;
|
|
1577
1447
|
} | null;
|
|
1578
1448
|
queryStatus(query: AnyQuery): QueryStatus;
|
|
1579
|
-
/**
|
|
1580
|
-
* A request in flight is already refreshing, so reporting it as stale on top of `loading` is noise -
|
|
1581
|
-
* the same precedence the cache tab's freshness column applies.
|
|
1582
|
-
*/
|
|
1583
1449
|
isStale(query: AnyQuery): boolean;
|
|
1584
|
-
/**
|
|
1585
|
-
* Whether an entry is showing something other than what the server actually sent - an armed response
|
|
1586
|
-
* override, or a devtools fault that decided its last completed run. Deliberately not "a fault is
|
|
1587
|
-
* armed nearby": an armed-but-idle fault (a `failRate` under 100, say) mostly lets requests through
|
|
1588
|
-
* untouched, so that would over-claim for the vast majority of queries on that client.
|
|
1589
|
-
*/
|
|
1590
1450
|
isTampered(entry: QueryDevtoolsEntry): boolean;
|
|
1591
|
-
/** Whether a designed mock is armed for this query's own route, so nothing it shows came off the wire. */
|
|
1592
1451
|
isMocked(entry: QueryDevtoolsEntry): boolean;
|
|
1593
|
-
/**
|
|
1594
|
-
* What a query's current request is doing beyond being loading, or `null` when there is nothing beyond
|
|
1595
|
-
* the status dot to say - so the readout only takes up room while it carries something.
|
|
1596
|
-
*/
|
|
1597
1452
|
requestProgress(query: AnyQuery): RequestProgress | null;
|
|
1598
|
-
/** Why a retry was scheduled, as the panel spells it out. A status of 0 never reached the server. */
|
|
1599
1453
|
retryCause(status: number): string;
|
|
1600
1454
|
formatPercent(percentage: number): string;
|
|
1601
|
-
/** A countdown in whole seconds, spelled out the way the cache freshness column does. */
|
|
1602
1455
|
formatCountdown(ms: number | null): string;
|
|
1603
1456
|
queryActivity(entry: QueryDevtoolsEntry): QueryActivity;
|
|
1604
1457
|
linkActivity(link: QueryLink): QueryActivity;
|
|
1605
1458
|
stackActivity(stack: AnyQueryStack | AnyPagedQueryStack): QueryActivity;
|
|
1606
1459
|
sequenceActivity(sequence: QuerySequence<unknown[]>): QueryActivity;
|
|
1607
|
-
/** Clears an entry's counters and run history, so the next interaction can be measured on its own. */
|
|
1608
1460
|
resetStats(entry: QueryDevtoolsEntry): void;
|
|
1609
|
-
/** A query's runs, newest first - the order a history is read in. */
|
|
1610
1461
|
queryRuns(entry: QueryDevtoolsEntry): QueryDevtoolsRun[];
|
|
1611
|
-
/**
|
|
1612
|
-
* What a run's status dot and timeline bar colour by. `pending` reuses the panel's loading colour;
|
|
1613
|
-
* `aborted` matches no rule and so falls back to the neutral one.
|
|
1614
|
-
*/
|
|
1615
1462
|
runStatus(run: QueryDevtoolsRun): "loading" | "success" | "error" | "aborted";
|
|
1616
|
-
/**
|
|
1617
|
-
* Whether a run can be an end of the diff: it still holds its body, and so does some other run of the
|
|
1618
|
-
* same query. Deliberately not "an *older* run" - a free pair means the oldest body held is pickable
|
|
1619
|
-
* too, as the base of a comparison against something newer.
|
|
1620
|
-
*/
|
|
1621
1463
|
canDiffRun(entry: QueryDevtoolsEntry, run: QueryDevtoolsRun): boolean;
|
|
1622
|
-
/**
|
|
1623
|
-
* Arms a run as one end of the diff, or - with one end already armed - as the other. Clicking either
|
|
1624
|
-
* end clears both.
|
|
1625
|
-
*/
|
|
1626
1464
|
toggleRunDiff(entry: QueryDevtoolsEntry, run: QueryDevtoolsRun): void;
|
|
1627
|
-
/** Which end of the comparison a run is, so a row says so and the two ends read differently. */
|
|
1628
1465
|
diffRunRole(entry: QueryDevtoolsEntry, run: QueryDevtoolsRun): 'base' | 'compare' | null;
|
|
1629
1466
|
responseDiff(entry: QueryDevtoolsEntry): {
|
|
1630
1467
|
before: QueryDevtoolsRun;
|
|
1631
1468
|
after: QueryDevtoolsRun;
|
|
1632
1469
|
diff: QueryDevtoolsDiff;
|
|
1633
1470
|
} | null;
|
|
1634
|
-
/** Whether the diff header's older/newer control has a pair to move to. */
|
|
1635
1471
|
canStepRunDiff(entry: QueryDevtoolsEntry, older: boolean): boolean;
|
|
1636
|
-
/**
|
|
1637
|
-
* Moves the whole comparison one run older or newer, so re-picking a pair does not mean scrolling back
|
|
1638
|
-
* up to the runs table. Within the handful of retained bodies there are only a few pairs to walk.
|
|
1639
|
-
*/
|
|
1640
1472
|
stepRunDiff(entry: QueryDevtoolsEntry, older: boolean): void;
|
|
1641
1473
|
toggleRunError(run: QueryDevtoolsRun): void;
|
|
1642
1474
|
/**
|
|
@@ -1648,17 +1480,10 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1648
1480
|
run: QueryDevtoolsRun;
|
|
1649
1481
|
error: _ethlete_query.QueryDevtoolsRunError;
|
|
1650
1482
|
} | null;
|
|
1651
|
-
/** Opens a query in the Queries tab - the Events tab is a way in, not a dead end. */
|
|
1652
1483
|
selectQuery(id: string): void;
|
|
1653
|
-
/** A value on one line, for a diff row or a form field. The full tree would bury the row it sits in. */
|
|
1654
1484
|
inlineValue(value: unknown): string;
|
|
1655
1485
|
formatBytes(bytes: number): string;
|
|
1656
|
-
/**
|
|
1657
|
-
* A transferred size, marked `≈` when any part of it was measured from a decoded body instead of read
|
|
1658
|
-
* from a `content-length` header - such a size ignores transport compression.
|
|
1659
|
-
*/
|
|
1660
1486
|
formatTransferred(bytes: number, isEstimated: boolean): string;
|
|
1661
|
-
/** A transfer rate, given in bytes per second the way `HttpRequestLoadingProgressState.speed` reports it. */
|
|
1662
1487
|
formatSpeed(bytesPerSecond: number): string;
|
|
1663
1488
|
formatDuration(ms: number | null): string;
|
|
1664
1489
|
/**
|
|
@@ -1668,46 +1493,17 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1668
1493
|
*/
|
|
1669
1494
|
executeQuery(selection: QueryDevtoolsSelection, allowCache: boolean): void;
|
|
1670
1495
|
resetQuery(query: AnyQuery): void;
|
|
1671
|
-
/**
|
|
1672
|
-
* Copies a shareable report (path, args, status, slimmed response) for handing to an API dev.
|
|
1673
|
-
* Writes both rich `text/html` (Slack applies formatting on paste - it does not parse markdown) and
|
|
1674
|
-
* a plain-text fallback.
|
|
1675
|
-
*/
|
|
1676
1496
|
copyReport(entry: QueryDevtoolsEntry, query: AnyQuery): void;
|
|
1677
|
-
/** Copies one query as an Insomnia collection, for `Import > From Clipboard`. */
|
|
1678
1497
|
copyInsomniaRequest(entry: QueryDevtoolsEntry, query: AnyQuery): void;
|
|
1679
|
-
/**
|
|
1680
|
-
* Copies one query as a `curl` command - what goes into a terminal, a ticket or a chat message, where
|
|
1681
|
-
* an Insomnia collection is too heavy to be read at all.
|
|
1682
|
-
*/
|
|
1683
1498
|
copyCurlRequest(entry: QueryDevtoolsEntry, query: AnyQuery): void;
|
|
1684
|
-
/** Copies the GraphQL document as displayed — dedented, so it pastes straight into a playground. */
|
|
1685
1499
|
copyGqlDocument(doc: string): void;
|
|
1686
|
-
/**
|
|
1687
|
-
* The endpoint of a query as one string: the absolute URL its last request used, or - for a query
|
|
1688
|
-
* that has not run - the rendered route on screen.
|
|
1689
|
-
*/
|
|
1690
1500
|
copyableRoute(entry: QueryDevtoolsEntry, query: AnyQuery): string;
|
|
1691
|
-
/** Names which of the two strings {@link copyableRoute} is offering, so the button says what it copies. */
|
|
1692
1501
|
copyableRouteTitle(entry: QueryDevtoolsEntry, query: AnyQuery): string;
|
|
1693
|
-
/** Copies {@link copyableRoute} - the endpoint on its own, where the exports are a whole document. */
|
|
1694
1502
|
copyRoute(entry: QueryDevtoolsEntry, query: AnyQuery): void;
|
|
1695
|
-
/**
|
|
1696
|
-
* Downloads the given queries (already scoped/filtered by the caller) as one Insomnia collection,
|
|
1697
|
-
* filed into a folder per query client.
|
|
1698
|
-
*/
|
|
1699
1503
|
downloadInsomniaCollection(items: {
|
|
1700
1504
|
entry: QueryDevtoolsEntry;
|
|
1701
1505
|
query: AnyQuery;
|
|
1702
1506
|
}[], clientLabel: string | null): void;
|
|
1703
|
-
/**
|
|
1704
|
-
* Downloads the whole panel as one JSON file: every registered entry with what it ran and what it
|
|
1705
|
-
* holds, the event log, the cache totals and anything armed in the Faults tab. Unlike **Copy report**
|
|
1706
|
-
* this is not scoped to one query - it is the attachment for a bug report about a screen.
|
|
1707
|
-
*
|
|
1708
|
-
* Deliberately unfiltered apart from credentials: a report is read by someone who was not there, and a
|
|
1709
|
-
* dump that silently left out the client you were not looking at is worse than no dump.
|
|
1710
|
-
*/
|
|
1711
1507
|
protected downloadSession(): void;
|
|
1712
1508
|
openResponseEditor(query: AnyQuery): void;
|
|
1713
1509
|
openArgsEditor({ entry, query }: QueryDevtoolsSelection): void;
|
|
@@ -1720,32 +1516,14 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1720
1516
|
clearForced(query: AnyQuery): void;
|
|
1721
1517
|
refetchCacheEntry(entry: QueryRepositoryCacheEntry): void;
|
|
1722
1518
|
evictCacheEntry(repository: QueryRepository, key: string): void;
|
|
1723
|
-
/**
|
|
1724
|
-
* Drops every entry of one client, consumers included - the cold-start check that does not need a
|
|
1725
|
-
* reload. A query still bound to an evicted entry requests again on its next execution.
|
|
1726
|
-
*/
|
|
1727
1519
|
evictAllCacheEntries(repository: QueryRepository): void;
|
|
1728
|
-
/**
|
|
1729
|
-
* Expands the response held under a cache key, which is the only way to read an entry no live query is
|
|
1730
|
-
* bound to any more - the Queries tab has nothing to select for it.
|
|
1731
|
-
*/
|
|
1732
1520
|
toggleCacheValue(clientName: string, key: string): void;
|
|
1733
1521
|
isCacheValueExpanded(clientName: string, key: string): boolean;
|
|
1734
1522
|
cacheFreshness(entry: QueryRepositoryCacheEntry): string;
|
|
1735
|
-
/**
|
|
1736
|
-
* What multi-tab sync is doing for a cache entry: whether this tab is the one polling the key, and
|
|
1737
|
-
* how long ago it last took a response from another tab. Empty when the client has no sync.
|
|
1738
|
-
*/
|
|
1739
1523
|
cacheSync(entry: QueryRepositoryCacheEntry, pollStates: Record<string, QueryKeyLockState>): string;
|
|
1740
|
-
/**
|
|
1741
|
-
* Whether a cache entry is showing data that came off the disk rather than the network - the answer
|
|
1742
|
-
* to "why is this here already?" on a cold start. Empty when the client does not persist responses.
|
|
1743
|
-
*/
|
|
1744
1524
|
cachePersistence(entry: QueryRepositoryCacheEntry): string;
|
|
1745
|
-
/** How many responses this client has on disk, which is usually more than it has in memory. */
|
|
1746
1525
|
persistedCount(client: QueryClient): number;
|
|
1747
1526
|
clearPersistedQueries(client: QueryClient): void;
|
|
1748
|
-
/** The path + query of a request URL (origin stripped), for readable cache/event identifiers. */
|
|
1749
1527
|
requestPath(url: string): string;
|
|
1750
1528
|
asStack(entry: QueryDevtoolsEntry): AnyQueryStack;
|
|
1751
1529
|
asPagedStack(entry: QueryDevtoolsEntry): AnyPagedQueryStack;
|
|
@@ -1753,17 +1531,8 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1753
1531
|
asBatch(entry: QueryDevtoolsEntry): AnyQueryBatch;
|
|
1754
1532
|
asAuth(entry: QueryDevtoolsEntry): AnyBearerAuthProvider;
|
|
1755
1533
|
asWs(entry: QueryDevtoolsEntry): WebSocketDevtoolsHandle;
|
|
1756
|
-
/**
|
|
1757
|
-
* A socket's messages, narrowed by the filter box. Every whitespace-separated term has to match the
|
|
1758
|
-
* event, the room or the direction, so `out join` finds the room joins the client sent.
|
|
1759
|
-
*/
|
|
1760
1534
|
socketMessages(ws: WebSocketDevtoolsHandle): WebSocketDevtoolsMessage[];
|
|
1761
|
-
/** How the message log labels a direction: what the client sent, versus what the server pushed. */
|
|
1762
1535
|
socketDirectionLabel(message: WebSocketDevtoolsMessage): "↑ sent" | "↓ received";
|
|
1763
|
-
/**
|
|
1764
|
-
* Sends a message as the app would, so a server that only answers a client that asked can be provoked
|
|
1765
|
-
* from the panel. An empty payload sends nothing rather than `""` - a plain event is a valid message.
|
|
1766
|
-
*/
|
|
1767
1536
|
emitSocketMessage(options: {
|
|
1768
1537
|
entry: QueryDevtoolsEntry;
|
|
1769
1538
|
event: string;
|
|
@@ -1771,98 +1540,50 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1771
1540
|
}): void;
|
|
1772
1541
|
socketEmitErrorFor(entryId: string): string | null;
|
|
1773
1542
|
asForm(entry: QueryDevtoolsEntry): QueryDevtoolsFormHandle;
|
|
1774
|
-
/**
|
|
1775
|
-
* The queries a form feeds, discovered from the reads its `value()` recorded while their args were
|
|
1776
|
-
* built - so a form that nothing consumes yet reads as exactly that.
|
|
1777
|
-
*/
|
|
1778
1543
|
queriesDrivenByForm(entry: QueryDevtoolsEntry): QueryLink[];
|
|
1779
|
-
/** The reverse: the forms whose value a query's args read. */
|
|
1780
1544
|
formsDrivingQuery(entry: QueryDevtoolsEntry): QueryDevtoolsEntry[];
|
|
1781
1545
|
selectForm(id: string): void;
|
|
1782
|
-
/**
|
|
1783
|
-
* The refreshes that re-executed a query, newest first - the answer to "why did this refetch?". Read
|
|
1784
|
-
* off the event log, so it goes back exactly as far as the log does.
|
|
1785
|
-
*/
|
|
1786
1546
|
refreshesFor(entryId: string): {
|
|
1787
1547
|
id: number;
|
|
1788
1548
|
timestamp: number;
|
|
1789
1549
|
label: string;
|
|
1790
1550
|
}[];
|
|
1791
|
-
/** What asked for a refresh, on one line. */
|
|
1792
1551
|
causeLabel(cause: QueryRefreshCause): string;
|
|
1793
|
-
/** Derives the per-step status of a sequence step from its live progress signals. */
|
|
1794
1552
|
sequenceStepStatus(sequence: QuerySequence<unknown[]>, index: number): QuerySequenceStatus;
|
|
1795
1553
|
authTokenPayload(auth: AnyBearerAuthProvider): Record<string, unknown> | null;
|
|
1796
1554
|
queriesForStack(stack: AnyQueryStack | AnyPagedQueryStack): QueryLink[];
|
|
1797
1555
|
authQueryKeys(auth: AnyBearerAuthProvider): string[];
|
|
1798
|
-
/** Where this tab stands on one lock, as a chip. @see lockRows */
|
|
1799
1556
|
lockStanding(row: DevtoolsLockRow): QueryDevtoolsChip;
|
|
1800
|
-
/**
|
|
1801
|
-
* Which tab refreshes this provider's tokens, as a chip: whether it is this one, how many tabs are
|
|
1802
|
-
* in the election, and - when there is no election - why every tab reads as the leader.
|
|
1803
|
-
*/
|
|
1804
1557
|
authLeadership(auth: AnyBearerAuthProvider): QueryDevtoolsChip | null;
|
|
1805
|
-
/**
|
|
1806
|
-
* The access token's expiry as the app sees it, plus whatever the panel is doing to it: an armed
|
|
1807
|
-
* lifetime replaces the countdown, and the token's own is reported next to it so the card never claims
|
|
1808
|
-
* a refresh is due at a time the API would disagree with.
|
|
1809
|
-
*/
|
|
1810
1558
|
authTokenLifetime(entry: QueryDevtoolsEntry): QueryDevtoolsTokenLifetime;
|
|
1811
1559
|
queriesForSequence(sequence: QuerySequence<unknown[]>): QueryLink[];
|
|
1812
|
-
/** The snapshot of a sequence step, once it has run (holds the args in and the response/error out). */
|
|
1813
1560
|
stepSnapshot(sequence: QuerySequence<unknown[]>, index: number): AnyQuerySnapshot | null;
|
|
1814
1561
|
toggleQueryGroup(key: string): void;
|
|
1815
1562
|
expandQueryGroup(key: string): void;
|
|
1816
1563
|
isStepExpanded(entryId: string, index: number): boolean;
|
|
1817
1564
|
toggleStep(entryId: string, index: number): void;
|
|
1818
|
-
/** A batch's route with its path params left as `:name` - a batch fills them in per item, not once. */
|
|
1819
1565
|
batchRouteSegments(entry: QueryDevtoolsEntry): RouteSegment[];
|
|
1820
1566
|
batchOf(entry: QueryDevtoolsEntry): QueryDevtoolsEntry | null;
|
|
1821
1567
|
queriesForBatch(entry: QueryDevtoolsEntry): QueryLink[];
|
|
1822
|
-
/**
|
|
1823
|
-
* The registry entry of one of a batch's items, or `null` once it has fallen out of the batch's capped
|
|
1824
|
-
* tombstone tail - which is what makes an item row openable only while its query is still kept.
|
|
1825
|
-
*/
|
|
1826
1568
|
batchItemQueryId(entry: QueryDevtoolsEntry, index: number): string | null;
|
|
1827
1569
|
batchItems(entry: QueryDevtoolsEntry): BatchItemView;
|
|
1828
1570
|
batchThroughput(batch: AnyQueryBatch): string | null;
|
|
1829
1571
|
isBatchItemExpanded(entryId: string, index: number): boolean;
|
|
1830
1572
|
toggleBatchItem(entryId: string, index: number): void;
|
|
1831
|
-
/** Dedents a GraphQL document (template-literal indentation) for readable display. */
|
|
1832
1573
|
gqlDocument(doc: string): string;
|
|
1833
1574
|
featureLabel(type: string): string;
|
|
1834
|
-
/** A feature and its options on one line, for a report or a chip's tooltip. */
|
|
1835
1575
|
featureSummary(feature: QueryDevtoolsFeature): string;
|
|
1836
|
-
/** The features of the client behind a cache tab card, or `null` for a client without any. */
|
|
1837
1576
|
clientFeatures(client: QueryClient | null | undefined): QueryDevtoolsFeature[] | null;
|
|
1838
1577
|
formatTime(timestamp: number | null): string;
|
|
1839
|
-
/**
|
|
1840
|
-
* The element a query was created in, which is what {@link locateQuery} can point at. `null` for a
|
|
1841
|
-
* query created outside a component or directive injector - a root service, a resolver, a guard.
|
|
1842
|
-
*/
|
|
1843
1578
|
locatableElement(entry: QueryDevtoolsEntry): HTMLElement | null;
|
|
1844
|
-
/**
|
|
1845
|
-
* Scrolls the element the selected query was created in into view and draws the inspect box over it -
|
|
1846
|
-
* inspect run backwards. Where a query was *created* is not necessarily where its data is rendered,
|
|
1847
|
-
* which is what the button's "created here" wording is for.
|
|
1848
|
-
*/
|
|
1849
1579
|
locateQuery(entry: QueryDevtoolsEntry): void;
|
|
1850
|
-
/** Downloads a file a tab generated. @see QueryDevtoolsHost.downloadTextFile */
|
|
1851
1580
|
downloadTextFile(file: {
|
|
1852
1581
|
name: string;
|
|
1853
1582
|
content: string;
|
|
1854
1583
|
type: string;
|
|
1855
1584
|
}): void;
|
|
1856
|
-
|
|
1857
|
-
* The headers an execution of this request would resolve to now: the client's with the per-request
|
|
1858
|
-
* ones merged on top, providers called. `undefined` when a provider throws, which for a secure query
|
|
1859
|
-
* means no access token is available yet.
|
|
1860
|
-
*/
|
|
1585
|
+
eventQueryId(event: EventLogItem): string | null;
|
|
1861
1586
|
private resolvedHeaders;
|
|
1862
|
-
/**
|
|
1863
|
-
* The same route rendered from a set of args rather than from a query, which is what a batch item leaves
|
|
1864
|
-
* behind: the batch destroys its query the moment the item settles.
|
|
1865
|
-
*/
|
|
1866
1587
|
private argsRouteSegments;
|
|
1867
1588
|
private renderRoute;
|
|
1868
1589
|
/**
|
|
@@ -1871,40 +1592,16 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1871
1592
|
* the platform offers no way to ask for one's own client id.
|
|
1872
1593
|
*/
|
|
1873
1594
|
private holdProbeLock;
|
|
1874
|
-
/**
|
|
1875
|
-
* The two runs the diff compares, oldest first - normalised by run index, so picking a pair in either
|
|
1876
|
-
* order reads the same way round as the `#before → #after` header prints it.
|
|
1877
|
-
*
|
|
1878
|
-
* `null` unless a run is picked, so a closed diff costs nothing to walk.
|
|
1879
|
-
*/
|
|
1880
|
-
/**
|
|
1881
|
-
* The two runs the comparison spans, oldest first - normalised by run index, so picking a pair in
|
|
1882
|
-
* either order reads the same way round as the `#before → #after` header prints it. With only one end
|
|
1883
|
-
* armed, `after` is absent unless an older body-holding run can stand in for the base.
|
|
1884
|
-
*
|
|
1885
|
-
* `null` unless a run is armed, so a closed diff costs nothing to walk.
|
|
1886
|
-
*/
|
|
1887
|
-
/**
|
|
1888
|
-
* The pair one step older or newer than the current comparison, keeping whatever gap it has, or `null`
|
|
1889
|
-
* at either end of the retained bodies.
|
|
1890
|
-
*/
|
|
1891
1595
|
private steppedDiffPair;
|
|
1892
1596
|
private diffEnds;
|
|
1893
1597
|
private isTabPrimary;
|
|
1894
|
-
/** Moves the panel into a pop-up whose document has finished loading. @see popOut */
|
|
1895
1598
|
private mountPopOut;
|
|
1896
1599
|
/**
|
|
1897
|
-
* The
|
|
1898
|
-
*
|
|
1899
|
-
* the pop-out does not have - inherited afresh over there, the panel would take the document's theme
|
|
1900
|
-
* (usually the light one) rather than the one it was just being read against.
|
|
1901
|
-
*
|
|
1902
|
-
* Empty on a browser that does not enumerate custom properties, which leaves the tokens to be
|
|
1903
|
-
* inherited as before.
|
|
1600
|
+
* The chrome tokens as the app resolves them now: the pop-out has no ancestor carrying the host theme.
|
|
1601
|
+
* Empty on a browser that does not enumerate custom properties.
|
|
1904
1602
|
*/
|
|
1905
1603
|
private chromeTokens;
|
|
1906
1604
|
private inlineStyleOf;
|
|
1907
|
-
/** Whether a `<head>` child carries CSS the pop-out needs a copy of. */
|
|
1908
1605
|
private isStyleNode;
|
|
1909
1606
|
/**
|
|
1910
1607
|
* Copies the host document's stylesheets into the pop-up and keeps mirroring them while it is
|
|
@@ -1913,53 +1610,19 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1913
1610
|
* over there - so a one-time copy would leave everything first used after the pop-out unstyled.
|
|
1914
1611
|
*/
|
|
1915
1612
|
private syncStylesInto;
|
|
1916
|
-
/** Brings the panel back into the host element and closes the window it was living in. */
|
|
1917
1613
|
private dockBack;
|
|
1918
|
-
/** A registered query as a row that opens the detail drawer. */
|
|
1919
1614
|
private queryLinkFor;
|
|
1920
|
-
/** The activity of one entry, or the total of a group of them (a stack's queries, a whole tab). */
|
|
1921
1615
|
private activityOf;
|
|
1922
|
-
/** An activity summary on one line, for a report. `null` for a query that has not run. */
|
|
1923
1616
|
private activitySummary;
|
|
1924
|
-
/** {@link routeSegments} as a plain string, for the places that cannot render markup. */
|
|
1925
1617
|
private queryRoute;
|
|
1926
|
-
/**
|
|
1927
|
-
* Describes a query the way a replay outside the app needs it: the URL, headers and body of the
|
|
1928
|
-
* request it last made, or - for a query that has not run - what its current args would send.
|
|
1929
|
-
*/
|
|
1930
1618
|
private exportedRequest;
|
|
1931
|
-
/**
|
|
1932
|
-
* The token refreshes the given requests authenticate with - one per auth provider they name, and
|
|
1933
|
-
* only for a provider that is logged in, since a refresh request without a refresh token has
|
|
1934
|
-
* nothing to send.
|
|
1935
|
-
*/
|
|
1936
1619
|
private insomniaTokenRefreshes;
|
|
1937
1620
|
private insomniaTokenRefresh;
|
|
1938
|
-
/**
|
|
1939
|
-
* Where the access token sits in the refresh response. A provider's `extractTokens` can pull it out
|
|
1940
|
-
* of any shape, so the path is recovered by finding the live token in the last auth response - with
|
|
1941
|
-
* the default extractor's `$.accessToken` as the fallback.
|
|
1942
|
-
*/
|
|
1943
1621
|
private accessTokenPath;
|
|
1944
|
-
/**
|
|
1945
|
-
* How long Insomnia may reuse a stored refresh response: the access token's own lifetime with a
|
|
1946
|
-
* margin, so the chain refreshes shortly before the token it hands out would expire. Capped at an
|
|
1947
|
-
* hour - a long-lived (or bogus) `exp` should still hand out a token minted this session.
|
|
1948
|
-
*/
|
|
1949
1622
|
private accessTokenMaxAge;
|
|
1950
|
-
/**
|
|
1951
|
-
* The headers a replay needs, including the ones the query client adds. Header providers can throw
|
|
1952
|
-
* (a secure query's needs an access token), in which case the request is exported without them.
|
|
1953
|
-
*/
|
|
1954
1623
|
private insomniaHeaders;
|
|
1955
1624
|
private sessionClients;
|
|
1956
|
-
/**
|
|
1957
|
-
* A bearer auth provider's login and token-refresh queries are ordinary registered queries, so the
|
|
1958
|
-
* export has to be told which ones they are before it can leave their bodies out. The provider's own
|
|
1959
|
-
* entry lists them by client, method and route, which is what a query entry is matched on.
|
|
1960
|
-
*/
|
|
1961
1625
|
private sessionAuthQueryKeys;
|
|
1962
|
-
/** Every registered entry, described by whatever its kind carries. */
|
|
1963
1626
|
private sessionEntries;
|
|
1964
1627
|
private sessionQuery;
|
|
1965
1628
|
private sessionActivity;
|
|
@@ -1975,37 +1638,20 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
1975
1638
|
private sessionSocket;
|
|
1976
1639
|
private sessionEvents;
|
|
1977
1640
|
private sessionFaults;
|
|
1978
|
-
/** Only the armed ones: a capture taken while the panel was answering requests has to say which. */
|
|
1979
1641
|
private sessionMocks;
|
|
1980
1642
|
private downloadFile;
|
|
1981
1643
|
private stepKey;
|
|
1982
1644
|
private paneSize;
|
|
1983
|
-
/** The panel's size is the distance from the pointer to the edge it is docked to. */
|
|
1984
1645
|
private applyResize;
|
|
1985
|
-
/** A pane's size is the distance from the pointer to the container edge that pane sits against. */
|
|
1986
1646
|
private applyPaneResize;
|
|
1987
1647
|
private closePopup;
|
|
1988
1648
|
private updateInspectHover;
|
|
1989
1649
|
private selectInspectedQuery;
|
|
1990
1650
|
private selectionKey;
|
|
1991
|
-
/** Writes to the clipboard and ticks `copied` on success. `html` is omitted for plain-text payloads. */
|
|
1992
1651
|
private writeToClipboard;
|
|
1993
1652
|
private responseStatus;
|
|
1994
1653
|
private findQuery;
|
|
1995
1654
|
private pushEvent;
|
|
1996
|
-
/**
|
|
1997
|
-
* The registered query an event's request belongs to. A request is shared by every query on the same
|
|
1998
|
-
* cache key, so the first owner is as good as any - they all show the same response.
|
|
1999
|
-
*
|
|
2000
|
-
* The url fallback is what makes a row clickable when the query is already gone: an error that fires
|
|
2001
|
-
* as the component holding it is being destroyed (a `401` that redirects to login) has no live owner
|
|
2002
|
-
* left to match on identity, and its tombstone holds a copy of the request rather than the request.
|
|
2003
|
-
*/
|
|
2004
|
-
private resolveEventQueryId;
|
|
2005
|
-
/**
|
|
2006
|
-
* The size of a settled request's response, taken from its `content-length` when the response carried
|
|
2007
|
-
* one and measured from the decoded body otherwise.
|
|
2008
|
-
*/
|
|
2009
1655
|
private measureResponse;
|
|
2010
1656
|
private refreshedRequestOf;
|
|
2011
1657
|
private pushEventItem;
|
|
@@ -2016,7 +1662,7 @@ declare class QueryDevtoolsComponent implements OnInit {
|
|
|
2016
1662
|
declare const QUERY_DEVTOOLS_IMPORTS: readonly [typeof QueryDevtoolsComponent];
|
|
2017
1663
|
|
|
2018
1664
|
/** The version of `@ethlete/query-devtools` this build was cut from. */
|
|
2019
|
-
declare const QUERY_DEVTOOLS_VERSION = "1.0.0-next.
|
|
1665
|
+
declare const QUERY_DEVTOOLS_VERSION = "1.0.0-next.14";
|
|
2020
1666
|
|
|
2021
1667
|
export { QUERY_DEVTOOLS_IMPORTS, QUERY_DEVTOOLS_VERSION, QueryDevtoolsAboutComponent, QueryDevtoolsComponent, QueryDevtoolsJsonComponent, QueryDevtoolsJsonStylesComponent, QueryDevtoolsSettingsComponent, QueryDevtoolsTimelineStylesComponent, clampFloatToPeek, kindOf, resizedFloatRect, settledFloatRect };
|
|
2022
1668
|
export type { JsonKind };
|