2016-04-25 22:41:33 +00:00

27 lines
853 B
TypeScript

import {UrlSegment, Tree} from './segments';
import {BaseException} from 'angular2/src/facade/exceptions';
export abstract class RouterUrlParser { abstract parse(url: string): Tree<UrlSegment>; }
export class DefaultRouterUrlParser extends RouterUrlParser {
parse(url: string): Tree<UrlSegment> {
if (url.length === 0) {
throw new BaseException(`Invalid url '${url}'`);
}
return new Tree<UrlSegment>(this._parseNodes(url));
}
private _parseNodes(url: string): UrlSegment[] {
let index = url.indexOf("/", 1);
let children: UrlSegment[];
let currentUrl;
if (index > -1) {
children = this._parseNodes(url.substring(index + 1));
currentUrl = url.substring(0, index);
} else {
children = [];
currentUrl = url;
}
return [new UrlSegment(currentUrl, {}, "")].concat(children);
}
}