react-native-inapp-inspector 2.4.1 → 2.5.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.ar.md +163 -0
- package/README.de.md +163 -0
- package/README.es.md +164 -0
- package/README.fr.md +163 -0
- package/README.hi.md +163 -0
- package/README.ja.md +180 -0
- package/README.ko.md +163 -0
- package/README.md +340 -243
- package/README.pt-BR.md +163 -0
- package/README.ru.md +163 -0
- package/README.zh-CN.md +387 -0
- package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +605 -23
- package/assets/banner_dark.svg +186 -0
- package/assets/banner_light.svg +186 -0
- package/assets/icon_circle.svg +148 -0
- package/assets/icon_square.svg +369 -0
- package/assets/inapp_inspector_icon.gif +0 -0
- package/assets/inapp_inspector_icon_original.gif +0 -0
- package/assets/social_preview.png +0 -0
- package/assets/walkthrough.gif +0 -0
- package/dist/commonjs/capture.d.ts +2 -0
- package/dist/commonjs/capture.js +1 -1
- package/dist/commonjs/components/AnalyticsDetail.js +23 -23
- package/dist/commonjs/components/AnalyticsEventCard.js +1 -1
- package/dist/commonjs/components/AnalyticsGraph.js +44 -44
- package/dist/commonjs/components/AnimatedBrandOwl.d.ts +7 -0
- package/dist/commonjs/components/AnimatedBrandOwl.js +175 -0
- package/dist/commonjs/components/AppHeaderLogo.d.ts +1 -0
- package/dist/commonjs/components/AppHeaderLogo.js +5 -3
- package/dist/commonjs/components/BrandCircleIcon.js +28 -28
- package/dist/commonjs/components/BrandSquareIcon.d.ts +5 -0
- package/dist/commonjs/components/BrandSquareIcon.js +139 -0
- package/dist/commonjs/components/ConsoleLogCard.d.ts +2 -1
- package/dist/commonjs/components/ConsoleLogCard.js +23 -39
- package/dist/commonjs/components/Inspector/AboutModal.js +44 -54
- package/dist/commonjs/components/Inspector/AnalyticsTab.js +6 -6
- package/dist/commonjs/components/Inspector/ConfirmationModal.d.ts +13 -0
- package/dist/commonjs/components/Inspector/ConfirmationModal.js +30 -0
- package/dist/commonjs/components/Inspector/ConsoleTab.js +12 -12
- package/dist/commonjs/components/Inspector/CrashTab.js +44 -9
- package/dist/commonjs/components/Inspector/DebuggingTab.js +17 -17
- package/dist/commonjs/components/Inspector/DeviceInfoTab.js +1 -1
- package/dist/commonjs/components/Inspector/FabLauncher.js +30 -33
- package/dist/commonjs/components/Inspector/FeatureUnderDevNotice.js +2 -2
- package/dist/commonjs/components/Inspector/FloatingCaptureWidget.d.ts +3 -0
- package/dist/commonjs/components/Inspector/FloatingCaptureWidget.js +54 -0
- package/dist/commonjs/components/Inspector/GlobalCrashScreenModal.d.ts +11 -0
- package/dist/commonjs/components/Inspector/GlobalCrashScreenModal.js +234 -0
- package/dist/commonjs/components/Inspector/InspectorHeader.js +137 -127
- package/dist/commonjs/components/Inspector/LanguageSelectorModal.d.ts +15 -0
- package/dist/commonjs/components/Inspector/LanguageSelectorModal.js +172 -0
- package/dist/commonjs/components/Inspector/MainScreen.js +55 -35
- package/dist/commonjs/components/Inspector/MediaGalleryTab.js +40 -35
- package/dist/commonjs/components/Inspector/MediaPreviewModal.d.ts +36 -0
- package/dist/commonjs/components/Inspector/MediaPreviewModal.js +341 -135
- package/dist/commonjs/components/Inspector/NetworkTab.js +50 -50
- package/dist/commonjs/components/Inspector/NpmUpdateToast.js +1 -1
- package/dist/commonjs/components/Inspector/PushCard.d.ts +3 -2
- package/dist/commonjs/components/Inspector/PushCard.js +5 -4
- package/dist/commonjs/components/Inspector/PushDetail.js +41 -32
- package/dist/commonjs/components/Inspector/PushTab.js +12 -12
- package/dist/commonjs/components/Inspector/ReduxDetail.js +32 -32
- package/dist/commonjs/components/Inspector/ReduxTab.js +10 -8
- package/dist/commonjs/components/Inspector/SecondaryTelemetryStrip.d.ts +2 -0
- package/dist/commonjs/components/Inspector/SecondaryTelemetryStrip.js +43 -0
- package/dist/commonjs/components/Inspector/SettingsPanel.js +287 -139
- package/dist/commonjs/components/Inspector/SocketCard.d.ts +5 -0
- package/dist/commonjs/components/Inspector/SocketCard.js +116 -0
- package/dist/commonjs/components/Inspector/SocketDetail.d.ts +4 -0
- package/dist/commonjs/components/Inspector/SocketDetail.js +327 -0
- package/dist/commonjs/components/Inspector/SocketFilterModal.d.ts +13 -0
- package/dist/commonjs/components/Inspector/SocketFilterModal.js +69 -0
- package/dist/commonjs/components/Inspector/SocketTab.d.ts +3 -0
- package/dist/commonjs/components/Inspector/SocketTab.js +112 -0
- package/dist/commonjs/components/Inspector/StorageTab.js +39 -37
- package/dist/commonjs/components/Inspector/SupportModal.d.ts +7 -0
- package/dist/commonjs/components/Inspector/SupportModal.js +125 -0
- package/dist/commonjs/components/Inspector/SupportPage.d.ts +5 -0
- package/dist/commonjs/components/Inspector/SupportPage.js +227 -0
- package/dist/commonjs/components/Inspector/TabBar.js +24 -23
- package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +24 -24
- package/dist/commonjs/components/JsonViewer.js +50 -48
- package/dist/commonjs/components/LogCard.d.ts +3 -2
- package/dist/commonjs/components/LogCard.js +27 -25
- package/dist/commonjs/components/LogSyntaxHighlighter.js +5 -5
- package/dist/commonjs/components/ModuleErrorBoundary.js +5 -5
- package/dist/commonjs/components/NetworkIcons.d.ts +42 -0
- package/dist/commonjs/components/NetworkIcons.js +139 -6
- package/dist/commonjs/components/SegmentedTabs.js +1 -1
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -1
- package/dist/commonjs/crash.d.ts +1 -1
- package/dist/commonjs/crash.js +1 -1
- package/dist/commonjs/customHooks/crashHandler.d.ts +2 -1
- package/dist/commonjs/customHooks/crashHandler.js +7 -7
- package/dist/commonjs/customHooks/socketLogger.d.ts +26 -0
- package/dist/commonjs/customHooks/socketLogger.js +2 -0
- package/dist/commonjs/editor.d.ts +13 -0
- package/dist/commonjs/editor.js +1 -0
- package/dist/commonjs/helpers/index.d.ts +1 -0
- package/dist/commonjs/helpers/index.js +3 -3
- package/dist/commonjs/helpers/memoryManager.d.ts +1 -0
- package/dist/commonjs/helpers/memoryManager.js +1 -1
- package/dist/commonjs/helpers/searchQueryParser.d.ts +1 -1
- package/dist/commonjs/helpers/searchQueryParser.js +5 -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 +3 -1
- package/dist/commonjs/helpers/shareFormatter.js +8 -7
- package/dist/commonjs/helpers/telemetry.js +1 -1
- package/dist/commonjs/i18n/index.d.ts +99 -1
- package/dist/commonjs/i18n/index.js +1 -1
- package/dist/commonjs/i18n/locales/ar.json +1 -1
- package/dist/commonjs/i18n/locales/bn.json +1 -0
- package/dist/commonjs/i18n/locales/de.json +1 -1
- package/dist/commonjs/i18n/locales/en.json +1 -1
- package/dist/commonjs/i18n/locales/es.json +1 -1
- package/dist/commonjs/i18n/locales/fr.json +1 -1
- package/dist/commonjs/i18n/locales/gu.json +1 -0
- package/dist/commonjs/i18n/locales/hi.json +1 -1
- package/dist/commonjs/i18n/locales/id.json +1 -0
- package/dist/commonjs/i18n/locales/it.json +1 -0
- package/dist/commonjs/i18n/locales/ja.json +1 -1
- package/dist/commonjs/i18n/locales/kn.json +1 -0
- package/dist/commonjs/i18n/locales/ko.json +1 -1
- package/dist/commonjs/i18n/locales/ml.json +1 -0
- package/dist/commonjs/i18n/locales/mr.json +1 -0
- package/dist/commonjs/i18n/locales/nl.json +1 -0
- package/dist/commonjs/i18n/locales/pa.json +1 -0
- package/dist/commonjs/i18n/locales/pl.json +1 -0
- package/dist/commonjs/i18n/locales/pt.json +1 -1
- package/dist/commonjs/i18n/locales/ru.json +1 -1
- package/dist/commonjs/i18n/locales/ta.json +1 -0
- package/dist/commonjs/i18n/locales/te.json +1 -0
- package/dist/commonjs/i18n/locales/tr.json +1 -0
- package/dist/commonjs/i18n/locales/vi.json +1 -0
- package/dist/commonjs/i18n/locales/zh.json +1 -1
- package/dist/commonjs/index.d.ts +16 -13
- package/dist/commonjs/index.js +5 -4
- package/dist/commonjs/native/NativeInspector.d.ts +4 -0
- package/dist/commonjs/native/NativeInspector.js +1 -1
- package/dist/commonjs/native/NativeNetworkInspector.d.ts +4 -0
- package/dist/commonjs/socket.d.ts +4 -0
- package/dist/commonjs/socket.js +1 -0
- package/dist/commonjs/styles/AppColors.d.ts +42 -2
- package/dist/commonjs/styles/AppColors.js +1 -1
- package/dist/commonjs/styles/common.js +1 -1
- package/dist/commonjs/styles/index.d.ts +30 -0
- package/dist/commonjs/styles/index.js +1 -1
- package/dist/commonjs/types/editor.d.ts +96 -0
- package/dist/commonjs/types/editor.js +1 -0
- package/dist/commonjs/types/enums.d.ts +40 -0
- package/dist/commonjs/types/enums.js +1 -1
- package/dist/commonjs/types/interfaces.d.ts +143 -1
- package/dist/esm/capture.d.ts +2 -0
- package/dist/esm/capture.js +1 -1
- package/dist/esm/components/AnalyticsDetail.js +31 -31
- package/dist/esm/components/AnalyticsEventCard.js +1 -1
- package/dist/esm/components/AnalyticsGraph.js +74 -74
- package/dist/esm/components/AnimatedBrandOwl.d.ts +7 -0
- package/dist/esm/components/AnimatedBrandOwl.js +175 -0
- package/dist/esm/components/AppHeaderLogo.d.ts +1 -0
- package/dist/esm/components/AppHeaderLogo.js +7 -5
- package/dist/esm/components/BrandCircleIcon.js +70 -70
- package/dist/esm/components/BrandSquareIcon.d.ts +5 -0
- package/dist/esm/components/BrandSquareIcon.js +139 -0
- package/dist/esm/components/ConsoleLogCard.d.ts +2 -1
- package/dist/esm/components/ConsoleLogCard.js +61 -77
- package/dist/esm/components/Inspector/AboutModal.js +85 -95
- package/dist/esm/components/Inspector/AnalyticsTab.js +24 -24
- package/dist/esm/components/Inspector/ConfirmationModal.d.ts +13 -0
- package/dist/esm/components/Inspector/ConfirmationModal.js +30 -0
- package/dist/esm/components/Inspector/ConsoleTab.js +48 -48
- package/dist/esm/components/Inspector/CrashTab.js +203 -168
- package/dist/esm/components/Inspector/DebuggingTab.js +29 -29
- package/dist/esm/components/Inspector/DeviceInfoTab.js +75 -75
- package/dist/esm/components/Inspector/FabLauncher.js +57 -60
- package/dist/esm/components/Inspector/FeatureUnderDevNotice.js +7 -7
- package/dist/esm/components/Inspector/FloatingCaptureWidget.d.ts +3 -0
- package/dist/esm/components/Inspector/FloatingCaptureWidget.js +54 -0
- package/dist/esm/components/Inspector/GlobalCrashScreenModal.d.ts +11 -0
- package/dist/esm/components/Inspector/GlobalCrashScreenModal.js +234 -0
- package/dist/esm/components/Inspector/InspectorHeader.js +162 -152
- package/dist/esm/components/Inspector/LanguageSelectorModal.d.ts +15 -0
- package/dist/esm/components/Inspector/LanguageSelectorModal.js +172 -0
- package/dist/esm/components/Inspector/MainScreen.js +130 -110
- package/dist/esm/components/Inspector/MediaGalleryTab.js +83 -78
- package/dist/esm/components/Inspector/MediaPreviewModal.d.ts +36 -0
- package/dist/esm/components/Inspector/MediaPreviewModal.js +345 -139
- package/dist/esm/components/Inspector/NetworkTab.js +130 -130
- package/dist/esm/components/Inspector/NpmUpdateToast.js +1 -1
- package/dist/esm/components/Inspector/PushCard.d.ts +3 -2
- package/dist/esm/components/Inspector/PushCard.js +23 -22
- package/dist/esm/components/Inspector/PushDetail.js +45 -36
- package/dist/esm/components/Inspector/PushTab.js +23 -23
- package/dist/esm/components/Inspector/ReduxDetail.js +42 -42
- package/dist/esm/components/Inspector/ReduxTab.js +20 -18
- package/dist/esm/components/Inspector/SecondaryTelemetryStrip.d.ts +2 -0
- package/dist/esm/components/Inspector/SecondaryTelemetryStrip.js +43 -0
- package/dist/esm/components/Inspector/SettingsPanel.js +526 -378
- package/dist/esm/components/Inspector/SocketCard.d.ts +5 -0
- package/dist/esm/components/Inspector/SocketCard.js +116 -0
- package/dist/esm/components/Inspector/SocketDetail.d.ts +4 -0
- package/dist/esm/components/Inspector/SocketDetail.js +327 -0
- package/dist/esm/components/Inspector/SocketFilterModal.d.ts +13 -0
- package/dist/esm/components/Inspector/SocketFilterModal.js +69 -0
- package/dist/esm/components/Inspector/SocketTab.d.ts +3 -0
- package/dist/esm/components/Inspector/SocketTab.js +112 -0
- package/dist/esm/components/Inspector/StorageTab.js +139 -137
- package/dist/esm/components/Inspector/SupportModal.d.ts +7 -0
- package/dist/esm/components/Inspector/SupportModal.js +125 -0
- package/dist/esm/components/Inspector/SupportPage.d.ts +5 -0
- package/dist/esm/components/Inspector/SupportPage.js +227 -0
- package/dist/esm/components/Inspector/TabBar.js +36 -35
- package/dist/esm/components/Inspector/UpdateAvailableModal.js +22 -22
- package/dist/esm/components/JsonViewer.js +66 -64
- package/dist/esm/components/LogCard.d.ts +3 -2
- package/dist/esm/components/LogCard.js +57 -55
- package/dist/esm/components/LogSyntaxHighlighter.js +5 -5
- package/dist/esm/components/ModuleErrorBoundary.js +23 -23
- package/dist/esm/components/NetworkIcons.d.ts +42 -0
- package/dist/esm/components/NetworkIcons.js +139 -6
- package/dist/esm/components/SegmentedTabs.js +7 -7
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -1
- package/dist/esm/crash.d.ts +1 -1
- package/dist/esm/crash.js +1 -1
- package/dist/esm/customHooks/crashHandler.d.ts +2 -1
- package/dist/esm/customHooks/crashHandler.js +7 -7
- package/dist/esm/customHooks/socketLogger.d.ts +26 -0
- package/dist/esm/customHooks/socketLogger.js +2 -0
- package/dist/esm/editor.d.ts +13 -0
- package/dist/esm/editor.js +1 -0
- package/dist/esm/helpers/index.d.ts +1 -0
- package/dist/esm/helpers/index.js +4 -4
- package/dist/esm/helpers/memoryManager.d.ts +1 -0
- package/dist/esm/helpers/memoryManager.js +1 -1
- package/dist/esm/helpers/searchQueryParser.d.ts +1 -1
- package/dist/esm/helpers/searchQueryParser.js +5 -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 +3 -1
- package/dist/esm/helpers/shareFormatter.js +8 -7
- package/dist/esm/helpers/telemetry.js +1 -1
- package/dist/esm/i18n/index.d.ts +99 -1
- package/dist/esm/i18n/index.js +1 -1
- package/dist/esm/i18n/locales/ar.json +1 -1
- package/dist/esm/i18n/locales/bn.json +1 -0
- package/dist/esm/i18n/locales/de.json +1 -1
- package/dist/esm/i18n/locales/en.json +1 -1
- package/dist/esm/i18n/locales/es.json +1 -1
- package/dist/esm/i18n/locales/fr.json +1 -1
- package/dist/esm/i18n/locales/gu.json +1 -0
- package/dist/esm/i18n/locales/hi.json +1 -1
- package/dist/esm/i18n/locales/id.json +1 -0
- package/dist/esm/i18n/locales/it.json +1 -0
- package/dist/esm/i18n/locales/ja.json +1 -1
- package/dist/esm/i18n/locales/kn.json +1 -0
- package/dist/esm/i18n/locales/ko.json +1 -1
- package/dist/esm/i18n/locales/ml.json +1 -0
- package/dist/esm/i18n/locales/mr.json +1 -0
- package/dist/esm/i18n/locales/nl.json +1 -0
- package/dist/esm/i18n/locales/pa.json +1 -0
- package/dist/esm/i18n/locales/pl.json +1 -0
- package/dist/esm/i18n/locales/pt.json +1 -1
- package/dist/esm/i18n/locales/ru.json +1 -1
- package/dist/esm/i18n/locales/ta.json +1 -0
- package/dist/esm/i18n/locales/te.json +1 -0
- package/dist/esm/i18n/locales/tr.json +1 -0
- package/dist/esm/i18n/locales/vi.json +1 -0
- package/dist/esm/i18n/locales/zh.json +1 -1
- package/dist/esm/index.d.ts +16 -13
- package/dist/esm/index.js +8 -7
- package/dist/esm/native/NativeInspector.d.ts +4 -0
- package/dist/esm/native/NativeInspector.js +1 -1
- package/dist/esm/native/NativeNetworkInspector.d.ts +4 -0
- package/dist/esm/socket.d.ts +4 -0
- package/dist/esm/socket.js +1 -0
- package/dist/esm/styles/AppColors.d.ts +42 -2
- package/dist/esm/styles/AppColors.js +1 -1
- package/dist/esm/styles/common.js +1 -1
- package/dist/esm/styles/index.d.ts +30 -0
- package/dist/esm/styles/index.js +1 -1
- package/dist/esm/types/editor.d.ts +96 -0
- package/dist/esm/types/editor.js +1 -0
- package/dist/esm/types/enums.d.ts +40 -0
- package/dist/esm/types/enums.js +1 -1
- package/dist/esm/types/interfaces.d.ts +143 -1
- package/editor.d.ts +1 -0
- package/editor.js +1 -0
- package/ios/NetworkInspectorModule.mm +531 -12
- package/package.json +213 -2
- package/react-native-inapp-inspector.podspec +1 -1
- package/src/native/NativeInspector.ts +65 -4
- package/src/native/NativeNetworkInspector.ts +4 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import{Platform as
|
|
1
|
+
import{Platform as b,ToastAndroid as y,Alert as D,NativeModules as p,Linking as $}from"react-native";import S from"@react-native-clipboard/clipboard";import{showToast as M}from"./toast";import{copyMediaToClipboard as E}from"../native/NativeInspector";import{AppColors as a}from"../styles/AppColors";import{DOMAIN_COLORS as C,DURATION_FAST_MS as U,DURATION_SLOW_MS as P}from"../constants";export*from"./searchQueryParser";export*from"./memoryManager";export*from"./toast";export const isLocalDebugEnvironment=()=>{const t=typeof __DEV__<"u"&&!!__DEV__,e=p.SourceCode?.scriptURL||"",n=e.startsWith("http://")||e.startsWith("https://")||e.includes(":8081")||e.includes(":8082");return t||n},getDomainColor=t=>{if(!t)return C[0];let e=0;for(let n=0;n<t.length;n++)e=t.charCodeAt(n)+((e<<5)-e);return C[Math.abs(e)%C.length]},formatDateTime=t=>{const e=new Date(t),n=(h,l=2)=>String(h).padStart(l,"0"),r=n(e.getDate()),o=n(e.getMonth()+1),i=e.getFullYear(),s=n(e.getHours()),c=n(e.getMinutes()),u=n(e.getSeconds());return`${r}/${o}/${i} ${s}:${c}:${u}`},formatTimestamp=t=>{try{const e=new Date(t),n=e.getHours().toString().padStart(2,"0"),r=e.getMinutes().toString().padStart(2,"0"),o=e.getSeconds().toString().padStart(2,"0"),i=e.getMilliseconds().toString().padStart(3,"0");return`${n}:${r}:${o}.${i}`}catch{return"\u2014"}},getStatusColor=t=>!t||t===0?a.errorColor:t>=500?a.errorColor:t>=400?a.darkOrange:t>=300?a.warningIconGold:a.greenColor,getDurationColor=t=>t==null?a.grayTextWeak:t<U?a.greenColor:t<P?a.lightOrange:a.errorColor,getSize=t=>{try{const e=JSON.stringify(t)?.length??0;return e<1024?`${e} B`:`${(e/1024).toFixed(1)} KB`}catch{return"\u2014"}},formatBytes=t=>{if(t===0||!t||isNaN(t))return"0 B";const e=1024,n=["B","KB","MB","GB"],r=Math.floor(Math.log(t)/Math.log(e));return`${parseFloat((t/Math.pow(e,r)).toFixed(1))} ${n[r]||"B"}`},formatByteSize=t=>!t||t<=0?"0 B":t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:`${(t/(1024*1024)).toFixed(2)} MB`,copyToClipboard=(t,e)=>{const n=typeof t=="function"?t():t;let r="";if(typeof n=="string")r=n;else try{r=JSON.stringify(n,null,2)}catch{r=String(n)}try{typeof S?.setString=="function"?S.setString(r):typeof S?.default?.setString=="function"&&S.default.setString(r)}catch(o){__DEV__&&console.warn("[NetworkInspector] Clipboard.setString failed:",o)}try{M(e?`${e} copied to clipboard`:"Copied to clipboard")}catch{}try{b.OS==="android"&&y?.show&&y.show(e?`${e} copied to clipboard`:"Copied to clipboard",y.SHORT)}catch{}},copyImageOrMediaToClipboard=async(t,e="Image")=>{if(!t)return;let n=!1;try{n=await E(t)}catch{n=!1}if(!n){copyToClipboard(t,e);return}try{M(`${e} copied to clipboard`)}catch{}try{b.OS==="android"&&y?.show&&y.show(`${e} copied to clipboard`,y.SHORT)}catch{}},getPath=t=>{try{const e=new URL(t);return e.pathname+(e.search?e.search:"")}catch{return t.replace(/^https?:\/\/[^/?#]+/,"")||"/"}},getBaseUrl=t=>{try{const e=new URL(t);return`${e.protocol}//${e.host}`}catch{const e=t.match(/^(https?:\/\/[^/]+)/);return e?e[1]:""}},getCurlCommand=t=>{let e=`curl -X ${t.method} "${t.url}"`;if(t.requestHeaders&&Object.entries(t.requestHeaders).forEach(([n,r])=>{e+=` \\
|
|
2
2
|
-H "${n}: ${r}"`}),t.request&&t.method!=="GET"){const n=typeof t.request=="string"?t.request:JSON.stringify(t.request);e+=` \\
|
|
3
|
-
-d '${n.replace(/'/g,"'\\''")}'`}return e},getFetchCommand=t=>{const e={method:t.method};return t.requestHeaders&&Object.keys(t.requestHeaders).length>0&&(e.headers=t.requestHeaders),t.request&&t.method!=="GET"&&(e.body=JSON.stringify(t.request)),`fetch("${t.url}", ${JSON.stringify(e,null,2)})`},deduplicateLogs=t=>{const e=new Map;return t.forEach(n=>{if(!e.has(n.id))e.set(n.id,n);else{const r=e.get(n.id);(r.status==null&&n.status!=null||(n.startTime??0)>=(r.startTime??0))&&e.set(n.id,n)}}),Array.from(e.values()).sort((n,r)=>r.id-n.id)},escapeRegex=t=>t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),getNavigationInfo=(t,e=[])=>{if(!t)return{path:e.length>0?e.join(" \u2794 "):"",params:null};if(t.name&&!t.routes)return{path:e.length>0?[...e,t.name].join(" \u2794 "):t.name,params:t.params||null};if(!t.routes||!Array.isArray(t.routes)||t.routes.length===0)return{path:e.length>0?e.join(" \u2794 "):"",params:null};const n=typeof t.index=="number"&&t.index>=0&&t.index<t.routes.length?t.index:0,r=t.routes[n];if(!r)return{path:e.length>0?e.join(" \u2794 "):"",params:null};const o=r.name?[...e,r.name]:e;return r?.state?getNavigationInfo(r.state,o):{path:o.length>0?o.join(" \u2794 "):r.name||"",params:r.params||null}},getLogPageName=(t,e)=>{const n=e||t?.routeInfo;if(n&&n.path&&n.path!=="Navigators"){const r=n.path.split(" \u2794 ").map(o=>o.trim()).filter(Boolean);return r.length>0?r[r.length-1]:n.path}if(t.caller&&t.caller!=="Unknown")try{const r=t.caller.match(/([^/\\]+)\.(tsx|jsx|ts|js)/i);if(r&&r[1]){const o=r[1];if(!["networklogger","fetch","axios","apiclient","request","http","index","nativeinspector","inappinspector","bundleanalyzer"].includes(o.toLowerCase()))return o}}catch{}if(t.url)try{const o=t.url.split("?")[0].split("#")[0].replace(/^https?:\/\//i,""),i=o.indexOf("/");if(i!==-1){const
|
|
3
|
+
-d '${n.replace(/'/g,"'\\''")}'`}return e},getFetchCommand=t=>{const e={method:t.method};return t.requestHeaders&&Object.keys(t.requestHeaders).length>0&&(e.headers=t.requestHeaders),t.request&&t.method!=="GET"&&(e.body=JSON.stringify(t.request)),`fetch("${t.url}", ${JSON.stringify(e,null,2)})`},deduplicateLogs=t=>{const e=new Map;return t.forEach(n=>{if(!e.has(n.id))e.set(n.id,n);else{const r=e.get(n.id);(r.status==null&&n.status!=null||(n.startTime??0)>=(r.startTime??0))&&e.set(n.id,n)}}),Array.from(e.values()).sort((n,r)=>r.id-n.id)},escapeRegex=t=>t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),getNavigationInfo=(t,e=[])=>{if(!t)return{path:e.length>0?e.join(" \u2794 "):"",params:null};if(t.name&&!t.routes)return{path:e.length>0?[...e,t.name].join(" \u2794 "):t.name,params:t.params||null};if(!t.routes||!Array.isArray(t.routes)||t.routes.length===0)return{path:e.length>0?e.join(" \u2794 "):"",params:null};const n=typeof t.index=="number"&&t.index>=0&&t.index<t.routes.length?t.index:0,r=t.routes[n];if(!r)return{path:e.length>0?e.join(" \u2794 "):"",params:null};const o=r.name?[...e,r.name]:e;return r?.state?getNavigationInfo(r.state,o):{path:o.length>0?o.join(" \u2794 "):r.name||"",params:r.params||null}},getLogPageName=(t,e)=>{const n=e||t?.routeInfo;if(n&&n.path&&n.path!=="Navigators"){const r=n.path.split(" \u2794 ").map(o=>o.trim()).filter(Boolean);return r.length>0?r[r.length-1]:n.path}if(t.caller&&t.caller!=="Unknown")try{const r=t.caller.match(/([^/\\]+)\.(tsx|jsx|ts|js)/i);if(r&&r[1]){const o=r[1];if(!["networklogger","fetch","axios","apiclient","request","http","index","nativeinspector","inappinspector","bundleanalyzer"].includes(o.toLowerCase()))return o}}catch{}if(t.url)try{const o=t.url.split("?")[0].split("#")[0].replace(/^https?:\/\//i,""),i=o.indexOf("/");if(i!==-1){const c=o.substring(i+1).split("/").filter(Boolean),u=["api","v1","v2","v3","v4","rest","graphql","json","data","service","app"],h=c.filter(l=>!u.includes(l.toLowerCase()));if(h.length>0){const l=h[0];return l.charAt(0).toUpperCase()+l.slice(1)}}const s=o.split("/")[0];if(s)return s}catch{}return"General"},flattenObject=(t,e="")=>{let n={};return typeof t=="object"&&t!==null?Array.isArray(t)?t.forEach((r,o)=>{Object.assign(n,flattenObject(r,e?`${e}[${o}]`:`[${o}]`))}):Object.keys(t).forEach(r=>{Object.assign(n,flattenObject(t[r],e?`${e}.${r}`:r))}):n[e||"root"]=t,n},getDiff=(t,e)=>{const n=flattenObject(t),r=flattenObject(e),o=[];return new Set([...Object.keys(n),...Object.keys(r)]).forEach(s=>{s in n?s in r?n[s]!==r[s]&&o.push({type:"changed",path:s,oldVal:n[s],newVal:r[s]}):o.push({type:"removed",path:s,oldVal:n[s]}):o.push({type:"added",path:s,newVal:r[s]})}),o.sort((s,c)=>s.path.localeCompare(c.path))},formatDisplayUrl=t=>t?t.startsWith("http://")||t.startsWith("https://")?t:`https://${t}`:"",getLocalizedFilePath=(t,e,n)=>t.replace("country-language",`${e?.toLowerCase()}-${n?.toLowerCase()}`),getLocalizedFilePathWithSlash=(t,e,n)=>t.replace("country/language",`${e?.toLowerCase()}/${n?.toLowerCase()}`),isAllValuesEmpty=t=>!t||typeof t!="object"?!0:Object.values(t).every(e=>e&&typeof e=="object"&&!Array.isArray(e)&&Object.keys(e).length===0),formatDateTimeToAnalytics=t=>new Date(t)?.toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"}),getBundleIdentifier=()=>{const t=p.RNDeviceInfo;if(t&&typeof t.bundleId=="string")return t.bundleId;if(t&&typeof t.getBundleId=="function")try{const o=t.getBundleId();if(typeof o=="string")return o}catch{}const e=p.ExponentConstants;if(e&&e.manifest){const o=e.manifest;if(o.ios&&o.ios.bundleIdentifier)return o.ios.bundleIdentifier;if(o.android&&o.android.package)return o.android.package}const n=p.ExpoApplication;if(n&&typeof n.applicationId=="string")return n.applicationId;const r=p.SourceCode;if(r&&typeof r.scriptURL=="string"){const o=r.scriptURL;if(o.includes("assets/"))try{const i=o.match(/assets\/([^/?#]+)/);if(i&&i[1])return i[1]}catch{}}return"org.reactjs.native.example"},getAppName=()=>{const t=p.PlatformConstants;t&&t.interfaceIdiom;const e=p.RNDeviceInfo;if(e&&typeof e.appName=="string")return e.appName;const n=p.NetworkInspectorModule;if(n&&typeof n.appName=="string"&&n.appName.length>0&&n.appName!=="App")return n.appName;const r=p.ExpoApplication;if(r&&typeof r.applicationName=="string")return r.applicationName;const o=p.ExponentConstants;if(o&&o.manifest){const c=o.manifest;if(c.name)return c.name}const i=p.AppInfo;if(i&&typeof i.appName=="string")return i.appName;const s=getBundleIdentifier();if(s&&s!=="org.reactjs.native.example"){const c=s.split("."),u=c[c.length-1];return u?u.charAt(0).toUpperCase()+u.slice(1):"App"}return"App"},getAppVersionAndBuild=()=>{let t="",e="";const n=p.NetworkInspectorModule;if(n&&(typeof n.appVersion=="string"&&n.appVersion.length>0&&(t=n.appVersion),typeof n.appBuild=="string"&&n.appBuild.length>0&&(e=n.appBuild)),!t||!e){const r=p.ExpoApplication;r&&(!t&&typeof r.nativeAppVersion=="string"&&(t=r.nativeAppVersion),!e&&typeof r.nativeBuildVersion=="string"&&(e=r.nativeBuildVersion))}if(!t||!e){const r=p.ExponentConstants;if(r){const o=r.manifest||r.expoConfig;o&&(!t&&o.version&&(t=String(o.version)),e||(o.ios?.buildNumber?e=String(o.ios.buildNumber):o.android?.versionCode&&(e=String(o.android.versionCode))))}}if(!t||!e){const r=p.RNDeviceInfo;if(r){if(!t){if(typeof r.appVersion=="string")t=r.appVersion;else if(typeof r.getVersion=="function")try{t=r.getVersion()}catch{}}if(!e){if(typeof r.buildNumber=="string")e=r.buildNumber;else if(typeof r.getBuildNumber=="function")try{e=r.getBuildNumber()}catch{}}}}if(!t||!e){const r=p.AppInfo;r&&(!t&&typeof r.versionName=="string"&&(t=r.versionName),!e&&typeof r.versionCode=="string"&&(e=r.versionCode))}if(!t){const r=b.constants||p.PlatformConstants;r&&r.Version&&typeof r.Version=="string"&&r.Version.includes(".")&&(t=r.Version)}return t||(t="1.0"),e||(e="1"),{version:t,build:e,formatted:`${t} (${e})`}},handleOpenExternalLink=t=>{if(!t)return;const e=formatDisplayUrl(t);D.alert("Open Link",`Do you want to open this link in your web browser?
|
|
4
4
|
|
|
5
|
-
${e}`,[{text:"Cancel",style:"cancel"},{text:"Open",onPress:()=>{
|
|
5
|
+
${e}`,[{text:"Cancel",style:"cancel"},{text:"Open",onPress:()=>{$.openURL(e).catch(()=>{})}}])},formatTimeShort=t=>{const e=new Date(t),n=String(e.getHours()).padStart(2,"0"),r=String(e.getMinutes()).padStart(2,"0"),o=String(e.getSeconds()).padStart(2,"0");return`${n}:${r}:${o}`},formatTime=t=>{const e=new Date(t),n=String(e.getHours()).padStart(2,"0"),r=String(e.getMinutes()).padStart(2,"0"),o=String(e.getSeconds()).padStart(2,"0"),i=String(e.getMilliseconds()).padStart(3,"0");return`${n}:${r}:${o}.${i}`},formatGap=t=>{if(t<1e3)return`+${t}ms`;const e=Math.round(t/1e3);if(e<60)return`+${e}s`;const n=Math.floor(e/60),r=e%60;return r>0?`+${n}m ${r}s`:`+${n}m`},getJsonContent=t=>{if(!t)return null;const e=[];for(let n=0;n<t.length;n++)(t[n]==="{"||t[n]==="[")&&e.push(n);for(const n of e){const r=t.substring(n).trim();try{const o=JSON.parse(r);if(o!==null&&typeof o=="object")return{header:t.substring(0,n).trim(),data:o}}catch{}}return null},getJsonPreviewText=(t,e=4)=>{try{const n=JSON.stringify(t,null,2),r=n.split(`
|
|
6
6
|
`);return r.length>e?{text:r.slice(0,e).join(`
|
|
7
7
|
`)+`
|
|
8
|
-
...`,hasMore:!0}:{text:n,hasMore:!1}}catch{return{text:String(t),hasMore:!1}}},parseStackLine=(t,e=!1)=>{let n=t.trim().replace(/^at /,"");if(n.includes("@")){const
|
|
8
|
+
...`,hasMore:!0}:{text:n,hasMore:!1}}catch{return{text:String(t),hasMore:!1}}},parseStackLine=(t,e=!1)=>{let n=t.trim().replace(/^at /,"");if(n.includes("@")){const A=n.indexOf("@"),B=n.substring(0,A).trim(),O=n.substring(A+1).trim();n=B?`${B} (${O})`:O}const r=n.match(/^(.*?)\s*\((.*?)\)$/);let o="<anonymous>",i=n;r&&(o=r[1].trim()||"<anonymous>",i=r[2].trim()),(o.startsWith("?anon_")||o==="?")&&(o="anonymous"),i=i.replace(/^address at /,"");const s=i.match(/^(.*?):(\d+):(\d+)$/);let c=i,u,h;s&&(c=s[1],u=s[2],h=s[3]);let l=c.replace(/[?&].*$/,"").replace(/[)]+$/,"").replace(/\/\/+$/,"");l=l.replace(/^(?:https?:\/\/[^\/]+\/|file:\/\/\/|webpack:\/\/\/?)/,"");let f=l.split("/").filter(Boolean).pop()||l;f=f.replace(/[?&].*$/,"").replace(/[)]+$/,""),(f.startsWith("&")||f.startsWith("?")||f.startsWith("platform=")||f.includes("platform=")||f.startsWith("dev=")||f.includes("dev="))&&(f="Unknown",l="Unknown");const x=f.match(/\.([a-z0-9]+)$/i),d=x?x[1].toLowerCase():"",g=d==="tsx"||d==="jsx"||d==="ts"||d==="js"?d:"other",N=i==="native"||l==="native",v=l.includes("InternalBytecode")||l.includes("metro-runtime")||l.includes("regenerator-runtime")||o==="tryCallOne"||o==="asyncGeneratorStep"||o==="_next"||o==="next"&&N,w=l.includes("node_modules")||l.includes("react-native/Libraries")||l.includes("react-native-inapp-inspector")&&!l.includes("/example/"),I=!N&&!v&&!w&&(g==="tsx"||g==="jsx"||g==="ts"||g==="js"||!f.includes(".bundle")&&f!=="Unknown"),_=I?"app":w?"dependency":N?"native":"runtime",L=v||N||o==="asyncGeneratorStep"||o==="_next";let m=l;m.includes("/example/")?m=m.substring(m.indexOf("/example/")+9):m.includes("/src/")?m=m.substring(m.indexOf("/src/")+1):m.includes("/node_modules/")&&(m=m.substring(m.indexOf("/node_modules/")+14));const T=u?`${f}:${u}${h?`:${h}`:""}`:f;return{raw:t,functionName:o,fileName:f,fullPath:m,rawFilePath:c,fileExt:g,frameType:_,isUserCode:I,isRuntimeNoise:L,lineNumber:u,columnNumber:h,isOrigin:e,copyableLocation:T}},getCleanCallerDisplay=t=>{if(!t||t==="Unknown"||t.trim()==="")return null;const e=t.trim();if(e.startsWith("&platform")||e.startsWith("?platform")||e.startsWith("&")||e.includes("&platform=")||e.includes("?platform=")){const i=e.match(/^(.*?)\s*[\(@]/);if(i&&i[1]&&!i[1].includes("&")&&!i[1].includes("platform")){const s=i[1].trim();if(s&&s!=="<anonymous>"&&s!=="anonymous"&&!s.startsWith("?anon_"))return{fileName:s,functionName:s,display:s}}return null}const n=parseStackLine(t,!0);if(!n)return null;if(n.fileName.includes(".bundle")||n.fileName.includes("platform=")||n.fileName.startsWith("&")||n.fileName.startsWith("?")||n.fileName==="index.bundle"||n.fileName==="bundle"||n.fileName==="Unknown")return n.functionName&&n.functionName!=="<anonymous>"&&n.functionName!=="anonymous"&&!n.functionName.startsWith("?")&&!n.functionName.startsWith("_callee")&&!n.functionName.includes("regeneratorRuntime")?{fileName:n.functionName,lineNumber:n.lineNumber,functionName:n.functionName,display:n.functionName}:null;const o=n.lineNumber?`${n.fileName}:${n.lineNumber}`:n.fileName;return{fileName:n.fileName,lineNumber:n.lineNumber,functionName:n.functionName,display:o}},openInVSCode=(t,e,n)=>{const r=e?Number(e):1,o=n?Number(n):1,i=e?`:${e}`:"",s=n?`:${n}`:"",c=t.replace(/^file:\/\//,"");let u=null;try{const d=p?.SourceCode?.scriptURL||p?.PlatformConstants?.serverHost||p?.DevSettings?.serverHost;if(typeof d=="string"&&d.length>0){const g=d.match(/^(https?:\/\/[^/]+)/);g?u=g[1]:!d.startsWith("http")&&d.includes(":")&&(u=`http://${d}`)}}catch{}Array.from(new Set([...u?[u]:[],"http://localhost:8081","http://127.0.0.1:8081","http://10.0.2.2:8081"])).forEach(d=>{try{fetch(`${d}/open-stack-frame`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({file:c,lineNumber:r,column:o})}).catch(()=>{})}catch{}});const l=`vscode://file/${c.replace(/^\/+/,"")}${i}${s}`,f=`cursor://file/${c.replace(/^\/+/,"")}${i}${s}`,x=`vscode-insiders://file/${c.replace(/^\/+/,"")}${i}${s}`;$.openURL(l).catch(()=>{$.openURL(f).catch(()=>{$.openURL(x).catch(()=>{copyToClipboard(`${c}${i}${s}`,"Location")})})})},ANALYTICS_EVENT_PALETTE=[a.googleBlue,a.googleGreen,a.googlePurple,a.googleTeal,a.googleRed,a.googleOrange,a.blue700,a.materialGreen],getEventColor=t=>{const e=typeof t=="string"?t:String(t||"");let n=0;for(let r=0;r<e.length;r++)n=n*31+e.charCodeAt(r)|0;return ANALYTICS_EVENT_PALETTE[Math.abs(n)%ANALYTICS_EVENT_PALETTE.length]};export{getEventCategory,registerGAPlugin}from"./gaAnalyticsRegistry";export const getCategoryColors=t=>{switch(t){case"page_view":case"Page View":return{bg:a.blueBg,border:a.blueBorder,text:a.blue800};case"ecommerce":case"Ecommerce":return{bg:a.greenBg,border:a.greenBorder,text:a.materialGreen};case"system":case"System":return{bg:a.greyBg,border:a.greyBorder,text:a.grey600};default:return{bg:a.purpleBg,border:a.purpleBorder,text:a.purpleText}}},getRuntimeDiagnostics=()=>{const t=typeof global.HermesInternal<"u",e=typeof global._v8runtime<"u",n=t?"hermes":e?"v8":"jsc",o=typeof global.nativeFabricUIManager<"u"||!!global.__turboModuleProxy?"fabric":"paper";let i=32.4,s=64;try{const c=global.HermesInternal?.getInstrumentedStats?.();c?.js_heap_size?(i=Number((c.js_heap_size/(1024*1024)).toFixed(1)),s=Number(((c.js_allocated_bytes||c.js_heap_size*1.6)/(1024*1024)).toFixed(1))):global.performance?.memory?.usedJSHeapSize&&(i=Number((global.performance.memory.usedJSHeapSize/(1024*1024)).toFixed(1)),s=Number((global.performance.memory.totalJSHeapSize/(1024*1024)).toFixed(1)))}catch{}return{engineType:n,archType:o,usedHeapMb:i,totalAllocMb:s}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{AppState as
|
|
1
|
+
import{AppState as g}from"react-native";import{pruneNetworkLogs as h}from"../customHooks/networkLogger";import{pruneConsoleLogs as x}from"../customHooks/consoleLogger";import{pruneReduxHistory as L}from"../customHooks/reduxLogger";import{pruneAnalyticsLogs as w}from"../customHooks/analyticsLogger";import{pruneCrashRecords as A,addCrashBreadcrumb as M}from"../customHooks/crashHandler";import{prunePushRecords as P}from"../customHooks/pushNotificationLogger";import{pruneSocketRecords as b}from"../customHooks/socketLogger";import{showToast as R}from"./toast";const n=new Set;let r=null,t=!1,s=0;export const pruneAllLogs=(e="manual",a=.5)=>{const c=h(void 0),u=x(void 0),m=L(void 0),p=w(void 0),i=A(void 0),d=0;P(20);const l=0;b(20);const f=c+u+m+p+i+d+l;if(s=Date.now(),typeof globalThis.gc=="function")try{globalThis.gc()}catch{}const o={timestamp:s,prunedNetwork:c,prunedConsole:u,prunedRedux:m,prunedAnalytics:p,prunedCrashes:i,prunedPush:d,prunedSocket:l,totalPruned:f,triggeredBy:e};try{M("system",`[MemoryManager] Low memory auto-prune executed (${e}). Freed ${f} log records.`,o)}catch{}return n.forEach(y=>{try{y(o)}catch{}}),o},setupMemoryWarningHandler=()=>{if(t)return()=>{};t=!0;try{r=g.addEventListener("memoryWarning",e=>{const a=pruneAllLogs("memory-warning",.5);try{R(`Memory Warning: Auto-pruned ${a.totalPruned} inspector logs`)}catch{}})}catch{}return()=>{if(r){try{r.remove()}catch{}r=null}t=!1}},subscribeMemoryWarning=e=>(n.add(e),()=>{n.delete(e)}),getLastPruneTimestamp=()=>s,isMemoryHandlerActive=()=>t;
|
|
@@ -4,4 +4,4 @@ export interface SearchQueryOptions {
|
|
|
4
4
|
isRegex?: boolean;
|
|
5
5
|
isCaseSensitive?: boolean;
|
|
6
6
|
}
|
|
7
|
-
export declare function matchNetworkLogQuery(log: NetworkLog, searchQuery: string, routePath?: string,
|
|
7
|
+
export declare function matchNetworkLogQuery(log: NetworkLog, searchQuery: string, routePath?: string, options?: SearchQueryOptions): boolean;
|
|
@@ -1 +1,5 @@
|
|
|
1
|
-
import{markSearchFilterUsed as
|
|
1
|
+
import{markSearchFilterUsed as N}from"./telemetry";const W=new Set(["via","nel","report-to","reporting-endpoints","cf-ray","cf-cache-status","alt-svc","server","etag","date","x-powered-by","x-request-id","x-content-type-options","accept-ranges","transfer-encoding","connection","keep-alive"]);function I(s){const u=[],w=/[^\s"']+|"([^"]*)"|'([^']*)'/g;let i;for(;(i=w.exec(s))!==null;)i[1]!=null?u.push(i[1]):i[2]!=null?u.push(i[2]):i[0]&&u.push(i[0]);return u}export function matchNetworkLogQuery(s,u,w,i){if(!u||u.trim().length===0)return!0;N();const R=!!i?.isCaseSensitive,L=!!i?.isRegex,x=i?.scope||"all",H=s.method||"",y=s.url||"",d=s.status!=null?String(s.status):"pending",o=typeof s.status=="number"?s.status:s.status!=null?parseInt(String(s.status),10):null,$=s.client||"",j=s.caller||"",b=w||s?.routeInfo?.path||"",k=n=>{if(n==null)return"";if(typeof n=="string")return n;try{return JSON.stringify(n)}catch{return""}},m=k(s.request),C=k(s.response),p=(n,l=!1)=>{if(!n||typeof n!="object")return"";const r=Object.entries(n);return l?r.map(([t,f])=>`${t}: ${f}`).join(`
|
|
2
|
+
`):r.filter(([t])=>!W.has(t.toLowerCase())).map(([t,f])=>`${t}: ${f}`).join(`
|
|
3
|
+
`)},v=p(s.requestHeaders,x==="headers"),q=p(s.responseHeaders,x==="headers"),h=(n=>{switch(n){case"url":return y;case"reqBody":return m;case"resBody":return C;case"headers":return`${v}
|
|
4
|
+
${q}`;default:return[y,H,d,b,$,j,m,C,v,q].join(" ")}})(x),c=(n,l)=>{if(L)try{return new RegExp(l,R?"":"i").test(n)}catch{}return R?n.includes(l):n.toLowerCase().includes(l.toLowerCase())},B=I(u);return B.length===0?!0:B.every(n=>{let l=!1,r=n;if(r.length>1&&(r.startsWith("-")||r.startsWith("!"))&&(l=!0,r=r.slice(1)),!r)return!0;let t=!1;const f=r.indexOf(":");if(f>0){const e=r.slice(0,f).toLowerCase(),a=r.slice(f+1);if(e==="url"||e==="u"||e==="path")t=c(y,a);else if(e==="method"||e==="m")t=c(H,a);else if(e==="status"||e==="s")if(a==="error"||a==="failed"||a==="err")t=s.status===0||o!==null&&o>=400;else if(a==="success"||a==="ok")t=o!==null&&o>=200&&o<300;else if(a.endsWith("xx")){const S=a[0];t=d.startsWith(S)}else t=d.includes(a);else if(e==="header"||e==="h"){const S=`${p(s.requestHeaders,!0)}
|
|
5
|
+
${p(s.responseHeaders,!0)}`;t=c(S,a)}else e==="body"||e==="b"?t=c(m,a)||c(C,a):e==="client"||e==="c"?t=c($,a):e==="page"||e==="p"?t=c(b,a):t=c(h,r)}else{const e=r.toLowerCase();e==="error"||e==="failed"||e==="err"||e==="fail"?t=s.status===0||o!==null&&o>=400||c(h,r):e==="success"||e==="ok"||e==="2xx"?t=o!==null&&o>=200&&o<300||c(h,r):/^[1-5]xx$/.test(e)?t=d.startsWith(e[0]):t=c(h,r)}return l?!t:t})}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Platform as
|
|
1
|
+
import{Platform as i,Settings as n}from"react-native";import{getNativeStorageItem as l,setNativeStorageItem as u,isNativeModuleAvailable as c}from"../native/NativeInspector";const m=new Map;let s=null;export function setCustomStorage(t){s=t}const e="rn-inapp-inspector.settings.v1";export async function loadSettings(){try{if(s){const o=await s.getItem(e);if(!o)return{};const r=JSON.parse(o);return r&&typeof r=="object"?r:{}}if(c()){const o=await l(e);if(o){const r=JSON.parse(o);return r&&typeof r=="object"?r:{}}}if(i?.OS==="ios"&&n?.get){const o=n.get(e);if(!o)return{};if(typeof o=="string"){const r=JSON.parse(o);return r&&typeof r=="object"?r:{}}return o&&typeof o=="object"?o:{}}const t=m.get(e);if(!t)return{};const a=JSON.parse(t);return a&&typeof a=="object"?a:{}}catch{return{}}}export function saveSettings(t){try{const a=JSON.stringify(t);if(s){s.setItem(e,a);return}if(c()&&u(e,a),i?.OS==="ios"&&n?.set){n.set({[e]:a});return}m.set(e,a)}catch{}}export async function clearPersistedSettings(){try{if(s){typeof s.removeItem=="function"?await s.removeItem(e):await s.setItem(e,"");return}if(c()&&await u(e,null),i?.OS==="ios"&&n?.set){n.set({[e]:null});return}m.delete(e)}catch{}}export const isPersistentStorageAvailable=()=>s!==null||c()||i.OS==="ios";export function getCustomStorage(){return s}export function calculateRamBasedLimits(t){return t>=3e3?{maxNetworkLogs:500,maxConsoleLogs:500,maxAnalyticsEvents:300,maxCrashRecords:150,maxPushRecords:100,maxSocketRecords:100,profileName:"High-End",freeRamMb:t}:t>=1500?{maxNetworkLogs:300,maxConsoleLogs:300,maxAnalyticsEvents:200,maxCrashRecords:100,maxPushRecords:75,maxSocketRecords:75,profileName:"Standard",freeRamMb:t}:t>=600?{maxNetworkLogs:200,maxConsoleLogs:200,maxAnalyticsEvents:100,maxCrashRecords:50,maxPushRecords:50,maxSocketRecords:50,profileName:"Compact",freeRamMb:t}:{maxNetworkLogs:100,maxConsoleLogs:100,maxAnalyticsEvents:50,maxCrashRecords:25,maxPushRecords:25,maxSocketRecords:25,profileName:"Ultra-Light",freeRamMb:t}}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AnalyticsEvent, ConsoleLog, CrashRecord, NetworkLog, PushNotificationRecord, ReduxHistoryEntry } from '../types';
|
|
1
|
+
import type { AnalyticsEvent, ConsoleLog, CrashRecord, NetworkLog, PushNotificationRecord, ReduxHistoryEntry, SocketConnectionRecord } from '../types';
|
|
2
2
|
export declare function formatApiReport(log: NetworkLog): string;
|
|
3
3
|
export declare function formatPushReport(record: PushNotificationRecord): string;
|
|
4
4
|
export declare function formatCrashReport(crash: CrashRecord): string;
|
|
@@ -11,3 +11,5 @@ export declare function shareCrashReport(crash: CrashRecord): Promise<void>;
|
|
|
11
11
|
export declare function shareAnalyticsReport(event: AnalyticsEvent): Promise<void>;
|
|
12
12
|
export declare function shareReduxReport(action: ReduxHistoryEntry): Promise<void>;
|
|
13
13
|
export declare function shareLogReport(log: ConsoleLog): Promise<void>;
|
|
14
|
+
export declare function formatSocketReport(record: SocketConnectionRecord): string;
|
|
15
|
+
export declare function shareSocketReport(record: SocketConnectionRecord): Promise<void>;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import{Alert as
|
|
2
|
-
`)}export function formatPushReport(e){const
|
|
3
|
-
`)}export function formatCrashReport(e){const
|
|
4
|
-
`)}export function formatAnalyticsReport(e){const
|
|
5
|
-
`)}export function formatReduxReport(e){const
|
|
6
|
-
`)}export function formatLogReport(e){const
|
|
7
|
-
`)}async function r(e,
|
|
1
|
+
import{Alert as l,Share as $}from"react-native";import{formatDateTime as i,getCurlCommand as c}from"./index";function p(e){if(e===void 0)return"undefined";if(e===null)return"null";if(typeof e=="string")return e;try{return JSON.stringify(e,null,2)}catch{return String(e)}}export function formatApiReport(e){const n=(e.method||"GET").toUpperCase(),t=e.status===0?"Failed / Network Error":e.status!=null?`${e.status} ${e.status===200?"OK":""}`.trim():"Pending",u=e.duration!=null?`${e.duration}ms`:"N/A",o=i(e.startTime||Date.now()),s=c(e),a=["\u{1F680} API INSPECTION REPORT","\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501",`\u{1F4CC} Method: ${n}`,`\u{1F4CA} Status: ${t}`,`\u23F1\uFE0F Duration: ${u}`,`\u{1F552} Time: ${o}`];return e.client&&a.push(`\u{1F50C} Client: ${e.client.toUpperCase()}`),a.push(`\u{1F310} URL: ${e.url||"N/A"}`),a.push(""),e.requestHeaders&&Object.keys(e.requestHeaders).length>0&&(a.push("\u{1F4CB} Request Headers:"),a.push(p(e.requestHeaders)),a.push("")),e.request!=null&&e.request!==""&&(a.push("\u{1F4DD} Request Body:"),a.push(p(e.request)),a.push("")),e.responseHeaders&&Object.keys(e.responseHeaders).length>0&&(a.push("\u{1F4D1} Response Headers:"),a.push(p(e.responseHeaders)),a.push("")),e.response!=null&&e.response!==""&&(a.push("\u{1F4E5} Response Data:"),a.push(p(e.response)),a.push("")),s&&(a.push("\u{1F4BB} cURL Command:"),a.push(s),a.push("")),a.push("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),a.push("Generated by React Native InApp Inspector"),a.join(`
|
|
2
|
+
`)}export function formatPushReport(e){const n=i(e.timestamp||Date.now()),t=(e.source||"push").toUpperCase(),u=(e.appState||"unknown").toUpperCase(),o=(e.action||"received").toUpperCase(),s=["\u{1F514} PUSH NOTIFICATION REPORT","\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501",`\u{1F4CC} Title: ${e.title||"(No Title)"}`,`\u{1F4DD} Body: ${e.body||"(No Body)"}`,`\u{1F3E2} Source: ${t}${e.domain?` (${e.domain})`:""}`,`\u{1F194} Message ID: ${e.id||"N/A"}`,`\u{1F4F1} App State: ${u}`,`\u{1F3AF} Action: ${o}`,`\u{1F552} Time: ${n}`];return e.subtitle&&s.push(`\u{1F4D1} Subtitle: ${e.subtitle}`),e.channelId&&s.push(`\u{1F3F7}\uFE0F Channel: ${e.channelId}`),e.priority&&s.push(`\u26A1 Priority: ${e.priority}`),e.badge!=null&&s.push(`\u{1F522} Badge: ${e.badge}`),e.sound&&s.push(`\u{1F50A} Sound: ${e.sound}`),e.imageUrl&&s.push(`\u{1F5BC}\uFE0F Image: ${e.imageUrl}`),s.push(""),e.data&&Object.keys(e.data).length>0&&(s.push("\u{1F4E6} Custom Data Payload:"),s.push(p(e.data)),s.push("")),e.customDomainAttributes&&Object.keys(e.customDomainAttributes).length>0&&(s.push("\u{1F3E2} Domain Attributes:"),s.push(p(e.customDomainAttributes)),s.push("")),e.rawPayload!=null&&(s.push("\u2699\uFE0F Raw Payload:"),s.push(p(e.rawPayload)),s.push("")),s.push("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),s.push("Generated by React Native InApp Inspector"),s.join(`
|
|
3
|
+
`)}export function formatCrashReport(e){const n=`${e.dateStr||""} ${e.timeStr||""}`.trim()||i(e.timestamp),t=["\u{1F4A5} CRASH REPORT","\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501",`\u26A0\uFE0F Error: ${e.name||"Error"}: ${e.message||"Unknown error"}`,`\u{1F6A8} Fatal: ${e.isFatal?"YES (Fatal)":"NO (Caught)"}`,`\u{1F3F7}\uFE0F Type: ${(e.type||"js").toUpperCase()}`,`\u{1F552} Time: ${n}`];return e.deviceInfo&&t.push(`\u{1F4F1} Platform: ${e.deviceInfo.platform||"N/A"} (OS: ${e.deviceInfo.osVersion||"N/A"}, RN: ${e.deviceInfo.rnVersion||"N/A"})`),e.memoryInfo?.usedJSHeapSize&&t.push(`\u{1F4BE} Used Heap: ${Math.round(e.memoryInfo.usedJSHeapSize/(1024*1024))} MB`),t.push(""),e.stack&&(t.push("\u{1F4DC} Stack Trace:"),t.push(e.stack),t.push("")),e.breadcrumbs&&e.breadcrumbs.length>0&&(t.push(`\u{1F43E} Breadcrumbs (${e.breadcrumbs.length}):`),e.breadcrumbs.slice(-10).forEach(u=>{t.push(` \u2022 [${u.type}] ${u.message} (${i(u.timestamp)})`)}),t.push("")),t.push("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),t.push("Generated by React Native InApp Inspector"),t.join(`
|
|
4
|
+
`)}export function formatAnalyticsReport(e){const n=i(e.timestamp),t=["\u{1F4CA} ANALYTICS EVENT REPORT","\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501",`\u{1F4CC} Event Name: ${e.name||"Unknown"}`,`\u{1F3E2} Source: ${(e.source||"manual").toUpperCase()}`,`\u{1F552} Timestamp: ${n}`];return e.screenName&&t.push(`\u{1F4F1} Screen Name: ${e.screenName}`),e.userId&&t.push(`\u{1F464} User ID: ${e.userId}`),e.trackingId&&t.push(`\u{1F194} Tracking ID: ${e.trackingId}`),t.push(""),e.params&&Object.keys(e.params).length>0&&(t.push("\u{1F4E6} Event Parameters:"),t.push(p(e.params)),t.push("")),e.userProperties&&Object.keys(e.userProperties).length>0&&(t.push("\u{1F464} User Properties:"),t.push(p(e.userProperties)),t.push("")),t.push("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),t.push("Generated by React Native InApp Inspector"),t.join(`
|
|
5
|
+
`)}export function formatReduxReport(e){const n=typeof e.timestamp=="number"?i(e.timestamp):e.timestamp,t=["\u{1F504} REDUX ACTION REPORT","\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501",`\u{1F4CC} Action Type: ${e.type||"UNKNOWN"}`,`\u{1F552} Timestamp: ${n}`];return e.caller&&t.push(`\u{1F4CD} Caller: ${e.caller}`),e.originType&&t.push(`\u2699\uFE0F Origin: ${e.originType}`),e.affectedSlices&&e.affectedSlices.length>0&&t.push(`\u{1F370} Slices: ${e.affectedSlices.join(", ")}`),t.push(""),t.push("\u{1F4E6} Action Payload:"),t.push(p(e.payload)),t.push(""),e.prevState!==void 0&&(t.push("\u23EE\uFE0F Previous State:"),t.push(p(e.prevState)),t.push("")),e.nextState!==void 0&&(t.push("\u23ED\uFE0F Next State:"),t.push(p(e.nextState)),t.push("")),t.push("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),t.push("Generated by React Native InApp Inspector"),t.join(`
|
|
6
|
+
`)}export function formatLogReport(e){const n=i(e.timestamp),t=["\u{1F4DC} CONSOLE LOG REPORT","\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501",`\u{1F4CC} Level: ${(e.type||"info").toUpperCase()}`,`\u{1F552} Timestamp: ${n}`,`\u{1F4AC} Message: ${e.message||""}`];return e.caller&&t.push(`\u{1F4CD} Caller: ${e.caller}`),t.push(""),e.rawArgs&&e.rawArgs.length>0&&(t.push("\u{1F4E6} Arguments:"),t.push(p(e.rawArgs)),t.push("")),(e.stack||e.errorStack)&&(t.push("\u{1F4DC} Stack Trace:"),t.push(e.stack||e.errorStack||""),t.push("")),t.push("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),t.push("Generated by React Native InApp Inspector"),t.join(`
|
|
7
|
+
`)}async function r(e,n){try{await $.share({title:e,message:n},{dialogTitle:e})}catch(t){t?.message!=="User did not share"&&l.alert("Share Error",t?.message||"Failed to open share sheet")}}export async function shareApiReport(e){const n=formatApiReport(e),t=`API: ${e.method||"GET"} ${e.url?.substring(0,40)||""}`;await r(t,n)}export async function sharePushReport(e){const n=formatPushReport(e),t=`Push: ${e.title||e.id||"Notification"}`;await r(t,n)}export async function shareCrashReport(e){const n=formatCrashReport(e),t=`Crash: ${e.name||e.message||"Error"}`;await r(t,n)}export async function shareAnalyticsReport(e){const n=formatAnalyticsReport(e),t=`Analytics: ${e.name||"Event"}`;await r(t,n)}export async function shareReduxReport(e){const n=formatReduxReport(e),t=`Redux: ${e.type||"Action"}`;await r(t,n)}export async function shareLogReport(e){const n=formatLogReport(e),t=`Log: ${(e.type||"info").toUpperCase()} - ${e.message?.substring(0,30)||""}`;await r(t,n)}export function formatSocketReport(e){const n=(e.client||"websocket").toUpperCase(),t=(e.status||"open").toUpperCase(),u=e.duration!=null?`${e.duration}ms`:"Active / Open",o=i(e.startTime||Date.now()),s=["\u{1F50C} WEBSOCKET / SOCKET.IO REPORT","\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501",`\u{1F4E1} Client: ${n}`,`\u{1F310} URL: ${e.url||"N/A"}`,`\u26A1 Status: ${t}`,`\u23F1\uFE0F Connected: ${o}`,`\u23F3 Duration: ${u}`,`\u{1F4E6} Total Frames: ${e.frames?.length||0} (${e.sentCount||0} sent, ${e.receivedCount||0} recvd)`,`\u{1F4CA} Data Size: ${(e.totalBytesSent||0)+(e.totalBytesReceived||0)} bytes`];return e.protocols&&s.push(`\u{1F4DC} Protocols: ${Array.isArray(e.protocols)?e.protocols.join(", "):e.protocols}`),e.closeCode!=null&&s.push(`\u{1F6D1} Close Code: ${e.closeCode} (${e.closeReason||"N/A"})`),e.error&&s.push(`\u274C Error: ${e.error}`),e.caller&&s.push(`\u{1F4CD} Caller: ${e.caller}`),e.query&&Object.keys(e.query).length>0&&(s.push(""),s.push("\u{1F50D} Query Parameters:"),s.push(p(e.query))),e.frames&&e.frames.length>0&&(s.push(""),s.push("\u{1F4AC} Recent Message Frames:"),e.frames.slice(-10).forEach((a,h)=>{const m=a.direction==="send"?"\u2B06\uFE0F SEND":"\u2B07\uFE0F RECV",f=a.eventName?` [${a.eventName}]`:"";s.push(`--- Frame #${h+1} (${m}${f}, ${a.type}, ${a.size||0}B) ---`),s.push(p(a.data))})),s.push(""),s.push("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),s.push("Generated by React Native InApp Inspector"),s.join(`
|
|
8
|
+
`)}export async function shareSocketReport(e){const n=formatSocketReport(e),t=`Socket: ${e.client?.toUpperCase()||"WS"} ${e.url?.substring(0,35)||""}`;await r(t,n)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import b from"react";import{Appearance as ae,Dimensions as re,PixelRatio as P,Platform as l,NativeModules as oe}from"react-native";import{LIB_VERSION as R}from"../constants/version";import{loadSettings as y,saveSettings as S}from"./settingsStore";import{isReduxConnected as ie}from"../customHooks/reduxLogger";import{isFirebaseAnalyticsPatched as se}from"../customHooks/analyticsLogger";import{getCrashRecords as ce}from"../customHooks/crashHandler";import{getNetworkLogs as le}from"../customHooks/networkLogger";import{isNativeModuleAvailable as de}from"../native/NativeInspector";import{getAppName as _e,getBundleIdentifier as ue,getAppVersionAndBuild as me,isLocalDebugEnvironment as ve}from"./index";import{ENC_MID as $,ENC_SEC as j,TELEMETRY_SALT as v}from"../constants/telemetryConfig";const z="react-native-inapp-inspector",pe=`${z}::${v}`;function fe(t,o){const i=[];let r=1518500249;for(let a=0;a<o;a++){const e=t.charCodeAt(a%t.length);r=(r*31+e*17+a*13^r>>>7)&4294967295,i.push(r>>>a%24&255)}return i}function H(t){if(!t)return"";const o=[];for(let a=0;a<t.length;a+=2)o.push(parseInt(t.substring(a,a+2),16));const i=fe(pe,o.length),r=[];for(let a=0;a<o.length;a++){const e=i[a],d=v.charCodeAt(a%v.length),c=(o[a]^e^d)&255;r.push(String.fromCharCode(c))}return r.join("")}let u=null,m=null;function ge(){if(u!==null&&m!==null)return{measurementId:u,apiSecret:m};if(!$||!j||!v)return u="",m="",{measurementId:"",apiSecret:""};try{u=H($),m=H(j)}catch{u="",m=""}return{measurementId:u,apiSecret:m}}function K(){const{measurementId:t,apiSecret:o}=ge();return!t||!o?"":`https://www.google-analytics.com/mp/collect?measurement_id=${t}&api_secret=${o}`}const he=1440*60*1e3;let p=!0,U=!1;export function setTelemetryEnabled(t){p=t}export function markSearchFilterUsed(){U=!0}async function Z(){try{const t=await y();if(t.telemetryClientId||t.telemetryDeviceId){const e=t.telemetryClientId||t.telemetryDeviceId||"";return t.telemetryDeviceId||await S({...t,telemetryDeviceId:e}),e}const o=Math.floor(1e8+Math.random()*9e8),i=Math.floor(1e9+Math.random()*9e9),r=`${o}.${i}`,a=Date.now();return await S({...t,telemetryClientId:r,telemetryDeviceId:r,deviceFirstSeen:t.deviceFirstSeen||a}),r}catch{return`${Math.floor(1e8+Math.random()*9e8)}.${Math.floor(1e9+Math.random()*9e9)}`}}function be(){try{if(l.OS==="android"){const t=l.constants||{},o=String(t.Model||"").toLowerCase(),i=String(t.Brand||"").toLowerCase(),r=String(t.Fingerprint||"").toLowerCase(),a=String(t.Hardware||"").toLowerCase(),e=String(t.Manufacturer||"").toLowerCase();return o.includes("emulator")||o.includes("sdk")||o.includes("google_sdk")||o.includes("vbox")||i.includes("generic")||r.startsWith("generic")||a.includes("goldfish")||a.includes("ranchu")||e.includes("genymotion")}if(l.OS==="ios"){const t=l.constants||{};return String(t.Model||"").toLowerCase().includes("simulator")||!!t.isSimulator}}catch{return!1}return!1}function ye(){try{const t=typeof Intl<"u"&&Intl.DateTimeFormat?Intl.DateTimeFormat().resolvedOptions():{},o=t.timeZone||"unknown",i=t.locale||"unknown";let r="unknown";if(i&&i!=="unknown"){const a=i.split(/[-_]/);a.length>1&&(r=a[a.length-1].toUpperCase())}return{countryCode:r,locale:i,timeZone:o}}catch{return{countryCode:"unknown",locale:"unknown",timeZone:"unknown"}}}function G(t,o){const i=l.constants,r=i?.reactNativeVersion?`${i.reactNativeVersion.major}.${i.reactNativeVersion.minor}.${i.reactNativeVersion.patch}`:"unknown",a=typeof global.HermesInternal=="object"&&global.HermesInternal!==null,e=global?.nativeFabricUIManager!==void 0,d=!!(global?._rn_bridgeless||global?.RN$Bridgeless),c=!!(typeof __DEV__<"u"&&__DEV__),n=be(),{countryCode:_,locale:f,timeZone:J}=ye();let w="unknown",k=1,I=1,M="phone",C="portrait";try{const s=re.get("window");w=`${Math.round(s.width)}x${Math.round(s.height)}`,k=P.get(),I=P.getFontScale(),C=s.width>s.height?"landscape":"portrait",M=l.OS==="ios"&&!!l.isPad||Math.min(s.width,s.height)>=600?"tablet":"phone"}catch{}let x="unknown";try{x=ae?.getColorScheme?.()||"unknown"}catch{}const Y=!!(globalThis?.expo||globalThis?.__expo||globalThis?.__turboModuleProxy?.name==="Expo"||l.constants?.ExpoVersion);let g="non_hermes",h="jsc";if(a){h="hermes";try{const s=global.HermesInternal?.getRuntimeProperties?.()||{};g=s["OSS Release Version"]||(s["Bytecode Version"]?`bc_v${s["Bytecode Version"]}`:"hermes")}catch{g="hermes"}}else globalThis?._v8&&(h="v8");let T=!1;try{T=ie()}catch{}let E=!1;try{E=se()}catch{}const N=de(),W=!!(oe?.RNMMKV||globalThis?.MMKV);let D=0;try{D=ce().length}catch{}let V="0";try{const s=le().length;V=s===0?"0":s<=10?"1-10":s<=50?"11-50":s<=100?"51-100":"100+"}catch{}let A=!1;try{A=ve()}catch{}const q=o?.defaultTab||"apis",Q=N&&o?.useNativeFab!==!1?"native_ui_thread":"js_floating_button",X=String(i?.Brand||(l.OS==="ios"?"Apple":"unknown")),ee=String(i?.Model||i?.systemName||(l.OS==="ios"?"iPhone/iPad":"unknown")),te=String(i?.Manufacturer||(l.OS==="ios"?"Apple":"unknown"));let B="App",L="unknown",F="unknown",O="unknown";try{B=_e()||"App",L=ue()||"unknown";const s=me();F=s.version||"unknown",O=s.build||"unknown"}catch{}const ne=typeof b<"u"&&b.version?b.version:"unknown";return{pkg_name:z,pkg_version:R,lib_version:R,install_type:c?"local_dev":"bundled_production",app_name:B,bundle_id:L,app_version:F,app_build:O,react_version:ne,platform:l.OS,os_version:String(l.Version||"unknown"),rn_version:r,country_code:_,device_locale:f,time_zone:J,device_brand:X,device_model:ee,device_manufacturer:te,device_form_factor:M,screen_resolution:w,screen_density:k,screen_orientation:C,font_scale:I,appearance_mode:x,is_expo:Y,js_engine:h,hermes_version:g,is_hermes:a,is_fabric:e,is_bridgeless:d,has_native_module:N,has_mmkv:W,fab_mode:Q,default_landing_tab:q,captured_crashes_count:D,captured_apis_bracket:V,search_filter_used:U,is_metro_connected:A,is_dev:c,is_emulator:n,device_type:n?"emulator":"real_device",app_mode:c?"local_mode":"bundled_application",redux_attached:T,analytics_attached:E,environment:t||(c?"DEV":"PROD"),engagement_time_msec:1e3}}export async function trackActiveTelemetryHeartbeat(t=!0,o){if(t===!1){p=!1;return}p=!0;const i=K();if(i)try{const r=await y(),a=r.telemetryLastPing||0,e=Date.now(),d=!r.deviceRegistered;if(!d&&e-a<he)return;const c=await Z(),n=G(o,r),_={...n,device_id:c,is_new_device:d,device_first_seen:r.deviceFirstSeen||e},f=d?[{name:"active_device",params:_},{name:"first_device_install",params:_},{name:"inspector_active_heartbeat",params:_}]:[{name:"active_device",params:_},{name:"inspector_active_heartbeat",params:_}];await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({client_id:c,user_id:c,non_personalized_ads:!0,user_properties:{device_id:{value:c},pkg_name:{value:n.pkg_name},pkg_version:{value:n.pkg_version},install_type:{value:n.install_type},app_name:{value:n.app_name},bundle_id:{value:n.bundle_id},app_version:{value:n.app_version},react_version:{value:n.react_version},country:{value:n.country_code},country_code:{value:n.country_code},locale:{value:n.device_locale},time_zone:{value:n.time_zone},device_brand:{value:n.device_brand},device_model:{value:n.device_model},device_form_factor:{value:n.device_form_factor},screen_resolution:{value:n.screen_resolution},appearance_mode:{value:n.appearance_mode},is_expo:{value:String(n.is_expo)},js_engine:{value:n.js_engine},is_fabric:{value:String(n.is_fabric)},is_bridgeless:{value:String(n.is_bridgeless)},has_native_module:{value:String(n.has_native_module)},has_mmkv:{value:String(n.has_mmkv)},fab_mode:{value:n.fab_mode},default_landing_tab:{value:n.default_landing_tab},captured_crashes_count:{value:String(n.captured_crashes_count)},captured_apis_bracket:{value:n.captured_apis_bracket},search_filter_used:{value:String(n.search_filter_used)},is_metro_connected:{value:String(n.is_metro_connected)},redux_attached:{value:String(n.redux_attached)},analytics_attached:{value:String(n.analytics_attached)},platform:{value:n.platform},rn_version:{value:n.rn_version},lib_version:{value:n.lib_version}},events:f})}),await S({...r,telemetryClientId:c,telemetryDeviceId:c,deviceRegistered:!0,deviceFirstSeen:r.deviceFirstSeen||e,telemetryLastPing:e,telemetryLastActive:e})}catch{}}export async function trackTelemetryEvent(t,o){if(!p)return;const i=K();if(i)try{const r=await Z(),a=await y().catch(()=>({})),e=G(void 0,a),d={...e,device_id:r,...o,engagement_time_msec:100};await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({client_id:r,user_id:r,non_personalized_ads:!0,user_properties:{device_id:{value:r},pkg_name:{value:e.pkg_name},pkg_version:{value:e.pkg_version},install_type:{value:e.install_type},app_name:{value:e.app_name},bundle_id:{value:e.bundle_id},app_version:{value:e.app_version},react_version:{value:e.react_version},country:{value:e.country_code},country_code:{value:e.country_code},locale:{value:e.device_locale},time_zone:{value:e.time_zone},device_brand:{value:e.device_brand},device_model:{value:e.device_model},device_form_factor:{value:e.device_form_factor},screen_resolution:{value:e.screen_resolution},appearance_mode:{value:e.appearance_mode},is_expo:{value:String(e.is_expo)},js_engine:{value:e.js_engine},is_fabric:{value:String(e.is_fabric)},is_bridgeless:{value:String(e.is_bridgeless)},has_native_module:{value:String(e.has_native_module)},has_mmkv:{value:String(e.has_mmkv)},fab_mode:{value:e.fab_mode},default_landing_tab:{value:e.default_landing_tab},captured_crashes_count:{value:String(e.captured_crashes_count)},captured_apis_bracket:{value:e.captured_apis_bracket},search_filter_used:{value:String(e.search_filter_used)},is_metro_connected:{value:String(e.is_metro_connected)},redux_attached:{value:String(e.redux_attached)},analytics_attached:{value:String(e.analytics_attached)},platform:{value:e.platform},rn_version:{value:e.rn_version},lib_version:{value:e.lib_version}},events:[{name:t,params:d}]})})}catch{}}export function trackInspectorTabView(t){trackTelemetryEvent("inspector_tab_view",{tab_name:t,screen_name:`tab_${t}`,screen_class:"NetworkInspector"})}export function trackInspectorScreenView(t){trackTelemetryEvent("screen_view",{screen_name:t,screen_class:"NetworkInspector"})}export function trackInspectorScreenRecord(t,o="screen"){trackTelemetryEvent("inspector_screen_record",{action:t,recording_type:o})}
|
|
1
|
+
import b from"react";import{Appearance as ae,Dimensions as re,PixelRatio as P,Platform as l,NativeModules as oe}from"react-native";import{LIB_VERSION as R}from"../constants/version";import{loadSettings as y,saveSettings as S}from"./settingsStore";import{isReduxConnected as ie}from"../customHooks/reduxLogger";import{isFirebaseAnalyticsPatched as se}from"../customHooks/analyticsLogger";import{getCrashRecords as ce}from"../customHooks/crashHandler";import{getNetworkLogs as le}from"../customHooks/networkLogger";import{isNativeModuleAvailable as de}from"../native/NativeInspector";import{getAppName as _e,getBundleIdentifier as ue,getAppVersionAndBuild as pe,isLocalDebugEnvironment as ve}from"./index";import{ENC_MID as $,ENC_SEC as j,TELEMETRY_SALT as v}from"../constants/telemetryConfig";const z="react-native-inapp-inspector",me=`${z}::${v}`;function fe(t,o){const i=[];let r=1518500249;for(let a=0;a<o;a++){const e=t.charCodeAt(a%t.length);r=(r*31+e*17+a*13^r>>>7)&4294967295,i.push(r>>>a%24&255)}return i}function H(t){if(!t)return"";const o=[];for(let a=0;a<t.length;a+=2)o.push(parseInt(t.substring(a,a+2),16));const i=fe(me,o.length),r=[];for(let a=0;a<o.length;a++){const e=i[a],d=v.charCodeAt(a%v.length),c=(o[a]^e^d)&255;r.push(String.fromCharCode(c))}return r.join("")}let u=null,p=null;function ge(){if(u!==null&&p!==null)return{measurementId:u,apiSecret:p};if(!$||!j||!v)return u="",p="",{measurementId:"",apiSecret:""};try{u=H($),p=H(j)}catch{u="",p=""}return{measurementId:u,apiSecret:p}}function K(){const{measurementId:t,apiSecret:o}=ge();return!t||!o?"":`https://www.google-analytics.com/mp/collect?measurement_id=${t}&api_secret=${o}`}const he=1440*60*1e3;let m=!0,U=!1;export function setTelemetryEnabled(t){m=t}export function markSearchFilterUsed(){U=!0}async function Z(){try{const t=await y();if(t.telemetryClientId||t.telemetryDeviceId){const e=t.telemetryClientId||t.telemetryDeviceId||"";return t.telemetryDeviceId||await S({...t,telemetryDeviceId:e}),e}const o=Math.floor(1e8+Math.random()*9e8),i=Math.floor(1e9+Math.random()*9e9),r=`${o}.${i}`,a=Date.now();return await S({...t,telemetryClientId:r,telemetryDeviceId:r,deviceFirstSeen:t.deviceFirstSeen||a}),r}catch{return`${Math.floor(1e8+Math.random()*9e8)}.${Math.floor(1e9+Math.random()*9e9)}`}}function be(){try{if(l.OS==="android"){const t=l.constants||{},o=String(t.Model||"").toLowerCase(),i=String(t.Brand||"").toLowerCase(),r=String(t.Fingerprint||"").toLowerCase(),a=String(t.Hardware||"").toLowerCase(),e=String(t.Manufacturer||"").toLowerCase();return o.includes("emulator")||o.includes("sdk")||o.includes("google_sdk")||o.includes("vbox")||i.includes("generic")||r.startsWith("generic")||a.includes("goldfish")||a.includes("ranchu")||e.includes("genymotion")}if(l.OS==="ios"){const t=l.constants||{};return String(t.Model||"").toLowerCase().includes("simulator")||!!t.isSimulator}}catch{return!1}return!1}function ye(){try{const t=typeof Intl<"u"&&Intl.DateTimeFormat?Intl.DateTimeFormat().resolvedOptions():{},o=t.timeZone||"unknown",i=t.locale||"unknown";let r="unknown";if(i&&i!=="unknown"){const a=i.split(/[-_]/);a.length>1&&(r=a[a.length-1].toUpperCase())}return{countryCode:r,locale:i,timeZone:o}}catch{return{countryCode:"unknown",locale:"unknown",timeZone:"unknown"}}}function G(t,o){const i=l.constants,r=i?.reactNativeVersion?`${i.reactNativeVersion.major}.${i.reactNativeVersion.minor}.${i.reactNativeVersion.patch}`:"unknown",a=typeof global.HermesInternal=="object"&&global.HermesInternal!==null,e=global?.nativeFabricUIManager!==void 0,d=!!(global?._rn_bridgeless||global?.RN$Bridgeless),c=!!(typeof __DEV__<"u"&&__DEV__),n=be(),{countryCode:_,locale:f,timeZone:J}=ye();let w="unknown",k=1,I=1,M="phone",C="portrait";try{const s=re.get("window");w=`${Math.round(s.width)}x${Math.round(s.height)}`,k=P.get(),I=P.getFontScale(),C=s.width>s.height?"landscape":"portrait",M=l.OS==="ios"&&!!l.isPad||Math.min(s.width,s.height)>=600?"tablet":"phone"}catch{}let x="unknown";try{x=ae?.getColorScheme?.()||"unknown"}catch{}const Y=!!(globalThis?.expo||globalThis?.__expo||globalThis?.__turboModuleProxy?.name==="Expo"||l.constants?.ExpoVersion);let g="non_hermes",h="jsc";if(a){h="hermes";try{const s=global.HermesInternal?.getRuntimeProperties?.()||{};g=s["OSS Release Version"]||(s["Bytecode Version"]?`bc_v${s["Bytecode Version"]}`:"hermes")}catch{g="hermes"}}else globalThis?._v8&&(h="v8");let T=!1;try{T=ie()}catch{}let E=!1;try{E=se()}catch{}const N=de(),W=!!(oe?.RNMMKV||globalThis?.MMKV);let D=0;try{D=ce().length}catch{}let V="0";try{const s=le().length;V=s===0?"0":s<=10?"1-10":s<=50?"11-50":s<=100?"51-100":"100+"}catch{}let A=!1;try{A=ve()}catch{}const q=o?.defaultTab||"apis",Q=N&&o?.useNativeFab!==!1?"native_ui_thread":"js_floating_button",X=String(i?.Brand||(l.OS==="ios"?"Apple":"unknown")),ee=String(i?.Model||i?.systemName||(l.OS==="ios"?"iPhone/iPad":"unknown")),te=String(i?.Manufacturer||(l.OS==="ios"?"Apple":"unknown"));let B="App",L="unknown",O="unknown",F="unknown";try{B=_e()||"App",L=ue()||"unknown";const s=pe();O=s.version||"unknown",F=s.build||"unknown"}catch{}const ne=typeof b<"u"&&b.version?b.version:"unknown";return{pkg_name:z,pkg_version:R,lib_version:R,install_type:c?"local_dev":"bundled_production",app_name:B,bundle_id:L,app_version:O,app_build:F,react_version:ne,platform:l.OS,os_version:String(l.Version||"unknown"),rn_version:r,country_code:_,device_locale:f,time_zone:J,device_brand:X,device_model:ee,device_manufacturer:te,device_form_factor:M,screen_resolution:w,screen_density:k,screen_orientation:C,font_scale:I,appearance_mode:x,is_expo:Y,js_engine:h,hermes_version:g,is_hermes:a,is_fabric:e,is_bridgeless:d,has_native_module:N,has_mmkv:W,fab_mode:Q,default_landing_tab:q,captured_crashes_count:D,captured_apis_bracket:V,search_filter_used:U,is_metro_connected:A,is_dev:c,is_emulator:n,device_type:n?"emulator":"real_device",app_mode:c?"local_mode":"bundled_application",redux_attached:T,analytics_attached:E,environment:t||(c?"DEV":"PROD"),engagement_time_msec:1e3}}export async function trackActiveTelemetryHeartbeat(t=!0,o){if(t===!1){m=!1;return}if(m=!0,process.env.NODE_ENV==="test"||typeof globalThis.jest<"u")return;const i=K();if(i)try{const r=await y(),a=r.telemetryLastPing||0,e=Date.now(),d=!r.deviceRegistered;if(!d&&e-a<he)return;const c=await Z(),n=G(o,r),_={...n,device_id:c,is_new_device:d,device_first_seen:r.deviceFirstSeen||e},f=d?[{name:"active_device",params:_},{name:"first_device_install",params:_},{name:"inspector_active_heartbeat",params:_}]:[{name:"active_device",params:_},{name:"inspector_active_heartbeat",params:_}];await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({client_id:c,user_id:c,non_personalized_ads:!0,user_properties:{device_id:{value:c},pkg_name:{value:n.pkg_name},pkg_version:{value:n.pkg_version},install_type:{value:n.install_type},app_name:{value:n.app_name},bundle_id:{value:n.bundle_id},app_version:{value:n.app_version},react_version:{value:n.react_version},country:{value:n.country_code},country_code:{value:n.country_code},locale:{value:n.device_locale},time_zone:{value:n.time_zone},device_brand:{value:n.device_brand},device_model:{value:n.device_model},device_form_factor:{value:n.device_form_factor},screen_resolution:{value:n.screen_resolution},appearance_mode:{value:n.appearance_mode},is_expo:{value:String(n.is_expo)},js_engine:{value:n.js_engine},is_fabric:{value:String(n.is_fabric)},is_bridgeless:{value:String(n.is_bridgeless)},has_native_module:{value:String(n.has_native_module)},has_mmkv:{value:String(n.has_mmkv)},fab_mode:{value:n.fab_mode},default_landing_tab:{value:n.default_landing_tab},captured_crashes_count:{value:String(n.captured_crashes_count)},captured_apis_bracket:{value:n.captured_apis_bracket},search_filter_used:{value:String(n.search_filter_used)},is_metro_connected:{value:String(n.is_metro_connected)},redux_attached:{value:String(n.redux_attached)},analytics_attached:{value:String(n.analytics_attached)},platform:{value:n.platform},rn_version:{value:n.rn_version},lib_version:{value:n.lib_version}},events:f})}),await S({...r,telemetryClientId:c,telemetryDeviceId:c,deviceRegistered:!0,deviceFirstSeen:r.deviceFirstSeen||e,telemetryLastPing:e,telemetryLastActive:e})}catch{}}export async function trackTelemetryEvent(t,o){if(!m)return;const i=K();if(i)try{const r=await Z(),a=await y().catch(()=>({})),e=G(void 0,a),d={...e,device_id:r,...o,engagement_time_msec:100};await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({client_id:r,user_id:r,non_personalized_ads:!0,user_properties:{device_id:{value:r},pkg_name:{value:e.pkg_name},pkg_version:{value:e.pkg_version},install_type:{value:e.install_type},app_name:{value:e.app_name},bundle_id:{value:e.bundle_id},app_version:{value:e.app_version},react_version:{value:e.react_version},country:{value:e.country_code},country_code:{value:e.country_code},locale:{value:e.device_locale},time_zone:{value:e.time_zone},device_brand:{value:e.device_brand},device_model:{value:e.device_model},device_form_factor:{value:e.device_form_factor},screen_resolution:{value:e.screen_resolution},appearance_mode:{value:e.appearance_mode},is_expo:{value:String(e.is_expo)},js_engine:{value:e.js_engine},is_fabric:{value:String(e.is_fabric)},is_bridgeless:{value:String(e.is_bridgeless)},has_native_module:{value:String(e.has_native_module)},has_mmkv:{value:String(e.has_mmkv)},fab_mode:{value:e.fab_mode},default_landing_tab:{value:e.default_landing_tab},captured_crashes_count:{value:String(e.captured_crashes_count)},captured_apis_bracket:{value:e.captured_apis_bracket},search_filter_used:{value:String(e.search_filter_used)},is_metro_connected:{value:String(e.is_metro_connected)},redux_attached:{value:String(e.redux_attached)},analytics_attached:{value:String(e.analytics_attached)},platform:{value:e.platform},rn_version:{value:e.rn_version},lib_version:{value:e.lib_version}},events:[{name:t,params:d}]})})}catch{}}export function trackInspectorTabView(t){trackTelemetryEvent("inspector_tab_view",{tab_name:t,screen_name:`tab_${t}`,screen_class:"NetworkInspector"})}export function trackInspectorScreenView(t){trackTelemetryEvent("screen_view",{screen_name:t,screen_class:"NetworkInspector"})}export function trackInspectorScreenRecord(t,o="screen"){trackTelemetryEvent("inspector_screen_record",{action:t,recording_type:o})}
|
package/dist/esm/i18n/index.d.ts
CHANGED
|
@@ -2,40 +2,133 @@ import React from 'react';
|
|
|
2
2
|
export declare const SUPPORTED_LANGUAGES: readonly [{
|
|
3
3
|
readonly code: "en";
|
|
4
4
|
readonly name: "English";
|
|
5
|
+
readonly nativeName: "English";
|
|
6
|
+
readonly flag: "🇺🇸";
|
|
5
7
|
}, {
|
|
6
8
|
readonly code: "es";
|
|
7
9
|
readonly name: "Español";
|
|
10
|
+
readonly nativeName: "Español";
|
|
11
|
+
readonly flag: "🇪🇸";
|
|
8
12
|
}, {
|
|
9
13
|
readonly code: "fr";
|
|
10
14
|
readonly name: "Français";
|
|
15
|
+
readonly nativeName: "Français";
|
|
16
|
+
readonly flag: "🇫🇷";
|
|
11
17
|
}, {
|
|
12
18
|
readonly code: "de";
|
|
13
19
|
readonly name: "Deutsch";
|
|
20
|
+
readonly nativeName: "Deutsch";
|
|
21
|
+
readonly flag: "🇩🇪";
|
|
14
22
|
}, {
|
|
15
23
|
readonly code: "zh";
|
|
16
24
|
readonly name: "中文";
|
|
25
|
+
readonly nativeName: "简体中文";
|
|
26
|
+
readonly flag: "🇨🇳";
|
|
17
27
|
}, {
|
|
18
28
|
readonly code: "ja";
|
|
19
29
|
readonly name: "日本語";
|
|
30
|
+
readonly nativeName: "日本語";
|
|
31
|
+
readonly flag: "🇯🇵";
|
|
20
32
|
}, {
|
|
21
33
|
readonly code: "ko";
|
|
22
34
|
readonly name: "한국어";
|
|
35
|
+
readonly nativeName: "한국어";
|
|
36
|
+
readonly flag: "🇰🇷";
|
|
23
37
|
}, {
|
|
24
38
|
readonly code: "pt";
|
|
25
39
|
readonly name: "Português";
|
|
40
|
+
readonly nativeName: "Português";
|
|
41
|
+
readonly flag: "🇧🇷";
|
|
26
42
|
}, {
|
|
27
43
|
readonly code: "ru";
|
|
28
44
|
readonly name: "Русский";
|
|
45
|
+
readonly nativeName: "Русский";
|
|
46
|
+
readonly flag: "🇷🇺";
|
|
29
47
|
}, {
|
|
30
48
|
readonly code: "hi";
|
|
31
49
|
readonly name: "हिन्दी";
|
|
50
|
+
readonly nativeName: "हिन्दी";
|
|
51
|
+
readonly flag: "🇮🇳";
|
|
52
|
+
}, {
|
|
53
|
+
readonly code: "ta";
|
|
54
|
+
readonly name: "Tamil";
|
|
55
|
+
readonly nativeName: "தமிழ்";
|
|
56
|
+
readonly flag: "🇮🇳";
|
|
57
|
+
}, {
|
|
58
|
+
readonly code: "te";
|
|
59
|
+
readonly name: "Telugu";
|
|
60
|
+
readonly nativeName: "తెలుగు";
|
|
61
|
+
readonly flag: "🇮🇳";
|
|
62
|
+
}, {
|
|
63
|
+
readonly code: "kn";
|
|
64
|
+
readonly name: "Kannada";
|
|
65
|
+
readonly nativeName: "ಕನ್ನಡ";
|
|
66
|
+
readonly flag: "🇮🇳";
|
|
67
|
+
}, {
|
|
68
|
+
readonly code: "ml";
|
|
69
|
+
readonly name: "Malayalam";
|
|
70
|
+
readonly nativeName: "മലയാളം";
|
|
71
|
+
readonly flag: "🇮🇳";
|
|
72
|
+
}, {
|
|
73
|
+
readonly code: "bn";
|
|
74
|
+
readonly name: "Bengali";
|
|
75
|
+
readonly nativeName: "বাংলা";
|
|
76
|
+
readonly flag: "🇮🇳";
|
|
77
|
+
}, {
|
|
78
|
+
readonly code: "mr";
|
|
79
|
+
readonly name: "Marathi";
|
|
80
|
+
readonly nativeName: "मराठी";
|
|
81
|
+
readonly flag: "🇮🇳";
|
|
82
|
+
}, {
|
|
83
|
+
readonly code: "gu";
|
|
84
|
+
readonly name: "Gujarati";
|
|
85
|
+
readonly nativeName: "ગુજરાતી";
|
|
86
|
+
readonly flag: "🇮🇳";
|
|
87
|
+
}, {
|
|
88
|
+
readonly code: "pa";
|
|
89
|
+
readonly name: "Punjabi";
|
|
90
|
+
readonly nativeName: "ਪੰਜਾਬੀ";
|
|
91
|
+
readonly flag: "🇮🇳";
|
|
32
92
|
}, {
|
|
33
93
|
readonly code: "ar";
|
|
34
94
|
readonly name: "العربية";
|
|
95
|
+
readonly nativeName: "العربية";
|
|
96
|
+
readonly flag: "🇸🇦";
|
|
97
|
+
}, {
|
|
98
|
+
readonly code: "it";
|
|
99
|
+
readonly name: "Italiano";
|
|
100
|
+
readonly nativeName: "Italiano";
|
|
101
|
+
readonly flag: "🇮🇹";
|
|
102
|
+
}, {
|
|
103
|
+
readonly code: "id";
|
|
104
|
+
readonly name: "Bahasa Indonesia";
|
|
105
|
+
readonly nativeName: "Bahasa Indonesia";
|
|
106
|
+
readonly flag: "🇮🇩";
|
|
107
|
+
}, {
|
|
108
|
+
readonly code: "tr";
|
|
109
|
+
readonly name: "Türkçe";
|
|
110
|
+
readonly nativeName: "Türkçe";
|
|
111
|
+
readonly flag: "🇹🇷";
|
|
112
|
+
}, {
|
|
113
|
+
readonly code: "vi";
|
|
114
|
+
readonly name: "Tiếng Việt";
|
|
115
|
+
readonly nativeName: "Tiếng Việt";
|
|
116
|
+
readonly flag: "🇻🇳";
|
|
117
|
+
}, {
|
|
118
|
+
readonly code: "nl";
|
|
119
|
+
readonly name: "Nederlands";
|
|
120
|
+
readonly nativeName: "Nederlands";
|
|
121
|
+
readonly flag: "🇳🇱";
|
|
122
|
+
}, {
|
|
123
|
+
readonly code: "pl";
|
|
124
|
+
readonly name: "Polski";
|
|
125
|
+
readonly nativeName: "Polski";
|
|
126
|
+
readonly flag: "🇵🇱";
|
|
35
127
|
}];
|
|
36
128
|
export type SupportedLanguageCode = (typeof SUPPORTED_LANGUAGES)[number]['code'];
|
|
37
129
|
type TranslationParams = Record<string, any>;
|
|
38
|
-
export declare function t(key: string, optionsOrFallback?: TranslationParams | string): string;
|
|
130
|
+
export declare function t(key: string, optionsOrFallback?: TranslationParams | string, fallbackStr?: string): string;
|
|
131
|
+
export declare function getLanguage(): string;
|
|
39
132
|
export declare function setLanguage(lang: string): void;
|
|
40
133
|
export declare function addTranslations(lang: string, translations: Record<string, any>): void;
|
|
41
134
|
export declare function setTranslations(translations: Record<string, any>, lang?: string): void;
|
|
@@ -44,6 +137,7 @@ export declare const i18n: {
|
|
|
44
137
|
language: string;
|
|
45
138
|
changeLanguage: typeof setLanguage;
|
|
46
139
|
addResourceBundle: (lng: string, _ns: string, resources: any) => void;
|
|
140
|
+
getLanguage: typeof getLanguage;
|
|
47
141
|
setLanguage: typeof setLanguage;
|
|
48
142
|
addTranslations: typeof addTranslations;
|
|
49
143
|
setTranslations: typeof setTranslations;
|
|
@@ -55,10 +149,14 @@ export declare function useTranslation(): {
|
|
|
55
149
|
language: string;
|
|
56
150
|
changeLanguage: typeof setLanguage;
|
|
57
151
|
addResourceBundle: (lng: string, _ns: string, resources: any) => void;
|
|
152
|
+
getLanguage: typeof getLanguage;
|
|
58
153
|
setLanguage: typeof setLanguage;
|
|
59
154
|
addTranslations: typeof addTranslations;
|
|
60
155
|
setTranslations: typeof setTranslations;
|
|
61
156
|
};
|
|
157
|
+
language: string;
|
|
158
|
+
currentLanguage: string;
|
|
159
|
+
setLanguage: typeof setLanguage;
|
|
62
160
|
};
|
|
63
161
|
export declare const I18nextProvider: ({ children }: {
|
|
64
162
|
children?: React.ReactNode;
|
package/dist/esm/i18n/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import f from"react";import
|
|
1
|
+
import f from"react";import d from"./locales/en.json";import g from"./locales/es.json";import p from"./locales/fr.json";import s from"./locales/de.json";import v from"./locales/zh.json";import L from"./locales/ja.json";import N from"./locales/ko.json";import h from"./locales/pt.json";import x from"./locales/ru.json";import y from"./locales/hi.json";import T from"./locales/ar.json";import E from"./locales/it.json";import j from"./locales/id.json";import P from"./locales/tr.json";import _ from"./locales/vi.json";import B from"./locales/nl.json";import I from"./locales/pl.json";import z from"./locales/ta.json";import R from"./locales/te.json";import V from"./locales/kn.json";import A from"./locales/ml.json";import D from"./locales/bn.json";import G from"./locales/mr.json";import S from"./locales/gu.json";import U from"./locales/pa.json";export const SUPPORTED_LANGUAGES=[{code:"en",name:"English",nativeName:"English",flag:"\u{1F1FA}\u{1F1F8}"},{code:"es",name:"Espa\xF1ol",nativeName:"Espa\xF1ol",flag:"\u{1F1EA}\u{1F1F8}"},{code:"fr",name:"Fran\xE7ais",nativeName:"Fran\xE7ais",flag:"\u{1F1EB}\u{1F1F7}"},{code:"de",name:"Deutsch",nativeName:"Deutsch",flag:"\u{1F1E9}\u{1F1EA}"},{code:"zh",name:"\u4E2D\u6587",nativeName:"\u7B80\u4F53\u4E2D\u6587",flag:"\u{1F1E8}\u{1F1F3}"},{code:"ja",name:"\u65E5\u672C\u8A9E",nativeName:"\u65E5\u672C\u8A9E",flag:"\u{1F1EF}\u{1F1F5}"},{code:"ko",name:"\uD55C\uAD6D\uC5B4",nativeName:"\uD55C\uAD6D\uC5B4",flag:"\u{1F1F0}\u{1F1F7}"},{code:"pt",name:"Portugu\xEAs",nativeName:"Portugu\xEAs",flag:"\u{1F1E7}\u{1F1F7}"},{code:"ru",name:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439",nativeName:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439",flag:"\u{1F1F7}\u{1F1FA}"},{code:"hi",name:"\u0939\u093F\u0928\u094D\u0926\u0940",nativeName:"\u0939\u093F\u0928\u094D\u0926\u0940",flag:"\u{1F1EE}\u{1F1F3}"},{code:"ta",name:"Tamil",nativeName:"\u0BA4\u0BAE\u0BBF\u0BB4\u0BCD",flag:"\u{1F1EE}\u{1F1F3}"},{code:"te",name:"Telugu",nativeName:"\u0C24\u0C46\u0C32\u0C41\u0C17\u0C41",flag:"\u{1F1EE}\u{1F1F3}"},{code:"kn",name:"Kannada",nativeName:"\u0C95\u0CA8\u0CCD\u0CA8\u0CA1",flag:"\u{1F1EE}\u{1F1F3}"},{code:"ml",name:"Malayalam",nativeName:"\u0D2E\u0D32\u0D2F\u0D3E\u0D33\u0D02",flag:"\u{1F1EE}\u{1F1F3}"},{code:"bn",name:"Bengali",nativeName:"\u09AC\u09BE\u0982\u09B2\u09BE",flag:"\u{1F1EE}\u{1F1F3}"},{code:"mr",name:"Marathi",nativeName:"\u092E\u0930\u093E\u0920\u0940",flag:"\u{1F1EE}\u{1F1F3}"},{code:"gu",name:"Gujarati",nativeName:"\u0A97\u0AC1\u0A9C\u0AB0\u0ABE\u0AA4\u0AC0",flag:"\u{1F1EE}\u{1F1F3}"},{code:"pa",name:"Punjabi",nativeName:"\u0A2A\u0A70\u0A1C\u0A3E\u0A2C\u0A40",flag:"\u{1F1EE}\u{1F1F3}"},{code:"ar",name:"\u0627\u0644\u0639\u0631\u0628\u064A\u0629",nativeName:"\u0627\u0644\u0639\u0631\u0628\u064A\u0629",flag:"\u{1F1F8}\u{1F1E6}"},{code:"it",name:"Italiano",nativeName:"Italiano",flag:"\u{1F1EE}\u{1F1F9}"},{code:"id",name:"Bahasa Indonesia",nativeName:"Bahasa Indonesia",flag:"\u{1F1EE}\u{1F1E9}"},{code:"tr",name:"T\xFCrk\xE7e",nativeName:"T\xFCrk\xE7e",flag:"\u{1F1F9}\u{1F1F7}"},{code:"vi",name:"Ti\u1EBFng Vi\u1EC7t",nativeName:"Ti\u1EBFng Vi\u1EC7t",flag:"\u{1F1FB}\u{1F1F3}"},{code:"nl",name:"Nederlands",nativeName:"Nederlands",flag:"\u{1F1F3}\u{1F1F1}"},{code:"pl",name:"Polski",nativeName:"Polski",flag:"\u{1F1F5}\u{1F1F1}"}];const m={en:d,es:g,fr:p,de:s,zh:v,ja:L,ko:N,pt:h,ru:x,hi:y,ta:z,te:R,kn:V,ml:A,bn:D,mr:G,gu:S,pa:U,ar:T,it:E,id:j,tr:P,vi:_,nl:B,pl:I};let i="en";const c=new Set;function u(a,e){if(!a||!e)return;const n=e.split(".");let o=a;for(let r=0;r<n.length;r++){if(o==null)return;o=o[n[r]]}return o}function l(a,e){return!e||typeof a!="string"?a:a.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*\}\}/g,(n,o)=>e[o]!==void 0?String(e[o]):`{{${o}}}`)}export function t(a,e,n){const o=m[i]||m.en;let r=u(o,a);return r===void 0&&i!=="en"&&(r=u(m.en,a)),typeof r=="string"?typeof e=="object"&&e!==null?l(r,e):r:typeof e=="string"?e:typeof n=="string"?typeof e=="object"&&e!==null?l(n,e):n:typeof e=="object"&&e!==null&&typeof e.defaultValue=="string"?l(e.defaultValue,e):a}export function getLanguage(){return i}export function setLanguage(a){typeof a=="string"&&a.trim()&&(i=a.trim(),i18n.language=i,c.forEach(e=>{try{e()}catch{}}))}export function addTranslations(a,e){!a||!e||typeof e!="object"||(m[a]={...m[a]||{},...e},c.forEach(n=>{try{n()}catch{}}))}export function setTranslations(a,e="en"){addTranslations(e,a)}export const i18n={t,language:i,changeLanguage:setLanguage,addResourceBundle:(a,e,n)=>addTranslations(a,n),getLanguage,setLanguage,addTranslations,setTranslations};export function useTranslation(){const[,a]=f.useState(0);return f.useEffect(()=>{const e=()=>a(n=>n+1);return c.add(e),()=>{c.delete(e)}},[]),{t,i18n,language:i,currentLanguage:i,setLanguage}}export const I18nextProvider=({children:a})=>f.createElement(f.Fragment,null,a);export default i18n;
|