react-native-inapp-inspector 1.1.24 → 1.1.26

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 (114) hide show
  1. package/android/build.gradle +36 -0
  2. package/android/src/main/AndroidManifest.xml +3 -0
  3. package/android/src/main/java/com/inappinspector/NetworkInspectorModule.java +114 -0
  4. package/android/src/main/java/com/inappinspector/NetworkInspectorPackage.java +28 -0
  5. package/dist/commonjs/components/AnalyticsEventCard.js +94 -88
  6. package/dist/commonjs/components/ConsoleLogCard.js +49 -25
  7. package/dist/commonjs/components/ErrorBoundary.d.ts +1 -1
  8. package/dist/commonjs/components/ErrorBoundary.js +9 -145
  9. package/dist/commonjs/components/Inspector/AnalyticsFilterModal.d.ts +7 -0
  10. package/dist/commonjs/components/Inspector/AnalyticsFilterModal.js +1002 -0
  11. package/dist/commonjs/components/Inspector/AnalyticsTab.js +637 -10
  12. package/dist/commonjs/components/Inspector/BundleTab.d.ts +1 -1
  13. package/dist/commonjs/components/Inspector/BundleTab.js +826 -406
  14. package/dist/commonjs/components/Inspector/CrashDetail.d.ts +3 -0
  15. package/dist/commonjs/components/Inspector/CrashDetail.js +796 -0
  16. package/dist/commonjs/components/Inspector/CrashFilterModal.d.ts +20 -0
  17. package/dist/commonjs/components/Inspector/CrashFilterModal.js +597 -0
  18. package/dist/commonjs/components/Inspector/CrashTab.d.ts +3 -0
  19. package/dist/commonjs/components/Inspector/CrashTab.js +727 -0
  20. package/dist/commonjs/components/Inspector/InspectorContext.js +6 -1
  21. package/dist/commonjs/components/Inspector/InspectorHeader.js +65 -28
  22. package/dist/commonjs/components/Inspector/LogDetail.js +227 -114
  23. package/dist/commonjs/components/Inspector/MainScreen.js +13 -4
  24. package/dist/commonjs/components/Inspector/NetworkDetail.js +131 -81
  25. package/dist/commonjs/components/Inspector/PerformanceTab.js +20 -10
  26. package/dist/commonjs/components/Inspector/SettingsPanel.js +90 -1
  27. package/dist/commonjs/components/Inspector/TabBar.js +15 -3
  28. package/dist/commonjs/components/NetworkIcons.d.ts +25 -0
  29. package/dist/commonjs/components/NetworkIcons.js +188 -1
  30. package/dist/commonjs/components/SegmentedTabs.js +33 -23
  31. package/dist/commonjs/components/TreeNode.js +13 -12
  32. package/dist/commonjs/constants/version.d.ts +1 -1
  33. package/dist/commonjs/constants/version.js +1 -1
  34. package/dist/commonjs/customHooks/analyticsLogger.js +70 -44
  35. package/dist/commonjs/customHooks/bundleAnalyzer.d.ts +5 -1
  36. package/dist/commonjs/customHooks/bundleAnalyzer.js +497 -126
  37. package/dist/commonjs/customHooks/consoleLogger.d.ts +1 -0
  38. package/dist/commonjs/customHooks/consoleLogger.js +153 -51
  39. package/dist/commonjs/customHooks/crashHandler.d.ts +64 -0
  40. package/dist/commonjs/customHooks/crashHandler.js +681 -0
  41. package/dist/commonjs/customHooks/networkLogger.js +74 -49
  42. package/dist/commonjs/customHooks/performanceTracker.d.ts +8 -0
  43. package/dist/commonjs/customHooks/performanceTracker.js +44 -3
  44. package/dist/commonjs/decorators/index.d.ts +49 -0
  45. package/dist/commonjs/decorators/index.js +142 -0
  46. package/dist/commonjs/helpers/gaAnalyticsRegistry.d.ts +18 -0
  47. package/dist/commonjs/helpers/gaAnalyticsRegistry.js +174 -0
  48. package/dist/commonjs/helpers/index.d.ts +7 -4
  49. package/dist/commonjs/helpers/index.js +102 -64
  50. package/dist/commonjs/i18n/locales/en.json +182 -4
  51. package/dist/commonjs/index.d.ts +6 -0
  52. package/dist/commonjs/index.js +310 -8
  53. package/dist/commonjs/styles/index.d.ts +4 -1
  54. package/dist/commonjs/styles/index.js +22 -19
  55. package/dist/commonjs/types/enums.d.ts +156 -9
  56. package/dist/commonjs/types/enums.js +139 -2
  57. package/dist/commonjs/types/interfaces.d.ts +70 -1
  58. package/dist/esm/components/AnalyticsEventCard.js +95 -89
  59. package/dist/esm/components/ConsoleLogCard.js +49 -25
  60. package/dist/esm/components/ErrorBoundary.d.ts +1 -1
  61. package/dist/esm/components/ErrorBoundary.js +10 -113
  62. package/dist/esm/components/Inspector/AnalyticsFilterModal.d.ts +7 -0
  63. package/dist/esm/components/Inspector/AnalyticsFilterModal.js +964 -0
  64. package/dist/esm/components/Inspector/AnalyticsTab.js +639 -12
  65. package/dist/esm/components/Inspector/BundleTab.d.ts +1 -1
  66. package/dist/esm/components/Inspector/BundleTab.js +827 -407
  67. package/dist/esm/components/Inspector/CrashDetail.d.ts +3 -0
  68. package/dist/esm/components/Inspector/CrashDetail.js +758 -0
  69. package/dist/esm/components/Inspector/CrashFilterModal.d.ts +20 -0
  70. package/dist/esm/components/Inspector/CrashFilterModal.js +557 -0
  71. package/dist/esm/components/Inspector/CrashTab.d.ts +3 -0
  72. package/dist/esm/components/Inspector/CrashTab.js +689 -0
  73. package/dist/esm/components/Inspector/InspectorContext.js +1 -0
  74. package/dist/esm/components/Inspector/InspectorHeader.js +66 -29
  75. package/dist/esm/components/Inspector/LogDetail.js +227 -114
  76. package/dist/esm/components/Inspector/MainScreen.js +14 -5
  77. package/dist/esm/components/Inspector/NetworkDetail.js +132 -49
  78. package/dist/esm/components/Inspector/PerformanceTab.js +20 -10
  79. package/dist/esm/components/Inspector/SettingsPanel.js +91 -2
  80. package/dist/esm/components/Inspector/TabBar.js +16 -4
  81. package/dist/esm/components/NetworkIcons.d.ts +25 -0
  82. package/dist/esm/components/NetworkIcons.js +161 -0
  83. package/dist/esm/components/SegmentedTabs.js +33 -23
  84. package/dist/esm/components/TreeNode.js +13 -12
  85. package/dist/esm/constants/version.d.ts +1 -1
  86. package/dist/esm/constants/version.js +1 -1
  87. package/dist/esm/customHooks/analyticsLogger.js +70 -44
  88. package/dist/esm/customHooks/bundleAnalyzer.d.ts +5 -1
  89. package/dist/esm/customHooks/bundleAnalyzer.js +493 -125
  90. package/dist/esm/customHooks/consoleLogger.d.ts +1 -0
  91. package/dist/esm/customHooks/consoleLogger.js +151 -50
  92. package/dist/esm/customHooks/crashHandler.d.ts +64 -0
  93. package/dist/esm/customHooks/crashHandler.js +659 -0
  94. package/dist/esm/customHooks/networkLogger.js +74 -49
  95. package/dist/esm/customHooks/performanceTracker.d.ts +8 -0
  96. package/dist/esm/customHooks/performanceTracker.js +38 -1
  97. package/dist/esm/decorators/index.d.ts +49 -0
  98. package/dist/esm/decorators/index.js +137 -0
  99. package/dist/esm/helpers/gaAnalyticsRegistry.d.ts +18 -0
  100. package/dist/esm/helpers/gaAnalyticsRegistry.js +169 -0
  101. package/dist/esm/helpers/index.d.ts +7 -4
  102. package/dist/esm/helpers/index.js +100 -63
  103. package/dist/esm/i18n/locales/en.json +182 -4
  104. package/dist/esm/index.d.ts +6 -0
  105. package/dist/esm/index.js +262 -8
  106. package/dist/esm/styles/index.d.ts +4 -1
  107. package/dist/esm/styles/index.js +22 -19
  108. package/dist/esm/types/enums.d.ts +156 -9
  109. package/dist/esm/types/enums.js +138 -3
  110. package/dist/esm/types/interfaces.d.ts +70 -1
  111. package/ios/NetworkInspectorModule.h +6 -0
  112. package/ios/NetworkInspectorModule.m +125 -0
  113. package/package.json +5 -2
  114. package/react-native-inapp-inspector.podspec +18 -0
