peachsim 0.1.2218 → 0.1.2220

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/cli/commands/flow.ts +4 -0
  2. package/cli/maestro-compare.ts +37 -26
  3. package/cli/outbound-endpoints.ts +2 -2
  4. package/dist-lib/agent-daemon-client.cjs +1 -1
  5. package/dist-lib/agent-events.cjs +1 -1
  6. package/dist-lib/attached-projects.cjs +1 -1
  7. package/dist-lib/auth/shared-session.cjs +1 -1
  8. package/dist-lib/backend-origin.cjs +1 -1
  9. package/dist-lib/beta.cjs +1 -1
  10. package/dist-lib/beta.mjs +1 -1
  11. package/dist-lib/bridge-constants.cjs +1 -1
  12. package/dist-lib/bridge-contract-input.cjs +1 -1
  13. package/dist-lib/bridge-contract-input.mjs +1 -1
  14. package/dist-lib/bridge-contract.cjs +1 -1
  15. package/dist-lib/bridge-contract.mjs +1 -1
  16. package/dist-lib/bundle-channel.cjs +92 -22
  17. package/dist-lib/capture-contract.cjs +1 -1
  18. package/dist-lib/capture-contract.mjs +1 -1
  19. package/dist-lib/cloud-contract.cjs +1 -1
  20. package/dist-lib/cloud-contract.mjs +1 -1
  21. package/dist-lib/cloud-test-args.cjs +1 -1
  22. package/dist-lib/cloud-test-args.mjs +1 -1
  23. package/dist-lib/cloud.cjs +1 -1
  24. package/dist-lib/cloud.mjs +1 -1
  25. package/dist-lib/config.cjs +1 -1
  26. package/dist-lib/config.mjs +1 -1
  27. package/dist-lib/detox/index.cjs +1 -1
  28. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  29. package/dist-lib/expo-swift-bundle.cjs +89 -19
  30. package/dist-lib/expo-swift-metadata.cjs +1 -1
  31. package/dist-lib/expo-swift-metadata.mjs +1 -1
  32. package/dist-lib/home-paths.cjs +1 -1
  33. package/dist-lib/host/bridge-host.cjs +90 -20
  34. package/dist-lib/host/fetch-proxy-handler.cjs +3 -3
  35. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  36. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  37. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  38. package/dist-lib/host/websocket-proxy.cjs +1 -1
  39. package/dist-lib/index.cjs +3 -3
  40. package/dist-lib/jump-to-source-babel.cjs +1 -1
  41. package/dist-lib/jump-to-source-native.cjs +1 -1
  42. package/dist-lib/kotlin-host.cjs +1 -1
  43. package/dist-lib/menu.cjs +1 -1
  44. package/dist-lib/menu.mjs +1 -1
  45. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  46. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  47. package/dist-lib/metro-production-bundle.cjs +1 -1
  48. package/dist-lib/metro-production-bundle.mjs +1 -1
  49. package/dist-lib/metro.cjs +3 -3
  50. package/dist-lib/native-app-identity-project.cjs +2 -2
  51. package/dist-lib/native-app-identity-project.mjs +2 -2
  52. package/dist-lib/native-app-identity.cjs +1 -1
  53. package/dist-lib/native-app-identity.mjs +1 -1
  54. package/dist-lib/native-firebase-metadata.cjs +1 -1
  55. package/dist-lib/native-firebase-metadata.mjs +1 -1
  56. package/dist-lib/pdfium-raster.cjs +1 -1
  57. package/dist-lib/pdfium-raster.mjs +1 -1
  58. package/dist-lib/plist.cjs +1 -1
  59. package/dist-lib/plist.mjs +1 -1
  60. package/dist-lib/profiles.cjs +1 -1
  61. package/dist-lib/public-brand.cjs +1 -1
  62. package/dist-lib/public-origins-lib-esm.json +24 -24
  63. package/dist-lib/public-origins-lib.json +53 -53
  64. package/dist-lib/react-native-host-modules.cjs +1 -1
  65. package/dist-lib/react-native-host-modules.mjs +1 -1
  66. package/dist-lib/reap-browser.cjs +1 -1
  67. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  68. package/dist-lib/sdk.cjs +1 -1
  69. package/dist-lib/sdk.mjs +1 -1
  70. package/dist-lib/skills.cjs +90 -20
  71. package/dist-lib/swift-compile.cjs +14 -7
  72. package/dist-lib/swift-compile.mjs +14 -7
  73. package/dist-lib/swift-package.cjs +1 -1
  74. package/dist-lib/swift-package.mjs +1 -1
  75. package/dist-lib/swift-submit.cjs +1 -1
  76. package/dist-lib/swift-submit.mjs +1 -1
  77. package/dist-lib/swift-toolchain.cjs +1 -1
  78. package/dist-lib/swift.cjs +1 -1
  79. package/dist-lib/vite-swift.cjs +87 -17
  80. package/dist-lib/vite.cjs +3 -3
  81. package/dist-lib/worklet-executable.cjs +1 -1
  82. package/dist-lib/worklet-executable.mjs +1 -1
  83. package/kotlin/sdk.tar.gz +0 -0
  84. package/package.json +1 -1
  85. package/src/swift-guest-runtime-plan.ts +13 -5
  86. package/src/swift-host.ts +84 -2
  87. package/src/swift-packages.ts +19 -10
  88. package/src/swift-standins.ts +1 -1
