peachsim 0.1.2221 → 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 (121) hide show
  1. package/cli/commands/compat.ts +4 -4
  2. package/cli/commands/report-issue.ts +1 -1
  3. package/cli/runtime-compat.ts +7 -2
  4. package/dist-lib/agent-daemon-client.cjs +1 -1
  5. package/dist-lib/agent-events.cjs +1 -1
  6. package/dist-lib/attached-projects.cjs +1 -1
  7. package/dist-lib/auth/shared-session.cjs +1 -1
  8. package/dist-lib/backend-origin.cjs +1 -1
  9. package/dist-lib/beta.cjs +1 -1
  10. package/dist-lib/beta.mjs +1 -1
  11. package/dist-lib/bridge-constants.cjs +1 -1
  12. package/dist-lib/bridge-contract-input.cjs +1 -1
  13. package/dist-lib/bridge-contract-input.mjs +1 -1
  14. package/dist-lib/bridge-contract.cjs +1 -1
  15. package/dist-lib/bridge-contract.mjs +1 -1
  16. package/dist-lib/bundle-channel.cjs +438 -362
  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 +3 -2
  28. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  29. package/dist-lib/expo-swift-bundle.cjs +435 -360
  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 +658 -555
  34. package/dist-lib/host/fetch-proxy-handler.cjs +10 -7
  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 +8232 -7815
  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 +8146 -7737
  50. package/dist-lib/native-app-identity-project.cjs +331 -13
  51. package/dist-lib/native-app-identity-project.mjs +331 -13
  52. package/dist-lib/native-app-identity.cjs +16 -3
  53. package/dist-lib/native-app-identity.mjs +16 -3
  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 +25 -24
  63. package/dist-lib/public-origins-lib.json +99 -96
  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 +495 -401
  71. package/dist-lib/swift-compile.cjs +47 -30
  72. package/dist-lib/swift-compile.mjs +47 -30
  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 +121 -50
  80. package/dist-lib/vite.cjs +2930 -2800
  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/cli-companion.d.ts +1 -0
  84. package/dist-types/packages/peach-engine/src/cli-host-terser.d.ts +7 -0
  85. package/dist-types/packages/peach-engine/src/engine/glass-material.d.ts +1 -1
  86. package/dist-types/packages/peach-engine/src/engine/liquid-glass.d.ts +1 -0
  87. package/dist-types/packages/peach-engine/src/engine/native-layout.d.ts +1 -0
  88. package/dist-types/packages/peach-engine/src/engine/node.d.ts +5 -0
  89. package/dist-types/packages/peach-engine/src/engine/scene-table.d.ts +8 -1
  90. package/dist-types/packages/peach-engine/src/engine/types.d.ts +3 -0
  91. package/dist-types/packages/peach-engine/src/engine/yoga-layout.d.ts +1 -1
  92. package/dist-types/packages/peach-engine/src/remote-stream/cloud-display.d.ts +2 -2
  93. package/dist-types/packages/peach-engine/src/render-worker/shell-tree-wire.d.ts +1 -2
  94. package/dist-types/packages/peach-kit/src/internal.d.ts +1 -0
  95. package/dist-types/packages/peach-kit/src/ios-tint.d.ts +1 -0
  96. package/dist-types/packages/peach-kit/src/transitions/screen-transition-math.d.ts +25 -0
  97. package/kotlin/sdk.tar.gz +0 -0
  98. package/package.json +1 -1
  99. package/runtime-companion.json +1 -1
  100. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNAnimation.h +4 -4
  101. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNCameraController.h +1 -1
  102. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNConstraint.h +5 -5
  103. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNGeometry.h +1 -1
  104. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNLevelOfDetail.h +1 -1
  105. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNParametricGeometry.h +9 -9
  106. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNParticleSystem.h +1 -1
  107. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNPhysicsBehavior.h +7 -7
  108. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNRenderer.h +1 -1
  109. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNShadable.h +1 -1
  110. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNTechnique.h +1 -1
  111. package/src/cli-runtime.ts +1 -0
  112. package/src/expo-native-workspace.ts +14 -10
  113. package/src/expo-workspace-exclusion.ts +10 -7
  114. package/src/react-native-autolinking.ts +2 -1
  115. package/src/runtime-delivery.ts +7 -0
  116. package/src/swift-compile.ts +47 -31
  117. package/src/swift-coverage/xcode-assets.ts +4 -2
  118. package/src/swift-host.ts +53 -14
  119. package/src/wasm-optimize.ts +5 -1
  120. package/src/xcode-project.ts +26 -5
  121. package/src/xcode-target-members.ts +25 -3
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2221 | (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;
@@ -39,7 +39,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
39
39
  var define_SWIFT_COVERAGE_SOURCE_DIGESTS_default;
40
40
  var init_define_SWIFT_COVERAGE_SOURCE_DIGESTS = __esm({
41
41
  "<define:__SWIFT_COVERAGE_SOURCE_DIGESTS__>"() {
42
- define_SWIFT_COVERAGE_SOURCE_DIGESTS_default = { "swift-coverage/indexdump.ts": "0d82d8eeb96bf377f409ea7e33274c341a710c0e071f6b6e17571a23d8d92412", "swift-coverage/indexing.ts": "633ccf19eec1f382a8847d0ee1dca42a2792a3c60aafd43622ed5152b09b8272", "swift-coverage/types.ts": "bd8fae54ea6c53e110cd8a5d7b57c1d532dd0166e09fdaea63c4f270c3780dd1", "swift-coverage/source.ts": "c151758a9f67631bc61473c375df0dc017da6902a34533b2cf4fc4fd7d19b6ee", "swift-coverage/package.ts": "1f0068be7461fa7c5a7a891faf318f305cbed2e94c19667ba76627f7e5be260b", "swift-coverage/xcode.ts": "65a500b806ce1c3a496de27f2e0ad77287c0f6795c618342c08af647f92af1fa", "swift-coverage/xcode-assets.ts": "99e03b74c961d2449afd58c2cbc415ba91d1d469a4f89e461c137fd6c305b27c", "swift-coverage/xcode-asset-symbols.ts": "1b2a67733bc9d139b351466270205452a6172140bc25080d72619e2952c44671", "swift-coverage/xcode-bridging.ts": "33184be8c5daf6646aa5a1276a4e15531f1be27b7c26f56550e0fbb1fc678a11", "swift-coverage/xcode-packages.ts": "8e6020d17d24474150a5a50d042aca6261819ef75c79680a287a66f395909915", "swift-coverage/xcode-strings.ts": "f2dd4c7cd8ef77035184b0132909c2fa09fd20ed06b7757c2f1f960bfdde031c", "swift-coverage/reader.ts": "da559b67ecd1161dea70c980b5f98f2c55af3550f0714479100fa5e9e813625c", "swift-coverage/provenance.ts": "eb3b41ae8b58b48f6758f084800f188dfb1edb227e483abdd6b80cde66e849b9", "swift-package-manifest.ts": "29c2661be4b952101c9b9b8fd861560e6ce63b25dd4464f47475aaf72024f4fe", "swift-package.ts": "338cfef9a34a930206ac2e1a8a90b85c8d61f776d9a41e6445dc18e0c5385cdb", "swift-source-file.ts": "93fd659ed63a27b67f54a7c229a7ceb636dc9c59e68414920ba36cff1eda1f94", "swift-toolchain.ts": "25505683ca29a0b380413bf2a5026d4967eacf886e35bc11ece6e15317e5bb02", "home-paths.ts": "d1606390f0e8e50f0ff72544eadb3d49dfabf08e004c1218f2998c36fb8995dd", "xcode-header-search.ts": "f8c3d557b4eca5ddad32907545353eb7ad53b2ebd0969d9ed8f7275e109a13b1", "xcode-project.ts": "86f79e98323ec065e0e5195324c75ca608f490efbd95dcc25c53d5aa0b9aecc9", "xcode-target-members.ts": "ad7589132bffab265e8a10b64e24484fe88b4a2b1cc0ee19a97f151a002eca77", "xcode-json-project.ts": "41990ebbe4b488eef34e74c4608b4b48e5a5b299ba98ca7fbcfdfa0e77be63b6", "openstep-plist.ts": "74e6ce1dac80c9c318e0e9f5e3e8cd19a898a8820c36fc160609695bcb59dcd3" };
42
+ define_SWIFT_COVERAGE_SOURCE_DIGESTS_default = { "swift-coverage/indexdump.ts": "0d82d8eeb96bf377f409ea7e33274c341a710c0e071f6b6e17571a23d8d92412", "swift-coverage/indexing.ts": "633ccf19eec1f382a8847d0ee1dca42a2792a3c60aafd43622ed5152b09b8272", "swift-coverage/types.ts": "bd8fae54ea6c53e110cd8a5d7b57c1d532dd0166e09fdaea63c4f270c3780dd1", "swift-coverage/source.ts": "c151758a9f67631bc61473c375df0dc017da6902a34533b2cf4fc4fd7d19b6ee", "swift-coverage/package.ts": "1f0068be7461fa7c5a7a891faf318f305cbed2e94c19667ba76627f7e5be260b", "swift-coverage/xcode.ts": "65a500b806ce1c3a496de27f2e0ad77287c0f6795c618342c08af647f92af1fa", "swift-coverage/xcode-assets.ts": "d98d6294b359528f7733b26db6f80f554782354faa235605f9562be4ad98b8a3", "swift-coverage/xcode-asset-symbols.ts": "1b2a67733bc9d139b351466270205452a6172140bc25080d72619e2952c44671", "swift-coverage/xcode-bridging.ts": "33184be8c5daf6646aa5a1276a4e15531f1be27b7c26f56550e0fbb1fc678a11", "swift-coverage/xcode-packages.ts": "8e6020d17d24474150a5a50d042aca6261819ef75c79680a287a66f395909915", "swift-coverage/xcode-strings.ts": "f2dd4c7cd8ef77035184b0132909c2fa09fd20ed06b7757c2f1f960bfdde031c", "swift-coverage/reader.ts": "da559b67ecd1161dea70c980b5f98f2c55af3550f0714479100fa5e9e813625c", "swift-coverage/provenance.ts": "eb3b41ae8b58b48f6758f084800f188dfb1edb227e483abdd6b80cde66e849b9", "swift-package-manifest.ts": "29c2661be4b952101c9b9b8fd861560e6ce63b25dd4464f47475aaf72024f4fe", "swift-package.ts": "338cfef9a34a930206ac2e1a8a90b85c8d61f776d9a41e6445dc18e0c5385cdb", "swift-source-file.ts": "93fd659ed63a27b67f54a7c229a7ceb636dc9c59e68414920ba36cff1eda1f94", "swift-toolchain.ts": "25505683ca29a0b380413bf2a5026d4967eacf886e35bc11ece6e15317e5bb02", "home-paths.ts": "d1606390f0e8e50f0ff72544eadb3d49dfabf08e004c1218f2998c36fb8995dd", "xcode-header-search.ts": "f8c3d557b4eca5ddad32907545353eb7ad53b2ebd0969d9ed8f7275e109a13b1", "xcode-project.ts": "b6e04100805ba81f14d751383416fd4aab46901a6f94f5b62f831e66c28001c1", "xcode-target-members.ts": "d49af77a690cff481b38333b5f63f6600123b1bb57f410b0adb298b010d2047b", "xcode-json-project.ts": "41990ebbe4b488eef34e74c4608b4b48e5a5b299ba98ca7fbcfdfa0e77be63b6", "openstep-plist.ts": "74e6ce1dac80c9c318e0e9f5e3e8cd19a898a8820c36fc160609695bcb59dcd3" };
43
43
  }
44
44
  });
45
45
 
@@ -1044,6 +1044,7 @@ function createRuntimeDelivery(product) {
1044
1044
  verify: product.verifyInstall,
1045
1045
  label: `runtime ${version2}`
1046
1046
  });
1047
+ await product.afterInstall?.(destDir);
1047
1048
  if (setActive) product.writeActiveRuntime(version2);
1048
1049
  pruneLocalRetention({ protectVersions });
1049
1050
  return {
@@ -2566,6 +2567,7 @@ function autolinkerJson(command, output2) {
2566
2567
  }
2567
2568
  }
