wevu 6.16.6 → 6.16.7

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.
@@ -1 +1 @@
1
- {"version":3,"file":"router.mjs","names":["useNativeRouterInternal","useNativePageRouterInternal"],"sources":["../../src/routerInternal/params.ts","../../src/routerInternal/matching.ts","../../src/routerInternal/recordsWarnings.ts","../../src/routerInternal/records.ts","../../src/routerInternal/snapshots.ts","../../src/router/instance.ts","../../src/router/types.ts","../../src/router/navigationCore.ts","../../src/router/navigationResult.ts","../../src/router/navigationTargetHelpers.ts","../../src/router/navigationTarget.ts","../../src/router/navigationApi.ts","../../src/router/resolve.ts","../../src/router/routeRegistry.ts","../../src/router/useRoute.ts","../../src/router/createRouter.ts","../../src/router/useRouter.ts"],"sourcesContent":["import type {\n RouteLocationRaw,\n RouteParams,\n RouteParamsMode,\n RouteParamValue,\n} from '../router'\nimport type {\n NamedRouteLookup,\n NamedRoutePathResolveResult,\n PathParamToken,\n} from './types'\nimport { normalizeRouteParams } from './query'\n\nconst PATH_PARAM_TOKEN_RE = /^:(\\w+)(?:\\([^)]*\\))?([+*?])?$/\n\nexport function parsePathParamToken(segment: string): PathParamToken | undefined {\n const match = PATH_PARAM_TOKEN_RE.exec(segment)\n if (!match) {\n return undefined\n }\n\n return {\n key: match[1],\n modifier: (match[2] ?? '') as PathParamToken['modifier'],\n }\n}\n\nfunction normalizePathParamValues(value: RouteParamValue | RouteParamValue[] | undefined): RouteParamValue[] {\n if (value === undefined) {\n return []\n }\n if (Array.isArray(value)) {\n return value\n }\n return [value]\n}\n\nfunction stringifyPathParamSegment(value: RouteParamValue): string {\n return encodeURIComponent(value)\n}\n\nexport function decodeRouteParamSegment(value: string): string {\n try {\n return decodeURIComponent(value)\n }\n catch {\n return value\n }\n}\n\nfunction resolveNamedRoutePath(pathTemplate: string, params: RouteParams, routeName: string): NamedRoutePathResolveResult {\n const resolvedSegments: string[] = []\n const consumedKeys = new Set<string>()\n for (const rawSegment of pathTemplate.split('/')) {\n if (!rawSegment) {\n continue\n }\n\n const token = parsePathParamToken(rawSegment)\n if (!token) {\n resolvedSegments.push(rawSegment)\n continue\n }\n\n const values = normalizePathParamValues(params[token.key])\n if (token.modifier === '') {\n if (values.length !== 1) {\n throw new Error(`Missing required param \"${token.key}\" for named route \"${routeName}\"`)\n }\n consumedKeys.add(token.key)\n resolvedSegments.push(stringifyPathParamSegment(values[0]))\n continue\n }\n\n if (token.modifier === '?') {\n if (values.length === 0) {\n continue\n }\n if (values.length > 1) {\n throw new Error(`Param \"${token.key}\" for named route \"${routeName}\" must be a single value`)\n }\n consumedKeys.add(token.key)\n resolvedSegments.push(stringifyPathParamSegment(values[0]))\n continue\n }\n\n if (token.modifier === '+') {\n if (values.length === 0) {\n throw new Error(`Missing required repeatable param \"${token.key}\" for named route \"${routeName}\"`)\n }\n consumedKeys.add(token.key)\n for (const value of values) {\n resolvedSegments.push(stringifyPathParamSegment(value))\n }\n continue\n }\n\n if (values.length > 0) {\n consumedKeys.add(token.key)\n }\n for (const value of values) {\n resolvedSegments.push(stringifyPathParamSegment(value))\n }\n }\n\n return {\n path: resolvedSegments.join('/'),\n consumedKeys,\n }\n}\n\nfunction hasNonEmptyRouteParamValue(value: RouteParamValue | RouteParamValue[] | undefined): boolean {\n if (value === undefined) {\n return false\n }\n if (Array.isArray(value)) {\n return value.length > 0\n }\n return true\n}\n\nfunction assertNoUnexpectedNamedRouteParams(\n params: RouteParams,\n consumedKeys: ReadonlySet<string>,\n routeName: string,\n) {\n const unexpectedKeys = Object.keys(params)\n .filter(key => !consumedKeys.has(key))\n .filter(key => hasNonEmptyRouteParamValue(params[key]))\n\n if (unexpectedKeys.length === 0) {\n return\n }\n\n throw new Error(`Unexpected params for named route \"${routeName}\": ${unexpectedKeys.join(', ')}`)\n}\n\nexport function resolveNamedRouteLocation(\n to: Extract<RouteLocationRaw, Record<string, unknown>>,\n lookup: NamedRouteLookup,\n paramsMode: RouteParamsMode,\n): Extract<RouteLocationRaw, Record<string, unknown>> {\n const routeName = to.name\n if (typeof routeName !== 'string' || !routeName) {\n return to\n }\n if (to.path !== undefined || to.fullPath !== undefined) {\n return to\n }\n\n const routeRecord = lookup.recordByName.get(routeName)\n if (!routeRecord) {\n throw new Error(`Named route \"${routeName}\" is not defined in createRouter({ routes | namedRoutes })`)\n }\n\n const params = to.params\n ? normalizeRouteParams(to.params)\n : {}\n const resolvedResult = resolveNamedRoutePath(routeRecord.path, params, routeName)\n if (paramsMode === 'strict') {\n assertNoUnexpectedNamedRouteParams(params, resolvedResult.consumedKeys, routeName)\n }\n\n return {\n ...to,\n path: resolvedResult.path ? `/${resolvedResult.path}` : '/',\n params,\n }\n}\n","import type {\n RouteLocationNormalizedLoaded,\n RouteMeta,\n RouteParams,\n} from '../router'\nimport type {\n MatchedRouteRecordResolveResult,\n NamedRouteLookup,\n RouteRecordNormalized,\n} from './types'\nimport { decodeRouteParamSegment, parsePathParamToken } from './params'\nimport { isDynamicRoutePath } from './path'\n\nfunction splitRoutePathSegments(path: string): string[] {\n return path.split('/').filter(Boolean)\n}\n\nfunction listRouteRecordMatchPaths(record: RouteRecordNormalized): readonly string[] {\n return [record.path, ...record.aliasPaths]\n}\n\nfunction resolveMatchedRouteRecordChain(\n record: RouteRecordNormalized,\n lookup: NamedRouteLookup,\n): RouteRecordNormalized[] {\n const matchedRecords: RouteRecordNormalized[] = []\n const visitedNames = new Set<string>()\n let currentRecord: RouteRecordNormalized | undefined = record\n\n while (currentRecord) {\n if (visitedNames.has(currentRecord.name)) {\n break\n }\n visitedNames.add(currentRecord.name)\n matchedRecords.unshift(currentRecord)\n if (!currentRecord.parentName) {\n break\n }\n currentRecord = lookup.recordByName.get(currentRecord.parentName)\n }\n\n return matchedRecords\n}\n\nexport function mergeMatchedRouteMeta(matchedRecords: readonly RouteRecordNormalized[]): RouteMeta | undefined {\n let mergedRouteMeta: RouteMeta | undefined\n for (const matchedRecord of matchedRecords) {\n if (!matchedRecord.meta) {\n continue\n }\n if (!mergedRouteMeta) {\n mergedRouteMeta = {}\n }\n Object.assign(mergedRouteMeta, matchedRecord.meta)\n }\n return mergedRouteMeta\n}\n\nexport function collectRouteNamesForRemoval(\n routeName: string,\n recordByName: ReadonlyMap<string, RouteRecordNormalized>,\n): Set<string> {\n const namesToRemove = new Set<string>()\n if (!recordByName.has(routeName)) {\n return namesToRemove\n }\n\n namesToRemove.add(routeName)\n let expanded = true\n while (expanded) {\n expanded = false\n for (const [name, record] of recordByName.entries()) {\n if (!record.parentName || namesToRemove.has(name)) {\n continue\n }\n if (namesToRemove.has(record.parentName)) {\n namesToRemove.add(name)\n expanded = true\n }\n }\n }\n\n return namesToRemove\n}\n\nfunction buildRouteParamsFromMatch(matchValues: ReadonlyMap<string, string[]>): RouteParams {\n const params: RouteParams = {}\n for (const [key, values] of matchValues.entries()) {\n if (values.length === 0) {\n continue\n }\n params[key] = values.length === 1 ? values[0] : values\n }\n return params\n}\n\nfunction matchRoutePathParams(pathTemplate: string, targetPath: string): RouteParams | undefined {\n const templateSegments = splitRoutePathSegments(pathTemplate)\n const targetSegments = splitRoutePathSegments(targetPath)\n const matchedValues = new Map<string, string[]>()\n\n const pushValue = (key: string, value: string) => {\n const previous = matchedValues.get(key)\n if (previous) {\n previous.push(value)\n return\n }\n matchedValues.set(key, [value])\n }\n\n const popValue = (key: string) => {\n const previous = matchedValues.get(key)\n if (!previous || previous.length === 0) {\n return\n }\n previous.pop()\n if (previous.length === 0) {\n matchedValues.delete(key)\n }\n }\n\n const consumeRepeatableToken = (key: string, startIndex: number, count: number): () => void => {\n for (let index = 0; index < count; index += 1) {\n pushValue(key, decodeRouteParamSegment(targetSegments[startIndex + index]))\n }\n return () => {\n for (let index = 0; index < count; index += 1) {\n popValue(key)\n }\n }\n }\n\n const matchRecursively = (templateIndex: number, targetIndex: number): boolean => {\n if (templateIndex >= templateSegments.length) {\n return targetIndex >= targetSegments.length\n }\n\n const templateSegment = templateSegments[templateIndex]\n const token = parsePathParamToken(templateSegment)\n if (!token) {\n if (targetIndex >= targetSegments.length || templateSegment !== targetSegments[targetIndex]) {\n return false\n }\n return matchRecursively(templateIndex + 1, targetIndex + 1)\n }\n\n if (token.modifier === '') {\n if (targetIndex >= targetSegments.length) {\n return false\n }\n pushValue(token.key, decodeRouteParamSegment(targetSegments[targetIndex]))\n const matched = matchRecursively(templateIndex + 1, targetIndex + 1)\n if (!matched) {\n popValue(token.key)\n }\n return matched\n }\n\n if (token.modifier === '?') {\n if (targetIndex < targetSegments.length) {\n pushValue(token.key, decodeRouteParamSegment(targetSegments[targetIndex]))\n const consumeMatched = matchRecursively(templateIndex + 1, targetIndex + 1)\n if (consumeMatched) {\n return true\n }\n popValue(token.key)\n }\n return matchRecursively(templateIndex + 1, targetIndex)\n }\n\n const minimumCount = token.modifier === '+' ? 1 : 0\n const maximumCount = targetSegments.length - targetIndex\n\n for (let count = maximumCount; count >= minimumCount; count -= 1) {\n const rollback = consumeRepeatableToken(token.key, targetIndex, count)\n const matched = matchRecursively(templateIndex + 1, targetIndex + count)\n if (matched) {\n return true\n }\n rollback()\n }\n\n return false\n }\n\n if (!matchRecursively(0, 0)) {\n return undefined\n }\n\n return buildRouteParamsFromMatch(matchedValues)\n}\n\nexport function resolveMatchedRouteRecord(\n target: RouteLocationNormalizedLoaded,\n lookup: NamedRouteLookup,\n): MatchedRouteRecordResolveResult | undefined {\n if (target.name) {\n const byName = lookup.recordByName.get(target.name)\n if (byName) {\n return {\n record: byName,\n matchedRecords: resolveMatchedRouteRecordChain(byName, lookup),\n }\n }\n }\n\n const staticNamedRoute = lookup.nameByStaticPath.get(target.path)\n if (staticNamedRoute) {\n const record = lookup.recordByName.get(staticNamedRoute)\n if (record) {\n return {\n record,\n matchedRecords: resolveMatchedRouteRecordChain(record, lookup),\n matchedPath: target.path,\n }\n }\n }\n\n for (const record of lookup.recordByName.values()) {\n for (const routePath of listRouteRecordMatchPaths(record)) {\n if (!isDynamicRoutePath(routePath)) {\n continue\n }\n const matchedParams = matchRoutePathParams(routePath, target.path)\n if (!matchedParams) {\n continue\n }\n return {\n record,\n matchedRecords: resolveMatchedRouteRecordChain(record, lookup),\n matchedPath: routePath,\n params: matchedParams,\n }\n }\n }\n\n return undefined\n}\n","import type { RouteRecordRaw } from '../router'\nimport type { FlattenedRouteRecordSeed, RouteOptionSource } from './types'\nimport { createAbsoluteRoutePath, resolvePath } from './path'\n\nexport function warnRouteConfig(message: string): void {\n // eslint-disable-next-line no-console\n if (typeof console === 'undefined' || typeof console.warn !== 'function') {\n return\n }\n // eslint-disable-next-line no-console\n console.warn(`[wevu/router] ${message}`)\n}\n\nfunction formatRoutePathForWarning(path: string): string {\n const normalizedPath = resolvePath(path, '')\n if (!normalizedPath) {\n return '/'\n }\n return createAbsoluteRoutePath(normalizedPath)\n}\n\nfunction hasCircularChildrenReference(\n routeRecord: RouteRecordRaw,\n ancestorRecords: ReadonlySet<RouteRecordRaw> = new Set<RouteRecordRaw>(),\n): boolean {\n if (ancestorRecords.has(routeRecord)) {\n return true\n }\n\n if (!Array.isArray(routeRecord.children) || routeRecord.children.length === 0) {\n return false\n }\n\n const nextAncestorRecords = new Set(ancestorRecords)\n nextAncestorRecords.add(routeRecord)\n for (const childRecord of routeRecord.children) {\n if (hasCircularChildrenReference(childRecord, nextAncestorRecords)) {\n return true\n }\n }\n\n return false\n}\n\nexport function assertValidAddRouteInput(routeRecord: RouteRecordRaw): void {\n const routeName = typeof routeRecord.name === 'string'\n ? routeRecord.name.trim()\n : ''\n if (!routeName) {\n throw new Error('Route name is required when adding a named route')\n }\n if (typeof routeRecord.path !== 'string' || !routeRecord.path) {\n throw new Error(`Route path is required when adding named route \"${routeName}\"`)\n }\n if (hasCircularChildrenReference(routeRecord)) {\n throw new Error(`Circular children reference detected when adding named route \"${routeName}\"`)\n }\n}\n\nexport function warnDuplicateRouteEntries(routeEntries: readonly FlattenedRouteRecordSeed[]): void {\n const latestRouteInfoByName = new Map<string, { source: RouteOptionSource, path: string }>()\n const duplicateMessages: string[] = []\n\n for (const routeEntry of routeEntries) {\n const routeName = typeof routeEntry.route.name === 'string'\n ? routeEntry.route.name.trim()\n : ''\n if (!routeName) {\n continue\n }\n\n const currentSource = routeEntry.source ?? 'namedRoutes'\n const currentPath = formatRoutePathForWarning(routeEntry.route.path)\n const previousInfo = latestRouteInfoByName.get(routeName)\n if (previousInfo) {\n duplicateMessages.push(`\"${routeName}\" (${previousInfo.source}:${previousInfo.path} -> ${currentSource}:${currentPath})`)\n }\n latestRouteInfoByName.set(routeName, {\n source: currentSource,\n path: currentPath,\n })\n }\n\n if (duplicateMessages.length === 0) {\n return\n }\n\n warnRouteConfig(`duplicate route names detected, later entries override earlier ones: ${duplicateMessages.join(', ')}`)\n}\n","import type {\n NamedRoutes,\n NavigationGuard,\n RouteRecordInput,\n RouteRecordRaw,\n UseRouterOptions,\n} from '../router'\nimport type {\n FlattenedRouteRecordSeed,\n NamedRouteLookup,\n RouteOptionSource,\n RouteRecordNormalized,\n} from './types'\nimport { createAbsoluteRoutePath, isDynamicRoutePath, resolvePath } from './path'\nimport { warnRouteConfig } from './recordsWarnings'\n\nfunction normalizeBeforeEnterGuards(beforeEnter?: RouteRecordRaw['beforeEnter']): readonly NavigationGuard[] {\n if (!beforeEnter) {\n return []\n }\n if (Array.isArray(beforeEnter)) {\n return beforeEnter as readonly NavigationGuard[]\n }\n return [beforeEnter as NavigationGuard]\n}\n\nfunction resolveRouteRecordName(\n route: RouteRecordInput,\n normalizedPath: string,\n source: RouteOptionSource = 'namedRoutes',\n): string {\n if (typeof route.name === 'string' && route.name.trim()) {\n return route.name.trim()\n }\n\n if (source === 'routes') {\n return normalizedPath || '/'\n }\n\n return ''\n}\n\nfunction normalizeRouteRecordAliasPaths(\n alias: RouteRecordRaw['alias'],\n normalizedPath: string,\n): readonly string[] {\n if (!alias) {\n return []\n }\n const aliasList = Array.isArray(alias)\n ? alias\n : [alias]\n\n const normalizedAliasPaths: string[] = []\n for (const aliasPath of aliasList) {\n if (typeof aliasPath !== 'string') {\n continue\n }\n const normalizedAliasPath = resolvePath(aliasPath, '')\n if (!normalizedAliasPath || normalizedAliasPath === normalizedPath) {\n continue\n }\n if (!normalizedAliasPaths.includes(normalizedAliasPath)) {\n normalizedAliasPaths.push(normalizedAliasPath)\n }\n }\n\n return normalizedAliasPaths\n}\n\nexport function normalizeRouteRecordRaw(\n route: RouteRecordInput,\n parentName?: string,\n source: RouteOptionSource = 'namedRoutes',\n): RouteRecordNormalized | undefined {\n const normalizedPath = resolvePath(route.path, '')\n if (!normalizedPath && route.path !== '/') {\n return undefined\n }\n\n const routeName = resolveRouteRecordName(route, normalizedPath, source)\n if (!routeName) {\n return undefined\n }\n const aliasPaths = normalizeRouteRecordAliasPaths(route.alias, normalizedPath)\n\n return {\n name: routeName,\n path: normalizedPath,\n aliasPaths,\n parentName,\n meta: route.meta,\n beforeEnterGuards: normalizeBeforeEnterGuards(route.beforeEnter),\n redirect: route.redirect,\n }\n}\n\nfunction normalizeNestedRoutePath(path: string, parentPath?: string): string {\n if (!parentPath || path.startsWith('/')) {\n return resolvePath(path, '')\n }\n return resolvePath(`${createAbsoluteRoutePath(parentPath)}/${path}`, '')\n}\n\nfunction normalizeAliasInputList(alias: RouteRecordRaw['alias']): string[] {\n if (!alias) {\n return []\n }\n if (Array.isArray(alias)) {\n return alias.filter((item): item is string => typeof item === 'string' && item.length > 0)\n }\n return typeof alias === 'string' && alias.length > 0\n ? [alias]\n : []\n}\n\nfunction mergeAliasPaths(aliasPaths: readonly string[]): string[] {\n const mergedAliasPaths: string[] = []\n for (const aliasPath of aliasPaths) {\n if (!aliasPath || mergedAliasPaths.includes(aliasPath)) {\n continue\n }\n mergedAliasPaths.push(aliasPath)\n }\n return mergedAliasPaths\n}\n\nexport function createRouteRecordAliasValue(aliasPaths: readonly string[]): RouteRecordRaw['alias'] {\n if (aliasPaths.length === 0) {\n return undefined\n }\n if (aliasPaths.length === 1) {\n return createAbsoluteRoutePath(aliasPaths[0])\n }\n return aliasPaths.map(aliasPath => createAbsoluteRoutePath(aliasPath))\n}\n\nexport function flattenNamedRouteRecords(\n records: readonly RouteRecordInput[],\n parentPath?: string,\n parentName?: string,\n parentAliasPaths: readonly string[] = [],\n source?: RouteOptionSource,\n pathPrefix = 'namedRoutes',\n ancestorRecords: ReadonlySet<RouteRecordInput> = new Set<RouteRecordInput>(),\n): FlattenedRouteRecordSeed[] {\n const flattenedRecords: FlattenedRouteRecordSeed[] = []\n\n for (const [index, record] of records.entries()) {\n const routeConfigPath = `${pathPrefix}[${index}]`\n if (ancestorRecords.has(record)) {\n warnRouteConfig(`ignored route record at ${routeConfigPath}: detected circular children reference`)\n continue\n }\n\n if (typeof record.path !== 'string' || !record.path) {\n const routeName = typeof record?.name === 'string'\n ? record.name.trim()\n : ''\n warnRouteConfig(`ignored route record \"${routeName}\" at ${routeConfigPath}: route path is required`)\n continue\n }\n\n const normalizedPath = normalizeNestedRoutePath(record.path, parentPath)\n const routeName = resolveRouteRecordName(record, normalizedPath, source)\n if (!routeName) {\n warnRouteConfig(`ignored route record at ${routeConfigPath}: route name is required`)\n continue\n }\n const normalizedDirectAliasPaths: string[] = []\n const directAliasByNormalizedPath = new Map<string, string>()\n for (const rawAliasPath of normalizeAliasInputList(record.alias)) {\n const normalizedAliasPath = normalizeNestedRoutePath(rawAliasPath, parentPath)\n if (!normalizedAliasPath) {\n continue\n }\n if (normalizedAliasPath === normalizedPath) {\n warnRouteConfig(`ignored alias \"${createAbsoluteRoutePath(normalizedAliasPath)}\" for route \"${routeName}\" at ${routeConfigPath}: alias is same as route path`)\n continue\n }\n\n const duplicateAliasPath = directAliasByNormalizedPath.get(normalizedAliasPath)\n if (duplicateAliasPath) {\n warnRouteConfig(\n `ignored duplicate alias \"${createAbsoluteRoutePath(normalizedAliasPath)}\" for route \"${routeName}\" at ${routeConfigPath}: already declared by \"${duplicateAliasPath}\"`,\n )\n continue\n }\n\n directAliasByNormalizedPath.set(normalizedAliasPath, rawAliasPath)\n normalizedDirectAliasPaths.push(normalizedAliasPath)\n }\n const normalizedInheritedAliasPaths = record.path.startsWith('/')\n ? []\n : parentAliasPaths\n .map(parentAliasPath => normalizeNestedRoutePath(record.path, parentAliasPath))\n .filter(Boolean)\n .filter(aliasPath => aliasPath !== normalizedPath)\n const normalizedAliasPaths = mergeAliasPaths([\n ...normalizedDirectAliasPaths,\n ...normalizedInheritedAliasPaths,\n ])\n const normalizedRecord: RouteRecordRaw = {\n name: routeName,\n path: normalizedPath ? createAbsoluteRoutePath(normalizedPath) : '/',\n alias: createRouteRecordAliasValue(normalizedAliasPaths),\n meta: record.meta,\n beforeEnter: record.beforeEnter,\n redirect: record.redirect,\n }\n flattenedRecords.push({\n route: normalizedRecord,\n parentName,\n source,\n })\n\n if (Array.isArray(record.children) && record.children.length > 0) {\n const nextAncestorRecords = new Set(ancestorRecords)\n nextAncestorRecords.add(record)\n flattenedRecords.push(\n ...flattenNamedRouteRecords(\n record.children,\n normalizedPath,\n routeName,\n normalizedAliasPaths,\n source,\n `${routeConfigPath}.children`,\n nextAncestorRecords,\n ),\n )\n }\n }\n\n return flattenedRecords\n}\n\nfunction normalizeNamedRouteEntries(\n namedRoutes?: NamedRoutes | readonly RouteRecordInput[],\n source: RouteOptionSource = 'namedRoutes',\n): FlattenedRouteRecordSeed[] {\n if (!namedRoutes) {\n return []\n }\n\n if (Array.isArray(namedRoutes)) {\n return flattenNamedRouteRecords(namedRoutes, undefined, undefined, [], source, source)\n }\n\n const normalizedEntries: FlattenedRouteRecordSeed[] = []\n for (const [rawName, rawPath] of Object.entries(namedRoutes)) {\n const routeName = typeof rawName === 'string'\n ? rawName.trim()\n : ''\n if (!routeName) {\n warnRouteConfig(`ignored route record at ${source}: route name is required`)\n continue\n }\n if (typeof rawPath !== 'string' || !rawPath) {\n warnRouteConfig(`ignored route record \"${routeName}\" at ${source}: route path is required`)\n continue\n }\n normalizedEntries.push({\n route: {\n name: routeName,\n path: rawPath,\n },\n source,\n })\n }\n\n return normalizedEntries\n}\n\nexport function resolveRouteOptionEntries(options: UseRouterOptions): FlattenedRouteRecordSeed[] {\n return [\n ...normalizeNamedRouteEntries(options.routes, 'routes'),\n ...normalizeNamedRouteEntries(options.namedRoutes, 'namedRoutes'),\n ]\n}\n\nexport function createNamedRouteNameByStaticPath(recordByName: ReadonlyMap<string, RouteRecordNormalized>): Map<string, string> {\n const nameByStaticPath = new Map<string, string>()\n for (const [name, record] of recordByName.entries()) {\n if (!isDynamicRoutePath(record.path) && !nameByStaticPath.has(record.path)) {\n nameByStaticPath.set(record.path, name)\n }\n for (const aliasPath of record.aliasPaths) {\n if (!isDynamicRoutePath(aliasPath) && !nameByStaticPath.has(aliasPath)) {\n nameByStaticPath.set(aliasPath, name)\n }\n }\n }\n return nameByStaticPath\n}\n\nexport function createNamedRouteLookup(routeEntries: readonly FlattenedRouteRecordSeed[]): NamedRouteLookup {\n const recordByName = new Map<string, RouteRecordNormalized>()\n\n for (const routeRecord of routeEntries) {\n const normalizedRecord = normalizeRouteRecordRaw(\n routeRecord.route,\n routeRecord.parentName,\n routeRecord.source,\n )\n if (!normalizedRecord) {\n continue\n }\n recordByName.set(normalizedRecord.name, normalizedRecord)\n }\n\n return {\n recordByName,\n nameByStaticPath: createNamedRouteNameByStaticPath(recordByName),\n }\n}\n","import type {\n LocationQuery,\n RouteLocationNormalizedLoaded,\n RouteLocationRedirectedFrom,\n RouteMeta,\n RouteParams,\n RouteParamsMode,\n RouteQueryStringifier,\n RouteRecordMatched,\n RouteRecordRaw,\n UseRouterOptions,\n} from '../router'\nimport type { RouteRecordNormalized, RouteResolveCodec } from './types'\nimport { createAbsoluteRoutePath, resolvePath } from './path'\nimport { stringifyQuery } from './query'\n\nexport function cloneRouteMeta(meta?: RouteMeta): RouteMeta | undefined {\n if (!meta) {\n return undefined\n }\n return {\n ...meta,\n }\n}\n\nfunction freezeRouteRecordRawSnapshot(routeRecord: RouteRecordRaw): Readonly<RouteRecordRaw> {\n const snapshot: RouteRecordRaw = {\n name: routeRecord.name,\n path: routeRecord.path,\n }\n\n if (routeRecord.meta !== undefined) {\n snapshot.meta = cloneRouteMeta(routeRecord.meta)\n }\n if (Array.isArray(routeRecord.alias)) {\n snapshot.alias = Object.freeze(routeRecord.alias.slice())\n }\n else if (routeRecord.alias !== undefined) {\n snapshot.alias = routeRecord.alias\n }\n if (Array.isArray(routeRecord.beforeEnter)) {\n snapshot.beforeEnter = Object.freeze(routeRecord.beforeEnter.slice())\n }\n else if (routeRecord.beforeEnter !== undefined) {\n snapshot.beforeEnter = routeRecord.beforeEnter\n }\n if (routeRecord.redirect !== undefined) {\n snapshot.redirect = routeRecord.redirect\n }\n\n return Object.freeze(snapshot)\n}\n\nexport function createRouterOptionsSnapshot(\n normalizedTabBarEntries: readonly string[],\n normalizedNamedRoutes: readonly RouteRecordRaw[],\n paramsMode: RouteParamsMode,\n maxRedirects: number,\n routeResolveCodec: RouteResolveCodec,\n rejectOnError: boolean,\n): Readonly<UseRouterOptions> {\n const tabBarEntriesSnapshot = Object.freeze(\n normalizedTabBarEntries.map(path => createAbsoluteRoutePath(path)),\n )\n const routesSnapshot = Object.freeze(\n normalizedNamedRoutes.map(freezeRouteRecordRawSnapshot),\n ) as readonly RouteRecordRaw[]\n\n return Object.freeze({\n tabBarEntries: tabBarEntriesSnapshot,\n routes: routesSnapshot,\n namedRoutes: routesSnapshot,\n paramsMode,\n maxRedirects,\n parseQuery: routeResolveCodec.parseQuery,\n stringifyQuery: routeResolveCodec.stringifyQuery,\n rejectOnError,\n })\n}\n\nexport function normalizeRouteRecordMatched(\n record: RouteRecordNormalized,\n matchedPath?: string,\n): RouteRecordMatched {\n const matchedRecord: RouteRecordMatched = {\n name: record.name,\n path: createAbsoluteRoutePath(record.path),\n }\n const normalizedMatchedPath = typeof matchedPath === 'string' && matchedPath\n ? createAbsoluteRoutePath(resolvePath(matchedPath, ''))\n : undefined\n if (normalizedMatchedPath && normalizedMatchedPath !== matchedRecord.path) {\n matchedRecord.aliasPath = normalizedMatchedPath\n }\n if (record.meta !== undefined) {\n matchedRecord.meta = cloneRouteMeta(record.meta)\n }\n return matchedRecord\n}\n\nexport function cloneRouteRecordMatchedList(matched?: readonly RouteRecordMatched[]): RouteRecordMatched[] | undefined {\n if (!matched) {\n return undefined\n }\n return matched.map(record => ({\n name: record.name,\n path: record.path,\n aliasPath: record.aliasPath,\n meta: cloneRouteMeta(record.meta),\n }))\n}\n\nexport function cloneLocationQuery(query: LocationQuery): LocationQuery {\n const cloned: LocationQuery = {}\n for (const key of Object.keys(query)) {\n const value = query[key]\n cloned[key] = Array.isArray(value) ? value.slice() : value\n }\n return cloned\n}\n\nexport function cloneRouteParams(params: RouteParams): RouteParams {\n const cloned: RouteParams = {}\n for (const key of Object.keys(params)) {\n const value = params[key]\n cloned[key] = Array.isArray(value) ? value.slice() : value\n }\n return cloned\n}\n\nexport function cloneRouteLocationRedirectedFrom(\n redirectedFrom?: RouteLocationRedirectedFrom,\n): RouteLocationRedirectedFrom | undefined {\n if (!redirectedFrom) {\n return undefined\n }\n\n const cloned: RouteLocationRedirectedFrom = {\n path: redirectedFrom.path,\n fullPath: redirectedFrom.fullPath,\n query: cloneLocationQuery(redirectedFrom.query),\n hash: redirectedFrom.hash,\n params: cloneRouteParams(redirectedFrom.params),\n }\n if (redirectedFrom.name !== undefined) {\n cloned.name = redirectedFrom.name\n }\n if (redirectedFrom.meta !== undefined) {\n cloned.meta = cloneRouteMeta(redirectedFrom.meta)\n }\n if (redirectedFrom.href !== undefined) {\n cloned.href = redirectedFrom.href\n }\n if (redirectedFrom.matched !== undefined) {\n cloned.matched = cloneRouteRecordMatchedList(redirectedFrom.matched)\n }\n return cloned\n}\n\nexport function createRedirectedFromSnapshot(route: RouteLocationNormalizedLoaded): RouteLocationRedirectedFrom {\n const snapshot: RouteLocationRedirectedFrom = {\n path: route.path,\n fullPath: route.fullPath,\n query: cloneLocationQuery(route.query),\n hash: route.hash,\n params: cloneRouteParams(route.params),\n }\n if (route.name !== undefined) {\n snapshot.name = route.name\n }\n if (route.meta !== undefined) {\n snapshot.meta = cloneRouteMeta(route.meta)\n }\n if (route.href !== undefined) {\n snapshot.href = route.href\n }\n if (route.matched !== undefined) {\n snapshot.matched = cloneRouteRecordMatchedList(route.matched)\n }\n return snapshot\n}\n\nexport function snapshotRouteLocation(route: RouteLocationNormalizedLoaded): RouteLocationNormalizedLoaded {\n const snapshot: RouteLocationNormalizedLoaded = {\n path: route.path,\n fullPath: route.fullPath,\n query: cloneLocationQuery(route.query),\n hash: route.hash,\n params: cloneRouteParams(route.params),\n }\n if (route.meta !== undefined) {\n snapshot.meta = cloneRouteMeta(route.meta)\n }\n if (route.href !== undefined) {\n snapshot.href = route.href\n }\n if (route.matched !== undefined) {\n snapshot.matched = cloneRouteRecordMatchedList(route.matched)\n }\n if (route.redirectedFrom !== undefined) {\n snapshot.redirectedFrom = cloneRouteLocationRedirectedFrom(route.redirectedFrom)\n }\n if (route.name !== undefined) {\n snapshot.name = route.name\n }\n return snapshot\n}\n\nexport function createNativeRouteUrl(\n target: RouteLocationNormalizedLoaded,\n queryStringifier: RouteQueryStringifier = stringifyQuery,\n): string {\n const basePath = createAbsoluteRoutePath(target.path)\n const queryString = queryStringifier(target.query)\n return queryString ? `${basePath}?${queryString}` : basePath\n}\n\nexport function hasLocationQuery(query: LocationQuery): boolean {\n return Object.keys(query).length > 0\n}\n","import type { RouterNavigation } from './types'\nimport { injectGlobal, provideGlobal } from '../runtime/provide'\n\nconst ROUTER_INSTANCE_KEY = Symbol('wevu.router.instance')\n\nlet activeRouter: RouterNavigation | undefined\n\nexport function setActiveRouter(router: RouterNavigation) {\n activeRouter = router\n provideGlobal(ROUTER_INSTANCE_KEY, router)\n}\n\nexport function getActiveRouter() {\n return activeRouter ?? injectGlobal<RouterNavigation | undefined>(ROUTER_INSTANCE_KEY, undefined)\n}\n","import type {\n SetupContextRouter,\n TypedRouterTabBarUrl,\n} from '../runtime/types/props'\n\nexport type LocationQueryValue = string | null\nexport type LocationQueryValueRaw = LocationQueryValue | number | boolean | undefined\nexport type LocationQuery = Record<string, LocationQueryValue | LocationQueryValue[]>\nexport type LocationQueryRaw = Record<string, LocationQueryValueRaw | LocationQueryValueRaw[]>\nexport type RouteParamValue = string\nexport type RouteParamValueRaw = RouteParamValue | number | boolean | null | undefined\nexport type RouteParams = Record<string, RouteParamValue | RouteParamValue[]>\nexport type RouteParamsRaw = Record<string, RouteParamValueRaw | RouteParamValueRaw[]>\nexport type RouteParamsMode = 'loose' | 'strict'\nexport type RouteQueryParser = (search: string) => LocationQueryRaw | LocationQuery\nexport type RouteQueryStringifier = (query: LocationQueryRaw | LocationQuery) => string\nexport type RouteMeta = Record<string, unknown>\nexport interface NamedRouteRecord {\n name: string\n path: string\n}\nexport interface RouteRecordInput {\n name?: string\n path: string\n meta?: RouteMeta\n alias?: string | readonly string[]\n children?: readonly RouteRecordInput[]\n beforeEnter?: NavigationGuard | readonly NavigationGuard[]\n redirect?: RouteRecordRedirect\n}\nexport type NamedRoutes = Readonly<Record<string, string>> | readonly RouteRecordRaw[]\n\nexport type RouteLocationRaw = string | {\n path?: string\n fullPath?: string\n query?: LocationQueryRaw\n hash?: string\n name?: string\n params?: RouteParamsRaw\n}\n\nexport interface RouteLocationNormalizedLoaded {\n path: string\n fullPath: string\n query: LocationQuery\n hash: string\n name?: string\n meta?: RouteMeta\n href?: string\n matched?: readonly RouteRecordMatched[]\n redirectedFrom?: RouteLocationRedirectedFrom\n params: RouteParams\n}\n\nexport const NavigationFailureType = {\n unknown: 1,\n aborted: 4,\n cancelled: 8,\n duplicated: 16,\n} as const\n\nexport type NavigationFailureTypeValue = (typeof NavigationFailureType)[keyof typeof NavigationFailureType]\n\nexport interface NavigationFailure extends Error {\n readonly __wevuNavigationFailure: true\n readonly type: NavigationFailureTypeValue\n readonly to?: RouteLocationNormalizedLoaded\n readonly from?: RouteLocationNormalizedLoaded\n readonly cause?: unknown\n}\n\nexport type NavigationMode = 'push' | 'replace' | 'back'\nexport interface NavigationRedirect {\n to: RouteLocationRaw\n replace?: boolean\n}\nexport type RouteRecordRedirect = RouteLocationRaw | NavigationRedirect | ((\n to: RouteLocationNormalizedLoaded,\n from: RouteLocationNormalizedLoaded,\n) => RouteLocationRaw | NavigationRedirect | Promise<RouteLocationRaw | NavigationRedirect>)\nexport interface RouteRecordRaw extends Omit<RouteRecordInput, 'name' | 'children'>, NamedRouteRecord {\n children?: readonly RouteRecordRaw[]\n}\n\nexport interface RouteRecordMatched {\n name: string\n path: string\n aliasPath?: string\n meta?: RouteMeta\n}\n\nexport interface RouteLocationRedirectedFrom {\n path: string\n fullPath: string\n query: LocationQuery\n hash: string\n name?: string\n meta?: RouteMeta\n href?: string\n matched?: readonly RouteRecordMatched[]\n params: RouteParams\n}\n\nexport type NavigationGuardResult = void | boolean | NavigationFailure | RouteLocationRaw | NavigationRedirect\nexport type NavigationGuard = (\n to: RouteLocationNormalizedLoaded | undefined,\n from: RouteLocationNormalizedLoaded,\n context?: NavigationGuardContext,\n) => NavigationGuardResult | Promise<NavigationGuardResult>\nexport type NavigationAfterEach = (\n to: RouteLocationNormalizedLoaded | undefined,\n from: RouteLocationNormalizedLoaded,\n failure?: NavigationFailure,\n context?: NavigationAfterEachContext,\n) => void | Promise<void>\n\nexport interface NavigationGuardContext {\n readonly mode: NavigationMode\n readonly to?: RouteLocationNormalizedLoaded\n readonly from: RouteLocationNormalizedLoaded\n readonly nativeRouter: SetupContextRouter\n}\n\nexport interface NavigationAfterEachContext {\n readonly mode: NavigationMode\n readonly to?: RouteLocationNormalizedLoaded\n readonly from: RouteLocationNormalizedLoaded\n readonly nativeRouter: SetupContextRouter\n readonly failure?: NavigationFailure\n}\n\nexport interface NavigationErrorContext {\n readonly mode: NavigationMode\n readonly to?: RouteLocationNormalizedLoaded\n readonly from: RouteLocationNormalizedLoaded\n readonly nativeRouter: SetupContextRouter\n readonly failure: NavigationFailure\n}\n\nexport type NavigationErrorHandler = (\n error: unknown,\n context: NavigationErrorContext,\n) => void | Promise<void>\n\nexport interface UseRouterOptions {\n tabBarEntries?: readonly (TypedRouterTabBarUrl | string)[]\n /**\n * Vue Router 对齐入口:推荐使用 `routes`\n */\n routes?: readonly RouteRecordInput[]\n /**\n * 兼容入口:支持对象 map 或路由记录数组\n */\n namedRoutes?: NamedRoutes\n paramsMode?: RouteParamsMode\n maxRedirects?: number\n parseQuery?: RouteQueryParser\n stringifyQuery?: RouteQueryStringifier\n /**\n * 异常型导航失败时是否以 Promise reject 抛出失败对象。\n *\n * - `true`:更贴近 Vue Router 心智(默认)\n * - `false`:始终以返回值形式携带失败对象\n */\n rejectOnError?: boolean\n}\n\nexport interface RouterNavigation {\n readonly nativeRouter: SetupContextRouter\n readonly options: Readonly<UseRouterOptions>\n readonly currentRoute: Readonly<RouteLocationNormalizedLoaded>\n install: (app?: unknown) => void\n resolve: (to: RouteLocationRaw) => RouteLocationNormalizedLoaded\n isReady: () => Promise<void>\n push: (to: RouteLocationRaw) => Promise<void | NavigationFailure>\n replace: (to: RouteLocationRaw) => Promise<void | NavigationFailure>\n back: (delta?: number) => Promise<void | NavigationFailure>\n go: (delta: number) => Promise<void | NavigationFailure>\n forward: () => Promise<void | NavigationFailure>\n hasRoute: (name: string) => boolean\n getRoutes: () => readonly RouteRecordRaw[]\n addRoute: AddRoute\n removeRoute: (name: string) => void\n clearRoutes: () => void\n beforeEach: (guard: NavigationGuard) => () => void\n beforeResolve: (guard: NavigationGuard) => () => void\n afterEach: (hook: NavigationAfterEach) => () => void\n onError: (handler: NavigationErrorHandler) => () => void\n}\n\nexport interface AddRoute {\n (route: RouteRecordRaw): () => void\n (parentName: string, route: RouteRecordRaw): () => void\n}\n","import type {\n NavigationAfterEach,\n NavigationAfterEachContext,\n NavigationErrorContext,\n NavigationErrorHandler,\n NavigationFailure,\n NavigationFailureTypeValue,\n NavigationGuard,\n NavigationGuardContext,\n NavigationRedirect,\n RouteLocationNormalizedLoaded,\n RouteLocationRaw,\n} from './types'\nimport { NavigationFailureType } from './types'\n\nconst DUPLICATED_RE = /already|same|duplicat|重复/\nconst CANCELLED_RE = /cancel|取消/\nconst ABORTED_RE = /abort|interrupt|中断/\n\nfunction normalizeNavigationErrorMessage(error: unknown): string {\n if (typeof error === 'string') {\n return error\n }\n if (error && typeof error === 'object') {\n const message = (error as Record<string, unknown>).errMsg\n if (typeof message === 'string') {\n return message\n }\n if (error instanceof Error) {\n return error.message\n }\n }\n return ''\n}\n\nfunction resolveNavigationFailureType(error: unknown): NavigationFailureTypeValue {\n const normalizedMessage = normalizeNavigationErrorMessage(error).toLowerCase()\n if (DUPLICATED_RE.test(normalizedMessage)) {\n return NavigationFailureType.duplicated\n }\n if (CANCELLED_RE.test(normalizedMessage)) {\n return NavigationFailureType.cancelled\n }\n if (ABORTED_RE.test(normalizedMessage)) {\n return NavigationFailureType.aborted\n }\n return NavigationFailureType.unknown\n}\n\nexport function createNavigationFailure(\n type: NavigationFailureTypeValue,\n to?: RouteLocationNormalizedLoaded,\n from?: RouteLocationNormalizedLoaded,\n cause?: unknown,\n): NavigationFailure {\n const message = normalizeNavigationErrorMessage(cause) || 'Navigation failed'\n const error = new Error(message) as NavigationFailure\n ;(error as { __wevuNavigationFailure: true }).__wevuNavigationFailure = true\n ;(error as { type: NavigationFailureTypeValue }).type = type\n ;(error as { to?: RouteLocationNormalizedLoaded }).to = to\n ;(error as { from?: RouteLocationNormalizedLoaded }).from = from\n ;(error as { cause?: unknown }).cause = cause\n return error\n}\n\nexport function isNavigationFailure(error: unknown, type?: NavigationFailureTypeValue): error is NavigationFailure {\n if (!error || typeof error !== 'object') {\n return false\n }\n const navigationError = error as Partial<NavigationFailure>\n if (navigationError.__wevuNavigationFailure !== true) {\n return false\n }\n if (type === undefined) {\n return true\n }\n return navigationError.type === type\n}\n\ninterface GuardPipelineContinue {\n status: 'continue'\n}\n\ninterface GuardPipelineFailure {\n status: 'failure'\n failure: NavigationFailure\n}\n\ninterface GuardPipelineRedirect {\n status: 'redirect'\n target: RouteLocationNormalizedLoaded\n replace?: boolean\n}\n\nexport type GuardPipelineResult = GuardPipelineContinue | GuardPipelineFailure | GuardPipelineRedirect\n\nexport function isNavigationRedirectCandidate(value: unknown): value is NavigationRedirect {\n if (!value || typeof value !== 'object') {\n return false\n }\n return 'to' in (value as Record<string, unknown>)\n}\n\nfunction isRouteLocationRawCandidate(value: unknown): value is RouteLocationRaw {\n if (typeof value === 'string') {\n return true\n }\n if (!value || typeof value !== 'object') {\n return false\n }\n const candidate = value as Record<string, unknown>\n return 'path' in candidate\n || 'fullPath' in candidate\n || 'query' in candidate\n || 'hash' in candidate\n || 'name' in candidate\n || 'params' in candidate\n}\n\nexport async function runNavigationGuards(\n guards: ReadonlySet<NavigationGuard>,\n context: NavigationGuardContext,\n resolveRoute: (to: RouteLocationRaw, currentPath: string) => RouteLocationNormalizedLoaded,\n): Promise<GuardPipelineResult> {\n for (const guard of guards) {\n try {\n const result = await guard(context.to, context.from, context)\n if (isNavigationFailure(result)) {\n return {\n status: 'failure',\n failure: result,\n }\n }\n if (result === false) {\n return {\n status: 'failure',\n failure: createNavigationFailure(\n NavigationFailureType.aborted,\n context.to,\n context.from,\n 'Navigation aborted by guard',\n ),\n }\n }\n if (isNavigationRedirectCandidate(result)) {\n if (!context.to) {\n return {\n status: 'failure',\n failure: createNavigationFailure(\n NavigationFailureType.aborted,\n context.to,\n context.from,\n 'Redirect is not supported in back navigation guards',\n ),\n }\n }\n return {\n status: 'redirect',\n target: resolveRoute(result.to, context.to.path),\n replace: result.replace,\n }\n }\n if (isRouteLocationRawCandidate(result)) {\n if (!context.to) {\n return {\n status: 'failure',\n failure: createNavigationFailure(\n NavigationFailureType.aborted,\n context.to,\n context.from,\n 'Redirect is not supported in back navigation guards',\n ),\n }\n }\n return {\n status: 'redirect',\n target: resolveRoute(result, context.to.path),\n }\n }\n }\n catch (error) {\n return {\n status: 'failure',\n failure: createNavigationFailure(NavigationFailureType.aborted, context.to, context.from, error),\n }\n }\n }\n return { status: 'continue' }\n}\n\nexport function executeNavigationMethod(\n method: (options: Record<string, any>) => unknown,\n options: Record<string, any>,\n to?: RouteLocationNormalizedLoaded,\n from?: RouteLocationNormalizedLoaded,\n): Promise<void | NavigationFailure> {\n return new Promise((resolve) => {\n let settled = false\n const finalize = (result?: void | NavigationFailure) => {\n if (settled) {\n return\n }\n settled = true\n resolve(result)\n }\n\n try {\n const maybePromise = method({\n ...options,\n success: () => finalize(),\n fail: (error: unknown) => {\n finalize(createNavigationFailure(resolveNavigationFailureType(error), to, from, error))\n },\n })\n\n if (maybePromise && typeof (maybePromise as PromiseLike<unknown>).then === 'function') {\n ;(maybePromise as PromiseLike<unknown>).then(\n () => finalize(),\n error => finalize(createNavigationFailure(resolveNavigationFailureType(error), to, from, error)),\n )\n }\n }\n catch (error) {\n finalize(createNavigationFailure(resolveNavigationFailureType(error), to, from, error))\n }\n })\n}\n\nexport async function runAfterEachHooks(\n hooks: ReadonlySet<NavigationAfterEach>,\n context: NavigationAfterEachContext,\n) {\n for (const hook of hooks) {\n try {\n await hook(context.to, context.from, context.failure, context)\n }\n catch {\n // 忽略 afterEach hook 的异常,避免影响导航主流程。\n }\n }\n}\n\nexport async function runNavigationErrorHooks(\n handlers: ReadonlySet<NavigationErrorHandler>,\n error: unknown,\n context: NavigationErrorContext,\n) {\n for (const handler of handlers) {\n try {\n await handler(error, context)\n }\n catch {\n // 忽略 onError 回调中的异常,避免影响导航主流程。\n }\n }\n}\n\nfunction isNativeFailureLikeError(value: unknown): boolean {\n if (!value || typeof value !== 'object') {\n return false\n }\n const errMsg = (value as Record<string, unknown>).errMsg\n return typeof errMsg === 'string'\n}\n\nexport function shouldEmitNavigationError(failure: NavigationFailure): boolean {\n if (failure.type === NavigationFailureType.unknown) {\n return true\n }\n if (failure.cause instanceof Error) {\n return true\n }\n if (failure.type === NavigationFailureType.aborted && failure.cause !== undefined) {\n if (typeof failure.cause === 'string') {\n return false\n }\n if (isNativeFailureLikeError(failure.cause)) {\n return false\n }\n return true\n }\n return false\n}\n","import type { SetupContextRouter } from '../runtime/types/props'\nimport type {\n NavigationAfterEach,\n NavigationErrorHandler,\n NavigationFailure,\n NavigationMode,\n RouteLocationNormalizedLoaded,\n} from './types'\nimport { runAfterEachHooks, runNavigationErrorHooks, shouldEmitNavigationError } from './navigationCore'\n\nexport interface NavigationRunResult {\n mode: NavigationMode\n from: RouteLocationNormalizedLoaded\n to?: RouteLocationNormalizedLoaded\n failure?: NavigationFailure\n}\n\nexport function createNavigationRunResult(\n mode: NavigationMode,\n from: RouteLocationNormalizedLoaded,\n to?: RouteLocationNormalizedLoaded,\n failure?: NavigationFailure,\n): NavigationRunResult {\n return {\n mode,\n from,\n to,\n failure,\n }\n}\n\nexport function createNavigationResultController(options: {\n afterEachHooks: ReadonlySet<NavigationAfterEach>\n errorHandlers: ReadonlySet<NavigationErrorHandler>\n nativeRouter: SetupContextRouter\n rejectOnError: boolean\n}) {\n const {\n afterEachHooks,\n errorHandlers,\n nativeRouter,\n rejectOnError,\n } = options\n\n async function emitNavigationAfterEach(result: NavigationRunResult): Promise<void> {\n await runAfterEachHooks(afterEachHooks, {\n mode: result.mode,\n to: result.to,\n from: result.from,\n nativeRouter,\n failure: result.failure,\n })\n\n if (result.failure && shouldEmitNavigationError(result.failure)) {\n await runNavigationErrorHooks(\n errorHandlers,\n result.failure.cause ?? result.failure,\n {\n mode: result.mode,\n to: result.to,\n from: result.from,\n nativeRouter,\n failure: result.failure,\n },\n )\n }\n }\n\n function shouldRejectNavigationFailure(failure: NavigationFailure): boolean {\n return rejectOnError && shouldEmitNavigationError(failure)\n }\n\n async function settleNavigationResult(result: NavigationRunResult): Promise<void | NavigationFailure> {\n await emitNavigationAfterEach(result)\n if (result.failure && shouldRejectNavigationFailure(result.failure)) {\n throw result.failure\n }\n return result.failure\n }\n\n return {\n settleNavigationResult,\n }\n}\n","import type { NavigationFailure, RouteLocationNormalizedLoaded, RouteLocationRaw, RouteRecordRedirect } from './types'\nimport { cloneRouteLocationRedirectedFrom, createRedirectedFromSnapshot } from '../routerInternal/shared'\nimport { createNavigationFailure, isNavigationRedirectCandidate } from './navigationCore'\nimport { NavigationFailureType } from './types'\n\nexport function createDuplicatedFailure(target: RouteLocationNormalizedLoaded, from: RouteLocationNormalizedLoaded): NavigationFailure {\n return createNavigationFailure(\n NavigationFailureType.duplicated,\n target,\n from,\n 'Avoided redundant navigation to current location',\n )\n}\n\nexport function createTabBarQueryFailure(target: RouteLocationNormalizedLoaded, from: RouteLocationNormalizedLoaded): NavigationFailure {\n return createNavigationFailure(\n NavigationFailureType.aborted,\n target,\n from,\n 'switchTab does not support query parameters',\n )\n}\n\nexport function createTooManyRedirectsFailure(\n target: RouteLocationNormalizedLoaded,\n from: RouteLocationNormalizedLoaded,\n maxRedirects: number,\n): NavigationFailure {\n return createNavigationFailure(\n NavigationFailureType.aborted,\n target,\n from,\n `Navigation redirected more than ${maxRedirects} times`,\n )\n}\n\nexport function createHashOnlyNavigationFailure(target: RouteLocationNormalizedLoaded, from: RouteLocationNormalizedLoaded): NavigationFailure {\n return createNavigationFailure(\n NavigationFailureType.aborted,\n target,\n from,\n 'Hash-only navigation is not supported in mini-program router',\n )\n}\n\nexport function createForwardNotSupportedFailure(from: RouteLocationNormalizedLoaded): NavigationFailure {\n return createNavigationFailure(\n NavigationFailureType.aborted,\n undefined,\n from,\n 'Forward navigation is not supported in mini-program router',\n )\n}\n\nexport function applyRedirectedFrom(\n redirectedTarget: RouteLocationNormalizedLoaded,\n currentTarget: RouteLocationNormalizedLoaded,\n) {\n const redirectedFrom = currentTarget.redirectedFrom\n ? cloneRouteLocationRedirectedFrom(currentTarget.redirectedFrom)\n : createRedirectedFromSnapshot(currentTarget)\n redirectedTarget.redirectedFrom = redirectedFrom\n}\n\nexport async function resolveRouteRecordRedirect(\n redirect: RouteRecordRedirect,\n to: RouteLocationNormalizedLoaded,\n from: RouteLocationNormalizedLoaded,\n resolveWithCodec: (to: RouteLocationRaw, currentPath: string) => RouteLocationNormalizedLoaded,\n): Promise<{ target: RouteLocationNormalizedLoaded, replace?: boolean }> {\n const redirectResult = typeof redirect === 'function'\n ? await redirect(to, from)\n : redirect\n\n if (isNavigationRedirectCandidate(redirectResult)) {\n return {\n target: resolveWithCodec(redirectResult.to, to.path),\n replace: redirectResult.replace,\n }\n }\n\n return {\n target: resolveWithCodec(redirectResult, to.path),\n replace: true,\n }\n}\n","import type {\n NamedRouteLookup,\n RouteResolveCodec,\n} from '../routerInternal/shared'\nimport type { NavigationRunResult } from './navigationResult'\nimport type {\n NavigationGuard,\n NavigationMode,\n RouteLocationNormalizedLoaded,\n RouteLocationRaw,\n} from './types'\nimport {\n createAbsoluteRoutePath,\n createNativeRouteUrl,\n hasLocationQuery,\n resolveMatchedRouteRecord,\n} from '../routerInternal/shared'\nimport {\n createNavigationFailure,\n executeNavigationMethod,\n isNavigationFailure,\n runNavigationGuards,\n} from './navigationCore'\nimport { createNavigationRunResult } from './navigationResult'\nimport {\n applyRedirectedFrom,\n createDuplicatedFailure,\n createHashOnlyNavigationFailure,\n createTabBarQueryFailure,\n createTooManyRedirectsFailure,\n resolveRouteRecordRedirect,\n} from './navigationTargetHelpers'\nimport { NavigationFailureType } from './types'\n\ninterface NavigateWithTargetOptions {\n mode: Exclude<NavigationMode, 'back'>\n target: RouteLocationNormalizedLoaded\n from: RouteLocationNormalizedLoaded\n nativeRouter: Record<string, any>\n routeResolveCodec: RouteResolveCodec\n namedRouteLookup: NamedRouteLookup\n beforeEachGuards: ReadonlySet<NavigationGuard>\n beforeResolveGuards: ReadonlySet<NavigationGuard>\n maxRedirects: number\n tabBarPathSet: ReadonlySet<string>\n resolveWithCodec: (to: RouteLocationRaw, currentPath: string) => RouteLocationNormalizedLoaded\n}\n\nexport async function navigateWithTarget(options: NavigateWithTargetOptions): Promise<NavigationRunResult> {\n const {\n mode,\n target,\n from,\n nativeRouter,\n routeResolveCodec,\n namedRouteLookup,\n beforeEachGuards,\n beforeResolveGuards,\n maxRedirects,\n tabBarPathSet,\n resolveWithCodec,\n } = options\n let currentTarget = target\n let currentMode: Exclude<NavigationMode, 'back'> = mode\n let redirectCount = 0\n\n while (true) {\n const tabBarTarget = tabBarPathSet.has(currentTarget.path)\n const sameNativeLocation = createNativeRouteUrl(currentTarget, routeResolveCodec.stringifyQuery)\n === createNativeRouteUrl(from, routeResolveCodec.stringifyQuery)\n if (sameNativeLocation && currentTarget.hash !== from.hash) {\n return createNavigationRunResult(currentMode, from, currentTarget, createHashOnlyNavigationFailure(currentTarget, from))\n }\n\n const duplicated = tabBarTarget\n ? currentTarget.path === from.path\n : currentTarget.fullPath === from.fullPath\n if (duplicated) {\n return createNavigationRunResult(currentMode, from, currentTarget, createDuplicatedFailure(currentTarget, from))\n }\n\n if (tabBarTarget && hasLocationQuery(currentTarget.query)) {\n return createNavigationRunResult(currentMode, from, currentTarget, createTabBarQueryFailure(currentTarget, from))\n }\n\n const beforeEachResult = await runNavigationGuards(beforeEachGuards, {\n mode: currentMode,\n to: currentTarget,\n from,\n nativeRouter: nativeRouter as any,\n }, resolveWithCodec)\n\n if (beforeEachResult.status === 'failure') {\n return createNavigationRunResult(currentMode, from, currentTarget, beforeEachResult.failure)\n }\n if (beforeEachResult.status === 'redirect') {\n const redirectedTarget = beforeEachResult.target\n const redirectedMode = beforeEachResult.replace === true\n ? 'replace'\n : beforeEachResult.replace === false\n ? 'push'\n : currentMode\n if (redirectedTarget.fullPath !== currentTarget.fullPath || redirectedMode !== currentMode) {\n applyRedirectedFrom(redirectedTarget, currentTarget)\n currentTarget = redirectedTarget\n currentMode = redirectedMode\n redirectCount += 1\n if (redirectCount > maxRedirects) {\n return createNavigationRunResult(\n currentMode,\n from,\n currentTarget,\n createTooManyRedirectsFailure(currentTarget, from, maxRedirects),\n )\n }\n continue\n }\n }\n\n const matchedRouteResult = resolveMatchedRouteRecord(currentTarget, namedRouteLookup)\n const matchedRouteRecords = matchedRouteResult?.matchedRecords ?? []\n let redirectedByRouteRecord = false\n for (const matchedRouteRecord of matchedRouteRecords) {\n if (matchedRouteRecord.redirect === undefined) {\n continue\n }\n let redirectedByRecord: { target: RouteLocationNormalizedLoaded, replace?: boolean }\n try {\n redirectedByRecord = await resolveRouteRecordRedirect(\n matchedRouteRecord.redirect,\n currentTarget,\n from,\n resolveWithCodec,\n )\n }\n catch (error) {\n return createNavigationRunResult(\n currentMode,\n from,\n currentTarget,\n createNavigationFailure(NavigationFailureType.aborted, currentTarget, from, error),\n )\n }\n\n const redirectedMode = redirectedByRecord.replace === false ? 'push' : 'replace'\n const redirectedTarget = redirectedByRecord.target\n if (redirectedTarget.fullPath !== currentTarget.fullPath || redirectedMode !== currentMode) {\n applyRedirectedFrom(redirectedTarget, currentTarget)\n currentTarget = redirectedTarget\n currentMode = redirectedMode\n redirectCount += 1\n if (redirectCount > maxRedirects) {\n return createNavigationRunResult(\n currentMode,\n from,\n currentTarget,\n createTooManyRedirectsFailure(currentTarget, from, maxRedirects),\n )\n }\n redirectedByRouteRecord = true\n break\n }\n }\n if (redirectedByRouteRecord) {\n continue\n }\n\n let redirectedByBeforeEnter = false\n for (const matchedRouteRecord of matchedRouteRecords) {\n if (matchedRouteRecord.beforeEnterGuards.length === 0) {\n continue\n }\n const beforeEnterResult = await runNavigationGuards(new Set(matchedRouteRecord.beforeEnterGuards), {\n mode: currentMode,\n to: currentTarget,\n from,\n nativeRouter: nativeRouter as any,\n }, resolveWithCodec)\n\n if (beforeEnterResult.status === 'failure') {\n return createNavigationRunResult(currentMode, from, currentTarget, beforeEnterResult.failure)\n }\n if (beforeEnterResult.status === 'redirect') {\n const redirectedTarget = beforeEnterResult.target\n const redirectedMode = beforeEnterResult.replace === true\n ? 'replace'\n : beforeEnterResult.replace === false\n ? 'push'\n : currentMode\n if (redirectedTarget.fullPath !== currentTarget.fullPath || redirectedMode !== currentMode) {\n applyRedirectedFrom(redirectedTarget, currentTarget)\n currentTarget = redirectedTarget\n currentMode = redirectedMode\n redirectCount += 1\n if (redirectCount > maxRedirects) {\n return createNavigationRunResult(\n currentMode,\n from,\n currentTarget,\n createTooManyRedirectsFailure(currentTarget, from, maxRedirects),\n )\n }\n redirectedByBeforeEnter = true\n break\n }\n }\n }\n if (redirectedByBeforeEnter) {\n continue\n }\n\n const beforeResolveResult = await runNavigationGuards(beforeResolveGuards, {\n mode: currentMode,\n to: currentTarget,\n from,\n nativeRouter: nativeRouter as any,\n }, resolveWithCodec)\n\n if (beforeResolveResult.status === 'failure') {\n return createNavigationRunResult(currentMode, from, currentTarget, beforeResolveResult.failure)\n }\n if (beforeResolveResult.status === 'redirect') {\n const redirectedTarget = beforeResolveResult.target\n const redirectedMode = beforeResolveResult.replace === true\n ? 'replace'\n : beforeResolveResult.replace === false\n ? 'push'\n : currentMode\n if (redirectedTarget.fullPath !== currentTarget.fullPath || redirectedMode !== currentMode) {\n applyRedirectedFrom(redirectedTarget, currentTarget)\n currentTarget = redirectedTarget\n currentMode = redirectedMode\n redirectCount += 1\n if (redirectCount > maxRedirects) {\n return createNavigationRunResult(\n currentMode,\n from,\n currentTarget,\n createTooManyRedirectsFailure(currentTarget, from, maxRedirects),\n )\n }\n continue\n }\n }\n\n if (tabBarTarget) {\n const result = await executeNavigationMethod(\n nativeRouter.switchTab as (options: Record<string, any>) => unknown,\n { url: createAbsoluteRoutePath(currentTarget.path) },\n currentTarget,\n from,\n )\n if (isNavigationFailure(result)) {\n return createNavigationRunResult(currentMode, from, currentTarget, result)\n }\n return createNavigationRunResult(currentMode, from, currentTarget)\n }\n\n const nativeMethod = currentMode === 'push'\n ? nativeRouter.navigateTo\n : nativeRouter.redirectTo\n const result = await executeNavigationMethod(\n nativeMethod as (options: Record<string, any>) => unknown,\n { url: createNativeRouteUrl(currentTarget, routeResolveCodec.stringifyQuery) },\n currentTarget,\n from,\n )\n if (isNavigationFailure(result)) {\n return createNavigationRunResult(currentMode, from, currentTarget, result)\n }\n return createNavigationRunResult(currentMode, from, currentTarget)\n }\n}\n","import type {\n NamedRouteLookup,\n RouteResolveCodec,\n} from '../routerInternal/shared'\nimport type { NavigationRunResult } from './navigationResult'\nimport type {\n NavigationFailure,\n NavigationGuard,\n RouteLocationNormalizedLoaded,\n RouteLocationRaw,\n} from './types'\nimport { snapshotRouteLocation } from '../routerInternal/shared'\nimport {\n createNavigationFailure,\n executeNavigationMethod,\n isNavigationFailure,\n runNavigationGuards,\n} from './navigationCore'\nimport { createNavigationRunResult } from './navigationResult'\nimport { navigateWithTarget } from './navigationTarget'\nimport { createForwardNotSupportedFailure } from './navigationTargetHelpers'\nimport { NavigationFailureType } from './types'\n\ninterface CreateNavigationApiOptions {\n nativeRouter: Record<string, any>\n route: Readonly<RouteLocationNormalizedLoaded>\n routeResolveCodec: RouteResolveCodec\n namedRouteLookup: NamedRouteLookup\n beforeEachGuards: ReadonlySet<NavigationGuard>\n beforeResolveGuards: ReadonlySet<NavigationGuard>\n maxRedirects: number\n tabBarPathSet: ReadonlySet<string>\n resolveWithCodec: (to: RouteLocationRaw, currentPath: string) => RouteLocationNormalizedLoaded\n settleNavigationResult: (result: NavigationRunResult) => Promise<void | NavigationFailure>\n}\n\nexport function createNavigationApi(options: CreateNavigationApiOptions) {\n const {\n nativeRouter,\n route,\n routeResolveCodec,\n namedRouteLookup,\n beforeEachGuards,\n beforeResolveGuards,\n maxRedirects,\n tabBarPathSet,\n resolveWithCodec,\n settleNavigationResult,\n } = options\n\n async function push(to: RouteLocationRaw): Promise<void | NavigationFailure> {\n const from = snapshotRouteLocation(route)\n let target: RouteLocationNormalizedLoaded\n try {\n target = resolveWithCodec(to, from.path)\n }\n catch (error) {\n return settleNavigationResult(\n createNavigationRunResult(\n 'push',\n from,\n undefined,\n createNavigationFailure(NavigationFailureType.unknown, undefined, from, error),\n ),\n )\n }\n const result = await navigateWithTarget({\n mode: 'push',\n target,\n from,\n nativeRouter,\n routeResolveCodec,\n namedRouteLookup,\n beforeEachGuards,\n beforeResolveGuards,\n maxRedirects,\n tabBarPathSet,\n resolveWithCodec,\n })\n return settleNavigationResult(result)\n }\n\n async function replace(to: RouteLocationRaw): Promise<void | NavigationFailure> {\n const from = snapshotRouteLocation(route)\n let target: RouteLocationNormalizedLoaded\n try {\n target = resolveWithCodec(to, from.path)\n }\n catch (error) {\n return settleNavigationResult(\n createNavigationRunResult(\n 'replace',\n from,\n undefined,\n createNavigationFailure(NavigationFailureType.unknown, undefined, from, error),\n ),\n )\n }\n const result = await navigateWithTarget({\n mode: 'replace',\n target,\n from,\n nativeRouter,\n routeResolveCodec,\n namedRouteLookup,\n beforeEachGuards,\n beforeResolveGuards,\n maxRedirects,\n tabBarPathSet,\n resolveWithCodec,\n })\n return settleNavigationResult(result)\n }\n\n async function back(delta = 1): Promise<void | NavigationFailure> {\n const from = snapshotRouteLocation(route)\n const beforeEachResult = await runNavigationGuards(beforeEachGuards, {\n mode: 'back',\n from,\n nativeRouter: nativeRouter as any,\n }, resolveWithCodec)\n if (beforeEachResult.status === 'failure') {\n return settleNavigationResult(createNavigationRunResult('back', from, undefined, beforeEachResult.failure))\n }\n if (beforeEachResult.status === 'redirect') {\n return settleNavigationResult(\n createNavigationRunResult(\n 'back',\n from,\n undefined,\n createNavigationFailure(\n NavigationFailureType.aborted,\n undefined,\n from,\n 'Redirect is not supported in back navigation guards',\n ),\n ),\n )\n }\n\n const beforeResolveResult = await runNavigationGuards(beforeResolveGuards, {\n mode: 'back',\n from,\n nativeRouter: nativeRouter as any,\n }, resolveWithCodec)\n if (beforeResolveResult.status === 'failure') {\n return settleNavigationResult(createNavigationRunResult('back', from, undefined, beforeResolveResult.failure))\n }\n if (beforeResolveResult.status === 'redirect') {\n return settleNavigationResult(\n createNavigationRunResult(\n 'back',\n from,\n undefined,\n createNavigationFailure(\n NavigationFailureType.aborted,\n undefined,\n from,\n 'Redirect is not supported in back navigation guards',\n ),\n ),\n )\n }\n\n const result = await executeNavigationMethod(\n nativeRouter.navigateBack as (options: Record<string, any>) => unknown,\n { delta },\n undefined,\n from,\n )\n const runResult = isNavigationFailure(result)\n ? createNavigationRunResult('back', from, undefined, result)\n : createNavigationRunResult('back', from)\n return settleNavigationResult(runResult)\n }\n\n async function go(delta: number): Promise<void | NavigationFailure> {\n if (delta < 0) {\n return back(Math.abs(delta))\n }\n if (delta === 0) {\n return undefined\n }\n const from = snapshotRouteLocation(route)\n return settleNavigationResult(\n createNavigationRunResult(\n 'back',\n from,\n undefined,\n createForwardNotSupportedFailure(from),\n ),\n )\n }\n\n async function forward(): Promise<void | NavigationFailure> {\n return go(1)\n }\n\n return {\n push,\n replace,\n back,\n go,\n forward,\n }\n}\n","import type { RouteResolveCodec } from '../routerInternal/shared'\nimport type { RouteLocationNormalizedLoaded, RouteLocationRaw } from './types'\nimport {\n createRouteLocation,\n normalizeHash,\n normalizeQuery,\n normalizeRouteParams,\n parsePathInput,\n parseQuery,\n resolvePath,\n stringifyQuery,\n} from '../routerInternal/shared'\n\nexport const DEFAULT_ROUTE_RESOLVE_CODEC: RouteResolveCodec = {\n parseQuery,\n stringifyQuery,\n}\n\nexport function resolveRouteLocation(\n to: RouteLocationRaw,\n currentPath = '',\n codec: RouteResolveCodec = DEFAULT_ROUTE_RESOLVE_CODEC,\n): RouteLocationNormalizedLoaded {\n if (typeof to === 'string') {\n const parsed = parsePathInput(to, codec)\n const path = resolvePath(parsed.path, currentPath)\n return createRouteLocation(path, parsed.query, parsed.hash, undefined, {}, codec.stringifyQuery)\n }\n\n const parsedFromFullPath = typeof to.fullPath === 'string'\n ? parsePathInput(to.fullPath, codec)\n : undefined\n\n const rawPath = to.path ?? parsedFromFullPath?.path ?? currentPath\n const path = resolvePath(rawPath, currentPath)\n const query = to.query\n ? normalizeQuery(to.query)\n : parsedFromFullPath?.query ?? {}\n const hash = normalizeHash(to.hash ?? parsedFromFullPath?.hash)\n const name = typeof to.name === 'string' ? to.name : undefined\n const params = to.params\n ? normalizeRouteParams(to.params)\n : {}\n\n return createRouteLocation(path, query, hash, name, params, codec.stringifyQuery)\n}\n","import type {\n NamedRouteLookup,\n RouteRecordNormalized,\n} from '../routerInternal/shared'\nimport type { AddRoute, RouteRecordRaw } from './types'\nimport {\n assertValidAddRouteInput,\n cloneRouteMeta,\n collectRouteNamesForRemoval,\n createAbsoluteRoutePath,\n createNamedRouteNameByStaticPath,\n flattenNamedRouteRecords,\n normalizeRouteRecordRaw,\n warnRouteConfig,\n} from '../routerInternal/shared'\n\nfunction normalizeRouteRecordForOutput(record: RouteRecordNormalized): RouteRecordRaw {\n const normalizedRoute: RouteRecordRaw = {\n name: record.name,\n path: record.path ? `/${record.path}` : '/',\n }\n if (record.meta !== undefined) {\n normalizedRoute.meta = cloneRouteMeta(record.meta)\n }\n if (record.aliasPaths.length === 1) {\n normalizedRoute.alias = createAbsoluteRoutePath(record.aliasPaths[0])\n }\n else if (record.aliasPaths.length > 1) {\n normalizedRoute.alias = record.aliasPaths.map(aliasPath => createAbsoluteRoutePath(aliasPath))\n }\n if (record.beforeEnterGuards.length === 1) {\n normalizedRoute.beforeEnter = record.beforeEnterGuards[0]\n }\n else if (record.beforeEnterGuards.length > 1) {\n normalizedRoute.beforeEnter = record.beforeEnterGuards.slice()\n }\n if (record.redirect !== undefined) {\n normalizedRoute.redirect = record.redirect\n }\n return normalizedRoute\n}\n\nexport function createRouteRegistry(namedRouteLookup: NamedRouteLookup) {\n const hasRoute = (name: string) => namedRouteLookup.recordByName.has(name)\n const getRoutes = (): readonly RouteRecordRaw[] =>\n Array.from(namedRouteLookup.recordByName.values(), normalizeRouteRecordForOutput)\n\n const addRoute: AddRoute = ((parentNameOrRoute: string | RouteRecordRaw, maybeRoute?: RouteRecordRaw) => {\n const route = typeof parentNameOrRoute === 'string'\n ? maybeRoute\n : parentNameOrRoute\n if (!route) {\n throw new Error('Route record is required when adding a child route')\n }\n assertValidAddRouteInput(route)\n\n const parentRouteName = typeof parentNameOrRoute === 'string'\n ? parentNameOrRoute\n : undefined\n const parentRouteRecord = parentRouteName\n ? namedRouteLookup.recordByName.get(parentRouteName)\n : undefined\n if (parentRouteName && !parentRouteRecord) {\n throw new Error(`Parent route \"${parentRouteName}\" is not defined in createRouter({ routes | namedRoutes })`)\n }\n\n const routeRecords = flattenNamedRouteRecords(\n [route],\n parentRouteRecord?.path,\n parentRouteName,\n parentRouteRecord?.aliasPaths,\n undefined,\n 'addRoute',\n )\n if (routeRecords.length === 0) {\n throw new Error('Route name and path are required when adding a named route')\n }\n const addedRoutes: RouteRecordNormalized[] = []\n for (const routeRecord of routeRecords) {\n const normalizedRoute = normalizeRouteRecordRaw(routeRecord.route, routeRecord.parentName)\n if (!normalizedRoute) {\n continue\n }\n const existingRoute = namedRouteLookup.recordByName.get(normalizedRoute.name)\n if (existingRoute) {\n const namesToRemove = collectRouteNamesForRemoval(existingRoute.name, namedRouteLookup.recordByName)\n for (const routeName of namesToRemove) {\n namedRouteLookup.recordByName.delete(routeName)\n }\n warnRouteConfig(\n `addRoute() replaced existing route \"${normalizedRoute.name}\" (${createAbsoluteRoutePath(existingRoute.path)} -> ${createAbsoluteRoutePath(normalizedRoute.path)}) and removed ${namesToRemove.size - 1} nested route(s)`,\n )\n }\n namedRouteLookup.recordByName.set(normalizedRoute.name, normalizedRoute)\n addedRoutes.push(normalizedRoute)\n }\n namedRouteLookup.nameByStaticPath = createNamedRouteNameByStaticPath(namedRouteLookup.recordByName)\n\n return () => {\n let changed = false\n for (const addedRoute of addedRoutes) {\n const currentRoute = namedRouteLookup.recordByName.get(addedRoute.name)\n if (currentRoute === addedRoute) {\n namedRouteLookup.recordByName.delete(addedRoute.name)\n changed = true\n }\n }\n if (changed) {\n namedRouteLookup.nameByStaticPath = createNamedRouteNameByStaticPath(namedRouteLookup.recordByName)\n }\n }\n }) as AddRoute\n\n function removeRoute(name: string): void {\n const namesToRemove = collectRouteNamesForRemoval(name, namedRouteLookup.recordByName)\n if (namesToRemove.size === 0) {\n return\n }\n\n let changed = false\n for (const routeName of namesToRemove) {\n changed = namedRouteLookup.recordByName.delete(routeName) || changed\n }\n if (changed) {\n namedRouteLookup.nameByStaticPath = createNamedRouteNameByStaticPath(namedRouteLookup.recordByName)\n }\n }\n\n function clearRoutes(): void {\n namedRouteLookup.recordByName.clear()\n namedRouteLookup.nameByStaticPath.clear()\n }\n\n return {\n hasRoute,\n getRoutes,\n addRoute,\n removeRoute,\n clearRoutes,\n }\n}\n","import type { MiniProgramPageLifetime } from '../runtime/types'\nimport type { SetupContextRouter } from '../runtime/types/props'\nimport type { LocationQueryRaw, RouteLocationNormalizedLoaded } from './types'\nimport { reactive, readonly } from '../reactivity'\nimport { resolveCurrentRoute } from '../routerInternal/shared'\nimport { getCurrentSetupContext, onLoad, onReady, onRouteDone, onShow } from '../runtime/hooks'\nimport {\n useNativePageRouter as useNativePageRouterInternal,\n useNativeRouter as useNativeRouterInternal,\n} from '../runtime/vueCompat'\n\nexport function useRoute(): Readonly<RouteLocationNormalizedLoaded> {\n const setupContext = getCurrentSetupContext()\n if (!setupContext) {\n throw new Error('useRoute() 必须在 setup() 的同步阶段调用')\n }\n\n const fallbackPage = setupContext.instance\n const currentRoute = resolveCurrentRoute(undefined, fallbackPage)\n const routeState = reactive<RouteLocationNormalizedLoaded>({\n path: currentRoute.path,\n fullPath: currentRoute.fullPath,\n query: currentRoute.query,\n hash: currentRoute.hash,\n params: currentRoute.params,\n name: currentRoute.name,\n })\n if (currentRoute.meta !== undefined) {\n routeState.meta = currentRoute.meta\n }\n\n function syncRoute(queryOverride?: LocationQueryRaw) {\n const nextRoute = resolveCurrentRoute(queryOverride, fallbackPage)\n routeState.path = nextRoute.path\n routeState.fullPath = nextRoute.fullPath\n routeState.query = nextRoute.query\n routeState.hash = nextRoute.hash\n if (nextRoute.meta === undefined) {\n delete (routeState as Partial<RouteLocationNormalizedLoaded>).meta\n }\n else {\n routeState.meta = nextRoute.meta\n }\n routeState.params = nextRoute.params\n routeState.name = nextRoute.name\n }\n\n onLoad((query: Parameters<NonNullable<MiniProgramPageLifetime['onLoad']>>[0]) => {\n syncRoute(query as unknown as LocationQueryRaw)\n })\n onReady(() => {\n syncRoute()\n })\n onShow(() => {\n syncRoute()\n })\n onRouteDone(() => {\n syncRoute()\n })\n\n return readonly(routeState) as Readonly<RouteLocationNormalizedLoaded>\n}\n\n/**\n * @description 获取当前组件路径语义的原生 Router\n */\nexport function useNativeRouter(): SetupContextRouter {\n return useNativeRouterInternal()\n}\n\n/**\n * @description 获取当前页面路径语义的原生 Page Router\n */\nexport function useNativePageRouter(): SetupContextRouter {\n return useNativePageRouterInternal()\n}\n","import type { RouteResolveCodec } from '../routerInternal/shared'\nimport type {\n NavigationAfterEach,\n NavigationErrorHandler,\n NavigationGuard,\n RouteLocationNormalizedLoaded,\n RouteLocationRaw,\n RouterNavigation,\n UseRouterOptions,\n} from './types'\nimport {\n cloneRouteMeta,\n cloneRouteParams,\n createNamedRouteLookup,\n createRouterOptionsSnapshot,\n mergeMatchedRouteMeta,\n normalizeRouteRecordMatched,\n parseQuery,\n resolveMatchedRouteRecord,\n resolveNamedRouteLocation,\n resolvePath,\n resolveRouteOptionEntries,\n stringifyQuery,\n warnDuplicateRouteEntries,\n} from '../routerInternal/shared'\nimport { setActiveRouter } from './instance'\nimport { createNavigationApi } from './navigationApi'\nimport { createNavigationResultController } from './navigationResult'\nimport { resolveRouteLocation } from './resolve'\nimport { createRouteRegistry } from './routeRegistry'\nimport { useNativeRouter, useRoute } from './useRoute'\n\n/**\n * @description 创建高阶路由导航器(对齐 Vue Router 的 createRouter 心智)\n */\nexport function createRouter(options: UseRouterOptions = {}): RouterNavigation {\n const nativeRouter = useNativeRouter()\n const route = useRoute()\n const beforeEachGuards = new Set<NavigationGuard>()\n const beforeResolveGuards = new Set<NavigationGuard>()\n const afterEachHooks = new Set<NavigationAfterEach>()\n const errorHandlers = new Set<NavigationErrorHandler>()\n const maxRedirects = options.maxRedirects ?? 10\n const paramsMode = options.paramsMode ?? 'loose'\n const rejectOnError = options.rejectOnError ?? true\n const routeResolveCodec: RouteResolveCodec = {\n parseQuery: options.parseQuery ?? parseQuery,\n stringifyQuery: options.stringifyQuery ?? stringifyQuery,\n }\n const readyPromise = Promise.resolve()\n const routeEntries = resolveRouteOptionEntries(options)\n warnDuplicateRouteEntries(routeEntries)\n const namedRouteLookup = createNamedRouteLookup(routeEntries)\n const normalizedTabBarEntries = (options.tabBarEntries ?? [])\n .map(path => resolvePath(path, ''))\n .filter(Boolean)\n const tabBarPathSet = new Set(normalizedTabBarEntries)\n const routeRegistry = createRouteRegistry(namedRouteLookup)\n const routerOptions = createRouterOptionsSnapshot(\n normalizedTabBarEntries,\n routeRegistry.getRoutes(),\n paramsMode,\n maxRedirects,\n routeResolveCodec,\n rejectOnError,\n )\n\n function resolveWithCodec(to: RouteLocationRaw, currentPath: string): RouteLocationNormalizedLoaded {\n const rawTo = typeof to === 'string'\n ? to\n : resolveNamedRouteLocation(to, namedRouteLookup, paramsMode)\n const resolved = resolveRouteLocation(rawTo, currentPath, routeResolveCodec)\n resolved.href = resolved.fullPath\n const matchedResult = resolveMatchedRouteRecord(resolved, namedRouteLookup)\n if (matchedResult) {\n const matchedRecord = matchedResult.record\n if (resolved.name === undefined) {\n resolved.name = matchedRecord.name\n }\n const mergedRouteMeta = mergeMatchedRouteMeta(matchedResult.matchedRecords)\n if (mergedRouteMeta !== undefined) {\n resolved.meta = cloneRouteMeta(mergedRouteMeta)\n }\n if (matchedResult.params && Object.keys(resolved.params).length === 0) {\n resolved.params = cloneRouteParams(matchedResult.params)\n }\n resolved.matched = matchedResult.matchedRecords.map((record, index, records) => {\n const leafMatchedPath = index === records.length - 1\n ? matchedResult.matchedPath\n : undefined\n return normalizeRouteRecordMatched(record, leafMatchedPath)\n })\n }\n else {\n resolved.matched = []\n }\n return resolved\n }\n\n function resolve(to: RouteLocationRaw): RouteLocationNormalizedLoaded {\n return resolveWithCodec(to, route.path)\n }\n\n const navigationResultController = createNavigationResultController({\n afterEachHooks,\n errorHandlers,\n nativeRouter,\n rejectOnError,\n })\n\n const navigationApi = createNavigationApi({\n nativeRouter,\n route,\n routeResolveCodec,\n namedRouteLookup,\n beforeEachGuards,\n beforeResolveGuards,\n maxRedirects,\n tabBarPathSet,\n resolveWithCodec,\n settleNavigationResult: navigationResultController.settleNavigationResult,\n })\n\n function beforeEach(guard: NavigationGuard): () => void {\n beforeEachGuards.add(guard)\n return () => {\n beforeEachGuards.delete(guard)\n }\n }\n\n function beforeResolve(guard: NavigationGuard): () => void {\n beforeResolveGuards.add(guard)\n return () => {\n beforeResolveGuards.delete(guard)\n }\n }\n\n function afterEach(hook: NavigationAfterEach): () => void {\n afterEachHooks.add(hook)\n return () => {\n afterEachHooks.delete(hook)\n }\n }\n\n function onError(handler: NavigationErrorHandler): () => void {\n errorHandlers.add(handler)\n return () => {\n errorHandlers.delete(handler)\n }\n }\n\n const router: RouterNavigation = {\n nativeRouter,\n options: routerOptions,\n currentRoute: route,\n install(app?: unknown): void {\n setActiveRouter(router)\n const globalProperties = (app as { config?: { globalProperties?: Record<string, unknown> } } | undefined)?.config?.globalProperties\n if (globalProperties) {\n globalProperties.$router = router\n }\n },\n resolve,\n isReady(): Promise<void> {\n return readyPromise\n },\n push: navigationApi.push,\n replace: navigationApi.replace,\n back: navigationApi.back,\n go: navigationApi.go,\n forward: navigationApi.forward,\n hasRoute: routeRegistry.hasRoute,\n getRoutes: routeRegistry.getRoutes,\n addRoute: routeRegistry.addRoute,\n removeRoute: routeRegistry.removeRoute,\n clearRoutes: routeRegistry.clearRoutes,\n beforeEach,\n beforeResolve,\n afterEach,\n onError,\n }\n\n setActiveRouter(router)\n return router\n}\n","import type { RouterNavigation } from './types'\nimport { getActiveRouter } from './instance'\n\n/**\n * @description 获取当前已创建的路由实例。\n */\nexport function useRouter(): RouterNavigation {\n const router = getActiveRouter()\n if (router) {\n return router\n }\n\n throw new Error('useRouter() 未找到已创建的 router 实例。请先在 setup() 中调用 createRouter()。')\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"router.mjs","names":["useNativeRouterInternal","useNativePageRouterInternal"],"sources":["../../src/routerInternal/params.ts","../../src/routerInternal/matching.ts","../../src/routerInternal/recordsWarnings.ts","../../src/routerInternal/records.ts","../../src/routerInternal/snapshots.ts","../../src/router/instance.ts","../../src/router/types.ts","../../src/router/navigationCore.ts","../../src/router/navigationResult.ts","../../src/router/navigationTargetHelpers.ts","../../src/router/navigationTarget.ts","../../src/router/navigationApi.ts","../../src/router/resolve.ts","../../src/router/routeRegistry.ts","../../src/router/useRoute.ts","../../src/router/createRouter.ts","../../src/router/useRouter.ts"],"sourcesContent":["import type {\n RouteLocationRaw,\n RouteParams,\n RouteParamsMode,\n RouteParamValue,\n} from '../router'\nimport type {\n NamedRouteLookup,\n NamedRoutePathResolveResult,\n PathParamToken,\n} from './types'\nimport { normalizeRouteParams } from './query'\n\nconst PATH_PARAM_TOKEN_RE = /^:(\\w+)(?:\\([^)]*\\))?([+*?])?$/\n\nexport function parsePathParamToken(segment: string): PathParamToken | undefined {\n const match = PATH_PARAM_TOKEN_RE.exec(segment)\n if (!match) {\n return undefined\n }\n\n return {\n key: match[1],\n modifier: (match[2] ?? '') as PathParamToken['modifier'],\n }\n}\n\nfunction normalizePathParamValues(value: RouteParamValue | RouteParamValue[] | undefined): RouteParamValue[] {\n if (value === undefined) {\n return []\n }\n if (Array.isArray(value)) {\n return value\n }\n return [value]\n}\n\nfunction stringifyPathParamSegment(value: RouteParamValue): string {\n return encodeURIComponent(value)\n}\n\nexport function decodeRouteParamSegment(value: string): string {\n try {\n return decodeURIComponent(value)\n }\n catch {\n return value\n }\n}\n\nfunction resolveNamedRoutePath(pathTemplate: string, params: RouteParams, routeName: string): NamedRoutePathResolveResult {\n const resolvedSegments: string[] = []\n const consumedKeys = new Set<string>()\n for (const rawSegment of pathTemplate.split('/')) {\n if (!rawSegment) {\n continue\n }\n\n const token = parsePathParamToken(rawSegment)\n if (!token) {\n resolvedSegments.push(rawSegment)\n continue\n }\n\n const values = normalizePathParamValues(params[token.key])\n if (token.modifier === '') {\n if (values.length !== 1) {\n throw new Error(`Missing required param \"${token.key}\" for named route \"${routeName}\"`)\n }\n consumedKeys.add(token.key)\n resolvedSegments.push(stringifyPathParamSegment(values[0]))\n continue\n }\n\n if (token.modifier === '?') {\n if (values.length === 0) {\n continue\n }\n if (values.length > 1) {\n throw new Error(`Param \"${token.key}\" for named route \"${routeName}\" must be a single value`)\n }\n consumedKeys.add(token.key)\n resolvedSegments.push(stringifyPathParamSegment(values[0]))\n continue\n }\n\n if (token.modifier === '+') {\n if (values.length === 0) {\n throw new Error(`Missing required repeatable param \"${token.key}\" for named route \"${routeName}\"`)\n }\n consumedKeys.add(token.key)\n for (const value of values) {\n resolvedSegments.push(stringifyPathParamSegment(value))\n }\n continue\n }\n\n if (values.length > 0) {\n consumedKeys.add(token.key)\n }\n for (const value of values) {\n resolvedSegments.push(stringifyPathParamSegment(value))\n }\n }\n\n return {\n path: resolvedSegments.join('/'),\n consumedKeys,\n }\n}\n\nfunction hasNonEmptyRouteParamValue(value: RouteParamValue | RouteParamValue[] | undefined): boolean {\n if (value === undefined) {\n return false\n }\n if (Array.isArray(value)) {\n return value.length > 0\n }\n return true\n}\n\nfunction assertNoUnexpectedNamedRouteParams(\n params: RouteParams,\n consumedKeys: ReadonlySet<string>,\n routeName: string,\n) {\n const unexpectedKeys = Object.keys(params)\n .filter(key => !consumedKeys.has(key))\n .filter(key => hasNonEmptyRouteParamValue(params[key]))\n\n if (unexpectedKeys.length === 0) {\n return\n }\n\n throw new Error(`Unexpected params for named route \"${routeName}\": ${unexpectedKeys.join(', ')}`)\n}\n\nexport function resolveNamedRouteLocation(\n to: Extract<RouteLocationRaw, Record<string, unknown>>,\n lookup: NamedRouteLookup,\n paramsMode: RouteParamsMode,\n): Extract<RouteLocationRaw, Record<string, unknown>> {\n const routeName = to.name\n if (typeof routeName !== 'string' || !routeName) {\n return to\n }\n if (to.path !== undefined || to.fullPath !== undefined) {\n return to\n }\n\n const routeRecord = lookup.recordByName.get(routeName)\n if (!routeRecord) {\n throw new Error(`Named route \"${routeName}\" is not defined in createRouter({ routes | namedRoutes })`)\n }\n\n const params = to.params\n ? normalizeRouteParams(to.params)\n : {}\n const resolvedResult = resolveNamedRoutePath(routeRecord.path, params, routeName)\n if (paramsMode === 'strict') {\n assertNoUnexpectedNamedRouteParams(params, resolvedResult.consumedKeys, routeName)\n }\n\n return {\n ...to,\n path: resolvedResult.path ? `/${resolvedResult.path}` : '/',\n params,\n }\n}\n","import type {\n RouteLocationNormalizedLoaded,\n RouteMeta,\n RouteParams,\n} from '../router'\nimport type {\n MatchedRouteRecordResolveResult,\n NamedRouteLookup,\n RouteRecordNormalized,\n} from './types'\nimport { decodeRouteParamSegment, parsePathParamToken } from './params'\nimport { isDynamicRoutePath } from './path'\n\nfunction splitRoutePathSegments(path: string): string[] {\n return path.split('/').filter(Boolean)\n}\n\nfunction listRouteRecordMatchPaths(record: RouteRecordNormalized): readonly string[] {\n return [record.path, ...record.aliasPaths]\n}\n\nfunction resolveMatchedRouteRecordChain(\n record: RouteRecordNormalized,\n lookup: NamedRouteLookup,\n): RouteRecordNormalized[] {\n const matchedRecords: RouteRecordNormalized[] = []\n const visitedNames = new Set<string>()\n let currentRecord: RouteRecordNormalized | undefined = record\n\n while (currentRecord) {\n if (visitedNames.has(currentRecord.name)) {\n break\n }\n visitedNames.add(currentRecord.name)\n matchedRecords.unshift(currentRecord)\n if (!currentRecord.parentName) {\n break\n }\n currentRecord = lookup.recordByName.get(currentRecord.parentName)\n }\n\n return matchedRecords\n}\n\nexport function mergeMatchedRouteMeta(matchedRecords: readonly RouteRecordNormalized[]): RouteMeta | undefined {\n let mergedRouteMeta: RouteMeta | undefined\n for (const matchedRecord of matchedRecords) {\n if (!matchedRecord.meta) {\n continue\n }\n if (!mergedRouteMeta) {\n mergedRouteMeta = {}\n }\n Object.assign(mergedRouteMeta, matchedRecord.meta)\n }\n return mergedRouteMeta\n}\n\nexport function collectRouteNamesForRemoval(\n routeName: string,\n recordByName: ReadonlyMap<string, RouteRecordNormalized>,\n): Set<string> {\n const namesToRemove = new Set<string>()\n if (!recordByName.has(routeName)) {\n return namesToRemove\n }\n\n namesToRemove.add(routeName)\n let expanded = true\n while (expanded) {\n expanded = false\n for (const [name, record] of recordByName.entries()) {\n if (!record.parentName || namesToRemove.has(name)) {\n continue\n }\n if (namesToRemove.has(record.parentName)) {\n namesToRemove.add(name)\n expanded = true\n }\n }\n }\n\n return namesToRemove\n}\n\nfunction buildRouteParamsFromMatch(matchValues: ReadonlyMap<string, string[]>): RouteParams {\n const params: RouteParams = {}\n for (const [key, values] of matchValues.entries()) {\n if (values.length === 0) {\n continue\n }\n params[key] = values.length === 1 ? values[0] : values\n }\n return params\n}\n\nfunction matchRoutePathParams(pathTemplate: string, targetPath: string): RouteParams | undefined {\n const templateSegments = splitRoutePathSegments(pathTemplate)\n const targetSegments = splitRoutePathSegments(targetPath)\n const matchedValues = new Map<string, string[]>()\n\n const pushValue = (key: string, value: string) => {\n const previous = matchedValues.get(key)\n if (previous) {\n previous.push(value)\n return\n }\n matchedValues.set(key, [value])\n }\n\n const popValue = (key: string) => {\n const previous = matchedValues.get(key)\n if (!previous || previous.length === 0) {\n return\n }\n previous.pop()\n if (previous.length === 0) {\n matchedValues.delete(key)\n }\n }\n\n const consumeRepeatableToken = (key: string, startIndex: number, count: number): () => void => {\n for (let index = 0; index < count; index += 1) {\n pushValue(key, decodeRouteParamSegment(targetSegments[startIndex + index]))\n }\n return () => {\n for (let index = 0; index < count; index += 1) {\n popValue(key)\n }\n }\n }\n\n const matchRecursively = (templateIndex: number, targetIndex: number): boolean => {\n if (templateIndex >= templateSegments.length) {\n return targetIndex >= targetSegments.length\n }\n\n const templateSegment = templateSegments[templateIndex]\n const token = parsePathParamToken(templateSegment)\n if (!token) {\n if (targetIndex >= targetSegments.length || templateSegment !== targetSegments[targetIndex]) {\n return false\n }\n return matchRecursively(templateIndex + 1, targetIndex + 1)\n }\n\n if (token.modifier === '') {\n if (targetIndex >= targetSegments.length) {\n return false\n }\n pushValue(token.key, decodeRouteParamSegment(targetSegments[targetIndex]))\n const matched = matchRecursively(templateIndex + 1, targetIndex + 1)\n if (!matched) {\n popValue(token.key)\n }\n return matched\n }\n\n if (token.modifier === '?') {\n if (targetIndex < targetSegments.length) {\n pushValue(token.key, decodeRouteParamSegment(targetSegments[targetIndex]))\n const consumeMatched = matchRecursively(templateIndex + 1, targetIndex + 1)\n if (consumeMatched) {\n return true\n }\n popValue(token.key)\n }\n return matchRecursively(templateIndex + 1, targetIndex)\n }\n\n const minimumCount = token.modifier === '+' ? 1 : 0\n const maximumCount = targetSegments.length - targetIndex\n\n for (let count = maximumCount; count >= minimumCount; count -= 1) {\n const rollback = consumeRepeatableToken(token.key, targetIndex, count)\n const matched = matchRecursively(templateIndex + 1, targetIndex + count)\n if (matched) {\n return true\n }\n rollback()\n }\n\n return false\n }\n\n if (!matchRecursively(0, 0)) {\n return undefined\n }\n\n return buildRouteParamsFromMatch(matchedValues)\n}\n\nexport function resolveMatchedRouteRecord(\n target: RouteLocationNormalizedLoaded,\n lookup: NamedRouteLookup,\n): MatchedRouteRecordResolveResult | undefined {\n if (target.name) {\n const byName = lookup.recordByName.get(target.name)\n if (byName) {\n return {\n record: byName,\n matchedRecords: resolveMatchedRouteRecordChain(byName, lookup),\n }\n }\n }\n\n const staticNamedRoute = lookup.nameByStaticPath.get(target.path)\n if (staticNamedRoute) {\n const record = lookup.recordByName.get(staticNamedRoute)\n if (record) {\n return {\n record,\n matchedRecords: resolveMatchedRouteRecordChain(record, lookup),\n matchedPath: target.path,\n }\n }\n }\n\n for (const record of lookup.recordByName.values()) {\n for (const routePath of listRouteRecordMatchPaths(record)) {\n if (!isDynamicRoutePath(routePath)) {\n continue\n }\n const matchedParams = matchRoutePathParams(routePath, target.path)\n if (!matchedParams) {\n continue\n }\n return {\n record,\n matchedRecords: resolveMatchedRouteRecordChain(record, lookup),\n matchedPath: routePath,\n params: matchedParams,\n }\n }\n }\n\n return undefined\n}\n","import type { RouteRecordRaw } from '../router'\nimport type { FlattenedRouteRecordSeed, RouteOptionSource } from './types'\nimport { createAbsoluteRoutePath, resolvePath } from './path'\n\nexport function warnRouteConfig(message: string): void {\n // eslint-disable-next-line no-console\n if (typeof console === 'undefined' || typeof console.warn !== 'function') {\n return\n }\n // eslint-disable-next-line no-console\n console.warn(`[wevu/router] ${message}`)\n}\n\nfunction formatRoutePathForWarning(path: string): string {\n const normalizedPath = resolvePath(path, '')\n if (!normalizedPath) {\n return '/'\n }\n return createAbsoluteRoutePath(normalizedPath)\n}\n\nfunction hasCircularChildrenReference(\n routeRecord: RouteRecordRaw,\n ancestorRecords: ReadonlySet<RouteRecordRaw> = new Set<RouteRecordRaw>(),\n): boolean {\n if (ancestorRecords.has(routeRecord)) {\n return true\n }\n\n if (!Array.isArray(routeRecord.children) || routeRecord.children.length === 0) {\n return false\n }\n\n const nextAncestorRecords = new Set(ancestorRecords)\n nextAncestorRecords.add(routeRecord)\n for (const childRecord of routeRecord.children) {\n if (hasCircularChildrenReference(childRecord, nextAncestorRecords)) {\n return true\n }\n }\n\n return false\n}\n\nexport function assertValidAddRouteInput(routeRecord: RouteRecordRaw): void {\n const routeName = typeof routeRecord.name === 'string'\n ? routeRecord.name.trim()\n : ''\n if (!routeName) {\n throw new Error('Route name is required when adding a named route')\n }\n if (typeof routeRecord.path !== 'string' || !routeRecord.path) {\n throw new Error(`Route path is required when adding named route \"${routeName}\"`)\n }\n if (hasCircularChildrenReference(routeRecord)) {\n throw new Error(`Circular children reference detected when adding named route \"${routeName}\"`)\n }\n}\n\nexport function warnDuplicateRouteEntries(routeEntries: readonly FlattenedRouteRecordSeed[]): void {\n const latestRouteInfoByName = new Map<string, { source: RouteOptionSource, path: string }>()\n const duplicateMessages: string[] = []\n\n for (const routeEntry of routeEntries) {\n const routeName = typeof routeEntry.route.name === 'string'\n ? routeEntry.route.name.trim()\n : ''\n if (!routeName) {\n continue\n }\n\n const currentSource = routeEntry.source ?? 'namedRoutes'\n const currentPath = formatRoutePathForWarning(routeEntry.route.path)\n const previousInfo = latestRouteInfoByName.get(routeName)\n if (previousInfo) {\n duplicateMessages.push(`\"${routeName}\" (${previousInfo.source}:${previousInfo.path} -> ${currentSource}:${currentPath})`)\n }\n latestRouteInfoByName.set(routeName, {\n source: currentSource,\n path: currentPath,\n })\n }\n\n if (duplicateMessages.length === 0) {\n return\n }\n\n warnRouteConfig(`duplicate route names detected, later entries override earlier ones: ${duplicateMessages.join(', ')}`)\n}\n","import type {\n NamedRoutes,\n NavigationGuard,\n RouteRecordInput,\n RouteRecordRaw,\n UseRouterOptions,\n} from '../router'\nimport type {\n FlattenedRouteRecordSeed,\n NamedRouteLookup,\n RouteOptionSource,\n RouteRecordNormalized,\n} from './types'\nimport { createAbsoluteRoutePath, isDynamicRoutePath, resolvePath } from './path'\nimport { warnRouteConfig } from './recordsWarnings'\n\nfunction normalizeBeforeEnterGuards(beforeEnter?: RouteRecordRaw['beforeEnter']): readonly NavigationGuard[] {\n if (!beforeEnter) {\n return []\n }\n if (Array.isArray(beforeEnter)) {\n return beforeEnter as readonly NavigationGuard[]\n }\n return [beforeEnter as NavigationGuard]\n}\n\nfunction resolveRouteRecordName(\n route: RouteRecordInput,\n normalizedPath: string,\n source: RouteOptionSource = 'namedRoutes',\n): string {\n if (typeof route.name === 'string' && route.name.trim()) {\n return route.name.trim()\n }\n\n if (source === 'routes') {\n return normalizedPath || '/'\n }\n\n return ''\n}\n\nfunction normalizeRouteRecordAliasPaths(\n alias: RouteRecordRaw['alias'],\n normalizedPath: string,\n): readonly string[] {\n if (!alias) {\n return []\n }\n const aliasList = Array.isArray(alias)\n ? alias\n : [alias]\n\n const normalizedAliasPaths: string[] = []\n for (const aliasPath of aliasList) {\n if (typeof aliasPath !== 'string') {\n continue\n }\n const normalizedAliasPath = resolvePath(aliasPath, '')\n if (!normalizedAliasPath || normalizedAliasPath === normalizedPath) {\n continue\n }\n if (!normalizedAliasPaths.includes(normalizedAliasPath)) {\n normalizedAliasPaths.push(normalizedAliasPath)\n }\n }\n\n return normalizedAliasPaths\n}\n\nexport function normalizeRouteRecordRaw(\n route: RouteRecordInput,\n parentName?: string,\n source: RouteOptionSource = 'namedRoutes',\n): RouteRecordNormalized | undefined {\n const normalizedPath = resolvePath(route.path, '')\n if (!normalizedPath && route.path !== '/') {\n return undefined\n }\n\n const routeName = resolveRouteRecordName(route, normalizedPath, source)\n if (!routeName) {\n return undefined\n }\n const aliasPaths = normalizeRouteRecordAliasPaths(route.alias, normalizedPath)\n\n return {\n name: routeName,\n path: normalizedPath,\n aliasPaths,\n parentName,\n meta: route.meta,\n beforeEnterGuards: normalizeBeforeEnterGuards(route.beforeEnter),\n redirect: route.redirect,\n }\n}\n\nfunction normalizeNestedRoutePath(path: string, parentPath?: string): string {\n if (!parentPath || path.startsWith('/')) {\n return resolvePath(path, '')\n }\n return resolvePath(`${createAbsoluteRoutePath(parentPath)}/${path}`, '')\n}\n\nfunction normalizeAliasInputList(alias: RouteRecordRaw['alias']): string[] {\n if (!alias) {\n return []\n }\n if (Array.isArray(alias)) {\n return alias.filter((item): item is string => typeof item === 'string' && item.length > 0)\n }\n return typeof alias === 'string' && alias.length > 0\n ? [alias]\n : []\n}\n\nfunction mergeAliasPaths(aliasPaths: readonly string[]): string[] {\n const mergedAliasPaths: string[] = []\n for (const aliasPath of aliasPaths) {\n if (!aliasPath || mergedAliasPaths.includes(aliasPath)) {\n continue\n }\n mergedAliasPaths.push(aliasPath)\n }\n return mergedAliasPaths\n}\n\nexport function createRouteRecordAliasValue(aliasPaths: readonly string[]): RouteRecordRaw['alias'] {\n if (aliasPaths.length === 0) {\n return undefined\n }\n if (aliasPaths.length === 1) {\n return createAbsoluteRoutePath(aliasPaths[0])\n }\n return aliasPaths.map(aliasPath => createAbsoluteRoutePath(aliasPath))\n}\n\nexport function flattenNamedRouteRecords(\n records: readonly RouteRecordInput[],\n parentPath?: string,\n parentName?: string,\n parentAliasPaths: readonly string[] = [],\n source?: RouteOptionSource,\n pathPrefix = 'namedRoutes',\n ancestorRecords: ReadonlySet<RouteRecordInput> = new Set<RouteRecordInput>(),\n): FlattenedRouteRecordSeed[] {\n const flattenedRecords: FlattenedRouteRecordSeed[] = []\n\n for (const [index, record] of records.entries()) {\n const routeConfigPath = `${pathPrefix}[${index}]`\n if (ancestorRecords.has(record)) {\n warnRouteConfig(`ignored route record at ${routeConfigPath}: detected circular children reference`)\n continue\n }\n\n if (typeof record.path !== 'string' || !record.path) {\n const routeName = typeof record?.name === 'string'\n ? record.name.trim()\n : ''\n warnRouteConfig(`ignored route record \"${routeName}\" at ${routeConfigPath}: route path is required`)\n continue\n }\n\n const normalizedPath = normalizeNestedRoutePath(record.path, parentPath)\n const routeName = resolveRouteRecordName(record, normalizedPath, source)\n if (!routeName) {\n warnRouteConfig(`ignored route record at ${routeConfigPath}: route name is required`)\n continue\n }\n const normalizedDirectAliasPaths: string[] = []\n const directAliasByNormalizedPath = new Map<string, string>()\n for (const rawAliasPath of normalizeAliasInputList(record.alias)) {\n const normalizedAliasPath = normalizeNestedRoutePath(rawAliasPath, parentPath)\n if (!normalizedAliasPath) {\n continue\n }\n if (normalizedAliasPath === normalizedPath) {\n warnRouteConfig(`ignored alias \"${createAbsoluteRoutePath(normalizedAliasPath)}\" for route \"${routeName}\" at ${routeConfigPath}: alias is same as route path`)\n continue\n }\n\n const duplicateAliasPath = directAliasByNormalizedPath.get(normalizedAliasPath)\n if (duplicateAliasPath) {\n warnRouteConfig(\n `ignored duplicate alias \"${createAbsoluteRoutePath(normalizedAliasPath)}\" for route \"${routeName}\" at ${routeConfigPath}: already declared by \"${duplicateAliasPath}\"`,\n )\n continue\n }\n\n directAliasByNormalizedPath.set(normalizedAliasPath, rawAliasPath)\n normalizedDirectAliasPaths.push(normalizedAliasPath)\n }\n const normalizedInheritedAliasPaths = record.path.startsWith('/')\n ? []\n : parentAliasPaths\n .map(parentAliasPath => normalizeNestedRoutePath(record.path, parentAliasPath))\n .filter(Boolean)\n .filter(aliasPath => aliasPath !== normalizedPath)\n const normalizedAliasPaths = mergeAliasPaths([\n ...normalizedDirectAliasPaths,\n ...normalizedInheritedAliasPaths,\n ])\n const normalizedRecord: RouteRecordRaw = {\n name: routeName,\n path: normalizedPath ? createAbsoluteRoutePath(normalizedPath) : '/',\n alias: createRouteRecordAliasValue(normalizedAliasPaths),\n meta: record.meta,\n beforeEnter: record.beforeEnter,\n redirect: record.redirect,\n }\n flattenedRecords.push({\n route: normalizedRecord,\n parentName,\n source,\n })\n\n if (Array.isArray(record.children) && record.children.length > 0) {\n const nextAncestorRecords = new Set(ancestorRecords)\n nextAncestorRecords.add(record)\n flattenedRecords.push(\n ...flattenNamedRouteRecords(\n record.children,\n normalizedPath,\n routeName,\n normalizedAliasPaths,\n source,\n `${routeConfigPath}.children`,\n nextAncestorRecords,\n ),\n )\n }\n }\n\n return flattenedRecords\n}\n\nfunction normalizeNamedRouteEntries(\n namedRoutes?: NamedRoutes | readonly RouteRecordInput[],\n source: RouteOptionSource = 'namedRoutes',\n): FlattenedRouteRecordSeed[] {\n if (!namedRoutes) {\n return []\n }\n\n if (Array.isArray(namedRoutes)) {\n return flattenNamedRouteRecords(namedRoutes, undefined, undefined, [], source, source)\n }\n\n const normalizedEntries: FlattenedRouteRecordSeed[] = []\n for (const [rawName, rawPath] of Object.entries(namedRoutes)) {\n const routeName = typeof rawName === 'string'\n ? rawName.trim()\n : ''\n if (!routeName) {\n warnRouteConfig(`ignored route record at ${source}: route name is required`)\n continue\n }\n if (typeof rawPath !== 'string' || !rawPath) {\n warnRouteConfig(`ignored route record \"${routeName}\" at ${source}: route path is required`)\n continue\n }\n normalizedEntries.push({\n route: {\n name: routeName,\n path: rawPath,\n },\n source,\n })\n }\n\n return normalizedEntries\n}\n\nexport function resolveRouteOptionEntries(options: UseRouterOptions): FlattenedRouteRecordSeed[] {\n return [\n ...normalizeNamedRouteEntries(options.routes, 'routes'),\n ...normalizeNamedRouteEntries(options.namedRoutes, 'namedRoutes'),\n ]\n}\n\nexport function createNamedRouteNameByStaticPath(recordByName: ReadonlyMap<string, RouteRecordNormalized>): Map<string, string> {\n const nameByStaticPath = new Map<string, string>()\n for (const [name, record] of recordByName.entries()) {\n if (!isDynamicRoutePath(record.path) && !nameByStaticPath.has(record.path)) {\n nameByStaticPath.set(record.path, name)\n }\n for (const aliasPath of record.aliasPaths) {\n if (!isDynamicRoutePath(aliasPath) && !nameByStaticPath.has(aliasPath)) {\n nameByStaticPath.set(aliasPath, name)\n }\n }\n }\n return nameByStaticPath\n}\n\nexport function createNamedRouteLookup(routeEntries: readonly FlattenedRouteRecordSeed[]): NamedRouteLookup {\n const recordByName = new Map<string, RouteRecordNormalized>()\n\n for (const routeRecord of routeEntries) {\n const normalizedRecord = normalizeRouteRecordRaw(\n routeRecord.route,\n routeRecord.parentName,\n routeRecord.source,\n )\n if (!normalizedRecord) {\n continue\n }\n recordByName.set(normalizedRecord.name, normalizedRecord)\n }\n\n return {\n recordByName,\n nameByStaticPath: createNamedRouteNameByStaticPath(recordByName),\n }\n}\n","import type {\n LocationQuery,\n RouteLocationNormalizedLoaded,\n RouteLocationRedirectedFrom,\n RouteMeta,\n RouteParams,\n RouteParamsMode,\n RouteQueryStringifier,\n RouteRecordMatched,\n RouteRecordRaw,\n UseRouterOptions,\n} from '../router'\nimport type { RouteRecordNormalized, RouteResolveCodec } from './types'\nimport { createAbsoluteRoutePath, resolvePath } from './path'\nimport { stringifyQuery } from './query'\n\nexport function cloneRouteMeta(meta?: RouteMeta): RouteMeta | undefined {\n if (!meta) {\n return undefined\n }\n return {\n ...meta,\n }\n}\n\nfunction freezeRouteRecordRawSnapshot(routeRecord: RouteRecordRaw): Readonly<RouteRecordRaw> {\n const snapshot: RouteRecordRaw = {\n name: routeRecord.name,\n path: routeRecord.path,\n }\n\n if (routeRecord.meta !== undefined) {\n snapshot.meta = cloneRouteMeta(routeRecord.meta)\n }\n if (Array.isArray(routeRecord.alias)) {\n snapshot.alias = Object.freeze(routeRecord.alias.slice())\n }\n else if (routeRecord.alias !== undefined) {\n snapshot.alias = routeRecord.alias\n }\n if (Array.isArray(routeRecord.beforeEnter)) {\n snapshot.beforeEnter = Object.freeze(routeRecord.beforeEnter.slice())\n }\n else if (routeRecord.beforeEnter !== undefined) {\n snapshot.beforeEnter = routeRecord.beforeEnter\n }\n if (routeRecord.redirect !== undefined) {\n snapshot.redirect = routeRecord.redirect\n }\n\n return Object.freeze(snapshot)\n}\n\nexport function createRouterOptionsSnapshot(\n normalizedTabBarEntries: readonly string[],\n normalizedNamedRoutes: readonly RouteRecordRaw[],\n paramsMode: RouteParamsMode,\n maxRedirects: number,\n routeResolveCodec: RouteResolveCodec,\n rejectOnError: boolean,\n): Readonly<UseRouterOptions> {\n const tabBarEntriesSnapshot = Object.freeze(\n normalizedTabBarEntries.map(path => createAbsoluteRoutePath(path)),\n )\n const routesSnapshot = Object.freeze(\n normalizedNamedRoutes.map(freezeRouteRecordRawSnapshot),\n ) as readonly RouteRecordRaw[]\n\n return Object.freeze({\n tabBarEntries: tabBarEntriesSnapshot,\n routes: routesSnapshot,\n namedRoutes: routesSnapshot,\n paramsMode,\n maxRedirects,\n parseQuery: routeResolveCodec.parseQuery,\n stringifyQuery: routeResolveCodec.stringifyQuery,\n rejectOnError,\n })\n}\n\nexport function normalizeRouteRecordMatched(\n record: RouteRecordNormalized,\n matchedPath?: string,\n): RouteRecordMatched {\n const matchedRecord: RouteRecordMatched = {\n name: record.name,\n path: createAbsoluteRoutePath(record.path),\n }\n const normalizedMatchedPath = typeof matchedPath === 'string' && matchedPath\n ? createAbsoluteRoutePath(resolvePath(matchedPath, ''))\n : undefined\n if (normalizedMatchedPath && normalizedMatchedPath !== matchedRecord.path) {\n matchedRecord.aliasPath = normalizedMatchedPath\n }\n if (record.meta !== undefined) {\n matchedRecord.meta = cloneRouteMeta(record.meta)\n }\n return matchedRecord\n}\n\nexport function cloneRouteRecordMatchedList(matched?: readonly RouteRecordMatched[]): RouteRecordMatched[] | undefined {\n if (!matched) {\n return undefined\n }\n return matched.map(record => ({\n name: record.name,\n path: record.path,\n aliasPath: record.aliasPath,\n meta: cloneRouteMeta(record.meta),\n }))\n}\n\nexport function cloneLocationQuery(query: LocationQuery): LocationQuery {\n const cloned: LocationQuery = {}\n for (const key of Object.keys(query)) {\n const value = query[key]\n cloned[key] = Array.isArray(value) ? value.slice() : value\n }\n return cloned\n}\n\nexport function cloneRouteParams(params: RouteParams): RouteParams {\n const cloned: RouteParams = {}\n for (const key of Object.keys(params)) {\n const value = params[key]\n cloned[key] = Array.isArray(value) ? value.slice() : value\n }\n return cloned\n}\n\nexport function cloneRouteLocationRedirectedFrom(\n redirectedFrom?: RouteLocationRedirectedFrom,\n): RouteLocationRedirectedFrom | undefined {\n if (!redirectedFrom) {\n return undefined\n }\n\n const cloned: RouteLocationRedirectedFrom = {\n path: redirectedFrom.path,\n fullPath: redirectedFrom.fullPath,\n query: cloneLocationQuery(redirectedFrom.query),\n hash: redirectedFrom.hash,\n params: cloneRouteParams(redirectedFrom.params),\n }\n if (redirectedFrom.name !== undefined) {\n cloned.name = redirectedFrom.name\n }\n if (redirectedFrom.meta !== undefined) {\n cloned.meta = cloneRouteMeta(redirectedFrom.meta)\n }\n if (redirectedFrom.href !== undefined) {\n cloned.href = redirectedFrom.href\n }\n if (redirectedFrom.matched !== undefined) {\n cloned.matched = cloneRouteRecordMatchedList(redirectedFrom.matched)\n }\n return cloned\n}\n\nexport function createRedirectedFromSnapshot(route: RouteLocationNormalizedLoaded): RouteLocationRedirectedFrom {\n const snapshot: RouteLocationRedirectedFrom = {\n path: route.path,\n fullPath: route.fullPath,\n query: cloneLocationQuery(route.query),\n hash: route.hash,\n params: cloneRouteParams(route.params),\n }\n if (route.name !== undefined) {\n snapshot.name = route.name\n }\n if (route.meta !== undefined) {\n snapshot.meta = cloneRouteMeta(route.meta)\n }\n if (route.href !== undefined) {\n snapshot.href = route.href\n }\n if (route.matched !== undefined) {\n snapshot.matched = cloneRouteRecordMatchedList(route.matched)\n }\n return snapshot\n}\n\nexport function snapshotRouteLocation(route: RouteLocationNormalizedLoaded): RouteLocationNormalizedLoaded {\n const snapshot: RouteLocationNormalizedLoaded = {\n path: route.path,\n fullPath: route.fullPath,\n query: cloneLocationQuery(route.query),\n hash: route.hash,\n params: cloneRouteParams(route.params),\n }\n if (route.meta !== undefined) {\n snapshot.meta = cloneRouteMeta(route.meta)\n }\n if (route.href !== undefined) {\n snapshot.href = route.href\n }\n if (route.matched !== undefined) {\n snapshot.matched = cloneRouteRecordMatchedList(route.matched)\n }\n if (route.redirectedFrom !== undefined) {\n snapshot.redirectedFrom = cloneRouteLocationRedirectedFrom(route.redirectedFrom)\n }\n if (route.name !== undefined) {\n snapshot.name = route.name\n }\n return snapshot\n}\n\nexport function createNativeRouteUrl(\n target: RouteLocationNormalizedLoaded,\n queryStringifier: RouteQueryStringifier = stringifyQuery,\n): string {\n const basePath = createAbsoluteRoutePath(target.path)\n const queryString = queryStringifier(target.query)\n return queryString ? `${basePath}?${queryString}` : basePath\n}\n\nexport function hasLocationQuery(query: LocationQuery): boolean {\n return Object.keys(query).length > 0\n}\n","import type { RouterNavigation } from './types'\nimport { injectGlobal, provideGlobal } from '../runtime/provide'\n\nconst ROUTER_INSTANCE_KEY = Symbol('wevu.router.instance')\n\nlet activeRouter: RouterNavigation | undefined\n\nexport function setActiveRouter(router: RouterNavigation) {\n activeRouter = router\n provideGlobal(ROUTER_INSTANCE_KEY, router)\n}\n\nexport function clearActiveRouter() {\n activeRouter = undefined\n provideGlobal(ROUTER_INSTANCE_KEY, undefined)\n}\n\nexport function getActiveRouter() {\n return activeRouter ?? injectGlobal<RouterNavigation | undefined>(ROUTER_INSTANCE_KEY, undefined)\n}\n","import type {\n SetupContextRouter,\n TypedRouterTabBarUrl,\n} from '../runtime/types/props'\n\nexport type LocationQueryValue = string | null\nexport type LocationQueryValueRaw = LocationQueryValue | number | boolean | undefined\nexport type LocationQuery = Record<string, LocationQueryValue | LocationQueryValue[]>\nexport type LocationQueryRaw = Record<string, LocationQueryValueRaw | LocationQueryValueRaw[]>\nexport type RouteParamValue = string\nexport type RouteParamValueRaw = RouteParamValue | number | boolean | null | undefined\nexport type RouteParams = Record<string, RouteParamValue | RouteParamValue[]>\nexport type RouteParamsRaw = Record<string, RouteParamValueRaw | RouteParamValueRaw[]>\nexport type RouteParamsMode = 'loose' | 'strict'\nexport type RouteQueryParser = (search: string) => LocationQueryRaw | LocationQuery\nexport type RouteQueryStringifier = (query: LocationQueryRaw | LocationQuery) => string\nexport type RouteMeta = Record<string, unknown>\nexport interface NamedRouteRecord {\n name: string\n path: string\n}\nexport interface RouteRecordInput {\n name?: string\n path: string\n meta?: RouteMeta\n alias?: string | readonly string[]\n children?: readonly RouteRecordInput[]\n beforeEnter?: NavigationGuard | readonly NavigationGuard[]\n redirect?: RouteRecordRedirect\n}\nexport type NamedRoutes = Readonly<Record<string, string>> | readonly RouteRecordRaw[]\n\nexport type RouteLocationRaw = string | {\n path?: string\n fullPath?: string\n query?: LocationQueryRaw\n hash?: string\n name?: string\n params?: RouteParamsRaw\n}\n\nexport interface RouteLocationNormalizedLoaded {\n path: string\n fullPath: string\n query: LocationQuery\n hash: string\n name?: string\n meta?: RouteMeta\n href?: string\n matched?: readonly RouteRecordMatched[]\n redirectedFrom?: RouteLocationRedirectedFrom\n params: RouteParams\n}\n\nexport const NavigationFailureType = {\n unknown: 1,\n aborted: 4,\n cancelled: 8,\n duplicated: 16,\n} as const\n\nexport type NavigationFailureTypeValue = (typeof NavigationFailureType)[keyof typeof NavigationFailureType]\n\nexport interface NavigationFailure extends Error {\n readonly __wevuNavigationFailure: true\n readonly type: NavigationFailureTypeValue\n readonly to?: RouteLocationNormalizedLoaded\n readonly from?: RouteLocationNormalizedLoaded\n readonly cause?: unknown\n}\n\nexport type NavigationMode = 'push' | 'replace' | 'back'\nexport interface NavigationRedirect {\n to: RouteLocationRaw\n replace?: boolean\n}\nexport type RouteRecordRedirect = RouteLocationRaw | NavigationRedirect | ((\n to: RouteLocationNormalizedLoaded,\n from: RouteLocationNormalizedLoaded,\n) => RouteLocationRaw | NavigationRedirect | Promise<RouteLocationRaw | NavigationRedirect>)\nexport interface RouteRecordRaw extends Omit<RouteRecordInput, 'name' | 'children'>, NamedRouteRecord {\n children?: readonly RouteRecordRaw[]\n}\n\nexport interface RouteRecordMatched {\n name: string\n path: string\n aliasPath?: string\n meta?: RouteMeta\n}\n\nexport interface RouteLocationRedirectedFrom {\n path: string\n fullPath: string\n query: LocationQuery\n hash: string\n name?: string\n meta?: RouteMeta\n href?: string\n matched?: readonly RouteRecordMatched[]\n params: RouteParams\n}\n\nexport type NavigationGuardResult = void | boolean | NavigationFailure | RouteLocationRaw | NavigationRedirect\nexport type NavigationGuard = (\n to: RouteLocationNormalizedLoaded | undefined,\n from: RouteLocationNormalizedLoaded,\n context?: NavigationGuardContext,\n) => NavigationGuardResult | Promise<NavigationGuardResult>\nexport type NavigationAfterEach = (\n to: RouteLocationNormalizedLoaded | undefined,\n from: RouteLocationNormalizedLoaded,\n failure?: NavigationFailure,\n context?: NavigationAfterEachContext,\n) => void | Promise<void>\n\nexport interface NavigationGuardContext {\n readonly mode: NavigationMode\n readonly to?: RouteLocationNormalizedLoaded\n readonly from: RouteLocationNormalizedLoaded\n readonly nativeRouter: SetupContextRouter\n}\n\nexport interface NavigationAfterEachContext {\n readonly mode: NavigationMode\n readonly to?: RouteLocationNormalizedLoaded\n readonly from: RouteLocationNormalizedLoaded\n readonly nativeRouter: SetupContextRouter\n readonly failure?: NavigationFailure\n}\n\nexport interface NavigationErrorContext {\n readonly mode: NavigationMode\n readonly to?: RouteLocationNormalizedLoaded\n readonly from: RouteLocationNormalizedLoaded\n readonly nativeRouter: SetupContextRouter\n readonly failure: NavigationFailure\n}\n\nexport type NavigationErrorHandler = (\n error: unknown,\n context: NavigationErrorContext,\n) => void | Promise<void>\n\nexport interface UseRouterOptions {\n tabBarEntries?: readonly (TypedRouterTabBarUrl | string)[]\n /**\n * Vue Router 对齐入口:推荐使用 `routes`\n */\n routes?: readonly RouteRecordInput[]\n /**\n * 兼容入口:支持对象 map 或路由记录数组\n */\n namedRoutes?: NamedRoutes\n paramsMode?: RouteParamsMode\n maxRedirects?: number\n parseQuery?: RouteQueryParser\n stringifyQuery?: RouteQueryStringifier\n /**\n * 异常型导航失败时是否以 Promise reject 抛出失败对象。\n *\n * - `true`:更贴近 Vue Router 心智(默认)\n * - `false`:始终以返回值形式携带失败对象\n */\n rejectOnError?: boolean\n}\n\nexport interface RouterNavigation {\n readonly nativeRouter: SetupContextRouter\n readonly options: Readonly<UseRouterOptions>\n readonly currentRoute: Readonly<RouteLocationNormalizedLoaded>\n install: (app?: unknown) => void\n resolve: (to: RouteLocationRaw) => RouteLocationNormalizedLoaded\n isReady: () => Promise<void>\n push: (to: RouteLocationRaw) => Promise<void | NavigationFailure>\n replace: (to: RouteLocationRaw) => Promise<void | NavigationFailure>\n back: (delta?: number) => Promise<void | NavigationFailure>\n go: (delta: number) => Promise<void | NavigationFailure>\n forward: () => Promise<void | NavigationFailure>\n hasRoute: (name: string) => boolean\n getRoutes: () => readonly RouteRecordRaw[]\n addRoute: AddRoute\n removeRoute: (name: string) => void\n clearRoutes: () => void\n beforeEach: (guard: NavigationGuard) => () => void\n beforeResolve: (guard: NavigationGuard) => () => void\n afterEach: (hook: NavigationAfterEach) => () => void\n onError: (handler: NavigationErrorHandler) => () => void\n}\n\nexport interface AddRoute {\n (route: RouteRecordRaw): () => void\n (parentName: string, route: RouteRecordRaw): () => void\n}\n","import type {\n NavigationAfterEach,\n NavigationAfterEachContext,\n NavigationErrorContext,\n NavigationErrorHandler,\n NavigationFailure,\n NavigationFailureTypeValue,\n NavigationGuard,\n NavigationGuardContext,\n NavigationRedirect,\n RouteLocationNormalizedLoaded,\n RouteLocationRaw,\n} from './types'\nimport { NavigationFailureType } from './types'\n\nconst DUPLICATED_RE = /already|same|duplicat|重复/\nconst CANCELLED_RE = /cancel|取消/\nconst ABORTED_RE = /abort|interrupt|中断/\n\nfunction normalizeNavigationErrorMessage(error: unknown): string {\n if (typeof error === 'string') {\n return error\n }\n if (error && typeof error === 'object') {\n const message = (error as Record<string, unknown>).errMsg\n if (typeof message === 'string') {\n return message\n }\n if (error instanceof Error) {\n return error.message\n }\n }\n return ''\n}\n\nfunction resolveNavigationFailureType(error: unknown): NavigationFailureTypeValue {\n const normalizedMessage = normalizeNavigationErrorMessage(error).toLowerCase()\n if (DUPLICATED_RE.test(normalizedMessage)) {\n return NavigationFailureType.duplicated\n }\n if (CANCELLED_RE.test(normalizedMessage)) {\n return NavigationFailureType.cancelled\n }\n if (ABORTED_RE.test(normalizedMessage)) {\n return NavigationFailureType.aborted\n }\n return NavigationFailureType.unknown\n}\n\nexport function createNavigationFailure(\n type: NavigationFailureTypeValue,\n to?: RouteLocationNormalizedLoaded,\n from?: RouteLocationNormalizedLoaded,\n cause?: unknown,\n): NavigationFailure {\n const message = normalizeNavigationErrorMessage(cause) || 'Navigation failed'\n const error = new Error(message) as NavigationFailure\n ;(error as { __wevuNavigationFailure: true }).__wevuNavigationFailure = true\n ;(error as { type: NavigationFailureTypeValue }).type = type\n ;(error as { to?: RouteLocationNormalizedLoaded }).to = to\n ;(error as { from?: RouteLocationNormalizedLoaded }).from = from\n ;(error as { cause?: unknown }).cause = cause\n return error\n}\n\nexport function isNavigationFailure(error: unknown, type?: NavigationFailureTypeValue): error is NavigationFailure {\n if (!error || typeof error !== 'object') {\n return false\n }\n const navigationError = error as Partial<NavigationFailure>\n if (navigationError.__wevuNavigationFailure !== true) {\n return false\n }\n if (type === undefined) {\n return true\n }\n return navigationError.type === type\n}\n\ninterface GuardPipelineContinue {\n status: 'continue'\n}\n\ninterface GuardPipelineFailure {\n status: 'failure'\n failure: NavigationFailure\n}\n\ninterface GuardPipelineRedirect {\n status: 'redirect'\n target: RouteLocationNormalizedLoaded\n replace?: boolean\n}\n\nexport type GuardPipelineResult = GuardPipelineContinue | GuardPipelineFailure | GuardPipelineRedirect\n\nexport function isNavigationRedirectCandidate(value: unknown): value is NavigationRedirect {\n if (!value || typeof value !== 'object') {\n return false\n }\n return 'to' in (value as Record<string, unknown>)\n}\n\nfunction isRouteLocationRawCandidate(value: unknown): value is RouteLocationRaw {\n if (typeof value === 'string') {\n return true\n }\n if (!value || typeof value !== 'object') {\n return false\n }\n const candidate = value as Record<string, unknown>\n return 'path' in candidate\n || 'fullPath' in candidate\n || 'query' in candidate\n || 'hash' in candidate\n || 'name' in candidate\n || 'params' in candidate\n}\n\nexport async function runNavigationGuards(\n guards: ReadonlySet<NavigationGuard>,\n context: NavigationGuardContext,\n resolveRoute: (to: RouteLocationRaw, currentPath: string) => RouteLocationNormalizedLoaded,\n): Promise<GuardPipelineResult> {\n for (const guard of guards) {\n try {\n const result = await guard(context.to, context.from, context)\n if (isNavigationFailure(result)) {\n return {\n status: 'failure',\n failure: result,\n }\n }\n if (result === false) {\n return {\n status: 'failure',\n failure: createNavigationFailure(\n NavigationFailureType.aborted,\n context.to,\n context.from,\n 'Navigation aborted by guard',\n ),\n }\n }\n if (isNavigationRedirectCandidate(result)) {\n if (!context.to) {\n return {\n status: 'failure',\n failure: createNavigationFailure(\n NavigationFailureType.aborted,\n context.to,\n context.from,\n 'Redirect is not supported in back navigation guards',\n ),\n }\n }\n return {\n status: 'redirect',\n target: resolveRoute(result.to, context.to.path),\n replace: result.replace,\n }\n }\n if (isRouteLocationRawCandidate(result)) {\n if (!context.to) {\n return {\n status: 'failure',\n failure: createNavigationFailure(\n NavigationFailureType.aborted,\n context.to,\n context.from,\n 'Redirect is not supported in back navigation guards',\n ),\n }\n }\n return {\n status: 'redirect',\n target: resolveRoute(result, context.to.path),\n }\n }\n }\n catch (error) {\n return {\n status: 'failure',\n failure: createNavigationFailure(NavigationFailureType.aborted, context.to, context.from, error),\n }\n }\n }\n return { status: 'continue' }\n}\n\nexport function executeNavigationMethod(\n method: (options: Record<string, any>) => unknown,\n options: Record<string, any>,\n to?: RouteLocationNormalizedLoaded,\n from?: RouteLocationNormalizedLoaded,\n): Promise<void | NavigationFailure> {\n return new Promise((resolve) => {\n let settled = false\n const finalize = (result?: void | NavigationFailure) => {\n if (settled) {\n return\n }\n settled = true\n resolve(result)\n }\n\n try {\n const maybePromise = method({\n ...options,\n success: () => finalize(),\n fail: (error: unknown) => {\n finalize(createNavigationFailure(resolveNavigationFailureType(error), to, from, error))\n },\n })\n\n if (maybePromise && typeof (maybePromise as PromiseLike<unknown>).then === 'function') {\n ;(maybePromise as PromiseLike<unknown>).then(\n () => finalize(),\n error => finalize(createNavigationFailure(resolveNavigationFailureType(error), to, from, error)),\n )\n }\n }\n catch (error) {\n finalize(createNavigationFailure(resolveNavigationFailureType(error), to, from, error))\n }\n })\n}\n\nexport async function runAfterEachHooks(\n hooks: ReadonlySet<NavigationAfterEach>,\n context: NavigationAfterEachContext,\n) {\n for (const hook of hooks) {\n try {\n await hook(context.to, context.from, context.failure, context)\n }\n catch {\n // 忽略 afterEach hook 的异常,避免影响导航主流程。\n }\n }\n}\n\nexport async function runNavigationErrorHooks(\n handlers: ReadonlySet<NavigationErrorHandler>,\n error: unknown,\n context: NavigationErrorContext,\n) {\n for (const handler of handlers) {\n try {\n await handler(error, context)\n }\n catch {\n // 忽略 onError 回调中的异常,避免影响导航主流程。\n }\n }\n}\n\nfunction isNativeFailureLikeError(value: unknown): boolean {\n if (!value || typeof value !== 'object') {\n return false\n }\n const errMsg = (value as Record<string, unknown>).errMsg\n return typeof errMsg === 'string'\n}\n\nexport function shouldEmitNavigationError(failure: NavigationFailure): boolean {\n if (failure.type === NavigationFailureType.unknown) {\n return true\n }\n if (failure.cause instanceof Error) {\n return true\n }\n if (failure.type === NavigationFailureType.aborted && failure.cause !== undefined) {\n if (typeof failure.cause === 'string') {\n return false\n }\n if (isNativeFailureLikeError(failure.cause)) {\n return false\n }\n return true\n }\n return false\n}\n","import type { SetupContextRouter } from '../runtime/types/props'\nimport type {\n NavigationAfterEach,\n NavigationErrorHandler,\n NavigationFailure,\n NavigationMode,\n RouteLocationNormalizedLoaded,\n} from './types'\nimport { runAfterEachHooks, runNavigationErrorHooks, shouldEmitNavigationError } from './navigationCore'\n\nexport interface NavigationRunResult {\n mode: NavigationMode\n from: RouteLocationNormalizedLoaded\n to?: RouteLocationNormalizedLoaded\n failure?: NavigationFailure\n}\n\nexport function createNavigationRunResult(\n mode: NavigationMode,\n from: RouteLocationNormalizedLoaded,\n to?: RouteLocationNormalizedLoaded,\n failure?: NavigationFailure,\n): NavigationRunResult {\n return {\n mode,\n from,\n to,\n failure,\n }\n}\n\nexport function createNavigationResultController(options: {\n afterEachHooks: ReadonlySet<NavigationAfterEach>\n errorHandlers: ReadonlySet<NavigationErrorHandler>\n nativeRouter: SetupContextRouter\n rejectOnError: boolean\n}) {\n const {\n afterEachHooks,\n errorHandlers,\n nativeRouter,\n rejectOnError,\n } = options\n\n async function emitNavigationAfterEach(result: NavigationRunResult): Promise<void> {\n await runAfterEachHooks(afterEachHooks, {\n mode: result.mode,\n to: result.to,\n from: result.from,\n nativeRouter,\n failure: result.failure,\n })\n\n if (result.failure && shouldEmitNavigationError(result.failure)) {\n await runNavigationErrorHooks(\n errorHandlers,\n result.failure.cause ?? result.failure,\n {\n mode: result.mode,\n to: result.to,\n from: result.from,\n nativeRouter,\n failure: result.failure,\n },\n )\n }\n }\n\n function shouldRejectNavigationFailure(failure: NavigationFailure): boolean {\n return rejectOnError && shouldEmitNavigationError(failure)\n }\n\n async function settleNavigationResult(result: NavigationRunResult): Promise<void | NavigationFailure> {\n await emitNavigationAfterEach(result)\n if (result.failure && shouldRejectNavigationFailure(result.failure)) {\n throw result.failure\n }\n return result.failure\n }\n\n return {\n settleNavigationResult,\n }\n}\n","import type { NavigationFailure, RouteLocationNormalizedLoaded, RouteLocationRaw, RouteRecordRedirect } from './types'\nimport { cloneRouteLocationRedirectedFrom, createRedirectedFromSnapshot } from '../routerInternal/shared'\nimport { createNavigationFailure, isNavigationRedirectCandidate } from './navigationCore'\nimport { NavigationFailureType } from './types'\n\nexport function createDuplicatedFailure(target: RouteLocationNormalizedLoaded, from: RouteLocationNormalizedLoaded): NavigationFailure {\n return createNavigationFailure(\n NavigationFailureType.duplicated,\n target,\n from,\n 'Avoided redundant navigation to current location',\n )\n}\n\nexport function createTabBarQueryFailure(target: RouteLocationNormalizedLoaded, from: RouteLocationNormalizedLoaded): NavigationFailure {\n return createNavigationFailure(\n NavigationFailureType.aborted,\n target,\n from,\n 'switchTab does not support query parameters',\n )\n}\n\nexport function createTooManyRedirectsFailure(\n target: RouteLocationNormalizedLoaded,\n from: RouteLocationNormalizedLoaded,\n maxRedirects: number,\n): NavigationFailure {\n return createNavigationFailure(\n NavigationFailureType.aborted,\n target,\n from,\n `Navigation redirected more than ${maxRedirects} times`,\n )\n}\n\nexport function createHashOnlyNavigationFailure(target: RouteLocationNormalizedLoaded, from: RouteLocationNormalizedLoaded): NavigationFailure {\n return createNavigationFailure(\n NavigationFailureType.aborted,\n target,\n from,\n 'Hash-only navigation is not supported in mini-program router',\n )\n}\n\nexport function createForwardNotSupportedFailure(from: RouteLocationNormalizedLoaded): NavigationFailure {\n return createNavigationFailure(\n NavigationFailureType.aborted,\n undefined,\n from,\n 'Forward navigation is not supported in mini-program router',\n )\n}\n\nexport function applyRedirectedFrom(\n redirectedTarget: RouteLocationNormalizedLoaded,\n currentTarget: RouteLocationNormalizedLoaded,\n) {\n const redirectedFrom = currentTarget.redirectedFrom\n ? cloneRouteLocationRedirectedFrom(currentTarget.redirectedFrom)\n : createRedirectedFromSnapshot(currentTarget)\n redirectedTarget.redirectedFrom = redirectedFrom\n}\n\nexport async function resolveRouteRecordRedirect(\n redirect: RouteRecordRedirect,\n to: RouteLocationNormalizedLoaded,\n from: RouteLocationNormalizedLoaded,\n resolveWithCodec: (to: RouteLocationRaw, currentPath: string) => RouteLocationNormalizedLoaded,\n): Promise<{ target: RouteLocationNormalizedLoaded, replace?: boolean }> {\n const redirectResult = typeof redirect === 'function'\n ? await redirect(to, from)\n : redirect\n\n if (isNavigationRedirectCandidate(redirectResult)) {\n return {\n target: resolveWithCodec(redirectResult.to, to.path),\n replace: redirectResult.replace,\n }\n }\n\n return {\n target: resolveWithCodec(redirectResult, to.path),\n replace: true,\n }\n}\n","import type {\n NamedRouteLookup,\n RouteResolveCodec,\n} from '../routerInternal/shared'\nimport type { NavigationRunResult } from './navigationResult'\nimport type {\n NavigationGuard,\n NavigationMode,\n RouteLocationNormalizedLoaded,\n RouteLocationRaw,\n} from './types'\nimport {\n createAbsoluteRoutePath,\n createNativeRouteUrl,\n hasLocationQuery,\n resolveMatchedRouteRecord,\n} from '../routerInternal/shared'\nimport {\n createNavigationFailure,\n executeNavigationMethod,\n isNavigationFailure,\n runNavigationGuards,\n} from './navigationCore'\nimport { createNavigationRunResult } from './navigationResult'\nimport {\n applyRedirectedFrom,\n createDuplicatedFailure,\n createHashOnlyNavigationFailure,\n createTabBarQueryFailure,\n createTooManyRedirectsFailure,\n resolveRouteRecordRedirect,\n} from './navigationTargetHelpers'\nimport { NavigationFailureType } from './types'\n\ninterface NavigateWithTargetOptions {\n mode: Exclude<NavigationMode, 'back'>\n target: RouteLocationNormalizedLoaded\n from: RouteLocationNormalizedLoaded\n nativeRouter: Record<string, any>\n routeResolveCodec: RouteResolveCodec\n namedRouteLookup: NamedRouteLookup\n beforeEachGuards: ReadonlySet<NavigationGuard>\n beforeResolveGuards: ReadonlySet<NavigationGuard>\n maxRedirects: number\n tabBarPathSet: ReadonlySet<string>\n resolveWithCodec: (to: RouteLocationRaw, currentPath: string) => RouteLocationNormalizedLoaded\n}\n\nexport async function navigateWithTarget(options: NavigateWithTargetOptions): Promise<NavigationRunResult> {\n const {\n mode,\n target,\n from,\n nativeRouter,\n routeResolveCodec,\n namedRouteLookup,\n beforeEachGuards,\n beforeResolveGuards,\n maxRedirects,\n tabBarPathSet,\n resolveWithCodec,\n } = options\n let currentTarget = target\n let currentMode: Exclude<NavigationMode, 'back'> = mode\n let redirectCount = 0\n\n while (true) {\n const tabBarTarget = tabBarPathSet.has(currentTarget.path)\n const sameNativeLocation = createNativeRouteUrl(currentTarget, routeResolveCodec.stringifyQuery)\n === createNativeRouteUrl(from, routeResolveCodec.stringifyQuery)\n if (sameNativeLocation && currentTarget.hash !== from.hash) {\n return createNavigationRunResult(currentMode, from, currentTarget, createHashOnlyNavigationFailure(currentTarget, from))\n }\n\n const duplicated = tabBarTarget\n ? currentTarget.path === from.path\n : currentTarget.fullPath === from.fullPath\n if (duplicated) {\n return createNavigationRunResult(currentMode, from, currentTarget, createDuplicatedFailure(currentTarget, from))\n }\n\n if (tabBarTarget && hasLocationQuery(currentTarget.query)) {\n return createNavigationRunResult(currentMode, from, currentTarget, createTabBarQueryFailure(currentTarget, from))\n }\n\n const beforeEachResult = await runNavigationGuards(beforeEachGuards, {\n mode: currentMode,\n to: currentTarget,\n from,\n nativeRouter: nativeRouter as any,\n }, resolveWithCodec)\n\n if (beforeEachResult.status === 'failure') {\n return createNavigationRunResult(currentMode, from, currentTarget, beforeEachResult.failure)\n }\n if (beforeEachResult.status === 'redirect') {\n const redirectedTarget = beforeEachResult.target\n const redirectedMode = beforeEachResult.replace === true\n ? 'replace'\n : beforeEachResult.replace === false\n ? 'push'\n : currentMode\n if (redirectedTarget.fullPath !== currentTarget.fullPath || redirectedMode !== currentMode) {\n applyRedirectedFrom(redirectedTarget, currentTarget)\n currentTarget = redirectedTarget\n currentMode = redirectedMode\n redirectCount += 1\n if (redirectCount > maxRedirects) {\n return createNavigationRunResult(\n currentMode,\n from,\n currentTarget,\n createTooManyRedirectsFailure(currentTarget, from, maxRedirects),\n )\n }\n continue\n }\n }\n\n const matchedRouteResult = resolveMatchedRouteRecord(currentTarget, namedRouteLookup)\n const matchedRouteRecords = matchedRouteResult?.matchedRecords ?? []\n let redirectedByRouteRecord = false\n for (const matchedRouteRecord of matchedRouteRecords) {\n if (matchedRouteRecord.redirect === undefined) {\n continue\n }\n let redirectedByRecord: { target: RouteLocationNormalizedLoaded, replace?: boolean }\n try {\n redirectedByRecord = await resolveRouteRecordRedirect(\n matchedRouteRecord.redirect,\n currentTarget,\n from,\n resolveWithCodec,\n )\n }\n catch (error) {\n return createNavigationRunResult(\n currentMode,\n from,\n currentTarget,\n createNavigationFailure(NavigationFailureType.aborted, currentTarget, from, error),\n )\n }\n\n const redirectedMode = redirectedByRecord.replace === false ? 'push' : 'replace'\n const redirectedTarget = redirectedByRecord.target\n if (redirectedTarget.fullPath !== currentTarget.fullPath || redirectedMode !== currentMode) {\n applyRedirectedFrom(redirectedTarget, currentTarget)\n currentTarget = redirectedTarget\n currentMode = redirectedMode\n redirectCount += 1\n if (redirectCount > maxRedirects) {\n return createNavigationRunResult(\n currentMode,\n from,\n currentTarget,\n createTooManyRedirectsFailure(currentTarget, from, maxRedirects),\n )\n }\n redirectedByRouteRecord = true\n break\n }\n }\n if (redirectedByRouteRecord) {\n continue\n }\n\n let redirectedByBeforeEnter = false\n for (const matchedRouteRecord of matchedRouteRecords) {\n if (matchedRouteRecord.beforeEnterGuards.length === 0) {\n continue\n }\n const beforeEnterResult = await runNavigationGuards(new Set(matchedRouteRecord.beforeEnterGuards), {\n mode: currentMode,\n to: currentTarget,\n from,\n nativeRouter: nativeRouter as any,\n }, resolveWithCodec)\n\n if (beforeEnterResult.status === 'failure') {\n return createNavigationRunResult(currentMode, from, currentTarget, beforeEnterResult.failure)\n }\n if (beforeEnterResult.status === 'redirect') {\n const redirectedTarget = beforeEnterResult.target\n const redirectedMode = beforeEnterResult.replace === true\n ? 'replace'\n : beforeEnterResult.replace === false\n ? 'push'\n : currentMode\n if (redirectedTarget.fullPath !== currentTarget.fullPath || redirectedMode !== currentMode) {\n applyRedirectedFrom(redirectedTarget, currentTarget)\n currentTarget = redirectedTarget\n currentMode = redirectedMode\n redirectCount += 1\n if (redirectCount > maxRedirects) {\n return createNavigationRunResult(\n currentMode,\n from,\n currentTarget,\n createTooManyRedirectsFailure(currentTarget, from, maxRedirects),\n )\n }\n redirectedByBeforeEnter = true\n break\n }\n }\n }\n if (redirectedByBeforeEnter) {\n continue\n }\n\n const beforeResolveResult = await runNavigationGuards(beforeResolveGuards, {\n mode: currentMode,\n to: currentTarget,\n from,\n nativeRouter: nativeRouter as any,\n }, resolveWithCodec)\n\n if (beforeResolveResult.status === 'failure') {\n return createNavigationRunResult(currentMode, from, currentTarget, beforeResolveResult.failure)\n }\n if (beforeResolveResult.status === 'redirect') {\n const redirectedTarget = beforeResolveResult.target\n const redirectedMode = beforeResolveResult.replace === true\n ? 'replace'\n : beforeResolveResult.replace === false\n ? 'push'\n : currentMode\n if (redirectedTarget.fullPath !== currentTarget.fullPath || redirectedMode !== currentMode) {\n applyRedirectedFrom(redirectedTarget, currentTarget)\n currentTarget = redirectedTarget\n currentMode = redirectedMode\n redirectCount += 1\n if (redirectCount > maxRedirects) {\n return createNavigationRunResult(\n currentMode,\n from,\n currentTarget,\n createTooManyRedirectsFailure(currentTarget, from, maxRedirects),\n )\n }\n continue\n }\n }\n\n if (tabBarTarget) {\n const result = await executeNavigationMethod(\n nativeRouter.switchTab as (options: Record<string, any>) => unknown,\n { url: createAbsoluteRoutePath(currentTarget.path) },\n currentTarget,\n from,\n )\n if (isNavigationFailure(result)) {\n return createNavigationRunResult(currentMode, from, currentTarget, result)\n }\n return createNavigationRunResult(currentMode, from, currentTarget)\n }\n\n const nativeMethod = currentMode === 'push'\n ? nativeRouter.navigateTo\n : nativeRouter.redirectTo\n const result = await executeNavigationMethod(\n nativeMethod as (options: Record<string, any>) => unknown,\n { url: createNativeRouteUrl(currentTarget, routeResolveCodec.stringifyQuery) },\n currentTarget,\n from,\n )\n if (isNavigationFailure(result)) {\n return createNavigationRunResult(currentMode, from, currentTarget, result)\n }\n return createNavigationRunResult(currentMode, from, currentTarget)\n }\n}\n","import type {\n NamedRouteLookup,\n RouteResolveCodec,\n} from '../routerInternal/shared'\nimport type { NavigationRunResult } from './navigationResult'\nimport type {\n NavigationFailure,\n NavigationGuard,\n RouteLocationNormalizedLoaded,\n RouteLocationRaw,\n} from './types'\nimport { snapshotRouteLocation } from '../routerInternal/shared'\nimport {\n createNavigationFailure,\n executeNavigationMethod,\n isNavigationFailure,\n runNavigationGuards,\n} from './navigationCore'\nimport { createNavigationRunResult } from './navigationResult'\nimport { navigateWithTarget } from './navigationTarget'\nimport { createForwardNotSupportedFailure } from './navigationTargetHelpers'\nimport { NavigationFailureType } from './types'\n\ninterface CreateNavigationApiOptions {\n nativeRouter: Record<string, any>\n route: Readonly<RouteLocationNormalizedLoaded>\n routeResolveCodec: RouteResolveCodec\n namedRouteLookup: NamedRouteLookup\n beforeEachGuards: ReadonlySet<NavigationGuard>\n beforeResolveGuards: ReadonlySet<NavigationGuard>\n maxRedirects: number\n tabBarPathSet: ReadonlySet<string>\n resolveWithCodec: (to: RouteLocationRaw, currentPath: string) => RouteLocationNormalizedLoaded\n settleNavigationResult: (result: NavigationRunResult) => Promise<void | NavigationFailure>\n}\n\nexport function createNavigationApi(options: CreateNavigationApiOptions) {\n const {\n nativeRouter,\n route,\n routeResolveCodec,\n namedRouteLookup,\n beforeEachGuards,\n beforeResolveGuards,\n maxRedirects,\n tabBarPathSet,\n resolveWithCodec,\n settleNavigationResult,\n } = options\n\n async function push(to: RouteLocationRaw): Promise<void | NavigationFailure> {\n const from = snapshotRouteLocation(route)\n let target: RouteLocationNormalizedLoaded\n try {\n target = resolveWithCodec(to, from.path)\n }\n catch (error) {\n return settleNavigationResult(\n createNavigationRunResult(\n 'push',\n from,\n undefined,\n createNavigationFailure(NavigationFailureType.unknown, undefined, from, error),\n ),\n )\n }\n const result = await navigateWithTarget({\n mode: 'push',\n target,\n from,\n nativeRouter,\n routeResolveCodec,\n namedRouteLookup,\n beforeEachGuards,\n beforeResolveGuards,\n maxRedirects,\n tabBarPathSet,\n resolveWithCodec,\n })\n return settleNavigationResult(result)\n }\n\n async function replace(to: RouteLocationRaw): Promise<void | NavigationFailure> {\n const from = snapshotRouteLocation(route)\n let target: RouteLocationNormalizedLoaded\n try {\n target = resolveWithCodec(to, from.path)\n }\n catch (error) {\n return settleNavigationResult(\n createNavigationRunResult(\n 'replace',\n from,\n undefined,\n createNavigationFailure(NavigationFailureType.unknown, undefined, from, error),\n ),\n )\n }\n const result = await navigateWithTarget({\n mode: 'replace',\n target,\n from,\n nativeRouter,\n routeResolveCodec,\n namedRouteLookup,\n beforeEachGuards,\n beforeResolveGuards,\n maxRedirects,\n tabBarPathSet,\n resolveWithCodec,\n })\n return settleNavigationResult(result)\n }\n\n async function back(delta = 1): Promise<void | NavigationFailure> {\n const from = snapshotRouteLocation(route)\n const beforeEachResult = await runNavigationGuards(beforeEachGuards, {\n mode: 'back',\n from,\n nativeRouter: nativeRouter as any,\n }, resolveWithCodec)\n if (beforeEachResult.status === 'failure') {\n return settleNavigationResult(createNavigationRunResult('back', from, undefined, beforeEachResult.failure))\n }\n if (beforeEachResult.status === 'redirect') {\n return settleNavigationResult(\n createNavigationRunResult(\n 'back',\n from,\n undefined,\n createNavigationFailure(\n NavigationFailureType.aborted,\n undefined,\n from,\n 'Redirect is not supported in back navigation guards',\n ),\n ),\n )\n }\n\n const beforeResolveResult = await runNavigationGuards(beforeResolveGuards, {\n mode: 'back',\n from,\n nativeRouter: nativeRouter as any,\n }, resolveWithCodec)\n if (beforeResolveResult.status === 'failure') {\n return settleNavigationResult(createNavigationRunResult('back', from, undefined, beforeResolveResult.failure))\n }\n if (beforeResolveResult.status === 'redirect') {\n return settleNavigationResult(\n createNavigationRunResult(\n 'back',\n from,\n undefined,\n createNavigationFailure(\n NavigationFailureType.aborted,\n undefined,\n from,\n 'Redirect is not supported in back navigation guards',\n ),\n ),\n )\n }\n\n const result = await executeNavigationMethod(\n nativeRouter.navigateBack as (options: Record<string, any>) => unknown,\n { delta },\n undefined,\n from,\n )\n const runResult = isNavigationFailure(result)\n ? createNavigationRunResult('back', from, undefined, result)\n : createNavigationRunResult('back', from)\n return settleNavigationResult(runResult)\n }\n\n async function go(delta: number): Promise<void | NavigationFailure> {\n if (delta < 0) {\n return back(Math.abs(delta))\n }\n if (delta === 0) {\n return undefined\n }\n const from = snapshotRouteLocation(route)\n return settleNavigationResult(\n createNavigationRunResult(\n 'back',\n from,\n undefined,\n createForwardNotSupportedFailure(from),\n ),\n )\n }\n\n async function forward(): Promise<void | NavigationFailure> {\n return go(1)\n }\n\n return {\n push,\n replace,\n back,\n go,\n forward,\n }\n}\n","import type { RouteResolveCodec } from '../routerInternal/shared'\nimport type { RouteLocationNormalizedLoaded, RouteLocationRaw } from './types'\nimport {\n createRouteLocation,\n normalizeHash,\n normalizeQuery,\n normalizeRouteParams,\n parsePathInput,\n parseQuery,\n resolvePath,\n stringifyQuery,\n} from '../routerInternal/shared'\n\nexport const DEFAULT_ROUTE_RESOLVE_CODEC: RouteResolveCodec = {\n parseQuery,\n stringifyQuery,\n}\n\nexport function resolveRouteLocation(\n to: RouteLocationRaw,\n currentPath = '',\n codec: RouteResolveCodec = DEFAULT_ROUTE_RESOLVE_CODEC,\n): RouteLocationNormalizedLoaded {\n if (typeof to === 'string') {\n const parsed = parsePathInput(to, codec)\n const path = resolvePath(parsed.path, currentPath)\n return createRouteLocation(path, parsed.query, parsed.hash, undefined, {}, codec.stringifyQuery)\n }\n\n const parsedFromFullPath = typeof to.fullPath === 'string'\n ? parsePathInput(to.fullPath, codec)\n : undefined\n\n const rawPath = to.path ?? parsedFromFullPath?.path ?? currentPath\n const path = resolvePath(rawPath, currentPath)\n const query = to.query\n ? normalizeQuery(to.query)\n : parsedFromFullPath?.query ?? {}\n const hash = normalizeHash(to.hash ?? parsedFromFullPath?.hash)\n const name = typeof to.name === 'string' ? to.name : undefined\n const params = to.params\n ? normalizeRouteParams(to.params)\n : {}\n\n return createRouteLocation(path, query, hash, name, params, codec.stringifyQuery)\n}\n","import type {\n NamedRouteLookup,\n RouteRecordNormalized,\n} from '../routerInternal/shared'\nimport type { AddRoute, RouteRecordRaw } from './types'\nimport {\n assertValidAddRouteInput,\n cloneRouteMeta,\n collectRouteNamesForRemoval,\n createAbsoluteRoutePath,\n createNamedRouteNameByStaticPath,\n flattenNamedRouteRecords,\n normalizeRouteRecordRaw,\n warnRouteConfig,\n} from '../routerInternal/shared'\n\nfunction normalizeRouteRecordForOutput(record: RouteRecordNormalized): RouteRecordRaw {\n const normalizedRoute: RouteRecordRaw = {\n name: record.name,\n path: record.path ? `/${record.path}` : '/',\n }\n if (record.meta !== undefined) {\n normalizedRoute.meta = cloneRouteMeta(record.meta)\n }\n if (record.aliasPaths.length === 1) {\n normalizedRoute.alias = createAbsoluteRoutePath(record.aliasPaths[0])\n }\n else if (record.aliasPaths.length > 1) {\n normalizedRoute.alias = record.aliasPaths.map(aliasPath => createAbsoluteRoutePath(aliasPath))\n }\n if (record.beforeEnterGuards.length === 1) {\n normalizedRoute.beforeEnter = record.beforeEnterGuards[0]\n }\n else if (record.beforeEnterGuards.length > 1) {\n normalizedRoute.beforeEnter = record.beforeEnterGuards.slice()\n }\n if (record.redirect !== undefined) {\n normalizedRoute.redirect = record.redirect\n }\n return normalizedRoute\n}\n\nexport function createRouteRegistry(namedRouteLookup: NamedRouteLookup) {\n const hasRoute = (name: string) => namedRouteLookup.recordByName.has(name)\n const getRoutes = (): readonly RouteRecordRaw[] =>\n Array.from(namedRouteLookup.recordByName.values(), normalizeRouteRecordForOutput)\n\n const addRoute: AddRoute = ((parentNameOrRoute: string | RouteRecordRaw, maybeRoute?: RouteRecordRaw) => {\n const route = typeof parentNameOrRoute === 'string'\n ? maybeRoute\n : parentNameOrRoute\n if (!route) {\n throw new Error('Route record is required when adding a child route')\n }\n assertValidAddRouteInput(route)\n\n const parentRouteName = typeof parentNameOrRoute === 'string'\n ? parentNameOrRoute\n : undefined\n const parentRouteRecord = parentRouteName\n ? namedRouteLookup.recordByName.get(parentRouteName)\n : undefined\n if (parentRouteName && !parentRouteRecord) {\n throw new Error(`Parent route \"${parentRouteName}\" is not defined in createRouter({ routes | namedRoutes })`)\n }\n\n const routeRecords = flattenNamedRouteRecords(\n [route],\n parentRouteRecord?.path,\n parentRouteName,\n parentRouteRecord?.aliasPaths,\n undefined,\n 'addRoute',\n )\n if (routeRecords.length === 0) {\n throw new Error('Route name and path are required when adding a named route')\n }\n const addedRoutes: RouteRecordNormalized[] = []\n for (const routeRecord of routeRecords) {\n const normalizedRoute = normalizeRouteRecordRaw(routeRecord.route, routeRecord.parentName)\n if (!normalizedRoute) {\n continue\n }\n const existingRoute = namedRouteLookup.recordByName.get(normalizedRoute.name)\n if (existingRoute) {\n const namesToRemove = collectRouteNamesForRemoval(existingRoute.name, namedRouteLookup.recordByName)\n for (const routeName of namesToRemove) {\n namedRouteLookup.recordByName.delete(routeName)\n }\n warnRouteConfig(\n `addRoute() replaced existing route \"${normalizedRoute.name}\" (${createAbsoluteRoutePath(existingRoute.path)} -> ${createAbsoluteRoutePath(normalizedRoute.path)}) and removed ${namesToRemove.size - 1} nested route(s)`,\n )\n }\n namedRouteLookup.recordByName.set(normalizedRoute.name, normalizedRoute)\n addedRoutes.push(normalizedRoute)\n }\n namedRouteLookup.nameByStaticPath = createNamedRouteNameByStaticPath(namedRouteLookup.recordByName)\n\n return () => {\n let changed = false\n for (const addedRoute of addedRoutes) {\n const currentRoute = namedRouteLookup.recordByName.get(addedRoute.name)\n if (currentRoute === addedRoute) {\n namedRouteLookup.recordByName.delete(addedRoute.name)\n changed = true\n }\n }\n if (changed) {\n namedRouteLookup.nameByStaticPath = createNamedRouteNameByStaticPath(namedRouteLookup.recordByName)\n }\n }\n }) as AddRoute\n\n function removeRoute(name: string): void {\n const namesToRemove = collectRouteNamesForRemoval(name, namedRouteLookup.recordByName)\n if (namesToRemove.size === 0) {\n return\n }\n\n let changed = false\n for (const routeName of namesToRemove) {\n changed = namedRouteLookup.recordByName.delete(routeName) || changed\n }\n if (changed) {\n namedRouteLookup.nameByStaticPath = createNamedRouteNameByStaticPath(namedRouteLookup.recordByName)\n }\n }\n\n function clearRoutes(): void {\n namedRouteLookup.recordByName.clear()\n namedRouteLookup.nameByStaticPath.clear()\n }\n\n return {\n hasRoute,\n getRoutes,\n addRoute,\n removeRoute,\n clearRoutes,\n }\n}\n","import type { MiniProgramPageLifetime } from '../runtime/types'\nimport type { SetupContextRouter } from '../runtime/types/props'\nimport type { LocationQueryRaw, RouteLocationNormalizedLoaded } from './types'\nimport { reactive, readonly } from '../reactivity'\nimport { cloneLocationQuery, cloneRouteLocationRedirectedFrom, cloneRouteMeta, cloneRouteParams, cloneRouteRecordMatchedList, resolveCurrentRoute } from '../routerInternal/shared'\nimport { getCurrentSetupContext, onLoad, onReady, onRouteDone, onShow } from '../runtime/hooks'\nimport {\n useNativePageRouter as useNativePageRouterInternal,\n useNativeRouter as useNativeRouterInternal,\n} from '../runtime/vueCompat'\nimport { getActiveRouter } from './instance'\n\nexport interface UseRouteOptions {\n resolveRoute?: (route: RouteLocationNormalizedLoaded) => RouteLocationNormalizedLoaded\n}\n\nfunction applyRouteState(\n routeState: RouteLocationNormalizedLoaded,\n nextRoute: RouteLocationNormalizedLoaded,\n) {\n routeState.path = nextRoute.path\n routeState.fullPath = nextRoute.fullPath\n routeState.query = cloneLocationQuery(nextRoute.query)\n routeState.hash = nextRoute.hash\n routeState.params = cloneRouteParams(nextRoute.params)\n if (nextRoute.name === undefined) {\n delete (routeState as Partial<RouteLocationNormalizedLoaded>).name\n }\n else {\n routeState.name = nextRoute.name\n }\n if (nextRoute.meta === undefined) {\n delete (routeState as Partial<RouteLocationNormalizedLoaded>).meta\n }\n else {\n routeState.meta = cloneRouteMeta(nextRoute.meta)\n }\n if (nextRoute.href === undefined) {\n delete (routeState as Partial<RouteLocationNormalizedLoaded>).href\n }\n else {\n routeState.href = nextRoute.href\n }\n if (nextRoute.matched === undefined) {\n delete (routeState as Partial<RouteLocationNormalizedLoaded>).matched\n }\n else {\n routeState.matched = cloneRouteRecordMatchedList(nextRoute.matched)\n }\n if (nextRoute.redirectedFrom === undefined) {\n delete (routeState as Partial<RouteLocationNormalizedLoaded>).redirectedFrom\n }\n else {\n routeState.redirectedFrom = cloneRouteLocationRedirectedFrom(nextRoute.redirectedFrom)\n }\n}\n\nexport function useRoute(options: UseRouteOptions = {}): Readonly<RouteLocationNormalizedLoaded> {\n const setupContext = getCurrentSetupContext()\n if (!setupContext) {\n throw new Error('useRoute() 必须在 setup() 的同步阶段调用')\n }\n\n const fallbackPage = setupContext.instance\n const resolveRoute = options.resolveRoute\n ?? ((route: RouteLocationNormalizedLoaded) => getActiveRouter()?.resolve(route) ?? route)\n const currentRoute = resolveRoute(resolveCurrentRoute(undefined, fallbackPage))\n const routeState = reactive<RouteLocationNormalizedLoaded>({\n path: currentRoute.path,\n fullPath: currentRoute.fullPath,\n query: cloneLocationQuery(currentRoute.query),\n hash: currentRoute.hash,\n params: cloneRouteParams(currentRoute.params),\n })\n applyRouteState(routeState, currentRoute)\n\n function syncRoute(queryOverride?: LocationQueryRaw) {\n const nextRoute = resolveRoute(resolveCurrentRoute(queryOverride, fallbackPage))\n applyRouteState(routeState, nextRoute)\n }\n\n onLoad((query: Parameters<NonNullable<MiniProgramPageLifetime['onLoad']>>[0]) => {\n syncRoute(query as unknown as LocationQueryRaw)\n })\n onReady(() => {\n syncRoute()\n })\n onShow(() => {\n syncRoute()\n })\n onRouteDone(() => {\n syncRoute()\n })\n\n return readonly(routeState) as Readonly<RouteLocationNormalizedLoaded>\n}\n\n/**\n * @description 获取当前组件路径语义的原生 Router\n */\nexport function useNativeRouter(): SetupContextRouter {\n return useNativeRouterInternal()\n}\n\n/**\n * @description 获取当前页面路径语义的原生 Page Router\n */\nexport function useNativePageRouter(): SetupContextRouter {\n return useNativePageRouterInternal()\n}\n","import type { RouteResolveCodec } from '../routerInternal/shared'\nimport type {\n NavigationAfterEach,\n NavigationErrorHandler,\n NavigationGuard,\n RouteLocationNormalizedLoaded,\n RouteLocationRaw,\n RouterNavigation,\n UseRouterOptions,\n} from './types'\nimport {\n cloneRouteMeta,\n cloneRouteParams,\n createNamedRouteLookup,\n createRouterOptionsSnapshot,\n mergeMatchedRouteMeta,\n normalizeRouteRecordMatched,\n parseQuery,\n resolveMatchedRouteRecord,\n resolveNamedRouteLocation,\n resolvePath,\n resolveRouteOptionEntries,\n stringifyQuery,\n warnDuplicateRouteEntries,\n} from '../routerInternal/shared'\nimport { setActiveRouter } from './instance'\nimport { createNavigationApi } from './navigationApi'\nimport { createNavigationResultController } from './navigationResult'\nimport { resolveRouteLocation } from './resolve'\nimport { createRouteRegistry } from './routeRegistry'\nimport { useNativeRouter, useRoute } from './useRoute'\n\n/**\n * @description 创建高阶路由导航器(对齐 Vue Router 的 createRouter 心智)\n */\nexport function createRouter(options: UseRouterOptions = {}): RouterNavigation {\n const nativeRouter = useNativeRouter()\n const beforeEachGuards = new Set<NavigationGuard>()\n const beforeResolveGuards = new Set<NavigationGuard>()\n const afterEachHooks = new Set<NavigationAfterEach>()\n const errorHandlers = new Set<NavigationErrorHandler>()\n const maxRedirects = options.maxRedirects ?? 10\n const paramsMode = options.paramsMode ?? 'loose'\n const rejectOnError = options.rejectOnError ?? true\n const routeResolveCodec: RouteResolveCodec = {\n parseQuery: options.parseQuery ?? parseQuery,\n stringifyQuery: options.stringifyQuery ?? stringifyQuery,\n }\n const readyPromise = Promise.resolve()\n const routeEntries = resolveRouteOptionEntries(options)\n warnDuplicateRouteEntries(routeEntries)\n const namedRouteLookup = createNamedRouteLookup(routeEntries)\n const normalizedTabBarEntries = (options.tabBarEntries ?? [])\n .map(path => resolvePath(path, ''))\n .filter(Boolean)\n const tabBarPathSet = new Set(normalizedTabBarEntries)\n const routeRegistry = createRouteRegistry(namedRouteLookup)\n const routerOptions = createRouterOptionsSnapshot(\n normalizedTabBarEntries,\n routeRegistry.getRoutes(),\n paramsMode,\n maxRedirects,\n routeResolveCodec,\n rejectOnError,\n )\n\n function enrichRouteRecordState(routeLocation: RouteLocationNormalizedLoaded): RouteLocationNormalizedLoaded {\n const resolved = { ...routeLocation }\n resolved.href = resolved.fullPath\n const matchedResult = resolveMatchedRouteRecord(resolved, namedRouteLookup)\n if (matchedResult) {\n const matchedRecord = matchedResult.record\n if (resolved.name === undefined) {\n resolved.name = matchedRecord.name\n }\n const mergedRouteMeta = mergeMatchedRouteMeta(matchedResult.matchedRecords)\n if (mergedRouteMeta !== undefined) {\n resolved.meta = cloneRouteMeta(mergedRouteMeta)\n }\n if (matchedResult.params && Object.keys(resolved.params).length === 0) {\n resolved.params = cloneRouteParams(matchedResult.params)\n }\n resolved.matched = matchedResult.matchedRecords.map((record, index, records) => {\n const leafMatchedPath = index === records.length - 1\n ? matchedResult.matchedPath\n : undefined\n return normalizeRouteRecordMatched(record, leafMatchedPath)\n })\n }\n else {\n resolved.matched = []\n }\n return resolved\n }\n\n function resolveWithCodec(to: RouteLocationRaw, currentPath: string): RouteLocationNormalizedLoaded {\n const rawTo = typeof to === 'string'\n ? to\n : resolveNamedRouteLocation(to, namedRouteLookup, paramsMode)\n return enrichRouteRecordState(resolveRouteLocation(rawTo, currentPath, routeResolveCodec))\n }\n\n const route = useRoute({\n resolveRoute: enrichRouteRecordState,\n })\n\n function resolve(to: RouteLocationRaw): RouteLocationNormalizedLoaded {\n return resolveWithCodec(to, route.path)\n }\n\n const navigationResultController = createNavigationResultController({\n afterEachHooks,\n errorHandlers,\n nativeRouter,\n rejectOnError,\n })\n\n const navigationApi = createNavigationApi({\n nativeRouter,\n route,\n routeResolveCodec,\n namedRouteLookup,\n beforeEachGuards,\n beforeResolveGuards,\n maxRedirects,\n tabBarPathSet,\n resolveWithCodec,\n settleNavigationResult: navigationResultController.settleNavigationResult,\n })\n\n function beforeEach(guard: NavigationGuard): () => void {\n beforeEachGuards.add(guard)\n return () => {\n beforeEachGuards.delete(guard)\n }\n }\n\n function beforeResolve(guard: NavigationGuard): () => void {\n beforeResolveGuards.add(guard)\n return () => {\n beforeResolveGuards.delete(guard)\n }\n }\n\n function afterEach(hook: NavigationAfterEach): () => void {\n afterEachHooks.add(hook)\n return () => {\n afterEachHooks.delete(hook)\n }\n }\n\n function onError(handler: NavigationErrorHandler): () => void {\n errorHandlers.add(handler)\n return () => {\n errorHandlers.delete(handler)\n }\n }\n\n const router: RouterNavigation = {\n nativeRouter,\n options: routerOptions,\n currentRoute: route,\n install(app?: unknown): void {\n setActiveRouter(router)\n const globalProperties = (app as { config?: { globalProperties?: Record<string, unknown> } } | undefined)?.config?.globalProperties\n if (globalProperties) {\n globalProperties.$router = router\n }\n },\n resolve,\n isReady(): Promise<void> {\n return readyPromise\n },\n push: navigationApi.push,\n replace: navigationApi.replace,\n back: navigationApi.back,\n go: navigationApi.go,\n forward: navigationApi.forward,\n hasRoute: routeRegistry.hasRoute,\n getRoutes: routeRegistry.getRoutes,\n addRoute: routeRegistry.addRoute,\n removeRoute: routeRegistry.removeRoute,\n clearRoutes: routeRegistry.clearRoutes,\n beforeEach,\n beforeResolve,\n afterEach,\n onError,\n }\n\n setActiveRouter(router)\n return router\n}\n","import type { RouterNavigation } from './types'\nimport { getActiveRouter } from './instance'\n\n/**\n * @description 获取当前已创建的路由实例。\n */\nexport function useRouter(): RouterNavigation {\n const router = getActiveRouter()\n if (router) {\n return router\n }\n\n throw new Error('useRouter() 未找到已创建的 router 实例。请先在 setup() 中调用 createRouter()。')\n}\n"],"mappings":"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"}
@@ -478,7 +478,7 @@ function watchSyncEffect(effectFn, options = {}) {
478
478
 
479
479
  //#endregion
480
480
  //#region package.json
481
- var version$1 = "6.16.6";
481
+ var version$1 = "6.16.7";
482
482
 
483
483
  //#endregion
484
484
  //#region src/version.ts
@@ -6007,4 +6007,4 @@ function useTemplateRef(name) {
6007
6007
 
6008
6008
  //#endregion
6009
6009
  export { isNoSetData as $, createApp as A, waitForLayoutHost as B, usePageStack as C, shallowRef as Ct, createWevuComponent as D, useDisposables as E, __reExport as Et, resolveLayoutHost as F, runSetupFunction as G, mountRuntimeInstance as H, unregisterPageLayoutBridge as I, syncRuntimePageLayoutState as J, resolveRuntimePageLayoutName as K, unregisterRuntimeLayoutHosts as L, registerPageLayoutBridge as M, registerRuntimeLayoutHosts as N, createWevuScopedSlotComponent as O, resolveLayoutBridge as P, setWevuDefaults as Q, useLayoutBridge as R, useNavigationBarMetrics as S, isShallowRef as St, useElementIntersectionObserver as T, __exportAll as Tt, setRuntimeSetDataVisibility as U, registerApp as V, teardownRuntimeInstance as W, usePageLayout as X, syncRuntimePageLayoutStateFromRuntime as Y, resetWevuDefaults as Z, useSelectorQuery as _, onUnmounted as _t, useModel as a, watchSyncEffect as at, getCurrentPageStackSnapshot as b, toRef as bt, useSlots as c, callUpdateHooks as ct, useUpdatePerformanceListener as d, onBeforeUnmount as dt, markNoSetData as et, normalizeClass as f, onBeforeUpdate as ft, useSelectorFields as g, onServerPrefetch as gt, useScrollOffset as h, onMounted as ht, useChangeModel as i, watchPostEffect as it, registerComponent as j, defineComponent as k, defineAppSetup as l, onActivated as lt, useBoundingClientRect as m, onErrorCaptured as mt, mergeModels as n, watch as nt, useAttrs as o, getDeepWatchStrategy as ot, normalizeStyle as p, onDeactivated as pt, setPageLayout as q, useBindModel as r, watchEffect as rt, useNativeInstance as s, setDeepWatchStrategy as st, useTemplateRef as t, version as tt, use as u, onBeforeMount as ut, useAsyncPullDownRefresh as v, onUpdated as vt, useIntersectionObserver as w, triggerRef as wt, getNavigationBarMetrics as x, toRefs as xt, usePageScrollThrottle as y, traverse as yt, useLayoutHosts as z };
6010
- //# sourceMappingURL=src-C2BzhMY6.mjs.map
6010
+ //# sourceMappingURL=src-C3ttY2ue.mjs.map