react-native-xenon 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/lib/commonjs/assets/icons/arrow-left.png +0 -0
- package/lib/commonjs/assets/icons/beautify.png +0 -0
- package/lib/commonjs/assets/icons/share.png +0 -0
- package/lib/commonjs/core/utils.js +49 -14
- package/lib/commonjs/core/utils.js.map +1 -1
- package/lib/commonjs/hooks/useNetworkInterceptor.js +5 -4
- package/lib/commonjs/hooks/useNetworkInterceptor.js.map +1 -1
- package/lib/commonjs/interceptors/FetchInterceptor.js +1 -1
- package/lib/commonjs/interceptors/FetchInterceptor.js.map +1 -1
- package/lib/commonjs/theme/colors.js +1 -0
- package/lib/commonjs/theme/colors.js.map +1 -1
- package/lib/commonjs/theme/icons.js +4 -1
- package/lib/commonjs/theme/icons.js.map +1 -1
- package/lib/commonjs/types/common.js.map +1 -1
- package/lib/commonjs/ui/Xenon.js +92 -110
- package/lib/commonjs/ui/Xenon.js.map +1 -1
- package/lib/commonjs/ui/components/details/DetailsViewer.js +11 -7
- package/lib/commonjs/ui/components/details/DetailsViewer.js.map +1 -1
- package/lib/commonjs/ui/components/details/NetworkRequestDetails.js +55 -60
- package/lib/commonjs/ui/components/details/NetworkRequestDetails.js.map +1 -1
- package/lib/commonjs/ui/components/headers/DebuggerHeader.js +139 -73
- package/lib/commonjs/ui/components/headers/DebuggerHeader.js.map +1 -1
- package/lib/commonjs/ui/components/headers/NetworkPanelHeader.js +3 -3
- package/lib/commonjs/ui/components/headers/NetworkPanelHeader.js.map +1 -1
- package/lib/commonjs/ui/components/items/DebuggerHeaderItem.js +4 -4
- package/lib/commonjs/ui/components/items/DebuggerHeaderItem.js.map +1 -1
- package/lib/commonjs/ui/components/items/NetworkPanelItem.js +4 -4
- package/lib/commonjs/ui/components/items/NetworkPanelItem.js.map +1 -1
- package/lib/commonjs/ui/components/panels/ConsolePanel.js +9 -6
- package/lib/commonjs/ui/components/panels/ConsolePanel.js.map +1 -1
- package/lib/commonjs/ui/components/panels/NetworkPanel.js +6 -4
- package/lib/commonjs/ui/components/panels/NetworkPanel.js.map +1 -1
- package/lib/module/assets/icons/arrow-left.png +0 -0
- package/lib/module/assets/icons/beautify.png +0 -0
- package/lib/module/assets/icons/share.png +0 -0
- package/lib/module/core/utils.js +49 -14
- package/lib/module/core/utils.js.map +1 -1
- package/lib/module/hooks/useNetworkInterceptor.js +5 -4
- package/lib/module/hooks/useNetworkInterceptor.js.map +1 -1
- package/lib/module/interceptors/FetchInterceptor.js +1 -1
- package/lib/module/interceptors/FetchInterceptor.js.map +1 -1
- package/lib/module/theme/colors.js +1 -0
- package/lib/module/theme/colors.js.map +1 -1
- package/lib/module/theme/icons.js +4 -1
- package/lib/module/theme/icons.js.map +1 -1
- package/lib/module/types/common.js.map +1 -1
- package/lib/module/ui/Xenon.js +92 -110
- package/lib/module/ui/Xenon.js.map +1 -1
- package/lib/module/ui/components/details/DetailsViewer.js +11 -7
- package/lib/module/ui/components/details/DetailsViewer.js.map +1 -1
- package/lib/module/ui/components/details/NetworkRequestDetails.js +55 -60
- package/lib/module/ui/components/details/NetworkRequestDetails.js.map +1 -1
- package/lib/module/ui/components/headers/DebuggerHeader.js +139 -73
- package/lib/module/ui/components/headers/DebuggerHeader.js.map +1 -1
- package/lib/module/ui/components/headers/NetworkPanelHeader.js +3 -3
- package/lib/module/ui/components/headers/NetworkPanelHeader.js.map +1 -1
- package/lib/module/ui/components/items/DebuggerHeaderItem.js +4 -4
- package/lib/module/ui/components/items/DebuggerHeaderItem.js.map +1 -1
- package/lib/module/ui/components/items/NetworkPanelItem.js +4 -4
- package/lib/module/ui/components/items/NetworkPanelItem.js.map +1 -1
- package/lib/module/ui/components/panels/ConsolePanel.js +9 -6
- package/lib/module/ui/components/panels/ConsolePanel.js.map +1 -1
- package/lib/module/ui/components/panels/NetworkPanel.js +6 -4
- package/lib/module/ui/components/panels/NetworkPanel.js.map +1 -1
- package/lib/typescript/commonjs/src/contexts/MainContext.d.ts +1 -1
- package/lib/typescript/commonjs/src/contexts/MainContext.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/core/utils.d.ts +14 -4
- package/lib/typescript/commonjs/src/core/utils.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/hooks/useNetworkInterceptor.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/interceptors/FetchInterceptor.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/theme/colors.d.ts +1 -0
- package/lib/typescript/commonjs/src/theme/colors.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/theme/icons.d.ts +3 -0
- package/lib/typescript/commonjs/src/theme/icons.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/types/common.d.ts +13 -1
- package/lib/typescript/commonjs/src/types/common.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ui/Xenon.d.ts +12 -15
- package/lib/typescript/commonjs/src/ui/Xenon.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ui/components/details/DetailsViewer.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ui/components/details/NetworkRequestDetails.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ui/components/headers/DebuggerHeader.d.ts +1 -5
- package/lib/typescript/commonjs/src/ui/components/headers/DebuggerHeader.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ui/components/items/DebuggerHeaderItem.d.ts +2 -1
- package/lib/typescript/commonjs/src/ui/components/items/DebuggerHeaderItem.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ui/components/panels/ConsolePanel.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ui/components/panels/NetworkPanel.d.ts.map +1 -1
- package/lib/typescript/module/src/contexts/MainContext.d.ts +1 -1
- package/lib/typescript/module/src/contexts/MainContext.d.ts.map +1 -1
- package/lib/typescript/module/src/core/utils.d.ts +14 -4
- package/lib/typescript/module/src/core/utils.d.ts.map +1 -1
- package/lib/typescript/module/src/hooks/useNetworkInterceptor.d.ts.map +1 -1
- package/lib/typescript/module/src/interceptors/FetchInterceptor.d.ts.map +1 -1
- package/lib/typescript/module/src/theme/colors.d.ts +1 -0
- package/lib/typescript/module/src/theme/colors.d.ts.map +1 -1
- package/lib/typescript/module/src/theme/icons.d.ts +3 -0
- package/lib/typescript/module/src/theme/icons.d.ts.map +1 -1
- package/lib/typescript/module/src/types/common.d.ts +13 -1
- package/lib/typescript/module/src/types/common.d.ts.map +1 -1
- package/lib/typescript/module/src/ui/Xenon.d.ts +12 -15
- package/lib/typescript/module/src/ui/Xenon.d.ts.map +1 -1
- package/lib/typescript/module/src/ui/components/details/DetailsViewer.d.ts.map +1 -1
- package/lib/typescript/module/src/ui/components/details/NetworkRequestDetails.d.ts.map +1 -1
- package/lib/typescript/module/src/ui/components/headers/DebuggerHeader.d.ts +1 -5
- package/lib/typescript/module/src/ui/components/headers/DebuggerHeader.d.ts.map +1 -1
- package/lib/typescript/module/src/ui/components/items/DebuggerHeaderItem.d.ts +2 -1
- package/lib/typescript/module/src/ui/components/items/DebuggerHeaderItem.d.ts.map +1 -1
- package/lib/typescript/module/src/ui/components/panels/ConsolePanel.d.ts.map +1 -1
- package/lib/typescript/module/src/ui/components/panels/NetworkPanel.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/assets/icons/arrow-left.png +0 -0
- package/src/assets/icons/beautify.png +0 -0
- package/src/assets/icons/share.png +0 -0
- package/src/contexts/MainContext.ts +1 -1
- package/src/core/utils.ts +56 -17
- package/src/hooks/useNetworkInterceptor.ts +17 -4
- package/src/interceptors/FetchInterceptor.ts +5 -1
- package/src/theme/colors.ts +1 -0
- package/src/theme/icons.ts +3 -0
- package/src/types/common.ts +17 -1
- package/src/ui/Xenon.tsx +78 -107
- package/src/ui/components/details/DetailsViewer.tsx +9 -7
- package/src/ui/components/details/NetworkRequestDetails.tsx +87 -74
- package/src/ui/components/headers/DebuggerHeader.tsx +199 -91
- package/src/ui/components/headers/NetworkPanelHeader.tsx +3 -3
- package/src/ui/components/items/DebuggerHeaderItem.tsx +3 -4
- package/src/ui/components/items/NetworkPanelItem.tsx +4 -4
- package/src/ui/components/panels/ConsolePanel.tsx +9 -5
- package/src/ui/components/panels/NetworkPanel.tsx +13 -3
- package/lib/commonjs/core/data.js +0 -10
- package/lib/commonjs/core/data.js.map +0 -1
- package/lib/commonjs/ui/components/headers/NetworkRequestDetailsHeader.js +0 -64
- package/lib/commonjs/ui/components/headers/NetworkRequestDetailsHeader.js.map +0 -1
- package/lib/commonjs/ui/components/items/NetworkRequestDetailsHeaderItem.js +0 -48
- package/lib/commonjs/ui/components/items/NetworkRequestDetailsHeaderItem.js.map +0 -1
- package/lib/module/core/data.js +0 -10
- package/lib/module/core/data.js.map +0 -1
- package/lib/module/ui/components/headers/NetworkRequestDetailsHeader.js +0 -64
- package/lib/module/ui/components/headers/NetworkRequestDetailsHeader.js.map +0 -1
- package/lib/module/ui/components/items/NetworkRequestDetailsHeaderItem.js +0 -48
- package/lib/module/ui/components/items/NetworkRequestDetailsHeaderItem.js.map +0 -1
- package/lib/typescript/commonjs/src/core/data.d.ts +0 -10
- package/lib/typescript/commonjs/src/core/data.d.ts.map +0 -1
- package/lib/typescript/commonjs/src/ui/components/headers/NetworkRequestDetailsHeader.d.ts +0 -13
- package/lib/typescript/commonjs/src/ui/components/headers/NetworkRequestDetailsHeader.d.ts.map +0 -1
- package/lib/typescript/commonjs/src/ui/components/items/NetworkRequestDetailsHeaderItem.d.ts +0 -9
- package/lib/typescript/commonjs/src/ui/components/items/NetworkRequestDetailsHeaderItem.d.ts.map +0 -1
- package/lib/typescript/module/src/core/data.d.ts +0 -10
- package/lib/typescript/module/src/core/data.d.ts.map +0 -1
- package/lib/typescript/module/src/ui/components/headers/NetworkRequestDetailsHeader.d.ts +0 -13
- package/lib/typescript/module/src/ui/components/headers/NetworkRequestDetailsHeader.d.ts.map +0 -1
- package/lib/typescript/module/src/ui/components/items/NetworkRequestDetailsHeaderItem.d.ts +0 -9
- package/lib/typescript/module/src/ui/components/items/NetworkRequestDetailsHeaderItem.d.ts.map +0 -1
- package/src/core/data.ts +0 -12
- package/src/ui/components/headers/NetworkRequestDetailsHeader.tsx +0 -90
- package/src/ui/components/items/NetworkRequestDetailsHeaderItem.tsx +0 -49
package/src/types/common.ts
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
import type { HttpRequest, LogMessage, WebSocketRequest } from '.';
|
2
|
+
|
1
3
|
export enum NetworkType {
|
2
4
|
XHR = 'xhr',
|
3
5
|
Fetch = 'fetch',
|
@@ -19,10 +21,24 @@ export interface NetworkRequest {
|
|
19
21
|
duration?: number;
|
20
22
|
}
|
21
23
|
|
22
|
-
export type
|
24
|
+
export type DetailTab = 'overview' | 'headers' | 'request' | 'response' | 'messages' | 'logMessage';
|
23
25
|
|
24
26
|
export interface DebuggerState {
|
25
27
|
visibility: 'hidden' | 'bubble' | 'panel';
|
26
28
|
position: 'top' | 'bottom';
|
27
29
|
selectedPanel: DebuggerPanel | null;
|
30
|
+
detailsData:
|
31
|
+
| {
|
32
|
+
type: DebuggerPanel.Network;
|
33
|
+
data: HttpRequest | WebSocketRequest;
|
34
|
+
selectedTab: Exclude<DetailTab, 'logMessage'>;
|
35
|
+
beautified: boolean;
|
36
|
+
}
|
37
|
+
| {
|
38
|
+
type: DebuggerPanel.Console;
|
39
|
+
data: LogMessage;
|
40
|
+
selectedTab: Extract<DetailTab, 'logMessage'>;
|
41
|
+
beautified: boolean;
|
42
|
+
}
|
43
|
+
| null;
|
28
44
|
}
|
package/src/ui/Xenon.tsx
CHANGED
@@ -1,51 +1,53 @@
|
|
1
1
|
import { enableMapSet } from 'immer';
|
2
|
-
import {
|
3
|
-
createRef,
|
4
|
-
memo,
|
5
|
-
useImperativeHandle,
|
6
|
-
useMemo,
|
7
|
-
useRef,
|
8
|
-
type NamedExoticComponent,
|
9
|
-
} from 'react';
|
2
|
+
import { createRef, memo, useImperativeHandle, useMemo, useRef } from 'react';
|
10
3
|
import { Animated, StyleSheet, useWindowDimensions } from 'react-native';
|
11
4
|
import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context';
|
12
5
|
import { useImmer } from 'use-immer';
|
13
6
|
import MainContext from '../contexts/MainContext';
|
14
|
-
import { detailsData } from '../core/data';
|
15
7
|
import { getVerticalSafeMargin } from '../core/utils';
|
16
8
|
import { useConsoleInterceptor, useNetworkInterceptor } from '../hooks';
|
17
9
|
import colors from '../theme/colors';
|
18
10
|
import { DebuggerPanel, type DebuggerState } from '../types';
|
19
11
|
import { Bubble, ConsolePanel, DebuggerHeader, DetailsViewer, NetworkPanel } from './components';
|
20
12
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
13
|
+
namespace Xenon {
|
14
|
+
interface Methods {
|
15
|
+
isVisible(): boolean;
|
16
|
+
show(): void;
|
17
|
+
hide(): void;
|
18
|
+
}
|
19
|
+
|
20
|
+
interface Props {
|
21
|
+
autoInspectNetworkEnabled?: boolean;
|
22
|
+
autoInspectConsoleEnabled?: boolean;
|
23
|
+
bubbleSize?: number;
|
24
|
+
idleBubbleOpacity?: number;
|
25
|
+
}
|
26
|
+
|
27
|
+
enableMapSet();
|
28
|
+
|
29
|
+
const ref = createRef<Methods>();
|
30
|
+
|
31
|
+
const styles = StyleSheet.create({
|
32
|
+
container: {
|
33
|
+
flex: 1,
|
34
|
+
...StyleSheet.absoluteFillObject,
|
35
|
+
top: undefined,
|
36
|
+
bottom: undefined,
|
37
|
+
zIndex: 9999,
|
38
|
+
backgroundColor: colors.lightGray,
|
39
|
+
},
|
40
|
+
safeArea: {
|
41
|
+
flex: 1,
|
42
|
+
},
|
43
|
+
});
|
44
|
+
|
45
|
+
const Debugger = ({
|
44
46
|
autoInspectNetworkEnabled = true,
|
45
47
|
autoInspectConsoleEnabled = true,
|
46
48
|
bubbleSize = 40,
|
47
49
|
idleBubbleOpacity = 0.5,
|
48
|
-
}) => {
|
50
|
+
}: Props) => {
|
49
51
|
const { width, height } = useWindowDimensions();
|
50
52
|
const pan = useRef(new Animated.ValueXY({ x: 0, y: getVerticalSafeMargin(height) }));
|
51
53
|
|
@@ -53,22 +55,31 @@ const XenonComponent = memo<XenonComponentProps>(
|
|
53
55
|
visibility: 'hidden',
|
54
56
|
position: 'bottom',
|
55
57
|
selectedPanel: DebuggerPanel.Network,
|
58
|
+
detailsData: null,
|
56
59
|
});
|
57
60
|
|
58
61
|
const detailsShown = useMemo(
|
59
|
-
() => !debuggerState.selectedPanel && !!detailsData
|
60
|
-
[debuggerState.selectedPanel],
|
62
|
+
() => !debuggerState.selectedPanel && !!debuggerState.detailsData,
|
63
|
+
[debuggerState.detailsData, debuggerState.selectedPanel],
|
64
|
+
);
|
65
|
+
|
66
|
+
const containerStyle = useMemo(
|
67
|
+
() => [
|
68
|
+
styles.container,
|
69
|
+
{ [debuggerState.position]: 0, height: Math.min(width, height) * 0.75 },
|
70
|
+
],
|
71
|
+
[debuggerState.position, height, width],
|
61
72
|
);
|
62
73
|
|
63
74
|
const networkInterceptor = useNetworkInterceptor({
|
64
75
|
autoEnabled: autoInspectNetworkEnabled,
|
65
76
|
});
|
66
77
|
|
67
|
-
const
|
78
|
+
const consoleInterceptor = useConsoleInterceptor({
|
68
79
|
autoEnabled: autoInspectConsoleEnabled,
|
69
80
|
});
|
70
81
|
|
71
|
-
useImperativeHandle(
|
82
|
+
useImperativeHandle(ref, () => {
|
72
83
|
const changeVisibility = (condition: boolean, value: DebuggerState['visibility']) => {
|
73
84
|
if (!condition) return;
|
74
85
|
|
@@ -90,80 +101,40 @@ const XenonComponent = memo<XenonComponentProps>(
|
|
90
101
|
};
|
91
102
|
}, [debuggerState.visibility, setDebuggerState]);
|
92
103
|
|
93
|
-
const renderContent = () => {
|
94
|
-
switch (debuggerState.visibility) {
|
95
|
-
case 'bubble':
|
96
|
-
return (
|
97
|
-
<Bubble
|
98
|
-
bubbleSize={bubbleSize}
|
99
|
-
idleBubbleOpacity={idleBubbleOpacity}
|
100
|
-
pan={pan}
|
101
|
-
screenWidth={width}
|
102
|
-
screenHeight={height}
|
103
|
-
/>
|
104
|
-
);
|
105
|
-
case 'panel':
|
106
|
-
return (
|
107
|
-
<SafeAreaProvider
|
108
|
-
style={[
|
109
|
-
styles.container,
|
110
|
-
// eslint-disable-next-line react-native/no-inline-styles
|
111
|
-
{
|
112
|
-
[debuggerState.position]: 0,
|
113
|
-
height: Math.min(width, height) * 0.75,
|
114
|
-
},
|
115
|
-
]}
|
116
|
-
>
|
117
|
-
<SafeAreaView style={styles.safeArea}>
|
118
|
-
<DebuggerHeader detailsShown={detailsShown} />
|
119
|
-
{debuggerState.selectedPanel === DebuggerPanel.Network && <NetworkPanel />}
|
120
|
-
{debuggerState.selectedPanel === DebuggerPanel.Console && <ConsolePanel />}
|
121
|
-
{detailsShown && <DetailsViewer />}
|
122
|
-
</SafeAreaView>
|
123
|
-
</SafeAreaProvider>
|
124
|
-
);
|
125
|
-
default:
|
126
|
-
return null;
|
127
|
-
}
|
128
|
-
};
|
129
|
-
|
130
104
|
return (
|
131
105
|
<MainContext.Provider
|
132
|
-
value={{ debuggerState, setDebuggerState, networkInterceptor,
|
106
|
+
value={{ debuggerState, setDebuggerState, networkInterceptor, consoleInterceptor }}
|
133
107
|
>
|
134
|
-
{
|
108
|
+
{debuggerState.visibility === 'bubble' && (
|
109
|
+
<Bubble
|
110
|
+
bubbleSize={bubbleSize}
|
111
|
+
idleBubbleOpacity={idleBubbleOpacity}
|
112
|
+
pan={pan}
|
113
|
+
screenWidth={width}
|
114
|
+
screenHeight={height}
|
115
|
+
/>
|
116
|
+
)}
|
117
|
+
|
118
|
+
{debuggerState.visibility === 'panel' && (
|
119
|
+
<SafeAreaProvider style={containerStyle}>
|
120
|
+
<SafeAreaView style={styles.safeArea}>
|
121
|
+
<DebuggerHeader />
|
122
|
+
{debuggerState.selectedPanel === DebuggerPanel.Network && <NetworkPanel />}
|
123
|
+
{debuggerState.selectedPanel === DebuggerPanel.Console && <ConsolePanel />}
|
124
|
+
{detailsShown && <DetailsViewer />}
|
125
|
+
</SafeAreaView>
|
126
|
+
</SafeAreaProvider>
|
127
|
+
)}
|
135
128
|
</MainContext.Provider>
|
136
129
|
);
|
137
|
-
}
|
138
|
-
|
139
|
-
|
140
|
-
const
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
zIndex: 9999,
|
147
|
-
backgroundColor: colors.lightGray,
|
148
|
-
},
|
149
|
-
safeArea: {
|
150
|
-
flex: 1,
|
151
|
-
},
|
152
|
-
});
|
153
|
-
|
154
|
-
XenonComponent.displayName = 'Xenon';
|
155
|
-
|
156
|
-
const Xenon: ReactNativeXenon = {
|
157
|
-
isVisible() {
|
158
|
-
return rootRef.current?.isVisible() ?? false;
|
159
|
-
},
|
160
|
-
show() {
|
161
|
-
rootRef.current?.show();
|
162
|
-
},
|
163
|
-
hide() {
|
164
|
-
rootRef.current?.hide();
|
165
|
-
},
|
166
|
-
Component: XenonComponent,
|
167
|
-
};
|
130
|
+
};
|
131
|
+
|
132
|
+
export const isVisible = () => ref.current?.isVisible() ?? false;
|
133
|
+
export const show = (): void => ref.current?.show();
|
134
|
+
export const hide = (): void => ref.current?.hide();
|
135
|
+
|
136
|
+
export const Component = memo(Debugger);
|
137
|
+
Component.displayName = 'Xenon';
|
138
|
+
}
|
168
139
|
|
169
140
|
export default Xenon;
|
@@ -1,16 +1,18 @@
|
|
1
|
-
import {
|
1
|
+
import { useContext } from 'react';
|
2
|
+
import { MainContext } from '../../../contexts';
|
2
3
|
import { DebuggerPanel } from '../../../types';
|
3
4
|
import LogMessageDetails from './LogMessageDetails';
|
4
5
|
import NetworkRequestDetails from './NetworkRequestDetails';
|
5
6
|
|
6
7
|
export default function DetailsViewer() {
|
7
|
-
|
8
|
+
const { debuggerState } = useContext(MainContext)!;
|
9
|
+
const detailsData = debuggerState.detailsData;
|
8
10
|
|
9
|
-
switch (
|
10
|
-
case DebuggerPanel.Network
|
11
|
-
return <NetworkRequestDetails item={detailsData.
|
12
|
-
case DebuggerPanel.Console
|
13
|
-
return <LogMessageDetails item={detailsData.
|
11
|
+
switch (detailsData?.type) {
|
12
|
+
case DebuggerPanel.Network:
|
13
|
+
return <NetworkRequestDetails item={detailsData.data} />;
|
14
|
+
case DebuggerPanel.Console:
|
15
|
+
return <LogMessageDetails item={detailsData.data} />;
|
14
16
|
default:
|
15
17
|
return null;
|
16
18
|
}
|
@@ -1,21 +1,17 @@
|
|
1
|
-
import {
|
2
|
-
import { ScrollView,
|
3
|
-
import {
|
4
|
-
import colors from '../../../theme/colors';
|
5
|
-
import {
|
6
|
-
NetworkType,
|
7
|
-
type HttpRequest,
|
8
|
-
type NetworkTab,
|
9
|
-
type WebSocketRequest,
|
10
|
-
} from '../../../types';
|
1
|
+
import { useContext, useRef, type JSX, type ReactNode } from 'react';
|
2
|
+
import { ScrollView, StyleSheet } from 'react-native';
|
3
|
+
import { MainContext } from '../../../contexts';
|
11
4
|
import {
|
12
|
-
|
5
|
+
beautify,
|
13
6
|
formatRequestDuration,
|
14
7
|
formatRequestMethod,
|
15
8
|
formatRequestStatusCode,
|
9
|
+
getNetworkUtils,
|
10
|
+
keyValueToString,
|
16
11
|
limitChar,
|
17
12
|
} from '../../../core/utils';
|
18
|
-
import
|
13
|
+
import colors from '../../../theme/colors';
|
14
|
+
import { type DetailTab, type HttpRequest, type WebSocketRequest } from '../../../types';
|
19
15
|
import NetworkRequestDetailsItem from '../items/NetworkRequestDetailsItem';
|
20
16
|
|
21
17
|
interface NetworkRequestDetailsProps {
|
@@ -23,28 +19,33 @@ interface NetworkRequestDetailsProps {
|
|
23
19
|
}
|
24
20
|
|
25
21
|
export default function NetworkRequestDetails({ item }: NetworkRequestDetailsProps) {
|
26
|
-
const
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
const
|
31
|
-
|
32
|
-
|
33
|
-
const
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
22
|
+
const {
|
23
|
+
debuggerState: { detailsData },
|
24
|
+
} = useContext(MainContext)!;
|
25
|
+
|
26
|
+
const beautified = useRef<boolean | null>(null);
|
27
|
+
const shouldBeautifiedRefUpdate = beautified.current !== detailsData?.beautified;
|
28
|
+
|
29
|
+
const {
|
30
|
+
isHttp,
|
31
|
+
requestUrl,
|
32
|
+
overviewShown,
|
33
|
+
headersShown,
|
34
|
+
requestShown,
|
35
|
+
responseShown,
|
36
|
+
messagesShown,
|
37
|
+
} = getNetworkUtils(item);
|
38
|
+
|
39
|
+
const content = useRef<Record<Exclude<DetailTab, 'logMessage'>, JSX.Element | null>>({
|
40
|
+
overview: null,
|
39
41
|
headers: null,
|
40
|
-
|
41
|
-
body: null,
|
42
|
+
request: null,
|
42
43
|
response: null,
|
43
44
|
messages: null,
|
44
45
|
});
|
45
46
|
|
46
|
-
if (
|
47
|
-
content.current.
|
47
|
+
if (overviewShown && !content.current.overview) {
|
48
|
+
content.current.overview = (
|
48
49
|
<>
|
49
50
|
<NetworkRequestDetailsItem label="Request Type" content={item.type} />
|
50
51
|
|
@@ -52,7 +53,7 @@ export default function NetworkRequestDetails({ item }: NetworkRequestDetailsPro
|
|
52
53
|
|
53
54
|
<NetworkRequestDetailsItem
|
54
55
|
label="Request Method"
|
55
|
-
content={formatRequestMethod(
|
56
|
+
content={formatRequestMethod(isHttp ? (item as HttpRequest).method : undefined)}
|
56
57
|
/>
|
57
58
|
|
58
59
|
<NetworkRequestDetailsItem
|
@@ -64,75 +65,87 @@ export default function NetworkRequestDetails({ item }: NetworkRequestDetailsPro
|
|
64
65
|
label="Status Code"
|
65
66
|
content={formatRequestStatusCode(item.status)}
|
66
67
|
/>
|
68
|
+
</>
|
69
|
+
);
|
70
|
+
}
|
67
71
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
72
|
+
if (headersShown && !content.current.headers) {
|
73
|
+
content.current.headers = (
|
74
|
+
<>
|
75
|
+
{!isHttp && (
|
76
|
+
<NetworkRequestDetailsItem
|
77
|
+
label="Headers"
|
78
|
+
content={limitChar((item as WebSocketRequest).options?.headers)}
|
79
|
+
/>
|
74
80
|
)}
|
75
81
|
|
76
|
-
{
|
77
|
-
<NetworkRequestDetailsItem
|
82
|
+
{isHttp && (
|
83
|
+
<NetworkRequestDetailsItem
|
84
|
+
label="Request Headers"
|
85
|
+
content={(item as HttpRequest).requestHeadersString}
|
86
|
+
/>
|
78
87
|
)}
|
79
88
|
|
80
|
-
{
|
81
|
-
<
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
message: convertToCurl(item.method, item.url, item.requestHeaders, item.body),
|
86
|
-
})
|
87
|
-
}
|
88
|
-
style={styles.buttonContent}
|
89
|
-
>
|
90
|
-
<NetworkRequestDetailsItem content="Share as cURL" />
|
91
|
-
</TouchableOpacity>
|
89
|
+
{isHttp && (
|
90
|
+
<NetworkRequestDetailsItem
|
91
|
+
label="Response Headers"
|
92
|
+
content={(item as HttpRequest).responseHeaders}
|
93
|
+
/>
|
92
94
|
)}
|
93
95
|
</>
|
94
96
|
);
|
95
97
|
}
|
96
98
|
|
97
|
-
if (
|
99
|
+
if (requestShown && shouldBeautifiedRefUpdate) {
|
98
100
|
const queryStringParameters: ReactNode[] = [];
|
99
101
|
|
100
102
|
requestUrl.searchParams.forEach((value, name) => {
|
101
103
|
queryStringParameters.push(
|
102
|
-
<NetworkRequestDetailsItem
|
104
|
+
<NetworkRequestDetailsItem
|
105
|
+
key={keyValueToString(name, value, null)}
|
106
|
+
label="Query String"
|
107
|
+
content={keyValueToString(name, value, null)}
|
108
|
+
/>,
|
103
109
|
);
|
104
110
|
});
|
105
111
|
|
106
|
-
content.current.
|
112
|
+
content.current.request = (
|
113
|
+
<>
|
114
|
+
{queryStringParameters}
|
115
|
+
<NetworkRequestDetailsItem
|
116
|
+
label="Body"
|
117
|
+
content={beautify((item as HttpRequest).body, detailsData?.beautified ?? false)}
|
118
|
+
/>
|
119
|
+
</>
|
120
|
+
);
|
107
121
|
}
|
108
122
|
|
109
|
-
if (
|
110
|
-
content.current.
|
123
|
+
if (responseShown && shouldBeautifiedRefUpdate) {
|
124
|
+
content.current.response = (
|
125
|
+
<NetworkRequestDetailsItem
|
126
|
+
label="Response"
|
127
|
+
content={beautify((item as HttpRequest).response, detailsData?.beautified ?? false)}
|
128
|
+
/>
|
129
|
+
);
|
111
130
|
}
|
112
131
|
|
113
|
-
if (
|
114
|
-
content.current.
|
132
|
+
if (messagesShown && !content.current.messages) {
|
133
|
+
content.current.messages = (
|
134
|
+
<NetworkRequestDetailsItem
|
135
|
+
label="Messages"
|
136
|
+
content={`\n${(item as WebSocketRequest).messages}`}
|
137
|
+
/>
|
138
|
+
);
|
115
139
|
}
|
116
140
|
|
117
|
-
if (
|
118
|
-
|
141
|
+
if (shouldBeautifiedRefUpdate) {
|
142
|
+
beautified.current = detailsData?.beautified ?? false;
|
119
143
|
}
|
120
144
|
|
121
145
|
return (
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
onChangeTab={setSelectedTab}
|
126
|
-
headersShown={headerShown}
|
127
|
-
queryStringParametersShown={queryStringParametersShown}
|
128
|
-
bodyShown={bodyShown}
|
129
|
-
responseShown={responseShown}
|
130
|
-
messagesShown={messagesShown}
|
131
|
-
/>
|
132
|
-
<ScrollView style={styles.container} contentContainerStyle={styles.contentContainer}>
|
133
|
-
{content.current[selectedTab]}
|
134
|
-
</ScrollView>
|
135
|
-
</>
|
146
|
+
<ScrollView style={styles.container} contentContainerStyle={styles.contentContainer}>
|
147
|
+
{content.current[detailsData!.selectedTab as keyof typeof content.current]}
|
148
|
+
</ScrollView>
|
136
149
|
);
|
137
150
|
}
|
138
151
|
|
@@ -141,7 +154,7 @@ const styles = StyleSheet.create({
|
|
141
154
|
flex: 1,
|
142
155
|
},
|
143
156
|
contentContainer: {
|
144
|
-
|
157
|
+
paddingHorizontal: 8,
|
145
158
|
},
|
146
159
|
divider: {
|
147
160
|
height: 1,
|