react-native-inapp-inspector 1.1.21 → 1.1.23

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 (49) hide show
  1. package/dist/commonjs/components/AnalyticsDetail.js +5 -3
  2. package/dist/commonjs/components/AnalyticsEventCard.d.ts +0 -1
  3. package/dist/commonjs/components/AnalyticsEventCard.js +89 -97
  4. package/dist/commonjs/components/ErrorBoundary.js +17 -8
  5. package/dist/commonjs/components/Inspector/BundleTab.d.ts +1 -0
  6. package/dist/commonjs/components/Inspector/BundleTab.js +607 -685
  7. package/dist/commonjs/components/Inspector/LogDetail.js +12 -6
  8. package/dist/commonjs/components/Inspector/PerformanceTab.js +195 -254
  9. package/dist/commonjs/components/Inspector/ReduxDetail.js +2 -2
  10. package/dist/commonjs/components/Inspector/ReduxTab.js +9 -6
  11. package/dist/commonjs/components/NetworkIcons.d.ts +12 -0
  12. package/dist/commonjs/components/NetworkIcons.js +92 -1
  13. package/dist/commonjs/components/TreeNode.js +1 -1
  14. package/dist/commonjs/constants/version.d.ts +1 -1
  15. package/dist/commonjs/constants/version.js +1 -1
  16. package/dist/commonjs/customHooks/bundleAnalyzer.d.ts +115 -0
  17. package/dist/commonjs/customHooks/bundleAnalyzer.js +561 -0
  18. package/dist/commonjs/customHooks/performanceTracker.d.ts +84 -0
  19. package/dist/commonjs/customHooks/performanceTracker.js +541 -0
  20. package/dist/commonjs/helpers/index.d.ts +15 -0
  21. package/dist/commonjs/helpers/index.js +112 -1
  22. package/dist/commonjs/i18n/locales/en.json +225 -2
  23. package/dist/commonjs/styles/AppColors.d.ts +110 -0
  24. package/dist/commonjs/styles/AppColors.js +114 -0
  25. package/dist/esm/components/AnalyticsDetail.js +5 -3
  26. package/dist/esm/components/AnalyticsEventCard.d.ts +0 -1
  27. package/dist/esm/components/AnalyticsEventCard.js +89 -96
  28. package/dist/esm/components/ErrorBoundary.js +17 -8
  29. package/dist/esm/components/Inspector/BundleTab.d.ts +1 -0
  30. package/dist/esm/components/Inspector/BundleTab.js +612 -690
  31. package/dist/esm/components/Inspector/LogDetail.js +13 -7
  32. package/dist/esm/components/Inspector/PerformanceTab.js +196 -255
  33. package/dist/esm/components/Inspector/ReduxDetail.js +2 -2
  34. package/dist/esm/components/Inspector/ReduxTab.js +10 -7
  35. package/dist/esm/components/NetworkIcons.d.ts +12 -0
  36. package/dist/esm/components/NetworkIcons.js +79 -0
  37. package/dist/esm/components/TreeNode.js +2 -2
  38. package/dist/esm/constants/version.d.ts +1 -1
  39. package/dist/esm/constants/version.js +1 -1
  40. package/dist/esm/customHooks/bundleAnalyzer.d.ts +115 -0
  41. package/dist/esm/customHooks/bundleAnalyzer.js +554 -0
  42. package/dist/esm/customHooks/performanceTracker.d.ts +84 -0
  43. package/dist/esm/customHooks/performanceTracker.js +537 -0
  44. package/dist/esm/helpers/index.d.ts +15 -0
  45. package/dist/esm/helpers/index.js +107 -0
  46. package/dist/esm/i18n/locales/en.json +225 -2
  47. package/dist/esm/styles/AppColors.d.ts +110 -0
  48. package/dist/esm/styles/AppColors.js +114 -0
  49. package/package.json +1 -1
