wevu 7.2.1 → 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.
- 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/api/vitest/setup.d.mts +1 -0
- package/dist/dev/api/vitest.d.mts +1 -0
- package/dist/dev/api.d.mts +1 -0
- package/dist/dev/compiler.d.mts +1 -0
- package/dist/dev/fetch.d.mts +9 -0
- package/dist/dev/index.d.mts +72 -0
- package/dist/dev/internal-reactivity.d.mts +18 -0
- package/dist/dev/internal-runtime.d.mts +45 -0
- package/dist/dev/internal-runtime.mjs +3 -2
- package/dist/dev/internal-template.d.mts +2 -0
- package/dist/dev/jsxTypes.d.mts +9 -0
- package/dist/dev/macros/shared.d.mts +83 -0
- package/dist/dev/macros.d.mts +71 -0
- package/dist/dev/package.mjs +1 -1
- package/dist/dev/reactivity/asyncDerivation.d.mts +41 -0
- package/dist/dev/reactivity/asyncDerivation.mjs +8 -10
- package/dist/dev/reactivity/asyncDerivation.mjs.map +1 -1
- package/dist/dev/reactivity/computed.d.mts +25 -0
- package/dist/dev/reactivity/core.d.mts +35 -0
- package/dist/dev/reactivity/core.mjs +5 -8
- package/dist/dev/reactivity/core.mjs.map +1 -1
- package/dist/dev/reactivity/index.d.mts +16 -0
- package/dist/dev/reactivity/reactive/mutation.d.mts +21 -0
- package/dist/dev/reactivity/reactive/patch.d.mts +18 -0
- 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/shallow.d.mts +22 -0
- package/dist/dev/reactivity/reactive/shared.d.mts +4 -0
- package/dist/dev/reactivity/reactive/shared.mjs +1 -2
- package/dist/dev/reactivity/reactive/shared.mjs.map +1 -1
- package/dist/dev/reactivity/reactive.d.mts +42 -0
- package/dist/dev/reactivity/reactive.mjs +5 -10
- package/dist/dev/reactivity/reactive.mjs.map +1 -1
- package/dist/dev/reactivity/readonly.d.mts +27 -0
- package/dist/dev/reactivity/ref.d.mts +27 -0
- package/dist/dev/reactivity/ref.mjs +2 -2
- package/dist/dev/reactivity/ref.mjs.map +1 -1
- package/dist/dev/reactivity/shallowRef.d.mts +19 -0
- package/dist/dev/reactivity/shallowRef.mjs +1 -1
- package/dist/dev/reactivity/shallowRef.mjs.map +1 -1
- package/dist/dev/reactivity/toRefs.d.mts +43 -0
- package/dist/dev/reactivity/traverse.d.mts +8 -0
- package/dist/dev/reactivity/watch/helpers.mjs +1 -1
- package/dist/dev/reactivity/watch/helpers.mjs.map +1 -1
- package/dist/dev/reactivity/watch/types.d.mts +43 -0
- package/dist/dev/reactivity/watch.d.mts +22 -0
- package/dist/dev/reactivity/watch.mjs +6 -8
- package/dist/dev/reactivity/watch.mjs.map +1 -1
- package/dist/dev/router/auto-routes.d.mts +8 -0
- package/dist/dev/router/createRouter.d.mts +9 -0
- package/dist/dev/router/createRouter.mjs +17 -24
- package/dist/dev/router/createRouter.mjs.map +1 -1
- package/dist/dev/router/initialNavigation.mjs +18 -16
- 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.d.mts +7 -0
- 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.d.mts +7 -0
- 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.d.mts +2 -0
- package/dist/dev/router/routeSync.mjs +1 -1
- package/dist/dev/router/routeSync.mjs.map +1 -1
- package/dist/dev/router/types.d.mts +267 -0
- package/dist/dev/router/useRoute.d.mts +20 -0
- package/dist/dev/router/useRoute.mjs +12 -19
- package/dist/dev/router/useRoute.mjs.map +1 -1
- package/dist/dev/router/useRouter.d.mts +9 -0
- package/dist/dev/router.d.mts +26 -0
- package/dist/dev/routerInternal/location.d.mts +2 -0
- package/dist/dev/routerInternal/location.mjs +2 -3
- package/dist/dev/routerInternal/location.mjs.map +1 -1
- package/dist/dev/routerInternal/matching.d.mts +2 -0
- package/dist/dev/routerInternal/params.d.mts +2 -0
- package/dist/dev/routerInternal/params.mjs +2 -3
- package/dist/dev/routerInternal/params.mjs.map +1 -1
- package/dist/dev/routerInternal/query.d.mts +7 -0
- package/dist/dev/routerInternal/records.d.mts +2 -0
- package/dist/dev/routerInternal/records.mjs +1 -1
- package/dist/dev/routerInternal/records.mjs.map +1 -1
- package/dist/dev/routerInternal/recordsWarnings.d.mts +2 -0
- package/dist/dev/routerInternal/recordsWarnings.mjs +1 -2
- package/dist/dev/routerInternal/recordsWarnings.mjs.map +1 -1
- package/dist/dev/routerInternal/shared.d.mts +9 -0
- package/dist/dev/routerInternal/snapshots.d.mts +2 -0
- package/dist/dev/routerInternal/types.d.mts +9 -0
- 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/pending.d.mts +10 -0
- package/dist/dev/runtime/app/setData/commitTracker.d.mts +13 -0
- 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.d.mts +51 -0
- 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.d.mts +8 -0
- 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 +78 -0
- package/dist/dev/runtime/capabilities.mjs.map +1 -1
- package/dist/dev/runtime/css.d.mts +14 -0
- package/dist/dev/runtime/css.mjs +4 -8
- package/dist/dev/runtime/css.mjs.map +1 -1
- package/dist/dev/runtime/defaults.d.mts +12 -0
- 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.d.mts +118 -0
- 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.d.mts +31 -0
- package/dist/dev/runtime/disposables.mjs +2 -2
- package/dist/dev/runtime/disposables.mjs.map +1 -1
- package/dist/dev/runtime/elementIntersectionObserver.d.mts +26 -0
- package/dist/dev/runtime/elementIntersectionObserver.mjs +16 -24
- package/dist/dev/runtime/elementIntersectionObserver.mjs.map +1 -1
- package/dist/dev/runtime/features/inlineEvents.d.mts +7 -0
- 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.d.mts +7 -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/patchStrategy.d.mts +7 -0
- package/dist/dev/runtime/features/publicLayout.d.mts +24 -0
- 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.d.mts +23 -0
- package/dist/dev/runtime/features/scopedSlots.mjs +5 -9
- package/dist/dev/runtime/features/scopedSlots.mjs.map +1 -1
- package/dist/dev/runtime/features/setDataHighFrequencyWarning.d.mts +7 -0
- package/dist/dev/runtime/features/templateRefs.d.mts +7 -0
- 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.d.mts +27 -0
- package/dist/dev/runtime/hooks/base.mjs +21 -32
- package/dist/dev/runtime/hooks/base.mjs.map +1 -1
- package/dist/dev/runtime/hooks/register.d.mts +30 -0
- package/dist/dev/runtime/hooks/vue.d.mts +52 -0
- package/dist/dev/runtime/hooks.d.mts +4 -0
- package/dist/dev/runtime/index.d.mts +46 -0
- package/dist/dev/runtime/inlineDataset.mjs +1 -2
- package/dist/dev/runtime/inlineDataset.mjs.map +1 -1
- package/dist/dev/runtime/intersectionObserver.d.mts +14 -0
- package/dist/dev/runtime/intersectionObserver.mjs +6 -6
- package/dist/dev/runtime/intersectionObserver.mjs.map +1 -1
- package/dist/dev/runtime/jsxIsland.d.mts +37 -0
- package/dist/dev/runtime/jsxIsland.mjs +16 -33
- package/dist/dev/runtime/jsxIsland.mjs.map +1 -1
- package/dist/dev/runtime/layoutBridge.d.mts +55 -0
- 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/noSetData.d.mts +5 -0
- package/dist/dev/runtime/pageEnvironment.d.mts +50 -0
- package/dist/dev/runtime/pageEnvironment.mjs +15 -18
- package/dist/dev/runtime/pageEnvironment.mjs.map +1 -1
- package/dist/dev/runtime/pageLayout.d.mts +25 -0
- package/dist/dev/runtime/pageLayout.mjs +7 -11
- package/dist/dev/runtime/pageLayout.mjs.map +1 -1
- package/dist/dev/runtime/pageScroll.d.mts +29 -0
- 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/provide.d.mts +60 -0
- package/dist/dev/runtime/provideContext.mjs +7 -9
- package/dist/dev/runtime/provideContext.mjs.map +1 -1
- package/dist/dev/runtime/provideStore.d.mts +7 -0
- package/dist/dev/runtime/publicRuntime.d.mts +22 -0
- package/dist/dev/runtime/publicRuntime.mjs +4 -0
- package/dist/dev/runtime/publicRuntime.mjs.map +1 -1
- package/dist/dev/runtime/pullDownRefresh.d.mts +12 -0
- package/dist/dev/runtime/pullDownRefresh.mjs +2 -4
- package/dist/dev/runtime/pullDownRefresh.mjs.map +1 -1
- package/dist/dev/runtime/register/app.d.mts +14 -0
- 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/platform.mjs +8 -9
- 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 +18 -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.d.mts +17 -0
- 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.d.mts +15 -0
- 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 +6 -13
- 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.d.mts +26 -0
- 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.d.mts +11 -0
- 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.d.mts +12 -0
- package/dist/dev/runtime/register/watch.mjs +3 -5
- package/dist/dev/runtime/register/watch.mjs.map +1 -1
- package/dist/dev/runtime/register.d.mts +5 -0
- package/dist/dev/runtime/scopedSlots.mjs +14 -21
- package/dist/dev/runtime/scopedSlots.mjs.map +1 -1
- package/dist/dev/runtime/selectorQuery.d.mts +54 -0
- package/dist/dev/runtime/selectorQuery.mjs +5 -9
- package/dist/dev/runtime/selectorQuery.mjs.map +1 -1
- package/dist/dev/runtime/template.d.mts +6 -0
- package/dist/dev/runtime/template.mjs +1 -1
- package/dist/dev/runtime/template.mjs.map +1 -1
- package/dist/dev/runtime/templateRefTypes.d.mts +12 -0
- 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/types/core.d.mts +35 -0
- package/dist/dev/runtime/types/miniprogram.d.mts +84 -0
- package/dist/dev/runtime/types/miniprogramHost.d.mts +45 -0
- package/dist/dev/runtime/types/miniprogramHostSources.d.mts +112 -0
- package/dist/dev/runtime/types/options.d.mts +138 -0
- package/dist/dev/runtime/types/props/propTypes.d.mts +79 -0
- package/dist/dev/runtime/types/props/router.d.mts +51 -0
- package/dist/dev/runtime/types/props/setup.d.mts +96 -0
- package/dist/dev/runtime/types/props.d.mts +4 -0
- package/dist/dev/runtime/types/runtime.d.mts +59 -0
- package/dist/dev/runtime/types/setData.d.mts +237 -0
- package/dist/dev/runtime/types.d.mts +29 -0
- package/dist/dev/runtime/uniAppHost.d.mts +8 -0
- package/dist/dev/runtime/uniAppHost.mjs +6 -14
- package/dist/dev/runtime/uniAppHost.mjs.map +1 -1
- package/dist/dev/runtime/updatePerformance.d.mts +13 -0
- package/dist/dev/runtime/updatePerformance.mjs +1 -1
- package/dist/dev/runtime/updatePerformance.mjs.map +1 -1
- package/dist/dev/runtime/use.d.mts +13 -0
- package/dist/dev/runtime/use.mjs +1 -1
- package/dist/dev/runtime/use.mjs.map +1 -1
- package/dist/dev/runtime/vueCompat/context.d.mts +8 -0
- 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.d.mts +30 -0
- 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.d.mts +29 -0
- 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.d.mts +9 -0
- package/dist/dev/runtime/vueCompat/templateRef.mjs +1 -1
- package/dist/dev/runtime/vueCompat/templateRef.mjs.map +1 -1
- package/dist/dev/runtime/vueCompat.d.mts +5 -0
- package/dist/dev/scheduler.d.mts +4 -0
- 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.d.mts +8 -0
- package/dist/dev/store/define.mjs +1 -1
- package/dist/dev/store/define.mjs.map +1 -1
- package/dist/dev/store/manager.d.mts +16 -0
- package/dist/dev/store/storeToRefs.d.mts +11 -0
- package/dist/dev/store/types.d.mts +106 -0
- package/dist/dev/store/view.mjs +1 -1
- package/dist/dev/store/view.mjs.map +1 -1
- package/dist/dev/store.d.mts +5 -0
- package/dist/dev/version.d.mts +4 -0
- package/dist/dev/vue-augment.d.mts +8 -0
- package/dist/dev/vue-demi.d.mts +87 -0
- package/dist/dev/vue-types.d.mts +19 -0
- package/dist/dev/web-apis.d.mts +3 -0
- 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/useRoute.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/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/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
|
@@ -35,8 +35,7 @@ function createLayoutHostRegistry() {
|
|
|
35
35
|
const normalizedKeys = normalizeLayoutHostKeys(keys);
|
|
36
36
|
if (normalizedKeys.length === 0 || pageKeys.length === 0) return null;
|
|
37
37
|
for (const pageKey of pageKeys) {
|
|
38
|
-
|
|
39
|
-
const registry = (_registries$get = registries.get(pageKey)) !== null && _registries$get !== void 0 ? _registries$get : /* @__PURE__ */ new Map();
|
|
38
|
+
const registry = registries.get(pageKey) ?? /* @__PURE__ */ new Map();
|
|
40
39
|
for (const key of normalizedKeys) registry.set(key, bridge);
|
|
41
40
|
registries.set(pageKey, registry);
|
|
42
41
|
}
|
|
@@ -58,21 +57,16 @@ function createLayoutHostRegistry() {
|
|
|
58
57
|
return removed;
|
|
59
58
|
}
|
|
60
59
|
function resolveBridge(key, pageKeys) {
|
|
61
|
-
return pageKeys.map((pageKey) =>
|
|
62
|
-
var _registries$get2;
|
|
63
|
-
return (_registries$get2 = registries.get(pageKey)) === null || _registries$get2 === void 0 ? void 0 : _registries$get2.get(key);
|
|
64
|
-
}).find(Boolean);
|
|
60
|
+
return pageKeys.map((pageKey) => registries.get(pageKey)?.get(key)).find(Boolean);
|
|
65
61
|
}
|
|
66
62
|
function resolveHost(key, pageKeys, resolver) {
|
|
67
|
-
var _resolver;
|
|
68
63
|
const bridge = resolveBridge(key, pageKeys);
|
|
69
64
|
if (!bridge) return null;
|
|
70
|
-
return
|
|
65
|
+
return resolver(bridge, key) ?? null;
|
|
71
66
|
}
|
|
72
67
|
function waitForHost(key, resolvePageKeys, resolver, options = {}) {
|
|
73
|
-
|
|
74
|
-
const
|
|
75
|
-
const interval = (_options$interval = options.interval) !== null && _options$interval !== void 0 ? _options$interval : 16;
|
|
68
|
+
const retries = options.retries ?? 20;
|
|
69
|
+
const interval = options.interval ?? 16;
|
|
76
70
|
const host = resolveHost(key, resolvePageKeys(), resolver);
|
|
77
71
|
if (host || retries <= 0) return Promise.resolve(host);
|
|
78
72
|
return new Promise((resolve) => {
|
|
@@ -101,11 +95,10 @@ function resolvePageKeys(page) {
|
|
|
101
95
|
return resolvePageIdentityKeys(page);
|
|
102
96
|
}
|
|
103
97
|
function resolveNativeLayoutContext(context) {
|
|
104
|
-
var _context$WEVU_PUBLIC_, _context$$state;
|
|
105
98
|
if (!context || typeof context !== "object") return;
|
|
106
|
-
const runtimeNativeInstance =
|
|
99
|
+
const runtimeNativeInstance = context[WEVU_PUBLIC_RUNTIME_KEY]?.state?.[WEVU_NATIVE_INSTANCE_KEY];
|
|
107
100
|
if (runtimeNativeInstance && typeof runtimeNativeInstance === "object") return runtimeNativeInstance;
|
|
108
|
-
const stateNativeInstance =
|
|
101
|
+
const stateNativeInstance = context.$state?.[WEVU_NATIVE_INSTANCE_KEY];
|
|
109
102
|
if (stateNativeInstance && typeof stateNativeInstance === "object") return stateNativeInstance;
|
|
110
103
|
if (context[WEVU_NATIVE_INSTANCE_KEY] && typeof context[WEVU_NATIVE_INSTANCE_KEY] === "object") return context[WEVU_NATIVE_INSTANCE_KEY];
|
|
111
104
|
return context;
|
|
@@ -124,7 +117,7 @@ function resolvePageFromContext(context, visited = /* @__PURE__ */ new Set()) {
|
|
|
124
117
|
const nativePage = resolvePageFromContext(publicNativePage, visited);
|
|
125
118
|
if (nativePage) return nativePage;
|
|
126
119
|
}
|
|
127
|
-
const ownerContext = nativeContext
|
|
120
|
+
const ownerContext = nativeContext ?? context;
|
|
128
121
|
const selectOwnerComponent = ownerContext.selectOwnerComponent;
|
|
129
122
|
if (typeof selectOwnerComponent === "function") try {
|
|
130
123
|
const owner = selectOwnerComponent.call(ownerContext);
|
|
@@ -132,7 +125,7 @@ function resolvePageFromContext(context, visited = /* @__PURE__ */ new Set()) {
|
|
|
132
125
|
const ownerPage = resolvePageFromContext(owner, visited);
|
|
133
126
|
if (ownerPage) return ownerPage;
|
|
134
127
|
}
|
|
135
|
-
} catch
|
|
128
|
+
} catch {}
|
|
136
129
|
return resolveCurrentPageInstance();
|
|
137
130
|
}
|
|
138
131
|
function resolveHostEntry(entry) {
|
|
@@ -144,26 +137,21 @@ function findLayoutHostBinding(bindings, key) {
|
|
|
144
137
|
return bindings.find((binding) => binding.key === key);
|
|
145
138
|
}
|
|
146
139
|
function safeSelectComponent(target, selector) {
|
|
147
|
-
const selectComponent = target
|
|
140
|
+
const selectComponent = target?.selectComponent;
|
|
148
141
|
if (typeof selectComponent !== "function") return null;
|
|
149
142
|
try {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
} catch (_unused2) {
|
|
143
|
+
return selectComponent.call(target, selector) ?? null;
|
|
144
|
+
} catch {
|
|
153
145
|
return null;
|
|
154
146
|
}
|
|
155
147
|
}
|
|
156
148
|
function resolveDeclaredLayoutHostFromRefs(binding, context) {
|
|
157
|
-
var _ref, _ref2, _context$WEVU_PUBLIC_2, _context$WEVU_PUBLIC_3, _context$__wevu, _context$$state2, _refMap$get$value, _refMap$get;
|
|
158
149
|
if (!binding.refName) return null;
|
|
159
150
|
const refMap = getTemplateRefMap(context);
|
|
160
|
-
const stateRefs =
|
|
161
|
-
const refValue =
|
|
162
|
-
if (Array.isArray(refValue))
|
|
163
|
-
|
|
164
|
-
return (_refValue$ = refValue[0]) !== null && _refValue$ !== void 0 ? _refValue$ : null;
|
|
165
|
-
}
|
|
166
|
-
return refValue !== null && refValue !== void 0 ? refValue : null;
|
|
151
|
+
const stateRefs = context[WEVU_PUBLIC_RUNTIME_KEY]?.state?.$refs ?? context.__wevu?.state?.$refs ?? context.$state?.$refs ?? context.$refs;
|
|
152
|
+
const refValue = refMap?.get(binding.refName)?.value ?? stateRefs?.[binding.refName];
|
|
153
|
+
if (Array.isArray(refValue)) return refValue[0] ?? null;
|
|
154
|
+
return refValue ?? null;
|
|
167
155
|
}
|
|
168
156
|
function createDeclaredLayoutHostBridge(bindings, context) {
|
|
169
157
|
const nativeContext = resolveNativeLayoutContext(context);
|
|
@@ -172,10 +160,9 @@ function createDeclaredLayoutHostBridge(bindings, context) {
|
|
|
172
160
|
const binding = findLayoutHostBinding(bindings, key);
|
|
173
161
|
if (!binding) return null;
|
|
174
162
|
if (binding.kind === "component" || !binding.kind) {
|
|
175
|
-
var _ref3, _safeSelectComponent;
|
|
176
163
|
const cachedHost = resolveDeclaredLayoutHostFromRefs(binding, context);
|
|
177
164
|
if (cachedHost) return cachedHost;
|
|
178
|
-
return
|
|
165
|
+
return safeSelectComponent(nativeContext, binding.selector) ?? safeSelectComponent(resolveCurrentPageInstance(), binding.selector) ?? null;
|
|
179
166
|
}
|
|
180
167
|
return null;
|
|
181
168
|
} });
|
|
@@ -184,7 +171,7 @@ function createDeclaredLayoutHostBridge(bindings, context) {
|
|
|
184
171
|
* 为当前页面注册 layout bridge,使页面或子组件可消费 layout 内部能力。
|
|
185
172
|
*/
|
|
186
173
|
function registerPageLayoutBridge(selectors, context) {
|
|
187
|
-
const bridgeContext = context
|
|
174
|
+
const bridgeContext = context ?? getCurrentInstance();
|
|
188
175
|
const page = resolvePageFromContext(bridgeContext);
|
|
189
176
|
const pageKeys = resolvePageKeys(page);
|
|
190
177
|
if (!bridgeContext || !page || pageKeys.length === 0) return false;
|
|
@@ -196,10 +183,9 @@ function registerPageLayoutBridge(selectors, context) {
|
|
|
196
183
|
* 移除当前页面的 layout bridge 注册。
|
|
197
184
|
*/
|
|
198
185
|
function unregisterPageLayoutBridge(selectors, context) {
|
|
199
|
-
|
|
200
|
-
const bridgeContext = context !== null && context !== void 0 ? context : getCurrentInstance();
|
|
186
|
+
const bridgeContext = context ?? getCurrentInstance();
|
|
201
187
|
const page = resolvePageFromContext(bridgeContext);
|
|
202
|
-
const pageKeys =
|
|
188
|
+
const pageKeys = bridgeContext?.[WEVU_LAYOUT_BRIDGE_PAGE_KEYS] ?? resolvePageKeys(page);
|
|
203
189
|
if (!bridgeContext || !Array.isArray(pageKeys) || pageKeys.length === 0) return false;
|
|
204
190
|
const removed = pageLayoutBridgeRegistry.unregister(selectors, bridgeContext, pageKeys);
|
|
205
191
|
delete bridgeContext[WEVU_LAYOUT_BRIDGE_PAGE_KEYS];
|
|
@@ -209,36 +195,23 @@ function unregisterPageLayoutBridge(selectors, context) {
|
|
|
209
195
|
* 解析当前页面已注册的 layout bridge,找不到时回退到传入上下文。
|
|
210
196
|
*/
|
|
211
197
|
function resolveLayoutBridge(selector, fallbackContext) {
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
const bridgeContext = pageLayoutBridgeRegistry.resolveBridge(selector, resolvePageKeys(page));
|
|
215
|
-
return (_ref4 = bridgeContext !== null && bridgeContext !== void 0 ? bridgeContext : fallbackContext) !== null && _ref4 !== void 0 ? _ref4 : getCurrentInstance();
|
|
198
|
+
const page = resolveCurrentPageInstance() ?? resolvePageFromContext(fallbackContext);
|
|
199
|
+
return pageLayoutBridgeRegistry.resolveBridge(selector, resolvePageKeys(page)) ?? fallbackContext ?? getCurrentInstance();
|
|
216
200
|
}
|
|
217
201
|
/**
|
|
218
202
|
* 解析当前页面 layout 内通过指定 key 暴露的宿主实例。
|
|
219
203
|
*/
|
|
220
204
|
function resolveLayoutHost(key, options = {}) {
|
|
221
|
-
|
|
222
|
-
const
|
|
223
|
-
|
|
224
|
-
return pageLayoutBridgeRegistry.resolveHost(key, resolvePageKeys(page), (bridge, key) => {
|
|
225
|
-
var _bridge$selectCompone;
|
|
226
|
-
return (_bridge$selectCompone = bridge.selectComponent) === null || _bridge$selectCompone === void 0 ? void 0 : _bridge$selectCompone.call(bridge, key);
|
|
227
|
-
});
|
|
205
|
+
const context = options.context ?? options.fallbackContext;
|
|
206
|
+
const page = resolveCurrentPageInstance() ?? resolvePageFromContext(context);
|
|
207
|
+
return pageLayoutBridgeRegistry.resolveHost(key, resolvePageKeys(page), (bridge, key) => bridge.selectComponent?.(key));
|
|
228
208
|
}
|
|
229
209
|
/**
|
|
230
210
|
* 等待当前页面 layout 宿主实例可用,适合页面初次进入时的异步宿主解析。
|
|
231
211
|
*/
|
|
232
212
|
function waitForLayoutHost(key, options = {}) {
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
return pageLayoutBridgeRegistry.waitForHost(key, () => {
|
|
236
|
-
var _resolveCurrentPageIn3;
|
|
237
|
-
return resolvePageKeys((_resolveCurrentPageIn3 = resolveCurrentPageInstance()) !== null && _resolveCurrentPageIn3 !== void 0 ? _resolveCurrentPageIn3 : resolvePageFromContext(context));
|
|
238
|
-
}, (bridge, key) => {
|
|
239
|
-
var _bridge$selectCompone2;
|
|
240
|
-
return (_bridge$selectCompone2 = bridge.selectComponent) === null || _bridge$selectCompone2 === void 0 ? void 0 : _bridge$selectCompone2.call(bridge, key);
|
|
241
|
-
}, options);
|
|
213
|
+
const context = options.context ?? options.fallbackContext;
|
|
214
|
+
return pageLayoutBridgeRegistry.waitForHost(key, () => resolvePageKeys(resolveCurrentPageInstance() ?? resolvePageFromContext(context)), (bridge, key) => bridge.selectComponent?.(key), options);
|
|
242
215
|
}
|
|
243
216
|
/**
|
|
244
217
|
* 在 layout 生命周期内暴露 bridge,使页面或子组件可访问 layout 内部实例。
|
|
@@ -251,15 +224,12 @@ function useLayoutBridge(selectors, options = {}) {
|
|
|
251
224
|
const nativeContext = resolveNativeLayoutContext(context);
|
|
252
225
|
const bridgeBase = nativeContext && typeof nativeContext === "object" ? Object.create(nativeContext) : {};
|
|
253
226
|
const bridge = Object.assign(bridgeBase, { selectComponent(selector) {
|
|
254
|
-
var _nativeContext$select, _currentPage$selectCo, _currentPage$selectCo2;
|
|
255
227
|
if (!normalizedSelectors.includes(selector)) return null;
|
|
256
|
-
const resolvedComponent = resolveComponent
|
|
228
|
+
const resolvedComponent = resolveComponent?.(selector);
|
|
257
229
|
if (resolvedComponent !== void 0) return resolvedComponent;
|
|
258
|
-
const
|
|
259
|
-
const directMatch = nativeContext === null || nativeContext === void 0 || (_nativeContext$select = nativeContext.selectComponent) === null || _nativeContext$select === void 0 ? void 0 : _nativeContext$select.call(nativeContext, selector);
|
|
230
|
+
const directMatch = resolveNativeLayoutContext(context)?.selectComponent?.(selector);
|
|
260
231
|
if (directMatch) return directMatch;
|
|
261
|
-
|
|
262
|
-
return (_currentPage$selectCo = currentPage === null || currentPage === void 0 || (_currentPage$selectCo2 = currentPage.selectComponent) === null || _currentPage$selectCo2 === void 0 ? void 0 : _currentPage$selectCo2.call(currentPage, selector)) !== null && _currentPage$selectCo !== void 0 ? _currentPage$selectCo : null;
|
|
232
|
+
return resolveCurrentPageInstance()?.selectComponent?.(selector) ?? null;
|
|
263
233
|
} });
|
|
264
234
|
registerPageLayoutBridge(normalizedSelectors, bridge);
|
|
265
235
|
onAttached(() => {
|
|
@@ -274,7 +244,7 @@ function useLayoutBridge(selectors, options = {}) {
|
|
|
274
244
|
*/
|
|
275
245
|
function registerRuntimeLayoutHosts(bindings, context) {
|
|
276
246
|
if (!bindings.length) return null;
|
|
277
|
-
const bridgeContext = context
|
|
247
|
+
const bridgeContext = context ?? getCurrentInstance();
|
|
278
248
|
if (!bridgeContext) return null;
|
|
279
249
|
const bridge = createDeclaredLayoutHostBridge(bindings, bridgeContext);
|
|
280
250
|
registerPageLayoutBridge(bindings.map((binding) => binding.key), bridge);
|
|
@@ -285,7 +255,7 @@ function registerRuntimeLayoutHosts(bindings, context) {
|
|
|
285
255
|
*/
|
|
286
256
|
function unregisterRuntimeLayoutHosts(bindings, context) {
|
|
287
257
|
if (!bindings.length) return false;
|
|
288
|
-
const bridgeContext = context
|
|
258
|
+
const bridgeContext = context ?? getCurrentInstance();
|
|
289
259
|
if (!bridgeContext) return false;
|
|
290
260
|
return unregisterPageLayoutBridge(bindings.map((binding) => binding.key), bridgeContext);
|
|
291
261
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layoutBridge.mjs","names":[],"sources":["../../../src/runtime/layoutBridge.ts"],"sourcesContent":["import type { Ref } from '../reactivity'\nimport type { LayoutHostBinding } from './capabilities'\nimport {\n WEVU_LAYOUT_BRIDGE_PAGE_KEYS,\n WEVU_NATIVE_INSTANCE_KEY,\n WEVU_PUBLIC_RUNTIME_KEY,\n} from '@weapp-core/constants'\nimport { isRef } from '../reactivity'\nimport { getCurrentInstance, getCurrentSetupContext, onAttached, onDetached } from './hooks'\nimport { getCurrentMiniProgramPages } from './platform'\nimport { getTemplateRefMap } from './templateRefs/helpers'\n\ntype LayoutBridgeContext = Record<string, any>\ntype LayoutBridgeComponentResolver = (selector: string) => any\ntype LayoutHostMap = Record<string, unknown>\nexport type LayoutBridgeInstance<T = LayoutBridgeContext> = T & {\n selectComponent?: LayoutBridgeComponentResolver\n}\nexport type { LayoutHostBinding } from './capabilities'\ninterface LayoutHostResolveOptions<T = any> {\n context?: T\n fallbackContext?: T\n interval?: number\n retries?: number\n}\n\n/**\n * @description 对 layout host key 去重并过滤空字符串。\n */\nfunction normalizeLayoutHostKeys(keys: string | string[]) {\n return Array.from(new Set(Array.isArray(keys) ? keys : [keys]))\n .filter((key): key is string => typeof key === 'string' && key.length > 0)\n}\n\n/**\n * @description 解析小程序页面实例的稳定身份 key。\n */\nfunction resolvePageIdentityKeys(page?: Record<string, any>): string[] {\n if (!page || typeof page !== 'object') {\n return []\n }\n\n const keys: string[] = []\n const route = typeof page.route === 'string' ? page.route.replace(/^\\/+/, '') : ''\n if (route) {\n keys.push(`route:${route}`)\n }\n for (const [prefix, field] of [\n ['webview', '__wxWebviewId__'],\n ['exparser', '__wxExparserNodeId__'],\n ] as const) {\n const value = page[field]\n if (typeof value === 'number' || typeof value === 'string') {\n keys.push(`${prefix}:${String(value)}`)\n }\n }\n\n return Array.from(new Set(keys))\n}\n\n/**\n * @description 创建小程序 layout host 注册表。\n */\nfunction createLayoutHostRegistry<TBridge>() {\n const registries = new Map<string, Map<string, TBridge>>()\n\n function register(keys: string | string[], bridge: TBridge, pageKeys: string[]) {\n const normalizedKeys = normalizeLayoutHostKeys(keys)\n if (normalizedKeys.length === 0 || pageKeys.length === 0) {\n return null\n }\n\n for (const pageKey of pageKeys) {\n const registry = registries.get(pageKey) ?? new Map<string, TBridge>()\n for (const key of normalizedKeys) {\n registry.set(key, bridge)\n }\n registries.set(pageKey, registry)\n }\n\n return normalizedKeys\n }\n\n function unregister(keys: string | string[], bridge: TBridge, pageKeys: string[]) {\n const normalizedKeys = normalizeLayoutHostKeys(keys)\n if (normalizedKeys.length === 0 || pageKeys.length === 0) {\n return false\n }\n\n let removed = false\n for (const pageKey of pageKeys) {\n const registry = registries.get(pageKey)\n if (!registry) {\n continue\n }\n\n for (const key of normalizedKeys) {\n if (registry.get(key) === bridge) {\n registry.delete(key)\n removed = true\n }\n }\n\n if (registry.size === 0) {\n registries.delete(pageKey)\n }\n }\n\n return removed\n }\n\n function resolveBridge(key: string, pageKeys: string[]) {\n return pageKeys\n .map(pageKey => registries.get(pageKey)?.get(key))\n .find(Boolean)\n }\n\n function resolveHost<THost>(\n key: string,\n pageKeys: string[],\n resolver: (bridge: TBridge, key: string) => THost | null | undefined,\n ) {\n const bridge = resolveBridge(key, pageKeys)\n if (!bridge) {\n return null\n }\n return resolver(bridge, key) ?? null\n }\n\n function waitForHost<THost>(\n key: string,\n resolvePageKeys: () => string[],\n resolver: (bridge: TBridge, key: string) => THost | null | undefined,\n options: { interval?: number, retries?: number } = {},\n ): Promise<THost | null> {\n const retries = options.retries ?? 20\n const interval = options.interval ?? 16\n const host = resolveHost(key, resolvePageKeys(), resolver)\n if (host || retries <= 0) {\n return Promise.resolve(host)\n }\n\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(waitForHost(key, resolvePageKeys, resolver, {\n ...options,\n retries: retries - 1,\n }))\n }, interval)\n })\n }\n\n return {\n register,\n resolveBridge,\n resolveHost,\n unregister,\n waitForHost,\n }\n}\n\nconst pageLayoutBridgeRegistry = createLayoutHostRegistry<LayoutBridgeContext>()\n\nfunction resolveCurrentPageInstance() {\n const pages = getCurrentMiniProgramPages()\n return pages[pages.length - 1]\n}\n\nfunction resolvePageKeys(page?: LayoutBridgeContext) {\n return resolvePageIdentityKeys(page as Record<string, any> | undefined)\n}\n\nfunction resolveNativeLayoutContext(context?: LayoutBridgeContext) {\n if (!context || typeof context !== 'object') {\n return undefined\n }\n\n const runtimeNativeInstance = context[WEVU_PUBLIC_RUNTIME_KEY]?.state?.[WEVU_NATIVE_INSTANCE_KEY]\n if (runtimeNativeInstance && typeof runtimeNativeInstance === 'object') {\n return runtimeNativeInstance as LayoutBridgeContext\n }\n\n const stateNativeInstance = context.$state?.[WEVU_NATIVE_INSTANCE_KEY]\n if (stateNativeInstance && typeof stateNativeInstance === 'object') {\n return stateNativeInstance as LayoutBridgeContext\n }\n\n if (context[WEVU_NATIVE_INSTANCE_KEY] && typeof context[WEVU_NATIVE_INSTANCE_KEY] === 'object') {\n return context[WEVU_NATIVE_INSTANCE_KEY] as LayoutBridgeContext\n }\n\n return context\n}\n\nfunction resolvePageFromContext(\n context?: LayoutBridgeContext,\n visited = new Set<LayoutBridgeContext>(),\n): LayoutBridgeContext | undefined {\n if (!context || typeof context !== 'object' || visited.has(context)) {\n return resolveCurrentPageInstance()\n }\n visited.add(context)\n\n if (typeof context.__wevuSetPageLayout === 'function') {\n return context\n }\n\n const nativeContext = resolveNativeLayoutContext(context)\n if (nativeContext && nativeContext !== context) {\n const nativePage = resolvePageFromContext(nativeContext, visited)\n if (nativePage) {\n return nativePage\n }\n }\n\n const publicNativePage = context.$\n if (publicNativePage && typeof publicNativePage === 'object') {\n const nativePage = resolvePageFromContext(publicNativePage as LayoutBridgeContext, visited)\n if (nativePage) {\n return nativePage\n }\n }\n\n const ownerContext = nativeContext ?? context\n const selectOwnerComponent = ownerContext.selectOwnerComponent\n if (typeof selectOwnerComponent === 'function') {\n try {\n const owner = selectOwnerComponent.call(ownerContext) as LayoutBridgeContext | undefined\n if (owner && owner !== ownerContext) {\n const ownerPage = resolvePageFromContext(owner, visited)\n if (ownerPage) {\n return ownerPage\n }\n }\n }\n catch {\n // 部分宿主或生命周期阶段暂不支持 owner 查询,继续使用页面栈兜底。\n }\n }\n\n return resolveCurrentPageInstance()\n}\n\nfunction resolveHostEntry(entry: unknown) {\n if (typeof entry === 'function') {\n return (entry as () => unknown)()\n }\n if (isRef(entry as Ref<unknown>)) {\n return (entry as Ref<unknown>).value\n }\n return entry\n}\n\nfunction findLayoutHostBinding(bindings: readonly LayoutHostBinding[], key: string) {\n return bindings.find(binding => binding.key === key)\n}\n\nfunction safeSelectComponent(target: LayoutBridgeContext | undefined, selector: string) {\n const selectComponent = target?.selectComponent\n if (typeof selectComponent !== 'function') {\n return null\n }\n try {\n return selectComponent.call(target, selector) ?? null\n }\n catch {\n return null\n }\n}\n\nfunction resolveDeclaredLayoutHostFromRefs(\n binding: LayoutHostBinding,\n context: LayoutBridgeContext,\n) {\n if (!binding.refName) {\n return null\n }\n const refMap = getTemplateRefMap(context as any)\n const stateRefs = context[WEVU_PUBLIC_RUNTIME_KEY]?.state?.$refs\n ?? context.__wevu?.state?.$refs\n ?? context.$state?.$refs\n ?? context.$refs\n const refValue = refMap?.get(binding.refName)?.value\n ?? stateRefs?.[binding.refName]\n if (Array.isArray(refValue)) {\n return refValue[0] ?? null\n }\n return refValue ?? null\n}\n\nfunction createDeclaredLayoutHostBridge(bindings: readonly LayoutHostBinding[], context: LayoutBridgeContext) {\n const nativeContext = resolveNativeLayoutContext(context)\n const bridgeBase = nativeContext && typeof nativeContext === 'object'\n ? Object.create(nativeContext)\n : {}\n return Object.assign(bridgeBase, {\n selectComponent(key: string) {\n const binding = findLayoutHostBinding(bindings, key)\n if (!binding) {\n return null\n }\n if (binding.kind === 'component' || !binding.kind) {\n const cachedHost = resolveDeclaredLayoutHostFromRefs(binding, context)\n if (cachedHost) {\n return cachedHost\n }\n return safeSelectComponent(nativeContext, binding.selector)\n ?? safeSelectComponent(resolveCurrentPageInstance(), binding.selector)\n ?? null\n }\n return null\n },\n })\n}\n\n/**\n * 为当前页面注册 layout bridge,使页面或子组件可消费 layout 内部能力。\n */\nexport function registerPageLayoutBridge(\n selectors: string | string[],\n context?: LayoutBridgeContext,\n) {\n const bridgeContext = context ?? getCurrentInstance<LayoutBridgeContext>()\n const page = resolvePageFromContext(bridgeContext)\n const pageKeys = resolvePageKeys(page)\n if (!bridgeContext || !page || pageKeys.length === 0) {\n return false\n }\n\n const normalizedSelectors = pageLayoutBridgeRegistry.register(selectors, bridgeContext, pageKeys)\n if (!normalizedSelectors) {\n return false\n }\n\n bridgeContext[WEVU_LAYOUT_BRIDGE_PAGE_KEYS] = pageKeys\n return true\n}\n\n/**\n * 移除当前页面的 layout bridge 注册。\n */\nexport function unregisterPageLayoutBridge(\n selectors: string | string[],\n context?: LayoutBridgeContext,\n) {\n const bridgeContext = context ?? getCurrentInstance<LayoutBridgeContext>()\n const page = resolvePageFromContext(bridgeContext)\n const pageKeys = bridgeContext?.[WEVU_LAYOUT_BRIDGE_PAGE_KEYS] ?? resolvePageKeys(page)\n if (!bridgeContext || !Array.isArray(pageKeys) || pageKeys.length === 0) {\n return false\n }\n\n const removed = pageLayoutBridgeRegistry.unregister(selectors, bridgeContext, pageKeys)\n delete bridgeContext[WEVU_LAYOUT_BRIDGE_PAGE_KEYS]\n return removed\n}\n\n/**\n * 解析当前页面已注册的 layout bridge,找不到时回退到传入上下文。\n */\nexport function resolveLayoutBridge<T = any>(\n selector: string,\n fallbackContext?: T,\n) {\n const page = resolveCurrentPageInstance() ?? resolvePageFromContext(fallbackContext as LayoutBridgeContext | undefined)\n const bridgeContext = pageLayoutBridgeRegistry.resolveBridge(selector, resolvePageKeys(page))\n return (bridgeContext ?? fallbackContext ?? getCurrentInstance()) as LayoutBridgeInstance<T> | undefined\n}\n\n/**\n * 解析当前页面 layout 内通过指定 key 暴露的宿主实例。\n */\nexport function resolveLayoutHost<T = any, C = any>(\n key: string,\n options: LayoutHostResolveOptions<C> = {},\n) {\n const context = options.context ?? options.fallbackContext\n const page = resolveCurrentPageInstance() ?? resolvePageFromContext(context as LayoutBridgeContext | undefined)\n return pageLayoutBridgeRegistry.resolveHost<T>(\n key,\n resolvePageKeys(page),\n (bridge, key) => bridge.selectComponent?.(key) as T | null,\n )\n}\n\n/**\n * 等待当前页面 layout 宿主实例可用,适合页面初次进入时的异步宿主解析。\n */\nexport function waitForLayoutHost<T = any, C = any>(\n key: string,\n options: LayoutHostResolveOptions<C> = {},\n) {\n const context = options.context ?? options.fallbackContext\n return pageLayoutBridgeRegistry.waitForHost<T>(\n key,\n () => resolvePageKeys(resolveCurrentPageInstance() ?? resolvePageFromContext(context as LayoutBridgeContext | undefined)),\n (bridge, key) => bridge.selectComponent?.(key) as T | null,\n options,\n )\n}\n\n/**\n * 在 layout 生命周期内暴露 bridge,使页面或子组件可访问 layout 内部实例。\n */\nexport function useLayoutBridge(\n selectors: string | string[],\n options: {\n resolveComponent?: LayoutBridgeComponentResolver\n } = {},\n) {\n if (!getCurrentSetupContext()) {\n throw new Error('useLayoutBridge() 必须在 setup() 的同步阶段调用')\n }\n\n const context = getCurrentInstance<LayoutBridgeContext>()\n const normalizedSelectors = normalizeLayoutHostKeys(selectors)\n const resolveComponent = options.resolveComponent\n const nativeContext = resolveNativeLayoutContext(context)\n const bridgeBase = nativeContext && typeof nativeContext === 'object'\n ? Object.create(nativeContext)\n : {}\n const bridge = Object.assign(bridgeBase, {\n selectComponent(selector: string) {\n if (!normalizedSelectors.includes(selector)) {\n return null\n }\n\n const resolvedComponent = resolveComponent?.(selector)\n if (resolvedComponent !== undefined) {\n return resolvedComponent\n }\n\n const nativeContext = resolveNativeLayoutContext(context)\n const directMatch = nativeContext?.selectComponent?.(selector)\n if (directMatch) {\n return directMatch\n }\n\n const currentPage = resolveCurrentPageInstance()\n return currentPage?.selectComponent?.(selector) ?? null\n },\n })\n\n registerPageLayoutBridge(normalizedSelectors, bridge)\n\n onAttached(() => {\n registerPageLayoutBridge(normalizedSelectors, bridge)\n })\n\n onDetached(() => {\n unregisterPageLayoutBridge(normalizedSelectors, bridge)\n })\n}\n\n/**\n * 使用编译期注入的宿主绑定信息,直接从当前 layout 运行时实例解析子组件宿主并注册 bridge。\n */\nexport function registerRuntimeLayoutHosts(\n bindings: readonly LayoutHostBinding[],\n context?: LayoutBridgeContext,\n) {\n if (!bindings.length) {\n return null\n }\n const bridgeContext = context ?? getCurrentInstance<LayoutBridgeContext>()\n if (!bridgeContext) {\n return null\n }\n const bridge = createDeclaredLayoutHostBridge(bindings, bridgeContext)\n registerPageLayoutBridge(bindings.map(binding => binding.key), bridge)\n return bridge\n}\n\n/**\n * 移除运行时自动注册的 layout 宿主 bridge。\n */\nexport function unregisterRuntimeLayoutHosts(\n bindings: readonly LayoutHostBinding[],\n context?: LayoutBridgeContext,\n) {\n if (!bindings.length) {\n return false\n }\n const bridgeContext = context ?? getCurrentInstance<LayoutBridgeContext>()\n if (!bridgeContext) {\n return false\n }\n return unregisterPageLayoutBridge(\n bindings.map(binding => binding.key),\n bridgeContext,\n )\n}\n\n/**\n * 使用 key -> 宿主实例的映射批量暴露 layout 内部宿主,适合 toast/dialog 等共享反馈节点。\n */\nexport function useLayoutHosts(hosts: LayoutHostMap) {\n const selectors = Object.keys(hosts)\n useLayoutBridge(selectors, {\n resolveComponent(key) {\n return resolveHostEntry(hosts[key])\n },\n })\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"layoutBridge.mjs","names":[],"sources":["../../../src/runtime/layoutBridge.ts"],"sourcesContent":["import type { Ref } from '../reactivity'\nimport type { LayoutHostBinding } from './capabilities'\nimport {\n WEVU_LAYOUT_BRIDGE_PAGE_KEYS,\n WEVU_NATIVE_INSTANCE_KEY,\n WEVU_PUBLIC_RUNTIME_KEY,\n} from '@weapp-core/constants'\nimport { isRef } from '../reactivity'\nimport { getCurrentInstance, getCurrentSetupContext, onAttached, onDetached } from './hooks'\nimport { getCurrentMiniProgramPages } from './platform'\nimport { getTemplateRefMap } from './templateRefs/helpers'\n\ntype LayoutBridgeContext = Record<string, any>\ntype LayoutBridgeComponentResolver = (selector: string) => any\ntype LayoutHostMap = Record<string, unknown>\nexport type LayoutBridgeInstance<T = LayoutBridgeContext> = T & {\n selectComponent?: LayoutBridgeComponentResolver\n}\nexport type { LayoutHostBinding } from './capabilities'\ninterface LayoutHostResolveOptions<T = any> {\n context?: T\n fallbackContext?: T\n interval?: number\n retries?: number\n}\n\n/**\n * @description 对 layout host key 去重并过滤空字符串。\n */\nfunction normalizeLayoutHostKeys(keys: string | string[]) {\n return Array.from(new Set(Array.isArray(keys) ? keys : [keys]))\n .filter((key): key is string => typeof key === 'string' && key.length > 0)\n}\n\n/**\n * @description 解析小程序页面实例的稳定身份 key。\n */\nfunction resolvePageIdentityKeys(page?: Record<string, any>): string[] {\n if (!page || typeof page !== 'object') {\n return []\n }\n\n const keys: string[] = []\n const route = typeof page.route === 'string' ? page.route.replace(/^\\/+/, '') : ''\n if (route) {\n keys.push(`route:${route}`)\n }\n for (const [prefix, field] of [\n ['webview', '__wxWebviewId__'],\n ['exparser', '__wxExparserNodeId__'],\n ] as const) {\n const value = page[field]\n if (typeof value === 'number' || typeof value === 'string') {\n keys.push(`${prefix}:${String(value)}`)\n }\n }\n\n return Array.from(new Set(keys))\n}\n\n/**\n * @description 创建小程序 layout host 注册表。\n */\nfunction createLayoutHostRegistry<TBridge>() {\n const registries = new Map<string, Map<string, TBridge>>()\n\n function register(keys: string | string[], bridge: TBridge, pageKeys: string[]) {\n const normalizedKeys = normalizeLayoutHostKeys(keys)\n if (normalizedKeys.length === 0 || pageKeys.length === 0) {\n return null\n }\n\n for (const pageKey of pageKeys) {\n const registry = registries.get(pageKey) ?? new Map<string, TBridge>()\n for (const key of normalizedKeys) {\n registry.set(key, bridge)\n }\n registries.set(pageKey, registry)\n }\n\n return normalizedKeys\n }\n\n function unregister(keys: string | string[], bridge: TBridge, pageKeys: string[]) {\n const normalizedKeys = normalizeLayoutHostKeys(keys)\n if (normalizedKeys.length === 0 || pageKeys.length === 0) {\n return false\n }\n\n let removed = false\n for (const pageKey of pageKeys) {\n const registry = registries.get(pageKey)\n if (!registry) {\n continue\n }\n\n for (const key of normalizedKeys) {\n if (registry.get(key) === bridge) {\n registry.delete(key)\n removed = true\n }\n }\n\n if (registry.size === 0) {\n registries.delete(pageKey)\n }\n }\n\n return removed\n }\n\n function resolveBridge(key: string, pageKeys: string[]) {\n return pageKeys\n .map(pageKey => registries.get(pageKey)?.get(key))\n .find(Boolean)\n }\n\n function resolveHost<THost>(\n key: string,\n pageKeys: string[],\n resolver: (bridge: TBridge, key: string) => THost | null | undefined,\n ) {\n const bridge = resolveBridge(key, pageKeys)\n if (!bridge) {\n return null\n }\n return resolver(bridge, key) ?? null\n }\n\n function waitForHost<THost>(\n key: string,\n resolvePageKeys: () => string[],\n resolver: (bridge: TBridge, key: string) => THost | null | undefined,\n options: { interval?: number, retries?: number } = {},\n ): Promise<THost | null> {\n const retries = options.retries ?? 20\n const interval = options.interval ?? 16\n const host = resolveHost(key, resolvePageKeys(), resolver)\n if (host || retries <= 0) {\n return Promise.resolve(host)\n }\n\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(waitForHost(key, resolvePageKeys, resolver, {\n ...options,\n retries: retries - 1,\n }))\n }, interval)\n })\n }\n\n return {\n register,\n resolveBridge,\n resolveHost,\n unregister,\n waitForHost,\n }\n}\n\nconst pageLayoutBridgeRegistry = createLayoutHostRegistry<LayoutBridgeContext>()\n\nfunction resolveCurrentPageInstance() {\n const pages = getCurrentMiniProgramPages()\n return pages[pages.length - 1]\n}\n\nfunction resolvePageKeys(page?: LayoutBridgeContext) {\n return resolvePageIdentityKeys(page as Record<string, any> | undefined)\n}\n\nfunction resolveNativeLayoutContext(context?: LayoutBridgeContext) {\n if (!context || typeof context !== 'object') {\n return undefined\n }\n\n const runtimeNativeInstance = context[WEVU_PUBLIC_RUNTIME_KEY]?.state?.[WEVU_NATIVE_INSTANCE_KEY]\n if (runtimeNativeInstance && typeof runtimeNativeInstance === 'object') {\n return runtimeNativeInstance as LayoutBridgeContext\n }\n\n const stateNativeInstance = context.$state?.[WEVU_NATIVE_INSTANCE_KEY]\n if (stateNativeInstance && typeof stateNativeInstance === 'object') {\n return stateNativeInstance as LayoutBridgeContext\n }\n\n if (context[WEVU_NATIVE_INSTANCE_KEY] && typeof context[WEVU_NATIVE_INSTANCE_KEY] === 'object') {\n return context[WEVU_NATIVE_INSTANCE_KEY] as LayoutBridgeContext\n }\n\n return context\n}\n\nfunction resolvePageFromContext(\n context?: LayoutBridgeContext,\n visited = new Set<LayoutBridgeContext>(),\n): LayoutBridgeContext | undefined {\n if (!context || typeof context !== 'object' || visited.has(context)) {\n return resolveCurrentPageInstance()\n }\n visited.add(context)\n\n if (typeof context.__wevuSetPageLayout === 'function') {\n return context\n }\n\n const nativeContext = resolveNativeLayoutContext(context)\n if (nativeContext && nativeContext !== context) {\n const nativePage = resolvePageFromContext(nativeContext, visited)\n if (nativePage) {\n return nativePage\n }\n }\n\n const publicNativePage = context.$\n if (publicNativePage && typeof publicNativePage === 'object') {\n const nativePage = resolvePageFromContext(publicNativePage as LayoutBridgeContext, visited)\n if (nativePage) {\n return nativePage\n }\n }\n\n const ownerContext = nativeContext ?? context\n const selectOwnerComponent = ownerContext.selectOwnerComponent\n if (typeof selectOwnerComponent === 'function') {\n try {\n const owner = selectOwnerComponent.call(ownerContext) as LayoutBridgeContext | undefined\n if (owner && owner !== ownerContext) {\n const ownerPage = resolvePageFromContext(owner, visited)\n if (ownerPage) {\n return ownerPage\n }\n }\n }\n catch {\n // 部分宿主或生命周期阶段暂不支持 owner 查询,继续使用页面栈兜底。\n }\n }\n\n return resolveCurrentPageInstance()\n}\n\nfunction resolveHostEntry(entry: unknown) {\n if (typeof entry === 'function') {\n return (entry as () => unknown)()\n }\n if (isRef(entry as Ref<unknown>)) {\n return (entry as Ref<unknown>).value\n }\n return entry\n}\n\nfunction findLayoutHostBinding(bindings: readonly LayoutHostBinding[], key: string) {\n return bindings.find(binding => binding.key === key)\n}\n\nfunction safeSelectComponent(target: LayoutBridgeContext | undefined, selector: string) {\n const selectComponent = target?.selectComponent\n if (typeof selectComponent !== 'function') {\n return null\n }\n try {\n return selectComponent.call(target, selector) ?? null\n }\n catch {\n return null\n }\n}\n\nfunction resolveDeclaredLayoutHostFromRefs(\n binding: LayoutHostBinding,\n context: LayoutBridgeContext,\n) {\n if (!binding.refName) {\n return null\n }\n const refMap = getTemplateRefMap(context as any)\n const stateRefs = context[WEVU_PUBLIC_RUNTIME_KEY]?.state?.$refs\n ?? context.__wevu?.state?.$refs\n ?? context.$state?.$refs\n ?? context.$refs\n const refValue = refMap?.get(binding.refName)?.value\n ?? stateRefs?.[binding.refName]\n if (Array.isArray(refValue)) {\n return refValue[0] ?? null\n }\n return refValue ?? null\n}\n\nfunction createDeclaredLayoutHostBridge(bindings: readonly LayoutHostBinding[], context: LayoutBridgeContext) {\n const nativeContext = resolveNativeLayoutContext(context)\n const bridgeBase = nativeContext && typeof nativeContext === 'object'\n ? Object.create(nativeContext)\n : {}\n return Object.assign(bridgeBase, {\n selectComponent(key: string) {\n const binding = findLayoutHostBinding(bindings, key)\n if (!binding) {\n return null\n }\n if (binding.kind === 'component' || !binding.kind) {\n const cachedHost = resolveDeclaredLayoutHostFromRefs(binding, context)\n if (cachedHost) {\n return cachedHost\n }\n return safeSelectComponent(nativeContext, binding.selector)\n ?? safeSelectComponent(resolveCurrentPageInstance(), binding.selector)\n ?? null\n }\n return null\n },\n })\n}\n\n/**\n * 为当前页面注册 layout bridge,使页面或子组件可消费 layout 内部能力。\n */\nexport function registerPageLayoutBridge(\n selectors: string | string[],\n context?: LayoutBridgeContext,\n) {\n const bridgeContext = context ?? getCurrentInstance<LayoutBridgeContext>()\n const page = resolvePageFromContext(bridgeContext)\n const pageKeys = resolvePageKeys(page)\n if (!bridgeContext || !page || pageKeys.length === 0) {\n return false\n }\n\n const normalizedSelectors = pageLayoutBridgeRegistry.register(selectors, bridgeContext, pageKeys)\n if (!normalizedSelectors) {\n return false\n }\n\n bridgeContext[WEVU_LAYOUT_BRIDGE_PAGE_KEYS] = pageKeys\n return true\n}\n\n/**\n * 移除当前页面的 layout bridge 注册。\n */\nexport function unregisterPageLayoutBridge(\n selectors: string | string[],\n context?: LayoutBridgeContext,\n) {\n const bridgeContext = context ?? getCurrentInstance<LayoutBridgeContext>()\n const page = resolvePageFromContext(bridgeContext)\n const pageKeys = bridgeContext?.[WEVU_LAYOUT_BRIDGE_PAGE_KEYS] ?? resolvePageKeys(page)\n if (!bridgeContext || !Array.isArray(pageKeys) || pageKeys.length === 0) {\n return false\n }\n\n const removed = pageLayoutBridgeRegistry.unregister(selectors, bridgeContext, pageKeys)\n delete bridgeContext[WEVU_LAYOUT_BRIDGE_PAGE_KEYS]\n return removed\n}\n\n/**\n * 解析当前页面已注册的 layout bridge,找不到时回退到传入上下文。\n */\nexport function resolveLayoutBridge<T = any>(\n selector: string,\n fallbackContext?: T,\n) {\n const page = resolveCurrentPageInstance() ?? resolvePageFromContext(fallbackContext as LayoutBridgeContext | undefined)\n const bridgeContext = pageLayoutBridgeRegistry.resolveBridge(selector, resolvePageKeys(page))\n return (bridgeContext ?? fallbackContext ?? getCurrentInstance()) as LayoutBridgeInstance<T> | undefined\n}\n\n/**\n * 解析当前页面 layout 内通过指定 key 暴露的宿主实例。\n */\nexport function resolveLayoutHost<T = any, C = any>(\n key: string,\n options: LayoutHostResolveOptions<C> = {},\n) {\n const context = options.context ?? options.fallbackContext\n const page = resolveCurrentPageInstance() ?? resolvePageFromContext(context as LayoutBridgeContext | undefined)\n return pageLayoutBridgeRegistry.resolveHost<T>(\n key,\n resolvePageKeys(page),\n (bridge, key) => bridge.selectComponent?.(key) as T | null,\n )\n}\n\n/**\n * 等待当前页面 layout 宿主实例可用,适合页面初次进入时的异步宿主解析。\n */\nexport function waitForLayoutHost<T = any, C = any>(\n key: string,\n options: LayoutHostResolveOptions<C> = {},\n) {\n const context = options.context ?? options.fallbackContext\n return pageLayoutBridgeRegistry.waitForHost<T>(\n key,\n () => resolvePageKeys(resolveCurrentPageInstance() ?? resolvePageFromContext(context as LayoutBridgeContext | undefined)),\n (bridge, key) => bridge.selectComponent?.(key) as T | null,\n options,\n )\n}\n\n/**\n * 在 layout 生命周期内暴露 bridge,使页面或子组件可访问 layout 内部实例。\n */\nexport function useLayoutBridge(\n selectors: string | string[],\n options: {\n resolveComponent?: LayoutBridgeComponentResolver\n } = {},\n) {\n if (!getCurrentSetupContext()) {\n throw new Error('useLayoutBridge() 必须在 setup() 的同步阶段调用')\n }\n\n const context = getCurrentInstance<LayoutBridgeContext>()\n const normalizedSelectors = normalizeLayoutHostKeys(selectors)\n const resolveComponent = options.resolveComponent\n const nativeContext = resolveNativeLayoutContext(context)\n const bridgeBase = nativeContext && typeof nativeContext === 'object'\n ? Object.create(nativeContext)\n : {}\n const bridge = Object.assign(bridgeBase, {\n selectComponent(selector: string) {\n if (!normalizedSelectors.includes(selector)) {\n return null\n }\n\n const resolvedComponent = resolveComponent?.(selector)\n if (resolvedComponent !== undefined) {\n return resolvedComponent\n }\n\n const nativeContext = resolveNativeLayoutContext(context)\n const directMatch = nativeContext?.selectComponent?.(selector)\n if (directMatch) {\n return directMatch\n }\n\n const currentPage = resolveCurrentPageInstance()\n return currentPage?.selectComponent?.(selector) ?? null\n },\n })\n\n registerPageLayoutBridge(normalizedSelectors, bridge)\n\n onAttached(() => {\n registerPageLayoutBridge(normalizedSelectors, bridge)\n })\n\n onDetached(() => {\n unregisterPageLayoutBridge(normalizedSelectors, bridge)\n })\n}\n\n/**\n * 使用编译期注入的宿主绑定信息,直接从当前 layout 运行时实例解析子组件宿主并注册 bridge。\n */\nexport function registerRuntimeLayoutHosts(\n bindings: readonly LayoutHostBinding[],\n context?: LayoutBridgeContext,\n) {\n if (!bindings.length) {\n return null\n }\n const bridgeContext = context ?? getCurrentInstance<LayoutBridgeContext>()\n if (!bridgeContext) {\n return null\n }\n const bridge = createDeclaredLayoutHostBridge(bindings, bridgeContext)\n registerPageLayoutBridge(bindings.map(binding => binding.key), bridge)\n return bridge\n}\n\n/**\n * 移除运行时自动注册的 layout 宿主 bridge。\n */\nexport function unregisterRuntimeLayoutHosts(\n bindings: readonly LayoutHostBinding[],\n context?: LayoutBridgeContext,\n) {\n if (!bindings.length) {\n return false\n }\n const bridgeContext = context ?? getCurrentInstance<LayoutBridgeContext>()\n if (!bridgeContext) {\n return false\n }\n return unregisterPageLayoutBridge(\n bindings.map(binding => binding.key),\n bridgeContext,\n )\n}\n\n/**\n * 使用 key -> 宿主实例的映射批量暴露 layout 内部宿主,适合 toast/dialog 等共享反馈节点。\n */\nexport function useLayoutHosts(hosts: LayoutHostMap) {\n const selectors = Object.keys(hosts)\n useLayoutBridge(selectors, {\n resolveComponent(key) {\n return resolveHostEntry(hosts[key])\n },\n })\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nativeBridge.mjs","names":[],"sources":["../../../src/runtime/nativeBridge.ts"],"sourcesContent":["const NATIVE_BRIDGE_MARKER = '__wevu_native_bridge__'\n\nexport function markNativeBridgeMethod(method: (...args: any[]) => any) {\n try {\n Object.defineProperty(method, NATIVE_BRIDGE_MARKER, {\n value: true,\n configurable: false,\n enumerable: false,\n writable: false,\n })\n }\n catch {\n ;(method as any)[NATIVE_BRIDGE_MARKER] = true\n }\n}\n\nexport function isNativeBridgeMethod(method: unknown): method is (...args: any[]) => any {\n return typeof method === 'function' && Boolean((method as any)[NATIVE_BRIDGE_MARKER])\n}\n"],"mappings":";AAAA,MAAM,uBAAuB;AAE7B,SAAgB,uBAAuB,QAAiC;CACtE,IAAI;EACF,OAAO,eAAe,QAAQ,sBAAsB;GAClD,OAAO;GACP,cAAc;GACd,YAAY;GACZ,UAAU;EACZ,CAAC;CACH,
|
|
1
|
+
{"version":3,"file":"nativeBridge.mjs","names":[],"sources":["../../../src/runtime/nativeBridge.ts"],"sourcesContent":["const NATIVE_BRIDGE_MARKER = '__wevu_native_bridge__'\n\nexport function markNativeBridgeMethod(method: (...args: any[]) => any) {\n try {\n Object.defineProperty(method, NATIVE_BRIDGE_MARKER, {\n value: true,\n configurable: false,\n enumerable: false,\n writable: false,\n })\n }\n catch {\n ;(method as any)[NATIVE_BRIDGE_MARKER] = true\n }\n}\n\nexport function isNativeBridgeMethod(method: unknown): method is (...args: any[]) => any {\n return typeof method === 'function' && Boolean((method as any)[NATIVE_BRIDGE_MARKER])\n}\n"],"mappings":";AAAA,MAAM,uBAAuB;AAE7B,SAAgB,uBAAuB,QAAiC;CACtE,IAAI;EACF,OAAO,eAAe,QAAQ,sBAAsB;GAClD,OAAO;GACP,cAAc;GACd,YAAY;GACZ,UAAU;EACZ,CAAC;CACH,QACM;EACH,AAAC,OAAe,wBAAwB;CAC3C;AACF;AAEA,SAAgB,qBAAqB,QAAoD;CACvF,OAAO,OAAO,WAAW,cAAc,QAAS,OAAe,qBAAqB;AACtF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//#region src/runtime/navigationLifecycle.ts
|
|
2
|
+
let initialNavigationLifecycle;
|
|
3
|
+
/**
|
|
4
|
+
* 路由器注册首航任务时接入生命周期,基础组件不直接依赖导航状态机。
|
|
5
|
+
*/
|
|
6
|
+
function registerInitialNavigationLifecycle(lifecycle) {
|
|
7
|
+
initialNavigationLifecycle = lifecycle;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* 没有路由器时保留同步挂载,注册后实时转发到同一份首航状态机。
|
|
11
|
+
*/
|
|
12
|
+
function ensureInitialNavigation(...args) {
|
|
13
|
+
return initialNavigationLifecycle?.ensure(...args);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* 转发页面卸载,确保正在等待的首航守卫不会在卸载后继续挂载。
|
|
17
|
+
*/
|
|
18
|
+
function cancelInitialNavigation(instance) {
|
|
19
|
+
initialNavigationLifecycle?.cancel(instance);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
//#endregion
|
|
23
|
+
export { cancelInitialNavigation, ensureInitialNavigation, registerInitialNavigationLifecycle };
|
|
24
|
+
//# sourceMappingURL=navigationLifecycle.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigationLifecycle.mjs","names":[],"sources":["../../../src/runtime/navigationLifecycle.ts"],"sourcesContent":["import type { LocationQueryRaw } from '../router/types'\nimport type { MiniProgramPageLike } from '../routerInternal/types'\n\nexport interface InitialNavigationLifecycle {\n ensure: (\n instance: MiniProgramPageLike,\n query?: LocationQueryRaw,\n options?: { start?: boolean, onComplete?: (shouldMount: boolean) => void },\n ) => Promise<boolean> | undefined\n cancel: (instance: MiniProgramPageLike) => void\n}\n\nlet initialNavigationLifecycle: InitialNavigationLifecycle | undefined\n\n/**\n * 路由器注册首航任务时接入生命周期,基础组件不直接依赖导航状态机。\n */\nexport function registerInitialNavigationLifecycle(lifecycle: InitialNavigationLifecycle): void {\n initialNavigationLifecycle = lifecycle\n}\n\n/**\n * 没有路由器时保留同步挂载,注册后实时转发到同一份首航状态机。\n */\nexport function ensureInitialNavigation(...args: Parameters<InitialNavigationLifecycle['ensure']>) {\n return initialNavigationLifecycle?.ensure(...args)\n}\n\n/**\n * 转发页面卸载,确保正在等待的首航守卫不会在卸载后继续挂载。\n */\nexport function cancelInitialNavigation(instance: MiniProgramPageLike): void {\n initialNavigationLifecycle?.cancel(instance)\n}\n"],"mappings":";AAYA,IAAI;;;;AAKJ,SAAgB,mCAAmC,WAA6C;CAC9F,6BAA6B;AAC/B;;;;AAKA,SAAgB,wBAAwB,GAAG,MAAwD;CACjG,OAAO,4BAA4B,OAAO,GAAG,IAAI;AACnD;;;;AAKA,SAAgB,wBAAwB,UAAqC;CAC3E,4BAA4B,OAAO,QAAQ;AAC7C"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Ref } from "../reactivity/ref.mjs";
|
|
2
|
+
import { ComputedRef } from "../reactivity/computed.mjs";
|
|
3
|
+
import "../index.mjs";
|
|
4
|
+
//#region src/runtime/pageEnvironment.d.ts
|
|
5
|
+
export interface PageStackSnapshot {
|
|
6
|
+
canGoBack: boolean;
|
|
7
|
+
currentRoute: string;
|
|
8
|
+
stackLength: number;
|
|
9
|
+
}
|
|
10
|
+
export interface UsePageStackOptions {
|
|
11
|
+
autoRefresh?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface NavigationBarMetrics {
|
|
14
|
+
navigationBarHeight: number;
|
|
15
|
+
navigationHeight: number;
|
|
16
|
+
statusBarHeight: number;
|
|
17
|
+
}
|
|
18
|
+
export interface UseNavigationBarMetricsOptions {
|
|
19
|
+
autoRefresh?: boolean;
|
|
20
|
+
defaultNavigationBarHeight?: number;
|
|
21
|
+
defaultStatusBarHeight?: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 获取当前小程序页面栈的稳定快照。
|
|
25
|
+
*/
|
|
26
|
+
export declare function getCurrentPageStackSnapshot(): PageStackSnapshot;
|
|
27
|
+
/**
|
|
28
|
+
* 在 setup 中跟踪当前小程序页面栈状态。
|
|
29
|
+
*/
|
|
30
|
+
export declare function usePageStack(options?: UsePageStackOptions): {
|
|
31
|
+
canGoBack: ComputedRef<boolean>;
|
|
32
|
+
currentRoute: Ref<string, string>;
|
|
33
|
+
refresh: () => void;
|
|
34
|
+
stackLength: Ref<number, number>;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* 计算自定义导航栏所需的状态栏和胶囊占位高度。
|
|
38
|
+
*/
|
|
39
|
+
export declare function getNavigationBarMetrics(options?: Omit<UseNavigationBarMetricsOptions, 'autoRefresh'>): NavigationBarMetrics;
|
|
40
|
+
/**
|
|
41
|
+
* 在 setup 中跟踪自定义导航栏尺寸。
|
|
42
|
+
*/
|
|
43
|
+
export declare function useNavigationBarMetrics(options?: UseNavigationBarMetricsOptions): {
|
|
44
|
+
navigationBarHeight: Ref<number, number>;
|
|
45
|
+
navigationHeight: ComputedRef<number>;
|
|
46
|
+
refresh: () => void;
|
|
47
|
+
statusBarHeight: Ref<number, number>;
|
|
48
|
+
};
|
|
49
|
+
//#endregion
|
|
50
|
+
//# sourceMappingURL=pageEnvironment.d.mts.map
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { ref } from "../reactivity/ref.mjs";
|
|
2
2
|
import { computed } from "../reactivity/computed.mjs";
|
|
3
|
-
import {
|
|
3
|
+
import { getCurrentMiniProgramGlobalObject } from "./platform/current.mjs";
|
|
4
|
+
import { getCurrentMiniProgramPages } from "./platform.mjs";
|
|
4
5
|
import { getCurrentSetupContext } from "./hooks/base.mjs";
|
|
5
6
|
import { onAttached, onShow } from "./hooks/register.mjs";
|
|
6
7
|
|
|
7
8
|
//#region src/runtime/pageEnvironment.ts
|
|
8
9
|
function normalizeRoute(route) {
|
|
9
|
-
|
|
10
|
-
return route ? (_route$split$0$replac = (_route$split$ = route.split("?")[0]) === null || _route$split$ === void 0 ? void 0 : _route$split$.replace(/^\/+/, "")) !== null && _route$split$0$replac !== void 0 ? _route$split$0$replac : "" : "";
|
|
10
|
+
return route ? route.split("?")[0]?.replace(/^\/+/, "") ?? "" : "";
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
13
|
* 获取当前小程序页面栈的稳定快照。
|
|
@@ -18,7 +18,7 @@ function getCurrentPageStackSnapshot() {
|
|
|
18
18
|
const stackLength = pages.length || 1;
|
|
19
19
|
return {
|
|
20
20
|
canGoBack: stackLength > 1,
|
|
21
|
-
currentRoute: normalizeRoute(currentPage
|
|
21
|
+
currentRoute: normalizeRoute(currentPage?.route),
|
|
22
22
|
stackLength
|
|
23
23
|
};
|
|
24
24
|
}
|
|
@@ -26,7 +26,6 @@ function getCurrentPageStackSnapshot() {
|
|
|
26
26
|
* 在 setup 中跟踪当前小程序页面栈状态。
|
|
27
27
|
*/
|
|
28
28
|
function usePageStack(options = {}) {
|
|
29
|
-
var _options$autoRefresh;
|
|
30
29
|
if (!getCurrentSetupContext()) throw new Error("usePageStack() 必须在 setup() 的同步阶段调用");
|
|
31
30
|
const snapshot = getCurrentPageStackSnapshot();
|
|
32
31
|
const currentRoute = ref(snapshot.currentRoute);
|
|
@@ -37,7 +36,7 @@ function usePageStack(options = {}) {
|
|
|
37
36
|
currentRoute.value = nextSnapshot.currentRoute;
|
|
38
37
|
stackLength.value = nextSnapshot.stackLength;
|
|
39
38
|
};
|
|
40
|
-
if (
|
|
39
|
+
if (options.autoRefresh ?? true) {
|
|
41
40
|
onAttached(refresh);
|
|
42
41
|
onShow(refresh);
|
|
43
42
|
}
|
|
@@ -52,18 +51,17 @@ function usePageStack(options = {}) {
|
|
|
52
51
|
* 计算自定义导航栏所需的状态栏和胶囊占位高度。
|
|
53
52
|
*/
|
|
54
53
|
function getNavigationBarMetrics(options = {}) {
|
|
55
|
-
|
|
56
|
-
const
|
|
57
|
-
const
|
|
58
|
-
const
|
|
59
|
-
const
|
|
60
|
-
const statusBarHeight = Number((systemInfo === null || systemInfo === void 0 ? void 0 : systemInfo.statusBarHeight) || defaultStatusBarHeight);
|
|
54
|
+
const defaultStatusBarHeight = options.defaultStatusBarHeight ?? 20;
|
|
55
|
+
const defaultNavigationBarHeight = options.defaultNavigationBarHeight ?? 44;
|
|
56
|
+
const miniProgramGlobal = getCurrentMiniProgramGlobalObject();
|
|
57
|
+
const systemInfo = typeof miniProgramGlobal?.getSystemInfoSync === "function" ? miniProgramGlobal.getSystemInfoSync() : {};
|
|
58
|
+
const statusBarHeight = Number(systemInfo?.statusBarHeight || defaultStatusBarHeight);
|
|
61
59
|
let menuButtonRect;
|
|
62
60
|
try {
|
|
63
|
-
menuButtonRect = typeof
|
|
64
|
-
} catch
|
|
65
|
-
const menuTop = Number(
|
|
66
|
-
const menuHeight = Number(
|
|
61
|
+
menuButtonRect = typeof miniProgramGlobal?.getMenuButtonBoundingClientRect === "function" ? miniProgramGlobal.getMenuButtonBoundingClientRect() : void 0;
|
|
62
|
+
} catch {}
|
|
63
|
+
const menuTop = Number(menuButtonRect?.top || 0);
|
|
64
|
+
const menuHeight = Number(menuButtonRect?.height || 0);
|
|
67
65
|
const navigationBarHeight = menuTop > statusBarHeight && menuHeight > 0 ? (menuTop - statusBarHeight) * 2 + menuHeight : defaultNavigationBarHeight;
|
|
68
66
|
return {
|
|
69
67
|
navigationBarHeight,
|
|
@@ -75,7 +73,6 @@ function getNavigationBarMetrics(options = {}) {
|
|
|
75
73
|
* 在 setup 中跟踪自定义导航栏尺寸。
|
|
76
74
|
*/
|
|
77
75
|
function useNavigationBarMetrics(options = {}) {
|
|
78
|
-
var _options$autoRefresh2;
|
|
79
76
|
if (!getCurrentSetupContext()) throw new Error("useNavigationBarMetrics() 必须在 setup() 的同步阶段调用");
|
|
80
77
|
const initialMetrics = getNavigationBarMetrics(options);
|
|
81
78
|
const statusBarHeight = ref(initialMetrics.statusBarHeight);
|
|
@@ -86,7 +83,7 @@ function useNavigationBarMetrics(options = {}) {
|
|
|
86
83
|
statusBarHeight.value = nextMetrics.statusBarHeight;
|
|
87
84
|
navigationBarHeight.value = nextMetrics.navigationBarHeight;
|
|
88
85
|
};
|
|
89
|
-
if (
|
|
86
|
+
if (options.autoRefresh ?? true) onAttached(refresh);
|
|
90
87
|
return {
|
|
91
88
|
navigationBarHeight,
|
|
92
89
|
navigationHeight,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pageEnvironment.mjs","names":[],"sources":["../../../src/runtime/pageEnvironment.ts"],"sourcesContent":["import { computed, ref } from '../reactivity'\nimport { getCurrentSetupContext, onAttached, onShow } from './hooks'\nimport {
|
|
1
|
+
{"version":3,"file":"pageEnvironment.mjs","names":[],"sources":["../../../src/runtime/pageEnvironment.ts"],"sourcesContent":["import { computed, ref } from '../reactivity'\nimport { getCurrentSetupContext, onAttached, onShow } from './hooks'\nimport { getCurrentMiniProgramGlobalObject, getCurrentMiniProgramPages } from './platform'\n\nexport interface PageStackSnapshot {\n canGoBack: boolean\n currentRoute: string\n stackLength: number\n}\n\nexport interface UsePageStackOptions {\n autoRefresh?: boolean\n}\n\nexport interface NavigationBarMetrics {\n navigationBarHeight: number\n navigationHeight: number\n statusBarHeight: number\n}\n\nexport interface UseNavigationBarMetricsOptions {\n autoRefresh?: boolean\n defaultNavigationBarHeight?: number\n defaultStatusBarHeight?: number\n}\n\ninterface MenuButtonRect {\n height?: number\n top?: number\n}\n\nfunction normalizeRoute(route?: string) {\n return route ? route.split('?')[0]?.replace(/^\\/+/, '') ?? '' : ''\n}\n\n/**\n * 获取当前小程序页面栈的稳定快照。\n */\nexport function getCurrentPageStackSnapshot(): PageStackSnapshot {\n const pages = getCurrentMiniProgramPages()\n const currentPage = pages[pages.length - 1]\n const stackLength = pages.length || 1\n return {\n canGoBack: stackLength > 1,\n currentRoute: normalizeRoute(currentPage?.route),\n stackLength,\n }\n}\n\n/**\n * 在 setup 中跟踪当前小程序页面栈状态。\n */\nexport function usePageStack(options: UsePageStackOptions = {}) {\n if (!getCurrentSetupContext()) {\n throw new Error('usePageStack() 必须在 setup() 的同步阶段调用')\n }\n\n const snapshot = getCurrentPageStackSnapshot()\n const currentRoute = ref(snapshot.currentRoute)\n const stackLength = ref(snapshot.stackLength)\n const canGoBack = computed(() => stackLength.value > 1)\n\n const refresh = () => {\n const nextSnapshot = getCurrentPageStackSnapshot()\n currentRoute.value = nextSnapshot.currentRoute\n stackLength.value = nextSnapshot.stackLength\n }\n\n if (options.autoRefresh ?? true) {\n onAttached(refresh)\n onShow(refresh)\n }\n\n return {\n canGoBack,\n currentRoute,\n refresh,\n stackLength,\n }\n}\n\n/**\n * 计算自定义导航栏所需的状态栏和胶囊占位高度。\n */\nexport function getNavigationBarMetrics(\n options: Omit<UseNavigationBarMetricsOptions, 'autoRefresh'> = {},\n): NavigationBarMetrics {\n const defaultStatusBarHeight = options.defaultStatusBarHeight ?? 20\n const defaultNavigationBarHeight = options.defaultNavigationBarHeight ?? 44\n const miniProgramGlobal = getCurrentMiniProgramGlobalObject()\n const systemInfo = typeof miniProgramGlobal?.getSystemInfoSync === 'function'\n ? miniProgramGlobal.getSystemInfoSync()\n : {}\n const statusBarHeight = Number(systemInfo?.statusBarHeight || defaultStatusBarHeight)\n let menuButtonRect: MenuButtonRect | undefined\n\n try {\n menuButtonRect = typeof miniProgramGlobal?.getMenuButtonBoundingClientRect === 'function'\n ? miniProgramGlobal.getMenuButtonBoundingClientRect()\n : undefined\n }\n catch {}\n\n const menuTop = Number(menuButtonRect?.top || 0)\n const menuHeight = Number(menuButtonRect?.height || 0)\n const navigationBarHeight = menuTop > statusBarHeight && menuHeight > 0\n ? (menuTop - statusBarHeight) * 2 + menuHeight\n : defaultNavigationBarHeight\n\n return {\n navigationBarHeight,\n navigationHeight: statusBarHeight + navigationBarHeight,\n statusBarHeight,\n }\n}\n\n/**\n * 在 setup 中跟踪自定义导航栏尺寸。\n */\nexport function useNavigationBarMetrics(options: UseNavigationBarMetricsOptions = {}) {\n if (!getCurrentSetupContext()) {\n throw new Error('useNavigationBarMetrics() 必须在 setup() 的同步阶段调用')\n }\n\n const initialMetrics = getNavigationBarMetrics(options)\n const statusBarHeight = ref(initialMetrics.statusBarHeight)\n const navigationBarHeight = ref(initialMetrics.navigationBarHeight)\n const navigationHeight = computed(() => statusBarHeight.value + navigationBarHeight.value)\n\n const refresh = () => {\n const nextMetrics = getNavigationBarMetrics(options)\n statusBarHeight.value = nextMetrics.statusBarHeight\n navigationBarHeight.value = nextMetrics.navigationBarHeight\n }\n\n if (options.autoRefresh ?? true) {\n onAttached(refresh)\n }\n\n return {\n navigationBarHeight,\n navigationHeight,\n refresh,\n statusBarHeight,\n }\n}\n"],"mappings":";;;;;;;;AA+BA,SAAS,eAAe,OAAgB;CACtC,OAAO,QAAQ,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,QAAQ,QAAQ,EAAE,KAAK,KAAK;AAClE;;;;AAKA,SAAgB,8BAAiD;CAC/D,MAAM,QAAQ,2BAA2B;CACzC,MAAM,cAAc,MAAM,MAAM,SAAS;CACzC,MAAM,cAAc,MAAM,UAAU;CACpC,OAAO;EACL,WAAW,cAAc;EACzB,cAAc,eAAe,aAAa,KAAK;EAC/C;CACF;AACF;;;;AAKA,SAAgB,aAAa,UAA+B,CAAC,GAAG;CAC9D,IAAI,CAAC,uBAAuB,GAC1B,MAAM,IAAI,MAAM,oCAAoC;CAGtD,MAAM,WAAW,4BAA4B;CAC7C,MAAM,eAAe,IAAI,SAAS,YAAY;CAC9C,MAAM,cAAc,IAAI,SAAS,WAAW;CAC5C,MAAM,YAAY,eAAe,YAAY,QAAQ,CAAC;CAEtD,MAAM,gBAAgB;EACpB,MAAM,eAAe,4BAA4B;EACjD,aAAa,QAAQ,aAAa;EAClC,YAAY,QAAQ,aAAa;CACnC;CAEA,IAAI,QAAQ,eAAe,MAAM;EAC/B,WAAW,OAAO;EAClB,OAAO,OAAO;CAChB;CAEA,OAAO;EACL;EACA;EACA;EACA;CACF;AACF;;;;AAKA,SAAgB,wBACd,UAA+D,CAAC,GAC1C;CACtB,MAAM,yBAAyB,QAAQ,0BAA0B;CACjE,MAAM,6BAA6B,QAAQ,8BAA8B;CACzE,MAAM,oBAAoB,kCAAkC;CAC5D,MAAM,aAAa,OAAO,mBAAmB,sBAAsB,aAC/D,kBAAkB,kBAAkB,IACpC,CAAC;CACL,MAAM,kBAAkB,OAAO,YAAY,mBAAmB,sBAAsB;CACpF,IAAI;CAEJ,IAAI;EACF,iBAAiB,OAAO,mBAAmB,oCAAoC,aAC3E,kBAAkB,gCAAgC,IAClD;CACN,QACM,CAAC;CAEP,MAAM,UAAU,OAAO,gBAAgB,OAAO,CAAC;CAC/C,MAAM,aAAa,OAAO,gBAAgB,UAAU,CAAC;CACrD,MAAM,sBAAsB,UAAU,mBAAmB,aAAa,KACjE,UAAU,mBAAmB,IAAI,aAClC;CAEJ,OAAO;EACL;EACA,kBAAkB,kBAAkB;EACpC;CACF;AACF;;;;AAKA,SAAgB,wBAAwB,UAA0C,CAAC,GAAG;CACpF,IAAI,CAAC,uBAAuB,GAC1B,MAAM,IAAI,MAAM,+CAA+C;CAGjE,MAAM,iBAAiB,wBAAwB,OAAO;CACtD,MAAM,kBAAkB,IAAI,eAAe,eAAe;CAC1D,MAAM,sBAAsB,IAAI,eAAe,mBAAmB;CAClE,MAAM,mBAAmB,eAAe,gBAAgB,QAAQ,oBAAoB,KAAK;CAEzF,MAAM,gBAAgB;EACpB,MAAM,cAAc,wBAAwB,OAAO;EACnD,gBAAgB,QAAQ,YAAY;EACpC,oBAAoB,QAAQ,YAAY;CAC1C;CAEA,IAAI,QAAQ,eAAe,MACzB,WAAW,OAAO;CAGpB,OAAO;EACL;EACA;EACA;EACA;CACF;AACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//#region src/runtime/pageLayout.d.ts
|
|
2
|
+
type PageLayoutProps = object;
|
|
3
|
+
export interface WevuPageLayoutMap {}
|
|
4
|
+
type ResolveTypedPageLayoutName = keyof WevuPageLayoutMap extends never ? string : Extract<keyof WevuPageLayoutMap, string>;
|
|
5
|
+
type ResolveTypedPageLayoutProps<Name extends string> = Name extends keyof WevuPageLayoutMap ? WevuPageLayoutMap[Name] : PageLayoutProps;
|
|
6
|
+
type PageLayoutNamedState = { [Name in ResolveTypedPageLayoutName]: {
|
|
7
|
+
name: Name;
|
|
8
|
+
props: ResolveTypedPageLayoutProps<Name>;
|
|
9
|
+
}; }[ResolveTypedPageLayoutName];
|
|
10
|
+
export type PageLayoutState = PageLayoutNamedState | {
|
|
11
|
+
name: false;
|
|
12
|
+
props: Record<string, any>;
|
|
13
|
+
} | {
|
|
14
|
+
name: undefined;
|
|
15
|
+
props: Record<string, any>;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* 获取当前页面 layout 状态。
|
|
19
|
+
*/
|
|
20
|
+
export declare function usePageLayout(): Readonly<PageLayoutState>;
|
|
21
|
+
export declare function syncRuntimePageLayoutState(target: Record<string, any>, layout: string | false, props: PageLayoutProps): void;
|
|
22
|
+
export declare function syncRuntimePageLayoutStateFromRuntime(target: Record<string, any>): void;
|
|
23
|
+
export declare function resolveRuntimePageLayoutName(layout: string | false): string;
|
|
24
|
+
//#endregion
|
|
25
|
+
//# sourceMappingURL=pageLayout.d.mts.map
|