{"action":"created","comment":{"url":"https://api.github.com/repos/rangle/react-workshop/pulls/comments/39101441","id":39101441,"diff_hunk":"@@ -0,0 +1,378 @@\n+# ImmutableJS Overview\n+\n+### Index\n+  1. Mutable vs. Immutable\n+  2. Persistent Data Structures\n+  3. Structural Sharing\n+  4. ImmutableJS API\n+  5. Todo app with ReactJS and ImmutableJS\n+\n+### Mutable vs. Immutable\n+**Mutable** data can be changed by replacing itself with new one. Mutation of data makes application development difficult because it makes the following things hard:\n+\n+  1. Keeping track of mutated data, and\n+  2. Maintaining application state\n+\n+**Immutable** data cannot be changed, but it can only be copied and then edit the copy. The original data is deleted only if we lose the reference to it.\n+\n+In JavaScript we have 6 primitive data types:\n+\n+  1. Boolean\n+  2. Number\n+  3. String\n+  4. Symbol\n+  5. Null\n+  6. Undefined\n+\n+```\n+Note: Symbol was introduced in ECMAScript 6\n+```\n+\n+All of these primitive data types are **immutable** which means their values cannot be changed. For example, assign a string literal ` \"Hello\" ` to a variable ` str ` and then attempt to change the first character to ` \"Y\" ` in the following way:\n+\n+```javascript\n+var str = 'Hello';\n+str[0] = 'Y';\n+console.log(str); // Hello <= did not change 'H' to 'Y'\n+```\n+\n+The only way to manipulate strings is through methods such as ` trim `, ` slice `, ` replace ` etc. However, even with those methods the original value does not change:\n+\n+```javascript\n+var str1 = 'Hello';\n+var str2 = str1.replace('H', 'Y');\n+console.log(str1); // This outputs `Hello` <= this value has not changed\n+console.log(str2); // This outputs `Yello`\n+```\n+\n+Also, number values do not change:\n+```javascript\n+var num1 = 12;\n+var num2 = num1 + 3;\n+\n+\n+console.log(num1); // num1 is still 12\n+console.log(num2); // num2 is the new value 15\n+\n+num1 += 4;         // num1 now points to the new value,\n+                   //   we just chose not to save it's previous value\n+\n+console.log(num1); // 16\n+```\n+\n+Note that `var num1 = num1 + 3` did not change the meaning of the number `12` to `15`.\n+Also, in `num1 += 4` we just no longer care about the old value `12` and allowed `num1` to point to the new value and discarded the old one.\n+\n+In JavaScript, **objects** and **arrays** are **mutable**\n+\n+```javascript\n+var arr = [1, 2, 3];\n+var abc = arr.push(4);\n+\n+console.log(arr); // [1, 2, 3, 4] <= arr was modified\n+console.log(abc); // 4            <= We have lost the original array!!\n+```\n+\n+### Persistent Data Structures\n+\n+Persistent data structures provides operators/methods which allow users to perform certain manipulation to the data without changing the original. Such data structure is effectively **immutable**.\n+\n+From our previous example we saw that an `Array` is immutable, and pushing an element onto it would replace the original with the new array `[1, 2, 3, 4]`. The `push` method returns the element that was pushed and not the mutated array.\n+\n+Ideally we want some **immutable** array data structure which would look something like this:\n+```javascript\n+var arr = ImmutableArray([1, 2, 3]);\n+var newArr = arr.push(4);\n+\n+console.log(arr.toArray());    // [1,2,3]      <= The old array is preserved\n+console.log(newArr.toArray()); // [1, 2, 3, 4] <= the new modified array\n+```\n+\n+By default objects in JS are mutable, as we already saw, however we can make them **immutable** without using any external libraries. This can be done by the use of the **ES5** and **ES6** `Object.assign()` and `Object.freeze`.\n+```js\n+var a = [1, 2, 3, 4];\n+var a_copy = Object.assign([], a);\n+\n+Object.freeze(a); // Freezing any object and array will prevent any future mutation\n+\n+a.push(5);        // Uncaught TypeError: Can't add property 5, object is not extensible(…)\n+a[0] = 1000;\n+console.log(a);   // [1, 2, 3, 4] <= No change!!\n+\n+a_copy.push(900);\n+a_copy[0] = 600;\n+console.log(a_copy);  // [600, 2, 3, 4, 900]  <= We can mutate the copy!!\n+```\n+\n+`Object.assign` is used to assign the values of `a` to an empty array which results in creating its copy which we call `a_copy`. Then we use `Object.freeze` to freeze our array `a` so that it can no longer be mutated.\n+\n+### Structural Sharing\n+\n+It seems to be a good idea to have **persistent immutable data structures** in JavaScript. Even though we can manually copy and freeze objects (as well as arrays and function) it would be still great to have some API that would enable us to use **immutable data structures**. The reason for that is because manual copying has the following problems:\n+\n+  1. Might cost too much **memory** since we keep too many copies and,\n+  2. Too many **copy** operations is expensive.\n+\n+However, we don't necessarily have to do expensive operations to cache the original data, instead we can have a smart implementation of an API that does all that very efficiently.\n+In fact **ImmutableJS** is a great example of such API which takes advantage of **structural sharing** implemented with **[Hash Map Tries](https://en.wikipedia.org/wiki/Hash_array_mapped_trie)** and **[Vector Tries](http://hypirion.com/musings/understanding-persistent-vector-pt-1)**.\n+\n+### ImmutableJS API\n+ImmutableJS is a library which is inspired by the lack of **persistent** data structures and the difficulty of tracking mutation and maintaining state.\n+It provides the following data structures\n+\n+- List\n+- Stack\n+- Map\n+- OrderedMap\n+- Set\n+- OrderedSet\n+- Record\n+\n+### List\n+`List` can be used as an **array** but it behaves differently as we are going to see below. `List` exposes some useful methods such as `push`, `pop`, `set`, `delete`. For full documentation you can check the [documentation from Facebook](https://facebook.github.io/immutable-js/docs/#/List)\n+\n+Here are some examples of how we can use `List`:\n+```js\n+// in ES6\n+import { List } from 'immutable';\n+\n+let numbers = List.of(1, 2, 3, 4, 5);\n+\n+let numbersUpdated = numbers.push(6); // 1, 2, 3, 4, 5, 6\n+\n+// We can convert the List to JS array\n+console.log(numbers.toJS());        // 1, 2, 3, 4, 5\n+console.log(numbersUpdated.toJS()); // 1, 2, 3, 4, 5, 6\n+```\n+---\n+**Note:** We can't just `console.log(numbers)` since `numbers` is not an array. We can however use the `toJS()` method to convert any Immutable data structure to a JS equivalent, as in our case that would be a `List` to an `array`. Also, we can use the `toArray()` method.\n+\n+---\n+\n+It is important to distinguish the behaviour of `push` and `pop` between JS `Array` and `List`:\n+\n+In **javascript** regular `Array`, `push` and `pop` return the element that was pushed/popped.\n+```js\n+var arr = [1, 2, 3];\n+var n1 = arr.push(4);\n+\n+console.log(n1); // 4\n+\n+var n2 = arr.pop();\n+\n+console.log(n2); // 4\n+```\n+\n+In `List` `push` and `pop` return the new mutated list.\n+```js\n+var list1 = List.of(1, 2, 3);\n+var list2 = list1.push(4);\n+\n+console.log(list2.toArray()); // [1, 2, 3, 4]\n+\n+var list3 = list2.pop();\n+\n+console.log(list3.toArray()); // [1, 2, 3]\n+```\n+\n+### Map\n+Map is an unordered KeyedIterable of (key, value) pairs.\n+The order of iteration is undefined but stable. Multiple iterations of the same Map will iterate in the same order.\n+\n+```js\n+let person1 = Map({\n+  name: 'John',\n+  age: '29',\n+  gender: 'male'\n+});\n+\n+\n+let printNext = (iterator) => {\n+  let el = iterator.next();\n+  if(!el.done) {\n+    console.log(el.value);\n+    printNext(iterator);\n+  }\n+}\n+\n+let printKeys = (myMap) => {\n+  printNext(myMap.keys());\n+}\n+\n+// the following two lines will print the keys of person1 in same order\n+printKeys(person1); // name, age, gender\n+printKeys(person1); // name, age, gender\n+```\n+\n+We can `set` and `update` values of a `Map`:\n+```js\n+// Set example 1\n+let person1 = Map({\n+  name: 'John',\n+  age: '29',\n+  gender: 'male',\n+  friends: List()\n+});\n+\n+let person2 = person1.set('name', 'Mike');\n+\n+console.log(person1.get('name')); // John\n+console.log(person2.get('name')); // Mike\n+\n+```\n+We can introduce a new key-value pair with `set`.\n+```js\n+// Set example 2\n+let person1 = Map({\n+  name: 'John',\n+  age: '29',\n+  gender: 'male',\n+  friends: List()\n+});\n+\n+let person2 = person1.set('birthday', 'Nov,03,1988');\n+\n+console.log(person1.get('birthday')); // undefined\n+console.log(person2.get('birthday')); // Nov,03,1988\n+\n+```\n+The `update` method requires an **updater** function:\n+```js\n+// Update example 1\n+let person1 = Map({\n+  name: 'John',\n+  age: '29',\n+  gender: 'male',\n+  friends: List()\n+});\n+\n+let person2 = person1.update('name', (name) => name + ' Doe');\n+\n+console.log(person1.get('name')); // John\n+console.log(person2.get('name')); // John Doe\n+","path":"handout/immutablejs-overview.md","position":253,"original_position":253,"commit_id":"d85dc62392ee3d09dca005a3601accc92a383df6","original_commit_id":"d85dc62392ee3d09dca005a3601accc92a383df6","user":{"login":"andrewdamelio","id":1683736,"avatar_url":"https://avatars.githubusercontent.com/u/1683736?v=3","gravatar_id":"","url":"https://api.github.com/users/andrewdamelio","html_url":"https://github.com/andrewdamelio","followers_url":"https://api.github.com/users/andrewdamelio/followers","following_url":"https://api.github.com/users/andrewdamelio/following{/other_user}","gists_url":"https://api.github.com/users/andrewdamelio/gists{/gist_id}","starred_url":"https://api.github.com/users/andrewdamelio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/andrewdamelio/subscriptions","organizations_url":"https://api.github.com/users/andrewdamelio/orgs","repos_url":"https://api.github.com/users/andrewdamelio/repos","events_url":"https://api.github.com/users/andrewdamelio/events{/privacy}","received_events_url":"https://api.github.com/users/andrewdamelio/received_events","type":"User","site_admin":false},"body":"http://jsfiddle.net/gue282q8/","created_at":"2015-09-09T21:51:22Z","updated_at":"2015-09-09T21:51:22Z","html_url":"https://github.com/rangle/react-workshop/pull/16#discussion_r39101441","pull_request_url":"https://api.github.com/repos/rangle/react-workshop/pulls/16","_links":{"self":{"href":"https://api.github.com/repos/rangle/react-workshop/pulls/comments/39101441"},"html":{"href":"https://github.com/rangle/react-workshop/pull/16#discussion_r39101441"},"pull_request":{"href":"https://api.github.com/repos/rangle/react-workshop/pulls/16"}}},"pull_request":{"url":"https://api.github.com/repos/rangle/react-workshop/pulls/16","id":44588375,"html_url":"https://github.com/rangle/react-workshop/pull/16","diff_url":"https://github.com/rangle/react-workshop/pull/16.diff","patch_url":"https://github.com/rangle/react-workshop/pull/16.patch","issue_url":"https://api.github.com/repos/rangle/react-workshop/issues/16","number":16,"state":"open","locked":false,"title":"Immutable writeup","user":{"login":"andrejkn","id":6758861,"avatar_url":"https://avatars.githubusercontent.com/u/6758861?v=3","gravatar_id":"","url":"https://api.github.com/users/andrejkn","html_url":"https://github.com/andrejkn","followers_url":"https://api.github.com/users/andrejkn/followers","following_url":"https://api.github.com/users/andrejkn/following{/other_user}","gists_url":"https://api.github.com/users/andrejkn/gists{/gist_id}","starred_url":"https://api.github.com/users/andrejkn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/andrejkn/subscriptions","organizations_url":"https://api.github.com/users/andrejkn/orgs","repos_url":"https://api.github.com/users/andrejkn/repos","events_url":"https://api.github.com/users/andrejkn/events{/privacy}","received_events_url":"https://api.github.com/users/andrejkn/received_events","type":"User","site_admin":false},"body":"@andrewdamelio @SethDavenport @neilff @sumitarora \r\nPlease let me  know if you have any comments/ideas/found error about this document\r\nThanks !","created_at":"2015-09-09T19:11:49Z","updated_at":"2015-09-09T21:51:22Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b3befa291f4d1de961827b5c5039658dda461463","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/rangle/react-workshop/pulls/16/commits","review_comments_url":"https://api.github.com/repos/rangle/react-workshop/pulls/16/comments","review_comment_url":"https://api.github.com/repos/rangle/react-workshop/pulls/comments{/number}","comments_url":"https://api.github.com/repos/rangle/react-workshop/issues/16/comments","statuses_url":"https://api.github.com/repos/rangle/react-workshop/statuses/d85dc62392ee3d09dca005a3601accc92a383df6","head":{"label":"rangle:immutable-writeup","ref":"immutable-writeup","sha":"d85dc62392ee3d09dca005a3601accc92a383df6","user":{"login":"rangle","id":4304982,"avatar_url":"https://avatars.githubusercontent.com/u/4304982?v=3","gravatar_id":"","url":"https://api.github.com/users/rangle","html_url":"https://github.com/rangle","followers_url":"https://api.github.com/users/rangle/followers","following_url":"https://api.github.com/users/rangle/following{/other_user}","gists_url":"https://api.github.com/users/rangle/gists{/gist_id}","starred_url":"https://api.github.com/users/rangle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rangle/subscriptions","organizations_url":"https://api.github.com/users/rangle/orgs","repos_url":"https://api.github.com/users/rangle/repos","events_url":"https://api.github.com/users/rangle/events{/privacy}","received_events_url":"https://api.github.com/users/rangle/received_events","type":"Organization","site_admin":false},"repo":{"id":40905566,"name":"react-workshop","full_name":"rangle/react-workshop","owner":{"login":"rangle","id":4304982,"avatar_url":"https://avatars.githubusercontent.com/u/4304982?v=3","gravatar_id":"","url":"https://api.github.com/users/rangle","html_url":"https://github.com/rangle","followers_url":"https://api.github.com/users/rangle/followers","following_url":"https://api.github.com/users/rangle/following{/other_user}","gists_url":"https://api.github.com/users/rangle/gists{/gist_id}","starred_url":"https://api.github.com/users/rangle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rangle/subscriptions","organizations_url":"https://api.github.com/users/rangle/orgs","repos_url":"https://api.github.com/users/rangle/repos","events_url":"https://api.github.com/users/rangle/events{/privacy}","received_events_url":"https://api.github.com/users/rangle/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/rangle/react-workshop","description":"Rangle's React Workshop","fork":false,"url":"https://api.github.com/repos/rangle/react-workshop","forks_url":"https://api.github.com/repos/rangle/react-workshop/forks","keys_url":"https://api.github.com/repos/rangle/react-workshop/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rangle/react-workshop/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rangle/react-workshop/teams","hooks_url":"https://api.github.com/repos/rangle/react-workshop/hooks","issue_events_url":"https://api.github.com/repos/rangle/react-workshop/issues/events{/number}","events_url":"https://api.github.com/repos/rangle/react-workshop/events","assignees_url":"https://api.github.com/repos/rangle/react-workshop/assignees{/user}","branches_url":"https://api.github.com/repos/rangle/react-workshop/branches{/branch}","tags_url":"https://api.github.com/repos/rangle/react-workshop/tags","blobs_url":"https://api.github.com/repos/rangle/react-workshop/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rangle/react-workshop/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rangle/react-workshop/git/refs{/sha}","trees_url":"https://api.github.com/repos/rangle/react-workshop/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rangle/react-workshop/statuses/{sha}","languages_url":"https://api.github.com/repos/rangle/react-workshop/languages","stargazers_url":"https://api.github.com/repos/rangle/react-workshop/stargazers","contributors_url":"https://api.github.com/repos/rangle/react-workshop/contributors","subscribers_url":"https://api.github.com/repos/rangle/react-workshop/subscribers","subscription_url":"https://api.github.com/repos/rangle/react-workshop/subscription","commits_url":"https://api.github.com/repos/rangle/react-workshop/commits{/sha}","git_commits_url":"https://api.github.com/repos/rangle/react-workshop/git/commits{/sha}","comments_url":"https://api.github.com/repos/rangle/react-workshop/comments{/number}","issue_comment_url":"https://api.github.com/repos/rangle/react-workshop/issues/comments{/number}","contents_url":"https://api.github.com/repos/rangle/react-workshop/contents/{+path}","compare_url":"https://api.github.com/repos/rangle/react-workshop/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rangle/react-workshop/merges","archive_url":"https://api.github.com/repos/rangle/react-workshop/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rangle/react-workshop/downloads","issues_url":"https://api.github.com/repos/rangle/react-workshop/issues{/number}","pulls_url":"https://api.github.com/repos/rangle/react-workshop/pulls{/number}","milestones_url":"https://api.github.com/repos/rangle/react-workshop/milestones{/number}","notifications_url":"https://api.github.com/repos/rangle/react-workshop/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rangle/react-workshop/labels{/name}","releases_url":"https://api.github.com/repos/rangle/react-workshop/releases{/id}","created_at":"2015-08-17T15:23:42Z","updated_at":"2015-09-03T19:17:38Z","pushed_at":"2015-09-09T20:00:35Z","git_url":"git://github.com/rangle/react-workshop.git","ssh_url":"git@github.com:rangle/react-workshop.git","clone_url":"https://github.com/rangle/react-workshop.git","svn_url":"https://github.com/rangle/react-workshop","homepage":null,"size":1031,"stargazers_count":1,"watchers_count":1,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":2,"forks":1,"open_issues":2,"watchers":1,"default_branch":"master"}},"base":{"label":"rangle:master","ref":"master","sha":"f023d4753d83e6a2bd8bb15ed372a8ded8267883","user":{"login":"rangle","id":4304982,"avatar_url":"https://avatars.githubusercontent.com/u/4304982?v=3","gravatar_id":"","url":"https://api.github.com/users/rangle","html_url":"https://github.com/rangle","followers_url":"https://api.github.com/users/rangle/followers","following_url":"https://api.github.com/users/rangle/following{/other_user}","gists_url":"https://api.github.com/users/rangle/gists{/gist_id}","starred_url":"https://api.github.com/users/rangle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rangle/subscriptions","organizations_url":"https://api.github.com/users/rangle/orgs","repos_url":"https://api.github.com/users/rangle/repos","events_url":"https://api.github.com/users/rangle/events{/privacy}","received_events_url":"https://api.github.com/users/rangle/received_events","type":"Organization","site_admin":false},"repo":{"id":40905566,"name":"react-workshop","full_name":"rangle/react-workshop","owner":{"login":"rangle","id":4304982,"avatar_url":"https://avatars.githubusercontent.com/u/4304982?v=3","gravatar_id":"","url":"https://api.github.com/users/rangle","html_url":"https://github.com/rangle","followers_url":"https://api.github.com/users/rangle/followers","following_url":"https://api.github.com/users/rangle/following{/other_user}","gists_url":"https://api.github.com/users/rangle/gists{/gist_id}","starred_url":"https://api.github.com/users/rangle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rangle/subscriptions","organizations_url":"https://api.github.com/users/rangle/orgs","repos_url":"https://api.github.com/users/rangle/repos","events_url":"https://api.github.com/users/rangle/events{/privacy}","received_events_url":"https://api.github.com/users/rangle/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/rangle/react-workshop","description":"Rangle's React Workshop","fork":false,"url":"https://api.github.com/repos/rangle/react-workshop","forks_url":"https://api.github.com/repos/rangle/react-workshop/forks","keys_url":"https://api.github.com/repos/rangle/react-workshop/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rangle/react-workshop/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rangle/react-workshop/teams","hooks_url":"https://api.github.com/repos/rangle/react-workshop/hooks","issue_events_url":"https://api.github.com/repos/rangle/react-workshop/issues/events{/number}","events_url":"https://api.github.com/repos/rangle/react-workshop/events","assignees_url":"https://api.github.com/repos/rangle/react-workshop/assignees{/user}","branches_url":"https://api.github.com/repos/rangle/react-workshop/branches{/branch}","tags_url":"https://api.github.com/repos/rangle/react-workshop/tags","blobs_url":"https://api.github.com/repos/rangle/react-workshop/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rangle/react-workshop/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rangle/react-workshop/git/refs{/sha}","trees_url":"https://api.github.com/repos/rangle/react-workshop/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rangle/react-workshop/statuses/{sha}","languages_url":"https://api.github.com/repos/rangle/react-workshop/languages","stargazers_url":"https://api.github.com/repos/rangle/react-workshop/stargazers","contributors_url":"https://api.github.com/repos/rangle/react-workshop/contributors","subscribers_url":"https://api.github.com/repos/rangle/react-workshop/subscribers","subscription_url":"https://api.github.com/repos/rangle/react-workshop/subscription","commits_url":"https://api.github.com/repos/rangle/react-workshop/commits{/sha}","git_commits_url":"https://api.github.com/repos/rangle/react-workshop/git/commits{/sha}","comments_url":"https://api.github.com/repos/rangle/react-workshop/comments{/number}","issue_comment_url":"https://api.github.com/repos/rangle/react-workshop/issues/comments{/number}","contents_url":"https://api.github.com/repos/rangle/react-workshop/contents/{+path}","compare_url":"https://api.github.com/repos/rangle/react-workshop/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rangle/react-workshop/merges","archive_url":"https://api.github.com/repos/rangle/react-workshop/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rangle/react-workshop/downloads","issues_url":"https://api.github.com/repos/rangle/react-workshop/issues{/number}","pulls_url":"https://api.github.com/repos/rangle/react-workshop/pulls{/number}","milestones_url":"https://api.github.com/repos/rangle/react-workshop/milestones{/number}","notifications_url":"https://api.github.com/repos/rangle/react-workshop/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rangle/react-workshop/labels{/name}","releases_url":"https://api.github.com/repos/rangle/react-workshop/releases{/id}","created_at":"2015-08-17T15:23:42Z","updated_at":"2015-09-03T19:17:38Z","pushed_at":"2015-09-09T20:00:35Z","git_url":"git://github.com/rangle/react-workshop.git","ssh_url":"git@github.com:rangle/react-workshop.git","clone_url":"https://github.com/rangle/react-workshop.git","svn_url":"https://github.com/rangle/react-workshop","homepage":null,"size":1031,"stargazers_count":1,"watchers_count":1,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":2,"forks":1,"open_issues":2,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/rangle/react-workshop/pulls/16"},"html":{"href":"https://github.com/rangle/react-workshop/pull/16"},"issue":{"href":"https://api.github.com/repos/rangle/react-workshop/issues/16"},"comments":{"href":"https://api.github.com/repos/rangle/react-workshop/issues/16/comments"},"review_comments":{"href":"https://api.github.com/repos/rangle/react-workshop/pulls/16/comments"},"review_comment":{"href":"https://api.github.com/repos/rangle/react-workshop/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/rangle/react-workshop/pulls/16/commits"},"statuses":{"href":"https://api.github.com/repos/rangle/react-workshop/statuses/d85dc62392ee3d09dca005a3601accc92a383df6"}}}}