wevu 7.2.2 → 7.4.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.
- package/README.md +6 -0
- package/dist/dev/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/defineProperty.mjs +1 -1
- package/dist/dev/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/toPrimitive.mjs +1 -1
- package/dist/dev/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/toPropertyKey.mjs +1 -1
- package/dist/dev/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/typeof.mjs +1 -1
- package/dist/dev/internal-runtime.d.mts +2 -1
- package/dist/dev/internal-runtime.mjs +3 -2
- package/dist/dev/package.mjs +1 -1
- package/dist/dev/reactivity/asyncDerivation.mjs +8 -10
- package/dist/dev/reactivity/asyncDerivation.mjs.map +1 -1
- package/dist/dev/reactivity/core.mjs +5 -8
- package/dist/dev/reactivity/core.mjs.map +1 -1
- package/dist/dev/reactivity/reactive/patch.mjs +3 -3
- package/dist/dev/reactivity/reactive/patch.mjs.map +1 -1
- package/dist/dev/reactivity/reactive/patchState.mjs +4 -8
- package/dist/dev/reactivity/reactive/patchState.mjs.map +1 -1
- package/dist/dev/reactivity/reactive/shared.mjs +1 -2
- package/dist/dev/reactivity/reactive/shared.mjs.map +1 -1
- package/dist/dev/reactivity/reactive.mjs +5 -10
- package/dist/dev/reactivity/reactive.mjs.map +1 -1
- package/dist/dev/reactivity/ref.mjs +2 -2
- package/dist/dev/reactivity/ref.mjs.map +1 -1
- package/dist/dev/reactivity/shallowRef.mjs +1 -1
- package/dist/dev/reactivity/shallowRef.mjs.map +1 -1
- package/dist/dev/reactivity/watch/helpers.mjs +1 -1
- package/dist/dev/reactivity/watch/helpers.mjs.map +1 -1
- package/dist/dev/reactivity/watch.mjs +6 -8
- package/dist/dev/reactivity/watch.mjs.map +1 -1
- package/dist/dev/router/createRouter.mjs +17 -24
- package/dist/dev/router/createRouter.mjs.map +1 -1
- package/dist/dev/router/initialNavigation.mjs +22 -17
- package/dist/dev/router/initialNavigation.mjs.map +1 -1
- package/dist/dev/router/instance.mjs +1 -2
- package/dist/dev/router/instance.mjs.map +1 -1
- package/dist/dev/router/navigationCore.mjs +2 -2
- package/dist/dev/router/navigationCore.mjs.map +1 -1
- package/dist/dev/router/navigationResult.mjs +7 -10
- package/dist/dev/router/navigationResult.mjs.map +1 -1
- package/dist/dev/router/navigationTarget.mjs +1 -3
- package/dist/dev/router/navigationTarget.mjs.map +1 -1
- package/dist/dev/router/resolve.mjs +3 -4
- package/dist/dev/router/resolve.mjs.map +1 -1
- package/dist/dev/router/routeRegistry.mjs +1 -1
- package/dist/dev/router/routeRegistry.mjs.map +1 -1
- package/dist/dev/router/routeSync.mjs +1 -1
- package/dist/dev/router/routeSync.mjs.map +1 -1
- package/dist/dev/router/scrollRestoration/adapters.d.mts +8 -0
- package/dist/dev/router/scrollRestoration/adapters.mjs +86 -0
- package/dist/dev/router/scrollRestoration/adapters.mjs.map +1 -0
- package/dist/dev/router/scrollRestoration/controller.d.mts +8 -0
- package/dist/dev/router/scrollRestoration/controller.mjs +148 -0
- package/dist/dev/router/scrollRestoration/controller.mjs.map +1 -0
- package/dist/dev/router/scrollRestoration/host.d.mts +3 -0
- package/dist/dev/router/scrollRestoration/host.mjs +76 -0
- package/dist/dev/router/scrollRestoration/host.mjs.map +1 -0
- package/dist/dev/router/scrollRestoration/index.d.mts +9 -0
- package/dist/dev/router/scrollRestoration/index.mjs +156 -0
- package/dist/dev/router/scrollRestoration/index.mjs.map +1 -0
- package/dist/dev/router/scrollRestoration/types.d.mts +61 -0
- package/dist/dev/router/useRoute.mjs +12 -19
- package/dist/dev/router/useRoute.mjs.map +1 -1
- package/dist/dev/router.d.mts +5 -1
- package/dist/dev/router.mjs +4 -1
- package/dist/dev/routerInternal/location.mjs +2 -3
- package/dist/dev/routerInternal/location.mjs.map +1 -1
- package/dist/dev/routerInternal/params.mjs +2 -3
- package/dist/dev/routerInternal/params.mjs.map +1 -1
- package/dist/dev/routerInternal/records.mjs +1 -1
- package/dist/dev/routerInternal/records.mjs.map +1 -1
- package/dist/dev/routerInternal/recordsWarnings.mjs +1 -2
- package/dist/dev/routerInternal/recordsWarnings.mjs.map +1 -1
- package/dist/dev/runtime/app/context.mjs +13 -26
- package/dist/dev/runtime/app/context.mjs.map +1 -1
- package/dist/dev/runtime/app/diagnostics.mjs +2 -4
- package/dist/dev/runtime/app/diagnostics.mjs.map +1 -1
- package/dist/dev/runtime/app/mount.mjs +27 -33
- package/dist/dev/runtime/app/mount.mjs.map +1 -1
- package/dist/dev/runtime/app/setData/commitTracker.mjs +5 -9
- package/dist/dev/runtime/app/setData/commitTracker.mjs.map +1 -1
- package/dist/dev/runtime/app/setData/patchScheduler.mjs +2 -4
- package/dist/dev/runtime/app/setData/patchScheduler.mjs.map +1 -1
- package/dist/dev/runtime/app/setData/payload.mjs +2 -3
- package/dist/dev/runtime/app/setData/payload.mjs.map +1 -1
- package/dist/dev/runtime/app/setData/scheduler.mjs +7 -9
- package/dist/dev/runtime/app/setData/scheduler.mjs.map +1 -1
- package/dist/dev/runtime/app/setData/snapshot.mjs +5 -6
- package/dist/dev/runtime/app/setData/snapshot.mjs.map +1 -1
- package/dist/dev/runtime/app/setDataOptions.mjs +26 -27
- package/dist/dev/runtime/app/setDataOptions.mjs.map +1 -1
- package/dist/dev/runtime/app.mjs +9 -9
- package/dist/dev/runtime/app.mjs.map +1 -1
- package/dist/dev/runtime/bindingManifest.mjs +6 -14
- package/dist/dev/runtime/bindingManifest.mjs.map +1 -1
- package/dist/dev/runtime/capabilities.d.mts +4 -1
- package/dist/dev/runtime/capabilities.mjs.map +1 -1
- package/dist/dev/runtime/css.mjs +4 -8
- package/dist/dev/runtime/css.mjs.map +1 -1
- package/dist/dev/runtime/defaults.mjs +4 -4
- package/dist/dev/runtime/defaults.mjs.map +1 -1
- package/dist/dev/runtime/define/initialComputed.mjs +5 -5
- package/dist/dev/runtime/define/initialComputed.mjs.map +1 -1
- package/dist/dev/runtime/define/options.mjs +10 -12
- package/dist/dev/runtime/define/options.mjs.map +1 -1
- package/dist/dev/runtime/define/props.mjs +4 -5
- package/dist/dev/runtime/define/props.mjs.map +1 -1
- package/dist/dev/runtime/define/scopedSlotOptions.mjs +43 -61
- package/dist/dev/runtime/define/scopedSlotOptions.mjs.map +1 -1
- package/dist/dev/runtime/define/setupResult.mjs +17 -28
- package/dist/dev/runtime/define/setupResult.mjs.map +1 -1
- package/dist/dev/runtime/define.mjs +9 -12
- package/dist/dev/runtime/define.mjs.map +1 -1
- package/dist/dev/runtime/diff.mjs +9 -11
- package/dist/dev/runtime/diff.mjs.map +1 -1
- package/dist/dev/runtime/disposables.mjs +2 -2
- package/dist/dev/runtime/disposables.mjs.map +1 -1
- package/dist/dev/runtime/elementIntersectionObserver.mjs +16 -24
- package/dist/dev/runtime/elementIntersectionObserver.mjs.map +1 -1
- package/dist/dev/runtime/features/inlineEvents.mjs +2 -3
- package/dist/dev/runtime/features/inlineEvents.mjs.map +1 -1
- package/dist/dev/runtime/features/jsxIslands.d.mts +7 -0
- package/dist/dev/runtime/features/jsxIslands.mjs +20 -0
- package/dist/dev/runtime/features/jsxIslands.mjs.map +1 -0
- package/dist/dev/runtime/features/layout.mjs +2 -3
- package/dist/dev/runtime/features/layout.mjs.map +1 -1
- package/dist/dev/runtime/features/publicLayout.mjs +2 -6
- package/dist/dev/runtime/features/publicLayout.mjs.map +1 -1
- package/dist/dev/runtime/features/scopedSlots.mjs +5 -9
- package/dist/dev/runtime/features/scopedSlots.mjs.map +1 -1
- package/dist/dev/runtime/features/templateRefs.mjs +1 -1
- package/dist/dev/runtime/features/templateRefs.mjs.map +1 -1
- package/dist/dev/runtime/hooks/base.mjs +20 -43
- package/dist/dev/runtime/hooks/base.mjs.map +1 -1
- package/dist/dev/runtime/hooks/pageScroll.mjs +41 -0
- package/dist/dev/runtime/hooks/pageScroll.mjs.map +1 -0
- package/dist/dev/runtime/hooks/register.mjs +2 -1
- package/dist/dev/runtime/hooks/register.mjs.map +1 -1
- package/dist/dev/runtime/inlineDataset.mjs +1 -2
- package/dist/dev/runtime/inlineDataset.mjs.map +1 -1
- package/dist/dev/runtime/intersectionObserver.mjs +6 -6
- package/dist/dev/runtime/intersectionObserver.mjs.map +1 -1
- package/dist/dev/runtime/jsxIsland.mjs +16 -33
- package/dist/dev/runtime/jsxIsland.mjs.map +1 -1
- package/dist/dev/runtime/layoutBridge.mjs +32 -62
- package/dist/dev/runtime/layoutBridge.mjs.map +1 -1
- package/dist/dev/runtime/nativeBridge.mjs +1 -1
- package/dist/dev/runtime/nativeBridge.mjs.map +1 -1
- package/dist/dev/runtime/navigationLifecycle.mjs +24 -0
- package/dist/dev/runtime/navigationLifecycle.mjs.map +1 -0
- package/dist/dev/runtime/pageEnvironment.mjs +15 -18
- package/dist/dev/runtime/pageEnvironment.mjs.map +1 -1
- package/dist/dev/runtime/pageLayout.mjs +7 -11
- package/dist/dev/runtime/pageLayout.mjs.map +1 -1
- package/dist/dev/runtime/pageScroll.mjs +2 -3
- package/dist/dev/runtime/pageScroll.mjs.map +1 -1
- package/dist/dev/runtime/platform/current.mjs +12 -0
- package/dist/dev/runtime/platform/current.mjs.map +1 -0
- package/dist/dev/runtime/platform/generic.mjs +36 -0
- package/dist/dev/runtime/platform/generic.mjs.map +1 -0
- package/dist/dev/runtime/platform/globals.mjs +29 -0
- package/dist/dev/runtime/platform/globals.mjs.map +1 -0
- package/dist/dev/runtime/platform.mjs +15 -60
- package/dist/dev/runtime/platform.mjs.map +1 -1
- package/dist/dev/runtime/provideContext.mjs +7 -9
- package/dist/dev/runtime/provideContext.mjs.map +1 -1
- package/dist/dev/runtime/publicRuntime.mjs +4 -0
- package/dist/dev/runtime/publicRuntime.mjs.map +1 -1
- package/dist/dev/runtime/pullDownRefresh.mjs +2 -4
- package/dist/dev/runtime/pullDownRefresh.mjs.map +1 -1
- package/dist/dev/runtime/register/app.mjs +18 -19
- package/dist/dev/runtime/register/app.mjs.map +1 -1
- package/dist/dev/runtime/register/component/alipay.mjs +9 -18
- package/dist/dev/runtime/register/component/alipay.mjs.map +1 -1
- package/dist/dev/runtime/register/component/alipayRegistration.mjs +60 -0
- package/dist/dev/runtime/register/component/alipayRegistration.mjs.map +1 -0
- package/dist/dev/runtime/register/component/lifecycle/optionalHooks.mjs +2 -5
- package/dist/dev/runtime/register/component/lifecycle/optionalHooks.mjs.map +1 -1
- package/dist/dev/runtime/register/component/lifecycle/platform.mjs +13 -26
- package/dist/dev/runtime/register/component/lifecycle/platform.mjs.map +1 -1
- package/dist/dev/runtime/register/component/lifecycle.mjs +7 -12
- package/dist/dev/runtime/register/component/lifecycle.mjs.map +1 -1
- package/dist/dev/runtime/register/component/methods.mjs +13 -18
- package/dist/dev/runtime/register/component/methods.mjs.map +1 -1
- package/dist/dev/runtime/register/component/options.mjs +3 -4
- package/dist/dev/runtime/register/component/options.mjs.map +1 -1
- package/dist/dev/runtime/register/component/props.mjs +25 -31
- package/dist/dev/runtime/register/component/props.mjs.map +1 -1
- package/dist/dev/runtime/register/component/registerDefinition.mjs +21 -40
- package/dist/dev/runtime/register/component/registerDefinition.mjs.map +1 -1
- package/dist/dev/runtime/register/component/registerNativeDefinition.mjs +18 -60
- package/dist/dev/runtime/register/component/registerNativeDefinition.mjs.map +1 -1
- package/dist/dev/runtime/register/component.mjs +3 -5
- package/dist/dev/runtime/register/component.mjs.map +1 -1
- package/dist/dev/runtime/register/inline.mjs +8 -10
- package/dist/dev/runtime/register/inline.mjs.map +1 -1
- package/dist/dev/runtime/register/runtimeInstance/methodBridge.mjs +7 -8
- package/dist/dev/runtime/register/runtimeInstance/methodBridge.mjs.map +1 -1
- package/dist/dev/runtime/register/runtimeInstance/provideContext.mjs +1 -1
- package/dist/dev/runtime/register/runtimeInstance/provideContext.mjs.map +1 -1
- package/dist/dev/runtime/register/runtimeInstance/setupContext.mjs +25 -34
- package/dist/dev/runtime/register/runtimeInstance/setupContext.mjs.map +1 -1
- package/dist/dev/runtime/register/runtimeInstance/setupPhase.mjs +13 -15
- package/dist/dev/runtime/register/runtimeInstance/setupPhase.mjs.map +1 -1
- package/dist/dev/runtime/register/runtimeInstance/setupSnapshot.mjs +2 -2
- package/dist/dev/runtime/register/runtimeInstance/setupSnapshot.mjs.map +1 -1
- package/dist/dev/runtime/register/runtimeInstance/utils.mjs +9 -9
- package/dist/dev/runtime/register/runtimeInstance/utils.mjs.map +1 -1
- package/dist/dev/runtime/register/runtimeInstance.mjs +74 -100
- package/dist/dev/runtime/register/runtimeInstance.mjs.map +1 -1
- package/dist/dev/runtime/register/setDataFrequencyWarning.mjs +12 -15
- package/dist/dev/runtime/register/setDataFrequencyWarning.mjs.map +1 -1
- package/dist/dev/runtime/register/setup.mjs +2 -3
- package/dist/dev/runtime/register/setup.mjs.map +1 -1
- package/dist/dev/runtime/register/snapshot.mjs +1 -4
- package/dist/dev/runtime/register/snapshot.mjs.map +1 -1
- package/dist/dev/runtime/register/watch.mjs +3 -5
- package/dist/dev/runtime/register/watch.mjs.map +1 -1
- package/dist/dev/runtime/scopedSlots.mjs +14 -21
- package/dist/dev/runtime/scopedSlots.mjs.map +1 -1
- package/dist/dev/runtime/selectorQuery.mjs +5 -9
- package/dist/dev/runtime/selectorQuery.mjs.map +1 -1
- package/dist/dev/runtime/template.mjs +1 -1
- package/dist/dev/runtime/template.mjs.map +1 -1
- package/dist/dev/runtime/templateRefs/helpers.mjs +14 -24
- package/dist/dev/runtime/templateRefs/helpers.mjs.map +1 -1
- package/dist/dev/runtime/templateRefs.mjs +8 -15
- package/dist/dev/runtime/templateRefs.mjs.map +1 -1
- package/dist/dev/runtime/uniAppHost.mjs +6 -14
- package/dist/dev/runtime/uniAppHost.mjs.map +1 -1
- package/dist/dev/runtime/updatePerformance.mjs +1 -1
- package/dist/dev/runtime/updatePerformance.mjs.map +1 -1
- package/dist/dev/runtime/use.mjs +1 -1
- package/dist/dev/runtime/use.mjs.map +1 -1
- package/dist/dev/runtime/vueCompat/context.mjs +3 -5
- package/dist/dev/runtime/vueCompat/context.mjs.map +1 -1
- package/dist/dev/runtime/vueCompat/model.mjs +9 -13
- package/dist/dev/runtime/vueCompat/model.mjs.map +1 -1
- package/dist/dev/runtime/vueCompat/router.mjs +4 -4
- package/dist/dev/runtime/vueCompat/router.mjs.map +1 -1
- package/dist/dev/runtime/vueCompat/templateRef.mjs +1 -1
- package/dist/dev/runtime/vueCompat/templateRef.mjs.map +1 -1
- package/dist/dev/scheduler.mjs +3 -4
- package/dist/dev/scheduler.mjs.map +1 -1
- package/dist/dev/store/base.mjs +1 -2
- package/dist/dev/store/base.mjs.map +1 -1
- package/dist/dev/store/define/create.mjs +11 -22
- package/dist/dev/store/define/create.mjs.map +1 -1
- package/dist/dev/store/define.mjs +1 -1
- package/dist/dev/store/define.mjs.map +1 -1
- package/dist/dev/store/view.mjs +1 -1
- package/dist/dev/store/view.mjs.map +1 -1
- package/dist/internal-runtime.d.mts +2 -1
- package/dist/internal-runtime.mjs +1 -1
- package/dist/package.mjs +1 -1
- package/dist/reactivity/asyncDerivation.mjs +1 -1
- package/dist/reactivity/core.mjs +1 -1
- package/dist/reactivity/reactive/patch.mjs +1 -1
- package/dist/reactivity/reactive/patchState.mjs +1 -1
- package/dist/reactivity/reactive/shared.mjs +1 -1
- package/dist/reactivity/reactive.mjs +1 -1
- package/dist/reactivity/ref.mjs +1 -1
- package/dist/reactivity/shallowRef.mjs +1 -1
- package/dist/reactivity/watch/helpers.mjs +1 -1
- package/dist/reactivity/watch.mjs +1 -1
- package/dist/router/createRouter.mjs +1 -1
- package/dist/router/initialNavigation.mjs +1 -1
- package/dist/router/instance.mjs +1 -1
- package/dist/router/navigationCore.mjs +1 -1
- package/dist/router/navigationResult.mjs +1 -1
- package/dist/router/navigationTarget.mjs +1 -1
- package/dist/router/resolve.mjs +1 -1
- package/dist/router/routeRegistry.mjs +1 -1
- package/dist/router/routeSync.mjs +1 -1
- package/dist/router/scrollRestoration/adapters.d.mts +7 -0
- package/dist/router/scrollRestoration/adapters.mjs +1 -0
- package/dist/router/scrollRestoration/controller.d.mts +7 -0
- package/dist/router/scrollRestoration/controller.mjs +1 -0
- package/dist/router/scrollRestoration/host.d.mts +3 -0
- package/dist/router/scrollRestoration/host.mjs +1 -0
- package/dist/router/scrollRestoration/index.d.mts +8 -0
- package/dist/router/scrollRestoration/index.mjs +1 -0
- package/dist/router/scrollRestoration/types.d.mts +60 -0
- package/dist/router/useRoute.mjs +1 -1
- package/dist/router.d.mts +5 -1
- package/dist/router.mjs +1 -1
- package/dist/routerInternal/location.mjs +1 -1
- package/dist/routerInternal/params.mjs +1 -1
- package/dist/routerInternal/records.mjs +1 -1
- package/dist/routerInternal/recordsWarnings.mjs +1 -1
- package/dist/runtime/app/context.mjs +1 -1
- package/dist/runtime/app/diagnostics.mjs +1 -1
- package/dist/runtime/app/mount.mjs +1 -1
- package/dist/runtime/app/setData/commitTracker.mjs +1 -1
- package/dist/runtime/app/setData/patchScheduler.mjs +1 -1
- package/dist/runtime/app/setData/payload.mjs +1 -1
- package/dist/runtime/app/setData/scheduler.mjs +1 -1
- package/dist/runtime/app/setData/snapshot.mjs +1 -1
- package/dist/runtime/app/setDataOptions.mjs +1 -1
- package/dist/runtime/app.mjs +1 -1
- package/dist/runtime/bindingManifest.mjs +1 -1
- package/dist/runtime/capabilities.d.mts +4 -1
- package/dist/runtime/css.mjs +1 -1
- package/dist/runtime/defaults.mjs +1 -1
- package/dist/runtime/define/initialComputed.mjs +1 -1
- package/dist/runtime/define/options.mjs +1 -1
- package/dist/runtime/define/props.mjs +1 -1
- package/dist/runtime/define/scopedSlotOptions.mjs +1 -1
- package/dist/runtime/define/setupResult.mjs +1 -1
- package/dist/runtime/define.mjs +1 -1
- package/dist/runtime/diff.mjs +1 -1
- package/dist/runtime/disposables.mjs +1 -1
- package/dist/runtime/elementIntersectionObserver.mjs +1 -1
- package/dist/runtime/features/inlineEvents.mjs +1 -1
- package/dist/runtime/features/jsxIslands.d.mts +6 -0
- package/dist/runtime/features/jsxIslands.mjs +1 -0
- package/dist/runtime/features/layout.mjs +1 -1
- package/dist/runtime/features/publicLayout.mjs +1 -1
- package/dist/runtime/features/scopedSlots.mjs +1 -1
- package/dist/runtime/features/templateRefs.mjs +1 -1
- package/dist/runtime/hooks/base.mjs +1 -1
- package/dist/runtime/hooks/pageScroll.mjs +1 -0
- package/dist/runtime/hooks/register.mjs +1 -1
- package/dist/runtime/inlineDataset.mjs +1 -1
- package/dist/runtime/intersectionObserver.mjs +1 -1
- package/dist/runtime/jsxIsland.mjs +1 -1
- package/dist/runtime/layoutBridge.mjs +1 -1
- package/dist/runtime/nativeBridge.mjs +1 -1
- package/dist/runtime/navigationLifecycle.mjs +1 -0
- package/dist/runtime/pageEnvironment.mjs +1 -1
- package/dist/runtime/pageLayout.mjs +1 -1
- package/dist/runtime/pageScroll.mjs +1 -1
- package/dist/runtime/platform/current.mjs +1 -0
- package/dist/runtime/platform/generic.mjs +1 -0
- package/dist/runtime/platform/globals.mjs +1 -0
- package/dist/runtime/platform.mjs +1 -1
- package/dist/runtime/provideContext.mjs +1 -1
- package/dist/runtime/publicRuntime.mjs +1 -1
- package/dist/runtime/pullDownRefresh.mjs +1 -1
- package/dist/runtime/register/app.mjs +1 -1
- package/dist/runtime/register/component/alipay.mjs +1 -1
- package/dist/runtime/register/component/alipayRegistration.mjs +1 -0
- package/dist/runtime/register/component/lifecycle/optionalHooks.mjs +1 -1
- package/dist/runtime/register/component/lifecycle/platform.mjs +1 -1
- package/dist/runtime/register/component/lifecycle.mjs +1 -1
- package/dist/runtime/register/component/methods.mjs +1 -1
- package/dist/runtime/register/component/options.mjs +1 -1
- package/dist/runtime/register/component/props.mjs +1 -1
- package/dist/runtime/register/component/registerDefinition.mjs +1 -1
- package/dist/runtime/register/component/registerNativeDefinition.mjs +1 -1
- package/dist/runtime/register/component.mjs +1 -1
- package/dist/runtime/register/inline.mjs +1 -1
- package/dist/runtime/register/runtimeInstance/methodBridge.mjs +1 -1
- package/dist/runtime/register/runtimeInstance/provideContext.mjs +1 -1
- package/dist/runtime/register/runtimeInstance/setupContext.mjs +1 -1
- package/dist/runtime/register/runtimeInstance/setupPhase.mjs +1 -1
- package/dist/runtime/register/runtimeInstance/setupSnapshot.mjs +1 -1
- package/dist/runtime/register/runtimeInstance/utils.mjs +1 -1
- package/dist/runtime/register/runtimeInstance.mjs +1 -1
- package/dist/runtime/register/setDataFrequencyWarning.mjs +1 -1
- package/dist/runtime/register/setup.mjs +1 -1
- package/dist/runtime/register/snapshot.mjs +1 -1
- package/dist/runtime/register/watch.mjs +1 -1
- package/dist/runtime/scopedSlots.mjs +1 -1
- package/dist/runtime/selectorQuery.mjs +1 -1
- package/dist/runtime/template.mjs +1 -1
- package/dist/runtime/templateRefs/helpers.mjs +1 -1
- package/dist/runtime/templateRefs.mjs +1 -1
- package/dist/runtime/uniAppHost.mjs +1 -1
- package/dist/runtime/updatePerformance.mjs +1 -1
- package/dist/runtime/use.mjs +1 -1
- package/dist/runtime/vueCompat/context.mjs +1 -1
- package/dist/runtime/vueCompat/model.mjs +1 -1
- package/dist/runtime/vueCompat/router.mjs +1 -1
- package/dist/runtime/vueCompat/templateRef.mjs +1 -1
- package/dist/scheduler.mjs +1 -1
- package/dist/store/base.mjs +1 -1
- package/dist/store/define/create.mjs +1 -1
- package/dist/store/define.mjs +1 -1
- package/dist/store/view.mjs +1 -1
- package/package.json +7 -7
- /package/dist/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/defineProperty.mjs +0 -0
- /package/dist/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/toPrimitive.mjs +0 -0
- /package/dist/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/toPropertyKey.mjs +0 -0
- /package/dist/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/typeof.mjs +0 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { getCurrentMiniProgramPages } from "../../runtime/platform.mjs";
|
|
2
|
+
import { resolvePageRoute } from "../../routerInternal/location.mjs";
|
|
3
|
+
import { getActiveRouter } from "../instance.mjs";
|
|
4
|
+
import { currentScrollPage, subscribeScrollRouteEvents, supportsScrollRouteEvents } from "./host.mjs";
|
|
5
|
+
|
|
6
|
+
//#region src/router/scrollRestoration/controller.ts
|
|
7
|
+
const controllers = /* @__PURE__ */ new WeakMap();
|
|
8
|
+
const routerControllers = /* @__PURE__ */ new WeakMap();
|
|
9
|
+
/** 创建显式启用的路由会话;不会安装全局默认滚动行为。 */
|
|
10
|
+
function createScrollRestoration(options) {
|
|
11
|
+
if (routerControllers.has(options.router)) throw new Error("该 router 已创建 scroll restoration 会话,请复用或先 dispose()。");
|
|
12
|
+
const router = options.router;
|
|
13
|
+
const snapshots = /* @__PURE__ */ new Map();
|
|
14
|
+
const registrations = /* @__PURE__ */ new Map();
|
|
15
|
+
const seenPages = new WeakSet(getCurrentMiniProgramPages());
|
|
16
|
+
const report = options.onError ?? ((error) => console.error("[wevu/router] scroll restoration:", error));
|
|
17
|
+
let disposed = false;
|
|
18
|
+
let generation = 0;
|
|
19
|
+
let transition;
|
|
20
|
+
let unsubscribe;
|
|
21
|
+
const controller = {
|
|
22
|
+
automatic: supportsScrollRouteEvents(),
|
|
23
|
+
clear(key) {
|
|
24
|
+
if (key === void 0) snapshots.clear();
|
|
25
|
+
else snapshots.delete(key);
|
|
26
|
+
for (const records of registrations.values()) for (const record of records) if (key === void 0 || record.key === key) record.invalidate();
|
|
27
|
+
},
|
|
28
|
+
dispose() {
|
|
29
|
+
if (disposed) return;
|
|
30
|
+
disposed = true;
|
|
31
|
+
generation++;
|
|
32
|
+
unsubscribe?.();
|
|
33
|
+
for (const records of registrations.values()) for (const record of records) record.stop();
|
|
34
|
+
registrations.clear();
|
|
35
|
+
snapshots.clear();
|
|
36
|
+
transition = void 0;
|
|
37
|
+
routerControllers.delete(options.router);
|
|
38
|
+
controllers.delete(controller);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const state = {
|
|
42
|
+
controller,
|
|
43
|
+
get disposed() {
|
|
44
|
+
return disposed;
|
|
45
|
+
},
|
|
46
|
+
get transition() {
|
|
47
|
+
return transition;
|
|
48
|
+
},
|
|
49
|
+
get generation() {
|
|
50
|
+
return generation;
|
|
51
|
+
},
|
|
52
|
+
resolveRoute: (page) => router.resolve(resolvePageRoute(page)),
|
|
53
|
+
register(page, registration) {
|
|
54
|
+
if (disposed) throw new Error("scroll restoration 会话已 dispose()。");
|
|
55
|
+
let records = registrations.get(page);
|
|
56
|
+
if (!records) {
|
|
57
|
+
records = /* @__PURE__ */ new Set();
|
|
58
|
+
registrations.set(page, records);
|
|
59
|
+
}
|
|
60
|
+
for (const record of records) if (record.key === registration.key && record.id === registration.id) throw new Error(`同一页面重复注册 scroll restoration key/id: ${registration.key} / ${registration.id}`);
|
|
61
|
+
records.add(registration);
|
|
62
|
+
return () => {
|
|
63
|
+
records.delete(registration);
|
|
64
|
+
if (records.size === 0) registrations.delete(page);
|
|
65
|
+
};
|
|
66
|
+
},
|
|
67
|
+
read: (key, id) => snapshots.get(key)?.get(id),
|
|
68
|
+
save(key, id, value) {
|
|
69
|
+
if (disposed) return;
|
|
70
|
+
if (value === null) {
|
|
71
|
+
state.clear(key, id);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
let entries = snapshots.get(key);
|
|
75
|
+
if (!entries) {
|
|
76
|
+
entries = /* @__PURE__ */ new Map();
|
|
77
|
+
snapshots.set(key, entries);
|
|
78
|
+
}
|
|
79
|
+
entries.set(id, value);
|
|
80
|
+
},
|
|
81
|
+
clear(key, id) {
|
|
82
|
+
const entries = snapshots.get(key);
|
|
83
|
+
entries?.delete(id);
|
|
84
|
+
if (entries?.size === 0) snapshots.delete(key);
|
|
85
|
+
for (const records of registrations.values()) for (const record of records) if (record.key === key && record.id === id) record.invalidate();
|
|
86
|
+
},
|
|
87
|
+
report
|
|
88
|
+
};
|
|
89
|
+
if (controller.automatic) unsubscribe = subscribeScrollRouteEvents({
|
|
90
|
+
BeforeAppRoute(event) {
|
|
91
|
+
if (disposed || transition?.event.routeEventId === event.routeEventId) return;
|
|
92
|
+
const page = currentScrollPage();
|
|
93
|
+
if (page) {
|
|
94
|
+
seenPages.add(page);
|
|
95
|
+
for (const record of registrations.get(page) ?? []) record.capture();
|
|
96
|
+
}
|
|
97
|
+
generation++;
|
|
98
|
+
for (const records of registrations.values()) for (const record of records) record.invalidate();
|
|
99
|
+
transition = {
|
|
100
|
+
event,
|
|
101
|
+
fresh: false,
|
|
102
|
+
done: false
|
|
103
|
+
};
|
|
104
|
+
},
|
|
105
|
+
BeforePageUnload(event) {
|
|
106
|
+
const page = event.page;
|
|
107
|
+
if (!page) return;
|
|
108
|
+
if (transition?.event.routeEventId !== event.routeEventId && page === currentScrollPage()) for (const record of registrations.get(page) ?? []) record.capture();
|
|
109
|
+
for (const record of registrations.get(page) ?? []) record.stop();
|
|
110
|
+
},
|
|
111
|
+
AppRoute(event) {
|
|
112
|
+
if (disposed || transition && transition.event.routeEventId !== event.routeEventId) return;
|
|
113
|
+
const page = currentScrollPage();
|
|
114
|
+
if (!page || resolvePageRoute(page).path !== event.path.replace(/^\/+/, "")) return;
|
|
115
|
+
transition ?? (transition = {
|
|
116
|
+
event,
|
|
117
|
+
fresh: false,
|
|
118
|
+
done: false
|
|
119
|
+
});
|
|
120
|
+
if (transition.page) return;
|
|
121
|
+
transition.page = page;
|
|
122
|
+
transition.fresh = !seenPages.has(page);
|
|
123
|
+
seenPages.add(page);
|
|
124
|
+
},
|
|
125
|
+
AppRouteDone(event) {
|
|
126
|
+
if (disposed || !transition) return;
|
|
127
|
+
const completesFreshPage = event.routeEventId === "" && transition.fresh && Number.isInteger(transition.event.webviewId) && event.webviewId === transition.event.webviewId && event.path === transition.event.path && typeof event.openType === "string" && event.openType === transition.event.openType;
|
|
128
|
+
if (transition.event.routeEventId !== event.routeEventId && !completesFreshPage) return;
|
|
129
|
+
if (!transition.page || transition.page !== currentScrollPage() || transition.done) return;
|
|
130
|
+
transition.done = true;
|
|
131
|
+
for (const record of registrations.get(transition.page) ?? []) record.restoreAutomatic();
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
controllers.set(controller, state);
|
|
135
|
+
routerControllers.set(options.router, controller);
|
|
136
|
+
return controller;
|
|
137
|
+
}
|
|
138
|
+
function resolveScrollController(controller) {
|
|
139
|
+
const router = getActiveRouter();
|
|
140
|
+
const resolved = controller ?? (router && routerControllers.get(router));
|
|
141
|
+
const state = resolved && controllers.get(resolved);
|
|
142
|
+
if (!state || state.disposed) throw new Error("请先在应用启动时调用 createScrollRestoration({ router }),或传入有效的 controller。");
|
|
143
|
+
return state;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
//#endregion
|
|
147
|
+
export { createScrollRestoration, resolveScrollController };
|
|
148
|
+
//# sourceMappingURL=controller.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.mjs","names":[],"sources":["../../../../src/router/scrollRestoration/controller.ts"],"sourcesContent":["import type { RouteLocationNormalizedLoaded, RouterNavigation } from '../types'\nimport type { ScrollPage, ScrollRouteEvent } from './host'\nimport type { ScrollRestorationController, ScrollRestorationOptions } from './types'\nimport { resolvePageRoute } from '../../routerInternal/shared'\nimport { getCurrentMiniProgramPages } from '../../runtime/platform'\nimport { getActiveRouter } from '../instance'\nimport { currentScrollPage, subscribeScrollRouteEvents, supportsScrollRouteEvents } from './host'\n\nexport interface ScrollRegistration {\n key: string\n id: string\n capture: () => void\n invalidate: () => void\n restoreAutomatic: () => void\n stop: () => void\n}\n\ninterface ScrollTransition {\n event: ScrollRouteEvent\n page?: ScrollPage\n fresh: boolean\n done: boolean\n}\n\nexport interface ScrollControllerState {\n readonly controller: ScrollRestorationController\n readonly disposed: boolean\n readonly transition: ScrollTransition | undefined\n readonly generation: number\n resolveRoute: (page: ScrollPage) => RouteLocationNormalizedLoaded\n register: (page: ScrollPage, registration: ScrollRegistration) => () => void\n read: (key: string, id: string) => object | undefined\n save: (key: string, id: string, value: object | null) => void\n clear: (key: string, id: string) => void\n report: (error: unknown) => void\n}\n\nconst controllers = new WeakMap<ScrollRestorationController, ScrollControllerState>()\nconst routerControllers = new WeakMap<object, ScrollRestorationController>()\n\n/** 创建显式启用的路由会话;不会安装全局默认滚动行为。 */\nexport function createScrollRestoration<TRouteMap extends object>(options: ScrollRestorationOptions<TRouteMap>): ScrollRestorationController {\n if (routerControllers.has(options.router)) {\n throw new Error('该 router 已创建 scroll restoration 会话,请复用或先 dispose()。')\n }\n // 泛型仅约束公开路由名,内部处理来自原生页面的标准化路径。\n const router = options.router as unknown as RouterNavigation\n const snapshots = new Map<string, Map<string, object>>()\n const registrations = new Map<ScrollPage, Set<ScrollRegistration>>()\n const seenPages = new WeakSet<object>(getCurrentMiniProgramPages())\n // eslint-disable-next-line no-console -- 自动恢复没有调用方 Promise;默认处理必须报告错误。\n const report = options.onError ?? ((error: unknown) => console.error('[wevu/router] scroll restoration:', error))\n let disposed = false\n let generation = 0\n let transition: ScrollTransition | undefined\n let unsubscribe: (() => void) | undefined\n\n const controller: ScrollRestorationController = {\n automatic: supportsScrollRouteEvents(),\n clear(key) {\n if (key === undefined) {\n snapshots.clear()\n }\n else {\n snapshots.delete(key)\n }\n for (const records of registrations.values()) {\n for (const record of records) {\n if (key === undefined || record.key === key) {\n record.invalidate()\n }\n }\n }\n },\n dispose() {\n if (disposed) {\n return\n }\n disposed = true\n generation++\n unsubscribe?.()\n for (const records of registrations.values()) {\n for (const record of records) {\n record.stop()\n }\n }\n registrations.clear()\n snapshots.clear()\n transition = undefined\n routerControllers.delete(options.router)\n controllers.delete(controller)\n },\n }\n\n const state: ScrollControllerState = {\n controller,\n get disposed() {\n return disposed\n },\n get transition() {\n return transition\n },\n get generation() {\n return generation\n },\n resolveRoute: page => router.resolve(resolvePageRoute(page)),\n register(page, registration) {\n if (disposed) {\n throw new Error('scroll restoration 会话已 dispose()。')\n }\n let records = registrations.get(page)\n if (!records) {\n records = new Set()\n registrations.set(page, records)\n }\n for (const record of records) {\n if (record.key === registration.key && record.id === registration.id) {\n throw new Error(`同一页面重复注册 scroll restoration key/id: ${registration.key} / ${registration.id}`)\n }\n }\n records.add(registration)\n return () => {\n records.delete(registration)\n if (records.size === 0) {\n registrations.delete(page)\n }\n }\n },\n read: (key, id) => snapshots.get(key)?.get(id),\n save(key, id, value) {\n if (disposed) {\n return\n }\n if (value === null) {\n state.clear(key, id)\n return\n }\n let entries = snapshots.get(key)\n if (!entries) {\n entries = new Map()\n snapshots.set(key, entries)\n }\n entries.set(id, value)\n },\n clear(key, id) {\n const entries = snapshots.get(key)\n entries?.delete(id)\n if (entries?.size === 0) {\n snapshots.delete(key)\n }\n for (const records of registrations.values()) {\n for (const record of records) {\n if (record.key === key && record.id === id) {\n record.invalidate()\n }\n }\n }\n },\n report,\n }\n\n if (controller.automatic) {\n unsubscribe = subscribeScrollRouteEvents({\n BeforeAppRoute(event) {\n if (disposed || transition?.event.routeEventId === event.routeEventId) {\n return\n }\n const page = currentScrollPage()\n if (page) {\n seenPages.add(page)\n for (const record of registrations.get(page) ?? []) {\n record.capture()\n }\n }\n generation++\n for (const records of registrations.values()) {\n for (const record of records) {\n record.invalidate()\n }\n }\n transition = { event, fresh: false, done: false }\n },\n BeforePageUnload(event) {\n const page = event.page\n if (!page) {\n return\n }\n // 低层卸载可能没有前置路由通知;仍在当前页时最后同步读取内存缓存。\n if (transition?.event.routeEventId !== event.routeEventId && page === currentScrollPage()) {\n for (const record of registrations.get(page) ?? []) {\n record.capture()\n }\n }\n for (const record of registrations.get(page) ?? []) {\n record.stop()\n }\n },\n AppRoute(event) {\n if (disposed || (transition && transition.event.routeEventId !== event.routeEventId)) {\n return\n }\n const page = currentScrollPage()\n if (!page || resolvePageRoute(page).path !== event.path.replace(/^\\/+/, '')) {\n return\n }\n transition ??= { event, fresh: false, done: false }\n if (transition.page) {\n return\n }\n transition.page = page\n transition.fresh = !seenPages.has(page)\n seenPages.add(page)\n },\n AppRouteDone(event) {\n if (disposed || !transition) {\n return\n }\n // 原生同路径 reLaunch 可能返回空 id;只接受已确认的新页面对应的宿主 webview,\n // 不把旧页面、保留页面或仅路径相同的完成事件认作当前导航。\n const completesFreshPage = event.routeEventId === ''\n && transition.fresh\n && Number.isInteger(transition.event.webviewId)\n && event.webviewId === transition.event.webviewId\n && event.path === transition.event.path\n && typeof event.openType === 'string'\n && event.openType === transition.event.openType\n if (transition.event.routeEventId !== event.routeEventId && !completesFreshPage) {\n return\n }\n if (!transition.page || transition.page !== currentScrollPage() || transition.done) {\n return\n }\n transition.done = true\n for (const record of registrations.get(transition.page) ?? []) {\n record.restoreAutomatic()\n }\n },\n })\n }\n controllers.set(controller, state)\n routerControllers.set(options.router, controller)\n return controller\n}\n\nexport function resolveScrollController(controller?: ScrollRestorationController): ScrollControllerState {\n const router = getActiveRouter()\n const resolved = controller ?? (router && routerControllers.get(router))\n const state = resolved && controllers.get(resolved)\n if (!state || state.disposed) {\n throw new Error('请先在应用启动时调用 createScrollRestoration({ router }),或传入有效的 controller。')\n }\n return state\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { getCurrentMiniProgramGlobalObject } from "../../runtime/platform/current.mjs";
|
|
2
|
+
import { getCurrentMiniProgramPages } from "../../runtime/platform.mjs";
|
|
3
|
+
import { pushHook } from "../../runtime/hooks/base.mjs";
|
|
4
|
+
import { WEVU_HOOKS_KEY, WEVU_NATIVE_INSTANCE_KEY, WEVU_ROUTE_EVENT_CONTRACT_KEY } from "@weapp-core/constants";
|
|
5
|
+
|
|
6
|
+
//#region src/router/scrollRestoration/host.ts
|
|
7
|
+
const routeEvents = [
|
|
8
|
+
"BeforeAppRoute",
|
|
9
|
+
"BeforePageUnload",
|
|
10
|
+
"AppRoute",
|
|
11
|
+
"AppRouteDone"
|
|
12
|
+
];
|
|
13
|
+
function supportsScrollRouteEvents(host = getCurrentMiniProgramGlobalObject()) {
|
|
14
|
+
if (!host || !routeEvents.every((name) => typeof host[`on${name}`] === "function" && typeof host[`off${name}`] === "function")) return false;
|
|
15
|
+
if (host[WEVU_ROUTE_EVENT_CONTRACT_KEY] === 1) return true;
|
|
16
|
+
const version = host.getAppBaseInfo?.().SDKVersion ?? host.getSystemInfoSync?.().SDKVersion;
|
|
17
|
+
if (typeof version !== "string") return false;
|
|
18
|
+
const match = /^(\d+)\.(\d+)\.(\d+)(?:\D|$)/.exec(version);
|
|
19
|
+
if (!match) return false;
|
|
20
|
+
const major = Number(match[1]);
|
|
21
|
+
const minor = Number(match[2]);
|
|
22
|
+
const patch = Number(match[3]);
|
|
23
|
+
return major > 3 || major === 3 && (minor > 5 || minor === 5 && patch >= 5);
|
|
24
|
+
}
|
|
25
|
+
function subscribeScrollRouteEvents(handlers) {
|
|
26
|
+
const host = getCurrentMiniProgramGlobalObject();
|
|
27
|
+
const cleanups = [];
|
|
28
|
+
try {
|
|
29
|
+
for (const name of routeEvents) {
|
|
30
|
+
const listener = (event) => {
|
|
31
|
+
if (typeof event?.routeEventId === "string" && typeof event.path === "string") handlers[name](event);
|
|
32
|
+
};
|
|
33
|
+
host[`on${name}`](listener);
|
|
34
|
+
cleanups.push(() => host[`off${name}`](listener));
|
|
35
|
+
}
|
|
36
|
+
} catch (error) {
|
|
37
|
+
for (const cleanup of cleanups) cleanup();
|
|
38
|
+
throw error;
|
|
39
|
+
}
|
|
40
|
+
return () => {
|
|
41
|
+
for (const cleanup of cleanups) cleanup();
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function currentScrollPage() {
|
|
45
|
+
const pages = getCurrentMiniProgramPages();
|
|
46
|
+
return pages[pages.length - 1];
|
|
47
|
+
}
|
|
48
|
+
/** 按实例或宿主页面 id 查找归属,不用路径猜测同路由的多个页面。 */
|
|
49
|
+
function resolveScrollPage(instance) {
|
|
50
|
+
const pages = getCurrentMiniProgramPages();
|
|
51
|
+
const visited = /* @__PURE__ */ new Set();
|
|
52
|
+
let owner = instance;
|
|
53
|
+
while (owner && !visited.has(owner)) {
|
|
54
|
+
visited.add(owner);
|
|
55
|
+
if (pages.includes(owner)) return owner;
|
|
56
|
+
const pageId = owner.__wxWebviewId__;
|
|
57
|
+
if (pageId !== void 0) {
|
|
58
|
+
const page = pages.find((candidate) => candidate.__wxWebviewId__ === pageId);
|
|
59
|
+
if (page) return page;
|
|
60
|
+
}
|
|
61
|
+
const native = owner[WEVU_NATIVE_INSTANCE_KEY] ?? owner.$;
|
|
62
|
+
owner = native && native !== owner ? native : owner.selectOwnerComponent?.();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function addScrollHook(instance, name, handler) {
|
|
66
|
+
pushHook(instance, name, handler);
|
|
67
|
+
return () => {
|
|
68
|
+
const bucket = instance[WEVU_HOOKS_KEY];
|
|
69
|
+
const hooks = bucket?.[name];
|
|
70
|
+
if (bucket && Array.isArray(hooks)) bucket[name] = hooks.filter((hook) => hook !== handler);
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
//#endregion
|
|
75
|
+
export { addScrollHook, currentScrollPage, resolveScrollPage, subscribeScrollRouteEvents, supportsScrollRouteEvents };
|
|
76
|
+
//# sourceMappingURL=host.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.mjs","names":[],"sources":["../../../../src/router/scrollRestoration/host.ts"],"sourcesContent":["import type { WEVU_READY_CALLED_KEY } from '@weapp-core/constants'\nimport type { MiniProgramPageLike } from '../../routerInternal/types'\nimport type { InternalRuntimeState } from '../../runtime/types'\nimport type { LocationQueryRaw } from '../types'\nimport { WEVU_HOOKS_KEY, WEVU_NATIVE_INSTANCE_KEY, WEVU_ROUTE_EVENT_CONTRACT_KEY } from '@weapp-core/constants'\nimport { pushHook } from '../../runtime/hooks/base'\nimport { getCurrentMiniProgramGlobalObject, getCurrentMiniProgramPages } from '../../runtime/platform'\n\ntype ScrollHook = (...args: unknown[]) => void\n\nexport interface ScrollPage extends MiniProgramPageLike {\n __wxWebviewId__?: number | string\n [WEVU_NATIVE_INSTANCE_KEY]?: ScrollPage\n [WEVU_READY_CALLED_KEY]?: boolean\n [WEVU_HOOKS_KEY]?: Record<string, ScrollHook | ScrollHook[]>\n $?: ScrollPage\n selectOwnerComponent?: () => ScrollPage | undefined\n onPageScroll?: (event: { scrollTop: number }) => unknown\n}\n\nexport interface ScrollRouteEvent {\n routeEventId: string\n path: string\n query?: LocationQueryRaw\n openType?: string\n webviewId?: number\n renderer?: string\n page?: ScrollPage\n}\n\nconst routeEvents = ['BeforeAppRoute', 'BeforePageUnload', 'AppRoute', 'AppRouteDone'] as const\nexport type ScrollRouteEventName = typeof routeEvents[number]\n\nexport function supportsScrollRouteEvents(host = getCurrentMiniProgramGlobalObject()): boolean {\n if (!host || !routeEvents.every(name => typeof host[`on${name}`] === 'function' && typeof host[`off${name}`] === 'function')) {\n return false\n }\n if (host[WEVU_ROUTE_EVENT_CONTRACT_KEY] === 1) {\n return true\n }\n const version = host.getAppBaseInfo?.().SDKVersion ?? host.getSystemInfoSync?.().SDKVersion\n if (typeof version !== 'string') {\n return false\n }\n const match = /^(\\d+)\\.(\\d+)\\.(\\d+)(?:\\D|$)/.exec(version)\n if (!match) {\n return false\n }\n const major = Number(match[1])\n const minor = Number(match[2])\n const patch = Number(match[3])\n return major > 3 || (major === 3 && (minor > 5 || (minor === 5 && patch >= 5)))\n}\n\nexport function subscribeScrollRouteEvents(handlers: Record<ScrollRouteEventName, (event: ScrollRouteEvent) => void>): () => void {\n const host = getCurrentMiniProgramGlobalObject()!\n const cleanups: Array<() => void> = []\n try {\n for (const name of routeEvents) {\n const listener = (event: ScrollRouteEvent) => {\n if (typeof event?.routeEventId === 'string' && typeof event.path === 'string') {\n handlers[name](event)\n }\n }\n host[`on${name}`](listener)\n cleanups.push(() => host[`off${name}`](listener))\n }\n }\n catch (error) {\n for (const cleanup of cleanups) {\n cleanup()\n }\n throw error\n }\n return () => {\n for (const cleanup of cleanups) {\n cleanup()\n }\n }\n}\n\nexport function currentScrollPage(): ScrollPage | undefined {\n const pages = getCurrentMiniProgramPages()\n return pages[pages.length - 1]\n}\n\n/** 按实例或宿主页面 id 查找归属,不用路径猜测同路由的多个页面。 */\nexport function resolveScrollPage(instance: ScrollPage): ScrollPage | undefined {\n const pages = getCurrentMiniProgramPages()\n const visited = new Set<object>()\n let owner: ScrollPage | undefined = instance\n while (owner && !visited.has(owner)) {\n visited.add(owner)\n if (pages.includes(owner)) {\n return owner\n }\n const pageId = owner.__wxWebviewId__\n if (pageId !== undefined) {\n const page = pages.find(candidate => candidate.__wxWebviewId__ === pageId)\n if (page) {\n return page\n }\n }\n const native: ScrollPage | undefined = owner[WEVU_NATIVE_INSTANCE_KEY] ?? owner.$\n owner = native && native !== owner\n ? native\n : owner.selectOwnerComponent?.()\n }\n return undefined\n}\n\nexport function addScrollHook(instance: ScrollPage, name: string, handler: ScrollHook): () => void {\n pushHook(instance as InternalRuntimeState, name, handler)\n return () => {\n const bucket = instance[WEVU_HOOKS_KEY]\n const hooks = bucket?.[name]\n if (bucket && Array.isArray(hooks)) {\n // 不原地修改正在被生命周期分发器遍历的数组,避免跳过后续用户 hook。\n bucket[name] = hooks.filter(hook => hook !== handler)\n }\n }\n}\n"],"mappings":";;;;;;AA8BA,MAAM,cAAc;CAAC;CAAkB;CAAoB;CAAY;AAAc;AAGrF,SAAgB,0BAA0B,OAAO,kCAAkC,GAAY;CAC7F,IAAI,CAAC,QAAQ,CAAC,YAAY,OAAM,SAAQ,OAAO,KAAK,KAAK,YAAY,cAAc,OAAO,KAAK,MAAM,YAAY,UAAU,GACzH,OAAO;CAET,IAAI,KAAK,mCAAmC,GAC1C,OAAO;CAET,MAAM,UAAU,KAAK,iBAAiB,CAAC,CAAC,cAAc,KAAK,oBAAoB,CAAC,CAAC;CACjF,IAAI,OAAO,YAAY,UACrB,OAAO;CAET,MAAM,QAAQ,+BAA+B,KAAK,OAAO;CACzD,IAAI,CAAC,OACH,OAAO;CAET,MAAM,QAAQ,OAAO,MAAM,EAAE;CAC7B,MAAM,QAAQ,OAAO,MAAM,EAAE;CAC7B,MAAM,QAAQ,OAAO,MAAM,EAAE;CAC7B,OAAO,QAAQ,KAAM,UAAU,MAAM,QAAQ,KAAM,UAAU,KAAK,SAAS;AAC7E;AAEA,SAAgB,2BAA2B,UAAuF;CAChI,MAAM,OAAO,kCAAkC;CAC/C,MAAM,WAA8B,CAAC;CACrC,IAAI;EACF,KAAK,MAAM,QAAQ,aAAa;GAC9B,MAAM,YAAY,UAA4B;IAC5C,IAAI,OAAO,OAAO,iBAAiB,YAAY,OAAO,MAAM,SAAS,UACnE,SAAS,KAAK,CAAC,KAAK;GAExB;GACA,KAAK,KAAK,OAAO,CAAC,QAAQ;GAC1B,SAAS,WAAW,KAAK,MAAM,OAAO,CAAC,QAAQ,CAAC;EAClD;CACF,SACO,OAAO;EACZ,KAAK,MAAM,WAAW,UACpB,QAAQ;EAEV,MAAM;CACR;CACA,aAAa;EACX,KAAK,MAAM,WAAW,UACpB,QAAQ;CAEZ;AACF;AAEA,SAAgB,oBAA4C;CAC1D,MAAM,QAAQ,2BAA2B;CACzC,OAAO,MAAM,MAAM,SAAS;AAC9B;;AAGA,SAAgB,kBAAkB,UAA8C;CAC9E,MAAM,QAAQ,2BAA2B;CACzC,MAAM,0BAAU,IAAI,IAAY;CAChC,IAAI,QAAgC;CACpC,OAAO,SAAS,CAAC,QAAQ,IAAI,KAAK,GAAG;EACnC,QAAQ,IAAI,KAAK;EACjB,IAAI,MAAM,SAAS,KAAK,GACtB,OAAO;EAET,MAAM,SAAS,MAAM;EACrB,IAAI,WAAW,QAAW;GACxB,MAAM,OAAO,MAAM,MAAK,cAAa,UAAU,oBAAoB,MAAM;GACzE,IAAI,MACF,OAAO;EAEX;EACA,MAAM,SAAiC,MAAM,6BAA6B,MAAM;EAChF,QAAQ,UAAU,WAAW,QACzB,SACA,MAAM,uBAAuB;CACnC;AAEF;AAEA,SAAgB,cAAc,UAAsB,MAAc,SAAiC;CACjG,SAAS,UAAkC,MAAM,OAAO;CACxD,aAAa;EACX,MAAM,SAAS,SAAS;EACxB,MAAM,QAAQ,SAAS;EACvB,IAAI,UAAU,MAAM,QAAQ,KAAK,GAE/B,OAAO,QAAQ,MAAM,QAAO,SAAQ,SAAS,OAAO;CAExD;AACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ScrollRestorationContext, ScrollRestorationController, ScrollRestorationHandle, ScrollRestorationOptions, ScrollRestorationRegistrationOptions, ScrollViewRestorationHandle, UseScrollRestorationOptions } from "./types.mjs";
|
|
2
|
+
import "./host.mjs";
|
|
3
|
+
import { createScrollRestoration } from "./controller.mjs";
|
|
4
|
+
//#region src/router/scrollRestoration/index.d.ts
|
|
5
|
+
/** 在同步 setup 中注册快照;只恢复新实例,不覆盖原生保留页的位置。 */
|
|
6
|
+
export declare function useScrollRestoration<T extends object>(options: UseScrollRestorationOptions<T>): ScrollRestorationHandle;
|
|
7
|
+
//#endregion
|
|
8
|
+
export { type ScrollRestorationContext, type ScrollRestorationController, type ScrollRestorationHandle, type ScrollRestorationOptions, type ScrollRestorationRegistrationOptions, type ScrollViewRestorationHandle, type UseScrollRestorationOptions, createScrollRestoration };
|
|
9
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { onScopeDispose } from "../../reactivity/core.mjs";
|
|
2
|
+
import { assertInSetup, getCurrentSetupContext } from "../../runtime/hooks/base.mjs";
|
|
3
|
+
import { getInitialNavigationPromise } from "../initialNavigation.mjs";
|
|
4
|
+
import { addScrollHook, currentScrollPage, resolveScrollPage } from "./host.mjs";
|
|
5
|
+
import { createScrollRestoration, resolveScrollController } from "./controller.mjs";
|
|
6
|
+
import { WEVU_READY_CALLED_KEY } from "@weapp-core/constants";
|
|
7
|
+
|
|
8
|
+
//#region src/router/scrollRestoration/index.ts
|
|
9
|
+
function getScrollSetupScope() {
|
|
10
|
+
const instance = assertInSetup("useScrollRestoration");
|
|
11
|
+
const proxy = getCurrentSetupContext()?.proxy;
|
|
12
|
+
if (typeof proxy?.$nextTick !== "function") throw new TypeError("scroll restoration 需要具有宿主提交屏障的 wevu setup 实例。");
|
|
13
|
+
return {
|
|
14
|
+
instance,
|
|
15
|
+
commit: () => proxy.$nextTick()
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function registerScrollRestoration(options, lifecycle) {
|
|
19
|
+
const { instance, commit } = getScrollSetupScope();
|
|
20
|
+
const state = resolveScrollController(options.controller);
|
|
21
|
+
const cleanups = [];
|
|
22
|
+
let page;
|
|
23
|
+
let route;
|
|
24
|
+
let stopped = false;
|
|
25
|
+
let visible = true;
|
|
26
|
+
let captured = false;
|
|
27
|
+
let attempted = false;
|
|
28
|
+
let request = 0;
|
|
29
|
+
let instanceReady = Boolean(instance[WEVU_READY_CALLED_KEY]);
|
|
30
|
+
let pageReady = false;
|
|
31
|
+
let readyPromise;
|
|
32
|
+
let resolveReady;
|
|
33
|
+
let registration;
|
|
34
|
+
function releaseReady() {
|
|
35
|
+
if (stopped || instanceReady && pageReady) resolveReady?.();
|
|
36
|
+
}
|
|
37
|
+
function bindPage() {
|
|
38
|
+
if (page || stopped) return;
|
|
39
|
+
const owner = resolveScrollPage(instance);
|
|
40
|
+
if (!owner) return;
|
|
41
|
+
const nextRoute = state.resolveRoute(owner);
|
|
42
|
+
registration.key = typeof options.key === "function" ? options.key(nextRoute) : options.key ?? nextRoute.fullPath;
|
|
43
|
+
const unregister = state.register(owner, registration);
|
|
44
|
+
page = owner;
|
|
45
|
+
route = nextRoute;
|
|
46
|
+
cleanups.push(unregister);
|
|
47
|
+
pageReady = Boolean(owner[WEVU_READY_CALLED_KEY]);
|
|
48
|
+
cleanups.push(addScrollHook(owner, "onReady", () => {
|
|
49
|
+
pageReady = true;
|
|
50
|
+
releaseReady();
|
|
51
|
+
registration.restoreAutomatic();
|
|
52
|
+
}));
|
|
53
|
+
lifecycle?.onBindPage?.(owner);
|
|
54
|
+
}
|
|
55
|
+
async function scroll() {
|
|
56
|
+
if (stopped || state.disposed) return false;
|
|
57
|
+
bindPage();
|
|
58
|
+
if (!page || !route) throw new Error("无法确定 scroll restoration 的原生归属页面,请在页面 attached 后恢复。");
|
|
59
|
+
if (!visible || currentScrollPage() !== page) return false;
|
|
60
|
+
const ticket = ++request;
|
|
61
|
+
const generation = state.generation;
|
|
62
|
+
const context = {
|
|
63
|
+
route,
|
|
64
|
+
routeEventId: state.transition?.page === page ? state.transition.event.routeEventId : void 0,
|
|
65
|
+
isActive: () => !stopped && !state.disposed && visible && ticket === request && generation === state.generation && currentScrollPage() === page
|
|
66
|
+
};
|
|
67
|
+
if (!instanceReady || !pageReady) {
|
|
68
|
+
readyPromise ?? (readyPromise = new Promise((resolve) => {
|
|
69
|
+
resolveReady = resolve;
|
|
70
|
+
}));
|
|
71
|
+
await readyPromise;
|
|
72
|
+
}
|
|
73
|
+
if (!context.isActive()) return false;
|
|
74
|
+
if (await getInitialNavigationPromise(page) === false || !context.isActive()) return false;
|
|
75
|
+
await commit();
|
|
76
|
+
if (!context.isActive()) return false;
|
|
77
|
+
const snapshot = state.read(registration.key, registration.id);
|
|
78
|
+
await options.restore(snapshot, context);
|
|
79
|
+
return context.isActive();
|
|
80
|
+
}
|
|
81
|
+
registration = {
|
|
82
|
+
key: "",
|
|
83
|
+
id: options.id ?? "default",
|
|
84
|
+
capture() {
|
|
85
|
+
if (stopped || state.disposed || !page || !visible || captured) return;
|
|
86
|
+
captured = true;
|
|
87
|
+
try {
|
|
88
|
+
const snapshot = options.capture();
|
|
89
|
+
if (snapshot !== null && "then" in snapshot && typeof snapshot.then === "function") throw new TypeError("scroll restoration capture 必须同步返回快照,不能返回 Promise。");
|
|
90
|
+
state.save(registration.key, registration.id, snapshot);
|
|
91
|
+
} catch (error) {
|
|
92
|
+
state.clear(registration.key, registration.id);
|
|
93
|
+
state.report(error);
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
invalidate() {
|
|
97
|
+
request++;
|
|
98
|
+
resolveReady?.();
|
|
99
|
+
readyPromise = void 0;
|
|
100
|
+
resolveReady = void 0;
|
|
101
|
+
},
|
|
102
|
+
restoreAutomatic() {
|
|
103
|
+
const transition = state.transition;
|
|
104
|
+
if (stopped || options.manual || attempted || !instanceReady || !pageReady || !transition?.fresh || !transition.done || transition.page !== page) return;
|
|
105
|
+
attempted = true;
|
|
106
|
+
scroll().catch(state.report);
|
|
107
|
+
},
|
|
108
|
+
stop() {
|
|
109
|
+
if (stopped) return;
|
|
110
|
+
stopped = true;
|
|
111
|
+
request++;
|
|
112
|
+
releaseReady();
|
|
113
|
+
for (const cleanup of cleanups) cleanup();
|
|
114
|
+
cleanups.length = 0;
|
|
115
|
+
lifecycle?.onStop?.();
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
function captureBeforeStop() {
|
|
119
|
+
registration.capture();
|
|
120
|
+
registration.stop();
|
|
121
|
+
}
|
|
122
|
+
cleanups.push(addScrollHook(instance, "onAttached", bindPage), addScrollHook(instance, "onReady", () => {
|
|
123
|
+
bindPage();
|
|
124
|
+
instanceReady = true;
|
|
125
|
+
releaseReady();
|
|
126
|
+
registration.restoreAutomatic();
|
|
127
|
+
}), addScrollHook(instance, "onShow", () => {
|
|
128
|
+
bindPage();
|
|
129
|
+
visible = true;
|
|
130
|
+
captured = false;
|
|
131
|
+
}), addScrollHook(instance, "onHide", () => {
|
|
132
|
+
registration.capture();
|
|
133
|
+
visible = false;
|
|
134
|
+
registration.invalidate();
|
|
135
|
+
}), addScrollHook(instance, "onDetached", captureBeforeStop), addScrollHook(instance, "onUnload", captureBeforeStop));
|
|
136
|
+
onScopeDispose(captureBeforeStop);
|
|
137
|
+
bindPage();
|
|
138
|
+
registration.restoreAutomatic();
|
|
139
|
+
return {
|
|
140
|
+
automatic: state.controller.automatic && !options.manual,
|
|
141
|
+
scroll,
|
|
142
|
+
clear: () => {
|
|
143
|
+
bindPage();
|
|
144
|
+
if (page) state.clear(registration.key, registration.id);
|
|
145
|
+
},
|
|
146
|
+
stop: registration.stop
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/** 在同步 setup 中注册快照;只恢复新实例,不覆盖原生保留页的位置。 */
|
|
150
|
+
function useScrollRestoration(options) {
|
|
151
|
+
return registerScrollRestoration(options);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
//#endregion
|
|
155
|
+
export { createScrollRestoration, getScrollSetupScope, registerScrollRestoration, useScrollRestoration };
|
|
156
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/router/scrollRestoration/index.ts"],"sourcesContent":["import type { ScrollRegistration } from './controller'\nimport type { ScrollPage } from './host'\nimport type { ScrollRestorationContext, ScrollRestorationHandle, UseScrollRestorationOptions } from './types'\nimport { WEVU_READY_CALLED_KEY } from '@weapp-core/constants'\nimport { onScopeDispose } from '../../reactivity'\nimport { assertInSetup, getCurrentSetupContext } from '../../runtime/hooks/base'\nimport { getInitialNavigationPromise } from '../initialNavigation'\nimport { resolveScrollController } from './controller'\nimport { addScrollHook, currentScrollPage, resolveScrollPage } from './host'\n\nexport { createScrollRestoration } from './controller'\nexport type * from './types'\n\nexport function getScrollSetupScope() {\n const instance: ScrollPage = assertInSetup('useScrollRestoration')\n const proxy = getCurrentSetupContext<{ proxy: { $nextTick: () => Promise<void> } }>()?.proxy\n if (typeof proxy?.$nextTick !== 'function') {\n throw new TypeError('scroll restoration 需要具有宿主提交屏障的 wevu setup 实例。')\n }\n return { instance, commit: () => proxy.$nextTick() }\n}\n\nexport function registerScrollRestoration<T extends object>(\n options: UseScrollRestorationOptions<T>,\n lifecycle?: { onBindPage?: (page: ScrollPage) => void, onStop?: () => void },\n): ScrollRestorationHandle {\n const { instance, commit } = getScrollSetupScope()\n const state = resolveScrollController(options.controller)\n const cleanups: Array<() => void> = []\n let page: ScrollPage | undefined\n let route: ScrollRestorationContext['route'] | undefined\n let stopped = false\n let visible = true\n let captured = false\n let attempted = false\n let request = 0\n let instanceReady = Boolean(instance[WEVU_READY_CALLED_KEY])\n let pageReady = false\n let readyPromise: Promise<void> | undefined\n let resolveReady: (() => void) | undefined\n let registration: ScrollRegistration\n\n function releaseReady() {\n if (stopped || (instanceReady && pageReady)) {\n resolveReady?.()\n }\n }\n\n function bindPage() {\n if (page || stopped) {\n return\n }\n const owner = resolveScrollPage(instance)\n if (!owner) {\n return\n }\n const nextRoute = state.resolveRoute(owner)\n registration.key = typeof options.key === 'function' ? options.key(nextRoute) : options.key ?? nextRoute.fullPath\n const unregister = state.register(owner, registration)\n page = owner\n route = nextRoute\n cleanups.push(unregister)\n pageReady = Boolean(owner[WEVU_READY_CALLED_KEY])\n cleanups.push(addScrollHook(owner, 'onReady', () => {\n pageReady = true\n releaseReady()\n registration.restoreAutomatic()\n }))\n lifecycle?.onBindPage?.(owner)\n }\n\n async function scroll(): Promise<boolean> {\n if (stopped || state.disposed) {\n return false\n }\n bindPage()\n if (!page || !route) {\n throw new Error('无法确定 scroll restoration 的原生归属页面,请在页面 attached 后恢复。')\n }\n if (!visible || currentScrollPage() !== page) {\n return false\n }\n const ticket = ++request\n const generation = state.generation\n const context: ScrollRestorationContext = {\n route,\n routeEventId: state.transition?.page === page ? state.transition.event.routeEventId : undefined,\n isActive: () => !stopped && !state.disposed && visible && ticket === request\n && generation === state.generation && currentScrollPage() === page,\n }\n if (!instanceReady || !pageReady) {\n readyPromise ??= new Promise<void>((resolve) => {\n resolveReady = resolve\n })\n await readyPromise\n }\n if (!context.isActive()) {\n return false\n }\n const shouldMount = await getInitialNavigationPromise(page)\n if (shouldMount === false || !context.isActive()) {\n return false\n }\n await commit()\n if (!context.isActive()) {\n return false\n }\n // 同一个 key/id 的注册共享快照格式;格式由使用者的 T 契约约束。\n const snapshot = state.read(registration.key, registration.id) as T | undefined\n await options.restore(snapshot, context)\n return context.isActive()\n }\n\n registration = {\n key: '',\n id: options.id ?? 'default',\n capture() {\n if (stopped || state.disposed || !page || !visible || captured) {\n return\n }\n captured = true\n try {\n const snapshot = options.capture()\n if (snapshot !== null && 'then' in snapshot && typeof snapshot.then === 'function') {\n throw new TypeError('scroll restoration capture 必须同步返回快照,不能返回 Promise。')\n }\n state.save(registration.key, registration.id, snapshot)\n }\n catch (error) {\n state.clear(registration.key, registration.id)\n state.report(error)\n }\n },\n invalidate() {\n request++\n resolveReady?.()\n readyPromise = undefined\n resolveReady = undefined\n },\n restoreAutomatic() {\n const transition = state.transition\n if (stopped || options.manual || attempted || !instanceReady || !pageReady\n || !transition?.fresh || !transition.done || transition.page !== page) {\n return\n }\n attempted = true\n void scroll().catch(state.report)\n },\n stop() {\n if (stopped) {\n return\n }\n stopped = true\n request++\n releaseReady()\n for (const cleanup of cleanups) {\n cleanup()\n }\n cleanups.length = 0\n lifecycle?.onStop?.()\n },\n }\n\n function captureBeforeStop() {\n // 生命周期销毁保留最后快照;显式 stop 只注销,不能撤销先前的 clear。\n registration.capture()\n registration.stop()\n }\n\n cleanups.push(\n addScrollHook(instance, 'onAttached', bindPage),\n addScrollHook(instance, 'onReady', () => {\n bindPage()\n instanceReady = true\n releaseReady()\n registration.restoreAutomatic()\n }),\n addScrollHook(instance, 'onShow', () => {\n bindPage()\n visible = true\n captured = false\n }),\n addScrollHook(instance, 'onHide', () => {\n registration.capture()\n visible = false\n registration.invalidate()\n }),\n addScrollHook(instance, 'onDetached', captureBeforeStop),\n addScrollHook(instance, 'onUnload', captureBeforeStop),\n )\n onScopeDispose(captureBeforeStop)\n bindPage()\n registration.restoreAutomatic()\n return {\n automatic: state.controller.automatic && !options.manual,\n scroll,\n clear: () => {\n bindPage()\n if (page) {\n state.clear(registration.key, registration.id)\n }\n },\n stop: registration.stop,\n }\n}\n\n/** 在同步 setup 中注册快照;只恢复新实例,不覆盖原生保留页的位置。 */\nexport function useScrollRestoration<T extends object>(options: UseScrollRestorationOptions<T>): ScrollRestorationHandle {\n return registerScrollRestoration(options)\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Ref } from "../../reactivity/ref.mjs";
|
|
2
|
+
import "../../reactivity/index.mjs";
|
|
3
|
+
import { RouteLocationNormalizedLoaded, RouterNavigation } from "../types.mjs";
|
|
4
|
+
//#region src/router/scrollRestoration/types.d.ts
|
|
5
|
+
export interface ScrollRestorationController {
|
|
6
|
+
/** 当前宿主是否支持带 routeEventId 的自动路由关联。 */
|
|
7
|
+
readonly automatic: boolean;
|
|
8
|
+
/** 清除整个会话或指定路由 key 的快照,不注销组件。 */
|
|
9
|
+
clear: (key?: string) => void;
|
|
10
|
+
/** 注销宿主监听、组件注册和未完成的恢复,并清空会话。 */
|
|
11
|
+
dispose: () => void;
|
|
12
|
+
}
|
|
13
|
+
export interface ScrollRestorationOptions<TRouteMap extends object = object> {
|
|
14
|
+
router: RouterNavigation<TRouteMap>;
|
|
15
|
+
/** 自动捕获或恢复失败时调用;手动 scroll 的错误由调用者处理。 */
|
|
16
|
+
onError?: (error: unknown) => void;
|
|
17
|
+
}
|
|
18
|
+
export interface ScrollRestorationContext {
|
|
19
|
+
readonly route: Readonly<RouteLocationNormalizedLoaded>;
|
|
20
|
+
readonly routeEventId?: string;
|
|
21
|
+
/** 异步自定义恢复在每次 await 后、写入宿主前必须重新检查。 */
|
|
22
|
+
isActive: () => boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface ScrollRestorationRegistrationOptions {
|
|
25
|
+
controller?: ScrollRestorationController;
|
|
26
|
+
/** 默认使用包含 query 的 route.fullPath。 */
|
|
27
|
+
key?: string | ((route: Readonly<RouteLocationNormalizedLoaded>) => string);
|
|
28
|
+
/** 同一页面和路由 key 内的独立容器名,默认为 default。 */
|
|
29
|
+
id?: string;
|
|
30
|
+
/** 只捕获,不在原生路由完成后自动恢复。 */
|
|
31
|
+
manual?: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface UseScrollRestorationOptions<T extends object> extends ScrollRestorationRegistrationOptions {
|
|
34
|
+
/** 同步返回独立快照;不能返回响应式活动对象或 Promise,null 表示清除。 */
|
|
35
|
+
capture: () => (T & {
|
|
36
|
+
then?: never;
|
|
37
|
+
}) | null;
|
|
38
|
+
restore: (snapshot: T | undefined, context: ScrollRestorationContext) => void | Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
export interface ScrollRestorationHandle {
|
|
41
|
+
readonly automatic: boolean;
|
|
42
|
+
/** 等待组件就绪及宿主提交后恢复;已离开或失效时返回 false。 */
|
|
43
|
+
scroll: () => Promise<boolean>;
|
|
44
|
+
/** 只清除当前 key/id 的快照。 */
|
|
45
|
+
clear: () => void;
|
|
46
|
+
/** 停止当前注册;保留已捕获快照。 */
|
|
47
|
+
stop: () => void;
|
|
48
|
+
}
|
|
49
|
+
export interface ScrollViewRestorationHandle extends ScrollRestorationHandle {
|
|
50
|
+
scrollTop: Ref<number>;
|
|
51
|
+
scrollLeft: Ref<number>;
|
|
52
|
+
/** 绑定 scroll-view 的 scroll 事件,只更新非响应式缓存。 */
|
|
53
|
+
onScroll: (event: {
|
|
54
|
+
detail: {
|
|
55
|
+
scrollTop: number;
|
|
56
|
+
scrollLeft: number;
|
|
57
|
+
};
|
|
58
|
+
}) => void;
|
|
59
|
+
}
|
|
60
|
+
//#endregion
|
|
61
|
+
//# sourceMappingURL=types.d.mts.map
|
|
@@ -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 (
|
|
23
|
+
if (payload?.source === "router") return true;
|
|
24
24
|
if (!isPageController) return true;
|
|
25
25
|
const routeControllerInstance = resolveRouteControllerInstance(instance);
|
|
26
|
-
if (payload
|
|
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 =
|
|
51
|
-
const resolveRoute =
|
|
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
|
|
67
|
+
if (payload?.route) {
|
|
75
68
|
syncRoute(void 0, payload.route, payload);
|
|
76
69
|
return;
|
|
77
70
|
}
|
|
78
|
-
if (payload
|
|
71
|
+
if (payload?.url) {
|
|
79
72
|
syncRoute(void 0, resolveRouteLocation(payload.url, routeState.path), payload);
|
|
80
73
|
return;
|
|
81
74
|
}
|
|
82
|
-
if (payload
|
|
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
|
|
100
|
+
if (payload?.route) {
|
|
108
101
|
syncRoute(void 0, payload.route, payload);
|
|
109
102
|
return;
|
|
110
103
|
}
|
|
111
|
-
if (payload
|
|
104
|
+
if (payload?.url) {
|
|
112
105
|
syncRoute(void 0, resolveRouteLocation(payload.url, routeState.path), payload);
|
|
113
106
|
return;
|
|
114
107
|
}
|
|
115
|
-
if (payload
|
|
108
|
+
if (payload?.page) {
|
|
116
109
|
syncRoute(void 0, resolvePageRoute(payload.page), payload);
|
|
117
110
|
return;
|
|
118
111
|
}
|