text: /**
   * @license
   * Copyright Google Inc. All Rights Reserved.
   *
   * Use of this source code is governed by an MIT-style license that can be
   * found in the LICENSE file at https://angular.io/license
   */
  var __extends = (this && this.__extends) || function (d, b) {
      for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
      function __() { this.constructor = d; }
      d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  };
  import { Inject, Injectable, Optional } from '@angular/core';
  import { isBlank } from '../facade/lang';
  import { Location } from './location';
  import { APP_BASE_HREF, LocationStrategy } from './location_strategy';
  import { PlatformLocation } from './platform_location';
  /**
   *  `PathLocationStrategy` is a {@link LocationStrategy} used to configure the
    * {@link Location} service to represent its state in the
    * [path](https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax) of the
    * browser's URL.
    * *
    * `PathLocationStrategy` is the default binding for {@link LocationStrategy}
    * provided in {@link ROUTER_PROVIDERS}.
    * *
    * If you're using `PathLocationStrategy`, you must provide a {@link APP_BASE_HREF}
    * or add a base element to the document. This URL prefix that will be preserved
    * when generating and recognizing URLs.
    * *
    * For instance, if you provide an `APP_BASE_HREF` of `'/my/app'` and call
    * `location.go('/foo')`, the browser's URL will become
    * `example.com/my/app/foo`.
    * *
    * Similarly, if you add `<base href='/my/app'/>` to the document and call
    * `location.go('/foo')`, the browser's URL will become
    * `example.com/my/app/foo`.
    * *
   */
  export var PathLocationStrategy = (function (_super) {
      __extends(PathLocationStrategy, _super);
      /**
       * @param {?} _platformLocation
       * @param {?=} href
       */
      function PathLocationStrategy(_platformLocation, href) {
          _super.call(this);
          this._platformLocation = _platformLocation;
          if (isBlank(href)) {
              href = this._platformLocation.getBaseHrefFromDOM();
          }
          if (isBlank(href)) {
              throw new Error("No base href set. Please provide a value for the APP_BASE_HREF token or add a base element to the document.");
          }
          this._baseHref = href;
      }
      /**
       * @param {?} fn
       * @return {?}
       */
      PathLocationStrategy.prototype.onPopState = function (fn) {
          this._platformLocation.onPopState(fn);
          this._platformLocation.onHashChange(fn);
      };
      /**
       * @return {?}
       */
      PathLocationStrategy.prototype.getBaseHref = function () { return this._baseHref; };
      /**
       * @param {?} internal
       * @return {?}
       */
      PathLocationStrategy.prototype.prepareExternalUrl = function (internal) {
          return Location.joinWithSlash(this._baseHref, internal);
      };
      /**
       * @param {?=} includeHash
       * @return {?}
       */
      PathLocationStrategy.prototype.path = function (includeHash) {
          if (includeHash === void 0) { includeHash = false; }
          var /** @type {?} */ pathname = this._platformLocation.pathname +
              Location.normalizeQueryParams(this._platformLocation.search);
          var /** @type {?} */ hash = this._platformLocation.hash;
          return hash && includeHash ? "" + pathname + hash : pathname;
      };
      /**
       * @param {?} state
       * @param {?} title
       * @param {?} url
       * @param {?} queryParams
       * @return {?}
       */
      PathLocationStrategy.prototype.pushState = function (state, title, url, queryParams) {
          var /** @type {?} */ externalUrl = this.prepareExternalUrl(url + Location.normalizeQueryParams(queryParams));
          this._platformLocation.pushState(state, title, externalUrl);
      };
      /**
       * @param {?} state
       * @param {?} title
       * @param {?} url
       * @param {?} queryParams
       * @return {?}
       */
      PathLocationStrategy.prototype.replaceState = function (state, title, url, queryParams) {
          var /** @type {?} */ externalUrl = this.prepareExternalUrl(url + Location.normalizeQueryParams(queryParams));
          this._platformLocation.replaceState(state, title, externalUrl);
      };
      /**
       * @return {?}
       */
      PathLocationStrategy.prototype.forward = function () { this._platformLocation.forward(); };
      /**
       * @return {?}
       */
      PathLocationStrategy.prototype.back = function () { this._platformLocation.back(); };
      PathLocationStrategy.decorators = [
          { type: Injectable },
      ];
      /** @nocollapse */
      PathLocationStrategy.ctorParameters = function () { return [
          { type: PlatformLocation, },
          { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APP_BASE_HREF,] },] },
      ]; };
      return PathLocationStrategy;
  }(LocationStrategy));
  function PathLocationStrategy_tsickle_Closure_declarations() {
      /** @type {?} */
      PathLocationStrategy.decorators;
      /**
       * @nocollapse
       * @type {?}
       */
      PathLocationStrategy.ctorParameters;
      /** @type {?} */
      PathLocationStrategy.prototype._baseHref;
      /** @type {?} */
      PathLocationStrategy.prototype._platformLocation;
  }
  //# sourceMappingURL=path_location_strategy.js.map