react-native-inapp-inspector 2.2.2 → 2.2.4

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 (159) hide show
  1. package/dist/commonjs/components/AnalyticsDetail.js +5 -1
  2. package/dist/commonjs/components/AnalyticsEventCard.js +2 -1
  3. package/dist/commonjs/components/DiffViewer.js +1 -1
  4. package/dist/commonjs/components/Inspector/BundleTab.js +22 -0
  5. package/dist/commonjs/components/Inspector/DeviceInfoTab.d.ts +3 -0
  6. package/dist/commonjs/components/Inspector/DeviceInfoTab.js +835 -0
  7. package/dist/commonjs/components/Inspector/InspectorHeader.js +12 -14
  8. package/dist/commonjs/components/Inspector/LogDetail.js +6 -3
  9. package/dist/commonjs/components/Inspector/MainScreen.js +7 -3
  10. package/dist/commonjs/components/Inspector/NetworkTab.js +92 -15
  11. package/dist/commonjs/components/Inspector/PerformanceTab.js +38 -12
  12. package/dist/commonjs/components/Inspector/SettingsPanel.js +440 -229
  13. package/dist/commonjs/components/Inspector/StorageTab.d.ts +3 -0
  14. package/dist/commonjs/components/Inspector/StorageTab.js +892 -0
  15. package/dist/commonjs/components/Inspector/TabBar.js +14 -0
  16. package/dist/commonjs/components/Inspector/TelemetryConsentModal.js +11 -2
  17. package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +4 -1
  18. package/dist/commonjs/components/NetworkIcons.d.ts +6 -0
  19. package/dist/commonjs/components/NetworkIcons.js +30 -1
  20. package/dist/commonjs/constants/version.d.ts +1 -1
  21. package/dist/commonjs/constants/version.js +1 -1
  22. package/dist/commonjs/customHooks/bundleAnalyzer.js +44 -22
  23. package/dist/commonjs/customHooks/storageInspector.d.ts +67 -0
  24. package/dist/commonjs/customHooks/storageInspector.js +486 -0
  25. package/dist/commonjs/i18n/locales/en.json +8 -2
  26. package/dist/commonjs/index.d.ts +1 -0
  27. package/dist/commonjs/index.js +16 -1
  28. package/dist/commonjs/storage.d.ts +5 -0
  29. package/dist/commonjs/storage.js +18 -0
  30. package/dist/commonjs/types/enums.d.ts +5 -0
  31. package/dist/commonjs/types/enums.js +5 -0
  32. package/dist/esm/components/AnalyticsDetail.js +6 -2
  33. package/dist/esm/components/AnalyticsEventCard.js +2 -1
  34. package/dist/esm/components/DiffViewer.js +1 -1
  35. package/dist/esm/components/Inspector/BundleTab.js +22 -0
  36. package/dist/esm/components/Inspector/DeviceInfoTab.d.ts +3 -0
  37. package/dist/esm/components/Inspector/DeviceInfoTab.js +796 -0
  38. package/dist/esm/components/Inspector/InspectorHeader.js +13 -15
  39. package/dist/esm/components/Inspector/LogDetail.js +7 -4
  40. package/dist/esm/components/Inspector/MainScreen.js +7 -3
  41. package/dist/esm/components/Inspector/NetworkTab.js +93 -16
  42. package/dist/esm/components/Inspector/PerformanceTab.js +39 -13
  43. package/dist/esm/components/Inspector/SettingsPanel.js +441 -230
  44. package/dist/esm/components/Inspector/StorageTab.d.ts +3 -0
  45. package/dist/esm/components/Inspector/StorageTab.js +853 -0
  46. package/dist/esm/components/Inspector/TabBar.js +15 -1
  47. package/dist/esm/components/Inspector/TelemetryConsentModal.js +11 -2
  48. package/dist/esm/components/Inspector/UpdateAvailableModal.js +4 -1
  49. package/dist/esm/components/NetworkIcons.d.ts +6 -0
  50. package/dist/esm/components/NetworkIcons.js +23 -0
  51. package/dist/esm/constants/version.d.ts +1 -1
  52. package/dist/esm/constants/version.js +1 -1
  53. package/dist/esm/customHooks/bundleAnalyzer.js +44 -22
  54. package/dist/esm/customHooks/storageInspector.d.ts +67 -0
  55. package/dist/esm/customHooks/storageInspector.js +469 -0
  56. package/dist/esm/i18n/locales/en.json +8 -2
  57. package/dist/esm/index.d.ts +1 -0
  58. package/dist/esm/index.js +5 -0
  59. package/dist/esm/storage.d.ts +5 -0
  60. package/dist/esm/storage.js +5 -0
  61. package/dist/esm/types/enums.d.ts +5 -0
  62. package/dist/esm/types/enums.js +5 -0
  63. package/package.json +9 -1
  64. package/src/analytics.ts +35 -0
  65. package/src/bundle.ts +25 -0
  66. package/src/components/AnalyticsDetail.tsx +870 -0
  67. package/src/components/AnalyticsEventCard.tsx +442 -0
  68. package/src/components/AnalyticsGraph.tsx +583 -0
  69. package/src/components/AnimatedEntrance.tsx +64 -0
  70. package/src/components/AppHeaderLogo.tsx +109 -0
  71. package/src/components/BrandCircleIcon.tsx +144 -0
  72. package/src/components/BrandSquareIcon.tsx +144 -0
  73. package/src/components/CodeSnippet.tsx +725 -0
  74. package/src/components/ConsoleLogCard.tsx +628 -0
  75. package/src/components/CopyButton.tsx +87 -0
  76. package/src/components/DiffViewer.tsx +82 -0
  77. package/src/components/DomainHeader.tsx +237 -0
  78. package/src/components/EmptyState.tsx +73 -0
  79. package/src/components/EndOfListFooter.tsx +100 -0
  80. package/src/components/ErrorBoundary.tsx +688 -0
  81. package/src/components/HeadersSection.tsx +192 -0
  82. package/src/components/HighlightText.tsx +100 -0
  83. package/src/components/Inspector/AnalyticsFilterModal.tsx +1250 -0
  84. package/src/components/Inspector/AnalyticsTab.tsx +1336 -0
  85. package/src/components/Inspector/BundleTab.tsx +4760 -0
  86. package/src/components/Inspector/ConsoleTab.tsx +702 -0
  87. package/src/components/Inspector/CrashDetail.tsx +941 -0
  88. package/src/components/Inspector/CrashFilterModal.tsx +721 -0
  89. package/src/components/Inspector/CrashTab.tsx +871 -0
  90. package/src/components/Inspector/DeviceInfoTab.tsx +1204 -0
  91. package/src/components/Inspector/FabLauncher.tsx +80 -0
  92. package/src/components/Inspector/InspectorContext.tsx +28 -0
  93. package/src/components/Inspector/InspectorHeader.tsx +972 -0
  94. package/src/components/Inspector/LogDetail.tsx +1431 -0
  95. package/src/components/Inspector/MainScreen.tsx +262 -0
  96. package/src/components/Inspector/NavigationTracker.tsx +13 -0
  97. package/src/components/Inspector/NetworkDetail.tsx +794 -0
  98. package/src/components/Inspector/NetworkTab.tsx +1183 -0
  99. package/src/components/Inspector/NpmUpdateToast.tsx +392 -0
  100. package/src/components/Inspector/PerformanceTab.tsx +1928 -0
  101. package/src/components/Inspector/ReduxDetail.tsx +1651 -0
  102. package/src/components/Inspector/ReduxTab.tsx +954 -0
  103. package/src/components/Inspector/SettingsPanel.tsx +3447 -0
  104. package/src/components/Inspector/StorageTab.tsx +1048 -0
  105. package/src/components/Inspector/TabBar.tsx +207 -0
  106. package/src/components/Inspector/TelemetryConsentModal.tsx +416 -0
  107. package/src/components/Inspector/UpdateAvailableModal.tsx +557 -0
  108. package/src/components/JsonViewer.tsx +486 -0
  109. package/src/components/LogCard.tsx +491 -0
  110. package/src/components/LogSyntaxHighlighter.tsx +178 -0
  111. package/src/components/MetaAccordion.tsx +340 -0
  112. package/src/components/MiniBarChart.tsx +42 -0
  113. package/src/components/MiniLineChart.tsx +33 -0
  114. package/src/components/NetworkIcons.tsx +2221 -0
  115. package/src/components/SectionHeader.tsx +113 -0
  116. package/src/components/SegmentedTabs.tsx +83 -0
  117. package/src/components/Slider.tsx +300 -0
  118. package/src/components/SourcePageCard.tsx +148 -0
  119. package/src/components/Toast.tsx +131 -0
  120. package/src/components/TouchableScale.tsx +91 -0
  121. package/src/components/TreeNode.tsx +186 -0
  122. package/src/console.ts +24 -0
  123. package/src/constants/index.ts +38 -0
  124. package/src/constants/version.ts +3 -0
  125. package/src/crash.ts +32 -0
  126. package/src/customHooks/analyticsLogger.ts +336 -0
  127. package/src/customHooks/bundleAnalyzer.ts +1256 -0
  128. package/src/customHooks/consoleLogger.ts +497 -0
  129. package/src/customHooks/crashHandler.ts +944 -0
  130. package/src/customHooks/logFilters.ts +32 -0
  131. package/src/customHooks/networkLogger.ts +419 -0
  132. package/src/customHooks/performanceTracker.ts +1014 -0
  133. package/src/customHooks/reduxLogger.ts +406 -0
  134. package/src/customHooks/storageInspector.ts +509 -0
  135. package/src/customHooks/useAccordion.tsx +60 -0
  136. package/src/decorators/index.ts +184 -0
  137. package/src/helpers/gaAnalyticsRegistry.ts +204 -0
  138. package/src/helpers/index.ts +860 -0
  139. package/src/helpers/memoryManager.ts +138 -0
  140. package/src/helpers/searchQueryParser.ts +283 -0
  141. package/src/helpers/settingsStore.ts +171 -0
  142. package/src/helpers/telemetry.ts +505 -0
  143. package/src/helpers/toast.ts +17 -0
  144. package/src/i18n/index.ts +69 -0
  145. package/src/i18n/locales/en.json +1058 -0
  146. package/src/index.tsx +2356 -0
  147. package/src/native/NativeInspector.ts +397 -0
  148. package/src/native/NativeNetworkInspector.ts +24 -0
  149. package/src/network.ts +22 -0
  150. package/src/performance.ts +38 -0
  151. package/src/redux.ts +23 -0
  152. package/src/storage.ts +18 -0
  153. package/src/styles/AppColors.ts +408 -0
  154. package/src/styles/AppFonts.ts +8 -0
  155. package/src/styles/common.ts +209 -0
  156. package/src/styles/index.ts +1570 -0
  157. package/src/types/enums.ts +199 -0
  158. package/src/types/index.ts +34 -0
  159. package/src/types/interfaces.ts +515 -0
