one 2.7.7 → 2.8.1

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 (307) hide show
  1. package/One.podspec +3 -0
  2. package/android/build.gradle +8 -1
  3. package/android/consumer-rules.pro +6 -0
  4. package/dist/cjs/cli/build.cjs +2 -2
  5. package/dist/cjs/cli/build.native.cjs +2 -2
  6. package/dist/cjs/cli/build.native.js +2 -2
  7. package/dist/cjs/cli/build.native.js.map +1 -1
  8. package/dist/cjs/cli/buildPage.cjs +1 -1
  9. package/dist/cjs/cli/buildPage.native.cjs +1 -1
  10. package/dist/cjs/cli/buildPage.native.js +1 -1
  11. package/dist/cjs/cli/buildPage.native.js.map +1 -1
  12. package/dist/cjs/constants.cjs +2 -0
  13. package/dist/cjs/constants.native.cjs +2 -0
  14. package/dist/cjs/constants.native.js +2 -0
  15. package/dist/cjs/constants.native.js.map +1 -1
  16. package/dist/cjs/fork/useLinking.cjs +1 -1
  17. package/dist/cjs/layouts/Stack.cjs +2 -2
  18. package/dist/cjs/layouts/Stack.native.cjs +3 -3
  19. package/dist/cjs/layouts/Stack.native.js +3 -3
  20. package/dist/cjs/layouts/Stack.native.js.map +1 -1
  21. package/dist/cjs/layouts/stack-navigator.cjs +5 -2
  22. package/dist/cjs/layouts/stack-navigator.native.cjs +14 -2
  23. package/dist/cjs/layouts/stack-navigator.native.js +14 -2
  24. package/dist/cjs/layouts/stack-navigator.native.js.map +1 -1
  25. package/dist/cjs/metro-config/buildOneMetroResolverOverrides.cjs +1 -1
  26. package/dist/cjs/metro-config/buildOneMetroResolverOverrides.native.cjs +1 -1
  27. package/dist/cjs/metro-config/buildOneMetroResolverOverrides.native.js +1 -1
  28. package/dist/cjs/metro-config/buildOneMetroResolverOverrides.native.js.map +1 -1
  29. package/dist/cjs/metro-config/getViteMetroPluginOptions.cjs +10 -4
  30. package/dist/cjs/metro-config/getViteMetroPluginOptions.native.cjs +10 -4
  31. package/dist/cjs/metro-config/getViteMetroPluginOptions.native.js +10 -4
  32. package/dist/cjs/metro-config/getViteMetroPluginOptions.native.js.map +1 -1
  33. package/dist/cjs/metro-config/withOne.cjs +2 -2
  34. package/dist/cjs/metro-config/withOne.native.cjs +2 -2
  35. package/dist/cjs/metro-config/withOne.native.js +2 -2
  36. package/dist/cjs/metro-config/withOne.native.js.map +1 -1
  37. package/dist/cjs/router/linkingConfig.cjs +3 -3
  38. package/dist/cjs/router/linkingConfig.native.cjs +3 -3
  39. package/dist/cjs/router/linkingConfig.native.js +3 -3
  40. package/dist/cjs/router/linkingConfig.native.js.map +1 -1
  41. package/dist/cjs/useLoader.cjs +0 -2
  42. package/dist/cjs/useLoader.native.cjs +1 -3
  43. package/dist/cjs/useLoader.native.js +1 -3
  44. package/dist/cjs/useLoader.native.js.map +1 -1
  45. package/dist/cjs/utils/cleanUrl.cjs +8 -3
  46. package/dist/cjs/utils/cleanUrl.native.cjs +8 -3
  47. package/dist/cjs/utils/cleanUrl.native.js +8 -3
  48. package/dist/cjs/utils/cleanUrl.native.js.map +1 -1
  49. package/dist/cjs/vite/one.cjs +5 -5
  50. package/dist/cjs/vite/one.native.cjs +5 -5
  51. package/dist/cjs/vite/one.native.js +5 -5
  52. package/dist/cjs/vite/one.native.js.map +1 -1
  53. package/dist/cjs/vite/plugins/workerdDevPlugin.cjs +3 -3
  54. package/dist/cjs/vite/plugins/workerdDevPlugin.native.cjs +3 -3
  55. package/dist/cjs/vite/plugins/workerdDevPlugin.native.js +3 -3
  56. package/dist/cjs/vite/plugins/workerdDevPlugin.native.js.map +1 -1
  57. package/dist/esm/cli/build.mjs +2 -2
  58. package/dist/esm/cli/build.mjs.map +1 -1
  59. package/dist/esm/cli/build.native.js +2 -2
  60. package/dist/esm/cli/build.native.js.map +1 -1
  61. package/dist/esm/cli/buildPage.mjs +2 -2
  62. package/dist/esm/cli/buildPage.mjs.map +1 -1
  63. package/dist/esm/cli/buildPage.native.js +2 -2
  64. package/dist/esm/cli/buildPage.native.js.map +1 -1
  65. package/dist/esm/constants.mjs +2 -1
  66. package/dist/esm/constants.mjs.map +1 -1
  67. package/dist/esm/constants.native.js +2 -1
  68. package/dist/esm/constants.native.js.map +1 -1
  69. package/dist/esm/fork/useLinking.mjs +1 -1
  70. package/dist/esm/fork/useLinking.mjs.map +1 -1
  71. package/dist/esm/layouts/Stack.mjs +2 -2
  72. package/dist/esm/layouts/Stack.mjs.map +1 -1
  73. package/dist/esm/layouts/Stack.native.js +3 -3
  74. package/dist/esm/layouts/Stack.native.js.map +1 -1
  75. package/dist/esm/layouts/stack-navigator.mjs +5 -2
  76. package/dist/esm/layouts/stack-navigator.mjs.map +1 -1
  77. package/dist/esm/layouts/stack-navigator.native.js +14 -2
  78. package/dist/esm/layouts/stack-navigator.native.js.map +1 -1
  79. package/dist/esm/metro-config/buildOneMetroResolverOverrides.mjs +1 -1
  80. package/dist/esm/metro-config/buildOneMetroResolverOverrides.mjs.map +1 -1
  81. package/dist/esm/metro-config/buildOneMetroResolverOverrides.native.js +1 -1
  82. package/dist/esm/metro-config/buildOneMetroResolverOverrides.native.js.map +1 -1
  83. package/dist/esm/metro-config/getViteMetroPluginOptions.mjs +10 -4
  84. package/dist/esm/metro-config/getViteMetroPluginOptions.mjs.map +1 -1
  85. package/dist/esm/metro-config/getViteMetroPluginOptions.native.js +10 -4
  86. package/dist/esm/metro-config/getViteMetroPluginOptions.native.js.map +1 -1
  87. package/dist/esm/metro-config/withOne.mjs +1 -1
  88. package/dist/esm/metro-config/withOne.mjs.map +1 -1
  89. package/dist/esm/metro-config/withOne.native.js +1 -1
  90. package/dist/esm/metro-config/withOne.native.js.map +1 -1
  91. package/dist/esm/router/linkingConfig.mjs +3 -3
  92. package/dist/esm/router/linkingConfig.mjs.map +1 -1
  93. package/dist/esm/router/linkingConfig.native.js +3 -3
  94. package/dist/esm/router/linkingConfig.native.js.map +1 -1
  95. package/dist/esm/useLoader.native.js +2 -4
  96. package/dist/esm/useLoader.native.js.map +1 -1
  97. package/dist/esm/utils/cleanUrl.mjs +9 -5
  98. package/dist/esm/utils/cleanUrl.mjs.map +1 -1
  99. package/dist/esm/utils/cleanUrl.native.js +9 -5
  100. package/dist/esm/utils/cleanUrl.native.js.map +1 -1
  101. package/dist/esm/vite/one.mjs +1 -1
  102. package/dist/esm/vite/one.mjs.map +1 -1
  103. package/dist/esm/vite/one.native.js +1 -1
  104. package/dist/esm/vite/one.native.js.map +1 -1
  105. package/dist/esm/vite/plugins/workerdDevPlugin.mjs +2 -2
  106. package/dist/esm/vite/plugins/workerdDevPlugin.mjs.map +1 -1
  107. package/dist/esm/vite/plugins/workerdDevPlugin.native.js +2 -2
  108. package/dist/esm/vite/plugins/workerdDevPlugin.native.js.map +1 -1
  109. package/ios/PrivacyInfo.xcprivacy +52 -0
  110. package/metro-entry.js +1 -1
  111. package/package.json +79 -42
  112. package/src/__tests__/polyfills-mobile-metro.test.ts +2 -2
  113. package/src/cli/build.ts +2 -2
  114. package/src/cli/buildPage.ts +5 -4
  115. package/src/constants.ts +2 -0
  116. package/src/fork/useLinking.ts +4 -1
  117. package/src/layouts/Stack.tsx +5 -2
  118. package/src/layouts/stack-navigator.tsx +34 -0
  119. package/src/layouts/stack-navigator.web.ts +5 -2
  120. package/src/metro-config/buildOneMetroResolverOverrides.ts +1 -1
  121. package/src/metro-config/getViteMetroPluginOptions.integration.test.ts +5 -3
  122. package/src/metro-config/getViteMetroPluginOptions.ts +10 -4
  123. package/src/metro-config/withOne.ts +3 -1
  124. package/src/native/packedClosure.test.ts +68 -6
  125. package/src/native/shippedAndroid.test.ts +21 -0
  126. package/src/native/shippedArtifacts.test.ts +81 -0
  127. package/src/router/linkingConfig.test.ts +144 -2
  128. package/src/router/linkingConfig.ts +6 -3
  129. package/src/useLoader.ts +3 -15
  130. package/src/utils/cleanUrl.test.ts +28 -0
  131. package/src/utils/cleanUrl.ts +11 -4
  132. package/src/vite/one.ts +2 -1
  133. package/src/vite/plugins/workerdDevPlugin.ts +2 -2
  134. package/src/vite/types.ts +4 -4
  135. package/types/Frozen.d.ts +1 -1
  136. package/types/Frozen.d.ts.map +1 -1
  137. package/types/Frozen.native.d.ts +1 -1
  138. package/types/Frozen.native.d.ts.map +1 -1
  139. package/types/Root.d.ts +1 -1
  140. package/types/Root.d.ts.map +1 -1
  141. package/types/cli/buildPage.d.ts.map +1 -1
  142. package/types/constants.d.ts +1 -0
  143. package/types/constants.d.ts.map +1 -1
  144. package/types/fallbackViews/Sitemap.d.ts +1 -1
  145. package/types/fallbackViews/Sitemap.d.ts.map +1 -1
  146. package/types/fallbackViews/Sitemap.web.d.ts +2 -1
  147. package/types/fallbackViews/Sitemap.web.d.ts.map +1 -1
  148. package/types/fallbackViews/Unmatched.d.ts +2 -1
  149. package/types/fallbackViews/Unmatched.d.ts.map +1 -1
  150. package/types/fallbackViews/Unmatched.web.d.ts +2 -1
  151. package/types/fallbackViews/Unmatched.web.d.ts.map +1 -1
  152. package/types/fork/useLinking.d.ts.map +1 -1
  153. package/types/headless/Presentations.d.ts +1 -1
  154. package/types/headless/Presentations.d.ts.map +1 -1
  155. package/types/headless/keepMounted.d.ts +1 -1
  156. package/types/headless/keepMounted.d.ts.map +1 -1
  157. package/types/headless/useDrawer.d.ts +1 -1
  158. package/types/headless/useDrawer.d.ts.map +1 -1
  159. package/types/layouts/Stack.d.ts.map +1 -1
  160. package/types/layouts/stack-navigator.d.ts +6 -2
  161. package/types/layouts/stack-navigator.d.ts.map +1 -1
  162. package/types/layouts/stack-navigator.web.d.ts +3 -4
  163. package/types/layouts/stack-navigator.web.d.ts.map +1 -1
  164. package/types/layouts/stack-utils/StackScreen.d.ts +1 -1
  165. package/types/layouts/stack-utils/StackScreen.d.ts.map +1 -1
  166. package/types/layouts/stack-utils/StackToolbar.d.ts +1 -1
  167. package/types/layouts/stack-utils/StackToolbar.d.ts.map +1 -1
  168. package/types/layouts/stack-utils/StackToolbarBottomHost.d.ts +1 -1
  169. package/types/layouts/stack-utils/StackToolbarBottomHost.d.ts.map +1 -1
  170. package/types/metro-config/getViteMetroPluginOptions.d.ts.map +1 -1
  171. package/types/metro-config/withOne.d.ts.map +1 -1
  172. package/types/platform/AndroidMenu.d.ts +2 -2
  173. package/types/platform/AndroidMenu.d.ts.map +1 -1
  174. package/types/platform/Animators.native.d.ts +2 -2
  175. package/types/platform/Animators.native.d.ts.map +1 -1
  176. package/types/platform/ArrangementView.d.ts +1 -1
  177. package/types/platform/ArrangementView.d.ts.map +1 -1
  178. package/types/platform/ArrangementView.native.d.ts +1 -1
  179. package/types/platform/ArrangementView.native.d.ts.map +1 -1
  180. package/types/platform/Containers.native.d.ts +34 -34
  181. package/types/platform/Containers.native.d.ts.map +1 -1
  182. package/types/platform/Menu.native.d.ts +2 -2
  183. package/types/platform/Menu.native.d.ts.map +1 -1
  184. package/types/platform/NavigationSplitView.native.d.ts +1 -1
  185. package/types/platform/NavigationSplitView.native.d.ts.map +1 -1
  186. package/types/platform/NavigationStack.native.d.ts +2 -2
  187. package/types/platform/NavigationStack.native.d.ts.map +1 -1
  188. package/types/platform/Pager.native.d.ts +1 -1
  189. package/types/platform/Pager.native.d.ts.map +1 -1
  190. package/types/platform/Popover.native.d.ts +1 -1
  191. package/types/platform/Popover.native.d.ts.map +1 -1
  192. package/types/platform/Sheet.native.d.ts +2 -2
  193. package/types/platform/Sheet.native.d.ts.map +1 -1
  194. package/types/platform/Tabs.native.d.ts +1 -1
  195. package/types/platform/Tabs.native.d.ts.map +1 -1
  196. package/types/platform/adaptive/ReservedRegions.d.ts +1 -1
  197. package/types/platform/adaptive/ReservedRegions.d.ts.map +1 -1
  198. package/types/platform/adaptive/ReservedRegions.native.d.ts +1 -1
  199. package/types/platform/adaptive/ReservedRegions.native.d.ts.map +1 -1
  200. package/types/platform/compose.android.d.ts +101 -101
  201. package/types/platform/compose.android.d.ts.map +1 -1
  202. package/types/platform/effects/Blur.d.ts +1 -1
  203. package/types/platform/effects/Blur.d.ts.map +1 -1
  204. package/types/platform/effects/Blur.native.d.ts +1 -1
  205. package/types/platform/effects/Blur.native.d.ts.map +1 -1
  206. package/types/platform/effects/EdgeFade.d.ts +1 -1
  207. package/types/platform/effects/EdgeFade.d.ts.map +1 -1
  208. package/types/platform/effects/EdgeFade.native.d.ts +1 -1
  209. package/types/platform/effects/EdgeFade.native.d.ts.map +1 -1
  210. package/types/platform/effects/Mask.d.ts +1 -1
  211. package/types/platform/effects/Mask.d.ts.map +1 -1
  212. package/types/platform/effects/Mask.native.d.ts +1 -1
  213. package/types/platform/effects/Mask.native.d.ts.map +1 -1
  214. package/types/platform/generated/Controls.native.d.ts +55 -55
  215. package/types/platform/generated/Controls.native.d.ts.map +1 -1
  216. package/types/platform/index.native.d.ts +58 -58
  217. package/types/platform/menu/index.native.d.ts +1 -1
  218. package/types/platform/menu/index.native.d.ts.map +1 -1
  219. package/types/platform/native-source/view.native.d.ts +1 -1
  220. package/types/platform/native-source/view.native.d.ts.map +1 -1
  221. package/types/platform/split-view/split-view.d.ts +2 -2
  222. package/types/platform/split-view/split-view.d.ts.map +1 -1
  223. package/types/platform/split-view/split-view.native.d.ts +3 -3
  224. package/types/platform/split-view/split-view.native.d.ts.map +1 -1
  225. package/types/platform/swift/index.native.d.ts +1 -1
  226. package/types/platform/swift/index.native.d.ts.map +1 -1
  227. package/types/platform/toolbar/index.native.d.ts +2 -2
  228. package/types/platform/toolbar/index.native.d.ts.map +1 -1
  229. package/types/platform/ui/Icon.android.d.ts +1 -1
  230. package/types/platform/ui/Icon.android.d.ts.map +1 -1
  231. package/types/platform/ui/Image.d.ts +1 -1
  232. package/types/platform/ui/Image.d.ts.map +1 -1
  233. package/types/platform/ui/Image.native.d.ts +1 -1
  234. package/types/platform/ui/Image.native.d.ts.map +1 -1
  235. package/types/platform/ui/Map.android.d.ts +1 -1
  236. package/types/platform/ui/Map.android.d.ts.map +1 -1
  237. package/types/platform/ui/Map.ios.d.ts +1 -1
  238. package/types/platform/ui/Map.ios.d.ts.map +1 -1
  239. package/types/platform/ui/PictureInPicture.d.ts +1 -1
  240. package/types/platform/ui/PictureInPicture.d.ts.map +1 -1
  241. package/types/platform/ui/PictureInPicture.native.d.ts +1 -1
  242. package/types/platform/ui/PictureInPicture.native.d.ts.map +1 -1
  243. package/types/platform/ui/Portal.d.ts +2 -2
  244. package/types/platform/ui/Portal.d.ts.map +1 -1
  245. package/types/platform/ui/Portal.native.d.ts +2 -2
  246. package/types/platform/ui/Portal.native.d.ts.map +1 -1
  247. package/types/platform/universal/TextInput/index.android.d.ts +1 -1
  248. package/types/platform/universal/TextInput/index.android.d.ts.map +1 -1
  249. package/types/platform/universal/TextInput/index.d.ts +1 -1
  250. package/types/platform/universal/TextInput/index.d.ts.map +1 -1
  251. package/types/platform/universal/TextInput/index.ios.d.ts +1 -1
  252. package/types/platform/universal/TextInput/index.ios.d.ts.map +1 -1
  253. package/types/platform/web/DomView.d.ts +1 -1
  254. package/types/platform/web/DomView.d.ts.map +1 -1
  255. package/types/platform/zoom/index.native.d.ts +3 -3
  256. package/types/platform/zoom/index.native.d.ts.map +1 -1
  257. package/types/router/Route.d.ts +1 -1
  258. package/types/router/Route.d.ts.map +1 -1
  259. package/types/router/RouteInfoContext.d.ts +1 -1
  260. package/types/router/RouteInfoContext.d.ts.map +1 -1
  261. package/types/router/linkingConfig.d.ts.map +1 -1
  262. package/types/router/web/WebStackView.d.ts +1 -1
  263. package/types/router/web/WebStackView.d.ts.map +1 -1
  264. package/types/safe-area-context/NativeSafeAreaProvider.d.ts +1 -1
  265. package/types/safe-area-context/NativeSafeAreaProvider.d.ts.map +1 -1
  266. package/types/safe-area-context/NativeSafeAreaProvider.native.d.ts +2 -1
  267. package/types/safe-area-context/NativeSafeAreaProvider.native.d.ts.map +1 -1
  268. package/types/safe-area-context/SafeAreaContext.d.ts +1 -1
  269. package/types/safe-area-context/SafeAreaContext.d.ts.map +1 -1
  270. package/types/server/ServerContextScript.d.ts +1 -1
  271. package/types/server/ServerContextScript.d.ts.map +1 -1
  272. package/types/ui/TabList.d.ts +1 -1
  273. package/types/ui/TabList.d.ts.map +1 -1
  274. package/types/ui/TabSlot.d.ts +3 -3
  275. package/types/ui/TabSlot.d.ts.map +1 -1
  276. package/types/ui/TabTrigger.d.ts +1 -1
  277. package/types/ui/TabTrigger.d.ts.map +1 -1
  278. package/types/ui/Tabs.d.ts +1 -1
  279. package/types/ui/Tabs.d.ts.map +1 -1
  280. package/types/useLoader.d.ts.map +1 -1
  281. package/types/utils/cleanUrl.d.ts +1 -0
  282. package/types/utils/cleanUrl.d.ts.map +1 -1
  283. package/types/views/ErrorBoundary.d.ts +2 -1
  284. package/types/views/ErrorBoundary.d.ts.map +1 -1
  285. package/types/views/ErrorBoundary.web.d.ts +2 -1
  286. package/types/views/ErrorBoundary.web.d.ts.map +1 -1
  287. package/types/views/LoadProgressBar.d.ts +1 -1
  288. package/types/views/LoadProgressBar.d.ts.map +1 -1
  289. package/types/views/LoadProgressBar.web.d.ts +2 -1
  290. package/types/views/LoadProgressBar.web.d.ts.map +1 -1
  291. package/types/views/Navigator.d.ts +6 -6
  292. package/types/views/Navigator.d.ts.map +1 -1
  293. package/types/views/RootErrorBoundary.d.ts +1 -1
  294. package/types/views/RootErrorBoundary.d.ts.map +1 -1
  295. package/types/views/RootErrorBoundary.web.d.ts +1 -1
  296. package/types/views/RootErrorBoundary.web.d.ts.map +1 -1
  297. package/types/views/RouteErrorView.d.ts +1 -1
  298. package/types/views/RouteErrorView.d.ts.map +1 -1
  299. package/types/views/RouteErrorView.web.d.ts +1 -1
  300. package/types/views/RouteErrorView.web.d.ts.map +1 -1
  301. package/types/views/Try.d.ts +1 -1
  302. package/types/views/Try.d.ts.map +1 -1
  303. package/types/vite/DevHead.d.ts +1 -1
  304. package/types/vite/DevHead.d.ts.map +1 -1
  305. package/types/vite/one.d.ts.map +1 -1
  306. package/types/vite/types.d.ts +4 -4
  307. package/src/layouts/stack-navigator.ts +0 -13
