peachsim 0.1.899 → 0.1.908
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 +8 -0
- package/cli/app-fonts.ts +27 -2
- package/cli/commands/box/bundle-plane.ts +13 -4
- package/cli/commands/box.ts +22 -1
- package/cli/commands/control.ts +29 -16
- package/cli/commands/flow.ts +8 -1
- package/cli/commands/platform.ts +15 -2
- package/cli/commands/skills.ts +125 -10
- package/cli/commands/upload.ts +53 -39
- package/cli/flow-live-status.ts +11 -6
- package/detox/expectations.ts +22 -15
- package/detox/index.ts +4 -19
- package/dist-lib/agent-daemon-client.cjs +1 -1
- package/dist-lib/agent-events.cjs +1 -1
- package/dist-lib/agent-identity.cjs +1 -1
- package/dist-lib/agent-sessions.cjs +1 -1
- package/dist-lib/attached-projects.cjs +1 -1
- package/dist-lib/auth/shared-session.cjs +1 -1
- package/dist-lib/backend-origin.cjs +1 -1
- package/dist-lib/beta.cjs +1 -1
- package/dist-lib/beta.mjs +1 -1
- package/dist-lib/bridge-constants.cjs +1 -1
- package/dist-lib/bridge-contract-input.cjs +1 -1
- package/dist-lib/bridge-contract-input.mjs +1 -1
- package/dist-lib/bridge-contract.cjs +1 -1
- package/dist-lib/bridge-contract.mjs +1 -1
- package/dist-lib/bundle-channel.cjs +8 -5
- package/dist-lib/capture-contract.cjs +1 -1
- package/dist-lib/capture-contract.mjs +1 -1
- package/dist-lib/cli-constants.cjs +1 -1
- package/dist-lib/cloud-contract.cjs +1 -1
- package/dist-lib/cloud-contract.mjs +1 -1
- package/dist-lib/cloud-test-args.cjs +1 -1
- package/dist-lib/cloud-test-args.mjs +1 -1
- package/dist-lib/cloud.cjs +1 -1
- package/dist-lib/cloud.mjs +1 -1
- package/dist-lib/config.cjs +1 -1
- package/dist-lib/detox/index.cjs +15 -18
- package/dist-lib/dev-bundle-resolution.cjs +1 -1
- package/dist-lib/expo-swift-bundle.cjs +8 -5
- package/dist-lib/expo-swift-metadata.cjs +1 -1
- package/dist-lib/expo-swift-metadata.mjs +1 -1
- package/dist-lib/home-paths.cjs +1 -1
- package/dist-lib/host/bridge-host.cjs +8 -5
- package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
- package/dist-lib/host/replacement-module-handler.cjs +1 -1
- package/dist-lib/host/websocket-proxy.cjs +1 -1
- package/dist-lib/index.cjs +1 -1
- package/dist-lib/jump-to-source-babel.cjs +1 -1
- package/dist-lib/jump-to-source-native.cjs +1 -1
- package/dist-lib/kotlin-host.cjs +1 -1
- package/dist-lib/menu.cjs +1 -1
- package/dist-lib/menu.mjs +1 -1
- package/dist-lib/metro-fingerprint-registry.cjs +1 -1
- package/dist-lib/metro-fingerprint-registry.mjs +1 -1
- package/dist-lib/metro-production-bundle.cjs +1 -1
- package/dist-lib/metro-production-bundle.mjs +1 -1
- package/dist-lib/metro.cjs +1 -1
- package/dist-lib/native-app-identity.cjs +1 -1
- package/dist-lib/native-app-identity.mjs +1 -1
- package/dist-lib/native-firebase-metadata.cjs +1 -1
- package/dist-lib/native-firebase-metadata.mjs +1 -1
- package/dist-lib/plist.cjs +1 -1
- package/dist-lib/plist.mjs +1 -1
- package/dist-lib/profiles.cjs +1 -1
- package/dist-lib/public-brand.cjs +1 -1
- package/dist-lib/react-native-host-modules.cjs +1 -1
- package/dist-lib/react-native-host-modules.mjs +1 -1
- package/dist-lib/render-mode.cjs +1 -1
- package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
- package/dist-lib/sdk.cjs +1 -1
- package/dist-lib/sdk.mjs +1 -1
- package/dist-lib/skills.cjs +136 -25
- package/dist-lib/swift-compile.cjs +1 -1
- package/dist-lib/swift-compile.mjs +1 -1
- package/dist-lib/swift-package.cjs +1 -1
- package/dist-lib/swift-package.mjs +1 -1
- package/dist-lib/swift-submit.cjs +1 -1
- package/dist-lib/swift-submit.mjs +1 -1
- package/dist-lib/swift-toolchain.cjs +1 -1
- package/dist-lib/swift.cjs +1 -1
- package/dist-lib/vite-swift.cjs +1 -1
- package/dist-lib/vite.cjs +1 -1
- package/dist-lib/worklet-executable.cjs +1 -1
- package/dist-lib/worklet-executable.mjs +1 -1
- package/kotlin/fork/NOTICE +3 -0
- package/kotlin/fork/README.md +10 -2
- package/kotlin/fork/build.sh +14 -14
- package/kotlin/fork/compose-worker-globals.patch +105 -0
- package/kotlin/fork/fork.json +3 -3
- package/kotlin/fork/publish.ts +8 -1
- package/kotlin/fork/skia-android-shaping.patch +30 -0
- package/kotlin/fork/skiko-local.init.gradle +10 -0
- package/kotlin/fork/skiko-worker-clock.patch +17 -0
- package/kotlin/toolchain.json +9 -9
- package/package.json +1 -1
- package/skills/peach-debug/SKILL.md +15 -153
- package/skills/peach-debug/references/accessibility.md +102 -0
- package/skills/peach-debug/references/commands.md +56 -0
- package/src/expo-swift-host.ts +15 -4
- package/src/vite-plugin.ts +3 -3
package/detox/expectations.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { dragScrollNode } from './gestures'
|
|
6
6
|
import type { SootSimElement } from './element-types'
|
|
7
7
|
import type { Matcher } from './matchers'
|
|
8
|
-
import type { SootSimNodeInfo } from '@peach/globals'
|
|
8
|
+
import type { SootSimFocusedNodeInfo, SootSimNodeInfo } from '@peach/globals'
|
|
9
9
|
import type { Page } from 'playwright-core'
|
|
10
10
|
|
|
11
11
|
type FindFn = (matcher: Matcher) => Promise<any>
|
|
@@ -52,20 +52,27 @@ export function isNodeVisible(node: SootSimNodeInfo | null | undefined): boolean
|
|
|
52
52
|
return visibleFraction(node) >= DEFAULT_VISIBILITY_THRESHOLD
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
//
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
55
|
+
// a native host is focused when its editor child holds focus.
|
|
56
|
+
export function focusIsWithin(focused: SootSimFocusedNodeInfo, nodeId: number): boolean {
|
|
57
|
+
return focused.nodeId === nodeId || focused.ancestorNodeIds.includes(nodeId)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// the engine owns focus for canvas inputs and hosted native editors.
|
|
61
|
+
export async function isTextInputNodeFocused(
|
|
62
|
+
node: SootSimNodeInfo,
|
|
63
|
+
page: Page,
|
|
64
|
+
): Promise<boolean> {
|
|
65
|
+
const focused = await page.evaluate(async () => window.__sootsimTest!.getFocusedNode())
|
|
66
|
+
return focused !== null && focusIsWithin(focused, node.nodeId)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
async function isNodeFocused(node: SootSimNodeInfo, page: Page): Promise<boolean> {
|
|
70
|
+
if (node.isTextInput) return isTextInputNodeFocused(node, page)
|
|
71
|
+
return page.evaluate(
|
|
72
|
+
(nodeId) =>
|
|
73
|
+
document.activeElement?.getAttribute('data-sootsim-id') === String(nodeId),
|
|
74
|
+
node.nodeId,
|
|
75
|
+
)
|
|
69
76
|
}
|
|
70
77
|
|
|
71
78
|
export function describeNodeVisibility(node: SootSimNodeInfo | null | undefined): string {
|
package/detox/index.ts
CHANGED
|
@@ -29,6 +29,8 @@ import {
|
|
|
29
29
|
createExpect,
|
|
30
30
|
createWaitFor,
|
|
31
31
|
describeNodeVisibility,
|
|
32
|
+
focusIsWithin,
|
|
33
|
+
isTextInputNodeFocused,
|
|
32
34
|
isNodeVisible,
|
|
33
35
|
} from './expectations'
|
|
34
36
|
import {
|
|
@@ -776,35 +778,18 @@ async function dispatchTapAtSootsimPoint(
|
|
|
776
778
|
)
|
|
777
779
|
}
|
|
778
780
|
|
|
779
|
-
async function isFocusedTextInputNode(page: Page, nodeInfo: any): Promise<boolean> {
|
|
780
|
-
const focused = await page.evaluate(
|
|
781
|
-
async () => (await window.__sootsimTest!.getFocusedNode?.()) ?? null,
|
|
782
|
-
)
|
|
783
|
-
return !!focused && focusIsWithin(focused, nodeInfo?.nodeId)
|
|
784
|
-
}
|
|
785
|
-
|
|
786
|
-
// espresso's typeText taps the matched view and types into whatever took
|
|
787
|
-
// focus, so a native host whose editor child holds focus takes the text.
|
|
788
|
-
function focusIsWithin(
|
|
789
|
-
focused: { nodeId: number; ancestorNodeIds: number[] },
|
|
790
|
-
nodeId: number,
|
|
791
|
-
): boolean {
|
|
792
|
-
return focused.nodeId === nodeId || focused.ancestorNodeIds.includes(nodeId)
|
|
793
|
-
}
|
|
794
|
-
|
|
795
781
|
async function focusElementForTextEntry(el: SootSimElement): Promise<void> {
|
|
796
782
|
const page = getPage()
|
|
797
783
|
const node = await findNodeByMatcher(el._matcher)
|
|
798
784
|
if (!node) {
|
|
799
785
|
throw new Error(`element not found for text entry: ${JSON.stringify(el._matcher)}`)
|
|
800
786
|
}
|
|
801
|
-
if (await
|
|
787
|
+
if (await isTextInputNodeFocused(node, page)) return
|
|
802
788
|
await el.tap()
|
|
803
789
|
// the tap reaches the worker on its own channel. keys pressed before it lands
|
|
804
790
|
// would edit around a caret the tap then moves, so wait for its focus.
|
|
805
791
|
await pollUntil(
|
|
806
|
-
() =>
|
|
807
|
-
page.evaluate(async () => (await window.__sootsimTest!.getFocusedNode?.()) ?? null),
|
|
792
|
+
() => page.evaluate(async () => window.__sootsimTest!.getFocusedNode()),
|
|
808
793
|
(focused) => focused !== null && focusIsWithin(focused, node.nodeId),
|
|
809
794
|
{
|
|
810
795
|
timeoutMs: 5000,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/beta.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/beta.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -8608,7 +8608,7 @@ async function collectExpoSwiftSources(appRoot) {
|
|
|
8608
8608
|
const namespacesSeen = /* @__PURE__ */ new Set();
|
|
8609
8609
|
let bytes = 0;
|
|
8610
8610
|
let fileCount = 0;
|
|
8611
|
-
for (const entry of Object.
|
|
8611
|
+
for (const [, entry] of Object.entries(search).sort(([a], [b]) => a.localeCompare(b))) {
|
|
8612
8612
|
if (!entry || typeof entry !== "object")
|
|
8613
8613
|
throw new Error("invalid Expo autolinking entry");
|
|
8614
8614
|
const sourceRoot = Reflect.get(entry, "path");
|
|
@@ -8633,8 +8633,8 @@ async function collectExpoSwiftSources(appRoot) {
|
|
|
8633
8633
|
const files2 = {};
|
|
8634
8634
|
const classes = [];
|
|
8635
8635
|
for (const module2 of modules) {
|
|
8636
|
-
const className = module2 && typeof module2 === "object" ? Reflect.get(module2, "class") : null;
|
|
8637
|
-
const name2 = module2 && typeof module2 === "object" ? Reflect.get(module2, "name") : null;
|
|
8636
|
+
const className = typeof module2 === "string" ? module2 : module2 && typeof module2 === "object" ? Reflect.get(module2, "class") : null;
|
|
8637
|
+
const name2 = typeof module2 === "string" ? null : module2 && typeof module2 === "object" ? Reflect.get(module2, "name") : null;
|
|
8638
8638
|
if (typeof className !== "string" || !/^[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)*$/.test(className) || name2 !== null && typeof name2 !== "string")
|
|
8639
8639
|
throw new Error(`${sourceRoot}: invalid Expo Apple module descriptor`);
|
|
8640
8640
|
classes.push({
|
|
@@ -8660,7 +8660,10 @@ async function collectExpoSwiftSources(appRoot) {
|
|
|
8660
8660
|
fileCount++;
|
|
8661
8661
|
if (fileCount > MAX_SWIFT_COMPILE_FILES - 2 || bytes > MAX_SWIFT_COMPILE_SOURCE_BYTES)
|
|
8662
8662
|
throw new Error("Expo Swift sources exceed compile service caps");
|
|
8663
|
-
files2[`Sources/${namespace}/${import_node_path16.default.relative(ios, file).split(import_node_path16.default.sep).join("/")}`] =
|
|
8663
|
+
files2[`Sources/${namespace}/${import_node_path16.default.relative(ios, file).split(import_node_path16.default.sep).join("/")}`] = // CocoaPods' iOS umbrella header imports UIKit into every Swift file
|
|
8664
|
+
// through the underlying module; these source units have no clang pod.
|
|
8665
|
+
`import UIKit
|
|
8666
|
+
#sourceLocation(file: ${JSON.stringify(file)}, line: 1)
|
|
8664
8667
|
${import_node_fs15.default.readFileSync(file, "utf8")}`;
|
|
8665
8668
|
}
|
|
8666
8669
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/cloud.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/cloud.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
3
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
4
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
package/dist-lib/config.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/detox/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -7387,13 +7387,19 @@ function visibleFraction(node) {
|
|
|
7387
7387
|
function isNodeVisible(node) {
|
|
7388
7388
|
return visibleFraction(node) >= DEFAULT_VISIBILITY_THRESHOLD;
|
|
7389
7389
|
}
|
|
7390
|
+
function focusIsWithin(focused, nodeId) {
|
|
7391
|
+
return focused.nodeId === nodeId || focused.ancestorNodeIds.includes(nodeId);
|
|
7392
|
+
}
|
|
7393
|
+
async function isTextInputNodeFocused(node, page) {
|
|
7394
|
+
const focused = await page.evaluate(async () => window.__sootsimTest.getFocusedNode());
|
|
7395
|
+
return focused !== null && focusIsWithin(focused, node.nodeId);
|
|
7396
|
+
}
|
|
7390
7397
|
async function isNodeFocused(node, page) {
|
|
7391
|
-
|
|
7392
|
-
|
|
7393
|
-
|
|
7394
|
-
|
|
7395
|
-
|
|
7396
|
-
}, nodeId);
|
|
7398
|
+
if (node.isTextInput) return isTextInputNodeFocused(node, page);
|
|
7399
|
+
return page.evaluate(
|
|
7400
|
+
(nodeId) => document.activeElement?.getAttribute("data-sootsim-id") === String(nodeId),
|
|
7401
|
+
node.nodeId
|
|
7402
|
+
);
|
|
7397
7403
|
}
|
|
7398
7404
|
function describeNodeVisibility(node) {
|
|
7399
7405
|
if (!node) return "not found";
|
|
@@ -8510,25 +8516,16 @@ async function dispatchTapAtSootsimPoint(page, x, y, token) {
|
|
|
8510
8516
|
{ x, y, token }
|
|
8511
8517
|
);
|
|
8512
8518
|
}
|
|
8513
|
-
async function isFocusedTextInputNode(page, nodeInfo) {
|
|
8514
|
-
const focused = await page.evaluate(
|
|
8515
|
-
async () => await window.__sootsimTest.getFocusedNode?.() ?? null
|
|
8516
|
-
);
|
|
8517
|
-
return !!focused && focusIsWithin(focused, nodeInfo?.nodeId);
|
|
8518
|
-
}
|
|
8519
|
-
function focusIsWithin(focused, nodeId) {
|
|
8520
|
-
return focused.nodeId === nodeId || focused.ancestorNodeIds.includes(nodeId);
|
|
8521
|
-
}
|
|
8522
8519
|
async function focusElementForTextEntry(el) {
|
|
8523
8520
|
const page = getPage();
|
|
8524
8521
|
const node = await findNodeByMatcher(el._matcher);
|
|
8525
8522
|
if (!node) {
|
|
8526
8523
|
throw new Error(`element not found for text entry: ${JSON.stringify(el._matcher)}`);
|
|
8527
8524
|
}
|
|
8528
|
-
if (await
|
|
8525
|
+
if (await isTextInputNodeFocused(node, page)) return;
|
|
8529
8526
|
await el.tap();
|
|
8530
8527
|
await pollUntil(
|
|
8531
|
-
() => page.evaluate(async () =>
|
|
8528
|
+
() => page.evaluate(async () => window.__sootsimTest.getFocusedNode()),
|
|
8532
8529
|
(focused) => focused !== null && focusIsWithin(focused, node.nodeId),
|
|
8533
8530
|
{
|
|
8534
8531
|
timeoutMs: 5e3,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -8415,7 +8415,7 @@ async function collectExpoSwiftSources(appRoot) {
|
|
|
8415
8415
|
const namespacesSeen = /* @__PURE__ */ new Set();
|
|
8416
8416
|
let bytes = 0;
|
|
8417
8417
|
let fileCount = 0;
|
|
8418
|
-
for (const entry of Object.
|
|
8418
|
+
for (const [, entry] of Object.entries(search).sort(([a], [b]) => a.localeCompare(b))) {
|
|
8419
8419
|
if (!entry || typeof entry !== "object")
|
|
8420
8420
|
throw new Error("invalid Expo autolinking entry");
|
|
8421
8421
|
const sourceRoot = Reflect.get(entry, "path");
|
|
@@ -8440,8 +8440,8 @@ async function collectExpoSwiftSources(appRoot) {
|
|
|
8440
8440
|
const files2 = {};
|
|
8441
8441
|
const classes = [];
|
|
8442
8442
|
for (const module2 of modules) {
|
|
8443
|
-
const className = module2 && typeof module2 === "object" ? Reflect.get(module2, "class") : null;
|
|
8444
|
-
const name2 = module2 && typeof module2 === "object" ? Reflect.get(module2, "name") : null;
|
|
8443
|
+
const className = typeof module2 === "string" ? module2 : module2 && typeof module2 === "object" ? Reflect.get(module2, "class") : null;
|
|
8444
|
+
const name2 = typeof module2 === "string" ? null : module2 && typeof module2 === "object" ? Reflect.get(module2, "name") : null;
|
|
8445
8445
|
if (typeof className !== "string" || !/^[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)*$/.test(className) || name2 !== null && typeof name2 !== "string")
|
|
8446
8446
|
throw new Error(`${sourceRoot}: invalid Expo Apple module descriptor`);
|
|
8447
8447
|
classes.push({
|
|
@@ -8467,7 +8467,10 @@ async function collectExpoSwiftSources(appRoot) {
|
|
|
8467
8467
|
fileCount++;
|
|
8468
8468
|
if (fileCount > MAX_SWIFT_COMPILE_FILES - 2 || bytes > MAX_SWIFT_COMPILE_SOURCE_BYTES)
|
|
8469
8469
|
throw new Error("Expo Swift sources exceed compile service caps");
|
|
8470
|
-
files2[`Sources/${namespace}/${import_node_path16.default.relative(ios, file).split(import_node_path16.default.sep).join("/")}`] =
|
|
8470
|
+
files2[`Sources/${namespace}/${import_node_path16.default.relative(ios, file).split(import_node_path16.default.sep).join("/")}`] = // CocoaPods' iOS umbrella header imports UIKit into every Swift file
|
|
8471
|
+
// through the underlying module; these source units have no clang pod.
|
|
8472
|
+
`import UIKit
|
|
8473
|
+
#sourceLocation(file: ${JSON.stringify(file)}, line: 1)
|
|
8471
8474
|
${import_node_fs15.default.readFileSync(file, "utf8")}`;
|
|
8472
8475
|
}
|
|
8473
8476
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/home-paths.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -17687,7 +17687,7 @@ async function collectExpoSwiftSources(appRoot) {
|
|
|
17687
17687
|
const namespacesSeen = /* @__PURE__ */ new Set();
|
|
17688
17688
|
let bytes = 0;
|
|
17689
17689
|
let fileCount = 0;
|
|
17690
|
-
for (const entry of Object.
|
|
17690
|
+
for (const [, entry] of Object.entries(search).sort(([a], [b]) => a.localeCompare(b))) {
|
|
17691
17691
|
if (!entry || typeof entry !== "object")
|
|
17692
17692
|
throw new Error("invalid Expo autolinking entry");
|
|
17693
17693
|
const sourceRoot = Reflect.get(entry, "path");
|
|
@@ -17712,8 +17712,8 @@ async function collectExpoSwiftSources(appRoot) {
|
|
|
17712
17712
|
const files2 = {};
|
|
17713
17713
|
const classes = [];
|
|
17714
17714
|
for (const module2 of modules) {
|
|
17715
|
-
const className = module2 && typeof module2 === "object" ? Reflect.get(module2, "class") : null;
|
|
17716
|
-
const name2 = module2 && typeof module2 === "object" ? Reflect.get(module2, "name") : null;
|
|
17715
|
+
const className = typeof module2 === "string" ? module2 : module2 && typeof module2 === "object" ? Reflect.get(module2, "class") : null;
|
|
17716
|
+
const name2 = typeof module2 === "string" ? null : module2 && typeof module2 === "object" ? Reflect.get(module2, "name") : null;
|
|
17717
17717
|
if (typeof className !== "string" || !/^[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)*$/.test(className) || name2 !== null && typeof name2 !== "string")
|
|
17718
17718
|
throw new Error(`${sourceRoot}: invalid Expo Apple module descriptor`);
|
|
17719
17719
|
classes.push({
|
|
@@ -17739,7 +17739,10 @@ async function collectExpoSwiftSources(appRoot) {
|
|
|
17739
17739
|
fileCount++;
|
|
17740
17740
|
if (fileCount > MAX_SWIFT_COMPILE_FILES - 2 || bytes > MAX_SWIFT_COMPILE_SOURCE_BYTES)
|
|
17741
17741
|
throw new Error("Expo Swift sources exceed compile service caps");
|
|
17742
|
-
files2[`Sources/${namespace}/${import_node_path21.default.relative(ios, file).split(import_node_path21.default.sep).join("/")}`] =
|
|
17742
|
+
files2[`Sources/${namespace}/${import_node_path21.default.relative(ios, file).split(import_node_path21.default.sep).join("/")}`] = // CocoaPods' iOS umbrella header imports UIKit into every Swift file
|
|
17743
|
+
// through the underlying module; these source units have no clang pod.
|
|
17744
|
+
`import UIKit
|
|
17745
|
+
#sourceLocation(file: ${JSON.stringify(file)}, line: 1)
|
|
17743
17746
|
${import_node_fs20.default.readFileSync(file, "utf8")}`;
|
|
17744
17747
|
}
|
|
17745
17748
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } 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.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
package/dist-lib/kotlin-host.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } 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.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/menu.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/metro.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.908 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|