peachsim 0.1.2179 → 0.1.2182

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 (104) hide show
  1. package/cli/commands/package.ts +7 -2
  2. package/cli/commands/shell-url.ts +28 -22
  3. package/dist-lib/agent-daemon-client.cjs +1 -1
  4. package/dist-lib/agent-events.cjs +1 -1
  5. package/dist-lib/attached-projects.cjs +1 -1
  6. package/dist-lib/auth/shared-session.cjs +1 -1
  7. package/dist-lib/backend-origin.cjs +1 -1
  8. package/dist-lib/beta.cjs +1 -1
  9. package/dist-lib/beta.mjs +1 -1
  10. package/dist-lib/bridge-constants.cjs +1 -1
  11. package/dist-lib/bridge-contract-input.cjs +1 -1
  12. package/dist-lib/bridge-contract-input.mjs +1 -1
  13. package/dist-lib/bridge-contract.cjs +1 -1
  14. package/dist-lib/bridge-contract.mjs +1 -1
  15. package/dist-lib/bundle-channel.cjs +225 -85
  16. package/dist-lib/capture-contract.cjs +1 -1
  17. package/dist-lib/capture-contract.mjs +1 -1
  18. package/dist-lib/cloud-contract.cjs +1 -1
  19. package/dist-lib/cloud-contract.mjs +1 -1
  20. package/dist-lib/cloud-test-args.cjs +1 -1
  21. package/dist-lib/cloud-test-args.mjs +1 -1
  22. package/dist-lib/cloud.cjs +1 -1
  23. package/dist-lib/cloud.mjs +1 -1
  24. package/dist-lib/config.cjs +1 -1
  25. package/dist-lib/config.mjs +1 -1
  26. package/dist-lib/detox/index.cjs +2 -2
  27. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  28. package/dist-lib/expo-swift-bundle.cjs +140 -48
  29. package/dist-lib/expo-swift-metadata.cjs +1 -1
  30. package/dist-lib/expo-swift-metadata.mjs +1 -1
  31. package/dist-lib/home-paths.cjs +1 -1
  32. package/dist-lib/host/bridge-host.cjs +201 -82
  33. package/dist-lib/host/fetch-proxy-handler.cjs +4 -4
  34. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  35. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  36. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  37. package/dist-lib/host/websocket-proxy.cjs +1 -1
  38. package/dist-lib/index.cjs +4 -4
  39. package/dist-lib/jump-to-source-babel.cjs +1 -1
  40. package/dist-lib/jump-to-source-native.cjs +1 -1
  41. package/dist-lib/kotlin-host.cjs +11 -3
  42. package/dist-lib/menu.cjs +1 -1
  43. package/dist-lib/menu.mjs +1 -1
  44. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  45. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  46. package/dist-lib/metro-production-bundle.cjs +1 -1
  47. package/dist-lib/metro-production-bundle.mjs +1 -1
  48. package/dist-lib/metro.cjs +4 -4
  49. package/dist-lib/native-app-identity-project.cjs +2 -2
  50. package/dist-lib/native-app-identity-project.mjs +2 -2
  51. package/dist-lib/native-app-identity.cjs +1 -1
  52. package/dist-lib/native-app-identity.mjs +1 -1
  53. package/dist-lib/native-firebase-metadata.cjs +1 -1
  54. package/dist-lib/native-firebase-metadata.mjs +1 -1
  55. package/dist-lib/pdfium-raster.cjs +1 -1
  56. package/dist-lib/pdfium-raster.mjs +1 -1
  57. package/dist-lib/plist.cjs +1 -1
  58. package/dist-lib/plist.mjs +1 -1
  59. package/dist-lib/profiles.cjs +1 -1
  60. package/dist-lib/public-brand.cjs +1 -1
  61. package/dist-lib/public-origins-lib-esm.json +24 -24
  62. package/dist-lib/public-origins-lib.json +53 -53
  63. package/dist-lib/react-native-host-modules.cjs +1 -1
  64. package/dist-lib/react-native-host-modules.mjs +1 -1
  65. package/dist-lib/reap-browser.cjs +1 -1
  66. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  67. package/dist-lib/sdk.cjs +1 -1
  68. package/dist-lib/sdk.mjs +1 -1
  69. package/dist-lib/skills.cjs +239 -176
  70. package/dist-lib/swift-compile.cjs +85 -16
  71. package/dist-lib/swift-compile.mjs +85 -16
  72. package/dist-lib/swift-package.cjs +1 -1
  73. package/dist-lib/swift-package.mjs +1 -1
  74. package/dist-lib/swift-submit.cjs +2 -2
  75. package/dist-lib/swift-submit.mjs +2 -2
  76. package/dist-lib/swift-toolchain.cjs +1 -1
  77. package/dist-lib/swift.cjs +1 -1
  78. package/dist-lib/vite-swift.cjs +87 -18
  79. package/dist-lib/vite.cjs +4 -4
  80. package/dist-lib/worklet-executable.cjs +1 -1
  81. package/dist-lib/worklet-executable.mjs +1 -1
  82. package/dist-types/packages/peach-engine/src/cli-companion.d.ts +1 -0
  83. package/dist-types/packages/peach-engine/src/ios/frame-art.d.ts +41 -0
  84. package/dist-types/packages/peach-engine/src/ios/frame-paint.d.ts +43 -0
  85. package/dist-types/packages/peach-engine/src/ios/frame-svg.d.ts +4 -0
  86. package/dist-types/packages/peach-engine/src/render-worker/map-command-channel.d.ts +14 -0
  87. package/kotlin/sdk.tar.gz +0 -0
  88. package/package.json +1 -1
  89. package/runtime-companion.json +1 -1
  90. package/sdk/ios/System/Library/Frameworks/UIKit.framework/Headers/UIScrollView.h +8 -25
  91. package/sdk/ios/System/Library/Frameworks/UIKitTypes.framework/Headers/UIKitTypes.h +26 -0
  92. package/src/expo-native-workspace.ts +17 -20
  93. package/src/expo-swift-bundle.ts +6 -1
  94. package/src/expo-swift-host.ts +35 -6
  95. package/src/expo-widgets-bundle.ts +12 -8
  96. package/src/expoSwiftContract.ts +3 -0
  97. package/src/kotlin-host.ts +10 -2
  98. package/src/native-bundles.ts +30 -10
  99. package/src/one-sdk/source.ts +10 -4
  100. package/src/one-sdk-bundle.ts +57 -24
  101. package/src/screenshots/frame-compose.ts +14 -109
  102. package/src/swift-compile.ts +105 -13
  103. package/src/swift-submit.ts +2 -1
  104. package/src/wasm-optimize.ts +13 -4
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2179 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2182 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -14977,6 +14977,13 @@ var BINARYEN_RELEASES = /* @__PURE__ */ new Map([
14977
14977
  ]
14978
14978
  ]);