@@ -1 +1 @@
1
- {"version":3,"file":"workerdDevPlugin.js","names":[],"sources":["esm/vite/plugins/workerdDevPlugin.js"],"sourcesContent":["import { mkdirSync, writeFileSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { resolvePath } from \"@vxrn/resolve\";\nimport { cloudflare } from \"@cloudflare/vite-plugin\";\nimport { getPlatformEnvDefine } from \"@vxrn/vite-plugin-metro\";\nimport { exactRegex } from \"rolldown/filter\";\nimport { CACHE_KEY } from \"../../constants\";\nimport { virtalEntryIdClient, virtualEntryId } from \"./virtualEntryConstants\";\nimport { getManifest } from \"../getManifest\";\nimport { getRouterRootFromOneOptions } from \"../../utils/getRouterRootFromOneOptions\";\nimport { absorbedPackageAliases } from \"../../utils/absorbedPackages\";\nimport {\n createCloudflareWranglerConfig,\n getCloudflareProjectNameSync,\n loadUserWranglerConfigSync,\n shouldEnableWorkerdDev\n} from \"../cloudflareWranglerConfig\";\nconst workerdDevEntryId = \"virtual:one-workerd-dev-entry\";\nconst resolvedWorkerdDevEntryId = `\\0${workerdDevEntryId}`;\nconst WORKERD_DEV_DIR = \"node_modules/.one-workerd-dev\";\nfunction serveOnly(plugin) {\n const existing = plugin.apply;\n return {\n ...plugin,\n apply(config, env) {\n if (env.command !== \"serve\") return false;\n if (typeof existing === \"function\") return existing(config, env);\n if (existing === \"build\") return false;\n return true;\n }\n };\n}\nfunction toImportHref(root, routerRoot, routeFile) {\n const rel = routeFile.replace(/^\\.\\//, \"\");\n return pathToFileURL(resolve(root, routerRoot, rel)).href;\n}\nfunction serializeImportMap(entries) {\n return entries.map(\n ([key, href]) => ` ${JSON.stringify(key)}: () => import(${JSON.stringify(href)})`\n ).join(\",\\n\");\n}\nfunction stripRouteForWorker(route) {\n const { layouts, middlewares, ...rest } = route;\n return {\n ...rest,\n // live-render SSG in dev the same way the node middleware does\n type: route.type === \"ssg\" ? \"ssr\" : route.type,\n layouts: layouts?.map((layout) => ({\n contextKey: layout.contextKey\n })),\n middlewares: middlewares?.map((middleware) => ({\n contextKey: middleware.contextKey\n }))\n };\n}\nfunction stubRouteBuildInfo(route, preloads) {\n const pageType = route.type === \"ssg\" ? \"ssr\" : route.type;\n return {\n type: pageType,\n path: route.page,\n routeFile: route.file,\n middlewares: route.middlewares?.map((middleware) => middleware.contextKey) ?? [],\n preloadPath: \"\",\n cssPreloadPath: \"\",\n loaderPath: \"\",\n cleanPath: route.urlCleanPath || route.page,\n htmlPath: \"\",\n clientJsPath: \"\",\n serverJsPath: \"\",\n params: {},\n preloads,\n css: [],\n layoutCSS: []\n };\n}\nfunction generateWorkerdDevEntryModule(args) {\n const { root, options, routerRoot, routePaths, preloads } = args;\n const manifest = getManifest({\n routerRoot: resolve(root, routerRoot),\n ignoredRouteFiles: options.router?.ignoredRouteFiles,\n routePaths\n });\n if (!manifest) {\n throw new Error(\"[one] workerd dev: no routes manifest\");\n }\n const apiImports = /* @__PURE__ */ new Map();\n const middlewareImports = /* @__PURE__ */ new Map();\n const routeToBuildInfo = {};\n for (const route of manifest.pageRoutes) {\n for (const middleware of route.middlewares || []) {\n if (!middleware.contextKey || middlewareImports.has(middleware.contextKey)) continue;\n middlewareImports.set(\n middleware.contextKey,\n toImportHref(root, routerRoot, middleware.contextKey)\n );\n }\n if (route.file) {\n routeToBuildInfo[route.file] = stubRouteBuildInfo(route, preloads);\n }\n }\n for (const route of manifest.apiRoutes) {\n if (route.file) {\n apiImports.set(route.page, toImportHref(root, routerRoot, route.file));\n }\n for (const middleware of route.middlewares || []) {\n if (!middleware.contextKey || middlewareImports.has(middleware.contextKey)) continue;\n middlewareImports.set(\n middleware.contextKey,\n toImportHref(root, routerRoot, middleware.contextKey)\n );\n }\n }\n const pageRoutes = manifest.pageRoutes.map(stripRouteForWorker);\n const apiRoutes = manifest.apiRoutes.map(stripRouteForWorker);\n const buildInfo = {\n constants: { CACHE_KEY },\n oneOptions: options,\n routeToBuildInfo,\n pathToRoute: {},\n routeMap: {},\n manifest: {\n pageRoutes,\n apiRoutes,\n allRoutes: [...pageRoutes, ...apiRoutes]\n },\n preloads: Object.fromEntries(preloads.map((preload) => [preload, true])),\n cssPreloads: {},\n loaders: {}\n };\n const spaPreloadScripts = preloads.map((preload) => `<script type=\"module\" src=\"${preload}\"></script>`).join(\"\");\n return `if (typeof MessageChannel === 'undefined') {\n globalThis.MessageChannel = class MessageChannel {\n constructor() {\n this.port1 = { postMessage: () => {}, onmessage: null, close: () => {} }\n this.port2 = { postMessage: () => {}, onmessage: null, close: () => {} }\n }\n }\n}\n\nimport { serve, setFetchStaticHtml } from 'one/serve-worker'\n\nconst lazyRoutes = {\n serverEntry: () => import(${JSON.stringify(virtualEntryId)}),\n api: {\n${serializeImportMap([...apiImports])}\n },\n middlewares: {\n${serializeImportMap([...middlewareImports])}\n }\n}\n\nconst buildInfo = ${JSON.stringify(buildInfo)}\n\nlet server\n\nexport default {\n async fetch(request, env, ctx) {\n const url = new URL(request.url)\n const pathname = url.pathname\n\n if (pathname === '/status' || pathname.startsWith('/status?')) {\n return new Response('packager-status:running', {\n headers: { 'content-type': 'text/plain' },\n })\n }\n\n if (!server) {\n server = await serve(buildInfo, lazyRoutes, { disableModuleCache: true })\n }\n\n if (env && env.ASSETS) {\n setFetchStaticHtml(async (path) => {\n try {\n const assetUrl = new URL(request.url)\n assetUrl.pathname = path\n const assetResponse = await env.ASSETS.fetch(new Request(assetUrl))\n if (assetResponse && assetResponse.ok) {\n return await assetResponse.text()\n }\n } catch {}\n return null\n })\n }\n\n try {\n const response = await server.fetch(request, env, ctx)\n\n if (!response || response.status === 404) {\n if (env && env.ASSETS) {\n try {\n const assetResponse = await env.ASSETS.fetch(request)\n if (assetResponse && assetResponse.status !== 404) {\n return assetResponse\n }\n } catch {}\n }\n }\n\n if (!response) {\n if (request.method === 'GET' || request.method === 'HEAD') {\n return new Response(\n '<!DOCTYPE html><html><head>' +\n ${JSON.stringify(spaPreloadScripts)} +\n '</head></html>',\n { headers: { 'content-type': 'text/html' } }\n )\n }\n return new Response('Not Found', { status: 404 })\n }\n\n return response\n } finally {\n setFetchStaticHtml(null)\n }\n }\n}\n`;\n}\nfunction createWorkerdDevPlugins(options, root, routeIndex) {\n if (!shouldEnableWorkerdDev(options.web?.deploy, root)) {\n return [];\n }\n const cacheDir = join(root, WORKERD_DEV_DIR);\n const wranglerInputPath = join(cacheDir, \"_wrangler.input.jsonc\");\n const workerEntryPath = join(cacheDir, \"worker-entry.js\");\n mkdirSync(cacheDir, { recursive: true });\n writeFileSync(\n workerEntryPath,\n `export { default } from ${JSON.stringify(workerdDevEntryId)}\n`\n );\n const userWranglerConfig = loadUserWranglerConfigSync(root);\n const projectName = getCloudflareProjectNameSync(root);\n const wranglerInputConfig = createCloudflareWranglerConfig(\n projectName,\n userWranglerConfig?.config\n );\n wranglerInputConfig.main = \"worker-entry.js\";\n writeFileSync(wranglerInputPath, `${JSON.stringify(wranglerInputConfig, null, 2)}\n`);\n const preloads = options.web?.experimentalBundledDev ? [\"/bundledDevClient.mjs\", \"/assets/_virtual_one-entry.js\"] : [\"/@vite/client\", virtalEntryIdClient];\n const empty = resolvePath(\"@vxrn/vite-plugin-metro/empty\", root);\n const absorbed = absorbedPackageAliases(root, \"web\");\n const preparePlugin = {\n name: \"one:workerd-dev-prepare\",\n apply: \"serve\",\n enforce: \"pre\",\n config() {\n return {\n environments: {\n worker: {\n define: {\n ...getPlatformEnvDefine(\"ssr\"),\n \"process.env.TAMAGUI_IS_SERVER\": JSON.stringify(\"1\"),\n \"process.env.TAMAGUI_KEEP_THEMES\": JSON.stringify(\"1\"),\n \"process.env.ONE_CACHE_KEY\": JSON.stringify(CACHE_KEY)\n },\n optimizeDeps: {\n include: [\n \"react\",\n \"react-dom\",\n \"react-dom/client\",\n \"react-dom/server.browser\",\n \"react/jsx-runtime\",\n \"react/jsx-dev-runtime\"\n ]\n },\n build: {\n rolldownOptions: {\n shimMissingExports: true\n }\n }\n }\n }\n };\n },\n // environment resolve options have no alias field; match the production\n // worker aliases with a worker-only resolveId (rolldown cannot parse RN Flow)\n resolveId: {\n filter: {\n id: /^(react-native(\\/|$|-safe-area-context$)|@react-native\\/assets-registry\\/registry$)/\n },\n handler(source) {\n if (this.environment.name !== \"worker\") return;\n if (/^react-native\\/Libraries\\//.test(source)) return empty;\n if (source === \"react-native/asset-registry\" || source === \"@react-native/assets-registry/registry\")\n return resolvePath(\"react-native-web/dist/modules/AssetRegistry\", root);\n if (source === \"react-native/package.json\")\n return resolvePath(\"react-native-web/package.json\", root);\n if (source === \"react-native\") return resolvePath(\"react-native-web\", root);\n if (source in absorbed) return absorbed[source];\n }\n },\n configureServer(server) {\n if (!server.environments.worker) {\n throw new Error(\n `[one] ONE_EXPERIMENTAL_WORKER_DEV=1 is set but @cloudflare/vite-plugin did not register a \"worker\" environment. Expected wrangler config at ${wranglerInputPath}.`\n );\n }\n console.info(\n \"[one] experimental workerd dev enabled (ONE_EXPERIMENTAL_WORKER_DEV=1)\"\n );\n }\n };\n const virtualPlugin = {\n name: \"one:workerd-dev-entry\",\n apply: \"serve\",\n resolveId: {\n filter: { id: exactRegex(workerdDevEntryId) },\n handler(id) {\n if (this.environment.name !== \"worker\") return;\n if (id === workerdDevEntryId) return resolvedWorkerdDevEntryId;\n }\n },\n load: {\n filter: { id: exactRegex(resolvedWorkerdDevEntryId) },\n handler() {\n if (this.environment.name !== \"worker\") return;\n return generateWorkerdDevEntryModule({\n root,\n options,\n routerRoot: getRouterRootFromOneOptions(options),\n routePaths: routeIndex.getPaths(),\n preloads\n });\n }\n },\n hotUpdate({ file }) {\n if (this.environment.name !== \"worker\") return;\n const graph = this.environment.moduleGraph;\n const entry = graph.getModuleById(resolvedWorkerdDevEntryId);\n if (!entry) return;\n const modules = graph.getModulesByFile(file);\n if (!modules?.size) return;\n graph.invalidateModule(entry);\n }\n };\n const cloudflarePlugins = cloudflare({\n configPath: wranglerInputPath,\n viteEnvironment: { name: \"worker\" }\n }).map(serveOnly);\n return [preparePlugin, virtualPlugin, ...cloudflarePlugins];\n}\nexport {\n createWorkerdDevPlugins,\n generateWorkerdDevEntryModule,\n shouldEnableWorkerdDev,\n workerdDevEntryId\n};\n//# sourceMappingURL=workerdDevPlugin.js.map\n"],"mappings":"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"}
1
+ {"version":3,"file":"workerdDevPlugin.js","names":[],"sources":["esm/vite/plugins/workerdDevPlugin.js"],"sourcesContent":["import { mkdirSync, writeFileSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { resolvePath } from \"@vxrn/resolve\";\nimport { cloudflare } from \"@cloudflare/vite-plugin\";\nimport { getPlatformEnvDefine } from \"@vxrn/utils\";\nimport { exactRegex } from \"rolldown/filter\";\nimport { CACHE_KEY } from \"../../constants\";\nimport { virtalEntryIdClient, virtualEntryId } from \"./virtualEntryConstants\";\nimport { getManifest } from \"../getManifest\";\nimport { getRouterRootFromOneOptions } from \"../../utils/getRouterRootFromOneOptions\";\nimport { absorbedPackageAliases } from \"../../utils/absorbedPackages\";\nimport {\n createCloudflareWranglerConfig,\n getCloudflareProjectNameSync,\n loadUserWranglerConfigSync,\n shouldEnableWorkerdDev\n} from \"../cloudflareWranglerConfig\";\nconst workerdDevEntryId = \"virtual:one-workerd-dev-entry\";\nconst resolvedWorkerdDevEntryId = `\\0${workerdDevEntryId}`;\nconst WORKERD_DEV_DIR = \"node_modules/.one-workerd-dev\";\nfunction serveOnly(plugin) {\n const existing = plugin.apply;\n return {\n ...plugin,\n apply(config, env) {\n if (env.command !== \"serve\") return false;\n if (typeof existing === \"function\") return existing(config, env);\n if (existing === \"build\") return false;\n return true;\n }\n };\n}\nfunction toImportHref(root, routerRoot, routeFile) {\n const rel = routeFile.replace(/^\\.\\//, \"\");\n return pathToFileURL(resolve(root, routerRoot, rel)).href;\n}\nfunction serializeImportMap(entries) {\n return entries.map(\n ([key, href]) => ` ${JSON.stringify(key)}: () => import(${JSON.stringify(href)})`\n ).join(\",\\n\");\n}\nfunction stripRouteForWorker(route) {\n const { layouts, middlewares, ...rest } = route;\n return {\n ...rest,\n // live-render SSG in dev the same way the node middleware does\n type: route.type === \"ssg\" ? \"ssr\" : route.type,\n layouts: layouts?.map((layout) => ({\n contextKey: layout.contextKey\n })),\n middlewares: middlewares?.map((middleware) => ({\n contextKey: middleware.contextKey\n }))\n };\n}\nfunction stubRouteBuildInfo(route, preloads) {\n const pageType = route.type === \"ssg\" ? \"ssr\" : route.type;\n return {\n type: pageType,\n path: route.page,\n routeFile: route.file,\n middlewares: route.middlewares?.map((middleware) => middleware.contextKey) ?? [],\n preloadPath: \"\",\n cssPreloadPath: \"\",\n loaderPath: \"\",\n cleanPath: route.urlCleanPath || route.page,\n htmlPath: \"\",\n clientJsPath: \"\",\n serverJsPath: \"\",\n params: {},\n preloads,\n css: [],\n layoutCSS: []\n };\n}\nfunction generateWorkerdDevEntryModule(args) {\n const { root, options, routerRoot, routePaths, preloads } = args;\n const manifest = getManifest({\n routerRoot: resolve(root, routerRoot),\n ignoredRouteFiles: options.router?.ignoredRouteFiles,\n routePaths\n });\n if (!manifest) {\n throw new Error(\"[one] workerd dev: no routes manifest\");\n }\n const apiImports = /* @__PURE__ */ new Map();\n const middlewareImports = /* @__PURE__ */ new Map();\n const routeToBuildInfo = {};\n for (const route of manifest.pageRoutes) {\n for (const middleware of route.middlewares || []) {\n if (!middleware.contextKey || middlewareImports.has(middleware.contextKey)) continue;\n middlewareImports.set(\n middleware.contextKey,\n toImportHref(root, routerRoot, middleware.contextKey)\n );\n }\n if (route.file) {\n routeToBuildInfo[route.file] = stubRouteBuildInfo(route, preloads);\n }\n }\n for (const route of manifest.apiRoutes) {\n if (route.file) {\n apiImports.set(route.page, toImportHref(root, routerRoot, route.file));\n }\n for (const middleware of route.middlewares || []) {\n if (!middleware.contextKey || middlewareImports.has(middleware.contextKey)) continue;\n middlewareImports.set(\n middleware.contextKey,\n toImportHref(root, routerRoot, middleware.contextKey)\n );\n }\n }\n const pageRoutes = manifest.pageRoutes.map(stripRouteForWorker);\n const apiRoutes = manifest.apiRoutes.map(stripRouteForWorker);\n const buildInfo = {\n constants: { CACHE_KEY },\n oneOptions: options,\n routeToBuildInfo,\n pathToRoute: {},\n routeMap: {},\n manifest: {\n pageRoutes,\n apiRoutes,\n allRoutes: [...pageRoutes, ...apiRoutes]\n },\n preloads: Object.fromEntries(preloads.map((preload) => [preload, true])),\n cssPreloads: {},\n loaders: {}\n };\n const spaPreloadScripts = preloads.map((preload) => `<script type=\"module\" src=\"${preload}\"></script>`).join(\"\");\n return `if (typeof MessageChannel === 'undefined') {\n globalThis.MessageChannel = class MessageChannel {\n constructor() {\n this.port1 = { postMessage: () => {}, onmessage: null, close: () => {} }\n this.port2 = { postMessage: () => {}, onmessage: null, close: () => {} }\n }\n }\n}\n\nimport { serve, setFetchStaticHtml } from 'one/serve-worker'\n\nconst lazyRoutes = {\n serverEntry: () => import(${JSON.stringify(virtualEntryId)}),\n api: {\n${serializeImportMap([...apiImports])}\n },\n middlewares: {\n${serializeImportMap([...middlewareImports])}\n }\n}\n\nconst buildInfo = ${JSON.stringify(buildInfo)}\n\nlet server\n\nexport default {\n async fetch(request, env, ctx) {\n const url = new URL(request.url)\n const pathname = url.pathname\n\n if (pathname === '/status' || pathname.startsWith('/status?')) {\n return new Response('packager-status:running', {\n headers: { 'content-type': 'text/plain' },\n })\n }\n\n if (!server) {\n server = await serve(buildInfo, lazyRoutes, { disableModuleCache: true })\n }\n\n if (env && env.ASSETS) {\n setFetchStaticHtml(async (path) => {\n try {\n const assetUrl = new URL(request.url)\n assetUrl.pathname = path\n const assetResponse = await env.ASSETS.fetch(new Request(assetUrl))\n if (assetResponse && assetResponse.ok) {\n return await assetResponse.text()\n }\n } catch {}\n return null\n })\n }\n\n try {\n const response = await server.fetch(request, env, ctx)\n\n if (!response || response.status === 404) {\n if (env && env.ASSETS) {\n try {\n const assetResponse = await env.ASSETS.fetch(request)\n if (assetResponse && assetResponse.status !== 404) {\n return assetResponse\n }\n } catch {}\n }\n }\n\n if (!response) {\n if (request.method === 'GET' || request.method === 'HEAD') {\n return new Response(\n '<!DOCTYPE html><html><head>' +\n ${JSON.stringify(spaPreloadScripts)} +\n '</head></html>',\n { headers: { 'content-type': 'text/html' } }\n )\n }\n return new Response('Not Found', { status: 404 })\n }\n\n return response\n } finally {\n setFetchStaticHtml(null)\n }\n }\n}\n`;\n}\nfunction createWorkerdDevPlugins(options, root, routeIndex) {\n if (!shouldEnableWorkerdDev(options.web?.deploy, root)) {\n return [];\n }\n const cacheDir = join(root, WORKERD_DEV_DIR);\n const wranglerInputPath = join(cacheDir, \"_wrangler.input.jsonc\");\n const workerEntryPath = join(cacheDir, \"worker-entry.js\");\n mkdirSync(cacheDir, { recursive: true });\n writeFileSync(\n workerEntryPath,\n `export { default } from ${JSON.stringify(workerdDevEntryId)}\n`\n );\n const userWranglerConfig = loadUserWranglerConfigSync(root);\n const projectName = getCloudflareProjectNameSync(root);\n const wranglerInputConfig = createCloudflareWranglerConfig(\n projectName,\n userWranglerConfig?.config\n );\n wranglerInputConfig.main = \"worker-entry.js\";\n writeFileSync(wranglerInputPath, `${JSON.stringify(wranglerInputConfig, null, 2)}\n`);\n const preloads = options.web?.experimentalBundledDev ? [\"/bundledDevClient.mjs\", \"/assets/_virtual_one-entry.js\"] : [\"/@vite/client\", virtalEntryIdClient];\n const empty = resolvePath(\"@vxrn/utils/empty\", root);\n const absorbed = absorbedPackageAliases(root, \"web\");\n const preparePlugin = {\n name: \"one:workerd-dev-prepare\",\n apply: \"serve\",\n enforce: \"pre\",\n config() {\n return {\n environments: {\n worker: {\n define: {\n ...getPlatformEnvDefine(\"ssr\"),\n \"process.env.TAMAGUI_IS_SERVER\": JSON.stringify(\"1\"),\n \"process.env.TAMAGUI_KEEP_THEMES\": JSON.stringify(\"1\"),\n \"process.env.ONE_CACHE_KEY\": JSON.stringify(CACHE_KEY)\n },\n optimizeDeps: {\n include: [\n \"react\",\n \"react-dom\",\n \"react-dom/client\",\n \"react-dom/server.browser\",\n \"react/jsx-runtime\",\n \"react/jsx-dev-runtime\"\n ]\n },\n build: {\n rolldownOptions: {\n shimMissingExports: true\n }\n }\n }\n }\n };\n },\n // environment resolve options have no alias field; match the production\n // worker aliases with a worker-only resolveId (rolldown cannot parse RN Flow)\n resolveId: {\n filter: {\n id: /^(react-native(\\/|$|-safe-area-context$)|@react-native\\/assets-registry\\/registry$)/\n },\n handler(source) {\n if (this.environment.name !== \"worker\") return;\n if (/^react-native\\/Libraries\\//.test(source)) return empty;\n if (source === \"react-native/asset-registry\" || source === \"@react-native/assets-registry/registry\")\n return resolvePath(\"react-native-web/dist/modules/AssetRegistry\", root);\n if (source === \"react-native/package.json\")\n return resolvePath(\"react-native-web/package.json\", root);\n if (source === \"react-native\") return resolvePath(\"react-native-web\", root);\n if (source in absorbed) return absorbed[source];\n }\n },\n configureServer(server) {\n if (!server.environments.worker) {\n throw new Error(\n `[one] ONE_EXPERIMENTAL_WORKER_DEV=1 is set but @cloudflare/vite-plugin did not register a \"worker\" environment. Expected wrangler config at ${wranglerInputPath}.`\n );\n }\n console.info(\n \"[one] experimental workerd dev enabled (ONE_EXPERIMENTAL_WORKER_DEV=1)\"\n );\n }\n };\n const virtualPlugin = {\n name: \"one:workerd-dev-entry\",\n apply: \"serve\",\n resolveId: {\n filter: { id: exactRegex(workerdDevEntryId) },\n handler(id) {\n if (this.environment.name !== \"worker\") return;\n if (id === workerdDevEntryId) return resolvedWorkerdDevEntryId;\n }\n },\n load: {\n filter: { id: exactRegex(resolvedWorkerdDevEntryId) },\n handler() {\n if (this.environment.name !== \"worker\") return;\n return generateWorkerdDevEntryModule({\n root,\n options,\n routerRoot: getRouterRootFromOneOptions(options),\n routePaths: routeIndex.getPaths(),\n preloads\n });\n }\n },\n hotUpdate({ file }) {\n if (this.environment.name !== \"worker\") return;\n const graph = this.environment.moduleGraph;\n const entry = graph.getModuleById(resolvedWorkerdDevEntryId);\n if (!entry) return;\n const modules = graph.getModulesByFile(file);\n if (!modules?.size) return;\n graph.invalidateModule(entry);\n }\n };\n const cloudflarePlugins = cloudflare({\n configPath: wranglerInputPath,\n viteEnvironment: { name: \"worker\" }\n }).map(serveOnly);\n return [preparePlugin, virtualPlugin, ...cloudflarePlugins];\n}\nexport {\n createWorkerdDevPlugins,\n generateWorkerdDevEntryModule,\n shouldEnableWorkerdDev,\n workerdDevEntryId\n};\n//# sourceMappingURL=workerdDevPlugin.js.map\n"],"mappings":"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"}
@@ -3,7 +3,7 @@ import { join, resolve } from "path";
3
3
  import { pathToFileURL } from "url";
