peachsim 0.1.2219 → 0.1.2221

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 (93) hide show
  1. package/cli/commands/flow.ts +4 -0
  2. package/cli/commands/inspect.ts +4 -4
  3. package/cli/maestro-compare.ts +37 -26
  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 +117 -36
  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 +114 -33
  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 +115 -34
  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 +115 -34
  71. package/dist-lib/swift-compile.cjs +39 -21
  72. package/dist-lib/swift-compile.mjs +39 -21
  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 +112 -31
  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/dist-types/packages/peach-engine/src/render-worker/compositor-protocol.d.ts +1 -0
  84. package/package.json +1 -1
  85. package/sdk/ios/System/Library/Frameworks/UIKit.framework/Headers/NSLayoutConstraint.h +1 -8
  86. package/sdk/ios/System/Library/Frameworks/UIKit.framework/Modules/module.modulemap +1 -0
  87. package/sdk/ios/System/Library/Frameworks/UIKitTypes.framework/Headers/UIKitTypes.h +1 -0
  88. package/sdk/ios/System/Library/Frameworks/UIKitTypes.framework/Headers/UILayoutPriority.h +11 -0
  89. package/src/swift-compile.ts +43 -23
  90. package/src/swift-host.ts +84 -2
  91. package/src/swift-objc-import.ts +4 -0
  92. package/src/swift-packages.ts +19 -10
  93. package/src/swift-standins.ts +1 -1
