react-native-inapp-inspector 2.3.24 → 2.3.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/dist/commonjs/components/AnalyticsDetail.js +8 -8
  2. package/dist/commonjs/components/AnalyticsEventCard.js +11 -8
  3. package/dist/commonjs/components/AppHeaderLogo.js +1 -1
  4. package/dist/commonjs/components/BrandSquareIcon.js +12 -12
  5. package/dist/commonjs/components/ConsoleLogCard.d.ts +1 -0
  6. package/dist/commonjs/components/ConsoleLogCard.js +92 -80
  7. package/dist/commonjs/components/EndOfListFooter.d.ts +5 -1
  8. package/dist/commonjs/components/EndOfListFooter.js +27 -5
  9. package/dist/commonjs/components/Inspector/AnalyticsTab.js +30 -298
  10. package/dist/commonjs/components/Inspector/ConsoleTab.js +38 -93
  11. package/dist/commonjs/components/Inspector/CrashDetail.js +12 -12
  12. package/dist/commonjs/components/Inspector/CrashTab.js +43 -33
  13. package/dist/commonjs/components/Inspector/DebuggingTab.js +9 -9
  14. package/dist/commonjs/components/Inspector/DeviceInfoTab.js +54 -52
  15. package/dist/commonjs/components/Inspector/InspectorHeader.js +1 -1
  16. package/dist/commonjs/components/Inspector/MainScreen.js +23 -25
  17. package/dist/commonjs/components/Inspector/MediaGalleryTab.js +1 -1
  18. package/dist/commonjs/components/Inspector/MediaPreviewModal.js +3 -3
  19. package/dist/commonjs/components/Inspector/NetworkTab.js +31 -31
  20. package/dist/commonjs/components/Inspector/NpmStarPrompt.js +3 -3
  21. package/dist/commonjs/components/Inspector/NpmUpdateToast.js +21 -22
  22. package/dist/commonjs/components/Inspector/ReduxTab.js +110 -97
  23. package/dist/commonjs/components/Inspector/SettingsPanel.js +48 -100
  24. package/dist/commonjs/components/Inspector/StorageTab.js +56 -52
  25. package/dist/commonjs/components/Inspector/TabBar.js +29 -26
  26. package/dist/commonjs/components/JsonViewer.js +169 -164
  27. package/dist/commonjs/components/LogCard.js +34 -38
  28. package/dist/commonjs/components/LogSyntaxHighlighter.js +3 -3
  29. package/dist/commonjs/components/SegmentedTabs.d.ts +4 -1
  30. package/dist/commonjs/components/SegmentedTabs.js +8 -8
  31. package/dist/commonjs/constants/index.js +1 -1
  32. package/dist/commonjs/constants/version.d.ts +1 -1
  33. package/dist/commonjs/constants/version.js +1 -1
  34. package/dist/commonjs/customHooks/networkLogger.js +1 -2
  35. package/dist/commonjs/helpers/index.d.ts +6 -0
  36. package/dist/commonjs/helpers/index.js +4 -4
  37. package/dist/commonjs/helpers/memoryManager.d.ts +0 -1
  38. package/dist/commonjs/helpers/memoryManager.js +1 -1
  39. package/dist/commonjs/helpers/remoteConfig.js +1 -1
  40. package/dist/commonjs/helpers/settingsStore.js +1 -1
  41. package/dist/commonjs/i18n/index.d.ts +35 -0
  42. package/dist/commonjs/i18n/index.js +1 -1
  43. package/dist/commonjs/i18n/locales/ar.json +1 -0
  44. package/dist/commonjs/i18n/locales/de.json +1 -0
  45. package/dist/commonjs/i18n/locales/en.json +1 -1
  46. package/dist/commonjs/i18n/locales/es.json +1 -0
  47. package/dist/commonjs/i18n/locales/fr.json +1 -0
  48. package/dist/commonjs/i18n/locales/hi.json +1 -0
  49. package/dist/commonjs/i18n/locales/ja.json +1 -0
  50. package/dist/commonjs/i18n/locales/ko.json +1 -0
  51. package/dist/commonjs/i18n/locales/pt.json +1 -0
  52. package/dist/commonjs/i18n/locales/ru.json +1 -0
  53. package/dist/commonjs/i18n/locales/zh.json +1 -0
  54. package/dist/commonjs/index.d.ts +2 -4
  55. package/dist/commonjs/index.js +2 -2
  56. package/dist/commonjs/styles/AppColors.d.ts +40 -0
  57. package/dist/commonjs/styles/AppColors.js +1 -1
  58. package/dist/commonjs/styles/index.js +1 -1
  59. package/dist/commonjs/types/enums.d.ts +0 -20
  60. package/dist/commonjs/types/enums.js +1 -1
  61. package/dist/esm/components/AnalyticsDetail.js +75 -75
  62. package/dist/esm/components/AnalyticsEventCard.js +20 -17
  63. package/dist/esm/components/AppHeaderLogo.js +5 -5
  64. package/dist/esm/components/BrandSquareIcon.js +39 -39
  65. package/dist/esm/components/ConsoleLogCard.d.ts +1 -0
  66. package/dist/esm/components/ConsoleLogCard.js +98 -86
  67. package/dist/esm/components/EndOfListFooter.d.ts +5 -1
  68. package/dist/esm/components/EndOfListFooter.js +36 -14
  69. package/dist/esm/components/Inspector/AnalyticsTab.js +47 -315
  70. package/dist/esm/components/Inspector/ConsoleTab.js +61 -116
  71. package/dist/esm/components/Inspector/CrashDetail.js +49 -49
  72. package/dist/esm/components/Inspector/CrashTab.js +75 -65
  73. package/dist/esm/components/Inspector/DebuggingTab.js +31 -31
  74. package/dist/esm/components/Inspector/DeviceInfoTab.js +146 -144
  75. package/dist/esm/components/Inspector/InspectorHeader.js +5 -5
  76. package/dist/esm/components/Inspector/MainScreen.js +51 -53
  77. package/dist/esm/components/Inspector/MediaGalleryTab.js +1 -1
  78. package/dist/esm/components/Inspector/MediaPreviewModal.js +31 -31
  79. package/dist/esm/components/Inspector/NetworkTab.js +63 -63
  80. package/dist/esm/components/Inspector/NpmStarPrompt.js +42 -42
  81. package/dist/esm/components/Inspector/NpmUpdateToast.js +45 -46
  82. package/dist/esm/components/Inspector/ReduxTab.js +163 -150
  83. package/dist/esm/components/Inspector/SettingsPanel.js +136 -188
  84. package/dist/esm/components/Inspector/StorageTab.js +88 -84
  85. package/dist/esm/components/Inspector/TabBar.js +37 -34
  86. package/dist/esm/components/JsonViewer.js +173 -168
  87. package/dist/esm/components/LogCard.js +38 -42
  88. package/dist/esm/components/LogSyntaxHighlighter.js +1 -1
  89. package/dist/esm/components/SegmentedTabs.d.ts +4 -1
  90. package/dist/esm/components/SegmentedTabs.js +8 -8
  91. package/dist/esm/constants/index.js +1 -1
  92. package/dist/esm/constants/version.d.ts +1 -1
  93. package/dist/esm/constants/version.js +1 -1
  94. package/dist/esm/customHooks/networkLogger.js +1 -2
  95. package/dist/esm/helpers/index.d.ts +6 -0
  96. package/dist/esm/helpers/index.js +4 -4
  97. package/dist/esm/helpers/memoryManager.d.ts +0 -1
  98. package/dist/esm/helpers/memoryManager.js +1 -1
  99. package/dist/esm/helpers/remoteConfig.js +1 -1
  100. package/dist/esm/helpers/settingsStore.js +1 -1
  101. package/dist/esm/i18n/index.d.ts +35 -0
  102. package/dist/esm/i18n/index.js +1 -1
  103. package/dist/esm/i18n/locales/ar.json +1 -0
  104. package/dist/esm/i18n/locales/de.json +1 -0
  105. package/dist/esm/i18n/locales/en.json +1 -1
  106. package/dist/esm/i18n/locales/es.json +1 -0
  107. package/dist/esm/i18n/locales/fr.json +1 -0
  108. package/dist/esm/i18n/locales/hi.json +1 -0
  109. package/dist/esm/i18n/locales/ja.json +1 -0
  110. package/dist/esm/i18n/locales/ko.json +1 -0
  111. package/dist/esm/i18n/locales/pt.json +1 -0
  112. package/dist/esm/i18n/locales/ru.json +1 -0
  113. package/dist/esm/i18n/locales/zh.json +1 -0
  114. package/dist/esm/index.d.ts +2 -4
  115. package/dist/esm/index.js +5 -5
  116. package/dist/esm/styles/AppColors.d.ts +40 -0
  117. package/dist/esm/styles/AppColors.js +1 -1
  118. package/dist/esm/styles/index.js +1 -1
  119. package/dist/esm/types/enums.d.ts +0 -20
  120. package/dist/esm/types/enums.js +1 -1
  121. package/package.json +1 -15
  122. package/dist/commonjs/bundle.d.ts +0 -2
  123. package/dist/commonjs/bundle.js +0 -1
  124. package/dist/commonjs/components/Inspector/BundleTab.d.ts +0 -48
  125. package/dist/commonjs/components/Inspector/BundleTab.js +0 -1297
  126. package/dist/commonjs/components/Inspector/PerformanceTab.d.ts +0 -27
  127. package/dist/commonjs/components/Inspector/PerformanceTab.js +0 -454
  128. package/dist/commonjs/customHooks/bundleAnalyzer.d.ts +0 -115
  129. package/dist/commonjs/customHooks/bundleAnalyzer.js +0 -1
  130. package/dist/commonjs/customHooks/performanceTracker.d.ts +0 -144
  131. package/dist/commonjs/customHooks/performanceTracker.js +0 -63
  132. package/dist/commonjs/performance.d.ts +0 -2
  133. package/dist/commonjs/performance.js +0 -1
  134. package/dist/esm/bundle.d.ts +0 -2
  135. package/dist/esm/bundle.js +0 -1
  136. package/dist/esm/components/Inspector/BundleTab.d.ts +0 -48
  137. package/dist/esm/components/Inspector/BundleTab.js +0 -1297
  138. package/dist/esm/components/Inspector/PerformanceTab.d.ts +0 -27
  139. package/dist/esm/components/Inspector/PerformanceTab.js +0 -454
  140. package/dist/esm/customHooks/bundleAnalyzer.d.ts +0 -115
  141. package/dist/esm/customHooks/bundleAnalyzer.js +0 -1
  142. package/dist/esm/customHooks/performanceTracker.d.ts +0 -144
  143. package/dist/esm/customHooks/performanceTracker.js +0 -63
  144. package/dist/esm/performance.d.ts +0 -2
  145. package/dist/esm/performance.js +0 -1
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getCachedBundleAnalysis=exports.clearCachedBundleAnalysis=exports.analyzeHostAppBundle=exports.getInitialBundleAnalysis=exports.parseBundleSource=exports.trackRuntimeDefine=exports.trackRuntimeModuleExecution=exports.getHostScriptURL=exports.getBundleModuleEnabled=exports.setBundleModuleEnabled=void 0;const AppColors_1=require("../styles/AppColors"),i18n_1=require("../i18n"),react_native_1=require("react-native");let cachedAnalysis=null,isAnalyzing=!1;const subscribers=[];let isBundleModuleEnabled=!1;const setBundleModuleEnabled=e=>{isBundleModuleEnabled=e};exports.setBundleModuleEnabled=setBundleModuleEnabled;const getBundleModuleEnabled=()=>isBundleModuleEnabled;exports.getBundleModuleEnabled=getBundleModuleEnabled;const getSourceCodeModule=()=>{try{const e=react_native_1.NativeModules?.SourceCode,o=e?.scriptURL||e?.getConstants?.()?.scriptURL;if(typeof o=="string"&&o.length>0)return{scriptURL:o}}catch{}try{const e=react_native_1.TurboModuleRegistry?.get?.("SourceCode"),o=e?.getConstants?.(),n=e?.scriptURL||o?.scriptURL;if(typeof n=="string"&&n.length>0)return{scriptURL:n}}catch{}return null},getHostScriptURL=()=>{try{const e=getSourceCodeModule()?.scriptURL;if(typeof e=="string"&&e.length>0)return e}catch{}try{const e=react_native_1.NativeModules?.PlatformConstants?.serverHost||react_native_1.NativeModules?.AndroidConstants?.serverHost||react_native_1.NativeModules?.DevSettings?.serverHost||react_native_1.NativeModules?.DevSettings?.getConstants?.()?.serverHost;if(typeof e=="string"&&e.length>0)return`${e.startsWith("http")?e:`http://${e}`}/index.bundle?platform=${react_native_1.Platform.OS}&dev=true`}catch{}try{const e=globalThis?.__DEV_SERVER_URL__||globalThis?.__METRO_SERVER_HOST__||globalThis?.__DEV_SERVER_PORT__||globalThis?.__METRO_PORT__;if(typeof e=="number")return`http://${react_native_1.Platform.OS==="android"?"10.0.2.2":"localhost"}:${e}/index.bundle?platform=${react_native_1.Platform.OS}&dev=true`;if(typeof e=="string"&&e.length>0)return/^\d+$/.test(e)?`http://${react_native_1.Platform.OS==="android"?"10.0.2.2":"localhost"}:${e}/index.bundle?platform=${react_native_1.Platform.OS}&dev=true`:e.startsWith("http")?e:`http://${e}/index.bundle?platform=${react_native_1.Platform.OS}&dev=true`}catch{}return""};exports.getHostScriptURL=getHostScriptURL;const DYNAMIC_DEV_PORTS=[8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,19e3,19001,3e3],extractHostAndPort=e=>{if(!e||typeof e!="string")return{host:null,port:null};const o=e.match(/^https?:\/\/([^:/]+)(?::(\d+))?/);return o?{host:o[1]||null,port:o[2]?parseInt(o[2],10):null}:{host:null,port:null}},probeCandidateUrlsInParallel=async(e,o=3e3)=>{const{host:n,port:c}=extractHostAndPort(e);if(e&&e.startsWith("http"))try{const m=new AbortController,g=setTimeout(()=>m.abort(),o),b=await fetch(e,{signal:m.signal});if(clearTimeout(g),b.ok){const h=b.headers.get("content-length"),f=await b.text();if(f&&f.length>0){const x=h&&parseInt(h,10)||f.length;return{text:f,bytes:x,url:e}}}}catch{}const a=n?[n,"localhost","127.0.0.1",...react_native_1.Platform.OS==="android"?["10.0.2.2","10.0.3.2"]:[]]:["localhost","127.0.0.1",...react_native_1.Platform.OS==="android"?["10.0.2.2","10.0.3.2"]:[]],p=Array.from(new Set(a)),u=c?Array.from(new Set([c,...DYNAMIC_DEV_PORTS])):DYNAMIC_DEV_PORTS,i=[];for(const m of p)for(const g of u)i.push(new Promise(async(b,h)=>{const f=new AbortController,x=setTimeout(()=>f.abort(),700);try{const S=await fetch(`http://${m}:${g}/status`,{signal:f.signal});if(clearTimeout(x),S.ok){const M=await S.text();if(M&&M.includes("packager-status:running")){b({host:m,port:g});return}}}catch{clearTimeout(x)}h(new Error("unreachable"))}));let d=null;try{d=await new Promise((m,g)=>{let b=i.length;if(b===0){g(new Error("No candidate hosts"));return}i.forEach(h=>{h.then(m).catch(()=>{b--,b===0&&g(new Error("All probes failed"))})})})}catch{d=null}if(d){const m=`http://${d.host}:${d.port}/index.bundle?platform=${react_native_1.Platform.OS}&dev=true`;try{const g=new AbortController,b=setTimeout(()=>g.abort(),o),h=await fetch(m,{signal:g.signal});if(clearTimeout(b),h.ok){const f=h.headers.get("content-length"),x=await h.text();if(x&&x.length>0){const S=f&&parseInt(f,10)||x.length;return{text:x,bytes:S,url:m}}}}catch{}}return null},executedModuleIds=new Set,runtimeModules=new Map,trackRuntimeModuleExecution=()=>{try{const e=globalThis,o=e.__r;if(typeof o=="function"&&!o.__inspectorTracked){const n=function(c,...a){return executedModuleIds.add(Number(c)),o.call(this,c,...a)};Object.defineProperty(n,"__inspectorTracked",{value:!0,enumerable:!1}),e.__r=n}}catch{}};exports.trackRuntimeModuleExecution=trackRuntimeModuleExecution;const trackRuntimeDefine=()=>{try{const e=globalThis,o=e.__d;if(typeof o=="function"&&!o.__inspectorTracked){const n=function(c,a,p,u,...i){return typeof u=="string"&&u.length>0&&runtimeModules.set(Number(a),{id:Number(a),path:u}),o.call(this,c,a,p,u,...i)};Object.defineProperty(n,"__inspectorTracked",{value:!0,enumerable:!1}),e.__d=n}}catch{}};exports.trackRuntimeDefine=trackRuntimeDefine,(0,exports.trackRuntimeModuleExecution)(),(0,exports.trackRuntimeDefine)();const DEFAULT_BASELINE_MODULES=[{id:1,deps:[2,3,4],path:"index.js"},{id:2,deps:[4,5,13,14,15,16],path:"App.tsx"},{id:3,deps:[],path:"node_modules/react-native/index.js"},{id:4,deps:[],path:"node_modules/react/index.js"},{id:5,deps:[6,7],path:"node_modules/@react-navigation/native/src/index.ts"},{id:6,deps:[],path:"node_modules/react-native-screens/src/index.ts"},{id:7,deps:[],path:"node_modules/react-native-safe-area-context/src/index.ts"},{id:8,deps:[],path:"node_modules/react-native-svg/src/index.ts"},{id:9,deps:[],path:"node_modules/axios/index.js"},{id:10,deps:[],path:"node_modules/i18next/dist/esm/i18next.js"},{id:11,deps:[12],path:"node_modules/react-redux/src/index.ts"},{id:12,deps:[],path:"node_modules/@reduxjs/toolkit/dist/redux-toolkit.esm.js"},{id:13,deps:[],path:"src/components/Inspector/BundleTab.tsx"},{id:14,deps:[],path:"src/navigation/RootNavigator.tsx"},{id:15,deps:[],path:"src/screens/HomeScreen.tsx"},{id:16,deps:[],path:"src/store/index.ts"},{id:17,deps:[],path:"assets/images/logo.png"},{id:18,deps:[],path:"package.json"}],extractBundleModules=e=>{const o=[],n=new Set;if(e&&e.length>0){const c=/\/\/[#@]\s*sourceURL=(?:https?:\/\/[^\s\r\n/]+\/|file:\/\/)?([^\s\r\n?#]+)/g;let a,p=9e5;for(;(a=c.exec(e))!==null;){const d=a[1];if(d&&d.length>0&&!d.endsWith(".bundle")){const m=p++;n.has(m)||(n.add(m),o.push({id:m,deps:[],path:d}))}}const u=/,\s*(\d+)\s*,\s*(?:\[[^\]\r\n]{0,500}\]|\{[^}\r\n]{0,500}\})\s*,\s*["']([^"'\r\n]+)["']\s*\)/g;let i;for(;(i=u.exec(e))!==null;){const d=parseInt(i[1],10),m=i[2]||"";!n.has(d)&&m.length>0&&(n.add(d),o.push({id:d,deps:[],path:m}))}}return runtimeModules.forEach((c,a)=>{n.has(a)||(n.add(a),o.push({id:a,deps:[],path:c.path}))}),o.length===0?DEFAULT_BASELINE_MODULES:o},getStaticStartupModuleIds=e=>{const o=new Set;if(!e)return o;const n=/__r\s*\(\s*(\d+)\s*\)/g;let c;for(;(c=n.exec(e))!==null;)o.add(parseInt(c[1],10));return o},detectProjectRoot=e=>{const o=e.map(i=>i.replace(/\\/g,"/"));for(const i of o){const d=i.indexOf("/node_modules/");if(d!==-1)return i.slice(0,d+1)}for(const i of o){const d=i.match(/^(.*\/)(?:index\.[jt]sx?|app\.[jt]sx?|package\.json)(?:[?#].*)?$/i);if(d&&d[1])return d[1]}const n=o.filter(i=>i.startsWith("/")&&!i.includes("/node_modules/"));if(n.length===0)return"";if(n.length===1){const i=n[0].lastIndexOf("/");return i>0?n[0].slice(0,i+1):""}const c=n.map(i=>i.split("/"));let a=0;const p=c[0],u=Math.min(...c.map(i=>i.length));for(;a<u-1;){const i=p[a];if(c.every(d=>d[a]===i))a++;else break}return a>0?p.slice(0,a).join("/")+"/":""},normalizeProjectRelativePath=(e,o)=>{let n=e.replace(/\\/g,"/");const c=n.search(/[?#]/);return c!==-1&&(n=n.slice(0,c)),n=n.replace(/^(?:https?:\/\/[^/]+\/|file:\/\/)/,""),o&&n.startsWith(o)&&(n=n.slice(o.length)),n=n.replace(/^(\.\.\/)+/,"").replace(/^\.\//,"").replace(/^\/+/,""),n||(n=e.split("/").pop()||e),n},isExternalPackage=e=>{if(e.includes("node_modules/")){const o=e.match(/node_modules\/(?:@([^/]+)\/([^/]+)|([^/]+))/);return o?{isPkg:!0,pkgName:o[1]&&o[2]?`@${o[1]}/${o[2]}`:o[3]}:{isPkg:!0}}return e.includes("react-native-inapp-inspector")?{isPkg:!0,pkgName:"react-native-inapp-inspector"}:e.includes(".yarn/")||e.includes(".pnpm/")?{isPkg:!0}:e.includes("/dist/esm/")||e.includes("/dist/commonjs/")||e.includes("/dist/cjs/")||e.startsWith("dist/esm/")||e.startsWith("dist/commonjs/")||e.startsWith("dist/")||e.includes("/react-native-inapp-inspector/dist/")?{isPkg:!0,pkgName:"react-native-inapp-inspector"}:{isPkg:!1}},isInternalModule=e=>e.startsWith("<<")||e.startsWith("[metro]")||e.includes("metro-runtime")||e.includes("polyfills/require.js")||e.includes("prelude_commonjs")||e.includes("Libraries/Core/InitializeCore.js")||e.includes("@babel/runtime"),parseBundleSource=(e,o,n,c=!0)=>{const a=!!globalThis.HermesInternal,p=Number((o/(1024*1024)).toFixed(2)),u=Math.round(o/1024),i=extractBundleModules(e),d=getStaticStartupModuleIds(e),m=new Map;for(const t of i)m.set(t.id,t);const g=new Set,b=[],h=t=>{g.has(t)||(g.add(t),b.push(t))};h(0),d.forEach(t=>h(t)),executedModuleIds.forEach(t=>h(t));for(const t of i){const s=t.path.toLowerCase().replace(/\\/g,"/");(s.endsWith("/index.js")||s.endsWith("/index.ts")||s.endsWith("/index.tsx")||s==="index.js"||s.endsWith("/app.tsx")||s.endsWith("/app.js")||s.endsWith("/app.jsx")||s==="app.tsx"||s==="app.js"||s.endsWith("app.json"))&&h(t.id)}for(;b.length>0;){const t=b.shift(),s=m.get(t);if(s&&s.deps)for(const r of s.deps)h(r)}const f=new Map,x=[];for(const t of i){const s=t.path.replace(/\\/g,"/"),{isPkg:r,pkgName:v}=isExternalPackage(s);if(r){v&&!v.startsWith(".")&&f.set(v,(f.get(v)||0)+1);continue}isInternalModule(s)||x.push({mod:t,rawPath:s})}const S=detectProjectRoot(i.map(t=>t.path)),M=[];let oe=0;for(const{mod:t,rawPath:s}of x){const r=normalizeProjectRelativePath(s,S);if(!(r.endsWith(".tsx")||r.endsWith(".ts")||r.endsWith(".jsx")||r.endsWith(".js")||r.endsWith(".mjs")||r.endsWith(".cjs")||r.endsWith(".json")||r.endsWith(".png")||r.endsWith(".jpg")||r.endsWith(".jpeg")||r.endsWith(".gif")||r.endsWith(".webp")||r.endsWith(".svg")||r.endsWith(".bmp")||r.endsWith(".ico")||r.endsWith(".ttf")||r.endsWith(".otf")||r.endsWith(".woff")||r.endsWith(".woff2")||r.endsWith(".css")||r.endsWith(".scss")||r.endsWith(".html")||r.endsWith(".md")||r.endsWith(".graphql")||r.endsWith(".gql")))continue;const l=r.split(".").pop()?.toUpperCase()||"JS",j=r.split("/").pop()||r;let A="javascript",N=AppColors_1.AppColors.indigo500;l==="TSX"||l==="TS"?(A="typescript",N=AppColors_1.AppColors.sky500):l==="PNG"||l==="JPG"||l==="JPEG"||l==="GIF"||l==="WEBP"||l==="SVG"||l==="BMP"||l==="ICO"?(A="image",N=AppColors_1.AppColors.pink500):l==="TTF"||l==="OTF"||l==="WOFF"||l==="WOFF2"?(A="font",N=AppColors_1.AppColors.purple500):(l==="JSON"||l==="CSS"||l==="SCSS"||l==="HTML"||l==="MD"||l==="GRAPHQL"||l==="GQL")&&(A="json",N=AppColors_1.AppColors.emerald500);const X=Math.max(2,Math.round(u*.15/Math.max(i.length,20))),Y=!(r.includes(".test.")||r.includes(".spec.")||r.includes("__tests__")||r.includes("__mocks__")||r.includes(".stories.")||r.includes("fixtures/"));M.push({id:`host-file-${oe++}`,name:j,path:r,ext:l,category:A,sizeKb:X,meta:`Active Host App Module \u2022 ${A.toUpperCase()}`,color:N,status:Y?"optimal":"warning",advice:Y?"In-Use: Bundled and active in host application dependency tree":"Not consumed: Test fixture or orphaned file packaged in bundle",isConsumed:Y})}const ne=t=>{const s=[AppColors_1.AppColors.indigo500,AppColors_1.AppColors.sky500,AppColors_1.AppColors.pink500,AppColors_1.AppColors.purple500,AppColors_1.AppColors.emerald500,AppColors_1.AppColors.amber500,AppColors_1.AppColors.red500,AppColors_1.AppColors.teal500,AppColors_1.AppColors.blue500,AppColors_1.AppColors.fuchsia500,AppColors_1.AppColors.orange500,AppColors_1.AppColors.lime500,AppColors_1.AppColors.cyan500,AppColors_1.AppColors.purple900,AppColors_1.AppColors.errorColor];let r=0;for(let v=0;v<t.length;v++)r=t.charCodeAt(v)+((r<<5)-r);return s[Math.abs(r)%s.length]},re=t=>{const s=t.toLowerCase();return s.includes("navigation")||s.includes("router")||s.includes("screen")?"navigation":s.includes("ui")||s.includes("reanimated")||s.includes("gesture")||s.includes("svg")||s.includes("lottie")||s.includes("vector")||s.includes("icon")||s.includes("image")||s.includes("gradient")?"ui":s.includes("axios")||s.includes("fetch")||s.includes("query")||s.includes("apollo")||s.includes("network")||s.includes("socket")||s.includes("http")?"network":s==="react"||s==="react-native"||s.includes("metro")||s.includes("babel")||s.includes("core")?"core":"utils"},ie=t=>t.startsWith("@react-navigation/")?t==="@react-navigation/native"?null:"@react-navigation/native":t.startsWith("@react-native/")||t==="react-refresh"||t==="metro-runtime"||t==="whatwg-fetch"||t==="promise"||t==="event-target-shim"?"react-native":t==="scheduler"||t==="loose-envify"||t==="object-assign"?"react":t==="use-sync-external-store"||t==="reselect"||t==="redux-thunk"||t==="immer"?"react-redux":t==="follow-redirects"||t==="form-data"||t==="proxy-from-env"?"axios":t==="clone-deep"||t==="html-parse-stringify"||t==="@babel/runtime"?"i18next":t==="css-select"||t==="css-tree"||t==="entities"?"react-native-svg":null,Z=Array.from(f.entries()),ae=Z.reduce((t,[,s])=>t+s,0)||1,k=[];Z.forEach(([t,s],r)=>{const v=re(t),l=ne(t),j=ie(t)||void 0,A=!j,N=Math.max(8,Math.round(u*.52*s/Math.max(ae,1))),X=Number((N/Math.max(u,1)*100).toFixed(1));k.push({id:`host-pkg-${r}`,name:t,version:"",latestVersion:"",sizeKb:N,percentage:X,type:A?"direct":"transitive",isDirectDefined:A,parentPackageName:j,subpackages:[],category:v,color:l,description:`${s} bundled ${s===1?"module":"modules"}`,npmUrl:`https://www.npmjs.com/package/${t}`,isDeprecated:!1,lastActive:`${s} modules`})});const E=new Map;k.forEach(t=>{t.isDirectDefined&&E.set(t.name,t)}),k.forEach(t=>{if(t.parentPackageName&&E.has(t.parentPackageName)){const s=E.get(t.parentPackageName);s.subpackages||(s.subpackages=[]),s.subpackages.push(t)}}),k.sort((t,s)=>s.sizeKb-t.sizeKb);let R=0;for(const t of k)R+=t.sizeKb||0;let B=0,I=0;for(const t of M)t.category==="image"||t.category==="font"?I+=t.sizeKb||0:B+=t.sizeKb||0;const T=B>0?B:Math.round(u*.18),w=R>0?R:Math.round(u*.58),P=I>0?I:Math.round(u*.08),ee=Math.max(0,u-T-w-P),C=Number((u*.38/1024).toFixed(2)),D=Number((w/1024).toFixed(2)),O=Number((P/1024).toFixed(2)),W=Math.min(k.length,55),z=Number((48+W*.35+D*.9).toFixed(1)),H=Number((38+W*.22+D*.6).toFixed(1)),L=Number((30+O*2.2).toFixed(1)),$=6.4,_=Number((C+z+H+L+$).toFixed(1)),ce=Number((_*.655).toFixed(1)),U=Number((20+W*.12+D*.4).toFixed(1)),K=Number((14+W*.08+D*.25).toFixed(1)),q=Number((16+O*1.5).toFixed(1)),y=Number((C+U+K+q+3.8).toFixed(1)),te=Number((y*.54).toFixed(1)),V=Number((195+W*.55+D*1.6).toFixed(1)),G=Number((54+W*.2+D*.6).toFixed(1)),J=Number((58+O*2.8).toFixed(1)),Q=8.5,F=Number((C+V+G+J+Q).toFixed(1)),de=Number(F.toFixed(1)),le=[{id:"ios-c1",name:(0,i18n_1.t)("bundle.iosComp1Name"),category:"frameworks",sizeMb:z,pct:Number((z/_*100).toFixed(1)),color:AppColors_1.AppColors.indigo500,description:(0,i18n_1.t)("bundle.iosComp1Desc",{count:k.length}),advice:(0,i18n_1.t)("bundle.iosComp1Advice")},{id:"ios-c2",name:(0,i18n_1.t)("bundle.iosComp2Name"),category:"native",sizeMb:H,pct:Number((H/_*100).toFixed(1)),color:AppColors_1.AppColors.sky500,description:(0,i18n_1.t)("bundle.iosComp2Desc"),advice:(0,i18n_1.t)("bundle.iosComp2Advice")},{id:"ios-c3",name:(0,i18n_1.t)("bundle.iosComp3Name"),category:"assets",sizeMb:L,pct:Number((L/_*100).toFixed(1)),color:AppColors_1.AppColors.pink500,description:(0,i18n_1.t)("bundle.iosComp3Desc"),advice:(0,i18n_1.t)("bundle.iosComp3Advice")},{id:"ios-c4",name:(0,i18n_1.t)("bundle.iosComp4Name"),category:"js",sizeMb:C,pct:Number((C/_*100).toFixed(1)),color:AppColors_1.AppColors.emerald500,description:(0,i18n_1.t)("bundle.iosComp4Desc",{count:M.length}),advice:(0,i18n_1.t)("bundle.iosComp4Advice")},{id:"ios-c5",name:(0,i18n_1.t)("bundle.iosComp5Name"),category:"meta",sizeMb:$,pct:Number(($/_*100).toFixed(1)),color:AppColors_1.AppColors.amber500,description:(0,i18n_1.t)("bundle.iosComp5Desc"),advice:(0,i18n_1.t)("bundle.iosComp5Advice")}],se=[{id:"and-c1",name:(0,i18n_1.t)("bundle.andComp1Name"),category:"native",sizeMb:U,pct:Number((U/y*100).toFixed(1)),color:AppColors_1.AppColors.sky500,description:(0,i18n_1.t)("bundle.andComp1Desc",{count:k.length}),advice:(0,i18n_1.t)("bundle.andComp1Advice")},{id:"and-c2",name:(0,i18n_1.t)("bundle.andComp2Name"),category:"frameworks",sizeMb:K,pct:Number((K/y*100).toFixed(1)),color:AppColors_1.AppColors.indigo500,description:(0,i18n_1.t)("bundle.andComp2Desc"),advice:(0,i18n_1.t)("bundle.andComp2Advice")},{id:"and-c3",name:(0,i18n_1.t)("bundle.andComp3Name"),category:"assets",sizeMb:q,pct:Number((q/y*100).toFixed(1)),color:AppColors_1.AppColors.pink500,description:(0,i18n_1.t)("bundle.andComp3Desc"),advice:(0,i18n_1.t)("bundle.andComp3Advice")},{id:"and-c4",name:(0,i18n_1.t)("bundle.andComp4Name"),category:"js",sizeMb:C,pct:Number((C/y*100).toFixed(1)),color:AppColors_1.AppColors.emerald500,description:(0,i18n_1.t)("bundle.andComp4Desc",{count:M.length}),advice:(0,i18n_1.t)("bundle.andComp4Advice")},{id:"and-c5",name:(0,i18n_1.t)("bundle.andComp5Name"),category:"meta",sizeMb:3.8,pct:Number((3.8/y*100).toFixed(1)),color:AppColors_1.AppColors.amber500,description:(0,i18n_1.t)("bundle.andComp5Desc"),advice:(0,i18n_1.t)("bundle.andComp5Advice")}],pe=[{id:"apk-c1",name:(0,i18n_1.t)("bundle.apkComp1Name"),category:"native",sizeMb:V,pct:Number((V/F*100).toFixed(1)),color:AppColors_1.AppColors.sky500,description:(0,i18n_1.t)("bundle.apkComp1Desc"),advice:(0,i18n_1.t)("bundle.apkComp1Advice")},{id:"apk-c2",name:(0,i18n_1.t)("bundle.apkComp2Name"),category:"frameworks",sizeMb:G,pct:Number((G/F*100).toFixed(1)),color:AppColors_1.AppColors.indigo500,description:(0,i18n_1.t)("bundle.apkComp2Desc"),advice:(0,i18n_1.t)("bundle.apkComp2Advice")},{id:"apk-c3",name:(0,i18n_1.t)("bundle.apkComp3Name"),category:"assets",sizeMb:J,pct:Number((J/F*100).toFixed(1)),color:AppColors_1.AppColors.pink500,description:(0,i18n_1.t)("bundle.apkComp3Desc"),advice:(0,i18n_1.t)("bundle.apkComp3Advice")},{id:"apk-c4",name:(0,i18n_1.t)("bundle.apkComp4Name"),category:"js",sizeMb:C,pct:Number((C/F*100).toFixed(1)),color:AppColors_1.AppColors.emerald500,description:(0,i18n_1.t)("bundle.apkComp4Desc",{count:M.length}),advice:(0,i18n_1.t)("bundle.apkComp4Advice")},{id:"apk-c5",name:(0,i18n_1.t)("bundle.apkComp5Name"),category:"meta",sizeMb:Q,pct:Number((Q/F*100).toFixed(1)),color:AppColors_1.AppColors.amber500,description:(0,i18n_1.t)("bundle.apkComp5Desc"),advice:(0,i18n_1.t)("bundle.apkComp5Advice")}];return{isLive:c,scriptURL:n,totalDevBytes:o,totalDevMb:p,totalDevKb:u,isHermes:a,moduleCount:i.length||M.length+k.length,packageCount:k.length,filesCount:M.length,splitUp:{appSource:{kb:T,mb:Number((T/1024).toFixed(2)),pct:15},nodeModules:{kb:w,mb:Number((w/1024).toFixed(2)),pct:52},assetsMedia:{kb:P,mb:Number((P/1024).toFixed(2)),pct:12},metroDevOverhead:{kb:ee,mb:Number((ee/1024).toFixed(2)),pct:21}},files:M,packages:k,production:{ios:{totalInstallMb:_,totalDownloadMb:ce,compressionRatioPct:Number(((p-C)/Math.max(p,1)*100).toFixed(1)),components:le},androidAab:{totalInstallMb:y,totalDownloadMb:te,compressionRatioPct:Number(((p-C)/Math.max(p,1)*100).toFixed(1)),components:se},androidApk:{totalInstallMb:F,totalDownloadMb:de,compressionRatioPct:Number(((p-C)/Math.max(p,1)*.7).toFixed(1)),components:pe},android:{totalInstallMb:y,totalDownloadMb:te,compressionRatioPct:Number(((p-C)/Math.max(p,1)*100).toFixed(1)),components:se}}}};exports.parseBundleSource=parseBundleSource;const getInitialBundleAnalysis=()=>{if(cachedAnalysis)return cachedAnalysis;const e=(0,exports.getHostScriptURL)();return(0,exports.parseBundleSource)("",684e4,e||"unknown",!1)};exports.getInitialBundleAnalysis=getInitialBundleAnalysis;const analyzeHostAppBundle=async(e=!1)=>{if(e&&(cachedAnalysis=null),cachedAnalysis&&!e)return cachedAnalysis;if(isAnalyzing)return new Promise(a=>{subscribers.push(a)});isAnalyzing=!0;const o=(0,exports.getHostScriptURL)();try{const a=await probeCandidateUrlsInParallel(o,2500);if(a&&a.text&&a.text.length>0){const p=(0,exports.parseBundleSource)(a.text,a.bytes,a.url);return cachedAnalysis=p,isAnalyzing=!1,subscribers.forEach(u=>u(p)),subscribers.length=0,p}}catch{}const c=(0,exports.parseBundleSource)("",684e4,o||"unknown",!1);return cachedAnalysis=c,isAnalyzing=!1,subscribers.forEach(a=>a(c)),subscribers.length=0,c};exports.analyzeHostAppBundle=analyzeHostAppBundle;const clearCachedBundleAnalysis=()=>{cachedAnalysis=null};exports.clearCachedBundleAnalysis=clearCachedBundleAnalysis;const getCachedBundleAnalysis=()=>cachedAnalysis;exports.getCachedBundleAnalysis=getCachedBundleAnalysis;
@@ -1,144 +0,0 @@
1
- export interface PerformanceEvent {
2
- id: string;
3
- timestamp: number;
4
- type: 'fps_drop' | 'slow_render' | 'transition' | 'memory' | 'network' | 'bridge' | 'touch';
5
- category: 'render' | 'navigation' | 'memory' | 'io' | 'bridge';
6
- fps: number;
7
- durationMs: number;
8
- droppedFrames?: number;
9
- frameTimeMs?: number;
10
- frameBudgetPct?: number;
11
- bottleneckThread?: 'JS Thread' | 'UI Thread' | 'Bridge' | 'Balanced';
12
- screenName?: string;
13
- label: string;
14
- detail: string;
15
- source?: string;
16
- breakdown?: {
17
- jsTimeMs: number;
18
- uiTimeMs: number;
19
- bridgeLatencyMs?: number;
20
- };
21
- heapDeltaKb?: number;
22
- advice?: string;
23
- severity: 'optimal' | 'warning' | 'critical';
24
- }
25
- export interface LiveMemoryStats {
26
- heapUsedMb: number;
27
- heapTotalMb: number;
28
- gcCount: number;
29
- gcPauseMs: number;
30
- allocationRateMbPerSec: number;
31
- }
32
- export interface CoreMobileVitals {
33
- ttiMs: number;
34
- fcpMs: number;
35
- inpMs: number;
36
- jankPercentage: number;
37
- grade: 'Optimal' | 'Fair' | 'Poor';
38
- }
39
- export interface PerformanceFixKey {
40
- keyName: string;
41
- title: string;
42
- explanation: string;
43
- codeSnippet: string;
44
- impact: 'High Impact' | 'Medium Impact' | 'Best Practice';
45
- impactColor: string;
46
- }
47
- export interface ComponentRenderProfile {
48
- id: string;
49
- name: string;
50
- type: 'screen' | 'component' | 'list_item' | 'modal';
51
- sourceFile: string;
52
- renderCount: number;
53
- wastefulCount: number;
54
- wastefulPercentage: number;
55
- avgRenderTimeMs: number;
56
- totalRenderTimeMs: number;
57
- lastRenderedAt: number;
58
- reasons: string[];
59
- fixKeys: PerformanceFixKey[];
60
- severity: 'optimal' | 'warning' | 'critical';
61
- }
62
- export declare const generateFixSnippet: (fixKey: string, componentName?: string, context?: {
63
- propName?: string;
64
- actionName?: string;
65
- itemHeight?: number;
66
- }) => PerformanceFixKey;
67
- export declare function getCallerSourceFile(fallbackName?: string): string;
68
- export declare const getInitialRenderProfiles: () => ComponentRenderProfile[];
69
- export declare const getInitialPerformanceEvents: () => PerformanceEvent[];
70
- export declare const INITIAL_EVENTS: PerformanceEvent[];
71
- export declare const setPerformanceModuleEnabled: (enabled: boolean) => void;
72
- export declare const getPerformanceModuleEnabled: () => boolean;
73
- export declare const subscribeRenderProfiles: (listener: (profiles: ComponentRenderProfile[]) => void) => () => void;
74
- export declare const getRenderProfiles: () => ComponentRenderProfile[];
75
- export declare const registerComponentProfile: (profile: ComponentRenderProfile) => void;
76
- export declare const trackComponentRender: (params: {
77
- name: string;
78
- type?: ComponentRenderProfile["type"];
79
- sourceFile?: string;
80
- renderTimeMs?: number;
81
- isWasteful?: boolean;
82
- reason?: string;
83
- fixKeys?: PerformanceFixKey[];
84
- }) => void;
85
- export declare const getHermesMemoryStats: () => LiveMemoryStats;
86
- export declare const trackNavigationTransition: (screenName: string, durationMs: number, options?: {
87
- ttiMs?: number;
88
- droppedFrames?: number;
89
- source?: string;
90
- }) => PerformanceEvent;
91
- export declare const useNavigationProfiler: (screenName: string, options?: {
92
- onTransitionEnd?: (durationMs: number) => void;
93
- }) => void;
94
- export declare const trackHeavyTask: <T>(taskName: string, syncFn: () => T, options?: {
95
- thresholdMs?: number;
96
- source?: string;
97
- }) => T;
98
- export declare const measureAsync: <T>(taskName: string, asyncFn: () => Promise<T>, options?: {
99
- thresholdMs?: number;
100
- source?: string;
101
- }) => Promise<T>;
102
- export declare const useComponentProfiler: (componentName: string, options?: {
103
- type?: ComponentRenderProfile["type"];
104
- sourceFile?: string;
105
- propsToCompare?: Record<string, any>;
106
- }) => void;
107
- export declare const usePerformanceTracker: (enabled?: boolean) => {
108
- isRecording: boolean;
109
- setIsRecording: import("react").Dispatch<import("react").SetStateAction<boolean>>;
110
- currentFps: number;
111
- minFps: number;
112
- maxFps: number;
113
- avgFps: number;
114
- totalFrames: number;
115
- jankyFrameCount: number;
116
- jsLagMs: number;
117
- fpsHistory: number[];
118
- memoryStats: LiveMemoryStats;
119
- mobileVitals: CoreMobileVitals;
120
- renderProfiles: ComponentRenderProfile[];
121
- reRenderSummary: {
122
- totalRenders: number;
123
- totalWasteful: number;
124
- overallWastefulPct: number;
125
- topOffender: ComponentRenderProfile;
126
- totalComponentsTracked: number;
127
- };
128
- resetRenderCounters: () => void;
129
- simulateComponentRender: (componentId: string) => void;
130
- events: PerformanceEvent[];
131
- setEvents: import("react").Dispatch<import("react").SetStateAction<PerformanceEvent[]>>;
132
- clearEvents: () => void;
133
- triggerGc: () => void;
134
- };
135
- export declare const setMaxPerformanceEventsLimit: (limit: number) => void;
136
- export declare const getMaxPerformanceEventsLimit: () => number;
137
- export declare const prunePerformanceEvents: (targetCount?: number) => number;
138
- export declare const logPerformanceEvent: (event: Omit<PerformanceEvent, "id" | "timestamp"> & {
139
- id?: string;
140
- timestamp?: number;
141
- }) => PerformanceEvent;
142
- export declare const clearPerformanceEvents: () => void;
143
- export declare const subscribePerformanceEvents: (listener: (events: PerformanceEvent[]) => void) => () => void;
144
- export declare const getPerformanceEvents: () => PerformanceEvent[];
@@ -1,63 +0,0 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getPerformanceEvents=exports.subscribePerformanceEvents=exports.clearPerformanceEvents=exports.logPerformanceEvent=exports.prunePerformanceEvents=exports.getMaxPerformanceEventsLimit=exports.setMaxPerformanceEventsLimit=exports.usePerformanceTracker=exports.useComponentProfiler=exports.measureAsync=exports.trackHeavyTask=exports.useNavigationProfiler=exports.trackNavigationTransition=exports.getHermesMemoryStats=exports.trackComponentRender=exports.registerComponentProfile=exports.getRenderProfiles=exports.subscribeRenderProfiles=exports.getPerformanceModuleEnabled=exports.setPerformanceModuleEnabled=exports.INITIAL_EVENTS=exports.getInitialPerformanceEvents=exports.getInitialRenderProfiles=exports.generateFixSnippet=void 0,exports.getCallerSourceFile=getCallerSourceFile;const AppColors_1=require("../styles/AppColors"),i18n_1=require("../i18n"),react_1=require("react"),generateFixSnippet=(e,r="Component",o)=>{const t=r||"Component",n=o?.propName||"onPress",a=o?.actionName||"handlePress",p=o?.itemHeight||72;switch(e){case"useCallback":return{keyName:"useCallback",title:(0,i18n_1.t)("performance.fixUseCallbackTitle"),explanation:(0,i18n_1.t)("performance.fixUseCallbackDesc"),codeSnippet:`${(0,i18n_1.t)("performance.beforeUseCallback",{comp:t})}
2
- <Button ${n}={() => ${a}(item.id)} />
3
-
4
- ${(0,i18n_1.t)("performance.afterUseCallback")}
5
- const ${a}Memo = useCallback(() => {
6
- ${a}(item.id);
7
- }, [item.id]);
8
- <Button ${n}={${a}Memo} />`,impact:(0,i18n_1.t)("performance.highImpact"),impactColor:AppColors_1.AppColors.pink500};case"createSelector":case"useMemo":return{keyName:"createSelector",title:(0,i18n_1.t)("performance.fixCreateSelectorTitle"),explanation:(0,i18n_1.t)("performance.fixCreateSelectorDesc"),codeSnippet:`${(0,i18n_1.t)("performance.beforeCreateSelector",{comp:t})}
9
- const { items, total } = useSelector(state => ({
10
- items: state.cart.items,
11
- total: state.cart.total,
12
- }));
13
-
14
- ${(0,i18n_1.t)("performance.afterCreateSelector")}
15
- import { shallowEqual } from 'react-redux';
16
- const { items, total } = useSelector(
17
- state => ({ items: state.cart.items, total: state.cart.total }),
18
- shallowEqual
19
- );`,impact:(0,i18n_1.t)("performance.highImpact"),impactColor:AppColors_1.AppColors.pink500};case"memo":case"React.memo":return{keyName:"memo",title:(0,i18n_1.t)("performance.fixReactMemoTitle"),explanation:(0,i18n_1.t)("performance.fixReactMemoDesc"),codeSnippet:`${(0,i18n_1.t)("performance.beforeMemo",{comp:t})}
20
- export const ${t} = (props: ${t}Props) => {
21
- return <View>...</View>;
22
- };
23
-
24
- ${(0,i18n_1.t)("performance.afterMemo")}
25
- export const ${t} = React.memo((props: ${t}Props) => {
26
- return <View>...</View>;
27
- }, (prev, next) => prev.id === next.id && prev.updatedAt === next.updatedAt);`,impact:(0,i18n_1.t)("performance.highImpact"),impactColor:AppColors_1.AppColors.pink500};case"getItemLayout":return{keyName:"getItemLayout",title:(0,i18n_1.t)("performance.fixGetItemLayoutTitle"),explanation:(0,i18n_1.t)("performance.fixGetItemLayoutDesc"),codeSnippet:`${(0,i18n_1.t)("performance.flatListOptimization",{comp:t})}
28
- const ITEM_HEIGHT = ${p};
29
- const getItemLayout = useCallback((_data: any, index: number) => ({
30
- length: ITEM_HEIGHT,
31
- offset: ITEM_HEIGHT * index,
32
- index,
33
- }), []);
34
-
35
- <FlatList
36
- data={items}
37
- getItemLayout={getItemLayout}
38
- renderItem={({item}) => <${t} item={item} />}
39
- keyExtractor={item => String(item.id)}
40
- />`,impact:(0,i18n_1.t)("performance.highImpact"),impactColor:AppColors_1.AppColors.pink500};case"customComparator":return{keyName:"customComparator",title:(0,i18n_1.t)("performance.fixCustomComparatorTitle"),explanation:(0,i18n_1.t)("performance.fixCustomComparatorDesc"),codeSnippet:`${(0,i18n_1.t)("performance.customComparator",{comp:t})}
41
- export const ${t} = React.memo(
42
- ${t}Component,
43
- (prevProps, nextProps) => {
44
- return prevProps.id === nextProps.id && prevProps.status === nextProps.status;
45
- }
46
- );`,impact:(0,i18n_1.t)("performance.mediumImpact"),impactColor:AppColors_1.AppColors.amber500};case"DebouncedInput":return{keyName:"DebouncedInput",title:(0,i18n_1.t)("performance.fixDebouncedInputTitle"),explanation:(0,i18n_1.t)("performance.fixDebouncedInputDesc"),codeSnippet:`${(0,i18n_1.t)("performance.debounceInput",{comp:t})}
47
- const [localText, setLocalText] = useState('');
48
- const debouncedSearch = useMemo(
49
- () => debounce((query: string) => onSearch(query), 250),
50
- [onSearch]
51
- );`,impact:(0,i18n_1.t)("performance.highImpact"),impactColor:AppColors_1.AppColors.pink500};case"ComponentSplitting":return{keyName:"ComponentSplitting",title:(0,i18n_1.t)("performance.fixComponentSplittingTitle"),explanation:(0,i18n_1.t)("performance.fixComponentSplittingDesc"),codeSnippet:`${(0,i18n_1.t)("performance.isolateState",{comp:t})}
52
- export const StickyKeyboard = React.memo(KeyboardStickyView);`,impact:(0,i18n_1.t)("performance.mediumImpact"),impactColor:AppColors_1.AppColors.purple500};case"InteractionManager":return{keyName:"InteractionManager",title:(0,i18n_1.t)("performance.fixInteractionManagerTitle"),explanation:(0,i18n_1.t)("performance.fixInteractionManagerDesc"),codeSnippet:`${(0,i18n_1.t)("performance.beforeInteractionManager",{comp:t})}
53
-
54
- ${(0,i18n_1.t)("performance.afterInteractionManager")}`,impact:(0,i18n_1.t)("performance.highImpact"),impactColor:AppColors_1.AppColors.pink500};case"FlatListWindowing":return{keyName:"FlatListWindowing",title:(0,i18n_1.t)("performance.fixFlatListWindowingTitle"),explanation:(0,i18n_1.t)("performance.fixFlatListWindowingDesc"),codeSnippet:`${(0,i18n_1.t)("performance.beforeFlatListWindowing",{comp:t})}`,impact:(0,i18n_1.t)("performance.mediumImpact"),impactColor:AppColors_1.AppColors.purple500};case"ImageCaching":return{keyName:"ImageCaching",title:(0,i18n_1.t)("performance.fixImageCachingTitle"),explanation:(0,i18n_1.t)("performance.fixImageCachingDesc"),codeSnippet:`${(0,i18n_1.t)("performance.beforeImageCaching",{comp:t})}`,impact:(0,i18n_1.t)("performance.mediumImpact"),impactColor:AppColors_1.AppColors.purple500};case"ContextSplitting":return{keyName:"ContextSplitting",title:(0,i18n_1.t)("performance.fixContextSplittingTitle"),explanation:(0,i18n_1.t)("performance.fixContextSplittingDesc"),codeSnippet:`${(0,i18n_1.t)("performance.beforeContextSplitting",{comp:t})}
55
-
56
- ${(0,i18n_1.t)("performance.afterContextSplitting")}`,impact:(0,i18n_1.t)("performance.highImpact"),impactColor:AppColors_1.AppColors.pink500};case"InlineStylesHoist":return{keyName:"InlineStylesHoist",title:(0,i18n_1.t)("performance.fixInlineStylesHoistTitle"),explanation:(0,i18n_1.t)("performance.fixInlineStylesHoistDesc"),codeSnippet:`${(0,i18n_1.t)("performance.beforeInlineStyles",{comp:t})}
57
-
58
- ${(0,i18n_1.t)("performance.afterInlineStyles")}`,impact:(0,i18n_1.t)("performance.bestPractice"),impactColor:AppColors_1.AppColors.pink500};default:return{keyName:"useRefForTracking",title:(0,i18n_1.t)("performance.fixUseRefForTrackingTitle"),explanation:(0,i18n_1.t)("performance.fixUseRefForTrackingDesc"),codeSnippet:`${(0,i18n_1.t)("performance.beforeUseRef",{comp:t})}
59
- const [eventCount, setEventCount] = useState(0);
60
-
61
- ${(0,i18n_1.t)("performance.afterUseRef")}
62
- const eventCountRef = useRef(0);`,impact:(0,i18n_1.t)("performance.bestPractice"),impactColor:AppColors_1.AppColors.pink500}}};exports.generateFixSnippet=generateFixSnippet;function getCallerSourceFile(e){try{const r=new Error().stack;if(!r)return e||"React Native Runtime";const o=r.split(`
63
- `);for(let t=0;t<o.length;t++){const n=o[t];if(n.includes("performanceTracker")||n.includes("node_modules")||n.includes("Error")||n.includes("regeneratorRuntime"))continue;const a=n.match(/(?:at\s+)?(?:.*?\((.*?)(?::\d+)?(?::\d+)?\)|(\S+:\d+:\d+))/);if(a){const f=(a[1]||a[2]||"").trim().replace(/^at\s+/,"");if(f&&!f.includes("performanceTracker"))return f}const p=n.trim().replace(/^at\s+/,"");if(p&&!p.includes("performanceTracker"))return p}}catch{}return e||"React Native Runtime"}const getInitialRenderProfiles=()=>[];exports.getInitialRenderProfiles=getInitialRenderProfiles;const getInitialPerformanceEvents=()=>[];exports.getInitialPerformanceEvents=getInitialPerformanceEvents,exports.INITIAL_EVENTS=[];let isPerformanceModuleEnabled=!1;const setPerformanceModuleEnabled=e=>{isPerformanceModuleEnabled=e};exports.setPerformanceModuleEnabled=setPerformanceModuleEnabled;const getPerformanceModuleEnabled=()=>isPerformanceModuleEnabled;exports.getPerformanceModuleEnabled=getPerformanceModuleEnabled;const globalRenderRegistry=new Map,renderListeners=new Set,notifyRenderListeners=()=>{const e=Array.from(globalRenderRegistry.values());renderListeners.forEach(r=>{try{r(e)}catch{}})},subscribeRenderProfiles=e=>(renderListeners.add(e),e(Array.from(globalRenderRegistry.values())),()=>{renderListeners.delete(e)});exports.subscribeRenderProfiles=subscribeRenderProfiles;const getRenderProfiles=()=>Array.from(globalRenderRegistry.values());exports.getRenderProfiles=getRenderProfiles;const registerComponentProfile=e=>{isPerformanceModuleEnabled&&(globalRenderRegistry.set(e.name,e),notifyRenderListeners())};exports.registerComponentProfile=registerComponentProfile;const trackComponentRender=e=>{if(!isPerformanceModuleEnabled)return;const r=globalRenderRegistry.get(e.name),o=Date.now(),t=e.renderTimeMs??1.5,n=e.isWasteful??!1;if(r){const a=r.renderCount+1,p=r.wastefulCount+(n?1:0),f=Number((p/a*100).toFixed(1)),g=Number((r.totalRenderTimeMs+t).toFixed(1)),b=Number((g/a).toFixed(1)),h=e.reason?Array.from(new Set([...r.reasons,e.reason])):r.reasons,M={...r,renderCount:a,wastefulCount:p,wastefulPercentage:f,avgRenderTimeMs:b,totalRenderTimeMs:g,lastRenderedAt:o,reasons:h,severity:f>70&&a>20?"critical":f>40&&a>10?"warning":"optimal"};globalRenderRegistry.set(e.name,M)}else{const a={id:`render-${Date.now()}-${Math.random().toString(36).substring(2,6)}`,name:e.name,type:e.type||"component",sourceFile:e.sourceFile||getCallerSourceFile(e.name),renderCount:1,wastefulCount:n?1:0,wastefulPercentage:n?100:0,avgRenderTimeMs:t,totalRenderTimeMs:t,lastRenderedAt:o,reasons:e.reason?[e.reason]:[],fixKeys:e.fixKeys||[(0,exports.generateFixSnippet)("useCallback",e.name),(0,exports.generateFixSnippet)("memo",e.name)],severity:"optimal"};globalRenderRegistry.set(e.name,a)}notifyRenderListeners()};exports.trackComponentRender=trackComponentRender;const getHermesMemoryStats=()=>{try{const e=globalThis.HermesInternal;if(e&&typeof e.getInstrumentedStats=="function"){const r=e.getInstrumentedStats(),o=Number(((r.js_heap_size||r.heap_size||348e5)/1048576).toFixed(1)),t=Number(((r.js_heap_capacity||r.allocated_bytes||64e6)/1048576).toFixed(1)),n=Number(r.num_gcs||0),a=Number(((r.gc_time_ms||0)/Math.max(1,n)).toFixed(1));return{heapUsedMb:o,heapTotalMb:t,gcCount:n,gcPauseMs:a,allocationRateMbPerSec:1.8}}}catch{}return{heapUsedMb:32.5,heapTotalMb:64,gcCount:0,gcPauseMs:1.5,allocationRateMbPerSec:1.2}};exports.getHermesMemoryStats=getHermesMemoryStats;const trackNavigationTransition=(e,r,o)=>{const t=Math.max(1,Number(r.toFixed(1))),n=o?.ttiMs?Number(o.ttiMs.toFixed(1)):t,a=o?.droppedFrames??(t>32?Math.round((t-16.67)/16.67):0),p=Math.min(60,Math.max(15,Math.round(1e3/Math.max(16.67,t))));return(0,exports.logPerformanceEvent)({type:"transition",category:"navigation",fps:p,durationMs:t,droppedFrames:a,frameTimeMs:t,frameBudgetPct:Number((t/16.67*100).toFixed(0)),bottleneckThread:t>32?"JS Thread":"Balanced",screenName:e,label:(0,i18n_1.t)("performance.transitionEventLabel",{screen:e}),detail:(0,i18n_1.t)("performance.transitionEventDetail",{duration:t,tti:n}),source:o?.source||getCallerSourceFile(e),advice:(0,i18n_1.t)("performance.transitionEventAdvice"),severity:t>50?"critical":t>25?"warning":"optimal"})};exports.trackNavigationTransition=trackNavigationTransition;const useNavigationProfiler=(e,r)=>{const o=(0,react_1.useRef)(Date.now());(0,react_1.useEffect)(()=>{const t=Date.now()-o.current;(0,exports.trackNavigationTransition)(e,t),r?.onTransitionEnd&&r.onTransitionEnd(t)},[e])};exports.useNavigationProfiler=useNavigationProfiler;const trackHeavyTask=(e,r,o)=>{const t=Date.now();try{return r()}finally{const n=Date.now()-t,a=o?.thresholdMs??16;n>=a&&(0,exports.logPerformanceEvent)({type:"slow_render",category:"render",fps:Math.min(60,Math.max(10,Math.round(1e3/n))),durationMs:n,frameTimeMs:n,frameBudgetPct:Number((n/16.67*100).toFixed(0)),bottleneckThread:"JS Thread",screenName:e,label:(0,i18n_1.t)("performance.heavyTaskEventLabel",{taskName:e}),detail:(0,i18n_1.t)("performance.heavyTaskEventDetail",{duration:n}),source:o?.source||getCallerSourceFile(e),advice:(0,i18n_1.t)("performance.heavyTaskEventAdvice"),severity:n>50?"critical":"warning"})}};exports.trackHeavyTask=trackHeavyTask;const measureAsync=async(e,r,o)=>{const t=Date.now();try{return await r()}finally{const n=Date.now()-t,a=o?.thresholdMs??100;n>=a&&(0,exports.logPerformanceEvent)({type:"network",category:"io",fps:60,durationMs:n,bottleneckThread:"Balanced",screenName:e,label:(0,i18n_1.t)("performance.asyncOpEventLabel",{opName:e}),detail:(0,i18n_1.t)("performance.asyncOpEventDetail",{duration:n}),source:o?.source||getCallerSourceFile(e),severity:n>1e3?"critical":n>300?"warning":"optimal"})}};exports.measureAsync=measureAsync;const useComponentProfiler=(e,r)=>{const o=(0,react_1.useRef)(0),t=(0,react_1.useRef)(r?.propsToCompare),n=(0,react_1.useRef)(Date.now()),a=(0,react_1.useRef)([]);n.current=Date.now(),(0,react_1.useEffect)(()=>{const p=Date.now()-n.current,f=Date.now();o.current+=1,a.current=[...a.current.filter(h=>f-h<=500),f],a.current.length>=10&&(0,exports.logPerformanceEvent)({type:"slow_render",category:"render",fps:20,durationMs:p,bottleneckThread:"JS Thread",screenName:e,label:(0,i18n_1.t)("performance.renderLoopWarningLabel",{comp:e}),detail:(0,i18n_1.t)("performance.renderLoopWarningDetail",{comp:e,count:a.current.length}),source:r?.sourceFile||getCallerSourceFile(e),advice:(0,i18n_1.t)("performance.renderLoopWarningAdvice"),severity:"critical"});let g=!1,b;if(o.current>1&&r?.propsToCompare){const h=t.current,M=r.propsToCompare;Object.keys(M).filter(y=>h[y]!==M[y]).length===0&&(g=!0,b="Re-rendered with identical props (memoization candidate)"),t.current=M}(0,exports.trackComponentRender)({name:e,type:r?.type||"component",sourceFile:r?.sourceFile||getCallerSourceFile(e),renderTimeMs:Math.max(.5,p),isWasteful:g,reason:b})})};exports.useComponentProfiler=useComponentProfiler;const usePerformanceTracker=(e=!0)=>{const r=e&&isPerformanceModuleEnabled,[o,t]=(0,react_1.useState)(!0),[n,a]=(0,react_1.useState)(60),[p,f]=(0,react_1.useState)(60),[g,b]=(0,react_1.useState)(60),[h,M]=(0,react_1.useState)(60),[v,F]=(0,react_1.useState)(0),[y,N]=(0,react_1.useState)(0),[S,A]=(0,react_1.useState)(0),[L,$]=(0,react_1.useState)(()=>Array(30).fill(60)),[_,I]=(0,react_1.useState)(()=>(0,exports.getHermesMemoryStats)()),[C,H]=(0,react_1.useState)(()=>(0,exports.getRenderProfiles)()),[E,w]=(0,react_1.useState)(()=>(0,exports.getPerformanceEvents)());(0,react_1.useEffect)(()=>{if(!r)return;const c=(0,exports.subscribeRenderProfiles)(i=>{H(i)}),s=(0,exports.subscribePerformanceEvents)(i=>{w(i)});return()=>{c(),s()}},[r]);const R=(0,react_1.useRef)(Date.now()),P=(0,react_1.useRef)(null),z=(0,react_1.useRef)(Date.now());(0,react_1.useEffect)(()=>{if(!r||!o)return;let c=!0,s=0,i=0,u=Date.now();const d=()=>{if(!c)return;const l=Date.now(),K=l-R.current;R.current=l;const D=Math.max(0,K-16.67);if(D>i&&(i=D),s++,l-u>=1e3){const J=l-u,x=Math.min(60,Math.max(0,Math.round(s*1e3/J)));a(x),f(m=>Math.min(m,x)),b(m=>Math.max(m,x)),F(m=>m+s),A(Number(i.toFixed(1))),x<55&&N(m=>m+1),$(m=>{const k=[...m.slice(-29),x],B=k.reduce((G,O)=>G+O,0);return M(Math.round(B/k.length)),k});const T=(0,exports.getHermesMemoryStats)();if(I(m=>({...m,heapUsedMb:T.heapUsedMb,heapTotalMb:T.heapTotalMb,gcCount:T.gcCount,gcPauseMs:T.gcPauseMs,allocationRateMbPerSec:T.allocationRateMbPerSec})),x<50){const m=Number((1e3/x).toFixed(1));(0,exports.logPerformanceEvent)({type:"fps_drop",category:"render",fps:x,durationMs:m,droppedFrames:Math.max(0,60-x),frameTimeMs:m,frameBudgetPct:Number((m/16.67*100).toFixed(0)),bottleneckThread:i>8?"JS Thread":"UI Thread",screenName:"Live Application Render",label:(0,i18n_1.t)("performance.liveFpsDropLabel",{fps:x}),detail:(0,i18n_1.t)("performance.liveFpsDropDetail",{duration:m}),source:"React Native UI Thread",breakdown:{jsTimeMs:Number((m*.65).toFixed(1)),uiTimeMs:Number((m*.35).toFixed(1))},advice:(0,i18n_1.t)("performance.liveFpsDropAdvice"),severity:x<30?"critical":"warning"})}s=0,i=0,u=l}P.current=requestAnimationFrame(d)};return R.current=Date.now(),P.current=requestAnimationFrame(d),()=>{c=!1,P.current&&cancelAnimationFrame(P.current)}},[o]);const U=(0,react_1.useMemo)(()=>{const c=v>0?Number((y/Math.max(1,v/60)*100).toFixed(1)):0,s=E.filter(l=>l.type==="slow_render").length,i=Math.min(100,Math.max(8,Number((S+12.5).toFixed(1)))),u=Math.max(120,Math.min(500,Math.round(150+s*25)));return{ttiMs:Math.max(280,Math.min(1200,Math.round(u+180+s*40))),fcpMs:u,inpMs:i,jankPercentage:c,grade:c<=2?"Optimal":c<=5?"Fair":"Poor"}},[v,y,S,E]),W=(0,react_1.useMemo)(()=>{const c=C.reduce((d,l)=>d+l.renderCount,0),s=C.reduce((d,l)=>d+l.wastefulCount,0),i=c>0?Number((s/c*100).toFixed(1)):0,u=[...C].sort((d,l)=>l.renderCount-d.renderCount)[0];return{totalRenders:c,totalWasteful:s,overallWastefulPct:i,topOffender:u,totalComponentsTracked:C.length}},[C]),V=()=>{(0,exports.clearPerformanceEvents)()},j=(0,react_1.useCallback)(()=>{globalRenderRegistry.forEach((c,s)=>{globalRenderRegistry.set(s,{...c,renderCount:1,wastefulCount:0,wastefulPercentage:0,totalRenderTimeMs:c.avgRenderTimeMs,lastRenderedAt:Date.now(),severity:"optimal"})}),notifyRenderListeners()},[]),q=(0,react_1.useCallback)(c=>{globalRenderRegistry.forEach((s,i)=>{if(s.id===c||s.name===c){const u=s.renderCount+1,d=s.wastefulCount+1,l=Number((d/u*100).toFixed(1));globalRenderRegistry.set(i,{...s,renderCount:u,wastefulCount:d,wastefulPercentage:l,totalRenderTimeMs:Number((s.totalRenderTimeMs+s.avgRenderTimeMs).toFixed(1)),lastRenderedAt:Date.now(),severity:u>30?"critical":u>15?"warning":"optimal"})}}),notifyRenderListeners()},[]);return{isRecording:o,setIsRecording:t,currentFps:n,minFps:p,maxFps:g,avgFps:h,totalFrames:v,jankyFrameCount:y,jsLagMs:S,fpsHistory:L,memoryStats:_,mobileVitals:U,renderProfiles:C,reRenderSummary:W,resetRenderCounters:j,simulateComponentRender:q,events:E,setEvents:w,clearEvents:V,triggerGc:()=>{try{typeof globalThis.gc=="function"&&globalThis.gc()}catch{}const c=Number((4.5+Math.random()*3.5).toFixed(1)),s=Math.round(c*1024);I(i=>({...i,heapUsedMb:Math.max(18,Number((i.heapUsedMb-c).toFixed(1))),gcCount:i.gcCount+1,gcPauseMs:Number((1.2+Math.random()*.9).toFixed(1))})),(0,exports.logPerformanceEvent)({type:"memory",category:"memory",fps:60,durationMs:Number((1.6+Math.random()*.8).toFixed(1)),label:(0,i18n_1.t)("performance.gcCycleLabel"),detail:(0,i18n_1.t)("performance.gcCycleDetail",{amount:c}),source:"Hermes JavaScript VM Scavenger",breakdown:{jsTimeMs:1.8,uiTimeMs:.3},heapDeltaKb:-s,advice:(0,i18n_1.t)("performance.gcCycleAdvice"),severity:"optimal"})}}};exports.usePerformanceTracker=usePerformanceTracker;const globalPerformanceEvents=[...exports.INITIAL_EVENTS],performanceListeners=new Set;let maxPerformanceEventsLimit=100;const setMaxPerformanceEventsLimit=e=>{maxPerformanceEventsLimit=Math.max(10,e),globalPerformanceEvents.length>maxPerformanceEventsLimit&&(globalPerformanceEvents.length=maxPerformanceEventsLimit,performanceListeners.forEach(r=>{try{r([...globalPerformanceEvents])}catch{}}))};exports.setMaxPerformanceEventsLimit=setMaxPerformanceEventsLimit;const getMaxPerformanceEventsLimit=()=>maxPerformanceEventsLimit;exports.getMaxPerformanceEventsLimit=getMaxPerformanceEventsLimit;const prunePerformanceEvents=e=>{const r=e!==void 0?Math.max(0,e):Math.floor(globalPerformanceEvents.length/2),o=globalPerformanceEvents.length-r;return o>0&&(globalPerformanceEvents.length=r,performanceListeners.forEach(t=>{try{t([...globalPerformanceEvents])}catch{}})),Math.max(0,o)};exports.prunePerformanceEvents=prunePerformanceEvents;const logPerformanceEvent=e=>{const r={id:e.id||`perf-${Date.now()}-${Math.random().toString(36).substring(2,6)}`,timestamp:e.timestamp||Date.now(),source:e.source||getCallerSourceFile(),...e};return globalPerformanceEvents.unshift(r),globalPerformanceEvents.length>maxPerformanceEventsLimit&&(globalPerformanceEvents.length=maxPerformanceEventsLimit),performanceListeners.forEach(o=>{try{o([...globalPerformanceEvents])}catch{}}),r};exports.logPerformanceEvent=logPerformanceEvent;const clearPerformanceEvents=()=>{globalPerformanceEvents.length=0,performanceListeners.forEach(e=>{try{e([])}catch{}})};exports.clearPerformanceEvents=clearPerformanceEvents;const subscribePerformanceEvents=e=>(performanceListeners.add(e),e([...globalPerformanceEvents]),()=>{performanceListeners.delete(e)});exports.subscribePerformanceEvents=subscribePerformanceEvents;const getPerformanceEvents=()=>[...globalPerformanceEvents];exports.getPerformanceEvents=getPerformanceEvents;
@@ -1,2 +0,0 @@
1
- export { usePerformanceTracker, useComponentProfiler, useNavigationProfiler, trackComponentRender, trackNavigationTransition, trackHeavyTask, measureAsync, getHermesMemoryStats, registerComponentProfile, subscribeRenderProfiles, getRenderProfiles, logPerformanceEvent, clearPerformanceEvents, subscribePerformanceEvents, getPerformanceEvents, getInitialRenderProfiles, getInitialPerformanceEvents, generateFixSnippet, setPerformanceModuleEnabled, getPerformanceModuleEnabled, setMaxPerformanceEventsLimit, getMaxPerformanceEventsLimit, prunePerformanceEvents, type PerformanceEvent, type LiveMemoryStats, type ComponentRenderProfile, type CoreMobileVitals, type PerformanceFixKey, } from './customHooks/performanceTracker';
2
- export { PerformanceSubTab, } from './types';
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.PerformanceSubTab=exports.prunePerformanceEvents=exports.getMaxPerformanceEventsLimit=exports.setMaxPerformanceEventsLimit=exports.getPerformanceModuleEnabled=exports.setPerformanceModuleEnabled=exports.generateFixSnippet=exports.getInitialPerformanceEvents=exports.getInitialRenderProfiles=exports.getPerformanceEvents=exports.subscribePerformanceEvents=exports.clearPerformanceEvents=exports.logPerformanceEvent=exports.getRenderProfiles=exports.subscribeRenderProfiles=exports.registerComponentProfile=exports.getHermesMemoryStats=exports.measureAsync=exports.trackHeavyTask=exports.trackNavigationTransition=exports.trackComponentRender=exports.useNavigationProfiler=exports.useComponentProfiler=exports.usePerformanceTracker=void 0;var performanceTracker_1=require("./customHooks/performanceTracker");Object.defineProperty(exports,"usePerformanceTracker",{enumerable:!0,get:function(){return performanceTracker_1.usePerformanceTracker}}),Object.defineProperty(exports,"useComponentProfiler",{enumerable:!0,get:function(){return performanceTracker_1.useComponentProfiler}}),Object.defineProperty(exports,"useNavigationProfiler",{enumerable:!0,get:function(){return performanceTracker_1.useNavigationProfiler}}),Object.defineProperty(exports,"trackComponentRender",{enumerable:!0,get:function(){return performanceTracker_1.trackComponentRender}}),Object.defineProperty(exports,"trackNavigationTransition",{enumerable:!0,get:function(){return performanceTracker_1.trackNavigationTransition}}),Object.defineProperty(exports,"trackHeavyTask",{enumerable:!0,get:function(){return performanceTracker_1.trackHeavyTask}}),Object.defineProperty(exports,"measureAsync",{enumerable:!0,get:function(){return performanceTracker_1.measureAsync}}),Object.defineProperty(exports,"getHermesMemoryStats",{enumerable:!0,get:function(){return performanceTracker_1.getHermesMemoryStats}}),Object.defineProperty(exports,"registerComponentProfile",{enumerable:!0,get:function(){return performanceTracker_1.registerComponentProfile}}),Object.defineProperty(exports,"subscribeRenderProfiles",{enumerable:!0,get:function(){return performanceTracker_1.subscribeRenderProfiles}}),Object.defineProperty(exports,"getRenderProfiles",{enumerable:!0,get:function(){return performanceTracker_1.getRenderProfiles}}),Object.defineProperty(exports,"logPerformanceEvent",{enumerable:!0,get:function(){return performanceTracker_1.logPerformanceEvent}}),Object.defineProperty(exports,"clearPerformanceEvents",{enumerable:!0,get:function(){return performanceTracker_1.clearPerformanceEvents}}),Object.defineProperty(exports,"subscribePerformanceEvents",{enumerable:!0,get:function(){return performanceTracker_1.subscribePerformanceEvents}}),Object.defineProperty(exports,"getPerformanceEvents",{enumerable:!0,get:function(){return performanceTracker_1.getPerformanceEvents}}),Object.defineProperty(exports,"getInitialRenderProfiles",{enumerable:!0,get:function(){return performanceTracker_1.getInitialRenderProfiles}}),Object.defineProperty(exports,"getInitialPerformanceEvents",{enumerable:!0,get:function(){return performanceTracker_1.getInitialPerformanceEvents}}),Object.defineProperty(exports,"generateFixSnippet",{enumerable:!0,get:function(){return performanceTracker_1.generateFixSnippet}}),Object.defineProperty(exports,"setPerformanceModuleEnabled",{enumerable:!0,get:function(){return performanceTracker_1.setPerformanceModuleEnabled}}),Object.defineProperty(exports,"getPerformanceModuleEnabled",{enumerable:!0,get:function(){return performanceTracker_1.getPerformanceModuleEnabled}}),Object.defineProperty(exports,"setMaxPerformanceEventsLimit",{enumerable:!0,get:function(){return performanceTracker_1.setMaxPerformanceEventsLimit}}),Object.defineProperty(exports,"getMaxPerformanceEventsLimit",{enumerable:!0,get:function(){return performanceTracker_1.getMaxPerformanceEventsLimit}}),Object.defineProperty(exports,"prunePerformanceEvents",{enumerable:!0,get:function(){return performanceTracker_1.prunePerformanceEvents}});var types_1=require("./types");Object.defineProperty(exports,"PerformanceSubTab",{enumerable:!0,get:function(){return types_1.PerformanceSubTab}});
@@ -1,2 +0,0 @@
1
- export { analyzeHostAppBundle, parseBundleSource, getInitialBundleAnalysis, getCachedBundleAnalysis, clearCachedBundleAnalysis, setBundleModuleEnabled, getBundleModuleEnabled, getHostScriptURL, trackRuntimeModuleExecution, trackRuntimeDefine, type HostBundleAnalysisResult, type HostBundleFileItem, type HostBundlePackageItem, type HostBinaryComponentItem, type FileTypeCategory, } from './customHooks/bundleAnalyzer';
2
- export { BundleSubTab, } from './types';
@@ -1 +0,0 @@
1
- export{analyzeHostAppBundle,parseBundleSource,getInitialBundleAnalysis,getCachedBundleAnalysis,clearCachedBundleAnalysis,setBundleModuleEnabled,getBundleModuleEnabled,getHostScriptURL,trackRuntimeModuleExecution,trackRuntimeDefine}from"./customHooks/bundleAnalyzer";export{BundleSubTab}from"./types";
@@ -1,48 +0,0 @@
1
- import React from 'react';
2
- export type BundleSubTab = 'overview' | 'production' | 'files' | 'packages' | 'media' | 'optimizer';
3
- export type FileTypeCategory = 'image' | 'typescript' | 'javascript' | 'font' | 'json';
4
- export interface BundleFileItem {
5
- id: string;
6
- name: string;
7
- path: string;
8
- ext: string;
9
- category: FileTypeCategory;
10
- sizeKb: number;
11
- meta: string;
12
- color: string;
13
- status?: 'optimal' | 'warning' | 'info';
14
- advice?: string;
15
- previewUri?: string;
16
- isConsumed?: boolean;
17
- }
18
- export interface BundlePackageItem {
19
- id: string;
20
- name: string;
21
- version: string;
22
- sizeKb: number;
23
- percentage: number;
24
- type: 'direct' | 'peer' | 'transitive';
25
- category: 'core' | 'navigation' | 'network' | 'ui' | 'utils';
26
- color: string;
27
- description: string;
28
- logoUri?: string;
29
- latestVersion?: string;
30
- isDeprecated?: boolean;
31
- deprecationReason?: string;
32
- lastActive?: string;
33
- npmUrl?: string;
34
- }
35
- export type BundleIconType = 'source' | 'deps' | 'media' | 'overhead' | 'image' | 'typescript' | 'javascript' | 'font' | 'json' | 'folder' | 'ban' | 'bolt';
36
- export interface TreeNode {
37
- id: string;
38
- name: string;
39
- fullPath: string;
40
- isFolder: boolean;
41
- fileItem?: BundleFileItem;
42
- sizeKb: number;
43
- fileCount: number;
44
- children: TreeNode[];
45
- }
46
- export declare const downloadBundleFile: (file: BundleFileItem, scriptURL?: string) => Promise<void>;
47
- declare const BundleTab: React.MemoExoticComponent<() => React.JSX.Element>;
48
- export default BundleTab;