@@ -62,6 +62,7 @@ const FLOW_BOOLEAN_FLAGS = [
62
62
  '--preview',
63
63
  '--preview-open',
64
64
  '--headless',
65
+ '--chromium',
65
66
  '--headed',
66
67
  '--proof',
67
68
  '--load-env',
@@ -289,6 +290,8 @@ options:
289
290
  browser sims default to isolated playwright
290
291
  --headless pass headless=true to the launch driver (useful
291
292
  with --driver playwright)
293
+ --chromium with --headless, render in plain Chromium instead of
294
+ the native host
292
295
  --headed force a fresh, VISIBLE window for this run (implies
293
296
  --new; overrides --headless). use when you want to
294
297
  watch the flow run live even if the current sim is
@@ -632,6 +635,7 @@ flow extension:
632
635
  if (args.includes('--headless') && !headed) {
633
636
  openArgs.push('--headless')
634
637
  }
638
+ if (args.includes('--chromium')) openArgs.push('--chromium')
635
639
  if (proofMode) openArgs.push('--proof')
636
640
  if (args.includes('--load-env')) openArgs.push('--load-env')
637
641
  // a resolved default is not an explicit pin: passing it as `port` would
@@ -494,35 +494,46 @@ function resample(src: PNG, width: number, height: number): PNG {
494
494
  function drawDownscaled(
495
495
  dst: PNG,
496
496
  src: PNG,
497
- factor: number,
497
+ factor: 1 | 2,
498
498
  left: number,
499
499
  keepRed: boolean,
500
500
  ) {
501
- const w = Math.floor(src.width / factor)
502
- const h = Math.floor(src.height / factor)
501
+ if (factor === 1) {
502
+ for (let y = 0; y < src.height; y++) {
503
+ const start = (y * dst.width + left) * 4
504
+ src.data.copy(dst.data, start, y * src.width * 4, (y + 1) * src.width * 4)
505
+ for (let i = start + 3; i < start + src.width * 4; i += 4) dst.data[i] = 255
506
+ }
507
+ return
508
+ }
509
+ const w = Math.floor(src.width / 2)
510
+ const h = Math.floor(src.height / 2)
511
+ const stride = src.width * 4
503
512
  for (let y = 0; y < h; y++) {
504
- for (let x = 0; x < w; x++) {
505
- let r = 0
506
- let g = 0
507
- let b = 0
508
- let red = false
509
- for (let dy = 0; dy < factor; dy++) {
510
- for (let dx = 0; dx < factor; dx++) {
511
- const i = ((y * factor + dy) * src.width + x * factor + dx) * 4
512
- const pr = src.data[i]!
513
- const pg = src.data[i + 1]!
514
- const pb = src.data[i + 2]!
515
- if (keepRed && pr === 255 && pg === 0 && pb === 0) red = true
516
- r += pr
517
- g += pg
518
- b += pb
519
- }
520
- }
521
- const n = factor * factor
522
- const o = (y * dst.width + left + x) * 4
523
- dst.data[o] = red ? 255 : Math.round(r / n)
524
- dst.data[o + 1] = red ? 0 : Math.round(g / n)
525
- dst.data[o + 2] = red ? 0 : Math.round(b / n)
513
+ let i = y * stride * 2
514
+ let o = (y * dst.width + left) * 4
515
+ for (let x = 0; x < w; x++, i += 8, o += 4) {
516
+ const r0 = src.data[i]!
517
+ const g0 = src.data[i + 1]!
518
+ const b0 = src.data[i + 2]!
519
+ const r1 = src.data[i + 4]!
520
+ const g1 = src.data[i + 5]!
521
+ const b1 = src.data[i + 6]!
522
+ const r2 = src.data[i + stride]!
523
+ const g2 = src.data[i + stride + 1]!
524
+ const b2 = src.data[i + stride + 2]!
525
+ const r3 = src.data[i + stride + 4]!
526
+ const g3 = src.data[i + stride + 5]!
527
+ const b3 = src.data[i + stride + 6]!
528
+ const red =
529
+ keepRed &&
530
+ ((r0 === 255 && g0 === 0 && b0 === 0) ||
531
+ (r1 === 255 && g1 === 0 && b1 === 0) ||
532
+ (r2 === 255 && g2 === 0 && b2 === 0) ||
533
+ (r3 === 255 && g3 === 0 && b3 === 0))
534
+ dst.data[o] = red ? 255 : Math.round((r0 + r1 + r2 + r3) / 4)
535
+ dst.data[o + 1] = red ? 0 : Math.round((g0 + g1 + g2 + g3) / 4)
536
+ dst.data[o + 2] = red ? 0 : Math.round((b0 + b1 + b2 + b3) / 4)
526
537
  dst.data[o + 3] = 255
527
538
  }
528
539
  }
@@ -562,7 +573,7 @@ export function compareScreens(
562
573
  }
563
574
  }
564
575
  const diffImage = new PNG({ width, height })
565
- const marks = new Uint8Array(width * height * 4)
576
+ const marks = diffImage.data
566
577
  // same scorer and settings as conformance proof. only the pass bar is the
567
578
  // cli's own (--threshold, default 0.5% against proof's 1%), and the masked
568
579
  // top band is excluded from scoring through the comparison region.
@@ -892,7 +892,7 @@ export const DECLARED_OUTBOUND_CALLS: Record<string, OutboundCallDeclaration> =
892
892
  category: 'cli_delivery',
893
893
  count: 1,
894
894
  },
895
- 'packages/peachsim/scripts/publish-cli-binaries.ts :: fetch :: `${url}?sha256=${digest}`':
895
+ 'packages/peachsim/scripts/publish-cli-binaries.ts :: fetch-alias :: `${url}?sha256=${digest}`':
896
896
  {
897
897
  category: 'cli_release_publish',
898
898
  count: 1,
@@ -1151,7 +1151,7 @@ function networkNames(
1151
1151
  exportedFetchAliasCache: Map<string, Set<string>>,
1152
1152
  ): NetworkNames {
1153
1153
  const names: NetworkNames = {
1154
- fetch: new Set(['fetch']),
1154
+ fetch: new Set(['fetch', 'fetchWithRetries']),
1155
1155
  httpClient: new Set(['http', 'https']),
1156
1156
  netClient: new Set(['net']),
1157
1157
  socket: new Set(),
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2218 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2220 | (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.2218 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2220 | (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.2218 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2220 | (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.2218 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2220 | (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.2218 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2220 | (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;
package/dist-lib/beta.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2218 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2220 | (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;
package/dist-lib/beta.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2218 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2220 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/beta.ts
4
4
  var IS_BETA = true;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2218 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2220 | (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.2218 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2220 | (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.2218 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2220 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/bridge-contract.ts
4
4
  var SIM_LONG_PRESS_MAX_MS = 5e3;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2218 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2220 | (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.2218 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2220 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/bridge-contract.ts
4
4
  var REFUSED_PERFORM_STEP_TYPES = [
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2218 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2220 | (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;
@@ -23065,6 +23065,9 @@ var init_swift_runtime_products = __esm({
23065
23065
  });
23066
23066
 
23067
23067
  // src/swift-guest-runtime-plan.ts
23068
+ function canonicalArchivePath(file) {
23069
+ return import_node_path29.default.join((0, import_node_fs30.realpathSync)(import_node_path29.default.dirname(file)), import_node_path29.default.basename(file));
23070
+ }
23068
23071
  function sdkArtifactBytes(root, artifact) {
23069
23072
  const file = import_node_path29.default.resolve(root, artifact.path);
23070
23073
  const linked = (0, import_node_fs30.readFileSync)(file);
@@ -23170,7 +23173,7 @@ function guestRuntimeInputIdentities(options) {
23170
23173
  ];
23171
23174
  add(file, JSON.stringify(identity2));
23172
23175
  if (artifact.kind !== "archive") continue;
23173
- for (const origin of origins.get(file) ?? [])
23176
+ for (const origin of origins.get(canonicalArchivePath(file)) ?? [])
23174
23177
  add(
23175
23178
  import_node_path29.default.resolve(origin.original),
23176
23179
  JSON.stringify([...identity2, origin.member, origin.ordinal])
@@ -23243,7 +23246,8 @@ function guestRuntimeProductsForInputs(options) {
23243
23246
  for (const { product, root } of options.products) {
23244
23247
  byId.set(product.id, product);
23245
23248
  for (const artifact of product.artifacts) {
23246
- const file = import_node_path29.default.resolve(root, artifact.path);
23249
+ const absolute = import_node_path29.default.resolve(root, artifact.path);
23250
+ const file = artifact.kind === "archive" ? canonicalArchivePath(absolute) : absolute;
23247
23251
  const owners = byFile.get(file) ?? [];
23248
23252
  owners.push({ id: product.id, artifact });
23249
23253
  byFile.set(file, owners);
@@ -23275,7 +23279,9 @@ function guestRuntimeProductsForInputs(options) {
23275
23279
  const file = original.get(import_node_path29.default.resolve(selection.artifact)) ?? import_node_path29.default.resolve(selection.artifact);
23276
23280
  const origin = origins.get(file);
23277
23281
  const archive = origin ? import_node_path29.default.resolve(origin.archive) : file;
23278
- const records = byFile.get(archive);
23282
+ const records = byFile.get(
23283
+ origin || selection.member !== null ? canonicalArchivePath(archive) : archive
23284
+ );
23279
23285
  if (frameworkObjects.has(file)) {
23280
23286
  if (frameworkId === null || !byId.has(frameworkId))
23281
23287
  throw new Error(`framework runtime product has no producer record ${file}`);
@@ -23387,8 +23393,9 @@ function guestSdkProductLinkArtifacts(products, sdk, inputs, linkedArchives, rew
23387
23393
  for (const { product, root } of products) {
23388
23394
  for (const artifact of product.artifacts) {
23389
23395
  const file = import_node_path29.default.resolve(root, artifact.path);
23390
- const objects = artifact.kind === "archive" ? origins.filter(
23391
- (origin) => import_node_path29.default.resolve(origin.archive) === file && (!selectedObjects || selectedObjects.has(
23396
+ const archive = artifact.kind === "archive" ? canonicalArchivePath(file) : null;
23397
+ const objects = archive !== null ? origins.filter(
23398
+ (origin) => import_node_path29.default.resolve(origin.archive) === archive && (!selectedObjects || selectedObjects.has(
23392
23399
  import_node_path29.default.resolve(rewritten.get(origin.original) ?? origin.original)
23393
23400
  ))
23394
23401
  ) : [];
@@ -31036,7 +31043,7 @@ int EXUpdatesApplyBSDiffPatch(const char * _Nonnull oldFilePath,
31036
31043
  REACTOR_FLAG = '"-Xclang-linker", "-mexec-model=reactor",\n';
31037
31044
  MULTI_MANIFEST_VERSION = 68;
31038
31045
  SWIFT_HEADER_PRODUCTS_TARGET = "PeachHeaderProducts";
31039
- compilerSourceDigest = true ? "94960e7e108c556e2184ef22baae1e061ca63c08c954c6ad0f677b524be5e117" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
31046
+ compilerSourceDigest = true ? "0a0bc1c871aee83ea273120655f55a43ddccde646478a452b4c73d2daefd58c3" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
31040
31047
  nativeCxxCompilerFlags = ["-fno-cxx-modules"];
31041
31048
  cFlagArray = (flags) => JSON.stringify(withoutGlogModuleMap(flags));
31042
31049
  cxxFlagArray = (flags) => JSON.stringify([...nativeCxxCompilerFlags, ...withoutGlogModuleMap(flags)]);
@@ -42468,17 +42475,17 @@ function remoteSwiftCheckouts(root) {
42468
42475
  import_node_fs69.default.mkdirSync(cacheDir(), { recursive: true });
42469
42476
  return import_node_path69.default.join(import_node_fs69.default.realpathSync(cacheDir()), "swift-packages", key2, "checkouts");
42470
42477
  }
42471
- function unlowerableSources(files2, target) {
42478
+ function unlowerableSources(files2, target, portable) {
42472
42479
  if (target.declaresWasiNativeSettings) return [];
42473
42480
  return [
42474
- ...files2.filter((file) => UNSUPPORTED_NATIVE.test(file)),
42481
+ ...portable.has(target.name) ? [] : files2.filter((file) => UNSUPPORTED_NATIVE.test(file)),
42475
42482
  ...files2.filter(isSwiftNativeTranslationUnit).filter((file) => swiftCTakesReturnAddress(import_node_fs69.default.readFileSync(file, "utf8")))
42476
42483
  ];
42477
42484
  }
42478
- function unloweredSources(files2, target) {
42485
+ function unloweredSources(files2, target, portable) {
42479
42486
  if (target.type !== "regular") return null;
42480
42487
  if (!files2.some(isSwiftNativeTranslationUnit)) return null;
42481
- const unlowered = unlowerableSources(files2, target);
42488
+ const unlowered = unlowerableSources(files2, target, portable);
42482
42489
  if (unlowered.length === 0) return null;
42483
42490
  const headers = import_node_path69.default.resolve(target.dir, target.publicHeadersPath);
42484
42491
  if (!files2.some((file) => file.startsWith(`${headers}${import_node_path69.default.sep}`) && file.endsWith(".h")))
@@ -42682,6 +42689,7 @@ async function resolveSwiftPackagesAsync(options) {
42682
42689
  function resolveSwiftPackages(options) {
42683
42690
  const { rootDir, resolved, products, localDirs } = options;
42684
42691
  const providedTargets = new Set(options.provided ?? []);
42692
+ const portableAssembly = options.portableAssembly ?? /* @__PURE__ */ new Set();
42685
42693
  const providedProducts = new Set(options.provided ?? []);
42686
42694
  const result = {
42687
42695
  sourceLinks: { targets: [], owners: [] },
@@ -42779,7 +42787,7 @@ function resolveSwiftPackages(options) {
42779
42787
  if (target.type === "macro") return preservePackage(pkg, [name3], "host");
42780
42788
  const files2 = target.type === "regular" || target.type === "system" ? swiftTargetFiles(pkg.manifest, target) : [];
42781
42789
  const gap = options.binaryGaps?.get(name3);
42782
- const unlowerable = unlowerableSources(files2, target);
42790
+ const unlowerable = unlowerableSources(files2, target, portableAssembly);
42783
42791
  const placeholder = placeholderPackage(pkg);
42784
42792
  const ownReason = target.type === "binary" ? `${name3} ${BINARY}${gap ? `; ${gap}` : ""}` : placeholder && gap ? `${name3} stands in as a placeholder (${placeholder}), and ${gap}` : target.type !== "regular" && target.type !== "system" ? `${name3} is a ${target.type} target` : unlowerable.length > 0 ? `${name3} has native sources with no wasm32 lowering: ${unlowerable.map((file) => import_node_path69.default.relative(pkg.manifest.dir, file)).join(", ")}${gap ? `; ${gap}` : ""}` : null;
42785
42793
  const reasons = target.dependencies.map((dependency) => {
@@ -42860,7 +42868,7 @@ function resolveSwiftPackages(options) {
42860
42868
  (file) => file.endsWith(".swift") && import_node_fs69.default.readFileSync(file, "utf8").trim() === ""
42861
42869
  ))
42862
42870
  return false;
42863
- if (unloweredSources(files2, target)) return false;
42871
+ if (unloweredSources(files2, target, portableAssembly)) return false;
42864
42872
  claimed.add(key2);
42865
42873
  providedTargets.delete(name3);
42866
42874
  for (const dependency of target.dependencies) {
@@ -42908,7 +42916,7 @@ function resolveSwiftPackages(options) {
42908
42916
  if (target.type === "executable") continue;
42909
42917
  const files2 = target.type === "regular" || target.type === "system" ? swiftTargetFiles(pkg.manifest, target) : [];
42910
42918
  const objc = target.type === "regular" && files2.some((file) => /\.(m|mm)$/.test(file));
42911
- const unlowered = unloweredSources(files2, target);
42919
+ const unlowered = unloweredSources(files2, target, portableAssembly);
42912
42920
  const gap = placeholderPackage(pkg);
42913
42921
  const sources = files2.filter((file) => file.endsWith(".swift"));
42914
42922
  const release = (setting) => setting.configuration !== "debug";
@@ -43241,7 +43249,7 @@ var init_swift_standin_digest = __esm({
43241
43249
  STANDIN_DIGEST_ENTRYPOINTS = ["swift-standins.ts", "swift-objc-compile.ts"];
43242
43250
  SPECIFIER = /from\s*['"]([^'"]+)['"]|import\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
43243
43251
  standinSourceDigest = (srcDir = __sootsim_import_meta_dirname) => sourceClosureDigest(srcDir, STANDIN_DIGEST_ENTRYPOINTS);
43244
- STANDIN_SOURCE_DIGEST = true ? "71bed308fc270bafd989236668c1e63cc7dd11ab7b6815686dd07fd9b846e738" : standinSourceDigest();
43252
+ STANDIN_SOURCE_DIGEST = true ? "c0f609da62368c513c186d23bc8aa8e450d27efae5b8c2e7cdf50d34fa734ff0" : standinSourceDigest();
43245
43253
  }
43246
43254
  });
43247
43255
 
@@ -45152,7 +45160,7 @@ function graphStandin(module2, graphs, values, wasm, binary2, toolchain, work, r
45152
45160
  }
45153
45161
  if (omit.size + plain.size + unobjc.size + trapped.size + unconformed.size + forced.size + nonfailable.size === before)
45154
45162
  throw new Error(
45155
- `its generated source does not typecheck: ${elsewhere.slice(0, 3).join("; ") || check2.stderr.trim().slice(0, 400)}`
45163
+ `its generated source does not typecheck: ${(elsewhere.length > 0 ? elsewhere : [...check2.stderr.matchAll(/^\S+?:\d+:\d+: error: .*$/gm)].map((line) => line[0].replace(/^[^:]*\//, ""))).slice(0, 3).join("; ") || check2.stderr.trim().slice(0, 400)}`
45156
45164
  );
45157
45165
  }
45158
45166
  }
@@ -48328,6 +48336,59 @@ function openXcodeProject(xcodeproj, target, moduleRoot, configuration, interfac
48328
48336
  });
48329
48337
  return root;
48330
48338
  }
48339
+ async function wasmPortableAssembly(binaries, toolchainBin, moduleRoot) {
48340
+ const assembly = binaries.filter(
48341
+ (binary2) => binary2.unloweredSources?.length && binary2.unloweredSources.every((file) => /\.(s|S)$/.test(file)) && binary2.publicHeaders !== void 0
48342
+ );
48343
+ if (assembly.length === 0) return /* @__PURE__ */ new Set();
48344
+ const sdk = swiftSdkPaths(moduleRoot, toolchainBin);
48345
+ const clang = import_node_path79.default.join(toolchainBin, "clang");
48346
+ const empty = (binary2, file) => {
48347
+ const source = import_node_path79.default.join(binary2.dir, file);
48348
+ const key2 = (0, import_node_crypto40.createHash)("sha256").update(
48349
+ JSON.stringify([
48350
+ clang,
48351
+ sdk.sysroot,
48352
+ sdk.cFlags,
48353
+ binary2.dir,
48354
+ binary2.publicHeaders
48355
+ ])
48356
+ ).update(import_node_fs80.default.readFileSync(source)).digest("hex");
48357
+ const known = emptyWasmAssembly.get(key2);
48358
+ if (known) return known;
48359
+ const result = new Promise(
48360
+ (resolve4) => (0, import_node_child_process42.execFile)(
48361
+ clang,
48362
+ [
48363
+ "-target",
48364
+ "wasm32-unknown-wasip1",
48365
+ "--sysroot",
48366
+ sdk.sysroot,
48367
+ ...sdk.cFlags,
48368
+ "-I",
48369
+ import_node_path79.default.join(binary2.dir, binary2.publicHeaders),
48370
+ "-I",
48371
+ import_node_path79.default.dirname(source),
48372
+ "-E",
48373
+ "-P",
48374
+ "-x",
48375
+ "assembler-with-cpp",
48376
+ source
48377
+ ],
48378
+ { maxBuffer: 64 * 1024 * 1024 },
48379
+ (error, stdout) => resolve4(!error && stdout.trim() === "")
48380
+ )
48381
+ );
48382
+ emptyWasmAssembly.set(key2, result);
48383
+ return result;
48384
+ };
48385
+ const portable = await Promise.all(
48386
+ assembly.map(
48387
+ async (binary2) => (await Promise.all(binary2.unloweredSources.map((file) => empty(binary2, file)))).every(Boolean) ? [binary2.target] : []
48388
+ )
48389
+ );
48390
+ return new Set(portable.flat());
48391
+ }
48331
48392
  async function swiftPackages(entry, app) {
48332
48393
  const stamp = (file) => import_node_fs80.default.existsSync(file) ? (0, import_node_crypto40.createHash)("sha256").update(import_node_fs80.default.readFileSync(file)).digest("hex") : null;
48333
48394
  const owners = [...app.frameworks, app].map((target) => ({
@@ -48392,7 +48453,14 @@ async function swiftPackages(entry, app) {
48392
48453
  entry.moduleRoot,
48393
48454
  import_node_path79.default.join(resolved.toolchainBin, "clang++")
48394
48455
  );
48395
- const cxxArtifacts = reached.filter(standinArtifact);
48456
+ const portableAssembly = await wasmPortableAssembly(
48457
+ reached,
48458
+ resolved.toolchainBin,
48459
+ entry.moduleRoot
48460
+ );
48461
+ const cxxArtifacts = reached.filter(
48462
+ (binary2) => standinArtifact(binary2) && !portableAssembly.has(binary2.target)
48463
+ );
48396
48464
  const generation = standinGenerationInputs(cxxArtifacts, toolchain, entry.behavior);
48397
48465
  if (cached2.standinKey !== generation) {
48398
48466
  const replaced = new Set(
@@ -48419,6 +48487,7 @@ async function swiftPackages(entry, app) {
48419
48487
  [...replaced].filter((target) => !built2.gaps.has(target))
48420
48488
  ),
48421
48489
  binaryGaps: built2.gaps,
48490
+ portableAssembly,
48422
48491
  owners
48423
48492
  });
48424
48493
  for (const target of new Set(built2.standins.map((standin) => standin.target)))
@@ -50202,7 +50271,7 @@ function scopedArtifact(project2, entry, moduleRoot, signal) {
50202
50271
  project2.building = { stamp, promise: fresh, signal };
50203
50272
  return fresh;
50204
50273
  }
50205
- var import_node_async_hooks, import_node_child_process42, import_node_crypto40, import_node_fs80, import_node_os17, import_node_path79, RESOURCE_PATH, ICU_PATH, SKIP_ROOT_DIRS, NATIVE_DESCRIPTOR, NATIVE_GLUE, SwiftMissingModulesError, sharedProjects, projectScope, projects, sharedSourceEntries, sourceEntries, sharedXcodeProjects, xcodeProjects, preparedScriptInputs, XCODE_APP_DIR, XCODE_FRAMEWORKS_DIR, XCODE_PACKAGES_DIR, layoutScope, HOSTED_LIMITS, LOCAL_LIMITS, inputLimits, RESOURCE_CONTENT_TYPES, API_GAP_PATTERNS, IOS_SDK_FRAMEWORKS;
50274
+ var import_node_async_hooks, import_node_child_process42, import_node_crypto40, import_node_fs80, import_node_os17, import_node_path79, RESOURCE_PATH, ICU_PATH, SKIP_ROOT_DIRS, NATIVE_DESCRIPTOR, NATIVE_GLUE, SwiftMissingModulesError, sharedProjects, projectScope, projects, sharedSourceEntries, sourceEntries, sharedXcodeProjects, xcodeProjects, preparedScriptInputs, emptyWasmAssembly, XCODE_APP_DIR, XCODE_FRAMEWORKS_DIR, XCODE_PACKAGES_DIR, layoutScope, HOSTED_LIMITS, LOCAL_LIMITS, inputLimits, RESOURCE_CONTENT_TYPES, API_GAP_PATTERNS, IOS_SDK_FRAMEWORKS;
50206
50275
  var init_swift_host = __esm({
50207
50276
  "src/swift-host.ts"() {
50208
50277
  "use strict";
@@ -50255,6 +50324,7 @@ var init_swift_host = __esm({
50255
50324
  sharedXcodeProjects = /* @__PURE__ */ new Map();
50256
50325
  xcodeProjects = () => projectScope.getStore()?.xcodeProjects ?? sharedXcodeProjects;
50257
50326
  preparedScriptInputs = /* @__PURE__ */ new Set();
50327
+ emptyWasmAssembly = /* @__PURE__ */ new Map();
50258
50328
  XCODE_APP_DIR = "__app__";
50259
50329
  XCODE_FRAMEWORKS_DIR = "__frameworks__";
50260
50330
  XCODE_PACKAGES_DIR = SWIFT_REMOTE_PACKAGES_DIR;
@@ -55677,7 +55747,7 @@ var init_nitro_superset = __esm({
55677
55747
  init_nitroContract();
55678
55748
  init_swift_standin_digest();
55679
55749
  NITRO_SUPERSET_ENTRY_NAME = "superset";
55680
- NITRO_COMPILER_DIGEST = true ? "3fcb740b63ae9c9d23fbeade5a1c885e78eeb419a14cc70b6c3590bfcef9ed44" : nitroCompilerSourceDigest(__sootsim_import_meta_dirname, STANDIN_SOURCE_DIGEST2);
55750
+ NITRO_COMPILER_DIGEST = true ? "a16afc2e6e3c68812b9d48ad1c7be8c9d89cfebcf46e269779f2890053244d70" : nitroCompilerSourceDigest(__sootsim_import_meta_dirname, STANDIN_SOURCE_DIGEST2);
55681
55751
  nitroSupersetLock = parseLock(nitro_superset_lock_default);
55682
55752
  nitroSupersetKey = (inputs) => nativeEntryKey({ ...inputs, compiler: NITRO_COMPILER_DIGEST });
55683
55753
  published = /* @__PURE__ */ new Map();
@@ -56902,7 +56972,7 @@ var init_expo_native_compiler_digest = __esm({
56902
56972
 
56903
56973
  // src/expo-native-prebuilt.ts
56904
56974
  function expoNativeCompilerDigestValue() {
56905
- return true ? "f954fe4bf615d9d3eb0ee8bac458984949b8df39ee8fd6fc8dcfcd9f0cb4a7f1" : expoNativeCompilerDigest(__sootsim_import_meta_dirname);
56975
+ return true ? "8e765b5dfd0ec93d9027f9d10365ed11f7d85a195d0a888dd1fb76b99195ff2e" : expoNativeCompilerDigest(__sootsim_import_meta_dirname);
56906
56976
  }
56907
56977
  function readSources(value) {
56908
56978
  const sources = isRecord(value) ? value.sources : null;
@@ -68383,7 +68453,7 @@ ${await response.text()}`
68383
68453
  return { platforms: snapshots };
68384
68454
  }
68385
68455
  async function snapshotOneProductionBundle(projectRoot, entryFile, env = {}, { runtimeExecutable = process.execPath, platforms: platforms2 = ["ios", "android"] } = {}) {
68386
- const { execFile: execFile20 } = await import("node:child_process");
68456
+ const { execFile: execFile21 } = await import("node:child_process");
68387
68457
  const { mkdtemp, readFile: readFile3, rm: rm2 } = await import("node:fs/promises");
68388
68458
  const { tmpdir: tmpdir3 } = await import("node:os");
68389
68459
  const { promisify: promisify20 } = await import("node:util");
@@ -68392,7 +68462,7 @@ async function snapshotOneProductionBundle(projectRoot, entryFile, env = {}, { r
68392
68462
  for (const platform2 of platforms2) {
68393
68463
  const out = await mkdtemp((0, import_node_path111.join)(tmpdir3(), "peach-production-bundle-"));
68394
68464
  try {
68395
- await promisify20(execFile20)(
68465
+ await promisify20(execFile21)(
68396
68466
  runtimeExecutable,
68397
68467
  [
68398
68468
  (0, import_node_path111.join)(projectRoot, "node_modules/.bin/react-native"),
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2218 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2220 | (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.2218 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2220 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/capture-contract.ts
4
4
  var RNX_SCREEN_CAPTURE_VERSION = 1;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2218 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2220 | (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.2218 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2220 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/cloud-contract.ts
4
4
  var RNX_CLOUD_MAX_ARTIFACT_BYTES = 40761776;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2218 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2220 | (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.2218 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2220 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/cloud-test-args.ts
4
4
  var CLOUD_TEST_ARGS_MAX_COUNT = 32;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2218 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2220 | (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.2218 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2220 | (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);
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2218 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2220 | (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.2218 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2220 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // ../contrast-runtime-delivery/src/version.ts
4
4
  function isValidRuntimeVersion(value) {
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2218 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2220 | (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.2218 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2220 | (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;