4
4
  import { resolvePath } from "@vxrn/resolve";
5
5
  import { cloudflare } from "@cloudflare/vite-plugin";
6
- import { getPlatformEnvDefine } from "@vxrn/vite-plugin-metro";
6
+ import { getPlatformEnvDefine } from "@vxrn/utils";
7
7
  import { exactRegex } from "rolldown/filter";
8
8
  import { CACHE_KEY } from "../../constants.native.js";
9
9
  import { virtalEntryIdClient, virtualEntryId } from "./virtualEntryConstants.native.js";
@@ -302,7 +302,7 @@ function createWorkerdDevPlugins(options, root, routeIndex) {
302
302
  writeFileSync(wranglerInputPath, `${JSON.stringify(wranglerInputConfig, null, 2)}
303
303
  `);
304
304
  var preloads = ((_options_web1 = options.web) === null || _options_web1 === void 0 ? void 0 : _options_web1.experimentalBundledDev) ? ["/bundledDevClient.mjs", "/assets/_virtual_one-entry.js"] : ["/@vite/client", virtalEntryIdClient];
305
- var empty = resolvePath("@vxrn/vite-plugin-metro/empty", root);
305
+ var empty = resolvePath("@vxrn/utils/empty", root);
306
306
  var absorbed = absorbedPackageAliases(root, "web");
307
307
  var preparePlugin = {
308
308
  name: "one:workerd-dev-prepare",
@@ -1 +1 @@
1
- {"version":3,"file":"workerdDevPlugin.native.js","names":[],"sources":["esm/vite/plugins/workerdDevPlugin.native.js"],"sourcesContent":["import { mkdirSync, writeFileSync } from \"fs\";\nimport { join, resolve } from \"path\";\nimport { pathToFileURL } from \"url\";\nimport { resolvePath } from \"@vxrn/resolve\";\nimport { cloudflare } from \"@cloudflare/vite-plugin\";\nimport { getPlatformEnvDefine } from \"@vxrn/vite-plugin-metro\";\nimport { exactRegex } from \"rolldown/filter\";\nimport { CACHE_KEY } from \"../../constants\";\nimport { virtalEntryIdClient, virtualEntryId } from \"./virtualEntryConstants\";\nimport { getManifest } from \"../getManifest\";\nimport { getRouterRootFromOneOptions } from \"../../utils/getRouterRootFromOneOptions\";\nimport { absorbedPackageAliases } from \"../../utils/absorbedPackages\";\nimport { createCloudflareWranglerConfig, getCloudflareProjectNameSync, loadUserWranglerConfigSync, shouldEnableWorkerdDev } from \"../cloudflareWranglerConfig\";\nvar workerdDevEntryId = \"virtual:one-workerd-dev-entry\";\nvar resolvedWorkerdDevEntryId = `\\0${workerdDevEntryId}`;\nvar WORKERD_DEV_DIR = \"node_modules/.one-workerd-dev\";\nfunction serveOnly(plugin) {\n var existing = plugin.apply;\n return {\n ...plugin,\n apply(config, env) {\n if (env.command !== \"serve\") return false;\n if (typeof existing === \"function\") return existing(config, env);\n if (existing === \"build\") return false;\n return true;\n }\n };\n}\nfunction toImportHref(root, routerRoot, routeFile) {\n var rel = routeFile.replace(/^\\.\\//, \"\");\n return pathToFileURL(resolve(root, routerRoot, rel)).href;\n}\nfunction serializeImportMap(entries) {\n return entries.map(function(param) {\n var [key, href] = param;\n return ` ${JSON.stringify(key)}: () => import(${JSON.stringify(href)})`;\n }).join(\",\\n\");\n}\nfunction stripRouteForWorker(route) {\n var { layouts, middlewares, ...rest } = route;\n return {\n ...rest,\n // live-render SSG in dev the same way the node middleware does\n type: route.type === \"ssg\" ? \"ssr\" : route.type,\n layouts: layouts === null || layouts === void 0 ? void 0 : layouts.map(function(layout) {\n return {\n contextKey: layout.contextKey\n };\n }),\n middlewares: middlewares === null || middlewares === void 0 ? void 0 : middlewares.map(function(middleware) {\n return {\n contextKey: middleware.contextKey\n };\n })\n };\n}\nfunction stubRouteBuildInfo(route, preloads) {\n var _ref;\n var _route_middlewares;\n var pageType = route.type === \"ssg\" ? \"ssr\" : route.type;\n return {\n type: pageType,\n path: route.page,\n routeFile: route.file,\n middlewares: (_ref = (_route_middlewares = route.middlewares) === null || _route_middlewares === void 0 ? void 0 : _route_middlewares.map(function(middleware) {\n return middleware.contextKey;\n })) !== null && _ref !== void 0 ? _ref : [],\n preloadPath: \"\",\n cssPreloadPath: \"\",\n loaderPath: \"\",\n cleanPath: route.urlCleanPath || route.page,\n htmlPath: \"\",\n clientJsPath: \"\",\n serverJsPath: \"\",\n params: {},\n preloads,\n css: [],\n layoutCSS: []\n };\n}\nfunction generateWorkerdDevEntryModule(args) {\n var _options_router;\n var { root, options, routerRoot, routePaths, preloads } = args;\n var manifest = getManifest({\n routerRoot: resolve(root, routerRoot),\n ignoredRouteFiles: (_options_router = options.router) === null || _options_router === void 0 ? void 0 : _options_router.ignoredRouteFiles,\n routePaths\n });\n if (!manifest) {\n throw new Error(\"[one] workerd dev: no routes manifest\");\n }\n var apiImports = /* @__PURE__ */ new Map();\n var middlewareImports = /* @__PURE__ */ new Map();\n var routeToBuildInfo = {};\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = manifest.pageRoutes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var route = _step.value;\n var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;\n try {\n for (var _iterator1 = (route.middlewares || [])[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {\n var middleware = _step1.value;\n if (!middleware.contextKey || middlewareImports.has(middleware.contextKey)) continue;\n middlewareImports.set(middleware.contextKey, toImportHref(root, routerRoot, middleware.contextKey));\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally {\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n if (route.file) {\n routeToBuildInfo[route.file] = stubRouteBuildInfo(route, preloads);\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;\n try {\n for (var _iterator2 = manifest.apiRoutes[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var route1 = _step2.value;\n if (route1.file) {\n apiImports.set(route1.page, toImportHref(root, routerRoot, route1.file));\n }\n var _iteratorNormalCompletion3 = true, _didIteratorError3 = false, _iteratorError3 = void 0;\n try {\n for (var _iterator3 = (route1.middlewares || [])[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var middleware1 = _step3.value;\n if (!middleware1.contextKey || middlewareImports.has(middleware1.contextKey)) continue;\n middlewareImports.set(middleware1.contextKey, toImportHref(root, routerRoot, middleware1.contextKey));\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return != null) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return != null) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n var pageRoutes = manifest.pageRoutes.map(stripRouteForWorker);\n var apiRoutes = manifest.apiRoutes.map(stripRouteForWorker);\n var buildInfo = {\n constants: {\n CACHE_KEY\n },\n oneOptions: options,\n routeToBuildInfo,\n pathToRoute: {},\n routeMap: {},\n manifest: {\n pageRoutes,\n apiRoutes,\n allRoutes: [\n ...pageRoutes,\n ...apiRoutes\n ]\n },\n preloads: Object.fromEntries(preloads.map(function(preload) {\n return [\n preload,\n true\n ];\n })),\n cssPreloads: {},\n loaders: {}\n };\n var spaPreloadScripts = preloads.map(function(preload) {\n return `<script type=\"module\" src=\"${preload}\"></script>`;\n }).join(\"\");\n return `if (typeof MessageChannel === 'undefined') {\n globalThis.MessageChannel = class MessageChannel {\n constructor() {\n this.port1 = { postMessage: () => {}, onmessage: null, close: () => {} }\n this.port2 = { postMessage: () => {}, onmessage: null, close: () => {} }\n }\n }\n}\n\nimport { serve, setFetchStaticHtml } from 'one/serve-worker'\n\nconst lazyRoutes = {\n serverEntry: () => import(${JSON.stringify(virtualEntryId)}),\n api: {\n${serializeImportMap([\n ...apiImports\n ])}\n },\n middlewares: {\n${serializeImportMap([\n ...middlewareImports\n ])}\n }\n}\n\nconst buildInfo = ${JSON.stringify(buildInfo)}\n\nlet server\n\nexport default {\n async fetch(request, env, ctx) {\n const url = new URL(request.url)\n const pathname = url.pathname\n\n if (pathname === '/status' || pathname.startsWith('/status?')) {\n return new Response('packager-status:running', {\n headers: { 'content-type': 'text/plain' },\n })\n }\n\n if (!server) {\n server = await serve(buildInfo, lazyRoutes, { disableModuleCache: true })\n }\n\n if (env && env.ASSETS) {\n setFetchStaticHtml(async (path) => {\n try {\n const assetUrl = new URL(request.url)\n assetUrl.pathname = path\n const assetResponse = await env.ASSETS.fetch(new Request(assetUrl))\n if (assetResponse && assetResponse.ok) {\n return await assetResponse.text()\n }\n } catch {}\n return null\n })\n }\n\n try {\n const response = await server.fetch(request, env, ctx)\n\n if (!response || response.status === 404) {\n if (env && env.ASSETS) {\n try {\n const assetResponse = await env.ASSETS.fetch(request)\n if (assetResponse && assetResponse.status !== 404) {\n return assetResponse\n }\n } catch {}\n }\n }\n\n if (!response) {\n if (request.method === 'GET' || request.method === 'HEAD') {\n return new Response(\n '<!DOCTYPE html><html><head>' +\n ${JSON.stringify(spaPreloadScripts)} +\n '</head></html>',\n { headers: { 'content-type': 'text/html' } }\n )\n }\n return new Response('Not Found', { status: 404 })\n }\n\n return response\n } finally {\n setFetchStaticHtml(null)\n }\n }\n}\n`;\n}\nfunction createWorkerdDevPlugins(options, root, routeIndex) {\n var _options_web, _options_web1;\n if (!shouldEnableWorkerdDev((_options_web = options.web) === null || _options_web === void 0 ? void 0 : _options_web.deploy, root)) {\n return [];\n }\n var cacheDir = join(root, WORKERD_DEV_DIR);\n var wranglerInputPath = join(cacheDir, \"_wrangler.input.jsonc\");\n var workerEntryPath = join(cacheDir, \"worker-entry.js\");\n mkdirSync(cacheDir, {\n recursive: true\n });\n writeFileSync(workerEntryPath, `export { default } from ${JSON.stringify(workerdDevEntryId)}\n`);\n var userWranglerConfig = loadUserWranglerConfigSync(root);\n var projectName = getCloudflareProjectNameSync(root);\n var wranglerInputConfig = createCloudflareWranglerConfig(projectName, userWranglerConfig === null || userWranglerConfig === void 0 ? void 0 : userWranglerConfig.config);\n wranglerInputConfig.main = \"worker-entry.js\";\n writeFileSync(wranglerInputPath, `${JSON.stringify(wranglerInputConfig, null, 2)}\n`);\n var preloads = ((_options_web1 = options.web) === null || _options_web1 === void 0 ? void 0 : _options_web1.experimentalBundledDev) ? [\n \"/bundledDevClient.mjs\",\n \"/assets/_virtual_one-entry.js\"\n ] : [\n \"/@vite/client\",\n virtalEntryIdClient\n ];\n var empty = resolvePath(\"@vxrn/vite-plugin-metro/empty\", root);\n var absorbed = absorbedPackageAliases(root, \"web\");\n var preparePlugin = {\n name: \"one:workerd-dev-prepare\",\n apply: \"serve\",\n enforce: \"pre\",\n config() {\n return {\n environments: {\n worker: {\n define: {\n ...getPlatformEnvDefine(\"ssr\"),\n \"process.env.TAMAGUI_IS_SERVER\": JSON.stringify(\"1\"),\n \"process.env.TAMAGUI_KEEP_THEMES\": JSON.stringify(\"1\"),\n \"process.env.ONE_CACHE_KEY\": JSON.stringify(CACHE_KEY)\n },\n optimizeDeps: {\n include: [\n \"react\",\n \"react-dom\",\n \"react-dom/client\",\n \"react-dom/server.browser\",\n \"react/jsx-runtime\",\n \"react/jsx-dev-runtime\"\n ]\n },\n build: {\n rolldownOptions: {\n shimMissingExports: true\n }\n }\n }\n }\n };\n },\n // environment resolve options have no alias field; match the production\n // worker aliases with a worker-only resolveId (rolldown cannot parse RN Flow)\n resolveId: {\n filter: {\n id: /^(react-native(\\/|$|-safe-area-context$)|@react-native\\/assets-registry\\/registry$)/\n },\n handler(source) {\n if (this.environment.name !== \"worker\") return;\n if (/^react-native\\/Libraries\\//.test(source)) return empty;\n if (source === \"react-native/asset-registry\" || source === \"@react-native/assets-registry/registry\") return resolvePath(\"react-native-web/dist/modules/AssetRegistry\", root);\n if (source === \"react-native/package.json\") return resolvePath(\"react-native-web/package.json\", root);\n if (source === \"react-native\") return resolvePath(\"react-native-web\", root);\n if (source in absorbed) return absorbed[source];\n }\n },\n configureServer(server) {\n if (!server.environments.worker) {\n throw new Error(`[one] ONE_EXPERIMENTAL_WORKER_DEV=1 is set but @cloudflare/vite-plugin did not register a \"worker\" environment. Expected wrangler config at ${wranglerInputPath}.`);\n }\n console.info(\"[one] experimental workerd dev enabled (ONE_EXPERIMENTAL_WORKER_DEV=1)\");\n }\n };\n var virtualPlugin = {\n name: \"one:workerd-dev-entry\",\n apply: \"serve\",\n resolveId: {\n filter: {\n id: exactRegex(workerdDevEntryId)\n },\n handler(id) {\n if (this.environment.name !== \"worker\") return;\n if (id === workerdDevEntryId) return resolvedWorkerdDevEntryId;\n }\n },\n load: {\n filter: {\n id: exactRegex(resolvedWorkerdDevEntryId)\n },\n handler() {\n if (this.environment.name !== \"worker\") return;\n return generateWorkerdDevEntryModule({\n root,\n options,\n routerRoot: getRouterRootFromOneOptions(options),\n routePaths: routeIndex.getPaths(),\n preloads\n });\n }\n },\n hotUpdate(param) {\n var { file } = param;\n if (this.environment.name !== \"worker\") return;\n var graph = this.environment.moduleGraph;\n var entry = graph.getModuleById(resolvedWorkerdDevEntryId);\n if (!entry) return;\n var modules = graph.getModulesByFile(file);\n if (!(modules === null || modules === void 0 ? void 0 : modules.size)) return;\n graph.invalidateModule(entry);\n }\n };\n var cloudflarePlugins = cloudflare({\n configPath: wranglerInputPath,\n viteEnvironment: {\n name: \"worker\"\n }\n }).map(serveOnly);\n return [\n preparePlugin,\n virtualPlugin,\n ...cloudflarePlugins\n ];\n}\nexport {\n createWorkerdDevPlugins,\n generateWorkerdDevEntryModule,\n shouldEnableWorkerdDev,\n workerdDevEntryId\n};\n//# sourceMappingURL=workerdDevPlugin.js.map\n"],"mappings":"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"}
1
+ {"version":3,"file":"workerdDevPlugin.native.js","names":[],"sources":["esm/vite/plugins/workerdDevPlugin.native.js"],"sourcesContent":["import { mkdirSync, writeFileSync } from \"fs\";\nimport { join, resolve } from \"path\";\nimport { pathToFileURL } from \"url\";\nimport { resolvePath } from \"@vxrn/resolve\";\nimport { cloudflare } from \"@cloudflare/vite-plugin\";\nimport { getPlatformEnvDefine } from \"@vxrn/utils\";\nimport { exactRegex } from \"rolldown/filter\";\nimport { CACHE_KEY } from \"../../constants\";\nimport { virtalEntryIdClient, virtualEntryId } from \"./virtualEntryConstants\";\nimport { getManifest } from \"../getManifest\";\nimport { getRouterRootFromOneOptions } from \"../../utils/getRouterRootFromOneOptions\";\nimport { absorbedPackageAliases } from \"../../utils/absorbedPackages\";\nimport { createCloudflareWranglerConfig, getCloudflareProjectNameSync, loadUserWranglerConfigSync, shouldEnableWorkerdDev } from \"../cloudflareWranglerConfig\";\nvar workerdDevEntryId = \"virtual:one-workerd-dev-entry\";\nvar resolvedWorkerdDevEntryId = `\\0${workerdDevEntryId}`;\nvar WORKERD_DEV_DIR = \"node_modules/.one-workerd-dev\";\nfunction serveOnly(plugin) {\n var existing = plugin.apply;\n return {\n ...plugin,\n apply(config, env) {\n if (env.command !== \"serve\") return false;\n if (typeof existing === \"function\") return existing(config, env);\n if (existing === \"build\") return false;\n return true;\n }\n };\n}\nfunction toImportHref(root, routerRoot, routeFile) {\n var rel = routeFile.replace(/^\\.\\//, \"\");\n return pathToFileURL(resolve(root, routerRoot, rel)).href;\n}\nfunction serializeImportMap(entries) {\n return entries.map(function(param) {\n var [key, href] = param;\n return ` ${JSON.stringify(key)}: () => import(${JSON.stringify(href)})`;\n }).join(\",\\n\");\n}\nfunction stripRouteForWorker(route) {\n var { layouts, middlewares, ...rest } = route;\n return {\n ...rest,\n // live-render SSG in dev the same way the node middleware does\n type: route.type === \"ssg\" ? \"ssr\" : route.type,\n layouts: layouts === null || layouts === void 0 ? void 0 : layouts.map(function(layout) {\n return {\n contextKey: layout.contextKey\n };\n }),\n middlewares: middlewares === null || middlewares === void 0 ? void 0 : middlewares.map(function(middleware) {\n return {\n contextKey: middleware.contextKey\n };\n })\n };\n}\nfunction stubRouteBuildInfo(route, preloads) {\n var _ref;\n var _route_middlewares;\n var pageType = route.type === \"ssg\" ? \"ssr\" : route.type;\n return {\n type: pageType,\n path: route.page,\n routeFile: route.file,\n middlewares: (_ref = (_route_middlewares = route.middlewares) === null || _route_middlewares === void 0 ? void 0 : _route_middlewares.map(function(middleware) {\n return middleware.contextKey;\n })) !== null && _ref !== void 0 ? _ref : [],\n preloadPath: \"\",\n cssPreloadPath: \"\",\n loaderPath: \"\",\n cleanPath: route.urlCleanPath || route.page,\n htmlPath: \"\",\n clientJsPath: \"\",\n serverJsPath: \"\",\n params: {},\n preloads,\n css: [],\n layoutCSS: []\n };\n}\nfunction generateWorkerdDevEntryModule(args) {\n var _options_router;\n var { root, options, routerRoot, routePaths, preloads } = args;\n var manifest = getManifest({\n routerRoot: resolve(root, routerRoot),\n ignoredRouteFiles: (_options_router = options.router) === null || _options_router === void 0 ? void 0 : _options_router.ignoredRouteFiles,\n routePaths\n });\n if (!manifest) {\n throw new Error(\"[one] workerd dev: no routes manifest\");\n }\n var apiImports = /* @__PURE__ */ new Map();\n var middlewareImports = /* @__PURE__ */ new Map();\n var routeToBuildInfo = {};\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = manifest.pageRoutes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var route = _step.value;\n var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;\n try {\n for (var _iterator1 = (route.middlewares || [])[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {\n var middleware = _step1.value;\n if (!middleware.contextKey || middlewareImports.has(middleware.contextKey)) continue;\n middlewareImports.set(middleware.contextKey, toImportHref(root, routerRoot, middleware.contextKey));\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally {\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n if (route.file) {\n routeToBuildInfo[route.file] = stubRouteBuildInfo(route, preloads);\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;\n try {\n for (var _iterator2 = manifest.apiRoutes[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var route1 = _step2.value;\n if (route1.file) {\n apiImports.set(route1.page, toImportHref(root, routerRoot, route1.file));\n }\n var _iteratorNormalCompletion3 = true, _didIteratorError3 = false, _iteratorError3 = void 0;\n try {\n for (var _iterator3 = (route1.middlewares || [])[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var middleware1 = _step3.value;\n if (!middleware1.contextKey || middlewareImports.has(middleware1.contextKey)) continue;\n middlewareImports.set(middleware1.contextKey, toImportHref(root, routerRoot, middleware1.contextKey));\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return != null) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return != null) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n var pageRoutes = manifest.pageRoutes.map(stripRouteForWorker);\n var apiRoutes = manifest.apiRoutes.map(stripRouteForWorker);\n var buildInfo = {\n constants: {\n CACHE_KEY\n },\n oneOptions: options,\n routeToBuildInfo,\n pathToRoute: {},\n routeMap: {},\n manifest: {\n pageRoutes,\n apiRoutes,\n allRoutes: [\n ...pageRoutes,\n ...apiRoutes\n ]\n },\n preloads: Object.fromEntries(preloads.map(function(preload) {\n return [\n preload,\n true\n ];\n })),\n cssPreloads: {},\n loaders: {}\n };\n var spaPreloadScripts = preloads.map(function(preload) {\n return `<script type=\"module\" src=\"${preload}\"></script>`;\n }).join(\"\");\n return `if (typeof MessageChannel === 'undefined') {\n globalThis.MessageChannel = class MessageChannel {\n constructor() {\n this.port1 = { postMessage: () => {}, onmessage: null, close: () => {} }\n this.port2 = { postMessage: () => {}, onmessage: null, close: () => {} }\n }\n }\n}\n\nimport { serve, setFetchStaticHtml } from 'one/serve-worker'\n\nconst lazyRoutes = {\n serverEntry: () => import(${JSON.stringify(virtualEntryId)}),\n api: {\n${serializeImportMap([\n ...apiImports\n ])}\n },\n middlewares: {\n${serializeImportMap([\n ...middlewareImports\n ])}\n }\n}\n\nconst buildInfo = ${JSON.stringify(buildInfo)}\n\nlet server\n\nexport default {\n async fetch(request, env, ctx) {\n const url = new URL(request.url)\n const pathname = url.pathname\n\n if (pathname === '/status' || pathname.startsWith('/status?')) {\n return new Response('packager-status:running', {\n headers: { 'content-type': 'text/plain' },\n })\n }\n\n if (!server) {\n server = await serve(buildInfo, lazyRoutes, { disableModuleCache: true })\n }\n\n if (env && env.ASSETS) {\n setFetchStaticHtml(async (path) => {\n try {\n const assetUrl = new URL(request.url)\n assetUrl.pathname = path\n const assetResponse = await env.ASSETS.fetch(new Request(assetUrl))\n if (assetResponse && assetResponse.ok) {\n return await assetResponse.text()\n }\n } catch {}\n return null\n })\n }\n\n try {\n const response = await server.fetch(request, env, ctx)\n\n if (!response || response.status === 404) {\n if (env && env.ASSETS) {\n try {\n const assetResponse = await env.ASSETS.fetch(request)\n if (assetResponse && assetResponse.status !== 404) {\n return assetResponse\n }\n } catch {}\n }\n }\n\n if (!response) {\n if (request.method === 'GET' || request.method === 'HEAD') {\n return new Response(\n '<!DOCTYPE html><html><head>' +\n ${JSON.stringify(spaPreloadScripts)} +\n '</head></html>',\n { headers: { 'content-type': 'text/html' } }\n )\n }\n return new Response('Not Found', { status: 404 })\n }\n\n return response\n } finally {\n setFetchStaticHtml(null)\n }\n }\n}\n`;\n}\nfunction createWorkerdDevPlugins(options, root, routeIndex) {\n var _options_web, _options_web1;\n if (!shouldEnableWorkerdDev((_options_web = options.web) === null || _options_web === void 0 ? void 0 : _options_web.deploy, root)) {\n return [];\n }\n var cacheDir = join(root, WORKERD_DEV_DIR);\n var wranglerInputPath = join(cacheDir, \"_wrangler.input.jsonc\");\n var workerEntryPath = join(cacheDir, \"worker-entry.js\");\n mkdirSync(cacheDir, {\n recursive: true\n });\n writeFileSync(workerEntryPath, `export { default } from ${JSON.stringify(workerdDevEntryId)}\n`);\n var userWranglerConfig = loadUserWranglerConfigSync(root);\n var projectName = getCloudflareProjectNameSync(root);\n var wranglerInputConfig = createCloudflareWranglerConfig(projectName, userWranglerConfig === null || userWranglerConfig === void 0 ? void 0 : userWranglerConfig.config);\n wranglerInputConfig.main = \"worker-entry.js\";\n writeFileSync(wranglerInputPath, `${JSON.stringify(wranglerInputConfig, null, 2)}\n`);\n var preloads = ((_options_web1 = options.web) === null || _options_web1 === void 0 ? void 0 : _options_web1.experimentalBundledDev) ? [\n \"/bundledDevClient.mjs\",\n \"/assets/_virtual_one-entry.js\"\n ] : [\n \"/@vite/client\",\n virtalEntryIdClient\n ];\n var empty = resolvePath(\"@vxrn/utils/empty\", root);\n var absorbed = absorbedPackageAliases(root, \"web\");\n var preparePlugin = {\n name: \"one:workerd-dev-prepare\",\n apply: \"serve\",\n enforce: \"pre\",\n config() {\n return {\n environments: {\n worker: {\n define: {\n ...getPlatformEnvDefine(\"ssr\"),\n \"process.env.TAMAGUI_IS_SERVER\": JSON.stringify(\"1\"),\n \"process.env.TAMAGUI_KEEP_THEMES\": JSON.stringify(\"1\"),\n \"process.env.ONE_CACHE_KEY\": JSON.stringify(CACHE_KEY)\n },\n optimizeDeps: {\n include: [\n \"react\",\n \"react-dom\",\n \"react-dom/client\",\n \"react-dom/server.browser\",\n \"react/jsx-runtime\",\n \"react/jsx-dev-runtime\"\n ]\n },\n build: {\n rolldownOptions: {\n shimMissingExports: true\n }\n }\n }\n }\n };\n },\n // environment resolve options have no alias field; match the production\n // worker aliases with a worker-only resolveId (rolldown cannot parse RN Flow)\n resolveId: {\n filter: {\n id: /^(react-native(\\/|$|-safe-area-context$)|@react-native\\/assets-registry\\/registry$)/\n },\n handler(source) {\n if (this.environment.name !== \"worker\") return;\n if (/^react-native\\/Libraries\\//.test(source)) return empty;\n if (source === \"react-native/asset-registry\" || source === \"@react-native/assets-registry/registry\") return resolvePath(\"react-native-web/dist/modules/AssetRegistry\", root);\n if (source === \"react-native/package.json\") return resolvePath(\"react-native-web/package.json\", root);\n if (source === \"react-native\") return resolvePath(\"react-native-web\", root);\n if (source in absorbed) return absorbed[source];\n }\n },\n configureServer(server) {\n if (!server.environments.worker) {\n throw new Error(`[one] ONE_EXPERIMENTAL_WORKER_DEV=1 is set but @cloudflare/vite-plugin did not register a \"worker\" environment. Expected wrangler config at ${wranglerInputPath}.`);\n }\n console.info(\"[one] experimental workerd dev enabled (ONE_EXPERIMENTAL_WORKER_DEV=1)\");\n }\n };\n var virtualPlugin = {\n name: \"one:workerd-dev-entry\",\n apply: \"serve\",\n resolveId: {\n filter: {\n id: exactRegex(workerdDevEntryId)\n },\n handler(id) {\n if (this.environment.name !== \"worker\") return;\n if (id === workerdDevEntryId) return resolvedWorkerdDevEntryId;\n }\n },\n load: {\n filter: {\n id: exactRegex(resolvedWorkerdDevEntryId)\n },\n handler() {\n if (this.environment.name !== \"worker\") return;\n return generateWorkerdDevEntryModule({\n root,\n options,\n routerRoot: getRouterRootFromOneOptions(options),\n routePaths: routeIndex.getPaths(),\n preloads\n });\n }\n },\n hotUpdate(param) {\n var { file } = param;\n if (this.environment.name !== \"worker\") return;\n var graph = this.environment.moduleGraph;\n var entry = graph.getModuleById(resolvedWorkerdDevEntryId);\n if (!entry) return;\n var modules = graph.getModulesByFile(file);\n if (!(modules === null || modules === void 0 ? void 0 : modules.size)) return;\n graph.invalidateModule(entry);\n }\n };\n var cloudflarePlugins = cloudflare({\n configPath: wranglerInputPath,\n viteEnvironment: {\n name: \"worker\"\n }\n }).map(serveOnly);\n return [\n preparePlugin,\n virtualPlugin,\n ...cloudflarePlugins\n ];\n}\nexport {\n createWorkerdDevPlugins,\n generateWorkerdDevEntryModule,\n shouldEnableWorkerdDev,\n workerdDevEntryId\n};\n//# sourceMappingURL=workerdDevPlugin.js.map\n"],"mappings":";;;;;;;;;;;;;;;AAaA,IAAI,oBAAoB;AACxB,IAAI,4BAA4B,KAAK;AACrC,IAAI,kBAAkB;AACtB,SAAS,UAAU,QAAQ;CACzB,IAAI,WAAW,OAAO;CACtB,OAAO;EACL,GAAG;EACH,MAAM,QAAQ,KAAK;GACjB,IAAI,IAAI,YAAY,SAAS,OAAO;GACpC,IAAI,OAAO,aAAa,YAAY,OAAO,SAAS,QAAQ,GAAG;GAC/D,IAAI,aAAa,SAAS,OAAO;GACjC,OAAO;EACT;CACF;AACF;AACA,SAAS,aAAa,MAAM,YAAY,WAAW;CACjD,IAAI,MAAM,UAAU,QAAQ,SAAS,EAAE;CACvC,OAAO,cAAc,QAAQ,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC;AACvD;AACA,SAAS,mBAAmB,SAAS;CACnC,OAAO,QAAQ,IAAI,SAAS,OAAO;EACjC,IAAI,CAAC,KAAK,QAAQ;EAClB,OAAO,KAAK,KAAK,UAAU,GAAG,EAAE,iBAAiB,KAAK,UAAU,IAAI,EAAE;CACxE,CAAC,CAAC,CAAC,KAAK,KAAK;AACf;AACA,SAAS,oBAAoB,OAAO;CAClC,IAAI,EAAE,SAAS,aAAa,GAAG,SAAS;CACxC,OAAO;EACL,GAAG;EAEH,MAAM,MAAM,SAAS,QAAQ,QAAQ,MAAM;EAC3C,SAAS,YAAY,QAAQ,YAAY,KAAK,IAAI,KAAK,IAAI,QAAQ,IAAI,SAAS,QAAQ;GACtF,OAAO,EACL,YAAY,OAAO,WACrB;EACF,CAAC;EACD,aAAa,gBAAgB,QAAQ,gBAAgB,KAAK,IAAI,KAAK,IAAI,YAAY,IAAI,SAAS,YAAY;GAC1G,OAAO,EACL,YAAY,WAAW,WACzB;EACF,CAAC;CACH;AACF;AACA,SAAS,mBAAmB,OAAO,UAAU;CAC3C,IAAI;CACJ,IAAI;CACJ,IAAI,WAAW,MAAM,SAAS,QAAQ,QAAQ,MAAM;CACpD,OAAO;EACL,MAAM;EACN,MAAM,MAAM;EACZ,WAAW,MAAM;EACjB,cAAc,QAAQ,qBAAqB,MAAM,iBAAiB,QAAQ,uBAAuB,KAAK,IAAI,KAAK,IAAI,mBAAmB,IAAI,SAAS,YAAY;GAC7J,OAAO,WAAW;EACpB,CAAC,OAAO,QAAQ,SAAS,KAAK,IAAI,OAAO,CAAC;EAC1C,aAAa;EACb,gBAAgB;EAChB,YAAY;EACZ,WAAW,MAAM,gBAAgB,MAAM;EACvC,UAAU;EACV,cAAc;EACd,cAAc;EACd,QAAQ,CAAC;EACT;EACA,KAAK,CAAC;EACN,WAAW,CAAC;CACd;AACF;AACA,SAAS,8BAA8B,MAAM;CAC3C,IAAI;CACJ,IAAI,EAAE,MAAM,SAAS,YAAY,YAAY,aAAa;CAC1D,IAAI,WAAW,YAAY;EACzB,YAAY,QAAQ,MAAM,UAAU;EACpC,oBAAoB,kBAAkB,QAAQ,YAAY,QAAQ,oBAAoB,KAAK,IAAI,KAAK,IAAI,gBAAgB;EACxH;CACF,CAAC;CACD,IAAI,CAAC,UAAU;EACb,MAAM,IAAI,MAAM,uCAAuC;CACzD;CACA,IAAI,6BAA6B,IAAI,IAAI;CACzC,IAAI,oCAAoC,IAAI,IAAI;CAChD,IAAI,mBAAmB,CAAC;CACxB,IAAI,4BAA4B,MAAM,oBAAoB,OAAO,iBAAiB,KAAK;CACvF,IAAI;EACF,KAAK,IAAI,YAAY,SAAS,WAAW,OAAO,SAAS,CAAC,GAAG,OAAO,EAAE,6BAA6B,QAAQ,UAAU,KAAK,EAAC,CAAE,OAAO,4BAA4B,MAAM;GACpK,IAAI,QAAQ,MAAM;GAClB,IAAI,6BAA6B,MAAM,qBAAqB,OAAO,kBAAkB,KAAK;GAC1F,IAAI;IACF,KAAK,IAAI,cAAc,MAAM,eAAe,CAAC,EAAC,CAAE,OAAO,SAAS,CAAC,GAAG,QAAQ,EAAE,8BAA8B,SAAS,WAAW,KAAK,EAAC,CAAE,OAAO,6BAA6B,MAAM;KAChL,IAAI,aAAa,OAAO;KACxB,IAAI,CAAC,WAAW,cAAc,kBAAkB,IAAI,WAAW,UAAU,GAAG;KAC5E,kBAAkB,IAAI,WAAW,YAAY,aAAa,MAAM,YAAY,WAAW,UAAU,CAAC;IACpG;GACF,SAAS,KAAK;IACZ,qBAAqB;IACrB,kBAAkB;GACpB,UAAU;IACR,IAAI;KACF,IAAI,CAAC,8BAA8B,WAAW,UAAU,MAAM;MAC5D,WAAW,OAAO;KACpB;IACF,UAAU;KACR,IAAI,oBAAoB;MACtB,MAAM;KACR;IACF;GACF;GACA,IAAI,MAAM,MAAM;IACd,iBAAiB,MAAM,QAAQ,mBAAmB,OAAO,QAAQ;GACnE;EACF;CACF,SAAS,KAAK;EACZ,oBAAoB;EACpB,iBAAiB;CACnB,UAAU;EACR,IAAI;GACF,IAAI,CAAC,6BAA6B,UAAU,UAAU,MAAM;IAC1D,UAAU,OAAO;GACnB;EACF,UAAU;GACR,IAAI,mBAAmB;IACrB,MAAM;GACR;EACF;CACF;CACA,IAAI,6BAA6B,MAAM,qBAAqB,OAAO,kBAAkB,KAAK;CAC1F,IAAI;EACF,KAAK,IAAI,aAAa,SAAS,UAAU,OAAO,SAAS,CAAC,GAAG,QAAQ,EAAE,8BAA8B,SAAS,WAAW,KAAK,EAAC,CAAE,OAAO,6BAA6B,MAAM;GACzK,IAAI,SAAS,OAAO;GACpB,IAAI,OAAO,MAAM;IACf,WAAW,IAAI,OAAO,MAAM,aAAa,MAAM,YAAY,OAAO,IAAI,CAAC;GACzE;GACA,IAAI,6BAA6B,MAAM,qBAAqB,OAAO,kBAAkB,KAAK;GAC1F,IAAI;IACF,KAAK,IAAI,cAAc,OAAO,eAAe,CAAC,EAAC,CAAE,OAAO,SAAS,CAAC,GAAG,QAAQ,EAAE,8BAA8B,SAAS,WAAW,KAAK,EAAC,CAAE,OAAO,6BAA6B,MAAM;KACjL,IAAI,cAAc,OAAO;KACzB,IAAI,CAAC,YAAY,cAAc,kBAAkB,IAAI,YAAY,UAAU,GAAG;KAC9E,kBAAkB,IAAI,YAAY,YAAY,aAAa,MAAM,YAAY,YAAY,UAAU,CAAC;IACtG;GACF,SAAS,KAAK;IACZ,qBAAqB;IACrB,kBAAkB;GACpB,UAAU;IACR,IAAI;KACF,IAAI,CAAC,8BAA8B,WAAW,UAAU,MAAM;MAC5D,WAAW,OAAO;KACpB;IACF,UAAU;KACR,IAAI,oBAAoB;MACtB,MAAM;KACR;IACF;GACF;EACF;CACF,SAAS,KAAK;EACZ,qBAAqB;EACrB,kBAAkB;CACpB,UAAU;EACR,IAAI;GACF,IAAI,CAAC,8BAA8B,WAAW,UAAU,MAAM;IAC5D,WAAW,OAAO;GACpB;EACF,UAAU;GACR,IAAI,oBAAoB;IACtB,MAAM;GACR;EACF;CACF;CACA,IAAI,aAAa,SAAS,WAAW,IAAI,mBAAmB;CAC5D,IAAI,YAAY,SAAS,UAAU,IAAI,mBAAmB;CAC1D,IAAI,YAAY;EACd,WAAW,EACT,UACF;EACA,YAAY;EACZ;EACA,aAAa,CAAC;EACd,UAAU,CAAC;EACX,UAAU;GACR;GACA;GACA,WAAW,CACT,GAAG,YACH,GAAG,SACL;EACF;EACA,UAAU,OAAO,YAAY,SAAS,IAAI,SAAS,SAAS;GAC1D,OAAO,CACL,SACA,IACF;EACF,CAAC,CAAC;EACF,aAAa,CAAC;EACd,SAAS,CAAC;CACZ;CACA,IAAI,oBAAoB,SAAS,IAAI,SAAS,SAAS;EACrD,OAAO,8BAA8B,QAAQ;CAC/C,CAAC,CAAC,CAAC,KAAK,EAAE;CACV,OAAO;;;;;;;;;;;;8BAYqB,KAAK,UAAU,cAAc,EAAE;;EAE3D,mBAAmB,CACjB,GAAG,UACL,CAAC,EAAE;;;EAGH,mBAAmB,CACjB,GAAG,iBACL,CAAC,EAAE;;;;oBAIe,KAAK,UAAU,SAAS,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAmD9B,KAAK,UAAU,iBAAiB,EAAE;;;;;;;;;;;;;;;AAelD;AACA,SAAS,wBAAwB,SAAS,MAAM,YAAY;CAC1D,IAAI,cAAc;CAClB,IAAI,CAAC,wBAAwB,eAAe,QAAQ,SAAS,QAAQ,iBAAiB,KAAK,IAAI,KAAK,IAAI,aAAa,QAAQ,IAAI,GAAG;EAClI,OAAO,CAAC;CACV;CACA,IAAI,WAAW,KAAK,MAAM,eAAe;CACzC,IAAI,oBAAoB,KAAK,UAAU,uBAAuB;CAC9D,IAAI,kBAAkB,KAAK,UAAU,iBAAiB;CACtD,UAAU,UAAU,EAClB,WAAW,KACb,CAAC;CACD,cAAc,iBAAiB,2BAA2B,KAAK,UAAU,iBAAiB,EAAE;CAC7F;CACC,IAAI,qBAAqB,2BAA2B,IAAI;CACxD,IAAI,cAAc,6BAA6B,IAAI;CACnD,IAAI,sBAAsB,+BAA+B,aAAa,uBAAuB,QAAQ,uBAAuB,KAAK,IAAI,KAAK,IAAI,mBAAmB,MAAM;CACvK,oBAAoB,OAAO;CAC3B,cAAc,mBAAmB,GAAG,KAAK,UAAU,qBAAqB,MAAM,CAAC,EAAE;CAClF;CACC,IAAI,aAAa,gBAAgB,QAAQ,SAAS,QAAQ,kBAAkB,KAAK,IAAI,KAAK,IAAI,cAAc,0BAA0B,CACpI,yBACA,+BACF,IAAI,CACF,iBACA,mBACF;CACA,IAAI,QAAQ,YAAY,qBAAqB,IAAI;CACjD,IAAI,WAAW,uBAAuB,MAAM,KAAK;CACjD,IAAI,gBAAgB;EAClB,MAAM;EACN,OAAO;EACP,SAAS;EACT,SAAS;GACP,OAAO,EACL,cAAc,EACZ,QAAQ;IACN,QAAQ;KACN,GAAG,qBAAqB,KAAK;KAC7B,iCAAiC,KAAK,UAAU,GAAG;KACnD,mCAAmC,KAAK,UAAU,GAAG;KACrD,6BAA6B,KAAK,UAAU,SAAS;IACvD;IACA,cAAc,EACZ,SAAS;KACP;KACA;KACA;KACA;KACA;KACA;IACF,EACF;IACA,OAAO,EACL,iBAAiB,EACf,oBAAoB,KACtB,EACF;GACF,EACF,EACF;EACF;EAGA,WAAW;GACT,QAAQ,EACN,IAAI,sFACN;GACA,QAAQ,QAAQ;IACd,IAAI,KAAK,YAAY,SAAS,UAAU;IACxC,IAAI,6BAA6B,KAAK,MAAM,GAAG,OAAO;IACtD,IAAI,WAAW,iCAAiC,WAAW,0CAA0C,OAAO,YAAY,+CAA+C,IAAI;IAC3K,IAAI,WAAW,6BAA6B,OAAO,YAAY,iCAAiC,IAAI;IACpG,IAAI,WAAW,gBAAgB,OAAO,YAAY,oBAAoB,IAAI;IAC1E,IAAI,UAAU,UAAU,OAAO,SAAS;GAC1C;EACF;EACA,gBAAgB,QAAQ;GACtB,IAAI,CAAC,OAAO,aAAa,QAAQ;IAC/B,MAAM,IAAI,MAAM,+IAA+I,kBAAkB,EAAE;GACrL;GACA,QAAQ,KAAK,wEAAwE;EACvF;CACF;CACA,IAAI,gBAAgB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;GACT,QAAQ,EACN,IAAI,WAAW,iBAAiB,EAClC;GACA,QAAQ,IAAI;IACV,IAAI,KAAK,YAAY,SAAS,UAAU;IACxC,IAAI,wCAA0B,OAAO;GACvC;EACF;EACA,MAAM;GACJ,QAAQ,EACN,IAAI,WAAW,yBAAyB,EAC1C;GACA,UAAU;IACR,IAAI,KAAK,YAAY,SAAS,UAAU;IACxC,OAAO,8BAA8B;KACnC;KACA;KACA,YAAY,4BAA4B,OAAO;KAC/C,YAAY,WAAW,SAAS;KAChC;IACF,CAAC;GACH;EACF;EACA,UAAU,OAAO;GACf,IAAI,EAAE,SAAS;GACf,IAAI,KAAK,YAAY,SAAS,UAAU;GACxC,IAAI,QAAQ,KAAK,YAAY;GAC7B,IAAI,QAAQ,MAAM,cAAc,yBAAyB;GACzD,IAAI,CAAC,OAAO;GACZ,IAAI,UAAU,MAAM,iBAAiB,IAAI;GACzC,IAAI,EAAE,YAAY,QAAQ,YAAY,KAAK,IAAI,KAAK,IAAI,QAAQ,OAAO;GACvE,MAAM,iBAAiB,KAAK;EAC9B;CACF;CACA,IAAI,oBAAoB,WAAW;EACjC,YAAY;EACZ,iBAAiB,EACf,MAAM,SACR;CACF,CAAC,CAAC,CAAC,IAAI,SAAS;CAChB,OAAO;EACL;EACA;EACA,GAAG;CACL;AACF"}
@@ -0,0 +1,52 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>NSPrivacyCollectedDataTypes</key>
6
+ <array>
7
+ </array>
8
+ <key>NSPrivacyTracking</key>
9
+ <false/>
10
+ <key>NSPrivacyTrackingDomains</key>
11
+ <array/>
12
+ <key>NSPrivacyAccessedAPITypes</key>
13
+ <array>
14
+ <dict>
15
+ <key>NSPrivacyAccessedAPIType</key>
16
+ <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
17
+ <key>NSPrivacyAccessedAPITypeReasons</key>
18
+ <array>
19
+ <string>CA92.1</string>
20
+ </array>
21
+ </dict>
22
+ <dict>
23
+ <key>NSPrivacyAccessedAPIType</key>
24
+ <string>NSPrivacyAccessedAPICategorySystemBootTime</string>
25
+ <key>NSPrivacyAccessedAPITypeReasons</key>
26
+ <array>
27
+ <string>35F9.1</string>
28
+ <string>8FFB.1</string>
29
+ </array>
30
+ </dict>
31
+ <dict>
32
+ <key>NSPrivacyAccessedAPIType</key>
33
+ <string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
34
+ <key>NSPrivacyAccessedAPITypeReasons</key>
35
+ <array>
36
+ <string>C617.1</string>
37
+ <string>0A2A.1</string>
38
+ <string>3B52.1</string>
39
+ </array>
40
+ </dict>
41
+ <dict>
42
+ <key>NSPrivacyAccessedAPIType</key>
43
+ <string>NSPrivacyAccessedAPICategoryDiskSpace</string>
44
+ <key>NSPrivacyAccessedAPITypeReasons</key>
45
+ <array>
46
+ <string>E174.1</string>
47
+ <string>85F4.1</string>
48
+ </array>
49
+ </dict>
50
+ </array>
51
+ </dict>
52
+ </plist>
package/metro-entry.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // initialize globals before configured setup, whose side-effect import is eager
2
2
  // even when metro defers the named createApp import.
3
- import 'react-native/Libraries/Core/InitializeCore'
3
+ import 'react-native/setup-env'
4
4
  import './dist/esm/polyfills-mobile.native.js'
5
5
 
6
6
  // configured setup is injected after these imports by one-router-metro.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "one",
3
- "version": "2.7.7",
3
+ "version": "2.8.1",
4
4
  "description": "One is a React framework for web, iOS, and Android apps.",
5
5
  "license": "BSD-3-Clause",
6
6
  "sideEffects": [
@@ -192,6 +192,7 @@
192
192
  "README.md",
193
193
  "ios",
194
194
  "android/build.gradle",
195
+ "android/consumer-rules.pro",
195
196
  "android/CMakeLists.txt",
196
197
  "android/portal",
197
198
  "android/src",
@@ -219,12 +220,6 @@
219
220
  },
220
221
  "dependencies": {
221
222
  "@azure/core-asynciterator-polyfill": "^1.0.2",
222
- "@babel/core": "^7.28.5",
223
- "@babel/generator": "7.29.7",
224
- "@babel/parser": "^7.28.5",
225
- "@babel/plugin-transform-export-namespace-from": "^7.27.1",
226
- "@babel/traverse": "^7.28.5",
227
- "@babel/types": "^7.28.5",
228
223
  "@bacons/text-decoder": "^0.0.0",
229
224
  "@cloudflare/vite-plugin": "^1.33.1",
230
225
  "@op-engineering/op-sqlite": "18.2.5",
@@ -236,18 +231,15 @@
236
231
  "@react-navigation/native-stack": "8.0.0-alpha.59",
237
232
  "@react-navigation/routers": "8.0.0-alpha.21",
238
233
  "@ungap/structured-clone": "^1.2.0",
239
- "@vxrn/color-scheme": "2.7.7",
240
- "@vxrn/compiler": "2.7.7",
241
- "@vxrn/resolve": "2.7.7",
242
- "@vxrn/tslib-lite": "2.7.7",
243
- "@vxrn/use-isomorphic-layout-effect": "2.7.7",
244
- "@vxrn/utils": "2.7.7",
245
- "@vxrn/vite-plugin-metro": "2.7.7",
246
- "babel-dead-code-elimination": "1.0.10",
247
- "babel-plugin-module-resolver": "^5.0.2",
234
+ "@vxrn/color-scheme": "2.8.1",
235
+ "@vxrn/compiler": "2.8.1",
236
+ "@vxrn/resolve": "2.8.1",
237
+ "@vxrn/tslib-lite": "2.8.1",
238
+ "@vxrn/use-isomorphic-layout-effect": "2.8.1",
239
+ "@vxrn/utils": "2.8.1",
248
240
  "citty": "^0.1.6",
249
241
  "core-js": "^3.38.1",
250
- "create-vxrn": "2.7.7",
242
+ "create-vxrn": "2.8.1",
251
243
  "escape-string-regexp": "^5.0.0",
252
244
  "fast-deep-equal": "^3.1.3",
253
245
  "fast-glob": "^3.3.3",
@@ -260,37 +252,46 @@
260
252
  "oxc-parser": "^0.112.0",
261
253
  "perfect-debounce": "^1.0.0",
262
254
  "picocolors": "^1.0.0",
263
- "react-compiler-runtime": "^19.0.0-beta-201e55d-20241215",
255
+ "react-compiler-runtime": "^1.0.0",
264
256
  "react-native-css-interop": "^0.2.6",
265
257
  "react-native-nitro-image": "0.15.2",
266
258
  "react-native-nitro-modules": "0.37.1",
267
259
  "react-native-nitro-web-image": "0.15.2",
268
260
  "ts-pattern": "^5.6.2",
269
261
  "tsconfig-paths": "^4",
270
- "use-latest-callback": "^0.2.3",
262
+ "use-latest-callback": "^0.3.5",
271
263
  "vite": "^8.2.2",
272
- "vxrn": "2.7.7",
264
+ "vxrn": "2.8.1",
273
265
  "web-streams-polyfill": "^4.3.0",
274
266
  "ws": "^8.21.0",
275
267
  "xxhashjs": "^0.2.2"
276
268
  },
277
269
  "peerDependencies": {
278
270
  "@callstack/liquid-glass": ">=0.6.0",
279
- "@react-native/babel-preset": "^0.87.1",
271
+ "@react-native/babel-preset": "^0.88.0",
280
272
  "@react-navigation/core": "8.0.0-alpha.41",
281
273
  "@react-navigation/drawer": "8.0.0-alpha.58",
282
274
  "@react-navigation/native": "8.0.0-alpha.51",
283
- "react": "^19.2.3",
284
- "react-dom": "^19.2.3",
285
- "react-native": "^0.87.0",
275
+ "react": "^19.3.0",
276
+ "react-dom": "^19.3.0",
277
+ "react-native": "^0.88.0",
286
278
  "react-native-gesture-handler": ">=3.0.0",
287
- "react-native-reanimated": ">=4.0.0",
279
+ "react-native-reanimated": ">=4.7.1",
288
280
  "react-native-screens": ">=4.30.0",
289
281
  "react-native-web": "^0.21.2",
290
- "react-native-worklets": ">=0.12.2",
282
+ "react-native-worklets": ">=0.13.0",
291
283
  "sharp": "^0.35.5",
292
284
  "@tamagui/sheet": ">=3.0.0-beta.1537.1 <4 || >=3.0.0-0.canary <3.0.0-1",
293
- "@tamagui/web": ">=3.0.0-beta.1537.1 <4 || >=3.0.0-0.canary <3.0.0-1"
285
+ "@tamagui/web": ">=3.0.0-beta.1537.1 <4 || >=3.0.0-0.canary <3.0.0-1",
286
+ "@babel/core": "^7.28.5",
287
+ "@babel/generator": "7.29.7",
288
+ "@babel/parser": "^7.28.5",
289
+ "@babel/plugin-transform-export-namespace-from": "^7.27.1",
290
+ "@babel/traverse": "^7.28.5",
291
+ "@babel/types": "^7.28.5",
292
+ "babel-dead-code-elimination": "1.0.10",
293
+ "babel-plugin-module-resolver": "^5.0.2",
294
+ "@vxrn/vite-plugin-metro": "2.8.1"
294
295
  },
295
296
  "peerDependenciesMeta": {
296
297
  "@react-native/babel-preset": {
@@ -322,41 +323,77 @@
322
323
  },
323
324
  "@tamagui/web": {
324
325
  "optional": true
326
+ },
327
+ "@babel/core": {
328
+ "optional": true
329
+ },
330
+ "@babel/generator": {
331
+ "optional": true
332
+ },
333
+ "@babel/parser": {
334
+ "optional": true
335
+ },
336
+ "@babel/plugin-transform-export-namespace-from": {
337
+ "optional": true
338
+ },
339
+ "@babel/traverse": {
340
+ "optional": true
341
+ },
342
+ "@babel/types": {
343
+ "optional": true
344
+ },
345
+ "babel-dead-code-elimination": {
346
+ "optional": true
347
+ },
348
+ "babel-plugin-module-resolver": {
349
+ "optional": true
350
+ },
351
+ "@vxrn/vite-plugin-metro": {
352
+ "optional": true
325
353
  }
326
354
  },
327
355
  "devDependencies": {
328
- "@tamagui/sheet": "3.0.17",
356
+ "@tamagui/sheet": "3.0.18",
329
357
  "@callstack/liquid-glass": "^0.8.1",
330
- "@react-native/babel-plugin-codegen": "0.87.1",
331
- "@react-native/codegen": "^0.87.1",
358
+ "@react-native/babel-plugin-codegen": "0.88.0",
359
+ "@react-native/codegen": "^0.88.0",
332
360
  "@react-navigation/core": "8.0.0-alpha.41",
333
361
  "@react-navigation/drawer": "8.0.0-alpha.58",
334
362
  "@react-navigation/native": "8.0.0-alpha.51",
335
- "@tamagui/build": "3.0.17",
363
+ "@tamagui/build": "3.0.18",
336
364
  "@types/node": "^24.10.0",
337
- "@types/react-dom": "^19.2.2",
365
+ "@types/react-dom": "^19.3.0",
338
366
  "@types/react-test-renderer": "^19.1.0",
339
367
  "@types/xxhashjs": "^0.2.4",
340
- "@vxrn/emitter": "2.7.7",
368
+ "@vxrn/emitter": "2.8.1",
341
369
  "depcheck": "^1.4.7",
342
370
  "esbuild": "^0.25.12",
343
371
  "immer": "^10.1.1",
344
372
  "nitrogen": "0.37.1",
345
- "react": "19.2.3",
346
- "react-dom": "19.2.3",
347
- "react-native": "0.87.1",
348
- "react-native-gesture-handler": "~3.3.0",
349
- "react-native-reanimated": "~4.6.0",
373
+ "react": "19.3.0",
374
+ "react-dom": "19.3.0",
375
+ "react-native": "0.88.0",
376
+ "react-native-gesture-handler": "~3.4.0",
377
+ "react-native-reanimated": "~4.7.1",
350
378
  "react-native-screens": "~4.30.0",
351
379
  "react-native-web": "^0.21.2",
352
- "react-native-worklets": "~0.12.2",
353
- "react-test-renderer": "^19.2.0",
380
+ "react-native-worklets": "~0.13.0",
381
+ "react-test-renderer": "19.3.0",
354
382
  "rolldown": "^1.2.8",
355
383
  "sharp": "^0.35.5",
356
384
  "typescript": "7.0.2",
357
385
  "vitest": "^4.1.0",
358
386
  "yoga-layout": "^3.2.1",
359
- "@tamagui/web": "3.0.17"
387
+ "@tamagui/web": "3.0.18",
388
+ "@babel/core": "^7.28.5",
389
+ "@babel/generator": "7.29.7",
390
+ "@babel/parser": "^7.28.5",
391
+ "@babel/plugin-transform-export-namespace-from": "^7.27.1",
392
+ "@babel/traverse": "^7.28.5",
393
+ "@babel/types": "^7.28.5",
394
+ "babel-dead-code-elimination": "1.0.10",
395
+ "babel-plugin-module-resolver": "^5.0.2",
396
+ "@vxrn/vite-plugin-metro": "2.8.1"
360
397
  },
361
398
  "publishConfig": {
362
399
  "access": "public"
@@ -513,7 +550,7 @@
513
550
  }
514
551
  }
515
552
  },
