react-native-inapp-inspector 2.3.24 → 2.4.0
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/README.md +26 -5
- package/dist/commonjs/components/AnalyticsDetail.js +15 -12
- package/dist/commonjs/components/AnalyticsEventCard.js +11 -8
- package/dist/commonjs/components/AppHeaderLogo.js +4 -6
- package/dist/commonjs/components/ConsoleLogCard.d.ts +1 -0
- package/dist/commonjs/components/ConsoleLogCard.js +92 -80
- package/dist/commonjs/components/EndOfListFooter.d.ts +5 -1
- package/dist/commonjs/components/EndOfListFooter.js +27 -5
- package/dist/commonjs/components/Inspector/AnalyticsFilterModal.js +1 -1
- package/dist/commonjs/components/Inspector/AnalyticsTab.js +27 -299
- package/dist/commonjs/components/Inspector/ConsoleTab.js +36 -94
- package/dist/commonjs/components/Inspector/CrashDetail.js +11 -10
- package/dist/commonjs/components/Inspector/CrashTab.js +43 -33
- package/dist/commonjs/components/Inspector/DebuggingTab.js +13 -13
- package/dist/commonjs/components/Inspector/DeviceInfoTab.js +107 -71
- package/dist/commonjs/components/Inspector/FabLauncher.js +8 -9
- package/dist/commonjs/components/Inspector/InspectorHeader.js +93 -70
- package/dist/commonjs/components/Inspector/LogDetail.js +10 -7
- package/dist/commonjs/components/Inspector/MainScreen.js +66 -30
- package/dist/commonjs/components/Inspector/MediaGalleryTab.js +1 -1
- package/dist/commonjs/components/Inspector/MediaPreviewModal.js +3 -3
- package/dist/commonjs/components/Inspector/NetworkDetail.js +29 -28
- package/dist/commonjs/components/Inspector/NetworkFilterModal.js +1 -1
- package/dist/commonjs/components/Inspector/NetworkTab.js +87 -85
- package/dist/commonjs/components/Inspector/NpmStarPrompt.js +3 -3
- package/dist/commonjs/components/Inspector/NpmUpdateToast.js +21 -22
- package/dist/commonjs/components/Inspector/PushCard.d.ts +4 -0
- package/dist/commonjs/components/Inspector/PushCard.js +89 -0
- package/dist/commonjs/components/Inspector/PushDetail.d.ts +4 -0
- package/dist/commonjs/components/Inspector/PushDetail.js +190 -0
- package/dist/commonjs/components/Inspector/PushTab.d.ts +3 -0
- package/dist/commonjs/components/Inspector/PushTab.js +45 -0
- package/dist/commonjs/components/Inspector/ReduxDetail.js +16 -13
- package/dist/commonjs/components/Inspector/ReduxTab.js +109 -106
- package/dist/commonjs/components/Inspector/SettingsPanel.js +230 -134
- package/dist/commonjs/components/Inspector/StorageTab.js +55 -51
- package/dist/commonjs/components/Inspector/TabBar.js +30 -26
- package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +2 -2
- package/dist/commonjs/components/JsonViewer.js +151 -159
- package/dist/commonjs/components/LogCard.js +34 -38
- package/dist/commonjs/components/LogSyntaxHighlighter.js +3 -3
- package/dist/commonjs/components/ModuleErrorBoundary.d.ts +24 -0
- package/dist/commonjs/components/ModuleErrorBoundary.js +33 -0
- package/dist/commonjs/components/NetworkIcons.d.ts +3 -3
- package/dist/commonjs/components/NetworkIcons.js +10 -6
- package/dist/commonjs/components/SegmentedTabs.d.ts +8 -2
- package/dist/commonjs/components/SegmentedTabs.js +11 -7
- package/dist/commonjs/components/ShareButton.d.ts +11 -0
- package/dist/commonjs/components/ShareButton.js +6 -0
- package/dist/commonjs/constants/index.js +1 -1
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -1
- package/dist/commonjs/customHooks/crashHandler.js +4 -4
- package/dist/commonjs/customHooks/networkLogger.js +1 -2
- package/dist/commonjs/customHooks/pushNotificationLogger.d.ts +19 -0
- package/dist/commonjs/customHooks/pushNotificationLogger.js +1 -0
- package/dist/commonjs/helpers/index.d.ts +6 -0
- package/dist/commonjs/helpers/index.js +4 -4
- package/dist/commonjs/helpers/memoryManager.d.ts +2 -2
- package/dist/commonjs/helpers/memoryManager.js +1 -1
- package/dist/commonjs/helpers/remoteConfig.js +1 -1
- package/dist/commonjs/helpers/settingsStore.d.ts +1 -0
- package/dist/commonjs/helpers/settingsStore.js +1 -1
- package/dist/commonjs/helpers/shareFormatter.d.ts +13 -0
- package/dist/commonjs/helpers/shareFormatter.js +7 -0
- package/dist/commonjs/i18n/index.d.ts +35 -0
- package/dist/commonjs/i18n/index.js +1 -1
- package/dist/commonjs/i18n/locales/ar.json +1 -0
- package/dist/commonjs/i18n/locales/de.json +1 -0
- package/dist/commonjs/i18n/locales/en.json +1 -1
- package/dist/commonjs/i18n/locales/es.json +1 -0
- package/dist/commonjs/i18n/locales/fr.json +1 -0
- package/dist/commonjs/i18n/locales/hi.json +1 -0
- package/dist/commonjs/i18n/locales/ja.json +1 -0
- package/dist/commonjs/i18n/locales/ko.json +1 -0
- package/dist/commonjs/i18n/locales/pt.json +1 -0
- package/dist/commonjs/i18n/locales/ru.json +1 -0
- package/dist/commonjs/i18n/locales/zh.json +1 -0
- package/dist/commonjs/index.d.ts +6 -5
- package/dist/commonjs/index.js +4 -4
- package/dist/commonjs/push.d.ts +4 -0
- package/dist/commonjs/push.js +1 -0
- package/dist/commonjs/styles/AppColors.d.ts +40 -0
- package/dist/commonjs/styles/AppColors.js +1 -1
- package/dist/commonjs/styles/index.js +1 -1
- package/dist/commonjs/types/enums.d.ts +30 -20
- package/dist/commonjs/types/enums.js +1 -1
- package/dist/commonjs/types/index.d.ts +10 -0
- package/dist/commonjs/types/interfaces.d.ts +63 -7
- package/dist/esm/components/AnalyticsDetail.js +84 -81
- package/dist/esm/components/AnalyticsEventCard.js +20 -17
- package/dist/esm/components/AppHeaderLogo.js +5 -7
- package/dist/esm/components/ConsoleLogCard.d.ts +1 -0
- package/dist/esm/components/ConsoleLogCard.js +98 -86
- package/dist/esm/components/EndOfListFooter.d.ts +5 -1
- package/dist/esm/components/EndOfListFooter.js +36 -14
- package/dist/esm/components/Inspector/AnalyticsFilterModal.js +14 -14
- package/dist/esm/components/Inspector/AnalyticsTab.js +44 -316
- package/dist/esm/components/Inspector/ConsoleTab.js +55 -113
- package/dist/esm/components/Inspector/CrashDetail.js +53 -52
- package/dist/esm/components/Inspector/CrashTab.js +74 -64
- package/dist/esm/components/Inspector/DebuggingTab.js +33 -33
- package/dist/esm/components/Inspector/DeviceInfoTab.js +174 -138
- package/dist/esm/components/Inspector/FabLauncher.js +41 -42
- package/dist/esm/components/Inspector/InspectorHeader.js +138 -115
- package/dist/esm/components/Inspector/LogDetail.js +24 -21
- package/dist/esm/components/Inspector/MainScreen.js +98 -62
- package/dist/esm/components/Inspector/MediaGalleryTab.js +1 -1
- package/dist/esm/components/Inspector/MediaPreviewModal.js +31 -31
- package/dist/esm/components/Inspector/NetworkDetail.js +88 -87
- package/dist/esm/components/Inspector/NetworkFilterModal.js +8 -8
- package/dist/esm/components/Inspector/NetworkTab.js +132 -130
- package/dist/esm/components/Inspector/NpmStarPrompt.js +42 -42
- package/dist/esm/components/Inspector/NpmUpdateToast.js +45 -46
- package/dist/esm/components/Inspector/PushCard.d.ts +4 -0
- package/dist/esm/components/Inspector/PushCard.js +89 -0
- package/dist/esm/components/Inspector/PushDetail.d.ts +4 -0
- package/dist/esm/components/Inspector/PushDetail.js +190 -0
- package/dist/esm/components/Inspector/PushTab.d.ts +3 -0
- package/dist/esm/components/Inspector/PushTab.js +45 -0
- package/dist/esm/components/Inspector/ReduxDetail.js +40 -37
- package/dist/esm/components/Inspector/ReduxTab.js +155 -152
- package/dist/esm/components/Inspector/SettingsPanel.js +380 -284
- package/dist/esm/components/Inspector/StorageTab.js +177 -173
- package/dist/esm/components/Inspector/TabBar.js +38 -34
- package/dist/esm/components/Inspector/UpdateAvailableModal.js +1 -1
- package/dist/esm/components/JsonViewer.js +161 -169
- package/dist/esm/components/LogCard.js +38 -42
- package/dist/esm/components/LogSyntaxHighlighter.js +1 -1
- package/dist/esm/components/ModuleErrorBoundary.d.ts +24 -0
- package/dist/esm/components/ModuleErrorBoundary.js +33 -0
- package/dist/esm/components/NetworkIcons.d.ts +3 -3
- package/dist/esm/components/NetworkIcons.js +7 -3
- package/dist/esm/components/SegmentedTabs.d.ts +8 -2
- package/dist/esm/components/SegmentedTabs.js +12 -8
- package/dist/esm/components/ShareButton.d.ts +11 -0
- package/dist/esm/components/ShareButton.js +6 -0
- package/dist/esm/constants/index.js +1 -1
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -1
- package/dist/esm/customHooks/crashHandler.js +6 -6
- package/dist/esm/customHooks/networkLogger.js +1 -2
- package/dist/esm/customHooks/pushNotificationLogger.d.ts +19 -0
- package/dist/esm/customHooks/pushNotificationLogger.js +1 -0
- package/dist/esm/helpers/index.d.ts +6 -0
- package/dist/esm/helpers/index.js +4 -4
- package/dist/esm/helpers/memoryManager.d.ts +2 -2
- package/dist/esm/helpers/memoryManager.js +1 -1
- package/dist/esm/helpers/remoteConfig.js +1 -1
- package/dist/esm/helpers/settingsStore.d.ts +1 -0
- package/dist/esm/helpers/settingsStore.js +1 -1
- package/dist/esm/helpers/shareFormatter.d.ts +13 -0
- package/dist/esm/helpers/shareFormatter.js +7 -0
- package/dist/esm/i18n/index.d.ts +35 -0
- package/dist/esm/i18n/index.js +1 -1
- package/dist/esm/i18n/locales/ar.json +1 -0
- package/dist/esm/i18n/locales/de.json +1 -0
- package/dist/esm/i18n/locales/en.json +1 -1
- package/dist/esm/i18n/locales/es.json +1 -0
- package/dist/esm/i18n/locales/fr.json +1 -0
- package/dist/esm/i18n/locales/hi.json +1 -0
- package/dist/esm/i18n/locales/ja.json +1 -0
- package/dist/esm/i18n/locales/ko.json +1 -0
- package/dist/esm/i18n/locales/pt.json +1 -0
- package/dist/esm/i18n/locales/ru.json +1 -0
- package/dist/esm/i18n/locales/zh.json +1 -0
- package/dist/esm/index.d.ts +6 -5
- package/dist/esm/index.js +7 -7
- package/dist/esm/push.d.ts +4 -0
- package/dist/esm/push.js +1 -0
- package/dist/esm/styles/AppColors.d.ts +40 -0
- package/dist/esm/styles/AppColors.js +1 -1
- package/dist/esm/styles/index.js +1 -1
- package/dist/esm/types/enums.d.ts +30 -20
- package/dist/esm/types/enums.js +1 -1
- package/dist/esm/types/index.d.ts +10 -0
- package/dist/esm/types/interfaces.d.ts +63 -7
- package/package.json +53 -24
- package/src/native/NativeInspector.ts +0 -1
- package/dist/commonjs/bundle.d.ts +0 -2
- package/dist/commonjs/bundle.js +0 -1
- package/dist/commonjs/components/BrandSquareIcon.d.ts +0 -5
- package/dist/commonjs/components/BrandSquareIcon.js +0 -112
- package/dist/commonjs/components/Inspector/BundleTab.d.ts +0 -48
- package/dist/commonjs/components/Inspector/BundleTab.js +0 -1297
- package/dist/commonjs/components/Inspector/PerformanceTab.d.ts +0 -27
- package/dist/commonjs/components/Inspector/PerformanceTab.js +0 -454
- package/dist/commonjs/customHooks/bundleAnalyzer.d.ts +0 -115
- package/dist/commonjs/customHooks/bundleAnalyzer.js +0 -1
- package/dist/commonjs/customHooks/performanceTracker.d.ts +0 -144
- package/dist/commonjs/customHooks/performanceTracker.js +0 -63
- package/dist/commonjs/performance.d.ts +0 -2
- package/dist/commonjs/performance.js +0 -1
- package/dist/esm/bundle.d.ts +0 -2
- package/dist/esm/bundle.js +0 -1
- package/dist/esm/components/BrandSquareIcon.d.ts +0 -5
- package/dist/esm/components/BrandSquareIcon.js +0 -112
- package/dist/esm/components/Inspector/BundleTab.d.ts +0 -48
- package/dist/esm/components/Inspector/BundleTab.js +0 -1297
- package/dist/esm/components/Inspector/PerformanceTab.d.ts +0 -27
- package/dist/esm/components/Inspector/PerformanceTab.js +0 -454
- package/dist/esm/customHooks/bundleAnalyzer.d.ts +0 -115
- package/dist/esm/customHooks/bundleAnalyzer.js +0 -1
- package/dist/esm/customHooks/performanceTracker.d.ts +0 -144
- package/dist/esm/customHooks/performanceTracker.js +0 -63
- package/dist/esm/performance.d.ts +0 -2
- package/dist/esm/performance.js +0 -1
|
@@ -1,185 +1,177 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
<
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import Q,{useState as D,useEffect as le,useMemo as G,useCallback as He}from"react";import{ScrollView as O,View as T,Text as V,StyleSheet as Ie,TouchableOpacity as Te,Platform as We}from"react-native";import{useTranslation as Ae}from"../i18n";import Pe from"./TreeNode";import X from"./HighlightText";import E from"./TouchableScale";import{PrettyIcon as Ne,RawIcon as Oe,TableIcon as De,ChevronIcon as Ee,CopyIcon as Le,CheckIcon as Ke}from"./NetworkIcons";import{AppColors as t}from"../styles/AppColors";import{AppFonts as N}from"../styles/AppFonts";import{getSize as Me,copyToClipboard as ve}from"../helpers";import{triggerNativeHaptic as Je}from"../native/NativeInspector";const I=We.select({ios:"Menlo",android:"monospace",default:"monospace"}),$e=o=>o===null?{label:"null",color:t.errorColor,bg:t.errorCardBg,border:t.errorBorder}:o===void 0?{label:"undef",color:t.errorColor,bg:t.errorCardBg,border:t.errorBorder}:Array.isArray(o)?{label:`arr[${o.length}]`,color:t.blue600,bg:t.blueBg,border:t.sky100}:typeof o=="object"?{label:`obj{${Object.keys(o).length}}`,color:t.violet600,bg:t.purple50,border:t.purple200}:typeof o=="number"?{label:"num",color:t.amber600,bg:t.amber100,border:t.amber200}:typeof o=="boolean"?{label:"bool",color:t.pink600,bg:t.roseBg,border:t.roseBorder}:{label:"str",color:t.emerald600,bg:t.emeraldBg,border:t.emeraldBorder},Se=Q.memo(({text:o,search:S,detectLinks:A})=>{const B=o.trim();let F=e.rawMonospaceText;return B.startsWith('"')?F=e.syntaxString:B==="null"||B.startsWith("null,")||B==="undefined"?F=e.syntaxNull:B==="true"||B.startsWith("true,")||B==="false"||B.startsWith("false,")?F=e.syntaxBoolean:/^-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?,?$/.test(B)&&(F=e.syntaxNumber),<X text={o}search={S}detectLinks={A}style={F}selectable={!0}highlightStyle={e.highlight}/>}),Ge=Q.memo(({line:o,search:S,detectLinks:A})=>{const B=o.match(/^(\s+)(.*)$/),F=B?B[1]:"",P=B?B[2]:o,j=F?F.replace(/ /g,"\xB7 ").replace(/ /g,"\xB7"):"",z=P.match(/^("(?:[^"\\]|\\.)*")(\s*:\s*)(.*)$/);if(z){const k=z[1],K=z[2],H=z[3];return<T style={e.rawLineContentRow}>
|
|
2
|
+
{j.length>0&&<V style={e.indentDots}>{j}</V>}
|
|
3
|
+
<X text={k}search={S}style={e.syntaxKey}selectable={!0}highlightStyle={e.highlight}/>
|
|
4
|
+
<V style={e.syntaxColon}>{K}</V>
|
|
5
|
+
<Se text={H}search={S}detectLinks={A}/>
|
|
6
|
+
</T>}return<T style={e.rawLineContentRow}>
|
|
7
|
+
{j.length>0&&<V style={e.indentDots}>{j}</V>}
|
|
8
|
+
<Se text={P}search={S}detectLinks={A}/>
|
|
9
|
+
</T>}),Ye=Q.memo(({itemKey:o,val:S,search:A,index:B})=>{const[F,P]=D(!1),j=S!==null&&typeof S=="object",z=$e(S);let k="";if(S===null)k="null";else if(S===void 0)k="undefined";else if(j)try{k=JSON.stringify(S,null,2)}catch{k=String(S)}else k=String(S);const K=k.includes(`
|
|
10
|
+
`)||k.length>80;return<T style={[e.tableRow,B%2===1&&e.tableRowAlt]}>
|
|
11
|
+
|
|
12
|
+
<T style={e.tableColKey}>
|
|
13
|
+
<X text={o}search={A}style={e.tableCellKey}highlightStyle={e.highlight}/>
|
|
14
|
+
<T style={[e.typePill,{backgroundColor:z.bg,borderColor:z.border}]}>
|
|
15
|
+
<V style={[e.typePillText,{color:z.color}]}>
|
|
16
|
+
{z.label}
|
|
17
|
+
</V>
|
|
9
18
|
</T>
|
|
10
|
-
</
|
|
11
|
-
</F>
|
|
19
|
+
</T>
|
|
12
20
|
|
|
13
|
-
|
|
14
|
-
<F style={e.tableColVal}>
|
|
15
|
-
<F style={P?e.tableCodeBox:void 0}>
|
|
16
|
-
<L text={V}search={O}style={[e.tableCellValue,f==null?e.syntaxNull:void 0,typeof f=="number"?e.syntaxNumber:void 0,typeof f=="boolean"?e.syntaxBoolean:void 0,typeof f=="string"?e.syntaxString:void 0]}highlightStyle={e.highlight}numberOfLines={k?void 0:3}selectable={!0}/>
|
|
17
|
-
</F>
|
|
18
|
-
{_&&<A onPress={()=>z(R=>!R)}hitSlop={6}style={e.showMoreBtn}>
|
|
19
|
-
<T style={e.showMoreText}>
|
|
20
|
-
{k?"Collapse":"Expand"}
|
|
21
|
-
</T>
|
|
22
|
-
<De direction={k?"up":"down"}size={9}color="#4F46E5"/>
|
|
23
|
-
</A>}
|
|
24
|
-
</F>
|
|
25
|
-
</F>}),Pe=ge.memo(({data:t,search:f,forceOpen:O,defaultExpandDepth:$=1,wrap:k,fullHeight:z=!1,maxHeight:P,mode:E,onModeChange:V,hideTabs:_=!1})=>{const{t:R}=Te(),[ye,te]=H(E??"raw"),[oe,re]=H(!1),[N,le]=H(k??!1),[G,ne]=H(O),S=V&&E?E:ye,Y=m=>{te(m),V&&V(m)};ee(()=>{k!==void 0&&le(k)},[k]),ee(()=>{O!==void 0&&ne(O)},[O]);const ie=v(()=>{if(t==null)return"";if(typeof t=="string")return t;try{return JSON.stringify(t,null,2)??""}catch{return String(t)||""}},[t]),D=v(()=>{if(typeof t=="string")return t;try{return JSON.stringify(t)??""}catch{return String(t)||""}},[t]),pe=D,[be,ae]=H(!1),se=5e4,q=typeof D=="string"?D:"",U=q.length>se&&!be,Q=U?q.slice(0,se):q,Ne=typeof ie=="string"?ie:"",K=v(()=>Q?Q.split(`
|
|
26
|
-
`):[""],[Q]),ce=K.length,Fe=v(()=>Ie(t),[t]);ee(()=>{E&&te(E)},[E]);const fe=()=>{Oe("success"),Ae(pe||D,"JSON"),re(!0),setTimeout(()=>re(!1),1200)},X=typeof t=="object"&&t!==null,he=t==null||X&&Object.keys(t).length===0,de=()=>{if(!X)return<F style={e.tableRow}>
|
|
27
|
-
<F style={e.tableColKey}>
|
|
28
|
-
<T style={e.tableCellKey}>{R("network.jsonViewer.value")}</T>
|
|
29
|
-
</F>
|
|
30
|
-
<F style={e.tableColVal}>
|
|
31
|
-
<T style={e.tableCellValue}>{String(t)}</T>
|
|
32
|
-
</F>
|
|
33
|
-
</F>;let m=Object.keys(t);if(f&&f.trim().length>0){const x=f.trim().toLowerCase();m=m.filter(B=>{const W=t[B],M=typeof W=="object"&&W!==null?JSON.stringify(W):String(W);return B.toLowerCase().includes(x)||M.toLowerCase().includes(x)})}return m.length===0?<F style={e.emptyContainer}>
|
|
34
|
-
<T style={e.emptyText}>
|
|
35
|
-
{f&&f.trim().length>0?"No matching keys or values found":R("network.jsonViewer.emptyTable")}
|
|
36
|
-
</T>
|
|
37
|
-
</F>:<F style={e.tableView}>
|
|
38
|
-
|
|
39
|
-
<F style={e.tableHeaderRow}>
|
|
40
|
-
<T style={[e.tableHeaderCell,{flex:2}]}>KEY / PROPERTY</T>
|
|
41
|
-
<T style={[e.tableHeaderCell,{flex:3}]}>VALUE</T>
|
|
42
|
-
</F>
|
|
43
|
-
{m.map((x,B)=><Le key={x}index={B}itemKey={x}val={t[x]}search={f}/>)}
|
|
44
|
-
</F>},J=<Ce data={t}search={f}forceOpen={G}defaultExpandDepth={G?99:$}/>;return<F style={[e.container,z&&{flex:1}]}>
|
|
45
|
-
|
|
46
|
-
<F style={e.snippetHeader}>
|
|
47
21
|
|
|
48
|
-
<
|
|
49
|
-
<
|
|
50
|
-
<
|
|
51
|
-
</
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
22
|
+
<T style={e.tableColVal}>
|
|
23
|
+
<T style={j?e.tableCodeBox:void 0}>
|
|
24
|
+
<X text={k}search={A}style={[e.tableCellValue,S==null?e.syntaxNull:void 0,typeof S=="number"?e.syntaxNumber:void 0,typeof S=="boolean"?e.syntaxBoolean:void 0,typeof S=="string"?e.syntaxString:void 0]}highlightStyle={e.highlight}numberOfLines={F?void 0:3}selectable={!0}/>
|
|
25
|
+
</T>
|
|
26
|
+
{K&&<Te onPress={()=>P(H=>!H)}hitSlop={6}style={e.showMoreBtn}>
|
|
27
|
+
<V style={e.showMoreText}>
|
|
28
|
+
{F?"Collapse":"Expand"}
|
|
29
|
+
</V>
|
|
30
|
+
<Ee direction={F?"up":"down"}size={9}color="#4F46E5"/>
|
|
31
|
+
</Te>}
|
|
32
|
+
</T>
|
|
33
|
+
</T>}),qe=Q.memo(({data:o,search:S,forceOpen:A,defaultExpandDepth:B=1,wrap:F,fullHeight:P=!1,maxHeight:j,mode:z,onModeChange:k,hideTabs:K=!1})=>{const{t:H}=Ae(),[Ce,ne]=D(z??"raw"),[ie,ae]=D(!1),[M,se]=D(F??!0),[v,Ve]=D("compact"),[J,ce]=D(A),[Be,Fe]=D(!1),R=k&&z?z:Ce,Z=C=>{ne(C),k&&k(C)};le(()=>{F!==void 0&&se(F)},[F]),le(()=>{A!==void 0&&ce(A)},[A]),le(()=>{z&&ne(z)},[z]);const L=G(()=>{if(o==null)return"";if(typeof o=="string"){const C=o.trim();try{const W=JSON.parse(C);return JSON.stringify(W,null,2)}catch{return o}}try{return JSON.stringify(o,null,2)??""}catch{return String(o)||""}},[o]),ee=G(()=>{if(typeof o=="string"){const C=o.trim();try{const W=JSON.parse(C);return JSON.stringify(W)}catch{return o}}try{return JSON.stringify(o)??""}catch{return String(o)||""}},[o]),de=v==="formatted"?L:ee,ge=5e4,$=typeof de=="string"?de:"",ye=$.length>ge&&!Be,te=ye?$.slice(0,ge):$,oe=G(()=>te?te.split(`
|
|
34
|
+
`):[""],[te]),Ue=G(()=>R==="raw"?oe.length:L?L.split(`
|
|
35
|
+
`).length:1,[R,oe.length,L]),_e=G(()=>Me(o),[o]),ze=He(()=>{Je("success"),ve(v==="compact"?ee:L,"JSON"),ae(!0),setTimeout(()=>ae(!1),1200)},[v,ee,L]),re=typeof o=="object"&&o!==null,Re=o==null||re&&Object.keys(o).length===0,pe=()=>{if(!re)return<T style={e.tableRow}>
|
|
36
|
+
<T style={e.tableColKey}>
|
|
37
|
+
<V style={e.tableCellKey}>
|
|
38
|
+
{H("network.jsonViewer.value")}
|
|
39
|
+
</V>
|
|
55
40
|
</T>
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
<T style={[e.snippetTabText,S==="pretty"&&e.snippetTabTextActive]}>
|
|
65
|
-
{R("network.jsonViewer.pretty")}
|
|
66
|
-
</T>
|
|
67
|
-
</A>
|
|
68
|
-
|
|
69
|
-
<A onPress={()=>Y("raw")}activeOpacity={.7}hitSlop={{top:8,bottom:8,left:4,right:4}}style={[e.snippetTabBtn,S==="raw"&&e.snippetTabBtnActive]}>
|
|
70
|
-
<Be color={S==="raw"?"#FFFFFF":"#64748B"}size={11}/>
|
|
71
|
-
<T style={[e.snippetTabText,S==="raw"&&e.snippetTabTextActive]}>
|
|
72
|
-
{R("network.jsonViewer.raw")}
|
|
73
|
-
</T>
|
|
74
|
-
</A>
|
|
75
|
-
|
|
76
|
-
<A onPress={()=>Y("table")}activeOpacity={.7}hitSlop={{top:8,bottom:8,left:4,right:4}}style={[e.snippetTabBtn,S==="table"&&e.snippetTabBtnActive]}>
|
|
77
|
-
<Ee color={S==="table"?"#FFFFFF":"#64748B"}size={11}/>
|
|
78
|
-
<T style={[e.snippetTabText,S==="table"&&e.snippetTabTextActive]}>
|
|
79
|
-
{R("network.jsonViewer.table")}
|
|
80
|
-
</T>
|
|
81
|
-
</A>
|
|
82
|
-
</F>}
|
|
83
|
-
|
|
41
|
+
<T style={e.tableColVal}>
|
|
42
|
+
<V style={e.tableCellValue}>{String(o)}</V>
|
|
43
|
+
</T>
|
|
44
|
+
</T>;let C=Object.keys(o);if(S&&S.trim().length>0){const W=S.trim().toLowerCase();C=C.filter(U=>{const _=o[U],ke=typeof _=="object"&&_!==null?JSON.stringify(_):String(_);return U.toLowerCase().includes(W)||ke.toLowerCase().includes(W)})}return C.length===0?<T style={e.emptyContainer}>
|
|
45
|
+
<V style={e.emptyText}>
|
|
46
|
+
{S&&S.trim().length>0?"No matching keys or values found":H("network.jsonViewer.emptyTable")}
|
|
47
|
+
</V>
|
|
48
|
+
</T>:<T style={e.tableView}>
|
|
84
49
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
50
|
+
<T style={e.tableHeaderRow}>
|
|
51
|
+
<V style={[e.tableHeaderCell,{flex:2}]}>
|
|
52
|
+
KEY / PROPERTY
|
|
53
|
+
</V>
|
|
54
|
+
<V style={[e.tableHeaderCell,{flex:3}]}>VALUE</V>
|
|
55
|
+
</T>
|
|
56
|
+
{C.map((W,U)=><Ye key={W}index={U}itemKey={W}val={o[W]}search={S}/>)}
|
|
57
|
+
</T>},Y=<Pe data={o}search={S}forceOpen={J}defaultExpandDepth={J?99:B}/>,q=()=><T style={e.rawLinesWrapper}>
|
|
58
|
+
{oe.map((C,W)=><T key={W}style={e.rawCodeLineRow}>
|
|
59
|
+
|
|
60
|
+
<T style={e.gutterCell}>
|
|
61
|
+
<V style={e.gutterNumber}selectable={!1}>
|
|
62
|
+
{W+1}
|
|
63
|
+
</V>
|
|
88
64
|
</T>
|
|
89
|
-
</A>}
|
|
90
65
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
Wrap
|
|
66
|
+
|
|
67
|
+
<T style={e.rawTextCell}>
|
|
68
|
+
<Ge line={C}search={S}detectLinks={$.length<2e4}/>
|
|
95
69
|
</T>
|
|
96
|
-
</
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
</
|
|
102
|
-
</
|
|
103
|
-
</F>
|
|
104
|
-
|
|
105
|
-
<F style={[e.editorBody,z&&{flex:1,maxHeight:void 0},!z&&P!=null&&{maxHeight:P}]}>
|
|
70
|
+
</T>)}
|
|
71
|
+
</T>,ue=()=>ye?<Te onPress={()=>Fe(!0)}activeOpacity={.8}style={e.truncationBanner}>
|
|
72
|
+
<V style={e.truncationText}>
|
|
73
|
+
Showing first 50 KB ({Math.round($.length/1024)} KB
|
|
74
|
+
total) · Tap to load full payload
|
|
75
|
+
</V>
|
|
76
|
+
</Te>:null;return<T style={[e.container,P&&{flex:1}]}>
|
|
106
77
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
{
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
</I>
|
|
117
|
-
</I>:<I horizontal showsHorizontalScrollIndicator={!0}contentContainerStyle={e.prettyContainer}>
|
|
118
|
-
{J}
|
|
119
|
-
</I>)}
|
|
78
|
+
<T style={e.snippetHeader}>
|
|
79
|
+
|
|
80
|
+
{!K&&<T style={e.snippetTabs}>
|
|
81
|
+
<E onPress={()=>Z("raw")}style={[e.snippetTabBtn,R==="raw"&&e.snippetTabBtnActive]}>
|
|
82
|
+
<Oe color={R==="raw"?t.white:t.grayText}size={11.5}/>
|
|
83
|
+
<V style={[e.snippetTabText,R==="raw"&&e.snippetTabTextActive]}>
|
|
84
|
+
{H("network.jsonViewer.raw","Raw")}
|
|
85
|
+
</V>
|
|
86
|
+
</E>
|
|
120
87
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
{x+1}
|
|
128
|
-
</T>)}
|
|
129
|
-
</F>
|
|
88
|
+
<E onPress={()=>Z("pretty")}style={[e.snippetTabBtn,R==="pretty"&&e.snippetTabBtnActive]}>
|
|
89
|
+
<Ne color={R==="pretty"?t.white:t.grayText}size={11.5}/>
|
|
90
|
+
<V style={[e.snippetTabText,R==="pretty"&&e.snippetTabTextActive]}>
|
|
91
|
+
{H("network.jsonViewer.pretty","Pretty")}
|
|
92
|
+
</V>
|
|
93
|
+
</E>
|
|
130
94
|
|
|
131
|
-
|
|
132
|
-
<
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
<L text={m}search={f}detectLinks={D.length<2e4}style={e.rawMonospaceText}selectable={!0}highlightStyle={e.highlight}/>
|
|
139
|
-
</F>})}
|
|
140
|
-
</F>
|
|
141
|
-
</I>
|
|
142
|
-
</F>
|
|
95
|
+
<E onPress={()=>Z("table")}style={[e.snippetTabBtn,R==="table"&&e.snippetTabBtnActive]}>
|
|
96
|
+
<De color={R==="table"?t.white:t.grayText}size={11.5}/>
|
|
97
|
+
<V style={[e.snippetTabText,R==="table"&&e.snippetTabTextActive]}>
|
|
98
|
+
{H("network.jsonViewer.table","Table")}
|
|
99
|
+
</V>
|
|
100
|
+
</E>
|
|
101
|
+
</T>}
|
|
143
102
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
{K.map((m,x)=><T key={x}style={e.gutterNumber}>
|
|
154
|
-
{x+1}
|
|
155
|
-
</T>)}
|
|
156
|
-
</F>
|
|
103
|
+
|
|
104
|
+
<T style={e.headerRight}>
|
|
105
|
+
|
|
106
|
+
{R==="raw"&&<>
|
|
107
|
+
<E onPress={()=>Ve(C=>C==="compact"?"formatted":"compact")}style={[e.toolToggleBtn,v==="compact"&&e.toolToggleBtnActive]}>
|
|
108
|
+
<V style={[e.toolToggleText,v==="compact"&&e.toolToggleTextActive]}>
|
|
109
|
+
{H("jsonViewer.min","Min")}
|
|
110
|
+
</V>
|
|
111
|
+
</E>
|
|
157
112
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
</F>}return<F key={x}style={e.rawCodeLineRow}>
|
|
165
|
-
<L text={m}search={f}detectLinks={D.length<2e4}style={e.rawMonospaceText}selectable={!0}highlightStyle={e.highlight}/>
|
|
166
|
-
</F>})}
|
|
167
|
-
</F>
|
|
168
|
-
</I>
|
|
169
|
-
</F>
|
|
113
|
+
<E onPress={()=>se(C=>!C)}style={[e.toolToggleBtn,M&&e.toolToggleBtnActive]}>
|
|
114
|
+
<V style={[e.toolToggleText,M&&e.toolToggleTextActive]}>
|
|
115
|
+
{H("jsonViewer.wrap","Wrap")}
|
|
116
|
+
</V>
|
|
117
|
+
</E>
|
|
118
|
+
</>}
|
|
170
119
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
</
|
|
176
|
-
|
|
120
|
+
|
|
121
|
+
{R==="pretty"&&re&&<E onPress={()=>ce(C=>!C)}style={[e.toolToggleBtn,J&&e.toolToggleBtnActive]}>
|
|
122
|
+
<V style={[e.toolToggleText,J&&e.toolToggleTextActive]}>
|
|
123
|
+
{J?H("jsonViewer.fold","Fold"):H("jsonViewer.expand","Expand")}
|
|
124
|
+
</V>
|
|
125
|
+
</E>}
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
<E onPress={ze}hitSlop={6}style={[e.copyBtn,ie&&e.copyBtnSuccess]}>
|
|
129
|
+
{ie?<Ke color={t.emerald500}size={13}/>:<Le color={t.grayText}size={13}/>}
|
|
130
|
+
</E>
|
|
131
|
+
</T>
|
|
132
|
+
</T>
|
|
177
133
|
|
|
178
134
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
135
|
+
<T style={[e.editorBody,P&&{flex:1,maxHeight:void 0},!P&&j!=null&&{maxHeight:j}]}>
|
|
136
|
+
|
|
137
|
+
{R==="pretty"&&(Re?<T style={e.emptyContainer}>
|
|
138
|
+
<V style={e.emptyText}>
|
|
139
|
+
{H("network.jsonViewer.emptyPayload")}
|
|
140
|
+
</V>
|
|
141
|
+
</T>:M?P?<O style={{flex:1}}contentContainerStyle={e.prettyContainer}showsVerticalScrollIndicator={!0}>
|
|
142
|
+
{Y}
|
|
143
|
+
</O>:<T style={e.prettyContainer}>{Y}</T>:P?<O style={{flex:1}}contentContainerStyle={{flexGrow:1}}showsVerticalScrollIndicator={!0}>
|
|
144
|
+
<O horizontal showsHorizontalScrollIndicator={!0}contentContainerStyle={e.prettyContainer}>
|
|
145
|
+
{Y}
|
|
146
|
+
</O>
|
|
147
|
+
</O>:<O horizontal showsHorizontalScrollIndicator={!0}contentContainerStyle={e.prettyContainer}>
|
|
148
|
+
{Y}
|
|
149
|
+
</O>)}
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
{R==="raw"&&(P?<O style={e.fullHeightScrollView}contentContainerStyle={e.fullHeightScrollContent}showsVerticalScrollIndicator={!0}showsHorizontalScrollIndicator={!1}>
|
|
153
|
+
{M?<T style={e.rawEditorFullWidth}>
|
|
154
|
+
{q()}
|
|
155
|
+
</T>:<O horizontal showsHorizontalScrollIndicator={!0}contentContainerStyle={e.rawHorizontalContent}>
|
|
156
|
+
<T style={{flexDirection:"column"}}>
|
|
157
|
+
{q()}
|
|
158
|
+
</T>
|
|
159
|
+
</O>}
|
|
160
|
+
{ue()}
|
|
161
|
+
</O>:<T style={e.rawEditorAutoHeight}>
|
|
162
|
+
{M?<T style={e.rawEditorFullWidth}>
|
|
163
|
+
{q()}
|
|
164
|
+
</T>:<O horizontal showsHorizontalScrollIndicator={!0}contentContainerStyle={e.rawHorizontalContent}>
|
|
165
|
+
<T style={{flexDirection:"column"}}>
|
|
166
|
+
{q()}
|
|
167
|
+
</T>
|
|
168
|
+
</O>}
|
|
169
|
+
{ue()}
|
|
170
|
+
</T>)}
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
{R==="table"&&(P?<O style={{flex:1}}contentContainerStyle={{flexGrow:1}}showsVerticalScrollIndicator={!0}>
|
|
174
|
+
{pe()}
|
|
175
|
+
</O>:<T style={e.tableView}>{pe()}</T>)}
|
|
176
|
+
</T>
|
|
177
|
+
</T>}),e=Ie.create({container:{backgroundColor:t.white,borderRadius:12,borderWidth:1,borderColor:t.grayBorderSecondary,overflow:"hidden",shadowColor:t.brandPurple,shadowOpacity:.04,shadowRadius:6,shadowOffset:{width:0,height:2},elevation:2,width:"100%"},snippetHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:t.grayBackground,borderBottomWidth:1,borderBottomColor:t.grayBorderSecondary,paddingHorizontal:8,paddingVertical:5,gap:6,minHeight:38},headerLeft:{flexDirection:"row",alignItems:"center",gap:5,flexShrink:1,minWidth:0},langBadge:{flexDirection:"row",alignItems:"center",backgroundColor:t.white,borderRadius:6,borderWidth:1,borderColor:t.grayBorderSecondary,paddingHorizontal:6,paddingVertical:2.5,gap:4.5},langDot:{width:5,height:5,borderRadius:2.5,backgroundColor:t.emerald500},langBadgeText:{fontFamily:I,fontSize:9.5,color:t.primaryBlack,fontWeight:"700",letterSpacing:.3},metaBadge:{backgroundColor:t.white,borderRadius:6,borderWidth:1,borderColor:t.grayBorderSecondary,paddingHorizontal:6,paddingVertical:2.5,flexShrink:1},metaBadgeText:{fontFamily:I,fontSize:9.5,color:t.grayTextWeak,fontWeight:"600"},headerRight:{flexDirection:"row",alignItems:"center",gap:4.5,flexShrink:0},snippetTabs:{flexDirection:"row",alignItems:"center",backgroundColor:`${t.slate200}80`,borderRadius:8,padding:2.5,borderWidth:1,borderColor:t.dividerColor,gap:2},snippetTabBtn:{flexDirection:"row",alignItems:"center",gap:4,paddingVertical:3.5,paddingHorizontal:8,borderRadius:6},snippetTabBtnActive:{backgroundColor:t.brandPurple,shadowColor:t.brandPurple,shadowOffset:{width:0,height:1},shadowOpacity:.25,shadowRadius:2,elevation:1},snippetTabText:{fontFamily:N.interSemiBold,fontSize:10.5,color:t.grayText},snippetTabTextActive:{color:t.white,fontFamily:N.interBold},toolToggleBtn:{paddingHorizontal:8,paddingVertical:3.5,borderRadius:6,backgroundColor:t.white,borderWidth:1,borderColor:t.grayBorderSecondary,alignItems:"center",justifyContent:"center"},toolToggleBtnActive:{backgroundColor:t.purpleShade50,borderColor:`${t.brandPurple}60`},toolToggleText:{fontFamily:N.interSemiBold,fontSize:10.5,color:t.grayText},toolToggleTextActive:{color:t.brandPurple,fontFamily:N.interBold},copyBtn:{width:27,height:27,borderRadius:6,backgroundColor:t.white,borderWidth:1,borderColor:t.grayBorderSecondary,alignItems:"center",justifyContent:"center"},copyBtnSuccess:{borderColor:t.greenMintBorder,backgroundColor:t.greenMintBg},editorBody:{backgroundColor:"#FFFFFF",minHeight:80},prettyContainer:{padding:10,minWidth:"100%",backgroundColor:"#FFFFFF"},fullHeightScrollView:{flex:1},fullHeightScrollContent:{flexGrow:1},rawEditorAutoHeight:{width:"100%"},rawEditorFullWidth:{width:"100%"},rawHorizontalContent:{minWidth:"100%"},rawLinesWrapper:{paddingVertical:6,backgroundColor:"#FFFFFF",width:"100%"},rawCodeLineRow:{flexDirection:"row",alignItems:"flex-start",minHeight:20,width:"100%"},gutterCell:{width:38,paddingRight:8,paddingTop:1,alignItems:"flex-end",justifyContent:"flex-start",borderRightWidth:1,borderRightColor:"#E2E8F0",backgroundColor:"#F8FAFC",userSelect:"none"},gutterNumber:{fontFamily:I,fontSize:11,lineHeight:18,color:"#94A3B8",textAlign:"right"},rawTextCell:{flex:1,paddingLeft:8,paddingRight:8,paddingTop:1,alignItems:"flex-start"},rawLineContentRow:{flexDirection:"row",alignItems:"flex-start",flexWrap:"wrap",minHeight:18},indentDots:{fontFamily:I,fontSize:11.5,lineHeight:18,color:"#CBD5E1",letterSpacing:.5},rawMonospaceText:{fontFamily:I,fontSize:11.5,lineHeight:18,color:t.slate900},syntaxKey:{fontFamily:I,fontSize:11.5,lineHeight:18,color:t.syntaxKey,fontWeight:"700"},syntaxColon:{fontFamily:I,fontSize:11.5,lineHeight:18,color:t.syntaxColon,marginRight:4},syntaxString:{fontFamily:I,fontSize:11.5,lineHeight:18,color:t.syntaxString},syntaxNumber:{fontFamily:I,fontSize:11.5,lineHeight:18,color:t.syntaxNumber},syntaxBoolean:{fontFamily:I,fontSize:11.5,lineHeight:18,color:t.syntaxBoolean},syntaxNull:{fontFamily:I,fontSize:11.5,lineHeight:18,color:t.syntaxNull,fontStyle:"italic"},truncationBanner:{margin:10,backgroundColor:t.purple50,paddingVertical:8,paddingHorizontal:12,borderRadius:6,alignItems:"center",borderWidth:1,borderColor:t.purple200},truncationText:{fontFamily:N.interSemiBold,fontSize:11,color:t.brandPurple},tableView:{flex:1,width:"100%"},tableHeaderRow:{flexDirection:"row",backgroundColor:t.slate100,borderBottomWidth:1,borderBottomColor:t.slate200,paddingVertical:7,paddingHorizontal:12},tableHeaderCell:{fontFamily:N.interBold,fontSize:10.5,color:t.slate600,letterSpacing:.5,textTransform:"uppercase"},tableRow:{flexDirection:"row",borderBottomWidth:1,borderBottomColor:t.slate100,paddingVertical:8,paddingHorizontal:12,alignItems:"flex-start",backgroundColor:t.white},tableRowAlt:{backgroundColor:t.slate50},tableColKey:{flex:2,paddingRight:8},tableColVal:{flex:3},tableCellKey:{fontFamily:I,fontSize:11.5,fontWeight:"700",color:t.brandPurple},typePill:{alignSelf:"flex-start",borderRadius:4,borderWidth:1,paddingHorizontal:4,paddingVertical:1,marginTop:3},typePillText:{fontFamily:N.interBold,fontSize:9},tableCellValue:{fontFamily:I,fontSize:11.5,color:t.slate900,lineHeight:17},tableCodeBox:{backgroundColor:t.slate100,borderRadius:6,borderWidth:1,borderColor:t.slate200,padding:6},showMoreBtn:{flexDirection:"row",alignItems:"center",gap:4,alignSelf:"flex-start",marginTop:4,paddingVertical:2,paddingHorizontal:4},showMoreText:{fontFamily:N.interSemiBold,fontSize:10.5,color:t.brandPurple},emptyContainer:{padding:24,alignItems:"center",justifyContent:"center"},emptyText:{fontFamily:N.interMedium,fontSize:12,color:t.slate500},highlight:{backgroundColor:t.yellow200,color:t.yellow800,fontFamily:I,fontWeight:"700",borderRadius:2,paddingHorizontal:2}});export default qe;
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import
|
|
1
|
+
import ee,{useEffect as re,useRef as oe,useMemo as te}from"react";import{Alert as ne,Animated as D,Linking as F,View as C,Pressable as M,Text as T,StyleSheet as A}from"react-native";import Ce,{Path as Te}from"react-native-svg";import{AppColors as e}from"../styles/AppColors";import{METHOD_COLORS as U}from"../constants";import{getStatusColor as Be,getDurationColor as Se,formatDateTime as He,getSize as Re,getPath as Ve,getBaseUrl as ze}from"../helpers";import{CalendarIcon as Le,ClockIcon as E,SizeIcon as Ie,CircleCheckIcon as $e,CircleAlertIcon as De,CircleXIcon as Fe,RepeatIcon as Oe,ForwardChevronIcon as We}from"./NetworkIcons";import{AppFonts as B}from"../styles/AppFonts";import Pe from"./HighlightText";import Me from"./TouchableScale";import{useTranslation as Ae}from"../i18n";const Ue=ee.memo(function({item:r,onPress:q,timelineMinStart:qe,timelineTotalRange:Ne,isNew:I,isSelected:O,onToggleSelect:N,searchStr:G}){const{t:V}=Ae(),W=U[r.method]??U.ALL,H=te(()=>{try{const t=new URL(r.url),L=t.host,v=t.pathname+(t.search?t.search:""),Z=t.protocol==="https:";return{host:L,path:v||"/",isHttps:Z}}catch{const t=r.url.toLowerCase().startsWith("https:"),L=Ve(r.url);return{host:ze(r.url).replace(/^https?:\/\//,""),path:L||r.url,isHttps:t}}},[r.url]),J=t=>{t?.stopPropagation?.(),ne.alert(V("common.openInBrowser")||"Open in Browser",`${V("common.openInBrowserPrompt")||"Are you sure you want to open this URL in your external browser?"}
|
|
2
2
|
|
|
3
|
-
${r.url}`,[{text:
|
|
4
|
-
<Me onPress={
|
|
3
|
+
${r.url}`,[{text:V("common.cancel")||"Cancel",style:"cancel"},{text:V("common.open")||"Open",onPress:()=>{F.canOpenURL(r.url).then(L=>{L?F.openURL(r.url):F.openURL(r.url).catch(()=>{})}).catch(()=>{})}}])},S=r.status===0||r.status!=null&&r.status>=400,R=r.status==null,$=Be(r.status),z=Se(r.duration),K=R?e.darkOrange:S?e.errorColor:e.greenColor,P=oe(new D.Value(I?.35:0)).current;re(()=>{I&&D.timing(P,{toValue:0,duration:1200,useNativeDriver:!1}).start()},[I]);const Q=()=>{if(R)return"...";if(r.status===0||r.status==null)return V("network.statusFailed")||"FAILED";const t=typeof r.status=="number"?r.status:parseInt(String(r.status||0),10);return t===200?"200 OK":t===201?"201 Created":t===204?"204 No Content":t===304?"304 Not Modified":t===400?"400 Bad Req":t===401?"401 Unauth":t===403?"403 Forbidden":t===404?"404 Not Found":t===500?"500 Error":String(r.status)},X=()=>{if(R)return<E color={e.darkOrange}size={10}/>;const t=typeof r.status=="number"?r.status:parseInt(String(r.status||0),10);return t>=200&&t<300?<$e color={e.greenColor}size={10}/>:t>=300&&t<400?<Oe color={e.amber700}size={10}/>:t>=400&&t<500?<De color={e.darkOrange}size={10}/>:<Fe color={e.errorColor}size={10}/>},_=He(r.startTime),Y=r.url.split("?")[0].toLowerCase().endsWith(".json");return<C style={o.container}>
|
|
4
|
+
<Me onPress={q}style={[o.card,{borderLeftWidth:3.5,borderLeftColor:K,backgroundColor:S?e.errorCardBg:e.white}]}>
|
|
5
5
|
<C style={o.cardBody}>
|
|
6
6
|
|
|
7
7
|
<C style={o.cardHeaderRow}>
|
|
8
8
|
<C style={o.cardHeaderLeft}>
|
|
9
|
-
<
|
|
10
|
-
{
|
|
9
|
+
<M onPress={()=>N(r.id)}hitSlop={12}style={[o.smallCheckbox,O&&o.smallCheckboxChecked]}>
|
|
10
|
+
{O&&<Ce width={9}height={9}viewBox="0 0 24 24"fill="none">
|
|
11
11
|
<Te d="M20 6L9 17l-5-5"stroke={e.white}strokeWidth="4"strokeLinecap="round"strokeLinejoin="round"/>
|
|
12
12
|
</Ce>}
|
|
13
|
-
</
|
|
13
|
+
</M>
|
|
14
14
|
|
|
15
15
|
<T style={o.serialNumber}>#{r.id+1}</T>
|
|
16
16
|
|
|
17
|
-
<C style={[o.methodBadge,{backgroundColor:
|
|
17
|
+
<C style={[o.methodBadge,{backgroundColor:W}]}>
|
|
18
18
|
<T style={o.methodBadgeText}>
|
|
19
19
|
{r.method}
|
|
20
20
|
</T>
|
|
@@ -34,20 +34,23 @@ ${r.url}`,[{text:H("common.cancel")||"Cancel",style:"cancel"},{text:H("common.op
|
|
|
34
34
|
</C>}
|
|
35
35
|
</C>
|
|
36
36
|
|
|
37
|
-
<C style={
|
|
38
|
-
{
|
|
39
|
-
<T style={[o.statusPillText,{color:R?e.errorColor:z?e.darkOrange:I}]}>
|
|
37
|
+
<C style={o.cardHeaderRight}>
|
|
38
|
+
<C style={[o.statusPill,{backgroundColor:S?`${e.errorColor}14`:R?`${e.darkOrange}14`:`${$}14`,borderColor:S?`${e.errorColor}33`:R?`${e.darkOrange}33`:`${$}33`}]}>
|
|
40
39
|
{X()}
|
|
41
|
-
|
|
40
|
+
<T style={[o.statusPillText,{color:S?e.errorColor:R?e.darkOrange:$}]}>
|
|
41
|
+
{Q()}
|
|
42
|
+
</T>
|
|
43
|
+
</C>
|
|
44
|
+
<We color={e.grayTextWeak}size={13}/>
|
|
42
45
|
</C>
|
|
43
46
|
</C>
|
|
44
47
|
|
|
45
48
|
|
|
46
|
-
<
|
|
49
|
+
<M onPress={J}hitSlop={6}style={o.urlBox}>
|
|
47
50
|
<C style={o.urlMainRow}>
|
|
48
|
-
<Pe text={
|
|
51
|
+
<Pe text={H.path}search={G}style={o.pathText}highlightStyle={o.highlight}numberOfLines={1}ellipsizeMode="middle"/>
|
|
49
52
|
<C style={o.urlBadgeRow}>
|
|
50
|
-
{
|
|
53
|
+
{Y&&<C style={o.jsonBadge}>
|
|
51
54
|
<T style={o.jsonBadgeText}>.json</T>
|
|
52
55
|
</C>}
|
|
53
56
|
{r.duplicateCount!=null&&r.duplicateCount>1&&<C style={o.dupBadge}>
|
|
@@ -56,45 +59,38 @@ ${r.url}`,[{text:H("common.cancel")||"Cancel",style:"cancel"},{text:H("common.op
|
|
|
56
59
|
</C>
|
|
57
60
|
</C>
|
|
58
61
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
</T>
|
|
64
|
-
</C>
|
|
65
|
-
<T style={o.hostText}numberOfLines={1}ellipsizeMode="tail">
|
|
66
|
-
{S.host}
|
|
62
|
+
<C style={o.hostRow}>
|
|
63
|
+
<C style={[o.protoBadge,{backgroundColor:H.isHttps?`${e.emerald600}12`:`${e.amber600}12`,borderColor:H.isHttps?`${e.emerald600}2B`:`${e.amber600}2B`}]}>
|
|
64
|
+
<T style={[o.protoBadgeText,{color:H.isHttps?e.emerald600:e.amber700}]}>
|
|
65
|
+
{H.isHttps?"HTTPS":"HTTP"}
|
|
67
66
|
</T>
|
|
68
|
-
</C
|
|
69
|
-
|
|
67
|
+
</C>
|
|
68
|
+
<T style={o.hostText}numberOfLines={1}ellipsizeMode="tail">
|
|
69
|
+
{H.host||r.url}
|
|
70
|
+
</T>
|
|
71
|
+
</C>
|
|
72
|
+
</M>
|
|
70
73
|
|
|
71
74
|
|
|
72
75
|
<C style={o.cardFooterRow}>
|
|
73
76
|
<C style={o.footerLeft}>
|
|
74
77
|
<C style={o.cardDateRow}>
|
|
75
78
|
<Le color={e.grayTextWeak}size={10}/>
|
|
76
|
-
<T style={o.cardDateText}>{
|
|
79
|
+
<T style={o.cardDateText}numberOfLines={1}>{_}</T>
|
|
77
80
|
</C>
|
|
78
|
-
|
|
79
|
-
{P&&<C style={o.callerChip}>
|
|
80
|
-
<Oe color={e.sky600}size={8.5}/>
|
|
81
|
-
<T style={o.callerChipText}numberOfLines={1}ellipsizeMode="middle">
|
|
82
|
-
{P}
|
|
83
|
-
</T>
|
|
84
|
-
</C>}
|
|
85
81
|
</C>
|
|
86
82
|
|
|
87
83
|
<C style={o.footerRight}>
|
|
88
84
|
{r.response!=null&&<C style={o.metaStatChip}>
|
|
89
|
-
|
|
85
|
+
<Ie color={e.purple}size={9}/>
|
|
90
86
|
<T style={o.metaStatText}>
|
|
91
|
-
{
|
|
87
|
+
{Re(r.response)}
|
|
92
88
|
</T>
|
|
93
89
|
</C>}
|
|
94
90
|
|
|
95
|
-
{r.duration!=null&&!
|
|
96
|
-
<
|
|
97
|
-
<T style={[o.metaStatText,{color:
|
|
91
|
+
{r.duration!=null&&!S&&<C style={[o.metaStatChip,{backgroundColor:`${z}12`,borderColor:`${z}2E`}]}>
|
|
92
|
+
<E color={z}size={9}/>
|
|
93
|
+
<T style={[o.metaStatText,{color:z}]}>
|
|
98
94
|
{r.duration}ms
|
|
99
95
|
</T>
|
|
100
96
|
</C>}
|
|
@@ -102,11 +98,11 @@ ${r.url}`,[{text:H("common.cancel")||"Cancel",style:"cancel"},{text:H("common.op
|
|
|
102
98
|
</C>
|
|
103
99
|
|
|
104
100
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
101
|
+
<C style={o.waterfallContainer}>
|
|
102
|
+
{typeof r.duration=="number"&&r.duration>0&&!S&&<C style={[o.waterfallBar,{width:`${Math.min(100,Math.max(6,r.duration/1200*100))}%`,backgroundColor:z}]}/>}
|
|
103
|
+
</C>
|
|
108
104
|
</C>
|
|
109
105
|
|
|
110
|
-
{
|
|
106
|
+
{I&&<D.View pointerEvents="none"style={[A.absoluteFill,{backgroundColor:W,opacity:P}]}/>}
|
|
111
107
|
</Me>
|
|
112
|
-
</C>}),o=
|
|
108
|
+
</C>}),o=A.create({container:{paddingHorizontal:8,paddingVertical:4,height:126,justifyContent:"center"},card:{height:118,alignSelf:"stretch",borderRadius:10,overflow:"hidden",borderWidth:1,borderColor:e.dividerColor,shadowColor:e.shadowColorString},cardBody:{height:"100%",paddingHorizontal:12,paddingTop:9,paddingBottom:7,justifyContent:"space-between"},cardHeaderRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",height:22,minHeight:22,maxHeight:22},cardHeaderLeft:{flexDirection:"row",alignItems:"center",flex:1,marginRight:8,gap:6,minWidth:0,overflow:"hidden"},cardHeaderRight:{flexDirection:"row",alignItems:"center",gap:6,flexShrink:0},smallCheckbox:{width:15,height:15,borderRadius:4,borderWidth:1.5,borderColor:e.grayTextWeak,alignItems:"center",justifyContent:"center",backgroundColor:e.white},smallCheckboxChecked:{backgroundColor:e.purple,borderColor:e.purple},serialNumber:{fontFamily:B.interBold,color:e.grayTextWeak,fontSize:10},methodBadge:{paddingHorizontal:7,paddingVertical:2.5,borderRadius:5,alignItems:"center",justifyContent:"center"},methodBadgeText:{fontFamily:B.interBold,fontSize:9.5,lineHeight:12,letterSpacing:.5,color:e.white},chip:{paddingHorizontal:6,paddingVertical:2,borderRadius:4,borderWidth:1},chipText:{fontFamily:B.interBold,fontSize:9,lineHeight:12},statusPill:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:7,paddingVertical:2.5,borderRadius:6,borderWidth:1,flexShrink:0},statusPillText:{fontFamily:B.interBold,fontSize:10,lineHeight:13},urlBox:{backgroundColor:e.grayBackground,borderRadius:7,borderWidth:1,borderColor:e.dividerColor,paddingHorizontal:9,paddingVertical:5,height:48,minHeight:48,maxHeight:48,justifyContent:"center",gap:3,overflow:"hidden"},urlMainRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:6},pathText:{fontFamily:B.interBold,fontSize:12,lineHeight:16,color:e.primaryBlack,flex:1},urlBadgeRow:{flexDirection:"row",alignItems:"center",gap:4,flexShrink:0},jsonBadge:{backgroundColor:`${e.darkOrange}14`,borderColor:`${e.darkOrange}2E`,borderWidth:1,paddingHorizontal:4.5,paddingVertical:1,borderRadius:3.5},jsonBadgeText:{fontFamily:B.interBold,fontSize:8.5,color:e.darkOrange},dupBadge:{backgroundColor:`${e.purple}14`,borderColor:`${e.purple}2E`,borderWidth:1,paddingHorizontal:4.5,paddingVertical:1,borderRadius:3.5},dupBadgeText:{fontFamily:B.interBold,fontSize:8.5,color:e.purple},hostRow:{flexDirection:"row",alignItems:"center",gap:5,minHeight:15},protoBadge:{paddingHorizontal:4.5,paddingVertical:1,borderRadius:3.5,borderWidth:1},protoBadgeText:{fontFamily:B.interBold,fontSize:8,lineHeight:10},hostText:{fontFamily:B.interMedium,fontSize:10,lineHeight:13,color:e.grayTextWeak,flex:1},highlight:{backgroundColor:e.yellowHighlight,color:e.primaryBlack,borderRadius:2},cardFooterRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",height:18,minHeight:18,maxHeight:18,gap:6},footerLeft:{flexDirection:"row",alignItems:"center",gap:6,flex:1,minWidth:0,overflow:"hidden"},footerRight:{flexDirection:"row",alignItems:"center",gap:5,flexShrink:0},cardDateRow:{flexDirection:"row",alignItems:"center",gap:3.5},cardDateText:{fontFamily:B.interRegular,fontSize:10,lineHeight:13,color:e.slate400},metaStatChip:{flexDirection:"row",alignItems:"center",gap:3,backgroundColor:e.violetSoftBg,borderColor:e.violetSoftBorder,borderWidth:1,paddingHorizontal:5.5,paddingVertical:1.5,borderRadius:4},metaStatText:{fontFamily:B.interBold,color:e.violetSoftText,fontSize:9,lineHeight:12},waterfallContainer:{height:2.5,width:"100%",backgroundColor:e.graySurface,borderRadius:1.5,overflow:"hidden",marginTop:2},waterfallBar:{height:"100%",borderRadius:1.5}});export default Ue;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import F from"react";import{StyleSheet as G,Text as T}from"react-native";import{AppColors as r}from"../styles/AppColors";import{AppFonts as w}from"../styles/AppFonts";import{escapeRegex as U,handleOpenExternalLink as H}from"../helpers";const M=/("(?:\\.|[^"\\])*"(?=\s*:))|("(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*')|(\b-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b)|(\b(?:true|false)\b)|(\b(?:null|undefined|NaN)\b)|(https?:\/\/[^\s"',]+)|(\[[\w\s_-]+\])|([{}[\],:])|([^"'\d\s{}[\],:]+|[ \t\r\n]+)/g;export const tokenizeText=l=>{if(!l)return[];const t=[];let e;for(M.lastIndex=0;(e=M.exec(l))!==null;)e[1]?t.push({type:"key",value:e[1]}):e[2]?t.push({type:"string",value:e[2]}):e[3]?t.push({type:"number",value:e[3]}):e[4]?t.push({type:"boolean",value:e[4]}):e[5]?t.push({type:"null",value:e[5]}):e[6]?t.push({type:"url",value:e[6]}):e[7]?t.push({type:"tag",value:e[7]}):e[8]?t.push({type:"bracket",value:e[8]}):e[9]&&t.push({type:"plain",value:e[9]});return t};const X=l=>{switch(l){case"key":return r.sky600
|
|
1
|
+
import F from"react";import{StyleSheet as G,Text as T}from"react-native";import{AppColors as r}from"../styles/AppColors";import{AppFonts as w}from"../styles/AppFonts";import{escapeRegex as U,handleOpenExternalLink as H}from"../helpers";const M=/("(?:\\.|[^"\\])*"(?=\s*:))|("(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*')|(\b-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b)|(\b(?:true|false)\b)|(\b(?:null|undefined|NaN)\b)|(https?:\/\/[^\s"',]+)|(\[[\w\s_-]+\])|([{}[\],:])|([^"'\d\s{}[\],:]+|[ \t\r\n]+)/g;export const tokenizeText=l=>{if(!l)return[];const t=[];let e;for(M.lastIndex=0;(e=M.exec(l))!==null;)e[1]?t.push({type:"key",value:e[1]}):e[2]?t.push({type:"string",value:e[2]}):e[3]?t.push({type:"number",value:e[3]}):e[4]?t.push({type:"boolean",value:e[4]}):e[5]?t.push({type:"null",value:e[5]}):e[6]?t.push({type:"url",value:e[6]}):e[7]?t.push({type:"tag",value:e[7]}):e[8]?t.push({type:"bracket",value:e[8]}):e[9]&&t.push({type:"plain",value:e[9]});return t};const X=l=>{switch(l){case"key":return r.sky600;case"string":return r.emerald600;case"number":return r.amber600;case"boolean":return r.purple;case"null":return r.red600;case"url":return r.sky600;case"tag":return r.violet600;case"bracket":return r.slate500;default:return r.primaryBlack}};export const LogSyntaxHighlighter=F.memo(({text:l,search:t,numberOfLines:e,style:O,detectLinks:L=!0})=>{if(!l)return null;const z=F.useMemo(()=>tokenizeText(l),[l]),A=(n,S)=>{const K=X(n.type),C=n.type==="url",P=n.type==="key",R={color:K,fontFamily:P?w.interBold:w.interRegular,textDecorationLine:C?"underline":"none"};if(!t||t.trim().length===0)return<T key={S}style={R}onPress={C&&L?()=>H(n.value):void 0}>
|
|
2
2
|
{n.value}
|
|
3
3
|
</T>;const _=new RegExp(`(${U(t.trim())})`,"gi"),D=n.value.split(_);return<T key={S}style={R}>
|
|
4
4
|
{D.map((E,B)=>E.toLowerCase()===t.trim().toLowerCase()?<T key={B}style={[R,N.searchHighlight]}>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import React, { Component, ErrorInfo, ReactNode } from 'react';
|
|
2
|
+
import { StyleProp, ViewStyle } from 'react-native';
|
|
3
|
+
export interface ModuleErrorBoundaryProps {
|
|
4
|
+
moduleName?: string;
|
|
5
|
+
fallback?: ReactNode | ((error: Error, retry: () => void) => ReactNode);
|
|
6
|
+
children: ReactNode;
|
|
7
|
+
onError?: (error: Error, errorInfo: ErrorInfo) => void;
|
|
8
|
+
onRetry?: () => void;
|
|
9
|
+
containerStyle?: StyleProp<ViewStyle>;
|
|
10
|
+
}
|
|
11
|
+
interface ModuleErrorBoundaryState {
|
|
12
|
+
hasError: boolean;
|
|
13
|
+
error: Error | null;
|
|
14
|
+
copied: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare class ModuleErrorBoundary extends Component<ModuleErrorBoundaryProps, ModuleErrorBoundaryState> {
|
|
17
|
+
state: ModuleErrorBoundaryState;
|
|
18
|
+
static getDerivedStateFromError(error: Error): Partial<ModuleErrorBoundaryState>;
|
|
19
|
+
componentDidCatch(error: Error, errorInfo: ErrorInfo): void;
|
|
20
|
+
handleRetry: () => void;
|
|
21
|
+
handleCopy: () => void;
|
|
22
|
+
render(): string | number | bigint | boolean | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode>> | React.JSX.Element;
|
|
23
|
+
}
|
|
24
|
+
export default ModuleErrorBoundary;
|