react-native-network-lens 0.0.0-stage → 0.1.1

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 (180) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +208 -2
  3. package/lib/module/backHandler.js +31 -0
  4. package/lib/module/backHandler.js.map +1 -0
  5. package/lib/module/components/BodyViewer.js +213 -0
  6. package/lib/module/components/BodyViewer.js.map +1 -0
  7. package/lib/module/components/CodeList.js +104 -0
  8. package/lib/module/components/CodeList.js.map +1 -0
  9. package/lib/module/components/JsonTree/JsonTreeView.js +206 -0
  10. package/lib/module/components/JsonTree/JsonTreeView.js.map +1 -0
  11. package/lib/module/components/JsonTree/model.js +196 -0
  12. package/lib/module/components/JsonTree/model.js.map +1 -0
  13. package/lib/module/components/NetworkLens.js +110 -0
  14. package/lib/module/components/NetworkLens.js.map +1 -0
  15. package/lib/module/components/NetworkLensOverlay.js +158 -0
  16. package/lib/module/components/NetworkLensOverlay.js.map +1 -0
  17. package/lib/module/components/RawTextView.js +119 -0
  18. package/lib/module/components/RawTextView.js.map +1 -0
  19. package/lib/module/components/RequestDetails/RequestDetails.js +256 -0
  20. package/lib/module/components/RequestDetails/RequestDetails.js.map +1 -0
  21. package/lib/module/components/RequestList/FilterBar.js +138 -0
  22. package/lib/module/components/RequestList/FilterBar.js.map +1 -0
  23. package/lib/module/components/RequestList/RequestList.js +163 -0
  24. package/lib/module/components/RequestList/RequestList.js.map +1 -0
  25. package/lib/module/components/RequestList/RequestRow.js +161 -0
  26. package/lib/module/components/RequestList/RequestRow.js.map +1 -0
  27. package/lib/module/components/RequestList/filters.js +57 -0
  28. package/lib/module/components/RequestList/filters.js.map +1 -0
  29. package/lib/module/components/ui/ActionSheet.js +94 -0
  30. package/lib/module/components/ui/ActionSheet.js.map +1 -0
  31. package/lib/module/components/ui/Button.js +104 -0
  32. package/lib/module/components/ui/Button.js.map +1 -0
  33. package/lib/module/components/ui/Pill.js +53 -0
  34. package/lib/module/components/ui/Pill.js.map +1 -0
  35. package/lib/module/components/ui/SearchInput.js +77 -0
  36. package/lib/module/components/ui/SearchInput.js.map +1 -0
  37. package/lib/module/components/ui/Section.js +147 -0
  38. package/lib/module/components/ui/Section.js.map +1 -0
  39. package/lib/module/components/ui/SegmentedControl.js +65 -0
  40. package/lib/module/components/ui/SegmentedControl.js.map +1 -0
  41. package/lib/module/components/ui/index.js +9 -0
  42. package/lib/module/components/ui/index.js.map +1 -0
  43. package/lib/module/core/Logger.js +230 -0
  44. package/lib/module/core/Logger.js.map +1 -0
  45. package/lib/module/core/NetworkRequest.js +155 -0
  46. package/lib/module/core/NetworkRequest.js.map +1 -0
  47. package/lib/module/core/XHRInterceptor.js +104 -0
  48. package/lib/module/core/XHRInterceptor.js.map +1 -0
  49. package/lib/module/core/har.js +72 -0
  50. package/lib/module/core/har.js.map +1 -0
  51. package/lib/module/core/loggerSingleton.js +12 -0
  52. package/lib/module/core/loggerSingleton.js.map +1 -0
  53. package/lib/module/hooks.js +42 -0
  54. package/lib/module/hooks.js.map +1 -0
  55. package/lib/module/index.js +34 -0
  56. package/lib/module/index.js.map +1 -0
  57. package/lib/module/package.json +1 -0
  58. package/lib/module/theme.js +136 -0
  59. package/lib/module/theme.js.map +1 -0
  60. package/lib/module/types.js +2 -0
  61. package/lib/module/types.js.map +1 -0
  62. package/lib/module/utils/body.js +179 -0
  63. package/lib/module/utils/body.js.map +1 -0
  64. package/lib/module/utils/debounce.js +18 -0
  65. package/lib/module/utils/debounce.js.map +1 -0
  66. package/lib/module/utils/format.js +45 -0
  67. package/lib/module/utils/format.js.map +1 -0
  68. package/lib/module/utils/logger.js +6 -0
  69. package/lib/module/utils/logger.js.map +1 -0
  70. package/lib/module/utils/search.js +70 -0
  71. package/lib/module/utils/search.js.map +1 -0
  72. package/lib/module/utils/url.js +50 -0
  73. package/lib/module/utils/url.js.map +1 -0
  74. package/lib/typescript/package.json +1 -0
  75. package/lib/typescript/src/backHandler.d.ts +15 -0
  76. package/lib/typescript/src/backHandler.d.ts.map +1 -0
  77. package/lib/typescript/src/components/BodyViewer.d.ts +16 -0
  78. package/lib/typescript/src/components/BodyViewer.d.ts.map +1 -0
  79. package/lib/typescript/src/components/CodeList.d.ts +21 -0
  80. package/lib/typescript/src/components/CodeList.d.ts.map +1 -0
  81. package/lib/typescript/src/components/JsonTree/JsonTreeView.d.ts +21 -0
  82. package/lib/typescript/src/components/JsonTree/JsonTreeView.d.ts.map +1 -0
  83. package/lib/typescript/src/components/JsonTree/model.d.ts +53 -0
  84. package/lib/typescript/src/components/JsonTree/model.d.ts.map +1 -0
  85. package/lib/typescript/src/components/NetworkLens.d.ts +31 -0
  86. package/lib/typescript/src/components/NetworkLens.d.ts.map +1 -0
  87. package/lib/typescript/src/components/NetworkLensOverlay.d.ts +32 -0
  88. package/lib/typescript/src/components/NetworkLensOverlay.d.ts.map +1 -0
  89. package/lib/typescript/src/components/RawTextView.d.ts +14 -0
  90. package/lib/typescript/src/components/RawTextView.d.ts.map +1 -0
  91. package/lib/typescript/src/components/RequestDetails/RequestDetails.d.ts +9 -0
  92. package/lib/typescript/src/components/RequestDetails/RequestDetails.d.ts.map +1 -0
  93. package/lib/typescript/src/components/RequestList/FilterBar.d.ts +12 -0
  94. package/lib/typescript/src/components/RequestList/FilterBar.d.ts.map +1 -0
  95. package/lib/typescript/src/components/RequestList/RequestList.d.ts +18 -0
  96. package/lib/typescript/src/components/RequestList/RequestList.d.ts.map +1 -0
  97. package/lib/typescript/src/components/RequestList/RequestRow.d.ts +11 -0
  98. package/lib/typescript/src/components/RequestList/RequestRow.d.ts.map +1 -0
  99. package/lib/typescript/src/components/RequestList/filters.d.ts +17 -0
  100. package/lib/typescript/src/components/RequestList/filters.d.ts.map +1 -0
  101. package/lib/typescript/src/components/ui/ActionSheet.d.ts +15 -0
  102. package/lib/typescript/src/components/ui/ActionSheet.d.ts.map +1 -0
  103. package/lib/typescript/src/components/ui/Button.d.ts +21 -0
  104. package/lib/typescript/src/components/ui/Button.d.ts.map +1 -0
  105. package/lib/typescript/src/components/ui/Pill.d.ts +11 -0
  106. package/lib/typescript/src/components/ui/Pill.d.ts.map +1 -0
  107. package/lib/typescript/src/components/ui/SearchInput.d.ts +17 -0
  108. package/lib/typescript/src/components/ui/SearchInput.d.ts.map +1 -0
  109. package/lib/typescript/src/components/ui/Section.d.ts +16 -0
  110. package/lib/typescript/src/components/ui/Section.d.ts.map +1 -0
  111. package/lib/typescript/src/components/ui/SegmentedControl.d.ts +14 -0
  112. package/lib/typescript/src/components/ui/SegmentedControl.d.ts.map +1 -0
  113. package/lib/typescript/src/components/ui/index.d.ts +7 -0
  114. package/lib/typescript/src/components/ui/index.d.ts.map +1 -0
  115. package/lib/typescript/src/core/Logger.d.ts +48 -0
  116. package/lib/typescript/src/core/Logger.d.ts.map +1 -0
  117. package/lib/typescript/src/core/NetworkRequest.d.ts +48 -0
  118. package/lib/typescript/src/core/NetworkRequest.d.ts.map +1 -0
  119. package/lib/typescript/src/core/XHRInterceptor.d.ts +29 -0
  120. package/lib/typescript/src/core/XHRInterceptor.d.ts.map +1 -0
  121. package/lib/typescript/src/core/har.d.ts +65 -0
  122. package/lib/typescript/src/core/har.d.ts.map +1 -0
  123. package/lib/typescript/src/core/loggerSingleton.d.ts +9 -0
  124. package/lib/typescript/src/core/loggerSingleton.d.ts.map +1 -0
  125. package/lib/typescript/src/hooks.d.ts +11 -0
  126. package/lib/typescript/src/hooks.d.ts.map +1 -0
  127. package/lib/typescript/src/index.d.ts +33 -0
  128. package/lib/typescript/src/index.d.ts.map +1 -0
  129. package/lib/typescript/src/theme.d.ts +49 -0
  130. package/lib/typescript/src/theme.d.ts.map +1 -0
  131. package/lib/typescript/src/types.d.ts +80 -0
  132. package/lib/typescript/src/types.d.ts.map +1 -0
  133. package/lib/typescript/src/utils/body.d.ts +19 -0
  134. package/lib/typescript/src/utils/body.d.ts.map +1 -0
  135. package/lib/typescript/src/utils/debounce.d.ts +4 -0
  136. package/lib/typescript/src/utils/debounce.d.ts.map +1 -0
  137. package/lib/typescript/src/utils/format.d.ts +7 -0
  138. package/lib/typescript/src/utils/format.d.ts.map +1 -0
  139. package/lib/typescript/src/utils/logger.d.ts +2 -0
  140. package/lib/typescript/src/utils/logger.d.ts.map +1 -0
  141. package/lib/typescript/src/utils/search.d.ts +17 -0
  142. package/lib/typescript/src/utils/search.d.ts.map +1 -0
  143. package/lib/typescript/src/utils/url.d.ts +15 -0
  144. package/lib/typescript/src/utils/url.d.ts.map +1 -0
  145. package/package.json +186 -4
  146. package/src/backHandler.ts +29 -0
  147. package/src/components/BodyViewer.tsx +250 -0
  148. package/src/components/CodeList.tsx +120 -0
  149. package/src/components/JsonTree/JsonTreeView.tsx +304 -0
  150. package/src/components/JsonTree/model.ts +266 -0
  151. package/src/components/NetworkLens.tsx +176 -0
  152. package/src/components/NetworkLensOverlay.tsx +187 -0
  153. package/src/components/RawTextView.tsx +163 -0
  154. package/src/components/RequestDetails/RequestDetails.tsx +315 -0
  155. package/src/components/RequestList/FilterBar.tsx +168 -0
  156. package/src/components/RequestList/RequestList.tsx +226 -0
  157. package/src/components/RequestList/RequestRow.tsx +150 -0
  158. package/src/components/RequestList/filters.ts +98 -0
  159. package/src/components/ui/ActionSheet.tsx +109 -0
  160. package/src/components/ui/Button.tsx +124 -0
  161. package/src/components/ui/Pill.tsx +53 -0
  162. package/src/components/ui/SearchInput.tsx +97 -0
  163. package/src/components/ui/Section.tsx +133 -0
  164. package/src/components/ui/SegmentedControl.tsx +79 -0
  165. package/src/components/ui/index.ts +6 -0
  166. package/src/core/Logger.ts +293 -0
  167. package/src/core/NetworkRequest.ts +216 -0
  168. package/src/core/XHRInterceptor.ts +179 -0
  169. package/src/core/har.ts +71 -0
  170. package/src/core/loggerSingleton.ts +14 -0
  171. package/src/hooks.ts +51 -0
  172. package/src/index.tsx +56 -0
  173. package/src/theme.ts +174 -0
  174. package/src/types.ts +83 -0
  175. package/src/utils/body.ts +194 -0
  176. package/src/utils/debounce.ts +18 -0
  177. package/src/utils/format.ts +50 -0
  178. package/src/utils/logger.ts +3 -0
  179. package/src/utils/search.ts +72 -0
  180. package/src/utils/url.ts +59 -0
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+
3
+ import React from 'react';
4
+ import { ScrollView, StyleSheet, Text, View } from 'react-native';
5
+ import { methodColor, statusColor, useTheme } from "../../theme.js";
6
+ import { TextButton } from "../ui/index.js";
7
+ import { STATUS_GROUPS, isFilterActive, toggleHost, toggleMethod, toggleStatusGroup } from "./filters.js";
8
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
+ const statusGroupColor = (theme, group) => {
10
+ switch (group) {
11
+ case '2xx':
12
+ return statusColor(theme, 200);
13
+ case '3xx':
14
+ return statusColor(theme, 300);
15
+ case '4xx':
16
+ return statusColor(theme, 400);
17
+ case '5xx':
18
+ return statusColor(theme, 500);
19
+ case 'failed':
20
+ return theme.colors.statusBad;
21
+ default:
22
+ return theme.colors.statusPending;
23
+ }
24
+ };
25
+ const Chip = ({
26
+ label,
27
+ selected,
28
+ color,
29
+ onPress
30
+ }) => /*#__PURE__*/_jsx(TextButton, {
31
+ label: label,
32
+ onPress: onPress,
33
+ active: selected,
34
+ style: [styles.chip, selected && {
35
+ backgroundColor: color
36
+ }],
37
+ textStyle: !selected ? {
38
+ color
39
+ } : undefined
40
+ });
41
+ const FilterBar = ({
42
+ filter,
43
+ onChange,
44
+ methods,
45
+ hosts,
46
+ onClear
47
+ }) => {
48
+ const theme = useTheme();
49
+ return /*#__PURE__*/_jsxs(View, {
50
+ style: [styles.container, {
51
+ borderBottomColor: theme.colors.border,
52
+ backgroundColor: theme.colors.surface
53
+ }],
54
+ children: [/*#__PURE__*/_jsx(Row, {
55
+ label: "Method",
56
+ children: methods.map(method => /*#__PURE__*/_jsx(Chip, {
57
+ label: method,
58
+ selected: filter.methods.has(method),
59
+ color: methodColor(theme, method),
60
+ onPress: () => onChange(toggleMethod(filter, method))
61
+ }, method))
62
+ }), /*#__PURE__*/_jsx(Row, {
63
+ label: "Status",
64
+ children: STATUS_GROUPS.map(group => /*#__PURE__*/_jsx(Chip, {
65
+ label: group,
66
+ selected: filter.statusGroups.has(group),
67
+ color: statusGroupColor(theme, group),
68
+ onPress: () => onChange(toggleStatusGroup(filter, group))
69
+ }, group))
70
+ }), hosts.length > 1 && /*#__PURE__*/_jsx(Row, {
71
+ label: "Host",
72
+ children: hosts.map(host => /*#__PURE__*/_jsx(Chip, {
73
+ label: host || '(none)',
74
+ selected: filter.hosts.has(host),
75
+ color: theme.colors.primary,
76
+ onPress: () => onChange(toggleHost(filter, host))
77
+ }, host || '(none)'))
78
+ }), isFilterActive(filter) && /*#__PURE__*/_jsx(TextButton, {
79
+ label: "Clear filters",
80
+ onPress: onClear,
81
+ style: styles.clear
82
+ })]
83
+ });
84
+ };
85
+ const Row = ({
86
+ label,
87
+ children
88
+ }) => {
89
+ const theme = useTheme();
90
+ return /*#__PURE__*/_jsxs(View, {
91
+ style: styles.row,
92
+ children: [/*#__PURE__*/_jsx(Text, {
93
+ style: [styles.rowLabel, {
94
+ color: theme.colors.textMuted
95
+ }],
96
+ children: label
97
+ }), /*#__PURE__*/_jsx(ScrollView, {
98
+ horizontal: true,
99
+ showsHorizontalScrollIndicator: false,
100
+ contentContainerStyle: styles.chips,
101
+ children: children
102
+ })]
103
+ });
104
+ };
105
+ const styles = StyleSheet.create({
106
+ container: {
107
+ paddingVertical: 6,
108
+ borderBottomWidth: StyleSheet.hairlineWidth
109
+ },
110
+ row: {
111
+ flexDirection: 'row',
112
+ alignItems: 'center',
113
+ paddingVertical: 3
114
+ },
115
+ rowLabel: {
116
+ width: 64,
117
+ fontSize: 11,
118
+ fontWeight: '700',
119
+ paddingLeft: 12,
120
+ letterSpacing: 0.5
121
+ },
122
+ chips: {
123
+ paddingRight: 12
124
+ },
125
+ chip: {
126
+ paddingVertical: 4,
127
+ paddingHorizontal: 10,
128
+ marginRight: 6
129
+ },
130
+ clear: {
131
+ alignSelf: 'flex-end',
132
+ marginRight: 12,
133
+ marginTop: 4,
134
+ paddingVertical: 4
135
+ }
136
+ });
137
+ export default FilterBar;
138
+ //# sourceMappingURL=FilterBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","ScrollView","StyleSheet","Text","View","methodColor","statusColor","useTheme","TextButton","STATUS_GROUPS","isFilterActive","toggleHost","toggleMethod","toggleStatusGroup","jsx","_jsx","jsxs","_jsxs","statusGroupColor","theme","group","colors","statusBad","statusPending","Chip","label","selected","color","onPress","active","style","styles","chip","backgroundColor","textStyle","undefined","FilterBar","filter","onChange","methods","hosts","onClear","container","borderBottomColor","border","surface","children","Row","map","method","has","statusGroups","length","host","primary","clear","row","rowLabel","textMuted","horizontal","showsHorizontalScrollIndicator","contentContainerStyle","chips","create","paddingVertical","borderBottomWidth","hairlineWidth","flexDirection","alignItems","width","fontSize","fontWeight","paddingLeft","letterSpacing","paddingRight","paddingHorizontal","marginRight","alignSelf","marginTop"],"sourceRoot":"../../../../src","sources":["components/RequestList/FilterBar.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+
3
+ import { useCallback, useMemo, useState } from 'react';
4
+ import { FlatList, Share, StyleSheet, Text, View } from 'react-native';
5
+ import { useTheme } from "../../theme.js";
6
+ import { ActionSheet, EmptyState, IconButton, SearchInput } from "../ui/index.js";
7
+ import FilterBar from "./FilterBar.js";
8
+ import RequestRow from "./RequestRow.js";
9
+ import { applyFilter, collectHosts, collectMethods, emptyFilter, isFilterActive } from "./filters.js";
10
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
+ const keyExtractor = row => row.id;
12
+ const summaryText = (total, shown, failed) => {
13
+ const parts = [`${total} request${total === 1 ? '' : 's'}`];
14
+ if (shown !== total) parts.push(`${shown} shown`);
15
+ if (failed) parts.push(`${failed} with errors`);
16
+ return parts.join(' · ');
17
+ };
18
+ const RequestList = ({
19
+ requests,
20
+ sort,
21
+ compact,
22
+ maxRows,
23
+ paused,
24
+ loggingEnabled,
25
+ onPressItem,
26
+ menuActions,
27
+ header
28
+ }) => {
29
+ const theme = useTheme();
30
+ const [search, setSearch] = useState('');
31
+ const [filter, setFilter] = useState(emptyFilter);
32
+ const [showFilters, setShowFilters] = useState(false);
33
+ const [menuVisible, setMenuVisible] = useState(false);
34
+ const rows = useMemo(() => {
35
+ const mapped = requests.map(request => request.toRow());
36
+ return sort === 'asc' ? mapped.reverse() : mapped;
37
+ }, [requests, sort]);
38
+ const filtered = useMemo(() => {
39
+ const result = applyFilter(rows, search, filter);
40
+ return maxRows ? result.slice(0, maxRows) : result;
41
+ }, [rows, search, filter, maxRows]);
42
+ const methods = useMemo(() => collectMethods(rows), [rows]);
43
+ const hosts = useMemo(() => collectHosts(rows), [rows]);
44
+ const failedCount = useMemo(() => rows.filter(r => r.statusGroup === 'failed' || r.statusGroup === '4xx' || r.statusGroup === '5xx').length, [rows]);
45
+ const onLongPress = useCallback(id => {
46
+ const request = requests.find(r => r.id === id);
47
+ if (request) Share.share({
48
+ message: request.curl
49
+ }).catch(() => undefined);
50
+ }, [requests]);
51
+ const renderItem = useCallback(({
52
+ item
53
+ }) => /*#__PURE__*/_jsx(RequestRow, {
54
+ row: item,
55
+ compact: compact,
56
+ onPress: onPressItem,
57
+ onLongPress: onLongPress
58
+ }), [compact, onPressItem, onLongPress]);
59
+ const emptyState = !loggingEnabled ? /*#__PURE__*/_jsx(EmptyState, {
60
+ title: "Network logging is disabled",
61
+ subtitle: "Call startNetworkLogging() with enabled: true before rendering the inspector."
62
+ }) : rows.length === 0 ? /*#__PURE__*/_jsx(EmptyState, {
63
+ title: "No requests yet",
64
+ subtitle: "Requests made with fetch, axios or XMLHttpRequest will appear here."
65
+ }) : /*#__PURE__*/_jsx(EmptyState, {
66
+ title: "No matching requests",
67
+ subtitle: "Try a different search term or clear the filters."
68
+ });
69
+ return /*#__PURE__*/_jsxs(View, {
70
+ style: [styles.container, {
71
+ backgroundColor: theme.colors.background
72
+ }],
73
+ children: [/*#__PURE__*/_jsxs(View, {
74
+ style: [styles.toolbar, {
75
+ backgroundColor: theme.colors.surface,
76
+ borderBottomColor: theme.colors.border
77
+ }],
78
+ children: [header, /*#__PURE__*/_jsxs(View, {
79
+ style: styles.searchRow,
80
+ children: [/*#__PURE__*/_jsx(SearchInput, {
81
+ value: search,
82
+ onChangeText: setSearch,
83
+ placeholder: "Filter by URL, method or status",
84
+ style: styles.search
85
+ }), /*#__PURE__*/_jsx(IconButton, {
86
+ glyph: "\u2261",
87
+ accessibilityLabel: "Toggle filters",
88
+ active: showFilters || isFilterActive(filter),
89
+ onPress: () => setShowFilters(v => !v)
90
+ }), /*#__PURE__*/_jsx(IconButton, {
91
+ glyph: "\u22EE",
92
+ accessibilityLabel: "More options",
93
+ onPress: () => setMenuVisible(true)
94
+ })]
95
+ })]
96
+ }), showFilters && /*#__PURE__*/_jsx(FilterBar, {
97
+ filter: filter,
98
+ onChange: setFilter,
99
+ methods: methods,
100
+ hosts: hosts,
101
+ onClear: () => setFilter(emptyFilter())
102
+ }), /*#__PURE__*/_jsx(View, {
103
+ style: [styles.statusBar, {
104
+ backgroundColor: paused ? theme.colors.statusWarning : theme.colors.surfaceAlt
105
+ }],
106
+ children: /*#__PURE__*/_jsx(Text, {
107
+ style: [styles.statusText, paused ? styles.statusTextPaused : {
108
+ color: theme.colors.textMuted
109
+ }],
110
+ numberOfLines: 1,
111
+ children: paused ? 'Paused — new requests are captured but hidden until you resume' : summaryText(rows.length, filtered.length, failedCount)
112
+ })
113
+ }), /*#__PURE__*/_jsx(FlatList, {
114
+ data: filtered,
115
+ renderItem: renderItem,
116
+ keyExtractor: keyExtractor,
117
+ keyboardShouldPersistTaps: "handled",
118
+ keyboardDismissMode: "on-drag",
119
+ initialNumToRender: 15,
120
+ windowSize: 7,
121
+ ListEmptyComponent: emptyState,
122
+ contentContainerStyle: filtered.length === 0 && styles.emptyContent
123
+ }), /*#__PURE__*/_jsx(ActionSheet, {
124
+ visible: menuVisible,
125
+ onClose: () => setMenuVisible(false),
126
+ actions: menuActions
127
+ })]
128
+ });
129
+ };
130
+ const styles = StyleSheet.create({
131
+ container: {
132
+ flex: 1
133
+ },
134
+ toolbar: {
135
+ paddingHorizontal: 8,
136
+ paddingVertical: 8,
137
+ borderBottomWidth: StyleSheet.hairlineWidth
138
+ },
139
+ searchRow: {
140
+ flexDirection: 'row',
141
+ alignItems: 'center'
142
+ },
143
+ search: {
144
+ flex: 1,
145
+ marginRight: 4
146
+ },
147
+ statusBar: {
148
+ paddingHorizontal: 12,
149
+ paddingVertical: 4
150
+ },
151
+ statusText: {
152
+ fontSize: 11,
153
+ fontWeight: '600'
154
+ },
155
+ statusTextPaused: {
156
+ color: '#ffffff'
157
+ },
158
+ emptyContent: {
159
+ flexGrow: 1
160
+ }
161
+ });
162
+ export default RequestList;
163
+ //# sourceMappingURL=RequestList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useMemo","useState","FlatList","Share","StyleSheet","Text","View","useTheme","ActionSheet","EmptyState","IconButton","SearchInput","FilterBar","RequestRow","applyFilter","collectHosts","collectMethods","emptyFilter","isFilterActive","jsx","_jsx","jsxs","_jsxs","keyExtractor","row","id","summaryText","total","shown","failed","parts","push","join","RequestList","requests","sort","compact","maxRows","paused","loggingEnabled","onPressItem","menuActions","header","theme","search","setSearch","filter","setFilter","showFilters","setShowFilters","menuVisible","setMenuVisible","rows","mapped","map","request","toRow","reverse","filtered","result","slice","methods","hosts","failedCount","r","statusGroup","length","onLongPress","find","share","message","curl","catch","undefined","renderItem","item","onPress","emptyState","title","subtitle","style","styles","container","backgroundColor","colors","background","children","toolbar","surface","borderBottomColor","border","searchRow","value","onChangeText","placeholder","glyph","accessibilityLabel","active","v","onChange","onClear","statusBar","statusWarning","surfaceAlt","statusText","statusTextPaused","color","textMuted","numberOfLines","data","keyboardShouldPersistTaps","keyboardDismissMode","initialNumToRender","windowSize","ListEmptyComponent","contentContainerStyle","emptyContent","visible","onClose","actions","create","flex","paddingHorizontal","paddingVertical","borderBottomWidth","hairlineWidth","flexDirection","alignItems","marginRight","fontSize","fontWeight","flexGrow"],"sourceRoot":"../../../../src","sources":["components/RequestList/RequestList.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+
3
+ import React from 'react';
4
+ import { ActivityIndicator, Pressable, StyleSheet, Text, View } from 'react-native';
5
+ import { methodColor, statusColor, useTheme } from "../../theme.js";
6
+ import { formatBytes, formatDuration, formatTime } from "../../utils/format.js";
7
+ import { Pill } from "../ui/index.js";
8
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
+ const RequestRow = ({
10
+ row,
11
+ compact,
12
+ onPress,
13
+ onLongPress
14
+ }) => {
15
+ const theme = useTheme();
16
+ const failed = row.state === 'failed';
17
+ const pending = row.state === 'pending';
18
+ const color = statusColor(theme, row.status, failed);
19
+ const statusLabel = failed ? (row.failureReason ?? 'ERR').toUpperCase() : row.status > 0 ? String(row.status) : '…';
20
+ const pathAndQuery = row.url.slice(row.url.indexOf(row.host) + row.host.length) || row.url;
21
+ return /*#__PURE__*/_jsxs(Pressable, {
22
+ accessibilityRole: "button",
23
+ accessibilityLabel: `${row.method} ${row.url}, status ${statusLabel}`,
24
+ onPress: () => onPress(row.id),
25
+ onLongPress: onLongPress ? () => onLongPress(row.id) : undefined,
26
+ delayLongPress: 350,
27
+ style: ({
28
+ pressed
29
+ }) => [styles.row, compact && styles.rowCompact, {
30
+ backgroundColor: pressed ? theme.colors.surfaceAlt : theme.colors.surface,
31
+ borderBottomColor: theme.colors.border
32
+ }],
33
+ children: [/*#__PURE__*/_jsx(View, {
34
+ style: [styles.accent, {
35
+ backgroundColor: color
36
+ }]
37
+ }), /*#__PURE__*/_jsxs(View, {
38
+ style: styles.left,
39
+ children: [/*#__PURE__*/_jsx(Pill, {
40
+ label: row.method,
41
+ color: methodColor(theme, row.method),
42
+ small: true,
43
+ style: styles.methodPill
44
+ }), pending ? /*#__PURE__*/_jsx(ActivityIndicator, {
45
+ size: "small",
46
+ color: theme.colors.statusPending,
47
+ style: styles.spinner
48
+ }) : /*#__PURE__*/_jsx(Text, {
49
+ style: [styles.status, {
50
+ color
51
+ }],
52
+ children: statusLabel
53
+ })]
54
+ }), /*#__PURE__*/_jsxs(View, {
55
+ style: styles.center,
56
+ children: [/*#__PURE__*/_jsx(Text, {
57
+ numberOfLines: compact ? 1 : 2,
58
+ style: [styles.path, {
59
+ color: failed || row.status >= 400 ? color : theme.colors.text
60
+ }],
61
+ children: pathAndQuery
62
+ }), !compact && /*#__PURE__*/_jsxs(Text, {
63
+ numberOfLines: 1,
64
+ style: [styles.host, {
65
+ color: theme.colors.textMuted
66
+ }],
67
+ children: [row.host || '—', row.gqlOperation ? /*#__PURE__*/_jsxs(Text, {
68
+ style: {
69
+ color: theme.colors.primary
70
+ },
71
+ children: [' ', "gql: ", row.gqlOperation]
72
+ }) : null]
73
+ })]
74
+ }), /*#__PURE__*/_jsxs(View, {
75
+ style: styles.right,
76
+ children: [/*#__PURE__*/_jsx(Text, {
77
+ style: [styles.meta, {
78
+ color: theme.colors.textMuted
79
+ }],
80
+ children: formatTime(row.startTime)
81
+ }), /*#__PURE__*/_jsx(Text, {
82
+ style: [styles.meta, {
83
+ color: theme.colors.textMuted
84
+ }],
85
+ children: row.duration >= 0 ? formatDuration(row.duration) : pending ? 'pending' : ''
86
+ }), !compact && row.responseSize > 0 && /*#__PURE__*/_jsx(Text, {
87
+ style: [styles.meta, {
88
+ color: theme.colors.textMuted
89
+ }],
90
+ children: formatBytes(row.responseSize)
91
+ })]
92
+ })]
93
+ });
94
+ };
95
+ const areEqual = (prev, next) => prev.row.updatedAt === next.row.updatedAt && prev.row.id === next.row.id && prev.compact === next.compact && prev.onPress === next.onPress && prev.onLongPress === next.onLongPress;
96
+ export default /*#__PURE__*/React.memo(RequestRow, areEqual);
97
+ const styles = StyleSheet.create({
98
+ row: {
99
+ flexDirection: 'row',
100
+ alignItems: 'center',
101
+ paddingVertical: 10,
102
+ paddingRight: 10,
103
+ borderBottomWidth: StyleSheet.hairlineWidth,
104
+ minHeight: 60
105
+ },
106
+ rowCompact: {
107
+ paddingVertical: 6,
108
+ minHeight: 44
109
+ },
110
+ accent: {
111
+ width: 3,
112
+ alignSelf: 'stretch',
113
+ borderRadius: 2,
114
+ marginLeft: 6
115
+ },
116
+ left: {
117
+ width: 64,
118
+ alignItems: 'center',
119
+ marginLeft: 6
120
+ },
121
+ methodPill: {
122
+ alignSelf: 'center',
123
+ minWidth: 52,
124
+ alignItems: 'center'
125
+ },
126
+ status: {
127
+ fontSize: 12,
128
+ fontWeight: '700',
129
+ marginTop: 4,
130
+ fontVariant: ['tabular-nums']
131
+ },
132
+ spinner: {
133
+ marginTop: 2,
134
+ transform: [{
135
+ scale: 0.7
136
+ }]
137
+ },
138
+ center: {
139
+ flex: 1,
140
+ paddingHorizontal: 8
141
+ },
142
+ path: {
143
+ fontSize: 14,
144
+ fontWeight: '500',
145
+ lineHeight: 18
146
+ },
147
+ host: {
148
+ fontSize: 12,
149
+ marginTop: 2
150
+ },
151
+ right: {
152
+ alignItems: 'flex-end',
153
+ minWidth: 56
154
+ },
155
+ meta: {
156
+ fontSize: 11,
157
+ lineHeight: 15,
158
+ fontVariant: ['tabular-nums']
159
+ }
160
+ });
161
+ //# sourceMappingURL=RequestRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","ActivityIndicator","Pressable","StyleSheet","Text","View","methodColor","statusColor","useTheme","formatBytes","formatDuration","formatTime","Pill","jsx","_jsx","jsxs","_jsxs","RequestRow","row","compact","onPress","onLongPress","theme","failed","state","pending","color","status","statusLabel","failureReason","toUpperCase","String","pathAndQuery","url","slice","indexOf","host","length","accessibilityRole","accessibilityLabel","method","id","undefined","delayLongPress","style","pressed","styles","rowCompact","backgroundColor","colors","surfaceAlt","surface","borderBottomColor","border","children","accent","left","label","small","methodPill","size","statusPending","spinner","center","numberOfLines","path","text","textMuted","gqlOperation","primary","right","meta","startTime","duration","responseSize","areEqual","prev","next","updatedAt","memo","create","flexDirection","alignItems","paddingVertical","paddingRight","borderBottomWidth","hairlineWidth","minHeight","width","alignSelf","borderRadius","marginLeft","minWidth","fontSize","fontWeight","marginTop","fontVariant","transform","scale","flex","paddingHorizontal","lineHeight"],"sourceRoot":"../../../../src","sources":["components/RequestList/RequestRow.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ export const emptyFilter = () => ({
4
+ methods: new Set(),
5
+ statusGroups: new Set(),
6
+ hosts: new Set()
7
+ });
8
+ export const isFilterActive = filter => filter.methods.size > 0 || filter.statusGroups.size > 0 || filter.hosts.size > 0;
9
+ export const STATUS_GROUPS = ['2xx', '3xx', '4xx', '5xx', 'pending', 'failed'];
10
+ export const applyFilter = (rows, search, filter) => {
11
+ const needle = search.trim().toLowerCase();
12
+ return rows.filter(row => {
13
+ if (needle) {
14
+ const haystack = `${row.method} ${row.url} ${row.gqlOperation ?? ''} ${row.status}`.toLowerCase();
15
+ if (!haystack.includes(needle)) return false;
16
+ }
17
+ if (filter.methods.size && !filter.methods.has(row.method)) return false;
18
+ if (filter.statusGroups.size && !filter.statusGroups.has(row.statusGroup)) return false;
19
+ if (filter.hosts.size && !filter.hosts.has(row.host)) return false;
20
+ return true;
21
+ });
22
+ };
23
+ const toggleIn = (set, value) => {
24
+ const next = new Set(set);
25
+ if (next.has(value)) next.delete(value);else next.add(value);
26
+ return next;
27
+ };
28
+ export const toggleMethod = (filter, method) => ({
29
+ ...filter,
30
+ methods: toggleIn(filter.methods, method)
31
+ });
32
+ export const toggleStatusGroup = (filter, group) => ({
33
+ ...filter,
34
+ statusGroups: toggleIn(filter.statusGroups, group)
35
+ });
36
+ export const toggleHost = (filter, host) => ({
37
+ ...filter,
38
+ hosts: toggleIn(filter.hosts, host)
39
+ });
40
+
41
+ /** Hosts seen in the captured requests, most frequent first. */
42
+ export const collectHosts = rows => {
43
+ const counts = new Map();
44
+ for (const row of rows) counts.set(row.host, (counts.get(row.host) ?? 0) + 1);
45
+ return [...counts.entries()].sort((a, b) => b[1] - a[1]).map(([host]) => host);
46
+ };
47
+ export const collectMethods = rows => {
48
+ const seen = new Set();
49
+ for (const row of rows) seen.add(row.method);
50
+ const order = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'];
51
+ return [...seen].sort((a, b) => {
52
+ const ia = order.indexOf(a);
53
+ const ib = order.indexOf(b);
54
+ return (ia === -1 ? 99 : ia) - (ib === -1 ? 99 : ib) || a.localeCompare(b);
55
+ });
56
+ };
57
+ //# sourceMappingURL=filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["emptyFilter","methods","Set","statusGroups","hosts","isFilterActive","filter","size","STATUS_GROUPS","applyFilter","rows","search","needle","trim","toLowerCase","row","haystack","method","url","gqlOperation","status","includes","has","statusGroup","host","toggleIn","set","value","next","delete","add","toggleMethod","toggleStatusGroup","group","toggleHost","collectHosts","counts","Map","get","entries","sort","a","b","map","collectMethods","seen","order","ia","indexOf","ib","localeCompare"],"sourceRoot":"../../../../src","sources":["components/RequestList/filters.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+
3
+ import { Modal, Pressable, ScrollView, StyleSheet, Text, View } from 'react-native';
4
+ import { useTheme } from "../../theme.js";
5
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
+ /** Cross-platform bottom sheet built on Modal, so no native dependency is needed. */
7
+ export const ActionSheet = ({
8
+ visible,
9
+ onClose,
10
+ actions,
11
+ title
12
+ }) => {
13
+ const theme = useTheme();
14
+ return /*#__PURE__*/_jsxs(Modal, {
15
+ visible: visible,
16
+ transparent: true,
17
+ animationType: "fade",
18
+ onRequestClose: onClose,
19
+ children: [/*#__PURE__*/_jsx(Pressable, {
20
+ style: styles.backdrop,
21
+ onPress: onClose,
22
+ accessibilityLabel: "Close menu"
23
+ }), /*#__PURE__*/_jsxs(View, {
24
+ style: [styles.sheet, {
25
+ backgroundColor: theme.colors.surface
26
+ }],
27
+ children: [title ? /*#__PURE__*/_jsx(Text, {
28
+ numberOfLines: 1,
29
+ style: [styles.title, {
30
+ color: theme.colors.textMuted
31
+ }],
32
+ children: title
33
+ }) : null, /*#__PURE__*/_jsx(ScrollView, {
34
+ bounces: false,
35
+ children: actions.map(action => /*#__PURE__*/_jsx(Pressable, {
36
+ accessibilityRole: "button",
37
+ onPress: () => {
38
+ onClose();
39
+ action.onPress();
40
+ },
41
+ style: ({
42
+ pressed
43
+ }) => [styles.item, {
44
+ borderTopColor: theme.colors.border
45
+ }, pressed && styles.pressed],
46
+ children: /*#__PURE__*/_jsx(Text, {
47
+ style: [styles.label, {
48
+ color: action.destructive ? theme.colors.statusBad : theme.colors.text
49
+ }],
50
+ children: action.label
51
+ })
52
+ }, action.label))
53
+ })]
54
+ })]
55
+ });
56
+ };
57
+ const styles = StyleSheet.create({
58
+ backdrop: {
59
+ position: 'absolute',
60
+ top: 0,
61
+ left: 0,
62
+ right: 0,
63
+ bottom: 0,
64
+ backgroundColor: 'rgba(0,0,0,0.35)'
65
+ },
66
+ sheet: {
67
+ position: 'absolute',
68
+ left: 12,
69
+ right: 12,
70
+ bottom: 24,
71
+ borderRadius: 14,
72
+ overflow: 'hidden',
73
+ maxHeight: '70%'
74
+ },
75
+ title: {
76
+ fontSize: 12,
77
+ fontWeight: '700',
78
+ padding: 12,
79
+ letterSpacing: 0.6
80
+ },
81
+ item: {
82
+ paddingVertical: 14,
83
+ paddingHorizontal: 16,
84
+ borderTopWidth: StyleSheet.hairlineWidth
85
+ },
86
+ label: {
87
+ fontSize: 16,
88
+ fontWeight: '500'
89
+ },
90
+ pressed: {
91
+ opacity: 0.6
92
+ }
93
+ });
94
+ //# sourceMappingURL=ActionSheet.js.map