feat: implement recognizer

This commit is contained in:
vsavkin
2016-05-23 16:14:23 -07:00
parent 4b1db0e61c
commit f259a2204b
9 changed files with 561 additions and 5 deletions

View File

@ -1,4 +1,5 @@
import { Tree, TreeNode } from './tree';
import { shallowEqual } from './util';
export class UrlTree extends Tree<UrlSegment> {
constructor(root: TreeNode<UrlSegment>, public queryParameters: {[key: string]: string}, public fragment: string | null) {
@ -7,5 +8,25 @@ export class UrlTree extends Tree<UrlSegment> {
}
export class UrlSegment {
constructor(public segment: any, public parameters: {[key: string]: string}) {}
}
constructor(public path: string, public parameters: {[key: string]: string}) {}
toString() {
let params = [];
for (let prop in this.parameters) {
if (this.parameters.hasOwnProperty(prop)) {
params.push(`${prop}=${this.parameters[prop]}`);
}
}
const paramsString = params.length > 0 ? `(${params.join(',')})` : '';
return `${this.path}${paramsString}`;
}
}
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;
}