peachsim 0.1.2222 → 0.1.2223

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.
Files changed (88) hide show
  1. package/dist-lib/agent-daemon-client.cjs +1 -1
  2. package/dist-lib/agent-events.cjs +1 -1
  3. package/dist-lib/attached-projects.cjs +1 -1
  4. package/dist-lib/auth/shared-session.cjs +1 -1
  5. package/dist-lib/backend-origin.cjs +1 -1
  6. package/dist-lib/beta.cjs +1 -1
  7. package/dist-lib/beta.mjs +1 -1
  8. package/dist-lib/bridge-constants.cjs +1 -1
  9. package/dist-lib/bridge-contract-input.cjs +1 -1
  10. package/dist-lib/bridge-contract-input.mjs +1 -1
  11. package/dist-lib/bridge-contract.cjs +1 -1
  12. package/dist-lib/bridge-contract.mjs +1 -1
  13. package/dist-lib/bundle-channel.cjs +29 -13
  14. package/dist-lib/capture-contract.cjs +1 -1
  15. package/dist-lib/capture-contract.mjs +1 -1
  16. package/dist-lib/cloud-contract.cjs +1 -1
  17. package/dist-lib/cloud-contract.mjs +1 -1
  18. package/dist-lib/cloud-test-args.cjs +1 -1
  19. package/dist-lib/cloud-test-args.mjs +1 -1
  20. package/dist-lib/cloud.cjs +1 -1
  21. package/dist-lib/cloud.mjs +1 -1
  22. package/dist-lib/config.cjs +1 -1
  23. package/dist-lib/config.mjs +1 -1
  24. package/dist-lib/detox/index.cjs +2 -2
  25. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  26. package/dist-lib/expo-swift-bundle.cjs +27 -11
  27. package/dist-lib/expo-swift-metadata.cjs +1 -1
  28. package/dist-lib/expo-swift-metadata.mjs +1 -1
  29. package/dist-lib/home-paths.cjs +1 -1
  30. package/dist-lib/host/bridge-host.cjs +29 -13
  31. package/dist-lib/host/fetch-proxy-handler.cjs +4 -4
  32. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  33. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  34. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  35. package/dist-lib/host/websocket-proxy.cjs +1 -1
  36. package/dist-lib/index.cjs +4 -4
  37. package/dist-lib/jump-to-source-babel.cjs +1 -1
  38. package/dist-lib/jump-to-source-native.cjs +1 -1
  39. package/dist-lib/kotlin-host.cjs +1 -1
  40. package/dist-lib/menu.cjs +1 -1
  41. package/dist-lib/menu.mjs +1 -1
  42. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  43. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  44. package/dist-lib/metro-production-bundle.cjs +1 -1
  45. package/dist-lib/metro-production-bundle.mjs +1 -1
  46. package/dist-lib/metro.cjs +4 -4
  47. package/dist-lib/native-app-identity-project.cjs +2 -2
  48. package/dist-lib/native-app-identity-project.mjs +2 -2
  49. package/dist-lib/native-app-identity.cjs +1 -1
  50. package/dist-lib/native-app-identity.mjs +1 -1
  51. package/dist-lib/native-firebase-metadata.cjs +1 -1
  52. package/dist-lib/native-firebase-metadata.mjs +1 -1
  53. package/dist-lib/pdfium-raster.cjs +1 -1
  54. package/dist-lib/pdfium-raster.mjs +1 -1
  55. package/dist-lib/plist.cjs +1 -1
  56. package/dist-lib/plist.mjs +1 -1
  57. package/dist-lib/profiles.cjs +1 -1
  58. package/dist-lib/public-brand.cjs +1 -1
  59. package/dist-lib/public-origins-lib-esm.json +24 -24
  60. package/dist-lib/public-origins-lib.json +53 -53
  61. package/dist-lib/react-native-host-modules.cjs +1 -1
  62. package/dist-lib/react-native-host-modules.mjs +1 -1
  63. package/dist-lib/reap-browser.cjs +1 -1
  64. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  65. package/dist-lib/sdk.cjs +1 -1
  66. package/dist-lib/sdk.mjs +1 -1
  67. package/dist-lib/skills.cjs +29 -13
  68. package/dist-lib/swift-compile.cjs +24 -8
  69. package/dist-lib/swift-compile.mjs +24 -8
  70. package/dist-lib/swift-package.cjs +1 -1
  71. package/dist-lib/swift-package.mjs +1 -1
  72. package/dist-lib/swift-submit.cjs +1 -1
  73. package/dist-lib/swift-submit.mjs +1 -1
  74. package/dist-lib/swift-toolchain.cjs +1 -1
  75. package/dist-lib/swift.cjs +1 -1
  76. package/dist-lib/vite-swift.cjs +25 -9
  77. package/dist-lib/vite.cjs +4 -4
  78. package/dist-lib/worklet-executable.cjs +1 -1
  79. package/dist-lib/worklet-executable.mjs +1 -1
  80. package/dist-types/packages/peach-compat/src/stubs/native-seams/react-native-cookies.d.ts +2 -1
  81. package/dist-types/packages/peach-globals/src/browser-object-url.d.ts +10 -0
  82. package/package.json +1 -1
  83. package/runtime-companion.json +1 -1
  84. package/sdk/ios/System/Library/Frameworks/UIKit.framework/Headers/UISegmentedControl.h +1 -1
  85. package/sdk/ios/System/Library/Frameworks/UIKit.framework/Headers/UITabBar.h +1 -1
  86. package/src/conformance-pixel-comparison.ts +16 -3
  87. package/src/swift-compile.ts +4 -4
  88. package/src/swift-root-lock.ts +27 -4
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2222 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2223 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -11166,6 +11166,7 @@ var import_node_fs22 = require("node:fs");
11166
11166
  var import_node_os10 = require("node:os");
