peachsim 0.1.1635 → 0.1.1641

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 (142) hide show
  1. package/README.md +10 -1
  2. package/cli/app-config.ts +14 -5
  3. package/cli/app-stubs.ts +96 -22
  4. package/cli/bridge-flow-runner.ts +2 -2
  5. package/cli/cloud-client.ts +60 -40
  6. package/cli/cloud-session.ts +16 -0
  7. package/cli/commands/assert.ts +17 -4
  8. package/cli/commands/box.ts +33 -19
  9. package/cli/commands/doctor.ts +37 -20
  10. package/cli/commands/flow.ts +1 -1
  11. package/cli/commands/inspect/actions.ts +3 -2
  12. package/cli/commands/inspect/core.ts +0 -8
  13. package/cli/commands/inspect/shared.ts +9 -4
  14. package/cli/commands/inspect.ts +65 -61
  15. package/cli/commands/platform.ts +2 -1
  16. package/cli/commands/preview.ts +1 -1
  17. package/cli/commands/record.ts +154 -68
  18. package/cli/commands/swift.ts +18 -4
  19. package/cli/commands/three-mode.ts +4 -38
  20. package/cli/commands/upload.ts +55 -49
  21. package/cli/drivers/playwright-sim-host.ts +65 -42
  22. package/cli/flow-live-status.ts +0 -2
  23. package/cli/main.ts +2 -2
  24. package/cli/outbound-endpoints.ts +7 -5
  25. package/cli/pause-aware-timeout.ts +4 -0
  26. package/cli/ws-bridge.ts +19 -16
  27. package/detox/attempt-events.cjs +99 -6
  28. package/detox/attempt-events.d.cts +7 -0
  29. package/detox/expectations.ts +7 -3
  30. package/detox/index.ts +259 -139
  31. package/detox/jest-environment.cjs +5 -1
  32. package/detox/motion-change.cjs +170 -21
  33. package/detox/motion-change.d.cts +32 -0
  34. package/detox/navigation-lifecycle.ts +35 -3
  35. package/dist-lib/agent-daemon-client.cjs +1 -1
  36. package/dist-lib/agent-events.cjs +1 -1
  37. package/dist-lib/attached-projects.cjs +1 -1
  38. package/dist-lib/auth/shared-session.cjs +1 -1
  39. package/dist-lib/backend-origin.cjs +17 -7
  40. package/dist-lib/beta.cjs +1 -1
  41. package/dist-lib/beta.mjs +1 -1
  42. package/dist-lib/bridge-constants.cjs +1 -1
  43. package/dist-lib/bridge-contract-input.cjs +1 -1
  44. package/dist-lib/bridge-contract-input.mjs +1 -1
  45. package/dist-lib/bridge-contract.cjs +1 -1
  46. package/dist-lib/bridge-contract.mjs +1 -1
  47. package/dist-lib/bundle-channel.cjs +5014 -2268
  48. package/dist-lib/capture-contract.cjs +1 -1
  49. package/dist-lib/capture-contract.mjs +1 -1
  50. package/dist-lib/cloud-contract.cjs +1 -1
  51. package/dist-lib/cloud-contract.mjs +1 -1
  52. package/dist-lib/cloud-test-args.cjs +1 -1
  53. package/dist-lib/cloud-test-args.mjs +1 -1
  54. package/dist-lib/cloud.cjs +1 -1
  55. package/dist-lib/cloud.mjs +1 -1
  56. package/dist-lib/config.cjs +1 -1
  57. package/dist-lib/config.mjs +1 -1
  58. package/dist-lib/detox/index.cjs +1036 -166
  59. package/dist-lib/detox/jest-environment.cjs +5 -1
  60. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  61. package/dist-lib/expo-swift-bundle.cjs +4613 -1963
  62. package/dist-lib/expo-swift-metadata.cjs +9 -7
  63. package/dist-lib/expo-swift-metadata.mjs +9 -7
  64. package/dist-lib/home-paths.cjs +1 -1
  65. package/dist-lib/host/bridge-host.cjs +58072 -16400
  66. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  67. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  68. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  69. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  70. package/dist-lib/host/websocket-proxy.cjs +1 -1
  71. package/dist-lib/index.cjs +2790 -143
  72. package/dist-lib/jump-to-source-babel.cjs +1 -1
  73. package/dist-lib/jump-to-source-native.cjs +1 -1
  74. package/dist-lib/kotlin-host.cjs +1 -1
  75. package/dist-lib/menu.cjs +1 -1
  76. package/dist-lib/menu.mjs +1 -1
  77. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  78. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  79. package/dist-lib/metro-production-bundle.cjs +1 -1
  80. package/dist-lib/metro-production-bundle.mjs +1 -1
  81. package/dist-lib/metro.cjs +2579 -95
  82. package/dist-lib/native-app-identity-project.cjs +243 -53
  83. package/dist-lib/native-app-identity-project.mjs +243 -53
  84. package/dist-lib/native-app-identity.cjs +29 -30
  85. package/dist-lib/native-app-identity.mjs +29 -30
  86. package/dist-lib/native-firebase-metadata.cjs +1 -1
  87. package/dist-lib/native-firebase-metadata.mjs +1 -1
  88. package/dist-lib/plist.cjs +1 -1
  89. package/dist-lib/plist.mjs +1 -1
  90. package/dist-lib/profiles.cjs +1 -1
  91. package/dist-lib/public-brand.cjs +1 -1
  92. package/dist-lib/react-native-host-modules.cjs +2 -2
  93. package/dist-lib/react-native-host-modules.mjs +2 -2
  94. package/dist-lib/scripts/dev-server-scanner.cjs +8 -6
  95. package/dist-lib/sdk.cjs +4 -3
  96. package/dist-lib/sdk.mjs +4 -3
  97. package/dist-lib/skills.cjs +66475 -23097
  98. package/dist-lib/swift-compile.cjs +452 -260
  99. package/dist-lib/swift-compile.mjs +451 -252
  100. package/dist-lib/swift-package.cjs +1 -1
  101. package/dist-lib/swift-package.mjs +1 -1
  102. package/dist-lib/swift-submit.cjs +14 -7
  103. package/dist-lib/swift-submit.mjs +14 -7
  104. package/dist-lib/swift-toolchain.cjs +316 -41
  105. package/dist-lib/swift.cjs +1 -1
  106. package/dist-lib/vite-swift.cjs +8188 -5636
  107. package/dist-lib/vite.cjs +2857 -12
  108. package/dist-lib/worklet-executable.cjs +14 -2
  109. package/dist-lib/worklet-executable.mjs +14 -2
  110. package/package.json +1 -1
  111. package/src/backend-origin.ts +21 -6
  112. package/src/expo-swift-host.ts +5 -2
  113. package/src/expoKotlinContract.ts +4 -7
  114. package/src/expoSwiftContract.ts +4 -6
  115. package/src/host/staged-host-files.ts +9 -0
  116. package/src/native-app-identity-project.ts +1 -4
  117. package/src/native-app-identity.ts +1 -4
  118. package/src/nativeAppIconContract.ts +1 -4
  119. package/src/output-lock-stdio.ts +36 -0
  120. package/src/react-native-bridge-modules.ts +106 -78
  121. package/src/react-native-host-modules.ts +4 -1
  122. package/src/settings-bundle.ts +1 -4
  123. package/src/swift-compile.ts +224 -139
  124. package/src/swift-distribution.lock.json +23 -12
  125. package/src/swift-distribution.ts +103 -4
  126. package/src/swift-host.ts +95 -30
  127. package/src/swift-icu.ts +16 -10
  128. package/src/swift-objc-compile.ts +547 -0
  129. package/src/swift-objc-metadata.ts +204 -0
  130. package/src/swift-objc-sdk.ts +883 -19
  131. package/src/swift-objc-standin.ts +126 -14
  132. package/src/swift-package-manifest.ts +42 -1
  133. package/src/swift-packages.ts +35 -21
  134. package/src/swift-root-lock.ts +153 -0
  135. package/src/swift-standin-emit.ts +40 -7
  136. package/src/swift-standins.ts +404 -138
  137. package/src/swift-submit.ts +18 -7
  138. package/src/swift-toolchain.ts +378 -46
  139. package/src/swiftContract.ts +12 -0
  140. package/src/worker-system-chunks.ts +11 -12
  141. package/src/worklet-executable.ts +19 -1
  142. package/src/xcode-project.ts +280 -33
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.1635 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.1641 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -4763,6 +4763,38 @@ var init_version = __esm({
4763
4763
  }
4764
4764
  });
4765
4765
 
4766
+ // ../peach-engine/src/platform/adapter.ts
4767
+ function isRuntimePlatform(value) {
4768
+ return value === "ios" || value === "android";
4769
+ }
4770
+ function getRuntimePlatformAdapter(platform) {
4771
+ return RUNTIME_PLATFORM_ADAPTERS[platform];
4772
+ }
4773
+ var IOS_ADAPTER, ANDROID_ADAPTER, RUNTIME_PLATFORM_ADAPTERS;
4774
+ var init_adapter = __esm({
4775
+ "../peach-engine/src/platform/adapter.ts"() {
4776
+ "use strict";
4777
+ IOS_ADAPTER = Object.freeze({
4778
+ id: "ios",
4779
+ displayName: "iOS",
4780
+ isIOS: true,
4781
+ isAndroid: false,
4782
+ select: (registry) => registry.ios
4783
+ });
4784
+ ANDROID_ADAPTER = Object.freeze({
4785
+ id: "android",
4786
+ displayName: "Android",
4787
+ isIOS: false,
4788
+ isAndroid: true,
4789
+ select: (registry) => registry.android
4790
+ });
4791
+ RUNTIME_PLATFORM_ADAPTERS = Object.freeze({
4792
+ ios: IOS_ADAPTER,
4793
+ android: ANDROID_ADAPTER
4794
+ });
4795
+ }
4796
+ });
4797
+
4766
4798
  // cli/app-project.ts
