peachsim 0.1.2220 → 0.1.2222

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 (128) hide show
  1. package/cli/commands/compat.ts +4 -4
  2. package/cli/commands/inspect.ts +4 -4
  3. package/cli/commands/report-issue.ts +1 -1
  4. package/cli/runtime-compat.ts +7 -2
  5. package/dist-lib/agent-daemon-client.cjs +1 -1
  6. package/dist-lib/agent-events.cjs +1 -1
  7. package/dist-lib/attached-projects.cjs +1 -1
  8. package/dist-lib/auth/shared-session.cjs +1 -1
  9. package/dist-lib/backend-origin.cjs +1 -1
  10. package/dist-lib/beta.cjs +1 -1
  11. package/dist-lib/beta.mjs +1 -1
  12. package/dist-lib/bridge-constants.cjs +1 -1
  13. package/dist-lib/bridge-contract-input.cjs +1 -1
  14. package/dist-lib/bridge-contract-input.mjs +1 -1
  15. package/dist-lib/bridge-contract.cjs +1 -1
  16. package/dist-lib/bridge-contract.mjs +1 -1
  17. package/dist-lib/bundle-channel.cjs +475 -381
  18. package/dist-lib/capture-contract.cjs +1 -1
  19. package/dist-lib/capture-contract.mjs +1 -1
  20. package/dist-lib/cloud-contract.cjs +1 -1
  21. package/dist-lib/cloud-contract.mjs +1 -1
  22. package/dist-lib/cloud-test-args.cjs +1 -1
  23. package/dist-lib/cloud-test-args.mjs +1 -1
  24. package/dist-lib/cloud.cjs +1 -1
  25. package/dist-lib/cloud.mjs +1 -1
  26. package/dist-lib/config.cjs +1 -1
  27. package/dist-lib/config.mjs +1 -1
  28. package/dist-lib/detox/index.cjs +3 -2
  29. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  30. package/dist-lib/expo-swift-bundle.cjs +472 -379
  31. package/dist-lib/expo-swift-metadata.cjs +1 -1
  32. package/dist-lib/expo-swift-metadata.mjs +1 -1
  33. package/dist-lib/home-paths.cjs +1 -1
  34. package/dist-lib/host/bridge-host.cjs +695 -574
  35. package/dist-lib/host/fetch-proxy-handler.cjs +10 -7
  36. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  37. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  38. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  39. package/dist-lib/host/websocket-proxy.cjs +1 -1
  40. package/dist-lib/index.cjs +8232 -7815
  41. package/dist-lib/jump-to-source-babel.cjs +1 -1
  42. package/dist-lib/jump-to-source-native.cjs +1 -1
  43. package/dist-lib/kotlin-host.cjs +1 -1
  44. package/dist-lib/menu.cjs +1 -1
  45. package/dist-lib/menu.mjs +1 -1
  46. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  47. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  48. package/dist-lib/metro-production-bundle.cjs +1 -1
  49. package/dist-lib/metro-production-bundle.mjs +1 -1
  50. package/dist-lib/metro.cjs +8146 -7737
  51. package/dist-lib/native-app-identity-project.cjs +331 -13
  52. package/dist-lib/native-app-identity-project.mjs +331 -13
  53. package/dist-lib/native-app-identity.cjs +16 -3
  54. package/dist-lib/native-app-identity.mjs +16 -3
  55. package/dist-lib/native-firebase-metadata.cjs +1 -1
  56. package/dist-lib/native-firebase-metadata.mjs +1 -1
  57. package/dist-lib/pdfium-raster.cjs +1 -1
  58. package/dist-lib/pdfium-raster.mjs +1 -1
  59. package/dist-lib/plist.cjs +1 -1
  60. package/dist-lib/plist.mjs +1 -1
  61. package/dist-lib/profiles.cjs +1 -1
  62. package/dist-lib/public-brand.cjs +1 -1
  63. package/dist-lib/public-origins-lib-esm.json +25 -24
  64. package/dist-lib/public-origins-lib.json +99 -96
  65. package/dist-lib/react-native-host-modules.cjs +1 -1
  66. package/dist-lib/react-native-host-modules.mjs +1 -1
  67. package/dist-lib/reap-browser.cjs +1 -1
  68. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  69. package/dist-lib/sdk.cjs +1 -1
  70. package/dist-lib/sdk.mjs +1 -1
  71. package/dist-lib/skills.cjs +532 -420
  72. package/dist-lib/swift-compile.cjs +84 -49
  73. package/dist-lib/swift-compile.mjs +84 -49
  74. package/dist-lib/swift-package.cjs +1 -1
  75. package/dist-lib/swift-package.mjs +1 -1
  76. package/dist-lib/swift-submit.cjs +1 -1
  77. package/dist-lib/swift-submit.mjs +1 -1
  78. package/dist-lib/swift-toolchain.cjs +1 -1
  79. package/dist-lib/swift.cjs +1 -1
  80. package/dist-lib/vite-swift.cjs +158 -69
  81. package/dist-lib/vite.cjs +2930 -2800
  82. package/dist-lib/worklet-executable.cjs +1 -1
  83. package/dist-lib/worklet-executable.mjs +1 -1
  84. package/dist-types/packages/peach-engine/src/cli-companion.d.ts +1 -0
  85. package/dist-types/packages/peach-engine/src/cli-host-terser.d.ts +7 -0
  86. package/dist-types/packages/peach-engine/src/engine/glass-material.d.ts +1 -1
  87. package/dist-types/packages/peach-engine/src/engine/liquid-glass.d.ts +1 -0
  88. package/dist-types/packages/peach-engine/src/engine/native-layout.d.ts +1 -0
  89. package/dist-types/packages/peach-engine/src/engine/node.d.ts +5 -0
  90. package/dist-types/packages/peach-engine/src/engine/scene-table.d.ts +8 -1
  91. package/dist-types/packages/peach-engine/src/engine/types.d.ts +3 -0
  92. package/dist-types/packages/peach-engine/src/engine/yoga-layout.d.ts +1 -1
  93. package/dist-types/packages/peach-engine/src/remote-stream/cloud-display.d.ts +2 -2
  94. package/dist-types/packages/peach-engine/src/render-worker/compositor-protocol.d.ts +1 -0
  95. package/dist-types/packages/peach-engine/src/render-worker/shell-tree-wire.d.ts +1 -2
  96. package/dist-types/packages/peach-kit/src/internal.d.ts +1 -0
  97. package/dist-types/packages/peach-kit/src/ios-tint.d.ts +1 -0
  98. package/dist-types/packages/peach-kit/src/transitions/screen-transition-math.d.ts +25 -0
  99. package/kotlin/sdk.tar.gz +0 -0
  100. package/package.json +1 -1
  101. package/runtime-companion.json +1 -1
  102. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNAnimation.h +4 -4
  103. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNCameraController.h +1 -1
  104. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNConstraint.h +5 -5
  105. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNGeometry.h +1 -1
  106. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNLevelOfDetail.h +1 -1
  107. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNParametricGeometry.h +9 -9
  108. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNParticleSystem.h +1 -1
  109. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNPhysicsBehavior.h +7 -7
  110. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNRenderer.h +1 -1
  111. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNShadable.h +1 -1
  112. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNTechnique.h +1 -1
  113. package/sdk/ios/System/Library/Frameworks/UIKit.framework/Headers/NSLayoutConstraint.h +1 -8
  114. package/sdk/ios/System/Library/Frameworks/UIKit.framework/Modules/module.modulemap +1 -0
  115. package/sdk/ios/System/Library/Frameworks/UIKitTypes.framework/Headers/UIKitTypes.h +1 -0
  116. package/sdk/ios/System/Library/Frameworks/UIKitTypes.framework/Headers/UILayoutPriority.h +11 -0
  117. package/src/cli-runtime.ts +1 -0
  118. package/src/expo-native-workspace.ts +14 -10
  119. package/src/expo-workspace-exclusion.ts +10 -7
  120. package/src/react-native-autolinking.ts +2 -1
  121. package/src/runtime-delivery.ts +7 -0
  122. package/src/swift-compile.ts +90 -54
  123. package/src/swift-coverage/xcode-assets.ts +4 -2
  124. package/src/swift-host.ts +53 -14
  125. package/src/swift-objc-import.ts +4 -0
  126. package/src/wasm-optimize.ts +5 -1
  127. package/src/xcode-project.ts +26 -5
  128. package/src/xcode-target-members.ts +25 -3
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2220 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2222 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/swift-compile.ts
4
4
  import {
@@ -10209,7 +10209,8 @@ var FEATURES = [
10209
10209
  "reference-types",
10210
10210
  "sign-ext"
10211
10211
  ];
10212
- var WASM_OPTIMIZE_IDENTITY = `wasm-opt ${BINARYEN_VERSION} -Oz ${FEATURES.join(",")}`;
10212
+ var KEEP_WASM_NAMES = process.env.PEACH_SWIFT_NAMES === "1";
10213
+ var WASM_OPTIMIZE_IDENTITY = `wasm-opt ${BINARYEN_VERSION} -Oz ${FEATURES.join(",")}${KEEP_WASM_NAMES ? " -g" : ""}`;
10213
10214
  var PINNED_BINARYEN_VERSION = "132";
10214
10215
  var BINARYEN_RELEASES = /* @__PURE__ */ new Map([
10215
10216
  [
@@ -10245,6 +10246,7 @@ async function runWasmOpt(file, output, skipPasses, binary) {
10245
10246
  const result = await wasmOpt(
10246
10247
  [
10247
10248
  "-Oz",
10249
+ ...KEEP_WASM_NAMES ? ["-g"] : [],
10248
10250
  ...skipPasses.flatMap((pass) => ["--skip-pass", pass]),
10249
10251
  ...FEATURES.map((feature) => `--enable-${feature}`),
10250
10252
  file,
@@ -11022,7 +11024,7 @@ function swiftSubmoduleImports(sources) {
11022
11024
  }
11023
11025
  return imports;
11024
11026
  }
11025
- function swiftObjCModuleMap(module, headers, submodules = /* @__PURE__ */ new Set()) {
11027
+ function swiftObjCModuleMap(module, headers, submodules = /* @__PURE__ */ new Set(), swiftHeader) {
11026
11028
  const header = (file) => `header ${JSON.stringify(file)}`;
11027
11029
  const stem = (file) => file.slice(file.lastIndexOf("/") + 1).replace(/\.[^.]*$/, "");
11028
11030
  return [
@@ -11030,6 +11032,7 @@ function swiftObjCModuleMap(module, headers, submodules = /* @__PURE__ */ new Se
11030
11032
  ...headers.map(
11031
11033
  (file) => submodules.has(stem(file)) ? ` module ${stem(file)} { ${header(file)} export * }` : ` ${header(file)}`
11032
11034
  ),
11035
+ ...swiftHeader ? [" module Swift {", ` ${header(swiftHeader)}`, " requires objc", " }"] : [],
11033
11036
  " export *",
11034
11037
  "}",
11035
11038
  ""
@@ -11746,7 +11749,10 @@ function swiftModuleInterface(moduleRoot, name2, interfaceRoot) {
11746
11749
  if (declared.size === 0) return null;
11747
11750
  return { declared, header: clangInterfaceHeader(readFileSync16(built, "utf8")) };
11748
11751
  }
11749
- 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, "");
11752
+ var clangInterfaceHeader = (header) => header.replace(/^@import (?:UIKitCore|UIKitText);$/gm, "@import UIKit;").replace(
11753
+ /^@import (?:CoreFoundation|FoundationNetworking);$/gm,
11754
+ "@import Foundation;"
11755
+ ).replace(/\b_TtC10Foundation\d+(NS\w+)\b/g, "$1").replace(/\b__attribute__\(\(objc_subclassing_restricted\)\)\s*/g, "");
11750
11756
  var swiftInterfaceDeclarations = (header) => /* @__PURE__ */ new Set([
11751
11757
  ...[
11752
11758
  ...header.matchAll(
@@ -12043,7 +12049,8 @@ var OPTIONAL_FRAMEWORK_DEPENDENCIES = {
12043
12049
  PeachCFNetwork: [],
12044
12050
  JavaScriptCore: ["PeachJavaScriptCore"],
12045
12051
  PeachJavaScriptCore: [],
12046
- GameplayKit: [],
12052
+ // GameplayKit names SpriteKit and SceneKit nodes, as on iOS
12053
+ GameplayKit: ["SpriteKit", "SceneKit", "PeachBox2D", "simd", "GLKit"],
12047
12054
  simd: [],
12048
12055
  ModelIO: ["simd"],
12049
12056
  GLKit: ["ModelIO"],
@@ -12554,10 +12561,21 @@ function swiftTargetDependencies(files, targets, frameworks = OPTIONAL_FRAMEWORK
12554
12561
  return siblings;
12555
12562
  }
12556
12563
  var ONE_PRODUCT = '.product(name: "One", package: "sootsim-swift")';
12557
- var SPRITEKIT_PRODUCT = '.product(name: "SpriteKit", package: "sootsim-swift")';
12558
- var importsSpriteKit = (files) => Object.entries(files).some(
12559
- ([file, contents]) => file.endsWith(".swift") && swiftImportNames(contents).includes("SpriteKit")
12560
- );
12564
+ var GAME_FAMILY = ["SpriteKit", "SceneKit"];
12565
+ var gameProducts = (files) => {
12566
+ const imported = new Set(
12567
+ Object.entries(files).flatMap(
12568
+ ([file, contents]) => file.endsWith(".swift") ? swiftImportNames(contents) : []
12569
+ )
12570
+ );
12571
+ if (imported.has("SceneKit")) return [...GAME_FAMILY];
12572
+ return imported.has("SpriteKit") ? ["SpriteKit"] : [];
12573
+ };
12574
+ var gameProduct = (name2) => `.product(name: "${name2}", package: "sootsim-swift")`;
12575
+ var GAME_REACH = {
12576
+ SpriteKit: ["SpriteKit", "PeachBox2D", "simd", "GLKit"],
12577
+ SceneKit: ["SceneKit"]
12578
+ };
12561
12579
  var FOUNDATION_IMPLICIT_MODULES = [
12562
12580
  "PeachObjC",
12563
12581
  "Dispatch",
@@ -12584,7 +12602,7 @@ var darwinRecordsRegion = (quoted) => quoted.length ? ["-Wl,--start-lib", ...quo
12584
12602
  var REACTOR_FLAG = '"-Xclang-linker", "-mexec-model=reactor",\n';
12585
12603
  var MULTI_MANIFEST_VERSION = 68;
12586
12604
  var SWIFT_HEADER_PRODUCTS_TARGET = "PeachHeaderProducts";
12587
- var compilerSourceDigest = true ? "0a0bc1c871aee83ea273120655f55a43ddccde646478a452b4c73d2daefd58c3" : swiftCompilerSourceDigest(import.meta.dirname);
12605
+ var compilerSourceDigest = true ? "eba60b7a2e9485f928a6ec2e544e10d84b2b33430be66b9e069c9797a927af86" : swiftCompilerSourceDigest(import.meta.dirname);
12588
12606
  function swiftArtifactHash(input, release, moduleRoot) {
12589
12607
  const hash = createHash13("sha256");
12590
12608
  hash.update(`swift-compile
@@ -12592,6 +12610,7 @@ ${release}
12592
12610
  `);
12593
12611
  hash.update(compilerSourceDigest);
12594
12612
  if (input.oneModule) hash.update("one-module\n");
12613
+ if (KEEP_WASM_NAMES) hash.update("names\n");
12595
12614
  hash.update(swiftModuleDigest(moduleRoot));
12596
12615
  if (input.optimize) hash.update(`optimize
12597
12616
  ${WASM_OPTIMIZE_IDENTITY}
@@ -12706,7 +12725,14 @@ function toolsetOrdersLibcxxBeforeDarwinOverlay(options) {
12706
12725
  return libcxx >= 0 && overlay > libcxx;
12707
12726
  }
12708
12727
  function emitSwiftPackageManifest(args) {
12709
- const { targets, siblings, moduleRoot, oneModule, spriteKit, distribution } = args;
12728
+ const {
12729
+ targets,
12730
+ siblings,
12731
+ moduleRoot,
12732
+ oneModule,
12733
+ gameProducts: gameProducts2 = [],
12734
+ distribution
12735
+ } = args;
12710
12736
  const prebuilt = args.prebuilt;
12711
12737
  const linkedObjects = Boolean(distribution || prebuilt);
12712
12738
  const cxxFlagsFor = (flags) => args.deferDarwinOverlay ? withoutWasmOverlayIsystem(flags) : flags;
@@ -12735,9 +12761,8 @@ function emitSwiftPackageManifest(args) {
12735
12761
  for (const name2 of [...siblings.values()].flat())
12736
12762
  if (OPTIONAL_FRAMEWORKS.has(name2) && !targets.some((target) => target.name === name2))
12737
12763
  reach(name2);
12738
- if (spriteKit) {
12739
- for (const name2 of ["SpriteKit", "PeachBox2D", "simd", "GLKit"]) reach(name2);
12740
- }
12764
+ for (const product of gameProducts2)
12765
+ for (const name2 of GAME_REACH[product] ?? []) reach(name2);
12741
12766
  let distributionLinkPath;
12742
12767
  const distributionLink = args.distributionLink;
12743
12768
  if (distribution && distributionLink) {
@@ -12760,7 +12785,7 @@ function emitSwiftPackageManifest(args) {
12760
12785
  (object3) => !isProvider(object3) && !replacedObjects.has(object3)
12761
12786
  );
12762
12787
  const objects = available.filter(
12763
- (object3) => !targets.some((target) => object3.startsWith(`lib/${target.name}-`)) && [...OPTIONAL_FRAMEWORKS, "SpriteKit", "PeachBox2D"].every(
12788
+ (object3) => !targets.some((target) => object3.startsWith(`lib/${target.name}-`)) && [...OPTIONAL_FRAMEWORKS, ...GAME_FAMILY, "PeachBox2D"].every(
12764
12789
  (name2) => !object3.startsWith(`lib/${name2}-`) || reachedFrameworks.has(name2)
12765
12790
  )
12766
12791
  );
@@ -12877,6 +12902,10 @@ function emitSwiftPackageManifest(args) {
12877
12902
  includeImportContext(dependency);
12878
12903
  const importedNativeFlags = [
12879
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
+ }),
12880
12909
  ...[...importContext].flatMap((name2) => args.native?.get(name2)?.importFlags ?? []),
12881
12910
  ...[...importContext].flatMap((name2) => {
12882
12911
  const flags = targets.find((target2) => target2.name === name2)?.swiftFlags ?? [];
@@ -12919,7 +12948,7 @@ function emitSwiftPackageManifest(args) {
12919
12948
  ...linkedObjects || clang && !target.executable ? [] : [
12920
12949
  '.product(name: "SwiftUI", package: "sootsim-swift")',
12921
12950
  ...oneModule ? [ONE_PRODUCT] : [],
12922
- ...spriteKit ? [SPRITEKIT_PRODUCT] : []
12951
+ ...gameProducts2.map(gameProduct)
12923
12952
  ],
12924
12953
  ...(siblings.get(target.name) ?? []).flatMap(
12925
12954
  (dependency) => clang && // textual native headers can include one another without imposing
@@ -12951,7 +12980,7 @@ function emitSwiftPackageManifest(args) {
12951
12980
  .unsafeFlags(${flagArray(`[
12952
12981
  ${REACTOR_FLAG}${executableLinkFlags(args.root)} "-Xlinker", "--export-if-defined=__main_argc_argv"${library},
12953
12982
  ]`)}),
12954
- .unsafeFlags(["-Xlinker", "--strip-all"], .when(configuration: .release)),
12983
+ ${KEEP_WASM_NAMES ? "" : '.unsafeFlags(["-Xlinker", "--strip-all"], .when(configuration: .release)),'}
12955
12984
  ]` : librarySettings.length > 0 ? `,
12956
12985
  linkerSettings: [${librarySettings.join(", ")}]` : "";
12957
12986
  const cDefines = macroSettings(target.cDefines);
@@ -13556,8 +13585,6 @@ var FOUNDATION_OVERLAY_GLOBALS = /* @__PURE__ */ new Set([
13556
13585
  "NSURLProtectionSpaceHTTPS",
13557
13586
  "NSURLProtectionSpaceHTTPSProxy",
13558
13587
  "NSURLProtectionSpaceSOCKSProxy",
13559
- "NSURLSessionDownloadTaskResumeData",
13560
- "NSURLSessionTransferSizeUnknown",
13561
13588
  "NSURLSessionUploadTaskResumeData",
13562
13589
  "NSUTF16BigEndianStringEncoding",
13563
13590
  "NSUTF16LittleEndianStringEncoding",
@@ -14741,6 +14768,7 @@ ${swiftProjectFilesProblems(input.projectFiles).join("\n")}`
14741
14768
  )
14742
14769
  );
14743
14770
  const importModuleMaps = /* @__PURE__ */ new Map();
14771
+ const sourceModuleMaps = /* @__PURE__ */ new Map();
14744
14772
  const generatedModuleMaps = [];
14745
14773
  for (const target of targets) {
14746
14774
  const prefix = target.path === "." ? "" : `${target.path}/`;
@@ -14975,6 +15003,10 @@ ${swiftProjectFilesProblems(input.projectFiles).join("\n")}`
14975
15003
  stageTargetFile(target.name, path27.join(layout2.root, modulemap), moduleContents, {
14976
15004
  allowExisting: true
14977
15005
  });
15006
+ sourceModuleMaps.set(swiftTargetModuleName(target.name), {
15007
+ path: path27.join(layout2.root, modulemap),
15008
+ contents: moduleContents.toString()
15009
+ });
14978
15010
  if (modulemap.endsWith("/Modules/module.modulemap")) {
14979
15011
  const framework = path27.posix.dirname(path27.posix.dirname(modulemap));
14980
15012
  for (const [, header] of moduleContents.toString().matchAll(/\bheader\s+"([^"]+)"/g))
@@ -15249,6 +15281,7 @@ ${swiftProjectFilesProblems(input.projectFiles).join("\n")}`
15249
15281
  if (native.size > 0) mkdirSync6(headerDirectory, { recursive: true });
15250
15282
  const headerAliasFlags = Object.keys(input.headerAliases ?? {}).length > 0 ? ["-ivfsoverlay", headerSearch.files[0]] : [];
15251
15283
  const nativeHeaderFlags = [...headerAliasFlags];
15284
+ const nativeSwiftHeaderMaps = /* @__PURE__ */ new Map();
15252
15285
  const originalMaps = /* @__PURE__ */ new Map();
15253
15286
  for (const target of input.nativeTargets ?? []) {
15254
15287
  for (const flag of [...target.flags, ...target.cxxFlags]) {
@@ -15279,30 +15312,33 @@ ${swiftProjectFilesProblems(input.projectFiles).join("\n")}`
15279
15312
  );
15280
15313
  const moduleName = swiftTargetModuleName(name2);
15281
15314
  const originalMap = originalMaps.get(moduleName);
15282
- const originalTokens = originalMap ? moduleMapTokens(input.files[originalMap]) : [];
15283
- if (originalMap && originalTokens.some(
15315
+ const stagedMap = sourceModuleMaps.get(moduleName);
15316
+ const originalPath = originalMap ? path27.join(layout2.root, originalMap) : stagedMap?.path;
15317
+ const originalContents = originalMap ? input.files[originalMap] : stagedMap?.contents;
15318
+ const originalTokens = originalContents ? moduleMapTokens(originalContents) : [];
15319
+ if (originalPath && originalTokens.some(
15284
15320
  (token, index) => token === "module" && (originalTokens[index + 1] === "Swift" || originalTokens[index + 1] === `${moduleName}.Swift`)
15285
15321
  )) {
15286
- nativeHeaderFlags.push("-fmodule-map-file=" + path27.join(layout2.root, originalMap));
15322
+ nativeHeaderFlags.push("-fmodule-map-file=" + originalPath);
15323
+ nativeSwiftHeaderMaps.set(name2, originalPath);
15287
15324
  continue;
15288
15325
  }
15289
15326
  files.set(
15290
15327
  modulemap,
15291
- originalMap ? `extern module ${moduleName} ${JSON.stringify(path27.join(layout2.root, originalMap))}
15328
+ originalPath ? `extern module ${moduleName} ${JSON.stringify(originalPath)}
15292
15329
  module ${moduleName}.Swift {
15293
15330
  header ${JSON.stringify(path27.join(headerDirectory, name2 + "-Swift.h"))}
15294
15331
  requires objc
15295
15332
  }
15296
15333
  ` : swiftObjCModuleMap(
15297
15334
  moduleName,
15298
- [
15299
- ...(input.nativeTargets?.find((target) => target.name === name2)?.publicHeaders ?? []).map((header) => path27.join(layout2.root, header)),
15300
- path27.join(headerDirectory, name2 + "-Swift.h")
15301
- ],
15302
- submoduleImports.get(moduleName)
15335
+ (input.nativeTargets?.find((target) => target.name === name2)?.publicHeaders ?? []).map((header) => path27.join(layout2.root, header)),
15336
+ submoduleImports.get(moduleName),
15337
+ path27.join(headerDirectory, name2 + "-Swift.h")
15303
15338
  )
15304
15339
  );
15305
15340
  nativeHeaderFlags.push("-fmodule-map-file=" + modulemap);
15341
+ nativeSwiftHeaderMaps.set(name2, modulemap);
15306
15342
  }
15307
15343
  const modulePlan = createHash13("sha256").update(
15308
15344
  swiftModuleInputFiles(moduleRoot).join("\n")
@@ -15553,14 +15589,17 @@ module ${moduleName}.Swift {
15553
15589
  manifest = manifest.replace(product, `${product}
15554
15590
  ${ONE_PRODUCT},`).replace(flags, `${flags}${ONE_IMPLICIT_FLAGS}`);
15555
15591
  }
15556
- if (importsSpriteKit(input.files)) {
15592
+ const games = gameProducts(input.files);
15593
+ if (games.length > 0) {
15557
15594
  const anchor = '.product(name: "CoreLocation", package: "sootsim-swift"),';
15558
15595
  if (!manifest.includes(anchor))
15559
15596
  throw new Error(
15560
- "scripts/contrast-app-Package.swift lost the line the SpriteKit product links at"
15597
+ "scripts/contrast-app-Package.swift lost the line the game products link at"
15561
15598
  );
15562
- manifest = manifest.replace(anchor, `${anchor}
15563
- ${SPRITEKIT_PRODUCT},`);
15599
+ manifest = manifest.replace(
15600
+ anchor,
15601
+ [anchor, ...games.map((name2) => `${gameProduct(name2)},`)].join("\n ")
15602
+ );
15564
15603
  }
15565
15604
  files.set(path27.join(layout2.root, "Package.swift"), manifest + moduleFiles);
15566
15605
  } else {
@@ -15659,6 +15698,7 @@ module ${moduleName}.Swift {
15659
15698
  nativeFlags,
15660
15699
  nativeImportFlags,
15661
15700
  nativeHeaderFlags,
15701
+ nativeSwiftHeaderMaps,
15662
15702
  nativeHeaderDeclarations,
15663
15703
  objcImplementationModules: new Set(
15664
15704
  targets.filter(
@@ -15674,7 +15714,7 @@ module ${moduleName}.Swift {
15674
15714
  siblings: moduleSiblings,
15675
15715
  moduleRoot,
15676
15716
  oneModule: input.oneModule,
15677
- spriteKit: importsSpriteKit(input.files),
15717
+ gameProducts: gameProducts(input.files),
15678
15718
  distribution: distribution ?? void 0,
15679
15719
  moduleExcludes,
15680
15720
  deferDarwinOverlay: native.size > 0 && toolsetOrdersLibcxxBeforeDarwinOverlay(
@@ -15816,30 +15856,30 @@ module ${moduleName}.Swift {
15816
15856
  )
15817
15857
  ])
15818
15858
  );
15859
+ const producerSet = /* @__PURE__ */ new Set([...Object.keys(nativeHeaderDeclarations), ...producers]);
15860
+ const orderedProducers = [];
15819
15861
  const included = /* @__PURE__ */ new Set();
15820
15862
  const include = (name2) => {
15821
15863
  if (included.has(name2)) return;
15822
15864
  included.add(name2);
15823
15865
  for (const dependency of dependencies.get(name2) ?? []) include(dependency);
15866
+ if (producerSet.has(name2)) orderedProducers.push(name2);
15824
15867
  };
15825
- for (const producer of producers)
15868
+ for (const producer of producerSet)
15826
15869
  for (const dependency of dependencies.get(producer) ?? []) include(dependency);
15870
+ const needsHeaderStages = [...producerSet].some((name2) => included.has(name2));
15871
+ for (const producer of producerSet) include(producer);
15827
15872
  return {
15828
15873
  nativeBuildTargets: [...native].flatMap(([name2, plan]) => [
15829
15874
  ...!plan.mixed && plan.sources.length > 0 ? [name2] : [],
15830
15875
  ...plan.groups?.map((group) => group.name) ?? (plan.late ? [plan.late.name] : [])
15831
15876
  ]),
15832
- headerProducers: [
15833
- .../* @__PURE__ */ new Set([
15834
- ...Object.keys(nativeHeaderDeclarations),
15835
- ...producers.filter((name2) => !included.has(name2))
15836
- ])
15837
- ],
15877
+ headerProducers: orderedProducers,
15838
15878
  emittedHeaderProducers: [
15839
15879
  .../* @__PURE__ */ new Set([...Object.keys(nativeHeaderDeclarations), ...producers])
15840
15880
  ],
15841
15881
  nativeHeaderDeclarations,
15842
- headerProductTarget,
15882
+ headerProductTarget: needsHeaderStages ? void 0 : headerProductTarget,
15843
15883
  targetFailures,
15844
15884
  generatedOwners,
15845
15885
  targetToolset
@@ -16081,14 +16121,9 @@ function linkedFrameworkTargets(moduleRoot, input) {
16081
16121
  ))
16082
16122
  reach(match[1]);
16083
16123
  }
16084
- if (importsSpriteKit(input.files))
16085
- for (const name2 of ["SpriteKit", "PeachBox2D", "simd", "GLKit"]) reach(name2);
16086
- const wanted = [
16087
- "PeachApp",
16088
- ...input.oneModule ? ["One"] : [],
16089
- ...importsSpriteKit(input.files) ? ["SpriteKit"] : [],
16090
- ...reached
16091
- ];
16124
+ const games = gameProducts(input.files);
16125
+ for (const product of games) for (const name2 of GAME_REACH[product] ?? []) reach(name2);
16126
+ const wanted = ["PeachApp", ...input.oneModule ? ["One"] : [], ...games, ...reached];
16092
16127
  const linked = [...new Set(wanted)].filter((name2) => libraries.has(name2));
16093
16128
  if (!linked.includes("PeachApp"))
16094
16129
  throw new Error("swift-compile: the framework package declares no PeachApp library");
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2220 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2222 | (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.2220 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2222 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/swift-package.ts
4
4
  function swiftManifestSettings(target) {
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2220 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2222 | (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.2220 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2222 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/is-record.ts
4
4
  function isRecord(value) {
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2220 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2222 | (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.2220 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2222 | (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;