react-native-inapp-inspector 2.4.2 → 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/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +523 -2
- 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.js +32 -32
- package/dist/commonjs/components/AppHeaderLogo.js +6 -6
- package/dist/commonjs/components/BrandCircleIcon.js +28 -28
- package/dist/commonjs/components/BrandSquareIcon.js +33 -33
- package/dist/commonjs/components/ConsoleLogCard.js +1 -1
- package/dist/commonjs/components/Inspector/AnalyticsTab.js +2 -2
- package/dist/commonjs/components/Inspector/ConfirmationModal.js +23 -25
- package/dist/commonjs/components/Inspector/ConsoleTab.js +5 -5
- package/dist/commonjs/components/Inspector/CrashTab.js +44 -11
- package/dist/commonjs/components/Inspector/DeviceInfoTab.js +1 -1
- package/dist/commonjs/components/Inspector/FabLauncher.js +30 -25
- 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 +1 -1
- package/dist/commonjs/components/Inspector/LanguageSelectorModal.js +114 -32
- package/dist/commonjs/components/Inspector/MainScreen.js +26 -19
- package/dist/commonjs/components/Inspector/MediaGalleryTab.js +38 -35
- package/dist/commonjs/components/Inspector/MediaPreviewModal.d.ts +36 -0
- package/dist/commonjs/components/Inspector/MediaPreviewModal.js +345 -123
- package/dist/commonjs/components/Inspector/NetworkTab.js +14 -14
- package/dist/commonjs/components/Inspector/PushCard.js +1 -1
- package/dist/commonjs/components/Inspector/PushDetail.js +9 -9
- package/dist/commonjs/components/Inspector/PushTab.js +3 -3
- package/dist/commonjs/components/Inspector/ReduxTab.js +9 -7
- 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 +102 -73
- package/dist/commonjs/components/Inspector/SocketCard.js +1 -1
- package/dist/commonjs/components/Inspector/SocketDetail.js +73 -63
- package/dist/commonjs/components/Inspector/SocketTab.js +4 -4
- package/dist/commonjs/components/Inspector/StorageTab.js +10 -10
- package/dist/commonjs/components/Inspector/SupportModal.js +2 -2
- package/dist/commonjs/components/Inspector/SupportPage.js +1 -1
- package/dist/commonjs/components/JsonViewer.js +47 -45
- package/dist/commonjs/components/LogCard.js +22 -20
- package/dist/commonjs/components/ModuleErrorBoundary.js +5 -5
- package/dist/commonjs/components/NetworkIcons.d.ts +27 -0
- package/dist/commonjs/components/NetworkIcons.js +103 -5
- 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/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 +1 -1
- package/dist/commonjs/helpers/settingsStore.js +1 -1
- package/dist/commonjs/helpers/telemetry.js +1 -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 -1
- 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 -1
- package/dist/commonjs/i18n/locales/hi.json +1 -1
- package/dist/commonjs/i18n/locales/id.json +1 -1
- package/dist/commonjs/i18n/locales/it.json +1 -1
- package/dist/commonjs/i18n/locales/ja.json +1 -1
- package/dist/commonjs/i18n/locales/kn.json +1 -1
- package/dist/commonjs/i18n/locales/ko.json +1 -1
- package/dist/commonjs/i18n/locales/ml.json +1 -1
- package/dist/commonjs/i18n/locales/mr.json +1 -1
- package/dist/commonjs/i18n/locales/nl.json +1 -1
- package/dist/commonjs/i18n/locales/pa.json +1 -1
- package/dist/commonjs/i18n/locales/pl.json +1 -1
- 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 -1
- package/dist/commonjs/i18n/locales/te.json +1 -1
- package/dist/commonjs/i18n/locales/tr.json +1 -1
- package/dist/commonjs/i18n/locales/vi.json +1 -1
- package/dist/commonjs/i18n/locales/zh.json +1 -1
- package/dist/commonjs/index.d.ts +4 -1
- package/dist/commonjs/index.js +3 -3
- package/dist/commonjs/native/NativeInspector.d.ts +3 -0
- package/dist/commonjs/native/NativeInspector.js +1 -1
- package/dist/commonjs/native/NativeNetworkInspector.d.ts +4 -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 +7 -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/interfaces.d.ts +21 -0
- 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.js +114 -114
- package/dist/esm/components/AppHeaderLogo.js +7 -7
- package/dist/esm/components/BrandCircleIcon.js +70 -70
- package/dist/esm/components/BrandSquareIcon.js +61 -61
- package/dist/esm/components/ConsoleLogCard.js +1 -1
- package/dist/esm/components/Inspector/AnalyticsTab.js +14 -14
- package/dist/esm/components/Inspector/ConfirmationModal.js +23 -25
- package/dist/esm/components/Inspector/ConsoleTab.js +17 -17
- package/dist/esm/components/Inspector/CrashTab.js +202 -169
- package/dist/esm/components/Inspector/DeviceInfoTab.js +75 -75
- package/dist/esm/components/Inspector/FabLauncher.js +56 -51
- 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 +1 -1
- package/dist/esm/components/Inspector/LanguageSelectorModal.js +140 -58
- package/dist/esm/components/Inspector/MainScreen.js +61 -54
- package/dist/esm/components/Inspector/MediaGalleryTab.js +55 -52
- package/dist/esm/components/Inspector/MediaPreviewModal.d.ts +36 -0
- package/dist/esm/components/Inspector/MediaPreviewModal.js +345 -123
- package/dist/esm/components/Inspector/NetworkTab.js +74 -74
- package/dist/esm/components/Inspector/PushCard.js +1 -1
- package/dist/esm/components/Inspector/PushDetail.js +18 -18
- package/dist/esm/components/Inspector/PushTab.js +1 -1
- package/dist/esm/components/Inspector/ReduxTab.js +18 -16
- 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 +224 -195
- package/dist/esm/components/Inspector/SocketCard.js +8 -8
- package/dist/esm/components/Inspector/SocketDetail.js +106 -96
- package/dist/esm/components/Inspector/SocketTab.js +18 -18
- package/dist/esm/components/Inspector/StorageTab.js +47 -47
- package/dist/esm/components/Inspector/SupportModal.js +64 -64
- package/dist/esm/components/Inspector/SupportPage.js +5 -5
- package/dist/esm/components/JsonViewer.js +51 -49
- package/dist/esm/components/LogCard.js +41 -39
- package/dist/esm/components/ModuleErrorBoundary.js +10 -10
- package/dist/esm/components/NetworkIcons.d.ts +27 -0
- package/dist/esm/components/NetworkIcons.js +101 -3
- 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/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/settingsStore.js +1 -1
- package/dist/esm/helpers/telemetry.js +1 -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 -1
- 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 -1
- package/dist/esm/i18n/locales/hi.json +1 -1
- package/dist/esm/i18n/locales/id.json +1 -1
- package/dist/esm/i18n/locales/it.json +1 -1
- package/dist/esm/i18n/locales/ja.json +1 -1
- package/dist/esm/i18n/locales/kn.json +1 -1
- package/dist/esm/i18n/locales/ko.json +1 -1
- package/dist/esm/i18n/locales/ml.json +1 -1
- package/dist/esm/i18n/locales/mr.json +1 -1
- package/dist/esm/i18n/locales/nl.json +1 -1
- package/dist/esm/i18n/locales/pa.json +1 -1
- package/dist/esm/i18n/locales/pl.json +1 -1
- 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 -1
- package/dist/esm/i18n/locales/te.json +1 -1
- package/dist/esm/i18n/locales/tr.json +1 -1
- package/dist/esm/i18n/locales/vi.json +1 -1
- package/dist/esm/i18n/locales/zh.json +1 -1
- package/dist/esm/index.d.ts +4 -1
- package/dist/esm/index.js +5 -5
- package/dist/esm/native/NativeInspector.d.ts +3 -0
- package/dist/esm/native/NativeInspector.js +1 -1
- package/dist/esm/native/NativeNetworkInspector.d.ts +4 -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 +7 -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/interfaces.d.ts +21 -0
- package/editor.d.ts +1 -0
- package/editor.js +1 -0
- package/ios/NetworkInspectorModule.mm +429 -0
- package/package.json +10 -1
- package/react-native-inapp-inspector.podspec +1 -1
- package/src/native/NativeInspector.ts +57 -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 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
|
|
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 A=n.indexOf("@"),
|
|
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{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 +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.js
CHANGED
|
@@ -1 +1 @@
|
|
|
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
|
|
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;
|