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,295 @@
|
|
|
1
|
+
/*! rnx v0.1.527 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
+
|
|
3
|
+
// src/metro-production-bundle.ts
|
|
4
|
+
var RNXSIM_METRO_MODULE_PATHS_PREFIX = "globalThis.__sootsimModulePaths=";
|
|
5
|
+
var RNX_METRO_MODULE_IDENTITY_VERSION = 2;
|
|
6
|
+
function toRNXProductionBundleUrl(bundleUrl) {
|
|
7
|
+
const relative = bundleUrl.startsWith("/");
|
|
8
|
+
const url = new URL(bundleUrl, "http://rnxsim.local");
|
|
9
|
+
url.searchParams.set("dev", "false");
|
|
10
|
+
url.searchParams.set("hot", "false");
|
|
11
|
+
url.searchParams.set("minify", "true");
|
|
12
|
+
return relative ? `${url.pathname}${url.search}${url.hash}` : url.toString();
|
|
13
|
+
}
|
|
14
|
+
function toRNXDevelopmentBundleUrl(bundleUrl) {
|
|
15
|
+
const relative = bundleUrl.startsWith("/");
|
|
16
|
+
const url = new URL(bundleUrl, "http://rnxsim.local");
|
|
17
|
+
url.searchParams.set("dev", "true");
|
|
18
|
+
url.searchParams.set("hot", "false");
|
|
19
|
+
url.searchParams.set("minify", "false");
|
|
20
|
+
return relative ? `${url.pathname}${url.search}${url.hash}` : url.toString();
|
|
21
|
+
}
|
|
22
|
+
var RNXSIM_METRO_SOURCE_MAP_COMMENT = "//# sourceMappingURL=";
|
|
23
|
+
function detachRNXMetroSourceMapUrl(bundleText) {
|
|
24
|
+
const trimmedEnd = bundleText.replace(/\s+$/, "");
|
|
25
|
+
const commentStart = trimmedEnd.lastIndexOf(`
|
|
26
|
+
${RNXSIM_METRO_SOURCE_MAP_COMMENT}`);
|
|
27
|
+
if (commentStart < 0) return { source: bundleText, sourceMappingUrl: null };
|
|
28
|
+
const url = trimmedEnd.slice(commentStart + 1 + RNXSIM_METRO_SOURCE_MAP_COMMENT.length);
|
|
29
|
+
if (url.includes("\n")) return { source: bundleText, sourceMappingUrl: null };
|
|
30
|
+
return { source: trimmedEnd.slice(0, commentStart), sourceMappingUrl: url };
|
|
31
|
+
}
|
|
32
|
+
function createRNXMetroModuleIdentityFooter(identity) {
|
|
33
|
+
const payload = JSON.stringify(identity).replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029").replace(/<\//g, "<\\/");
|
|
34
|
+
return `
|
|
35
|
+
${RNXSIM_METRO_MODULE_PATHS_PREFIX}${payload};`;
|
|
36
|
+
}
|
|
37
|
+
function appendRNXMetroModuleIdentityFooter(bundleText, identity) {
|
|
38
|
+
const footer = createRNXMetroModuleIdentityFooter(identity);
|
|
39
|
+
const detached = detachRNXMetroSourceMapUrl(bundleText);
|
|
40
|
+
return detached.sourceMappingUrl === null ? bundleText + footer : `${detached.source}${footer}
|
|
41
|
+
${RNXSIM_METRO_SOURCE_MAP_COMMENT}${detached.sourceMappingUrl}`;
|
|
42
|
+
}
|
|
43
|
+
function readRNXMetroModuleIdentity(bundleText) {
|
|
44
|
+
const detached = detachRNXMetroSourceMapUrl(bundleText);
|
|
45
|
+
const withoutMap = detached.source;
|
|
46
|
+
const footerPrefix = `
|
|
47
|
+
${RNXSIM_METRO_MODULE_PATHS_PREFIX}`;
|
|
48
|
+
const footerStart = withoutMap.lastIndexOf(footerPrefix);
|
|
49
|
+
if (footerStart < 0) return null;
|
|
50
|
+
if (!withoutMap.endsWith(";")) {
|
|
51
|
+
throw new Error("Metro module identity footer is truncated");
|
|
52
|
+
}
|
|
53
|
+
let parsed;
|
|
54
|
+
try {
|
|
55
|
+
parsed = JSON.parse(withoutMap.slice(footerStart + footerPrefix.length, -1));
|
|
56
|
+
} catch {
|
|
57
|
+
throw new Error("Metro module identity footer is not valid JSON");
|
|
58
|
+
}
|
|
59
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
60
|
+
throw new Error("Metro module identity footer is malformed");
|
|
61
|
+
}
|
|
62
|
+
const version = Reflect.get(parsed, "version");
|
|
63
|
+
if (version === void 0) {
|
|
64
|
+
const modulePaths2 = Object.fromEntries(
|
|
65
|
+
Object.entries(parsed).map(([moduleId, modulePath]) => {
|
|
66
|
+
if (typeof modulePath !== "string") {
|
|
67
|
+
throw new Error(`Metro module identity has an invalid path for ${moduleId}`);
|
|
68
|
+
}
|
|
69
|
+
return [moduleId, modulePath];
|
|
70
|
+
})
|
|
71
|
+
);
|
|
72
|
+
return {
|
|
73
|
+
source: withoutMap.slice(0, footerStart),
|
|
74
|
+
version: RNX_METRO_MODULE_IDENTITY_VERSION,
|
|
75
|
+
identitySource: "rnx-plugin",
|
|
76
|
+
modulePaths: modulePaths2,
|
|
77
|
+
logicalSpecifiers: {},
|
|
78
|
+
sourceMappingUrl: detached.sourceMappingUrl
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
const identitySource = Reflect.get(parsed, "identitySource");
|
|
82
|
+
const parsedModulePaths = Reflect.get(parsed, "modulePaths");
|
|
83
|
+
const parsedLogicalSpecifiers = Reflect.get(parsed, "logicalSpecifiers");
|
|
84
|
+
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)) {
|
|
85
|
+
throw new Error("Metro module identity footer is malformed");
|
|
86
|
+
}
|
|
87
|
+
const modulePaths = Object.fromEntries(
|
|
88
|
+
Object.entries(parsedModulePaths).map(([moduleId, modulePath]) => {
|
|
89
|
+
if (typeof modulePath !== "string") {
|
|
90
|
+
throw new Error(`Metro module identity has an invalid path for ${moduleId}`);
|
|
91
|
+
}
|
|
92
|
+
return [moduleId, modulePath];
|
|
93
|
+
})
|
|
94
|
+
);
|
|
95
|
+
const logicalSpecifiers = Object.fromEntries(
|
|
96
|
+
Object.entries(parsedLogicalSpecifiers).map(([moduleId, specifiers]) => {
|
|
97
|
+
if (!Array.isArray(specifiers) || specifiers.length === 0 || !specifiers.every(
|
|
98
|
+
(specifier) => typeof specifier === "string" && specifier.length > 0
|
|
99
|
+
)) {
|
|
100
|
+
throw new Error(`Metro module identity has invalid specifiers for ${moduleId}`);
|
|
101
|
+
}
|
|
102
|
+
const unique = [...new Set(specifiers)].sort(
|
|
103
|
+
(left, right) => left.localeCompare(right)
|
|
104
|
+
);
|
|
105
|
+
if (unique.length !== specifiers.length) {
|
|
106
|
+
throw new Error(`Metro module identity repeats a specifier for ${moduleId}`);
|
|
107
|
+
}
|
|
108
|
+
return [moduleId, unique];
|
|
109
|
+
})
|
|
110
|
+
);
|
|
111
|
+
return {
|
|
112
|
+
source: withoutMap.slice(0, footerStart),
|
|
113
|
+
version,
|
|
114
|
+
identitySource,
|
|
115
|
+
modulePaths,
|
|
116
|
+
logicalSpecifiers,
|
|
117
|
+
sourceMappingUrl: detached.sourceMappingUrl
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
function readStringLiteralStart(source, start, end) {
|
|
121
|
+
const quote = source[end];
|
|
122
|
+
if (quote !== '"' && quote !== "'") return -1;
|
|
123
|
+
for (let index = end - 1; index > start; index--) {
|
|
124
|
+
if (source[index] !== quote) continue;
|
|
125
|
+
let backslashes = 0;
|
|
126
|
+
while (index - 1 - backslashes > start && source[index - 1 - backslashes] === "\\") {
|
|
127
|
+
backslashes++;
|
|
128
|
+
}
|
|
129
|
+
if (backslashes % 2 === 0) return index;
|
|
130
|
+
}
|
|
131
|
+
return -1;
|
|
132
|
+
}
|
|
133
|
+
function readDefineTail(source, start, end) {
|
|
134
|
+
let cursor = end;
|
|
135
|
+
while (cursor > start && (source[cursor] === " " || source[cursor] === "\n" || source[cursor] === " " || source[cursor] === ";")) {
|
|
136
|
+
cursor--;
|
|
137
|
+
}
|
|
138
|
+
if (source[cursor] !== ")") return null;
|
|
139
|
+
cursor--;
|
|
140
|
+
while (cursor > start && /\s/.test(source[cursor])) cursor--;
|
|
141
|
+
let verboseNameStart;
|
|
142
|
+
let verboseNameEnd;
|
|
143
|
+
if (source[cursor] === '"' || source[cursor] === "'") {
|
|
144
|
+
const literalStart = readStringLiteralStart(source, start, cursor);
|
|
145
|
+
if (literalStart < 0) return null;
|
|
146
|
+
verboseNameStart = literalStart;
|
|
147
|
+
verboseNameEnd = cursor + 1;
|
|
148
|
+
cursor = literalStart - 1;
|
|
149
|
+
while (cursor > start && /\s/.test(source[cursor])) cursor--;
|
|
150
|
+
if (source[cursor] !== ",") return null;
|
|
151
|
+
cursor--;
|
|
152
|
+
while (cursor > start && /\s/.test(source[cursor])) cursor--;
|
|
153
|
+
}
|
|
154
|
+
if (source[cursor] !== "]") return null;
|
|
155
|
+
const dependenciesEnd = cursor + 1;
|
|
156
|
+
let depth = 1;
|
|
157
|
+
cursor--;
|
|
158
|
+
while (cursor > start && depth > 0) {
|
|
159
|
+
const character = source[cursor];
|
|
160
|
+
if (character === "]") depth++;
|
|
161
|
+
else if (character === "[") depth--;
|
|
162
|
+
if (depth === 0) break;
|
|
163
|
+
cursor--;
|
|
164
|
+
}
|
|
165
|
+
if (depth !== 0) return null;
|
|
166
|
+
const dependenciesStart = cursor;
|
|
167
|
+
let idEnd = cursor - 1;
|
|
168
|
+
while (idEnd > start && /\s/.test(source[idEnd])) idEnd--;
|
|
169
|
+
if (source[idEnd] !== ",") return null;
|
|
170
|
+
let idStart = idEnd;
|
|
171
|
+
while (idStart > start && /[0-9a-fA-FxX.+-]/.test(source[idStart - 1])) idStart--;
|
|
172
|
+
const literal = source.slice(idStart, idEnd);
|
|
173
|
+
if (!/^-?(?:0[xXbBoO][0-9a-fA-F]+|\d+(?:\.\d*)?(?:[eE][+-]?\d+)?)$/.test(literal)) {
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
const moduleId = Number(literal);
|
|
177
|
+
if (!Number.isSafeInteger(moduleId)) return null;
|
|
178
|
+
let factoryEnd = idStart - 1;
|
|
179
|
+
while (factoryEnd > start && /\s/.test(source[factoryEnd])) factoryEnd--;
|
|
180
|
+
if (source[factoryEnd] !== ",") return null;
|
|
181
|
+
return {
|
|
182
|
+
moduleId,
|
|
183
|
+
factoryEnd,
|
|
184
|
+
dependenciesStart,
|
|
185
|
+
dependenciesEnd,
|
|
186
|
+
verboseNameStart,
|
|
187
|
+
verboseNameEnd
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
function readRNXMetroBundleLayout(source) {
|
|
191
|
+
const lineOffsets = [0];
|
|
192
|
+
for (let index = 0; index < source.length; index++) {
|
|
193
|
+
if (source.charCodeAt(index) === 10) lineOffsets.push(index + 1);
|
|
194
|
+
}
|
|
195
|
+
const boundaries = [];
|
|
196
|
+
for (let lineIndex = 0; lineIndex < lineOffsets.length; lineIndex++) {
|
|
197
|
+
const start = lineOffsets[lineIndex];
|
|
198
|
+
if (source.startsWith("__d(", start) || source.startsWith("__r(", start)) {
|
|
199
|
+
boundaries.push(lineIndex);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
const statements = [];
|
|
203
|
+
let moduleIdFailures = 0;
|
|
204
|
+
for (let index = 0; index < boundaries.length; index++) {
|
|
205
|
+
const lineIndex = boundaries[index];
|
|
206
|
+
const start = lineOffsets[lineIndex];
|
|
207
|
+
const nextLineIndex = boundaries[index + 1];
|
|
208
|
+
const endLineIndex = nextLineIndex !== void 0 ? nextLineIndex - 1 : lineOffsets.length - 1;
|
|
209
|
+
const end = nextLineIndex !== void 0 ? lineOffsets[nextLineIndex] : source.length;
|
|
210
|
+
if (!source.startsWith("__d(", start)) {
|
|
211
|
+
statements.push({ kind: "run", start, end, lineIndex, endLineIndex });
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
const tail = readDefineTail(source, start, end - 1);
|
|
215
|
+
if (!tail) {
|
|
216
|
+
moduleIdFailures++;
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
statements.push({
|
|
220
|
+
kind: "define",
|
|
221
|
+
moduleId: tail.moduleId,
|
|
222
|
+
start,
|
|
223
|
+
end,
|
|
224
|
+
lineIndex,
|
|
225
|
+
endLineIndex,
|
|
226
|
+
factory: { start: start + "__d(".length, end: tail.factoryEnd },
|
|
227
|
+
dependencies: { start: tail.dependenciesStart, end: tail.dependenciesEnd },
|
|
228
|
+
...tail.verboseNameStart !== void 0 && tail.verboseNameEnd !== void 0 ? { verboseName: { start: tail.verboseNameStart, end: tail.verboseNameEnd } } : {}
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
return {
|
|
232
|
+
prelude: source.slice(
|
|
233
|
+
0,
|
|
234
|
+
boundaries.length > 0 ? lineOffsets[boundaries[0]] : source.length
|
|
235
|
+
),
|
|
236
|
+
statements,
|
|
237
|
+
moduleIdFailures
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
function validateRNXMetroModulePaths(source, modulePaths) {
|
|
241
|
+
const layout = readRNXMetroBundleLayout(source);
|
|
242
|
+
if (layout.moduleIdFailures > 0) {
|
|
243
|
+
throw new Error(
|
|
244
|
+
`Metro module identity could not read ${layout.moduleIdFailures} module IDs`
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
const definedIds = /* @__PURE__ */ new Set();
|
|
248
|
+
for (const statement of layout.statements) {
|
|
249
|
+
if (statement.kind !== "define") continue;
|
|
250
|
+
if (definedIds.has(statement.moduleId)) {
|
|
251
|
+
throw new Error(`Metro module identity has duplicate module ${statement.moduleId}`);
|
|
252
|
+
}
|
|
253
|
+
definedIds.add(statement.moduleId);
|
|
254
|
+
if (!Object.prototype.hasOwnProperty.call(modulePaths, String(statement.moduleId))) {
|
|
255
|
+
throw new Error(`Metro module identity is missing ${statement.moduleId}`);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
if (definedIds.size === 0) {
|
|
259
|
+
throw new Error("Metro module identity found no canonical JavaScript modules");
|
|
260
|
+
}
|
|
261
|
+
for (const [key, modulePath] of Object.entries(modulePaths)) {
|
|
262
|
+
const moduleId = Number(key);
|
|
263
|
+
if (!Number.isSafeInteger(moduleId) || String(moduleId) !== key) {
|
|
264
|
+
throw new Error(`Metro module identity has invalid module ID ${key}`);
|
|
265
|
+
}
|
|
266
|
+
if (typeof modulePath !== "string" || modulePath.length === 0) {
|
|
267
|
+
throw new Error(`Metro module identity has no path for ${key}`);
|
|
268
|
+
}
|
|
269
|
+
if (!definedIds.has(moduleId)) {
|
|
270
|
+
throw new Error(`Metro module identity has no module ${key}`);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
function validateRNXMetroModuleIdentity(identity) {
|
|
275
|
+
validateRNXMetroModulePaths(identity.source, identity.modulePaths);
|
|
276
|
+
for (const moduleId of Object.keys(identity.logicalSpecifiers)) {
|
|
277
|
+
if (!Object.prototype.hasOwnProperty.call(identity.modulePaths, moduleId)) {
|
|
278
|
+
throw new Error(
|
|
279
|
+
`Metro module identity has logical specifiers for unknown module ${moduleId}`
|
|
280
|
+
);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
export {
|
|
285
|
+
RNX_METRO_MODULE_IDENTITY_VERSION,
|
|
286
|
+
appendRNXMetroModuleIdentityFooter,
|
|
287
|
+
createRNXMetroModuleIdentityFooter,
|
|
288
|
+
detachRNXMetroSourceMapUrl,
|
|
289
|
+
readRNXMetroBundleLayout,
|
|
290
|
+
readRNXMetroModuleIdentity,
|
|
291
|
+
toRNXDevelopmentBundleUrl,
|
|
292
|
+
toRNXProductionBundleUrl,
|
|
293
|
+
validateRNXMetroModuleIdentity,
|
|
294
|
+
validateRNXMetroModulePaths
|
|
295
|
+
};
|