rnxsim 0.1.418 → 0.1.420
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/cli/cloud-client.ts +164 -12
- package/cli/cloud-dispatch.ts +7 -2
- package/cli/commands/box/checkout-plane.ts +78 -40
- package/cli/commands/inspect/core.ts +23 -14
- package/cli/commands/inspect/wait-ready.ts +2 -0
- package/cli/commands/platform.ts +30 -9
- package/cli/outbound-endpoints.ts +6 -0
- package/cli/self-invocation.ts +2 -2
- package/cli/shell-init.ts +1 -1
- package/cli/ws-bridge.ts +7 -5
- package/dist-lib/agent-daemon-client.cjs +1 -1
- package/dist-lib/agent-events.cjs +1 -1
- package/dist-lib/agent-identity.cjs +1 -1
- package/dist-lib/agent-sessions.cjs +1 -1
- package/dist-lib/attached-projects.cjs +1 -1
- package/dist-lib/auth/shared-session.cjs +1 -1
- package/dist-lib/backend-origin.cjs +1 -1
- package/dist-lib/beta.cjs +1 -1
- package/dist-lib/beta.mjs +1 -1
- package/dist-lib/bridge-constants.cjs +1 -1
- package/dist-lib/bridge-contract-input.cjs +1 -1
- package/dist-lib/bridge-contract-input.mjs +1 -1
- package/dist-lib/bridge-contract.cjs +7 -1
- package/dist-lib/bridge-contract.mjs +5 -1
- package/dist-lib/capture-contract.cjs +1 -1
- package/dist-lib/capture-contract.mjs +1 -1
- package/dist-lib/cli-constants.cjs +1 -1
- package/dist-lib/cloud-contract.cjs +1 -1
- package/dist-lib/cloud-contract.mjs +1 -1
- package/dist-lib/config.cjs +1 -1
- package/dist-lib/detox/index.cjs +1 -1
- package/dist-lib/dev-bundle-resolution.cjs +6 -4
- package/dist-lib/home-paths.cjs +1 -1
- package/dist-lib/host/bridge-host.cjs +55 -28
- package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
- package/dist-lib/host/replacement-module-handler.cjs +1 -1
- package/dist-lib/host/websocket-proxy.cjs +1 -1
- package/dist-lib/index.cjs +14 -7
- package/dist-lib/jump-to-source-babel.cjs +1 -1
- package/dist-lib/menu.cjs +1 -1
- package/dist-lib/menu.mjs +1 -1
- package/dist-lib/metro-fingerprint-registry.cjs +1 -1
- package/dist-lib/metro-fingerprint-registry.mjs +1 -1
- package/dist-lib/metro-production-bundle.cjs +1 -1
- package/dist-lib/metro-production-bundle.mjs +1 -1
- package/dist-lib/metro.cjs +4 -3
- package/dist-lib/profiles.cjs +1 -1
- package/dist-lib/public-brand.cjs +1 -1
- package/dist-lib/react-native-host-modules.cjs +1 -1
- package/dist-lib/react-native-host-modules.mjs +1 -1
- package/dist-lib/render-mode.cjs +1 -1
- package/dist-lib/scripts/dev-server-scanner.cjs +9 -6
- package/dist-lib/sdk.cjs +6 -3
- package/dist-lib/sdk.mjs +6 -3
- package/dist-lib/skills.cjs +71 -36
- package/dist-lib/vite.cjs +1 -1
- package/package.json +1 -1
- package/scripts/dev-server-scanner.ts +9 -5
- package/src/bridge-contract.ts +3 -0
- package/src/dev-bundle-resolution.ts +6 -3
- package/src/dev-server-open.ts +3 -2
- package/src/host/bridge-host.ts +1 -1
- package/src/host/plane-host.ts +1 -1
- package/src/native-dev-bundle-url.ts +1 -1
- package/src/vite-plugin.ts +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/beta.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/beta.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -22,6 +22,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
22
22
|
// src/bridge-contract.ts
|
|
23
23
|
var bridge_contract_exports = {};
|
|
24
24
|
__export(bridge_contract_exports, {
|
|
25
|
+
HEADLESS_TENANT_FETCH_HUNG_MARKER: () => HEADLESS_TENANT_FETCH_HUNG_MARKER,
|
|
26
|
+
PUBLIC_NO_NETWORK_MARKER: () => PUBLIC_NO_NETWORK_MARKER,
|
|
25
27
|
SEMANTIC_READY_CONTENT_NODE_FLOOR: () => SEMANTIC_READY_CONTENT_NODE_FLOOR,
|
|
26
28
|
SEMANTIC_READY_NODE_STABLE_MS: () => SEMANTIC_READY_NODE_STABLE_MS,
|
|
27
29
|
SEMANTIC_READY_POLL_MS: () => SEMANTIC_READY_POLL_MS,
|
|
@@ -36,6 +38,8 @@ var SIM_LONG_PRESS_MAX_MS = 5e3;
|
|
|
36
38
|
var SEMANTIC_READY_CONTENT_NODE_FLOOR = 100;
|
|
37
39
|
var SEMANTIC_READY_NODE_STABLE_MS = 750;
|
|
38
40
|
var SEMANTIC_READY_POLL_MS = 150;
|
|
41
|
+
var PUBLIC_NO_NETWORK_MARKER = "public RNX Cloud simulators have no network";
|
|
42
|
+
var HEADLESS_TENANT_FETCH_HUNG_MARKER = "headless tenant fetch hung";
|
|
39
43
|
function readyProbeHasContent(probe) {
|
|
40
44
|
return probe.liveFrameActive || probe.targets > 0 || probe.nodes >= SEMANTIC_READY_CONTENT_NODE_FLOOR;
|
|
41
45
|
}
|
|
@@ -44,6 +48,8 @@ function readyProbeHasTargetContent(probe) {
|
|
|
44
48
|
}
|
|
45
49
|
// Annotate the CommonJS export names for ESM import in node:
|
|
46
50
|
0 && (module.exports = {
|
|
51
|
+
HEADLESS_TENANT_FETCH_HUNG_MARKER,
|
|
52
|
+
PUBLIC_NO_NETWORK_MARKER,
|
|
47
53
|
SEMANTIC_READY_CONTENT_NODE_FLOOR,
|
|
48
54
|
SEMANTIC_READY_NODE_STABLE_MS,
|
|
49
55
|
SEMANTIC_READY_POLL_MS,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
|
|
3
3
|
// src/bridge-contract.ts
|
|
4
4
|
var SIM_LONG_PRESS_DEFAULT_MS = 500;
|
|
@@ -6,6 +6,8 @@ var SIM_LONG_PRESS_MAX_MS = 5e3;
|
|
|
6
6
|
var SEMANTIC_READY_CONTENT_NODE_FLOOR = 100;
|
|
7
7
|
var SEMANTIC_READY_NODE_STABLE_MS = 750;
|
|
8
8
|
var SEMANTIC_READY_POLL_MS = 150;
|
|
9
|
+
var PUBLIC_NO_NETWORK_MARKER = "public RNX Cloud simulators have no network";
|
|
10
|
+
var HEADLESS_TENANT_FETCH_HUNG_MARKER = "headless tenant fetch hung";
|
|
9
11
|
function readyProbeHasContent(probe) {
|
|
10
12
|
return probe.liveFrameActive || probe.targets > 0 || probe.nodes >= SEMANTIC_READY_CONTENT_NODE_FLOOR;
|
|
11
13
|
}
|
|
@@ -13,6 +15,8 @@ function readyProbeHasTargetContent(probe) {
|
|
|
13
15
|
return probe.liveFrameActive || probe.targets > 0;
|
|
14
16
|
}
|
|
15
17
|
export {
|
|
18
|
+
HEADLESS_TENANT_FETCH_HUNG_MARKER,
|
|
19
|
+
PUBLIC_NO_NETWORK_MARKER,
|
|
16
20
|
SEMANTIC_READY_CONTENT_NODE_FLOOR,
|
|
17
21
|
SEMANTIC_READY_NODE_STABLE_MS,
|
|
18
22
|
SEMANTIC_READY_POLL_MS,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/config.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/detox/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -169,12 +169,14 @@ async function probeExpoManifest(normalizedBaseUrl, port) {
|
|
|
169
169
|
async (res) => res.ok ? { ok: true, body: await res.text() } : null,
|
|
170
170
|
() => void 0
|
|
171
171
|
);
|
|
172
|
+
let probeDeadline;
|
|
172
173
|
const answered = await Promise.race([
|
|
173
174
|
pending,
|
|
174
|
-
new Promise(
|
|
175
|
-
|
|
176
|
-
)
|
|
175
|
+
new Promise((resolve) => {
|
|
176
|
+
probeDeadline = setTimeout(() => resolve("timeout"), MANIFEST_PROBE_TIMEOUT_MS);
|
|
177
|
+
})
|
|
177
178
|
]);
|
|
179
|
+
clearTimeout(probeDeadline);
|
|
178
180
|
if (answered === "timeout" || answered === void 0) return { state: "no-answer" };
|
|
179
181
|
if (answered === null) return { state: "no-manifest" };
|
|
180
182
|
body = answered.body;
|
package/dist-lib/home-paths.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -539,7 +539,7 @@ async function readAppSettingsBundle(projectRoot) {
|
|
|
539
539
|
// scripts/dev-server-scanner.ts
|
|
540
540
|
init_optional_demo_registry();
|
|
541
541
|
var EXEC_EXIT_GRACE_MS = 2e3;
|
|
542
|
-
function execGuarded(command, timeout, extra = {}) {
|
|
542
|
+
async function execGuarded(command, timeout, extra = {}) {
|
|
543
543
|
let child;
|
|
544
544
|
const ran = new Promise((resolve2, reject) => {
|
|
545
545
|
child = (0, import_child_process.exec)(command, { encoding: "utf8", timeout, ...extra }, (err, stdout) => {
|
|
@@ -547,16 +547,20 @@ function execGuarded(command, timeout, extra = {}) {
|
|
|
547
547
|
else resolve2({ stdout });
|
|
548
548
|
});
|
|
549
549
|
});
|
|
550
|
+
let deadlineTimer;
|
|
550
551
|
const deadline = new Promise((_resolve, reject) => {
|
|
551
|
-
|
|
552
|
+
deadlineTimer = setTimeout(() => {
|
|
552
553
|
child?.kill("SIGKILL");
|
|
553
554
|
const err = new Error(`\`${command}\` did not exit within ${timeout}ms`);
|
|
554
555
|
Object.assign(err, { killed: true });
|
|
555
556
|
reject(err);
|
|
556
557
|
}, timeout + EXEC_EXIT_GRACE_MS);
|
|
557
|
-
timer.unref?.();
|
|
558
558
|
});
|
|
559
|
-
|
|
559
|
+
try {
|
|
560
|
+
return await Promise.race([ran, deadline]);
|
|
561
|
+
} finally {
|
|
562
|
+
clearTimeout(deadlineTimer);
|
|
563
|
+
}
|
|
560
564
|
}
|
|
561
565
|
var TIMEOUT_MS = 250;
|
|
562
566
|
var MANIFEST_TIMEOUT_MS = 1500;
|
|
@@ -622,7 +626,6 @@ function httpGet(hostname, port, path12, method = "GET", timeout = TIMEOUT_MS, h
|
|
|
622
626
|
req.socket?.unref();
|
|
623
627
|
}, timeout);
|
|
624
628
|
const abandon = setTimeout(() => req.destroy(), BODY_TIMEOUT_MS);
|
|
625
|
-
abandon.unref?.();
|
|
626
629
|
req.on("close", () => {
|
|
627
630
|
clearTimeout(giveUp);
|
|
628
631
|
clearTimeout(abandon);
|
|
@@ -3896,6 +3899,8 @@ var CheckoutRequiresGitError = class extends Error {
|
|
|
3896
3899
|
};
|
|
3897
3900
|
var BINARY_SNIFF_BYTES = 8192;
|
|
3898
3901
|
var LIST_FILES_TIMEOUT_MS = 1e4;
|
|
3902
|
+
var LIST_FILES_ATTEMPTS = 3;
|
|
3903
|
+
var LIST_FILES_RETRY_MS = 25;
|
|
3899
3904
|
function looksBinary(filePath, size) {
|
|
3900
3905
|
if (size === 0) return false;
|
|
3901
3906
|
let fd;
|
|
@@ -3927,33 +3932,55 @@ var CheckoutFilePlane = class {
|
|
|
3927
3932
|
index() {
|
|
3928
3933
|
return this.entries;
|
|
3929
3934
|
}
|
|
3930
|
-
|
|
3931
|
-
|
|
3932
|
-
|
|
3933
|
-
|
|
3934
|
-
|
|
3935
|
-
|
|
3936
|
-
|
|
3937
|
-
|
|
3938
|
-
|
|
3939
|
-
|
|
3940
|
-
|
|
3941
|
-
|
|
3942
|
-
|
|
3943
|
-
env: process.env
|
|
3944
|
-
});
|
|
3945
|
-
} catch (error) {
|
|
3946
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
3947
|
-
const killed = error instanceof Error && "signal" in error && error.signal === "SIGTERM";
|
|
3948
|
-
throw new CheckoutRequiresGitError(
|
|
3949
|
-
killed ? `git did not list the project's files in ${this.root} within ${this.listTimeoutMs / 1e3}s, so the box has no file set to serve. the checkout may be on a stalled filesystem, or this machine may be too loaded to start a subprocess.` : `could not list the project's files with git in ${this.root}: ${message}`
|
|
3950
|
-
);
|
|
3951
|
-
}
|
|
3935
|
+
listFiles() {
|
|
3936
|
+
const args = this.trackedOnly ? ["ls-files", "-z"] : ["ls-files", "-co", "--exclude-standard", "-z"];
|
|
3937
|
+
const stdout = (0, import_node_child_process4.execFileSync)("git", args, {
|
|
3938
|
+
cwd: this.root,
|
|
3939
|
+
encoding: "utf8",
|
|
3940
|
+
maxBuffer: 64 * 1024 * 1024,
|
|
3941
|
+
timeout: this.listTimeoutMs,
|
|
3942
|
+
// stating the environment is not redundant here. bun 1.3.14 resolves
|
|
3943
|
+
// the binary for the synchronous form against the PATH it captured at
|
|
3944
|
+
// startup and ignores a later change to `process.env.PATH`, so without
|
|
3945
|
+
// this it runs a different git than every other call in the process.
|
|
3946
|
+
env: process.env
|
|
3947
|
+
});
|
|
3952
3948
|
if (stdout.length === 0) {
|
|
3953
3949
|
throw new CheckoutRequiresGitError(
|
|
3954
3950
|
`git listed no ${this.trackedOnly ? "tracked " : ""}files in ${this.root}. either the checkout contains no eligible files, or this machine could not read the child process's output.`
|
|
3955
3951
|
);
|
|
3956
3952
|
}
|
|
3953
|
+
return stdout;
|
|
3954
|
+
}
|
|
3955
|
+
async refresh() {
|
|
3956
|
+
let stdout = "";
|
|
3957
|
+
let lastFailure;
|
|
3958
|
+
for (let attempt = 1; attempt <= LIST_FILES_ATTEMPTS; attempt++) {
|
|
3959
|
+
try {
|
|
3960
|
+
stdout = this.listFiles();
|
|
3961
|
+
lastFailure = void 0;
|
|
3962
|
+
break;
|
|
3963
|
+
} catch (error) {
|
|
3964
|
+
if (error instanceof CheckoutRequiresGitError) {
|
|
3965
|
+
lastFailure = error;
|
|
3966
|
+
} else {
|
|
3967
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
3968
|
+
const killed = error instanceof Error && "signal" in error && error.signal === "SIGTERM";
|
|
3969
|
+
lastFailure = new CheckoutRequiresGitError(
|
|
3970
|
+
killed ? `git did not list the project's files in ${this.root} within ${this.listTimeoutMs / 1e3}s, so the box has no file set to serve. the checkout may be on a stalled filesystem, or this machine may be too loaded to start a subprocess.` : `could not list the project's files with git in ${this.root}: ${message}`
|
|
3971
|
+
);
|
|
3972
|
+
}
|
|
3973
|
+
if (attempt < LIST_FILES_ATTEMPTS) {
|
|
3974
|
+
await new Promise(
|
|
3975
|
+
(resolve2) => setTimeout(resolve2, LIST_FILES_RETRY_MS * attempt)
|
|
3976
|
+
);
|
|
3977
|
+
}
|
|
3978
|
+
}
|
|
3979
|
+
}
|
|
3980
|
+
if (lastFailure) {
|
|
3981
|
+
lastFailure.message = `${lastFailure.message} (${LIST_FILES_ATTEMPTS} attempts)`;
|
|
3982
|
+
throw lastFailure;
|
|
3983
|
+
}
|
|
3957
3984
|
const next = /* @__PURE__ */ new Map();
|
|
3958
3985
|
const nextSniffed = /* @__PURE__ */ new Map();
|
|
3959
3986
|
for (const relative of stdout.split("\0")) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
|
|
3
3
|
// src/host/fetch-proxy-overrides.ts
|
|
4
4
|
var FETCH_PROXY_BROWSER_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -841,15 +841,20 @@ function createBridge(wsPort, opts = {}) {
|
|
|
841
841
|
} catch {
|
|
842
842
|
}
|
|
843
843
|
ws.close();
|
|
844
|
-
setTimeout(() => {
|
|
844
|
+
const terminateGrace = setTimeout(() => {
|
|
845
845
|
if (ws.readyState !== import_ws.WebSocket.CLOSED) {
|
|
846
846
|
ws.terminate();
|
|
847
847
|
}
|
|
848
|
-
}, 250)
|
|
848
|
+
}, 250);
|
|
849
|
+
ws.once("close", () => clearTimeout(terminateGrace));
|
|
849
850
|
}
|
|
850
851
|
};
|
|
851
852
|
}
|
|
852
853
|
|
|
854
|
+
// src/bridge-contract.ts
|
|
855
|
+
var PUBLIC_NO_NETWORK_MARKER = "public RNX Cloud simulators have no network";
|
|
856
|
+
var HEADLESS_TENANT_FETCH_HUNG_MARKER = "headless tenant fetch hung";
|
|
857
|
+
|
|
853
858
|
// cli/commands/inspect/core.ts
|
|
854
859
|
async function inspectTree(bridge, depth = 5) {
|
|
855
860
|
const result = await bridge.send({
|
|
@@ -1315,12 +1320,13 @@ async function inspectFind(bridge, q) {
|
|
|
1315
1320
|
}
|
|
1316
1321
|
function waitReadyReason(status) {
|
|
1317
1322
|
if (status.bridgeError) {
|
|
1318
|
-
if (status.bridgeError.includes(
|
|
1323
|
+
if (status.bridgeError.includes(HEADLESS_TENANT_FETCH_HUNG_MARKER) || status.bridgeError.includes(PUBLIC_NO_NETWORK_MARKER)) {
|
|
1319
1324
|
return status.bridgeError;
|
|
1320
1325
|
}
|
|
1321
1326
|
return `sim unreachable: ${status.bridgeError} \u2014 the target tab is closed or no sim is connected (check \`rnx list\`, reopen with \`rnx open\`)`;
|
|
1322
1327
|
}
|
|
1323
|
-
const
|
|
1328
|
+
const waitingOnGuestFetch = status.externalReady === false && /https?:\/\//.test(status.externalStatus);
|
|
1329
|
+
const base = status.externalError ? `guest app errored: ${status.externalError}` : waitingOnGuestFetch ? `waiting on a guest fetch: ${status.externalStatus}` : status.loadingText ? `still showing "${status.loadingText}"` : status.externalReady === false ? "guest app is still loading" : status.flag !== true && status.targets > 0 ? "native content is rendered but the ready signal has not settled" : status.flag !== true ? "guest app has not emitted sootsim:externalAppReady" : status.targets <= 0 ? "ready flag emitted but no visible app content is inspectable yet" : "node tree is still changing";
|
|
1324
1330
|
return !status.externalError && status.suppressedEntryError ? `${base} (suppressed entry error: ${status.suppressedEntryError})` : base;
|
|
1325
1331
|
}
|
|
1326
1332
|
async function inspectWaitReady(bridge, timeoutMs = 2e4, options = {}) {
|
|
@@ -2853,9 +2859,11 @@ function openRnxDesktopWhenMetroIsReady({
|
|
|
2853
2859
|
const deadline = Date.now() + timeoutMs;
|
|
2854
2860
|
return new Promise((resolve2) => {
|
|
2855
2861
|
let finished = false;
|
|
2862
|
+
let retryTimer;
|
|
2856
2863
|
const finish = (opened) => {
|
|
2857
2864
|
if (finished) return;
|
|
2858
2865
|
finished = true;
|
|
2866
|
+
clearTimeout(retryTimer);
|
|
2859
2867
|
scheduledMetroOpens.delete(key);
|
|
2860
2868
|
resolve2(opened);
|
|
2861
2869
|
};
|
|
@@ -2868,8 +2876,7 @@ function openRnxDesktopWhenMetroIsReady({
|
|
|
2868
2876
|
finish(false);
|
|
2869
2877
|
return;
|
|
2870
2878
|
}
|
|
2871
|
-
|
|
2872
|
-
timer.unref();
|
|
2879
|
+
retryTimer = setTimeout(check, intervalMs);
|
|
2873
2880
|
};
|
|
2874
2881
|
const check = () => {
|
|
2875
2882
|
const request = import_node_http.default.get(
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/menu.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/menu.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/metro.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -137,9 +137,11 @@ function openRnxDesktopWhenMetroIsReady({
|
|
|
137
137
|
const deadline = Date.now() + timeoutMs;
|
|
138
138
|
return new Promise((resolve) => {
|
|
139
139
|
let finished = false;
|
|
140
|
+
let retryTimer;
|
|
140
141
|
const finish = (opened) => {
|
|
141
142
|
if (finished) return;
|
|
142
143
|
finished = true;
|
|
144
|
+
clearTimeout(retryTimer);
|
|
143
145
|
scheduledMetroOpens.delete(key);
|
|
144
146
|
resolve(opened);
|
|
145
147
|
};
|
|
@@ -152,8 +154,7 @@ function openRnxDesktopWhenMetroIsReady({
|
|
|
152
154
|
finish(false);
|
|
153
155
|
return;
|
|
154
156
|
}
|
|
155
|
-
|
|
156
|
-
timer.unref();
|
|
157
|
+
retryTimer = setTimeout(check, intervalMs);
|
|
157
158
|
};
|
|
158
159
|
const check = () => {
|
|
159
160
|
const request = import_node_http.default.get(
|
package/dist-lib/profiles.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/render-mode.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -521,7 +521,7 @@ function optionalDemoAppsSync() {
|
|
|
521
521
|
|
|
522
522
|
// scripts/dev-server-scanner.ts
|
|
523
523
|
var EXEC_EXIT_GRACE_MS = 2e3;
|
|
524
|
-
function execGuarded(command, timeout, extra = {}) {
|
|
524
|
+
async function execGuarded(command, timeout, extra = {}) {
|
|
525
525
|
let child;
|
|
526
526
|
const ran = new Promise((resolve2, reject) => {
|
|
527
527
|
child = (0, import_child_process.exec)(command, { encoding: "utf8", timeout, ...extra }, (err, stdout) => {
|
|
@@ -529,16 +529,20 @@ function execGuarded(command, timeout, extra = {}) {
|
|
|
529
529
|
else resolve2({ stdout });
|
|
530
530
|
});
|
|
531
531
|
});
|
|
532
|
+
let deadlineTimer;
|
|
532
533
|
const deadline = new Promise((_resolve, reject) => {
|
|
533
|
-
|
|
534
|
+
deadlineTimer = setTimeout(() => {
|
|
534
535
|
child?.kill("SIGKILL");
|
|
535
536
|
const err = new Error(`\`${command}\` did not exit within ${timeout}ms`);
|
|
536
537
|
Object.assign(err, { killed: true });
|
|
537
538
|
reject(err);
|
|
538
539
|
}, timeout + EXEC_EXIT_GRACE_MS);
|
|
539
|
-
timer.unref?.();
|
|
540
540
|
});
|
|
541
|
-
|
|
541
|
+
try {
|
|
542
|
+
return await Promise.race([ran, deadline]);
|
|
543
|
+
} finally {
|
|
544
|
+
clearTimeout(deadlineTimer);
|
|
545
|
+
}
|
|
542
546
|
}
|
|
543
547
|
var TIMEOUT_MS = 250;
|
|
544
548
|
var MANIFEST_TIMEOUT_MS = 1500;
|
|
@@ -604,7 +608,6 @@ function httpGet(hostname, port, path, method = "GET", timeout = TIMEOUT_MS, hea
|
|
|
604
608
|
req.socket?.unref();
|
|
605
609
|
}, timeout);
|
|
606
610
|
const abandon = setTimeout(() => req.destroy(), BODY_TIMEOUT_MS);
|
|
607
|
-
abandon.unref?.();
|
|
608
611
|
req.on("close", () => {
|
|
609
612
|
clearTimeout(giveUp);
|
|
610
613
|
clearTimeout(abandon);
|
package/dist-lib/sdk.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.420 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -100,6 +100,8 @@ module.exports = __toCommonJS(sdk_exports);
|
|
|
100
100
|
|
|
101
101
|
// src/bridge-contract.ts
|
|
102
102
|
var SEMANTIC_READY_CONTENT_NODE_FLOOR = 100;
|
|
103
|
+
var PUBLIC_NO_NETWORK_MARKER = "public RNX Cloud simulators have no network";
|
|
104
|
+
var HEADLESS_TENANT_FETCH_HUNG_MARKER = "headless tenant fetch hung";
|
|
103
105
|
function readyProbeHasContent(probe) {
|
|
104
106
|
return probe.liveFrameActive || probe.targets > 0 || probe.nodes >= SEMANTIC_READY_CONTENT_NODE_FLOOR;
|
|
105
107
|
}
|
|
@@ -723,12 +725,13 @@ function shellEscape(value) {
|
|
|
723
725
|
}
|
|
724
726
|
function waitReadyReason(status) {
|
|
725
727
|
if (status.bridgeError) {
|
|
726
|
-
if (status.bridgeError.includes(
|
|
728
|
+
if (status.bridgeError.includes(HEADLESS_TENANT_FETCH_HUNG_MARKER) || status.bridgeError.includes(PUBLIC_NO_NETWORK_MARKER)) {
|
|
727
729
|
return status.bridgeError;
|
|
728
730
|
}
|
|
729
731
|
return `sim unreachable: ${status.bridgeError} \u2014 the target tab is closed or no sim is connected (check \`rnx list\`, reopen with \`rnx open\`)`;
|
|
730
732
|
}
|
|
731
|
-
const
|
|
733
|
+
const waitingOnGuestFetch = status.externalReady === false && /https?:\/\//.test(status.externalStatus);
|
|
734
|
+
const base = status.externalError ? `guest app errored: ${status.externalError}` : waitingOnGuestFetch ? `waiting on a guest fetch: ${status.externalStatus}` : status.loadingText ? `still showing "${status.loadingText}"` : status.externalReady === false ? "guest app is still loading" : status.flag !== true && status.targets > 0 ? "native content is rendered but the ready signal has not settled" : status.flag !== true ? "guest app has not emitted sootsim:externalAppReady" : status.targets <= 0 ? "ready flag emitted but no visible app content is inspectable yet" : "node tree is still changing";
|
|
732
735
|
return !status.externalError && status.suppressedEntryError ? `${base} (suppressed entry error: ${status.suppressedEntryError})` : base;
|
|
733
736
|
}
|
|
734
737
|
async function inspectWaitReady(bridge, timeoutMs = 2e4, options = {}) {
|