@@ -0,0 +1,184 @@
1
+ // ─── Method & Class Decorators for React Native In-App Inspector ─────────────
2
+ //
3
+ // Clean TypeScript decorators to seamlessly annotate methods, asynchronous actions,
4
+ // and API services with automatic inspection, logging, timing, and error boundaries.
5
+ // ─────────────────────────────────────────────────────────────────────────────
6
+
7
+ export interface InspectLogOptions {
8
+ tag?: string;
9
+ logArgs?: boolean;
10
+ logResult?: boolean;
11
+ logDuration?: boolean;
12
+ }
13
+
14
+ /**
15
+ * `@InspectLog`: Automatically logs method execution, arguments, duration, and return values
16
+ * to the In-App Inspector Console.
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * class UserService {
21
+ * @InspectLog({ tag: 'API', logArgs: true, logDuration: true })
22
+ * async fetchUser(id: string) {
23
+ * return api.get(`/users/${id}`);
24
+ * }
25
+ * }
26
+ * ```
27
+ */
28
+ export function InspectLog(options: InspectLogOptions = {}) {
29
+ const {
30
+ tag = 'Inspect',
31
+ logArgs = true,
32
+ logResult = true,
33
+ logDuration = true,
34
+ } = options;
35
+
36
+ return function (
37
+ _target: any,
38
+ propertyKey: string,
39
+ descriptor: PropertyDescriptor,
40
+ ) {
41
+ const originalMethod = descriptor.value;
42
+
43
+ descriptor.value = function (...args: any[]) {
44
+ const start = Date.now();
45
+ const prefix = `[${tag}] ${propertyKey}`;
46
+
47
+ if (logArgs && args.length > 0) {
48
+ console.log(`${prefix} called with arguments:`, ...args);
49
+ } else {
50
+ console.log(`${prefix} invoked`);
51
+ }
52
+
53
+ try {
54
+ const result = originalMethod.apply(this, args);
55
+
56
+ if (result && typeof result.then === 'function') {
57
+ return result
58
+ .then((asyncResult: any) => {
59
+ const elapsed = Date.now() - start;
60
+ if (logResult) {
61
+ console.log(
62
+ `${prefix} resolved${logDuration ? ` in ${elapsed}ms` : ''}:`,
63
+ asyncResult,
64
+ );
65
+ }
66
+ return asyncResult;
67
+ })
68
+ .catch((err: any) => {
69
+ const elapsed = Date.now() - start;
70
+ console.error(
71
+ `${prefix} rejected${logDuration ? ` in ${elapsed}ms` : ''}:`,
72
+ err,
73
+ );
74
+ throw err;
75
+ });
76
+ }
77
+
78
+ const elapsed = Date.now() - start;
79
+ if (logResult) {
80
+ console.log(
81
+ `${prefix} returned${logDuration ? ` in ${elapsed}ms` : ''}:`,
82
+ result,
83
+ );
84
+ }
85
+ return result;
86
+ } catch (error) {
87
+ const elapsed = Date.now() - start;
88
+ console.error(
89
+ `${prefix} failed${logDuration ? ` in ${elapsed}ms` : ''}:`,
90
+ error,
91
+ );
92
+ throw error;
93
+ }
94
+ };
95
+
96
+ return descriptor;
97
+ };
98
+ }
99
+
100
+ /**
101
+ * `@InspectTrackTime`: Measures and logs execution duration for critical functions.
102
+ *
103
+ * @example
104
+ * ```ts
105
+ * class FeedManager {
106
+ * @InspectTrackTime('Feed Data Processing')
107
+ * processFeedItems(items: FeedItem[]) { ... }
108
+ * }
109
+ * ```
110
+ */
111
+ export function InspectTrackTime(label?: string) {
112
+ return function (
113
+ _target: any,
114
+ propertyKey: string,
115
+ descriptor: PropertyDescriptor,
116
+ ) {
117
+ const originalMethod = descriptor.value;
118
+ const metricLabel = label || propertyKey;
119
+
120
+ descriptor.value = function (...args: any[]) {
121
+ const start = Date.now();
122
+ try {
123
+ const result = originalMethod.apply(this, args);
124
+ if (result && typeof result.then === 'function') {
125
+ return result.finally(() => {
126
+ const duration = Date.now() - start;
127
+ console.log(`[PERF] ⚡ ${metricLabel} took ${duration}ms`);
128
+ });
129
+ }
130
+ const duration = Date.now() - start;
131
+ console.log(`[PERF] ⚡ ${metricLabel} took ${duration}ms`);
132
+ return result;
133
+ } catch (err) {
134
+ const duration = Date.now() - start;
135
+ console.error(`[PERF] ⚡ ${metricLabel} failed after ${duration}ms:`, err);
136
+ throw err;
137
+ }
138
+ };
139
+
140
+ return descriptor;
141
+ };
142
+ }
143
+
144
+ /**
145
+ * `@InspectCatch`: Safely catches unhandled exceptions thrown inside the method,
146
+ * logs them to the In-App Inspector, and returns a fallback value.
147
+ *
148
+ * @example
149
+ * ```ts
150
+ * class AuthService {
151
+ * @InspectCatch({ fallback: null, tag: 'AUTH' })
152
+ * async getCachedToken() { ... }
153
+ * }
154
+ * ```
155
+ */
156
+ export function InspectCatch(options: { fallback?: any; tag?: string } = {}) {
157
+ const { fallback = undefined, tag = 'Catch' } = options;
158
+
159
+ return function (
160
+ _target: any,
161
+ propertyKey: string,
162
+ descriptor: PropertyDescriptor,
163
+ ) {
164
+ const originalMethod = descriptor.value;
165
+
166
+ descriptor.value = function (...args: any[]) {
167
+ try {
168
+ const result = originalMethod.apply(this, args);
169
+ if (result && typeof result.then === 'function') {
170
+ return result.catch((err: any) => {
171
+ console.error(`[${tag}] Error caught in ${propertyKey}:`, err);
172
+ return fallback;
173
+ });
174
+ }
175
+ return result;
176
+ } catch (err) {
177
+ console.error(`[${tag}] Error caught in ${propertyKey}:`, err);
178
+ return fallback;
179
+ }
180
+ };
181
+
182
+ return descriptor;
183
+ };
184
+ }
@@ -0,0 +1,204 @@
1
+ // ─── Google Analytics (GA4) & Firebase Analytics Dynamic Registry ─────────────
2
+ //
3
+ // Dynamically inspects GA4 / Firebase Analytics runtime schemas, auto-detects
4
+ // standard GA4 event taxonomies, and supports dynamic GA plugins.
5
+ // ─────────────────────────────────────────────────────────────────────────────
6
+
7
+ import {GAEventCategory} from '../types/enums';
8
+
9
+ export {GAEventCategory};
10
+
11
+ export interface GAPlugin {
12
+ name: string;
13
+ resolveCategory?: (
14
+ eventName: string,
15
+ params?: Record<string, any>,
16
+ ) => GAEventCategory | string | null | undefined;
17
+ }
18
+
19
+ // ─── Official GA4 & Firebase Standard Event Sets ─────────────────────────────
20
+
21
+ const GA4_PAGE_VIEW_EVENTS = new Set([
22
+ 'screen_view',
23
+ 'page_view',
24
+ 'screen_active',
25
+ 'screen_inactive',
26
+ 'view_search_results',
27
+ 'search',
28
+ ]);
29
+
30
+ const GA4_ECOMMERCE_EVENTS = new Set([
31
+ 'purchase',
32
+ 'refund',
33
+ 'add_to_cart',
34
+ 'remove_from_cart',
35
+ 'view_cart',
36
+ 'begin_checkout',
37
+ 'add_shipping_info',
38
+ 'add_payment_info',
39
+ 'view_item',
40
+ 'view_item_list',
41
+ 'select_item',
42
+ 'select_promotion',
43
+ 'view_promotion',
44
+ 'add_to_wishlist',
45
+ 'generate_lead',
46
+ 'in_app_purchase',
47
+ 'earn_virtual_currency',
48
+ 'spend_virtual_currency',
49
+ 'join_group',
50
+ 'level_up',
51
+ 'level_start',
52
+ 'level_end',
53
+ 'post_score',
54
+ 'select_content',
55
+ 'tutorial_begin',
56
+ 'tutorial_complete',
57
+ 'unlock_achievement',
58
+ ]);
59
+
60
+ const GA4_SYSTEM_EVENTS = new Set([
61
+ 'first_open',
62
+ 'first_visit',
63
+ 'session_start',
64
+ 'user_engagement',
65
+ 'app_clear_data',
66
+ 'app_exception',
67
+ 'app_remove',
68
+ 'app_store_refund',
69
+ 'app_store_subscription_cancel',
70
+ 'app_store_subscription_convert',
71
+ 'app_store_subscription_renew',
72
+ 'app_update',
73
+ 'os_update',
74
+ 'notification_receive',
75
+ 'notification_open',
76
+ 'notification_dismiss',
77
+ 'notification_foreground',
78
+ 'dynamic_link_first_open',
79
+ 'dynamic_link_app_open',
80
+ 'dynamic_link_app_update',
81
+ 'ad_impression',
82
+ 'ad_click',
83
+ 'ad_reward',
84
+ 'ad_query',
85
+ 'ad_exposure',
86
+ ]);
87
+
88
+ // ─── Registered Dynamic Plugins ──────────────────────────────────────────────
89
+
90
+ const registeredPlugins: GAPlugin[] = [];
91
+
92
+ /**
93
+ * Register a dynamic Google Analytics / Firebase plugin or custom resolver.
94
+ */
95
+ export const registerGAPlugin = (plugin: GAPlugin): void => {
96
+ if (!registeredPlugins.some(p => p.name === plugin.name)) {
97
+ registeredPlugins.push(plugin);
98
+ }
99
+ };
100
+
101
+ /**
102
+ * Attempt dynamic inspection of host runtime Firebase / Google Analytics modules.
103
+ */
104
+ const tryInspectRuntimeFirebaseAnalytics = (): void => {
105
+ try {
106
+ const firebaseAnalytics = require('@react-native-firebase/analytics');
107
+ const mod = firebaseAnalytics?.default || firebaseAnalytics;
108
+ if (mod?.EventNames) {
109
+ Object.keys(mod.EventNames).forEach(k => {
110
+ const val = mod.EventNames[k]?.toLowerCase();
111
+ if (val) {
112
+ if (
113
+ val.includes('cart') ||
114
+ val.includes('checkout') ||
115
+ val.includes('purchase') ||
116
+ val.includes('item')
117
+ ) {
118
+ GA4_ECOMMERCE_EVENTS.add(val);
119
+ } else if (val.includes('screen') || val.includes('page')) {
120
+ GA4_PAGE_VIEW_EVENTS.add(val);
121
+ }
122
+ }
123
+ });
124
+ }
125
+ } catch {
126
+ // Optional dependency - safe fallback to built-in GA4 taxonomy
127
+ }
128
+ };
129
+
130
+ // Initialize dynamic runtime inspection once
131
+ tryInspectRuntimeFirebaseAnalytics();
132
+
133
+ /**
134
+ * Dynamically resolves the GA4 event category using:
135
+ * 1. Registered dynamic GA plugins
136
+ * 2. Runtime Firebase Analytics inspection
137
+ * 3. GA4 standard event taxonomies (O(1) Set lookup)
138
+ * 4. Semantic pattern & prefix analysis
139
+ */
140
+ export const getEventCategory = (
141
+ name: string,
142
+ params?: Record<string, any>,
143
+ ): GAEventCategory => {
144
+ if (!name || typeof name !== 'string') return 'custom';
145
+ const cleanName = name.trim().toLowerCase();
146
+
147
+ // 1. Run through registered dynamic plugins
148
+ for (const plugin of registeredPlugins) {
149
+ if (plugin.resolveCategory) {
150
+ const category = plugin.resolveCategory(cleanName, params);
151
+ if (category) return category as GAEventCategory;
152
+ }
153
+ }
154
+
155
+ // 2. Exact GA4 taxonomy matching (O(1))
156
+ if (GA4_PAGE_VIEW_EVENTS.has(cleanName)) {
157
+ return 'page_view';
158
+ }
159
+
160
+ if (GA4_ECOMMERCE_EVENTS.has(cleanName)) {
161
+ return 'ecommerce';
162
+ }
163
+
164
+ if (GA4_SYSTEM_EVENTS.has(cleanName)) {
165
+ return 'system';
166
+ }
167
+
168
+ // 3. Prefix & namespace detection
169
+ if (
170
+ cleanName.startsWith('firebase_') ||
171
+ cleanName.startsWith('ga_') ||
172
+ cleanName.startsWith('gtag_') ||
173
+ cleanName.startsWith('_') ||
174
+ cleanName.startsWith('google_')
175
+ ) {
176
+ return 'system';
177
+ }
178
+
179
+ // 4. Semantic pattern matching
180
+ if (
181
+ cleanName.endsWith('_view') ||
182
+ cleanName.endsWith('_screen') ||
183
+ cleanName.startsWith('screen_') ||
184
+ cleanName.startsWith('page_') ||
185
+ cleanName.includes('screen_view') ||
186
+ cleanName.includes('page_view')
187
+ ) {
188
+ return 'page_view';
189
+ }
190
+
191
+ if (
192
+ cleanName.includes('cart') ||
193
+ cleanName.includes('checkout') ||
194
+ cleanName.includes('purchase') ||
195
+ cleanName.includes('payment') ||
196
+ cleanName.includes('order') ||
197
+ cleanName.includes('refund') ||
198
+ cleanName.includes('shipping')
199
+ ) {
200
+ return 'ecommerce';
201
+ }
202
+
203
+ return 'custom';
204
+ };