wevu 7.2.2 → 7.3.0

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 (348) hide show
  1. package/README.md +6 -0
  2. package/dist/dev/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/defineProperty.mjs +1 -1
  3. package/dist/dev/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/toPrimitive.mjs +1 -1
  4. package/dist/dev/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/toPropertyKey.mjs +1 -1
  5. package/dist/dev/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/typeof.mjs +1 -1
  6. package/dist/dev/internal-runtime.d.mts +2 -1
  7. package/dist/dev/internal-runtime.mjs +3 -2
  8. package/dist/dev/package.mjs +1 -1
  9. package/dist/dev/reactivity/asyncDerivation.mjs +8 -10
  10. package/dist/dev/reactivity/asyncDerivation.mjs.map +1 -1
  11. package/dist/dev/reactivity/core.mjs +5 -8
  12. package/dist/dev/reactivity/core.mjs.map +1 -1
  13. package/dist/dev/reactivity/reactive/patch.mjs +3 -3
  14. package/dist/dev/reactivity/reactive/patch.mjs.map +1 -1
  15. package/dist/dev/reactivity/reactive/patchState.mjs +4 -8
  16. package/dist/dev/reactivity/reactive/patchState.mjs.map +1 -1
  17. package/dist/dev/reactivity/reactive/shared.mjs +1 -2
  18. package/dist/dev/reactivity/reactive/shared.mjs.map +1 -1
  19. package/dist/dev/reactivity/reactive.mjs +5 -10
  20. package/dist/dev/reactivity/reactive.mjs.map +1 -1
  21. package/dist/dev/reactivity/ref.mjs +2 -2
  22. package/dist/dev/reactivity/ref.mjs.map +1 -1
  23. package/dist/dev/reactivity/shallowRef.mjs +1 -1
  24. package/dist/dev/reactivity/shallowRef.mjs.map +1 -1
  25. package/dist/dev/reactivity/watch/helpers.mjs +1 -1
  26. package/dist/dev/reactivity/watch/helpers.mjs.map +1 -1
  27. package/dist/dev/reactivity/watch.mjs +6 -8
  28. package/dist/dev/reactivity/watch.mjs.map +1 -1
  29. package/dist/dev/router/createRouter.mjs +17 -24
  30. package/dist/dev/router/createRouter.mjs.map +1 -1
  31. package/dist/dev/router/initialNavigation.mjs +18 -16
  32. package/dist/dev/router/initialNavigation.mjs.map +1 -1
  33. package/dist/dev/router/instance.mjs +1 -2
  34. package/dist/dev/router/instance.mjs.map +1 -1
  35. package/dist/dev/router/navigationCore.mjs +2 -2
  36. package/dist/dev/router/navigationCore.mjs.map +1 -1
  37. package/dist/dev/router/navigationResult.mjs +7 -10
  38. package/dist/dev/router/navigationResult.mjs.map +1 -1
  39. package/dist/dev/router/navigationTarget.mjs +1 -3
  40. package/dist/dev/router/navigationTarget.mjs.map +1 -1
  41. package/dist/dev/router/resolve.mjs +3 -4
  42. package/dist/dev/router/resolve.mjs.map +1 -1
  43. package/dist/dev/router/routeRegistry.mjs +1 -1
  44. package/dist/dev/router/routeRegistry.mjs.map +1 -1
  45. package/dist/dev/router/routeSync.mjs +1 -1
  46. package/dist/dev/router/routeSync.mjs.map +1 -1
  47. package/dist/dev/router/useRoute.mjs +12 -19
  48. package/dist/dev/router/useRoute.mjs.map +1 -1
  49. package/dist/dev/routerInternal/location.mjs +2 -3
  50. package/dist/dev/routerInternal/location.mjs.map +1 -1
  51. package/dist/dev/routerInternal/params.mjs +2 -3
  52. package/dist/dev/routerInternal/params.mjs.map +1 -1
  53. package/dist/dev/routerInternal/records.mjs +1 -1
  54. package/dist/dev/routerInternal/records.mjs.map +1 -1
  55. package/dist/dev/routerInternal/recordsWarnings.mjs +1 -2
  56. package/dist/dev/routerInternal/recordsWarnings.mjs.map +1 -1
  57. package/dist/dev/runtime/app/context.mjs +13 -26
  58. package/dist/dev/runtime/app/context.mjs.map +1 -1
  59. package/dist/dev/runtime/app/diagnostics.mjs +2 -4
  60. package/dist/dev/runtime/app/diagnostics.mjs.map +1 -1
  61. package/dist/dev/runtime/app/mount.mjs +27 -33
  62. package/dist/dev/runtime/app/mount.mjs.map +1 -1
  63. package/dist/dev/runtime/app/setData/commitTracker.mjs +5 -9
  64. package/dist/dev/runtime/app/setData/commitTracker.mjs.map +1 -1
  65. package/dist/dev/runtime/app/setData/patchScheduler.mjs +2 -4
  66. package/dist/dev/runtime/app/setData/patchScheduler.mjs.map +1 -1
  67. package/dist/dev/runtime/app/setData/payload.mjs +2 -3
  68. package/dist/dev/runtime/app/setData/payload.mjs.map +1 -1
  69. package/dist/dev/runtime/app/setData/scheduler.mjs +7 -9
  70. package/dist/dev/runtime/app/setData/scheduler.mjs.map +1 -1
  71. package/dist/dev/runtime/app/setData/snapshot.mjs +5 -6
  72. package/dist/dev/runtime/app/setData/snapshot.mjs.map +1 -1
  73. package/dist/dev/runtime/app/setDataOptions.mjs +26 -27
  74. package/dist/dev/runtime/app/setDataOptions.mjs.map +1 -1
  75. package/dist/dev/runtime/app.mjs +9 -9
  76. package/dist/dev/runtime/app.mjs.map +1 -1
  77. package/dist/dev/runtime/bindingManifest.mjs +6 -14
  78. package/dist/dev/runtime/bindingManifest.mjs.map +1 -1
  79. package/dist/dev/runtime/capabilities.d.mts +4 -1
  80. package/dist/dev/runtime/capabilities.mjs.map +1 -1
  81. package/dist/dev/runtime/css.mjs +4 -8
  82. package/dist/dev/runtime/css.mjs.map +1 -1
  83. package/dist/dev/runtime/defaults.mjs +4 -4
  84. package/dist/dev/runtime/defaults.mjs.map +1 -1
  85. package/dist/dev/runtime/define/initialComputed.mjs +5 -5
  86. package/dist/dev/runtime/define/initialComputed.mjs.map +1 -1
  87. package/dist/dev/runtime/define/options.mjs +10 -12
  88. package/dist/dev/runtime/define/options.mjs.map +1 -1
  89. package/dist/dev/runtime/define/props.mjs +4 -5
  90. package/dist/dev/runtime/define/props.mjs.map +1 -1
  91. package/dist/dev/runtime/define/scopedSlotOptions.mjs +43 -61
  92. package/dist/dev/runtime/define/scopedSlotOptions.mjs.map +1 -1
  93. package/dist/dev/runtime/define/setupResult.mjs +17 -28
  94. package/dist/dev/runtime/define/setupResult.mjs.map +1 -1
  95. package/dist/dev/runtime/define.mjs +9 -12
  96. package/dist/dev/runtime/define.mjs.map +1 -1
  97. package/dist/dev/runtime/diff.mjs +9 -11
  98. package/dist/dev/runtime/diff.mjs.map +1 -1
  99. package/dist/dev/runtime/disposables.mjs +2 -2
  100. package/dist/dev/runtime/disposables.mjs.map +1 -1
  101. package/dist/dev/runtime/elementIntersectionObserver.mjs +16 -24
  102. package/dist/dev/runtime/elementIntersectionObserver.mjs.map +1 -1
  103. package/dist/dev/runtime/features/inlineEvents.mjs +2 -3
  104. package/dist/dev/runtime/features/inlineEvents.mjs.map +1 -1
  105. package/dist/dev/runtime/features/jsxIslands.d.mts +7 -0
  106. package/dist/dev/runtime/features/jsxIslands.mjs +20 -0
  107. package/dist/dev/runtime/features/jsxIslands.mjs.map +1 -0
  108. package/dist/dev/runtime/features/layout.mjs +2 -3
  109. package/dist/dev/runtime/features/layout.mjs.map +1 -1
  110. package/dist/dev/runtime/features/publicLayout.mjs +2 -6
  111. package/dist/dev/runtime/features/publicLayout.mjs.map +1 -1
  112. package/dist/dev/runtime/features/scopedSlots.mjs +5 -9
  113. package/dist/dev/runtime/features/scopedSlots.mjs.map +1 -1
  114. package/dist/dev/runtime/features/templateRefs.mjs +1 -1
  115. package/dist/dev/runtime/features/templateRefs.mjs.map +1 -1
  116. package/dist/dev/runtime/hooks/base.mjs +21 -32
  117. package/dist/dev/runtime/hooks/base.mjs.map +1 -1
  118. package/dist/dev/runtime/inlineDataset.mjs +1 -2
  119. package/dist/dev/runtime/inlineDataset.mjs.map +1 -1
  120. package/dist/dev/runtime/intersectionObserver.mjs +6 -6
  121. package/dist/dev/runtime/intersectionObserver.mjs.map +1 -1
  122. package/dist/dev/runtime/jsxIsland.mjs +16 -33
  123. package/dist/dev/runtime/jsxIsland.mjs.map +1 -1
  124. package/dist/dev/runtime/layoutBridge.mjs +32 -62
  125. package/dist/dev/runtime/layoutBridge.mjs.map +1 -1
  126. package/dist/dev/runtime/nativeBridge.mjs +1 -1
  127. package/dist/dev/runtime/nativeBridge.mjs.map +1 -1
  128. package/dist/dev/runtime/navigationLifecycle.mjs +24 -0
  129. package/dist/dev/runtime/navigationLifecycle.mjs.map +1 -0
  130. package/dist/dev/runtime/pageEnvironment.mjs +15 -18
  131. package/dist/dev/runtime/pageEnvironment.mjs.map +1 -1
  132. package/dist/dev/runtime/pageLayout.mjs +7 -11
  133. package/dist/dev/runtime/pageLayout.mjs.map +1 -1
  134. package/dist/dev/runtime/pageScroll.mjs +2 -3
  135. package/dist/dev/runtime/pageScroll.mjs.map +1 -1
  136. package/dist/dev/runtime/platform/current.mjs +12 -0
  137. package/dist/dev/runtime/platform/current.mjs.map +1 -0
  138. package/dist/dev/runtime/platform/generic.mjs +36 -0
  139. package/dist/dev/runtime/platform/generic.mjs.map +1 -0
  140. package/dist/dev/runtime/platform/globals.mjs +29 -0
  141. package/dist/dev/runtime/platform/globals.mjs.map +1 -0
  142. package/dist/dev/runtime/platform.mjs +15 -60
  143. package/dist/dev/runtime/platform.mjs.map +1 -1
  144. package/dist/dev/runtime/provideContext.mjs +7 -9
  145. package/dist/dev/runtime/provideContext.mjs.map +1 -1
  146. package/dist/dev/runtime/publicRuntime.mjs +4 -0
  147. package/dist/dev/runtime/publicRuntime.mjs.map +1 -1
  148. package/dist/dev/runtime/pullDownRefresh.mjs +2 -4
  149. package/dist/dev/runtime/pullDownRefresh.mjs.map +1 -1
  150. package/dist/dev/runtime/register/app.mjs +18 -19
  151. package/dist/dev/runtime/register/app.mjs.map +1 -1
  152. package/dist/dev/runtime/register/component/alipay.mjs +9 -18
  153. package/dist/dev/runtime/register/component/alipay.mjs.map +1 -1
  154. package/dist/dev/runtime/register/component/alipayRegistration.mjs +60 -0
  155. package/dist/dev/runtime/register/component/alipayRegistration.mjs.map +1 -0
  156. package/dist/dev/runtime/register/component/lifecycle/platform.mjs +8 -9
  157. package/dist/dev/runtime/register/component/lifecycle/platform.mjs.map +1 -1
  158. package/dist/dev/runtime/register/component/lifecycle.mjs +7 -12
  159. package/dist/dev/runtime/register/component/lifecycle.mjs.map +1 -1
  160. package/dist/dev/runtime/register/component/methods.mjs +13 -18
  161. package/dist/dev/runtime/register/component/methods.mjs.map +1 -1
  162. package/dist/dev/runtime/register/component/options.mjs +3 -4
  163. package/dist/dev/runtime/register/component/options.mjs.map +1 -1
  164. package/dist/dev/runtime/register/component/props.mjs +25 -31
  165. package/dist/dev/runtime/register/component/props.mjs.map +1 -1
  166. package/dist/dev/runtime/register/component/registerDefinition.mjs +18 -40
  167. package/dist/dev/runtime/register/component/registerDefinition.mjs.map +1 -1
  168. package/dist/dev/runtime/register/component/registerNativeDefinition.mjs +18 -60
  169. package/dist/dev/runtime/register/component/registerNativeDefinition.mjs.map +1 -1
  170. package/dist/dev/runtime/register/component.mjs +3 -5
  171. package/dist/dev/runtime/register/component.mjs.map +1 -1
  172. package/dist/dev/runtime/register/inline.mjs +8 -10
  173. package/dist/dev/runtime/register/inline.mjs.map +1 -1
  174. package/dist/dev/runtime/register/runtimeInstance/methodBridge.mjs +7 -8
  175. package/dist/dev/runtime/register/runtimeInstance/methodBridge.mjs.map +1 -1
  176. package/dist/dev/runtime/register/runtimeInstance/provideContext.mjs +1 -1
  177. package/dist/dev/runtime/register/runtimeInstance/provideContext.mjs.map +1 -1
  178. package/dist/dev/runtime/register/runtimeInstance/setupContext.mjs +25 -34
  179. package/dist/dev/runtime/register/runtimeInstance/setupContext.mjs.map +1 -1
  180. package/dist/dev/runtime/register/runtimeInstance/setupPhase.mjs +6 -13
  181. package/dist/dev/runtime/register/runtimeInstance/setupPhase.mjs.map +1 -1
  182. package/dist/dev/runtime/register/runtimeInstance/setupSnapshot.mjs +2 -2
  183. package/dist/dev/runtime/register/runtimeInstance/setupSnapshot.mjs.map +1 -1
  184. package/dist/dev/runtime/register/runtimeInstance/utils.mjs +9 -9
  185. package/dist/dev/runtime/register/runtimeInstance/utils.mjs.map +1 -1
  186. package/dist/dev/runtime/register/runtimeInstance.mjs +74 -100
  187. package/dist/dev/runtime/register/runtimeInstance.mjs.map +1 -1
  188. package/dist/dev/runtime/register/setDataFrequencyWarning.mjs +12 -15
  189. package/dist/dev/runtime/register/setDataFrequencyWarning.mjs.map +1 -1
  190. package/dist/dev/runtime/register/setup.mjs +2 -3
  191. package/dist/dev/runtime/register/setup.mjs.map +1 -1
  192. package/dist/dev/runtime/register/snapshot.mjs +1 -4
  193. package/dist/dev/runtime/register/snapshot.mjs.map +1 -1
  194. package/dist/dev/runtime/register/watch.mjs +3 -5
  195. package/dist/dev/runtime/register/watch.mjs.map +1 -1
  196. package/dist/dev/runtime/scopedSlots.mjs +14 -21
  197. package/dist/dev/runtime/scopedSlots.mjs.map +1 -1
  198. package/dist/dev/runtime/selectorQuery.mjs +5 -9
  199. package/dist/dev/runtime/selectorQuery.mjs.map +1 -1
  200. package/dist/dev/runtime/template.mjs +1 -1
  201. package/dist/dev/runtime/template.mjs.map +1 -1
  202. package/dist/dev/runtime/templateRefs/helpers.mjs +14 -24
  203. package/dist/dev/runtime/templateRefs/helpers.mjs.map +1 -1
  204. package/dist/dev/runtime/templateRefs.mjs +8 -15
  205. package/dist/dev/runtime/templateRefs.mjs.map +1 -1
  206. package/dist/dev/runtime/uniAppHost.mjs +6 -14
  207. package/dist/dev/runtime/uniAppHost.mjs.map +1 -1
  208. package/dist/dev/runtime/updatePerformance.mjs +1 -1
  209. package/dist/dev/runtime/updatePerformance.mjs.map +1 -1
  210. package/dist/dev/runtime/use.mjs +1 -1
  211. package/dist/dev/runtime/use.mjs.map +1 -1
  212. package/dist/dev/runtime/vueCompat/context.mjs +3 -5
  213. package/dist/dev/runtime/vueCompat/context.mjs.map +1 -1
  214. package/dist/dev/runtime/vueCompat/model.mjs +9 -13
  215. package/dist/dev/runtime/vueCompat/model.mjs.map +1 -1
  216. package/dist/dev/runtime/vueCompat/router.mjs +4 -4
  217. package/dist/dev/runtime/vueCompat/router.mjs.map +1 -1
  218. package/dist/dev/runtime/vueCompat/templateRef.mjs +1 -1
  219. package/dist/dev/runtime/vueCompat/templateRef.mjs.map +1 -1
  220. package/dist/dev/scheduler.mjs +3 -4
  221. package/dist/dev/scheduler.mjs.map +1 -1
  222. package/dist/dev/store/base.mjs +1 -2
  223. package/dist/dev/store/base.mjs.map +1 -1
  224. package/dist/dev/store/define/create.mjs +11 -22
  225. package/dist/dev/store/define/create.mjs.map +1 -1
  226. package/dist/dev/store/define.mjs +1 -1
  227. package/dist/dev/store/define.mjs.map +1 -1
  228. package/dist/dev/store/view.mjs +1 -1
  229. package/dist/dev/store/view.mjs.map +1 -1
  230. package/dist/internal-runtime.d.mts +2 -1
  231. package/dist/internal-runtime.mjs +1 -1
  232. package/dist/package.mjs +1 -1
  233. package/dist/reactivity/asyncDerivation.mjs +1 -1
  234. package/dist/reactivity/core.mjs +1 -1
  235. package/dist/reactivity/reactive/patch.mjs +1 -1
  236. package/dist/reactivity/reactive/patchState.mjs +1 -1
  237. package/dist/reactivity/reactive/shared.mjs +1 -1
  238. package/dist/reactivity/reactive.mjs +1 -1
  239. package/dist/reactivity/ref.mjs +1 -1
  240. package/dist/reactivity/shallowRef.mjs +1 -1
  241. package/dist/reactivity/watch/helpers.mjs +1 -1
  242. package/dist/reactivity/watch.mjs +1 -1
  243. package/dist/router/createRouter.mjs +1 -1
  244. package/dist/router/initialNavigation.mjs +1 -1
  245. package/dist/router/instance.mjs +1 -1
  246. package/dist/router/navigationCore.mjs +1 -1
  247. package/dist/router/navigationResult.mjs +1 -1
  248. package/dist/router/navigationTarget.mjs +1 -1
  249. package/dist/router/resolve.mjs +1 -1
  250. package/dist/router/routeRegistry.mjs +1 -1
  251. package/dist/router/routeSync.mjs +1 -1
  252. package/dist/router/useRoute.mjs +1 -1
  253. package/dist/routerInternal/location.mjs +1 -1
  254. package/dist/routerInternal/params.mjs +1 -1
  255. package/dist/routerInternal/records.mjs +1 -1
  256. package/dist/routerInternal/recordsWarnings.mjs +1 -1
  257. package/dist/runtime/app/context.mjs +1 -1
  258. package/dist/runtime/app/diagnostics.mjs +1 -1
  259. package/dist/runtime/app/mount.mjs +1 -1
  260. package/dist/runtime/app/setData/commitTracker.mjs +1 -1
  261. package/dist/runtime/app/setData/patchScheduler.mjs +1 -1
  262. package/dist/runtime/app/setData/payload.mjs +1 -1
  263. package/dist/runtime/app/setData/scheduler.mjs +1 -1
  264. package/dist/runtime/app/setData/snapshot.mjs +1 -1
  265. package/dist/runtime/app/setDataOptions.mjs +1 -1
  266. package/dist/runtime/app.mjs +1 -1
  267. package/dist/runtime/bindingManifest.mjs +1 -1
  268. package/dist/runtime/capabilities.d.mts +4 -1
  269. package/dist/runtime/css.mjs +1 -1
  270. package/dist/runtime/defaults.mjs +1 -1
  271. package/dist/runtime/define/initialComputed.mjs +1 -1
  272. package/dist/runtime/define/options.mjs +1 -1
  273. package/dist/runtime/define/props.mjs +1 -1
  274. package/dist/runtime/define/scopedSlotOptions.mjs +1 -1
  275. package/dist/runtime/define/setupResult.mjs +1 -1
  276. package/dist/runtime/define.mjs +1 -1
  277. package/dist/runtime/diff.mjs +1 -1
  278. package/dist/runtime/disposables.mjs +1 -1
  279. package/dist/runtime/elementIntersectionObserver.mjs +1 -1
  280. package/dist/runtime/features/inlineEvents.mjs +1 -1
  281. package/dist/runtime/features/jsxIslands.d.mts +6 -0
  282. package/dist/runtime/features/jsxIslands.mjs +1 -0
  283. package/dist/runtime/features/layout.mjs +1 -1
  284. package/dist/runtime/features/publicLayout.mjs +1 -1
  285. package/dist/runtime/features/scopedSlots.mjs +1 -1
  286. package/dist/runtime/features/templateRefs.mjs +1 -1
  287. package/dist/runtime/hooks/base.mjs +1 -1
  288. package/dist/runtime/inlineDataset.mjs +1 -1
  289. package/dist/runtime/intersectionObserver.mjs +1 -1
  290. package/dist/runtime/jsxIsland.mjs +1 -1
  291. package/dist/runtime/layoutBridge.mjs +1 -1
  292. package/dist/runtime/nativeBridge.mjs +1 -1
  293. package/dist/runtime/navigationLifecycle.mjs +1 -0
  294. package/dist/runtime/pageEnvironment.mjs +1 -1
  295. package/dist/runtime/pageLayout.mjs +1 -1
  296. package/dist/runtime/pageScroll.mjs +1 -1
  297. package/dist/runtime/platform/current.mjs +1 -0
  298. package/dist/runtime/platform/generic.mjs +1 -0
  299. package/dist/runtime/platform/globals.mjs +1 -0
  300. package/dist/runtime/platform.mjs +1 -1
  301. package/dist/runtime/provideContext.mjs +1 -1
  302. package/dist/runtime/publicRuntime.mjs +1 -1
  303. package/dist/runtime/pullDownRefresh.mjs +1 -1
  304. package/dist/runtime/register/app.mjs +1 -1
  305. package/dist/runtime/register/component/alipay.mjs +1 -1
  306. package/dist/runtime/register/component/alipayRegistration.mjs +1 -0
  307. package/dist/runtime/register/component/lifecycle/platform.mjs +1 -1
  308. package/dist/runtime/register/component/lifecycle.mjs +1 -1
  309. package/dist/runtime/register/component/methods.mjs +1 -1
  310. package/dist/runtime/register/component/options.mjs +1 -1
  311. package/dist/runtime/register/component/props.mjs +1 -1
  312. package/dist/runtime/register/component/registerDefinition.mjs +1 -1
  313. package/dist/runtime/register/component/registerNativeDefinition.mjs +1 -1
  314. package/dist/runtime/register/component.mjs +1 -1
  315. package/dist/runtime/register/inline.mjs +1 -1
  316. package/dist/runtime/register/runtimeInstance/methodBridge.mjs +1 -1
  317. package/dist/runtime/register/runtimeInstance/provideContext.mjs +1 -1
  318. package/dist/runtime/register/runtimeInstance/setupContext.mjs +1 -1
  319. package/dist/runtime/register/runtimeInstance/setupPhase.mjs +1 -1
  320. package/dist/runtime/register/runtimeInstance/setupSnapshot.mjs +1 -1
  321. package/dist/runtime/register/runtimeInstance/utils.mjs +1 -1
  322. package/dist/runtime/register/runtimeInstance.mjs +1 -1
  323. package/dist/runtime/register/setDataFrequencyWarning.mjs +1 -1
  324. package/dist/runtime/register/setup.mjs +1 -1
  325. package/dist/runtime/register/snapshot.mjs +1 -1
  326. package/dist/runtime/register/watch.mjs +1 -1
  327. package/dist/runtime/scopedSlots.mjs +1 -1
  328. package/dist/runtime/selectorQuery.mjs +1 -1
  329. package/dist/runtime/template.mjs +1 -1
  330. package/dist/runtime/templateRefs/helpers.mjs +1 -1
  331. package/dist/runtime/templateRefs.mjs +1 -1
  332. package/dist/runtime/uniAppHost.mjs +1 -1
  333. package/dist/runtime/updatePerformance.mjs +1 -1
  334. package/dist/runtime/use.mjs +1 -1
  335. package/dist/runtime/vueCompat/context.mjs +1 -1
  336. package/dist/runtime/vueCompat/model.mjs +1 -1
  337. package/dist/runtime/vueCompat/router.mjs +1 -1
  338. package/dist/runtime/vueCompat/templateRef.mjs +1 -1
  339. package/dist/scheduler.mjs +1 -1
  340. package/dist/store/base.mjs +1 -1
  341. package/dist/store/define/create.mjs +1 -1
  342. package/dist/store/define.mjs +1 -1
  343. package/dist/store/view.mjs +1 -1
  344. package/package.json +7 -7
  345. /package/dist/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/defineProperty.mjs +0 -0
  346. /package/dist/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/toPrimitive.mjs +0 -0
  347. /package/dist/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/toPropertyKey.mjs +0 -0
  348. /package/dist/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/typeof.mjs +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"initialNavigation.mjs","names":[],"sources":["../../../src/router/initialNavigation.ts"],"sourcesContent":["import type { MiniProgramPageLike } from '../routerInternal/shared'\nimport type { InitialNavigationMode, LocationQueryRaw, NavigationFailure } from './types'\nimport { WEVU_INITIAL_NAVIGATION_TIMEOUT_MARKER } from '@weapp-core/constants'\nimport { queueMicrotaskPolyfill } from '@wevu/web-apis'\nimport { getActiveRouter } from './instance'\n\nexport const DEFAULT_INITIAL_NAVIGATION_TIMEOUT = 10_000\n\nexport type InitialNavigationStatus = 'idle' | 'running' | 'allowed' | 'aborted' | 'timed-out' | 'cancelled'\n\ninterface InitialNavigationRunnerRegistration {\n runner: InitialNavigationRunner\n mode: InitialNavigationMode\n timeoutMs: number\n}\n\nexport type InitialNavigationRunner = (\n page: MiniProgramPageLike,\n query?: LocationQueryRaw,\n isActive?: () => boolean,\n) => Promise<void | NavigationFailure>\n\ninterface InitialNavigationController {\n readonly promise: Promise<boolean>\n readonly blocking: boolean\n readonly status: () => InitialNavigationStatus\n subscribe: (callback: (shouldMount: boolean) => void) => () => void\n start: (query?: LocationQueryRaw) => void\n cancel: () => void\n}\n\nconst initialNavigationRunners = new WeakMap<object, InitialNavigationRunnerRegistration>()\nconst initialNavigationControllers = new WeakMap<object, InitialNavigationController>()\n\nfunction normalizeTimeout(timeoutMs: number) {\n return Number.isFinite(timeoutMs) && timeoutMs > 0\n ? Math.max(1, Math.trunc(timeoutMs))\n : DEFAULT_INITIAL_NAVIGATION_TIMEOUT\n}\n\nfunction snapshotPage(instance: MiniProgramPageLike): MiniProgramPageLike {\n return {\n route: typeof instance.route === 'string' ? instance.route : undefined,\n __route__: typeof instance.__route__ === 'string' ? instance.__route__ : undefined,\n options: instance.options && typeof instance.options === 'object'\n ? { ...instance.options }\n : undefined,\n }\n}\n\nfunction snapshotQuery(query: LocationQueryRaw | undefined): LocationQueryRaw | undefined {\n if (!query || typeof query !== 'object') {\n return undefined\n }\n const snapshot: LocationQueryRaw = {}\n for (const [key, value] of Object.entries(query)) {\n snapshot[key] = Array.isArray(value) ? [...value] : value\n }\n return snapshot\n}\n\nexport function registerInitialNavigationRunner(\n router: object,\n runner: InitialNavigationRunner,\n timeoutMs = DEFAULT_INITIAL_NAVIGATION_TIMEOUT,\n mode: InitialNavigationMode = 'blocking',\n) {\n initialNavigationRunners.set(router, {\n runner,\n mode,\n timeoutMs: normalizeTimeout(timeoutMs),\n })\n}\n\nexport function getInitialNavigationRunner(): InitialNavigationRunner | undefined {\n const router = getActiveRouter()\n return router ? initialNavigationRunners.get(router)?.runner : undefined\n}\n\nexport function getInitialNavigationTimeout() {\n const router = getActiveRouter()\n return router ? initialNavigationRunners.get(router)?.timeoutMs ?? DEFAULT_INITIAL_NAVIGATION_TIMEOUT : DEFAULT_INITIAL_NAVIGATION_TIMEOUT\n}\n\nexport function getInitialNavigationMode(): InitialNavigationMode {\n const router = getActiveRouter()\n return router ? initialNavigationRunners.get(router)?.mode ?? 'eager' : 'eager'\n}\n\nfunction isNavigationFailureResult(result: void | NavigationFailure): result is NavigationFailure {\n return Boolean(result && typeof result === 'object' && (result as NavigationFailure).__wevuNavigationFailure)\n}\n\nexport function getInitialNavigationPromise(instance: MiniProgramPageLike) {\n return initialNavigationControllers.get(instance as object)?.promise\n}\n\nexport function getInitialNavigationStatus(instance: MiniProgramPageLike) {\n return initialNavigationControllers.get(instance as object)?.status()\n}\n\nexport function ensureInitialNavigation(\n instance: MiniProgramPageLike,\n query?: LocationQueryRaw,\n options: { start?: boolean, onComplete?: (shouldMount: boolean) => void } = {},\n) {\n const existing = initialNavigationControllers.get(instance as object)\n if (existing) {\n if (options.onComplete && existing.blocking) {\n existing.subscribe(options.onComplete)\n }\n if (options.start !== false) {\n existing.start(query)\n }\n return existing.blocking ? existing.promise : undefined\n }\n\n const router = getActiveRouter()\n const registration = router ? initialNavigationRunners.get(router) : undefined\n let pendingRunner = registration?.runner\n if (!pendingRunner) {\n return undefined\n }\n const blocking = registration?.mode === 'blocking'\n\n let page: MiniProgramPageLike | undefined = snapshotPage(instance)\n let initialQuery = snapshotQuery(query)\n let currentStatus: InitialNavigationStatus = 'idle'\n let timeoutHandle: ReturnType<typeof setTimeout> | undefined\n const timeoutMs = getInitialNavigationTimeout()\n let resolveNavigation!: (shouldMount: boolean) => void\n const completionCallbacks = new Set<{ callback: (shouldMount: boolean) => void, active: boolean }>()\n const promise = new Promise<boolean>((resolve) => {\n resolveNavigation = resolve\n })\n\n const settle = (status: Exclude<InitialNavigationStatus, 'idle' | 'running'>, shouldMount: boolean) => {\n if (currentStatus !== 'idle' && currentStatus !== 'running') {\n return\n }\n currentStatus = status\n if (timeoutHandle !== undefined) {\n clearTimeout(timeoutHandle)\n timeoutHandle = undefined\n }\n const callbacks = [...completionCallbacks]\n completionCallbacks.clear()\n pendingRunner = undefined\n page = undefined\n initialQuery = undefined\n resolveNavigation(shouldMount)\n queueMicrotaskPolyfill(() => {\n if (currentStatus !== 'allowed' && currentStatus !== 'timed-out') {\n return\n }\n for (const entry of callbacks) {\n if (entry.active) {\n entry.callback(shouldMount)\n entry.active = false\n }\n }\n })\n }\n\n const controller: InitialNavigationController = {\n promise,\n blocking,\n status: () => currentStatus,\n subscribe(callback) {\n const entry = { callback, active: true }\n if (currentStatus !== 'idle' && currentStatus !== 'running') {\n queueMicrotaskPolyfill(() => {\n if (entry.active && (currentStatus === 'allowed' || currentStatus === 'timed-out')) {\n callback(currentStatus === 'allowed' || currentStatus === 'timed-out')\n entry.active = false\n }\n })\n }\n else {\n completionCallbacks.add(entry)\n }\n return () => {\n entry.active = false\n completionCallbacks.delete(entry)\n }\n },\n start(startQuery?: LocationQueryRaw) {\n if (currentStatus !== 'idle') {\n return\n }\n currentStatus = 'running'\n if (blocking) {\n timeoutHandle = setTimeout(() => {\n if (currentStatus !== 'running') {\n return\n }\n // 超时是可恢复的运行时诊断,保留稳定 marker 供宿主和 E2E 观测。\n // eslint-disable-next-line no-console\n console.warn(`${WEVU_INITIAL_NAVIGATION_TIMEOUT_MARKER} initial navigation exceeded ${timeoutMs}ms; mounting page`, page?.route ?? page?.__route__ ?? '')\n settle('timed-out', true)\n }, timeoutMs)\n }\n const runnerPage = page\n const runnerQuery = snapshotQuery(startQuery ?? initialQuery)\n const runner = pendingRunner\n pendingRunner = undefined\n if (!runner || !runnerPage) {\n settle('aborted', false)\n return\n }\n void runner(runnerPage, runnerQuery, () => currentStatus === 'running').then((result) => {\n const failed = isNavigationFailureResult(result)\n settle(failed ? 'aborted' : 'allowed', !failed)\n }, () => {\n settle('aborted', false)\n })\n },\n cancel() {\n settle('cancelled', false)\n },\n }\n\n initialNavigationControllers.set(instance as object, controller)\n if (options.onComplete && blocking) {\n controller.subscribe(options.onComplete)\n }\n if (options.start !== false) {\n controller.start(query)\n }\n return blocking ? promise : undefined\n}\n\nexport function cancelInitialNavigation(instance: MiniProgramPageLike) {\n initialNavigationControllers.get(instance as object)?.cancel()\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"initialNavigation.mjs","names":[],"sources":["../../../src/router/initialNavigation.ts"],"sourcesContent":["import type { MiniProgramPageLike } from '../routerInternal/shared'\nimport type { InitialNavigationMode, LocationQueryRaw, NavigationFailure } from './types'\nimport { WEVU_INITIAL_NAVIGATION_TIMEOUT_MARKER } from '@weapp-core/constants'\nimport { queueMicrotaskPolyfill } from '@wevu/web-apis'\nimport { registerInitialNavigationLifecycle } from '../runtime/navigationLifecycle'\nimport { getActiveRouter } from './instance'\n\nexport const DEFAULT_INITIAL_NAVIGATION_TIMEOUT = 10_000\n\nexport type InitialNavigationStatus = 'idle' | 'running' | 'allowed' | 'aborted' | 'timed-out' | 'cancelled'\n\ninterface InitialNavigationRunnerRegistration {\n runner: InitialNavigationRunner\n mode: InitialNavigationMode\n timeoutMs: number\n}\n\nexport type InitialNavigationRunner = (\n page: MiniProgramPageLike,\n query?: LocationQueryRaw,\n isActive?: () => boolean,\n) => Promise<void | NavigationFailure>\n\ninterface InitialNavigationController {\n readonly promise: Promise<boolean>\n readonly blocking: boolean\n readonly status: () => InitialNavigationStatus\n subscribe: (callback: (shouldMount: boolean) => void) => () => void\n start: (query?: LocationQueryRaw) => void\n cancel: () => void\n}\n\nconst initialNavigationRunners = new WeakMap<object, InitialNavigationRunnerRegistration>()\nconst initialNavigationControllers = new WeakMap<object, InitialNavigationController>()\n\nfunction normalizeTimeout(timeoutMs: number) {\n return Number.isFinite(timeoutMs) && timeoutMs > 0\n ? Math.max(1, Math.trunc(timeoutMs))\n : DEFAULT_INITIAL_NAVIGATION_TIMEOUT\n}\n\nfunction snapshotPage(instance: MiniProgramPageLike): MiniProgramPageLike {\n return {\n route: typeof instance.route === 'string' ? instance.route : undefined,\n __route__: typeof instance.__route__ === 'string' ? instance.__route__ : undefined,\n options: instance.options && typeof instance.options === 'object'\n ? { ...instance.options }\n : undefined,\n }\n}\n\nfunction snapshotQuery(query: LocationQueryRaw | undefined): LocationQueryRaw | undefined {\n if (!query || typeof query !== 'object') {\n return undefined\n }\n const snapshot: LocationQueryRaw = {}\n for (const [key, value] of Object.entries(query)) {\n snapshot[key] = Array.isArray(value) ? [...value] : value\n }\n return snapshot\n}\n\nexport function getInitialNavigationRunner(): InitialNavigationRunner | undefined {\n const router = getActiveRouter()\n return router ? initialNavigationRunners.get(router)?.runner : undefined\n}\n\nexport function getInitialNavigationTimeout() {\n const router = getActiveRouter()\n return router ? initialNavigationRunners.get(router)?.timeoutMs ?? DEFAULT_INITIAL_NAVIGATION_TIMEOUT : DEFAULT_INITIAL_NAVIGATION_TIMEOUT\n}\n\nexport function getInitialNavigationMode(): InitialNavigationMode {\n const router = getActiveRouter()\n return router ? initialNavigationRunners.get(router)?.mode ?? 'eager' : 'eager'\n}\n\nfunction isNavigationFailureResult(result: void | NavigationFailure): result is NavigationFailure {\n return Boolean(result && typeof result === 'object' && (result as NavigationFailure).__wevuNavigationFailure)\n}\n\nexport function getInitialNavigationPromise(instance: MiniProgramPageLike) {\n return initialNavigationControllers.get(instance as object)?.promise\n}\n\nexport function getInitialNavigationStatus(instance: MiniProgramPageLike) {\n return initialNavigationControllers.get(instance as object)?.status()\n}\n\nexport function ensureInitialNavigation(\n instance: MiniProgramPageLike,\n query?: LocationQueryRaw,\n options: { start?: boolean, onComplete?: (shouldMount: boolean) => void } = {},\n) {\n const existing = initialNavigationControllers.get(instance as object)\n if (existing) {\n if (options.onComplete && existing.blocking) {\n existing.subscribe(options.onComplete)\n }\n if (options.start !== false) {\n existing.start(query)\n }\n return existing.blocking ? existing.promise : undefined\n }\n\n const router = getActiveRouter()\n const registration = router ? initialNavigationRunners.get(router) : undefined\n let pendingRunner = registration?.runner\n if (!pendingRunner) {\n return undefined\n }\n const blocking = registration?.mode === 'blocking'\n\n let page: MiniProgramPageLike | undefined = snapshotPage(instance)\n let initialQuery = snapshotQuery(query)\n let currentStatus: InitialNavigationStatus = 'idle'\n let timeoutHandle: ReturnType<typeof setTimeout> | undefined\n const timeoutMs = getInitialNavigationTimeout()\n let resolveNavigation!: (shouldMount: boolean) => void\n const completionCallbacks = new Set<{ callback: (shouldMount: boolean) => void, active: boolean }>()\n const promise = new Promise<boolean>((resolve) => {\n resolveNavigation = resolve\n })\n\n const settle = (status: Exclude<InitialNavigationStatus, 'idle' | 'running'>, shouldMount: boolean) => {\n if (currentStatus !== 'idle' && currentStatus !== 'running') {\n return\n }\n currentStatus = status\n if (timeoutHandle !== undefined) {\n clearTimeout(timeoutHandle)\n timeoutHandle = undefined\n }\n const callbacks = [...completionCallbacks]\n completionCallbacks.clear()\n pendingRunner = undefined\n page = undefined\n initialQuery = undefined\n resolveNavigation(shouldMount)\n queueMicrotaskPolyfill(() => {\n if (currentStatus !== 'allowed' && currentStatus !== 'timed-out') {\n return\n }\n for (const entry of callbacks) {\n if (entry.active) {\n entry.callback(shouldMount)\n entry.active = false\n }\n }\n })\n }\n\n const controller: InitialNavigationController = {\n promise,\n blocking,\n status: () => currentStatus,\n subscribe(callback) {\n const entry = { callback, active: true }\n if (currentStatus !== 'idle' && currentStatus !== 'running') {\n queueMicrotaskPolyfill(() => {\n if (entry.active && (currentStatus === 'allowed' || currentStatus === 'timed-out')) {\n callback(currentStatus === 'allowed' || currentStatus === 'timed-out')\n entry.active = false\n }\n })\n }\n else {\n completionCallbacks.add(entry)\n }\n return () => {\n entry.active = false\n completionCallbacks.delete(entry)\n }\n },\n start(startQuery?: LocationQueryRaw) {\n if (currentStatus !== 'idle') {\n return\n }\n currentStatus = 'running'\n if (blocking) {\n timeoutHandle = setTimeout(() => {\n if (currentStatus !== 'running') {\n return\n }\n // 超时是可恢复的运行时诊断,保留稳定 marker 供宿主和 E2E 观测。\n // eslint-disable-next-line no-console\n console.warn(`${WEVU_INITIAL_NAVIGATION_TIMEOUT_MARKER} initial navigation exceeded ${timeoutMs}ms; mounting page`, page?.route ?? page?.__route__ ?? '')\n settle('timed-out', true)\n }, timeoutMs)\n }\n const runnerPage = page\n const runnerQuery = snapshotQuery(startQuery ?? initialQuery)\n const runner = pendingRunner\n pendingRunner = undefined\n if (!runner || !runnerPage) {\n settle('aborted', false)\n return\n }\n void runner(runnerPage, runnerQuery, () => currentStatus === 'running').then((result) => {\n const failed = isNavigationFailureResult(result)\n settle(failed ? 'aborted' : 'allowed', !failed)\n }, () => {\n settle('aborted', false)\n })\n },\n cancel() {\n settle('cancelled', false)\n },\n }\n\n initialNavigationControllers.set(instance as object, controller)\n if (options.onComplete && blocking) {\n controller.subscribe(options.onComplete)\n }\n if (options.start !== false) {\n controller.start(query)\n }\n return blocking ? promise : undefined\n}\n\nexport function cancelInitialNavigation(instance: MiniProgramPageLike) {\n initialNavigationControllers.get(instance as object)?.cancel()\n}\n\nexport function registerInitialNavigationRunner(\n router: object,\n runner: InitialNavigationRunner,\n timeoutMs = DEFAULT_INITIAL_NAVIGATION_TIMEOUT,\n mode: InitialNavigationMode = 'blocking',\n) {\n registerInitialNavigationLifecycle({ ensure: ensureInitialNavigation, cancel: cancelInitialNavigation })\n initialNavigationRunners.set(router, {\n runner,\n mode,\n timeoutMs: normalizeTimeout(timeoutMs),\n })\n}\n"],"mappings":"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"}
@@ -8,8 +8,7 @@ function setActiveRouter(router) {
8
8
  provideGlobal(ROUTER_INSTANCE_KEY, router);
9
9
  }
10
10
  function getActiveRouter() {
11
- var _activeRouter;
12
- return (_activeRouter = activeRouter) !== null && _activeRouter !== void 0 ? _activeRouter : injectGlobal(ROUTER_INSTANCE_KEY, void 0);
11
+ return activeRouter ?? injectGlobal(ROUTER_INSTANCE_KEY, void 0);
13
12
  }
14
13
 
15
14
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"instance.mjs","names":[],"sources":["../../../src/router/instance.ts"],"sourcesContent":["import type { RouterNavigation } from './types'\nimport { injectGlobal, provideGlobal } from '../runtime/provide'\n\nconst ROUTER_INSTANCE_KEY = Symbol('wevu.router.instance')\n\nlet activeRouter: RouterNavigation | undefined\n\nexport function setActiveRouter(router: RouterNavigation) {\n activeRouter = router\n provideGlobal(ROUTER_INSTANCE_KEY, router)\n}\n\nexport function clearActiveRouter() {\n activeRouter = undefined\n provideGlobal(ROUTER_INSTANCE_KEY, undefined)\n}\n\nexport function getActiveRouter() {\n return activeRouter ?? injectGlobal<RouterNavigation | undefined>(ROUTER_INSTANCE_KEY, undefined)\n}\n"],"mappings":";;;AAGA,MAAM,sBAAsB,OAAO,sBAAsB;AAEzD,IAAI;AAEJ,SAAgB,gBAAgB,QAA0B;CACxD,eAAe;CACf,cAAc,qBAAqB,MAAM;AAC3C;AAOA,SAAgB,kBAAkB;;CAChC,wBAAO,qEAAgB,aAA2C,qBAAqB,MAAS;AAClG"}
1
+ {"version":3,"file":"instance.mjs","names":[],"sources":["../../../src/router/instance.ts"],"sourcesContent":["import type { RouterNavigation } from './types'\nimport { injectGlobal, provideGlobal } from '../runtime/provide'\n\nconst ROUTER_INSTANCE_KEY = Symbol('wevu.router.instance')\n\nlet activeRouter: RouterNavigation | undefined\n\nexport function setActiveRouter(router: RouterNavigation) {\n activeRouter = router\n provideGlobal(ROUTER_INSTANCE_KEY, router)\n}\n\nexport function clearActiveRouter() {\n activeRouter = undefined\n provideGlobal(ROUTER_INSTANCE_KEY, undefined)\n}\n\nexport function getActiveRouter() {\n return activeRouter ?? injectGlobal<RouterNavigation | undefined>(ROUTER_INSTANCE_KEY, undefined)\n}\n"],"mappings":";;;AAGA,MAAM,sBAAsB,OAAO,sBAAsB;AAEzD,IAAI;AAEJ,SAAgB,gBAAgB,QAA0B;CACxD,eAAe;CACf,cAAc,qBAAqB,MAAM;AAC3C;AAOA,SAAgB,kBAAkB;CAChC,OAAO,gBAAgB,aAA2C,qBAAqB,MAAS;AAClG"}
@@ -112,12 +112,12 @@ function executeNavigationMethod(method, options, to, from) {
112
112
  async function runAfterEachHooks(hooks, context) {
113
113
  for (const hook of hooks) try {
114
114
  await hook(context.to, context.from, context.failure, context);
115
- } catch (_unused) {}
115
+ } catch {}
116
116
  }
117
117
  async function runNavigationErrorHooks(handlers, error, context) {
118
118
  for (const handler of handlers) try {
119
119
  await handler(error, context);
120
- } catch (_unused2) {}
120
+ } catch {}
121
121
  }
122
122
  function isNativeFailureLikeError(value) {
123
123
  if (!value || typeof value !== "object") return false;
@@ -1 +1 @@
1
- {"version":3,"file":"navigationCore.mjs","names":[],"sources":["../../../src/router/navigationCore.ts"],"sourcesContent":["import type { WevuNamedRouteMap } from '../router'\nimport type {\n NavigationAfterEach,\n NavigationAfterEachContext,\n NavigationErrorContext,\n NavigationErrorHandler,\n NavigationFailure,\n NavigationFailureTypeValue,\n NavigationGuard,\n NavigationGuardContext,\n NavigationRedirect,\n RouteLocationNormalizedLoaded,\n RouteLocationRaw,\n} from './types'\nimport { NavigationFailureType } from './types'\n\nconst DUPLICATED_RE = /already|same|duplicat|重复/\nconst CANCELLED_RE = /cancel|取消/\nconst ABORTED_RE = /abort|interrupt|中断/\n\nfunction normalizeNavigationErrorMessage(error: unknown): string {\n if (typeof error === 'string') {\n return error\n }\n if (error && typeof error === 'object') {\n const message = (error as Record<string, unknown>).errMsg\n if (typeof message === 'string') {\n return message\n }\n if (error instanceof Error) {\n return error.message\n }\n }\n return ''\n}\n\nfunction resolveNavigationFailureType(error: unknown): NavigationFailureTypeValue {\n const normalizedMessage = normalizeNavigationErrorMessage(error).toLowerCase()\n if (DUPLICATED_RE.test(normalizedMessage)) {\n return NavigationFailureType.duplicated\n }\n if (CANCELLED_RE.test(normalizedMessage)) {\n return NavigationFailureType.cancelled\n }\n if (ABORTED_RE.test(normalizedMessage)) {\n return NavigationFailureType.aborted\n }\n return NavigationFailureType.unknown\n}\n\nexport function createNavigationFailure<TRouteMap extends object = WevuNamedRouteMap>(\n type: NavigationFailureTypeValue,\n to?: RouteLocationNormalizedLoaded<NoInfer<TRouteMap>>,\n from?: RouteLocationNormalizedLoaded<NoInfer<TRouteMap>>,\n cause?: unknown,\n): NavigationFailure<TRouteMap> {\n const message = normalizeNavigationErrorMessage(cause) || 'Navigation failed'\n return Object.assign(new Error(message), {\n __wevuNavigationFailure: true as const,\n type,\n to,\n from,\n cause,\n })\n}\n\nexport function isNavigationFailure<TRouteMap extends object = WevuNamedRouteMap>(\n error: unknown,\n type?: NavigationFailureTypeValue,\n): error is NavigationFailure<TRouteMap> {\n if (!error || typeof error !== 'object') {\n return false\n }\n const navigationError = error as Partial<NavigationFailure>\n if (navigationError.__wevuNavigationFailure !== true) {\n return false\n }\n if (type === undefined) {\n return true\n }\n return navigationError.type === type\n}\n\ninterface GuardPipelineContinue {\n status: 'continue'\n}\n\ninterface GuardPipelineFailure {\n status: 'failure'\n failure: NavigationFailure\n}\n\ninterface GuardPipelineRedirect {\n status: 'redirect'\n target: RouteLocationNormalizedLoaded\n replace?: boolean\n}\n\nexport type GuardPipelineResult = GuardPipelineContinue | GuardPipelineFailure | GuardPipelineRedirect\n\nexport function isNavigationRedirectCandidate(value: unknown): value is NavigationRedirect {\n if (!value || typeof value !== 'object') {\n return false\n }\n return 'to' in (value as Record<string, unknown>)\n}\n\nfunction isRouteLocationRawCandidate(value: unknown): value is RouteLocationRaw {\n if (typeof value === 'string') {\n return true\n }\n if (!value || typeof value !== 'object') {\n return false\n }\n const candidate = value as Record<string, unknown>\n return 'path' in candidate\n || 'fullPath' in candidate\n || 'query' in candidate\n || 'hash' in candidate\n || 'name' in candidate\n || 'params' in candidate\n}\n\nexport async function runNavigationGuards(\n guards: ReadonlySet<NavigationGuard>,\n context: NavigationGuardContext,\n resolveRoute: (to: RouteLocationRaw, currentPath: string) => RouteLocationNormalizedLoaded,\n): Promise<GuardPipelineResult> {\n for (const guard of guards) {\n try {\n const result = await guard(context.to, context.from, context)\n if (isNavigationFailure(result)) {\n return {\n status: 'failure',\n failure: result,\n }\n }\n if (result === false) {\n return {\n status: 'failure',\n failure: createNavigationFailure(\n NavigationFailureType.aborted,\n context.to,\n context.from,\n 'Navigation aborted by guard',\n ),\n }\n }\n if (isNavigationRedirectCandidate(result)) {\n if (!context.to) {\n return {\n status: 'failure',\n failure: createNavigationFailure(\n NavigationFailureType.aborted,\n context.to,\n context.from,\n 'Redirect is not supported in back navigation guards',\n ),\n }\n }\n return {\n status: 'redirect',\n target: resolveRoute(result.to, context.to.path),\n replace: result.replace,\n }\n }\n if (isRouteLocationRawCandidate(result)) {\n if (!context.to) {\n return {\n status: 'failure',\n failure: createNavigationFailure(\n NavigationFailureType.aborted,\n context.to,\n context.from,\n 'Redirect is not supported in back navigation guards',\n ),\n }\n }\n return {\n status: 'redirect',\n target: resolveRoute(result, context.to.path),\n }\n }\n }\n catch (error) {\n return {\n status: 'failure',\n failure: createNavigationFailure(NavigationFailureType.aborted, context.to, context.from, error),\n }\n }\n }\n return { status: 'continue' }\n}\n\nexport function executeNavigationMethod(\n method: (options: Record<string, any>) => unknown,\n options: Record<string, any>,\n to?: RouteLocationNormalizedLoaded,\n from?: RouteLocationNormalizedLoaded,\n): Promise<void | NavigationFailure> {\n return new Promise((resolve) => {\n let settled = false\n const finalize = (result?: void | NavigationFailure) => {\n if (settled) {\n return\n }\n settled = true\n resolve(result)\n }\n\n try {\n const maybePromise = method({\n ...options,\n success: () => finalize(),\n fail: (error: unknown) => {\n finalize(createNavigationFailure(resolveNavigationFailureType(error), to, from, error))\n },\n })\n\n if (maybePromise && typeof (maybePromise as PromiseLike<unknown>).then === 'function') {\n ;(maybePromise as PromiseLike<unknown>).then(\n () => finalize(),\n error => finalize(createNavigationFailure(resolveNavigationFailureType(error), to, from, error)),\n )\n }\n }\n catch (error) {\n finalize(createNavigationFailure(resolveNavigationFailureType(error), to, from, error))\n }\n })\n}\n\nexport async function runAfterEachHooks(\n hooks: ReadonlySet<NavigationAfterEach>,\n context: NavigationAfterEachContext,\n) {\n for (const hook of hooks) {\n try {\n await hook(context.to, context.from, context.failure, context)\n }\n catch {\n // 忽略 afterEach hook 的异常,避免影响导航主流程。\n }\n }\n}\n\nexport async function runNavigationErrorHooks(\n handlers: ReadonlySet<NavigationErrorHandler>,\n error: unknown,\n context: NavigationErrorContext,\n) {\n for (const handler of handlers) {\n try {\n await handler(error, context)\n }\n catch {\n // 忽略 onError 回调中的异常,避免影响导航主流程。\n }\n }\n}\n\nfunction isNativeFailureLikeError(value: unknown): boolean {\n if (!value || typeof value !== 'object') {\n return false\n }\n const errMsg = (value as Record<string, unknown>).errMsg\n return typeof errMsg === 'string'\n}\n\nexport function shouldEmitNavigationError(failure: NavigationFailure): boolean {\n if (failure.type === NavigationFailureType.unknown) {\n return true\n }\n if (failure.cause instanceof Error) {\n return true\n }\n if (failure.type === NavigationFailureType.aborted && failure.cause !== undefined) {\n if (typeof failure.cause === 'string') {\n return false\n }\n if (isNativeFailureLikeError(failure.cause)) {\n return false\n }\n return true\n }\n return false\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"navigationCore.mjs","names":[],"sources":["../../../src/router/navigationCore.ts"],"sourcesContent":["import type { WevuNamedRouteMap } from '../router'\nimport type {\n NavigationAfterEach,\n NavigationAfterEachContext,\n NavigationErrorContext,\n NavigationErrorHandler,\n NavigationFailure,\n NavigationFailureTypeValue,\n NavigationGuard,\n NavigationGuardContext,\n NavigationRedirect,\n RouteLocationNormalizedLoaded,\n RouteLocationRaw,\n} from './types'\nimport { NavigationFailureType } from './types'\n\nconst DUPLICATED_RE = /already|same|duplicat|重复/\nconst CANCELLED_RE = /cancel|取消/\nconst ABORTED_RE = /abort|interrupt|中断/\n\nfunction normalizeNavigationErrorMessage(error: unknown): string {\n if (typeof error === 'string') {\n return error\n }\n if (error && typeof error === 'object') {\n const message = (error as Record<string, unknown>).errMsg\n if (typeof message === 'string') {\n return message\n }\n if (error instanceof Error) {\n return error.message\n }\n }\n return ''\n}\n\nfunction resolveNavigationFailureType(error: unknown): NavigationFailureTypeValue {\n const normalizedMessage = normalizeNavigationErrorMessage(error).toLowerCase()\n if (DUPLICATED_RE.test(normalizedMessage)) {\n return NavigationFailureType.duplicated\n }\n if (CANCELLED_RE.test(normalizedMessage)) {\n return NavigationFailureType.cancelled\n }\n if (ABORTED_RE.test(normalizedMessage)) {\n return NavigationFailureType.aborted\n }\n return NavigationFailureType.unknown\n}\n\nexport function createNavigationFailure<TRouteMap extends object = WevuNamedRouteMap>(\n type: NavigationFailureTypeValue,\n to?: RouteLocationNormalizedLoaded<NoInfer<TRouteMap>>,\n from?: RouteLocationNormalizedLoaded<NoInfer<TRouteMap>>,\n cause?: unknown,\n): NavigationFailure<TRouteMap> {\n const message = normalizeNavigationErrorMessage(cause) || 'Navigation failed'\n return Object.assign(new Error(message), {\n __wevuNavigationFailure: true as const,\n type,\n to,\n from,\n cause,\n })\n}\n\nexport function isNavigationFailure<TRouteMap extends object = WevuNamedRouteMap>(\n error: unknown,\n type?: NavigationFailureTypeValue,\n): error is NavigationFailure<TRouteMap> {\n if (!error || typeof error !== 'object') {\n return false\n }\n const navigationError = error as Partial<NavigationFailure>\n if (navigationError.__wevuNavigationFailure !== true) {\n return false\n }\n if (type === undefined) {\n return true\n }\n return navigationError.type === type\n}\n\ninterface GuardPipelineContinue {\n status: 'continue'\n}\n\ninterface GuardPipelineFailure {\n status: 'failure'\n failure: NavigationFailure\n}\n\ninterface GuardPipelineRedirect {\n status: 'redirect'\n target: RouteLocationNormalizedLoaded\n replace?: boolean\n}\n\nexport type GuardPipelineResult = GuardPipelineContinue | GuardPipelineFailure | GuardPipelineRedirect\n\nexport function isNavigationRedirectCandidate(value: unknown): value is NavigationRedirect {\n if (!value || typeof value !== 'object') {\n return false\n }\n return 'to' in (value as Record<string, unknown>)\n}\n\nfunction isRouteLocationRawCandidate(value: unknown): value is RouteLocationRaw {\n if (typeof value === 'string') {\n return true\n }\n if (!value || typeof value !== 'object') {\n return false\n }\n const candidate = value as Record<string, unknown>\n return 'path' in candidate\n || 'fullPath' in candidate\n || 'query' in candidate\n || 'hash' in candidate\n || 'name' in candidate\n || 'params' in candidate\n}\n\nexport async function runNavigationGuards(\n guards: ReadonlySet<NavigationGuard>,\n context: NavigationGuardContext,\n resolveRoute: (to: RouteLocationRaw, currentPath: string) => RouteLocationNormalizedLoaded,\n): Promise<GuardPipelineResult> {\n for (const guard of guards) {\n try {\n const result = await guard(context.to, context.from, context)\n if (isNavigationFailure(result)) {\n return {\n status: 'failure',\n failure: result,\n }\n }\n if (result === false) {\n return {\n status: 'failure',\n failure: createNavigationFailure(\n NavigationFailureType.aborted,\n context.to,\n context.from,\n 'Navigation aborted by guard',\n ),\n }\n }\n if (isNavigationRedirectCandidate(result)) {\n if (!context.to) {\n return {\n status: 'failure',\n failure: createNavigationFailure(\n NavigationFailureType.aborted,\n context.to,\n context.from,\n 'Redirect is not supported in back navigation guards',\n ),\n }\n }\n return {\n status: 'redirect',\n target: resolveRoute(result.to, context.to.path),\n replace: result.replace,\n }\n }\n if (isRouteLocationRawCandidate(result)) {\n if (!context.to) {\n return {\n status: 'failure',\n failure: createNavigationFailure(\n NavigationFailureType.aborted,\n context.to,\n context.from,\n 'Redirect is not supported in back navigation guards',\n ),\n }\n }\n return {\n status: 'redirect',\n target: resolveRoute(result, context.to.path),\n }\n }\n }\n catch (error) {\n return {\n status: 'failure',\n failure: createNavigationFailure(NavigationFailureType.aborted, context.to, context.from, error),\n }\n }\n }\n return { status: 'continue' }\n}\n\nexport function executeNavigationMethod(\n method: (options: Record<string, any>) => unknown,\n options: Record<string, any>,\n to?: RouteLocationNormalizedLoaded,\n from?: RouteLocationNormalizedLoaded,\n): Promise<void | NavigationFailure> {\n return new Promise((resolve) => {\n let settled = false\n const finalize = (result?: void | NavigationFailure) => {\n if (settled) {\n return\n }\n settled = true\n resolve(result)\n }\n\n try {\n const maybePromise = method({\n ...options,\n success: () => finalize(),\n fail: (error: unknown) => {\n finalize(createNavigationFailure(resolveNavigationFailureType(error), to, from, error))\n },\n })\n\n if (maybePromise && typeof (maybePromise as PromiseLike<unknown>).then === 'function') {\n ;(maybePromise as PromiseLike<unknown>).then(\n () => finalize(),\n error => finalize(createNavigationFailure(resolveNavigationFailureType(error), to, from, error)),\n )\n }\n }\n catch (error) {\n finalize(createNavigationFailure(resolveNavigationFailureType(error), to, from, error))\n }\n })\n}\n\nexport async function runAfterEachHooks(\n hooks: ReadonlySet<NavigationAfterEach>,\n context: NavigationAfterEachContext,\n) {\n for (const hook of hooks) {\n try {\n await hook(context.to, context.from, context.failure, context)\n }\n catch {\n // 忽略 afterEach hook 的异常,避免影响导航主流程。\n }\n }\n}\n\nexport async function runNavigationErrorHooks(\n handlers: ReadonlySet<NavigationErrorHandler>,\n error: unknown,\n context: NavigationErrorContext,\n) {\n for (const handler of handlers) {\n try {\n await handler(error, context)\n }\n catch {\n // 忽略 onError 回调中的异常,避免影响导航主流程。\n }\n }\n}\n\nfunction isNativeFailureLikeError(value: unknown): boolean {\n if (!value || typeof value !== 'object') {\n return false\n }\n const errMsg = (value as Record<string, unknown>).errMsg\n return typeof errMsg === 'string'\n}\n\nexport function shouldEmitNavigationError(failure: NavigationFailure): boolean {\n if (failure.type === NavigationFailureType.unknown) {\n return true\n }\n if (failure.cause instanceof Error) {\n return true\n }\n if (failure.type === NavigationFailureType.aborted && failure.cause !== undefined) {\n if (typeof failure.cause === 'string') {\n return false\n }\n if (isNativeFailureLikeError(failure.cause)) {\n return false\n }\n return true\n }\n return false\n}\n"],"mappings":"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"}
@@ -20,16 +20,13 @@ function createNavigationResultController(options) {
20
20
  nativeRouter,
21
21
  failure: result.failure
22
22
  });
23
- if (result.failure && shouldEmitNavigationError(result.failure)) {
24
- var _result$failure$cause;
25
- await runNavigationErrorHooks(errorHandlers, (_result$failure$cause = result.failure.cause) !== null && _result$failure$cause !== void 0 ? _result$failure$cause : result.failure, {
26
- mode: result.mode,
27
- to: result.to,
28
- from: result.from,
29
- nativeRouter,
30
- failure: result.failure
31
- });
32
- }
23
+ if (result.failure && shouldEmitNavigationError(result.failure)) await runNavigationErrorHooks(errorHandlers, result.failure.cause ?? result.failure, {
24
+ mode: result.mode,
25
+ to: result.to,
26
+ from: result.from,
27
+ nativeRouter,
28
+ failure: result.failure
29
+ });
33
30
  }
34
31
  function shouldRejectNavigationFailure(failure) {
35
32
  return rejectOnError && shouldEmitNavigationError(failure);
@@ -1 +1 @@
1
- {"version":3,"file":"navigationResult.mjs","names":[],"sources":["../../../src/router/navigationResult.ts"],"sourcesContent":["import type { SetupContextRouter } from '../runtime/types/props'\nimport type {\n NavigationAfterEach,\n NavigationErrorHandler,\n NavigationFailure,\n NavigationMode,\n RouteLocationNormalizedLoaded,\n} from './types'\nimport { runAfterEachHooks, runNavigationErrorHooks, shouldEmitNavigationError } from './navigationCore'\nimport { notifyRouteStateSync } from './routeSync'\n\nexport interface NavigationRunResult {\n mode: NavigationMode\n from: RouteLocationNormalizedLoaded\n to?: RouteLocationNormalizedLoaded\n failure?: NavigationFailure\n}\n\nexport function createNavigationRunResult(\n mode: NavigationMode,\n from: RouteLocationNormalizedLoaded,\n to?: RouteLocationNormalizedLoaded,\n failure?: NavigationFailure,\n): NavigationRunResult {\n return {\n mode,\n from,\n to,\n failure,\n }\n}\n\nexport function createNavigationResultController(options: {\n afterEachHooks: ReadonlySet<NavigationAfterEach>\n errorHandlers: ReadonlySet<NavigationErrorHandler>\n nativeRouter: SetupContextRouter\n rejectOnError: boolean\n}) {\n const {\n afterEachHooks,\n errorHandlers,\n nativeRouter,\n rejectOnError,\n } = options\n\n async function emitNavigationAfterEach(result: NavigationRunResult): Promise<void> {\n await runAfterEachHooks(afterEachHooks, {\n mode: result.mode,\n to: result.to,\n from: result.from,\n nativeRouter,\n failure: result.failure,\n })\n\n if (result.failure && shouldEmitNavigationError(result.failure)) {\n await runNavigationErrorHooks(\n errorHandlers,\n result.failure.cause ?? result.failure,\n {\n mode: result.mode,\n to: result.to,\n from: result.from,\n nativeRouter,\n failure: result.failure,\n },\n )\n }\n }\n\n function shouldRejectNavigationFailure(failure: NavigationFailure): boolean {\n return rejectOnError && shouldEmitNavigationError(failure)\n }\n\n async function settleNavigationResult(result: NavigationRunResult): Promise<void | NavigationFailure> {\n if (!result.failure) {\n notifyRouteStateSync(result.to\n ? {\n route: result.to,\n source: 'router',\n }\n : undefined)\n }\n await emitNavigationAfterEach(result)\n if (result.failure && shouldRejectNavigationFailure(result.failure)) {\n throw result.failure\n }\n return result.failure\n }\n\n return {\n emitNavigationAfterEach,\n settleNavigationResult,\n }\n}\n"],"mappings":";;;;AAkBA,SAAgB,0BACd,MACA,MACA,IACA,SACqB;CACrB,OAAO;EACL;EACA;EACA;EACA;CACF;AACF;AAEA,SAAgB,iCAAiC,SAK9C;CACD,MAAM,EACJ,gBACA,eACA,cACA,kBACE;CAEJ,eAAe,wBAAwB,QAA4C;EACjF,MAAM,kBAAkB,gBAAgB;GACtC,MAAM,OAAO;GACb,IAAI,OAAO;GACX,MAAM,OAAO;GACb;GACA,SAAS,OAAO;EAClB,CAAC;EAED,IAAI,OAAO,WAAW,0BAA0B,OAAO,OAAO,GAAG;;GAC/D,MAAM,wBACJ,wCACA,OAAO,QAAQ,8EAAS,OAAO,SAC/B;IACE,MAAM,OAAO;IACb,IAAI,OAAO;IACX,MAAM,OAAO;IACb;IACA,SAAS,OAAO;GAClB,CACF;EACF;CACF;CAEA,SAAS,8BAA8B,SAAqC;EAC1E,OAAO,iBAAiB,0BAA0B,OAAO;CAC3D;CAEA,eAAe,uBAAuB,QAAgE;EACpG,IAAI,CAAC,OAAO,SACV,qBAAqB,OAAO,KACxB;GACE,OAAO,OAAO;GACd,QAAQ;EACV,IACA,MAAS;EAEf,MAAM,wBAAwB,MAAM;EACpC,IAAI,OAAO,WAAW,8BAA8B,OAAO,OAAO,GAChE,MAAM,OAAO;EAEf,OAAO,OAAO;CAChB;CAEA,OAAO;EACL;EACA;CACF;AACF"}
1
+ {"version":3,"file":"navigationResult.mjs","names":[],"sources":["../../../src/router/navigationResult.ts"],"sourcesContent":["import type { SetupContextRouter } from '../runtime/types/props'\nimport type {\n NavigationAfterEach,\n NavigationErrorHandler,\n NavigationFailure,\n NavigationMode,\n RouteLocationNormalizedLoaded,\n} from './types'\nimport { runAfterEachHooks, runNavigationErrorHooks, shouldEmitNavigationError } from './navigationCore'\nimport { notifyRouteStateSync } from './routeSync'\n\nexport interface NavigationRunResult {\n mode: NavigationMode\n from: RouteLocationNormalizedLoaded\n to?: RouteLocationNormalizedLoaded\n failure?: NavigationFailure\n}\n\nexport function createNavigationRunResult(\n mode: NavigationMode,\n from: RouteLocationNormalizedLoaded,\n to?: RouteLocationNormalizedLoaded,\n failure?: NavigationFailure,\n): NavigationRunResult {\n return {\n mode,\n from,\n to,\n failure,\n }\n}\n\nexport function createNavigationResultController(options: {\n afterEachHooks: ReadonlySet<NavigationAfterEach>\n errorHandlers: ReadonlySet<NavigationErrorHandler>\n nativeRouter: SetupContextRouter\n rejectOnError: boolean\n}) {\n const {\n afterEachHooks,\n errorHandlers,\n nativeRouter,\n rejectOnError,\n } = options\n\n async function emitNavigationAfterEach(result: NavigationRunResult): Promise<void> {\n await runAfterEachHooks(afterEachHooks, {\n mode: result.mode,\n to: result.to,\n from: result.from,\n nativeRouter,\n failure: result.failure,\n })\n\n if (result.failure && shouldEmitNavigationError(result.failure)) {\n await runNavigationErrorHooks(\n errorHandlers,\n result.failure.cause ?? result.failure,\n {\n mode: result.mode,\n to: result.to,\n from: result.from,\n nativeRouter,\n failure: result.failure,\n },\n )\n }\n }\n\n function shouldRejectNavigationFailure(failure: NavigationFailure): boolean {\n return rejectOnError && shouldEmitNavigationError(failure)\n }\n\n async function settleNavigationResult(result: NavigationRunResult): Promise<void | NavigationFailure> {\n if (!result.failure) {\n notifyRouteStateSync(result.to\n ? {\n route: result.to,\n source: 'router',\n }\n : undefined)\n }\n await emitNavigationAfterEach(result)\n if (result.failure && shouldRejectNavigationFailure(result.failure)) {\n throw result.failure\n }\n return result.failure\n }\n\n return {\n emitNavigationAfterEach,\n settleNavigationResult,\n }\n}\n"],"mappings":";;;;AAkBA,SAAgB,0BACd,MACA,MACA,IACA,SACqB;CACrB,OAAO;EACL;EACA;EACA;EACA;CACF;AACF;AAEA,SAAgB,iCAAiC,SAK9C;CACD,MAAM,EACJ,gBACA,eACA,cACA,kBACE;CAEJ,eAAe,wBAAwB,QAA4C;EACjF,MAAM,kBAAkB,gBAAgB;GACtC,MAAM,OAAO;GACb,IAAI,OAAO;GACX,MAAM,OAAO;GACb;GACA,SAAS,OAAO;EAClB,CAAC;EAED,IAAI,OAAO,WAAW,0BAA0B,OAAO,OAAO,GAC5D,MAAM,wBACJ,eACA,OAAO,QAAQ,SAAS,OAAO,SAC/B;GACE,MAAM,OAAO;GACb,IAAI,OAAO;GACX,MAAM,OAAO;GACb;GACA,SAAS,OAAO;EAClB,CACF;CAEJ;CAEA,SAAS,8BAA8B,SAAqC;EAC1E,OAAO,iBAAiB,0BAA0B,OAAO;CAC3D;CAEA,eAAe,uBAAuB,QAAgE;EACpG,IAAI,CAAC,OAAO,SACV,qBAAqB,OAAO,KACxB;GACE,OAAO,OAAO;GACd,QAAQ;EACV,IACA,MAAS;EAEf,MAAM,wBAAwB,MAAM;EACpC,IAAI,OAAO,WAAW,8BAA8B,OAAO,OAAO,GAChE,MAAM,OAAO;EAEf,OAAO,OAAO;CAChB;CAEA,OAAO;EACL;EACA;CACF;AACF"}
@@ -13,7 +13,6 @@ async function navigateWithTarget(options) {
13
13
  let currentMode = mode;
14
14
  let redirectCount = 0;
15
15
  while (true) {
16
- var _matchedRouteResult$m;
17
16
  const tabBarTarget = tabBarPathSet.has(currentTarget.path);
18
17
  if (createNativeRouteUrl(currentTarget, routeResolveCodec.stringifyQuery) === createNativeRouteUrl(from, routeResolveCodec.stringifyQuery) && currentTarget.hash !== from.hash) return createNavigationRunResult(currentMode, from, currentTarget, createHashOnlyNavigationFailure(currentTarget, from));
19
18
  if (!allowSameLocation && (tabBarTarget ? currentTarget.path === from.path : currentTarget.fullPath === from.fullPath)) return createNavigationRunResult(currentMode, from, currentTarget, createDuplicatedFailure(currentTarget, from));
@@ -37,8 +36,7 @@ async function navigateWithTarget(options) {
37
36
  continue;
38
37
  }
39
38
  }
40
- const matchedRouteResult = resolveMatchedRouteRecord(currentTarget, namedRouteLookup);
41
- const matchedRouteRecords = (_matchedRouteResult$m = matchedRouteResult === null || matchedRouteResult === void 0 ? void 0 : matchedRouteResult.matchedRecords) !== null && _matchedRouteResult$m !== void 0 ? _matchedRouteResult$m : [];
39
+ const matchedRouteRecords = resolveMatchedRouteRecord(currentTarget, namedRouteLookup)?.matchedRecords ?? [];
42
40
  let redirectedByRouteRecord = false;
43
41
  for (const matchedRouteRecord of matchedRouteRecords) {
44
42
  if (matchedRouteRecord.redirect === void 0) continue;
@@ -1 +1 @@
1
- {"version":3,"file":"navigationTarget.mjs","names":[],"sources":["../../../src/router/navigationTarget.ts"],"sourcesContent":["import type {\n NamedRouteLookup,\n RouteResolveCodec,\n} from '../routerInternal/shared'\nimport type { NavigationRunResult } from './navigationResult'\nimport type {\n NavigationGuard,\n NavigationMode,\n RouteLocationNormalizedLoaded,\n RouteLocationRaw,\n} from './types'\nimport {\n createAbsoluteRoutePath,\n createNativeRouteUrl,\n hasLocationQuery,\n resolveMatchedRouteRecord,\n} from '../routerInternal/shared'\nimport {\n createNavigationFailure,\n executeNavigationMethod,\n isNavigationFailure,\n runNavigationGuards,\n} from './navigationCore'\nimport { createNavigationRunResult } from './navigationResult'\nimport {\n applyRedirectedFrom,\n createDuplicatedFailure,\n createHashOnlyNavigationFailure,\n createTabBarQueryFailure,\n createTooManyRedirectsFailure,\n resolveRouteRecordRedirect,\n} from './navigationTargetHelpers'\nimport { NavigationFailureType } from './types'\n\ninterface NavigateWithTargetOptions {\n mode: Exclude<NavigationMode, 'back'>\n target: RouteLocationNormalizedLoaded\n from: RouteLocationNormalizedLoaded\n nativeRouter: Record<string, any>\n routeResolveCodec: RouteResolveCodec\n namedRouteLookup: NamedRouteLookup\n beforeEachGuards: ReadonlySet<NavigationGuard>\n beforeResolveGuards: ReadonlySet<NavigationGuard>\n maxRedirects: number\n tabBarPathSet: ReadonlySet<string>\n resolveWithCodec: (to: RouteLocationRaw, currentPath: string) => RouteLocationNormalizedLoaded\n executeNative?: boolean\n allowSameLocation?: boolean\n}\n\nexport async function navigateWithTarget(options: NavigateWithTargetOptions): Promise<NavigationRunResult> {\n const {\n mode,\n target,\n from,\n nativeRouter,\n routeResolveCodec,\n namedRouteLookup,\n beforeEachGuards,\n beforeResolveGuards,\n maxRedirects,\n tabBarPathSet,\n resolveWithCodec,\n executeNative = true,\n allowSameLocation = false,\n } = options\n let currentTarget = target\n let currentMode: Exclude<NavigationMode, 'back'> = mode\n let redirectCount = 0\n\n while (true) {\n const tabBarTarget = tabBarPathSet.has(currentTarget.path)\n const sameNativeLocation = createNativeRouteUrl(currentTarget, routeResolveCodec.stringifyQuery)\n === createNativeRouteUrl(from, routeResolveCodec.stringifyQuery)\n if (sameNativeLocation && currentTarget.hash !== from.hash) {\n return createNavigationRunResult(currentMode, from, currentTarget, createHashOnlyNavigationFailure(currentTarget, from))\n }\n\n const duplicated = !allowSameLocation && (tabBarTarget\n ? currentTarget.path === from.path\n : currentTarget.fullPath === from.fullPath)\n if (duplicated) {\n return createNavigationRunResult(currentMode, from, currentTarget, createDuplicatedFailure(currentTarget, from))\n }\n\n if (tabBarTarget && hasLocationQuery(currentTarget.query)) {\n return createNavigationRunResult(currentMode, from, currentTarget, createTabBarQueryFailure(currentTarget, from))\n }\n\n const beforeEachResult = await runNavigationGuards(beforeEachGuards, {\n mode: currentMode,\n to: currentTarget,\n from,\n nativeRouter: nativeRouter as any,\n }, resolveWithCodec)\n\n if (beforeEachResult.status === 'failure') {\n return createNavigationRunResult(currentMode, from, currentTarget, beforeEachResult.failure)\n }\n if (beforeEachResult.status === 'redirect') {\n const redirectedTarget = beforeEachResult.target\n const redirectedMode = beforeEachResult.replace === true\n ? 'replace'\n : beforeEachResult.replace === false\n ? 'push'\n : currentMode\n if (redirectedTarget.fullPath !== currentTarget.fullPath || redirectedMode !== currentMode) {\n applyRedirectedFrom(redirectedTarget, currentTarget)\n currentTarget = redirectedTarget\n currentMode = redirectedMode\n redirectCount += 1\n if (redirectCount > maxRedirects) {\n return createNavigationRunResult(\n currentMode,\n from,\n currentTarget,\n createTooManyRedirectsFailure(currentTarget, from, maxRedirects),\n )\n }\n continue\n }\n }\n\n const matchedRouteResult = resolveMatchedRouteRecord(currentTarget, namedRouteLookup)\n const matchedRouteRecords = matchedRouteResult?.matchedRecords ?? []\n let redirectedByRouteRecord = false\n for (const matchedRouteRecord of matchedRouteRecords) {\n if (matchedRouteRecord.redirect === undefined) {\n continue\n }\n let redirectedByRecord: { target: RouteLocationNormalizedLoaded, replace?: boolean }\n try {\n redirectedByRecord = await resolveRouteRecordRedirect(\n matchedRouteRecord.redirect,\n currentTarget,\n from,\n resolveWithCodec,\n )\n }\n catch (error) {\n return createNavigationRunResult(\n currentMode,\n from,\n currentTarget,\n createNavigationFailure(NavigationFailureType.aborted, currentTarget, from, error),\n )\n }\n\n const redirectedMode = redirectedByRecord.replace === false ? 'push' : 'replace'\n const redirectedTarget = redirectedByRecord.target\n if (redirectedTarget.fullPath !== currentTarget.fullPath || redirectedMode !== currentMode) {\n applyRedirectedFrom(redirectedTarget, currentTarget)\n currentTarget = redirectedTarget\n currentMode = redirectedMode\n redirectCount += 1\n if (redirectCount > maxRedirects) {\n return createNavigationRunResult(\n currentMode,\n from,\n currentTarget,\n createTooManyRedirectsFailure(currentTarget, from, maxRedirects),\n )\n }\n redirectedByRouteRecord = true\n break\n }\n }\n if (redirectedByRouteRecord) {\n continue\n }\n\n let redirectedByBeforeEnter = false\n for (const matchedRouteRecord of matchedRouteRecords) {\n if (matchedRouteRecord.beforeEnterGuards.length === 0) {\n continue\n }\n const beforeEnterResult = await runNavigationGuards(new Set(matchedRouteRecord.beforeEnterGuards), {\n mode: currentMode,\n to: currentTarget,\n from,\n nativeRouter: nativeRouter as any,\n }, resolveWithCodec)\n\n if (beforeEnterResult.status === 'failure') {\n return createNavigationRunResult(currentMode, from, currentTarget, beforeEnterResult.failure)\n }\n if (beforeEnterResult.status === 'redirect') {\n const redirectedTarget = beforeEnterResult.target\n const redirectedMode = beforeEnterResult.replace === true\n ? 'replace'\n : beforeEnterResult.replace === false\n ? 'push'\n : currentMode\n if (redirectedTarget.fullPath !== currentTarget.fullPath || redirectedMode !== currentMode) {\n applyRedirectedFrom(redirectedTarget, currentTarget)\n currentTarget = redirectedTarget\n currentMode = redirectedMode\n redirectCount += 1\n if (redirectCount > maxRedirects) {\n return createNavigationRunResult(\n currentMode,\n from,\n currentTarget,\n createTooManyRedirectsFailure(currentTarget, from, maxRedirects),\n )\n }\n redirectedByBeforeEnter = true\n break\n }\n }\n }\n if (redirectedByBeforeEnter) {\n continue\n }\n\n const beforeResolveResult = await runNavigationGuards(beforeResolveGuards, {\n mode: currentMode,\n to: currentTarget,\n from,\n nativeRouter: nativeRouter as any,\n }, resolveWithCodec)\n\n if (beforeResolveResult.status === 'failure') {\n return createNavigationRunResult(currentMode, from, currentTarget, beforeResolveResult.failure)\n }\n if (beforeResolveResult.status === 'redirect') {\n const redirectedTarget = beforeResolveResult.target\n const redirectedMode = beforeResolveResult.replace === true\n ? 'replace'\n : beforeResolveResult.replace === false\n ? 'push'\n : currentMode\n if (redirectedTarget.fullPath !== currentTarget.fullPath || redirectedMode !== currentMode) {\n applyRedirectedFrom(redirectedTarget, currentTarget)\n currentTarget = redirectedTarget\n currentMode = redirectedMode\n redirectCount += 1\n if (redirectCount > maxRedirects) {\n return createNavigationRunResult(\n currentMode,\n from,\n currentTarget,\n createTooManyRedirectsFailure(currentTarget, from, maxRedirects),\n )\n }\n continue\n }\n }\n\n if (!executeNative) {\n return createNavigationRunResult(currentMode, from, currentTarget)\n }\n\n if (tabBarTarget) {\n const result = await executeNavigationMethod(\n nativeRouter.switchTab as (options: Record<string, any>) => unknown,\n { url: createAbsoluteRoutePath(currentTarget.path) },\n currentTarget,\n from,\n )\n if (isNavigationFailure(result)) {\n return createNavigationRunResult(currentMode, from, currentTarget, result)\n }\n return createNavigationRunResult(currentMode, from, currentTarget)\n }\n\n const nativeMethod = currentMode === 'push'\n ? nativeRouter.navigateTo\n : nativeRouter.redirectTo\n const result = await executeNavigationMethod(\n nativeMethod as (options: Record<string, any>) => unknown,\n { url: createNativeRouteUrl(currentTarget, routeResolveCodec.stringifyQuery) },\n currentTarget,\n from,\n )\n if (isNavigationFailure(result)) {\n return createNavigationRunResult(currentMode, from, currentTarget, result)\n }\n return createNavigationRunResult(currentMode, from, currentTarget)\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"navigationTarget.mjs","names":[],"sources":["../../../src/router/navigationTarget.ts"],"sourcesContent":["import type {\n NamedRouteLookup,\n RouteResolveCodec,\n} from '../routerInternal/shared'\nimport type { NavigationRunResult } from './navigationResult'\nimport type {\n NavigationGuard,\n NavigationMode,\n RouteLocationNormalizedLoaded,\n RouteLocationRaw,\n} from './types'\nimport {\n createAbsoluteRoutePath,\n createNativeRouteUrl,\n hasLocationQuery,\n resolveMatchedRouteRecord,\n} from '../routerInternal/shared'\nimport {\n createNavigationFailure,\n executeNavigationMethod,\n isNavigationFailure,\n runNavigationGuards,\n} from './navigationCore'\nimport { createNavigationRunResult } from './navigationResult'\nimport {\n applyRedirectedFrom,\n createDuplicatedFailure,\n createHashOnlyNavigationFailure,\n createTabBarQueryFailure,\n createTooManyRedirectsFailure,\n resolveRouteRecordRedirect,\n} from './navigationTargetHelpers'\nimport { NavigationFailureType } from './types'\n\ninterface NavigateWithTargetOptions {\n mode: Exclude<NavigationMode, 'back'>\n target: RouteLocationNormalizedLoaded\n from: RouteLocationNormalizedLoaded\n nativeRouter: Record<string, any>\n routeResolveCodec: RouteResolveCodec\n namedRouteLookup: NamedRouteLookup\n beforeEachGuards: ReadonlySet<NavigationGuard>\n beforeResolveGuards: ReadonlySet<NavigationGuard>\n maxRedirects: number\n tabBarPathSet: ReadonlySet<string>\n resolveWithCodec: (to: RouteLocationRaw, currentPath: string) => RouteLocationNormalizedLoaded\n executeNative?: boolean\n allowSameLocation?: boolean\n}\n\nexport async function navigateWithTarget(options: NavigateWithTargetOptions): Promise<NavigationRunResult> {\n const {\n mode,\n target,\n from,\n nativeRouter,\n routeResolveCodec,\n namedRouteLookup,\n beforeEachGuards,\n beforeResolveGuards,\n maxRedirects,\n tabBarPathSet,\n resolveWithCodec,\n executeNative = true,\n allowSameLocation = false,\n } = options\n let currentTarget = target\n let currentMode: Exclude<NavigationMode, 'back'> = mode\n let redirectCount = 0\n\n while (true) {\n const tabBarTarget = tabBarPathSet.has(currentTarget.path)\n const sameNativeLocation = createNativeRouteUrl(currentTarget, routeResolveCodec.stringifyQuery)\n === createNativeRouteUrl(from, routeResolveCodec.stringifyQuery)\n if (sameNativeLocation && currentTarget.hash !== from.hash) {\n return createNavigationRunResult(currentMode, from, currentTarget, createHashOnlyNavigationFailure(currentTarget, from))\n }\n\n const duplicated = !allowSameLocation && (tabBarTarget\n ? currentTarget.path === from.path\n : currentTarget.fullPath === from.fullPath)\n if (duplicated) {\n return createNavigationRunResult(currentMode, from, currentTarget, createDuplicatedFailure(currentTarget, from))\n }\n\n if (tabBarTarget && hasLocationQuery(currentTarget.query)) {\n return createNavigationRunResult(currentMode, from, currentTarget, createTabBarQueryFailure(currentTarget, from))\n }\n\n const beforeEachResult = await runNavigationGuards(beforeEachGuards, {\n mode: currentMode,\n to: currentTarget,\n from,\n nativeRouter: nativeRouter as any,\n }, resolveWithCodec)\n\n if (beforeEachResult.status === 'failure') {\n return createNavigationRunResult(currentMode, from, currentTarget, beforeEachResult.failure)\n }\n if (beforeEachResult.status === 'redirect') {\n const redirectedTarget = beforeEachResult.target\n const redirectedMode = beforeEachResult.replace === true\n ? 'replace'\n : beforeEachResult.replace === false\n ? 'push'\n : currentMode\n if (redirectedTarget.fullPath !== currentTarget.fullPath || redirectedMode !== currentMode) {\n applyRedirectedFrom(redirectedTarget, currentTarget)\n currentTarget = redirectedTarget\n currentMode = redirectedMode\n redirectCount += 1\n if (redirectCount > maxRedirects) {\n return createNavigationRunResult(\n currentMode,\n from,\n currentTarget,\n createTooManyRedirectsFailure(currentTarget, from, maxRedirects),\n )\n }\n continue\n }\n }\n\n const matchedRouteResult = resolveMatchedRouteRecord(currentTarget, namedRouteLookup)\n const matchedRouteRecords = matchedRouteResult?.matchedRecords ?? []\n let redirectedByRouteRecord = false\n for (const matchedRouteRecord of matchedRouteRecords) {\n if (matchedRouteRecord.redirect === undefined) {\n continue\n }\n let redirectedByRecord: { target: RouteLocationNormalizedLoaded, replace?: boolean }\n try {\n redirectedByRecord = await resolveRouteRecordRedirect(\n matchedRouteRecord.redirect,\n currentTarget,\n from,\n resolveWithCodec,\n )\n }\n catch (error) {\n return createNavigationRunResult(\n currentMode,\n from,\n currentTarget,\n createNavigationFailure(NavigationFailureType.aborted, currentTarget, from, error),\n )\n }\n\n const redirectedMode = redirectedByRecord.replace === false ? 'push' : 'replace'\n const redirectedTarget = redirectedByRecord.target\n if (redirectedTarget.fullPath !== currentTarget.fullPath || redirectedMode !== currentMode) {\n applyRedirectedFrom(redirectedTarget, currentTarget)\n currentTarget = redirectedTarget\n currentMode = redirectedMode\n redirectCount += 1\n if (redirectCount > maxRedirects) {\n return createNavigationRunResult(\n currentMode,\n from,\n currentTarget,\n createTooManyRedirectsFailure(currentTarget, from, maxRedirects),\n )\n }\n redirectedByRouteRecord = true\n break\n }\n }\n if (redirectedByRouteRecord) {\n continue\n }\n\n let redirectedByBeforeEnter = false\n for (const matchedRouteRecord of matchedRouteRecords) {\n if (matchedRouteRecord.beforeEnterGuards.length === 0) {\n continue\n }\n const beforeEnterResult = await runNavigationGuards(new Set(matchedRouteRecord.beforeEnterGuards), {\n mode: currentMode,\n to: currentTarget,\n from,\n nativeRouter: nativeRouter as any,\n }, resolveWithCodec)\n\n if (beforeEnterResult.status === 'failure') {\n return createNavigationRunResult(currentMode, from, currentTarget, beforeEnterResult.failure)\n }\n if (beforeEnterResult.status === 'redirect') {\n const redirectedTarget = beforeEnterResult.target\n const redirectedMode = beforeEnterResult.replace === true\n ? 'replace'\n : beforeEnterResult.replace === false\n ? 'push'\n : currentMode\n if (redirectedTarget.fullPath !== currentTarget.fullPath || redirectedMode !== currentMode) {\n applyRedirectedFrom(redirectedTarget, currentTarget)\n currentTarget = redirectedTarget\n currentMode = redirectedMode\n redirectCount += 1\n if (redirectCount > maxRedirects) {\n return createNavigationRunResult(\n currentMode,\n from,\n currentTarget,\n createTooManyRedirectsFailure(currentTarget, from, maxRedirects),\n )\n }\n redirectedByBeforeEnter = true\n break\n }\n }\n }\n if (redirectedByBeforeEnter) {\n continue\n }\n\n const beforeResolveResult = await runNavigationGuards(beforeResolveGuards, {\n mode: currentMode,\n to: currentTarget,\n from,\n nativeRouter: nativeRouter as any,\n }, resolveWithCodec)\n\n if (beforeResolveResult.status === 'failure') {\n return createNavigationRunResult(currentMode, from, currentTarget, beforeResolveResult.failure)\n }\n if (beforeResolveResult.status === 'redirect') {\n const redirectedTarget = beforeResolveResult.target\n const redirectedMode = beforeResolveResult.replace === true\n ? 'replace'\n : beforeResolveResult.replace === false\n ? 'push'\n : currentMode\n if (redirectedTarget.fullPath !== currentTarget.fullPath || redirectedMode !== currentMode) {\n applyRedirectedFrom(redirectedTarget, currentTarget)\n currentTarget = redirectedTarget\n currentMode = redirectedMode\n redirectCount += 1\n if (redirectCount > maxRedirects) {\n return createNavigationRunResult(\n currentMode,\n from,\n currentTarget,\n createTooManyRedirectsFailure(currentTarget, from, maxRedirects),\n )\n }\n continue\n }\n }\n\n if (!executeNative) {\n return createNavigationRunResult(currentMode, from, currentTarget)\n }\n\n if (tabBarTarget) {\n const result = await executeNavigationMethod(\n nativeRouter.switchTab as (options: Record<string, any>) => unknown,\n { url: createAbsoluteRoutePath(currentTarget.path) },\n currentTarget,\n from,\n )\n if (isNavigationFailure(result)) {\n return createNavigationRunResult(currentMode, from, currentTarget, result)\n }\n return createNavigationRunResult(currentMode, from, currentTarget)\n }\n\n const nativeMethod = currentMode === 'push'\n ? nativeRouter.navigateTo\n : nativeRouter.redirectTo\n const result = await executeNavigationMethod(\n nativeMethod as (options: Record<string, any>) => unknown,\n { url: createNativeRouteUrl(currentTarget, routeResolveCodec.stringifyQuery) },\n currentTarget,\n from,\n )\n if (isNavigationFailure(result)) {\n return createNavigationRunResult(currentMode, from, currentTarget, result)\n }\n return createNavigationRunResult(currentMode, from, currentTarget)\n }\n}\n"],"mappings":"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"}
@@ -8,17 +8,16 @@ const DEFAULT_ROUTE_RESOLVE_CODEC = {
8
8
  stringifyQuery
9
9
  };
10
10
  function resolveRouteLocation(to, currentPath = "", codec = DEFAULT_ROUTE_RESOLVE_CODEC) {
11
- var _ref, _to$path, _parsedFromFullPath$q, _to$hash;
12
11
  if (typeof to === "string") {
13
12
  const parsed = parsePathInput(to, codec);
14
13
  const path = resolvePath(parsed.path, currentPath);
15
14
  return createRouteLocation(path, parsed.query, parsed.hash, void 0, {}, codec.stringifyQuery);
16
15
  }
17
16
  const parsedFromFullPath = typeof to.fullPath === "string" ? parsePathInput(to.fullPath, codec) : void 0;
18
- const rawPath = (_ref = (_to$path = to.path) !== null && _to$path !== void 0 ? _to$path : parsedFromFullPath === null || parsedFromFullPath === void 0 ? void 0 : parsedFromFullPath.path) !== null && _ref !== void 0 ? _ref : currentPath;
17
+ const rawPath = to.path ?? parsedFromFullPath?.path ?? currentPath;
19
18
  const path = resolvePath(rawPath, currentPath);
20
- const query = to.query ? normalizeQuery(to.query) : (_parsedFromFullPath$q = parsedFromFullPath === null || parsedFromFullPath === void 0 ? void 0 : parsedFromFullPath.query) !== null && _parsedFromFullPath$q !== void 0 ? _parsedFromFullPath$q : {};
21
- const hash = normalizeHash((_to$hash = to.hash) !== null && _to$hash !== void 0 ? _to$hash : parsedFromFullPath === null || parsedFromFullPath === void 0 ? void 0 : parsedFromFullPath.hash);
19
+ const query = to.query ? normalizeQuery(to.query) : parsedFromFullPath?.query ?? {};
20
+ const hash = normalizeHash(to.hash ?? parsedFromFullPath?.hash);
22
21
  const name = typeof to.name === "string" ? to.name : void 0;
23
22
  const params = to.params ? normalizeRouteParams(to.params) : {};
24
23
  return createRouteLocation(path, query, hash, name, params, codec.stringifyQuery);
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.mjs","names":[],"sources":["../../../src/router/resolve.ts"],"sourcesContent":["import type { RouteResolveCodec } from '../routerInternal/shared'\nimport type { RouteLocationNormalizedLoaded, RouteLocationRaw, WevuBroadRouteMap } from './types'\nimport {\n createRouteLocation,\n normalizeHash,\n normalizeQuery,\n normalizeRouteParams,\n parsePathInput,\n parseQuery,\n resolvePath,\n stringifyQuery,\n} from '../routerInternal/shared'\n\nexport const DEFAULT_ROUTE_RESOLVE_CODEC: RouteResolveCodec = {\n parseQuery,\n stringifyQuery,\n}\n\nexport function resolveRouteLocation(\n to: RouteLocationRaw<WevuBroadRouteMap>,\n currentPath = '',\n codec: RouteResolveCodec = DEFAULT_ROUTE_RESOLVE_CODEC,\n): RouteLocationNormalizedLoaded<WevuBroadRouteMap> {\n if (typeof to === 'string') {\n const parsed = parsePathInput(to, codec)\n const path = resolvePath(parsed.path, currentPath)\n return createRouteLocation(path, parsed.query, parsed.hash, undefined, {}, codec.stringifyQuery)\n }\n\n const parsedFromFullPath = typeof to.fullPath === 'string'\n ? parsePathInput(to.fullPath, codec)\n : undefined\n\n const rawPath = to.path ?? parsedFromFullPath?.path ?? currentPath\n const path = resolvePath(rawPath, currentPath)\n const query = to.query\n ? normalizeQuery(to.query)\n : parsedFromFullPath?.query ?? {}\n const hash = normalizeHash(to.hash ?? parsedFromFullPath?.hash)\n const name = typeof to.name === 'string' ? to.name : undefined\n const params = to.params\n ? normalizeRouteParams(to.params)\n : {}\n\n return createRouteLocation(path, query, hash, name, params, codec.stringifyQuery)\n}\n"],"mappings":";;;;;AAaA,MAAa,8BAAiD;CAC5D;CACA;AACF;AAEA,SAAgB,qBACd,IACA,cAAc,IACd,QAA2B,6BACuB;;CAClD,IAAI,OAAO,OAAO,UAAU;EAC1B,MAAM,SAAS,eAAe,IAAI,KAAK;EACvC,MAAM,OAAO,YAAY,OAAO,MAAM,WAAW;EACjD,OAAO,oBAAoB,MAAM,OAAO,OAAO,OAAO,MAAM,QAAW,CAAC,GAAG,MAAM,cAAc;CACjG;CAEA,MAAM,qBAAqB,OAAO,GAAG,aAAa,WAC9C,eAAe,GAAG,UAAU,KAAK,IACjC;CAEJ,MAAM,8BAAU,GAAG,2HAAQ,mBAAoB,2CAAQ;CACvD,MAAM,OAAO,YAAY,SAAS,WAAW;CAC7C,MAAM,QAAQ,GAAG,QACb,eAAe,GAAG,KAAK,qGACvB,mBAAoB,8EAAS,CAAC;CAClC,MAAM,OAAO,0BAAc,GAAG,2HAAQ,mBAAoB,IAAI;CAC9D,MAAM,OAAO,OAAO,GAAG,SAAS,WAAW,GAAG,OAAO;CACrD,MAAM,SAAS,GAAG,SACd,qBAAqB,GAAG,MAAM,IAC9B,CAAC;CAEL,OAAO,oBAAoB,MAAM,OAAO,MAAM,MAAM,QAAQ,MAAM,cAAc;AAClF"}
1
+ {"version":3,"file":"resolve.mjs","names":[],"sources":["../../../src/router/resolve.ts"],"sourcesContent":["import type { RouteResolveCodec } from '../routerInternal/shared'\nimport type { RouteLocationNormalizedLoaded, RouteLocationRaw, WevuBroadRouteMap } from './types'\nimport {\n createRouteLocation,\n normalizeHash,\n normalizeQuery,\n normalizeRouteParams,\n parsePathInput,\n parseQuery,\n resolvePath,\n stringifyQuery,\n} from '../routerInternal/shared'\n\nexport const DEFAULT_ROUTE_RESOLVE_CODEC: RouteResolveCodec = {\n parseQuery,\n stringifyQuery,\n}\n\nexport function resolveRouteLocation(\n to: RouteLocationRaw<WevuBroadRouteMap>,\n currentPath = '',\n codec: RouteResolveCodec = DEFAULT_ROUTE_RESOLVE_CODEC,\n): RouteLocationNormalizedLoaded<WevuBroadRouteMap> {\n if (typeof to === 'string') {\n const parsed = parsePathInput(to, codec)\n const path = resolvePath(parsed.path, currentPath)\n return createRouteLocation(path, parsed.query, parsed.hash, undefined, {}, codec.stringifyQuery)\n }\n\n const parsedFromFullPath = typeof to.fullPath === 'string'\n ? parsePathInput(to.fullPath, codec)\n : undefined\n\n const rawPath = to.path ?? parsedFromFullPath?.path ?? currentPath\n const path = resolvePath(rawPath, currentPath)\n const query = to.query\n ? normalizeQuery(to.query)\n : parsedFromFullPath?.query ?? {}\n const hash = normalizeHash(to.hash ?? parsedFromFullPath?.hash)\n const name = typeof to.name === 'string' ? to.name : undefined\n const params = to.params\n ? normalizeRouteParams(to.params)\n : {}\n\n return createRouteLocation(path, query, hash, name, params, codec.stringifyQuery)\n}\n"],"mappings":";;;;;AAaA,MAAa,8BAAiD;CAC5D;CACA;AACF;AAEA,SAAgB,qBACd,IACA,cAAc,IACd,QAA2B,6BACuB;CAClD,IAAI,OAAO,OAAO,UAAU;EAC1B,MAAM,SAAS,eAAe,IAAI,KAAK;EACvC,MAAM,OAAO,YAAY,OAAO,MAAM,WAAW;EACjD,OAAO,oBAAoB,MAAM,OAAO,OAAO,OAAO,MAAM,QAAW,CAAC,GAAG,MAAM,cAAc;CACjG;CAEA,MAAM,qBAAqB,OAAO,GAAG,aAAa,WAC9C,eAAe,GAAG,UAAU,KAAK,IACjC;CAEJ,MAAM,UAAU,GAAG,QAAQ,oBAAoB,QAAQ;CACvD,MAAM,OAAO,YAAY,SAAS,WAAW;CAC7C,MAAM,QAAQ,GAAG,QACb,eAAe,GAAG,KAAK,IACvB,oBAAoB,SAAS,CAAC;CAClC,MAAM,OAAO,cAAc,GAAG,QAAQ,oBAAoB,IAAI;CAC9D,MAAM,OAAO,OAAO,GAAG,SAAS,WAAW,GAAG,OAAO;CACrD,MAAM,SAAS,GAAG,SACd,qBAAqB,GAAG,MAAM,IAC9B,CAAC;CAEL,OAAO,oBAAoB,MAAM,OAAO,MAAM,MAAM,QAAQ,MAAM,cAAc;AAClF"}
@@ -28,7 +28,7 @@ function createRouteRegistry(namedRouteLookup) {
28
28
  const parentRouteName = typeof parentNameOrRoute === "string" ? parentNameOrRoute : void 0;
29
29
  const parentRouteRecord = parentRouteName ? namedRouteLookup.recordByName.get(parentRouteName) : void 0;
30
30
  if (parentRouteName && !parentRouteRecord) throw new Error(`Parent route "${parentRouteName}" is not defined in createRouter({ routes | namedRoutes })`);
31
- const routeRecords = flattenNamedRouteRecords([route], parentRouteRecord === null || parentRouteRecord === void 0 ? void 0 : parentRouteRecord.path, parentRouteName, parentRouteRecord === null || parentRouteRecord === void 0 ? void 0 : parentRouteRecord.aliasPaths, void 0, "addRoute");
31
+ const routeRecords = flattenNamedRouteRecords([route], parentRouteRecord?.path, parentRouteName, parentRouteRecord?.aliasPaths, void 0, "addRoute");
32
32
  if (routeRecords.length === 0) throw new Error("Route name and path are required when adding a named route");
33
33
  const addedRoutes = [];
34
34
  for (const routeRecord of routeRecords) {
@@ -1 +1 @@
1
- {"version":3,"file":"routeRegistry.mjs","names":[],"sources":["../../../src/router/routeRegistry.ts"],"sourcesContent":["import type {\n NamedRouteLookup,\n RouteRecordNormalized,\n} from '../routerInternal/shared'\nimport type { AddRoute, RouteRecordRaw } from './types'\nimport {\n assertValidAddRouteInput,\n cloneRouteMeta,\n collectRouteNamesForRemoval,\n createAbsoluteRoutePath,\n createNamedRouteNameByStaticPath,\n flattenNamedRouteRecords,\n normalizeRouteRecordRaw,\n warnRouteConfig,\n} from '../routerInternal/shared'\n\nfunction normalizeRouteRecordForOutput(record: RouteRecordNormalized): RouteRecordRaw {\n const normalizedRoute: RouteRecordRaw = {\n name: record.name,\n path: record.path ? `/${record.path}` : '/',\n }\n if (record.meta !== undefined) {\n normalizedRoute.meta = cloneRouteMeta(record.meta)\n }\n if (record.aliasPaths.length === 1) {\n normalizedRoute.alias = createAbsoluteRoutePath(record.aliasPaths[0])\n }\n else if (record.aliasPaths.length > 1) {\n normalizedRoute.alias = record.aliasPaths.map(aliasPath => createAbsoluteRoutePath(aliasPath))\n }\n if (record.beforeEnterGuards.length === 1) {\n normalizedRoute.beforeEnter = record.beforeEnterGuards[0]\n }\n else if (record.beforeEnterGuards.length > 1) {\n normalizedRoute.beforeEnter = record.beforeEnterGuards.slice()\n }\n if (record.redirect !== undefined) {\n normalizedRoute.redirect = record.redirect\n }\n return normalizedRoute\n}\n\nexport function createRouteRegistry(namedRouteLookup: NamedRouteLookup) {\n const hasRoute = (name: string) => namedRouteLookup.recordByName.has(name)\n const getRoutes = (): readonly RouteRecordRaw[] =>\n Array.from(namedRouteLookup.recordByName.values(), normalizeRouteRecordForOutput)\n\n const addRoute: AddRoute = ((parentNameOrRoute: string | RouteRecordRaw, maybeRoute?: RouteRecordRaw) => {\n const route = typeof parentNameOrRoute === 'string'\n ? maybeRoute\n : parentNameOrRoute\n if (!route) {\n throw new Error('Route record is required when adding a child route')\n }\n assertValidAddRouteInput(route)\n\n const parentRouteName = typeof parentNameOrRoute === 'string'\n ? parentNameOrRoute\n : undefined\n const parentRouteRecord = parentRouteName\n ? namedRouteLookup.recordByName.get(parentRouteName)\n : undefined\n if (parentRouteName && !parentRouteRecord) {\n throw new Error(`Parent route \"${parentRouteName}\" is not defined in createRouter({ routes | namedRoutes })`)\n }\n\n const routeRecords = flattenNamedRouteRecords(\n [route],\n parentRouteRecord?.path,\n parentRouteName,\n parentRouteRecord?.aliasPaths,\n undefined,\n 'addRoute',\n )\n if (routeRecords.length === 0) {\n throw new Error('Route name and path are required when adding a named route')\n }\n const addedRoutes: RouteRecordNormalized[] = []\n for (const routeRecord of routeRecords) {\n const normalizedRoute = normalizeRouteRecordRaw(routeRecord.route, routeRecord.parentName)\n if (!normalizedRoute) {\n continue\n }\n const existingRoute = namedRouteLookup.recordByName.get(normalizedRoute.name)\n if (existingRoute) {\n const namesToRemove = collectRouteNamesForRemoval(existingRoute.name, namedRouteLookup.recordByName)\n for (const routeName of namesToRemove) {\n namedRouteLookup.recordByName.delete(routeName)\n }\n warnRouteConfig(\n `addRoute() replaced existing route \"${normalizedRoute.name}\" (${createAbsoluteRoutePath(existingRoute.path)} -> ${createAbsoluteRoutePath(normalizedRoute.path)}) and removed ${namesToRemove.size - 1} nested route(s)`,\n )\n }\n namedRouteLookup.recordByName.set(normalizedRoute.name, normalizedRoute)\n addedRoutes.push(normalizedRoute)\n }\n namedRouteLookup.nameByStaticPath = createNamedRouteNameByStaticPath(namedRouteLookup.recordByName)\n\n return () => {\n let changed = false\n for (const addedRoute of addedRoutes) {\n const currentRoute = namedRouteLookup.recordByName.get(addedRoute.name)\n if (currentRoute === addedRoute) {\n namedRouteLookup.recordByName.delete(addedRoute.name)\n changed = true\n }\n }\n if (changed) {\n namedRouteLookup.nameByStaticPath = createNamedRouteNameByStaticPath(namedRouteLookup.recordByName)\n }\n }\n }) as AddRoute\n\n function removeRoute(name: string): void {\n const namesToRemove = collectRouteNamesForRemoval(name, namedRouteLookup.recordByName)\n if (namesToRemove.size === 0) {\n return\n }\n\n let changed = false\n for (const routeName of namesToRemove) {\n changed = namedRouteLookup.recordByName.delete(routeName) || changed\n }\n if (changed) {\n namedRouteLookup.nameByStaticPath = createNamedRouteNameByStaticPath(namedRouteLookup.recordByName)\n }\n }\n\n function clearRoutes(): void {\n namedRouteLookup.recordByName.clear()\n namedRouteLookup.nameByStaticPath.clear()\n }\n\n return {\n hasRoute,\n getRoutes,\n addRoute,\n removeRoute,\n clearRoutes,\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"routeRegistry.mjs","names":[],"sources":["../../../src/router/routeRegistry.ts"],"sourcesContent":["import type {\n NamedRouteLookup,\n RouteRecordNormalized,\n} from '../routerInternal/shared'\nimport type { AddRoute, RouteRecordRaw } from './types'\nimport {\n assertValidAddRouteInput,\n cloneRouteMeta,\n collectRouteNamesForRemoval,\n createAbsoluteRoutePath,\n createNamedRouteNameByStaticPath,\n flattenNamedRouteRecords,\n normalizeRouteRecordRaw,\n warnRouteConfig,\n} from '../routerInternal/shared'\n\nfunction normalizeRouteRecordForOutput(record: RouteRecordNormalized): RouteRecordRaw {\n const normalizedRoute: RouteRecordRaw = {\n name: record.name,\n path: record.path ? `/${record.path}` : '/',\n }\n if (record.meta !== undefined) {\n normalizedRoute.meta = cloneRouteMeta(record.meta)\n }\n if (record.aliasPaths.length === 1) {\n normalizedRoute.alias = createAbsoluteRoutePath(record.aliasPaths[0])\n }\n else if (record.aliasPaths.length > 1) {\n normalizedRoute.alias = record.aliasPaths.map(aliasPath => createAbsoluteRoutePath(aliasPath))\n }\n if (record.beforeEnterGuards.length === 1) {\n normalizedRoute.beforeEnter = record.beforeEnterGuards[0]\n }\n else if (record.beforeEnterGuards.length > 1) {\n normalizedRoute.beforeEnter = record.beforeEnterGuards.slice()\n }\n if (record.redirect !== undefined) {\n normalizedRoute.redirect = record.redirect\n }\n return normalizedRoute\n}\n\nexport function createRouteRegistry(namedRouteLookup: NamedRouteLookup) {\n const hasRoute = (name: string) => namedRouteLookup.recordByName.has(name)\n const getRoutes = (): readonly RouteRecordRaw[] =>\n Array.from(namedRouteLookup.recordByName.values(), normalizeRouteRecordForOutput)\n\n const addRoute: AddRoute = ((parentNameOrRoute: string | RouteRecordRaw, maybeRoute?: RouteRecordRaw) => {\n const route = typeof parentNameOrRoute === 'string'\n ? maybeRoute\n : parentNameOrRoute\n if (!route) {\n throw new Error('Route record is required when adding a child route')\n }\n assertValidAddRouteInput(route)\n\n const parentRouteName = typeof parentNameOrRoute === 'string'\n ? parentNameOrRoute\n : undefined\n const parentRouteRecord = parentRouteName\n ? namedRouteLookup.recordByName.get(parentRouteName)\n : undefined\n if (parentRouteName && !parentRouteRecord) {\n throw new Error(`Parent route \"${parentRouteName}\" is not defined in createRouter({ routes | namedRoutes })`)\n }\n\n const routeRecords = flattenNamedRouteRecords(\n [route],\n parentRouteRecord?.path,\n parentRouteName,\n parentRouteRecord?.aliasPaths,\n undefined,\n 'addRoute',\n )\n if (routeRecords.length === 0) {\n throw new Error('Route name and path are required when adding a named route')\n }\n const addedRoutes: RouteRecordNormalized[] = []\n for (const routeRecord of routeRecords) {\n const normalizedRoute = normalizeRouteRecordRaw(routeRecord.route, routeRecord.parentName)\n if (!normalizedRoute) {\n continue\n }\n const existingRoute = namedRouteLookup.recordByName.get(normalizedRoute.name)\n if (existingRoute) {\n const namesToRemove = collectRouteNamesForRemoval(existingRoute.name, namedRouteLookup.recordByName)\n for (const routeName of namesToRemove) {\n namedRouteLookup.recordByName.delete(routeName)\n }\n warnRouteConfig(\n `addRoute() replaced existing route \"${normalizedRoute.name}\" (${createAbsoluteRoutePath(existingRoute.path)} -> ${createAbsoluteRoutePath(normalizedRoute.path)}) and removed ${namesToRemove.size - 1} nested route(s)`,\n )\n }\n namedRouteLookup.recordByName.set(normalizedRoute.name, normalizedRoute)\n addedRoutes.push(normalizedRoute)\n }\n namedRouteLookup.nameByStaticPath = createNamedRouteNameByStaticPath(namedRouteLookup.recordByName)\n\n return () => {\n let changed = false\n for (const addedRoute of addedRoutes) {\n const currentRoute = namedRouteLookup.recordByName.get(addedRoute.name)\n if (currentRoute === addedRoute) {\n namedRouteLookup.recordByName.delete(addedRoute.name)\n changed = true\n }\n }\n if (changed) {\n namedRouteLookup.nameByStaticPath = createNamedRouteNameByStaticPath(namedRouteLookup.recordByName)\n }\n }\n }) as AddRoute\n\n function removeRoute(name: string): void {\n const namesToRemove = collectRouteNamesForRemoval(name, namedRouteLookup.recordByName)\n if (namesToRemove.size === 0) {\n return\n }\n\n let changed = false\n for (const routeName of namesToRemove) {\n changed = namedRouteLookup.recordByName.delete(routeName) || changed\n }\n if (changed) {\n namedRouteLookup.nameByStaticPath = createNamedRouteNameByStaticPath(namedRouteLookup.recordByName)\n }\n }\n\n function clearRoutes(): void {\n namedRouteLookup.recordByName.clear()\n namedRouteLookup.nameByStaticPath.clear()\n }\n\n return {\n hasRoute,\n getRoutes,\n addRoute,\n removeRoute,\n clearRoutes,\n }\n}\n"],"mappings":"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"}
@@ -19,7 +19,7 @@ function registerRouteStateSyncHandler(handler) {
19
19
  function notifyRouteStateSync(payload) {
20
20
  for (const handler of routeStateSyncHandlers) try {
21
21
  handler(payload);
22
- } catch (_unused) {}
22
+ } catch {}
23
23
  }
24
24
  function createNativeRouteStateSyncPayload(methodName, option, sourcePage) {
25
25
  if (methodName === "navigateBack") return {
@@ -1 +1 @@
1
- {"version":3,"file":"routeSync.mjs","names":[],"sources":["../../../src/router/routeSync.ts"],"sourcesContent":["import type { MiniProgramPageLike } from '../routerInternal/shared'\nimport type { RouteLocationNormalizedLoaded } from './types'\nimport { getCurrentMiniProgramPages } from '../runtime/platform'\n\nexport interface RouteStateSyncPayload {\n page?: MiniProgramPageLike\n route?: RouteLocationNormalizedLoaded\n url?: string\n source?: 'native' | 'page' | 'router'\n method?: NativeRouterMethodName\n}\n\ntype RouteStateSyncHandler = (payload?: RouteStateSyncPayload) => void\ntype NativeRouterMethodName = 'switchTab' | 'reLaunch' | 'redirectTo' | 'navigateTo' | 'navigateBack'\n\nconst ROUTE_SYNC_NATIVE_METHODS: readonly NativeRouterMethodName[] = ['switchTab', 'reLaunch', 'redirectTo', 'navigateTo', 'navigateBack']\nconst routeStateSyncHandlers = new Set<RouteStateSyncHandler>()\nconst patchedNativeRouters = new WeakSet<Record<string, any>>()\n\nexport function registerRouteStateSyncHandler(handler: RouteStateSyncHandler): () => void {\n routeStateSyncHandlers.add(handler)\n return () => {\n routeStateSyncHandlers.delete(handler)\n }\n}\n\nexport function notifyRouteStateSync(payload?: RouteStateSyncPayload) {\n for (const handler of routeStateSyncHandlers) {\n try {\n handler(payload)\n }\n catch {\n // 忽略单个 route 订阅者异常,避免阻塞原生导航成功回调。\n }\n }\n}\n\nfunction createNativeRouteStateSyncPayload(\n methodName: NativeRouterMethodName,\n option: unknown,\n sourcePage: MiniProgramPageLike | undefined,\n): RouteStateSyncPayload | undefined {\n if (methodName === 'navigateBack') {\n return {\n method: methodName,\n source: 'native',\n }\n }\n if (option && typeof option === 'object') {\n const url = (option as Record<string, unknown>).url\n if (typeof url === 'string') {\n return {\n method: methodName,\n page: sourcePage,\n source: 'native',\n url,\n }\n }\n }\n return {\n method: methodName,\n page: sourcePage,\n source: 'native',\n }\n}\n\nexport function installRouteStateSyncOnNativeRouter(nativeRouter: unknown) {\n if (!nativeRouter || typeof nativeRouter !== 'object') {\n return\n }\n const router = nativeRouter as Record<string, any>\n if (patchedNativeRouters.has(router)) {\n return\n }\n patchedNativeRouters.add(router)\n\n for (const methodName of ROUTE_SYNC_NATIVE_METHODS) {\n const original = router[methodName]\n if (typeof original !== 'function') {\n continue\n }\n\n router[methodName] = function routeStateSyncNativeRouterMethod(this: unknown, option?: unknown, ...args: any[]) {\n const pages = getCurrentMiniProgramPages() as MiniProgramPageLike[]\n const sourcePage = pages[pages.length - 1]\n let synced = false\n const syncRouteState = () => {\n if (synced) {\n return\n }\n synced = true\n notifyRouteStateSync(createNativeRouteStateSyncPayload(methodName, option, sourcePage))\n }\n\n const nextOption = option && typeof option === 'object'\n ? {\n ...(option as Record<string, any>),\n success: (...successArgs: any[]) => {\n syncRouteState()\n const originalSuccess = (option as Record<string, any>).success\n return typeof originalSuccess === 'function'\n ? originalSuccess(...successArgs)\n : undefined\n },\n }\n : option\n\n const result = original.call(this, nextOption, ...args)\n if (result && typeof (result as PromiseLike<unknown>).then === 'function') {\n ;(result as PromiseLike<unknown>).then(syncRouteState, () => {})\n }\n return result\n }\n }\n}\n"],"mappings":";;;AAeA,MAAM,4BAA+D;CAAC;CAAa;CAAY;CAAc;CAAc;AAAc;AACzI,MAAM,yCAAyB,IAAI,IAA2B;AAC9D,MAAM,uCAAuB,IAAI,QAA6B;AAE9D,SAAgB,8BAA8B,SAA4C;CACxF,uBAAuB,IAAI,OAAO;CAClC,aAAa;EACX,uBAAuB,OAAO,OAAO;CACvC;AACF;AAEA,SAAgB,qBAAqB,SAAiC;CACpE,KAAK,MAAM,WAAW,wBACpB,IAAI;EACF,QAAQ,OAAO;CACjB,kBACM,CAEN;AAEJ;AAEA,SAAS,kCACP,YACA,QACA,YACmC;CACnC,IAAI,eAAe,gBACjB,OAAO;EACL,QAAQ;EACR,QAAQ;CACV;CAEF,IAAI,UAAU,OAAO,WAAW,UAAU;EACxC,MAAM,MAAO,OAAmC;EAChD,IAAI,OAAO,QAAQ,UACjB,OAAO;GACL,QAAQ;GACR,MAAM;GACN,QAAQ;GACR;EACF;CAEJ;CACA,OAAO;EACL,QAAQ;EACR,MAAM;EACN,QAAQ;CACV;AACF;AAEA,SAAgB,oCAAoC,cAAuB;CACzE,IAAI,CAAC,gBAAgB,OAAO,iBAAiB,UAC3C;CAEF,MAAM,SAAS;CACf,IAAI,qBAAqB,IAAI,MAAM,GACjC;CAEF,qBAAqB,IAAI,MAAM;CAE/B,KAAK,MAAM,cAAc,2BAA2B;EAClD,MAAM,WAAW,OAAO;EACxB,IAAI,OAAO,aAAa,YACtB;EAGF,OAAO,cAAc,SAAS,iCAAgD,QAAkB,GAAG,MAAa;GAC9G,MAAM,QAAQ,2BAA2B;GACzC,MAAM,aAAa,MAAM,MAAM,SAAS;GACxC,IAAI,SAAS;GACb,MAAM,uBAAuB;IAC3B,IAAI,QACF;IAEF,SAAS;IACT,qBAAqB,kCAAkC,YAAY,QAAQ,UAAU,CAAC;GACxF;GAEA,MAAM,aAAa,UAAU,OAAO,WAAW,WAC3C;IACE,GAAI;IACJ,UAAU,GAAG,gBAAuB;KAClC,eAAe;KACf,MAAM,kBAAmB,OAA+B;KACxD,OAAO,OAAO,oBAAoB,aAC9B,gBAAgB,GAAG,WAAW,IAC9B;IACN;GACF,IACA;GAEJ,MAAM,SAAS,SAAS,KAAK,MAAM,YAAY,GAAG,IAAI;GACtD,IAAI,UAAU,OAAQ,OAAgC,SAAS,YAC5D,AAAC,OAAgC,KAAK,sBAAsB,CAAC,CAAC;GAEjE,OAAO;EACT;CACF;AACF"}
1
+ {"version":3,"file":"routeSync.mjs","names":[],"sources":["../../../src/router/routeSync.ts"],"sourcesContent":["import type { MiniProgramPageLike } from '../routerInternal/shared'\nimport type { RouteLocationNormalizedLoaded } from './types'\nimport { getCurrentMiniProgramPages } from '../runtime/platform'\n\nexport interface RouteStateSyncPayload {\n page?: MiniProgramPageLike\n route?: RouteLocationNormalizedLoaded\n url?: string\n source?: 'native' | 'page' | 'router'\n method?: NativeRouterMethodName\n}\n\ntype RouteStateSyncHandler = (payload?: RouteStateSyncPayload) => void\ntype NativeRouterMethodName = 'switchTab' | 'reLaunch' | 'redirectTo' | 'navigateTo' | 'navigateBack'\n\nconst ROUTE_SYNC_NATIVE_METHODS: readonly NativeRouterMethodName[] = ['switchTab', 'reLaunch', 'redirectTo', 'navigateTo', 'navigateBack']\nconst routeStateSyncHandlers = new Set<RouteStateSyncHandler>()\nconst patchedNativeRouters = new WeakSet<Record<string, any>>()\n\nexport function registerRouteStateSyncHandler(handler: RouteStateSyncHandler): () => void {\n routeStateSyncHandlers.add(handler)\n return () => {\n routeStateSyncHandlers.delete(handler)\n }\n}\n\nexport function notifyRouteStateSync(payload?: RouteStateSyncPayload) {\n for (const handler of routeStateSyncHandlers) {\n try {\n handler(payload)\n }\n catch {\n // 忽略单个 route 订阅者异常,避免阻塞原生导航成功回调。\n }\n }\n}\n\nfunction createNativeRouteStateSyncPayload(\n methodName: NativeRouterMethodName,\n option: unknown,\n sourcePage: MiniProgramPageLike | undefined,\n): RouteStateSyncPayload | undefined {\n if (methodName === 'navigateBack') {\n return {\n method: methodName,\n source: 'native',\n }\n }\n if (option && typeof option === 'object') {\n const url = (option as Record<string, unknown>).url\n if (typeof url === 'string') {\n return {\n method: methodName,\n page: sourcePage,\n source: 'native',\n url,\n }\n }\n }\n return {\n method: methodName,\n page: sourcePage,\n source: 'native',\n }\n}\n\nexport function installRouteStateSyncOnNativeRouter(nativeRouter: unknown) {\n if (!nativeRouter || typeof nativeRouter !== 'object') {\n return\n }\n const router = nativeRouter as Record<string, any>\n if (patchedNativeRouters.has(router)) {\n return\n }\n patchedNativeRouters.add(router)\n\n for (const methodName of ROUTE_SYNC_NATIVE_METHODS) {\n const original = router[methodName]\n if (typeof original !== 'function') {\n continue\n }\n\n router[methodName] = function routeStateSyncNativeRouterMethod(this: unknown, option?: unknown, ...args: any[]) {\n const pages = getCurrentMiniProgramPages() as MiniProgramPageLike[]\n const sourcePage = pages[pages.length - 1]\n let synced = false\n const syncRouteState = () => {\n if (synced) {\n return\n }\n synced = true\n notifyRouteStateSync(createNativeRouteStateSyncPayload(methodName, option, sourcePage))\n }\n\n const nextOption = option && typeof option === 'object'\n ? {\n ...(option as Record<string, any>),\n success: (...successArgs: any[]) => {\n syncRouteState()\n const originalSuccess = (option as Record<string, any>).success\n return typeof originalSuccess === 'function'\n ? originalSuccess(...successArgs)\n : undefined\n },\n }\n : option\n\n const result = original.call(this, nextOption, ...args)\n if (result && typeof (result as PromiseLike<unknown>).then === 'function') {\n ;(result as PromiseLike<unknown>).then(syncRouteState, () => {})\n }\n return result\n }\n }\n}\n"],"mappings":";;;AAeA,MAAM,4BAA+D;CAAC;CAAa;CAAY;CAAc;CAAc;AAAc;AACzI,MAAM,yCAAyB,IAAI,IAA2B;AAC9D,MAAM,uCAAuB,IAAI,QAA6B;AAE9D,SAAgB,8BAA8B,SAA4C;CACxF,uBAAuB,IAAI,OAAO;CAClC,aAAa;EACX,uBAAuB,OAAO,OAAO;CACvC;AACF;AAEA,SAAgB,qBAAqB,SAAiC;CACpE,KAAK,MAAM,WAAW,wBACpB,IAAI;EACF,QAAQ,OAAO;CACjB,QACM,CAEN;AAEJ;AAEA,SAAS,kCACP,YACA,QACA,YACmC;CACnC,IAAI,eAAe,gBACjB,OAAO;EACL,QAAQ;EACR,QAAQ;CACV;CAEF,IAAI,UAAU,OAAO,WAAW,UAAU;EACxC,MAAM,MAAO,OAAmC;EAChD,IAAI,OAAO,QAAQ,UACjB,OAAO;GACL,QAAQ;GACR,MAAM;GACN,QAAQ;GACR;EACF;CAEJ;CACA,OAAO;EACL,QAAQ;EACR,MAAM;EACN,QAAQ;CACV;AACF;AAEA,SAAgB,oCAAoC,cAAuB;CACzE,IAAI,CAAC,gBAAgB,OAAO,iBAAiB,UAC3C;CAEF,MAAM,SAAS;CACf,IAAI,qBAAqB,IAAI,MAAM,GACjC;CAEF,qBAAqB,IAAI,MAAM;CAE/B,KAAK,MAAM,cAAc,2BAA2B;EAClD,MAAM,WAAW,OAAO;EACxB,IAAI,OAAO,aAAa,YACtB;EAGF,OAAO,cAAc,SAAS,iCAAgD,QAAkB,GAAG,MAAa;GAC9G,MAAM,QAAQ,2BAA2B;GACzC,MAAM,aAAa,MAAM,MAAM,SAAS;GACxC,IAAI,SAAS;GACb,MAAM,uBAAuB;IAC3B,IAAI,QACF;IAEF,SAAS;IACT,qBAAqB,kCAAkC,YAAY,QAAQ,UAAU,CAAC;GACxF;GAEA,MAAM,aAAa,UAAU,OAAO,WAAW,WAC3C;IACE,GAAI;IACJ,UAAU,GAAG,gBAAuB;KAClC,eAAe;KACf,MAAM,kBAAmB,OAA+B;KACxD,OAAO,OAAO,oBAAoB,aAC9B,gBAAgB,GAAG,WAAW,IAC9B;IACN;GACF,IACA;GAEJ,MAAM,SAAS,SAAS,KAAK,MAAM,YAAY,GAAG,IAAI;GACtD,IAAI,UAAU,OAAQ,OAAgC,SAAS,YAC5D,AAAC,OAAgC,KAAK,sBAAsB,CAAC,CAAC;GAEjE,OAAO;EACT;CACF;AACF"}
@@ -3,11 +3,11 @@ import { readonly } from "../reactivity/readonly.mjs";
3
3
  import { getCurrentMiniProgramPages } from "../runtime/platform.mjs";
4
4
  import { getCurrentSetupContext } from "../runtime/hooks/base.mjs";
5
5
  import { onLoad, onReady, onRouteDone, onShow, onUnload } from "../runtime/hooks/register.mjs";
6
- import { getActiveRouter } from "./instance.mjs";
7
6
  import { registerRouteStateSyncHandler } from "./routeSync.mjs";
8
7
  import { resolveCurrentRoute, resolvePageRoute } from "../routerInternal/location.mjs";
9
8
  import { cloneLocationQuery, cloneRouteLocationRedirectedFrom, cloneRouteMeta, cloneRouteParams, cloneRouteRecordMatchedList } from "../routerInternal/snapshots.mjs";
10
9
  import { useNativePageRouter as useNativePageRouter$1, useNativeRouter as useNativeRouter$1 } from "../runtime/vueCompat/router.mjs";
10
+ import { getActiveRouter } from "./instance.mjs";
11
11
  import { resolveRouteLocation } from "./resolve.mjs";
12
12
  import { WEVU_NATIVE_INSTANCE_KEY } from "@weapp-core/constants";
13
13
 
@@ -20,10 +20,10 @@ function resolveRouteControllerInstance(instance) {
20
20
  return nativeInstance && typeof nativeInstance === "object" ? nativeInstance : instance;
21
21
  }
22
22
  function shouldSyncRouteStateForInstance(instance, isPageController, payload) {
23
- if ((payload === null || payload === void 0 ? void 0 : payload.source) === "router") return true;
23
+ if (payload?.source === "router") return true;
24
24
  if (!isPageController) return true;
25
25
  const routeControllerInstance = resolveRouteControllerInstance(instance);
26
- if (payload === null || payload === void 0 ? void 0 : payload.page) return payload.page === routeControllerInstance;
26
+ if (payload?.page) return payload.page === routeControllerInstance;
27
27
  const pages = getCurrentMiniProgramPages();
28
28
  return pages[pages.length - 1] === routeControllerInstance;
29
29
  }
@@ -45,13 +45,9 @@ function applyRouteState(routeState, nextRoute) {
45
45
  else routeState.redirectedFrom = cloneRouteLocationRedirectedFrom(nextRoute.redirectedFrom);
46
46
  }
47
47
  function createRouteStateController(options = {}) {
48
- var _options$resolveRoute;
49
48
  const setupContext = getCurrentSetupContext();
50
- const fallbackPage = (setupContext === null || setupContext === void 0 ? void 0 : setupContext.instance) && typeof setupContext.instance === "object" ? setupContext.instance : void 0;
51
- const resolveRoute = (_options$resolveRoute = options.resolveRoute) !== null && _options$resolveRoute !== void 0 ? _options$resolveRoute : ((route) => {
52
- var _getActiveRouter$reso, _getActiveRouter;
53
- return (_getActiveRouter$reso = (_getActiveRouter = getActiveRouter()) === null || _getActiveRouter === void 0 ? void 0 : _getActiveRouter.resolve(route)) !== null && _getActiveRouter$reso !== void 0 ? _getActiveRouter$reso : route;
54
- });
49
+ const fallbackPage = setupContext?.instance && typeof setupContext.instance === "object" ? setupContext.instance : void 0;
50
+ const resolveRoute = options.resolveRoute ?? ((route) => getActiveRouter()?.resolve(route) ?? route);
55
51
  const currentRoute = resolveRoute(resolveCurrentRoute(void 0, fallbackPage));
56
52
  const routeState = reactive({
57
53
  path: currentRoute.path,
@@ -63,23 +59,20 @@ function createRouteStateController(options = {}) {
63
59
  applyRouteState(routeState, currentRoute);
64
60
  function syncRoute(queryOverride, routeOverride, payload) {
65
61
  const nextRoute = routeOverride ? resolveRoute(routeOverride) : resolveRoute(resolveCurrentRoute(queryOverride, fallbackPage));
66
- if (payload) {
67
- var _options$beforeRouteS;
68
- (_options$beforeRouteS = options.beforeRouteStateSync) === null || _options$beforeRouteS === void 0 || _options$beforeRouteS.call(options, nextRoute, payload);
69
- }
62
+ if (payload) options.beforeRouteStateSync?.(nextRoute, payload);
70
63
  applyRouteState(routeState, nextRoute);
71
64
  }
72
65
  if (!fallbackPage) {
73
66
  registerRouteStateSyncHandler((payload) => {
74
- if (payload === null || payload === void 0 ? void 0 : payload.route) {
67
+ if (payload?.route) {
75
68
  syncRoute(void 0, payload.route, payload);
76
69
  return;
77
70
  }
78
- if (payload === null || payload === void 0 ? void 0 : payload.url) {
71
+ if (payload?.url) {
79
72
  syncRoute(void 0, resolveRouteLocation(payload.url, routeState.path), payload);
80
73
  return;
81
74
  }
82
- if (payload === null || payload === void 0 ? void 0 : payload.page) {
75
+ if (payload?.page) {
83
76
  syncRoute(void 0, resolvePageRoute(payload.page), payload);
84
77
  return;
85
78
  }
@@ -104,15 +97,15 @@ function createRouteStateController(options = {}) {
104
97
  });
105
98
  const unregisterRouteStateSync = registerRouteStateSyncHandler((payload) => {
106
99
  if (!shouldSyncRouteStateForInstance(pageInstance, isPageController, payload)) return;
107
- if (payload === null || payload === void 0 ? void 0 : payload.route) {
100
+ if (payload?.route) {
108
101
  syncRoute(void 0, payload.route, payload);
109
102
  return;
110
103
  }
111
- if (payload === null || payload === void 0 ? void 0 : payload.url) {
104
+ if (payload?.url) {
112
105
  syncRoute(void 0, resolveRouteLocation(payload.url, routeState.path), payload);
113
106
  return;
114
107
  }
115
- if (payload === null || payload === void 0 ? void 0 : payload.page) {
108
+ if (payload?.page) {
116
109
  syncRoute(void 0, resolvePageRoute(payload.page), payload);
117
110
  return;
118
111
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useRoute.mjs","names":["runtimeOptions","useNativeRouterInternal","useNativePageRouterInternal"],"sources":["../../../src/router/useRoute.ts"],"sourcesContent":["import type { WevuNamedRouteMap } from '../router'\nimport type { MiniProgramPageLike } from '../routerInternal/types'\nimport type { MiniProgramPageLifetime } from '../runtime/types'\nimport type { SetupContextRouter } from '../runtime/types/props'\nimport type { RouteStateSyncPayload } from './routeSync'\nimport type { LocationQueryRaw, RouteLocationNormalizedLoaded } from './types'\nimport { WEVU_NATIVE_INSTANCE_KEY } from '@weapp-core/constants'\nimport { reactive, readonly } from '../reactivity'\nimport { cloneLocationQuery, cloneRouteLocationRedirectedFrom, cloneRouteMeta, cloneRouteParams, cloneRouteRecordMatchedList, resolveCurrentRoute, resolvePageRoute } from '../routerInternal/shared'\nimport { getCurrentSetupContext, onLoad, onReady, onRouteDone, onShow, onUnload } from '../runtime/hooks'\nimport { getCurrentMiniProgramPages } from '../runtime/platform'\nimport {\n useNativePageRouter as useNativePageRouterInternal,\n useNativeRouter as useNativeRouterInternal,\n} from '../runtime/vueCompat'\nimport { getActiveRouter } from './instance'\nimport { resolveRouteLocation } from './resolve'\nimport { registerRouteStateSyncHandler } from './routeSync'\n\nexport interface UseRouteOptions<TRouteMap extends object = WevuNamedRouteMap> {\n resolveRoute?: (\n route: RouteLocationNormalizedLoaded<TRouteMap>,\n ) => RouteLocationNormalizedLoaded<TRouteMap>\n}\n\ninterface RouteStateControllerOptions extends UseRouteOptions {\n beforeRouteStateSync?: (\n nextRoute: RouteLocationNormalizedLoaded,\n payload: RouteStateSyncPayload,\n ) => void\n}\n\nexport interface RouteStateController {\n route: Readonly<RouteLocationNormalizedLoaded>\n}\n\nfunction isPageLikeInstance(instance: Record<string, any>): boolean {\n return typeof instance.route === 'string' || typeof instance.__route__ === 'string'\n}\n\nfunction resolveRouteControllerInstance(instance: Record<string, any>): Record<string, any> {\n const nativeInstance = instance[WEVU_NATIVE_INSTANCE_KEY]\n return nativeInstance && typeof nativeInstance === 'object'\n ? nativeInstance\n : instance\n}\n\nfunction shouldSyncRouteStateForInstance(\n instance: Record<string, any>,\n isPageController: boolean,\n payload: RouteStateSyncPayload | undefined,\n): boolean {\n if (payload?.source === 'router') {\n return true\n }\n\n // 页面级 route controller 只处理当前页面的广播,避免 DevTools 在 onUnload/onShow\n // 交错时让隐藏页面重复执行导航守卫。组件级 controller 仍接收全局同步。\n if (!isPageController) {\n return true\n }\n\n const routeControllerInstance = resolveRouteControllerInstance(instance)\n if (payload?.page) {\n return payload.page === routeControllerInstance\n }\n\n const pages = getCurrentMiniProgramPages()\n return pages[pages.length - 1] === routeControllerInstance\n}\n\nfunction applyRouteState(\n routeState: RouteLocationNormalizedLoaded,\n nextRoute: RouteLocationNormalizedLoaded,\n) {\n routeState.path = nextRoute.path\n routeState.fullPath = nextRoute.fullPath\n routeState.query = cloneLocationQuery(nextRoute.query)\n routeState.hash = nextRoute.hash\n routeState.params = cloneRouteParams(nextRoute.params)\n if (nextRoute.name === undefined) {\n delete (routeState as Partial<RouteLocationNormalizedLoaded>).name\n }\n else {\n routeState.name = nextRoute.name\n }\n if (nextRoute.meta === undefined) {\n delete (routeState as Partial<RouteLocationNormalizedLoaded>).meta\n }\n else {\n routeState.meta = cloneRouteMeta(nextRoute.meta)\n }\n if (nextRoute.href === undefined) {\n delete (routeState as Partial<RouteLocationNormalizedLoaded>).href\n }\n else {\n routeState.href = nextRoute.href\n }\n if (nextRoute.matched === undefined) {\n delete (routeState as Partial<RouteLocationNormalizedLoaded>).matched\n }\n else {\n routeState.matched = cloneRouteRecordMatchedList(nextRoute.matched)\n }\n if (nextRoute.redirectedFrom === undefined) {\n delete (routeState as Partial<RouteLocationNormalizedLoaded>).redirectedFrom\n }\n else {\n routeState.redirectedFrom = cloneRouteLocationRedirectedFrom(nextRoute.redirectedFrom)\n }\n}\n\nexport function createRouteStateController(options: RouteStateControllerOptions = {}): RouteStateController {\n const setupContext = getCurrentSetupContext<{ instance?: unknown }>()\n const fallbackPage = setupContext?.instance && typeof setupContext.instance === 'object'\n ? setupContext.instance as MiniProgramPageLike & Record<string, unknown>\n : undefined\n const resolveRoute = options.resolveRoute\n ?? ((route: RouteLocationNormalizedLoaded) => getActiveRouter()?.resolve(route) ?? route)\n const currentRoute = resolveRoute(resolveCurrentRoute(undefined, fallbackPage))\n const routeState = reactive<RouteLocationNormalizedLoaded>({\n path: currentRoute.path,\n fullPath: currentRoute.fullPath,\n query: cloneLocationQuery(currentRoute.query),\n hash: currentRoute.hash,\n params: cloneRouteParams(currentRoute.params),\n })\n applyRouteState(routeState, currentRoute)\n\n function syncRoute(\n queryOverride?: LocationQueryRaw,\n routeOverride?: RouteLocationNormalizedLoaded,\n payload?: RouteStateSyncPayload,\n ) {\n const nextRoute = routeOverride\n ? resolveRoute(routeOverride)\n : resolveRoute(resolveCurrentRoute(queryOverride, fallbackPage))\n if (payload) {\n options.beforeRouteStateSync?.(nextRoute, payload)\n }\n applyRouteState(routeState, nextRoute)\n }\n\n if (!fallbackPage) {\n const unregisterRouteStateSync = registerRouteStateSyncHandler((payload) => {\n if (payload?.route) {\n syncRoute(undefined, payload.route, payload)\n return\n }\n if (payload?.url) {\n syncRoute(undefined, resolveRouteLocation(payload.url, routeState.path), payload)\n return\n }\n if (payload?.page) {\n syncRoute(undefined, resolvePageRoute(payload.page), payload)\n return\n }\n syncRoute(undefined, undefined, payload)\n })\n void unregisterRouteStateSync\n return {\n route: readonly(routeState) as Readonly<RouteLocationNormalizedLoaded>,\n }\n }\n\n const pageInstance = fallbackPage\n const initialRouteControllerInstance = resolveRouteControllerInstance(pageInstance)\n const isPageController = isPageLikeInstance(initialRouteControllerInstance)\n || getCurrentMiniProgramPages().includes(initialRouteControllerInstance)\n\n onLoad((query: Parameters<NonNullable<MiniProgramPageLifetime['onLoad']>>[0]) => {\n syncRoute(query as unknown as LocationQueryRaw)\n })\n onReady(() => {\n syncRoute()\n })\n onShow(() => {\n syncRoute()\n })\n onRouteDone(() => {\n syncRoute()\n })\n const unregisterRouteStateSync = registerRouteStateSyncHandler((payload) => {\n if (!shouldSyncRouteStateForInstance(pageInstance, isPageController, payload)) {\n return\n }\n if (payload?.route) {\n syncRoute(undefined, payload.route, payload)\n return\n }\n if (payload?.url) {\n syncRoute(undefined, resolveRouteLocation(payload.url, routeState.path), payload)\n return\n }\n if (payload?.page) {\n syncRoute(undefined, resolvePageRoute(payload.page), payload)\n return\n }\n syncRoute(undefined, undefined, payload)\n })\n onUnload(() => {\n unregisterRouteStateSync()\n })\n\n return {\n route: readonly(routeState) as Readonly<RouteLocationNormalizedLoaded>,\n }\n}\n\nexport function useRoute<TRouteMap extends object = WevuNamedRouteMap>(\n options: UseRouteOptions<NoInfer<TRouteMap>> = {},\n): Readonly<RouteLocationNormalizedLoaded<TRouteMap>> {\n // 路由表泛型只收窄公开快照;状态同步仍复用同一个运行时控制器。\n const runtimeOptions = options as unknown as UseRouteOptions\n const route = createRouteStateController(runtimeOptions).route\n return route as unknown as Readonly<RouteLocationNormalizedLoaded<TRouteMap>>\n}\n\n/**\n * @description 获取当前组件路径语义的原生 Router\n */\nexport function useNativeRouter(): SetupContextRouter {\n return useNativeRouterInternal()\n}\n\n/**\n * @description 获取当前页面路径语义的原生 Page Router\n */\nexport function useNativePageRouter(): SetupContextRouter {\n return useNativePageRouterInternal()\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useRoute.mjs","names":["runtimeOptions","useNativeRouterInternal","useNativePageRouterInternal"],"sources":["../../../src/router/useRoute.ts"],"sourcesContent":["import type { WevuNamedRouteMap } from '../router'\nimport type { MiniProgramPageLike } from '../routerInternal/types'\nimport type { MiniProgramPageLifetime } from '../runtime/types'\nimport type { SetupContextRouter } from '../runtime/types/props'\nimport type { RouteStateSyncPayload } from './routeSync'\nimport type { LocationQueryRaw, RouteLocationNormalizedLoaded } from './types'\nimport { WEVU_NATIVE_INSTANCE_KEY } from '@weapp-core/constants'\nimport { reactive, readonly } from '../reactivity'\nimport { cloneLocationQuery, cloneRouteLocationRedirectedFrom, cloneRouteMeta, cloneRouteParams, cloneRouteRecordMatchedList, resolveCurrentRoute, resolvePageRoute } from '../routerInternal/shared'\nimport { getCurrentSetupContext, onLoad, onReady, onRouteDone, onShow, onUnload } from '../runtime/hooks'\nimport { getCurrentMiniProgramPages } from '../runtime/platform'\nimport {\n useNativePageRouter as useNativePageRouterInternal,\n useNativeRouter as useNativeRouterInternal,\n} from '../runtime/vueCompat'\nimport { getActiveRouter } from './instance'\nimport { resolveRouteLocation } from './resolve'\nimport { registerRouteStateSyncHandler } from './routeSync'\n\nexport interface UseRouteOptions<TRouteMap extends object = WevuNamedRouteMap> {\n resolveRoute?: (\n route: RouteLocationNormalizedLoaded<TRouteMap>,\n ) => RouteLocationNormalizedLoaded<TRouteMap>\n}\n\ninterface RouteStateControllerOptions extends UseRouteOptions {\n beforeRouteStateSync?: (\n nextRoute: RouteLocationNormalizedLoaded,\n payload: RouteStateSyncPayload,\n ) => void\n}\n\nexport interface RouteStateController {\n route: Readonly<RouteLocationNormalizedLoaded>\n}\n\nfunction isPageLikeInstance(instance: Record<string, any>): boolean {\n return typeof instance.route === 'string' || typeof instance.__route__ === 'string'\n}\n\nfunction resolveRouteControllerInstance(instance: Record<string, any>): Record<string, any> {\n const nativeInstance = instance[WEVU_NATIVE_INSTANCE_KEY]\n return nativeInstance && typeof nativeInstance === 'object'\n ? nativeInstance\n : instance\n}\n\nfunction shouldSyncRouteStateForInstance(\n instance: Record<string, any>,\n isPageController: boolean,\n payload: RouteStateSyncPayload | undefined,\n): boolean {\n if (payload?.source === 'router') {\n return true\n }\n\n // 页面级 route controller 只处理当前页面的广播,避免 DevTools 在 onUnload/onShow\n // 交错时让隐藏页面重复执行导航守卫。组件级 controller 仍接收全局同步。\n if (!isPageController) {\n return true\n }\n\n const routeControllerInstance = resolveRouteControllerInstance(instance)\n if (payload?.page) {\n return payload.page === routeControllerInstance\n }\n\n const pages = getCurrentMiniProgramPages()\n return pages[pages.length - 1] === routeControllerInstance\n}\n\nfunction applyRouteState(\n routeState: RouteLocationNormalizedLoaded,\n nextRoute: RouteLocationNormalizedLoaded,\n) {\n routeState.path = nextRoute.path\n routeState.fullPath = nextRoute.fullPath\n routeState.query = cloneLocationQuery(nextRoute.query)\n routeState.hash = nextRoute.hash\n routeState.params = cloneRouteParams(nextRoute.params)\n if (nextRoute.name === undefined) {\n delete (routeState as Partial<RouteLocationNormalizedLoaded>).name\n }\n else {\n routeState.name = nextRoute.name\n }\n if (nextRoute.meta === undefined) {\n delete (routeState as Partial<RouteLocationNormalizedLoaded>).meta\n }\n else {\n routeState.meta = cloneRouteMeta(nextRoute.meta)\n }\n if (nextRoute.href === undefined) {\n delete (routeState as Partial<RouteLocationNormalizedLoaded>).href\n }\n else {\n routeState.href = nextRoute.href\n }\n if (nextRoute.matched === undefined) {\n delete (routeState as Partial<RouteLocationNormalizedLoaded>).matched\n }\n else {\n routeState.matched = cloneRouteRecordMatchedList(nextRoute.matched)\n }\n if (nextRoute.redirectedFrom === undefined) {\n delete (routeState as Partial<RouteLocationNormalizedLoaded>).redirectedFrom\n }\n else {\n routeState.redirectedFrom = cloneRouteLocationRedirectedFrom(nextRoute.redirectedFrom)\n }\n}\n\nexport function createRouteStateController(options: RouteStateControllerOptions = {}): RouteStateController {\n const setupContext = getCurrentSetupContext<{ instance?: unknown }>()\n const fallbackPage = setupContext?.instance && typeof setupContext.instance === 'object'\n ? setupContext.instance as MiniProgramPageLike & Record<string, unknown>\n : undefined\n const resolveRoute = options.resolveRoute\n ?? ((route: RouteLocationNormalizedLoaded) => getActiveRouter()?.resolve(route) ?? route)\n const currentRoute = resolveRoute(resolveCurrentRoute(undefined, fallbackPage))\n const routeState = reactive<RouteLocationNormalizedLoaded>({\n path: currentRoute.path,\n fullPath: currentRoute.fullPath,\n query: cloneLocationQuery(currentRoute.query),\n hash: currentRoute.hash,\n params: cloneRouteParams(currentRoute.params),\n })\n applyRouteState(routeState, currentRoute)\n\n function syncRoute(\n queryOverride?: LocationQueryRaw,\n routeOverride?: RouteLocationNormalizedLoaded,\n payload?: RouteStateSyncPayload,\n ) {\n const nextRoute = routeOverride\n ? resolveRoute(routeOverride)\n : resolveRoute(resolveCurrentRoute(queryOverride, fallbackPage))\n if (payload) {\n options.beforeRouteStateSync?.(nextRoute, payload)\n }\n applyRouteState(routeState, nextRoute)\n }\n\n if (!fallbackPage) {\n const unregisterRouteStateSync = registerRouteStateSyncHandler((payload) => {\n if (payload?.route) {\n syncRoute(undefined, payload.route, payload)\n return\n }\n if (payload?.url) {\n syncRoute(undefined, resolveRouteLocation(payload.url, routeState.path), payload)\n return\n }\n if (payload?.page) {\n syncRoute(undefined, resolvePageRoute(payload.page), payload)\n return\n }\n syncRoute(undefined, undefined, payload)\n })\n void unregisterRouteStateSync\n return {\n route: readonly(routeState) as Readonly<RouteLocationNormalizedLoaded>,\n }\n }\n\n const pageInstance = fallbackPage\n const initialRouteControllerInstance = resolveRouteControllerInstance(pageInstance)\n const isPageController = isPageLikeInstance(initialRouteControllerInstance)\n || getCurrentMiniProgramPages().includes(initialRouteControllerInstance)\n\n onLoad((query: Parameters<NonNullable<MiniProgramPageLifetime['onLoad']>>[0]) => {\n syncRoute(query as unknown as LocationQueryRaw)\n })\n onReady(() => {\n syncRoute()\n })\n onShow(() => {\n syncRoute()\n })\n onRouteDone(() => {\n syncRoute()\n })\n const unregisterRouteStateSync = registerRouteStateSyncHandler((payload) => {\n if (!shouldSyncRouteStateForInstance(pageInstance, isPageController, payload)) {\n return\n }\n if (payload?.route) {\n syncRoute(undefined, payload.route, payload)\n return\n }\n if (payload?.url) {\n syncRoute(undefined, resolveRouteLocation(payload.url, routeState.path), payload)\n return\n }\n if (payload?.page) {\n syncRoute(undefined, resolvePageRoute(payload.page), payload)\n return\n }\n syncRoute(undefined, undefined, payload)\n })\n onUnload(() => {\n unregisterRouteStateSync()\n })\n\n return {\n route: readonly(routeState) as Readonly<RouteLocationNormalizedLoaded>,\n }\n}\n\nexport function useRoute<TRouteMap extends object = WevuNamedRouteMap>(\n options: UseRouteOptions<NoInfer<TRouteMap>> = {},\n): Readonly<RouteLocationNormalizedLoaded<TRouteMap>> {\n // 路由表泛型只收窄公开快照;状态同步仍复用同一个运行时控制器。\n const runtimeOptions = options as unknown as UseRouteOptions\n const route = createRouteStateController(runtimeOptions).route\n return route as unknown as Readonly<RouteLocationNormalizedLoaded<TRouteMap>>\n}\n\n/**\n * @description 获取当前组件路径语义的原生 Router\n */\nexport function useNativeRouter(): SetupContextRouter {\n return useNativeRouterInternal()\n}\n\n/**\n * @description 获取当前页面路径语义的原生 Page Router\n */\nexport function useNativePageRouter(): SetupContextRouter {\n return useNativePageRouterInternal()\n}\n"],"mappings":";;;;;;;;;;;;;;AAoCA,SAAS,mBAAmB,UAAwC;CAClE,OAAO,OAAO,SAAS,UAAU,YAAY,OAAO,SAAS,cAAc;AAC7E;AAEA,SAAS,+BAA+B,UAAoD;CAC1F,MAAM,iBAAiB,SAAS;CAChC,OAAO,kBAAkB,OAAO,mBAAmB,WAC/C,iBACA;AACN;AAEA,SAAS,gCACP,UACA,kBACA,SACS;CACT,IAAI,SAAS,WAAW,UACtB,OAAO;CAKT,IAAI,CAAC,kBACH,OAAO;CAGT,MAAM,0BAA0B,+BAA+B,QAAQ;CACvE,IAAI,SAAS,MACX,OAAO,QAAQ,SAAS;CAG1B,MAAM,QAAQ,2BAA2B;CACzC,OAAO,MAAM,MAAM,SAAS,OAAO;AACrC;AAEA,SAAS,gBACP,YACA,WACA;CACA,WAAW,OAAO,UAAU;CAC5B,WAAW,WAAW,UAAU;CAChC,WAAW,QAAQ,mBAAmB,UAAU,KAAK;CACrD,WAAW,OAAO,UAAU;CAC5B,WAAW,SAAS,iBAAiB,UAAU,MAAM;CACrD,IAAI,UAAU,SAAS,QACrB,OAAQ,WAAsD;MAG9D,WAAW,OAAO,UAAU;CAE9B,IAAI,UAAU,SAAS,QACrB,OAAQ,WAAsD;MAG9D,WAAW,OAAO,eAAe,UAAU,IAAI;CAEjD,IAAI,UAAU,SAAS,QACrB,OAAQ,WAAsD;MAG9D,WAAW,OAAO,UAAU;CAE9B,IAAI,UAAU,YAAY,QACxB,OAAQ,WAAsD;MAG9D,WAAW,UAAU,4BAA4B,UAAU,OAAO;CAEpE,IAAI,UAAU,mBAAmB,QAC/B,OAAQ,WAAsD;MAG9D,WAAW,iBAAiB,iCAAiC,UAAU,cAAc;AAEzF;AAEA,SAAgB,2BAA2B,UAAuC,CAAC,GAAyB;CAC1G,MAAM,eAAe,uBAA+C;CACpE,MAAM,eAAe,cAAc,YAAY,OAAO,aAAa,aAAa,WAC5E,aAAa,WACb;CACJ,MAAM,eAAe,QAAQ,kBACtB,UAAyC,gBAAgB,CAAC,EAAE,QAAQ,KAAK,KAAK;CACrF,MAAM,eAAe,aAAa,oBAAoB,QAAW,YAAY,CAAC;CAC9E,MAAM,aAAa,SAAwC;EACzD,MAAM,aAAa;EACnB,UAAU,aAAa;EACvB,OAAO,mBAAmB,aAAa,KAAK;EAC5C,MAAM,aAAa;EACnB,QAAQ,iBAAiB,aAAa,MAAM;CAC9C,CAAC;CACD,gBAAgB,YAAY,YAAY;CAExC,SAAS,UACP,eACA,eACA,SACA;EACA,MAAM,YAAY,gBACd,aAAa,aAAa,IAC1B,aAAa,oBAAoB,eAAe,YAAY,CAAC;EACjE,IAAI,SACF,QAAQ,uBAAuB,WAAW,OAAO;EAEnD,gBAAgB,YAAY,SAAS;CACvC;CAEA,IAAI,CAAC,cAAc;EACgB,+BAA+B,YAAY;GAC1E,IAAI,SAAS,OAAO;IAClB,UAAU,QAAW,QAAQ,OAAO,OAAO;IAC3C;GACF;GACA,IAAI,SAAS,KAAK;IAChB,UAAU,QAAW,qBAAqB,QAAQ,KAAK,WAAW,IAAI,GAAG,OAAO;IAChF;GACF;GACA,IAAI,SAAS,MAAM;IACjB,UAAU,QAAW,iBAAiB,QAAQ,IAAI,GAAG,OAAO;IAC5D;GACF;GACA,UAAU,QAAW,QAAW,OAAO;EACzC,CAAC;EAED,OAAO,EACL,OAAO,SAAS,UAAU,EAC5B;CACF;CAEA,MAAM,eAAe;CACrB,MAAM,iCAAiC,+BAA+B,YAAY;CAClF,MAAM,mBAAmB,mBAAmB,8BAA8B,KACrE,2BAA2B,CAAC,CAAC,SAAS,8BAA8B;CAEzE,QAAQ,UAAyE;EAC/E,UAAU,KAAoC;CAChD,CAAC;CACD,cAAc;EACZ,UAAU;CACZ,CAAC;CACD,aAAa;EACX,UAAU;CACZ,CAAC;CACD,kBAAkB;EAChB,UAAU;CACZ,CAAC;CACD,MAAM,2BAA2B,+BAA+B,YAAY;EAC1E,IAAI,CAAC,gCAAgC,cAAc,kBAAkB,OAAO,GAC1E;EAEF,IAAI,SAAS,OAAO;GAClB,UAAU,QAAW,QAAQ,OAAO,OAAO;GAC3C;EACF;EACA,IAAI,SAAS,KAAK;GAChB,UAAU,QAAW,qBAAqB,QAAQ,KAAK,WAAW,IAAI,GAAG,OAAO;GAChF;EACF;EACA,IAAI,SAAS,MAAM;GACjB,UAAU,QAAW,iBAAiB,QAAQ,IAAI,GAAG,OAAO;GAC5D;EACF;EACA,UAAU,QAAW,QAAW,OAAO;CACzC,CAAC;CACD,eAAe;EACb,yBAAyB;CAC3B,CAAC;CAED,OAAO,EACL,OAAO,SAAS,UAAU,EAC5B;AACF;AAEA,SAAgB,SACd,UAA+C,CAAC,GACI;CAIpD,OADc,2BAA2BA,OAAc,CAAC,CAAC;AAE3D;;;;AAKA,SAAgB,kBAAsC;CACpD,OAAOC,kBAAwB;AACjC;;;;AAKA,SAAgB,sBAA0C;CACxD,OAAOC,sBAA4B;AACrC"}
@@ -41,7 +41,7 @@ function createRouteLocation(path, query, hash = "", name, params = {}, queryStr
41
41
  return location;
42
42
  }
43
43
  function hasPageRoute(page) {
44
- return typeof (page === null || page === void 0 ? void 0 : page.route) === "string" && page.route.length > 0 || typeof (page === null || page === void 0 ? void 0 : page.__route__) === "string" && page.__route__.length > 0;
44
+ return typeof page?.route === "string" && page.route.length > 0 || typeof page?.__route__ === "string" && page.__route__.length > 0;
45
45
  }
46
46
  function getCurrentMiniProgramPage(fallbackPage) {
47
47
  const pages = getCurrentMiniProgramPages();
@@ -53,10 +53,9 @@ function getCurrentMiniProgramPage(fallbackPage) {
53
53
  return hasPageRoute(currentPageInstance) ? currentPageInstance : fallbackPage;
54
54
  }
55
55
  function resolvePageRoute(page, queryOverride) {
56
- var _page$options;
57
56
  if (!page) return createRouteLocation("", {});
58
57
  const rawPath = typeof page.route === "string" ? page.route : typeof page.__route__ === "string" ? page.__route__ : "";
59
- const querySource = queryOverride !== null && queryOverride !== void 0 ? queryOverride : (_page$options = page.options) !== null && _page$options !== void 0 ? _page$options : {};
58
+ const querySource = queryOverride ?? page.options ?? {};
60
59
  return createRouteLocation(rawPath, normalizeQuery(querySource), "", void 0, {});
61
60
  }
62
61
  function resolveCurrentRoute(queryOverride, fallbackPage) {