react-native-inapp-inspector 1.1.33 → 1.1.35

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.
Files changed (75) hide show
  1. package/dist/commonjs/components/ConsoleLogCard.js +57 -56
  2. package/dist/commonjs/components/CopyButton.js +7 -1
  3. package/dist/commonjs/components/Inspector/BundleTab.js +268 -27
  4. package/dist/commonjs/components/Inspector/CrashDetail.js +16 -12
  5. package/dist/commonjs/components/Inspector/InspectorHeader.js +16 -16
  6. package/dist/commonjs/components/Inspector/MainScreen.js +6 -2
  7. package/dist/commonjs/components/Inspector/NetworkTab.js +97 -1
  8. package/dist/commonjs/components/Inspector/ReduxDetail.js +24 -19
  9. package/dist/commonjs/components/Inspector/ReduxTab.js +12 -8
  10. package/dist/commonjs/components/Inspector/SettingsPanel.js +1243 -673
  11. package/dist/commonjs/components/LogCard.js +27 -9
  12. package/dist/commonjs/components/MetaAccordion.js +42 -0
  13. package/dist/commonjs/components/NetworkIcons.d.ts +9 -0
  14. package/dist/commonjs/components/NetworkIcons.js +48 -1
  15. package/dist/commonjs/components/Toast.js +3 -3
  16. package/dist/commonjs/components/TouchableScale.d.ts +4 -2
  17. package/dist/commonjs/components/TouchableScale.js +4 -4
  18. package/dist/commonjs/constants/version.d.ts +1 -1
  19. package/dist/commonjs/constants/version.js +1 -1
  20. package/dist/commonjs/customHooks/analyticsLogger.d.ts +2 -0
  21. package/dist/commonjs/customHooks/analyticsLogger.js +10 -1
  22. package/dist/commonjs/customHooks/bundleAnalyzer.d.ts +2 -0
  23. package/dist/commonjs/customHooks/bundleAnalyzer.js +80 -33
  24. package/dist/commonjs/customHooks/consoleLogger.d.ts +2 -0
  25. package/dist/commonjs/customHooks/consoleLogger.js +10 -1
  26. package/dist/commonjs/customHooks/crashHandler.d.ts +2 -0
  27. package/dist/commonjs/customHooks/crashHandler.js +10 -1
  28. package/dist/commonjs/customHooks/networkLogger.d.ts +2 -0
  29. package/dist/commonjs/customHooks/networkLogger.js +12 -1
  30. package/dist/commonjs/customHooks/performanceTracker.d.ts +3 -1
  31. package/dist/commonjs/customHooks/performanceTracker.js +18 -4
  32. package/dist/commonjs/customHooks/reduxLogger.d.ts +2 -0
  33. package/dist/commonjs/customHooks/reduxLogger.js +10 -1
  34. package/dist/commonjs/i18n/locales/en.json +96 -28
  35. package/dist/commonjs/index.js +78 -34
  36. package/dist/commonjs/styles/AppColors.d.ts +28 -0
  37. package/dist/commonjs/styles/AppColors.js +30 -0
  38. package/dist/esm/components/ConsoleLogCard.js +58 -57
  39. package/dist/esm/components/CopyButton.js +7 -1
  40. package/dist/esm/components/Inspector/BundleTab.js +268 -27
  41. package/dist/esm/components/Inspector/CrashDetail.js +16 -12
  42. package/dist/esm/components/Inspector/InspectorHeader.js +16 -16
  43. package/dist/esm/components/Inspector/MainScreen.js +6 -2
  44. package/dist/esm/components/Inspector/NetworkTab.js +99 -3
  45. package/dist/esm/components/Inspector/ReduxDetail.js +24 -19
  46. package/dist/esm/components/Inspector/ReduxTab.js +12 -8
  47. package/dist/esm/components/Inspector/SettingsPanel.js +1246 -676
  48. package/dist/esm/components/LogCard.js +27 -9
  49. package/dist/esm/components/MetaAccordion.js +42 -0
  50. package/dist/esm/components/NetworkIcons.d.ts +9 -0
  51. package/dist/esm/components/NetworkIcons.js +38 -0
  52. package/dist/esm/components/Toast.js +3 -3
  53. package/dist/esm/components/TouchableScale.d.ts +4 -2
  54. package/dist/esm/components/TouchableScale.js +4 -4
  55. package/dist/esm/constants/version.d.ts +1 -1
  56. package/dist/esm/constants/version.js +1 -1
  57. package/dist/esm/customHooks/analyticsLogger.d.ts +2 -0
  58. package/dist/esm/customHooks/analyticsLogger.js +7 -0
  59. package/dist/esm/customHooks/bundleAnalyzer.d.ts +2 -0
  60. package/dist/esm/customHooks/bundleAnalyzer.js +77 -32
  61. package/dist/esm/customHooks/consoleLogger.d.ts +2 -0
  62. package/dist/esm/customHooks/consoleLogger.js +7 -0
  63. package/dist/esm/customHooks/crashHandler.d.ts +2 -0
  64. package/dist/esm/customHooks/crashHandler.js +7 -0
  65. package/dist/esm/customHooks/networkLogger.d.ts +2 -0
  66. package/dist/esm/customHooks/networkLogger.js +9 -0
  67. package/dist/esm/customHooks/performanceTracker.d.ts +3 -1
  68. package/dist/esm/customHooks/performanceTracker.js +15 -3
  69. package/dist/esm/customHooks/reduxLogger.d.ts +2 -0
  70. package/dist/esm/customHooks/reduxLogger.js +7 -0
  71. package/dist/esm/i18n/locales/en.json +96 -28
  72. package/dist/esm/index.js +64 -20
  73. package/dist/esm/styles/AppColors.d.ts +28 -0
  74. package/dist/esm/styles/AppColors.js +30 -0
  75. package/package.json +3 -2
