peachsim 0.1.1641 → 0.1.1653

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 (618) hide show
  1. package/README.md +12 -0
  2. package/cli/app-bundle-resources.ts +57 -0
  3. package/cli/app-catalog.ts +1 -1
  4. package/cli/app-fonts.ts +11 -80
  5. package/cli/app-splash.ts +18 -12
  6. package/cli/bridge-flow-runner.ts +11 -7
  7. package/cli/cloud-client.ts +10 -13
  8. package/cli/command-registry.ts +13 -4
  9. package/cli/commands/box.ts +4 -4
  10. package/cli/commands/control.ts +105 -53
  11. package/cli/commands/coverage-parser.ts +67 -0
  12. package/cli/commands/coverage.ts +550 -0
  13. package/cli/commands/debug.ts +9 -18
  14. package/cli/commands/desktop.ts +19 -7
  15. package/cli/commands/device.ts +14 -9
  16. package/cli/commands/guest-host.ts +6 -10
  17. package/cli/commands/inspect/core.ts +81 -17
  18. package/cli/commands/inspect.ts +13 -8
  19. package/cli/commands/kotlin.ts +2 -2
  20. package/cli/commands/maestro-compare.ts +1 -1
  21. package/cli/commands/platform.ts +20 -11
  22. package/cli/commands/preview.ts +16 -18
  23. package/cli/commands/runtime.ts +3 -2
  24. package/cli/commands/screenshot-layers.ts +1 -1
  25. package/cli/commands/screenshot.ts +1 -1
  26. package/cli/commands/serve.ts +5 -1
  27. package/cli/commands/support.ts +4 -4
  28. package/cli/commands/three-mode.ts +22 -15
  29. package/cli/commands/upload.ts +44 -45
  30. package/cli/current-sim.ts +38 -0
  31. package/cli/desktop-companion.ts +36 -8
  32. package/cli/device-option.ts +1 -1
  33. package/cli/drivers/playwright.ts +40 -0
  34. package/cli/drivers/types.ts +4 -0
  35. package/cli/help-core.ts +1 -1
  36. package/cli/internal-child.ts +2 -1
  37. package/cli/main.ts +9 -3
  38. package/cli/outbound-endpoints.ts +15 -5
  39. package/cli/output-redaction.ts +39 -14
  40. package/cli/remote-simulators.ts +4 -1
  41. package/cli/scene-video.ts +5 -2
  42. package/cli/send-to-box.ts +7 -10
  43. package/cli/telemetry.ts +1 -1
  44. package/cli/ws-bridge.ts +8 -1
  45. package/detox/attempt-events.cjs +3 -1
  46. package/detox/attempt-events.d.cts +1 -1
  47. package/detox/expectations.ts +108 -99
  48. package/detox/frame-offset.d.mts +6 -0
  49. package/detox/frame-offset.mjs +35 -0
  50. package/detox/gestures.ts +6 -18
  51. package/detox/index.ts +169 -101
  52. package/detox/jest-preset.cjs +1 -3
  53. package/detox/jest-transform.cjs +4 -0
  54. package/detox/matchers.ts +3 -0
  55. package/detox/motion-change.cjs +52 -118
  56. package/detox/motion-change.d.cts +6 -27
  57. package/detox/motion-leg-starts.cjs +20 -0
  58. package/detox/motion-leg-starts.d.cts +8 -0
  59. package/dist-lib/agent-daemon-client.cjs +1 -1
  60. package/dist-lib/agent-events.cjs +1 -1
  61. package/dist-lib/attached-projects.cjs +1 -1
  62. package/dist-lib/auth/shared-session.cjs +1 -1
  63. package/dist-lib/backend-origin.cjs +3 -3
  64. package/dist-lib/beta.cjs +1 -1
  65. package/dist-lib/beta.mjs +1 -1
  66. package/dist-lib/bridge-constants.cjs +1 -1
  67. package/dist-lib/bridge-contract-input.cjs +65 -1
  68. package/dist-lib/bridge-contract-input.mjs +63 -1
  69. package/dist-lib/bridge-contract.cjs +19 -1
  70. package/dist-lib/bridge-contract.mjs +17 -1
  71. package/dist-lib/bundle-channel.cjs +38332 -14940
  72. package/dist-lib/capture-contract.cjs +1 -1
  73. package/dist-lib/capture-contract.mjs +1 -1
  74. package/dist-lib/cloud-contract.cjs +1 -1
  75. package/dist-lib/cloud-contract.mjs +1 -1
  76. package/dist-lib/cloud-test-args.cjs +1 -1
  77. package/dist-lib/cloud-test-args.mjs +1 -1
  78. package/dist-lib/cloud.cjs +1 -1
  79. package/dist-lib/cloud.mjs +1 -1
  80. package/dist-lib/config.cjs +1 -1
  81. package/dist-lib/config.mjs +5 -3
  82. package/dist-lib/detox/index.cjs +1247 -4511
  83. package/dist-lib/detox/jest-preset.cjs +1 -3
  84. package/dist-lib/detox/jest-transform.cjs +4 -0
  85. package/dist-lib/dev-bundle-resolution.cjs +28 -24
  86. package/dist-lib/expo-swift-bundle.cjs +35243 -13172
  87. package/dist-lib/expo-swift-metadata.cjs +1 -1
  88. package/dist-lib/expo-swift-metadata.mjs +1 -1
  89. package/dist-lib/home-paths.cjs +1 -1
  90. package/dist-lib/host/bridge-host.cjs +45285 -63163
  91. package/dist-lib/host/fetch-proxy-handler.cjs +3544 -11
  92. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  93. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  94. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  95. package/dist-lib/host/websocket-proxy.cjs +1 -1
  96. package/dist-lib/index.cjs +1997 -2069
  97. package/dist-lib/jump-to-source-babel.cjs +1 -1
  98. package/dist-lib/jump-to-source-native.cjs +1 -1
  99. package/dist-lib/kotlin-host.cjs +2 -2
  100. package/dist-lib/menu.cjs +14 -6
  101. package/dist-lib/menu.mjs +14 -6
  102. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  103. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  104. package/dist-lib/metro-production-bundle.cjs +1 -1
  105. package/dist-lib/metro-production-bundle.mjs +1 -1
  106. package/dist-lib/metro.cjs +468 -563
  107. package/dist-lib/native-app-identity-project.cjs +128 -292
  108. package/dist-lib/native-app-identity-project.mjs +1262 -51
  109. package/dist-lib/native-app-identity.cjs +8 -3
  110. package/dist-lib/native-app-identity.mjs +8 -3
  111. package/dist-lib/native-firebase-metadata.cjs +1 -1
  112. package/dist-lib/native-firebase-metadata.mjs +1 -1
  113. package/dist-lib/plist.cjs +2 -244
  114. package/dist-lib/plist.mjs +1 -1
  115. package/dist-lib/profiles.cjs +1 -1
  116. package/dist-lib/public-brand.cjs +1 -1
  117. package/dist-lib/public-origins-lib-esm.json +290 -0
  118. package/dist-lib/public-origins-lib-static.json +1 -0
  119. package/dist-lib/public-origins-lib.json +1852 -0
  120. package/dist-lib/react-native-host-modules.cjs +1 -1
  121. package/dist-lib/react-native-host-modules.mjs +1 -1
  122. package/dist-lib/scripts/dev-server-scanner.cjs +14 -253
  123. package/dist-lib/sdk.cjs +84 -16
  124. package/dist-lib/sdk.mjs +82 -15
  125. package/dist-lib/skills.cjs +51248 -75450
  126. package/dist-lib/swift-compile.cjs +26154 -1245
  127. package/dist-lib/swift-compile.mjs +26151 -1230
  128. package/dist-lib/swift-package.cjs +79 -1
  129. package/dist-lib/swift-package.mjs +75 -1
  130. package/dist-lib/swift-submit.cjs +1 -1
  131. package/dist-lib/swift-submit.mjs +1 -1
  132. package/dist-lib/swift-toolchain.cjs +1 -1
  133. package/dist-lib/swift.cjs +1 -1
  134. package/dist-lib/vite-swift.cjs +34394 -12323
  135. package/dist-lib/vite.cjs +373 -298
  136. package/dist-lib/worklet-executable.cjs +1 -1
  137. package/dist-lib/worklet-executable.mjs +1 -1
  138. package/dist-types/packages/peach-compat/src/engine-config.d.ts +2 -0
  139. package/dist-types/packages/peach-compat/src/stubs/form-sheet-spring.d.ts +9 -0
  140. package/dist-types/packages/peach-compat/src/stubs/native-evaluation-lease.d.ts +47 -0
  141. package/dist-types/packages/peach-compat/src/stubs/native-seams/react-native-cookies.d.ts +113 -0
  142. package/dist-types/packages/peach-compat/src/stubs/native-seams/react-native-gesture-handler.d.ts +154 -0
  143. package/dist-types/packages/peach-compat/src/stubs/screen-transition-math.d.ts +756 -0
  144. package/dist-types/packages/peach-compat/src/stubs/transition-scalar.d.ts +25 -0
  145. package/dist-types/packages/peach-engine/src/billing/plans.d.ts +64 -0
  146. package/dist-types/packages/peach-engine/src/browser-page-target.d.ts +2 -0
  147. package/dist-types/packages/peach-engine/src/bundle-platform-url.d.ts +3 -0
  148. package/dist-types/packages/peach-engine/src/capture/browser-accessibility-host.d.ts +3 -0
  149. package/dist-types/packages/peach-engine/src/capture/browser-composite.d.ts +55 -0
  150. package/dist-types/packages/peach-engine/src/capture/browserAccessibilityContract.d.ts +27 -0
  151. package/dist-types/packages/peach-engine/src/capture/nativeScreenCaptureContract.d.ts +22 -0
  152. package/dist-types/packages/peach-engine/src/cli-companion.d.ts +36 -0
  153. package/dist-types/packages/peach-engine/src/components/native-ui/webview-frame-bridge.d.ts +34 -0
  154. package/dist-types/packages/peach-engine/src/config.d.ts +5 -0
  155. package/dist-types/packages/peach-engine/src/engine/android-stretch-effect.d.ts +57 -0
  156. package/dist-types/packages/peach-engine/src/engine/animated-driven-style.d.ts +47 -0
  157. package/dist-types/packages/peach-engine/src/engine/animated-value.d.ts +5 -0
  158. package/dist-types/packages/peach-engine/src/engine/animated.d.ts +195 -0
  159. package/dist-types/packages/peach-engine/src/engine/animation-clockContract.d.ts +15 -0
  160. package/dist-types/packages/peach-engine/src/engine/animation-graph.d.ts +148 -0
  161. package/dist-types/packages/peach-engine/src/engine/app-catalog-wire.d.ts +10 -0
  162. package/dist-types/packages/peach-engine/src/engine/app-font-registry.d.ts +87 -0
  163. package/dist-types/packages/peach-engine/src/engine/attributed-paragraph-paint.d.ts +7 -0
  164. package/dist-types/packages/peach-engine/src/engine/attributed-paragraph.d.ts +123 -0
  165. package/dist-types/packages/peach-engine/src/engine/audioContract.d.ts +16 -0
  166. package/dist-types/packages/peach-engine/src/engine/canvaskit-api.d.ts +93 -0
  167. package/dist-types/packages/peach-engine/src/engine/canvaskit-renderer.d.ts +216 -0
  168. package/dist-types/packages/peach-engine/src/engine/config-plugin-fonts.d.ts +40 -0
  169. package/dist-types/packages/peach-engine/src/engine/config-plugin-splash.d.ts +25 -0
  170. package/dist-types/packages/peach-engine/src/engine/cull-visibility.d.ts +44 -0
  171. package/dist-types/packages/peach-engine/src/engine/damage-rect.d.ts +19 -0
  172. package/dist-types/packages/peach-engine/src/engine/engine-resource.d.ts +6 -0
  173. package/dist-types/packages/peach-engine/src/engine/expo-manifest.d.ts +5 -0
  174. package/dist-types/packages/peach-engine/src/engine/fiber-debug-metadata.d.ts +30 -0
  175. package/dist-types/packages/peach-engine/src/engine/font-config.d.ts +139 -0
  176. package/dist-types/packages/peach-engine/src/engine/generated/sf-pro-font.d.ts +1 -0
  177. package/dist-types/packages/peach-engine/src/engine/glass-material.d.ts +31 -0
  178. package/dist-types/packages/peach-engine/src/engine/host-composite.d.ts +100 -0
  179. package/dist-types/packages/peach-engine/src/engine/hosted-semantics.d.ts +49 -0
  180. package/dist-types/packages/peach-engine/src/engine/image-audit.d.ts +70 -0
  181. package/dist-types/packages/peach-engine/src/engine/image-loader.d.ts +350 -0
  182. package/dist-types/packages/peach-engine/src/engine/inspect-info.d.ts +27 -0
  183. package/dist-types/packages/peach-engine/src/engine/inspect-outline.d.ts +14 -0
  184. package/dist-types/packages/peach-engine/src/engine/inspect-visibility.d.ts +33 -0
  185. package/dist-types/packages/peach-engine/src/engine/ios-fast-scroll.d.ts +16 -0
  186. package/dist-types/packages/peach-engine/src/engine/layout-sab.d.ts +43 -0
  187. package/dist-types/packages/peach-engine/src/engine/liquid-glass-rect.d.ts +23 -0
  188. package/dist-types/packages/peach-engine/src/engine/liquid-glass-shaders.d.ts +9 -0
  189. package/dist-types/packages/peach-engine/src/engine/liquid-glass.d.ts +283 -0
  190. package/dist-types/packages/peach-engine/src/engine/live-object-counts.d.ts +6 -0
  191. package/dist-types/packages/peach-engine/src/engine/lottie-runtime.d.ts +32 -0
  192. package/dist-types/packages/peach-engine/src/engine/lottie-types.d.ts +138 -0
  193. package/dist-types/packages/peach-engine/src/engine/memory-counts.d.ts +27 -0
  194. package/dist-types/packages/peach-engine/src/engine/metalDirectContract.d.ts +108 -0
  195. package/dist-types/packages/peach-engine/src/engine/metalShaderContract.d.ts +217 -0
  196. package/dist-types/packages/peach-engine/src/engine/native-animation-driver.d.ts +112 -0
  197. package/dist-types/packages/peach-engine/src/engine/native-animation-graph.d.ts +62 -0
  198. package/dist-types/packages/peach-engine/src/engine/native-layout.d.ts +133 -0
  199. package/dist-types/packages/peach-engine/src/engine/native-resources.d.ts +26 -0
  200. package/dist-types/packages/peach-engine/src/engine/nativeReanimatedContract.d.ts +25 -0
  201. package/dist-types/packages/peach-engine/src/engine/nativeReplayContract.d.ts +64 -0
  202. package/dist-types/packages/peach-engine/src/engine/node.d.ts +589 -0
  203. package/dist-types/packages/peach-engine/src/engine/paint-boundary-types.d.ts +112 -0
  204. package/dist-types/packages/peach-engine/src/engine/paint-boundary.d.ts +57 -0
  205. package/dist-types/packages/peach-engine/src/engine/portalContract.d.ts +21 -0
  206. package/dist-types/packages/peach-engine/src/engine/portals.d.ts +20 -0
  207. package/dist-types/packages/peach-engine/src/engine/render-damage.d.ts +107 -0
  208. package/dist-types/packages/peach-engine/src/engine/riveContract.d.ts +420 -0
  209. package/dist-types/packages/peach-engine/src/engine/rn-spring.d.ts +51 -0
  210. package/dist-types/packages/peach-engine/src/engine/scene-table.d.ts +379 -0
  211. package/dist-types/packages/peach-engine/src/engine/scroll-momentum-math.d.ts +152 -0
  212. package/dist-types/packages/peach-engine/src/engine/scroll-pan-contacts.d.ts +10 -0
  213. package/dist-types/packages/peach-engine/src/engine/scroll-platform.d.ts +75 -0
  214. package/dist-types/packages/peach-engine/src/engine/scroll-range.d.ts +14 -0
  215. package/dist-types/packages/peach-engine/src/engine/scroll-velocity.d.ts +14 -0
  216. package/dist-types/packages/peach-engine/src/engine/scroll.d.ts +320 -0
  217. package/dist-types/packages/peach-engine/src/engine/signal.d.ts +7 -0
  218. package/dist-types/packages/peach-engine/src/engine/snapshot-cache-policy.d.ts +6 -0
  219. package/dist-types/packages/peach-engine/src/engine/svg-geometry.d.ts +41 -0
  220. package/dist-types/packages/peach-engine/src/engine/text-attachment-paragraphs.d.ts +10 -0
  221. package/dist-types/packages/peach-engine/src/engine/text-decoration.d.ts +11 -0
  222. package/dist-types/packages/peach-engine/src/engine/text-line-break.d.ts +22 -0
  223. package/dist-types/packages/peach-engine/src/engine/text-paint-receipt.d.ts +98 -0
  224. package/dist-types/packages/peach-engine/src/engine/text-paragraph.d.ts +11 -0
  225. package/dist-types/packages/peach-engine/src/engine/text-paragraphContract.d.ts +34 -0
  226. package/dist-types/packages/peach-engine/src/engine/text-transform.d.ts +1 -0
  227. package/dist-types/packages/peach-engine/src/engine/types.d.ts +657 -0
  228. package/dist-types/packages/peach-engine/src/engine/visible-frame.d.ts +54 -0
  229. package/dist-types/packages/peach-engine/src/engine/webrtcContract.d.ts +74 -0
  230. package/dist-types/packages/peach-engine/src/graphite-stats-fields.d.ts +184 -0
  231. package/dist-types/packages/peach-engine/src/guest-import-meta.d.ts +12 -0
  232. package/dist-types/packages/peach-engine/src/guest-module-overrides.d.ts +7 -0
  233. package/dist-types/packages/peach-engine/src/ios/app-card-types.d.ts +7 -0
  234. package/dist-types/packages/peach-engine/src/ios/apps/canvas-map-data.d.ts +177 -0
  235. package/dist-types/packages/peach-engine/src/ios/aux-home-scene.d.ts +54 -0
  236. package/dist-types/packages/peach-engine/src/ios/chrome-metrics.d.ts +47 -0
  237. package/dist-types/packages/peach-engine/src/ios/constants.d.ts +21 -0
  238. package/dist-types/packages/peach-engine/src/ios/duo-housing.d.ts +37 -0
  239. package/dist-types/packages/peach-engine/src/ios/home/types.d.ts +29 -0
  240. package/dist-types/packages/peach-engine/src/ios/home-app-catalog.d.ts +43 -0
  241. package/dist-types/packages/peach-engine/src/ios/photo-store.d.ts +73 -0
  242. package/dist-types/packages/peach-engine/src/ios/photoLibraryContract.d.ts +166 -0
  243. package/dist-types/packages/peach-engine/src/ios/shell-controller-types.d.ts +21 -0
  244. package/dist-types/packages/peach-engine/src/ios/shell-transition-debug.d.ts +18 -0
  245. package/dist-types/packages/peach-engine/src/metro-asset-path.d.ts +21 -0
  246. package/dist-types/packages/peach-engine/src/metro-fingerprint-registry-client.d.ts +11 -0
  247. package/dist-types/packages/peach-engine/src/metro-fingerprint.d.ts +38 -0
  248. package/dist-types/packages/peach-engine/src/native-preview-bundle.d.ts +44 -0
  249. package/dist-types/packages/peach-engine/src/observability/types.d.ts +74 -0
  250. package/dist-types/packages/peach-engine/src/peach-warm-manifest.d.ts +32 -0
  251. package/dist-types/packages/peach-engine/src/permissions/app-settings-client.d.ts +25 -0
  252. package/dist-types/packages/peach-engine/src/permissions/system-permission-types.d.ts +20 -0
  253. package/dist-types/packages/peach-engine/src/platform/android-back-panel.d.ts +131 -0
  254. package/dist-types/packages/peach-engine/src/platform/android-gesture-exclusion.d.ts +28 -0
  255. package/dist-types/packages/peach-engine/src/platform/android-predictive-back.d.ts +33 -0
  256. package/dist-types/packages/peach-engine/src/platform/system-bars-state.d.ts +14 -0
  257. package/dist-types/packages/peach-engine/src/playwright-sim-host.d.ts +1 -0
  258. package/dist-types/packages/peach-engine/src/preview/bundle-layout.d.ts +8 -0
  259. package/dist-types/packages/peach-engine/src/preview/bundle-variantContract.d.ts +24 -0
  260. package/dist-types/packages/peach-engine/src/preview/capture-bundle.d.ts +26 -0
  261. package/dist-types/packages/peach-engine/src/preview/compress-node.d.ts +2 -0
  262. package/dist-types/packages/peach-engine/src/preview/compress.d.ts +2 -0
  263. package/dist-types/packages/peach-engine/src/preview/presigned-upload.d.ts +60 -0
  264. package/dist-types/packages/peach-engine/src/preview/trace.d.ts +144 -0
  265. package/dist-types/packages/peach-engine/src/preview/upload-protocol.d.ts +152 -0
  266. package/dist-types/packages/peach-engine/src/profiler/animation-recording-loader.d.ts +1 -0
  267. package/dist-types/packages/peach-engine/src/profiler/profile-trace.d.ts +4 -0
  268. package/dist-types/packages/peach-engine/src/react-bridge.d.ts +3 -0
  269. package/dist-types/packages/peach-engine/src/react-native/AppState.d.ts +45 -0
  270. package/dist-types/packages/peach-engine/src/react-native/Appearance.d.ts +34 -0
  271. package/dist-types/packages/peach-engine/src/react-native/framework-colors-data.d.ts +2 -0
  272. package/dist-types/packages/peach-engine/src/react-native/host-services.d.ts +42 -0
  273. package/dist-types/packages/peach-engine/src/react-native/layout-animation.d.ts +22 -0
  274. package/dist-types/packages/peach-engine/src/react-native/platform-colors.d.ts +17 -0
  275. package/dist-types/packages/peach-engine/src/remote-stream/client-config.d.ts +10 -0
  276. package/dist-types/packages/peach-engine/src/remote-stream/cloud-display.d.ts +58 -0
  277. package/dist-types/packages/peach-engine/src/remote-stream/scene-recording.d.ts +45 -0
  278. package/dist-types/packages/peach-engine/src/render-worker/animated-drive-output.d.ts +35 -0
  279. package/dist-types/packages/peach-engine/src/render-worker/app-load.d.ts +16 -0
  280. package/dist-types/packages/peach-engine/src/render-worker/aux-surface-types.d.ts +2 -0
  281. package/dist-types/packages/peach-engine/src/render-worker/canvaskit-shared.d.ts +42 -0
  282. package/dist-types/packages/peach-engine/src/render-worker/canvaskit-webgpu.d.ts +434 -0
  283. package/dist-types/packages/peach-engine/src/render-worker/canvaskit-worker-init.d.ts +12 -0
  284. package/dist-types/packages/peach-engine/src/render-worker/compositor-backend.d.ts +31 -0
  285. package/dist-types/packages/peach-engine/src/render-worker/compositor-gpu.d.ts +202 -0
  286. package/dist-types/packages/peach-engine/src/render-worker/compositor-protocol.d.ts +1945 -0
  287. package/dist-types/packages/peach-engine/src/render-worker/compositor-runtime/scroll-drag-resample.d.ts +44 -0
  288. package/dist-types/packages/peach-engine/src/render-worker/css-keyframes-drive.d.ts +36 -0
  289. package/dist-types/packages/peach-engine/src/render-worker/edit-menu-geometry.d.ts +8 -0
  290. package/dist-types/packages/peach-engine/src/render-worker/engine-resource-relay.d.ts +21 -0
  291. package/dist-types/packages/peach-engine/src/render-worker/expo-widgetContract.d.ts +16 -0
  292. package/dist-types/packages/peach-engine/src/render-worker/gesture-seam-protocol.d.ts +152 -0
  293. package/dist-types/packages/peach-engine/src/render-worker/graph-linked-value.d.ts +29 -0
  294. package/dist-types/packages/peach-engine/src/render-worker/graphite-pipeline-compiler-contract.d.ts +49 -0
  295. package/dist-types/packages/peach-engine/src/render-worker/graphite-pipeline-compiler.d.ts +12 -0
  296. package/dist-types/packages/peach-engine/src/render-worker/host-service-protocol.d.ts +756 -0
  297. package/dist-types/packages/peach-engine/src/render-worker/image-lifecycle-event.d.ts +22 -0
  298. package/dist-types/packages/peach-engine/src/render-worker/image-pixel-contract.d.ts +48 -0
  299. package/dist-types/packages/peach-engine/src/render-worker/live-frame-mirror.d.ts +34 -0
  300. package/dist-types/packages/peach-engine/src/render-worker/map-command-channel.d.ts +189 -0
  301. package/dist-types/packages/peach-engine/src/render-worker/mapNativeContract.d.ts +101 -0
  302. package/dist-types/packages/peach-engine/src/render-worker/native-dynamic-synchronizable.d.ts +22 -0
  303. package/dist-types/packages/peach-engine/src/render-worker/native-menu-gesture.d.ts +9 -0
  304. package/dist-types/packages/peach-engine/src/render-worker/native-ui-commandContract.d.ts +23 -0
  305. package/dist-types/packages/peach-engine/src/render-worker/native-ui-protocol.d.ts +1087 -0
  306. package/dist-types/packages/peach-engine/src/render-worker/native-widgetContract.d.ts +100 -0
  307. package/dist-types/packages/peach-engine/src/render-worker/nativeAnimMirrorContract.d.ts +174 -0
  308. package/dist-types/packages/peach-engine/src/render-worker/nativeSyncReplyContract.d.ts +11 -0
  309. package/dist-types/packages/peach-engine/src/render-worker/one-native-contentContract.d.ts +54 -0
  310. package/dist-types/packages/peach-engine/src/render-worker/pointerSampleContract.d.ts +14 -0
  311. package/dist-types/packages/peach-engine/src/render-worker/protocol.d.ts +880 -0
  312. package/dist-types/packages/peach-engine/src/render-worker/reanimated-css-contract.d.ts +63 -0
  313. package/dist-types/packages/peach-engine/src/render-worker/reanimated-readiness.d.ts +29 -0
  314. package/dist-types/packages/peach-engine/src/render-worker/resilient-frame-clock.d.ts +22 -0
  315. package/dist-types/packages/peach-engine/src/render-worker/retained-app-load.d.ts +20 -0
  316. package/dist-types/packages/peach-engine/src/render-worker/screen-edge-swipe-commit-protocol.d.ts +1 -0
  317. package/dist-types/packages/peach-engine/src/render-worker/screen-form-sheet-commit-protocol.d.ts +26 -0
  318. package/dist-types/packages/peach-engine/src/render-worker/scroll-mirror-tenant.d.ts +37 -0
  319. package/dist-types/packages/peach-engine/src/render-worker/scroll-mirror.d.ts +164 -0
  320. package/dist-types/packages/peach-engine/src/render-worker/shell-event-registry.d.ts +119 -0
  321. package/dist-types/packages/peach-engine/src/render-worker/shell-gesture-regions.d.ts +41 -0
  322. package/dist-types/packages/peach-engine/src/render-worker/shell-protocol.d.ts +603 -0
  323. package/dist-types/packages/peach-engine/src/render-worker/shell-scene-schema.d.ts +101 -0
  324. package/dist-types/packages/peach-engine/src/render-worker/shell-tree-inline-sources.d.ts +13 -0
  325. package/dist-types/packages/peach-engine/src/render-worker/shell-tree-wire.d.ts +87 -0
  326. package/dist-types/packages/peach-engine/src/render-worker/test-bridge-protocol.d.ts +47 -0
  327. package/dist-types/packages/peach-engine/src/render-worker/text-inputContract.d.ts +93 -0
  328. package/dist-types/packages/peach-engine/src/render-worker/tree-sync-port.d.ts +102 -0
  329. package/dist-types/packages/peach-engine/src/render-worker/webgpu-frame-transaction.d.ts +292 -0
  330. package/dist-types/packages/peach-engine/src/render-worker/webgpu-readback-scheduler.d.ts +107 -0
  331. package/dist-types/packages/peach-engine/src/render-worker/webview-capture-protocol.d.ts +16 -0
  332. package/dist-types/packages/peach-engine/src/render-worker/worker-input-runtime.d.ts +211 -0
  333. package/dist-types/packages/peach-engine/src/render-worker/worker-storage.d.ts +33 -0
  334. package/dist-types/packages/peach-engine/src/render-worker/worklet-runtime.d.ts +987 -0
  335. package/dist-types/packages/peach-engine/src/render-worker/worklet-sab.d.ts +24 -0
  336. package/dist-types/packages/peach-engine/src/rolldown-bundle-inventory.d.ts +84 -0
  337. package/dist-types/packages/peach-engine/src/rolldown-production-fingerprint.d.ts +31 -0
  338. package/dist-types/packages/peach-engine/src/screenshots/timeline-assets.d.ts +10 -0
  339. package/dist-types/packages/peach-engine/src/screenshots/tokens.d.ts +9 -0
  340. package/dist-types/packages/peach-engine/src/settings/devices.d.ts +70 -0
  341. package/dist-types/packages/peach-engine/src/settings/duo-fold-bus.d.ts +87 -0
  342. package/dist-types/packages/peach-engine/src/settings/interface-rotation.d.ts +30 -0
  343. package/dist-types/packages/peach-engine/src/settings/react-native-configuration.d.ts +12 -0
  344. package/dist-types/packages/peach-engine/src/settings/scene-geometryContract.d.ts +40 -0
  345. package/dist-types/packages/peach-engine/src/settings/store.d.ts +37 -0
  346. package/dist-types/packages/peach-engine/src/shell-events.d.ts +203 -0
  347. package/dist-types/packages/peach-engine/src/shell-intent.d.ts +68 -0
  348. package/dist-types/packages/peach-engine/src/sootsim-event.d.ts +35 -0
  349. package/dist-types/packages/peach-engine/src/top-overlay-state.d.ts +5 -0
  350. package/dist-types/packages/peach-engine/src/web-authentication-automation-host.d.ts +2 -0
  351. package/dist-types/packages/peach-engine/src/webAuthenticationContract.d.ts +34 -0
  352. package/dist-types/packages/peach-engine/src/webview-automation-host.d.ts +180 -0
  353. package/dist-types/packages/peach-engine/src/wireframe-mode.d.ts +16 -0
  354. package/dist-types/packages/peach-globals/src/frameBreakdownContract.d.ts +16 -0
  355. package/dist-types/packages/peach-globals/src/index.d.ts +3311 -0
  356. package/dist-types/packages/peach-globals/src/nativeSurfaceContract.d.ts +76 -0
  357. package/dist-types/packages/peach-globals/src/pointerSourceEventContract.d.ts +8 -0
  358. package/dist-types/packages/peach-globals/src/profileTrace.d.ts +11 -0
  359. package/dist-types/packages/peach-globals/src/profilerContract.d.ts +223 -0
  360. package/dist-types/packages/peach-kit/src/capabilities.d.ts +721 -0
  361. package/dist-types/packages/peach-kit/src/internal.d.ts +4 -0
  362. package/dist-types/packages/peach-kit/src/materials/types.d.ts +27 -0
  363. package/dist-types/packages/peach-kit/src/materials/uikit-blur-material.d.ts +14 -0
  364. package/dist-types/packages/peach-kit/src/navigation-types.d.ts +11 -0
  365. package/dist-types/packages/peach-kit/src/react-bridge.d.ts +53 -0
  366. package/dist-types/packages/peach-kit/src/runtime.d.ts +26 -0
  367. package/dist-types/packages/peach-kit/src/ui/hosting-safe-area.d.ts +24 -0
  368. package/dist-types/packages/peach-kit/src/ui/popover-placement.d.ts +53 -0
  369. package/dist-types/packages/peach-kit/src/ui/presentationContract.d.ts +17 -0
  370. package/kotlin/ComposeSources/PeachComposeHost.kt +1 -1
  371. package/kotlin/JniSources/com/facebook/jni/HybridData.kt +0 -2
  372. package/kotlin/JniSources/dev/peach/jni/NativeBindings.kt +0 -2
  373. package/kotlin/JniTransportSources/dev/peach/jni/integration/JniTransport.kt +0 -2
  374. package/kotlin/README.md +6 -0
  375. package/package.json +22 -2
  376. package/runtime-companion.json +1 -0
  377. package/skills/contrast/SKILL.md +1 -0
  378. package/src/appBundleResourcesContract.ts +51 -0
  379. package/src/assetCatalogContract.ts +21 -0
  380. package/src/backend-origin.ts +3 -1
  381. package/src/bridge-contract-input.ts +84 -0
  382. package/src/bridge-contract.ts +35 -3
  383. package/src/browser-launch-policy.ts +1 -0
  384. package/src/bundle-channel.mjs +4 -2
  385. package/src/cli-runtime.ts +55 -0
  386. package/src/crash-fingerprint.ts +26 -0
  387. package/src/dev-bundle-resolution.ts +50 -23
  388. package/src/device-catalog.ts +1159 -0
  389. package/src/host/bridge-host.ts +20 -37
  390. package/src/host/browser-pointer.ts +71 -0
  391. package/src/host/dev-server-package-versions.ts +23 -0
  392. package/src/host/fetch-proxy-handler.ts +17 -4
  393. package/src/host/staged-host-files.ts +28 -4
  394. package/src/installed-package-versions.ts +142 -38
  395. package/src/kotlin-host.ts +1 -1
  396. package/src/launchMetadataContract.ts +1 -0
  397. package/src/menu.ts +12 -4
  398. package/src/metro-plugin.ts +4 -4
  399. package/src/metro-project-root.ts +68 -0
  400. package/src/native-app-identity-project.ts +47 -38
  401. package/src/nitro-adapter.lock.json +26 -0
  402. package/src/nitro-adapter.ts +103 -0
  403. package/src/nitro-bundle.ts +24 -10
  404. package/src/nitro-compile.ts +33 -51
  405. package/src/nitro-source.ts +177 -96
  406. package/src/nitroAdapterContract.ts +217 -0
  407. package/src/nitroContract.ts +24 -11
  408. package/src/process-group.ts +41 -34
  409. package/src/react-bridge-importers.ts +28 -0
  410. package/src/reactNativeConfigurationContract.ts +36 -0
  411. package/src/runtime-assets.ts +7 -2
  412. package/src/runtime-delivery.ts +8 -7
  413. package/src/runtimePlatformContract.ts +70 -0
  414. package/src/screenshots/frame-compose.ts +42 -43
  415. package/src/screenshots/org-deck.ts +9 -4
  416. package/src/screenshots/preset-names.ts +29 -0
  417. package/src/screenshots/registry.ts +5 -5
  418. package/src/screenshots/schema.ts +1 -1
  419. package/src/screenshots/screenshotContract.ts +971 -0
  420. package/src/settings-flags.ts +107 -0
  421. package/src/settingsContract.ts +609 -0
  422. package/src/storageSnapshotContract.ts +344 -0
  423. package/src/stub-pattern-matcher.ts +550 -0
  424. package/src/swift-compile.ts +926 -47
  425. package/src/swift-compiler-digest.ts +17 -3
  426. package/src/swift-distribution.lock.json +49 -22
  427. package/src/swift-host.ts +167 -52
  428. package/src/swift-objc-compile.ts +86 -26
  429. package/src/swift-objc-export.ts +532 -0
  430. package/src/swift-objc-import.ts +769 -0
  431. package/src/swift-objc-metadata.ts +285 -10
  432. package/src/swift-objc-sdk.ts +13970 -158
  433. package/src/swift-objc-standin.ts +137 -1
  434. package/src/swift-package.ts +94 -0
  435. package/src/swift-packages.ts +5 -5
  436. package/src/swift-root-lock.ts +241 -92
  437. package/src/swift-submit.ts +6 -0
  438. package/src/swiftContract.ts +99 -0
  439. package/src/target-matcher.ts +6 -1
  440. package/src/vite-plugin.ts +14 -40
  441. package/src/worker-system-chunks.ts +1 -1
  442. package/src/workerChunkContract.ts +5 -0
  443. package/src/worklets-babel.ts +24 -5
  444. package/src/xcode-project.ts +103 -11
  445. package/src/xcode-target-members.ts +10 -3
  446. package/cli/drivers/playwright-sim-host.ts +0 -825
  447. package/kotlin/fixtures/counter/Counter.d.kt.ts +0 -17
  448. package/kotlin/fixtures/counter/Counter.kt +0 -51
  449. package/kotlin/fixtures/counter/CounterApp.native.tsx +0 -61
  450. package/kotlin/fixtures/counter/CounterApp.tsx +0 -3
  451. package/kotlin/fixtures/counter/CounterScreen.d.kt.ts +0 -8
  452. package/kotlin/fixtures/counter/CounterScreen.kt +0 -56
  453. package/kotlin/fixtures/counter/app/_layout.tsx +0 -4
  454. package/kotlin/fixtures/counter/app/index+spa.tsx +0 -1
  455. package/kotlin/fixtures/counter/app/routes.d.ts +0 -18
  456. package/kotlin/fixtures/counter/package.json +0 -20
  457. package/kotlin/fixtures/counter/tsconfig.json +0 -19
  458. package/kotlin/fixtures/counter/vite.config.ts +0 -20
  459. package/kotlin/fixtures/headless-counter/Headless.kt +0 -234
  460. package/kotlin/fixtures/import-animation/Animation.d.kt.ts +0 -7
  461. package/kotlin/fixtures/import-animation/Animation.kt +0 -80
  462. package/kotlin/fixtures/import-animation/ImportAnimation.native.tsx +0 -13
  463. package/kotlin/fixtures/import-animation/README.md +0 -24
  464. package/kotlin/fixtures/import-animation/app/_layout.tsx +0 -4
  465. package/kotlin/fixtures/import-animation/app/index+spa.tsx +0 -1
  466. package/kotlin/fixtures/import-animation/app/routes.d.ts +0 -18
  467. package/kotlin/fixtures/import-animation/package.json +0 -23
  468. package/kotlin/fixtures/import-animation/tsconfig.json +0 -20
  469. package/kotlin/fixtures/import-animation/vite.config.ts +0 -20
  470. package/kotlin/fixtures/import-drawing/Drawing.d.kt.ts +0 -7
  471. package/kotlin/fixtures/import-drawing/Drawing.kt +0 -101
  472. package/kotlin/fixtures/import-drawing/ImportDrawing.native.tsx +0 -18
  473. package/kotlin/fixtures/import-drawing/README.md +0 -34
  474. package/kotlin/fixtures/import-drawing/app/_layout.tsx +0 -4
  475. package/kotlin/fixtures/import-drawing/app/index+spa.tsx +0 -1
  476. package/kotlin/fixtures/import-drawing/package.json +0 -23
  477. package/kotlin/fixtures/import-drawing/tsconfig.json +0 -20
  478. package/kotlin/fixtures/import-drawing/vite.config.ts +0 -20
  479. package/kotlin/fixtures/import-editor/Editor.d.kt.ts +0 -7
  480. package/kotlin/fixtures/import-editor/Editor.kt +0 -59
  481. package/kotlin/fixtures/import-editor/ImportEditor.native.tsx +0 -23
  482. package/kotlin/fixtures/import-editor/README.md +0 -27
  483. package/kotlin/fixtures/import-editor/app/_layout.tsx +0 -4
  484. package/kotlin/fixtures/import-editor/app/index+spa.tsx +0 -1
  485. package/kotlin/fixtures/import-editor/package.json +0 -23
  486. package/kotlin/fixtures/import-editor/tsconfig.json +0 -20
  487. package/kotlin/fixtures/import-editor/vite.config.ts +0 -20
  488. package/kotlin/fixtures/import-effects/Effects.d.kt.ts +0 -7
  489. package/kotlin/fixtures/import-effects/Effects.kt +0 -87
  490. package/kotlin/fixtures/import-effects/ImportEffects.native.tsx +0 -13
  491. package/kotlin/fixtures/import-effects/README.md +0 -19
  492. package/kotlin/fixtures/import-effects/app/_layout.tsx +0 -4
  493. package/kotlin/fixtures/import-effects/app/index+spa.tsx +0 -1
  494. package/kotlin/fixtures/import-effects/package.json +0 -23
  495. package/kotlin/fixtures/import-effects/tsconfig.json +0 -20
  496. package/kotlin/fixtures/import-effects/vite.config.ts +0 -20
  497. package/kotlin/fixtures/import-layout/ImportLayout.native.tsx +0 -13
  498. package/kotlin/fixtures/import-layout/Layout.d.kt.ts +0 -7
  499. package/kotlin/fixtures/import-layout/Layout.kt +0 -72
  500. package/kotlin/fixtures/import-layout/README.md +0 -24
  501. package/kotlin/fixtures/import-layout/app/_layout.tsx +0 -4
  502. package/kotlin/fixtures/import-layout/app/index+spa.tsx +0 -1
  503. package/kotlin/fixtures/import-layout/package.json +0 -23
  504. package/kotlin/fixtures/import-layout/tsconfig.json +0 -20
  505. package/kotlin/fixtures/import-layout/vite.config.ts +0 -20
  506. package/kotlin/fixtures/import-navigation/ImportNavigation.native.tsx +0 -18
  507. package/kotlin/fixtures/import-navigation/Navigation.d.kt.ts +0 -7
  508. package/kotlin/fixtures/import-navigation/Navigation.kt +0 -104
  509. package/kotlin/fixtures/import-navigation/README.md +0 -31
  510. package/kotlin/fixtures/import-navigation/app/_layout.tsx +0 -4
  511. package/kotlin/fixtures/import-navigation/app/index+spa.tsx +0 -1
  512. package/kotlin/fixtures/import-navigation/package.json +0 -23
  513. package/kotlin/fixtures/import-navigation/tsconfig.json +0 -20
  514. package/kotlin/fixtures/import-navigation/vite.config.ts +0 -20
  515. package/kotlin/fixtures/import-overlays/ImportOverlays.native.tsx +0 -29
  516. package/kotlin/fixtures/import-overlays/Overlays.d.kt.ts +0 -7
  517. package/kotlin/fixtures/import-overlays/Overlays.kt +0 -93
  518. package/kotlin/fixtures/import-overlays/README.md +0 -34
  519. package/kotlin/fixtures/import-overlays/app/_layout.tsx +0 -4
  520. package/kotlin/fixtures/import-overlays/app/index+spa.tsx +0 -1
  521. package/kotlin/fixtures/import-overlays/package.json +0 -23
  522. package/kotlin/fixtures/import-overlays/tsconfig.json +0 -20
  523. package/kotlin/fixtures/import-overlays/vite.config.ts +0 -20
  524. package/kotlin/fixtures/import-resources/ImportResources.native.tsx +0 -18
  525. package/kotlin/fixtures/import-resources/README.md +0 -26
  526. package/kotlin/fixtures/import-resources/Resources.d.kt.ts +0 -6
  527. package/kotlin/fixtures/import-resources/Resources.kt +0 -72
  528. package/kotlin/fixtures/import-resources/app/_layout.tsx +0 -4
  529. package/kotlin/fixtures/import-resources/app/index+spa.tsx +0 -1
  530. package/kotlin/fixtures/import-resources/package.json +0 -23
  531. package/kotlin/fixtures/import-resources/tsconfig.json +0 -20
  532. package/kotlin/fixtures/import-resources/vite.config.ts +0 -20
  533. package/kotlin/fixtures/import-scroll/ImportNested.native.tsx +0 -10
  534. package/kotlin/fixtures/import-scroll/ImportScroll.native.tsx +0 -13
  535. package/kotlin/fixtures/import-scroll/Nested.d.kt.ts +0 -4
  536. package/kotlin/fixtures/import-scroll/Nested.kt +0 -64
  537. package/kotlin/fixtures/import-scroll/README.md +0 -38
  538. package/kotlin/fixtures/import-scroll/Scroll.d.kt.ts +0 -7
  539. package/kotlin/fixtures/import-scroll/Scroll.kt +0 -91
  540. package/kotlin/fixtures/import-scroll/app/_layout.tsx +0 -4
  541. package/kotlin/fixtures/import-scroll/app/index+spa.tsx +0 -1
  542. package/kotlin/fixtures/import-scroll/app/nested+spa.tsx +0 -1
  543. package/kotlin/fixtures/import-scroll/package.json +0 -23
  544. package/kotlin/fixtures/import-scroll/tsconfig.json +0 -20
  545. package/kotlin/fixtures/import-scroll/vite.config.ts +0 -20
  546. package/kotlin/fixtures/import-selection/ImportSelection.native.tsx +0 -44
  547. package/kotlin/fixtures/import-selection/README.md +0 -32
  548. package/kotlin/fixtures/import-selection/Selection.d.kt.ts +0 -8
  549. package/kotlin/fixtures/import-selection/Selection.kt +0 -78
  550. package/kotlin/fixtures/import-selection/app/_layout.tsx +0 -4
  551. package/kotlin/fixtures/import-selection/app/index+spa.tsx +0 -1
  552. package/kotlin/fixtures/import-selection/package.json +0 -23
  553. package/kotlin/fixtures/import-selection/tsconfig.json +0 -20
  554. package/kotlin/fixtures/import-selection/vite.config.ts +0 -20
  555. package/kotlin/fixtures/import-surfaces/ImportSurfaces.native.tsx +0 -13
  556. package/kotlin/fixtures/import-surfaces/README.md +0 -22
  557. package/kotlin/fixtures/import-surfaces/Surfaces.d.kt.ts +0 -7
  558. package/kotlin/fixtures/import-surfaces/Surfaces.kt +0 -64
  559. package/kotlin/fixtures/import-surfaces/app/_layout.tsx +0 -4
  560. package/kotlin/fixtures/import-surfaces/app/index+spa.tsx +0 -1
  561. package/kotlin/fixtures/import-surfaces/package.json +0 -23
  562. package/kotlin/fixtures/import-surfaces/tsconfig.json +0 -20
  563. package/kotlin/fixtures/import-surfaces/vite.config.ts +0 -20
  564. package/kotlin/fixtures/import-values/ImportValues.native.tsx +0 -61
  565. package/kotlin/fixtures/import-values/README.md +0 -28
  566. package/kotlin/fixtures/import-values/Values.d.kt.ts +0 -15
  567. package/kotlin/fixtures/import-values/Values.kt +0 -84
  568. package/kotlin/fixtures/import-values/app/_layout.tsx +0 -4
  569. package/kotlin/fixtures/import-values/app/index+spa.tsx +0 -1
  570. package/kotlin/fixtures/import-values/package.json +0 -23
  571. package/kotlin/fixtures/import-values/tsconfig.json +0 -20
  572. package/kotlin/fixtures/import-values/vite.config.ts +0 -20
  573. package/kotlin/fixtures/kotlin-app/app/build.gradle.kts +0 -30
  574. package/kotlin/fixtures/kotlin-app/app/src/main/AndroidManifest.xml +0 -13
  575. package/kotlin/fixtures/kotlin-app/app/src/main/java/dev/contrast/kotlinapp/MainActivity.kt +0 -60
  576. package/kotlin/fixtures/kotlin-app/app/src/main/java/dev/contrast/kotlinapp/ProbeApplication.kt +0 -18
  577. package/kotlin/fixtures/kotlin-app/build.gradle.kts +0 -5
  578. package/kotlin/fixtures/kotlin-app/gradle.properties +0 -4
  579. package/kotlin/fixtures/kotlin-app/settings.gradle.kts +0 -4
  580. package/kotlin/fixtures/kotlin-app-variants/Anim.kt +0 -62
  581. package/kotlin/fixtures/kotlin-app-variants/BarBehavior.kt +0 -38
  582. package/kotlin/fixtures/kotlin-app-variants/BarVisibility.kt +0 -36
  583. package/kotlin/fixtures/kotlin-app-variants/Bitmaps.kt +0 -50
  584. package/kotlin/fixtures/kotlin-app-variants/Browse.kt +0 -73
  585. package/kotlin/fixtures/kotlin-app-variants/Colors.kt +0 -41
  586. package/kotlin/fixtures/kotlin-app-variants/Controls.kt +0 -62
  587. package/kotlin/fixtures/kotlin-app-variants/Drag.kt +0 -56
  588. package/kotlin/fixtures/kotlin-app-variants/Draw.kt +0 -74
  589. package/kotlin/fixtures/kotlin-app-variants/Drawables.kt +0 -53
  590. package/kotlin/fixtures/kotlin-app-variants/Focus.kt +0 -62
  591. package/kotlin/fixtures/kotlin-app-variants/Form.kt +0 -47
  592. package/kotlin/fixtures/kotlin-app-variants/Icons.kt +0 -59
  593. package/kotlin/fixtures/kotlin-app-variants/Ime.kt +0 -53
  594. package/kotlin/fixtures/kotlin-app-variants/Lists.kt +0 -57
  595. package/kotlin/fixtures/kotlin-app-variants/Nav.kt +0 -47
  596. package/kotlin/fixtures/kotlin-app-variants/Note.kt +0 -40
  597. package/kotlin/fixtures/kotlin-app-variants/Overlays.kt +0 -56
  598. package/kotlin/fixtures/kotlin-app-variants/Pan.kt +0 -38
  599. package/kotlin/fixtures/kotlin-app-variants/Pickers.kt +0 -44
  600. package/kotlin/fixtures/kotlin-app-variants/Press.kt +0 -43
  601. package/kotlin/fixtures/kotlin-app-variants/Scroll.kt +0 -63
  602. package/kotlin/fixtures/kotlin-app-variants/Sheet.kt +0 -43
  603. package/kotlin/fixtures/kotlin-app-variants/Strings.kt +0 -49
  604. package/kotlin/fixtures/kotlin-app-variants/Tabs.kt +0 -47
  605. package/kotlin/fixtures/kotlin-app-variants/TextWidth.kt +0 -45
  606. package/kotlin/fixtures/kotlin-app-variants/TransientInsets.kt +0 -50
  607. package/kotlin/fixtures/kotlin-app-variants/Transition.kt +0 -69
  608. package/kotlin/fixtures/kotlin-app-variants/ViewConfig.kt +0 -22
  609. package/kotlin/fixtures/kotlin-app-variants/Widgets.kt +0 -67
  610. package/kotlin/fixtures/runtime-state/RuntimeState.kt +0 -200
  611. package/kotlin/fork/README.md +0 -97
  612. package/kotlin/fork/build.sh +0 -176
  613. package/kotlin/fork/compose-worker-globals.patch +0 -1247
  614. package/kotlin/fork/fork.json +0 -46
  615. package/kotlin/fork/publish.ts +0 -99
  616. package/kotlin/fork/skia-android-shaping.patch +0 -189
  617. package/kotlin/fork/skiko-local.init.gradle +0 -10
  618. package/kotlin/fork/skiko-worker-clock.patch +0 -122
