export interface NavigationGuardCallback {
(): void
+ (location: RouteLocation): void
(valid: false): void
}
NavigationGuard,
RouteLocationNormalized,
NavigationGuardCallback,
+ RouteLocation,
} from '../types'
+import { isRouteLocation } from './index'
+
export function guardToPromiseFn(
guard: NavigationGuard,
to: RouteLocationNormalized,
): () => Promise<void> {
return () =>
new Promise((resolve, reject) => {
- const next: NavigationGuardCallback = (valid?: boolean) => {
+ const next: NavigationGuardCallback = (
+ valid?: boolean | RouteLocation
+ ) => {
// TODO: better error
// TODO: handle callback
if (valid === false) reject(new Error('Aborted'))
- else resolve()
+ else if (isRouteLocation(valid)) {
+ // TODO: redirect
+ } else resolve()
}
guard(to, from, next)
-import { RouteRecord, RouteLocationNormalized } from '../types'
+import { RouteRecord, RouteLocationNormalized, RouteLocation } from '../types'
import { guardToPromiseFn } from './guardToPromiseFn'
export * from './guardToPromiseFn'
export function last<T>(array: T[]): T {
return array[array.length - 1]
}
+
+export function isRouteLocation(route: any): route is RouteLocation {
+ return typeof route === 'string' || (route && typeof route === 'object')
+}