11167
11167
  var import_node_path23 = __toESM(require("node:path"), 1);
11168
11168
  var POLL_MS = 250;
11169
+ var INSPECT_ATTEMPTS = 5;
11169
11170
  var START_TOLERANCE_MS = 2e3;
11170
11171
  function errorCode(error) {
11171
11172
  return error instanceof Error && "code" in error && typeof error.code === "string" ? error.code : void 0;
@@ -11179,6 +11180,17 @@ function processTable(pid) {
11179
11180
  );
11180
11181
  }
11181
11182
  }
11183
+ async function processTableWithRetry(pid, signal) {
11184
+ for (let attempt = 1; ; attempt++) {
11185
+ try {
11186
+ return processTable(pid);
11187
+ } catch (error) {
11188
+ if (attempt >= INSPECT_ATTEMPTS) throw error;
11189
+ await pause(POLL_MS * attempt, signal);
11190
+ signal?.throwIfAborted();
11191
+ }
11192
+ }
11193
+ }
11182
11194
  function sameProcess(row, identity) {
11183
11195
  return row.pid === identity.pid && Math.abs(row.start - identity.start) <= START_TOLERANCE_MS;
11184
11196
  }
@@ -11248,7 +11260,11 @@ async function withSwiftRootLock(root, work, signal, wait = true) {
11248
11260
  );
11249
11261
  (0, import_node_fs22.mkdirSync)(directory, { recursive: true });
11250
11262
  const token = (0, import_node_crypto12.randomUUID)();
11251
- const owner = JSON.stringify(ownIdentity(process.pid));
11263
+ const ownRow = (await processTableWithRetry(process.pid, signal)).find(
11264
+ (candidate) => candidate.pid === process.pid && !candidate.zombie
11265
+ );
11266
+ if (!ownRow) throw new Error(`swift root lock cannot find process ${process.pid}`);
11267
+ const owner = JSON.stringify({ pid: process.pid, start: ownRow.start });
11252
11268
  const pending = import_node_path23.default.join(directory, `pending.${token}`);
11253
11269
  let held = 0;
