react-native-debug-toolkit 3.1.2 → 3.1.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.
- package/README.md +4 -2
- package/README.zh-CN.md +4 -2
- package/lib/commonjs/core/DebugToolkit.js +118 -97
- package/lib/commonjs/core/DebugToolkit.js.map +1 -1
- package/lib/commonjs/core/initialize.js +4 -4
- package/lib/commonjs/core/initialize.js.map +1 -1
- package/lib/commonjs/features/environment/index.js +22 -24
- package/lib/commonjs/features/environment/index.js.map +1 -1
- package/lib/commonjs/features/network/index.js +25 -47
- package/lib/commonjs/features/network/index.js.map +1 -1
- package/lib/commonjs/features/network/networkInterceptor.js +3 -3
- package/lib/commonjs/features/network/networkInterceptor.js.map +1 -1
- package/lib/commonjs/index.js +0 -30
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/utils/DaemonClient.js +13 -51
- package/lib/commonjs/utils/DaemonClient.js.map +1 -1
- package/lib/commonjs/utils/createChannelFeature.js +8 -1
- package/lib/commonjs/utils/createChannelFeature.js.map +1 -1
- package/lib/commonjs/utils/deviceReport.js +2 -1
- package/lib/commonjs/utils/deviceReport.js.map +1 -1
- package/lib/commonjs/utils/urlRewriter.js +15 -0
- package/lib/commonjs/utils/urlRewriter.js.map +1 -0
- package/lib/module/core/DebugToolkit.js +117 -96
- package/lib/module/core/DebugToolkit.js.map +1 -1
- package/lib/module/core/initialize.js +6 -7
- package/lib/module/core/initialize.js.map +1 -1
- package/lib/module/features/environment/index.js +22 -24
- package/lib/module/features/environment/index.js.map +1 -1
- package/lib/module/features/network/index.js +25 -46
- package/lib/module/features/network/index.js.map +1 -1
- package/lib/module/features/network/networkInterceptor.js +3 -3
- package/lib/module/features/network/networkInterceptor.js.map +1 -1
- package/lib/module/index.js +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils/DaemonClient.js +14 -42
- package/lib/module/utils/DaemonClient.js.map +1 -1
- package/lib/module/utils/createChannelFeature.js +8 -1
- package/lib/module/utils/createChannelFeature.js.map +1 -1
- package/lib/module/utils/deviceReport.js +3 -2
- package/lib/module/utils/deviceReport.js.map +1 -1
- package/lib/module/utils/urlRewriter.js +10 -0
- package/lib/module/utils/urlRewriter.js.map +1 -0
- package/lib/typescript/src/core/DebugToolkit.d.ts +23 -10
- package/lib/typescript/src/core/DebugToolkit.d.ts.map +1 -1
- package/lib/typescript/src/core/initialize.d.ts.map +1 -1
- package/lib/typescript/src/features/environment/index.d.ts.map +1 -1
- package/lib/typescript/src/features/network/index.d.ts +3 -3
- package/lib/typescript/src/features/network/index.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +2 -2
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/types/feature.d.ts +5 -0
- package/lib/typescript/src/types/feature.d.ts.map +1 -1
- package/lib/typescript/src/types/index.d.ts +1 -1
- package/lib/typescript/src/types/index.d.ts.map +1 -1
- package/lib/typescript/src/utils/DaemonClient.d.ts +4 -11
- package/lib/typescript/src/utils/DaemonClient.d.ts.map +1 -1
- package/lib/typescript/src/utils/createChannelFeature.d.ts +4 -0
- package/lib/typescript/src/utils/createChannelFeature.d.ts.map +1 -1
- package/lib/typescript/src/utils/deviceReport.d.ts +4 -1
- package/lib/typescript/src/utils/deviceReport.d.ts.map +1 -1
- package/lib/typescript/src/utils/urlRewriter.d.ts +5 -0
- package/lib/typescript/src/utils/urlRewriter.d.ts.map +1 -0
- package/node/daemon/src/console/console.html +324 -168
- package/node/daemon/src/server.js +32 -2
- package/node/mcp/src/logs.js +15 -4
- package/node/mcp/src/tools.js +4 -2
- package/package.json +1 -1
- package/src/core/DebugToolkit.tsx +119 -105
- package/src/core/initialize.ts +7 -8
- package/src/features/environment/index.ts +25 -27
- package/src/features/network/index.ts +30 -52
- package/src/features/network/networkInterceptor.ts +3 -3
- package/src/index.ts +3 -8
- package/src/types/feature.ts +6 -0
- package/src/types/index.ts +1 -0
- package/src/utils/DaemonClient.ts +14 -56
- package/src/utils/createChannelFeature.ts +12 -1
- package/src/utils/deviceReport.ts +5 -3
- package/src/utils/urlRewriter.ts +11 -0
- package/lib/commonjs/utils/urlRewriterRegistry.js +0 -14
- package/lib/commonjs/utils/urlRewriterRegistry.js.map +0 -1
- package/lib/module/utils/urlRewriterRegistry.js +0 -10
- package/lib/module/utils/urlRewriterRegistry.js.map +0 -1
- package/lib/typescript/src/utils/urlRewriterRegistry.d.ts +0 -7
- package/lib/typescript/src/utils/urlRewriterRegistry.d.ts.map +0 -1
- package/src/utils/urlRewriterRegistry.ts +0 -10
|
@@ -1,140 +1,161 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
3
|
+
class DebugToolkitCore {
|
|
4
|
+
_features = [];
|
|
5
|
+
_launcherVisible = false;
|
|
6
|
+
_panelOpen = false;
|
|
7
|
+
_enabled = true;
|
|
8
|
+
_listeners = new Set();
|
|
9
|
+
notify() {
|
|
10
|
+
this._listeners.forEach(l => l());
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// --- FeatureDataProvider ---
|
|
14
|
+
|
|
15
|
+
get features() {
|
|
16
|
+
return [...this._features];
|
|
17
|
+
}
|
|
18
18
|
subscribe(listener) {
|
|
19
|
-
|
|
19
|
+
this._listeners.add(listener);
|
|
20
20
|
return () => {
|
|
21
|
-
|
|
21
|
+
this._listeners.delete(listener);
|
|
22
22
|
};
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// --- Enabled ---
|
|
26
|
+
|
|
27
27
|
get enabled() {
|
|
28
|
-
return _enabled;
|
|
29
|
-
}
|
|
30
|
-
get launcherVisible() {
|
|
31
|
-
return _launcherVisible;
|
|
32
|
-
},
|
|
28
|
+
return this._enabled;
|
|
29
|
+
}
|
|
33
30
|
setEnabled(enabled) {
|
|
34
|
-
if (_enabled === enabled) return;
|
|
35
|
-
_enabled = enabled;
|
|
31
|
+
if (this._enabled === enabled) return;
|
|
32
|
+
this._enabled = enabled;
|
|
36
33
|
if (!enabled) {
|
|
37
|
-
_launcherVisible = false;
|
|
38
|
-
_features.forEach(
|
|
39
|
-
_features = [];
|
|
34
|
+
this._launcherVisible = false;
|
|
35
|
+
this._features.forEach(f => f.cleanup?.());
|
|
36
|
+
this._features = [];
|
|
40
37
|
}
|
|
41
|
-
notify();
|
|
42
|
-
}
|
|
38
|
+
this.notify();
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// --- Feature Management ---
|
|
42
|
+
|
|
43
43
|
replaceFeatures(features) {
|
|
44
|
-
if (!_enabled) return;
|
|
44
|
+
if (!this._enabled) return;
|
|
45
45
|
const next = features.filter((f, i, arr) => f && typeof f.name === 'string' && arr.findIndex(item => item.name === f.name) === i);
|
|
46
|
-
const prevMap = new Map(_features.map(f => [f.name, f]));
|
|
46
|
+
const prevMap = new Map(this._features.map(f => [f.name, f]));
|
|
47
47
|
const nextMap = new Map(next.map(f => [f.name, f]));
|
|
48
|
-
_features.forEach(f => {
|
|
49
|
-
if (!nextMap.get(f.name) || nextMap.get(f.name) !== f)
|
|
48
|
+
this._features.forEach(f => {
|
|
49
|
+
if (!nextMap.get(f.name) || nextMap.get(f.name) !== f) f.cleanup?.();
|
|
50
50
|
});
|
|
51
51
|
next.forEach(f => {
|
|
52
|
-
if (!prevMap.get(f.name) || prevMap.get(f.name) !== f)
|
|
52
|
+
if (!prevMap.get(f.name) || prevMap.get(f.name) !== f) f.setup?.();
|
|
53
53
|
});
|
|
54
|
-
_features = next;
|
|
55
|
-
notify();
|
|
56
|
-
}
|
|
54
|
+
this._features = next;
|
|
55
|
+
this.notify();
|
|
56
|
+
}
|
|
57
57
|
addFeature(feature) {
|
|
58
|
-
if (!_enabled || !feature || typeof feature.name !== 'string') {
|
|
58
|
+
if (!this._enabled || !feature || typeof feature.name !== 'string') {
|
|
59
59
|
return;
|
|
60
60
|
}
|
|
61
|
-
const existingIndex = _features.findIndex(f => f.name === feature.name);
|
|
61
|
+
const existingIndex = this._features.findIndex(f => f.name === feature.name);
|
|
62
62
|
if (existingIndex >= 0) {
|
|
63
|
-
const existing = _features[existingIndex];
|
|
63
|
+
const existing = this._features[existingIndex];
|
|
64
64
|
if (existing === feature) {
|
|
65
65
|
return;
|
|
66
66
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
_features = [..._features.slice(0, existingIndex), feature, ..._features.slice(existingIndex + 1)];
|
|
70
|
-
notify();
|
|
67
|
+
existing.cleanup?.();
|
|
68
|
+
feature.setup?.();
|
|
69
|
+
this._features = [...this._features.slice(0, existingIndex), feature, ...this._features.slice(existingIndex + 1)];
|
|
70
|
+
this.notify();
|
|
71
71
|
return;
|
|
72
72
|
}
|
|
73
|
-
|
|
74
|
-
_features = [..._features, feature];
|
|
75
|
-
notify();
|
|
76
|
-
}
|
|
73
|
+
feature.setup?.();
|
|
74
|
+
this._features = [...this._features, feature];
|
|
75
|
+
this.notify();
|
|
76
|
+
}
|
|
77
77
|
removeFeature(name) {
|
|
78
|
-
if (!_enabled) {
|
|
78
|
+
if (!this._enabled) {
|
|
79
79
|
return;
|
|
80
80
|
}
|
|
81
|
-
const feature = _features.find(f => f.name === name);
|
|
81
|
+
const feature = this._features.find(f => f.name === name);
|
|
82
82
|
if (!feature) {
|
|
83
83
|
return;
|
|
84
84
|
}
|
|
85
|
-
|
|
86
|
-
_features = _features.filter(f => f.name !== name);
|
|
87
|
-
if (_features.length === 0) {
|
|
88
|
-
_launcherVisible = false;
|
|
85
|
+
feature.cleanup?.();
|
|
86
|
+
this._features = this._features.filter(f => f.name !== name);
|
|
87
|
+
if (this._features.length === 0) {
|
|
88
|
+
this._launcherVisible = false;
|
|
89
89
|
}
|
|
90
|
-
notify();
|
|
91
|
-
}
|
|
92
|
-
reset() {
|
|
93
|
-
_launcherVisible = false;
|
|
94
|
-
_panelOpen = false;
|
|
95
|
-
_features.forEach(cleanupFeature);
|
|
96
|
-
_features = [];
|
|
97
|
-
notify();
|
|
98
|
-
},
|
|
90
|
+
this.notify();
|
|
91
|
+
}
|
|
99
92
|
hasFeatures() {
|
|
100
|
-
return _features.length > 0;
|
|
101
|
-
}
|
|
93
|
+
return this._features.length > 0;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// --- Panel ---
|
|
97
|
+
|
|
102
98
|
get panelOpen() {
|
|
103
|
-
return _panelOpen;
|
|
104
|
-
}
|
|
99
|
+
return this._panelOpen;
|
|
100
|
+
}
|
|
105
101
|
openPanel() {
|
|
106
|
-
if (!_enabled || _panelOpen) return;
|
|
107
|
-
_panelOpen = true;
|
|
108
|
-
notify();
|
|
109
|
-
}
|
|
102
|
+
if (!this._enabled || this._panelOpen) return;
|
|
103
|
+
this._panelOpen = true;
|
|
104
|
+
this.notify();
|
|
105
|
+
}
|
|
110
106
|
closePanel() {
|
|
111
|
-
if (!_panelOpen) return;
|
|
112
|
-
_panelOpen = false;
|
|
113
|
-
notify();
|
|
114
|
-
}
|
|
107
|
+
if (!this._panelOpen) return;
|
|
108
|
+
this._panelOpen = false;
|
|
109
|
+
this.notify();
|
|
110
|
+
}
|
|
115
111
|
togglePanel() {
|
|
116
|
-
if (_panelOpen) {
|
|
117
|
-
|
|
112
|
+
if (this._panelOpen) {
|
|
113
|
+
this.closePanel();
|
|
118
114
|
} else {
|
|
119
|
-
|
|
115
|
+
this.openPanel();
|
|
120
116
|
}
|
|
121
|
-
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// --- Launcher ---
|
|
120
|
+
|
|
121
|
+
get launcherVisible() {
|
|
122
|
+
return this._launcherVisible;
|
|
123
|
+
}
|
|
122
124
|
showLauncher() {
|
|
123
|
-
if (!_enabled) return;
|
|
124
|
-
_launcherVisible = true;
|
|
125
|
-
notify();
|
|
126
|
-
}
|
|
125
|
+
if (!this._enabled) return;
|
|
126
|
+
this._launcherVisible = true;
|
|
127
|
+
this.notify();
|
|
128
|
+
}
|
|
127
129
|
hideLauncher() {
|
|
128
|
-
_launcherVisible
|
|
129
|
-
|
|
130
|
-
|
|
130
|
+
if (!this._launcherVisible) return;
|
|
131
|
+
this._launcherVisible = false;
|
|
132
|
+
this.notify();
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// --- Bulk Operations ---
|
|
136
|
+
|
|
131
137
|
clearAll() {
|
|
132
|
-
_features.forEach(f => f.clear?.());
|
|
133
|
-
notify();
|
|
134
|
-
}
|
|
138
|
+
this._features.forEach(f => f.clear?.());
|
|
139
|
+
this.notify();
|
|
140
|
+
}
|
|
141
|
+
reset() {
|
|
142
|
+
this._launcherVisible = false;
|
|
143
|
+
this._panelOpen = false;
|
|
144
|
+
this._features.forEach(f => f.cleanup?.());
|
|
145
|
+
this._features = [];
|
|
146
|
+
this.notify();
|
|
147
|
+
}
|
|
135
148
|
destroy() {
|
|
136
|
-
|
|
137
|
-
|
|
149
|
+
this.reset();
|
|
150
|
+
this._listeners.clear();
|
|
138
151
|
}
|
|
139
|
-
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/** Module-level default instance for non-React scenarios and backward compatibility. */
|
|
155
|
+
export const debugToolkit = new DebugToolkitCore();
|
|
156
|
+
/**
|
|
157
|
+
* @deprecated Use `debugToolkit` or get instance from `initializeDebugToolkit()`.
|
|
158
|
+
* This is the default module-level instance exported for backward compatibility.
|
|
159
|
+
*/
|
|
160
|
+
export const DebugToolkit = debugToolkit;
|
|
140
161
|
//# sourceMappingURL=DebugToolkit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["DebugToolkitCore","_features","_launcherVisible","_panelOpen","_enabled","_listeners","Set","notify","forEach","l","features","subscribe","listener","add","delete","enabled","setEnabled","f","cleanup","replaceFeatures","next","filter","i","arr","name","findIndex","item","prevMap","Map","map","nextMap","get","setup","addFeature","feature","existingIndex","existing","slice","removeFeature","find","length","hasFeatures","panelOpen","openPanel","closePanel","togglePanel","launcherVisible","showLauncher","hideLauncher","clearAll","clear","reset","destroy","debugToolkit","DebugToolkit"],"sourceRoot":"../../../src","sources":["core/DebugToolkit.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { DebugToolkit } from './DebugToolkit';
|
|
4
|
-
import { createNetworkFeature } from '../features/network';
|
|
4
|
+
import { createNetworkFeature, addToBlacklist } from '../features/network';
|
|
5
5
|
import { createConsoleLogFeature } from '../features/console';
|
|
6
6
|
import { createZustandLogFeature } from '../features/zustand';
|
|
7
7
|
import { createNavigationLogFeature } from '../features/navigation';
|
|
8
8
|
import { createTrackFeature } from '../features/track';
|
|
9
9
|
import { createEnvironmentFeature } from '../features/environment';
|
|
10
10
|
import { createClipboardFeature } from '../features/clipboard';
|
|
11
|
-
import { daemonClient
|
|
12
|
-
import { _addDaemonEndpointToNetworkBlacklist } from '../features/network';
|
|
11
|
+
import { daemonClient } from '../utils/DaemonClient';
|
|
13
12
|
const isDebugMode = __DEV__;
|
|
14
|
-
daemonClient.setEndpointDetector(url => {
|
|
15
|
-
_addDaemonEndpointToNetworkBlacklist(url);
|
|
16
|
-
});
|
|
17
13
|
|
|
18
14
|
/** Feature-specific configuration map */
|
|
19
15
|
|
|
@@ -71,12 +67,15 @@ export function initializeDebugToolkit(options) {
|
|
|
71
67
|
return DebugToolkit;
|
|
72
68
|
}
|
|
73
69
|
DebugToolkit.replaceFeatures(resolvedFeatures);
|
|
70
|
+
daemonClient.setEndpointDetector(url => {
|
|
71
|
+
addToBlacklist(url);
|
|
72
|
+
});
|
|
74
73
|
if (DebugToolkit.hasFeatures()) {
|
|
75
74
|
DebugToolkit.showLauncher();
|
|
76
75
|
} else {
|
|
77
76
|
DebugToolkit.hideLauncher();
|
|
78
77
|
}
|
|
79
|
-
|
|
78
|
+
daemonClient.restore().catch(() => {});
|
|
80
79
|
return DebugToolkit;
|
|
81
80
|
} catch (error) {
|
|
82
81
|
console.error('[DebugToolkit] Initialization failed:', error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DebugToolkit","createNetworkFeature","createConsoleLogFeature","createZustandLogFeature","createNavigationLogFeature","createTrackFeature","createEnvironmentFeature","createClipboardFeature","daemonClient","
|
|
1
|
+
{"version":3,"names":["DebugToolkit","createNetworkFeature","addToBlacklist","createConsoleLogFeature","createZustandLogFeature","createNavigationLogFeature","createTrackFeature","createEnvironmentFeature","createClipboardFeature","daemonClient","isDebugMode","__DEV__","featureRegistry","network","console","zustand","navigation","track","environment","clipboard","DEFAULT_FEATURES","resolveFeatureConfigs","configs","features","entries","Object","name","config","creator","warn","undefined","push","resolveDefaultFeatures","map","initializeDebugToolkit","options","enabled","resolvedFeatures","setEnabled","reset","replaceFeatures","setEndpointDetector","url","hasFeatures","showLauncher","hideLauncher","restore","catch","error"],"sourceRoot":"../../../src","sources":["core/initialize.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { EnvironmentTab } from './EnvironmentTab';
|
|
4
|
-
import {
|
|
4
|
+
import { setUrlRewriter } from '../../utils/urlRewriter';
|
|
5
5
|
|
|
6
6
|
// Lazy AsyncStorage loader
|
|
7
7
|
|
|
@@ -21,10 +21,6 @@ function getAsyncStorage() {
|
|
|
21
21
|
return asyncStorageModule;
|
|
22
22
|
}
|
|
23
23
|
const STORAGE_KEY = 'debug_toolkit_env_id';
|
|
24
|
-
|
|
25
|
-
// Module-level state for synchronous URL rewriting
|
|
26
|
-
let currentHostsMap = null;
|
|
27
|
-
let activeEnvironmentId = null;
|
|
28
24
|
function buildHostsMap(environments, targetId) {
|
|
29
25
|
if (!targetId) return null;
|
|
30
26
|
const target = environments.find(e => e.id === targetId);
|
|
@@ -37,25 +33,27 @@ function buildHostsMap(environments, targetId) {
|
|
|
37
33
|
}
|
|
38
34
|
return map;
|
|
39
35
|
}
|
|
40
|
-
function createUrlRewriter() {
|
|
41
|
-
return url => {
|
|
42
|
-
if (!currentHostsMap) return url;
|
|
43
|
-
try {
|
|
44
|
-
const parsed = new URL(url);
|
|
45
|
-
const targetHost = currentHostsMap.get(parsed.host);
|
|
46
|
-
if (targetHost) {
|
|
47
|
-
return url.replace(parsed.host, targetHost);
|
|
48
|
-
}
|
|
49
|
-
} catch {
|
|
50
|
-
// Not a valid URL or relative URL — return unchanged
|
|
51
|
-
}
|
|
52
|
-
return url;
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
36
|
export const createEnvironmentFeature = initialEnvironments => {
|
|
56
37
|
const listeners = new Set();
|
|
57
38
|
let environments = initialEnvironments ?? [];
|
|
58
39
|
let initialized = false;
|
|
40
|
+
let currentHostsMap = null;
|
|
41
|
+
let activeEnvironmentId = null;
|
|
42
|
+
const createUrlRewriter = () => {
|
|
43
|
+
return url => {
|
|
44
|
+
if (!currentHostsMap) return url;
|
|
45
|
+
try {
|
|
46
|
+
const parsed = new URL(url);
|
|
47
|
+
const targetHost = currentHostsMap.get(parsed.host);
|
|
48
|
+
if (targetHost) {
|
|
49
|
+
return url.replace(parsed.host, targetHost);
|
|
50
|
+
}
|
|
51
|
+
} catch {
|
|
52
|
+
// Not a valid URL or relative URL — return unchanged
|
|
53
|
+
}
|
|
54
|
+
return url;
|
|
55
|
+
};
|
|
56
|
+
};
|
|
59
57
|
const getCurrentState = () => ({
|
|
60
58
|
environments,
|
|
61
59
|
currentEnvironmentId: activeEnvironmentId
|
|
@@ -71,9 +69,9 @@ export const createEnvironmentFeature = initialEnvironments => {
|
|
|
71
69
|
if (initialized) {
|
|
72
70
|
try {
|
|
73
71
|
if (envId && environments.length > 0) {
|
|
74
|
-
|
|
72
|
+
setUrlRewriter(createUrlRewriter());
|
|
75
73
|
} else {
|
|
76
|
-
|
|
74
|
+
setUrlRewriter(null);
|
|
77
75
|
}
|
|
78
76
|
} catch (err) {
|
|
79
77
|
if (__DEV__) console.warn('[DebugToolkit] Failed to set URL rewriter:', err);
|
|
@@ -113,7 +111,7 @@ export const createEnvironmentFeature = initialEnvironments => {
|
|
|
113
111
|
|
|
114
112
|
// Install rewriter if an environment is already selected
|
|
115
113
|
if (activeEnvironmentId && environments.length > 0) {
|
|
116
|
-
|
|
114
|
+
setUrlRewriter(createUrlRewriter());
|
|
117
115
|
}
|
|
118
116
|
|
|
119
117
|
// Async persistence load (will override if a preference exists)
|
|
@@ -126,7 +124,7 @@ export const createEnvironmentFeature = initialEnvironments => {
|
|
|
126
124
|
},
|
|
127
125
|
cleanup: () => {
|
|
128
126
|
if (!initialized) return;
|
|
129
|
-
|
|
127
|
+
setUrlRewriter(null);
|
|
130
128
|
activeEnvironmentId = null;
|
|
131
129
|
currentHostsMap = null;
|
|
132
130
|
notify();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["EnvironmentTab","
|
|
1
|
+
{"version":3,"names":["EnvironmentTab","setUrlRewriter","asyncStorageModule","asyncStorageChecked","getAsyncStorage","require","default","STORAGE_KEY","buildHostsMap","environments","targetId","target","find","e","id","map","Map","env","set","host","createEnvironmentFeature","initialEnvironments","listeners","Set","initialized","currentHostsMap","activeEnvironmentId","createUrlRewriter","url","parsed","URL","targetHost","get","replace","getCurrentState","currentEnvironmentId","notify","forEach","listener","applyEnvironment","envId","length","err","__DEV__","console","warn","persistSelection","storage","setItem","loadPersistedSelection","stored","getItem","some","name","label","renderContent","setup","getSnapshot","clear","cleanup","subscribe","add","delete","registerEnvironments","envs","switchEnvironment","getCurrentEnvironmentId","badge","substring","toUpperCase","color"],"sourceRoot":"../../../../src","sources":["features/environment/index.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { NetworkLogTab } from './NetworkLogTab';
|
|
4
|
+
import { createChannelFeature } from '../../utils/createChannelFeature';
|
|
4
5
|
import { createEventChannel } from '../../utils/createEventChannel';
|
|
5
|
-
import { createPersistedObservableStore } from '../../utils/createPersistedObservableStore';
|
|
6
6
|
import { KEYS } from '../../utils/debugPreferences';
|
|
7
|
-
import { urlRewriter } from '../../utils/urlRewriterRegistry';
|
|
8
7
|
import { startXMLHttpRequest, resetInterceptors } from './networkInterceptor';
|
|
8
|
+
import { setUrlRewriter as setInterceptorUrlRewriter } from '../../utils/urlRewriter';
|
|
9
|
+
|
|
9
10
|
// ─── Utilities ────────────────────────────────────────
|
|
10
11
|
|
|
11
12
|
function isUrlBlacklisted(url, blacklist) {
|
|
@@ -24,57 +25,35 @@ function emitNetworkLog(entry) {
|
|
|
24
25
|
|
|
25
26
|
// ─── Feature factory ──────────────────────────────────
|
|
26
27
|
|
|
27
|
-
const DEFAULT_MAX_LOGS = 200;
|
|
28
28
|
const daemonEndpointBlacklist = [];
|
|
29
29
|
export const createNetworkFeature = config => {
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
});
|
|
36
|
-
let initialized = false;
|
|
37
|
-
let unsubscribeLogs = null;
|
|
38
|
-
let stopXhrFn = null;
|
|
39
|
-
const handleLog = entry => {
|
|
40
|
-
if (isUrlBlacklisted(entry.request.url, [...blacklist, ...daemonEndpointBlacklist])) {
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
logStore.push({
|
|
44
|
-
...entry,
|
|
45
|
-
id: logStore.nextId()
|
|
46
|
-
}, maxLogs);
|
|
47
|
-
};
|
|
48
|
-
return {
|
|
30
|
+
const userBlacklist = config?.blacklist ? [...config.blacklist] : [];
|
|
31
|
+
return createChannelFeature(() => networkChannel, (payload, id) => ({
|
|
32
|
+
...payload,
|
|
33
|
+
id
|
|
34
|
+
}), {
|
|
49
35
|
name: 'network',
|
|
50
36
|
label: 'Network',
|
|
51
37
|
renderContent: NetworkLogTab,
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
unsubscribeLogs = networkChannel.subscribe(handleLog);
|
|
57
|
-
stopXhrFn = startXMLHttpRequest(emitNetworkLog);
|
|
58
|
-
initialized = true;
|
|
38
|
+
maxLogs: config?.maxLogs,
|
|
39
|
+
persist: {
|
|
40
|
+
storageKey: KEYS.networkLogs,
|
|
41
|
+
maxPersist: 30
|
|
59
42
|
},
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
},
|
|
64
|
-
cleanup: () => {
|
|
65
|
-
if (!initialized) {
|
|
66
|
-
return;
|
|
43
|
+
beforePush: payload => {
|
|
44
|
+
if (isUrlBlacklisted(payload.request.url, [...userBlacklist, ...daemonEndpointBlacklist])) {
|
|
45
|
+
return null;
|
|
67
46
|
}
|
|
68
|
-
|
|
69
|
-
unsubscribeLogs?.();
|
|
70
|
-
unsubscribeLogs = null;
|
|
71
|
-
stopXhrFn?.();
|
|
72
|
-
stopXhrFn = null;
|
|
73
|
-
logStore.clear();
|
|
74
|
-
initialized = false;
|
|
47
|
+
return payload;
|
|
75
48
|
},
|
|
76
|
-
|
|
77
|
-
|
|
49
|
+
onSetup: () => {
|
|
50
|
+
const stopXhr = startXMLHttpRequest(emitNetworkLog);
|
|
51
|
+
return () => {
|
|
52
|
+
setInterceptorUrlRewriter(null);
|
|
53
|
+
stopXhr();
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
});
|
|
78
57
|
};
|
|
79
58
|
function normalizeDaemonEndpoint(endpoint) {
|
|
80
59
|
const trimmed = endpoint.trim().replace(/\/+$/, '');
|
|
@@ -88,7 +67,7 @@ function normalizeDaemonEndpoint(endpoint) {
|
|
|
88
67
|
return trimmed;
|
|
89
68
|
}
|
|
90
69
|
}
|
|
91
|
-
export function
|
|
70
|
+
export function addToBlacklist(endpoint) {
|
|
92
71
|
const normalized = normalizeDaemonEndpoint(endpoint);
|
|
93
72
|
if (!normalized || daemonEndpointBlacklist.includes(normalized)) {
|
|
94
73
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NetworkLogTab","
|
|
1
|
+
{"version":3,"names":["NetworkLogTab","createChannelFeature","createEventChannel","KEYS","startXMLHttpRequest","resetInterceptors","setUrlRewriter","setInterceptorUrlRewriter","isUrlBlacklisted","url","blacklist","some","pattern","RegExp","test","includes","networkChannel","emitNetworkLog","entry","emit","daemonEndpointBlacklist","createNetworkFeature","config","userBlacklist","payload","id","name","label","renderContent","maxLogs","persist","storageKey","networkLogs","maxPersist","beforePush","request","onSetup","stopXhr","normalizeDaemonEndpoint","endpoint","trimmed","trim","replace","URL","origin","pathname","addToBlacklist","normalized","push","_isNetworkUrlBlacklistedForTesting","_resetNetworkForTesting","splice","length"],"sourceRoot":"../../../../src","sources":["features/network/index.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { getUrlRewriter } from '../../utils/urlRewriter';
|
|
4
4
|
// Intercepts React Native's XMLHttpRequest transport layer.
|
|
5
5
|
// RN fetch and axios (default adapter) both go through XHR — one hook captures everything.
|
|
6
6
|
|
|
7
7
|
// ─── Shared helpers ────────────────────────────────────
|
|
8
8
|
|
|
9
9
|
function rewriteUrl(url) {
|
|
10
|
-
const rewriter =
|
|
10
|
+
const rewriter = getUrlRewriter();
|
|
11
11
|
if (!rewriter) {
|
|
12
12
|
return url;
|
|
13
13
|
}
|
|
@@ -129,7 +129,7 @@ export function startXMLHttpRequest(emit) {
|
|
|
129
129
|
originalXhrSend = CurrentXMLHttpRequest.prototype.send;
|
|
130
130
|
originalXhrSetRequestHeader = CurrentXMLHttpRequest.prototype.setRequestHeader;
|
|
131
131
|
CurrentXMLHttpRequest.prototype.open = function interceptedOpen(method, url, ...args) {
|
|
132
|
-
const rewrittenUrl =
|
|
132
|
+
const rewrittenUrl = rewriteUrl(url);
|
|
133
133
|
if (shouldIgnoreUrl(rewrittenUrl)) {
|
|
134
134
|
return originalXhrOpen.call(this, method, rewrittenUrl, ...args);
|
|
135
135
|
}
|