@@ -1,4 +1,4 @@
1
- import { Clipboard, Platform, ToastAndroid, Alert, NativeModules, Linking } from 'react-native';
1
+ import { Clipboard, Platform, ToastAndroid, Alert, NativeModules, Linking, TurboModuleRegistry, } from 'react-native';
2
2
  // Stylesheet
3
3
  import { AppColors } from '../styles/AppColors';
4
4
  // Constants
@@ -52,58 +52,83 @@ export const getSize = (data) => {
52
52
  return '—';
53
53
  }
54
54
  };
55
- // Try loading community clipboard or native clipboard modules with graceful fallbacks
55
+ // Safely detect and load clipboard natively without static require() calls that Metro fails on
56
56
  const getClipboardModule = () => {
57
+ // 1. Check TurboModuleRegistry (TurboModules / New Architecture)
57
58
  try {
58
- // @ts-ignore
59
- const community = require('@react-native-clipboard/clipboard');
60
- if (community?.default?.setString)
61
- return community.default;
62
- if (community?.setString)
63
- return community;
59
+ const tmReg = TurboModuleRegistry || globalThis.__turboModuleProxy;
60
+ if (tmReg?.get) {
61
+ const tm = tmReg.get('RNCClipboard') ||
62
+ tmReg.get('NativeClipboard') ||
63
+ tmReg.get('ExpoClipboard');
64
+ if (tm &&
65
+ (typeof tm.setString === 'function' ||
66
+ typeof tm.setStringAsync === 'function')) {
67
+ return tm;
68
+ }
69
+ }
64
70
  }
65
71
  catch { }
72
+ // 2. Check legacy NativeModules table (Bridge / Old Architecture)
66
73
  try {
67
- // @ts-ignore
68
- const oldCommunity = require('@react-native-community/clipboard');
69
- if (oldCommunity?.default?.setString)
70
- return oldCommunity.default;
71
- if (oldCommunity?.setString)
72
- return oldCommunity;
74
+ if (NativeModules?.RNCClipboard &&
75
+ typeof NativeModules.RNCClipboard.setString === 'function') {
76
+ return NativeModules.RNCClipboard;
77
+ }
78
+ if (NativeModules?.ExpoClipboard &&
79
+ typeof NativeModules.ExpoClipboard.setStringAsync === 'function') {
80
+ return NativeModules.ExpoClipboard;
81
+ }
82
+ if (NativeModules?.Clipboard &&
83
+ typeof NativeModules.Clipboard.setString === 'function') {
84
+ return NativeModules.Clipboard;
85
+ }
73
86
  }
74
87
  catch { }
88
+ // 3. Check legacy React Native core Clipboard
75
89
  try {
76
- if (NativeModules?.RNCClipboard?.setString)
77
- return NativeModules.RNCClipboard;
90
+ if (Clipboard && typeof Clipboard.setString === 'function') {
91
+ return Clipboard;
92
+ }
78
93
  }
79
94
  catch { }
80
- return Clipboard;
95
+ return null;
81
96
  };
