2016-06-08 18:13:41 +00:00
|
|
|
import {Type} from '@angular/core';
|
2016-05-23 23:14:23 +00:00
|
|
|
|
|
|
|
|
export type RouterConfig = Route[];
|
|
|
|
|
|
|
|
|
|
export interface Route {
|
|
|
|
|
path?: string;
|
2016-06-14 21:55:59 +00:00
|
|
|
terminal?: boolean;
|
2016-06-08 23:14:26 +00:00
|
|
|
component?: Type|string;
|
2016-05-23 23:14:23 +00:00
|
|
|
outlet?: string;
|
2016-06-07 16:50:35 +00:00
|
|
|
canActivate?: any[];
|
|
|
|
|
canDeactivate?: any[];
|
2016-06-08 23:14:26 +00:00
|
|
|
redirectTo?: string;
|
2016-05-23 23:14:23 +00:00
|
|
|
children?: Route[];
|
2016-06-16 21:36:51 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function validateConfig(config: RouterConfig): void {
|
|
|
|
|
config.forEach(validateNode);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function validateNode(route: Route): void {
|
|
|
|
|
if (!!route.redirectTo && !!route.children) {
|
|
|
|
|
throw new Error(
|
|
|
|
|
`Invalid configuration of route '${route.path}': redirectTo and children cannot be used together`);
|
|
|
|
|
}
|
|
|
|
|
if (!!route.redirectTo && !!route.component) {
|
|
|
|
|
throw new Error(
|
|
|
|
|
`Invalid configuration of route '${route.path}': redirectTo and component cannot be used together`);
|
|
|
|
|
}
|
|
|
|
|
if (route.path === undefined) {
|
|
|
|
|
throw new Error(`Invalid route configuration: routes must have path specified`);
|
|
|
|
|
}
|
|
|
|
|
if (route.path.startsWith('/')) {
|
2016-06-16 23:13:05 +00:00
|
|
|
throw new Error(`Invalid route configuration of route '${route.path}': path cannot start with a slash`);
|
2016-06-16 21:36:51 +00:00
|
|
|
}
|
2016-05-23 23:14:23 +00:00
|
|
|
}
|