import {isPresent, isBlank, StringWrapper} from 'angular2/src/facade/lang'; import {Map, MapWrapper, List, ListWrapper} from 'angular2/src/facade/collection'; function paramParser(rawParams: string): Map> { var map: Map> = MapWrapper.create(); var params: List = StringWrapper.split(rawParams, '&'); ListWrapper.forEach(params, (param: string) => { var split: List = StringWrapper.split(param, '='); var key = ListWrapper.get(split, 0); var val = ListWrapper.get(split, 1); var list = MapWrapper.get(map, key) || []; list.push(val); MapWrapper.set(map, key, list); }); return map; } export class URLSearchParams { paramsMap: Map>; constructor(public rawParams: string) { this.paramsMap = paramParser(rawParams); } has(param: string): boolean { return MapWrapper.contains(this.paramsMap, param); } get(param: string): string { return ListWrapper.first(MapWrapper.get(this.paramsMap, param)); } getAll(param: string): List { return MapWrapper.get(this.paramsMap, param) || []; } append(param: string, val: string): void { var list = MapWrapper.get(this.paramsMap, param) || []; list.push(val); MapWrapper.set(this.paramsMap, param, list); } toString(): string { var paramsList = []; MapWrapper.forEach(this.paramsMap, (values, k) => { ListWrapper.forEach(values, v => { paramsList.push(k + '=' + v); }); }); return ListWrapper.join(paramsList, '&'); } delete (param): void { MapWrapper.delete(this.paramsMap, param); } }