react-native-inapp-inspector 2.2.2 → 2.2.4

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 (159) hide show
  1. package/dist/commonjs/components/AnalyticsDetail.js +5 -1
  2. package/dist/commonjs/components/AnalyticsEventCard.js +2 -1
  3. package/dist/commonjs/components/DiffViewer.js +1 -1
  4. package/dist/commonjs/components/Inspector/BundleTab.js +22 -0
  5. package/dist/commonjs/components/Inspector/DeviceInfoTab.d.ts +3 -0
  6. package/dist/commonjs/components/Inspector/DeviceInfoTab.js +835 -0
  7. package/dist/commonjs/components/Inspector/InspectorHeader.js +12 -14
  8. package/dist/commonjs/components/Inspector/LogDetail.js +6 -3
  9. package/dist/commonjs/components/Inspector/MainScreen.js +7 -3
  10. package/dist/commonjs/components/Inspector/NetworkTab.js +92 -15
  11. package/dist/commonjs/components/Inspector/PerformanceTab.js +38 -12
  12. package/dist/commonjs/components/Inspector/SettingsPanel.js +440 -229
  13. package/dist/commonjs/components/Inspector/StorageTab.d.ts +3 -0
  14. package/dist/commonjs/components/Inspector/StorageTab.js +892 -0
  15. package/dist/commonjs/components/Inspector/TabBar.js +14 -0
  16. package/dist/commonjs/components/Inspector/TelemetryConsentModal.js +11 -2
  17. package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +4 -1
  18. package/dist/commonjs/components/NetworkIcons.d.ts +6 -0
  19. package/dist/commonjs/components/NetworkIcons.js +30 -1
  20. package/dist/commonjs/constants/version.d.ts +1 -1
  21. package/dist/commonjs/constants/version.js +1 -1
  22. package/dist/commonjs/customHooks/bundleAnalyzer.js +44 -22
  23. package/dist/commonjs/customHooks/storageInspector.d.ts +67 -0
  24. package/dist/commonjs/customHooks/storageInspector.js +486 -0
  25. package/dist/commonjs/i18n/locales/en.json +8 -2
  26. package/dist/commonjs/index.d.ts +1 -0
  27. package/dist/commonjs/index.js +16 -1
  28. package/dist/commonjs/storage.d.ts +5 -0
  29. package/dist/commonjs/storage.js +18 -0
  30. package/dist/commonjs/types/enums.d.ts +5 -0
  31. package/dist/commonjs/types/enums.js +5 -0
  32. package/dist/esm/components/AnalyticsDetail.js +6 -2
  33. package/dist/esm/components/AnalyticsEventCard.js +2 -1
  34. package/dist/esm/components/DiffViewer.js +1 -1
  35. package/dist/esm/components/Inspector/BundleTab.js +22 -0
  36. package/dist/esm/components/Inspector/DeviceInfoTab.d.ts +3 -0
  37. package/dist/esm/components/Inspector/DeviceInfoTab.js +796 -0
  38. package/dist/esm/components/Inspector/InspectorHeader.js +13 -15
  39. package/dist/esm/components/Inspector/LogDetail.js +7 -4
  40. package/dist/esm/components/Inspector/MainScreen.js +7 -3
  41. package/dist/esm/components/Inspector/NetworkTab.js +93 -16
  42. package/dist/esm/components/Inspector/PerformanceTab.js +39 -13
  43. package/dist/esm/components/Inspector/SettingsPanel.js +441 -230
  44. package/dist/esm/components/Inspector/StorageTab.d.ts +3 -0
  45. package/dist/esm/components/Inspector/StorageTab.js +853 -0
  46. package/dist/esm/components/Inspector/TabBar.js +15 -1
  47. package/dist/esm/components/Inspector/TelemetryConsentModal.js +11 -2
  48. package/dist/esm/components/Inspector/UpdateAvailableModal.js +4 -1
  49. package/dist/esm/components/NetworkIcons.d.ts +6 -0
  50. package/dist/esm/components/NetworkIcons.js +23 -0
  51. package/dist/esm/constants/version.d.ts +1 -1
  52. package/dist/esm/constants/version.js +1 -1
  53. package/dist/esm/customHooks/bundleAnalyzer.js +44 -22
  54. package/dist/esm/customHooks/storageInspector.d.ts +67 -0
  55. package/dist/esm/customHooks/storageInspector.js +469 -0
  56. package/dist/esm/i18n/locales/en.json +8 -2
  57. package/dist/esm/index.d.ts +1 -0
  58. package/dist/esm/index.js +5 -0
  59. package/dist/esm/storage.d.ts +5 -0
  60. package/dist/esm/storage.js +5 -0
  61. package/dist/esm/types/enums.d.ts +5 -0
  62. package/dist/esm/types/enums.js +5 -0
  63. package/package.json +9 -1
  64. package/src/analytics.ts +35 -0
  65. package/src/bundle.ts +25 -0
  66. package/src/components/AnalyticsDetail.tsx +870 -0
  67. package/src/components/AnalyticsEventCard.tsx +442 -0
  68. package/src/components/AnalyticsGraph.tsx +583 -0
  69. package/src/components/AnimatedEntrance.tsx +64 -0
  70. package/src/components/AppHeaderLogo.tsx +109 -0
  71. package/src/components/BrandCircleIcon.tsx +144 -0
  72. package/src/components/BrandSquareIcon.tsx +144 -0
  73. package/src/components/CodeSnippet.tsx +725 -0
  74. package/src/components/ConsoleLogCard.tsx +628 -0
  75. package/src/components/CopyButton.tsx +87 -0
  76. package/src/components/DiffViewer.tsx +82 -0
  77. package/src/components/DomainHeader.tsx +237 -0
  78. package/src/components/EmptyState.tsx +73 -0
  79. package/src/components/EndOfListFooter.tsx +100 -0
  80. package/src/components/ErrorBoundary.tsx +688 -0
  81. package/src/components/HeadersSection.tsx +192 -0
  82. package/src/components/HighlightText.tsx +100 -0
  83. package/src/components/Inspector/AnalyticsFilterModal.tsx +1250 -0
  84. package/src/components/Inspector/AnalyticsTab.tsx +1336 -0
  85. package/src/components/Inspector/BundleTab.tsx +4760 -0
  86. package/src/components/Inspector/ConsoleTab.tsx +702 -0
  87. package/src/components/Inspector/CrashDetail.tsx +941 -0
  88. package/src/components/Inspector/CrashFilterModal.tsx +721 -0
  89. package/src/components/Inspector/CrashTab.tsx +871 -0
  90. package/src/components/Inspector/DeviceInfoTab.tsx +1204 -0
  91. package/src/components/Inspector/FabLauncher.tsx +80 -0
  92. package/src/components/Inspector/InspectorContext.tsx +28 -0
  93. package/src/components/Inspector/InspectorHeader.tsx +972 -0
  94. package/src/components/Inspector/LogDetail.tsx +1431 -0
  95. package/src/components/Inspector/MainScreen.tsx +262 -0
  96. package/src/components/Inspector/NavigationTracker.tsx +13 -0
  97. package/src/components/Inspector/NetworkDetail.tsx +794 -0
  98. package/src/components/Inspector/NetworkTab.tsx +1183 -0
  99. package/src/components/Inspector/NpmUpdateToast.tsx +392 -0
  100. package/src/components/Inspector/PerformanceTab.tsx +1928 -0
  101. package/src/components/Inspector/ReduxDetail.tsx +1651 -0
  102. package/src/components/Inspector/ReduxTab.tsx +954 -0
  103. package/src/components/Inspector/SettingsPanel.tsx +3447 -0
  104. package/src/components/Inspector/StorageTab.tsx +1048 -0
  105. package/src/components/Inspector/TabBar.tsx +207 -0
  106. package/src/components/Inspector/TelemetryConsentModal.tsx +416 -0
  107. package/src/components/Inspector/UpdateAvailableModal.tsx +557 -0
  108. package/src/components/JsonViewer.tsx +486 -0
  109. package/src/components/LogCard.tsx +491 -0
  110. package/src/components/LogSyntaxHighlighter.tsx +178 -0
  111. package/src/components/MetaAccordion.tsx +340 -0
  112. package/src/components/MiniBarChart.tsx +42 -0
  113. package/src/components/MiniLineChart.tsx +33 -0
  114. package/src/components/NetworkIcons.tsx +2221 -0
  115. package/src/components/SectionHeader.tsx +113 -0
  116. package/src/components/SegmentedTabs.tsx +83 -0
  117. package/src/components/Slider.tsx +300 -0
  118. package/src/components/SourcePageCard.tsx +148 -0
  119. package/src/components/Toast.tsx +131 -0
  120. package/src/components/TouchableScale.tsx +91 -0
  121. package/src/components/TreeNode.tsx +186 -0
  122. package/src/console.ts +24 -0
  123. package/src/constants/index.ts +38 -0
  124. package/src/constants/version.ts +3 -0
  125. package/src/crash.ts +32 -0
  126. package/src/customHooks/analyticsLogger.ts +336 -0
  127. package/src/customHooks/bundleAnalyzer.ts +1256 -0
  128. package/src/customHooks/consoleLogger.ts +497 -0
  129. package/src/customHooks/crashHandler.ts +944 -0
  130. package/src/customHooks/logFilters.ts +32 -0
  131. package/src/customHooks/networkLogger.ts +419 -0
  132. package/src/customHooks/performanceTracker.ts +1014 -0
  133. package/src/customHooks/reduxLogger.ts +406 -0
  134. package/src/customHooks/storageInspector.ts +509 -0
  135. package/src/customHooks/useAccordion.tsx +60 -0
  136. package/src/decorators/index.ts +184 -0
  137. package/src/helpers/gaAnalyticsRegistry.ts +204 -0
  138. package/src/helpers/index.ts +860 -0
  139. package/src/helpers/memoryManager.ts +138 -0
  140. package/src/helpers/searchQueryParser.ts +283 -0
  141. package/src/helpers/settingsStore.ts +171 -0
  142. package/src/helpers/telemetry.ts +505 -0
  143. package/src/helpers/toast.ts +17 -0
  144. package/src/i18n/index.ts +69 -0
  145. package/src/i18n/locales/en.json +1058 -0
  146. package/src/index.tsx +2356 -0
  147. package/src/native/NativeInspector.ts +397 -0
  148. package/src/native/NativeNetworkInspector.ts +24 -0
  149. package/src/network.ts +22 -0
  150. package/src/performance.ts +38 -0
  151. package/src/redux.ts +23 -0
  152. package/src/storage.ts +18 -0
  153. package/src/styles/AppColors.ts +408 -0
  154. package/src/styles/AppFonts.ts +8 -0
  155. package/src/styles/common.ts +209 -0
  156. package/src/styles/index.ts +1570 -0
  157. package/src/types/enums.ts +199 -0
  158. package/src/types/index.ts +34 -0
  159. package/src/types/interfaces.ts +515 -0
