peachsim 0.1.1406 → 0.1.1463

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 (149) hide show
  1. package/LICENSE +8 -4
  2. package/README.md +22 -2
  3. package/cli/app-fonts.ts +50 -44
  4. package/cli/bin.ts +5 -4
  5. package/cli/bridge-diagnostics.ts +5 -0
  6. package/cli/bridge-flow-runner.ts +21 -13
  7. package/cli/cloud-client.ts +4 -3
  8. package/cli/commands/control.ts +155 -123
  9. package/cli/commands/daemon-mac-app.ts +3 -3
  10. package/cli/commands/daemon.ts +2 -2
  11. package/cli/commands/do-chain.ts +9 -2
  12. package/cli/commands/electron.ts +4 -1
  13. package/cli/commands/inspect/core.ts +1 -1
  14. package/cli/commands/inspect/settle.ts +19 -7
  15. package/cli/commands/inspect/settling.ts +92 -56
  16. package/cli/commands/inspect/wait-idle.ts +21 -9
  17. package/cli/commands/inspect/wait-ready.ts +22 -8
  18. package/cli/commands/inspect.ts +101 -134
  19. package/cli/commands/setup.ts +26 -16
  20. package/cli/commands/upgrade.ts +53 -9
  21. package/cli/desktop-companion.ts +1 -1
  22. package/cli/drivers/playwright-sim-host.ts +22 -13
  23. package/cli/drivers/playwright.ts +3 -3
  24. package/cli/main.ts +14 -5
  25. package/cli/outbound-endpoints.ts +1 -9
  26. package/detox/index.ts +6 -1
  27. package/dist-lib/agent-daemon-client.cjs +1 -1
  28. package/dist-lib/agent-events.cjs +1 -1
  29. package/dist-lib/attached-projects.cjs +1 -1
  30. package/dist-lib/auth/shared-session.cjs +1 -1
  31. package/dist-lib/backend-origin.cjs +1 -1
  32. package/dist-lib/beta.cjs +1 -1
  33. package/dist-lib/beta.mjs +1 -1
  34. package/dist-lib/bridge-constants.cjs +1 -1
  35. package/dist-lib/bridge-contract-input.cjs +1 -1
  36. package/dist-lib/bridge-contract-input.mjs +1 -1
  37. package/dist-lib/bridge-contract.cjs +3 -3
  38. package/dist-lib/bridge-contract.mjs +3 -3
  39. package/dist-lib/bundle-channel.cjs +322 -274
  40. package/dist-lib/capture-contract.cjs +1 -1
  41. package/dist-lib/capture-contract.mjs +1 -1
  42. package/dist-lib/cloud-contract.cjs +1 -1
  43. package/dist-lib/cloud-contract.mjs +1 -1
  44. package/dist-lib/cloud-test-args.cjs +1 -1
  45. package/dist-lib/cloud-test-args.mjs +1 -1
  46. package/dist-lib/cloud.cjs +1 -1
  47. package/dist-lib/cloud.mjs +1 -1
  48. package/dist-lib/config.cjs +1 -1
  49. package/dist-lib/config.mjs +1 -1
  50. package/dist-lib/detox/index.cjs +322 -45
  51. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  52. package/dist-lib/expo-swift-bundle.cjs +69 -33
  53. package/dist-lib/expo-swift-metadata.cjs +1 -1
  54. package/dist-lib/expo-swift-metadata.mjs +1 -1
  55. package/dist-lib/home-paths.cjs +1 -1
  56. package/dist-lib/host/bridge-host.cjs +3650 -3528
  57. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  58. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  59. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  60. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  61. package/dist-lib/host/websocket-proxy.cjs +1 -1
  62. package/dist-lib/index.cjs +327 -123
  63. package/dist-lib/jump-to-source-babel.cjs +1 -1
  64. package/dist-lib/jump-to-source-native.cjs +1 -1
  65. package/dist-lib/kotlin-host.cjs +10 -5
  66. package/dist-lib/menu.cjs +1 -1
  67. package/dist-lib/menu.mjs +1 -1
  68. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  69. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  70. package/dist-lib/metro-production-bundle.cjs +1 -1
  71. package/dist-lib/metro-production-bundle.mjs +1 -1
  72. package/dist-lib/metro.cjs +49 -47
  73. package/dist-lib/native-app-identity-project.cjs +1 -1
  74. package/dist-lib/native-app-identity-project.mjs +1 -1
  75. package/dist-lib/native-app-identity.cjs +1 -1
  76. package/dist-lib/native-app-identity.mjs +1 -1
  77. package/dist-lib/native-firebase-metadata.cjs +1 -1
  78. package/dist-lib/native-firebase-metadata.mjs +1 -1
  79. package/dist-lib/plist.cjs +1 -1
  80. package/dist-lib/plist.mjs +1 -1
  81. package/dist-lib/profiles.cjs +1 -1
  82. package/dist-lib/public-brand.cjs +1 -1
  83. package/dist-lib/react-native-host-modules.cjs +1 -1
  84. package/dist-lib/react-native-host-modules.mjs +1 -1
  85. package/dist-lib/scripts/dev-server-scanner.cjs +23 -17
  86. package/dist-lib/sdk.cjs +99 -61
  87. package/dist-lib/sdk.mjs +97 -61
  88. package/dist-lib/skills.cjs +2959 -2780
  89. package/dist-lib/swift-compile.cjs +26 -12
  90. package/dist-lib/swift-compile.mjs +26 -12
  91. package/dist-lib/swift-package.cjs +1 -1
  92. package/dist-lib/swift-package.mjs +1 -1
  93. package/dist-lib/swift-submit.cjs +2 -2
  94. package/dist-lib/swift-submit.mjs +2 -2
  95. package/dist-lib/swift-toolchain.cjs +1 -1
  96. package/dist-lib/swift.cjs +1 -1
  97. package/dist-lib/vite-swift.cjs +66 -31
  98. package/dist-lib/vite.cjs +1 -1
  99. package/dist-lib/worklet-executable.cjs +1 -1
  100. package/dist-lib/worklet-executable.mjs +1 -1
  101. package/kotlin/AppSources/android/view/Window.kt +2 -0
  102. package/kotlin/AppSources/dev/peach/app/PeachApp.kt +1 -1
  103. package/kotlin/ComposeSources/PeachComposeHost.kt +35 -9
  104. package/kotlin/ExpoComposeSources/dev/peach/expo/PeachExpoCompose.kt +2 -2
  105. package/kotlin/ExpoSources/dev/peach/expo/PeachExpoRuntime.kt +9 -6
  106. package/kotlin/ExpoSources/dev/peach/expo/PeachExpoTypes.kt +4 -4
  107. package/kotlin/ExpoSources/expo/modules/kotlin/modules/Module.kt +2 -2
  108. package/kotlin/ExpoSources/expo/modules/kotlin/viewevent/ViewEvent.kt +22 -8
  109. package/kotlin/ExpoSources/expo/modules/kotlin/views/ExpoView.kt +0 -3
  110. package/kotlin/ExpoSources/expo/modules/kotlin/views/ViewDefinitionBuilder.kt +10 -9
  111. package/kotlin/ExpoSources/expo/modules/kotlin/views/ViewProps.kt +6 -5
  112. package/kotlin/fixtures/import-drawing/Drawing.d.kt.ts +7 -0
  113. package/kotlin/fixtures/import-drawing/Drawing.kt +101 -0
  114. package/kotlin/fixtures/import-drawing/ImportDrawing.native.tsx +18 -0
  115. package/kotlin/fixtures/import-drawing/README.md +34 -0
  116. package/kotlin/fixtures/import-drawing/app/_layout.tsx +4 -0
  117. package/kotlin/fixtures/import-drawing/app/index+spa.tsx +1 -0
  118. package/kotlin/fixtures/import-drawing/package.json +23 -0
  119. package/kotlin/fixtures/import-drawing/tsconfig.json +20 -0
  120. package/kotlin/fixtures/import-drawing/vite.config.ts +20 -0
  121. package/kotlin/fixtures/import-scroll/ImportNested.native.tsx +10 -0
  122. package/kotlin/fixtures/import-scroll/Nested.d.kt.ts +4 -0
  123. package/kotlin/fixtures/import-scroll/README.md +15 -0
  124. package/kotlin/fixtures/import-scroll/app/nested+spa.tsx +1 -0
  125. package/kotlin/fixtures/import-values/ImportValues.native.tsx +26 -0
  126. package/kotlin/fixtures/import-values/README.md +6 -1
  127. package/kotlin/fixtures/import-values/Values.d.kt.ts +4 -0
  128. package/kotlin/fixtures/import-values/Values.kt +18 -0
  129. package/kotlin/tools/expo-types.main.kts +17 -5
  130. package/package.json +2 -1
  131. package/scripts/dev-server-scanner.ts +33 -23
  132. package/src/assetCatalogContract.ts +7 -0
  133. package/src/bridge-contract.ts +21 -3
  134. package/src/connect.ts +18 -5
  135. package/src/desktop-host-delivery.ts +33 -3
  136. package/src/expo-swift-host.ts +6 -3
  137. package/src/host/bridge-host.ts +2 -0
  138. package/src/host/fetch-proxy-transport.ts +8 -0
  139. package/src/kotlin-host.ts +11 -5
  140. package/src/native-firebase-config.ts +95 -54
  141. package/src/process-output.ts +16 -0
  142. package/src/sdk.ts +6 -1
  143. package/src/sim-client.ts +6 -1
  144. package/src/swift-compile.ts +36 -15
  145. package/src/swift-distribution.lock.json +8 -8
  146. package/src/swift-standin-emit.ts +10 -1
  147. package/src/swift-standins.ts +21 -7
  148. package/src/swift-submit.ts +6 -1
  149. /package/kotlin/fixtures/{kotlin-app-variants → import-scroll}/Nested.kt +0 -0
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.1406 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.1463 | (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;
@@ -61,9 +61,9 @@ var require_parse = __commonJS({
61
61
  doc.documentElement.nodeName === "plist",
62
62
  "malformed document. First element should be <plist>"
63
63
  );
64
- var plist2 = parsePlistXML(doc.documentElement);
65
- if (plist2.length == 1) plist2 = plist2[0];
66
- return plist2;
64
+ var plist3 = parsePlistXML(doc.documentElement);
65
+ if (plist3.length == 1) plist3 = plist3[0];
66
+ return plist3;
67
67
  }
68
68
  function parsePlistXML(node) {
69
69
  var i, new_obj, key2, val, new_arr, res, counter, type;
@@ -2207,10 +2207,10 @@ var FOUNDATION_IMPLICIT_FLAGS = FOUNDATION_IMPLICIT_MODULES.map(
2207
2207
  (module2) => `, "-Xfrontend", "-import-module", "-Xfrontend", "${module2}"`
2208
2208
  ).join("");
2209
2209
  var ONE_IMPLICIT_FLAGS = ', "-Xfrontend", "-import-module", "-Xfrontend", "One"';
2210
- var MULTI_MANIFEST_VERSION = 18;
2210
+ var MULTI_MANIFEST_VERSION = 19;
2211
2211
  function swiftArtifactHash(input, release, moduleRoot) {
2212
2212
  const hash = (0, import_node_crypto2.createHash)("sha256");
2213
- hash.update(`swift-compile/v23
2213
+ hash.update(`swift-compile/v24
2214
2214
  ${release}
2215
2215
  `);
2216
2216
  if (input.oneModule) hash.update("one-module\n");
@@ -2282,11 +2282,24 @@ function emitSwiftPackageManifest(args) {
2282
2282
  reachedFrameworks.add("SpriteKit");
2283
2283
  reachedFrameworks.add("PeachBox2D");
2284
2284
  }
2285
- const distributionObjects = distribution?.objects.filter(
2286
- (object) => [...OPTIONAL_FRAMEWORKS, "SpriteKit", "PeachBox2D"].every(
2287
- (name2) => !object.startsWith(`lib/${name2}-`) || reachedFrameworks.has(name2)
2288
- )
2289
- );
2285
+ const distributionLink = args.distributionLink;
2286
+ if (distribution && !distributionLink)
2287
+ throw new Error(
2288
+ "swift-compile: distribution linking requires its object response file"
2289
+ );
2290
+ if (distribution && distributionLink) {
2291
+ const objects = distribution.objects.filter(
2292
+ (object) => [...OPTIONAL_FRAMEWORKS, "SpriteKit", "PeachBox2D"].every(
2293
+ (name2) => !object.startsWith(`lib/${name2}-`) || reachedFrameworks.has(name2)
2294
+ )
2295
+ );
2296
+ distributionLink.files.set(
2297
+ distributionLink.path,
2298
+ objects.map(
2299
+ (object) => `"${import_node_path2.default.join(moduleRoot, object).replaceAll("\\", "\\\\").replaceAll('"', '\\"')}"`
2300
+ ).join("\n") + "\n"
2301
+ );
2302
+ }
2290
2303
  const executable = targets.find((target) => target.executable);
2291
2304
  if (!executable) throw new Error("swift-compile: no executable target to emit");
2292
2305
  const stanza = (target) => {
@@ -2315,10 +2328,7 @@ function emitSwiftPackageManifest(args) {
2315
2328
  (dependency) => OPTIONAL_FRAMEWORKS.has(dependency) && !targets.some((candidate) => candidate.name === dependency) ? distribution ? [] : [`.product(name: "${dependency}", package: "sootsim-swift")`] : [`"${dependency}"`]
2316
2329
  )
2317
2330
  ].join(", ");
2318
- const library = distribution ? [
2319
- ...(distributionObjects ?? []).map((object) => import_node_path2.default.join(moduleRoot, object)),
2320
- ...distribution.link
2321
- ].map((flag) => `, ${JSON.stringify(flag)}`).join("") : "";
2331
+ const library = distribution && distributionLink ? ["-Xlinker", `@${distributionLink.path}`, ...distribution.link].map((flag) => `, ${JSON.stringify(flag)}`).join("") : "";
2322
2332
  const kind = target.executable ? ".executableTarget" : ".target";
2323
2333
  const link = target.executable ? `,
2324
2334
  linkerSettings: [
@@ -3639,6 +3649,10 @@ function writeSwiftProject(layout, input, moduleRoot) {
3639
3649
  oneModule: input.oneModule,
3640
3650
  spriteKit: importsSpriteKit(input.files),
3641
3651
  distribution: distribution ?? void 0,
3652
+ distributionLink: {
3653
+ path: import_node_path2.default.join(layout.root, ".peach-distribution-objects.rsp"),
3654
+ files: files2
3655
+ },
3642
3656
  libraries
3643
3657
  }) + moduleFiles
3644
3658
  );
@@ -3984,12 +3998,12 @@ var DAEMON_LOCKFILE_MAX_BYTES = 16 * 1024;
3984
3998
 
3985
3999
  // src/swift-distribution.lock.json
3986
4000
  var swift_distribution_lock_default = {
3987
- id: "3246f7e5ccb24952",
4001
+ id: "c60899948fe25af8",
3988
4002
  release: "swift-6.4.0-RELEASE",
3989
4003
  wasmSdkId: "swift-6.4.0-RELEASE_wasm-peach-e4629014",
3990
4004
  wasmSdkUrl: "https://r2.sootsim.com/swift-wasm-sdk/swift-6.4.0-RELEASE_wasm-peach-e4629014.artifactbundle.tar.gz",
3991
4005
  wasmSdkChecksum: "522f3ff98e951872d64751376d45e36394e572ec2aa4e0a52fb0027824bf41f6",
3992
- source: "a1e87668019272a329f6d9fada213573e3c5107f",
4006
+ source: "22d7666f9c66ec4b558db482661d440e581d84ff",
3993
4007
  targets: [
3994
4008
  "ExpoModulesCore",
3995
4009
  "PeachJSON",
@@ -4103,16 +4117,16 @@ var swift_distribution_lock_default = {
4103
4117
  ],
4104
4118
  hosts: {
4105
4119
  "darwin-arm64": {
4106
- sha256: "fb5a3e9db1eae670b5ba84432345e52de8b55b5fdf0e468ff95dfa25a62a6968",
4107
- size: 55050821
4120
+ sha256: "4661b87b8d627792bd28ef41d856bc9abcc913eb816efa448075d48e88abe823",
4121
+ size: 55595616
4108
4122
  },
4109
4123
  "linux-x64": {
4110
- sha256: "46a0eae68905751ee7c6536e79f626bc71d9d5a22cf9a76ce12b8d6c3aa34293",
4111
- size: 55056198
4124
+ sha256: "85dc5fc24acd33568f5ddccb3d69905c638162f5d5d767eefbbc16f9a4cca845",
4125
+ size: 55601101
4112
4126
  },
4113
4127
  "linux-arm64": {
4114
- sha256: "ea6453b55ff428d4d152d829731504400d49969ab0750264a931eaf0d7659122",
4115
- size: 55055213
4128
+ sha256: "009f687e2f5a03cf2af277638861543aead3ad907136c2de8e48a6a702040182",
4129
+ size: 55600268
4116
4130
  }
4117
4131
  }
4118
4132
  };
@@ -4543,6 +4557,7 @@ function enumerateBundleSymbols(paths, readText, bundleForFile) {
4543
4557
  var COMPILED_EXTENSIONS = /* @__PURE__ */ new Set([".swift", ".metal", ".storyboard", ".xib"]);
4544
4558
  var NESTED_BUNDLE_DIR = /\.(?:xcassets|lproj)$/;
4545
4559
  function isCopiedResource(path16) {
4560
+ if (path16.split("/").some((segment) => segment.endsWith(".atlasc"))) return true;
4546
4561
  const ext = extOf(path16);
4547
4562
  if (ext === ".json" || ext === ".xcstrings") return true;
4548
4563
  return !RASTER_EXTENSIONS.has(ext) && !COMPILED_EXTENSIONS.has(ext) && !path16.split("/").some((segment) => NESTED_BUNDLE_DIR.test(segment));
@@ -4558,7 +4573,9 @@ function enumerateBundleResources(paths) {
4558
4573
  return aDepth - bDepth || (a < b ? -1 : a > b ? 1 : 0);
4559
4574
  });
4560
4575
  for (const file of ordered) {
4561
- const base = baseOf(file);
4576
+ const parts = file.split("/");
4577
+ const atlas = parts.findIndex((part) => part.endsWith(".atlasc"));
4578
+ const base = atlas < 0 ? baseOf(file) : parts.slice(atlas).join("/");
4562
4579
  if (seen.has(base)) continue;
4563
4580
  seen.add(base);
4564
4581
  found.push({ base, file });
@@ -5633,6 +5650,12 @@ function getCliVersion() {
5633
5650
  return cached;
5634
5651
  }
5635
5652
 
5653
+ // src/plist.ts
5654
+ var import_plist = __toESM(require_plist(), 1);
5655
+ function parsePlistSource(source) {
5656
+ return import_plist.default.parse(source);
5657
+ }
5658
+
5636
5659
  // src/swift-standin-emit.ts
5637
5660
  var STANDIN_EMIT_VERSION = "5";
5638
5661
  var STANDIN_IMPORTS = ["Foundation", "UIKit"];
@@ -6214,7 +6237,12 @@ function emitSwiftStandin(graphs, options) {
6214
6237
  if (fix && !/^(?:prefix|infix|postfix)\b/.test(spelled))
6215
6238
  spelled = `${fix} ${spelled}`;
6216
6239
  }
6217
- emit(`${attrs}public ${spelled} { ${trap(path16)} }`);
6240
+ const measured = behavior.get(path16);
6241
+ if (measured) used.add(path16);
6242
+ const overloadBody = /\basync\b/.test(spelled) ? measured?.asyncBody : /\bResult</.test(spelled) ? measured?.resultBody : void 0;
6243
+ emit(
6244
+ `${attrs}public ${spelled} { ${overloadBody ?? measured?.body ?? trap(path16)} }`
6245
+ );
6218
6246
  } else if (kind === "swift.var") {
6219
6247
  const parsed = splitAccessors(text(symbol).replace(/^let /, "var "));
6220
6248
  const measured = behavior.get(path16);
@@ -6909,10 +6937,17 @@ function crateFor(root, name2) {
6909
6937
  };
6910
6938
  return walk2(root, 4);
6911
6939
  }
6940
+ function simulatorLibraryName(dir) {
6941
+ const info = parsePlistSource(import_node_fs12.default.readFileSync(import_node_path12.default.join(dir, "Info.plist"), "utf8"));
6942
+ const libraries = info && typeof info === "object" ? Reflect.get(info, "AvailableLibraries") : void 0;
6943
+ if (!Array.isArray(libraries)) return void 0;
6944
+ return libraries.filter(
6945
+ (entry) => typeof entry === "object" && entry !== null && Reflect.get(entry, "SupportedPlatform") === "ios" && Reflect.get(entry, "SupportedPlatformVariant") === "simulator"
6946
+ ).map((entry) => Reflect.get(entry, "LibraryPath")).find((name2) => typeof name2 === "string" && /^lib.+\.a$/.test(name2));
6947
+ }
6912
6948
  function standinLibrary(binary, searchRoot) {
6913
6949
  const dir = xcframework(binary).dir;
6914
- const slice = import_node_fs12.default.readdirSync(dir).filter((name2) => /^ios-.+-simulator$/.test(name2)).sort()[0];
6915
- const library = slice ? import_node_fs12.default.readdirSync(import_node_path12.default.join(dir, slice)).find((name2) => /^lib.+\.a$/.test(name2)) : void 0;
6950
+ const library = simulatorLibraryName(dir);
6916
6951
  const supplied = import_node_path12.default.join(dir, RUST_TARGET);
6917
6952
  if (import_node_fs12.default.existsSync(supplied)) {
6918
6953
  const found = import_node_fs12.default.readdirSync(supplied).filter((name2) => name2.endsWith(".a"));
@@ -7152,7 +7187,7 @@ var MAX_SWIFT_COMPILE_METAL_TOTAL_BYTES = 8 * 1024 * 1024;
7152
7187
  var MAX_SWIFT_COMPILE_IMAGES = 128;
7153
7188
  var MAX_SWIFT_COMPILE_IMAGE_BYTES = 4 * 1024 * 1024;
7154
7189
  var MAX_SWIFT_COMPILE_IMAGE_TOTAL_BYTES = 16 * 1024 * 1024;
7155
- var SWIFT_HOST_ABI = 41;
7190
+ var SWIFT_HOST_ABI = 45;
7156
7191
  var POLL_INTERVAL_MS = 1500;
7157
7192
  function httpSwiftCompileSubmit(context) {
7158
7193
  const { assetReadToken, authorization, endpoint } = context;
@@ -7283,7 +7318,7 @@ async function compileSwiftProject(submit, work, origin, signal) {
7283
7318
  // src/xcode-project.ts
7284
7319
  var import_node_fs13 = __toESM(require("node:fs"), 1);
7285
7320
  var import_node_path14 = __toESM(require("node:path"), 1);
7286
- var import_plist = __toESM(require_plist(), 1);
7321
+ var import_plist3 = __toESM(require_plist(), 1);
7287
7322
 
7288
7323
  // src/xcode-json-project.ts
7289
7324
  var import_node_path13 = __toESM(require("node:path"), 1);
@@ -8306,7 +8341,7 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
8306
8341
  return value;
8307
8342
  };
8308
8343
  const infoPlistFile = settings("INFOPLIST_FILE") ? import_node_path14.default.resolve(app.project.projectDir, settings("INFOPLIST_FILE")) : null;
8309
- const sourceInfo = infoPlistFile ? import_plist.default.parse(import_node_fs13.default.readFileSync(infoPlistFile, "utf8")) : {};
8344
+ const sourceInfo = infoPlistFile ? import_plist3.default.parse(import_node_fs13.default.readFileSync(infoPlistFile, "utf8")) : {};
8310
8345
  if (!sourceInfo || typeof sourceInfo !== "object" || Array.isArray(sourceInfo) || sourceInfo instanceof Date || Buffer.isBuffer(sourceInfo)) {
8311
8346
  throw new Error(`${module2.name} Info.plist must contain a dictionary`);
8312
8347
  }
@@ -8399,7 +8434,7 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
8399
8434
  .../* @__PURE__ */ new Set([...used.map((project) => project.projectFile), ...xcconfigs])
8400
8435
  ].sort(),
8401
8436
  appIconName: settings("ASSETCATALOG_COMPILER_APPICON_NAME"),
8402
- infoPlist: import_plist.default.build(info),
8437
+ infoPlist: import_plist3.default.build(info),
8403
8438
  infoPlistFile,
8404
8439
  frameworks,
8405
8440
  linkedProducts,
@@ -9616,10 +9651,11 @@ let package = Package(name: "PeachExpo", targets: [${targets.map((name2) => `.ta
9616
9651
  );
9617
9652
  if (publishArtifact && (sourceErrors.length === 0 || sourceErrors.length !== errors.length) && !(error instanceof SwiftMissingModulesError))
9618
9653
  throw error;
9619
- if (sourceErrors.length && sourceErrors.length === errors.length && sourceStamp(packagePath, module2.root) === stamps.get(unit)) {
9654
+ const missing = error instanceof SwiftMissingModulesError;
9655
+ if ((sourceErrors.length && sourceErrors.length === errors.length || missing) && sourceStamp(packagePath, module2.root) === stamps.get(unit)) {
9620
9656
  failedCompilations.set(packagePath, {
9621
9657
  stamp: stamps.get(unit),
9622
- diagnostic: sourceErrors.join("\n")
9658
+ diagnostic: missing ? diagnostic : sourceErrors.join("\n")
9623
9659
  });
9624
9660
  }
9625
9661
  failures.set(
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.1406 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.1463 | (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
- /*! peach v0.1.1406 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.1463 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/bundleGlobalFooter.ts
4
4
  function readBundleGlobalFooter(source, name) {
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.1406 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.1463 | (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;