react-native-debug-toolkit 3.2.1 → 3.2.2
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 +13 -2
- package/README.zh-CN.md +13 -2
- package/android/build.gradle +34 -0
- package/android/src/main/AndroidManifest.xml +1 -0
- package/android/src/main/java/com/reactnativedebugtoolkit/DebugToolkitDevConnectModule.java +70 -0
- package/android/src/main/java/com/reactnativedebugtoolkit/ReactNativeDebugToolkitPackage.java +25 -0
- package/ios/DebugToolkitDevConnect.mm +67 -0
- package/lib/commonjs/features/devConnect/DevConnectQrScanner.js +18 -7
- package/lib/commonjs/features/devConnect/DevConnectQrScanner.js.map +1 -1
- package/lib/commonjs/features/devConnect/DevConnectTab.js +232 -161
- package/lib/commonjs/features/devConnect/DevConnectTab.js.map +1 -1
- package/lib/commonjs/features/devConnect/devConnectPreferences.js +35 -5
- package/lib/commonjs/features/devConnect/devConnectPreferences.js.map +1 -1
- package/lib/commonjs/features/devConnect/devConnectUtils.js +99 -15
- package/lib/commonjs/features/devConnect/devConnectUtils.js.map +1 -1
- package/lib/commonjs/features/devConnect/index.js +39 -2
- package/lib/commonjs/features/devConnect/index.js.map +1 -1
- package/lib/commonjs/features/devConnect/nativeDevConnect.js +110 -0
- package/lib/commonjs/features/devConnect/nativeDevConnect.js.map +1 -0
- package/lib/commonjs/features/devConnect/platformDetect.js +7 -11
- package/lib/commonjs/features/devConnect/platformDetect.js.map +1 -1
- package/lib/commonjs/utils/debugPreferences.js +43 -6
- package/lib/commonjs/utils/debugPreferences.js.map +1 -1
- package/lib/module/features/devConnect/DevConnectQrScanner.js +18 -7
- package/lib/module/features/devConnect/DevConnectQrScanner.js.map +1 -1
- package/lib/module/features/devConnect/DevConnectTab.js +235 -164
- package/lib/module/features/devConnect/DevConnectTab.js.map +1 -1
- package/lib/module/features/devConnect/devConnectPreferences.js +33 -6
- package/lib/module/features/devConnect/devConnectPreferences.js.map +1 -1
- package/lib/module/features/devConnect/devConnectUtils.js +94 -15
- package/lib/module/features/devConnect/devConnectUtils.js.map +1 -1
- package/lib/module/features/devConnect/index.js +11 -3
- package/lib/module/features/devConnect/index.js.map +1 -1
- package/lib/module/features/devConnect/nativeDevConnect.js +104 -0
- package/lib/module/features/devConnect/nativeDevConnect.js.map +1 -0
- package/lib/module/features/devConnect/platformDetect.js +8 -12
- package/lib/module/features/devConnect/platformDetect.js.map +1 -1
- package/lib/module/utils/debugPreferences.js +43 -6
- package/lib/module/utils/debugPreferences.js.map +1 -1
- package/lib/typescript/src/features/devConnect/DevConnectQrScanner.d.ts +3 -2
- package/lib/typescript/src/features/devConnect/DevConnectQrScanner.d.ts.map +1 -1
- package/lib/typescript/src/features/devConnect/DevConnectTab.d.ts.map +1 -1
- package/lib/typescript/src/features/devConnect/devConnectPreferences.d.ts +6 -0
- package/lib/typescript/src/features/devConnect/devConnectPreferences.d.ts.map +1 -1
- package/lib/typescript/src/features/devConnect/devConnectUtils.d.ts +18 -1
- package/lib/typescript/src/features/devConnect/devConnectUtils.d.ts.map +1 -1
- package/lib/typescript/src/features/devConnect/index.d.ts +2 -2
- package/lib/typescript/src/features/devConnect/index.d.ts.map +1 -1
- package/lib/typescript/src/features/devConnect/nativeDevConnect.d.ts +17 -0
- package/lib/typescript/src/features/devConnect/nativeDevConnect.d.ts.map +1 -0
- package/lib/typescript/src/features/devConnect/platformDetect.d.ts.map +1 -1
- package/lib/typescript/src/features/devConnect/types.d.ts +3 -0
- package/lib/typescript/src/features/devConnect/types.d.ts.map +1 -1
- package/lib/typescript/src/utils/debugPreferences.d.ts +2 -0
- package/lib/typescript/src/utils/debugPreferences.d.ts.map +1 -1
- package/package.json +4 -1
- package/react-native-debug-toolkit.podspec +18 -0
- package/src/features/devConnect/DevConnectQrScanner.tsx +20 -9
- package/src/features/devConnect/DevConnectTab.tsx +227 -105
- package/src/features/devConnect/devConnectPreferences.ts +50 -5
- package/src/features/devConnect/devConnectUtils.ts +122 -15
- package/src/features/devConnect/index.ts +13 -0
- package/src/features/devConnect/nativeDevConnect.ts +128 -0
- package/src/features/devConnect/platformDetect.ts +8 -13
- package/src/features/devConnect/types.ts +3 -0
- package/src/utils/debugPreferences.ts +49 -4
|
@@ -6,20 +6,50 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.loadDevConnectPreferences = loadDevConnectPreferences;
|
|
7
7
|
exports.restoreDevConnectSettingsToDaemon = restoreDevConnectSettingsToDaemon;
|
|
8
8
|
exports.saveComputerHost = saveComputerHost;
|
|
9
|
+
exports.saveComputerTarget = saveComputerTarget;
|
|
10
|
+
exports.saveDaemonPort = saveDaemonPort;
|
|
11
|
+
exports.saveMetroPort = saveMetroPort;
|
|
9
12
|
var _DaemonClient = require("../../utils/DaemonClient");
|
|
10
13
|
var _debugPreferences = require("../../utils/debugPreferences");
|
|
11
14
|
var _devConnectUtils = require("./devConnectUtils");
|
|
12
15
|
var _platformDetect = require("./platformDetect");
|
|
13
16
|
async function loadDevConnectPreferences() {
|
|
14
17
|
const storedHost = await (0, _debugPreferences.getPreference)(_debugPreferences.KEYS.computerHost);
|
|
18
|
+
const storedMetroPort = await (0, _debugPreferences.getPreference)(_debugPreferences.KEYS.metroPort);
|
|
19
|
+
const storedDaemonPort = await (0, _debugPreferences.getPreference)(_debugPreferences.KEYS.daemonPort);
|
|
15
20
|
return {
|
|
16
|
-
computerHost: storedHost ? (0, _devConnectUtils.normalizeComputerHost)(storedHost) ?? '' : ''
|
|
21
|
+
computerHost: storedHost ? (0, _devConnectUtils.normalizeComputerHost)(storedHost) ?? '' : '',
|
|
22
|
+
metroPort: storedMetroPort ? (0, _devConnectUtils.normalizePort)(storedMetroPort) ?? _devConnectUtils.DEFAULT_METRO_PORT : _devConnectUtils.DEFAULT_METRO_PORT,
|
|
23
|
+
daemonPort: storedDaemonPort ? (0, _devConnectUtils.normalizePort)(storedDaemonPort) ?? _devConnectUtils.DEFAULT_DAEMON_PORT : _devConnectUtils.DEFAULT_DAEMON_PORT
|
|
17
24
|
};
|
|
18
25
|
}
|
|
26
|
+
async function saveComputerTarget(value) {
|
|
27
|
+
const target = (0, _devConnectUtils.parseComputerTarget)(value);
|
|
28
|
+
if (!target) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
await (0, _debugPreferences.setPreference)(_debugPreferences.KEYS.computerHost, target.computerHost);
|
|
32
|
+
await (0, _debugPreferences.setPreference)(_debugPreferences.KEYS.metroPort, target.metroPort);
|
|
33
|
+
return target;
|
|
34
|
+
}
|
|
19
35
|
async function saveComputerHost(value) {
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
36
|
+
const target = await saveComputerTarget(value);
|
|
37
|
+
return target?.computerHost ?? null;
|
|
38
|
+
}
|
|
39
|
+
async function saveMetroPort(value) {
|
|
40
|
+
const normalized = (0, _devConnectUtils.normalizePort)(value);
|
|
41
|
+
if (!normalized) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
await (0, _debugPreferences.setPreference)(_debugPreferences.KEYS.metroPort, normalized);
|
|
45
|
+
return normalized;
|
|
46
|
+
}
|
|
47
|
+
async function saveDaemonPort(value) {
|
|
48
|
+
const normalized = (0, _devConnectUtils.normalizePort)(value);
|
|
49
|
+
if (!normalized) {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
await (0, _debugPreferences.setPreference)(_debugPreferences.KEYS.daemonPort, normalized);
|
|
23
53
|
return normalized;
|
|
24
54
|
}
|
|
25
55
|
async function restoreDevConnectSettingsToDaemon() {
|
|
@@ -28,7 +58,7 @@ async function restoreDevConnectSettingsToDaemon() {
|
|
|
28
58
|
_DaemonClient.daemonClient.configure({
|
|
29
59
|
mode,
|
|
30
60
|
endpoint: '',
|
|
31
|
-
deviceHost: mode === 'simulator' ? '' : preferences.computerHost,
|
|
61
|
+
deviceHost: mode === 'simulator' ? '' : (0, _devConnectUtils.buildDaemonDeviceHost)(preferences.computerHost, preferences.daemonPort),
|
|
32
62
|
token: ''
|
|
33
63
|
});
|
|
34
64
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_DaemonClient","require","_debugPreferences","_devConnectUtils","_platformDetect","loadDevConnectPreferences","storedHost","getPreference","KEYS","computerHost","normalizeComputerHost","
|
|
1
|
+
{"version":3,"names":["_DaemonClient","require","_debugPreferences","_devConnectUtils","_platformDetect","loadDevConnectPreferences","storedHost","getPreference","KEYS","computerHost","storedMetroPort","metroPort","storedDaemonPort","daemonPort","normalizeComputerHost","normalizePort","DEFAULT_METRO_PORT","DEFAULT_DAEMON_PORT","saveComputerTarget","value","target","parseComputerTarget","setPreference","saveComputerHost","saveMetroPort","normalized","saveDaemonPort","restoreDevConnectSettingsToDaemon","preferences","mode","isSimulator","daemonClient","configure","endpoint","deviceHost","buildDaemonDeviceHost","token"],"sourceRoot":"../../../../src","sources":["features/devConnect/devConnectPreferences.ts"],"mappings":";;;;;;;;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AACA,IAAAC,iBAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAF,OAAA;AASA,IAAAG,eAAA,GAAAH,OAAA;AAQO,eAAeI,yBAAyBA,CAAA,EAAmC;EAChF,MAAMC,UAAU,GAAG,MAAM,IAAAC,+BAAa,EAACC,sBAAI,CAACC,YAAY,CAAC;EACzD,MAAMC,eAAe,GAAG,MAAM,IAAAH,+BAAa,EAACC,sBAAI,CAACG,SAAS,CAAC;EAC3D,MAAMC,gBAAgB,GAAG,MAAM,IAAAL,+BAAa,EAACC,sBAAI,CAACK,UAAU,CAAC;EAC7D,OAAO;IACLJ,YAAY,EAAEH,UAAU,GAAG,IAAAQ,sCAAqB,EAACR,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE;IACvEK,SAAS,EAAED,eAAe,GAAG,IAAAK,8BAAa,EAACL,eAAe,CAAC,IAAIM,mCAAkB,GAAGA,mCAAkB;IACtGH,UAAU,EAAED,gBAAgB,GAAG,IAAAG,8BAAa,EAACH,gBAAgB,CAAC,IAAIK,oCAAmB,GAAGA;EAC1F,CAAC;AACH;AAEO,eAAeC,kBAAkBA,CAACC,KAAa,EAAwC;EAC5F,MAAMC,MAAM,GAAG,IAAAC,oCAAmB,EAACF,KAAK,CAAC;EACzC,IAAI,CAACC,MAAM,EAAE;IACX,OAAO,IAAI;EACb;EAEA,MAAM,IAAAE,+BAAa,EAACd,sBAAI,CAACC,YAAY,EAAEW,MAAM,CAACX,YAAY,CAAC;EAC3D,MAAM,IAAAa,+BAAa,EAACd,sBAAI,CAACG,SAAS,EAAES,MAAM,CAACT,SAAS,CAAC;EACrD,OAAOS,MAAM;AACf;AAEO,eAAeG,gBAAgBA,CAACJ,KAAa,EAA0B;EAC5E,MAAMC,MAAM,GAAG,MAAMF,kBAAkB,CAACC,KAAK,CAAC;EAC9C,OAAOC,MAAM,EAAEX,YAAY,IAAI,IAAI;AACrC;AAEO,eAAee,aAAaA,CAACL,KAAa,EAA0B;EACzE,MAAMM,UAAU,GAAG,IAAAV,8BAAa,EAACI,KAAK,CAAC;EACvC,IAAI,CAACM,UAAU,EAAE;IACf,OAAO,IAAI;EACb;EAEA,MAAM,IAAAH,+BAAa,EAACd,sBAAI,CAACG,SAAS,EAAEc,UAAU,CAAC;EAC/C,OAAOA,UAAU;AACnB;AAEO,eAAeC,cAAcA,CAACP,KAAa,EAA0B;EAC1E,MAAMM,UAAU,GAAG,IAAAV,8BAAa,EAACI,KAAK,CAAC;EACvC,IAAI,CAACM,UAAU,EAAE;IACf,OAAO,IAAI;EACb;EAEA,MAAM,IAAAH,+BAAa,EAACd,sBAAI,CAACK,UAAU,EAAEY,UAAU,CAAC;EAChD,OAAOA,UAAU;AACnB;AAEO,eAAeE,iCAAiCA,CAAA,EAAkB;EACvE,MAAMC,WAAW,GAAG,MAAMvB,yBAAyB,CAAC,CAAC;EACrD,MAAMwB,IAAI,GAAG,IAAAC,2BAAW,EAAC,CAAC,GAAG,WAAW,GAAY,QAAiB;EACrEC,0BAAY,CAACC,SAAS,CAAC;IACrBH,IAAI;IACJI,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAEL,IAAI,KAAK,WAAW,GAC5B,EAAE,GACF,IAAAM,sCAAqB,EAACP,WAAW,CAACnB,YAAY,EAAEmB,WAAW,CAACf,UAAU,CAAC;IAC3EuB,KAAK,EAAE;EACT,CAAC,CAAC;AACJ","ignoreList":[]}
|
|
@@ -3,15 +3,25 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.DEFAULT_METRO_PORT = exports.DEFAULT_DAEMON_PORT = void 0;
|
|
7
|
+
exports.buildDaemonDeviceHost = buildDaemonDeviceHost;
|
|
8
|
+
exports.buildMetroTarget = buildMetroTarget;
|
|
6
9
|
exports.buildMetroUrls = buildMetroUrls;
|
|
7
10
|
exports.normalizeComputerHost = normalizeComputerHost;
|
|
11
|
+
exports.normalizePort = normalizePort;
|
|
12
|
+
exports.parseComputerTarget = parseComputerTarget;
|
|
8
13
|
exports.parseMetroQrPayload = parseMetroQrPayload;
|
|
9
|
-
const
|
|
14
|
+
const DEFAULT_METRO_PORT = exports.DEFAULT_METRO_PORT = '8081';
|
|
15
|
+
const DEFAULT_DAEMON_PORT = exports.DEFAULT_DAEMON_PORT = '3799';
|
|
10
16
|
function isValidIpv4(host) {
|
|
11
17
|
const parts = host.split('.');
|
|
12
|
-
if (parts.length !== 4)
|
|
18
|
+
if (parts.length !== 4) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
13
21
|
return parts.every(part => {
|
|
14
|
-
if (!/^\d{1,3}$/.test(part))
|
|
22
|
+
if (!/^\d{1,3}$/.test(part)) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
15
25
|
const value = Number(part);
|
|
16
26
|
return value >= 0 && value <= 255 && String(value) === part;
|
|
17
27
|
});
|
|
@@ -23,31 +33,105 @@ function toUrlInput(raw) {
|
|
|
23
33
|
}
|
|
24
34
|
return `http://${trimmed}`;
|
|
25
35
|
}
|
|
26
|
-
function
|
|
36
|
+
function parseHostAndPort(raw) {
|
|
27
37
|
const trimmed = raw.trim();
|
|
28
|
-
if (!trimmed)
|
|
38
|
+
if (!trimmed) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
29
41
|
try {
|
|
30
42
|
const parsed = new URL(toUrlInput(trimmed));
|
|
31
|
-
|
|
32
|
-
|
|
43
|
+
return {
|
|
44
|
+
host: parsed.hostname.trim(),
|
|
45
|
+
port: parsed.port.trim()
|
|
46
|
+
};
|
|
33
47
|
} catch {
|
|
34
48
|
return null;
|
|
35
49
|
}
|
|
36
50
|
}
|
|
37
|
-
function
|
|
38
|
-
const
|
|
39
|
-
if (!
|
|
51
|
+
function normalizeComputerHost(raw) {
|
|
52
|
+
const parsed = parseHostAndPort(raw);
|
|
53
|
+
if (!parsed) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
return isValidIpv4(parsed.host) ? parsed.host : null;
|
|
57
|
+
}
|
|
58
|
+
function normalizePort(raw) {
|
|
59
|
+
const trimmed = raw.trim();
|
|
60
|
+
if (!/^\d+$/.test(trimmed)) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
const value = Number(trimmed);
|
|
64
|
+
if (!Number.isInteger(value) || value < 1 || value > 65535) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
return String(value);
|
|
68
|
+
}
|
|
69
|
+
function parseComputerTarget(raw) {
|
|
70
|
+
const parsed = parseHostAndPort(raw);
|
|
71
|
+
if (!parsed || !isValidIpv4(parsed.host)) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
const metroPort = parsed.port ? normalizePort(parsed.port) : DEFAULT_METRO_PORT;
|
|
75
|
+
if (!metroPort) {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
computerHost: parsed.host,
|
|
80
|
+
metroPort
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
function normalizeMetroHost(rawHost) {
|
|
84
|
+
const parsed = parseHostAndPort(rawHost);
|
|
85
|
+
if (!parsed) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
if (parsed.host === 'localhost') {
|
|
89
|
+
return parsed.host;
|
|
90
|
+
}
|
|
91
|
+
return isValidIpv4(parsed.host) ? parsed.host : null;
|
|
92
|
+
}
|
|
93
|
+
function buildMetroTarget(rawHost, rawPort = DEFAULT_METRO_PORT) {
|
|
94
|
+
const host = normalizeMetroHost(rawHost);
|
|
95
|
+
if (!host) {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
const port = normalizePort(rawPort);
|
|
99
|
+
if (!port) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
40
102
|
return {
|
|
41
|
-
|
|
42
|
-
|
|
103
|
+
host,
|
|
104
|
+
port,
|
|
105
|
+
hostPort: `${host}:${port}`,
|
|
106
|
+
statusUrl: `http://${host}:${port}/status`
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
function buildMetroUrls(rawHost, rawPort = DEFAULT_METRO_PORT) {
|
|
110
|
+
const target = buildMetroTarget(rawHost, rawPort);
|
|
111
|
+
if (!target) {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
expUrl: `exp://${target.hostPort}`,
|
|
116
|
+
httpUrl: `http://${target.hostPort}`
|
|
43
117
|
};
|
|
44
118
|
}
|
|
45
119
|
function parseMetroQrPayload(payload) {
|
|
46
|
-
const
|
|
47
|
-
if (!
|
|
120
|
+
const target = parseComputerTarget(payload);
|
|
121
|
+
if (!target) {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
48
124
|
return {
|
|
49
|
-
|
|
125
|
+
...target,
|
|
50
126
|
source: payload
|
|
51
127
|
};
|
|
52
128
|
}
|
|
129
|
+
function buildDaemonDeviceHost(computerHost, daemonPort) {
|
|
130
|
+
const host = normalizeComputerHost(computerHost);
|
|
131
|
+
if (!host) {
|
|
132
|
+
return '';
|
|
133
|
+
}
|
|
134
|
+
const port = normalizePort(daemonPort) ?? DEFAULT_DAEMON_PORT;
|
|
135
|
+
return port === DEFAULT_DAEMON_PORT ? host : `${host}:${port}`;
|
|
136
|
+
}
|
|
53
137
|
//# sourceMappingURL=devConnectUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["DEFAULT_METRO_PORT","exports","DEFAULT_DAEMON_PORT","isValidIpv4","host","parts","split","length","every","part","test","value","Number","String","toUrlInput","raw","trimmed","trim","parseHostAndPort","parsed","URL","hostname","port","normalizeComputerHost","normalizePort","isInteger","parseComputerTarget","metroPort","computerHost","normalizeMetroHost","rawHost","buildMetroTarget","rawPort","hostPort","statusUrl","buildMetroUrls","target","expUrl","httpUrl","parseMetroQrPayload","payload","source","buildDaemonDeviceHost","daemonPort"],"sourceRoot":"../../../../src","sources":["features/devConnect/devConnectUtils.ts"],"mappings":";;;;;;;;;;;;;AAAO,MAAMA,kBAAkB,GAAAC,OAAA,CAAAD,kBAAA,GAAG,MAAM;AACjC,MAAME,mBAAmB,GAAAD,OAAA,CAAAC,mBAAA,GAAG,MAAM;AAyBzC,SAASC,WAAWA,CAACC,IAAY,EAAW;EAC1C,MAAMC,KAAK,GAAGD,IAAI,CAACE,KAAK,CAAC,GAAG,CAAC;EAC7B,IAAID,KAAK,CAACE,MAAM,KAAK,CAAC,EAAE;IACtB,OAAO,KAAK;EACd;EAEA,OAAOF,KAAK,CAACG,KAAK,CAAEC,IAAI,IAAK;IAC3B,IAAI,CAAC,WAAW,CAACC,IAAI,CAACD,IAAI,CAAC,EAAE;MAC3B,OAAO,KAAK;IACd;IACA,MAAME,KAAK,GAAGC,MAAM,CAACH,IAAI,CAAC;IAC1B,OAAOE,KAAK,IAAI,CAAC,IAAIA,KAAK,IAAI,GAAG,IAAIE,MAAM,CAACF,KAAK,CAAC,KAAKF,IAAI;EAC7D,CAAC,CAAC;AACJ;AAEA,SAASK,UAAUA,CAACC,GAAW,EAAU;EACvC,MAAMC,OAAO,GAAGD,GAAG,CAACE,IAAI,CAAC,CAAC;EAC1B,IAAI,8BAA8B,CAACP,IAAI,CAACM,OAAO,CAAC,EAAE;IAChD,OAAOA,OAAO;EAChB;EACA,OAAO,UAAUA,OAAO,EAAE;AAC5B;AAEA,SAASE,gBAAgBA,CAACH,GAAW,EAAyC;EAC5E,MAAMC,OAAO,GAAGD,GAAG,CAACE,IAAI,CAAC,CAAC;EAC1B,IAAI,CAACD,OAAO,EAAE;IACZ,OAAO,IAAI;EACb;EAEA,IAAI;IACF,MAAMG,MAAM,GAAG,IAAIC,GAAG,CAACN,UAAU,CAACE,OAAO,CAAC,CAAC;IAC3C,OAAO;MACLZ,IAAI,EAAEe,MAAM,CAACE,QAAQ,CAACJ,IAAI,CAAC,CAAC;MAC5BK,IAAI,EAAEH,MAAM,CAACG,IAAI,CAACL,IAAI,CAAC;IACzB,CAAC;EACH,CAAC,CAAC,MAAM;IACN,OAAO,IAAI;EACb;AACF;AAEO,SAASM,qBAAqBA,CAACR,GAAW,EAAiB;EAChE,MAAMI,MAAM,GAAGD,gBAAgB,CAACH,GAAG,CAAC;EACpC,IAAI,CAACI,MAAM,EAAE;IACX,OAAO,IAAI;EACb;EAEA,OAAOhB,WAAW,CAACgB,MAAM,CAACf,IAAI,CAAC,GAAGe,MAAM,CAACf,IAAI,GAAG,IAAI;AACtD;AAEO,SAASoB,aAAaA,CAACT,GAAW,EAAiB;EACxD,MAAMC,OAAO,GAAGD,GAAG,CAACE,IAAI,CAAC,CAAC;EAC1B,IAAI,CAAC,OAAO,CAACP,IAAI,CAACM,OAAO,CAAC,EAAE;IAC1B,OAAO,IAAI;EACb;EAEA,MAAML,KAAK,GAAGC,MAAM,CAACI,OAAO,CAAC;EAC7B,IAAI,CAACJ,MAAM,CAACa,SAAS,CAACd,KAAK,CAAC,IAAIA,KAAK,GAAG,CAAC,IAAIA,KAAK,GAAG,KAAK,EAAE;IAC1D,OAAO,IAAI;EACb;EACA,OAAOE,MAAM,CAACF,KAAK,CAAC;AACtB;AAEO,SAASe,mBAAmBA,CAACX,GAAW,EAA+B;EAC5E,MAAMI,MAAM,GAAGD,gBAAgB,CAACH,GAAG,CAAC;EACpC,IAAI,CAACI,MAAM,IAAI,CAAChB,WAAW,CAACgB,MAAM,CAACf,IAAI,CAAC,EAAE;IACxC,OAAO,IAAI;EACb;EAEA,MAAMuB,SAAS,GAAGR,MAAM,CAACG,IAAI,GACzBE,aAAa,CAACL,MAAM,CAACG,IAAI,CAAC,GAC1BtB,kBAAkB;EACtB,IAAI,CAAC2B,SAAS,EAAE;IACd,OAAO,IAAI;EACb;EAEA,OAAO;IACLC,YAAY,EAAET,MAAM,CAACf,IAAI;IACzBuB;EACF,CAAC;AACH;AAEA,SAASE,kBAAkBA,CAACC,OAAe,EAAiB;EAC1D,MAAMX,MAAM,GAAGD,gBAAgB,CAACY,OAAO,CAAC;EACxC,IAAI,CAACX,MAAM,EAAE;IACX,OAAO,IAAI;EACb;EACA,IAAIA,MAAM,CAACf,IAAI,KAAK,WAAW,EAAE;IAC/B,OAAOe,MAAM,CAACf,IAAI;EACpB;EACA,OAAOD,WAAW,CAACgB,MAAM,CAACf,IAAI,CAAC,GAAGe,MAAM,CAACf,IAAI,GAAG,IAAI;AACtD;AAEO,SAAS2B,gBAAgBA,CAACD,OAAe,EAAEE,OAAO,GAAGhC,kBAAkB,EAAsB;EAClG,MAAMI,IAAI,GAAGyB,kBAAkB,CAACC,OAAO,CAAC;EACxC,IAAI,CAAC1B,IAAI,EAAE;IACT,OAAO,IAAI;EACb;EAEA,MAAMkB,IAAI,GAAGE,aAAa,CAACQ,OAAO,CAAC;EACnC,IAAI,CAACV,IAAI,EAAE;IACT,OAAO,IAAI;EACb;EAEA,OAAO;IACLlB,IAAI;IACJkB,IAAI;IACJW,QAAQ,EAAE,GAAG7B,IAAI,IAAIkB,IAAI,EAAE;IAC3BY,SAAS,EAAE,UAAU9B,IAAI,IAAIkB,IAAI;EACnC,CAAC;AACH;AAEO,SAASa,cAAcA,CAACL,OAAe,EAAEE,OAAO,GAAGhC,kBAAkB,EAAoB;EAC9F,MAAMoC,MAAM,GAAGL,gBAAgB,CAACD,OAAO,EAAEE,OAAO,CAAC;EACjD,IAAI,CAACI,MAAM,EAAE;IACX,OAAO,IAAI;EACb;EAEA,OAAO;IACLC,MAAM,EAAE,SAASD,MAAM,CAACH,QAAQ,EAAE;IAClCK,OAAO,EAAE,UAAUF,MAAM,CAACH,QAAQ;EACpC,CAAC;AACH;AAEO,SAASM,mBAAmBA,CAACC,OAAe,EAA+B;EAChF,MAAMJ,MAAM,GAAGV,mBAAmB,CAACc,OAAO,CAAC;EAC3C,IAAI,CAACJ,MAAM,EAAE;IACX,OAAO,IAAI;EACb;EACA,OAAO;IAAE,GAAGA,MAAM;IAAEK,MAAM,EAAED;EAAQ,CAAC;AACvC;AAEO,SAASE,qBAAqBA,CAACd,YAAoB,EAAEe,UAAkB,EAAU;EACtF,MAAMvC,IAAI,GAAGmB,qBAAqB,CAACK,YAAY,CAAC;EAChD,IAAI,CAACxB,IAAI,EAAE;IACT,OAAO,EAAE;EACX;EAEA,MAAMkB,IAAI,GAAGE,aAAa,CAACmB,UAAU,CAAC,IAAIzC,mBAAmB;EAC7D,OAAOoB,IAAI,KAAKpB,mBAAmB,GAAGE,IAAI,GAAG,GAAGA,IAAI,IAAIkB,IAAI,EAAE;AAChE","ignoreList":[]}
|
|
@@ -22,6 +22,18 @@ Object.defineProperty(exports, "normalizeComputerHost", {
|
|
|
22
22
|
return _devConnectUtils.normalizeComputerHost;
|
|
23
23
|
}
|
|
24
24
|
});
|
|
25
|
+
Object.defineProperty(exports, "normalizePort", {
|
|
26
|
+
enumerable: true,
|
|
27
|
+
get: function () {
|
|
28
|
+
return _devConnectUtils.normalizePort;
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
Object.defineProperty(exports, "parseComputerTarget", {
|
|
32
|
+
enumerable: true,
|
|
33
|
+
get: function () {
|
|
34
|
+
return _devConnectUtils.parseComputerTarget;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
25
37
|
Object.defineProperty(exports, "parseMetroQrPayload", {
|
|
26
38
|
enumerable: true,
|
|
27
39
|
get: function () {
|
|
@@ -40,18 +52,40 @@ Object.defineProperty(exports, "saveComputerHost", {
|
|
|
40
52
|
return _devConnectPreferences.saveComputerHost;
|
|
41
53
|
}
|
|
42
54
|
});
|
|
55
|
+
Object.defineProperty(exports, "saveComputerTarget", {
|
|
56
|
+
enumerable: true,
|
|
57
|
+
get: function () {
|
|
58
|
+
return _devConnectPreferences.saveComputerTarget;
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
Object.defineProperty(exports, "saveDaemonPort", {
|
|
62
|
+
enumerable: true,
|
|
63
|
+
get: function () {
|
|
64
|
+
return _devConnectPreferences.saveDaemonPort;
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
Object.defineProperty(exports, "saveMetroPort", {
|
|
68
|
+
enumerable: true,
|
|
69
|
+
get: function () {
|
|
70
|
+
return _devConnectPreferences.saveMetroPort;
|
|
71
|
+
}
|
|
72
|
+
});
|
|
43
73
|
var _DevConnectTab = require("./DevConnectTab");
|
|
44
74
|
var _cameraKit = require("./cameraKit");
|
|
45
75
|
var _devConnectPreferences = require("./devConnectPreferences");
|
|
76
|
+
var _devConnectUtils = require("./devConnectUtils");
|
|
77
|
+
var _nativeDevConnect = require("./nativeDevConnect");
|
|
46
78
|
var _platformDetect = require("./platformDetect");
|
|
47
79
|
var _DaemonClient = require("../../utils/DaemonClient");
|
|
48
|
-
var _devConnectUtils = require("./devConnectUtils");
|
|
49
80
|
const createDevConnectFeature = () => {
|
|
50
81
|
const listeners = new Set();
|
|
51
82
|
let state = {
|
|
52
83
|
isSimulator: (0, _platformDetect.isSimulator)(),
|
|
53
84
|
computerHost: '',
|
|
85
|
+
metroPort: _devConnectUtils.DEFAULT_METRO_PORT,
|
|
86
|
+
daemonPort: _devConnectUtils.DEFAULT_DAEMON_PORT,
|
|
54
87
|
qrAvailable: (0, _cameraKit.isCameraKitAvailable)(),
|
|
88
|
+
nativeMetroAvailable: (0, _nativeDevConnect.isNativeDevConnectAvailable)(),
|
|
55
89
|
streaming: _DaemonClient.daemonClient.isConnected()
|
|
56
90
|
};
|
|
57
91
|
const notify = () => {
|
|
@@ -69,7 +103,10 @@ const createDevConnectFeature = () => {
|
|
|
69
103
|
(0, _devConnectPreferences.loadDevConnectPreferences)().then(preferences => {
|
|
70
104
|
state = {
|
|
71
105
|
...state,
|
|
72
|
-
computerHost: preferences.computerHost
|
|
106
|
+
computerHost: preferences.computerHost,
|
|
107
|
+
metroPort: preferences.metroPort,
|
|
108
|
+
daemonPort: preferences.daemonPort,
|
|
109
|
+
nativeMetroAvailable: (0, _nativeDevConnect.isNativeDevConnectAvailable)()
|
|
73
110
|
};
|
|
74
111
|
notify();
|
|
75
112
|
}).catch(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_DevConnectTab","require","_cameraKit","_devConnectPreferences","
|
|
1
|
+
{"version":3,"names":["_DevConnectTab","require","_cameraKit","_devConnectPreferences","_devConnectUtils","_nativeDevConnect","_platformDetect","_DaemonClient","createDevConnectFeature","listeners","Set","state","isSimulator","computerHost","metroPort","DEFAULT_METRO_PORT","daemonPort","DEFAULT_DAEMON_PORT","qrAvailable","isCameraKitAvailable","nativeMetroAvailable","isNativeDevConnectAvailable","streaming","daemonClient","isConnected","notify","forEach","listener","name","label","renderContent","DevConnectTab","setup","loadDevConnectPreferences","then","preferences","catch","getSnapshot","cleanup","clear","subscribe","add","delete","exports"],"sourceRoot":"../../../../src","sources":["features/devConnect/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,sBAAA,GAAAF,OAAA;AACA,IAAAG,gBAAA,GAAAH,OAAA;AACA,IAAAI,iBAAA,GAAAJ,OAAA;AACA,IAAAK,eAAA,GAAAL,OAAA;AACA,IAAAM,aAAA,GAAAN,OAAA;AAqBO,MAAMO,uBAAuB,GAAGA,CAAA,KAAqC;EAC1E,MAAMC,SAAS,GAAG,IAAIC,GAAG,CAAuB,CAAC;EACjD,IAAIC,KAAsB,GAAG;IAC3BC,WAAW,EAAE,IAAAA,2BAAW,EAAC,CAAC;IAC1BC,YAAY,EAAE,EAAE;IAChBC,SAAS,EAAEC,mCAAkB;IAC7BC,UAAU,EAAEC,oCAAmB;IAC/BC,WAAW,EAAE,IAAAC,+BAAoB,EAAC,CAAC;IACnCC,oBAAoB,EAAE,IAAAC,6CAA2B,EAAC,CAAC;IACnDC,SAAS,EAAEC,0BAAY,CAACC,WAAW,CAAC;EACtC,CAAC;EAED,MAAMC,MAAM,GAAGA,CAAA,KAAM;IACnBd,KAAK,GAAG;MACN,GAAGA,KAAK;MACRW,SAAS,EAAEC,0BAAY,CAACC,WAAW,CAAC;IACtC,CAAC;IACDf,SAAS,CAACiB,OAAO,CAAEC,QAAQ,IAAKA,QAAQ,CAAC,CAAC,CAAC;EAC7C,CAAC;EAED,OAAO;IACLC,IAAI,EAAE,YAAY;IAClBC,KAAK,EAAE,YAAY;IACnBC,aAAa,EAAEC,4BAAa;IAC5BC,KAAKA,CAAA,EAAG;MACN,IAAAC,gDAAyB,EAAC,CAAC,CAACC,IAAI,CAAEC,WAAW,IAAK;QAChDxB,KAAK,GAAG;UACN,GAAGA,KAAK;UACRE,YAAY,EAAEsB,WAAW,CAACtB,YAAY;UACtCC,SAAS,EAAEqB,WAAW,CAACrB,SAAS;UAChCE,UAAU,EAAEmB,WAAW,CAACnB,UAAU;UAClCI,oBAAoB,EAAE,IAAAC,6CAA2B,EAAC;QACpD,CAAC;QACDI,MAAM,CAAC,CAAC;MACV,CAAC,CAAC,CAACW,KAAK,CAAC,MAAM;QACbX,MAAM,CAAC,CAAC;MACV,CAAC,CAAC;IACJ,CAAC;IACDY,WAAW,EAAEA,CAAA,KAAM1B,KAAK;IACxB2B,OAAOA,CAAA,EAAG;MACR7B,SAAS,CAAC8B,KAAK,CAAC,CAAC;IACnB,CAAC;IACDC,SAASA,CAACb,QAAQ,EAAE;MAClBlB,SAAS,CAACgC,GAAG,CAACd,QAAQ,CAAC;MACvB,OAAO,MAAM;QACXlB,SAAS,CAACiC,MAAM,CAACf,QAAQ,CAAC;MAC5B,CAAC;IACH;EACF,CAAC;AACH,CAAC;AAACgB,OAAA,CAAAnC,uBAAA,GAAAA,uBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.applyMetroBundle = applyMetroBundle;
|
|
7
|
+
exports.isNativeDevConnectAvailable = isNativeDevConnectAvailable;
|
|
8
|
+
exports.resetMetroBundle = resetMetroBundle;
|
|
9
|
+
var _reactNative = require("react-native");
|
|
10
|
+
var _devConnectUtils = require("./devConnectUtils");
|
|
11
|
+
function getNativeModule() {
|
|
12
|
+
const nativeModule = _reactNative.NativeModules.DebugToolkitDevConnect;
|
|
13
|
+
if (nativeModule && typeof nativeModule.applyMetroHost === 'function' && typeof nativeModule.resetMetroHost === 'function') {
|
|
14
|
+
return nativeModule;
|
|
15
|
+
}
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
function isNativeDevConnectAvailable() {
|
|
19
|
+
return getNativeModule() !== null;
|
|
20
|
+
}
|
|
21
|
+
async function checkMetroStatus(statusUrl) {
|
|
22
|
+
const fetchImpl = globalThis.fetch;
|
|
23
|
+
if (!fetchImpl) {
|
|
24
|
+
return {
|
|
25
|
+
ok: false,
|
|
26
|
+
reason: 'fetch_unavailable',
|
|
27
|
+
statusUrl,
|
|
28
|
+
error: 'global fetch is not available'
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
const response = await fetchImpl(statusUrl, {
|
|
33
|
+
method: 'GET'
|
|
34
|
+
});
|
|
35
|
+
const body = typeof response.text === 'function' ? await response.text() : '';
|
|
36
|
+
if (response.ok === false || !body.includes('packager-status:running')) {
|
|
37
|
+
return {
|
|
38
|
+
ok: false,
|
|
39
|
+
reason: 'metro_unreachable',
|
|
40
|
+
statusUrl,
|
|
41
|
+
error: body || 'Metro status endpoint did not report running'
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
} catch (error) {
|
|
46
|
+
return {
|
|
47
|
+
ok: false,
|
|
48
|
+
reason: 'metro_unreachable',
|
|
49
|
+
statusUrl,
|
|
50
|
+
error: error instanceof Error ? error.message : String(error)
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
async function applyMetroBundle(host, port) {
|
|
55
|
+
const target = (0, _devConnectUtils.buildMetroTarget)(host, port);
|
|
56
|
+
if (!target) {
|
|
57
|
+
return {
|
|
58
|
+
ok: false,
|
|
59
|
+
reason: 'invalid_target'
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
const nativeModule = getNativeModule();
|
|
63
|
+
if (!nativeModule) {
|
|
64
|
+
return {
|
|
65
|
+
ok: false,
|
|
66
|
+
reason: 'native_unavailable'
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
const statusError = await checkMetroStatus(target.statusUrl);
|
|
70
|
+
if (statusError) {
|
|
71
|
+
return statusError;
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
const result = await nativeModule.applyMetroHost(target.hostPort);
|
|
75
|
+
_reactNative.DevSettings.reload?.('DebugToolkit DevConnect Metro host changed');
|
|
76
|
+
return {
|
|
77
|
+
ok: true,
|
|
78
|
+
hostPort: result && typeof result.hostPort === 'string' ? result.hostPort : target.hostPort
|
|
79
|
+
};
|
|
80
|
+
} catch (error) {
|
|
81
|
+
return {
|
|
82
|
+
ok: false,
|
|
83
|
+
reason: 'native_error',
|
|
84
|
+
error: error instanceof Error ? error.message : String(error)
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
async function resetMetroBundle() {
|
|
89
|
+
const nativeModule = getNativeModule();
|
|
90
|
+
if (!nativeModule) {
|
|
91
|
+
return {
|
|
92
|
+
ok: false,
|
|
93
|
+
reason: 'native_unavailable'
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
try {
|
|
97
|
+
await nativeModule.resetMetroHost();
|
|
98
|
+
_reactNative.DevSettings.reload?.('DebugToolkit DevConnect Metro host reset');
|
|
99
|
+
return {
|
|
100
|
+
ok: true
|
|
101
|
+
};
|
|
102
|
+
} catch (error) {
|
|
103
|
+
return {
|
|
104
|
+
ok: false,
|
|
105
|
+
reason: 'native_error',
|
|
106
|
+
error: error instanceof Error ? error.message : String(error)
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=nativeDevConnect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_devConnectUtils","getNativeModule","nativeModule","NativeModules","DebugToolkitDevConnect","applyMetroHost","resetMetroHost","isNativeDevConnectAvailable","checkMetroStatus","statusUrl","fetchImpl","globalThis","fetch","ok","reason","error","response","method","body","text","includes","Error","message","String","applyMetroBundle","host","port","target","buildMetroTarget","statusError","result","hostPort","DevSettings","reload","resetMetroBundle"],"sourceRoot":"../../../../src","sources":["features/devConnect/nativeDevConnect.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -9,21 +9,17 @@ function isSimulator() {
|
|
|
9
9
|
const {
|
|
10
10
|
OS
|
|
11
11
|
} = _reactNative.Platform;
|
|
12
|
+
const constants = _reactNative.Platform.constants ?? {};
|
|
12
13
|
if (OS === 'android') {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
if (constants.isEmulator === true) {
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
const model = String(constants.Model ?? constants.model ?? '').toLowerCase();
|
|
16
18
|
return model.includes('sdk') || model.includes('emulator') || model.includes('google_sdk');
|
|
17
19
|
}
|
|
18
20
|
if (OS === 'ios') {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const deviceInfo = _reactNative.NativeModules.DeviceInfo ?? _reactNative.NativeModules.PlatformConstants;
|
|
22
|
-
if (deviceInfo) {
|
|
23
|
-
const model = String(deviceInfo.model ?? '').toLowerCase();
|
|
24
|
-
if (model.includes('simulator')) return true;
|
|
25
|
-
}
|
|
26
|
-
return false;
|
|
21
|
+
const model = String(constants.model ?? '').toLowerCase();
|
|
22
|
+
return model.includes('simulator');
|
|
27
23
|
}
|
|
28
24
|
return false;
|
|
29
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","isSimulator","OS","Platform","constants","isEmulator","model","String","Model","toLowerCase","includes"
|
|
1
|
+
{"version":3,"names":["_reactNative","require","isSimulator","OS","Platform","constants","isEmulator","model","String","Model","toLowerCase","includes"],"sourceRoot":"../../../../src","sources":["features/devConnect/platformDetect.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEO,SAASC,WAAWA,CAAA,EAAY;EACrC,MAAM;IAAEC;EAAG,CAAC,GAAGC,qBAAQ;EACvB,MAAMC,SAAS,GAAID,qBAAQ,CAACC,SAAS,IAAI,CAAC,CAA6B;EAEvE,IAAIF,EAAE,KAAK,SAAS,EAAE;IACpB,IAAIE,SAAS,CAACC,UAAU,KAAK,IAAI,EAAE;MACjC,OAAO,IAAI;IACb;IACA,MAAMC,KAAK,GAAGC,MAAM,CAACH,SAAS,CAACI,KAAK,IAAIJ,SAAS,CAACE,KAAK,IAAI,EAAE,CAAC,CAACG,WAAW,CAAC,CAAC;IAC5E,OAAOH,KAAK,CAACI,QAAQ,CAAC,KAAK,CAAC,IAAIJ,KAAK,CAACI,QAAQ,CAAC,UAAU,CAAC,IAAIJ,KAAK,CAACI,QAAQ,CAAC,YAAY,CAAC;EAC5F;EAEA,IAAIR,EAAE,KAAK,KAAK,EAAE;IAChB,MAAMI,KAAK,GAAGC,MAAM,CAACH,SAAS,CAACE,KAAK,IAAI,EAAE,CAAC,CAACG,WAAW,CAAC,CAAC;IACzD,OAAOH,KAAK,CAACI,QAAQ,CAAC,WAAW,CAAC;EACpC;EAEA,OAAO,KAAK;AACd","ignoreList":[]}
|
|
@@ -6,14 +6,27 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.KEYS = void 0;
|
|
7
7
|
exports.getPreference = getPreference;
|
|
8
8
|
exports.setPreference = setPreference;
|
|
9
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
10
|
-
|
|
11
9
|
const memoryStore = new Map();
|
|
12
10
|
function loadAsyncStorage() {
|
|
13
11
|
try {
|
|
14
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
15
12
|
const mod = require('@react-native-async-storage/async-storage');
|
|
16
|
-
if (mod && typeof mod.getItem === 'function')
|
|
13
|
+
if (mod && typeof mod.getItem === 'function') {
|
|
14
|
+
return mod;
|
|
15
|
+
}
|
|
16
|
+
return null;
|
|
17
|
+
} catch {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function loadNativePreferences() {
|
|
22
|
+
try {
|
|
23
|
+
const {
|
|
24
|
+
NativeModules
|
|
25
|
+
} = require('react-native');
|
|
26
|
+
const mod = NativeModules?.DebugToolkitDevConnect;
|
|
27
|
+
if (mod && typeof mod.getPreference === 'function' && typeof mod.setPreference === 'function') {
|
|
28
|
+
return mod;
|
|
29
|
+
}
|
|
17
30
|
return null;
|
|
18
31
|
} catch {
|
|
19
32
|
return null;
|
|
@@ -25,6 +38,15 @@ async function setPreference(key, value) {
|
|
|
25
38
|
if (AsyncStorage) {
|
|
26
39
|
try {
|
|
27
40
|
await AsyncStorage.setItem(key, value);
|
|
41
|
+
return;
|
|
42
|
+
} catch {
|
|
43
|
+
// degrade to memory only
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const nativePreferences = loadNativePreferences();
|
|
47
|
+
if (nativePreferences) {
|
|
48
|
+
try {
|
|
49
|
+
await nativePreferences.setPreference(key, value);
|
|
28
50
|
} catch {
|
|
29
51
|
// degrade to memory only
|
|
30
52
|
}
|
|
@@ -35,7 +57,20 @@ async function getPreference(key) {
|
|
|
35
57
|
if (AsyncStorage) {
|
|
36
58
|
try {
|
|
37
59
|
const val = await AsyncStorage.getItem(key);
|
|
38
|
-
if (val !== null)
|
|
60
|
+
if (val !== null) {
|
|
61
|
+
return val;
|
|
62
|
+
}
|
|
63
|
+
} catch {
|
|
64
|
+
// fall through to memory
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const nativePreferences = loadNativePreferences();
|
|
68
|
+
if (nativePreferences) {
|
|
69
|
+
try {
|
|
70
|
+
const val = await nativePreferences.getPreference(key);
|
|
71
|
+
if (val !== null) {
|
|
72
|
+
return val;
|
|
73
|
+
}
|
|
39
74
|
} catch {
|
|
40
75
|
// fall through to memory
|
|
41
76
|
}
|
|
@@ -48,6 +83,8 @@ const KEYS = exports.KEYS = {
|
|
|
48
83
|
consoleLogs: '@react_native_debug_toolkit/console_logs',
|
|
49
84
|
networkLogs: '@react_native_debug_toolkit/network_logs',
|
|
50
85
|
trackLogs: '@react_native_debug_toolkit/track_logs',
|
|
51
|
-
computerHost: '@react_native_debug_toolkit/computer_host'
|
|
86
|
+
computerHost: '@react_native_debug_toolkit/computer_host',
|
|
87
|
+
metroPort: '@react_native_debug_toolkit/metro_port',
|
|
88
|
+
daemonPort: '@react_native_debug_toolkit/daemon_port'
|
|
52
89
|
};
|
|
53
90
|
//# sourceMappingURL=debugPreferences.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["memoryStore","Map","loadAsyncStorage","mod","require","getItem","setPreference","key","value","set","AsyncStorage","setItem","
|
|
1
|
+
{"version":3,"names":["memoryStore","Map","loadAsyncStorage","mod","require","getItem","loadNativePreferences","NativeModules","DebugToolkitDevConnect","getPreference","setPreference","key","value","set","AsyncStorage","setItem","nativePreferences","val","get","KEYS","exports","fabPosition","lastTab","consoleLogs","networkLogs","trackLogs","computerHost","metroPort","daemonPort"],"sourceRoot":"../../../src","sources":["utils/debugPreferences.ts"],"mappings":";;;;;;;;AAGA,MAAMA,WAAW,GAAG,IAAIC,GAAG,CAAiB,CAAC;AAE7C,SAASC,gBAAgBA,CAAA,EAA4B;EACnD,IAAI;IACF,MAAMC,GAAG,GAAGC,OAAO,CAAC,2CAA2C,CAAC;IAChE,IAAID,GAAG,IAAI,OAAOA,GAAG,CAACE,OAAO,KAAK,UAAU,EAAE;MAC5C,OAAOF,GAAG;IACZ;IACA,OAAO,IAAI;EACb,CAAC,CAAC,MAAM;IACN,OAAO,IAAI;EACb;AACF;AAEA,SAASG,qBAAqBA,CAAA,EAAiC;EAC7D,IAAI;IACF,MAAM;MAAEC;IAAc,CAAC,GAAGH,OAAO,CAAC,cAAc,CAAoF;IACpI,MAAMD,GAAG,GAAGI,aAAa,EAAEC,sBAAsB;IACjD,IACEL,GAAG,IACH,OAAOA,GAAG,CAACM,aAAa,KAAK,UAAU,IACvC,OAAON,GAAG,CAACO,aAAa,KAAK,UAAU,EACvC;MACA,OAAOP,GAAG;IACZ;IACA,OAAO,IAAI;EACb,CAAC,CAAC,MAAM;IACN,OAAO,IAAI;EACb;AACF;AAEO,eAAeO,aAAaA,CAACC,GAAW,EAAEC,KAAa,EAAiB;EAC7EZ,WAAW,CAACa,GAAG,CAACF,GAAG,EAAEC,KAAK,CAAC;EAC3B,MAAME,YAAY,GAAGZ,gBAAgB,CAAC,CAAC;EACvC,IAAIY,YAAY,EAAE;IAChB,IAAI;MACF,MAAMA,YAAY,CAACC,OAAO,CAACJ,GAAG,EAAEC,KAAK,CAAC;MACtC;IACF,CAAC,CAAC,MAAM;MACN;IAAA;EAEJ;EAEA,MAAMI,iBAAiB,GAAGV,qBAAqB,CAAC,CAAC;EACjD,IAAIU,iBAAiB,EAAE;IACrB,IAAI;MACF,MAAMA,iBAAiB,CAACN,aAAa,CAACC,GAAG,EAAEC,KAAK,CAAC;IACnD,CAAC,CAAC,MAAM;MACN;IAAA;EAEJ;AACF;AAEO,eAAeH,aAAaA,CAACE,GAAW,EAA0B;EACvE,MAAMG,YAAY,GAAGZ,gBAAgB,CAAC,CAAC;EACvC,IAAIY,YAAY,EAAE;IAChB,IAAI;MACF,MAAMG,GAAG,GAAG,MAAMH,YAAY,CAACT,OAAO,CAACM,GAAG,CAAC;MAC3C,IAAIM,GAAG,KAAK,IAAI,EAAE;QAChB,OAAOA,GAAG;MACZ;IACF,CAAC,CAAC,MAAM;MACN;IAAA;EAEJ;EAEA,MAAMD,iBAAiB,GAAGV,qBAAqB,CAAC,CAAC;EACjD,IAAIU,iBAAiB,EAAE;IACrB,IAAI;MACF,MAAMC,GAAG,GAAG,MAAMD,iBAAiB,CAACP,aAAa,CAACE,GAAG,CAAC;MACtD,IAAIM,GAAG,KAAK,IAAI,EAAE;QAChB,OAAOA,GAAG;MACZ;IACF,CAAC,CAAC,MAAM;MACN;IAAA;EAEJ;EAEA,OAAOjB,WAAW,CAACkB,GAAG,CAACP,GAAG,CAAC,IAAI,IAAI;AACrC;AAEO,MAAMQ,IAAI,GAAAC,OAAA,CAAAD,IAAA,GAAG;EAClBE,WAAW,EAAE,0CAA0C;EACvDC,OAAO,EAAE,sCAAsC;EAC/CC,WAAW,EAAE,0CAA0C;EACvDC,WAAW,EAAE,0CAA0C;EACvDC,SAAS,EAAE,wCAAwC;EACnDC,YAAY,EAAE,2CAA2C;EACzDC,SAAS,EAAE,wCAAwC;EACnDC,UAAU,EAAE;AACd,CAAU","ignoreList":[]}
|
|
@@ -22,7 +22,9 @@ class CameraErrorBoundary extends Component {
|
|
|
22
22
|
this.props.onCameraError(error.message || 'Camera failed to initialize.');
|
|
23
23
|
}
|
|
24
24
|
render() {
|
|
25
|
-
if (this.state.hasError)
|
|
25
|
+
if (this.state.hasError) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
26
28
|
return this.props.children;
|
|
27
29
|
}
|
|
28
30
|
}
|
|
@@ -32,7 +34,7 @@ class CameraErrorBoundary extends Component {
|
|
|
32
34
|
export function DevConnectQrScanner({
|
|
33
35
|
visible,
|
|
34
36
|
onClose,
|
|
35
|
-
|
|
37
|
+
onScanTarget
|
|
36
38
|
}) {
|
|
37
39
|
const scannedRef = useRef(false);
|
|
38
40
|
const [error, setError] = useState(null);
|
|
@@ -46,8 +48,12 @@ export function DevConnectQrScanner({
|
|
|
46
48
|
}
|
|
47
49
|
}, [visible]);
|
|
48
50
|
const handleScanned = useCallback(rawValue => {
|
|
49
|
-
if (scannedRef.current)
|
|
50
|
-
|
|
51
|
+
if (scannedRef.current) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (typeof rawValue !== 'string') {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
51
57
|
const parsed = parseMetroQrPayload(rawValue);
|
|
52
58
|
if (!parsed) {
|
|
53
59
|
setError('QR code does not contain a supported Metro URL.');
|
|
@@ -55,9 +61,12 @@ export function DevConnectQrScanner({
|
|
|
55
61
|
}
|
|
56
62
|
scannedRef.current = true;
|
|
57
63
|
setError(null);
|
|
58
|
-
|
|
64
|
+
onScanTarget({
|
|
65
|
+
computerHost: parsed.computerHost,
|
|
66
|
+
metroPort: parsed.metroPort
|
|
67
|
+
});
|
|
59
68
|
onClose();
|
|
60
|
-
}, [onClose,
|
|
69
|
+
}, [onClose, onScanTarget]);
|
|
61
70
|
const handleCameraKitRead = useCallback(event => {
|
|
62
71
|
handleScanned(event.nativeEvent?.codeStringValue ?? '');
|
|
63
72
|
}, [handleScanned]);
|
|
@@ -67,7 +76,9 @@ export function DevConnectQrScanner({
|
|
|
67
76
|
const handleCameraError = useCallback(_msg => {
|
|
68
77
|
setCameraFailed(true);
|
|
69
78
|
}, []);
|
|
70
|
-
if (!visible || !scanner)
|
|
79
|
+
if (!visible || !scanner) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
71
82
|
return /*#__PURE__*/_jsx(Modal, {
|
|
72
83
|
visible: visible,
|
|
73
84
|
animationType: "slide",
|