@weapp-vite/web 1.3.37 → 1.4.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 (334) hide show
  1. package/README.md +144 -5
  2. package/dist/_virtual/_rolldown/runtime.mjs +19 -1
  3. package/dist/compiler/wxml/attributes.mjs +1 -1
  4. package/dist/compiler/wxml/attributes.mjs.map +1 -1
  5. package/dist/compiler/wxml/compile.mjs +6 -3
  6. package/dist/compiler/wxml/compile.mjs.map +1 -1
  7. package/dist/compiler/wxml/interpolation.mjs +1 -2
  8. package/dist/compiler/wxml/interpolation.mjs.map +1 -1
  9. package/dist/compiler/wxml/navigation.mjs +5 -7
  10. package/dist/compiler/wxml/navigation.mjs.map +1 -1
  11. package/dist/compiler/wxml/parser.mjs +5 -5
  12. package/dist/compiler/wxml/parser.mjs.map +1 -1
  13. package/dist/compiler/wxml/renderer.mjs +16 -12
  14. package/dist/compiler/wxml/renderer.mjs.map +1 -1
  15. package/dist/compiler/wxml/specialNodes.mjs +8 -2
  16. package/dist/compiler/wxml/specialNodes.mjs.map +1 -1
  17. package/dist/compiler/wxml/types.d.mts +12 -0
  18. package/dist/compiler/wxs.mjs +5 -5
  19. package/dist/compiler/wxs.mjs.map +1 -1
  20. package/dist/css/wxss.d.mts +1 -0
  21. package/dist/css/wxss.mjs +110 -9
  22. package/dist/css/wxss.mjs.map +1 -1
  23. package/dist/index.d.mts +24 -6
  24. package/dist/index.mjs +21 -4
  25. package/dist/plugin/assets.d.mts +7 -0
  26. package/dist/plugin/assets.mjs +122 -0
  27. package/dist/plugin/assets.mjs.map +1 -0
  28. package/dist/plugin/constants.mjs +10 -1
  29. package/dist/plugin/constants.mjs.map +1 -1
  30. package/dist/plugin/dependencyScan.mjs +41 -0
  31. package/dist/plugin/dependencyScan.mjs.map +1 -0
  32. package/dist/plugin/entry.mjs +55 -6
  33. package/dist/plugin/entry.mjs.map +1 -1
  34. package/dist/plugin/files.mjs +1 -1
  35. package/dist/plugin/files.mjs.map +1 -1
  36. package/dist/plugin/index.d.mts +37 -3
  37. package/dist/plugin/index.mjs +244 -73
  38. package/dist/plugin/index.mjs.map +1 -1
  39. package/dist/plugin/layout.mjs +24 -0
  40. package/dist/plugin/layout.mjs.map +1 -0
  41. package/dist/plugin/path.mjs +6 -2
  42. package/dist/plugin/path.mjs.map +1 -1
  43. package/dist/plugin/register.mjs +45 -33
  44. package/dist/plugin/register.mjs.map +1 -1
  45. package/dist/plugin/scan.mjs +211 -92
  46. package/dist/plugin/scan.mjs.map +1 -1
  47. package/dist/plugin/scanSfc.mjs +65 -0
  48. package/dist/plugin/scanSfc.mjs.map +1 -0
  49. package/dist/plugin/state.mjs +3 -2
  50. package/dist/plugin/state.mjs.map +1 -1
  51. package/dist/plugin/styleModule.mjs +52 -0
  52. package/dist/plugin/styleModule.mjs.map +1 -0
  53. package/dist/plugin/types.d.mts +37 -1
  54. package/dist/plugin/vueSfc.mjs +150 -0
  55. package/dist/plugin/vueSfc.mjs.map +1 -0
  56. package/dist/runtime/appShell/container.mjs +25 -0
  57. package/dist/runtime/appShell/container.mjs.map +1 -0
  58. package/dist/runtime/appShell/tabBar/index.mjs +192 -0
  59. package/dist/runtime/appShell/tabBar/index.mjs.map +1 -0
  60. package/dist/runtime/appShell/tabBar/style.mjs +127 -0
  61. package/dist/runtime/appShell/tabBar/style.mjs.map +1 -0
  62. package/dist/runtime/button/helpers.mjs +1 -58
  63. package/dist/runtime/button/helpers.mjs.map +1 -1
  64. package/dist/runtime/button/index.d.mts +4 -5
  65. package/dist/runtime/button/index.mjs +6 -28
  66. package/dist/runtime/button/index.mjs.map +1 -1
  67. package/dist/runtime/button/style.mjs +53 -28
  68. package/dist/runtime/button/style.mjs.map +1 -1
  69. package/dist/runtime/component/behavior.mjs +26 -2
  70. package/dist/runtime/component/behavior.mjs.map +1 -1
  71. package/dist/runtime/component/element.mjs +107 -31
  72. package/dist/runtime/component/element.mjs.map +1 -1
  73. package/dist/runtime/component/observers.mjs +36 -0
  74. package/dist/runtime/component/observers.mjs.map +1 -0
  75. package/dist/runtime/component/publicInstance.mjs +48 -0
  76. package/dist/runtime/component/publicInstance.mjs.map +1 -0
  77. package/dist/runtime/component/relations.mjs +36 -0
  78. package/dist/runtime/component/relations.mjs.map +1 -0
  79. package/dist/runtime/component/slots.mjs +24 -0
  80. package/dist/runtime/component/slots.mjs.map +1 -0
  81. package/dist/runtime/component/state.mjs +13 -3
  82. package/dist/runtime/component/state.mjs.map +1 -1
  83. package/dist/runtime/component/types.d.mts +29 -4
  84. package/dist/runtime/component/virtualHost.mjs +83 -0
  85. package/dist/runtime/component/virtualHost.mjs.map +1 -0
  86. package/dist/runtime/host/index.d.mts +13 -0
  87. package/dist/runtime/host/index.mjs +47 -0
  88. package/dist/runtime/host/index.mjs.map +1 -0
  89. package/dist/runtime/host/types.d.mts +28 -0
  90. package/dist/runtime/hostGlobals.d.mts +9 -0
  91. package/dist/runtime/hostGlobals.mjs +39 -0
  92. package/dist/runtime/hostGlobals.mjs.map +1 -0
  93. package/dist/runtime/index.d.mts +21 -3
  94. package/dist/runtime/index.mjs +26 -4
  95. package/dist/runtime/index.mjs.map +1 -0
  96. package/dist/runtime/legacyTemplate/dom.mjs +3 -3
  97. package/dist/runtime/legacyTemplate/dom.mjs.map +1 -1
  98. package/dist/runtime/legacyTemplate/expression.mjs +9 -9
  99. package/dist/runtime/legacyTemplate/expression.mjs.map +1 -1
  100. package/dist/runtime/legacyTemplate/index.mjs +6 -6
  101. package/dist/runtime/legacyTemplate/index.mjs.map +1 -1
  102. package/dist/runtime/nativeComponents/canvas/index.mjs +53 -0
  103. package/dist/runtime/nativeComponents/canvas/index.mjs.map +1 -0
  104. package/dist/runtime/nativeComponents/checkbox.mjs +137 -0
  105. package/dist/runtime/nativeComponents/checkbox.mjs.map +1 -0
  106. package/dist/runtime/nativeComponents/cover/index.mjs +23 -0
  107. package/dist/runtime/nativeComponents/cover/index.mjs.map +1 -0
  108. package/dist/runtime/nativeComponents/form.d.mts +7 -0
  109. package/dist/runtime/nativeComponents/form.mjs +50 -0
  110. package/dist/runtime/nativeComponents/form.mjs.map +1 -0
  111. package/dist/runtime/nativeComponents/formControl.mjs +61 -0
  112. package/dist/runtime/nativeComponents/formControl.mjs.map +1 -0
  113. package/dist/runtime/nativeComponents/helpers.mjs +25 -0
  114. package/dist/runtime/nativeComponents/helpers.mjs.map +1 -0
  115. package/dist/runtime/nativeComponents/icon/helpers.mjs +42 -0
  116. package/dist/runtime/nativeComponents/icon/helpers.mjs.map +1 -0
  117. package/dist/runtime/nativeComponents/icon/index.mjs +45 -0
  118. package/dist/runtime/nativeComponents/icon/index.mjs.map +1 -0
  119. package/dist/runtime/nativeComponents/icon/style.mjs +176 -0
  120. package/dist/runtime/nativeComponents/icon/style.mjs.map +1 -0
  121. package/dist/runtime/nativeComponents/image.d.mts +8 -0
  122. package/dist/runtime/nativeComponents/image.mjs +121 -0
  123. package/dist/runtime/nativeComponents/image.mjs.map +1 -0
  124. package/dist/runtime/nativeComponents/index.d.mts +11 -0
  125. package/dist/runtime/nativeComponents/index.mjs +83 -0
  126. package/dist/runtime/nativeComponents/index.mjs.map +1 -0
  127. package/dist/runtime/nativeComponents/input.d.mts +8 -0
  128. package/dist/runtime/nativeComponents/input.mjs +131 -0
  129. package/dist/runtime/nativeComponents/input.mjs.map +1 -0
  130. package/dist/runtime/nativeComponents/label.mjs +36 -0
  131. package/dist/runtime/nativeComponents/label.mjs.map +1 -0
  132. package/dist/runtime/nativeComponents/mediaRegistry.mjs +47 -0
  133. package/dist/runtime/nativeComponents/mediaRegistry.mjs.map +1 -0
  134. package/dist/runtime/nativeComponents/movable/helpers.mjs +23 -0
  135. package/dist/runtime/nativeComponents/movable/helpers.mjs.map +1 -0
  136. package/dist/runtime/nativeComponents/movable/index.mjs +117 -0
  137. package/dist/runtime/nativeComponents/movable/index.mjs.map +1 -0
  138. package/dist/runtime/nativeComponents/navigator.mjs +200 -0
  139. package/dist/runtime/nativeComponents/navigator.mjs.map +1 -0
  140. package/dist/runtime/nativeComponents/picker/editors.mjs +74 -0
  141. package/dist/runtime/nativeComponents/picker/editors.mjs.map +1 -0
  142. package/dist/runtime/nativeComponents/picker/helpers.mjs +57 -0
  143. package/dist/runtime/nativeComponents/picker/helpers.mjs.map +1 -0
  144. package/dist/runtime/nativeComponents/picker/index.mjs +210 -0
  145. package/dist/runtime/nativeComponents/picker/index.mjs.map +1 -0
  146. package/dist/runtime/nativeComponents/picker/style.mjs +71 -0
  147. package/dist/runtime/nativeComponents/picker/style.mjs.map +1 -0
  148. package/dist/runtime/nativeComponents/pickerView/column.mjs +134 -0
  149. package/dist/runtime/nativeComponents/pickerView/column.mjs.map +1 -0
  150. package/dist/runtime/nativeComponents/pickerView/helpers.mjs +17 -0
  151. package/dist/runtime/nativeComponents/pickerView/helpers.mjs.map +1 -0
  152. package/dist/runtime/nativeComponents/pickerView/index.mjs +128 -0
  153. package/dist/runtime/nativeComponents/pickerView/index.mjs.map +1 -0
  154. package/dist/runtime/nativeComponents/pickerView/style.mjs +58 -0
  155. package/dist/runtime/nativeComponents/pickerView/style.mjs.map +1 -0
  156. package/dist/runtime/nativeComponents/primitives.mjs +16 -0
  157. package/dist/runtime/nativeComponents/primitives.mjs.map +1 -0
  158. package/dist/runtime/nativeComponents/progress/helpers.mjs +29 -0
  159. package/dist/runtime/nativeComponents/progress/helpers.mjs.map +1 -0
  160. package/dist/runtime/nativeComponents/progress/index.mjs +130 -0
  161. package/dist/runtime/nativeComponents/progress/index.mjs.map +1 -0
  162. package/dist/runtime/nativeComponents/progress/style.mjs +40 -0
  163. package/dist/runtime/nativeComponents/progress/style.mjs.map +1 -0
  164. package/dist/runtime/nativeComponents/radio.mjs +147 -0
  165. package/dist/runtime/nativeComponents/radio.mjs.map +1 -0
  166. package/dist/runtime/nativeComponents/richText/helpers.mjs +230 -0
  167. package/dist/runtime/nativeComponents/richText/helpers.mjs.map +1 -0
  168. package/dist/runtime/nativeComponents/richText/index.mjs +74 -0
  169. package/dist/runtime/nativeComponents/richText/index.mjs.map +1 -0
  170. package/dist/runtime/nativeComponents/scrollView.d.mts +15 -0
  171. package/dist/runtime/nativeComponents/scrollView.mjs +79 -0
  172. package/dist/runtime/nativeComponents/scrollView.mjs.map +1 -0
  173. package/dist/runtime/nativeComponents/slider/helpers.mjs +28 -0
  174. package/dist/runtime/nativeComponents/slider/helpers.mjs.map +1 -0
  175. package/dist/runtime/nativeComponents/slider/index.mjs +120 -0
  176. package/dist/runtime/nativeComponents/slider/index.mjs.map +1 -0
  177. package/dist/runtime/nativeComponents/slider/style.mjs +60 -0
  178. package/dist/runtime/nativeComponents/slider/style.mjs.map +1 -0
  179. package/dist/runtime/nativeComponents/style.mjs +41 -0
  180. package/dist/runtime/nativeComponents/style.mjs.map +1 -0
  181. package/dist/runtime/nativeComponents/swiper/helpers.mjs +52 -0
  182. package/dist/runtime/nativeComponents/swiper/helpers.mjs.map +1 -0
  183. package/dist/runtime/nativeComponents/swiper/index.mjs +235 -0
  184. package/dist/runtime/nativeComponents/swiper/index.mjs.map +1 -0
  185. package/dist/runtime/nativeComponents/swiper/item.mjs +14 -0
  186. package/dist/runtime/nativeComponents/swiper/item.mjs.map +1 -0
  187. package/dist/runtime/nativeComponents/swiper/style.mjs +20 -0
  188. package/dist/runtime/nativeComponents/swiper/style.mjs.map +1 -0
  189. package/dist/runtime/nativeComponents/switch.d.mts +7 -0
  190. package/dist/runtime/nativeComponents/switch.mjs +132 -0
  191. package/dist/runtime/nativeComponents/switch.mjs.map +1 -0
  192. package/dist/runtime/nativeComponents/textarea.d.mts +9 -0
  193. package/dist/runtime/nativeComponents/textarea.mjs +144 -0
  194. package/dist/runtime/nativeComponents/textarea.mjs.map +1 -0
  195. package/dist/runtime/nativeComponents/video/helpers.d.mts +12 -0
  196. package/dist/runtime/nativeComponents/video/helpers.mjs +21 -0
  197. package/dist/runtime/nativeComponents/video/helpers.mjs.map +1 -0
  198. package/dist/runtime/nativeComponents/video/index.mjs +124 -0
  199. package/dist/runtime/nativeComponents/video/index.mjs.map +1 -0
  200. package/dist/runtime/nativeComponents/video/style.mjs +14 -0
  201. package/dist/runtime/nativeComponents/video/style.mjs.map +1 -0
  202. package/dist/runtime/navigationBar/index.mjs +1 -3
  203. package/dist/runtime/navigationBar/index.mjs.map +1 -1
  204. package/dist/runtime/pageLayout.d.mts +9 -0
  205. package/dist/runtime/pageLayout.mjs +16 -0
  206. package/dist/runtime/pageLayout.mjs.map +1 -0
  207. package/dist/runtime/polyfill/animation.mjs +120 -0
  208. package/dist/runtime/polyfill/animation.mjs.map +1 -0
  209. package/dist/runtime/polyfill/appState.mjs +1 -1
  210. package/dist/runtime/polyfill/appState.mjs.map +1 -1
  211. package/dist/runtime/polyfill/async.d.mts +7 -0
  212. package/dist/runtime/polyfill/async.mjs.map +1 -1
  213. package/dist/runtime/polyfill/canvasContext.mjs +41 -0
  214. package/dist/runtime/polyfill/canvasContext.mjs.map +1 -1
  215. package/dist/runtime/polyfill/device.mjs +1 -1
  216. package/dist/runtime/polyfill/device.mjs.map +1 -1
  217. package/dist/runtime/polyfill/deviceApi.mjs +6 -3
  218. package/dist/runtime/polyfill/deviceApi.mjs.map +1 -1
  219. package/dist/runtime/polyfill/deviceAuthSystemApi.mjs +8 -2
  220. package/dist/runtime/polyfill/deviceAuthSystemApi.mjs.map +1 -1
  221. package/dist/runtime/polyfill/eventBus.mjs +56 -0
  222. package/dist/runtime/polyfill/eventBus.mjs.map +1 -0
  223. package/dist/runtime/polyfill/fileSystemManager.mjs +5 -2
  224. package/dist/runtime/polyfill/fileSystemManager.mjs.map +1 -1
  225. package/dist/runtime/polyfill/files.mjs +10 -10
  226. package/dist/runtime/polyfill/files.mjs.map +1 -1
  227. package/dist/runtime/polyfill/font.mjs +33 -0
  228. package/dist/runtime/polyfill/font.mjs.map +1 -0
  229. package/dist/runtime/polyfill/index.d.mts +2 -2
  230. package/dist/runtime/polyfill/index.mjs +49 -45
  231. package/dist/runtime/polyfill/index.mjs.map +1 -1
  232. package/dist/runtime/polyfill/interaction.mjs +7 -6
  233. package/dist/runtime/polyfill/interaction.mjs.map +1 -1
  234. package/dist/runtime/polyfill/interactionApi.mjs +9 -5
  235. package/dist/runtime/polyfill/interactionApi.mjs.map +1 -1
  236. package/dist/runtime/polyfill/intersectionObserver.mjs +106 -0
  237. package/dist/runtime/polyfill/intersectionObserver.mjs.map +1 -0
  238. package/dist/runtime/polyfill/locale.mjs +14 -0
  239. package/dist/runtime/polyfill/locale.mjs.map +1 -0
  240. package/dist/runtime/polyfill/locationApi.mjs +11 -6
  241. package/dist/runtime/polyfill/locationApi.mjs.map +1 -1
  242. package/dist/runtime/polyfill/mediaActions.mjs +2 -2
  243. package/dist/runtime/polyfill/mediaActions.mjs.map +1 -1
  244. package/dist/runtime/polyfill/mediaApi/file.mjs +3 -2
  245. package/dist/runtime/polyfill/mediaApi/file.mjs.map +1 -1
  246. package/dist/runtime/polyfill/mediaApi/info.mjs +6 -4
  247. package/dist/runtime/polyfill/mediaApi/info.mjs.map +1 -1
  248. package/dist/runtime/polyfill/mediaApi/picker.mjs +16 -8
  249. package/dist/runtime/polyfill/mediaApi/picker.mjs.map +1 -1
  250. package/dist/runtime/polyfill/mediaApi/preview.mjs +4 -2
  251. package/dist/runtime/polyfill/mediaApi/preview.mjs.map +1 -1
  252. package/dist/runtime/polyfill/mediaApi/process.mjs +4 -2
  253. package/dist/runtime/polyfill/mediaApi/process.mjs.map +1 -1
  254. package/dist/runtime/polyfill/menuApi.mjs +39 -4
  255. package/dist/runtime/polyfill/menuApi.mjs.map +1 -1
  256. package/dist/runtime/polyfill/navigationBarRuntime.mjs +6 -1
  257. package/dist/runtime/polyfill/navigationBarRuntime.mjs.map +1 -1
  258. package/dist/runtime/polyfill/network/request.mjs +2 -2
  259. package/dist/runtime/polyfill/network/request.mjs.map +1 -1
  260. package/dist/runtime/polyfill/platformApi.mjs +3 -2
  261. package/dist/runtime/polyfill/platformApi.mjs.map +1 -1
  262. package/dist/runtime/polyfill/routeRuntime/appLifecycle.mjs +88 -0
  263. package/dist/runtime/polyfill/routeRuntime/appLifecycle.mjs.map +1 -0
  264. package/dist/runtime/polyfill/routeRuntime/dom.mjs +44 -15
  265. package/dist/runtime/polyfill/routeRuntime/dom.mjs.map +1 -1
  266. package/dist/runtime/polyfill/routeRuntime/history.d.mts +30 -0
  267. package/dist/runtime/polyfill/routeRuntime/history.mjs +148 -0
  268. package/dist/runtime/polyfill/routeRuntime/history.mjs.map +1 -0
  269. package/dist/runtime/polyfill/routeRuntime/lifecycle.mjs +39 -8
  270. package/dist/runtime/polyfill/routeRuntime/lifecycle.mjs.map +1 -1
  271. package/dist/runtime/polyfill/routeRuntime/options.d.mts +11 -1
  272. package/dist/runtime/polyfill/routeRuntime/options.mjs +0 -1
  273. package/dist/runtime/polyfill/routeRuntime/options.mjs.map +1 -1
  274. package/dist/runtime/polyfill/routeRuntime/result.mjs +12 -0
  275. package/dist/runtime/polyfill/routeRuntime/result.mjs.map +1 -0
  276. package/dist/runtime/polyfill/routeRuntime/scroll.mjs +39 -0
  277. package/dist/runtime/polyfill/routeRuntime/scroll.mjs.map +1 -0
  278. package/dist/runtime/polyfill/routeRuntime/stack.mjs +122 -0
  279. package/dist/runtime/polyfill/routeRuntime/stack.mjs.map +1 -0
  280. package/dist/runtime/polyfill/routeRuntime.d.mts +26 -17
  281. package/dist/runtime/polyfill/routeRuntime.mjs +121 -96
  282. package/dist/runtime/polyfill/routeRuntime.mjs.map +1 -1
  283. package/dist/runtime/polyfill/runtimeDataApi.mjs +8 -3
  284. package/dist/runtime/polyfill/runtimeDataApi.mjs.map +1 -1
  285. package/dist/runtime/polyfill/runtimeOps.mjs +10 -6
  286. package/dist/runtime/polyfill/runtimeOps.mjs.map +1 -1
  287. package/dist/runtime/polyfill/selectorQuery.mjs +70 -14
  288. package/dist/runtime/polyfill/selectorQuery.mjs.map +1 -1
  289. package/dist/runtime/polyfill/storage.mjs +5 -2
  290. package/dist/runtime/polyfill/storage.mjs.map +1 -1
  291. package/dist/runtime/polyfill/storageAsync.mjs +4 -2
  292. package/dist/runtime/polyfill/storageAsync.mjs.map +1 -1
  293. package/dist/runtime/polyfill/system.mjs +31 -4
  294. package/dist/runtime/polyfill/system.mjs.map +1 -1
  295. package/dist/runtime/polyfill/systemApi.mjs +2 -1
  296. package/dist/runtime/polyfill/systemApi.mjs.map +1 -1
  297. package/dist/runtime/polyfill/types/locationRuntime.d.mts +1 -4
  298. package/dist/runtime/polyfill/types/platformRuntime.d.mts +9 -0
  299. package/dist/runtime/polyfill/types/systemAuth.d.mts +20 -9
  300. package/dist/runtime/polyfill/types/tabBarRuntime.d.mts +25 -0
  301. package/dist/runtime/polyfill/ui.mjs +2 -6
  302. package/dist/runtime/polyfill/ui.mjs.map +1 -1
  303. package/dist/runtime/polyfill/uiMediaApi.d.mts +11 -10
  304. package/dist/runtime/polyfill/uiMediaApi.mjs +26 -2
  305. package/dist/runtime/polyfill/uiMediaApi.mjs.map +1 -1
  306. package/dist/runtime/polyfill/videoContext.mjs +4 -0
  307. package/dist/runtime/polyfill/videoContext.mjs.map +1 -1
  308. package/dist/runtime/polyfill/vkSession.mjs +4 -14
  309. package/dist/runtime/polyfill/vkSession.mjs.map +1 -1
  310. package/dist/runtime/polyfill.d.mts +2 -2
  311. package/dist/runtime/renderContext.mjs +1 -1
  312. package/dist/runtime/renderContext.mjs.map +1 -1
  313. package/dist/runtime/rpx.mjs +17 -8
  314. package/dist/runtime/rpx.mjs.map +1 -1
  315. package/dist/runtime/seo/index.d.mts +31 -0
  316. package/dist/runtime/seo/index.mjs +94 -0
  317. package/dist/runtime/seo/index.mjs.map +1 -0
  318. package/dist/runtime/viewport/index.d.mts +12 -0
  319. package/dist/runtime/viewport/index.mjs +44 -0
  320. package/dist/runtime/viewport/index.mjs.map +1 -0
  321. package/dist/runtime/viewport/style.mjs +62 -0
  322. package/dist/runtime/viewport/style.mjs.map +1 -0
  323. package/dist/runtime/viewport/types.d.mts +14 -0
  324. package/dist/runtime/wevu.d.mts +20 -0
  325. package/dist/runtime/wevu.mjs +73 -0
  326. package/dist/runtime/wevu.mjs.map +1 -0
  327. package/dist/shared/nativeComponents.mjs +401 -0
  328. package/dist/shared/nativeComponents.mjs.map +1 -0
  329. package/dist/shared/tabBar.d.mts +19 -0
  330. package/dist/shared/tabBar.mjs +37 -0
  331. package/dist/shared/tabBar.mjs.map +1 -0
  332. package/dist/shared/wxml.mjs +3 -20
  333. package/dist/shared/wxml.mjs.map +1 -1
  334. package/package.json +14 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appLifecycle.mjs","names":["#appInstance","#visibilityDocument","#unbindVisibility","#visibilityHandler","#syncVisibility","#launched","#launchOptions","#lastEnterOptions","#foreground"],"sources":["../../../../src/runtime/polyfill/routeRuntime/appLifecycle.ts"],"sourcesContent":["import type { AppLaunchOptions, AppRuntime, PageStackEntry } from './options'\nimport { cloneLaunchOptions, resolveFallbackLaunchOptions } from '../appState'\nimport { isRecord } from './options'\n\ntype VisibilityDocument = Pick<Document, 'addEventListener' | 'hidden' | 'removeEventListener' | 'visibilityState'>\n\nfunction resolveEntryOptions(entry: Pick<PageStackEntry, 'id' | 'query'> | undefined): AppLaunchOptions {\n return resolveFallbackLaunchOptions(entry ? [entry] : [])\n}\n\nfunction isDocumentHidden(target: VisibilityDocument) {\n return target.visibilityState === 'hidden' || target.hidden === true\n}\n\nexport class AppLifecycleRuntime {\n #appInstance: AppRuntime | undefined\n #foreground = false\n #lastEnterOptions: AppLaunchOptions | undefined\n #launchOptions: AppLaunchOptions | undefined\n #launched = false\n #visibilityDocument: VisibilityDocument | undefined\n #visibilityHandler: (() => void) | undefined\n\n constructor(private readonly resolveCurrentEntry: () => PageStackEntry | undefined) {}\n\n register<T extends AppRuntime | undefined>(options: T): T {\n const resolved = (options ?? {}) as AppRuntime\n if (this.#appInstance) {\n const currentGlobal = this.#appInstance.globalData\n Object.assign(this.#appInstance, resolved)\n if (isRecord(currentGlobal)) {\n this.#appInstance.globalData = currentGlobal\n }\n else if (!isRecord(this.#appInstance.globalData)) {\n this.#appInstance.globalData = {}\n }\n return options\n }\n this.#appInstance = resolved\n if (!isRecord(this.#appInstance.globalData)) {\n this.#appInstance.globalData = {}\n }\n return options\n }\n\n bindVisibility(target: VisibilityDocument | undefined = typeof document === 'undefined' ? undefined : document) {\n if (!target || this.#visibilityDocument === target || typeof target.addEventListener !== 'function') {\n return\n }\n this.#unbindVisibility()\n this.#visibilityDocument = target\n this.#visibilityHandler = () => this.#syncVisibility(target)\n target.addEventListener('visibilitychange', this.#visibilityHandler)\n }\n\n ensureLaunched(entry: PageStackEntry) {\n if (!this.#appInstance || this.#launched) {\n return\n }\n const options = resolveEntryOptions(entry)\n this.#launchOptions = cloneLaunchOptions(options)\n this.#lastEnterOptions = cloneLaunchOptions(options)\n this.#foreground = true\n this.#launched = true\n this.#appInstance.onLaunch?.(cloneLaunchOptions(options))\n this.#appInstance.onShow?.(cloneLaunchOptions(options))\n }\n\n get instance() {\n return this.#appInstance\n }\n\n getLaunchOptions() {\n return this.#launchOptions\n ? cloneLaunchOptions(this.#launchOptions)\n : resolveEntryOptions(this.resolveCurrentEntry())\n }\n\n getEnterOptions() {\n return this.#lastEnterOptions\n ? cloneLaunchOptions(this.#lastEnterOptions)\n : this.getLaunchOptions()\n }\n\n dispose() {\n this.#unbindVisibility()\n }\n\n #syncVisibility(target: VisibilityDocument) {\n if (!this.#appInstance || !this.#launched) {\n return\n }\n if (isDocumentHidden(target)) {\n if (!this.#foreground) {\n return\n }\n this.#appInstance.onHide?.()\n this.#foreground = false\n return\n }\n if (this.#foreground) {\n return\n }\n const options = resolveEntryOptions(this.resolveCurrentEntry())\n this.#lastEnterOptions = cloneLaunchOptions(options)\n this.#appInstance.onShow?.(cloneLaunchOptions(options))\n this.#foreground = true\n }\n\n #unbindVisibility() {\n if (this.#visibilityDocument && this.#visibilityHandler) {\n this.#visibilityDocument.removeEventListener('visibilitychange', this.#visibilityHandler)\n }\n this.#visibilityDocument = undefined\n this.#visibilityHandler = undefined\n }\n}\n"],"mappings":";;;;AAMA,SAAS,oBAAoB,OAA2E;CACtG,OAAO,6BAA6B,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;AAC1D;AAEA,SAAS,iBAAiB,QAA4B;CACpD,OAAO,OAAO,oBAAoB,YAAY,OAAO,WAAW;AAClE;AAEA,IAAa,sBAAb,MAAiC;CASF;CAR7B;CACA,cAAc;CACd;CACA;CACA,YAAY;CACZ;CACA;CAEA,YAAY,AAAiB,qBAAuD;EAAvD;CAAwD;CAErF,SAA2C,SAAe;EACxD,MAAM,WAAY,WAAW,CAAC;EAC9B,IAAI,KAAKA,cAAc;GACrB,MAAM,gBAAgB,KAAKA,aAAa;GACxC,OAAO,OAAO,KAAKA,cAAc,QAAQ;GACzC,IAAI,SAAS,aAAa,GACxB,KAAKA,aAAa,aAAa;QAE5B,IAAI,CAAC,SAAS,KAAKA,aAAa,UAAU,GAC7C,KAAKA,aAAa,aAAa,CAAC;GAElC,OAAO;EACT;EACA,KAAKA,eAAe;EACpB,IAAI,CAAC,SAAS,KAAKA,aAAa,UAAU,GACxC,KAAKA,aAAa,aAAa,CAAC;EAElC,OAAO;CACT;CAEA,eAAe,SAAyC,OAAO,aAAa,cAAc,SAAY,UAAU;EAC9G,IAAI,CAAC,UAAU,KAAKC,wBAAwB,UAAU,OAAO,OAAO,qBAAqB,YACvF;EAEF,KAAKC,kBAAkB;EACvB,KAAKD,sBAAsB;EAC3B,KAAKE,2BAA2B,KAAKC,gBAAgB,MAAM;EAC3D,OAAO,iBAAiB,oBAAoB,KAAKD,kBAAkB;CACrE;CAEA,eAAe,OAAuB;EACpC,IAAI,CAAC,KAAKH,gBAAgB,KAAKK,WAC7B;EAEF,MAAM,UAAU,oBAAoB,KAAK;EACzC,KAAKC,iBAAiB,mBAAmB,OAAO;EAChD,KAAKC,oBAAoB,mBAAmB,OAAO;EACnD,KAAKC,cAAc;EACnB,KAAKH,YAAY;EACjB,KAAKL,aAAa,WAAW,mBAAmB,OAAO,CAAC;EACxD,KAAKA,aAAa,SAAS,mBAAmB,OAAO,CAAC;CACxD;CAEA,IAAI,WAAW;EACb,OAAO,KAAKA;CACd;CAEA,mBAAmB;EACjB,OAAO,KAAKM,iBACR,mBAAmB,KAAKA,cAAc,IACtC,oBAAoB,KAAK,oBAAoB,CAAC;CACpD;CAEA,kBAAkB;EAChB,OAAO,KAAKC,oBACR,mBAAmB,KAAKA,iBAAiB,IACzC,KAAK,iBAAiB;CAC5B;CAEA,UAAU;EACR,KAAKL,kBAAkB;CACzB;CAEA,gBAAgB,QAA4B;EAC1C,IAAI,CAAC,KAAKF,gBAAgB,CAAC,KAAKK,WAC9B;EAEF,IAAI,iBAAiB,MAAM,GAAG;GAC5B,IAAI,CAAC,KAAKG,aACR;GAEF,KAAKR,aAAa,SAAS;GAC3B,KAAKQ,cAAc;GACnB;EACF;EACA,IAAI,KAAKA,aACP;EAEF,MAAM,UAAU,oBAAoB,KAAK,oBAAoB,CAAC;EAC9D,KAAKD,oBAAoB,mBAAmB,OAAO;EACnD,KAAKP,aAAa,SAAS,mBAAmB,OAAO,CAAC;EACtD,KAAKQ,cAAc;CACrB;CAEA,oBAAoB;EAClB,IAAI,KAAKP,uBAAuB,KAAKE,oBACnC,KAAKF,oBAAoB,oBAAoB,oBAAoB,KAAKE,kBAAkB;EAE1F,KAAKF,sBAAsB;EAC3B,KAAKE,qBAAqB;CAC5B;AACF"}
