// Type definitions for Angular v2.0.0-alpha.37 // Project: http://angular.io/ // Definitions by: angular team // Definitions: https://github.com/borisyankov/DefinitelyTyped // *********************************************************** // This file is generated by the Angular build process. // Please do not create manual edits or send pull requests // modifying this file. // *********************************************************** // angular2/router depends transitively on these libraries. // If you don't have them installed you can install them using TSD // https://github.com/DefinitelyTyped/tsd /// /** * @module * @description * Maps application URLs into application states, to support deep-linking and navigation. */ declare module ngRouter { /** * # Router * The router is responsible for mapping URLs to components. * * You can see the state of the router by inspecting the read-only field `router.navigating`. * This may be useful for showing a spinner, for instance. * * ## Concepts * Routers and component instances have a 1:1 correspondence. * * The router holds reference to a number of "outlets." An outlet is a placeholder that the * router dynamically fills in depending on the current URL. * * When the router navigates from a URL, it must first recognizes it and serialize it into an * `Instruction`. * The router uses the `RouteRegistry` to get an `Instruction`. */ class Router { navigating: boolean; lastNavigationAttempt: string; registry: RouteRegistry; parent: Router; hostComponent: any; /** * Constructs a child router. You probably don't need to use this unless you're writing a reusable * component. */ childRouter(hostComponent: any): Router; /** * Constructs a child router. You probably don't need to use this unless you're writing a reusable * component. */ auxRouter(hostComponent: any): Router; /** * Register an outlet to notified of primary route changes. * * You probably don't need to use this unless you're writing a reusable component. */ registerPrimaryOutlet(outlet: RouterOutlet): Promise; /** * Register an outlet to notified of auxiliary route changes. * * You probably don't need to use this unless you're writing a reusable component. */ registerAuxOutlet(outlet: RouterOutlet): Promise; /** * Given an instruction, returns `true` if the instruction is currently active, * otherwise `false`. */ isRouteActive(instruction: Instruction): boolean; /** * Dynamically update the routing configuration and trigger a navigation. * * # Usage * * ``` * router.config([ * { 'path': '/', 'component': IndexComp }, * { 'path': '/user/:id', 'component': UserComp }, * ]); * ``` */ config(definitions: RouteDefinition[]): Promise; /** * Navigate to a URL. Returns a promise that resolves when navigation is complete. * * If the given URL begins with a `/`, router will navigate absolutely. * If the given URL does not begin with `/`, the router will navigate relative to this component. */ navigate(url: string, _skipLocationChange?: boolean): Promise; /** * Navigate via the provided instruction. Returns a promise that resolves when navigation is * complete. */ navigateInstruction(instruction: Instruction, _skipLocationChange?: boolean): Promise; /** * Updates this router and all descendant routers according to the given instruction */ commit(instruction: Instruction, _skipLocationChange?: boolean): Promise; /** * Subscribe to URL updates from the router */ subscribe(onNext: (value: any) => void): Object; /** * Removes the contents of this router's outlet and all descendant outlets */ deactivate(instruction: Instruction): Promise; /** * Given a URL, returns an instruction representing the component graph */ recognize(url: string): Promise; /** * Navigates to either the last URL successfully navigated to, or the last URL requested if the * router has yet to successfully navigate. */ renavigate(): Promise; /** * Generate a URL from a component name and optional map of parameters. The URL is relative to the * app's base href. */ generate(linkParams: any[]): Instruction; } class RootRouter extends Router { commit(instruction: Instruction, _skipLocationChange?: boolean): Promise; } /** * A router outlet is a placeholder that Angular dynamically fills based on the application's route. * * ## Use * * ``` * * ``` */ class RouterOutlet { name: string; /** * Called by the Router to instantiate a new component during the commit phase of a navigation. * This method in turn is responsible for calling the `onActivate` hook of its child. */ activate(nextInstruction: ComponentInstruction): Promise; /** * Called by the {@link Router} during the commit phase of a navigation when an outlet * reuses a component between different routes. * This method in turn is responsible for calling the `onReuse` hook of its child. */ reuse(nextInstruction: ComponentInstruction): Promise; /** * Called by the {@link Router} when an outlet reuses a component across navigations. * This method in turn is responsible for calling the `onReuse` hook of its child. */ deactivate(nextInstruction: ComponentInstruction): Promise; /** * Called by the {@link Router} during recognition phase of a navigation. * * If this resolves to `false`, the given navigation is cancelled. * * This method delegates to the child component's `canDeactivate` hook if it exists, * and otherwise resolves to true. */ canDeactivate(nextInstruction: ComponentInstruction): Promise; /** * Called by the {@link Router} during recognition phase of a navigation. * * If the new child component has a different Type than the existing child component, * this will resolve to `false`. You can't reuse an old component when the new component * is of a different Type. * * Otherwise, this method delegates to the child component's `canReuse` hook if it exists, * or resolves to true if the hook is not present. */ canReuse(nextInstruction: ComponentInstruction): Promise; } /** * The RouterLink directive lets you link to specific parts of your app. * * Consider the following route configuration: * * ``` * @RouteConfig([ * { path: '/user', component: UserCmp, as: 'user' } * ]); * class MyComp {} * ``` * * When linking to this `user` route, you can write: * * ``` * link to user component * ``` * * RouterLink expects the value to be an array of route names, followed by the params * for that level of routing. For instance `['/team', {teamId: 1}, 'user', {userId: 2}]` * means that we want to generate a link for the `team` route with params `{teamId: 1}`, * and with a child route `user` with params `{userId: 2}`. * * The first route name should be prepended with `/`, `./`, or `../`. * If the route begins with `/`, the router will look up the route from the root of the app. * If the route begins with `./`, the router will instead look in the current component's * children for the route. And if the route begins with `../`, the router will look at the * current component's parent. */ class RouterLink { visibleHref: string; isRouteActive: boolean; routeParams: any; onClick(): boolean; } class RouteParams { params: StringMap; get(param: string): string; } /** * The RouteRegistry holds route configurations for each component in an Angular app. * It is responsible for creating Instructions from URLs, and generating URLs based on route and * parameters. */ class RouteRegistry { /** * Given a component and a configuration object, add the route to this registry */ config(parentComponent: any, config: RouteDefinition): void; /** * Reads the annotations of a component and configures the registry based on them */ configFromComponent(component: any): void; /** * Given a URL and a parent component, return the most specific instruction for navigating * the application into the state specified by the url */ recognize(url: string, parentComponent: any): Promise; /** * Given a normalized list with component names and params like: `['user', {id: 3 }]` * generates a url with a leading slash relative to the provided `parentComponent`. */ generate(linkParams: any[], parentComponent: any): Instruction; } class LocationStrategy { path(): string; pushState(ctx: any, title: string, url: string): void; forward(): void; back(): void; onPopState(fn: (_: any) => any): void; getBaseHref(): string; } class HashLocationStrategy extends LocationStrategy { onPopState(fn: EventListener): void; getBaseHref(): string; path(): string; pushState(state: any, title: string, url: string): void; forward(): void; back(): void; } class PathLocationStrategy extends LocationStrategy { onPopState(fn: EventListener): void; getBaseHref(): string; path(): string; pushState(state: any, title: string, url: string): void; forward(): void; back(): void; } /** * This is the service that an application developer will directly interact with. * * Responsible for normalizing the URL against the application's base href. * A normalized URL is absolute from the URL host, includes the application's base href, and has no * trailing slash: * - `/my/app/user/123` is normalized * - `my/app/user/123` **is not** normalized * - `/my/app/user/123/` **is not** normalized */ class Location { platformStrategy: LocationStrategy; path(): string; normalize(url: string): string; normalizeAbsolutely(url: string): string; go(url: string): void; forward(): void; back(): void; subscribe(onNext: (value: any) => void, onThrow?: (exception: any) => void, onReturn?: () => void): void; } const APP_BASE_HREF : OpaqueToken ; /** * Responsible for performing each step of navigation. * "Steps" are conceptually similar to "middleware" */ class Pipeline { steps: Function[]; process(instruction: Instruction): Promise; } /** * Defines route lifecycle method [onActivate], which is called by the router at the end of a * successful route navigation. * * For a single component's navigation, only one of either [onActivate] or [onReuse] will be called, * depending on the result of [canReuse]. * * If `onActivate` returns a promise, the route change will wait until the promise settles to * instantiate and activate child components. * * ## Example * ``` * @Directive({ * selector: 'my-cmp' * }) * class MyCmp implements OnActivate { * onActivate(next, prev) { * this.log = 'Finished navigating from ' + prev.urlPath + ' to ' + next.urlPath; * } * } * ``` */ interface OnActivate { onActivate(nextInstruction: ComponentInstruction, prevInstruction: ComponentInstruction): any; } /** * Defines route lifecycle method [onDeactivate], which is called by the router before destroying * a component as part of a route change. * * If `onDeactivate` returns a promise, the route change will wait until the promise settles. * * ## Example * ``` * @Directive({ * selector: 'my-cmp' * }) * class MyCmp implements CanReuse, OnReuse { * canReuse() { * return true; * } * * onReuse(next, prev) { * this.params = next.params; * } * } * ``` */ interface OnDeactivate { onDeactivate(nextInstruction: ComponentInstruction, prevInstruction: ComponentInstruction): any; } /** * Defines route lifecycle method [onReuse], which is called by the router at the end of a * successful route navigation when [canReuse] is implemented and returns or resolves to true. * * For a single component's navigation, only one of either [onActivate] or [onReuse] will be called, * depending on the result of [canReuse]. * * ## Example * ``` * @Directive({ * selector: 'my-cmp' * }) * class MyCmp implements CanReuse, OnReuse { * canReuse() { * return true; * } * * onReuse(next, prev) { * this.params = next.params; * } * } * ``` */ interface OnReuse { onReuse(nextInstruction: ComponentInstruction, prevInstruction: ComponentInstruction): any; } /** * Defines route lifecycle method [canDeactivate], which is called by the router to determine * if a component can be removed as part of a navigation. * * If `canDeactivate` returns or resolves to `false`, the navigation is cancelled. * * If `canDeactivate` throws or rejects, the navigation is also cancelled. * * ## Example * ``` * @Directive({ * selector: 'my-cmp' * }) * class MyCmp implements CanDeactivate { * canDeactivate(next, prev) { * return askUserIfTheyAreSureTheyWantToQuit(); * } * } * ``` */ interface CanDeactivate { canDeactivate(nextInstruction: ComponentInstruction, prevInstruction: ComponentInstruction): any; } /** * Defines route lifecycle method [canReuse], which is called by the router to determine whether a * component should be reused across routes, or whether to destroy and instantiate a new component. * * If `canReuse` returns or resolves to `true`, the component instance will be reused. * * If `canReuse` throws or rejects, the navigation will be cancelled. * * ## Example * ``` * @Directive({ * selector: 'my-cmp' * }) * class MyCmp implements CanReuse, OnReuse { * canReuse(next, prev) { * return next.params.id == prev.params.id; * } * * onReuse(next, prev) { * this.id = next.params.id; * } * } * ``` */ interface CanReuse { canReuse(nextInstruction: ComponentInstruction, prevInstruction: ComponentInstruction): any; } /** * Defines route lifecycle method [canActivate], which is called by the router to determine * if a component can be instantiated as part of a navigation. * * Note that unlike other lifecycle hooks, this one uses an annotation rather than an interface. * This is because [canActivate] is called before the component is instantiated. * * If `canActivate` returns or resolves to `false`, the navigation is cancelled. * * If `canActivate` throws or rejects, the navigation is also cancelled. * * ## Example * ``` * @Directive({ * selector: 'control-panel-cmp' * }) * @CanActivate(() => checkIfUserIsLoggedIn()) * class ControlPanelCmp { * // ... * } * ``` */ var CanActivate : (hook: (next: ComponentInstruction, prev: ComponentInstruction) => Promise| boolean) => ClassDecorator ; /** * `Instruction` is a tree of `ComponentInstructions`, with all the information needed * to transition each component in the app to a given route, including all auxiliary routes. * * This is a public API. */ class Instruction { component: ComponentInstruction; child: Instruction; auxInstruction: StringMap; replaceChild(child: Instruction): Instruction; } /** * A `ComponentInstruction` represents the route state for a single component. An `Instruction` is * composed of a tree of these `ComponentInstruction`s. * * `ComponentInstructions` is a public API. Instances of `ComponentInstruction` are passed * to route lifecycle hooks, like {@link CanActivate}. * * `ComponentInstruction`s are [https://en.wikipedia.org/wiki/Hash_consing](hash consed). You should * never construct one yourself with "new." Instead, rely on {@link PathRecognizer} to construct * `ComponentInstruction`s. * * You should not modify this object. It should be treated as immutable. */ class ComponentInstruction { reuse: boolean; urlPath: string; urlParams: string[]; params: StringMap; componentType: any; resolveComponentType(): Promise; specificity: any; terminal: any; routeData(): Object; } /** * This class represents a parsed URL */ class Url { path: string; child: Url; auxiliary: Url[]; params: StringMap; toString(): string; segmentToString(): string; } class OpaqueToken { toString(): string; } const ROUTE_DATA : OpaqueToken ; const ROUTER_DIRECTIVES : any[] ; const ROUTER_BINDINGS : any[] ; class Route implements RouteDefinition { data: any; path: string; component: ng.Type; as: string; loader: Function; redirectTo: string; } class Redirect implements RouteDefinition { path: string; redirectTo: string; as: string; loader: Function; data: any; } class AuxRoute implements RouteDefinition { data: any; path: string; component: ng.Type; as: string; loader: Function; redirectTo: string; } class AsyncRoute implements RouteDefinition { data: any; path: string; loader: Function; as: string; } interface RouteDefinition { path: string; component?: ng.Type | ComponentDefinition; loader?: Function; redirectTo?: string; as?: string; data?: any; } var RouteConfig : (configs: RouteDefinition[]) => ClassDecorator ; interface ComponentDefinition { type: string; loader?: Function; component?: ng.Type; } } declare module "angular2/router" { export = ngRouter; }