peachsim 0.1.527
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/LICENSE +22 -0
- package/README.md +640 -0
- package/cli/app-config.ts +82 -0
- package/cli/app-fonts.ts +388 -0
- package/cli/app-project.ts +59 -0
- package/cli/app-splash.ts +171 -0
- package/cli/app-state-reset.ts +26 -0
- package/cli/auth.ts +184 -0
- package/cli/bin.ts +59 -0
- package/cli/bridge-diagnostics.ts +226 -0
- package/cli/bridge-flow-runner.ts +2806 -0
- package/cli/browser-backend.ts +44 -0
- package/cli/browser-evals.ts +96 -0
- package/cli/cli-update.ts +261 -0
- package/cli/cloud-client.ts +1530 -0
- package/cli/cloud-dispatch.ts +206 -0
- package/cli/cloud-session.ts +227 -0
- package/cli/command-contract.ts +221 -0
- package/cli/command-registry.ts +304 -0
- package/cli/commands/agent-wrapper.ts +1048 -0
- package/cli/commands/agent.ts +439 -0
- package/cli/commands/app-fonts.ts +99 -0
- package/cli/commands/assert.ts +542 -0
- package/cli/commands/auth.ts +71 -0
- package/cli/commands/box/bundle-plane.ts +71 -0
- package/cli/commands/box/checkout-plane.ts +256 -0
- package/cli/commands/box/plane-share.ts +208 -0
- package/cli/commands/box/rnx-command.ts +60 -0
- package/cli/commands/box/search-command.ts +157 -0
- package/cli/commands/box.ts +925 -0
- package/cli/commands/camera.ts +266 -0
- package/cli/commands/cleanup.ts +169 -0
- package/cli/commands/compat.ts +176 -0
- package/cli/commands/config.ts +34 -0
- package/cli/commands/control.ts +2154 -0
- package/cli/commands/cpu-profile.ts +941 -0
- package/cli/commands/daemon-mac-app.ts +165 -0
- package/cli/commands/daemon.ts +800 -0
- package/cli/commands/debug.ts +751 -0
- package/cli/commands/desktop.ts +39 -0
- package/cli/commands/detect.ts +201 -0
- package/cli/commands/detox.ts +481 -0
- package/cli/commands/device.ts +134 -0
- package/cli/commands/diagnose.ts +589 -0
- package/cli/commands/do-chain.ts +408 -0
- package/cli/commands/electron.ts +94 -0
- package/cli/commands/film.ts +379 -0
- package/cli/commands/flow.ts +1240 -0
- package/cli/commands/inspect/actions.ts +516 -0
- package/cli/commands/inspect/core.ts +2086 -0
- package/cli/commands/inspect/count.ts +17 -0
- package/cli/commands/inspect/describe.ts +119 -0
- package/cli/commands/inspect/env.ts +25 -0
- package/cli/commands/inspect/find.ts +169 -0
- package/cli/commands/inspect/get-layout.ts +53 -0
- package/cli/commands/inspect/keyboard.ts +54 -0
- package/cli/commands/inspect/list.ts +175 -0
- package/cli/commands/inspect/memory.ts +215 -0
- package/cli/commands/inspect/redaction.ts +39 -0
- package/cli/commands/inspect/resolve-target.ts +77 -0
- package/cli/commands/inspect/screens.ts +78 -0
- package/cli/commands/inspect/settle.ts +32 -0
- package/cli/commands/inspect/settling.ts +197 -0
- package/cli/commands/inspect/shared.ts +259 -0
- package/cli/commands/inspect/sleep.ts +15 -0
- package/cli/commands/inspect/tree.ts +23 -0
- package/cli/commands/inspect/url.ts +17 -0
- package/cli/commands/inspect/wait-event.ts +211 -0
- package/cli/commands/inspect/wait-idle.ts +25 -0
- package/cli/commands/inspect/wait-ready.ts +87 -0
- package/cli/commands/inspect/wait-selector.ts +59 -0
- package/cli/commands/inspect/wait.ts +32 -0
- package/cli/commands/inspect.ts +4738 -0
- package/cli/commands/install-cli.ts +275 -0
- package/cli/commands/install-desktop.ts +385 -0
- package/cli/commands/login.ts +357 -0
- package/cli/commands/logout.ts +24 -0
- package/cli/commands/maestro-generate.ts +375 -0
- package/cli/commands/maestro.ts +536 -0
- package/cli/commands/mode.ts +58 -0
- package/cli/commands/no-bridge-hint.ts +80 -0
- package/cli/commands/perf.ts +67 -0
- package/cli/commands/permissions.ts +203 -0
- package/cli/commands/platform.ts +410 -0
- package/cli/commands/preview.ts +103 -0
- package/cli/commands/profile.ts +106 -0
- package/cli/commands/react.ts +353 -0
- package/cli/commands/record.ts +1435 -0
- package/cli/commands/report-issue.ts +305 -0
- package/cli/commands/reset.ts +89 -0
- package/cli/commands/runtime.ts +348 -0
- package/cli/commands/screenshot-command.ts +106 -0
- package/cli/commands/screenshot-layers.ts +144 -0
- package/cli/commands/screenshot-mode.ts +38 -0
- package/cli/commands/screenshot.ts +492 -0
- package/cli/commands/screenshots-capture.ts +608 -0
- package/cli/commands/screenshots.ts +127 -0
- package/cli/commands/serve.ts +139 -0
- package/cli/commands/setup.ts +416 -0
- package/cli/commands/shell-boolean-mode.ts +82 -0
- package/cli/commands/skills.ts +468 -0
- package/cli/commands/slides.ts +357 -0
- package/cli/commands/state.ts +94 -0
- package/cli/commands/storage.ts +58 -0
- package/cli/commands/telemetry.ts +55 -0
- package/cli/commands/test.ts +535 -0
- package/cli/commands/three-mode.ts +771 -0
- package/cli/commands/timeline.ts +121 -0
- package/cli/commands/upgrade.ts +167 -0
- package/cli/commands/upload.ts +1203 -0
- package/cli/commands/version.ts +63 -0
- package/cli/commands/welcome.ts +17 -0
- package/cli/commands/what-happened.ts +328 -0
- package/cli/current-sim.ts +217 -0
- package/cli/desktop-companion.ts +315 -0
- package/cli/drivers/electron.ts +70 -0
- package/cli/drivers/index.ts +20 -0
- package/cli/drivers/playwright-provisioning.ts +184 -0
- package/cli/drivers/playwright-sim-host.ts +537 -0
- package/cli/drivers/playwright.ts +209 -0
- package/cli/drivers/registry.ts +65 -0
- package/cli/drivers/types.ts +102 -0
- package/cli/flow-export.ts +55 -0
- package/cli/flow-file.ts +142 -0
- package/cli/flow-live-status.ts +126 -0
- package/cli/flow-session.ts +140 -0
- package/cli/help-core.ts +143 -0
- package/cli/help.ts +44 -0
- package/cli/hidden-runtime-alias.ts +19 -0
- package/cli/hints.ts +214 -0
- package/cli/inspect-notice-state.ts +114 -0
- package/cli/internal-child.ts +176 -0
- package/cli/maestro-js.ts +323 -0
- package/cli/main.ts +704 -0
- package/cli/open-url.ts +8 -0
- package/cli/outbound-endpoints.ts +830 -0
- package/cli/parent-pid.ts +204 -0
- package/cli/parse-args.ts +189 -0
- package/cli/privacy.ts +53 -0
- package/cli/prompt.ts +56 -0
- package/cli/recording-access.ts +108 -0
- package/cli/registry.ts +2 -0
- package/cli/resolve-assets.ts +63 -0
- package/cli/rnx-in-process.ts +98 -0
- package/cli/run-registry.ts +226 -0
- package/cli/run-rnx-core.ts +148 -0
- package/cli/run-rnx.ts +137 -0
- package/cli/runtime-notes.ts +66 -0
- package/cli/runtime-summary.ts +25 -0
- package/cli/secure-file.ts +31 -0
- package/cli/self-invocation.ts +58 -0
- package/cli/send-to-box.ts +109 -0
- package/cli/setup-repository.ts +191 -0
- package/cli/shell-init.ts +98 -0
- package/cli/standalone.ts +4 -0
- package/cli/telemetry.ts +84 -0
- package/cli/ui.ts +68 -0
- package/cli/ws-bridge.ts +1020 -0
- package/detox/attempt-events.cjs +23 -0
- package/detox/colors.ts +54 -0
- package/detox/config-loader.ts +135 -0
- package/detox/element-types.ts +48 -0
- package/detox/expectations.ts +534 -0
- package/detox/gestures.ts +501 -0
- package/detox/index.ts +2694 -0
- package/detox/jest-preset.cjs +29 -0
- package/detox/jest-setup-after-env.cjs +22 -0
- package/detox/matchers.ts +30 -0
- package/detox/motion-change.cjs +109 -0
- package/detox/motion-change.d.cts +35 -0
- package/detox/navigation-lifecycle.ts +290 -0
- package/detox/navigation.ts +43 -0
- package/detox/proof-frame.cjs +114 -0
- package/detox/record-block-execution.cjs +78 -0
- package/detox/screenshots/animated-color-test-rest-norngh.png +0 -0
- package/detox/screenshots/color-test-after-drag-norngh.png +0 -0
- package/detox/screenshots/color-test-rest-norngh.png +0 -0
- package/detox/screenshots/theme-blue-toggle.png +0 -0
- package/detox/screenshots/theme-blue.png +0 -0
- package/detox/screenshots/theme-red-toggle.png +0 -0
- package/detox/screenshots/theme-red.png +0 -0
- package/dist-lib/agent-daemon-client.cjs +502 -0
- package/dist-lib/agent-events.cjs +48 -0
- package/dist-lib/agent-identity.cjs +53 -0
- package/dist-lib/agent-sessions.cjs +759 -0
- package/dist-lib/attached-projects.cjs +526 -0
- package/dist-lib/auth/shared-session.cjs +208 -0
- package/dist-lib/backend-origin.cjs +88 -0
- package/dist-lib/beta.cjs +41 -0
- package/dist-lib/beta.mjs +13 -0
- package/dist-lib/bridge-constants.cjs +161 -0
- package/dist-lib/bridge-contract-input.cjs +451 -0
- package/dist-lib/bridge-contract-input.mjs +414 -0
- package/dist-lib/bridge-contract.cjs +130 -0
- package/dist-lib/bridge-contract.mjs +94 -0
- package/dist-lib/capture-contract.cjs +220 -0
- package/dist-lib/capture-contract.mjs +190 -0
- package/dist-lib/cli-constants.cjs +32 -0
- package/dist-lib/cloud-contract.cjs +194 -0
- package/dist-lib/cloud-contract.mjs +145 -0
- package/dist-lib/cloud.cjs +670 -0
- package/dist-lib/cloud.mjs +639 -0
- package/dist-lib/config.cjs +96 -0
- package/dist-lib/detox/index.cjs +3789 -0
- package/dist-lib/detox/jest-preset.cjs +29 -0
- package/dist-lib/dev-bundle-resolution.cjs +290 -0
- package/dist-lib/home-paths.cjs +638 -0
- package/dist-lib/host/bridge-host.cjs +10903 -0
- package/dist-lib/host/fetch-proxy-handler.cjs +421 -0
- package/dist-lib/host/fetch-proxy-overrides.cjs +63 -0
- package/dist-lib/host/fetch-proxy-overrides.mjs +37 -0
- package/dist-lib/host/replacement-module-handler.cjs +469 -0
- package/dist-lib/host/websocket-proxy.cjs +298 -0
- package/dist-lib/index.cjs +4268 -0
- package/dist-lib/jump-to-source-babel.cjs +93 -0
- package/dist-lib/jump-to-source-native.cjs +112 -0
- package/dist-lib/menu.cjs +646 -0
- package/dist-lib/menu.mjs +604 -0
- package/dist-lib/metro-fingerprint-registry.cjs +186 -0
- package/dist-lib/metro-fingerprint-registry.mjs +156 -0
- package/dist-lib/metro-production-bundle.cjs +329 -0
- package/dist-lib/metro-production-bundle.mjs +295 -0
- package/dist-lib/metro.cjs +904 -0
- package/dist-lib/profiles.cjs +246 -0
- package/dist-lib/public-brand.cjs +39 -0
- package/dist-lib/react-native-host-modules.cjs +51 -0
- package/dist-lib/react-native-host-modules.mjs +25 -0
- package/dist-lib/render-mode.cjs +54 -0
- package/dist-lib/scripts/dev-server-scanner.cjs +1232 -0
- package/dist-lib/sdk.cjs +2433 -0
- package/dist-lib/sdk.mjs +2336 -0
- package/dist-lib/skills.cjs +39132 -0
- package/dist-lib/swift-submit.cjs +92 -0
- package/dist-lib/swift-submit.mjs +65 -0
- package/dist-lib/swift.cjs +1646 -0
- package/dist-lib/vite.cjs +1591 -0
- package/package.json +290 -0
- package/scripts/dev-server-scanner.ts +1291 -0
- package/scripts/optional-demo-registry.ts +113 -0
- package/skills/contrast/SKILL.md +165 -0
- package/skills/rnx-debug/SKILL.md +433 -0
- package/skills/rnx-perf/SKILL.md +399 -0
- package/skills/rnx-setup/SKILL.md +172 -0
- package/skills/rnx-test/SKILL.md +321 -0
- package/skills/rnx-visual/SKILL.md +126 -0
- package/src/agent-daemon-client.ts +410 -0
- package/src/agent-events.ts +71 -0
- package/src/agent-identity.ts +23 -0
- package/src/agent-prompt.ts +71 -0
- package/src/agent-sessions.ts +580 -0
- package/src/app-url.ts +39 -0
- package/src/attached-projects.ts +539 -0
- package/src/auth/shared-session.ts +235 -0
- package/src/backend-origin.ts +70 -0
- package/src/beta.ts +19 -0
- package/src/bridge-constants.ts +175 -0
- package/src/bridge-contract-input.ts +502 -0
- package/src/bridge-contract.ts +558 -0
- package/src/browser-cache.ts +16 -0
- package/src/capture-contract.ts +587 -0
- package/src/cli-constants.ts +1 -0
- package/src/cli-version.ts +40 -0
- package/src/cloud-contract.ts +274 -0
- package/src/cloud.ts +762 -0
- package/src/codex-client.ts +234 -0
- package/src/config.ts +132 -0
- package/src/connect.ts +101 -0
- package/src/dev-bundle-resolution.ts +346 -0
- package/src/dev-server-open.ts +198 -0
- package/src/disk-cleanup.ts +540 -0
- package/src/flow-timeout-scale.ts +15 -0
- package/src/home-paths.ts +806 -0
- package/src/host/agent-host.ts +666 -0
- package/src/host/bridge-host.ts +2788 -0
- package/src/host/fetch-proxy-handler.ts +449 -0
- package/src/host/fetch-proxy-overrides.ts +51 -0
- package/src/host/open-url.ts +89 -0
- package/src/host/plane-host.ts +203 -0
- package/src/host/replacement-module-handler.ts +158 -0
- package/src/host/websocket-proxy.ts +315 -0
- package/src/index.ts +71 -0
- package/src/jump-to-source-babel.ts +135 -0
- package/src/jump-to-source-native.ts +102 -0
- package/src/menu.ts +777 -0
- package/src/metro-fingerprint-registry.ts +302 -0
- package/src/metro-plugin.ts +341 -0
- package/src/metro-production-bundle.ts +471 -0
- package/src/native-dev-bundle-url.ts +118 -0
- package/src/native-seam-manifest.ts +341 -0
- package/src/playwright-host-log.ts +16 -0
- package/src/plist.ts +27 -0
- package/src/poll-until.ts +123 -0
- package/src/profiles.ts +179 -0
- package/src/public-brand.ts +9 -0
- package/src/react-native-host-modules.ts +26 -0
- package/src/render-mode.ts +27 -0
- package/src/rolldown-plugin-swift.ts +240 -0
- package/src/runtime-assets.ts +233 -0
- package/src/runtime-delivery.ts +54 -0
- package/src/screenshots/compose.ts +422 -0
- package/src/screenshots/frame-compose.ts +514 -0
- package/src/screenshots/orchestrate.ts +256 -0
- package/src/screenshots/org-deck.ts +91 -0
- package/src/screenshots/registry.ts +58 -0
- package/src/screenshots/schema.ts +364 -0
- package/src/sdk.ts +15 -0
- package/src/settings-bundle.ts +418 -0
- package/src/shell-bridge-identity.ts +15 -0
- package/src/sim-client.ts +697 -0
- package/src/skills/builtin/a11y-review.ts +132 -0
- package/src/skills/builtin/compat-check.ts +71 -0
- package/src/skills/builtin/maestro-test.ts +121 -0
- package/src/skills/builtin/perf-profile.ts +90 -0
- package/src/skills/builtin/screenshot-all.ts +52 -0
- package/src/skills/builtin/visual-diff.ts +100 -0
- package/src/skills/registry.ts +107 -0
- package/src/skills/types.ts +41 -0
- package/src/swift-submit.ts +185 -0
- package/src/swift.ts +7 -0
- package/src/team-machine-prompt.ts +73 -0
- package/src/vite-plugin-one.ts +264 -0
- package/src/vite-plugin-swift.ts +620 -0
- package/src/vite-plugin.ts +1946 -0
- package/src/worklets-babel.ts +250 -0
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/*! rnx v0.1.527 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
+
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
|
+
"use strict";
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
|
+
|
|
22
|
+
// src/metro-fingerprint-registry.ts
|
|
23
|
+
var metro_fingerprint_registry_exports = {};
|
|
24
|
+
__export(metro_fingerprint_registry_exports, {
|
|
25
|
+
RNX_METRO_FINGERPRINT_MAX_PAYLOAD_BYTES: () => RNX_METRO_FINGERPRINT_MAX_PAYLOAD_BYTES,
|
|
26
|
+
RNX_METRO_FINGERPRINT_MAX_POINTER_BYTES: () => RNX_METRO_FINGERPRINT_MAX_POINTER_BYTES,
|
|
27
|
+
RNX_METRO_FINGERPRINT_POINTER_PATH: () => RNX_METRO_FINGERPRINT_POINTER_PATH,
|
|
28
|
+
RNX_METRO_FINGERPRINT_SCHEMA_VERSION: () => RNX_METRO_FINGERPRINT_SCHEMA_VERSION,
|
|
29
|
+
parseRNXMetroFingerprintPointer: () => parseRNXMetroFingerprintPointer,
|
|
30
|
+
parseRNXMetroFingerprintRegistry: () => parseRNXMetroFingerprintRegistry
|
|
31
|
+
});
|
|
32
|
+
module.exports = __toCommonJS(metro_fingerprint_registry_exports);
|
|
33
|
+
var RNX_METRO_FINGERPRINT_SCHEMA_VERSION = 2;
|
|
34
|
+
var RNX_METRO_FINGERPRINT_POINTER_PATH = "/compile/metro-fingerprints.json";
|
|
35
|
+
var RNX_METRO_FINGERPRINT_MAX_POINTER_BYTES = 16 * 1024;
|
|
36
|
+
var RNX_METRO_FINGERPRINT_MAX_PAYLOAD_BYTES = 8 * 1024 * 1024;
|
|
37
|
+
function isRecord(value) {
|
|
38
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
39
|
+
}
|
|
40
|
+
function isSha256(value) {
|
|
41
|
+
return typeof value === "string" && /^[a-f0-9]{64}$/.test(value);
|
|
42
|
+
}
|
|
43
|
+
function readStringArray(value) {
|
|
44
|
+
if (!Array.isArray(value) || !value.every((entry) => typeof entry === "string")) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
const entries = [...value];
|
|
48
|
+
if (new Set(entries).size !== entries.length || entries.some((entry, index) => index > 0 && entries[index - 1] >= entry)) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
return entries;
|
|
52
|
+
}
|
|
53
|
+
function parseRNXMetroFingerprintPointer(value) {
|
|
54
|
+
if (!isRecord(value)) return null;
|
|
55
|
+
const { schemaVersion, revision, integrity, bytes, payloadUrl } = value;
|
|
56
|
+
if (schemaVersion !== RNX_METRO_FINGERPRINT_SCHEMA_VERSION || !isSha256(revision) || !isSha256(integrity) || typeof bytes !== "number" || !Number.isSafeInteger(bytes) || bytes < 1 || typeof payloadUrl !== "string" || payloadUrl.length === 0) {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
return { schemaVersion, revision, integrity, bytes, payloadUrl };
|
|
60
|
+
}
|
|
61
|
+
function parseRNXMetroFingerprintRegistry(value) {
|
|
62
|
+
if (!isRecord(value)) return null;
|
|
63
|
+
const { schemaVersion, revision } = value;
|
|
64
|
+
if (schemaVersion !== RNX_METRO_FINGERPRINT_SCHEMA_VERSION || !isSha256(revision) || !Array.isArray(value.atoms) || !Array.isArray(value.templates) || !isRecord(value.candidatesByFactoryDigest) || !isRecord(value.candidatesByDiscriminator)) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
const atoms = [];
|
|
68
|
+
for (const atomValue of value.atoms) {
|
|
69
|
+
if (!isRecord(atomValue)) return null;
|
|
70
|
+
const exports2 = readStringArray(atomValue.exports);
|
|
71
|
+
const literals = readStringArray(atomValue.literals);
|
|
72
|
+
if (typeof atomValue.key !== "string" || atomValue.key.length === 0 || !exports2 || !literals || typeof atomValue.dependencyArity !== "number" || !Number.isSafeInteger(atomValue.dependencyArity) || atomValue.dependencyArity < 0 || !isSha256(atomValue.factoryDigest)) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
atoms.push({
|
|
76
|
+
key: atomValue.key,
|
|
77
|
+
exports: exports2,
|
|
78
|
+
literals,
|
|
79
|
+
dependencyArity: atomValue.dependencyArity,
|
|
80
|
+
factoryDigest: atomValue.factoryDigest
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
const templates = [];
|
|
84
|
+
for (const templateValue of value.templates) {
|
|
85
|
+
if (!isRecord(templateValue) || typeof templateValue.packageName !== "string" || templateValue.packageName.length === 0 || typeof templateValue.packageVersion !== "string" || templateValue.packageVersion.length === 0 || !isSha256(templateValue.sourceIntegrity) || typeof templateValue.profile !== "string" || templateValue.profile.length === 0 || templateValue.platform !== "ios" && templateValue.platform !== "android" || !Array.isArray(templateValue.nodes) || templateValue.nodes.length === 0 || !Array.isArray(templateValue.roots) || templateValue.roots.length === 0) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
const nodes = [];
|
|
89
|
+
for (const nodeValue of templateValue.nodes) {
|
|
90
|
+
if (!isRecord(nodeValue) || typeof nodeValue.atom !== "number" || !Number.isSafeInteger(nodeValue.atom) || nodeValue.atom < 0 || nodeValue.atom >= atoms.length || !Array.isArray(nodeValue.internalDependencies) || nodeValue.landmarkPath !== void 0 && (typeof nodeValue.landmarkPath !== "string" || nodeValue.landmarkPath.length === 0)) {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
const internalDependencies = [];
|
|
94
|
+
const positions = /* @__PURE__ */ new Set();
|
|
95
|
+
for (const edgeValue of nodeValue.internalDependencies) {
|
|
96
|
+
if (!isRecord(edgeValue) || typeof edgeValue.position !== "number" || !Number.isSafeInteger(edgeValue.position) || edgeValue.position < 0 || positions.has(edgeValue.position) || typeof edgeValue.node !== "number" || !Number.isSafeInteger(edgeValue.node) || edgeValue.node < 0 || edgeValue.node >= templateValue.nodes.length) {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
positions.add(edgeValue.position);
|
|
100
|
+
internalDependencies.push({
|
|
101
|
+
position: edgeValue.position,
|
|
102
|
+
node: edgeValue.node
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
internalDependencies.sort((left, right) => left.position - right.position);
|
|
106
|
+
nodes.push({
|
|
107
|
+
atom: nodeValue.atom,
|
|
108
|
+
internalDependencies,
|
|
109
|
+
...typeof nodeValue.landmarkPath === "string" ? { landmarkPath: nodeValue.landmarkPath } : {}
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
const roots = [];
|
|
113
|
+
for (const rootValue of templateValue.roots) {
|
|
114
|
+
if (!isRecord(rootValue) || typeof rootValue.node !== "number" || !Number.isSafeInteger(rootValue.node) || rootValue.node < 0 || rootValue.node >= nodes.length || !nodes[rootValue.node].landmarkPath) {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
roots.push({ node: rootValue.node });
|
|
118
|
+
}
|
|
119
|
+
templates.push({
|
|
120
|
+
packageName: templateValue.packageName,
|
|
121
|
+
packageVersion: templateValue.packageVersion,
|
|
122
|
+
sourceIntegrity: templateValue.sourceIntegrity,
|
|
123
|
+
profile: templateValue.profile,
|
|
124
|
+
platform: templateValue.platform,
|
|
125
|
+
nodes,
|
|
126
|
+
roots
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
const candidatesByFactoryDigest = {};
|
|
130
|
+
for (const [factoryDigest, candidateValues] of Object.entries(
|
|
131
|
+
value.candidatesByFactoryDigest
|
|
132
|
+
)) {
|
|
133
|
+
if (!isSha256(factoryDigest) || !Array.isArray(candidateValues)) return null;
|
|
134
|
+
const candidates = [];
|
|
135
|
+
for (const candidateValue of candidateValues) {
|
|
136
|
+
if (!isRecord(candidateValue) || typeof candidateValue.template !== "number" || !Number.isSafeInteger(candidateValue.template) || candidateValue.template < 0 || candidateValue.template >= templates.length || typeof candidateValue.root !== "number" || !Number.isSafeInteger(candidateValue.root) || candidateValue.root < 0 || candidateValue.root >= templates[candidateValue.template].roots.length) {
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
const template = templates[candidateValue.template];
|
|
140
|
+
const root = template.roots[candidateValue.root];
|
|
141
|
+
if (atoms[template.nodes[root.node].atom].factoryDigest !== factoryDigest) {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
candidates.push({
|
|
145
|
+
template: candidateValue.template,
|
|
146
|
+
root: candidateValue.root
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
candidatesByFactoryDigest[factoryDigest] = candidates;
|
|
150
|
+
}
|
|
151
|
+
const candidatesByDiscriminator = {};
|
|
152
|
+
for (const [discriminator, candidateValues] of Object.entries(
|
|
153
|
+
value.candidatesByDiscriminator
|
|
154
|
+
)) {
|
|
155
|
+
if (!/^(?:e|l|ea|la|el|ela):[a-f0-9]{16}$/.test(discriminator)) return null;
|
|
156
|
+
if (!Array.isArray(candidateValues) || candidateValues.length === 0) return null;
|
|
157
|
+
const candidates = [];
|
|
158
|
+
for (const candidateValue of candidateValues) {
|
|
159
|
+
if (!isRecord(candidateValue) || typeof candidateValue.template !== "number" || !Number.isSafeInteger(candidateValue.template) || candidateValue.template < 0 || candidateValue.template >= templates.length || typeof candidateValue.root !== "number" || !Number.isSafeInteger(candidateValue.root) || candidateValue.root < 0 || candidateValue.root >= templates[candidateValue.template].roots.length) {
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
candidates.push({
|
|
163
|
+
template: candidateValue.template,
|
|
164
|
+
root: candidateValue.root
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
candidatesByDiscriminator[discriminator] = candidates;
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
schemaVersion,
|
|
171
|
+
revision,
|
|
172
|
+
atoms,
|
|
173
|
+
templates,
|
|
174
|
+
candidatesByFactoryDigest,
|
|
175
|
+
candidatesByDiscriminator
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
179
|
+
0 && (module.exports = {
|
|
180
|
+
RNX_METRO_FINGERPRINT_MAX_PAYLOAD_BYTES,
|
|
181
|
+
RNX_METRO_FINGERPRINT_MAX_POINTER_BYTES,
|
|
182
|
+
RNX_METRO_FINGERPRINT_POINTER_PATH,
|
|
183
|
+
RNX_METRO_FINGERPRINT_SCHEMA_VERSION,
|
|
184
|
+
parseRNXMetroFingerprintPointer,
|
|
185
|
+
parseRNXMetroFingerprintRegistry
|
|
186
|
+
});
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/*! rnx v0.1.527 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
+
|
|
3
|
+
// src/metro-fingerprint-registry.ts
|
|
4
|
+
var RNX_METRO_FINGERPRINT_SCHEMA_VERSION = 2;
|
|
5
|
+
var RNX_METRO_FINGERPRINT_POINTER_PATH = "/compile/metro-fingerprints.json";
|
|
6
|
+
var RNX_METRO_FINGERPRINT_MAX_POINTER_BYTES = 16 * 1024;
|
|
7
|
+
var RNX_METRO_FINGERPRINT_MAX_PAYLOAD_BYTES = 8 * 1024 * 1024;
|
|
8
|
+
function isRecord(value) {
|
|
9
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
10
|
+
}
|
|
11
|
+
function isSha256(value) {
|
|
12
|
+
return typeof value === "string" && /^[a-f0-9]{64}$/.test(value);
|
|
13
|
+
}
|
|
14
|
+
function readStringArray(value) {
|
|
15
|
+
if (!Array.isArray(value) || !value.every((entry) => typeof entry === "string")) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
const entries = [...value];
|
|
19
|
+
if (new Set(entries).size !== entries.length || entries.some((entry, index) => index > 0 && entries[index - 1] >= entry)) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
return entries;
|
|
23
|
+
}
|
|
24
|
+
function parseRNXMetroFingerprintPointer(value) {
|
|
25
|
+
if (!isRecord(value)) return null;
|
|
26
|
+
const { schemaVersion, revision, integrity, bytes, payloadUrl } = value;
|
|
27
|
+
if (schemaVersion !== RNX_METRO_FINGERPRINT_SCHEMA_VERSION || !isSha256(revision) || !isSha256(integrity) || typeof bytes !== "number" || !Number.isSafeInteger(bytes) || bytes < 1 || typeof payloadUrl !== "string" || payloadUrl.length === 0) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
return { schemaVersion, revision, integrity, bytes, payloadUrl };
|
|
31
|
+
}
|
|
32
|
+
function parseRNXMetroFingerprintRegistry(value) {
|
|
33
|
+
if (!isRecord(value)) return null;
|
|
34
|
+
const { schemaVersion, revision } = value;
|
|
35
|
+
if (schemaVersion !== RNX_METRO_FINGERPRINT_SCHEMA_VERSION || !isSha256(revision) || !Array.isArray(value.atoms) || !Array.isArray(value.templates) || !isRecord(value.candidatesByFactoryDigest) || !isRecord(value.candidatesByDiscriminator)) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
const atoms = [];
|
|
39
|
+
for (const atomValue of value.atoms) {
|
|
40
|
+
if (!isRecord(atomValue)) return null;
|
|
41
|
+
const exports = readStringArray(atomValue.exports);
|
|
42
|
+
const literals = readStringArray(atomValue.literals);
|
|
43
|
+
if (typeof atomValue.key !== "string" || atomValue.key.length === 0 || !exports || !literals || typeof atomValue.dependencyArity !== "number" || !Number.isSafeInteger(atomValue.dependencyArity) || atomValue.dependencyArity < 0 || !isSha256(atomValue.factoryDigest)) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
atoms.push({
|
|
47
|
+
key: atomValue.key,
|
|
48
|
+
exports,
|
|
49
|
+
literals,
|
|
50
|
+
dependencyArity: atomValue.dependencyArity,
|
|
51
|
+
factoryDigest: atomValue.factoryDigest
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
const templates = [];
|
|
55
|
+
for (const templateValue of value.templates) {
|
|
56
|
+
if (!isRecord(templateValue) || typeof templateValue.packageName !== "string" || templateValue.packageName.length === 0 || typeof templateValue.packageVersion !== "string" || templateValue.packageVersion.length === 0 || !isSha256(templateValue.sourceIntegrity) || typeof templateValue.profile !== "string" || templateValue.profile.length === 0 || templateValue.platform !== "ios" && templateValue.platform !== "android" || !Array.isArray(templateValue.nodes) || templateValue.nodes.length === 0 || !Array.isArray(templateValue.roots) || templateValue.roots.length === 0) {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
const nodes = [];
|
|
60
|
+
for (const nodeValue of templateValue.nodes) {
|
|
61
|
+
if (!isRecord(nodeValue) || typeof nodeValue.atom !== "number" || !Number.isSafeInteger(nodeValue.atom) || nodeValue.atom < 0 || nodeValue.atom >= atoms.length || !Array.isArray(nodeValue.internalDependencies) || nodeValue.landmarkPath !== void 0 && (typeof nodeValue.landmarkPath !== "string" || nodeValue.landmarkPath.length === 0)) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
const internalDependencies = [];
|
|
65
|
+
const positions = /* @__PURE__ */ new Set();
|
|
66
|
+
for (const edgeValue of nodeValue.internalDependencies) {
|
|
67
|
+
if (!isRecord(edgeValue) || typeof edgeValue.position !== "number" || !Number.isSafeInteger(edgeValue.position) || edgeValue.position < 0 || positions.has(edgeValue.position) || typeof edgeValue.node !== "number" || !Number.isSafeInteger(edgeValue.node) || edgeValue.node < 0 || edgeValue.node >= templateValue.nodes.length) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
positions.add(edgeValue.position);
|
|
71
|
+
internalDependencies.push({
|
|
72
|
+
position: edgeValue.position,
|
|
73
|
+
node: edgeValue.node
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
internalDependencies.sort((left, right) => left.position - right.position);
|
|
77
|
+
nodes.push({
|
|
78
|
+
atom: nodeValue.atom,
|
|
79
|
+
internalDependencies,
|
|
80
|
+
...typeof nodeValue.landmarkPath === "string" ? { landmarkPath: nodeValue.landmarkPath } : {}
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
const roots = [];
|
|
84
|
+
for (const rootValue of templateValue.roots) {
|
|
85
|
+
if (!isRecord(rootValue) || typeof rootValue.node !== "number" || !Number.isSafeInteger(rootValue.node) || rootValue.node < 0 || rootValue.node >= nodes.length || !nodes[rootValue.node].landmarkPath) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
roots.push({ node: rootValue.node });
|
|
89
|
+
}
|
|
90
|
+
templates.push({
|
|
91
|
+
packageName: templateValue.packageName,
|
|
92
|
+
packageVersion: templateValue.packageVersion,
|
|
93
|
+
sourceIntegrity: templateValue.sourceIntegrity,
|
|
94
|
+
profile: templateValue.profile,
|
|
95
|
+
platform: templateValue.platform,
|
|
96
|
+
nodes,
|
|
97
|
+
roots
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
const candidatesByFactoryDigest = {};
|
|
101
|
+
for (const [factoryDigest, candidateValues] of Object.entries(
|
|
102
|
+
value.candidatesByFactoryDigest
|
|
103
|
+
)) {
|
|
104
|
+
if (!isSha256(factoryDigest) || !Array.isArray(candidateValues)) return null;
|
|
105
|
+
const candidates = [];
|
|
106
|
+
for (const candidateValue of candidateValues) {
|
|
107
|
+
if (!isRecord(candidateValue) || typeof candidateValue.template !== "number" || !Number.isSafeInteger(candidateValue.template) || candidateValue.template < 0 || candidateValue.template >= templates.length || typeof candidateValue.root !== "number" || !Number.isSafeInteger(candidateValue.root) || candidateValue.root < 0 || candidateValue.root >= templates[candidateValue.template].roots.length) {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
const template = templates[candidateValue.template];
|
|
111
|
+
const root = template.roots[candidateValue.root];
|
|
112
|
+
if (atoms[template.nodes[root.node].atom].factoryDigest !== factoryDigest) {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
candidates.push({
|
|
116
|
+
template: candidateValue.template,
|
|
117
|
+
root: candidateValue.root
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
candidatesByFactoryDigest[factoryDigest] = candidates;
|
|
121
|
+
}
|
|
122
|
+
const candidatesByDiscriminator = {};
|
|
123
|
+
for (const [discriminator, candidateValues] of Object.entries(
|
|
124
|
+
value.candidatesByDiscriminator
|
|
125
|
+
)) {
|
|
126
|
+
if (!/^(?:e|l|ea|la|el|ela):[a-f0-9]{16}$/.test(discriminator)) return null;
|
|
127
|
+
if (!Array.isArray(candidateValues) || candidateValues.length === 0) return null;
|
|
128
|
+
const candidates = [];
|
|
129
|
+
for (const candidateValue of candidateValues) {
|
|
130
|
+
if (!isRecord(candidateValue) || typeof candidateValue.template !== "number" || !Number.isSafeInteger(candidateValue.template) || candidateValue.template < 0 || candidateValue.template >= templates.length || typeof candidateValue.root !== "number" || !Number.isSafeInteger(candidateValue.root) || candidateValue.root < 0 || candidateValue.root >= templates[candidateValue.template].roots.length) {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
candidates.push({
|
|
134
|
+
template: candidateValue.template,
|
|
135
|
+
root: candidateValue.root
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
candidatesByDiscriminator[discriminator] = candidates;
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
schemaVersion,
|
|
142
|
+
revision,
|
|
143
|
+
atoms,
|
|
144
|
+
templates,
|
|
145
|
+
candidatesByFactoryDigest,
|
|
146
|
+
candidatesByDiscriminator
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
export {
|
|
150
|
+
RNX_METRO_FINGERPRINT_MAX_PAYLOAD_BYTES,
|
|
151
|
+
RNX_METRO_FINGERPRINT_MAX_POINTER_BYTES,
|
|
152
|
+
RNX_METRO_FINGERPRINT_POINTER_PATH,
|
|
153
|
+
RNX_METRO_FINGERPRINT_SCHEMA_VERSION,
|
|
154
|
+
parseRNXMetroFingerprintPointer,
|
|
155
|
+
parseRNXMetroFingerprintRegistry
|
|
156
|
+
};
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
/*! rnx v0.1.527 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
+
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
|
+
"use strict";
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
|
+
|
|
22
|
+
// src/metro-production-bundle.ts
|
|
23
|
+
var metro_production_bundle_exports = {};
|
|
24
|
+
__export(metro_production_bundle_exports, {
|
|
25
|
+
RNX_METRO_MODULE_IDENTITY_VERSION: () => RNX_METRO_MODULE_IDENTITY_VERSION,
|
|
26
|
+
appendRNXMetroModuleIdentityFooter: () => appendRNXMetroModuleIdentityFooter,
|
|
27
|
+
createRNXMetroModuleIdentityFooter: () => createRNXMetroModuleIdentityFooter,
|
|
28
|
+
detachRNXMetroSourceMapUrl: () => detachRNXMetroSourceMapUrl,
|
|
29
|
+
readRNXMetroBundleLayout: () => readRNXMetroBundleLayout,
|
|
30
|
+
readRNXMetroModuleIdentity: () => readRNXMetroModuleIdentity,
|
|
31
|
+
toRNXDevelopmentBundleUrl: () => toRNXDevelopmentBundleUrl,
|
|
32
|
+
toRNXProductionBundleUrl: () => toRNXProductionBundleUrl,
|
|
33
|
+
validateRNXMetroModuleIdentity: () => validateRNXMetroModuleIdentity,
|
|
34
|
+
validateRNXMetroModulePaths: () => validateRNXMetroModulePaths
|
|
35
|
+
});
|
|
36
|
+
module.exports = __toCommonJS(metro_production_bundle_exports);
|
|
37
|
+
var RNXSIM_METRO_MODULE_PATHS_PREFIX = "globalThis.__sootsimModulePaths=";
|
|
38
|
+
var RNX_METRO_MODULE_IDENTITY_VERSION = 2;
|
|
39
|
+
function toRNXProductionBundleUrl(bundleUrl) {
|
|
40
|
+
const relative = bundleUrl.startsWith("/");
|
|
41
|
+
const url = new URL(bundleUrl, "http://rnxsim.local");
|
|
42
|
+
url.searchParams.set("dev", "false");
|
|
43
|
+
url.searchParams.set("hot", "false");
|
|
44
|
+
url.searchParams.set("minify", "true");
|
|
45
|
+
return relative ? `${url.pathname}${url.search}${url.hash}` : url.toString();
|
|
46
|
+
}
|
|
47
|
+
function toRNXDevelopmentBundleUrl(bundleUrl) {
|
|
48
|
+
const relative = bundleUrl.startsWith("/");
|
|
49
|
+
const url = new URL(bundleUrl, "http://rnxsim.local");
|
|
50
|
+
url.searchParams.set("dev", "true");
|
|
51
|
+
url.searchParams.set("hot", "false");
|
|
52
|
+
url.searchParams.set("minify", "false");
|
|
53
|
+
return relative ? `${url.pathname}${url.search}${url.hash}` : url.toString();
|
|
54
|
+
}
|
|
55
|
+
var RNXSIM_METRO_SOURCE_MAP_COMMENT = "//# sourceMappingURL=";
|
|
56
|
+
function detachRNXMetroSourceMapUrl(bundleText) {
|
|
57
|
+
const trimmedEnd = bundleText.replace(/\s+$/, "");
|
|
58
|
+
const commentStart = trimmedEnd.lastIndexOf(`
|
|
59
|
+
${RNXSIM_METRO_SOURCE_MAP_COMMENT}`);
|
|
60
|
+
if (commentStart < 0) return { source: bundleText, sourceMappingUrl: null };
|
|
61
|
+
const url = trimmedEnd.slice(commentStart + 1 + RNXSIM_METRO_SOURCE_MAP_COMMENT.length);
|
|
62
|
+
if (url.includes("\n")) return { source: bundleText, sourceMappingUrl: null };
|
|
63
|
+
return { source: trimmedEnd.slice(0, commentStart), sourceMappingUrl: url };
|
|
64
|
+
}
|
|
65
|
+
function createRNXMetroModuleIdentityFooter(identity) {
|
|
66
|
+
const payload = JSON.stringify(identity).replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029").replace(/<\//g, "<\\/");
|
|
67
|
+
return `
|
|
68
|
+
${RNXSIM_METRO_MODULE_PATHS_PREFIX}${payload};`;
|
|
69
|
+
}
|
|
70
|
+
function appendRNXMetroModuleIdentityFooter(bundleText, identity) {
|
|
71
|
+
const footer = createRNXMetroModuleIdentityFooter(identity);
|
|
72
|
+
const detached = detachRNXMetroSourceMapUrl(bundleText);
|
|
73
|
+
return detached.sourceMappingUrl === null ? bundleText + footer : `${detached.source}${footer}
|
|
74
|
+
${RNXSIM_METRO_SOURCE_MAP_COMMENT}${detached.sourceMappingUrl}`;
|
|
75
|
+
}
|
|
76
|
+
function readRNXMetroModuleIdentity(bundleText) {
|
|
77
|
+
const detached = detachRNXMetroSourceMapUrl(bundleText);
|
|
78
|
+
const withoutMap = detached.source;
|
|
79
|
+
const footerPrefix = `
|
|
80
|
+
${RNXSIM_METRO_MODULE_PATHS_PREFIX}`;
|
|
81
|
+
const footerStart = withoutMap.lastIndexOf(footerPrefix);
|
|
82
|
+
if (footerStart < 0) return null;
|
|
83
|
+
if (!withoutMap.endsWith(";")) {
|
|
84
|
+
throw new Error("Metro module identity footer is truncated");
|
|
85
|
+
}
|
|
86
|
+
let parsed;
|
|
87
|
+
try {
|
|
88
|
+
parsed = JSON.parse(withoutMap.slice(footerStart + footerPrefix.length, -1));
|
|
89
|
+
} catch {
|
|
90
|
+
throw new Error("Metro module identity footer is not valid JSON");
|
|
91
|
+
}
|
|
92
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
93
|
+
throw new Error("Metro module identity footer is malformed");
|
|
94
|
+
}
|
|
95
|
+
const version = Reflect.get(parsed, "version");
|
|
96
|
+
if (version === void 0) {
|
|
97
|
+
const modulePaths2 = Object.fromEntries(
|
|
98
|
+
Object.entries(parsed).map(([moduleId, modulePath]) => {
|
|
99
|
+
if (typeof modulePath !== "string") {
|
|
100
|
+
throw new Error(`Metro module identity has an invalid path for ${moduleId}`);
|
|
101
|
+
}
|
|
102
|
+
return [moduleId, modulePath];
|
|
103
|
+
})
|
|
104
|
+
);
|
|
105
|
+
return {
|
|
106
|
+
source: withoutMap.slice(0, footerStart),
|
|
107
|
+
version: RNX_METRO_MODULE_IDENTITY_VERSION,
|
|
108
|
+
identitySource: "rnx-plugin",
|
|
109
|
+
modulePaths: modulePaths2,
|
|
110
|
+
logicalSpecifiers: {},
|
|
111
|
+
sourceMappingUrl: detached.sourceMappingUrl
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
const identitySource = Reflect.get(parsed, "identitySource");
|
|
115
|
+
const parsedModulePaths = Reflect.get(parsed, "modulePaths");
|
|
116
|
+
const parsedLogicalSpecifiers = Reflect.get(parsed, "logicalSpecifiers");
|
|
117
|
+
if (version !== RNX_METRO_MODULE_IDENTITY_VERSION || identitySource !== "rnx-plugin" && identitySource !== "contrast-bundler" && identitySource !== "metro-source-map" || typeof parsedModulePaths !== "object" || parsedModulePaths === null || Array.isArray(parsedModulePaths) || typeof parsedLogicalSpecifiers !== "object" || parsedLogicalSpecifiers === null || Array.isArray(parsedLogicalSpecifiers)) {
|
|
118
|
+
throw new Error("Metro module identity footer is malformed");
|
|
119
|
+
}
|
|
120
|
+
const modulePaths = Object.fromEntries(
|
|
121
|
+
Object.entries(parsedModulePaths).map(([moduleId, modulePath]) => {
|
|
122
|
+
if (typeof modulePath !== "string") {
|
|
123
|
+
throw new Error(`Metro module identity has an invalid path for ${moduleId}`);
|
|
124
|
+
}
|
|
125
|
+
return [moduleId, modulePath];
|
|
126
|
+
})
|
|
127
|
+
);
|
|
128
|
+
const logicalSpecifiers = Object.fromEntries(
|
|
129
|
+
Object.entries(parsedLogicalSpecifiers).map(([moduleId, specifiers]) => {
|
|
130
|
+
if (!Array.isArray(specifiers) || specifiers.length === 0 || !specifiers.every(
|
|
131
|
+
(specifier) => typeof specifier === "string" && specifier.length > 0
|
|
132
|
+
)) {
|
|
133
|
+
throw new Error(`Metro module identity has invalid specifiers for ${moduleId}`);
|
|
134
|
+
}
|
|
135
|
+
const unique = [...new Set(specifiers)].sort(
|
|
136
|
+
(left, right) => left.localeCompare(right)
|
|
137
|
+
);
|
|
138
|
+
if (unique.length !== specifiers.length) {
|
|
139
|
+
throw new Error(`Metro module identity repeats a specifier for ${moduleId}`);
|
|
140
|
+
}
|
|
141
|
+
return [moduleId, unique];
|
|
142
|
+
})
|
|
143
|
+
);
|
|
144
|
+
return {
|
|
145
|
+
source: withoutMap.slice(0, footerStart),
|
|
146
|
+
version,
|
|
147
|
+
identitySource,
|
|
148
|
+
modulePaths,
|
|
149
|
+
logicalSpecifiers,
|
|
150
|
+
sourceMappingUrl: detached.sourceMappingUrl
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
function readStringLiteralStart(source, start, end) {
|
|
154
|
+
const quote = source[end];
|
|
155
|
+
if (quote !== '"' && quote !== "'") return -1;
|
|
156
|
+
for (let index = end - 1; index > start; index--) {
|
|
157
|
+
if (source[index] !== quote) continue;
|
|
158
|
+
let backslashes = 0;
|
|
159
|
+
while (index - 1 - backslashes > start && source[index - 1 - backslashes] === "\\") {
|
|
160
|
+
backslashes++;
|
|
161
|
+
}
|
|
162
|
+
if (backslashes % 2 === 0) return index;
|
|
163
|
+
}
|
|
164
|
+
return -1;
|
|
165
|
+
}
|
|
166
|
+
function readDefineTail(source, start, end) {
|
|
167
|
+
let cursor = end;
|
|
168
|
+
while (cursor > start && (source[cursor] === " " || source[cursor] === "\n" || source[cursor] === " " || source[cursor] === ";")) {
|
|
169
|
+
cursor--;
|
|
170
|
+
}
|
|
171
|
+
if (source[cursor] !== ")") return null;
|
|
172
|
+
cursor--;
|
|
173
|
+
while (cursor > start && /\s/.test(source[cursor])) cursor--;
|
|
174
|
+
let verboseNameStart;
|
|
175
|
+
let verboseNameEnd;
|
|
176
|
+
if (source[cursor] === '"' || source[cursor] === "'") {
|
|
177
|
+
const literalStart = readStringLiteralStart(source, start, cursor);
|
|
178
|
+
if (literalStart < 0) return null;
|
|
179
|
+
verboseNameStart = literalStart;
|
|
180
|
+
verboseNameEnd = cursor + 1;
|
|
181
|
+
cursor = literalStart - 1;
|
|
182
|
+
while (cursor > start && /\s/.test(source[cursor])) cursor--;
|
|
183
|
+
if (source[cursor] !== ",") return null;
|
|
184
|
+
cursor--;
|
|
185
|
+
while (cursor > start && /\s/.test(source[cursor])) cursor--;
|
|
186
|
+
}
|
|
187
|
+
if (source[cursor] !== "]") return null;
|
|
188
|
+
const dependenciesEnd = cursor + 1;
|
|
189
|
+
let depth = 1;
|
|
190
|
+
cursor--;
|
|
191
|
+
while (cursor > start && depth > 0) {
|
|
192
|
+
const character = source[cursor];
|
|
193
|
+
if (character === "]") depth++;
|
|
194
|
+
else if (character === "[") depth--;
|
|
195
|
+
if (depth === 0) break;
|
|
196
|
+
cursor--;
|
|
197
|
+
}
|
|
198
|
+
if (depth !== 0) return null;
|
|
199
|
+
const dependenciesStart = cursor;
|
|
200
|
+
let idEnd = cursor - 1;
|
|
201
|
+
while (idEnd > start && /\s/.test(source[idEnd])) idEnd--;
|
|
202
|
+
if (source[idEnd] !== ",") return null;
|
|
203
|
+
let idStart = idEnd;
|
|
204
|
+
while (idStart > start && /[0-9a-fA-FxX.+-]/.test(source[idStart - 1])) idStart--;
|
|
205
|
+
const literal = source.slice(idStart, idEnd);
|
|
206
|
+
if (!/^-?(?:0[xXbBoO][0-9a-fA-F]+|\d+(?:\.\d*)?(?:[eE][+-]?\d+)?)$/.test(literal)) {
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
const moduleId = Number(literal);
|
|
210
|
+
if (!Number.isSafeInteger(moduleId)) return null;
|
|
211
|
+
let factoryEnd = idStart - 1;
|
|
212
|
+
while (factoryEnd > start && /\s/.test(source[factoryEnd])) factoryEnd--;
|
|
213
|
+
if (source[factoryEnd] !== ",") return null;
|
|
214
|
+
return {
|
|
215
|
+
moduleId,
|
|
216
|
+
factoryEnd,
|
|
217
|
+
dependenciesStart,
|
|
218
|
+
dependenciesEnd,
|
|
219
|
+
verboseNameStart,
|
|
220
|
+
verboseNameEnd
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
function readRNXMetroBundleLayout(source) {
|
|
224
|
+
const lineOffsets = [0];
|
|
225
|
+
for (let index = 0; index < source.length; index++) {
|
|
226
|
+
if (source.charCodeAt(index) === 10) lineOffsets.push(index + 1);
|
|
227
|
+
}
|
|
228
|
+
const boundaries = [];
|
|
229
|
+
for (let lineIndex = 0; lineIndex < lineOffsets.length; lineIndex++) {
|
|
230
|
+
const start = lineOffsets[lineIndex];
|
|
231
|
+
if (source.startsWith("__d(", start) || source.startsWith("__r(", start)) {
|
|
232
|
+
boundaries.push(lineIndex);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
const statements = [];
|
|
236
|
+
let moduleIdFailures = 0;
|
|
237
|
+
for (let index = 0; index < boundaries.length; index++) {
|
|
238
|
+
const lineIndex = boundaries[index];
|
|
239
|
+
const start = lineOffsets[lineIndex];
|
|
240
|
+
const nextLineIndex = boundaries[index + 1];
|
|
241
|
+
const endLineIndex = nextLineIndex !== void 0 ? nextLineIndex - 1 : lineOffsets.length - 1;
|
|
242
|
+
const end = nextLineIndex !== void 0 ? lineOffsets[nextLineIndex] : source.length;
|
|
243
|
+
if (!source.startsWith("__d(", start)) {
|
|
244
|
+
statements.push({ kind: "run", start, end, lineIndex, endLineIndex });
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
const tail = readDefineTail(source, start, end - 1);
|
|
248
|
+
if (!tail) {
|
|
249
|
+
moduleIdFailures++;
|
|
250
|
+
continue;
|
|
251
|
+
}
|
|
252
|
+
statements.push({
|
|
253
|
+
kind: "define",
|
|
254
|
+
moduleId: tail.moduleId,
|
|
255
|
+
start,
|
|
256
|
+
end,
|
|
257
|
+
lineIndex,
|
|
258
|
+
endLineIndex,
|
|
259
|
+
factory: { start: start + "__d(".length, end: tail.factoryEnd },
|
|
260
|
+
dependencies: { start: tail.dependenciesStart, end: tail.dependenciesEnd },
|
|
261
|
+
...tail.verboseNameStart !== void 0 && tail.verboseNameEnd !== void 0 ? { verboseName: { start: tail.verboseNameStart, end: tail.verboseNameEnd } } : {}
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
return {
|
|
265
|
+
prelude: source.slice(
|
|
266
|
+
0,
|
|
267
|
+
boundaries.length > 0 ? lineOffsets[boundaries[0]] : source.length
|
|
268
|
+
),
|
|
269
|
+
statements,
|
|
270
|
+
moduleIdFailures
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
function validateRNXMetroModulePaths(source, modulePaths) {
|
|
274
|
+
const layout = readRNXMetroBundleLayout(source);
|
|
275
|
+
if (layout.moduleIdFailures > 0) {
|
|
276
|
+
throw new Error(
|
|
277
|
+
`Metro module identity could not read ${layout.moduleIdFailures} module IDs`
|
|
278
|
+
);
|
|
279
|
+
}
|
|
280
|
+
const definedIds = /* @__PURE__ */ new Set();
|
|
281
|
+
for (const statement of layout.statements) {
|
|
282
|
+
if (statement.kind !== "define") continue;
|
|
283
|
+
if (definedIds.has(statement.moduleId)) {
|
|
284
|
+
throw new Error(`Metro module identity has duplicate module ${statement.moduleId}`);
|
|
285
|
+
}
|
|
286
|
+
definedIds.add(statement.moduleId);
|
|
287
|
+
if (!Object.prototype.hasOwnProperty.call(modulePaths, String(statement.moduleId))) {
|
|
288
|
+
throw new Error(`Metro module identity is missing ${statement.moduleId}`);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
if (definedIds.size === 0) {
|
|
292
|
+
throw new Error("Metro module identity found no canonical JavaScript modules");
|
|
293
|
+
}
|
|
294
|
+
for (const [key, modulePath] of Object.entries(modulePaths)) {
|
|
295
|
+
const moduleId = Number(key);
|
|
296
|
+
if (!Number.isSafeInteger(moduleId) || String(moduleId) !== key) {
|
|
297
|
+
throw new Error(`Metro module identity has invalid module ID ${key}`);
|
|
298
|
+
}
|
|
299
|
+
if (typeof modulePath !== "string" || modulePath.length === 0) {
|
|
300
|
+
throw new Error(`Metro module identity has no path for ${key}`);
|
|
301
|
+
}
|
|
302
|
+
if (!definedIds.has(moduleId)) {
|
|
303
|
+
throw new Error(`Metro module identity has no module ${key}`);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
function validateRNXMetroModuleIdentity(identity) {
|
|
308
|
+
validateRNXMetroModulePaths(identity.source, identity.modulePaths);
|
|
309
|
+
for (const moduleId of Object.keys(identity.logicalSpecifiers)) {
|
|
310
|
+
if (!Object.prototype.hasOwnProperty.call(identity.modulePaths, moduleId)) {
|
|
311
|
+
throw new Error(
|
|
312
|
+
`Metro module identity has logical specifiers for unknown module ${moduleId}`
|
|
313
|
+
);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
318
|
+
0 && (module.exports = {
|
|
319
|
+
RNX_METRO_MODULE_IDENTITY_VERSION,
|
|
320
|
+
appendRNXMetroModuleIdentityFooter,
|
|
321
|
+
createRNXMetroModuleIdentityFooter,
|
|
322
|
+
detachRNXMetroSourceMapUrl,
|
|
323
|
+
readRNXMetroBundleLayout,
|
|
324
|
+
readRNXMetroModuleIdentity,
|
|
325
|
+
toRNXDevelopmentBundleUrl,
|
|
326
|
+
toRNXProductionBundleUrl,
|
|
327
|
+
validateRNXMetroModuleIdentity,
|
|
328
|
+
validateRNXMetroModulePaths
|
|
329
|
+
});
|