{"action":"created","comment":{"url":"https://api.github.com/repos/nodejs/node/pulls/comments/119291523","pull_request_review_id":41155461,"id":119291523,"diff_hunk":"@@ -0,0 +1,532 @@\n+# Async Hooks\n+\n+> Stability: 1 - Experimental\n+\n+The `async_hooks` module provides an API to register callbacks tracking the\n+lifetime of asynchronous resources created inside a Node.js application.\n+It can be accessed using:\n+\n+```js\n+const async_hooks = require('async_hooks');\n+```\n+\n+## Terminology\n+\n+An asynchronous resource represents an object with an associated callback.\n+This callback may be called multiple times, for example, the `connection` event\n+in `net.createServer`, or just a single time like in `fs.open`. A resource\n+can also be closed before the callback is called. AsyncHooks does not\n+explicitly distinguish between these different cases but will represent them\n+as the abstract concept that is a resource.\n+\n+## Public API\n+\n+### Overview\n+\n+Following is a simple overview of the public API.\n+\n+```js\n+const async_hooks = require('async_hooks');\n+\n+// Return the ID of the current execution context.\n+const cid = async_hooks.currentId();\n+\n+// Return the ID of the handle responsible for triggering the callback of the\n+// current execution scope to call.\n+const tid = async_hooks.triggerId();\n+\n+// Create a new AsyncHook instance. All of these callbacks are optional.\n+const asyncHook = async_hooks.createHook({ init, before, after, destroy });\n+\n+// Allow callbacks of this AsyncHook instance to call. This is not an implicit\n+// action after running the constructor, and must be explicitly run to begin\n+// executing callbacks.\n+asyncHook.enable();\n+\n+// Disable listening for new asynchronous events.\n+asyncHook.disable();\n+\n+//\n+// The following are the callbacks that can be passed to createHook().\n+//\n+\n+// init() is called during object construction. The resource may not have\n+// completed construction when this callback runs, therefore all fields of the\n+// resource referenced by \"id\" may not have been populated.\n+function init(id, type, triggerId, resource) { }\n+\n+// before() is called just before the resource's callback is called. It can be\n+// called 0-N times for handles (e.g. TCPWrap), and will be called exactly 1\n+// time for requests (e.g. FSReqWrap).\n+function before(id) { }\n+\n+// after() is called just after the resource's callback has finished.\n+function after(id) { }\n+\n+// destroy() is called when an AsyncWrap instance is destroyed.\n+function destroy(id) { }\n+```\n+\n+#### `async_hooks.createHook(callbacks)`\n+\n+<!-- YAML\n+added: REPLACEME\n+-->\n+\n+* `callbacks` {Object} the callbacks to register\n+* Returns: `{AsyncHook}` instance used for disabling and enabling hooks\n+\n+Registers functions to be called for different lifetime events of each async\n+operation.\n+The callbacks `init()`/`before()`/`after()`/`destroy()` are registered via an\n+`AsyncHook` instance and are called during the respective asynchronous events\n+in the lifetime of the event loop.\n+\n+All callbacks are optional. So, for example, if only resource cleanup needs to\n+be tracked then only the `destroy()` callback needs to be passed. The\n+specifics of all functions that can be passed to `callbacks` is in the section\n+[`Hook Callbacks`][].\n+\n+##### Error Handling\n+\n+If any `AsyncHook` callbacks throw, the application will print the stack trace\n+and exit. The exit path does follow that of an uncaught exception but\n+all `uncaughtException` listeners are removed, thus forcing the process to\n+exit. The `'exit'` callbacks will still be called unless the application is run\n+with `--abort-on-uncaught-exception`, in which case a stack trace will be\n+printed and the application exits, leaving a core file.\n+\n+The reason for this error handling behavior is that these callbacks are running\n+at potentially volatile points in an object's lifetime, for example during\n+class construction and destruction. Because of this, it is deemed necessary to\n+bring down the process quickly in order to prevent an unintentional abort in the\n+future. This is subject to change in the future if a comprehensive analysis is\n+performed to ensure an exception can follow the normal control flow without\n+unintentional side effects.\n+\n+\n+##### Printing in AsyncHooks callbacks\n+\n+Because printing to the console is an asynchronous operation, `console.log()`\n+will cause the AsyncHooks callbacks to be called. Using `console.log()` or\n+similar asynchronous operations inside an AsyncHooks callback function will thus\n+cause an infinite recursion. An easily solution to this when debugging is\n+to use a synchronous logging operation such as `fs.writeSync(1, msg)`. This\n+will print to stdout because `1` is the file descriptor for stdout and will\n+not invoke AsyncHooks recursively because it is synchronous.\n+\n+```js\n+const fs = require('fs');\n+const util = require('util');\n+\n+function debug() {\n+  // use a function like this one when debugging inside an AsyncHooks callback\n+  fs.writeSync(1, util.format.apply(null, arguments));\n+}\n+```\n+\n+If an asynchronous operation is needed for logging, it is possible to keep\n+track of what caused the asynchronous operation using the information\n+provided by AsyncHooks itself. The logging should then be skipped when\n+it was the logging itself that caused AsyncHooks callback to call. By\n+doing this the otherwise infinite recursion is broken.\n+\n+#### `asyncHook.enable()`\n+\n+* Returns {AsyncHook} A reference to `asyncHook`.\n+\n+Enable the callbacks for a given `AsyncHook` instance.\n+\n+```js\n+const async_hooks = require('async_hooks');\n+\n+const hook = async_hooks.createHook(callbacks).enable();\n+```\n+\n+#### `asyncHook.disable()`\n+\n+* Returns {AsyncHook} A reference to `asyncHook`.\n+\n+Disable the callbacks for a given `AsyncHook` instance from the global pool of\n+AsyncHook callbacks to be executed. Once a hook has been disabled it will not\n+be called again until enabled.\n+\n+For API consistency `disable()` also returns the `AsyncHook` instance.\n+\n+#### Hook Callbacks\n+\n+Key events in the lifetime of asynchronous events have been categorized into\n+four areas: instantiation, before/after the callback is called, and when the\n+instance is destructed.\n+\n+##### `init(id, type, triggerId, resource)`\n+\n+* `id` {number} a unique ID for the async resource\n+* `type` {string} the type of the async resource\n+* `triggerId` {number} the unique ID of the async resource in whose\n+  execution context this async resource was created\n+* `resource` {Object} reference to the resource representing the async operation,\n+  needs to be released during _destroy_\n+\n+Called when a class is constructed that has the _possibility_ to emit an\n+asynchronous event. This _does not_ mean the instance must call\n+`before()`/`after()` before `destroy()` is called, only that the possibility\n+exists.\n+\n+This behavior can be observed by doing something like opening a resource then\n+closing it before the resource can be used. The following snippet demonstrates\n+this.\n+\n+```js\n+require('net').createServer().listen(function() { this.close(); });\n+// OR\n+clearTimeout(setTimeout(() => {}, 10));\n+```\n+\n+Every new resource is assigned a unique ID.\n+\n+The `type` is a string that represents the type of resource that caused\n+`init()` to call. Generally it will be the name of the resource's constructor.\n+The resource types provided by the built-in Node.js modules are:\n+\n+```\n+FSEVENTWRAP, FSREQWRAP, GETADDRINFOREQWRAP, GETNAMEINFOREQWRAP, HTTPPARSER,\n+JSSTREAM, PIPECONNECTWRAP, PIPEWRAP, PROCESSWRAP, QUERYWRAP, SHUTDOWNWRAP,\n+SIGNALWRAP, STATWATCHER, TCPCONNECTWRAP, TCPWRAP, TIMERWRAP, TTYWRAP,\n+UDPSENDWRAP, UDPWRAP, WRITEWRAP, ZLIB, SSLCONNECTION, PBKDF2REQUEST,\n+RANDOMBYTESREQUEST, TLSWRAP","path":"doc/api/async_hooks.md","position":197,"original_position":197,"commit_id":"4ba706f01f4692abcec67d0ad915e4b1f6ccdde5","original_commit_id":"4ba706f01f4692abcec67d0ad915e4b1f6ccdde5","user":{"login":"AndreasMadsen","id":505333,"avatar_url":"https://avatars3.githubusercontent.com/u/505333?v=3","gravatar_id":"","url":"https://api.github.com/users/AndreasMadsen","html_url":"https://github.com/AndreasMadsen","followers_url":"https://api.github.com/users/AndreasMadsen/followers","following_url":"https://api.github.com/users/AndreasMadsen/following{/other_user}","gists_url":"https://api.github.com/users/AndreasMadsen/gists{/gist_id}","starred_url":"https://api.github.com/users/AndreasMadsen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AndreasMadsen/subscriptions","organizations_url":"https://api.github.com/users/AndreasMadsen/orgs","repos_url":"https://api.github.com/users/AndreasMadsen/repos","events_url":"https://api.github.com/users/AndreasMadsen/events{/privacy}","received_events_url":"https://api.github.com/users/AndreasMadsen/received_events","type":"User","site_admin":false},"body":"Don't know:\r\n\r\n```\r\nnode -e \"console.log(Object.keys(process.binding('async_wrap').Providers).slice(1).join(', '))\"\r\n```\r\n\r\nwas the command I used to generate it. Thinking about it, the list is incomplete, for example, there is also `Timeout`.","created_at":"2017-05-31T07:50:31Z","updated_at":"2017-05-31T07:50:32Z","html_url":"https://github.com/nodejs/node/pull/13287#discussion_r119291523","pull_request_url":"https://api.github.com/repos/nodejs/node/pulls/13287","_links":{"self":{"href":"https://api.github.com/repos/nodejs/node/pulls/comments/119291523"},"html":{"href":"https://github.com/nodejs/node/pull/13287#discussion_r119291523"},"pull_request":{"href":"https://api.github.com/repos/nodejs/node/pulls/13287"}}},"pull_request":{"url":"https://api.github.com/repos/nodejs/node/pulls/13287","id":122936426,"html_url":"https://github.com/nodejs/node/pull/13287","diff_url":"https://github.com/nodejs/node/pull/13287.diff","patch_url":"https://github.com/nodejs/node/pull/13287.patch","issue_url":"https://api.github.com/repos/nodejs/node/issues/13287","number":13287,"state":"open","locked":false,"title":"docs: documenting async hooks features","user":{"login":"AndreasMadsen","id":505333,"avatar_url":"https://avatars3.githubusercontent.com/u/505333?v=3","gravatar_id":"","url":"https://api.github.com/users/AndreasMadsen","html_url":"https://github.com/AndreasMadsen","followers_url":"https://api.github.com/users/AndreasMadsen/followers","following_url":"https://api.github.com/users/AndreasMadsen/following{/other_user}","gists_url":"https://api.github.com/users/AndreasMadsen/gists{/gist_id}","starred_url":"https://api.github.com/users/AndreasMadsen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AndreasMadsen/subscriptions","organizations_url":"https://api.github.com/users/AndreasMadsen/orgs","repos_url":"https://api.github.com/users/AndreasMadsen/repos","events_url":"https://api.github.com/users/AndreasMadsen/events{/privacy}","received_events_url":"https://api.github.com/users/AndreasMadsen/received_events","type":"User","site_admin":false},"body":"##### Checklist\r\n\r\n- [x] documentation is changed or added\r\n- [x] commit message follows [commit guidelines](https://github.com/nodejs/node/blob/master/CONTRIBUTING.md#commit-message-guidelines)\r\n\r\n##### Affected core subsystem(s)\r\n\r\n* async hooks\r\n* docs\r\n\r\n---\r\n\r\nThis is a continuation on #12953 it should \"fix\" all the suggestions.\r\n\r\nIt took me 3 hours fix all the issues, so I would like if nits are done by you in a followup PR I simply don't have this much time. Also please be very specific with the suggestions, as in replace \"this\" with \"this\".","created_at":"2017-05-29T19:23:54Z","updated_at":"2017-05-31T07:50:32Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c526961015629c361258e7ac964bd4f1cc6ee938","assignee":null,"assignees":[],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/nodejs/node/pulls/13287/commits","review_comments_url":"https://api.github.com/repos/nodejs/node/pulls/13287/comments","review_comment_url":"https://api.github.com/repos/nodejs/node/pulls/comments{/number}","comments_url":"https://api.github.com/repos/nodejs/node/issues/13287/comments","statuses_url":"https://api.github.com/repos/nodejs/node/statuses/4ba706f01f4692abcec67d0ad915e4b1f6ccdde5","head":{"label":"AndreasMadsen:async-hooks-docs","ref":"async-hooks-docs","sha":"4ba706f01f4692abcec67d0ad915e4b1f6ccdde5","user":{"login":"AndreasMadsen","id":505333,"avatar_url":"https://avatars3.githubusercontent.com/u/505333?v=3","gravatar_id":"","url":"https://api.github.com/users/AndreasMadsen","html_url":"https://github.com/AndreasMadsen","followers_url":"https://api.github.com/users/AndreasMadsen/followers","following_url":"https://api.github.com/users/AndreasMadsen/following{/other_user}","gists_url":"https://api.github.com/users/AndreasMadsen/gists{/gist_id}","starred_url":"https://api.github.com/users/AndreasMadsen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AndreasMadsen/subscriptions","organizations_url":"https://api.github.com/users/AndreasMadsen/orgs","repos_url":"https://api.github.com/users/AndreasMadsen/repos","events_url":"https://api.github.com/users/AndreasMadsen/events{/privacy}","received_events_url":"https://api.github.com/users/AndreasMadsen/received_events","type":"User","site_admin":false},"repo":{"id":42876352,"name":"node","full_name":"AndreasMadsen/node","owner":{"login":"AndreasMadsen","id":505333,"avatar_url":"https://avatars3.githubusercontent.com/u/505333?v=3","gravatar_id":"","url":"https://api.github.com/users/AndreasMadsen","html_url":"https://github.com/AndreasMadsen","followers_url":"https://api.github.com/users/AndreasMadsen/followers","following_url":"https://api.github.com/users/AndreasMadsen/following{/other_user}","gists_url":"https://api.github.com/users/AndreasMadsen/gists{/gist_id}","starred_url":"https://api.github.com/users/AndreasMadsen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AndreasMadsen/subscriptions","organizations_url":"https://api.github.com/users/AndreasMadsen/orgs","repos_url":"https://api.github.com/users/AndreasMadsen/repos","events_url":"https://api.github.com/users/AndreasMadsen/events{/privacy}","received_events_url":"https://api.github.com/users/AndreasMadsen/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/AndreasMadsen/node","description":"Node.js JavaScript runtime :sparkles::turtle::rocket::sparkles:","fork":true,"url":"https://api.github.com/repos/AndreasMadsen/node","forks_url":"https://api.github.com/repos/AndreasMadsen/node/forks","keys_url":"https://api.github.com/repos/AndreasMadsen/node/keys{/key_id}","collaborators_url":"https://api.github.com/repos/AndreasMadsen/node/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/AndreasMadsen/node/teams","hooks_url":"https://api.github.com/repos/AndreasMadsen/node/hooks","issue_events_url":"https://api.github.com/repos/AndreasMadsen/node/issues/events{/number}","events_url":"https://api.github.com/repos/AndreasMadsen/node/events","assignees_url":"https://api.github.com/repos/AndreasMadsen/node/assignees{/user}","branches_url":"https://api.github.com/repos/AndreasMadsen/node/branches{/branch}","tags_url":"https://api.github.com/repos/AndreasMadsen/node/tags","blobs_url":"https://api.github.com/repos/AndreasMadsen/node/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/AndreasMadsen/node/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/AndreasMadsen/node/git/refs{/sha}","trees_url":"https://api.github.com/repos/AndreasMadsen/node/git/trees{/sha}","statuses_url":"https://api.github.com/repos/AndreasMadsen/node/statuses/{sha}","languages_url":"https://api.github.com/repos/AndreasMadsen/node/languages","stargazers_url":"https://api.github.com/repos/AndreasMadsen/node/stargazers","contributors_url":"https://api.github.com/repos/AndreasMadsen/node/contributors","subscribers_url":"https://api.github.com/repos/AndreasMadsen/node/subscribers","subscription_url":"https://api.github.com/repos/AndreasMadsen/node/subscription","commits_url":"https://api.github.com/repos/AndreasMadsen/node/commits{/sha}","git_commits_url":"https://api.github.com/repos/AndreasMadsen/node/git/commits{/sha}","comments_url":"https://api.github.com/repos/AndreasMadsen/node/comments{/number}","issue_comment_url":"https://api.github.com/repos/AndreasMadsen/node/issues/comments{/number}","contents_url":"https://api.github.com/repos/AndreasMadsen/node/contents/{+path}","compare_url":"https://api.github.com/repos/AndreasMadsen/node/compare/{base}...{head}","merges_url":"https://api.github.com/repos/AndreasMadsen/node/merges","archive_url":"https://api.github.com/repos/AndreasMadsen/node/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/AndreasMadsen/node/downloads","issues_url":"https://api.github.com/repos/AndreasMadsen/node/issues{/number}","pulls_url":"https://api.github.com/repos/AndreasMadsen/node/pulls{/number}","milestones_url":"https://api.github.com/repos/AndreasMadsen/node/milestones{/number}","notifications_url":"https://api.github.com/repos/AndreasMadsen/node/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/AndreasMadsen/node/labels{/name}","releases_url":"https://api.github.com/repos/AndreasMadsen/node/releases{/id}","deployments_url":"https://api.github.com/repos/AndreasMadsen/node/deployments","created_at":"2015-09-21T15:48:29Z","updated_at":"2016-03-18T20:12:28Z","pushed_at":"2017-05-30T07:07:43Z","git_url":"git://github.com/AndreasMadsen/node.git","ssh_url":"git@github.com:AndreasMadsen/node.git","clone_url":"https://github.com/AndreasMadsen/node.git","svn_url":"https://github.com/AndreasMadsen/node","homepage":"https://nodejs.org","size":267078,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_projects":true,"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":"nodejs:master","ref":"master","sha":"10913271bfcc1d81962e17c251e590fb5bdf8e28","user":{"login":"nodejs","id":9950313,"avatar_url":"https://avatars0.githubusercontent.com/u/9950313?v=3","gravatar_id":"","url":"https://api.github.com/users/nodejs","html_url":"https://github.com/nodejs","followers_url":"https://api.github.com/users/nodejs/followers","following_url":"https://api.github.com/users/nodejs/following{/other_user}","gists_url":"https://api.github.com/users/nodejs/gists{/gist_id}","starred_url":"https://api.github.com/users/nodejs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nodejs/subscriptions","organizations_url":"https://api.github.com/users/nodejs/orgs","repos_url":"https://api.github.com/users/nodejs/repos","events_url":"https://api.github.com/users/nodejs/events{/privacy}","received_events_url":"https://api.github.com/users/nodejs/received_events","type":"Organization","site_admin":false},"repo":{"id":27193779,"name":"node","full_name":"nodejs/node","owner":{"login":"nodejs","id":9950313,"avatar_url":"https://avatars0.githubusercontent.com/u/9950313?v=3","gravatar_id":"","url":"https://api.github.com/users/nodejs","html_url":"https://github.com/nodejs","followers_url":"https://api.github.com/users/nodejs/followers","following_url":"https://api.github.com/users/nodejs/following{/other_user}","gists_url":"https://api.github.com/users/nodejs/gists{/gist_id}","starred_url":"https://api.github.com/users/nodejs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nodejs/subscriptions","organizations_url":"https://api.github.com/users/nodejs/orgs","repos_url":"https://api.github.com/users/nodejs/repos","events_url":"https://api.github.com/users/nodejs/events{/privacy}","received_events_url":"https://api.github.com/users/nodejs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/nodejs/node","description":"Node.js JavaScript runtime :sparkles::turtle::rocket::sparkles:","fork":false,"url":"https://api.github.com/repos/nodejs/node","forks_url":"https://api.github.com/repos/nodejs/node/forks","keys_url":"https://api.github.com/repos/nodejs/node/keys{/key_id}","collaborators_url":"https://api.github.com/repos/nodejs/node/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/nodejs/node/teams","hooks_url":"https://api.github.com/repos/nodejs/node/hooks","issue_events_url":"https://api.github.com/repos/nodejs/node/issues/events{/number}","events_url":"https://api.github.com/repos/nodejs/node/events","assignees_url":"https://api.github.com/repos/nodejs/node/assignees{/user}","branches_url":"https://api.github.com/repos/nodejs/node/branches{/branch}","tags_url":"https://api.github.com/repos/nodejs/node/tags","blobs_url":"https://api.github.com/repos/nodejs/node/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/nodejs/node/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/nodejs/node/git/refs{/sha}","trees_url":"https://api.github.com/repos/nodejs/node/git/trees{/sha}","statuses_url":"https://api.github.com/repos/nodejs/node/statuses/{sha}","languages_url":"https://api.github.com/repos/nodejs/node/languages","stargazers_url":"https://api.github.com/repos/nodejs/node/stargazers","contributors_url":"https://api.github.com/repos/nodejs/node/contributors","subscribers_url":"https://api.github.com/repos/nodejs/node/subscribers","subscription_url":"https://api.github.com/repos/nodejs/node/subscription","commits_url":"https://api.github.com/repos/nodejs/node/commits{/sha}","git_commits_url":"https://api.github.com/repos/nodejs/node/git/commits{/sha}","comments_url":"https://api.github.com/repos/nodejs/node/comments{/number}","issue_comment_url":"https://api.github.com/repos/nodejs/node/issues/comments{/number}","contents_url":"https://api.github.com/repos/nodejs/node/contents/{+path}","compare_url":"https://api.github.com/repos/nodejs/node/compare/{base}...{head}","merges_url":"https://api.github.com/repos/nodejs/node/merges","archive_url":"https://api.github.com/repos/nodejs/node/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/nodejs/node/downloads","issues_url":"https://api.github.com/repos/nodejs/node/issues{/number}","pulls_url":"https://api.github.com/repos/nodejs/node/pulls{/number}","milestones_url":"https://api.github.com/repos/nodejs/node/milestones{/number}","notifications_url":"https://api.github.com/repos/nodejs/node/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/nodejs/node/labels{/name}","releases_url":"https://api.github.com/repos/nodejs/node/releases{/id}","deployments_url":"https://api.github.com/repos/nodejs/node/deployments","created_at":"2014-11-26T19:57:11Z","updated_at":"2017-05-31T07:50:09Z","pushed_at":"2017-05-31T07:37:08Z","git_url":"git://github.com/nodejs/node.git","ssh_url":"git@github.com:nodejs/node.git","clone_url":"https://github.com/nodejs/node.git","svn_url":"https://github.com/nodejs/node","homepage":"https://nodejs.org","size":290467,"stargazers_count":35454,"watchers_count":35454,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":6831,"mirror_url":null,"open_issues_count":958,"forks":6831,"open_issues":958,"watchers":35454,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/nodejs/node/pulls/13287"},"html":{"href":"https://github.com/nodejs/node/pull/13287"},"issue":{"href":"https://api.github.com/repos/nodejs/node/issues/13287"},"comments":{"href":"https://api.github.com/repos/nodejs/node/issues/13287/comments"},"review_comments":{"href":"https://api.github.com/repos/nodejs/node/pulls/13287/comments"},"review_comment":{"href":"https://api.github.com/repos/nodejs/node/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/nodejs/node/pulls/13287/commits"},"statuses":{"href":"https://api.github.com/repos/nodejs/node/statuses/4ba706f01f4692abcec67d0ad915e4b1f6ccdde5"}}}}
{"actor":{"display_login":"AndreasMadsen"}}