peachsim 0.1.2208 → 0.1.2209

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/dist-lib/agent-daemon-client.cjs +1 -1
  2. package/dist-lib/agent-events.cjs +1 -1
  3. package/dist-lib/attached-projects.cjs +1 -1
  4. package/dist-lib/auth/shared-session.cjs +1 -1
  5. package/dist-lib/backend-origin.cjs +1 -1
  6. package/dist-lib/beta.cjs +1 -1
  7. package/dist-lib/beta.mjs +1 -1
  8. package/dist-lib/bridge-constants.cjs +1 -1
  9. package/dist-lib/bridge-contract-input.cjs +1 -1
  10. package/dist-lib/bridge-contract-input.mjs +1 -1
  11. package/dist-lib/bridge-contract.cjs +1 -1
  12. package/dist-lib/bridge-contract.mjs +1 -1
  13. package/dist-lib/bundle-channel.cjs +448 -22
  14. package/dist-lib/capture-contract.cjs +1 -1
  15. package/dist-lib/capture-contract.mjs +1 -1
  16. package/dist-lib/cloud-contract.cjs +1 -1
  17. package/dist-lib/cloud-contract.mjs +1 -1
  18. package/dist-lib/cloud-test-args.cjs +1 -1
  19. package/dist-lib/cloud-test-args.mjs +1 -1
  20. package/dist-lib/cloud.cjs +1 -1
  21. package/dist-lib/cloud.mjs +1 -1
  22. package/dist-lib/config.cjs +1 -1
  23. package/dist-lib/config.mjs +1 -1
  24. package/dist-lib/detox/index.cjs +2 -2
  25. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  26. package/dist-lib/expo-swift-bundle.cjs +436 -16
  27. package/dist-lib/expo-swift-metadata.cjs +1 -1
  28. package/dist-lib/expo-swift-metadata.mjs +1 -1
  29. package/dist-lib/home-paths.cjs +1 -1
  30. package/dist-lib/host/bridge-host.cjs +448 -22
  31. package/dist-lib/host/fetch-proxy-handler.cjs +4 -4
  32. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  33. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  34. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  35. package/dist-lib/host/websocket-proxy.cjs +1 -1
  36. package/dist-lib/index.cjs +4 -4
  37. package/dist-lib/jump-to-source-babel.cjs +1 -1
  38. package/dist-lib/jump-to-source-native.cjs +1 -1
  39. package/dist-lib/kotlin-host.cjs +7 -1
  40. package/dist-lib/menu.cjs +1 -1
  41. package/dist-lib/menu.mjs +1 -1
  42. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  43. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  44. package/dist-lib/metro-production-bundle.cjs +1 -1
  45. package/dist-lib/metro-production-bundle.mjs +1 -1
  46. package/dist-lib/metro.cjs +4 -4
  47. package/dist-lib/native-app-identity-project.cjs +2 -2
  48. package/dist-lib/native-app-identity-project.mjs +2 -2
  49. package/dist-lib/native-app-identity.cjs +1 -1
  50. package/dist-lib/native-app-identity.mjs +1 -1
  51. package/dist-lib/native-firebase-metadata.cjs +1 -1
  52. package/dist-lib/native-firebase-metadata.mjs +1 -1
  53. package/dist-lib/pdfium-raster.cjs +1 -1
  54. package/dist-lib/pdfium-raster.mjs +1 -1
  55. package/dist-lib/plist.cjs +1 -1
  56. package/dist-lib/plist.mjs +1 -1
  57. package/dist-lib/profiles.cjs +1 -1
  58. package/dist-lib/public-brand.cjs +1 -1
  59. package/dist-lib/public-origins-lib-esm.json +24 -24
  60. package/dist-lib/public-origins-lib.json +59 -53
  61. package/dist-lib/react-native-host-modules.cjs +1 -1
  62. package/dist-lib/react-native-host-modules.mjs +1 -1
  63. package/dist-lib/reap-browser.cjs +1 -1
  64. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  65. package/dist-lib/sdk.cjs +1 -1
  66. package/dist-lib/sdk.mjs +1 -1
  67. package/dist-lib/skills.cjs +5482 -381
  68. package/dist-lib/swift-compile.cjs +98 -6
  69. package/dist-lib/swift-compile.mjs +98 -6
  70. package/dist-lib/swift-package.cjs +1 -1
  71. package/dist-lib/swift-package.mjs +1 -1
  72. package/dist-lib/swift-submit.cjs +1 -1
  73. package/dist-lib/swift-submit.mjs +1 -1
  74. package/dist-lib/swift-toolchain.cjs +1 -1
  75. package/dist-lib/swift.cjs +1 -1
  76. package/dist-lib/vite-swift.cjs +351 -13
  77. package/dist-lib/vite.cjs +4 -4
  78. package/dist-lib/worklet-executable.cjs +1 -1
  79. package/dist-lib/worklet-executable.mjs +1 -1
  80. package/dist-types/packages/peach-engine/src/engine/animated.d.ts +2 -1
  81. package/dist-types/packages/peach-engine/src/engine/animation-graph.d.ts +1 -0
  82. package/dist-types/packages/peach-engine/src/engine/liquid-glass.d.ts +6 -0
  83. package/dist-types/packages/peach-engine/src/engine/node.d.ts +1 -0
  84. package/dist-types/packages/peach-engine/src/engine/types.d.ts +1 -0
  85. package/dist-types/packages/peach-engine/src/render-worker/canvaskit-webgpu.d.ts +8 -0
  86. package/dist-types/packages/peach-engine/src/render-worker/compositor-gpu.d.ts +3 -0
  87. package/dist-types/packages/peach-engine/src/render-worker/compositor-protocol.d.ts +14 -0
  88. package/dist-types/packages/peach-engine/src/render-worker/compositor-runtime/render-tree.d.ts +18 -0
  89. package/kotlin/sdk.tar.gz +0 -0
  90. package/package.json +1 -1
  91. package/runtime-companion.json +1 -1
  92. package/sdk/ios/System/Library/Frameworks/Foundation.framework/Headers/NSCompoundPredicate.h +1 -1
  93. package/sdk/ios/System/Library/Frameworks/Foundation.framework/Headers/NSExpression.h +1 -1
  94. package/sdk/ios/System/Library/Frameworks/Foundation.framework/Headers/NSISO8601DateFormatter.h +1 -1
  95. package/sdk/ios/System/Library/Frameworks/Foundation.framework/Headers/NSMeasurementFormatter.h +1 -1
  96. package/sdk/ios/System/Library/Frameworks/Intents.framework/Headers/INObjectCollection.h +27 -0
  97. package/sdk/ios/System/Library/Frameworks/Intents.framework/Headers/INObjectSection.h +24 -0
  98. package/sdk/ios/System/Library/Frameworks/Intents.framework/Headers/Intents.h +9 -0
  99. package/sdk/ios/System/Library/Frameworks/Intents.framework/Modules/module.modulemap +5 -0
  100. package/sdk/ios/System/Library/Frameworks/UIKit.framework/Headers/UIFeedbackGenerator.h +1 -1
  101. package/sdk/ios/System/Library/Frameworks/UIKit.framework/Headers/UIImpactFeedbackGenerator.h +1 -1
  102. package/sdk/ios/System/Library/Frameworks/UIKit.framework/Headers/UINibLoading.h +1 -1
  103. package/sdk/ios/System/Library/Frameworks/UIKit.framework/Headers/UINotificationFeedbackGenerator.h +1 -1
  104. package/sdk/ios/System/Library/Frameworks/UIKit.framework/Headers/UISelectionFeedbackGenerator.h +1 -1
  105. package/sdk/ios/usr/include/ObjectiveC.apinotes +7 -0
  106. package/src/android-theme.ts +136 -2
  107. package/src/expo-swift-host.ts +90 -1
  108. package/src/generated/android-framework-text.json +4566 -0
  109. package/src/generated/android-framework-themes.json +11 -0
  110. package/src/kotlin-app.ts +24 -4
  111. package/src/kotlin-host.ts +9 -0
  112. package/src/nitro-adapter.lock.json +246 -246
  113. package/src/nitro-superset.lock.json +4 -4
  114. package/src/swift-compile.ts +120 -2
  115. package/src/swift-distribution.lock.json +8 -8
  116. package/src/swift-objc-standin.ts +9 -2
  117. package/src/swift-shared-sdk.ts +2 -1
  118. package/src/swift-standin-builtin-behavior.ts +248 -0
  119. package/src/swift-standin-emit.ts +2 -0
  120. package/src/swift-standins.ts +17 -5
  121. package/src/turbo-runtime.lock.json +17 -17
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2208 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2209 | (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;
@@ -10560,9 +10560,14 @@ function objcView(surface, toolchainBin, stdlib, cacheDir5, work, original, vend
10560
10560
  recursive: true
10561
10561
  });
