wevu 6.16.6 → 6.16.8
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/dist/dev/index.mjs +4 -4
- package/dist/dev/{ref-oJCdOWf7.mjs → ref-Dui1TzOR.mjs} +5 -5
- package/dist/dev/{ref-oJCdOWf7.mjs.map → ref-Dui1TzOR.mjs.map} +1 -1
- package/dist/dev/{router-CXNNN43P.mjs → router-DFQw3LKA.mjs} +2 -2
- package/dist/dev/{router-CXNNN43P.mjs.map → router-DFQw3LKA.mjs.map} +1 -1
- package/dist/dev/router.mjs +36 -20
- package/dist/dev/router.mjs.map +1 -1
- package/dist/dev/{src-C2BzhMY6.mjs → src-Bg6AVYQe.mjs} +632 -57
- package/dist/dev/src-Bg6AVYQe.mjs.map +1 -0
- package/dist/dev/{store-BhOds5RF.mjs → store-Brqfb7LU.mjs} +2 -2
- package/dist/dev/{store-BhOds5RF.mjs.map → store-Brqfb7LU.mjs.map} +1 -1
- package/dist/dev/store.mjs +1 -1
- package/dist/dev/vue-demi.mjs +4 -4
- package/dist/index.mjs +1 -1
- package/dist/router.d.mts +4 -1
- package/dist/router.mjs +1 -1
- package/dist/src-C0T_fnDR.mjs +1 -0
- package/dist/vue-demi.mjs +1 -1
- package/package.json +3 -3
- package/dist/dev/src-C2BzhMY6.mjs.map +0 -1
- package/dist/src-BF-e4_0K.mjs +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router-CXNNN43P.mjs","names":[],"sources":["../../src/reactivity/readonly.ts","../../src/runtime/platform.ts","../../src/runtime/hooks/base.ts","../../src/runtime/hooks/register.ts","../../src/runtime/provideStore.ts","../../src/runtime/provideContext.ts","../../src/runtime/register/component/lifecycle/platform.ts","../../src/runtime/provide.ts","../../src/routerInternal/path.ts","../../src/routerInternal/query.ts","../../src/routerInternal/location.ts","../../src/runtime/vueCompat/router.ts"],"sourcesContent":["import type { Ref } from './ref'\nimport { isObject, isReactive } from './reactive'\nimport { getTargetType, ReactiveFlags, TargetType } from './reactive/shared'\nimport { isRef, markAsRef } from './ref'\n\nfunction createReadonlyWrapper(target: any): any {\n if (isRef(target)) {\n const source = target\n const readonlyRef = markAsRef({\n get value() {\n return source.value\n },\n set value(_v: any) {\n throw new Error('无法给只读 ref 赋值')\n },\n })\n Object.defineProperties(readonlyRef, {\n [ReactiveFlags.IS_READONLY]: {\n value: true,\n configurable: true,\n },\n [ReactiveFlags.RAW]: {\n value: source,\n configurable: true,\n },\n })\n return readonlyRef\n }\n if (!isObject(target)) {\n return target\n }\n if (getTargetType(target as object) === TargetType.INVALID) {\n return target\n }\n return new Proxy(target as object, {\n set() {\n throw new Error('无法在只读对象上设置属性')\n },\n deleteProperty() {\n throw new Error('无法在只读对象上删除属性')\n },\n defineProperty() {\n throw new Error('无法在只读对象上定义属性')\n },\n get(target, key, receiver) {\n if (key === ReactiveFlags.IS_READONLY) {\n return true\n }\n if (key === ReactiveFlags.RAW) {\n return target\n }\n const res = Reflect.get(target, key, receiver)\n // 仅处理顶层属性,嵌套对象维持原引用以避免深拷贝和额外代理\n return res\n },\n })\n}\n\n/**\n * readonly 会为对象/数组创建一个“浅层”只读代理,并为 Ref 创建只读包装。\n * 选择浅层而非深层递归,是为了在小程序环境中保持实现和运行时开销最小,\n * 仅阻止直接属性写入/删除,嵌套对象仍按原样透传。\n */\nexport function readonly<T extends object>(target: T): T\nexport function readonly<T>(target: Ref<T>): Readonly<Ref<T>>\nexport function readonly(target: any): any {\n return createReadonlyWrapper(target)\n}\n\n/**\n * 与 Vue 3 的 `shallowReadonly()` 对齐。\n *\n * 当前 wevu 的只读语义本身就是浅层只读,因此这里直接复用同一套实现,\n * 让依赖 Vue 兼容 API 的代码可以无缝迁移。\n */\nexport function shallowReadonly<T extends object>(target: T): Readonly<T>\nexport function shallowReadonly<T>(target: Ref<T>): Readonly<Ref<T>>\nexport function shallowReadonly(target: any): any {\n return createReadonlyWrapper(target)\n}\n\n/**\n * 判断值是否为只读代理或只读 ref 包装。\n */\nexport function isReadonly(value: unknown): boolean {\n return Boolean(value && (value as any)[ReactiveFlags.IS_READONLY])\n}\n\n/**\n * 判断值是否为响应式代理或只读代理。\n */\nexport function isProxy(value: unknown): boolean {\n return isReactive(value) || isReadonly(value)\n}\n","import type { MiniProgramRuntimeCapabilities, MiniProgramRuntimeCapabilityName } from '@weapp-core/shared'\nimport {\n getMiniProgramPlatformByRuntimeGlobalKey,\n getMiniProgramRuntimeCapabilities,\n getMiniProgramRuntimeGlobalKey,\n getMiniProgramRuntimeGlobalKeys,\n getMiniProgramRuntimeHostConfigKey,\n resolveMiniProgramPlatform,\n supportsMiniProgramRuntimeCapability,\n} from '@weapp-core/shared'\n\ntype MiniProgramGlobal = Record<string, any>\ntype MiniProgramHostConfig = Record<string, any>\ntype MiniProgramGlobalRouterMethodName = 'switchTab' | 'reLaunch' | 'redirectTo' | 'navigateTo' | 'navigateBack'\ntype MiniProgramGlobalRouter = Record<MiniProgramGlobalRouterMethodName, (...args: any[]) => any>\ntype ImportMetaWithEnv = ImportMeta & {\n env?: {\n PLATFORM?: string\n }\n}\nconst MINI_PROGRAM_GLOBAL_ROUTER_METHODS: readonly MiniProgramGlobalRouterMethodName[] = [\n 'switchTab',\n 'reLaunch',\n 'redirectTo',\n 'navigateTo',\n 'navigateBack',\n]\n\nfunction getGlobalRuntime() {\n if (typeof globalThis === 'undefined') {\n return undefined\n }\n return globalThis as MiniProgramGlobal\n}\n\nexport function resolveCurrentMiniProgramPlatform() {\n const globalRuntime = getGlobalRuntime()\n const compiledPlatform = (import.meta as ImportMetaWithEnv).env?.PLATFORM\n\n // 优先命中编译期平台分支,便于构建阶段做 dead-code elimination。\n const resolvedCompiledPlatform = resolveMiniProgramPlatform(compiledPlatform)\n if (resolvedCompiledPlatform) {\n return resolvedCompiledPlatform\n }\n\n for (const globalKey of getMiniProgramRuntimeGlobalKeys()) {\n if (globalRuntime?.[globalKey]) {\n return getMiniProgramPlatformByRuntimeGlobalKey(globalKey)\n }\n }\n\n return undefined\n}\n\nexport function getCurrentMiniProgramRuntimeCapabilities(): MiniProgramRuntimeCapabilities {\n return getMiniProgramRuntimeCapabilities(resolveCurrentMiniProgramPlatform())\n}\n\nexport function supportsCurrentMiniProgramRuntimeCapability(capabilityName: MiniProgramRuntimeCapabilityName): boolean {\n return supportsMiniProgramRuntimeCapability(resolveCurrentMiniProgramPlatform(), capabilityName)\n}\n\nexport function getCurrentMiniProgramPages(): Array<Record<string, any>> {\n if (!supportsCurrentMiniProgramRuntimeCapability('globalPageStack')) {\n return []\n }\n const getCurrentPagesFn = (globalThis as Record<string, unknown>).getCurrentPages\n if (typeof getCurrentPagesFn !== 'function') {\n return []\n }\n try {\n const pages = getCurrentPagesFn()\n return Array.isArray(pages) ? pages as Array<Record<string, any>> : []\n }\n catch {\n return []\n }\n}\n\nexport function getCurrentMiniProgramHostConfig(): MiniProgramHostConfig | undefined {\n const globalRuntime = getGlobalRuntime()\n const hostConfigKey = getMiniProgramRuntimeHostConfigKey(resolveCurrentMiniProgramPlatform())\n const hostConfig = globalRuntime?.[hostConfigKey]\n return hostConfig && typeof hostConfig === 'object' ? hostConfig as MiniProgramHostConfig : undefined\n}\n\nexport function getMiniProgramGlobalObject(platformInput?: string): MiniProgramGlobal | undefined {\n const globalRuntime = getGlobalRuntime()\n const compiledPlatform = platformInput ?? (import.meta as ImportMetaWithEnv).env?.PLATFORM\n const resolvedCompiledPlatform = resolveMiniProgramPlatform(compiledPlatform)\n\n if (resolvedCompiledPlatform) {\n const globalKey = getMiniProgramRuntimeGlobalKey(resolvedCompiledPlatform)\n return globalRuntime?.[globalKey] as MiniProgramGlobal | undefined\n }\n\n for (const globalKey of getMiniProgramRuntimeGlobalKeys()) {\n const candidate = globalRuntime?.[globalKey]\n if (candidate) {\n return candidate as MiniProgramGlobal\n }\n }\n return undefined\n}\n\nexport function getCurrentMiniProgramGlobalRouter(): MiniProgramGlobalRouter | undefined {\n if (!supportsCurrentMiniProgramRuntimeCapability('globalRouterApi')) {\n return undefined\n }\n const miniProgramGlobal = getMiniProgramGlobalObject()\n if (!miniProgramGlobal) {\n return undefined\n }\n const routerMethods = Object.create(null) as Partial<MiniProgramGlobalRouter>\n for (const methodName of MINI_PROGRAM_GLOBAL_ROUTER_METHODS) {\n const handler = miniProgramGlobal[methodName]\n if (typeof handler !== 'function') {\n return undefined\n }\n routerMethods[methodName] = (...args: any[]) => handler.apply(miniProgramGlobal, args)\n }\n return routerMethods as MiniProgramGlobalRouter\n}\n\nexport function getScopedSlotHostGlobalObject(): MiniProgramGlobal | undefined {\n return getMiniProgramGlobalObject() ?? getGlobalRuntime()\n}\n","import type { InternalRuntimeState } from '../types'\nimport { WEVU_HOOKS_KEY } from '@weapp-core/constants'\nimport { getCurrentMiniProgramRuntimeCapabilities, getMiniProgramGlobalObject, supportsCurrentMiniProgramRuntimeCapability } from '../platform'\n\n// 仅供同步 setup() 调用期间使用的当前实例引用\nlet __currentInstance: InternalRuntimeState | undefined\nlet __currentSetupContext: any | undefined\n\nexport function getCurrentInstance<T extends InternalRuntimeState = InternalRuntimeState>(): T | undefined {\n return __currentInstance as T | undefined\n}\n\n/**\n * 设置当前运行时实例(框架内部使用)。\n * @internal\n */\nexport function setCurrentInstance(inst: InternalRuntimeState | undefined) {\n __currentInstance = inst\n}\n\nexport function getCurrentSetupContext<T = any>(): T | undefined {\n return __currentSetupContext as T | undefined\n}\n\n/**\n * 设置当前 setup 上下文(框架内部使用)。\n * @internal\n */\nexport function setCurrentSetupContext(ctx: any | undefined) {\n __currentSetupContext = ctx\n}\n\nexport function assertInSetup(name: string): InternalRuntimeState {\n if (!__currentInstance) {\n throw new Error(`${name}() 必须在 setup() 的同步阶段调用`)\n }\n return __currentInstance\n}\n\nfunction ensureHookBucket(target: InternalRuntimeState): Record<string, any> {\n if (!target[WEVU_HOOKS_KEY]) {\n target[WEVU_HOOKS_KEY] = Object.create(null)\n }\n return target[WEVU_HOOKS_KEY] as Record<string, any>\n}\n\ntype ShareMenuName = 'shareAppMessage' | 'shareTimeline'\n\nfunction buildShareMenus(\n enableOnShareAppMessage: boolean,\n enableOnShareTimeline: boolean,\n): ShareMenuName[] {\n const runtimeCapabilities = getCurrentMiniProgramRuntimeCapabilities()\n const shouldShowShareAppMessage = runtimeCapabilities.shareTimelineRequiresShareAppMessage\n ? (enableOnShareAppMessage || enableOnShareTimeline)\n : enableOnShareAppMessage\n\n const menus: ShareMenuName[] = []\n if (shouldShowShareAppMessage) {\n menus.push('shareAppMessage')\n }\n if (enableOnShareTimeline) {\n menus.push('shareTimeline')\n }\n return menus\n}\n\nfunction tryShowShareMenu(showShareMenu: (...args: any[]) => unknown, menus: ShareMenuName[]) {\n const payloads = [\n { withShareTicket: true, menus },\n { menus },\n menus.includes('shareTimeline') ? { withShareTicket: true } : undefined,\n menus.includes('shareTimeline') ? {} : undefined,\n undefined,\n ]\n\n for (const payload of payloads) {\n try {\n if (payload === undefined) {\n showShareMenu()\n }\n else {\n showShareMenu(payload as any)\n }\n return\n }\n catch {\n // 继续尝试更保守的 payload,兼容不同宿主的 showShareMenu 参数形态。\n }\n }\n}\n\nexport function pushHook(\n target: InternalRuntimeState,\n name: string,\n handler: (...args: any[]) => any,\n { single = false } = {},\n) {\n const bucket = ensureHookBucket(target)\n if (single) {\n bucket[name] = handler\n }\n else {\n const list: Array<(...args: any[]) => any> = bucket[name] ?? (bucket[name] = [])\n list.push(handler)\n }\n}\n\nexport function ensureSinglePageHookOnInstance(target: InternalRuntimeState, name: 'onShareAppMessage' | 'onShareTimeline' | 'onAddToFavorites') {\n const bridges = ((target as any).__wevuShareHookBridges ??= Object.create(null)) as Record<string, (...args: any[]) => any>\n if (typeof bridges[name] === 'function') {\n return\n }\n\n const original = (target as any)[name]\n const bridge = function onWevuShareHookBridge(this: InternalRuntimeState, ...args: any[]) {\n const hooks = this[WEVU_HOOKS_KEY] as Record<string, any> | undefined\n const entry = hooks?.[name]\n const runtime = this.__wevu\n const ctx = runtime?.proxy ?? this\n let ret: any\n\n if (typeof entry === 'function') {\n try {\n ret = entry.apply(ctx, args)\n }\n catch {\n ret = undefined\n }\n }\n else if (Array.isArray(entry)) {\n for (const fn of entry) {\n try {\n ret = fn.apply(ctx, args)\n }\n catch {\n // 忽略单个 hook 抛出的异常,继续执行后续 hook\n }\n }\n }\n\n if (ret !== undefined) {\n return ret\n }\n if (typeof original === 'function') {\n return original.apply(this, args)\n }\n return undefined\n }\n\n bridges[name] = bridge\n ;(target as any)[name] = bridge\n}\n\nexport function ensurePageShareMenusOnSetup(target: InternalRuntimeState) {\n if (!supportsCurrentMiniProgramRuntimeCapability('pageShareMenu')) {\n return\n }\n const miniProgramGlobal = getMiniProgramGlobalObject()\n if (!miniProgramGlobal || typeof miniProgramGlobal.showShareMenu !== 'function') {\n return\n }\n\n const hooks = (target[WEVU_HOOKS_KEY] ?? {}) as Record<string, any>\n const hasShareAppMessage = typeof hooks.onShareAppMessage === 'function'\n const hasShareTimeline = typeof hooks.onShareTimeline === 'function'\n\n if (!hasShareAppMessage && !hasShareTimeline) {\n return\n }\n\n const menus = buildShareMenus(hasShareAppMessage, hasShareTimeline)\n if (!menus.length) {\n return\n }\n\n tryShowShareMenu(miniProgramGlobal.showShareMenu.bind(miniProgramGlobal), menus)\n}\n\n/**\n * 调用批量 hook(框架内部调度入口)。\n * @internal\n */\nexport function callHookList(target: InternalRuntimeState, name: string, args: any[] = []) {\n const hooks = target[WEVU_HOOKS_KEY]\n if (!hooks) {\n return\n }\n const list = hooks[name]\n if (!list) {\n return\n }\n const runtime = target.__wevu\n const ctx = runtime?.proxy ?? target\n if (Array.isArray(list)) {\n for (const fn of list) {\n try {\n fn.apply(ctx, args)\n }\n catch {\n // 忽略单个 hook 抛出的异常,防止阻塞其他监听\n }\n }\n }\n else if (typeof list === 'function') {\n try {\n list.apply(ctx, args)\n }\n catch {\n // 忽略单个 hook 抛出的异常,防止阻塞其他监听\n }\n }\n}\n\nexport function ensurePageHookOnInstance(target: InternalRuntimeState, name: 'onPageScroll') {\n const bridges = ((target as any).__wevuPageHookBridges ??= Object.create(null)) as Record<string, (...args: any[]) => any>\n if (typeof bridges[name] === 'function') {\n return\n }\n\n const original = (target as any)[name]\n const bridge = function onWevuPageHookBridge(this: InternalRuntimeState, ...args: any[]) {\n callHookList(this, name, args)\n if (typeof original === 'function') {\n return original.apply(this, args)\n }\n return undefined\n }\n\n bridges[name] = bridge\n ;(target as any)[name] = bridge\n}\n\n/**\n * 调用返回值型 hook(框架内部调度入口)。\n * @internal\n */\nexport function callHookReturn(target: InternalRuntimeState, name: string, args: any[] = []) {\n const hooks = target[WEVU_HOOKS_KEY]\n if (!hooks) {\n return undefined\n }\n const entry = hooks[name]\n if (!entry) {\n return undefined\n }\n const runtime = target.__wevu\n const ctx = runtime?.proxy ?? target\n if (typeof entry === 'function') {\n try {\n return entry.apply(ctx, args)\n }\n catch {\n return undefined\n }\n }\n if (Array.isArray(entry)) {\n let out: any\n for (const fn of entry) {\n try {\n out = fn.apply(ctx, args)\n }\n catch {\n // 忽略单个 hook 抛出的异常,继续执行后续 hook\n }\n }\n return out\n }\n return undefined\n}\n","import type {\n MiniProgramAddToFavoritesOption,\n MiniProgramLaunchOptions,\n MiniProgramMemoryWarningResult,\n MiniProgramPageLifetime,\n MiniProgramPageNotFoundOptions,\n MiniProgramPageResizeOption,\n MiniProgramPageScrollOption,\n MiniProgramSaveExitState,\n MiniProgramShareAppMessageOption,\n MiniProgramTabItemTapOption,\n MiniProgramThemeChangeResult,\n MiniProgramUnhandledRejectionResult,\n} from '../types'\nimport { assertInSetup, ensurePageHookOnInstance, ensurePageShareMenusOnSetup, ensureSinglePageHookOnInstance, pushHook } from './base'\n\nfunction registerHook(name: string, handler: (...args: any[]) => any, options?: { single?: boolean }) {\n pushHook(assertInSetup(name), name, handler as any, options as any)\n}\n\n// 生命周期注册辅助方法:必须在 setup() 同步执行阶段调用\nexport function onLaunch(handler: (options: MiniProgramLaunchOptions) => void) {\n registerHook('onLaunch', handler as any)\n}\n\nexport function onPageNotFound(handler: (options: MiniProgramPageNotFoundOptions) => void) {\n registerHook('onPageNotFound', handler as any)\n}\n\nexport function onUnhandledRejection(handler: (options: MiniProgramUnhandledRejectionResult) => void) {\n registerHook('onUnhandledRejection', handler as any)\n}\n\nexport function onThemeChange(handler: (options: MiniProgramThemeChangeResult) => void) {\n registerHook('onThemeChange', handler as any)\n}\n\nexport function onMemoryWarning(handler: (options: MiniProgramMemoryWarningResult) => void) {\n registerHook('onMemoryWarning', handler as any)\n}\n\nexport function onShow(handler: () => void): void\nexport function onShow(handler: (options: MiniProgramLaunchOptions) => void): void\nexport function onShow(handler: ((options?: any) => void)) {\n registerHook('onShow', handler as any)\n}\n\nexport function onLoad(handler: MiniProgramPageLifetime['onLoad']) {\n registerHook('onLoad', handler as any)\n}\n\nexport function onHide(handler: () => void) {\n registerHook('onHide', handler as any)\n}\n\nexport function onUnload(handler: () => void) {\n registerHook('onUnload', handler as any)\n}\n\nexport function onReady(handler: () => void) {\n registerHook('onReady', handler as any)\n}\n\nexport function onPullDownRefresh(handler: MiniProgramPageLifetime['onPullDownRefresh']) {\n registerHook('onPullDownRefresh', handler as any)\n}\n\nexport function onReachBottom(handler: MiniProgramPageLifetime['onReachBottom']) {\n registerHook('onReachBottom', handler as any)\n}\n\nexport function onPageScroll(handler: (opt: MiniProgramPageScrollOption) => void) {\n const instance = assertInSetup('onPageScroll')\n pushHook(instance, 'onPageScroll', handler as any)\n ensurePageHookOnInstance(instance, 'onPageScroll')\n}\n\nexport function onRouteDone(handler: MiniProgramPageLifetime['onRouteDone'] | ((opt?: unknown) => void)) {\n registerHook('onRouteDone', handler as any)\n}\n\nexport function onTabItemTap(handler: (opt: MiniProgramTabItemTapOption) => void) {\n registerHook('onTabItemTap', handler as any)\n}\n\nexport function onResize(handler: (opt: MiniProgramPageResizeOption) => void) {\n registerHook('onResize', handler as any)\n}\n\nexport function onMoved(handler: () => void) {\n registerHook('onMoved', handler as any)\n}\n\nexport function onAttached(handler: () => void) {\n registerHook('onAttached', handler as any)\n}\n\nexport function onDetached(handler: () => void) {\n registerHook('onDetached', handler as any)\n}\n\nexport function onError(handler: (err: any) => void) {\n registerHook('onError', handler as any)\n}\n\nexport function onSaveExitState(handler: () => MiniProgramSaveExitState) {\n registerHook('onSaveExitState', handler as any, { single: true })\n}\n\nexport function onShareAppMessage(handler: (options: MiniProgramShareAppMessageOption) => Record<string, any> | void) {\n const instance = assertInSetup('onShareAppMessage')\n pushHook(instance, 'onShareAppMessage', handler as any, { single: true } as any)\n ensureSinglePageHookOnInstance(instance, 'onShareAppMessage')\n ensurePageShareMenusOnSetup(instance)\n}\n\nexport function onShareTimeline(handler: MiniProgramPageLifetime['onShareTimeline']) {\n const instance = assertInSetup('onShareTimeline')\n pushHook(instance, 'onShareTimeline', handler as any, { single: true } as any)\n ensureSinglePageHookOnInstance(instance, 'onShareTimeline')\n ensurePageShareMenusOnSetup(instance)\n}\n\nexport function onAddToFavorites(handler: (options: MiniProgramAddToFavoritesOption) => Record<string, any> | void) {\n const instance = assertInSetup('onAddToFavorites')\n pushHook(instance, 'onAddToFavorites', handler as any, { single: true } as any)\n ensureSinglePageHookOnInstance(instance, 'onAddToFavorites')\n}\n","const wevuGlobalProvideStore = new Map<any, any>()\n\n/**\n * 写入全局 provide 存储,供运行时内部与兼容层复用。\n */\nexport function setGlobalProvidedValue<T>(key: any, value: T): void {\n wevuGlobalProvideStore.set(key, value)\n}\n\nexport function hasGlobalProvidedValue(key: any): boolean {\n return wevuGlobalProvideStore.has(key)\n}\n\nexport function getGlobalProvidedValue<T>(key: any): T {\n return wevuGlobalProvideStore.get(key) as T\n}\n","import type { InternalRuntimeState, RuntimeApp } from './types'\nimport {\n WEVU_APP_PROVIDES_KEY,\n WEVU_IS_APP_INSTANCE_KEY,\n WEVU_PARENT_INSTANCE_KEY,\n WEVU_PROVIDES_KEY,\n WEVU_RUNTIME_APP_KEY,\n} from '@weapp-core/constants'\nimport { setGlobalProvidedValue } from './provideStore'\n\nexport function isRuntimeAppInstance(instance: unknown): boolean {\n return Boolean(\n instance\n && typeof instance === 'object'\n && (instance as { [WEVU_IS_APP_INSTANCE_KEY]?: boolean })[WEVU_IS_APP_INSTANCE_KEY] === true,\n )\n}\n\nfunction createProvides(parent?: Record<PropertyKey, any>) {\n return Object.create(parent ?? null) as Record<PropertyKey, any>\n}\n\nfunction getRuntimeAppProvides(runtimeApp: RuntimeApp<any, any, any> | undefined): Record<PropertyKey, any> {\n if (!runtimeApp) {\n return createProvides()\n }\n const existing = runtimeApp[WEVU_APP_PROVIDES_KEY]\n if (existing && typeof existing === 'object') {\n return existing\n }\n const provides = createProvides()\n try {\n Object.defineProperty(runtimeApp, WEVU_APP_PROVIDES_KEY, {\n value: provides,\n configurable: true,\n enumerable: false,\n writable: false,\n })\n }\n catch {\n ;(runtimeApp as any)[WEVU_APP_PROVIDES_KEY] = provides\n }\n return provides\n}\n\nexport function attachInstanceProvides(\n instance: InternalRuntimeState,\n provides: Record<PropertyKey, any>,\n): void {\n try {\n Object.defineProperty(instance, WEVU_PROVIDES_KEY, {\n value: provides,\n configurable: true,\n enumerable: false,\n writable: true,\n })\n }\n catch {\n ;(instance as any)[WEVU_PROVIDES_KEY] = provides\n }\n}\n\nexport function getInstanceProvides(instance: InternalRuntimeState): Record<PropertyKey, any> {\n const existing = instance[WEVU_PROVIDES_KEY]\n if (existing && typeof existing === 'object') {\n return existing\n }\n\n const runtimeApp = instance[WEVU_RUNTIME_APP_KEY]\n const parentProvides = instance[WEVU_PARENT_INSTANCE_KEY]?.[WEVU_PROVIDES_KEY]\n ?? getRuntimeAppProvides(runtimeApp)\n const provides = isRuntimeAppInstance(instance)\n ? getRuntimeAppProvides(runtimeApp)\n : createProvides(parentProvides)\n attachInstanceProvides(instance, provides)\n return provides\n}\n\nexport function ensureRuntimeAppProvides(runtimeApp: RuntimeApp<any, any, any>): Record<PropertyKey, any> {\n return getRuntimeAppProvides(runtimeApp)\n}\n\nexport function setRuntimeAppProvidedValue<T>(runtimeApp: RuntimeApp<any, any, any>, key: any, value: T): void {\n getRuntimeAppProvides(runtimeApp)[key as PropertyKey] = value\n setGlobalProvidedValue(key, value)\n}\n\nexport function attachRuntimeProvideContext(\n instance: InternalRuntimeState,\n runtimeApp: RuntimeApp<any, any, any>,\n parentInstance?: InternalRuntimeState,\n): void {\n const appProvides = getRuntimeAppProvides(runtimeApp)\n const parentProvides = parentInstance?.[WEVU_PROVIDES_KEY] ?? appProvides\n const provides = isRuntimeAppInstance(instance)\n ? appProvides\n : createProvides(parentProvides)\n\n if (parentInstance) {\n try {\n Object.defineProperty(instance, WEVU_PARENT_INSTANCE_KEY, {\n value: parentInstance,\n configurable: true,\n enumerable: false,\n writable: true,\n })\n }\n catch {\n ;(instance as any)[WEVU_PARENT_INSTANCE_KEY] = parentInstance\n }\n }\n\n attachInstanceProvides(instance, provides)\n}\n\nfunction isPrototypeInChain(target: Record<PropertyKey, any>, candidate: Record<PropertyKey, any>) {\n let current = Object.getPrototypeOf(target)\n while (current) {\n if (current === candidate) {\n return true\n }\n current = Object.getPrototypeOf(current)\n }\n return false\n}\n\nexport function attachRuntimeLayoutProvideContext(\n layoutInstance: InternalRuntimeState,\n pageInstance: InternalRuntimeState,\n): void {\n const layoutProvides = getInstanceProvides(layoutInstance)\n const pageProvides = getInstanceProvides(pageInstance)\n if (\n layoutProvides === pageProvides\n || isPrototypeInChain(layoutProvides, pageProvides)\n || isPrototypeInChain(pageProvides, layoutProvides)\n ) {\n return\n }\n\n Object.setPrototypeOf(pageProvides, layoutProvides)\n\n try {\n Object.defineProperty(pageInstance, WEVU_PARENT_INSTANCE_KEY, {\n value: layoutInstance,\n configurable: true,\n enumerable: false,\n writable: true,\n })\n }\n catch {\n ;(pageInstance as any)[WEVU_PARENT_INSTANCE_KEY] = layoutInstance\n }\n}\n","import type { InternalRuntimeState } from '../../../types'\nimport { WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY } from '@weapp-core/constants'\nimport { callHookList } from '../../../hooks'\nimport {\n getCurrentMiniProgramPages,\n getCurrentMiniProgramRuntimeCapabilities,\n getMiniProgramGlobalObject,\n supportsCurrentMiniProgramRuntimeCapability,\n} from '../../../platform'\n\nlet miniProgramGlobalPatched = false\nlet currentPageInstance: InternalRuntimeState | undefined\ntype ShareMenuName = 'shareAppMessage' | 'shareTimeline'\nexport function getCurrentPageInstance() {\n return currentPageInstance\n}\n\nexport function bindCurrentPageInstance(target: InternalRuntimeState) {\n currentPageInstance = target\n}\n\nexport function releaseCurrentPageInstance(target: InternalRuntimeState) {\n if (currentPageInstance === target) {\n currentPageInstance = undefined\n }\n}\n\nexport function runInPageScrollHook<T>(\n target: InternalRuntimeState,\n task: () => T,\n): T {\n const currentDepth = Number((target as any)[WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY] ?? 0)\n ;(target as any)[WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY] = currentDepth + 1\n try {\n return task()\n }\n finally {\n const nextDepth = Number((target as any)[WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY] ?? 1) - 1\n if (nextDepth <= 0) {\n delete (target as any)[WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY]\n }\n else {\n ;(target as any)[WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY] = nextDepth\n }\n }\n}\n\nexport function resolvePageOptions(target: InternalRuntimeState) {\n const direct = (target as any).options\n if (direct && typeof direct === 'object') {\n return direct\n }\n const pages = getCurrentMiniProgramPages()\n const page = pages[pages.length - 1]\n const options = page && typeof page === 'object' ? (page as any).options : undefined\n if (options && typeof options === 'object') {\n return options\n }\n return {}\n}\n\nexport function ensureMiniProgramGlobalPatched() {\n if (miniProgramGlobalPatched) {\n return\n }\n miniProgramGlobalPatched = true\n const miniProgramGlobal = getMiniProgramGlobalObject()\n if (!miniProgramGlobal || typeof miniProgramGlobal !== 'object') {\n return\n }\n if (supportsCurrentMiniProgramRuntimeCapability('pullDownRefreshApi')) {\n const rawStartPullDownRefresh = miniProgramGlobal.startPullDownRefresh as ((...args: any[]) => any) | undefined\n if (typeof rawStartPullDownRefresh === 'function') {\n miniProgramGlobal.startPullDownRefresh = function startPullDownRefreshPatched(...args: any[]) {\n const result = rawStartPullDownRefresh.apply(this, args)\n if (currentPageInstance) {\n callHookList(currentPageInstance, 'onPullDownRefresh', [])\n }\n return result\n }\n }\n }\n if (supportsCurrentMiniProgramRuntimeCapability('pageScrollApi')) {\n const rawPageScrollTo = miniProgramGlobal.pageScrollTo as ((...args: any[]) => any) | undefined\n if (typeof rawPageScrollTo === 'function') {\n miniProgramGlobal.pageScrollTo = function pageScrollToPatched(options: any, ...rest: any[]) {\n const result = rawPageScrollTo.apply(this, [options, ...rest])\n if (currentPageInstance) {\n const pageInstance = currentPageInstance\n runInPageScrollHook(pageInstance, () => {\n callHookList(pageInstance, 'onPageScroll', [options ?? {}])\n })\n }\n return result\n }\n }\n }\n}\n\nexport function ensurePageShareMenus(options: {\n enableOnShareAppMessage: boolean\n enableOnShareTimeline: boolean\n}) {\n const { enableOnShareAppMessage, enableOnShareTimeline } = options\n if (!enableOnShareAppMessage && !enableOnShareTimeline) {\n return\n }\n\n if (!supportsCurrentMiniProgramRuntimeCapability('pageShareMenu')) {\n return\n }\n\n const miniProgramGlobal = getMiniProgramGlobalObject()\n if (!miniProgramGlobal || typeof miniProgramGlobal.showShareMenu !== 'function') {\n return\n }\n\n const runtimeCapabilities = getCurrentMiniProgramRuntimeCapabilities()\n const shouldShowShareAppMessage = runtimeCapabilities.shareTimelineRequiresShareAppMessage\n ? (enableOnShareAppMessage || enableOnShareTimeline)\n : enableOnShareAppMessage\n\n if (!shouldShowShareAppMessage && !enableOnShareTimeline) {\n return\n }\n\n const menus: ShareMenuName[] = []\n if (shouldShowShareAppMessage) {\n menus.push('shareAppMessage')\n }\n if (enableOnShareTimeline) {\n menus.push('shareTimeline')\n }\n\n const payloads = [\n { withShareTicket: true, menus },\n { menus },\n enableOnShareTimeline ? { withShareTicket: true } : undefined,\n enableOnShareTimeline ? {} : undefined,\n undefined,\n ]\n\n for (const payload of payloads) {\n try {\n if (payload === undefined) {\n miniProgramGlobal.showShareMenu()\n }\n else {\n miniProgramGlobal.showShareMenu(payload as any)\n }\n break\n }\n catch {\n // 继续尝试更保守的 payload,兼容不同宿主的 showShareMenu 参数形态。\n }\n }\n}\n","import { getCurrentInstance } from './hooks'\nimport {\n getInstanceProvides,\n isRuntimeAppInstance,\n} from './provideContext'\nimport {\n getGlobalProvidedValue,\n hasGlobalProvidedValue,\n setGlobalProvidedValue,\n} from './provideStore'\n\n// ============================================================================\n// 分层的 provide/inject 机制\n// 用于在组件树内维护依赖注入关系,支持组件与全局两种作用域\n// ============================================================================\n\nexport { setGlobalProvidedValue } from './provideStore'\n\n/**\n * 判断当前是否存在可用的注入上下文。\n *\n * wevu 的依赖注入上下文来自同步 `setup()` 阶段的当前实例。\n */\nexport function hasInjectionContext(): boolean {\n return Boolean(getCurrentInstance())\n}\n\n/**\n * 在组件上下文中向后代注入值(与 Vue 3 行为兼容),若没有当前实例则回落到全局存储。\n *\n * @param key 注入键,可为字符串、Symbol 或对象\n * @param value 提供的值\n *\n * @example\n * ```ts\n * defineComponent({\n * setup() {\n * provide(TOKEN_KEY, { data: 'value' })\n * }\n * })\n * ```\n */\nexport function provide<T>(key: any, value: T): void {\n const instance = getCurrentInstance()\n\n if (instance) {\n getInstanceProvides(instance)[key as PropertyKey] = value\n if (isRuntimeAppInstance(instance)) {\n setGlobalProvidedValue(key, value)\n }\n }\n else {\n // 全局模式:无组件实例时,兼容旧代码和纯函数场景\n setGlobalProvidedValue(key, value)\n }\n}\n\n/**\n * 从祖先组件(或全局存储)读取提供的值。\n *\n * @param key 注入键,需与 provide 使用的键保持一致\n * @param defaultValue 未找到提供者时的默认值\n * @returns 匹配到的值或默认值\n *\n * @example\n * ```ts\n * defineComponent({\n * setup() {\n * const data = inject(TOKEN_KEY)\n * const value = inject('key', 'default')\n * }\n * })\n * ```\n */\nexport function inject<T>(key: any, defaultValue: T): T\nexport function inject<T>(key: any): T | undefined\nexport function inject<T>(key: any, defaultValue?: T): T | undefined {\n const instance = getCurrentInstance()\n\n // 优先尝试基于实例的注入,找不到再回退全局\n if (instance) {\n const provides = getInstanceProvides(instance)\n if (key in provides) {\n return provides[key as PropertyKey] as T\n }\n }\n\n // 兼容性回退:尝试读取全局存储\n if (hasGlobalProvidedValue(key)) {\n return getGlobalProvidedValue(key)\n }\n\n // 使用默认值兜底\n if (arguments.length >= 2) {\n return defaultValue as T\n }\n\n const warn = globalThis.console?.warn\n if (typeof warn === 'function') {\n warn(`wevu.inject:未找到对应 key 的值:${String(key)}`)\n }\n\n return undefined\n}\n\n// ============================================================================\n// 显式的全局 provide/inject API\n// ============================================================================\n\n/**\n * 全局注入值,适用于历史兼容场景。\n *\n * @deprecated 已弃用,仅用于兼容/过渡。推荐优先使用 `provide()`,\n * 在无实例上下文时 `provide()` 会自动回落到全局存储。\n */\nexport function provideGlobal<T>(key: any, value: T): void {\n setGlobalProvidedValue(key, value)\n}\n\n/**\n * 从全局存储读取值,适用于历史兼容场景。\n *\n * @deprecated 已弃用,仅用于兼容/过渡。推荐优先使用 `inject()`,\n * 在无实例上下文时 `inject()` 会自动从全局存储读取。\n */\nexport function injectGlobal<T>(key: any, defaultValue?: T): T {\n if (hasGlobalProvidedValue(key)) {\n return getGlobalProvidedValue(key)\n }\n if (arguments.length >= 2) {\n return defaultValue as T\n }\n throw new Error(`injectGlobal():未找到对应 key 的 provider:${String(key)}`)\n}\n","function normalizePathSegments(path: string): string[] {\n const segments: string[] = []\n for (const segment of path.split('/')) {\n if (!segment || segment === '.') {\n continue\n }\n if (segment === '..') {\n if (segments.length > 0) {\n segments.pop()\n }\n continue\n }\n segments.push(segment)\n }\n return segments\n}\n\nexport function resolvePath(path: string, currentPath: string): string {\n if (!path) {\n return normalizePathSegments(currentPath).join('/')\n }\n\n if (path.startsWith('/')) {\n return normalizePathSegments(path).join('/')\n }\n\n if (path.startsWith('./') || path.startsWith('../')) {\n const baseSegments = normalizePathSegments(currentPath)\n if (baseSegments.length > 0) {\n baseSegments.pop()\n }\n\n for (const segment of path.split('/')) {\n if (!segment || segment === '.') {\n continue\n }\n if (segment === '..') {\n if (baseSegments.length > 0) {\n baseSegments.pop()\n }\n continue\n }\n baseSegments.push(segment)\n }\n\n return baseSegments.join('/')\n }\n\n return normalizePathSegments(path).join('/')\n}\n\nexport function createAbsoluteRoutePath(path: string): string {\n return path ? `/${path}` : '/'\n}\n\nconst DYNAMIC_ROUTE_RE = /(?:^|\\/):/\n\nexport function isDynamicRoutePath(path: string): boolean {\n return DYNAMIC_ROUTE_RE.test(path)\n}\n","import type {\n LocationQuery,\n LocationQueryRaw,\n LocationQueryValue,\n LocationQueryValueRaw,\n RouteParams,\n RouteParamsRaw,\n RouteParamValue,\n RouteParamValueRaw,\n} from '../router'\n\nconst PLUS_RE = /\\+/g\n\nfunction decodeQuerySegment(value: string): string {\n return decodeURIComponent(value.replace(PLUS_RE, ' '))\n}\n\nfunction encodeQuerySegment(value: string): string {\n return encodeURIComponent(value)\n}\n\nfunction pushQueryValue(target: LocationQuery, key: string, value: LocationQueryValue) {\n const previous = target[key]\n if (previous === undefined) {\n target[key] = value\n return\n }\n if (Array.isArray(previous)) {\n previous.push(value)\n return\n }\n target[key] = [previous, value]\n}\n\nfunction pushRouteParamValue(target: RouteParams, key: string, value: RouteParamValue) {\n const previous = target[key]\n if (previous === undefined) {\n target[key] = value\n return\n }\n if (Array.isArray(previous)) {\n previous.push(value)\n return\n }\n target[key] = [previous, value]\n}\n\nfunction normalizeQueryValue(value: LocationQueryValueRaw): LocationQueryValue | undefined {\n if (value === undefined) {\n return undefined\n }\n if (value === null) {\n return null\n }\n return String(value)\n}\n\nexport function normalizeQuery(query: LocationQueryRaw | LocationQuery): LocationQuery {\n const normalized: LocationQuery = {}\n for (const key of Object.keys(query)) {\n const rawValue = (query as Record<string, LocationQueryValueRaw | LocationQueryValueRaw[]>)[key]\n if (Array.isArray(rawValue)) {\n for (const item of rawValue) {\n const next = normalizeQueryValue(item)\n if (next !== undefined) {\n pushQueryValue(normalized, key, next)\n }\n }\n continue\n }\n const next = normalizeQueryValue(rawValue)\n if (next !== undefined) {\n pushQueryValue(normalized, key, next)\n }\n }\n return normalized\n}\n\nfunction normalizeRouteParamValue(value: RouteParamValueRaw): RouteParamValue | undefined {\n if (value === undefined || value === null) {\n return undefined\n }\n return String(value)\n}\n\nexport function normalizeRouteParams(params: RouteParamsRaw | RouteParams): RouteParams {\n const normalized: RouteParams = {}\n for (const key of Object.keys(params)) {\n const rawValue = (params as Record<string, RouteParamValueRaw | RouteParamValueRaw[]>)[key]\n if (Array.isArray(rawValue)) {\n for (const item of rawValue) {\n const next = normalizeRouteParamValue(item)\n if (next !== undefined) {\n pushRouteParamValue(normalized, key, next)\n }\n }\n continue\n }\n const next = normalizeRouteParamValue(rawValue)\n if (next !== undefined) {\n pushRouteParamValue(normalized, key, next)\n }\n }\n return normalized\n}\n\nexport function normalizeHash(rawHash?: string): string {\n if (!rawHash) {\n return ''\n }\n return rawHash.startsWith('#') ? rawHash : `#${rawHash}`\n}\n\nexport function parseQuery(search: string): LocationQuery {\n const normalizedSearch = search.startsWith('?') ? search.slice(1) : search\n const query: LocationQuery = {}\n\n if (!normalizedSearch) {\n return query\n }\n\n for (const segment of normalizedSearch.split('&')) {\n if (!segment) {\n continue\n }\n\n const equalIndex = segment.indexOf('=')\n const rawKey = equalIndex >= 0 ? segment.slice(0, equalIndex) : segment\n if (!rawKey) {\n continue\n }\n\n const key = decodeQuerySegment(rawKey)\n const value = equalIndex >= 0\n ? decodeQuerySegment(segment.slice(equalIndex + 1))\n : null\n\n pushQueryValue(query, key, value)\n }\n\n return query\n}\n\nexport function stringifyQuery(query: LocationQueryRaw | LocationQuery = {}): string {\n const normalizedQuery = normalizeQuery(query)\n const segments: string[] = []\n\n for (const key of Object.keys(normalizedQuery)) {\n const encodedKey = encodeQuerySegment(key)\n const rawValue = normalizedQuery[key]\n\n if (Array.isArray(rawValue)) {\n for (const item of rawValue) {\n if (item === null) {\n segments.push(encodedKey)\n }\n else {\n segments.push(`${encodedKey}=${encodeQuerySegment(item)}`)\n }\n }\n continue\n }\n\n if (rawValue === null) {\n segments.push(encodedKey)\n continue\n }\n\n segments.push(`${encodedKey}=${encodeQuerySegment(rawValue)}`)\n }\n\n return segments.join('&')\n}\n","import type {\n LocationQuery,\n LocationQueryRaw,\n RouteLocationNormalizedLoaded,\n RouteParams,\n RouteQueryStringifier,\n} from '../router'\nimport type { MiniProgramPageLike, RouteResolveCodec } from './types'\nimport { getCurrentMiniProgramPages } from '../runtime/platform'\nimport { getCurrentPageInstance } from '../runtime/register/component/lifecycle/platform'\nimport { createAbsoluteRoutePath, resolvePath } from './path'\nimport { normalizeHash, normalizeQuery, parseQuery, stringifyQuery } from './query'\n\nconst DEFAULT_ROUTE_RESOLVE_CODEC: RouteResolveCodec = {\n parseQuery,\n stringifyQuery,\n}\n\nexport function parsePathInput(\n input: string,\n codec: RouteResolveCodec = DEFAULT_ROUTE_RESOLVE_CODEC,\n): { path: string, query: LocationQuery, hash: string } {\n const hashIndex = input.indexOf('#')\n const withoutHash = hashIndex >= 0 ? input.slice(0, hashIndex) : input\n const hash = hashIndex >= 0 ? normalizeHash(input.slice(hashIndex + 1)) : ''\n const queryIndex = withoutHash.indexOf('?')\n\n if (queryIndex < 0) {\n return {\n path: withoutHash,\n query: {},\n hash,\n }\n }\n\n return {\n path: withoutHash.slice(0, queryIndex),\n query: normalizeQuery(codec.parseQuery(withoutHash.slice(queryIndex + 1))),\n hash,\n }\n}\n\nexport function createRouteLocation(\n path: string,\n query: LocationQuery,\n hash = '',\n name?: string,\n params: RouteParams = {},\n queryStringifier: RouteQueryStringifier = stringifyQuery,\n): RouteLocationNormalizedLoaded {\n const normalizedPath = resolvePath(path, '')\n const queryString = queryStringifier(query)\n const fullPathBase = createAbsoluteRoutePath(normalizedPath)\n const normalizedHash = normalizeHash(hash)\n const fullPath = queryString ? `${fullPathBase}?${queryString}` : fullPathBase\n const location: RouteLocationNormalizedLoaded = {\n path: normalizedPath,\n fullPath: normalizedHash ? `${fullPath}${normalizedHash}` : fullPath,\n query,\n hash: normalizedHash,\n params,\n }\n if (name !== undefined) {\n location.name = name\n }\n\n return location\n}\n\nfunction hasPageRoute(page: MiniProgramPageLike | undefined): page is MiniProgramPageLike {\n return (typeof page?.route === 'string' && page.route.length > 0)\n || (typeof page?.__route__ === 'string' && page.__route__.length > 0)\n}\n\nfunction getCurrentMiniProgramPage(fallbackPage?: MiniProgramPageLike): MiniProgramPageLike | undefined {\n const pages = getCurrentMiniProgramPages() as MiniProgramPageLike[]\n if (Array.isArray(pages) && pages.length > 0) {\n const currentPage = pages[pages.length - 1]\n if (hasPageRoute(currentPage)) {\n return currentPage\n }\n }\n\n const currentPageInstance = getCurrentPageInstance() as MiniProgramPageLike | undefined\n return hasPageRoute(currentPageInstance) ? currentPageInstance : fallbackPage\n}\n\nexport function resolveCurrentRoute(\n queryOverride?: LocationQueryRaw,\n fallbackPage?: MiniProgramPageLike,\n): RouteLocationNormalizedLoaded {\n const currentPage = getCurrentMiniProgramPage(fallbackPage)\n if (!currentPage) {\n return createRouteLocation('', {})\n }\n\n const rawPath = typeof currentPage.route === 'string'\n ? currentPage.route\n : typeof currentPage.__route__ === 'string'\n ? currentPage.__route__\n : ''\n\n const querySource = queryOverride ?? ((currentPage.options ?? {}) as LocationQueryRaw)\n const query = normalizeQuery(querySource)\n return createRouteLocation(rawPath, query, '', undefined, {})\n}\n","import type { SetupContextRouter } from '../types'\nimport { parsePathInput } from '../../routerInternal/location'\nimport { createAbsoluteRoutePath, resolvePath, stringifyQuery } from '../../routerInternal/shared'\nimport { getCurrentSetupContext } from '../hooks'\nimport { getCurrentMiniProgramGlobalRouter } from '../platform'\n\ntype RuntimeRouter = SetupContextRouter\ntype RuntimeRouterMethodName = 'switchTab' | 'reLaunch' | 'redirectTo' | 'navigateTo' | 'navigateBack'\ntype RuntimeRouterAccessor = 'router' | 'pageRouter'\n\nconst RUNTIME_ROUTER_METHODS: RuntimeRouterMethodName[] = ['switchTab', 'reLaunch', 'redirectTo', 'navigateTo', 'navigateBack']\nconst runtimeRouterWrapperCache = new WeakMap<RuntimeRouter, Map<string, RuntimeRouter>>()\n\nfunction isRuntimeRouter(candidate: unknown): candidate is RuntimeRouter {\n if (!candidate || typeof candidate !== 'object') {\n return false\n }\n return RUNTIME_ROUTER_METHODS.every((methodName) => {\n return typeof (candidate as Record<string, any>)[methodName] === 'function'\n })\n}\n\nfunction createGlobalRouterFallback(): RuntimeRouter | undefined {\n return getCurrentMiniProgramGlobalRouter()\n}\n\nfunction resolveBasePathCandidate(candidate: unknown): string | undefined {\n if (typeof candidate !== 'string' || !candidate) {\n return undefined\n }\n const normalized = resolvePath(candidate, '')\n return normalized || undefined\n}\n\nfunction resolveRouterBasePath(\n nativeInstance: Record<string, any>,\n accessor: RuntimeRouterAccessor,\n): string | undefined {\n const candidates = accessor === 'pageRouter'\n ? [nativeInstance.route, nativeInstance.__route__, nativeInstance.is]\n : [nativeInstance.is, nativeInstance.route, nativeInstance.__route__]\n\n for (const candidate of candidates) {\n const resolved = resolveBasePathCandidate(candidate)\n if (resolved) {\n return resolved\n }\n }\n\n return undefined\n}\n\nfunction resolveScopedRouterUrl(url: string, basePath?: string): string {\n if (!basePath || (!url.startsWith('./') && !url.startsWith('../'))) {\n return url\n }\n\n const { path, query, hash } = parsePathInput(url)\n const resolvedPath = createAbsoluteRoutePath(resolvePath(path, basePath))\n const queryString = stringifyQuery(query)\n return `${resolvedPath}${queryString ? `?${queryString}` : ''}${hash}`\n}\n\nfunction createScopedRuntimeRouter(rawRouter: RuntimeRouter, basePath?: string): RuntimeRouter {\n const cacheKey = basePath ?? ''\n const cachedByBasePath = runtimeRouterWrapperCache.get(rawRouter)\n const cachedRouter = cachedByBasePath?.get(cacheKey)\n if (cachedRouter) {\n return cachedRouter\n }\n\n const scopedRouter = Object.create(null) as RuntimeRouter\n for (const methodName of RUNTIME_ROUTER_METHODS) {\n ;(scopedRouter as Record<string, any>)[methodName] = (option: Record<string, any>) => {\n const rawMethod = (rawRouter as Record<string, any>)[methodName]\n if (methodName === 'navigateBack' || !option || typeof option !== 'object') {\n return rawMethod.call(rawRouter, option)\n }\n\n const nextUrl = typeof option.url === 'string'\n ? resolveScopedRouterUrl(option.url, basePath)\n : option.url\n const nextOption = nextUrl === option.url\n ? option\n : { ...option, url: nextUrl }\n return rawMethod.call(rawRouter, nextOption)\n }\n }\n\n const nextCache = cachedByBasePath ?? new Map<string, RuntimeRouter>()\n nextCache.set(cacheKey, scopedRouter)\n runtimeRouterWrapperCache.set(rawRouter, nextCache)\n return scopedRouter\n}\n\nfunction useRuntimeRouterByAccessor(\n primaryAccessor: RuntimeRouterAccessor,\n fallbackAccessor: RuntimeRouterAccessor,\n helperName: 'useNativeRouter' | 'useNativePageRouter',\n): RuntimeRouter {\n const ctx = getCurrentSetupContext<any>()\n if (!ctx?.instance) {\n throw new Error(`${helperName}() 必须在 setup() 的同步阶段调用`)\n }\n\n const nativeInstance = ctx.instance as Record<string, any>\n const basePath = resolveRouterBasePath(nativeInstance, primaryAccessor)\n const primaryRouter = nativeInstance[primaryAccessor]\n if (isRuntimeRouter(primaryRouter)) {\n return createScopedRuntimeRouter(primaryRouter, basePath)\n }\n\n const fallbackRouter = nativeInstance[fallbackAccessor]\n if (isRuntimeRouter(fallbackRouter)) {\n return createScopedRuntimeRouter(fallbackRouter, basePath)\n }\n\n const globalFallbackRouter = createGlobalRouterFallback()\n if (globalFallbackRouter) {\n return createScopedRuntimeRouter(globalFallbackRouter, basePath)\n }\n\n throw new Error('当前运行环境不支持 Router,请升级宿主基础库或检查平台路由能力')\n}\n\n/**\n * 在 setup 中获取与当前组件路径语义一致的原生 Router 对象。\n *\n * - 优先使用实例上的 `this.router`(组件路径语义)。\n * - 不可用时回退到 `this.pageRouter`。\n * - 低版本基础库再回退到宿主全局路由方法。\n *\n * 如需更贴近 Vue Router 的高阶能力(导航守卫、失败类型、统一解析),\n * 推荐改用 `wevu/router` 子入口的 `useRouter()`。\n */\nexport function useNativeRouter(): RuntimeRouter {\n return useRuntimeRouterByAccessor('router', 'pageRouter', 'useNativeRouter')\n}\n\n/**\n * 在 setup 中获取与当前页面路径语义一致的原生 Router 对象。\n *\n * - 优先使用实例上的 `this.pageRouter`(页面路径语义)。\n * - 不可用时回退到 `this.router`。\n * - 低版本基础库再回退到宿主全局路由方法。\n *\n * 如需更贴近 Vue Router 的高阶能力(导航守卫、失败类型、统一解析),\n * 推荐改用 `wevu/router` 子入口的 `useRouter()`。\n */\nexport function useNativePageRouter(): RuntimeRouter {\n return useRuntimeRouterByAccessor('pageRouter', 'router', 'useNativePageRouter')\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"router-DFQw3LKA.mjs","names":[],"sources":["../../src/reactivity/readonly.ts","../../src/runtime/platform.ts","../../src/runtime/hooks/base.ts","../../src/runtime/hooks/register.ts","../../src/runtime/provideStore.ts","../../src/runtime/provideContext.ts","../../src/runtime/register/component/lifecycle/platform.ts","../../src/runtime/provide.ts","../../src/routerInternal/path.ts","../../src/routerInternal/query.ts","../../src/routerInternal/location.ts","../../src/runtime/vueCompat/router.ts"],"sourcesContent":["import type { Ref } from './ref'\nimport { isObject, isReactive } from './reactive'\nimport { getTargetType, ReactiveFlags, TargetType } from './reactive/shared'\nimport { isRef, markAsRef } from './ref'\n\nfunction createReadonlyWrapper(target: any): any {\n if (isRef(target)) {\n const source = target\n const readonlyRef = markAsRef({\n get value() {\n return source.value\n },\n set value(_v: any) {\n throw new Error('无法给只读 ref 赋值')\n },\n })\n Object.defineProperties(readonlyRef, {\n [ReactiveFlags.IS_READONLY]: {\n value: true,\n configurable: true,\n },\n [ReactiveFlags.RAW]: {\n value: source,\n configurable: true,\n },\n })\n return readonlyRef\n }\n if (!isObject(target)) {\n return target\n }\n if (getTargetType(target as object) === TargetType.INVALID) {\n return target\n }\n return new Proxy(target as object, {\n set() {\n throw new Error('无法在只读对象上设置属性')\n },\n deleteProperty() {\n throw new Error('无法在只读对象上删除属性')\n },\n defineProperty() {\n throw new Error('无法在只读对象上定义属性')\n },\n get(target, key, receiver) {\n if (key === ReactiveFlags.IS_READONLY) {\n return true\n }\n if (key === ReactiveFlags.RAW) {\n return target\n }\n const res = Reflect.get(target, key, receiver)\n // 仅处理顶层属性,嵌套对象维持原引用以避免深拷贝和额外代理\n return res\n },\n })\n}\n\n/**\n * readonly 会为对象/数组创建一个“浅层”只读代理,并为 Ref 创建只读包装。\n * 选择浅层而非深层递归,是为了在小程序环境中保持实现和运行时开销最小,\n * 仅阻止直接属性写入/删除,嵌套对象仍按原样透传。\n */\nexport function readonly<T extends object>(target: T): T\nexport function readonly<T>(target: Ref<T>): Readonly<Ref<T>>\nexport function readonly(target: any): any {\n return createReadonlyWrapper(target)\n}\n\n/**\n * 与 Vue 3 的 `shallowReadonly()` 对齐。\n *\n * 当前 wevu 的只读语义本身就是浅层只读,因此这里直接复用同一套实现,\n * 让依赖 Vue 兼容 API 的代码可以无缝迁移。\n */\nexport function shallowReadonly<T extends object>(target: T): Readonly<T>\nexport function shallowReadonly<T>(target: Ref<T>): Readonly<Ref<T>>\nexport function shallowReadonly(target: any): any {\n return createReadonlyWrapper(target)\n}\n\n/**\n * 判断值是否为只读代理或只读 ref 包装。\n */\nexport function isReadonly(value: unknown): boolean {\n return Boolean(value && (value as any)[ReactiveFlags.IS_READONLY])\n}\n\n/**\n * 判断值是否为响应式代理或只读代理。\n */\nexport function isProxy(value: unknown): boolean {\n return isReactive(value) || isReadonly(value)\n}\n","import type { MiniProgramRuntimeCapabilities, MiniProgramRuntimeCapabilityName } from '@weapp-core/shared'\nimport {\n getMiniProgramPlatformByRuntimeGlobalKey,\n getMiniProgramRuntimeCapabilities,\n getMiniProgramRuntimeGlobalKey,\n getMiniProgramRuntimeGlobalKeys,\n getMiniProgramRuntimeHostConfigKey,\n resolveMiniProgramPlatform,\n supportsMiniProgramRuntimeCapability,\n} from '@weapp-core/shared'\n\ntype MiniProgramGlobal = Record<string, any>\ntype MiniProgramHostConfig = Record<string, any>\ntype MiniProgramGlobalRouterMethodName = 'switchTab' | 'reLaunch' | 'redirectTo' | 'navigateTo' | 'navigateBack'\ntype MiniProgramGlobalRouter = Record<MiniProgramGlobalRouterMethodName, (...args: any[]) => any>\ntype ImportMetaWithEnv = ImportMeta & {\n env?: {\n PLATFORM?: string\n }\n}\nconst MINI_PROGRAM_GLOBAL_ROUTER_METHODS: readonly MiniProgramGlobalRouterMethodName[] = [\n 'switchTab',\n 'reLaunch',\n 'redirectTo',\n 'navigateTo',\n 'navigateBack',\n]\n\nfunction getGlobalRuntime() {\n if (typeof globalThis === 'undefined') {\n return undefined\n }\n return globalThis as MiniProgramGlobal\n}\n\nexport function resolveCurrentMiniProgramPlatform() {\n const globalRuntime = getGlobalRuntime()\n const compiledPlatform = (import.meta as ImportMetaWithEnv).env?.PLATFORM\n\n // 优先命中编译期平台分支,便于构建阶段做 dead-code elimination。\n const resolvedCompiledPlatform = resolveMiniProgramPlatform(compiledPlatform)\n if (resolvedCompiledPlatform) {\n return resolvedCompiledPlatform\n }\n\n for (const globalKey of getMiniProgramRuntimeGlobalKeys()) {\n if (globalRuntime?.[globalKey]) {\n return getMiniProgramPlatformByRuntimeGlobalKey(globalKey)\n }\n }\n\n return undefined\n}\n\nexport function getCurrentMiniProgramRuntimeCapabilities(): MiniProgramRuntimeCapabilities {\n return getMiniProgramRuntimeCapabilities(resolveCurrentMiniProgramPlatform())\n}\n\nexport function supportsCurrentMiniProgramRuntimeCapability(capabilityName: MiniProgramRuntimeCapabilityName): boolean {\n return supportsMiniProgramRuntimeCapability(resolveCurrentMiniProgramPlatform(), capabilityName)\n}\n\nexport function getCurrentMiniProgramPages(): Array<Record<string, any>> {\n if (!supportsCurrentMiniProgramRuntimeCapability('globalPageStack')) {\n return []\n }\n const getCurrentPagesFn = (globalThis as Record<string, unknown>).getCurrentPages\n if (typeof getCurrentPagesFn !== 'function') {\n return []\n }\n try {\n const pages = getCurrentPagesFn()\n return Array.isArray(pages) ? pages as Array<Record<string, any>> : []\n }\n catch {\n return []\n }\n}\n\nexport function getCurrentMiniProgramHostConfig(): MiniProgramHostConfig | undefined {\n const globalRuntime = getGlobalRuntime()\n const hostConfigKey = getMiniProgramRuntimeHostConfigKey(resolveCurrentMiniProgramPlatform())\n const hostConfig = globalRuntime?.[hostConfigKey]\n return hostConfig && typeof hostConfig === 'object' ? hostConfig as MiniProgramHostConfig : undefined\n}\n\nexport function getMiniProgramGlobalObject(platformInput?: string): MiniProgramGlobal | undefined {\n const globalRuntime = getGlobalRuntime()\n const compiledPlatform = platformInput ?? (import.meta as ImportMetaWithEnv).env?.PLATFORM\n const resolvedCompiledPlatform = resolveMiniProgramPlatform(compiledPlatform)\n\n if (resolvedCompiledPlatform) {\n const globalKey = getMiniProgramRuntimeGlobalKey(resolvedCompiledPlatform)\n return globalRuntime?.[globalKey] as MiniProgramGlobal | undefined\n }\n\n for (const globalKey of getMiniProgramRuntimeGlobalKeys()) {\n const candidate = globalRuntime?.[globalKey]\n if (candidate) {\n return candidate as MiniProgramGlobal\n }\n }\n return undefined\n}\n\nexport function getCurrentMiniProgramGlobalRouter(): MiniProgramGlobalRouter | undefined {\n if (!supportsCurrentMiniProgramRuntimeCapability('globalRouterApi')) {\n return undefined\n }\n const miniProgramGlobal = getMiniProgramGlobalObject()\n if (!miniProgramGlobal) {\n return undefined\n }\n const routerMethods = Object.create(null) as Partial<MiniProgramGlobalRouter>\n for (const methodName of MINI_PROGRAM_GLOBAL_ROUTER_METHODS) {\n const handler = miniProgramGlobal[methodName]\n if (typeof handler !== 'function') {\n return undefined\n }\n routerMethods[methodName] = (...args: any[]) => handler.apply(miniProgramGlobal, args)\n }\n return routerMethods as MiniProgramGlobalRouter\n}\n\nexport function getScopedSlotHostGlobalObject(): MiniProgramGlobal | undefined {\n return getMiniProgramGlobalObject() ?? getGlobalRuntime()\n}\n","import type { InternalRuntimeState } from '../types'\nimport { WEVU_HOOKS_KEY } from '@weapp-core/constants'\nimport { getCurrentMiniProgramRuntimeCapabilities, getMiniProgramGlobalObject, supportsCurrentMiniProgramRuntimeCapability } from '../platform'\n\n// 仅供同步 setup() 调用期间使用的当前实例引用\nlet __currentInstance: InternalRuntimeState | undefined\nlet __currentSetupContext: any | undefined\n\nexport function getCurrentInstance<T extends InternalRuntimeState = InternalRuntimeState>(): T | undefined {\n return __currentInstance as T | undefined\n}\n\n/**\n * 设置当前运行时实例(框架内部使用)。\n * @internal\n */\nexport function setCurrentInstance(inst: InternalRuntimeState | undefined) {\n __currentInstance = inst\n}\n\nexport function getCurrentSetupContext<T = any>(): T | undefined {\n return __currentSetupContext as T | undefined\n}\n\n/**\n * 设置当前 setup 上下文(框架内部使用)。\n * @internal\n */\nexport function setCurrentSetupContext(ctx: any | undefined) {\n __currentSetupContext = ctx\n}\n\nexport function assertInSetup(name: string): InternalRuntimeState {\n if (!__currentInstance) {\n throw new Error(`${name}() 必须在 setup() 的同步阶段调用`)\n }\n return __currentInstance\n}\n\nfunction ensureHookBucket(target: InternalRuntimeState): Record<string, any> {\n if (!target[WEVU_HOOKS_KEY]) {\n target[WEVU_HOOKS_KEY] = Object.create(null)\n }\n return target[WEVU_HOOKS_KEY] as Record<string, any>\n}\n\ntype ShareMenuName = 'shareAppMessage' | 'shareTimeline'\n\nfunction buildShareMenus(\n enableOnShareAppMessage: boolean,\n enableOnShareTimeline: boolean,\n): ShareMenuName[] {\n const runtimeCapabilities = getCurrentMiniProgramRuntimeCapabilities()\n const shouldShowShareAppMessage = runtimeCapabilities.shareTimelineRequiresShareAppMessage\n ? (enableOnShareAppMessage || enableOnShareTimeline)\n : enableOnShareAppMessage\n\n const menus: ShareMenuName[] = []\n if (shouldShowShareAppMessage) {\n menus.push('shareAppMessage')\n }\n if (enableOnShareTimeline) {\n menus.push('shareTimeline')\n }\n return menus\n}\n\nfunction tryShowShareMenu(showShareMenu: (...args: any[]) => unknown, menus: ShareMenuName[]) {\n const payloads = [\n { withShareTicket: true, menus },\n { menus },\n menus.includes('shareTimeline') ? { withShareTicket: true } : undefined,\n menus.includes('shareTimeline') ? {} : undefined,\n undefined,\n ]\n\n for (const payload of payloads) {\n try {\n if (payload === undefined) {\n showShareMenu()\n }\n else {\n showShareMenu(payload as any)\n }\n return\n }\n catch {\n // 继续尝试更保守的 payload,兼容不同宿主的 showShareMenu 参数形态。\n }\n }\n}\n\nexport function pushHook(\n target: InternalRuntimeState,\n name: string,\n handler: (...args: any[]) => any,\n { single = false } = {},\n) {\n const bucket = ensureHookBucket(target)\n if (single) {\n bucket[name] = handler\n }\n else {\n const list: Array<(...args: any[]) => any> = bucket[name] ?? (bucket[name] = [])\n list.push(handler)\n }\n}\n\nexport function ensureSinglePageHookOnInstance(target: InternalRuntimeState, name: 'onShareAppMessage' | 'onShareTimeline' | 'onAddToFavorites') {\n const bridges = ((target as any).__wevuShareHookBridges ??= Object.create(null)) as Record<string, (...args: any[]) => any>\n if (typeof bridges[name] === 'function') {\n return\n }\n\n const original = (target as any)[name]\n const bridge = function onWevuShareHookBridge(this: InternalRuntimeState, ...args: any[]) {\n const hooks = this[WEVU_HOOKS_KEY] as Record<string, any> | undefined\n const entry = hooks?.[name]\n const runtime = this.__wevu\n const ctx = runtime?.proxy ?? this\n let ret: any\n\n if (typeof entry === 'function') {\n try {\n ret = entry.apply(ctx, args)\n }\n catch {\n ret = undefined\n }\n }\n else if (Array.isArray(entry)) {\n for (const fn of entry) {\n try {\n ret = fn.apply(ctx, args)\n }\n catch {\n // 忽略单个 hook 抛出的异常,继续执行后续 hook\n }\n }\n }\n\n if (ret !== undefined) {\n return ret\n }\n if (typeof original === 'function') {\n return original.apply(this, args)\n }\n return undefined\n }\n\n bridges[name] = bridge\n ;(target as any)[name] = bridge\n}\n\nexport function ensurePageShareMenusOnSetup(target: InternalRuntimeState) {\n if (!supportsCurrentMiniProgramRuntimeCapability('pageShareMenu')) {\n return\n }\n const miniProgramGlobal = getMiniProgramGlobalObject()\n if (!miniProgramGlobal || typeof miniProgramGlobal.showShareMenu !== 'function') {\n return\n }\n\n const hooks = (target[WEVU_HOOKS_KEY] ?? {}) as Record<string, any>\n const hasShareAppMessage = typeof hooks.onShareAppMessage === 'function'\n const hasShareTimeline = typeof hooks.onShareTimeline === 'function'\n\n if (!hasShareAppMessage && !hasShareTimeline) {\n return\n }\n\n const menus = buildShareMenus(hasShareAppMessage, hasShareTimeline)\n if (!menus.length) {\n return\n }\n\n tryShowShareMenu(miniProgramGlobal.showShareMenu.bind(miniProgramGlobal), menus)\n}\n\n/**\n * 调用批量 hook(框架内部调度入口)。\n * @internal\n */\nexport function callHookList(target: InternalRuntimeState, name: string, args: any[] = []) {\n const hooks = target[WEVU_HOOKS_KEY]\n if (!hooks) {\n return\n }\n const list = hooks[name]\n if (!list) {\n return\n }\n const runtime = target.__wevu\n const ctx = runtime?.proxy ?? target\n if (Array.isArray(list)) {\n for (const fn of list) {\n try {\n fn.apply(ctx, args)\n }\n catch {\n // 忽略单个 hook 抛出的异常,防止阻塞其他监听\n }\n }\n }\n else if (typeof list === 'function') {\n try {\n list.apply(ctx, args)\n }\n catch {\n // 忽略单个 hook 抛出的异常,防止阻塞其他监听\n }\n }\n}\n\nexport function ensurePageHookOnInstance(target: InternalRuntimeState, name: 'onPageScroll') {\n const bridges = ((target as any).__wevuPageHookBridges ??= Object.create(null)) as Record<string, (...args: any[]) => any>\n if (typeof bridges[name] === 'function') {\n return\n }\n\n const original = (target as any)[name]\n const bridge = function onWevuPageHookBridge(this: InternalRuntimeState, ...args: any[]) {\n callHookList(this, name, args)\n if (typeof original === 'function') {\n return original.apply(this, args)\n }\n return undefined\n }\n\n bridges[name] = bridge\n ;(target as any)[name] = bridge\n}\n\n/**\n * 调用返回值型 hook(框架内部调度入口)。\n * @internal\n */\nexport function callHookReturn(target: InternalRuntimeState, name: string, args: any[] = []) {\n const hooks = target[WEVU_HOOKS_KEY]\n if (!hooks) {\n return undefined\n }\n const entry = hooks[name]\n if (!entry) {\n return undefined\n }\n const runtime = target.__wevu\n const ctx = runtime?.proxy ?? target\n if (typeof entry === 'function') {\n try {\n return entry.apply(ctx, args)\n }\n catch {\n return undefined\n }\n }\n if (Array.isArray(entry)) {\n let out: any\n for (const fn of entry) {\n try {\n out = fn.apply(ctx, args)\n }\n catch {\n // 忽略单个 hook 抛出的异常,继续执行后续 hook\n }\n }\n return out\n }\n return undefined\n}\n","import type {\n MiniProgramAddToFavoritesOption,\n MiniProgramLaunchOptions,\n MiniProgramMemoryWarningResult,\n MiniProgramPageLifetime,\n MiniProgramPageNotFoundOptions,\n MiniProgramPageResizeOption,\n MiniProgramPageScrollOption,\n MiniProgramSaveExitState,\n MiniProgramShareAppMessageOption,\n MiniProgramTabItemTapOption,\n MiniProgramThemeChangeResult,\n MiniProgramUnhandledRejectionResult,\n} from '../types'\nimport { assertInSetup, ensurePageHookOnInstance, ensurePageShareMenusOnSetup, ensureSinglePageHookOnInstance, pushHook } from './base'\n\nfunction registerHook(name: string, handler: (...args: any[]) => any, options?: { single?: boolean }) {\n pushHook(assertInSetup(name), name, handler as any, options as any)\n}\n\n// 生命周期注册辅助方法:必须在 setup() 同步执行阶段调用\nexport function onLaunch(handler: (options: MiniProgramLaunchOptions) => void) {\n registerHook('onLaunch', handler as any)\n}\n\nexport function onPageNotFound(handler: (options: MiniProgramPageNotFoundOptions) => void) {\n registerHook('onPageNotFound', handler as any)\n}\n\nexport function onUnhandledRejection(handler: (options: MiniProgramUnhandledRejectionResult) => void) {\n registerHook('onUnhandledRejection', handler as any)\n}\n\nexport function onThemeChange(handler: (options: MiniProgramThemeChangeResult) => void) {\n registerHook('onThemeChange', handler as any)\n}\n\nexport function onMemoryWarning(handler: (options: MiniProgramMemoryWarningResult) => void) {\n registerHook('onMemoryWarning', handler as any)\n}\n\nexport function onShow(handler: () => void): void\nexport function onShow(handler: (options: MiniProgramLaunchOptions) => void): void\nexport function onShow(handler: ((options?: any) => void)) {\n registerHook('onShow', handler as any)\n}\n\nexport function onLoad(handler: MiniProgramPageLifetime['onLoad']) {\n registerHook('onLoad', handler as any)\n}\n\nexport function onHide(handler: () => void) {\n registerHook('onHide', handler as any)\n}\n\nexport function onUnload(handler: () => void) {\n registerHook('onUnload', handler as any)\n}\n\nexport function onReady(handler: () => void) {\n registerHook('onReady', handler as any)\n}\n\nexport function onPullDownRefresh(handler: MiniProgramPageLifetime['onPullDownRefresh']) {\n registerHook('onPullDownRefresh', handler as any)\n}\n\nexport function onReachBottom(handler: MiniProgramPageLifetime['onReachBottom']) {\n registerHook('onReachBottom', handler as any)\n}\n\nexport function onPageScroll(handler: (opt: MiniProgramPageScrollOption) => void) {\n const instance = assertInSetup('onPageScroll')\n pushHook(instance, 'onPageScroll', handler as any)\n ensurePageHookOnInstance(instance, 'onPageScroll')\n}\n\nexport function onRouteDone(handler: MiniProgramPageLifetime['onRouteDone'] | ((opt?: unknown) => void)) {\n registerHook('onRouteDone', handler as any)\n}\n\nexport function onTabItemTap(handler: (opt: MiniProgramTabItemTapOption) => void) {\n registerHook('onTabItemTap', handler as any)\n}\n\nexport function onResize(handler: (opt: MiniProgramPageResizeOption) => void) {\n registerHook('onResize', handler as any)\n}\n\nexport function onMoved(handler: () => void) {\n registerHook('onMoved', handler as any)\n}\n\nexport function onAttached(handler: () => void) {\n registerHook('onAttached', handler as any)\n}\n\nexport function onDetached(handler: () => void) {\n registerHook('onDetached', handler as any)\n}\n\nexport function onError(handler: (err: any) => void) {\n registerHook('onError', handler as any)\n}\n\nexport function onSaveExitState(handler: () => MiniProgramSaveExitState) {\n registerHook('onSaveExitState', handler as any, { single: true })\n}\n\nexport function onShareAppMessage(handler: (options: MiniProgramShareAppMessageOption) => Record<string, any> | void) {\n const instance = assertInSetup('onShareAppMessage')\n pushHook(instance, 'onShareAppMessage', handler as any, { single: true } as any)\n ensureSinglePageHookOnInstance(instance, 'onShareAppMessage')\n ensurePageShareMenusOnSetup(instance)\n}\n\nexport function onShareTimeline(handler: MiniProgramPageLifetime['onShareTimeline']) {\n const instance = assertInSetup('onShareTimeline')\n pushHook(instance, 'onShareTimeline', handler as any, { single: true } as any)\n ensureSinglePageHookOnInstance(instance, 'onShareTimeline')\n ensurePageShareMenusOnSetup(instance)\n}\n\nexport function onAddToFavorites(handler: (options: MiniProgramAddToFavoritesOption) => Record<string, any> | void) {\n const instance = assertInSetup('onAddToFavorites')\n pushHook(instance, 'onAddToFavorites', handler as any, { single: true } as any)\n ensureSinglePageHookOnInstance(instance, 'onAddToFavorites')\n}\n","const wevuGlobalProvideStore = new Map<any, any>()\n\n/**\n * 写入全局 provide 存储,供运行时内部与兼容层复用。\n */\nexport function setGlobalProvidedValue<T>(key: any, value: T): void {\n wevuGlobalProvideStore.set(key, value)\n}\n\nexport function hasGlobalProvidedValue(key: any): boolean {\n return wevuGlobalProvideStore.has(key)\n}\n\nexport function getGlobalProvidedValue<T>(key: any): T {\n return wevuGlobalProvideStore.get(key) as T\n}\n","import type { InternalRuntimeState, RuntimeApp } from './types'\nimport {\n WEVU_APP_PROVIDES_KEY,\n WEVU_IS_APP_INSTANCE_KEY,\n WEVU_PARENT_INSTANCE_KEY,\n WEVU_PROVIDES_KEY,\n WEVU_RUNTIME_APP_KEY,\n} from '@weapp-core/constants'\nimport { setGlobalProvidedValue } from './provideStore'\n\nexport function isRuntimeAppInstance(instance: unknown): boolean {\n return Boolean(\n instance\n && typeof instance === 'object'\n && (instance as { [WEVU_IS_APP_INSTANCE_KEY]?: boolean })[WEVU_IS_APP_INSTANCE_KEY] === true,\n )\n}\n\nfunction createProvides(parent?: Record<PropertyKey, any>) {\n return Object.create(parent ?? null) as Record<PropertyKey, any>\n}\n\nfunction getRuntimeAppProvides(runtimeApp: RuntimeApp<any, any, any> | undefined): Record<PropertyKey, any> {\n if (!runtimeApp) {\n return createProvides()\n }\n const existing = runtimeApp[WEVU_APP_PROVIDES_KEY]\n if (existing && typeof existing === 'object') {\n return existing\n }\n const provides = createProvides()\n try {\n Object.defineProperty(runtimeApp, WEVU_APP_PROVIDES_KEY, {\n value: provides,\n configurable: true,\n enumerable: false,\n writable: false,\n })\n }\n catch {\n ;(runtimeApp as any)[WEVU_APP_PROVIDES_KEY] = provides\n }\n return provides\n}\n\nexport function attachInstanceProvides(\n instance: InternalRuntimeState,\n provides: Record<PropertyKey, any>,\n): void {\n try {\n Object.defineProperty(instance, WEVU_PROVIDES_KEY, {\n value: provides,\n configurable: true,\n enumerable: false,\n writable: true,\n })\n }\n catch {\n ;(instance as any)[WEVU_PROVIDES_KEY] = provides\n }\n}\n\nexport function getInstanceProvides(instance: InternalRuntimeState): Record<PropertyKey, any> {\n const existing = instance[WEVU_PROVIDES_KEY]\n if (existing && typeof existing === 'object') {\n return existing\n }\n\n const runtimeApp = instance[WEVU_RUNTIME_APP_KEY]\n const parentProvides = instance[WEVU_PARENT_INSTANCE_KEY]?.[WEVU_PROVIDES_KEY]\n ?? getRuntimeAppProvides(runtimeApp)\n const provides = isRuntimeAppInstance(instance)\n ? getRuntimeAppProvides(runtimeApp)\n : createProvides(parentProvides)\n attachInstanceProvides(instance, provides)\n return provides\n}\n\nexport function ensureRuntimeAppProvides(runtimeApp: RuntimeApp<any, any, any>): Record<PropertyKey, any> {\n return getRuntimeAppProvides(runtimeApp)\n}\n\nexport function setRuntimeAppProvidedValue<T>(runtimeApp: RuntimeApp<any, any, any>, key: any, value: T): void {\n getRuntimeAppProvides(runtimeApp)[key as PropertyKey] = value\n setGlobalProvidedValue(key, value)\n}\n\nexport function attachRuntimeProvideContext(\n instance: InternalRuntimeState,\n runtimeApp: RuntimeApp<any, any, any>,\n parentInstance?: InternalRuntimeState,\n): void {\n const appProvides = getRuntimeAppProvides(runtimeApp)\n const parentProvides = parentInstance?.[WEVU_PROVIDES_KEY] ?? appProvides\n const provides = isRuntimeAppInstance(instance)\n ? appProvides\n : createProvides(parentProvides)\n\n if (parentInstance) {\n try {\n Object.defineProperty(instance, WEVU_PARENT_INSTANCE_KEY, {\n value: parentInstance,\n configurable: true,\n enumerable: false,\n writable: true,\n })\n }\n catch {\n ;(instance as any)[WEVU_PARENT_INSTANCE_KEY] = parentInstance\n }\n }\n\n attachInstanceProvides(instance, provides)\n}\n\nfunction isPrototypeInChain(target: Record<PropertyKey, any>, candidate: Record<PropertyKey, any>) {\n let current = Object.getPrototypeOf(target)\n while (current) {\n if (current === candidate) {\n return true\n }\n current = Object.getPrototypeOf(current)\n }\n return false\n}\n\nexport function attachRuntimeLayoutProvideContext(\n layoutInstance: InternalRuntimeState,\n pageInstance: InternalRuntimeState,\n): void {\n const layoutProvides = getInstanceProvides(layoutInstance)\n const pageProvides = getInstanceProvides(pageInstance)\n if (\n layoutProvides === pageProvides\n || isPrototypeInChain(layoutProvides, pageProvides)\n || isPrototypeInChain(pageProvides, layoutProvides)\n ) {\n return\n }\n\n Object.setPrototypeOf(pageProvides, layoutProvides)\n\n try {\n Object.defineProperty(pageInstance, WEVU_PARENT_INSTANCE_KEY, {\n value: layoutInstance,\n configurable: true,\n enumerable: false,\n writable: true,\n })\n }\n catch {\n ;(pageInstance as any)[WEVU_PARENT_INSTANCE_KEY] = layoutInstance\n }\n}\n","import type { InternalRuntimeState } from '../../../types'\nimport { WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY } from '@weapp-core/constants'\nimport { callHookList } from '../../../hooks'\nimport {\n getCurrentMiniProgramPages,\n getCurrentMiniProgramRuntimeCapabilities,\n getMiniProgramGlobalObject,\n supportsCurrentMiniProgramRuntimeCapability,\n} from '../../../platform'\n\nlet miniProgramGlobalPatched = false\nlet currentPageInstance: InternalRuntimeState | undefined\ntype ShareMenuName = 'shareAppMessage' | 'shareTimeline'\nexport function getCurrentPageInstance() {\n return currentPageInstance\n}\n\nexport function bindCurrentPageInstance(target: InternalRuntimeState) {\n currentPageInstance = target\n}\n\nexport function releaseCurrentPageInstance(target: InternalRuntimeState) {\n if (currentPageInstance === target) {\n currentPageInstance = undefined\n }\n}\n\nexport function runInPageScrollHook<T>(\n target: InternalRuntimeState,\n task: () => T,\n): T {\n const currentDepth = Number((target as any)[WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY] ?? 0)\n ;(target as any)[WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY] = currentDepth + 1\n try {\n return task()\n }\n finally {\n const nextDepth = Number((target as any)[WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY] ?? 1) - 1\n if (nextDepth <= 0) {\n delete (target as any)[WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY]\n }\n else {\n ;(target as any)[WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY] = nextDepth\n }\n }\n}\n\nexport function resolvePageOptions(target: InternalRuntimeState) {\n const direct = (target as any).options\n if (direct && typeof direct === 'object') {\n return direct\n }\n const pages = getCurrentMiniProgramPages()\n const page = pages[pages.length - 1]\n const options = page && typeof page === 'object' ? (page as any).options : undefined\n if (options && typeof options === 'object') {\n return options\n }\n return {}\n}\n\nexport function ensureMiniProgramGlobalPatched() {\n if (miniProgramGlobalPatched) {\n return\n }\n miniProgramGlobalPatched = true\n const miniProgramGlobal = getMiniProgramGlobalObject()\n if (!miniProgramGlobal || typeof miniProgramGlobal !== 'object') {\n return\n }\n if (supportsCurrentMiniProgramRuntimeCapability('pullDownRefreshApi')) {\n const rawStartPullDownRefresh = miniProgramGlobal.startPullDownRefresh as ((...args: any[]) => any) | undefined\n if (typeof rawStartPullDownRefresh === 'function') {\n miniProgramGlobal.startPullDownRefresh = function startPullDownRefreshPatched(...args: any[]) {\n const result = rawStartPullDownRefresh.apply(this, args)\n if (currentPageInstance) {\n callHookList(currentPageInstance, 'onPullDownRefresh', [])\n }\n return result\n }\n }\n }\n if (supportsCurrentMiniProgramRuntimeCapability('pageScrollApi')) {\n const rawPageScrollTo = miniProgramGlobal.pageScrollTo as ((...args: any[]) => any) | undefined\n if (typeof rawPageScrollTo === 'function') {\n miniProgramGlobal.pageScrollTo = function pageScrollToPatched(options: any, ...rest: any[]) {\n const result = rawPageScrollTo.apply(this, [options, ...rest])\n if (currentPageInstance) {\n const pageInstance = currentPageInstance\n runInPageScrollHook(pageInstance, () => {\n callHookList(pageInstance, 'onPageScroll', [options ?? {}])\n })\n }\n return result\n }\n }\n }\n}\n\nexport function ensurePageShareMenus(options: {\n enableOnShareAppMessage: boolean\n enableOnShareTimeline: boolean\n}) {\n const { enableOnShareAppMessage, enableOnShareTimeline } = options\n if (!enableOnShareAppMessage && !enableOnShareTimeline) {\n return\n }\n\n if (!supportsCurrentMiniProgramRuntimeCapability('pageShareMenu')) {\n return\n }\n\n const miniProgramGlobal = getMiniProgramGlobalObject()\n if (!miniProgramGlobal || typeof miniProgramGlobal.showShareMenu !== 'function') {\n return\n }\n\n const runtimeCapabilities = getCurrentMiniProgramRuntimeCapabilities()\n const shouldShowShareAppMessage = runtimeCapabilities.shareTimelineRequiresShareAppMessage\n ? (enableOnShareAppMessage || enableOnShareTimeline)\n : enableOnShareAppMessage\n\n if (!shouldShowShareAppMessage && !enableOnShareTimeline) {\n return\n }\n\n const menus: ShareMenuName[] = []\n if (shouldShowShareAppMessage) {\n menus.push('shareAppMessage')\n }\n if (enableOnShareTimeline) {\n menus.push('shareTimeline')\n }\n\n const payloads = [\n { withShareTicket: true, menus },\n { menus },\n enableOnShareTimeline ? { withShareTicket: true } : undefined,\n enableOnShareTimeline ? {} : undefined,\n undefined,\n ]\n\n for (const payload of payloads) {\n try {\n if (payload === undefined) {\n miniProgramGlobal.showShareMenu()\n }\n else {\n miniProgramGlobal.showShareMenu(payload as any)\n }\n break\n }\n catch {\n // 继续尝试更保守的 payload,兼容不同宿主的 showShareMenu 参数形态。\n }\n }\n}\n","import { getCurrentInstance } from './hooks'\nimport {\n getInstanceProvides,\n isRuntimeAppInstance,\n} from './provideContext'\nimport {\n getGlobalProvidedValue,\n hasGlobalProvidedValue,\n setGlobalProvidedValue,\n} from './provideStore'\n\n// ============================================================================\n// 分层的 provide/inject 机制\n// 用于在组件树内维护依赖注入关系,支持组件与全局两种作用域\n// ============================================================================\n\nexport { setGlobalProvidedValue } from './provideStore'\n\n/**\n * 判断当前是否存在可用的注入上下文。\n *\n * wevu 的依赖注入上下文来自同步 `setup()` 阶段的当前实例。\n */\nexport function hasInjectionContext(): boolean {\n return Boolean(getCurrentInstance())\n}\n\n/**\n * 在组件上下文中向后代注入值(与 Vue 3 行为兼容),若没有当前实例则回落到全局存储。\n *\n * @param key 注入键,可为字符串、Symbol 或对象\n * @param value 提供的值\n *\n * @example\n * ```ts\n * defineComponent({\n * setup() {\n * provide(TOKEN_KEY, { data: 'value' })\n * }\n * })\n * ```\n */\nexport function provide<T>(key: any, value: T): void {\n const instance = getCurrentInstance()\n\n if (instance) {\n getInstanceProvides(instance)[key as PropertyKey] = value\n if (isRuntimeAppInstance(instance)) {\n setGlobalProvidedValue(key, value)\n }\n }\n else {\n // 全局模式:无组件实例时,兼容旧代码和纯函数场景\n setGlobalProvidedValue(key, value)\n }\n}\n\n/**\n * 从祖先组件(或全局存储)读取提供的值。\n *\n * @param key 注入键,需与 provide 使用的键保持一致\n * @param defaultValue 未找到提供者时的默认值\n * @returns 匹配到的值或默认值\n *\n * @example\n * ```ts\n * defineComponent({\n * setup() {\n * const data = inject(TOKEN_KEY)\n * const value = inject('key', 'default')\n * }\n * })\n * ```\n */\nexport function inject<T>(key: any, defaultValue: T): T\nexport function inject<T>(key: any): T | undefined\nexport function inject<T>(key: any, defaultValue?: T): T | undefined {\n const instance = getCurrentInstance()\n\n // 优先尝试基于实例的注入,找不到再回退全局\n if (instance) {\n const provides = getInstanceProvides(instance)\n if (key in provides) {\n return provides[key as PropertyKey] as T\n }\n }\n\n // 兼容性回退:尝试读取全局存储\n if (hasGlobalProvidedValue(key)) {\n return getGlobalProvidedValue(key)\n }\n\n // 使用默认值兜底\n if (arguments.length >= 2) {\n return defaultValue as T\n }\n\n const warn = globalThis.console?.warn\n if (typeof warn === 'function') {\n warn(`wevu.inject:未找到对应 key 的值:${String(key)}`)\n }\n\n return undefined\n}\n\n// ============================================================================\n// 显式的全局 provide/inject API\n// ============================================================================\n\n/**\n * 全局注入值,适用于历史兼容场景。\n *\n * @deprecated 已弃用,仅用于兼容/过渡。推荐优先使用 `provide()`,\n * 在无实例上下文时 `provide()` 会自动回落到全局存储。\n */\nexport function provideGlobal<T>(key: any, value: T): void {\n setGlobalProvidedValue(key, value)\n}\n\n/**\n * 从全局存储读取值,适用于历史兼容场景。\n *\n * @deprecated 已弃用,仅用于兼容/过渡。推荐优先使用 `inject()`,\n * 在无实例上下文时 `inject()` 会自动从全局存储读取。\n */\nexport function injectGlobal<T>(key: any, defaultValue?: T): T {\n if (hasGlobalProvidedValue(key)) {\n return getGlobalProvidedValue(key)\n }\n if (arguments.length >= 2) {\n return defaultValue as T\n }\n throw new Error(`injectGlobal():未找到对应 key 的 provider:${String(key)}`)\n}\n","function normalizePathSegments(path: string): string[] {\n const segments: string[] = []\n for (const segment of path.split('/')) {\n if (!segment || segment === '.') {\n continue\n }\n if (segment === '..') {\n if (segments.length > 0) {\n segments.pop()\n }\n continue\n }\n segments.push(segment)\n }\n return segments\n}\n\nexport function resolvePath(path: string, currentPath: string): string {\n if (!path) {\n return normalizePathSegments(currentPath).join('/')\n }\n\n if (path.startsWith('/')) {\n return normalizePathSegments(path).join('/')\n }\n\n if (path.startsWith('./') || path.startsWith('../')) {\n const baseSegments = normalizePathSegments(currentPath)\n if (baseSegments.length > 0) {\n baseSegments.pop()\n }\n\n for (const segment of path.split('/')) {\n if (!segment || segment === '.') {\n continue\n }\n if (segment === '..') {\n if (baseSegments.length > 0) {\n baseSegments.pop()\n }\n continue\n }\n baseSegments.push(segment)\n }\n\n return baseSegments.join('/')\n }\n\n return normalizePathSegments(path).join('/')\n}\n\nexport function createAbsoluteRoutePath(path: string): string {\n return path ? `/${path}` : '/'\n}\n\nconst DYNAMIC_ROUTE_RE = /(?:^|\\/):/\n\nexport function isDynamicRoutePath(path: string): boolean {\n return DYNAMIC_ROUTE_RE.test(path)\n}\n","import type {\n LocationQuery,\n LocationQueryRaw,\n LocationQueryValue,\n LocationQueryValueRaw,\n RouteParams,\n RouteParamsRaw,\n RouteParamValue,\n RouteParamValueRaw,\n} from '../router'\n\nconst PLUS_RE = /\\+/g\n\nfunction decodeQuerySegment(value: string): string {\n return decodeURIComponent(value.replace(PLUS_RE, ' '))\n}\n\nfunction encodeQuerySegment(value: string): string {\n return encodeURIComponent(value)\n}\n\nfunction pushQueryValue(target: LocationQuery, key: string, value: LocationQueryValue) {\n const previous = target[key]\n if (previous === undefined) {\n target[key] = value\n return\n }\n if (Array.isArray(previous)) {\n previous.push(value)\n return\n }\n target[key] = [previous, value]\n}\n\nfunction pushRouteParamValue(target: RouteParams, key: string, value: RouteParamValue) {\n const previous = target[key]\n if (previous === undefined) {\n target[key] = value\n return\n }\n if (Array.isArray(previous)) {\n previous.push(value)\n return\n }\n target[key] = [previous, value]\n}\n\nfunction normalizeQueryValue(value: LocationQueryValueRaw): LocationQueryValue | undefined {\n if (value === undefined) {\n return undefined\n }\n if (value === null) {\n return null\n }\n return String(value)\n}\n\nexport function normalizeQuery(query: LocationQueryRaw | LocationQuery): LocationQuery {\n const normalized: LocationQuery = {}\n for (const key of Object.keys(query)) {\n const rawValue = (query as Record<string, LocationQueryValueRaw | LocationQueryValueRaw[]>)[key]\n if (Array.isArray(rawValue)) {\n for (const item of rawValue) {\n const next = normalizeQueryValue(item)\n if (next !== undefined) {\n pushQueryValue(normalized, key, next)\n }\n }\n continue\n }\n const next = normalizeQueryValue(rawValue)\n if (next !== undefined) {\n pushQueryValue(normalized, key, next)\n }\n }\n return normalized\n}\n\nfunction normalizeRouteParamValue(value: RouteParamValueRaw): RouteParamValue | undefined {\n if (value === undefined || value === null) {\n return undefined\n }\n return String(value)\n}\n\nexport function normalizeRouteParams(params: RouteParamsRaw | RouteParams): RouteParams {\n const normalized: RouteParams = {}\n for (const key of Object.keys(params)) {\n const rawValue = (params as Record<string, RouteParamValueRaw | RouteParamValueRaw[]>)[key]\n if (Array.isArray(rawValue)) {\n for (const item of rawValue) {\n const next = normalizeRouteParamValue(item)\n if (next !== undefined) {\n pushRouteParamValue(normalized, key, next)\n }\n }\n continue\n }\n const next = normalizeRouteParamValue(rawValue)\n if (next !== undefined) {\n pushRouteParamValue(normalized, key, next)\n }\n }\n return normalized\n}\n\nexport function normalizeHash(rawHash?: string): string {\n if (!rawHash) {\n return ''\n }\n return rawHash.startsWith('#') ? rawHash : `#${rawHash}`\n}\n\nexport function parseQuery(search: string): LocationQuery {\n const normalizedSearch = search.startsWith('?') ? search.slice(1) : search\n const query: LocationQuery = {}\n\n if (!normalizedSearch) {\n return query\n }\n\n for (const segment of normalizedSearch.split('&')) {\n if (!segment) {\n continue\n }\n\n const equalIndex = segment.indexOf('=')\n const rawKey = equalIndex >= 0 ? segment.slice(0, equalIndex) : segment\n if (!rawKey) {\n continue\n }\n\n const key = decodeQuerySegment(rawKey)\n const value = equalIndex >= 0\n ? decodeQuerySegment(segment.slice(equalIndex + 1))\n : null\n\n pushQueryValue(query, key, value)\n }\n\n return query\n}\n\nexport function stringifyQuery(query: LocationQueryRaw | LocationQuery = {}): string {\n const normalizedQuery = normalizeQuery(query)\n const segments: string[] = []\n\n for (const key of Object.keys(normalizedQuery)) {\n const encodedKey = encodeQuerySegment(key)\n const rawValue = normalizedQuery[key]\n\n if (Array.isArray(rawValue)) {\n for (const item of rawValue) {\n if (item === null) {\n segments.push(encodedKey)\n }\n else {\n segments.push(`${encodedKey}=${encodeQuerySegment(item)}`)\n }\n }\n continue\n }\n\n if (rawValue === null) {\n segments.push(encodedKey)\n continue\n }\n\n segments.push(`${encodedKey}=${encodeQuerySegment(rawValue)}`)\n }\n\n return segments.join('&')\n}\n","import type {\n LocationQuery,\n LocationQueryRaw,\n RouteLocationNormalizedLoaded,\n RouteParams,\n RouteQueryStringifier,\n} from '../router'\nimport type { MiniProgramPageLike, RouteResolveCodec } from './types'\nimport { getCurrentMiniProgramPages } from '../runtime/platform'\nimport { getCurrentPageInstance } from '../runtime/register/component/lifecycle/platform'\nimport { createAbsoluteRoutePath, resolvePath } from './path'\nimport { normalizeHash, normalizeQuery, parseQuery, stringifyQuery } from './query'\n\nconst DEFAULT_ROUTE_RESOLVE_CODEC: RouteResolveCodec = {\n parseQuery,\n stringifyQuery,\n}\n\nexport function parsePathInput(\n input: string,\n codec: RouteResolveCodec = DEFAULT_ROUTE_RESOLVE_CODEC,\n): { path: string, query: LocationQuery, hash: string } {\n const hashIndex = input.indexOf('#')\n const withoutHash = hashIndex >= 0 ? input.slice(0, hashIndex) : input\n const hash = hashIndex >= 0 ? normalizeHash(input.slice(hashIndex + 1)) : ''\n const queryIndex = withoutHash.indexOf('?')\n\n if (queryIndex < 0) {\n return {\n path: withoutHash,\n query: {},\n hash,\n }\n }\n\n return {\n path: withoutHash.slice(0, queryIndex),\n query: normalizeQuery(codec.parseQuery(withoutHash.slice(queryIndex + 1))),\n hash,\n }\n}\n\nexport function createRouteLocation(\n path: string,\n query: LocationQuery,\n hash = '',\n name?: string,\n params: RouteParams = {},\n queryStringifier: RouteQueryStringifier = stringifyQuery,\n): RouteLocationNormalizedLoaded {\n const normalizedPath = resolvePath(path, '')\n const queryString = queryStringifier(query)\n const fullPathBase = createAbsoluteRoutePath(normalizedPath)\n const normalizedHash = normalizeHash(hash)\n const fullPath = queryString ? `${fullPathBase}?${queryString}` : fullPathBase\n const location: RouteLocationNormalizedLoaded = {\n path: normalizedPath,\n fullPath: normalizedHash ? `${fullPath}${normalizedHash}` : fullPath,\n query,\n hash: normalizedHash,\n params,\n }\n if (name !== undefined) {\n location.name = name\n }\n\n return location\n}\n\nfunction hasPageRoute(page: MiniProgramPageLike | undefined): page is MiniProgramPageLike {\n return (typeof page?.route === 'string' && page.route.length > 0)\n || (typeof page?.__route__ === 'string' && page.__route__.length > 0)\n}\n\nfunction getCurrentMiniProgramPage(fallbackPage?: MiniProgramPageLike): MiniProgramPageLike | undefined {\n const pages = getCurrentMiniProgramPages() as MiniProgramPageLike[]\n if (Array.isArray(pages) && pages.length > 0) {\n const currentPage = pages[pages.length - 1]\n if (hasPageRoute(currentPage)) {\n return currentPage\n }\n }\n\n const currentPageInstance = getCurrentPageInstance() as MiniProgramPageLike | undefined\n return hasPageRoute(currentPageInstance) ? currentPageInstance : fallbackPage\n}\n\nexport function resolveCurrentRoute(\n queryOverride?: LocationQueryRaw,\n fallbackPage?: MiniProgramPageLike,\n): RouteLocationNormalizedLoaded {\n const currentPage = getCurrentMiniProgramPage(fallbackPage)\n if (!currentPage) {\n return createRouteLocation('', {})\n }\n\n const rawPath = typeof currentPage.route === 'string'\n ? currentPage.route\n : typeof currentPage.__route__ === 'string'\n ? currentPage.__route__\n : ''\n\n const querySource = queryOverride ?? ((currentPage.options ?? {}) as LocationQueryRaw)\n const query = normalizeQuery(querySource)\n return createRouteLocation(rawPath, query, '', undefined, {})\n}\n","import type { SetupContextRouter } from '../types'\nimport { parsePathInput } from '../../routerInternal/location'\nimport { createAbsoluteRoutePath, resolvePath, stringifyQuery } from '../../routerInternal/shared'\nimport { getCurrentSetupContext } from '../hooks'\nimport { getCurrentMiniProgramGlobalRouter } from '../platform'\n\ntype RuntimeRouter = SetupContextRouter\ntype RuntimeRouterMethodName = 'switchTab' | 'reLaunch' | 'redirectTo' | 'navigateTo' | 'navigateBack'\ntype RuntimeRouterAccessor = 'router' | 'pageRouter'\n\nconst RUNTIME_ROUTER_METHODS: RuntimeRouterMethodName[] = ['switchTab', 'reLaunch', 'redirectTo', 'navigateTo', 'navigateBack']\nconst runtimeRouterWrapperCache = new WeakMap<RuntimeRouter, Map<string, RuntimeRouter>>()\n\nfunction isRuntimeRouter(candidate: unknown): candidate is RuntimeRouter {\n if (!candidate || typeof candidate !== 'object') {\n return false\n }\n return RUNTIME_ROUTER_METHODS.every((methodName) => {\n return typeof (candidate as Record<string, any>)[methodName] === 'function'\n })\n}\n\nfunction createGlobalRouterFallback(): RuntimeRouter | undefined {\n return getCurrentMiniProgramGlobalRouter()\n}\n\nfunction resolveBasePathCandidate(candidate: unknown): string | undefined {\n if (typeof candidate !== 'string' || !candidate) {\n return undefined\n }\n const normalized = resolvePath(candidate, '')\n return normalized || undefined\n}\n\nfunction resolveRouterBasePath(\n nativeInstance: Record<string, any>,\n accessor: RuntimeRouterAccessor,\n): string | undefined {\n const candidates = accessor === 'pageRouter'\n ? [nativeInstance.route, nativeInstance.__route__, nativeInstance.is]\n : [nativeInstance.is, nativeInstance.route, nativeInstance.__route__]\n\n for (const candidate of candidates) {\n const resolved = resolveBasePathCandidate(candidate)\n if (resolved) {\n return resolved\n }\n }\n\n return undefined\n}\n\nfunction resolveScopedRouterUrl(url: string, basePath?: string): string {\n if (!basePath || (!url.startsWith('./') && !url.startsWith('../'))) {\n return url\n }\n\n const { path, query, hash } = parsePathInput(url)\n const resolvedPath = createAbsoluteRoutePath(resolvePath(path, basePath))\n const queryString = stringifyQuery(query)\n return `${resolvedPath}${queryString ? `?${queryString}` : ''}${hash}`\n}\n\nfunction createScopedRuntimeRouter(rawRouter: RuntimeRouter, basePath?: string): RuntimeRouter {\n const cacheKey = basePath ?? ''\n const cachedByBasePath = runtimeRouterWrapperCache.get(rawRouter)\n const cachedRouter = cachedByBasePath?.get(cacheKey)\n if (cachedRouter) {\n return cachedRouter\n }\n\n const scopedRouter = Object.create(null) as RuntimeRouter\n for (const methodName of RUNTIME_ROUTER_METHODS) {\n ;(scopedRouter as Record<string, any>)[methodName] = (option: Record<string, any>) => {\n const rawMethod = (rawRouter as Record<string, any>)[methodName]\n if (methodName === 'navigateBack' || !option || typeof option !== 'object') {\n return rawMethod.call(rawRouter, option)\n }\n\n const nextUrl = typeof option.url === 'string'\n ? resolveScopedRouterUrl(option.url, basePath)\n : option.url\n const nextOption = nextUrl === option.url\n ? option\n : { ...option, url: nextUrl }\n return rawMethod.call(rawRouter, nextOption)\n }\n }\n\n const nextCache = cachedByBasePath ?? new Map<string, RuntimeRouter>()\n nextCache.set(cacheKey, scopedRouter)\n runtimeRouterWrapperCache.set(rawRouter, nextCache)\n return scopedRouter\n}\n\nfunction useRuntimeRouterByAccessor(\n primaryAccessor: RuntimeRouterAccessor,\n fallbackAccessor: RuntimeRouterAccessor,\n helperName: 'useNativeRouter' | 'useNativePageRouter',\n): RuntimeRouter {\n const ctx = getCurrentSetupContext<any>()\n if (!ctx?.instance) {\n throw new Error(`${helperName}() 必须在 setup() 的同步阶段调用`)\n }\n\n const nativeInstance = ctx.instance as Record<string, any>\n const basePath = resolveRouterBasePath(nativeInstance, primaryAccessor)\n const primaryRouter = nativeInstance[primaryAccessor]\n if (isRuntimeRouter(primaryRouter)) {\n return createScopedRuntimeRouter(primaryRouter, basePath)\n }\n\n const fallbackRouter = nativeInstance[fallbackAccessor]\n if (isRuntimeRouter(fallbackRouter)) {\n return createScopedRuntimeRouter(fallbackRouter, basePath)\n }\n\n const globalFallbackRouter = createGlobalRouterFallback()\n if (globalFallbackRouter) {\n return createScopedRuntimeRouter(globalFallbackRouter, basePath)\n }\n\n throw new Error('当前运行环境不支持 Router,请升级宿主基础库或检查平台路由能力')\n}\n\n/**\n * 在 setup 中获取与当前组件路径语义一致的原生 Router 对象。\n *\n * - 优先使用实例上的 `this.router`(组件路径语义)。\n * - 不可用时回退到 `this.pageRouter`。\n * - 低版本基础库再回退到宿主全局路由方法。\n *\n * 如需更贴近 Vue Router 的高阶能力(导航守卫、失败类型、统一解析),\n * 推荐改用 `wevu/router` 子入口的 `useRouter()`。\n */\nexport function useNativeRouter(): RuntimeRouter {\n return useRuntimeRouterByAccessor('router', 'pageRouter', 'useNativeRouter')\n}\n\n/**\n * 在 setup 中获取与当前页面路径语义一致的原生 Router 对象。\n *\n * - 优先使用实例上的 `this.pageRouter`(页面路径语义)。\n * - 不可用时回退到 `this.router`。\n * - 低版本基础库再回退到宿主全局路由方法。\n *\n * 如需更贴近 Vue Router 的高阶能力(导航守卫、失败类型、统一解析),\n * 推荐改用 `wevu/router` 子入口的 `useRouter()`。\n */\nexport function useNativePageRouter(): RuntimeRouter {\n return useRuntimeRouterByAccessor('pageRouter', 'router', 'useNativePageRouter')\n}\n"],"mappings":"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"}
|
package/dist/dev/router.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { d as reactive } from "./ref-
|
|
2
|
-
import { K as onRouteDone, L as onLoad, W as onReady, X as onShow, _t as readonly, a as resolveCurrentRoute, at as getCurrentSetupContext, c as normalizeRouteParams, d as createAbsoluteRoutePath, f as isDynamicRoutePath, g as injectGlobal, i as parsePathInput, l as parseQuery, n as useNativeRouter$1, o as normalizeHash, p as resolvePath, r as createRouteLocation, s as normalizeQuery, t as useNativePageRouter$1, u as stringifyQuery, v as provideGlobal } from "./router-
|
|
1
|
+
import { d as reactive } from "./ref-Dui1TzOR.mjs";
|
|
2
|
+
import { K as onRouteDone, L as onLoad, W as onReady, X as onShow, _t as readonly, a as resolveCurrentRoute, at as getCurrentSetupContext, c as normalizeRouteParams, d as createAbsoluteRoutePath, f as isDynamicRoutePath, g as injectGlobal, i as parsePathInput, l as parseQuery, n as useNativeRouter$1, o as normalizeHash, p as resolvePath, r as createRouteLocation, s as normalizeQuery, t as useNativePageRouter$1, u as stringifyQuery, v as provideGlobal } from "./router-DFQw3LKA.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/routerInternal/params.ts
|
|
5
5
|
const PATH_PARAM_TOKEN_RE = /^:(\w+)(?:\([^)]*\))?([+*?])?$/;
|
|
@@ -1083,30 +1083,43 @@ function createRouteRegistry(namedRouteLookup) {
|
|
|
1083
1083
|
|
|
1084
1084
|
//#endregion
|
|
1085
1085
|
//#region src/router/useRoute.ts
|
|
1086
|
-
function
|
|
1086
|
+
function applyRouteState(routeState, nextRoute) {
|
|
1087
|
+
routeState.path = nextRoute.path;
|
|
1088
|
+
routeState.fullPath = nextRoute.fullPath;
|
|
1089
|
+
routeState.query = cloneLocationQuery(nextRoute.query);
|
|
1090
|
+
routeState.hash = nextRoute.hash;
|
|
1091
|
+
routeState.params = cloneRouteParams(nextRoute.params);
|
|
1092
|
+
if (nextRoute.name === void 0) delete routeState.name;
|
|
1093
|
+
else routeState.name = nextRoute.name;
|
|
1094
|
+
if (nextRoute.meta === void 0) delete routeState.meta;
|
|
1095
|
+
else routeState.meta = cloneRouteMeta(nextRoute.meta);
|
|
1096
|
+
if (nextRoute.href === void 0) delete routeState.href;
|
|
1097
|
+
else routeState.href = nextRoute.href;
|
|
1098
|
+
if (nextRoute.matched === void 0) delete routeState.matched;
|
|
1099
|
+
else routeState.matched = cloneRouteRecordMatchedList(nextRoute.matched);
|
|
1100
|
+
if (nextRoute.redirectedFrom === void 0) delete routeState.redirectedFrom;
|
|
1101
|
+
else routeState.redirectedFrom = cloneRouteLocationRedirectedFrom(nextRoute.redirectedFrom);
|
|
1102
|
+
}
|
|
1103
|
+
function useRoute(options = {}) {
|
|
1104
|
+
var _options$resolveRoute;
|
|
1087
1105
|
const setupContext = getCurrentSetupContext();
|
|
1088
1106
|
if (!setupContext) throw new Error("useRoute() 必须在 setup() 的同步阶段调用");
|
|
1089
1107
|
const fallbackPage = setupContext.instance;
|
|
1090
|
-
const
|
|
1108
|
+
const resolveRoute = (_options$resolveRoute = options.resolveRoute) !== null && _options$resolveRoute !== void 0 ? _options$resolveRoute : ((route) => {
|
|
1109
|
+
var _getActiveRouter$reso, _getActiveRouter;
|
|
1110
|
+
return (_getActiveRouter$reso = (_getActiveRouter = getActiveRouter()) === null || _getActiveRouter === void 0 ? void 0 : _getActiveRouter.resolve(route)) !== null && _getActiveRouter$reso !== void 0 ? _getActiveRouter$reso : route;
|
|
1111
|
+
});
|
|
1112
|
+
const currentRoute = resolveRoute(resolveCurrentRoute(void 0, fallbackPage));
|
|
1091
1113
|
const routeState = reactive({
|
|
1092
1114
|
path: currentRoute.path,
|
|
1093
1115
|
fullPath: currentRoute.fullPath,
|
|
1094
|
-
query: currentRoute.query,
|
|
1116
|
+
query: cloneLocationQuery(currentRoute.query),
|
|
1095
1117
|
hash: currentRoute.hash,
|
|
1096
|
-
params: currentRoute.params
|
|
1097
|
-
name: currentRoute.name
|
|
1118
|
+
params: cloneRouteParams(currentRoute.params)
|
|
1098
1119
|
});
|
|
1099
|
-
|
|
1120
|
+
applyRouteState(routeState, currentRoute);
|
|
1100
1121
|
function syncRoute(queryOverride) {
|
|
1101
|
-
|
|
1102
|
-
routeState.path = nextRoute.path;
|
|
1103
|
-
routeState.fullPath = nextRoute.fullPath;
|
|
1104
|
-
routeState.query = nextRoute.query;
|
|
1105
|
-
routeState.hash = nextRoute.hash;
|
|
1106
|
-
if (nextRoute.meta === void 0) delete routeState.meta;
|
|
1107
|
-
else routeState.meta = nextRoute.meta;
|
|
1108
|
-
routeState.params = nextRoute.params;
|
|
1109
|
-
routeState.name = nextRoute.name;
|
|
1122
|
+
applyRouteState(routeState, resolveRoute(resolveCurrentRoute(queryOverride, fallbackPage)));
|
|
1110
1123
|
}
|
|
1111
1124
|
onLoad((query) => {
|
|
1112
1125
|
syncRoute(query);
|
|
@@ -1143,7 +1156,6 @@ function useNativePageRouter() {
|
|
|
1143
1156
|
function createRouter(options = {}) {
|
|
1144
1157
|
var _options$maxRedirects, _options$paramsMode, _options$rejectOnErro, _options$parseQuery, _options$stringifyQue, _options$tabBarEntrie;
|
|
1145
1158
|
const nativeRouter = useNativeRouter();
|
|
1146
|
-
const route = useRoute();
|
|
1147
1159
|
const beforeEachGuards = /* @__PURE__ */ new Set();
|
|
1148
1160
|
const beforeResolveGuards = /* @__PURE__ */ new Set();
|
|
1149
1161
|
const afterEachHooks = /* @__PURE__ */ new Set();
|
|
@@ -1163,8 +1175,8 @@ function createRouter(options = {}) {
|
|
|
1163
1175
|
const tabBarPathSet = new Set(normalizedTabBarEntries);
|
|
1164
1176
|
const routeRegistry = createRouteRegistry(namedRouteLookup);
|
|
1165
1177
|
const routerOptions = createRouterOptionsSnapshot(normalizedTabBarEntries, routeRegistry.getRoutes(), paramsMode, maxRedirects, routeResolveCodec, rejectOnError);
|
|
1166
|
-
function
|
|
1167
|
-
const resolved =
|
|
1178
|
+
function enrichRouteRecordState(routeLocation) {
|
|
1179
|
+
const resolved = { ...routeLocation };
|
|
1168
1180
|
resolved.href = resolved.fullPath;
|
|
1169
1181
|
const matchedResult = resolveMatchedRouteRecord(resolved, namedRouteLookup);
|
|
1170
1182
|
if (matchedResult) {
|
|
@@ -1179,6 +1191,10 @@ function createRouter(options = {}) {
|
|
|
1179
1191
|
} else resolved.matched = [];
|
|
1180
1192
|
return resolved;
|
|
1181
1193
|
}
|
|
1194
|
+
function resolveWithCodec(to, currentPath) {
|
|
1195
|
+
return enrichRouteRecordState(resolveRouteLocation(typeof to === "string" ? to : resolveNamedRouteLocation(to, namedRouteLookup, paramsMode), currentPath, routeResolveCodec));
|
|
1196
|
+
}
|
|
1197
|
+
const route = useRoute({ resolveRoute: enrichRouteRecordState });
|
|
1182
1198
|
function resolve(to) {
|
|
1183
1199
|
return resolveWithCodec(to, route.path);
|
|
1184
1200
|
}
|