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
  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;
@@ -10254,7 +10254,8 @@ var FEATURES = [
10254
10254
  "reference-types",
10255
10255
  "sign-ext"
10256
10256
  ];
10257
- var WASM_OPTIMIZE_IDENTITY = `wasm-opt ${import_wasm_opt.BINARYEN_VERSION} -Oz ${FEATURES.join(",")}`;
10257
+ var KEEP_WASM_NAMES = process.env.PEACH_SWIFT_NAMES === "1";
10258
+ var WASM_OPTIMIZE_IDENTITY = `wasm-opt ${import_wasm_opt.BINARYEN_VERSION} -Oz ${FEATURES.join(",")}${KEEP_WASM_NAMES ? " -g" : ""}`;
10258
10259
  var PINNED_BINARYEN_VERSION = "132";
10259
10260
  var BINARYEN_RELEASES = /* @__PURE__ */ new Map([
10260
10261
  [
@@ -10290,6 +10291,7 @@ async function runWasmOpt(file, output, skipPasses, binary) {
10290
10291
  const result = await (0, import_wasm_opt.wasmOpt)(
10291
10292
  [
10292
10293
  "-Oz",
10294
+ ...KEEP_WASM_NAMES ? ["-g"] : [],
10293
10295
  ...skipPasses.flatMap((pass) => ["--skip-pass", pass]),
10294
10296
  ...FEATURES.map((feature) => `--enable-${feature}`),
10295
10297
  file,
@@ -11061,7 +11063,7 @@ function swiftSubmoduleImports(sources) {
11061
11063
  }
11062
11064
  return imports;
11063
11065
  }
11064
- function swiftObjCModuleMap(module2, headers, submodules = /* @__PURE__ */ new Set()) {
11066
+ function swiftObjCModuleMap(module2, headers, submodules = /* @__PURE__ */ new Set(), swiftHeader) {
11065
11067
  const header = (file) => `header ${JSON.stringify(file)}`;
11066
11068
  const stem = (file) => file.slice(file.lastIndexOf("/") + 1).replace(/\.[^.]*$/, "");
11067
11069
  return [
@@ -11069,6 +11071,7 @@ function swiftObjCModuleMap(module2, headers, submodules = /* @__PURE__ */ new S
11069
11071
  ...headers.map(
11070
11072
  (file) => submodules.has(stem(file)) ? ` module ${stem(file)} { ${header(file)} export * }` : ` ${header(file)}`
11071
11073
  ),
11074
+ ...swiftHeader ? [" module Swift {", ` ${header(swiftHeader)}`, " requires objc", " }"] : [],
11072
11075
  " export *",
11073
11076
  "}",
11074
11077
  ""
@@ -11767,7 +11770,10 @@ function swiftModuleInterface(moduleRoot, name2, interfaceRoot) {
11767
11770
  if (declared.size === 0) return null;
11768
11771
  return { declared, header: clangInterfaceHeader((0, import_node_fs25.readFileSync)(built, "utf8")) };
11769
11772
  }
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, "");
11773
+ var clangInterfaceHeader = (header) => header.replace(/^@import (?:UIKitCore|UIKitText);$/gm, "@import UIKit;").replace(
11774
+ /^@import (?:CoreFoundation|FoundationNetworking);$/gm,
11775
+ "@import Foundation;"
11776
+ ).replace(/\b_TtC10Foundation\d+(NS\w+)\b/g, "$1").replace(/\b__attribute__\(\(objc_subclassing_restricted\)\)\s*/g, "");
11771
11777
  var swiftInterfaceDeclarations = (header) => /* @__PURE__ */ new Set([
11772
11778
  ...[
11773
11779
  ...header.matchAll(
@@ -12064,7 +12070,8 @@ var OPTIONAL_FRAMEWORK_DEPENDENCIES = {
12064
12070
  PeachCFNetwork: [],
12065
12071
  JavaScriptCore: ["PeachJavaScriptCore"],
12066
12072
  PeachJavaScriptCore: [],
12067
- GameplayKit: [],
12073
+ // GameplayKit names SpriteKit and SceneKit nodes, as on iOS
12074
+ GameplayKit: ["SpriteKit", "SceneKit", "PeachBox2D", "simd", "GLKit"],
12068
12075
  simd: [],
12069
12076
  ModelIO: ["simd"],
12070
12077
  GLKit: ["ModelIO"],
@@ -12575,10 +12582,21 @@ function swiftTargetDependencies(files, targets, frameworks = OPTIONAL_FRAMEWORK
12575
12582
  return siblings;
12576
12583
  }
12577
12584
  var ONE_PRODUCT = '.product(name: "One", package: "sootsim-swift")';
12578
- var SPRITEKIT_PRODUCT = '.product(name: "SpriteKit", package: "sootsim-swift")';
12579
- var importsSpriteKit = (files) => Object.entries(files).some(
12580
- ([file, contents]) => file.endsWith(".swift") && swiftImportNames(contents).includes("SpriteKit")
12581
- );
12585
+ var GAME_FAMILY = ["SpriteKit", "SceneKit"];
12586
+ var gameProducts = (files) => {
12587
+ const imported = new Set(
12588
+ Object.entries(files).flatMap(
12589
+ ([file, contents]) => file.endsWith(".swift") ? swiftImportNames(contents) : []
12590
+ )
12591
+ );
12592
+ if (imported.has("SceneKit")) return [...GAME_FAMILY];
12593
+ return imported.has("SpriteKit") ? ["SpriteKit"] : [];
12594
+ };
12595
+ var gameProduct = (name2) => `.product(name: "${name2}", package: "sootsim-swift")`;
12596
+ var GAME_REACH = {
12597
+ SpriteKit: ["SpriteKit", "PeachBox2D", "simd", "GLKit"],
12598
+ SceneKit: ["SceneKit"]
12599
+ };
12582
12600
  var FOUNDATION_IMPLICIT_MODULES = [
12583
12601
  "PeachObjC",
12584
12602
  "Dispatch",
@@ -12605,7 +12623,7 @@ var darwinRecordsRegion = (quoted) => quoted.length ? ["-Wl,--start-lib", ...quo
12605
12623
  var REACTOR_FLAG = '"-Xclang-linker", "-mexec-model=reactor",\n';
12606
12624
  var MULTI_MANIFEST_VERSION = 68;
12607
12625
  var SWIFT_HEADER_PRODUCTS_TARGET = "PeachHeaderProducts";
12608
- var compilerSourceDigest = true ? "0a0bc1c871aee83ea273120655f55a43ddccde646478a452b4c73d2daefd58c3" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
12626
+ var compilerSourceDigest = true ? "eba60b7a2e9485f928a6ec2e544e10d84b2b33430be66b9e069c9797a927af86" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
12609
12627
  function swiftArtifactHash(input, release, moduleRoot) {
12610
12628
  const hash = (0, import_node_crypto13.createHash)("sha256");
12611
12629
  hash.update(`swift-compile
@@ -12613,6 +12631,7 @@ ${release}
12613
12631
  `);
12614
12632
  hash.update(compilerSourceDigest);
12615
12633
  if (input.oneModule) hash.update("one-module\n");
12634
+ if (KEEP_WASM_NAMES) hash.update("names\n");
12616
12635
  hash.update(swiftModuleDigest(moduleRoot));
12617
12636
  if (input.optimize) hash.update(`optimize
12618
12637
  ${WASM_OPTIMIZE_IDENTITY}
@@ -12727,7 +12746,14 @@ function toolsetOrdersLibcxxBeforeDarwinOverlay(options) {
12727
12746
  return libcxx >= 0 && overlay > libcxx;
12728
12747
  }
12729
12748
  function emitSwiftPackageManifest(args) {
12730
- const { targets, siblings, moduleRoot, oneModule, spriteKit, distribution } = args;
12749
+ const {
12750
+ targets,
12751
+ siblings,
12752
+ moduleRoot,
12753
+ oneModule,
12754
+ gameProducts: gameProducts2 = [],
12755
+ distribution
12756
+ } = args;
12731
12757
  const prebuilt = args.prebuilt;
12732
12758
  const linkedObjects = Boolean(distribution || prebuilt);
12733
12759
  const cxxFlagsFor = (flags) => args.deferDarwinOverlay ? withoutWasmOverlayIsystem(flags) : flags;
@@ -12756,9 +12782,8 @@ function emitSwiftPackageManifest(args) {
12756
12782
  for (const name2 of [...siblings.values()].flat())
12757
12783
  if (OPTIONAL_FRAMEWORKS.has(name2) && !targets.some((target) => target.name === name2))
12758
12784
  reach(name2);
12759
- if (spriteKit) {
12760
- for (const name2 of ["SpriteKit", "PeachBox2D", "simd", "GLKit"]) reach(name2);
12761
- }
12785
+ for (const product of gameProducts2)
12786
+ for (const name2 of GAME_REACH[product] ?? []) reach(name2);
12762
12787
  let distributionLinkPath;
12763
12788
  const distributionLink = args.distributionLink;
12764
12789
  if (distribution && distributionLink) {
@@ -12781,7 +12806,7 @@ function emitSwiftPackageManifest(args) {
12781
12806
  (object3) => !isProvider(object3) && !replacedObjects.has(object3)
12782
12807
  );
12783
12808
  const objects = available.filter(
12784
- (object3) => !targets.some((target) => object3.startsWith(`lib/${target.name}-`)) && [...OPTIONAL_FRAMEWORKS, "SpriteKit", "PeachBox2D"].every(
12809
+ (object3) => !targets.some((target) => object3.startsWith(`lib/${target.name}-`)) && [...OPTIONAL_FRAMEWORKS, ...GAME_FAMILY, "PeachBox2D"].every(
12785
12810
  (name2) => !object3.startsWith(`lib/${name2}-`) || reachedFrameworks.has(name2)
12786
12811
  )
12787
12812
  );
@@ -12898,6 +12923,10 @@ function emitSwiftPackageManifest(args) {
12898
12923
  includeImportContext(dependency);
12899
12924
  const importedNativeFlags = [
12900
12925
  ...args.nativeImportFlags?.get(target.name) ?? [],
12926
+ ...[...importContext].flatMap((name2) => {
12927
+ const map = name2 === target.name ? void 0 : args.nativeSwiftHeaderMaps?.get(name2);
12928
+ return map ? ["-fmodule-map-file=" + map] : [];
12929
+ }),
12901
12930
  ...[...importContext].flatMap((name2) => args.native?.get(name2)?.importFlags ?? []),
12902
12931
  ...[...importContext].flatMap((name2) => {
12903
12932
  const flags = targets.find((target2) => target2.name === name2)?.swiftFlags ?? [];
@@ -12940,7 +12969,7 @@ function emitSwiftPackageManifest(args) {
12940
12969
  ...linkedObjects || clang && !target.executable ? [] : [
12941
12970
  '.product(name: "SwiftUI", package: "sootsim-swift")',
12942
12971
  ...oneModule ? [ONE_PRODUCT] : [],
12943
- ...spriteKit ? [SPRITEKIT_PRODUCT] : []
12972
+ ...gameProducts2.map(gameProduct)
12944
12973
  ],
12945
12974
  ...(siblings.get(target.name) ?? []).flatMap(
12946
12975
  (dependency) => clang && // textual native headers can include one another without imposing
@@ -12972,7 +13001,7 @@ function emitSwiftPackageManifest(args) {
12972
13001
  .unsafeFlags(${flagArray(`[
12973
13002
  ${REACTOR_FLAG}${executableLinkFlags(args.root)} "-Xlinker", "--export-if-defined=__main_argc_argv"${library},
12974
13003
  ]`)}),
12975
- .unsafeFlags(["-Xlinker", "--strip-all"], .when(configuration: .release)),
13004
+ ${KEEP_WASM_NAMES ? "" : '.unsafeFlags(["-Xlinker", "--strip-all"], .when(configuration: .release)),'}
12976
13005
  ]` : librarySettings.length > 0 ? `,
12977
13006
  linkerSettings: [${librarySettings.join(", ")}]` : "";
12978
13007
  const cDefines = macroSettings(target.cDefines);
@@ -13577,8 +13606,6 @@ var FOUNDATION_OVERLAY_GLOBALS = /* @__PURE__ */ new Set([
13577
13606
  "NSURLProtectionSpaceHTTPS",
13578
13607
  "NSURLProtectionSpaceHTTPSProxy",
13579
13608
  "NSURLProtectionSpaceSOCKSProxy",
13580
- "NSURLSessionDownloadTaskResumeData",
13581
- "NSURLSessionTransferSizeUnknown",
13582
13609
  "NSURLSessionUploadTaskResumeData",
13583
13610
  "NSUTF16BigEndianStringEncoding",
13584
13611
  "NSUTF16LittleEndianStringEncoding",
@@ -14762,6 +14789,7 @@ ${swiftProjectFilesProblems(input.projectFiles).join("\n")}`
14762
14789
  )
14763
14790
  );
14764
14791
  const importModuleMaps = /* @__PURE__ */ new Map();
14792
+ const sourceModuleMaps = /* @__PURE__ */ new Map();
14765
14793
  const generatedModuleMaps = [];
14766
14794
  for (const target of targets) {
14767
14795
  const prefix = target.path === "." ? "" : `${target.path}/`;
@@ -14996,6 +15024,10 @@ ${swiftProjectFilesProblems(input.projectFiles).join("\n")}`
14996
15024
  stageTargetFile(target.name, import_node_path27.default.join(layout2.root, modulemap), moduleContents, {
14997
15025
  allowExisting: true
14998
15026
  });
15027
+ sourceModuleMaps.set(swiftTargetModuleName(target.name), {
15028
+ path: import_node_path27.default.join(layout2.root, modulemap),
15029
+ contents: moduleContents.toString()
15030
+ });
14999
15031
  if (modulemap.endsWith("/Modules/module.modulemap")) {
15000
15032
  const framework = import_node_path27.default.posix.dirname(import_node_path27.default.posix.dirname(modulemap));
15001
15033
  for (const [, header] of moduleContents.toString().matchAll(/\bheader\s+"([^"]+)"/g))
@@ -15270,6 +15302,7 @@ ${swiftProjectFilesProblems(input.projectFiles).join("\n")}`
15270
15302
  if (native.size > 0) (0, import_node_fs25.mkdirSync)(headerDirectory, { recursive: true });
15271
15303
  const headerAliasFlags = Object.keys(input.headerAliases ?? {}).length > 0 ? ["-ivfsoverlay", headerSearch.files[0]] : [];
15272
15304
  const nativeHeaderFlags = [...headerAliasFlags];
15305
+ const nativeSwiftHeaderMaps = /* @__PURE__ */ new Map();
15273
15306
  const originalMaps = /* @__PURE__ */ new Map();
15274
15307
  for (const target of input.nativeTargets ?? []) {
15275
15308
  for (const flag of [...target.flags, ...target.cxxFlags]) {
@@ -15300,30 +15333,33 @@ ${swiftProjectFilesProblems(input.projectFiles).join("\n")}`
15300
15333
  );
15301
15334
  const moduleName = swiftTargetModuleName(name2);
15302
15335
  const originalMap = originalMaps.get(moduleName);
15303
- const originalTokens = originalMap ? moduleMapTokens(input.files[originalMap]) : [];
15304
- if (originalMap && originalTokens.some(
15336
+ const stagedMap = sourceModuleMaps.get(moduleName);
15337
+ const originalPath = originalMap ? import_node_path27.default.join(layout2.root, originalMap) : stagedMap?.path;
15338
+ const originalContents = originalMap ? input.files[originalMap] : stagedMap?.contents;
15339
+ const originalTokens = originalContents ? moduleMapTokens(originalContents) : [];
15340
+ if (originalPath && originalTokens.some(
15305
15341
  (token, index) => token === "module" && (originalTokens[index + 1] === "Swift" || originalTokens[index + 1] === `${moduleName}.Swift`)
15306
15342
  )) {
15307
- nativeHeaderFlags.push("-fmodule-map-file=" + import_node_path27.default.join(layout2.root, originalMap));
15343
+ nativeHeaderFlags.push("-fmodule-map-file=" + originalPath);
15344
+ nativeSwiftHeaderMaps.set(name2, originalPath);
15308
15345
  continue;
15309
15346
  }
15310
15347
  files.set(
15311
15348
  modulemap,
15312
- originalMap ? `extern module ${moduleName} ${JSON.stringify(import_node_path27.default.join(layout2.root, originalMap))}
15349
+ originalPath ? `extern module ${moduleName} ${JSON.stringify(originalPath)}
15313
15350
  module ${moduleName}.Swift {
15314
15351
  header ${JSON.stringify(import_node_path27.default.join(headerDirectory, name2 + "-Swift.h"))}
15315
15352
  requires objc
15316
15353
  }
15317
15354
  ` : swiftObjCModuleMap(
15318
15355
  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)
15356
+ (input.nativeTargets?.find((target) => target.name === name2)?.publicHeaders ?? []).map((header) => import_node_path27.default.join(layout2.root, header)),
15357
+ submoduleImports.get(moduleName),
15358
+ import_node_path27.default.join(headerDirectory, name2 + "-Swift.h")
15324
15359
  )
15325
15360
  );
15326
15361
  nativeHeaderFlags.push("-fmodule-map-file=" + modulemap);
15362
+ nativeSwiftHeaderMaps.set(name2, modulemap);
15327
15363
  }
15328
15364
  const modulePlan = (0, import_node_crypto13.createHash)("sha256").update(
15329
15365
  swiftModuleInputFiles(moduleRoot).join("\n")
@@ -15574,14 +15610,17 @@ module ${moduleName}.Swift {
15574
15610
  manifest = manifest.replace(product, `${product}
15575
15611
  ${ONE_PRODUCT},`).replace(flags, `${flags}${ONE_IMPLICIT_FLAGS}`);
15576
15612
  }
15577
- if (importsSpriteKit(input.files)) {
15613
+ const games = gameProducts(input.files);
15614
+ if (games.length > 0) {
15578
15615
  const anchor = '.product(name: "CoreLocation", package: "sootsim-swift"),';
15579
15616
  if (!manifest.includes(anchor))
15580
15617
  throw new Error(
15581
- "scripts/contrast-app-Package.swift lost the line the SpriteKit product links at"
15618
+ "scripts/contrast-app-Package.swift lost the line the game products link at"
15582
15619
  );
15583
- manifest = manifest.replace(anchor, `${anchor}
15584
- ${SPRITEKIT_PRODUCT},`);
15620
+ manifest = manifest.replace(
15621
+ anchor,
15622
+ [anchor, ...games.map((name2) => `${gameProduct(name2)},`)].join("\n ")
15623
+ );
15585
15624
  }
15586
15625
  files.set(import_node_path27.default.join(layout2.root, "Package.swift"), manifest + moduleFiles);
15587
15626
  } else {
@@ -15680,6 +15719,7 @@ module ${moduleName}.Swift {
15680
15719
  nativeFlags,
15681
15720
  nativeImportFlags,
15682
15721
  nativeHeaderFlags,
15722
+ nativeSwiftHeaderMaps,
15683
15723
  nativeHeaderDeclarations,
15684
15724
  objcImplementationModules: new Set(
15685
15725
  targets.filter(
@@ -15695,7 +15735,7 @@ module ${moduleName}.Swift {
15695
15735
  siblings: moduleSiblings,
15696
15736
  moduleRoot,
15697
15737
  oneModule: input.oneModule,
15698
- spriteKit: importsSpriteKit(input.files),
15738
+ gameProducts: gameProducts(input.files),
15699
15739
  distribution: distribution ?? void 0,
15700
15740
  moduleExcludes,
15701
15741
  deferDarwinOverlay: native.size > 0 && toolsetOrdersLibcxxBeforeDarwinOverlay(
@@ -15837,30 +15877,30 @@ module ${moduleName}.Swift {
15837
15877
  )
15838
15878
  ])
15839
15879
  );
15880
+ const producerSet = /* @__PURE__ */ new Set([...Object.keys(nativeHeaderDeclarations), ...producers]);
15881
+ const orderedProducers = [];
15840
15882
  const included = /* @__PURE__ */ new Set();
15841
15883
  const include = (name2) => {
15842
15884
  if (included.has(name2)) return;
15843
15885
  included.add(name2);
15844
15886
  for (const dependency of dependencies.get(name2) ?? []) include(dependency);
15887
+ if (producerSet.has(name2)) orderedProducers.push(name2);
15845
15888
  };
15846
- for (const producer of producers)
15889
+ for (const producer of producerSet)
15847
15890
  for (const dependency of dependencies.get(producer) ?? []) include(dependency);
15891
+ const needsHeaderStages = [...producerSet].some((name2) => included.has(name2));
15892
+ for (const producer of producerSet) include(producer);
15848
15893
  return {
15849
15894
  nativeBuildTargets: [...native].flatMap(([name2, plan]) => [
15850
15895
  ...!plan.mixed && plan.sources.length > 0 ? [name2] : [],
15851
15896
  ...plan.groups?.map((group) => group.name) ?? (plan.late ? [plan.late.name] : [])
15852
15897
  ]),
15853
- headerProducers: [
15854
- .../* @__PURE__ */ new Set([
15855
- ...Object.keys(nativeHeaderDeclarations),
15856
- ...producers.filter((name2) => !included.has(name2))
15857
- ])
15858
- ],
15898
+ headerProducers: orderedProducers,
15859
15899
  emittedHeaderProducers: [
15860
15900
  .../* @__PURE__ */ new Set([...Object.keys(nativeHeaderDeclarations), ...producers])
15861
15901
  ],
15862
15902
  nativeHeaderDeclarations,
15863
- headerProductTarget,
15903
+ headerProductTarget: needsHeaderStages ? void 0 : headerProductTarget,
15864
15904
  targetFailures,
15865
15905
  generatedOwners,
15866
15906
  targetToolset
@@ -16102,14 +16142,9 @@ function linkedFrameworkTargets(moduleRoot, input) {
16102
16142
  ))
16103
16143
  reach(match[1]);
16104
16144
  }
16105
- if (importsSpriteKit(input.files))
16106
- for (const name2 of ["SpriteKit", "PeachBox2D", "simd", "GLKit"]) reach(name2);
16107
- const wanted = [
16108
- "PeachApp",
16109
- ...input.oneModule ? ["One"] : [],
16110
- ...importsSpriteKit(input.files) ? ["SpriteKit"] : [],
16111
- ...reached
16112
- ];
16145
+ const games = gameProducts(input.files);
16146
+ for (const product of games) for (const name2 of GAME_REACH[product] ?? []) reach(name2);
16147
+ const wanted = ["PeachApp", ...input.oneModule ? ["One"] : [], ...games, ...reached];
16113
16148
  const linked = [...new Set(wanted)].filter((name2) => libraries.has(name2));
16114
16149
  if (!linked.includes("PeachApp"))
16115
16150
  throw new Error("swift-compile: the framework package declares no PeachApp library");