{"version":3,"file":"url_parser.js","sourceRoot":"","sources":["../../../../modules/@angular/router-deprecated/src/url_parser.ts"],"names":[],"mappings":"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","sourcesContent":["import {StringMapWrapper} from '../src/facade/collection';\nimport {BaseException} from '../src/facade/exceptions';\nimport {RegExpWrapper, isBlank, isPresent} from '../src/facade/lang';\n\nexport function convertUrlParamsToArray(urlParams: {[key: string]: any}): string[] {\n  var paramsArray: any[] /** TODO #9100 */ = [];\n  if (isBlank(urlParams)) {\n    return [];\n  }\n  StringMapWrapper.forEach(\n      urlParams, (value: any /** TODO #9100 */, key: any /** TODO #9100 */) => {\n        paramsArray.push((value === true) ? key : key + '=' + value);\n      });\n  return paramsArray;\n}\n\n// Convert an object of url parameters into a string that can be used in an URL\nexport function serializeParams(urlParams: {[key: string]: any}, joiner = '&'): string {\n  return convertUrlParamsToArray(urlParams).join(joiner);\n}\n\n/**\n * This class represents a parsed URL\n */\nexport class Url {\n  constructor(\n      public path: string, public child: Url = null, public auxiliary: Url[] = /*@ts2dart_const*/[],\n      public params: {[key: string]: any} = /*@ts2dart_const*/ {}) {}\n\n  toString(): string {\n    return this.path + this._matrixParamsToString() + this._auxToString() + this._childString();\n  }\n\n  segmentToString(): string { return this.path + this._matrixParamsToString(); }\n\n  /** @internal */\n  _auxToString(): string {\n    return this.auxiliary.length > 0 ?\n        ('(' + this.auxiliary.map(sibling => sibling.toString()).join('//') + ')') :\n        '';\n  }\n\n  private _matrixParamsToString(): string {\n    var paramString = serializeParams(this.params, ';');\n    if (paramString.length > 0) {\n      return ';' + paramString;\n    }\n    return '';\n  }\n\n  /** @internal */\n  _childString(): string { return isPresent(this.child) ? ('/' + this.child.toString()) : ''; }\n}\n\nexport class RootUrl extends Url {\n  constructor(\n      path: string, child: Url = null, auxiliary: Url[] = /*@ts2dart_const*/[],\n      params: {[key: string]: any} = null) {\n    super(path, child, auxiliary, params);\n  }\n\n  toString(): string {\n    return this.path + this._auxToString() + this._childString() + this._queryParamsToString();\n  }\n\n  segmentToString(): string { return this.path + this._queryParamsToString(); }\n\n  private _queryParamsToString(): string {\n    if (isBlank(this.params)) {\n      return '';\n    }\n\n    return '?' + serializeParams(this.params);\n  }\n}\n\nexport function pathSegmentsToUrl(pathSegments: string[]): Url {\n  var url = new Url(pathSegments[pathSegments.length - 1]);\n  for (var i = pathSegments.length - 2; i >= 0; i -= 1) {\n    url = new Url(pathSegments[i], url);\n  }\n  return url;\n}\n\nvar SEGMENT_RE = RegExpWrapper.create('^[^\\\\/\\\\(\\\\)\\\\?;=&#]+');\nfunction matchUrlSegment(str: string): string {\n  var match = RegExpWrapper.firstMatch(SEGMENT_RE, str);\n  return isPresent(match) ? match[0] : '';\n}\nvar QUERY_PARAM_VALUE_RE = RegExpWrapper.create('^[^\\\\(\\\\)\\\\?;&#]+');\nfunction matchUrlQueryParamValue(str: string): string {\n  var match = RegExpWrapper.firstMatch(QUERY_PARAM_VALUE_RE, str);\n  return isPresent(match) ? match[0] : '';\n}\n\nexport class UrlParser {\n  private _remaining: string;\n\n  peekStartsWith(str: string): boolean { return this._remaining.startsWith(str); }\n\n  capture(str: string): void {\n    if (!this._remaining.startsWith(str)) {\n      throw new BaseException(`Expected \"${str}\".`);\n    }\n    this._remaining = this._remaining.substring(str.length);\n  }\n\n  parse(url: string): Url {\n    this._remaining = url;\n    if (url == '' || url == '/') {\n      return new Url('');\n    }\n    return this.parseRoot();\n  }\n\n  // segment + (aux segments) + (query params)\n  parseRoot(): RootUrl {\n    if (this.peekStartsWith('/')) {\n      this.capture('/');\n    }\n    var path = matchUrlSegment(this._remaining);\n    this.capture(path);\n\n    var aux: Url[] = [];\n    if (this.peekStartsWith('(')) {\n      aux = this.parseAuxiliaryRoutes();\n    }\n    if (this.peekStartsWith(';')) {\n      // TODO: should these params just be dropped?\n      this.parseMatrixParams();\n    }\n    var child: any /** TODO #9100 */ = null;\n    if (this.peekStartsWith('/') && !this.peekStartsWith('//')) {\n      this.capture('/');\n      child = this.parseSegment();\n    }\n    var queryParams: {[key: string]: any} = null;\n    if (this.peekStartsWith('?')) {\n      queryParams = this.parseQueryParams();\n    }\n    return new RootUrl(path, child, aux, queryParams);\n  }\n\n  // segment + (matrix params) + (aux segments)\n  parseSegment(): Url {\n    if (this._remaining.length == 0) {\n      return null;\n    }\n    if (this.peekStartsWith('/')) {\n      this.capture('/');\n    }\n    var path = matchUrlSegment(this._remaining);\n    this.capture(path);\n\n    var matrixParams: {[key: string]: any} = null;\n    if (this.peekStartsWith(';')) {\n      matrixParams = this.parseMatrixParams();\n    }\n    var aux: Url[] = [];\n    if (this.peekStartsWith('(')) {\n      aux = this.parseAuxiliaryRoutes();\n    }\n    var child: Url = null;\n    if (this.peekStartsWith('/') && !this.peekStartsWith('//')) {\n      this.capture('/');\n      child = this.parseSegment();\n    }\n    return new Url(path, child, aux, matrixParams);\n  }\n\n  parseQueryParams(): {[key: string]: any} {\n    var params: {[key: string]: any} = {};\n    this.capture('?');\n    this.parseQueryParam(params);\n    while (this._remaining.length > 0 && this.peekStartsWith('&')) {\n      this.capture('&');\n      this.parseQueryParam(params);\n    }\n    return params;\n  }\n\n  parseMatrixParams(): {[key: string]: any} {\n    var params: {[key: string]: any} = {};\n    while (this._remaining.length > 0 && this.peekStartsWith(';')) {\n      this.capture(';');\n      this.parseParam(params);\n    }\n    return params;\n  }\n\n  parseParam(params: {[key: string]: any}): void {\n    var key = matchUrlSegment(this._remaining);\n    if (isBlank(key)) {\n      return;\n    }\n    this.capture(key);\n    var value: any = true;\n    if (this.peekStartsWith('=')) {\n      this.capture('=');\n      var valueMatch = matchUrlSegment(this._remaining);\n      if (isPresent(valueMatch)) {\n        value = valueMatch;\n        this.capture(value);\n      }\n    }\n\n    params[key] = value;\n  }\n\n  parseQueryParam(params: {[key: string]: any}): void {\n    var key = matchUrlSegment(this._remaining);\n    if (isBlank(key)) {\n      return;\n    }\n    this.capture(key);\n    var value: any = true;\n    if (this.peekStartsWith('=')) {\n      this.capture('=');\n      var valueMatch = matchUrlQueryParamValue(this._remaining);\n      if (isPresent(valueMatch)) {\n        value = valueMatch;\n        this.capture(value);\n      }\n    }\n\n    params[key] = value;\n  }\n\n  parseAuxiliaryRoutes(): Url[] {\n    var routes: Url[] = [];\n    this.capture('(');\n\n    while (!this.peekStartsWith(')') && this._remaining.length > 0) {\n      routes.push(this.parseSegment());\n      if (this.peekStartsWith('//')) {\n        this.capture('//');\n      }\n    }\n    this.capture(')');\n\n    return routes;\n  }\n}\n\nexport var parser = new UrlParser();\n"]}