declare module '@ember/routing/history-location' {
  import EmberObject from '@ember/object';
  import type { default as EmberLocation, UpdateCallback } from '@ember/routing/location';
  /**
      HistoryLocation implements the location API using the browser's
      history.pushState API.

      Using `HistoryLocation` results in URLs that are indistinguishable from a
      standard URL. This relies upon the browser's `history` API.

      Example:

      ```app/router.js
      Router.map(function() {
        this.route('posts', function() {
          this.route('new');
        });
      });

      Router.reopen({
        location: 'history'
      });
      ```

      This will result in a posts.new url of `/posts/new`.

      Keep in mind that your server must serve the Ember app at all the routes you
      define.

      Using `HistoryLocation` will also result in location states being recorded by
      the browser `history` API with the following schema:

      ```
      window.history.state -> { path: '/', uuid: '3552e730-b4a6-46bd-b8bf-d8c3c1a97e0a' }
      ```

      This allows each in-app location state to be tracked uniquely across history
      state changes via the `uuid` field.

      @class HistoryLocation
      @extends EmberObject
      @protected
    */
  export default class HistoryLocation extends EmberObject implements EmberLocation {
    location: Location;
    baseURL: string;
    history?: Window['history'];
    _previousURL?: string;
    _popstateHandler?: EventListener;
    /**
          Will be pre-pended to path upon state change
      
          @property rootURL
          @default '/'
          @private
        */
    rootURL: string;
    /**
          @private
      
          Returns normalized location.hash
      
          @method getHash
        */
    getHash(): string;
    init(): void;
    /**
          Used to set state on first call to setURL
      
          @private
          @method initState
        */
    initState(): void;
    /**
          Returns the current `location.pathname` without `rootURL` or `baseURL`
      
          @private
          @method getURL
          @return url {String}
        */
    getURL(): string;
    /**
          Uses `history.pushState` to update the url without a page reload.
      
          @private
          @method setURL
          @param path {String}
        */
    setURL(path: string): void;
    /**
          Uses `history.replaceState` to update the url without a page reload
          or history modification.
      
          @private
          @method replaceURL
          @param path {String}
        */
    replaceURL(path: string): void;
    /**
         Pushes a new state.
      
         @private
         @method pushState
         @param path {String}
        */
    pushState(path: string): void;
    /**
         Replaces the current state.
      
         @private
         @method replaceState
         @param path {String}
        */
    replaceState(path: string): void;
    /**
          Register a callback to be invoked whenever the browser
          history changes, including using forward and back buttons.
      
          @private
          @method onUpdateURL
          @param callback {Function}
        */
    onUpdateURL(callback: UpdateCallback): void;
    /**
          Formats url to be placed into href attribute.
      
          @private
          @method formatURL
          @param url {String}
          @return formatted url {String}
        */
    formatURL(url: string): string;
    /**
          Cleans up the HistoryLocation event listener.
      
          @private
          @method willDestroy
        */
    willDestroy(): void;
    _removeEventListener(): void;
  }
}