14979
14979
  async function runWasmOpt(file, output2, skipPasses, binary) {
14980
+ const admittedCores = windowAdmission()?.cores ?? Number(process.env.TM_EXEC_CPU_CORES);
14981
+ const requestedCores = Number(process.env.BINARYEN_CORES);
14982
+ const environment = { ...process.env, WASM_OPT_PATH: binary };
14983
+ if (Number.isInteger(admittedCores) && admittedCores > 0)
14984
+ environment.BINARYEN_CORES = String(
14985
+ Number.isInteger(requestedCores) && requestedCores > 0 ? Math.min(admittedCores, requestedCores) : admittedCores
14986
+ );
14980
14987
  const result = await (0, import_wasm_opt.wasmOpt)(
14981
14988
  [
14982
14989
  "-Oz",
@@ -14986,7 +14993,7 @@ async function runWasmOpt(file, output2, skipPasses, binary) {
14986
14993
  "-o",
14987
14994
  output2
14988
14995
  ],
14989
- { env: { ...process.env, WASM_OPT_PATH: binary } }
14996
+ { env: environment }
14990
14997
  );
14991
14998
  if (result.status !== 0)
14992
14999
  throw new Error(`wasm-opt exited ${result.status}: ${result.stderr}`);
@@ -17039,7 +17046,7 @@ var darwinRecordsRegion = (quoted) => quoted.length ? ["-Wl,--start-lib", ...quo
17039
17046
  var REACTOR_FLAG = '"-Xclang-linker", "-mexec-model=reactor",\n';
17040
17047
  var MULTI_MANIFEST_VERSION = 68;
17041
17048
  var SWIFT_HEADER_PRODUCTS_TARGET = "PeachHeaderProducts";
17042
- var compilerSourceDigest = true ? "49b49a3b4f72b519cda4a1310d169f7d233d4f0249b0bcff228d2c316fafd9e1" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
17049
+ var compilerSourceDigest = true ? "73960368f0b83cf042511655d857d5f64204fa539e2c984423a12c08657b068e" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
17043
17050
  function swiftArtifactHash(input, release, moduleRoot) {
17044
17051
  const hash = (0, import_node_crypto13.createHash)("sha256");
17045
17052
  hash.update(`swift-compile
@@ -17165,6 +17172,20 @@ function emitSwiftPackageManifest(args) {
17165
17172
  const prebuilt = args.prebuilt;
17166
17173
  const linkedObjects = Boolean(distribution || prebuilt);
17167
17174
  const cxxFlagsFor = (flags) => args.deferDarwinOverlay ? withoutWasmOverlayIsystem(flags) : flags;
17175
+ const packageModules = new Set(
17176
+ targets.filter(({ name: name3 }) => !args.sourceSwiftTargets?.has(name3)).map(({ name: name3 }) => swiftTargetModuleName(name3))
17177
+ );
17178
+ const mapsPackageModule = (flag) => {
17179
+ if (!flag.startsWith("-fmodule-map-file=")) return false;
17180
+ const file = flag.slice("-fmodule-map-file=".length).replaceAll(SWIFT_NATIVE_INPUT_ROOT, args.root);
17181
+ if (!file.includes("/Pods/Headers/")) return false;
17182
+ const map = args.files.get(file) ?? ((0, import_node_fs27.existsSync)(file) ? (0, import_node_fs27.readFileSync)(file) : void 0);
17183
+ const name3 = map === void 0 ? void 0 : moduleMapName(map.toString());
17184
+ return name3 !== void 0 && packageModules.has(name3);
17185
+ };
17186
+ const withoutPackageModuleMaps = (flags) => flags.filter((flag) => !mapsPackageModule(flag));
17187
+ const targetCFlags = (flags) => cFlagArray(withoutPackageModuleMaps(flags));
17188
+ const targetCxxFlags = (flags) => cxxFlagArray(withoutPackageModuleMaps(flags));
17168
17189
  const reachedFrameworks = /* @__PURE__ */ new Set();
17169
17190
  const reach = (name3) => {
17170
17191
  if (reachedFrameworks.has(name3) || targets.some((target) => swiftTargetModuleName(target.name) === name3))
@@ -17244,7 +17265,9 @@ function emitSwiftPackageManifest(args) {
17244
17265
  const macroSettings = (values) => (values ?? []).map((value) => ` ${clangMacroSetting(value)},`).join("");
17245
17266
  const flagArray = (literal2) => `peachCompilerArguments(${JSON.stringify(literal2.replace(/,\s*]$/, "]"))})`;
17246
17267
  const swiftFlagArray = (literal2) => {
17247
- const flags = JSON.parse(literal2.replace(/,\s*]$/, "]"));
17268
+ const flags = JSON.parse(literal2.replace(/,\s*]$/, "]")).filter(
17269
+ (flag, index, all) => !mapsPackageModule(flag) && !(flag === "-Xcc" && mapsPackageModule(all[index + 1] ?? ""))
17270
+ );
17248
17271
  const content = flags.map((flag) => JSON.stringify(flag)).join("\n") + "\n";
17249
17272
  const digest = (0, import_node_crypto13.createHash)("sha256").update(content).digest("hex");
17250
17273
  const file = import_node_path27.default.join(args.root, ".peach-swift-arguments", `${digest}.rsp`);
@@ -17404,18 +17427,18 @@ function emitSwiftPackageManifest(args) {
17404
17427
  "c"
17405
17428
  ).map((entry) => ` ${entry},`).join(
17406
17429
  ""
17407
- )} .unsafeFlags(${flagArray(cFlagArray([...nativeFlags, ...native.clang.flags]))})]`,
17430
+ )} .unsafeFlags(${flagArray(targetCFlags([...nativeFlags, ...native.clang.flags]))})]`,
17408
17431
  ...nativeCxx ? [
17409
17432
  `cxxSettings: [${cxxDefines}${clangSettingEntries(
17410
17433
  frameworkSearchFlags(target, "cxx"),
17411
17434
  "cxx"
17412
17435
  ).map((entry) => ` ${entry},`).join(
17413
17436
  ""
17414
- )} .unsafeFlags(${flagArray(cxxFlagArray([...cxxFlagsFor(nativeFlags), ...native.clang.cxxFlags]))})]`
17437
+ )} .unsafeFlags(${flagArray(targetCxxFlags([...cxxFlagsFor(nativeFlags), ...native.clang.cxxFlags]))})]`
17415
17438
  ] : []