@@ -0,0 +1,192 @@
1
+ import React, {useEffect, useMemo, useRef, useState} from 'react';
2
+ import {useTranslation} from '../i18n';
3
+ import {View, Pressable, Text, Animated} from 'react-native';
4
+
5
+ // Components
6
+ import CopyButton from './CopyButton';
7
+ import TouchableScale from './TouchableScale';
8
+
9
+ // Helpers
10
+ import {copyToClipboard} from '../helpers';
11
+
12
+ // Custom Hooks
13
+ import useAccordion from '../customHooks/useAccordion';
14
+
15
+ // Assets
16
+ import {HeadersIcon, ChevronIcon, CopyIcon} from './NetworkIcons';
17
+
18
+ // Stylesheet
19
+ import {AppColors} from '../styles/AppColors';
20
+ import styles from '../styles';
21
+
22
+ // Type Definition
23
+ import {HeadersSectionProps} from '../types';
24
+
25
+ const HeaderRow = React.memo(function HeaderRow({
26
+ headerKey,
27
+ value,
28
+ isLast,
29
+ index,
30
+ }: {
31
+ headerKey: string;
32
+ value: string;
33
+ isLast: boolean;
34
+ index: number;
35
+ }) {
36
+ const [expanded, setExpanded] = useState(false);
37
+ const isLong = value.length > 35;
38
+
39
+ const entryAnim = useRef(new Animated.Value(0)).current;
40
+
41
+ useEffect(() => {
42
+ Animated.timing(entryAnim, {
43
+ toValue: 1,
44
+ duration: 220,
45
+ delay: index * 30,
46
+ useNativeDriver: true,
47
+ }).start();
48
+ }, []);
49
+
50
+ const rowAnimStyle = {
51
+ opacity: entryAnim,
52
+ transform: [
53
+ {
54
+ translateY: entryAnim.interpolate({
55
+ inputRange: [0, 1],
56
+ outputRange: [8, 0],
57
+ }),
58
+ },
59
+ ],
60
+ };
61
+
62
+ return (
63
+ <Animated.View
64
+ style={[styles.htRow, !isLast && styles.htRowBorder, rowAnimStyle]}>
65
+ <View style={styles.htKeyCell}>
66
+ <Text style={styles.htKey} numberOfLines={2}>
67
+ {headerKey}
68
+ </Text>
69
+ </View>
70
+ <View style={styles.htCellDivider} />
71
+ <Pressable
72
+ style={styles.htValueCell}
73
+ onPress={() => isLong && setExpanded(v => !v)}
74
+ hitSlop={8}>
75
+ <Text
76
+ style={styles.htValue}
77
+ selectable
78
+ numberOfLines={expanded ? undefined : 3}>
79
+ {value}
80
+ </Text>
81
+ {isLong && (
82
+ <View style={styles.htExpandRow}>
83
+ <Text style={styles.htExpandText}>
84
+ {expanded ? '▲ less' : '▼ more'}
85
+ </Text>
86
+ </View>
87
+ )}
88
+ </Pressable>
89
+ <TouchableScale
90
+ onPress={() => copyToClipboard(value, headerKey)}
91
+ hitSlop={8}
92
+ style={styles.htCopyBtn}>
93
+ <CopyIcon color={AppColors.grayTextWeak} size={14} />
94
+ </TouchableScale>
95
+ </Animated.View>
96
+ );
97
+ });
98
+
99
+ const HeadersSection = ({
100
+ title,
101
+ headers,
102
+ search,
103
+ resetKey,
104
+ }: HeadersSectionProps) => {
105
+ const {t} = useTranslation();
106
+ const {toggleOpen, forceOpen, chevronStyle, bodyStyle} = useAccordion(
107
+ false,
108
+ 2400,
109
+ 300,
110
+ );
111
+
112
+ useEffect(() => {
113
+ forceOpen(false);
114
+ }, [resetKey]);
115
+
116
+ const entries = useMemo(
117
+ () => (headers ? Object.entries(headers) : []),
118
+ [headers],
119
+ );
120
+
121
+ const filtered = useMemo(() => {
122
+ if (!search) return entries;
123
+ const q = search.toLowerCase();
124
+ return entries.filter(
125
+ ([k, v]) => k.toLowerCase().includes(q) || v.toLowerCase().includes(q),
126
+ );
127
+ }, [entries, search]);
128
+
129
+ if (entries.length === 0) return null;
130
+
131
+ const isRequest =
132
+ title.toLowerCase().includes('request') ||
133
+ title.toLowerCase().includes('api');
134
+ const accentColor = isRequest ? AppColors.offerPurple : AppColors.greenColor;
135
+ const accentBg = isRequest
136
+ ? `${AppColors.offerPurple}10`
137
+ : `${AppColors.greenColor}10`;
138
+
139
+ return (
140
+ <View style={[styles.htCard, {borderLeftColor: accentColor}]}>
141
+ <Pressable onPress={toggleOpen} hitSlop={10}>
142
+ <View style={styles.htCardHeader}>
143
+ <View style={[styles.htIconWrap, {backgroundColor: accentBg}]}>
144
+ <HeadersIcon color={accentColor} />
145
+ </View>
146
+ <Text style={styles.htTitle}>{title}</Text>
147
+ <View
148
+ style={[
149
+ styles.htBadge,
150
+ {backgroundColor: accentBg, borderColor: accentColor},
151
+ ]}>
152
+ <Text style={[styles.htBadgeText, {color: accentColor}]}>
153
+ {entries.length}
154
+ </Text>
155
+ </View>
156
+ <View style={styles.htHeaderSpacer} />
157
+ <CopyButton value={headers} label={title} />
158
+ <View style={styles.htChevronBtn}>
159
+ <Animated.View style={chevronStyle}>
160
+ <ChevronIcon color={AppColors.grayTextStrong} size={14} />
161
+ </Animated.View>
162
+ </View>
163
+ </View>
164
+ </Pressable>
165
+
166
+ <Animated.View style={bodyStyle}>
167
+ <View style={styles.htColHeadRow}>
168
+ <Text style={[styles.htColHead, {width: '30%'}]}>{t('network.jsonViewer.key')}</Text>
169
+ <Text style={[styles.htColHead, {flex: 1}]}>{t('network.jsonViewer.value')}</Text>
170
+ </View>
171
+
172
+ {filtered.length > 0 ? (
173
+ filtered.map(([k, v], i) => (
174
+ <HeaderRow
175
+ key={k}
176
+ headerKey={k}
177
+ value={v}
178
+ isLast={i === filtered.length - 1}
179
+ index={i}
180
+ />
181
+ ))
182
+ ) : (
183
+ <View style={styles.htEmpty}>
184
+ <Text style={styles.htEmptyText}>{t('network.noMatchingHeaders')}</Text>
185
+ </View>
186
+ )}
187
+ </Animated.View>
188
+ </View>
189
+ );
190
+ };
191
+
192
+ export default HeadersSection;
@@ -0,0 +1,100 @@
1
+ import React from 'react';
2
+ import {Text, Linking} from 'react-native';
3
+
4
+ // Helpers
5
+ import {escapeRegex, handleOpenExternalLink} from '../helpers';
6
+
7
+ const HighlightText = React.memo(function HighlightText({
8
+ text,
9
+ search,
10
+ style,
11
+ highlightStyle,
12
+ detectLinks,
13
+ numberOfLines,
14
+ ...rest
15
+ }: any) {
16
+ // Optimization: For huge strings (> 20KB) with no active search, bypass all splitting/regex overhead
17
+ if (!text || (text.length > 20000 && !search && !detectLinks)) {
18
+ return (
19
+ <Text style={style} numberOfLines={numberOfLines} {...rest}>
20
+ {text}
21
+ </Text>
22
+ );
23
+ }
24
+
25
+ // Regex to detect absolute URLs
26
+ const URL_REGEX = /(https?:\/\/[^\s]+)/g;
27
+
28
+ const renderNormalOrHighlighted = (subText: string, keyPrefix: string) => {
29
+ if (!search) {
30
+ return <Text key={keyPrefix}>{subText}</Text>;
31
+ }
32
+ const regex = new RegExp(`(${escapeRegex(search)})`, 'gi');
33
+ const parts = subText.split(regex);
34
+ return (
35
+ <Text key={keyPrefix}>
36
+ {parts.map((part: any, i: number) =>
37
+ part.toLowerCase() === search.toLowerCase() ? (
38
+ <Text key={i} style={highlightStyle}>
39
+ {part}
40
+ </Text>
41
+ ) : (
42
+ <Text key={i}>{part}</Text>
43
+ ),
44
+ )}
45
+ </Text>
46
+ );
47
+ };
48
+
49
+ if (detectLinks && text && text.length < 20000) {
50
+ const parts = text.split(URL_REGEX);
51
+ return (
52
+ <Text style={style} numberOfLines={numberOfLines} {...rest}>
53
+ {parts.map((part: string, i: number) => {
54
+ if (part.match(URL_REGEX)) {
55
+ return (
56
+ <Text
57
+ key={`link-${i}`}
58
+ style={{
59
+ color: '#007AFF', // skyBlue link color
60
+ textDecorationLine: 'underline',
61
+ }}
62
+ onPress={() => {
63
+ handleOpenExternalLink(part);
64
+ }}>
65
+ {part}
66
+ </Text>
67
+ );
68
+ }
69
+ return renderNormalOrHighlighted(part, `text-${i}`);
70
+ })}
71
+ </Text>
72
+ );
73
+ }
74
+
75
+ if (!search)
76
+ return (
77
+ <Text style={style} numberOfLines={numberOfLines} {...rest}>
78
+ {text}
79
+ </Text>
80
+ );
81
+
82
+ const regex = new RegExp(`(${escapeRegex(search)})`, 'gi');
83
+ const parts = text.split(regex);
84
+
85
+ return (
86
+ <Text style={style} numberOfLines={numberOfLines} {...rest}>
87
+ {parts.map((part: any, i: number) =>
88
+ part.toLowerCase() === search.toLowerCase() ? (
89
+ <Text key={i} style={highlightStyle}>
90
+ {part}
91
+ </Text>
92
+ ) : (
93
+ <Text key={i}>{part}</Text>
94
+ ),
95
+ )}
96
+ </Text>
97
+ );
98
+ });
99
+
100
+ export default HighlightText;