11254
11270
  for (; ; ) {
@@ -11257,15 +11273,15 @@ async function withSwiftRootLock(root, work, signal, wait = true) {
11257
11273
  const current = newest > 0 ? readGeneration(directory, newest) : null;
11258
11274
  if (newest > 0 && !current) continue;
11259
11275
  if (current && !current.released) {
11260
- const owner2 = processTable(current.holder.pid);
11261
- if (owner2.some((row) => !row.zombie && sameProcess(row, current.holder))) {
11276
+ const holder = await processTableWithRetry(current.holder.pid, signal);
11277
+ if (holder.some((row) => !row.zombie && sameProcess(row, current.holder))) {
11262
11278
  if (!wait) return void 0;
11263
11279
  await pause(POLL_MS, signal);
11264
11280
  continue;
11265
11281
  }
11266
11282
  const children2 = readChildren(directory, newest);
11267
11283
  if (children2.length) {
11268
- const table = processTable();
11284
+ const table = await processTableWithRetry(void 0, signal);
11269
11285
  if (children2.some((child) => groupAlive(table, child))) {
11270
11286
  if (!wait) return void 0;
11271
11287
  await pause(POLL_MS, signal);
@@ -12623,7 +12639,7 @@ var darwinRecordsRegion = (quoted) => quoted.length ? ["-Wl,--start-lib", ...quo
12623
12639
  var REACTOR_FLAG = '"-Xclang-linker", "-mexec-model=reactor",\n';
12624
12640
  var MULTI_MANIFEST_VERSION = 68;
12625
12641
  var SWIFT_HEADER_PRODUCTS_TARGET = "PeachHeaderProducts";
12626
- var compilerSourceDigest = true ? "eba60b7a2e9485f928a6ec2e544e10d84b2b33430be66b9e069c9797a927af86" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
12642
+ var compilerSourceDigest = true ? "ae9e08389e6ab1901846342a7b347d7c10f8074172cf5d4d6505f7e955879ad4" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
12627
12643
  function swiftArtifactHash(input, release, moduleRoot) {
12628
12644
  const hash = (0, import_node_crypto13.createHash)("sha256");
12629
12645
  hash.update(`swift-compile
@@ -15334,8 +15350,8 @@ ${swiftProjectFilesProblems(input.projectFiles).join("\n")}`
15334
15350
  const moduleName = swiftTargetModuleName(name2);
15335
15351
  const originalMap = originalMaps.get(moduleName);
15336
15352
  const stagedMap = sourceModuleMaps.get(moduleName);
15337
- const originalPath = originalMap ? import_node_path27.default.join(layout2.root, originalMap) : stagedMap?.path;
15338
- const originalContents = originalMap ? input.files[originalMap] : stagedMap?.contents;
15353
+ const originalPath = stagedMap?.path ?? (originalMap ? import_node_path27.default.join(layout2.root, originalMap) : void 0);
15354
+ const originalContents = stagedMap?.contents ?? (originalMap && input.files[originalMap]);
15339
15355
  const originalTokens = originalContents ? moduleMapTokens(originalContents) : [];
15340
15356
  if (originalPath && originalTokens.some(
15341
15357
  (token, index) => token === "module" && (originalTokens[index + 1] === "Swift" || originalTokens[index + 1] === `${moduleName}.Swift`)
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2222 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2223 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/swift-compile.ts
4
4
  import {
@@ -11145,6 +11145,7 @@ import {
11145
11145
  import { homedir as homedir2 } from "node:os";
11146
11146
  import path23 from "node:path";
11147
11147
  var POLL_MS = 250;
11148
+ var INSPECT_ATTEMPTS = 5;
11148
11149
  var START_TOLERANCE_MS = 2e3;
11149
11150
  function errorCode(error) {
11150
11151
  return error instanceof Error && "code" in error && typeof error.code === "string" ? error.code : void 0;
@@ -11158,6 +11159,17 @@ function processTable(pid) {
11158
11159
  );
11159
11160
  }
11160
11161
  }
11162
+ async function processTableWithRetry(pid, signal) {
11163
+ for (let attempt = 1; ; attempt++) {
11164
+ try {
11165
+ return processTable(pid);
11166
+ } catch (error) {
11167
+ if (attempt >= INSPECT_ATTEMPTS) throw error;
11168
+ await pause(POLL_MS * attempt, signal);
11169
+ signal?.throwIfAborted();
11170
+ }
11171
+ }
11172
+ }
11161
11173
  function sameProcess(row, identity) {
11162
11174
  return row.pid === identity.pid && Math.abs(row.start - identity.start) <= START_TOLERANCE_MS;
11163
11175
  }
@@ -11227,7 +11239,11 @@ async function withSwiftRootLock(root, work, signal, wait = true) {
11227
11239
  );
11228
11240
  mkdirSync4(directory, { recursive: true });
11229
11241
  const token = randomUUID4();
11230
- const owner = JSON.stringify(ownIdentity(process.pid));
11242
+ const ownRow = (await processTableWithRetry(process.pid, signal)).find(
11243
+ (candidate) => candidate.pid === process.pid && !candidate.zombie
11244
+ );
11245
+ if (!ownRow) throw new Error(`swift root lock cannot find process ${process.pid}`);
11246
+ const owner = JSON.stringify({ pid: process.pid, start: ownRow.start });
11231
11247
  const pending = path23.join(directory, `pending.${token}`);
11232
11248
  let held = 0;
11233
11249
  for (; ; ) {
@@ -11236,15 +11252,15 @@ async function withSwiftRootLock(root, work, signal, wait = true) {
11236
11252
  const current = newest > 0 ? readGeneration(directory, newest) : null;
11237
11253
  if (newest > 0 && !current) continue;
11238
11254
  if (current && !current.released) {
11239
- const owner2 = processTable(current.holder.pid);
11240
- if (owner2.some((row) => !row.zombie && sameProcess(row, current.holder))) {
11255
+ const holder = await processTableWithRetry(current.holder.pid, signal);
11256
+ if (holder.some((row) => !row.zombie && sameProcess(row, current.holder))) {
11241
11257
  if (!wait) return void 0;
11242
11258
  await pause(POLL_MS, signal);
11243
11259
  continue;
11244
11260
  }
11245
11261
  const children2 = readChildren(directory, newest);
11246
11262
  if (children2.length) {
11247
- const table = processTable();
11263
+ const table = await processTableWithRetry(void 0, signal);
11248
11264
  if (children2.some((child) => groupAlive(table, child))) {
11249
11265
  if (!wait) return void 0;
11250
11266
  await pause(POLL_MS, signal);
@@ -12602,7 +12618,7 @@ var darwinRecordsRegion = (quoted) => quoted.length ? ["-Wl,--start-lib", ...quo
12602
12618
  var REACTOR_FLAG = '"-Xclang-linker", "-mexec-model=reactor",\n';
12603
12619
  var MULTI_MANIFEST_VERSION = 68;
12604
12620
  var SWIFT_HEADER_PRODUCTS_TARGET = "PeachHeaderProducts";
12605
- var compilerSourceDigest = true ? "eba60b7a2e9485f928a6ec2e544e10d84b2b33430be66b9e069c9797a927af86" : swiftCompilerSourceDigest(import.meta.dirname);
12621
+ var compilerSourceDigest = true ? "ae9e08389e6ab1901846342a7b347d7c10f8074172cf5d4d6505f7e955879ad4" : swiftCompilerSourceDigest(import.meta.dirname);
12606
12622
  function swiftArtifactHash(input, release, moduleRoot) {
12607
12623
  const hash = createHash13("sha256");
12608
12624
  hash.update(`swift-compile
@@ -15313,8 +15329,8 @@ ${swiftProjectFilesProblems(input.projectFiles).join("\n")}`
15313
15329
  const moduleName = swiftTargetModuleName(name2);
15314
15330
  const originalMap = originalMaps.get(moduleName);
15315
15331
  const stagedMap = sourceModuleMaps.get(moduleName);
15316
- const originalPath = originalMap ? path27.join(layout2.root, originalMap) : stagedMap?.path;
15317
- const originalContents = originalMap ? input.files[originalMap] : stagedMap?.contents;
15332
+ const originalPath = stagedMap?.path ?? (originalMap ? path27.join(layout2.root, originalMap) : void 0);
15333
+ const originalContents = stagedMap?.contents ?? (originalMap && input.files[originalMap]);
15318
15334
  const originalTokens = originalContents ? moduleMapTokens(originalContents) : [];
15319
15335
  if (originalPath && originalTokens.some(
15320
15336
  (token, index) => token === "module" && (originalTokens[index + 1] === "Swift" || originalTokens[index + 1] === `${moduleName}.Swift`)
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2222 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2223 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2222 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2223 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/swift-package.ts
4
4
  function swiftManifestSettings(target) {
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2222 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2223 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2222 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2223 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/is-record.ts
4
4
  function isRecord(value) {
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2222 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2223 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2222 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2223 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2222 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2223 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -16181,6 +16181,7 @@ var import_node_fs24 = require("node:fs");
16181
16181
  var import_node_os10 = require("node:os");
16182
16182
  var import_node_path23 = __toESM(require("node:path"), 1);
16183
16183
  var POLL_MS = 250;
16184
+ var INSPECT_ATTEMPTS = 5;
16184
16185
  var START_TOLERANCE_MS = 2e3;
16185
16186
  function errorCode(error) {
16186
16187
  return error instanceof Error && "code" in error && typeof error.code === "string" ? error.code : void 0;
@@ -16194,6 +16195,17 @@ function processTable(pid) {
16194
16195
  );
16195
16196
  }
16196
16197
  }
16198
+ async function processTableWithRetry(pid, signal) {
16199
+ for (let attempt = 1; ; attempt++) {
16200
+ try {
16201
+ return processTable(pid);
16202
+ } catch (error) {
16203
+ if (attempt >= INSPECT_ATTEMPTS) throw error;
16204
+ await pause(POLL_MS * attempt, signal);
16205
+ signal?.throwIfAborted();
16206
+ }
16207
+ }
16208
+ }
16197
16209
  function sameProcess(row, identity2) {
16198
16210
  return row.pid === identity2.pid && Math.abs(row.start - identity2.start) <= START_TOLERANCE_MS;
16199
16211
  }
@@ -16263,7 +16275,11 @@ async function withSwiftRootLock(root, work, signal, wait = true) {
16263
16275
  );
16264
16276
  (0, import_node_fs24.mkdirSync)(directory, { recursive: true });
16265
16277
  const token = (0, import_node_crypto12.randomUUID)();
16266
- const owner = JSON.stringify(ownIdentity(process.pid));
16278
+ const ownRow = (await processTableWithRetry(process.pid, signal)).find(
16279
+ (candidate) => candidate.pid === process.pid && !candidate.zombie
16280
+ );
16281
+ if (!ownRow) throw new Error(`swift root lock cannot find process ${process.pid}`);
16282
+ const owner = JSON.stringify({ pid: process.pid, start: ownRow.start });
16267
16283
  const pending = import_node_path23.default.join(directory, `pending.${token}`);
16268
16284
  let held = 0;
16269
16285
  for (; ; ) {
@@ -16272,15 +16288,15 @@ async function withSwiftRootLock(root, work, signal, wait = true) {
16272
16288
  const current = newest > 0 ? readGeneration(directory, newest) : null;
16273
16289
  if (newest > 0 && !current) continue;
16274
16290
  if (current && !current.released) {
16275
- const owner2 = processTable(current.holder.pid);
16276
- if (owner2.some((row) => !row.zombie && sameProcess(row, current.holder))) {
16291
+ const holder = await processTableWithRetry(current.holder.pid, signal);
16292
+ if (holder.some((row) => !row.zombie && sameProcess(row, current.holder))) {
16277
16293
  if (!wait) return void 0;
16278
16294
  await pause(POLL_MS, signal);
16279
16295
  continue;
16280
16296
  }
16281
16297
  const children2 = readChildren(directory, newest);
16282
16298
  if (children2.length) {
16283
- const table = processTable();
16299
+ const table = await processTableWithRetry(void 0, signal);
16284
16300
  if (children2.some((child) => groupAlive(table, child))) {
16285
16301
  if (!wait) return void 0;
16286
16302
  await pause(POLL_MS, signal);
@@ -17477,7 +17493,7 @@ var darwinRecordsRegion = (quoted) => quoted.length ? ["-Wl,--start-lib", ...quo
17477
17493
  var REACTOR_FLAG = '"-Xclang-linker", "-mexec-model=reactor",\n';
17478
17494
  var MULTI_MANIFEST_VERSION = 68;
17479
17495
  var SWIFT_HEADER_PRODUCTS_TARGET = "PeachHeaderProducts";
17480
- var compilerSourceDigest = true ? "eba60b7a2e9485f928a6ec2e544e10d84b2b33430be66b9e069c9797a927af86" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
17496
+ var compilerSourceDigest = true ? "ae9e08389e6ab1901846342a7b347d7c10f8074172cf5d4d6505f7e955879ad4" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
17481
17497
  function swiftArtifactHash(input, release, moduleRoot) {
17482
17498
  const hash = (0, import_node_crypto13.createHash)("sha256");
17483
17499
  hash.update(`swift-compile
@@ -20095,8 +20111,8 @@ ${swiftProjectFilesProblems(input.projectFiles).join("\n")}`
20095
20111
  const moduleName = swiftTargetModuleName(name3);
20096
20112
  const originalMap = originalMaps.get(moduleName);
20097
20113
  const stagedMap = sourceModuleMaps.get(moduleName);
20098
- const originalPath = originalMap ? import_node_path27.default.join(layout2.root, originalMap) : stagedMap?.path;
20099
- const originalContents = originalMap ? input.files[originalMap] : stagedMap?.contents;
20114
+ const originalPath = stagedMap?.path ?? (originalMap ? import_node_path27.default.join(layout2.root, originalMap) : void 0);
20115
+ const originalContents = stagedMap?.contents ?? (originalMap && input.files[originalMap]);
20100
20116
  const originalTokens = originalContents ? moduleMapTokens(originalContents) : [];
20101
20117
  if (originalPath && originalTokens.some(
20102
20118
  (token, index) => token === "module" && (originalTokens[index + 1] === "Swift" || originalTokens[index + 1] === `${moduleName}.Swift`)
@@ -30937,7 +30953,7 @@ function sourceClosureDigest(srcDir, entrypoints) {
30937
30953
  return hash.digest("hex");
30938
30954
  }
30939
30955
  var standinSourceDigest = (srcDir = __sootsim_import_meta_dirname) => sourceClosureDigest(srcDir, STANDIN_DIGEST_ENTRYPOINTS);
30940
- var STANDIN_SOURCE_DIGEST = true ? "1a62599378cd7cdf32385f588eb3f983f07ea222d145ec5b6dc34cce9104f46c" : standinSourceDigest();
30956
+ var STANDIN_SOURCE_DIGEST = true ? "967c1c2a3b66ac640e0162783ed9e21b09ff285f8e1f7d4327b70416699e14c8" : standinSourceDigest();
30941
30957
 
30942
30958
  // src/swift-standins.ts
30943
30959
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2222 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2223 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1072,7 +1072,7 @@ var init_src = __esm({
1072
1072
  var runtime_companion_default;
1073
1073
  var init_runtime_companion = __esm({
1074
1074
  "runtime-companion.json"() {
1075
- runtime_companion_default = { abi: 1, sha256: "6b48c0f7ae1d87e581af7cf445b2eaad2e1a4aa8fad23a00e1ae90916b2bbc02", file: "node/cli-6b48c0f7ae1d87e581af7cf445b2eaad2e1a4aa8fad23a00e1ae90916b2bbc02.cjs" };
1075
+ runtime_companion_default = { abi: 1, sha256: "ec96dcaf1a90c0295f3ea5be7ec176c04c0714e27eda99ca6b2ba0a2e3394fd0", file: "node/cli-ec96dcaf1a90c0295f3ea5be7ec176c04c0714e27eda99ca6b2ba0a2e3394fd0.cjs" };
1076
1076
  }
1077
1077
  });
1078
1078
 
@@ -3228,7 +3228,7 @@ function readIosSdkTree(root) {
3228
3228
 
3229
3229
  // src/swift-standin-digest.ts
3230
3230
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
3231
- var STANDIN_SOURCE_DIGEST = true ? "1a62599378cd7cdf32385f588eb3f983f07ea222d145ec5b6dc34cce9104f46c" : standinSourceDigest();
3231
+ var STANDIN_SOURCE_DIGEST = true ? "967c1c2a3b66ac640e0162783ed9e21b09ff285f8e1f7d4327b70416699e14c8" : standinSourceDigest();
3232
3232
 
3233
3233
  // src/expo-native-workspace.ts
3234
3234
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
@@ -6742,7 +6742,7 @@ var FOUNDATION_IMPLICIT_MODULES = [
6742
6742
  var FOUNDATION_IMPLICIT_FLAGS = FOUNDATION_IMPLICIT_MODULES.map(
6743
6743
  (module2) => `, "-Xfrontend", "-import-module", "-Xfrontend", "${module2}"`
6744
6744
  ).join("");
6745
- var compilerSourceDigest = true ? "eba60b7a2e9485f928a6ec2e544e10d84b2b33430be66b9e069c9797a927af86" : swiftCompilerSourceDigest2(__sootsim_import_meta_dirname);
6745
+ var compilerSourceDigest = true ? "ae9e08389e6ab1901846342a7b347d7c10f8074172cf5d4d6505f7e955879ad4" : swiftCompilerSourceDigest2(__sootsim_import_meta_dirname);
6746
6746
  var CORE_FOUNDATION_HANDLE_IMPORTS = [
6747
6747
  "CFAllocator",
6748
6748
  "CFArray",
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2222 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2223 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2222 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2223 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/worklet-executable.ts
4
4
  import { parse } from "acorn";
@@ -1,3 +1,4 @@
1
+ import { BrowserURL } from '../../../../peach-globals/src/browser-object-url.d.ts';
1
2
  import type { NativeEvaluationLease } from '../../../../peach-engine/src/guest/native-evaluation-lease.d.ts';
2
3
  export type NativeCookie = {
3
4
  name: string;
@@ -39,7 +40,7 @@ export declare const cookieStores: {
39
40
  readonly native: NativeCookieJar;
40
41
  readonly webKit: NativeCookieJar;
41
42
  };
42
- export declare function createCookieOperations(): {
43
+ export declare function createCookieOperations(URLConstructor: typeof BrowserURL): {
43
44
  storeResponseCookies: (store: CookieStore, url: string, headers: readonly string[]) => void;
44
45
  restore: (cookies: unknown) => CookieStore;
45
46
  cookiesMatching: (store: CookieStore, parsed: URL) => StoredCookie[];
@@ -0,0 +1,10 @@
1
+ export declare const BrowserURL: {
2
+ new (url: string | URL, base?: string | URL): URL;
3
+ prototype: URL;
4
+ canParse(url: string | URL, base?: string | URL): boolean;
5
+ createObjectURL(obj: Blob | MediaSource): string;
6
+ parse(url: string | URL, base?: string | URL): URL | null;
7
+ revokeObjectURL(url: string): void;
8
+ };
9
+ export declare const createBrowserObjectURL: (obj: Blob | MediaSource) => string;
10
+ export declare const revokeBrowserObjectURL: (url: string) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "peachsim",
3
- "version": "0.1.2222",
3
+ "version": "0.1.2223",
4
4
  "description": "Vite and Metro plugins, testing drivers, and SDK exports for peach.",
5
5
  "author": "Tamagui LLC",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -1 +1 @@
1
- {"abi":1,"sha256":"6b48c0f7ae1d87e581af7cf445b2eaad2e1a4aa8fad23a00e1ae90916b2bbc02","file":"node/cli-6b48c0f7ae1d87e581af7cf445b2eaad2e1a4aa8fad23a00e1ae90916b2bbc02.cjs"}
1
+ {"abi":1,"sha256":"ec96dcaf1a90c0295f3ea5be7ec176c04c0714e27eda99ca6b2ba0a2e3394fd0","file":"node/cli-ec96dcaf1a90c0295f3ea5be7ec176c04c0714e27eda99ca6b2ba0a2e3394fd0.cjs"}
@@ -40,7 +40,7 @@ typedef NS_ENUM(NSInteger, UISegmentedControlSegment) {
40
40
  @class UIImage, UIColor;
41
41
 
42
42
  UIKIT_EXTERN API_AVAILABLE(ios(2.0)) API_UNAVAILABLE(watchos) NS_SWIFT_UI_ACTOR
43
- @interface UISegmentedControl : UIControl <NSCoding>
43
+ PEACH_SWIFT_CLASS(UIKitCore) @interface UISegmentedControl : UIControl <NSCoding>
44
44
 
45
45
  - (instancetype)initWithFrame:(CGRect)frame NS_DESIGNATED_INITIALIZER;
46
46
  - (nullable instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;
@@ -22,7 +22,7 @@ NS_HEADER_AUDIT_BEGIN(nullability, sendability)
22
22
  @protocol UITabBarDelegate;
23
23
 
24
24
  UIKIT_EXTERN API_AVAILABLE(ios(2.0)) API_UNAVAILABLE(watchos) NS_SWIFT_UI_ACTOR
25
- @interface UITabBar : UIView
25
+ PEACH_SWIFT_CLASS(UIKitCore) @interface UITabBar : UIView
26
26
 
27
27
  @property(nullable, nonatomic, weak) id<UITabBarDelegate> delegate; // weak reference. default is nil
28
28
  @property(nullable, nonatomic, copy) NSArray<UITabBarItem *> *items; // get/set visible UITabBarItems. default is nil. changes not animated. shown in order
@@ -132,11 +132,24 @@ export function compareConformancePixels(options: {
132
132
  }
133
133
  if (identical) {
134
134
  options.diff?.fill(0)
135
+ const columns = Math.ceil(options.width)
136
+ const excludedColumns =
137
+ region.cornerRadius > 0
138
+ ? Math.min(
139
+ columns,
140
+ Math.ceil(region.cornerRadius) +
141
+ columns -
142
+ Math.max(0, Math.ceil(options.width - region.cornerRadius)),
143
+ )
144
+ : 0
135
145
  let totalPixels = 0
136
146
  for (let y = region.yStart; y < region.yEnd; y++) {
137
- for (let x = 0; x < options.width; x++) {
138
- if (!excluded(x, y)) totalPixels++
139
- }
147
+ const globalY = region.globalYStart + y
148
+ totalPixels +=
149
+ globalY < region.cornerRadius ||
150
+ globalY >= region.fullHeight - region.cornerRadius
151
+ ? columns - excludedColumns
152
+ : columns
140
153
  }
141
154
  return { differingPixels: 0, totalPixels }
142
155
  }
@@ -5337,10 +5337,10 @@ export function writeSwiftProject(
5337
5337
  const moduleName = swiftTargetModuleName(name)
5338
5338
  const originalMap = originalMaps.get(moduleName)
5339
5339
  const stagedMap = sourceModuleMaps.get(moduleName)
5340
- const originalPath = originalMap
5341
- ? path.join(layout.root, originalMap)
5342
- : stagedMap?.path
5343
- const originalContents = originalMap ? input.files[originalMap]! : stagedMap?.contents
5340
+ const originalPath =
5341
+ stagedMap?.path ?? (originalMap ? path.join(layout.root, originalMap) : undefined)
5342
+ const originalContents =
5343
+ stagedMap?.contents ?? (originalMap && input.files[originalMap])
5344
5344
  const originalTokens = originalContents ? moduleMapTokens(originalContents) : []
5345
5345
  if (
5346
5346
  originalPath &&
@@ -20,6 +20,7 @@ import { readProcessTable, type ProcessRow } from './process-table.ts'
20
20
  import type { Readable, Writable } from 'node:stream'
21
21
 
22
22
  const POLL_MS = 250
23
+ const INSPECT_ATTEMPTS = 5
23
24
  // ps derives a start time from the boot time, which drifts by a second or two
24
25
  // on linux; a reused pid starts later than this.
25
26
  const START_TOLERANCE_MS = 2_000
@@ -53,6 +54,24 @@ function processTable(pid?: number): ProcessRow[] {
53
54
  }
54
55
  }
55
56
 
57
+ // a loaded host can stall ps past its deadline once without the table being
58
+ // broken, and the lock only ever waits on that answer, so lock acquisition
59
+ // asks again before giving up.
60
+ async function processTableWithRetry(
61
+ pid: number | undefined,
62
+ signal: AbortSignal | undefined,
63
+ ): Promise<ProcessRow[]> {
64
+ for (let attempt = 1; ; attempt++) {
65
+ try {
66
+ return processTable(pid)
67
+ } catch (error) {
68
+ if (attempt >= INSPECT_ATTEMPTS) throw error
69
+ await pause(POLL_MS * attempt, signal)
70
+ signal?.throwIfAborted()
71
+ }
72
+ }
73
+ }
74
+
56
75
  function sameProcess(row: ProcessRow, identity: Identity): boolean {
57
76
  return (
58
77
  row.pid === identity.pid && Math.abs(row.start - identity.start) <= START_TOLERANCE_MS
@@ -204,7 +223,11 @@ export async function withSwiftRootLock<T>(
204
223
  )
205
224
  mkdirSync(directory, { recursive: true })
206
225
  const token = randomUUID()
207
- const owner = JSON.stringify(ownIdentity(process.pid))
226
+ const ownRow = (await processTableWithRetry(process.pid, signal)).find(
227
+ (candidate) => candidate.pid === process.pid && !candidate.zombie,
228
+ )
229
+ if (!ownRow) throw new Error(`swift root lock cannot find process ${process.pid}`)
230
+ const owner = JSON.stringify({ pid: process.pid, start: ownRow.start })
208
231
  const pending = path.join(directory, `pending.${token}`)
209
232
  let held = 0
210
233
  for (;;) {
@@ -213,15 +236,15 @@ export async function withSwiftRootLock<T>(
213
236
  const current = newest > 0 ? readGeneration(directory, newest) : null
214
237
  if (newest > 0 && !current) continue
215
238
  if (current && !current.released) {
216
- const owner = processTable(current.holder.pid)
217
- if (owner.some((row) => !row.zombie && sameProcess(row, current.holder))) {
239
+ const holder = await processTableWithRetry(current.holder.pid, signal)
240
+ if (holder.some((row) => !row.zombie && sameProcess(row, current.holder))) {
218
241
  if (!wait) return undefined
219
242
  await pause(POLL_MS, signal)
220
243
  continue
221
244
  }
222
245
  const children = readChildren(directory, newest)
223
246
  if (children.length) {
224
- const table = processTable()
247
+ const table = await processTableWithRetry(undefined, signal)
225
248
  if (children.some((child) => groupAlive(table, child))) {
226
249
  if (!wait) return undefined
227
250
  await pause(POLL_MS, signal)