17416
17439
  ].join(", ") : [
17417
- `cSettings: [${cDefines}${declaredClangSettings(target, "c")} .unsafeFlags(${flagArray(cFlagArray([...nativeFlags, ...native?.flags ?? []]))})]`,
17418
- `cxxSettings: [${cxxDefines}${declaredClangSettings(target, "cxx")} .unsafeFlags(${flagArray(cxxFlagArray([...cxxFlagsFor(nativeFlags), ...native?.cxxFlags ?? []]))})]`
17440
+ `cSettings: [${cDefines}${declaredClangSettings(target, "c")} .unsafeFlags(${flagArray(targetCFlags([...nativeFlags, ...native?.flags ?? []]))})]`,
17441
+ `cxxSettings: [${cxxDefines}${declaredClangSettings(target, "cxx")} .unsafeFlags(${flagArray(targetCxxFlags([...cxxFlagsFor(nativeFlags), ...native?.cxxFlags ?? []]))})]`
17419
17442
  ].join(", ");
17420
17443
  const exclusions = native?.clang ? [] : [
17421
17444
  ...native ? native.exclude ?? native.lateSources : [],
@@ -17484,9 +17507,9 @@ function emitSwiftPackageManifest(args) {
17484
17507
  ` path: ${JSON.stringify(group.path)},`,
17485
17508
  ` sources: ${JSON.stringify(group.sources)},`,
17486
17509
  ` publicHeadersPath: ${JSON.stringify(native.groups ? "include" : "PeachSwiftImplementation")},`,
17487
- ` cSettings: [${macroSettings(owner?.cDefines)}${declaredClangSettings(owner, "c")} .unsafeFlags(${flagArray(cFlagArray([...nativeFlags, "-I", native.includeDirectory, ...args.headerDirectory ? ["-I", args.headerDirectory] : [], ...group.flags]))})],`,
17510
+ ` cSettings: [${macroSettings(owner?.cDefines)}${declaredClangSettings(owner, "c")} .unsafeFlags(${flagArray(targetCFlags([...nativeFlags, "-I", native.includeDirectory, ...args.headerDirectory ? ["-I", args.headerDirectory] : [], ...group.flags]))})],`,
17488
17511
  ...group.sources.some((source) => /\.(?:cc|cpp|cxx|mm)$/.test(source)) ? [
17489
- ` cxxSettings: [${macroSettings(owner?.cxxDefines)}${declaredClangSettings(owner, "cxx")} .unsafeFlags(${flagArray(cxxFlagArray([...cxxFlagsFor(nativeFlags), "-I", native.includeDirectory, ...group.cxxFlags]))})]),`
17512
+ ` cxxSettings: [${macroSettings(owner?.cxxDefines)}${declaredClangSettings(owner, "cxx")} .unsafeFlags(${flagArray(targetCxxFlags([...cxxFlagsFor(nativeFlags), "-I", native.includeDirectory, ...group.cxxFlags]))})]),`
17490
17513
  ] : [" ),"]
17491
17514
  ]) : [];
17492
17515
  }),