2568
2569
  async function cliAdvertises(cli, args, token, appRoot, signal) {
2570
+ const started = Date.now();
2569
2571
  const { stdout, stderr } = await run3("node", [cli, ...args], {
2570
2572
  cwd: appRoot,
2571
2573
  signal,
@@ -2575,7 +2577,7 @@ async function cliAdvertises(cli, args, token, appRoot, signal) {
2575
2577
  });
2576
2578
  if (!stdout.trim())
2577
2579
  throw new Error(
2578
- `${cli} ${args.join(" ")} returned empty help output${stderr.trim() ? `: ${stderr.trim()}` : ""}`
2580
+ `${cli} ${args.join(" ")} exited 0 after ${Date.now() - started}ms with empty help output${stderr.trim() ? `: ${stderr.trim()}` : ""}`
2579
2581
  );
2580
2582
  return stdout.includes(token);
2581
2583
  }
@@ -12524,6 +12526,302 @@ var init_plist = __esm({
12524
12526
  }
12525
12527
  });
12526
12528
 
12529
+ // src/ios-sdk-frameworks.json
12530
+ var ios_sdk_frameworks_default;
12531
+ var init_ios_sdk_frameworks = __esm({
12532
+ "src/ios-sdk-frameworks.json"() {
12533
+ ios_sdk_frameworks_default = {
12534
+ sdk: "iphonesimulator27.1",
12535
+ frameworks: [
12536
+ "ARKit",
12537
+ "AVFAudio",
12538
+ "AVFoundation",
12539
+ "AVKit",
12540
+ "AVRouting",
12541
+ "Accelerate",
12542
+ "Accessibility",
12543
+ "AccessoryLiveActivities",
12544
+ "AccessoryNotifications",
12545
+ "AccessorySetupKit",
12546
+ "AccessoryTransportExtension",
12547
+ "Accounts",
12548
+ "ActivityKit",
12549
+ "AdAttributionKit",
12550
+ "AdServices",
12551
+ "AdSupport",
12552
+ "AddressBook",
12553
+ "AddressBookUI",
12554
+ "AlarmKit",
12555
+ "AppClip",
12556
+ "AppIntents",
12557
+ "AppIntentsTypeSupport",
12558
+ "AppMigrationKit",
12559
+ "AppTrackingTransparency",
12560
+ "AssetsLibrary",
12561
+ "AudioToolbox",
12562
+ "AudioUnit",
12563
+ "AuthenticationServices",
12564
+ "AutomatedDeviceEnrollment",
12565
+ "AutomaticAssessmentConfiguration",
12566
+ "BackgroundAssets",
12567
+ "BackgroundTasks",
12568
+ "BrowserEngineCore",
12569
+ "BrowserEngineKit",
12570
+ "BrowserKit",
12571
+ "BusinessChat",
12572
+ "CFNetwork",
12573
+ "CallKit",
12574
+ "CarKey",
12575
+ "CarPlay",
12576
+ "Charts",
12577
+ "ClassKit",
12578
+ "ClassKitUI",
12579
+ "ClockKit",
12580
+ "CloudKit",
12581
+ "ColorSync",
12582
+ "Combine",
12583
+ "ComputeGraph",
12584
+ "ContactProvider",
12585
+ "Contacts",
12586
+ "ContactsUI",
12587
+ "CoreAudio",
12588
+ "CoreAudioKit",
12589
+ "CoreAudioTypes",
12590
+ "CoreBluetooth",
12591
+ "CoreData",
12592
+ "CoreFoundation",
12593
+ "CoreGraphics",
12594
+ "CoreHaptics",
12595
+ "CoreImage",
12596
+ "CoreLocation",
12597
+ "CoreLocationUI",
12598
+ "CoreMIDI",
12599
+ "CoreML",
12600
+ "CoreMedia",
12601
+ "CoreMotion",
12602
+ "CoreNFC",
12603
+ "CoreServices",
12604
+ "CoreSpotlight",
12605
+ "CoreTelephony",
12606
+ "CoreText",
12607
+ "CoreTransferable",
12608
+ "CoreVideo",
12609
+ "CreateMLComponents",
12610
+ "CryptoKit",
12611
+ "CryptoTokenKit",
12612
+ "DataDetection",
12613
+ "DeclaredAgeRange",
12614
+ "DeveloperToolsSupport",
12615
+ "DeviceActivity",
12616
+ "DeviceCheck",
12617
+ "DeviceDiscoveryExtension",
12618
+ "DeviceDiscoveryUI",
12619
+ "EnergyKit",
12620
+ "EventKit",
12621
+ "EventKitUI",
12622
+ "ExposureNotification",
12623
+ "ExtensionFoundation",
12624
+ "ExtensionKit",
12625
+ "ExternalAccessory",
12626
+ "FamilyControls",
12627
+ "FileProvider",
12628
+ "FileProviderUI",
12629
+ "FinanceKit",
12630
+ "FinanceKitUI",
12631
+ "Foundation",
12632
+ "FoundationModels",
12633
+ "GLKit",
12634
+ "GSS",
12635
+ "GameController",
12636
+ "GameKit",
12637
+ "GameSave",
12638
+ "GameplayKit",
12639
+ "GeoToolbox",
12640
+ "GroupActivities",
12641
+ "HealthKit",
12642
+ "HealthKitUI",
12643
+ "HomeKit",
12644
+ "IOKit",
12645
+ "IOSurface",
12646
+ "IdentityDocumentServices",
12647
+ "IdentityDocumentServicesUI",
12648
+ "IdentityLookup",
12649
+ "IdentityLookupUI",
12650
+ "ImageCaptureCore",
12651
+ "ImageIO",
12652
+ "ImagePlayground",
12653
+ "ImmersiveMediaSupport",
12654
+ "Intents",
12655
+ "IntentsUI",
12656
+ "JavaScriptCore",
12657
+ "LinkPresentation",
12658
+ "LinkSecurity",
12659
+ "LiveCommunicationKit",
12660
+ "LocalAuthentication",
12661
+ "LocalAuthenticationEmbeddedUI",
12662
+ "LockedCameraCapture",
12663
+ "ManagedApp",
12664
+ "ManagedAppDistribution",
12665
+ "ManagedSettings",
12666
+ "ManagedSettingsUI",
12667
+ "MapKit",
12668
+ "MarketplaceKit",
12669
+ "Matter",
12670
+ "MatterSupport",
12671
+ "MediaAccessibility",
12672
+ "MediaIntelligence",
12673
+ "MediaIntents",
12674
+ "MediaPlayer",
12675
+ "MediaToolbox",
12676
+ "MessageUI",
12677
+ "Messages",
12678
+ "Metal",
12679
+ "MetalKit",
12680
+ "MetalPerformancePrimitives",
12681
+ "MetalPerformanceShaders",
12682
+ "MetalPerformanceShadersGraph",
12683
+ "MetricKit",
12684
+ "MobileCoreServices",
12685
+ "ModelIO",
12686
+ "MultipeerConnectivity",
12687
+ "MusicKit",
12688
+ "MusicUnderstanding",
12689
+ "NaturalLanguage",
12690
+ "NearbyInteraction",
12691
+ "Network",
12692
+ "NetworkExtension",
12693
+ "NotificationCenter",
12694
+ "NowPlaying",
12695
+ "OSLog",
12696
+ "OpenAL",
12697
+ "OpenGLES",
12698
+ "PDFKit",
12699
+ "PHASE",
12700
+ "PaperKit",
12701
+ "PassKit",
12702
+ "PencilKit",
12703
+ "PermissionKit",
12704
+ "Photos",
12705
+ "PhotosUI",
12706
+ "ProximityReader",
12707
+ "PushKit",
12708
+ "PushToTalk",
12709
+ "QuartzCore",
12710
+ "QuickLook",
12711
+ "QuickLookThumbnailing",
12712
+ "RealityFoundation",
12713
+ "RealityKit",
12714
+ "RelevanceKit",
12715
+ "ReplayKit",
12716
+ "RoomPlan",
12717
+ "SafariServices",
12718
+ "SafetyKit",
12719
+ "SceneKit",
12720
+ "ScreenTime",
12721
+ "SecureElementCredential",
12722
+ "Security",
12723
+ "SecurityUI",
12724
+ "SensitiveContentAnalysis",
12725
+ "SensorKit",
12726
+ "ServicesAccountLinking",
12727
+ "SharedWithYou",
12728
+ "SharedWithYouCore",
12729
+ "ShazamKit",
12730
+ "Social",
12731
+ "SoundAnalysis",
12732
+ "Speech",
12733
+ "SpriteKit",
12734
+ "StateReporting",
12735
+ "StoreKit",
12736
+ "SuggestedActions",
12737
+ "SwiftData",
12738
+ "SwiftUI",
12739
+ "SwiftUICore",
12740
+ "Symbols",
12741
+ "SystemConfiguration",
12742
+ "SystemExtensions",
12743
+ "TabularData",
12744
+ "TelephonyMessagingKit",
12745
+ "TipKit",
12746
+ "TouchController",
12747
+ "Translation",
12748
+ "TranslationUIProvider",
12749
+ "TrustInsights",
12750
+ "Twitter",
12751
+ "UIKit",
12752
+ "USDKit",
12753
+ "UniformTypeIdentifiers",
12754
+ "UserNotifications",
12755
+ "UserNotificationsUI",
12756
+ "VideoSubscriberAccount",
12757
+ "VideoToolbox",
12758
+ "Vision",
12759
+ "VisionKit",
12760
+ "WatchConnectivity",
12761
+ "WeatherKit",
12762
+ "WebKit",
12763
+ "WiFiAware",
12764
+ "WidgetKit",
12765
+ "WorkoutKit",
12766
+ "_AVKit_SwiftUI",
12767
+ "_AdAttributionKit_StoreKit",
12768
+ "_AppIntents_HealthKit",
12769
+ "_AppIntents_SwiftUI",
12770
+ "_AppIntents_UIKit",
12771
+ "_AuthenticationServices_SwiftUI",
12772
+ "_Contacts_AppIntents",
12773
+ "_CoreData_CloudKit",
12774
+ "_CoreLocationUI_SwiftUI",
12775
+ "_CoreNFC_UIKit",
12776
+ "_CoreSpotlight_FoundationModels",
12777
+ "_DataDetection_SwiftUI",
12778
+ "_DeviceActivity_SwiftUI",
12779
+ "_DeviceDiscoveryUI_SwiftUI",
12780
+ "_FinanceKit_AppIntents",
12781
+ "_FoundationModels_SwiftUI",
12782
+ "_FoundationModels_UIKit",
12783
+ "_GameController_SwiftUI",
12784
+ "_GeoToolbox_AppIntents",
12785
+ "_GroupActivities_UIKit",
12786
+ "_HomeKit_SwiftUI",
12787
+ "_Intents_TipKit",
12788
+ "_LinkPresentation_AppIntents",
12789
+ "_LocationEssentials",
12790
+ "_MapKit_SwiftUI",
12791
+ "_MarketplaceKit_UIKit",
12792
+ "_MediaIntents_AppIntents",
12793
+ "_MediaPlayer_AppIntents",
12794
+ "_MusicKit_SwiftUI",
12795
+ "_NowPlaying_AppIntents",
12796
+ "_PassKit_SwiftUI",
12797
+ "_PermissionKit_SwiftUI",
12798
+ "_PermissionKit_UIKit",
12799
+ "_PhotosUI_SwiftUI",
12800
+ "_PhotosUI_WidgetKit",
12801
+ "_Photos_AppIntents",
12802
+ "_QuickLook_SwiftUI",
12803
+ "_RealityKit_ComputeGraph",
12804
+ "_RealityKit_SwiftUI",
12805
+ "_RelevanceKit_MapKit",
12806
+ "_SceneKit_SwiftUI",
12807
+ "_SecureElementCredential_SwiftUI",
12808
+ "_SecureElementCredential_UIKit",
12809
+ "_SharedWithYou_AppIntents",
12810
+ "_SpriteKit_SwiftUI",
12811
+ "_StoreKit_SwiftUI",
12812
+ "_SwiftData_CoreData",
12813
+ "_SwiftData_SwiftUI",
12814
+ "_Translation_SwiftUI",
12815
+ "_USDKit_RealityKit",
12816
+ "_UserNotifications_AppIntents",
12817
+ "_WebKit_SwiftUI",
12818
+ "_WorkoutKit_SwiftUI",
12819
+ "iAd"
12820
+ ]
12821
+ };
12822
+ }
12823
+ });
12824
+
12527
12825
  // src/android-string-value.ts