@@ -1,36 +1,65 @@
1
+ import { ensureAppContainer, onDocumentReady } from "../../appShell/container.mjs";
1
2
  import { attachRouteMeta } from "./lifecycle.mjs";
3
+ import { bindPageScrollOwner, getPageContainer, restoreEntryScrollPosition, setEntryScrollOwner } from "./scroll.mjs";
2
4
 
3
5
  //#region src/runtime/polyfill/routeRuntime/dom.ts
4
- function ensureDocumentReady(callback) {
5
- if (typeof document === "undefined") return;
6
- if (document.readyState === "loading") {
7
- document.addEventListener("DOMContentLoaded", () => callback(), { once: true });
6
+ function applyEntryVisibility(entry) {
7
+ const element = entry.element;
8
+ if (!element) return;
9
+ const styleWithoutDisplay = (element.getAttribute("style") ?? "").replace(/(?:^|;)\s*display\s*:[^;]*/gi, "").replace(/^;|;$/g, "");
10
+ const setDisplay = (display) => {
11
+ element.setAttribute("style", `${styleWithoutDisplay}${styleWithoutDisplay ? ";" : ""}display:${display};`);
12
+ };
13
+ element.setAttribute("data-weapp-page-active", entry.active ? "true" : "false");
14
+ setEntryScrollOwner(entry, entry.active);
15
+ if (entry.active) {
16
+ setDisplay("block");
17
+ element.removeAttribute("hidden");
18
+ element.removeAttribute("aria-hidden");
8
19
  return;
9
20
  }
10
- callback();
21
+ setDisplay("none");
22
+ element.setAttribute("hidden", "");
23
+ element.setAttribute("aria-hidden", "true");
11
24
  }
12
- function ensureContainer() {
13
- if (typeof document === "undefined") return;
14
- return document.querySelector("#app") ?? document.body;
25
+ function setEntryActiveInDom(entry, active) {
26
+ entry.active = active;
27
+ applyEntryVisibility(entry);
15
28
  }
16
- function mountEntryToDom(entry, pageRegistry, onMounted) {
29
+ function unmountEntryFromDom(entry) {
30
+ setEntryScrollOwner(entry, false);
31
+ const element = entry.element;
32
+ if (!element) {
33
+ entry.instance = void 0;
34
+ return;
35
+ }
36
+ if (element.parentNode) element.parentNode.removeChild(element);
37
+ entry.element = void 0;
38
+ entry.instance = void 0;
39
+ }
40
+ function mountEntryToDom(entry, pageRegistry, onBeforeMount) {
17
41
  const record = pageRegistry.get(entry.id);
18
- if (!record) return;
19
- ensureDocumentReady(() => {
20
- const container = ensureContainer();
42
+ if (!record || entry.element) return;
43
+ onDocumentReady(() => {
44
+ const container = ensureAppContainer();
21
45
  if (!container) return;
22
- while (container.childNodes.length) container.removeChild(container.childNodes[0]);
46
+ bindPageScrollOwner(container);
47
+ onBeforeMount(entry);
23
48
  const element = document.createElement(record.tag);
49
+ element.setAttribute("data-weapp-page", entry.id);
50
+ element.setAttribute("style", "display:block;min-height:100%;box-sizing:border-box;padding-bottom:var(--weapp-tab-bar-inset, 0px);padding-top:var(--weapp-tab-bar-top-inset, 0px);");
51
+ entry.element = element;
52
+ applyEntryVisibility(entry);
24
53
  attachRouteMeta(element, {
25
54
  id: entry.id,
26
55
  query: entry.query,
27
56
  entry
28
57
  });
29
58
  container.append(element);
30
- onMounted(entry);
59
+ if (entry.active) restoreEntryScrollPosition(entry);
31
60
  });
32
61
  }
33
62
 
34
63
  //#endregion
35
- export { mountEntryToDom };
64
+ export { mountEntryToDom, setEntryActiveInDom, unmountEntryFromDom };
36
65
  //# sourceMappingURL=dom.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"dom.mjs","names":[],"sources":["../../../../src/runtime/polyfill/routeRuntime/dom.ts"],"sourcesContent":["import type { ComponentPublicInstance } from '../../component'\nimport type { PageRecord, PageStackEntry } from './options'\nimport { attachRouteMeta } from './lifecycle'\n\nfunction ensureDocumentReady(callback: () => void) {\n if (typeof document === 'undefined') {\n return\n }\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => callback(), { once: true })\n return\n }\n callback()\n}\n\nfunction ensureContainer(): HTMLElement | undefined {\n if (typeof document === 'undefined') {\n return undefined\n }\n return (document.querySelector('#app') as HTMLElement | null) ?? document.body\n}\n\nexport function mountEntryToDom(\n entry: PageStackEntry,\n pageRegistry: Map<string, PageRecord>,\n onMounted: (entry: PageStackEntry) => void,\n) {\n const record = pageRegistry.get(entry.id)\n if (!record) {\n return\n }\n ensureDocumentReady(() => {\n const container = ensureContainer()\n if (!container) {\n return\n }\n while (container.childNodes.length) {\n container.removeChild(container.childNodes[0]!)\n }\n const element = document.createElement(record.tag) as HTMLElement & ComponentPublicInstance\n attachRouteMeta(element, {\n id: entry.id,\n query: entry.query,\n entry,\n })\n container.append(element)\n onMounted(entry)\n })\n}\n"],"mappings":";;;AAIA,SAAS,oBAAoB,UAAsB;CACjD,IAAI,OAAO,aAAa,aACtB;CAEF,IAAI,SAAS,eAAe,WAAW;EACrC,SAAS,iBAAiB,0BAA0B,SAAS,GAAG,EAAE,MAAM,KAAK,CAAC;EAC9E;CACF;CACA,SAAS;AACX;AAEA,SAAS,kBAA2C;CAClD,IAAI,OAAO,aAAa,aACtB;CAEF,OAAQ,SAAS,cAAc,MAAM,KAA4B,SAAS;AAC5E;AAEA,SAAgB,gBACd,OACA,cACA,WACA;CACA,MAAM,SAAS,aAAa,IAAI,MAAM,EAAE;CACxC,IAAI,CAAC,QACH;CAEF,0BAA0B;EACxB,MAAM,YAAY,gBAAgB;EAClC,IAAI,CAAC,WACH;EAEF,OAAO,UAAU,WAAW,QAC1B,UAAU,YAAY,UAAU,WAAW,EAAG;EAEhD,MAAM,UAAU,SAAS,cAAc,OAAO,GAAG;EACjD,gBAAgB,SAAS;GACvB,IAAI,MAAM;GACV,OAAO,MAAM;GACb;EACF,CAAC;EACD,UAAU,OAAO,OAAO;EACxB,UAAU,KAAK;CACjB,CAAC;AACH"}
1
+ {"version":3,"file":"dom.mjs","names":[],"sources":["../../../../src/runtime/polyfill/routeRuntime/dom.ts"],"sourcesContent":["import type { ComponentPublicInstance } from '../../component'\nimport type { PageRecord, PageStackEntry } from './options'\nimport { ensureAppContainer, onDocumentReady } from '../../appShell/container'\nimport { attachRouteMeta } from './lifecycle'\nimport {\n bindPageScrollOwner,\n restoreEntryScrollPosition,\n setEntryScrollOwner,\n} from './scroll'\n\nfunction applyEntryVisibility(entry: PageStackEntry) {\n const element = entry.element\n if (!element) {\n return\n }\n const currentStyle = element.getAttribute('style') ?? ''\n const styleWithoutDisplay = currentStyle\n .replace(/(?:^|;)\\s*display\\s*:[^;]*/gi, '')\n .replace(/^;|;$/g, '')\n const setDisplay = (display: 'block' | 'none') => {\n element.setAttribute('style', `${styleWithoutDisplay}${styleWithoutDisplay ? ';' : ''}display:${display};`)\n }\n element.setAttribute('data-weapp-page-active', entry.active ? 'true' : 'false')\n setEntryScrollOwner(entry, entry.active)\n if (entry.active) {\n setDisplay('block')\n element.removeAttribute('hidden')\n element.removeAttribute('aria-hidden')\n return\n }\n // 自定义页面元素挂载时带有内联 display,必须同步清零才能真正隐藏。\n setDisplay('none')\n element.setAttribute('hidden', '')\n element.setAttribute('aria-hidden', 'true')\n}\n\nexport function setEntryActiveInDom(entry: PageStackEntry, active: boolean) {\n entry.active = active\n applyEntryVisibility(entry)\n}\n\nexport function unmountEntryFromDom(entry: PageStackEntry) {\n setEntryScrollOwner(entry, false)\n const element = entry.element\n if (!element) {\n entry.instance = undefined\n return\n }\n if (element.parentNode) {\n element.parentNode.removeChild(element)\n }\n entry.element = undefined\n entry.instance = undefined\n}\n\nexport function mountEntryToDom(\n entry: PageStackEntry,\n pageRegistry: Map<string, PageRecord>,\n onBeforeMount: (entry: PageStackEntry) => void,\n) {\n const record = pageRegistry.get(entry.id)\n if (!record || entry.element) {\n return\n }\n onDocumentReady(() => {\n const container = ensureAppContainer()\n if (!container) {\n return\n }\n bindPageScrollOwner(container)\n onBeforeMount(entry)\n const element = document.createElement(record.tag) as HTMLElement & ComponentPublicInstance\n element.setAttribute('data-weapp-page', entry.id)\n element.setAttribute('style', 'display:block;min-height:100%;box-sizing:border-box;padding-bottom:var(--weapp-tab-bar-inset, 0px);padding-top:var(--weapp-tab-bar-top-inset, 0px);')\n entry.element = element\n applyEntryVisibility(entry)\n attachRouteMeta(element, {\n id: entry.id,\n query: entry.query,\n entry,\n })\n container.append(element)\n if (entry.active) {\n restoreEntryScrollPosition(entry)\n }\n })\n}\n\nexport { getPageContainer } from './scroll'\n"],"mappings":";;;;;AAUA,SAAS,qBAAqB,OAAuB;CACnD,MAAM,UAAU,MAAM;CACtB,IAAI,CAAC,SACH;CAGF,MAAM,uBADe,QAAQ,aAAa,OAAO,KAAK,GACd,CACrC,QAAQ,gCAAgC,EAAE,CAAC,CAC3C,QAAQ,UAAU,EAAE;CACvB,MAAM,cAAc,YAA8B;EAChD,QAAQ,aAAa,SAAS,GAAG,sBAAsB,sBAAsB,MAAM,GAAG,UAAU,QAAQ,EAAE;CAC5G;CACA,QAAQ,aAAa,0BAA0B,MAAM,SAAS,SAAS,OAAO;CAC9E,oBAAoB,OAAO,MAAM,MAAM;CACvC,IAAI,MAAM,QAAQ;EAChB,WAAW,OAAO;EAClB,QAAQ,gBAAgB,QAAQ;EAChC,QAAQ,gBAAgB,aAAa;EACrC;CACF;CAEA,WAAW,MAAM;CACjB,QAAQ,aAAa,UAAU,EAAE;CACjC,QAAQ,aAAa,eAAe,MAAM;AAC5C;AAEA,SAAgB,oBAAoB,OAAuB,QAAiB;CAC1E,MAAM,SAAS;CACf,qBAAqB,KAAK;AAC5B;AAEA,SAAgB,oBAAoB,OAAuB;CACzD,oBAAoB,OAAO,KAAK;CAChC,MAAM,UAAU,MAAM;CACtB,IAAI,CAAC,SAAS;EACZ,MAAM,WAAW;EACjB;CACF;CACA,IAAI,QAAQ,YACV,QAAQ,WAAW,YAAY,OAAO;CAExC,MAAM,UAAU;CAChB,MAAM,WAAW;AACnB;AAEA,SAAgB,gBACd,OACA,cACA,eACA;CACA,MAAM,SAAS,aAAa,IAAI,MAAM,EAAE;CACxC,IAAI,CAAC,UAAU,MAAM,SACnB;CAEF,sBAAsB;EACpB,MAAM,YAAY,mBAAmB;EACrC,IAAI,CAAC,WACH;EAEF,oBAAoB,SAAS;EAC7B,cAAc,KAAK;EACnB,MAAM,UAAU,SAAS,cAAc,OAAO,GAAG;EACjD,QAAQ,aAAa,mBAAmB,MAAM,EAAE;EAChD,QAAQ,aAAa,SAAS,qJAAqJ;EACnL,MAAM,UAAU;EAChB,qBAAqB,KAAK;EAC1B,gBAAgB,SAAS;GACvB,IAAI,MAAM;GACV,OAAO,MAAM;GACb;EACF,CAAC;EACD,UAAU,OAAO,OAAO;EACxB,IAAI,MAAM,QACR,2BAA2B,KAAK;CAEpC,CAAC;AACH"}
@@ -0,0 +1,30 @@
1
+ import "./options.mjs";
2
+ //#region src/runtime/polyfill/routeRuntime/history.d.ts
3
+ type WebRoutingMode = 'memory' | 'history' | 'hash';
4
+ interface WebRoutingConfig {
5
+ mode?: WebRoutingMode;
6
+ /** 部署目录前缀,例如 /mini-program。 */
7
+ base?: string;
8
+ }
9
+ interface ResolvedWebRoutingConfig {
10
+ mode: WebRoutingMode;
11
+ base: string;
12
+ }
13
+ interface WebRouteTarget {
14
+ id: string;
15
+ query: Record<string, string>;
16
+ }
17
+ interface WebRouteHistoryState {
18
+ __weappWebRuntime?: {
19
+ stack: WebRouteTarget[];
20
+ };
21
+ }
22
+ declare function resolveWebRoutingConfig(config?: WebRoutingConfig): ResolvedWebRoutingConfig;
23
+ declare function disposeWebRouting(): void;
24
+ declare function getWebRoutingConfig(): {
25
+ mode: WebRoutingMode;
26
+ base: string;
27
+ };
28
+ //#endregion
29
+ export { ResolvedWebRoutingConfig, WebRouteHistoryState, WebRouteTarget, WebRoutingConfig, WebRoutingMode, disposeWebRouting, getWebRoutingConfig, resolveWebRoutingConfig };
30
+ //# sourceMappingURL=history.d.mts.map
@@ -0,0 +1,148 @@
1
+ //#region src/runtime/polyfill/routeRuntime/history.ts
2
+ const DEFAULT_CONFIG = {
3
+ mode: "memory",
4
+ base: "/"
5
+ };
6
+ let resolvedConfig = { ...DEFAULT_CONFIG };
7
+ let knownPageIds = /* @__PURE__ */ new Set();
8
+ let popstateHandler;
9
+ let hashchangeHandler;
10
+ let scrollRestorationHistory;
11
+ let previousScrollRestoration;
12
+ function normalizeBase(base) {
13
+ if (!base?.trim()) return "/";
14
+ return base.trim().replace(/\\/g, "/").replace(/^\/*/, "/").replace(/\/*$/, "") || "/";
15
+ }
16
+ function resolveWebRoutingConfig(config) {
17
+ return {
18
+ mode: config?.mode === "history" || config?.mode === "hash" ? config.mode : "memory",
19
+ base: normalizeBase(config?.base)
20
+ };
21
+ }
22
+ function isBrowserHistoryAvailable() {
23
+ return typeof window !== "undefined" && typeof window.history?.pushState === "function" && typeof window.history?.replaceState === "function";
24
+ }
25
+ function bindManualScrollRestoration() {
26
+ if (typeof window === "undefined" || !("scrollRestoration" in window.history)) return;
27
+ scrollRestorationHistory = window.history;
28
+ previousScrollRestoration = window.history.scrollRestoration;
29
+ window.history.scrollRestoration = "manual";
30
+ }
31
+ function restoreBrowserScrollRestoration() {
32
+ if (scrollRestorationHistory && previousScrollRestoration) scrollRestorationHistory.scrollRestoration = previousScrollRestoration;
33
+ scrollRestorationHistory = void 0;
34
+ previousScrollRestoration = void 0;
35
+ }
36
+ function normalizePath(path) {
37
+ return decodeURIComponent(path || "/").split("?")[0].replace(/^\/+/, "").replace(/\/+$/, "").replace(/\.html$/, "");
38
+ }
39
+ function parseQuery(search) {
40
+ const query = {};
41
+ const params = new URLSearchParams(search.startsWith("?") ? search : `?${search}`);
42
+ for (const [key, value] of params.entries()) query[key] = value;
43
+ return query;
44
+ }
45
+ function toQueryString(query) {
46
+ const params = new URLSearchParams();
47
+ for (const [key, value] of Object.entries(query)) params.set(key, value);
48
+ const search = params.toString();
49
+ return search ? `?${search}` : "";
50
+ }
51
+ function resolvePageId(path) {
52
+ const normalized = normalizePath(path);
53
+ if (knownPageIds.has(normalized)) return normalized;
54
+ const indexId = `${normalized}/index`;
55
+ if (knownPageIds.has(indexId)) return indexId;
56
+ }
57
+ function resolveTargetFromUrl(url) {
58
+ if (resolvedConfig.mode === "hash") {
59
+ const [path, query = ""] = url.hash.replace(/^#\/?/, "").split("?");
60
+ const id = resolvePageId(path);
61
+ return id ? {
62
+ id,
63
+ query: parseQuery(query)
64
+ } : void 0;
65
+ }
66
+ const base = resolvedConfig.base === "/" ? "" : resolvedConfig.base;
67
+ const id = resolvePageId(!base || url.pathname === base || url.pathname.startsWith(`${base}/`) ? url.pathname.slice(base.length) : url.pathname);
68
+ return id ? {
69
+ id,
70
+ query: parseQuery(url.search)
71
+ } : void 0;
72
+ }
73
+ function readWebRouteTarget(pageIds, url) {
74
+ knownPageIds = new Set(pageIds);
75
+ if (resolvedConfig.mode === "memory" || typeof URL === "undefined") return;
76
+ const runtimeUrl = url ?? (typeof window !== "undefined" ? window.location.href : void 0);
77
+ if (!runtimeUrl) return;
78
+ try {
79
+ return resolveTargetFromUrl(new URL(runtimeUrl, "http://weapp-vite.local"));
80
+ } catch {
81
+ return;
82
+ }
83
+ }
84
+ function formatRouteUrl(target) {
85
+ const query = toQueryString(target.query);
86
+ const path = `${target.id}${query}`;
87
+ if (resolvedConfig.mode === "hash") return `${resolvedConfig.base === "/" ? "" : resolvedConfig.base}/#/${path}`;
88
+ return `${resolvedConfig.base === "/" ? "" : resolvedConfig.base}/${path}`;
89
+ }
90
+ function toHistoryState(entries) {
91
+ return { __weappWebRuntime: { stack: entries.map((entry) => ({
92
+ id: entry.id,
93
+ query: { ...entry.query }
94
+ })) } };
95
+ }
96
+ function disposeWebRouting() {
97
+ if (typeof window !== "undefined") {
98
+ if (popstateHandler) window.removeEventListener("popstate", popstateHandler);
99
+ if (hashchangeHandler) window.removeEventListener("hashchange", hashchangeHandler);
100
+ }
101
+ popstateHandler = void 0;
102
+ hashchangeHandler = void 0;
103
+ restoreBrowserScrollRestoration();
104
+ resolvedConfig = { ...DEFAULT_CONFIG };
105
+ knownPageIds = /* @__PURE__ */ new Set();
106
+ }
107
+ function configureWebRouting(config, pageIds, onPopState) {
108
+ disposeWebRouting();
109
+ resolvedConfig = resolveWebRoutingConfig(config);
110
+ knownPageIds = new Set(pageIds);
111
+ if (resolvedConfig.mode === "memory" || typeof window === "undefined") return resolvedConfig;
112
+ bindManualScrollRestoration();
113
+ popstateHandler = () => {
114
+ const state = window.history.state;
115
+ onPopState(readWebRouteTarget(pageIds), state);
116
+ };
117
+ window.addEventListener("popstate", popstateHandler);
118
+ if (resolvedConfig.mode === "hash") {
119
+ hashchangeHandler = () => {
120
+ const state = window.history.state;
121
+ onPopState(readWebRouteTarget(pageIds), state);
122
+ };
123
+ window.addEventListener("hashchange", hashchangeHandler);
124
+ }
125
+ return resolvedConfig;
126
+ }
127
+ function syncWebRouting(entries, operation) {
128
+ if (resolvedConfig.mode === "memory" || !isBrowserHistoryAvailable() || !entries.length) return;
129
+ const target = entries[entries.length - 1];
130
+ const url = formatRouteUrl({
131
+ id: target.id,
132
+ query: target.query
133
+ });
134
+ const state = toHistoryState(entries);
135
+ if (operation === "push") window.history.pushState(state, "", url);
136
+ else window.history.replaceState(state, "", url);
137
+ }
138
+ function getWebHistoryStack(state) {
139
+ const stack = state?.__weappWebRuntime?.stack;
140
+ return Array.isArray(stack) ? stack : void 0;
141
+ }
142
+ function getWebRoutingConfig() {
143
+ return { ...resolvedConfig };
144
+ }
145
+
146
+ //#endregion
147
+ export { configureWebRouting, disposeWebRouting, getWebHistoryStack, getWebRoutingConfig, readWebRouteTarget, resolveWebRoutingConfig, syncWebRouting };
148
+ //# sourceMappingURL=history.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.mjs","names":[],"sources":["../../../../src/runtime/polyfill/routeRuntime/history.ts"],"sourcesContent":["import type { PageStackEntry } from './options'\n\nexport type WebRoutingMode = 'memory' | 'history' | 'hash'\n\nexport interface WebRoutingConfig {\n mode?: WebRoutingMode\n /** 部署目录前缀,例如 /mini-program。 */\n base?: string\n}\n\nexport interface ResolvedWebRoutingConfig {\n mode: WebRoutingMode\n base: string\n}\n\nexport interface WebRouteTarget {\n id: string\n query: Record<string, string>\n}\n\nexport interface WebRouteHistoryState {\n __weappWebRuntime?: {\n stack: WebRouteTarget[]\n }\n}\n\nconst DEFAULT_CONFIG: ResolvedWebRoutingConfig = {\n mode: 'memory',\n base: '/',\n}\n\nlet resolvedConfig = { ...DEFAULT_CONFIG }\nlet knownPageIds = new Set<string>()\nlet popstateHandler: (() => void) | undefined\nlet hashchangeHandler: (() => void) | undefined\nlet scrollRestorationHistory: History | undefined\nlet previousScrollRestoration: ScrollRestoration | undefined\n\nfunction normalizeBase(base?: string) {\n if (!base?.trim()) {\n return '/'\n }\n const normalized = base.trim().replace(/\\\\/g, '/').replace(/^\\/*/, '/').replace(/\\/*$/, '')\n return normalized || '/'\n}\n\nexport function resolveWebRoutingConfig(config?: WebRoutingConfig): ResolvedWebRoutingConfig {\n return {\n mode: config?.mode === 'history' || config?.mode === 'hash' ? config.mode : 'memory',\n base: normalizeBase(config?.base),\n }\n}\n\nfunction isBrowserHistoryAvailable() {\n return typeof window !== 'undefined'\n && typeof window.history?.pushState === 'function'\n && typeof window.history?.replaceState === 'function'\n}\n\nfunction bindManualScrollRestoration() {\n if (typeof window === 'undefined' || !('scrollRestoration' in window.history)) {\n return\n }\n scrollRestorationHistory = window.history\n previousScrollRestoration = window.history.scrollRestoration\n window.history.scrollRestoration = 'manual'\n}\n\nfunction restoreBrowserScrollRestoration() {\n if (scrollRestorationHistory && previousScrollRestoration) {\n scrollRestorationHistory.scrollRestoration = previousScrollRestoration\n }\n scrollRestorationHistory = undefined\n previousScrollRestoration = undefined\n}\n\nfunction normalizePath(path: string) {\n const decoded = decodeURIComponent(path || '/')\n const withoutQuery = decoded.split('?')[0]!\n const withoutLeading = withoutQuery.replace(/^\\/+/, '').replace(/\\/+$/, '')\n return withoutLeading.replace(/\\.html$/, '')\n}\n\nfunction parseQuery(search: string) {\n const query: Record<string, string> = {}\n const params = new URLSearchParams(search.startsWith('?') ? search : `?${search}`)\n for (const [key, value] of params.entries()) {\n query[key] = value\n }\n return query\n}\n\nfunction toQueryString(query: Record<string, string>) {\n const params = new URLSearchParams()\n for (const [key, value] of Object.entries(query)) {\n params.set(key, value)\n }\n const search = params.toString()\n return search ? `?${search}` : ''\n}\n\nfunction resolvePageId(path: string) {\n const normalized = normalizePath(path)\n if (knownPageIds.has(normalized)) {\n return normalized\n }\n const indexId = `${normalized}/index`\n if (knownPageIds.has(indexId)) {\n return indexId\n }\n return undefined\n}\n\nfunction resolveTargetFromUrl(url: URL) {\n if (resolvedConfig.mode === 'hash') {\n const rawHash = url.hash.replace(/^#\\/?/, '')\n const [path, query = ''] = rawHash.split('?')\n const id = resolvePageId(path)\n return id ? { id, query: parseQuery(query) } : undefined\n }\n\n const base = resolvedConfig.base === '/' ? '' : resolvedConfig.base\n const matchesBase = !base || url.pathname === base || url.pathname.startsWith(`${base}/`)\n const path = matchesBase ? url.pathname.slice(base.length) : url.pathname\n const id = resolvePageId(path)\n return id ? { id, query: parseQuery(url.search) } : undefined\n}\n\nexport function readWebRouteTarget(pageIds: string[], url?: string): WebRouteTarget | undefined {\n knownPageIds = new Set(pageIds)\n if (resolvedConfig.mode === 'memory' || typeof URL === 'undefined') {\n return undefined\n }\n const runtimeUrl = url ?? (typeof window !== 'undefined' ? window.location.href : undefined)\n if (!runtimeUrl) {\n return undefined\n }\n try {\n return resolveTargetFromUrl(new URL(runtimeUrl, 'http://weapp-vite.local'))\n }\n catch {\n return undefined\n }\n}\n\nfunction formatRouteUrl(target: WebRouteTarget) {\n const query = toQueryString(target.query)\n const path = `${target.id}${query}`\n if (resolvedConfig.mode === 'hash') {\n const prefix = resolvedConfig.base === '/' ? '' : resolvedConfig.base\n return `${prefix}/#/${path}`\n }\n const prefix = resolvedConfig.base === '/' ? '' : resolvedConfig.base\n return `${prefix}/${path}`\n}\n\nfunction toHistoryState(entries: PageStackEntry[]): WebRouteHistoryState {\n return {\n __weappWebRuntime: {\n stack: entries.map(entry => ({\n id: entry.id,\n query: { ...entry.query },\n })),\n },\n }\n}\n\nfunction resolveCurrentUrl() {\n if (typeof window === 'undefined') {\n return undefined\n }\n return `${window.location.pathname}${window.location.search}${window.location.hash}`\n}\n\nexport function disposeWebRouting() {\n if (typeof window !== 'undefined') {\n if (popstateHandler) {\n window.removeEventListener('popstate', popstateHandler)\n }\n if (hashchangeHandler) {\n window.removeEventListener('hashchange', hashchangeHandler)\n }\n }\n popstateHandler = undefined\n hashchangeHandler = undefined\n restoreBrowserScrollRestoration()\n resolvedConfig = { ...DEFAULT_CONFIG }\n knownPageIds = new Set()\n}\n\nexport function configureWebRouting(\n config: WebRoutingConfig | undefined,\n pageIds: string[],\n onPopState: (target: WebRouteTarget | undefined, state: WebRouteHistoryState | undefined) => void,\n) {\n disposeWebRouting()\n resolvedConfig = resolveWebRoutingConfig(config)\n knownPageIds = new Set(pageIds)\n if (resolvedConfig.mode === 'memory' || typeof window === 'undefined') {\n return resolvedConfig\n }\n\n bindManualScrollRestoration()\n\n popstateHandler = () => {\n const state = window.history.state as WebRouteHistoryState | undefined\n onPopState(readWebRouteTarget(pageIds), state)\n }\n window.addEventListener('popstate', popstateHandler)\n if (resolvedConfig.mode === 'hash') {\n hashchangeHandler = () => {\n const state = window.history.state as WebRouteHistoryState | undefined\n onPopState(readWebRouteTarget(pageIds), state)\n }\n window.addEventListener('hashchange', hashchangeHandler)\n }\n return resolvedConfig\n}\n\nexport function syncWebRouting(entries: PageStackEntry[], operation: 'push' | 'replace') {\n if (resolvedConfig.mode === 'memory' || !isBrowserHistoryAvailable() || !entries.length) {\n return\n }\n const target = entries[entries.length - 1]!\n const url = formatRouteUrl({ id: target.id, query: target.query })\n const state = toHistoryState(entries)\n if (operation === 'push') {\n window.history.pushState(state, '', url)\n }\n else {\n window.history.replaceState(state, '', url)\n }\n}\n\nexport function getWebHistoryStack(state: WebRouteHistoryState | undefined) {\n const stack = state?.__weappWebRuntime?.stack\n return Array.isArray(stack) ? stack : undefined\n}\n\nexport function getWebRoutingConfig() {\n return { ...resolvedConfig }\n}\n\nexport function getWebRoutingUrl() {\n return resolveCurrentUrl()\n}\n"],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ import { WEVU_PAGE_LAYOUT_NAME_KEY, WEVU_PAGE_LAYOUT_PROPS_KEY, WEVU_PAGE_LAYOUT_SETTER_KEY } from "@weapp-core/constants";
2
+
1
3
  //#region src/runtime/polyfill/routeRuntime/lifecycle.ts
2
4
  const ROUTE_META_SYMBOL = Symbol("@weapp-vite/web:route-meta");
3
5
  const PAGE_STATE_SYMBOL = Symbol("@weapp-vite/web:page-state");
@@ -6,7 +8,10 @@ function getRouteMeta(instance) {
6
8
  }
7
9
  function getPageState(instance) {
8
10
  const target = instance;
9
- target[PAGE_STATE_SYMBOL] ??= { loaded: false };
11
+ target[PAGE_STATE_SYMBOL] ??= {
12
+ loaded: false,
13
+ visible: false
14
+ };
10
15
  return target[PAGE_STATE_SYMBOL];
11
16
  }
12
17
  function walkElementsDeep(root, collector) {
@@ -30,7 +35,23 @@ function dispatchPageLifetimeToComponents(page, type) {
30
35
  }
31
36
  }
32
37
  function attachRouteMeta(element, meta) {
33
- element[ROUTE_META_SYMBOL] = meta;
38
+ const carrier = element;
39
+ carrier[ROUTE_META_SYMBOL] = meta;
40
+ carrier.route = meta.id;
41
+ }
42
+ function hidePageInstance(instance, record) {
43
+ const state = getPageState(instance);
44
+ if (!state.visible) return;
45
+ dispatchPageLifetimeToComponents(instance, "hide");
46
+ record.hooks.onHide?.call(instance);
47
+ state.visible = false;
48
+ }
49
+ function showPageInstance(instance, record) {
50
+ const state = getPageState(instance);
51
+ if (state.visible || !state.loaded) return;
52
+ record.hooks.onShow?.call(instance);
53
+ dispatchPageLifetimeToComponents(instance, "show");
54
+ state.visible = true;
34
55
  }
35
56
  function augmentPageComponentOptions(component, record) {
36
57
  const lifetimes = component.lifetimes ?? {};
@@ -44,6 +65,13 @@ function augmentPageComponentOptions(component, record) {
44
65
  ...lifetimes,
45
66
  created() {
46
67
  originalCreated?.call(this);
68
+ const target = this;
69
+ target[WEVU_PAGE_LAYOUT_SETTER_KEY] = (layout, props) => {
70
+ target.setData?.({
71
+ [WEVU_PAGE_LAYOUT_NAME_KEY]: layout === false ? "__wv_no_layout" : layout,
72
+ [WEVU_PAGE_LAYOUT_PROPS_KEY]: layout === false ? {} : props ?? {}
73
+ });
74
+ };
47
75
  getPageState(this);
48
76
  record.instances.add(this);
49
77
  },
@@ -56,22 +84,25 @@ function augmentPageComponentOptions(component, record) {
56
84
  record.hooks.onLoad?.call(this, meta?.query ?? {});
57
85
  state.loaded = true;
58
86
  }
59
- record.hooks.onShow?.call(this);
87
+ if (meta?.entry.active !== false) {
88
+ record.hooks.onShow?.call(this);
89
+ state.visible = true;
90
+ }
60
91
  },
61
92
  ready() {
62
93
  originalReady?.call(this);
63
94
  record.hooks.onReady?.call(this);
64
- dispatchPageLifetimeToComponents(this, "show");
95
+ if (getPageState(this).visible) dispatchPageLifetimeToComponents(this, "show");
65
96
  },
66
97
  detached() {
67
98
  originalDetached?.call(this);
68
99
  const meta = getRouteMeta(this);
69
100
  if (meta?.entry) meta.entry.instance = void 0;
70
- dispatchPageLifetimeToComponents(this, "hide");
71
- record.hooks.onHide?.call(this);
72
- record.hooks.onUnload?.call(this);
73
101
  const state = getPageState(this);
102
+ hidePageInstance(this, record);
103
+ if (state.loaded) record.hooks.onUnload?.call(this);
74
104
  state.loaded = false;
105
+ state.visible = false;
75
106
  record.instances.delete(this);
76
107
  }
77
108
  }
@@ -79,5 +110,5 @@ function augmentPageComponentOptions(component, record) {
79
110
  }
80
111
 
81
112
  //#endregion
82
- export { attachRouteMeta, augmentPageComponentOptions, dispatchPageLifetimeToComponents };
113
+ export { attachRouteMeta, augmentPageComponentOptions, dispatchPageLifetimeToComponents, hidePageInstance, showPageInstance };
83
114
  //# sourceMappingURL=lifecycle.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.mjs","names":[],"sources":["../../../../src/runtime/polyfill/routeRuntime/lifecycle.ts"],"sourcesContent":["import type { ComponentOptions, ComponentPublicInstance } from '../../component'\nimport type { PageRecord, RouteMeta } from './options'\n\nconst ROUTE_META_SYMBOL = Symbol('@weapp-vite/web:route-meta')\nconst PAGE_STATE_SYMBOL = Symbol('@weapp-vite/web:page-state')\n\ninterface RouteMetaCarrier {\n [ROUTE_META_SYMBOL]?: RouteMeta\n}\n\ninterface PageInstanceState {\n loaded: boolean\n}\n\ninterface PageStateCarrier {\n [PAGE_STATE_SYMBOL]?: PageInstanceState\n}\n\ntype ComponentPageLifetimeType = 'show' | 'hide' | 'resize'\n\ninterface PageLifetimeAwareComponent extends HTMLElement {\n __weappInvokePageLifetime?: (type: ComponentPageLifetimeType) => void\n renderRoot?: ShadowRoot | HTMLElement\n}\n\nfunction getRouteMeta(instance: ComponentPublicInstance): RouteMeta | undefined {\n return (instance as RouteMetaCarrier)[ROUTE_META_SYMBOL]\n}\n\nfunction getPageState(instance: ComponentPublicInstance): PageInstanceState {\n const target = instance as PageStateCarrier\n target[PAGE_STATE_SYMBOL] ??= { loaded: false }\n return target[PAGE_STATE_SYMBOL]!\n}\n\nfunction walkElementsDeep(root: ParentNode, collector: Set<HTMLElement>) {\n const nodes = Array.from((root as ParentNode & { childNodes?: ArrayLike<unknown> }).childNodes ?? [])\n for (const node of nodes) {\n if (!(node instanceof HTMLElement)) {\n continue\n }\n collector.add(node)\n walkElementsDeep(node, collector)\n if (node.shadowRoot) {\n walkElementsDeep(node.shadowRoot, collector)\n }\n }\n}\n\nexport function dispatchPageLifetimeToComponents(\n page: ComponentPublicInstance,\n type: ComponentPageLifetimeType,\n) {\n const host = page as ComponentPublicInstance & {\n renderRoot?: ShadowRoot | HTMLElement\n shadowRoot?: ShadowRoot | null\n }\n const root = host.renderRoot ?? host.shadowRoot ?? host\n if (!root || typeof root.querySelectorAll !== 'function') {\n return\n }\n const elements = new Set<HTMLElement>()\n walkElementsDeep(root, elements)\n for (const element of elements) {\n const component = element as PageLifetimeAwareComponent\n if (typeof component.__weappInvokePageLifetime === 'function') {\n component.__weappInvokePageLifetime(type)\n }\n }\n}\n\nexport function attachRouteMeta(\n element: HTMLElement & ComponentPublicInstance,\n meta: RouteMeta,\n) {\n (element as RouteMetaCarrier)[ROUTE_META_SYMBOL] = meta\n}\n\nexport function augmentPageComponentOptions(component: ComponentOptions, record: PageRecord) {\n const lifetimes = component.lifetimes ?? {}\n const originalCreated = lifetimes?.created\n const originalAttached = lifetimes?.attached\n const originalReady = lifetimes?.ready\n const originalDetached = lifetimes?.detached\n\n const enhanced: ComponentOptions = {\n ...component,\n lifetimes: {\n ...lifetimes,\n created(this: ComponentPublicInstance) {\n originalCreated?.call(this)\n getPageState(this)\n record.instances.add(this)\n },\n attached(this: ComponentPublicInstance) {\n originalAttached?.call(this)\n const meta = getRouteMeta(this)\n if (meta?.entry) {\n meta.entry.instance = this\n }\n const state = getPageState(this)\n if (!state.loaded) {\n record.hooks.onLoad?.call(this, meta?.query ?? {})\n state.loaded = true\n }\n record.hooks.onShow?.call(this)\n },\n ready(this: ComponentPublicInstance) {\n originalReady?.call(this)\n record.hooks.onReady?.call(this)\n dispatchPageLifetimeToComponents(this, 'show')\n },\n detached(this: ComponentPublicInstance) {\n originalDetached?.call(this)\n const meta = getRouteMeta(this)\n if (meta?.entry) {\n meta.entry.instance = undefined\n }\n dispatchPageLifetimeToComponents(this, 'hide')\n record.hooks.onHide?.call(this)\n record.hooks.onUnload?.call(this)\n const state = getPageState(this)\n state.loaded = false\n record.instances.delete(this)\n },\n },\n }\n\n return enhanced\n}\n"],"mappings":";AAGA,MAAM,oBAAoB,OAAO,4BAA4B;AAC7D,MAAM,oBAAoB,OAAO,4BAA4B;AAqB7D,SAAS,aAAa,UAA0D;CAC9E,OAAQ,SAA8B;AACxC;AAEA,SAAS,aAAa,UAAsD;CAC1E,MAAM,SAAS;CACf,OAAO,uBAAuB,EAAE,QAAQ,MAAM;CAC9C,OAAO,OAAO;AAChB;AAEA,SAAS,iBAAiB,MAAkB,WAA6B;CACvE,MAAM,QAAQ,MAAM,KAAM,KAA0D,cAAc,CAAC,CAAC;CACpG,KAAK,MAAM,QAAQ,OAAO;EACxB,IAAI,EAAE,gBAAgB,cACpB;EAEF,UAAU,IAAI,IAAI;EAClB,iBAAiB,MAAM,SAAS;EAChC,IAAI,KAAK,YACP,iBAAiB,KAAK,YAAY,SAAS;CAE/C;AACF;AAEA,SAAgB,iCACd,MACA,MACA;CACA,MAAM,OAAO;CAIb,MAAM,OAAO,KAAK,cAAc,KAAK,cAAc;CACnD,IAAI,CAAC,QAAQ,OAAO,KAAK,qBAAqB,YAC5C;CAEF,MAAM,2BAAW,IAAI,IAAiB;CACtC,iBAAiB,MAAM,QAAQ;CAC/B,KAAK,MAAM,WAAW,UAAU;EAC9B,MAAM,YAAY;EAClB,IAAI,OAAO,UAAU,8BAA8B,YACjD,UAAU,0BAA0B,IAAI;CAE5C;AACF;AAEA,SAAgB,gBACd,SACA,MACA;CACA,AAAC,QAA6B,qBAAqB;AACrD;AAEA,SAAgB,4BAA4B,WAA6B,QAAoB;CAC3F,MAAM,YAAY,UAAU,aAAa,CAAC;CAC1C,MAAM,kBAAkB,WAAW;CACnC,MAAM,mBAAmB,WAAW;CACpC,MAAM,gBAAgB,WAAW;CACjC,MAAM,mBAAmB,WAAW;CA6CpC,OAAO;EA1CL,GAAG;EACH,WAAW;GACT,GAAG;GACH,UAAuC;IACrC,iBAAiB,KAAK,IAAI;IAC1B,aAAa,IAAI;IACjB,OAAO,UAAU,IAAI,IAAI;GAC3B;GACA,WAAwC;IACtC,kBAAkB,KAAK,IAAI;IAC3B,MAAM,OAAO,aAAa,IAAI;IAC9B,IAAI,MAAM,OACR,KAAK,MAAM,WAAW;IAExB,MAAM,QAAQ,aAAa,IAAI;IAC/B,IAAI,CAAC,MAAM,QAAQ;KACjB,OAAO,MAAM,QAAQ,KAAK,MAAM,MAAM,SAAS,CAAC,CAAC;KACjD,MAAM,SAAS;IACjB;IACA,OAAO,MAAM,QAAQ,KAAK,IAAI;GAChC;GACA,QAAqC;IACnC,eAAe,KAAK,IAAI;IACxB,OAAO,MAAM,SAAS,KAAK,IAAI;IAC/B,iCAAiC,MAAM,MAAM;GAC/C;GACA,WAAwC;IACtC,kBAAkB,KAAK,IAAI;IAC3B,MAAM,OAAO,aAAa,IAAI;IAC9B,IAAI,MAAM,OACR,KAAK,MAAM,WAAW;IAExB,iCAAiC,MAAM,MAAM;IAC7C,OAAO,MAAM,QAAQ,KAAK,IAAI;IAC9B,OAAO,MAAM,UAAU,KAAK,IAAI;IAChC,MAAM,QAAQ,aAAa,IAAI;IAC/B,MAAM,SAAS;IACf,OAAO,UAAU,OAAO,IAAI;GAC9B;EACF;CAGY;AAChB"}
1
+ {"version":3,"file":"lifecycle.mjs","names":[],"sources":["../../../../src/runtime/polyfill/routeRuntime/lifecycle.ts"],"sourcesContent":["import type { ComponentOptions, ComponentPublicInstance } from '../../component'\nimport type { PageRecord, RouteMeta } from './options'\nimport { WEVU_PAGE_LAYOUT_NAME_KEY, WEVU_PAGE_LAYOUT_PROPS_KEY, WEVU_PAGE_LAYOUT_SETTER_KEY } from '@weapp-core/constants'\n\nconst ROUTE_META_SYMBOL = Symbol('@weapp-vite/web:route-meta')\nconst PAGE_STATE_SYMBOL = Symbol('@weapp-vite/web:page-state')\n\ninterface RouteMetaCarrier {\n [ROUTE_META_SYMBOL]?: RouteMeta\n route?: string\n}\n\ninterface PageInstanceState {\n loaded: boolean\n visible: boolean\n}\n\ninterface PageStateCarrier {\n [PAGE_STATE_SYMBOL]?: PageInstanceState\n}\n\ntype ComponentPageLifetimeType = 'show' | 'hide' | 'resize'\n\ninterface PageLifetimeAwareComponent extends HTMLElement {\n __weappInvokePageLifetime?: (type: ComponentPageLifetimeType) => void\n renderRoot?: ShadowRoot | HTMLElement\n}\n\nfunction getRouteMeta(instance: ComponentPublicInstance): RouteMeta | undefined {\n return (instance as RouteMetaCarrier)[ROUTE_META_SYMBOL]\n}\n\nfunction getPageState(instance: ComponentPublicInstance): PageInstanceState {\n const target = instance as PageStateCarrier\n target[PAGE_STATE_SYMBOL] ??= { loaded: false, visible: false }\n return target[PAGE_STATE_SYMBOL]!\n}\n\nfunction walkElementsDeep(root: ParentNode, collector: Set<HTMLElement>) {\n const nodes = Array.from((root as ParentNode & { childNodes?: ArrayLike<unknown> }).childNodes ?? [])\n for (const node of nodes) {\n if (!(node instanceof HTMLElement)) {\n continue\n }\n collector.add(node)\n walkElementsDeep(node, collector)\n if (node.shadowRoot) {\n walkElementsDeep(node.shadowRoot, collector)\n }\n }\n}\n\nexport function dispatchPageLifetimeToComponents(\n page: ComponentPublicInstance,\n type: ComponentPageLifetimeType,\n) {\n const host = page as ComponentPublicInstance & {\n renderRoot?: ShadowRoot | HTMLElement\n shadowRoot?: ShadowRoot | null\n }\n const root = host.renderRoot ?? host.shadowRoot ?? host\n if (!root || typeof root.querySelectorAll !== 'function') {\n return\n }\n const elements = new Set<HTMLElement>()\n walkElementsDeep(root, elements)\n for (const element of elements) {\n const component = element as PageLifetimeAwareComponent\n if (typeof component.__weappInvokePageLifetime === 'function') {\n component.__weappInvokePageLifetime(type)\n }\n }\n}\n\nexport function attachRouteMeta(\n element: HTMLElement & ComponentPublicInstance,\n meta: RouteMeta,\n) {\n const carrier = element as RouteMetaCarrier\n carrier[ROUTE_META_SYMBOL] = meta\n carrier.route = meta.id\n}\n\nexport function hidePageInstance(instance: ComponentPublicInstance, record: PageRecord) {\n const state = getPageState(instance)\n if (!state.visible) {\n return\n }\n dispatchPageLifetimeToComponents(instance, 'hide')\n record.hooks.onHide?.call(instance)\n state.visible = false\n}\n\nexport function showPageInstance(instance: ComponentPublicInstance, record: PageRecord) {\n const state = getPageState(instance)\n if (state.visible || !state.loaded) {\n return\n }\n record.hooks.onShow?.call(instance)\n dispatchPageLifetimeToComponents(instance, 'show')\n state.visible = true\n}\n\nexport function augmentPageComponentOptions(component: ComponentOptions, record: PageRecord) {\n const lifetimes = component.lifetimes ?? {}\n const originalCreated = lifetimes?.created\n const originalAttached = lifetimes?.attached\n const originalReady = lifetimes?.ready\n const originalDetached = lifetimes?.detached\n\n const enhanced: ComponentOptions = {\n ...component,\n lifetimes: {\n ...lifetimes,\n created(this: ComponentPublicInstance) {\n originalCreated?.call(this)\n const target = this as ComponentPublicInstance & Record<string, any>\n target[WEVU_PAGE_LAYOUT_SETTER_KEY] = (layout: string | false, props?: Record<string, any>) => {\n target.setData?.({\n [WEVU_PAGE_LAYOUT_NAME_KEY]: layout === false ? '__wv_no_layout' : layout,\n [WEVU_PAGE_LAYOUT_PROPS_KEY]: layout === false ? {} : (props ?? {}),\n })\n }\n getPageState(this)\n record.instances.add(this)\n },\n attached(this: ComponentPublicInstance) {\n originalAttached?.call(this)\n const meta = getRouteMeta(this)\n if (meta?.entry) {\n meta.entry.instance = this\n }\n const state = getPageState(this)\n if (!state.loaded) {\n record.hooks.onLoad?.call(this, meta?.query ?? {})\n state.loaded = true\n }\n if (meta?.entry.active !== false) {\n record.hooks.onShow?.call(this)\n state.visible = true\n }\n },\n ready(this: ComponentPublicInstance) {\n originalReady?.call(this)\n record.hooks.onReady?.call(this)\n if (getPageState(this).visible) {\n dispatchPageLifetimeToComponents(this, 'show')\n }\n },\n detached(this: ComponentPublicInstance) {\n originalDetached?.call(this)\n const meta = getRouteMeta(this)\n if (meta?.entry) {\n meta.entry.instance = undefined\n }\n const state = getPageState(this)\n hidePageInstance(this, record)\n if (state.loaded) {\n record.hooks.onUnload?.call(this)\n }\n state.loaded = false\n state.visible = false\n record.instances.delete(this)\n },\n },\n }\n\n return enhanced\n}\n"],"mappings":"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"}
@@ -1,11 +1,14 @@
1
+ import { NavigationBarConfig } from "../../../compiler/wxml/types.mjs";
1
2
  import { TemplateRenderer } from "../../template.mjs";
2
3
  import { ComponentOptions, ComponentPublicInstance } from "../../component/types.mjs";
3
4
  import "../../component/index.mjs";
5
+ import { MiniProgramAsyncOptions, MiniProgramBaseResult } from "../types/base.mjs";
4
6
  //#region src/runtime/polyfill/routeRuntime/options.d.ts
5
7
  interface RegisterMeta {
6
8
  id: string;
7
9
  template?: TemplateRenderer;
8
10
  style?: string;
11
+ navigationBar?: NavigationBarConfig;
9
12
  }
10
13
  interface PageHooks {
11
14
  onLoad?: (this: ComponentPublicInstance, query: Record<string, string>) => void;
@@ -17,6 +20,7 @@ interface PageHooks {
17
20
  interface AppLifecycleHooks {
18
21
  onLaunch?: (this: AppRuntime, options: AppLaunchOptions) => void;
19
22
  onShow?: (this: AppRuntime, options: AppLaunchOptions) => void;
23
+ onHide?: (this: AppRuntime) => void;
20
24
  }
21
25
  type AppRuntime = Record<string, unknown> & Partial<AppLifecycleHooks> & {
22
26
  globalData?: Record<string, unknown>;
@@ -27,8 +31,14 @@ interface AppLaunchOptions {
27
31
  query: Record<string, string>;
28
32
  referrerInfo: Record<string, unknown>;
29
33
  }
34
+ interface RouteOptions extends MiniProgramAsyncOptions<MiniProgramBaseResult> {
35
+ url: string;
36
+ }
37
+ interface NavigateBackOptions extends MiniProgramAsyncOptions<MiniProgramBaseResult> {
38
+ delta?: number;
39
+ }
30
40
  type PageRawOptions = ComponentOptions & PageHooks & Record<string, unknown>;
31
41
  type ComponentRawOptions = ComponentOptions & Record<string, unknown>;
32
42
  //#endregion
33
- export { AppLaunchOptions, AppRuntime, ComponentRawOptions, PageHooks, PageRawOptions, RegisterMeta };
43
+ export { AppLaunchOptions, AppRuntime, ComponentRawOptions, NavigateBackOptions, PageHooks, PageRawOptions, RegisterMeta, RouteOptions };
34
44
  //# sourceMappingURL=options.d.mts.map
@@ -28,7 +28,6 @@ const RESERVED_COMPONENT_METHOD_KEYS = /* @__PURE__ */ new Set([
28
28
  "mixins"
29
29
  ]);
30
30
  function cloneLifetimes(source) {
31
- if (!source) return;
32
31
  return { ...source };
33
32
  }
34
33
  function isRecord(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"options.mjs","names":[],"sources":["../../../../src/runtime/polyfill/routeRuntime/options.ts"],"sourcesContent":["import type { ComponentOptions, ComponentPublicInstance } from '../../component'\nimport type { TemplateRenderer } from '../../template'\n\nexport interface RegisterMeta {\n id: string\n template?: TemplateRenderer\n style?: string\n}\n\nexport interface PageHooks {\n onLoad?: (this: ComponentPublicInstance, query: Record<string, string>) => void\n onReady?: (this: ComponentPublicInstance) => void\n onShow?: (this: ComponentPublicInstance) => void\n onHide?: (this: ComponentPublicInstance) => void\n onUnload?: (this: ComponentPublicInstance) => void\n}\n\nexport interface PageRecord {\n tag: string\n hooks: PageHooks\n instances: Set<ComponentPublicInstance>\n}\n\nexport interface ComponentRecord {\n tag: string\n}\n\nexport interface PageStackEntry {\n id: string\n query: Record<string, string>\n instance?: ComponentPublicInstance\n}\n\nexport interface RouteMeta {\n id: string\n query: Record<string, string>\n entry: PageStackEntry\n}\n\ninterface AppLifecycleHooks {\n onLaunch?: (this: AppRuntime, options: AppLaunchOptions) => void\n onShow?: (this: AppRuntime, options: AppLaunchOptions) => void\n}\n\nexport type AppRuntime = Record<string, unknown> & Partial<AppLifecycleHooks> & {\n globalData?: Record<string, unknown>\n}\n\nexport interface AppLaunchOptions {\n path: string\n scene: number\n query: Record<string, string>\n referrerInfo: Record<string, unknown>\n}\n\ntype MethodHandler = (this: ComponentPublicInstance, ...args: unknown[]) => unknown\n\nexport type PageRawOptions = ComponentOptions & PageHooks & Record<string, unknown>\nexport type ComponentRawOptions = ComponentOptions & Record<string, unknown>\n\nconst PAGE_LIFECYCLE_KEYS = new Set(['onLoad', 'onReady', 'onShow', 'onHide', 'onUnload'])\nconst RESERVED_PAGE_METHOD_KEYS = new Set([\n 'data',\n 'methods',\n 'lifetimes',\n 'properties',\n 'behaviors',\n 'options',\n 'observers',\n 'mixins',\n ...PAGE_LIFECYCLE_KEYS,\n])\nconst RESERVED_COMPONENT_METHOD_KEYS = new Set([\n 'data',\n 'methods',\n 'lifetimes',\n 'pageLifetimes',\n 'properties',\n 'behaviors',\n 'options',\n 'observers',\n 'mixins',\n])\n\nfunction cloneLifetimes(source?: ComponentOptions['lifetimes']): ComponentOptions['lifetimes'] {\n if (!source) {\n return undefined\n }\n return {\n ...source,\n }\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null\n}\n\nfunction isMethodHandler(value: unknown): value is MethodHandler {\n return typeof value === 'function'\n}\n\nfunction normalizeMethodBag(\n source: Record<string, unknown> | undefined,\n reserved: Set<string>,\n) {\n const methods: Record<string, MethodHandler> = {}\n const sourceMethods = isRecord(source?.methods) ? source?.methods : undefined\n\n if (sourceMethods) {\n for (const [key, value] of Object.entries(sourceMethods)) {\n if (isMethodHandler(value)) {\n methods[key] = value\n }\n }\n }\n\n if (source) {\n for (const [key, value] of Object.entries(source)) {\n if (reserved.has(key)) {\n continue\n }\n if (isMethodHandler(value) && methods[key] === undefined) {\n methods[key] = value\n }\n }\n }\n return methods\n}\n\nexport function normalizePageOptions(raw: PageRawOptions | undefined): { component: ComponentOptions, hooks: PageHooks } {\n const component = { ...(raw ?? {}) } as ComponentOptions\n component.methods = normalizeMethodBag(raw as Record<string, unknown> | undefined, RESERVED_PAGE_METHOD_KEYS) as ComponentOptions['methods']\n if (raw?.lifetimes) {\n component.lifetimes = cloneLifetimes(raw.lifetimes)\n }\n const hooks: PageHooks = {}\n if (typeof raw?.onLoad === 'function') {\n hooks.onLoad = raw.onLoad as PageHooks['onLoad']\n }\n if (typeof raw?.onReady === 'function') {\n hooks.onReady = raw.onReady as PageHooks['onReady']\n }\n if (typeof raw?.onShow === 'function') {\n hooks.onShow = raw.onShow as PageHooks['onShow']\n }\n if (typeof raw?.onHide === 'function') {\n hooks.onHide = raw.onHide as PageHooks['onHide']\n }\n if (typeof raw?.onUnload === 'function') {\n hooks.onUnload = raw.onUnload as PageHooks['onUnload']\n }\n return { component, hooks }\n}\n\nexport function normalizeComponentOptions(raw: ComponentRawOptions | undefined): ComponentOptions {\n const component = { ...(raw ?? {}) } as ComponentOptions\n component.methods = normalizeMethodBag(raw as Record<string, unknown> | undefined, RESERVED_COMPONENT_METHOD_KEYS) as ComponentOptions['methods']\n if (raw?.lifetimes) {\n component.lifetimes = cloneLifetimes(raw.lifetimes)\n }\n return component\n}\n"],"mappings":";AA6DA,MAAM,4CAA4B,IAAI,IAAI;CACxC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,mBAAG,IAV2B,IAAI;EAAC;EAAU;EAAW;EAAU;EAAU;CAAU,CAUjE;AACvB,CAAC;AACD,MAAM,iDAAiC,IAAI,IAAI;CAC7C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,SAAS,eAAe,QAAuE;CAC7F,IAAI,CAAC,QACH;CAEF,OAAO,EACL,GAAG,OACL;AACF;AAEA,SAAgB,SAAS,OAAkD;CACzE,OAAO,OAAO,UAAU,YAAY,UAAU;AAChD;AAEA,SAAS,gBAAgB,OAAwC;CAC/D,OAAO,OAAO,UAAU;AAC1B;AAEA,SAAS,mBACP,QACA,UACA;CACA,MAAM,UAAyC,CAAC;CAChD,MAAM,gBAAgB,SAAS,QAAQ,OAAO,IAAI,QAAQ,UAAU;CAEpE,IAAI,eACF;OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,aAAa,GACrD,IAAI,gBAAgB,KAAK,GACvB,QAAQ,OAAO;CAEnB;CAGF,IAAI,QACF,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,MAAM,GAAG;EACjD,IAAI,SAAS,IAAI,GAAG,GAClB;EAEF,IAAI,gBAAgB,KAAK,KAAK,QAAQ,SAAS,QAC7C,QAAQ,OAAO;CAEnB;CAEF,OAAO;AACT;AAEA,SAAgB,qBAAqB,KAAoF;CACvH,MAAM,YAAY,EAAE,GAAI,OAAO,CAAC,EAAG;CACnC,UAAU,UAAU,mBAAmB,KAA4C,yBAAyB;CAC5G,IAAI,KAAK,WACP,UAAU,YAAY,eAAe,IAAI,SAAS;CAEpD,MAAM,QAAmB,CAAC;CAC1B,IAAI,OAAO,KAAK,WAAW,YACzB,MAAM,SAAS,IAAI;CAErB,IAAI,OAAO,KAAK,YAAY,YAC1B,MAAM,UAAU,IAAI;CAEtB,IAAI,OAAO,KAAK,WAAW,YACzB,MAAM,SAAS,IAAI;CAErB,IAAI,OAAO,KAAK,WAAW,YACzB,MAAM,SAAS,IAAI;CAErB,IAAI,OAAO,KAAK,aAAa,YAC3B,MAAM,WAAW,IAAI;CAEvB,OAAO;EAAE;EAAW;CAAM;AAC5B;AAEA,SAAgB,0BAA0B,KAAwD;CAChG,MAAM,YAAY,EAAE,GAAI,OAAO,CAAC,EAAG;CACnC,UAAU,UAAU,mBAAmB,KAA4C,8BAA8B;CACjH,IAAI,KAAK,WACP,UAAU,YAAY,eAAe,IAAI,SAAS;CAEpD,OAAO;AACT"}
1
+ {"version":3,"file":"options.mjs","names":[],"sources":["../../../../src/runtime/polyfill/routeRuntime/options.ts"],"sourcesContent":["import type { NavigationBarConfig } from '../../../compiler/wxml'\nimport type { ComponentOptions, ComponentPublicInstance } from '../../component'\nimport type { TemplateRenderer } from '../../template'\nimport type { MiniProgramAsyncOptions, MiniProgramBaseResult } from '../types'\n\nexport interface RegisterMeta {\n id: string\n template?: TemplateRenderer\n style?: string\n navigationBar?: NavigationBarConfig\n}\n\nexport interface PageHooks {\n onLoad?: (this: ComponentPublicInstance, query: Record<string, string>) => void\n onReady?: (this: ComponentPublicInstance) => void\n onShow?: (this: ComponentPublicInstance) => void\n onHide?: (this: ComponentPublicInstance) => void\n onUnload?: (this: ComponentPublicInstance) => void\n}\n\nexport interface PageRecord {\n tag: string\n hooks: PageHooks\n instances: Set<ComponentPublicInstance>\n navigationBar?: NavigationBarConfig\n}\n\nexport interface ComponentRecord {\n tag: string\n}\n\nexport interface PageStackEntry {\n id: string\n query: Record<string, string>\n active: boolean\n element?: HTMLElement & ComponentPublicInstance\n instance?: ComponentPublicInstance\n scrollTop?: number\n}\n\nexport interface RouteMeta {\n id: string\n query: Record<string, string>\n entry: PageStackEntry\n}\n\ninterface AppLifecycleHooks {\n onLaunch?: (this: AppRuntime, options: AppLaunchOptions) => void\n onShow?: (this: AppRuntime, options: AppLaunchOptions) => void\n onHide?: (this: AppRuntime) => void\n}\n\nexport type AppRuntime = Record<string, unknown> & Partial<AppLifecycleHooks> & {\n globalData?: Record<string, unknown>\n}\n\nexport interface AppLaunchOptions {\n path: string\n scene: number\n query: Record<string, string>\n referrerInfo: Record<string, unknown>\n}\n\nexport interface RouteOptions extends MiniProgramAsyncOptions<MiniProgramBaseResult> {\n url: string\n}\n\nexport interface NavigateBackOptions extends MiniProgramAsyncOptions<MiniProgramBaseResult> {\n delta?: number\n}\n\ntype MethodHandler = (this: ComponentPublicInstance, ...args: unknown[]) => unknown\n\nexport type PageRawOptions = ComponentOptions & PageHooks & Record<string, unknown>\nexport type ComponentRawOptions = ComponentOptions & Record<string, unknown>\n\nconst PAGE_LIFECYCLE_KEYS = new Set(['onLoad', 'onReady', 'onShow', 'onHide', 'onUnload'])\nconst RESERVED_PAGE_METHOD_KEYS = new Set([\n 'data',\n 'methods',\n 'lifetimes',\n 'properties',\n 'behaviors',\n 'options',\n 'observers',\n 'mixins',\n ...PAGE_LIFECYCLE_KEYS,\n])\nconst RESERVED_COMPONENT_METHOD_KEYS = new Set([\n 'data',\n 'methods',\n 'lifetimes',\n 'pageLifetimes',\n 'properties',\n 'behaviors',\n 'options',\n 'observers',\n 'mixins',\n])\n\nfunction cloneLifetimes(source: NonNullable<ComponentOptions['lifetimes']>): ComponentOptions['lifetimes'] {\n return {\n ...source,\n }\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null\n}\n\nfunction isMethodHandler(value: unknown): value is MethodHandler {\n return typeof value === 'function'\n}\n\nfunction normalizeMethodBag(\n source: Record<string, unknown> | undefined,\n reserved: Set<string>,\n) {\n const methods: Record<string, MethodHandler> = {}\n const sourceMethods = isRecord(source?.methods) ? source?.methods : undefined\n\n if (sourceMethods) {\n for (const [key, value] of Object.entries(sourceMethods)) {\n if (isMethodHandler(value)) {\n methods[key] = value\n }\n }\n }\n\n if (source) {\n for (const [key, value] of Object.entries(source)) {\n if (reserved.has(key)) {\n continue\n }\n if (isMethodHandler(value) && methods[key] === undefined) {\n methods[key] = value\n }\n }\n }\n return methods\n}\n\nexport function normalizePageOptions(raw: PageRawOptions | undefined): { component: ComponentOptions, hooks: PageHooks } {\n const component = { ...(raw ?? {}) } as ComponentOptions\n component.methods = normalizeMethodBag(raw as Record<string, unknown> | undefined, RESERVED_PAGE_METHOD_KEYS) as ComponentOptions['methods']\n if (raw?.lifetimes) {\n component.lifetimes = cloneLifetimes(raw.lifetimes)\n }\n const hooks: PageHooks = {}\n if (typeof raw?.onLoad === 'function') {\n hooks.onLoad = raw.onLoad as PageHooks['onLoad']\n }\n if (typeof raw?.onReady === 'function') {\n hooks.onReady = raw.onReady as PageHooks['onReady']\n }\n if (typeof raw?.onShow === 'function') {\n hooks.onShow = raw.onShow as PageHooks['onShow']\n }\n if (typeof raw?.onHide === 'function') {\n hooks.onHide = raw.onHide as PageHooks['onHide']\n }\n if (typeof raw?.onUnload === 'function') {\n hooks.onUnload = raw.onUnload as PageHooks['onUnload']\n }\n return { component, hooks }\n}\n\nexport function normalizeComponentOptions(raw: ComponentRawOptions | undefined): ComponentOptions {\n const component = { ...(raw ?? {}) } as ComponentOptions\n component.methods = normalizeMethodBag(raw as Record<string, unknown> | undefined, RESERVED_COMPONENT_METHOD_KEYS) as ComponentOptions['methods']\n if (raw?.lifetimes) {\n component.lifetimes = cloneLifetimes(raw.lifetimes)\n }\n return component\n}\n"],"mappings":";AA6EA,MAAM,4CAA4B,IAAI,IAAI;CACxC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,mBAAG,IAV2B,IAAI;EAAC;EAAU;EAAW;EAAU;EAAU;CAAU,CAUjE;AACvB,CAAC;AACD,MAAM,iDAAiC,IAAI,IAAI;CAC7C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,SAAS,eAAe,QAAmF;CACzG,OAAO,EACL,GAAG,OACL;AACF;AAEA,SAAgB,SAAS,OAAkD;CACzE,OAAO,OAAO,UAAU,YAAY,UAAU;AAChD;AAEA,SAAS,gBAAgB,OAAwC;CAC/D,OAAO,OAAO,UAAU;AAC1B;AAEA,SAAS,mBACP,QACA,UACA;CACA,MAAM,UAAyC,CAAC;CAChD,MAAM,gBAAgB,SAAS,QAAQ,OAAO,IAAI,QAAQ,UAAU;CAEpE,IAAI,eACF;OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,aAAa,GACrD,IAAI,gBAAgB,KAAK,GACvB,QAAQ,OAAO;CAEnB;CAGF,IAAI,QACF,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,MAAM,GAAG;EACjD,IAAI,SAAS,IAAI,GAAG,GAClB;EAEF,IAAI,gBAAgB,KAAK,KAAK,QAAQ,SAAS,QAC7C,QAAQ,OAAO;CAEnB;CAEF,OAAO;AACT;AAEA,SAAgB,qBAAqB,KAAoF;CACvH,MAAM,YAAY,EAAE,GAAI,OAAO,CAAC,EAAG;CACnC,UAAU,UAAU,mBAAmB,KAA4C,yBAAyB;CAC5G,IAAI,KAAK,WACP,UAAU,YAAY,eAAe,IAAI,SAAS;CAEpD,MAAM,QAAmB,CAAC;CAC1B,IAAI,OAAO,KAAK,WAAW,YACzB,MAAM,SAAS,IAAI;CAErB,IAAI,OAAO,KAAK,YAAY,YAC1B,MAAM,UAAU,IAAI;CAEtB,IAAI,OAAO,KAAK,WAAW,YACzB,MAAM,SAAS,IAAI;CAErB,IAAI,OAAO,KAAK,WAAW,YACzB,MAAM,SAAS,IAAI;CAErB,IAAI,OAAO,KAAK,aAAa,YAC3B,MAAM,WAAW,IAAI;CAEvB,OAAO;EAAE;EAAW;CAAM;AAC5B;AAEA,SAAgB,0BAA0B,KAAwD;CAChG,MAAM,YAAY,EAAE,GAAI,OAAO,CAAC,EAAG;CACnC,UAAU,UAAU,mBAAmB,KAA4C,8BAA8B;CACjH,IAAI,KAAK,WACP,UAAU,YAAY,eAAe,IAAI,SAAS;CAEpD,OAAO;AACT"}
@@ -0,0 +1,12 @@
1
+ import { callMiniProgramAsyncFailure, callMiniProgramAsyncSuccess } from "../async.mjs";
2
+
3
+ //#region src/runtime/polyfill/routeRuntime/result.ts
4
+ function resolveRouteAction(action, options, succeeded, failureReason = "page not found") {
5
+ if (succeeded) return Promise.resolve(callMiniProgramAsyncSuccess(options, { errMsg: `${action}:ok` }));
6
+ const failure = callMiniProgramAsyncFailure(options, `${action}:fail ${failureReason}`);
7
+ return Promise.reject(failure);
8
+ }
9
+
10
+ //#endregion
11
+ export { resolveRouteAction };
12
+ //# sourceMappingURL=result.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.mjs","names":[],"sources":["../../../../src/runtime/polyfill/routeRuntime/result.ts"],"sourcesContent":["import type { MiniProgramAsyncOptions, MiniProgramBaseResult } from '../types'\nimport {\n callMiniProgramAsyncFailure,\n callMiniProgramAsyncSuccess,\n} from '../async'\n\nexport function resolveRouteAction(\n action: string,\n options: MiniProgramAsyncOptions<MiniProgramBaseResult> | undefined,\n succeeded: boolean,\n failureReason = 'page not found',\n) {\n if (succeeded) {\n return Promise.resolve(callMiniProgramAsyncSuccess(options, {\n errMsg: `${action}:ok`,\n }))\n }\n const failure = callMiniProgramAsyncFailure(options, `${action}:fail ${failureReason}`)\n return Promise.reject(failure)\n}\n"],"mappings":";;;AAMA,SAAgB,mBACd,QACA,SACA,WACA,gBAAgB,kBAChB;CACA,IAAI,WACF,OAAO,QAAQ,QAAQ,4BAA4B,SAAS,EAC1D,QAAQ,GAAG,OAAO,KACpB,CAAC,CAAC;CAEJ,MAAM,UAAU,4BAA4B,SAAS,GAAG,OAAO,QAAQ,eAAe;CACtF,OAAO,QAAQ,OAAO,OAAO;AAC/B"}
@@ -0,0 +1,39 @@
1
+ import { getAppContainer } from "../../appShell/container.mjs";
2
+
3
+ //#region src/runtime/polyfill/routeRuntime/scroll.ts
4
+ let activeEntry;
5
+ let boundContainer;
6
+ let scrollHandler;
7
+ function getPageContainer() {
8
+ return getAppContainer();
9
+ }
10
+ function captureEntryScrollPosition(entry) {
11
+ if (!entry.active) return;
12
+ const container = getPageContainer();
13
+ if (container) entry.scrollTop = container.scrollTop;
14
+ }
15
+ function restoreEntryScrollPosition(entry) {
16
+ const container = getPageContainer();
17
+ if (container) container.scrollTop = entry.scrollTop ?? 0;
18
+ }
19
+ function setEntryScrollOwner(entry, active) {
20
+ if (active) {
21
+ activeEntry = entry;
22
+ return;
23
+ }
24
+ if (activeEntry === entry) activeEntry = void 0;
25
+ }
26
+ function recordActiveEntryScrollPosition() {
27
+ if (activeEntry) captureEntryScrollPosition(activeEntry);
28
+ }
29
+ function bindPageScrollOwner(container) {
30
+ if (boundContainer === container) return;
31
+ if (boundContainer && scrollHandler) boundContainer.removeEventListener("scroll", scrollHandler);
32
+ boundContainer = container;
33
+ scrollHandler = recordActiveEntryScrollPosition;
34
+ container.addEventListener("scroll", scrollHandler, { passive: true });
35
+ }
36
+
37
+ //#endregion
38
+ export { bindPageScrollOwner, captureEntryScrollPosition, getPageContainer, recordActiveEntryScrollPosition, restoreEntryScrollPosition, setEntryScrollOwner };
39
+ //# sourceMappingURL=scroll.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll.mjs","names":[],"sources":["../../../../src/runtime/polyfill/routeRuntime/scroll.ts"],"sourcesContent":["import type { PageStackEntry } from './options'\nimport { getAppContainer } from '../../appShell/container'\n\ntype ScrollContainer = HTMLElement & Pick<EventTarget, 'addEventListener' | 'removeEventListener'>\n\nlet activeEntry: PageStackEntry | undefined\nlet boundContainer: ScrollContainer | undefined\nlet scrollHandler: (() => void) | undefined\n\nexport function getPageContainer() {\n return getAppContainer()\n}\n\nexport function captureEntryScrollPosition(entry: PageStackEntry) {\n if (!entry.active) {\n return\n }\n const container = getPageContainer()\n if (container) {\n entry.scrollTop = container.scrollTop\n }\n}\n\nexport function restoreEntryScrollPosition(entry: PageStackEntry) {\n const container = getPageContainer()\n if (container) {\n container.scrollTop = entry.scrollTop ?? 0\n }\n}\n\nexport function setEntryScrollOwner(entry: PageStackEntry, active: boolean) {\n if (active) {\n activeEntry = entry\n return\n }\n if (activeEntry === entry) {\n activeEntry = undefined\n }\n}\n\nexport function recordActiveEntryScrollPosition() {\n if (activeEntry) {\n captureEntryScrollPosition(activeEntry)\n }\n}\n\nexport function bindPageScrollOwner(container: ScrollContainer) {\n if (boundContainer === container) {\n return\n }\n if (boundContainer && scrollHandler) {\n boundContainer.removeEventListener('scroll', scrollHandler)\n }\n boundContainer = container\n scrollHandler = recordActiveEntryScrollPosition\n container.addEventListener('scroll', scrollHandler, { passive: true })\n}\n\nexport function disposePageScrollOwner() {\n if (boundContainer && scrollHandler) {\n boundContainer.removeEventListener('scroll', scrollHandler)\n }\n activeEntry = undefined\n boundContainer = undefined\n scrollHandler = undefined\n}\n"],"mappings":";;;AAKA,IAAI;AACJ,IAAI;AACJ,IAAI;AAEJ,SAAgB,mBAAmB;CACjC,OAAO,gBAAgB;AACzB;AAEA,SAAgB,2BAA2B,OAAuB;CAChE,IAAI,CAAC,MAAM,QACT;CAEF,MAAM,YAAY,iBAAiB;CACnC,IAAI,WACF,MAAM,YAAY,UAAU;AAEhC;AAEA,SAAgB,2BAA2B,OAAuB;CAChE,MAAM,YAAY,iBAAiB;CACnC,IAAI,WACF,UAAU,YAAY,MAAM,aAAa;AAE7C;AAEA,SAAgB,oBAAoB,OAAuB,QAAiB;CAC1E,IAAI,QAAQ;EACV,cAAc;EACd;CACF;CACA,IAAI,gBAAgB,OAClB,cAAc;AAElB;AAEA,SAAgB,kCAAkC;CAChD,IAAI,aACF,2BAA2B,WAAW;AAE1C;AAEA,SAAgB,oBAAoB,WAA4B;CAC9D,IAAI,mBAAmB,WACrB;CAEF,IAAI,kBAAkB,eACpB,eAAe,oBAAoB,UAAU,aAAa;CAE5D,iBAAiB;CACjB,gBAAgB;CAChB,UAAU,iBAAiB,UAAU,eAAe,EAAE,SAAS,KAAK,CAAC;AACvE"}