@@ -3,12 +3,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.addAxiosInterceptors = exports.setupNetworkLogger = exports.getNetworkLogs = exports.clearNetworkLogs = exports.subscribeNetworkLogs = void 0;
6
+ exports.addAxiosInterceptors = exports.setupNetworkLogger = exports.getNetworkLogs = exports.clearNetworkLogs = exports.subscribeNetworkLogs = exports.getNetworkModuleEnabled = exports.setNetworkModuleEnabled = void 0;
7
7
  const axios_1 = __importDefault(require("axios"));
8
8
  const crashHandler_1 = require("./crashHandler");
9
9
  let logs = [];
10
10
  let listeners = [];
11
11
  let counter = 0;
12
+ let isNetworkModuleEnabled = true;
13
+ const setNetworkModuleEnabled = (enabled) => {
14
+ isNetworkModuleEnabled = enabled;
15
+ };
16
+ exports.setNetworkModuleEnabled = setNetworkModuleEnabled;
17
+ const getNetworkModuleEnabled = () => isNetworkModuleEnabled;
18
+ exports.getNetworkModuleEnabled = getNetworkModuleEnabled;
12
19
  const ALLOWED_METHODS = ["GET", "POST", "PUT", "PATCH", "DELETE"];
13
20
  const IGNORED_URL_PATTERNS = [
14
21
  /\/symbolicate(?:[/?#]|$)/i,
@@ -121,6 +128,8 @@ const notify = () => {
121
128
  listeners.forEach((cb) => cb(snapshot));
122
129
  };
123
130
  const addOrUpdateLog = (log) => {
131
+ if (!isNetworkModuleEnabled)
132
+ return;
124
133
  const method = log.method?.toUpperCase();
125
134
  if (!ALLOWED_METHODS.includes(method))
126
135
  return;
@@ -144,6 +153,8 @@ const setupNetworkLogger = () => {
144
153
  const originalFetch = globalThis.fetch;
145
154
  if (originalFetch) {
146
155
  globalThis.fetch = async (url, options = {}) => {
156
+ if (!isNetworkModuleEnabled)
157
+ return originalFetch(url, options);
147
158
  const method = (options?.method || "GET").toUpperCase();
148
159
  if (!ALLOWED_METHODS.includes(method))
149
160
  return originalFetch(url, options);
@@ -77,6 +77,8 @@ export declare function getCallerSourceFile(fallbackName?: string): string;
77
77
  export declare const getInitialRenderProfiles: () => ComponentRenderProfile[];
78
78
  export declare const getInitialPerformanceEvents: () => PerformanceEvent[];
79
79
  export declare const INITIAL_EVENTS: PerformanceEvent[];
80
+ export declare const setPerformanceModuleEnabled: (enabled: boolean) => void;
81
+ export declare const getPerformanceModuleEnabled: () => boolean;
80
82
  export declare const subscribeRenderProfiles: (listener: (profiles: ComponentRenderProfile[]) => void) => () => void;
81
83
  export declare const getRenderProfiles: () => ComponentRenderProfile[];
82
84
  export declare const registerComponentProfile: (profile: ComponentRenderProfile) => void;
@@ -129,7 +131,7 @@ export declare const useComponentProfiler: (componentName: string, options?: {
129
131
  sourceFile?: string;
130
132
  propsToCompare?: Record<string, any>;
131
133
  }) => void;
132
- export declare const usePerformanceTracker: () => {
134
+ export declare const usePerformanceTracker: (enabled?: boolean) => {
133
135
  isRecording: boolean;
134
136
  setIsRecording: import("react").Dispatch<import("react").SetStateAction<boolean>>;
135
137
  currentFps: number;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getPerformanceEvents = exports.subscribePerformanceEvents = exports.clearPerformanceEvents = exports.logPerformanceEvent = exports.usePerformanceTracker = exports.useComponentProfiler = exports.measureAsync = exports.trackHeavyTask = exports.useNavigationProfiler = exports.trackNavigationTransition = exports.getHermesMemoryStats = exports.trackComponentRender = exports.registerComponentProfile = exports.getRenderProfiles = exports.subscribeRenderProfiles = exports.INITIAL_EVENTS = exports.getInitialPerformanceEvents = exports.getInitialRenderProfiles = exports.generateFixSnippet = void 0;
3
+ exports.getPerformanceEvents = exports.subscribePerformanceEvents = exports.clearPerformanceEvents = exports.logPerformanceEvent = exports.usePerformanceTracker = exports.useComponentProfiler = exports.measureAsync = exports.trackHeavyTask = exports.useNavigationProfiler = exports.trackNavigationTransition = exports.getHermesMemoryStats = exports.trackComponentRender = exports.registerComponentProfile = exports.getRenderProfiles = exports.subscribeRenderProfiles = exports.getPerformanceModuleEnabled = exports.setPerformanceModuleEnabled = exports.INITIAL_EVENTS = exports.getInitialPerformanceEvents = exports.getInitialRenderProfiles = exports.generateFixSnippet = void 0;
4
4
  exports.getCallerSourceFile = getCallerSourceFile;
5
5
  const AppColors_1 = require("../styles/AppColors");
6
6
  const i18n_1 = require("../i18n");
@@ -177,6 +177,13 @@ exports.getInitialRenderProfiles = getInitialRenderProfiles;
177
177
  const getInitialPerformanceEvents = () => [];
178
178
  exports.getInitialPerformanceEvents = getInitialPerformanceEvents;
179
179
  exports.INITIAL_EVENTS = [];
180
+ let isPerformanceModuleEnabled = false;
181
+ const setPerformanceModuleEnabled = (enabled) => {
182
+ isPerformanceModuleEnabled = enabled;
183
+ };
184
+ exports.setPerformanceModuleEnabled = setPerformanceModuleEnabled;
185
+ const getPerformanceModuleEnabled = () => isPerformanceModuleEnabled;
186
+ exports.getPerformanceModuleEnabled = getPerformanceModuleEnabled;
180
187
  const globalRenderRegistry = new Map();
181
188
  const renderListeners = new Set();
182
189
  const notifyRenderListeners = () => {
@@ -199,11 +206,15 @@ exports.subscribeRenderProfiles = subscribeRenderProfiles;
199
206
  const getRenderProfiles = () => Array.from(globalRenderRegistry.values());
200
207
  exports.getRenderProfiles = getRenderProfiles;
201
208
  const registerComponentProfile = (profile) => {
209
+ if (!isPerformanceModuleEnabled)
210
+ return;
202
211
  globalRenderRegistry.set(profile.name, profile);
203
212
  notifyRenderListeners();
204
213
  };
205
214
  exports.registerComponentProfile = registerComponentProfile;
206
215
  const trackComponentRender = (params) => {
216
+ if (!isPerformanceModuleEnabled)
217
+ return;
207
218
  const existing = globalRenderRegistry.get(params.name);
208
219
  const now = Date.now();
209
220
  const renderTimeMs = params.renderTimeMs ?? 1.5;
@@ -451,7 +462,8 @@ const useComponentProfiler = (componentName, options) => {
451
462
  });
452
463
  };
453
464
  exports.useComponentProfiler = useComponentProfiler;
454
- const usePerformanceTracker = () => {
465
+ const usePerformanceTracker = (enabled = true) => {
466
+ const isTrackerActive = enabled && isPerformanceModuleEnabled;
455
467
  const [isRecording, setIsRecording] = (0, react_1.useState)(true);
456
468
  const [currentFps, setCurrentFps] = (0, react_1.useState)(60);
457
469
  const [minFps, setMinFps] = (0, react_1.useState)(60);
@@ -465,6 +477,8 @@ const usePerformanceTracker = () => {
465
477
  const [renderProfiles, setRenderProfiles] = (0, react_1.useState)(() => (0, exports.getRenderProfiles)());
466
478
  const [events, setEvents] = (0, react_1.useState)(() => (0, exports.getPerformanceEvents)());
467
479
  (0, react_1.useEffect)(() => {
480
+ if (!isTrackerActive)
481
+ return;
468
482
  const unsubRender = (0, exports.subscribeRenderProfiles)(profiles => {
469
483
  setRenderProfiles(profiles);
470
484
  });
@@ -475,13 +489,13 @@ const usePerformanceTracker = () => {
475
489
  unsubRender();
476
490
  unsubEvents();
477
491
  };
478
- }, []);
492
+ }, [isTrackerActive]);
479
493
  const lastFrameTimeRef = (0, react_1.useRef)(Date.now());
480
494
  const rafIdRef = (0, react_1.useRef)(null);
481
495
  const appStartTimestampRef = (0, react_1.useRef)(Date.now());
482
496
  // Live Frame Measurement Loop
483
497
  (0, react_1.useEffect)(() => {
484
- if (!isRecording)
498
+ if (!isTrackerActive || !isRecording)
485
499
  return;
486
500
  let isMounted = true;
487
501
  let frameCount = 0;
@@ -1,5 +1,7 @@
1
1
  import { ReduxHistoryEntry } from '../types';
2
2
  export { ReduxHistoryEntry };
3
+ export declare const setReduxModuleEnabled: (enabled: boolean) => void;
4
+ export declare const getReduxModuleEnabled: () => boolean;
3
5
  export declare const isReduxConnected: () => boolean;
4
6
  export declare const getReduxState: () => any;
5
7
  export declare const setReduxAutoRefresh: (val: boolean) => void;
@@ -13,11 +13,18 @@
13
13
  // dispatch reference at store-creation time) still update the state tree
14
14
  // and per-reducer "last action" consistently.
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.connectReduxStore = exports.inspectorReduxMiddleware = exports.subscribeReduxState = exports.setReduxState = exports.clearActionHistory = exports.getActionHistory = exports.clearLastActionForReducer = exports.getLastActionForReducer = exports.getReduxAutoRefresh = exports.setReduxAutoRefresh = exports.getReduxState = exports.isReduxConnected = void 0;
16
+ exports.connectReduxStore = exports.inspectorReduxMiddleware = exports.subscribeReduxState = exports.setReduxState = exports.clearActionHistory = exports.getActionHistory = exports.clearLastActionForReducer = exports.getLastActionForReducer = exports.getReduxAutoRefresh = exports.setReduxAutoRefresh = exports.getReduxState = exports.isReduxConnected = exports.getReduxModuleEnabled = exports.setReduxModuleEnabled = void 0;
17
17
  const helpers_1 = require("../helpers");
18
18
  let currentReduxState = null;
19
19
  const listeners = new Set();
20
20
  let globalReduxAutoRefresh = true;
21
+ let isReduxModuleEnabled = false;
22
+ const setReduxModuleEnabled = (enabled) => {
23
+ isReduxModuleEnabled = enabled;
24
+ };
25
+ exports.setReduxModuleEnabled = setReduxModuleEnabled;
26
+ const getReduxModuleEnabled = () => isReduxModuleEnabled;
27
+ exports.getReduxModuleEnabled = getReduxModuleEnabled;
21
28
  let lastActionForReducer = {};
22
29
  let actionHistory = [];
23
30
  const MAX_HISTORY = 50;
@@ -176,6 +183,8 @@ function extractSliceName(actionType, affectedSlices) {
176
183
  return undefined;
177
184
  }
178
185
  function recordAction(action, prevState, nextState, rawStack) {
186
+ if (!isReduxModuleEnabled)
187
+ return;
179
188
  const stack = rawStack || new Error().stack || '';
180
189
  const type = actionTypeOf(action);
181
190
  const payload = action && typeof action === 'object' && action.payload !== undefined
@@ -39,12 +39,35 @@
39
39
  "redux": "Redux"
40
40
  },
41
41
  "settings": {
42
- "mainTitle": "Settings",
42
+ "mainTitle": "Settings & Modules",
43
+ "mainSubtitle": "Manage modules and preferences",
43
44
  "requiredBadge": "REQUIRED",
44
45
  "defaultBadge": "DEFAULT",
45
46
  "notConnectedBadge": "NOT CONNECTED",
46
47
  "notDetectedBadge": "NOT DETECTED",
47
48
  "readOnlyBadge": "READ ONLY",
49
+ "coreBadge": "CORE",
50
+ "activeBadge": "ACTIVE",
51
+ "dormantBadge": "DORMANT",
52
+ "protectedBadge": "PROTECTED",
53
+ "modulesAndTools": "Modules & Tools",
54
+ "uiPreferences": "UI Preferences",
55
+ "zeroOverheadTitle": "Zero Background Overhead",
56
+ "zeroOverheadDesc": "Check the modules you wish to activate. Disabled modules consume 0% CPU & memory until saved.",
57
+ "unsavedPending": "● Unsaved selections pending",
58
+ "allSynchronized": "All modules synchronized",
59
+ "modulesActive": "{{active}} of {{total}} Modules Active",
60
+ "saveChanges": "Save Changes",
61
+ "settingsSaved": "Settings Saved",
62
+ "settingsSavedDesc": "Active module configurations have been successfully updated.",
63
+ "configure": "Configure",
64
+ "appearanceTheme": "APPEARANCE & THEME",
65
+ "windowLayout": "WINDOW & LAYOUT",
66
+ "startupDefault": "STARTUP & DEFAULT SCREEN",
67
+ "logFiltersDeduplication": "LOG FILTERS & DEDUPLICATION",
68
+ "resetSettings": "Reset All Settings",
69
+ "resetSettingsDesc": "Wipe customized preferences back to default",
70
+ "reset": "Reset",
48
71
  "reduxNotConnectedTip": "Redux store is not connected. Call connectReduxStore(store) or use inspectorReduxMiddleware to enable.",
49
72
  "analyticsNotConnectedTip": "Analytics is not initialized. Call setupAnalyticsLogger(analytics()) to enable.",
50
73
  "tabVisibility": "Tab Visibility",
@@ -55,7 +78,7 @@
55
78
  "title": "APIs Settings",
56
79
  "total": "Total: {{count}}",
57
80
  "maxRequestLogs": "Max Request Logs",
58
- "maxRequestLogsDescription": "How many network requests to keep in memory",
81
+ "maxRequestLogsDescription": "Buffer size of network requests preserved in memory",
59
82
  "clearNetworkLogs": "Clear Network Logs",
60
83
  "clearNetworkLogsDescription": "{{count}} requests stored",
61
84
  "networkLogsCleared": "Network logs cleared.",
@@ -69,56 +92,91 @@
69
92
  "title": "Logs Settings",
70
93
  "total": "Total: {{count}}",
71
94
  "maxConsoleLogs": "Max Console Logs",
72
- "maxConsoleLogsDescription": "How many console logs to keep in memory",
73
- "logLevels": "Log Levels",
74
- "logLevelsDescription": "Which console levels to capture",
75
- "showInfo": "Show info logs",
76
- "showWarn": "Show warn logs",
77
- "showError": "Show error logs",
95
+ "maxConsoleLogsDescription": "How many console messages to retain",
96
+ "logLevels": "Log Severities",
97
+ "logLevelsDescription": "Select which severities to capture in Logs",
98
+ "showInfo": "Show Info logs",
99
+ "showInfoDesc": "Informational logs & debug prints",
100
+ "showWarn": "Show Warning logs",
101
+ "showWarnDesc": "Warning notices & deprecations",
102
+ "showError": "Show Error logs",
103
+ "showErrorDesc": "Runtime errors & exceptions",
78
104
  "clearConsoleLogs": "Clear Console Logs",
79
105
  "clearConsoleLogsDescription": "{{count}} logs stored",
80
106
  "consoleLogsCleared": "Console logs cleared."
81
107
  },
82
108
  "analytics": {
83
109
  "title": "Analytics Settings",
84
- "total": "Total: {{count}}",
85
- "maxAnalyticsEvents": "Max Analytics Events",
86
- "maxAnalyticsEventsDescription": "How many analytics events to keep in memory",
87
- "clearAnalyticsEvents": "Clear Analytics Events",
88
- "clearAnalyticsEventsDescription": "{{count}} events stored",
110
+ "total": "Events: {{count}}",
111
+ "maxAnalyticsEvents": "Events Captured",
112
+ "maxAnalyticsEventsDescription": "{{count}} analytics events stored in buffer",
113
+ "clearAnalyticsEvents": "Clear Analytics History",
114
+ "clearAnalyticsEventsDescription": "Wipe all captured telemetry events",
89
115
  "analyticsEventsCleared": "Analytics events cleared."
90
116
  },
91
117
  "redux": {
92
118
  "title": "Redux Settings",
93
119
  "reducers": "Reducers: {{count}}",
94
120
  "autoRefresh": "Auto-refresh Store",
95
- "autoRefreshDescription": "Automatically capture Redux store state updates",
121
+ "autoRefreshDescription": "Capture Redux store state tree on every dispatch",
96
122
  "defaultJsonExpandDepth": "Default JSON Expand Depth",
97
123
  "defaultJsonExpandDepthDescription": "Initial depth of Redux state tree to auto-expand",
98
124
  "clearReduxState": "Clear Redux State",
99
- "clearReduxStateDescription": "Reset state snapshot in inspector",
100
- "clearReduxStateEmpty": "No store snapshot stored",
125
+ "clearReduxStateDescription": "Reset current state snapshot in inspector",
126
+ "clearReduxStateEmpty": "No store snapshot recorded",
101
127
  "reduxStateCleared": "Redux state snapshot cleared.",
102
128
  "clearReduxTimeline": "Clear Redux Timeline",
103
129
  "clearReduxTimelineDescription": "Remove all captured action history",
104
130
  "reduxTimelineCleared": "Redux action history cleared."
105
131
  },
132
+ "bundle": {
133
+ "title": "Bundle Settings",
134
+ "sourceBundler": "Metro Source Bundler",
135
+ "sourceBundlerDesc": "Parses live module trees and calculates binary size breakdowns",
136
+ "clearCache": "Clear Bundle Cache",
137
+ "clearCacheDesc": "Force re-fetching and parsing of JS bundle",
138
+ "cacheCleared": "Bundle analysis cache cleared."
139
+ },
140
+ "performance": {
141
+ "title": "Performance Settings",
142
+ "frameMeasurement": "Live Frame Measurement",
143
+ "frameMeasurementDesc": "Samples UI/JS frame rates & detects wasteful re-renders",
144
+ "clearEvents": "Clear Performance Events",
145
+ "clearEventsDesc": "Reset recorded jank and FPS drops history",
146
+ "eventsCleared": "Performance events cleared."
147
+ },
148
+ "crash": {
149
+ "title": "Crash Settings",
150
+ "maxCrashLogs": "Max Crash Logs",
151
+ "maxCrashLogsDesc": "How many crash records to preserve in history",
152
+ "globalGuard": "Global Crash Guard",
153
+ "globalGuardDesc": "Intercepts native, JS, and render errors directly",
154
+ "clearHistory": "Clear Crash History",
155
+ "clearHistoryDesc": "{{count}} crash logs stored",
156
+ "historyCleared": "Crash logs cleared."
157
+ },
106
158
  "general": {
107
- "darkMode": "Dark Mode",
108
- "darkModeDescription": "Switch the inspector to a dark color scheme",
109
- "modalHeight": "Modal Height",
110
- "modalHeightDescription": "Height of the inspector overlay",
111
- "modalAnimation": "Modal Animation",
112
- "modalAnimationDescription": "Animation used when opening the inspector",
159
+ "darkMode": "Dark Mode Theme",
160
+ "darkModeDescription": "Toggle sleek dark aesthetic or light contrast",
161
+ "modalHeight": "Inspector Window Height",
162
+ "modalHeightDescription": "Modal screen coverage percentage",
163
+ "modalAnimation": "Transition Animation",
164
+ "modalAnimationDescription": "Entrance and dismissal presentation style",
113
165
  "duplicateLogs": "Show Duplicate Logs",
114
- "duplicateLogsDescription": "Group consecutive identical console logs",
166
+ "duplicateLogsDescription": "Off: Identical repeated entries collapse into ×N badges",
167
+ "defaultOpeningTab": "Default Opening Tab",
168
+ "defaultOpeningTabDesc": "Initial tab active when launcher button is tapped",
169
+ "activeConsoleLogLevels": "Active Console Log Levels",
170
+ "activeConsoleLogLevelsDesc": "Select which severities to capture in Logs",
115
171
  "resetToDefaults": "Reset to Defaults",
116
172
  "resetToDefaultsDescription": "Restore all inspector settings",
117
173
  "resetConfirmationTitle": "Settings Reset",
118
174
  "resetConfirmationMessage": "All settings have been reset to default values.",
119
175
  "storageStatus": "Persistent Storage",
120
- "storageStatusEnabled": "Settings persist across app restarts",
121
- "storageStatusDisabled": "Using in-memory storage (Android)"
176
+ "storageStatusEnabled": "Settings Storage: Persistent ({{type}})",
177
+ "storageStatusEnabledDesc": "Your preferences and module visibility persist across app reboots.",
178
+ "storageStatusDisabled": "Settings Storage: In-Memory (Temporary)",
179
+ "storageStatusDisabledDesc": "Preferences reset on app kill. Pass custom storage to <NetworkInspector storage={...} /> to persist on Android."
122
180
  }
123
181
  },
124
182
  "network": {
@@ -178,10 +236,20 @@
178
236
  "noMatchingHeaders": "No matching headers",
179
237
  "diffHidden": "{ Diff hidden }",
180
238
  "noDiff": "No differences from previous API.",
239
+ "healthTitle": "Network Health & Telemetry",
240
+ "successRate": "Success Rate",
241
+ "avgLatency": "Avg Latency",
242
+ "p95Latency": "P95 Latency",
243
+ "bandwidth": "Bandwidth",
244
+ "fastest": "Fastest",
245
+ "slowest": "Slowest",
246
+ "timingWaterfall": "Timing Waterfall & Latency",
247
+ "throughput": "Throughput",
248
+ "performanceTier": "Performance Tier",
181
249
  "perf": {
182
- "fast": "Fast",
183
- "moderate": "Moderate",
184
- "slow": "Slow"
250
+ "fast": "Fast (< 200ms)",
251
+ "moderate": "Moderate (200-800ms)",
252
+ "slow": "Slow (> 800ms)"
185
253
  },
186
254
  "jsonViewer": {
187
255
  "pretty": "Pretty",
@@ -60,6 +60,8 @@ const logFilters_1 = require("./customHooks/logFilters");
60
60
  const crashHandler_1 = require("./customHooks/crashHandler");
61
61
  const analyticsLogger_1 = require("./customHooks/analyticsLogger");
62
62
  const reduxLogger_1 = require("./customHooks/reduxLogger");
63
+ const performanceTracker_1 = require("./customHooks/performanceTracker");
64
+ const bundleAnalyzer_1 = require("./customHooks/bundleAnalyzer");
63
65
  const constants_1 = require("./constants");
64
66
  // Stylesheet
65
67
  const styles_1 = require("./styles");
@@ -205,11 +207,11 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
205
207
  const [tabVisibility, setTabVisibility] = (0, react_1.useState)({
206
208
  apis: true,
207
209
  logs: true,
208
- analytics: true,
210
+ analytics: false,
209
211
  redux: false,
210
212
  bundle: false,
211
213
  performance: false,
212
- crash: true,
214
+ crash: false,
213
215
  });
214
216
  const [maxNetworkLogs, setMaxNetworkLogs] = (0, react_1.useState)(100);
215
217
  const [reduxAutoRefresh, setReduxAutoRefreshState] = (0, react_1.useState)(true);
@@ -217,6 +219,16 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
217
219
  // #6 — tab the inspector opens on. Shown with a DEFAULT badge in Settings.
218
220
  const [defaultTab, setDefaultTab] = (0, react_1.useState)('apis');
219
221
  const [showDuplicateLogs, setShowDuplicateLogs] = (0, react_1.useState)(false);
222
+ // Synchronize runtime background listeners with active settings
223
+ (0, react_1.useEffect)(() => {
224
+ (0, networkLogger_1.setNetworkModuleEnabled)(!!tabVisibility.apis);
225
+ (0, consoleLogger_1.setConsoleModuleEnabled)(!!tabVisibility.logs);
226
+ (0, analyticsLogger_1.setAnalyticsModuleEnabled)(!!tabVisibility.analytics);
227
+ (0, reduxLogger_1.setReduxModuleEnabled)(!!tabVisibility.redux);
228
+ (0, performanceTracker_1.setPerformanceModuleEnabled)(!!tabVisibility.performance);
229
+ (0, crashHandler_1.setCrashModuleEnabled)(!!tabVisibility.crash);
230
+ (0, bundleAnalyzer_1.setBundleModuleEnabled)(!!tabVisibility.bundle);
231
+ }, [tabVisibility]);
220
232
  const resetToDefaults = async () => {
221
233
  await (0, settingsStore_1.clearPersistedSettings)();
222
234
  setIsDark(false);
@@ -226,11 +238,11 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
226
238
  setTabVisibility({
227
239
  apis: true,
228
240
  logs: true,
229
- analytics: true,
241
+ analytics: false,
230
242
  redux: false,
231
243
  bundle: false,
232
244
  performance: false,
233
- crash: true,
245
+ crash: false,
234
246
  });
235
247
  setDefaultTab('apis');
236
248
  setMaxCrashLogs(100);
@@ -266,9 +278,6 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
266
278
  ...prev,
267
279
  ...saved.tabVisibility,
268
280
  apis: true, // APIs is always required
269
- crash: saved.tabVisibility.crash !== undefined
270
- ? saved.tabVisibility.crash
271
- : true,
272
281
  }));
273
282
  if (saved.defaultTab)
274
283
  setDefaultTab(saved.defaultTab);
@@ -290,11 +299,11 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
290
299
  ...{
291
300
  apis: true,
292
301
  logs: true,
293
- analytics: true,
302
+ analytics: false,
294
303
  redux: false,
295
304
  bundle: false,
296
305
  performance: false,
297
- crash: true,
306
+ crash: false,
298
307
  },
299
308
  ...(saved.tabVisibility || {}),
300
309
  apis: true,
@@ -659,13 +668,37 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
659
668
  loop.start();
660
669
  return () => loop.stop();
661
670
  }, [unreadPulseAnim]);
662
- // #6 — every time the inspector is opened, land on the chosen default tab.
671
+ const isVisibleRefObj = (0, react_1.useRef)(visible);
672
+ // #6 — every time the inspector is opened, land on chosen default tab & sync latest logs
663
673
  (0, react_1.useEffect)(() => {
674
+ isVisibleRefObj.current = visible;
664
675
  if (visible) {
665
676
  const target = defaultTab === 'apis' || tabVisibility?.[defaultTab]
666
677
  ? defaultTab
667
678
  : 'apis';
668
679
  setActiveTab(target);
680
+ // Instant synchronization of data collected while modal was closed
681
+ if (latestNetworkLogsRef.current.length > 0) {
682
+ const deduped = (0, helpers_1.deduplicateLogs)(latestNetworkLogsRef.current);
683
+ const incoming = new Set(deduped.map(l => l.id));
684
+ prevLogIdsRef.current = incoming;
685
+ setLogs(deduped);
686
+ }
687
+ if (latestConsoleLogsRef.current.length > 0) {
688
+ setConsoleLogs(latestConsoleLogsRef.current);
689
+ }
690
+ if (latestAnalyticsEventsRef.current.length > 0) {
691
+ setAnalyticsEvents(latestAnalyticsEventsRef.current);
692
+ }
693
+ const freshState = (0, reduxLogger_1.getReduxState)();
694
+ if (freshState) {
695
+ setReduxState(typeof freshState === 'object' ? { ...freshState } : freshState);
696
+ setReduxLastActionMap({ ...(0, reduxLogger_1.getLastActionForReducer)() });
697
+ }
698
+ const freshCrashes = (0, crashHandler_1.getCrashRecords)();
699
+ if (freshCrashes.length > 0) {
700
+ setCrashRecords(freshCrashes);
701
+ }
669
702
  }
670
703
  // eslint-disable-next-line react-hooks/exhaustive-deps
671
704
  }, [visible]);
@@ -693,6 +726,7 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
693
726
  (0, consoleLogger_1.setupConsoleLogger)();
694
727
  (0, analyticsLogger_1.autoSetupAnalyticsLogger)();
695
728
  (0, crashHandler_1.setupGlobalCrashHandler)();
729
+ const isVisibleRef = isVisibleRefObj;
696
730
  const unsubscribeCrash = (0, crashHandler_1.subscribeCrashEvents)(crashInfo => {
697
731
  if (crashInfo.message === '__CLEARED__') {
698
732
  setCrashRecords([]);
@@ -700,7 +734,9 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
700
734
  return;
701
735
  }
702
736
  const updated = (0, crashHandler_1.getCrashRecords)();
703
- setCrashRecords(updated);
737
+ if (isVisibleRef.current) {
738
+ setCrashRecords(updated);
739
+ }
704
740
  });
705
741
  // Sync crashes recorded before this subscription ran (e.g. a render crash
706
742
  // during the very first commit, which fires before effects are mounted).
@@ -714,6 +750,8 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
714
750
  latestNetworkLogsRef.current = raw;
715
751
  if (isNetworkPausedRef.current)
716
752
  return;
753
+ if (!isVisibleRef.current)
754
+ return; // ZERO-RENDER INACTIVE MODE
717
755
  clearTimeout(timeoutId);
718
756
  const updateNetworkState = () => {
719
757
  const deduped = (0, helpers_1.deduplicateLogs)(raw);
@@ -753,6 +791,8 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
753
791
  latestAnalyticsEventsRef.current = raw;
754
792
  if (isAnalyticsPausedRef.current)
755
793
  return;
794
+ if (!isVisibleRef.current)
795
+ return; // ZERO-RENDER INACTIVE MODE
756
796
  clearTimeout(analyticsTimeoutId);
757
797
  const updateAnalyticsState = () => {
758
798
  const incoming = new Set(raw.map(e => e.id));
@@ -790,6 +830,8 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
790
830
  latestConsoleLogsRef.current = raw;
791
831
  if (isConsolePausedRef.current)
792
832
  return;
833
+ if (!isVisibleRef.current)
834
+ return; // ZERO-RENDER INACTIVE MODE
793
835
  clearTimeout(consoleTimeoutId);
794
836
  if (isFirstConsoleCall) {
795
837
  isFirstConsoleCall = false;
@@ -802,11 +844,13 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
802
844
  }
803
845
  });
804
846
  const initialReduxState = (0, reduxLogger_1.getReduxState)();
805
- setReduxState(initialReduxState && typeof initialReduxState === 'object' ? { ...initialReduxState } : initialReduxState);
806
- setReduxLastActionMap({ ...(0, reduxLogger_1.getLastActionForReducer)() });
847
+ if (initialReduxState) {
848
+ setReduxState(typeof initialReduxState === 'object' ? { ...initialReduxState } : initialReduxState);
849
+ setReduxLastActionMap({ ...(0, reduxLogger_1.getLastActionForReducer)() });
850
+ }
807
851
  const unsubscribeRedux = (0, reduxLogger_1.subscribeReduxState)(() => {
808
- // New references each time guarantee the Redux tab updates live, even when
809
- // the root state object reference is unchanged or auto-refresh is paused.
852
+ if (!isVisibleRef.current)
853
+ return; // ZERO-RENDER INACTIVE MODE
810
854
  const freshState = (0, reduxLogger_1.getReduxState)();
811
855
  setReduxState(freshState && typeof freshState === 'object' ? { ...freshState } : freshState);
812
856
  setReduxLastActionMap({ ...(0, reduxLogger_1.getLastActionForReducer)() });
@@ -1611,25 +1655,25 @@ Object.defineProperty(exports, "getLastActionForReducer", { enumerable: true, ge
1611
1655
  var gaAnalyticsRegistry_1 = require("./helpers/gaAnalyticsRegistry");
1612
1656
  Object.defineProperty(exports, "getEventCategory", { enumerable: true, get: function () { return gaAnalyticsRegistry_1.getEventCategory; } });
1613
1657
  Object.defineProperty(exports, "registerGAPlugin", { enumerable: true, get: function () { return gaAnalyticsRegistry_1.registerGAPlugin; } });
1614
- var performanceTracker_1 = require("./customHooks/performanceTracker");
1615
- Object.defineProperty(exports, "usePerformanceTracker", { enumerable: true, get: function () { return performanceTracker_1.usePerformanceTracker; } });
1616
- Object.defineProperty(exports, "useComponentProfiler", { enumerable: true, get: function () { return performanceTracker_1.useComponentProfiler; } });
1617
- Object.defineProperty(exports, "useNavigationProfiler", { enumerable: true, get: function () { return performanceTracker_1.useNavigationProfiler; } });
1618
- Object.defineProperty(exports, "trackComponentRender", { enumerable: true, get: function () { return performanceTracker_1.trackComponentRender; } });
1619
- Object.defineProperty(exports, "trackNavigationTransition", { enumerable: true, get: function () { return performanceTracker_1.trackNavigationTransition; } });
1620
- Object.defineProperty(exports, "trackHeavyTask", { enumerable: true, get: function () { return performanceTracker_1.trackHeavyTask; } });
1621
- Object.defineProperty(exports, "measureAsync", { enumerable: true, get: function () { return performanceTracker_1.measureAsync; } });
1622
- Object.defineProperty(exports, "getHermesMemoryStats", { enumerable: true, get: function () { return performanceTracker_1.getHermesMemoryStats; } });
1623
- Object.defineProperty(exports, "registerComponentProfile", { enumerable: true, get: function () { return performanceTracker_1.registerComponentProfile; } });
1624
- Object.defineProperty(exports, "subscribeRenderProfiles", { enumerable: true, get: function () { return performanceTracker_1.subscribeRenderProfiles; } });
1625
- Object.defineProperty(exports, "getRenderProfiles", { enumerable: true, get: function () { return performanceTracker_1.getRenderProfiles; } });
1626
- Object.defineProperty(exports, "logPerformanceEvent", { enumerable: true, get: function () { return performanceTracker_1.logPerformanceEvent; } });
1627
- Object.defineProperty(exports, "clearPerformanceEvents", { enumerable: true, get: function () { return performanceTracker_1.clearPerformanceEvents; } });
1628
- Object.defineProperty(exports, "subscribePerformanceEvents", { enumerable: true, get: function () { return performanceTracker_1.subscribePerformanceEvents; } });
1629
- Object.defineProperty(exports, "getPerformanceEvents", { enumerable: true, get: function () { return performanceTracker_1.getPerformanceEvents; } });
1630
- Object.defineProperty(exports, "getInitialRenderProfiles", { enumerable: true, get: function () { return performanceTracker_1.getInitialRenderProfiles; } });
1631
- Object.defineProperty(exports, "getInitialPerformanceEvents", { enumerable: true, get: function () { return performanceTracker_1.getInitialPerformanceEvents; } });
1632
- Object.defineProperty(exports, "generateFixSnippet", { enumerable: true, get: function () { return performanceTracker_1.generateFixSnippet; } });
1658
+ var performanceTracker_2 = require("./customHooks/performanceTracker");
1659
+ Object.defineProperty(exports, "usePerformanceTracker", { enumerable: true, get: function () { return performanceTracker_2.usePerformanceTracker; } });
1660
+ Object.defineProperty(exports, "useComponentProfiler", { enumerable: true, get: function () { return performanceTracker_2.useComponentProfiler; } });
1661
+ Object.defineProperty(exports, "useNavigationProfiler", { enumerable: true, get: function () { return performanceTracker_2.useNavigationProfiler; } });
1662
+ Object.defineProperty(exports, "trackComponentRender", { enumerable: true, get: function () { return performanceTracker_2.trackComponentRender; } });
1663
+ Object.defineProperty(exports, "trackNavigationTransition", { enumerable: true, get: function () { return performanceTracker_2.trackNavigationTransition; } });
1664
+ Object.defineProperty(exports, "trackHeavyTask", { enumerable: true, get: function () { return performanceTracker_2.trackHeavyTask; } });
1665
+ Object.defineProperty(exports, "measureAsync", { enumerable: true, get: function () { return performanceTracker_2.measureAsync; } });
1666
+ Object.defineProperty(exports, "getHermesMemoryStats", { enumerable: true, get: function () { return performanceTracker_2.getHermesMemoryStats; } });
1667
+ Object.defineProperty(exports, "registerComponentProfile", { enumerable: true, get: function () { return performanceTracker_2.registerComponentProfile; } });
1668
+ Object.defineProperty(exports, "subscribeRenderProfiles", { enumerable: true, get: function () { return performanceTracker_2.subscribeRenderProfiles; } });
1669
+ Object.defineProperty(exports, "getRenderProfiles", { enumerable: true, get: function () { return performanceTracker_2.getRenderProfiles; } });
1670
+ Object.defineProperty(exports, "logPerformanceEvent", { enumerable: true, get: function () { return performanceTracker_2.logPerformanceEvent; } });
1671
+ Object.defineProperty(exports, "clearPerformanceEvents", { enumerable: true, get: function () { return performanceTracker_2.clearPerformanceEvents; } });
1672
+ Object.defineProperty(exports, "subscribePerformanceEvents", { enumerable: true, get: function () { return performanceTracker_2.subscribePerformanceEvents; } });
1673
+ Object.defineProperty(exports, "getPerformanceEvents", { enumerable: true, get: function () { return performanceTracker_2.getPerformanceEvents; } });
1674
+ Object.defineProperty(exports, "getInitialRenderProfiles", { enumerable: true, get: function () { return performanceTracker_2.getInitialRenderProfiles; } });
1675
+ Object.defineProperty(exports, "getInitialPerformanceEvents", { enumerable: true, get: function () { return performanceTracker_2.getInitialPerformanceEvents; } });
1676
+ Object.defineProperty(exports, "generateFixSnippet", { enumerable: true, get: function () { return performanceTracker_2.generateFixSnippet; } });
1633
1677
  var decorators_1 = require("./decorators");
1634
1678
  Object.defineProperty(exports, "InspectLog", { enumerable: true, get: function () { return decorators_1.InspectLog; } });
1635
1679
  Object.defineProperty(exports, "InspectTrackTime", { enumerable: true, get: function () { return decorators_1.InspectTrackTime; } });
@@ -154,6 +154,20 @@ declare const LightColors: {
154
154
  greyBorder: string;
155
155
  paperBg: string;
156
156
  contentBg: string;
157
+ toastBg: string;
158
+ toastBorder: string;
159
+ mintGreenBg: string;
160
+ mintGreenBorder: string;
161
+ mintGreenText: string;
162
+ amberWarmBg: string;
163
+ amberWarmBorder: string;
164
+ amberWarmText: string;
165
+ violetSoftBg: string;
166
+ violetSoftBorder: string;
167
+ violetSoftText: string;
168
+ skySoftBg: string;
169
+ skySoftBorder: string;
170
+ skySoftText: string;
157
171
  domainColors: string[];
158
172
  };
159
173
  export declare const getThemeColors: (isDark: boolean) => {
@@ -312,6 +326,20 @@ export declare const getThemeColors: (isDark: boolean) => {
312
326
  greyBorder: string;
313
327
  paperBg: string;
314
328
  contentBg: string;
329
+ toastBg: string;
330
+ toastBorder: string;
331
+ mintGreenBg: string;
332
+ mintGreenBorder: string;
333
+ mintGreenText: string;
334
+ amberWarmBg: string;
335
+ amberWarmBorder: string;
336
+ amberWarmText: string;
337
+ violetSoftBg: string;
338
+ violetSoftBorder: string;
339
+ violetSoftText: string;
340
+ skySoftBg: string;
341
+ skySoftBorder: string;
342
+ skySoftText: string;
315
343
  domainColors: string[];
316
344
  };
317
345
  export declare const AppColors: typeof LightColors;