{"action":"created","comment":{"url":"https://api.github.com/repos/nodejs/node/pulls/comments/74481205","id":74481205,"diff_hunk":"@@ -0,0 +1,282 @@\n+'use strict';\n+\n+// The whole point behind this internal module is to allow Node.js to no\n+// longer be forced to treat every error message change as a semver-major\n+// change. The NodeError classes here all expose a `code` property whose\n+// value identifies the error.\n+\n+// Note: the lib/_stream_readable.js and lib/_stream_writable.js files\n+// include their own alternatives to this because those need to be portable\n+// to the readable-stream standalone module. If the logic here changes at all,\n+// then those also need to be checked.\n+\n+const kCode = Symbol('code');\n+\n+class NodeError extends Error {\n+  constructor(key, ...args) {\n+    super(message(key, args));\n+    this[kCode] = key;\n+    Error.captureStackTrace(this, NodeError);\n+  }\n+\n+  get name() {\n+    return `Error[${this[kCode]}]`;\n+  }\n+\n+  get code() {\n+    return this[kCode];\n+  }\n+}\n+\n+class NodeTypeError extends TypeError {\n+  constructor(key, ...args) {\n+    super(message(key, args));\n+    this[kCode] = key;\n+    Error.captureStackTrace(this, NodeTypeError);\n+  }\n+\n+  get name() {\n+    return `TypeError[${this[kCode]}]`;\n+  }\n+\n+  get code() {\n+    return this[kCode];\n+  }\n+}\n+\n+class NodeRangeError extends RangeError {\n+  constructor(key, ... args) {\n+    super(message(key, args));\n+    this[kCode] = key;\n+    Error.captureStackTrace(this, NodeRangeError);\n+  }\n+\n+  get name() {\n+    return `RangeError[${this[kCode]}]`;\n+  }\n+\n+  get code() {\n+    return this[kCode];\n+  }\n+}\n+\n+exports.Error = NodeError;\n+exports.TypeError = NodeTypeError;\n+exports.RangeError = NodeRangeError;\n+\n+var assert, util;\n+function lazyAssert() {\n+  if (!assert)\n+    assert = require('assert');\n+  return assert;\n+}\n+\n+function lazyUtil() {\n+  if (!util)\n+    util = require('util');\n+  return util;\n+}\n+\n+function message(key, args) {\n+  const assert = lazyAssert();\n+  const util = lazyUtil();\n+  const msg = Error[Symbol.for(key)];\n+  // We want to assert here because if this happens,\n+  // Node.js is doing something incorrect.\n+  assert(msg, `An invalid error message key was used: ${key}.`);\n+  let fmt = util.format;\n+  if (typeof msg === 'function') {\n+    fmt = msg;\n+  } else {\n+    args.unshift(msg);\n+  }\n+  const res = fmt.apply(null, args);\n+  // We want to assert here because if this happens,\n+  // Node.js is doing something incorrect.\n+  assert(res, 'An invalid formatted error message was returned.');\n+  return res;\n+}\n+\n+// Below is the catalog of messages\n+// Error keys should be all caps, value can\n+// be a string formatted for use with\n+// util.format, or a function.\n+\n+// Utility function for registering the error codes.\n+function E(sym, val) {\n+  Error[Symbol.for(sym)] = val;\n+}\n+\n+E('ARGNOTNUM', argNotNum);\n+E('ASSERTIONERROR', (msg) => msg);\n+E('BUFFERLIST',\n+  '\"buffer\" list argument must contain only Buffers or strings');\n+E('BUFFERSWAP16', 'Buffer size must be a multiple of 16-bits');\n+E('BUFFERSWAP32', 'Buffer size must be a multiple of 32-bits');\n+E('BUFFERTOOLARGE', bufferTooBig);\n+E('CALLBACKREQUIRED', 'The required \"callback\" argument is not a function');\n+E('CHANNELCLOSED', 'Channel closed');\n+E('CLOSEDBEFOREREPLY', 'Slave closed before reply');\n+E('CONSOLEWRITABLE', 'Console expects a writable stream instance');\n+E('DNSUNKNOWNDOMAIN', 'Unable to determine the domain name');\n+E('ECONNRESET', 'Socket hang up');\n+E('FILETOOBIG', fileTooBig);\n+E('HEADERSSENT',\n+  'Unable to set additional headers after they are already sent');\n+E('HTTPINVALIDHEADER', 'The header content contains invalid characters');\n+E('HTTPINVALIDPATH', 'Request path contains unescaped characters');\n+E('HTTPINVALIDSTATUS', (status) => `Invalid status code: ${status}`);\n+E('HTTPINVALIDTOKEN', (val) => `Invalid HTTP token: ${val}`);\n+E('HTTPINVALIDTRAILER', 'The trailer content contains invalid characters');\n+E('HTTPMETHODINVALID', 'Method must be a valid HTTP token');\n+E('HTTPUNSUPPORTEDPROTOCOL', unsupportedProtocol);\n+E('INDEXOUTOFRANGE', 'Index out of range');\n+E('INVALIDARG', invalidArgument);\n+E('INVALIDARGVALUE', invalidArgumentValue);\n+E('INVALIDFAMILY', 'IP protocol family must be either 4 or 6');\n+E('INVALIDOPT', invalidOption);\n+E('INVALIDOPTVALUE', invalidOptionValue);\n+E('INVALIDPID', 'Invalid pid');\n+E('IPCBADHANDLE', 'Handles of this type cannot be sent');\n+E('IPCBUFFERASYNCFORK',\n+  (stdio) => `Asynchronous forks do not support Buffer input: ${stdio}`);\n+E('IPCDISCONNECTED', 'The IPC channel is already disconnected');\n+E('IPCNOSYNCFORK', 'IPC cannot be used with synchronous forks');\n+E('IPCONEIPC', 'Child process can have only one IPC pipe');\n+E('NOCPUUSAGE', (err) => `Unable to obtain CPU Usage: ${err}`);\n+E('NOCRYPTO', 'Node.js is not compiled with openssl crypto support');\n+E('NOTIMPLEMENTED', notImplemented);\n+E('OUTOFBOUNDSARG', (arg) => `\"${arg}\" argument is out of bounds`);\n+E('PORTRANGE', '\"port\" argument must be a number >= 0 and < 65536');\n+E('PROTOTYPEREQUIRED',\n+  'The super constructor to \"inherits\" must have a prototype');\n+E('REPLHISTORYPARSE', (path) => `Could not parse history data in ${path}`);\n+E('REQUIREDARG', requiredArgument);\n+E('STDERRCLOSE', 'process.stderr cannot be closed');\n+E('STDOUTCLOSE', 'process.stdout cannot be closed');\n+E('UNKNOWNENCODING', (enc) => `Unknown encoding: ${enc}`);\n+E('UNKNOWNSIGNAL', (sig) => `Unknown signal: ${sig}`);\n+E('UNKNOWNSTATE', 'Unknown state');\n+E('WRITEOUTOFBOUNDS', 'Write out of bounds');\n+\n+// Utility methods for the messages above\n+\n+function bufferTooBig(max) {\n+  const assert = lazyAssert();\n+  assert(max !== undefined);\n+  return 'Cannot create final Buffer. It would be larger ' +\n+         `than 0x${max.toString(16)} bytes`;\n+}\n+\n+function fileTooBig(arg) {\n+  const assert = lazyAssert();\n+  assert(arg !== undefined);\n+  return 'File size is greater than possible Buffer: ' +\n+         `0x${arg.toString(16)} bytes`;\n+}\n+\n+function unsupportedProtocol(protocol, expected) {\n+  let msg = `Protocol \"${protocol}\" is not supported`;\n+  if (expected) {\n+    msg += `. Expected \"${expected}\"`;\n+  }\n+  return msg;\n+}\n+\n+function notImplemented(additional) {\n+  let msg = 'Not implemented';\n+  if (additional)\n+    msg += `: ${additional}`;\n+  return msg;\n+}\n+\n+function invalidOptionValue(opt, val) {\n+  const assert = lazyAssert();\n+  assert(opt);\n+  let msg = `Invalid value for \"${opt}\" option`;\n+  if (val)\n+    msg += `: ${val}`;\n+  return msg;\n+}\n+\n+function invalidArgumentValue(arg, val) {\n+  const assert = lazyAssert();\n+  assert(arg);\n+  let msg = `Invalid value for \"${arg}\" argument`;\n+  if (val)\n+    msg += `: ${val}`;\n+  return msg;\n+}\n+\n+function argNotNum(arg) {\n+  const assert = lazyAssert();\n+  assert(arg);\n+  return `\"${arg}\" argument must not be a number`;\n+}\n+\n+function requiredArgument(arg) {\n+  const assert = lazyAssert();\n+  assert(arg);\n+  return `\"${arg}\" argument is required and cannot be undefined`;\n+}\n+\n+function invalidArgument(arg, expected) {\n+  return invalidOptionOrArgument(true, arg, expected);\n+}\n+\n+function invalidOption(opt, expected) {\n+  return invalidOptionOrArgument(false, opt, expected);\n+}\n+\n+function formatArg(arg) {\n+  if (typeof arg === 'number') {\n+    arg >>>= 0;\n+    switch (arg) {\n+      case 1:\n+        arg = 'The first';\n+        break;\n+      case 2:\n+        arg = 'The second';\n+        break;\n+      case 3:\n+        arg = 'The third';\n+        break;\n+      default:\n+        arg = `The ${arg}th`;\n+    }\n+  } else {\n+    arg = `\"${arg}\"`;\n+  }\n+  return arg;\n+}\n+\n+// This takes an arg name and one or more expected types to generate an\n+// appropriate error message indicating that the given argument must be\n+// of the expected type. For instance:\n+//  \"foo\" argument must be a string\n+//  \"bar\" argument must be an object\n+//  \"baz\" argument must be one of: string, object\n+//  first argument must be a string\n+//  ... and so forth.\n+function invalidOptionOrArgument(isargument, arg, expected) {\n+  const assert = lazyAssert();\n+  const util = lazyUtil();\n+  assert(arg && expected);\n+  // Is this error message for an argument or an option?\n+  const what = isargument ? 'argument' : 'option';\n+  if (typeof expected === 'string') {\n+    // Check to see if we need \"a\" or \"an\".\n+    const ch = expected.codePointAt(0) | 0x20;","path":"lib/internal/errors.js","position":269,"original_position":269,"commit_id":"7a1b47f329f2e6481ef8f54951570197fd98378d","original_commit_id":"7a1b47f329f2e6481ef8f54951570197fd98378d","user":{"login":"ChALkeR","id":291301,"avatar_url":"https://avatars.githubusercontent.com/u/291301?v=3","gravatar_id":"","url":"https://api.github.com/users/ChALkeR","html_url":"https://github.com/ChALkeR","followers_url":"https://api.github.com/users/ChALkeR/followers","following_url":"https://api.github.com/users/ChALkeR/following{/other_user}","gists_url":"https://api.github.com/users/ChALkeR/gists{/gist_id}","starred_url":"https://api.github.com/users/ChALkeR/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ChALkeR/subscriptions","organizations_url":"https://api.github.com/users/ChALkeR/orgs","repos_url":"https://api.github.com/users/ChALkeR/repos","events_url":"https://api.github.com/users/ChALkeR/events{/privacy}","received_events_url":"https://api.github.com/users/ChALkeR/received_events","type":"User","site_admin":false},"body":"This probably needs a comment, though.","created_at":"2016-08-11T18:51:57Z","updated_at":"2016-08-11T18:51:57Z","html_url":"https://github.com/nodejs/node/pull/6573#discussion_r74481205","pull_request_url":"https://api.github.com/repos/nodejs/node/pulls/6573","_links":{"self":{"href":"https://api.github.com/repos/nodejs/node/pulls/comments/74481205"},"html":{"href":"https://github.com/nodejs/node/pull/6573#discussion_r74481205"},"pull_request":{"href":"https://api.github.com/repos/nodejs/node/pulls/6573"}}},"pull_request":{"url":"https://api.github.com/repos/nodejs/node/pulls/6573","id":68902566,"html_url":"https://github.com/nodejs/node/pull/6573","diff_url":"https://github.com/nodejs/node/pull/6573.diff","patch_url":"https://github.com/nodejs/node/pull/6573.patch","issue_url":"https://api.github.com/repos/nodejs/node/issues/6573","number":6573,"state":"open","locked":false,"title":"errors: add internal/errors module","user":{"login":"jasnell","id":439929,"avatar_url":"https://avatars.githubusercontent.com/u/439929?v=3","gravatar_id":"","url":"https://api.github.com/users/jasnell","html_url":"https://github.com/jasnell","followers_url":"https://api.github.com/users/jasnell/followers","following_url":"https://api.github.com/users/jasnell/following{/other_user}","gists_url":"https://api.github.com/users/jasnell/gists{/gist_id}","starred_url":"https://api.github.com/users/jasnell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jasnell/subscriptions","organizations_url":"https://api.github.com/users/jasnell/orgs","repos_url":"https://api.github.com/users/jasnell/repos","events_url":"https://api.github.com/users/jasnell/events{/privacy}","received_events_url":"https://api.github.com/users/jasnell/received_events","type":"User","site_admin":false},"body":"##### Checklist\r\n\r\n- [x] tests and code linting passes\r\n- [x] a test and/or benchmark is included\r\n- [ ] documentation is changed or added\r\n- [x] the commit message follows commit guidelines\r\n\r\n##### Affected core subsystem(s)\r\n\r\nerrors (new subsystem)\r\n\r\n##### Description of change\r\n\r\n*Note: This is a **work in progress**. I am opening the PR to begin the discussion about the overall design. I will be iterating based on the feedback. This is far from being ready to land in it's current state.*\r\n\r\nThis is *step one* to making it so that *changes to error messages are not forced to be semver-major changes* any more. The internal errors.js module exports three custom error class instances that use an assigned static error code to look up the error message. The message itself can change but the error code would remain the same. Changes to error code would still be considered semver-major, but changes to the messages themselves would not be.\r\n\r\nThis also updates the Error objects created in lib/internal to use the new mechanism, changing and streamlining several of the error messages in the process. Obviously, this is a semver-major change on it's own.\r\n\r\nSeveral test cases were also modified and a new common.throws method added to test/common.js that understands the new code mechanism. This is added common.js so that the existing assert module api is unchanged.\r\n\r\n*Update*: This PR is purposefully being held back from landing until we are closer to actually releasing v7. Until then, it will need to be periodically updated to pick up any other changes in error handling that land. PRs are welcome. Please label any other PRs that affect error handling with the `error-handling` label so that those can be easily tracked.","created_at":"2016-05-04T17:43:27Z","updated_at":"2016-08-11T18:51:57Z","closed_at":null,"merged_at":null,"merge_commit_sha":"4c29abf5f6c3562c054471eb23112d6575be3392","assignee":null,"assignees":[],"milestone":{"url":"https://api.github.com/repos/nodejs/node/milestones/15","html_url":"https://github.com/nodejs/node/milestones/7.0.0","labels_url":"https://api.github.com/repos/nodejs/node/milestones/15/labels","id":1582957,"number":15,"title":"7.0.0","description":"","creator":{"login":"targos","id":2352663,"avatar_url":"https://avatars.githubusercontent.com/u/2352663?v=3","gravatar_id":"","url":"https://api.github.com/users/targos","html_url":"https://github.com/targos","followers_url":"https://api.github.com/users/targos/followers","following_url":"https://api.github.com/users/targos/following{/other_user}","gists_url":"https://api.github.com/users/targos/gists{/gist_id}","starred_url":"https://api.github.com/users/targos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/targos/subscriptions","organizations_url":"https://api.github.com/users/targos/orgs","repos_url":"https://api.github.com/users/targos/repos","events_url":"https://api.github.com/users/targos/events{/privacy}","received_events_url":"https://api.github.com/users/targos/received_events","type":"User","site_admin":false},"open_issues":12,"closed_issues":12,"state":"open","created_at":"2016-02-15T10:30:21Z","updated_at":"2016-08-11T17:21:01Z","due_on":"2016-09-30T04:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/nodejs/node/pulls/6573/commits","review_comments_url":"https://api.github.com/repos/nodejs/node/pulls/6573/comments","review_comment_url":"https://api.github.com/repos/nodejs/node/pulls/comments{/number}","comments_url":"https://api.github.com/repos/nodejs/node/issues/6573/comments","statuses_url":"https://api.github.com/repos/nodejs/node/statuses/7a1b47f329f2e6481ef8f54951570197fd98378d","head":{"label":"jasnell:no-major-errors","ref":"no-major-errors","sha":"7a1b47f329f2e6481ef8f54951570197fd98378d","user":{"login":"jasnell","id":439929,"avatar_url":"https://avatars.githubusercontent.com/u/439929?v=3","gravatar_id":"","url":"https://api.github.com/users/jasnell","html_url":"https://github.com/jasnell","followers_url":"https://api.github.com/users/jasnell/followers","following_url":"https://api.github.com/users/jasnell/following{/other_user}","gists_url":"https://api.github.com/users/jasnell/gists{/gist_id}","starred_url":"https://api.github.com/users/jasnell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jasnell/subscriptions","organizations_url":"https://api.github.com/users/jasnell/orgs","repos_url":"https://api.github.com/users/jasnell/repos","events_url":"https://api.github.com/users/jasnell/events{/privacy}","received_events_url":"https://api.github.com/users/jasnell/received_events","type":"User","site_admin":false},"repo":{"id":37868459,"name":"node","full_name":"jasnell/node","owner":{"login":"jasnell","id":439929,"avatar_url":"https://avatars.githubusercontent.com/u/439929?v=3","gravatar_id":"","url":"https://api.github.com/users/jasnell","html_url":"https://github.com/jasnell","followers_url":"https://api.github.com/users/jasnell/followers","following_url":"https://api.github.com/users/jasnell/following{/other_user}","gists_url":"https://api.github.com/users/jasnell/gists{/gist_id}","starred_url":"https://api.github.com/users/jasnell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jasnell/subscriptions","organizations_url":"https://api.github.com/users/jasnell/orgs","repos_url":"https://api.github.com/users/jasnell/repos","events_url":"https://api.github.com/users/jasnell/events{/privacy}","received_events_url":"https://api.github.com/users/jasnell/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jasnell/node","description":"Future Node.js releases will be based on io.js","fork":true,"url":"https://api.github.com/repos/jasnell/node","forks_url":"https://api.github.com/repos/jasnell/node/forks","keys_url":"https://api.github.com/repos/jasnell/node/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jasnell/node/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jasnell/node/teams","hooks_url":"https://api.github.com/repos/jasnell/node/hooks","issue_events_url":"https://api.github.com/repos/jasnell/node/issues/events{/number}","events_url":"https://api.github.com/repos/jasnell/node/events","assignees_url":"https://api.github.com/repos/jasnell/node/assignees{/user}","branches_url":"https://api.github.com/repos/jasnell/node/branches{/branch}","tags_url":"https://api.github.com/repos/jasnell/node/tags","blobs_url":"https://api.github.com/repos/jasnell/node/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jasnell/node/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jasnell/node/git/refs{/sha}","trees_url":"https://api.github.com/repos/jasnell/node/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jasnell/node/statuses/{sha}","languages_url":"https://api.github.com/repos/jasnell/node/languages","stargazers_url":"https://api.github.com/repos/jasnell/node/stargazers","contributors_url":"https://api.github.com/repos/jasnell/node/contributors","subscribers_url":"https://api.github.com/repos/jasnell/node/subscribers","subscription_url":"https://api.github.com/repos/jasnell/node/subscription","commits_url":"https://api.github.com/repos/jasnell/node/commits{/sha}","git_commits_url":"https://api.github.com/repos/jasnell/node/git/commits{/sha}","comments_url":"https://api.github.com/repos/jasnell/node/comments{/number}","issue_comment_url":"https://api.github.com/repos/jasnell/node/issues/comments{/number}","contents_url":"https://api.github.com/repos/jasnell/node/contents/{+path}","compare_url":"https://api.github.com/repos/jasnell/node/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jasnell/node/merges","archive_url":"https://api.github.com/repos/jasnell/node/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jasnell/node/downloads","issues_url":"https://api.github.com/repos/jasnell/node/issues{/number}","pulls_url":"https://api.github.com/repos/jasnell/node/pulls{/number}","milestones_url":"https://api.github.com/repos/jasnell/node/milestones{/number}","notifications_url":"https://api.github.com/repos/jasnell/node/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jasnell/node/labels{/name}","releases_url":"https://api.github.com/repos/jasnell/node/releases{/id}","deployments_url":"https://api.github.com/repos/jasnell/node/deployments","created_at":"2015-06-22T17:01:18Z","updated_at":"2016-01-11T18:47:43Z","pushed_at":"2016-08-10T19:02:08Z","git_url":"git://github.com/jasnell/node.git","ssh_url":"git@github.com:jasnell/node.git","clone_url":"https://github.com/jasnell/node.git","svn_url":"https://github.com/jasnell/node","homepage":"https://iojs.org","size":216639,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3,"mirror_url":null,"open_issues_count":1,"forks":3,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"nodejs:master","ref":"master","sha":"51d45db246746e85efc95ff412d2a5164ad20738","user":{"login":"nodejs","id":9950313,"avatar_url":"https://avatars.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://avatars.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":"2016-08-11T18:51:52Z","pushed_at":"2016-08-11T18:48:56Z","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":289539,"stargazers_count":25659,"watchers_count":25659,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3931,"mirror_url":null,"open_issues_count":726,"forks":3931,"open_issues":726,"watchers":25659,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/nodejs/node/pulls/6573"},"html":{"href":"https://github.com/nodejs/node/pull/6573"},"issue":{"href":"https://api.github.com/repos/nodejs/node/issues/6573"},"comments":{"href":"https://api.github.com/repos/nodejs/node/issues/6573/comments"},"review_comments":{"href":"https://api.github.com/repos/nodejs/node/pulls/6573/comments"},"review_comment":{"href":"https://api.github.com/repos/nodejs/node/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/nodejs/node/pulls/6573/commits"},"statuses":{"href":"https://api.github.com/repos/nodejs/node/statuses/7a1b47f329f2e6481ef8f54951570197fd98378d"}}}}
{"actor":{"display_login":"ChALkeR"}}