@@ -18990,7 +19013,10 @@ ${swiftProjectFilesProblems(input.projectFiles).join("\n")}`
18990
19013
  const target = bySourcePath.find(
18991
19014
  (candidate) => candidate.path === "." || file.startsWith(`${candidate.path}/`)
18992
19015
  );
18993
- if (target) swiftTargets.add(target.name);
19016
+ const excluded = target?.exclude?.some(
19017
+ (name3) => file === import_node_path27.default.posix.join(target.path, name3)
19018
+ );
19019
+ if (target && !excluded) swiftTargets.add(target.name);
18994
19020
  }
18995
19021
  const importedModules = /* @__PURE__ */ new Set();
18996
19022
  const swiftImportedModules = /* @__PURE__ */ new Set();
@@ -20036,6 +20062,9 @@ module ${moduleName}.Swift {
20036
20062
  frameworkLink,
20037
20063
  [
20038
20064
  ...prebuilt.objects.map(quote),
20065
+ "-Wl,--start-lib",
20066
+ ...prebuilt.lazyObjects.map(quote),
20067
+ "-Wl,--end-lib",
20039
20068
  ...darwinRecordsRegion(prebuilt.providers.map(quote))
20040
20069
  ].join("\n") + "\n"
20041
20070
  );
@@ -20321,7 +20350,7 @@ function readCompiledArtifact(directory, hash) {
20321
20350
  return null;
20322
20351
  const bytes = (0, import_node_fs27.readFileSync)(import_node_path27.default.join(directory, "app.wasm"));
20323
20352
  const gzip2 = (0, import_node_fs27.readFileSync)(import_node_path27.default.join(directory, "icu.gz"));
20324
- if ((0, import_node_crypto13.createHash)("sha256").update(bytes).digest("hex") !== receipt.wasm || (0, import_node_crypto13.createHash)("sha256").update(gzip2).digest("hex") !== receipt.icu || bytes.length < 8 || bytes.readUInt32LE(0) !== 1836278016 || bytes.readUInt32LE(4) !== 1)
20353
+ if ((0, import_node_crypto13.createHash)("sha256").update(bytes).digest("hex") !== receipt.wasm || (0, import_node_crypto13.createHash)("sha256").update(gzip2).digest("hex") !== receipt.icu || bytes.length <= 8 || bytes.readUInt32LE(0) !== 1836278016 || bytes.readUInt32LE(4) !== 1)
20325
20354
  return null;
20326
20355
  return { hash, bytes, icu: { sha256: receipt.icu, gzip: gzip2 } };
20327
20356
  } catch (error) {
@@ -20442,7 +20471,13 @@ function linkedFrameworkTargets(moduleRoot, input) {
20442
20471
  );
20443
20472
  const targets = compileTargets(input);
20444
20473
  const planning = targets.length > 0 ? targets : [{ name: "App", path: "." }];
20445
- const siblings = swiftTargetDependencies(input.files, planning, libraries.keys());
20474
+ const siblings = swiftTargetDependencies(
20475
+ input.files,
20476
+ planning.map(
20477
+ (target) => input.libraries?.[target.name] ? { ...target, exclude: [] } : target
20478
+ ),
20479
+ libraries.keys()
20480
+ );
20446
20481
  const reached = /* @__PURE__ */ new Set();
20447
20482
  const reach = (name3) => {
20448
20483
  if (name3 === "SwiftUI") return;
@@ -20744,9 +20779,31 @@ async function buildFrameworkProducts(scratch2, args) {
20744
20779
  }
20745
20780
  const providers = (0, import_node_fs27.readdirSync)(providerDir).filter((file) => file.endsWith(".o")).sort().map((file) => import_node_path27.default.join(providerDir, file));
20746
20781
  for (const provider of providers) linked.owners.set(provider, "DarwinRecords");
20782
+ const archive = import_node_path27.default.join(scratch2, "lib");
20783
+ (0, import_node_fs27.rmSync)(archive, { recursive: true, force: true });
20784
+ (0, import_node_fs27.mkdirSync)(archive);
20785
+ const archived = /* @__PURE__ */ new Map();
20786
+ for (const object4 of objects) {
20787
+ const target = linked.owners.get(object4);
20788
+ const dir = import_node_path27.default.join(release, `${target}.build`);
20789
+ if (!target || target === "Darwin" || !object4.startsWith(dir + import_node_path27.default.sep)) continue;
20790
+ const name3 = `${target}-${import_node_path27.default.relative(dir, object4).replaceAll(import_node_path27.default.sep, "-").replace(/\.swift\.o$/, ".o")}`;
20791
+ (0, import_node_fs27.symlinkSync)(object4, import_node_path27.default.join(archive, name3));
20792
+ archived.set(object4, `lib/${name3}`);
20793
+ }
20794
+ const roots = swiftObjcRootObjects(`${scratch2}
20795
+ ${args.frameworkKey}`, scratch2, [
20796
+ ...archived.values()
20797
+ ]);
20798
+ const linkedObjects = objects.map((object4) => {
20799
+ const name3 = archived.get(object4);
20800
+ return name3 ? { path: import_node_path27.default.join(scratch2, name3), lazy: !roots.has(name3) } : { path: object4, lazy: false };
20801
+ });
20747
20802
  return {
20803
+ root: scratch2,
20748
20804
  modules: import_node_path27.default.join(release, "Modules"),
20749
- objects,
20805
+ objects: linkedObjects.filter((object4) => !object4.lazy).map((object4) => object4.path),
20806
+ lazyObjects: linkedObjects.filter((object4) => object4.lazy).map((object4) => object4.path),
20750
20807
  owners: linked.owners,
20751
20808
  providers,
20752
20809
  link,
@@ -20900,6 +20957,10 @@ ${args.frameworkKey}
20900
20957
  for (const object4 of args.prebuilt.objects)
20901
20958
  hash.update(`object
20902
20959
  ${object4}
20960
+ ${statOf(object4)}`);
20961
+ for (const object4 of args.prebuilt.lazyObjects)
20962
+ hash.update(`lazy-object
20963
+ ${object4}
20903
20964
  ${statOf(object4)}`);
20904
20965
  for (const object4 of args.prebuilt.providers)
20905
20966
  hash.update(`provider
