peachsim 0.1.2199 → 0.1.2201

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 (107) hide show
  1. package/cli/commands/inspect/settling.ts +20 -20
  2. package/cli/outbound-endpoints.ts +12 -0
  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 +1423 -1118
  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 +22 -22
  27. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  28. package/dist-lib/expo-swift-bundle.cjs +45945 -40026
  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 +50879 -49774
  33. package/dist-lib/host/fetch-proxy-handler.cjs +16 -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 +36 -24
  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 +100 -10
  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 +16 -4
  49. package/dist-lib/native-app-identity-project.cjs +14 -2
  50. package/dist-lib/native-app-identity-project.mjs +14 -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 +302 -289
  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 +21 -21
  68. package/dist-lib/sdk.mjs +21 -21
  69. package/dist-lib/skills.cjs +3520 -2920
  70. package/dist-lib/swift-compile.cjs +34 -3
  71. package/dist-lib/swift-compile.mjs +34 -3
  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 +1 -1
  75. package/dist-lib/swift-submit.mjs +1 -1
  76. package/dist-lib/swift-toolchain.cjs +1 -1
  77. package/dist-lib/swift.cjs +1 -1
  78. package/dist-lib/vite-swift.cjs +42 -8
  79. package/dist-lib/vite.cjs +16 -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/engine/scene-table.d.ts +2 -0
  83. package/dist-types/packages/peach-engine/src/engine/yoga-layout.d.ts +2 -1
  84. package/dist-types/packages/peach-engine/src/render-worker/app-prefetch-contract.d.ts +5 -0
  85. package/dist-types/packages/peach-engine/src/render-worker/protocol.d.ts +2 -0
  86. package/dist-types/packages/peach-engine/src/render-worker/tree-sync-port.d.ts +5 -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/QuartzCore.framework/Headers/CAValueFunction.h +1 -1
  91. package/sdk/ios/System/Library/Frameworks/QuartzCore.framework/Modules/module.modulemap +1 -0
  92. package/sdk/ios/System/Library/Frameworks/UIKitText.framework/Headers/UIKitText.apinotes +14 -0
  93. package/src/android-layout-ids.ts +50 -0
  94. package/src/android-view-classes.ts +41 -0
  95. package/src/expo-swift-host.ts +6 -1
  96. package/src/java-module-abi.ts +2 -0
  97. package/src/javaAbiContract.ts +2 -0
  98. package/src/kotlin-app.ts +33 -7
  99. package/src/kotlin-host.ts +83 -6
  100. package/src/kotlin-maven-sources.ts +248 -0
  101. package/src/native-prebuilt.ts +3 -3
  102. package/src/react-native-core-build.ts +176 -0
  103. package/src/react-native-core-digest.ts +1 -1
  104. package/src/react-native-core.ts +24 -7
  105. package/src/swift-standin-emit.ts +9 -1
  106. package/src/swift-wasm-prune.ts +41 -3
  107. package/src/turbo-compile.ts +6 -4
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2199 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2201 | (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;
@@ -5720,6 +5720,25 @@ function getModulePrefix(file) {
5720
5720
  const dash = base.indexOf("-");
5721
5721
  return dash > 0 ? base.slice(0, dash) : base;
5722
5722
  }
5723
+ var SWIFTUI_WRAPPER_HOST_PROTOCOLS = new Set(
5724
+ [
5725
+ "View",
5726
+ "ViewModifier",
5727
+ "App",
5728
+ "Scene",
5729
+ "Gesture",
5730
+ "ToolbarContent",
5731
+ "Commands",
5732
+ "DynamicProperty"
5733
+ ].map((name2) => `$s7SwiftUI${name2.length}${name2}Mp`)
5734
+ );
5735
+ function keepsSwiftUIReflection(file, undefinedSymbols) {
5736
+ if (/^(SwiftUI|Combine|_[A-Za-z0-9]+_SwiftUI)-/.test(import_node_path10.default.basename(file))) return true;
5737
+ for (const name2 of undefinedSymbols) {
5738
+ if (SWIFTUI_WRAPPER_HOST_PROTOCOLS.has(name2)) return true;
5739
+ }
5740
+ return false;
5741
+ }
5723
5742
  function pruneSwiftWasmLink(directory, toolchainBin, moduleRoot, staticClangTargets = [], owner, link, resourceReferences = []) {
5724
5743
  const rspPath = import_node_path10.default.join(directory, ".peach-link.rsp");
5725
5744
  if (!import_node_fs9.default.existsSync(rspPath)) return;
@@ -5750,7 +5769,19 @@ function pruneSwiftWasmLink(directory, toolchainBin, moduleRoot, staticClangTarg
5750
5769
  throw new Error(`swift-wasm-prune: the build owns its sdk directory ${sdkWasiDir}`);
5751
5770
  const sdkObjsDir = ensureUnpackedSdkObjects(sdkWasiDir);
5752
5771
  const distDir = import_node_path10.default.join(moduleRoot, "lib");
5753
- const dropsReflection = (obj, name2) => !!name2 && !/^(SwiftUI|Combine|_[A-Za-z0-9]+_SwiftUI)-/.test(import_node_path10.default.basename(obj.file)) && (name2.startsWith("l__swift5_reflection_descriptor") || name2.startsWith("$s") && (name2.endsWith("CMF") || name2.endsWith("VMF")) && !(!obj.file.startsWith(distDir) && obj.file.endsWith(".swift.o")));
5772
+ const keepsReflection = /* @__PURE__ */ new Map();
5773
+ const declaresSwiftUIConformers = (obj) => {
5774
+ let keeps = keepsReflection.get(obj);
5775
+ if (keeps === void 0) {
5776
+ keeps = keepsSwiftUIReflection(
5777
+ obj.file,
5778
+ obj.symNames.filter((n, i) => n && (obj.symFlags[i] & 16) !== 0)
5779
+ );
5780
+ keepsReflection.set(obj, keeps);
5781
+ }
5782
+ return keeps;
5783
+ };
5784
+ const dropsReflection = (obj, name2) => !!name2 && !declaresSwiftUIConformers(obj) && (name2.startsWith("l__swift5_reflection_descriptor") || name2.startsWith("$s") && (name2.endsWith("CMF") || name2.endsWith("VMF")) && !(!obj.file.startsWith(distDir) && obj.file.endsWith(".swift.o")));
5754
5785
  const prunedObjsDir = import_node_path10.default.join(directory, ".peach-pruned-objs");
5755
5786
  import_node_fs9.default.rmSync(prunedObjsDir, { recursive: true, force: true });
5756
5787
  import_node_fs9.default.mkdirSync(prunedObjsDir, { recursive: true });
@@ -12468,7 +12499,7 @@ var darwinRecordsRegion = (quoted) => quoted.length ? ["-Wl,--start-lib", ...quo
12468
12499
  var REACTOR_FLAG = '"-Xclang-linker", "-mexec-model=reactor",\n';
12469
12500
  var MULTI_MANIFEST_VERSION = 68;
12470
12501
  var SWIFT_HEADER_PRODUCTS_TARGET = "PeachHeaderProducts";
12471
- var compilerSourceDigest = true ? "da64a99bc639b1dce8024a42c5f5308e09e564e6e119be33e33a85c79e245197" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
12502
+ var compilerSourceDigest = true ? "8004dbc307143f91fede23d329c01a8171056ea767fd3755b8ac7a39d59e25b3" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
12472
12503
  function swiftArtifactHash(input, release, moduleRoot) {
12473
12504
  const hash = (0, import_node_crypto13.createHash)("sha256");
12474
12505
  hash.update(`swift-compile
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2199 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2201 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/swift-compile.ts
4
4
  import {
@@ -5667,6 +5667,25 @@ function getModulePrefix(file) {
5667
5667
  const dash = base.indexOf("-");
5668
5668
  return dash > 0 ? base.slice(0, dash) : base;
5669
5669
  }
5670
+ var SWIFTUI_WRAPPER_HOST_PROTOCOLS = new Set(
5671
+ [
5672
+ "View",
5673
+ "ViewModifier",
5674
+ "App",
5675
+ "Scene",
5676
+ "Gesture",
5677
+ "ToolbarContent",
5678
+ "Commands",
5679
+ "DynamicProperty"
5680
+ ].map((name2) => `$s7SwiftUI${name2.length}${name2}Mp`)
5681
+ );
5682
+ function keepsSwiftUIReflection(file, undefinedSymbols) {
5683
+ if (/^(SwiftUI|Combine|_[A-Za-z0-9]+_SwiftUI)-/.test(path10.basename(file))) return true;
5684
+ for (const name2 of undefinedSymbols) {
5685
+ if (SWIFTUI_WRAPPER_HOST_PROTOCOLS.has(name2)) return true;
5686
+ }
5687
+ return false;
5688
+ }
5670
5689
  function pruneSwiftWasmLink(directory, toolchainBin, moduleRoot, staticClangTargets = [], owner, link, resourceReferences = []) {
5671
5690
  const rspPath = path10.join(directory, ".peach-link.rsp");
5672
5691
  if (!fs4.existsSync(rspPath)) return;
@@ -5697,7 +5716,19 @@ function pruneSwiftWasmLink(directory, toolchainBin, moduleRoot, staticClangTarg
5697
5716
  throw new Error(`swift-wasm-prune: the build owns its sdk directory ${sdkWasiDir}`);
5698
5717
  const sdkObjsDir = ensureUnpackedSdkObjects(sdkWasiDir);
5699
5718
  const distDir = path10.join(moduleRoot, "lib");
5700
- const dropsReflection = (obj, name2) => !!name2 && !/^(SwiftUI|Combine|_[A-Za-z0-9]+_SwiftUI)-/.test(path10.basename(obj.file)) && (name2.startsWith("l__swift5_reflection_descriptor") || name2.startsWith("$s") && (name2.endsWith("CMF") || name2.endsWith("VMF")) && !(!obj.file.startsWith(distDir) && obj.file.endsWith(".swift.o")));
5719
+ const keepsReflection = /* @__PURE__ */ new Map();
5720
+ const declaresSwiftUIConformers = (obj) => {
5721
+ let keeps = keepsReflection.get(obj);
5722
+ if (keeps === void 0) {
5723
+ keeps = keepsSwiftUIReflection(
5724
+ obj.file,
5725
+ obj.symNames.filter((n, i) => n && (obj.symFlags[i] & 16) !== 0)
5726
+ );
5727
+ keepsReflection.set(obj, keeps);
5728
+ }
5729
+ return keeps;
5730
+ };
5731
+ const dropsReflection = (obj, name2) => !!name2 && !declaresSwiftUIConformers(obj) && (name2.startsWith("l__swift5_reflection_descriptor") || name2.startsWith("$s") && (name2.endsWith("CMF") || name2.endsWith("VMF")) && !(!obj.file.startsWith(distDir) && obj.file.endsWith(".swift.o")));
5701
5732
  const prunedObjsDir = path10.join(directory, ".peach-pruned-objs");
5702
5733
  fs4.rmSync(prunedObjsDir, { recursive: true, force: true });
5703
5734
  fs4.mkdirSync(prunedObjsDir, { recursive: true });
@@ -12448,7 +12479,7 @@ var darwinRecordsRegion = (quoted) => quoted.length ? ["-Wl,--start-lib", ...quo
12448
12479
  var REACTOR_FLAG = '"-Xclang-linker", "-mexec-model=reactor",\n';
12449
12480
  var MULTI_MANIFEST_VERSION = 68;
12450
12481
  var SWIFT_HEADER_PRODUCTS_TARGET = "PeachHeaderProducts";
12451
- var compilerSourceDigest = true ? "da64a99bc639b1dce8024a42c5f5308e09e564e6e119be33e33a85c79e245197" : swiftCompilerSourceDigest(import.meta.dirname);
12482
+ var compilerSourceDigest = true ? "8004dbc307143f91fede23d329c01a8171056ea767fd3755b8ac7a39d59e25b3" : swiftCompilerSourceDigest(import.meta.dirname);
12452
12483
  function swiftArtifactHash(input, release, moduleRoot) {
12453
12484
  const hash = createHash13("sha256");
12454
12485
  hash.update(`swift-compile
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2199 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2201 | (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.2199 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2201 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/swift-package.ts
4
4
  function swiftManifestSettings(target) {
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2199 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2201 | (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.2199 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2201 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/is-record.ts
4
4
  function isRecord(value) {
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2199 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2201 | (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;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2199 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2201 | (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.2199 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2201 | (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;
@@ -6919,7 +6919,10 @@ function emitSwiftStandin(sourceGraphs, options) {
6919
6919
  const restatesRequired = context.inClass && path51.endsWith(".init()") && [...superChain(owner.get(member.identifier.precise) ?? "")].some(
6920
6920
  (at) => options.requiredInits?.has(`${pathOf(byId.get(at))}.init()`)
6921
6921
  );
6922
- const required = context.inClass && (flags.has("required") || requiredInit || restatesRequired);
6922
+ const protocolInit = member.kind.identifier === "swift.init" && /^c:objc\(pl\)\w+\(im\).*::SYNTHESIZED::c:objc\(cs\)/.test(
6923
+ member.identifier.precise
6924
+ );
6925
+ const required = context.inClass && (flags.has("required") || requiredInit || restatesRequired || protocolInit);
6923
6926
  const final = context.inClass && flags.has("final") ? "final " : "";
6924
6927
  const mutating = flags.has("mutating") ? "mutating " : flags.has("nonmutating") ? "nonmutating " : "";
6925
6928
  let core = `${flags.has("convenience") ? "convenience " : ""}${modifiers[2]}`;
@@ -10671,6 +10674,25 @@ function getModulePrefix(file) {
10671
10674
  const dash = base.indexOf("-");
10672
10675
  return dash > 0 ? base.slice(0, dash) : base;
10673
10676
  }
10677
+ var SWIFTUI_WRAPPER_HOST_PROTOCOLS = new Set(
10678
+ [
10679
+ "View",
10680
+ "ViewModifier",
10681
+ "App",
10682
+ "Scene",
10683
+ "Gesture",
10684
+ "ToolbarContent",
10685
+ "Commands",
10686
+ "DynamicProperty"
10687
+ ].map((name3) => `$s7SwiftUI${name3.length}${name3}Mp`)
10688
+ );
10689
+ function keepsSwiftUIReflection(file, undefinedSymbols) {
10690
+ if (/^(SwiftUI|Combine|_[A-Za-z0-9]+_SwiftUI)-/.test(import_node_path10.default.basename(file))) return true;
10691
+ for (const name3 of undefinedSymbols) {
10692
+ if (SWIFTUI_WRAPPER_HOST_PROTOCOLS.has(name3)) return true;
10693
+ }
10694
+ return false;
10695
+ }
10674
10696
  function pruneSwiftWasmLink(directory, toolchainBin, moduleRoot, staticClangTargets = [], owner, link, resourceReferences = []) {
10675
10697
  const rspPath = import_node_path10.default.join(directory, ".peach-link.rsp");
10676
10698
  if (!import_node_fs10.default.existsSync(rspPath)) return;
@@ -10701,7 +10723,19 @@ function pruneSwiftWasmLink(directory, toolchainBin, moduleRoot, staticClangTarg
10701
10723
  throw new Error(`swift-wasm-prune: the build owns its sdk directory ${sdkWasiDir}`);
10702
10724
  const sdkObjsDir = ensureUnpackedSdkObjects(sdkWasiDir);
10703
10725
  const distDir = import_node_path10.default.join(moduleRoot, "lib");
10704
- const dropsReflection = (obj, name3) => !!name3 && !/^(SwiftUI|Combine|_[A-Za-z0-9]+_SwiftUI)-/.test(import_node_path10.default.basename(obj.file)) && (name3.startsWith("l__swift5_reflection_descriptor") || name3.startsWith("$s") && (name3.endsWith("CMF") || name3.endsWith("VMF")) && !(!obj.file.startsWith(distDir) && obj.file.endsWith(".swift.o")));
10726
+ const keepsReflection = /* @__PURE__ */ new Map();
10727
+ const declaresSwiftUIConformers = (obj) => {
10728
+ let keeps = keepsReflection.get(obj);
10729
+ if (keeps === void 0) {
10730
+ keeps = keepsSwiftUIReflection(
10731
+ obj.file,
10732
+ obj.symNames.filter((n, i) => n && (obj.symFlags[i] & 16) !== 0)
10733
+ );
10734
+ keepsReflection.set(obj, keeps);
10735
+ }
10736
+ return keeps;
10737
+ };
10738
+ const dropsReflection = (obj, name3) => !!name3 && !declaresSwiftUIConformers(obj) && (name3.startsWith("l__swift5_reflection_descriptor") || name3.startsWith("$s") && (name3.endsWith("CMF") || name3.endsWith("VMF")) && !(!obj.file.startsWith(distDir) && obj.file.endsWith(".swift.o")));
10705
10739
  const prunedObjsDir = import_node_path10.default.join(directory, ".peach-pruned-objs");
10706
10740
  import_node_fs10.default.rmSync(prunedObjsDir, { recursive: true, force: true });
10707
10741
  import_node_fs10.default.mkdirSync(prunedObjsDir, { recursive: true });
@@ -17309,7 +17343,7 @@ var darwinRecordsRegion = (quoted) => quoted.length ? ["-Wl,--start-lib", ...quo
17309
17343
  var REACTOR_FLAG = '"-Xclang-linker", "-mexec-model=reactor",\n';
17310
17344
  var MULTI_MANIFEST_VERSION = 68;
17311
17345
  var SWIFT_HEADER_PRODUCTS_TARGET = "PeachHeaderProducts";
17312
- var compilerSourceDigest = true ? "da64a99bc639b1dce8024a42c5f5308e09e564e6e119be33e33a85c79e245197" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
17346
+ var compilerSourceDigest = true ? "8004dbc307143f91fede23d329c01a8171056ea767fd3755b8ac7a39d59e25b3" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
17313
17347
  function swiftArtifactHash(input, release, moduleRoot) {
17314
17348
  const hash = (0, import_node_crypto13.createHash)("sha256");
17315
17349
  hash.update(`swift-compile
@@ -30615,7 +30649,7 @@ function sourceClosureDigest(srcDir, entrypoints) {
30615
30649
  return hash.digest("hex");
30616
30650
  }
30617
30651
  var standinSourceDigest = (srcDir = __sootsim_import_meta_dirname) => sourceClosureDigest(srcDir, STANDIN_DIGEST_ENTRYPOINTS);
30618
- var STANDIN_SOURCE_DIGEST = true ? "a996006bade8d371dad7a05919cb0812bb1e5e08ae40cbb5af2802d3df188b2d" : standinSourceDigest();
30652
+ var STANDIN_SOURCE_DIGEST = true ? "fc51a249ab5b00720eab27b7d9e4945936878069347a86180f9c5efd7f063012" : standinSourceDigest();
30619
30653
 
30620
30654
  // src/swift-standins.ts
30621
30655
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
@@ -30636,7 +30670,7 @@ function nativeEntryKey(inputs) {
30636
30670
  return (0, import_node_crypto22.createHash)("sha256").update(lines.join("\n")).digest("hex").slice(0, 32);
30637
30671
  }
30638
30672
  var nativeEntryPrefix = (kind, name3, key2) => `native/${kind}/${name3}/${key2}`;
30639
- var entryCache = (kind, name3, key2) => import_node_path43.default.join(cacheDir(), "native-prebuilt", kind, name3, key2);
30673
+ var nativeEntryCache = (kind, name3, key2) => import_node_path43.default.join(cacheDir(), "native-prebuilt", kind, name3, key2);
30640
30674
  function download(url, to) {
30641
30675
  try {
30642
30676
  (0, import_node_child_process26.execFileSync)("curl", ["-fsS", "--max-time", "120", url, "-o", to], {
@@ -30659,7 +30693,7 @@ function parseFiles(text5, kind, name3, key2) {
30659
30693
  return parsed.files;
30660
30694
  }
30661
30695
  function fetchNativeEntry(kind, name3, key2) {
30662
- const dir = entryCache(kind, name3, key2);
30696
+ const dir = nativeEntryCache(kind, name3, key2);
30663
30697
  const descriptorFile = import_node_path43.default.join(dir, "descriptor.json");
30664
30698
  if (import_node_fs42.default.existsSync(descriptorFile)) return dir;
30665
30699
  const base = `${NATIVE_PREBUILT_ORIGIN}/${nativeEntryPrefix(kind, name3, key2)}`;
@@ -30705,7 +30739,7 @@ function installNativeEntry(kind, name3, key2, source) {
30705
30739
  `native prebuilt ${kind}/${name3}/${key2}: ${file.path} does not match its descriptor`
30706
30740
  );
30707
30741
  }
30708
- const dir = entryCache(kind, name3, key2);
30742
+ const dir = nativeEntryCache(kind, name3, key2);
30709
30743
  import_node_fs42.default.mkdirSync(import_node_path43.default.dirname(dir), { recursive: true });
30710
30744
  const staging = `${dir}.${process.pid}.partial`;
30711
30745
  import_node_fs42.default.rmSync(staging, { recursive: true, force: true });
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2199 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2201 | (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: "38d58f4713cbf87e8d4cde206f6a1fb9bf3898b6b885f45db610ad1fccde083a", file: "node/cli-38d58f4713cbf87e8d4cde206f6a1fb9bf3898b6b885f45db610ad1fccde083a.cjs" };
1419
+ var runtime_companion_default = { abi: 1, sha256: "5aec79ac0fcea933862e7e373e0d167401e0d891c835d195b7f48039c87add60", file: "node/cli-5aec79ac0fcea933862e7e373e0d167401e0d891c835d195b7f48039c87add60.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 ? "a996006bade8d371dad7a05919cb0812bb1e5e08ae40cbb5af2802d3df188b2d" : standinSourceDigest();
1912
+ var STANDIN_SOURCE_DIGEST = true ? "fc51a249ab5b00720eab27b7d9e4945936878069347a86180f9c5efd7f063012" : standinSourceDigest();
1913
1913
 
1914
1914
  // src/expo-native-workspace.ts
1915
1915
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
@@ -5193,6 +5193,18 @@ var OMIT_SDK_LIB_FLAGS = /* @__PURE__ */ new Set([
5193
5193
  "-lswiftCore",
5194
5194
  "-lswift_Concurrency"
5195
5195
  ]);
5196
+ var SWIFTUI_WRAPPER_HOST_PROTOCOLS = new Set(
5197
+ [
5198
+ "View",
5199
+ "ViewModifier",
5200
+ "App",
5201
+ "Scene",
5202
+ "Gesture",
5203
+ "ToolbarContent",
5204
+ "Commands",
5205
+ "DynamicProperty"
5206
+ ].map((name) => `$s7SwiftUI${name.length}${name}Mp`)
5207
+ );
5196
5208
 
5197
5209
  // src/swift-guest-link.ts
5198
5210
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
@@ -5391,7 +5403,7 @@ var FOUNDATION_IMPLICIT_MODULES = [
5391
5403
  var FOUNDATION_IMPLICIT_FLAGS = FOUNDATION_IMPLICIT_MODULES.map(
5392
5404
  (module2) => `, "-Xfrontend", "-import-module", "-Xfrontend", "${module2}"`
5393
5405
  ).join("");
5394
- var compilerSourceDigest = true ? "da64a99bc639b1dce8024a42c5f5308e09e564e6e119be33e33a85c79e245197" : swiftCompilerSourceDigest2(__sootsim_import_meta_dirname);
5406
+ var compilerSourceDigest = true ? "8004dbc307143f91fede23d329c01a8171056ea767fd3755b8ac7a39d59e25b3" : swiftCompilerSourceDigest2(__sootsim_import_meta_dirname);
5395
5407
  var CORE_FOUNDATION_HANDLE_IMPORTS = [
5396
5408
  "CFAllocator",
5397
5409
  "CFArray",
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2199 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2201 | (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.2199 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2201 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/worklet-executable.ts
4
4
  import { parse } from "acorn";
@@ -136,6 +136,7 @@ export interface SceneNativeBinding {
136
136
  _peach_walk_retained_census(): number;
137
137
  _peach_classic_layout_set(slot: number, start: number, duration: number, easing: number, fromX: number, fromY: number, fromWidth: number, fromHeight: number, targetX: number, targetY: number, targetWidth: number, targetHeight: number): void;
138
138
  _peach_classic_layout_clear(slot: number): void;
139
+ _peach_classic_layout_progress(progress: number): void;
139
140
  _peach_classic_layout_sample(slot: number, timestamp: number): number;
140
141
  peachExtentParameters?: (slot: number) => void;
141
142
  _peach_scene_set_buffers(integers: number, doubles: number, floats: number, layoutMatrices: number): void;
@@ -350,6 +351,7 @@ export declare class SceneTable {
350
351
  stampPaintKind(slot: number, kind: number, bits: number): void;
351
352
  readLayout(slot: number, layout: SootSimLayout): void;
352
353
  writeClassicLayoutAnimation(slot: number, from: SootSimLayout, target: SootSimLayout, start: number, duration: number, type: string | null): void;
354
+ setClassicLayoutPresentationProgress(progress: number): void;
353
355
  clearClassicLayoutAnimation(slot: number): void;
354
356
  sampleClassicLayoutAnimation(slot: number, timestamp: number, out: SootSimLayout): boolean;
355
357
  commitNativeLayouts(native: NativeLayoutExports): void;
@@ -58,6 +58,7 @@ export declare function invalidateLayoutHook(target: unknown): void;
58
58
  export declare function placeFromLayoutHook(target: unknown, placement: LayoutHookPlacement | null): void;
59
59
  export declare function layoutHookFrame(target: unknown): SootSimLayout | null;
60
60
  export declare function releaseYogaRoot(root: SootSimNode): void;
61
- export declare function parkYogaRoot(root: SootSimNode): void;
61
+ export declare function nestsInParkedYogaTree(root: SootSimNode, owner: SootSimNode): boolean;
62
+ export declare function parkYogaRoot(root: SootSimNode): boolean;
62
63
  export declare function freeYogaTree(node: SootSimNode, seen?: Set<SootSimNode>): void;
63
64
  export declare function measureText(text: string, sourceStyle: SootSimStyle, maxWidth: number, ctx: MeasureContext, props?: Record<string, any>, node?: SootSimNode, includeInk?: boolean): MeasuredTextResult;
@@ -0,0 +1,5 @@
1
+ export declare const APP_PREFETCH_MANIFEST_FILE = "app-prefetch.json";
2
+ export declare const APP_PREFETCH_PROD_MANIFEST_FILE = "app-prefetch.prod.json";
3
+ export declare const APP_PREFETCH_MANIFEST_FROM_CHUNK = "../app-prefetch.json";
4
+ export declare const APP_PREFETCH_PROD_MANIFEST_FROM_CHUNK = "../app-prefetch.prod.json";
5
+ export type BackgroundWarm = 'none' | 'light' | 'eager';
@@ -12,6 +12,7 @@ import type { RemoteEngineClientConfig } from '../remote-stream/client-config.d.
12
12
  import type { DuoFoldWireState } from '../settings/duo-fold-bus.d.ts';
13
13
  import type { ReactNativeConfigurationMutation, ReactNativeConfigurationSnapshot } from '../settings/react-native-configuration.d.ts';
14
14
  import type { ShellIntentEventName } from '../shell-intent.d.ts';
15
+ import type { BackgroundWarm } from './app-prefetch-contract.d.ts';
15
16
  import type { CompositorBackend } from './compositor-backend.d.ts';
16
17
  import type { EditMenuItemRect } from './edit-menu-geometry.d.ts';
17
18
  import type { GestureSeamEvent } from './gesture-seam-protocol.d.ts';
@@ -165,6 +166,7 @@ export type HostToWorker = {
165
166
  prefersReducedMotion?: boolean;
166
167
  netInfo?: NetInfoSnapshot;
167
168
  hostSpeechRecognitionAvailable?: boolean;
169
+ backgroundWarm?: BackgroundWarm;
168
170
  verboseWorkerLogs?: boolean;
169
171
  workletSAB?: SharedArrayBuffer;
170
172
  synchronizableArenas?: SynchronizableArenas;
@@ -38,6 +38,11 @@ export type TreeSyncPortMessage = {
38
38
  } | {
39
39
  type: 'requestSurfaceResync';
40
40
  surfaceId: string;
41
+ } | {
42
+ type: 'treeInbox';
43
+ buffer: SharedArrayBuffer;
44
+ } | {
45
+ type: 'treeInboxAccepted';
41
46
  } | {
42
47
  type: 'nativeAnimMirror';
43
48
  envelope: NativeAnimMirrorEnvelope;
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.2199",
3
+ "version": "0.1.2201",
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":"38d58f4713cbf87e8d4cde206f6a1fb9bf3898b6b885f45db610ad1fccde083a","file":"node/cli-38d58f4713cbf87e8d4cde206f6a1fb9bf3898b6b885f45db610ad1fccde083a.cjs"}
1
+ {"abi":1,"sha256":"5aec79ac0fcea933862e7e373e0d167401e0d891c835d195b7f48039c87add60","file":"node/cli-5aec79ac0fcea933862e7e373e0d167401e0d891c835d195b7f48039c87add60.cjs"}
@@ -13,7 +13,7 @@ typedef NSString * CAValueFunctionName NS_TYPED_ENUM API_AVAILABLE(macos(10.6),
13
13
  NS_HEADER_AUDIT_BEGIN(nullability, sendability)
14
14
 
15
15
  API_AVAILABLE(macos(10.6), ios(3.0), tvos(9.0)) API_UNAVAILABLE(watchos)
16
- PEACH_SWIFT_CLASS(QuartzCore) @interface CAValueFunction : NSObject <NSSecureCoding>
16
+ @interface CAValueFunction : NSObject <NSSecureCoding>
17
17
  {
18
18
  @protected
19
19
  NSString *_string;
@@ -8,5 +8,6 @@ framework module QuartzCore [system] {
8
8
  exclude header "CAFrameRateRange.h"
9
9
  exclude header "CATransform3D.h"
10
10
  exclude header "CABase.h"
11
+ exclude header "CAValueFunction.h"
11
12
  export *
12
13
  }
@@ -81,6 +81,20 @@ Tags:
81
81
  Typedefs:
82
82
  - Name: NSTextListMarkerFormat
83
83
  SwiftName: NSTextList.MarkerFormat
84
+ - Name: NSAttributedStringDocumentAttributeKey
85
+ SwiftName: NSAttributedString.DocumentAttributeKey
86
+ - Name: NSAttributedStringDocumentReadingOptionKey
87
+ SwiftName: NSAttributedString.DocumentReadingOptionKey
88
+ - Name: NSAttributedStringDocumentType
89
+ SwiftName: NSAttributedString.DocumentType
90
+ - Name: NSTextEffectStyle
91
+ SwiftName: NSAttributedString.TextEffectStyle
92
+ - Name: NSTextHighlightStyle
93
+ SwiftName: NSAttributedString.TextHighlightStyle
94
+ - Name: NSTextHighlightColorScheme
95
+ SwiftName: NSAttributedString.TextHighlightColorScheme
96
+ - Name: NSTextLayoutSectionKey
97
+ SwiftName: NSAttributedString.TextLayoutSectionKey
84
98
  - Name: NSTextTabOptionKey
85
99
  SwiftName: NSTextTab.OptionKey
86
100
  - Name: UIFontDescriptorAttributeName
@@ -0,0 +1,50 @@
1
+ import fs from 'node:fs'
2
+ import path from 'node:path'
3
+ import { parseXml, type XmlElement } from './android-xml'
4
+
5
+ // the layout names and view ids a module's R class declares: every layout
6
+ // file's name, every `@+id/` or `@id/` an attribute names in a layout, and each
7
+ // `<item type="id">` in values, as aapt2 declares them
8
+ export interface AndroidLayoutIds {
9
+ layouts: string[]
10
+ ids: string[]
11
+ // the unqualified `layout` directory's files by name, which Resources inflates
12
+ elements: Map<string, XmlElement>
13
+ }
14
+
15
+ const LAYOUT_DIR = /^layout(?:-[A-Za-z0-9+-]+)?$/
16
+ const ID_REFERENCE = /@\+?id\/([A-Za-z0-9_.]+)/g
17
+ const ID_ITEM = /<item\b[^>]*\btype\s*=\s*"id"[^>]*>/g
18
+ const ITEM_NAME = /\bname\s*=\s*"([^"]+)"/
19
+
20
+ export function readAndroidLayoutIds(moduleDir: string): AndroidLayoutIds {
21
+ const res = path.join(moduleDir, 'src/main/res')
22
+ const layouts = new Set<string>()
23
+ const ids = new Set<string>()
24
+ const elements = new Map<string, XmlElement>()
25
+ for (const dir of fs.existsSync(res) ? fs.readdirSync(res).sort() : []) {
26
+ const directory = path.join(res, dir)
27
+ if (LAYOUT_DIR.test(dir)) {
28
+ for (const entry of fs.readdirSync(directory).sort()) {
29
+ if (!entry.endsWith('.xml')) continue
30
+ layouts.add(entry.slice(0, -'.xml'.length))
31
+ const xml = fs.readFileSync(path.join(directory, entry), 'utf8')
32
+ for (const match of xml.matchAll(ID_REFERENCE)) ids.add(match[1])
33
+ if (dir === 'layout') {
34
+ const root = parseXml(xml, path.join(directory, entry)).children[0]
35
+ if (root) elements.set(entry.slice(0, -'.xml'.length), root)
36
+ }
37
+ }
38
+ } else if (dir.startsWith('values')) {
39
+ for (const entry of fs.readdirSync(directory).sort()) {
40
+ if (!entry.endsWith('.xml')) continue
41
+ const xml = fs.readFileSync(path.join(directory, entry), 'utf8')
42
+ for (const item of xml.matchAll(ID_ITEM)) {
43
+ const name = ITEM_NAME.exec(item[0])?.[1]
44
+ if (name) ids.add(name)
45
+ }
46
+ }
47
+ }
48
+ }
49
+ return { layouts: [...layouts].sort(), ids: [...ids].sort(), elements }
50
+ }
@@ -0,0 +1,41 @@
1
+ import type { XmlElement } from './android-xml'
2
+
3
+ // the framework view classes LayoutInflater can create; each is a Kotlin class
4
+ // of the same name in AndroidViewSources, linked into an app only when one of
5
+ // its layouts names it
6
+ export const androidViewClasses = [
7
+ 'android.view.View',
8
+ 'android.widget.FrameLayout',
9
+ 'android.widget.ImageView',
10
+ 'android.widget.LinearLayout',
11
+ 'android.widget.RelativeLayout',
12
+ 'android.widget.TextView',
13
+ ]
14
+
15
+ // PhoneLayoutInflater's prefixes, then LayoutInflater's own
16
+ const classPrefixes = [
17
+ 'android.widget.',
18
+ 'android.webkit.',
19
+ 'android.app.',
20
+ 'android.view.',
21
+ ]
22
+
23
+ // the classes a set of layout trees names, as the inflater resolves a tag: a
24
+ // dotted name is that class, any other tries each framework prefix in order
25
+ export function layoutViewClasses(roots: Iterable<XmlElement>): string[] {
26
+ const used = new Set<string>()
27
+ const visit = (element: XmlElement) => {
28
+ if (element.name !== 'include' && element.name !== 'merge') {
29
+ if (element.name.includes('.')) used.add(element.name)
30
+ else {
31
+ const found = classPrefixes
32
+ .map((prefix) => prefix + element.name)
33
+ .find((name) => androidViewClasses.includes(name))
34
+ if (found) used.add(found)
35
+ }
36
+ }
37
+ element.children.forEach(visit)
38
+ }
39
+ for (const root of roots) visit(root)
40
+ return [...used].sort()
41
+ }
@@ -2353,7 +2353,12 @@ async function compileExpoSwiftModulesTraced(
2353
2353
  'react-native/package.json',
2354
2354
  ),
2355
2355
  )
2356
- const provider = prebuiltReactNativeCore(reactNativeRoot, module.root, 'expo')
2356
+ const provider = await prebuiltReactNativeCore(
2357
+ projectRoot,
2358
+ reactNativeRoot,
2359
+ module.root,
2360
+ 'expo',
2361
+ )
2357
2362
  const headers = new Map<string, { file: string; relative: string }[]>()
2358
2363
  for (const [file, body] of Object.entries(provider.files)) {
2359
2364
  const relative = file.split('/upstream/react-native/')[1]
@@ -62,6 +62,7 @@ export async function readJavaModuleSpecs(
62
62
  typeof row.className !== 'string' ||
63
63
  (row.name !== null && typeof row.name !== 'string') ||
64
64
  typeof row.source !== 'string' ||
65
+ (row.application !== undefined && typeof row.application !== 'boolean') ||
65
66
  !Array.isArray(row.methods)
66
67
  )
67
68
  throw new Error('Java module reader printed an invalid spec')
@@ -73,6 +74,7 @@ export async function readJavaModuleSpecs(
73
74
  name: row.name,
74
75
  source: row.source,
75
76
  methods: row.methods.map(readBridgeMethod),
77
+ application: row.application === true,
76
78
  }
77
79
  })
78
80
  return { sha256: digest.digest('hex'), specs }
@@ -6,6 +6,8 @@ export interface JavaModuleSpec {
6
6
  name: string | null
7
7
  source: string
8
8
  methods: BridgeMethod[]
9
+ // compiled with the application: it names classes only the application defines
10
+ application: boolean
9
11
  }
10
12
 
11
13
  export interface JavaModuleSpecs {