45 lines
1.2 KiB
TypeScript
Raw Normal View History

2016-06-08 11:13:41 -07:00
import {PRIMARY_OUTLET} from './shared';
2016-06-09 14:33:09 -07:00
import {DefaultUrlSerializer, serializeSegment} from './url_serializer';
2016-06-08 11:13:41 -07:00
import {shallowEqual} from './utils/collection';
import {Tree, TreeNode} from './utils/tree';
export function createEmptyUrlTree() {
2016-06-08 11:13:41 -07:00
return new UrlTree(
new TreeNode<UrlSegment>(new UrlSegment('', {}, PRIMARY_OUTLET), []), {}, null);
}
2016-05-21 17:35:55 -07:00
2016-05-24 13:41:37 -07:00
/**
* A URL in the tree form.
*/
2016-05-21 17:35:55 -07:00
export class UrlTree extends Tree<UrlSegment> {
/**
* @internal
*/
2016-06-08 11:13:41 -07:00
constructor(
root: TreeNode<UrlSegment>, public queryParams: {[key: string]: string},
public fragment: string|null) {
2016-05-21 17:35:55 -07:00
super(root);
}
2016-06-09 14:33:09 -07:00
toString(): string { return new DefaultUrlSerializer().serialize(this); }
2016-05-21 17:35:55 -07:00
}
export class UrlSegment {
/**
* @internal
*/
2016-06-08 11:13:41 -07:00
constructor(
public path: string, public parameters: {[key: string]: string}, public outlet: string) {}
2016-05-23 16:14:23 -07:00
2016-06-09 14:33:09 -07:00
toString(): string { return serializeSegment(this); }
2016-05-23 16:14:23 -07:00
}
export function equalUrlSegments(a: UrlSegment[], b: UrlSegment[]): boolean {
if (a.length !== b.length) return false;
for (let i = 0; i < a.length; ++i) {
if (a[i].path !== b[i].path) return false;
if (!shallowEqual(a[i].parameters, b[i].parameters)) return false;
}
return true;
}