react-native-inapp-inspector 2.0.4 → 2.0.6
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/android/.gradle/8.9/checksums/checksums.lock +0 -0
- package/android/.gradle/8.9/checksums/md5-checksums.bin +0 -0
- package/android/.gradle/8.9/checksums/sha1-checksums.bin +0 -0
- package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
- package/android/.gradle/8.9/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
- package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/8.9/gc.properties +0 -0
- package/android/.gradle/9.2.0/checksums/checksums.lock +0 -0
- package/android/.gradle/9.2.0/fileChanges/last-build.bin +0 -0
- package/android/.gradle/9.2.0/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/9.2.0/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/9.2.0/gc.properties +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
- package/android/.gradle/vcs-1/gc.properties +0 -0
- package/android/build/reports/problems/problems-report.html +659 -0
- package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +11 -0
- package/dist/commonjs/components/Inspector/AuditTab.d.ts +3 -0
- package/dist/commonjs/components/Inspector/AuditTab.js +741 -0
- package/dist/commonjs/components/Inspector/DeviceTab.d.ts +3 -0
- package/dist/commonjs/components/Inspector/DeviceTab.js +717 -0
- package/dist/commonjs/components/Inspector/InspectorHeader.js +115 -75
- package/dist/commonjs/components/Inspector/MainScreen.js +16 -2
- package/dist/commonjs/components/Inspector/NetworkDetail.js +15 -0
- package/dist/commonjs/components/Inspector/NetworkTab.js +317 -12
- package/dist/commonjs/components/Inspector/NpmUpdateToast.js +88 -39
- package/dist/commonjs/components/Inspector/PerformanceHud.d.ts +7 -0
- package/dist/commonjs/components/Inspector/PerformanceHud.js +210 -0
- package/dist/commonjs/components/Inspector/PerformanceTab.js +30 -18
- package/dist/commonjs/components/Inspector/RequestReplayModal.d.ts +9 -0
- package/dist/commonjs/components/Inspector/RequestReplayModal.js +792 -0
- package/dist/commonjs/components/Inspector/RequestReplayView.d.ts +8 -0
- package/dist/commonjs/components/Inspector/RequestReplayView.js +871 -0
- package/dist/commonjs/components/Inspector/SettingsPanel.js +847 -370
- package/dist/commonjs/components/Inspector/StorageTab.d.ts +3 -0
- package/dist/commonjs/components/Inspector/StorageTab.js +610 -0
- package/dist/commonjs/components/Inspector/TabBar.js +23 -2
- package/dist/commonjs/components/Inspector/UpdateAvailableModal.d.ts +8 -0
- package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +469 -0
- package/dist/commonjs/components/NetworkIcons.d.ts +12 -0
- package/dist/commonjs/components/NetworkIcons.js +72 -3
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -1
- package/dist/commonjs/customHooks/storageInspector.d.ts +13 -0
- package/dist/commonjs/customHooks/storageInspector.js +179 -0
- package/dist/commonjs/helpers/deviceInfo.d.ts +4 -0
- package/dist/commonjs/helpers/deviceInfo.js +94 -0
- package/dist/commonjs/helpers/index.d.ts +2 -0
- package/dist/commonjs/helpers/index.js +12 -1
- package/dist/commonjs/helpers/packageAuditor.d.ts +5 -0
- package/dist/commonjs/helpers/packageAuditor.js +182 -0
- package/dist/commonjs/helpers/searchQueryParser.d.ts +8 -3
- package/dist/commonjs/helpers/searchQueryParser.js +85 -31
- package/dist/commonjs/helpers/telemetry.js +4 -4
- package/dist/commonjs/i18n/locales/en.json +3 -2
- package/dist/commonjs/index.d.ts +1 -0
- package/dist/commonjs/index.js +171 -16
- package/dist/commonjs/native/NativeInspector.d.ts +1 -0
- package/dist/commonjs/types/enums.d.ts +7 -0
- package/dist/commonjs/types/enums.js +7 -0
- package/dist/commonjs/types/interfaces.d.ts +82 -0
- package/dist/esm/components/Inspector/AuditTab.d.ts +3 -0
- package/dist/esm/components/Inspector/AuditTab.js +702 -0
- package/dist/esm/components/Inspector/DeviceTab.d.ts +3 -0
- package/dist/esm/components/Inspector/DeviceTab.js +678 -0
- package/dist/esm/components/Inspector/InspectorHeader.js +115 -75
- package/dist/esm/components/Inspector/MainScreen.js +16 -2
- package/dist/esm/components/Inspector/NetworkDetail.js +16 -1
- package/dist/esm/components/Inspector/NetworkTab.js +317 -12
- package/dist/esm/components/Inspector/NpmUpdateToast.js +88 -39
- package/dist/esm/components/Inspector/PerformanceHud.d.ts +7 -0
- package/dist/esm/components/Inspector/PerformanceHud.js +170 -0
- package/dist/esm/components/Inspector/PerformanceTab.js +31 -19
- package/dist/esm/components/Inspector/RequestReplayModal.d.ts +9 -0
- package/dist/esm/components/Inspector/RequestReplayModal.js +752 -0
- package/dist/esm/components/Inspector/RequestReplayView.d.ts +8 -0
- package/dist/esm/components/Inspector/RequestReplayView.js +831 -0
- package/dist/esm/components/Inspector/SettingsPanel.js +848 -371
- package/dist/esm/components/Inspector/StorageTab.d.ts +3 -0
- package/dist/esm/components/Inspector/StorageTab.js +571 -0
- package/dist/esm/components/Inspector/TabBar.js +24 -3
- package/dist/esm/components/Inspector/UpdateAvailableModal.d.ts +8 -0
- package/dist/esm/components/Inspector/UpdateAvailableModal.js +432 -0
- package/dist/esm/components/NetworkIcons.d.ts +12 -0
- package/dist/esm/components/NetworkIcons.js +57 -0
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -1
- package/dist/esm/customHooks/storageInspector.d.ts +13 -0
- package/dist/esm/customHooks/storageInspector.js +170 -0
- package/dist/esm/helpers/deviceInfo.d.ts +4 -0
- package/dist/esm/helpers/deviceInfo.js +89 -0
- package/dist/esm/helpers/index.d.ts +2 -0
- package/dist/esm/helpers/index.js +10 -0
- package/dist/esm/helpers/packageAuditor.d.ts +5 -0
- package/dist/esm/helpers/packageAuditor.js +173 -0
- package/dist/esm/helpers/searchQueryParser.d.ts +8 -3
- package/dist/esm/helpers/searchQueryParser.js +85 -31
- package/dist/esm/helpers/telemetry.js +4 -4
- package/dist/esm/i18n/locales/en.json +3 -2
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +167 -15
- package/dist/esm/native/NativeInspector.d.ts +1 -0
- package/dist/esm/types/enums.d.ts +7 -0
- package/dist/esm/types/enums.js +7 -0
- package/dist/esm/types/interfaces.d.ts +82 -0
- package/ios/NetworkInspectorModule.mm +12 -5
- package/package.json +4 -1
|
@@ -49,9 +49,11 @@ const constants_1 = require("../../constants");
|
|
|
49
49
|
const constants_2 = require("../../constants");
|
|
50
50
|
const helpers_1 = require("../../helpers");
|
|
51
51
|
const telemetry_1 = require("../../helpers/telemetry");
|
|
52
|
+
const UpdateAvailableModal_1 = require("./UpdateAvailableModal");
|
|
52
53
|
const NetworkIcons_1 = require("../NetworkIcons");
|
|
53
54
|
const InspectorHeader = react_1.default.memo(() => {
|
|
54
|
-
const { modalHeightPercent, appIcon, selected, setSelected, selectedEvent, setSelectedEvent, selectedLog, setSelectedLog, selectedReduxSlice, setSelectedReduxSlice, selectedReduxAction, setSelectedReduxAction, reduxState, reduxLastActionMap, showHeaderInfo, setShowHeaderInfo, updateAvailable, latestNpmVersion, clearAnim, activePulseAnim, unreadPulseAnim, runClearAllWithAnimation, settingsPage, setSettingsPage, resetToDefaults, closeModal, detailTitle, activeTab, environment, visible, selectedCrash, setSelectedCrash, } = (0, InspectorContext_1.useInspector)();
|
|
55
|
+
const { modalHeightPercent, appIcon, selected, setSelected, selectedEvent, setSelectedEvent, selectedLog, setSelectedLog, selectedReduxSlice, setSelectedReduxSlice, selectedReduxAction, setSelectedReduxAction, reduxState, reduxLastActionMap, showHeaderInfo, setShowHeaderInfo, updateAvailable, latestNpmVersion, clearAnim, activePulseAnim, unreadPulseAnim, runClearAllWithAnimation, settingsPage, setSettingsPage, resetToDefaults, closeModal, detailTitle, activeTab, environment, visible, selectedCrash, setSelectedCrash, deviceInfo, } = (0, InspectorContext_1.useInspector)();
|
|
56
|
+
const [showUpdateModal, setShowUpdateModal] = react_1.default.useState(false);
|
|
55
57
|
const [isTelemetryActive, setIsTelemetryActive] = react_1.default.useState(false);
|
|
56
58
|
const telemetryPulseAnim = react_1.default.useRef(new react_native_1.Animated.Value(1)).current;
|
|
57
59
|
react_1.default.useEffect(() => {
|
|
@@ -115,7 +117,8 @@ const InspectorHeader = react_1.default.memo(() => {
|
|
|
115
117
|
const isDetailView = (activeTab === 'apis' && selected != null) ||
|
|
116
118
|
(activeTab === 'analytics' && selectedEvent != null) ||
|
|
117
119
|
(activeTab === 'logs' && selectedLog != null) ||
|
|
118
|
-
(activeTab === 'redux' &&
|
|
120
|
+
(activeTab === 'redux' &&
|
|
121
|
+
(selectedReduxSlice != null || selectedReduxAction != null)) ||
|
|
119
122
|
(activeTab === 'crash' && selectedCrash != null);
|
|
120
123
|
const isSettingsView = settingsPage !== null;
|
|
121
124
|
const isAnySelected = isDetailView || isSettingsView;
|
|
@@ -140,7 +143,8 @@ const InspectorHeader = react_1.default.memo(() => {
|
|
|
140
143
|
}
|
|
141
144
|
}, [settingsPage]);
|
|
142
145
|
const headerTopPadding = react_native_1.Platform.OS === 'ios' && modalHeightPercent >= 95 ? 44 : 0;
|
|
143
|
-
return (
|
|
146
|
+
return (<>
|
|
147
|
+
<react_native_linear_gradient_1.default colors={['#4F46E5', '#7C3AED']} start={{ x: 0, y: 0 }} end={{ x: 1, y: 1 }} style={styles_1.default.headerGradient}>
|
|
144
148
|
<react_native_1.View style={{ paddingTop: headerTopPadding, width: '100%' }}>
|
|
145
149
|
<react_native_1.View style={styles_1.default.header}>
|
|
146
150
|
<react_native_1.View style={[
|
|
@@ -241,7 +245,12 @@ const InspectorHeader = react_1.default.memo(() => {
|
|
|
241
245
|
}}>
|
|
242
246
|
<AppHeaderLogo_1.default size={46} customIcon={appIcon}/>
|
|
243
247
|
<react_native_1.View style={{ gap: 2.5, flex: 1, minWidth: 0 }}>
|
|
244
|
-
<react_native_1.View style={{
|
|
248
|
+
<react_native_1.View style={{
|
|
249
|
+
flexDirection: 'row',
|
|
250
|
+
alignItems: 'center',
|
|
251
|
+
gap: 6,
|
|
252
|
+
minWidth: 0,
|
|
253
|
+
}}>
|
|
245
254
|
<react_native_1.Text style={[styles_1.default.headerTitle, { flexShrink: 1 }]} numberOfLines={1} ellipsizeMode="tail">
|
|
246
255
|
{(0, helpers_1.getAppName)()}
|
|
247
256
|
</react_native_1.Text>
|
|
@@ -255,93 +264,117 @@ const InspectorHeader = react_1.default.memo(() => {
|
|
|
255
264
|
marginBottom: 0,
|
|
256
265
|
},
|
|
257
266
|
]}>
|
|
258
|
-
<react_native_1.Text style={[
|
|
259
|
-
styles_1.default.envBadgeText,
|
|
260
|
-
{ color: envConfig.text },
|
|
261
|
-
]}>
|
|
267
|
+
<react_native_1.Text style={[styles_1.default.envBadgeText, { color: envConfig.text }]}>
|
|
262
268
|
{envConfig.label}
|
|
263
269
|
</react_native_1.Text>
|
|
264
270
|
</react_native_1.View>
|
|
265
|
-
{updateAvailable && (<react_native_1.Pressable hitSlop={10} onPress={() =>
|
|
266
|
-
|
|
267
|
-
{
|
|
268
|
-
text: 'View on NPM',
|
|
269
|
-
onPress: () => react_native_1.Linking.openURL('https://www.npmjs.com/package/react-native-inapp-inspector').catch(() => { }),
|
|
270
|
-
},
|
|
271
|
-
])} style={{
|
|
271
|
+
{updateAvailable && (<react_native_1.Pressable hitSlop={10} onPress={() => setShowUpdateModal(true)} style={{
|
|
272
|
+
flexDirection: 'row',
|
|
272
273
|
alignItems: 'center',
|
|
273
|
-
|
|
274
|
+
backgroundColor: '#F59E0B',
|
|
275
|
+
borderRadius: 5,
|
|
276
|
+
paddingHorizontal: 5.5,
|
|
277
|
+
paddingVertical: 1.5,
|
|
278
|
+
gap: 3.5,
|
|
279
|
+
shadowColor: '#F59E0B',
|
|
280
|
+
shadowOffset: { width: 0, height: 1.5 },
|
|
281
|
+
shadowOpacity: 0.35,
|
|
282
|
+
shadowRadius: 3,
|
|
283
|
+
elevation: 3,
|
|
274
284
|
flexShrink: 0,
|
|
275
285
|
}}>
|
|
276
286
|
<react_native_1.Animated.View style={{
|
|
277
|
-
width:
|
|
278
|
-
height:
|
|
279
|
-
borderRadius:
|
|
280
|
-
backgroundColor:
|
|
281
|
-
borderWidth: 1,
|
|
282
|
-
borderColor: `${AppColors_1.AppColors.white}E6`,
|
|
287
|
+
width: 5,
|
|
288
|
+
height: 5,
|
|
289
|
+
borderRadius: 2.5,
|
|
290
|
+
backgroundColor: '#FFFFFF',
|
|
283
291
|
opacity: activePulseAnim,
|
|
284
292
|
transform: [{ scale: unreadPulseAnim }],
|
|
285
293
|
}}/>
|
|
294
|
+
<react_native_1.Text style={{
|
|
295
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
296
|
+
fontSize: 9,
|
|
297
|
+
color: '#FFFFFF',
|
|
298
|
+
letterSpacing: 0.3,
|
|
299
|
+
}}>
|
|
300
|
+
UPDATE ⚡
|
|
301
|
+
</react_native_1.Text>
|
|
286
302
|
</react_native_1.Pressable>)}
|
|
287
303
|
</react_native_1.View>
|
|
288
304
|
|
|
289
|
-
{/* OS & NPM Version
|
|
305
|
+
{/* OS & NPM Version Common Chip Bar */}
|
|
290
306
|
<react_native_1.View style={{
|
|
291
307
|
flexDirection: 'row',
|
|
292
308
|
alignItems: 'center',
|
|
293
309
|
gap: 5,
|
|
294
310
|
minWidth: 0,
|
|
295
311
|
}}>
|
|
312
|
+
{/* Unified Platform & Build Chip */}
|
|
296
313
|
<react_native_1.View style={{
|
|
297
314
|
flexDirection: 'row',
|
|
298
315
|
alignItems: 'center',
|
|
299
|
-
backgroundColor:
|
|
300
|
-
borderRadius:
|
|
301
|
-
paddingHorizontal: 6,
|
|
302
|
-
paddingVertical: 2,
|
|
303
|
-
gap: 4,
|
|
316
|
+
backgroundColor: 'rgba(255, 255, 255, 0.16)',
|
|
317
|
+
borderRadius: 6,
|
|
318
|
+
paddingHorizontal: 6.5,
|
|
319
|
+
paddingVertical: 2.5,
|
|
320
|
+
gap: 4.5,
|
|
304
321
|
borderWidth: 1,
|
|
305
|
-
borderColor:
|
|
322
|
+
borderColor: 'rgba(255, 255, 255, 0.28)',
|
|
306
323
|
flexShrink: 0,
|
|
307
324
|
}}>
|
|
308
|
-
{react_native_1.Platform.OS === 'ios' ? (<NetworkIcons_1.AppleIcon color=
|
|
325
|
+
{react_native_1.Platform.OS === 'ios' ? (<NetworkIcons_1.AppleIcon color="#FFFFFF" size={10.5}/>) : (<NetworkIcons_1.AndroidIcon color="#FFFFFF" size={10.5}/>)}
|
|
309
326
|
<react_native_1.Text style={{
|
|
310
|
-
fontFamily: AppFonts_1.AppFonts.
|
|
327
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
311
328
|
fontSize: 9.5,
|
|
312
|
-
color:
|
|
329
|
+
color: '#FFFFFF',
|
|
313
330
|
letterSpacing: 0.1,
|
|
314
331
|
}} numberOfLines={1}>
|
|
315
332
|
{react_native_1.Platform.OS === 'ios'
|
|
316
|
-
? `iOS ${react_native_1.Platform.Version}
|
|
317
|
-
|
|
333
|
+
? `iOS ${String(deviceInfo?.osVersion || react_native_1.Platform.Version).replace(/^(ios\s*)+/i, '').trim()}${deviceInfo?.buildNumber || deviceInfo?.appVersion
|
|
334
|
+
? ` (${deviceInfo.buildNumber || deviceInfo.appVersion})`
|
|
335
|
+
: ''}`
|
|
336
|
+
: `Android ${String(deviceInfo?.osVersion || react_native_1.Platform.Version).replace(/^(android\s*)+/i, '').trim()}${deviceInfo?.buildNumber || deviceInfo?.appVersion
|
|
337
|
+
? ` (${deviceInfo.buildNumber || deviceInfo.appVersion})`
|
|
338
|
+
: ''}`}
|
|
318
339
|
</react_native_1.Text>
|
|
319
340
|
</react_native_1.View>
|
|
320
341
|
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
342
|
+
{/* Unified NPM Version Chip */}
|
|
343
|
+
<react_native_1.Pressable onPress={() => {
|
|
344
|
+
if (updateAvailable) {
|
|
345
|
+
setShowUpdateModal(true);
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
react_native_1.Linking.openURL('https://www.npmjs.com/package/react-native-inapp-inspector').catch(() => { });
|
|
349
|
+
}
|
|
350
|
+
}} style={{
|
|
351
|
+
backgroundColor: 'rgba(255, 255, 255, 0.16)',
|
|
352
|
+
borderRadius: 6,
|
|
353
|
+
paddingHorizontal: 6.5,
|
|
354
|
+
paddingVertical: 2.5,
|
|
326
355
|
flexDirection: 'row',
|
|
327
356
|
alignItems: 'center',
|
|
328
357
|
gap: 4,
|
|
358
|
+
borderWidth: 1,
|
|
359
|
+
borderColor: 'rgba(255, 255, 255, 0.28)',
|
|
329
360
|
flexShrink: 0,
|
|
330
|
-
shadowColor: '#000000',
|
|
331
|
-
shadowOffset: { width: 0, height: 1 },
|
|
332
|
-
shadowOpacity: 0.15,
|
|
333
|
-
shadowRadius: 2,
|
|
334
|
-
elevation: 2,
|
|
335
361
|
}}>
|
|
336
|
-
<NetworkIcons_1.NpmIcon size={11} color="#
|
|
362
|
+
<NetworkIcons_1.NpmIcon size={11} color="#FF6B6B"/>
|
|
337
363
|
<react_native_1.Text style={{
|
|
338
364
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
339
365
|
fontSize: 9.5,
|
|
340
|
-
color: '#
|
|
341
|
-
letterSpacing: 0.
|
|
366
|
+
color: '#FFFFFF',
|
|
367
|
+
letterSpacing: 0.15,
|
|
342
368
|
}} numberOfLines={1}>
|
|
343
369
|
v{constants_2.LIB_VERSION}
|
|
344
370
|
</react_native_1.Text>
|
|
371
|
+
{updateAvailable && (<react_native_1.Text style={{
|
|
372
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
373
|
+
fontSize: 9,
|
|
374
|
+
color: '#F59E0B',
|
|
375
|
+
}}>
|
|
376
|
+
↑
|
|
377
|
+
</react_native_1.Text>)}
|
|
345
378
|
</react_native_1.Pressable>
|
|
346
379
|
|
|
347
380
|
{isTelemetryActive && (<react_native_1.Pressable onPress={() => react_native_1.Alert.alert('Anonymous Telemetry Active', 'Anonymous diagnostics (such as React Native version, JavaScript engine, and device model) are currently enabled to help improve library tooling.\n\nNo user data or network payloads are captured. You can toggle this anytime in Settings.', [{ text: 'Got it' }])} style={{
|
|
@@ -482,9 +515,7 @@ const InspectorHeader = react_1.default.memo(() => {
|
|
|
482
515
|
},
|
|
483
516
|
]}>
|
|
484
517
|
<react_native_1.Text style={styles_1.default.headerMethodText}>
|
|
485
|
-
{selectedEvent.source === 'firebase'
|
|
486
|
-
? 'FB'
|
|
487
|
-
: 'MAN'}
|
|
518
|
+
{selectedEvent.source === 'firebase' ? 'FB' : 'MAN'}
|
|
488
519
|
</react_native_1.Text>
|
|
489
520
|
</react_native_1.View>
|
|
490
521
|
<react_native_1.Text style={styles_1.default.headerDetailTitle} numberOfLines={1} ellipsizeMode="middle">
|
|
@@ -527,9 +558,7 @@ const InspectorHeader = react_1.default.memo(() => {
|
|
|
527
558
|
</react_native_1.View>
|
|
528
559
|
<react_native_1.Text style={styles_1.default.headerDetailTitle} numberOfLines={1} ellipsizeMode="middle">
|
|
529
560
|
console.
|
|
530
|
-
{
|
|
531
|
-
selectedLog.type ||
|
|
532
|
-
'log'}
|
|
561
|
+
{selectedLog.sourceMethod || selectedLog.type || 'log'}
|
|
533
562
|
</react_native_1.Text>
|
|
534
563
|
</react_native_1.View>
|
|
535
564
|
<react_native_1.View style={styles_1.default.headerDetailSubRow}>
|
|
@@ -542,10 +571,10 @@ const InspectorHeader = react_1.default.memo(() => {
|
|
|
542
571
|
borderRadius: 20,
|
|
543
572
|
backgroundColor: `${AppColors_1.AppColors.white}29`,
|
|
544
573
|
}}>
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
574
|
+
<NetworkIcons_1.ClockIcon color={AppColors_1.AppColors.white} size={11}/>
|
|
575
|
+
<react_native_1.Text style={styles_1.default.headerSubTitle}>
|
|
576
|
+
{(0, helpers_1.formatTime)(selectedLog.timestamp)}
|
|
577
|
+
</react_native_1.Text>
|
|
549
578
|
</react_native_1.View>
|
|
550
579
|
</react_native_1.View>
|
|
551
580
|
</react_native_1.View>) : activeTab === 'redux' && selectedReduxSlice != null ? ((() => {
|
|
@@ -565,9 +594,7 @@ const InspectorHeader = react_1.default.memo(() => {
|
|
|
565
594
|
backgroundColor: `${AppColors_1.AppColors.purple}4D`,
|
|
566
595
|
},
|
|
567
596
|
]}>
|
|
568
|
-
<react_native_1.Text style={styles_1.default.headerMethodText}>
|
|
569
|
-
SLICE
|
|
570
|
-
</react_native_1.Text>
|
|
597
|
+
<react_native_1.Text style={styles_1.default.headerMethodText}>SLICE</react_native_1.Text>
|
|
571
598
|
</react_native_1.View>
|
|
572
599
|
<react_native_1.Text style={styles_1.default.headerDetailTitle} numberOfLines={1} ellipsizeMode="middle">
|
|
573
600
|
{selectedReduxSlice}
|
|
@@ -578,20 +605,26 @@ const InspectorHeader = react_1.default.memo(() => {
|
|
|
578
605
|
styles_1.default.headerStatusDot,
|
|
579
606
|
{ backgroundColor: AppColors_1.AppColors.liveGreen },
|
|
580
607
|
]}/>
|
|
581
|
-
<react_native_1.Text style={styles_1.default.headerSubTitle}>
|
|
582
|
-
|
|
608
|
+
<react_native_1.Text style={styles_1.default.headerSubTitle}>Live</react_native_1.Text>
|
|
609
|
+
<react_native_1.Text style={[styles_1.default.headerSubTitle, { opacity: 0.6 }]}>
|
|
610
|
+
•
|
|
583
611
|
</react_native_1.Text>
|
|
584
|
-
<react_native_1.Text style={[styles_1.default.headerSubTitle, { opacity: 0.6 }]}>•</react_native_1.Text>
|
|
585
612
|
<react_native_1.Text style={styles_1.default.headerSubTitle}>
|
|
586
613
|
{keyCount} keys
|
|
587
614
|
</react_native_1.Text>
|
|
588
|
-
<react_native_1.Text style={[styles_1.default.headerSubTitle, { opacity: 0.6 }]}
|
|
589
|
-
|
|
590
|
-
{sliceSize}
|
|
615
|
+
<react_native_1.Text style={[styles_1.default.headerSubTitle, { opacity: 0.6 }]}>
|
|
616
|
+
•
|
|
591
617
|
</react_native_1.Text>
|
|
618
|
+
<react_native_1.Text style={styles_1.default.headerSubTitle}>{sliceSize}</react_native_1.Text>
|
|
592
619
|
{lastAction?.timestamp && (<>
|
|
593
|
-
<react_native_1.Text style={[styles_1.default.headerSubTitle, { opacity: 0.6 }]}
|
|
594
|
-
|
|
620
|
+
<react_native_1.Text style={[styles_1.default.headerSubTitle, { opacity: 0.6 }]}>
|
|
621
|
+
•
|
|
622
|
+
</react_native_1.Text>
|
|
623
|
+
<react_native_1.View style={{
|
|
624
|
+
flexDirection: 'row',
|
|
625
|
+
alignItems: 'center',
|
|
626
|
+
gap: 3,
|
|
627
|
+
}}>
|
|
595
628
|
<NetworkIcons_1.ClockIcon color={AppColors_1.AppColors.white} size={10}/>
|
|
596
629
|
<react_native_1.Text style={styles_1.default.headerSubTitle}>
|
|
597
630
|
{lastAction.timestamp}
|
|
@@ -608,9 +641,7 @@ const InspectorHeader = react_1.default.memo(() => {
|
|
|
608
641
|
backgroundColor: `${AppColors_1.AppColors.brandPurple}4D`,
|
|
609
642
|
},
|
|
610
643
|
]}>
|
|
611
|
-
<react_native_1.Text style={styles_1.default.headerMethodText}>
|
|
612
|
-
ACTION
|
|
613
|
-
</react_native_1.Text>
|
|
644
|
+
<react_native_1.Text style={styles_1.default.headerMethodText}>ACTION</react_native_1.Text>
|
|
614
645
|
</react_native_1.View>
|
|
615
646
|
<react_native_1.Text style={styles_1.default.headerDetailTitle} numberOfLines={1} ellipsizeMode="middle">
|
|
616
647
|
{selectedReduxAction.type}
|
|
@@ -636,7 +667,9 @@ const InspectorHeader = react_1.default.memo(() => {
|
|
|
636
667
|
},
|
|
637
668
|
]}>
|
|
638
669
|
<react_native_1.Text style={styles_1.default.headerMethodText}>
|
|
639
|
-
{selectedCrash.isFatal
|
|
670
|
+
{selectedCrash.isFatal
|
|
671
|
+
? 'FATAL'
|
|
672
|
+
: selectedCrash.type.toUpperCase()}
|
|
640
673
|
</react_native_1.Text>
|
|
641
674
|
</react_native_1.View>
|
|
642
675
|
<react_native_1.Text style={styles_1.default.headerDetailTitle} numberOfLines={1} ellipsizeMode="middle">
|
|
@@ -653,10 +686,13 @@ const InspectorHeader = react_1.default.memo(() => {
|
|
|
653
686
|
},
|
|
654
687
|
]}/>
|
|
655
688
|
<react_native_1.Text style={styles_1.default.headerSubTitle}>
|
|
656
|
-
{selectedCrash.timeStr ||
|
|
689
|
+
{selectedCrash.timeStr ||
|
|
690
|
+
new Date(selectedCrash.timestamp).toLocaleTimeString()}
|
|
657
691
|
</react_native_1.Text>
|
|
658
692
|
{selectedCrash.deviceInfo?.platform && (<>
|
|
659
|
-
<react_native_1.Text style={[styles_1.default.headerSubTitle, { opacity: 0.6 }]}
|
|
693
|
+
<react_native_1.Text style={[styles_1.default.headerSubTitle, { opacity: 0.6 }]}>
|
|
694
|
+
•
|
|
695
|
+
</react_native_1.Text>
|
|
660
696
|
<react_native_1.Text style={styles_1.default.headerSubTitle}>
|
|
661
697
|
{selectedCrash.deviceInfo.platform.toUpperCase()}
|
|
662
698
|
</react_native_1.Text>
|
|
@@ -728,6 +764,10 @@ const InspectorHeader = react_1.default.memo(() => {
|
|
|
728
764
|
</react_native_1.View>
|
|
729
765
|
</react_native_1.View>
|
|
730
766
|
</react_native_1.View>
|
|
731
|
-
</react_native_linear_gradient_1.default>
|
|
767
|
+
</react_native_linear_gradient_1.default>
|
|
768
|
+
|
|
769
|
+
{/* Dedicated Update Available Details Modal */}
|
|
770
|
+
<UpdateAvailableModal_1.UpdateAvailableModal visible={showUpdateModal} latestVersion={latestNpmVersion} onClose={() => setShowUpdateModal(false)}/>
|
|
771
|
+
</>);
|
|
732
772
|
});
|
|
733
773
|
exports.default = InspectorHeader;
|
|
@@ -55,6 +55,9 @@ const BundleTab_1 = __importDefault(require("./BundleTab"));
|
|
|
55
55
|
const PerformanceTab_1 = __importDefault(require("./PerformanceTab"));
|
|
56
56
|
const CrashTab_1 = __importDefault(require("./CrashTab"));
|
|
57
57
|
const CrashDetail_1 = __importDefault(require("./CrashDetail"));
|
|
58
|
+
const StorageTab_1 = __importDefault(require("./StorageTab"));
|
|
59
|
+
const DeviceTab_1 = __importDefault(require("./DeviceTab"));
|
|
60
|
+
const AuditTab_1 = __importDefault(require("./AuditTab"));
|
|
58
61
|
const SettingsPanel_1 = __importDefault(require("./SettingsPanel"));
|
|
59
62
|
const TelemetryConsentModal_1 = __importDefault(require("./TelemetryConsentModal"));
|
|
60
63
|
const NpmUpdateToast_1 = __importDefault(require("./NpmUpdateToast"));
|
|
@@ -62,8 +65,9 @@ const Toast_1 = __importDefault(require("../Toast"));
|
|
|
62
65
|
const styles_1 = __importDefault(require("../../styles"));
|
|
63
66
|
const AppColors_1 = require("../../styles/AppColors");
|
|
64
67
|
const NavigationTracker_1 = __importDefault(require("./NavigationTracker"));
|
|
68
|
+
const PerformanceHud_1 = __importDefault(require("./PerformanceHud"));
|
|
65
69
|
const MainScreen = () => {
|
|
66
|
-
const { visible, modalAnimationType, closeModal, modalHeightPercent, selected, selectedEvent, selectedLog, selectedReduxSlice, selectedReduxAction, selectedCrash, settingsPage, activeTab, isReady, isEnabled, useNativeFab, hasNavigationContext, setNavState, } = (0, InspectorContext_1.useInspector)();
|
|
70
|
+
const { visible, setVisible, switchActiveTab, modalAnimationType, closeModal, modalHeightPercent, selected, selectedEvent, selectedLog, selectedReduxSlice, selectedReduxAction, selectedCrash, settingsPage, activeTab, isReady, isEnabled, isPerformanceHudEnabled, useNativeFab, hasNavigationContext, setNavState, } = (0, InspectorContext_1.useInspector)();
|
|
67
71
|
const isDetailActive = (activeTab === 'apis' && selected != null) ||
|
|
68
72
|
(activeTab === 'analytics' && selectedEvent != null) ||
|
|
69
73
|
(activeTab === 'logs' && selectedLog != null) ||
|
|
@@ -104,9 +108,16 @@ const MainScreen = () => {
|
|
|
104
108
|
}).start();
|
|
105
109
|
}, [activeTab]);
|
|
106
110
|
return (<>
|
|
107
|
-
|
|
111
|
+
<react_native_1.View pointerEvents="box-none" style={react_native_1.StyleSheet.absoluteFillObject}>
|
|
112
|
+
{(react_native_1.Platform.OS === 'ios' || react_native_1.Platform.OS === 'android') &&
|
|
108
113
|
isEnabled &&
|
|
114
|
+
!visible &&
|
|
109
115
|
!useNativeFab && <FabLauncher_1.default />}
|
|
116
|
+
{isEnabled && !visible && isPerformanceHudEnabled && (<PerformanceHud_1.default visible={true} onPress={() => {
|
|
117
|
+
setVisible(true);
|
|
118
|
+
switchActiveTab('performance');
|
|
119
|
+
}}/>)}
|
|
120
|
+
</react_native_1.View>
|
|
110
121
|
<react_native_1.Modal visible={visible} animationType={modalAnimationType} transparent statusBarTranslucent={true}>
|
|
111
122
|
{visible && (<ErrorBoundary_1.default onClose={closeModal}>
|
|
112
123
|
<react_native_1.View style={styles_1.default.modalBackdrop}>
|
|
@@ -150,6 +161,9 @@ const MainScreen = () => {
|
|
|
150
161
|
{activeTab === 'logs' && <ConsoleTab_1.default />}
|
|
151
162
|
{activeTab === 'analytics' && <AnalyticsTab_1.default />}
|
|
152
163
|
{activeTab === 'redux' && <ReduxTab_1.default />}
|
|
164
|
+
{activeTab === 'storage' && <StorageTab_1.default />}
|
|
165
|
+
{activeTab === 'device' && <DeviceTab_1.default />}
|
|
166
|
+
{activeTab === 'audit' && <AuditTab_1.default />}
|
|
153
167
|
{activeTab === 'bundle' && <BundleTab_1.default />}
|
|
154
168
|
{activeTab === 'performance' && <PerformanceTab_1.default />}
|
|
155
169
|
{activeTab === 'crash' && <CrashTab_1.default />}
|
|
@@ -22,8 +22,10 @@ const AppFonts_1 = require("../../styles/AppFonts");
|
|
|
22
22
|
const constants_1 = require("../../constants");
|
|
23
23
|
const helpers_1 = require("../../helpers");
|
|
24
24
|
const NetworkIcons_1 = require("../NetworkIcons");
|
|
25
|
+
const RequestReplayView_1 = __importDefault(require("./RequestReplayView"));
|
|
25
26
|
const NetworkDetail = react_1.default.memo(() => {
|
|
26
27
|
const { t } = (0, i18n_1.useTranslation)();
|
|
28
|
+
const [isReplayScreenActive, setIsReplayScreenActive] = react_1.default.useState(false);
|
|
27
29
|
const { selected, detailDisplayUrl, apiDetailActiveTab, setApiDetailActiveTab, detailSearch, setDetailSearch, reqExpanded, setReqExpanded, resExpanded, setResExpanded, showReqDiff, setShowReqDiff, showResDiff, setShowResDiff, prevRequestData, prevResponseData, logRouteMapRef, } = (0, InspectorContext_1.useInspector)();
|
|
28
30
|
const handleOpenUrl = () => {
|
|
29
31
|
react_native_1.Alert.alert(t('common.openInBrowser') || 'Open in Browser', `${t('common.openInBrowserPrompt') || 'Are you sure you want to open this URL in your external browser?'}\n\n${detailDisplayUrl}`, [
|
|
@@ -47,6 +49,9 @@ const NetworkDetail = react_1.default.memo(() => {
|
|
|
47
49
|
};
|
|
48
50
|
if (!selected)
|
|
49
51
|
return null;
|
|
52
|
+
if (isReplayScreenActive) {
|
|
53
|
+
return (<RequestReplayView_1.default request={selected} onBack={() => setIsReplayScreenActive(false)}/>);
|
|
54
|
+
}
|
|
50
55
|
return (<react_native_1.View style={{ flex: 1 }}>
|
|
51
56
|
{/* Non-scrollable details header */}
|
|
52
57
|
<react_native_1.View style={{ paddingHorizontal: 6, paddingTop: 4 }}>
|
|
@@ -252,6 +257,16 @@ const NetworkDetail = react_1.default.memo(() => {
|
|
|
252
257
|
</react_native_1.View>
|
|
253
258
|
|
|
254
259
|
<react_native_1.View style={styles_1.default.detailInfoRight}>
|
|
260
|
+
<TouchableScale_1.default style={[
|
|
261
|
+
styles_1.default.iconSquareBtn,
|
|
262
|
+
{
|
|
263
|
+
backgroundColor: `${AppColors_1.AppColors.purple}15`,
|
|
264
|
+
borderColor: `${AppColors_1.AppColors.purple}30`,
|
|
265
|
+
borderWidth: 1,
|
|
266
|
+
},
|
|
267
|
+
]} onPress={() => setIsReplayScreenActive(true)} accessible={true} accessibilityRole="button" accessibilityLabel="Edit & Resend Request" hitSlop={12}>
|
|
268
|
+
<NetworkIcons_1.ReplayIcon color={AppColors_1.AppColors.purple} size={14}/>
|
|
269
|
+
</TouchableScale_1.default>
|
|
255
270
|
<TouchableScale_1.default style={[styles_1.default.iconSquareBtn, { backgroundColor: `${AppColors_1.AppColors.sky600}15` }]} onPress={handleOpenUrl} hitSlop={12}>
|
|
256
271
|
<NetworkIcons_1.ExternalLinkIcon color={AppColors_1.AppColors.sky600} size={14}/>
|
|
257
272
|
</TouchableScale_1.default>
|