12528
12826
  var init_android_string_value = __esm({
12529
12827
  "src/android-string-value.ts"() {
@@ -12829,8 +13127,20 @@ function xcodeTargetMemberVisitor(objects) {
12829
13127
  for (const id of refs) {
12830
13128
  const file = resolvePath(id);
12831
13129
  if (file === null) continue;
12832
- if (phase.isa === "PBXSourcesBuildPhase") visit3(file, "source");
12833
- else for (const inner of filesUnder(file)) visit3(inner, "resource");
13130
+ if (phase.isa === "PBXSourcesBuildPhase") {
13131
+ visit3(file, "source");
13132
+ continue;
13133
+ }
13134
+ const ref = objects[id];
13135
+ const type = isDict(ref) ? str(ref.lastKnownFileType) ?? str(ref.explicitFileType) ?? "" : "";
13136
+ const root = file.replace(/[\\/]+$/, "");
13137
+ const folder = FOLDER_REFERENCE.test(type) ? root.split(/[\\/]/).pop() : void 0;
13138
+ for (const inner of filesUnder(file))
13139
+ visit3(
13140
+ inner,
13141
+ "resource",
13142
+ folder && `${folder}/${inner.slice(root.length + 1).replaceAll("\\", "/")}`
13143
+ );
12834
13144
  }
12835
13145
  }
12836
13146
  }
@@ -12868,13 +13178,14 @@ function xcodeTargetMemberVisitor(objects) {
12868
13178
  }
12869
13179
  };
12870
13180
  }
12871
- var NEVER_MEMBER, BUNDLE_DIR;
13181
+ var NEVER_MEMBER, FOLDER_REFERENCE, BUNDLE_DIR;
12872
13182
  var init_xcode_target_members = __esm({
12873
13183
  "src/xcode-target-members.ts"() {
12874
13184
  "use strict";
12875
13185
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
12876
13186
  init_openstep_plist();
12877
13187
  NEVER_MEMBER = /(?:^|\/)(?:Info\.plist|[^/]+\.entitlements|[^/]+\.xcconfig|\.DS_Store)$/;
13188
+ FOLDER_REFERENCE = /^(?:folder|wrapper\.scnassets)$/;
12878
13189
  BUNDLE_DIR = /\.(xcassets|bundle|lproj|xcdatamodeld|scnassets|spriteatlas|rcproject|storyboardc|icon)$/;
12879
13190
  }
12880
13191
  });
@@ -14958,12 +15269,13 @@ function planAssetSymbols(resources, root, settings) {
14958
15269
  "2": ["ipad"],
14959
15270
  "1,2": ["iphone", "ipad"],
14960
15271
  "1,7": ["iphone"],
15272
+ "1,3,7": ["iphone"],
14961
15273
  "1,2,6": ["iphone", "ipad"],
14962
15274
  "1,2,7": ["iphone", "ipad"]
14963
15275
  }[families];
14964
15276
  if (!devices2)
14965
15277
  return unknown2(
14966
- `Generated asset symbols are proven only for TARGETED_DEVICE_FAMILY 1, 2, 1,2, 1,7, 1,2,6 or 1,2,7; this target resolves to "${families}".`
15278
+ `Generated asset symbols are proven only for TARGETED_DEVICE_FAMILY 1, 2, 1,2, 1,7, 1,3,7, 1,2,6 or 1,2,7; this target resolves to "${families}".`
14967
15279
  );
