{"action":"created","comment":{"url":"https://api.github.com/repos/auth0/blog/pulls/comments/184158660","pull_request_review_id":115270426,"id":184158660,"diff_hunk":"@@ -0,0 +1,284 @@\n+---\n+layout: post\n+title: \"Angular 6 Release: What’s New?\"\n+description: \"Fresh out the oven is Angular 6. It brings some new features and enhancement to one of the most popular JavaScript frameworks for crafting mobile, desktop and web applications. Learn what's new in Angular!\"\n+longdescription: \"What's new in Angular 6? Check out the new features and bug fixes in the latest version of one of the most used JavaScript frontend frameworks. Learn what's new in Angular 6!\"\n+date: 2018-04-25 08:30\n+category: Technical Guide, Angular, Angular 6\n+design:\n+  bg_color: \"#012C6C\"\n+  image: https://cdn.auth0.com/blog/angular5/logo.png\n+author:\n+  name: Prosper Otemuyiwa\n+  url: http://twitter.com/unicodeveloper?lang=en\n+  mail: prosper.otemuyiwa@auth0.com\n+  avatar: https://en.gravatar.com/avatar/1097492785caf9ffeebffeb624202d8f?s=200\n+tags:\n+- angular\n+- angular6\n+- javascript\n+- frontend\n+- authentication\n+related:\n+- 2017-11-14-whats-new-in-angular5\n+- 2016-09-29-angular-2-authentication\n+- 2017-06-28-real-world-angular-series-part-1\n+---\n+\n+---\n+\n+**TL;DR:** In this article, I'll cover the new features in Angular 6 and several other changes and deprecations.\n+\n+---\n+\n+Angular is actively [maintained by Google.](https://developers.google.com/experts/all/technology/angular). It's a very popular framework that has gotten the attention of the majority of frontend developers. And it keeps evolving and getting better by the day. Angular powers a lot of web platforms such as _Google Adwords_, _Google Fiber_, _Adsense_, and _Winc_.\n+\n+The previous major Angular version was Angular 5. I covered the [major features and bug fixes that shipped with Angular 5](https://auth0.com/blog/whats-new-in-angular5/). This release is also focused on making Angular smaller and faster to use.\n+\n+Let's go through the major changes in Angular 6.\n+\n+\n+## 1. Improved Service Worker Support \n+\n+Angular 6 now supports configuration of navigation URLs in Service Workers. The service worker will redirect navigation requests that don't match any `asset` or `data` group to the specified index file. \n+\n+{% include tweet_quote.html quote_text=\"Angular 6 now supports configuration of navigation URLs in Service Workers.\" %}\n+\n+By default, a navigation request can have any URL except for those containing `__` and URLs containing a file extension (i.e a `.`) in the last path segment. Sometimes it is great to be able to configure different rules for the URLs of navigation requests (e.g. ignore specific URLs and pass them through to the server).\n+\n+Now, you can specify an optional `navigationUrls` list in `ngsw-config.json`. which contains URLs or simple globs. Only requests whose URLs match any of the positive URLs/patterns and\n+none of the negative ones (i.e. URLs/patterns starting with `!`) will be\n+considered navigation requests and handled the right way by the service worker.\n+\n+Before now, the service worker would enter a degrade mode where only existing clients would be served if either the client or server was offline while trying to fetch `ngsw.json`. In Angular 6, the service worker remains in the current mode until connectivity to the server is restored.\n+\n+Furthermore, a helper script, `safety-worker.js`, has been added to the service worker package to enable easy deactivation of an existing service worker in production.\n+\n+_packages/service-worker/safety-worker.js_\n+\n+```js\n+self.addEventListener('install', event => { self.skipWaiting(); });\n+\n+self.addEventListener('activate', event => {\n+  event.waitUntil(self.clients.claim());\n+  self.registration.unregister().then(\n+      () => { console.log('NGSW Safety Worker - unregistered old service worker'); });\n+});\n+```\n+\n+## 2. Goodbye Template Tag\n+\n+The `<template>` tag was deprecated long ago, precisely in Angular 4. It has been removed completely in Angular 6.\n+\n+The `<ng-template>` tag should be used instead.\n+\n+**Before:**\n+\n+{% highlight html %}\n+{% raw %}\n+  <template>some template content</template>\n+{% endraw %}\n+{% endhighlight %}\n+\n+**Now:**\n+\n+{% highlight html %}\n+{% raw %}\n+  <ng-template>some template content</ng-template> \n+{% endraw %}\n+{% endhighlight %}\n+\n+## 3. Better URL Serialization\n+\n+Before now, there were issues around routes and URL serialization such as this below:\n+\n+![What's new in Angular 6 - URL Serialization](https://cdn.auth0.com/blog/angular6/urlissues.png)\n+_What's new in Angular 6 - URL Serialization_\n+\n+In Angular 6, issues like the one above have been fixed and:\n+\n+* URI fragments will now serialize the same as query strings.\n+* In the URL path, (portion prior to the query string and/or fragment), the plus sign (`+`) and ampersand (`&`) will appear decoded.\n+* In the URL path, parentheses values (`(` and `)`) will now appear percent-encoded as `%28` and `%29` respectively.\n+* In the URL path, semicolons will be encoded in their percent encoding `%3B`.\n+\n+It's also important to know that parentheses and semicolons denoting auxiliary routes will, in any case, show up in their decoded shape except for parentheses and semicolons used as values in a segment or key/value pair for matrix params which will show up encoded.\n+\n+## 4. Support Added for Custom Elements\n+\n+This is crazy. When I discovered this, I jumped! Let me explain before you get too excited.\n+\n+The support is currently experimental and unstable. It's targeted to land and become stable in the Angular 6.x release cycle.\n+\n+With this support, developers can simply register Angular Components as Custom Elements. Once registered, these components can be used just like built-in HTML elements. They are HTML Elements, so why not?\n+\n+So, Angular developers can do something like this:\n+\n+\n+{% highlight html %}\n+{% raw %}\n+\n+//my-name.ts\n+\n+import { Component, Input, NgModule } from '@angular/core';\n+import { createCustomElement } from '@angular/elements';\n+\n+@Component({\n+  selector: 'my-name',\n+  template: `<h1>Hello my name is {{name}}</h1>`\n+})\n+\n+export class MyName {\n+  @Input() name: string = 'Prosper!';\n+}\n+\n+@NgModule({\n+  declarations: [ MyName ],\n+  entryComponents: [ MyName ]\n+})\n+\n+export class MyNameModule {}\n+\n+{% endraw %}\n+{% endhighlight %}\n+\n+```ts\n+//app.component.ts\n+import { Component, NgModuleRef } from '@angular/core';\n+import { createCustomElement } from '@angular/elements';\n+\n+import { MyName } from './my-name.ngfactory';\n+\n+@Component({\n+  selector: 'app-root',\n+  templateUrl: './app.component.html',\n+  styleUrls: ['./app.component.css']\n+})\n+\n+export class AppComponent {\n+  constructor(private injector: Injector, ngModuleRef: NgModuleRef) {\n+    const ngElementConfig = createCustomElement(MyName, injector);\n+    customElements.define('my-name', NgElementConfig);\n+  }\n+}\n+```\n+\n+### 5. Forms Validation in Angular 6\n+\n+Before now, `ngModelChange` was always emitted before the underlying form control was updated. \n+\n+If you had a handler for the `ngModelChange` event that checked the value through the control, the old value will be logged instead of the updated value. This is not the case if you pass the value through the `$event` keyword directly. \n+\n+Check out this example:\n+\n+_Passing the value through the $event keyword directly_\n+\n+{% highlight html %}\n+{% raw %}\n+  <input [(ngModel)]=\"name\" (ngModelChange)=\"onChange($event)\">\n+{% endraw %}\n+{% endhighlight %}\n+\n+```js\n+onChange(value) {\n+   console.log(value); // logs updated value\n+}\n+```\n+\n+_Using a Handler_\n+\n+\n+{% highlight html %}\n+{% raw %}\n+  <input #modelDir=\"ngModel\" [(ngModel)]=\"name\" (ngModelChange)=\"onChange(modelDir)\">\n+{% endraw %}\n+{% endhighlight %}\n+\n+```js\n+onChange(ngModel: ngModel) {\n+   console.log(ngModel.value); // logs old value\n+}\n+```\n+\n+In Angular 6, `ngModelChange` is now emitted after the value is updated on its form control.\n+\n+{% include tweet_quote.html quote_text=\"In Angular 6, ngModelChange is now emitted after the value is updated on its form control.\" %}\n+\n+```js\n+onChange(ngModel: NgModel) {\n+   console.log(ngModel.value); // logs updated value\n+}\n+```\n+\n+## 6. Multiple Validators for Form Builder Array\n+\n+In previous versions of Angular, you can set only one validator on `FormArray` field with the `FormBuilder.array` method.\n+\n+In Angular 6, you can set multiple validators for the `FormBuilder.array` method:\n+\n+```js\n+...\n+ngOnInit() {\n+  this.speakerForm = this.formBuilder.group({\n+    text: ['', Validators.required],\n+    options: this.formBuilder.array([], [MyValidators.correctProposalCount, MyValidators.totalProposals])\n+  });\n+}\n+```\n+\n+## 7. Token Marking for Runtime Animation Context\n+\n+In Angular 6, it's now possible to determine which animation context is used for a component at runtime. A token is provided as a marker to determine whether the component is running a `BrowserAnimationsModule` or `NoopAnimationsModule` context at runtime.\n+\n+## 8. Hello Schematics\n+\n+**Schematics** is a new scaffolding library that's used by the Angular CLI to generate custom templates. The Angular team has always been keen on improving developer productivity, thus the birth of **schematics**.\n+\n+With Schematics, you can easily create Angular libraries like so:\n+\n+First, install the necessary schematic tools:\n+\n+```bash\n+npm i -g  ng-lib-schematics  @angular-devkit/core @angular-devkit/schematics-cli\n+```\n+\n+Next, create a new `angular-cli` project:\n+\n+```bash\n+ng new avengers --skip-install // avengers is the name of the new library I'm trying to create\n+```\n+\n+Finally, you can just run `schematics` like so:\n+\n+```bash\n+schematics ng-lib-schematics:lib-standalone --name avengers\n+```\n+\n+A new `lib` directory will be generated for you inside the `src` folder. The `lib` directory ships with a sample demo and the build tools necessary for a typical Angular package.\n+\n+Check out this [deep and excellent guide to Schematics](https://blog.angular.io/schematics-an-introduction-dc1dfbc2a2b2).\n+\n+## Deprecations and Other Updates\n+\n+* Angular 6 ships with Rxjs 6.0.0.","path":"_posts/2018-04-24-whats-new-in-angular6.markdown","position":263,"original_position":263,"commit_id":"7751b5438174271aa5755d111782f1e3e974de80","original_commit_id":"7751b5438174271aa5755d111782f1e3e974de80","user":{"login":"dan-auth0","id":37590801,"avatar_url":"https://avatars3.githubusercontent.com/u/37590801?v=4","gravatar_id":"","url":"https://api.github.com/users/dan-auth0","html_url":"https://github.com/dan-auth0","followers_url":"https://api.github.com/users/dan-auth0/followers","following_url":"https://api.github.com/users/dan-auth0/following{/other_user}","gists_url":"https://api.github.com/users/dan-auth0/gists{/gist_id}","starred_url":"https://api.github.com/users/dan-auth0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dan-auth0/subscriptions","organizations_url":"https://api.github.com/users/dan-auth0/orgs","repos_url":"https://api.github.com/users/dan-auth0/repos","events_url":"https://api.github.com/users/dan-auth0/events{/privacy}","received_events_url":"https://api.github.com/users/dan-auth0/received_events","type":"User","site_admin":false},"body":"Let's include a link to the RxJS repo here: https://github.com/ReactiveX/rxjs\r\n\r\nAngular 6 ships with [Rxjs 6.0.0](https://github.com/ReactiveX/rxjs).","created_at":"2018-04-25T18:14:49Z","updated_at":"2018-04-25T18:16:47Z","html_url":"https://github.com/auth0/blog/pull/1479#discussion_r184158660","pull_request_url":"https://api.github.com/repos/auth0/blog/pulls/1479","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/auth0/blog/pulls/comments/184158660"},"html":{"href":"https://github.com/auth0/blog/pull/1479#discussion_r184158660"},"pull_request":{"href":"https://api.github.com/repos/auth0/blog/pulls/1479"}}},"pull_request":{"url":"https://api.github.com/repos/auth0/blog/pulls/1479","id":184010119,"html_url":"https://github.com/auth0/blog/pull/1479","diff_url":"https://github.com/auth0/blog/pull/1479.diff","patch_url":"https://github.com/auth0/blog/pull/1479.patch","issue_url":"https://api.github.com/repos/auth0/blog/issues/1479","number":1479,"state":"open","locked":false,"title":"What's new in Angular 6?","user":{"login":"unicodeveloper","id":2946769,"avatar_url":"https://avatars1.githubusercontent.com/u/2946769?v=4","gravatar_id":"","url":"https://api.github.com/users/unicodeveloper","html_url":"https://github.com/unicodeveloper","followers_url":"https://api.github.com/users/unicodeveloper/followers","following_url":"https://api.github.com/users/unicodeveloper/following{/other_user}","gists_url":"https://api.github.com/users/unicodeveloper/gists{/gist_id}","starred_url":"https://api.github.com/users/unicodeveloper/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/unicodeveloper/subscriptions","organizations_url":"https://api.github.com/users/unicodeveloper/orgs","repos_url":"https://api.github.com/users/unicodeveloper/repos","events_url":"https://api.github.com/users/unicodeveloper/events{/privacy}","received_events_url":"https://api.github.com/users/unicodeveloper/received_events","type":"User","site_admin":false},"body":"","created_at":"2018-04-25T11:53:34Z","updated_at":"2018-04-25T18:16:47Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d6f2f960130b249cabf1d22b1d1948d4fbe21f41","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":525959883,"url":"https://api.github.com/repos/auth0/blog/labels/Needs%20Review%20%F0%9F%A4%94","name":"Needs Review 🤔","color":"fbca04","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/auth0/blog/pulls/1479/commits","review_comments_url":"https://api.github.com/repos/auth0/blog/pulls/1479/comments","review_comment_url":"https://api.github.com/repos/auth0/blog/pulls/comments{/number}","comments_url":"https://api.github.com/repos/auth0/blog/issues/1479/comments","statuses_url":"https://api.github.com/repos/auth0/blog/statuses/7751b5438174271aa5755d111782f1e3e974de80","head":{"label":"auth0:whatsnewinangular6","ref":"whatsnewinangular6","sha":"7751b5438174271aa5755d111782f1e3e974de80","user":{"login":"auth0","id":2824157,"avatar_url":"https://avatars1.githubusercontent.com/u/2824157?v=4","gravatar_id":"","url":"https://api.github.com/users/auth0","html_url":"https://github.com/auth0","followers_url":"https://api.github.com/users/auth0/followers","following_url":"https://api.github.com/users/auth0/following{/other_user}","gists_url":"https://api.github.com/users/auth0/gists{/gist_id}","starred_url":"https://api.github.com/users/auth0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/auth0/subscriptions","organizations_url":"https://api.github.com/users/auth0/orgs","repos_url":"https://api.github.com/users/auth0/repos","events_url":"https://api.github.com/users/auth0/events{/privacy}","received_events_url":"https://api.github.com/users/auth0/received_events","type":"Organization","site_admin":false},"repo":{"id":7830124,"name":"blog","full_name":"auth0/blog","owner":{"login":"auth0","id":2824157,"avatar_url":"https://avatars1.githubusercontent.com/u/2824157?v=4","gravatar_id":"","url":"https://api.github.com/users/auth0","html_url":"https://github.com/auth0","followers_url":"https://api.github.com/users/auth0/followers","following_url":"https://api.github.com/users/auth0/following{/other_user}","gists_url":"https://api.github.com/users/auth0/gists{/gist_id}","starred_url":"https://api.github.com/users/auth0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/auth0/subscriptions","organizations_url":"https://api.github.com/users/auth0/orgs","repos_url":"https://api.github.com/users/auth0/repos","events_url":"https://api.github.com/users/auth0/events{/privacy}","received_events_url":"https://api.github.com/users/auth0/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/auth0/blog","description":"auth0 blog","fork":false,"url":"https://api.github.com/repos/auth0/blog","forks_url":"https://api.github.com/repos/auth0/blog/forks","keys_url":"https://api.github.com/repos/auth0/blog/keys{/key_id}","collaborators_url":"https://api.github.com/repos/auth0/blog/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/auth0/blog/teams","hooks_url":"https://api.github.com/repos/auth0/blog/hooks","issue_events_url":"https://api.github.com/repos/auth0/blog/issues/events{/number}","events_url":"https://api.github.com/repos/auth0/blog/events","assignees_url":"https://api.github.com/repos/auth0/blog/assignees{/user}","branches_url":"https://api.github.com/repos/auth0/blog/branches{/branch}","tags_url":"https://api.github.com/repos/auth0/blog/tags","blobs_url":"https://api.github.com/repos/auth0/blog/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/auth0/blog/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/auth0/blog/git/refs{/sha}","trees_url":"https://api.github.com/repos/auth0/blog/git/trees{/sha}","statuses_url":"https://api.github.com/repos/auth0/blog/statuses/{sha}","languages_url":"https://api.github.com/repos/auth0/blog/languages","stargazers_url":"https://api.github.com/repos/auth0/blog/stargazers","contributors_url":"https://api.github.com/repos/auth0/blog/contributors","subscribers_url":"https://api.github.com/repos/auth0/blog/subscribers","subscription_url":"https://api.github.com/repos/auth0/blog/subscription","commits_url":"https://api.github.com/repos/auth0/blog/commits{/sha}","git_commits_url":"https://api.github.com/repos/auth0/blog/git/commits{/sha}","comments_url":"https://api.github.com/repos/auth0/blog/comments{/number}","issue_comment_url":"https://api.github.com/repos/auth0/blog/issues/comments{/number}","contents_url":"https://api.github.com/repos/auth0/blog/contents/{+path}","compare_url":"https://api.github.com/repos/auth0/blog/compare/{base}...{head}","merges_url":"https://api.github.com/repos/auth0/blog/merges","archive_url":"https://api.github.com/repos/auth0/blog/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/auth0/blog/downloads","issues_url":"https://api.github.com/repos/auth0/blog/issues{/number}","pulls_url":"https://api.github.com/repos/auth0/blog/pulls{/number}","milestones_url":"https://api.github.com/repos/auth0/blog/milestones{/number}","notifications_url":"https://api.github.com/repos/auth0/blog/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/auth0/blog/labels{/name}","releases_url":"https://api.github.com/repos/auth0/blog/releases{/id}","deployments_url":"https://api.github.com/repos/auth0/blog/deployments","created_at":"2013-01-25T22:57:37Z","updated_at":"2018-04-25T15:13:29Z","pushed_at":"2018-04-25T17:04:20Z","git_url":"git://github.com/auth0/blog.git","ssh_url":"git@github.com:auth0/blog.git","clone_url":"https://github.com/auth0/blog.git","svn_url":"https://github.com/auth0/blog","homepage":"https://auth0.com/blog","size":28074,"stargazers_count":75,"watchers_count":75,"language":"HTML","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":109,"mirror_url":null,"archived":false,"open_issues_count":31,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":109,"open_issues":31,"watchers":75,"default_branch":"master"}},"base":{"label":"auth0:master","ref":"master","sha":"8606bcea9de07d6de96969fa32f31b404abc3580","user":{"login":"auth0","id":2824157,"avatar_url":"https://avatars1.githubusercontent.com/u/2824157?v=4","gravatar_id":"","url":"https://api.github.com/users/auth0","html_url":"https://github.com/auth0","followers_url":"https://api.github.com/users/auth0/followers","following_url":"https://api.github.com/users/auth0/following{/other_user}","gists_url":"https://api.github.com/users/auth0/gists{/gist_id}","starred_url":"https://api.github.com/users/auth0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/auth0/subscriptions","organizations_url":"https://api.github.com/users/auth0/orgs","repos_url":"https://api.github.com/users/auth0/repos","events_url":"https://api.github.com/users/auth0/events{/privacy}","received_events_url":"https://api.github.com/users/auth0/received_events","type":"Organization","site_admin":false},"repo":{"id":7830124,"name":"blog","full_name":"auth0/blog","owner":{"login":"auth0","id":2824157,"avatar_url":"https://avatars1.githubusercontent.com/u/2824157?v=4","gravatar_id":"","url":"https://api.github.com/users/auth0","html_url":"https://github.com/auth0","followers_url":"https://api.github.com/users/auth0/followers","following_url":"https://api.github.com/users/auth0/following{/other_user}","gists_url":"https://api.github.com/users/auth0/gists{/gist_id}","starred_url":"https://api.github.com/users/auth0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/auth0/subscriptions","organizations_url":"https://api.github.com/users/auth0/orgs","repos_url":"https://api.github.com/users/auth0/repos","events_url":"https://api.github.com/users/auth0/events{/privacy}","received_events_url":"https://api.github.com/users/auth0/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/auth0/blog","description":"auth0 blog","fork":false,"url":"https://api.github.com/repos/auth0/blog","forks_url":"https://api.github.com/repos/auth0/blog/forks","keys_url":"https://api.github.com/repos/auth0/blog/keys{/key_id}","collaborators_url":"https://api.github.com/repos/auth0/blog/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/auth0/blog/teams","hooks_url":"https://api.github.com/repos/auth0/blog/hooks","issue_events_url":"https://api.github.com/repos/auth0/blog/issues/events{/number}","events_url":"https://api.github.com/repos/auth0/blog/events","assignees_url":"https://api.github.com/repos/auth0/blog/assignees{/user}","branches_url":"https://api.github.com/repos/auth0/blog/branches{/branch}","tags_url":"https://api.github.com/repos/auth0/blog/tags","blobs_url":"https://api.github.com/repos/auth0/blog/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/auth0/blog/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/auth0/blog/git/refs{/sha}","trees_url":"https://api.github.com/repos/auth0/blog/git/trees{/sha}","statuses_url":"https://api.github.com/repos/auth0/blog/statuses/{sha}","languages_url":"https://api.github.com/repos/auth0/blog/languages","stargazers_url":"https://api.github.com/repos/auth0/blog/stargazers","contributors_url":"https://api.github.com/repos/auth0/blog/contributors","subscribers_url":"https://api.github.com/repos/auth0/blog/subscribers","subscription_url":"https://api.github.com/repos/auth0/blog/subscription","commits_url":"https://api.github.com/repos/auth0/blog/commits{/sha}","git_commits_url":"https://api.github.com/repos/auth0/blog/git/commits{/sha}","comments_url":"https://api.github.com/repos/auth0/blog/comments{/number}","issue_comment_url":"https://api.github.com/repos/auth0/blog/issues/comments{/number}","contents_url":"https://api.github.com/repos/auth0/blog/contents/{+path}","compare_url":"https://api.github.com/repos/auth0/blog/compare/{base}...{head}","merges_url":"https://api.github.com/repos/auth0/blog/merges","archive_url":"https://api.github.com/repos/auth0/blog/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/auth0/blog/downloads","issues_url":"https://api.github.com/repos/auth0/blog/issues{/number}","pulls_url":"https://api.github.com/repos/auth0/blog/pulls{/number}","milestones_url":"https://api.github.com/repos/auth0/blog/milestones{/number}","notifications_url":"https://api.github.com/repos/auth0/blog/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/auth0/blog/labels{/name}","releases_url":"https://api.github.com/repos/auth0/blog/releases{/id}","deployments_url":"https://api.github.com/repos/auth0/blog/deployments","created_at":"2013-01-25T22:57:37Z","updated_at":"2018-04-25T15:13:29Z","pushed_at":"2018-04-25T17:04:20Z","git_url":"git://github.com/auth0/blog.git","ssh_url":"git@github.com:auth0/blog.git","clone_url":"https://github.com/auth0/blog.git","svn_url":"https://github.com/auth0/blog","homepage":"https://auth0.com/blog","size":28074,"stargazers_count":75,"watchers_count":75,"language":"HTML","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":109,"mirror_url":null,"archived":false,"open_issues_count":31,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":109,"open_issues":31,"watchers":75,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/auth0/blog/pulls/1479"},"html":{"href":"https://github.com/auth0/blog/pull/1479"},"issue":{"href":"https://api.github.com/repos/auth0/blog/issues/1479"},"comments":{"href":"https://api.github.com/repos/auth0/blog/issues/1479/comments"},"review_comments":{"href":"https://api.github.com/repos/auth0/blog/pulls/1479/comments"},"review_comment":{"href":"https://api.github.com/repos/auth0/blog/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/auth0/blog/pulls/1479/commits"},"statuses":{"href":"https://api.github.com/repos/auth0/blog/statuses/7751b5438174271aa5755d111782f1e3e974de80"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"dan-auth0"}}