peachsim 0.1.896 → 0.1.898
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 -3
- package/cli/commands/control.ts +22 -17
- package/cli/drivers/playwright-sim-host.ts +5 -1
- 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 +1 -1
- package/dist-lib/capture-contract.cjs +1 -1
- package/dist-lib/capture-contract.mjs +1 -1
- package/dist-lib/cli-constants.cjs +1 -1
- package/dist-lib/cloud-contract.cjs +1 -1
- package/dist-lib/cloud-contract.mjs +1 -1
- package/dist-lib/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 +1 -1
- package/dist-lib/dev-bundle-resolution.cjs +1 -1
- package/dist-lib/expo-swift-bundle.cjs +1 -1
- 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 +1 -1
- 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 +19 -19
- 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 +6 -1
- package/kotlin/fork/README.md +8 -3
- package/kotlin/fork/build.sh +24 -0
- package/kotlin/fork/fork.json +6 -2
- package/kotlin/fork/skia-android-shaping.patch +16 -1
- package/kotlin/fork/skiko-worker-clock.patch +27 -5
- package/kotlin/toolchain.json +3 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -153,13 +153,18 @@ exactly one command module per run. Bare `peach` opens ConnectRN, whose simulato
|
|
|
153
153
|
running React Native development servers. The first human run offers the
|
|
154
154
|
recommended background service and optional Desktop app, then opens the simulator
|
|
155
155
|
before asking about private diagnostics or an optional repository install. `peach open`
|
|
156
|
-
ensures the engine runtime exists
|
|
157
|
-
daemon is reachable, then opens a `WsBridge`
|
|
156
|
+
ensures the engine runtime exists when the bridge supplies the shell and starts
|
|
157
|
+
a local foreground bridge when no daemon is reachable, then opens a `WsBridge`
|
|
158
|
+
(`cli/ws-bridge.ts`) on **port
|
|
158
159
|
7668** and sends JSON commands. Inspection/interaction verbs live in
|
|
159
160
|
`cli/commands/inspect/*` and are re-exported as the programmatic `peachsim/sdk`;
|
|
160
161
|
the Maestro runner is `cli/bridge-flow-runner.ts`; the Detox compat driver
|
|
161
162
|
is in `detox/`. Test and screenshot paths additionally use `cli/drivers/*`.
|
|
162
|
-
Browser sims launch in an isolated Playwright Chrome for Testing profile
|
|
163
|
+
Browser sims launch in an isolated Playwright Chrome for Testing profile.
|
|
164
|
+
An explicit `--base-url` keeps that shell's origin and uses its assets without
|
|
165
|
+
installing an active runtime. A bridge started for that shell skips automatic
|
|
166
|
+
runtime updates. An app's configured `runtimeVersion` still selects its installed,
|
|
167
|
+
version-owned bridge origin.
|
|
163
168
|
Electron is the native desktop surface. Team Machine sessions (`TM_SESSION`)
|
|
164
169
|
default to headless Playwright; `--headed` explicitly opens an isolated headed
|
|
165
170
|
browser. System browser launches, including share links, login, box links and
|
package/cli/commands/control.ts
CHANGED
|
@@ -205,12 +205,12 @@ export async function ensureBridgeForOpen(
|
|
|
205
205
|
preferredPort: number,
|
|
206
206
|
explicitPort = false,
|
|
207
207
|
resources?: OpenCommandResources,
|
|
208
|
+
runtimeSource: 'bridge' | 'external' = 'bridge',
|
|
208
209
|
): Promise<number> {
|
|
209
210
|
const lock = readDaemonLockfile()
|
|
210
211
|
assertExplicitBridgeLock(preferredPort, explicitPort, lock)
|
|
211
|
-
//
|
|
212
|
-
|
|
213
|
-
await ensureRuntimeForOpen()
|
|
212
|
+
// an explicit shell origin owns its assets; the bridge only routes commands.
|
|
213
|
+
if (runtimeSource === 'bridge') await ensureRuntimeForOpen()
|
|
214
214
|
const preferredWorld = worldForBridgePort(preferredPort)
|
|
215
215
|
// a closed port refuses at once, so this window only matters when something
|
|
216
216
|
// listens: a live bridge on a loaded machine can take longer than 250 ms to
|
|
@@ -240,7 +240,20 @@ export async function ensureBridgeForOpen(
|
|
|
240
240
|
)
|
|
241
241
|
}
|
|
242
242
|
|
|
243
|
-
const
|
|
243
|
+
const { executable, prefixArgs } = rnxSelfInvocation()
|
|
244
|
+
const child = spawn(
|
|
245
|
+
executable,
|
|
246
|
+
[...prefixArgs, 'serve', '--quiet', '--port', String(preferredPort)],
|
|
247
|
+
{
|
|
248
|
+
detached: true,
|
|
249
|
+
stdio: 'ignore',
|
|
250
|
+
// this bridge does not supply the shell, so it needs no runtime updates.
|
|
251
|
+
env:
|
|
252
|
+
runtimeSource === 'external'
|
|
253
|
+
? { ...process.env, PEACH_UPDATE_CHECK: 'off' }
|
|
254
|
+
: process.env,
|
|
255
|
+
},
|
|
256
|
+
)
|
|
244
257
|
if (resources) {
|
|
245
258
|
resources.bridge = child
|
|
246
259
|
resources.port = preferredPort
|
|
@@ -333,15 +346,6 @@ async function ensureRuntimeForOpen() {
|
|
|
333
346
|
await runRuntime(['install'], {})
|
|
334
347
|
}
|
|
335
348
|
|
|
336
|
-
function spawnSootsim(args: string[]) {
|
|
337
|
-
const { executable, prefixArgs } = rnxSelfInvocation()
|
|
338
|
-
return spawn(executable, [...prefixArgs, ...args], {
|
|
339
|
-
detached: true,
|
|
340
|
-
stdio: 'ignore',
|
|
341
|
-
env: process.env,
|
|
342
|
-
})
|
|
343
|
-
}
|
|
344
|
-
|
|
345
349
|
function canConnectToBridge(port: number, timeoutMs: number): Promise<boolean> {
|
|
346
350
|
return new Promise((resolve) => {
|
|
347
351
|
const ws = new WebSocket(`ws://127.0.0.1:${port}`, { handshakeTimeout: timeoutMs })
|
|
@@ -1713,6 +1717,7 @@ export async function runOpenCommand(
|
|
|
1713
1717
|
parsed.wsPort,
|
|
1714
1718
|
parsed.explicitPort,
|
|
1715
1719
|
opts.resources,
|
|
1720
|
+
explicitBaseUrl && !configuredRuntimeVersion ? 'external' : 'bridge',
|
|
1716
1721
|
)
|
|
1717
1722
|
if (opts.resources) opts.resources.port = parsed.wsPort
|
|
1718
1723
|
opts.signal?.throwIfAborted()
|
|
@@ -1889,10 +1894,10 @@ export async function runOpenCommand(
|
|
|
1889
1894
|
const selectedShellBaseUrl = configuredRuntimeVersion
|
|
1890
1895
|
? `http://localhost:${parsed.wsPort}/`
|
|
1891
1896
|
: explicitBaseUrl || resolveShellBaseUrlForBridgePort(parsed.wsPort)
|
|
1892
|
-
const baseUrl =
|
|
1893
|
-
|
|
1894
|
-
|
|
1895
|
-
|
|
1897
|
+
const baseUrl =
|
|
1898
|
+
explicitBaseUrl && !configuredRuntimeVersion
|
|
1899
|
+
? selectedShellBaseUrl
|
|
1900
|
+
: applyRuntimeGenerationOrigin(selectedShellBaseUrl, configuredRuntimeVersion)
|
|
1896
1901
|
const hasExplicitBaseUrl = args.includes('--base-url')
|
|
1897
1902
|
printBridgeWorldNotice(parsed.wsPort, baseUrl)
|
|
1898
1903
|
const savedSimId = readCurrentSimId()
|
|
@@ -149,7 +149,10 @@ const chromePidsByProfile = () => {
|
|
|
149
149
|
// match the whole --user-data-dir argument: a pattern search also found
|
|
150
150
|
// browsers whose profile path merely starts with this one.
|
|
151
151
|
const flag = ' --user-data-dir=' + profileDir + ' ';
|
|
152
|
-
return execSync('ps -axo pid=,command=', {
|
|
152
|
+
return execSync('ps -axo pid=,command=', {
|
|
153
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
154
|
+
maxBuffer: Infinity,
|
|
155
|
+
})
|
|
153
156
|
.toString().split('\\n').map((line) => line.trim().match(/^(\\d+)\\s+(.*)$/))
|
|
154
157
|
.filter((row) => row && (' ' + row[2] + ' ').includes(flag))
|
|
155
158
|
.map((row) => Number(row[1]))
|
|
@@ -163,6 +166,7 @@ const chromeCommandsByProfile = () => {
|
|
|
163
166
|
try {
|
|
164
167
|
return execSync('ps -p ' + pids.join(',') + ' -o command=', {
|
|
165
168
|
stdio: ['ignore', 'pipe', 'ignore'],
|
|
169
|
+
maxBuffer: Infinity,
|
|
166
170
|
}).toString().split('\\n').filter(Boolean);
|
|
167
171
|
} catch { return []; }
|
|
168
172
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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.898 | (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/plist.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.898 | (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/plist.mjs
CHANGED
package/dist-lib/profiles.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.898 | (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.898 | (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.898 | (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/render-mode.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.898 | (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.898 | (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/sdk.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.898 | (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/sdk.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.898 | (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/skills.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.898 | (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;
|
|
@@ -7562,8 +7562,8 @@ var init_registry = __esm({
|
|
|
7562
7562
|
range: ">=4.0.0",
|
|
7563
7563
|
coverage: 0.93,
|
|
7564
7564
|
note: "native-seam only \u2014 the real 5.x Slider, StepMarker overlay, limits and defaults run from the bundle over the RNCSlider component view (engine canvas slider). drag values clamp to lower/upper limits and report through the platform event (onRNCSliderValueChange on iOS, onChange with fromUser on android); inverted mirrors like the native scaleX(-1) transform. vertical is a matched no-op (unread by iOS and android upstream).",
|
|
7565
|
-
working: "real upstream Slider JS from the bundle, value, minimumValue, maximumValue, step, onValueChange, onSlidingStart, onSlidingComplete, disabled (including accessibilityState derivation), inverted, minimumTrackTintColor, maximumTrackTintColor, thumbTintColor, lowerLimit, upperLimit, testID, StepMarker, renderStepNumber",
|
|
7566
|
-
missing: "thumbImage / minimumTrackImage / maximumTrackImage / trackImage / thumbSize custom visuals,
|
|
7565
|
+
working: "real upstream Slider JS from the bundle, value, minimumValue, maximumValue, step, onValueChange, onSlidingStart, onSlidingComplete, disabled (including accessibilityState derivation), inverted, minimumTrackTintColor, maximumTrackTintColor, thumbTintColor, lowerLimit, upperLimit, tapToSeek on iOS, testID, StepMarker, renderStepNumber",
|
|
7566
|
+
missing: "thumbImage / minimumTrackImage / maximumTrackImage / trackImage / thumbSize custom visuals, VoiceOver directional step rounding"
|
|
7567
7567
|
}
|
|
7568
7568
|
]
|
|
7569
7569
|
},
|
|
@@ -53593,10 +53593,10 @@ function resolveDriverHeadless(args, driverId) {
|
|
|
53593
53593
|
function normalizeKnownTarget(target) {
|
|
53594
53594
|
return target.trim();
|
|
53595
53595
|
}
|
|
53596
|
-
async function ensureBridgeForOpen(preferredPort, explicitPort = false, resources) {
|
|
53596
|
+
async function ensureBridgeForOpen(preferredPort, explicitPort = false, resources, runtimeSource = "bridge") {
|
|
53597
53597
|
const lock = readDaemonLockfile();
|
|
53598
53598
|
assertExplicitBridgeLock(preferredPort, explicitPort, lock);
|
|
53599
|
-
await ensureRuntimeForOpen();
|
|
53599
|
+
if (runtimeSource === "bridge") await ensureRuntimeForOpen();
|
|
53600
53600
|
const preferredWorld = worldForBridgePort(preferredPort);
|
|
53601
53601
|
if ((explicitPort || preferredWorld !== null) && await canConnectToBridge(preferredPort, 2e3)) {
|
|
53602
53602
|
return preferredPort;
|
|
@@ -53614,7 +53614,17 @@ async function ensureBridgeForOpen(preferredPort, explicitPort = false, resource
|
|
|
53614
53614
|
`peach bridge lockfile is fresh (port ${lock.bridgePort}) but the bridge is not reachable. run \`peach daemon restart\` or \`peach daemon uninstall\`.`
|
|
53615
53615
|
);
|
|
53616
53616
|
}
|
|
53617
|
-
const
|
|
53617
|
+
const { executable, prefixArgs } = rnxSelfInvocation();
|
|
53618
|
+
const child = (0, import_node_child_process16.spawn)(
|
|
53619
|
+
executable,
|
|
53620
|
+
[...prefixArgs, "serve", "--quiet", "--port", String(preferredPort)],
|
|
53621
|
+
{
|
|
53622
|
+
detached: true,
|
|
53623
|
+
stdio: "ignore",
|
|
53624
|
+
// this bridge does not supply the shell, so it needs no runtime updates.
|
|
53625
|
+
env: runtimeSource === "external" ? { ...process.env, PEACH_UPDATE_CHECK: "off" } : process.env
|
|
53626
|
+
}
|
|
53627
|
+
);
|
|
53618
53628
|
if (resources) {
|
|
53619
53629
|
resources.bridge = child;
|
|
53620
53630
|
resources.port = preferredPort;
|
|
@@ -53675,14 +53685,6 @@ async function ensureRuntimeForOpen() {
|
|
|
53675
53685
|
const { runRuntime: runRuntime2 } = await Promise.resolve().then(() => (init_runtime(), runtime_exports));
|
|
53676
53686
|
await runRuntime2(["install"], {});
|
|
53677
53687
|
}
|
|
53678
|
-
function spawnSootsim(args) {
|
|
53679
|
-
const { executable, prefixArgs } = rnxSelfInvocation();
|
|
53680
|
-
return (0, import_node_child_process16.spawn)(executable, [...prefixArgs, ...args], {
|
|
53681
|
-
detached: true,
|
|
53682
|
-
stdio: "ignore",
|
|
53683
|
-
env: process.env
|
|
53684
|
-
});
|
|
53685
|
-
}
|
|
53686
53688
|
function canConnectToBridge(port, timeoutMs) {
|
|
53687
53689
|
return new Promise((resolve10) => {
|
|
53688
53690
|
const ws = new import_ws4.WebSocket(`ws://127.0.0.1:${port}`, { handshakeTimeout: timeoutMs });
|
|
@@ -54629,7 +54631,8 @@ async function runOpenCommand(args, opts = {}) {
|
|
|
54629
54631
|
parsed.wsPort = await ensureBridgeForOpen(
|
|
54630
54632
|
parsed.wsPort,
|
|
54631
54633
|
parsed.explicitPort,
|
|
54632
|
-
opts.resources
|
|
54634
|
+
opts.resources,
|
|
54635
|
+
explicitBaseUrl && !configuredRuntimeVersion ? "external" : "bridge"
|
|
54633
54636
|
);
|
|
54634
54637
|
if (opts.resources) opts.resources.port = parsed.wsPort;
|
|
54635
54638
|
opts.signal?.throwIfAborted();
|
|
@@ -54740,10 +54743,7 @@ async function runOpenCommand(args, opts = {}) {
|
|
|
54740
54743
|
dotEnv
|
|
54741
54744
|
};
|
|
54742
54745
|
const selectedShellBaseUrl = configuredRuntimeVersion ? `http://localhost:${parsed.wsPort}/` : explicitBaseUrl || resolveShellBaseUrlForBridgePort(parsed.wsPort);
|
|
54743
|
-
const baseUrl = applyRuntimeGenerationOrigin(
|
|
54744
|
-
selectedShellBaseUrl,
|
|
54745
|
-
configuredRuntimeVersion
|
|
54746
|
-
);
|
|
54746
|
+
const baseUrl = explicitBaseUrl && !configuredRuntimeVersion ? selectedShellBaseUrl : applyRuntimeGenerationOrigin(selectedShellBaseUrl, configuredRuntimeVersion);
|
|
54747
54747
|
const hasExplicitBaseUrl = args.includes("--base-url");
|
|
54748
54748
|
printBridgeWorldNotice(parsed.wsPort, baseUrl);
|
|
54749
54749
|
const savedSimId = readCurrentSimId();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.898 | (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.898 | (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.898 | (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.898 | (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/swift.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.898 | (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/vite-swift.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.898 | (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/vite.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.898 | (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.898 | (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/kotlin/fork/NOTICE
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Peach's patched builds of JetBrains Compose Multiplatform UI and Skiko
|
|
2
2
|
|
|
3
3
|
This directory records modified Compose and Skiko builds under Apache License
|
|
4
|
-
2.0 (LICENSE), and modified Skia shaping and
|
|
4
|
+
2.0 (LICENSE), and modified Skia shaping, paragraph and raster units under BSD-3-Clause (SKIA_LICENSE).
|
|
5
5
|
|
|
6
6
|
- JetBrains/compose-multiplatform-core at tag v1.13.0-alpha01
|
|
7
7
|
(commit a9e47e8aa04c95cfe572ab4297c770f3cbfb234e), a fork of the Android
|
|
@@ -41,3 +41,8 @@ non-subpixel, non-linear shaping. The original run font retains its painting
|
|
|
41
41
|
size and metrics. Run.cpp uses Android inter-glyph spacing and caret boundaries. TextLine.cpp
|
|
42
42
|
trims line edges, and TextWrapper.cpp applies the same trimming before fitting
|
|
43
43
|
a line. These modified Skia units compile into the Skiko Wasm runtime.
|
|
44
|
+
|
|
45
|
+
The FreeType patch preserves explicit forced autohinting and disables implicit
|
|
46
|
+
autohinting, matching Android. The Wasm compiler uses Android text gamma 1.4
|
|
47
|
+
and contrast 0; the pinned surface and FreeType units replace their archive
|
|
48
|
+
counterparts. FreeType headers come from the same dependency revision as Skia.
|
package/kotlin/fork/README.md
CHANGED
|
@@ -16,6 +16,7 @@ Android behavior for the approved web differences and static text shaping below.
|
|
|
16
16
|
| Compose `ui-skiko` | `SkiaBackedPaint.nonAndroid.kt` | initial Miter join agrees with the backing paint and Android |
|
|
17
17
|
| Compose `ui-skiko` | `SkikoText.nonAndroid.kt`, `SkikoParagraphBuilder.nonAndroid.kt` | Android static advances and letter-spacing scale; Animated text retains fractional shaping |
|
|
18
18
|
| Skia shaper | `SkShaper_harfbuzz.cpp` | measurement-font copy truncates static shaping size; the painted run font retains the requested size |
|
|
19
|
+
| Skia raster | `SkFontHost_FreeType.cpp`, `SkFontHost_FreeType_common.cpp`, `SkSurface.cpp` | Android implicit autohinting policy and text gamma 1.4, contrast 0 |
|
|
19
20
|
| Skia paragraph | `Run.cpp`, `TextLine.cpp`, `TextWrapper.cpp` | Android inter-glyph spacing, caret boundaries and edge trimming before line fits |
|
|
20
21
|
| Compose `material3` | `PlatformDateFormat.web.kt` | timestamp formatting uses UTC, as Android does |
|
|
21
22
|
| Navigation `navigation-compose` | `DefaultNavTransitions.web.kt` | Android forward fades and predictive pop defaults |
|
|
@@ -32,10 +33,12 @@ this contract.
|
|
|
32
33
|
`fork.json` pins repositories, commits, patch hashes, JDK and Android tools.
|
|
33
34
|
Every changed upstream file carries a modification notice. `LICENSE` and
|
|
34
35
|
`NOTICE` travel with the patches. `SKIA_LICENSE` records the modified Skia units’ BSD license. `build.sh` builds the changed KLIBs and Skiko
|
|
35
|
-
runtime jar with the upstream Gradle builds on the Linux builder. The Skia shaping and
|
|
36
|
+
runtime jar with the upstream Gradle builds on the Linux builder. The Skia shaping, paragraph and raster
|
|
36
37
|
units are fetched at their pinned commit, patched, and compiled into Skiko; the linker
|
|
37
38
|
uses them instead of the same units in the pinned Skia archive. All other Skia
|
|
38
|
-
objects retain their upstream build.
|
|
39
|
+
objects retain their upstream build. FreeType headers match the pinned Skia DEPS revision;
|
|
40
|
+
the FreeType binary remains the archive version. Raster changes add no allocation
|
|
41
|
+
and retain the existing A8 preblend path. This adds no allocation beyond the existing
|
|
39
42
|
measurement-font copy, and truncates once per shaped font, outside the glyph loop.
|
|
40
43
|
Paragraph spacing adds constant arithmetic per glyph or cluster; line fits trim
|
|
41
44
|
the same edge half-spaces as completed lines, without allocation.
|
|
@@ -70,6 +73,8 @@ upstream issue names these hooks and the full guest regression vehicle.
|
|
|
70
73
|
The static shaping correction is measured against the original `textwidth`
|
|
71
74
|
fixture. The six original widths, twelve spacing assertions and the 162/164 px
|
|
72
75
|
wrapping threshold pass their paired Android controls. The body Range probe
|
|
73
|
-
retains its existing 0.00098 px difference.
|
|
76
|
+
retains its existing 0.00098 px difference. The original plain Month raster rows pass the strict 16/255 comparison in
|
|
77
|
+
the actual Kotlin app; the old frame fails the retained raster check. Other
|
|
78
|
+
pixel residuals, mixed-font bold
|
|
74
79
|
advances, the primary caret at a style boundary and Animated whole-width rounding
|
|
75
80
|
remain open in the lane plan. These corrections do not certify full text parity.
|
package/kotlin/fork/build.sh
CHANGED
|
@@ -129,6 +129,30 @@ rsync -a --include='*/' --include='*.h' --exclude='*' "${SOURCE}/src/" "${SKIKO_
|
|
|
129
129
|
cp "${SOURCE}/modules/skparagraph/src/Run.cpp" "${SKIKO_SOURCE}/skiko/src/nativeJsMain/cpp/AndroidParagraphRun.cpp"
|
|
130
130
|
cp "${SOURCE}/modules/skparagraph/src/TextLine.cpp" "${SKIKO_SOURCE}/skiko/src/nativeJsMain/cpp/AndroidParagraphTextLine.cpp"
|
|
131
131
|
cp "${SOURCE}/modules/skparagraph/src/TextWrapper.cpp" "${SKIKO_SOURCE}/skiko/src/nativeJsMain/cpp/AndroidParagraphTextWrapper.cpp"
|
|
132
|
+
# the raster units use the same freetype headers as the pinned skia archive.
|
|
133
|
+
FREETYPE_SOURCE=${ROOT}/src/freetype
|
|
134
|
+
FREETYPE_REPOSITORY=$(field 'f.toolchain.freetypeHeaders.repository')
|
|
135
|
+
FREETYPE_COMMIT=$(field 'f.toolchain.freetypeHeaders.commit')
|
|
136
|
+
if ! grep -Fq "${FREETYPE_REPOSITORY}@${FREETYPE_COMMIT}" "${SOURCE}/DEPS"; then
|
|
137
|
+
echo "freetype headers differ from the pinned skia dependency" >&2
|
|
138
|
+
exit 2
|
|
139
|
+
fi
|
|
140
|
+
if [[ ! -d "${FREETYPE_SOURCE}/.git" ]]; then
|
|
141
|
+
git init -q "${FREETYPE_SOURCE}"
|
|
142
|
+
git -C "${FREETYPE_SOURCE}" remote add origin "${FREETYPE_REPOSITORY}"
|
|
143
|
+
fi
|
|
144
|
+
if ! git -C "${FREETYPE_SOURCE}" cat-file -e "${FREETYPE_COMMIT}^{commit}" 2>/dev/null; then
|
|
145
|
+
git -C "${FREETYPE_SOURCE}" fetch -q --depth 1 origin "${FREETYPE_COMMIT}"
|
|
146
|
+
fi
|
|
147
|
+
git -C "${FREETYPE_SOURCE}" checkout -q -f --detach "${FREETYPE_COMMIT}"
|
|
148
|
+
if [[ $(git -C "${FREETYPE_SOURCE}" rev-parse HEAD) != "${FREETYPE_COMMIT}" ]]; then
|
|
149
|
+
echo "freetype headers are not at ${FREETYPE_COMMIT}" >&2
|
|
150
|
+
exit 2
|
|
151
|
+
fi
|
|
152
|
+
rsync -a --delete "${FREETYPE_SOURCE}/include/" "${SKIKO_SOURCE}/skiko/src/nativeJsMain/cpp/freetype/"
|
|
153
|
+
cp "${SOURCE}/src/ports/SkFontHost_FreeType.cpp" "${SKIKO_SOURCE}/skiko/src/nativeJsMain/cpp/AndroidFreeType.cpp"
|
|
154
|
+
cp "${SOURCE}/src/ports/SkFontHost_FreeType_common.cpp" "${SKIKO_SOURCE}/skiko/src/nativeJsMain/cpp/AndroidFreeTypeCommon.cpp"
|
|
155
|
+
cp "${SOURCE}/src/image/SkSurface.cpp" "${SKIKO_SOURCE}/skiko/src/nativeJsMain/cpp/AndroidSurface.cpp"
|
|
132
156
|
(
|
|
133
157
|
cd "${SKIKO_SOURCE}/skiko"
|
|
134
158
|
gradle -Pdeploy.version=0.152.0-alpha02 -Pdeploy.release=true \
|
package/kotlin/fork/fork.json
CHANGED
|
@@ -8,6 +8,10 @@
|
|
|
8
8
|
"androidCommandLineTools": {
|
|
9
9
|
"url": "https://dl.google.com/android/repository/commandlinetools-linux-16111833_latest.zip",
|
|
10
10
|
"sha256": "0877a1d048fe4a24efe2eff536ca4223f7adeb58648bb81909d33c446918cfa8"
|
|
11
|
+
},
|
|
12
|
+
"freetypeHeaders": {
|
|
13
|
+
"repository": "https://chromium.googlesource.com/chromium/src/third_party/freetype2.git",
|
|
14
|
+
"commit": "264b5fbf5b912b39f98d038bf75d39be0a73f21b"
|
|
11
15
|
}
|
|
12
16
|
},
|
|
13
17
|
"upstreams": [
|
|
@@ -27,7 +31,7 @@
|
|
|
27
31
|
"tag": "v0.152.0-alpha02",
|
|
28
32
|
"commit": "96378296bb23c23c5f30cd2b0d42d6f8fdeff730",
|
|
29
33
|
"patch": "skiko-worker-clock.patch",
|
|
30
|
-
"patchSha256": "
|
|
34
|
+
"patchSha256": "44b38c49b9f8d860573ec43d54d7ce74c0ad36da59100ec482b46953d9d6ef81"
|
|
31
35
|
},
|
|
32
36
|
{
|
|
33
37
|
"name": "skia",
|
|
@@ -36,7 +40,7 @@
|
|
|
36
40
|
"tag": "m152-2ca5fe6a81",
|
|
37
41
|
"commit": "2ca5fe6a8170e2f55f519d9de083be4dccc06e70",
|
|
38
42
|
"patch": "skia-android-shaping.patch",
|
|
39
|
-
"patchSha256": "
|
|
43
|
+
"patchSha256": "b6293707ff832c77fa6016d7d1e469b7e3d24e31b7af7d70cdfb5ee1bc68ba7f"
|
|
40
44
|
}
|
|
41
45
|
]
|
|
42
46
|
}
|
|
@@ -102,7 +102,7 @@ diff --git a/modules/skparagraph/src/TextLine.cpp b/modules/skparagraph/src/Text
|
|
|
102
102
|
+++ b/modules/skparagraph/src/TextWrapper.cpp
|
|
103
103
|
@@ -58,12 +58,19 @@
|
|
104
104
|
fClip.startFrom(fEndLine.startCluster(), fEndLine.startPos());
|
|
105
|
-
|
|
105
|
+
|
|
106
106
|
LineBreakerWithLittleRounding breaker(maxWidth, applyRoundingHack);
|
|
107
107
|
+ // modified for the Android host: fit the same trimmed edges as TextLine.
|
|
108
108
|
+ const auto lineWidth = [endOfClusters](SkScalar width, const Cluster* first, const Cluster* last) {
|
|
@@ -142,3 +142,18 @@ diff --git a/modules/skparagraph/src/TextLine.cpp b/modules/skparagraph/src/Text
|
|
|
142
142
|
if (nextWordLength > maxWidth) {
|
|
143
143
|
if (nextNonBreakingSpace != nullptr) {
|
|
144
144
|
// We only get here if the non-breaking space improves our situation
|
|
145
|
+
diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp
|
|
146
|
+
--- a/src/ports/SkFontHost_FreeType.cpp
|
|
147
|
+
+++ b/src/ports/SkFontHost_FreeType.cpp
|
|
148
|
+
@@ -990,10 +990,9 @@
|
|
149
|
+
|
|
150
|
+
if (fRec.fFlags & SkScalerContext::kForceAutohinting_Flag) {
|
|
151
|
+
loadFlags |= FT_LOAD_FORCE_AUTOHINT;
|
|
152
|
+
-#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
|
|
153
|
+
} else {
|
|
154
|
+
+ // modified for the android host: disable implicit autohinting.
|
|
155
|
+
loadFlags |= FT_LOAD_NO_AUTOHINT;
|
|
156
|
+
-#endif
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if ((fRec.fFlags & SkScalerContext::kEmbeddedBitmapText_Flag) == 0) {
|
|
@@ -9,27 +9,27 @@ index 366ed37..d56c267 100644
|
|
|
9
9
|
+// the patch and upstream revision.
|
|
10
10
|
+
|
|
11
11
|
package org.jetbrains.skiko
|
|
12
|
-
|
|
12
|
+
|
|
13
13
|
import org.w3c.dom.HTMLElement
|
|
14
14
|
@@ -5,7 +10,7 @@ import org.w3c.dom.HTMLElement
|
|
15
15
|
internal actual inline fun <R> maybeSynchronized(lock: Any, block: () -> R): R =
|
|
16
16
|
block()
|
|
17
|
-
|
|
17
|
+
|
|
18
18
|
-actual fun currentNanoTime(): Long = currentNanoTimeWindowPerformance().toLong()
|
|
19
19
|
+actual fun currentNanoTime(): Long = currentNanoTimePerformance().toLong()
|
|
20
|
-
|
|
20
|
+
|
|
21
21
|
internal actual fun loadOpenGLLibrary() {
|
|
22
22
|
// Nothing to do here
|
|
23
23
|
@@ -15,8 +20,8 @@ internal actual fun loadAngleLibrary() {
|
|
24
24
|
// Nothing to do here
|
|
25
25
|
}
|
|
26
|
-
|
|
26
|
+
|
|
27
27
|
-private fun currentNanoTimeWindowPerformance() : Double =
|
|
28
28
|
+private fun currentNanoTimePerformance() : Double =
|
|
29
29
|
//language=JavaScript
|
|
30
30
|
- js("window.performance.now() * 1000000")
|
|
31
31
|
+ js("globalThis.performance.now() * 1000000")
|
|
32
|
-
|
|
32
|
+
|
|
33
33
|
annotation class WebImport(val name : String)
|
|
34
34
|
diff --git a/skiko/buildSrc/src/main/kotlin/OptimizeSkikoWasmTask.kt b/skiko/buildSrc/src/main/kotlin/OptimizeSkikoWasmTask.kt
|
|
35
35
|
--- a/skiko/buildSrc/src/main/kotlin/OptimizeSkikoWasmTask.kt
|
|
@@ -69,3 +69,25 @@ diff --git a/skiko/src/webMain/kotlin/org/jetbrains/skiko/OsArch.web.kt b/skiko/
|
|
|
69
69
|
-
|
|
70
70
|
+
|
|
71
71
|
actual val hostArch: Arch = Arch.Unknown
|
|
72
|
+
diff --git a/skiko/buildSrc/src/main/kotlin/tasks/configuration/WasmTasksConfiguration.kt b/skiko/buildSrc/src/main/kotlin/tasks/configuration/WasmTasksConfiguration.kt
|
|
73
|
+
--- a/skiko/buildSrc/src/main/kotlin/tasks/configuration/WasmTasksConfiguration.kt
|
|
74
|
+
+++ b/skiko/buildSrc/src/main/kotlin/tasks/configuration/WasmTasksConfiguration.kt
|
|
75
|
+
@@ -95,6 +95,7 @@
|
|
76
|
+
|
|
77
|
+
includeHeadersNonRecursive(project.projectDir.resolve("src/nativeJsMain/cpp"))
|
|
78
|
+
includeHeadersNonRecursive(project.projectDir.resolve("src/webMain/cpp"))
|
|
79
|
+
+ includeHeadersNonRecursive(project.projectDir.resolve("src/nativeJsMain/cpp/freetype"))
|
|
80
|
+
includeHeadersNonRecursive(project.projectDir.resolve("src/commonMain/cpp/common/include"))
|
|
81
|
+
if (isSideModule) {
|
|
82
|
+
val coreProjectDir = project.rootProject.projectDir
|
|
83
|
+
@@ -106,6 +107,10 @@
|
|
84
|
+
flags.set(
|
|
85
|
+
buildList {
|
|
86
|
+
addAll(skiaPreprocessorFlags(OS.Wasm, buildType))
|
|
87
|
+
+ // modified for the android host: use its text surface defaults.
|
|
88
|
+
+ add("-USK_GAMMA_SRGB")
|
|
89
|
+
+ add("-DSK_GAMMA_EXPONENT=1.4")
|
|
90
|
+
+ add("-DSK_GAMMA_CONTRAST=0.0")
|
|
91
|
+
addAll(buildType.clangFlags)
|
|
92
|
+
add("-fno-rtti")
|
|
93
|
+
add("-fno-exceptions")
|
package/kotlin/toolchain.json
CHANGED
|
@@ -325,9 +325,9 @@
|
|
|
325
325
|
"skiko": "0.152.0-alpha02"
|
|
326
326
|
},
|
|
327
327
|
"composeRuntime": {
|
|
328
|
-
"name": "skiko-wasm-0.152.0-alpha02-peach-
|
|
329
|
-
"url": "https://r2.rnxsim.com/peach-kotlin-fork/
|
|
330
|
-
"sha256": "
|
|
328
|
+
"name": "skiko-wasm-0.152.0-alpha02-peach-bf4a72712ff0.jar",
|
|
329
|
+
"url": "https://r2.rnxsim.com/peach-kotlin-fork/bf4a72712ff0ab67c5a5d28e058f6743497545392b593111a212e95b7435a339/skiko-wasm-0.152.0-alpha02.jar",
|
|
330
|
+
"sha256": "bf4a72712ff0ab67c5a5d28e058f6743497545392b593111a212e95b7435a339"
|
|
331
331
|
},
|
|
332
332
|
"composeJsLibraries": [
|
|
333
333
|
{
|