516
- "releaseSourceCommit": "2335a80d570e794536b7bb62b023bb73ec1e4d59",
553
+ "releaseSourceCommit": "9c7de1d429903229d3a6ef9a741c5ec57102ba6b",
517
554
  "repository": {
518
555
  "type": "git",
519
556
  "url": "git+https://github.com/onejs/one.git",
@@ -72,7 +72,7 @@ function evaluateCoreJs(imports: string[], entry?: string) {
72
72
  if (entry) {
73
73
  const factory = vm.runInContext(`(function(require) { ${entry}\n })`, context)
74
74
  factory((specifier: string) => {
75
- if (specifier === 'react-native/Libraries/Core/InitializeCore') {
75
+ if (specifier === 'react-native/setup-env') {
76
76
  context.nativeInitialized = true
77
77
  return {}
78
78
  }
@@ -139,7 +139,7 @@ const metroEntrySource = readFileSync(new URL('../../metro-entry.js', import.met
139
139
  const compiledMetroEntry = compileMetroEntry(metroEntrySource)
140
140
  const compiledControlEntry = compileMetroEntry(
141
141
  metroEntrySource
142
- .replace("import 'react-native/Libraries/Core/InitializeCore'", '')
142
+ .replace("import 'react-native/setup-env'", '')
143
143
  .replace("import './dist/esm/polyfills-mobile.native.js'", '')
144
144
  )
145
145
 
package/src/cli/build.ts CHANGED
@@ -212,7 +212,7 @@ export async function build(args: {
212
212
  process.env.ONE_BUILD_CONCURRENCY ?? oneOptions.build?.concurrency
213
213
  const buildConcurrency =
214
214
  configuredBuildConcurrency === undefined
215
- ? Math.max(1, Math.min(cpus().length, 8))
215
+ ? Math.max(1, Math.min(cpus().length, 2))
216
216
  : Number(configuredBuildConcurrency)
217
217
  if (!Number.isInteger(buildConcurrency) || buildConcurrency < 1) {
218
218
  throw new Error(
@@ -1426,7 +1426,7 @@ export default {
1426
1426
  // rolldown can't parse react-native's Flow syntax; alias to react-native-web for ssr
1427
1427
  {
1428
1428
  find: /^react-native\/Libraries\/.*/,
1429
- replacement: resolvePath('@vxrn/vite-plugin-metro/empty', options.root),
1429
+ replacement: resolvePath('@vxrn/utils/empty', options.root),
1430
1430
  },
1431
1431
  {
1432
1432
  // react native 0.87 removed @react-native/assets-registry, but libraries
@@ -2,7 +2,7 @@ import { join } from 'node:path'
2
2
  import FSExtra from 'fs-extra'
3
3
  import { normalizePath } from 'vite'
4
4
  import * as constants from '../constants'
5
- import { LOADER_JS_POSTFIX_UNCACHED } from '../constants'
5
+ import { NATIVE_LOADER_JS_POSTFIX_UNCACHED } from '../constants'
6
6
  import type { LoaderProps } from '../types'
7
7
  import {
8
8
  encodeReservedFilenameChars,
@@ -270,9 +270,10 @@ prefetchCSS()
270
270
  const loaderPartialPath = join(clientDir, urlPathToFilePath(getLoaderPath(path)))
271
271
 
272
272
  // uncached native loader path for native prod (metro can't inline cache keys)
273
- const uncachedNativePath = loaderPartialPath
274
- .replace(constants.LOADER_JS_POSTFIX, LOADER_JS_POSTFIX_UNCACHED)
275
- .replace(/\.js$/, '.native.js')
273
+ const uncachedNativePath = loaderPartialPath.replace(
274
+ constants.LOADER_JS_POSTFIX,
275
+ NATIVE_LOADER_JS_POSTFIX_UNCACHED
276
+ )
276
277
 
277
278
  if (loaderRedirectInfo) {
278
279
  // generate a static redirect loader — the client detects __oneRedirect
package/src/constants.ts CHANGED
@@ -37,6 +37,8 @@ export const hasWebHistory =
37
37
  export let CACHE_KEY = `${process.env.ONE_CACHE_KEY ?? Math.round(Math.random() * 100_000_000)}`
38
38
 
39
39
  export const LOADER_JS_POSTFIX_UNCACHED = `_vxrn_loader.js`
40
+ // native prod reads this copy since metro can't inline the cache key
41
+ export const NATIVE_LOADER_JS_POSTFIX_UNCACHED = `_vxrn_loader.native.js`
40
42
  export const LOADER_JS_POSTFIX_REGEX_STRING = `_\\d+${LOADER_JS_POSTFIX_UNCACHED}$`
41
43
  export const LOADER_JS_POSTFIX_REGEX = new RegExp(LOADER_JS_POSTFIX_REGEX_STRING)
42
44
  export let LOADER_JS_POSTFIX = `_${CACHE_KEY}${LOADER_JS_POSTFIX_UNCACHED}`
@@ -309,7 +309,10 @@ export function useLinking(
309
309
  if (historyState) {
310
310
  const { __tempLocation, __tempKey } = historyState
311
311
  if (__tempLocation?.pathname && !__tempKey) {
312
- path = __tempLocation.pathname + (__tempLocation.search || '')
312
+ path =
313
+ __tempLocation.pathname +
314
+ (__tempLocation.search || '') +
315
+ (__tempLocation.hash || '')
313
316
  restoringFromTempLocationRef.current = true
314
317
  }
315
318
  }
@@ -87,7 +87,7 @@ function mapChildren(children: React.ReactNode): React.ReactNode {
87
87
  */
88
88
  const StackWithComposition = React.forwardRef<unknown, ComponentProps<typeof RNStack>>(
89
89
  (props, ref) => {
90
- const { children, screenOptions, ...rest } = props
90
+ const { children, screenOptions, screenLayout, ...rest } = props
91
91
  // extract Stack.Header / Stack.Toolbar from children for screenOptions
92
92
  const screenOptionsWithHeader = useMemo(() => {
93
93
  const stackHeader = Children.toArray(children).find((child) =>
@@ -132,7 +132,10 @@ const StackWithComposition = React.forwardRef<unknown, ComponentProps<typeof RNS
132
132
 
133
133
  // pre-process children to convert StackScreen to Screen
134
134
  const processedChildren = useMemo(() => mapChildren(children), [children])
135
- const navigatorProps = useMemo(() => getStackNavigatorProps(children), [children])
135
+ const navigatorProps = useMemo(
136
+ () => getStackNavigatorProps(children, screenLayout),
137
+ [children, screenLayout]
138
+ )
136
139
 
137
140
  return (
138
141
  <RNStack
@@ -0,0 +1,34 @@
1
+ import { createNativeStackNavigator } from '@react-navigation/native-stack'
2
+ import { useIsFocused } from '@react-navigation/native'
3
+ import type { ReactElement, ReactNode } from 'react'
4
+ import { SharedTransitionBoundary } from 'react-native-reanimated'
5
+
6
+ /**
7
+ * Returns a Stack navigator factory. On native this is the stock
8
+ * `@react-navigation/native-stack`; on web this is replaced via the
9
+ * `.web.ts` sibling with the headless navigator.
10
+ */
11
+ export const createStackNavigator = createNativeStackNavigator
12
+
13
+ // reanimated matches sharedTransitionTag views only inside an active boundary,
14
+ // so the focused screen's boundary is the one a push or pop morphs into
15
+ function SharedTransitionScreen({ children }: { children: ReactNode }) {
16
+ return (
17
+ <SharedTransitionBoundary isActive={useIsFocused()}>
18
+ {children}
19
+ </SharedTransitionBoundary>
20
+ )
21
+ }
22
+
23
+ export function getStackNavigatorProps<Args extends { children: ReactElement }>(
24
+ _children: ReactNode,
25
+ screenLayout?: (props: Args) => ReactElement
26
+ ) {
27
+ return {
28
+ screenLayout: (props: Args) => (
29
+ <SharedTransitionScreen>
30
+ {screenLayout ? screenLayout(props) : props.children}
31
+ </SharedTransitionScreen>
32
+ ),
33
+ }
34
+ }