4767
4799
  function firstNamedFile(dir, names) {
4768
4800
  for (const name2 of names) {
@@ -5498,19 +5530,48 @@ function packageNativeRequests(dir) {
5498
5530
  (a, b) => a.kind.localeCompare(b.kind) || a.name.localeCompare(b.name)
5499
5531
  );
5500
5532
  }
5501
- function wireSlotMigration(appDir, wire) {
5533
+ function dependencyNativeOwners(appDir, manifest) {
5502
5534
  const owners = /* @__PURE__ */ new Map();
5503
- const manifest = readProjectManifest(appDir);
5504
- for (const name2 of Object.keys({
5535
+ const pending = Object.keys({
5505
5536
  ...manifest?.devDependencies,
5506
5537
  ...manifest?.dependencies
5507
- })) {
5508
- const dir = installedPackageDir(appDir, name2);
5509
- if (!dir) continue;
5510
- for (const request of packageNativeRequests(dir))
5511
- if (!owners.has(`${request.kind}:${request.name}`))
5512
- owners.set(`${request.kind}:${request.name}`, name2);
5538
+ }).map((name2) => ({ from: appDir, name: name2 }));
5539
+ const visited = /* @__PURE__ */ new Set();
5540
+ for (let index = 0; index < pending.length; index++) {
5541
+ const { from, name: name2 } = pending[index];
5542
+ const dir = installedPackageDir(from, name2);
5543
+ if (!dir || visited.has(dir)) continue;
5544
+ visited.add(dir);
5545
+ const dependency = readProjectManifest(dir);
5546
+ const optional = readPackageJson(dir)?.optionalDependencies;
5547
+ if (dir.split("/").includes("node_modules") && (from === appDir || hasNativeCode(dir, "ios"))) {
5548
+ for (const request of packageNativeRequests(dir))
5549
+ if (!owners.has(`${request.kind}:${request.name}`))
5550
+ owners.set(`${request.kind}:${request.name}`, dependency?.name ?? name2);
5551
+ }
5552
+ for (const child of Object.keys({
5553
+ ...dependency?.dependencies,
5554
+ ...isRecord(optional) ? optional : {}
5555
+ }))
5556
+ pending.push({ from: dir, name: child });
5513
5557
  }
5558
+ return owners;
5559
+ }
5560
+ function configModule(configPath, packages) {
5561
+ const body = [" packages: {", ...packages, " },"];
5562
+ if (configPath && (configPath.endsWith(".cjs") || configPath.endsWith(".js") && /\bmodule\.exports\b/.test(readSmallFile(configPath) ?? "")))
5563
+ return ["module.exports = {", ...body, "}"].join("\n");
5564
+ return [
5565
+ `import { defineConfig } from '${rnxPublicBrand.packageName}/config'`,
5566
+ "",
5567
+ "export default defineConfig({",
5568
+ ...body,
5569
+ "})"
5570
+ ].join("\n");
5571
+ }
5572
+ function wireSlotMigration(appDir, configPath, wire, kept = []) {
5573
+ const manifest = readProjectManifest(appDir);
5574
+ const owners = dependencyNativeOwners(appDir, manifest);
5514
5575
  if (manifest) {
5515
5576
  for (const request of scanLocalNative(
5516
5577
  appDir,
@@ -5518,7 +5579,8 @@ function wireSlotMigration(appDir, wire) {
5518
5579
  { module: /* @__PURE__ */ new Set(), view: /* @__PURE__ */ new Set() },
5519
5580
  void 0,
5520
5581
  /* @__PURE__ */ new Set(),
5521
- true
5582
+ true,
5583
+ owners
5522
5584
  ))
5523
5585
  if (!owners.has(`${request.kind}:${request.name}`))
5524
5586
  owners.set(`${request.kind}:${request.name}`, request.package);
@@ -5558,9 +5620,17 @@ function wireSlotMigration(appDir, wire) {
5558
5620
  ].filter(Boolean);
5559
5621
  return ` [${JSON.stringify(owner)}]: { ${parts.join(", ")} },`;
5560
5622
  });
5623
+ if (lines.length && kept.length)
5624
+ return [
5625
+ ...manual.map((line) => `// ${line}`),
5626
+ `// keep ${kept.join(", ")}; merge these into packages`,
5627
+ " packages: {",
5628
+ ...lines,
5629
+ " },"
5630
+ ].join("\n");
5561
5631
  return [
5562
- ...lines.length ? [" packages: {", ...lines, " },"] : [],
5563
- ...manual.map((line) => ` // ${line}`)
5632
+ ...manual.map((line) => `// ${line}`),
5633
+ ...lines.length ? [configModule(configPath, lines)] : []
5564
5634
  ].join("\n");
5565
5635
  }
5566
5636
  function listDir(dir) {
@@ -5588,7 +5658,7 @@ function hasNativeCode(dir, platform) {
5588
5658
  const manifest = readSmallFile((0, import_node_path16.join)(dir, "package.json"));
5589
5659
  return manifest !== null && manifest.includes('"codegenConfig"');
5590
5660
  }
5591
- function scanLocalNative(appDir, pkg, answered, platform, knownPackages = /* @__PURE__ */ new Set(), includeLegacy = false) {
5661
+ function scanLocalNative(appDir, pkg, answered, platform, knownPackages = /* @__PURE__ */ new Set(), includeLegacy = false, providers) {
5592
5662
  const expoModuleDirs = [];
5593
5663
  const excludedModuleDirs = [];
5594
5664
  const sourceFiles = [];
@@ -5615,7 +5685,9 @@ function scanLocalNative(appDir, pkg, answered, platform, knownPackages = /* @__
5615
5685
  expoModuleDirs.map((dir) => [
5616
5686
  dir,
5617
5687
  scanRepository(dir).directories.flatMap(
5618
- (sub) => listDir(sub).filter((name2) => NATIVE_SOURCE_FILE.test(name2)).map((name2) => (0, import_node_path16.join)(sub, name2))
5688
+ (sub) => listDir(sub).filter(
5689
+ (name2) => NATIVE_SOURCE_FILE.test(name2) && (!platform || (platform === "ios" ? name2.endsWith(".swift") : name2.endsWith(".kt")))
5690
+ ).map((name2) => (0, import_node_path16.join)(sub, name2))
5619
5691
  )
5620
5692
  ])
5621
5693
  );
@@ -5631,10 +5703,11 @@ function scanLocalNative(appDir, pkg, answered, platform, knownPackages = /* @__
5631
5703
  };
5632
5704
  const found = /* @__PURE__ */ new Map();
5633
5705
  const add = (kind, name2, file, line) => {
5634
- const packageName = owner((0, import_node_path16.dirname)(file));
5635
- if (knownPackages.has(packageName)) return;
5636
5706
  const key = `${kind}:${name2}`;
5637
5707
  if (found.has(key)) return;
5708
+ providers ??= dependencyNativeOwners(appDir, pkg);
5709
+ const packageName = providers.get(key) ?? owner((0, import_node_path16.dirname)(file));
5710
+ if (knownPackages.has(packageName)) return;
5638
5711
  const moduleDir = expoModuleDirs.find((dir) => file.startsWith(`${dir}/`)) ?? null;
5639
5712
  found.set(key, {
5640
5713
  kind,
@@ -5643,7 +5716,9 @@ function scanLocalNative(appDir, pkg, answered, platform, knownPackages = /* @__
5643
5716
  path: `${(0, import_node_path16.relative)(appDir, file)}:${line}`,
5644
5717
  expoModule: moduleDir ? (0, import_node_path16.relative)(appDir, moduleDir) || "." : null,
5645
5718
  swift: moduleDir ? (nativeFilesByModule.get(moduleDir) ?? []).some(
5646
- (path20) => path20.endsWith(".swift")
5719
+ (path20) => path20.endsWith(".swift") && [...(readSmallFile(path20) ?? "").matchAll(/\bName\(\s*"(\w+)"\s*\)/g)].some(
5720
+ (match) => match[1] === name2
5721
+ )
5647
5722
  ) : false,
5648
5723
  answered: answered[kind].has(name2)
5649
5724
  });
@@ -5704,6 +5779,7 @@ var init_app_stubs = __esm({
5704
5779
  import_sucrase = require("sucrase");
5705
5780
  init_config();
5706
5781
  init_is_record();
5782
+ init_public_brand();
5707
5783
  init_visit_parsed_program();
5708
5784
  init_detect();
5709
5785
  SOURCE_FILE = /\.[cm]?[jt]sx?$/;
@@ -5778,12 +5854,19 @@ async function loadConfigFile(project) {
5778
5854
  }
5779
5855
  const wire = WIRE_SLOTS.filter((slot) => loaded2[slot] !== void 0);
5780
5856
  if (wire.length > 0) {
5781
- const migration = wireSlotMigration(project.appDir, {
5782
- modules: { ...loaded2.turboModules, ...loaded2.nativeModules },
5783
- views: { ...loaded2.nativeViews }
5784
- });
5857
+ const slots = WIRE_SLOTS;
5858
+ const kept = Object.entries(loaded2).filter(([key, value]) => !slots.includes(key) && value !== void 0).map(([key]) => key);
5859
+ const migration = wireSlotMigration(
5860
+ project.appDir,
5861
+ project.configPath,
5862
+ {
5863
+ modules: { ...loaded2.turboModules, ...loaded2.nativeModules },
5864
+ views: { ...loaded2.nativeViews }
5865
+ },
5866
+ kept
5867
+ );
5785
5868
  throw new Error(
5786
- `${wire.join(", ")} moved under packages, keyed by the package whose native side they answer. replace them with:
5869
+ `${wire.join(", ")} moved under packages, keyed by the package whose native side they answer. ${kept.length ? "remove them and add" : "replace the config with"}:
5787
5870
  ${migration}`
5788
5871
  );
5789
5872
  }
@@ -5995,6 +6078,9 @@ module.exports = __toCommonJS(src_exports);
5995
6078
  // cli/cloud-client.ts
5996
6079
  var import_node_crypto = require("node:crypto");
5997
6080
 
6081
+ // ../peach-engine/src/preview/bundle-layout.ts
6082
+ var import_metro_production_bundle = require("peachsim/metro-production-bundle");
6083
+
5998
6084
  // src/androidAutolinkingContract.ts
5999
6085
  init_bundleGlobalFooter();
6000
6086
  var FOOTER = "__peachAndroidAutolinkedPackages";
@@ -6029,7 +6115,7 @@ function insertPackageVersionsFooter(source, versions) {
6029
6115
  }
6030
6116
 
6031
6117
  // ../peach-engine/src/tenant-bundle-mode.ts
6032
- var import_metro_production_bundle = require("peachsim/metro-production-bundle");
6118
+ var import_metro_production_bundle2 = require("peachsim/metro-production-bundle");
6033
6119
 
6034
6120
  // ../peach-engine/src/tenant-runtime-environment.ts
6035
6121
  function readBrowserLocation() {
@@ -6508,8 +6594,403 @@ var PEACH_UPSTREAM_MODULES = {
6508
6594
  ...PEACH_REACT_NATIVE_UPSTREAM_MODULES
6509
6595
  };
6510
6596
 
6597
+ // ../peach-compat/src/stub-manifest.ts
6598
+ var COMPAT_STUBS = {
6599
+ reactNativeScreens: {
6600
+ specifier: "react-native-screens",
6601
+ stubFile: "react-native-screens.ts",
6602
+ runtimeTier: "lazy",
6603
+ buildResolvers: ["vite", "dep-prebundle"]
6604
+ },
6605
+ reactNativeMaskedView: {
6606
+ specifier: "@react-native-masked-view/masked-view",
6607
+ stubFile: "masked-view.ts",
6608
+ runtimeTier: "none",
6609
+ buildResolvers: ["vite"]
6610
+ },
6611
+ reactNativeCommunityMaskedView: {
6612
+ specifier: "@react-native-community/masked-view",
6613
+ stubFile: "masked-view.ts",
6614
+ runtimeTier: "none",
6615
+ buildResolvers: ["vite"]
6616
+ },
6617
+ reactNativeTeleport: {
6618
+ specifier: "react-native-teleport",
6619
+ stubFile: "react-native-teleport.tsx",
6620
+ runtimeTier: "lazy",
6621
+ buildResolvers: ["vite", "dep-prebundle"]
6622
+ },
6623
+ reactNativeIosContextMenu: {
6624
+ specifier: "react-native-ios-context-menu",
6625
+ stubFile: "react-native-ios-context-menu.ts",
6626
+ runtimeTier: "core",
6627
+ buildResolvers: ["vite"]
6628
+ },
6629
+ reactNativeIosUtilities: {
6630
+ specifier: "react-native-ios-utilities",
6631
+ stubFile: "react-native-ios-utilities.ts",
6632
+ runtimeTier: "core",
6633
+ buildResolvers: ["vite"]
6634
+ },
6635
+ expoSplashScreen: {
6636
+ specifier: "expo-splash-screen",
6637
+ stubFile: "expo-splash-screen.ts",
6638
+ runtimeTier: "none",
6639
+ buildResolvers: ["vite", "dep-prebundle"]
6640
+ },
6641
+ reactNativeLaunchArguments: {
6642
+ specifier: "react-native-launch-arguments",
6643
+ stubFile: "react-native-launch-arguments.ts",
6644
+ runtimeTier: "core",
6645
+ buildResolvers: ["vite"]
6646
+ },
6647
+ expoWinterFormData: {
6648
+ specifier: "expo/build/winter/FormData",
6649
+ stubFile: "expo-winter-formdata.ts",
6650
+ runtimeTier: "none",
6651
+ buildResolvers: ["vite"]
6652
+ },
6653
+ expoWinterFetch: {
6654
+ specifier: "expo/build/winter/fetch/index",
6655
+ stubFile: "expo-winter-fetch.ts",
6656
+ runtimeTier: "none",
6657
+ buildResolvers: ["vite"]
6658
+ },
6659
+ expoConstants: {
6660
+ specifier: "expo-constants",
6661
+ stubFile: "expo-constants.ts",
6662
+ runtimeTier: "none",
6663
+ buildResolvers: ["vite", "dep-prebundle"]
6664
+ },
6665
+ expoLinearGradient: {
6666
+ specifier: "expo-linear-gradient",
6667
+ stubFile: "expo-linear-gradient.ts",
6668
+ runtimeTier: "none",
6669
+ buildResolvers: ["vite", "dep-prebundle"]
6670
+ },
6671
+ expoBlur: {
6672
+ specifier: "expo-blur",
6673
+ stubFile: "expo-blur.ts",
6674
+ runtimeTier: "none",
6675
+ buildResolvers: ["vite", "dep-prebundle"]
6676
+ },
6677
+ expoLiquidGlassView: {
6678
+ specifier: "expo-liquid-glass-view",
6679
+ stubFile: "expo-liquid-glass-view.ts",
6680
+ runtimeTier: "core",
6681
+ buildResolvers: ["vite", "dep-prebundle"]
6682
+ },
6683
+ expoGlassEffect: {
6684
+ specifier: "expo-glass-effect",
6685
+ stubFile: "expo-glass-effect.ts",
6686
+ runtimeTier: "lazy",
6687
+ buildResolvers: ["vite", "dep-prebundle"]
6688
+ },
6689
+ expoSymbols: {
6690
+ specifier: "expo-symbols",
6691
+ stubFile: "expo-symbols.ts",
6692
+ runtimeTier: "none",
6693
+ buildResolvers: ["vite", "dep-prebundle"]
6694
+ },
6695
+ expoMeshGradient: {
6696
+ specifier: "expo-mesh-gradient",
6697
+ stubFile: "expo-mesh-gradient.ts",
6698
+ runtimeTier: "lazy",
6699
+ buildResolvers: ["vite", "dep-prebundle"]
6700
+ },
6701
+ reactNativeBottomTabs: {
6702
+ specifier: "react-native-bottom-tabs",
6703
+ stubFile: "react-native-bottom-tabs.ts",
6704
+ runtimeTier: "lazy",
6705
+ buildResolvers: ["vite", "dep-prebundle"]
6706
+ },
6707
+ callstackReactNativeBottomTabs: {
6708
+ specifier: "@callstack/react-native-bottom-tabs",
6709
+ stubFile: "react-native-bottom-tabs.ts",
6710
+ runtimeTier: "lazy",
6711
+ buildResolvers: ["vite", "dep-prebundle"]
6712
+ },
6713
+ expoUiSwiftUi: {
6714
+ specifier: "@expo/ui/swift-ui",
6715
+ stubFile: "expo-ui.ts",
6716
+ runtimeTier: "lazy",
6717
+ buildResolvers: ["vite"]
6718
+ },
6719
+ expoUiCommunityMenu: {
6720
+ specifier: "@expo/ui/community/menu",
6721
+ stubFile: "expo-ui-menu.ts",
6722
+ runtimeTier: "lazy",
6723
+ buildResolvers: ["vite"]
6724
+ },
6725
+ expoModulesCore: {
6726
+ specifier: "expo-modules-core",
6727
+ stubFile: "expo-modules-core-package.ts",
6728
+ runtimeTier: "lazy",
6729
+ buildResolvers: ["vite"]
6730
+ },
6731
+ reactNativeWorklets: {
6732
+ specifier: "react-native-worklets",
6733
+ stubFile: "react-native-worklets-pkg/index.ts",
6734
+ runtimeTier: "none",
6735
+ buildResolvers: ["vite", "dep-prebundle"]
6736
+ },
6737
+ reactNativeWorkletsNative: {
6738
+ specifier: "react-native-worklets/specs/NativeWorkletsModule",
6739
+ stubFile: "react-native-worklets-native.ts",
6740
+ runtimeTier: "lazy",
6741
+ buildResolvers: ["vite"]
6742
+ },
6743
+ reactNativeWorkletsPackageJson: {
6744
+ specifier: "react-native-worklets/package.json",
6745
+ stubFile: "react-native-worklets-pkg/package.json",
6746
+ runtimeTier: "none",
6747
+ buildResolvers: ["vite"]
6748
+ },
6749
+ reactNativePdf: {
6750
+ specifier: "react-native-pdf",
6751
+ stubFile: "react-native-pdf.ts",
6752
+ runtimeTier: "lazy",
6753
+ buildResolvers: ["vite"]
6754
+ },
6755
+ expoBackgroundFetch: {
6756
+ specifier: "expo-background-fetch",
6757
+ stubFile: "expo-background-fetch.ts",
6758
+ runtimeTier: "none",
6759
+ buildResolvers: ["vite"]
6760
+ },
6761
+ expoBackgroundTask: {
6762
+ specifier: "expo-background-task",
6763
+ stubFile: "expo-background-task.ts",
6764
+ runtimeTier: "none",
6765
+ buildResolvers: ["vite"]
6766
+ },
6767
+ expoSensors: {
6768
+ specifier: "expo-sensors",
6769
+ stubFile: "expo-sensors.ts",
6770
+ runtimeTier: "none",
6771
+ buildResolvers: ["vite"]
6772
+ },
6773
+ expoVideoThumbnails: {
6774
+ specifier: "expo-video-thumbnails",
6775
+ stubFile: "expo-video-thumbnails.ts",
6776
+ runtimeTier: "none",
6777
+ buildResolvers: ["vite"]
6778
+ },
6779
+ googleSignin: {
6780
+ specifier: "@react-native-google-signin/google-signin",
6781
+ stubFile: "react-native-google-signin.ts",
6782
+ runtimeTier: "none",
6783
+ buildResolvers: ["vite", "dep-prebundle"]
6784
+ },
6785
+ reactNativeHapticFeedback: {
6786
+ specifier: "react-native-haptic-feedback",
6787
+ stubFile: "react-native-haptic-feedback.ts",
6788
+ runtimeTier: "none",
6789
+ buildResolvers: ["vite", "dep-prebundle"]
6790
+ },
6791
+ reactNativeSegmentedControl: {
6792
+ specifier: "@react-native-segmented-control/segmented-control",
6793
+ stubFile: "react-native-segmented-control.ts",
6794
+ runtimeTier: "lazy",
6795
+ buildResolvers: ["vite"]
6796
+ },
6797
+ reactNativeUitextview: {
6798
+ specifier: "react-native-uitextview",
6799
+ stubFile: "react-native-uitextview.ts",
6800
+ runtimeTier: "lazy",
6801
+ buildResolvers: ["vite"]
6802
+ },
6803
+ expoBattery: {
6804
+ specifier: "expo-battery",
6805
+ stubFile: "expo-battery.ts",
6806
+ runtimeTier: "none",
6807
+ buildResolvers: ["vite"]
6808
+ },
6809
+ expoBrightness: {
6810
+ specifier: "expo-brightness",
6811
+ stubFile: "expo-brightness.ts",
6812
+ runtimeTier: "none",
6813
+ buildResolvers: ["vite"]
6814
+ },
6815
+ // sdk 57 moved the async calendar surface behind `expo-calendar/legacy`.
6816
+ // the bare-specifier alias is a PREFIX match, so without this longer entry
6817
+ // it rewrites the subpath to `<stubs>/expo-calendar.ts/legacy`. it needs its
6818
+ // own stub too: upstream's root re-exports `legacyWarnings`, where every
6819
+ // async method throws "imported from expo-calendar is deprecated", so
6820
+ // sharing the root stub makes the whole legacy surface throw at call time.
6821
+ expoCalendarLegacy: {
6822
+ specifier: "expo-calendar/legacy",
6823
+ stubFile: "expo-calendar-legacy.ts",
6824
+ runtimeTier: "none",
6825
+ buildResolvers: ["vite"]
6826
+ },
6827
+ expoCalendar: {
6828
+ specifier: "expo-calendar",
6829
+ stubFile: "expo-calendar.ts",
6830
+ runtimeTier: "none",
6831
+ buildResolvers: ["vite"]
6832
+ },
6833
+ expoCellular: {
6834
+ specifier: "expo-cellular",
6835
+ stubFile: "expo-cellular.ts",
6836
+ runtimeTier: "none",
6837
+ buildResolvers: ["vite"]
6838
+ },
6839
+ // same `/legacy` prefix-alias and deprecated-root case as expo-calendar.
6840
+ expoContactsLegacy: {
6841
+ specifier: "expo-contacts/legacy",
6842
+ stubFile: "expo-contacts-legacy.ts",
6843
+ runtimeTier: "none",
6844
+ buildResolvers: ["vite"]
6845
+ },
6846
+ expoContacts: {
6847
+ specifier: "expo-contacts",
6848
+ stubFile: "expo-contacts.ts",
6849
+ runtimeTier: "none",
6850
+ buildResolvers: ["vite"]
6851
+ },
6852
+ expoMailComposer: {
6853
+ specifier: "expo-mail-composer",
6854
+ stubFile: "expo-mail-composer.ts",
6855
+ runtimeTier: "none",
6856
+ buildResolvers: ["vite"]
6857
+ },
6858
+ expoPrint: {
6859
+ specifier: "expo-print",
6860
+ stubFile: "expo-print.ts",
6861
+ runtimeTier: "none",
6862
+ buildResolvers: ["vite"]
6863
+ },
6864
+ expoSecureStore: {
6865
+ specifier: "expo-secure-store",
6866
+ stubFile: "expo-secure-store.ts",
6867
+ runtimeTier: "none",
6868
+ buildResolvers: ["vite", "dep-prebundle"]
6869
+ },
6870
+ expoInsights: {
6871
+ specifier: "expo-insights",
6872
+ stubFile: "expo-insights.ts",
6873
+ runtimeTier: "none",
6874
+ buildResolvers: ["vite"]
6875
+ },
6876
+ expoIntentLauncher: {
6877
+ specifier: "expo-intent-launcher",
6878
+ stubFile: "expo-intent-launcher.ts",
6879
+ runtimeTier: "none",
6880
+ buildResolvers: ["vite"]
6881
+ },
6882
+ expoTaskManager: {
6883
+ specifier: "expo-task-manager",
6884
+ stubFile: "expo-task-manager.ts",
6885
+ runtimeTier: "none",
6886
+ buildResolvers: ["vite"]
6887
+ },
6888
+ expoApplication: {
6889
+ specifier: "expo-application",
6890
+ stubFile: "expo-application.ts",
6891
+ runtimeTier: "none",
6892
+ buildResolvers: ["vite", "dep-prebundle"]
6893
+ },
6894
+ expoNetwork: {
6895
+ specifier: "expo-network",
6896
+ stubFile: "expo-network.ts",
6897
+ runtimeTier: "none",
6898
+ buildResolvers: ["vite"]
6899
+ },
6900
+ expoScreenCapture: {
6901
+ specifier: "expo-screen-capture",
6902
+ stubFile: "expo-screen-capture.ts",
6903
+ runtimeTier: "none",
6904
+ buildResolvers: ["vite"]
6905
+ },
6906
+ expoScreenOrientation: {
6907
+ specifier: "expo-screen-orientation",
6908
+ stubFile: "expo-screen-orientation.ts",
6909
+ runtimeTier: "none",
6910
+ buildResolvers: ["vite"]
6911
+ },
6912
+ expoQuickActions: {
6913
+ specifier: "expo-quick-actions",
6914
+ stubFile: "expo-quick-actions.ts",
6915
+ runtimeTier: "none",
6916
+ buildResolvers: ["vite"]
6917
+ },
6918
+ expoSharing: {
6919
+ specifier: "expo-sharing",
6920
+ stubFile: "expo-sharing.ts",
6921
+ runtimeTier: "none",
6922
+ buildResolvers: ["vite"]
6923
+ },
6924
+ expoSms: {
6925
+ specifier: "expo-sms",
6926
+ stubFile: "expo-sms.ts",
6927
+ runtimeTier: "none",
6928
+ buildResolvers: ["vite"]
6929
+ },
6930
+ expoSqlite: {
6931
+ specifier: "expo-sqlite",
6932
+ stubFile: "expo-sqlite.ts",
6933
+ runtimeTier: "none",
6934
+ buildResolvers: ["vite", "dep-prebundle"]
6935
+ },
6936
+ expoSpeech: {
6937
+ specifier: "expo-speech",
6938
+ stubFile: "expo-speech.ts",
6939
+ runtimeTier: "none",
6940
+ buildResolvers: ["vite"]
6941
+ },
6942
+ expoStoreReview: {
6943
+ specifier: "expo-store-review",
6944
+ stubFile: "expo-store-review.ts",
6945
+ runtimeTier: "none",
6946
+ buildResolvers: ["vite"]
6947
+ },
6948
+ expoTrackingTransparency: {
6949
+ specifier: "expo-tracking-transparency",
6950
+ stubFile: "expo-tracking-transparency.ts",
6951
+ runtimeTier: "none",
6952
+ buildResolvers: ["vite"]
6953
+ },
6954
+ expoShareExtension: {
6955
+ specifier: "expo-share-extension",
6956
+ stubFile: "noop-sdks-extra/expo-share-extension.ts",
6957
+ runtimeTier: "none",
6958
+ buildResolvers: ["vite"]
6959
+ },
6960
+ expoHealthConnect: {
6961
+ specifier: "expo-health-connect",
6962
+ stubFile: "noop-sdks-extra/expo-health-connect.ts",
6963
+ runtimeTier: "none",
6964
+ buildResolvers: ["vite"]
6965
+ },
6966
+ expoInAppUpdates: {
6967
+ specifier: "expo-in-app-updates",
6968
+ stubFile: "noop-sdks-extra/expo-in-app-updates.ts",
6969
+ runtimeTier: "none",
6970
+ buildResolvers: ["vite"]
6971
+ },
6972
+ expoSuperwall: {
6973
+ specifier: "expo-superwall",
6974
+ stubFile: "noop-sdks-extra/expo-superwall.ts",
6975
+ runtimeTier: "none",
6976
+ buildResolvers: ["vite"]
6977
+ },
6978
+ communityCheckbox: {
6979
+ specifier: "@react-native-community/checkbox",
6980
+ stubFile: "react-native-community-checkbox.ts",
6981
+ runtimeTier: "lazy",
6982
+ buildResolvers: ["vite"]
6983
+ },
6984
+ reactNavigationNative: {
6985
+ specifier: "@react-navigation/native",
6986
+ stubFile: "react-navigation-native.tsx",
6987
+ runtimeTier: "none",
6988
+ buildResolvers: ["vite"]
6989
+ }
6990
+ };
6991
+
6511
6992
  // ../peach-engine/src/metro-fingerprint.ts
6512
- var import_metro_production_bundle2 = require("peachsim/metro-production-bundle");
6993
+ var import_metro_production_bundle3 = require("peachsim/metro-production-bundle");
6513
6994
  var import_react_native_host_modules = require("peachsim/react-native-host-modules");
6514
6995
 
6515
6996
  // ../peach-engine/src/stub-pattern-matcher.ts
@@ -6521,12 +7002,16 @@ function extractPackageFromPath(modulePath) {
6521
7002
  nodeModulesIndex = 0;
6522
7003
  prefixLength = "node_modules/".length;
6523
7004
  }
6524
- const pathWithinNodeModules = modulePath.slice(nodeModulesIndex + prefixLength);
6525
- if (pathWithinNodeModules.startsWith("@")) {
6526
- const parts = pathWithinNodeModules.split("/");
6527
- return parts.length >= 2 ? `${parts[0]}/${parts[1]}` : null;
7005
+ return packageNameAt(modulePath, nodeModulesIndex + prefixLength) || null;
7006
+ }
7007
+ function packageNameAt(modulePath, start) {
7008
+ const firstSlash = modulePath.indexOf("/", start);
7009
+ if (modulePath.startsWith("@", start)) {
7010
+ if (firstSlash === -1) return null;
7011
+ const secondSlash = modulePath.indexOf("/", firstSlash + 1);
7012
+ return modulePath.slice(start, secondSlash === -1 ? void 0 : secondSlash);
6528
7013
  }
6529
- return pathWithinNodeModules.split("/")[0] || null;
7014
+ return modulePath.slice(start, firstSlash === -1 ? void 0 : firstSlash);
6530
7015
  }
6531
7016
 
6532
7017
  // cli/cloud-client.ts
@@ -6801,6 +7286,8 @@ function createCloudSession(input) {
6801
7286
  return session;
6802
7287
  }
6803
7288
  function createCloudBoxSession(input) {
7289
+ if (input.appFontsWireSha256 !== void 0 && !/^[a-f0-9]{64}$/.test(input.appFontsWireSha256))
7290
+ throw new Error("cloud box session has an invalid app-font wire digest");
6804
7291
  const session = {
6805
7292
  version: CLOUD_SESSION_VERSION,
6806
7293
  service: "box",
@@ -6809,7 +7296,8 @@ function createCloudBoxSession(input) {
6809
7296
  apiOrigin: normalizeCloudOrigin(input.apiOrigin.trim()),
6810
7297
  ...input.platform ? { platform: input.platform } : {},
6811
7298
  ...input.device?.trim() ? { device: input.device.trim() } : {},
6812
- ...input.artifact ? { artifact: input.artifact } : {}
7299
+ ...input.artifact ? { artifact: input.artifact } : {},
7300
+ ...input.appFontsWireSha256 !== void 0 ? { appFontsWireSha256: input.appFontsWireSha256 } : {}
6813
7301
  };
6814
7302
  if (!session.boxId || !session.boxToken) {
6815
7303
  throw new Error("cloud box session requires a box, an origin, and a box token");
@@ -6850,13 +7338,16 @@ function parseCloudSession(encoded) {
6850
7338
  try {
6851
7339
  if (parsed.service === "box") {
6852
7340
  if (!boxId || !boxToken) throw new Error("unreadable cloud box session");
7341
+ if (parsed.appFontsWireSha256 !== void 0 && typeof parsed.appFontsWireSha256 !== "string")
7342
+ throw new Error("unreadable app-font wire digest");
6853
7343
  return createCloudBoxSession({
6854
7344
  boxId,
6855
7345
  boxToken,
6856
7346
  apiOrigin,
6857
7347
  platform,
6858
7348
  device,
6859
- artifact
7349
+ artifact,
7350
+ appFontsWireSha256: parsed.appFontsWireSha256
6860
7351
  });
6861
7352
  }
6862
7353
  const simId = parsed.simId;
@@ -6952,11 +7443,13 @@ function cloudCommand(command) {
6952
7443
  return clean;
6953
7444
  }
6954
7445
  var CloudBridge = class {
6955
- constructor(session) {
7446
+ constructor(session, explicitTimeoutMs) {
6956
7447
  this.session = session;
7448
+ this.explicitTimeoutMs = explicitTimeoutMs;
6957
7449
  }
6958
7450
  plane = "cloud";
6959
7451
  async send(command, options) {
7452
+ const timeoutMs = options?.timeoutMs ?? this.explicitTimeoutMs ?? options?.defaultTimeoutMs;
6960
7453
  const body = {
6961
7454
  id: (0, import_node_crypto.randomUUID)(),
6962
7455
  claimId: this.session.claimId,
@@ -6973,7 +7466,7 @@ var CloudBridge = class {
6973
7466
  "content-type": "application/json"
6974
7467
  },
6975
7468
  body: JSON.stringify(body),
6976
- ...options?.timeoutMs ? { signal: AbortSignal.timeout(options.timeoutMs) } : {}
7469
+ ...timeoutMs ? { signal: AbortSignal.timeout(timeoutMs) } : {}
6977
7470
  }
6978
7471
  );
6979
7472
  } catch (error) {
@@ -7023,11 +7516,13 @@ var CloudBridge = class {
7023
7516
  }
7024
7517
  };
7025
7518
  var CloudBoxBridge = class {
7026
- constructor(session) {
7519
+ constructor(session, explicitTimeoutMs) {
7027
7520
  this.session = session;
7521
+ this.explicitTimeoutMs = explicitTimeoutMs;
7028
7522
  }
7029
7523
  plane = "cloud";
7030
7524
  async send(command, options) {
7525
+ const timeoutMs = options?.timeoutMs ?? this.explicitTimeoutMs ?? options?.defaultTimeoutMs;
7031
7526
  const id = (0, import_node_crypto.randomUUID)();
7032
7527
  const payload = {};
7033
7528
  for (const [key, value] of Object.entries(command)) {
@@ -7044,7 +7539,7 @@ var CloudBoxBridge = class {
7044
7539
  "content-type": "application/json"
7045
7540
  },
7046
7541
  body: JSON.stringify({ id, command: payload }),
7047
- ...options?.timeoutMs ? { signal: AbortSignal.timeout(options.timeoutMs) } : {}
7542
+ ...timeoutMs ? { signal: AbortSignal.timeout(timeoutMs) } : {}
7048
7543
  }
7049
7544
  );
7050
7545
  } catch (error) {
@@ -7092,7 +7587,8 @@ var CloudBoxBridge = class {
7092
7587
  function createCloudBridgeForParsed(parsed) {
7093
7588
  const session = resolveCloudSessionForParsed(parsed);
7094
7589
  if (!session) return null;
7095
- return session.service === "box" ? new CloudBoxBridge(session) : new CloudBridge(session);
7590
+ const timeoutMs = parsed.explicitTimeout ? parsed.commandTimeoutMs : void 0;
7591
+ return session.service === "box" ? new CloudBoxBridge(session, timeoutMs) : new CloudBridge(session, timeoutMs);
7096
7592
  }
7097
7593
 
7098
7594
  // cli/current-sim.ts
@@ -7589,6 +8085,10 @@ function setPauseAwareTimeout(fn, budgetMs, hostPid) {
7589
8085
  }
7590
8086
  return () => {
7591
8087
  timers.delete(timer);
8088
+ if (timers.size === 0 && poll) {
8089
+ clearInterval(poll);
8090
+ poll = void 0;
8091
+ }
7592
8092
  };
7593
8093
  }
7594
8094
 
@@ -7738,7 +8238,10 @@ var BRIDGE_VALUE_FLAGS_TABLE = [
7738
8238
  {
7739
8239
  names: ["--timeout"],
7740
8240
  apply: (state, value) => {
7741
- if (value !== void 0) state.commandTimeoutMs = Number(value);
8241
+ if (value !== void 0) {
8242
+ state.commandTimeoutMs = Number(value);
8243
+ state.explicitTimeout = true;
8244
+ }
7742
8245
  }
7743
8246
  },
7744
8247
  {
@@ -7878,7 +8381,7 @@ function createBridge(wsPort, opts = {}) {
7878
8381
  return {
7879
8382
  plane: "local",
7880
8383
  async send(cmd, callOpts) {
7881
- const effectiveTimeoutMs = callOpts?.timeoutMs ?? commandTimeoutMs;
8384
+ const effectiveTimeoutMs = callOpts?.timeoutMs ?? (opts.explicitTimeout ? commandTimeoutMs : callOpts?.defaultTimeoutMs) ?? commandTimeoutMs;
7882
8385
  const sendOnce = async (defaultSimId, cmdOverride) => {
7883
8386
  await ready;
7884
8387
  if (terminalError) throw terminalError;
@@ -7891,11 +8394,7 @@ function createBridge(wsPort, opts = {}) {
7891
8394
  const clearTimeoutFn = setPauseAwareTimeout(
7892
8395
  () => {
7893
8396
  pending.delete(id);
7894
- reject(
7895
- new Error(
7896
- `command timed out after ${Math.round(effectiveTimeoutMs / 1e3)}s`
7897
- )
7898
- );
8397
+ reject(new Error(`command timed out after ${effectiveTimeoutMs / 1e3}s`));
7899
8398
  },
7900
8399
  effectiveTimeoutMs,
7901
8400
  lineageBySimId.get(payload.simId)?.hostPid
@@ -8024,6 +8523,7 @@ function createBridgeFromParsed(parsed) {
8024
8523
  if (cloudBridge) return cloudBridge;
8025
8524
  const options = {
8026
8525
  commandTimeoutMs: parsed.commandTimeoutMs,
8526
+ explicitTimeout: parsed.explicitTimeout,
8027
8527
  simId: parsed.simId,
8028
8528
  simIdSource: parsed.simIdSource
8029
8529
  };
@@ -9904,9 +10404,10 @@ async function tapByText(bridge, query, options = {}, opts = {}) {
9904
10404
  });
9905
10405
  }
9906
10406
  async function resolveTextTapTarget(bridge, query, options = {}) {
10407
+ const needle = options.exact ? query : query.trim().toLowerCase();
10408
+ if (!needle) return { matched: 0, total: 0 };
9907
10409
  const { tree } = await inspectTree(bridge, 50);
9908
10410
  if (!Array.isArray(tree)) return { matched: 0, total: 0 };
9909
- const needle = options.exact ? query : query.toLowerCase();
9910
10411
  let candidates = collectTextCandidates(tree).filter(
9911
10412
  ({ node: node2, ancestorTestIDs, role }) => {
9912
10413
  const text2 = nodeText(node2);
@@ -9930,7 +10431,7 @@ async function resolveTextTapTarget(bridge, query, options = {}) {
9930
10431
  if (actionable.length > 0) candidates = actionable;
9931
10432
  if (!options.exact) {
9932
10433
  const whole = candidates.filter(
9933
- ({ node: node2 }) => nodeText(node2).trim().toLowerCase() === needle.trim()
10434
+ ({ node: node2 }) => nodeText(node2).trim().toLowerCase() === needle
9934
10435
  );
9935
10436
  if (whole.length > 0) candidates = whole;
9936
10437
  }
@@ -11009,9 +11510,1993 @@ init_replacement_module_handler();
11009
11510
  // src/installed-package-versions.ts
11010
11511
  var import_fs3 = __toESM(require("fs"), 1);
11011
11512
  var import_path2 = __toESM(require("path"), 1);
11012
- var import_lazy_stub_patterns = require("@peach/compat/lazy-stub-patterns");
11013
- var import_native_package_names = require("@peach/compat/native-package-names");
11014
- var import_stub_manifest2 = require("@peach/compat/stub-manifest");
11513
+
11514
+ // ../peach-compat/src/lazy-stub-patterns.ts
11515
+ var LAZY_STUB_PATTERNS = [
11516
+ "@10play/tentap-editor",
11517
+ "@adobe/react-native-aepcore",
11518
+ "@aws-amplify/react-native",
11519
+ "@azesmway/react-native-unity",
11520
+ "@azzapp/react-native-skia-video",
11521
+ "@batch.com/react-native-plugin",
11522
+ "@bravemobile/react-native-code-push",
11523
+ "@bugsnag/react-native",
11524
+ "@bugsnag/react-native-performance",
11525
+ "@callstack/react-native-bottom-tabs",
11526
+ "@callstack/react-native-visionos",
11527
+ "@clerk/expo",
11528
+ "@cometchat/chat-uikit-react-native",
11529
+ "@didomi/react-native",
11530
+ "@dr.pogodin/react-native-static-server",
11531
+ "@eabdullazyanov/react-native-sms-user-consent",
11532
+ "@expensify/react-native-live-markdown",
11533
+ "@expensify/react-native-wallet",
11534
+ "@expo/ui/community/menu",
11535
+ "@expo/ui/swift-ui",
11536
+ "@giphy/react-native-sdk",
11537
+ "@google/react-native-make-payment",
11538
+ "@googlemaps/react-native-navigation-sdk",
11539
+ "@invertase/react-native-apple-authentication",
11540
+ "@iterable/expo-plugin",
11541
+ "@kingstinct/react-native-healthkit",
11542
+ "@livekit/react-native",
11543
+ "@lodev09/react-native-exify",
11544
+ "@luciq/react-native",
11545
+ "@mattermost/react-native-paste-input",
11546
+ "@mgcrea/vision-camera-barcode-scanner",
11547
+ "@mozzius/expo-dynamic-app-icon",
11548
+ "@okta/okta-react-native",
11549
+ "@playerdata/react-native-mcu-manager",
11550
+ "@react-native-community/audio-toolkit",
11551
+ "@react-native-community/checkbox",
11552
+ "@react-native-community/progress-bar-android",
11553
+ "@react-native-community/toolbar-android",
11554
+ "@react-native-documents/picker",
11555
+ "@react-native-firebase/app-distribution",
11556
+ "@react-native-firebase/database",
11557
+ "@react-native-firebase/in-app-messaging",
11558
+ "@react-native-ml-kit/face-detection",
11559
+ "@react-native-ml-kit/text-recognition",
11560
+ "@react-native-segmented-control/segmented-control",
11561
+ "@react-native-seoul/naver-login",
11562
+ "@renegades/react-native-tickle",
11563
+ "@rnw-community/react-native-payments",
11564
+ "@rudderstack/rudder-integration-firebase-react-native",
11565
+ "@rudderstack/rudder-sdk-react-native",
11566
+ "@sbaiahmed1/react-native-biometrics",
11567
+ "@sbaiahmed1/react-native-biometrics/types",
11568
+ "@sbaiahmed1/react-native-blur",
11569
+ "@shopify/checkout-sheet-kit",
11570
+ "@shopify/react-native-skia",
11571
+ "@stream-io/video-react-native-sdk",
11572
+ "@stripe/stripe-identity-react-native",
11573
+ "@stripe/stripe-react-native",
11574
+ "@stripe/stripe-react-native/lib/typescript/src/types",
11575
+ "@stripe/stripe-terminal-react-native",
11576
+ "@supersami/rn-foreground-service",
11577
+ "@survicate/react-native-survicate",
11578
+ "@twilio/voice-react-native-sdk",
11579
+ "@walletconnect/react-native-compat",
11580
+ "@xmartlabs/react-native-line",
11581
+ "@zoontek/react-native-navigation-bar",
11582
+ "clevertap-react-native",
11583
+ "expo-dynamic-app-icon",
11584
+ "expo-glass-effect",
11585
+ "expo-health-connect",
11586
+ "expo-in-app-updates",
11587
+ "expo-mesh-gradient",
11588
+ "expo-modules-core",
11589
+ "expo-share-extension",
11590
+ "expo-superwall",
11591
+ "freerasp-react-native",
11592
+ "klaviyo-react-native-sdk",
11593
+ "llama.rn",
11594
+ "mixpanel-react-native",
11595
+ "newrelic-react-native-agent",
11596
+ "realm",
11597
+ "react-native-a11y",
11598
+ "react-native-adapty",
11599
+ "react-native-add-calendar-event",
11600
+ "react-native-adjust",
11601
+ "react-native-advanced-input-mask",
11602
+ "react-native-agora",
11603
+ "react-native-amplitude-analytics",
11604
+ "react-native-android-location-enabler",
11605
+ "react-native-android-widget",
11606
+ "react-native-animateable-text",
11607
+ "react-native-app-clip",
11608
+ "react-native-appsflyer",
11609
+ "react-native-avoid-softinput",
11610
+ "react-native-azure-auth",
11611
+ "react-native-background-actions",
11612
+ "react-native-bare-kit",
11613
+ "react-native-ble-manager",
11614
+ "react-native-bluetooth-classic",
11615
+ "react-native-bluetooth-state-manager",
11616
+ "react-native-bottom-tabs",
11617
+ "react-native-branch",
11618
+ "react-native-camera-kit",
11619
+ "react-native-change-icon",
11620
+ "react-native-charts-wrapper",
11621
+ "react-native-dialogs",
11622
+ "react-native-document-scanner-plugin",
11623
+ "react-native-drop-shadow",
11624
+ "react-native-dynamic-app-icon",
11625
+ "react-native-expo-braintree",
11626
+ "react-native-extra-dimensions-android",
11627
+ "react-native-fast-opencv",
11628
+ "react-native-fast-shadow",
11629
+ "react-native-fast-squircle",
11630
+ "react-native-fast-tflite",
11631
+ "react-native-filament",
11632
+ "react-native-file-viewer-turbo",
11633
+ "react-native-floating-label-input",
11634
+ "react-native-google-cast",
11635
+ "react-native-google-fit",
11636
+ "react-native-google-places-sdk",
11637
+ "react-native-health",
11638
+ "react-native-health-connect",
11639
+ "react-native-hole-view",
11640
+ "react-native-html-to-pdf",
11641
+ "react-native-image-marker",
11642
+ "react-native-incall-manager",
11643
+ "react-native-ios-modal",
11644
+ "react-native-keyboard-controller/bindings",
11645
+ "react-native-keyboard-controller/findNodeHandle",
11646
+ "react-native-keyboard-manager",
11647
+ "react-native-keys",
11648
+ "react-native-loader-kit",
11649
+ "react-native-localization",
11650
+ "react-native-localization-settings",
11651
+ "react-native-mixpanel",
11652
+ "react-native-moengage",
11653
+ "react-native-navigation-mode",
11654
+ "react-native-network-info",
11655
+ "react-native-nitro-haptics",
11656
+ "react-native-otp-verify",
11657
+ "react-native-passkey",
11658
+ "react-native-payments",
11659
+ "react-native-pdf",
11660
+ "react-native-pdf-renderer",
11661
+ "react-native-pinchable",
11662
+ "react-native-play-age-range-declaration",
11663
+ "react-native-prompt-android",
11664
+ "react-native-radial-gradient",
11665
+ "react-native-razorpay",
11666
+ "react-native-reanimated/platformFunctions/dispatchCommand",
11667
+ "react-native-reanimated/platformFunctions/measure",
11668
+ "react-native-reanimated/platformFunctions/scrollTo",
11669
+ "react-native-reanimated/platformFunctions/setGestureState",
11670
+ "react-native-reanimated/platformFunctions/setNativeProps",
11671
+ "react-native-reanimated/specs/NativeReanimatedModule",
11672
+ "react-native-reanimated/specs/NativeWorkletsModule",
11673
+ "react-native-restart-newarch",
11674
+ "react-native-screenguard",
11675
+ "react-native-screens",
11676
+ "react-native-screenshot-prevent",
11677
+ "react-native-select-contact",
11678
+ "react-native-send-intent",
11679
+ "react-native-share-menu",
11680
+ "react-native-shared-element",
11681
+ "react-native-simple-toast",
11682
+ "react-native-spinkit",
11683
+ "react-native-ssl-public-key-pinning",
11684
+ "react-native-star-io10",
11685
+ "react-native-system-navigation-bar",
11686
+ "react-native-tcp",
11687
+ "react-native-teleport",
11688
+ "react-native-theme-switch-animation",
11689
+ "react-native-theoplayer",
11690
+ "react-native-tiktok-business-sdk",
11691
+ "react-native-twilio-video-webrtc",
11692
+ "react-native-udp",
11693
+ "react-native-ui-lib",
11694
+ "react-native-uitextview",
11695
+ "react-native-video-trim",
11696
+ "react-native-voip-push-notification",
11697
+ "react-native-volume-manager",
11698
+ "react-native-wallet-manager",
11699
+ "react-native-watch-connectivity",
11700
+ "react-native-webp-format",
11701
+ "react-native-wheel-pick",
11702
+ "react-native-wheel-picker-android",
11703
+ "react-native-wifi-reborn",
11704
+ "react-native-windows",
11705
+ "react-native-worklets/package.json",
11706
+ "react-native-worklets/specs/NativeWorkletsModule",
11707
+ "react-native-xaml",
11708
+ "react-native-zeroconf",
11709
+ "rn-qr-generator",
11710
+ "rn-secure-storage",
11711
+ "scandit-react-native-datacapture-barcode",
11712
+ "scandit-react-native-datacapture-core",
11713
+ "sp-react-native-in-app-updates",
11714
+ "stream-chat-expo",
11715
+ "stream-chat-react-native",
11716
+ "voltra"
11717
+ ];
11718
+
11719
+ // ../peach-compat/src/generated/light-native-package-names.ts
11720
+ var LIGHT_NATIVE_PACKAGE_NAMES = [
11721
+ "@100mslive/react-native-hms",
11722
+ "@account-kit/react-native-signer",
11723
+ "@adobe/react-native-aepassurance",
11724
+ "@adobe/react-native-aepcampaignclassic",
11725
+ "@adobe/react-native-aepedge",
11726
+ "@adobe/react-native-aepedgebridge",
11727
+ "@adobe/react-native-aepedgeconsent",
11728
+ "@adobe/react-native-aepedgeidentity",
11729
+ "@adobe/react-native-aepmessaging",
11730
+ "@adobe/react-native-aepoptimize",
11731
+ "@adobe/react-native-aepplaces",
11732
+ "@adobe/react-native-aeptarget",
11733
+ "@adobe/react-native-aepuserprofile",
11734
+ "@adrekic/expo-meta-wearables-dat",
11735
+ "@adrianso/react-native-device-brightness",
11736
+ "@alexzunik/react-native-money-input",
11737
+ "@algocare/react-native-code-push",
11738
+ "@allboatsrise/expo-marketingcloudsdk",
11739
+ "@ammarahmed/react-native-eventsource",
11740
+ "@ammarahmed/react-native-share-extension",
11741
+ "@ammarahmed/react-native-sodium",
11742
+ "@ammarahmed/react-native-upload",
11743
+ "@amplitude/analytics-react-native",
11744
+ "@amplitude/experiment-react-native-client",
11745
+ "@amplitude/plugin-engagement-react-native",
11746
+ "@amplitude/plugin-session-replay-react-native",
11747
+ "@amplitude/react-native",
11748
+ "@amplitude/session-replay-react-native",
11749
+ "@animo-id/expo-secure-environment",
11750
+ "@ansight/react-native",
11751
+ "@anythingai/launcher",
11752
+ "@appcues/react-native",
11753
+ "@appdynamics/react-native-agent",
11754
+ "@appier/react-native-sdk",
11755
+ "@appmetrica/react-native-analytics",
11756
+ "@ascendtis/react-native-voice-to-text",
11757
+ "@bam.tech/react-native-app-security",
11758
+ "@bam.tech/react-native-config",
11759
+ "@bennyblader/ddk-rn",
11760
+ "@bishaldahal/react-native-khalti-checkout",
11761
+ "@blazejkustra/react-native-alert",
11762
+ "@boterop/react-native-background-timer",
11763
+ "@bounceapp/react-native-paypal",
11764
+ "@brandingbrand/react-native-app-restart",
11765
+ "@breeztech/breez-sdk-spark-react-native",
11766
+ "@brigad/react-native-adservices",
11767
+ "@bsky.app/expo-dynamic-app-icon",
11768
+ "@bsky.app/expo-translate-text",
11769
+ "@bufgix/react-native-secure-window",
11770
+ "@burnt-labs/expo-satya-attest",
11771
+ "@callstack/repack",
11772
+ "@castleio/react-native-castle",
11773
+ "@chargebee/react-native-chargebee",
11774
+ "@checkout.com/checkout-react-native-components",
11775
+ "@clear.sale/behavior-analytics-react-native-sdk",
11776
+ "@cloudflare/react-native-webrtc",
11777
+ "@cloudflare/realtimekit-react-native",
11778
+ "@cloudflare/realtimekit-react-native-ui",
11779
+ "@code-push-next/react-native-code-push",
11780
+ "@coinbase/mobile-wallet-protocol-host",
11781
+ "@coinbase/wallet-mobile-sdk",
11782
+ "@companycam/vibe-check",
11783
+ "@compdfkit_pdf_sdk/react_native",
11784
+ "@consento/sync-randombytes",
11785
+ "@contentsquare/react-native-bridge",
11786
+ "@coralogix/react-native-plugin",
11787
+ "@cordialinc/react-native-sdk",
11788
+ "@curity/identityserver-haapi-react-native-sdk",
11789
+ "@d11/dota",
11790
+ "@d11/marco",
11791
+ "@daily-co/react-native-webrtc",
11792
+ "@dariyd/react-native-text-recognition",
11793
+ "@dashdoc/react-native-system-sounds",
11794
+ "@datadog/mobile-react-native-session-replay",
11795
+ "@datadome/datadome-axios",
11796
+ "@datadome/react-native-datadome",
11797
+ "@datalyr/react-native",
11798
+ "@descope/react-native-sdk",
11799
+ "@deuna/react-native-sdk",
11800
+ "@dev-amirzubair/react-native-voice",
11801
+ "@devikai/react-native",
11802
+ "@devrev/sdk-react-native",
11803
+ "@didit-protocol/sdk-react-native",
11804
+ "@digia-engage/core",
11805
+ "@dub/react-native",
11806
+ "@dynatrace/react-native-plugin",
11807
+ "@edkimmel/expo-audio-stream",
11808
+ "@embrace-io/react-native",
11809
+ "@embrace-io/react-native-tracer-provider",
11810
+ "@empower-nokta/react-native-mobile-ads",
11811
+ "@entria/rn-face-detector",
11812
+ "@entrust.corporation/idvsdk-reactnative",
11813
+ "@evervault/evervault-react-native",
11814
+ "@evrotrust/et-react-native-wl-sdk",
11815
+ "@exodus/react-native-async-storage",
11816
+ "@exodus/react-native-biometrics",
11817
+ "@exodus/react-native-bundle-loader",
11818
+ "@exodus/react-native-fs",
11819
+ "@exodus/react-native-keychain",
11820
+ "@exodus/react-native-nft-viewer",
11821
+ "@exodus/react-native-notifications",
11822
+ "@exodus/react-native-payments",
11823
+ "@exodus/react-native-prompt-android",
11824
+ "@exodus/react-native-reanimated",
11825
+ "@exodus/react-native-screenshot-detector",
11826
+ "@exodus/react-native-wallet",
11827
+ "@exodus/rive-react-native",
11828
+ "@extole/react-native-sdk",
11829
+ "@fedimint/react-native",
11830
+ "@freddixx/react-native-ad-manager",
11831
+ "@freshpaint/freshpaint-react-native",
11832
+ "@frontegg/react-native",
11833
+ "@gainsight-px/react-native-gainsight-px",
11834
+ "@getalby/expo-shared-preferences",
11835
+ "@getcello/cello-react-native",
11836
+ "@getstoryteller/react-native-storyteller-sdk",
11837
+ "@getvouch/react-native-sdk",
11838
+ "@glance-networks/reactnative-bridge",
11839
+ "@google-cloud/recaptcha-enterprise-react-native",
11840
+ "@grafana/faro-react-native",
11841
+ "@granite-js/image",
11842
+ "@granite-js/video",
11843
+ "@hackler/react-native-sdk",
11844
+ "@haroldtran/react-native-thermal-printer",
11845
+ "@heap/react-native-heap",
11846
+ "@heartbot/expo-google-authentication",
11847
+ "@heasy/react-native-sunmi-printer",
11848
+ "@hero-design/react-native-month-year-picker",
11849
+ "@hexigames/react-native-apple-ads-attribution",
11850
+ "@hmscore/react-native-hms-ads",
11851
+ "@hmscore/react-native-hms-availability",
11852
+ "@hmscore/react-native-hms-location",
11853
+ "@hmscore/react-native-hms-map",
11854
+ "@hmscore/react-native-hms-push",
11855
+ "@honeycombio/opentelemetry-react-native",
11856
+ "@hotta/react-native-imagepicker",
11857
+ "@howincodes/expo-dynamic-app-icon",
11858
+ "@ht-sdks/sovran-react-native",
11859
+ "@humansecurity/expo-mobile-sdk",
11860
+ "@humansecurity/react-native-sdk",
11861
+ "@ihealth/ihealthlibrary-react-native",
11862
+ "@imgly/editor-react-native",
11863
+ "@infinitered/react-native-mlkit-face-detection",
11864
+ "@infinitered/react-native-mlkit-object-detection",
11865
+ "@infinitered/react-native-mlkit-text-recognition",
11866
+ "@instana/react-native-agent",
11867
+ "@inthepocket/react-native-service-discovery",
11868
+ "@ionic/portals-react-native",
11869
+ "@ivandigitalsolutions/react-native-camerax",
11870
+ "@jitsi/react-native-sdk",
11871
+ "@join-stories/react-native-widgets",
11872
+ "@json-eval-rs/react-native",
11873
+ "@ketch-com/ketch-react-native",
11874
+ "@klarna/platform-colors",
11875
+ "@launchhq/react-native-keyboard-composer",
11876
+ "@layers/expo-tiktok-business",
11877
+ "@leonsilicon/react-native-list",
11878
+ "@livekit/react-native-krisp-noise-filter",
11879
+ "@lobehub/expo-better-auth-passkey",
11880
+ "@logbrew/react-native",
11881
+ "@mauron85/react-native-background-geolocation",
11882
+ "@mccsoft/react-native-matomo",
11883
+ "@mentra/bluetooth-sdk",
11884
+ "@metamask/react-native-acm",
11885
+ "@metamask/react-native-payments",
11886
+ "@microblink/blinkcard-react-native",
11887
+ "@microsoft/react-native-clarity",
11888
+ "@mitsuharu/react-native-sunmi-printer-library",
11889
+ "@mixpanel/react-native-session-replay",
11890
+ "@moneykit/connect-react-native",
11891
+ "@more-tech/react-native-libsodium",
11892
+ "@mux/mux-react-native-player",
11893
+ "@mykin-ai/expo-audio-stream",
11894
+ "@networkinternational/ni-card-management-sdk",
11895
+ "@nevis-security/nevis-mobile-authentication-sdk-react",
11896
+ "@nexigen/react-native-pre-text",
11897
+ "@nitro-perf-devtools/core",
11898
+ "@norcy/react-native-toolkit",
11899
+ "@npm_fluentco/adflow-react-native-sdk",
11900
+ "@nsure-ai/react-native-client-sdk",
11901
+ "@nuggetslife/vc-rn",
11902
+ "@obsidian_north/react-native-mediastore",
11903
+ "@offline-protocol/mesh-sdk",
11904
+ "@oguzhnatly/react-native-image-manipulator",
11905
+ "@olo/pay-react-native",
11906
+ "@onekeyfe/react-native-aes-crypto",
11907
+ "@onekeyfe/react-native-app-update",
11908
+ "@onekeyfe/react-native-async-storage",
11909
+ "@onekeyfe/react-native-background-thread",
11910
+ "@onekeyfe/react-native-ble-utils",
11911
+ "@onekeyfe/react-native-bundle-crypto",
11912
+ "@onekeyfe/react-native-bundle-update",
11913
+ "@onekeyfe/react-native-check-biometric-auth-changed",
11914
+ "@onekeyfe/react-native-cloud-fs",
11915
+ "@onekeyfe/react-native-cloud-kit-module",
11916
+ "@onekeyfe/react-native-device-utils",
11917
+ "@onekeyfe/react-native-dns-lookup",
11918
+ "@onekeyfe/react-native-get-random-values",
11919
+ "@onekeyfe/react-native-keychain-module",
11920
+ "@onekeyfe/react-native-lite-card",
11921
+ "@onekeyfe/react-native-native-logger",
11922
+ "@onekeyfe/react-native-network-info",
11923
+ "@onekeyfe/react-native-network-throttle",
11924
+ "@onekeyfe/react-native-pbkdf2",
11925
+ "@onekeyfe/react-native-perf-memory",
11926
+ "@onekeyfe/react-native-perf-stats",
11927
+ "@onekeyfe/react-native-ping",
11928
+ "@onekeyfe/react-native-range-downloader",
11929
+ "@onekeyfe/react-native-sni-connect",
11930
+ "@onekeyfe/react-native-splash-screen",
11931
+ "@onekeyfe/react-native-split-bundle-loader",
11932
+ "@onekeyfe/react-native-tab-view",
11933
+ "@onekeyfe/react-native-tcp-socket",
11934
+ "@onekeyfe/react-native-webview-cleaner",
11935
+ "@onekeyfe/react-native-zip-archive",
11936
+ "@onfido/react-native-sdk",
11937
+ "@onramp-sdk/react-native",
11938
+ "@opacity-labs/react-native-opacity",
11939
+ "@openobserve/mobile-react-native",
11940
+ "@openobserve/mobile-react-native-session-replay",
11941
+ "@openobserve/mobile-react-native-webview",
11942
+ "@openreplay/react-native",
11943
+ "@optimove-inc/react-native",
11944
+ "@oracle/react-native-pushiomanager",
11945
+ "@oscilar/react-native-oscilar-module",
11946
+ "@oxyhq/services",
11947
+ "@pagopa/io-react-native-cie",
11948
+ "@pagopa/io-react-native-cieid",
11949
+ "@pagopa/io-react-native-crypto",
11950
+ "@pagopa/io-react-native-http-client",
11951
+ "@pagopa/io-react-native-integrity",
11952
+ "@pagopa/io-react-native-iso18013",
11953
+ "@pagopa/io-react-native-jwt",
11954
+ "@pagopa/io-react-native-login-utils",
11955
+ "@pagopa/io-react-native-secure-storage",
11956
+ "@pagopa/io-react-native-zendesk",
11957
+ "@pagopa/react-native-cie",
11958
+ "@paul_sizon/expo-pdf-text-extract",
11959
+ "@payrails/react-native-sdk",
11960
+ "@paytabs/react-native-paytabs",
11961
+ "@pchmn/expo-material3-theme",
11962
+ "@pdftron/react-native-pdf",
11963
+ "@peacechen/react-native-otp-autocomplete",
11964
+ "@phantom/react-native-juicebox-sdk",
11965
+ "@picovoice/porcupine-react-native",
11966
+ "@picovoice/react-native-voice-processor",
11967
+ "@piwikpro/react-native-piwik-pro-sdk",
11968
+ "@pocketpalai/llama.rn",
11969
+ "@prelude.so/react-native-sdk",
11970
+ "@premieroctet/react-native-wallet",
11971
+ "@primer-io/react-native",
11972
+ "@privy-io/expo-native-extensions",
11973
+ "@psync/anti-jailbreak",
11974
+ "@qonversion/react-native-sdk",
11975
+ "@quidone/react-native-wheel-picker-feedback",
11976
+ "@radiusnetworks/react-native-flybuy-core",
11977
+ "@radiusnetworks/react-native-flybuy-pickup",
11978
+ "@react-native-agconnect/applinking",
11979
+ "@react-native-community/clipboard",
11980
+ "@react-native-community/cookies",
11981
+ "@react-native-community/voice",
11982
+ "@react-native-kakao/core",
11983
+ "@react-native-kakao/share",
11984
+ "@react-native-kakao/social",
11985
+ "@react-native-kakao/user",
11986
+ "@react-native-karte/core",
11987
+ "@react-native-karte/in-app-messaging",
11988
+ "@react-native-karte/notification",
11989
+ "@react-native-seoul/kakao-login",
11990
+ "@react-native-zohosalesiq/mobilisten",
11991
+ "@react-native-zohosalesiq/mobilisten-core",
11992
+ "@reclaimprotocol/inapp-rn-sdk",
11993
+ "@reeq/react-native-device-brightness",
11994
+ "@reeq/react-native-passkit",
11995
+ "@regulaforensics/document-reader",
11996
+ "@regulaforensics/face-sdk",
11997
+ "@regulaforensics/idv",
11998
+ "@regulaforensics/react-native-document-reader-api",
11999
+ "@revopush/react-native-code-push",
12000
+ "@riskified/react-native-riskified-sdk",
12001
+ "@rownd/react-native",
12002
+ "@ryftpay/react-native",
12003
+ "@sap_oss/gigya-react-native-plugin-for-sap-customer-data-cloud",
12004
+ "@sayem314/react-native-keep-awake",
12005
+ "@secondts/bark-react-native",
12006
+ "@segment/analytics-react-native-plugin-idfa",
12007
+ "@selligent-marketing-cloud/selligent-react-native",
12008
+ "@semisquircle/expo-dynamic-app-icon",
12009
+ "@seontechnologies/seon-react-native-mobile-wrapper",
12010
+ "@serserm/react-native-turbo-serialport",
12011
+ "@shadahmad7/react-native-calendar",
12012
+ "@shadahmad7/react-native-store-review",
12013
+ "@shenai/react-native-sdk",
12014
+ "@sherlo/react-native-storybook",
12015
+ "@simula/ads-react-native",
12016
+ "@siteed/sherpa-onnx.rn",
12017
+ "@six33/react-native-bg-removal",
12018
+ "@socure-inc/docv-react-native",
12019
+ "@socure-inc/react-native-device-risk",
12020
+ "@solidx/react-native-true-sheet",
12021
+ "@somesoap/react-native-image-palette",
12022
+ "@sourcepoint/react-native-cmp",
12023
+ "@sourcetoad/react-native-sketch-canvas",
12024
+ "@speechmatics/expo-two-way-audio",
12025
+ "@splitsoftware/splitio-react-native",
12026
+ "@splunk/otel-react-native",
12027
+ "@stream-io/noise-cancellation-react-native",
12028
+ "@stream-io/react-native-callingx",
12029
+ "@stream-io/react-native-webrtc",
12030
+ "@stream-io/video-filters-react-native",
12031
+ "@sumsub/react-native-mobilesdk-module",
12032
+ "@superfan-app/apple-music-auth",
12033
+ "@superwall/react-native-superwall",
12034
+ "@tap-payments/apple-pay-rn",
12035
+ "@tap-payments/google-pay-rn",
12036
+ "@taprails/tap-to-pay",
12037
+ "@telnyx/react-voice-commons-sdk",
12038
+ "@tencentcloud/react-native-push",
12039
+ "@terrylinla/react-native-sketch-canvas",
12040
+ "@thegrizzlylabs/react-native-genius-scan",
12041
+ "@theoplayer/react-native-analytics-adobe",
12042
+ "@theoplayer/react-native-analytics-adobe-edge",
12043
+ "@theoplayer/react-native-analytics-bitmovin",
12044
+ "@theoplayer/react-native-analytics-conviva",
12045
+ "@theoplayer/react-native-analytics-gemius",
12046
+ "@theoplayer/react-native-analytics-mux",
12047
+ "@theoplayer/react-native-analytics-nielsen",
12048
+ "@theoplayer/react-native-analytics-youbora",
12049
+ "@theoplayer/react-native-engage",
12050
+ "@tillpos/rn-receipt-printer-utils",
12051
+ "@timwangdev/react-native-geocoder",
12052
+ "@trycourier/courier-react-native",
12053
+ "@tryvital/vital-core-react-native",
12054
+ "@tryvital/vital-health-react-native",
12055
+ "@ttwrpz/react-native-brightness-setting",
12056
+ "@tursodatabase/sync-react-native",
12057
+ "@twilio/video-react-native-sdk",
12058
+ "@unifyapps/analytics-react-native",
12059
+ "@unomed/react-native-matrix-sdk",
12060
+ "@userpilot/react-native",
12061
+ "@veriff/react-native-sdk",
12062
+ "@verisoul_ai/react-native-verisoul",
12063
+ "@videosdk.live/react-native-webrtc",
12064
+ "@vonage/client-sdk-video-react-native",
12065
+ "@voximplant/react-native-foreground-service",
12066
+ "@wokcito/ffmpeg-kit-react-native",
12067
+ "@wootric/react-native-wootric",
12068
+ "@wscsports/blaze-rtn-sdk",
12069
+ "@wwimmo/react-native-sketch-canvas",
12070
+ "@zoom/meetingsdk-react-native",
12071
+ "@zoom/react-native-videosdk",
12072
+ "agora-react-native-rtm",
12073
+ "aliyun-react-native-push",
12074
+ "amazon-cognito-identity-js",
12075
+ "apple-pay-react-native-expo",
12076
+ "apptentive-react-native",
12077
+ "arlon-test-library",
12078
+ "bcrypt-react-native",
12079
+ "bitlabs",
12080
+ "brick-module",
12081
+ "bridgefy-react-native",
12082
+ "chartbeat-react-native-bridge-sdk",
12083
+ "cleverpush-react-native",
12084
+ "cloudx-react-native",
12085
+ "cm-sdk-react-native-v3-new-arch",
12086
+ "cobrowse-sdk-react-native",
12087
+ "cojson-core-rn",
12088
+ "contour-ai-sdk",
12089
+ "create-react-native-library",
12090
+ "crisp-sdk-react-native",
12091
+ "cui-llama.rn",
12092
+ "dynamsoft-capture-vision-react-native",
12093
+ "expo-activity-motion",
12094
+ "expo-ai-kit",
12095
+ "expo-app-blocker",
12096
+ "expo-audio-stream-pcm",
12097
+ "expo-barcode-scanner",
12098
+ "expo-brownfield",
12099
+ "expo-check-installed-apps",
12100
+ "expo-esim",
12101
+ "expo-face-check",
12102
+ "expo-face-detector",
12103
+ "expo-font-fallback",
12104
+ "expo-google-places",
12105
+ "expo-google-places-autocomplete",
12106
+ "expo-guided-access",
12107
+ "expo-http-server",
12108
+ "expo-image-and-video-compressor",
12109
+ "expo-in-app-purchases",
12110
+ "expo-kiosk-control",
12111
+ "expo-media-viewer",
12112
+ "expo-mlkit-ocr",
12113
+ "expo-native-launch-arguments",
12114
+ "expo-ocr-kit",
12115
+ "expo-onesignal-live-activities",
12116
+ "expo-otp-autofill",
12117
+ "expo-pdf-text-extract",
12118
+ "expo-react-native-adapter",
12119
+ "expo-realtime-audio",
12120
+ "expo-realtime-ivs-broadcast",
12121
+ "expo-reteno-sdk",
12122
+ "expo-samsung-pay",
12123
+ "expo-speech-transcriber",
12124
+ "expo-store-checker",
12125
+ "expo-text-extractor",
12126
+ "expo-tiktok-ads-events",
12127
+ "expo-tnk",
12128
+ "expo-torch",
12129
+ "expo-trim-video",
12130
+ "expo-ttp-edu",
12131
+ "expo-vpn-checker",
12132
+ "expo-widget",
12133
+ "expo-yandex-mapkit",
12134
+ "facepass-react-native-module",
12135
+ "fast-mlkit-translate-text",
12136
+ "framepayments-react-native",
12137
+ "getsocial-react-native-sdk",
12138
+ "helpshift-plugin-sdkx-react-native",
12139
+ "hyper-sdk-react",
12140
+ "hypertrack-sdk-react-native",
12141
+ "hypertrack-sdk-react-native-plugin-android-activity-service-google",
12142
+ "hypertrack-sdk-react-native-plugin-android-location-services-google",
12143
+ "hypertrack-sdk-react-native-plugin-android-push-service-firebase",
12144
+ "idwise-react-native-sdk",
12145
+ "infobip-mobile-messaging-react-native-plugin",
12146
+ "jcore-react-native",
12147
+ "jpush-react-native",
12148
+ "judokit-react-native",
12149
+ "localytics-react-native",
12150
+ "mappls-map-react-native",
12151
+ "mindbox-sdk",
12152
+ "mobile-payments-sdk-react-native",
12153
+ "mychips-react-sdk",
12154
+ "myfatoorah-reactnative",
12155
+ "neuroid-reactnative-sdk",
12156
+ "nodejs-mobile-react-native",
12157
+ "notifly-sdk",
12158
+ "onnxruntime-react-native",
12159
+ "opentok-react-native",
12160
+ "otpless-headless-rn-lite",
12161
+ "payme-mini-app",
12162
+ "payu-non-seam-less-react",
12163
+ "ping-openmls-sdk-react-native-macos",
12164
+ "plotline-engage",
12165
+ "pulse-updates",
12166
+ "ratex-react-native",
12167
+ "raygun4reactnative",
12168
+ "react-airplay",
12169
+ "react-native-accessibility-wrapper",
12170
+ "react-native-acoustic-connect-beta",
12171
+ "react-native-address-autocomplete",
12172
+ "react-native-adjust-oaid",
12173
+ "react-native-advertising-id",
12174
+ "react-native-agora-chat",
12175
+ "react-native-airplay-btn",
12176
+ "react-native-alarm-scheduler",
12177
+ "react-native-android-installed-apps-unblocking",
12178
+ "react-native-android-location-services-dialog-box",
12179
+ "react-native-android-log",
12180
+ "react-native-android-navbar-height",
12181
+ "react-native-android-notification-listener",
12182
+ "react-native-android-open-settings",
12183
+ "react-native-apay",
12184
+ "react-native-app-icon-changer",
12185
+ "react-native-appearance",
12186
+ "react-native-apple-payment",
12187
+ "react-native-appodeal",
12188
+ "react-native-appstore-version-checker",
12189
+ "react-native-apxor-rtm-plugin",
12190
+ "react-native-apxor-sdk",
12191
+ "react-native-argon2",
12192
+ "react-native-attribution-token",
12193
+ "react-native-audio",
12194
+ "react-native-audio-record",
12195
+ "react-native-background-color",
12196
+ "react-native-background-guardian",
12197
+ "react-native-background-remover",
12198
+ "react-native-battery-optimization-check",
12199
+ "react-native-beacon-radar",
12200
+ "react-native-bg-thread",
12201
+ "react-native-bildit-flybuy-core",
12202
+ "react-native-bildit-flybuy-pickup",
12203
+ "react-native-ble-advertiser",
12204
+ "react-native-blob-jsi-helper",
12205
+ "react-native-bluetooth-escpos-printer",
12206
+ "react-native-bottomsheet",
12207
+ "react-native-braintree-dropin-ui",
12208
+ "react-native-bspatch",
12209
+ "react-native-build-config",
12210
+ "react-native-bureauid-fraud-sdk",
12211
+ "react-native-caffe2",
12212
+ "react-native-call-detection",
12213
+ "react-native-call-log",
12214
+ "react-native-capture",
12215
+ "react-native-carrier-info",
12216
+ "react-native-channel-plugin",
12217
+ "react-native-check-biometric-auth-changed",
12218
+ "react-native-chottulink-sdk",
12219
+ "react-native-clarity",
12220
+ "react-native-clusterer",
12221
+ "react-native-code-push-diff",
12222
+ "react-native-connectivity-status",
12223
+ "react-native-convert-ph-asset",
12224
+ "react-native-converted-in-sdk",
12225
+ "react-native-cookies",
12226
+ "react-native-copy",
12227
+ "react-native-crash-tester",
12228
+ "react-native-crisp-chat-sdk",
12229
+ "react-native-cumquat",
12230
+ "react-native-customui",
12231
+ "react-native-daro-m",
12232
+ "react-native-datawedge-intents",
12233
+ "react-native-detect-frida",
12234
+ "react-native-device-activity",
12235
+ "react-native-device-crypto",
12236
+ "react-native-device-time-format",
12237
+ "react-native-device-uptime",
12238
+ "react-native-digitcamera",
12239
+ "react-native-doc-viewer",
12240
+ "react-native-easy-apple-pay",
12241
+ "react-native-encrypted-storage",
12242
+ "react-native-esc-pos-printer",
12243
+ "react-native-exif",
12244
+ "react-native-expo-metamap-sdk",
12245
+ "react-native-exponea-sdk",
12246
+ "react-native-fast-base64",
12247
+ "react-native-fast-crypto",
12248
+ "react-native-fast-encoder",
12249
+ "react-native-fast-openpgp",
12250
+ "react-native-fast-pbkdf2",
12251
+ "react-native-fast-rsa",
12252
+ "react-native-fatos-sdk",
12253
+ "react-native-fbsdk",
12254
+ "react-native-fetch-blob",
12255
+ "react-native-filament-buildcores",
12256
+ "react-native-firebaseui-auth",
12257
+ "react-native-firework-sdk",
12258
+ "react-native-flipper",
12259
+ "react-native-genuin-qa",
12260
+ "react-native-geocoder",
12261
+ "react-native-geocoder-reborn",
12262
+ "react-native-get-sms-android",
12263
+ "react-native-get-values",
12264
+ "react-native-gif",
12265
+ "react-native-gleapsdk",
12266
+ "react-native-global-exception-handler",
12267
+ "react-native-google-analytics-bridge",
12268
+ "react-native-google-pay",
12269
+ "react-native-google-play-integrity",
12270
+ "react-native-haptic",
12271
+ "react-native-haptic-patterns",
12272
+ "react-native-hash",
12273
+ "react-native-hce",
12274
+ "react-native-heic-converter",
12275
+ "react-native-helpscout-beacon",
12276
+ "react-native-hmac",
12277
+ "react-native-html-to-pdf-lite",
12278
+ "react-native-hud-hybrid",
12279
+ "react-native-hw-keyboard-event",
12280
+ "react-native-hyperkyc-sdk",
12281
+ "react-native-hyperpay-sdk",
12282
+ "react-native-hyperswitch-dev-sdk",
12283
+ "react-native-icloud-file-picker",
12284
+ "react-native-idfa",
12285
+ "react-native-idfa-aaid",
12286
+ "react-native-image-base64",
12287
+ "react-native-image-code-scanner",
12288
+ "react-native-image-filter-kit",
12289
+ "react-native-image-rotate",
12290
+ "react-native-image-to-pdf",
12291
+ "react-native-images-to-pdf",
12292
+ "react-native-immersive",
12293
+ "react-native-immersive-mode",
12294
+ "react-native-in-app-message",
12295
+ "react-native-incognia",
12296
+ "react-native-infy-camera",
12297
+ "react-native-insider",
12298
+ "react-native-install-referrer",
12299
+ "react-native-installed-app-checker",
12300
+ "react-native-is-detox",
12301
+ "react-native-is-keyboard-connected",
12302
+ "react-native-keyboard-input",
12303
+ "react-native-khipu",
12304
+ "react-native-klarna-inapp-sdk",
12305
+ "react-native-kochava-measurement",
12306
+ "react-native-kochava-measurement-apple-tracking",
12307
+ "react-native-kochava-measurement-google",
12308
+ "react-native-kochava-measurement-google-tracking",
12309
+ "react-native-kochava-tracker",
12310
+ "react-native-launch-navigator",
12311
+ "react-native-layout-guides",
12312
+ "react-native-local-resource",
12313
+ "react-native-marigold",
12314
+ "react-native-marketingcloudsdk",
12315
+ "react-native-mdm",
12316
+ "react-native-mediapipe",
12317
+ "react-native-mediapipe-posedetection",
12318
+ "react-native-metamap-sdk",
12319
+ "react-native-microphone-stream",
12320
+ "react-native-mlkit-ocr",
12321
+ "react-native-modpow",
12322
+ "react-native-moengage-cards",
12323
+ "react-native-moengage-geofence",
12324
+ "react-native-moengage-inbox",
12325
+ "react-native-mov-to-mp4",
12326
+ "react-native-mqtt-file-transfer",
12327
+ "react-native-msal",
12328
+ "react-native-music-control",
12329
+ "react-native-music-control-enhanced",
12330
+ "react-native-nami-sdk",
12331
+ "react-native-native-log",
12332
+ "react-native-netlog-fab",
12333
+ "react-native-netwatch",
12334
+ "react-native-nitro-bg-timer",
12335
+ "react-native-nitro-simple-toast",
12336
+ "react-native-nitro-thermal",
12337
+ "react-native-nitro-version-check",
12338
+ "react-native-notch-info",
12339
+ "react-native-notificare",
12340
+ "react-native-notificare-geo",
12341
+ "react-native-notificare-push",
12342
+ "react-native-notificare-push-ui",
12343
+ "react-native-notifications-utils",
12344
+ "react-native-onetrust-cmp",
12345
+ "react-native-open-notification",
12346
+ "react-native-otp-auto-verify",
12347
+ "react-native-passkeys",
12348
+ "react-native-passkit-wallet",
12349
+ "react-native-passport-reader",
12350
+ "react-native-paypal-web-payments",
12351
+ "react-native-pdf-lib",
12352
+ "react-native-pdf-page-image",
12353
+ "react-native-pdf-thumbnail",
12354
+ "react-native-pdf-to-image",
12355
+ "react-native-pencil-kit",
12356
+ "react-native-performance-stats",
12357
+ "react-native-performance-toolkit",
12358
+ "react-native-persona",
12359
+ "react-native-phonepe-pg",
12360
+ "react-native-play-install-referrer",
12361
+ "react-native-powerauth-mobile-sdk",
12362
+ "react-native-prevent-recent-screenshots",
12363
+ "react-native-qualtrics",
12364
+ "react-native-quantum-metric-library",
12365
+ "react-native-queue-it",
12366
+ "react-native-random-uuid",
12367
+ "react-native-random-values-jsi-helper",
12368
+ "react-native-release-profiler",
12369
+ "react-native-repro",
12370
+ "react-native-restart-android",
12371
+ "react-native-ringer-mode",
12372
+ "react-native-rook-sdk",
12373
+ "react-native-root-jail-detect",
12374
+ "react-native-safe-area",
12375
+ "react-native-scanbot-barcode-scanner-sdk",
12376
+ "react-native-schedule-exact-alarm-permission",
12377
+ "react-native-scoped-storage",
12378
+ "react-native-screenshot-detect",
12379
+ "react-native-session-timeout",
12380
+ "react-native-set-soft-input-mode",
12381
+ "react-native-sfh-library",
12382
+ "react-native-sha1",
12383
+ "react-native-sha256",
12384
+ "react-native-shared-preferences",
12385
+ "react-native-sherpa-onnx",
12386
+ "react-native-shield-fraud-plugin",
12387
+ "react-native-sim-cards-manager",
12388
+ "react-native-simple-crypto",
12389
+ "react-native-simple-heic2jpg",
12390
+ "react-native-skadnetwork",
12391
+ "react-native-smallcase-gateway",
12392
+ "react-native-smartlook-analytics",
12393
+ "react-native-smile-rn-lib",
12394
+ "react-native-smooth-clip-view",
12395
+ "react-native-sms",
12396
+ "react-native-sms-retriever",
12397
+ "react-native-sound-level",
12398
+ "react-native-sound-level-monitor",
12399
+ "react-native-sound-recorder",
12400
+ "react-native-spike-sdk",
12401
+ "react-native-square-in-app-payments",
12402
+ "react-native-ssl-pinning",
12403
+ "react-native-star-prnt-bitmap-fix",
12404
+ "react-native-startup-time",
12405
+ "react-native-static-safe-area-insets",
12406
+ "react-native-static-server",
12407
+ "react-native-store-front",
12408
+ "react-native-swrve-plugin",
12409
+ "react-native-syan-image-picker",
12410
+ "react-native-tappay",
12411
+ "react-native-tapresearch",
12412
+ "react-native-test-flight",
12413
+ "react-native-text-input-reset",
12414
+ "react-native-text-recognition",
12415
+ "react-native-themis",
12416
+ "react-native-thermal-printer",
12417
+ "react-native-thermal-receipt-printer-image-qr",
12418
+ "react-native-tiktok-business",
12419
+ "react-native-tooltips",
12420
+ "react-native-torch",
12421
+ "react-native-transfer-library",
12422
+ "react-native-ts-accountprotection",
12423
+ "react-native-ts-identity-orchestration",
12424
+ "react-native-ts-idv",
12425
+ "react-native-turbo-image-picker",
12426
+ "react-native-uaepass",
12427
+ "react-native-ultimate-config",
12428
+ "react-native-unit-components",
12429
+ "react-native-usb-serialport-for-android",
12430
+ "react-native-user-agent",
12431
+ "react-native-user-identity",
12432
+ "react-native-userleap",
12433
+ "react-native-video-cache-control",
12434
+ "react-native-video-helper",
12435
+ "react-native-virgil-crypto",
12436
+ "react-native-vision-camera-ocr-plus",
12437
+ "react-native-vizbee-homesso-sender-sdk",
12438
+ "react-native-vizbee-receiver-sdk",
12439
+ "react-native-vizbee-sender-sdk",
12440
+ "react-native-vpn-detector",
12441
+ "react-native-vpn-status",
12442
+ "react-native-walkme-sdk",
12443
+ "react-native-wallet",
12444
+ "react-native-wallet-passes",
12445
+ "react-native-webengage",
12446
+ "react-native-webrtc-kaleidoscope",
12447
+ "react-native-websocket-self-signed",
12448
+ "react-native-webview-ios-cache-clear",
12449
+ "react-native-wonderpush",
12450
+ "react-native-wonderpush-fcm",
12451
+ "react-native-wxwork",
12452
+ "react-native-yamap-plus",
12453
+ "react-native-zendesk-messaging",
12454
+ "react-native-zolozkit-tool",
12455
+ "readid-react-native",
12456
+ "rn-android-keyboard-adjust",
12457
+ "rn-audio-toolkit",
12458
+ "rn-encryption",
12459
+ "rn-linkrunner",
12460
+ "rn-mesh-gradient",
12461
+ "rn-pendo-sdk",
12462
+ "rn-star-prnt",
12463
+ "rn-url-resolver",
12464
+ "rxdx_player",
12465
+ "sahha-react-native",
12466
+ "securehybridapptesting",
12467
+ "shuftipro-onsite-mobilesdk",
12468
+ "smartech-push-react-native",
12469
+ "smartech-reactnative-nudges",
12470
+ "srs-heritage-chatbot",
12471
+ "storyly-placement-react-native",
12472
+ "surveysparrow-react-native-sdk",
12473
+ "tapjoy-react-native-sdk",
12474
+ "tealium-react-firebase",
12475
+ "tealium-react-native",
12476
+ "tealium-react-native-attribution",
12477
+ "terra-react",
12478
+ "theta-ble-client-react-native",
12479
+ "theta-client-react-native",
12480
+ "tiktok-opensdk-react-native",
12481
+ "tipsi-stripe",
12482
+ "tp-react-native-bluetooth-printer",
12483
+ "unified-ble-manager",
12484
+ "unity-levelplay-mediation",
12485
+ "usabilla-react-native",
12486
+ "vexo-analytics",
12487
+ "veyra-sdk-react-native",
12488
+ "vitest-mobile",
12489
+ "wix-react-native-text-size",
12490
+ "yandex-mobile-ads",
12491
+ "ymchat-react-native",
12492
+ "zego-express-engine-reactnative",
12493
+ "zego-zim-react-native",
12494
+ "zetakit_reactnative"
12495
+ ];
12496
+
12497
+ // ../peach-compat/src/generated/native-package-names.ts
12498
+ var NATIVE_STUB_PACKAGE_NAMES = [
12499
+ "@10play/tentap-editor",
12500
+ "@adobe/react-native-aepcore",
12501
+ "@alevy97/react-native-userdefaults",
12502
+ "@ankipro/react-native-file-open",
12503
+ "@appzung/react-native-code-push",
12504
+ "@aptabase/react-native",
12505
+ "@assembless/react-native-material-you",
12506
+ "@atomicfi/transact-react-native",
12507
+ "@atproto/oauth-client-expo",
12508
+ "@attarchi/react-native-lottie-splash-screen",
12509
+ "@avasapp/react-native-otp-autofill",
12510
+ "@aws-amplify/react-native",
12511
+ "@azesmway/react-native-unity",
12512
+ "@azzapp/react-native-skia-video",
12513
+ "@babylonjs/react-native",
12514
+ "@bacons/apple-targets",
12515
+ "@bam.tech/react-native-image-resizer",
12516
+ "@baronha/react-native-multiple-image-picker",
12517
+ "@baronha/react-native-photo-editor",
12518
+ "@baronha/ting",
12519
+ "@batch.com/react-native-plugin",
12520
+ "@bear-block/vision-camera-ocr",
12521
+ "@bhojaniasgar/react-native-otp-input",
12522
+ "@bitdrift/react-native",
12523
+ "@bittingz/expo-widgets",
12524
+ "@blackbox-vision/react-native-mercadopago-px",
12525
+ "@borndotcom/react-native-godot",
12526
+ "@bravemobile/react-native-code-push",
12527
+ "@braze/react-native-sdk",
12528
+ "@bsky.app/expo-guess-language",
12529
+ "@bsky.app/expo-image-crop-tool",
12530
+ "@bsky.app/expo-scroll-edge-effect",
12531
+ "@bsky.app/react-native-mmkv",
12532
+ "@bugfender/rn-bugfender",
12533
+ "@bugsnag/react-native",
12534
+ "@bugsnag/react-native-performance",
12535
+ "@callstack/liquid-glass",
12536
+ "@callstack/react-native-bottom-tabs",
12537
+ "@callstack/react-native-brownfield",
12538
+ "@callstack/react-native-local-notifications",
12539
+ "@callstack/react-native-sandbox",
12540
+ "@callstack/react-native-visionos",
12541
+ "@callstack/timezone-hermes-fix",
12542
+ "@candlefinance/faster-image",
12543
+ "@candlefinance/haptics",
12544
+ "@clerk/expo",
12545
+ "@clerk/expo-passkeys",
12546
+ "@cometchat/chat-uikit-react-native",
12547
+ "@computools/react-native-dynamic-app-icon",
12548
+ "@coolsoftwaretyler/cool-pdf",
12549
+ "@criipto/verify-expo",
12550
+ "@d11/react-native-fast-image",
12551
+ "@d11/react-native-mqtt",
12552
+ "@danielsaraldi/react-native-blur-view",
12553
+ "@dariyd/react-native-document-scanner",
12554
+ "@datadog/mobile-react-native",
12555
+ "@dbkable/react-native-speech-to-text",
12556
+ "@didomi/react-native",
12557
+ "@dimaportenko/react-native-shadow-view",
12558
+ "@domir/react-native-measure-text",
12559
+ "@dr.pogodin/react-native-audio",
12560
+ "@dr.pogodin/react-native-fs",
12561
+ "@dr.pogodin/react-native-static-server",
12562
+ "@dylankenneally/react-native-ssh-sftp",
12563
+ "@eabdullazyanov/react-native-sms-user-consent",
12564
+ "@expensify/react-native-background-task",
12565
+ "@expensify/react-native-hybrid-app",
12566
+ "@expensify/react-native-live-markdown",
12567
+ "@expensify/react-native-wallet",
12568
+ "@expo/app-integrity",
12569
+ "@expo/dom-webview",
12570
+ "@expo/ui",
12571
+ "@expo/ui/community/menu",
12572
+ "@extrieve_technologies/quickcapture_react_native",
12573
+ "@fingerprintjs/fingerprintjs-pro-react-native",
12574
+ "@fishjam-cloud/react-native-client",
12575
+ "@fishjam-cloud/react-native-webrtc",
12576
+ "@flitzinteractive/react-native-nitro-html-pdf",
12577
+ "@flyskywhy/react-native-gcanvas",
12578
+ "@fugood/react-native-audio-pcm-stream",
12579
+ "@fullstory/react-native",
12580
+ "@gabriel-sisjr/react-native-background-location",
12581
+ "@generac/react-native-local-network-permission",
12582
+ "@giphy/react-native-sdk",
12583
+ "@gmisoftware/react-native-pay",
12584
+ "@goliapkg/sentori-react-native",
12585
+ "@google/react-native-make-payment",
12586
+ "@googlemaps/react-native-navigation-sdk",
12587
+ "@haroldtran/react-native-pax",
12588
+ "@hot-updater/react-native",
12589
+ "@huymobile/react-native-sms-retriever-nitro-module",
12590
+ "@hyoper/rn-location",
12591
+ "@intercom/intercom-react-native",
12592
+ "@invertase/react-native-apple-authentication",
12593
+ "@iterable/expo-plugin",
12594
+ "@iterable/react-native-sdk",
12595
+ "@iternio/react-native-auto-play",
12596
+ "@joplin/react-native-alarm-notification",
12597
+ "@journeyapps/react-native-quick-sqlite",
12598
+ "@jwplayer/jwplayer-react-native",
12599
+ "@kesha-antonov/react-native-background-downloader",
12600
+ "@kilohealth/rn-fitness-tracker",
12601
+ "@kingstinct/react-native-healthkit",
12602
+ "@kishannareshpal/expo-pdf",
12603
+ "@livekit/react-native",
12604
+ "@livekit/react-native-webrtc",
12605
+ "@lodev09/react-native-exify",
12606
+ "@lodev09/react-native-true-sheet",
12607
+ "@logicwind/react-native-exit-app",
12608
+ "@logicwind/react-native-matomo-tracker",
12609
+ "@logicwind/react-native-status-bar-height",
12610
+ "@logicwind/react-native-tvos-keyboard",
12611
+ "@lomray/react-native-apple-music",
12612
+ "@loqalabs/loqa-expo-dsp",
12613
+ "@lottiefiles/dotlottie-react-native",
12614
+ "@luciq/react-native",
12615
+ "@lugg/maps",
12616
+ "@magrinj/expo-quick-look",
12617
+ "@mapbox/react-native-mapbox-gl",
12618
+ "@maplibre/maplibre-react-native",
12619
+ "@mattermost/react-native-emm",
12620
+ "@mattermost/react-native-network-client",
12621
+ "@mattermost/react-native-paste-input",
12622
+ "@mattermost/react-native-turbo-log",
12623
+ "@mattermost/rnutils",
12624
+ "@meedwire/react-native-image-rotate",
12625
+ "@metamask/native-utils",
12626
+ "@metamask/react-native-search-api",
12627
+ "@metamask/react-native-webview",
12628
+ "@mgcrea/react-native-jetpack-compose",
12629
+ "@mgcrea/vision-camera-barcode-scanner",
12630
+ "@mhpdev/react-native-haptics",
12631
+ "@mhpdev/react-native-speech",
12632
+ "@mj-studio/react-native-naver-map",
12633
+ "@mozzius/expo-dynamic-app-icon",
12634
+ "@nandorojo/galeria",
12635
+ "@notifee/react-native",
12636
+ "@novastera-oss/rn-google-signin",
12637
+ "@nozbe/watermelondb",
12638
+ "@okta/okta-react-native",
12639
+ "@oleg_svetlichnyi/expo-icloud-storage",
12640
+ "@op-engineering/op-sqlite",
12641
+ "@orbital-systems/react-native-esp-idf-provisioning",
12642
+ "@playerdata/react-native-mcu-manager",
12643
+ "@pnthach95/react-native-root-view-background",
12644
+ "@pocketpalai/react-native-speech",
12645
+ "@posthog/react-native-plugin",
12646
+ "@powersync/react-native",
12647
+ "@preeternal/react-native-cookie-manager",
12648
+ "@prisma/react-native",
12649
+ "@purchasely/react-native-purchasely-android-player",
12650
+ "@purchasely/react-native-purchasely-google",
12651
+ "@purchasely/react-native-purchasely-huawei",
12652
+ "@pusher/pusher-websocket-react-native",
12653
+ "@pushpendersingh/react-native-otp-verify",
12654
+ "@pushpendersingh/react-native-scanner",
12655
+ "@react-native-ai/apple",
12656
+ "@react-native-ai/mlc",
12657
+ "@react-native-async-storage/async-storage",
12658
+ "@react-native-camera-roll/camera-roll",
12659
+ "@react-native-clipboard/clipboard",
12660
+ "@react-native-community/audio-toolkit",
12661
+ "@react-native-community/blur",
12662
+ "@react-native-community/checkbox",
12663
+ "@react-native-community/datetimepicker",
12664
+ "@react-native-community/geolocation",
12665
+ "@react-native-community/image-editor",
12666
+ "@react-native-community/masked-view",
12667
+ "@react-native-community/netinfo",
12668
+ "@react-native-community/progress-bar-android",
12669
+ "@react-native-community/progress-view",
12670
+ "@react-native-community/push-notification-ios",
12671
+ "@react-native-community/slider",
12672
+ "@react-native-community/toolbar-android",
12673
+ "@react-native-cookies/cookies",
12674
+ "@react-native-documents/picker",
12675
+ "@react-native-documents/viewer",
12676
+ "@react-native-drivekit/core",
12677
+ "@react-native-drivekit/driver-data",
12678
+ "@react-native-firebase/analytics",
12679
+ "@react-native-firebase/app",
12680
+ "@react-native-firebase/app-check",
12681
+ "@react-native-firebase/app-distribution",
12682
+ "@react-native-firebase/auth",
12683
+ "@react-native-firebase/crashlytics",
12684
+ "@react-native-firebase/database",
12685
+ "@react-native-firebase/firestore",
12686
+ "@react-native-firebase/functions",
12687
+ "@react-native-firebase/in-app-messaging",
12688
+ "@react-native-firebase/installations",
12689
+ "@react-native-firebase/messaging",
12690
+ "@react-native-firebase/ml",
12691
+ "@react-native-firebase/perf",
12692
+ "@react-native-firebase/remote-config",
12693
+ "@react-native-firebase/storage",
12694
+ "@react-native-google-signin/google-signin",
12695
+ "@react-native-masked-view/masked-view",
12696
+ "@react-native-menu/menu",
12697
+ "@react-native-ml-kit/barcode-scanning",
12698
+ "@react-native-ml-kit/face-detection",
12699
+ "@react-native-ml-kit/identify-languages",
12700
+ "@react-native-ml-kit/image-labeling",
12701
+ "@react-native-ml-kit/text-recognition",
12702
+ "@react-native-ml-kit/translate-text",
12703
+ "@react-native-picker/picker",
12704
+ "@react-native-runtimes/core",
12705
+ "@react-native-runtimes/state",
12706
+ "@react-native-segmented-control/segmented-control",
12707
+ "@react-native-seoul/naver-login",
12708
+ "@reactvision/react-viro",
12709
+ "@remobile/react-native-toast",
12710
+ "@renegades/react-native-tickle",
12711
+ "@rive-app/react-native",
12712
+ "@rn-org/react-native-geofencing",
12713
+ "@rn-org/react-native-shortcuts",
12714
+ "@rnmapbox/maps",
12715
+ "@rnw-community/react-native-payments",
12716
+ "@rocket.chat/mobile-crypto",
12717
+ "@roman.sytnyk/blur-app-in-recents",
12718
+ "@rudderstack/rudder-integration-amplitude-react-native",
12719
+ "@rudderstack/rudder-integration-appcenter-react-native",
12720
+ "@rudderstack/rudder-integration-appsflyer-react-native",
12721
+ "@rudderstack/rudder-integration-braze-react-native",
12722
+ "@rudderstack/rudder-integration-clevertap-react-native",
12723
+ "@rudderstack/rudder-integration-facebook-react-native",
12724
+ "@rudderstack/rudder-integration-firebase-react-native",
12725
+ "@rudderstack/rudder-integration-singular-react-native",
12726
+ "@rudderstack/rudder-plugin-db-encryption-react-native",
12727
+ "@rudderstack/rudder-sdk-react-native",
12728
+ "@s77rt/react-native-date-picker",
12729
+ "@sbaiahmed1/react-native-biometrics",
12730
+ "@sbaiahmed1/react-native-blur",
12731
+ "@sdcx/nested-scroll",
12732
+ "@sdcx/pull-to-refresh",
12733
+ "@segment/analytics-react-native",
12734
+ "@segment/sovran-react-native",
12735
+ "@sendbird/calls-react-native",
12736
+ "@sentry/react-native",
12737
+ "@shakebugs/react-native-shake",
12738
+ "@shayrn/react-native-android-phone-number-hint",
12739
+ "@shopify/checkout-sheet-kit",
12740
+ "@shopify/react-native-performance",
12741
+ "@shopify/react-native-skia",
12742
+ "@simform_solutions/react-native-audio-waveform",
12743
+ "@siteed/audio-studio",
12744
+ "@situm/react-native",
12745
+ "@sparkfabrik/react-native-idfa-aaid",
12746
+ "@splicer97/react-native-android-keyboard-adjust",
12747
+ "@splicer97/react-native-mytracker",
12748
+ "@stefanmartin/expo-video-compress",
12749
+ "@stefanmartin/expo-video-watermark",
12750
+ "@stream-io/video-react-native-sdk",
12751
+ "@stripe/stripe-identity-react-native",
12752
+ "@stripe/stripe-react-native",
12753
+ "@stripe/stripe-terminal-react-native",
12754
+ "@superfan-app/spotify-auth",
12755
+ "@supersami/rn-foreground-service",
12756
+ "@survicate/react-native-survicate",
12757
+ "@swan-io/react-native-browser",
12758
+ "@swmansion/react-native-bottom-sheet",
12759
+ "@thehale/react-native-keep-awake",
12760
+ "@turbopush/react-native-code-push",
12761
+ "@twilio/voice-react-native-sdk",
12762
+ "@ua/react-native-airship",
12763
+ "@uiw/react-native-alipay",
12764
+ "@universe/hashcash-native",
12765
+ "@use-voltra/android-client",
12766
+ "@use-voltra/ios-client",
12767
+ "@vokhuyet/react-native-concurrent-sound",
12768
+ "@vonovak/react-native-theme-control",
12769
+ "@walletconnect/react-native-compat",
12770
+ "@wwdrew/expo-android-shared-preferences",
12771
+ "@wwdrew/expo-spotify-sdk",
12772
+ "@xmartlabs/react-native-line",
12773
+ "@xmtp/react-native-sdk",
12774
+ "@zoontek/react-native-navigation-bar",
12775
+ "amazon-ivs-react-native-player",
12776
+ "anyline-ocr-react-native-module",
12777
+ "appcenter",
12778
+ "appcenter-analytics",
12779
+ "appcenter-crashes",
12780
+ "apple-health",
12781
+ "bitmovin-player-react-native",
12782
+ "burnt",
12783
+ "clevertap-react-native",
12784
+ "customerio-reactnative",
12785
+ "expo",
12786
+ "expo-age-range",
12787
+ "expo-alikit",
12788
+ "expo-aliyun-push",
12789
+ "expo-alternate-app-icons",
12790
+ "expo-android-pedometer",
12791
+ "expo-android-shared-preferences",
12792
+ "expo-app-integrity",
12793
+ "expo-app-intents",
12794
+ "expo-app-metrics",
12795
+ "expo-apple-authentication",
12796
+ "expo-application",
12797
+ "expo-asset",
12798
+ "expo-assistant-functions",
12799
+ "expo-audio",
12800
+ "expo-av",
12801
+ "expo-background-fetch",
12802
+ "expo-background-task",
12803
+ "expo-barcode",
12804
+ "expo-barcode-scanner",
12805
+ "expo-battery",
12806
+ "expo-beacon",
12807
+ "expo-better-auth-passkey",
12808
+ "expo-blob",
12809
+ "expo-blur",
12810
+ "expo-brightness",
12811
+ "expo-calendar",
12812
+ "expo-callkit-telecom",
12813
+ "expo-camera",
12814
+ "expo-cellular",
12815
+ "expo-click-outside",
12816
+ "expo-clipboard",
12817
+ "expo-constants",
12818
+ "expo-contacts",
12819
+ "expo-core-spotlight",
12820
+ "expo-crypto",
12821
+ "expo-dev-client",
12822
+ "expo-device",
12823
+ "expo-document-picker",
12824
+ "expo-document-scanner",
12825
+ "expo-drag-drop-content-view",
12826
+ "expo-dynamic-app-icon",
12827
+ "expo-eas-client",
12828
+ "expo-emoji-picker",
12829
+ "expo-esim-utils",
12830
+ "expo-file-system",
12831
+ "expo-finance-kit",
12832
+ "expo-font",
12833
+ "expo-foreground-actions",
12834
+ "expo-gaode-map",
12835
+ "expo-gaode-map-search",
12836
+ "expo-gl",
12837
+ "expo-glass-effect",
12838
+ "expo-haptics",
12839
+ "expo-hardware-buttons",
12840
+ "expo-health-connect",
12841
+ "expo-helium",
12842
+ "expo-hinge",
12843
+ "expo-iap",
12844
+ "expo-ignore-battery-optimizations",
12845
+ "expo-image",
12846
+ "expo-image-manipulator",
12847
+ "expo-image-picker",
12848
+ "expo-in-app-updates",
12849
+ "expo-insights",
12850
+ "expo-intent-launcher",
12851
+ "expo-ios-visual-blur",
12852
+ "expo-keep-awake",
12853
+ "expo-key-event",
12854
+ "expo-libvlc-player",
12855
+ "expo-linear-gradient",
12856
+ "expo-linking",
12857
+ "expo-liquid-glass-native",
12858
+ "expo-liquid-glass-view",
12859
+ "expo-live-activity",
12860
+ "expo-live-photo",
12861
+ "expo-local-authentication",
12862
+ "expo-localization",
12863
+ "expo-location",
12864
+ "expo-mail-composer",
12865
+ "expo-maps",
12866
+ "expo-media-control",
12867
+ "expo-media-library",
12868
+ "expo-mesh-gradient",
12869
+ "expo-modules-core",
12870
+ "expo-music-picker",
12871
+ "expo-native-alipay",
12872
+ "expo-native-emojis-popup",
12873
+ "expo-native-sheet-emojis",
12874
+ "expo-native-wechat",
12875
+ "expo-navigation-bar",
12876
+ "expo-network",
12877
+ "expo-network-addons",
12878
+ "expo-notifications",
12879
+ "expo-observe",
12880
+ "expo-paperkit",
12881
+ "expo-passkey",
12882
+ "expo-paste-input",
12883
+ "expo-pencilkit-ui",
12884
+ "expo-phone-number-hint",
12885
+ "expo-pip",
12886
+ "expo-pretext",
12887
+ "expo-print",
12888
+ "expo-privacy-sensitive",
12889
+ "expo-quick-actions",
12890
+ "expo-rich-input",
12891
+ "expo-roomplan",
12892
+ "expo-screen-capture",
12893
+ "expo-screen-corner-radius",
12894
+ "expo-screen-orientation",
12895
+ "expo-secure-store",
12896
+ "expo-selectable-text",
12897
+ "expo-sensors",
12898
+ "expo-share-extension",
12899
+ "expo-share-intent",
12900
+ "expo-sharing",
12901
+ "expo-shazamkit",
12902
+ "expo-sms",
12903
+ "expo-speech",
12904
+ "expo-speech-recognition",
12905
+ "expo-splash-screen",
12906
+ "expo-sqlite",
12907
+ "expo-squircle-view",
12908
+ "expo-store-review",
12909
+ "expo-stream-audio",
12910
+ "expo-superwall",
12911
+ "expo-symbols",
12912
+ "expo-system-ui",
12913
+ "expo-targets",
12914
+ "expo-task-manager",
12915
+ "expo-testflight",
12916
+ "expo-tracking-transparency",
12917
+ "expo-translate-text",
12918
+ "expo-truecaller",
12919
+ "expo-tvos-search",
12920
+ "expo-updates",
12921
+ "expo-vector-search",
12922
+ "expo-video",
12923
+ "expo-video-metadata",
12924
+ "expo-video-thumbnails",
12925
+ "expo-web-browser",
12926
+ "expo-wechat",
12927
+ "expo-widgets",
12928
+ "expo-winter-fetch",
12929
+ "expo-winter-formdata",
12930
+ "freerasp-react-native",
12931
+ "group-ib-fp",
12932
+ "gt-react-native",
12933
+ "jail-monkey",
12934
+ "klaviyo-react-native-sdk",
12935
+ "llama.rn",
12936
+ "loro-react-native",
12937
+ "lottie-react-native",
12938
+ "mixpanel-react-native",
12939
+ "munim-bluetooth",
12940
+ "navigation-react-native",
12941
+ "newrelic-react-native-agent",
12942
+ "one",
12943
+ "ping-react-native",
12944
+ "posthog-react-native-session-replay",
12945
+ "pushy-react-native",
12946
+ "react-native",
12947
+ "react-native-a11y",
12948
+ "react-native-a11y-container",
12949
+ "react-native-a11y-order",
12950
+ "react-native-actions-shortcuts",
12951
+ "react-native-adapty",
12952
+ "react-native-add-calendar-event",
12953
+ "react-native-adjust",
12954
+ "react-native-admob-native-ads",
12955
+ "react-native-advanced-input-mask",
12956
+ "react-native-aes-crypto",
12957
+ "react-native-aes-gcm-crypto",
12958
+ "react-native-age-signals",
12959
+ "react-native-agora",
12960
+ "react-native-amap3d",
12961
+ "react-native-amplitude-analytics",
12962
+ "react-native-android-location-enabler",
12963
+ "react-native-android-widget",
12964
+ "react-native-animateable-text",
12965
+ "react-native-animated-observer",
12966
+ "react-native-app-attest",
12967
+ "react-native-app-auth",
12968
+ "react-native-app-clip",
12969
+ "react-native-app-logs",
12970
+ "react-native-app-review",
12971
+ "react-native-appearance-control",
12972
+ "react-native-apple-ads-attribution",
12973
+ "react-native-apple-llm",
12974
+ "react-native-appsflyer",
12975
+ "react-native-appstack-sdk",
12976
+ "react-native-ar-preview",
12977
+ "react-native-audio-api",
12978
+ "react-native-auth0",
12979
+ "react-native-authsignal",
12980
+ "react-native-auto-skeleton",
12981
+ "react-native-avoid-softinput",
12982
+ "react-native-awesome-card-io",
12983
+ "react-native-azure-auth",
12984
+ "react-native-background-actions",
12985
+ "react-native-background-fetch",
12986
+ "react-native-background-geolocation",
12987
+ "react-native-background-job",
12988
+ "react-native-background-task",
12989
+ "react-native-background-timer",
12990
+ "react-native-background-upload",
12991
+ "react-native-barcode-creator",
12992
+ "react-native-bare-kit",
12993
+ "react-native-beacon-kit",
12994
+ "react-native-better-clustering",
12995
+ "react-native-better-maps",
12996
+ "react-native-biometrics",
12997
+ "react-native-blasted-image",
12998
+ "react-native-ble-manager",
12999
+ "react-native-ble-nitro",
13000
+ "react-native-ble-plx",
13001
+ "react-native-blob-courier",
13002
+ "react-native-blob-util",
13003
+ "react-native-bluetooth-classic",
13004
+ "react-native-bluetooth-state-manager",
13005
+ "react-native-bluetooth-status",
13006
+ "react-native-blur-view",
13007
+ "react-native-blurhash",
13008
+ "react-native-bootsplash",
13009
+ "react-native-bottom-action-sheet",
13010
+ "react-native-bottom-sheet-behavior",
13011
+ "react-native-bottom-tabs",
13012
+ "react-native-branch",
13013
+ "react-native-calendar-events",
13014
+ "react-native-callkeep",
13015
+ "react-native-camera-kit",
13016
+ "react-native-capture-protection",
13017
+ "react-native-cardscan",
13018
+ "react-native-carplay",
13019
+ "react-native-cashfree-pg-sdk",
13020
+ "react-native-cesium",
13021
+ "react-native-change-icon",
13022
+ "react-native-charts-wrapper",
13023
+ "react-native-cloud-storage",
13024
+ "react-native-cloud-store",
13025
+ "react-native-code-push",
13026
+ "react-native-color-picker-ios",
13027
+ "react-native-compass-heading",
13028
+ "react-native-compressor",
13029
+ "react-native-config",
13030
+ "react-native-config-reader",
13031
+ "react-native-contacts",
13032
+ "react-native-context-menu-view",
13033
+ "react-native-cos-sdk",
13034
+ "react-native-create-thumbnail",
13035
+ "react-native-credentials-manager",
13036
+ "react-native-custom-splash",
13037
+ "react-native-customized-image-picker",
13038
+ "react-native-dark-mode",
13039
+ "react-native-date-picker",
13040
+ "react-native-deepgram",
13041
+ "react-native-default-preference",
13042
+ "react-native-detector",
13043
+ "react-native-device-attest",
13044
+ "react-native-device-country",
13045
+ "react-native-device-info",
13046
+ "react-native-dialogs",
13047
+ "react-native-document-picker",
13048
+ "react-native-document-picker-macos",
13049
+ "react-native-document-scanner",
13050
+ "react-native-document-scanner-plugin",
13051
+ "react-native-drop-shadow",
13052
+ "react-native-drum-picker",
13053
+ "react-native-dynamic-app-icon",
13054
+ "react-native-earl-thermal-printer",
13055
+ "react-native-ease",
13056
+ "react-native-edge-fade",
13057
+ "react-native-edge-to-edge",
13058
+ "react-native-emoji-popup",
13059
+ "react-native-enriched",
13060
+ "react-native-enriched-html",
13061
+ "react-native-enriched-markdown",
13062
+ "react-native-events",
13063
+ "react-native-exception-handler",
13064
+ "react-native-executorch",
13065
+ "react-native-exit-app",
13066
+ "react-native-expo-braintree",
13067
+ "react-native-external-display",
13068
+ "react-native-external-keyboard",
13069
+ "react-native-extra-dimensions-android",
13070
+ "react-native-fabric",
13071
+ "react-native-fast-image",
13072
+ "react-native-fast-io",
13073
+ "react-native-fast-opencv",
13074
+ "react-native-fast-secure-storage",
13075
+ "react-native-fast-shadow",
13076
+ "react-native-fast-squircle",
13077
+ "react-native-fast-tflite",
13078
+ "react-native-fast-trie",
13079
+ "react-native-fbads",
13080
+ "react-native-fbsdk-next",
13081
+ "react-native-fcm",
13082
+ "react-native-filament",
13083
+ "react-native-file-access",
13084
+ "react-native-file-logger",
13085
+ "react-native-file-selector",
13086
+ "react-native-file-viewer",
13087
+ "react-native-file-viewer-turbo",
13088
+ "react-native-fileupload",
13089
+ "react-native-find-local-devices",
13090
+ "react-native-fingerprint-scanner",
13091
+ "react-native-floating-label-input",
13092
+ "react-native-fs",
13093
+ "react-native-fs-turbo",
13094
+ "react-native-geo-fencing",
13095
+ "react-native-geolocation-service",
13096
+ "react-native-gesture-handler",
13097
+ "react-native-get-device-locale",
13098
+ "react-native-get-location",
13099
+ "react-native-get-random-values",
13100
+ "react-native-google-auth",
13101
+ "react-native-google-cast",
13102
+ "react-native-google-fit",
13103
+ "react-native-google-maps-plus",
13104
+ "react-native-google-mobile-ads",
13105
+ "react-native-google-places",
13106
+ "react-native-google-places-sdk",
13107
+ "react-native-google-play-install-referrer",
13108
+ "react-native-gzip",
13109
+ "react-native-haptic-feedback",
13110
+ "react-native-hapticlabs",
13111
+ "react-native-headphone-detection",
13112
+ "react-native-health",
13113
+ "react-native-health-connect",
13114
+ "react-native-here-explore",
13115
+ "react-native-hole-view",
13116
+ "react-native-home-indicator",
13117
+ "react-native-hotkeys",
13118
+ "react-native-html-to-pdf",
13119
+ "react-native-http-bridge-refurbished",
13120
+ "react-native-hyper-markdown",
13121
+ "react-native-i18n",
13122
+ "react-native-iap",
13123
+ "react-native-iaphub",
13124
+ "react-native-icloud-kit",
13125
+ "react-native-idle-timer",
13126
+ "react-native-image-colors",
13127
+ "react-native-image-compression-kit",
13128
+ "react-native-image-crop-picker",
13129
+ "react-native-image-marker",
13130
+ "react-native-image-picker",
13131
+ "react-native-image-size",
13132
+ "react-native-image-stitcher",
13133
+ "react-native-in-app-review",
13134
+ "react-native-in-app-utils",
13135
+ "react-native-inappbrowser-nitro",
13136
+ "react-native-inappbrowser-reborn",
13137
+ "react-native-incall-manager",
13138
+ "react-native-interception-webview",
13139
+ "react-native-intercom",
13140
+ "react-native-ios-context-menu",
13141
+ "react-native-ios-modal",
13142
+ "react-native-ios-translate-sheet",
13143
+ "react-native-ios-translate-tasks",
13144
+ "react-native-ios-utilities",
13145
+ "react-native-job-queue",
13146
+ "react-native-jw-media-player",
13147
+ "react-native-keep-awake",
13148
+ "react-native-key-command",
13149
+ "react-native-key-pair",
13150
+ "react-native-keyboard-controller",
13151
+ "react-native-keyboard-manager",
13152
+ "react-native-keychain",
13153
+ "react-native-keyevent",
13154
+ "react-native-keys",
13155
+ "react-native-launch-arguments",
13156
+ "react-native-leaflet-view",
13157
+ "react-native-legal",
13158
+ "react-native-libsodium",
13159
+ "react-native-linear-gradient",
13160
+ "react-native-linkedin-login",
13161
+ "react-native-liquid-glassmorphism",
13162
+ "react-native-litert-lm",
13163
+ "react-native-llm-mediapipe",
13164
+ "react-native-loader-kit",
13165
+ "react-native-localization",
13166
+ "react-native-localization-settings",
13167
+ "react-native-localize",
13168
+ "react-native-location",
13169
+ "react-native-location-enabler",
13170
+ "react-native-mail",
13171
+ "react-native-maps",
13172
+ "react-native-material-palette",
13173
+ "react-native-mdm-config",
13174
+ "react-native-measure-text",
13175
+ "react-native-mixpanel",
13176
+ "react-native-mmkv",
13177
+ "react-native-mmkv-storage",
13178
+ "react-native-moengage",
13179
+ "react-native-month-year-picker",
13180
+ "react-native-moyasar-apple-pay",
13181
+ "react-native-moyasar-sdk",
13182
+ "react-native-multiple-modals",
13183
+ "react-native-nano-icons",
13184
+ "react-native-navigation",
13185
+ "react-native-navigation-bar-color",
13186
+ "react-native-navigation-mode",
13187
+ "react-native-network-info",
13188
+ "react-native-nfc-manager",
13189
+ "react-native-nitro-ark",
13190
+ "react-native-nitro-audio-manager",
13191
+ "react-native-nitro-buffer",
13192
+ "react-native-nitro-cloud-uploader",
13193
+ "react-native-nitro-cookies",
13194
+ "react-native-nitro-crypto",
13195
+ "react-native-nitro-device-info",
13196
+ "react-native-nitro-dns",
13197
+ "react-native-nitro-fetch",
13198
+ "react-native-nitro-file-system",
13199
+ "react-native-nitro-fs",
13200
+ "react-native-nitro-geocoder",
13201
+ "react-native-nitro-geolocation",
13202
+ "react-native-nitro-google-signin",
13203
+ "react-native-nitro-haptics",
13204
+ "react-native-nitro-http-server",
13205
+ "react-native-nitro-image",
13206
+ "react-native-nitro-markdown",
13207
+ "react-native-nitro-modules",
13208
+ "react-native-nitro-net",
13209
+ "react-native-nitro-network-info",
13210
+ "react-native-nitro-ota",
13211
+ "react-native-nitro-player",
13212
+ "react-native-nitro-pose-exercises",
13213
+ "react-native-nitro-rtmp-publisher",
13214
+ "react-native-nitro-screen-recorder",
13215
+ "react-native-nitro-sensors-kit",
13216
+ "react-native-nitro-sfsymbols",
13217
+ "react-native-nitro-sound",
13218
+ "react-native-nitro-speech",
13219
+ "react-native-nitro-sqlite",
13220
+ "react-native-nitro-sse",
13221
+ "react-native-nitro-text-decoder",
13222
+ "react-native-nitro-toast",
13223
+ "react-native-nitro-tor",
13224
+ "react-native-nitro-totp",
13225
+ "react-native-nitro-vision-kit",
13226
+ "react-native-nitro-web-image",
13227
+ "react-native-nitro-websockets",
13228
+ "react-native-node-api",
13229
+ "react-native-notification-badge",
13230
+ "react-native-notification-sounds",
13231
+ "react-native-notifications",
13232
+ "react-native-notify-kit",
13233
+ "react-native-oauth",
13234
+ "react-native-ometria",
13235
+ "react-native-omni",
13236
+ "react-native-onesignal",
13237
+ "react-native-openai",
13238
+ "react-native-orientation-director",
13239
+ "react-native-orientation-locker",
13240
+ "react-native-orientation-manager",
13241
+ "react-native-orientation-turbo",
13242
+ "react-native-os",
13243
+ "react-native-ota-hot-update",
13244
+ "react-native-otp-verify",
13245
+ "react-native-package-checker",
13246
+ "react-native-pager-view",
13247
+ "react-native-palette-full",
13248
+ "react-native-passkey",
13249
+ "react-native-payments",
13250
+ "react-native-paypal",
13251
+ "react-native-pdf",
13252
+ "react-native-pdf-from-image",
13253
+ "react-native-pdf-jsi",
13254
+ "react-native-pdf-light",
13255
+ "react-native-pdf-renderer",
13256
+ "react-native-pdf-view",
13257
+ "react-native-performance",
13258
+ "react-native-performance-limiter",
13259
+ "react-native-permissions",
13260
+ "react-native-perspective-image-cropper",
13261
+ "react-native-photo-editor",
13262
+ "react-native-photo-manipulator",
13263
+ "react-native-photo-view",
13264
+ "react-native-photo-view-ex",
13265
+ "react-native-photoeditorsdk",
13266
+ "react-native-pinchable",
13267
+ "react-native-ping",
13268
+ "react-native-pkce-challenge",
13269
+ "react-native-plaid-link-sdk",
13270
+ "react-native-platform-components",
13271
+ "react-native-play-age-range-declaration",
13272
+ "react-native-pretty-toast",
13273
+ "react-native-print",
13274
+ "react-native-private-screen",
13275
+ "react-native-prompt-android",
13276
+ "react-native-pulsar",
13277
+ "react-native-purchasely",
13278
+ "react-native-purchases",
13279
+ "react-native-purchases-ui",
13280
+ "react-native-pure-jwt",
13281
+ "react-native-push-notification",
13282
+ "react-native-qr-decode-image-camera",
13283
+ "react-native-qr-kit",
13284
+ "react-native-quick-actions",
13285
+ "react-native-quick-base64",
13286
+ "react-native-quick-crypto",
13287
+ "react-native-quick-sqlite",
13288
+ "react-native-radial-gradient",
13289
+ "react-native-randombytes",
13290
+ "react-native-rate",
13291
+ "react-native-rate-app",
13292
+ "react-native-razorpay",
13293
+ "react-native-reanimated",
13294
+ "react-native-receive-sharing-intent",
13295
+ "react-native-record-screen",
13296
+ "react-native-restart",
13297
+ "react-native-restart-newarch",
13298
+ "react-native-rn-in-app-update",
13299
+ "react-native-rsa-native",
13300
+ "react-native-rsa-signer",
13301
+ "react-native-safari-view",
13302
+ "react-native-safe-area-context",
13303
+ "react-native-screen-choreography",
13304
+ "react-native-screen-corner-radius",
13305
+ "react-native-screenguard",
13306
+ "react-native-screens",
13307
+ "react-native-screenshot-aware",
13308
+ "react-native-screenshot-prevent",
13309
+ "react-native-search-bar",
13310
+ "react-native-secure-key-store",
13311
+ "react-native-securerandom",
13312
+ "react-native-select-contact",
13313
+ "react-native-send-intent",
13314
+ "react-native-sensitive-info",
13315
+ "react-native-sensors",
13316
+ "react-native-settings",
13317
+ "react-native-sfsymbols",
13318
+ "react-native-shake",
13319
+ "react-native-share",
13320
+ "react-native-share-menu",
13321
+ "react-native-shared-element",
13322
+ "react-native-shared-group-preferences",
13323
+ "react-native-shareplay",
13324
+ "react-native-shiki-engine",
13325
+ "react-native-showtime",
13326
+ "react-native-signature-capture",
13327
+ "react-native-simple-biometrics",
13328
+ "react-native-simple-toast",
13329
+ "react-native-siri-shortcut",
13330
+ "react-native-smart-splash-screen",
13331
+ "react-native-snackbar",
13332
+ "react-native-social-share",
13333
+ "react-native-sound",
13334
+ "react-native-sound-player",
13335
+ "react-native-speech-recognition-kit",
13336
+ "react-native-spinkit",
13337
+ "react-native-splash-screen",
13338
+ "react-native-splash-screen-newarch",
13339
+ "react-native-splash-view",
13340
+ "react-native-spotify-remote",
13341
+ "react-native-spotlight-search",
13342
+ "react-native-sqlite-2",
13343
+ "react-native-sqlite-storage",
13344
+ "react-native-ssl-manager",
13345
+ "react-native-ssl-public-key-pinning",
13346
+ "react-native-stallion",
13347
+ "react-native-star-io10",
13348
+ "react-native-store-age-signals-native-modules",
13349
+ "react-native-store-review",
13350
+ "react-native-svg",
13351
+ "react-native-system-bars",
13352
+ "react-native-system-navigation-bar",
13353
+ "react-native-system-setting",
13354
+ "react-native-tableview",
13355
+ "react-native-tcp",
13356
+ "react-native-tcp-socket",
13357
+ "react-native-teleport",
13358
+ "react-native-tenjin",
13359
+ "react-native-testfairy",
13360
+ "react-native-text-input-mask",
13361
+ "react-native-text-size",
13362
+ "react-native-theme-switch-animation",
13363
+ "react-native-theoplayer",
13364
+ "react-native-thermal-receipt-printer",
13365
+ "react-native-tiktok",
13366
+ "react-native-tiktok-business-sdk",
13367
+ "react-native-timezone",
13368
+ "react-native-tooltip",
13369
+ "react-native-tor",
13370
+ "react-native-touch-id",
13371
+ "react-native-track-player",
13372
+ "react-native-tracking-transparency",
13373
+ "react-native-transformer-text-input",
13374
+ "react-native-ttlock",
13375
+ "react-native-tts",
13376
+ "react-native-tuner-engine",
13377
+ "react-native-turbo-haptics",
13378
+ "react-native-turbo-image",
13379
+ "react-native-turbo-lnd",
13380
+ "react-native-turbo-mock-location-detector",
13381
+ "react-native-turbo-preferences",
13382
+ "react-native-twilio-video-webrtc",
13383
+ "react-native-udp",
13384
+ "react-native-ui-lib",
13385
+ "react-native-uitextview",
13386
+ "react-native-ulid-jsi",
13387
+ "react-native-unistyles",
13388
+ "react-native-update",
13389
+ "react-native-urovo",
13390
+ "react-native-ux-cam",
13391
+ "react-native-variable-blur",
13392
+ "react-native-vector-icons",
13393
+ "react-native-version-check",
13394
+ "react-native-version-info",
13395
+ "react-native-version-number",
13396
+ "react-native-video",
13397
+ "react-native-video-cache",
13398
+ "react-native-video-duration",
13399
+ "react-native-video-processing",
13400
+ "react-native-video-provider",
13401
+ "react-native-video-trim",
13402
+ "react-native-videoeditorsdk",
13403
+ "react-native-view-pdf",
13404
+ "react-native-view-recorder",
13405
+ "react-native-view-shot",
13406
+ "react-native-vision-camera",
13407
+ "react-native-vision-camera-barcode-scanner",
13408
+ "react-native-vision-camera-face-detector",
13409
+ "react-native-vision-camera-image-labeler",
13410
+ "react-native-vision-camera-location",
13411
+ "react-native-vision-camera-resizer",
13412
+ "react-native-vision-camera-text-recognition",
13413
+ "react-native-vision-camera-worklets",
13414
+ "react-native-vlc-media-player",
13415
+ "react-native-voip-push-notification",
13416
+ "react-native-volume-manager",
13417
+ "react-native-vosk",
13418
+ "react-native-wallet-manager",
13419
+ "react-native-wallet-pass",
13420
+ "react-native-watch-connectivity",
13421
+ "react-native-wear-connectivity",
13422
+ "react-native-web-serial-api",
13423
+ "react-native-webgpu",
13424
+ "react-native-webp-converter",
13425
+ "react-native-webp-format",
13426
+ "react-native-webrtc",
13427
+ "react-native-webview",
13428
+ "react-native-wechat-lib",
13429
+ "react-native-wheel-pick",
13430
+ "react-native-wheel-picker-android",
13431
+ "react-native-whip-whep",
13432
+ "react-native-widget-picker",
13433
+ "react-native-widgetkit",
13434
+ "react-native-wifi-p2p",
13435
+ "react-native-wifi-reborn",
13436
+ "react-native-window-view",
13437
+ "react-native-windows",
13438
+ "react-native-windows-hello",
13439
+ "react-native-wordpress-editor",
13440
+ "react-native-worklets",
13441
+ "react-native-worklets-core",
13442
+ "react-native-xaml",
13443
+ "react-native-xxhash",
13444
+ "react-native-youtube",
13445
+ "react-native-zeroconf",
13446
+ "react-native-zip-archive",
13447
+ "realm",
13448
+ "rive-react-native",
13449
+ "rn-apple-healthkit",
13450
+ "rn-card-scanner",
13451
+ "rn-date-format",
13452
+ "rn-fade-wrapper",
13453
+ "rn-fetch-blob",
13454
+ "rn-mlkit-ocr",
13455
+ "rn-qr-generator",
13456
+ "rn-secure-storage",
13457
+ "rn-watch-connect",
13458
+ "rn-zendesk",
13459
+ "rollbar-react-native",
13460
+ "scandit-react-native-datacapture-barcode",
13461
+ "scandit-react-native-datacapture-core",
13462
+ "scandit-react-native-datacapture-id",
13463
+ "scandit-react-native-datacapture-label",
13464
+ "scandit-react-native-datacapture-label-text",
13465
+ "scandit-react-native-datacapture-parser",
13466
+ "sift-react-native",
13467
+ "sp-react-native-in-app-updates",
13468
+ "stream-chat-expo",
13469
+ "stream-chat-react-native",
13470
+ "swiftui-react-native",
13471
+ "uws-react-native",
13472
+ "vision-camera-cropper",
13473
+ "vision-camera-dynamsoft-document-normalizer",
13474
+ "vision-camera-ocr-plugin",
13475
+ "vision-camera-zxing",
13476
+ "whisper.rn"
13477
+ ];
13478
+ var NATIVE_RUNTIME_PACKAGE_NAMES = [
13479
+ ...NATIVE_STUB_PACKAGE_NAMES,
13480
+ ...LIGHT_NATIVE_PACKAGE_NAMES,
13481
+ "@ammarahmed/react-native-background-fetch",
13482
+ "@bsky.app/react-native-uitextview",
13483
+ "@bsky.app/video",
13484
+ "@datadog/mobile-react-native-webview",
13485
+ "@haileyok/bluesky-video",
13486
+ "@react-native-vector-icons/get-image",
13487
+ "@react-navigation/native",
13488
+ "@tamagui/native-registry",
13489
+ "@uniswap/ethers-rs-mobile",
13490
+ "@valora/react-native-keychain",
13491
+ "expo-router",
13492
+ "react-native-app-control",
13493
+ "react-native-blue-crypto",
13494
+ "react-native-nitro-base64",
13495
+ "react-native-nitro-gzip",
13496
+ "react-native-sectioned-slider"
13497
+ ];
13498
+
13499
+ // src/installed-package-versions.ts
11015
13500
  function readInstalledPackage(projectRoot, name2) {
11016
13501
  let dir = projectRoot;
11017
13502
  for (; ; ) {
@@ -11051,9 +13536,9 @@ function readInstalledNativePackageVersions(projectRoot) {
11051
13536
  const nativeNames = /* @__PURE__ */ new Set();
11052
13537
  for (const specifier of [
11053
13538
  "react-native",
11054
- ...import_native_package_names.NATIVE_RUNTIME_PACKAGE_NAMES,
11055
- ...import_lazy_stub_patterns.LAZY_STUB_PATTERNS,
11056
- ...Object.values(import_stub_manifest2.COMPAT_STUBS).map((entry) => entry.specifier)
13539
+ ...NATIVE_RUNTIME_PACKAGE_NAMES,
13540
+ ...LAZY_STUB_PATTERNS,
13541
+ ...Object.values(COMPAT_STUBS).map((entry) => entry.specifier)
11057
13542
  ]) {
11058
13543
  const name2 = extractPackageFromPath(`node_modules/${specifier}`);
11059
13544
  if (name2) nativeNames.add(name2);
@@ -11170,6 +13655,7 @@ function readPackageFile(root, file, maxBytes) {
11170
13655
  }
11171
13656
 
11172
13657
  // src/swift-submit.ts
13658
+ init_is_record();
11173
13659
  var SWIFT_PACKAGE_PATH = "/__peach/swift-package/";
11174
13660
  var SWIFT_HMR_PATH = "/__peach/swift-hmr";
11175
13661
  var DEFAULT_SWIFT_COMPILE_BUILD_MS = 10 * 6e4;
@@ -11915,36 +14401,9 @@ function peachPlugin(options = {}) {
11915
14401
  // src/metro-plugin.ts
11916
14402
  var import_fs6 = __toESM(require("fs"), 1);
11917
14403
  var import_module2 = require("module");
11918
- var import_node_crypto6 = require("node:crypto");
14404
+ var import_node_crypto7 = require("node:crypto");
11919
14405
  var import_path5 = __toESM(require("path"), 1);
11920
-
11921
- // ../peach-engine/src/platform/adapter.ts
11922
- var IOS_ADAPTER = Object.freeze({
11923
- id: "ios",
11924
- displayName: "iOS",
11925
- isIOS: true,
11926
- isAndroid: false,
11927
- select: (registry) => registry.ios
11928
- });
11929
- var ANDROID_ADAPTER = Object.freeze({
11930
- id: "android",
11931
- displayName: "Android",
11932
- isIOS: false,
11933
- isAndroid: true,
11934
- select: (registry) => registry.android
11935
- });
11936
- var RUNTIME_PLATFORM_ADAPTERS = Object.freeze({
11937
- ios: IOS_ADAPTER,
11938
- android: ANDROID_ADAPTER
11939
- });
11940
- function isRuntimePlatform(value) {
11941
- return value === "ios" || value === "android";
11942
- }
11943
- function getRuntimePlatformAdapter(platform) {
11944
- return RUNTIME_PLATFORM_ADAPTERS[platform];
11945
- }
11946
-
11947
- // src/metro-plugin.ts
14406
+ init_adapter();
11948
14407
  init_app_project();
11949
14408
 
11950
14409
  // src/android-autolinking.ts
@@ -12194,21 +14653,20 @@ function androidMergedResourceValuesDirectory(manifestFile) {
12194
14653
 
12195
14654
  // src/native-app-identity.ts
12196
14655
  init_bundleGlobalFooter();
14656
+ init_is_record();
12197
14657
 
12198
14658
  // src/nativeAppIconContract.ts
12199
- function isRecord2(value) {
12200
- return typeof value === "object" && value !== null && !Array.isArray(value);
12201
- }
14659
+ init_is_record();
12202
14660
  function resolveNativeAppIconArtwork(resources, readText, resourceUri, icons, primaryName, alternateNames, resolveReference) {
12203
14661
  const members = new Set(resources);
12204
- const dictionary = isRecord2(icons) ? icons : {};
14662
+ const dictionary = isRecord(icons) ? icons : {};
12205
14663
  const alternates = Object.fromEntries(
12206
14664
  Object.entries(
12207
- isRecord2(dictionary.CFBundleAlternateIcons) ? dictionary.CFBundleAlternateIcons : {}
14665
+ isRecord(dictionary.CFBundleAlternateIcons) ? dictionary.CFBundleAlternateIcons : {}
12208
14666
  ).map(([name2, declaration]) => [resolveReference(name2), declaration])
12209
14667
  );
12210
14668
  const resolve4 = (declaration, defaultName) => {
12211
- const entry = isRecord2(declaration) ? declaration : {};
14669
+ const entry = isRecord(declaration) ? declaration : {};
12212
14670
  const name2 = typeof entry.CFBundleIconName === "string" ? resolveReference(entry.CFBundleIconName) : resolveReference(defaultName);
12213
14671
  const catalogs = resources.filter(
12214
14672
  (file) => file.endsWith(`/${name2}.appiconset/Contents.json`)
@@ -12218,9 +14676,9 @@ function resolveNativeAppIconArtwork(resources, readText, resourceUri, icons, pr
12218
14676
  const catalogCandidates = [];
12219
14677
  const text2 = readText(catalog);
12220
14678
  const contents = text2 === null ? null : JSON.parse(text2);
12221
- if (isRecord2(contents) && Array.isArray(contents.images)) {
14679
+ if (isRecord(contents) && Array.isArray(contents.images)) {
12222
14680
  for (const image of contents.images) {
12223
- if (!isRecord2(image) || typeof image.filename !== "string" || /[/\\]/.test(image.filename) || !/\.(png|jpe?g|webp)$/i.test(image.filename) || image.appearances !== void 0 || !["iphone", "universal", "ios-marketing"].includes(String(image.idiom)))
14681
+ if (!isRecord(image) || typeof image.filename !== "string" || /[/\\]/.test(image.filename) || !/\.(png|jpe?g|webp)$/i.test(image.filename) || image.appearances !== void 0 || !["iphone", "universal", "ios-marketing"].includes(String(image.idiom)))
12224
14682
  continue;
12225
14683
  const file = catalog.slice(0, -"Contents.json".length) + image.filename;
12226
14684
  const scale = image.scale === "2x" ? 2 : image.scale === "3x" ? 3 : 1;
@@ -12454,9 +14912,6 @@ function visitXcodeTargetMembers(objects, targetId, resolvePath, filesUnder, joi
12454
14912
  // src/native-app-identity.ts
12455
14913
  var NATIVE_APP_IDENTITY_PREFIX = "globalThis.__sootsimNativeAppIdentity=";
12456
14914
  var METRO_MODULE_PATHS_PREFIX = "globalThis.__sootsimModulePaths=";
12457
- function isRecord3(value) {
12458
- return typeof value === "object" && value !== null && !Array.isArray(value);
12459
- }
12460
14915
  function nonEmptyString(value) {
12461
14916
  return typeof value === "string" && value.length > 0 ? value : null;
12462
14917
  }
@@ -12482,12 +14937,12 @@ function insertNativeAppIdentityFooter(source, identity) {
12482
14937
  function readGoogleSignInConfiguration(plist3, resources) {
12483
14938
  const clientIds = {};
12484
14939
  for (const [file, value] of Object.entries(resources)) {
12485
- if (isRecord3(value) && typeof value.CLIENT_ID === "string")
14940
+ if (isRecord(value) && typeof value.CLIENT_ID === "string")
12486
14941
  clientIds[file.split("/").pop()?.replace(/\.plist$/, "") ?? file] = value.CLIENT_ID;
12487
14942
  }
12488
14943
  const urlSchemes = [];
12489
14944
  for (const entry of Array.isArray(plist3.CFBundleURLTypes) ? plist3.CFBundleURLTypes : []) {
12490
- if (!isRecord3(entry) || !Array.isArray(entry.CFBundleURLSchemes)) continue;
14945
+ if (!isRecord(entry) || !Array.isArray(entry.CFBundleURLSchemes)) continue;
12491
14946
  for (const scheme of entry.CFBundleURLSchemes)
12492
14947
  if (typeof scheme === "string") urlSchemes.push(scheme);
12493
14948
  }
@@ -12595,14 +15050,14 @@ function nativeAppIdentityFromIos(files, parseInfoPlist, iosTarget, resourceUri)
12595
15050
  let objects = {};
12596
15051
  try {
12597
15052
  const parsed = parseOpenStepPlist(pbxproj);
12598
- if (isRecord3(parsed)) {
12599
- objects = isRecord3(parsed.objects) ? parsed.objects : parsed;
15053
+ if (isRecord(parsed)) {
15054
+ objects = isRecord(parsed.objects) ? parsed.objects : parsed;
12600
15055
  }
12601
15056
  } catch {
12602
15057
  }
12603
15058
  const targets = [];
12604
15059
  for (const [id, obj] of Object.entries(objects)) {
12605
- if (isRecord3(obj) && obj.isa === "PBXNativeTarget" && typeof obj.name === "string") {
15060
+ if (isRecord(obj) && obj.isa === "PBXNativeTarget" && typeof obj.name === "string") {
12606
15061
  targets.push({
12607
15062
  id,
12608
15063
  name: obj.name,
@@ -12648,13 +15103,13 @@ function nativeAppIdentityFromIos(files, parseInfoPlist, iosTarget, resourceUri)
12648
15103
  PRODUCT_NAME: targetName
12649
15104
  };
12650
15105
  for (const obj of Object.values(objects)) {
12651
- if (isRecord3(obj) && obj.isa === "PBXProject" && typeof obj.buildConfigurationList === "string") {
15106
+ if (isRecord(obj) && obj.isa === "PBXProject" && typeof obj.buildConfigurationList === "string") {
12652
15107
  const listObj = objects[obj.buildConfigurationList];
12653
- if (isRecord3(listObj) && Array.isArray(listObj.buildConfigurations)) {
15108
+ if (isRecord(listObj) && Array.isArray(listObj.buildConfigurations)) {
12654
15109
  for (const configId of listObj.buildConfigurations) {
12655
15110
  if (typeof configId === "string") {
12656
15111
  const configObj = objects[configId];
12657
- if (isRecord3(configObj) && configObj.name === "Release" && isRecord3(configObj.buildSettings)) {
15112
+ if (isRecord(configObj) && configObj.name === "Release" && isRecord(configObj.buildSettings)) {
12658
15113
  for (const [k, v] of Object.entries(configObj.buildSettings)) {
12659
15114
  if (typeof v === "string") settings[k] = v;
12660
15115
  }
@@ -12666,11 +15121,11 @@ function nativeAppIdentityFromIos(files, parseInfoPlist, iosTarget, resourceUri)
12666
15121
  }
12667
15122
  if (selectedTarget?.buildConfigurationList) {
12668
15123
  const listObj = objects[selectedTarget.buildConfigurationList];
12669
- if (isRecord3(listObj) && Array.isArray(listObj.buildConfigurations)) {
15124
+ if (isRecord(listObj) && Array.isArray(listObj.buildConfigurations)) {
12670
15125
  for (const configId of listObj.buildConfigurations) {
12671
15126
  if (typeof configId === "string") {
12672
15127
  const configObj = objects[configId];
12673
- if (isRecord3(configObj) && configObj.name === "Release" && isRecord3(configObj.buildSettings)) {
15128
+ if (isRecord(configObj) && configObj.name === "Release" && isRecord(configObj.buildSettings)) {
12674
15129
  for (const [k, v] of Object.entries(configObj.buildSettings)) {
12675
15130
  if (typeof v === "string") settings[k] = v;
12676
15131
  }
@@ -12721,7 +15176,7 @@ function nativeAppIdentityFromIos(files, parseInfoPlist, iosTarget, resourceUri)
12721
15176
  if (!bundleName) return null;
12722
15177
  const applicationName = identityFieldFrom(settings, plistString(plist3, "CFBundleDisplayName"), void 0) ?? bundleName;
12723
15178
  const dictionary = parseInfoPlist(plist3);
12724
- if (!isRecord3(dictionary)) throw new Error("native app Info.plist is not a dictionary");
15179
+ if (!isRecord(dictionary)) throw new Error("native app Info.plist is not a dictionary");
12725
15180
  const declaredDisplayName = dictionary.CFBundleDisplayName;
12726
15181
  const applicationDisplayName = typeof declaredDisplayName === "string" ? resolveBuildSetting(declaredDisplayName, settings) : void 0;
12727
15182
  if (applicationDisplayName === null)
@@ -12734,9 +15189,9 @@ function nativeAppIdentityFromIos(files, parseInfoPlist, iosTarget, resourceUri)
12734
15189
  if (dtPlatformVersion === null)
12735
15190
  throw new Error("native app Info.plist DTPlatformVersion is unresolved");
12736
15191
  const icons = dictionary.CFBundleIcons;
12737
- const alternates = isRecord3(icons) ? icons.CFBundleAlternateIcons : void 0;
15192
+ const alternates = isRecord(icons) ? icons.CFBundleAlternateIcons : void 0;
12738
15193
  const alternateIconNames = /* @__PURE__ */ new Set();
12739
- for (const name2 of isRecord3(alternates) ? Object.keys(alternates) : []) {
15194
+ for (const name2 of isRecord(alternates) ? Object.keys(alternates) : []) {
12740
15195
  const resolved = resolveBuildSetting(name2, settings);
12741
15196
  if (resolved === null) throw new Error("native alternate icon name is unresolved");
12742
15197
  alternateIconNames.add(resolved);
@@ -12840,11 +15295,11 @@ function nativeAppIdentityFromIos(files, parseInfoPlist, iosTarget, resourceUri)
12840
15295
  return `${base.startsWith("/") ? "/" : ""}${segments.join("/")}`;
12841
15296
  };
12842
15297
  const project = Object.values(objects).find(
12843
- (object) => isRecord3(object) && object.isa === "PBXProject"
15298
+ (object) => isRecord(object) && object.isa === "PBXProject"
12844
15299
  );
12845
15300
  const projectDir = join5(
12846
15301
  pbxprojPath.replace(/(?:^|\/)[^/]+\.xcodeproj\/project\.pbxproj$/, ""),
12847
- isRecord3(project) && typeof project.projectDirPath === "string" ? project.projectDirPath : ""
15302
+ isRecord(project) && typeof project.projectDirPath === "string" ? project.projectDirPath : ""
12848
15303
  );
12849
15304
  const paths = Object.keys(files);
12850
15305
  visitXcodeTargetMembers(
@@ -12954,6 +15409,7 @@ function extractNativeAppIdentityFromFiles(files, platform, parseInfoPlist, iosT
12954
15409
  var import_node_fs14 = __toESM(require("node:fs"), 1);
12955
15410
  var import_node_module3 = require("node:module");
12956
15411
  var import_node_path14 = __toESM(require("node:path"), 1);
15412
+ init_is_record();
12957
15413
 
12958
15414
  // src/plist.ts
12959
15415
  var import_plist = __toESM(require_plist(), 1);
@@ -12962,6 +15418,8 @@ function parsePlistSource(source) {
12962
15418
  }
12963
15419
 
12964
15420
  // src/xcode-project.ts
15421
+ var import_node_child_process5 = require("node:child_process");
15422
+ var import_node_crypto6 = require("node:crypto");
12965
15423
  var import_node_fs13 = __toESM(require("node:fs"), 1);
12966
15424
  var import_node_path13 = __toESM(require("node:path"), 1);
12967
15425
  var import_plist2 = __toESM(require_plist(), 1);
@@ -13474,11 +15932,14 @@ function targetSettings(ref, configuration, builtins, options = {}) {
13474
15932
  if (!config) return [];
13475
15933
  const name2 = str(config.name) ?? configuration;
13476
15934
  const base = str(config.baseConfigurationReference);
15935
+ const anchor = str(config.baseConfigurationReferenceAnchor);
15936
+ const relative3 = str(config.baseConfigurationReferenceRelativePath);
13477
15937
  const own = isDict(config.buildSettings) ? config.buildSettings : {};
13478
- const baseFile = base ? project.resolvePath(base) : null;
13479
- if (options.requireSources !== false && base && (!baseFile || !import_node_fs13.default.existsSync(baseFile)))
15938
+ const directory = anchor ? project.resolvePath(anchor) : null;
15939
+ const baseFile = base ? project.resolvePath(base) : directory && relative3 ? import_node_path13.default.resolve(directory, relative3) : null;
15940
+ if (options.requireSources !== false && (base || anchor || relative3) && (!baseFile || !import_node_fs13.default.existsSync(baseFile)))
13480
15941
  throw new Error(
13481
- `Unable to open base configuration reference file '${baseFile ?? base}'`
15942
+ `Unable to open base configuration reference file '${baseFile ?? base ?? relative3 ?? anchor}'`
13482
15943
  );
13483
15944
  const read = [];
13484
15945
  const fromFile = baseFile ? readXcconfig(baseFile, read) : {};
@@ -13569,33 +16030,131 @@ function expand(value, lookup) {
13569
16030
  }
13570
16031
  );
13571
16032
  }
13572
- function targetMembers(ref, settings, options = {}) {
16033
+ var preparedSourcePhases = /* @__PURE__ */ new Map();
16034
+ function targetMembers(ref, settings, options, settingKeys, projectInputs) {
13573
16035
  const { project, target, id: targetId } = ref;
13574
16036
  const targetName = str(target.name) ?? targetId;
13575
16037
  const sources = /* @__PURE__ */ new Set();
13576
16038
  const allSources = /* @__PURE__ */ new Set();
13577
16039
  const resources = /* @__PURE__ */ new Set();
13578
16040
  const scriptForOutput = /* @__PURE__ */ new Map();
13579
- const noteScriptOutput = (raw, script) => {
13580
- const expanded = expand(raw, settings);
13581
- if (!expanded.endsWith(".swift")) return;
13582
- const absolute = import_node_path13.default.isAbsolute(expanded) ? import_node_path13.default.normalize(expanded) : import_node_path13.default.resolve(project.projectDir, expanded);
13583
- if (!scriptForOutput.has(absolute)) scriptForOutput.set(absolute, script);
13584
- };
13585
16041
  for (const phaseId of list(target.buildPhases)) {
13586
16042
  const phase = project.object(phaseId);
13587
16043
  if (phase?.isa !== "PBXShellScriptBuildPhase") continue;
13588
16044
  const script = str(phase.name) ?? phaseId;
13589
- for (const raw of list(phase.outputPaths)) noteScriptOutput(raw, script);
13590
- for (const listPath of list(phase.outputFileListPaths)) {
13591
- const expandedList = expand(listPath, settings);
13592
- const absoluteList = import_node_path13.default.isAbsolute(expandedList) ? expandedList : import_node_path13.default.resolve(project.projectDir, expandedList);
13593
- if (!import_node_fs13.default.existsSync(absoluteList)) continue;
13594
- for (const line of import_node_fs13.default.readFileSync(absoluteList, "utf8").split("\n")) {
13595
- const trimmed = line.trim();
13596
- if (trimmed === "" || trimmed.startsWith("#")) continue;
13597
- noteScriptOutput(trimmed, script);
16045
+ const absolute = (raw) => import_node_path13.default.resolve(project.projectDir, expand(raw, settings));
16046
+ const inputs = list(phase.inputPaths).map(absolute);
16047
+ const outputs = list(phase.outputPaths).map(absolute);
16048
+ const fileLists = /* @__PURE__ */ new Map();
16049
+ for (const kind of ["INPUT", "OUTPUT"]) {
16050
+ const lists = list(
16051
+ kind === "INPUT" ? phase.inputFileListPaths : phase.outputFileListPaths
16052
+ ).map((raw) => {
16053
+ const file = absolute(raw);
16054
+ if (!import_node_fs13.default.existsSync(file)) {
16055
+ return { file, entries: [] };
16056
+ }
16057
+ const entries = import_node_fs13.default.readFileSync(file, "utf8").split(/\r?\n/).map((line) => line.trim()).filter((line) => line !== "" && !line.startsWith("#")).map(absolute);
16058
+ return { file, entries };
16059
+ });
16060
+ fileLists.set(kind, lists);
16061
+ }
16062
+ const allOutputs = [
16063
+ ...outputs,
16064
+ ...fileLists.get("OUTPUT").flatMap((item) => item.entries)
16065
+ ];
16066
+ for (const output of allOutputs)
16067
+ if (output.endsWith(".swift") && !scriptForOutput.has(output))
16068
+ scriptForOutput.set(output, script);
16069
+ const inputFiles = [
16070
+ ...inputs,
16071
+ ...fileLists.get("INPUT").flatMap((item) => [item.file, ...item.entries]),
16072
+ ...fileLists.get("OUTPUT").map((item) => item.file)
16073
+ ];
16074
+ if (allOutputs.some((file) => file.endsWith(".swift"))) {
16075
+ for (const file of inputFiles) if (import_node_fs13.default.existsSync(file)) projectInputs.add(file);
16076
+ }
16077
+ if (options.prepareGeneratedSources && options.requireSources !== false && allOutputs.some((file) => file.endsWith(".swift"))) {
16078
+ const phaseDir = import_node_path13.default.join(settings("TARGET_TEMP_DIR"), `Script-${phaseId}`);
16079
+ for (const lists of fileLists.values())
16080
+ for (const { file } of lists)
16081
+ if (!import_node_fs13.default.existsSync(file))
16082
+ throw new Error(
16083
+ `${targetName}: Run Script "${script}" missing file list ${file}`
16084
+ );
16085
+ const env = {
16086
+ ...process.env,
16087
+ ...Object.fromEntries(
16088
+ [...settingKeys].filter((key2) => /^[A-Za-z_][A-Za-z0-9_]*$/.test(key2)).map((key2) => [key2, settings(key2)])
16089
+ )
16090
+ };
16091
+ const declared = { INPUT: inputs, OUTPUT: outputs };
16092
+ for (const kind of ["INPUT", "OUTPUT"]) {
16093
+ env[`SCRIPT_${kind}_FILE_COUNT`] = String(declared[kind].length);
16094
+ declared[kind].forEach((file, index) => {
16095
+ env[`SCRIPT_${kind}_FILE_${index}`] = file;
16096
+ });
16097
+ const lists = fileLists.get(kind);
16098
+ env[`SCRIPT_${kind}_FILE_LIST_COUNT`] = String(lists.length);
16099
+ lists.forEach((_item, index) => {
16100
+ env[`SCRIPT_${kind}_FILE_LIST_${index}`] = import_node_path13.default.join(
16101
+ phaseDir,
16102
+ `${kind}-${index}.xcfilelist`
16103
+ );
16104
+ });
16105
+ }
16106
+ const signature = (0, import_node_crypto6.createHash)("sha256").update(
16107
+ JSON.stringify([phase, [...settingKeys].map((key2) => [key2, settings(key2)])])
16108
+ );
16109
+ for (const file of inputFiles) {
16110
+ signature.update(file);
16111
+ if (import_node_fs13.default.existsSync(file)) {
16112
+ const stat = import_node_fs13.default.statSync(file);
16113
+ signature.update(`${stat.mtimeMs}:${stat.ctimeMs}:${stat.size}`);
16114
+ } else signature.update("missing");
16115
+ }
16116
+ const stamp = signature.digest("hex");
16117
+ const key = `${project.projectFile}:${targetId}:${phaseId}:${settings("CONFIGURATION")}`;
16118
+ if (preparedSourcePhases.get(key) === stamp && allOutputs.every((file) => import_node_fs13.default.existsSync(file)))
16119
+ continue;
16120
+ import_node_fs13.default.mkdirSync(phaseDir, { recursive: true });
16121
+ import_node_fs13.default.mkdirSync(settings("BUILT_PRODUCTS_DIR"), { recursive: true });
16122
+ import_node_fs13.default.mkdirSync(settings("DERIVED_FILE_DIR"), { recursive: true });
16123
+ for (const [kind, lists] of fileLists)
16124
+ lists.forEach((item, index) => {
16125
+ import_node_fs13.default.writeFileSync(
16126
+ env[`SCRIPT_${kind}_FILE_LIST_${index}`],
16127
+ `${item.entries.join("\n")}
16128
+ `
16129
+ );
16130
+ });
16131
+ try {
16132
+ (0, import_node_child_process5.execFileSync)(
16133
+ str(phase.shellPath) ?? "/bin/sh",
16134
+ ["-c", str(phase.shellScript) ?? ""],
16135
+ {
16136
+ cwd: project.projectDir,
16137
+ env,
16138
+ stdio: ["ignore", "pipe", "pipe"],
16139
+ timeout: 12e4
16140
+ }
16141
+ );
16142
+ } catch (error) {
16143
+ const output = error instanceof Error ? `${error.message}
16144
+ ${"stdout" in error ? String(error.stdout) : ""}${"stderr" in error ? String(error.stderr) : ""}` : String(error);
16145
+ throw new Error(
16146
+ `${targetName}: Run Script "${script}" failed preparing generated Swift sources:
16147
+ ${output}`
16148
+ );
13598
16149
  }
16150
+ const missing = allOutputs.filter(
16151
+ (file) => file.endsWith(".swift") && !import_node_fs13.default.existsSync(file)
16152
+ );
16153
+ if (missing.length > 0)
16154
+ throw new Error(
16155
+ `${targetName}: Run Script "${script}" did not produce ${missing.join(", ")}`
16156
+ );
16157
+ preparedSourcePhases.set(key, stamp);
13599
16158
  }
13600
16159
  }
13601
16160
  visitXcodeTargetMembers(
@@ -13785,22 +16344,95 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
13785
16344
  SRCROOT: ref.project.projectDir,
13786
16345
  SOURCE_ROOT: ref.project.projectDir,
13787
16346
  PROJECT_DIR: ref.project.projectDir,
16347
+ SYMROOT: import_node_path13.default.join(ref.project.projectDir, ".build/peach-xcode/Build/Products"),
16348
+ BUILD_DIR: "$(SYMROOT)",
16349
+ OBJROOT: import_node_path13.default.join(
16350
+ ref.project.projectDir,
16351
+ ".build/peach-xcode/Build/Intermediates.noindex"
16352
+ ),
16353
+ CONFIGURATION_BUILD_DIR: "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)",
16354
+ BUILT_PRODUCTS_DIR: "$(CONFIGURATION_BUILD_DIR)",
16355
+ TARGET_BUILD_DIR: "$(CONFIGURATION_BUILD_DIR)",
16356
+ PROJECT_TEMP_DIR: "$(OBJROOT)/$(PROJECT_NAME).build",
16357
+ CONFIGURATION_TEMP_DIR: "$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)",
16358
+ TARGET_TEMP_DIR: "$(CONFIGURATION_TEMP_DIR)/$(TARGET_NAME).build",
16359
+ DERIVED_FILE_DIR: "$(TARGET_TEMP_DIR)/DerivedSources",
16360
+ DERIVED_FILES_DIR: "$(DERIVED_FILE_DIR)",
16361
+ PLATFORM_NAME: "iphonesimulator",
16362
+ EFFECTIVE_PLATFORM_NAME: "-iphonesimulator",
16363
+ CURRENT_ARCH: "arm64",
16364
+ ARCHS: "arm64",
16365
+ ACTION: "build",
13788
16366
  DEVELOPMENT_LANGUAGE: str(ref.project.project.developmentRegion) ?? "en"
13789
16367
  },
13790
16368
  options
13791
16369
  );
13792
16370
  for (const file of read) xcconfigs.add(file);
13793
16371
  const swiftVersion = Number.parseFloat(settings2("SWIFT_VERSION") || "5");
16372
+ const members = targetMembers(ref, settings2, options, keys, xcconfigs);
16373
+ const implementations = members.allSources.filter(
16374
+ (file) => /\.(c|cc|cpp|cxx|m|mm)$/.test(file)
16375
+ );
16376
+ const absolute = (file) => import_node_path13.default.resolve(ref.project.projectDir, file);
16377
+ const fileFlags = {};
16378
+ for (const phaseId of list(ref.target.buildPhases)) {
16379
+ const phase = ref.project.object(phaseId);
16380
+ if (phase?.isa !== "PBXSourcesBuildPhase") continue;
16381
+ for (const id of list(phase.files)) {
16382
+ const file = ref.project.object(id);
16383
+ const resolved = ref.project.resolvePath(str(file?.fileRef) ?? "");
16384
+ if (resolved && implementations.includes(resolved))
16385
+ fileFlags[resolved] = settingList(
16386
+ expand(
16387
+ str(isDict(file?.settings) ? file.settings.COMPILER_FLAGS : void 0) ?? "",
16388
+ settings2
16389
+ )
16390
+ );
16391
+ }
16392
+ }
13794
16393
  return {
13795
16394
  settings: settings2,
13796
16395
  keys,
13797
16396
  module: {
13798
16397
  name: name2,
13799
16398
  moduleName: applyOperator(settings2("PRODUCT_MODULE_NAME"), "c99extidentifier"),
13800
- ...targetMembers(ref, settings2, options),
16399
+ ...members,
13801
16400
  languageMode: swiftVersion >= 6 ? 6 : 5,
13802
16401
  mainActorIsolation: settings2("SWIFT_DEFAULT_ACTOR_ISOLATION") === "MainActor",
13803
- defines: compilationConditions(settings2)
16402
+ defines: compilationConditions(settings2),
16403
+ iosDeploymentTarget: settings2("IPHONEOS_DEPLOYMENT_TARGET") || null,
16404
+ ...implementations.some((file) => /\.mm?$/.test(file)) ? {
16405
+ objc: {
16406
+ headers: Object.keys(ref.project.objects).flatMap((id) => {
16407
+ const file = ref.project.resolvePath(id);
16408
+ return file && /\.(h|hh|hpp|hxx|pch)$/.test(file) && import_node_fs13.default.existsSync(file) ? [file] : [];
16409
+ }),
16410
+ prefixHeader: settings2("GCC_PREFIX_HEADER") ? absolute(settings2("GCC_PREFIX_HEADER")) : null,
16411
+ bridgingHeader: settings2("SWIFT_OBJC_BRIDGING_HEADER") ? absolute(settings2("SWIFT_OBJC_BRIDGING_HEADER")) : null,
16412
+ headerSearchPaths: [
16413
+ ...settingList(settings2("HEADER_SEARCH_PATHS")),
16414
+ ...settingList(settings2("USER_HEADER_SEARCH_PATHS"))
16415
+ ].map(absolute),
16416
+ frameworkSearchPaths: settingList(settings2("FRAMEWORK_SEARCH_PATHS")).map(
16417
+ absolute
16418
+ ),
16419
+ flags: [
16420
+ ...settings2("CLANG_ENABLE_OBJC_ARC") === "YES" ? ["-fobjc-arc"] : [],
16421
+ ...settings2("CLANG_ENABLE_OBJC_WEAK") === "YES" ? ["-fobjc-weak"] : [],
16422
+ ...settings2("CLANG_ENABLE_MODULES") === "YES" ? ["-fmodules"] : [],
16423
+ ...settings2("GCC_C_LANGUAGE_STANDARD") ? [`-std=${settings2("GCC_C_LANGUAGE_STANDARD")}`] : [],
16424
+ ...settingList(settings2("GCC_PREPROCESSOR_DEFINITIONS")).map(
16425
+ (value) => `-D${value}`
16426
+ ),
16427
+ ...settingList(settings2("OTHER_CFLAGS"))
16428
+ ],
16429
+ cxxFlags: [
16430
+ ...settings2("CLANG_CXX_LANGUAGE_STANDARD") ? [`-std=${settings2("CLANG_CXX_LANGUAGE_STANDARD")}`] : [],
16431
+ ...settingList(settings2("OTHER_CPLUSPLUSFLAGS"))
16432
+ ],
16433
+ fileFlags
16434
+ }
16435
+ } : {}
13804
16436
  }
13805
16437
  };
13806
16438
  };
@@ -13849,6 +16481,23 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
13849
16481
  ...projects.flatMap(
13850
16482
  (project) => Object.entries(project.objects).flatMap(([id, entry]) => {
13851
16483
  if (!isDict(entry)) return [];
16484
+ if (entry.isa === "PBXFileSystemSynchronizedRootGroup") {
16485
+ const folder = project.resolvePath(id);
16486
+ const pending = folder ? [folder] : [];
16487
+ const packages = [];
16488
+ while (pending.length > 0) {
16489
+ const dir = pending.pop();
16490
+ if (import_node_fs13.default.existsSync(import_node_path13.default.join(dir, "Package.swift"))) {
16491
+ packages.push(dir);
16492
+ continue;
16493
+ }
16494
+ if (!isDirectory(dir)) continue;
16495
+ for (const child of import_node_fs13.default.readdirSync(dir, { withFileTypes: true }))
16496
+ if (child.isDirectory() && !child.name.startsWith("."))
16497
+ pending.push(import_node_path13.default.join(dir, child.name));
16498
+ }
16499
+ return packages;
16500
+ }
13852
16501
  const candidate = entry.isa === "XCLocalSwiftPackageReference" ? import_node_path13.default.resolve(project.projectDir, str(entry.relativePath) ?? "") : entry.isa === "PBXFileReference" ? project.resolvePath(id) : null;
13853
16502
  return candidate && import_node_fs13.default.existsSync(import_node_path13.default.join(candidate, "Package.swift")) ? [candidate] : [];
13854
16503
  })
@@ -13903,6 +16552,7 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
13903
16552
  "swiftpm",
13904
16553
  "Package.resolved"
13905
16554
  );
16555
+ const packageResolved = import_node_fs13.default.existsSync(resolvedFile) ? [import_node_fs13.default.realpathSync(resolvedFile)] : [...new Set(localPackageDirs.map((dir) => import_node_path13.default.join(dir, "Package.resolved")))].filter((file) => import_node_fs13.default.existsSync(file)).map((file) => import_node_fs13.default.realpathSync(file)).sort();
13906
16556
  const used = order.map((ref) => ref.project);
13907
16557
  return {
13908
16558
  ...module2,
@@ -13928,7 +16578,7 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
13928
16578
  ...new Set(localPackageDirs.map((dir) => import_node_fs13.default.realpathSync(dir)))
13929
16579
  ].sort(),
13930
16580
  binaryFrameworks: [...binaryFrameworks].map(([name2, file]) => ({ name: name2, path: file })).sort((left, right) => left.name.localeCompare(right.name)),
13931
- packageResolved: import_node_fs13.default.existsSync(resolvedFile) ? resolvedFile : null,
16581
+ packageResolved,
13932
16582
  appTargets: appTargetNames,
13933
16583
  configuration,
13934
16584
  settings
@@ -13936,15 +16586,12 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
13936
16586
  }
13937
16587
 
13938
16588
  // src/native-app-identity-project.ts
13939
- function isRecord4(value) {
13940
- return typeof value === "object" && value !== null && !Array.isArray(value);
13941
- }
13942
16589
  function nonEmptyString2(value) {
13943
16590
  return typeof value === "string" && value.length > 0 ? value : void 0;
13944
16591
  }
13945
16592
  function readNativeAppIdentityFromXcodeTarget(app, parseInfoPlist = parsePlistSource) {
13946
16593
  const dictionary = parseInfoPlist(app.infoPlist);
13947
- if (!isRecord4(dictionary)) throw new Error("native app Info.plist is not a dictionary");
16594
+ if (!isRecord(dictionary)) throw new Error("native app Info.plist is not a dictionary");
13948
16595
  const settings = app.settings;
13949
16596
  const bundleIdentifier = nonEmptyString2(dictionary.CFBundleIdentifier) ?? nonEmptyString2(settings?.("PRODUCT_BUNDLE_IDENTIFIER"));
13950
16597
  if (!bundleIdentifier) throw new Error("native app has no bundle identifier");
@@ -13961,8 +16608,8 @@ function readNativeAppIdentityFromXcodeTarget(app, parseInfoPlist = parsePlistSo
13961
16608
  const designRequiresCompatibility = dictionary.UIDesignRequiresCompatibility === true;
13962
16609
  const alternateIconNames = /* @__PURE__ */ new Set();
13963
16610
  const icons = dictionary.CFBundleIcons;
13964
- const alternates = isRecord4(icons) ? icons.CFBundleAlternateIcons : void 0;
13965
- if (isRecord4(alternates)) {
16611
+ const alternates = isRecord(icons) ? icons.CFBundleAlternateIcons : void 0;
16612
+ if (isRecord(alternates)) {
13966
16613
  for (const name2 of Object.keys(alternates)) {
13967
16614
  if (name2) alternateIconNames.add(name2);
13968
16615
  }
@@ -14194,7 +16841,7 @@ function readIosNativeAppIdentity(projectRoot, parseInfoPlist, iosTarget) {
14194
16841
  const installedManifest = JSON.parse(
14195
16842
  import_node_fs14.default.readFileSync(reanimatedManifestPath, "utf8")
14196
16843
  );
14197
- const installedVersion = isRecord4(installedManifest) ? nonEmptyString2(installedManifest.version) : void 0;
16844
+ const installedVersion = isRecord(installedManifest) ? nonEmptyString2(installedManifest.version) : void 0;
14198
16845
  if (!installedVersion) throw new Error("Reanimated package version is malformed");
14199
16846
  if (Number.parseInt(installedVersion, 10) < 4) return identity;
14200
16847
  const defaults = JSON.parse(
@@ -14206,11 +16853,11 @@ function readIosNativeAppIdentity(projectRoot, parseInfoPlist, iosTarget) {
14206
16853
  "utf8"
14207
16854
  )
14208
16855
  );
14209
- if (!isRecord4(defaults)) throw new Error("Reanimated static flags are malformed");
16856
+ if (!isRecord(defaults)) throw new Error("Reanimated static flags are malformed");
14210
16857
  const manifest = JSON.parse(import_node_fs14.default.readFileSync(projectManifestPath, "utf8"));
14211
- const reanimated = isRecord4(manifest) ? manifest.reanimated : void 0;
14212
- const overrides = isRecord4(reanimated) ? reanimated.staticFeatureFlags : void 0;
14213
- if (overrides !== void 0 && !isRecord4(overrides)) {
16858
+ const reanimated = isRecord(manifest) ? manifest.reanimated : void 0;
16859
+ const overrides = isRecord(reanimated) ? reanimated.staticFeatureFlags : void 0;
16860
+ if (overrides !== void 0 && !isRecord(overrides)) {
14214
16861
  throw new Error("Reanimated static flag overrides are malformed");
14215
16862
  }
14216
16863
  const flags = {};
@@ -14231,7 +16878,7 @@ function readIosNativeAppIdentity(projectRoot, parseInfoPlist, iosTarget) {
14231
16878
  }
14232
16879
 
14233
16880
  // src/native-firebase-config.ts
14234
- var import_node_child_process5 = require("node:child_process");
16881
+ var import_node_child_process6 = require("node:child_process");
14235
16882
  var import_node_fs15 = __toESM(require("node:fs"), 1);
14236
16883
  var import_node_os3 = __toESM(require("node:os"), 1);
14237
16884
  var import_node_path15 = __toESM(require("node:path"), 1);
@@ -14276,7 +16923,7 @@ function readExpoConfig(projectRoot) {
14276
16923
  const directory = resultDirectory();
14277
16924
  const resultPath = import_node_path15.default.join(directory, "config.json");
14278
16925
  try {
14279
- const child = (0, import_node_child_process5.spawnSync)("node", expoConfigArgs(projectRoot, resultPath), {
16926
+ const child = (0, import_node_child_process6.spawnSync)("node", expoConfigArgs(projectRoot, resultPath), {
14280
16927
  cwd: projectRoot,
14281
16928
  encoding: "utf8",
14282
16929
  stdio: ["ignore", "ignore", "pipe"],
@@ -14774,7 +17421,7 @@ function withPeach(config, options = {}) {
14774
17421
  const configuredBundleUrl = "/index.bundle?platform=ios&dev=true&hot=true&minify=false";
14775
17422
  const cfgServer = config.server;
14776
17423
  const port = resolveMetroPort(cfgServer);
14777
- const metroServerId = (0, import_node_crypto6.randomUUID)();
17424
+ const metroServerId = (0, import_node_crypto7.randomUUID)();
14778
17425
  const bundleUrl = tagRnxBundleForPlugin(
14779
17426
  configuredBundleUrl,
14780
17427
  `http://localhost:${port}`,