declare module '@ember/routing/location' { /** @module @ember/routing/location */ /** `Location` defines an interface to be implemented by `location` APIs. It is not user-constructible; the only valid way to get a `Location` is via one of its concrete implementations. ## Implementations You can pass an implementation name (`hash`, `history`, `none`) to force a particular implementation to be used in your application. - See [HashLocation](/ember/release/classes/HashLocation). - See [HistoryLocation](/ember/release/classes/HistoryLocation). - See [NoneLocation](/ember/release/classes/NoneLocation). ## Location API Each location implementation must provide the following methods: * `getURL`: returns the current URL. * `setURL(path)`: sets the current URL. * `replaceURL(path)`: replace the current URL (optional). * `onUpdateURL(callback)`: triggers the callback when the URL changes. * `formatURL(url)`: formats `url` to be placed into `href` attribute. Calling `setURL` or `replaceURL` will not trigger onUpdateURL callbacks. ## Custom implementation Ember scans `app/locations/*` for extending the Location API. Example: ```javascript import HistoryLocation from '@ember/routing/history-location'; export default class MyHistory { implementation = 'my-custom-history'; constructor() { this._history = HistoryLocation.create(...arguments); } create() { return new this(...arguments); } pushState(path) { this._history.pushState(path); } } ``` @for @ember/routing/location @class Location @since 5.0.0 @public */ export default interface Location { /** * If the location needs to redirect to a different URL, it can cancel routing * by setting the `cancelRouterSetup` property on itself to false. * @property cancelRouterSetup * @type Boolean * @optional * @default true * @public */ cancelRouterSetup?: boolean; /** * The current URL. * @property currentURL * @type String * @public */ getURL(): string; /** * Sets the current URL. Calling `setURL` will not trigger `onUpdateURL` * callbacks. * * @property setURL * @public * @method * @param {String} url the new URL to update to. */ setURL(url: string): void; /** * Replace the current URL (optional). Calling `replaceURL` will not trigger * `onUpdateURL` callbacks. * * @property replaceURL * @public * @method * @param {String} url the new URL to replace the current URL with. */ replaceURL?(url: string): void; /** * triggers the callback when the URL changes. * @param {(newUrl: string) => void} callback A function to run when the URL * changes. The the new URL string is provided as the only argument. */ onUpdateURL(callback: UpdateCallback): void; /** * Formats url to be placed into href attribute. * * @property formatURL * @public * @method * @param {String} url the url to format */ formatURL(url: string): string; initState?(): void; destroy(): void; } export type UpdateCallback = (url: string) => void; export interface Registry extends Record {} }