peachsim 0.1.527 → 0.1.570
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 +26 -26
- package/cli/app-fonts.ts +1 -1
- package/cli/app-splash.ts +1 -1
- package/cli/bin.ts +1 -1
- package/cli/bridge-diagnostics.ts +1 -1
- package/cli/bridge-flow-runner.ts +57 -5
- package/cli/cloud-client.ts +273 -6
- package/cli/cloud-dispatch.ts +22 -2
- package/cli/cloud-session.ts +60 -4
- package/cli/cloud-test-tunnel.ts +354 -0
- package/cli/commands/box/bundle-plane.ts +2 -2
- package/cli/commands/box/checkout-plane.ts +1 -1
- package/cli/commands/box/rnx-command.ts +2 -2
- package/cli/commands/box/search-command.ts +2 -2
- package/cli/commands/box.ts +8 -8
- package/cli/commands/compat.ts +1 -1
- package/cli/commands/control.ts +22 -3
- package/cli/commands/detox.ts +1 -1
- package/cli/commands/device.ts +1 -1
- package/cli/commands/diagnose.ts +1 -1
- package/cli/commands/film.ts +1 -1
- package/cli/commands/flow.ts +60 -3
- package/cli/commands/inspect/actions.ts +1 -1
- package/cli/commands/inspect/core.ts +6 -7
- package/cli/commands/inspect/find.ts +2 -1
- package/cli/commands/inspect/resolve-target.ts +5 -3
- package/cli/commands/inspect/shared.ts +1 -1
- package/cli/commands/inspect/wait-event.ts +1 -1
- package/cli/commands/inspect/wait-selector.ts +15 -4
- package/cli/commands/inspect.ts +19 -14
- package/cli/commands/maestro.ts +464 -43
- package/cli/commands/permissions.ts +1 -1
- package/cli/commands/platform.ts +205 -8
- package/cli/commands/preview.ts +2 -2
- package/cli/commands/record.ts +2 -2
- package/cli/commands/report-issue.ts +2 -2
- package/cli/commands/screenshot-layers.ts +1 -1
- package/cli/commands/screenshot.ts +1 -1
- package/cli/commands/setup.ts +2 -2
- package/cli/commands/test.ts +440 -115
- package/cli/commands/three-mode.ts +1 -1
- package/cli/commands/upload.ts +5 -5
- package/cli/commands/what-happened.ts +1 -1
- package/cli/desktop-companion.ts +3 -3
- package/cli/drivers/playwright-sim-host.ts +2 -2
- package/cli/flow-file.ts +7 -0
- package/cli/flow-live-status.ts +65 -8
- package/cli/help-core.ts +3 -3
- package/cli/hidden-runtime-alias.ts +1 -1
- package/cli/maestro-report.ts +178 -0
- package/cli/main.ts +1 -1
- package/cli/outbound-endpoints.ts +185 -136
- package/cli/parse-args.ts +1 -1
- package/cli/registry.ts +1 -1
- package/cli/resolve-assets.ts +1 -1
- package/cli/run-registry.ts +8 -0
- package/cli/send-to-box.ts +4 -4
- package/cli/ws-bridge.ts +3 -5
- package/detox/expectations.ts +1 -1
- package/detox/gestures.ts +2 -2
- package/detox/index.ts +71 -29
- package/detox/jest-preset.cjs +3 -3
- package/detox/jest-setup-after-env.cjs +1 -1
- package/dist-lib/agent-daemon-client.cjs +2 -2
- package/dist-lib/agent-events.cjs +1 -1
- package/dist-lib/agent-identity.cjs +1 -1
- package/dist-lib/agent-sessions.cjs +2 -2
- package/dist-lib/attached-projects.cjs +2 -2
- 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 +1 -1
- package/dist-lib/bridge-contract.mjs +1 -1
- package/dist-lib/capture-contract.cjs +94 -3
- package/dist-lib/capture-contract.mjs +93 -3
- 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/cloud.cjs +2 -2
- package/dist-lib/cloud.mjs +2 -2
- package/dist-lib/config.cjs +1 -1
- package/dist-lib/detox/index.cjs +106 -25
- package/dist-lib/detox/jest-preset.cjs +3 -3
- package/dist-lib/dev-bundle-resolution.cjs +1 -1
- package/dist-lib/home-paths.cjs +1 -1
- package/dist-lib/host/bridge-host.cjs +137 -61
- package/dist-lib/host/fetch-proxy-handler.cjs +28 -2
- package/dist-lib/host/fetch-proxy-overrides.cjs +33 -3
- package/dist-lib/host/fetch-proxy-overrides.mjs +30 -2
- package/dist-lib/host/replacement-module-handler.cjs +1 -1
- package/dist-lib/host/websocket-proxy.cjs +1 -1
- package/dist-lib/index.cjs +209 -16
- package/dist-lib/jump-to-source-babel.cjs +1 -1
- package/dist-lib/jump-to-source-native.cjs +1 -1
- package/dist-lib/menu.cjs +2 -2
- package/dist-lib/menu.mjs +2 -2
- 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 +3 -3
- package/dist-lib/metro-production-bundle.mjs +3 -3
- package/dist-lib/metro.cjs +8 -8
- package/dist-lib/profiles.cjs +1 -1
- package/dist-lib/public-brand.cjs +2 -2
- 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 +31 -15
- package/dist-lib/sdk.cjs +3 -2
- package/dist-lib/sdk.mjs +3 -2
- package/dist-lib/skills.cjs +362 -163
- package/dist-lib/swift-submit.cjs +1 -1
- package/dist-lib/swift-submit.mjs +1 -1
- package/dist-lib/swift.cjs +583 -16
- package/dist-lib/vite.cjs +29 -14
- package/package.json +9 -9
- package/scripts/dev-server-scanner.ts +41 -14
- package/scripts/optional-demo-registry.ts +3 -3
- package/skills/contrast/SKILL.md +9 -9
- package/skills/rnx-debug/SKILL.md +14 -4
- package/skills/rnx-perf/SKILL.md +5 -5
- package/skills/rnx-setup/SKILL.md +11 -11
- package/skills/rnx-test/SKILL.md +11 -11
- package/skills/rnx-visual/SKILL.md +6 -6
- package/src/agent-sessions.ts +3 -3
- package/src/attached-projects.ts +1 -1
- package/src/bridge-contract-input.ts +1 -1
- package/src/bridge-contract.ts +23 -5
- package/src/capture-contract.ts +145 -3
- package/src/config.ts +2 -2
- package/src/connect.ts +2 -2
- package/src/home-paths.ts +3 -3
- package/src/host/bridge-host.ts +2 -2
- package/src/host/fetch-proxy-handler.ts +4 -3
- package/src/host/fetch-proxy-overrides.ts +41 -0
- package/src/host/plane-host.ts +2 -2
- package/src/index.ts +3 -0
- package/src/metro-plugin.ts +4 -4
- package/src/metro-production-bundle.ts +2 -2
- package/src/native-seam-manifest.ts +6 -6
- package/src/public-brand.ts +1 -1
- package/src/rolldown-plugin-swift.ts +8 -5
- package/src/runtime-assets.ts +8 -6
- package/src/screenshots/frame-compose.ts +24 -56
- package/src/screenshots/org-deck.ts +1 -1
- package/src/screenshots/registry.ts +4 -4
- package/src/screenshots/schema.ts +1 -1
- package/src/sdk.ts +2 -2
- package/src/settings-bundle.ts +1 -1
- package/src/sim-client.ts +2 -4
- package/src/skills/builtin/compat-check.ts +1 -1
- package/src/vite-plugin-one.ts +1 -1
- package/src/vite-plugin-swift.ts +11 -6
- package/src/vite-plugin.ts +30 -17
- package/src/worklets-babel.ts +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.570 | (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;
|
|
@@ -23,7 +23,9 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
23
23
|
var fetch_proxy_overrides_exports = {};
|
|
24
24
|
__export(fetch_proxy_overrides_exports, {
|
|
25
25
|
FETCH_PROXY_BROWSER_USER_AGENT: () => FETCH_PROXY_BROWSER_USER_AGENT,
|
|
26
|
-
|
|
26
|
+
PUBLIC_RPC_TENANT: () => PUBLIC_RPC_TENANT,
|
|
27
|
+
getFetchProxyTargetHeaders: () => getFetchProxyTargetHeaders,
|
|
28
|
+
resolveFetchProxyTargetUrl: () => resolveFetchProxyTargetUrl
|
|
27
29
|
});
|
|
28
30
|
module.exports = __toCommonJS(fetch_proxy_overrides_exports);
|
|
29
31
|
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";
|
|
@@ -48,6 +50,32 @@ function headerOverridesFor(hostname) {
|
|
|
48
50
|
}
|
|
49
51
|
return void 0;
|
|
50
52
|
}
|
|
53
|
+
var PUBLIC_RPC_TENANT = "rnx-public-rpc";
|
|
54
|
+
var QUICKNODE_HOST_SUFFIX = ".quiknode.pro";
|
|
55
|
+
var PUBLIC_RPC_BY_QUICKNODE_CHAIN = {
|
|
56
|
+
"": "https://ethereum-rpc.publicnode.com",
|
|
57
|
+
"arbitrum-mainnet": "https://arbitrum-one-rpc.publicnode.com",
|
|
58
|
+
"avalanche-mainnet": "https://avalanche-c-chain-rpc.publicnode.com",
|
|
59
|
+
"base-mainnet": "https://base-rpc.publicnode.com",
|
|
60
|
+
"blast-mainnet": "https://blast-rpc.publicnode.com",
|
|
61
|
+
bsc: "https://bsc-rpc.publicnode.com",
|
|
62
|
+
"celo-mainnet": "https://celo-rpc.publicnode.com",
|
|
63
|
+
matic: "https://polygon-bor-rpc.publicnode.com",
|
|
64
|
+
optimism: "https://optimism-rpc.publicnode.com",
|
|
65
|
+
"soneium-mainnet": "https://soneium-rpc.publicnode.com",
|
|
66
|
+
"unichain-mainnet": "https://unichain-rpc.publicnode.com"
|
|
67
|
+
};
|
|
68
|
+
function resolveFetchProxyTargetUrl(requested) {
|
|
69
|
+
const host = requested.hostname.toLowerCase();
|
|
70
|
+
if (!host.endsWith(QUICKNODE_HOST_SUFFIX)) return requested;
|
|
71
|
+
const tenant = host.slice(0, -QUICKNODE_HOST_SUFFIX.length);
|
|
72
|
+
if (tenant !== PUBLIC_RPC_TENANT && !tenant.startsWith(`${PUBLIC_RPC_TENANT}.`)) {
|
|
73
|
+
return requested;
|
|
74
|
+
}
|
|
75
|
+
const chain = tenant === PUBLIC_RPC_TENANT ? "" : tenant.slice(PUBLIC_RPC_TENANT.length + 1);
|
|
76
|
+
const replacement = PUBLIC_RPC_BY_QUICKNODE_CHAIN[chain];
|
|
77
|
+
return replacement ? new URL(replacement) : requested;
|
|
78
|
+
}
|
|
51
79
|
function getFetchProxyTargetHeaders(targetUrl) {
|
|
52
80
|
const hostOverrides = headerOverridesFor(targetUrl.hostname);
|
|
53
81
|
return {
|
|
@@ -59,5 +87,7 @@ function getFetchProxyTargetHeaders(targetUrl) {
|
|
|
59
87
|
// Annotate the CommonJS export names for ESM import in node:
|
|
60
88
|
0 && (module.exports = {
|
|
61
89
|
FETCH_PROXY_BROWSER_USER_AGENT,
|
|
62
|
-
|
|
90
|
+
PUBLIC_RPC_TENANT,
|
|
91
|
+
getFetchProxyTargetHeaders,
|
|
92
|
+
resolveFetchProxyTargetUrl
|
|
63
93
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.570 | (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";
|
|
@@ -23,6 +23,32 @@ function headerOverridesFor(hostname) {
|
|
|
23
23
|
}
|
|
24
24
|
return void 0;
|
|
25
25
|
}
|
|
26
|
+
var PUBLIC_RPC_TENANT = "rnx-public-rpc";
|
|
27
|
+
var QUICKNODE_HOST_SUFFIX = ".quiknode.pro";
|
|
28
|
+
var PUBLIC_RPC_BY_QUICKNODE_CHAIN = {
|
|
29
|
+
"": "https://ethereum-rpc.publicnode.com",
|
|
30
|
+
"arbitrum-mainnet": "https://arbitrum-one-rpc.publicnode.com",
|
|
31
|
+
"avalanche-mainnet": "https://avalanche-c-chain-rpc.publicnode.com",
|
|
32
|
+
"base-mainnet": "https://base-rpc.publicnode.com",
|
|
33
|
+
"blast-mainnet": "https://blast-rpc.publicnode.com",
|
|
34
|
+
bsc: "https://bsc-rpc.publicnode.com",
|
|
35
|
+
"celo-mainnet": "https://celo-rpc.publicnode.com",
|
|
36
|
+
matic: "https://polygon-bor-rpc.publicnode.com",
|
|
37
|
+
optimism: "https://optimism-rpc.publicnode.com",
|
|
38
|
+
"soneium-mainnet": "https://soneium-rpc.publicnode.com",
|
|
39
|
+
"unichain-mainnet": "https://unichain-rpc.publicnode.com"
|
|
40
|
+
};
|
|
41
|
+
function resolveFetchProxyTargetUrl(requested) {
|
|
42
|
+
const host = requested.hostname.toLowerCase();
|
|
43
|
+
if (!host.endsWith(QUICKNODE_HOST_SUFFIX)) return requested;
|
|
44
|
+
const tenant = host.slice(0, -QUICKNODE_HOST_SUFFIX.length);
|
|
45
|
+
if (tenant !== PUBLIC_RPC_TENANT && !tenant.startsWith(`${PUBLIC_RPC_TENANT}.`)) {
|
|
46
|
+
return requested;
|
|
47
|
+
}
|
|
48
|
+
const chain = tenant === PUBLIC_RPC_TENANT ? "" : tenant.slice(PUBLIC_RPC_TENANT.length + 1);
|
|
49
|
+
const replacement = PUBLIC_RPC_BY_QUICKNODE_CHAIN[chain];
|
|
50
|
+
return replacement ? new URL(replacement) : requested;
|
|
51
|
+
}
|
|
26
52
|
function getFetchProxyTargetHeaders(targetUrl) {
|
|
27
53
|
const hostOverrides = headerOverridesFor(targetUrl.hostname);
|
|
28
54
|
return {
|
|
@@ -33,5 +59,7 @@ function getFetchProxyTargetHeaders(targetUrl) {
|
|
|
33
59
|
}
|
|
34
60
|
export {
|
|
35
61
|
FETCH_PROXY_BROWSER_USER_AGENT,
|
|
36
|
-
|
|
62
|
+
PUBLIC_RPC_TENANT,
|
|
63
|
+
getFetchProxyTargetHeaders,
|
|
64
|
+
resolveFetchProxyTargetUrl
|
|
37
65
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.570 | (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.570 | (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.570 | (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;
|
|
@@ -49,6 +49,7 @@ __export(src_exports, {
|
|
|
49
49
|
isRnxScreenCapture: () => isRnxScreenCapture,
|
|
50
50
|
jumpToSourceBabelPlugin: () => sootsimJumpToSourceBabelPlugin,
|
|
51
51
|
metroPlugin: () => metro_plugin_default,
|
|
52
|
+
packRnxCaptureRegions: () => packRnxCaptureRegions,
|
|
52
53
|
rnxCaptureRasterRegions: () => rnxCaptureRasterRegions,
|
|
53
54
|
rnxPlugin: () => rnxPlugin,
|
|
54
55
|
rnxRasterFrames: () => rnxRasterFrames,
|
|
@@ -59,12 +60,12 @@ module.exports = __toCommonJS(src_exports);
|
|
|
59
60
|
// cli/cloud-client.ts
|
|
60
61
|
var import_node_crypto = require("node:crypto");
|
|
61
62
|
|
|
62
|
-
// ../
|
|
63
|
-
var import_metro_fingerprint_registry = require("
|
|
63
|
+
// ../peach-engine/src/metro-fingerprint-registry-client.ts
|
|
64
|
+
var import_metro_fingerprint_registry = require("peachsim/metro-fingerprint-registry");
|
|
64
65
|
|
|
65
|
-
// ../
|
|
66
|
-
var import_metro_production_bundle = require("
|
|
67
|
-
var import_react_native_host_modules = require("
|
|
66
|
+
// ../peach-engine/src/metro-fingerprint.ts
|
|
67
|
+
var import_metro_production_bundle = require("peachsim/metro-production-bundle");
|
|
68
|
+
var import_react_native_host_modules = require("peachsim/react-native-host-modules");
|
|
68
69
|
|
|
69
70
|
// src/backend-origin.ts
|
|
70
71
|
function normalizeHostname(hostname) {
|
|
@@ -162,7 +163,7 @@ ${RNXSIM_METRO_SOURCE_MAP_COMMENT}${detached.sourceMappingUrl}`;
|
|
|
162
163
|
var name = "rnx";
|
|
163
164
|
var rnxPublicBrand = Object.freeze({
|
|
164
165
|
name,
|
|
165
|
-
packageName: "
|
|
166
|
+
packageName: "peachsim",
|
|
166
167
|
commandName: "rnx",
|
|
167
168
|
domain: "rnxsim.com",
|
|
168
169
|
origin: "https://rnxsim.com"
|
|
@@ -343,6 +344,22 @@ function createCloudSession(input) {
|
|
|
343
344
|
}
|
|
344
345
|
return session;
|
|
345
346
|
}
|
|
347
|
+
function createCloudBoxSession(input) {
|
|
348
|
+
const session = {
|
|
349
|
+
version: CLOUD_SESSION_VERSION,
|
|
350
|
+
service: "box",
|
|
351
|
+
boxId: input.boxId.trim(),
|
|
352
|
+
boxToken: input.boxToken,
|
|
353
|
+
apiOrigin: normalizeCloudOrigin(input.apiOrigin.trim()),
|
|
354
|
+
...input.platform ? { platform: input.platform } : {},
|
|
355
|
+
...input.device?.trim() ? { device: input.device.trim() } : {},
|
|
356
|
+
...input.artifact ? { artifact: input.artifact } : {}
|
|
357
|
+
};
|
|
358
|
+
if (!session.boxId || !session.boxToken) {
|
|
359
|
+
throw new Error("cloud box session requires a box, an origin, and a box token");
|
|
360
|
+
}
|
|
361
|
+
return session;
|
|
362
|
+
}
|
|
346
363
|
function parseCloudSession(encoded) {
|
|
347
364
|
const value = encoded.trim();
|
|
348
365
|
if (!value || value.length > MAX_ENCODED_SESSION_BYTES || !/^[A-Za-z0-9_-]+$/.test(value)) {
|
|
@@ -375,6 +392,17 @@ function parseCloudSession(encoded) {
|
|
|
375
392
|
const boxId = typeof parsed.boxId === "string" ? parsed.boxId : void 0;
|
|
376
393
|
const boxToken = typeof parsed.boxToken === "string" ? parsed.boxToken : void 0;
|
|
377
394
|
try {
|
|
395
|
+
if (parsed.service === "box") {
|
|
396
|
+
if (!boxId || !boxToken) throw new Error("unreadable cloud box session");
|
|
397
|
+
return createCloudBoxSession({
|
|
398
|
+
boxId,
|
|
399
|
+
boxToken,
|
|
400
|
+
apiOrigin,
|
|
401
|
+
platform,
|
|
402
|
+
device,
|
|
403
|
+
artifact
|
|
404
|
+
});
|
|
405
|
+
}
|
|
378
406
|
const simId = parsed.simId;
|
|
379
407
|
const claimId = parsed.claimId;
|
|
380
408
|
const token = parsed.token;
|
|
@@ -437,6 +465,14 @@ function responseError(status, text) {
|
|
|
437
465
|
function resolveCloudSessionForParsed(parsed) {
|
|
438
466
|
const session = readCloudSession();
|
|
439
467
|
if (!session) return null;
|
|
468
|
+
if (session.service === "box") {
|
|
469
|
+
if (parsed.simIdSource === "flag" && parsed.simId !== session.boxId) {
|
|
470
|
+
throw new Error(
|
|
471
|
+
`this shell is connected to box ${session.boxId}; ${parsed.simId ? `--sim ${parsed.simId}` : "the requested simulator"} is not available in this shell`
|
|
472
|
+
);
|
|
473
|
+
}
|
|
474
|
+
return session;
|
|
475
|
+
}
|
|
440
476
|
if (parsed.simIdSource === "flag" && parsed.simId !== session.simId) {
|
|
441
477
|
throw new Error(
|
|
442
478
|
`this shell is connected to remote simulator ${session.simId}; ${parsed.simId ? `--sim ${parsed.simId}` : "the requested simulator"} is not available in this shell`
|
|
@@ -532,10 +568,77 @@ var CloudBridge = class {
|
|
|
532
568
|
close() {
|
|
533
569
|
}
|
|
534
570
|
};
|
|
571
|
+
var CloudBoxBridge = class {
|
|
572
|
+
constructor(session) {
|
|
573
|
+
this.session = session;
|
|
574
|
+
}
|
|
575
|
+
plane = "cloud";
|
|
576
|
+
async send(command, options) {
|
|
577
|
+
const id = (0, import_node_crypto.randomUUID)();
|
|
578
|
+
const payload = {};
|
|
579
|
+
for (const [key, value] of Object.entries(command)) {
|
|
580
|
+
if (key !== "id" && key !== "simId") payload[key] = value;
|
|
581
|
+
}
|
|
582
|
+
let response;
|
|
583
|
+
try {
|
|
584
|
+
response = await fetch(
|
|
585
|
+
`${this.session.apiOrigin}/v1/boxes/${encodeURIComponent(this.session.boxId)}/commands`,
|
|
586
|
+
{
|
|
587
|
+
method: "POST",
|
|
588
|
+
headers: {
|
|
589
|
+
authorization: `Bearer ${this.session.boxToken}`,
|
|
590
|
+
"content-type": "application/json"
|
|
591
|
+
},
|
|
592
|
+
body: JSON.stringify({ id, command: payload }),
|
|
593
|
+
...options?.timeoutMs ? { signal: AbortSignal.timeout(options.timeoutMs) } : {}
|
|
594
|
+
}
|
|
595
|
+
);
|
|
596
|
+
} catch (error) {
|
|
597
|
+
throw new Error(
|
|
598
|
+
`could not reach box ${this.session.boxId} at ${this.session.apiOrigin}: ${error instanceof Error ? error.message : String(error)}`
|
|
599
|
+
);
|
|
600
|
+
}
|
|
601
|
+
const text = await response.text();
|
|
602
|
+
if (!response.ok) throw responseError(response.status, text);
|
|
603
|
+
let parsed;
|
|
604
|
+
try {
|
|
605
|
+
parsed = JSON.parse(text);
|
|
606
|
+
} catch {
|
|
607
|
+
throw new Error("box command returned unreadable JSON");
|
|
608
|
+
}
|
|
609
|
+
if (!isRecord2(parsed) || parsed.id !== id) {
|
|
610
|
+
throw new Error("box command returned an invalid command receipt");
|
|
611
|
+
}
|
|
612
|
+
if (typeof parsed.error === "string" && parsed.error) throw new Error(parsed.error);
|
|
613
|
+
if (!Object.hasOwn(parsed, "result")) {
|
|
614
|
+
throw new Error("box command receipt has no result");
|
|
615
|
+
}
|
|
616
|
+
return parsed.result;
|
|
617
|
+
}
|
|
618
|
+
listSims() {
|
|
619
|
+
return Promise.reject(new Error("a box does not expose a local simulator list"));
|
|
620
|
+
}
|
|
621
|
+
focusSim() {
|
|
622
|
+
return Promise.reject(new Error("a box simulator has no browser window to focus"));
|
|
623
|
+
}
|
|
624
|
+
resolveReloadedSim() {
|
|
625
|
+
return Promise.resolve(null);
|
|
626
|
+
}
|
|
627
|
+
closeSim() {
|
|
628
|
+
return Promise.reject(new Error("close a box simulator with rnx box stop"));
|
|
629
|
+
}
|
|
630
|
+
claim() {
|
|
631
|
+
return Promise.reject(
|
|
632
|
+
new Error("a box simulator is held by its Box page and has nothing to claim")
|
|
633
|
+
);
|
|
634
|
+
}
|
|
635
|
+
close() {
|
|
636
|
+
}
|
|
637
|
+
};
|
|
535
638
|
function createCloudBridgeForParsed(parsed) {
|
|
536
639
|
const session = resolveCloudSessionForParsed(parsed);
|
|
537
640
|
if (!session) return null;
|
|
538
|
-
return new CloudBridge(session);
|
|
641
|
+
return session.service === "box" ? new CloudBoxBridge(session) : new CloudBridge(session);
|
|
539
642
|
}
|
|
540
643
|
|
|
541
644
|
// cli/current-sim.ts
|
|
@@ -2967,7 +3070,7 @@ async function connect(options = {}) {
|
|
|
2967
3070
|
const bridge2 = createCloudBridgeForParsed(target);
|
|
2968
3071
|
if (!bridge2)
|
|
2969
3072
|
throw new SimConnectError("remote simulator session disappeared while connecting");
|
|
2970
|
-
return new SimClient(bridge2, cloud.simId, {
|
|
3073
|
+
return new SimClient(bridge2, cloud.service === "sim" ? cloud.simId : cloud.boxId, {
|
|
2971
3074
|
commandTimeoutMs: options.timeoutMs ?? 15e3
|
|
2972
3075
|
});
|
|
2973
3076
|
}
|
|
@@ -3003,7 +3106,7 @@ function selectRnxRasterNodeIds(tree) {
|
|
|
3003
3106
|
if (!visibleFrame || visibleFrame.width <= 0 || visibleFrame.height <= 0) continue;
|
|
3004
3107
|
if (node.type === "masked-view" || node.type === "text" && typeof node.text === "string" && (new RegExp("\\p{Emoji_Presentation}", "u").test(node.text) || new RegExp("\\uFE0F|\\u200D|\\u20E3|\\p{Emoji_Modifier}|\\p{Regional_Indicator}", "u").test(
|
|
3005
3108
|
node.text
|
|
3006
|
-
)) || node.style._liquidGlass !== void 0 || node.style._liquidGlassEdge !== void 0) {
|
|
3109
|
+
)) || node.style._liquidGlass !== void 0 || node.style._liquidGlassEdge !== void 0 || node.style._liquidGlassMaterialTint !== void 0) {
|
|
3007
3110
|
unsupported.add(node.nodeId);
|
|
3008
3111
|
}
|
|
3009
3112
|
}
|
|
@@ -3102,6 +3205,95 @@ function rnxCaptureRasterRegions(capture) {
|
|
|
3102
3205
|
return frame ? [{ key: String(nodeId), nodeId, frame }] : [];
|
|
3103
3206
|
});
|
|
3104
3207
|
}
|
|
3208
|
+
function packRnxCaptureRegions(regions, pixelRatio, surface) {
|
|
3209
|
+
const physical = regions.map((region) => {
|
|
3210
|
+
const left = Math.floor(region.frame.x * pixelRatio);
|
|
3211
|
+
const top = Math.floor(region.frame.y * pixelRatio);
|
|
3212
|
+
const right = Math.ceil((region.frame.x + region.frame.width) * pixelRatio);
|
|
3213
|
+
const bottom = Math.ceil((region.frame.y + region.frame.height) * pixelRatio);
|
|
3214
|
+
if (left < 0 || top < 0 || right > surface.pixelWidth || bottom > surface.pixelHeight || right <= left || bottom <= top) {
|
|
3215
|
+
throw new Error(`capture region ${region.key} is outside the app surface`);
|
|
3216
|
+
}
|
|
3217
|
+
return {
|
|
3218
|
+
key: region.key,
|
|
3219
|
+
nodeId: region.nodeId,
|
|
3220
|
+
frame: {
|
|
3221
|
+
x: left / pixelRatio,
|
|
3222
|
+
y: top / pixelRatio,
|
|
3223
|
+
width: (right - left) / pixelRatio,
|
|
3224
|
+
height: (bottom - top) / pixelRatio
|
|
3225
|
+
},
|
|
3226
|
+
sourceX: left,
|
|
3227
|
+
sourceY: top,
|
|
3228
|
+
pixelWidth: right - left,
|
|
3229
|
+
pixelHeight: bottom - top
|
|
3230
|
+
};
|
|
3231
|
+
});
|
|
3232
|
+
const largestWidth = Math.max(...physical.map((region) => region.pixelWidth));
|
|
3233
|
+
const totalArea = physical.reduce(
|
|
3234
|
+
(area, region) => area + region.pixelWidth * region.pixelHeight,
|
|
3235
|
+
0
|
|
3236
|
+
);
|
|
3237
|
+
if (totalArea > 4194304) {
|
|
3238
|
+
throw new Error("capture region pixels exceed the atlas budget");
|
|
3239
|
+
}
|
|
3240
|
+
const candidates = [
|
|
3241
|
+
largestWidth,
|
|
3242
|
+
Math.max(largestWidth, Math.ceil(Math.sqrt(totalArea))),
|
|
3243
|
+
Math.max(largestWidth, surface.pixelWidth),
|
|
3244
|
+
4096
|
|
3245
|
+
];
|
|
3246
|
+
const ordered = [...physical].sort(
|
|
3247
|
+
(left, right) => right.pixelHeight - left.pixelHeight || right.pixelWidth - left.pixelWidth || left.key.localeCompare(right.key)
|
|
3248
|
+
);
|
|
3249
|
+
let best = null;
|
|
3250
|
+
for (const candidate of [...new Set(candidates)]) {
|
|
3251
|
+
if (candidate > 4096) continue;
|
|
3252
|
+
let x = 0;
|
|
3253
|
+
let y = 0;
|
|
3254
|
+
let rowHeight = 0;
|
|
3255
|
+
let usedWidth = 0;
|
|
3256
|
+
const packed = [];
|
|
3257
|
+
for (const region of ordered) {
|
|
3258
|
+
if (x > 0 && x + region.pixelWidth > candidate) {
|
|
3259
|
+
y += rowHeight;
|
|
3260
|
+
x = 0;
|
|
3261
|
+
rowHeight = 0;
|
|
3262
|
+
}
|
|
3263
|
+
packed.push({ ...region, atlasX: x, atlasY: y });
|
|
3264
|
+
x += region.pixelWidth;
|
|
3265
|
+
rowHeight = Math.max(rowHeight, region.pixelHeight);
|
|
3266
|
+
usedWidth = Math.max(usedWidth, x);
|
|
3267
|
+
}
|
|
3268
|
+
const height2 = y + rowHeight;
|
|
3269
|
+
if (height2 > 4096 || usedWidth * height2 > 4194304) continue;
|
|
3270
|
+
const result = { width: usedWidth, height: height2, regions: packed };
|
|
3271
|
+
if (!best || result.width * result.height < best.width * best.height) best = result;
|
|
3272
|
+
}
|
|
3273
|
+
if (!best) throw new Error("capture regions cannot fit in one bounded atlas");
|
|
3274
|
+
const width = best.width / pixelRatio;
|
|
3275
|
+
const height = best.height / pixelRatio;
|
|
3276
|
+
return {
|
|
3277
|
+
width,
|
|
3278
|
+
height,
|
|
3279
|
+
pixelWidth: best.width,
|
|
3280
|
+
pixelHeight: best.height,
|
|
3281
|
+
regions: best.regions,
|
|
3282
|
+
atlasRegions: best.regions.map((region) => ({
|
|
3283
|
+
key: region.key,
|
|
3284
|
+
nodeId: region.nodeId,
|
|
3285
|
+
frame: region.frame,
|
|
3286
|
+
// a region flush with the far edge is anchored to the logical edge so
|
|
3287
|
+
// its source never runs past the atlas by a rounding hair
|
|
3288
|
+
source: {
|
|
3289
|
+
x: region.atlasX + region.pixelWidth === best.width ? width - region.frame.width : region.atlasX / pixelRatio,
|
|
3290
|
+
y: region.atlasY + region.pixelHeight === best.height ? height - region.frame.height : region.atlasY / pixelRatio,
|
|
3291
|
+
width: region.frame.width,
|
|
3292
|
+
height: region.frame.height
|
|
3293
|
+
}
|
|
3294
|
+
}))
|
|
3295
|
+
};
|
|
3296
|
+
}
|
|
3105
3297
|
function captureRecord(value) {
|
|
3106
3298
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
3107
3299
|
}
|
|
@@ -3157,7 +3349,7 @@ function isRnxScreenCapture(value) {
|
|
|
3157
3349
|
return captureRecord(tree.viewport) && captureInteger(tree.viewport.width) && tree.viewport.width > 0 && captureInteger(tree.viewport.height) && tree.viewport.height > 0 && captureInteger(tree.rootNodeId) && (tree.commitRevision === void 0 || captureInteger(tree.commitRevision)) && Array.isArray(tree.nodes) && tree.nodes.every(captureNode) && (visual === void 0 || visual.kind === "png" && (visual.producer === "headless-cpu-app-surface" || visual.producer === "browser-compositor-app-surface") && typeof visual.dataUri === "string" && visual.dataUri.startsWith("data:image/png;base64,") && captureInteger(visual.pixelWidth) && visual.pixelWidth > 0 && captureInteger(visual.pixelHeight) && visual.pixelHeight > 0);
|
|
3158
3350
|
}
|
|
3159
3351
|
function isRnxCaptureRegionAtlas(value) {
|
|
3160
|
-
if (!captureRecord(value) || value.kind !== "png-atlas" || value.producer !== "headless-cpu-app-surface" || typeof value.dataUri !== "string" || !value.dataUri.startsWith("data:image/png;base64,") || !captureNumber(value.width) || value.width <= 0 || !captureNumber(value.height) || value.height <= 0 || !captureInteger(value.pixelWidth) || value.pixelWidth <= 0 || !captureInteger(value.pixelHeight) || value.pixelHeight <= 0 || !Array.isArray(value.regions) || value.regions.length === 0 || value.regions.length > 256) {
|
|
3352
|
+
if (!captureRecord(value) || value.kind !== "png-atlas" || value.producer !== "headless-cpu-app-surface" && value.producer !== "browser-compositor-app-surface" || typeof value.dataUri !== "string" || !value.dataUri.startsWith("data:image/png;base64,") || !captureNumber(value.width) || value.width <= 0 || !captureNumber(value.height) || value.height <= 0 || !captureInteger(value.pixelWidth) || value.pixelWidth <= 0 || !captureInteger(value.pixelHeight) || value.pixelHeight <= 0 || !Array.isArray(value.regions) || value.regions.length === 0 || value.regions.length > 256) {
|
|
3161
3353
|
return false;
|
|
3162
3354
|
}
|
|
3163
3355
|
const scale = value.pixelWidth / value.width;
|
|
@@ -3690,7 +3882,7 @@ function findMonorepoRoot() {
|
|
|
3690
3882
|
if (_monorepoRootCache !== void 0) return _monorepoRootCache;
|
|
3691
3883
|
let dir = import_path2.default.dirname((0, import_url.fileURLToPath)(__sootsim_import_meta_url));
|
|
3692
3884
|
for (let i = 0; i < 12 && dir !== import_path2.default.dirname(dir); i++) {
|
|
3693
|
-
if (import_fs3.default.existsSync(import_path2.default.join(dir, "packages/
|
|
3885
|
+
if (import_fs3.default.existsSync(import_path2.default.join(dir, "packages/peach-engine/package.json")) && import_fs3.default.existsSync(import_path2.default.join(dir, "public/sootsim"))) {
|
|
3694
3886
|
_monorepoRootCache = dir;
|
|
3695
3887
|
return dir;
|
|
3696
3888
|
}
|
|
@@ -3704,7 +3896,7 @@ function resolveDevCheckoutRuntimeRoot() {
|
|
|
3704
3896
|
const root = findMonorepoRoot();
|
|
3705
3897
|
if (!root) return null;
|
|
3706
3898
|
const devBuild = import_path2.default.join(root, "public/sootsim");
|
|
3707
|
-
if (import_fs3.default.existsSync(import_path2.default.join(devBuild, "index.html")) && import_fs3.default.existsSync(import_path2.default.join(devBuild, "engine/index.html")) && import_fs3.default.existsSync(import_path2.default.join(devBuild, "engine-tenant/worker.js"))) {
|
|
3899
|
+
if (import_fs3.default.existsSync(import_path2.default.join(devBuild, "index.html")) && import_fs3.default.existsSync(import_path2.default.join(devBuild, "engine/index.html")) && import_fs3.default.existsSync(import_path2.default.join(devBuild, "engine-tenant/worker.js")) && import_fs3.default.existsSync(import_path2.default.join(devBuild, "engine-tenant/worker.prod.js"))) {
|
|
3708
3900
|
return devBuild;
|
|
3709
3901
|
}
|
|
3710
3902
|
return null;
|
|
@@ -3997,7 +4189,7 @@ var prefix = "/__soot";
|
|
|
3997
4189
|
function readCallableMetroExport(moduleValue, label) {
|
|
3998
4190
|
const callable = typeof moduleValue === "function" ? moduleValue : typeof moduleValue === "object" && moduleValue !== null ? Reflect.get(moduleValue, "default") : void 0;
|
|
3999
4191
|
if (typeof callable !== "function") {
|
|
4000
|
-
throw new Error(`
|
|
4192
|
+
throw new Error(`peachsim: Metro ${label} module did not export a function`);
|
|
4001
4193
|
}
|
|
4002
4194
|
return (...args) => Reflect.apply(callable, void 0, args);
|
|
4003
4195
|
}
|
|
@@ -4018,7 +4210,7 @@ function createMetroDefaultSerializer(projectRoot) {
|
|
|
4018
4210
|
);
|
|
4019
4211
|
const code = typeof serialized === "object" && serialized !== null ? Reflect.get(serialized, "code") : void 0;
|
|
4020
4212
|
if (typeof code !== "string") {
|
|
4021
|
-
throw new Error("
|
|
4213
|
+
throw new Error("peachsim: Metro bundleToString did not return bundle code");
|
|
4022
4214
|
}
|
|
4023
4215
|
return code;
|
|
4024
4216
|
};
|
|
@@ -4034,7 +4226,7 @@ function appendRNXModulePaths(result, graph, options, projectRoot) {
|
|
|
4034
4226
|
modulePaths[String(createModuleId(module2.path))] = import_path4.default.relative(projectRoot, module2.path).replaceAll(import_path4.default.sep, "/");
|
|
4035
4227
|
}
|
|
4036
4228
|
if (Object.keys(modulePaths).length !== dependencies.size) {
|
|
4037
|
-
throw new Error("
|
|
4229
|
+
throw new Error("peachsim: bundle module IDs were not unique");
|
|
4038
4230
|
}
|
|
4039
4231
|
const specifiersByModuleId = /* @__PURE__ */ new Map();
|
|
4040
4232
|
for (const module2 of dependencies.values()) {
|
|
@@ -4261,6 +4453,7 @@ function sootsimJumpToSourceBabelPlugin(api, options = {}) {
|
|
|
4261
4453
|
isRnxScreenCapture,
|
|
4262
4454
|
jumpToSourceBabelPlugin,
|
|
4263
4455
|
metroPlugin,
|
|
4456
|
+
packRnxCaptureRegions,
|
|
4264
4457
|
rnxCaptureRasterRegions,
|
|
4265
4458
|
rnxPlugin,
|
|
4266
4459
|
rnxRasterFrames,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.570 | (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.570 | (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;
|
package/dist-lib/menu.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.570 | (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;
|
|
@@ -45,7 +45,7 @@ module.exports = __toCommonJS(menu_exports);
|
|
|
45
45
|
var name = "rnx";
|
|
46
46
|
var rnxPublicBrand = Object.freeze({
|
|
47
47
|
name,
|
|
48
|
-
packageName: "
|
|
48
|
+
packageName: "peachsim",
|
|
49
49
|
commandName: "rnx",
|
|
50
50
|
domain: "rnxsim.com",
|
|
51
51
|
origin: "https://rnxsim.com"
|
package/dist-lib/menu.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.570 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
|
|
3
3
|
// src/public-brand.ts
|
|
4
4
|
var name = "rnx";
|
|
5
5
|
var rnxPublicBrand = Object.freeze({
|
|
6
6
|
name,
|
|
7
|
-
packageName: "
|
|
7
|
+
packageName: "peachsim",
|
|
8
8
|
commandName: "rnx",
|
|
9
9
|
domain: "rnxsim.com",
|
|
10
10
|
origin: "https://rnxsim.com"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.570 | (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.570 | (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;
|
|
@@ -38,7 +38,7 @@ var RNXSIM_METRO_MODULE_PATHS_PREFIX = "globalThis.__sootsimModulePaths=";
|
|
|
38
38
|
var RNX_METRO_MODULE_IDENTITY_VERSION = 2;
|
|
39
39
|
function toRNXProductionBundleUrl(bundleUrl) {
|
|
40
40
|
const relative = bundleUrl.startsWith("/");
|
|
41
|
-
const url = new URL(bundleUrl, "http://
|
|
41
|
+
const url = new URL(bundleUrl, "http://peachsim.local");
|
|
42
42
|
url.searchParams.set("dev", "false");
|
|
43
43
|
url.searchParams.set("hot", "false");
|
|
44
44
|
url.searchParams.set("minify", "true");
|
|
@@ -46,7 +46,7 @@ function toRNXProductionBundleUrl(bundleUrl) {
|
|
|
46
46
|
}
|
|
47
47
|
function toRNXDevelopmentBundleUrl(bundleUrl) {
|
|
48
48
|
const relative = bundleUrl.startsWith("/");
|
|
49
|
-
const url = new URL(bundleUrl, "http://
|
|
49
|
+
const url = new URL(bundleUrl, "http://peachsim.local");
|
|
50
50
|
url.searchParams.set("dev", "true");
|
|
51
51
|
url.searchParams.set("hot", "false");
|
|
52
52
|
url.searchParams.set("minify", "false");
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.570 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
|
|
3
3
|
// src/metro-production-bundle.ts
|
|
4
4
|
var RNXSIM_METRO_MODULE_PATHS_PREFIX = "globalThis.__sootsimModulePaths=";
|
|
5
5
|
var RNX_METRO_MODULE_IDENTITY_VERSION = 2;
|
|
6
6
|
function toRNXProductionBundleUrl(bundleUrl) {
|
|
7
7
|
const relative = bundleUrl.startsWith("/");
|
|
8
|
-
const url = new URL(bundleUrl, "http://
|
|
8
|
+
const url = new URL(bundleUrl, "http://peachsim.local");
|
|
9
9
|
url.searchParams.set("dev", "false");
|
|
10
10
|
url.searchParams.set("hot", "false");
|
|
11
11
|
url.searchParams.set("minify", "true");
|
|
@@ -13,7 +13,7 @@ function toRNXProductionBundleUrl(bundleUrl) {
|
|
|
13
13
|
}
|
|
14
14
|
function toRNXDevelopmentBundleUrl(bundleUrl) {
|
|
15
15
|
const relative = bundleUrl.startsWith("/");
|
|
16
|
-
const url = new URL(bundleUrl, "http://
|
|
16
|
+
const url = new URL(bundleUrl, "http://peachsim.local");
|
|
17
17
|
url.searchParams.set("dev", "true");
|
|
18
18
|
url.searchParams.set("hot", "false");
|
|
19
19
|
url.searchParams.set("minify", "false");
|
package/dist-lib/metro.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.570 | (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;
|
|
@@ -492,7 +492,7 @@ var RNXSIM_METRO_MODULE_PATHS_PREFIX = "globalThis.__sootsimModulePaths=";
|
|
|
492
492
|
var RNX_METRO_MODULE_IDENTITY_VERSION = 2;
|
|
493
493
|
function toRNXProductionBundleUrl(bundleUrl) {
|
|
494
494
|
const relative2 = bundleUrl.startsWith("/");
|
|
495
|
-
const url = new URL(bundleUrl, "http://
|
|
495
|
+
const url = new URL(bundleUrl, "http://peachsim.local");
|
|
496
496
|
url.searchParams.set("dev", "false");
|
|
497
497
|
url.searchParams.set("hot", "false");
|
|
498
498
|
url.searchParams.set("minify", "true");
|
|
@@ -500,7 +500,7 @@ function toRNXProductionBundleUrl(bundleUrl) {
|
|
|
500
500
|
}
|
|
501
501
|
function toRNXDevelopmentBundleUrl(bundleUrl) {
|
|
502
502
|
const relative2 = bundleUrl.startsWith("/");
|
|
503
|
-
const url = new URL(bundleUrl, "http://
|
|
503
|
+
const url = new URL(bundleUrl, "http://peachsim.local");
|
|
504
504
|
url.searchParams.set("dev", "true");
|
|
505
505
|
url.searchParams.set("hot", "false");
|
|
506
506
|
url.searchParams.set("minify", "false");
|
|
@@ -575,7 +575,7 @@ function findMonorepoRoot() {
|
|
|
575
575
|
if (_monorepoRootCache !== void 0) return _monorepoRootCache;
|
|
576
576
|
let dir = import_path.default.dirname((0, import_url.fileURLToPath)(__sootsim_import_meta_url));
|
|
577
577
|
for (let i = 0; i < 12 && dir !== import_path.default.dirname(dir); i++) {
|
|
578
|
-
if (import_fs.default.existsSync(import_path.default.join(dir, "packages/
|
|
578
|
+
if (import_fs.default.existsSync(import_path.default.join(dir, "packages/peach-engine/package.json")) && import_fs.default.existsSync(import_path.default.join(dir, "public/sootsim"))) {
|
|
579
579
|
_monorepoRootCache = dir;
|
|
580
580
|
return dir;
|
|
581
581
|
}
|
|
@@ -589,7 +589,7 @@ function resolveDevCheckoutRuntimeRoot() {
|
|
|
589
589
|
const root = findMonorepoRoot();
|
|
590
590
|
if (!root) return null;
|
|
591
591
|
const devBuild = import_path.default.join(root, "public/sootsim");
|
|
592
|
-
if (import_fs.default.existsSync(import_path.default.join(devBuild, "index.html")) && import_fs.default.existsSync(import_path.default.join(devBuild, "engine/index.html")) && import_fs.default.existsSync(import_path.default.join(devBuild, "engine-tenant/worker.js"))) {
|
|
592
|
+
if (import_fs.default.existsSync(import_path.default.join(devBuild, "index.html")) && import_fs.default.existsSync(import_path.default.join(devBuild, "engine/index.html")) && import_fs.default.existsSync(import_path.default.join(devBuild, "engine-tenant/worker.js")) && import_fs.default.existsSync(import_path.default.join(devBuild, "engine-tenant/worker.prod.js"))) {
|
|
593
593
|
return devBuild;
|
|
594
594
|
}
|
|
595
595
|
return null;
|
|
@@ -714,7 +714,7 @@ var prefix = "/__soot";
|
|
|
714
714
|
function readCallableMetroExport(moduleValue, label) {
|
|
715
715
|
const callable = typeof moduleValue === "function" ? moduleValue : typeof moduleValue === "object" && moduleValue !== null ? Reflect.get(moduleValue, "default") : void 0;
|
|
716
716
|
if (typeof callable !== "function") {
|
|
717
|
-
throw new Error(`
|
|
717
|
+
throw new Error(`peachsim: Metro ${label} module did not export a function`);
|
|
718
718
|
}
|
|
719
719
|
return (...args) => Reflect.apply(callable, void 0, args);
|
|
720
720
|
}
|
|
@@ -735,7 +735,7 @@ function createMetroDefaultSerializer(projectRoot) {
|
|
|
735
735
|
);
|
|
736
736
|
const code = typeof serialized === "object" && serialized !== null ? Reflect.get(serialized, "code") : void 0;
|
|
737
737
|
if (typeof code !== "string") {
|
|
738
|
-
throw new Error("
|
|
738
|
+
throw new Error("peachsim: Metro bundleToString did not return bundle code");
|
|
739
739
|
}
|
|
740
740
|
return code;
|
|
741
741
|
};
|
|
@@ -751,7 +751,7 @@ function appendRNXModulePaths(result, graph, options, projectRoot) {
|
|
|
751
751
|
modulePaths[String(createModuleId(module2.path))] = import_path2.default.relative(projectRoot, module2.path).replaceAll(import_path2.default.sep, "/");
|
|
752
752
|
}
|
|
753
753
|
if (Object.keys(modulePaths).length !== dependencies.size) {
|
|
754
|
-
throw new Error("
|
|
754
|
+
throw new Error("peachsim: bundle module IDs were not unique");
|
|
755
755
|
}
|
|
756
756
|
const specifiersByModuleId = /* @__PURE__ */ new Map();
|
|
757
757
|
for (const module2 of dependencies.values()) {
|
package/dist-lib/profiles.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.570 | (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;
|