package/dist-lib/sdk.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2219 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2221 | (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/sdk.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2219 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2221 | (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.2219 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2221 | (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;
@@ -53223,7 +53223,7 @@ function swiftSubmoduleImports(sources) {
53223
53223
  }
53224
53224
  return imports2;
53225
53225
  }
53226
- function swiftObjCModuleMap(module2, headers, submodules = /* @__PURE__ */ new Set()) {
53226
+ function swiftObjCModuleMap(module2, headers, submodules = /* @__PURE__ */ new Set(), swiftHeader) {
53227
53227
  const header = (file) => `header ${JSON.stringify(file)}`;
53228
53228
  const stem = (file) => file.slice(file.lastIndexOf("/") + 1).replace(/\.[^.]*$/, "");
53229
53229
  return [
@@ -53231,6 +53231,7 @@ function swiftObjCModuleMap(module2, headers, submodules = /* @__PURE__ */ new S
53231
53231
  ...headers.map(
53232
53232
  (file) => submodules.has(stem(file)) ? ` module ${stem(file)} { ${header(file)} export * }` : ` ${header(file)}`
53233
53233
  ),
53234
+ ...swiftHeader ? [" module Swift {", ` ${header(swiftHeader)}`, " requires objc", " }"] : [],
53234
53235
  " export *",
53235
53236
  "}",
53236
53237
  ""
@@ -54788,6 +54789,10 @@ function emitSwiftPackageManifest(args) {
54788
54789
  includeImportContext(dependency);
54789
54790
  const importedNativeFlags = [
54790
54791
  ...args.nativeImportFlags?.get(target.name) ?? [],
54792
+ ...[...importContext].flatMap((name3) => {
54793
+ const map2 = name3 === target.name ? void 0 : args.nativeSwiftHeaderMaps?.get(name3);
54794
+ return map2 ? ["-fmodule-map-file=" + map2] : [];
54795
+ }),
54791
54796
  ...[...importContext].flatMap((name3) => args.native?.get(name3)?.importFlags ?? []),
54792
54797
  ...[...importContext].flatMap((name3) => {
54793
54798
  const flags = targets.find((target2) => target2.name === name3)?.swiftFlags ?? [];
@@ -56068,6 +56073,7 @@ ${swiftProjectFilesProblems(input.projectFiles).join("\n")}`
56068
56073
  )
56069
56074
  );
56070
56075
  const importModuleMaps = /* @__PURE__ */ new Map();
56076
+ const sourceModuleMaps = /* @__PURE__ */ new Map();
56071
56077
  const generatedModuleMaps = [];
56072
56078
  for (const target of targets) {
56073
56079
  const prefix = target.path === "." ? "" : `${target.path}/`;
@@ -56302,6 +56308,10 @@ ${swiftProjectFilesProblems(input.projectFiles).join("\n")}`
56302
56308
  stageTargetFile(target.name, import_node_path51.default.join(layout2.root, modulemap), moduleContents, {
56303
56309
  allowExisting: true
56304
56310
  });
56311
+ sourceModuleMaps.set(swiftTargetModuleName(target.name), {
56312
+ path: import_node_path51.default.join(layout2.root, modulemap),
56313
+ contents: moduleContents.toString()
56314
+ });
56305
56315
  if (modulemap.endsWith("/Modules/module.modulemap")) {
56306
56316
  const framework = import_node_path51.default.posix.dirname(import_node_path51.default.posix.dirname(modulemap));
56307
56317
  for (const [, header] of moduleContents.toString().matchAll(/\bheader\s+"([^"]+)"/g))
@@ -56576,6 +56586,7 @@ ${swiftProjectFilesProblems(input.projectFiles).join("\n")}`
56576
56586
  if (native.size > 0) (0, import_node_fs54.mkdirSync)(headerDirectory, { recursive: true });
56577
56587
  const headerAliasFlags = Object.keys(input.headerAliases ?? {}).length > 0 ? ["-ivfsoverlay", headerSearch.files[0]] : [];
56578
56588
  const nativeHeaderFlags = [...headerAliasFlags];
56589
+ const nativeSwiftHeaderMaps = /* @__PURE__ */ new Map();
56579
56590
  const originalMaps = /* @__PURE__ */ new Map();
56580
56591
  for (const target of input.nativeTargets ?? []) {
56581
56592
  for (const flag of [...target.flags, ...target.cxxFlags]) {
@@ -56606,30 +56617,33 @@ ${swiftProjectFilesProblems(input.projectFiles).join("\n")}`
56606
56617
  );
56607
56618
  const moduleName2 = swiftTargetModuleName(name3);
56608
56619
  const originalMap = originalMaps.get(moduleName2);
56609
- const originalTokens = originalMap ? moduleMapTokens(input.files[originalMap]) : [];
56610
- if (originalMap && originalTokens.some(
56620
+ const stagedMap = sourceModuleMaps.get(moduleName2);
56621
+ const originalPath = originalMap ? import_node_path51.default.join(layout2.root, originalMap) : stagedMap?.path;
56622
+ const originalContents = originalMap ? input.files[originalMap] : stagedMap?.contents;
56623
+ const originalTokens = originalContents ? moduleMapTokens(originalContents) : [];
56624
+ if (originalPath && originalTokens.some(
56611
56625
  (token, index) => token === "module" && (originalTokens[index + 1] === "Swift" || originalTokens[index + 1] === `${moduleName2}.Swift`)
56612
56626
  )) {
56613
- nativeHeaderFlags.push("-fmodule-map-file=" + import_node_path51.default.join(layout2.root, originalMap));
56627
+ nativeHeaderFlags.push("-fmodule-map-file=" + originalPath);
56628
+ nativeSwiftHeaderMaps.set(name3, originalPath);
56614
56629
  continue;
56615
56630
  }
56616
56631
  files2.set(
56617
56632
  modulemap,
56618
- originalMap ? `extern module ${moduleName2} ${JSON.stringify(import_node_path51.default.join(layout2.root, originalMap))}
56633
+ originalPath ? `extern module ${moduleName2} ${JSON.stringify(originalPath)}
56619
56634
  module ${moduleName2}.Swift {
56620
56635
  header ${JSON.stringify(import_node_path51.default.join(headerDirectory, name3 + "-Swift.h"))}
56621
56636
  requires objc
56622
56637
  }
56623
56638
  ` : swiftObjCModuleMap(
56624
56639
  moduleName2,
56625
- [
56626
- ...(input.nativeTargets?.find((target) => target.name === name3)?.publicHeaders ?? []).map((header) => import_node_path51.default.join(layout2.root, header)),
56627
- import_node_path51.default.join(headerDirectory, name3 + "-Swift.h")
56628
- ],
56629
- submoduleImports.get(moduleName2)
56640
+ (input.nativeTargets?.find((target) => target.name === name3)?.publicHeaders ?? []).map((header) => import_node_path51.default.join(layout2.root, header)),
56641
+ submoduleImports.get(moduleName2),
56642
+ import_node_path51.default.join(headerDirectory, name3 + "-Swift.h")
56630
56643
  )
56631
56644
  );
56632
56645
  nativeHeaderFlags.push("-fmodule-map-file=" + modulemap);
56646
+ nativeSwiftHeaderMaps.set(name3, modulemap);
56633
56647
  }
56634
56648
  const modulePlan = (0, import_node_crypto25.createHash)("sha256").update(
56635
56649
  swiftModuleInputFiles(moduleRoot).join("\n")
@@ -56986,6 +57000,7 @@ module ${moduleName2}.Swift {
56986
57000
  nativeFlags,
56987
57001
  nativeImportFlags,
56988
57002
  nativeHeaderFlags,
57003
+ nativeSwiftHeaderMaps,
56989
57004
  nativeHeaderDeclarations,
56990
57005
  objcImplementationModules: new Set(
56991
57006
  targets.filter(
@@ -57143,30 +57158,30 @@ module ${moduleName2}.Swift {
57143
57158
  )
57144
57159
  ])
57145
57160
  );
57161
+ const producerSet = /* @__PURE__ */ new Set([...Object.keys(nativeHeaderDeclarations), ...producers]);
57162
+ const orderedProducers = [];
57146
57163
  const included = /* @__PURE__ */ new Set();
57147
57164
  const include = (name3) => {
57148
57165
  if (included.has(name3)) return;
57149
57166
  included.add(name3);
57150
57167
  for (const dependency of dependencies.get(name3) ?? []) include(dependency);
57168
+ if (producerSet.has(name3)) orderedProducers.push(name3);
57151
57169
  };
57152
- for (const producer of producers)
57170
+ for (const producer of producerSet)
57153
57171
  for (const dependency of dependencies.get(producer) ?? []) include(dependency);
57172
+ const needsHeaderStages = [...producerSet].some((name3) => included.has(name3));
57173
+ for (const producer of producerSet) include(producer);
57154
57174
  return {
57155
57175
  nativeBuildTargets: [...native].flatMap(([name3, plan]) => [
57156
57176
  ...!plan.mixed && plan.sources.length > 0 ? [name3] : [],
57157
57177
  ...plan.groups?.map((group) => group.name) ?? (plan.late ? [plan.late.name] : [])
57158
57178
  ]),
57159
- headerProducers: [
57160
- .../* @__PURE__ */ new Set([
57161
- ...Object.keys(nativeHeaderDeclarations),
57162
- ...producers.filter((name3) => !included.has(name3))
57163
- ])
57164
- ],
57179
+ headerProducers: orderedProducers,
57165
57180
  emittedHeaderProducers: [
57166
57181
  .../* @__PURE__ */ new Set([...Object.keys(nativeHeaderDeclarations), ...producers])
57167
57182
  ],
57168
57183
  nativeHeaderDeclarations,
57169
- headerProductTarget,
57184
+ headerProductTarget: needsHeaderStages ? void 0 : headerProductTarget,
57170
57185
  targetFailures,
57171
57186
  generatedOwners,
57172
57187
  targetToolset
@@ -58354,7 +58369,10 @@ var init_swift_compile = __esm({
58354
58369
  SWIFTPM_NOISE = /^(?:\[\d+\/\d+\] |Building for production\.\.\.$|warning: '--build-system native' has been deprecated)/;
58355
58370
  SWIFT_BUILDER_TRANSPORT_MARGIN_MS = 3e5;
58356
58371
  SWIFT_BUILDER_DEFAULT_COMPILE_MS = 18e5;
58357
- clangInterfaceHeader = (header) => header.replace(/^@import (?:UIKitCore|UIKitText);$/gm, "@import UIKit;").replace(/^@import CoreFoundation;$/gm, "@import Foundation;").replace(/\b_TtC10Foundation\d+(NS\w+)\b/g, "$1").replace(/\b__attribute__\(\(objc_subclassing_restricted\)\)\s*/g, "");
58372
+ clangInterfaceHeader = (header) => header.replace(/^@import (?:UIKitCore|UIKitText);$/gm, "@import UIKit;").replace(
58373
+ /^@import (?:CoreFoundation|FoundationNetworking);$/gm,
58374
+ "@import Foundation;"
58375
+ ).replace(/\b_TtC10Foundation\d+(NS\w+)\b/g, "$1").replace(/\b__attribute__\(\(objc_subclassing_restricted\)\)\s*/g, "");
58358
58376
  swiftInterfaceDeclarations = (header) => /* @__PURE__ */ new Set([
58359
58377
  ...[
58360
58378
  ...header.matchAll(
@@ -58524,7 +58542,7 @@ int EXUpdatesApplyBSDiffPatch(const char * _Nonnull oldFilePath,
58524
58542
  REACTOR_FLAG = '"-Xclang-linker", "-mexec-model=reactor",\n';
58525
58543
  MULTI_MANIFEST_VERSION = 68;
58526
58544
  SWIFT_HEADER_PRODUCTS_TARGET = "PeachHeaderProducts";
58527
- compilerSourceDigest = true ? "0a0bc1c871aee83ea273120655f55a43ddccde646478a452b4c73d2daefd58c3" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
58545
+ compilerSourceDigest = true ? "2e9f321a97a408a1b3b8b7d85bbcfb108f0761ed9726b832a3c6c2cc52102806" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
58528
58546
  nativeCxxCompilerFlags = ["-fno-cxx-modules"];
58529
58547
  cFlagArray = (flags) => JSON.stringify(withoutGlogModuleMap(flags));
58530
58548
  cxxFlagArray = (flags) => JSON.stringify([...nativeCxxCompilerFlags, ...withoutGlogModuleMap(flags)]);
@@ -64991,7 +65009,7 @@ var init_swift_standin_digest = __esm({
64991
65009
  STANDIN_DIGEST_ENTRYPOINTS = ["swift-standins.ts", "swift-objc-compile.ts"];
64992
65010
  SPECIFIER = /from\s*['"]([^'"]+)['"]|import\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
64993
65011
  standinSourceDigest = (srcDir = __sootsim_import_meta_dirname) => sourceClosureDigest(srcDir, STANDIN_DIGEST_ENTRYPOINTS);
64994
- STANDIN_SOURCE_DIGEST = true ? "f5dd13fe8982e117facf0d8c668773904364a887ec47c728db7584b73f34d119" : standinSourceDigest();
65012
+ STANDIN_SOURCE_DIGEST = true ? "70b9e9f32fde5739daaee933df31b2584f9ef3289c322a0f5b03f1eaac947880" : standinSourceDigest();
64995
65013
  }
64996
65014
  });
64997
65015
 
@@ -65452,7 +65470,7 @@ var init_package_tree_digest = __esm({
65452
65470
 
65453
65471
  // src/expo-native-prebuilt.ts
65454
65472
  function expoNativeCompilerDigestValue() {
65455
- return true ? "a02a843d19cee6ee62d1798fd5f234d2bbd4e12e327c75be531211719fc1c09b" : expoNativeCompilerDigest(__sootsim_import_meta_dirname);
65473
+ return true ? "7667f1dce279c8074ed9dd97de1e3b293077ae012cacf08fd6572978f8ef7dc0" : expoNativeCompilerDigest(__sootsim_import_meta_dirname);
65456
65474
  }
65457
65475
  function readSources(value) {
65458
65476
  const sources = isRecord(value) ? value.sources : null;
@@ -66198,17 +66216,17 @@ function remoteSwiftCheckouts(root) {
66198
66216
  import_node_fs73.default.mkdirSync(cacheDir(), { recursive: true });
66199
66217
  return import_node_path71.default.join(import_node_fs73.default.realpathSync(cacheDir()), "swift-packages", key2, "checkouts");
66200
66218
  }
66201
- function unlowerableSources(files2, target) {
66219
+ function unlowerableSources(files2, target, portable) {
66202
66220
  if (target.declaresWasiNativeSettings) return [];
66203
66221
  return [
66204
- ...files2.filter((file) => UNSUPPORTED_NATIVE.test(file)),
66222
+ ...portable.has(target.name) ? [] : files2.filter((file) => UNSUPPORTED_NATIVE.test(file)),
66205
66223
  ...files2.filter(isSwiftNativeTranslationUnit).filter((file) => swiftCTakesReturnAddress(import_node_fs73.default.readFileSync(file, "utf8")))
66206
66224
  ];
66207
66225
  }
66208
- function unloweredSources(files2, target) {
66226
+ function unloweredSources(files2, target, portable) {
66209
66227
  if (target.type !== "regular") return null;
66210
66228
  if (!files2.some(isSwiftNativeTranslationUnit)) return null;
66211
- const unlowered = unlowerableSources(files2, target);
66229
+ const unlowered = unlowerableSources(files2, target, portable);
66212
66230
  if (unlowered.length === 0) return null;
66213
66231
  const headers = import_node_path71.default.resolve(target.dir, target.publicHeadersPath);
66214
66232
  if (!files2.some((file) => file.startsWith(`${headers}${import_node_path71.default.sep}`) && file.endsWith(".h")))
@@ -66412,6 +66430,7 @@ async function resolveSwiftPackagesAsync(options) {
66412
66430
  function resolveSwiftPackages(options) {
66413
66431
  const { rootDir, resolved, products, localDirs } = options;
66414
66432
  const providedTargets = new Set(options.provided ?? []);
66433
+ const portableAssembly = options.portableAssembly ?? /* @__PURE__ */ new Set();
66415
66434
  const providedProducts = new Set(options.provided ?? []);
66416
66435
  const result = {
66417
66436
  sourceLinks: { targets: [], owners: [] },
@@ -66509,7 +66528,7 @@ function resolveSwiftPackages(options) {
66509
66528
  if (target.type === "macro") return preservePackage(pkg, [name3], "host");
66510
66529
  const files2 = target.type === "regular" || target.type === "system" ? swiftTargetFiles(pkg.manifest, target) : [];
66511
66530
  const gap = options.binaryGaps?.get(name3);
66512
- const unlowerable = unlowerableSources(files2, target);
66531
+ const unlowerable = unlowerableSources(files2, target, portableAssembly);
66513
66532
  const placeholder = placeholderPackage(pkg);
66514
66533
  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_path71.default.relative(pkg.manifest.dir, file)).join(", ")}${gap ? `; ${gap}` : ""}` : null;
66515
66534
  const reasons = target.dependencies.map((dependency) => {
@@ -66590,7 +66609,7 @@ function resolveSwiftPackages(options) {
66590
66609
  (file) => file.endsWith(".swift") && import_node_fs73.default.readFileSync(file, "utf8").trim() === ""
66591
66610
  ))
66592
66611
  return false;
66593
- if (unloweredSources(files2, target)) return false;
66612
+ if (unloweredSources(files2, target, portableAssembly)) return false;
66594
66613
  claimed.add(key2);
66595
66614
  providedTargets.delete(name3);
66596
66615
  for (const dependency of target.dependencies) {
@@ -66638,7 +66657,7 @@ function resolveSwiftPackages(options) {
66638
66657
  if (target.type === "executable") continue;
66639
66658
  const files2 = target.type === "regular" || target.type === "system" ? swiftTargetFiles(pkg.manifest, target) : [];
66640
66659
  const objc = target.type === "regular" && files2.some((file) => /\.(m|mm)$/.test(file));
66641
- const unlowered = unloweredSources(files2, target);
66660
+ const unlowered = unloweredSources(files2, target, portableAssembly);
66642
66661
  const gap = placeholderPackage(pkg);
66643
66662
  const sources = files2.filter((file) => file.endsWith(".swift"));
66644
66663
  const release = (setting) => setting.configuration !== "debug";
@@ -68873,7 +68892,7 @@ function graphStandin(module2, graphs, values, wasm, binary2, toolchain, work, r
68873
68892
  }
68874
68893
  if (omit.size + plain.size + unobjc.size + trapped.size + unconformed.size + forced.size + nonfailable.size === before)
68875
68894
  throw new Error(
68876
- `its generated source does not typecheck: ${elsewhere.slice(0, 3).join("; ") || check2.stderr.trim().slice(0, 400)}`
68895
+ `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)}`
68877
68896
  );
68878
68897
  }
68879
68898
  }
@@ -74909,6 +74928,59 @@ function configureSwiftStandinBehavior(packagePath, config) {
74909
74928
  }
74910
74929
  entry.behavior = behavior;
74911
74930
  }
74931
+ async function wasmPortableAssembly(binaries, toolchainBin, moduleRoot) {
74932
+ const assembly = binaries.filter(
74933
+ (binary2) => binary2.unloweredSources?.length && binary2.unloweredSources.every((file) => /\.(s|S)$/.test(file)) && binary2.publicHeaders !== void 0
74934
+ );
74935
+ if (assembly.length === 0) return /* @__PURE__ */ new Set();
74936
+ const sdk = swiftSdkPaths(moduleRoot, toolchainBin);
74937
+ const clang = import_node_path83.default.join(toolchainBin, "clang");
74938
+ const empty = (binary2, file) => {
74939
+ const source = import_node_path83.default.join(binary2.dir, file);
74940
+ const key2 = (0, import_node_crypto45.createHash)("sha256").update(
74941
+ JSON.stringify([
74942
+ clang,
74943
+ sdk.sysroot,
74944
+ sdk.cFlags,
74945
+ binary2.dir,
74946
+ binary2.publicHeaders
74947
+ ])
74948
+ ).update(import_node_fs86.default.readFileSync(source)).digest("hex");
74949
+ const known = emptyWasmAssembly.get(key2);
74950
+ if (known) return known;
74951
+ const result = new Promise(
74952
+ (resolve13) => (0, import_node_child_process46.execFile)(
74953
+ clang,
74954
+ [
74955
+ "-target",
74956
+ "wasm32-unknown-wasip1",
74957
+ "--sysroot",
74958
+ sdk.sysroot,
74959
+ ...sdk.cFlags,
74960
+ "-I",
74961
+ import_node_path83.default.join(binary2.dir, binary2.publicHeaders),
74962
+ "-I",
74963
+ import_node_path83.default.dirname(source),
74964
+ "-E",
74965
+ "-P",
74966
+ "-x",
74967
+ "assembler-with-cpp",
74968
+ source
74969
+ ],
74970
+ { maxBuffer: 64 * 1024 * 1024 },
74971
+ (error, stdout) => resolve13(!error && stdout.trim() === "")
74972
+ )
74973
+ );
74974
+ emptyWasmAssembly.set(key2, result);
74975
+ return result;
74976
+ };
74977
+ const portable = await Promise.all(
74978
+ assembly.map(
74979
+ async (binary2) => (await Promise.all(binary2.unloweredSources.map((file) => empty(binary2, file)))).every(Boolean) ? [binary2.target] : []
74980
+ )
74981
+ );
74982
+ return new Set(portable.flat());
74983
+ }
74912
74984
  async function swiftPackages(entry, app) {
74913
74985
  const stamp = (file) => import_node_fs86.default.existsSync(file) ? (0, import_node_crypto45.createHash)("sha256").update(import_node_fs86.default.readFileSync(file)).digest("hex") : null;
74914
74986
  const owners = [...app.frameworks, app].map((target) => ({
@@ -74973,7 +75045,14 @@ async function swiftPackages(entry, app) {
74973
75045
  entry.moduleRoot,
74974
75046
  import_node_path83.default.join(resolved.toolchainBin, "clang++")
74975
75047
  );
74976
- const cxxArtifacts = reached.filter(standinArtifact);
75048
+ const portableAssembly = await wasmPortableAssembly(
75049
+ reached,
75050
+ resolved.toolchainBin,
75051
+ entry.moduleRoot
75052
+ );
75053
+ const cxxArtifacts = reached.filter(
75054
+ (binary2) => standinArtifact(binary2) && !portableAssembly.has(binary2.target)
75055
+ );
74977
75056
  const generation = standinGenerationInputs(cxxArtifacts, toolchain, entry.behavior);
74978
75057
  if (cached4.standinKey !== generation) {
74979
75058
  const replaced = new Set(
@@ -75000,6 +75079,7 @@ async function swiftPackages(entry, app) {
75000
75079
  [...replaced].filter((target) => !built2.gaps.has(target))
75001
75080
  ),
75002
75081
  binaryGaps: built2.gaps,
75082
+ portableAssembly,
75003
75083
  owners
75004
75084
  });
75005
75085
  for (const target of new Set(built2.standins.map((standin) => standin.target)))
@@ -76988,7 +77068,7 @@ function disposeSwiftProject(packagePath, signal) {
76988
77068
  xcodeProjects().delete(packagePath);
76989
77069
  sourceEntries().delete(packagePath);
76990
77070
  }
76991
- var import_node_async_hooks, import_node_child_process46, import_node_crypto45, import_node_fs86, import_node_os18, import_node_path83, ARTIFACT_PATH, 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;
77071
+ var import_node_async_hooks, import_node_child_process46, import_node_crypto45, import_node_fs86, import_node_os18, import_node_path83, ARTIFACT_PATH, 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;
76992
77072
  var init_swift_host = __esm({
76993
77073
  "src/swift-host.ts"() {
76994
77074
  "use strict";
@@ -77042,6 +77122,7 @@ var init_swift_host = __esm({
77042
77122
  sharedXcodeProjects = /* @__PURE__ */ new Map();
77043
77123
  xcodeProjects = () => projectScope.getStore()?.xcodeProjects ?? sharedXcodeProjects;
77044
77124
  preparedScriptInputs = /* @__PURE__ */ new Set();
77125
+ emptyWasmAssembly = /* @__PURE__ */ new Map();
77045
77126
  XCODE_APP_DIR = "__app__";
77046
77127
  XCODE_FRAMEWORKS_DIR = "__frameworks__";
77047
77128
  XCODE_PACKAGES_DIR = SWIFT_REMOTE_PACKAGES_DIR;
@@ -86334,7 +86415,7 @@ var init_nitro_superset = __esm({
86334
86415
  init_nitroContract();
86335
86416
  init_swift_standin_digest();
86336
86417
  NITRO_SUPERSET_ENTRY_NAME = "superset";
86337
- NITRO_COMPILER_DIGEST = true ? "608b1e1ae0987dea6c3662ac92657972a60f85956502d1389192ce91f321d92d" : nitroCompilerSourceDigest(__sootsim_import_meta_dirname, STANDIN_SOURCE_DIGEST2);
86418
+ NITRO_COMPILER_DIGEST = true ? "5586d24405a8b94499b182fe067e8af8be656d9b36558aa6ccbd8c7f9e4150dd" : nitroCompilerSourceDigest(__sootsim_import_meta_dirname, STANDIN_SOURCE_DIGEST2);
86338
86419
  nitroSupersetLock = parseLock(nitro_superset_lock_default);
86339
86420
  nitroSupersetKey = (inputs) => nativeEntryKey({ ...inputs, compiler: NITRO_COMPILER_DIGEST });
86340
86421
  published2 = /* @__PURE__ */ new Map();
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2219 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2221 | (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;
@@ -11061,7 +11061,7 @@ function swiftSubmoduleImports(sources) {
11061
11061
  }
11062
11062
  return imports;
11063
11063
  }
11064
- function swiftObjCModuleMap(module2, headers, submodules = /* @__PURE__ */ new Set()) {
11064
+ function swiftObjCModuleMap(module2, headers, submodules = /* @__PURE__ */ new Set(), swiftHeader) {
11065
11065
  const header = (file) => `header ${JSON.stringify(file)}`;
11066
11066
  const stem = (file) => file.slice(file.lastIndexOf("/") + 1).replace(/\.[^.]*$/, "");
11067
11067
  return [
@@ -11069,6 +11069,7 @@ function swiftObjCModuleMap(module2, headers, submodules = /* @__PURE__ */ new S
11069
11069
  ...headers.map(
11070
11070
  (file) => submodules.has(stem(file)) ? ` module ${stem(file)} { ${header(file)} export * }` : ` ${header(file)}`
11071
11071
  ),
11072
+ ...swiftHeader ? [" module Swift {", ` ${header(swiftHeader)}`, " requires objc", " }"] : [],
11072
11073
  " export *",
11073
11074
  "}",
11074
11075
  ""
@@ -11767,7 +11768,10 @@ function swiftModuleInterface(moduleRoot, name2, interfaceRoot) {
11767
11768
  if (declared.size === 0) return null;
11768
11769
  return { declared, header: clangInterfaceHeader((0, import_node_fs25.readFileSync)(built, "utf8")) };
11769
11770
  }
11770
- var clangInterfaceHeader = (header) => header.replace(/^@import (?:UIKitCore|UIKitText);$/gm, "@import UIKit;").replace(/^@import CoreFoundation;$/gm, "@import Foundation;").replace(/\b_TtC10Foundation\d+(NS\w+)\b/g, "$1").replace(/\b__attribute__\(\(objc_subclassing_restricted\)\)\s*/g, "");
11771
+ var clangInterfaceHeader = (header) => header.replace(/^@import (?:UIKitCore|UIKitText);$/gm, "@import UIKit;").replace(
11772
+ /^@import (?:CoreFoundation|FoundationNetworking);$/gm,
11773
+ "@import Foundation;"
11774
+ ).replace(/\b_TtC10Foundation\d+(NS\w+)\b/g, "$1").replace(/\b__attribute__\(\(objc_subclassing_restricted\)\)\s*/g, "");
11771
11775
  var swiftInterfaceDeclarations = (header) => /* @__PURE__ */ new Set([
11772
11776
  ...[
11773
11777
  ...header.matchAll(
@@ -12605,7 +12609,7 @@ var darwinRecordsRegion = (quoted) => quoted.length ? ["-Wl,--start-lib", ...quo
12605
12609
  var REACTOR_FLAG = '"-Xclang-linker", "-mexec-model=reactor",\n';
12606
12610
  var MULTI_MANIFEST_VERSION = 68;
12607
12611
  var SWIFT_HEADER_PRODUCTS_TARGET = "PeachHeaderProducts";
12608
- var compilerSourceDigest = true ? "0a0bc1c871aee83ea273120655f55a43ddccde646478a452b4c73d2daefd58c3" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
12612
+ var compilerSourceDigest = true ? "2e9f321a97a408a1b3b8b7d85bbcfb108f0761ed9726b832a3c6c2cc52102806" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
12609
12613
  function swiftArtifactHash(input, release, moduleRoot) {
12610
12614
  const hash = (0, import_node_crypto13.createHash)("sha256");
12611
12615
  hash.update(`swift-compile
@@ -12898,6 +12902,10 @@ function emitSwiftPackageManifest(args) {
12898
12902
  includeImportContext(dependency);
12899
12903
  const importedNativeFlags = [
12900
12904
  ...args.nativeImportFlags?.get(target.name) ?? [],
12905
+ ...[...importContext].flatMap((name2) => {
12906
+ const map = name2 === target.name ? void 0 : args.nativeSwiftHeaderMaps?.get(name2);
12907
+ return map ? ["-fmodule-map-file=" + map] : [];
12908
+ }),
12901
12909
  ...[...importContext].flatMap((name2) => args.native?.get(name2)?.importFlags ?? []),
12902
12910
  ...[...importContext].flatMap((name2) => {
12903
12911
  const flags = targets.find((target2) => target2.name === name2)?.swiftFlags ?? [];
@@ -14762,6 +14770,7 @@ ${swiftProjectFilesProblems(input.projectFiles).join("\n")}`
14762
14770
  )
14763
14771
  );
14764
14772
  const importModuleMaps = /* @__PURE__ */ new Map();
14773
+ const sourceModuleMaps = /* @__PURE__ */ new Map();
14765
14774
  const generatedModuleMaps = [];
14766
14775
  for (const target of targets) {
14767
14776
  const prefix = target.path === "." ? "" : `${target.path}/`;
@@ -14996,6 +15005,10 @@ ${swiftProjectFilesProblems(input.projectFiles).join("\n")}`
14996
15005
  stageTargetFile(target.name, import_node_path27.default.join(layout2.root, modulemap), moduleContents, {
14997
15006
  allowExisting: true
14998
15007
  });
15008
+ sourceModuleMaps.set(swiftTargetModuleName(target.name), {
15009
+ path: import_node_path27.default.join(layout2.root, modulemap),
15010
+ contents: moduleContents.toString()
15011
+ });
14999
15012
  if (modulemap.endsWith("/Modules/module.modulemap")) {
15000
15013
  const framework = import_node_path27.default.posix.dirname(import_node_path27.default.posix.dirname(modulemap));
15001
15014
  for (const [, header] of moduleContents.toString().matchAll(/\bheader\s+"([^"]+)"/g))
@@ -15270,6 +15283,7 @@ ${swiftProjectFilesProblems(input.projectFiles).join("\n")}`
15270
15283
  if (native.size > 0) (0, import_node_fs25.mkdirSync)(headerDirectory, { recursive: true });
15271
15284
  const headerAliasFlags = Object.keys(input.headerAliases ?? {}).length > 0 ? ["-ivfsoverlay", headerSearch.files[0]] : [];
15272
15285
  const nativeHeaderFlags = [...headerAliasFlags];
15286
+ const nativeSwiftHeaderMaps = /* @__PURE__ */ new Map();
15273
15287
  const originalMaps = /* @__PURE__ */ new Map();
15274
15288
  for (const target of input.nativeTargets ?? []) {
15275
15289
  for (const flag of [...target.flags, ...target.cxxFlags]) {
@@ -15300,30 +15314,33 @@ ${swiftProjectFilesProblems(input.projectFiles).join("\n")}`
15300
15314
  );
15301
15315
  const moduleName = swiftTargetModuleName(name2);
15302
15316
  const originalMap = originalMaps.get(moduleName);
15303
- const originalTokens = originalMap ? moduleMapTokens(input.files[originalMap]) : [];
15304
- if (originalMap && originalTokens.some(
15317
+ const stagedMap = sourceModuleMaps.get(moduleName);
15318
+ const originalPath = originalMap ? import_node_path27.default.join(layout2.root, originalMap) : stagedMap?.path;
15319
+ const originalContents = originalMap ? input.files[originalMap] : stagedMap?.contents;
15320
+ const originalTokens = originalContents ? moduleMapTokens(originalContents) : [];
15321
+ if (originalPath && originalTokens.some(
15305
15322
  (token, index) => token === "module" && (originalTokens[index + 1] === "Swift" || originalTokens[index + 1] === `${moduleName}.Swift`)
15306
15323
  )) {
15307
- nativeHeaderFlags.push("-fmodule-map-file=" + import_node_path27.default.join(layout2.root, originalMap));
15324
+ nativeHeaderFlags.push("-fmodule-map-file=" + originalPath);
15325
+ nativeSwiftHeaderMaps.set(name2, originalPath);
15308
15326
  continue;
15309
15327
  }
15310
15328
  files.set(
15311
15329
  modulemap,
15312
- originalMap ? `extern module ${moduleName} ${JSON.stringify(import_node_path27.default.join(layout2.root, originalMap))}
15330
+ originalPath ? `extern module ${moduleName} ${JSON.stringify(originalPath)}
15313
15331
  module ${moduleName}.Swift {
15314
15332
  header ${JSON.stringify(import_node_path27.default.join(headerDirectory, name2 + "-Swift.h"))}
15315
15333
  requires objc
15316
15334
  }
15317
15335
  ` : swiftObjCModuleMap(
15318
15336
  moduleName,
15319
- [
15320
- ...(input.nativeTargets?.find((target) => target.name === name2)?.publicHeaders ?? []).map((header) => import_node_path27.default.join(layout2.root, header)),
15321
- import_node_path27.default.join(headerDirectory, name2 + "-Swift.h")
15322
- ],
15323
- submoduleImports.get(moduleName)
15337
+ (input.nativeTargets?.find((target) => target.name === name2)?.publicHeaders ?? []).map((header) => import_node_path27.default.join(layout2.root, header)),
15338
+ submoduleImports.get(moduleName),
15339
+ import_node_path27.default.join(headerDirectory, name2 + "-Swift.h")
15324
15340
  )
15325
15341
  );
15326
15342
  nativeHeaderFlags.push("-fmodule-map-file=" + modulemap);
15343
+ nativeSwiftHeaderMaps.set(name2, modulemap);
15327
15344
  }
15328
15345
  const modulePlan = (0, import_node_crypto13.createHash)("sha256").update(
15329
15346
  swiftModuleInputFiles(moduleRoot).join("\n")
@@ -15680,6 +15697,7 @@ module ${moduleName}.Swift {
15680
15697
  nativeFlags,
15681
15698
  nativeImportFlags,
15682
15699
  nativeHeaderFlags,
15700
+ nativeSwiftHeaderMaps,
15683
15701
  nativeHeaderDeclarations,
15684
15702
  objcImplementationModules: new Set(
15685
15703
  targets.filter(
@@ -15837,30 +15855,30 @@ module ${moduleName}.Swift {
15837
15855
  )
15838
15856
  ])
15839
15857
  );
15858
+ const producerSet = /* @__PURE__ */ new Set([...Object.keys(nativeHeaderDeclarations), ...producers]);
15859
+ const orderedProducers = [];
15840
15860
  const included = /* @__PURE__ */ new Set();
15841
15861
  const include = (name2) => {
15842
15862
  if (included.has(name2)) return;
15843
15863
  included.add(name2);
15844
15864
  for (const dependency of dependencies.get(name2) ?? []) include(dependency);
15865
+ if (producerSet.has(name2)) orderedProducers.push(name2);
15845
15866
  };
15846
- for (const producer of producers)
15867
+ for (const producer of producerSet)
15847
15868
  for (const dependency of dependencies.get(producer) ?? []) include(dependency);
15869
+ const needsHeaderStages = [...producerSet].some((name2) => included.has(name2));
15870
+ for (const producer of producerSet) include(producer);
15848
15871
  return {
15849
15872
  nativeBuildTargets: [...native].flatMap(([name2, plan]) => [
15850
15873
  ...!plan.mixed && plan.sources.length > 0 ? [name2] : [],
15851
15874
  ...plan.groups?.map((group) => group.name) ?? (plan.late ? [plan.late.name] : [])
15852
15875
  ]),
15853
- headerProducers: [
15854
- .../* @__PURE__ */ new Set([
15855
- ...Object.keys(nativeHeaderDeclarations),
15856
- ...producers.filter((name2) => !included.has(name2))
15857
- ])
15858
- ],
15876
+ headerProducers: orderedProducers,
15859
15877
  emittedHeaderProducers: [
15860
15878
  .../* @__PURE__ */ new Set([...Object.keys(nativeHeaderDeclarations), ...producers])
15861
15879
  ],
15862
15880
  nativeHeaderDeclarations,
15863
- headerProductTarget,
15881
+ headerProductTarget: needsHeaderStages ? void 0 : headerProductTarget,
15864
15882
  targetFailures,
15865
15883
  generatedOwners,
15866
15884
  targetToolset