rn-backstage 1.0.0 → 1.1.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/README.md +54 -23
- package/lib/commonjs/Backstage.js +51 -5
- package/lib/commonjs/Backstage.js.map +1 -1
- package/lib/commonjs/components/BackstagePanel.js +16 -0
- package/lib/commonjs/components/BackstagePanel.js.map +1 -1
- package/lib/commonjs/components/NetworkItem.js +537 -0
- package/lib/commonjs/components/NetworkItem.js.map +1 -0
- package/lib/commonjs/components/NetworkTab.js +274 -0
- package/lib/commonjs/components/NetworkTab.js.map +1 -0
- package/lib/commonjs/constants.js +11 -3
- package/lib/commonjs/constants.js.map +1 -1
- package/lib/commonjs/index.js +6 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/log-interceptor.js +8 -1
- package/lib/commonjs/log-interceptor.js.map +1 -1
- package/lib/commonjs/network-interceptor.js +417 -0
- package/lib/commonjs/network-interceptor.js.map +1 -0
- package/lib/commonjs/types.js +8 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/module/Backstage.js +52 -6
- package/lib/module/Backstage.js.map +1 -1
- package/lib/module/components/BackstagePanel.js +16 -0
- package/lib/module/components/BackstagePanel.js.map +1 -1
- package/lib/module/components/NetworkItem.js +532 -0
- package/lib/module/components/NetworkItem.js.map +1 -0
- package/lib/module/components/NetworkTab.js +269 -0
- package/lib/module/components/NetworkTab.js.map +1 -0
- package/lib/module/constants.js +10 -2
- package/lib/module/constants.js.map +1 -1
- package/lib/module/index.js +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/log-interceptor.js +8 -1
- package/lib/module/log-interceptor.js.map +1 -1
- package/lib/module/network-interceptor.js +409 -0
- package/lib/module/network-interceptor.js.map +1 -0
- package/lib/module/types.js +8 -0
- package/lib/module/types.js.map +1 -1
- package/lib/typescript/Backstage.d.ts.map +1 -1
- package/lib/typescript/components/BackstagePanel.d.ts +5 -1
- package/lib/typescript/components/BackstagePanel.d.ts.map +1 -1
- package/lib/typescript/components/NetworkItem.d.ts +9 -0
- package/lib/typescript/components/NetworkItem.d.ts.map +1 -0
- package/lib/typescript/components/NetworkTab.d.ts +11 -0
- package/lib/typescript/components/NetworkTab.d.ts.map +1 -0
- package/lib/typescript/constants.d.ts +8 -0
- package/lib/typescript/constants.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +2 -2
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/log-interceptor.d.ts +3 -1
- package/lib/typescript/log-interceptor.d.ts.map +1 -1
- package/lib/typescript/network-interceptor.d.ts +35 -0
- package/lib/typescript/network-interceptor.d.ts.map +1 -0
- package/lib/typescript/types.d.ts +32 -0
- package/lib/typescript/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/Backstage.tsx +60 -6
- package/src/components/BackstagePanel.tsx +22 -0
- package/src/components/NetworkItem.tsx +536 -0
- package/src/components/NetworkTab.tsx +274 -0
- package/src/constants.ts +11 -2
- package/src/index.ts +2 -1
- package/src/log-interceptor.ts +12 -1
- package/src/network-interceptor.ts +468 -0
- package/src/types.ts +41 -0
|
@@ -14,6 +14,28 @@ export interface LogEntry {
|
|
|
14
14
|
data?: unknown;
|
|
15
15
|
timestamp: number;
|
|
16
16
|
}
|
|
17
|
+
export declare enum NetworkState {
|
|
18
|
+
pending = "pending",
|
|
19
|
+
completed = "completed",
|
|
20
|
+
error = "error"
|
|
21
|
+
}
|
|
22
|
+
export interface NetworkEntry {
|
|
23
|
+
id: string;
|
|
24
|
+
method: string;
|
|
25
|
+
url: string;
|
|
26
|
+
startTime: number;
|
|
27
|
+
endTime?: number;
|
|
28
|
+
duration?: number;
|
|
29
|
+
status?: number;
|
|
30
|
+
statusText?: string;
|
|
31
|
+
requestHeaders?: Record<string, string>;
|
|
32
|
+
responseHeaders?: Record<string, string>;
|
|
33
|
+
requestBody?: string;
|
|
34
|
+
responseBody?: string;
|
|
35
|
+
responseSize?: number;
|
|
36
|
+
error?: string;
|
|
37
|
+
state: NetworkState;
|
|
38
|
+
}
|
|
17
39
|
export interface AppInfoItem {
|
|
18
40
|
label: string;
|
|
19
41
|
value: string;
|
|
@@ -85,6 +107,16 @@ export interface BackstageProps {
|
|
|
85
107
|
initialY?: number;
|
|
86
108
|
/** Text displayed on the floating pill. Defaults to appVersion or "DEV" */
|
|
87
109
|
pillText?: string;
|
|
110
|
+
/** Whether to enable network request interception. Default: true */
|
|
111
|
+
enableNetworkInspector?: boolean;
|
|
112
|
+
/** Maximum number of network entries to retain in memory. Default: 500 */
|
|
113
|
+
maxNetworkEntries?: number;
|
|
114
|
+
/** Maximum body size (bytes) to capture per request/response. Default: 65536 (64KB) */
|
|
115
|
+
maxNetworkBodySize?: number;
|
|
116
|
+
/** URL substrings to exclude from network capture */
|
|
117
|
+
networkFilters?: string[];
|
|
118
|
+
/** Auto-filter console.logs from network callbacks (e.g., Axios interceptors) out of the Logs tab. Default: true */
|
|
119
|
+
autoFilterNetworkLogs?: boolean;
|
|
88
120
|
}
|
|
89
121
|
export interface BackstageStyleOverrides {
|
|
90
122
|
pillStyle?: StyleProp<ViewStyle>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/Backstage.tsx
CHANGED
|
@@ -7,11 +7,16 @@ import React, {
|
|
|
7
7
|
useState,
|
|
8
8
|
} from 'react'
|
|
9
9
|
import { StyleSheet, View } from 'react-native'
|
|
10
|
-
import { DEFAULT_MAX_LOGS } from './constants'
|
|
10
|
+
import { DEFAULT_MAX_LOGS, DEFAULT_MAX_NETWORK_ENTRIES } from './constants'
|
|
11
11
|
import { installInterceptor, LogBuffer, uninstallInterceptor } from './log-interceptor'
|
|
12
|
+
import {
|
|
13
|
+
installNetworkInterceptor,
|
|
14
|
+
NetworkBuffer,
|
|
15
|
+
uninstallNetworkInterceptor,
|
|
16
|
+
} from './network-interceptor'
|
|
12
17
|
import { FloatingPill } from './components/FloatingPill'
|
|
13
18
|
import { BackstagePanel } from './components/BackstagePanel'
|
|
14
|
-
import type { BackstageProps, BackstageRef, LogEntry } from './types'
|
|
19
|
+
import type { BackstageProps, BackstageRef, LogEntry, NetworkEntry } from './types'
|
|
15
20
|
|
|
16
21
|
// ─── Component ───────────────────────────────────────────────────────────────
|
|
17
22
|
|
|
@@ -34,21 +39,29 @@ export const Backstage = forwardRef<BackstageRef, BackstageProps>(
|
|
|
34
39
|
initialX,
|
|
35
40
|
initialY,
|
|
36
41
|
pillText,
|
|
42
|
+
enableNetworkInspector = true,
|
|
43
|
+
maxNetworkEntries = DEFAULT_MAX_NETWORK_ENTRIES,
|
|
44
|
+
maxNetworkBodySize,
|
|
45
|
+
networkFilters,
|
|
46
|
+
autoFilterNetworkLogs = true,
|
|
37
47
|
},
|
|
38
48
|
ref,
|
|
39
49
|
) => {
|
|
40
50
|
const [panelVisible, setPanelVisible] = useState(false)
|
|
41
51
|
const [hasError, setHasError] = useState(false)
|
|
42
52
|
const [logs, setLogs] = useState<LogEntry[]>([])
|
|
53
|
+
const [networkEntries, setNetworkEntries] = useState<NetworkEntry[]>([])
|
|
43
54
|
|
|
44
55
|
const logBuffer = useRef(new LogBuffer(maxLogs))
|
|
56
|
+
const networkBuffer = useRef(new NetworkBuffer(maxNetworkEntries))
|
|
45
57
|
|
|
46
58
|
// ── Panel controls ────────────────────────────────────────
|
|
47
59
|
|
|
48
60
|
const openPanel = useCallback(() => {
|
|
49
61
|
setPanelVisible(true)
|
|
50
|
-
// Sync logs when opening panel
|
|
62
|
+
// Sync logs and network entries when opening panel
|
|
51
63
|
setLogs(logBuffer.current.getAll())
|
|
64
|
+
setNetworkEntries(networkBuffer.current.getAll())
|
|
52
65
|
}, [])
|
|
53
66
|
|
|
54
67
|
const closePanel = useCallback(() => {
|
|
@@ -61,12 +74,23 @@ export const Backstage = forwardRef<BackstageRef, BackstageProps>(
|
|
|
61
74
|
setHasError(false)
|
|
62
75
|
}, [])
|
|
63
76
|
|
|
64
|
-
// ── Refresh logs
|
|
77
|
+
// ── Refresh logs ──────────────────────────────────────────────────
|
|
65
78
|
|
|
66
79
|
const refreshLogs = useCallback(() => {
|
|
67
80
|
setLogs(logBuffer.current.getAll())
|
|
68
81
|
}, [])
|
|
69
82
|
|
|
83
|
+
// ── Network controls ──────────────────────────────────────────────
|
|
84
|
+
|
|
85
|
+
const refreshNetwork = useCallback(() => {
|
|
86
|
+
setNetworkEntries(networkBuffer.current.getAll())
|
|
87
|
+
}, [])
|
|
88
|
+
|
|
89
|
+
const clearNetwork = useCallback(() => {
|
|
90
|
+
networkBuffer.current.clear()
|
|
91
|
+
setNetworkEntries([])
|
|
92
|
+
}, [])
|
|
93
|
+
|
|
70
94
|
// ── Install console interceptor ───────────────────────────
|
|
71
95
|
|
|
72
96
|
useEffect(() => {
|
|
@@ -79,12 +103,38 @@ export const Backstage = forwardRef<BackstageRef, BackstageProps>(
|
|
|
79
103
|
}
|
|
80
104
|
}
|
|
81
105
|
|
|
82
|
-
installInterceptor(handleLogEntry, logFilters
|
|
106
|
+
installInterceptor(handleLogEntry, logFilters, {
|
|
107
|
+
autoFilterNetworkLogs: enableNetworkInspector && autoFilterNetworkLogs,
|
|
108
|
+
})
|
|
83
109
|
|
|
84
110
|
return () => {
|
|
85
111
|
uninstallInterceptor()
|
|
86
112
|
}
|
|
87
|
-
}, [logFilters])
|
|
113
|
+
}, [logFilters, enableNetworkInspector, autoFilterNetworkLogs])
|
|
114
|
+
|
|
115
|
+
// ── Install network interceptor ───────────────────────────────
|
|
116
|
+
|
|
117
|
+
useEffect(() => {
|
|
118
|
+
if (!enableNetworkInspector) return
|
|
119
|
+
|
|
120
|
+
const handleNetworkEntry = (entry: NetworkEntry) => {
|
|
121
|
+
networkBuffer.current.upsert(entry)
|
|
122
|
+
|
|
123
|
+
// Auto-refresh if panel is open
|
|
124
|
+
if (panelVisible) {
|
|
125
|
+
setNetworkEntries(networkBuffer.current.getAll())
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
installNetworkInterceptor(handleNetworkEntry, {
|
|
130
|
+
filters: networkFilters,
|
|
131
|
+
maxBodySize: maxNetworkBodySize,
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
return () => {
|
|
135
|
+
uninstallNetworkInterceptor()
|
|
136
|
+
}
|
|
137
|
+
}, [enableNetworkInspector, networkFilters, maxNetworkBodySize, panelVisible])
|
|
88
138
|
|
|
89
139
|
// ── Expose ref methods ────────────────────────────────────
|
|
90
140
|
|
|
@@ -122,6 +172,10 @@ export const Backstage = forwardRef<BackstageRef, BackstageProps>(
|
|
|
122
172
|
logs={logs}
|
|
123
173
|
onRefreshLogs={refreshLogs}
|
|
124
174
|
onCopyLogs={onCopyLogs}
|
|
175
|
+
networkEntries={networkEntries}
|
|
176
|
+
onRefreshNetwork={refreshNetwork}
|
|
177
|
+
onClearNetwork={clearNetwork}
|
|
178
|
+
onCopyNetwork={onCopyLogs}
|
|
125
179
|
extraTabs={extraTabs}
|
|
126
180
|
styles={propStyles}
|
|
127
181
|
>
|
|
@@ -12,11 +12,13 @@ import { DarkTheme, MonospaceFont, TestIDs } from '../constants'
|
|
|
12
12
|
import { TabBar } from './TabBar'
|
|
13
13
|
import { InfoTab } from './InfoTab'
|
|
14
14
|
import { LogsTab } from './LogsTab'
|
|
15
|
+
import { NetworkTab } from './NetworkTab'
|
|
15
16
|
import type {
|
|
16
17
|
AppInfoItem,
|
|
17
18
|
BackstageStyleOverrides,
|
|
18
19
|
BackstageTab,
|
|
19
20
|
LogEntry,
|
|
21
|
+
NetworkEntry,
|
|
20
22
|
QuickAction,
|
|
21
23
|
} from '../types'
|
|
22
24
|
|
|
@@ -39,6 +41,12 @@ interface BackstagePanelProps {
|
|
|
39
41
|
onRefreshLogs: () => void
|
|
40
42
|
onCopyLogs?: (logs: string) => void
|
|
41
43
|
|
|
44
|
+
// Network tab props
|
|
45
|
+
networkEntries: NetworkEntry[]
|
|
46
|
+
onRefreshNetwork: () => void
|
|
47
|
+
onClearNetwork: () => void
|
|
48
|
+
onCopyNetwork?: (text: string) => void
|
|
49
|
+
|
|
42
50
|
// Extensibility
|
|
43
51
|
extraTabs?: BackstageTab[]
|
|
44
52
|
|
|
@@ -51,6 +59,7 @@ interface BackstagePanelProps {
|
|
|
51
59
|
|
|
52
60
|
const BUILT_IN_TABS = [
|
|
53
61
|
{ key: 'info', title: 'Info', icon: 'ℹ️' },
|
|
62
|
+
{ key: 'network', title: 'Network', icon: '🌐' },
|
|
54
63
|
{ key: 'logs', title: 'Logs', icon: '📋' },
|
|
55
64
|
]
|
|
56
65
|
|
|
@@ -68,6 +77,10 @@ export const BackstagePanel: React.FC<BackstagePanelProps> = ({
|
|
|
68
77
|
logs,
|
|
69
78
|
onRefreshLogs,
|
|
70
79
|
onCopyLogs,
|
|
80
|
+
networkEntries,
|
|
81
|
+
onRefreshNetwork,
|
|
82
|
+
onClearNetwork,
|
|
83
|
+
onCopyNetwork,
|
|
71
84
|
extraTabs = [],
|
|
72
85
|
styles: propStyles,
|
|
73
86
|
children,
|
|
@@ -98,6 +111,15 @@ export const BackstagePanel: React.FC<BackstagePanelProps> = ({
|
|
|
98
111
|
{children}
|
|
99
112
|
</InfoTab>
|
|
100
113
|
)
|
|
114
|
+
case 'network':
|
|
115
|
+
return (
|
|
116
|
+
<NetworkTab
|
|
117
|
+
entries={networkEntries}
|
|
118
|
+
onRefresh={onRefreshNetwork}
|
|
119
|
+
onClear={onClearNetwork}
|
|
120
|
+
onCopy={onCopyNetwork}
|
|
121
|
+
/>
|
|
122
|
+
)
|
|
101
123
|
case 'logs':
|
|
102
124
|
return (
|
|
103
125
|
<LogsTab
|