wevu 7.1.3 → 7.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -6
- package/dist/dev/index.d.mts +3 -3
- package/dist/dev/index.mjs +3 -2
- package/dist/dev/package.mjs +1 -1
- package/dist/dev/reactivity/computed.d.mts +4 -0
- package/dist/dev/reactivity/computed.mjs +10 -1
- package/dist/dev/reactivity/computed.mjs.map +1 -1
- package/dist/dev/reactivity/reactive.mjs +27 -20
- package/dist/dev/reactivity/reactive.mjs.map +1 -1
- package/dist/dev/router/auto-routes.d.mts +8 -0
- package/dist/dev/router/auto-routes.mjs +11 -0
- package/dist/dev/router/auto-routes.mjs.map +1 -0
- package/dist/dev/router/createRouter.d.mts +2 -1
- package/dist/dev/router/createRouter.mjs +3 -4
- package/dist/dev/router/createRouter.mjs.map +1 -1
- package/dist/dev/router/navigationCore.d.mts +3 -2
- package/dist/dev/router/navigationCore.mjs +7 -7
- package/dist/dev/router/navigationCore.mjs.map +1 -1
- package/dist/dev/router/resolve.d.mts +3 -2
- package/dist/dev/router/resolve.mjs.map +1 -1
- package/dist/dev/router/routeSync.d.mts +1 -0
- package/dist/dev/router/types.d.mts +173 -78
- package/dist/dev/router/types.mjs.map +1 -1
- package/dist/dev/router/useRoute.d.mts +4 -3
- package/dist/dev/router/useRoute.mjs.map +1 -1
- package/dist/dev/router/useRouter.d.mts +2 -1
- package/dist/dev/router/useRouter.mjs.map +1 -1
- package/dist/dev/router.d.mts +19 -3
- package/dist/dev/routerInternal/location.d.mts +2 -0
- package/dist/dev/routerInternal/matching.d.mts +2 -0
- package/dist/dev/routerInternal/matching.mjs +1 -1
- package/dist/dev/routerInternal/matching.mjs.map +1 -1
- package/dist/dev/routerInternal/params.d.mts +2 -0
- package/dist/dev/routerInternal/params.mjs.map +1 -1
- package/dist/dev/routerInternal/records.d.mts +2 -0
- package/dist/dev/routerInternal/recordsWarnings.d.mts +2 -0
- package/dist/dev/routerInternal/shared.d.mts +9 -0
- package/dist/dev/routerInternal/snapshots.d.mts +2 -0
- package/dist/dev/runtime/hooks/base.mjs +5 -5
- package/dist/dev/runtime/hooks/base.mjs.map +1 -1
- package/dist/dev/runtime/platform.mjs +31 -24
- package/dist/dev/runtime/platform.mjs.map +1 -1
- package/dist/dev/runtime/register/component/alipay.mjs +72 -0
- package/dist/dev/runtime/register/component/alipay.mjs.map +1 -0
- package/dist/dev/runtime/register/component/registerNativeDefinition.mjs +5 -2
- package/dist/dev/runtime/register/component/registerNativeDefinition.mjs.map +1 -1
- package/dist/dev/store/actions.mjs +27 -29
- package/dist/dev/store/actions.mjs.map +1 -1
- package/dist/dev/store/base.mjs +152 -36
- package/dist/dev/store/base.mjs.map +1 -1
- package/dist/dev/store/define/create.mjs +92 -0
- package/dist/dev/store/define/create.mjs.map +1 -0
- package/dist/dev/store/define.d.mts +5 -16
- package/dist/dev/store/define.mjs +11 -15
- package/dist/dev/store/define.mjs.map +1 -1
- package/dist/dev/store/manager.d.mts +13 -5
- package/dist/dev/store/manager.mjs +55 -14
- package/dist/dev/store/manager.mjs.map +1 -1
- package/dist/dev/store/storeToRefs.d.mts +5 -7
- package/dist/dev/store/storeToRefs.mjs +10 -18
- package/dist/dev/store/storeToRefs.mjs.map +1 -1
- package/dist/dev/store/subscriptions.mjs +17 -0
- package/dist/dev/store/subscriptions.mjs.map +1 -0
- package/dist/dev/store/types.d.mts +85 -59
- package/dist/dev/store/types.mjs +11 -0
- package/dist/dev/store/types.mjs.map +1 -0
- package/dist/dev/store/utils.mjs +1 -37
- package/dist/dev/store/utils.mjs.map +1 -1
- package/dist/dev/store/view.mjs +56 -0
- package/dist/dev/store/view.mjs.map +1 -0
- package/dist/dev/store.d.mts +3 -3
- package/dist/dev/store.mjs +3 -2
- package/dist/dev/vue-demi.d.mts +3 -3
- package/dist/dev/vue-demi.mjs +3 -2
- package/dist/dev/vue-demi.mjs.map +1 -1
- package/dist/index.d.mts +3 -3
- package/dist/index.mjs +1 -1
- package/dist/package.mjs +1 -1
- package/dist/reactivity/computed.d.mts +4 -0
- package/dist/reactivity/computed.mjs +1 -1
- package/dist/reactivity/reactive.mjs +1 -1
- package/dist/router/auto-routes.d.mts +7 -0
- package/dist/router/auto-routes.mjs +1 -0
- package/dist/router/createRouter.d.mts +2 -1
- package/dist/router/createRouter.mjs +1 -1
- package/dist/router/navigationCore.d.mts +3 -2
- package/dist/router/navigationCore.mjs +1 -1
- package/dist/router/resolve.d.mts +3 -2
- package/dist/router/routeSync.d.mts +1 -0
- package/dist/router/types.d.mts +173 -78
- package/dist/router/useRoute.d.mts +4 -3
- package/dist/router/useRouter.d.mts +2 -1
- package/dist/router.d.mts +18 -3
- package/dist/routerInternal/location.d.mts +2 -0
- package/dist/routerInternal/matching.d.mts +2 -0
- package/dist/routerInternal/matching.mjs +1 -1
- package/dist/routerInternal/params.d.mts +2 -0
- package/dist/routerInternal/records.d.mts +2 -0
- package/dist/routerInternal/recordsWarnings.d.mts +2 -0
- package/dist/routerInternal/shared.d.mts +9 -0
- package/dist/routerInternal/snapshots.d.mts +2 -0
- package/dist/runtime/hooks/base.mjs +1 -1
- package/dist/runtime/platform.mjs +1 -1
- package/dist/runtime/register/component/alipay.mjs +1 -0
- package/dist/runtime/register/component/registerNativeDefinition.mjs +1 -1
- package/dist/store/actions.mjs +1 -1
- package/dist/store/base.mjs +1 -1
- package/dist/store/define/create.mjs +1 -0
- package/dist/store/define.d.mts +5 -16
- package/dist/store/define.mjs +1 -1
- package/dist/store/manager.d.mts +13 -5
- package/dist/store/manager.mjs +1 -1
- package/dist/store/storeToRefs.d.mts +5 -7
- package/dist/store/storeToRefs.mjs +1 -1
- package/dist/store/subscriptions.mjs +1 -0
- package/dist/store/types.d.mts +85 -59
- package/dist/store/types.mjs +1 -0
- package/dist/store/utils.mjs +1 -1
- package/dist/store/view.mjs +1 -0
- package/dist/store.d.mts +3 -3
- package/dist/store.mjs +1 -1
- package/dist/vue-demi.d.mts +3 -3
- package/dist/vue-demi.mjs +1 -1
- package/package.json +29 -9
- package/dist/dev/store/define/optionsStyle.mjs +0 -117
- package/dist/dev/store/define/optionsStyle.mjs.map +0 -1
- package/dist/dev/store/define/setupStyle.mjs +0 -137
- package/dist/dev/store/define/setupStyle.mjs.map +0 -1
- package/dist/dev/store/define/shared.mjs +0 -81
- package/dist/dev/store/define/shared.mjs.map +0 -1
- package/dist/store/define/optionsStyle.mjs +0 -1
- package/dist/store/define/setupStyle.mjs +0 -1
- package/dist/store/define/shared.mjs +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigationCore.mjs","names":[],"sources":["../../../src/router/navigationCore.ts"],"sourcesContent":["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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"navigationCore.mjs","names":[],"sources":["../../../src/router/navigationCore.ts"],"sourcesContent":["import type { WevuNamedRouteMap } from '../router'\nimport 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<TRouteMap extends object = WevuNamedRouteMap>(\n type: NavigationFailureTypeValue,\n to?: RouteLocationNormalizedLoaded<NoInfer<TRouteMap>>,\n from?: RouteLocationNormalizedLoaded<NoInfer<TRouteMap>>,\n cause?: unknown,\n): NavigationFailure<TRouteMap> {\n const message = normalizeNavigationErrorMessage(cause) || 'Navigation failed'\n return Object.assign(new Error(message), {\n __wevuNavigationFailure: true as const,\n type,\n to,\n from,\n cause,\n })\n}\n\nexport function isNavigationFailure<TRouteMap extends object = WevuNamedRouteMap>(\n error: unknown,\n type?: NavigationFailureTypeValue,\n): error is NavigationFailure<TRouteMap> {\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"],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { RouteResolveCodec } from "../routerInternal/types.mjs";
|
|
2
|
-
import
|
|
2
|
+
import "../routerInternal/shared.mjs";
|
|
3
|
+
import { RouteLocationNormalizedLoaded, RouteLocationRaw, WevuBroadRouteMap } from "./types.mjs";
|
|
3
4
|
//#region src/router/resolve.d.ts
|
|
4
|
-
export declare function resolveRouteLocation(to: RouteLocationRaw
|
|
5
|
+
export declare function resolveRouteLocation(to: RouteLocationRaw<WevuBroadRouteMap>, currentPath?: string, codec?: RouteResolveCodec): RouteLocationNormalizedLoaded<WevuBroadRouteMap>;
|
|
5
6
|
//#endregion
|
|
6
7
|
//# sourceMappingURL=resolve.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.mjs","names":[],"sources":["../../../src/router/resolve.ts"],"sourcesContent":["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
|
|
1
|
+
{"version":3,"file":"resolve.mjs","names":[],"sources":["../../../src/router/resolve.ts"],"sourcesContent":["import type { RouteResolveCodec } from '../routerInternal/shared'\nimport type { RouteLocationNormalizedLoaded, RouteLocationRaw, WevuBroadRouteMap } 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<WevuBroadRouteMap>,\n currentPath = '',\n codec: RouteResolveCodec = DEFAULT_ROUTE_RESOLVE_CODEC,\n): RouteLocationNormalizedLoaded<WevuBroadRouteMap> {\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"],"mappings":";;;;;AAaA,MAAa,8BAAiD;CAC5D;CACA;AACF;AAEA,SAAgB,qBACd,IACA,cAAc,IACd,QAA2B,6BACuB;;CAClD,IAAI,OAAO,OAAO,UAAU;EAC1B,MAAM,SAAS,eAAe,IAAI,KAAK;EACvC,MAAM,OAAO,YAAY,OAAO,MAAM,WAAW;EACjD,OAAO,oBAAoB,MAAM,OAAO,OAAO,OAAO,MAAM,QAAW,CAAC,GAAG,MAAM,cAAc;CACjG;CAEA,MAAM,qBAAqB,OAAO,GAAG,aAAa,WAC9C,eAAe,GAAG,UAAU,KAAK,IACjC;CAEJ,MAAM,8BAAU,GAAG,2HAAQ,mBAAoB,2CAAQ;CACvD,MAAM,OAAO,YAAY,SAAS,WAAW;CAC7C,MAAM,QAAQ,GAAG,QACb,eAAe,GAAG,KAAK,qGACvB,mBAAoB,8EAAS,CAAC;CAClC,MAAM,OAAO,0BAAc,GAAG,2HAAQ,mBAAoB,IAAI;CAC9D,MAAM,OAAO,OAAO,GAAG,SAAS,WAAW,GAAG,OAAO;CACrD,MAAM,SAAS,GAAG,SACd,qBAAqB,GAAG,MAAM,IAC9B,CAAC;CAEL,OAAO,oBAAoB,MAAM,OAAO,MAAM,MAAM,QAAQ,MAAM,cAAc;AAClF"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { SetupContextRouter, TypedRouterTabBarUrl } from "../runtime/types/props/router.mjs";
|
|
2
2
|
import "../runtime/types/props.mjs";
|
|
3
|
+
import { WevuNamedRouteMap } from "../router.mjs";
|
|
3
4
|
//#region src/router/types.d.ts
|
|
4
5
|
export type LocationQueryValue = string | null;
|
|
5
6
|
export type LocationQueryValueRaw = LocationQueryValue | number | boolean | undefined;
|
|
@@ -13,40 +14,94 @@ export type RouteParamsMode = 'loose' | 'strict';
|
|
|
13
14
|
export type RouteQueryParser = (search: string) => LocationQueryRaw | LocationQuery;
|
|
14
15
|
export type RouteQueryStringifier = (query: LocationQueryRaw | LocationQuery) => string;
|
|
15
16
|
export type RouteMeta = Record<string, unknown>;
|
|
16
|
-
export interface
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
export interface WevuNamedRouteDefinition {
|
|
18
|
+
readonly path: string;
|
|
19
|
+
readonly meta: RouteMeta;
|
|
19
20
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
21
|
+
/**
|
|
22
|
+
* 显式选择不收窄名称和元信息的兼容路由模式。
|
|
23
|
+
*/
|
|
24
|
+
export type WevuBroadRouteMap = Record<string, WevuNamedRouteDefinition>;
|
|
25
|
+
type DeclaredRouteName<TRouteMap extends object> = Extract<keyof TRouteMap, string>;
|
|
26
|
+
type IsBroadRouteMap<TRouteMap extends object> = [DeclaredRouteName<TRouteMap>] extends [never] ? true : string extends DeclaredRouteName<TRouteMap> ? true : false;
|
|
27
|
+
export type WevuRouteName<TRouteMap extends object = WevuNamedRouteMap> = IsBroadRouteMap<TRouteMap> extends true ? string : DeclaredRouteName<TRouteMap>;
|
|
28
|
+
export type WevuNamedRoutePath<TRouteMap extends object, TName extends WevuRouteName<TRouteMap>> = IsBroadRouteMap<TRouteMap> extends true ? string : TName extends keyof TRouteMap ? TRouteMap[TName] extends {
|
|
29
|
+
readonly path: infer TPath extends string;
|
|
30
|
+
} ? TPath : never : never;
|
|
31
|
+
export type WevuNamedRouteMeta<TRouteMap extends object, TName extends WevuRouteName<TRouteMap>> = IsBroadRouteMap<TRouteMap> extends true ? RouteMeta : TName extends keyof TRouteMap ? TRouteMap[TName] extends {
|
|
32
|
+
readonly meta: infer TMeta extends RouteMeta;
|
|
33
|
+
} ? TMeta : never : never;
|
|
34
|
+
type StrictRouteRecordMeta<TRouteMap extends object, TName extends WevuRouteName<TRouteMap>> = keyof WevuNamedRouteMeta<TRouteMap, TName> extends never ? Record<string, never> : WevuNamedRouteMeta<TRouteMap, TName>;
|
|
35
|
+
interface RouteLocationRawCommon {
|
|
36
|
+
query?: LocationQueryRaw;
|
|
37
|
+
hash?: string;
|
|
38
|
+
params?: RouteParamsRaw;
|
|
28
39
|
}
|
|
29
|
-
export type
|
|
30
|
-
|
|
40
|
+
export type RouteLocationNamedRaw<TRouteMap extends object = WevuNamedRouteMap, TName extends WevuRouteName<TRouteMap> = WevuRouteName<TRouteMap>> = RouteLocationRawCommon & {
|
|
41
|
+
name: TName;
|
|
42
|
+
path?: never;
|
|
43
|
+
fullPath?: never;
|
|
44
|
+
};
|
|
45
|
+
type RouteLocationPathRaw = RouteLocationRawCommon & {
|
|
46
|
+
name?: never;
|
|
47
|
+
path?: string;
|
|
48
|
+
fullPath?: string;
|
|
49
|
+
};
|
|
50
|
+
type BroadRouteLocationRaw = string | RouteLocationRawCommon & {
|
|
31
51
|
path?: string;
|
|
32
52
|
fullPath?: string;
|
|
33
|
-
query?: LocationQueryRaw;
|
|
34
|
-
hash?: string;
|
|
35
53
|
name?: string;
|
|
36
|
-
params?: RouteParamsRaw;
|
|
37
54
|
};
|
|
38
|
-
export
|
|
55
|
+
export type RouteLocationRaw<TRouteMap extends object = WevuNamedRouteMap> = IsBroadRouteMap<TRouteMap> extends true ? BroadRouteLocationRaw : string | RouteLocationPathRaw | { [TName in WevuRouteName<TRouteMap>]: RouteLocationNamedRaw<TRouteMap, TName>; }[WevuRouteName<TRouteMap>];
|
|
56
|
+
interface RouteLocationNormalizedBase<TRouteMap extends object> {
|
|
39
57
|
path: string;
|
|
40
58
|
fullPath: string;
|
|
41
59
|
query: LocationQuery;
|
|
42
60
|
hash: string;
|
|
61
|
+
href?: string;
|
|
62
|
+
matched?: readonly RouteRecordMatched<TRouteMap>[];
|
|
63
|
+
redirectedFrom?: RouteLocationRedirectedFrom<TRouteMap>;
|
|
64
|
+
params: RouteParams;
|
|
65
|
+
}
|
|
66
|
+
type RouteLocationNormalizedUnnamed<TRouteMap extends object> = RouteLocationNormalizedBase<TRouteMap> & {
|
|
67
|
+
name?: undefined;
|
|
68
|
+
meta?: RouteMeta;
|
|
69
|
+
};
|
|
70
|
+
type BroadRouteLocationNormalizedLoaded<TRouteMap extends object> = RouteLocationNormalizedBase<TRouteMap> & {
|
|
43
71
|
name?: string;
|
|
44
72
|
meta?: RouteMeta;
|
|
73
|
+
};
|
|
74
|
+
export type RouteLocationNormalizedByName<TRouteMap extends object, TName extends WevuRouteName<TRouteMap>> = TName extends WevuRouteName<TRouteMap> ? IsBroadRouteMap<TRouteMap> extends true ? (RouteLocationNormalizedBase<TRouteMap> & {
|
|
75
|
+
name: TName;
|
|
76
|
+
meta?: RouteMeta;
|
|
77
|
+
}) : (RouteLocationNormalizedBase<TRouteMap> & {
|
|
78
|
+
name: TName;
|
|
79
|
+
meta: WevuNamedRouteMeta<TRouteMap, TName>;
|
|
80
|
+
}) : never;
|
|
81
|
+
export type RouteLocationNormalizedLoaded<TRouteMap extends object = WevuNamedRouteMap> = IsBroadRouteMap<TRouteMap> extends true ? BroadRouteLocationNormalizedLoaded<WevuBroadRouteMap> : RouteLocationNormalizedUnnamed<TRouteMap> | { [TName in WevuRouteName<TRouteMap>]: RouteLocationNormalizedByName<TRouteMap, TName>; }[WevuRouteName<TRouteMap>];
|
|
82
|
+
interface RouteLocationRedirectedFromBase<TRouteMap extends object> {
|
|
83
|
+
path: string;
|
|
84
|
+
fullPath: string;
|
|
85
|
+
query: LocationQuery;
|
|
86
|
+
hash: string;
|
|
45
87
|
href?: string;
|
|
46
|
-
matched?: readonly RouteRecordMatched[];
|
|
47
|
-
redirectedFrom?: RouteLocationRedirectedFrom;
|
|
88
|
+
matched?: readonly RouteRecordMatched<TRouteMap>[];
|
|
48
89
|
params: RouteParams;
|
|
49
90
|
}
|
|
91
|
+
type RouteLocationRedirectedFromByName<TRouteMap extends object, TName extends WevuRouteName<TRouteMap>> = IsBroadRouteMap<TRouteMap> extends true ? (RouteLocationRedirectedFromBase<TRouteMap> & {
|
|
92
|
+
name: TName;
|
|
93
|
+
meta?: RouteMeta;
|
|
94
|
+
}) : (RouteLocationRedirectedFromBase<TRouteMap> & {
|
|
95
|
+
name: TName;
|
|
96
|
+
meta: WevuNamedRouteMeta<TRouteMap, TName>;
|
|
97
|
+
});
|
|
98
|
+
export type RouteLocationRedirectedFrom<TRouteMap extends object = WevuNamedRouteMap> = IsBroadRouteMap<TRouteMap> extends true ? (RouteLocationRedirectedFromBase<WevuBroadRouteMap> & {
|
|
99
|
+
name?: string;
|
|
100
|
+
meta?: RouteMeta;
|
|
101
|
+
}) : (RouteLocationRedirectedFromBase<TRouteMap> & {
|
|
102
|
+
name?: undefined;
|
|
103
|
+
meta?: RouteMeta;
|
|
104
|
+
} | { [TName in WevuRouteName<TRouteMap>]: RouteLocationRedirectedFromByName<TRouteMap, TName>; }[WevuRouteName<TRouteMap>]);
|
|
50
105
|
export declare const NavigationFailureType: {
|
|
51
106
|
readonly unknown: 1;
|
|
52
107
|
readonly aborted: 4;
|
|
@@ -54,74 +109,101 @@ export declare const NavigationFailureType: {
|
|
|
54
109
|
readonly duplicated: 16;
|
|
55
110
|
};
|
|
56
111
|
export type NavigationFailureTypeValue = (typeof NavigationFailureType)[keyof typeof NavigationFailureType];
|
|
57
|
-
export interface NavigationFailure extends Error {
|
|
112
|
+
export interface NavigationFailure<TRouteMap extends object = WevuNamedRouteMap> extends Error {
|
|
58
113
|
readonly __wevuNavigationFailure: true;
|
|
59
114
|
readonly type: NavigationFailureTypeValue;
|
|
60
|
-
readonly to?: RouteLocationNormalizedLoaded
|
|
61
|
-
readonly from?: RouteLocationNormalizedLoaded
|
|
115
|
+
readonly to?: RouteLocationNormalizedLoaded<TRouteMap>;
|
|
116
|
+
readonly from?: RouteLocationNormalizedLoaded<TRouteMap>;
|
|
62
117
|
readonly cause?: unknown;
|
|
63
118
|
}
|
|
64
119
|
export type NavigationMode = 'push' | 'replace' | 'back';
|
|
65
120
|
export type InitialNavigationMode = 'eager' | 'blocking';
|
|
66
|
-
export interface NavigationRedirect {
|
|
67
|
-
to: RouteLocationRaw
|
|
121
|
+
export interface NavigationRedirect<TRouteMap extends object = WevuNamedRouteMap> {
|
|
122
|
+
to: RouteLocationRaw<TRouteMap>;
|
|
68
123
|
replace?: boolean;
|
|
69
124
|
}
|
|
70
|
-
export type RouteRecordRedirect = RouteLocationRaw | NavigationRedirect | ((to: RouteLocationNormalizedLoaded
|
|
71
|
-
|
|
72
|
-
|
|
125
|
+
export type RouteRecordRedirect<TRouteMap extends object = WevuNamedRouteMap> = RouteLocationRaw<TRouteMap> | NavigationRedirect<TRouteMap> | ((to: RouteLocationNormalizedLoaded<TRouteMap>, from: RouteLocationNormalizedLoaded<TRouteMap>) => RouteLocationRaw<TRouteMap> | NavigationRedirect<TRouteMap> | Promise<RouteLocationRaw<TRouteMap> | NavigationRedirect<TRouteMap>>);
|
|
126
|
+
interface RouteRecordCommon<TRouteMap extends object> {
|
|
127
|
+
alias?: string | readonly string[];
|
|
128
|
+
beforeEnter?: NavigationGuard<TRouteMap> | readonly NavigationGuard<TRouteMap>[];
|
|
129
|
+
redirect?: RouteRecordRedirect<TRouteMap>;
|
|
73
130
|
}
|
|
74
|
-
|
|
131
|
+
type BroadRouteRecordInput<TRouteMap extends object> = RouteRecordCommon<TRouteMap> & {
|
|
132
|
+
name?: string;
|
|
133
|
+
path: string;
|
|
134
|
+
meta?: RouteMeta;
|
|
135
|
+
children?: readonly RouteRecordInput<TRouteMap>[];
|
|
136
|
+
};
|
|
137
|
+
type StrictRouteRecordInputByName<TRouteMap extends object, TName extends WevuRouteName<TRouteMap>> = RouteRecordCommon<TRouteMap> & {
|
|
138
|
+
name: TName;
|
|
139
|
+
path: WevuNamedRoutePath<TRouteMap, TName>;
|
|
140
|
+
meta: StrictRouteRecordMeta<TRouteMap, TName>;
|
|
141
|
+
children?: readonly RouteRecordInput<TRouteMap>[];
|
|
142
|
+
};
|
|
143
|
+
export type RouteRecordInput<TRouteMap extends object = WevuNamedRouteMap> = IsBroadRouteMap<TRouteMap> extends true ? BroadRouteRecordInput<TRouteMap> : { [TName in WevuRouteName<TRouteMap>]: StrictRouteRecordInputByName<TRouteMap, TName>; }[WevuRouteName<TRouteMap>];
|
|
144
|
+
type BroadRouteRecordRaw<TRouteMap extends object> = RouteRecordCommon<TRouteMap> & {
|
|
75
145
|
name: string;
|
|
76
146
|
path: string;
|
|
77
|
-
aliasPath?: string;
|
|
78
147
|
meta?: RouteMeta;
|
|
79
|
-
|
|
80
|
-
|
|
148
|
+
children?: readonly RouteRecordRaw<TRouteMap>[];
|
|
149
|
+
};
|
|
150
|
+
type StrictRouteRecordRawByName<TRouteMap extends object, TName extends WevuRouteName<TRouteMap>> = RouteRecordCommon<TRouteMap> & {
|
|
151
|
+
name: TName;
|
|
152
|
+
path: WevuNamedRoutePath<TRouteMap, TName>;
|
|
153
|
+
meta: StrictRouteRecordMeta<TRouteMap, TName>;
|
|
154
|
+
children?: readonly RouteRecordRaw<TRouteMap>[];
|
|
155
|
+
};
|
|
156
|
+
export type RouteRecordRaw<TRouteMap extends object = WevuNamedRouteMap> = IsBroadRouteMap<TRouteMap> extends true ? BroadRouteRecordRaw<TRouteMap> : { [TName in WevuRouteName<TRouteMap>]: StrictRouteRecordRawByName<TRouteMap, TName>; }[WevuRouteName<TRouteMap>];
|
|
157
|
+
export type NamedRouteRecord<TRouteMap extends object = WevuNamedRouteMap> = RouteRecordRaw<TRouteMap> extends (infer TRoute) ? TRoute extends {
|
|
158
|
+
name: string;
|
|
81
159
|
path: string;
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
name
|
|
160
|
+
} ? Pick<TRoute, 'name' | 'path'> : never : never;
|
|
161
|
+
export type NamedRoutes<TRouteMap extends object = WevuNamedRouteMap> = IsBroadRouteMap<TRouteMap> extends true ? Readonly<Record<string, string>> | readonly RouteRecordRaw<TRouteMap>[] : readonly RouteRecordRaw<TRouteMap>[];
|
|
162
|
+
export type RouteRecordMatched<TRouteMap extends object = WevuNamedRouteMap> = IsBroadRouteMap<TRouteMap> extends true ? {
|
|
163
|
+
name: string;
|
|
164
|
+
path: string;
|
|
165
|
+
aliasPath?: string;
|
|
86
166
|
meta?: RouteMeta;
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
export type
|
|
94
|
-
export
|
|
167
|
+
} : { [TName in WevuRouteName<TRouteMap>]: {
|
|
168
|
+
name: TName;
|
|
169
|
+
path: string;
|
|
170
|
+
aliasPath?: string;
|
|
171
|
+
meta: WevuNamedRouteMeta<TRouteMap, TName>;
|
|
172
|
+
}; }[WevuRouteName<TRouteMap>];
|
|
173
|
+
export type NavigationGuardResult<TRouteMap extends object = WevuNamedRouteMap> = void | boolean | NavigationFailure<TRouteMap> | RouteLocationRaw<TRouteMap> | NavigationRedirect<TRouteMap>;
|
|
174
|
+
export type NavigationGuard<TRouteMap extends object = WevuNamedRouteMap> = (to: RouteLocationNormalizedLoaded<TRouteMap> | undefined, from: RouteLocationNormalizedLoaded<TRouteMap>, context?: NavigationGuardContext<TRouteMap>) => NavigationGuardResult<TRouteMap> | Promise<NavigationGuardResult<TRouteMap>>;
|
|
175
|
+
export type NavigationAfterEach<TRouteMap extends object = WevuNamedRouteMap> = (to: RouteLocationNormalizedLoaded<TRouteMap> | undefined, from: RouteLocationNormalizedLoaded<TRouteMap>, failure?: NavigationFailure<TRouteMap>, context?: NavigationAfterEachContext<TRouteMap>) => void | Promise<void>;
|
|
176
|
+
export interface NavigationGuardContext<TRouteMap extends object = WevuNamedRouteMap> {
|
|
95
177
|
readonly mode: NavigationMode;
|
|
96
|
-
readonly to?: RouteLocationNormalizedLoaded
|
|
97
|
-
readonly from: RouteLocationNormalizedLoaded
|
|
178
|
+
readonly to?: RouteLocationNormalizedLoaded<TRouteMap>;
|
|
179
|
+
readonly from: RouteLocationNormalizedLoaded<TRouteMap>;
|
|
98
180
|
readonly nativeRouter: SetupContextRouter;
|
|
99
181
|
}
|
|
100
|
-
export interface NavigationAfterEachContext {
|
|
182
|
+
export interface NavigationAfterEachContext<TRouteMap extends object = WevuNamedRouteMap> {
|
|
101
183
|
readonly mode: NavigationMode;
|
|
102
|
-
readonly to?: RouteLocationNormalizedLoaded
|
|
103
|
-
readonly from: RouteLocationNormalizedLoaded
|
|
184
|
+
readonly to?: RouteLocationNormalizedLoaded<TRouteMap>;
|
|
185
|
+
readonly from: RouteLocationNormalizedLoaded<TRouteMap>;
|
|
104
186
|
readonly nativeRouter: SetupContextRouter;
|
|
105
|
-
readonly failure?: NavigationFailure
|
|
187
|
+
readonly failure?: NavigationFailure<TRouteMap>;
|
|
106
188
|
}
|
|
107
|
-
export interface NavigationErrorContext {
|
|
189
|
+
export interface NavigationErrorContext<TRouteMap extends object = WevuNamedRouteMap> {
|
|
108
190
|
readonly mode: NavigationMode;
|
|
109
|
-
readonly to?: RouteLocationNormalizedLoaded
|
|
110
|
-
readonly from: RouteLocationNormalizedLoaded
|
|
191
|
+
readonly to?: RouteLocationNormalizedLoaded<TRouteMap>;
|
|
192
|
+
readonly from: RouteLocationNormalizedLoaded<TRouteMap>;
|
|
111
193
|
readonly nativeRouter: SetupContextRouter;
|
|
112
|
-
readonly failure: NavigationFailure
|
|
194
|
+
readonly failure: NavigationFailure<TRouteMap>;
|
|
113
195
|
}
|
|
114
|
-
export type NavigationErrorHandler = (error: unknown, context: NavigationErrorContext) => void | Promise<void>;
|
|
115
|
-
export interface UseRouterOptions {
|
|
196
|
+
export type NavigationErrorHandler<TRouteMap extends object = WevuNamedRouteMap> = (error: unknown, context: NavigationErrorContext<TRouteMap>) => void | Promise<void>;
|
|
197
|
+
export interface UseRouterOptions<TRouteMap extends object = WevuNamedRouteMap> {
|
|
116
198
|
tabBarEntries?: readonly (TypedRouterTabBarUrl | string)[];
|
|
117
199
|
/**
|
|
118
200
|
* Vue Router 对齐入口:推荐使用 `routes`
|
|
119
201
|
*/
|
|
120
|
-
routes?: readonly RouteRecordInput[];
|
|
202
|
+
routes?: readonly RouteRecordInput<TRouteMap>[];
|
|
121
203
|
/**
|
|
122
204
|
* 兼容入口:支持对象 map 或路由记录数组
|
|
123
205
|
*/
|
|
124
|
-
namedRoutes?: NamedRoutes
|
|
206
|
+
namedRoutes?: NamedRoutes<TRouteMap>;
|
|
125
207
|
paramsMode?: RouteParamsMode;
|
|
126
208
|
maxRedirects?: number;
|
|
127
209
|
/**
|
|
@@ -142,31 +224,44 @@ export interface UseRouterOptions {
|
|
|
142
224
|
*/
|
|
143
225
|
rejectOnError?: boolean;
|
|
144
226
|
}
|
|
145
|
-
export
|
|
227
|
+
export type RouterResolve<TRouteMap extends object = WevuNamedRouteMap> = IsBroadRouteMap<TRouteMap> extends true ? (to: RouteLocationRaw<TRouteMap>) => RouteLocationNormalizedLoaded<TRouteMap> : {
|
|
228
|
+
<TName extends WevuRouteName<TRouteMap>>(to: RouteLocationNamedRaw<TRouteMap, TName>): RouteLocationNormalizedByName<TRouteMap, TName>;
|
|
229
|
+
(to: RouteLocationRaw<TRouteMap>): RouteLocationNormalizedLoaded<TRouteMap>;
|
|
230
|
+
};
|
|
231
|
+
export interface AddRoute<TRouteMap extends object = WevuNamedRouteMap> {
|
|
232
|
+
(route: RouteRecordRaw<TRouteMap>): () => void;
|
|
233
|
+
(parentName: WevuRouteName<TRouteMap>, route: RouteRecordRaw<TRouteMap>): () => void;
|
|
234
|
+
}
|
|
235
|
+
export interface RouterNavigation<TRouteMap extends object = WevuNamedRouteMap> {
|
|
146
236
|
readonly nativeRouter: SetupContextRouter;
|
|
147
|
-
readonly options: Readonly<UseRouterOptions
|
|
148
|
-
readonly currentRoute: Readonly<RouteLocationNormalizedLoaded
|
|
237
|
+
readonly options: Readonly<UseRouterOptions<TRouteMap>>;
|
|
238
|
+
readonly currentRoute: Readonly<RouteLocationNormalizedLoaded<TRouteMap>>;
|
|
149
239
|
install: (app?: unknown) => void;
|
|
150
|
-
resolve:
|
|
240
|
+
resolve: RouterResolve<TRouteMap>;
|
|
151
241
|
isReady: () => Promise<void>;
|
|
152
|
-
push: (to: RouteLocationRaw) => Promise<void | NavigationFailure
|
|
153
|
-
replace: (to: RouteLocationRaw) => Promise<void | NavigationFailure
|
|
154
|
-
back: (delta?: number) => Promise<void | NavigationFailure
|
|
155
|
-
go: (delta: number) => Promise<void | NavigationFailure
|
|
156
|
-
forward: () => Promise<void | NavigationFailure
|
|
157
|
-
hasRoute: (name:
|
|
158
|
-
getRoutes: () => readonly RouteRecordRaw[];
|
|
159
|
-
addRoute: AddRoute
|
|
160
|
-
removeRoute: (name:
|
|
242
|
+
push: (to: RouteLocationRaw<TRouteMap>) => Promise<void | NavigationFailure<TRouteMap>>;
|
|
243
|
+
replace: (to: RouteLocationRaw<TRouteMap>) => Promise<void | NavigationFailure<TRouteMap>>;
|
|
244
|
+
back: (delta?: number) => Promise<void | NavigationFailure<TRouteMap>>;
|
|
245
|
+
go: (delta: number) => Promise<void | NavigationFailure<TRouteMap>>;
|
|
246
|
+
forward: () => Promise<void | NavigationFailure<TRouteMap>>;
|
|
247
|
+
hasRoute: (name: WevuRouteName<TRouteMap>) => boolean;
|
|
248
|
+
getRoutes: () => readonly RouteRecordRaw<TRouteMap>[];
|
|
249
|
+
addRoute: AddRoute<TRouteMap>;
|
|
250
|
+
removeRoute: (name: WevuRouteName<TRouteMap>) => void;
|
|
161
251
|
clearRoutes: () => void;
|
|
162
|
-
beforeEach: (guard: NavigationGuard) => () => void;
|
|
163
|
-
beforeResolve: (guard: NavigationGuard) => () => void;
|
|
164
|
-
afterEach: (hook: NavigationAfterEach) => () => void;
|
|
165
|
-
onError: (handler: NavigationErrorHandler) => () => void;
|
|
166
|
-
}
|
|
167
|
-
export interface AddRoute {
|
|
168
|
-
(route: RouteRecordRaw): () => void;
|
|
169
|
-
(parentName: string, route: RouteRecordRaw): () => void;
|
|
252
|
+
beforeEach: (guard: NavigationGuard<TRouteMap>) => () => void;
|
|
253
|
+
beforeResolve: (guard: NavigationGuard<TRouteMap>) => () => void;
|
|
254
|
+
afterEach: (hook: NavigationAfterEach<TRouteMap>) => () => void;
|
|
255
|
+
onError: (handler: NavigationErrorHandler<TRouteMap>) => () => void;
|
|
170
256
|
}
|
|
257
|
+
export type WevuAutoRoute<TRouteMap extends object = WevuNamedRouteMap> = IsBroadRouteMap<TRouteMap> extends true ? {
|
|
258
|
+
readonly name: string;
|
|
259
|
+
readonly path: string;
|
|
260
|
+
readonly meta: RouteMeta;
|
|
261
|
+
} : { [TName in WevuRouteName<TRouteMap>]: {
|
|
262
|
+
readonly name: TName;
|
|
263
|
+
readonly path: WevuNamedRoutePath<TRouteMap, TName>;
|
|
264
|
+
readonly meta: StrictRouteRecordMeta<TRouteMap, TName>;
|
|
265
|
+
}; }[WevuRouteName<TRouteMap>];
|
|
171
266
|
//#endregion
|
|
172
267
|
//# sourceMappingURL=types.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.mjs","names":[],"sources":["../../../src/router/types.ts"],"sourcesContent":["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 type InitialNavigationMode = 'eager' | 'blocking'\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 /**\n * 首屏导航守卫模式。默认立即挂载页面,只有明确配置 `blocking` 时才等待守卫完成。\n */\n initialNavigationMode?: InitialNavigationMode\n /**\n * blocking 首屏导航守卫的最大等待时间(毫秒),超时后放行页面挂载。\n */\n initialNavigationTimeout?: 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"],"mappings":";AAsDA,MAAa,wBAAwB;CACnC,SAAS;CACT,SAAS;CACT,WAAW;CACX,YAAY;AACd"}
|
|
1
|
+
{"version":3,"file":"types.mjs","names":[],"sources":["../../../src/router/types.ts"],"sourcesContent":["import type { WevuNamedRouteMap } from '../router'\nimport 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>\n\nexport interface WevuNamedRouteDefinition {\n readonly path: string\n readonly meta: RouteMeta\n}\n\n/**\n * 显式选择不收窄名称和元信息的兼容路由模式。\n */\nexport type WevuBroadRouteMap = Record<string, WevuNamedRouteDefinition>\n\ntype DeclaredRouteName<TRouteMap extends object> = Extract<keyof TRouteMap, string>\ntype IsBroadRouteMap<TRouteMap extends object> = [DeclaredRouteName<TRouteMap>] extends [never]\n ? true\n : string extends DeclaredRouteName<TRouteMap>\n ? true\n : false\n\nexport type WevuRouteName<TRouteMap extends object = WevuNamedRouteMap>\n = IsBroadRouteMap<TRouteMap> extends true\n ? string\n : DeclaredRouteName<TRouteMap>\n\nexport type WevuNamedRoutePath<\n TRouteMap extends object,\n TName extends WevuRouteName<TRouteMap>,\n> = IsBroadRouteMap<TRouteMap> extends true\n ? string\n : TName extends keyof TRouteMap\n ? TRouteMap[TName] extends { readonly path: infer TPath extends string }\n ? TPath\n : never\n : never\n\nexport type WevuNamedRouteMeta<\n TRouteMap extends object,\n TName extends WevuRouteName<TRouteMap>,\n> = IsBroadRouteMap<TRouteMap> extends true\n ? RouteMeta\n : TName extends keyof TRouteMap\n ? TRouteMap[TName] extends { readonly meta: infer TMeta extends RouteMeta }\n ? TMeta\n : never\n : never\n\ntype StrictRouteRecordMeta<\n TRouteMap extends object,\n TName extends WevuRouteName<TRouteMap>,\n> = keyof WevuNamedRouteMeta<TRouteMap, TName> extends never\n ? Record<string, never>\n : WevuNamedRouteMeta<TRouteMap, TName>\n\ninterface RouteLocationRawCommon {\n query?: LocationQueryRaw\n hash?: string\n params?: RouteParamsRaw\n}\n\nexport type RouteLocationNamedRaw<\n TRouteMap extends object = WevuNamedRouteMap,\n TName extends WevuRouteName<TRouteMap> = WevuRouteName<TRouteMap>,\n> = RouteLocationRawCommon & {\n name: TName\n path?: never\n fullPath?: never\n}\n\ntype RouteLocationPathRaw = RouteLocationRawCommon & {\n name?: never\n path?: string\n fullPath?: string\n}\n\ntype BroadRouteLocationRaw = string | RouteLocationRawCommon & {\n path?: string\n fullPath?: string\n name?: string\n}\n\nexport type RouteLocationRaw<TRouteMap extends object = WevuNamedRouteMap>\n = IsBroadRouteMap<TRouteMap> extends true\n ? BroadRouteLocationRaw\n : string | RouteLocationPathRaw | {\n [TName in WevuRouteName<TRouteMap>]: RouteLocationNamedRaw<TRouteMap, TName>\n }[WevuRouteName<TRouteMap>]\n\ninterface RouteLocationNormalizedBase<TRouteMap extends object> {\n path: string\n fullPath: string\n query: LocationQuery\n hash: string\n href?: string\n matched?: readonly RouteRecordMatched<TRouteMap>[]\n redirectedFrom?: RouteLocationRedirectedFrom<TRouteMap>\n params: RouteParams\n}\n\ntype RouteLocationNormalizedUnnamed<TRouteMap extends object>\n = RouteLocationNormalizedBase<TRouteMap> & {\n name?: undefined\n meta?: RouteMeta\n }\n\ntype BroadRouteLocationNormalizedLoaded<TRouteMap extends object>\n = RouteLocationNormalizedBase<TRouteMap> & {\n name?: string\n meta?: RouteMeta\n }\n\nexport type RouteLocationNormalizedByName<\n TRouteMap extends object,\n TName extends WevuRouteName<TRouteMap>,\n> = TName extends WevuRouteName<TRouteMap>\n ? IsBroadRouteMap<TRouteMap> extends true\n ? (RouteLocationNormalizedBase<TRouteMap> & {\n name: TName\n meta?: RouteMeta\n })\n : (RouteLocationNormalizedBase<TRouteMap> & {\n name: TName\n meta: WevuNamedRouteMeta<TRouteMap, TName>\n })\n : never\n\nexport type RouteLocationNormalizedLoaded<TRouteMap extends object = WevuNamedRouteMap>\n = IsBroadRouteMap<TRouteMap> extends true\n ? BroadRouteLocationNormalizedLoaded<WevuBroadRouteMap>\n : RouteLocationNormalizedUnnamed<TRouteMap> | {\n [TName in WevuRouteName<TRouteMap>]: RouteLocationNormalizedByName<TRouteMap, TName>\n }[WevuRouteName<TRouteMap>]\n\ninterface RouteLocationRedirectedFromBase<TRouteMap extends object> {\n path: string\n fullPath: string\n query: LocationQuery\n hash: string\n href?: string\n matched?: readonly RouteRecordMatched<TRouteMap>[]\n params: RouteParams\n}\n\ntype RouteLocationRedirectedFromByName<\n TRouteMap extends object,\n TName extends WevuRouteName<TRouteMap>,\n> = IsBroadRouteMap<TRouteMap> extends true\n ? (RouteLocationRedirectedFromBase<TRouteMap> & {\n name: TName\n meta?: RouteMeta\n })\n : (RouteLocationRedirectedFromBase<TRouteMap> & {\n name: TName\n meta: WevuNamedRouteMeta<TRouteMap, TName>\n })\n\nexport type RouteLocationRedirectedFrom<TRouteMap extends object = WevuNamedRouteMap>\n = IsBroadRouteMap<TRouteMap> extends true\n ? (RouteLocationRedirectedFromBase<WevuBroadRouteMap> & {\n name?: string\n meta?: RouteMeta\n })\n : (RouteLocationRedirectedFromBase<TRouteMap> & {\n name?: undefined\n meta?: RouteMeta\n } | {\n [TName in WevuRouteName<TRouteMap>]: RouteLocationRedirectedFromByName<TRouteMap, TName>\n }[WevuRouteName<TRouteMap>])\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<TRouteMap extends object = WevuNamedRouteMap> extends Error {\n readonly __wevuNavigationFailure: true\n readonly type: NavigationFailureTypeValue\n readonly to?: RouteLocationNormalizedLoaded<TRouteMap>\n readonly from?: RouteLocationNormalizedLoaded<TRouteMap>\n readonly cause?: unknown\n}\n\nexport type NavigationMode = 'push' | 'replace' | 'back'\nexport type InitialNavigationMode = 'eager' | 'blocking'\n\nexport interface NavigationRedirect<TRouteMap extends object = WevuNamedRouteMap> {\n to: RouteLocationRaw<TRouteMap>\n replace?: boolean\n}\n\nexport type RouteRecordRedirect<TRouteMap extends object = WevuNamedRouteMap>\n = | RouteLocationRaw<TRouteMap>\n | NavigationRedirect<TRouteMap>\n | ((\n to: RouteLocationNormalizedLoaded<TRouteMap>,\n from: RouteLocationNormalizedLoaded<TRouteMap>,\n ) => RouteLocationRaw<TRouteMap> | NavigationRedirect<TRouteMap> | Promise<RouteLocationRaw<TRouteMap> | NavigationRedirect<TRouteMap>>)\n\ninterface RouteRecordCommon<TRouteMap extends object> {\n alias?: string | readonly string[]\n beforeEnter?: NavigationGuard<TRouteMap> | readonly NavigationGuard<TRouteMap>[]\n redirect?: RouteRecordRedirect<TRouteMap>\n}\n\ntype BroadRouteRecordInput<TRouteMap extends object> = RouteRecordCommon<TRouteMap> & {\n name?: string\n path: string\n meta?: RouteMeta\n children?: readonly RouteRecordInput<TRouteMap>[]\n}\n\ntype StrictRouteRecordInputByName<\n TRouteMap extends object,\n TName extends WevuRouteName<TRouteMap>,\n> = RouteRecordCommon<TRouteMap> & {\n name: TName\n path: WevuNamedRoutePath<TRouteMap, TName>\n meta: StrictRouteRecordMeta<TRouteMap, TName>\n children?: readonly RouteRecordInput<TRouteMap>[]\n}\n\nexport type RouteRecordInput<TRouteMap extends object = WevuNamedRouteMap>\n = IsBroadRouteMap<TRouteMap> extends true\n ? BroadRouteRecordInput<TRouteMap>\n : {\n [TName in WevuRouteName<TRouteMap>]: StrictRouteRecordInputByName<TRouteMap, TName>\n }[WevuRouteName<TRouteMap>]\n\ntype BroadRouteRecordRaw<TRouteMap extends object> = RouteRecordCommon<TRouteMap> & {\n name: string\n path: string\n meta?: RouteMeta\n children?: readonly RouteRecordRaw<TRouteMap>[]\n}\n\ntype StrictRouteRecordRawByName<\n TRouteMap extends object,\n TName extends WevuRouteName<TRouteMap>,\n> = RouteRecordCommon<TRouteMap> & {\n name: TName\n path: WevuNamedRoutePath<TRouteMap, TName>\n meta: StrictRouteRecordMeta<TRouteMap, TName>\n children?: readonly RouteRecordRaw<TRouteMap>[]\n}\n\nexport type RouteRecordRaw<TRouteMap extends object = WevuNamedRouteMap>\n = IsBroadRouteMap<TRouteMap> extends true\n ? BroadRouteRecordRaw<TRouteMap>\n : {\n [TName in WevuRouteName<TRouteMap>]: StrictRouteRecordRawByName<TRouteMap, TName>\n }[WevuRouteName<TRouteMap>]\n\nexport type NamedRouteRecord<TRouteMap extends object = WevuNamedRouteMap>\n = RouteRecordRaw<TRouteMap> extends infer TRoute\n ? TRoute extends { name: string, path: string }\n ? Pick<TRoute, 'name' | 'path'>\n : never\n : never\n\nexport type NamedRoutes<TRouteMap extends object = WevuNamedRouteMap>\n = IsBroadRouteMap<TRouteMap> extends true\n ? Readonly<Record<string, string>> | readonly RouteRecordRaw<TRouteMap>[]\n : readonly RouteRecordRaw<TRouteMap>[]\n\nexport type RouteRecordMatched<TRouteMap extends object = WevuNamedRouteMap>\n = IsBroadRouteMap<TRouteMap> extends true\n ? {\n name: string\n path: string\n aliasPath?: string\n meta?: RouteMeta\n }\n : {\n [TName in WevuRouteName<TRouteMap>]: {\n name: TName\n path: string\n aliasPath?: string\n meta: WevuNamedRouteMeta<TRouteMap, TName>\n }\n }[WevuRouteName<TRouteMap>]\n\nexport type NavigationGuardResult<TRouteMap extends object = WevuNamedRouteMap>\n = | void\n | boolean\n | NavigationFailure<TRouteMap>\n | RouteLocationRaw<TRouteMap>\n | NavigationRedirect<TRouteMap>\n\nexport type NavigationGuard<TRouteMap extends object = WevuNamedRouteMap> = (\n to: RouteLocationNormalizedLoaded<TRouteMap> | undefined,\n from: RouteLocationNormalizedLoaded<TRouteMap>,\n context?: NavigationGuardContext<TRouteMap>,\n) => NavigationGuardResult<TRouteMap> | Promise<NavigationGuardResult<TRouteMap>>\n\nexport type NavigationAfterEach<TRouteMap extends object = WevuNamedRouteMap> = (\n to: RouteLocationNormalizedLoaded<TRouteMap> | undefined,\n from: RouteLocationNormalizedLoaded<TRouteMap>,\n failure?: NavigationFailure<TRouteMap>,\n context?: NavigationAfterEachContext<TRouteMap>,\n) => void | Promise<void>\n\nexport interface NavigationGuardContext<TRouteMap extends object = WevuNamedRouteMap> {\n readonly mode: NavigationMode\n readonly to?: RouteLocationNormalizedLoaded<TRouteMap>\n readonly from: RouteLocationNormalizedLoaded<TRouteMap>\n readonly nativeRouter: SetupContextRouter\n}\n\nexport interface NavigationAfterEachContext<TRouteMap extends object = WevuNamedRouteMap> {\n readonly mode: NavigationMode\n readonly to?: RouteLocationNormalizedLoaded<TRouteMap>\n readonly from: RouteLocationNormalizedLoaded<TRouteMap>\n readonly nativeRouter: SetupContextRouter\n readonly failure?: NavigationFailure<TRouteMap>\n}\n\nexport interface NavigationErrorContext<TRouteMap extends object = WevuNamedRouteMap> {\n readonly mode: NavigationMode\n readonly to?: RouteLocationNormalizedLoaded<TRouteMap>\n readonly from: RouteLocationNormalizedLoaded<TRouteMap>\n readonly nativeRouter: SetupContextRouter\n readonly failure: NavigationFailure<TRouteMap>\n}\n\nexport type NavigationErrorHandler<TRouteMap extends object = WevuNamedRouteMap> = (\n error: unknown,\n context: NavigationErrorContext<TRouteMap>,\n) => void | Promise<void>\n\nexport interface UseRouterOptions<TRouteMap extends object = WevuNamedRouteMap> {\n tabBarEntries?: readonly (TypedRouterTabBarUrl | string)[]\n /**\n * Vue Router 对齐入口:推荐使用 `routes`\n */\n routes?: readonly RouteRecordInput<TRouteMap>[]\n /**\n * 兼容入口:支持对象 map 或路由记录数组\n */\n namedRoutes?: NamedRoutes<TRouteMap>\n paramsMode?: RouteParamsMode\n maxRedirects?: number\n /**\n * 首屏导航守卫模式。默认立即挂载页面,只有明确配置 `blocking` 时才等待守卫完成。\n */\n initialNavigationMode?: InitialNavigationMode\n /**\n * blocking 首屏导航守卫的最大等待时间(毫秒),超时后放行页面挂载。\n */\n initialNavigationTimeout?: 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 type RouterResolve<TRouteMap extends object = WevuNamedRouteMap>\n = IsBroadRouteMap<TRouteMap> extends true\n ? (to: RouteLocationRaw<TRouteMap>) => RouteLocationNormalizedLoaded<TRouteMap>\n : {\n <TName extends WevuRouteName<TRouteMap>>(\n to: RouteLocationNamedRaw<TRouteMap, TName>,\n ): RouteLocationNormalizedByName<TRouteMap, TName>\n (to: RouteLocationRaw<TRouteMap>): RouteLocationNormalizedLoaded<TRouteMap>\n }\n\nexport interface AddRoute<TRouteMap extends object = WevuNamedRouteMap> {\n (route: RouteRecordRaw<TRouteMap>): () => void\n (parentName: WevuRouteName<TRouteMap>, route: RouteRecordRaw<TRouteMap>): () => void\n}\n\nexport interface RouterNavigation<TRouteMap extends object = WevuNamedRouteMap> {\n readonly nativeRouter: SetupContextRouter\n readonly options: Readonly<UseRouterOptions<TRouteMap>>\n readonly currentRoute: Readonly<RouteLocationNormalizedLoaded<TRouteMap>>\n install: (app?: unknown) => void\n resolve: RouterResolve<TRouteMap>\n isReady: () => Promise<void>\n push: (to: RouteLocationRaw<TRouteMap>) => Promise<void | NavigationFailure<TRouteMap>>\n replace: (to: RouteLocationRaw<TRouteMap>) => Promise<void | NavigationFailure<TRouteMap>>\n back: (delta?: number) => Promise<void | NavigationFailure<TRouteMap>>\n go: (delta: number) => Promise<void | NavigationFailure<TRouteMap>>\n forward: () => Promise<void | NavigationFailure<TRouteMap>>\n hasRoute: (name: WevuRouteName<TRouteMap>) => boolean\n getRoutes: () => readonly RouteRecordRaw<TRouteMap>[]\n addRoute: AddRoute<TRouteMap>\n removeRoute: (name: WevuRouteName<TRouteMap>) => void\n clearRoutes: () => void\n beforeEach: (guard: NavigationGuard<TRouteMap>) => () => void\n beforeResolve: (guard: NavigationGuard<TRouteMap>) => () => void\n afterEach: (hook: NavigationAfterEach<TRouteMap>) => () => void\n onError: (handler: NavigationErrorHandler<TRouteMap>) => () => void\n}\n\nexport type WevuAutoRoute<TRouteMap extends object = WevuNamedRouteMap>\n = IsBroadRouteMap<TRouteMap> extends true\n ? {\n readonly name: string\n readonly path: string\n readonly meta: RouteMeta\n }\n : {\n [TName in WevuRouteName<TRouteMap>]: {\n readonly name: TName\n readonly path: WevuNamedRoutePath<TRouteMap, TName>\n readonly meta: StrictRouteRecordMeta<TRouteMap, TName>\n }\n }[WevuRouteName<TRouteMap>]\n"],"mappings":";AAyLA,MAAa,wBAAwB;CACnC,SAAS;CACT,SAAS;CACT,WAAW;CACX,YAAY;AACd"}
|
|
@@ -2,11 +2,12 @@ import { SetupContextRouter } from "../runtime/types/props/router.mjs";
|
|
|
2
2
|
import "../runtime/types/props.mjs";
|
|
3
3
|
import { RouteLocationNormalizedLoaded } from "./types.mjs";
|
|
4
4
|
import "./routeSync.mjs";
|
|
5
|
+
import { WevuNamedRouteMap } from "../router.mjs";
|
|
5
6
|
//#region src/router/useRoute.d.ts
|
|
6
|
-
export interface UseRouteOptions {
|
|
7
|
-
resolveRoute?: (route: RouteLocationNormalizedLoaded) => RouteLocationNormalizedLoaded
|
|
7
|
+
export interface UseRouteOptions<TRouteMap extends object = WevuNamedRouteMap> {
|
|
8
|
+
resolveRoute?: (route: RouteLocationNormalizedLoaded<TRouteMap>) => RouteLocationNormalizedLoaded<TRouteMap>;
|
|
8
9
|
}
|
|
9
|
-
export declare function useRoute(options?: UseRouteOptions): Readonly<RouteLocationNormalizedLoaded
|
|
10
|
+
export declare function useRoute<TRouteMap extends object = WevuNamedRouteMap>(options?: UseRouteOptions<NoInfer<TRouteMap>>): Readonly<RouteLocationNormalizedLoaded<TRouteMap>>;
|
|
10
11
|
/**
|
|
11
12
|
* @description 获取当前组件路径语义的原生 Router
|
|
12
13
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRoute.mjs","names":["useNativeRouterInternal","useNativePageRouterInternal"],"sources":["../../../src/router/useRoute.ts"],"sourcesContent":["import type { MiniProgramPageLike } from '../routerInternal/types'\nimport type { MiniProgramPageLifetime } from '../runtime/types'\nimport type { SetupContextRouter } from '../runtime/types/props'\nimport type { RouteStateSyncPayload } from './routeSync'\nimport type { LocationQueryRaw, RouteLocationNormalizedLoaded } from './types'\nimport { WEVU_NATIVE_INSTANCE_KEY } from '@weapp-core/constants'\nimport { reactive, readonly } from '../reactivity'\nimport { cloneLocationQuery, cloneRouteLocationRedirectedFrom, cloneRouteMeta, cloneRouteParams, cloneRouteRecordMatchedList, resolveCurrentRoute, resolvePageRoute } from '../routerInternal/shared'\nimport { getCurrentSetupContext, onLoad, onReady, onRouteDone, onShow, onUnload } from '../runtime/hooks'\nimport { getCurrentMiniProgramPages } from '../runtime/platform'\nimport {\n useNativePageRouter as useNativePageRouterInternal,\n useNativeRouter as useNativeRouterInternal,\n} from '../runtime/vueCompat'\nimport { getActiveRouter } from './instance'\nimport { resolveRouteLocation } from './resolve'\nimport { registerRouteStateSyncHandler } from './routeSync'\n\nexport interface UseRouteOptions {\n resolveRoute?: (route: RouteLocationNormalizedLoaded) => RouteLocationNormalizedLoaded\n}\n\ninterface RouteStateControllerOptions extends UseRouteOptions {\n beforeRouteStateSync?: (\n nextRoute: RouteLocationNormalizedLoaded,\n payload: RouteStateSyncPayload,\n ) => void\n}\n\nexport interface RouteStateController {\n route: Readonly<RouteLocationNormalizedLoaded>\n}\n\nfunction isPageLikeInstance(instance: Record<string, any>): boolean {\n return typeof instance.route === 'string' || typeof instance.__route__ === 'string'\n}\n\nfunction resolveRouteControllerInstance(instance: Record<string, any>): Record<string, any> {\n const nativeInstance = instance[WEVU_NATIVE_INSTANCE_KEY]\n return nativeInstance && typeof nativeInstance === 'object'\n ? nativeInstance\n : instance\n}\n\nfunction shouldSyncRouteStateForInstance(\n instance: Record<string, any>,\n isPageController: boolean,\n payload: RouteStateSyncPayload | undefined,\n): boolean {\n if (payload?.source === 'router') {\n return true\n }\n\n // 页面级 route controller 只处理当前页面的广播,避免 DevTools 在 onUnload/onShow\n // 交错时让隐藏页面重复执行导航守卫。组件级 controller 仍接收全局同步。\n if (!isPageController) {\n return true\n }\n\n const routeControllerInstance = resolveRouteControllerInstance(instance)\n if (payload?.page) {\n return payload.page === routeControllerInstance\n }\n\n const pages = getCurrentMiniProgramPages()\n return pages[pages.length - 1] === routeControllerInstance\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 createRouteStateController(options: RouteStateControllerOptions = {}): RouteStateController {\n const setupContext = getCurrentSetupContext<{ instance?: unknown }>()\n const fallbackPage = setupContext?.instance && typeof setupContext.instance === 'object'\n ? setupContext.instance as MiniProgramPageLike & Record<string, unknown>\n : undefined\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(\n queryOverride?: LocationQueryRaw,\n routeOverride?: RouteLocationNormalizedLoaded,\n payload?: RouteStateSyncPayload,\n ) {\n const nextRoute = routeOverride\n ? resolveRoute(routeOverride)\n : resolveRoute(resolveCurrentRoute(queryOverride, fallbackPage))\n if (payload) {\n options.beforeRouteStateSync?.(nextRoute, payload)\n }\n applyRouteState(routeState, nextRoute)\n }\n\n if (!fallbackPage) {\n const unregisterRouteStateSync = registerRouteStateSyncHandler((payload) => {\n if (payload?.route) {\n syncRoute(undefined, payload.route, payload)\n return\n }\n if (payload?.url) {\n syncRoute(undefined, resolveRouteLocation(payload.url, routeState.path), payload)\n return\n }\n if (payload?.page) {\n syncRoute(undefined, resolvePageRoute(payload.page), payload)\n return\n }\n syncRoute(undefined, undefined, payload)\n })\n void unregisterRouteStateSync\n return {\n route: readonly(routeState) as Readonly<RouteLocationNormalizedLoaded>,\n }\n }\n\n const pageInstance = fallbackPage\n const initialRouteControllerInstance = resolveRouteControllerInstance(pageInstance)\n const isPageController = isPageLikeInstance(initialRouteControllerInstance)\n || getCurrentMiniProgramPages().includes(initialRouteControllerInstance)\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 const unregisterRouteStateSync = registerRouteStateSyncHandler((payload) => {\n if (!shouldSyncRouteStateForInstance(pageInstance, isPageController, payload)) {\n return\n }\n if (payload?.route) {\n syncRoute(undefined, payload.route, payload)\n return\n }\n if (payload?.url) {\n syncRoute(undefined, resolveRouteLocation(payload.url, routeState.path), payload)\n return\n }\n if (payload?.page) {\n syncRoute(undefined, resolvePageRoute(payload.page), payload)\n return\n }\n syncRoute(undefined, undefined, payload)\n })\n onUnload(() => {\n unregisterRouteStateSync()\n })\n\n return {\n route: readonly(routeState) as Readonly<RouteLocationNormalizedLoaded>,\n }\n}\n\nexport function useRoute(options: UseRouteOptions = {}): Readonly<RouteLocationNormalizedLoaded> {\n return createRouteStateController(options).route\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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useRoute.mjs","names":["runtimeOptions","useNativeRouterInternal","useNativePageRouterInternal"],"sources":["../../../src/router/useRoute.ts"],"sourcesContent":["import type { WevuNamedRouteMap } from '../router'\nimport type { MiniProgramPageLike } from '../routerInternal/types'\nimport type { MiniProgramPageLifetime } from '../runtime/types'\nimport type { SetupContextRouter } from '../runtime/types/props'\nimport type { RouteStateSyncPayload } from './routeSync'\nimport type { LocationQueryRaw, RouteLocationNormalizedLoaded } from './types'\nimport { WEVU_NATIVE_INSTANCE_KEY } from '@weapp-core/constants'\nimport { reactive, readonly } from '../reactivity'\nimport { cloneLocationQuery, cloneRouteLocationRedirectedFrom, cloneRouteMeta, cloneRouteParams, cloneRouteRecordMatchedList, resolveCurrentRoute, resolvePageRoute } from '../routerInternal/shared'\nimport { getCurrentSetupContext, onLoad, onReady, onRouteDone, onShow, onUnload } from '../runtime/hooks'\nimport { getCurrentMiniProgramPages } from '../runtime/platform'\nimport {\n useNativePageRouter as useNativePageRouterInternal,\n useNativeRouter as useNativeRouterInternal,\n} from '../runtime/vueCompat'\nimport { getActiveRouter } from './instance'\nimport { resolveRouteLocation } from './resolve'\nimport { registerRouteStateSyncHandler } from './routeSync'\n\nexport interface UseRouteOptions<TRouteMap extends object = WevuNamedRouteMap> {\n resolveRoute?: (\n route: RouteLocationNormalizedLoaded<TRouteMap>,\n ) => RouteLocationNormalizedLoaded<TRouteMap>\n}\n\ninterface RouteStateControllerOptions extends UseRouteOptions {\n beforeRouteStateSync?: (\n nextRoute: RouteLocationNormalizedLoaded,\n payload: RouteStateSyncPayload,\n ) => void\n}\n\nexport interface RouteStateController {\n route: Readonly<RouteLocationNormalizedLoaded>\n}\n\nfunction isPageLikeInstance(instance: Record<string, any>): boolean {\n return typeof instance.route === 'string' || typeof instance.__route__ === 'string'\n}\n\nfunction resolveRouteControllerInstance(instance: Record<string, any>): Record<string, any> {\n const nativeInstance = instance[WEVU_NATIVE_INSTANCE_KEY]\n return nativeInstance && typeof nativeInstance === 'object'\n ? nativeInstance\n : instance\n}\n\nfunction shouldSyncRouteStateForInstance(\n instance: Record<string, any>,\n isPageController: boolean,\n payload: RouteStateSyncPayload | undefined,\n): boolean {\n if (payload?.source === 'router') {\n return true\n }\n\n // 页面级 route controller 只处理当前页面的广播,避免 DevTools 在 onUnload/onShow\n // 交错时让隐藏页面重复执行导航守卫。组件级 controller 仍接收全局同步。\n if (!isPageController) {\n return true\n }\n\n const routeControllerInstance = resolveRouteControllerInstance(instance)\n if (payload?.page) {\n return payload.page === routeControllerInstance\n }\n\n const pages = getCurrentMiniProgramPages()\n return pages[pages.length - 1] === routeControllerInstance\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 createRouteStateController(options: RouteStateControllerOptions = {}): RouteStateController {\n const setupContext = getCurrentSetupContext<{ instance?: unknown }>()\n const fallbackPage = setupContext?.instance && typeof setupContext.instance === 'object'\n ? setupContext.instance as MiniProgramPageLike & Record<string, unknown>\n : undefined\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(\n queryOverride?: LocationQueryRaw,\n routeOverride?: RouteLocationNormalizedLoaded,\n payload?: RouteStateSyncPayload,\n ) {\n const nextRoute = routeOverride\n ? resolveRoute(routeOverride)\n : resolveRoute(resolveCurrentRoute(queryOverride, fallbackPage))\n if (payload) {\n options.beforeRouteStateSync?.(nextRoute, payload)\n }\n applyRouteState(routeState, nextRoute)\n }\n\n if (!fallbackPage) {\n const unregisterRouteStateSync = registerRouteStateSyncHandler((payload) => {\n if (payload?.route) {\n syncRoute(undefined, payload.route, payload)\n return\n }\n if (payload?.url) {\n syncRoute(undefined, resolveRouteLocation(payload.url, routeState.path), payload)\n return\n }\n if (payload?.page) {\n syncRoute(undefined, resolvePageRoute(payload.page), payload)\n return\n }\n syncRoute(undefined, undefined, payload)\n })\n void unregisterRouteStateSync\n return {\n route: readonly(routeState) as Readonly<RouteLocationNormalizedLoaded>,\n }\n }\n\n const pageInstance = fallbackPage\n const initialRouteControllerInstance = resolveRouteControllerInstance(pageInstance)\n const isPageController = isPageLikeInstance(initialRouteControllerInstance)\n || getCurrentMiniProgramPages().includes(initialRouteControllerInstance)\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 const unregisterRouteStateSync = registerRouteStateSyncHandler((payload) => {\n if (!shouldSyncRouteStateForInstance(pageInstance, isPageController, payload)) {\n return\n }\n if (payload?.route) {\n syncRoute(undefined, payload.route, payload)\n return\n }\n if (payload?.url) {\n syncRoute(undefined, resolveRouteLocation(payload.url, routeState.path), payload)\n return\n }\n if (payload?.page) {\n syncRoute(undefined, resolvePageRoute(payload.page), payload)\n return\n }\n syncRoute(undefined, undefined, payload)\n })\n onUnload(() => {\n unregisterRouteStateSync()\n })\n\n return {\n route: readonly(routeState) as Readonly<RouteLocationNormalizedLoaded>,\n }\n}\n\nexport function useRoute<TRouteMap extends object = WevuNamedRouteMap>(\n options: UseRouteOptions<NoInfer<TRouteMap>> = {},\n): Readonly<RouteLocationNormalizedLoaded<TRouteMap>> {\n // 路由表泛型只收窄公开快照;状态同步仍复用同一个运行时控制器。\n const runtimeOptions = options as unknown as UseRouteOptions\n const route = createRouteStateController(runtimeOptions).route\n return route as unknown as Readonly<RouteLocationNormalizedLoaded<TRouteMap>>\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"],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { RouterNavigation } from "./types.mjs";
|
|
2
|
+
import { WevuNamedRouteMap } from "../router.mjs";
|
|
2
3
|
//#region src/router/useRouter.d.ts
|
|
3
4
|
/**
|
|
4
5
|
* @description 获取当前已创建的路由实例。
|
|
5
6
|
*/
|
|
6
|
-
export declare function useRouter(): RouterNavigation
|
|
7
|
+
export declare function useRouter<TRouteMap extends object = WevuNamedRouteMap>(): RouterNavigation<TRouteMap>;
|
|
7
8
|
//#endregion
|
|
8
9
|
//# sourceMappingURL=useRouter.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRouter.mjs","names":[],"sources":["../../../src/router/useRouter.ts"],"sourcesContent":["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
|
|
1
|
+
{"version":3,"file":"useRouter.mjs","names":[],"sources":["../../../src/router/useRouter.ts"],"sourcesContent":["import type { WevuNamedRouteMap } from '../router'\nimport type { RouterNavigation } from './types'\nimport { getActiveRouter } from './instance'\n\n/**\n * @description 获取当前已创建的路由实例。\n */\nexport function useRouter<TRouteMap extends object = WevuNamedRouteMap>(): RouterNavigation<TRouteMap> {\n const router = getActiveRouter()\n if (router) {\n return router as unknown as RouterNavigation<TRouteMap>\n }\n\n throw new Error('useRouter() 未找到已创建的 router 实例。请先在 setup() 中调用 createRouter()。')\n}\n"],"mappings":";;;;;;AAOA,SAAgB,YAAuF;CACrG,MAAM,SAAS,gBAAgB;CAC/B,IAAI,QACF,OAAO;CAGT,MAAM,IAAI,MAAM,+DAA+D;AACjF"}
|
package/dist/dev/router.d.mts
CHANGED
|
@@ -1,10 +1,26 @@
|
|
|
1
1
|
import { RouterNavigateToOption, RouterReLaunchOption, RouterRedirectToOption, RouterSwitchTabOption, SetupContextRouter, TypedRouterTabBarUrl, TypedRouterUrl, WevuTypedRouterRouteMap } from "./runtime/types/props/router.mjs";
|
|
2
2
|
import "./runtime/types/props.mjs";
|
|
3
3
|
import { parseQuery, stringifyQuery } from "./routerInternal/query.mjs";
|
|
4
|
-
import
|
|
4
|
+
import "./routerInternal/shared.mjs";
|
|
5
|
+
import { AddRoute, InitialNavigationMode, LocationQuery, LocationQueryRaw, LocationQueryValue, LocationQueryValueRaw, NamedRouteRecord, NamedRoutes, NavigationAfterEach, NavigationAfterEachContext, NavigationErrorContext, NavigationErrorHandler, NavigationFailure, NavigationFailureType, NavigationFailureTypeValue, NavigationGuard, NavigationGuardContext, NavigationGuardResult, NavigationMode, NavigationRedirect, RouteLocationNamedRaw, RouteLocationNormalizedByName, RouteLocationNormalizedLoaded, RouteLocationRaw, RouteLocationRedirectedFrom, RouteMeta, RouteParamValue, RouteParamValueRaw, RouteParams, RouteParamsMode, RouteParamsRaw, RouteQueryParser, RouteQueryStringifier, RouteRecordInput, RouteRecordMatched, RouteRecordRaw, RouteRecordRedirect, RouterNavigation, RouterResolve, UseRouterOptions, WevuAutoRoute, WevuBroadRouteMap, WevuNamedRouteDefinition, WevuNamedRouteMeta, WevuNamedRoutePath, WevuRouteName } from "./router/types.mjs";
|
|
5
6
|
import { createRouter } from "./router/createRouter.mjs";
|
|
6
7
|
import { createNavigationFailure, isNavigationFailure } from "./router/navigationCore.mjs";
|
|
7
8
|
import { resolveRouteLocation } from "./router/resolve.mjs";
|
|
8
|
-
import { useNativePageRouter, useNativeRouter, useRoute } from "./router/useRoute.mjs";
|
|
9
|
+
import { UseRouteOptions, useNativePageRouter, useNativeRouter, useRoute } from "./router/useRoute.mjs";
|
|
9
10
|
import { useRouter } from "./router/useRouter.mjs";
|
|
10
|
-
|
|
11
|
+
import { StaticPageDeclaration, StaticPageDeclaration as StaticPageDeclaration$1, StaticRouteValue } from "@wevu/compiler/page-route";
|
|
12
|
+
//#region src/router.d.ts
|
|
13
|
+
/**
|
|
14
|
+
* 由 weapp-vite 生成的项目级命名路由声明会扩展此接口。
|
|
15
|
+
*/
|
|
16
|
+
export interface WevuNamedRouteMap {}
|
|
17
|
+
/**
|
|
18
|
+
* definePage 声明页面命名路由(仅编译期宏,无运行时实现)。
|
|
19
|
+
*
|
|
20
|
+
* `name` 必须是应用内唯一的非空静态字符串,`meta` 仅支持有限 JSON 对象。
|
|
21
|
+
* 参数只接受 `name` 与 `meta`;页面布局继续使用 `definePageMeta`,页面路径由构建工具推导。
|
|
22
|
+
*/
|
|
23
|
+
export declare function definePage(route: StaticPageDeclaration$1): void;
|
|
24
|
+
//#endregion
|
|
25
|
+
export { type AddRoute, type InitialNavigationMode, type LocationQuery, type LocationQueryRaw, type LocationQueryValue, type LocationQueryValueRaw, type NamedRouteRecord, type NamedRoutes, type NavigationAfterEach, type NavigationAfterEachContext, type NavigationErrorContext, type NavigationErrorHandler, type NavigationFailure, NavigationFailureType, type NavigationFailureTypeValue, type NavigationGuard, type NavigationGuardContext, type NavigationGuardResult, type NavigationMode, type NavigationRedirect, type RouteLocationNamedRaw, type RouteLocationNormalizedByName, type RouteLocationNormalizedLoaded, type RouteLocationRaw, type RouteLocationRedirectedFrom, type RouteMeta, type RouteParamValue, type RouteParamValueRaw, type RouteParams, type RouteParamsMode, type RouteParamsRaw, type RouteQueryParser, type RouteQueryStringifier, type RouteRecordInput, type RouteRecordMatched, type RouteRecordRaw, type RouteRecordRedirect, type RouterNavigateToOption, type RouterNavigation, type RouterReLaunchOption, type RouterRedirectToOption, type RouterResolve, type RouterSwitchTabOption, type SetupContextRouter, type StaticPageDeclaration, type StaticRouteValue, type TypedRouterTabBarUrl, type TypedRouterUrl, type UseRouteOptions, type UseRouterOptions, type WevuAutoRoute, type WevuBroadRouteMap, type WevuNamedRouteDefinition, type WevuNamedRouteMeta, type WevuNamedRoutePath, type WevuRouteName, type WevuTypedRouterRouteMap, createNavigationFailure, createRouter, isNavigationFailure, parseQuery, resolveRouteLocation, stringifyQuery, useNativePageRouter, useNativeRouter, useRoute, useRouter };
|
|
26
|
+
//# sourceMappingURL=router.d.mts.map
|