@@ -332,7 +332,7 @@ const reduxDetailStyles = StyleSheet.create({
332
332
  paddingVertical: 2,
333
333
  borderRadius: 4,
334
334
  borderWidth: 1,
335
- borderColor: '#A7F3D0',
335
+ borderColor: AppColors.emeraldBorder,
336
336
  },
337
337
  persistedChipText: {
338
338
  fontFamily: AppFonts.interBold,
@@ -503,7 +503,7 @@ const reduxDetailStyles = StyleSheet.create({
503
503
  alignItems: 'center',
504
504
  justifyContent: 'center',
505
505
  gap: 6,
506
- backgroundColor: '#FEF2F2',
506
+ backgroundColor: AppColors.errorCardBg,
507
507
  borderWidth: 1,
508
508
  borderColor: '#FEE2E2',
509
509
  borderRadius: 8,
@@ -10,7 +10,7 @@ import { getSize } from '../../helpers';
10
10
  import styles from '../../styles';
11
11
  import { AppColors } from '../../styles/AppColors';
12
12
  import { AppFonts } from '../../styles/AppFonts';
13
- import { TerminalIcon, SearchIcon, ClearIcon, ClockIcon, ForwardChevronIcon, SortArrowIcon, } from '../NetworkIcons';
13
+ import { TerminalIcon, SearchIcon, ClearIcon, ClockIcon, ForwardChevronIcon, SortArrowIcon, BoltIcon, TextAaIcon, } from '../NetworkIcons';
14
14
  const ReduxTab = React.memo(() => {
15
15
  const { reduxState, reduxLastActionMap, reduxSearch, setReduxSearch, setSelectedReduxSlice, } = useInspector();
16
16
  // Sort mode: 'latest' (newest updated first) vs 'alpha' (A-Z)
@@ -183,9 +183,12 @@ const ReduxTab = React.memo(() => {
183
183
  <Text style={reduxTabStyles.resultCount}>
184
184
  Showing {filteredSlices.length} of {sliceItems.length} state slices
185
185
  </Text>
186
- <Text style={reduxTabStyles.sortLabel}>
187
- {sortMode === 'latest' ? '⚡ Newest Updates First' : '🔤 Alphabetical (A-Z)'}
188
- </Text>
186
+ <View style={{ flexDirection: 'row', alignItems: 'center', gap: 4 }}>
187
+ {sortMode === 'latest' ? (<BoltIcon color={AppColors.brandPurple} size={11}/>) : (<TextAaIcon color={AppColors.brandPurple} size={11}/>)}
188
+ <Text style={reduxTabStyles.sortLabel}>
189
+ {sortMode === 'latest' ? 'Newest Updates First' : 'Alphabetical (A-Z)'}
190
+ </Text>
191
+ </View>
189
192
  </View>
190
193
  </View>
191
194
 
@@ -371,18 +374,18 @@ const reduxTabStyles = StyleSheet.create({
371
374
  flexDirection: 'row',
372
375
  alignItems: 'center',
373
376
  gap: 4,
374
- backgroundColor: '#ECFDF5',
377
+ backgroundColor: AppColors.emeraldBg,
375
378
  paddingHorizontal: 6,
376
379
  paddingVertical: 3,
377
380
  borderRadius: 5,
378
381
  borderWidth: 1,
379
- borderColor: '#A7F3D0',
382
+ borderColor: AppColors.emeraldBorder,
380
383
  },
381
384
  liveDot: {
382
385
  width: 6,
383
386
  height: 6,
384
387
  borderRadius: 3,
385
- backgroundColor: '#10B981',
388
+ backgroundColor: AppColors.emerald500,
386
389
  },
387
390
  livePillText: {
388
391
  fontFamily: AppFonts.interBold,
@@ -66,3 +66,15 @@ export declare const StorageIcon: ({ color, size, }: any) => React.JSX.Element;
66
66
  export declare const MetadataIcon: ({ color, size, }: any) => React.JSX.Element;
67
67
  export declare const ReduxIcon: ({ color, size, }: any) => React.JSX.Element;
68
68
  export declare const PerformanceIcon: ({ color, size, }: any) => React.JSX.Element;
69
+ export declare const BoltIcon: ({ color, size }: any) => React.JSX.Element;
70
+ export declare const BanIcon: ({ color, size }: any) => React.JSX.Element;
71
+ export declare const FolderOpenIcon: ({ color, size }: any) => React.JSX.Element;
72
+ export declare const DocIcon: ({ color, size }: any) => React.JSX.Element;
73
+ export declare const LightbulbIcon: ({ color, size }: any) => React.JSX.Element;
74
+ export declare const SparkleIcon: ({ color, size }: any) => React.JSX.Element;
75
+ export declare const MapIcon: ({ color, size }: any) => React.JSX.Element;
76
+ export declare const AtomIcon: ({ color, size }: any) => React.JSX.Element;
77
+ export declare const BrainIcon: ({ color, size }: any) => React.JSX.Element;
78
+ export declare const TextAaIcon: ({ color, size }: any) => React.JSX.Element;
79
+ export declare const CartIcon: ({ color, size }: any) => React.JSX.Element;
80
+ export declare const MoneyIcon: ({ color, size }: any) => React.JSX.Element;
@@ -402,3 +402,82 @@ export const PerformanceIcon = ({ color = AppColors.purple, size = 14, }) => {
402
402
  <Circle cx="12" cy="12" r="1.5" fill={color}/>
403
403
  </Svg>);
404
404
  };
405
+ // ─── App-wide Vector Icons (emoji-free, render on every device) ─────────────
406
+ export const BoltIcon = ({ color = AppColors.amber500, size = 14 }) => {
407
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
408
+ <Path d="M13 2 4.5 13.5 H10.5 L9 22 19.5 9.5 H13.5 Z" stroke={color} strokeWidth="1.8" strokeLinejoin="round"/>
409
+ </Svg>);
410
+ };
411
+ export const BanIcon = ({ color = AppColors.errorColor, size = 14 }) => {
412
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
413
+ <Circle cx="12" cy="12" r="8.5" stroke={color} strokeWidth="1.8"/>
414
+ <Path d="M5.5 5.5 18.5 18.5" stroke={color} strokeWidth="1.8" strokeLinecap="round"/>
415
+ </Svg>);
416
+ };
417
+ export const FolderOpenIcon = ({ color = AppColors.amber500, size = 14 }) => {
418
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
419
+ <Path d="M8.4 11 10 5.5a2 2 0 0 1 1.9-1.5h3.7a1.5 1.5 0 0 1 1.4 2L15.5 11" stroke={color} strokeWidth="1.8" strokeLinejoin="round"/>
420
+ <Path d="M6.7 20.4 4.3 12.9A1.6 1.6 0 0 1 5.8 11h14.6a1.6 1.6 0 0 1 1.6 1.9l-2.4 7.5a2 2 0 0 1-2 1.4H8.7a2 2 0 0 1-2-1.4Z" stroke={color} strokeWidth="1.8" strokeLinejoin="round"/>
421
+ </Svg>);
422
+ };
423
+ export const DocIcon = ({ color = AppColors.grayTextWeak, size = 14 }) => {
424
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
425
+ <Path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z" stroke={color} strokeWidth="1.8" strokeLinejoin="round"/>
426
+ <Path d="M14 2v4a2 2 0 0 0 2 2h4" stroke={color} strokeWidth="1.8" strokeLinejoin="round"/>
427
+ <Path d="M8 13h8 M8 17h8" stroke={color} strokeWidth="1.8" strokeLinecap="round"/>
428
+ </Svg>);
429
+ };
430
+ export const LightbulbIcon = ({ color = AppColors.amber500, size = 14 }) => {
431
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
432
+ <Path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1.3.5 2.6 1.5 3.5.8.8 1.3 1.5 1.5 2.5" stroke={color} strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"/>
433
+ <Path d="M9 18h6" stroke={color} strokeWidth="1.8" strokeLinecap="round"/>
434
+ <Path d="M10 22h4" stroke={color} strokeWidth="1.8" strokeLinecap="round"/>
435
+ </Svg>);
436
+ };
437
+ export const SparkleIcon = ({ color = AppColors.amber500, size = 14 }) => {
438
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
439
+ <Path d="M11.1 3.9c.2-.6 1-.6 1.2 0l1.2 4.2 4.2 1.2c.6.2.6 1 0 1.2l-4.2 1.2-1.2 4.2c-.2.6-1 .6-1.2 0l-1.2-4.2-4.2-1.2c-.6-.2-.6-1 0-1.2l4.2-1.2Z" fill={color}/>
440
+ <Path d="M18.5 3.5v4 M16.5 5.5h4" stroke={color} strokeWidth="1.8" strokeLinecap="round"/>
441
+ </Svg>);
442
+ };
443
+ export const MapIcon = ({ color = AppColors.grayTextWeak, size = 14 }) => {
444
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
445
+ <Path d="M3 5.5 9 3.5l6 2 6-2v15l-6 2-6-2-6 2Z" stroke={color} strokeWidth="1.8" strokeLinejoin="round"/>
446
+ <Path d="M9 3.5v15M15 5.5v15" stroke={color} strokeWidth="1.8"/>
447
+ <Circle cx="12" cy="11" r="1.9" stroke={color} strokeWidth="1.6"/>
448
+ </Svg>);
449
+ };
450
+ export const AtomIcon = ({ color = AppColors.grayTextWeak, size = 14 }) => {
451
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
452
+ <Ellipse cx="12" cy="12" rx="9" ry="3.8" stroke={color} strokeWidth="1.6"/>
453
+ <Ellipse cx="12" cy="12" rx="9" ry="3.8" stroke={color} strokeWidth="1.6" transform="rotate(60 12 12)"/>
454
+ <Ellipse cx="12" cy="12" rx="9" ry="3.8" stroke={color} strokeWidth="1.6" transform="rotate(120 12 12)"/>
455
+ <Circle cx="12" cy="12" r="1.6" fill={color}/>
456
+ </Svg>);
457
+ };
458
+ export const BrainIcon = ({ color = AppColors.grayTextWeak, size = 14 }) => {
459
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
460
+ <Path d="M9.5 2a2.5 2.5 0 0 0-2.5 2.5v.5a2.5 2.5 0 0 0-3 3.17A2.5 2.5 0 0 0 2 10.5c0 .76.34 1.44.88 1.9A2.5 2.5 0 0 0 2 15.5c0 .76.34 1.44.88 1.9A2.5 2.5 0 0 0 5 19.75c0 .75.5 1.5 1.25 1.75A2.5 2.5 0 0 0 8.5 23h.25a2.5 2.5 0 0 0 2.5-2.5V4a2.5 2.5 0 0 0-1.75-2ZM14.5 2a2.5 2.5 0 0 1 2.5 2.5v.5a2.5 2.5 0 0 1 3 3.17A2.5 2.5 0 0 1 22 10.5c0 .76-.34 1.44-.88 1.9a2.5 2.5 0 0 1 .88 1.9c0 .76-.34 1.44-.88 1.9A2.5 2.5 0 0 1 19 19.75c0 .75-.5 1.5-1.25 1.75A2.5 2.5 0 0 1 15.5 23h-.25a2.5 2.5 0 0 1-2.5-2.5V4a2.5 2.5 0 0 1 1.75-2Z" stroke={color} strokeWidth="1.6" strokeLinejoin="round"/>
461
+ </Svg>);
462
+ };
463
+ export const TextAaIcon = ({ color = AppColors.grayTextWeak, size = 14 }) => {
464
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
465
+ <Path d="M4 19 7.5 7 11 19" stroke={color} strokeWidth="1.8" strokeLinejoin="round"/>
466
+ <Path d="M5.5 15h4" stroke={color} strokeWidth="1.8" strokeLinecap="round"/>
467
+ <Path d="M16 19l1.7-6.6 1.7 6.6" stroke={color} strokeWidth="1.8" strokeLinejoin="round"/>
468
+ <Path d="M16.9 15.8h1.6" stroke={color} strokeWidth="1.8" strokeLinecap="round"/>
469
+ </Svg>);
470
+ };
471
+ export const CartIcon = ({ color = AppColors.amber500, size = 14 }) => {
472
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
473
+ <Circle cx="9.5" cy="20" r="1.3" stroke={color} strokeWidth="1.8"/>
474
+ <Circle cx="18.5" cy="20" r="1.3" stroke={color} strokeWidth="1.8"/>
475
+ <Path d="M3 3.5h1.8a1 1 0 0 1 .97.75l3.1 9.75a1.5 1.5 0 0 0 1.44 1.1h9.2a1 1 0 0 0 .95-.7l2.5-7.5a.8.8 0 0 0-.75-1.05H7" stroke={color} strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"/>
476
+ </Svg>);
477
+ };
478
+ export const MoneyIcon = ({ color = AppColors.emerald500, size = 14 }) => {
479
+ return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
480
+ <Circle cx="12" cy="12" r="8.5" stroke={color} strokeWidth="1.8"/>
481
+ <Path d="M12 7v10M14.5 9.5c-.6-1-1.5-1.5-2.5-1.5-1.5 0-2.5.9-2.5 2s1 1.8 2.5 2 2.5.8 2.5 2-1 2-2.5 2c-1 0-1.9-.5-2.5-1.5" stroke={color} strokeWidth="1.8" strokeLinecap="round"/>
482
+ </Svg>);
483
+ };
@@ -3,7 +3,7 @@ import { Text, View, Image, Animated, Pressable } from 'react-native';
3
3
  // Helpers