82
97
  export const copyToClipboard = (value, label) => {
83
98
  const resolved = typeof value === 'function' ? value() : value;
84
99
  const text = typeof resolved === 'string' ? resolved : JSON.stringify(resolved, null, 2);
85
100
  const textToCopy = text ?? '';
101
+ let copied = false;
86
102
  try {
87
103
  const cb = getClipboardModule();
88
- if (cb && typeof cb.setString === 'function') {
89
- cb.setString(textToCopy);
90
- }
91
- else {
92
- Clipboard.setString(textToCopy);
104
+ if (cb) {
105
+ if (typeof cb.setStringAsync === 'function') {
106
+ cb.setStringAsync(textToCopy);
107
+ copied = true;
108
+ }
109
+ else if (typeof cb.setString === 'function') {
110
+ cb.setString(textToCopy);
111
+ copied = true;
112
+ }
93
113
  }
94
114
  }
95
- catch {
115
+ catch { }
116
+ if (!copied) {
96
117
  try {
97
- Clipboard.setString(textToCopy);
118
+ if (typeof navigator !== 'undefined' && navigator?.clipboard?.writeText) {
119
+ navigator.clipboard.writeText(textToCopy);
120
+ copied = true;
121
+ }
98
122
  }
99
123
  catch { }
100
124
  }
101
- if (Platform.OS === 'android') {
102
- ToastAndroid.show(`${label} copied`, ToastAndroid.SHORT);
103
- }
104
- else {
105
- Alert.alert('Copied', `${label} copied to clipboard`, [{ text: 'OK' }]);
125
+ // Visual toast feedback on Android if ToastAndroid exists
126
+ try {
127
+ if (Platform.OS === 'android' && ToastAndroid?.show) {
128
+ ToastAndroid.show(`${label} copied`, ToastAndroid.SHORT);
129
+ }
106
130
  }
131
+ catch { }
107
132
  };
108
133
  export const getPath = (url) => {
109
134
  try {
@@ -445,6 +470,10 @@ export const parseStackLine = (rawLine, isOrigin = false) => {
445
470
  functionName = parenMatch[1].trim() || '<anonymous>';
446
471
  locationPart = parenMatch[2].trim();
447
472
  }
473
+ // Clean Babel/Hermes artifacts in function names like ?anon_0_, _callee$, etc.
474
+ if (functionName.startsWith('?anon_') || functionName === '?') {
475
+ functionName = 'anonymous';
476
+ }
448
477
  // Remove "address at " prefix if present in Hermes
449
478
  locationPart = locationPart.replace(/^address at /, '');
450
479
  // Extract file, line, and col from locationPart (e.g. "path/to/file.tsx:42:15" or "http://...:42:15")
@@ -472,20 +501,56 @@ export const parseStackLine = (rawLine, isOrigin = false) => {
472
501
  const fileExt = ext === 'tsx' || ext === 'jsx' || ext === 'ts' || ext === 'js'
473
502
  ? ext
474
503
  : 'other';
475
- const isUserCode = !cleanPath.includes('node_modules') &&
476
- !cleanPath.includes('react-native/') &&
477
- !cleanPath.includes('react-native-inapp-inspector') &&
478
- (fileExt === 'tsx' || fileExt === 'jsx' || fileExt === 'ts' || fileExt === 'js');
504
+ const isNative = locationPart === 'native' || cleanPath === 'native';
505
+ const isInternalBytecode = cleanPath.includes('InternalBytecode') ||
506
+ cleanPath.includes('metro-runtime') ||
507
+ cleanPath.includes('regenerator-runtime') ||
508
+ functionName === 'tryCallOne' ||
509
+ functionName === 'asyncGeneratorStep' ||
510
+ functionName === '_next' ||
511
+ (functionName === 'next' && isNative);
512
+ const isDependency = cleanPath.includes('node_modules') ||
513
+ cleanPath.includes('react-native/Libraries') ||
514
+ (cleanPath.includes('react-native-inapp-inspector') && !cleanPath.includes('/example/'));
515
+ const isUserCode = !isNative &&
516
+ !isInternalBytecode &&
517
+ !isDependency &&
518
+ (fileExt === 'tsx' || fileExt === 'jsx' || fileExt === 'ts' || fileExt === 'js' || !fileName.includes('.bundle'));
519
+ const frameType = isUserCode
520
+ ? 'app'
521
+ : isDependency
522
+ ? 'dependency'
523
+ : isNative
524
+ ? 'native'
525
+ : 'runtime';
526
+ const isRuntimeNoise = isInternalBytecode || isNative || functionName === 'asyncGeneratorStep' || functionName === '_next';
527
+ // Format clean relative project path
528
+ let relativePath = cleanPath;
529
+ if (relativePath.includes('/example/')) {
530
+ relativePath = relativePath.substring(relativePath.indexOf('/example/') + 9);
531
+ }
532
+ else if (relativePath.includes('/src/')) {
533
+ relativePath = relativePath.substring(relativePath.indexOf('/src/') + 1);
534
+ }
535
+ else if (relativePath.includes('/node_modules/')) {
536
+ relativePath = relativePath.substring(relativePath.indexOf('/node_modules/') + 14);
537
+ }
538
+ const copyableLocation = lineNumber
539
+ ? `${fileName}:${lineNumber}${columnNumber ? `:${columnNumber}` : ''}`
540
+ : fileName;
479
541
  return {
480
542
  raw: rawLine,
481
543
  functionName,
482
544
  fileName,
483
- fullPath: cleanPath,
545
+ fullPath: relativePath,
484
546
  fileExt,
547
+ frameType,
485
548
  isUserCode,
549
+ isRuntimeNoise,
486
550
  lineNumber,
487
551
  columnNumber,
488
552
  isOrigin,
553
+ copyableLocation,
489
554
  };
490
555
  };
491
556
  // ─── Analytics Helpers ────────────────────────────────────────────────────────
@@ -507,35 +572,7 @@ export const getEventColor = (name) => {
507
572
  }
508
573
  return ANALYTICS_EVENT_PALETTE[Math.abs(hash) % ANALYTICS_EVENT_PALETTE.length];
509
574
  };
510
- export const getEventCategory = (name) => {
511
- if (!name)
512
- return 'custom';
513
- const lowercaseName = name.toLowerCase();
514
- if (lowercaseName === 'screen_view' || lowercaseName === 'page_view') {
515
- return 'page_view';
516
- }
517
- // Ecommerce events
518
- const ecommerceEvents = [
519
- 'purchase', 'add_to_cart', 'begin_checkout', 'view_item',
520
- 'select_item', 'remove_from_cart', 'view_cart',
521
- 'add_shipping_info', 'add_payment_info', 'refund',
522
- 'view_item_list', 'select_promotion', 'view_promotion'
523
- ];
524
- if (ecommerceEvents.includes(lowercaseName)) {
525
- return 'ecommerce';
526
- }
527
- // Firebase System Auto-events
528
- const systemEvents = [
529
- 'first_open', 'session_start', 'user_engagement',
530
- 'app_clear_data', 'app_exception', 'app_update', 'os_update',
531
- 'notification_receive', 'notification_open', 'notification_dismiss',
532
- 'screen_active', 'screen_inactive'
533
- ];
534
- if (systemEvents.includes(lowercaseName) || lowercaseName.startsWith('firebase_') || lowercaseName.startsWith('_')) {
535
- return 'system';
536
- }
537
- return 'custom';
538
- };
575
+ export { getEventCategory, registerGAPlugin, } from './gaAnalyticsRegistry';
539
576
  export const getCategoryColors = (category) => {
540
577
  switch (category) {
541
578
  case 'page_view':
@@ -211,7 +211,29 @@
211
211
  "filterWarn": "Warn",
212
212
  "filterError": "Error",
213
213
  "filterUserLog": "User Log",
214
- "filterAnalytics": "Analytics"
214
+ "filterAnalytics": "Analytics",
215
+ "tabOutput": "Output",
216
+ "tabArgs": "Args ({{count}})",
217
+ "tabStack": "Stack Trace",
218
+ "tabMetadata": "Metadata",
219
+ "callStack": "Call Stack ({{count}} frames)",
220
+ "errorStack": "Error Exception Stack ({{count}} frames)",
221
+ "callOriginStack": "Call Origin Stack",
222
+ "errorThrownStack": "Error Thrown Stack",
223
+ "appCodeScope": "🎯 App Code ({{count}})",
224
+ "allFramesScope": "📜 All Frames ({{count}})",
225
+ "cardsView": "Cards",
226
+ "rawTraceView": "Raw",
227
+ "noStackAvailable": "No call stack frames found matching the active filter.",
228
+ "originBadge": "#1 ORIGIN",
229
+ "appCodeBadge": "App Code",
230
+ "dependencyBadge": "Dependency",
231
+ "nativeBadge": "Native",
232
+ "hermesVmBadge": "Hermes VM",
233
+ "fullStackTrace": "Full Stack Trace",
234
+ "lineCol": "Line {{line}}, Col {{col}}",
235
+ "lineColShort": "L{{line}}:C{{col}}",
236
+ "searchInLogDetails": "Search in log details..."
215
237
  },
216
238
  "analytics": {
217
239
  "title": "Analytics",
@@ -398,11 +420,36 @@
398
420
  "catTsDesc": "App screen components, hooks, and business logic",
399
421
  "catJsonTitle": "JSON Data & Localizations",
400
422
  "catJsonDesc": "i18n translation dictionaries and static configs",
401
- "catRowSub": "{{count}} items {{desc}}",
402
- "totalBundleAssets": "TOTAL BUNDLE ASSETS",
423
+ "totalBundleAssets": "TOTAL HOST PROJECT FILES",
403
424
  "totalBundleValue": "{{kb}} KB (~{{mb}} MB)",
404
- "totalFormula": "Sum: {{images}} KB + {{js}} KB + {{fonts}} KB + {{ts}} KB + {{json}} KB = {{total}} KB ({{count}} items • 100%)",
425
+ "totalFormula": "Sum of host source files: {{images}} KB + {{js}} KB + {{fonts}} KB + {{ts}} KB + {{json}} KB = {{total}} KB ({{count}} items)",
426
+ "prodIosApp": "iOS App (.ipa)",
427
+ "prodAndroidAab": "Android AAB (.aab)",
428
+ "prodAndroidApk": "Universal APK (.apk)",
429
+ "prodHeroTitleIos": "iOS Production Binary Footprint",
430
+ "prodHeroTitleAab": "Google Play App Bundle (.aab)",
431
+ "prodHeroTitleApk": "Universal Standalone APK (.apk)",
432
+ "prodHeroSubIos": "App Store install & over-the-air cellular download estimates",
433
+ "prodHeroSubAab": "Optimized per-device dynamic delivery split APK architecture",
434
+ "prodHeroSubApk": "Multi-ABI universal install archive for sideloading & direct distribution",
435
+ "prodInstallSize": "INSTALL SIZE",
436
+ "prodInstallHint": "On-device uncompressed footprint",
437
+ "prodDownloadSize": "DOWNLOAD SIZE",
438
+ "prodDownloadHint": "Store network transfer payload",
439
+ "prodCompression": "COMPRESSION",
440
+ "prodCompressionHint": "Bytecode & asset ratio",
441
+ "prodFormatArch": "FORMAT ARCHITECTURE",
442
+ "prodFormatHintIos": "Apple ARM64 runtime",
443
+ "prodFormatHintAab": "Dynamic Google Play delivery",
444
+ "prodFormatHintApk": "Sideload universal package",
445
+ "prodArchTitle": "Binary Component Architecture",
446
+ "prodArchSub": "Compiled native libraries, runtime bytecodes, assets, and signature blocks",
447
+ "prodTotalIos": "TOTAL IOS APP BINARY",
448
+ "prodTotalAab": "TOTAL ANDROID AAB BUNDLE",
449
+ "prodTotalApk": "TOTAL UNIVERSAL APK",
450
+ "prodTotalFormula": "From {{devKb}} KB (~{{devMb}} MB • {{count}} total assets) dev source bundle → {{installMb}} MB optimized native binary ({{pct}}% bytecode/asset compression).",
405
451
  "tabOverview": "Overview",
452
+ "tabProduction": "Production ({{count}})",
406
453
  "tabFiles": "Files ({{count}})",
407
454
  "tabPackages": "Packages ({{count}})",
408
455
  "tabMedia": "Media ({{count}})",
@@ -535,5 +582,136 @@
535
582
  "retry": "Try Again",
536
583
  "reset": "Reset",
537
584
  "close": "Close"
585
+ },
586
+ "crash": {
587
+ "title": "Crash",
588
+ "searchPlaceholder": "Search error, message, stack...",
589
+ "searchDetailPlaceholder": "Search in trace or JSON...",
590
+ "statCrashes": "Crashes",
591
+ "statFatal": "Fatal",
592
+ "statJsErrors": "JS Errors",
593
+ "statPromises": "Promises",
594
+ "statRender": "Render",
595
+ "statNative": "Native",
596
+ "filterAll": "All",
597
+ "filterFatal": "Fatal",
598
+ "filterJsError": "JS Error",
599
+ "filterPromise": "Promise",
600
+ "filterRender": "Render",
601
+ "filterNative": "Native",
602
+ "fatalBadge": "FATAL",
603
+ "handledBadge": "HANDLED",
604
+ "fatalCrash": "FATAL CRASH",
605
+ "handledException": "HANDLED EXCEPTION",
606
+ "unknownException": "Unknown Exception",
607
+ "report": "Report",
608
+ "inspect": "Inspect",
609
+ "copyReport": "Copy Report",
610
+ "copied": "Copied",
611
+ "clearTitle": "Clear Crash History",
612
+ "clearMessage": "Are you sure you want to clear all intercepted crash records?",
613
+ "clearCancel": "Cancel",
614
+ "clearConfirm": "Clear All",
615
+ "emptyTitle": "Zero Crashes Detected",
616
+ "emptySubtitle": "Global crash guard is active. All native and JavaScript exceptions are intercepted and protected.",
617
+ "emptySearchSubtitle": "No crash entries matched your search query.",
618
+ "tabStack": "Stack ({{count}})",
619
+ "tabDiagnostics": "Diagnostics",
620
+ "tabTrail": "Trail ({{count}})",
621
+ "tabRawJson": "Raw JSON",
622
+ "appFrames": "App Frames ({{count}})",
623
+ "allFrames": "All Frames ({{count}})",
624
+ "frameApp": "APP",
625
+ "frameLib": "LIB",
626
+ "anonymous": "<anonymous>",
627
+ "noStackTrace": "No stack trace captured for this event.",
628
+ "deviceEnvironment": "Device & Environment",
629
+ "platform": "Platform",
630
+ "osVersion": "OS Version",
631
+ "reactNative": "React Native",
632
+ "jsEngine": "JS Engine",
633
+ "hermesEngine": "Hermes Engine",
634
+ "jsc": "JSC",
635
+ "architecture": "Architecture",
636
+ "fabricNewArch": "Fabric (New Arch)",
637
+ "paperLegacy": "Paper (Legacy)",
638
+ "appState": "App State",
639
+ "jsHeapMemory": "JS Heap Memory",
640
+ "usedHeap": "Used Heap",
641
+ "totalHeap": "Total Heap",
642
+ "noBreadcrumbs": "No breadcrumb events recorded prior to this crash.",
643
+ "simNativeMessage": "Simulated native fatal exception",
644
+ "simPromiseMessage": "Simulated unhandled promise rejection",
645
+ "simRenderMessage": "Simulated React component render error",
646
+ "simJsMessage": "Simulated JavaScript exception",
647
+ "reportTitle": "CRASH DIAGNOSTIC REPORT",
648
+ "reportErrorName": "Error Name:",
649
+ "reportMessage": "Message:",
650
+ "reportType": "Type:",
651
+ "reportFatalYes": "YES (Fatal)",
652
+ "reportFatalNo": "NO (Caught/Handled)",
653
+ "reportFatal": "Fatal:",
654
+ "reportTimestamp": "Timestamp:",
655
+ "reportUptime": "App Uptime:",
656
+ "reportUptimeValue": "{{seconds}} seconds",
657
+ "reportPlatform": "Platform:",
658
+ "reportReactNative": "React Native:",
659
+ "reportHermes": "Hermes:",
660
+ "reportEnabled": "Enabled",
661
+ "reportDisabled": "Disabled",
662
+ "reportArchitecture": "Architecture:",
663
+ "reportFabricNew": "Fabric (New)",
664
+ "reportPaperLegacy": "Paper (Legacy)",
665
+ "reportScreenSize": "Screen Size:",
666
+ "reportAppState": "App State:",
667
+ "reportJsMemory": "JS Memory:",
668
+ "reportStackTrace": "STACK TRACE:",
669
+ "reportNoStackTrace": "No stack trace available",
670
+ "reportComponentHierarchy": "COMPONENT HIERARCHY:",
671
+ "reportRecentBreadcrumbs": "RECENT BREADCRUMBS:",
672
+ "mdReportTitle": "🚨 Crash Report: {{name}}",
673
+ "mdStackTrace": "📦 Stack Trace",
674
+ "mdComponentHierarchy": "🌲 Component Hierarchy",
675
+ "mdRecentBreadcrumbs": "👣 Recent Breadcrumbs",
676
+ "mdSeverityFatal": "FATAL",
677
+ "mdSeverityHandled": "HANDLED",
678
+ "breadcrumbNavigation": "Navigated from \"{{from}}\" to \"{{to}}\"",
679
+ "breadcrumbAction": "Action: {{actionType}}",
680
+ "unknown": "Unknown",
681
+ "runtimeException": "Runtime Exception",
682
+ "logFatalCrash": "Fatal Crash",
683
+ "logUnhandledError": "Unhandled Error",
684
+ "errorNameFatal": "FatalError",
685
+ "errorNameUnhandled": "UnhandledException",
686
+ "nativeCrashTitle": "Native Crash",
687
+ "nativeUncaughtException": "Native Uncaught Exception",
688
+ "nativeException": "Native Exception",
689
+ "unhandledPromiseRejection": "Unhandled Promise Rejection",
690
+ "filterTitle": "Crash Filters",
691
+ "filterSubtitle": "Diagnostics & Reports",
692
+ "filterReset": "Reset All",
693
+ "filterTypeSection": "CRASH TYPE",
694
+ "filterTypeAll": "All Types",
695
+ "filterTimeSection": "TIME HORIZON",
696
+ "filterTimeAll": "All Time",
697
+ "filterTime15m": "Last 15 mins",
698
+ "filterTime1h": "Last 1 hour",
699
+ "filterTime24h": "Last 24 hours",
700
+ "filterTime7d": "Last 7 days",
701
+ "filterPlatformSection": "PLATFORM",
702
+ "filterPlatformAll": "All Platforms",
703
+ "filterPlatformIos": "iOS",
704
+ "filterPlatformAndroid": "Android",
705
+ "filterEngineSection": "JS ENGINE",
706
+ "filterEngineAll": "All Engines",
707
+ "filterEngineHermes": "Hermes",
708
+ "filterSortSection": "SORT ORDER",
709
+ "filterSortNewest": "Newest First (Default)",
710
+ "filterSortOldest": "Oldest First",
711
+ "filterDiscard": "Discard",
712
+ "filterApply": "Apply ({{count}} Crashes)",
713
+ "frameCopy": "Copy",
714
+ "frameCopied": "Copied",
715
+ "componentHierarchy": "Component Hierarchy"
538
716
  }
539
717
  }
@@ -5,5 +5,11 @@ export default NetworkInspectorWrapper;
5
5
  export { setupNetworkLogger, clearNetworkLogs, subscribeNetworkLogs, addAxiosInterceptors, } from './customHooks/networkLogger';
6
6
  export { setupConsoleLogger, clearConsoleLogs, subscribeConsoleLogs, } from './customHooks/consoleLogger';
7
7
  export { setupAnalyticsLogger, logAnalyticsEvent, subscribeAnalyticsEvents, clearAnalyticsEvents, getCurrentUserProperties, getCurrentUserId, getDefaultEventParameters, getCollectionEnabled, } from './customHooks/analyticsLogger';
8
+ export { setupGlobalCrashHandler, subscribeCrashEvents, emitCrashEvent, getCrashRecords, clearCrashRecords, simulateTestCrash, exportCrashReport, parseCrashStackTrace, recordCustomCrash, addCrashBreadcrumb, recordNavigationBreadcrumb, recordNetworkBreadcrumb, recordReduxBreadcrumb, recordUserActionBreadcrumb, computeCrashFingerprint, type CrashEventPayload, } from './customHooks/crashHandler';
9
+ export { default as CrashTab } from './components/Inspector/CrashTab';
8
10
  export { default as ErrorBoundary } from './components/ErrorBoundary';
9
11
  export { connectReduxStore, inspectorReduxMiddleware, getReduxState, subscribeReduxState, getActionHistory, clearActionHistory, getLastActionForReducer, } from './customHooks/reduxLogger';
12
+ export { getEventCategory, registerGAPlugin, type GAPlugin, } from './helpers/gaAnalyticsRegistry';
13
+ export { usePerformanceTracker, logPerformanceEvent, clearPerformanceEvents, subscribePerformanceEvents, getPerformanceEvents, } from './customHooks/performanceTracker';
14
+ export { InspectLog, InspectTrackTime, InspectCatch, type InspectLogOptions, } from './decorators';
15
+ export { ActiveTab, Method, StatusFilter, SortOrder, LocalFilter, ModalAnimationType, SettingsPage, SettingsSubTab, LogFilter, ConsoleLogType, AnalyticsEventSource, GAEventCategory, StackFrameType, DiffResultType, BundleSubTab, PerformanceSubTab, CrashType, CrashExportFormat, CrashDetailSubTab, CrashFilterType, BreadcrumbType, } from './types';