10562
10562
  const modulemap = import_node_fs32.default.readFileSync(surface.modulemap, "utf8");
10563
+ const forwardEnum = [...originals.values()].some(
10564
+ (text6) => /typedef\s+NS_(?:CLOSED_)?(?:ENUM|OPTIONS)\s*\(\s*\w+\s*,\s*\w+\s*\)\s*;/.test(
10565
+ text6
10566
+ )
10567
+ );
10563
10568
  import_node_fs32.default.writeFileSync(
10564
10569
  import_node_path29.default.join(frameworks, `${surface.module}.framework`, "Modules", "module.modulemap"),
10565
- surface.interface ? modulemap.replace(
10570
+ surface.interface && !forwardEnum ? modulemap.replace(
10566
10571
  new RegExp(`\\n\\s*module\\s+${surface.module}\\.Swift\\s*\\{[^}]*\\}`),
10567
10572
  ""
10568
10573
  ) : modulemap
@@ -11690,7 +11695,7 @@ function swiftSharedSdkViewOptions(moduleRoot, distribution, toolchainBin, sdk)
11690
11695
  const overlay = import_node_path30.default.join(swiftSharedSdkRoot(moduleRoot, distribution), "wasm/include");
11691
11696
  const overlayFiles = (0, import_node_fs33.readdirSync)(overlay, { recursive: true, withFileTypes: true }).filter((entry) => entry.isFile()).map((entry) => import_node_path30.default.join(entry.parentPath, entry.name)).sort();
11692
11697
  const key2 = JSON.stringify([
11693
- "v22",
11698
+ "v23",
11694
11699
  toolchainBin,
11695
11700
  sdk,
11696
11701
  frameworks,
@@ -11747,6 +11752,7 @@ function swiftSharedSdkViewOptions(moduleRoot, distribution, toolchainBin, sdk)
11747
11752
  ...[
11748
11753
  "MacTypes.h",
11749
11754
  "objc/NSObject.h",
11755
+ "ObjectiveC.apinotes",
11750
11756
  "net/if.h",
11751
11757
  "notify.h",
11752
11758
  "notify.modulemap",
@@ -19790,6 +19796,41 @@ function swiftSystemLibraryExclusions(files2, targets, distributionModules) {
19790
19796
  )
19791
19797
  );
19792
19798
  }
19799
+ function distributionClangModulePresent(modules, name3) {
19800
+ return (0, import_node_fs50.existsSync)(import_node_path47.default.join(modules, `${name3}.swiftmodule`)) || (0, import_node_fs50.existsSync)(import_node_path47.default.join(modules, name3, "module.modulemap"));
19801
+ }
19802
+ function distributionClangModuleMap(root, modules) {
19803
+ const missing = DISTRIBUTION_CLANG_MODULES.filter(
19804
+ (mod) => !distributionClangModulePresent(modules, mod.name)
19805
+ );
19806
+ if (missing.length === 0) return null;
19807
+ const key2 = (0, import_node_crypto21.createHash)("sha256").update(modules).update(missing.map((mod) => `${mod.name}\0${mod.source}`).join("\0")).digest("hex").slice(0, 16);
19808
+ const directory2 = import_node_path47.default.join(root, `.peach-clang-modules-${key2}`);
19809
+ const mapPath = import_node_path47.default.join(directory2, "module.modulemap");
19810
+ if (!(0, import_node_fs50.existsSync)(mapPath)) {
19811
+ (0, import_node_fs50.mkdirSync)(directory2, { recursive: true });
19812
+ const parts = [];
19813
+ for (const mod of missing) {
19814
+ const destination = import_node_path47.default.join(directory2, mod.header);
19815
+ (0, import_node_fs50.mkdirSync)(import_node_path47.default.dirname(destination), { recursive: true });
19816
+ (0, import_node_fs50.writeFileSync)(destination, mod.source);
19817
+ parts.push(
19818
+ `module ${mod.name} {
19819
+ requires objc
19820
+ header "${mod.header}"
19821
+ export *
19822
+ }
19823
+ `
19824
+ );
19825
+ }
19826
+ (0, import_node_fs50.writeFileSync)(mapPath, parts.join("\n"));
19827
+ }
19828
+ return mapPath;
19829
+ }
19830
+ function distributionClangModuleOptions(root, modules) {
19831
+ const map2 = distributionClangModuleMap(root, modules);
19832
+ return map2 === null ? [] : ["-Xcc", `-fmodule-map-file=${map2}`];
19833
+ }
19793
19834
  function providedModulesPath(root, modules, excluded) {
19794
19835
  if (!excluded || excluded.size === 0) return modules;
19795
19836
  const entries = (0, import_node_fs50.readdirSync)(modules).filter((entry) => !excluded.has(entry.replace(/\..*$/, ""))).sort();
@@ -20122,7 +20163,7 @@ function emitSwiftPackageManifest(args) {
20122
20163
  import_node_path47.default.join(moduleRoot, "modules"),
20123
20164
  args.moduleExcludes
20124
20165
  )
20125
- )}` : prebuilt ? `, "-Isystem", ${JSON.stringify(providedModulesPath(args.root, prebuilt.modules, args.moduleExcludes))}${prebuilt.moduleMaps.map((map2) => `, "-Xcc", ${JSON.stringify(`-fmodule-map-file=${map2}`)}`).join("")}` : "");
20166
+ )}${distributionClangModuleOptions(args.root, import_node_path47.default.join(moduleRoot, "modules")).map((flag) => `, ${JSON.stringify(flag)}`).join("")}` : prebuilt ? `, "-Isystem", ${JSON.stringify(providedModulesPath(args.root, prebuilt.modules, args.moduleExcludes))}${prebuilt.moduleMaps.map((map2) => `, "-Xcc", ${JSON.stringify(`-fmodule-map-file=${map2}`)}`).join("")}` : "");
20126
20167
  const nativeFlags = [
20127
20168
  ...args.nativeFlags?.get(target.name) ?? [],
20128
20169
  ...args.nativeHeaderFlags ?? []
@@ -20329,7 +20370,9 @@ function syncSwiftTree(base, files2) {
20329
20370
  const walk3 = (dir) => {
20330
20371
  for (const entry of (0, import_node_fs50.readdirSync)(dir, { withFileTypes: true })) {
20331
20372
  const full = import_node_path47.default.join(dir, entry.name);
20332
- if (dir === base && (entry.name === ".build" || entry.name.startsWith(".peach-modules-") || entry.name === SWIFT_LINK_STAMP))
20373
+ if (dir === base && (entry.name === ".build" || entry.name.startsWith(".peach-modules-") || // distribution clang maps are written beside the project and named
20374
+ // from the compiler flags, so a sync must not remove them.
20375
+ entry.name.startsWith(".peach-clang-modules-") || entry.name === SWIFT_LINK_STAMP))
20333
20376
  continue;
20334
20377
  if (entry.isDirectory()) walk3(full);
20335
20378
  else if (!files2.has(full)) (0, import_node_fs50.rmSync)(full, { force: true });
@@ -21954,6 +21997,9 @@ module ${moduleName}.Swift {
21954
21997
  if (!distribution) {
21955
21998
  modulePlan.update((0, import_node_fs50.readFileSync)(import_node_path47.default.join(moduleRoot, "Package.swift")));
21956
21999
  }
22000
+ modulePlan.update(
22001
+ Object.keys(input.files).filter((file) => file.endsWith(".swift")).sort().join("\n")
22002
+ );
21957
22003
  const resourcePlan = (0, import_node_crypto21.createHash)("sha256").update(
21958
22004
  JSON.stringify(
21959
22005
  resourceTargets.filter((target) => target.resources).map((target) => [
@@ -22376,6 +22422,10 @@ module ${moduleName}.Swift {
22376
22422
  import_node_path47.default.join(moduleRoot, "modules"),
22377
22423
  moduleExcludes
22378
22424
  ) : prebuilt ? providedModulesPath(layout2.root, prebuilt.modules, moduleExcludes) : import_node_path47.default.join(layout2.root, ".build", WASM_TRIPLE, "release", "Modules"),
22425
+ ...distribution ? distributionClangModuleOptions(
22426
+ layout2.root,
22427
+ import_node_path47.default.join(moduleRoot, "modules")
22428
+ ) : [],
22379
22429
  ...prebuilt?.moduleMaps.flatMap((map2) => [
22380
22430
  "-Xcc",
22381
22431
  `-fmodule-map-file=${map2}`
@@ -23232,7 +23282,7 @@ function compileSwiftProjectOnce(input, options) {
23232
23282
  report("reusing verified disk artifact");
23233
23283
  return retain(root, previous);
23234
23284
  }
23235
- if (!options.intermediates && process.platform === "darwin" && process.env.TM_SESSION && !windowAdmission() && process.env.CI !== "true" && moduleRoot === sourceSwiftCheckout() && !swiftDistributionAt(moduleRoot)) {
23285
+ if (!options.intermediates && process.platform === "darwin" && !options.intermediates && process.env.TM_SESSION && !windowAdmission() && process.env.CI !== "true" && moduleRoot === sourceSwiftCheckout() && !swiftDistributionAt(moduleRoot)) {
23236
23286
  const requestRoot = (0, import_node_fs50.mkdtempSync)(`${root}.builder-request-`);
23237
23287
  const output2 = import_node_path47.default.join(requestRoot, "output");
23238
23288
  const request = import_node_path47.default.join(requestRoot, "request.json");
@@ -23615,7 +23665,7 @@ function compileSwiftProjectOnce(input, options) {
23615
23665
  options.signal
23616
23666
  );
23617
23667
  }
23618
- var import_node_child_process27, import_node_crypto21, import_node_fs50, import_node_os11, import_node_path47, 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, 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, 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;
23668
+ var import_node_child_process27, import_node_crypto21, import_node_fs50, import_node_os11, import_node_path47, 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, 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;
23619
23669
  var init_swift_compile = __esm({
23620
23670
  "src/swift-compile.ts"() {
23621
23671
  "use strict";
@@ -23750,6 +23800,53 @@ var init_swift_compile = __esm({
23750
23800
  sdkPaths = /* @__PURE__ */ new Map();
23751
23801
  availableModules = /* @__PURE__ */ new Map();
23752
23802
  sdkOverlayFrameworks = /* @__PURE__ */ new Map();
23803
+ DISTRIBUTION_CLANG_MODULES = [
23804
+ {
23805
+ name: "EXStructuredHeaders",
23806
+ header: "EXStructuredHeaders/EXStructuredHeadersParser.h",
23807
+ source: `// Copyright \xA9 2021 650 Industries. All rights reserved.
23808
+
23809
+ #import <Foundation/Foundation.h>
23810
+
23811
+ NS_ASSUME_NONNULL_BEGIN
23812
+
23813
+ typedef NS_ENUM(NSInteger, EXStructuredHeadersParserFieldType) {
23814
+ EXStructuredHeadersParserFieldTypeDictionary,
23815
+ EXStructuredHeadersParserFieldTypeList,
23816
+ EXStructuredHeadersParserFieldTypeItem
23817
+ };
23818
+
23819
+ @interface EXStructuredHeadersParser : NSObject
23820
+
23821
+ - (instancetype)initWithRawInput:(NSString *)raw
23822
+ fieldType:(EXStructuredHeadersParserFieldType)fieldType;
23823
+
23824
+ - (instancetype)initWithRawInput:(NSString *)raw
23825
+ fieldType:(EXStructuredHeadersParserFieldType)fieldType
23826
+ ignoringParameters:(BOOL)shouldIgnoreParameters;
23827
+
23828
+ - (nullable id)parseStructuredFieldsWithError:(NSError ** _Nullable)error;
23829
+
23830
+ @end
23831
+
23832
+ NS_ASSUME_NONNULL_END
23833
+ `
23834
+ },
23835
+ {
23836
+ name: "EXUpdatesBSPatch",
23837
+ header: "EXUpdatesBSPatch.h",
23838
+ source: `// Copyright 2015-present 650 Industries. All rights reserved.
23839
+
23840
+ #pragma once
23841
+
23842
+ #import <Foundation/Foundation.h>
23843
+
23844
+ int EXUpdatesApplyBSDiffPatch(const char * _Nonnull oldFilePath,
23845
+ const char * _Nonnull newFilePath,
23846
+ const char * _Nonnull patchFilePath);
23847
+ `
23848
+ }
23849
+ ];
23753
23850
  ONE_PRODUCT = '.product(name: "One", package: "sootsim-swift")';
23754
23851
  SPRITEKIT_PRODUCT = '.product(name: "SpriteKit", package: "sootsim-swift")';
23755
23852
  importsSpriteKit = (files2) => Object.entries(files2).some(
@@ -23781,7 +23878,7 @@ var init_swift_compile = __esm({
23781
23878
  REACTOR_FLAG = '"-Xclang-linker", "-mexec-model=reactor",\n';
23782
23879
  MULTI_MANIFEST_VERSION = 68;
23783
23880
  SWIFT_HEADER_PRODUCTS_TARGET = "PeachHeaderProducts";
23784
- compilerSourceDigest = true ? "be03c2edac4dfeffbfd874f5ea7a11c25067194164940d7e7c5fa34ead584e7a" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
23881
+ compilerSourceDigest = true ? "f113c3b74986e3d582dde643cb5771f750e5c836703fb20a79a1d67a53884748" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
23785
23882
  nativeCxxCompilerFlags = ["-fno-cxx-modules"];
23786
23883
  cFlagArray = (flags) => JSON.stringify(withoutGlogModuleMap(flags));
23787
23884
  cxxFlagArray = (flags) => JSON.stringify([...nativeCxxCompilerFlags, ...withoutGlogModuleMap(flags)]);
@@ -27890,7 +27987,7 @@ var init_swift_standin_digest = __esm({
27890
27987
  STANDIN_DIGEST_ENTRYPOINTS = ["swift-standins.ts", "swift-objc-compile.ts"];
27891
27988
  SPECIFIER = /from\s*['"]([^'"]+)['"]|import\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
27892
27989
  standinSourceDigest = (srcDir = __sootsim_import_meta_dirname) => sourceClosureDigest(srcDir, STANDIN_DIGEST_ENTRYPOINTS);
27893
- STANDIN_SOURCE_DIGEST = true ? "de5c69cdf5f13f704ced14ea451df60f83586f1006377836b423f3bb3d2ffce8" : standinSourceDigest();
27990
+ STANDIN_SOURCE_DIGEST = true ? "30ee25efff915489853ffb5c34661d03b2ca480fc48fe80201fced1d4821577a" : standinSourceDigest();
27894
27991
  }
27895
27992
  });
27896
27993
 
@@ -29810,6 +29907,244 @@ var init_swift_cxx_standin = __esm({
29810
29907
  }
29811
29908
  });
29812
29909
 
29910
+ // src/swift-standin-builtin-behavior.ts
29911
+ function withBuiltinStandinBehavior(behavior) {
29912
+ const merged = { ...behavior };
29913
+ for (const [module2, members2] of Object.entries(BUILTIN_STANDIN_BEHAVIOR))
29914
+ merged[module2] = {
29915
+ ...Object.fromEntries(
29916
+ Object.entries(members2).map(([path74, entry]) => [
29917
+ path74,
29918
+ { ...entry, builtin: true }
29919
+ ])
29920
+ ),
29921
+ ...behavior[module2]
29922
+ };
29923
+ return merged;
29924
+ }
29925
+ var BUILTIN_STANDIN_BEHAVIOR;
29926
+ var init_swift_standin_builtin_behavior = __esm({
29927
+ "src/swift-standin-builtin-behavior.ts"() {
29928
+ "use strict";
29929
+ init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
29930
+ BUILTIN_STANDIN_BEHAVIOR = {
29931
+ GoogleCast: {
29932
+ kGCKCastDeviceCategory: { body: 'return "com.google.cast.CastDevice"' },
29933
+ kGCKDefaultMediaReceiverApplicationID: { body: 'return "CC1AD845"' },
29934
+ kGCKErrorDomain: { body: 'return "com.google.cast.GCKError"' },
29935
+ "GCKError.init(code:)": {
29936
+ body: "super.init(domain: kGCKErrorDomain, code: code.rawValue, userInfo: nil)"
29937
+ },
29938
+ "GCKDiscoveryCriteria.applicationIDs": { stored: "" },
29939
+ "GCKDiscoveryCriteria.namespaces": { stored: "" },
29940
+ "GCKDiscoveryCriteria.hasApplicationIDs": { body: "return applicationIDs != nil" },
29941
+ "GCKDiscoveryCriteria.hasNamespaces": { body: "return namespaces != nil" },
29942
+ "GCKDiscoveryCriteria.init(applicationID:)": {
29943
+ body: "super.init(); applicationIDs = NSOrderedSet(object: applicationID)"
29944
+ },
29945
+ "GCKDiscoveryCriteria.init(namespaces:)": {
29946
+ body: "super.init(); self.namespaces = namespaces"
29947
+ },
29948
+ GCKLaunchOptions: {
29949
+ members: `
29950
+ private static var peachDeviceLanguageCode: String? { Locale.preferredLanguages.first }
29951
+ `
29952
+ },
29953
+ "GCKLaunchOptions.languageCode": { stored: "" },
29954
+ "GCKLaunchOptions.relaunchIfRunning": { stored: "false" },
29955
+ "GCKLaunchOptions.androidReceiverCompatible": { stored: "false" },
29956
+ "GCKLaunchOptions.init()": {
29957
+ body: "super.init(); languageCode = GCKLaunchOptions.peachDeviceLanguageCode"
29958
+ },
29959
+ "GCKLaunchOptions.init(relaunchIfRunning:)": {
29960
+ body: `
29961
+ super.init()
29962
+ languageCode = GCKLaunchOptions.peachDeviceLanguageCode
29963
+ self.relaunchIfRunning = relaunchIfRunning
29964
+ `
29965
+ },
29966
+ "GCKLaunchOptions.init(languageCode:relaunchIfRunning:)": {
29967
+ body: `
29968
+ super.init()
29969
+ self.languageCode = languageCode
29970
+ self.relaunchIfRunning = relaunchIfRunning
29971
+ `
29972
+ },
29973
+ "GCKLaunchOptions.init(relaunchIfRunning:androidReceiverCompatible:)": {
29974
+ body: `
29975
+ super.init()
29976
+ languageCode = GCKLaunchOptions.peachDeviceLanguageCode
29977
+ self.relaunchIfRunning = relaunchIfRunning
29978
+ self.androidReceiverCompatible = androidReceiverCompatible
29979
+ `
29980
+ },
29981
+ "GCKLaunchOptions.init(relaunchIfRunning:languageCode:androidReceiverCompatible:)": {
29982
+ body: `
29983
+ super.init()
29984
+ self.languageCode = languageCode
29985
+ self.relaunchIfRunning = relaunchIfRunning
29986
+ self.androidReceiverCompatible = androidReceiverCompatible
29987
+ `
29988
+ },
29989
+ GCKCastOptions: {
29990
+ members: "fileprivate var peachDiscoveryCriteria: GCKDiscoveryCriteria?"
29991
+ },
29992
+ "GCKCastOptions.init(discoveryCriteria:)": {
29993
+ body: "super.init(); peachDiscoveryCriteria = discoveryCriteria"
29994
+ },
29995
+ "GCKCastOptions.init(receiverApplicationID:)": {
29996
+ body: "super.init(); peachDiscoveryCriteria = GCKDiscoveryCriteria(applicationID: applicationID)"
29997
+ },
29998
+ "GCKCastOptions.init(supportedNamespaces:)": {
29999
+ body: "super.init(); peachDiscoveryCriteria = GCKDiscoveryCriteria(namespaces: Set(namespaces))"
30000
+ },
30001
+ "GCKCastOptions.physicalVolumeButtonsWillControlDeviceVolume": { stored: "false" },
30002
+ "GCKCastOptions.disableDiscoveryAutostart": { stored: "false" },
30003
+ "GCKCastOptions.disableAnalyticsLogging": { stored: "false" },
30004
+ "GCKCastOptions.launchOptions": { stored: "" },
30005
+ "GCKCastOptions.sharedContainerIdentifier": { stored: "" },
30006
+ "GCKCastOptions.suspendSessionsWhenBackgrounded": { stored: "true" },
30007
+ "GCKCastOptions.stopReceiverApplicationWhenEndingSession": { stored: "false" },
30008
+ "GCKCastOptions.startDiscoveryAfterFirstTapOnCastButton": { stored: "true" },
30009
+ GCKCastContext: {
30010
+ members: `
30011
+ nonisolated(unsafe) fileprivate static var peachShared: GCKCastContext?
30012
+ fileprivate let peachDiscoveryManager = GCKDiscoveryManager()
30013
+ fileprivate let peachSessionManager = GCKSessionManager()
30014
+ fileprivate var peachCredentialsData: GCKCredentialsData?
30015
+ fileprivate static func peachInitialize(_ options: GCKCastOptions) {
30016
+ let context = GCKCastContext()
30017
+ peachShared = context
30018
+ if !options.disableDiscoveryAutostart && !options.startDiscoveryAfterFirstTapOnCastButton {
30019
+ context.peachDiscoveryManager.startDiscovery()
30020
+ }
30021
+ }
30022
+ `
30023
+ },
30024
+ "GCKCastContext.imageCache": { stored: "" },
30025
+ "GCKCastContext.imagePicker": { stored: "" },
30026
+ "GCKCastContext.useDefaultExpandedMediaControls": { stored: "false" },
30027
+ "GCKCastContext.castState": { body: "return .noDevicesAvailable" },
30028
+ "GCKCastContext.discoveryManager": { body: "return peachDiscoveryManager" },
30029
+ "GCKCastContext.sessionManager": { body: "return peachSessionManager" },
30030
+ "GCKCastContext.setLaunch(_:)": { body: "peachCredentialsData = credentialsData" },
30031
+ "GCKCastContext.isSharedInstanceInitialized()": {
30032
+ body: "return peachShared != nil"
30033
+ },
30034
+ "GCKCastContext.sharedInstance()": {
30035
+ body: `
30036
+ guard let shared = peachShared else {
30037
+ fatalError("GCKCastContext.sharedInstance() was called before the shared instance was initialized")
30038
+ }
30039
+ return unsafeDowncast(shared, to: Self.self)
30040
+ `
30041
+ },
30042
+ "GCKCastContext.setSharedInstanceWith(_:)": {
30043
+ body: `
30044
+ if peachShared != nil {
30045
+ fatalError("GCKCastContext.setSharedInstanceWith(_:) was called when the shared instance was already initialized")
30046
+ }
30047
+ peachInitialize(options)
30048
+ `
30049
+ },
30050
+ "GCKCastContext.setSharedInstanceWith(_:error:)": {
30051
+ body: `
30052
+ if peachShared != nil {
30053
+ error?.pointee = GCKError(code: .alreadyInitialized)
30054
+ return false
30055
+ }
30056
+ peachInitialize(options)
30057
+ return true
30058
+ `
30059
+ },
30060
+ GCKDiscoveryManager: {
30061
+ members: `
30062
+ private final class PeachListener {
30063
+ weak var listener: (any GCKDiscoveryManagerListener)?
30064
+ init(_ listener: any GCKDiscoveryManagerListener) { self.listener = listener }
30065
+ }
30066
+ private var peachListeners: [PeachListener] = []
30067
+ private var peachState: GCKDiscoveryState = .stopped
30068
+ `
30069
+ },
30070
+ "GCKDiscoveryManager.discoveryState": { body: "return peachState" },
30071
+ "GCKDiscoveryManager.hasDiscoveredDevices": { body: "return false" },
30072
+ "GCKDiscoveryManager.passiveScan": { stored: "false" },
30073
+ "GCKDiscoveryManager.discoveryActive": { body: "return peachState == .running" },
30074
+ "GCKDiscoveryManager.deviceCount": { body: "return 0" },
30075
+ "GCKDiscoveryManager.add(_:)": {
30076
+ body: `
30077
+ peachListeners.removeAll { $0.listener == nil }
30078
+ if !peachListeners.contains(where: { $0.listener === listener }) {
30079
+ peachListeners.append(PeachListener(listener))
30080
+ }
30081
+ `
30082
+ },
30083
+ "GCKDiscoveryManager.remove(_:)": {
30084
+ body: "peachListeners.removeAll { $0.listener == nil || $0.listener === listener }"
30085
+ },
30086
+ "GCKDiscoveryManager.startDiscovery()": {
30087
+ body: `
30088
+ if peachState == .running { return }
30089
+ peachState = .running
30090
+ for entry in peachListeners {
30091
+ entry.listener?.didStartDiscovery(forDeviceCategory: kGCKCastDeviceCategory)
30092
+ }
30093
+ `
30094
+ },
30095
+ "GCKDiscoveryManager.stopDiscovery()": { body: "peachState = .stopped" },
30096
+ "GCKDiscoveryManager.isDiscoveryActive(forDeviceCategory:)": {
30097
+ body: "return peachState == .running && deviceCategory == kGCKCastDeviceCategory"
30098
+ },
30099
+ "GCKDiscoveryManager.device(at:)": {
30100
+ body: 'fatalError("GCKDiscoveryManager.device(at:) index \\(index) is out of range: no Cast device is discovered")'
30101
+ },
30102
+ "GCKDiscoveryManager.device(withUniqueID:)": { body: "return nil" },
30103
+ "GCKDiscoveryManager.cancelFindOperation()": { body: "" },
30104
+ GCKSessionManager: {
30105
+ members: `
30106
+ private var peachListeners: [any GCKSessionManagerListener] = []
30107
+ private var peachDefaultSessionOptions: [String: [String: any NSCoding & NSObjectProtocol]] = [:]
30108
+ `
30109
+ },
30110
+ "GCKSessionManager.currentSession": { body: "return nil" },
30111
+ "GCKSessionManager.currentCastSession": { body: "return nil" },
30112
+ "GCKSessionManager.connectionState": { body: "return .disconnected" },
30113
+ "GCKSessionManager.hasConnectedSession()": { body: "return false" },
30114
+ "GCKSessionManager.hasConnectedCastSession()": { body: "return false" },
30115
+ "GCKSessionManager.startSession(with:)": { body: "return false" },
30116
+ "GCKSessionManager.startSession(with:sessionOptions:)": { body: "return false" },
30117
+ "GCKSessionManager.suspendSession(with:)": { body: "return false" },
30118
+ "GCKSessionManager.endSession()": { body: "return false" },
30119
+ "GCKSessionManager.endSessionAndStopCasting(_:)": { body: "return false" },
30120
+ "GCKSessionManager.setDefaultSessionOptions(_:forDeviceCategory:)": {
30121
+ body: "peachDefaultSessionOptions[category] = sessionOptions"
30122
+ },
30123
+ "GCKSessionManager.defaultSessionOptions(forDeviceCategory:)": {
30124
+ body: "return peachDefaultSessionOptions[category]"
30125
+ },
30126
+ "GCKSessionManager.add(_:)": {
30127
+ body: `
30128
+ if !peachListeners.contains(where: { $0 === listener }) { peachListeners.append(listener) }
30129
+ `
30130
+ },
30131
+ "GCKSessionManager.remove(_:)": {
30132
+ body: "peachListeners.removeAll { $0 === listener }"
30133
+ },
30134
+ GCKLogger: {
30135
+ members: "nonisolated(unsafe) fileprivate static let peachShared = GCKLogger()"
30136
+ },
30137
+ "GCKLogger.sharedInstance()": { body: "return peachShared" },
30138
+ "GCKLogger.delegate": { stored: "" },
30139
+ "GCKLogger.filter": { stored: "" },
30140
+ "GCKLogger.loggingEnabled": { stored: "true" },
30141
+ "GCKLogger.fileLoggingEnabled": { stored: "false" },
30142
+ "GCKLogger.consoleLoggingEnabled": { stored: "false" }
30143
+ }
30144
+ };
30145
+ }
30146
+ });
30147
+
29813
30148
  // src/swift-standins.ts
29814
30149
  function exec(file, args, cwd) {
29815
30150
  return (0, import_node_child_process37.execFileSync)(file, args, {
@@ -30787,12 +31122,15 @@ function objcStandin(surface, binary2, toolchain, work, behavior, frameworks, si
30787
31122
  dependencyGraphs
30788
31123
  );
30789
31124
  }
30790
- function graphStandin(module2, graphs, values, wasm, binary2, toolchain, work, requiredInits2, behavior, imports2 = [], requireSwift = false, objcProperties = /* @__PURE__ */ new Map(), placeholder = null, inheritedConformances = /* @__PURE__ */ new Map(), projections = /* @__PURE__ */ new Map(), dependencyGraphs = []) {
31125
+ function graphStandin(module2, graphs, values, wasm, binary2, toolchain, work, requiredInits2, declared, imports2 = [], requireSwift = false, objcProperties = /* @__PURE__ */ new Map(), placeholder = null, inheritedConformances = /* @__PURE__ */ new Map(), projections = /* @__PURE__ */ new Map(), dependencyGraphs = []) {
30791
31126
  const paths = new Set(
30792
31127
  graphs.flatMap(
30793
31128
  (graph) => graph.symbols.map((symbol2) => symbol2.pathComponents.join("."))
30794
31129
  )
30795
31130
  );
31131
+ const behavior = new Map(
31132
+ [...declared].filter(([name3, entry]) => !entry.builtin || paths.has(name3))
31133
+ );
30796
31134
  const swiftPaths = new Set(
30797
31135
  requireSwift ? graphs.flatMap(
30798
31136
  (graph) => graph.symbols.filter(isSwiftDeclaration).map((symbol2) => symbol2.pathComponents.join("."))
@@ -31658,7 +31996,8 @@ function readStandinResults(receipt, generation, targets) {
31658
31996
  }
31659
31997
  return { standins, gaps };
31660
31998
  }
31661
- function standinGenerationInputs(binaries, toolchain, behavior = {}, sourceDir) {
31999
+ function standinGenerationInputs(binaries, toolchain, configuredBehavior = {}, sourceDir) {
32000
+ const behavior = withBuiltinStandinBehavior(configuredBehavior);
31662
32001
  const { moduleRoot, release } = toolchain;
31663
32002
  const sdk = swiftModuleSdk(moduleRoot);
31664
32003
  const digest3 = sourceDir === void 0 ? STANDIN_SOURCE_DIGEST : standinSourceDigest(sourceDir);
@@ -31921,8 +32260,13 @@ ${roots.map((file) => ` header "${file}"`).join("\n")}
31921
32260
  }
31922
32261
  return settle(result);
31923
32262
  }
31924
- async function swiftStandins(binaries, toolchain, provided = /* @__PURE__ */ new Set(), behavior = {}, options = {}) {
31925
- const built2 = await buildStandins(binaries, toolchain, provided, behavior);
32263
+ async function swiftStandins(binaries, toolchain, provided = /* @__PURE__ */ new Set(), configuredBehavior = {}, options = {}) {
32264
+ const built2 = await buildStandins(
32265
+ binaries,
32266
+ toolchain,
32267
+ provided,
32268
+ withBuiltinStandinBehavior(configuredBehavior)
32269
+ );
31926
32270
  return {
31927
32271
  standins: options.nativeSlices === false ? built2.standins : built2.standins.map((standin) => {
31928
32272
  const binary2 = binaries.find((item) => item.target === standin.target);
@@ -31930,7 +32274,7 @@ async function swiftStandins(binaries, toolchain, provided = /* @__PURE__ */ new
31930
32274
  standin,
31931
32275
  toolchain.moduleRoot,
31932
32276
  STANDIN_SOURCE_DIGEST,
31933
- Object.keys(behavior[standin.module] ?? {}).length > 0,
32277
+ Object.keys(configuredBehavior[standin.module] ?? {}).length > 0,
31934
32278
  () => swiftBinaryFramework(binary2).dir
31935
32279
  ) : standin;
31936
32280
  }),
@@ -32114,6 +32458,7 @@ var init_swift_standins = __esm({
32114
32458
  init_swift_package();
32115
32459
  init_swift_packages();
32116
32460
  init_swift_shared_sdk();
32461
+ init_swift_standin_builtin_behavior();
32117
32462
  init_swift_standin_digest();
32118
32463
  init_swift_standin_emit();
32119
32464
  init_swift_toolchain();
@@ -48203,7 +48548,7 @@ init_swift_native_pin();
48203
48548
  init_xcode_project();
48204
48549
  var EXPO_NATIVE_ENTRY_NAME = "ios";
48205
48550
  function expoNativeCompilerDigestValue() {
48206
- return true ? "eb49d32cfcc566ba74cdb4489058e30f4d18ebf215e1981371d9acc62bbca1eb" : expoNativeCompilerDigest(__sootsim_import_meta_dirname);
48551
+ return true ? "1b43265acf063948351fe9b1eff823e0f58d23536689055bd673253a28cf568b" : expoNativeCompilerDigest(__sootsim_import_meta_dirname);
48207
48552
  }
48208
48553
  var IDENTITY_SOURCE_SKIPS = 1 | 4 | 8 | 16 | 32 | 64 | 128 | 4096;
48209
48554
  function readSources(value) {
@@ -49706,6 +50051,74 @@ ${source}` : source;
49706
50051
  }
49707
50052
  for (const unit2 of units) unit2.nativeFiles = { ...unit2.nativeFiles, ...support };
49708
50053
  }
50054
+ function swiftAloneObjCClasses(ios, swift, resolveSource) {
50055
+ if (!import_node_fs86.default.existsSync(ios)) return null;
50056
+ const interfaces = /* @__PURE__ */ new Map();
50057
+ const visit3 = (dir) => {
50058
+ for (const child of import_node_fs86.default.readdirSync(resolveSource(dir), { withFileTypes: true })) {
50059
+ if (child.name.startsWith(".") || child.name === "build" || child.name === "node_modules" || /\.(?:xcframework|framework)$/.test(child.name))
50060
+ continue;
50061
+ const file = import_node_path84.default.join(dir, child.name);
50062
+ const resolved = resolveSource(file);
50063
+ const stat = import_node_fs86.default.statSync(resolved);
50064
+ if (stat.isDirectory()) {
50065
+ visit3(file);
50066
+ continue;
50067
+ }
50068
+ if (!stat.isFile() || !child.name.endsWith(".h")) continue;
50069
+ const text6 = import_node_fs86.default.readFileSync(resolved, "utf8");
50070
+ for (const match of text6.matchAll(
50071
+ /@interface\s+(\w+)\s*(\([^)\n]*\))?\s*(?::\s*(\w+))?\s*(?:<([^>\n]+)>)?/g
50072
+ )) {
50073
+ if (match[2]) continue;
50074
+ interfaces.set(match[1], {
50075
+ ...match[3] ? { superName: match[3] } : {},
50076
+ protocols: (match[4] ?? "").split(",").map((name3) => name3.trim()).filter((name3) => name3.length > 0)
50077
+ });
50078
+ }
50079
+ }
50080
+ };
50081
+ visit3(ios);
50082
+ if (interfaces.size === 0) return null;
50083
+ const code = swiftCodeMask(swift);
50084
+ const declared = new Set(
50085
+ [
50086
+ ...code.matchAll(
50087
+ /\b(?:class|struct|enum|protocol|actor|typealias)\s+([A-Za-z_]\w*)/g
50088
+ )
50089
+ ].map((match) => match[1])
50090
+ );
50091
+ const referenced = new Set(code.match(/[A-Za-z_]\w*/g) ?? []);
50092
+ const needed = [...interfaces.keys()].filter((name3) => referenced.has(name3) && !declared.has(name3)).sort();
50093
+ if (needed.length === 0) return null;
50094
+ const protocolsOf = (name3, seen = /* @__PURE__ */ new Set()) => {
50095
+ if (seen.has(name3)) return [];
50096
+ seen.add(name3);
50097
+ const item = interfaces.get(name3);
50098
+ if (!item) return [];
50099
+ return [
50100
+ ...item.protocols,
50101
+ ...item.superName ? protocolsOf(item.superName, seen) : []
50102
+ ];
50103
+ };
50104
+ const classes = needed.map((name3) => {
50105
+ if (!new Set(protocolsOf(name3)).has("EXPermissionsRequester"))
50106
+ return `public class ${name3}: NSObject {}`;
50107
+ return `public class ${name3}: NSObject, EXPermissionsRequester {
50108
+ public static func permissionType() -> String { "" }
50109
+ public func getPermissions() -> [AnyHashable: Any] { [:] }
50110
+ public func requestPermissions(
50111
+ resolver resolve: @escaping EXPromiseResolveBlock,
50112
+ rejecter reject: @escaping EXPromiseRejectBlock
50113
+ ) {}
50114
+ }`;
50115
+ });
50116
+ return `import ExpoModulesCore
50117
+ import Foundation
50118
+
50119
+ ${classes.join("\n\n")}
50120
+ `;
50121
+ }
49709
50122
  async function collectExpoSwiftSources(appRoot, signal, installedWorkspace, prepareNative = false, iosTarget, options = {}) {
49710
50123
  if (traceStore.getStore())
49711
50124
  return collectExpoSwiftSourcesUncached(
@@ -50116,10 +50529,17 @@ ${import_node_fs86.default.readFileSync(source, "utf8")}`;
50116
50529
  } else {
50117
50530
  walk3(ios);
50118
50531
  walkFrameworks(canonical);
50119
- if (nativeSources.size > 0 && !prepareNative && !metadataOnly)
50532
+ if (nativeSources.size > 0 && !prepareNative && !metadataOnly) {
50120
50533
  report(
50121
50534
  `${packageName}: ${namespace} has Objective-C or C sources (${[...nativeSources].sort()[0]}), which compile only from a CocoaPods workspace a Mac prepares; compiling its Swift alone`
50122
50535
  );
50536
+ const surface = swiftAloneObjCClasses(
50537
+ ios,
50538
+ Object.values(files2).join("\n"),
50539
+ resolveSource
50540
+ );
50541
+ if (surface) files2[`Sources/${namespace}/PeachObjCSurface.swift`] = surface;
50542
+ }
50123
50543
  }
50124
50544
  const podspec = import_node_fs86.default.existsSync(ios) ? import_node_fs86.default.readdirSync(ios).find((name3) => name3.endsWith(".podspec")) : void 0;
50125
50545
  const absentFrameworks = [];
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2208 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2209 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2208 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2209 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // ../peach-globals/src/bundle-global-footer.ts
4
4
  function findBundleFooter(source, prefix) {
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2208 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2209 | (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;