@@ -21316,7 +21377,7 @@ function compileSwiftProjectOnce(input, options) {
21316
21377
  pruneSwiftWasmLink(
21317
21378
  root,
21318
21379
  options.toolchainBin,
21319
- frameworkRoot,
21380
+ prebuilt?.root ?? frameworkRoot,
21320
21381
  input.staticClangTargets,
21321
21382
  options.project,
21322
21383
  void 0,
@@ -21340,11 +21401,19 @@ function compileSwiftProjectOnce(input, options) {
21340
21401
  optimized
21341
21402
  });
21342
21403
  else if (input.optimize) await optimizeWasm(output2, optimized);
21404
+ const executable = input.optimize ? optimized : output2;
21405
+ await runCompiler(
21406
+ import_node_path27.default.join(options.toolchainBin, "llvm-objcopy"),
21407
+ ["--remove-section=.swift1_autolink_entries", executable],
21408
+ buildOptions
21409
+ );
21343
21410
  const artifact = {
21344
21411
  hash,
21345
- bytes: (0, import_node_fs27.readFileSync)(input.optimize ? optimized : output2),
21412
+ bytes: (0, import_node_fs27.readFileSync)(executable),
21346
21413
  icu: await icu
21347
21414
  };
21415
+ if (artifact.bytes.length <= 8)
21416
+ throw new Error("swift-compile: deferred linker produced no executable");
21348
21417
  if (!options.project) saveCompiledArtifact(root, artifact);
21349
21418
  saveSharedArtifact(sharedRoot, artifact);
21350
21419
  report("compiled artifact verified");
@@ -29529,7 +29598,7 @@ var MAX_SWIFT_COMPILE_METAL_TOTAL_BYTES = 8 * 1024 * 1024;
29529
29598
  var MAX_SWIFT_COMPILE_IMAGES = 256;
29530
29599
  var MAX_SWIFT_COMPILE_IMAGE_BYTES = 4 * 1024 * 1024;
29531
29600
  var MAX_SWIFT_COMPILE_IMAGE_TOTAL_BYTES = 16 * 1024 * 1024;
29532
- var SWIFT_HOST_ABI = 69;
29601
+ var SWIFT_HOST_ABI = 70;
29533
29602
  var POLL_INTERVAL_MS = 1500;
29534
29603
  function swiftNativeEntry(native, file) {
29535
29604
  return {
@@ -30380,7 +30449,7 @@ function sourceClosureDigest(srcDir, entrypoints) {
30380
30449
  return hash.digest("hex");
30381
30450
  }
30382
30451
  var standinSourceDigest = (srcDir = __sootsim_import_meta_dirname) => sourceClosureDigest(srcDir, STANDIN_DIGEST_ENTRYPOINTS);
30383
- var STANDIN_SOURCE_DIGEST = true ? "a3c0ce4a9bde10ffdfdde4f65019a9ffc1f75b1779312f1d5ed2a686a3f6e0c7" : standinSourceDigest();
30452
+ var STANDIN_SOURCE_DIGEST = true ? "cc396d180b261e922288f645807b4a704fa92410ffc902bfbaac72b81af6413a" : standinSourceDigest();
30384
30453
 
30385
30454
  // src/swift-standins.ts
30386
30455
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2179 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2182 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1416,7 +1416,7 @@ function isValidRuntimeVersion(value) {
1416
1416
  }
1417
1417
 
1418
1418
  // runtime-companion.json
1419
- var runtime_companion_default = { abi: 1, sha256: "c5311b24d34f15e1e93e1e7fc426600404705562e03ce05c7c359e341afc75cd", file: "node/cli-c5311b24d34f15e1e93e1e7fc426600404705562e03ce05c7c359e341afc75cd.cjs" };
1419
+ var runtime_companion_default = { abi: 1, sha256: "d1826a4d4d05c87a157d5b160177de9cd6f1fd10a3d142804a92a0d57ff3060f", file: "node/cli-d1826a4d4d05c87a157d5b160177de9cd6f1fd10a3d142804a92a0d57ff3060f.cjs" };
1420
1420
 
1421
1421
  // src/answeredNativePackages.ts
1422
1422
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
@@ -1909,7 +1909,7 @@ function readIosSdkTree(root) {
1909
1909
 
1910
1910
  // src/swift-standin-digest.ts
1911
1911
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
1912
- var STANDIN_SOURCE_DIGEST = true ? "a3c0ce4a9bde10ffdfdde4f65019a9ffc1f75b1779312f1d5ed2a686a3f6e0c7" : standinSourceDigest();
1912
+ var STANDIN_SOURCE_DIGEST = true ? "cc396d180b261e922288f645807b4a704fa92410ffc902bfbaac72b81af6413a" : standinSourceDigest();
1913
1913
 
1914
1914
  // src/expo-native-workspace.ts
1915
1915
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
@@ -5388,7 +5388,7 @@ var FOUNDATION_IMPLICIT_MODULES = [
5388
5388
  var FOUNDATION_IMPLICIT_FLAGS = FOUNDATION_IMPLICIT_MODULES.map(
5389
5389
  (module2) => `, "-Xfrontend", "-import-module", "-Xfrontend", "${module2}"`
5390
5390
  ).join("");
5391
- var compilerSourceDigest = true ? "49b49a3b4f72b519cda4a1310d169f7d233d4f0249b0bcff228d2c316fafd9e1" : swiftCompilerSourceDigest2(__sootsim_import_meta_dirname);
5391
+ var compilerSourceDigest = true ? "73960368f0b83cf042511655d857d5f64204fa539e2c984423a12c08657b068e" : swiftCompilerSourceDigest2(__sootsim_import_meta_dirname);
5392
5392
  var CORE_FOUNDATION_HANDLE_IMPORTS = [
5393
5393
  "CFAllocator",
5394
5394
  "CFArray",
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2179 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2182 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2179 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2182 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/worklet-executable.ts
4
4
  import { parse } from "acorn";
@@ -14,6 +14,7 @@ export * as guest_import_meta from './guest-import-meta.d.ts';
14
14
  export * as guest_module_overrides from './guest-module-overrides.d.ts';
15
15
  export * as ios_chrome_metrics from './ios/chrome-metrics.d.ts';
16
16
  export * as ios_duo_housing from './ios/duo-housing.d.ts';
17
+ export * as ios_frame_svg from './ios/frame-svg.d.ts';
17
18
  export * as metro_fingerprint from './metro-fingerprint.d.ts';
18
19
  export * as metro_fingerprint_registry_client from './metro-fingerprint-registry-client.d.ts';
19
20
  export * as peach_warm_manifest from './peach-warm-manifest.d.ts';
@@ -0,0 +1,41 @@
1
+ export interface EdgeShadow {
2
+ inset: boolean;
3
+ x: number;
4
+ y: number;
5
+ spread: number;
6
+ color: string;
7
+ }
8
+ export declare const METALLIC_RING: EdgeShadow[];
9
+ export declare const ANDROID_METALLIC_RING: EdgeShadow[];
10
+ export type SideButtonSide = 'left' | 'right' | 'top' | 'bottom';
11
+ export declare const SIDE_BUTTON_COLOR = "#212121";
12
+ export declare const SIDE_BUTTON_RADIUS = 1.5;
13
+ export declare const SIDE_BUTTON_HOVER_GROWTH = 2.5;
14
+ export declare const SIDE_BUTTON_HOVER_MS = 150;
15
+ export declare const SIDE_BUTTON_HIT_PAD_OUTWARD = 12;
16
+ export declare const SIDE_BUTTON_HIT_PAD_ALONG = 8;
17
+ export declare const SIDE_BUTTON_SHADOW_SPILL = 3;
18
+ export declare function sideButtonShadows(side: SideButtonSide): EdgeShadow[];
19
+ export interface GradientStop {
20
+ color: [number, number, number, number];
21
+ at: number;
22
+ }
23
+ export declare const LEGACY_BODY_GRADIENT: GradientStop[];
24
+ export declare const LEGACY_HOME_BUTTON_CENTER: {
25
+ x: number;
26
+ y: number;
27
+ };
28
+ export declare const LEGACY_HOME_BUTTON_GRADIENT: GradientStop[];
29
+ export declare const LEGACY_HOME_BUTTON_SHADOWS: EdgeShadow[];
30
+ export declare const LEGACY_HOME_GLYPH_SIZE = 16;
31
+ export declare const LEGACY_HOME_GLYPH_RADIUS = 4;
32
+ export declare const LEGACY_HOME_GLYPH_SHADOWS: EdgeShadow[];
33
+ export declare function legacyHomeButtonOrigin({ screenWidth, screenHeight, landscape, chinRight, }: {
34
+ screenWidth: number;
35
+ screenHeight: number;
36
+ landscape: boolean;
37
+ chinRight: boolean;
38
+ }): {
39
+ top: number;
40
+ left: number;
41
+ };
@@ -0,0 +1,43 @@
1
+ import { type EdgeShadow, type SideButtonSide } from './frame-art.d.ts';
2
+ import type { CornerRadii } from '../../../../../src/device-catalog.ts';
3
+ export type FramePaintContext = Pick<CanvasRenderingContext2D, 'save' | 'restore' | 'beginPath' | 'closePath' | 'moveTo' | 'lineTo' | 'arcTo' | 'arc' | 'rect' | 'roundRect' | 'translate' | 'scale' | 'clearRect' | 'createLinearGradient' | 'createRadialGradient'> & {
4
+ fillStyle: CanvasRenderingContext2D['fillStyle'];
5
+ fill(rule?: CanvasFillRule): void;
6
+ clip(): void;
7
+ };
8
+ export interface FramePaintButton {
9
+ side: SideButtonSide;
10
+ top: number;
11
+ height: number;
12
+ width: number;
13
+ hover: number;
14
+ }
15
+ export interface FramePaintSpec {
16
+ width: number;
17
+ height: number;
18
+ radii: CornerRadii;
19
+ body: 'solid' | 'legacy' | null;
20
+ bodyColor?: string;
21
+ ring: EdgeShadow[] | null;
22
+ outline?: {
23
+ width: number;
24
+ color: string;
25
+ } | null;
26
+ buttons: FramePaintButton[];
27
+ buttonInk?: string;
28
+ home: {
29
+ top: number;
30
+ left: number;
31
+ } | null;
32
+ grid?: {
33
+ scale: number;
34
+ x: number;
35
+ y: number;
36
+ };
37
+ }
38
+ export declare function framePaintMargin(spec: Pick<FramePaintSpec, 'outline'> & {
39
+ buttons: {
40
+ width: number;
41
+ }[];
42
+ }): number;
43
+ export declare function paintDeviceFrame(ctx: FramePaintContext, spec: FramePaintSpec): void;
@@ -0,0 +1,4 @@
1
+ import { METALLIC_RING } from './frame-art.d.ts';
2
+ import { type FramePaintSpec } from './frame-paint.d.ts';
3
+ export { METALLIC_RING };
4
+ export declare function frameSvg(spec: FramePaintSpec, id?: string): string;
@@ -9,16 +9,22 @@ export type MapStyle = string | {
9
9
  sources: Record<string, unknown>;
10
10
  layers: Array<Record<string, unknown>>;
11
11
  };
12
+ export type MapScaleLocale = {
13
+ languageTag: string;
14
+ measurementSystem: 'metric' | 'us' | 'uk';
15
+ };
12
16
  export type MapMountOptions = {
13
17
  style?: MapStyle;
14
18
  nativeAppearance?: 'light' | 'dark';
15
19
  apple?: NativeSurfaceIdentity & {
16
20
  token: string;
17
21
  evaluationId: string;
22
+ locale: MapScaleLocale;
18
23
  };
19
24
  mapType?: 'satellite' | 'hybrid';
20
25
  controls?: {
21
26
  kind: 'compass' | 'scale' | 'userLocation';
27
+ top?: number;
22
28
  }[];
23
29
  projection?: MapProjection;
24
30
  center?: LngLat;
@@ -149,6 +155,14 @@ export type MapCommand = {
149
155
  kind: 'markers';
150
156
  mapId: string;
151
157
  markers: MapMarker[];
158
+ } | {
159
+ kind: 'locale';
160
+ mapId: string;
161
+ locale: MapScaleLocale;
162
+ } | {
163
+ kind: 'controls';
164
+ mapId: string;
165
+ controls: NonNullable<MapMountOptions['controls']>;
152
166
  } | {
153
167
  kind: 'overlays';
154
168
  mapId: string;
package/kotlin/sdk.tar.gz CHANGED
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "peachsim",
3
- "version": "0.1.2179",
3
+ "version": "0.1.2182",
4
4
  "description": "Vite and Metro plugins, testing drivers, and SDK exports for peach.",
5
5
  "author": "Tamagui LLC",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -1 +1 @@
1
- {"abi":1,"sha256":"c5311b24d34f15e1e93e1e7fc426600404705562e03ce05c7c359e341afc75cd","file":"node/cli-c5311b24d34f15e1e93e1e7fc426600404705562e03ce05c7c359e341afc75cd.cjs"}
1
+ {"abi":1,"sha256":"d1826a4d4d05c87a157d5b160177de9cd6f1fd10a3d142804a92a0d57ff3060f","file":"node/cli-d1826a4d4d05c87a157d5b160177de9cd6f1fd10a3d142804a92a0d57ff3060f.cjs"}
@@ -6,6 +6,7 @@
6
6
  // Copyright (c) 2007-2018 Apple Inc. All rights reserved.
7
7
  //
8
8
 
9
+ #import <UIKitTypes/UIKitTypes.h>
9
10
  #import <Foundation/Foundation.h>
10
11
  #import <CoreGraphics/CoreGraphics.h>
11
12
  #import <UIKit/UIView.h>
@@ -15,31 +16,13 @@
15
16
 
16
17
  NS_HEADER_AUDIT_BEGIN(nullability, sendability)
17
18
 
18
- typedef NS_ENUM(NSInteger, UIScrollViewIndicatorStyle) {
19
- UIScrollViewIndicatorStyleDefault, // Automatically switches appearance based on the user interface style
20
- UIScrollViewIndicatorStyleBlack, // Dark indicator, for use on light backgrounds
21
- UIScrollViewIndicatorStyleWhite // Light indicator, for use on dark backgrounds
22
- } API_UNAVAILABLE(watchos);
23
-
24
- typedef NS_ENUM(NSInteger, UIScrollViewKeyboardDismissMode) {
25
- UIScrollViewKeyboardDismissModeNone,
26
- UIScrollViewKeyboardDismissModeOnDrag, // dismisses the keyboard when a drag begins
27
- UIScrollViewKeyboardDismissModeInteractive, // the keyboard follows the dragging touch off screen, and may be pulled upward again to cancel the dismiss
28
- UIScrollViewKeyboardDismissModeOnDragWithAccessory, // dismisses both keyboard and accessory in the style of UIScrollViewKeyboardDismissModeOnDrag
29
- UIScrollViewKeyboardDismissModeInteractiveWithAccessory // dismisses both keyboard and accessory in the style of UIScrollViewKeyboardDismissModeInteractive
30
- } API_AVAILABLE(ios(7.0)) API_UNAVAILABLE(visionos, watchos);
31
-
32
- typedef NS_ENUM(NSInteger, UIScrollViewIndexDisplayMode) {
33
- UIScrollViewIndexDisplayModeAutomatic, // the index will show or hide automatically as needed
34
- UIScrollViewIndexDisplayModeAlwaysHidden, // the index will never be displayed
35
- } API_AVAILABLE(tvos(10.2)) API_UNAVAILABLE(watchos);
36
-
37
- typedef NS_ENUM(NSInteger, UIScrollViewContentInsetAdjustmentBehavior) {
38
- UIScrollViewContentInsetAdjustmentAutomatic, // Similar to .scrollableAxes, but for backward compatibility will also adjust the top & bottom contentInset when the scroll view is owned by a view controller with automaticallyAdjustsScrollViewInsets = YES inside a navigation controller, regardless of whether the scroll view is scrollable
39
- UIScrollViewContentInsetAdjustmentScrollableAxes, // Edges for scrollable axes are adjusted (i.e., contentSize.width/height > frame.size.width/height or alwaysBounceHorizontal/Vertical = YES)
40
- UIScrollViewContentInsetAdjustmentNever, // contentInset is not adjusted
41
- UIScrollViewContentInsetAdjustmentAlways, // contentInset is always adjusted by the scroll view's safeAreaInsets
42
- } API_AVAILABLE(ios(11.0), tvos(11.0)) API_UNAVAILABLE(watchos);
19
+
20
+
21
+
22
+
23
+
24
+
25
+
43
26
 
44
27
  typedef CGFloat UIScrollViewDecelerationRate NS_TYPED_ENUM API_UNAVAILABLE(watchos);
45
28
 
@@ -2363,6 +2363,32 @@ typedef NS_ENUM(NSInteger, UIImageRenderingMode) {
2363
2363
  UIImageRenderingModeAlwaysOriginal, // Always draw the original image, without treating it as a template
2364
2364
  UIImageRenderingModeAlwaysTemplate, // Always draw the image as a template image, ignoring its color information
2365
2365
  } API_AVAILABLE(ios(7.0), watchos(2.0));
2366
+
2367
+ typedef NS_ENUM(NSInteger, UIScrollViewIndicatorStyle) {
2368
+ UIScrollViewIndicatorStyleDefault, // Automatically switches appearance based on the user interface style
2369
+ UIScrollViewIndicatorStyleBlack, // Dark indicator, for use on light backgrounds
2370
+ UIScrollViewIndicatorStyleWhite // Light indicator, for use on dark backgrounds
2371
+ } API_UNAVAILABLE(watchos);
2372
+
2373
+ typedef NS_ENUM(NSInteger, UIScrollViewKeyboardDismissMode) {
2374
+ UIScrollViewKeyboardDismissModeNone,
2375
+ UIScrollViewKeyboardDismissModeOnDrag, // dismisses the keyboard when a drag begins
2376
+ UIScrollViewKeyboardDismissModeInteractive, // the keyboard follows the dragging touch off screen, and may be pulled upward again to cancel the dismiss
2377
+ UIScrollViewKeyboardDismissModeOnDragWithAccessory, // dismisses both keyboard and accessory in the style of UIScrollViewKeyboardDismissModeOnDrag
2378
+ UIScrollViewKeyboardDismissModeInteractiveWithAccessory // dismisses both keyboard and accessory in the style of UIScrollViewKeyboardDismissModeInteractive
2379
+ } API_AVAILABLE(ios(7.0)) API_UNAVAILABLE(visionos, watchos);
2380
+
2381
+ typedef NS_ENUM(NSInteger, UIScrollViewIndexDisplayMode) {
2382
+ UIScrollViewIndexDisplayModeAutomatic, // the index will show or hide automatically as needed
2383
+ UIScrollViewIndexDisplayModeAlwaysHidden, // the index will never be displayed
2384
+ } API_AVAILABLE(tvos(10.2)) API_UNAVAILABLE(watchos);
2385
+
2386
+ typedef NS_ENUM(NSInteger, UIScrollViewContentInsetAdjustmentBehavior) {
2387
+ UIScrollViewContentInsetAdjustmentAutomatic, // Similar to .scrollableAxes, but for backward compatibility will also adjust the top & bottom contentInset when the scroll view is owned by a view controller with automaticallyAdjustsScrollViewInsets = YES inside a navigation controller, regardless of whether the scroll view is scrollable
2388
+ UIScrollViewContentInsetAdjustmentScrollableAxes, // Edges for scrollable axes are adjusted (i.e., contentSize.width/height > frame.size.width/height or alwaysBounceHorizontal/Vertical = YES)
2389
+ UIScrollViewContentInsetAdjustmentNever, // contentInset is not adjusted
2390
+ UIScrollViewContentInsetAdjustmentAlways, // contentInset is always adjusted by the scroll view's safeAreaInsets
2391
+ } API_AVAILABLE(ios(11.0), tvos(11.0)) API_UNAVAILABLE(watchos);
2366
2392
  PEACH_SWIFT_CLASS(UIKitCore) @interface UIColor : NSObject <NSSecureCoding, NSCopying>
2367
2393
  @end
2368
2394
 
@@ -877,6 +877,7 @@ async function prepareWorkspace(
877
877
  // a pinned bun installs into its own prefix: npm exec keeps one cached copy per spec, so a copy
878
878
  // installed without its postinstall (hosts that set ignore-scripts) would stay broken
879
879
  const bunPrefix = path.join(cacheDir(), 'package-managers', manager)
880
+ const bunExecutable = path.join(bunPrefix, 'node_modules/.bin/bun')
880
881
  const install =
881
882
  manager === 'pnpm' || manager.startsWith('pnpm@')
882
883
  ? [
@@ -893,11 +894,7 @@ async function prepareWorkspace(
893
894
  : manager === 'bun' || manager.startsWith('bun@')
894
895
  ? manager === 'bun'
895
896
  ? ['bun', 'install', '--frozen-lockfile']
896
- : [
897
- path.join(bunPrefix, 'node_modules/.bin/bun'),
898
- 'install',
899
- '--frozen-lockfile',
900
- ]
897
+ : [bunExecutable, 'install', '--frozen-lockfile']
901
898
  : // npm ci would delete the cloned tree before installing it again
902
899
  ['npm', 'install', '--no-audit', '--no-fund']
903
900
  // dependencies such as react-native-skia fetch their native binaries in a lifecycle
@@ -907,22 +904,22 @@ async function prepareWorkspace(
907
904
  const command = [...prefix, ...args]
908
905
  await run(command[0]!, command.slice(1), cwd, env)
909
906
  }
907
+ if (manager.startsWith('bun@') && (!projectReady || !fs.existsSync(bunExecutable)))
908
+ await execute(
909
+ [
910
+ 'npm',
911
+ 'install',
912
+ '--prefix',
913
+ bunPrefix,
914
+ // the bun package ships a placeholder binary its postinstall replaces
915
+ '--ignore-scripts=false',
916
+ '--no-audit',
917
+ '--no-fund',
918
+ manager,
919
+ ],
920
+ work,
921
+ )
910
922
  if (!projectReady) {
911
- if (manager.startsWith('bun@'))
912
- await execute(
913
- [
914
- 'npm',
915
- 'install',
916
- '--prefix',
917
- bunPrefix,
918
- // the bun package ships a placeholder binary its postinstall replaces
919
- '--ignore-scripts=false',
920
- '--no-audit',
921
- '--no-fund',
922
- manager,
923
- ],
924
- work,
925
- )
926
923
  // npm install keeps the cloned tree but can otherwise rewrite a stale lockfile.
927
924
  if (install[0] === 'npm' && fs.existsSync(path.join(work, 'package-lock.json'))) {
928
925
  await execute(
@@ -2,7 +2,10 @@
2
2
  // its immutable native assets beside the javascript bundle.
3
3
  import { compileExpoSwiftModules } from './expo-swift-host'
4
4
  import { swiftIcuBundleAsset } from './swift-icu'
5
- import type { ExpoSwiftCompilationResult } from './expoSwiftContract'
5
+ import type {
6
+ ExpoSwiftCompilationResult,
7
+ ExpoSwiftPreparationOptions,
8
+ } from './expoSwiftContract'
6
9
 
7
10
  export interface ExpoSwiftBundle {
8
11
  metadata: ExpoSwiftCompilationResult
@@ -11,6 +14,7 @@ export interface ExpoSwiftBundle {
11
14
 
12
15
  export async function buildExpoSwiftBundle(
13
16
  appRoot: string,
17
+ oneSDK?: ExpoSwiftPreparationOptions['oneSDK'],
14
18
  ): Promise<ExpoSwiftBundle | null> {
15
19
  const assets: ExpoSwiftBundle['assets'] = []
16
20
  const metadata = await compileExpoSwiftModules(
@@ -25,6 +29,7 @@ export async function buildExpoSwiftBundle(
25
29
  })
26
30
  if ('gzip' in artifact.icu) assets.push(await swiftIcuBundleAsset(artifact.icu))
27
31
  },
32
+ { oneSDK },
28
33
  )
29
34
  if (!metadata) return null
30
35