{"action":"created","comment":{"url":"https://api.github.com/repos/angular/angular/pulls/comments/78500570","id":78500570,"diff_hunk":"@@ -64,278 +71,206 @@ export const ANALYZE_FOR_ENTRY_COMPONENTS = new OpaqueToken('AnalyzeForEntryComp\n  * A decorator can inject string literal `text` like so:\n  *\n  * {@example core/ts/metadata/metadata.ts region='attributeMetadata'}\n- * @stable\n- */\n-export class AttributeMetadata extends DependencyMetadata {\n-  constructor(public attributeName: string) { super(); }\n-\n-  get token(): AttributeMetadata {\n-    // Normally one would default a token to a type of an injected value but here\n-    // the type of a variable is \"string\" and we can't use primitive type as a return value\n-    // so we use instance of Attribute instead. This doesn't matter much in practice as arguments\n-    // with @Attribute annotation are injected by ElementInjector that doesn't take tokens into\n-    // account.\n-    return this;\n-  }\n-  toString(): string { return `@Attribute(${stringify(this.attributeName)})`; }\n-}\n-\n-/**\n- * Declares an injectable parameter to be a live list of directives or variable\n- * bindings from the content children of a directive.\n- *\n- * ### Example ([live demo](http://plnkr.co/edit/lY9m8HLy7z06vDoUaSN2?p=preview))\n  *\n- * Assume that `<tabs>` component would like to get a list its children `<pane>`\n- * components as shown in this example:\n+ * ### Example as TypeScript Decorator\n  *\n- * ```html\n- * <tabs>\n- *   <pane title=\"Overview\">...</pane>\n- *   <pane *ngFor=\"let o of objects\" [title]=\"o.title\">{{o.text}}</pane>\n- * </tabs>\n- * ```\n+ * {@example core/ts/metadata/metadata.ts region='attributeFactory'}\n  *\n- * The preferred solution is to query for `Pane` directives using this decorator.\n- *\n- * ```javascript\n- * @Component({\n- *   selector: 'pane',\n- *   inputs: ['title']\n- * })\n- * class Pane {\n- *   title:string;\n- * }\n+ * ### Example as ES5 DSL\n  *\n- * @Component({\n- *  selector: 'tabs',\n- *  template: `\n- *    <ul>\n- *      <li *ngFor=\"let pane of panes\">{{pane.title}}</li>\n- *    </ul>\n- *    <ng-content></ng-content>\n- *  `\n- * })\n- * class Tabs {\n- *   @ContentChildren(Pane) panes: QueryList<Pane>;\n- * }\n  * ```\n- *\n- * A query can look for variable bindings by passing in a string with desired binding symbol.\n- *\n- * ### Example ([live demo](http://plnkr.co/edit/sT2j25cH1dURAyBRCKx1?p=preview))\n- * ```html\n- * <seeker>\n- *   <div #findme>...</div>\n- * </seeker>\n- *\n- * @Component({ selector: 'seeker' })\n- * class Seeker {\n- *   @ContentChildren('findme') elList;\n- * }\n+ * var MyComponent = ng\n+ *   .Component({...})\n+ *   .Class({\n+ *     constructor: [new ng.Attribute('title'), function(title) {\n+ *       ...\n+ *     }]\n+ *   })\n  * ```\n  *\n- * In this case the object that is injected depend on the type of the variable\n- * binding. It can be an ElementRef, a directive or a component.\n- *\n- * Passing in a comma separated list of variable bindings will query for all of them.\n+ * ### Example as ES5 annotation\n  *\n- * ```html\n- * <seeker>\n- *   <div #find-me>...</div>\n- *   <div #find-me-too>...</div>\n- * </seeker>\n- *\n- *  @Component({\n- *   selector: 'seeker'\n- * })\n- * class Seeker {\n- *   @ContentChildren('findMe, findMeToo') elList: QueryList<ElementRef>;\n- * }\n  * ```\n- *\n- * Configure whether query looks for direct children or all descendants\n- * of the querying element, by using the `descendants` parameter.\n- * It is set to `false` by default.\n- *\n- * ### Example ([live demo](http://plnkr.co/edit/wtGeB977bv7qvA5FTYl9?p=preview))\n- * ```html\n- * <container #first>\n- *   <item>a</item>\n- *   <item>b</item>\n- *   <container #second>\n- *     <item>c</item>\n- *   </container>\n- * </container>\n+ * var MyComponent = function(title) {\n+ *   ...\n+ * };\n+ *\n+ * MyComponent.annotations = [\n+ *   new ng.Component({...})\n+ * ]\n+ * MyComponent.parameters = [\n+ *   [new ng.Attribute('title')]\n+ * ]\n  * ```\n  *\n- * When querying for items, the first container will see only `a` and `b` by default,\n- * but with `ContentChildren(TextDirective, {descendants: true})` it will see `c` too.\n- *\n- * The queried directives are kept in a depth-first pre-order with respect to their\n- * positions in the DOM.\n+ * @stable\n+ */ (name: string): any;\n+  new (name: string): Attribute;\n+}\n+\n+\n+/**\n+ * Type of the Attribute metadata.\n  *\n- * ContentChildren does not look deep into any subcomponent views.\n+ * @stable\n+ */\n+export interface Attribute { attributeName?: string; }\n+\n+/**\n+ * Attribute decorator and metadata.\n  *\n- * ContentChildren is updated as part of the change-detection cycle. Since change detection\n- * happens after construction of a directive, QueryList will always be empty when observed in the\n- * constructor.\n+ * @stable\n+ * @Annotation\n+ */\n+export const Attribute: AttributeDecorator =\n+    makeParamDecorator('Attribute', [['attributeName', undefined]]);\n+\n+/**\n+ * Type of the Query metadata.\n  *\n- * The injected object is an unmodifiable live list.\n- * See {@link QueryList} for more details.\n  * @stable\n  */\n-export class QueryMetadata extends DependencyMetadata {\n-  /**\n-   * whether we want to query only direct children (false) or all\n-   * children (true).\n-   */\n+export interface Query {\n   descendants: boolean;\n   first: boolean;\n-  /**\n-   * The DI token to read from an element that matches the selector.\n-   */\n   read: any;\n+  isViewQuery: boolean;\n+  selector: any;\n+}\n \n-  constructor(\n-      private _selector: Type<any>|string,\n-      {descendants = false, first = false,\n-       read = null}: {descendants?: boolean, first?: boolean, read?: any} = {}) {\n-    super();\n-    this.descendants = descendants;\n-    this.first = first;\n-    this.read = read;\n-  }\n+/**\n+ * Base class for query metadata\n+ *\n+ * @stable\n+ */\n+export abstract class Query {}\n \n+/**\n+ * Type of the ContentChildren decorator / constructor function.\n+ *\n+ * @stable\n+ */\n+export interface ContentChildrenDecorator {\n   /**\n-   * always `false` to differentiate it with {@link ViewQueryMetadata}.\n+   * Configures a content query.\n+   *\n+   * Content queries are set before the `ngAfterContentInit` callback is called.\n+   *\n+   * ### Example\n+   *\n+   * ```\n+   * @Directive({\n+   *   selector: 'someDir'\n+   * })\n+   * class SomeDir {\n+   *   @ContentChildren(ChildDirective) contentChildren: QueryList<ChildDirective>;\n+   *\n+   *   ngAfterContentInit() {\n+   *     // contentChildren is set\n+   *   }\n+   * }\n+   * ```\n+   * @stable\n    */\n-  get isViewQuery(): boolean { return false; }\n+  (selector: Type<any>|Function|string,\n+   {descendants, read}?: {descendants?: boolean, read?: any}): any;\n+  new (\n+      selector: Type<any>|Function|string,\n+      {descendants, read}?: {descendants?: boolean, read?: any}): Query;\n+}\n \n-  /**\n-   * what this is querying for.\n-   */\n-  get selector() { return resolveForwardRef(this._selector); }\n+/**\n+ * Type of the ContentChildren metadata.\n+ *\n+ * @stable\n+ */\n+export type ContentChildren = Query;\n \n-  /**\n-   * whether this is querying for a variable binding or a directive.\n-   */\n-  get isVarBindingQuery(): boolean { return isString(this.selector); }\n+/**\n+ * ContentChildren decorator and metadata.\n+ *\n+ * @stable\n+ * @Annotation\n+ */\n+export const ContentChildren: ContentChildrenDecorator = makePropDecorator(\n+    'ContentChildren',\n+    [\n+      ['selector', undefined],\n+      {first: false, isViewQuery: false, descendants: false, read: undefined}\n+    ],\n+    Query);\n \n+/**\n+ * Type of the ContentChild decorator / constructor function.\n+ *\n+ * @stable\n+ */\n+export interface ContentChildDecorator {\n   /**\n-   * returns a list of variable bindings this is querying for.\n-   * Only applicable if this is a variable bindings query.\n+   * Configures a content query.\n+   *\n+   * Content queries are set before the `ngAfterContentInit` callback is called.\n+   *\n+   * ### Example\n+   *\n+   * ```\n+   * @Directive({\n+   *   selector: 'someDir'\n+   * })\n+   * class SomeDir {\n+   *   @ContentChild(ChildDirective) contentChild;\n+   *   @ContentChild('container_ref') containerChild\n+   *\n+   *   ngAfterContentInit() {\n+   *     // contentChild is set\n+   *     // containerChild is set\n+   *   }\n+   * }\n+   * ```\n+   *\n+   * ```html\n+   * <container #container_ref>\n+   *   <item>a</item>\n+   *   <item>b</item>\n+   * </container>\n+   * ```\n    */\n-  get varBindings(): string[] { return StringWrapper.split(this.selector, /\\s*,\\s*/g); }\n-\n-  toString(): string { return `@Query(${stringify(this.selector)})`; }\n+  (selector: Type<any>|Function|string, {read}?: {read?: any}): any;\n+  new (selector: Type<any>|Function|string, {read}?: {read?: any}): ContentChild;\n }\n \n-// TODO: add an example after ContentChildren and ViewChildren are in master\n /**\n- * Configures a content query.\n- *\n- * Content queries are set before the `ngAfterContentInit` callback is called.\n+ * Type of the ContentChild metadata.\n  *\n- * ### Example\n- *\n- * ```\n- * @Directive({\n- *   selector: 'someDir'\n- * })\n- * class SomeDir {\n- *   @ContentChildren(ChildDirective) contentChildren: QueryList<ChildDirective>;\n- *\n- *   ngAfterContentInit() {\n- *     // contentChildren is set\n- *   }\n- * }\n- * ```\n  * @stable\n  */\n-export class ContentChildrenMetadata extends QueryMetadata {\n-  constructor(\n-      _selector: Type<any>|string,\n-      {descendants = false, read = null}: {descendants?: boolean, read?: any} = {}) {\n-    super(_selector, {descendants: descendants, read: read});\n-  }\n-}\n+export type ContentChild = Query;\n \n-// TODO: add an example after ContentChild and ViewChild are in master\n /**\n- * Configures a content query.\n+ * ContentChild decorator and metadata.\n  *\n- * Content queries are set before the `ngAfterContentInit` callback is called.\n- *\n- * ### Example\n- *\n- * ```\n- * @Directive({\n- *   selector: 'someDir'\n- * })\n- * class SomeDir {\n- *   @ContentChild(ChildDirective) contentChild;\n- *\n- *   ngAfterContentInit() {\n- *     // contentChild is set\n- *   }\n- * }\n- * ```\n  * @stable\n+ * @Annotation\n  */\n-export class ContentChildMetadata extends QueryMetadata {\n-  constructor(_selector: Type<any>|string, {read = null}: {read?: any} = {}) {\n-    super(_selector, {descendants: true, first: true, read: read});\n-  }\n-}\n+export const ContentChild: ContentChildDecorator = makePropDecorator(\n+    'ContentChild',\n+    [\n+      ['selector', undefined], {\n+        first: true,\n+        isViewQuery: false,","path":"modules/@angular/core/src/metadata/di.ts","position":402,"original_position":402,"commit_id":"8f1067c3a8e9adaaa7827b731e05fae72c7a1bf2","original_commit_id":"8f1067c3a8e9adaaa7827b731e05fae72c7a1bf2","user":{"login":"vicb","id":248818,"avatar_url":"https://avatars.githubusercontent.com/u/248818?v=3","gravatar_id":"","url":"https://api.github.com/users/vicb","html_url":"https://github.com/vicb","followers_url":"https://api.github.com/users/vicb/followers","following_url":"https://api.github.com/users/vicb/following{/other_user}","gists_url":"https://api.github.com/users/vicb/gists{/gist_id}","starred_url":"https://api.github.com/users/vicb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vicb/subscriptions","organizations_url":"https://api.github.com/users/vicb/orgs","repos_url":"https://api.github.com/users/vicb/repos","events_url":"https://api.github.com/users/vicb/events{/privacy}","received_events_url":"https://api.github.com/users/vicb/received_events","type":"User","site_admin":false},"body":"doesn't `isViewQuery` means that it can be set ?","created_at":"2016-09-13T06:01:52Z","updated_at":"2016-09-13T06:01:52Z","html_url":"https://github.com/angular/angular/pull/11541#discussion_r78500570","pull_request_url":"https://api.github.com/repos/angular/angular/pulls/11541","_links":{"self":{"href":"https://api.github.com/repos/angular/angular/pulls/comments/78500570"},"html":{"href":"https://github.com/angular/angular/pull/11541#discussion_r78500570"},"pull_request":{"href":"https://api.github.com/repos/angular/angular/pulls/11541"}}},"pull_request":{"url":"https://api.github.com/repos/angular/angular/pulls/11541","id":84904712,"html_url":"https://github.com/angular/angular/pull/11541","diff_url":"https://github.com/angular/angular/pull/11541.diff","patch_url":"https://github.com/angular/angular/pull/11541.patch","issue_url":"https://api.github.com/repos/angular/angular/issues/11541","number":11541,"state":"closed","locked":false,"title":"refactor directive/component metadata","user":{"login":"tbosch","id":690815,"avatar_url":"https://avatars.githubusercontent.com/u/690815?v=3","gravatar_id":"","url":"https://api.github.com/users/tbosch","html_url":"https://github.com/tbosch","followers_url":"https://api.github.com/users/tbosch/followers","following_url":"https://api.github.com/users/tbosch/following{/other_user}","gists_url":"https://api.github.com/users/tbosch/gists{/gist_id}","starred_url":"https://api.github.com/users/tbosch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tbosch/subscriptions","organizations_url":"https://api.github.com/users/tbosch/orgs","repos_url":"https://api.github.com/users/tbosch/repos","events_url":"https://api.github.com/users/tbosch/events{/privacy}","received_events_url":"https://api.github.com/users/tbosch/received_events","type":"User","site_admin":false},"body":"","created_at":"2016-09-12T16:43:59Z","updated_at":"2016-09-13T06:01:52Z","closed_at":"2016-09-13T05:49:38Z","merged_at":null,"merge_commit_sha":"70a4a2b6882ca4c85dde40283e7ae8ad3bc5da18","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/angular/angular/pulls/11541/commits","review_comments_url":"https://api.github.com/repos/angular/angular/pulls/11541/comments","review_comment_url":"https://api.github.com/repos/angular/angular/pulls/comments{/number}","comments_url":"https://api.github.com/repos/angular/angular/issues/11541/comments","statuses_url":"https://api.github.com/repos/angular/angular/statuses/8f1067c3a8e9adaaa7827b731e05fae72c7a1bf2","head":{"label":"tbosch:metadata","ref":"metadata","sha":"8f1067c3a8e9adaaa7827b731e05fae72c7a1bf2","user":{"login":"tbosch","id":690815,"avatar_url":"https://avatars.githubusercontent.com/u/690815?v=3","gravatar_id":"","url":"https://api.github.com/users/tbosch","html_url":"https://github.com/tbosch","followers_url":"https://api.github.com/users/tbosch/followers","following_url":"https://api.github.com/users/tbosch/following{/other_user}","gists_url":"https://api.github.com/users/tbosch/gists{/gist_id}","starred_url":"https://api.github.com/users/tbosch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tbosch/subscriptions","organizations_url":"https://api.github.com/users/tbosch/orgs","repos_url":"https://api.github.com/users/tbosch/repos","events_url":"https://api.github.com/users/tbosch/events{/privacy}","received_events_url":"https://api.github.com/users/tbosch/received_events","type":"User","site_admin":false},"repo":{"id":24733374,"name":"angular","full_name":"tbosch/angular","owner":{"login":"tbosch","id":690815,"avatar_url":"https://avatars.githubusercontent.com/u/690815?v=3","gravatar_id":"","url":"https://api.github.com/users/tbosch","html_url":"https://github.com/tbosch","followers_url":"https://api.github.com/users/tbosch/followers","following_url":"https://api.github.com/users/tbosch/following{/other_user}","gists_url":"https://api.github.com/users/tbosch/gists{/gist_id}","starred_url":"https://api.github.com/users/tbosch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tbosch/subscriptions","organizations_url":"https://api.github.com/users/tbosch/orgs","repos_url":"https://api.github.com/users/tbosch/repos","events_url":"https://api.github.com/users/tbosch/events{/privacy}","received_events_url":"https://api.github.com/users/tbosch/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/tbosch/angular","description":"","fork":true,"url":"https://api.github.com/repos/tbosch/angular","forks_url":"https://api.github.com/repos/tbosch/angular/forks","keys_url":"https://api.github.com/repos/tbosch/angular/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tbosch/angular/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tbosch/angular/teams","hooks_url":"https://api.github.com/repos/tbosch/angular/hooks","issue_events_url":"https://api.github.com/repos/tbosch/angular/issues/events{/number}","events_url":"https://api.github.com/repos/tbosch/angular/events","assignees_url":"https://api.github.com/repos/tbosch/angular/assignees{/user}","branches_url":"https://api.github.com/repos/tbosch/angular/branches{/branch}","tags_url":"https://api.github.com/repos/tbosch/angular/tags","blobs_url":"https://api.github.com/repos/tbosch/angular/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tbosch/angular/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tbosch/angular/git/refs{/sha}","trees_url":"https://api.github.com/repos/tbosch/angular/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tbosch/angular/statuses/{sha}","languages_url":"https://api.github.com/repos/tbosch/angular/languages","stargazers_url":"https://api.github.com/repos/tbosch/angular/stargazers","contributors_url":"https://api.github.com/repos/tbosch/angular/contributors","subscribers_url":"https://api.github.com/repos/tbosch/angular/subscribers","subscription_url":"https://api.github.com/repos/tbosch/angular/subscription","commits_url":"https://api.github.com/repos/tbosch/angular/commits{/sha}","git_commits_url":"https://api.github.com/repos/tbosch/angular/git/commits{/sha}","comments_url":"https://api.github.com/repos/tbosch/angular/comments{/number}","issue_comment_url":"https://api.github.com/repos/tbosch/angular/issues/comments{/number}","contents_url":"https://api.github.com/repos/tbosch/angular/contents/{+path}","compare_url":"https://api.github.com/repos/tbosch/angular/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tbosch/angular/merges","archive_url":"https://api.github.com/repos/tbosch/angular/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tbosch/angular/downloads","issues_url":"https://api.github.com/repos/tbosch/angular/issues{/number}","pulls_url":"https://api.github.com/repos/tbosch/angular/pulls{/number}","milestones_url":"https://api.github.com/repos/tbosch/angular/milestones{/number}","notifications_url":"https://api.github.com/repos/tbosch/angular/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tbosch/angular/labels{/name}","releases_url":"https://api.github.com/repos/tbosch/angular/releases{/id}","deployments_url":"https://api.github.com/repos/tbosch/angular/deployments","created_at":"2014-10-02T19:30:59Z","updated_at":"2015-06-02T21:15:59Z","pushed_at":"2016-09-13T05:35:39Z","git_url":"git://github.com/tbosch/angular.git","ssh_url":"git@github.com:tbosch/angular.git","clone_url":"https://github.com/tbosch/angular.git","svn_url":"https://github.com/tbosch/angular","homepage":null,"size":29097,"stargazers_count":0,"watchers_count":0,"language":"TypeScript","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"angular:master","ref":"master","sha":"26d1423ae93a743bd57a5fed9997c08c52f4bbfd","user":{"login":"angular","id":139426,"avatar_url":"https://avatars.githubusercontent.com/u/139426?v=3","gravatar_id":"","url":"https://api.github.com/users/angular","html_url":"https://github.com/angular","followers_url":"https://api.github.com/users/angular/followers","following_url":"https://api.github.com/users/angular/following{/other_user}","gists_url":"https://api.github.com/users/angular/gists{/gist_id}","starred_url":"https://api.github.com/users/angular/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/angular/subscriptions","organizations_url":"https://api.github.com/users/angular/orgs","repos_url":"https://api.github.com/users/angular/repos","events_url":"https://api.github.com/users/angular/events{/privacy}","received_events_url":"https://api.github.com/users/angular/received_events","type":"Organization","site_admin":false},"repo":{"id":24195339,"name":"angular","full_name":"angular/angular","owner":{"login":"angular","id":139426,"avatar_url":"https://avatars.githubusercontent.com/u/139426?v=3","gravatar_id":"","url":"https://api.github.com/users/angular","html_url":"https://github.com/angular","followers_url":"https://api.github.com/users/angular/followers","following_url":"https://api.github.com/users/angular/following{/other_user}","gists_url":"https://api.github.com/users/angular/gists{/gist_id}","starred_url":"https://api.github.com/users/angular/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/angular/subscriptions","organizations_url":"https://api.github.com/users/angular/orgs","repos_url":"https://api.github.com/users/angular/repos","events_url":"https://api.github.com/users/angular/events{/privacy}","received_events_url":"https://api.github.com/users/angular/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/angular/angular","description":"","fork":false,"url":"https://api.github.com/repos/angular/angular","forks_url":"https://api.github.com/repos/angular/angular/forks","keys_url":"https://api.github.com/repos/angular/angular/keys{/key_id}","collaborators_url":"https://api.github.com/repos/angular/angular/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/angular/angular/teams","hooks_url":"https://api.github.com/repos/angular/angular/hooks","issue_events_url":"https://api.github.com/repos/angular/angular/issues/events{/number}","events_url":"https://api.github.com/repos/angular/angular/events","assignees_url":"https://api.github.com/repos/angular/angular/assignees{/user}","branches_url":"https://api.github.com/repos/angular/angular/branches{/branch}","tags_url":"https://api.github.com/repos/angular/angular/tags","blobs_url":"https://api.github.com/repos/angular/angular/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/angular/angular/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/angular/angular/git/refs{/sha}","trees_url":"https://api.github.com/repos/angular/angular/git/trees{/sha}","statuses_url":"https://api.github.com/repos/angular/angular/statuses/{sha}","languages_url":"https://api.github.com/repos/angular/angular/languages","stargazers_url":"https://api.github.com/repos/angular/angular/stargazers","contributors_url":"https://api.github.com/repos/angular/angular/contributors","subscribers_url":"https://api.github.com/repos/angular/angular/subscribers","subscription_url":"https://api.github.com/repos/angular/angular/subscription","commits_url":"https://api.github.com/repos/angular/angular/commits{/sha}","git_commits_url":"https://api.github.com/repos/angular/angular/git/commits{/sha}","comments_url":"https://api.github.com/repos/angular/angular/comments{/number}","issue_comment_url":"https://api.github.com/repos/angular/angular/issues/comments{/number}","contents_url":"https://api.github.com/repos/angular/angular/contents/{+path}","compare_url":"https://api.github.com/repos/angular/angular/compare/{base}...{head}","merges_url":"https://api.github.com/repos/angular/angular/merges","archive_url":"https://api.github.com/repos/angular/angular/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/angular/angular/downloads","issues_url":"https://api.github.com/repos/angular/angular/issues{/number}","pulls_url":"https://api.github.com/repos/angular/angular/pulls{/number}","milestones_url":"https://api.github.com/repos/angular/angular/milestones{/number}","notifications_url":"https://api.github.com/repos/angular/angular/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/angular/angular/labels{/name}","releases_url":"https://api.github.com/repos/angular/angular/releases{/id}","deployments_url":"https://api.github.com/repos/angular/angular/deployments","created_at":"2014-09-18T16:12:01Z","updated_at":"2016-09-13T05:58:20Z","pushed_at":"2016-09-13T05:49:28Z","git_url":"git://github.com/angular/angular.git","ssh_url":"git@github.com:angular/angular.git","clone_url":"https://github.com/angular/angular.git","svn_url":"https://github.com/angular/angular","homepage":"https://angular.io","size":644799,"stargazers_count":15806,"watchers_count":15806,"language":"TypeScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":4056,"mirror_url":null,"open_issues_count":1195,"forks":4056,"open_issues":1195,"watchers":15806,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/angular/angular/pulls/11541"},"html":{"href":"https://github.com/angular/angular/pull/11541"},"issue":{"href":"https://api.github.com/repos/angular/angular/issues/11541"},"comments":{"href":"https://api.github.com/repos/angular/angular/issues/11541/comments"},"review_comments":{"href":"https://api.github.com/repos/angular/angular/pulls/11541/comments"},"review_comment":{"href":"https://api.github.com/repos/angular/angular/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/angular/angular/pulls/11541/commits"},"statuses":{"href":"https://api.github.com/repos/angular/angular/statuses/8f1067c3a8e9adaaa7827b731e05fae72c7a1bf2"}}}}
{"actor":{"display_login":"vicb"}}