@oneuptime/common 12.0.26 → 12.0.27
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/Tests/Types/API/HostnameAuthorityParsing.test.ts +1 -0
- package/Tests/Types/API/URLMailtoQueryString.test.ts +439 -0
- package/Tests/Types/API/URLQueryString.test.ts +33 -24
- package/Tests/Types/API/URLRouteQuerySeparation.test.ts +491 -0
- package/Tests/UI/Components/LogsHistogramDragTooltip.test.tsx +393 -0
- package/Tests/UI/Components/LogsViewerHistogramZoom.test.tsx +248 -0
- package/Tests/UI/Components/TelemetryHistogramDragTooltip.test.tsx +205 -0
- package/Tests/UI/Components/UseHistogramZoom.test.tsx +262 -0
- package/Types/API/URL.ts +55 -18
- package/UI/Components/Charts/Utils/useHistogramZoom.ts +101 -0
- package/UI/Components/LogsViewer/LogsViewer.tsx +19 -3
- package/UI/Components/LogsViewer/components/LogsHistogram.tsx +52 -1
- package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +18 -2
- package/UI/Components/TelemetryViewer/components/TelemetryHistogram.tsx +52 -1
- package/build/dist/Types/API/URL.js +48 -17
- package/build/dist/Types/API/URL.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/useHistogramZoom.js +47 -0
- package/build/dist/UI/Components/Charts/Utils/useHistogramZoom.js.map +1 -0
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js +15 -3
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js +33 -5
- package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +14 -2
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js +33 -5
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js.map +1 -1
- package/package.json +1 -1
|
@@ -66,6 +66,9 @@ import ProjectUtil from "../../Utils/Project";
|
|
|
66
66
|
import TelemetryServiceUtil from "../../Utils/TelemetryService";
|
|
67
67
|
import ObjectID from "../../../Types/ObjectID";
|
|
68
68
|
import OneUptimeDate from "../../../Types/Date";
|
|
69
|
+
import useHistogramZoom, {
|
|
70
|
+
HistogramZoomState,
|
|
71
|
+
} from "../Charts/Utils/useHistogramZoom";
|
|
69
72
|
|
|
70
73
|
export interface ComponentProps {
|
|
71
74
|
logs: Array<Log>;
|
|
@@ -282,6 +285,18 @@ const LogsViewer: FunctionComponent<ComponentProps> = (
|
|
|
282
285
|
const [showKeyboardShortcuts, setShowKeyboardShortcuts] =
|
|
283
286
|
useState<boolean>(false);
|
|
284
287
|
|
|
288
|
+
/*
|
|
289
|
+
* Drag-zooming the histogram is a one-way trip on its own: it swaps the
|
|
290
|
+
* window for a custom one and nothing remembers what the reader was
|
|
291
|
+
* looking at. This keeps that window so a double-click on the chart can
|
|
292
|
+
* hand it back.
|
|
293
|
+
*/
|
|
294
|
+
const histogramZoom: HistogramZoomState = useHistogramZoom({
|
|
295
|
+
timeRange: props.timeRange,
|
|
296
|
+
onTimeRangeSelect: props.onHistogramTimeRangeSelect,
|
|
297
|
+
onTimeRangeChange: props.onTimeRangeChange,
|
|
298
|
+
});
|
|
299
|
+
|
|
285
300
|
useEffect(() => {
|
|
286
301
|
setFilterData(props.filterData);
|
|
287
302
|
}, [props.filterData]);
|
|
@@ -1074,10 +1089,10 @@ const LogsViewer: FunctionComponent<ComponentProps> = (
|
|
|
1074
1089
|
exportLogs(displayedLogs, LogExportFormat.JSON, selectedColumns);
|
|
1075
1090
|
},
|
|
1076
1091
|
...(props.liveOptions ? { liveOptions: props.liveOptions } : {}),
|
|
1077
|
-
...(props.timeRange &&
|
|
1092
|
+
...(props.timeRange && histogramZoom.onTimeRangeChange
|
|
1078
1093
|
? {
|
|
1079
1094
|
timeRange: props.timeRange,
|
|
1080
|
-
onTimeRangeChange:
|
|
1095
|
+
onTimeRangeChange: histogramZoom.onTimeRangeChange,
|
|
1081
1096
|
}
|
|
1082
1097
|
: {}),
|
|
1083
1098
|
showKeyboardShortcuts,
|
|
@@ -1130,7 +1145,8 @@ const LogsViewer: FunctionComponent<ComponentProps> = (
|
|
|
1130
1145
|
<LogsHistogram
|
|
1131
1146
|
buckets={props.histogramBuckets}
|
|
1132
1147
|
isLoading={props.histogramLoading || false}
|
|
1133
|
-
onTimeRangeSelect={
|
|
1148
|
+
onTimeRangeSelect={histogramZoom.onTimeRangeSelect}
|
|
1149
|
+
onZoomOut={histogramZoom.onZoomOut}
|
|
1134
1150
|
/>
|
|
1135
1151
|
)}
|
|
1136
1152
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React, {
|
|
2
2
|
FunctionComponent,
|
|
3
3
|
ReactElement,
|
|
4
|
+
useEffect,
|
|
4
5
|
useMemo,
|
|
5
6
|
useCallback,
|
|
6
7
|
useRef,
|
|
@@ -29,6 +30,12 @@ export interface LogsHistogramProps {
|
|
|
29
30
|
buckets: Array<HistogramBucket>;
|
|
30
31
|
isLoading: boolean;
|
|
31
32
|
onTimeRangeSelect?: ((startTime: Date, endTime: Date) => void) | undefined;
|
|
33
|
+
/*
|
|
34
|
+
* Set only while the chart is showing a window the reader dragged out of
|
|
35
|
+
* it. Double-clicking the chart then puts them back on the window they
|
|
36
|
+
* started from.
|
|
37
|
+
*/
|
|
38
|
+
onZoomOut?: (() => void) | undefined;
|
|
32
39
|
}
|
|
33
40
|
|
|
34
41
|
interface PivotedRow {
|
|
@@ -86,6 +93,12 @@ const LogsHistogram: FunctionComponent<LogsHistogramProps> = (
|
|
|
86
93
|
const [selectionStart, setSelectionStart] = useState<string | null>(null);
|
|
87
94
|
const [selectionEnd, setSelectionEnd] = useState<string | null>(null);
|
|
88
95
|
const isSelecting: React.MutableRefObject<boolean> = useRef(false);
|
|
96
|
+
/*
|
|
97
|
+
* Mirrors isSelecting for rendering. The ref stays the authority so a
|
|
98
|
+
* mouseup handled twice (chart *and* window, below) cannot commit the same
|
|
99
|
+
* drag twice; the state is only here so the drag can change what is drawn.
|
|
100
|
+
*/
|
|
101
|
+
const [isDragging, setIsDragging] = useState<boolean>(false);
|
|
89
102
|
|
|
90
103
|
const pivotedData: Array<PivotedRow> = useMemo(() => {
|
|
91
104
|
return pivotBuckets(props.buckets);
|
|
@@ -110,6 +123,7 @@ const LogsHistogram: FunctionComponent<LogsHistogramProps> = (
|
|
|
110
123
|
}
|
|
111
124
|
|
|
112
125
|
isSelecting.current = true;
|
|
126
|
+
setIsDragging(true);
|
|
113
127
|
setSelectionStart(e.activeLabel as string);
|
|
114
128
|
setSelectionEnd(null);
|
|
115
129
|
},
|
|
@@ -132,12 +146,14 @@ const LogsHistogram: FunctionComponent<LogsHistogramProps> = (
|
|
|
132
146
|
!props.onTimeRangeSelect
|
|
133
147
|
) {
|
|
134
148
|
isSelecting.current = false;
|
|
149
|
+
setIsDragging(false);
|
|
135
150
|
setSelectionStart(null);
|
|
136
151
|
setSelectionEnd(null);
|
|
137
152
|
return;
|
|
138
153
|
}
|
|
139
154
|
|
|
140
155
|
isSelecting.current = false;
|
|
156
|
+
setIsDragging(false);
|
|
141
157
|
|
|
142
158
|
const start: Date = OneUptimeDate.fromString(selectionStart);
|
|
143
159
|
const end: Date = OneUptimeDate.fromString(selectionEnd);
|
|
@@ -157,6 +173,28 @@ const LogsHistogram: FunctionComponent<LogsHistogramProps> = (
|
|
|
157
173
|
setSelectionEnd(null);
|
|
158
174
|
}, [selectionStart, selectionEnd, props.onTimeRangeSelect]);
|
|
159
175
|
|
|
176
|
+
/*
|
|
177
|
+
* Readers routinely drag past the edge of a 120px-tall chart and let go
|
|
178
|
+
* outside it, where the chart's own mouseup never fires. Without this the
|
|
179
|
+
* drag would never end: the selection band would stay painted and the
|
|
180
|
+
* tooltip would stay suppressed until the next click.
|
|
181
|
+
*/
|
|
182
|
+
useEffect(() => {
|
|
183
|
+
if (!isDragging) {
|
|
184
|
+
return undefined;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
const finishDragOutsideChart: () => void = (): void => {
|
|
188
|
+
handleMouseUp();
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
window.addEventListener("mouseup", finishDragOutsideChart);
|
|
192
|
+
|
|
193
|
+
return () => {
|
|
194
|
+
window.removeEventListener("mouseup", finishDragOutsideChart);
|
|
195
|
+
};
|
|
196
|
+
}, [isDragging, handleMouseUp]);
|
|
197
|
+
|
|
160
198
|
if (props.isLoading && pivotedData.length === 0) {
|
|
161
199
|
return (
|
|
162
200
|
<div className="flex h-32 items-center justify-center rounded-lg border border-gray-200 bg-white">
|
|
@@ -178,6 +216,11 @@ const LogsHistogram: FunctionComponent<LogsHistogramProps> = (
|
|
|
178
216
|
{props.onTimeRangeSelect && (
|
|
179
217
|
<span className="text-[10px] text-gray-300">Drag to zoom</span>
|
|
180
218
|
)}
|
|
219
|
+
{props.onZoomOut && (
|
|
220
|
+
<span className="text-[10px] text-gray-300">
|
|
221
|
+
Double-click to zoom out
|
|
222
|
+
</span>
|
|
223
|
+
)}
|
|
181
224
|
</div>
|
|
182
225
|
<div className="flex items-center gap-3">
|
|
183
226
|
{activeSeverities.map((severity: string) => {
|
|
@@ -197,11 +240,12 @@ const LogsHistogram: FunctionComponent<LogsHistogramProps> = (
|
|
|
197
240
|
|
|
198
241
|
{/* Chart */}
|
|
199
242
|
<div
|
|
200
|
-
className="px-2 pb-1 pt-2"
|
|
243
|
+
className="select-none px-2 pb-1 pt-2"
|
|
201
244
|
style={{
|
|
202
245
|
height: 120,
|
|
203
246
|
cursor: props.onTimeRangeSelect ? "crosshair" : "default",
|
|
204
247
|
}}
|
|
248
|
+
onDoubleClick={props.onZoomOut}
|
|
205
249
|
>
|
|
206
250
|
<ResponsiveContainer width="100%" height="100%">
|
|
207
251
|
<BarChart
|
|
@@ -237,9 +281,16 @@ const LogsHistogram: FunctionComponent<LogsHistogramProps> = (
|
|
|
237
281
|
allowDecimals={false}
|
|
238
282
|
tickFormatter={formatYAxisTick}
|
|
239
283
|
/>
|
|
284
|
+
{/*
|
|
285
|
+
* The tooltip is pinned shut for the length of a drag: it would
|
|
286
|
+
* otherwise sit over the very bars the reader is trying to read
|
|
287
|
+
* while they pick the range. Dropping the prop hands control back
|
|
288
|
+
* to recharts once the drag ends.
|
|
289
|
+
*/}
|
|
240
290
|
<Tooltip
|
|
241
291
|
content={<HistogramTooltip />}
|
|
242
292
|
cursor={{ fill: "rgba(99,102,241,0.06)" }}
|
|
293
|
+
{...(isDragging ? { active: false } : {})}
|
|
243
294
|
/>
|
|
244
295
|
{activeSeverities.map((severity: string, index: number) => {
|
|
245
296
|
const isLast: boolean = index === activeSeverities.length - 1;
|
|
@@ -21,6 +21,9 @@ import ComponentLoader from "../ComponentLoader/ComponentLoader";
|
|
|
21
21
|
import ErrorMessage from "../ErrorMessage/ErrorMessage";
|
|
22
22
|
import Icon from "../Icon/Icon";
|
|
23
23
|
import IconProp from "../../../Types/Icon/IconProp";
|
|
24
|
+
import useHistogramZoom, {
|
|
25
|
+
HistogramZoomState,
|
|
26
|
+
} from "../Charts/Utils/useHistogramZoom";
|
|
24
27
|
|
|
25
28
|
export interface TelemetryViewerProps<T> {
|
|
26
29
|
// -- Data --
|
|
@@ -132,6 +135,18 @@ function TelemetryViewerInner<T>(props: TelemetryViewerProps<T>): ReactElement {
|
|
|
132
135
|
|
|
133
136
|
const showHistogram: boolean = props.showHistogram ?? true;
|
|
134
137
|
|
|
138
|
+
/*
|
|
139
|
+
* Drag-zooming the histogram is a one-way trip on its own: it swaps the
|
|
140
|
+
* window for a custom one and nothing remembers what the reader was
|
|
141
|
+
* looking at. This keeps that window so a double-click on the chart can
|
|
142
|
+
* hand it back.
|
|
143
|
+
*/
|
|
144
|
+
const histogramZoom: HistogramZoomState = useHistogramZoom({
|
|
145
|
+
timeRange: props.timeRange,
|
|
146
|
+
onTimeRangeSelect: props.onHistogramTimeRangeSelect,
|
|
147
|
+
onTimeRangeChange: props.onTimeRangeChange,
|
|
148
|
+
});
|
|
149
|
+
|
|
135
150
|
return (
|
|
136
151
|
<div className="flex min-h-0 w-full flex-1 flex-col gap-3">
|
|
137
152
|
{/* Toolbar */}
|
|
@@ -160,7 +175,7 @@ function TelemetryViewerInner<T>(props: TelemetryViewerProps<T>): ReactElement {
|
|
|
160
175
|
|
|
161
176
|
<TelemetryTimeRangePicker
|
|
162
177
|
value={props.timeRange}
|
|
163
|
-
onChange={props.onTimeRangeChange}
|
|
178
|
+
onChange={histogramZoom.onTimeRangeChange || props.onTimeRangeChange}
|
|
164
179
|
/>
|
|
165
180
|
|
|
166
181
|
{props.live && (
|
|
@@ -231,7 +246,8 @@ function TelemetryViewerInner<T>(props: TelemetryViewerProps<T>): ReactElement {
|
|
|
231
246
|
isLoading={props.histogramLoading || false}
|
|
232
247
|
series={props.histogramSeries}
|
|
233
248
|
title={props.histogramTitle}
|
|
234
|
-
onTimeRangeSelect={
|
|
249
|
+
onTimeRangeSelect={histogramZoom.onTimeRangeSelect}
|
|
250
|
+
onZoomOut={histogramZoom.onZoomOut}
|
|
235
251
|
headerActions={props.histogramHeaderActions}
|
|
236
252
|
valueFormatter={props.histogramValueFormatter}
|
|
237
253
|
/>
|
|
@@ -2,6 +2,7 @@ import React, {
|
|
|
2
2
|
FunctionComponent,
|
|
3
3
|
ReactElement,
|
|
4
4
|
ReactNode,
|
|
5
|
+
useEffect,
|
|
5
6
|
useMemo,
|
|
6
7
|
useCallback,
|
|
7
8
|
useRef,
|
|
@@ -31,6 +32,12 @@ export interface TelemetryHistogramProps {
|
|
|
31
32
|
series: Array<HistogramSeriesOption>;
|
|
32
33
|
title?: string | undefined;
|
|
33
34
|
onTimeRangeSelect?: ((startTime: Date, endTime: Date) => void) | undefined;
|
|
35
|
+
/*
|
|
36
|
+
* Set only while the chart is showing a window the reader dragged out of
|
|
37
|
+
* it. Double-clicking the chart then puts them back on the window they
|
|
38
|
+
* started from.
|
|
39
|
+
*/
|
|
40
|
+
onZoomOut?: (() => void) | undefined;
|
|
34
41
|
// Extra controls rendered in the chart header (e.g. a metric selector).
|
|
35
42
|
headerActions?: ReactNode;
|
|
36
43
|
// Formats Y-axis ticks and tooltip values (e.g. milliseconds → "1.2 s").
|
|
@@ -91,6 +98,12 @@ const TelemetryHistogram: FunctionComponent<TelemetryHistogramProps> = (
|
|
|
91
98
|
const [selectionStart, setSelectionStart] = useState<string | null>(null);
|
|
92
99
|
const [selectionEnd, setSelectionEnd] = useState<string | null>(null);
|
|
93
100
|
const isSelecting: React.MutableRefObject<boolean> = useRef(false);
|
|
101
|
+
/*
|
|
102
|
+
* Mirrors isSelecting for rendering. The ref stays the authority so a
|
|
103
|
+
* mouseup handled twice (chart *and* window, below) cannot commit the same
|
|
104
|
+
* drag twice; the state is only here so the drag can change what is drawn.
|
|
105
|
+
*/
|
|
106
|
+
const [isDragging, setIsDragging] = useState<boolean>(false);
|
|
94
107
|
|
|
95
108
|
const pivotedData: Array<PivotedRow> = useMemo(() => {
|
|
96
109
|
return pivotBuckets(props.buckets);
|
|
@@ -123,6 +136,7 @@ const TelemetryHistogram: FunctionComponent<TelemetryHistogramProps> = (
|
|
|
123
136
|
}
|
|
124
137
|
|
|
125
138
|
isSelecting.current = true;
|
|
139
|
+
setIsDragging(true);
|
|
126
140
|
setSelectionStart(e.activeLabel as string);
|
|
127
141
|
setSelectionEnd(null);
|
|
128
142
|
},
|
|
@@ -145,12 +159,14 @@ const TelemetryHistogram: FunctionComponent<TelemetryHistogramProps> = (
|
|
|
145
159
|
!props.onTimeRangeSelect
|
|
146
160
|
) {
|
|
147
161
|
isSelecting.current = false;
|
|
162
|
+
setIsDragging(false);
|
|
148
163
|
setSelectionStart(null);
|
|
149
164
|
setSelectionEnd(null);
|
|
150
165
|
return;
|
|
151
166
|
}
|
|
152
167
|
|
|
153
168
|
isSelecting.current = false;
|
|
169
|
+
setIsDragging(false);
|
|
154
170
|
|
|
155
171
|
const start: Date = OneUptimeDate.fromString(selectionStart);
|
|
156
172
|
const end: Date = OneUptimeDate.fromString(selectionEnd);
|
|
@@ -170,6 +186,28 @@ const TelemetryHistogram: FunctionComponent<TelemetryHistogramProps> = (
|
|
|
170
186
|
setSelectionEnd(null);
|
|
171
187
|
}, [selectionStart, selectionEnd, props.onTimeRangeSelect]);
|
|
172
188
|
|
|
189
|
+
/*
|
|
190
|
+
* Readers routinely drag past the edge of a 120px-tall chart and let go
|
|
191
|
+
* outside it, where the chart's own mouseup never fires. Without this the
|
|
192
|
+
* drag would never end: the selection band would stay painted and the
|
|
193
|
+
* tooltip would stay suppressed until the next click.
|
|
194
|
+
*/
|
|
195
|
+
useEffect(() => {
|
|
196
|
+
if (!isDragging) {
|
|
197
|
+
return undefined;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
const finishDragOutsideChart: () => void = (): void => {
|
|
201
|
+
handleMouseUp();
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
window.addEventListener("mouseup", finishDragOutsideChart);
|
|
205
|
+
|
|
206
|
+
return () => {
|
|
207
|
+
window.removeEventListener("mouseup", finishDragOutsideChart);
|
|
208
|
+
};
|
|
209
|
+
}, [isDragging, handleMouseUp]);
|
|
210
|
+
|
|
173
211
|
if (props.isLoading && pivotedData.length === 0) {
|
|
174
212
|
return (
|
|
175
213
|
<div className="flex h-32 items-center justify-center rounded-lg border border-gray-200 bg-white">
|
|
@@ -197,6 +235,11 @@ const TelemetryHistogram: FunctionComponent<TelemetryHistogramProps> = (
|
|
|
197
235
|
{props.onTimeRangeSelect && (
|
|
198
236
|
<span className="text-[10px] text-gray-300">Drag to zoom</span>
|
|
199
237
|
)}
|
|
238
|
+
{props.onZoomOut && (
|
|
239
|
+
<span className="text-[10px] text-gray-300">
|
|
240
|
+
Double-click to zoom out
|
|
241
|
+
</span>
|
|
242
|
+
)}
|
|
200
243
|
</div>
|
|
201
244
|
<div className="flex items-center gap-3">
|
|
202
245
|
{activeSeries.map((option: HistogramSeriesOption) => {
|
|
@@ -223,11 +266,12 @@ const TelemetryHistogram: FunctionComponent<TelemetryHistogramProps> = (
|
|
|
223
266
|
|
|
224
267
|
{pivotedData.length > 0 && (
|
|
225
268
|
<div
|
|
226
|
-
className="px-2 pb-1 pt-2"
|
|
269
|
+
className="select-none px-2 pb-1 pt-2"
|
|
227
270
|
style={{
|
|
228
271
|
height: 120,
|
|
229
272
|
cursor: props.onTimeRangeSelect ? "crosshair" : "default",
|
|
230
273
|
}}
|
|
274
|
+
onDoubleClick={props.onZoomOut}
|
|
231
275
|
>
|
|
232
276
|
<ResponsiveContainer width="100%" height="100%">
|
|
233
277
|
<BarChart
|
|
@@ -263,6 +307,12 @@ const TelemetryHistogram: FunctionComponent<TelemetryHistogramProps> = (
|
|
|
263
307
|
allowDecimals={Boolean(props.valueFormatter)}
|
|
264
308
|
tickFormatter={props.valueFormatter || formatYAxisTick}
|
|
265
309
|
/>
|
|
310
|
+
{/*
|
|
311
|
+
* The tooltip is pinned shut for the length of a drag: it would
|
|
312
|
+
* otherwise sit over the very bars the reader is trying to read
|
|
313
|
+
* while they pick the range. Dropping the prop hands control back
|
|
314
|
+
* to recharts once the drag ends.
|
|
315
|
+
*/}
|
|
266
316
|
<Tooltip
|
|
267
317
|
content={
|
|
268
318
|
<TelemetryHistogramTooltip
|
|
@@ -271,6 +321,7 @@ const TelemetryHistogram: FunctionComponent<TelemetryHistogramProps> = (
|
|
|
271
321
|
/>
|
|
272
322
|
}
|
|
273
323
|
cursor={{ fill: "rgba(99,102,241,0.06)" }}
|
|
324
|
+
{...(isDragging ? { active: false } : {})}
|
|
274
325
|
/>
|
|
275
326
|
{activeSeries.map(
|
|
276
327
|
(option: HistogramSeriesOption, index: number) => {
|
|
@@ -222,21 +222,30 @@ export default class URL extends DatabaseProperty {
|
|
|
222
222
|
return `${this.protocol}${this.opaqueValue}${this.queryStringSuffix()}`;
|
|
223
223
|
}
|
|
224
224
|
let urlString = `${this.protocol}${this.hostname || this.email}`;
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
225
|
+
/*
|
|
226
|
+
* mailto: has no authority to trim and no route to append, so it skips the
|
|
227
|
+
* branch below — but it CAN carry a query, and "?subject=...&body=..." is
|
|
228
|
+
* the whole point of a prefilled mail link. The suffix used to be appended
|
|
229
|
+
* inside that branch, so skipping the route silently dropped the subject
|
|
230
|
+
* and body too, and the link opened on an empty draft. It returns here
|
|
231
|
+
* with the suffix attached instead, the way the opaque branch above does.
|
|
232
|
+
*/
|
|
233
|
+
if (this.email || urlString.startsWith("mailto:")) {
|
|
234
|
+
return urlString + this.queryStringSuffix();
|
|
235
|
+
}
|
|
236
|
+
if (this.route && this.route.toString().startsWith("/")) {
|
|
237
|
+
if (urlString.endsWith("/")) {
|
|
238
|
+
urlString = urlString.substring(0, urlString.length - 1);
|
|
231
239
|
}
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
urlString
|
|
240
|
+
urlString += this.route.toString();
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
if (urlString.endsWith("/")) {
|
|
244
|
+
urlString = urlString.substring(0, urlString.length - 1);
|
|
237
245
|
}
|
|
238
|
-
urlString += this.
|
|
246
|
+
urlString += "/" + this.route.toString();
|
|
239
247
|
}
|
|
248
|
+
urlString += this.queryStringSuffix();
|
|
240
249
|
return urlString;
|
|
241
250
|
}
|
|
242
251
|
static fromURL(url) {
|
|
@@ -332,6 +341,19 @@ export default class URL extends DatabaseProperty {
|
|
|
332
341
|
const opaqueQueryString = URL.queryStringOf(url);
|
|
333
342
|
return new URL(protocol, number, undefined, opaqueQueryString);
|
|
334
343
|
}
|
|
344
|
+
/*
|
|
345
|
+
* The query and the fragment come off BEFORE the authority and the route
|
|
346
|
+
* are read off the string.
|
|
347
|
+
*
|
|
348
|
+
* Splitting on "/" first meant a "/" inside a QUERY VALUE was read as a
|
|
349
|
+
* path segment whenever the URL had no path of its own:
|
|
350
|
+
* "https://example.com?next=/a/b" parsed to a route of "a/b" and went back
|
|
351
|
+
* out as "https://example.com/a/b?next=/a/b" — a path nobody wrote, on a
|
|
352
|
+
* request the workflow API components dispatch verbatim. The authority was
|
|
353
|
+
* already cut at "?"/"#" and is unchanged by this, so the host stays the
|
|
354
|
+
* one the SSRF check upstream resolved; what moved was the path.
|
|
355
|
+
*/
|
|
356
|
+
const beforeQuery = url.split("?")[0] || "";
|
|
335
357
|
/*
|
|
336
358
|
* The authority ends at the first "/", "?" or "#". Splitting on "/" alone
|
|
337
359
|
* left the query and fragment glued to the host for URLs with no path
|
|
@@ -339,13 +361,22 @@ export default class URL extends DatabaseProperty {
|
|
|
339
361
|
* round-tripped wrong and handed anything that later interpolated the
|
|
340
362
|
* host a way to smuggle a path.
|
|
341
363
|
*/
|
|
342
|
-
const
|
|
364
|
+
const authorityAndPath = beforeQuery.split("#")[0] || "";
|
|
365
|
+
/*
|
|
366
|
+
* A fragment is not a field on this type. It rides on the end of the route
|
|
367
|
+
* — which is where it has always ended up, because the route was cut at
|
|
368
|
+
* "?" and never at "#" — so "…/docs#section" keeps round-tripping instead
|
|
369
|
+
* of losing its "#section" to this change.
|
|
370
|
+
*/
|
|
371
|
+
const fragment = beforeQuery.substring(authorityAndPath.length);
|
|
372
|
+
const authority = authorityAndPath.split("/")[0] || "";
|
|
343
373
|
const hostname = new Hostname(authority);
|
|
344
374
|
let route;
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
375
|
+
const pathSegments = authorityAndPath.split("/");
|
|
376
|
+
pathSegments.shift(); // drop the authority; what is left is the path
|
|
377
|
+
const path = pathSegments.join("/");
|
|
378
|
+
if (path || fragment) {
|
|
379
|
+
route = new Route(path + fragment);
|
|
349
380
|
}
|
|
350
381
|
const queryString = URL.queryStringOf(url);
|
|
351
382
|
return new URL(protocol, hostname, route, queryString);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"URL.js","sourceRoot":"","sources":["../../../../Types/API/URL.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"URL.js","sourceRoot":"","sources":["../../../../Types/API/URL.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,8BAA8B,CAAC;AAE5D,OAAO,KAAK,MAAM,UAAU,CAAC;AAC7B,OAAO,gBAAgB,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAc,UAAU,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,MAAM,MAAM,WAAW,CAAC;AAC/B,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,KAAK,MAAM,SAAS,CAAC;AAG5B;;;;;GAKG;AACH,MAAM,gBAAgB,GAAoB,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AAEvE;;;;;;;;;GASG;AACH,MAAM,oBAAoB,GAAW,kCAAkC,CAAC;AAExE;;;GAGG;AACH,MAAM,eAAe,GACnB,gDAAgD,CAAC;AAEnD,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,gBAAgB;IAE/C,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD,IAAW,KAAK,CAAC,CAAQ;QACvB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAClB,CAAC;IAGD,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IACD,IAAW,MAAM,CAAC,CAAqB;QACrC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IACnB,CAAC;IAGD,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD,IAAW,KAAK,CAAC,CAAQ;QACvB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAClB,CAAC;IAGD,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD,IAAW,QAAQ,CAAC,CAAW;QAC7B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACrB,CAAC;IAGD,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD,IAAW,QAAQ,CAAC,CAAW;QAC7B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACrB,CAAC;IAOD,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IACD,IAAW,WAAW,CAAC,CAAS;QAC9B,MAAM,KAAK,GAAW,CAAC,CAAC,IAAI,EAAE,CAAC;QAE/B,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,gBAAgB,CACxB,eAAe,GAAG,CAAC,GAAG,0BAA0B,CACjD,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IASM,WAAW;QAChB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAIM,MAAM,CAAC,gBAAgB,CAAC,QAAkB;QAC/C,OAAO,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,kBAAkB,CAAC,KAAa;QAC5C,MAAM,OAAO,GAAW,KAAK,CAAC,IAAI,EAAE,CAAC;QAErC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACrC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEpD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,OAAO,GAAkB,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEtD,MAAM,kBAAkB,GAAY,OAAO,CAAC,KAAK,CAAC,CAAC,MAAc,EAAE,EAAE;YACnE,OAAO,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,KAAa,EAAE,EAAE;YACpC,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,YACE,QAAkB,EAClB,QAAmC,EACnC,KAAa,EACb,WAAoB;QAEpB,KAAK,EAAE,CAAC;QAnHF,WAAM,GAAU,IAAI,KAAK,EAAE,CAAC;QAQ5B,YAAO,GAAuB,EAAE,CAAC;QAwBjC,cAAS,GAAa,QAAQ,CAAC,KAAK,CAAC;QAQ7C;;;WAGG;QACK,iBAAY,GAAW,EAAE,CAAC;QAgBlC;;;;;WAKG;QACK,iBAAY,GAAY,KAAK,CAAC;QAK9B,cAAS,GAAW,EAAE,CAAC;QA8C7B;;;;WAIG;QACH,IAAI,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzB,IAAI,CAAC,WAAW;gBACd,QAAQ,YAAY,QAAQ,IAAI,QAAQ,YAAY,KAAK;oBACvD,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE;oBACrB,CAAC,CAAE,QAAmB,CAAC;YAC3B,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,IACE,OAAO,QAAQ,KAAK,MAAM,CAAC,MAAM;YACjC,KAAK,CAAC,OAAO,CAAC,QAAkB,CAAC,EACjC,CAAC;YACD,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,QAAkB,CAAC,CAAC;QAC7C,CAAC;aAAM,IAAI,QAAQ,YAAY,KAAK,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACxB,CAAC;aAAM,IAAI,QAAQ,YAAY,QAAQ,EAAE,CAAC;YACxC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC3B,CAAC;aAAM,IAAI,OAAO,QAAQ,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;YAC7C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEzB,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,CAAC;QAED,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,aAAa,CAAC,GAAW;QACtC,MAAM,cAAc,GAAW,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChD,OAAO,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;IACxE,CAAC;IAED;;;;;;OAMG;IACK,wBAAwB,CAAC,WAAoB;QACnD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAkB,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,cAAc,GAAW,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAErD;;;;;eAKG;YACH,MAAM,GAAG,GACP,cAAc,KAAK,CAAC,CAAC;gBACnB,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;YAE5C,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,SAAS;YACX,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;gBACf,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,KAAK,CAAC;IAC1C,CAAC;IAEO,iBAAiB;QACvB,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1C,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,CACL,GAAG;YACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;iBACrB,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE;gBACnB;;;;mBAIG;gBACH,MAAM,KAAK,GAAuB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACnD,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;YACzC,CAAC,CAAC;iBACD,IAAI,CAAC,GAAG,CAAC,CACb,CAAC;IACJ,CAAC;IAEe,QAAQ;QACtB;;;WAGG;QACH,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,SAAS,CAAC;QACxB,CAAC;QAED,IAAI,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxC,OAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;QAC1E,CAAC;QAED,IAAI,SAAS,GAAW,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAEzE;;;;;;;WAOG;QACH,IAAI,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAClD,OAAO,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC9C,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxD,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC3D,CAAC;YACD,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC3D,CAAC;YACD,SAAS,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC3C,CAAC;QAED,SAAS,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEtC,OAAO,SAAS,CAAC;IACnB,CAAC;IAEM,MAAM,CAAC,OAAO,CAAC,GAAQ;QAC5B,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxC,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACK,MAAM,CAAC,uBAAuB,CAAC,GAAW;QAChD,MAAM,WAAW,GAA4B,GAAG;aAC7C,IAAI,EAAE;aACN,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAE/C,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;YACpC,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAW,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACpD,MAAM,kBAAkB,GAAY,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5D,MAAM,mBAAmB,GAAY;YACnC,YAAY;YACZ,MAAM;YACN,UAAU;YACV,MAAM;YACN,MAAM;SACP,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEnB,IAAI,kBAAkB,IAAI,mBAAmB,EAAE,CAAC;YAC9C,MAAM,IAAI,gBAAgB,CACxB,aAAa,GAAG,MAAM,GAAG,qBAAqB,CAC/C,CAAC;QACJ,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,UAAU,CAAC,GAAW;QAClC,IAAI,QAAQ,GAAa,QAAQ,CAAC,KAAK,CAAC;QAExC;;;;;;;WAOG;QACH,MAAM,cAAc,GAA8B;YAChD,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC;YAC5B,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC;YAC1B,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC;YACxB,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;YACtB,CAAC,YAAY,EAAE,QAAQ,CAAC,QAAQ,CAAC;YACjC,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC;YAC1B,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC;YACtB,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC;SACvB,CAAC;QAEF,MAAM,aAAa,GAAW,GAAG,CAAC,WAAW,EAAE,CAAC;QAEhD,IAAI,kBAAkB,GAAY,KAAK,CAAC;QAExC,KAAK,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,cAAc,EAAE,CAAC;YACtD,IAAI,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrC,QAAQ,GAAG,cAAc,CAAC;gBAC1B,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACnC,kBAAkB,GAAG,IAAI,CAAC;gBAC1B,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC/B;;;;eAIG;YACH,MAAM,OAAO,GAAW,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAChD,MAAM,eAAe,GAAW,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAEvD,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC;;;;eAIG;YACH,MAAM,MAAM,GAAW,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,MAAM,iBAAiB,GAAW,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAEzD,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;QACjE,CAAC;QAED;;;;;;;;;;;WAWG;QACH,MAAM,WAAW,GAAW,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEpD;;;;;;WAMG;QACH,MAAM,gBAAgB,GAAW,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEjE;;;;;WAKG;QACH,MAAM,QAAQ,GAAW,WAAW,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAExE,MAAM,SAAS,GAAW,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAE/D,MAAM,QAAQ,GAAa,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEnD,IAAI,KAAwB,CAAC;QAE7B,MAAM,YAAY,GAAkB,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChE,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,+CAA+C;QACrE,MAAM,IAAI,GAAW,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE5C,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;YACrB,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,WAAW,GAAW,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAEnD,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IACzD,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACI,MAAM,CAAC,iBAAiB,CAAC,GAAW;QACzC,IAAI,CAAC;YACH,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QAAC,WAAM,CAAC;YACP,OAAO,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,eAAe,CAAC,QAAgB;QAC7C;;;;;;WAMG;QACH,MAAM,GAAG,GAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC5C,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC/B,GAAG,CAAC,YAAY,GAAG,EAAE,CAAC;QACtB,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC;QACxB,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC;QACzB,OAAO,GAAG,CAAC;IACb,CAAC;IAEM,iBAAiB;QACtB,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;IAEe,MAAM;QACpB,OAAO;YACL,KAAK,EAAE,UAAU,CAAC,GAAG;YACrB,KAAK,EAAG,IAAY,CAAC,QAAQ,EAAE;SAChC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAU,QAAQ,CAAC,IAAgB;QAC9C,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,UAAU,CAAC,GAAG,EAAE,CAAC;YACrC,OAAO,GAAG,CAAC,iBAAiB,CAAE,IAAI,CAAC,OAAO,CAAY,IAAI,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,CAAC;IAEM,QAAQ,CAAC,KAAqB;QACnC,IAAI,OAAO,KAAK,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,aAAa,CAClB,SAAiB,EACjB,KAAa,EACb,MAA4B;QAE5B,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,aAAa,CAAC,SAAiB;QACpC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IACxC,CAAC;IAEM,cAAc,CAAC,MAA0B;QAC9C,IAAI,CAAC,MAAM,mCACN,IAAI,CAAC,MAAM,GACX,MAAM,CACV,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,YAAY,CAAC,gBAAyB;QAC3C,MAAM,KAAK,GAAkB,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE9D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,OAAO,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAClD,CAAC;YACD,OAAO,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACvE,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACO,MAAM,CAAU,UAAU,CAClC,KAA8B;QAE9B,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;YAED,IAAI,KAAK,YAAY,GAAG,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBAChD,MAAM,IAAI,gBAAgB,CACxB,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,0BAA0B,CACvD,CAAC;YACJ,CAAC;YAED,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC1B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACO,MAAM,CAAU,YAAY,CAAC,MAAc;QACnD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { useCallback, useState } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Remembers the window a reader was on before they dragged a zoom out of the
|
|
4
|
+
* histogram, so a double-click can put them back on it.
|
|
5
|
+
*
|
|
6
|
+
* Only the *first* zoom is remembered: after drilling from "past one hour"
|
|
7
|
+
* into a minute and then into ten seconds, one double-click returns the whole
|
|
8
|
+
* hour rather than making the reader climb back out a level at a time. Any
|
|
9
|
+
* time range picked by other means — the toolbar picker, a saved view — is
|
|
10
|
+
* the reader choosing a new starting point, so it forgets what it held and
|
|
11
|
+
* the zoom-out affordance goes away until the next drag.
|
|
12
|
+
*/
|
|
13
|
+
const useHistogramZoom = (options) => {
|
|
14
|
+
const [rangeBeforeZoom, setRangeBeforeZoom] = useState(null);
|
|
15
|
+
const timeRange = options.timeRange;
|
|
16
|
+
const onTimeRangeSelect = options.onTimeRangeSelect;
|
|
17
|
+
const onTimeRangeChange = options.onTimeRangeChange;
|
|
18
|
+
const handleTimeRangeSelect = useCallback((startTime, endTime) => {
|
|
19
|
+
if (!onTimeRangeSelect) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (timeRange) {
|
|
23
|
+
setRangeBeforeZoom((current) => {
|
|
24
|
+
return current || timeRange;
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
onTimeRangeSelect(startTime, endTime);
|
|
28
|
+
}, [onTimeRangeSelect, timeRange]);
|
|
29
|
+
const handleZoomOut = useCallback(() => {
|
|
30
|
+
if (!rangeBeforeZoom || !onTimeRangeChange) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
setRangeBeforeZoom(null);
|
|
34
|
+
onTimeRangeChange(rangeBeforeZoom);
|
|
35
|
+
}, [rangeBeforeZoom, onTimeRangeChange]);
|
|
36
|
+
const handleTimeRangeChange = useCallback((nextTimeRange) => {
|
|
37
|
+
setRangeBeforeZoom(null);
|
|
38
|
+
onTimeRangeChange === null || onTimeRangeChange === void 0 ? void 0 : onTimeRangeChange(nextTimeRange);
|
|
39
|
+
}, [onTimeRangeChange]);
|
|
40
|
+
return {
|
|
41
|
+
onTimeRangeSelect: onTimeRangeSelect ? handleTimeRangeSelect : undefined,
|
|
42
|
+
onZoomOut: rangeBeforeZoom && onTimeRangeChange ? handleZoomOut : undefined,
|
|
43
|
+
onTimeRangeChange: onTimeRangeChange ? handleTimeRangeChange : undefined,
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
export default useHistogramZoom;
|
|
47
|
+
//# sourceMappingURL=useHistogramZoom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useHistogramZoom.js","sourceRoot":"","sources":["../../../../../../UI/Components/Charts/Utils/useHistogramZoom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAgC9C;;;;;;;;;;GAUG;AACH,MAAM,gBAAgB,GAA6B,CACjD,OAA6B,EACT,EAAE;IACtB,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GACzC,QAAQ,CAAkC,IAAI,CAAC,CAAC;IAElD,MAAM,SAAS,GAAyC,OAAO,CAAC,SAAS,CAAC;IAC1E,MAAM,iBAAiB,GAEP,OAAO,CAAC,iBAAiB,CAAC;IAC1C,MAAM,iBAAiB,GAEP,OAAO,CAAC,iBAAiB,CAAC;IAE1C,MAAM,qBAAqB,GACzB,WAAW,CACT,CAAC,SAAe,EAAE,OAAa,EAAQ,EAAE;QACvC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,kBAAkB,CAAC,CAAC,OAAwC,EAAE,EAAE;gBAC9D,OAAO,OAAO,IAAI,SAAS,CAAC;YAC9B,CAAC,CAAC,CAAC;QACL,CAAC;QAED,iBAAiB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC,EACD,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAC/B,CAAC;IAEJ,MAAM,aAAa,GAAe,WAAW,CAAC,GAAS,EAAE;QACvD,IAAI,CAAC,eAAe,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzB,iBAAiB,CAAC,eAAe,CAAC,CAAC;IACrC,CAAC,EAAE,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAEzC,MAAM,qBAAqB,GACzB,WAAW,CACT,CAAC,aAAuC,EAAQ,EAAE;QAChD,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzB,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAG,aAAa,CAAC,CAAC;IACrC,CAAC,EACD,CAAC,iBAAiB,CAAC,CACpB,CAAC;IAEJ,OAAO;QACL,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS;QACxE,SAAS,EAAE,eAAe,IAAI,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;QAC3E,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS;KACzE,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -29,6 +29,7 @@ import { exportLogs, LogExportFormat } from "../../Utils/LogExport";
|
|
|
29
29
|
import ProjectUtil from "../../Utils/Project";
|
|
30
30
|
import TelemetryServiceUtil from "../../Utils/TelemetryService";
|
|
31
31
|
import OneUptimeDate from "../../../Types/Date";
|
|
32
|
+
import useHistogramZoom from "../Charts/Utils/useHistogramZoom";
|
|
32
33
|
const DEFAULT_PAGE_SIZE = 100;
|
|
33
34
|
const PAGE_SIZE_OPTIONS = [100, 250, 500, 1000];
|
|
34
35
|
const severityWeight = {
|
|
@@ -106,6 +107,17 @@ const LogsViewer = (props) => {
|
|
|
106
107
|
const [internalSelectedColumns, setInternalSelectedColumns] = useState(DEFAULT_LOGS_TABLE_COLUMNS);
|
|
107
108
|
const [internalViewMode, setInternalViewMode] = useState("list");
|
|
108
109
|
const [showKeyboardShortcuts, setShowKeyboardShortcuts] = useState(false);
|
|
110
|
+
/*
|
|
111
|
+
* Drag-zooming the histogram is a one-way trip on its own: it swaps the
|
|
112
|
+
* window for a custom one and nothing remembers what the reader was
|
|
113
|
+
* looking at. This keeps that window so a double-click on the chart can
|
|
114
|
+
* hand it back.
|
|
115
|
+
*/
|
|
116
|
+
const histogramZoom = useHistogramZoom({
|
|
117
|
+
timeRange: props.timeRange,
|
|
118
|
+
onTimeRangeSelect: props.onHistogramTimeRangeSelect,
|
|
119
|
+
onTimeRangeChange: props.onTimeRangeChange,
|
|
120
|
+
});
|
|
109
121
|
useEffect(() => {
|
|
110
122
|
setFilterData(props.filterData);
|
|
111
123
|
}, [props.filterData]);
|
|
@@ -694,10 +706,10 @@ const LogsViewer = (props) => {
|
|
|
694
706
|
exportLogs(displayedLogs, LogExportFormat.CSV, selectedColumns);
|
|
695
707
|
}, onExportJSON: () => {
|
|
696
708
|
exportLogs(displayedLogs, LogExportFormat.JSON, selectedColumns);
|
|
697
|
-
} }), (props.liveOptions ? { liveOptions: props.liveOptions } : {})), (props.timeRange &&
|
|
709
|
+
} }), (props.liveOptions ? { liveOptions: props.liveOptions } : {})), (props.timeRange && histogramZoom.onTimeRangeChange
|
|
698
710
|
? {
|
|
699
711
|
timeRange: props.timeRange,
|
|
700
|
-
onTimeRangeChange:
|
|
712
|
+
onTimeRangeChange: histogramZoom.onTimeRangeChange,
|
|
701
713
|
}
|
|
702
714
|
: {})), { showKeyboardShortcuts, onToggleKeyboardShortcuts: () => {
|
|
703
715
|
setShowKeyboardShortcuts((prev) => {
|
|
@@ -713,7 +725,7 @@ const LogsViewer = (props) => {
|
|
|
713
725
|
...(props.baseActiveFilters || []),
|
|
714
726
|
...enrichedActiveFilters,
|
|
715
727
|
], onRemove: props.onRemoveFilter || (() => { }), onClearAll: props.onClearAllFilters || (() => { }) })),
|
|
716
|
-
props.histogramBuckets && (React.createElement(LogsHistogram, { buckets: props.histogramBuckets, isLoading: props.histogramLoading || false, onTimeRangeSelect:
|
|
728
|
+
props.histogramBuckets && (React.createElement(LogsHistogram, { buckets: props.histogramBuckets, isLoading: props.histogramLoading || false, onTimeRangeSelect: histogramZoom.onTimeRangeSelect, onZoomOut: histogramZoom.onZoomOut })),
|
|
717
729
|
currentViewMode === "analytics" ? (React.createElement(LogsAnalyticsView, { timeRange: props.timeRange || { range: TimeRange.PAST_ONE_HOUR }, serviceIds: props.analyticsServiceIds, sessionIds: props.analyticsSessionIds, appliedFacetFilters: props.analyticsAppliedFacetFilters || new Map(), logAttributes: logAttributes })) : (React.createElement("div", { className: "flex gap-3" },
|
|
718
730
|
showSidebar && props.facetData && (React.createElement(LogsFacetSidebar, { facetData: props.facetData, isLoading: props.facetLoading || false, serviceMap: serviceMap, hostMap: hostMap, dockerHostMap: dockerHostMap, podmanHostMap: podmanHostMap, kubernetesClusterMap: kubernetesClusterMap, onIncludeFilter: props.onFacetInclude || (() => { }), onExcludeFilter: props.onFacetExclude || (() => { }), activeFilters: props.activeFilters, savedViews: props.savedViews, selectedSavedViewId: props.selectedSavedViewId, onSavedViewSelect: props.onSavedViewSelect, onClearSavedView: props.onClearSavedView, onFacetSearchChange: props.onFacetSearchChange })),
|
|
719
731
|
React.createElement("div", { className: "min-w-0 flex-1" },
|