react-native-inapp-inspector 2.0.0 → 2.0.1
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 +10 -24
- package/dist/commonjs/components/ConsoleLogCard.js +5 -5
- package/dist/commonjs/components/EndOfListFooter.js +1 -1
- package/dist/commonjs/components/Inspector/AnalyticsTab.js +19 -71
- package/dist/commonjs/components/Inspector/BundleTab.js +670 -188
- package/dist/commonjs/components/Inspector/ConsoleTab.js +109 -98
- package/dist/commonjs/components/Inspector/CrashTab.js +2 -1
- package/dist/commonjs/components/Inspector/InspectorHeader.js +102 -19
- package/dist/commonjs/components/Inspector/MainScreen.js +147 -17
- package/dist/commonjs/components/Inspector/NetworkTab.js +104 -20
- package/dist/commonjs/components/Inspector/SettingsPanel.js +1111 -1385
- package/dist/commonjs/components/Inspector/TabBar.js +3 -4
- package/dist/commonjs/components/JsonViewer.js +9 -4
- package/dist/commonjs/components/LogCard.js +31 -1
- package/dist/commonjs/components/LogSyntaxHighlighter.d.ts +16 -0
- package/dist/commonjs/components/LogSyntaxHighlighter.js +130 -0
- package/dist/commonjs/components/NetworkIcons.d.ts +2 -0
- package/dist/commonjs/components/NetworkIcons.js +10 -1
- package/dist/commonjs/components/Slider.d.ts +13 -0
- package/dist/commonjs/components/Slider.js +261 -0
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -1
- package/dist/commonjs/customHooks/analyticsLogger.js +1 -1
- package/dist/commonjs/customHooks/crashHandler.js +1 -1
- package/dist/commonjs/helpers/index.d.ts +1 -0
- package/dist/commonjs/helpers/index.js +15 -0
- package/dist/commonjs/helpers/searchQueryParser.d.ts +6 -0
- package/dist/commonjs/helpers/searchQueryParser.js +236 -0
- package/dist/commonjs/helpers/settingsStore.js +13 -13
- package/dist/commonjs/index.js +7 -20
- package/dist/commonjs/styles/index.js +35 -35
- package/dist/esm/components/ConsoleLogCard.js +5 -5
- package/dist/esm/components/EndOfListFooter.js +2 -2
- package/dist/esm/components/Inspector/AnalyticsTab.js +21 -73
- package/dist/esm/components/Inspector/BundleTab.js +670 -188
- package/dist/esm/components/Inspector/ConsoleTab.js +110 -99
- package/dist/esm/components/Inspector/CrashTab.js +2 -1
- package/dist/esm/components/Inspector/InspectorHeader.js +103 -20
- package/dist/esm/components/Inspector/MainScreen.js +115 -18
- package/dist/esm/components/Inspector/NetworkTab.js +105 -21
- package/dist/esm/components/Inspector/SettingsPanel.js +1114 -1388
- package/dist/esm/components/Inspector/TabBar.js +4 -5
- package/dist/esm/components/JsonViewer.js +9 -4
- package/dist/esm/components/LogCard.js +32 -2
- package/dist/esm/components/LogSyntaxHighlighter.d.ts +16 -0
- package/dist/esm/components/LogSyntaxHighlighter.js +123 -0
- package/dist/esm/components/NetworkIcons.d.ts +2 -0
- package/dist/esm/components/NetworkIcons.js +7 -0
- package/dist/esm/components/Slider.d.ts +13 -0
- package/dist/esm/components/Slider.js +222 -0
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -1
- package/dist/esm/customHooks/analyticsLogger.js +1 -1
- package/dist/esm/customHooks/crashHandler.js +1 -1
- package/dist/esm/helpers/index.d.ts +1 -0
- package/dist/esm/helpers/index.js +1 -0
- package/dist/esm/helpers/searchQueryParser.d.ts +6 -0
- package/dist/esm/helpers/searchQueryParser.js +233 -0
- package/dist/esm/helpers/settingsStore.js +13 -13
- package/dist/esm/index.js +8 -21
- package/dist/esm/styles/index.js +35 -35
- package/ios/NetworkInspectorModule.m +81 -41
- package/package.json +1 -1
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses query strings like `method:POST is:error slow:>1s status:200 auth`
|
|
3
|
+
* and checks whether a given NetworkLog matches all tokens.
|
|
4
|
+
*/
|
|
5
|
+
export function matchNetworkLogQuery(log, searchQuery, routePath) {
|
|
6
|
+
if (!searchQuery || searchQuery.trim().length === 0)
|
|
7
|
+
return true;
|
|
8
|
+
const rawTokens = searchQuery
|
|
9
|
+
.trim()
|
|
10
|
+
.match(/(?:[^\s"']+|"[^"]*"|'[^']*')+/g) || [];
|
|
11
|
+
if (rawTokens.length === 0)
|
|
12
|
+
return true;
|
|
13
|
+
const methodStr = (log.method || '').toLowerCase();
|
|
14
|
+
const urlStr = (log.url || '').toLowerCase();
|
|
15
|
+
const statusNum = typeof log.status === 'number' ? log.status : parseInt(String(log.status || 0), 10);
|
|
16
|
+
const statusStr = String(log.status ?? '');
|
|
17
|
+
const durationNum = log.duration || 0;
|
|
18
|
+
const clientStr = (log.client || '').toLowerCase();
|
|
19
|
+
const reqStr = typeof log.request === 'string' ? log.request : JSON.stringify(log.request || '');
|
|
20
|
+
const resStr = typeof log.response === 'string' ? log.response : JSON.stringify(log.response || '');
|
|
21
|
+
const reqHeadersStr = JSON.stringify(log.requestHeaders || '').toLowerCase();
|
|
22
|
+
const resHeadersStr = JSON.stringify(log.responseHeaders || '').toLowerCase();
|
|
23
|
+
const pathStr = routePath ? routePath.toLowerCase() : '';
|
|
24
|
+
const fullSearchCorpus = [
|
|
25
|
+
methodStr,
|
|
26
|
+
urlStr,
|
|
27
|
+
statusStr,
|
|
28
|
+
pathStr,
|
|
29
|
+
clientStr,
|
|
30
|
+
reqStr.toLowerCase(),
|
|
31
|
+
resStr.toLowerCase(),
|
|
32
|
+
reqHeadersStr,
|
|
33
|
+
resHeadersStr,
|
|
34
|
+
].join(' ');
|
|
35
|
+
for (const rawToken of rawTokens) {
|
|
36
|
+
const token = rawToken.replace(/^["']|["']$/g, '').trim();
|
|
37
|
+
if (!token)
|
|
38
|
+
continue;
|
|
39
|
+
const lowerToken = token.toLowerCase();
|
|
40
|
+
// 1. method:<VAL> or m:<VAL>
|
|
41
|
+
if (lowerToken.startsWith('method:') || lowerToken.startsWith('m:')) {
|
|
42
|
+
const targetMethod = lowerToken.replace(/^(method:|m:)/, '').trim();
|
|
43
|
+
if (targetMethod.startsWith('!')) {
|
|
44
|
+
if (methodStr === targetMethod.slice(1))
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
if (methodStr !== targetMethod)
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
// 2. status:<VAL> or s:<VAL>
|
|
54
|
+
if (lowerToken.startsWith('status:') || lowerToken.startsWith('s:')) {
|
|
55
|
+
const val = lowerToken.replace(/^(status:|s:)/, '').trim();
|
|
56
|
+
if (val.startsWith('>=')) {
|
|
57
|
+
const threshold = parseInt(val.slice(2), 10);
|
|
58
|
+
if (isNaN(threshold) || statusNum < threshold)
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
else if (val.startsWith('>')) {
|
|
62
|
+
const threshold = parseInt(val.slice(1), 10);
|
|
63
|
+
if (isNaN(threshold) || statusNum <= threshold)
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
else if (val.startsWith('<=')) {
|
|
67
|
+
const threshold = parseInt(val.slice(2), 10);
|
|
68
|
+
if (isNaN(threshold) || statusNum > threshold)
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
else if (val.startsWith('<')) {
|
|
72
|
+
const threshold = parseInt(val.slice(1), 10);
|
|
73
|
+
if (isNaN(threshold) || statusNum >= threshold)
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
else if (val.endsWith('xx') || val.endsWith('x')) {
|
|
77
|
+
const prefix = val.replace(/x/g, '');
|
|
78
|
+
if (!statusStr.startsWith(prefix))
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
const targetCode = parseInt(val, 10);
|
|
83
|
+
if (!isNaN(targetCode)) {
|
|
84
|
+
if (statusNum !== targetCode)
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
else if (!statusStr.includes(val)) {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
// 3. is:<FLAG>
|
|
94
|
+
if (lowerToken.startsWith('is:')) {
|
|
95
|
+
const flag = lowerToken.slice(3).trim();
|
|
96
|
+
if (flag === 'error' || flag === 'failed' || flag === 'err' || flag === 'fail') {
|
|
97
|
+
const isErr = log.status === 0 || log.status == null || statusNum >= 400;
|
|
98
|
+
if (!isErr)
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
else if (flag === 'success' || flag === 'ok' || flag === '2xx') {
|
|
102
|
+
const isSuccess = statusNum >= 200 && statusNum < 300;
|
|
103
|
+
if (!isSuccess)
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
else if (flag === 'slow') {
|
|
107
|
+
if (durationNum < 1000)
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
else if (flag === 'fast') {
|
|
111
|
+
if (durationNum >= 200)
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
else if (flag === 'graphql' || flag === 'gql') {
|
|
115
|
+
const isGql = urlStr.includes('graphql') ||
|
|
116
|
+
clientStr === 'graphql' ||
|
|
117
|
+
clientStr === 'apollo';
|
|
118
|
+
if (!isGql)
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
else if (flag === 'https') {
|
|
122
|
+
if (!urlStr.startsWith('https'))
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
else if (flag === 'http') {
|
|
126
|
+
if (urlStr.startsWith('https') || !urlStr.startsWith('http'))
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
else if (flag === 'json') {
|
|
130
|
+
const isJson = reqHeadersStr.includes('application/json') ||
|
|
131
|
+
resHeadersStr.includes('application/json') ||
|
|
132
|
+
urlStr.includes('.json');
|
|
133
|
+
if (!isJson)
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
// 4. slow:<DURATION> or dur:<DURATION> or duration:<DURATION>
|
|
139
|
+
if (lowerToken.startsWith('slow:') ||
|
|
140
|
+
lowerToken.startsWith('dur:') ||
|
|
141
|
+
lowerToken.startsWith('duration:')) {
|
|
142
|
+
const val = lowerToken.replace(/^(slow:|dur:|duration:)/, '').trim();
|
|
143
|
+
let thresholdMs = 0;
|
|
144
|
+
let isGreater = true;
|
|
145
|
+
let cleanVal = val;
|
|
146
|
+
if (val.startsWith('>=')) {
|
|
147
|
+
isGreater = true;
|
|
148
|
+
cleanVal = val.slice(2);
|
|
149
|
+
}
|
|
150
|
+
else if (val.startsWith('>')) {
|
|
151
|
+
isGreater = true;
|
|
152
|
+
cleanVal = val.slice(1);
|
|
153
|
+
}
|
|
154
|
+
else if (val.startsWith('<=')) {
|
|
155
|
+
isGreater = false;
|
|
156
|
+
cleanVal = val.slice(2);
|
|
157
|
+
}
|
|
158
|
+
else if (val.startsWith('<')) {
|
|
159
|
+
isGreater = false;
|
|
160
|
+
cleanVal = val.slice(1);
|
|
161
|
+
}
|
|
162
|
+
if (cleanVal.endsWith('s') && !cleanVal.endsWith('ms')) {
|
|
163
|
+
thresholdMs = parseFloat(cleanVal.slice(0, -1)) * 1000;
|
|
164
|
+
}
|
|
165
|
+
else if (cleanVal.endsWith('ms')) {
|
|
166
|
+
thresholdMs = parseFloat(cleanVal.slice(0, -2));
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
thresholdMs = parseFloat(cleanVal);
|
|
170
|
+
}
|
|
171
|
+
if (!isNaN(thresholdMs)) {
|
|
172
|
+
if (isGreater) {
|
|
173
|
+
if (durationNum < thresholdMs)
|
|
174
|
+
return false;
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
if (durationNum > thresholdMs)
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
// 5. client:<CLIENT> or c:<CLIENT>
|
|
184
|
+
if (lowerToken.startsWith('client:') || lowerToken.startsWith('c:')) {
|
|
185
|
+
const targetClient = lowerToken.replace(/^(client:|c:)/, '').trim();
|
|
186
|
+
if (!clientStr.includes(targetClient))
|
|
187
|
+
return false;
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
// 6. domain:<DOMAIN> or d:<DOMAIN>
|
|
191
|
+
if (lowerToken.startsWith('domain:') || lowerToken.startsWith('d:')) {
|
|
192
|
+
const targetDomain = lowerToken.replace(/^(domain:|d:)/, '').trim();
|
|
193
|
+
if (!urlStr.includes(targetDomain))
|
|
194
|
+
return false;
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
// 7. path:<PATH> or p:<PATH>
|
|
198
|
+
if (lowerToken.startsWith('path:') || lowerToken.startsWith('p:')) {
|
|
199
|
+
const targetPath = lowerToken.replace(/^(path:|p:)/, '').trim();
|
|
200
|
+
if (!urlStr.includes(targetPath) && !pathStr.includes(targetPath)) {
|
|
201
|
+
return false;
|
|
202
|
+
}
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
// 8. req:<TERM> or body:<TERM>
|
|
206
|
+
if (lowerToken.startsWith('req:') || lowerToken.startsWith('body:')) {
|
|
207
|
+
const target = lowerToken.replace(/^(req:|body:)/, '').trim();
|
|
208
|
+
if (!reqStr.toLowerCase().includes(target))
|
|
209
|
+
return false;
|
|
210
|
+
continue;
|
|
211
|
+
}
|
|
212
|
+
// 9. res:<TERM>
|
|
213
|
+
if (lowerToken.startsWith('res:')) {
|
|
214
|
+
const target = lowerToken.slice(4).trim();
|
|
215
|
+
if (!resStr.toLowerCase().includes(target))
|
|
216
|
+
return false;
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
// 10. header:<TERM> or h:<TERM>
|
|
220
|
+
if (lowerToken.startsWith('header:') || lowerToken.startsWith('h:')) {
|
|
221
|
+
const target = lowerToken.replace(/^(header:|h:)/, '').trim();
|
|
222
|
+
if (!reqHeadersStr.includes(target) && !resHeadersStr.includes(target)) {
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
// 11. Generic Plain Substring Match
|
|
228
|
+
if (!fullSearchCorpus.includes(lowerToken)) {
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return true;
|
|
233
|
+
}
|
|
@@ -101,19 +101,19 @@ export function getCustomStorage() {
|
|
|
101
101
|
export function calculateRamBasedLimits(freeRamMb) {
|
|
102
102
|
if (freeRamMb >= 3000) {
|
|
103
103
|
return {
|
|
104
|
-
maxNetworkLogs:
|
|
105
|
-
maxConsoleLogs:
|
|
106
|
-
maxAnalyticsEvents:
|
|
107
|
-
maxCrashRecords:
|
|
104
|
+
maxNetworkLogs: 100,
|
|
105
|
+
maxConsoleLogs: 100,
|
|
106
|
+
maxAnalyticsEvents: 75,
|
|
107
|
+
maxCrashRecords: 50,
|
|
108
108
|
profileName: 'High-End',
|
|
109
109
|
freeRamMb,
|
|
110
110
|
};
|
|
111
111
|
}
|
|
112
112
|
else if (freeRamMb >= 1500) {
|
|
113
113
|
return {
|
|
114
|
-
maxNetworkLogs:
|
|
115
|
-
maxConsoleLogs:
|
|
116
|
-
maxAnalyticsEvents:
|
|
114
|
+
maxNetworkLogs: 100,
|
|
115
|
+
maxConsoleLogs: 100,
|
|
116
|
+
maxAnalyticsEvents: 75,
|
|
117
117
|
maxCrashRecords: 50,
|
|
118
118
|
profileName: 'Standard',
|
|
119
119
|
freeRamMb,
|
|
@@ -121,9 +121,9 @@ export function calculateRamBasedLimits(freeRamMb) {
|
|
|
121
121
|
}
|
|
122
122
|
else if (freeRamMb >= 600) {
|
|
123
123
|
return {
|
|
124
|
-
maxNetworkLogs:
|
|
125
|
-
maxConsoleLogs:
|
|
126
|
-
maxAnalyticsEvents:
|
|
124
|
+
maxNetworkLogs: 100,
|
|
125
|
+
maxConsoleLogs: 100,
|
|
126
|
+
maxAnalyticsEvents: 50,
|
|
127
127
|
maxCrashRecords: 25,
|
|
128
128
|
profileName: 'Compact',
|
|
129
129
|
freeRamMb,
|
|
@@ -131,9 +131,9 @@ export function calculateRamBasedLimits(freeRamMb) {
|
|
|
131
131
|
}
|
|
132
132
|
else {
|
|
133
133
|
return {
|
|
134
|
-
maxNetworkLogs:
|
|
135
|
-
maxConsoleLogs:
|
|
136
|
-
maxAnalyticsEvents:
|
|
134
|
+
maxNetworkLogs: 50,
|
|
135
|
+
maxConsoleLogs: 50,
|
|
136
|
+
maxAnalyticsEvents: 25,
|
|
137
137
|
maxCrashRecords: 15,
|
|
138
138
|
profileName: 'Ultra-Light',
|
|
139
139
|
freeRamMb,
|
package/dist/esm/index.js
CHANGED
|
@@ -8,7 +8,7 @@ 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, } from './helpers';
|
|
11
|
+
import { formatDisplayUrl, getNavigationInfo, deduplicateLogs, getDomainColor, getEventCategory, matchNetworkLogQuery, } 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';
|
|
@@ -99,7 +99,7 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
|
|
|
99
99
|
// ─── Crash state ───────────────────────────────────────────────────────────
|
|
100
100
|
const [crashRecords, setCrashRecords] = useState(() => getCrashRecords());
|
|
101
101
|
const [selectedCrash, setSelectedCrash] = useState(null);
|
|
102
|
-
const [maxCrashLogs, setMaxCrashLogs] = useState(
|
|
102
|
+
const [maxCrashLogs, setMaxCrashLogs] = useState(50);
|
|
103
103
|
useEffect(() => {
|
|
104
104
|
setMaxCrashLogsLimit(maxCrashLogs);
|
|
105
105
|
}, [maxCrashLogs]);
|
|
@@ -131,7 +131,7 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
|
|
|
131
131
|
setLastReadCrashesCount(crashRecords.length);
|
|
132
132
|
}
|
|
133
133
|
}, [activeTab, crashRecords.length]);
|
|
134
|
-
const [maxConsoleLogs, setMaxConsoleLogs] = useState(
|
|
134
|
+
const [maxConsoleLogs, setMaxConsoleLogs] = useState(100);
|
|
135
135
|
const [showConsoleLevels, setShowConsoleLevels] = useState({
|
|
136
136
|
info: true,
|
|
137
137
|
warn: false,
|
|
@@ -176,7 +176,7 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
|
|
|
176
176
|
crash: false,
|
|
177
177
|
});
|
|
178
178
|
const [maxNetworkLogs, setMaxNetworkLogs] = useState(100);
|
|
179
|
-
const [maxAnalyticsEventsLimit, setMaxAnalyticsEventsLimit] = useState(
|
|
179
|
+
const [maxAnalyticsEventsLimit, setMaxAnalyticsEventsLimit] = useState(75);
|
|
180
180
|
const [isAutoRamLimitEnabled, setIsAutoRamLimitEnabled] = useState(true);
|
|
181
181
|
const [deviceFreeRamMb, setDeviceFreeRamMb] = useState(1800);
|
|
182
182
|
const [reduxAutoRefresh, setReduxAutoRefreshState] = useState(true);
|
|
@@ -1006,23 +1006,10 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
|
|
|
1006
1006
|
if (!matchedMethod)
|
|
1007
1007
|
return false;
|
|
1008
1008
|
}
|
|
1009
|
-
//
|
|
1009
|
+
// Advanced Search Query Engine Check (Supports method:POST, is:error, slow:>1s, status:200, headers, body, etc.)
|
|
1010
1010
|
if (search && search.trim().length > 0) {
|
|
1011
|
-
const queryTokens = search.trim().toLowerCase().split(/\s+/).filter(Boolean);
|
|
1012
1011
|
const routePath = logRouteMapRef.current.get(log.id)?.path || '';
|
|
1013
|
-
const
|
|
1014
|
-
const resStr = typeof log.response === 'string' ? log.response : JSON.stringify(log.response || '');
|
|
1015
|
-
const searchTarget = [
|
|
1016
|
-
log.method || '',
|
|
1017
|
-
log.url || '',
|
|
1018
|
-
String(log.status ?? ''),
|
|
1019
|
-
routePath,
|
|
1020
|
-
reqStr,
|
|
1021
|
-
resStr,
|
|
1022
|
-
JSON.stringify(log.requestHeaders || ''),
|
|
1023
|
-
JSON.stringify(log.responseHeaders || ''),
|
|
1024
|
-
].join(' ').toLowerCase();
|
|
1025
|
-
const isMatch = queryTokens.every(token => searchTarget.includes(token));
|
|
1012
|
+
const isMatch = matchNetworkLogQuery(log, search, routePath);
|
|
1026
1013
|
if (!isMatch)
|
|
1027
1014
|
return false;
|
|
1028
1015
|
}
|
|
@@ -1326,8 +1313,8 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
|
|
|
1326
1313
|
else if (analyticsFilters.sortBy === 'count_desc') {
|
|
1327
1314
|
result = [...result].sort((a, b) => (b.count || 1) - (a.count || 1));
|
|
1328
1315
|
}
|
|
1329
|
-
return result;
|
|
1330
|
-
}, [analyticsEvents, analyticsSearch, analyticsFilters]);
|
|
1316
|
+
return result.slice(0, maxAnalyticsEventsLimit);
|
|
1317
|
+
}, [analyticsEvents, analyticsSearch, analyticsFilters, maxAnalyticsEventsLimit]);
|
|
1331
1318
|
const filteredConsoleLogs = useMemo(() => {
|
|
1332
1319
|
let result = visibleConsoleLogs;
|
|
1333
1320
|
// Filters check
|
package/dist/esm/styles/index.js
CHANGED
|
@@ -7,10 +7,10 @@ export const getRawStyles = (colors) => ({
|
|
|
7
7
|
header: {
|
|
8
8
|
flexDirection: 'row',
|
|
9
9
|
alignItems: 'center',
|
|
10
|
-
paddingHorizontal:
|
|
11
|
-
paddingVertical:
|
|
10
|
+
paddingHorizontal: 10,
|
|
11
|
+
paddingVertical: 8,
|
|
12
12
|
zIndex: 10,
|
|
13
|
-
minHeight:
|
|
13
|
+
minHeight: 52,
|
|
14
14
|
shadowColor: colors.black,
|
|
15
15
|
shadowOffset: { width: 0, height: 2 },
|
|
16
16
|
shadowOpacity: 0.08,
|
|
@@ -34,7 +34,7 @@ export const getRawStyles = (colors) => ({
|
|
|
34
34
|
flexDirection: 'row',
|
|
35
35
|
alignItems: 'center',
|
|
36
36
|
justifyContent: 'flex-end',
|
|
37
|
-
gap:
|
|
37
|
+
gap: 5,
|
|
38
38
|
},
|
|
39
39
|
headerTitle: {
|
|
40
40
|
fontFamily: AppFonts.interBold,
|
|
@@ -136,7 +136,7 @@ export const getRawStyles = (colors) => ({
|
|
|
136
136
|
fontSize: 12,
|
|
137
137
|
letterSpacing: 0.2,
|
|
138
138
|
},
|
|
139
|
-
listContent: { paddingBottom:
|
|
139
|
+
listContent: { paddingBottom: Platform.OS === 'ios' ? 44 : 32 },
|
|
140
140
|
// #2 — scroll-to-top button, always shown at the bottom right.
|
|
141
141
|
scrollTopBtn: {
|
|
142
142
|
position: 'absolute',
|
|
@@ -157,9 +157,9 @@ export const getRawStyles = (colors) => ({
|
|
|
157
157
|
},
|
|
158
158
|
detailScroll: { flex: 1 },
|
|
159
159
|
closeButtonSquare: {
|
|
160
|
-
width:
|
|
161
|
-
height:
|
|
162
|
-
borderRadius:
|
|
160
|
+
width: 30,
|
|
161
|
+
height: 30,
|
|
162
|
+
borderRadius: 7,
|
|
163
163
|
backgroundColor: `${colors.white}2B`,
|
|
164
164
|
alignItems: 'center',
|
|
165
165
|
justifyContent: 'center',
|
|
@@ -378,12 +378,12 @@ export const getRawStyles = (colors) => ({
|
|
|
378
378
|
},
|
|
379
379
|
clearBtn: { padding: 4 },
|
|
380
380
|
domainHeaderCard: {
|
|
381
|
-
marginHorizontal:
|
|
382
|
-
marginTop:
|
|
381
|
+
marginHorizontal: 8,
|
|
382
|
+
marginTop: 10,
|
|
383
383
|
marginBottom: 4,
|
|
384
|
-
paddingHorizontal:
|
|
385
|
-
paddingVertical:
|
|
386
|
-
borderRadius:
|
|
384
|
+
paddingHorizontal: 8,
|
|
385
|
+
paddingVertical: 7,
|
|
386
|
+
borderRadius: 9,
|
|
387
387
|
backgroundColor: colors.grayBackground,
|
|
388
388
|
borderWidth: 1,
|
|
389
389
|
borderColor: colors.grayBorderSecondary,
|
|
@@ -405,18 +405,18 @@ export const getRawStyles = (colors) => ({
|
|
|
405
405
|
flex: 1,
|
|
406
406
|
minWidth: 0,
|
|
407
407
|
marginRight: 6,
|
|
408
|
-
gap:
|
|
408
|
+
gap: 6,
|
|
409
409
|
},
|
|
410
410
|
domainIconWrap: {
|
|
411
|
-
width:
|
|
412
|
-
height:
|
|
413
|
-
borderRadius:
|
|
411
|
+
width: 22,
|
|
412
|
+
height: 22,
|
|
413
|
+
borderRadius: 5,
|
|
414
414
|
alignItems: 'center',
|
|
415
415
|
justifyContent: 'center',
|
|
416
416
|
},
|
|
417
417
|
domainTitleText: {
|
|
418
418
|
fontFamily: AppFonts.interBold,
|
|
419
|
-
fontSize: 13
|
|
419
|
+
fontSize: 13,
|
|
420
420
|
fontWeight: '700',
|
|
421
421
|
color: colors.primaryBlack,
|
|
422
422
|
textTransform: 'capitalize',
|
|
@@ -478,23 +478,23 @@ export const getRawStyles = (colors) => ({
|
|
|
478
478
|
flexDirection: 'row',
|
|
479
479
|
alignItems: 'center',
|
|
480
480
|
gap: 3,
|
|
481
|
-
paddingHorizontal:
|
|
482
|
-
paddingVertical:
|
|
483
|
-
borderRadius:
|
|
481
|
+
paddingHorizontal: 5,
|
|
482
|
+
paddingVertical: 2.5,
|
|
483
|
+
borderRadius: 5,
|
|
484
484
|
borderWidth: 1,
|
|
485
485
|
borderColor: colors.grayBorderSecondary,
|
|
486
486
|
backgroundColor: colors.primaryLight,
|
|
487
487
|
},
|
|
488
488
|
domainStatText: {
|
|
489
489
|
fontFamily: AppFonts.interBold,
|
|
490
|
-
fontSize:
|
|
490
|
+
fontSize: 9.5,
|
|
491
491
|
},
|
|
492
492
|
treeNodeRow: {
|
|
493
493
|
flexDirection: 'row',
|
|
494
494
|
alignItems: 'stretch',
|
|
495
|
-
marginHorizontal:
|
|
496
|
-
paddingRight:
|
|
497
|
-
paddingLeft:
|
|
495
|
+
marginHorizontal: 8,
|
|
496
|
+
paddingRight: 4,
|
|
497
|
+
paddingLeft: 0,
|
|
498
498
|
backgroundColor: colors.grayBackground,
|
|
499
499
|
borderLeftWidth: 1,
|
|
500
500
|
borderRightWidth: 1,
|
|
@@ -508,14 +508,14 @@ export const getRawStyles = (colors) => ({
|
|
|
508
508
|
paddingBottom: 6,
|
|
509
509
|
},
|
|
510
510
|
treeLines: {
|
|
511
|
-
width:
|
|
511
|
+
width: 14,
|
|
512
512
|
position: 'relative',
|
|
513
513
|
},
|
|
514
514
|
modernTreeLine: {
|
|
515
515
|
position: 'absolute',
|
|
516
|
-
left:
|
|
516
|
+
left: 7,
|
|
517
517
|
top: 0,
|
|
518
|
-
width:
|
|
518
|
+
width: 7,
|
|
519
519
|
height: '100%',
|
|
520
520
|
borderLeftWidth: 1.5,
|
|
521
521
|
opacity: 0.5,
|
|
@@ -523,19 +523,19 @@ export const getRawStyles = (colors) => ({
|
|
|
523
523
|
modernTreeLineLast: {
|
|
524
524
|
height: '50%',
|
|
525
525
|
borderBottomWidth: 1.5,
|
|
526
|
-
borderBottomLeftRadius:
|
|
526
|
+
borderBottomLeftRadius: 8,
|
|
527
527
|
},
|
|
528
528
|
modernTreeBranch: {
|
|
529
529
|
position: 'absolute',
|
|
530
|
-
left:
|
|
530
|
+
left: 7,
|
|
531
531
|
top: '50%',
|
|
532
|
-
width:
|
|
532
|
+
width: 7,
|
|
533
533
|
borderTopWidth: 1.5,
|
|
534
534
|
opacity: 0.5,
|
|
535
535
|
},
|
|
536
536
|
treeCardWrapper: {
|
|
537
537
|
flex: 1,
|
|
538
|
-
paddingVertical: 3
|
|
538
|
+
paddingVertical: 3,
|
|
539
539
|
},
|
|
540
540
|
card: {
|
|
541
541
|
marginHorizontal: 0,
|
|
@@ -575,10 +575,10 @@ export const getRawStyles = (colors) => ({
|
|
|
575
575
|
gap: 5,
|
|
576
576
|
},
|
|
577
577
|
smallCheckbox: {
|
|
578
|
-
width:
|
|
579
|
-
height:
|
|
578
|
+
width: 15,
|
|
579
|
+
height: 15,
|
|
580
580
|
borderRadius: 4,
|
|
581
|
-
borderWidth: 1.
|
|
581
|
+
borderWidth: 1.8,
|
|
582
582
|
borderColor: colors.grayTextWeak,
|
|
583
583
|
alignItems: 'center',
|
|
584
584
|
justifyContent: 'center',
|