react-native-inapp-inspector 2.2.0 → 2.2.2
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/src/main/java/com/inappinspector/NetworkInspectorModule.kt +28 -6
- package/dist/commonjs/analytics.d.ts +7 -0
- package/dist/commonjs/analytics.js +28 -0
- package/dist/commonjs/bundle.d.ts +6 -0
- package/dist/commonjs/bundle.js +20 -0
- package/dist/commonjs/console.d.ts +7 -0
- package/dist/commonjs/console.js +20 -0
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -1
- package/dist/commonjs/crash.d.ts +7 -0
- package/dist/commonjs/crash.js +27 -0
- package/dist/commonjs/customHooks/analyticsLogger.d.ts +3 -0
- package/dist/commonjs/customHooks/analyticsLogger.js +23 -2
- package/dist/commonjs/customHooks/consoleLogger.d.ts +3 -0
- package/dist/commonjs/customHooks/consoleLogger.js +24 -4
- package/dist/commonjs/customHooks/crashHandler.d.ts +2 -0
- package/dist/commonjs/customHooks/crashHandler.js +15 -1
- package/dist/commonjs/customHooks/networkLogger.d.ts +3 -0
- package/dist/commonjs/customHooks/networkLogger.js +23 -2
- package/dist/commonjs/customHooks/performanceTracker.d.ts +3 -0
- package/dist/commonjs/customHooks/performanceTracker.js +34 -3
- package/dist/commonjs/customHooks/reduxLogger.d.ts +3 -0
- package/dist/commonjs/customHooks/reduxLogger.js +24 -4
- package/dist/commonjs/helpers/index.d.ts +1 -0
- package/dist/commonjs/helpers/index.js +1 -0
- package/dist/commonjs/helpers/memoryManager.d.ts +29 -0
- package/dist/commonjs/helpers/memoryManager.js +112 -0
- package/dist/commonjs/index.d.ts +7 -1
- package/dist/commonjs/index.js +36 -2
- package/dist/commonjs/network.d.ts +6 -0
- package/dist/commonjs/network.js +17 -0
- package/dist/commonjs/performance.d.ts +6 -0
- package/dist/commonjs/performance.js +33 -0
- package/dist/commonjs/redux.d.ts +5 -0
- package/dist/commonjs/redux.js +24 -0
- package/dist/esm/analytics.d.ts +7 -0
- package/dist/esm/analytics.js +6 -0
- package/dist/esm/bundle.d.ts +6 -0
- package/dist/esm/bundle.js +6 -0
- package/dist/esm/console.d.ts +7 -0
- package/dist/esm/console.js +6 -0
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -1
- package/dist/esm/crash.d.ts +7 -0
- package/dist/esm/crash.js +6 -0
- package/dist/esm/customHooks/analyticsLogger.d.ts +3 -0
- package/dist/esm/customHooks/analyticsLogger.js +19 -1
- package/dist/esm/customHooks/consoleLogger.d.ts +3 -0
- package/dist/esm/customHooks/consoleLogger.js +20 -3
- package/dist/esm/customHooks/crashHandler.d.ts +2 -0
- package/dist/esm/customHooks/crashHandler.js +12 -0
- package/dist/esm/customHooks/networkLogger.d.ts +3 -0
- package/dist/esm/customHooks/networkLogger.js +19 -1
- package/dist/esm/customHooks/performanceTracker.d.ts +3 -0
- package/dist/esm/customHooks/performanceTracker.js +30 -2
- package/dist/esm/customHooks/reduxLogger.d.ts +3 -0
- package/dist/esm/customHooks/reduxLogger.js +20 -3
- package/dist/esm/helpers/index.d.ts +1 -0
- package/dist/esm/helpers/index.js +1 -0
- package/dist/esm/helpers/memoryManager.d.ts +29 -0
- package/dist/esm/helpers/memoryManager.js +104 -0
- package/dist/esm/index.d.ts +7 -1
- package/dist/esm/index.js +17 -3
- package/dist/esm/network.d.ts +6 -0
- package/dist/esm/network.js +5 -0
- package/dist/esm/performance.d.ts +6 -0
- package/dist/esm/performance.js +6 -0
- package/dist/esm/redux.d.ts +5 -0
- package/dist/esm/redux.js +5 -0
- package/package.json +53 -2
|
@@ -687,6 +687,34 @@ export const usePerformanceTracker = (enabled = true) => {
|
|
|
687
687
|
};
|
|
688
688
|
const globalPerformanceEvents = [...INITIAL_EVENTS];
|
|
689
689
|
const performanceListeners = new Set();
|
|
690
|
+
let maxPerformanceEventsLimit = 100;
|
|
691
|
+
export const setMaxPerformanceEventsLimit = (limit) => {
|
|
692
|
+
maxPerformanceEventsLimit = Math.max(10, limit);
|
|
693
|
+
if (globalPerformanceEvents.length > maxPerformanceEventsLimit) {
|
|
694
|
+
globalPerformanceEvents.length = maxPerformanceEventsLimit;
|
|
695
|
+
performanceListeners.forEach(listener => {
|
|
696
|
+
try {
|
|
697
|
+
listener([...globalPerformanceEvents]);
|
|
698
|
+
}
|
|
699
|
+
catch { }
|
|
700
|
+
});
|
|
701
|
+
}
|
|
702
|
+
};
|
|
703
|
+
export const getMaxPerformanceEventsLimit = () => maxPerformanceEventsLimit;
|
|
704
|
+
export const prunePerformanceEvents = (targetCount) => {
|
|
705
|
+
const countToKeep = targetCount !== undefined ? Math.max(0, targetCount) : Math.floor(globalPerformanceEvents.length / 2);
|
|
706
|
+
const pruned = globalPerformanceEvents.length - countToKeep;
|
|
707
|
+
if (pruned > 0) {
|
|
708
|
+
globalPerformanceEvents.length = countToKeep;
|
|
709
|
+
performanceListeners.forEach(listener => {
|
|
710
|
+
try {
|
|
711
|
+
listener([...globalPerformanceEvents]);
|
|
712
|
+
}
|
|
713
|
+
catch { }
|
|
714
|
+
});
|
|
715
|
+
}
|
|
716
|
+
return Math.max(0, pruned);
|
|
717
|
+
};
|
|
690
718
|
export const logPerformanceEvent = (event) => {
|
|
691
719
|
const fullEvent = {
|
|
692
720
|
id: event.id ||
|
|
@@ -696,8 +724,8 @@ export const logPerformanceEvent = (event) => {
|
|
|
696
724
|
...event,
|
|
697
725
|
};
|
|
698
726
|
globalPerformanceEvents.unshift(fullEvent);
|
|
699
|
-
if (globalPerformanceEvents.length >
|
|
700
|
-
globalPerformanceEvents.
|
|
727
|
+
if (globalPerformanceEvents.length > maxPerformanceEventsLimit) {
|
|
728
|
+
globalPerformanceEvents.length = maxPerformanceEventsLimit;
|
|
701
729
|
}
|
|
702
730
|
performanceListeners.forEach(listener => {
|
|
703
731
|
try {
|
|
@@ -2,6 +2,9 @@ import { ReduxHistoryEntry } from '../types';
|
|
|
2
2
|
export { ReduxHistoryEntry };
|
|
3
3
|
export declare const setReduxModuleEnabled: (enabled: boolean) => void;
|
|
4
4
|
export declare const getReduxModuleEnabled: () => boolean;
|
|
5
|
+
export declare const setMaxReduxHistoryLimit: (limit: number) => void;
|
|
6
|
+
export declare const getMaxReduxHistoryLimit: () => number;
|
|
7
|
+
export declare const pruneReduxHistory: (targetCount?: number) => number;
|
|
5
8
|
export declare const isReduxConnected: () => boolean;
|
|
6
9
|
export declare const getReduxState: () => any;
|
|
7
10
|
export declare const setReduxAutoRefresh: (val: boolean) => void;
|
|
@@ -22,8 +22,25 @@ export const setReduxModuleEnabled = (enabled) => {
|
|
|
22
22
|
export const getReduxModuleEnabled = () => isReduxModuleEnabled;
|
|
23
23
|
let lastActionForReducer = {};
|
|
24
24
|
let actionHistory = [];
|
|
25
|
-
|
|
25
|
+
let maxReduxHistoryLimit = 50;
|
|
26
26
|
let historyIdSeq = 0;
|
|
27
|
+
export const setMaxReduxHistoryLimit = (limit) => {
|
|
28
|
+
maxReduxHistoryLimit = Math.max(10, limit);
|
|
29
|
+
if (actionHistory.length > maxReduxHistoryLimit) {
|
|
30
|
+
actionHistory = actionHistory.slice(0, maxReduxHistoryLimit);
|
|
31
|
+
notify();
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
export const getMaxReduxHistoryLimit = () => maxReduxHistoryLimit;
|
|
35
|
+
export const pruneReduxHistory = (targetCount) => {
|
|
36
|
+
const countToKeep = targetCount !== undefined ? Math.max(0, targetCount) : Math.floor(actionHistory.length / 2);
|
|
37
|
+
const pruned = actionHistory.length - countToKeep;
|
|
38
|
+
if (pruned > 0) {
|
|
39
|
+
actionHistory = actionHistory.slice(0, countToKeep);
|
|
40
|
+
notify();
|
|
41
|
+
}
|
|
42
|
+
return Math.max(0, pruned);
|
|
43
|
+
};
|
|
27
44
|
// Guards against double-instrumentation (e.g. connectReduxStore called twice,
|
|
28
45
|
// or middleware + connect used together) which previously produced duplicate
|
|
29
46
|
// timeline entries and inconsistent counts.
|
|
@@ -219,8 +236,8 @@ function recordAction(action, prevState, nextState, rawStack) {
|
|
|
219
236
|
originType: origin.originType,
|
|
220
237
|
sliceName,
|
|
221
238
|
});
|
|
222
|
-
if (actionHistory.length >
|
|
223
|
-
actionHistory.length =
|
|
239
|
+
if (actionHistory.length > maxReduxHistoryLimit) {
|
|
240
|
+
actionHistory.length = maxReduxHistoryLimit;
|
|
224
241
|
}
|
|
225
242
|
if (globalReduxAutoRefresh) {
|
|
226
243
|
currentReduxState = nextState;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { NetworkLog, RouteInfo, DiffResult, JsonContent, StackFrameType } from '../types';
|
|
2
2
|
export * from './searchQueryParser';
|
|
3
3
|
export * from './telemetry';
|
|
4
|
+
export * from './memoryManager';
|
|
4
5
|
export declare const getDomainColor: (domain: string) => string;
|
|
5
6
|
export declare const formatDateTime: (timestamp: number) => string;
|
|
6
7
|
export declare const formatTimestamp: (timestamp: number) => string;
|
|
@@ -7,6 +7,7 @@ import { AppColors } from '../styles/AppColors';
|
|
|
7
7
|
import { DOMAIN_COLORS, DURATION_FAST_MS, DURATION_SLOW_MS } from '../constants';
|
|
8
8
|
export * from './searchQueryParser';
|
|
9
9
|
export * from './telemetry';
|
|
10
|
+
export * from './memoryManager';
|
|
10
11
|
export const getDomainColor = (domain) => {
|
|
11
12
|
if (!domain)
|
|
12
13
|
return DOMAIN_COLORS[0];
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface MemoryPruneSummary {
|
|
2
|
+
timestamp: number;
|
|
3
|
+
prunedNetwork: number;
|
|
4
|
+
prunedConsole: number;
|
|
5
|
+
prunedRedux: number;
|
|
6
|
+
prunedAnalytics: number;
|
|
7
|
+
prunedCrashes: number;
|
|
8
|
+
prunedPerformance: number;
|
|
9
|
+
totalPruned: number;
|
|
10
|
+
triggeredBy: 'memory-warning' | 'manual' | 'ram-threshold';
|
|
11
|
+
}
|
|
12
|
+
type MemoryWarningListener = (summary: MemoryPruneSummary) => void;
|
|
13
|
+
/**
|
|
14
|
+
* Prunes all in-memory log stores to prevent OOM / memory pressure.
|
|
15
|
+
* Keeps targetRetentionPct (default: 50%) of existing logs.
|
|
16
|
+
*/
|
|
17
|
+
export declare const pruneAllLogs: (triggeredBy?: MemoryPruneSummary["triggeredBy"], targetRetentionPct?: number) => MemoryPruneSummary;
|
|
18
|
+
/**
|
|
19
|
+
* Starts listening to OS memory pressure warnings via AppState 'memoryWarning'.
|
|
20
|
+
* Automatically prunes logs and notifies subscribers when memory is constrained.
|
|
21
|
+
*/
|
|
22
|
+
export declare const setupMemoryWarningHandler: () => (() => void);
|
|
23
|
+
/**
|
|
24
|
+
* Subscribes to memory prune events.
|
|
25
|
+
*/
|
|
26
|
+
export declare const subscribeMemoryWarning: (listener: MemoryWarningListener) => (() => void);
|
|
27
|
+
export declare const getLastPruneTimestamp: () => number;
|
|
28
|
+
export declare const isMemoryHandlerActive: () => boolean;
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { AppState } from 'react-native';
|
|
2
|
+
import { pruneNetworkLogs } from '../customHooks/networkLogger';
|
|
3
|
+
import { pruneConsoleLogs } from '../customHooks/consoleLogger';
|
|
4
|
+
import { pruneReduxHistory } from '../customHooks/reduxLogger';
|
|
5
|
+
import { pruneAnalyticsLogs } from '../customHooks/analyticsLogger';
|
|
6
|
+
import { pruneCrashRecords, addCrashBreadcrumb } from '../customHooks/crashHandler';
|
|
7
|
+
import { prunePerformanceEvents } from '../customHooks/performanceTracker';
|
|
8
|
+
import { showToast } from './toast';
|
|
9
|
+
const memoryListeners = new Set();
|
|
10
|
+
let appStateSubscription = null;
|
|
11
|
+
let isMemoryWarningHandlerActive = false;
|
|
12
|
+
let lastPruneTimestamp = 0;
|
|
13
|
+
/**
|
|
14
|
+
* Prunes all in-memory log stores to prevent OOM / memory pressure.
|
|
15
|
+
* Keeps targetRetentionPct (default: 50%) of existing logs.
|
|
16
|
+
*/
|
|
17
|
+
export const pruneAllLogs = (triggeredBy = 'manual', targetRetentionPct = 0.5) => {
|
|
18
|
+
const targetPct = Math.max(0.1, Math.min(1.0, targetRetentionPct));
|
|
19
|
+
const prunedNetwork = pruneNetworkLogs(undefined);
|
|
20
|
+
const prunedConsole = pruneConsoleLogs(undefined);
|
|
21
|
+
const prunedRedux = pruneReduxHistory(undefined);
|
|
22
|
+
const prunedAnalytics = pruneAnalyticsLogs(undefined);
|
|
23
|
+
const prunedCrashes = pruneCrashRecords(undefined);
|
|
24
|
+
const prunedPerformance = prunePerformanceEvents(undefined);
|
|
25
|
+
const totalPruned = prunedNetwork +
|
|
26
|
+
prunedConsole +
|
|
27
|
+
prunedRedux +
|
|
28
|
+
prunedAnalytics +
|
|
29
|
+
prunedCrashes +
|
|
30
|
+
prunedPerformance;
|
|
31
|
+
lastPruneTimestamp = Date.now();
|
|
32
|
+
// Trigger Hermes/V8 Garbage Collection if exposed
|
|
33
|
+
if (typeof globalThis.gc === 'function') {
|
|
34
|
+
try {
|
|
35
|
+
globalThis.gc();
|
|
36
|
+
}
|
|
37
|
+
catch { }
|
|
38
|
+
}
|
|
39
|
+
const summary = {
|
|
40
|
+
timestamp: lastPruneTimestamp,
|
|
41
|
+
prunedNetwork,
|
|
42
|
+
prunedConsole,
|
|
43
|
+
prunedRedux,
|
|
44
|
+
prunedAnalytics,
|
|
45
|
+
prunedCrashes,
|
|
46
|
+
prunedPerformance,
|
|
47
|
+
totalPruned,
|
|
48
|
+
triggeredBy,
|
|
49
|
+
};
|
|
50
|
+
try {
|
|
51
|
+
addCrashBreadcrumb('system', `[MemoryManager] Low memory auto-prune executed (${triggeredBy}). Freed ${totalPruned} log records.`, summary);
|
|
52
|
+
}
|
|
53
|
+
catch { }
|
|
54
|
+
memoryListeners.forEach(listener => {
|
|
55
|
+
try {
|
|
56
|
+
listener(summary);
|
|
57
|
+
}
|
|
58
|
+
catch { }
|
|
59
|
+
});
|
|
60
|
+
return summary;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Starts listening to OS memory pressure warnings via AppState 'memoryWarning'.
|
|
64
|
+
* Automatically prunes logs and notifies subscribers when memory is constrained.
|
|
65
|
+
*/
|
|
66
|
+
export const setupMemoryWarningHandler = () => {
|
|
67
|
+
if (isMemoryWarningHandlerActive) {
|
|
68
|
+
return () => { };
|
|
69
|
+
}
|
|
70
|
+
isMemoryWarningHandlerActive = true;
|
|
71
|
+
try {
|
|
72
|
+
appStateSubscription = AppState.addEventListener('memoryWarning', (state) => {
|
|
73
|
+
const summary = pruneAllLogs('memory-warning', 0.5);
|
|
74
|
+
try {
|
|
75
|
+
showToast(`Memory Warning: Auto-pruned ${summary.totalPruned} inspector logs`);
|
|
76
|
+
}
|
|
77
|
+
catch { }
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
catch (e) {
|
|
81
|
+
// AppState memoryWarning might not be supported on all mock/test platforms
|
|
82
|
+
}
|
|
83
|
+
return () => {
|
|
84
|
+
if (appStateSubscription) {
|
|
85
|
+
try {
|
|
86
|
+
appStateSubscription.remove();
|
|
87
|
+
}
|
|
88
|
+
catch { }
|
|
89
|
+
appStateSubscription = null;
|
|
90
|
+
}
|
|
91
|
+
isMemoryWarningHandlerActive = false;
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Subscribes to memory prune events.
|
|
96
|
+
*/
|
|
97
|
+
export const subscribeMemoryWarning = (listener) => {
|
|
98
|
+
memoryListeners.add(listener);
|
|
99
|
+
return () => {
|
|
100
|
+
memoryListeners.delete(listener);
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
export const getLastPruneTimestamp = () => lastPruneTimestamp;
|
|
104
|
+
export const isMemoryHandlerActive = () => isMemoryWarningHandlerActive;
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -13,6 +13,12 @@ export { getEventCategory, registerGAPlugin, type GAPlugin, } from './helpers/ga
|
|
|
13
13
|
export { usePerformanceTracker, useComponentProfiler, useNavigationProfiler, trackComponentRender, trackNavigationTransition, trackHeavyTask, measureAsync, getHermesMemoryStats, registerComponentProfile, subscribeRenderProfiles, getRenderProfiles, logPerformanceEvent, clearPerformanceEvents, subscribePerformanceEvents, getPerformanceEvents, getInitialRenderProfiles, getInitialPerformanceEvents, generateFixSnippet, } from './customHooks/performanceTracker';
|
|
14
14
|
export { InspectLog, InspectTrackTime, InspectCatch, type InspectLogOptions, } from './decorators';
|
|
15
15
|
export { getNativeDeviceMetrics, enableNativeCrashProtection, subscribeNativeCrashes, showNativeFloatingButton, hideNativeFloatingButton, setNativeFloatingButtonBadge, subscribeNativeFloatingButtonPress, subscribeNativeDeviceShake, startNativeFpsMonitoring, stopNativeFpsMonitoring, getNativeFpsMetrics, getNativeStorageItem, setNativeStorageItem, isNativeModuleAvailable, type NativeDeviceMetrics, type NativeCrashEvent, type FloatingButtonOptions, type NativeFpsMetrics, } from './native/NativeInspector';
|
|
16
|
-
export { sendSessionTelemetryPing, trackTelemetryEvent, trackInspectorOpen, trackTabSwitch, trackLogExport, GA4_MEASUREMENT_ID, GA4_API_SECRET, } from './helpers';
|
|
16
|
+
export { sendSessionTelemetryPing, trackTelemetryEvent, trackInspectorOpen, trackTabSwitch, trackLogExport, GA4_MEASUREMENT_ID, GA4_API_SECRET, setupMemoryWarningHandler, pruneAllLogs, subscribeMemoryWarning, type MemoryPruneSummary, } from './helpers';
|
|
17
|
+
export { setMaxNetworkLogsLimit, getMaxNetworkLogsLimit, pruneNetworkLogs, } from './customHooks/networkLogger';
|
|
18
|
+
export { setMaxConsoleLogsLimit, getMaxConsoleLogsLimit, pruneConsoleLogs, } from './customHooks/consoleLogger';
|
|
19
|
+
export { setMaxReduxHistoryLimit, getMaxReduxHistoryLimit, pruneReduxHistory, } from './customHooks/reduxLogger';
|
|
20
|
+
export { setMaxAnalyticsLogsLimit, getMaxAnalyticsLogsLimit, pruneAnalyticsLogs, } from './customHooks/analyticsLogger';
|
|
21
|
+
export { getMaxCrashLogsLimit, pruneCrashRecords, } from './customHooks/crashHandler';
|
|
22
|
+
export { setMaxPerformanceEventsLimit, getMaxPerformanceEventsLimit, prunePerformanceEvents, } from './customHooks/performanceTracker';
|
|
17
23
|
export { BrandSquareIcon, BrandCircleIcon, } from './components/NetworkIcons';
|
|
18
24
|
export { ActiveTab, Method, StatusFilter, SortOrder, LocalFilter, ModalAnimationType, SettingsPage, SettingsSubTab, LogFilter, ConsoleLogType, AnalyticsEventSource, GAEventCategory, StackFrameType, DiffResultType, BundleSubTab, PerformanceSubTab, CrashType, CrashExportFormat, CrashDetailSubTab, CrashFilterType, BreadcrumbType, } from './types';
|
package/dist/esm/index.js
CHANGED
|
@@ -8,12 +8,12 @@ import ErrorBoundary from './components/ErrorBoundary';
|
|
|
8
8
|
import MainScreen from './components/Inspector/MainScreen';
|
|
9
9
|
import { InspectorContext, animateNextLayout, } from './components/Inspector/InspectorContext';
|
|
10
10
|
// Helpers
|
|
11
|
-
import { formatDisplayUrl, getNavigationInfo, deduplicateLogs, getDomainColor, getEventCategory, matchNetworkLogQuery, sendSessionTelemetryPing, trackInspectorOpen, } from './helpers';
|
|
11
|
+
import { formatDisplayUrl, getNavigationInfo, deduplicateLogs, getDomainColor, getEventCategory, matchNetworkLogQuery, sendSessionTelemetryPing, trackInspectorOpen, setupMemoryWarningHandler, } from './helpers';
|
|
12
12
|
// #5 — settings persistence
|
|
13
13
|
import { loadSettings, saveSettings, setCustomStorage, clearPersistedSettings, calculateRamBasedLimits, } from './helpers/settingsStore';
|
|
14
14
|
import { getNativeSystemMetrics, pushNativeLogRecord, fetchNativeCachedPage, } from './native/NativeInspector';
|
|
15
15
|
// Network
|
|
16
|
-
import { setupNetworkLogger, clearNetworkLogs, subscribeNetworkLogs, setNetworkModuleEnabled, } from './customHooks/networkLogger';
|
|
16
|
+
import { setupNetworkLogger, clearNetworkLogs, subscribeNetworkLogs, setNetworkModuleEnabled, setMaxNetworkLogsLimit, } from './customHooks/networkLogger';
|
|
17
17
|
// Console
|
|
18
18
|
import { setupConsoleLogger, clearConsoleLogs, subscribeConsoleLogs, setConsoleModuleEnabled, } from './customHooks/consoleLogger';
|
|
19
19
|
import { IGNORED_LOG_PREFIXES } from './customHooks/logFilters';
|
|
@@ -826,6 +826,7 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
|
|
|
826
826
|
setupConsoleLogger();
|
|
827
827
|
autoSetupAnalyticsLogger();
|
|
828
828
|
setupGlobalCrashHandler();
|
|
829
|
+
const cleanupMemoryWarning = setupMemoryWarningHandler();
|
|
829
830
|
const isVisibleRef = isVisibleRefObj;
|
|
830
831
|
const unsubscribeCrash = subscribeCrashEvents(crashInfo => {
|
|
831
832
|
if (crashInfo.message === '__CLEARED__') {
|
|
@@ -977,8 +978,15 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
|
|
|
977
978
|
clearTimeout(consoleTimeoutId);
|
|
978
979
|
unsubscribeRedux();
|
|
979
980
|
unsubscribeCrash();
|
|
981
|
+
cleanupMemoryWarning();
|
|
980
982
|
};
|
|
981
983
|
}, []);
|
|
984
|
+
useEffect(() => {
|
|
985
|
+
setMaxNetworkLogsLimit(maxNetworkLogs);
|
|
986
|
+
}, [maxNetworkLogs]);
|
|
987
|
+
useEffect(() => {
|
|
988
|
+
setMaxCrashLogsLimit(maxCrashLogs);
|
|
989
|
+
}, [maxCrashLogs]);
|
|
982
990
|
useEffect(() => {
|
|
983
991
|
if (!isNetworkPaused && latestNetworkLogsRef.current.length > 0) {
|
|
984
992
|
const deduped = deduplicateLogs(latestNetworkLogsRef.current);
|
|
@@ -1812,6 +1820,12 @@ export { getEventCategory, registerGAPlugin, } from './helpers/gaAnalyticsRegist
|
|
|
1812
1820
|
export { usePerformanceTracker, useComponentProfiler, useNavigationProfiler, trackComponentRender, trackNavigationTransition, trackHeavyTask, measureAsync, getHermesMemoryStats, registerComponentProfile, subscribeRenderProfiles, getRenderProfiles, logPerformanceEvent, clearPerformanceEvents, subscribePerformanceEvents, getPerformanceEvents, getInitialRenderProfiles, getInitialPerformanceEvents, generateFixSnippet, } from './customHooks/performanceTracker';
|
|
1813
1821
|
export { InspectLog, InspectTrackTime, InspectCatch, } from './decorators';
|
|
1814
1822
|
export { getNativeDeviceMetrics, enableNativeCrashProtection, subscribeNativeCrashes, showNativeFloatingButton, hideNativeFloatingButton, setNativeFloatingButtonBadge, subscribeNativeFloatingButtonPress, subscribeNativeDeviceShake, startNativeFpsMonitoring, stopNativeFpsMonitoring, getNativeFpsMetrics, getNativeStorageItem, setNativeStorageItem, isNativeModuleAvailable, } from './native/NativeInspector';
|
|
1815
|
-
export { sendSessionTelemetryPing, trackTelemetryEvent, trackInspectorOpen, trackTabSwitch, trackLogExport, GA4_MEASUREMENT_ID, GA4_API_SECRET, } from './helpers';
|
|
1823
|
+
export { sendSessionTelemetryPing, trackTelemetryEvent, trackInspectorOpen, trackTabSwitch, trackLogExport, GA4_MEASUREMENT_ID, GA4_API_SECRET, setupMemoryWarningHandler, pruneAllLogs, subscribeMemoryWarning, } from './helpers';
|
|
1824
|
+
export { setMaxNetworkLogsLimit, getMaxNetworkLogsLimit, pruneNetworkLogs, } from './customHooks/networkLogger';
|
|
1825
|
+
export { setMaxConsoleLogsLimit, getMaxConsoleLogsLimit, pruneConsoleLogs, } from './customHooks/consoleLogger';
|
|
1826
|
+
export { setMaxReduxHistoryLimit, getMaxReduxHistoryLimit, pruneReduxHistory, } from './customHooks/reduxLogger';
|
|
1827
|
+
export { setMaxAnalyticsLogsLimit, getMaxAnalyticsLogsLimit, pruneAnalyticsLogs, } from './customHooks/analyticsLogger';
|
|
1828
|
+
export { getMaxCrashLogsLimit, pruneCrashRecords, } from './customHooks/crashHandler';
|
|
1829
|
+
export { setMaxPerformanceEventsLimit, getMaxPerformanceEventsLimit, prunePerformanceEvents, } from './customHooks/performanceTracker';
|
|
1816
1830
|
export { BrandSquareIcon, BrandCircleIcon, } from './components/NetworkIcons';
|
|
1817
1831
|
export { ActiveTab, Method, StatusFilter, SortOrder, LocalFilter, ModalAnimationType, SettingsPage, SettingsSubTab, LogFilter, ConsoleLogType, AnalyticsEventSource, GAEventCategory, StackFrameType, DiffResultType, BundleSubTab, PerformanceSubTab, CrashType, CrashExportFormat, CrashDetailSubTab, CrashFilterType, BreadcrumbType, } from './types';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sub-module entry point: react-native-inapp-inspector/network
|
|
3
|
+
* Clean tree-shaking & isolated network logger without UI or React Context dependencies.
|
|
4
|
+
*/
|
|
5
|
+
export { setupNetworkLogger, clearNetworkLogs, subscribeNetworkLogs, getNetworkLogs, setNetworkModuleEnabled, getNetworkModuleEnabled, setMaxNetworkLogsLimit, getMaxNetworkLogsLimit, pruneNetworkLogs, } from './customHooks/networkLogger';
|
|
6
|
+
export type { NetworkLog, Method, StatusFilter, SortOrder, } from './types';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sub-module entry point: react-native-inapp-inspector/network
|
|
3
|
+
* Clean tree-shaking & isolated network logger without UI or React Context dependencies.
|
|
4
|
+
*/
|
|
5
|
+
export { setupNetworkLogger, clearNetworkLogs, subscribeNetworkLogs, getNetworkLogs, setNetworkModuleEnabled, getNetworkModuleEnabled, setMaxNetworkLogsLimit, getMaxNetworkLogsLimit, pruneNetworkLogs, } from './customHooks/networkLogger';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sub-module entry point: react-native-inapp-inspector/performance
|
|
3
|
+
* Clean tree-shaking & isolated performance tracker and profiler.
|
|
4
|
+
*/
|
|
5
|
+
export { usePerformanceTracker, useComponentProfiler, useNavigationProfiler, trackComponentRender, trackNavigationTransition, trackHeavyTask, measureAsync, getHermesMemoryStats, registerComponentProfile, subscribeRenderProfiles, getRenderProfiles, logPerformanceEvent, clearPerformanceEvents, subscribePerformanceEvents, getPerformanceEvents, getInitialRenderProfiles, getInitialPerformanceEvents, generateFixSnippet, setPerformanceModuleEnabled, getPerformanceModuleEnabled, setMaxPerformanceEventsLimit, getMaxPerformanceEventsLimit, prunePerformanceEvents, type PerformanceEvent, type LiveMemoryStats, type ComponentRenderProfile, type CoreMobileVitals, type PerformanceFixKey, } from './customHooks/performanceTracker';
|
|
6
|
+
export { PerformanceSubTab, } from './types';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sub-module entry point: react-native-inapp-inspector/performance
|
|
3
|
+
* Clean tree-shaking & isolated performance tracker and profiler.
|
|
4
|
+
*/
|
|
5
|
+
export { usePerformanceTracker, useComponentProfiler, useNavigationProfiler, trackComponentRender, trackNavigationTransition, trackHeavyTask, measureAsync, getHermesMemoryStats, registerComponentProfile, subscribeRenderProfiles, getRenderProfiles, logPerformanceEvent, clearPerformanceEvents, subscribePerformanceEvents, getPerformanceEvents, getInitialRenderProfiles, getInitialPerformanceEvents, generateFixSnippet, setPerformanceModuleEnabled, getPerformanceModuleEnabled, setMaxPerformanceEventsLimit, getMaxPerformanceEventsLimit, prunePerformanceEvents, } from './customHooks/performanceTracker';
|
|
6
|
+
export { PerformanceSubTab, } from './types';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sub-module entry point: react-native-inapp-inspector/redux
|
|
3
|
+
* Clean tree-shaking & isolated Redux middleware and state inspector.
|
|
4
|
+
*/
|
|
5
|
+
export { connectReduxStore, inspectorReduxMiddleware, getReduxState, subscribeReduxState, getActionHistory, clearActionHistory, getLastActionForReducer, clearLastActionForReducer, setReduxAutoRefresh, getReduxAutoRefresh, isReduxConnected, setReduxModuleEnabled, getReduxModuleEnabled, setMaxReduxHistoryLimit, getMaxReduxHistoryLimit, pruneReduxHistory, type ReduxHistoryEntry, } from './customHooks/reduxLogger';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sub-module entry point: react-native-inapp-inspector/redux
|
|
3
|
+
* Clean tree-shaking & isolated Redux middleware and state inspector.
|
|
4
|
+
*/
|
|
5
|
+
export { connectReduxStore, inspectorReduxMiddleware, getReduxState, subscribeReduxState, getActionHistory, clearActionHistory, getLastActionForReducer, clearLastActionForReducer, setReduxAutoRefresh, getReduxAutoRefresh, isReduxConnected, setReduxModuleEnabled, getReduxModuleEnabled, setMaxReduxHistoryLimit, getMaxReduxHistoryLimit, pruneReduxHistory, } from './customHooks/reduxLogger';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-inapp-inspector",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.2",
|
|
4
4
|
"description": "The zero-config, all-in-one in-app debugger for React Native & Expo. Inspect Network (fetch/axios), Console logs, Stack Traces, Redux State, Firebase Analytics, and JS Bundle size directly on device.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -23,7 +23,57 @@
|
|
|
23
23
|
"import": "./dist/esm/index.js",
|
|
24
24
|
"require": "./dist/commonjs/index.js",
|
|
25
25
|
"default": "./dist/commonjs/index.js"
|
|
26
|
-
}
|
|
26
|
+
},
|
|
27
|
+
"./network": {
|
|
28
|
+
"react-native": "./dist/commonjs/network.js",
|
|
29
|
+
"types": "./dist/commonjs/network.d.ts",
|
|
30
|
+
"import": "./dist/esm/network.js",
|
|
31
|
+
"require": "./dist/commonjs/network.js",
|
|
32
|
+
"default": "./dist/commonjs/network.js"
|
|
33
|
+
},
|
|
34
|
+
"./redux": {
|
|
35
|
+
"react-native": "./dist/commonjs/redux.js",
|
|
36
|
+
"types": "./dist/commonjs/redux.d.ts",
|
|
37
|
+
"import": "./dist/esm/redux.js",
|
|
38
|
+
"require": "./dist/commonjs/redux.js",
|
|
39
|
+
"default": "./dist/commonjs/redux.js"
|
|
40
|
+
},
|
|
41
|
+
"./console": {
|
|
42
|
+
"react-native": "./dist/commonjs/console.js",
|
|
43
|
+
"types": "./dist/commonjs/console.d.ts",
|
|
44
|
+
"import": "./dist/esm/console.js",
|
|
45
|
+
"require": "./dist/commonjs/console.js",
|
|
46
|
+
"default": "./dist/commonjs/console.js"
|
|
47
|
+
},
|
|
48
|
+
"./crash": {
|
|
49
|
+
"react-native": "./dist/commonjs/crash.js",
|
|
50
|
+
"types": "./dist/commonjs/crash.d.ts",
|
|
51
|
+
"import": "./dist/esm/crash.js",
|
|
52
|
+
"require": "./dist/commonjs/crash.js",
|
|
53
|
+
"default": "./dist/commonjs/crash.js"
|
|
54
|
+
},
|
|
55
|
+
"./analytics": {
|
|
56
|
+
"react-native": "./dist/commonjs/analytics.js",
|
|
57
|
+
"types": "./dist/commonjs/analytics.d.ts",
|
|
58
|
+
"import": "./dist/esm/analytics.js",
|
|
59
|
+
"require": "./dist/commonjs/analytics.js",
|
|
60
|
+
"default": "./dist/commonjs/analytics.js"
|
|
61
|
+
},
|
|
62
|
+
"./performance": {
|
|
63
|
+
"react-native": "./dist/commonjs/performance.js",
|
|
64
|
+
"types": "./dist/commonjs/performance.d.ts",
|
|
65
|
+
"import": "./dist/esm/performance.js",
|
|
66
|
+
"require": "./dist/commonjs/performance.js",
|
|
67
|
+
"default": "./dist/commonjs/performance.js"
|
|
68
|
+
},
|
|
69
|
+
"./bundle": {
|
|
70
|
+
"react-native": "./dist/commonjs/bundle.js",
|
|
71
|
+
"types": "./dist/commonjs/bundle.d.ts",
|
|
72
|
+
"import": "./dist/esm/bundle.js",
|
|
73
|
+
"require": "./dist/commonjs/bundle.js",
|
|
74
|
+
"default": "./dist/commonjs/bundle.js"
|
|
75
|
+
},
|
|
76
|
+
"./package.json": "./package.json"
|
|
27
77
|
},
|
|
28
78
|
"files": [
|
|
29
79
|
"dist",
|
|
@@ -44,6 +94,7 @@
|
|
|
44
94
|
"clean": "rm -rf dist",
|
|
45
95
|
"prebuild": "node scripts/gen-version.js",
|
|
46
96
|
"build": "npm run clean && tsc && tsc -p tsconfig.esm.json && node scripts/inject-telemetry.js",
|
|
97
|
+
"prepare": "npm run build",
|
|
47
98
|
"watch": "tsc -w",
|
|
48
99
|
"prepack": "npm run build",
|
|
49
100
|
"publish": "node release.cjs",
|