diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index c1a30bb05..306bea98e 100644
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -1119,6 +1119,7 @@ This document generated by [dt-contributors-generator](https://github.com/vvakam
* [:link:](simple-cw-node/simple-cw-node.d.ts) [simple-cw-node](https://github.com/astronaughts/simple-cw-node) by [vvakame](https://github.com/vvakame)
* [:link:](simplebar/simplebar.d.ts) [simplebar.js](https://github.com/Grsmto/simplebar) by [Gregor Woiwode](https://github.com/gregonnet)
* [:link:](jquery.simplemodal/jquery.simplemodal.d.ts) [SimpleModal](http://www.ericmmartin.com/projects/simplemodal) by [Friedrich von Never](https://github.com/ForNeVeR)
+* [:link:](simpleStorage/simplestorage.js.d.ts) [simpleStorage](https://github.com/andris9/simpleStorage) by [Áxel Costas Pena](https://github.com/axelcostaspena)
* [:link:](sinon/sinon.d.ts) [Sinon](http://sinonjs.org) by [William Sears](https://github.com/mrbigdog2u)
* [:link:](sinon-chai/sinon-chai.d.ts) [sinon-chai](https://github.com/domenic/sinon-chai) by [Kazi Manzur Rashid](https://github.com/kazimanzurrashid), [Jed Mao](https://github.com/jedmao)
* [:link:](sinon-chrome/sinon-chrome.d.ts) [Sinon-Chrome](https://github.com/vitalets/sinon-chrome) by [Tim Perry](https://github.com/pimterry)
diff --git a/FileSaver/FileSaver-tests.ts b/FileSaver/FileSaver-tests.ts
index 6a5426a6a..4cfae373e 100644
--- a/FileSaver/FileSaver-tests.ts
+++ b/FileSaver/FileSaver-tests.ts
@@ -6,6 +6,7 @@
function testSaveAs() {
var data: Blob = new Blob(["Hello, world!"], {type: "text/plain;charset=utf-8"});
var filename: string = 'hello world.txt';
-
- saveAs(data, filename);
+ var disableAutoBOM = true;
+
+ saveAs(data, filename, disableAutoBOM);
}
diff --git a/FileSaver/FileSaver.d.ts b/FileSaver/FileSaver.d.ts
index 0b6cc75d6..fa5f31947 100644
--- a/FileSaver/FileSaver.d.ts
+++ b/FileSaver/FileSaver.d.ts
@@ -20,8 +20,14 @@ interface FileSaver {
* @summary File name.
* @type {DOMString}
*/
- filename: string
+ filename: string,
+
+ /**
+ * @summary Disable Unicode text encoding hints or not.
+ * @type {boolean}
+ */
+ disableAutoBOM?: boolean
): void
}
-declare var saveAs: FileSaver;
\ No newline at end of file
+declare var saveAs: FileSaver;
diff --git a/README.md b/README.md
index 5cc7045d7..82833752d 100644
--- a/README.md
+++ b/README.md
@@ -34,7 +34,7 @@ Please see the [contribution guide](http://definitelytyped.org/guides/contributi
Here is are the [currently requested definitions](https://github.com/borisyankov/DefinitelyTyped/labels/Definition%3ARequest).
-## Licence
+## License
This project is licensed under the MIT license.
diff --git a/amqplib/amqplib-tests.ts b/amqplib/amqplib-tests.ts
index 7a1f51200..f99a3bde1 100644
--- a/amqplib/amqplib-tests.ts
+++ b/amqplib/amqplib-tests.ts
@@ -1,5 +1,6 @@
///
+// promise api tests
import amqp = require("amqplib");
var msg = "Hello World";
@@ -19,3 +20,34 @@ amqp.connect("amqp://localhost")
.then(channel => channel.consume("myQueue", newMsg => console.log("New Message: " + newMsg.content.toString())))
.ensure(() => connection.close());
});
+
+// callback api tests
+import amqpcb = require("amqplib/callback_api");
+
+amqpcb.connect("amqp://localhost", (err, connection) => {
+ if(!err) {
+ connection.createChannel((err, channel) => {
+ if (!err) {
+ channel.assertQueue("myQueue", {}, (err, ok) => {
+ if(!err) {
+ channel.sendToQueue("myQueue", new Buffer(msg));
+ }
+ });
+ }
+ });
+ }
+});
+
+amqpcb.connect("amqp://localhost", (err, connection) => {
+ if(!err) {
+ connection.createChannel((err, channel) => {
+ if (!err) {
+ channel.assertQueue("myQueue", {}, (err, ok) => {
+ if(!err) {
+ channel.consume("myQueue", newMsg => console.log("New Message: " + newMsg.content.toString()));
+ }
+ });
+ }
+ });
+ }
+});
diff --git a/amqplib/amqplib.d.ts b/amqplib/amqplib.d.ts
index 0c7f0720a..f125aaa07 100644
--- a/amqplib/amqplib.d.ts
+++ b/amqplib/amqplib.d.ts
@@ -1,22 +1,12 @@
// Type definitions for amqplib 0.3.x
// Project: https://github.com/squaremo/amqp.node
-// Definitions by: Michael Nahkies
+// Definitions by: Michael Nahkies , Ab Reitsma
// Definitions: https://github.com/borisyankov/DefinitelyTyped
///
///
-declare module "amqplib" {
-
- import events = require("events");
- import when = require("when");
-
- interface Connection extends events.EventEmitter {
- close(): when.Promise;
- createChannel(): when.Promise;
- createConfirmChannel(): when.Promise;
- }
-
+declare module "amqplib/properties" {
module Replies {
interface Empty {
}
@@ -25,6 +15,9 @@ declare module "amqplib" {
messageCount: number;
consumerCount: number;
}
+ interface PurgeQueue {
+ messageCount: number;
+ }
interface DeleteQueue {
messageCount: number;
}
@@ -100,6 +93,22 @@ declare module "amqplib" {
fields: Object;
properties: Object;
}
+}
+
+declare module "amqplib" {
+
+ import events = require("events");
+ import when = require("when");
+ import shared = require("amqplib/properties")
+ import Replies = shared.Replies;
+ import Options = shared.Options;
+ import Message = shared.Message;
+
+ interface Connection extends events.EventEmitter {
+ close(): when.Promise;
+ createChannel(): when.Promise;
+ createConfirmChannel(): when.Promise;
+ }
interface Channel extends events.EventEmitter {
close(): when.Promise;
@@ -108,7 +117,7 @@ declare module "amqplib" {
checkQueue(queue: string): when.Promise;
deleteQueue(queue: string, options?: Options.DeleteQueue): when.Promise;
- purgeQueue(queue: string): when.Promise;
+ purgeQueue(queue: string): when.Promise;
bindQueue(queue: string, source: string, pattern: string, args?: any): when.Promise;
unbindQueue(queue: string, source: string, pattern: string, args?: any): when.Promise;
@@ -142,3 +151,68 @@ declare module "amqplib" {
function connect(url: string, socketOptions?: any): when.Promise;
}
+
+declare module "amqplib/callback_api" {
+
+ import events = require("events");
+ import shared = require("amqplib/properties")
+ import Replies = shared.Replies;
+ import Options = shared.Options;
+ import Message = shared.Message;
+
+ interface Connection extends events.EventEmitter {
+ close(callback?: (err: any) => void): void;
+ createChannel(callback: (err: any, channel: Channel) => void): void;
+ createConfirmChannel(callback: (err: any, confirmChannel: ConfirmChannel) => void): void;
+ }
+
+ interface Channel extends events.EventEmitter {
+ close(callback: (err: any) => void): void;
+
+ assertQueue(queue?: string, options?: Options.AssertQueue, callback?: (err:any, ok: Replies.AssertQueue) => void): void;
+ checkQueue(queue: string, callback?: (err: any, ok: Replies.AssertQueue) => void): void;
+
+ deleteQueue(queue: string, options?: Options.DeleteQueue, callback?: (err:any, ok: Replies.DeleteQueue) => void): void;
+ purgeQueue(queue: string, callback?: (err:any, ok: Replies.PurgeQueue) => void): void;
+
+ bindQueue(queue: string, source: string, pattern: string, args?: any, callback?: (err: any, ok: Replies.Empty) => void): void;
+ unbindQueue(queue: string, source: string, pattern: string, args?: any, callback?: (err: any, ok: Replies.Empty) => void): void;
+
+ assertExchange(exchange: string, type: string, options?: Options.AssertExchange, callback?: (err: any, ok: Replies.AssertExchange) => void): void;
+ checkExchange(exchange: string, callback?: (err: any, ok: Replies.Empty) => void): void;
+
+ deleteExchange(exchange: string, options?: Options.DeleteExchange, callback?: (err: any, ok: Replies.Empty) => void): void;
+
+ bindExchange(destination: string, source: string, pattern: string, args?: any, callback?: (err: any, ok: Replies.Empty) => void): void;
+ unbindExchange(destination: string, source: string, pattern: string, args?: any, callback?: (err: any, ok: Replies.Empty) => void): void;
+
+ publish(exchange: string, routingKey: string, content: Buffer, options?: Options.Publish): boolean;
+ sendToQueue(queue: string, content: Buffer, options?: Options.Publish): boolean;
+
+ consume(queue: string, onMessage: (msg: Message) => any, options?: Options.Consume, callback?: (err: any, ok: Replies.Consume) => void): void;
+
+ cancel(consumerTag: string, callback?: (err: any, ok: Replies.Empty) => void): void;
+ get(queue: string, options?: Options.Get, callback?: (err: any, ok: Message | boolean) => void): void;
+
+ ack(message: Message, allUpTo?: boolean): void;
+ ackAll(): void;
+
+ nack(message: Message, allUpTo?: boolean, requeue?: boolean): void;
+ nackAll(requeue?: boolean): void;
+ reject(message: Message, requeue?: boolean): void;
+
+ prefetch(count: number, global?: boolean): void;
+ recover(callback?: (err: any, ok: Replies.Empty) => void): void;
+ }
+
+ interface ConfirmChannel extends Channel {
+ publish(exchange: string, routingKey: string, content: Buffer, options?: Options.Publish, callback?: (err: any, ok: Replies.Empty) => void): boolean;
+ sendToQueue(queue: string, content: Buffer, options?: Options.Publish, callback?: (err: any, ok: Replies.Empty) => void): boolean;
+
+ waitForConfirms(callback?: (err: any) => void): void;
+ }
+
+ function connect(callback: (err: any, connection: Connection) => void): void;
+ function connect(url: string, callback: (err: any, connection: Connection) => void): void;
+ function connect(url: string, socketOptions: any, callback: (err: any, connection: Connection) => void): void;
+}
diff --git a/analytics-node/analytics-node-tests.ts b/analytics-node/analytics-node-tests.ts
index 66a4b4995..57c48252f 100644
--- a/analytics-node/analytics-node-tests.ts
+++ b/analytics-node/analytics-node-tests.ts
@@ -80,3 +80,12 @@ function testIntegrations(): void {
}
});
}
+
+function testFlush(): void {
+ analytics.flush();
+ analytics.flush(function(err, batch) {
+ if (err) { alert("Oh nos!"); }
+ else { console.log(batch.batch[0].type); }
+ });
+}
+
diff --git a/analytics-node/analytics-node.d.ts b/analytics-node/analytics-node.d.ts
index 981e754e5..d4376d83e 100644
--- a/analytics-node/analytics-node.d.ts
+++ b/analytics-node/analytics-node.d.ts
@@ -65,6 +65,16 @@ declare module AnalyticsNode {
anonymous_id?: string | number;
integrations?: Integrations;
}): Analytics;
+
+ /* Flush batched calls to make sure nothing is left in the queue */
+ flush(fn?: (err: Error, batch: {
+ batch: Array<{
+ type: string;
+ }>;
+ messageId: string;
+ sentAt: Date;
+ timestamp: Date;
+ }) => void): Analytics;
}
}
diff --git a/angular-ui-router/angular-ui-router.d.ts b/angular-ui-router/angular-ui-router.d.ts
index 3ec31968c..b61909beb 100644
--- a/angular-ui-router/angular-ui-router.d.ts
+++ b/angular-ui-router/angular-ui-router.d.ts
@@ -71,10 +71,16 @@ declare module angular.ui {
* Arbitrary data object, useful for custom configuration.
*/
data?: any;
+
/**
* Boolean (default true). If false will not re-trigger the same state just because a search/query parameter has changed. Useful for when you'd like to modify $location.search() without triggering a reload.
*/
reloadOnSearch?: boolean;
+
+ /**
+ * Boolean (default true). If false will reload state on everytransitions. Useful for when you'd like to restore all data to its initial state.
+ */
+ cache?: boolean;
}
interface IStateProvider extends angular.IServiceProvider {
@@ -229,10 +235,10 @@ declare module angular.ui {
*/
go(to: string, params?: {}, options?: IStateOptions): angular.IPromise;
go(to: IState, params?: {}, options?: IStateOptions): angular.IPromise;
- transitionTo(state: string, params?: {}, updateLocation?: boolean): void;
- transitionTo(state: IState, params?: {}, updateLocation?: boolean): void;
- transitionTo(state: string, params?: {}, options?: IStateOptions): void;
- transitionTo(state: IState, params?: {}, options?: IStateOptions): void;
+ transitionTo(state: string, params?: {}, updateLocation?: boolean): ng.IPromise;
+ transitionTo(state: IState, params?: {}, updateLocation?: boolean): ng.IPromise;
+ transitionTo(state: string, params?: {}, options?: IStateOptions): ng.IPromise;
+ transitionTo(state: IState, params?: {}, options?: IStateOptions): ng.IPromise;
includes(state: string, params?: {}): boolean;
is(state:string, params?: {}): boolean;
is(state: IState, params?: {}): boolean;
@@ -244,7 +250,7 @@ declare module angular.ui {
current: IState;
/** A param object, e.g. {sectionId: section.id)}, that you'd like to test against the current active state. */
params: IStateParamsService;
- reload(): void;
+ reload(): ng.IPromise;
/** Currently pending transition. A promise that'll resolve or reject. */
transition: ng.IPromise<{}>;
diff --git a/angular2/angular2-tests.ts b/angular2/angular2-tests.ts
index a39cdcf79..1c64de9d7 100644
--- a/angular2/angular2-tests.ts
+++ b/angular2/angular2-tests.ts
@@ -1,43 +1,3 @@
///
-///
-import {Component, View, Directive, bootstrap, bind, NgFor, NgIf} from "angular2/angular2";
-
-class Service {
-
-}
-class Service2 {
-
-}
-
-class Cmp {
- static annotations: any[];
-}
-Cmp.annotations = [
- Component({
- selector: 'cmp',
- bindings: [Service, bind(Service2).toValue(null)]
- }),
- View({
- template: '{{greeting}} world!',
- directives: [NgFor, NgIf]
- }),
- Directive({
- selector: '[tooltip]',
- inputs: [
- 'text: tooltip'
- ],
- outputs: [
- '(mouseenter):onMouseEnter()',
- '(mouseleave):onMouseLeave()'
- ]
- })
-];
-
-@Component({selector: 'cmp2'})
-@View({templateUrl: '/index.html'})
-class Cmp2 {
-
-}
-
-bootstrap(Cmp);
+// No tests, because angular 2 typings are not in DefinitelyTyped.
\ No newline at end of file
diff --git a/angular2/angular2-tests.ts.tscparams b/angular2/angular2-tests.ts.tscparams
deleted file mode 100644
index 3f0863ac6..000000000
--- a/angular2/angular2-tests.ts.tscparams
+++ /dev/null
@@ -1 +0,0 @@
---experimentalDecorators --noImplicitAny --target ES5
diff --git a/angular2/angular2.d.ts b/angular2/angular2.d.ts
index 616157aaf..356080998 100644
--- a/angular2/angular2.d.ts
+++ b/angular2/angular2.d.ts
@@ -1,17105 +1,13 @@
-// Type definitions for Angular v2.0.0-39
+// Type definitions for Angular 2
// 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/angular2 depends transitively on these libraries.
-// If you don't have them installed you can install them using TSD
-// https://github.com/DefinitelyTyped/tsd
-
-///
-// angular2/web_worker/worker depends transitively on these libraries.
-// If you don't have them installed you can install them using TSD
-// https://github.com/DefinitelyTyped/tsd
-
-///
-// angular2/web_worker/ui depends transitively on these libraries.
-// If you don't have them installed you can install them using TSD
-// https://github.com/DefinitelyTyped/tsd
-
-///
-
-
-interface Map {}
-
-
-declare module ng {
- // See https://github.com/Microsoft/TypeScript/issues/1168
- class BaseException /* extends Error */ {
- message: string;
- stack: string;
- toString(): string;
- }
- interface InjectableReference {}
-}
-
-declare module ngWorker {
- // See https://github.com/Microsoft/TypeScript/issues/1168
- class BaseException /* extends Error */ {
- message: string;
- stack: string;
- toString(): string;
- }
- interface InjectableReference {}
-}
-
-declare module ngUi {
- // See https://github.com/Microsoft/TypeScript/issues/1168
- class BaseException /* extends Error */ {
- message: string;
- stack: string;
- toString(): string;
- }
- interface InjectableReference {}
-}
-
-
-
-
-declare module ng {
- /**
- * Declares an injectable parameter to be a live list of directives or variable
- * bindings from the content children of a directive.
- *
- * ### Example ([live demo](http://plnkr.co/edit/lY9m8HLy7z06vDoUaSN2?p=preview))
- *
- * Assume that `` component would like to get a list its children ``
- * components as shown in this example:
- *
- * ```html
- *
- * ...
- * {{o.text}}
- *
- * ```
- *
- * The preferred solution is to query for `Pane` directives using this decorator.
- *
- * ```javascript
- * @Component({
- * selector: 'pane',
- * inputs: ['title']
- * })
- * @View(...)
- * class Pane {
- * title:string;
- * }
- *
- * @Component({
- * selector: 'tabs'
- * })
- * @View({
- * template: `
- *
- *
{{pane.title}}
- *
- *
- * `
- * })
- * class Tabs {
- * panes: QueryList;
- * constructor(@Query(Pane) panes:QueryList) {
- * this.panes = panes;
- * }
- * }
- * ```
- *
- * A query can look for variable bindings by passing in a string with desired binding symbol.
- *
- * ### Example ([live demo](http://plnkr.co/edit/sT2j25cH1dURAyBRCKx1?p=preview))
- * ```html
- *
- *
...
- *
- *
- * @Component({
- * selector: 'foo'
- * })
- * @View(...)
- * class seeker {
- * constructor(@Query('findme') elList: QueryList) {...}
- * }
- * ```
- *
- * In this case the object that is injected depend on the type of the variable
- * binding. It can be an ElementRef, a directive or a component.
- *
- * Passing in a comma separated list of variable bindings will query for all of them.
- *
- * ```html
- *
- *
...
- *
...
- *
- *
- * @Component({
- * selector: 'foo'
- * })
- * @View(...)
- * class Seeker {
- * constructor(@Query('findMe, findMeToo') elList: QueryList) {...}
- * }
- * ```
- *
- * Configure whether query looks for direct children or all descendants
- * of the querying element, by using the `descendants` parameter.
- * It is set to `false` by default.
- *
- * ### Example ([live demo](http://plnkr.co/edit/wtGeB977bv7qvA5FTYl9?p=preview))
- * ```html
- *
- * a
- * b
- *
- * c
- *
- *
- * ```
- *
- * When querying for items, the first container will see only `a` and `b` by default,
- * but with `Query(TextDirective, {descendants: true})` it will see `c` too.
- *
- * The queried directives are kept in a depth-first pre-order with respect to their
- * positions in the DOM.
- *
- * Query does not look deep into any subcomponent views.
- *
- * Query is updated as part of the change-detection cycle. Since change detection
- * happens after construction of a directive, QueryList will always be empty when observed in the
- * constructor.
- *
- * The injected object is an unmodifiable live list.
- * See {@link QueryList} for more details.
- */
- class QueryMetadata extends DependencyMetadata {
-
- constructor(_selector: Type | string, {descendants, first}?: {descendants?: boolean, first?: boolean});
-
- /**
- * whether we want to query only direct children (false) or all
- * children (true).
- */
- descendants: boolean;
-
- first: boolean;
-
- /**
- * always `false` to differentiate it with {@link ViewQueryMetadata}.
- */
- isViewQuery: boolean;
-
- /**
- * what this is querying for.
- */
- selector: any;
-
- /**
- * whether this is querying for a variable binding or a directive.
- */
- isVarBindingQuery: boolean;
-
- /**
- * returns a list of variable bindings this is querying for.
- * Only applicable if this is a variable bindings query.
- */
- varBindings: string[];
-
- toString(): string;
-
- }
-
-
- /**
- * Configures a content query.
- *
- * Content queries are set before the `afterContentInit` callback is called.
- *
- * ### Example
- *
- * ```
- * @Directive({
- * selector: 'someDir'
- * })
- * class SomeDir {
- * @ContentChildren(ChildDirective) contentChildren: QueryList;
- *
- * afterContentInit() {
- * // contentChildren is set
- * }
- * }
- * ```
- */
- class ContentChildrenMetadata extends QueryMetadata {
-
- constructor(_selector: Type | string, {descendants}?: {descendants?: boolean});
-
- }
-
-
- /**
- * Configures a content query.
- *
- * Content queries are set before the `afterContentInit` callback is called.
- *
- * ### Example
- *
- * ```
- * @Directive({
- * selector: 'someDir'
- * })
- * class SomeDir {
- * @ContentChild(ChildDirective) contentChild;
- *
- * afterContentInit() {
- * // contentChild is set
- * }
- * }
- * ```
- */
- class ContentChildMetadata extends QueryMetadata {
-
- constructor(_selector: Type | string);
-
- }
-
-
- /**
- * Configures a view query.
- *
- * View queries are set before the `afterViewInit` callback is called.
- *
- * ### Example
- *
- * ```
- * @Component({
- * selector: 'someDir'
- * })
- * @View({templateUrl: 'someTemplate', directives: [ItemDirective]})
- * class SomeDir {
- * @ViewChildren(ItemDirective) viewChildren: QueryList;
- *
- * afterViewInit() {
- * // viewChildren is set
- * }
- * }
- * ```
- */
- class ViewChildrenMetadata extends ViewQueryMetadata {
-
- constructor(_selector: Type | string);
-
- }
-
-
- /**
- * Similar to {@link QueryMetadata}, but querying the component view, instead of
- * the content children.
- *
- * ### Example ([live demo](http://plnkr.co/edit/eNsFHDf7YjyM6IzKxM1j?p=preview))
- *
- * ```javascript
- * @Component({...})
- * @View({
- * template: `
- * a
- * b
- * c
- * `
- * })
- * class MyComponent {
- * shown: boolean;
- *
- * constructor(private @Query(Item) items:QueryList) {
- * items.onChange(() => console.log(items.length));
- * }
- * }
- * ```
- *
- * Supports the same querying parameters as {@link QueryMetadata}, except
- * `descendants`. This always queries the whole view.
- *
- * As `shown` is flipped between true and false, items will contain zero of one
- * items.
- *
- * Specifies that a {@link QueryList} should be injected.
- *
- * The injected object is an iterable and observable live list.
- * See {@link QueryList} for more details.
- */
- class ViewQueryMetadata extends QueryMetadata {
-
- constructor(_selector: Type | string, {descendants, first}?: {descendants?: boolean, first?: boolean});
-
- /**
- * always `true` to differentiate it with {@link QueryMetadata}.
- */
- isViewQuery: any;
-
- toString(): string;
-
- }
-
-
- /**
- * Configures a view query.
- *
- * View queries are set before the `afterViewInit` callback is called.
- *
- * ### Example
- *
- * ```
- * @Component({
- * selector: 'someDir'
- * })
- * @View({templateUrl: 'someTemplate', directives: [ItemDirective]})
- * class SomeDir {
- * @ViewChild(ItemDirective) viewChild:ItemDirective;
- *
- * afterViewInit() {
- * // viewChild is set
- * }
- * }
- * ```
- */
- class ViewChildMetadata extends ViewQueryMetadata {
-
- constructor(_selector: Type | string);
-
- }
-
-
- /**
- * Specifies that a constant attribute value should be injected.
- *
- * The directive can inject constant string literals of host element attributes.
- *
- * ## Example
- *
- * Suppose we have an `` element and want to know its `type`.
- *
- * ```html
- *
- * ```
- *
- * A decorator can inject string literal `text` like so:
- *
- * ```javascript
- * @Directive({
- * selector: `input'
- * })
- * class InputDirective {
- * constructor(@Attribute('type') type) {
- * // type would be `text` in this example
- * }
- * }
- * ```
- */
- class AttributeMetadata extends DependencyMetadata {
-
- constructor(attributeName: string);
-
- attributeName: string;
-
- token: any;
-
- toString(): string;
-
- }
-
-
- /**
- * Declare reusable UI building blocks for an application.
- *
- * Each Angular component requires a single `@Component` and at least one `@View` annotation. The
- * `@Component`
- * annotation specifies when a component is instantiated, and which properties and hostListeners it
- * binds to.
- *
- * When a component is instantiated, Angular
- * - creates a shadow DOM for the component.
- * - loads the selected template into the shadow DOM.
- * - creates all the injectable objects configured with `bindings` and `viewBindings`.
- *
- * All template expressions and statements are then evaluated against the component instance.
- *
- * For details on the `@View` annotation, see {@link ViewMetadata}.
- *
- * ## Lifecycle hooks
- *
- * When the component class implements some {@link angular2/lifecycle_hooks} the callbacks are
- * called by the change detection at defined points in time during the life of the component.
- *
- * ## Example
- *
- * ```
- * @Component({
- * selector: 'greet'
- * })
- * @View({
- * template: 'Hello {{name}}!'
- * })
- * class Greet {
- * name: string;
- *
- * constructor() {
- * this.name = 'World';
- * }
- * }
- * ```
- */
- class ComponentMetadata extends DirectiveMetadata {
-
- constructor({selector, inputs, outputs, properties, events, host, exportAs, moduleId, bindings,
- viewBindings, changeDetection, queries}?: {
- selector?: string,
- inputs?: string[],
- outputs?: string[],
- properties?: string[],
- events?: string[],
- host?: {[key: string]: string},
- bindings?: any[],
- exportAs?: string,
- moduleId?: string,
- viewBindings?: any[],
- queries?: {[key: string]: any},
- changeDetection?: ChangeDetectionStrategy,
- });
-
- /**
- * Defines the used change detection strategy.
- *
- * When a component is instantiated, Angular creates a change detector, which is responsible for
- * propagating the component's bindings.
- *
- * The `changeDetection` property defines, whether the change detection will be checked every time
- * or only when the component tells it to do so.
- */
- changeDetection: ChangeDetectionStrategy;
-
- /**
- * Defines the set of injectable objects that are visible to its view DOM children.
- *
- * ## Simple Example
- *
- * Here is an example of a class that can be injected:
- *
- * ```
- * class Greeter {
- * greet(name:string) {
- * return 'Hello ' + name + '!';
- * }
- * }
- *
- * @Directive({
- * selector: 'needs-greeter'
- * })
- * class NeedsGreeter {
- * greeter:Greeter;
- *
- * constructor(greeter:Greeter) {
- * this.greeter = greeter;
- * }
- * }
- *
- * @Component({
- * selector: 'greet',
- * viewBindings: [
- * Greeter
- * ]
- * })
- * @View({
- * template: ``,
- * directives: [NeedsGreeter]
- * })
- * class HelloWorld {
- * }
- *
- * ```
- */
- viewBindings: any[];
-
- }
-
-
- /**
- * Directives allow you to attach behavior to elements in the DOM.
- *
- * {@link DirectiveMetadata}s with an embedded view are called {@link ComponentMetadata}s.
- *
- * A directive consists of a single directive annotation and a controller class. When the
- * directive's `selector` matches
- * elements in the DOM, the following steps occur:
- *
- * 1. For each directive, the `ElementInjector` attempts to resolve the directive's constructor
- * arguments.
- * 2. Angular instantiates directives for each matched element using `ElementInjector` in a
- * depth-first order,
- * as declared in the HTML.
- *
- * ## Understanding How Injection Works
- *
- * There are three stages of injection resolution.
- * - *Pre-existing Injectors*:
- * - The terminal {@link Injector} cannot resolve dependencies. It either throws an error or, if
- * the dependency was
- * specified as `@Optional`, returns `null`.
- * - The platform injector resolves browser singleton resources, such as: cookies, title,
- * location, and others.
- * - *Component Injectors*: Each component instance has its own {@link Injector}, and they follow
- * the same parent-child hierarchy
- * as the component instances in the DOM.
- * - *Element Injectors*: Each component instance has a Shadow DOM. Within the Shadow DOM each
- * element has an `ElementInjector`
- * which follow the same parent-child hierarchy as the DOM elements themselves.
- *
- * When a template is instantiated, it also must instantiate the corresponding directives in a
- * depth-first order. The
- * current `ElementInjector` resolves the constructor dependencies for each directive.
- *
- * Angular then resolves dependencies as follows, according to the order in which they appear in the
- * {@link ViewMetadata}:
- *
- * 1. Dependencies on the current element
- * 2. Dependencies on element injectors and their parents until it encounters a Shadow DOM boundary
- * 3. Dependencies on component injectors and their parents until it encounters the root component
- * 4. Dependencies on pre-existing injectors
- *
- *
- * The `ElementInjector` can inject other directives, element-specific special objects, or it can
- * delegate to the parent
- * injector.
- *
- * To inject other directives, declare the constructor parameter as:
- * - `directive:DirectiveType`: a directive on the current element only
- * - `@Host() directive:DirectiveType`: any directive that matches the type between the current
- * element and the
- * Shadow DOM root.
- * - `@Query(DirectiveType) query:QueryList`: A live collection of direct child
- * directives.
- * - `@QueryDescendants(DirectiveType) query:QueryList`: A live collection of any
- * child directives.
- *
- * To inject element-specific special objects, declare the constructor parameter as:
- * - `element: ElementRef` to obtain a reference to logical element in the view.
- * - `viewContainer: ViewContainerRef` to control child template instantiation, for
- * {@link DirectiveMetadata} directives only
- * - `bindingPropagation: BindingPropagation` to control change detection in a more granular way.
- *
- * ## Example
- *
- * The following example demonstrates how dependency injection resolves constructor arguments in
- * practice.
- *
- *
- * Assume this HTML template:
- *
- * ```
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- * ```
- *
- * With the following `dependency` decorator and `SomeService` injectable class.
- *
- * ```
- * @Injectable()
- * class SomeService {
- * }
- *
- * @Directive({
- * selector: '[dependency]',
- * inputs: [
- * 'id: dependency'
- * ]
- * })
- * class Dependency {
- * id:string;
- * }
- * ```
- *
- * Let's step through the different ways in which `MyDirective` could be declared...
- *
- *
- * ### No injection
- *
- * Here the constructor is declared with no arguments, therefore nothing is injected into
- * `MyDirective`.
- *
- * ```
- * @Directive({ selector: '[my-directive]' })
- * class MyDirective {
- * constructor() {
- * }
- * }
- * ```
- *
- * This directive would be instantiated with no dependencies.
- *
- *
- * ### Component-level injection
- *
- * Directives can inject any injectable instance from the closest component injector or any of its
- * parents.
- *
- * Here, the constructor declares a parameter, `someService`, and injects the `SomeService` type
- * from the parent
- * component's injector.
- * ```
- * @Directive({ selector: '[my-directive]' })
- * class MyDirective {
- * constructor(someService: SomeService) {
- * }
- * }
- * ```
- *
- * This directive would be instantiated with a dependency on `SomeService`.
- *
- *
- * ### Injecting a directive from the current element
- *
- * Directives can inject other directives declared on the current element.
- *
- * ```
- * @Directive({ selector: '[my-directive]' })
- * class MyDirective {
- * constructor(dependency: Dependency) {
- * expect(dependency.id).toEqual(3);
- * }
- * }
- * ```
- * This directive would be instantiated with `Dependency` declared at the same element, in this case
- * `dependency="3"`.
- *
- * ### Injecting a directive from any ancestor elements
- *
- * Directives can inject other directives declared on any ancestor element (in the current Shadow
- * DOM), i.e. on the current element, the
- * parent element, or its parents.
- * ```
- * @Directive({ selector: '[my-directive]' })
- * class MyDirective {
- * constructor(@Host() dependency: Dependency) {
- * expect(dependency.id).toEqual(2);
- * }
- * }
- * ```
- *
- * `@Host` checks the current element, the parent, as well as its parents recursively. If
- * `dependency="2"` didn't
- * exist on the direct parent, this injection would
- * have returned
- * `dependency="1"`.
- *
- *
- * ### Injecting a live collection of direct child directives
- *
- *
- * A directive can also query for other child directives. Since parent directives are instantiated
- * before child directives, a directive can't simply inject the list of child directives. Instead,
- * the directive injects a {@link QueryList}, which updates its contents as children are added,
- * removed, or moved by a directive that uses a {@link ViewContainerRef} such as a `ng-for`, an
- * `ng-if`, or an `ng-switch`.
- *
- * ```
- * @Directive({ selector: '[my-directive]' })
- * class MyDirective {
- * constructor(@Query(Dependency) dependencies:QueryList) {
- * }
- * }
- * ```
- *
- * This directive would be instantiated with a {@link QueryList} which contains `Dependency` 4 and
- * 6. Here, `Dependency` 5 would not be included, because it is not a direct child.
- *
- * ### Injecting a live collection of descendant directives
- *
- * By passing the descendant flag to `@Query` above, we can include the children of the child
- * elements.
- *
- * ```
- * @Directive({ selector: '[my-directive]' })
- * class MyDirective {
- * constructor(@Query(Dependency, {descendants: true}) dependencies:QueryList) {
- * }
- * }
- * ```
- *
- * This directive would be instantiated with a Query which would contain `Dependency` 4, 5 and 6.
- *
- * ### Optional injection
- *
- * The normal behavior of directives is to return an error when a specified dependency cannot be
- * resolved. If you
- * would like to inject `null` on unresolved dependency instead, you can annotate that dependency
- * with `@Optional()`.
- * This explicitly permits the author of a template to treat some of the surrounding directives as
- * optional.
- *
- * ```
- * @Directive({ selector: '[my-directive]' })
- * class MyDirective {
- * constructor(@Optional() dependency:Dependency) {
- * }
- * }
- * ```
- *
- * This directive would be instantiated with a `Dependency` directive found on the current element.
- * If none can be
- * found, the injector supplies `null` instead of throwing an error.
- *
- * ## Example
- *
- * Here we use a decorator directive to simply define basic tool-tip behavior.
- *
- * ```
- * @Directive({
- * selector: '[tooltip]',
- * inputs: [
- * 'text: tooltip'
- * ],
- * host: {
- * '(mouseenter)': 'onMouseEnter()',
- * '(mouseleave)': 'onMouseLeave()'
- * }
- * })
- * class Tooltip{
- * text:string;
- * overlay:Overlay; // NOT YET IMPLEMENTED
- * overlayManager:OverlayManager; // NOT YET IMPLEMENTED
- *
- * constructor(overlayManager:OverlayManager) {
- * this.overlay = overlay;
- * }
- *
- * onMouseEnter() {
- * // exact signature to be determined
- * this.overlay = this.overlayManager.open(text, ...);
- * }
- *
- * onMouseLeave() {
- * this.overlay.close();
- * this.overlay = null;
- * }
- * }
- * ```
- * In our HTML template, we can then add this behavior to a `
` or any other element with the
- * `tooltip` selector,
- * like so:
- *
- * ```
- *
- * ```
- *
- * Directives can also control the instantiation, destruction, and positioning of inline template
- * elements:
- *
- * A directive uses a {@link ViewContainerRef} to instantiate, insert, move, and destroy views at
- * runtime.
- * The {@link ViewContainerRef} is created as a result of `` element, and represents a
- * location in the current view
- * where these actions are performed.
- *
- * Views are always created as children of the current {@link ViewMetadata}, and as siblings of the
- * `` element. Thus a
- * directive in a child view cannot inject the directive that created it.
- *
- * Since directives that create views via ViewContainers are common in Angular, and using the full
- * `` element syntax is wordy, Angular
- * also supports a shorthand notation: `
- * ```
- *
- * Expands in use to:
- *
- * ```
- *
- *
- *
- *
- *
- * ```
- *
- * Notice that although the shorthand places `*foo="bar"` within the `
` element, the binding for
- * the directive
- * controller is correctly instantiated on the `` element rather than the `
` element.
- *
- * ## Lifecycle hooks
- *
- * When the directive class implements some {@link angular2/lifecycle_hooks} the callbacks are
- * called by the change detection at defined points in time during the life of the directive.
- *
- * ## Example
- *
- * Let's suppose we want to implement the `unless` behavior, to conditionally include a template.
- *
- * Here is a simple directive that triggers on an `unless` selector:
- *
- * ```
- * @Directive({
- * selector: '[unless]',
- * inputs: ['unless']
- * })
- * export class Unless {
- * viewContainer: ViewContainerRef;
- * templateRef: TemplateRef;
- * prevCondition: boolean;
- *
- * constructor(viewContainer: ViewContainerRef, templateRef: TemplateRef) {
- * this.viewContainer = viewContainer;
- * this.templateRef = templateRef;
- * this.prevCondition = null;
- * }
- *
- * set unless(newCondition) {
- * if (newCondition && (isBlank(this.prevCondition) || !this.prevCondition)) {
- * this.prevCondition = true;
- * this.viewContainer.clear();
- * } else if (!newCondition && (isBlank(this.prevCondition) || this.prevCondition)) {
- * this.prevCondition = false;
- * this.viewContainer.create(this.templateRef);
- * }
- * }
- * }
- * ```
- *
- * We can then use this `unless` selector in a template:
- * ```
- *
- *
- *
- * ```
- *
- * Once the directive instantiates the child view, the shorthand notation for the template expands
- * and the result is:
- *
- * ```
- *
- *
- *
- *
- *
- *
- * ```
- *
- * Note also that although the `
` template still exists inside the ``,
- * the instantiated
- * view occurs on the second `` which is a sibling to the `` element.
- */
- class DirectiveMetadata extends InjectableMetadata {
-
- constructor({selector, inputs, outputs, properties, events, host, bindings, exportAs, moduleId,
- queries}?: {
- selector?: string,
- inputs?: string[],
- outputs?: string[],
- properties?: string[],
- events?: string[],
- host?: {[key: string]: string},
- bindings?: any[],
- exportAs?: string,
- moduleId?: string,
- queries?: {[key: string]: any}
- });
-
- /**
- * The CSS selector that triggers the instantiation of a directive.
- *
- * Angular only allows directives to trigger on CSS selectors that do not cross element
- * boundaries.
- *
- * `selector` may be declared as one of the following:
- *
- * - `element-name`: select by element name.
- * - `.class`: select by class name.
- * - `[attribute]`: select by attribute name.
- * - `[attribute=value]`: select by attribute name and value.
- * - `:not(sub_selector)`: select only if the element does not match the `sub_selector`.
- * - `selector1, selector2`: select if either `selector1` or `selector2` matches.
- *
- *
- * ## Example
- *
- * Suppose we have a directive with an `input[type=text]` selector.
- *
- * And the following HTML:
- *
- * ```html
- *