@@ -0,0 +1,550 @@
1
+ export function extractPackageFromPath(modulePath: string): string | null {
2
+ let nodeModulesIndex = modulePath.lastIndexOf('/node_modules/')
3
+ let prefixLength = '/node_modules/'.length
4
+ if (nodeModulesIndex === -1) {
5
+ if (!modulePath.startsWith('node_modules/')) return null
6
+ nodeModulesIndex = 0
7
+ prefixLength = 'node_modules/'.length
8
+ }
9
+
10
+ return packageNameAt(modulePath, nodeModulesIndex + prefixLength) || null
11
+ }
12
+
13
+ export function getPackageName(modulePath: string): string | null {
14
+ if (modulePath.startsWith('.') || modulePath.startsWith('/')) return null
15
+ return packageNameAt(modulePath, 0)
16
+ }
17
+
18
+ // the package name that starts at `start`: one segment, or two for a scope.
19
+ // every module of a bundle passes through here at boot, so it slices once
20
+ // instead of splitting the whole path.
21
+ function packageNameAt(modulePath: string, start: number): string | null {
22
+ const firstSlash = modulePath.indexOf('/', start)
23
+ if (modulePath.startsWith('@', start)) {
24
+ if (firstSlash === -1) return null
25
+ const secondSlash = modulePath.indexOf('/', firstSlash + 1)
26
+ return modulePath.slice(start, secondSlash === -1 ? undefined : secondSlash)
27
+ }
28
+ return modulePath.slice(start, firstSlash === -1 ? undefined : firstSlash)
29
+ }
30
+
31
+ // asset files are modules too: metro names an app's svg or image import by
32
+ // its path, so these extensions mark an app file just like source extensions
33
+ const moduleFileExtension =
34
+ /\.(?:[cm]?jsx?|tsx?|json|svg|png|jpe?g|gif|webp|bmp|ttf|otf|woff2?|mp[34]|wav|m4a|aac|pdf)$/
35
+
36
+ // metro names each module file by its path from the project root, so a file
37
+ // name outside node_modules that is neither relative nor absolute is one of
38
+ // the app's own files. bare specifiers stay bare: host-owned modules are
39
+ // named by specifier and carry no file extension. marking the file relative
40
+ // keeps an app directory that shares a dependency's name, such as an app's
41
+ // own `react/` tree, from matching that package's stubs.
42
+ export function metroModuleStubPath(name: string): string {
43
+ if (
44
+ name.startsWith('.') ||
45
+ name.startsWith('/') ||
46
+ name.startsWith('node_modules/') ||
47
+ name.includes('/node_modules/') ||
48
+ !moduleFileExtension.test(name)
49
+ ) {
50
+ return name
51
+ }
52
+ return `./${name}`
53
+ }
54
+
55
+ function isPackageRootPattern(pattern: string): boolean {
56
+ return getPackageName(pattern) === pattern
57
+ }
58
+
59
+ export function matchesModuleEntry(modulePath: string, pattern: string): boolean {
60
+ if (!modulePath || !pattern) return false
61
+ if (modulePath === pattern) return true
62
+ // the path is `node_modules/<pattern>` with an optional entry extension,
63
+ // at the start or after a slash. checked in place: this runs for every
64
+ // module against every candidate pattern, so it builds no strings.
65
+ if (!modulePath.includes(pattern)) return false
66
+ for (const extension of moduleEntryExtensions) {
67
+ const end = modulePath.length - extension.length
68
+ const start = end - pattern.length
69
+ const root = start - nodeModulesPrefix.length
70
+ if (
71
+ root >= 0 &&
72
+ modulePath.endsWith(extension) &&
73
+ modulePath.startsWith(pattern, start) &&
74
+ modulePath.startsWith(nodeModulesPrefix, root) &&
75
+ (root === 0 || modulePath[root - 1] === '/')
76
+ ) {
77
+ return true
78
+ }
79
+ }
80
+ return false
81
+ }
82
+
83
+ const nodeModulesPrefix = 'node_modules/'
84
+ const moduleEntryExtensions = ['', '.js', '.ts', '.tsx']
85
+
86
+ // what may follow `node_modules/<pattern>` at the end of a package's main
87
+ // entry path. `build/` and `dist/` also accept the package's own name file,
88
+ // checked below.
89
+ const packageMainEntryTails = new Set([
90
+ '/index.js',
91
+ '/index.ts',
92
+ '/index.tsx',
93
+ '/index.native.js',
94
+ '/lib/index.js',
95
+ '/lib/index.ts',
96
+ '/lib/index.tsx',
97
+ '/src/index.js',
98
+ '/src/index.ts',
99
+ '/src/index.tsx',
100
+ '/src/index.native.js',
101
+ '/src/index.native.ts',
102
+ '/lib/module/index.js',
103
+ '/lib/commonjs/index.js',
104
+ '/build/index.js',
105
+ '/dist/index.js',
106
+ '/dist/module/index.js',
107
+ '/dist/commonjs/index.js',
108
+ '.js',
109
+ '.ts',
110
+ '.tsx',
111
+ ])
112
+
113
+ export function matchesPackageMainEntry(modulePath: string, pattern: string): boolean {
114
+ if (!modulePath.includes(pattern)) return false
115
+ if (matchesModuleEntry(modulePath, pattern)) return true
116
+ // no tail contains `node_modules/`, so only the last occurrence can end the path
117
+ const entryRoot = `node_modules/${pattern}`
118
+ const at = modulePath.lastIndexOf(entryRoot)
119
+ if (at < 0 || (at > 0 && modulePath[at - 1] !== '/')) return false
120
+ const tail = modulePath.slice(at + entryRoot.length)
121
+ if (packageMainEntryTails.has(tail)) return true
122
+ const namedFile = /^\/(?:build|dist)\/([^/]+)\.js$/.exec(tail)?.[1]
123
+ if (!namedFile) return false
124
+ const packageBase = pattern.split('/').at(-1) ?? pattern
125
+ const capitalizedBase = packageBase
126
+ .replace(/^(expo-|react-native-)/, '')
127
+ .replace(/(^|-)(\w)/g, (_, _delimiter, character: string) => character.toUpperCase())
128
+ const camelBase = capitalizedBase.charAt(0).toLowerCase() + capitalizedBase.slice(1)
129
+ return namedFile === capitalizedBase || namedFile === camelBase
130
+ }
131
+
132
+ function matchesPackageDeepPath(modulePath: string, pattern: string): boolean {
133
+ if (getPackageName(modulePath) === pattern) return true
134
+ return extractPackageFromPath(modulePath) === pattern
135
+ }
136
+
137
+ function packageSubpathFromModulePath(
138
+ modulePath: string,
139
+ packageName: string,
140
+ ): string | null {
141
+ const packageSegment = `node_modules/${packageName}/`
142
+ const index = modulePath.lastIndexOf(packageSegment)
143
+ if (index !== -1) return modulePath.slice(index + packageSegment.length)
144
+ if (modulePath.startsWith(`${packageName}/`)) {
145
+ return modulePath.slice(packageName.length + 1)
146
+ }
147
+ return null
148
+ }
149
+
150
+ function normalizePackageDeepSubpath(modulePath: string, packageName: string): string {
151
+ let subpath = packageSubpathFromModulePath(modulePath, packageName)
152
+ if (!subpath) return ''
153
+ subpath = subpath
154
+ .replace(/\.(native|ios|android|web)\.(tsx?|jsx?|mjs|cjs)$/, '')
155
+ .replace(/\.(tsx?|jsx?|mjs|cjs)$/, '')
156
+ for (const prefix of [
157
+ 'src/',
158
+ 'lib/module/',
159
+ 'lib/commonjs/',
160
+ 'lib/',
161
+ 'build/',
162
+ 'dist/module/',
163
+ 'dist/commonjs/',
164
+ 'dist/',
165
+ ]) {
166
+ if (subpath.startsWith(prefix)) {
167
+ subpath = subpath.slice(prefix.length)
168
+ break
169
+ }
170
+ }
171
+ return subpath.replace(/\/index$/, '')
172
+ }
173
+
174
+ export function isExpoUiSwiftUiModifiersModule(modulePath: string): boolean {
175
+ const subpath = normalizePackageDeepSubpath(modulePath, '@expo/ui')
176
+ return subpath === 'swift-ui/modifiers' || subpath.startsWith('swift-ui/modifiers/')
177
+ }
178
+
179
+ function isRnghReanimatedSwipeablePureModule(modulePath: string): boolean {
180
+ const packageName = 'react-native-gesture-handler'
181
+ const extracted = extractPackageFromPath(modulePath) ?? getPackageName(modulePath)
182
+ if (extracted !== packageName) return false
183
+
184
+ const subpath = normalizePackageDeepSubpath(modulePath, packageName)
185
+ return (
186
+ subpath === 'ReanimatedSwipeable' ||
187
+ subpath.startsWith('ReanimatedSwipeable/') ||
188
+ subpath === 'components/ReanimatedSwipeable' ||
189
+ subpath.startsWith('components/ReanimatedSwipeable/') ||
190
+ subpath === 'components/utils'
191
+ )
192
+ }
193
+
194
+ // upstream `react-native-screens/experimental` runs from the bundle over native
195
+ // seams (Split, SafeAreaView). these are the modules its entry reaches; the
196
+ // package-root stub would otherwise answer each with the classic surface, where
197
+ // SafeAreaView and Split are undefined.
198
+ const rnsExperimentalSubpaths = [
199
+ 'experimental',
200
+ 'components/gamma/',
201
+ 'components/safe-area',
202
+ 'components/shared',
203
+ 'fabric/gamma/',
204
+ 'fabric/safe-area/',
205
+ 'private',
206
+ 'flags',
207
+ ]
208
+
209
+ function isRnsExperimentalModule(modulePath: string): boolean {
210
+ const packageName = 'react-native-screens'
211
+ const extracted = extractPackageFromPath(modulePath) ?? getPackageName(modulePath)
212
+ if (extracted !== packageName) return false
213
+ const subpath = normalizePackageDeepSubpath(modulePath, packageName)
214
+ return rnsExperimentalSubpaths.some((entry) =>
215
+ entry.endsWith('/')
216
+ ? subpath.startsWith(entry)
217
+ : subpath === entry || subpath.startsWith(`${entry}/`),
218
+ )
219
+ }
220
+
221
+ export function isReactNativeWorkletsGeneratedWorkletModule(modulePath: string): boolean {
222
+ const subpath = packageSubpathFromModulePath(modulePath, 'react-native-worklets')
223
+ return subpath?.startsWith('.worklets/') === true
224
+ }
225
+
226
+ function isReactNativeWorkletsBundleModeShim(modulePath: string): boolean {
227
+ const subpath = packageSubpathFromModulePath(modulePath, 'react-native-worklets')
228
+ return subpath?.startsWith('bundleMode/shims/') === true
229
+ }
230
+
231
+ function deriveDeepImportCandidates(modulePath: string, packageName: string): string[] {
232
+ const subpath = packageSubpathFromModulePath(modulePath, packageName)
233
+ if (!subpath) return []
234
+ const segments = subpath.split('/').filter(Boolean)
235
+ if (segments.length === 0) return []
236
+
237
+ const stripExtension = (segment: string) =>
238
+ segment
239
+ .replace(/\.(native|ios|android|web)\.(tsx?|jsx?|mjs|cjs)$/, '')
240
+ .replace(/\.(tsx?|jsx?|mjs|cjs)$/, '')
241
+ const pascalize = (segment: string) =>
242
+ segment.length > 0 ? segment[0].toUpperCase() + segment.slice(1) : segment
243
+ const candidates: string[] = []
244
+ const addCandidate = (name: string | undefined) => {
245
+ if (!name) return
246
+ if (!candidates.includes(name)) candidates.push(name)
247
+ const pascalName = pascalize(name)
248
+ if (pascalName !== name && !candidates.includes(pascalName)) {
249
+ candidates.push(pascalName)
250
+ }
251
+ }
252
+
253
+ const last = stripExtension(segments[segments.length - 1])
254
+ const parent = segments.length >= 2 ? segments[segments.length - 2] : ''
255
+ const grandparent = segments.length >= 3 ? segments[segments.length - 3] : ''
256
+ if (last === 'index') {
257
+ addCandidate(parent)
258
+ addCandidate(grandparent)
259
+ } else {
260
+ addCandidate(last)
261
+ addCandidate(parent)
262
+ }
263
+ return candidates
264
+ }
265
+
266
+ // what a package's subpath patterns compare against one of its module paths.
267
+ // it depends only on the module, so a bundle scan reads it once per module
268
+ // rather than once per pattern: the per-pattern form made the scan
269
+ // modules × patterns regex work on the boot path.
270
+ interface DeepPathFacts {
271
+ // the package's main entry answers only to the package root pattern
272
+ mainEntry: boolean
273
+ normalized: string
274
+ candidates: string[]
275
+ }
276
+
277
+ // a match loop asks for one module's facts once per candidate pattern in a
278
+ // row, so the last answer is kept for the next question about the same module
279
+ let lastDeepPath: {
280
+ modulePath: string
281
+ packageName: string
282
+ facts: DeepPathFacts
283
+ } | null = null
284
+
285
+ function readDeepPathFacts(modulePath: string, packageName: string): DeepPathFacts {
286
+ if (
287
+ lastDeepPath?.modulePath === modulePath &&
288
+ lastDeepPath.packageName === packageName
289
+ ) {
290
+ return lastDeepPath.facts
291
+ }
292
+ const facts = {
293
+ mainEntry: matchesPackageMainEntry(modulePath, packageName),
294
+ normalized: normalizePackageDeepSubpath(modulePath, packageName),
295
+ candidates: deriveDeepImportCandidates(modulePath, packageName),
296
+ }
297
+ lastDeepPath = { modulePath, packageName, facts }
298
+ return facts
299
+ }
300
+
301
+ function deepPathMatchesTail(facts: DeepPathFacts, patternTail: string): boolean {
302
+ if (facts.mainEntry || !patternTail) return false
303
+ return (
304
+ facts.normalized === patternTail ||
305
+ facts.normalized.endsWith(`/${patternTail}`) ||
306
+ facts.candidates.includes(patternTail)
307
+ )
308
+ }
309
+
310
+ function matchesSubpathPatternViaDeepPath(modulePath: string, pattern: string): boolean {
311
+ const packageName = getPackageName(pattern)
312
+ if (!packageName) return false
313
+ const extracted = extractPackageFromPath(modulePath) ?? getPackageName(modulePath)
314
+ if (extracted !== packageName) return false
315
+ return deepPathMatchesTail(
316
+ readDeepPathFacts(modulePath, packageName),
317
+ pattern.slice(packageName.length + 1),
318
+ )
319
+ }
320
+
321
+ function excludesPackageRootStub(modulePath: string, pattern: string): boolean {
322
+ // manifests carry the guest dependency's version and exports, never native code.
323
+ if (modulePath.endsWith('/package.json')) return true
324
+ if (pattern === '@expo/ui' && !matchesPackageMainEntry(modulePath, pattern)) {
325
+ return true
326
+ }
327
+ if (pattern === '@expo/ui/swift-ui' && isExpoUiSwiftUiModifiersModule(modulePath)) {
328
+ return true
329
+ }
330
+ if (
331
+ pattern === 'react-native-gesture-handler' &&
332
+ isRnghReanimatedSwipeablePureModule(modulePath)
333
+ ) {
334
+ return true
335
+ }
336
+ if (pattern === 'react-native-screens' && isRnsExperimentalModule(modulePath)) {
337
+ return true
338
+ }
339
+ if (
340
+ pattern === 'react-native-worklets' &&
341
+ (isReactNativeWorkletsGeneratedWorkletModule(modulePath) ||
342
+ isReactNativeWorkletsBundleModeShim(modulePath))
343
+ ) {
344
+ return true
345
+ }
346
+ return false
347
+ }
348
+
349
+ export function matchesStubPattern(modulePath: string, pattern: string): boolean {
350
+ if (excludesPackageRootStub(modulePath, pattern)) return false
351
+ if (isPackageRootPattern(pattern)) {
352
+ return (
353
+ matchesPackageDeepPath(modulePath, pattern) ||
354
+ matchesModuleEntry(modulePath, pattern)
355
+ )
356
+ }
357
+ if (matchesModuleEntry(modulePath, pattern)) return true
358
+ return matchesSubpathPatternViaDeepPath(modulePath, pattern)
359
+ }
360
+
361
+ export interface StubPatternMatcher {
362
+ patternsByPackage: ReadonlyMap<string, ReadonlyArray<string>>
363
+ fallbackPatterns: ReadonlyArray<string>
364
+ patternRank: ReadonlyMap<string, number>
365
+ sourcePackageIdentitiesByBasename: ReadonlyMap<
366
+ string,
367
+ ReadonlyArray<SourcePackageIdentity>
368
+ >
369
+ }
370
+
371
+ interface SourcePackageIdentity {
372
+ pathSuffix: string
373
+ packageName: string
374
+ }
375
+
376
+ const sourceDirectoryPattern = /\/(src|lib|build|dist)\//g
377
+
378
+ function sourceIdentityPath(packageName: string): string {
379
+ return packageName.startsWith('@') ? packageName.slice(1) : packageName
380
+ }
381
+
382
+ function hasDistinctivePackageBasename(packageBasename: string): boolean {
383
+ return /[-._]/.test(packageBasename)
384
+ }
385
+
386
+ export function createStubPatternMatcher(
387
+ stubPatterns: ReadonlyArray<string>,
388
+ sourcePackagePatterns: ReadonlyArray<string> = [],
389
+ ): StubPatternMatcher {
390
+ const sorted = [...stubPatterns].sort((a, b) => b.length - a.length)
391
+ const patternsByPackage = new Map<string, string[]>()
392
+ const fallbackPatterns: string[] = []
393
+ const sourcePackagesByIdentity = new Map<string, string>()
394
+ const ambiguousSourceIdentities = new Set<string>()
395
+
396
+ for (const pattern of sorted) {
397
+ const packageName = getPackageName(pattern)
398
+ if (!packageName) {
399
+ fallbackPatterns.push(pattern)
400
+ continue
401
+ }
402
+ const packagePatterns = patternsByPackage.get(packageName)
403
+ if (packagePatterns) packagePatterns.push(pattern)
404
+ else patternsByPackage.set(packageName, [pattern])
405
+ }
406
+
407
+ for (const pattern of sourcePackagePatterns) {
408
+ const packageName = getPackageName(pattern)
409
+ if (!packageName || packageName !== pattern) continue
410
+ const fullIdentity = sourceIdentityPath(packageName)
411
+ const basename = fullIdentity.split('/').at(-1)
412
+ const identities = [fullIdentity]
413
+ if (
414
+ basename &&
415
+ basename !== fullIdentity &&
416
+ hasDistinctivePackageBasename(basename)
417
+ ) {
418
+ identities.push(basename)
419
+ }
420
+ for (const identity of identities) {
421
+ if (ambiguousSourceIdentities.has(identity)) continue
422
+ const existing = sourcePackagesByIdentity.get(identity)
423
+ if (existing && existing !== packageName) {
424
+ sourcePackagesByIdentity.delete(identity)
425
+ ambiguousSourceIdentities.add(identity)
426
+ } else {
427
+ sourcePackagesByIdentity.set(identity, packageName)
428
+ }
429
+ }
430
+ }
431
+
432
+ const sourcePackageIdentitiesByBasename = new Map<string, SourcePackageIdentity[]>()
433
+ for (const [pathSuffix, packageName] of sourcePackagesByIdentity) {
434
+ const basename = pathSuffix.split('/').at(-1)
435
+ if (!basename) continue
436
+ const identities = sourcePackageIdentitiesByBasename.get(basename)
437
+ const identity = { pathSuffix, packageName }
438
+ if (identities) identities.push(identity)
439
+ else sourcePackageIdentitiesByBasename.set(basename, [identity])
440
+ }
441
+ for (const identities of sourcePackageIdentitiesByBasename.values()) {
442
+ identities.sort((a, b) => b.pathSuffix.length - a.pathSuffix.length)
443
+ }
444
+
445
+ return {
446
+ patternsByPackage,
447
+ fallbackPatterns,
448
+ patternRank: new Map(sorted.map((pattern, rank) => [pattern, rank])),
449
+ sourcePackageIdentitiesByBasename,
450
+ }
451
+ }
452
+
453
+ const noStubPatterns: ReadonlyArray<string> = []
454
+
455
+ // every pattern matchesStubPattern could accept for this module, longest first
456
+ // in the matcher's order. a pattern is only reachable through its own package:
457
+ // the module's installed package, that name without a module-entry extension
458
+ // (`node_modules/pkg.js` is an entry of `pkg`), or its bare specifier package.
459
+ export function candidateStubPatterns(
460
+ modulePath: string,
461
+ matcher: StubPatternMatcher,
462
+ ): ReadonlyArray<string> {
463
+ const lists: ReadonlyArray<string>[] = []
464
+ if (matcher.fallbackPatterns.length > 0) lists.push(matcher.fallbackPatterns)
465
+ const installedPackage = extractPackageFromPath(modulePath)
466
+ for (const packageName of [
467
+ installedPackage,
468
+ installedPackage?.replace(/\.(js|tsx?)$/, ''),
469
+ getPackageName(modulePath),
470
+ ]) {
471
+ const patterns = packageName ? matcher.patternsByPackage.get(packageName) : undefined
472
+ if (patterns && !lists.includes(patterns)) lists.push(patterns)
473
+ }
474
+ if (lists.length === 0) return noStubPatterns
475
+ if (lists.length === 1) return lists[0]
476
+ return lists
477
+ .flat()
478
+ .sort((a, b) => (matcher.patternRank.get(a) ?? 0) - (matcher.patternRank.get(b) ?? 0))
479
+ }
480
+
481
+ function canonicalSourceModulePath(
482
+ modulePath: string,
483
+ sourcePackageIdentitiesByBasename: ReadonlyMap<
484
+ string,
485
+ ReadonlyArray<SourcePackageIdentity>
486
+ >,
487
+ ): string | null {
488
+ const normalized = modulePath.replace(/\\/g, '/')
489
+ if (normalized.startsWith('node_modules/') || normalized.includes('/node_modules/')) {
490
+ return null
491
+ }
492
+ const searchable = normalized.startsWith('/') ? normalized : `/${normalized}`
493
+ sourceDirectoryPattern.lastIndex = 0
494
+ let match: RegExpExecArray | null
495
+ while ((match = sourceDirectoryPattern.exec(searchable))) {
496
+ const sourceDirectory = match[1]
497
+ if (!sourceDirectory) continue
498
+ const packagePath = searchable.slice(0, match.index)
499
+ const basename = packagePath.slice(packagePath.lastIndexOf('/') + 1)
500
+ const identities = sourcePackageIdentitiesByBasename.get(basename)
501
+ if (!identities) continue
502
+ for (const identity of identities) {
503
+ if (packagePath.endsWith(`/${identity.pathSuffix}`)) {
504
+ return `${identity.packageName}/${sourceDirectory}/${searchable.slice(sourceDirectoryPattern.lastIndex)}`
505
+ }
506
+ }
507
+ }
508
+ return null
509
+ }
510
+
511
+ export function addMatchingStubPatterns(
512
+ modulePath: string,
513
+ matcher: StubPatternMatcher,
514
+ matches: Set<string>,
515
+ ): void {
516
+ const directPackage = extractPackageFromPath(modulePath) ?? getPackageName(modulePath)
517
+ const canonicalSourcePath = directPackage
518
+ ? null
519
+ : canonicalSourceModulePath(modulePath, matcher.sourcePackageIdentitiesByBasename)
520
+ const effectivePath = canonicalSourcePath ?? modulePath
521
+ const packageName =
522
+ directPackage ?? (canonicalSourcePath ? getPackageName(canonicalSourcePath) : null)
523
+ const packagePatterns = packageName
524
+ ? matcher.patternsByPackage.get(packageName)
525
+ : undefined
526
+ if (packageName && packagePatterns) {
527
+ // every pattern here is the package root or one of its subpaths, and the
528
+ // effective path belongs to the package, so matchesStubPattern reduces to
529
+ // the exclusions, a module entry, or a deep path read once for the module
530
+ let facts: DeepPathFacts | null = null
531
+ for (const pattern of packagePatterns) {
532
+ if (excludesPackageRootStub(effectivePath, pattern)) continue
533
+ if (
534
+ pattern === packageName ||
535
+ matchesModuleEntry(effectivePath, pattern) ||
536
+ deepPathMatchesTail(
537
+ (facts ??= readDeepPathFacts(effectivePath, packageName)),
538
+ pattern.slice(packageName.length + 1),
539
+ )
540
+ ) {
541
+ matches.add(pattern)
542
+ }
543
+ }
544
+ }
545
+ for (const pattern of matcher.fallbackPatterns) {
546
+ if (matchesStubPattern(modulePath, pattern)) {
547
+ matches.add(pattern)
548
+ }
549
+ }
550
+ }