wevu 6.17.8 → 6.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/base-BxKbbKVO.mjs +1 -0
- package/dist/computed-Xoi9XEUx.mjs +1 -0
- package/dist/dev/{base-ii6cqKIl.mjs → base-CYkvI7w8.mjs} +2 -2
- package/dist/dev/{base-ii6cqKIl.mjs.map → base-CYkvI7w8.mjs.map} +1 -1
- package/dist/dev/computed-BxRsUJgi.mjs +128 -0
- package/dist/dev/computed-BxRsUJgi.mjs.map +1 -0
- package/dist/dev/index.mjs +9 -9
- package/dist/dev/internal-reactivity.mjs +5 -5
- package/dist/dev/internal-runtime.mjs +3 -3
- package/dist/dev/internal-template.mjs +1 -1
- package/dist/dev/{ref-Bxwe2Kfo.mjs → ref-DRZC3Kc5.mjs} +6 -202
- package/dist/dev/ref-DRZC3Kc5.mjs.map +1 -0
- package/dist/dev/{router-D6H7HviN.mjs → router-BD-ovqV2.mjs} +69 -5
- package/dist/dev/router-BD-ovqV2.mjs.map +1 -0
- package/dist/dev/router.mjs +36 -13
- package/dist/dev/router.mjs.map +1 -1
- package/dist/dev/{store-7lzhCASj.mjs → store-HNsiQJ4d.mjs} +14 -10
- package/dist/dev/store-HNsiQJ4d.mjs.map +1 -0
- package/dist/dev/store.mjs +1 -1
- package/dist/dev/{template-DLHZbQ3E.mjs → template-n_iVr0ey.mjs} +2 -2
- package/dist/dev/{template-DLHZbQ3E.mjs.map → template-n_iVr0ey.mjs.map} +1 -1
- package/dist/dev/{templateRef-C4hJDc4O.mjs → templateRef-DuFamxmB.mjs} +108 -16
- package/dist/dev/templateRef-DuFamxmB.mjs.map +1 -0
- package/dist/dev/{toRefs-BVrN7XKZ.mjs → toRefs-D06VmFK2.mjs} +2 -2
- package/dist/dev/{toRefs-BVrN7XKZ.mjs.map → toRefs-D06VmFK2.mjs.map} +1 -1
- package/dist/dev/vue-demi.mjs +9 -9
- package/dist/dev/{watch-B46crqgs.mjs → watch-jrgL5ald.mjs} +121 -4
- package/dist/dev/watch-jrgL5ald.mjs.map +1 -0
- package/dist/fetch.d.mts +0 -1
- package/dist/{index-C6Jyiw-u.d.mts → index-CCET_bCY.d.mts} +3 -4
- package/dist/{index-HS9xxiUI.d.mts → index-Dg1-jV9L.d.mts} +17 -17
- package/dist/index.d.mts +5 -4
- package/dist/index.mjs +1 -1
- package/dist/internal-reactivity.d.mts +2 -1
- package/dist/internal-reactivity.mjs +1 -1
- package/dist/internal-runtime.d.mts +1 -1
- package/dist/internal-runtime.mjs +1 -1
- package/dist/internal-template.mjs +1 -1
- package/dist/jsx-runtime.d.mts +1 -2
- package/dist/ref-D37CknuD.mjs +1 -0
- package/dist/router-DLOOLAqv.mjs +1 -0
- package/dist/router.d.mts +1 -2
- package/dist/router.mjs +1 -1
- package/dist/store-eHrHBQiv.mjs +1 -0
- package/dist/store.d.mts +1 -1
- package/dist/store.mjs +1 -1
- package/dist/{template-CFhlojaH.mjs → template-CNzlwH-E.mjs} +1 -1
- package/dist/templateRef-C4R74tUR.mjs +1 -0
- package/dist/{toRefs-COgMIEoC.mjs → toRefs-CoytPyo0.mjs} +1 -1
- package/dist/traverse-B4Ez44Gd.d.mts +108 -0
- package/dist/vue-demi.d.mts +5 -6
- package/dist/vue-demi.mjs +1 -1
- package/dist/{vue-types-xMdYZRuG.d.mts → vue-types-B3N60cGV.d.mts} +13 -121
- package/dist/watch-Bbd-gmEg.mjs +1 -0
- package/dist/{weappIntrinsicElements-BjaNcUW3.d.mts → weappIntrinsicElements-BgDtC53_.d.mts} +1 -1
- package/package.json +2 -2
- package/dist/base-D-o2Hv6z.mjs +0 -1
- package/dist/computed-DdPJb4_M.mjs +0 -1
- package/dist/dev/computed-4hT2jDra.mjs +0 -48
- package/dist/dev/computed-4hT2jDra.mjs.map +0 -1
- package/dist/dev/ref-Bxwe2Kfo.mjs.map +0 -1
- package/dist/dev/router-D6H7HviN.mjs.map +0 -1
- package/dist/dev/store-7lzhCASj.mjs.map +0 -1
- package/dist/dev/templateRef-C4hJDc4O.mjs.map +0 -1
- package/dist/dev/watch-B46crqgs.mjs.map +0 -1
- package/dist/ref-CRwjgX_d.mjs +0 -1
- package/dist/router-BiJKkvy7.mjs +0 -1
- package/dist/store-B9C0AuaO.mjs +0 -1
- package/dist/templateRef-DPHQBy6k.mjs +0 -1
- package/dist/watch-6_s3_f8q.mjs +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ref-DRZC3Kc5.mjs","names":[],"sources":["../../src/reactivity/core.ts","../../src/reactivity/reactive/mutation.ts","../../src/reactivity/reactive/patchState.ts","../../src/reactivity/reactive/shared.ts","../../src/reactivity/reactive/state.ts","../../src/reactivity/reactive.ts","../../src/reactivity/ref.ts"],"sourcesContent":["import { queueJob } from '../scheduler'\n\nexport type EffectScheduler = () => void\n\nexport type Dep = Set<ReactiveEffect>\n\nexport interface ReactiveEffect<T = any> {\n (): T\n deps: Dep[]\n scheduler?: EffectScheduler\n active: boolean\n _running: boolean\n _fn: () => T\n onStop?: () => void\n}\n\nconst targetMap = new WeakMap<object, Map<PropertyKey, Dep>>()\n\nlet activeEffect: ReactiveEffect | null = null\nconst effectStack: ReactiveEffect[] = []\n\nlet batchDepth = 0\nconst batchedEffects = new Set<ReactiveEffect>()\n\nexport function startBatch() {\n batchDepth++\n}\n\nfunction flushBatchedEffects() {\n while (batchedEffects.size) {\n const effects = [...batchedEffects]\n batchedEffects.clear()\n for (const ef of effects) {\n ef()\n }\n }\n}\n\nexport function endBatch() {\n if (batchDepth === 0) {\n return\n }\n batchDepth--\n if (batchDepth === 0) {\n flushBatchedEffects()\n }\n}\n\nexport function batch<T>(fn: () => T): T {\n startBatch()\n try {\n return fn()\n }\n finally {\n endBatch()\n }\n}\n\nfunction cleanupEffect(effect: ReactiveEffect) {\n const { deps } = effect\n for (let i = 0; i < deps.length; i++) {\n deps[i].delete(effect)\n }\n deps.length = 0\n}\n\nexport function stop(runner: ReactiveEffect) {\n if (!runner.active) {\n return\n }\n runner.active = false\n cleanupEffect(runner)\n runner.onStop?.()\n}\n\nexport interface EffectScope {\n active: boolean\n effects: ReactiveEffect[]\n cleanups: (() => void)[]\n run: <T>(fn: () => T) => T | undefined\n stop: () => void\n}\n\nlet activeEffectScope: EffectScopeImpl | undefined\n\nclass EffectScopeImpl implements EffectScope {\n active = true\n effects: ReactiveEffect[] = []\n cleanups: (() => void)[] = []\n private parent: EffectScopeImpl | undefined\n private scopes: EffectScopeImpl[] | undefined\n\n constructor(private detached = false) {\n if (!detached && activeEffectScope) {\n this.parent = activeEffectScope\n ;(activeEffectScope.scopes ||= []).push(this)\n }\n }\n\n run<T>(fn: () => T): T | undefined {\n if (!this.active) {\n return\n }\n const prev = activeEffectScope\n // eslint-disable-next-line ts/no-this-alias -- 允许 this 临时别名\n activeEffectScope = this\n try {\n return fn()\n }\n finally {\n activeEffectScope = prev\n }\n }\n\n stop(): void {\n if (!this.active) {\n return\n }\n this.active = false\n\n for (const effect of this.effects) {\n stop(effect)\n }\n this.effects.length = 0\n\n for (const cleanup of this.cleanups) {\n cleanup()\n }\n this.cleanups.length = 0\n\n if (this.scopes) {\n for (const scope of this.scopes) {\n scope.stop()\n }\n this.scopes.length = 0\n }\n\n if (this.parent?.scopes) {\n const index = this.parent.scopes.indexOf(this)\n if (index >= 0) {\n this.parent.scopes.splice(index, 1)\n }\n }\n this.parent = undefined\n }\n}\n\nexport function effectScope(detached = false): EffectScope {\n return new EffectScopeImpl(detached)\n}\n\nexport function getCurrentScope(): EffectScope | undefined {\n return activeEffectScope\n}\n\nexport function onScopeDispose(fn: () => void): void {\n if (activeEffectScope?.active) {\n activeEffectScope.cleanups.push(fn)\n }\n}\n\nfunction recordEffectScope(effect: ReactiveEffect) {\n if (activeEffectScope?.active) {\n activeEffectScope.effects.push(effect)\n }\n}\n\nexport interface EffectOptions {\n scheduler?: EffectScheduler\n lazy?: boolean\n onStop?: () => void\n}\n\nexport function createReactiveEffect<T>(fn: () => T, options: EffectOptions = {}): ReactiveEffect<T> {\n const effect = function reactiveEffect() {\n if (!effect.active) {\n return fn()\n }\n if (effect._running) {\n return fn()\n }\n cleanupEffect(effect)\n try {\n effect._running = true\n effectStack.push(effect)\n activeEffect = effect\n return fn()\n }\n finally {\n effectStack.pop()\n activeEffect = effectStack[effectStack.length - 1] ?? null\n effect._running = false\n }\n } as ReactiveEffect<T>\n\n effect.deps = []\n effect.scheduler = options.scheduler\n effect.onStop = options.onStop\n effect.active = true\n effect._running = false\n effect._fn = fn\n\n return effect\n}\n\nexport function effect<T = any>(fn: () => T, options: EffectOptions = {}): ReactiveEffect<T> {\n const _effect = createReactiveEffect(fn, options)\n recordEffectScope(_effect)\n if (!options.lazy) {\n _effect()\n }\n return _effect\n}\n\nexport function track(target: object, key: PropertyKey) {\n if (!activeEffect) {\n return\n }\n let depsMap = targetMap.get(target)\n if (!depsMap) {\n depsMap = new Map()\n targetMap.set(target, depsMap)\n }\n let dep = depsMap.get(key)\n if (!dep) {\n dep = new Set()\n depsMap.set(key, dep)\n }\n if (!dep.has(activeEffect)) {\n dep.add(activeEffect)\n activeEffect.deps.push(dep)\n }\n}\n\nfunction scheduleEffect(ef: ReactiveEffect) {\n if (ef.scheduler) {\n ef.scheduler()\n return\n }\n if (batchDepth > 0) {\n batchedEffects.add(ef)\n return\n }\n ef()\n}\n\nexport function trigger(target: object, key: PropertyKey) {\n const depsMap = targetMap.get(target)\n if (!depsMap) {\n return\n }\n const effects = depsMap.get(key)\n if (!effects) {\n return\n }\n const effectsToRun = new Set<ReactiveEffect>()\n effects.forEach((ef) => {\n if (ef !== activeEffect) {\n effectsToRun.add(ef)\n }\n })\n effectsToRun.forEach(scheduleEffect)\n}\n\nexport function trackEffects(dep: Dep) {\n if (!activeEffect) {\n return\n }\n if (!dep.has(activeEffect)) {\n dep.add(activeEffect)\n activeEffect.deps.push(dep)\n }\n}\n\nexport function triggerEffects(dep: Dep) {\n // 迭代时复制依赖集合,避免遍历过程中被重新加入导致死循环。\n const effectsToRun = new Set(dep)\n effectsToRun.forEach(scheduleEffect)\n}\n\n// 导出队列调度工具,供 watch/watchEffect 等高层 API 复用同一批处理逻辑\nexport { queueJob }\n","export type MutationOp = 'set' | 'delete'\nexport type MutationKind = 'property' | 'array'\nexport interface MutationRecord {\n root: object\n kind: MutationKind\n op: MutationOp\n /**\n * 点路径(例如 `a.b.c`);当路径不可靠时为 undefined。\n */\n path?: string\n /**\n * 当路径不唯一时回退使用的顶层键列表。\n */\n fallbackTopKeys?: string[]\n}\n\ntype MutationRecorder = (record: MutationRecord) => void\n\nexport const mutationRecorders = new Set<MutationRecorder>()\n\nexport function addMutationRecorder(recorder: MutationRecorder) {\n mutationRecorders.add(recorder)\n}\n\nexport function removeMutationRecorder(recorder: MutationRecorder) {\n mutationRecorders.delete(recorder)\n}\n","import { mutationRecorders } from './mutation'\n\nexport const rawRootMap = new WeakMap<object, object>()\nexport const rawVersionMap = new WeakMap<object, number>()\nexport const rawParentMap = new WeakMap<object, { parent: object, key: PropertyKey }>()\nexport const rawParentsMap = new WeakMap<object, Map<object, Set<PropertyKey>>>()\nexport const rawMultiParentSet = new WeakSet<object>()\nexport const rawPathMap = new WeakMap<object, string>()\nexport const rootPatchNodesMap = new WeakMap<object, Set<object>>()\n\nfunction getRootPatchNodes(root: object) {\n let nodes = rootPatchNodesMap.get(root)\n if (!nodes) {\n nodes = new Set()\n rootPatchNodesMap.set(root, nodes)\n }\n return nodes\n}\n\nexport function indexPatchNode(root: object, node: object) {\n getRootPatchNodes(root).add(node)\n}\n\nexport function bumpRawVersion(target: object) {\n rawVersionMap.set(target, (rawVersionMap.get(target) ?? 0) + 1)\n}\n\nexport function getRawVersion(target: object) {\n return rawVersionMap.get(target) ?? 0\n}\n\nexport function bumpAncestorVersions(target: object) {\n const visited = new Set<object>()\n const stack: object[] = [target]\n for (let i = 0; i < 2000 && stack.length; i++) {\n const current = stack.pop()!\n const parents = rawParentsMap.get(current)\n if (!parents) {\n continue\n }\n for (const parent of parents.keys()) {\n if (visited.has(parent)) {\n continue\n }\n visited.add(parent)\n bumpRawVersion(parent)\n stack.push(parent)\n }\n }\n}\n\nfunction refreshPathUniqueness(child: object) {\n const parents = rawParentsMap.get(child)\n if (!parents) {\n rawMultiParentSet.delete(child)\n rawParentMap.delete(child)\n return\n }\n\n let uniqueParent: object | undefined\n let uniqueKey: PropertyKey | undefined\n let total = 0\n for (const [parent, keys] of parents) {\n for (const k of keys) {\n total += 1\n if (total > 1) {\n break\n }\n uniqueParent = parent\n uniqueKey = k\n }\n if (total > 1) {\n break\n }\n }\n\n if (total === 1 && uniqueParent && uniqueKey) {\n rawMultiParentSet.delete(child)\n rawParentMap.set(child, { parent: uniqueParent, key: uniqueKey })\n return\n }\n\n rawMultiParentSet.add(child)\n rawParentMap.delete(child)\n}\n\nexport function recordParentLink(child: object, parent: object, key: PropertyKey) {\n if (typeof key !== 'string') {\n rawMultiParentSet.add(child)\n rawParentMap.delete(child)\n return\n }\n\n if (mutationRecorders.size) {\n const root = rawRootMap.get(parent) ?? parent\n indexPatchNode(root, parent)\n indexPatchNode(root, child)\n }\n\n let parents = rawParentsMap.get(child)\n if (!parents) {\n parents = new Map()\n rawParentsMap.set(child, parents)\n }\n\n let keys = parents.get(parent)\n if (!keys) {\n keys = new Set()\n parents.set(parent, keys)\n }\n\n keys.add(key)\n refreshPathUniqueness(child)\n}\n\nexport function removeParentLink(child: object, parent: object, key: PropertyKey) {\n const parents = rawParentsMap.get(child)\n if (!parents) {\n return\n }\n const keys = parents.get(parent)\n if (!keys) {\n return\n }\n keys.delete(key)\n if (!keys.size) {\n parents.delete(parent)\n }\n if (!parents.size) {\n rawParentsMap.delete(child)\n }\n refreshPathUniqueness(child)\n}\n\nexport function resolvePathToTarget(root: object, target: object): string[] | undefined {\n if (target === root) {\n return []\n }\n if (rawMultiParentSet.has(target)) {\n return undefined\n }\n const segments: string[] = []\n let current: object = target\n for (let i = 0; i < 2000; i++) {\n if (current === root) {\n return segments.reverse()\n }\n if (rawMultiParentSet.has(current)) {\n return undefined\n }\n const info = rawParentMap.get(current)\n if (!info) {\n return undefined\n }\n if (typeof info.key !== 'string') {\n return undefined\n }\n segments.push(info.key)\n current = info.parent\n }\n return undefined\n}\n","export enum ReactiveFlags {\n IS_REACTIVE = '__r_isReactive',\n IS_READONLY = '__r_isReadonly',\n RAW = '__r_raw',\n SKIP = '__r_skip', // 标记此对象无需转换为响应式(用于 markRaw)\n}\n\nexport enum TargetType {\n INVALID = 0,\n COMMON = 1,\n}\n\nexport function isObject(value: unknown): value is object {\n return typeof value === 'object' && value !== null\n}\n\nexport function hasOwn(source: object, key: PropertyKey) {\n return Object.prototype.hasOwnProperty.call(source, key)\n}\n\nexport function toRawType(value: unknown) {\n return Object.prototype.toString.call(value).slice(8, -1)\n}\n\nfunction targetTypeMap(rawType: string) {\n switch (rawType) {\n case 'Object':\n case 'Array':\n return TargetType.COMMON\n case 'Map':\n case 'Set':\n case 'WeakMap':\n case 'WeakSet':\n // TODO: 后续如需支持集合响应式,需要引入专门的 collection handlers。\n return TargetType.INVALID\n default:\n return TargetType.INVALID\n }\n}\n\nexport function getTargetType(value: object) {\n return (value as any)[ReactiveFlags.SKIP]\n ? TargetType.INVALID\n : targetTypeMap(toRawType(value))\n}\n\n// 版本键(VERSION_KEY)表示“任意字段发生变化”,用于订阅整体版本避免深度遍历跟踪\nexport const VERSION_KEY: unique symbol = Symbol('wevu.version')\n\nexport function isArrayIndexKey(key: string) {\n if (!key) {\n return false\n }\n const code0 = key.charCodeAt(0)\n if (code0 < 48 || code0 > 57) {\n return false\n }\n const n = Number(key)\n return Number.isInteger(n) && n >= 0 && String(n) === key\n}\n\nexport function toRaw<T>(observed: T): T {\n return ((observed as any)?.[ReactiveFlags.RAW] ?? observed) as T\n}\n","export const reactiveMap = new WeakMap<object, any>()\nexport const rawMap = new WeakMap<any, object>()\nexport const shallowReactiveMap = new WeakMap<object, any>()\n","import type { MutationKind, MutationOp } from './reactive/mutation'\nimport { track, trigger } from './core'\nimport { mutationRecorders } from './reactive/mutation'\nimport {\n bumpAncestorVersions,\n bumpRawVersion,\n getRawVersion,\n rawMultiParentSet,\n rawParentsMap,\n rawPathMap,\n rawRootMap,\n rawVersionMap,\n recordParentLink,\n removeParentLink,\n resolvePathToTarget,\n} from './reactive/patchState'\nimport { getTargetType, hasOwn, isArrayIndexKey, isObject, ReactiveFlags, TargetType, toRaw, VERSION_KEY } from './reactive/shared'\nimport { rawMap, reactiveMap } from './reactive/state'\n\nexport { addMutationRecorder, removeMutationRecorder } from './reactive/mutation'\nexport type { MutationKind, MutationOp, MutationRecord } from './reactive/mutation'\nexport type { PrelinkReactiveTreeOptions } from './reactive/patch'\nexport { clearPatchIndices, prelinkReactiveTree, touchReactive } from './reactive/patch'\nexport { isShallowReactive, shallowReactive } from './reactive/shallow'\nexport { isObject, ReactiveFlags, toRaw } from './reactive/shared'\n\n/**\n * 读取响应式版本号(框架内部调试能力)。\n * @internal\n */\nexport function getReactiveVersion(target: object) {\n const raw = toRaw(target as any) as object\n return getRawVersion(raw)\n}\n\nfunction emitMutation(target: object, key: PropertyKey, op: MutationOp) {\n if (!mutationRecorders.size) {\n return\n }\n if (typeof key !== 'string') {\n return\n }\n if (key.startsWith('__r_')) {\n return\n }\n const root = rawRootMap.get(target) ?? target\n const isArray = Array.isArray(target)\n const kind: MutationKind = isArray && (key === 'length' || isArrayIndexKey(key)) ? 'array' : 'property'\n\n const baseSegments = resolvePathToTarget(root, target)\n if (!baseSegments) {\n // 路径不唯一/无法解析:尝试从父引用收集可能的顶层 key,供 patch 模式做“局部回退”。\n const fallback = new Set<string>()\n const parents = rawParentsMap.get(target)\n if (parents) {\n for (const [parent, keys] of parents) {\n const parentPath = rawPathMap.get(parent)\n const topFromParentPath = parentPath ? parentPath.split('.', 1)[0] : undefined\n const topFromResolve = !topFromParentPath\n ? (resolvePathToTarget(root, parent)?.[0] as string | undefined)\n : undefined\n for (const k of keys) {\n if (typeof k !== 'string') {\n continue\n }\n fallback.add(topFromParentPath ?? topFromResolve ?? k)\n }\n }\n }\n else {\n // 若目标就是 root 的直接子属性(未记录 parent link),仍可用 key 作为顶层回退\n fallback.add(key)\n }\n for (const recorder of mutationRecorders) {\n recorder({ root, kind, op, path: undefined, fallbackTopKeys: fallback.size ? [...fallback] : undefined })\n }\n return\n }\n\n // 若目标位于数组内部(例如 arr[0].x),直接回退到数组本身的路径,保持“数组整体替换”的策略。\n const arrayIndexPos = baseSegments.findIndex(seg => isArrayIndexKey(seg))\n if (arrayIndexPos !== -1) {\n const arrayPath = baseSegments.slice(0, arrayIndexPos).join('.')\n const path = arrayPath || undefined\n for (const recorder of mutationRecorders) {\n recorder({ root, kind: 'array', op, path })\n }\n return\n }\n\n const basePath = baseSegments.length ? baseSegments.join('.') : ''\n const path = kind === 'array' ? (basePath || undefined) : (basePath ? `${basePath}.${key}` : (key as string))\n\n for (const recorder of mutationRecorders) {\n recorder({\n root,\n kind,\n op,\n path,\n })\n }\n}\n\nconst mutableHandlers: ProxyHandler<any> = {\n get(target, key, receiver) {\n if (key === ReactiveFlags.IS_REACTIVE) {\n return true\n }\n if (key === ReactiveFlags.RAW) {\n return target\n }\n const res = Reflect.get(target, key, receiver)\n track(target, key)\n if (isObject(res)) {\n // 检查返回值是否被 markRaw 标记为跳过响应式\n if ((res as any)[ReactiveFlags.SKIP]) {\n return res\n }\n // 确保子对象的根引用与当前目标一致,便于版本号级联\n const parentRoot = rawRootMap.get(target) ?? target\n const childRaw = ((res as any)?.[ReactiveFlags.RAW] ?? res) as object\n if (!rawRootMap.has(childRaw)) {\n rawRootMap.set(childRaw, parentRoot)\n }\n recordParentLink(childRaw, target, key)\n const parentPath = rawPathMap.get(target)\n if (mutationRecorders.size && typeof key === 'string' && parentPath != null && !rawMultiParentSet.has(childRaw)) {\n const nextPath = parentPath ? `${parentPath}.${key}` : key\n rawPathMap.set(childRaw, nextPath)\n }\n // eslint-disable-next-line ts/no-use-before-define -- 避免递归调用的顺序警告\n return reactive(res)\n }\n return res\n },\n set(target, key, value, receiver) {\n const isArr = Array.isArray(target)\n const oldLength = isArr ? target.length : 0\n const oldValue = Reflect.get(target, key, receiver)\n const result = Reflect.set(target, key, value, receiver)\n if (!Object.is(oldValue, value)) {\n const oldRaw = isObject(oldValue) ? (((oldValue as any)?.[ReactiveFlags.RAW] ?? oldValue) as object) : undefined\n if (oldRaw) {\n removeParentLink(oldRaw, target, key)\n }\n if (isObject(value) && !(value as any)[ReactiveFlags.SKIP]) {\n const root = rawRootMap.get(target) ?? target\n const childRaw = ((value as any)?.[ReactiveFlags.RAW] ?? value) as object\n if (!rawRootMap.has(childRaw)) {\n rawRootMap.set(childRaw, root)\n }\n recordParentLink(childRaw, target, key)\n const parentPath = rawPathMap.get(target)\n if (mutationRecorders.size && typeof key === 'string' && parentPath != null && !rawMultiParentSet.has(childRaw)) {\n const nextPath = parentPath ? `${parentPath}.${key}` : key\n rawPathMap.set(childRaw, nextPath)\n }\n }\n trigger(target, key)\n if (isArr && typeof key === 'string' && isArrayIndexKey(key) && Number(key) >= oldLength) {\n trigger(target, 'length')\n }\n // 任意写操作都提升通用版本号\n trigger(target, VERSION_KEY)\n bumpRawVersion(target)\n bumpAncestorVersions(target)\n const root = rawRootMap.get(target)\n if (root && root !== target) {\n trigger(root, VERSION_KEY)\n bumpRawVersion(root)\n }\n emitMutation(target, key, 'set')\n }\n return result\n },\n deleteProperty(target, key) {\n const hadKey = hasOwn(target, key)\n const oldValue = hadKey ? (target as any)[key] : undefined\n const result = Reflect.deleteProperty(target, key)\n if (hadKey && result) {\n const oldRaw = isObject(oldValue) ? (((oldValue as any)?.[ReactiveFlags.RAW] ?? oldValue) as object) : undefined\n if (oldRaw) {\n removeParentLink(oldRaw, target, key)\n }\n trigger(target, key)\n // 删除同样提升通用版本号\n trigger(target, VERSION_KEY)\n bumpRawVersion(target)\n bumpAncestorVersions(target)\n const root = rawRootMap.get(target)\n if (root && root !== target) {\n trigger(root, VERSION_KEY)\n bumpRawVersion(root)\n }\n emitMutation(target, key, 'delete')\n }\n return result\n },\n ownKeys(target) {\n track(target, Symbol.iterator)\n // 遍历时也订阅通用版本号,确保新增/删除键可触发\n track(target, VERSION_KEY)\n return Reflect.ownKeys(target)\n },\n}\n\nexport function reactive<T extends object>(target: T): T {\n if (!isObject(target)) {\n return target\n }\n if ((target as any)[ReactiveFlags.IS_REACTIVE]) {\n return target\n }\n const existingProxy = reactiveMap.get(target)\n if (existingProxy) {\n return existingProxy\n }\n if (getTargetType(target) === TargetType.INVALID) {\n return target\n }\n const proxy = new Proxy(target, mutableHandlers)\n reactiveMap.set(target, proxy)\n rawMap.set(proxy, target)\n if (!rawVersionMap.has(target)) {\n rawVersionMap.set(target, 0)\n }\n // 新的原始对象在被观察时初始化根节点映射\n if (!rawRootMap.has(target)) {\n rawRootMap.set(target, target)\n }\n return proxy\n}\n\nexport function isReactive(value: unknown): boolean {\n return Boolean(value && (value as any)[ReactiveFlags.IS_REACTIVE])\n}\n\nexport function convertToReactive<T>(value: T): T {\n return isObject(value) ? reactive(value as any) : value\n}\n\n// ============================================================================\n// 标记对象跳过响应式转换(markRaw)\n// ============================================================================\n\n/**\n * 标记对象为“原始”状态,后续不会被转换为响应式,返回原对象本身。\n *\n * @param value 需要标记的对象\n * @returns 带有跳过标记的原对象\n *\n * @example\n * ```ts\n * const foo = markRaw({\n * nested: {}\n * })\n *\n * const state = reactive({\n * foo\n * })\n *\n * state.foo // 不是响应式对象\n * ```\n */\nexport function markRaw<T extends object>(value: T): T {\n if (!isObject(value)) {\n return value\n }\n Object.defineProperty(value, ReactiveFlags.SKIP, {\n value: true,\n configurable: true,\n enumerable: false,\n writable: true,\n })\n return value\n}\n\n/**\n * 判断某个值是否被标记为原始(即不应转换为响应式)。\n *\n * @param value 待检测的值\n * @returns 若含有跳过标记则返回 true\n */\nexport function isRaw(value: unknown): boolean {\n return isObject(value) && ReactiveFlags.SKIP in (value as object)\n}\n","import type { Ref as VueRef, ShallowRef as VueShallowRef } from '../vue-types'\nimport type { ComputedRef, WritableComputedRef } from './computed'\nimport type { Dep } from './core'\nimport { trackEffects, triggerEffects } from './core'\nimport { convertToReactive, markRaw } from './reactive'\n\n// 类型对齐 @vue/reactivity.Ref:\n// - 用于 Volar 模板自动解包(UnwrapRef 依赖 RefSymbol 品牌标记)。\n// - 运行时仍使用 wevu 自己的 ref 实现,不依赖 Vue。\nexport type Ref<T = any, S = T> = VueRef<T, S>\nexport type ShallowRef<T = any> = VueShallowRef<T>\nexport type MaybeRef<T = any> = T | Ref<T> | ShallowRef<T> | WritableComputedRef<T>\nexport type MaybeRefOrGetter<T = any> = MaybeRef<T> | ComputedRef<T> | (() => T)\n\nexport const RefFlag = '__v_isRef' as const\n\nexport function markAsRef<T extends object>(target: T): T {\n try {\n Object.defineProperty(target, RefFlag, {\n value: true,\n configurable: true,\n })\n }\n catch {\n ;(target as any)[RefFlag] = true\n }\n return target\n}\n\nexport function isRef(value: unknown): value is Ref<any> {\n return Boolean(value && typeof value === 'object' && (value as any)[RefFlag] === true)\n}\n\nclass RefImpl<T> {\n private _value: T\n private _rawValue: T\n public dep: Dep | undefined\n constructor(value: T) {\n markAsRef(this)\n this._rawValue = value\n this._value = convertToReactive(value)\n }\n\n get value(): T {\n if (!this.dep) {\n this.dep = new Set()\n }\n trackEffects(this.dep)\n return this._value\n }\n\n set value(newValue: T) {\n if (!Object.is(newValue, this._rawValue)) {\n this._rawValue = newValue\n this._value = convertToReactive(newValue)\n if (this.dep) {\n triggerEffects(this.dep)\n }\n }\n }\n}\n\nexport function ref<T = any>(): Ref<T | undefined>\nexport function ref<T>(value: T): Ref<T>\nexport function ref<T>(value?: T): Ref<T | undefined> {\n if (isRef(value)) {\n return value\n }\n return markRaw(new RefImpl(value as T | undefined)) as any\n}\n\nexport function unref<T>(value: MaybeRef<T> | ComputedRef<T>): T {\n return isRef(value) ? value.value : value\n}\n\nexport function toValue<T>(source: MaybeRefOrGetter<T>): T {\n return typeof source === 'function' ? (source as () => T)() : unref(source)\n}\n\n/**\n * 自定义 ref 工厂:用于创建可显式控制 track/trigger 的自定义 ref\n */\nexport type CustomRefFactory<T> = (\n track: () => void,\n trigger: () => void,\n) => {\n get: () => T\n set: (value: T) => void\n}\n\nexport interface CustomRefOptions<T> {\n get: () => T\n set: (value: T) => void\n}\n\nexport type CustomRefSource<T> = CustomRefFactory<T> | CustomRefOptions<T>\n\nclass CustomRefImpl<T> {\n private _getValue: () => T\n private _setValue: (value: T) => void\n public dep: Dep | undefined\n\n constructor(factory: CustomRefSource<T>, defaultValue?: T) {\n markAsRef(this)\n const fallbackValue = defaultValue\n const track = () => {\n if (!this.dep) {\n this.dep = new Set()\n }\n trackEffects(this.dep)\n }\n const trigger = () => {\n if (this.dep) {\n triggerEffects(this.dep)\n }\n }\n\n const withFallback = (value: T) => (value === undefined && fallbackValue !== undefined ? fallbackValue as T : value)\n\n if (typeof factory === 'function') {\n const handlers = factory(track, trigger)\n this._getValue = () => withFallback(handlers.get())\n this._setValue = value => handlers.set(value)\n return\n }\n\n const handlers = factory\n this._getValue = () => {\n track()\n return withFallback(handlers.get())\n }\n this._setValue = (value: T) => {\n handlers.set(value)\n trigger()\n }\n }\n\n get value(): T {\n return this._getValue()\n }\n\n set value(newValue: T) {\n this._setValue(newValue)\n }\n}\n\nexport function customRef<T>(factory: CustomRefSource<T>, defaultValue?: T): Ref<T> {\n return markRaw(new CustomRefImpl(factory, defaultValue)) as any\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as ensurePageShareMenusOnSetup, c as getCurrentSetupContext, f as getCurrentMiniProgramGlobalRouter, g as getMiniProgramGlobalObject, h as getCurrentMiniProgramRuntimeCapabilities, i as ensurePageHookOnInstance, l as pushHook, m as getCurrentMiniProgramPages, n as callHookList, o as ensureSinglePageHookOnInstance, s as getCurrentInstance, t as assertInSetup, v as supportsCurrentMiniProgramRuntimeCapability } from "./base-
|
|
1
|
+
import { a as ensurePageShareMenusOnSetup, c as getCurrentSetupContext, f as getCurrentMiniProgramGlobalRouter, g as getMiniProgramGlobalObject, h as getCurrentMiniProgramRuntimeCapabilities, i as ensurePageHookOnInstance, l as pushHook, m as getCurrentMiniProgramPages, n as callHookList, o as ensureSinglePageHookOnInstance, s as getCurrentInstance, t as assertInSetup, v as supportsCurrentMiniProgramRuntimeCapability } from "./base-CYkvI7w8.mjs";
|
|
2
2
|
import { WEVU_APP_PROVIDES_KEY, WEVU_IS_APP_INSTANCE_KEY, WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY, WEVU_PARENT_INSTANCE_KEY, WEVU_PROVIDES_KEY, WEVU_RUNTIME_APP_KEY } from "@weapp-core/constants";
|
|
3
3
|
|
|
4
4
|
//#region src/runtime/hooks/register.ts
|
|
@@ -354,6 +354,65 @@ function injectGlobal(key, defaultValue) {
|
|
|
354
354
|
throw new Error(`injectGlobal():未找到对应 key 的 provider:${String(key)}`);
|
|
355
355
|
}
|
|
356
356
|
|
|
357
|
+
//#endregion
|
|
358
|
+
//#region src/router/routeSync.ts
|
|
359
|
+
const ROUTE_SYNC_NATIVE_METHODS = [
|
|
360
|
+
"switchTab",
|
|
361
|
+
"reLaunch",
|
|
362
|
+
"redirectTo",
|
|
363
|
+
"navigateTo",
|
|
364
|
+
"navigateBack"
|
|
365
|
+
];
|
|
366
|
+
const routeStateSyncHandlers = /* @__PURE__ */ new Set();
|
|
367
|
+
const patchedNativeRouters = /* @__PURE__ */ new WeakSet();
|
|
368
|
+
function registerRouteStateSyncHandler(handler) {
|
|
369
|
+
routeStateSyncHandlers.add(handler);
|
|
370
|
+
return () => {
|
|
371
|
+
routeStateSyncHandlers.delete(handler);
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
function notifyRouteStateSync(payload) {
|
|
375
|
+
for (const handler of routeStateSyncHandlers) try {
|
|
376
|
+
handler(payload);
|
|
377
|
+
} catch (_unused) {}
|
|
378
|
+
}
|
|
379
|
+
function createNativeRouteStateSyncPayload(methodName, option) {
|
|
380
|
+
if (methodName === "navigateBack") return;
|
|
381
|
+
if (option && typeof option === "object") {
|
|
382
|
+
const url = option.url;
|
|
383
|
+
if (typeof url === "string") return { url };
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
function installRouteStateSyncOnNativeRouter(nativeRouter) {
|
|
387
|
+
if (!nativeRouter || typeof nativeRouter !== "object") return;
|
|
388
|
+
const router = nativeRouter;
|
|
389
|
+
if (patchedNativeRouters.has(router)) return;
|
|
390
|
+
patchedNativeRouters.add(router);
|
|
391
|
+
for (const methodName of ROUTE_SYNC_NATIVE_METHODS) {
|
|
392
|
+
const original = router[methodName];
|
|
393
|
+
if (typeof original !== "function") continue;
|
|
394
|
+
router[methodName] = function routeStateSyncNativeRouterMethod(option, ...args) {
|
|
395
|
+
let synced = false;
|
|
396
|
+
const syncRouteState = () => {
|
|
397
|
+
if (synced) return;
|
|
398
|
+
synced = true;
|
|
399
|
+
notifyRouteStateSync(createNativeRouteStateSyncPayload(methodName, option));
|
|
400
|
+
};
|
|
401
|
+
const nextOption = option && typeof option === "object" ? {
|
|
402
|
+
...option,
|
|
403
|
+
success: (...successArgs) => {
|
|
404
|
+
syncRouteState();
|
|
405
|
+
const originalSuccess = option.success;
|
|
406
|
+
return typeof originalSuccess === "function" ? originalSuccess(...successArgs) : void 0;
|
|
407
|
+
}
|
|
408
|
+
} : option;
|
|
409
|
+
const result = original.call(this, nextOption, ...args);
|
|
410
|
+
if (result && typeof result.then === "function") result.then(syncRouteState, () => {});
|
|
411
|
+
return result;
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
|
|
357
416
|
//#endregion
|
|
358
417
|
//#region src/routerInternal/path.ts
|
|
359
418
|
function normalizePathSegments(path) {
|
|
@@ -617,9 +676,14 @@ function createScopedRuntimeRouter(rawRouter, basePath) {
|
|
|
617
676
|
const rawMethod = rawRouter[methodName];
|
|
618
677
|
if (methodName === "navigateBack" || !option || typeof option !== "object") return rawMethod.call(rawRouter, option);
|
|
619
678
|
const nextUrl = typeof option.url === "string" ? resolveScopedRouterUrl(option.url, basePath) : option.url;
|
|
620
|
-
const
|
|
679
|
+
const originalSuccess = option.success;
|
|
680
|
+
const nextOption = {
|
|
621
681
|
...option,
|
|
622
|
-
url: nextUrl
|
|
682
|
+
url: nextUrl,
|
|
683
|
+
success: (...args) => {
|
|
684
|
+
if (typeof nextUrl === "string") notifyRouteStateSync({ url: nextUrl });
|
|
685
|
+
return typeof originalSuccess === "function" ? originalSuccess(...args) : void 0;
|
|
686
|
+
}
|
|
623
687
|
};
|
|
624
688
|
return rawMethod.call(rawRouter, nextOption);
|
|
625
689
|
};
|
|
@@ -669,5 +733,5 @@ function useNativePageRouter() {
|
|
|
669
733
|
}
|
|
670
734
|
|
|
671
735
|
//#endregion
|
|
672
|
-
export {
|
|
673
|
-
//# sourceMappingURL=router-
|
|
736
|
+
export { onShow as $, attachRuntimeProvideContext as A, onLoad as B, ensureMiniProgramGlobalPatched as C, resolvePageOptions as D, releaseCurrentPageInstance as E, onAttached as F, onPullDownRefresh as G, onMoved as H, onDetached as I, onResize as J, onReachBottom as K, onError as L, setRuntimeAppProvidedValue as M, setGlobalProvidedValue as N, runInPageScrollHook as O, onAddToFavorites as P, onShareTimeline as Q, onHide as R, bindCurrentPageInstance as S, getCurrentPageInstance as T, onPageNotFound as U, onMemoryWarning as V, onPageScroll as W, onSaveExitState as X, onRouteDone as Y, onShareAppMessage as Z, hasInjectionContext as _, resolveCurrentRoute as a, provide as b, normalizeRouteParams as c, createAbsoluteRoutePath as d, onTabItemTap as et, isDynamicRoutePath as f, registerRouteStateSyncHandler as g, notifyRouteStateSync as h, parsePathInput as i, ensureRuntimeAppProvides as j, attachRuntimeLayoutProvideContext as k, parseQuery as l, installRouteStateSyncOnNativeRouter as m, useNativeRouter as n, onUnhandledRejection as nt, normalizeHash as o, resolvePath as p, onReady as q, createRouteLocation as r, onUnload as rt, normalizeQuery as s, useNativePageRouter as t, onThemeChange as tt, stringifyQuery as u, inject as v, ensurePageShareMenus as w, provideGlobal as x, injectGlobal as y, onLaunch as z };
|
|
737
|
+
//# sourceMappingURL=router-BD-ovqV2.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router-BD-ovqV2.mjs","names":[],"sources":["../../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/router/routeSync.ts","../../src/routerInternal/path.ts","../../src/routerInternal/query.ts","../../src/routerInternal/location.ts","../../src/runtime/vueCompat/router.ts"],"sourcesContent":["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","import type { RouteLocationNormalizedLoaded } from './types'\n\nexport interface RouteStateSyncPayload {\n route?: RouteLocationNormalizedLoaded\n url?: string\n}\n\ntype RouteStateSyncHandler = (payload?: RouteStateSyncPayload) => void\ntype NativeRouterMethodName = 'switchTab' | 'reLaunch' | 'redirectTo' | 'navigateTo' | 'navigateBack'\n\nconst ROUTE_SYNC_NATIVE_METHODS: readonly NativeRouterMethodName[] = ['switchTab', 'reLaunch', 'redirectTo', 'navigateTo', 'navigateBack']\nconst routeStateSyncHandlers = new Set<RouteStateSyncHandler>()\nconst patchedNativeRouters = new WeakSet<Record<string, any>>()\n\nexport function registerRouteStateSyncHandler(handler: RouteStateSyncHandler): () => void {\n routeStateSyncHandlers.add(handler)\n return () => {\n routeStateSyncHandlers.delete(handler)\n }\n}\n\nexport function notifyRouteStateSync(payload?: RouteStateSyncPayload) {\n for (const handler of routeStateSyncHandlers) {\n try {\n handler(payload)\n }\n catch {\n // 忽略单个 route 订阅者异常,避免阻塞原生导航成功回调。\n }\n }\n}\n\nfunction createNativeRouteStateSyncPayload(methodName: NativeRouterMethodName, option: unknown): RouteStateSyncPayload | undefined {\n if (methodName === 'navigateBack') {\n return undefined\n }\n if (option && typeof option === 'object') {\n const url = (option as Record<string, unknown>).url\n if (typeof url === 'string') {\n return { url }\n }\n }\n return undefined\n}\n\nexport function installRouteStateSyncOnNativeRouter(nativeRouter: unknown) {\n if (!nativeRouter || typeof nativeRouter !== 'object') {\n return\n }\n const router = nativeRouter as Record<string, any>\n if (patchedNativeRouters.has(router)) {\n return\n }\n patchedNativeRouters.add(router)\n\n for (const methodName of ROUTE_SYNC_NATIVE_METHODS) {\n const original = router[methodName]\n if (typeof original !== 'function') {\n continue\n }\n\n router[methodName] = function routeStateSyncNativeRouterMethod(this: unknown, option?: unknown, ...args: any[]) {\n let synced = false\n const syncRouteState = () => {\n if (synced) {\n return\n }\n synced = true\n notifyRouteStateSync(createNativeRouteStateSyncPayload(methodName, option))\n }\n\n const nextOption = option && typeof option === 'object'\n ? {\n ...(option as Record<string, any>),\n success: (...successArgs: any[]) => {\n syncRouteState()\n const originalSuccess = (option as Record<string, any>).success\n return typeof originalSuccess === 'function'\n ? originalSuccess(...successArgs)\n : undefined\n },\n }\n : option\n\n const result = original.call(this, nextOption, ...args)\n if (result && typeof (result as PromiseLike<unknown>).then === 'function') {\n ;(result as PromiseLike<unknown>).then(syncRouteState, () => {})\n }\n return result\n }\n }\n}\n","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 { notifyRouteStateSync } from '../../router/routeSync'\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 originalSuccess = option.success\n const nextOption = {\n ...option,\n url: nextUrl,\n success: (...args: any[]) => {\n if (typeof nextUrl === 'string') {\n notifyRouteStateSync({ url: nextUrl })\n }\n return typeof originalSuccess === 'function'\n ? originalSuccess(...args)\n : undefined\n },\n }\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,6 +1,6 @@
|
|
|
1
|
-
import { d as reactive } from "./ref-
|
|
2
|
-
import { c as getCurrentSetupContext, x as readonly } from "./base-
|
|
3
|
-
import {
|
|
1
|
+
import { d as reactive } from "./ref-DRZC3Kc5.mjs";
|
|
2
|
+
import { c as getCurrentSetupContext, g as getMiniProgramGlobalObject, x as readonly } from "./base-CYkvI7w8.mjs";
|
|
3
|
+
import { $ as onShow, B as onLoad, Y as onRouteDone, a as resolveCurrentRoute, c as normalizeRouteParams, d as createAbsoluteRoutePath, f as isDynamicRoutePath, g as registerRouteStateSyncHandler, h as notifyRouteStateSync, i as parsePathInput, l as parseQuery, m as installRouteStateSyncOnNativeRouter, n as useNativeRouter$1, o as normalizeHash, p as resolvePath, q as onReady, r as createRouteLocation, rt as onUnload, s as normalizeQuery, t as useNativePageRouter$1, u as stringifyQuery, x as provideGlobal, y as injectGlobal } from "./router-BD-ovqV2.mjs";
|
|
4
4
|
|
|
5
5
|
//#region src/routerInternal/params.ts
|
|
6
6
|
const PATH_PARAM_TOKEN_RE = /^:(\w+)(?:\([^)]*\))?([+*?])?$/;
|
|
@@ -761,6 +761,7 @@ function createNavigationResultController(options) {
|
|
|
761
761
|
return rejectOnError && shouldEmitNavigationError(failure);
|
|
762
762
|
}
|
|
763
763
|
async function settleNavigationResult(result) {
|
|
764
|
+
if (!result.failure && result.to) notifyRouteStateSync({ route: result.to });
|
|
764
765
|
await emitNavigationAfterEach(result);
|
|
765
766
|
if (result.failure && shouldRejectNavigationFailure(result.failure)) throw result.failure;
|
|
766
767
|
return result.failure;
|
|
@@ -923,7 +924,7 @@ function createNavigationApi(options) {
|
|
|
923
924
|
} catch (error) {
|
|
924
925
|
return settleNavigationResult(createNavigationRunResult("push", from, void 0, createNavigationFailure(NavigationFailureType.unknown, void 0, from, error)));
|
|
925
926
|
}
|
|
926
|
-
|
|
927
|
+
const result = await navigateWithTarget({
|
|
927
928
|
mode: "push",
|
|
928
929
|
target,
|
|
929
930
|
from,
|
|
@@ -935,7 +936,8 @@ function createNavigationApi(options) {
|
|
|
935
936
|
maxRedirects,
|
|
936
937
|
tabBarPathSet,
|
|
937
938
|
resolveWithCodec
|
|
938
|
-
})
|
|
939
|
+
});
|
|
940
|
+
return settleNavigationResult(result);
|
|
939
941
|
}
|
|
940
942
|
async function replace(to) {
|
|
941
943
|
const from = snapshotRouteLocation(route);
|
|
@@ -945,7 +947,7 @@ function createNavigationApi(options) {
|
|
|
945
947
|
} catch (error) {
|
|
946
948
|
return settleNavigationResult(createNavigationRunResult("replace", from, void 0, createNavigationFailure(NavigationFailureType.unknown, void 0, from, error)));
|
|
947
949
|
}
|
|
948
|
-
|
|
950
|
+
const result = await navigateWithTarget({
|
|
949
951
|
mode: "replace",
|
|
950
952
|
target,
|
|
951
953
|
from,
|
|
@@ -957,7 +959,8 @@ function createNavigationApi(options) {
|
|
|
957
959
|
maxRedirects,
|
|
958
960
|
tabBarPathSet,
|
|
959
961
|
resolveWithCodec
|
|
960
|
-
})
|
|
962
|
+
});
|
|
963
|
+
return settleNavigationResult(result);
|
|
961
964
|
}
|
|
962
965
|
async function back(delta = 1) {
|
|
963
966
|
const from = snapshotRouteLocation(route);
|
|
@@ -976,7 +979,8 @@ function createNavigationApi(options) {
|
|
|
976
979
|
if (beforeResolveResult.status === "failure") return settleNavigationResult(createNavigationRunResult("back", from, void 0, beforeResolveResult.failure));
|
|
977
980
|
if (beforeResolveResult.status === "redirect") return settleNavigationResult(createNavigationRunResult("back", from, void 0, createNavigationFailure(NavigationFailureType.aborted, void 0, from, "Redirect is not supported in back navigation guards")));
|
|
978
981
|
const result = await executeNavigationMethod(nativeRouter.navigateBack, { delta }, void 0, from);
|
|
979
|
-
|
|
982
|
+
const runResult = isNavigationFailure(result) ? createNavigationRunResult("back", from, void 0, result) : createNavigationRunResult("back", from);
|
|
983
|
+
return settleNavigationResult(runResult);
|
|
980
984
|
}
|
|
981
985
|
async function go(delta) {
|
|
982
986
|
if (delta < 0) return back(Math.abs(delta));
|
|
@@ -1101,7 +1105,7 @@ function applyRouteState(routeState, nextRoute) {
|
|
|
1101
1105
|
if (nextRoute.redirectedFrom === void 0) delete routeState.redirectedFrom;
|
|
1102
1106
|
else routeState.redirectedFrom = cloneRouteLocationRedirectedFrom(nextRoute.redirectedFrom);
|
|
1103
1107
|
}
|
|
1104
|
-
function
|
|
1108
|
+
function createRouteStateController(options = {}) {
|
|
1105
1109
|
var _options$resolveRoute;
|
|
1106
1110
|
const setupContext = getCurrentSetupContext();
|
|
1107
1111
|
if (!setupContext) throw new Error("useRoute() 必须在 setup() 的同步阶段调用");
|
|
@@ -1119,8 +1123,9 @@ function useRoute(options = {}) {
|
|
|
1119
1123
|
params: cloneRouteParams(currentRoute.params)
|
|
1120
1124
|
});
|
|
1121
1125
|
applyRouteState(routeState, currentRoute);
|
|
1122
|
-
function syncRoute(queryOverride) {
|
|
1123
|
-
|
|
1126
|
+
function syncRoute(queryOverride, routeOverride) {
|
|
1127
|
+
const nextRoute = routeOverride ? resolveRoute(routeOverride) : resolveRoute(resolveCurrentRoute(queryOverride, fallbackPage));
|
|
1128
|
+
applyRouteState(routeState, nextRoute);
|
|
1124
1129
|
}
|
|
1125
1130
|
onLoad((query) => {
|
|
1126
1131
|
syncRoute(query);
|
|
@@ -1134,7 +1139,24 @@ function useRoute(options = {}) {
|
|
|
1134
1139
|
onRouteDone(() => {
|
|
1135
1140
|
syncRoute();
|
|
1136
1141
|
});
|
|
1137
|
-
|
|
1142
|
+
const unregisterRouteStateSync = registerRouteStateSyncHandler((payload) => {
|
|
1143
|
+
if (payload === null || payload === void 0 ? void 0 : payload.route) {
|
|
1144
|
+
syncRoute(void 0, payload.route);
|
|
1145
|
+
return;
|
|
1146
|
+
}
|
|
1147
|
+
if (payload === null || payload === void 0 ? void 0 : payload.url) {
|
|
1148
|
+
syncRoute(void 0, resolveRouteLocation(payload.url, routeState.path));
|
|
1149
|
+
return;
|
|
1150
|
+
}
|
|
1151
|
+
syncRoute();
|
|
1152
|
+
});
|
|
1153
|
+
onUnload(() => {
|
|
1154
|
+
unregisterRouteStateSync();
|
|
1155
|
+
});
|
|
1156
|
+
return { route: readonly(routeState) };
|
|
1157
|
+
}
|
|
1158
|
+
function useRoute(options = {}) {
|
|
1159
|
+
return createRouteStateController(options).route;
|
|
1138
1160
|
}
|
|
1139
1161
|
/**
|
|
1140
1162
|
* @description 获取当前组件路径语义的原生 Router
|
|
@@ -1157,6 +1179,7 @@ function useNativePageRouter() {
|
|
|
1157
1179
|
function createRouter(options = {}) {
|
|
1158
1180
|
var _options$maxRedirects, _options$paramsMode, _options$rejectOnErro, _options$parseQuery, _options$stringifyQue, _options$tabBarEntrie;
|
|
1159
1181
|
const nativeRouter = useNativeRouter();
|
|
1182
|
+
installRouteStateSyncOnNativeRouter(getMiniProgramGlobalObject());
|
|
1160
1183
|
const beforeEachGuards = /* @__PURE__ */ new Set();
|
|
1161
1184
|
const beforeResolveGuards = /* @__PURE__ */ new Set();
|
|
1162
1185
|
const afterEachHooks = /* @__PURE__ */ new Set();
|
|
@@ -1195,7 +1218,7 @@ function createRouter(options = {}) {
|
|
|
1195
1218
|
function resolveWithCodec(to, currentPath) {
|
|
1196
1219
|
return enrichRouteRecordState(resolveRouteLocation(typeof to === "string" ? to : resolveNamedRouteLocation(to, namedRouteLookup, paramsMode), currentPath, routeResolveCodec));
|
|
1197
1220
|
}
|
|
1198
|
-
const route =
|
|
1221
|
+
const route = createRouteStateController({ resolveRoute: enrichRouteRecordState }).route;
|
|
1199
1222
|
function resolve(to) {
|
|
1200
1223
|
return resolveWithCodec(to, route.path);
|
|
1201
1224
|
}
|