14968
15280
  const plan = {
14969
15281
  catalogs: catalogs.map((path112) => ({
@@ -26921,6 +27233,7 @@ async function runWasmOpt(file, output2, skipPasses, binary2) {
26921
27233
  const result = await (0, import_wasm_opt.wasmOpt)(
26922
27234
  [
26923
27235
  "-Oz",
27236
+ ...KEEP_WASM_NAMES ? ["-g"] : [],
26924
27237
  ...skipPasses.flatMap((pass) => ["--skip-pass", pass]),
26925
27238
  ...FEATURES.map((feature) => `--enable-${feature}`),
26926
27239
  file,
@@ -26954,7 +27267,7 @@ async function installWasmOpt() {
26954
27267
  async function optimizeWasm(file, output2, skipPasses = []) {
26955
27268
  await runWasmOpt(file, output2, skipPasses, await installWasmOpt());
26956
27269
  }
26957
- var import_node_fs44, import_node_path42, import_wasm_opt, FEATURES, WASM_OPTIMIZE_IDENTITY, PINNED_BINARYEN_VERSION, BINARYEN_RELEASES;
27270
+ var import_node_fs44, import_node_path42, import_wasm_opt, FEATURES, KEEP_WASM_NAMES, WASM_OPTIMIZE_IDENTITY, PINNED_BINARYEN_VERSION, BINARYEN_RELEASES;
26958
27271
  var init_wasm_optimize = __esm({
26959
27272
  "src/wasm-optimize.ts"() {
26960
27273
  "use strict";
@@ -26977,7 +27290,8 @@ var init_wasm_optimize = __esm({
26977
27290
  "reference-types",
26978
27291
  "sign-ext"
26979
27292
  ];
26980
- WASM_OPTIMIZE_IDENTITY = `wasm-opt ${import_wasm_opt.BINARYEN_VERSION} -Oz ${FEATURES.join(",")}`;
27293
+ KEEP_WASM_NAMES = process.env.PEACH_SWIFT_NAMES === "1";
27294
+ WASM_OPTIMIZE_IDENTITY = `wasm-opt ${import_wasm_opt.BINARYEN_VERSION} -Oz ${FEATURES.join(",")}${KEEP_WASM_NAMES ? " -g" : ""}`;
26981
27295
  PINNED_BINARYEN_VERSION = "132";
26982
27296
  BINARYEN_RELEASES = /* @__PURE__ */ new Map([
26983
27297
  [
@@ -29054,6 +29368,7 @@ ${release}
29054
29368
  `);
29055
29369
  hash.update(compilerSourceDigest);
29056
29370
  if (input.oneModule) hash.update("one-module\n");
29371
+ if (KEEP_WASM_NAMES) hash.update("names\n");
29057
29372
  hash.update(swiftModuleDigest(moduleRoot));
29058
29373
  if (input.optimize) hash.update(`optimize
29059
29374
  ${WASM_OPTIMIZE_IDENTITY}
@@ -29165,7 +29480,14 @@ function toolsetOrdersLibcxxBeforeDarwinOverlay(options) {
29165
29480
  return libcxx >= 0 && overlay > libcxx;
29166
29481
  }
29167
29482
  function emitSwiftPackageManifest(args) {
29168
- const { targets, siblings, moduleRoot, oneModule, spriteKit, distribution } = args;
29483
+ const {
29484
+ targets,
29485
+ siblings,
29486
+ moduleRoot,
29487
+ oneModule,
29488
+ gameProducts: gameProducts2 = [],
29489
+ distribution
29490
+ } = args;
29169
29491
  const prebuilt = args.prebuilt;
29170
29492
  const linkedObjects = Boolean(distribution || prebuilt);
29171
29493
  const cxxFlagsFor = (flags) => args.deferDarwinOverlay ? withoutWasmOverlayIsystem(flags) : flags;
@@ -29194,9 +29516,8 @@ function emitSwiftPackageManifest(args) {
29194
29516
  for (const name3 of [...siblings.values()].flat())
29195
29517
  if (OPTIONAL_FRAMEWORKS.has(name3) && !targets.some((target) => target.name === name3))
29196
29518
  reach(name3);
29197
- if (spriteKit) {
29198
- for (const name3 of ["SpriteKit", "PeachBox2D", "simd", "GLKit"]) reach(name3);
29199
- }
29519
+ for (const product of gameProducts2)
29520
+ for (const name3 of GAME_REACH[product] ?? []) reach(name3);
29200
29521
  let distributionLinkPath;
29201
29522
  const distributionLink = args.distributionLink;
29202
29523
  if (distribution && distributionLink) {
@@ -29219,7 +29540,7 @@ function emitSwiftPackageManifest(args) {
29219
29540
  (object6) => !isProvider(object6) && !replacedObjects.has(object6)
29220
29541
  );
29221
29542
  const objects = available.filter(
29222
- (object6) => !targets.some((target) => object6.startsWith(`lib/${target.name}-`)) && [...OPTIONAL_FRAMEWORKS, "SpriteKit", "PeachBox2D"].every(
29543
+ (object6) => !targets.some((target) => object6.startsWith(`lib/${target.name}-`)) && [...OPTIONAL_FRAMEWORKS, ...GAME_FAMILY, "PeachBox2D"].every(
29223
29544
  (name3) => !object6.startsWith(`lib/${name3}-`) || reachedFrameworks.has(name3)
29224
29545
  )
29225
29546
  );
@@ -29382,7 +29703,7 @@ function emitSwiftPackageManifest(args) {
29382
29703
  ...linkedObjects || clang && !target.executable ? [] : [
29383
29704
  '.product(name: "SwiftUI", package: "sootsim-swift")',
29384
29705
  ...oneModule ? [ONE_PRODUCT] : [],
29385
- ...spriteKit ? [SPRITEKIT_PRODUCT] : []
29706
+ ...gameProducts2.map(gameProduct)
29386
29707
  ],
29387
29708
  ...(siblings.get(target.name) ?? []).flatMap(
29388
29709
  (dependency) => clang && // textual native headers can include one another without imposing
@@ -29414,7 +29735,7 @@ function emitSwiftPackageManifest(args) {
29414
29735
  .unsafeFlags(${flagArray(`[
29415
29736
  ${REACTOR_FLAG}${executableLinkFlags(args.root)} "-Xlinker", "--export-if-defined=__main_argc_argv"${library},
29416
29737
  ]`)}),
29417
- .unsafeFlags(["-Xlinker", "--strip-all"], .when(configuration: .release)),
29738
+ ${KEEP_WASM_NAMES ? "" : '.unsafeFlags(["-Xlinker", "--strip-all"], .when(configuration: .release)),'}
29418
29739
  ]` : librarySettings.length > 0 ? `,
29419
29740
  linkerSettings: [${librarySettings.join(", ")}]` : "";
29420
29741
  const cDefines = macroSettings(target.cDefines);
@@ -31423,14 +31744,17 @@ module ${moduleName2}.Swift {
31423
31744
  manifest = manifest.replace(product, `${product}
31424
31745
  ${ONE_PRODUCT},`).replace(flags, `${flags}${ONE_IMPLICIT_FLAGS}`);
31425
31746
  }
31426
- if (importsSpriteKit(input.files)) {
31747
+ const games = gameProducts(input.files);
31748
+ if (games.length > 0) {
31427
31749
  const anchor = '.product(name: "CoreLocation", package: "sootsim-swift"),';
31428
31750
  if (!manifest.includes(anchor))
31429
31751
  throw new Error(
31430
- "scripts/contrast-app-Package.swift lost the line the SpriteKit product links at"
31752
+ "scripts/contrast-app-Package.swift lost the line the game products link at"
31431
31753
  );
31432
- manifest = manifest.replace(anchor, `${anchor}
31433
- ${SPRITEKIT_PRODUCT},`);
31754
+ manifest = manifest.replace(
31755
+ anchor,
31756
+ [anchor, ...games.map((name3) => `${gameProduct(name3)},`)].join("\n ")
31757
+ );
31434
31758
  }
31435
31759
  files2.set(import_node_path51.default.join(layout2.root, "Package.swift"), manifest + moduleFiles);
31436
31760
  } else {
@@ -31545,7 +31869,7 @@ module ${moduleName2}.Swift {
31545
31869
  siblings: moduleSiblings,
31546
31870
  moduleRoot,
31547
31871
  oneModule: input.oneModule,
31548
- spriteKit: importsSpriteKit(input.files),
31872
+ gameProducts: gameProducts(input.files),
31549
31873
  distribution: distribution ?? void 0,
31550
31874
  moduleExcludes,
31551
31875
  deferDarwinOverlay: native.size > 0 && toolsetOrdersLibcxxBeforeDarwinOverlay(
@@ -31944,14 +32268,9 @@ function linkedFrameworkTargets(moduleRoot, input) {
31944
32268
  ))
31945
32269
  reach(match[1]);
31946
32270
  }
31947
- if (importsSpriteKit(input.files))
31948
- for (const name3 of ["SpriteKit", "PeachBox2D", "simd", "GLKit"]) reach(name3);
31949
- const wanted = [
31950
- "PeachApp",
31951
- ...input.oneModule ? ["One"] : [],
31952
- ...importsSpriteKit(input.files) ? ["SpriteKit"] : [],
31953
- ...reached
31954
- ];
32271
+ const games = gameProducts(input.files);
32272
+ for (const product of games) for (const name3 of GAME_REACH[product] ?? []) reach(name3);
32273
+ const wanted = ["PeachApp", ...input.oneModule ? ["One"] : [], ...games, ...reached];
31955
32274
  const linked = [...new Set(wanted)].filter((name3) => libraries.has(name3));
31956
32275
  if (!linked.includes("PeachApp"))
31957
32276
  throw new Error("swift-compile: the framework package declares no PeachApp library");
@@ -32854,7 +33173,7 @@ function compileSwiftProjectOnce(input, options) {
32854
33173
  options.signal
32855
33174
  );
32856
33175
  }
32857
- var import_node_child_process28, import_node_crypto23, import_node_fs53, import_node_os11, import_node_path51, v5, WASM_TRIPLE, SWIFTPM_PROGRESS, SWIFTPM_NOISE, SWIFT_BUILDER_TRANSPORT_MARGIN_MS, SWIFT_BUILDER_DEFAULT_COMPILE_MS, clangInterfaceHeader, swiftInterfaceDeclarations, linkedModuleDigests, SYSTEM_MODULE_LIBRARIES, SYSTEM_MODULE_IMPORT, OPTIONAL_FRAMEWORK_DEPENDENCIES, OPTIONAL_FRAMEWORKS, SWIFT_IMPORT, kleeneNot, kleeneAnd, kleeneOr, sdkPaths, availableModules, sdkOverlayFrameworks, DISTRIBUTION_CLANG_MODULES, ONE_PRODUCT, SPRITEKIT_PRODUCT, importsSpriteKit, FOUNDATION_IMPLICIT_MODULES, FOUNDATION_IMPLICIT_FLAGS, ONE_IMPLICIT_FLAGS, executableLinkFlags, darwinRecordsRegion, REACTOR_FLAG, MULTI_MANIFEST_VERSION, SWIFT_HEADER_PRODUCTS_TARGET, compilerSourceDigest, nativeCxxCompilerFlags, cFlagArray, cxxFlagArray, DIRECTIVE, OS_IOS, DELEGATE_CLASS, FOUNDATION_NETWORKING_TYPES, FOUNDATION_OVERLAY_TYPES, FOUNDATION_OVERLAY_GLOBALS, CORE_FOUNDATION_OVERLAY_GLOBALS, CORE_FOUNDATION_GEOMETRY_TYPES, CORE_FOUNDATION_GRAPHICS_TYPES, CORE_FOUNDATION_HANDLE_IMPORTS, emptyMacroEnvironment, wasmMacroEnvironment, HIDDEN_UNITS, LIBXML_REFERENCE, LIBXML_SOURCE, ROOT_LOCKS, host, rootLocks, SHARED_ARTIFACT_BUDGET_BYTES, SHARED_ARTIFACT_GRACE_MS, RETIRED_PREFIX, retainedArtifacts, FRAMEWORK_LINK_TARGET, SWIFT_LINK_STAMP, SWIFT_FRAMEWORK_SLOTS, SWIFT_FRAMEWORK_SLOT_KEY, SWIFT_FRAMEWORK_SLOT_ORIGIN;
33176
+ var import_node_child_process28, import_node_crypto23, import_node_fs53, import_node_os11, import_node_path51, v5, WASM_TRIPLE, SWIFTPM_PROGRESS, SWIFTPM_NOISE, SWIFT_BUILDER_TRANSPORT_MARGIN_MS, SWIFT_BUILDER_DEFAULT_COMPILE_MS, clangInterfaceHeader, swiftInterfaceDeclarations, linkedModuleDigests, SYSTEM_MODULE_LIBRARIES, SYSTEM_MODULE_IMPORT, OPTIONAL_FRAMEWORK_DEPENDENCIES, OPTIONAL_FRAMEWORKS, SWIFT_IMPORT, kleeneNot, kleeneAnd, kleeneOr, sdkPaths, availableModules, sdkOverlayFrameworks, DISTRIBUTION_CLANG_MODULES, ONE_PRODUCT, GAME_FAMILY, gameProducts, gameProduct, GAME_REACH, FOUNDATION_IMPLICIT_MODULES, FOUNDATION_IMPLICIT_FLAGS, ONE_IMPLICIT_FLAGS, executableLinkFlags, darwinRecordsRegion, REACTOR_FLAG, MULTI_MANIFEST_VERSION, SWIFT_HEADER_PRODUCTS_TARGET, compilerSourceDigest, nativeCxxCompilerFlags, cFlagArray, cxxFlagArray, DIRECTIVE, OS_IOS, DELEGATE_CLASS, FOUNDATION_NETWORKING_TYPES, FOUNDATION_OVERLAY_TYPES, FOUNDATION_OVERLAY_GLOBALS, CORE_FOUNDATION_OVERLAY_GLOBALS, CORE_FOUNDATION_GEOMETRY_TYPES, CORE_FOUNDATION_GRAPHICS_TYPES, CORE_FOUNDATION_HANDLE_IMPORTS, emptyMacroEnvironment, wasmMacroEnvironment, HIDDEN_UNITS, LIBXML_REFERENCE, LIBXML_SOURCE, ROOT_LOCKS, host, rootLocks, SHARED_ARTIFACT_BUDGET_BYTES, SHARED_ARTIFACT_GRACE_MS, RETIRED_PREFIX, retainedArtifacts, FRAMEWORK_LINK_TARGET, SWIFT_LINK_STAMP, SWIFT_FRAMEWORK_SLOTS, SWIFT_FRAMEWORK_SLOT_KEY, SWIFT_FRAMEWORK_SLOT_ORIGIN;
32858
33177
  var init_swift_compile = __esm({
32859
33178
  "src/swift-compile.ts"() {
32860
33179
  "use strict";
@@ -32928,7 +33247,8 @@ var init_swift_compile = __esm({
32928
33247
  PeachCFNetwork: [],
32929
33248
  JavaScriptCore: ["PeachJavaScriptCore"],
32930
33249
  PeachJavaScriptCore: [],
32931
- GameplayKit: [],
33250
+ // GameplayKit names SpriteKit and SceneKit nodes, as on iOS
33251
+ GameplayKit: ["SpriteKit", "SceneKit", "PeachBox2D", "simd", "GLKit"],
32932
33252
  simd: [],
32933
33253
  ModelIO: ["simd"],
32934
33254
  GLKit: ["ModelIO"],
@@ -33040,10 +33360,21 @@ int EXUpdatesApplyBSDiffPatch(const char * _Nonnull oldFilePath,
33040
33360
  }
33041
33361
  ];
33042
33362
  ONE_PRODUCT = '.product(name: "One", package: "sootsim-swift")';
33043
- SPRITEKIT_PRODUCT = '.product(name: "SpriteKit", package: "sootsim-swift")';
33044
- importsSpriteKit = (files2) => Object.entries(files2).some(
33045
- ([file, contents]) => file.endsWith(".swift") && swiftImportNames(contents).includes("SpriteKit")
33046
- );
33363
+ GAME_FAMILY = ["SpriteKit", "SceneKit"];
33364
+ gameProducts = (files2) => {
33365
+ const imported = new Set(
33366
+ Object.entries(files2).flatMap(
33367
+ ([file, contents]) => file.endsWith(".swift") ? swiftImportNames(contents) : []
33368
+ )
33369
+ );
33370
+ if (imported.has("SceneKit")) return [...GAME_FAMILY];
33371
+ return imported.has("SpriteKit") ? ["SpriteKit"] : [];
33372
+ };
33373
+ gameProduct = (name3) => `.product(name: "${name3}", package: "sootsim-swift")`;
33374
+ GAME_REACH = {
33375
+ SpriteKit: ["SpriteKit", "PeachBox2D", "simd", "GLKit"],
33376
+ SceneKit: ["SceneKit"]
33377
+ };
33047
33378
  FOUNDATION_IMPLICIT_MODULES = [
33048
33379
  "PeachObjC",
33049
33380
  "Dispatch",
@@ -33070,7 +33401,7 @@ int EXUpdatesApplyBSDiffPatch(const char * _Nonnull oldFilePath,
33070
33401
  REACTOR_FLAG = '"-Xclang-linker", "-mexec-model=reactor",\n';
33071
33402
  MULTI_MANIFEST_VERSION = 68;
33072
33403
  SWIFT_HEADER_PRODUCTS_TARGET = "PeachHeaderProducts";
33073
- compilerSourceDigest = true ? "2e9f321a97a408a1b3b8b7d85bbcfb108f0761ed9726b832a3c6c2cc52102806" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
33404
+ compilerSourceDigest = true ? "eba60b7a2e9485f928a6ec2e544e10d84b2b33430be66b9e069c9797a927af86" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
33074
33405
  nativeCxxCompilerFlags = ["-fno-cxx-modules"];
33075
33406
  cFlagArray = (flags) => JSON.stringify(withoutGlogModuleMap(flags));
33076
33407
  cxxFlagArray = (flags) => JSON.stringify([...nativeCxxCompilerFlags, ...withoutGlogModuleMap(flags)]);
@@ -33401,8 +33732,6 @@ int EXUpdatesApplyBSDiffPatch(const char * _Nonnull oldFilePath,
33401
33732
  "NSURLProtectionSpaceHTTPS",
33402
33733
  "NSURLProtectionSpaceHTTPSProxy",
33403
33734
  "NSURLProtectionSpaceSOCKSProxy",
33404
- "NSURLSessionDownloadTaskResumeData",
33405
- "NSURLSessionTransferSizeUnknown",
33406
33735
  "NSURLSessionUploadTaskResumeData",
33407
33736
  "NSUTF16BigEndianStringEncoding",
33408
33737
  "NSUTF16LittleEndianStringEncoding",
@@ -35723,6 +36052,7 @@ function targetMembers(ref, settings, options, settingKeys, projectInputs) {
35723
36052
  const allSources = /* @__PURE__ */ new Set();
35724
36053
  const headers = /* @__PURE__ */ new Set();
35725
36054
  const resources = /* @__PURE__ */ new Set();
36055
+ const resourceNames = {};
35726
36056
  const scriptForOutput = /* @__PURE__ */ new Map();
35727
36057
  const copiedFiles = [];
35728
36058
  let generatedInfoPlist = false;
@@ -35892,13 +36222,14 @@ ${output2}`
35892
36222
  xcodePathResolver(project2.objects, project2.projectDir, import_node_path56.default.join, settings),
35893
36223
  (file) => isDirectory(file) ? walkFiles(file) : import_node_fs57.default.existsSync(file) ? [file] : [],
35894
36224
  import_node_path56.default.join,
35895
- (file, kind) => {
36225
+ (file, kind, bundleName) => {
35896
36226
  if (kind === "header") {
35897
36227
  headers.add(file);
35898
36228
  return;
35899
36229
  }
35900
36230
  if (kind === "resource") {
35901
36231
  resources.add(file);
36232
+ if (bundleName) resourceNames[file] = bundleName;
35902
36233
  return;
35903
36234
  }
35904
36235
  if (!import_node_fs57.default.existsSync(file)) {
@@ -36022,6 +36353,7 @@ ${output2}`
36022
36353
  return {
36023
36354
  sources: [...sources].sort(),
36024
36355
  resources: [...resources].sort(),
36356
+ resourceNames,
36025
36357
  copiedFiles,
36026
36358
  generatedInfoPlist,
36027
36359
  allSources: [...allSources].sort(),
@@ -37266,10 +37598,14 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
37266
37598
  byProduct.has(import_node_path56.default.basename(rawPath)))
37267
37599
  continue;
37268
37600
  const resolved = fileId ? project2.resolvePath(fileId) : null;
37269
- if (fileId && resolved !== null && !import_node_fs57.default.existsSync(resolved))
37270
- throw new Error(
37271
- `${str(target.name) ?? "target"}: linked framework ${name3} (${fileId}) points at missing ${resolved} in ${project2.projectFile}`
37272
- );
37601
+ if (fileId && resolved !== null && !import_node_fs57.default.existsSync(resolved)) {
37602
+ if (!ios_sdk_frameworks_default.frameworks.includes(name3))
37603
+ throw new Error(
37604
+ `${str(target.name) ?? "target"}: linked framework ${name3} (${fileId}) points at missing ${resolved} in ${project2.projectFile}`
37605
+ );
37606
+ sdkFrameworks.add(name3);
37607
+ continue;
37608
+ }
37273
37609
  if (!binaryFrameworks.get(name3)) binaryFrameworks.set(name3, resolved);
37274
37610
  }
37275
37611
  }
@@ -37346,7 +37682,12 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
37346
37682
  ...linkedProducts.flatMap(
37347
37683
  ({ source }) => source.kind === "local" && import_node_fs57.default.existsSync(source.dir) ? [source.dir] : []
37348
37684
  ),
37349
- ...new Set(podSourceDirs)
37685
+ ...new Set(podSourceDirs),
37686
+ // a target's own files may sit beside the project, such as an asset
37687
+ // catalog one folder up, and xcode builds them from there
37688
+ ...new Set(
37689
+ [...module2.allSources, ...module2.resources].filter((file) => import_node_fs57.default.existsSync(file)).map((file) => import_node_path56.default.dirname(file))
37690
+ )
37350
37691
  ].map((dir) => import_node_fs57.default.realpathSync.native(dir))
37351
37692
  ),
37352
37693
  projectFiles: [
@@ -37391,6 +37732,7 @@ var init_xcode_project = __esm({
37391
37732
  import_node_fs57 = __toESM(require("node:fs"), 1);
37392
37733
  import_node_path56 = __toESM(require("node:path"), 1);
37393
37734
  import_plist2 = __toESM(require("plist"), 1);
37735
+ init_ios_sdk_frameworks();
37394
37736
  init_is_record();
37395
37737
  init_native_app_identity();
37396
37738
  init_prepared_xcode_phases();
@@ -37534,7 +37876,7 @@ var init_swift_standin_digest = __esm({
37534
37876
  STANDIN_DIGEST_ENTRYPOINTS = ["swift-standins.ts", "swift-objc-compile.ts"];
37535
37877
  SPECIFIER = /from\s*['"]([^'"]+)['"]|import\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
37536
37878
  standinSourceDigest = (srcDir = __sootsim_import_meta_dirname) => sourceClosureDigest(srcDir, STANDIN_DIGEST_ENTRYPOINTS);
37537
- STANDIN_SOURCE_DIGEST = true ? "70b9e9f32fde5739daaee933df31b2584f9ef3289c322a0f5b03f1eaac947880" : standinSourceDigest();
37879
+ STANDIN_SOURCE_DIGEST = true ? "1a62599378cd7cdf32385f588eb3f983f07ea222d145ec5b6dc34cce9104f46c" : standinSourceDigest();
37538
37880
  }
37539
37881
  });
37540
37882
 
@@ -45402,302 +45744,6 @@ var init_core_data_entity_classes = __esm({
45402
45744
  }
45403
45745
  });
45404
45746
 
45405
- // src/ios-sdk-frameworks.json
45406
- var ios_sdk_frameworks_default;
45407
- var init_ios_sdk_frameworks = __esm({
45408
- "src/ios-sdk-frameworks.json"() {
45409
- ios_sdk_frameworks_default = {
45410
- sdk: "iphonesimulator27.1",
45411
- frameworks: [
45412
- "ARKit",
45413
- "AVFAudio",
45414
- "AVFoundation",
45415
- "AVKit",
45416
- "AVRouting",
45417
- "Accelerate",
45418
- "Accessibility",
45419
- "AccessoryLiveActivities",
45420
- "AccessoryNotifications",
45421
- "AccessorySetupKit",
45422
- "AccessoryTransportExtension",
45423
- "Accounts",
45424
- "ActivityKit",
45425
- "AdAttributionKit",
45426
- "AdServices",
45427
- "AdSupport",
45428
- "AddressBook",
45429
- "AddressBookUI",
45430
- "AlarmKit",
45431
- "AppClip",
45432
- "AppIntents",
45433
- "AppIntentsTypeSupport",
45434
- "AppMigrationKit",
45435
- "AppTrackingTransparency",
45436
- "AssetsLibrary",
45437
- "AudioToolbox",
45438
- "AudioUnit",
45439
- "AuthenticationServices",
45440
- "AutomatedDeviceEnrollment",
45441
- "AutomaticAssessmentConfiguration",
45442
- "BackgroundAssets",
45443
- "BackgroundTasks",
45444
- "BrowserEngineCore",
45445
- "BrowserEngineKit",
45446
- "BrowserKit",
45447
- "BusinessChat",
45448
- "CFNetwork",
45449
- "CallKit",
45450
- "CarKey",
45451
- "CarPlay",
45452
- "Charts",
45453
- "ClassKit",
45454
- "ClassKitUI",
45455
- "ClockKit",
45456
- "CloudKit",
45457
- "ColorSync",
45458
- "Combine",
45459
- "ComputeGraph",
45460
- "ContactProvider",
45461
- "Contacts",
45462
- "ContactsUI",
45463
- "CoreAudio",
45464
- "CoreAudioKit",
45465
- "CoreAudioTypes",
45466
- "CoreBluetooth",
45467
- "CoreData",
45468
- "CoreFoundation",
45469
- "CoreGraphics",
45470
- "CoreHaptics",
45471
- "CoreImage",
45472
- "CoreLocation",
45473
- "CoreLocationUI",
45474
- "CoreMIDI",
45475
- "CoreML",
45476
- "CoreMedia",
45477
- "CoreMotion",
45478
- "CoreNFC",
45479
- "CoreServices",
45480
- "CoreSpotlight",
45481
- "CoreTelephony",
45482
- "CoreText",
45483
- "CoreTransferable",
45484
- "CoreVideo",
45485
- "CreateMLComponents",
45486
- "CryptoKit",
45487
- "CryptoTokenKit",
45488
- "DataDetection",
45489
- "DeclaredAgeRange",
45490
- "DeveloperToolsSupport",
45491
- "DeviceActivity",
45492
- "DeviceCheck",
45493
- "DeviceDiscoveryExtension",
45494
- "DeviceDiscoveryUI",
45495
- "EnergyKit",
45496
- "EventKit",
45497
- "EventKitUI",
45498
- "ExposureNotification",
45499
- "ExtensionFoundation",
45500
- "ExtensionKit",
45501
- "ExternalAccessory",
45502
- "FamilyControls",
45503
- "FileProvider",
45504
- "FileProviderUI",
45505
- "FinanceKit",
45506
- "FinanceKitUI",
45507
- "Foundation",
45508
- "FoundationModels",
45509
- "GLKit",
45510
- "GSS",
45511
- "GameController",
45512
- "GameKit",
45513
- "GameSave",
45514
- "GameplayKit",
45515
- "GeoToolbox",
45516
- "GroupActivities",
45517
- "HealthKit",
45518
- "HealthKitUI",
45519
- "HomeKit",
45520
- "IOKit",
45521
- "IOSurface",
45522
- "IdentityDocumentServices",
45523
- "IdentityDocumentServicesUI",
45524
- "IdentityLookup",
45525
- "IdentityLookupUI",
45526
- "ImageCaptureCore",
45527
- "ImageIO",
45528
- "ImagePlayground",
45529
- "ImmersiveMediaSupport",
45530
- "Intents",
45531
- "IntentsUI",
45532
- "JavaScriptCore",
45533
- "LinkPresentation",
45534
- "LinkSecurity",
45535
- "LiveCommunicationKit",
45536
- "LocalAuthentication",
45537
- "LocalAuthenticationEmbeddedUI",
45538
- "LockedCameraCapture",
45539
- "ManagedApp",
45540
- "ManagedAppDistribution",
45541
- "ManagedSettings",
45542
- "ManagedSettingsUI",
45543
- "MapKit",
45544
- "MarketplaceKit",
45545
- "Matter",
45546
- "MatterSupport",
45547
- "MediaAccessibility",
45548
- "MediaIntelligence",
45549
- "MediaIntents",
45550
- "MediaPlayer",
45551
- "MediaToolbox",
45552
- "MessageUI",
45553
- "Messages",
45554
- "Metal",
45555
- "MetalKit",
45556
- "MetalPerformancePrimitives",
45557
- "MetalPerformanceShaders",
45558
- "MetalPerformanceShadersGraph",
45559
- "MetricKit",
45560
- "MobileCoreServices",
45561
- "ModelIO",
45562
- "MultipeerConnectivity",
45563
- "MusicKit",
45564
- "MusicUnderstanding",
45565
- "NaturalLanguage",
45566
- "NearbyInteraction",
45567
- "Network",
45568
- "NetworkExtension",
45569
- "NotificationCenter",
45570
- "NowPlaying",
45571
- "OSLog",
45572
- "OpenAL",
45573
- "OpenGLES",
45574
- "PDFKit",
45575
- "PHASE",
45576
- "PaperKit",
45577
- "PassKit",
45578
- "PencilKit",
45579
- "PermissionKit",
45580
- "Photos",
45581
- "PhotosUI",
45582
- "ProximityReader",
45583
- "PushKit",
45584
- "PushToTalk",
45585
- "QuartzCore",
45586
- "QuickLook",
45587
- "QuickLookThumbnailing",
45588
- "RealityFoundation",
45589
- "RealityKit",
45590
- "RelevanceKit",
45591
- "ReplayKit",
45592
- "RoomPlan",
45593
- "SafariServices",
45594
- "SafetyKit",
45595
- "SceneKit",
45596
- "ScreenTime",
45597
- "SecureElementCredential",
45598
- "Security",
45599
- "SecurityUI",
45600
- "SensitiveContentAnalysis",
45601
- "SensorKit",
45602
- "ServicesAccountLinking",
45603
- "SharedWithYou",
45604
- "SharedWithYouCore",
45605
- "ShazamKit",
45606
- "Social",
45607
- "SoundAnalysis",
45608
- "Speech",
45609
- "SpriteKit",
45610
- "StateReporting",
45611
- "StoreKit",
45612
- "SuggestedActions",
45613
- "SwiftData",
45614
- "SwiftUI",
45615
- "SwiftUICore",
45616
- "Symbols",
45617
- "SystemConfiguration",
45618
- "SystemExtensions",
45619
- "TabularData",
45620
- "TelephonyMessagingKit",
45621
- "TipKit",
45622
- "TouchController",
45623
- "Translation",
45624
- "TranslationUIProvider",
45625
- "TrustInsights",
45626
- "Twitter",
45627
- "UIKit",
45628
- "USDKit",
45629
- "UniformTypeIdentifiers",
45630
- "UserNotifications",
45631
- "UserNotificationsUI",
45632
- "VideoSubscriberAccount",
45633
- "VideoToolbox",
45634
- "Vision",
45635
- "VisionKit",
45636
- "WatchConnectivity",
45637
- "WeatherKit",
45638
- "WebKit",
45639
- "WiFiAware",
45640
- "WidgetKit",
45641
- "WorkoutKit",
45642
- "_AVKit_SwiftUI",
45643
- "_AdAttributionKit_StoreKit",
45644
- "_AppIntents_HealthKit",
45645
- "_AppIntents_SwiftUI",
45646
- "_AppIntents_UIKit",
45647
- "_AuthenticationServices_SwiftUI",
45648
- "_Contacts_AppIntents",
45649
- "_CoreData_CloudKit",
45650
- "_CoreLocationUI_SwiftUI",
45651
- "_CoreNFC_UIKit",
45652
- "_CoreSpotlight_FoundationModels",
45653
- "_DataDetection_SwiftUI",
45654
- "_DeviceActivity_SwiftUI",
45655
- "_DeviceDiscoveryUI_SwiftUI",
45656
- "_FinanceKit_AppIntents",
45657
- "_FoundationModels_SwiftUI",
45658
- "_FoundationModels_UIKit",
45659
- "_GameController_SwiftUI",
45660
- "_GeoToolbox_AppIntents",
45661
- "_GroupActivities_UIKit",
45662
- "_HomeKit_SwiftUI",
45663
- "_Intents_TipKit",
45664
- "_LinkPresentation_AppIntents",
45665
- "_LocationEssentials",
45666
- "_MapKit_SwiftUI",
45667
- "_MarketplaceKit_UIKit",
45668
- "_MediaIntents_AppIntents",
45669
- "_MediaPlayer_AppIntents",
45670
- "_MusicKit_SwiftUI",
45671
- "_NowPlaying_AppIntents",
45672
- "_PassKit_SwiftUI",
45673
- "_PermissionKit_SwiftUI",
45674
- "_PermissionKit_UIKit",
45675
- "_PhotosUI_SwiftUI",
45676
- "_PhotosUI_WidgetKit",
45677
- "_Photos_AppIntents",
45678
- "_QuickLook_SwiftUI",
45679
- "_RealityKit_ComputeGraph",
45680
- "_RealityKit_SwiftUI",
45681
- "_RelevanceKit_MapKit",
45682
- "_SceneKit_SwiftUI",
45683
- "_SecureElementCredential_SwiftUI",
45684
- "_SecureElementCredential_UIKit",
45685
- "_SharedWithYou_AppIntents",
45686
- "_SpriteKit_SwiftUI",
45687
- "_StoreKit_SwiftUI",
45688
- "_SwiftData_CoreData",
45689
- "_SwiftData_SwiftUI",
45690
- "_Translation_SwiftUI",
45691
- "_USDKit_RealityKit",
45692
- "_UserNotifications_AppIntents",
45693
- "_WebKit_SwiftUI",
45694
- "_WorkoutKit_SwiftUI",
45695
- "iAd"
45696
- ]
45697
- };
45698
- }
45699
- });
45700
-
45701
45747
  // src/swift-cxx-reachable.ts
45702
45748
  function cxxTrace(stderr) {
45703
45749
  const files2 = [];
@@ -47217,6 +47263,17 @@ function isPackageSource(file) {
47217
47263
  function sourceFiles(root) {
47218
47264
  return packageFiles(root, false).filter(isPackageSource);
47219
47265
  }
47266
+ function xcodeFlatResources(app) {
47267
+ if (!app) return /* @__PURE__ */ new Set();
47268
+ return new Set(
47269
+ app.resources.filter(
47270
+ (file) => !Object.hasOwn(app.resourceNames, file) && !file.split(import_node_path83.default.sep).some((segment) => segment.endsWith(".xcassets"))
47271
+ )
47272
+ );
47273
+ }
47274
+ function bundleResourcePath(flatResources, disk, file) {
47275
+ return flatResources.has(disk) && !file.split("/").includes("Resources") ? `Resources/${file}` : file;
47276
+ }
47220
47277
  function resourceCandidateFiles(root) {
47221
47278
  return packageFiles(root, false).filter(
47222
47279
  (file) => !isPackageSource(file) && !file.endsWith(".xcconfig") && !["project.pbxproj", "project.xcproj", "Package.resolved"].includes(
@@ -47289,12 +47346,24 @@ function buildSwiftResourceTable(project2, baseUrl, inputs) {
47289
47346
  const disk = byRelative.get(file);
47290
47347
  return !disk || !layout2?.targetDirs.get(disk)?.startsWith(`${XCODE_FRAMEWORKS_DIR}/`);
47291
47348
  });
47292
- const found = enumerateBundleImages(relative4, readContents2, (file) => {
47293
- const disk = byRelative.get(file);
47294
- if (!disk) throw new Error(`image source ${file} has no input file`);
47295
- const key2 = layout2 ? xcodeInputKey(layout2, disk, file) : file;
47296
- return swiftResourceBundleForFile(bundles, key2)?.path ?? ".";
47297
- });
47349
+ const flatResources = xcodeFlatResources(layout2?.app);
47350
+ const bundled = new Map(
47351
+ relative4.map((file) => [
47352
+ bundleResourcePath(flatResources, byRelative.get(file), file),
47353
+ file
47354
+ ])
47355
+ );
47356
+ const found = enumerateBundleImages(
47357
+ [...bundled.keys()],
47358
+ (file) => readContents2(bundled.get(file) ?? file),
47359
+ (marked) => {
47360
+ const file = bundled.get(marked) ?? marked;
47361
+ const disk = byRelative.get(file);
47362
+ if (!disk) throw new Error(`image source ${file} has no input file`);
47363
+ const key2 = layout2 ? xcodeInputKey(layout2, disk, file) : file;
47364
+ return swiftResourceBundleForFile(bundles, key2)?.path ?? ".";
47365
+ }
47366
+ ).map((image) => ({ ...image, file: bundled.get(image.file) ?? image.file }));
47298
47367
  const colors = enumerateBundleColors(catalogFiles, readContents2);
47299
47368
  const symbols = enumerateBundleSymbols(catalogFiles, readContents2, (file) => {
47300
47369
  const disk = byRelative.get(file);
@@ -47478,15 +47547,20 @@ function buildSwiftBundleFiles(packagePath, hosted, inputs, resourceBundles) {
47478
47547
  }
47479
47548
  }
47480
47549
  const groups = /* @__PURE__ */ new Map();
47481
- const appResources = new Set(xcode?.app.resources ?? []);
47550
+ const flatResources = xcodeFlatResources(xcode?.app);
47482
47551
  for (const file of relative4) {
47483
47552
  const disk = import_node_path83.default.join(packagePath, ...file.split("/"));
47553
+ const folderName = xcode?.app.resourceNames[disk];
47554
+ if (folderName) {
47555
+ watched.push(file);
47556
+ addFile(folderName, readPackageFile2(packagePath, disk, limits.resourceBytes));
47557
+ continue;
47558
+ }
47484
47559
  const key2 = xcode ? xcodeInputKey(xcode, disk, file) : file;
47485
47560
  const bundle = swiftResourceBundleForFile(bundles, key2);
47486
47561
  const bundlePath = bundle?.path ?? ".";
47487
47562
  const group = groups.get(bundlePath) ?? /* @__PURE__ */ new Map();
47488
- const resource = appResources.has(disk) && !file.split("/").includes("Resources") ? `Resources/${file}` : file;
47489
- group.set(resource, disk);
47563
+ group.set(bundleResourcePath(flatResources, disk, file), disk);
47490
47564
  groups.set(bundlePath, group);
47491
47565
  }
47492
47566
  for (const bundle of bundles) {
@@ -54026,7 +54100,7 @@ var init_nitro_superset = __esm({
54026
54100
  init_nitroContract();
54027
54101
  init_swift_standin_digest();
54028
54102
  NITRO_SUPERSET_ENTRY_NAME = "superset";
54029
- NITRO_COMPILER_DIGEST = true ? "5586d24405a8b94499b182fe067e8af8be656d9b36558aa6ccbd8c7f9e4150dd" : nitroCompilerSourceDigest(__sootsim_import_meta_dirname, STANDIN_SOURCE_DIGEST2);
54103
+ NITRO_COMPILER_DIGEST = true ? "a4a039ea02c6f6891931ee5a3d0136be472592ea109f8bc1b947d9d235a9559c" : nitroCompilerSourceDigest(__sootsim_import_meta_dirname, STANDIN_SOURCE_DIGEST2);
54030
54104
  nitroSupersetLock = parseLock(nitro_superset_lock_default);
54031
54105
  nitroSupersetKey = (inputs) => nativeEntryKey({ ...inputs, compiler: NITRO_COMPILER_DIGEST });
54032
54106
  published2 = /* @__PURE__ */ new Map();
@@ -54047,7 +54121,7 @@ var init_nitro_superset = __esm({
54047
54121
  var runtime_companion_default;
54048
54122
  var init_runtime_companion = __esm({
54049
54123
  "runtime-companion.json"() {
54050
- runtime_companion_default = { abi: 1, sha256: "c3cfa87c38bca3be3b225d514efe1b9e2ab9119227137e7190dfa25eccf43fe7", file: "node/cli-c3cfa87c38bca3be3b225d514efe1b9e2ab9119227137e7190dfa25eccf43fe7.cjs" };
54124
+ runtime_companion_default = { abi: 1, sha256: "6b48c0f7ae1d87e581af7cf445b2eaad2e1a4aa8fad23a00e1ae90916b2bbc02", file: "node/cli-6b48c0f7ae1d87e581af7cf445b2eaad2e1a4aa8fad23a00e1ae90916b2bbc02.cjs" };
54051
54125
  }
54052
54126
  });
54053
54127
 
@@ -54108,6 +54182,7 @@ function getCliRuntime() {
54108
54182
  "Incompatible Peach runtime companion ABI; run `peach runtime install`"
54109
54183
  );
54110
54184
  }
54185
+ runtime.provideTerser(() => import("terser"));
54111
54186
  loaded2 = { root, runtime };
54112
54187
  return runtime;
54113
54188
  }
@@ -54127,6 +54202,223 @@ var init_cli_runtime = __esm({
54127
54202
  }
54128
54203
  });
54129
54204
 
54205
+ // src/runtime-packs.ts
54206
+ var runtime_packs_exports = {};
54207
+ __export(runtime_packs_exports, {
54208
+ ensureRuntimePackFor: () => ensureRuntimePackFor
54209
+ });
54210
+ function listedFiles(runtimeRoot) {
54211
+ let listed = listedByRoot.get(runtimeRoot);
54212
+ if (listed) return listed;
54213
+ listed = /* @__PURE__ */ new Map();
54214
+ for (const [pack, entry] of Object.entries(readPacks(runtimeRoot) ?? {}))
54215
+ for (const file of entry.files ?? []) {
54216
+ const name3 = import_node_path102.default.posix.basename(file);
54217
+ listed.set(name3, [...listed.get(name3) ?? [], { file, pack }]);
54218
+ }
54219
+ listedByRoot.set(runtimeRoot, listed);
54220
+ return listed;
54221
+ }
54222
+ function readPacks(runtimeRoot) {
54223
+ const cached3 = packsByRoot.get(runtimeRoot);
54224
+ if (cached3 !== void 0) return cached3;
54225
+ const file = import_node_path102.default.join(runtimeRoot, RUNTIME_PACKS_FILE);
54226
+ if (!import_node_fs103.default.existsSync(file)) {
54227
+ packsByRoot.set(runtimeRoot, null);
54228
+ return null;
54229
+ }
54230
+ const parsed = JSON.parse(import_node_fs103.default.readFileSync(file, "utf8"));
54231
+ const packs = {};
54232
+ if (typeof parsed !== "object" || parsed === null)
54233
+ throw new Error(`${file} is not an object`);
54234
+ for (const [prefix, entry] of Object.entries(parsed)) {
54235
+ if (typeof entry?.file !== "string" || typeof entry?.sha256 !== "string")
54236
+ throw new Error(`${file} entry ${prefix} lacks file and sha256`);
54237
+ const files2 = entry.files;
54238
+ if (files2 !== void 0 && !(Array.isArray(files2) && files2.every((f) => typeof f === "string")))
54239
+ throw new Error(`${file} entry ${prefix} has files that are not paths`);
54240
+ packs[prefix] = {
54241
+ file: entry.file,
54242
+ sha256: entry.sha256,
54243
+ ...files2 ? { files: files2 } : {}
54244
+ };
54245
+ }
54246
+ packsByRoot.set(runtimeRoot, packs);
54247
+ return packs;
54248
+ }
54249
+ async function ensureRuntimePackFor(runtimeRoot, pathname) {
54250
+ warmRuntimePacks(runtimeRoot);
54251
+ const prefix = RUNTIME_PACK_PREFIXES.find(
54252
+ (candidate) => pathname.includes(`/${candidate}`)
54253
+ );
54254
+ if (prefix) {
54255
+ await installNamedPack(runtimeRoot, prefix);
54256
+ return;
54257
+ }
54258
+ const listed = listedFiles(runtimeRoot).get(import_node_path102.default.posix.basename(pathname))?.find(({ file }) => pathname.endsWith(`/${file}`));
54259
+ if (listed) {
54260
+ if (!import_node_fs103.default.existsSync(import_node_path102.default.join(runtimeRoot, listed.file)))
54261
+ await installNamedPack(runtimeRoot, listed.pack);
54262
+ return;
54263
+ }
54264
+ const at = pathname.indexOf(`/${RUNTIME_MERGE_PACK_DIR}`);
54265
+ if (at === -1) return;
54266
+ const tenantDir = import_node_path102.default.join(runtimeRoot, RUNTIME_MERGE_PACK_DIR);
54267
+ const rel = pathname.slice(at + RUNTIME_MERGE_PACK_DIR.length + 1);
54268
+ if (!/\.m?js$/.test(rel) || import_node_fs103.default.existsSync(import_node_path102.default.join(tenantDir, rel))) return;
54269
+ await installNamedPack(runtimeRoot, RUNTIME_MERGE_PACK_DIR);
54270
+ }
54271
+ function installNamedPack(runtimeRoot, name3) {
54272
+ if (name3 === RUNTIME_MERGE_PACK_DIR) {
54273
+ const tenantDir = import_node_path102.default.join(runtimeRoot, RUNTIME_MERGE_PACK_DIR);
54274
+ return mergePack(
54275
+ runtimeRoot,
54276
+ name3,
54277
+ import_node_path102.default.join(tenantDir, RUNTIME_MERGE_PACK_INSTALL),
54278
+ tenantDir
54279
+ );
54280
+ }
54281
+ if (readPacks(runtimeRoot)?.[name3]?.files)
54282
+ return mergePack(
54283
+ runtimeRoot,
54284
+ name3,
54285
+ import_node_path102.default.join(runtimeRoot, `.pack-${name3}`),
54286
+ runtimeRoot
54287
+ );
54288
+ return installPack(runtimeRoot, name3, import_node_path102.default.join(runtimeRoot, name3.slice(0, -1)));
54289
+ }
54290
+ function warmRuntimePacks(runtimeRoot) {
54291
+ if (warming.has(runtimeRoot)) return;
54292
+ warming.add(runtimeRoot);
54293
+ const warm = async () => {
54294
+ for (const name3 of Object.keys(readPacks(runtimeRoot) ?? {}))
54295
+ if (!await installNamedPack(runtimeRoot, name3)) return;
54296
+ };
54297
+ const schedule = import_node_timers2.setTimeout;
54298
+ schedule(() => void warm(), WARM_DELAY_MS).unref();
54299
+ }
54300
+ async function mergePack(runtimeRoot, name3, installDir, targetDir) {
54301
+ if (import_node_fs103.default.existsSync(import_node_path102.default.join(installDir, RUNTIME_MERGE_PACK_MERGED))) return true;
54302
+ if (!await installPack(runtimeRoot, name3, installDir)) return false;
54303
+ const link = (sub) => {
54304
+ for (const entry of import_node_fs103.default.readdirSync(import_node_path102.default.join(installDir, sub), {
54305
+ withFileTypes: true
54306
+ })) {
54307
+ const child = import_node_path102.default.join(sub, entry.name);
54308
+ if (entry.isDirectory()) {
54309
+ import_node_fs103.default.mkdirSync(import_node_path102.default.join(targetDir, child), { recursive: true });
54310
+ link(child);
54311
+ } else if (entry.name !== RUNTIME_PACK_MARKER) {
54312
+ try {
54313
+ import_node_fs103.default.linkSync(import_node_path102.default.join(installDir, child), import_node_path102.default.join(targetDir, child));
54314
+ } catch (error) {
54315
+ if (!(error instanceof Error && "code" in error && error.code === "EEXIST"))
54316
+ throw error;
54317
+ }
54318
+ }
54319
+ }
54320
+ };
54321
+ try {
54322
+ link("");
54323
+ import_node_fs103.default.writeFileSync(import_node_path102.default.join(installDir, RUNTIME_MERGE_PACK_MERGED), "");
54324
+ return true;
54325
+ } catch (error) {
54326
+ console.error(
54327
+ `[peach] ${name3} pack merge failed: ${error instanceof Error ? error.message : String(error)}`
54328
+ );
54329
+ return false;
54330
+ }
54331
+ }
54332
+ async function installPack(runtimeRoot, prefix, destDir) {
54333
+ const marker = import_node_path102.default.join(destDir, RUNTIME_PACK_MARKER);
54334
+ if (import_node_fs103.default.existsSync(marker)) return true;
54335
+ const pack = readPacks(runtimeRoot)?.[prefix];
54336
+ if (!pack) return true;
54337
+ let install = inflight.get(destDir);
54338
+ if (!install) {
54339
+ const version2 = import_node_path102.default.basename(runtimeRoot);
54340
+ const url = new URL(pack.file, rnxRuntime.tarballUrl(version2));
54341
+ url.searchParams.set("sha256", pack.sha256);
54342
+ install = installVerifiedTarball({
54343
+ url: url.toString(),
54344
+ digest: { algorithm: "sha256", encoding: "hex", value: pack.sha256 },
54345
+ destDir,
54346
+ installedMarker: RUNTIME_PACK_MARKER,
54347
+ label: `peach runtime ${version2} pack ${prefix}`
54348
+ }).catch((error) => {
54349
+ console.error(
54350
+ `[peach] ${prefix} pack download failed: ${error instanceof Error ? error.message : String(error)}`
54351
+ );
54352
+ }).finally(() => inflight.delete(destDir));
54353
+ inflight.set(destDir, install);
54354
+ }
54355
+ await install;
54356
+ return import_node_fs103.default.existsSync(marker);
54357
+ }
54358
+ var import_node_fs103, import_node_path102, import_node_timers2, inflight, packsByRoot, listedByRoot, WARM_DELAY_MS, warming;
54359
+ var init_runtime_packs = __esm({
54360
+ "src/runtime-packs.ts"() {
54361
+ "use strict";
54362
+ init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
54363
+ import_node_fs103 = __toESM(require("node:fs"), 1);
54364
+ import_node_path102 = __toESM(require("node:path"), 1);
54365
+ import_node_timers2 = require("node:timers");
54366
+ init_src();
54367
+ init_runtime_delivery();
54368
+ inflight = /* @__PURE__ */ new Map();
54369
+ packsByRoot = /* @__PURE__ */ new Map();
54370
+ listedByRoot = /* @__PURE__ */ new Map();
54371
+ WARM_DELAY_MS = 3e4;
54372
+ warming = /* @__PURE__ */ new Set();
54373
+ }
54374
+ });
54375
+
54376
+ // src/runtime-delivery.ts
54377
+ var DEFAULT_RUNTIME_CDN_ORIGIN, RNX_CHANGELOG_URL, RNX_CHANGELOG_API_URL, RNX_RUNTIME_PRODUCT, rnxRuntime;
54378
+ var init_runtime_delivery = __esm({
54379
+ "src/runtime-delivery.ts"() {
54380
+ "use strict";
54381
+ init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
54382
+ init_src();
54383
+ init_cli_runtime();
54384
+ init_home_paths();
54385
+ init_public_brand();
54386
+ DEFAULT_RUNTIME_CDN_ORIGIN = peachPublicBrand.origin;
54387
+ RNX_CHANGELOG_URL = `${peachPublicBrand.origin}/changelog`;
54388
+ RNX_CHANGELOG_API_URL = `${peachPublicBrand.origin}/api/changelog/sootsim`;
54389
+ RNX_RUNTIME_PRODUCT = {
54390
+ id: "peach",
54391
+ defaultCdnOrigin: DEFAULT_RUNTIME_CDN_ORIGIN,
54392
+ manifestPath: "/runtimes/manifest.json",
54393
+ tarballPath: (version2) => `/runtimes/sootsim-runtime-${version2}.tar.zst`,
54394
+ // the engine runtime is a static SPA: shell at the root, engine/ and
54395
+ // engine-tenant/ beneath it. index.html is what the daemon and the
54396
+ // vite/metro plugins serve, so its absence means the tarball is not one.
54397
+ installedMarker: "index.html",
54398
+ verifyInstall: ensureCliCompanion,
54399
+ // canvaskit's ganesh backend is a runtime pack because a browser with WebGPU
54400
+ // never runs it, but linux and CI browsers usually have no GPU and always do
54401
+ afterInstall: async (dir) => {
54402
+ if (process.platform !== "linux" && !process.env.CI) return;
54403
+ const { ensureRuntimePackFor: ensureRuntimePackFor2 } = await Promise.resolve().then(() => (init_runtime_packs(), runtime_packs_exports));
54404
+ await ensureRuntimePackFor2(dir, "/engine/canvaskit-ganesh.wasm");
54405
+ },
54406
+ env: {
54407
+ cdnOrigin: "PEACH_CDN_ORIGIN",
54408
+ channel: "PEACH_RUNTIME_CHANNEL"
54409
+ },
54410
+ ensureHome: ensureRnxHome,
54411
+ configFile: configFilePath,
54412
+ runtimesDir,
54413
+ runtimeDir,
54414
+ cacheDir,
54415
+ readActiveRuntime,
54416
+ writeActiveRuntime
54417
+ };
54418
+ rnxRuntime = createRuntimeDelivery(RNX_RUNTIME_PRODUCT);
54419
+ }
54420
+ });
54421
+
54130
54422
  // src/node-http-fetch.ts
54131
54423
  var node_http_fetch_exports = {};
54132
54424
  __export(node_http_fetch_exports, {
@@ -61803,7 +62095,7 @@ async function workspaceExclusion(root, portable = false, linkedPackages = []) {
61803
62095
  listed.stdout.split("\0").filter(Boolean).map((entry) => entry.replace(/\/$/, ""))
61804
62096
  );
61805
62097
  const ignoreFiles = /* @__PURE__ */ new Map();
61806
- return (relative4) => {
62098
+ return (relative4, knownDirectory) => {
61807
62099
  const parts = relative4.split(import_node_path18.default.sep);
61808
62100
  const linked = linkedPackages.some(
61809
62101
  (directory2) => relative4.startsWith(directory2 + import_node_path18.default.sep)
@@ -61815,16 +62107,16 @@ async function workspaceExclusion(root, portable = false, linkedPackages = []) {
61815
62107
  }
61816
62108
  if (portable && relative4) {
61817
62109
  let excluded = false;
61818
- const isDirectory3 = import_node_fs21.default.lstatSync(import_node_path18.default.join(root, relative4)).isDirectory();
62110
+ const isDirectory3 = knownDirectory ?? import_node_fs21.default.lstatSync(import_node_path18.default.join(root, relative4)).isDirectory();
61819
62111
  for (let index = 0; index < parts.length; index++) {
61820
62112
  const directory2 = parts.slice(0, index).join(import_node_path18.default.sep);
61821
62113
  let rules2 = ignoreFiles.get(directory2);
61822
- if (!rules2) {
61823
- rules2 = (0, import_ignore.default)();
62114
+ if (rules2 === void 0) {
61824
62115
  const file = import_node_path18.default.join(root, directory2, ".gitignore");
61825
- if (import_node_fs21.default.existsSync(file)) rules2.add(import_node_fs21.default.readFileSync(file, "utf8"));
62116
+ rules2 = import_node_fs21.default.existsSync(file) ? (0, import_ignore.default)().add(import_node_fs21.default.readFileSync(file, "utf8")) : null;
61826
62117
  ignoreFiles.set(directory2, rules2);
61827
62118
  }
62119
+ if (!rules2) continue;
61828
62120
  const item = parts.slice(index).join("/");
61829
62121
  const result = rules2.test(isDirectory3 ? `${item}/` : item);
61830
62122
  if (result.ignored) excluded = true;
@@ -62416,7 +62708,7 @@ async function hashWorkspaceInputs(app, everyByte, signal, sourceOnly = false, p
62416
62708
  signal?.throwIfAborted();
62417
62709
  const file = import_node_path62.default.join(directory2, entry.name);
62418
62710
  const relative4 = import_node_path62.default.relative(root, file);
62419
- if (excluded(relative4)) continue;
62711
+ if (excluded(relative4, entry.isDirectory())) continue;
62420
62712
  hash.update(`${relative4}\0`);
62421
62713
  if (entry.isSymbolicLink()) {
62422
62714
  const link = `link\0${await import_node_fs63.default.promises.readlink(file)}\0`;
@@ -62544,8 +62836,10 @@ function syncChangedFiles(root, work, appRelative, excluded, installed) {
62544
62836
  if (existing && (newerOnly ? existing.mtime.getTime() >= source.mtime.getTime() : existing.size === source.size && existing.mtime.getTime() === source.mtime.getTime()))
62545
62837
  return;
62546
62838
  import_node_fs63.default.mkdirSync(import_node_path62.default.dirname(target), { recursive: true });
62547
- import_node_fs63.default.copyFileSync(file, target);
62548
- import_node_fs63.default.utimesSync(target, source.atime, source.mtime);
62839
+ const staged = `${target}.${process.pid}.peach-sync`;
62840
+ import_node_fs63.default.copyFileSync(file, staged);
62841
+ import_node_fs63.default.utimesSync(staged, source.atime, source.mtime);
62842
+ import_node_fs63.default.renameSync(staged, target);
62549
62843
  };
62550
62844
  const walkInstalled = (directory2) => {
62551
62845
  for (const entry of import_node_fs63.default.readdirSync(directory2, { withFileTypes: true })) {
@@ -62563,7 +62857,7 @@ function syncChangedFiles(root, work, appRelative, excluded, installed) {
62563
62857
  walkInstalled(file);
62564
62858
  continue;
62565
62859
  }
62566
- if (excluded(relative4) || entry.isSymbolicLink() || !sourceIos && relative4 === import_node_path62.default.join(appRelative, "ios"))
62860
+ if (excluded(relative4, entry.isDirectory()) || entry.isSymbolicLink() || !sourceIos && relative4 === import_node_path62.default.join(appRelative, "ios"))
62567
62861
  continue;
62568
62862
  if (entry.isDirectory()) walk3(file);
62569
62863
  else if (entry.isFile()) {
@@ -63453,7 +63747,7 @@ init_swift_native_pin();
63453
63747
  init_xcode_project();
63454
63748
  var EXPO_NATIVE_ENTRY_NAME = "ios";
63455
63749
  function expoNativeCompilerDigestValue() {
63456
- return true ? "7667f1dce279c8074ed9dd97de1e3b293077ae012cacf08fd6572978f8ef7dc0" : expoNativeCompilerDigest(__sootsim_import_meta_dirname);
63750
+ return true ? "db679f96e034ef5a3e217e2553ec748fa11d5dd68cd9247dd7bcae61a03d42a1" : expoNativeCompilerDigest(__sootsim_import_meta_dirname);
63457
63751
  }
63458
63752
  var IDENTITY_SOURCE_SKIPS = 1 | 4 | 8 | 16 | 32 | 64 | 128 | 4096;
63459
63753
  function readSources(value) {
@@ -68304,199 +68598,8 @@ var handleOneSDKRequest = compiledModuleRequestHandler(
68304
68598
  init_process_liveness();
68305
68599
  init_public_brand();
68306
68600
  init_runtime_assets();
68307
-
68308
- // src/runtime-delivery.ts
68309
- init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
68310
- init_src();
68311
- init_cli_runtime();
68312
- init_home_paths();
68313
- init_public_brand();
68314
- var DEFAULT_RUNTIME_CDN_ORIGIN = peachPublicBrand.origin;
68315
- var RNX_CHANGELOG_URL = `${peachPublicBrand.origin}/changelog`;
68316
- var RNX_CHANGELOG_API_URL = `${peachPublicBrand.origin}/api/changelog/sootsim`;
68317
- var RNX_RUNTIME_PRODUCT = {
68318
- id: "peach",
68319
- defaultCdnOrigin: DEFAULT_RUNTIME_CDN_ORIGIN,
68320
- manifestPath: "/runtimes/manifest.json",
68321
- tarballPath: (version2) => `/runtimes/sootsim-runtime-${version2}.tar.zst`,
68322
- // the engine runtime is a static SPA: shell at the root, engine/ and
68323
- // engine-tenant/ beneath it. index.html is what the daemon and the
68324
- // vite/metro plugins serve, so its absence means the tarball is not one.
68325
- installedMarker: "index.html",
68326
- verifyInstall: ensureCliCompanion,
68327
- env: {
68328
- cdnOrigin: "PEACH_CDN_ORIGIN",
68329
- channel: "PEACH_RUNTIME_CHANNEL"
68330
- },
68331
- ensureHome: ensureRnxHome,
68332
- configFile: configFilePath,
68333
- runtimesDir,
68334
- runtimeDir,
68335
- cacheDir,
68336
- readActiveRuntime,
68337
- writeActiveRuntime
68338
- };
68339
- var rnxRuntime = createRuntimeDelivery(RNX_RUNTIME_PRODUCT);
68340
-
68341
- // src/runtime-packs.ts
68342
- init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
68343
- var import_node_fs103 = __toESM(require("node:fs"), 1);
68344
- var import_node_path102 = __toESM(require("node:path"), 1);
68345
- var import_node_timers2 = require("node:timers");
68346
- init_src();
68347
- var inflight = /* @__PURE__ */ new Map();
68348
- var packsByRoot = /* @__PURE__ */ new Map();
68349
- var listedByRoot = /* @__PURE__ */ new Map();
68350
- function listedFiles(runtimeRoot) {
68351
- let listed = listedByRoot.get(runtimeRoot);
68352
- if (listed) return listed;
68353
- listed = /* @__PURE__ */ new Map();
68354
- for (const [pack, entry] of Object.entries(readPacks(runtimeRoot) ?? {}))
68355
- for (const file of entry.files ?? []) {
68356
- const name3 = import_node_path102.default.posix.basename(file);
68357
- listed.set(name3, [...listed.get(name3) ?? [], { file, pack }]);
68358
- }
68359
- listedByRoot.set(runtimeRoot, listed);
68360
- return listed;
68361
- }
68362
- function readPacks(runtimeRoot) {
68363
- const cached3 = packsByRoot.get(runtimeRoot);
68364
- if (cached3 !== void 0) return cached3;
68365
- const file = import_node_path102.default.join(runtimeRoot, RUNTIME_PACKS_FILE);
68366
- if (!import_node_fs103.default.existsSync(file)) {
68367
- packsByRoot.set(runtimeRoot, null);
68368
- return null;
68369
- }
68370
- const parsed = JSON.parse(import_node_fs103.default.readFileSync(file, "utf8"));
68371
- const packs = {};
68372
- if (typeof parsed !== "object" || parsed === null)
68373
- throw new Error(`${file} is not an object`);
68374
- for (const [prefix, entry] of Object.entries(parsed)) {
68375
- if (typeof entry?.file !== "string" || typeof entry?.sha256 !== "string")
68376
- throw new Error(`${file} entry ${prefix} lacks file and sha256`);
68377
- const files2 = entry.files;
68378
- if (files2 !== void 0 && !(Array.isArray(files2) && files2.every((f) => typeof f === "string")))
68379
- throw new Error(`${file} entry ${prefix} has files that are not paths`);
68380
- packs[prefix] = {
68381
- file: entry.file,
68382
- sha256: entry.sha256,
68383
- ...files2 ? { files: files2 } : {}
68384
- };
68385
- }
68386
- packsByRoot.set(runtimeRoot, packs);
68387
- return packs;
68388
- }
68389
- async function ensureRuntimePackFor(runtimeRoot, pathname) {
68390
- warmRuntimePacks(runtimeRoot);
68391
- const prefix = RUNTIME_PACK_PREFIXES.find(
68392
- (candidate) => pathname.includes(`/${candidate}`)
68393
- );
68394
- if (prefix) {
68395
- await installNamedPack(runtimeRoot, prefix);
68396
- return;
68397
- }
68398
- const listed = listedFiles(runtimeRoot).get(import_node_path102.default.posix.basename(pathname))?.find(({ file }) => pathname.endsWith(`/${file}`));
68399
- if (listed) {
68400
- if (!import_node_fs103.default.existsSync(import_node_path102.default.join(runtimeRoot, listed.file)))
68401
- await installNamedPack(runtimeRoot, listed.pack);
68402
- return;
68403
- }
68404
- const at = pathname.indexOf(`/${RUNTIME_MERGE_PACK_DIR}`);
68405
- if (at === -1) return;
68406
- const tenantDir = import_node_path102.default.join(runtimeRoot, RUNTIME_MERGE_PACK_DIR);
68407
- const rel = pathname.slice(at + RUNTIME_MERGE_PACK_DIR.length + 1);
68408
- if (!/\.m?js$/.test(rel) || import_node_fs103.default.existsSync(import_node_path102.default.join(tenantDir, rel))) return;
68409
- await installNamedPack(runtimeRoot, RUNTIME_MERGE_PACK_DIR);
68410
- }
68411
- function installNamedPack(runtimeRoot, name3) {
68412
- if (name3 === RUNTIME_MERGE_PACK_DIR) {
68413
- const tenantDir = import_node_path102.default.join(runtimeRoot, RUNTIME_MERGE_PACK_DIR);
68414
- return mergePack(
68415
- runtimeRoot,
68416
- name3,
68417
- import_node_path102.default.join(tenantDir, RUNTIME_MERGE_PACK_INSTALL),
68418
- tenantDir
68419
- );
68420
- }
68421
- if (readPacks(runtimeRoot)?.[name3]?.files)
68422
- return mergePack(
68423
- runtimeRoot,
68424
- name3,
68425
- import_node_path102.default.join(runtimeRoot, `.pack-${name3}`),
68426
- runtimeRoot
68427
- );
68428
- return installPack(runtimeRoot, name3, import_node_path102.default.join(runtimeRoot, name3.slice(0, -1)));
68429
- }
68430
- var WARM_DELAY_MS = 3e4;
68431
- var warming = /* @__PURE__ */ new Set();
68432
- function warmRuntimePacks(runtimeRoot) {
68433
- if (warming.has(runtimeRoot)) return;
68434
- warming.add(runtimeRoot);
68435
- const warm = async () => {
68436
- for (const name3 of Object.keys(readPacks(runtimeRoot) ?? {}))
68437
- if (!await installNamedPack(runtimeRoot, name3)) return;
68438
- };
68439
- const schedule = import_node_timers2.setTimeout;
68440
- schedule(() => void warm(), WARM_DELAY_MS).unref();
68441
- }
68442
- async function mergePack(runtimeRoot, name3, installDir, targetDir) {
68443
- if (import_node_fs103.default.existsSync(import_node_path102.default.join(installDir, RUNTIME_MERGE_PACK_MERGED))) return true;
68444
- if (!await installPack(runtimeRoot, name3, installDir)) return false;
68445
- const link = (sub) => {
68446
- for (const entry of import_node_fs103.default.readdirSync(import_node_path102.default.join(installDir, sub), {
68447
- withFileTypes: true
68448
- })) {
68449
- const child = import_node_path102.default.join(sub, entry.name);
68450
- if (entry.isDirectory()) {
68451
- import_node_fs103.default.mkdirSync(import_node_path102.default.join(targetDir, child), { recursive: true });
68452
- link(child);
68453
- } else if (entry.name !== RUNTIME_PACK_MARKER) {
68454
- try {
68455
- import_node_fs103.default.linkSync(import_node_path102.default.join(installDir, child), import_node_path102.default.join(targetDir, child));
68456
- } catch (error) {
68457
- if (!(error instanceof Error && "code" in error && error.code === "EEXIST"))
68458
- throw error;
68459
- }
68460
- }
68461
- }
68462
- };
68463
- try {
68464
- link("");
68465
- import_node_fs103.default.writeFileSync(import_node_path102.default.join(installDir, RUNTIME_MERGE_PACK_MERGED), "");
68466
- return true;
68467
- } catch (error) {
68468
- console.error(
68469
- `[peach] ${name3} pack merge failed: ${error instanceof Error ? error.message : String(error)}`
68470
- );
68471
- return false;
68472
- }
68473
- }
68474
- async function installPack(runtimeRoot, prefix, destDir) {
68475
- const marker = import_node_path102.default.join(destDir, RUNTIME_PACK_MARKER);
68476
- if (import_node_fs103.default.existsSync(marker)) return true;
68477
- const pack = readPacks(runtimeRoot)?.[prefix];
68478
- if (!pack) return true;
68479
- let install = inflight.get(destDir);
68480
- if (!install) {
68481
- const version2 = import_node_path102.default.basename(runtimeRoot);
68482
- const url = new URL(pack.file, rnxRuntime.tarballUrl(version2));
68483
- url.searchParams.set("sha256", pack.sha256);
68484
- install = installVerifiedTarball({
68485
- url: url.toString(),
68486
- digest: { algorithm: "sha256", encoding: "hex", value: pack.sha256 },
68487
- destDir,
68488
- installedMarker: RUNTIME_PACK_MARKER,
68489
- label: `peach runtime ${version2} pack ${prefix}`
68490
- }).catch((error) => {
68491
- console.error(
68492
- `[peach] ${prefix} pack download failed: ${error instanceof Error ? error.message : String(error)}`
68493
- );
68494
- }).finally(() => inflight.delete(destDir));
68495
- inflight.set(destDir, install);
68496
- }
68497
- await install;
68498
- return import_node_fs103.default.existsSync(marker);
68499
- }
68601
+ init_runtime_delivery();
68602
+ init_runtime_packs();
68500
68603
 
68501
68604
  // src/turbo-bundle.ts
68502
68605
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();