4
4
  import { escapeRegex } from '../helpers';
5
5
  // Assets
6
- import { ChevronIcon } from './NetworkIcons';
6
+ import { ChevronIcon, DocIcon } from './NetworkIcons';
7
7
  // Stylesheet
8
8
  import { AppColors } from '../styles/AppColors';
9
9
  import styles from '../styles';
@@ -43,7 +43,7 @@ const TreeNode = React.memo(function TreeNode({ data, name, level = 0, search, f
43
43
  {name !== undefined && (<Text style={[styles.codeKey, { marginBottom: 4 }]}>{`"${String(name)}": `}</Text>)}
44
44
  <View style={styles.filePreviewCard}>
45
45
  {isImage ? (<Image source={{ uri: file.uri }} style={styles.filePreviewThumb} resizeMode="cover"/>) : (<View style={styles.filePreviewDoc}>
46
- <Text style={{ fontSize: 20 }}>📄</Text>
46
+ <DocIcon color={AppColors.grayTextWeak} size={20}/>
47
47
  </View>)}
48
48
  <View style={{ flex: 1 }}>
49
49
  <Text style={styles.filePreviewName} numberOfLines={1}>
@@ -1 +1 @@
1
- export declare const LIB_VERSION = "1.1.21";
1
+ export declare const LIB_VERSION = "1.1.23";
@@ -1,3 +1,3 @@
1
1
  // AUTO-GENERATED FILE — do not edit by hand.
2
2
  // Regenerated from package.json on every build by scripts/gen-version.js.
3
- export const LIB_VERSION = '1.1.21';
3
+ export const LIB_VERSION = '1.1.23';
@@ -0,0 +1,115 @@
1
+ export type FileTypeCategory = 'image' | 'typescript' | 'javascript' | 'font' | 'json';
2
+ export interface HostBundleFileItem {
3
+ id: string;
4
+ name: string;
5
+ path: string;
6
+ ext: string;
7
+ category: FileTypeCategory;
8
+ sizeKb: number;
9
+ meta: string;
10
+ color: string;
11
+ status?: 'optimal' | 'warning' | 'info';
12
+ advice?: string;
13
+ isConsumed?: boolean;
14
+ previewUri?: string;
15
+ }
16
+ export interface HostBundlePackageItem {
17
+ id: string;
18
+ name: string;
19
+ version: string;
20
+ latestVersion?: string;
21
+ sizeKb: number;
22
+ percentage: number;
23
+ type: 'direct' | 'peer' | 'transitive';
24
+ isDirectDefined?: boolean;
25
+ parentPackageName?: string;
26
+ subpackages?: HostBundlePackageItem[];
27
+ category: 'core' | 'navigation' | 'network' | 'ui' | 'utils';
28
+ color: string;
29
+ description: string;
30
+ npmUrl?: string;
31
+ isDeprecated?: boolean;
32
+ deprecationReason?: string;
33
+ lastActive?: string;
34
+ }
35
+ export interface HostBinaryComponentItem {
36
+ id: string;
37
+ name: string;
38
+ category: 'js' | 'native' | 'frameworks' | 'assets' | 'meta';
39
+ sizeMb: number;
40
+ pct: number;
41
+ color: string;
42
+ description: string;
43
+ advice: string;
44
+ }
45
+ export interface HostBundleAnalysisResult {
46
+ isLive: boolean;
47
+ scriptURL: string;
48
+ totalDevBytes: number;
49
+ totalDevMb: number;
50
+ totalDevKb: number;
51
+ isHermes: boolean;
52
+ moduleCount: number;
53
+ packageCount: number;
54
+ filesCount: number;
55
+ splitUp: {
56
+ appSource: {
57
+ kb: number;
58
+ mb: number;
59
+ pct: number;
60
+ };
61
+ nodeModules: {
62
+ kb: number;
63
+ mb: number;
64
+ pct: number;
65
+ };
66
+ assetsMedia: {
67
+ kb: number;
68
+ mb: number;
69
+ pct: number;
70
+ };
71
+ metroDevOverhead: {
72
+ kb: number;
73
+ mb: number;
74
+ pct: number;
75
+ };
76
+ };
77
+ files: HostBundleFileItem[];
78
+ packages: HostBundlePackageItem[];
79
+ production: {
80
+ ios: {
81
+ totalInstallMb: number;
82
+ totalDownloadMb: number;
83
+ compressionRatioPct: number;
84
+ components: HostBinaryComponentItem[];
85
+ };
86
+ androidAab: {
87
+ totalInstallMb: number;
88
+ totalDownloadMb: number;
89
+ compressionRatioPct: number;
90
+ components: HostBinaryComponentItem[];
91
+ };
92
+ androidApk: {
93
+ totalInstallMb: number;
94
+ totalDownloadMb: number;
95
+ compressionRatioPct: number;
96
+ components: HostBinaryComponentItem[];
97
+ };
98
+ android: {
99
+ totalInstallMb: number;
100
+ totalDownloadMb: number;
101
+ compressionRatioPct: number;
102
+ components: HostBinaryComponentItem[];
103
+ };
104
+ };
105
+ }
106
+ export declare const getHostScriptURL: () => string;
107
+ /**
108
+ * Parses raw Metro bundle source code to discover real modules and packages in the host app.
109
+ */
110
+ export declare const parseBundleSource: (bundleText: string, totalBytes: number, scriptURL: string) => HostBundleAnalysisResult;
111
+ /**
112
+ * Automatically fetch and analyze the real running bundle for the host app.
113
+ */
114
+ export declare const analyzeHostAppBundle: () => Promise<HostBundleAnalysisResult>;
115
+ export declare const getCachedBundleAnalysis: () => HostBundleAnalysisResult | null;